From 2dde66e96a3785ea1389be3912b3a6344f33d085 Mon Sep 17 00:00:00 2001 From: Bryan Forbes Date: Tue, 17 Jul 2018 17:47:51 -0500 Subject: [PATCH 1/5] Updates for 3.0 --- npm-shrinkwrap.json => package-lock.json | 12864 +++++++--------- package.json | 17 +- src/template/custom-element.js | 2 +- tarballs/dojo-cli-3.0.0-alpha.1.tgz | Bin 0 -> 34982 bytes tarballs/dojo-framework-3.0.0-pre.tgz | Bin 0 -> 525017 bytes .../dojo-webpack-contrib-3.0.0-alpha.1.tgz | Bin 0 -> 43780 bytes tarballs/grunt-dojo2-3.0.0-pre.tgz | Bin 0 -> 66572 bytes .../unix/dev/menu-item/menu-item-1.0.0.js | 529 +- test-app/fixtures/unix/dev/menu/menu-1.0.0.js | 529 +- .../unix/dist/menu-item/menu-item-1.0.0.js | 4 +- .../dist/menu-item/menu-item-1.0.0.js.map | 2 +- .../fixtures/unix/dist/menu/menu-1.0.0.js | 4 +- .../fixtures/unix/dist/menu/menu-1.0.0.js.map | 2 +- .../fixtures/unix/info/menu-item/report.html | 2 +- .../fixtures/unix/info/menu-item/stats.json | 2944 ++-- test-app/fixtures/unix/info/menu/report.html | 2 +- test-app/fixtures/unix/info/menu/stats.json | 2948 ++-- test-app/fixtures/unix/test/functional.js | 2 +- test-app/fixtures/unix/test/unit.js | 500 +- test-app/npm-shrinkwrap.json | 3721 ----- test-app/package-lock.json | 2968 ++++ test-app/package.json | 13 +- test-app/src/menu-item/MenuItem.ts | 10 +- test-app/src/menu/Menu.ts | 10 +- test-app/tests/unit/menu-item/MenuItem.ts | 4 +- test-app/tests/unit/menu/Menu.ts | 4 +- tsconfig.json | 22 +- 27 files changed, 12318 insertions(+), 14785 deletions(-) rename npm-shrinkwrap.json => package-lock.json (61%) create mode 100644 tarballs/dojo-cli-3.0.0-alpha.1.tgz create mode 100644 tarballs/dojo-framework-3.0.0-pre.tgz create mode 100644 tarballs/dojo-webpack-contrib-3.0.0-alpha.1.tgz create mode 100644 tarballs/grunt-dojo2-3.0.0-pre.tgz delete mode 100644 test-app/npm-shrinkwrap.json create mode 100644 test-app/package-lock.json diff --git a/npm-shrinkwrap.json b/package-lock.json similarity index 61% rename from npm-shrinkwrap.json rename to package-lock.json index bead97e..0b7d976 100644 --- a/npm-shrinkwrap.json +++ b/package-lock.json @@ -1,62 +1,37 @@ { "name": "@dojo/cli-build-widget", - "version": "2.0.4", + "version": "3.0.0-pre", "lockfileVersion": 1, "requires": true, "dependencies": { "@dojo/cli": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@dojo/cli/-/cli-2.0.0.tgz", - "integrity": "sha512-MIJDEZOE9rQuch31NF24QvpvewzB9h6pj2qrXcjaj2/PYmIHBGlcAOCRZ/JBesPjbYTwasU4pqygTsf2mQt0zA==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "cliui": "4.1.0", - "configstore": "3.1.2", - "cross-spawn": "5.1.0", - "detect-indent": "5.0.0", - "ejs": "2.5.9", - "execa": "0.8.0", - "fs-extra": "5.0.0", - "globby": "6.1.0", - "inquirer": "4.0.2", - "pkg-dir": "2.0.0", - "slice-ansi": "1.0.0", - "string-width": "2.1.1", - "tslib": "1.8.1", - "typings-core": "2.3.3", - "update-notifier": "2.5.0", - "yargs": "10.1.2" + "version": "file:tarballs/dojo-cli-3.0.0-alpha.1.tgz", + "integrity": "sha512-7gZf944+7Y5/4e7LenbOCC+07AL3tMVKFt2E9TZDdTrnStg9OJGQzsgWp5FkXs0vWIOMNFNjeGlqaCb1u75/rg==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "cliui": "^4.0.0", + "configstore": "^3.1.1", + "cross-spawn": "^5.1.0", + "detect-indent": "^5.0.0", + "ejs": "^2.5.7", + "execa": "^0.8.0", + "fs-extra": "^5.0.0", + "globby": "^6.0.0", + "inquirer": "^4.0.2", + "pkg-dir": "^2.0.0", + "slice-ansi": "^1.0.0", + "string-width": "^2.1.1", + "tslib": "~1.8.1", + "typings-core": "^2.3.3", + "update-notifier": "^2.3.0", + "yargs": "^10.0.3" }, "dependencies": { - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "2.1.1" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.3.0", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.0" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "cliui": { @@ -65,66 +40,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" - } - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.2.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "globby": { @@ -133,143 +51,84 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "4.0.1" - } - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0", - "semver": "5.5.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "number-is-nan": "^1.0.0" } }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "tslib": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", + "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", "dev": true }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "1.3.0", - "chalk": "2.3.0", - "configstore": "3.1.2", - "import-lazy": "2.1.0", - "is-ci": "1.1.0", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" - } - }, - "widest-line": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", - "dev": true, - "requires": { - "string-width": "2.1.1" - } - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, "yargs": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "8.1.0" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" } }, "yargs-parser": { @@ -278,67 +137,66 @@ "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } }, "@dojo/core": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@dojo/core/-/core-0.1.0.tgz", - "integrity": "sha512-boiwQHfV7idOZfZnDzgLrofS2LA7ELGKjd6tl0/hLBunJ3psozAd4CpNcT7XC00/OPYFIxVHFEpI+FZNlpUgfw==", - "dev": true + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@dojo/core/-/core-0.5.0.tgz", + "integrity": "sha512-kEyKjH/HRMf7rXxFiOvM0Lco8fPcoGtECZx8kr2tskgrIBPN8F3aaRTT8GZ9duUjoIp953RK8ggbMzBt7+ap+Q==", + "dev": true, + "requires": { + "tslib": "~1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", + "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", + "dev": true + } + } }, "@dojo/has": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@dojo/has/-/has-2.0.0.tgz", - "integrity": "sha512-WFdsD2jVqsLvOTtEs8Q9TlJF7f0VgO8NXRccuOPKjw9tXKvB6XrnZjGgh+zkLxOUrm8m3rExMu8MHGM8ZHLPPQ==" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@dojo/has/-/has-0.1.2.tgz", + "integrity": "sha512-122xXU9xHjG/EayITIAiIdKVphZTZ2wM9IEBArarkBQzXZP1shGAbTJq7NHWUoTemw48tvTxr+OOi7wVCm7IXg==", + "dev": true }, "@dojo/interfaces": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@dojo/interfaces/-/interfaces-0.1.0.tgz", - "integrity": "sha512-rpBALDc5Ya/+JrlyFvrt7wKGdGA1xq2gSFGce6j3L9meB8tAFYQvs/bx9DDp+CSdpEzzeVZWr8C4FpoUId2New==", - "dev": true + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@dojo/interfaces/-/interfaces-0.2.1.tgz", + "integrity": "sha512-/bIJJb9q02MxSlfA9G3n6AMTlD80fDx7qDRss/8HxeJ26ix/F/tCnX521c3XrWm/HOBEWp7GiRX5E0hQdIuCNw==", + "dev": true, + "requires": { + "@types/yargs": "^8.0.2" + } }, "@dojo/shim": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@dojo/shim/-/shim-2.0.0.tgz", - "integrity": "sha512-v/zD80U+8ajNrfxwKH6yy//l6ATQ/LzeYVXcqmBkGQ0NA4vDujLS3ceF3Wt0XL55JXLUYaVSQACMqy0H9DPD3A==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@dojo/shim/-/shim-0.2.7.tgz", + "integrity": "sha512-3R/n4a1/17acl9S5Wtay/0rcKzUqtVVJkCLPrGZq4NmRzWop09Unryqg/GV0Y1V7SbcILHKBL7bOTEfrpVX63g==", + "dev": true, "requires": { "intersection-observer": "0.4.2", "pepjs": "0.4.2", - "tslib": "1.8.1", + "tslib": "~1.8.0", "web-animations-js": "2.3.1" - } - }, - "@dojo/webpack-contrib": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@dojo/webpack-contrib/-/webpack-contrib-2.0.0.tgz", - "integrity": "sha512-k9GgDo5JzCmz1q9sjyhBZOEmix/l5ETFNAenLNS8FfN1Oc5jgfMfNh7tsv58bh8apBj8VHOVPE7IesRuBhHOFw==", - "requires": { - "@dojo/shim": "2.0.0", - "copy-webpack-plugin": "4.0.1", - "filter-css": "0.1.2", - "html-webpack-include-assets-plugin": "1.0.2", - "jsdom": "11.6.2", - "loader-utils": "1.1.0", - "recast": "0.12.7", - "source-map": "0.6.1", - "ts-loader": "3.1.1", - "typed-css-modules": "0.3.1", - "typescript": "2.6.2" }, "dependencies": { - "typescript": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", - "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=" + "tslib": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", + "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", + "dev": true } } }, "@sinonjs/formatio": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", "dev": true, "requires": { @@ -346,61 +204,63 @@ } }, "@theintern/digdug": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@theintern/digdug/-/digdug-2.0.4.tgz", - "integrity": "sha512-BTcYNMxOnGlTEaOYqab9WygE2sLz9ZRWRsuTwUttceewzEDn/Ok/4lWdIgwwX+bb3MybvFPU1wBkq8Co+Bfqyw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@theintern/digdug/-/digdug-2.1.2.tgz", + "integrity": "sha512-r1QjsLCeBk6UiK2nA6g3P+nc5V/drSU6w8zmvEWIsCl397xog1h6yEovu8V9KVjISL2LbyyOLEGGnNDSlEpcVQ==", "dev": true, "requires": { - "@dojo/core": "0.3.1", - "@dojo/has": "0.1.2", - "@dojo/interfaces": "0.2.1", - "@dojo/shim": "0.2.7", - "decompress": "4.2.0", - "semver": "5.4.1", - "tslib": "1.8.1" + "@dojo/core": "~2.0.0", + "@dojo/has": "~2.0.0", + "@dojo/interfaces": "~0.2.0", + "@dojo/shim": "~2.0.0", + "command-exists": "~1.2.6", + "decompress": "~4.2.0", + "semver": "~5.5.0", + "tslib": "~1.9.0" }, "dependencies": { "@dojo/core": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@dojo/core/-/core-0.3.1.tgz", - "integrity": "sha512-PEwqxpsuTTG0b2wwy0TLHEFf/R6ZBE4zizo4EXzGUVRc5O44w5Hbn+NN48v/o8hwQRKxmX3ywLI0Z1CMZ6NM6w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@dojo/core/-/core-2.0.0.tgz", + "integrity": "sha512-iojqMIn49L/bwv/Ryy2v7qKeioHxjHQqJNLhEXBJ+zJoQ47IeG92Y5tmdGsZ6SKZk6sFuWHl7gL9Wbw0qVySHw==", "dev": true, "requires": { - "tslib": "1.8.1" + "tslib": "~1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", + "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", + "dev": true + } } }, "@dojo/has": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@dojo/has/-/has-0.1.2.tgz", - "integrity": "sha512-122xXU9xHjG/EayITIAiIdKVphZTZ2wM9IEBArarkBQzXZP1shGAbTJq7NHWUoTemw48tvTxr+OOi7wVCm7IXg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@dojo/has/-/has-2.0.0.tgz", + "integrity": "sha512-WFdsD2jVqsLvOTtEs8Q9TlJF7f0VgO8NXRccuOPKjw9tXKvB6XrnZjGgh+zkLxOUrm8m3rExMu8MHGM8ZHLPPQ==", "dev": true }, - "@dojo/interfaces": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@dojo/interfaces/-/interfaces-0.2.1.tgz", - "integrity": "sha512-/bIJJb9q02MxSlfA9G3n6AMTlD80fDx7qDRss/8HxeJ26ix/F/tCnX521c3XrWm/HOBEWp7GiRX5E0hQdIuCNw==", - "dev": true, - "requires": { - "@types/yargs": "8.0.2" - } - }, "@dojo/shim": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@dojo/shim/-/shim-0.2.7.tgz", - "integrity": "sha512-3R/n4a1/17acl9S5Wtay/0rcKzUqtVVJkCLPrGZq4NmRzWop09Unryqg/GV0Y1V7SbcILHKBL7bOTEfrpVX63g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@dojo/shim/-/shim-2.0.0.tgz", + "integrity": "sha512-v/zD80U+8ajNrfxwKH6yy//l6ATQ/LzeYVXcqmBkGQ0NA4vDujLS3ceF3Wt0XL55JXLUYaVSQACMqy0H9DPD3A==", "dev": true, "requires": { "intersection-observer": "0.4.2", "pepjs": "0.4.2", - "tslib": "1.8.1", + "tslib": "~1.8.0", "web-animations-js": "2.3.1" + }, + "dependencies": { + "tslib": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", + "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", + "dev": true + } } - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true } } }, @@ -409,91 +269,53 @@ "resolved": "https://registry.npmjs.org/@theintern/istanbul-loader/-/istanbul-loader-1.0.0-beta.1.tgz", "integrity": "sha512-Iwrn+9v+OvLXJkvOR6IuxzYaLaG02XtlDiguArHxQZhQkRFXKf1edlAhUvbE886UKM5q4KIaB9NG7F7Ikjy8TA==", "requires": { - "@types/istanbul-lib-instrument": "1.7.1", - "@types/source-map": "0.5.7", - "@types/webpack": "3.0.14", - "source-map": "0.5.7" + "@types/istanbul-lib-instrument": "~1.7.0", + "@types/source-map": "~0.5.1", + "@types/webpack": "~3.0.10", + "source-map": "~0.5.7" }, "dependencies": { + "@types/node": { + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.2.tgz", + "integrity": "sha512-m9zXmifkZsMHZBOyxZWilMwmTlpC8x5Ty360JKTiXvlXZfBWYpsg9ZZvP/Ye+iZUh+Q+MxDLjItVTWIsfwz+8Q==" + }, "@types/tapable": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.2.tgz", - "integrity": "sha512-42zEJkBpNfMEAvWR5WlwtTH22oDzcMjFsL9gDGExwF8X8WvAiw7Vwop7hPw03QT8TKfec83LwbHj6SvpqM4ELQ==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.4.tgz", + "integrity": "sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ==" }, "@types/webpack": { "version": "3.0.14", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-3.0.14.tgz", "integrity": "sha512-HkN9be7+47PsMH+WjnhtoOpypaUgmpgggwL/P0r8fT7mzuw7c4cpho8eTsnrMz9Fdj35TBnqRcuxG/U7ZcDRJg==", "requires": { - "@types/node": "10.0.2", - "@types/tapable": "1.0.2", - "@types/uglify-js": "3.0.2" + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*" } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, "@theintern/leadfoot": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@theintern/leadfoot/-/leadfoot-2.0.3.tgz", - "integrity": "sha512-J9wLAMjAU+Wyv5jGmHdVN4xnuyaD24kK7mAoLUPBLRNxflkJoTo9Ph5g4BKUHp+xpKd/IMU00ulgMMf++Xqm4A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@theintern/leadfoot/-/leadfoot-2.1.0.tgz", + "integrity": "sha512-GRl2RUMVOBDFAPHzMTH5vI+MvZNfhmMeb0vh640q4BMVZqoxXmIbRtW5bcJ3M580u56CcrMDCauLAYqQ5NUjFw==", "dev": true, "requires": { - "@dojo/core": "0.3.1", - "@dojo/has": "0.1.2", - "@dojo/interfaces": "0.2.1", - "@dojo/shim": "0.2.7", - "@types/jszip": "0.0.33", - "jszip": "3.1.5", - "tslib": "1.8.1" - }, - "dependencies": { - "@dojo/core": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@dojo/core/-/core-0.3.1.tgz", - "integrity": "sha512-PEwqxpsuTTG0b2wwy0TLHEFf/R6ZBE4zizo4EXzGUVRc5O44w5Hbn+NN48v/o8hwQRKxmX3ywLI0Z1CMZ6NM6w==", - "dev": true, - "requires": { - "tslib": "1.8.1" - } - }, - "@dojo/has": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@dojo/has/-/has-0.1.2.tgz", - "integrity": "sha512-122xXU9xHjG/EayITIAiIdKVphZTZ2wM9IEBArarkBQzXZP1shGAbTJq7NHWUoTemw48tvTxr+OOi7wVCm7IXg==", - "dev": true - }, - "@dojo/interfaces": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@dojo/interfaces/-/interfaces-0.2.1.tgz", - "integrity": "sha512-/bIJJb9q02MxSlfA9G3n6AMTlD80fDx7qDRss/8HxeJ26ix/F/tCnX521c3XrWm/HOBEWp7GiRX5E0hQdIuCNw==", - "dev": true, - "requires": { - "@types/yargs": "8.0.2" - } - }, - "@dojo/shim": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@dojo/shim/-/shim-0.2.7.tgz", - "integrity": "sha512-3R/n4a1/17acl9S5Wtay/0rcKzUqtVVJkCLPrGZq4NmRzWop09Unryqg/GV0Y1V7SbcILHKBL7bOTEfrpVX63g==", - "dev": true, - "requires": { - "intersection-observer": "0.4.2", - "pepjs": "0.4.2", - "tslib": "1.8.1", - "web-animations-js": "2.3.1" - } - } + "@dojo/core": "~0.5.0", + "@dojo/has": "~0.1.2", + "@dojo/interfaces": "~0.2.1", + "@dojo/shim": "~0.2.7", + "@types/jszip": "~3.1.3", + "jszip": "~3.1.3", + "tslib": "~1.9.0" } }, "@types/babel-types": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.1.tgz", - "integrity": "sha512-EkcOk09rjhivbovP8WreGRbXW20YRfe/qdgXOGq3it3u3aAOWDRNsQhL/XPAWFF7zhZZ+uR+nT+3b+TCkIap1w==" + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.4.tgz", + "integrity": "sha512-WiZhq3SVJHFRgRYLXvpf65XnV6ipVHhnNaNvE8yCimejrGglkg38kEj0JcizqwSHxmPSjcTlig/6JouxLGEhGw==" }, "@types/benchmark": { "version": "1.0.31", @@ -507,14 +329,14 @@ "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", "dev": true, "requires": { - "@types/connect": "3.4.32", - "@types/node": "10.0.2" + "@types/connect": "*", + "@types/node": "*" } }, "@types/chai": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.0.10.tgz", - "integrity": "sha512-Ejh1AXTY8lm+x91X/yar3G2z4x9RyKwdTVdyyu7Xj3dNB35fMNCnEWqTO9FgS3zjzlRNqk1MruYhgb8yhRN9rA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.4.tgz", + "integrity": "sha512-h6+VEw2Vr3ORiFCyyJmcho2zALnUq9cvdB/IO8Xs9itrJVCenC7o26A6+m7D0ihTTr65eS259H5/Ghl/VjYs6g==", "dev": true }, "@types/chalk": { @@ -523,7 +345,7 @@ "integrity": "sha512-1zzPV9FDe1I/WHhRkf9SNgqtRJWZqrBWgu7JGveuHmmyR9CnAPCie2N/x+iHrgnpYBIcCJWHBoMRv2TRWktsvw==", "dev": true, "requires": { - "chalk": "2.3.0" + "chalk": "*" } }, "@types/charm": { @@ -532,7 +354,7 @@ "integrity": "sha512-F9OalGhk60p/DnACfa1SWtmVTMni0+w9t/qfb5Bu7CsurkEjZFN7Z+ii/VGmYpaViPz7o3tBahRQae9O7skFlQ==", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/node": "*" } }, "@types/clean-css": { @@ -547,7 +369,7 @@ "integrity": "sha512-IRBc1bH7owKMcuxb0B7pFYEAp7uqWzBjmjO0m8Feh7qiXY7ezzLL3cFOC8KWPxPOP81qyB4yoVJA1EvZ9kiLVg==", "dev": true, "requires": { - "@types/webpack": "3.8.1" + "@types/webpack": "*" } }, "@types/connect": { @@ -556,13 +378,13 @@ "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/node": "*" } }, "@types/diff": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@types/diff/-/diff-3.2.2.tgz", - "integrity": "sha512-q3zfJvaTroV5BjAAR+peTHEGAAhGrPX0z2EzCzpt2mwFA+qzUn2nigJLqSekXRtdULKmT8am7zjvTMZSapIgHw==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@types/diff/-/diff-3.5.1.tgz", + "integrity": "sha512-nkT7bd/YM6QRDQjww8PYf0kOj1MvwxQ/WaCinj2Hm1HlL+JqGTm4cDoQeROfiWX/B3SNI1nyLLhLAQpp5sE3hw==", "dev": true }, "@types/events": { @@ -577,7 +399,7 @@ "integrity": "sha512-ThxqSisit0vK4cc3Cb402ktFqZAghNmoeGhTsnXjXesVJUsKaSYQ9v3/g1J+/y2ZJrPljRl7h0Hx0PktOdnBJw==", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/node": "*" } }, "@types/express": { @@ -586,19 +408,20 @@ "integrity": "sha512-N1Wdp3v4KmdO3W/CM7KXrDwM4xcVZjlHF2dAOs7sNrTUX8PY3G4n9NkaHlfjGFEfgFeHmRRjywoBd4VkujDs9w==", "dev": true, "requires": { - "@types/body-parser": "1.17.0", - "@types/express-serve-static-core": "4.11.1", - "@types/serve-static": "1.13.2" + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" } }, "@types/express-serve-static-core": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.11.1.tgz", - "integrity": "sha512-EehCl3tpuqiM8RUb+0255M8PhhSwTtLfmO7zBBdv0ay/VTd/zmrqDfQdZFsa5z/PVMbH2yCMZPXsnrImpATyIw==", + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz", + "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==", "dev": true, "requires": { - "@types/events": "1.2.0", - "@types/node": "10.0.2" + "@types/events": "*", + "@types/node": "*", + "@types/range-parser": "*" } }, "@types/extract-text-webpack-plugin": { @@ -607,7 +430,7 @@ "integrity": "sha512-QUoYLBzHsWGzfKnThJlDrjrM/plUFlEl558ixQpnXpm0J7QiVxWveGelRcVJRZoabEsUhrziFeiuAl4tOS5Muw==", "dev": true, "requires": { - "@types/webpack": "3.8.1" + "@types/webpack": "*" } }, "@types/fs-extra": { @@ -616,7 +439,7 @@ "integrity": "sha1-qHGcQXsIDAEtNJeyjiKKwJdF/fI=", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/node": "*" } }, "@types/glob": { @@ -625,9 +448,9 @@ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==", "dev": true, "requires": { - "@types/events": "1.2.0", - "@types/minimatch": "3.0.3", - "@types/node": "10.0.2" + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" } }, "@types/globby": { @@ -636,16 +459,16 @@ "integrity": "sha512-j3XSDNoK4LO5T+ZviQD6PqfEjm07QFEacOTbJR3hnLWuWX0ZMLJl9oRPgj1PyrfGbXhfHFkksC9QZ9HFltJyrw==", "dev": true, "requires": { - "@types/glob": "5.0.35" + "@types/glob": "*" } }, "@types/grunt": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/@types/grunt/-/grunt-0.4.22.tgz", - "integrity": "sha512-fKrWJ+uFq9j3tP2RLm9cY7Z50LhhPnSHQCliCZP5lPAWC7TydnU+BcLR0KQIHe9Gbn1oGfkRIq3u56MNCC1qyw==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/@types/grunt/-/grunt-0.4.23.tgz", + "integrity": "sha512-tg7GE1d3GiT2yOsP6GlFmkii8+z15X8GNvlAoupAgP4McSfYQjYRTltpNrS1sX9n/ANUN2mnUmoqsGUCwNkg2g==", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/node": "*" } }, "@types/gzip-size": { @@ -654,19 +477,19 @@ "integrity": "sha512-ZM1Ou+Y4wxompumKON1ByEbaoEd+pXjBqvoD+ktVQlIEKHBtL2ZT4KfA7rfCjDZptvQjksTwTAZBylTKi0AnnQ==", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/node": "*" } }, "@types/handlebars": { - "version": "4.0.37", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.37.tgz", - "integrity": "sha512-c/g99PQsJEFYdK3LT1qgPAZ61fu/oFOaEhov/6ZuUNMi1xQFbAOSThlX8fAQLf+QoGXtyv4S39OjIRXf3HkBtw==", + "version": "4.0.38", + "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.38.tgz", + "integrity": "sha512-oMzU0D7jDp+H2go/i0XqBHfr+HEhYD/e1TvkhHi3yrhQm/7JFR8FJMdvoH76X8G1FBpgc6Pwi+QslCJBeJ1N9g==", "dev": true }, "@types/highlight.js": { - "version": "9.12.2", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.2.tgz", - "integrity": "sha512-y5x0XD/WXDaGSyiTaTcKS4FurULJtSiYbGTeQd0m2LYZGBcZZ/7fM6t5H/DzeUF+kv8y6UfmF6yJABQsHcp9VQ==", + "version": "9.12.3", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.3.tgz", + "integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==", "dev": true }, "@types/html-minifier": { @@ -675,9 +498,9 @@ "integrity": "sha512-yikK28/KlVyf8g9i/k+TDFlteLuZ6QQTUdVqvKtzEB+8DSLCTjxfh6IK45KnW4rYFI3Y8T4LWpYJMTmfJleWaQ==", "dev": true, "requires": { - "@types/clean-css": "3.4.30", - "@types/relateurl": "0.2.28", - "@types/uglify-js": "3.0.2" + "@types/clean-css": "*", + "@types/relateurl": "*", + "@types/uglify-js": "*" } }, "@types/html-webpack-plugin": { @@ -686,14 +509,14 @@ "integrity": "sha512-ALdxgFyzydiRQzI/7x7zBLh7HsYJVnvjTaCse3KKleiOhxcFlShyJr1kwqwDrfcbtR/L9afABhkr7kC6NTzpGw==", "dev": true, "requires": { - "@types/html-minifier": "3.5.2", - "@types/webpack": "3.8.1" + "@types/html-minifier": "*", + "@types/webpack": "*" } }, "@types/http-errors": { - "version": "1.5.34", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.5.34.tgz", - "integrity": "sha1-1qVvJde5XdBwR2gL+CVjLil5aBU=", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.6.1.tgz", + "integrity": "sha512-s+RHKSGc3r0m3YEE2UXomJYrpQaY9cDmNDLU2XvG1/LAZsQ7y8emYkTLfcw/ByDtcsTyRQKwr76Bj4PkN2hfWg==", "dev": true }, "@types/istanbul-lib-coverage": { @@ -708,13 +531,20 @@ "dev": true }, "@types/istanbul-lib-instrument": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz", - "integrity": "sha512-Ll2qAzv7NItqVliZZ8OMAgAvGstddK2995/7X5YPU84lD3CFnqDfP4sTu5Q1GKReh5Ttw3shKR2e3Fe6Xo0C7A==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz", + "integrity": "sha512-SWIpdKneXqThfrKIokt9dXSPeslS2NWcxhtr+/a2+N81aLyOMAsVTMmwaKuCoEahcI0FfhY3/79AR6Vilk9i8A==", "requires": { - "@types/babel-types": "7.0.1", - "@types/istanbul-lib-coverage": "1.1.0", - "source-map": "0.6.1" + "@types/babel-types": "*", + "@types/istanbul-lib-coverage": "*", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "@types/istanbul-lib-report": { @@ -723,7 +553,7 @@ "integrity": "sha512-nW5QuzmMhr7fHPijtaGOemFFI8Ctrxb/dIXgouSlKmWT16RxWlGLEX/nGghIBOReKe9hPFZXoNh338nFQk2xcA==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "1.1.0" + "@types/istanbul-lib-coverage": "*" } }, "@types/istanbul-lib-source-maps": { @@ -732,8 +562,16 @@ "integrity": "sha512-K0IvmTFbI2GjLG0O4AOLPV2hFItE5Bg/TY41IBZIThhLhYthJc3VjpZpM8/sIaIVtnQcX8b2k3muPDvsvhk+Fg==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "1.1.0", - "source-map": "0.6.1" + "@types/istanbul-lib-coverage": "*", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "@types/istanbul-reports": { @@ -742,8 +580,8 @@ "integrity": "sha512-wrJUtE1+HuaRz0Le7fc5l1nMTermRh6wlEvOdQPilseNScyYgQK8MdgDP2cf/X8+6e1dtsX/zP4W4kH/jyHvFw==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "1.1.0", - "@types/istanbul-lib-report": "1.1.0" + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" } }, "@types/jsonfile": { @@ -752,14 +590,17 @@ "integrity": "sha512-XlVk21nYr7/EnG3q3RUo8OTsSTBGcGo0Ts6//pJzGORwv2SxP2CLsvPdIXBYwF9ajFnW/gIGA2nhAJgGHh3vNQ==", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/node": "*" } }, "@types/jszip": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/jszip/-/jszip-0.0.33.tgz", - "integrity": "sha512-zAbqAUQmXP9/ryVysJO6XkogdIdtVIYYGmV7BzhKuagaS+75QZ6muJjeSaG5M8rdE5jQ8gyhkZ23r6l4ICmxyQ==", - "dev": true + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/jszip/-/jszip-3.1.4.tgz", + "integrity": "sha512-UaVbz4buRlBEolZYrxqkrGDOypugYlbqGNrUFB4qBaexrLypTH0jyvaF5jolNy5D+5C4kKV1WJ3Yx9cn/JH8oA==", + "dev": true, + "requires": { + "@types/node": "*" + } }, "@types/loader-utils": { "version": "1.1.0", @@ -767,14 +608,14 @@ "integrity": "sha512-VR4oHG6TzhpemxtBDf0BD8xlOiPo2B6zcFEA2Jjmgf1RqSrHLAiteIksV3YvpVn0Pd4HxV1B3LQ6Mf2pGTyZ7g==", "dev": true, "requires": { - "@types/node": "10.0.2", - "@types/webpack": "3.8.1" + "@types/node": "*", + "@types/webpack": "*" } }, "@types/lodash": { - "version": "4.14.108", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.108.tgz", - "integrity": "sha512-WD2vUOKfBBVHxWUV9iMR9RMfpuf8HquxWeAq2yqGVL7Nc4JW2+sQama0pREMqzNI3Tutj0PyxYUJwuoxxvX+xA==", + "version": "4.14.112", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.112.tgz", + "integrity": "sha512-jDD7sendv3V7iwyRXSlECOR8HCtMN2faVA9ngLdHHihSVIwY7nbfsKl2kA6fimUDU1i5l/zgpG3aevwWnN3zCQ==", "dev": true }, "@types/log-symbols": { @@ -789,7 +630,7 @@ "integrity": "sha512-UMxf+fJ9QS1uyWX+KJCBSoONbNd+Jnof5kMweR+9vckSIYAQivF5AKCaO2OL/TQvRi8dp8YjAbt7b27XM7RFxw==", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/node": "*" } }, "@types/marked": { @@ -823,9 +664,10 @@ "dev": true }, "@types/node": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.0.2.tgz", - "integrity": "sha512-DPbG0qQ5kdvXBK0jGdv1yd8vGN7hwH8sB2Q1z1kGaxtCnXkSxYJ009VccGlcgknYoLeMTYu4TTzOditDJMdP2Q==" + "version": "9.6.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.23.tgz", + "integrity": "sha512-d2SJJpwkiPudEQ3+9ysANN2Nvz4QJKUPoe/WL5zyQzI0RaEeZWH5K5xjvUIGszTItHQpFPdH+u51f6G/LkS8Cg==", + "dev": true }, "@types/optimize-css-assets-webpack-plugin": { "version": "1.3.1", @@ -833,7 +675,7 @@ "integrity": "sha1-+T20ppRKui08YjCpNmhKyWMcmU8=", "dev": true, "requires": { - "@types/webpack": "3.8.1" + "@types/webpack": "*" } }, "@types/ora": { @@ -842,7 +684,7 @@ "integrity": "sha512-DrHOHEdYzRjL65n2v+NwTdhC8tACaiCDnUU1wAAbibfZOaRj3KjUb3unnAAWFZuny43qPAvB6ka+Iyj2R2XPxw==", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/node": "*" } }, "@types/platform": { @@ -851,6 +693,12 @@ "integrity": "sha512-XI6JKLFNBmkADRd2FtUYtEuq5LDKTNXwUIodV3ZfTNkA+g4yo+rXXXdZL3fTE24S92BjpiEVaL3f64Fxm2JOgg==", "dev": true }, + "@types/range-parser": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz", + "integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw==", + "dev": true + }, "@types/relateurl": { "version": "0.2.28", "resolved": "https://registry.npmjs.org/@types/relateurl/-/relateurl-0.2.28.tgz", @@ -858,12 +706,12 @@ "dev": true }, "@types/resolve": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.4.tgz", - "integrity": "sha1-m1htZalH3qiMS8JNoLkF/pUgoNU=", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.7.tgz", + "integrity": "sha512-GPewdjkb0Q76o459qgp6pBLzJj/bD3oveS2kfLhIkZ9U3t3AFKtl5DlFB6lGTw0iZmcmxoGC8lpLW3NNJKrN9A==", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/node": "*" } }, "@types/rimraf": { @@ -872,8 +720,8 @@ "integrity": "sha512-Hm/bnWq0TCy7jmjeN5bKYij9vw5GrDFWME4IuxV08278NtU/VdGbzsBohcCUJ7+QMqmUq5hpRKB39HeQWJjztQ==", "dev": true, "requires": { - "@types/glob": "5.0.35", - "@types/node": "10.0.2" + "@types/glob": "*", + "@types/node": "*" } }, "@types/serve-static": { @@ -882,8 +730,8 @@ "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", "dev": true, "requires": { - "@types/express-serve-static-core": "4.11.1", - "@types/mime": "2.0.0" + "@types/express-serve-static-core": "*", + "@types/mime": "*" } }, "@types/shell-quote": { @@ -898,7 +746,7 @@ "integrity": "sha1-32E73biCJe0JzlyDX2INyq8VXms=", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/node": "*" } }, "@types/sinon": { @@ -912,13 +760,13 @@ "resolved": "https://registry.npmjs.org/@types/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LrnsgZIfJaysFkv9rRJp4/uAyqw87oVed3s1hhF83nwbo9c7MG9g5DqR0seHP+lkX4ldmMrVolPjQSe2ZfD0yA==", "requires": { - "source-map": "0.6.1" + "source-map": "*" } }, "@types/statuses": { - "version": "1.2.28", - "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-1.2.28.tgz", - "integrity": "sha1-zF8Z0haUFtVWzcoFtZsp5F+kl+I=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-1.3.0.tgz", + "integrity": "sha512-E0QjLIX1q+ThpQ7HLh5SjMtUtPl0tQjxoLMPwJtFDFtH7C0qdXmCgNcBplZ9m24+sOoQBpc0PT/aMW4jlm3K6g==", "dev": true }, "@types/strip-ansi": { @@ -933,11 +781,18 @@ "integrity": "sha512-dEoVvo/I9QFomyhY+4Q6Qk+I+dhG59TYceZgC6Q0mCifVPErx6Y83PNTKGDS5e9h9Eti6q0S2mm16BU6iQK+3w==" }, "@types/uglify-js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.2.tgz", - "integrity": "sha512-o8hU2+4xsyGC27Vujoklvxl88Ew5zmJuTBYMX1Uro2rYUt4HEFJKL6fuq8aGykvS+ssIsIzerWWP2DRxonownQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.3.tgz", + "integrity": "sha512-MAT0BW2ruO0LhQKjvlipLGCF/Yx0y/cj+tT67tK3QIQDrM2+9R78HgJ54VlrE8AbfjYJJBCQCEPM5ZblPVTuww==", "requires": { - "source-map": "0.6.1" + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "@types/webpack": { @@ -946,9 +801,9 @@ "integrity": "sha512-121nghW8XJ0tFNGuQh5k+VoSMLm71c7bEmNI0MMNDtKiNUcij3nWwypQccfEQrGcmJCAMkoC5vZLtdT4fbbCzw==", "dev": true, "requires": { - "@types/node": "10.0.2", - "@types/tapable": "0.2.5", - "@types/uglify-js": "3.0.2" + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*" } }, "@types/webpack-chunk-hash": { @@ -957,16 +812,17 @@ "integrity": "sha512-pOc/1z85qE+8Mz4bHmfQb/jKSdq1VSXEo3a3Bhb3yyYUu9jXh0pRRK003L10cnsnOTcgka0o2lj5S0rifnapCw==", "dev": true, "requires": { - "@types/webpack": "3.8.1" + "@types/webpack": "*" } }, "@types/ws": { - "version": "0.0.42", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-0.0.42.tgz", - "integrity": "sha512-+30f9gcx24GZRD9EqqiQM+I5pRf/MJiJoEqp2X62QRwfEjdqyn9mPmjxZAEXBUVunWotE5qkadIPqf2MMcDYNw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-4.0.2.tgz", + "integrity": "sha512-tlDVFHCcJdNqYgjGNDPDCo4tNqhFMymIAdJCcykFbdhYr4X6vD7IlMxY0t3/k6Pfup68YNkMTpRfLKTRuKDmnQ==", "dev": true, "requires": { - "@types/node": "10.0.2" + "@types/events": "*", + "@types/node": "*" } }, "@types/yargs": { @@ -975,11 +831,6 @@ "integrity": "sha512-Upj9YsBZRgjEVPvsaeGru48d2JiyzBNZkmkebHyoaQ+UM9wqj/rp5mkilRjSq/Ga45yfd/zwrNuML9f2gGfVpw==", "dev": true }, - "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=" - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -991,21 +842,21 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.18", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==" }, "acorn-dynamic-import": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", "requires": { - "acorn": "4.0.13" + "acorn": "^4.0.3" }, "dependencies": { "acorn": { @@ -1015,22 +866,14 @@ } } }, - "acorn-globals": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", - "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", - "requires": { - "acorn": "5.5.3" - } - }, "agent-base": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", "dev": true, "requires": { - "extend": "3.0.1", - "semver": "5.0.3" + "extend": "~3.0.0", + "semver": "~5.0.1" }, "dependencies": { "semver": { @@ -1046,10 +889,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -1062,9 +905,9 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "alphanum-sort": { @@ -1078,11 +921,12 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, "ansi-align": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", - "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, "requires": { - "string-width": "1.0.2" + "string-width": "^2.0.0" } }, "ansi-cyan": { @@ -1114,14 +958,17 @@ } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } }, "ansi-wrap": { "version": "0.1.0", @@ -1146,14 +993,14 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "app-root-path": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", - "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", + "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=", "dev": true }, "append-transform": { @@ -1162,7 +1009,7 @@ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", "dev": true, "requires": { - "default-require-extensions": "1.0.0" + "default-require-extensions": "^1.0.0" } }, "aproba": { @@ -1175,7 +1022,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -1183,7 +1030,7 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -1196,11 +1043,6 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" - }, "array-filter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", @@ -1240,7 +1082,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -1259,18 +1101,20 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", + "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", + "dev": true, + "optional": true }, "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -1279,12 +1123,29 @@ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "requires": { "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } } }, "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", + "dev": true, + "optional": true }, "assertion-error": { "version": "1.1.0", @@ -1298,16 +1159,16 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "ast-types": { - "version": "0.9.12", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.12.tgz", - "integrity": "sha1-sTYwDWcCZiWuFTJpgsqZGOXbc8k=" + "version": "0.9.14", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.14.tgz", + "integrity": "sha512-Ebvx7/0lLboCdyEmAw/4GqwBeKIijPveXNiVGhCGCNxc7z26T5he7DC6ARxu8ByKuzUZZcLog+VP8GMyZrBzJw==" }, "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "requires": { - "lodash": "4.17.10" + "lodash": "^4.17.10" } }, "async-each": { @@ -1318,119 +1179,70 @@ "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "atob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz", - "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=" }, "autoprefixer": { "version": "6.7.7", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000833", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" } }, "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", + "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", + "dev": true, + "optional": true }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "strip-ansi": { @@ -1438,8 +1250,13 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, @@ -1449,14 +1266,14 @@ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.10", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" }, "dependencies": { "detect-indent": { @@ -1465,7 +1282,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "jsesc": { @@ -1473,12 +1290,6 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, @@ -1488,7 +1299,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-runtime": { @@ -1496,8 +1307,8 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.5", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-template": { @@ -1506,11 +1317,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -1519,15 +1330,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.10" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -1536,10 +1347,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -1558,13 +1369,13 @@ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -1572,7 +1383,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -1580,7 +1391,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1588,7 +1399,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1596,9 +1407,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -1618,23 +1429,14 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, "benchmark": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", "dev": true, "requires": { - "lodash": "4.17.10", - "platform": "1.3.5" + "lodash": "^4.17.4", + "platform": "^1.3.3" } }, "big.js": { @@ -1653,60 +1455,64 @@ "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", "dev": true, "requires": { - "readable-stream": "1.0.34" + "readable-stream": "~1.0.26" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", + "dev": true, + "requires": { + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", "dev": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "bytes": "1", + "string_decoder": "0.10" } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true } } }, - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, "body-parser": { "version": "1.18.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.1", + "http-errors": "~1.6.2", "iconv-lite": "0.4.19", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.16" + "type-is": "~1.6.15" } }, "boolbase": { @@ -1715,48 +1521,27 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", + "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", + "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "0.9.x" } }, "boxen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.5.1.tgz", - "integrity": "sha1-W3PYhA6388ihVcv2ntPtaNRyABQ=", - "requires": { - "camelcase": "2.1.1", - "chalk": "1.1.3", - "cli-boxes": "1.0.0", - "filled-array": "1.1.0", - "object-assign": "4.1.1", - "repeating": "2.0.1", - "string-width": "1.0.2", - "widest-line": "1.0.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - } + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" } }, "brace-expansion": { @@ -1764,7 +1549,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1773,9 +1558,9 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "brorand": { @@ -1783,22 +1568,17 @@ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, - "browser-process-hrtime": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", - "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=" - }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -1806,19 +1586,27 @@ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.1", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", - "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "browserify-rsa": { @@ -1826,8 +1614,8 @@ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -1835,13 +1623,13 @@ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -1849,7 +1637,7 @@ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "browserslist": { @@ -1857,8 +1645,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000833", - "electron-to-chromium": "1.3.45" + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" } }, "buffer": { @@ -1866,25 +1654,32 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.11", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } } }, "buffer-alloc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz", - "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { - "buffer-alloc-unsafe": "0.1.1", - "buffer-fill": "0.1.1" + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" } }, "buffer-alloc-unsafe": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz", - "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true }, "buffer-crc32": { @@ -1894,15 +1689,15 @@ "dev": true }, "buffer-fill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz", - "integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", "dev": true }, "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" }, "buffer-xor": { "version": "1.0.3", @@ -1929,39 +1724,21 @@ "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "requires": { - "bluebird": "3.5.1", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.2", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.0", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" }, "dependencies": { - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", @@ -1974,15 +1751,15 @@ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" }, "dependencies": { "isobject": { @@ -1997,22 +1774,31 @@ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, "camelcase-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } } }, "caniuse-api": { @@ -2020,39 +1806,41 @@ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000833", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, "caniuse-db": { - "version": "1.0.30000833", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000833.tgz", - "integrity": "sha1-K9e+cqQBZY0svLj012AN7r6xxnY=" + "version": "1.0.30000867", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000867.tgz", + "integrity": "sha1-tVpuz6wxB5iJQMnH3+GGYxUxLJc=" }, "caniuse-lite": { - "version": "1.0.30000833", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000833.tgz", - "integrity": "sha512-tKNuKu4WLImh4NxoTgntxFpDrRiA0Q6Q1NycNhuMST0Kx+Pt8YnRDW6V8xsyH6AtO2CpAoibatEk5eaEhP3O1g==" + "version": "1.0.30000865", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz", + "integrity": "sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw==" }, "capture-stack-trace": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true }, "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz", + "integrity": "sha1-gWfBq4OX+1u5X5bSjlqBxQ8kesQ=", + "dev": true }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chai": { @@ -2061,12 +1849,12 @@ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "1.1.0", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.8" + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" } }, "chalk": { @@ -2074,27 +1862,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "requires": { - "has-flag": "2.0.0" - } - } + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" } }, "chardet": { @@ -2109,7 +1879,7 @@ "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1" } }, "check-error": { @@ -2123,30 +1893,15 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "1.0.0" - } - } + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "chownr": { @@ -2165,8 +1920,8 @@ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "clap": { @@ -2174,19 +1929,29 @@ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "requires": { - "chalk": "1.1.3" + "chalk": "^1.1.3" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "strip-ansi": { @@ -2194,8 +1959,13 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, @@ -2204,10 +1974,10 @@ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -2215,7 +1985,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "isobject": { @@ -2230,14 +2000,7 @@ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", "requires": { - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "source-map": "0.5.x" } }, "clean-webpack-plugin": { @@ -2245,65 +2008,35 @@ "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.17.tgz", "integrity": "sha512-Bts/V725v8Ijosp4K1cqppQXgXcrohxoMsg0CV2xL4y/vua1G5pAfHEW/eJIiKF+GNNG72mdjbipxMRFEms7yg==", "requires": { - "rimraf": "2.6.2" + "rimraf": "^2.6.1" } }, "cli-boxes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true }, "cli-columns": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-3.1.2.tgz", "integrity": "sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4=", "requires": { - "string-width": "2.1.1", - "strip-ansi": "3.0.1" + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } - } + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - } + "ansi-regex": "^2.0.0" } } } @@ -2313,7 +2046,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-spinners": { @@ -2328,14 +2061,49 @@ "dev": true, "requires": { "slice-ansi": "0.0.4", - "string-width": "1.0.2" + "string-width": "^1.0.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, "slice-ansi": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } } } }, @@ -2350,17 +2118,49 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } } } @@ -2380,7 +2180,7 @@ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "requires": { - "q": "1.5.1" + "q": "^1.1.2" } }, "code-point-at": { @@ -2396,192 +2196,6 @@ "requires": { "request": "2.42.0", "urlgrey": "0.4.0" - }, - "dependencies": { - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", - "dev": true, - "optional": true - }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", - "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", - "dev": true, - "optional": true - }, - "boom": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", - "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", - "dev": true, - "requires": { - "hoek": "0.9.1" - } - }, - "caseless": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz", - "integrity": "sha1-gWfBq4OX+1u5X5bSjlqBxQ8kesQ=", - "dev": true - }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "dev": true, - "optional": true, - "requires": { - "delayed-stream": "0.0.5" - } - }, - "cryptiles": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", - "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", - "dev": true, - "optional": true, - "requires": { - "boom": "0.4.2" - } - }, - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", - "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", - "dev": true, - "optional": true - }, - "forever-agent": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", - "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=", - "dev": true - }, - "form-data": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", - "integrity": "sha1-kavXiKupcCsaq/qLwBAxoqyeOxI=", - "dev": true, - "optional": true, - "requires": { - "async": "0.9.2", - "combined-stream": "0.0.7", - "mime": "1.2.11" - } - }, - "hawk": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz", - "integrity": "sha1-h81JH5tG5OKurKM1QWdmiF0tHtk=", - "dev": true, - "optional": true, - "requires": { - "boom": "0.4.2", - "cryptiles": "0.2.2", - "hoek": "0.9.1", - "sntp": "0.2.4" - } - }, - "hoek": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", - "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=", - "dev": true - }, - "http-signature": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", - "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", - "dev": true, - "optional": true, - "requires": { - "asn1": "0.1.11", - "assert-plus": "0.1.5", - "ctype": "0.5.3" - } - }, - "mime": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", - "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", - "dev": true, - "optional": true - }, - "mime-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz", - "integrity": "sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4=", - "dev": true - }, - "oauth-sign": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz", - "integrity": "sha1-8ilW8x6nFRqCHl8vsywRPK2Ln2k=", - "dev": true, - "optional": true - }, - "qs": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz", - "integrity": "sha1-GbV/8k3CqZzh+L32r82ln472H4g=", - "dev": true - }, - "request": { - "version": "2.42.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.42.0.tgz", - "integrity": "sha1-VyvQFIk4VkBArHqxSLlkI6BjMEo=", - "dev": true, - "requires": { - "aws-sign2": "0.5.0", - "bl": "0.9.5", - "caseless": "0.6.0", - "forever-agent": "0.5.2", - "form-data": "0.1.4", - "hawk": "1.1.1", - "http-signature": "0.10.1", - "json-stringify-safe": "5.0.1", - "mime-types": "1.0.2", - "node-uuid": "1.4.8", - "oauth-sign": "0.4.0", - "qs": "1.2.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3" - } - }, - "sntp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", - "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", - "dev": true, - "optional": true, - "requires": { - "hoek": "0.9.1" - } - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - } } }, "coffee-script": { @@ -2595,8 +2209,8 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color": { @@ -2604,30 +2218,30 @@ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "requires": { - "clone": "1.0.4", - "color-convert": "1.9.1", - "color-string": "0.3.0" + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" } }, "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", "requires": { - "color-name": "1.1.3" + "color-name": "1.1.1" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" }, "color-string": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "requires": { - "color-name": "1.1.3" + "color-name": "^1.0.0" } }, "colormin": { @@ -2635,9 +2249,9 @@ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "requires": { - "color": "0.11.4", + "color": "^0.11.0", "css-color-names": "0.0.4", - "has": "1.0.1" + "has": "^1.0.1" } }, "colors": { @@ -2649,14 +2263,21 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, + "command-exists": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.7.tgz", + "integrity": "sha512-doWDvhXCcW5LK0cIUWrOQ8oMFXJv3lEQCkJpGVjM8v9SV0uhqYXB943538tEA2CiaWqSyuYUGAm5ezDwEx9xlw==", + "dev": true + }, "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", + "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==" }, "commondir": { "version": "1.0.1", @@ -2678,26 +2299,53 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "configstore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", - "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, "requires": { - "dot-prop": "3.0.0", - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "os-tmpdir": "1.0.2", - "osenv": "0.1.5", - "uuid": "2.0.3", - "write-file-atomic": "1.3.4", - "xdg-basedir": "2.0.0" + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, "console-browserify": { @@ -2705,7 +2353,7 @@ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -2723,10 +2371,11 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, - "content-type-parser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", - "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==" + "continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", + "dev": true }, "cookie": { "version": "0.3.1", @@ -2743,12 +2392,12 @@ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -2756,38 +2405,10 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, - "copy-webpack-plugin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.0.1.tgz", - "integrity": "sha1-lyjjg7lDFgUNDHRjlY8rhcCqggA=", - "requires": { - "bluebird": "2.11.0", - "fs-extra": "0.26.7", - "glob": "6.0.4", - "is-glob": "3.1.0", - "loader-utils": "0.2.17", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "node-dir": "0.1.17" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - } - } - }, "core-js": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", - "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=" + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" }, "core-util-is": { "version": "1.0.2", @@ -2799,30 +2420,38 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.7.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } } }, "create-ecdh": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.1.tgz", - "integrity": "sha512-iZvCCg8XqHQZ1ioNBTzXS/cQSkqkqcPs8xSX4upNB+DAk9Ht3uzQf2J32uAHNCne8LDmKr29AgZrEs4oIrwLuQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, "requires": { - "capture-stack-trace": "1.0.0" + "capture-stack-trace": "^1.0.0" } }, "create-hash": { @@ -2830,11 +2459,11 @@ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.4", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -2842,12 +2471,12 @@ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -2855,9 +2484,9 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "4.1.2", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "cross-spawn-async": { @@ -2866,26 +2495,18 @@ "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", "dev": true, "requires": { - "lru-cache": "4.1.2", - "which": "1.3.0" + "lru-cache": "^4.0.0", + "which": "^1.2.8" } }, "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", + "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", + "dev": true, + "optional": true, "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "requires": { - "hoek": "4.2.1" - } - } + "boom": "0.4.x" } }, "crypto-browserify": { @@ -2893,17 +2514,17 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.16", - "public-encrypt": "4.0.2", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "crypto-random-string": { @@ -2918,10 +2539,10 @@ "integrity": "sha1-drEJRoMlbponCf1cY+7ya/R6FEI=", "dev": true, "requires": { - "es6-promise": "2.3.0", - "lodash": "3.10.1", - "semver": "5.5.0", - "xml2js": "0.4.19" + "es6-promise": "^2.0.1", + "lodash": "^3.3.1", + "semver": "^5.0.1", + "xml2js": "^0.4.5" }, "dependencies": { "es6-promise": { @@ -2938,36 +2559,15 @@ } } }, - "css": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", - "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", - "requires": { - "inherits": "2.0.3", - "source-map": "0.1.43", - "source-map-resolve": "0.3.1", - "urix": "0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "requires": { - "amdefine": "1.0.1" - } - } - } - }, "css-color-function": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/css-color-function/-/css-color-function-1.3.3.tgz", "integrity": "sha1-jtJMLAIFBzM5+voAS8jBQfzLKC4=", "requires": { "balanced-match": "0.1.0", - "color": "0.11.4", - "debug": "3.1.0", - "rgb": "0.1.0" + "color": "^0.11.0", + "debug": "^3.1.0", + "rgb": "~0.1.0" }, "dependencies": { "balanced-match": { @@ -2995,32 +2595,55 @@ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz", "integrity": "sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==", "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", + "babel-code-frame": "^6.11.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": ">=2.6.1 <4", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.0.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.0.0", + "postcss-modules-local-by-default": "^1.0.1", + "postcss-modules-scope": "^1.0.0", + "postcss-modules-values": "^1.1.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + } + }, + "css-modules-loader-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", + "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.1", "postcss-modules-extract-imports": "1.1.0", "postcss-modules-local-by-default": "1.2.0", "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" + "postcss-modules-values": "1.3.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "dependencies": { "supports-color": { @@ -3036,27 +2659,21 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^1.1.3", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -3064,33 +2681,20 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } }, - "css-modules-loader-core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", - "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.1", - "postcss-modules-extract-imports": "1.1.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0" - } - }, "css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.1" + "nth-check": "~1.0.1" } }, "css-selector-tokenizer": { @@ -3098,9 +2702,9 @@ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" } }, "css-unit-converter": { @@ -3123,96 +2727,38 @@ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.1", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.2", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" } }, "csso": { @@ -3220,28 +2766,8 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "cssom": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=" - }, - "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "requires": { - "cssom": "0.3.2" + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, "ctype": { @@ -3256,7 +2782,7 @@ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "cyclist": { @@ -3269,15 +2795,7 @@ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "0.10.42" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "1.0.0" + "es5-ext": "^0.10.9" } }, "date-fns": { @@ -3297,16 +2815,8 @@ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", "dev": true, "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - } + "get-stdin": "^4.0.1", + "meow": "^3.3.0" } }, "debug": { @@ -3333,14 +2843,22 @@ "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", "dev": true, "requires": { - "decompress-tar": "4.1.1", - "decompress-tarbz2": "4.1.1", - "decompress-targz": "4.1.1", - "decompress-unzip": "4.0.1", - "graceful-fs": "4.1.11", - "make-dir": "1.2.0", - "pify": "2.3.0", - "strip-dirs": "2.1.0" + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "decompress-tar": { @@ -3349,9 +2867,9 @@ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dev": true, "requires": { - "file-type": "5.2.0", - "is-stream": "1.1.0", - "tar-stream": "1.6.0" + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" } }, "decompress-tarbz2": { @@ -3360,11 +2878,11 @@ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, "requires": { - "decompress-tar": "4.1.1", - "file-type": "6.2.0", - "is-stream": "1.1.0", - "seek-bzip": "1.0.5", - "unbzip2-stream": "1.2.5" + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" }, "dependencies": { "file-type": { @@ -3381,9 +2899,9 @@ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dev": true, "requires": { - "decompress-tar": "4.1.1", - "file-type": "5.2.0", - "is-stream": "1.1.0" + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" } }, "decompress-unzip": { @@ -3392,10 +2910,10 @@ "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", "dev": true, "requires": { - "file-type": "3.9.0", - "get-stream": "2.3.1", - "pify": "2.3.0", - "yauzl": "2.9.1" + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" }, "dependencies": { "file-type": { @@ -3410,9 +2928,15 @@ "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "dev": true, "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true } } }, @@ -3428,7 +2952,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "4.0.8" + "type-detect": "^4.0.0" } }, "deep-equal": { @@ -3438,14 +2962,16 @@ "dev": true }, "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true }, "default-require-extensions": { "version": "1.0.0", @@ -3453,7 +2979,18 @@ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "dev": true, "requires": { - "strip-bom": "2.0.0" + "strip-bom": "^2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } } }, "define-properties": { @@ -3461,8 +2998,8 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, "define-property": { @@ -3470,8 +3007,8 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -3479,7 +3016,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -3487,7 +3024,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3495,9 +3032,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -3520,7 +3057,8 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "depd": { "version": "1.1.2", @@ -3532,8 +3070,8 @@ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -3557,9 +3095,9 @@ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "dir-glob": { @@ -3567,23 +3105,8 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", "requires": { - "arrify": "1.0.1", - "path-type": "3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } + "arrify": "^1.0.1", + "path-type": "^3.0.0" } }, "dom-converter": { @@ -3591,7 +3114,7 @@ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", "requires": { - "utila": "0.3.3" + "utila": "~0.3" }, "dependencies": { "utila": { @@ -3606,8 +3129,8 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" }, "dependencies": { "domelementtype": { @@ -3627,20 +3150,12 @@ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "requires": { - "webidl-conversions": "4.0.2" - } - }, "domhandler": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -3648,16 +3163,17 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } }, "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, "requires": { - "is-obj": "1.0.1" + "is-obj": "^1.0.0" } }, "dts-generator": { @@ -3683,11 +3199,11 @@ "integrity": "sha1-OyCjV//89GuzhK7W+K6aZH/basQ=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -3697,14 +3213,6 @@ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "2.3.6" - } - }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -3712,23 +3220,43 @@ "dev": true }, "duplexify": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", - "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", - "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", "requires": { - "jsbn": "0.1.1" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "ee-first": { @@ -3737,14 +3265,14 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.9.tgz", - "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==" }, "electron-to-chromium": { - "version": "1.3.45", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.45.tgz", - "integrity": "sha1-RYrBscXHYM6IEaFtK/vZfsMLr7g=" + "version": "1.3.52", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz", + "integrity": "sha1-0tnxJwuko7lnuDHEDvcftNmrXOA=" }, "elegant-spinner": { "version": "1.0.1", @@ -3757,13 +3285,13 @@ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -3781,7 +3309,7 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -3789,10 +3317,10 @@ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" } }, "entities": { @@ -3805,25 +3333,50 @@ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" + } + }, + "error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", + "dev": true, + "requires": { + "string-template": "~0.2.1", + "xtend": "~4.0.0" + }, + "dependencies": { + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + } } }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + } } }, "es5-ext": { - "version": "0.10.42", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", - "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", + "version": "0.10.45", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", + "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" } }, "es6-iterator": { @@ -3831,9 +3384,9 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-map": { @@ -3841,12 +3394,12 @@ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" } }, "es6-object-assign": { @@ -3866,11 +3419,11 @@ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "event-emitter": "~0.3.5" } }, "es6-symbol": { @@ -3878,8 +3431,8 @@ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42" + "d": "1", + "es5-ext": "~0.10.14" } }, "es6-weak-map": { @@ -3887,10 +3440,10 @@ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, "escape-html": { @@ -3904,15 +3457,34 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.6.1" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + }, + "dependencies": { + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } } }, "escope": { @@ -3920,33 +3492,33 @@ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-plugin-prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz", - "integrity": "sha512-floiaI4F7hRkTrFe8V2ItOK97QYrX75DjmdzmVITZoAP6Cn06oEDPQRsO6MlHEP/u2SxI3xQ52Kpjw6j5WGfeQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz", + "integrity": "sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og==", "dev": true, "requires": { - "fast-diff": "1.1.2", - "jest-docblock": "21.2.0" + "fast-diff": "^1.1.1", + "jest-docblock": "^21.0.0" } }, "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -3969,8 +3541,8 @@ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42" + "d": "1", + "es5-ext": "~0.10.14" } }, "eventemitter2": { @@ -3989,8 +3561,8 @@ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -3999,13 +3571,13 @@ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "exit": { @@ -4025,7 +3597,7 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -4033,7 +3605,7 @@ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "express": { @@ -4041,57 +3613,51 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.1", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.0", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", + "proxy-addr": "~2.0.2", "qs": "6.5.1", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.1", "send": "0.16.1", "serve-static": "1.13.1", "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.16", + "statuses": "~1.3.1", + "type-is": "~1.6.15", "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - } + "vary": "~1.1.2" } }, "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -4099,7 +3665,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -4110,9 +3676,9 @@ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "extglob": { @@ -4120,14 +3686,7 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "requires": { - "is-extglob": "1.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - } + "is-extglob": "^1.0.0" } }, "extract-text-webpack-plugin": { @@ -4135,17 +3694,12 @@ "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", "requires": { - "async": "2.6.0", - "loader-utils": "1.1.0", - "schema-utils": "0.3.0", - "webpack-sources": "1.1.0" + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.3.0", + "webpack-sources": "^1.0.1" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", @@ -4165,7 +3719,8 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, "fastparse": { "version": "1.1.1", @@ -4178,16 +3733,16 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { - "pend": "1.2.0" + "pend": "~1.2.0" } }, "figures": { @@ -4196,7 +3751,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-loader": { @@ -4204,8 +3759,8 @@ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.5.tgz", "integrity": "sha512-RzGHDatcVNpGISTvCpfUfOGpYuSR7HSsSg87ki+wF6rw1Hm0RALPTiAdsxAq1UwLf0RRhbe22/eHK6nhXspiOQ==", "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "loader-utils": "^1.0.2", + "schema-utils": "^0.3.0" } }, "file-sync-cmp": { @@ -4231,32 +3786,15 @@ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "filled-array": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", - "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=" - }, - "filter-css": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/filter-css/-/filter-css-0.1.2.tgz", - "integrity": "sha1-Sk0BWyGhRamWFxA4+AYMAxV17gk=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "requires": { - "css": "2.2.1", - "get-stdin": "5.0.1", - "lodash": "4.17.10", - "meow": "3.7.0", - "update-notifier": "0.7.0" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "finalhandler": { @@ -4265,12 +3803,12 @@ "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" } }, "find-cache-dir": { @@ -4278,9 +3816,9 @@ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "requires": { - "commondir": "1.0.1", - "make-dir": "1.2.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-parent-dir": { @@ -4290,12 +3828,11 @@ "dev": true }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "locate-path": "^2.0.0" } }, "findup-sync": { @@ -4304,7 +3841,7 @@ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", "dev": true, "requires": { - "glob": "5.0.15" + "glob": "~5.0.0" }, "dependencies": { "glob": { @@ -4313,11 +3850,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -4332,8 +3869,37 @@ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "for-in": { @@ -4346,7 +3912,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "foreach": { @@ -4355,18 +3921,20 @@ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", + "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=", + "dev": true }, "form-data": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "mime-types": "^2.1.12" } }, "formatio": { @@ -4375,7 +3943,7 @@ "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", "dev": true, "requires": { - "samsam": "1.3.0" + "samsam": "1.x" } }, "forwarded": { @@ -4388,7 +3956,7 @@ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -4401,8 +3969,37 @@ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "fs-constants": { @@ -4418,25 +4015,14 @@ "dev": true }, "fs-extra": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - }, - "dependencies": { - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "4.1.11" - } - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-write-stream-atomic": { @@ -4444,10 +4030,10 @@ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -4456,13 +4042,13 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.3.tgz", - "integrity": "sha512-X+57O5YkDTiEQGiw8i7wYc2nQgweIekqkepI8Q3y4wVlurgBt2SuwxTeYUYMZIGpLZH3r/TsMjczCMXE5ZOt7Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "optional": true, "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.9.1" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -4484,8 +4070,8 @@ "bundled": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -4496,7 +4082,7 @@ "version": "1.1.11", "bundled": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -4531,7 +4117,7 @@ } }, "deep-extend": { - "version": "0.4.2", + "version": "0.5.1", "bundled": true, "optional": true }, @@ -4550,7 +4136,7 @@ "bundled": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -4563,14 +4149,14 @@ "bundled": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -4578,12 +4164,12 @@ "bundled": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -4596,7 +4182,7 @@ "bundled": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -4604,7 +4190,7 @@ "bundled": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -4612,8 +4198,8 @@ "bundled": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4629,7 +4215,7 @@ "version": "1.0.0", "bundled": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -4641,7 +4227,7 @@ "version": "3.0.4", "bundled": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -4652,8 +4238,8 @@ "version": "2.2.4", "bundled": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -4661,7 +4247,7 @@ "bundled": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -4681,26 +4267,26 @@ "bundled": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.9.1", + "version": "0.10.0", "bundled": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.6", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -4708,8 +4294,8 @@ "bundled": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -4722,8 +4308,8 @@ "bundled": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -4731,10 +4317,10 @@ "bundled": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -4750,7 +4336,7 @@ "version": "1.4.0", "bundled": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -4768,8 +4354,8 @@ "bundled": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -4783,14 +4369,14 @@ "optional": true }, "rc": { - "version": "1.2.6", + "version": "1.2.7", "bundled": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -4805,13 +4391,13 @@ "bundled": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -4819,7 +4405,7 @@ "bundled": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -4855,9 +4441,9 @@ "version": "1.0.2", "bundled": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -4865,14 +4451,14 @@ "bundled": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -4885,13 +4471,13 @@ "bundled": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -4904,7 +4490,7 @@ "bundled": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -4923,12 +4509,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "dev": true, "requires": { - "globule": "1.2.0" + "globule": "^1.0.0" } }, "generic-names": { @@ -4937,7 +4523,7 @@ "integrity": "sha1-LXhqEhruUIh2eWk56OO/+DbCCRc=", "dev": true, "requires": { - "loader-utils": "0.2.17" + "loader-utils": "^0.2.16" }, "dependencies": { "loader-utils": { @@ -4946,18 +4532,18 @@ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } } } }, "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, "get-func-name": { "version": "2.0.0", @@ -4972,9 +4558,10 @@ "dev": true }, "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true }, "get-stream": { "version": "3.0.0", @@ -4992,23 +4579,15 @@ "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - } - }, "git-config-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-1.0.1.tgz", "integrity": "sha1-bTP37WPbDQ4RgTFQO6s6ykfVRmQ=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "fs-exists-sync": "0.1.0", - "homedir-polyfill": "1.0.1" + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "homedir-polyfill": "^1.0.0" }, "dependencies": { "extend-shallow": { @@ -5017,21 +4596,22 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } }, "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -5039,23 +4619,8 @@ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "1.0.0" - } - } + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -5063,22 +4628,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "requires": { - "is-glob": "2.0.1" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "1.0.0" - } - } + "is-glob": "^2.0.0" } }, "global-dirs": { @@ -5087,7 +4637,7 @@ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { - "ini": "1.3.5" + "ini": "^1.3.4" } }, "globals": { @@ -5101,81 +4651,42 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "glob": "7.1.2", - "ignore": "3.3.8", - "pify": "3.0.0", - "slash": "1.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" } }, "globule": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.10", - "minimatch": "3.0.4" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" } }, "got": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", - "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", - "requires": { - "create-error-class": "3.0.2", - "duplexer2": "0.1.4", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "node-status-codes": "1.0.0", - "object-assign": "4.1.1", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.6", - "timed-out": "3.1.3", - "unzip-response": "1.0.2", - "url-parse-lax": "1.0.0" + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" } }, "graceful-fs": { @@ -5195,42 +4706,36 @@ "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=", "dev": true, "requires": { - "coffee-script": "1.10.0", - "dateformat": "1.0.12", - "eventemitter2": "0.4.14", - "exit": "0.1.2", - "findup-sync": "0.3.0", - "glob": "7.0.6", - "grunt-cli": "1.2.0", - "grunt-known-options": "1.1.0", - "grunt-legacy-log": "1.0.2", - "grunt-legacy-util": "1.0.0", - "iconv-lite": "0.4.19", - "js-yaml": "3.5.5", - "minimatch": "3.0.4", - "nopt": "3.0.6", - "path-is-absolute": "1.0.1", - "rimraf": "2.2.8" + "coffee-script": "~1.10.0", + "dateformat": "~1.0.12", + "eventemitter2": "~0.4.13", + "exit": "~0.1.1", + "findup-sync": "~0.3.0", + "glob": "~7.0.0", + "grunt-cli": "~1.2.0", + "grunt-known-options": "~1.1.0", + "grunt-legacy-log": "~1.0.0", + "grunt-legacy-util": "~1.0.0", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.5.2", + "minimatch": "~3.0.0", + "nopt": "~3.0.6", + "path-is-absolute": "~1.0.0", + "rimraf": "~2.2.8" }, "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, "glob": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "grunt-cli": { @@ -5239,10 +4744,10 @@ "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", "dev": true, "requires": { - "findup-sync": "0.3.0", - "grunt-known-options": "1.1.0", - "nopt": "3.0.6", - "resolve": "1.1.7" + "findup-sync": "~0.3.0", + "grunt-known-options": "~1.1.0", + "nopt": "~3.0.6", + "resolve": "~1.1.0" } }, "js-yaml": { @@ -5251,8 +4756,8 @@ "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "argparse": "^1.0.2", + "esprima": "^2.6.0" } }, "nopt": { @@ -5261,7 +4766,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "resolve": { @@ -5284,8 +4789,8 @@ "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=", "dev": true, "requires": { - "async": "1.5.2", - "rimraf": "2.6.2" + "async": "^1.5.2", + "rimraf": "^2.5.1" }, "dependencies": { "async": { @@ -5302,21 +4807,33 @@ "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", "dev": true, "requires": { - "chalk": "1.1.3", - "file-sync-cmp": "0.1.1" + "chalk": "^1.1.1", + "file-sync-cmp": "^0.1.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "strip-ansi": { @@ -5325,77 +4842,72 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, "grunt-contrib-watch": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.1.tgz", - "integrity": "sha512-8Zka/svGl6+ZwF7d6z/CfXwsb4cDODnajmZsY4nUAs9Ob0kJEcsLiDf5qm2HdDoEcm3NHjWCrFiWx+PZ2y4D7A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", + "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", "dev": true, "requires": { - "async": "1.5.2", - "gaze": "1.1.2", - "lodash": "4.17.10", - "tiny-lr": "0.2.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } + "async": "^2.6.0", + "gaze": "^1.1.0", + "lodash": "^4.17.10", + "tiny-lr": "^1.1.1" } }, "grunt-dojo2": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/grunt-dojo2/-/grunt-dojo2-0.1.3.tgz", - "integrity": "sha512-GmuQ8F2fTTKh7WjU/dkQ+YLGDHvXMjJTYP3Nnox5TMRwZF44V/wzpnL3d/E2L1gajsWMn3qcVTwDtmmnOIeZ3A==", - "dev": true, - "requires": { - "codecov.io": "0.1.6", - "cssnano": "3.10.0", - "dts-generator": "2.1.0", - "execa": "0.4.0", - "glob": "7.1.2", - "grunt-contrib-clean": "1.1.0", - "grunt-contrib-copy": "1.0.0", - "grunt-contrib-watch": "1.0.1", - "grunt-postcss": "0.8.0", - "grunt-text-replace": "0.4.0", - "grunt-ts": "5.5.1", - "grunt-tslint": "4.0.1", - "grunt-typings": "0.1.5", - "intern": "4.1.0", - "istanbul-lib-coverage": "1.1.2", - "istanbul-lib-report": "1.1.3", - "istanbul-reports": "1.1.4", - "lodash": "4.17.10", - "parse-git-config": "0.4.3", - "pkg-dir": "1.0.0", - "postcss-cssnext": "2.11.0", - "postcss-import": "9.1.0", - "postcss-modules": "0.6.4", - "remap-istanbul": "0.11.1", - "resolve-from": "2.0.0", - "shelljs": "0.7.8", - "tslint": "4.5.1", - "typed-css-modules": "0.3.1", + "version": "file:tarballs/grunt-dojo2-3.0.0-pre.tgz", + "integrity": "sha512-Rm2HxBI5mFpPkQvX2b4ovs2e/cJXN2V6rpsmWHqZrNAnJMF69rWSxaE+KUm0HhtBLhnQhTxXqBqzug/LQTXxMQ==", + "dev": true, + "requires": { + "codecov.io": ">=0.1.6", + "cssnano": "^3.10.0", + "dts-generator": ">=1.7.0", + "execa": "^0.4.0", + "glob": "^7.1.2", + "grunt-contrib-clean": ">=1.0.0", + "grunt-contrib-copy": ">=1.0.0", + "grunt-contrib-watch": ">=1.0.0", + "grunt-postcss": "^0.8.0", + "grunt-text-replace": ">=0.4.0", + "grunt-ts": ">=5.0.0", + "grunt-typings": "^0.1.5", + "intern": "~4.2.0", + "lodash": "^4.15.0", + "parse-git-config": "^0.4.2", + "pkg-dir": "^1.0.0", + "postcss-cssnext": "^2.9.0", + "postcss-import": "^9.1.0", + "postcss-modules": "^0.6.3", + "remap-istanbul": ">=0.6.3", + "resolve-from": "^2.0.0", + "shelljs": "^0.7.6", + "typed-css-modules": "^0.3.1", "typedoc": "0.5.9", - "umd-wrapper": "0.1.0" + "umd-wrapper": "^0.1.0" }, "dependencies": { - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "2.1.1" - } + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, "balanced-match": { "version": "0.4.2", @@ -5403,84 +4915,17 @@ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", "dev": true }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.4.1", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.2" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", - "dev": true, - "requires": { - "color-name": "1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "color-convert": { @@ -5489,107 +4934,28 @@ "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=", "dev": true }, - "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", - "dev": true - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.2.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, "execa": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz", "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=", "dev": true, "requires": { - "cross-spawn-async": "2.2.5", - "is-stream": "1.1.0", - "npm-run-path": "1.0.0", - "object-assign": "4.1.1", - "path-key": "1.0.0", - "strip-eof": "1.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" + "cross-spawn-async": "^2.1.1", + "is-stream": "^1.1.0", + "npm-run-path": "^1.0.0", + "object-assign": "^4.0.1", + "path-key": "^1.0.0", + "strip-eof": "^1.0.0" } }, - "grunt-tslint": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/grunt-tslint/-/grunt-tslint-4.0.1.tgz", - "integrity": "sha1-dcRuAluereAUYrvrSfb9TBl4O1o=", - "dev": true - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "package-json": "4.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "npm-run-path": { @@ -5598,7 +4964,7 @@ "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", "dev": true, "requires": { - "path-key": "1.0.0" + "path-key": "^1.0.0" } }, "onecolor": { @@ -5607,16 +4973,13 @@ "integrity": "sha1-pT7D/xccNEYBbdUhDRobVEv32HQ=", "dev": true }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0", - "semver": "5.5.0" + "pinkie-promise": "^2.0.0" } }, "path-key": { @@ -5631,9 +4994,9 @@ "integrity": "sha1-MNG6+0w73Ojpu0vVahOYVhkyDDQ=", "dev": true, "requires": { - "browserslist": "1.7.7", - "postcss": "5.2.18", - "reduce-css-calc": "1.3.0" + "browserslist": "^1.0.0", + "postcss": "^5.0.0", + "reduce-css-calc": "^1.2.7" } }, "pkg-dir": { @@ -5642,7 +5005,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" } }, "pleeease-filters": { @@ -5651,31 +5014,8 @@ "integrity": "sha1-Tf4OjxBGYTUXxktyi8gGCKfr8i8=", "dev": true, "requires": { - "onecolor": "2.4.2", - "postcss": "5.2.18" - } - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "onecolor": "~2.4.0", + "postcss": "^5.0.4" } }, "postcss-apply": { @@ -5684,8 +5024,8 @@ "integrity": "sha1-ovN8W9+ogeTBX08kXsDNlt0ucNU=", "dev": true, "requires": { - "balanced-match": "0.4.2", - "postcss": "5.2.18" + "balanced-match": "^0.4.1", + "postcss": "^5.0.21" } }, "postcss-attribute-case-insensitive": { @@ -5694,8 +5034,8 @@ "integrity": "sha1-zrc3d+EGFn6yM/GTjJvZ8uaXMI0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" + "postcss": "^5.1.1", + "postcss-selector-parser": "^2.2.0" } }, "postcss-color-function": { @@ -5704,10 +5044,10 @@ "integrity": "sha1-mtIm9VDop8f4uKd4YFRbbdf1UkE=", "dev": true, "requires": { - "css-color-function": "1.3.3", - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "postcss-value-parser": "3.3.0" + "css-color-function": "^1.2.0", + "postcss": "^5.0.4", + "postcss-message-helpers": "^2.0.0", + "postcss-value-parser": "^3.3.0" } }, "postcss-color-gray": { @@ -5716,10 +5056,10 @@ "integrity": "sha1-dEMu3mbdg7HRNjVlxos3bhj/Z3A=", "dev": true, "requires": { - "color": "0.11.4", - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-function-call": "1.0.2" + "color": "^0.11.3", + "postcss": "^5.0.4", + "postcss-message-helpers": "^2.0.0", + "reduce-function-call": "^1.0.1" } }, "postcss-color-hex-alpha": { @@ -5728,9 +5068,9 @@ "integrity": "sha1-RP1uyt5mAoZIyIHLZQTNy/3GzQk=", "dev": true, "requires": { - "color": "0.10.1", - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0" + "color": "^0.10.1", + "postcss": "^5.0.4", + "postcss-message-helpers": "^2.0.0" }, "dependencies": { "color": { @@ -5739,8 +5079,8 @@ "integrity": "sha1-wEGI34KiCd3rzOzazT7DIPGTc58=", "dev": true, "requires": { - "color-convert": "0.5.3", - "color-string": "0.3.0" + "color-convert": "^0.5.3", + "color-string": "^0.3.0" } } } @@ -5751,9 +5091,9 @@ "integrity": "sha1-9Tuxw0gxDOMHrYnjGBqGRzi15oc=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "units-css": "0.4.0" + "postcss": "^5.2.0", + "postcss-value-parser": "^3.3.0", + "units-css": "^0.4.0" } }, "postcss-color-hwb": { @@ -5762,10 +5102,10 @@ "integrity": "sha1-1jr6+bcMtZX5AKKcn+V78qMvq+w=", "dev": true, "requires": { - "color": "0.11.4", - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-function-call": "1.0.2" + "color": "^0.11.4", + "postcss": "^5.0.4", + "postcss-message-helpers": "^2.0.0", + "reduce-function-call": "^1.0.1" } }, "postcss-color-rebeccapurple": { @@ -5774,8 +5114,8 @@ "integrity": "sha1-dMZETny7fYVhO19yht96SRYIRRw=", "dev": true, "requires": { - "color": "0.11.4", - "postcss": "5.2.18" + "color": "^0.11.4", + "postcss": "^5.0.4" } }, "postcss-color-rgb": { @@ -5784,8 +5124,8 @@ "integrity": "sha1-8pJD4i6OjBNDRHQJI3LUzmBb6Lw=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.2.0", + "postcss-value-parser": "^3.3.0" } }, "postcss-color-rgba-fallback": { @@ -5794,9 +5134,9 @@ "integrity": "sha1-bSlJG+WZCpMXPUfnx29YELCUAro=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "rgb-hex": "1.0.0" + "postcss": "^5.0.0", + "postcss-value-parser": "^3.0.2", + "rgb-hex": "^1.0.0" } }, "postcss-cssnext": { @@ -5805,37 +5145,37 @@ "integrity": "sha1-MeaPAB5AlgTacDtm3hS4uMjJ8rE=", "dev": true, "requires": { - "autoprefixer": "6.7.7", - "caniuse-api": "1.6.1", - "chalk": "1.1.3", - "pixrem": "3.0.2", - "pleeease-filters": "3.0.1", - "postcss": "5.2.18", - "postcss-apply": "0.3.0", - "postcss-attribute-case-insensitive": "1.0.1", - "postcss-calc": "5.3.1", - "postcss-color-function": "2.0.1", - "postcss-color-gray": "3.0.1", - "postcss-color-hex-alpha": "2.0.0", - "postcss-color-hsl": "1.0.5", - "postcss-color-hwb": "2.0.1", - "postcss-color-rebeccapurple": "2.0.1", - "postcss-color-rgb": "1.1.4", - "postcss-color-rgba-fallback": "2.2.0", - "postcss-custom-media": "5.0.1", - "postcss-custom-properties": "5.0.2", - "postcss-custom-selectors": "3.0.0", - "postcss-font-family-system-ui": "1.0.2", - "postcss-font-variant": "2.0.1", - "postcss-image-set-polyfill": "0.3.5", - "postcss-initial": "1.5.3", - "postcss-media-minmax": "2.1.2", - "postcss-nesting": "2.3.1", - "postcss-pseudo-class-any-link": "1.0.0", - "postcss-pseudoelements": "3.0.0", - "postcss-replace-overflow-wrap": "1.0.0", - "postcss-selector-matches": "2.0.5", - "postcss-selector-not": "2.0.0" + "autoprefixer": "^6.0.2", + "caniuse-api": "^1.5.3", + "chalk": "^1.1.1", + "pixrem": "^3.0.0", + "pleeease-filters": "^3.0.0", + "postcss": "^5.0.4", + "postcss-apply": "^0.3.0", + "postcss-attribute-case-insensitive": "^1.0.1", + "postcss-calc": "^5.0.0", + "postcss-color-function": "^2.0.0", + "postcss-color-gray": "^3.0.0", + "postcss-color-hex-alpha": "^2.0.0", + "postcss-color-hsl": "^1.0.5", + "postcss-color-hwb": "^2.0.0", + "postcss-color-rebeccapurple": "^2.0.0", + "postcss-color-rgb": "^1.1.4", + "postcss-color-rgba-fallback": "^2.0.0", + "postcss-custom-media": "^5.0.0", + "postcss-custom-properties": "^5.0.0", + "postcss-custom-selectors": "^3.0.0", + "postcss-font-family-system-ui": "^1.0.1", + "postcss-font-variant": "^2.0.0", + "postcss-image-set-polyfill": "^0.3.3", + "postcss-initial": "^1.3.1", + "postcss-media-minmax": "^2.1.0", + "postcss-nesting": "^2.0.5", + "postcss-pseudo-class-any-link": "^1.0.0", + "postcss-pseudoelements": "^3.0.0", + "postcss-replace-overflow-wrap": "^1.0.0", + "postcss-selector-matches": "^2.0.0", + "postcss-selector-not": "^2.0.0" } }, "postcss-custom-media": { @@ -5844,7 +5184,7 @@ "integrity": "sha1-E40loYS/LrVN4S1VpsAcMKnYvYE=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.0" } }, "postcss-custom-properties": { @@ -5853,8 +5193,8 @@ "integrity": "sha1-lxnXjy2pz59TgQrrwj1GVhMKzrE=", "dev": true, "requires": { - "balanced-match": "0.4.2", - "postcss": "5.2.18" + "balanced-match": "^0.4.2", + "postcss": "^5.0.0" } }, "postcss-custom-selectors": { @@ -5863,9 +5203,9 @@ "integrity": "sha1-j4Ekn17Qeo0JF89qOf5bBWt/lqw=", "dev": true, "requires": { - "balanced-match": "0.2.1", - "postcss": "5.2.18", - "postcss-selector-matches": "2.0.5" + "balanced-match": "^0.2.0", + "postcss": "^5.0.0", + "postcss-selector-matches": "^2.0.0" }, "dependencies": { "balanced-match": { @@ -5882,9 +5222,9 @@ "integrity": "sha1-PhpeP7fjHl6ecUOcyw6AFFVpJ8c=", "dev": true, "requires": { - "lodash": "4.17.10", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "lodash": "^4.17.4", + "postcss": "^5.2.12", + "postcss-value-parser": "^3.3.0" } }, "postcss-font-variant": { @@ -5893,7 +5233,7 @@ "integrity": "sha1-fKKRA/WfoCyjrOLKIrL3VoU9Tvg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-import": { @@ -5902,12 +5242,12 @@ "integrity": "sha1-lf6YdqHnmvSfvcNYnwH+WqfMHoA=", "dev": true, "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "promise-each": "2.2.0", - "read-cache": "1.0.0", - "resolve": "1.7.1" + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "promise-each": "^2.2.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" } }, "postcss-initial": { @@ -5916,8 +5256,8 @@ "integrity": "sha1-IMPpHJaCLdsb7UlQjbltVrrDd9A=", "dev": true, "requires": { - "lodash.template": "4.4.0", - "postcss": "5.2.18" + "lodash.template": "^4.2.4", + "postcss": "^5.0.19" } }, "postcss-media-minmax": { @@ -5926,7 +5266,7 @@ "integrity": "sha1-RExc+JJqteT9iiUJ6Sl+dRZJzfg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-nesting": { @@ -5935,7 +5275,7 @@ "integrity": "sha1-lKa2pO9wf77CCof+5clXdZtOAc8=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.19" } }, "postcss-pseudo-class-any-link": { @@ -5944,8 +5284,8 @@ "integrity": "sha1-kDI5GWQB0zX+c6x1YYb6YuaTryY=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-selector-parser": "1.3.3" + "postcss": "^5.0.3", + "postcss-selector-parser": "^1.1.4" }, "dependencies": { "postcss-selector-parser": { @@ -5954,9 +5294,9 @@ "integrity": "sha1-0u4Z33pk+O8hwacchvfUg1yIwoE=", "dev": true, "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } @@ -5967,7 +5307,7 @@ "integrity": "sha1-bGghd8eQC6BTtt8X+MWQKEx7i7w=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-replace-overflow-wrap": { @@ -5976,7 +5316,7 @@ "integrity": "sha1-8KA7Meq5Y2ppNr/SEOKu8bQ0pkM=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.16" } }, "postcss-selector-matches": { @@ -5985,8 +5325,8 @@ "integrity": "sha1-+g9Dvle2jneqTNEYBwI0kqExAn8=", "dev": true, "requires": { - "balanced-match": "0.4.2", - "postcss": "5.2.18" + "balanced-match": "^0.4.2", + "postcss": "^5.0.0" } }, "postcss-selector-not": { @@ -5995,8 +5335,8 @@ "integrity": "sha1-xzrSGj91I0vuf+4mnhVP1qhpeY0=", "dev": true, "requires": { - "balanced-match": "0.2.1", - "postcss": "5.2.18" + "balanced-match": "^0.2.0", + "postcss": "^5.0.0" }, "dependencies": { "balanced-match": { @@ -6013,171 +5353,19 @@ "integrity": "sha1-v6+M2c2RZLWibXHrTxWgllMks8E=", "dev": true }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "tslint": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-4.5.1.tgz", - "integrity": "sha1-BTVocb7yOkNJBnNABvwYgza6gks=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "colors": "1.1.2", - "diff": "3.5.0", - "findup-sync": "0.3.0", - "glob": "7.1.2", - "optimist": "0.6.1", - "resolve": "1.7.1", - "tsutils": "1.9.1", - "update-notifier": "2.5.0" - } - }, - "tsutils": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-1.9.1.tgz", - "integrity": "sha1-ufmrROVa+WgYMdXyjQrur1x1DLA=", - "dev": true - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "1.3.0", - "chalk": "2.4.1", - "configstore": "3.1.2", - "import-lazy": "2.1.0", - "is-ci": "1.1.0", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.2" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", - "dev": true, - "requires": { - "color-name": "1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "ansi-regex": "^2.0.0" } }, - "widest-line": { + "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", - "dev": true, - "requires": { - "string-width": "2.1.1" - } - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } } @@ -6194,10 +5382,10 @@ "integrity": "sha512-WdedTJ/6zCXnI/coaouzqvkI19uwqbcPkdsXiDRKJyB5rOUlOxnCnTVbpeUdEckKVir2uHF3rDBYppj2p6N3+g==", "dev": true, "requires": { - "colors": "1.1.2", - "grunt-legacy-log-utils": "1.0.0", - "hooker": "0.2.3", - "lodash": "4.17.10" + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~1.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.5" } }, "grunt-legacy-log-utils": { @@ -6206,21 +5394,33 @@ "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", "dev": true, "requires": { - "chalk": "1.1.3", - "lodash": "4.3.0" + "chalk": "~1.1.1", + "lodash": "~4.3.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "lodash": { @@ -6235,8 +5435,14 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, @@ -6246,13 +5452,13 @@ "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", "dev": true, "requires": { - "async": "1.5.2", - "exit": "0.1.2", - "getobject": "0.1.0", - "hooker": "0.2.3", - "lodash": "4.3.0", - "underscore.string": "3.2.3", - "which": "1.2.14" + "async": "~1.5.2", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~4.3.0", + "underscore.string": "~3.2.3", + "which": "~1.2.1" }, "dependencies": { "async": { @@ -6273,7 +5479,7 @@ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } } } @@ -6284,22 +5490,34 @@ "integrity": "sha1-jzCor2B5A84MRfAfC+QsYOMc6w4=", "dev": true, "requires": { - "chalk": "1.1.3", - "diff": "2.2.3", - "postcss": "5.2.18" + "chalk": "^1.0.0", + "diff": "^2.0.2", + "postcss": "^5.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "diff": { @@ -6308,49 +5526,20 @@ "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", "dev": true }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, @@ -6366,14 +5555,14 @@ "integrity": "sha1-lXIBxrQhx3cilATwcILY5pnRIZk=", "dev": true, "requires": { - "chokidar": "1.0.6", + "chokidar": "~1.0.0", "csproj2ts": "0.0.7", - "es6-promise": "0.1.2", + "es6-promise": "~0.1.1", "lodash": "2.4.1", "ncp": "0.5.1", "rimraf": "2.2.6", - "semver": "5.5.0", - "strip-bom": "2.0.0", + "semver": "^5.1.0", + "strip-bom": "^2.0.0", "typescript": "1.8.9", "underscore": "1.5.1", "underscore.string": "2.3.3" @@ -6391,15 +5580,15 @@ "integrity": "sha1-ChwLzh4kmTr8EFpbgeom3aAeI68=", "dev": true, "requires": { - "anymatch": "1.3.2", - "arrify": "1.0.1", - "async-each": "0.1.6", - "fsevents": "0.3.8", - "glob-parent": "1.3.0", - "is-binary-path": "1.0.1", - "is-glob": "1.1.3", - "path-is-absolute": "1.0.1", - "readdirp": "1.4.0" + "anymatch": "^1.1.0", + "arrify": "^1.0.0", + "async-each": "^0.1.5", + "fsevents": "^0.3.8", + "glob-parent": "^1.0.0", + "is-binary-path": "^1.0.0", + "is-glob": "^1.1.3", + "path-is-absolute": "^1.0.0", + "readdirp": "^1.3.0" } }, "fsevents": { @@ -6409,7 +5598,7 @@ "dev": true, "optional": true, "requires": { - "nan": "2.10.0" + "nan": "^2.0.2" } }, "glob-parent": { @@ -6418,7 +5607,7 @@ "integrity": "sha1-lx7dgW7V21hwW1gHlkemTQrveWg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" }, "dependencies": { "is-glob": { @@ -6427,29 +5616,17 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, "is-glob": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-1.1.3.tgz", "integrity": "sha1-tMZLgwPTkRRJKkYNNkzPsNPAoEU=", "dev": true }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "lodash": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", @@ -6468,20 +5645,8 @@ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", "dev": true, "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "lru-cache": "2", + "sigmund": "~1.0.0" } }, "readdirp": { @@ -6490,9 +5655,9 @@ "integrity": "sha1-xd5vyz3sgFI8HHARPxoZDYr4LIk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "0.2.14", - "readable-stream": "1.0.34" + "graceful-fs": "~4.1.2", + "minimatch": "~0.2.12", + "readable-stream": "~1.0.26-2" } }, "rimraf": { @@ -6501,11 +5666,14 @@ "integrity": "sha1-xZWXVpsU2VatKcrMQr3d9fDqT0w=", "dev": true }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } }, "typescript": { "version": "1.8.9", @@ -6533,16 +5701,42 @@ "integrity": "sha1-GluJR6DWBCIxs6oTjACnOjlhW9w=", "dev": true, "requires": { - "typings-core": "1.6.1" + "typings-core": "^1.0.1" }, "dependencies": { + "configstore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", + "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", + "dev": true, + "requires": { + "dot-prop": "^3.0.0", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.1", + "os-tmpdir": "^1.0.0", + "osenv": "^0.1.0", + "uuid": "^2.0.1", + "write-file-atomic": "^1.1.2", + "xdg-basedir": "^2.0.0" + } + }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" + } + }, + "dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" } }, "popsicle": { @@ -6551,14 +5745,14 @@ "integrity": "sha1-/0QBAFyrQ6lBipFBBhHAAZdxLSE=", "dev": true, "requires": { - "any-promise": "1.3.0", - "arrify": "1.0.1", - "concat-stream": "1.6.2", - "form-data": "2.3.2", - "make-error-cause": "1.2.2", - "throwback": "1.1.1", - "tough-cookie": "2.3.4", - "xtend": "4.0.1" + "any-promise": "^1.3.0", + "arrify": "^1.0.0", + "concat-stream": "^1.4.7", + "form-data": "^2.0.0", + "make-error-cause": "^1.2.1", + "throwback": "^1.1.0", + "tough-cookie": "^2.0.0", + "xtend": "^4.0.0" } }, "promise-finally": { @@ -6567,7 +5761,16 @@ "integrity": "sha1-ImFsS6kCkW6Yi9RsVNfKoIkQzXc=", "dev": true, "requires": { - "any-promise": "1.3.0" + "any-promise": "^1.3.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" } }, "typings-core": { @@ -6576,38 +5779,64 @@ "integrity": "sha1-zkspMeovGbuPPay+xpmDrE6WSjc=", "dev": true, "requires": { - "any-promise": "1.3.0", - "array-uniq": "1.0.3", - "configstore": "2.1.0", - "debug": "2.6.9", - "detect-indent": "4.0.0", - "graceful-fs": "4.1.11", - "has": "1.0.1", - "invariant": "2.2.4", - "is-absolute": "0.2.6", - "listify": "1.0.0", - "lockfile": "1.0.4", - "make-error-cause": "1.2.2", - "mkdirp": "0.5.1", - "object.pick": "1.3.0", - "parse-json": "2.2.0", - "popsicle": "8.2.0", - "popsicle-proxy-agent": "3.0.0", - "popsicle-retry": "3.2.1", - "popsicle-rewrite": "1.0.0", - "popsicle-status": "2.0.1", - "promise-finally": "2.2.1", - "rc": "1.2.7", - "rimraf": "2.6.2", - "sort-keys": "1.1.2", - "string-template": "1.0.0", - "strip-bom": "2.0.0", - "thenify": "3.3.0", - "throat": "3.2.0", - "touch": "1.0.0", - "typescript": "2.6.1", - "xtend": "4.0.1", - "zip-object": "0.1.0" + "any-promise": "^1.3.0", + "array-uniq": "^1.0.2", + "configstore": "^2.0.0", + "debug": "^2.2.0", + "detect-indent": "^4.0.0", + "graceful-fs": "^4.1.2", + "has": "^1.0.1", + "invariant": "^2.2.0", + "is-absolute": "^0.2.3", + "listify": "^1.0.0", + "lockfile": "^1.0.1", + "make-error-cause": "^1.2.1", + "mkdirp": "^0.5.1", + "object.pick": "^1.1.1", + "parse-json": "^2.2.0", + "popsicle": "^8.0.2", + "popsicle-proxy-agent": "^3.0.0", + "popsicle-retry": "^3.2.0", + "popsicle-rewrite": "^1.0.0", + "popsicle-status": "^2.0.0", + "promise-finally": "^2.0.1", + "rc": "^1.1.5", + "rimraf": "^2.4.4", + "sort-keys": "^1.0.0", + "string-template": "^1.0.0", + "strip-bom": "^2.0.0", + "thenify": "^3.1.0", + "throat": "^3.0.0", + "touch": "^1.0.0", + "typescript": "^2.0.3", + "xtend": "^4.0.0", + "zip-object": "^0.1.0" + } + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "xdg-basedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" } } } @@ -6617,15 +5846,8 @@ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz", "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", "requires": { - "duplexer": "0.1.1", - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } + "duplexer": "^0.1.1", + "pify": "^3.0.0" } }, "handlebars": { @@ -6634,10 +5856,10 @@ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "async": { @@ -6660,8 +5882,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" } }, @@ -6671,7 +5893,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "uglify-js": { @@ -6681,9 +5903,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "source-map": { @@ -6695,13 +5917,6 @@ } } }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", @@ -6709,34 +5924,20 @@ "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" - } - }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -6744,7 +5945,14 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } } }, "has-flag": { @@ -6762,9 +5970,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "dependencies": { "isobject": { @@ -6779,8 +5987,8 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -6788,7 +5996,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -6796,7 +6004,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6806,7 +6014,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6816,28 +6024,30 @@ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz", + "integrity": "sha1-h81JH5tG5OKurKM1QWdmiF0tHtk=", + "dev": true, + "optional": true, "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "boom": "0.4.x", + "cryptiles": "0.2.x", + "hoek": "0.9.x", + "sntp": "0.2.x" } }, "he": { @@ -6856,15 +6066,16 @@ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", + "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=", + "dev": true }, "homedir-polyfill": { "version": "1.0.1", @@ -6872,7 +6083,7 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "hooker": { @@ -6882,65 +6093,32 @@ "dev": true }, "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, "html-comment-regex": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=" }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "requires": { - "whatwg-encoding": "1.0.3" - } - }, "html-entities": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" }, "html-minifier": { - "version": "3.5.15", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.15.tgz", - "integrity": "sha512-OZa4rfb6tZOZ3Z8Xf0jKxXkiDcFWldQePGYFDcgKqES2sXeWaEv9y6QQvWUtX3ySI3feApQi5uCsHLINQ6NoAw==", - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.11", - "commander": "2.15.1", - "he": "1.1.1", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.3.23" - } - }, - "html-webpack-include-assets-plugin": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-webpack-include-assets-plugin/-/html-webpack-include-assets-plugin-1.0.2.tgz", - "integrity": "sha512-e9ck8RWk+z6aV2XThCCpV/Cn8wK0SWoi8K7b1ZnOP9BSckh3z9/NFoWFc453aywCsyq8RQGhAPx/BOHpaACqkA==", + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.19.tgz", + "integrity": "sha512-Qr2JC9nsjK8oCrEmuB430ZIA8YWbF3D5LSjywD75FTuXmeqacwHgIM8wp3vHYzzPbklSjp53RdmDuzR4ub2HzA==", "requires": { - "glob": "7.1.2", - "minimatch": "3.0.4", - "slash": "1.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "camel-case": "3.0.x", + "clean-css": "4.1.x", + "commander": "2.16.x", + "he": "1.1.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" } }, "html-webpack-plugin": { @@ -6948,28 +6126,23 @@ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", "requires": { - "bluebird": "3.5.1", - "html-minifier": "3.5.15", - "loader-utils": "0.2.17", - "lodash": "4.17.10", - "pretty-error": "2.1.1", - "toposort": "1.0.7" + "bluebird": "^3.4.7", + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "toposort": "^1.0.0" }, "dependencies": { - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, "loader-utils": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } } } @@ -6979,10 +6152,10 @@ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" + "domelementtype": "1", + "domhandler": "2.1", + "domutils": "1.1", + "readable-stream": "1.0" }, "dependencies": { "domutils": { @@ -6990,29 +6163,8 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", "requires": { - "domelementtype": "1.3.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "domelementtype": "1" } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } }, @@ -7021,10 +6173,10 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.5.0" + "statuses": ">= 1.4.0 < 2" }, "dependencies": { "statuses": { @@ -7035,9 +6187,9 @@ } }, "http-parser-js": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.12.tgz", - "integrity": "sha1-uc+/Sizybw/DSxDKFImid3HjR08=", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", + "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", "dev": true }, "http-proxy-agent": { @@ -7046,19 +6198,21 @@ "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", "dev": true, "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" + "agent-base": "2", + "debug": "2", + "extend": "3" } }, "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", + "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", + "dev": true, + "optional": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "asn1": "0.1.11", + "assert-plus": "^0.1.5", + "ctype": "0.5.3" } }, "https-browserify": { @@ -7072,9 +6226,9 @@ "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", "dev": true, "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" + "agent-base": "2", + "debug": "2", + "extend": "3" } }, "husky": { @@ -7083,9 +6237,9 @@ "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", "dev": true, "requires": { - "is-ci": "1.1.0", - "normalize-path": "1.0.0", - "strip-indent": "2.0.0" + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" }, "dependencies": { "normalize-path": { @@ -7117,13 +6271,53 @@ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "requires": { - "postcss": "6.0.1" + "postcss": "^6.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "ieee754": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", - "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==" + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" }, "iferr": { "version": "0.1.5", @@ -7131,9 +6325,9 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" }, "ignore": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", - "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==" + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" }, "immediate": { "version": "3.0.6", @@ -7152,15 +6346,8 @@ "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.7.1.tgz", "integrity": "sha1-8gS180cCoywdt9SNidXoZ6BEElM=", "requires": { - "loader-utils": "1.1.0", - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "loader-utils": "^1.0.2", + "source-map": "^0.5.6" } }, "imurmurhash": { @@ -7172,8 +6359,9 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "indexes-of": { @@ -7191,8 +6379,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -7203,7 +6391,8 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true }, "inquirer": { "version": "4.0.2", @@ -7211,390 +6400,220 @@ "integrity": "sha512-+f3qDNeZpkhFJ61NBA9jXDrGGhoQuqfEum9A681c9oHoIbGgVqjogKynjB/vNVP+nVu9w3FbFQ35c0ibU0MaIQ==", "dev": true, "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.3.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.10", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - } + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" } }, "intern": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/intern/-/intern-4.1.0.tgz", - "integrity": "sha512-6RtCkpWtpDiR2mzHn5N6pZdej4MePan7J5Acs2n2iSmqCUP97UbyEPDVsObxo7Mv+IktI0auqft7/WPHxFehpg==", - "dev": true, - "requires": { - "@dojo/core": "0.1.0", - "@dojo/has": "0.1.2", - "@dojo/interfaces": "0.1.0", - "@dojo/shim": "0.1.0", - "@theintern/digdug": "2.0.4", - "@theintern/leadfoot": "2.0.3", - "@types/benchmark": "1.0.31", - "@types/chai": "4.0.10", - "@types/charm": "1.0.1", - "@types/diff": "3.2.2", - "@types/express": "4.0.39", - "@types/http-errors": "1.5.34", - "@types/istanbul-lib-coverage": "1.1.0", - "@types/istanbul-lib-hook": "1.0.0", - "@types/istanbul-lib-instrument": "1.7.1", - "@types/istanbul-lib-report": "1.1.0", - "@types/istanbul-lib-source-maps": "1.2.1", - "@types/istanbul-reports": "1.1.0", - "@types/lodash": "4.14.108", - "@types/mime-types": "2.1.0", - "@types/platform": "1.3.1", - "@types/resolve": "0.0.4", - "@types/shell-quote": "1.6.0", - "@types/source-map": "0.1.29", - "@types/statuses": "1.2.28", - "@types/ws": "0.0.42", - "benchmark": "2.1.4", - "body-parser": "1.17.2", - "chai": "4.1.2", - "charm": "1.0.2", - "diff": "3.2.0", - "express": "4.15.5", - "glob": "7.1.2", - "http-errors": "1.6.3", - "istanbul-lib-coverage": "1.1.2", - "istanbul-lib-hook": "1.0.7", - "istanbul-lib-instrument": "1.7.5", - "istanbul-lib-report": "1.1.3", - "istanbul-lib-source-maps": "1.2.3", - "istanbul-reports": "1.1.4", - "lodash": "4.17.10", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "platform": "1.3.5", - "resolve": "1.4.0", - "shell-quote": "1.6.1", - "source-map": "0.5.7", - "statuses": "1.3.1", - "tslib": "1.8.1", - "ws": "2.3.1" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/intern/-/intern-4.2.2.tgz", + "integrity": "sha512-yVe+IsWXAdZaj2LX9PiZ9KUQzru67zuCcIf28ulxh9bp7dvLvmyeEH1d+DpF78+zvl7ebAOEvX3NDQSc/PEdOQ==", + "dev": true, + "requires": { + "@dojo/core": "~0.5.0", + "@dojo/has": "~0.1.2", + "@dojo/interfaces": "~0.2.1", + "@dojo/shim": "~0.2.7", + "@theintern/digdug": "~2.1.0", + "@theintern/leadfoot": "~2.1.0", + "@types/benchmark": "~1.0.30", + "@types/chai": "~4.1.2", + "@types/charm": "~1.0.0", + "@types/diff": "~3.5.1", + "@types/express": "~4.11.1", + "@types/http-errors": "~1.6.1", + "@types/istanbul-lib-coverage": "~1.1.0", + "@types/istanbul-lib-hook": "~1.0.0", + "@types/istanbul-lib-instrument": "~1.7.1", + "@types/istanbul-lib-report": "~1.1.0", + "@types/istanbul-lib-source-maps": "~1.2.1", + "@types/istanbul-reports": "~1.1.0", + "@types/lodash": "~4.14.107", + "@types/mime-types": "~2.1.0", + "@types/platform": "~1.3.0", + "@types/resolve": "0.0.7", + "@types/shell-quote": "~1.6.0", + "@types/statuses": "~1.3.0", + "@types/ws": "~4.0.2", + "benchmark": "~2.1.4", + "body-parser": "~1.18.2", + "chai": "~4.1.2", + "charm": "~1.0.2", + "diff": "~3.5.0", + "express": "~4.16.3", + "glob": "~7.1.1", + "http-errors": "~1.6.3", + "istanbul-lib-coverage": "~1.2.0", + "istanbul-lib-hook": "~1.1.0", + "istanbul-lib-instrument": "~1.10.0", + "istanbul-lib-report": "~1.1.3", + "istanbul-lib-source-maps": "~1.2.4", + "istanbul-reports": "~1.3.0", + "lodash": "~4.17.5", + "mime-types": "~2.1.18", + "minimatch": "~3.0.4", + "platform": "~1.3.5", + "resolve": "~1.7.1", + "shell-quote": "~1.6.1", + "source-map": "~0.6.1", + "statuses": "~1.5.0", + "tslib": "~1.9.0", + "ws": "~5.1.1" }, "dependencies": { - "@dojo/has": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@dojo/has/-/has-0.1.2.tgz", - "integrity": "sha512-122xXU9xHjG/EayITIAiIdKVphZTZ2wM9IEBArarkBQzXZP1shGAbTJq7NHWUoTemw48tvTxr+OOi7wVCm7IXg==", - "dev": true - }, - "@dojo/shim": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@dojo/shim/-/shim-0.1.0.tgz", - "integrity": "sha512-008RP8DB175ib26dde7wQWFiYIbSACFaArLdLHYdY/cQLN9s3yVj2Gtp5C/9YoY3Ziy9wA241myOjy6QcVHcWw==", - "dev": true - }, "@types/express": { - "version": "4.0.39", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.0.39.tgz", - "integrity": "sha512-dBUam7jEjyuEofigUXCtublUHknRZvcRgITlGsTbFgPvnTwtQUt2NgLakbsf+PsGo/Nupqr3IXCYsOpBpofyrA==", - "dev": true, - "requires": { - "@types/body-parser": "1.17.0", - "@types/express-serve-static-core": "4.11.1", - "@types/serve-static": "1.13.2" - } - }, - "@types/source-map": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/@types/source-map/-/source-map-0.1.29.tgz", - "integrity": "sha1-1wSKYBgLCfiqbVO9oxHGtRy9cBg=", - "dev": true - }, - "body-parser": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", - "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", - "dev": true, - "requires": { - "bytes": "2.4.0", - "content-type": "1.0.4", - "debug": "2.6.7", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.15", - "on-finished": "2.3.0", - "qs": "6.4.0", - "raw-body": "2.2.0", - "type-is": "1.6.16" - } - }, - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", - "dev": true - }, - "debug": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.11.1.tgz", + "integrity": "sha512-ttWle8cnPA5rAelauSWeWJimtY2RsUf2aspYZs7xPHiWgOlPn6nnUfBMtrkcnjFJuIHJF4gNOdVvpLK2Zmvh6g==", "dev": true, "requires": { - "ms": "2.0.0" + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" } }, - "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", - "dev": true - }, "express": { - "version": "4.15.5", - "resolved": "https://registry.npmjs.org/express/-/express-4.15.5.tgz", - "integrity": "sha1-ZwI1ypWYiQpa6BcLg9tyK4Qu2Sc=", + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", + "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.0.6", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "1.1.5", - "qs": "6.5.0", - "range-parser": "1.2.0", - "send": "0.15.6", - "serve-static": "1.12.6", - "setprototypeof": "1.0.3", - "statuses": "1.3.1", - "type-is": "1.6.16", - "utils-merge": "1.0.0", - "vary": "1.1.2" + "proxy-addr": "~2.0.3", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "qs": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", - "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==", + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", "dev": true } } }, "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true } } }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", - "dev": true - }, - "ipaddr.js": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", - "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=", - "dev": true - }, - "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", - "dev": true - }, - "proxy-addr": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", - "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", - "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.4.0" - } - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - }, - "raw-body": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", - "dev": true, - "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.15", - "unpipe": "1.0.0" - } - }, "resolve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", - "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, - "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", - "dev": true - }, "send": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/send/-/send-0.15.6.tgz", - "integrity": "sha1-IPI6nJJbdiq4JwX+L52yUqzkfjQ=", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.3.4", + "http-errors": "~1.6.2", + "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true } } }, "serve-static": { - "version": "1.12.6", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.6.tgz", - "integrity": "sha1-uXN3P2NEmTTaVOW+ul4x2fQhFXc=", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.15.6" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" } }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "ws": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-2.3.1.tgz", - "integrity": "sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA=", - "dev": true, - "requires": { - "safe-buffer": "5.0.1", - "ultron": "1.1.1" - } + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true } } }, @@ -7606,7 +6625,8 @@ "intersection-observer": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.4.2.tgz", - "integrity": "sha512-SFGCL4d6A7J+aXNHTx94zV7ydngTKraDBvoJjn5iGgsXYhXgAXIYj8i3ewJoO80BRB7qtBB3sBlrdGNwTktzLg==" + "integrity": "sha512-SFGCL4d6A7J+aXNHTx94zV7ydngTKraDBvoJjn5iGgsXYhXgAXIYj8i3ewJoO80BRB7qtBB3sBlrdGNwTktzLg==", + "dev": true }, "invariant": { "version": "2.2.4", @@ -7614,7 +6634,7 @@ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -7633,8 +6653,8 @@ "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", "dev": true, "requires": { - "is-relative": "0.2.1", - "is-windows": "0.2.0" + "is-relative": "^0.2.1", + "is-windows": "^0.2.0" }, "dependencies": { "is-windows": { @@ -7655,20 +6675,20 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -7681,7 +6701,7 @@ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-ci": { @@ -7690,7 +6710,7 @@ "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", "dev": true, "requires": { - "ci-info": "1.1.3" + "ci-info": "^1.0.0" } }, "is-data-descriptor": { @@ -7698,7 +6718,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-descriptor": { @@ -7706,9 +6726,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -7733,7 +6753,7 @@ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -7742,32 +6762,30 @@ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^1.0.0" } }, "is-installed-globally": { @@ -7776,8 +6794,8 @@ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "dev": true, "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" } }, "is-natural-number": { @@ -7789,20 +6807,22 @@ "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true }, "is-observable": { "version": "0.2.0", @@ -7810,22 +6830,7 @@ "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", "dev": true, "requires": { - "symbol-observable": "0.2.4" - } - }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "requires": { - "is-number": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - } + "symbol-observable": "^0.2.2" } }, "is-path-inside": { @@ -7834,7 +6839,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-obj": { @@ -7847,7 +6852,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -7876,7 +6881,8 @@ "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true }, "is-regexp": { "version": "1.0.0", @@ -7890,13 +6896,14 @@ "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", "dev": true, "requires": { - "is-unc-path": "0.1.2" + "is-unc-path": "^0.1.1" } }, "is-retry-allowed": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true }, "is-stream": { "version": "1.1.0", @@ -7908,7 +6915,7 @@ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "requires": { - "html-comment-regex": "1.1.1" + "html-comment-regex": "^1.1.0" } }, "is-there": { @@ -7916,24 +6923,20 @@ "resolved": "https://registry.npmjs.org/is-there/-/is-there-4.4.3.tgz", "integrity": "sha1-osSTZsakh/cZ28rYDL3iEkjSwY0=" }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, "is-unc-path": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", "dev": true, "requires": { - "unc-path-regex": "0.1.2" + "unc-path-regex": "^0.1.0" } }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true }, "is-windows": { "version": "1.0.2", @@ -7941,9 +6944,9 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "isexe": { "version": "2.0.0", @@ -7961,33 +6964,35 @@ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "requires": { "isarray": "1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, "istanbul": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.11", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.4.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.3.0", - "wordwrap": "1.0.0" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, "dependencies": { "abbrev": { @@ -8002,42 +7007,17 @@ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-flag": { @@ -8052,7 +7032,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } }, "resolve": { @@ -8061,55 +7041,51 @@ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": "1.0.1" - } - }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true } } }, "istanbul-lib-coverage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz", - "integrity": "sha512-tZYA0v5A7qBSsOzcebJJ/z3lk3oSzH62puG78DbBA1+zupipX2CakDyiPV3pOb8He+jBwVimuwB0dTnh38hX0w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", "dev": true }, "istanbul-lib-hook": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", - "integrity": "sha512-3U2HB9y1ZV9UmFlE12Fx+nPtFqIymzrqCksrXujm3NVbAZIJg/RfYgO1XiIa0mbmxTjWpVEVlkIZJ25xVIAfkQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", + "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", "dev": true, "requires": { - "append-transform": "0.4.0" + "append-transform": "^0.4.0" } }, "istanbul-lib-instrument": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.5.tgz", - "integrity": "sha1-rbWW+PDLi5XnOSBjUaOKWGryGx4=", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", "dev": true, "requires": { - "babel-generator": "6.26.1", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.2", - "semver": "5.5.0" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.0", + "semver": "^5.3.0" } }, "istanbul-lib-report": { @@ -8118,10 +7094,10 @@ "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.2", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" }, "dependencies": { "has-flag": { @@ -8136,22 +7112,22 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } }, "istanbul-lib-source-maps": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", - "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz", + "integrity": "sha512-8O2T/3VhrQHn0XcJbP1/GN7kXMiRAlPi+fj3uEHrjBD8Oz7Py0prSC25C09NuAZS6bgW1NNKAvCSHZXB0irSGA==", "dev": true, "requires": { - "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.2", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" }, "dependencies": { "debug": { @@ -8162,22 +7138,16 @@ "requires": { "ms": "2.0.0" } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, "istanbul-reports": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.4.tgz", - "integrity": "sha512-DfSTVOTkuO+kRmbO8Gk650Wqm1WRGr6lrdi2EwDK1vxpS71vdlLd613EpzOKdIFioB5f/scJTjeWBnvd1FWejg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", "dev": true, "requires": { - "handlebars": "4.0.11" + "handlebars": "^4.0.3" } }, "jest-docblock": { @@ -8198,16 +7168,16 @@ "integrity": "sha512-k4HLI1rZQjlU+EC682RlQ6oZvLrE5SCh3brseQc24vbZTxzT/k/3urar5QMCVgjadmSO7lECeGdc6YxnM3yEGg==", "dev": true, "requires": { - "chalk": "2.3.0", - "jest-get-type": "21.2.0", - "leven": "2.1.0", - "pretty-format": "21.2.1" + "chalk": "^2.0.1", + "jest-get-type": "^21.2.0", + "leven": "^2.1.0", + "pretty-format": "^21.2.1" } }, "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz", + "integrity": "sha512-hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q==" }, "js-tokens": { "version": "3.0.2", @@ -8219,54 +7189,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" - } - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "jsdom": { - "version": "11.6.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.6.2.tgz", - "integrity": "sha512-pAeZhpbSlUp5yQcS6cBQJwkbzmv4tWFaYxHbFVSxzXefqjvtRA851Z5N2P+TguVG9YeUDcgb8pdeVQRJh0XR3Q==", - "requires": { - "abab": "1.0.4", - "acorn": "5.5.3", - "acorn-globals": "4.1.0", - "array-equal": "1.0.0", - "browser-process-hrtime": "0.1.2", - "content-type-parser": "1.0.2", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "domexception": "1.0.1", - "escodegen": "1.9.1", - "html-encoding-sniffer": "1.0.2", - "left-pad": "1.3.0", - "nwmatcher": "1.4.4", - "parse5": "4.0.0", - "pn": "1.1.0", - "request": "2.85.0", - "request-promise-native": "1.0.5", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.4", - "w3c-hr-time": "1.0.1", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.3", - "whatwg-url": "6.4.1", - "ws": "4.1.0", - "xml-name-validator": "3.0.0" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, "jsesc": { @@ -8284,11 +7208,6 @@ "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", @@ -8297,7 +7216,8 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, "json5": { "version": "0.5.1", @@ -8309,7 +7229,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -8324,34 +7244,15 @@ "integrity": "sha1-RMJpAuSujs4jZs7cn/FrEKXzkcY=", "dev": true, "requires": { - "any-promise": "1.3.0", - "graceful-fs": "4.1.11", - "make-error-cause": "1.2.2", - "object.pick": "1.3.0", - "parse-json": "2.2.0", - "strip-bom": "3.0.0", - "thenify": "3.3.0", - "throat": "3.2.0", - "xtend": "4.0.1" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "any-promise": "^1.3.0", + "graceful-fs": "^4.1.4", + "make-error-cause": "^1.2.1", + "object.pick": "^1.1.2", + "parse-json": "^2.2.0", + "strip-bom": "^3.0.0", + "thenify": "^3.2.0", + "throat": "^3.0.0", + "xtend": "^4.0.1" } }, "jszip": { @@ -8360,11 +7261,11 @@ "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", "dev": true, "requires": { - "core-js": "2.3.0", - "es6-promise": "3.0.2", - "lie": "3.1.1", - "pako": "1.0.6", - "readable-stream": "2.0.6" + "core-js": "~2.3.0", + "es6-promise": "~3.0.2", + "lie": "~3.1.0", + "pako": "~1.0.2", + "readable-stream": "~2.0.6" }, "dependencies": { "core-js": { @@ -8379,6 +7280,12 @@ "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", "dev": true }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", @@ -8391,19 +7298,13 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true } } }, @@ -8418,15 +7319,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "requires": { - "graceful-fs": "4.1.11" + "is-buffer": "^1.1.5" } }, "last-call-webpack-plugin": { @@ -8434,16 +7327,17 @@ "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-2.1.2.tgz", "integrity": "sha512-CZc+m2xZm51J8qSwdODeiiNeqh8CYkKEq6Rw8IkE4i/4yqf2cJhjQPsA6BtAV970ePRNhwEOXhy2U5xc5Jwh9Q==", "requires": { - "lodash": "4.17.10", - "webpack-sources": "1.1.0" + "lodash": "^4.17.4", + "webpack-sources": "^1.0.1" } }, "latest-version": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", - "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, "requires": { - "package-json": "2.4.0" + "package-json": "^4.0.0" } }, "lazy-cache": { @@ -8456,14 +7350,9 @@ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" - }, "leven": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", @@ -8474,9 +7363,10 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "lie": { @@ -8485,7 +7375,7 @@ "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", "dev": true, "requires": { - "immediate": "3.0.6" + "immediate": "~3.0.5" } }, "lint-staged": { @@ -8494,26 +7384,26 @@ "integrity": "sha512-ZUftK94S4vedpQG1LlA2tc2AuQXXBwc+1lB+j8SEfG5+p2dqu3Ug8iYQ8jdap+uLkhDw4OaJXqE+CZ/L+vfv+Q==", "dev": true, "requires": { - "app-root-path": "2.0.1", - "chalk": "2.3.0", - "commander": "2.15.1", - "cosmiconfig": "3.1.0", - "debug": "3.1.0", - "dedent": "0.7.0", - "execa": "0.8.0", - "find-parent-dir": "0.3.0", - "is-glob": "4.0.0", - "jest-validate": "21.2.1", - "listr": "0.13.0", - "lodash": "4.17.10", - "log-symbols": "2.1.0", - "minimatch": "3.0.4", - "npm-which": "3.0.1", - "p-map": "1.2.0", - "path-is-inside": "1.0.2", - "pify": "3.0.0", + "app-root-path": "^2.0.0", + "chalk": "^2.1.0", + "commander": "^2.11.0", + "cosmiconfig": "^3.1.0", + "debug": "^3.1.0", + "dedent": "^0.7.0", + "execa": "^0.8.0", + "find-parent-dir": "^0.3.0", + "is-glob": "^4.0.0", + "jest-validate": "^21.1.0", + "listr": "^0.13.0", + "lodash": "^4.17.4", + "log-symbols": "^2.0.0", + "minimatch": "^3.0.0", + "npm-which": "^3.0.1", + "p-map": "^1.1.1", + "path-is-inside": "^1.0.2", + "pify": "^3.0.0", "staged-git-files": "0.0.4", - "stringify-object": "3.2.2" + "stringify-object": "^3.2.0" }, "dependencies": { "cosmiconfig": { @@ -8522,10 +7412,10 @@ "integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==", "dev": true, "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.11.0", - "parse-json": "3.0.0", - "require-from-string": "2.0.2" + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^3.0.0", + "require-from-string": "^2.0.1" } }, "debug": { @@ -8538,9 +7428,15 @@ } }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-glob": { @@ -8549,17 +7445,17 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "parse-json": { @@ -8568,15 +7464,9 @@ "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.3.1" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -8597,23 +7487,23 @@ "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "figures": "1.7.0", - "indent-string": "2.1.0", - "is-observable": "0.2.0", - "is-promise": "2.1.0", - "is-stream": "1.1.0", - "listr-silent-renderer": "1.1.1", - "listr-update-renderer": "0.4.0", - "listr-verbose-renderer": "0.4.1", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "ora": "0.2.3", - "p-map": "1.2.0", - "rxjs": "5.5.10", - "stream-to-observable": "0.2.0", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "figures": "^1.7.0", + "indent-string": "^2.1.0", + "is-observable": "^0.2.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.4.0", + "listr-verbose-renderer": "^0.4.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "ora": "^0.2.3", + "p-map": "^1.1.1", + "rxjs": "^5.4.2", + "stream-to-observable": "^0.2.0", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-escapes": { @@ -8622,17 +7512,29 @@ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cli-cursor": { @@ -8641,7 +7543,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "cli-spinners": { @@ -8656,8 +7558,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "log-symbols": { @@ -8666,7 +7568,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } }, "log-update": { @@ -8675,8 +7577,8 @@ "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "cli-cursor": "1.0.2" + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" } }, "onetime": { @@ -8691,10 +7593,10 @@ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-spinners": "0.1.2", - "object-assign": "4.1.1" + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "^0.1.2", + "object-assign": "^4.0.1" } }, "restore-cursor": { @@ -8703,8 +7605,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "strip-ansi": { @@ -8713,8 +7615,14 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, @@ -8730,14 +7638,14 @@ "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "elegant-spinner": "1.0.1", - "figures": "1.7.0", - "indent-string": "3.2.0", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-escapes": { @@ -8746,17 +7654,29 @@ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cli-cursor": { @@ -8765,7 +7685,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "figures": { @@ -8774,8 +7694,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "indent-string": { @@ -8790,7 +7710,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } }, "log-update": { @@ -8799,8 +7719,8 @@ "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "cli-cursor": "1.0.2" + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" } }, "onetime": { @@ -8815,8 +7735,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "strip-ansi": { @@ -8825,8 +7745,14 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, @@ -8836,23 +7762,35 @@ "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "date-fns": "1.29.0", - "figures": "1.7.0" + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cli-cursor": { @@ -8861,7 +7799,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "figures": { @@ -8870,8 +7808,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "onetime": { @@ -8886,8 +7824,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "strip-ansi": { @@ -8896,8 +7834,14 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, @@ -8908,15 +7852,21 @@ "dev": true }, "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } } }, "loader-runner": { @@ -8929,9 +7879,9 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -8939,15 +7889,8 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lockfile": { @@ -8956,7 +7899,7 @@ "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", "dev": true, "requires": { - "signal-exit": "3.0.2" + "signal-exit": "^3.0.2" } }, "lodash": { @@ -8974,6 +7917,11 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -8985,18 +7933,13 @@ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, "lodash.template": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.1.0" + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { @@ -9004,7 +7947,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", "requires": { - "lodash._reinterpolate": "3.0.0" + "lodash._reinterpolate": "~3.0.0" } }, "lodash.uniq": { @@ -9017,7 +7960,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.1.0.tgz", "integrity": "sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ==", "requires": { - "chalk": "2.3.0" + "chalk": "^2.0.1" } }, "log-update": { @@ -9025,34 +7968,9 @@ "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", "requires": { - "ansi-escapes": "3.1.0", - "cli-cursor": "2.1.0", - "wrap-ansi": "3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0" - } - } + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" } }, "loglevelnext": { @@ -9060,14 +7978,14 @@ "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz", "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", "requires": { - "es6-symbol": "3.1.1", - "object.assign": "4.1.0" + "es6-symbol": "^3.1.1", + "object.assign": "^4.1.0" } }, "lolex": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.2.tgz", - "integrity": "sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.1.tgz", + "integrity": "sha512-Oo2Si3RMKV3+lV5MsSWplDQFoTClz/24S0MMHYcgGWWmFXr6TMlqcqk/l1GtH+d5wLBwNRiqGnwDRMirtFalJw==", "dev": true }, "longest": { @@ -9076,12 +7994,12 @@ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "loud-rejection": { @@ -9089,8 +8007,8 @@ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lower-case": { @@ -9101,35 +8019,24 @@ "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true }, "lru-cache": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", - "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "macaddress": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", - "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=" - }, "make-dir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", - "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "requires": { - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } + "pify": "^3.0.0" } }, "make-error": { @@ -9144,7 +8051,7 @@ "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", "dev": true, "requires": { - "make-error": "1.3.4" + "make-error": "^1.2.0" } }, "map-cache": { @@ -9155,14 +8062,15 @@ "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "marked": { @@ -9176,13 +8084,18 @@ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=" }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "media-typer": { @@ -9195,7 +8108,7 @@ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "memory-fs": { @@ -9203,79 +8116,181 @@ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" }, "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-utf8": "^0.2.0" } } } }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -9293,7 +8308,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } }, "mimic-fn": { @@ -9316,29 +8331,29 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mississippi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.5.4", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.4.0", - "stream-each": "1.2.2", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -9346,8 +8361,8 @@ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -9355,7 +8370,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -9366,13 +8381,6 @@ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } } }, "mockery": { @@ -9386,12 +8394,12 @@ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -9412,22 +8420,21 @@ "optional": true }, "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "arr-diff": { @@ -9469,24 +8476,18 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, "nise": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.3.tgz", - "integrity": "sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.2.tgz", + "integrity": "sha512-BxH/DxoQYYdhKgVAfqVy4pzXRZELHOIewzoesxpjYvpU+7YOalQhGNPf7wAx8pLrTNPrHRDlLOkAl8UI0ZpXjw==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "just-extend": "1.1.27", - "lolex": "2.3.2", - "path-to-regexp": "1.7.0", - "text-encoding": "0.6.4" + "@sinonjs/formatio": "^2.0.0", + "just-extend": "^1.1.27", + "lolex": "^2.3.2", + "path-to-regexp": "^1.7.0", + "text-encoding": "^0.6.4" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "path-to-regexp": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", @@ -9503,15 +8504,7 @@ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "requires": { - "lower-case": "1.1.4" - } - }, - "node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", - "requires": { - "minimatch": "3.0.4" + "lower-case": "^1.1.1" } }, "node-libs-browser": { @@ -9519,49 +8512,67 @@ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.1", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=" - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true - }, "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", "dev": true, "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "normalize-package-data": { @@ -9569,10 +8580,10 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.3" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -9580,7 +8591,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "normalize-range": { @@ -9593,10 +8604,10 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" } }, "npm-path": { @@ -9605,7 +8616,7 @@ "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", "dev": true, "requires": { - "which": "1.3.0" + "which": "^1.2.10" } }, "npm-run-path": { @@ -9613,7 +8624,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npm-which": { @@ -9622,9 +8633,9 @@ "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", "dev": true, "requires": { - "commander": "2.15.1", - "npm-path": "2.0.4", - "which": "1.3.0" + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" } }, "nth-check": { @@ -9632,7 +8643,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "num2fraction": { @@ -9645,15 +8656,12 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, - "nwmatcher": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", - "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==" - }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz", + "integrity": "sha1-8ilW8x6nFRqCHl8vsywRPK2Ln2k=", + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -9665,9 +8673,9 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -9675,22 +8683,22 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } }, "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" }, "dependencies": { "isobject": { @@ -9705,10 +8713,10 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.11" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "object.omit": { @@ -9716,8 +8724,8 @@ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -9725,7 +8733,7 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -9748,7 +8756,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onecolor": { @@ -9761,7 +8769,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "opener": { @@ -9775,22 +8783,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "optimize-css-assets-webpack-plugin": { @@ -9798,21 +8792,30 @@ "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-3.2.0.tgz", "integrity": "sha512-Fjn7wyyadPAriuH2DHamDQw5B8GohEWbroBkKoPeP+vSF2PIAPI7WDihi8WieMRb/At4q7Ea7zTKaMDuSoIAAg==", "requires": { - "cssnano": "3.10.0", - "last-call-webpack-plugin": "2.1.2" + "cssnano": "^3.4.0", + "last-call-webpack-plugin": "^2.1.2" } }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } } }, "ora": { @@ -9820,22 +8823,32 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-1.3.0.tgz", "integrity": "sha1-gAeN0rkqk0r2ajrXKluRBpTt5Ro=", "requires": { - "chalk": "1.1.3", - "cli-cursor": "2.1.0", - "cli-spinners": "1.3.1", - "log-symbols": "1.0.2" + "chalk": "^1.1.1", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.0.0", + "log-symbols": "^1.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "log-symbols": { @@ -9843,7 +8856,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } }, "strip-ansi": { @@ -9851,8 +8864,13 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, @@ -9871,9 +8889,9 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" }, "dependencies": { "execa": { @@ -9881,13 +8899,13 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } } } @@ -9895,15 +8913,17 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true }, "osenv": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "p-finally": { @@ -9912,11 +8932,11 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -9924,7 +8944,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -9939,14 +8959,15 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, "package-json": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", - "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, "requires": { - "got": "5.7.1", - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0", - "semver": "5.5.0" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" } }, "pako": { @@ -9959,9 +8980,38 @@ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "param-case": { @@ -9969,7 +9019,7 @@ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parse-asn1": { @@ -9977,11 +9027,11 @@ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.16" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-git-config": { @@ -9990,10 +9040,10 @@ "integrity": "sha1-Z9YiSN1aJOYFP4R1EF8fuelLuwA=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "fs-exists-sync": "0.1.0", - "git-config-path": "1.0.1", - "ini": "1.3.5" + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "git-config-path": "^1.0.0", + "ini": "^1.3.4" }, "dependencies": { "extend-shallow": { @@ -10002,7 +9052,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -10012,25 +9062,10 @@ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "1.0.0" - } - } + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-json": { @@ -10038,7 +9073,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse-passwd": { @@ -10047,11 +9082,6 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" - }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -10073,12 +9103,9 @@ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", @@ -10107,13 +9134,11 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "pify": "^3.0.0" } }, "pathval": { @@ -10127,11 +9152,11 @@ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pend": { @@ -10143,29 +9168,27 @@ "pepjs": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/pepjs/-/pepjs-0.4.2.tgz", - "integrity": "sha1-EyZO6olJhP9CPIPkDS+k4d7Byfo=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha1-EyZO6olJhP9CPIPkDS+k4d7Byfo=", + "dev": true }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pixrem": { @@ -10173,9 +9196,9 @@ "resolved": "https://registry.npmjs.org/pixrem/-/pixrem-4.0.1.tgz", "integrity": "sha1-LaSh3m7EQjxfw3lOkwuB1EkOxoY=", "requires": { - "browserslist": "2.11.3", - "postcss": "6.0.1", - "reduce-css-calc": "1.3.0" + "browserslist": "^2.0.0", + "postcss": "^6.0.0", + "reduce-css-calc": "^1.2.7" }, "dependencies": { "browserslist": { @@ -10183,8 +9206,46 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", "requires": { - "caniuse-lite": "1.0.30000833", - "electron-to-chromium": "1.3.45" + "caniuse-lite": "^1.0.30000792", + "electron-to-chromium": "^1.3.30" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" } } } @@ -10194,17 +9255,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "requires": { - "find-up": "2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "2.0.0" - } - } + "find-up": "^2.1.0" } }, "platform": { @@ -10218,8 +9269,48 @@ "resolved": "https://registry.npmjs.org/pleeease-filters/-/pleeease-filters-4.0.0.tgz", "integrity": "sha1-ZjKy+wVkjSdY2GU4T7zteeHMrsc=", "requires": { - "onecolor": "3.0.5", - "postcss": "6.0.1" + "onecolor": "^3.0.4", + "postcss": "^6.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "plugin-error": { @@ -10228,11 +9319,11 @@ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "dev": true, "requires": { - "ansi-cyan": "0.1.1", - "ansi-red": "0.1.1", - "arr-diff": "1.1.0", - "arr-union": "2.1.0", - "extend-shallow": "1.1.4" + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" }, "dependencies": { "arr-diff": { @@ -10241,8 +9332,8 @@ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-slice": "0.2.3" + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" } }, "arr-union": { @@ -10257,7 +9348,7 @@ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dev": true, "requires": { - "kind-of": "1.1.0" + "kind-of": "^1.1.0" } }, "kind-of": { @@ -10268,21 +9359,16 @@ } } }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" - }, "popsicle": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-9.2.0.tgz", "integrity": "sha512-petRj39w05GvH1WKuGFmzxR9+k+R9E7zX5XWTFee7P/qf88hMuLT7aAO/RsmldpQMtJsWQISkTQlfMRECKlxhw==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "form-data": "2.3.2", - "make-error-cause": "1.2.2", - "tough-cookie": "2.3.4" + "concat-stream": "^1.4.7", + "form-data": "^2.0.0", + "make-error-cause": "^1.2.1", + "tough-cookie": "^2.0.0" } }, "popsicle-proxy-agent": { @@ -10291,8 +9377,8 @@ "integrity": "sha1-uRM8VdlFdZq37mG3cRNkYg066tw=", "dev": true, "requires": { - "http-proxy-agent": "1.0.0", - "https-proxy-agent": "1.0.0" + "http-proxy-agent": "^1.0.0", + "https-proxy-agent": "^1.0.0" } }, "popsicle-retry": { @@ -10301,8 +9387,8 @@ "integrity": "sha1-4G6GZTO0KnoSPrMwy+Y6fOvLoQw=", "dev": true, "requires": { - "any-promise": "1.3.0", - "xtend": "4.0.1" + "any-promise": "^1.1.0", + "xtend": "^4.0.1" } }, "popsicle-rewrite": { @@ -10323,25 +9409,36 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", - "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "1.1.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "dependencies": { "supports-color": { @@ -10356,17 +9453,12 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -10374,7 +9466,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -10384,104 +9476,164 @@ "resolved": "https://registry.npmjs.org/postcss-apply/-/postcss-apply-0.8.0.tgz", "integrity": "sha1-FOVEu7XLbxweBIhXll15rgZrE0M=", "requires": { - "babel-runtime": "6.26.0", - "balanced-match": "0.4.2", - "postcss": "6.0.1" + "babel-runtime": "^6.23.0", + "balanced-match": "^0.4.2", + "postcss": "^6.0.0" }, "dependencies": { "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - } - } - }, - "postcss-attribute-case-insensitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-2.0.0.tgz", - "integrity": "sha1-lNxCLI+QmX8WvTOjZUu77AhJY7Q=", - "requires": { - "postcss": "6.0.1", - "postcss-selector-parser": "2.2.3" + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-calc": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "postcss-attribute-case-insensitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-2.0.0.tgz", + "integrity": "sha1-lNxCLI+QmX8WvTOjZUu77AhJY7Q=", "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" + "postcss": "^6.0.0", + "postcss-selector-parser": "^2.2.3" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "requires": { + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" + } + }, "postcss-color-function": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-color-function/-/postcss-color-function-4.0.1.tgz", "integrity": "sha1-QCs/LOvD9pR+YY+2vjZU++zvZEQ=", "requires": { - "css-color-function": "1.3.3", - "postcss": "6.0.1", - "postcss-message-helpers": "2.0.0", - "postcss-value-parser": "3.3.0" + "css-color-function": "~1.3.3", + "postcss": "^6.0.1", + "postcss-message-helpers": "^2.0.0", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-color-gray": { @@ -10489,28 +9641,20 @@ "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-4.1.0.tgz", "integrity": "sha512-L4iLKQLdqChz6ZOgGb6dRxkBNw78JFYcJmBz1orHpZoeLtuhDDGegRtX9gSyfoCIM7rWZ3VNOyiqqvk83BEN+w==", "requires": { - "color": "2.0.1", - "postcss": "6.0.22", - "postcss-message-helpers": "2.0.0", - "reduce-function-call": "1.0.2" + "color": "^2.0.1", + "postcss": "^6.0.14", + "postcss-message-helpers": "^2.0.0", + "reduce-function-call": "^1.0.2" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "color": { @@ -10518,8 +9662,8 @@ "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz", "integrity": "sha512-ubUCVVKfT7r2w2D3qtHakj8mbmKms+tThR8gI8zEYCbUBl8/voqFGt3kgBqGwXAopgXybnkuOq+qMYCRrp4cXw==", "requires": { - "color-convert": "1.9.1", - "color-string": "1.5.2" + "color-convert": "^1.9.1", + "color-string": "^1.5.2" } }, "color-string": { @@ -10527,8 +9671,8 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.2.tgz", "integrity": "sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k=", "requires": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, "has-flag": { @@ -10537,21 +9681,26 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -10561,18 +9710,28 @@ "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-3.0.0.tgz", "integrity": "sha1-HlPmyKyyN5Vej9CLfs2xuLgwn5U=", "requires": { - "color": "1.0.3", - "postcss": "6.0.1", - "postcss-message-helpers": "2.0.0" + "color": "^1.0.3", + "postcss": "^6.0.1", + "postcss-message-helpers": "^2.0.0" }, "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", "requires": { - "color-convert": "1.9.1", - "color-string": "1.5.2" + "color-convert": "^1.8.2", + "color-string": "^1.4.0" } }, "color-string": { @@ -10580,8 +9739,36 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.2.tgz", "integrity": "sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k=", "requires": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" } } } @@ -10591,9 +9778,49 @@ "resolved": "https://registry.npmjs.org/postcss-color-hsl/-/postcss-color-hsl-2.0.0.tgz", "integrity": "sha1-EnA2ZvoxBDDj8wpFTawThjF9WEQ=", "requires": { - "postcss": "6.0.1", - "postcss-value-parser": "3.3.0", - "units-css": "0.4.0" + "postcss": "^6.0.1", + "postcss-value-parser": "^3.3.0", + "units-css": "^0.4.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-color-hwb": { @@ -10601,19 +9828,29 @@ "resolved": "https://registry.npmjs.org/postcss-color-hwb/-/postcss-color-hwb-3.0.0.tgz", "integrity": "sha1-NAKxnvTYSXVAwftQcr6YY8qVVx4=", "requires": { - "color": "1.0.3", - "postcss": "6.0.1", - "postcss-message-helpers": "2.0.0", - "reduce-function-call": "1.0.2" + "color": "^1.0.3", + "postcss": "^6.0.1", + "postcss-message-helpers": "^2.0.0", + "reduce-function-call": "^1.0.2" }, "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", "requires": { - "color-convert": "1.9.1", - "color-string": "1.5.2" + "color-convert": "^1.8.2", + "color-string": "^1.4.0" } }, "color-string": { @@ -10621,8 +9858,36 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.2.tgz", "integrity": "sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k=", "requires": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" } } } @@ -10632,26 +9897,18 @@ "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-3.1.0.tgz", "integrity": "sha512-212hJUk9uSsbwO5ECqVjmh/iLsmiVL1xy9ce9TVf+X3cK/ZlUIlaMdoxje/YpsL9cmUH3I7io+/G2LyWx5rg1g==", "requires": { - "postcss": "6.0.22", - "postcss-values-parser": "1.5.0" + "postcss": "^6.0.22", + "postcss-values-parser": "^1.5.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -10660,21 +9917,26 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -10684,36 +9946,18 @@ "resolved": "https://registry.npmjs.org/postcss-color-rgb/-/postcss-color-rgb-2.0.0.tgz", "integrity": "sha1-FFOcinExSUtILg3RzCZf9lFLUmM=", "requires": { - "postcss": "6.0.1", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-color-rgba-fallback": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz", - "integrity": "sha1-N9XJNToHoJJwkSqCYGu0Kg1wLAQ=", - "requires": { - "postcss": "6.0.22", - "postcss-value-parser": "3.3.0", - "rgb-hex": "2.1.0" + "postcss": "^6.0.1", + "postcss-value-parser": "^3.3.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -10722,158 +9966,97 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "postcss-color-rgba-fallback": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz", + "integrity": "sha1-N9XJNToHoJJwkSqCYGu0Kg1wLAQ=", "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^6.0.6", + "postcss-value-parser": "^3.3.0", + "rgb-hex": "^2.1.0" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-convert-values": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "requires": { + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "requires": { + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" } }, "postcss-cssnext": { @@ -10881,58 +10064,50 @@ "resolved": "https://registry.npmjs.org/postcss-cssnext/-/postcss-cssnext-3.1.0.tgz", "integrity": "sha512-awPDhI4OKetcHCr560iVCoDuP6e/vn0r6EAqdWPpAavJMvkBSZ6kDpSN4b3mB3Ti57hQMunHHM8Wvx9PeuYXtA==", "requires": { - "autoprefixer": "7.2.6", - "caniuse-api": "2.0.0", - "chalk": "2.3.0", - "pixrem": "4.0.1", - "pleeease-filters": "4.0.0", - "postcss": "6.0.22", - "postcss-apply": "0.8.0", - "postcss-attribute-case-insensitive": "2.0.0", - "postcss-calc": "6.0.1", - "postcss-color-function": "4.0.1", - "postcss-color-gray": "4.1.0", - "postcss-color-hex-alpha": "3.0.0", - "postcss-color-hsl": "2.0.0", - "postcss-color-hwb": "3.0.0", - "postcss-color-rebeccapurple": "3.1.0", - "postcss-color-rgb": "2.0.0", - "postcss-color-rgba-fallback": "3.0.0", - "postcss-custom-media": "6.0.0", - "postcss-custom-properties": "6.3.1", - "postcss-custom-selectors": "4.0.1", - "postcss-font-family-system-ui": "3.0.0", - "postcss-font-variant": "3.0.0", - "postcss-image-set-polyfill": "0.3.5", - "postcss-initial": "2.0.0", - "postcss-media-minmax": "3.0.0", - "postcss-nesting": "4.2.1", - "postcss-pseudo-class-any-link": "4.0.0", - "postcss-pseudoelements": "5.0.0", - "postcss-replace-overflow-wrap": "2.0.0", - "postcss-selector-matches": "3.0.1", - "postcss-selector-not": "3.0.1" + "autoprefixer": "^7.1.1", + "caniuse-api": "^2.0.0", + "chalk": "^2.0.1", + "pixrem": "^4.0.0", + "pleeease-filters": "^4.0.0", + "postcss": "^6.0.5", + "postcss-apply": "^0.8.0", + "postcss-attribute-case-insensitive": "^2.0.0", + "postcss-calc": "^6.0.0", + "postcss-color-function": "^4.0.0", + "postcss-color-gray": "^4.0.0", + "postcss-color-hex-alpha": "^3.0.0", + "postcss-color-hsl": "^2.0.0", + "postcss-color-hwb": "^3.0.0", + "postcss-color-rebeccapurple": "^3.0.0", + "postcss-color-rgb": "^2.0.0", + "postcss-color-rgba-fallback": "^3.0.0", + "postcss-custom-media": "^6.0.0", + "postcss-custom-properties": "^6.1.0", + "postcss-custom-selectors": "^4.0.1", + "postcss-font-family-system-ui": "^3.0.0", + "postcss-font-variant": "^3.0.0", + "postcss-image-set-polyfill": "^0.3.5", + "postcss-initial": "^2.0.0", + "postcss-media-minmax": "^3.0.0", + "postcss-nesting": "^4.0.1", + "postcss-pseudo-class-any-link": "^4.0.0", + "postcss-pseudoelements": "^5.0.0", + "postcss-replace-overflow-wrap": "^2.0.0", + "postcss-selector-matches": "^3.0.1", + "postcss-selector-not": "^3.0.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, "autoprefixer": { "version": "7.2.6", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", "requires": { - "browserslist": "2.11.3", - "caniuse-lite": "1.0.30000833", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.22", - "postcss-value-parser": "3.3.0" + "browserslist": "^2.11.3", + "caniuse-lite": "^1.0.30000805", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.17", + "postcss-value-parser": "^3.2.3" } }, "browserslist": { @@ -10940,8 +10115,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", "requires": { - "caniuse-lite": "1.0.30000833", - "electron-to-chromium": "1.3.45" + "caniuse-lite": "^1.0.30000792", + "electron-to-chromium": "^1.3.30" } }, "caniuse-api": { @@ -10949,10 +10124,10 @@ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-2.0.0.tgz", "integrity": "sha1-sd21pZZrFvSNxJmERNS7xsfZ2DQ=", "requires": { - "browserslist": "2.11.3", - "caniuse-lite": "1.0.30000833", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^2.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, "has-flag": { @@ -10961,13 +10136,13 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" }, "dependencies": { "chalk": { @@ -10975,9 +10150,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } } } @@ -10987,10 +10162,10 @@ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-6.0.1.tgz", "integrity": "sha1-PSQXG79udinUIqQ26/5t2VEfQzA=", "requires": { - "css-unit-converter": "1.1.1", - "postcss": "6.0.22", - "postcss-selector-parser": "2.2.3", - "reduce-css-calc": "2.1.4" + "css-unit-converter": "^1.1.1", + "postcss": "^6.0.0", + "postcss-selector-parser": "^2.2.2", + "reduce-css-calc": "^2.0.0" } }, "reduce-css-calc": { @@ -10998,16 +10173,21 @@ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.4.tgz", "integrity": "sha512-i/vWQbyd3aJRmip9OVSN9V6nIjLf/gg/ctxb0CpvHWtcRysFl/ngDBQD+rqavxdw/doScA3GMBXhzkHQ4GCzFQ==", "requires": { - "css-unit-converter": "1.1.1", - "postcss-value-parser": "3.3.0" + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -11017,7 +10197,47 @@ "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-6.0.0.tgz", "integrity": "sha1-vlMnhBEOyylQRPtTlaGABushpzc=", "requires": { - "postcss": "6.0.1" + "postcss": "^6.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-custom-properties": { @@ -11025,26 +10245,18 @@ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-6.3.1.tgz", "integrity": "sha512-zoiwn4sCiUFbr4KcgcNZLFkR6gVQom647L+z1p/KBVHZ1OYwT87apnS42atJtx6XlX2yI7N5fjXbFixShQO2QQ==", "requires": { - "balanced-match": "1.0.0", - "postcss": "6.0.22" + "balanced-match": "^1.0.0", + "postcss": "^6.0.18" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -11053,21 +10265,26 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -11077,462 +10294,353 @@ "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-4.0.1.tgz", "integrity": "sha1-eBOC+UxS5yfvXKR3bqKt9JphE4I=", "requires": { - "postcss": "6.0.1", - "postcss-selector-matches": "3.0.1" - } - }, - "postcss-discard-comments": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "requires": { - "postcss": "5.2.18" + "postcss": "^6.0.1", + "postcss-selector-matches": "^3.0.0" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "requires": { + "postcss": "^5.0.14" + } + }, "postcss-discard-duplicates": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "requires": { + "postcss": "^5.0.14" + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "requires": { + "postcss": "^5.0.16" + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "requires": { + "postcss": "^5.0.14", + "uniqs": "^2.0.0" + } + }, + "postcss-filter-plugins": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-font-family-system-ui": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-family-system-ui/-/postcss-font-family-system-ui-3.0.0.tgz", + "integrity": "sha512-58G/hTxMSSKlIRpcPUjlyo6hV2MEzvcVO2m4L/T7Bb2fJTG4DYYfQjQeRvuimKQh1V1sOzCIz99g+H2aFNtlQw==", + "requires": { + "postcss": "^6.0" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-discard-empty": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "postcss-font-variant": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-3.0.0.tgz", + "integrity": "sha1-CMzIj2BQuoLtjvLMdsDGprQfGD4=", "requires": { - "postcss": "5.2.18" + "postcss": "^6.0.1" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "postcss-image-set-polyfill": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/postcss-image-set-polyfill/-/postcss-image-set-polyfill-0.3.5.tgz", + "integrity": "sha1-Dxk0E3AM8fgr05Bm7wFtZaShgYE=", "requires": { - "postcss": "5.2.18" + "postcss": "^6.0.1", + "postcss-media-query-parser": "^0.2.3" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-discard-unused": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "postcss-import": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.0.0.tgz", + "integrity": "sha1-qWLi34LTvFptpqOGhBdHIE9B71s=", "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" + "postcss": "^6.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-filter-plugins": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", - "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "postcss-initial": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-2.0.0.tgz", + "integrity": "sha1-cnFfczbgu3k1HZnuZcSiU6hEG6Q=", "requires": { - "postcss": "5.2.18", - "uniqid": "4.1.1" + "lodash.template": "^4.2.4", + "postcss": "^6.0.1" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-font-family-system-ui": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-family-system-ui/-/postcss-font-family-system-ui-3.0.0.tgz", - "integrity": "sha512-58G/hTxMSSKlIRpcPUjlyo6hV2MEzvcVO2m4L/T7Bb2fJTG4DYYfQjQeRvuimKQh1V1sOzCIz99g+H2aFNtlQw==", - "requires": { - "postcss": "6.0.1" - } - }, - "postcss-font-variant": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-3.0.0.tgz", - "integrity": "sha1-CMzIj2BQuoLtjvLMdsDGprQfGD4=", - "requires": { - "postcss": "6.0.1" - } - }, - "postcss-image-set-polyfill": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/postcss-image-set-polyfill/-/postcss-image-set-polyfill-0.3.5.tgz", - "integrity": "sha1-Dxk0E3AM8fgr05Bm7wFtZaShgYE=", - "requires": { - "postcss": "6.0.1", - "postcss-media-query-parser": "0.2.3" - } - }, - "postcss-import": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.0.0.tgz", - "integrity": "sha1-qWLi34LTvFptpqOGhBdHIE9B71s=", - "requires": { - "postcss": "6.0.1", - "postcss-value-parser": "3.3.0", - "read-cache": "1.0.0", - "resolve": "1.7.1" - } - }, - "postcss-initial": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-2.0.0.tgz", - "integrity": "sha1-cnFfczbgu3k1HZnuZcSiU6hEG6Q=", - "requires": { - "lodash.template": "4.4.0", - "postcss": "6.0.1" - } - }, "postcss-load-config": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1", - "postcss-load-options": "1.2.0", - "postcss-load-plugins": "2.3.0" + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0", + "postcss-load-options": "^1.2.0", + "postcss-load-plugins": "^2.3.0" } }, "postcss-load-options": { @@ -11540,8 +10648,8 @@ "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0" } }, "postcss-load-plugins": { @@ -11549,8 +10657,8 @@ "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" + "cosmiconfig": "^2.1.1", + "object-assign": "^4.1.0" } }, "postcss-loader": { @@ -11558,227 +10666,133 @@ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.0.8.tgz", "integrity": "sha512-KtXBiQ/r/WYW8LxTSJK7h8wLqvCMSub/BqmRnud/Mu8RzwflW9cmXxwsMwbn15TNv287Hcufdb3ZSs7xHKnG8Q==", "requires": { - "loader-utils": "1.1.0", - "postcss": "6.0.1", - "postcss-load-config": "1.2.0", - "schema-utils": "0.3.0" - } - }, - "postcss-media-minmax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-3.0.0.tgz", - "integrity": "sha1-Z1JWA3pD70C8Twdgv9BtTcadSNI=", - "requires": { - "postcss": "6.0.1" - } - }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=" - }, - "postcss-merge-idents": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "loader-utils": "^1.1.0", + "postcss": "^6.0.0", + "postcss-load-config": "^1.2.0", + "schema-utils": "^0.3.0" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "postcss-media-minmax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-3.0.0.tgz", + "integrity": "sha1-Z1JWA3pD70C8Twdgv9BtTcadSNI=", "requires": { - "postcss": "5.2.18" + "postcss": "^6.0.1" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=" + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "requires": { + "postcss": "^5.0.4" + } + }, "postcss-merge-rules": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" } }, "postcss-message-helpers": { @@ -11791,67 +10805,9 @@ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-minify-gradients": { @@ -11859,66 +10815,8 @@ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" } }, "postcss-minify-params": { @@ -11926,68 +10824,10 @@ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" } }, "postcss-minify-selectors": { @@ -11995,68 +10835,10 @@ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" } }, "postcss-modules": { @@ -12065,136 +10847,77 @@ "integrity": "sha1-d6WLt3uhtDkrJwwLWYUv116JqLQ=", "dev": true, "requires": { - "css-modules-loader-core": "1.1.0", - "generic-names": "1.0.3", - "postcss": "5.2.18", - "string-hash": "1.1.3" + "css-modules-loader-core": "^1.0.1", + "generic-names": "^1.0.2", + "postcss": "^5.2.8", + "string-hash": "^1.1.1" + } + }, + "postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "requires": { + "postcss": "^6.0.1" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", - "requires": { - "postcss": "6.0.1" - } - }, "postcss-modules-local-by-default": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.1" - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.1" - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.1" - } - }, - "postcss-nesting": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-4.2.1.tgz", - "integrity": "sha512-IkyWXICwagCnlaviRexi7qOdwPw3+xVVjgFfGsxmztvRVaNxAlrypOIKqDE5mxY+BVxnId1rnUKBRQoNE2VDaA==", - "requires": { - "postcss": "6.0.22" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -12203,632 +10926,515 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "requires": { - "postcss": "5.2.18" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-normalize-url": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "postcss-nesting": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-4.2.1.tgz", + "integrity": "sha512-IkyWXICwagCnlaviRexi7qOdwPw3+xVVjgFfGsxmztvRVaNxAlrypOIKqDE5mxY+BVxnId1rnUKBRQoNE2VDaA==", "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^6.0.11" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-pseudo-class-any-link": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-4.0.0.tgz", - "integrity": "sha1-kVKgYT00UHIFE+iJKFS65C0O5o4=", + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "requires": { + "postcss": "^5.0.5" + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "requires": { - "postcss": "6.0.1", - "postcss-selector-parser": "2.2.3" + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" } }, - "postcss-pseudoelements": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz", - "integrity": "sha1-7vGU6NUkZFylIKlJ6V5RjoEkAss=", + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "requires": { - "postcss": "6.0.1" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" } }, - "postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "postcss-pseudo-class-any-link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-4.0.0.tgz", + "integrity": "sha1-kVKgYT00UHIFE+iJKFS65C0O5o4=", "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^6.0.1", + "postcss-selector-parser": "^2.2.3" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "postcss-pseudoelements": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz", + "integrity": "sha1-7vGU6NUkZFylIKlJ6V5RjoEkAss=", "requires": { - "postcss": "5.2.18" + "postcss": "^6.0.0" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "requires": { + "postcss": "^5.0.4" + } + }, "postcss-reduce-transforms": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" + } + }, + "postcss-replace-overflow-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-2.0.0.tgz", + "integrity": "sha1-eU22+qVPjbEAhUOSqTr0V2i04ls=", + "requires": { + "postcss": "^6.0.1" }, "dependencies": { "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-replace-overflow-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-2.0.0.tgz", - "integrity": "sha1-eU22+qVPjbEAhUOSqTr0V2i04ls=", - "requires": { - "postcss": "6.0.1" - } - }, "postcss-selector-matches": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-3.0.1.tgz", "integrity": "sha1-5WNAEeE5UIgYYbvdWMLQER/8lqs=", "requires": { - "balanced-match": "0.4.2", - "postcss": "6.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - } - } - }, - "postcss-selector-not": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-3.0.1.tgz", - "integrity": "sha1-Lk2y8JZTNsAefOx9tsYN/3ZzNdk=", - "requires": { - "balanced-match": "0.4.2", - "postcss": "6.0.1" + "balanced-match": "^0.4.2", + "postcss": "^6.0.1" }, "dependencies": { "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - } - } - }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, - "postcss-svgo": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" - }, - "dependencies": { + }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "postcss-selector-not": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-3.0.1.tgz", + "integrity": "sha1-Lk2y8JZTNsAefOx9tsYN/3ZzNdk=", "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "balanced-match": "^0.4.2", + "postcss": "^6.0.1" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "ansi-regex": "2.1.1" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "1.0.0" + "has-flag": "^3.0.0" } } } }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "requires": { + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + } + }, "postcss-value-parser": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", @@ -12839,9 +11445,9 @@ "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-1.5.0.tgz", "integrity": "sha512-3M3p+2gMp0AH3da530TlX8kiO1nxdTnc3C6vr8dMxRLIlh8UYkz0/wcwptSXjhtx2Fr0TySI7a+BHDQ8NL7LaQ==", "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-zindex": { @@ -12849,73 +11455,16 @@ "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "uniqs": "2.0.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true }, "prepend-http": { "version": "1.0.4", @@ -12938,8 +11487,8 @@ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "requires": { - "renderkid": "2.0.1", - "utila": "0.4.0" + "renderkid": "^2.0.1", + "utila": "~0.4" } }, "pretty-format": { @@ -12948,25 +11497,8 @@ "integrity": "sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==", "dev": true, "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - } + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" } }, "private": { @@ -12996,7 +11528,7 @@ "integrity": "sha1-M1MXTv8mlEgQN+BOAfd6oPttG2A=", "dev": true, "requires": { - "any-promise": "0.1.0" + "any-promise": "^0.1.0" }, "dependencies": { "any-promise": { @@ -13023,7 +11555,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.6.0" } }, @@ -13037,16 +11569,22 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, + "psl": { + "version": "1.1.28", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.28.tgz", + "integrity": "sha512-+AqO1Ae+N/4r7Rvchrdm432afjT9hqJRyBN3DQv9At0tPz4hIFSGKbq64fN9dVoCow4oggIIax5/iONx0r9hZw==", + "dev": true + }, "public-encrypt": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "pump": { @@ -13054,18 +11592,18 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", - "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "requires": { - "duplexify": "3.5.4", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -13088,8 +11626,8 @@ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "querystring": { @@ -13103,39 +11641,24 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" }, "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "1.1.6" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -13144,7 +11667,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -13152,8 +11675,8 @@ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -13185,7 +11708,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": "1.3.1" + "statuses": ">= 1.3.1 < 2" } }, "setprototypeof": { @@ -13196,23 +11719,23 @@ } }, "rc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", - "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", - "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - } - }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { - "pinkie-promise": "2.0.1", - "readable-stream": "2.3.6" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, "read-cache": { @@ -13220,40 +11743,59 @@ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "requires": { - "pify": "2.3.0" + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } } }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } } }, "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, "readdirp": { @@ -13261,28 +11803,61 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "recast": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.7.tgz", - "integrity": "sha512-UgJBjELa0DaLUbblnIOPUj0UgdbetzYzrvWtHCXX8N5aCTHoMSx6ATkA2JH0hS7tP6dMJ5/CtVZEC4yW7V/8Dw==", - "requires": { - "ast-types": "0.9.12", - "core-js": "2.5.5", - "esprima": "4.0.0", - "private": "0.1.8", - "source-map": "0.6.1" + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" }, "dependencies": { + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=" + }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" } } }, @@ -13292,16 +11867,17 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.7.1" + "resolve": "^1.1.6" } }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "reduce-css-calc": { @@ -13309,9 +11885,9 @@ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" }, "dependencies": { "balanced-match": { @@ -13326,7 +11902,7 @@ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "requires": { - "balanced-match": "0.4.2" + "balanced-match": "^0.4.2" }, "dependencies": { "balanced-match": { @@ -13337,9 +11913,9 @@ } }, "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" }, "regenerator-runtime": { "version": "0.11.1", @@ -13351,7 +11927,7 @@ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -13359,8 +11935,8 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpu-core": { @@ -13368,26 +11944,28 @@ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "registry-auth-token": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, "requires": { - "rc": "1.2.7", - "safe-buffer": "5.1.2" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, "registry-url": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, "requires": { - "rc": "1.2.7" + "rc": "^1.0.1" } }, "regjsgen": { @@ -13400,7 +11978,7 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" } }, "relateurl": { @@ -13414,14 +11992,20 @@ "integrity": "sha512-Itv3XvYjD6G+9xDzAeFohx4GUwbFjfqFt0UXlC826jHR18E49fEiEGqZUxUASwMq4z7wwUv2H9/XF2d6qj0iaQ==", "dev": true, "requires": { - "amdefine": "1.0.1", + "amdefine": "^1.0.0", "istanbul": "0.4.5", - "minimatch": "3.0.4", - "plugin-error": "0.1.2", - "source-map": "0.6.1", + "minimatch": "^3.0.3", + "plugin-error": "^0.1.2", + "source-map": "^0.6.1", "through2": "2.0.1" }, "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", @@ -13434,18 +12018,18 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "through2": { @@ -13454,8 +12038,8 @@ "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", "dev": true, "requires": { - "readable-stream": "2.0.6", - "xtend": "4.0.1" + "readable-stream": "~2.0.0", + "xtend": "~4.0.0" } } } @@ -13470,19 +12054,24 @@ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", "requires": { - "css-select": "1.2.0", - "dom-converter": "0.1.4", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.3.3" + "css-select": "^1.1.0", + "dom-converter": "~0.1", + "htmlparser2": "~3.3.0", + "strip-ansi": "^3.0.0", + "utila": "~0.3" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "utila": { @@ -13506,62 +12095,95 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "request": { - "version": "2.85.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "version": "2.42.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.42.0.tgz", + "integrity": "sha1-VyvQFIk4VkBArHqxSLlkI6BjMEo=", + "dev": true, + "requires": { + "aws-sign2": "~0.5.0", + "bl": "~0.9.0", + "caseless": "~0.6.0", + "forever-agent": "~0.5.0", + "form-data": "~0.1.0", + "hawk": "1.1.1", + "http-signature": "~0.10.0", + "json-stringify-safe": "~5.0.0", + "mime-types": "~1.0.1", + "node-uuid": "~1.4.0", + "oauth-sign": "~0.4.0", + "qs": "~1.2.0", + "stringstream": "~0.0.4", + "tough-cookie": ">=0.12.0", + "tunnel-agent": "~0.4.0" }, "dependencies": { - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" - } - } - }, - "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", - "requires": { - "lodash": "4.17.10" - } - }, - "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", - "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "1.1.1", - "tough-cookie": "2.3.4" + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true, + "optional": true + }, + "combined-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", + "dev": true, + "optional": true, + "requires": { + "delayed-stream": "0.0.5" + } + }, + "delayed-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", + "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", + "dev": true, + "optional": true + }, + "form-data": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", + "integrity": "sha1-kavXiKupcCsaq/qLwBAxoqyeOxI=", + "dev": true, + "optional": true, + "requires": { + "async": "~0.9.0", + "combined-stream": "~0.0.4", + "mime": "~1.2.11" + } + }, + "mime": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", + "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", + "dev": true, + "optional": true + }, + "mime-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz", + "integrity": "sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4=", + "dev": true + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true + }, + "qs": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz", + "integrity": "sha1-GbV/8k3CqZzh+L32r82ln472H4g=", + "dev": true + } } }, "require-directory": { @@ -13580,11 +12202,11 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-from": { @@ -13603,8 +12225,8 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "resumer": { @@ -13613,7 +12235,7 @@ "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", "dev": true, "requires": { - "through": "2.3.8" + "through": "~2.3.4" } }, "ret": { @@ -13636,7 +12258,7 @@ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -13644,22 +12266,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "7.1.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "glob": "^7.0.5" } }, "ripemd160": { @@ -13667,8 +12274,8 @@ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-async": { @@ -13677,7 +12284,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "run-queue": { @@ -13685,7 +12292,7 @@ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "rx-lite": { @@ -13700,13 +12307,13 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "4.0.8" + "rx-lite": "*" } }, "rxjs": { - "version": "5.5.10", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", - "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==", + "version": "5.5.11", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.11.tgz", + "integrity": "sha512-3bjO7UwWfA2CV7lmwYMBzj4fQ6Cq+ftHc2MvUe+WMS7wcdJ1LosDWmdjPQanYp2dBRj572p7PeU81JUxHKOcBA==", "dev": true, "requires": { "symbol-observable": "1.0.1" @@ -13721,16 +12328,22 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", + "dev": true }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "samsam": { @@ -13749,7 +12362,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", "requires": { - "ajv": "5.5.2" + "ajv": "^5.0.0" } }, "seek-bzip": { @@ -13758,7 +12371,7 @@ "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", "dev": true, "requires": { - "commander": "2.8.1" + "commander": "~2.8.1" }, "dependencies": { "commander": { @@ -13767,7 +12380,7 @@ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, "requires": { - "graceful-readlink": "1.0.1" + "graceful-readlink": ">= 1.0.0" } } } @@ -13781,8 +12394,9 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, "requires": { - "semver": "5.5.0" + "semver": "^5.0.3" } }, "send": { @@ -13791,18 +12405,18 @@ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.1", + "destroy": "~1.0.4", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.3.1" } }, "serve-static": { @@ -13810,9 +12424,9 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.1" } }, @@ -13831,10 +12445,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -13842,7 +12456,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -13862,8 +12476,8 @@ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -13871,7 +12485,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -13885,10 +12499,10 @@ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", "dev": true, "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" } }, "shelljs": { @@ -13897,25 +12511,9 @@ "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", "dev": true, "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, "shx": { @@ -13924,9 +12522,17 @@ "integrity": "sha1-CjBNAgsO3xMGrYFXDoDwNG31ijk=", "dev": true, "requires": { - "es6-object-assign": "1.1.0", - "minimist": "1.2.0", - "shelljs": "0.7.8" + "es6-object-assign": "^1.0.3", + "minimist": "^1.2.0", + "shelljs": "^0.7.3" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, "sigmund": { @@ -13945,14 +12551,7 @@ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "requires": { - "is-arrayish": "0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.1.tgz", - "integrity": "sha1-wt/DhquqDD4zxI2z/ocFnmkGXv0=" - } + "is-arrayish": "^0.3.1" } }, "sinon": { @@ -13961,24 +12560,13 @@ "integrity": "sha512-5uLBZPdCWl59Lpbf45ygKj7Z0LVol+ftBe7RDIXOQV/sF58pcFmbK8raA7bt6eljNuGnvBP+/ZxlicVn0emDjA==", "dev": true, "requires": { - "diff": "3.5.0", + "diff": "^3.1.0", "formatio": "1.2.0", - "lodash.get": "4.4.2", - "lolex": "2.3.2", - "nise": "1.3.3", - "supports-color": "4.5.0", - "type-detect": "4.0.8" - }, - "dependencies": { - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } + "lodash.get": "^4.4.2", + "lolex": "^2.2.0", + "nise": "^1.2.0", + "supports-color": "^4.4.0", + "type-detect": "^4.0.0" } }, "slash": { @@ -13992,48 +12580,36 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } + "is-fullwidth-code-point": "^2.0.0" } }, "slide": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "3.1.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { - "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=" - }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -14041,30 +12617,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", - "requires": { - "atob": "2.1.1", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" } } }, @@ -14073,9 +12627,9 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -14083,7 +12637,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -14091,7 +12645,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -14099,7 +12653,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -14107,9 +12661,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -14129,15 +12683,17 @@ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", + "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", + "dev": true, + "optional": true, "requires": { - "hoek": "4.2.1" + "hoek": "0.9.x" } }, "sort-keys": { @@ -14145,7 +12701,7 @@ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } }, "source-list-map": { @@ -14154,18 +12710,18 @@ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-loader-cli": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/source-map-loader-cli/-/source-map-loader-cli-0.0.1.tgz", "integrity": "sha1-jMo9HE1oSeJgEvNDq4qqqgQgz+w=", "requires": { - "async": "0.9.2", - "loader-utils": "0.2.17", - "source-map": "0.1.43" + "async": "^0.9.0", + "loader-utils": "~0.2.2", + "source-map": "~0.1.33" }, "dependencies": { "async": { @@ -14178,10 +12734,10 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } }, "source-map": { @@ -14189,34 +12745,35 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } }, "source-map-resolve": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", - "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "requires": { - "atob": "1.1.3", - "resolve-url": "0.2.1", - "source-map-url": "0.3.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", - "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, "spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -14229,8 +12786,8 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -14244,7 +12801,7 @@ "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -14252,7 +12809,7 @@ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -14260,27 +12817,12 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - } - }, "ssri": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.1" } }, "staged-git-files": { @@ -14294,8 +12836,8 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -14303,7 +12845,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -14313,18 +12855,42 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, "stream-browserify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-combiner": { @@ -14333,7 +12899,7 @@ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { - "duplexer": "0.1.1" + "duplexer": "~0.1.1" } }, "stream-each": { @@ -14341,20 +12907,49 @@ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", - "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-shift": { @@ -14368,7 +12963,7 @@ "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", "dev": true, "requires": { - "any-observable": "0.2.0" + "any-observable": "^0.2.0" } }, "strict-uri-encode": { @@ -14389,32 +12984,18 @@ "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - } + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "5.1.2" - } + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "stringify-object": { "version": "3.2.2", @@ -14422,38 +13003,30 @@ "integrity": "sha512-O696NF21oLiDy8PhpWu8AEqoZHw++QW6mUv0UvKZe8gWSdSvMXkiLufK7OmnP27Dro4GU5kb9U7JIO0mBuCRQg==", "dev": true, "requires": { - "get-own-enumerable-property-symbols": "2.0.1", - "is-obj": "1.0.1", - "is-regexp": "1.0.0" + "get-own-enumerable-property-symbols": "^2.0.1", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" } }, "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true, + "optional": true }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - } + "ansi-regex": "^3.0.0" } }, "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, "strip-dirs": { "version": "2.1.0", @@ -14461,7 +13034,7 @@ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dev": true, "requires": { - "is-natural-number": "4.0.1" + "is-natural-number": "^4.0.1" } }, "strip-eof": { @@ -14473,48 +13046,46 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, "requires": { - "get-stdin": "4.0.1" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - } + "get-stdin": "^4.0.1" } }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true }, "style-loader": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.0.tgz", "integrity": "sha512-9mx9sC9nX1dgP96MZOODpGC6l1RzQBITI2D5WJhu+wnbrSYVKLGuy14XJSLVQih/0GFrPpjelt+s//VcZQ2Evw==", "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "loader-utils": "^1.0.2", + "schema-utils": "^0.3.0" } }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "^2.0.0" + } }, "svgo": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" } }, "symbol-observable": { @@ -14523,11 +13094,6 @@ "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", "dev": true }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" - }, "tapable": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", @@ -14539,14 +13105,14 @@ "integrity": "sha1-Df7scJIn+8yRcKvn8EaWKycUMds=", "dev": true, "requires": { - "deep-equal": "0.1.2", - "defined": "0.0.0", - "inherits": "2.0.3", - "jsonify": "0.0.0", - "resumer": "0.0.0", - "split": "0.2.10", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "deep-equal": "~0.1.0", + "defined": "~0.0.0", + "inherits": "~2.0.1", + "jsonify": "~0.0.0", + "resumer": "~0.0.0", + "split": "~0.2.10", + "stream-combiner": "~0.0.2", + "through": "~2.3.4" }, "dependencies": { "defined": { @@ -14558,18 +13124,18 @@ } }, "tar-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.0.tgz", - "integrity": "sha512-lh2iAPG/BHNmN6WB9Ybdynk9rEJ5GD/dy4zscHmVlwa1dq2tpE+BH78i5vjYwYVWEaOXGBjzxr89aVACF17Cpw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", + "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", "dev": true, "requires": { - "bl": "1.2.2", - "buffer-alloc": "1.1.0", - "end-of-stream": "1.4.1", - "fs-constants": "1.0.0", - "readable-stream": "2.3.6", - "to-buffer": "1.1.1", - "xtend": "4.0.1" + "bl": "^1.0.0", + "buffer-alloc": "^1.1.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.0", + "xtend": "^4.0.0" }, "dependencies": { "bl": { @@ -14578,8 +13144,38 @@ "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" } } } @@ -14590,7 +13186,7 @@ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "dev": true, "requires": { - "execa": "0.7.0" + "execa": "^0.7.0" }, "dependencies": { "execa": { @@ -14599,13 +13195,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } } } @@ -14622,7 +13218,7 @@ "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", "dev": true, "requires": { - "any-promise": "1.3.0" + "any-promise": "^1.0.0" } }, "throat": { @@ -14642,8 +13238,37 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "throwback": { @@ -14652,122 +13277,44 @@ "integrity": "sha1-8AfnwXYEptFtegfEGqDo/txhhKQ=", "dev": true, "requires": { - "any-promise": "1.3.0" + "any-promise": "^1.3.0" } }, "timed-out": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", - "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tiny-lr": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", - "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", "dev": true, "requires": { - "body-parser": "1.14.2", - "debug": "2.2.0", - "faye-websocket": "0.10.0", - "livereload-js": "2.3.0", - "parseurl": "1.3.2", - "qs": "5.1.0" + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" }, "dependencies": { - "body-parser": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", - "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=", - "dev": true, - "requires": { - "bytes": "2.2.0", - "content-type": "1.0.4", - "debug": "2.2.0", - "depd": "1.1.2", - "http-errors": "1.3.1", - "iconv-lite": "0.4.13", - "on-finished": "2.3.0", - "qs": "5.2.0", - "raw-body": "2.1.7", - "type-is": "1.6.16" - }, - "dependencies": { - "qs": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", - "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=", - "dev": true - } - } - }, - "bytes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", - "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=", - "dev": true - }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "statuses": "1.3.1" - } - }, - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - }, - "qs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", - "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=", - "dev": true - }, - "raw-body": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", - "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.13", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", - "dev": true - } + "ms": "2.0.0" } } } @@ -14778,7 +13325,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-arraybuffer": { @@ -14803,7 +13350,7 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -14811,10 +13358,10 @@ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -14822,8 +13369,8 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "dependencies": { "is-number": { @@ -14831,7 +13378,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } } } @@ -14847,36 +13394,24 @@ "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", "dev": true, "requires": { - "nopt": "1.0.10" + "nopt": "~1.0.10" } }, "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "requires": { - "punycode": "1.4.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" - } + "psl": "^1.1.24", + "punycode": "^1.4.1" } }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true }, "trim-right": { "version": "1.0.1", @@ -14889,48 +13424,33 @@ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-3.1.1.tgz", "integrity": "sha512-AQmLFSIgTiR8AlS5BxqvoHpZ3OUTwHHuDZTAZ2KcKsYRz/yANGeQn4Se/DCQ4cn1/eVvN37f/caVW4+kUPNNHw==", "requires": { - "chalk": "2.3.0", - "enhanced-resolve": "3.4.1", - "loader-utils": "1.1.0", - "semver": "5.5.0" + "chalk": "^2.3.0", + "enhanced-resolve": "^3.0.0", + "loader-utils": "^1.0.2", + "semver": "^5.0.1" } }, "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=" + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, "tslint": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.8.0.tgz", "integrity": "sha1-H0mtWy53x2w69N3K5VKuTjYS6xM=", "requires": { - "babel-code-frame": "6.26.0", - "builtin-modules": "1.1.1", - "chalk": "2.3.0", - "commander": "2.15.1", - "diff": "3.5.0", - "glob": "7.1.2", - "minimatch": "3.0.4", - "resolve": "1.7.1", - "semver": "5.5.0", - "tslib": "1.8.1", - "tsutils": "2.26.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.1.0", + "commander": "^2.9.0", + "diff": "^3.2.0", + "glob": "^7.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.7.1", + "tsutils": "^2.12.1" } }, "tslint-loader": { @@ -14938,11 +13458,11 @@ "resolved": "https://registry.npmjs.org/tslint-loader/-/tslint-loader-3.5.3.tgz", "integrity": "sha1-ND90Ei2U81a2iUV9P1n2SmmrYG8=", "requires": { - "loader-utils": "1.1.0", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "rimraf": "2.6.2", - "semver": "5.5.0" + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "rimraf": "^2.4.4", + "semver": "^5.3.0" } }, "tslint-plugin-prettier": { @@ -14951,16 +13471,16 @@ "integrity": "sha512-6UqeeV6EABp0RdQkW6eC1vwnAXcKMGJgPeJ5soXiKdSm2vv7c3dp+835CM8pjgx9l4uSa7tICm1Kli+SMsADDg==", "dev": true, "requires": { - "eslint-plugin-prettier": "2.6.0", - "tslib": "1.8.1" + "eslint-plugin-prettier": "^2.2.0", + "tslib": "^1.7.1" } }, "tsutils": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.26.2.tgz", - "integrity": "sha512-uzwnhmrSbyinPCiwfzGsOY3IulBTwoky7r83HmZdz9QNCjhSCzavkh47KLWuU0zF2F2WbpmmzoJUIEiYyd+jEQ==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", + "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", "requires": { - "tslib": "1.8.1" + "tslib": "^1.8.1" } }, "tty-browserify": { @@ -14969,25 +13489,18 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" }, "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-detect": { @@ -15002,7 +13515,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.18" + "mime-types": "~2.1.18" } }, "typed-css-modules": { @@ -15010,34 +13523,14 @@ "resolved": "https://registry.npmjs.org/typed-css-modules/-/typed-css-modules-0.3.1.tgz", "integrity": "sha512-RHIKxvl9ytIGM1H13dFTJI44EslhMAZQobY6Do8EIy7JsZI65REQ+N5NHInyOAfvnEWmhIaMrlrDGdLFFIRGow==", "requires": { - "camelcase": "4.1.0", - "chalk": "2.3.0", - "chokidar": "1.7.0", - "css-modules-loader-core": "1.1.0", - "glob": "7.1.2", - "is-there": "4.4.3", - "mkdirp": "0.5.1", - "yargs": "8.0.2" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "camelcase": "^4.1.0", + "chalk": "^2.1.0", + "chokidar": "^1.6.1", + "css-modules-loader-core": "^1.1.0", + "glob": "^7.1.2", + "is-there": "^4.4.2", + "mkdirp": "^0.5.1", + "yargs": "^8.0.2" } }, "typedarray": { @@ -15052,21 +13545,21 @@ "dev": true, "requires": { "@types/fs-extra": "0.0.33", - "@types/handlebars": "4.0.37", - "@types/highlight.js": "9.12.2", - "@types/lodash": "4.14.108", + "@types/handlebars": "^4.0.31", + "@types/highlight.js": "^9.1.8", + "@types/lodash": "^4.14.37", "@types/marked": "0.0.28", - "@types/minimatch": "2.0.29", - "@types/shelljs": "0.3.33", - "fs-extra": "2.1.2", + "@types/minimatch": "^2.0.29", + "@types/shelljs": "^0.3.32", + "fs-extra": "^2.0.0", "handlebars": "4.0.5", - "highlight.js": "9.12.0", - "lodash": "4.17.10", - "marked": "0.3.19", - "minimatch": "3.0.4", - "progress": "1.1.8", - "shelljs": "0.7.8", - "typedoc-default-themes": "0.4.4", + "highlight.js": "^9.0.0", + "lodash": "^4.13.1", + "marked": "^0.3.5", + "minimatch": "^3.0.0", + "progress": "^1.1.8", + "shelljs": "^0.7.0", + "typedoc-default-themes": "^0.4.2", "typescript": "2.2.1" }, "dependencies": { @@ -15096,8 +13589,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" } }, @@ -15107,8 +13600,8 @@ "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0" } }, "handlebars": { @@ -15117,10 +13610,10 @@ "integrity": "sha1-ksbta7FkEQxQ1NjQ+93HCAbG+Oc=", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" } }, "jsonfile": { @@ -15129,7 +13622,7 @@ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "source-map": { @@ -15138,7 +13631,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "typescript": { @@ -15154,9 +13647,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "source-map": { @@ -15168,13 +13661,6 @@ } } }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", @@ -15182,9 +13668,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -15197,9 +13683,9 @@ "dev": true }, "typescript": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.1.tgz", - "integrity": "sha1-7znN6ierrAtQAkLWcmq5DgyEZjE=", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", + "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", "dev": true }, "typings-core": { @@ -15208,95 +13694,54 @@ "integrity": "sha1-CexUzVsR3V8e8vwKsx03ACyita0=", "dev": true, "requires": { - "array-uniq": "1.0.3", - "configstore": "3.1.2", - "debug": "2.6.9", - "detect-indent": "5.0.0", - "graceful-fs": "4.1.11", - "has": "1.0.1", - "invariant": "2.2.4", - "is-absolute": "0.2.6", - "jspm-config": "0.3.4", - "listify": "1.0.0", - "lockfile": "1.0.4", - "make-error-cause": "1.2.2", - "mkdirp": "0.5.1", - "object.pick": "1.3.0", - "parse-json": "2.2.0", - "popsicle": "9.2.0", - "popsicle-proxy-agent": "3.0.0", - "popsicle-retry": "3.2.1", - "popsicle-rewrite": "1.0.0", - "popsicle-status": "2.0.1", - "promise-finally": "3.0.0", - "rc": "1.2.7", - "rimraf": "2.6.2", - "sort-keys": "1.1.2", - "string-template": "1.0.0", - "strip-bom": "3.0.0", - "thenify": "3.3.0", - "throat": "3.2.0", - "touch": "1.0.0", - "typescript": "2.6.1", - "xtend": "4.0.1", - "zip-object": "0.1.0" - }, - "dependencies": { - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.2.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - } + "array-uniq": "^1.0.2", + "configstore": "^3.0.0", + "debug": "^2.2.0", + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.2", + "has": "^1.0.1", + "invariant": "^2.2.0", + "is-absolute": "^0.2.3", + "jspm-config": "^0.3.0", + "listify": "^1.0.0", + "lockfile": "^1.0.1", + "make-error-cause": "^1.2.1", + "mkdirp": "^0.5.1", + "object.pick": "^1.1.1", + "parse-json": "^2.2.0", + "popsicle": "^9.0.0", + "popsicle-proxy-agent": "^3.0.0", + "popsicle-retry": "^3.2.0", + "popsicle-rewrite": "^1.0.0", + "popsicle-status": "^2.0.0", + "promise-finally": "^3.0.0", + "rc": "^1.1.5", + "rimraf": "^2.4.4", + "sort-keys": "^1.0.0", + "string-template": "^1.0.0", + "strip-bom": "^3.0.0", + "thenify": "^3.1.0", + "throat": "^3.0.0", + "touch": "^1.0.0", + "typescript": "^2.1.4", + "xtend": "^4.0.0", + "zip-object": "^0.1.0" } }, "uglify-js": { - "version": "3.3.23", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.23.tgz", - "integrity": "sha512-Ks+KqLGDsYn4z+pU7JsKCzC0T3mPYl+rU+VcPZiQOazjE4Uqi4UCRY3qPMDbJi7ze37n1lDXj3biz1ik93vqvw==", + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.5.tgz", + "integrity": "sha512-Fm52gLqJqFBnT+Sn411NPDnsgaWiYeRLw42x7Va/mS8TKgaepwoGY7JLXHSEef3d3PmdFXSz1Zx7KMLL89E2QA==", "requires": { - "commander": "2.15.1", - "source-map": "0.6.1" + "commander": "~2.16.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "uglify-to-browserify": { @@ -15310,13 +13755,13 @@ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.0.tgz", "integrity": "sha512-x5+BK4OvEZZvaoXln/Z1JMGq3Nvp5A8d7oQ7Xpyf17lqZV9NYvugfj5aTaYcxDWNoILgVdnlPWNpAWgVdwT1/g==", "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.3.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.1.0", - "worker-farm": "1.6.0" + "cacache": "^10.0.0", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.3.0", + "source-map": "^0.6.1", + "uglify-es": "^3.1.3", + "webpack-sources": "^1.0.1", + "worker-farm": "^1.4.1" }, "dependencies": { "commander": { @@ -15324,56 +13769,30 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "uglify-es": { "version": "3.3.9", "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" } } } }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, "umd-compat-loader": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/umd-compat-loader/-/umd-compat-loader-2.1.1.tgz", "integrity": "sha512-rbU2eHzW6tp64cF3X9o93wNYeG6hwvmTTktnd4nW9CdY2rMdw/py0J4C9h/b9HNfn1H0HF7jQQNxGvrm5qio7g==", "requires": { - "ast-types": "0.9.12", - "loader-utils": "1.1.0", - "recast": "0.11.23" - }, - "dependencies": { - "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", - "requires": { - "ast-types": "0.9.6", - "esprima": "3.1.3", - "private": "0.1.8", - "source-map": "0.5.7" - }, - "dependencies": { - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=" - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "ast-types": "^0.9.2", + "loader-utils": "^1.0.3", + "recast": "^0.11.17" } }, "umd-wrapper": { @@ -15388,8 +13807,8 @@ "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", "dev": true, "requires": { - "buffer": "3.6.0", - "through": "2.3.8" + "buffer": "^3.0.1", + "through": "^2.3.6" }, "dependencies": { "base64-js": { @@ -15405,9 +13824,15 @@ "dev": true, "requires": { "base64-js": "0.0.8", - "ieee754": "1.1.11", - "isarray": "1.0.0" + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true } } }, @@ -15434,10 +13859,10 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -15445,7 +13870,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -15453,10 +13878,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -15466,14 +13891,6 @@ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" }, - "uniqid": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", - "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", - "requires": { - "macaddress": "0.2.8" - } - }, "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", @@ -15484,7 +13901,7 @@ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", "requires": { - "unique-slug": "2.0.0" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -15492,7 +13909,7 @@ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unique-string": { @@ -15501,7 +13918,7 @@ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "dev": true, "requires": { - "crypto-random-string": "1.0.0" + "crypto-random-string": "^1.0.0" } }, "units-css": { @@ -15509,14 +13926,14 @@ "resolved": "https://registry.npmjs.org/units-css/-/units-css-0.4.0.tgz", "integrity": "sha1-1iKGU6UZg9fBb/KPi53Dsf/tOgc=", "requires": { - "isnumeric": "0.2.0", - "viewport-dimensions": "0.2.0" + "isnumeric": "^0.2.0", + "viewport-dimensions": "^0.2.0" } }, "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unpipe": { @@ -15529,8 +13946,8 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -15538,9 +13955,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -15558,6 +13975,11 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -15566,50 +13988,32 @@ } }, "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true }, "upath": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.5.tgz", - "integrity": "sha512-qbKn90aDQ0YEwvXoLqj0oiuUYroLX2lVHZ+b+xwjozFasAOC4GneDq5+OaIG5Zj+jFmbz/uO+f7a9qxjktJQww==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" }, "update-notifier": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.7.0.tgz", - "integrity": "sha1-FDxFMzg9CJCO9wVGIGOV/htauwY=", - "requires": { - "ansi-align": "1.1.0", - "boxen": "0.5.1", - "chalk": "1.1.3", - "configstore": "2.1.0", - "is-npm": "1.0.0", - "latest-version": "2.0.0", - "semver-diff": "2.1.0", - "xdg-basedir": "2.0.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - } + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, "upper-case": { @@ -15647,8 +14051,9 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^1.0.1" } }, "urlgrey": { @@ -15661,33 +14066,16 @@ } }, "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "requires": { - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } + "inherits": "2.0.3" } }, "util-deprecate": { @@ -15706,17 +14094,17 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "validate-npm-package-license": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "vary": { @@ -15729,16 +14117,6 @@ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, "viewport-dimensions": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz", @@ -15752,22 +14130,14 @@ "indexof": "0.0.1" } }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "requires": { - "browser-process-hrtime": "0.1.2" - } - }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "requires": { - "chokidar": "2.0.3", - "graceful-fs": "4.1.11", - "neo-async": "2.5.1" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" }, "dependencies": { "anymatch": { @@ -15775,8 +14145,8 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "arr-diff": { @@ -15794,16 +14164,16 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -15811,28 +14181,29 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } }, "chokidar": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", - "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.3", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.0.5" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "expand-brackets": { @@ -15840,13 +14211,13 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -15854,7 +14225,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -15862,7 +14233,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -15870,7 +14241,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -15878,7 +14249,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -15888,7 +14259,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -15896,7 +14267,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -15906,9 +14277,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -15923,14 +14294,14 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -15938,7 +14309,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -15946,7 +14317,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -15956,10 +14327,10 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -15967,7 +14338,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -15977,8 +14348,8 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -15986,7 +14357,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -15996,7 +14367,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -16004,7 +14375,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -16012,17 +14383,22 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -16030,7 +14406,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -16038,7 +14414,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -16058,19 +14434,19 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } } } @@ -16078,40 +14454,36 @@ "web-animations-js": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/web-animations-js/-/web-animations-js-2.3.1.tgz", - "integrity": "sha1-Om2bwVGWN3qQ+OKAP6UmIWWwRRA=" - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + "integrity": "sha1-Om2bwVGWN3qQ+OKAP6UmIWWwRRA=", + "dev": true }, "webpack": { "version": "3.8.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz", "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==", "requires": { - "acorn": "5.5.3", - "acorn-dynamic-import": "2.0.2", - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.6.0", - "webpack-sources": "1.1.0", - "yargs": "8.0.2" + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^5.1.5", + "ajv-keywords": "^2.0.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" }, "dependencies": { "camelcase": { @@ -16124,32 +14496,19 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "requires": { - "has-flag": "2.0.0" - } - }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "yargs": { @@ -16157,9 +14516,9 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -16170,15 +14529,10 @@ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.1.0" + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" } } }, @@ -16187,16 +14541,16 @@ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer-sunburst/-/webpack-bundle-analyzer-sunburst-1.3.0.tgz", "integrity": "sha512-1Z3Kh3H9589hr/svTieSY7GIPfZUZ9bgckW+9NDCI9RYuD4Yen5/Jz0zQdYeQQBY7pc3OzlDJzJbqZzNu/whxg==", "requires": { - "acorn": "4.0.13", - "chalk": "1.1.3", - "commander": "2.15.1", - "ejs": "2.5.9", - "express": "4.16.2", - "filesize": "3.6.1", - "gzip-size": "3.0.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "opener": "1.4.3" + "acorn": "^4.0.3", + "chalk": "^1.1.3", + "commander": "^2.9.0", + "ejs": "^2.5.2", + "express": "^4.14.0", + "filesize": "^3.3.0", + "gzip-size": "^3.0.0", + "lodash": "^4.17.2", + "mkdirp": "^0.5.1", + "opener": "^1.4.2" }, "dependencies": { "acorn": { @@ -16204,16 +14558,26 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "gzip-size": { @@ -16221,7 +14585,7 @@ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", "requires": { - "duplexer": "0.1.1" + "duplexer": "^0.1.1" } }, "strip-ansi": { @@ -16229,8 +14593,13 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, @@ -16239,19 +14608,29 @@ "resolved": "https://registry.npmjs.org/webpack-chunk-hash/-/webpack-chunk-hash-0.5.0.tgz", "integrity": "sha1-Hbo4ID1zwearBptoEKWjdAI5new=", "requires": { - "@types/webpack": "3.8.12" + "@types/webpack": "^3.0.5" }, "dependencies": { + "@types/node": { + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.2.tgz", + "integrity": "sha512-m9zXmifkZsMHZBOyxZWilMwmTlpC8x5Ty360JKTiXvlXZfBWYpsg9ZZvP/Ye+iZUh+Q+MxDLjItVTWIsfwz+8Q==" + }, "@types/webpack": { - "version": "3.8.12", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-3.8.12.tgz", - "integrity": "sha512-Q8ro/vCAyE8piwBvRgzeerrVkGy3XBmK2O2bk5g+NBHDqR0R2qZGwpBsz+js5mBH9PvvenQCojqB9nZC9Gz4MQ==", + "version": "3.8.14", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-3.8.14.tgz", + "integrity": "sha512-QljpyEEOgvFeF76Pi271NS/cVB7P0lrMp1b07b6cpii8d5BvN3qoN7TybL9MLdKRro1qyV9TxQqahuZDjAZrhg==", "requires": { - "@types/node": "10.0.2", - "@types/tapable": "0.2.5", - "@types/uglify-js": "3.0.2", - "source-map": "0.6.1" + "@types/node": "*", + "@types/tapable": "^0", + "@types/uglify-js": "*", + "source-map": "^0.6.0" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -16260,13 +14639,13 @@ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.3.tgz", "integrity": "sha512-8zIUzfCbpaDxKSAyC8ZhDA0P5EBvlafHcj4yoSP8lrvW0ZyWW7tsrqazI7q+zAhRi22TTE3g9sycQEZeyUbpqg==", "requires": { - "loud-rejection": "1.6.0", - "memory-fs": "0.4.1", - "mime": "2.3.1", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "url-join": "2.0.5", - "webpack-log": "1.2.0" + "loud-rejection": "^1.6.0", + "memory-fs": "~0.4.1", + "mime": "^2.1.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "url-join": "^2.0.2", + "webpack-log": "^1.0.1" }, "dependencies": { "mime": { @@ -16282,17 +14661,22 @@ "integrity": "sha512-P6xiOLy10QlSVSO7GanU9PLxN6zLLQ7RG16MPTvmFwf2KUG7jMp6m+fmdgsR7xoaVVLA7OlX3YO6JjoZEKjCuA==", "requires": { "ansi-html": "0.0.7", - "html-entities": "1.2.1", - "querystring": "0.2.0", - "strip-ansi": "3.0.1" + "html-entities": "^1.2.0", + "querystring": "^0.2.0", + "strip-ansi": "^3.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -16302,17 +14686,10 @@ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz", "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", "requires": { - "chalk": "2.3.0", - "log-symbols": "2.1.0", - "loglevelnext": "1.0.5", - "uuid": "3.2.1" - }, - "dependencies": { - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" - } + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "loglevelnext": "^1.0.1", + "uuid": "^3.1.0" } }, "webpack-mild-compile": { @@ -16325,8 +14702,15 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "websocket-driver": { @@ -16335,8 +14719,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.4.12", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -16345,35 +14729,17 @@ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", "dev": true }, - "whatwg-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", - "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", - "requires": { - "iconv-lite": "0.4.19" - } - }, - "whatwg-url": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz", - "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", - "requires": { - "lodash.sortby": "4.7.0", - "tr46": "1.0.1", - "webidl-conversions": "4.0.2" - } - }, "whet.extend": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=" }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -16382,11 +14748,12 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "widest-line": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", - "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "dev": true, "requires": { - "string-width": "1.0.2" + "string-width": "^2.1.1" } }, "window-size": { @@ -16395,35 +14762,25 @@ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" }, "worker-farm": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - } + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" } }, "wrappy": { @@ -16432,36 +14789,30 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.1.1.tgz", + "integrity": "sha512-bOusvpCb09TOBLbpMKszd45WKC2KPtxiyiHanv+H2DE3Az+1db5a/L7sVJZVDPUC1Br8f0SKRr1KjLpD1U/IAw==", + "dev": true, "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2" + "async-limiter": "~1.0.0" } }, "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "requires": { - "os-homedir": "1.0.2" - } - }, - "xml-name-validator": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true }, "xml2js": { "version": "0.4.19", @@ -16469,8 +14820,8 @@ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dev": true, "requires": { - "sax": "1.2.4", - "xmlbuilder": "9.0.7" + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" } }, "xmlbuilder": { @@ -16499,91 +14850,19 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" } }, "yargs-parser": { @@ -16591,24 +14870,17 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "requires": { - "camelcase": "4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - } + "camelcase": "^4.1.0" } }, "yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, "zip-object": { diff --git a/package.json b/package.json index 02d9e29..3febc0c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dojo/cli-build-widget", - "version": "2.0.5-pre", + "version": "3.0.0-pre", "description": "CLI command to build Dojo 2 custom elements", "engines": { "npm": ">=3.0.0" @@ -22,6 +22,7 @@ "clean": "shx rm -rf dist", "setup-tests": "npm run build-test-artifact && cd test-app && shx rm -rf node_modules && npm i && npm run install-build-widget", "build-test-artifact": "npm run clean dist && grunt dist && grunt release-publish-flat --dry-run && shx mv dist/dojo-cli-build-widget-* dist/dojo-cli-build-widget.tgz", + "prepublish": "grunt peerDepInstall", "prettier": "prettier --write 'src/**/*.ts' 'tests/**/*.ts'", "generate-unix-fixtures": "cd test-app && npm run generate-unix-fixtures && cd ..", "generate-windows-fixtures": "cd test-app && npm run generate-windows-fixtures && cd ..", @@ -34,8 +35,12 @@ "git add" ] }, + "peerDependencies": { + "@dojo/framework": "file:./tarballs/dojo-framework-3.0.0-pre.tgz", + "@dojo/webpack-contrib": "file:./tarballs/dojo-webpack-contrib-3.0.0-alpha.1.tgz" + }, "devDependencies": { - "@dojo/cli": "2.0.0", + "@dojo/cli": "file:./tarballs/dojo-cli-3.0.0-alpha.1.tgz", "@types/chalk": "2.2.0", "@types/clean-webpack-plugin": "0.1.0", "@types/execa": "0.8.0", @@ -51,6 +56,7 @@ "@types/log-symbols": "2.0.0", "@types/log-update": "2.0.0", "@types/mockery": "1.4.29", + "@types/node": "~9.6.5", "@types/optimize-css-assets-webpack-plugin": "1.3.1", "@types/ora": "^1.3.1", "@types/rimraf": "2.0.2", @@ -63,10 +69,9 @@ "codecov.io": "0.1.6", "execa": "0.8.0", "grunt": "1.0.1", - "grunt-dojo2": "latest", + "grunt-dojo2": "file:./tarballs/grunt-dojo2-3.0.0-pre.tgz", "grunt-tslint": "5.0.1", "husky": "0.14.3", - "intern": "4.1.0", "lint-staged": "6.0.0", "mockery": "2.1.0", "prettier": "1.8.2", @@ -75,11 +80,9 @@ "shx": "0.2.2", "sinon": "4.1.2", "tslint-plugin-prettier": "1.3.0", - "typescript": "2.6.1" + "typescript": "~2.6.1" }, "dependencies": { - "@dojo/has": "2.0.0", - "@dojo/webpack-contrib": "2.0.0", "@theintern/istanbul-loader": "1.0.0-beta.1", "chalk": "2.3.0", "clean-webpack-plugin": "0.1.17", diff --git a/src/template/custom-element.js b/src/template/custom-element.js index 96540f3..4bc1183 100644 --- a/src/template/custom-element.js +++ b/src/template/custom-element.js @@ -1,4 +1,4 @@ -var registerCustomElement = require('@dojo/widget-core/registerCustomElement').default; +var registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default; var defaultExport = widgetFactory.default; defaultExport && registerCustomElement(defaultExport); diff --git a/tarballs/dojo-cli-3.0.0-alpha.1.tgz b/tarballs/dojo-cli-3.0.0-alpha.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8b2a81182121be43c5008439980cc03422dbb13d GIT binary patch literal 34982 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 GA_D-z6WJi)s972c#g!KXs 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⪻lqv+4#@TcsSNXf zUinJD9s9e(=L_TCGlX3Qe!I>0tFF>`ir)hca}#)pa-@L!(PE&jE33uxnxbi-{X2f4 zxzD=MvQLrIfmBtI<_!+q<`Dp1zK>}zgs|N&z-MS>ap|s=CmV=D&P>^om*2wR1lWm+ zGY-)>Zo-+Rg6wSuEd}!`FHVO4BUjFID4)#_Iw;jnrRfDmm9}bJqq)iz0D_^wXd&Sw zRb^25y5?5zwu8I(wIx+qKOszBKiVZN$$J+|`YnKUgH{m~8xz0jF0A$TFQLp40!T&B zYSEP^`f~DFNz!T`1L7#L}X|aCEQgh z5&B20Ce1%W*W0b=h_u#E^Sp9*jnBq}dq{1rRtt>%qMPv*Jj5=zWTQ(ur(AO4+k%^O zis_G+AhRNVMnh!lz>4SW#=yXchX!WA`2)u8l|yeNz@J@AkiXvPErn;yA!>WyCfrzH z7j*Cuzjj&Cc+oy`TpwV_OVt)s=WnKaDOzW=&kB-UXpTklMgItz)%eDlCe}jvRb8d@ zyjktiA|cdb_e^Ak#FTs}=!W6=sqvhg3?iHLbPYx^d4uhtUO$Om=b~S87x(<0a(nM) z^JueFFcoMiEMbcsOnG`pzhJD?OwDv~nbdcO$goHYaNzsv$kvHSHeN;$hI%mKMv$)k z{EIk=1u7UvdvEwONa{5-Trdyek$bRS$P(Eugo*1UEB)e5pad+FX3Te@^6-5jCu;uD z`PS1lEC$qVhOwm7?Q7R($qy?ytDIqS#`J^aY6d&SkGc)U9=Y6=-!kU5e&k&XiAJ%} z5d@Y3d3O2CpI&tGD1fk`0(@n9N5E$~N{ZmC$)|JQUvMZa6x*+5OVNW?F3Yof@232P7h<*9tf4wr9igXv}UzQC}-v5c4U z_XNHjXks$?1YBR=qQ3Ui9X}Wbu6f4Cf-{RqctLc_K0oJDzQc67H>^r$K6Q7e-MYco zV1d|Yup8pMvF&bbmwa4j?&8%WCB}JawsP&t**W*4*SeQ^i0e~^kxJc42$7E|$Y%B> zUxJ2~!V|}$qbv#F8}*Ev`M$|R_Q_;ctfOD#=g)c zWA~D4e9vFIUiI1|gTY$a7T6C_OI+_U=0fNX^xh=#TpgYZC;CJJK6W?mTe&CSz(EbW z_Q+cfS0}3xnq9PlijmPy82Png$cZFWnF{Ssk(_d9EreX3H+gd;af)8jLu5f>HXC3~ ze9}@Mv!HOG6x|6p=EuE+lyks%_(_r|MOl#>K>OzpqFt|4QTDa=N}-@BoQ-zJb}$BG zqN~U#nJd_CaLA|63!cU|F&*z&I8MWq_0<-cb~IIC^%lFplSt5TG(^`s_wc}1sV^$k z2%=iK_SU~8eid8KRDf0Xo_{qDqO}nnkNwjJ5;GT1JZb`M;_-y5?CiT2IS7P84B+Mo zP)IPJBHo^`1JZUC(r#x{$UPd7BM_hWuChK|%_g?p)^1`x<(%bBH!9wwak1$K`EBE2 z;vVJeO|Bqh-U(VXc1CCSRUHAXdn4jn=%3G`zgx({SYrC6PTa#Ke(C*4V7xPkqYAWY zrJDH(Ay&oCQ-C0rU3<9_>tHkcVuLfG+i|!CZkW`-ZWPKQsEGM*nW#vY z4(|Bl-@2nhT>FrV*fuWnq>S|RrHV1`3@0Ha#C`{LB_HaKi0v06CIyM2mTWRZ8k>Se zgM|%}&K{dzvA0<_Oer!TR(du_)eDhD7;(xZf0Hu_P1q8Wnap>m<`j#sqe8IL7#$>X>(et zFg`sr2JJjbC)a5+Upem9 z>4neMRGv8S4ojxgYWSy`2-Uvg7oX=K5&H~7!c$gXF&5YKQv-{A1!`d|cq3hO!naKh zRH7$<>gdDXGIkf|%P*_*pYF$vxx-g$q6LXztpyoLGy@T8pv)CN7YGRn)0hkB@uzct zS5q~X))g&@RY9S_k=6;%Sa9(GMMFN?hJTsgGs$zC?Srm)!IVg1 zn{nd`0^N@y%;=r~KV-^>Y}_BE9xe(v6r(w9U&=sqI_FoZoKnt{hA#f11rZ*!06amo1 zc@nA>n=jFPkgc*=dSEroq#y0T{mxR$P6=}vKV%S~6z`wa32>MAqZ>64>`T8}U1l?1vo9Bs-;U+HwPwAL>=Gy+>?& ztv)|KT1NeWvN*Ro97cWiT2LP?mc2I;n>X(`&+opz@1HLvSN}Ae)^0|Je0Nr#-@me- z-&@#s1XPaSOPF_7*Lm2<1+0Hpqz_OUtR2EWcImGHV1ruc_Kw=>I^AzdO`K75 z>3mK%Hu*QSC`1^>Q`gA6%{`_GaVh86e{cNYqI2J`I_Og`iXMWlFAMnXh zLEp?8Gh=Zn;}So8X?erHQ&Cp-JMnlz{-%sr#r z#vUB6W3if)1evjZNr>?~;WQWMsh>IHMGv6rTjvyqz(BKKaJ1AdCz*)cgZ&14^~wUH zM_S*011K@$skpG=UzWEm|E_4YiUbVDi8r%)T-U{OpG1o*KH0t~?%y+8kvGfrkvh6- zdb6<)+tFcNspu;CNV^xqRQxkm-zr2RQbVNsXqM$&{%{18iR-SXZ_S(*SuA1e*rbv$ z8Z#_iu(8t)oRjyRiqi%woNrr=>);LEz1W`ZZ&h6h?&Vf8*`Nkne=KNTlgap1bPwf; zJG`4atag!m*f+G;Ggg<$*U>j!P?%?FPHj?PXM%>nW{8cCg-^nQtDugTsK{X7uX)-&+ z6$hpn|CJD9uLRvKjz#3pRUf{tqcvh}(08}PO1SEws9GB?qrJVW_#aQSXMJL{C zwpU<>(z9vroqih4;klL;6XIXO9!)7n1dkDy%CP9Z+!K0P0A?0#_{rR%vmm|p1Cs(g z8W8CFc#aYq5SuN{akt$Yqtyr}o>^ITE=+f}Gb&(*=eZP~g*1GOMG40C(~nTHaP5`G zocEJ0fIc^e#-VsVzWXK5KLL1Fnzj4HRN#`Z;Mf)nqxMHyo0rZD7iR~7VY-{Iyftw< zsziwfnntweym9mpBUIqLy*%V9V)>)F&Y^=QE#B-6(A~|W@Fz6V!#_a7&TlMCF)Zc- z*b)AG!LrQeX~SW`TYke9%s>`6aDziaA08W~wnXyZ_nfpK;VR8JQ%g&zcSJhgv}pO> zkOovukJl#l{8o)=3GweWt-K-7)gsPI0gJ1)3TxraGx17IW}l>|cv!w4@4ZL*ps5|e&5aGm8{o#q_IK@|H~uZ^NquRcngWjb z&Xf%H|NMx@)5=ymgXc1zcdMeB7kFiQvYeONul}pZ`4DKYukWeDk-XXgu~i0#rmh|$ z&{jc>7NnLez_gSPbK;G@e0DIbJ5Ug4KQPOy%cNe6&bBxuRd+^+A1{l8qq6}DMgzh? zi2+$k9l==~T+9l4b~?;`8(q;*eU9h0Bx{`eY6{!N&pg}20X z6;jDLr>F!xsFUrAs9`{I0tT$9Ke#eK=Lf8cfAsrANuYBi0yH}I#d0WbihJ|xC|I~5 zn>?-y36|EnT7jOocU%oM33O*Owqb>YgmG<&a(TQzwklAIpuU;P`f#E5S3F=d^xreH ziJ3$1D=zpjGz@hN?$}?3uT+>`KA|9694Cl;7yYQqUc&_+&Hdt@|0t!CK#f@k*y6WC zZ|7!$%j+W+ZK2(D_|MZ3``l8iAY-}J)`C&E+ABw?kt7a8Vt$ixkcYCNRfJbv@9ydG zZB*5HOVokPI^ag4@&*0NF8vc4-Ik=p0gXykgq_G_JwYExxeOu0_tfZr8O6Uxws1(+ zgZrrmHl4KCU+4A9?=Gg_y(aPJSKvyWX~q2%Ix%sHwQV zZTg*%ZMJ&n!OEe^Jg@~A1vzP`(-Ql3mc%X|xyFnqoj__Chs8{qk7B?xYa%NMTVCz6 zk>UHZItDVYvbaFL+xB9|v*T&ZwZM=$;IouuXAaRl)wEV=ekts-#sl+vI|K9zNQ+4>dgUjghrUn?ri}E1i1w-@p2KMP0dY=#PpVwTAdS5M z&~u=6|FpV?>wjOLD1o5Zc4_#@rMhq+Rr|nhj!BV3PASc?>^+zcw2R}q%)s7R4LPo} z{^P$COS%QuVAsqkJa^swo}q;H)oBS6(pAuSumJGQ{3EK;o2~!-V+F9X!@> zyMmk-u8#XtWB5o91ipTV5QGg1`q!U{$M(OE_$W-q7Qo0)s;e@YrS>Win%@zhu)~aV zS*mQun{9N#-GW+L1hhm@;73KzOfg&rZAn)=QX=}5h5gr;|V)D)VvpahEI!m`+LkuSp9!IJ}5~5t4ngVjE%CW~-$58pTo4B7UaLg?XHeL1XH?JfTg&lMIt^dIhs0r zU$>j|1r%tOvJ-QfCqD1;LDQ;g?>s6+iB;o9*Y3nn7TP(yc)C@!f-fCEu8# zZz3p}y-#4LP~wCbpVT(HzmMr!*_Mf4mk59MxX@Ab=baqlm%C!6%~Ika+}E0)!9f?7 z+(83%8(Jw%&5%dbs#tU4;h*|d`4WM+_~lTv>Mq&DwBV8>vBa+UDe9!W9YtXrxthRU z?m%g216G%FixvTwx7-8wO8iL>2Dz8sUax{_YSJ_L7FY+?14>t9}B=*zh zIR?LqrOX0f`*+#wp}fh3BfZ9C6pN)_`eXu4FqSHK+6phk#Qz$Z?`UT8`Am6($>pl< z9@mP(N&@Wn4B8^8+N%-(0YkSgpHIv(U!c@MRuwz(0~eE(bkCK19tuk;^E85CNW`=X zf`1eKTog-pLI!THhJR^KDMPuZ(4xby4Fw}z-Br;gp z8Bqta_0&Mfvx|jiu)b#7UkbW5YC8{Tx~l}es#!N-j1cITK33E}nzB-)J1zfkHb%z5 zrCzSDwtG`&&T9#%v&)V=qHNES$oXOEO=%2Vz?q{*EvfksuTWAdG13qH$~twv4If#w z)Y@`BUV1_PmG%a9WxS2D=8{#sJ$8v8z+RV{)n*Fn*-h1Zef8u&mncVS(+!q*rd?Eh z`r!SkWU-b%nKhmf)l8q|po-<4@jsGu3!&S)@=gF$r<4w)zkQ z+5{&(s+BNmRIzvvvH?#gI*1%X%(y zHlDAG7a(?-pWSv~#iUKZ{~s*OWfY}-Rm(V8Me2P_2`kqRg4Jx4)ACHfGv*O9tnYcL zTytuZNssMRDV?@mW<&JA#6p9ljRPvCYHCd8uPXzvi9qiq=*(e_n7yZ21s#mm76R%f z3*sDo;MYD|nFv7IYEDuw`eHrKnj)~pT8IY9nAAMO@__WFzMA0&Rf9UiR(zF?41`DE z{0bFzLpJO-UXJ17)G6#p8>N2ZQCz>|RZ-Rj-Jr;0%;X+NgYokgID!xG9kV;S``Vr? zDO`)Gh1N2KWl89-XNQgKWfpGQMHWJJq@7VIiU2YpxJZM?_}!U`X3k^Yz~*A<6Fx~i|hJ9U!?yU(W1cPKzoGAxnGZ3avzn2+eEq-DC7@E{I5|xte zPX3N1ikC|$$<&kL59aoC#8F*6P_uFGv!}7;!r61lyseQOySPOjRz z+5Xf}>8HPs@$UNQep+j1%+>q9_FZpDHO&oXF>taBbkHAQN(PR+BpxH7fa~X-04)27+k8 z9U$7tb4INKL2XzCel)u03533{7*iLkCu-@M_WXZ@ap>G|a9QIzf|~mqlP1N^G(tjYr)0)?ON8KeVi8O8Vwtg_SYrHm$0i46>v_ zdI^k{Eh{cq<(bavl*DQ++6nrrG{C)4l9*?>ezCcDR4lTJ8WJ~0{P$L_H@xC< zaz(O!D`jDZk($WAj4G%UqQ$N1n+IKOLGZfC_~+T(BUU!S_JnXFnlc!$%^M}~Yhsdp zlS@1mgxVX$4y#)*l$&6UWvdh(a({t=++uNG3ULjd247> zgU#HlEj)GaT&>QNfy{ffLISI)L-h)wa(bXO!i0P&tI>25h90!My=3sZ7a z)>m3v+>I1rT;SlXbCMQ;`(T;FgaThcn{tT0vws5iJDVGhFMe*WH&`z~HQrY_h1Ldo zg@l#j+1F?6#S-$ZD*kpIgEF9oe586DW_U+rF?vHuLVZa_z=v2%)1=)Yqve{nbI|%xZ;dVDmxS)i!Cv_z0R=9RUd`|rnP@4VyQ~cVLJ;);jQ~;c z5$$DqwvGKIhIJCb%p`aDB79bk4Uvi*_ulDln!~hmlk0S$#Lu?`arV?17|S>`^3YL) zl-LDO&TMm`&1u+m4G-(HRtI zKhZSHL(js4M4B*ShH*c$Ca8)0A!Swd4HD?+~AWQ>udZ$0jB$mn{Ja zGPySn37RMw5)EgXqO=zJ!8x;GZEdM>RxN zEwSWFlJs+Y5LPPlKP@7(zNPIOTYsHj@^0nF2ELpg6u5zl>&h_sXh)$XJ_ENzk9|XK zr=iQ>3N(+6(($;`5+3F0*72>DM4Erv{^i6X#;V&}1HKOZIp>Z1k=icDXOXQwSYGtL zfuH@XE+D>nux$lGL*3>JALGRN`%+FVOb!U)8EXr~Lphe+b z7l>v>G)4JZyrq#B_znPc_wNWs6lvFsD$^4ss9u;y6m3i%C!90RkS(`*6m3L`S6mq- zG>im450EQg5r?VDI7v4D*p0V>5f%^se6+_QT;CW2$e5k^^VNn1g*feSi9t@D%@*vPZesEsOg zXyA=VB!{uQB&t*q#0ME#R-!wTj)*&oI1GI~$h)OjjdvWXor)&PB+~qVB66gb+SR34 zopLAKoF)gqJTnWo+^Siy5s6XJjUiu_dK_#O!db9IBNG?jCSWM+yZ_S%Ly;c;4OtG3 zTFY4q3>-*IQkn-ZZJqeXljQErn;xIs2lfnYc84<)vqC|$zy?m80uX{ZA@dD>8bKb( zb0|`zC!$g18G>D2%2u>`b-X;Y*r_*<>fm_6!TE zDt$o+cq6nPT7F1m^Nua_@O}#(rBW9n{pGFAkDKQj4qZ|1k*^CGuq3!WtDBwnR31{L zke3xYCH1yMRipqUu6Ah4%glTq@AO!K-KbKaH}z>)q6mo|+w*pmN2lvfz;x<$U3`?M z=WR)PGRmen9cF+zutn=XTUyGNCl15VSShY|h%t1svSKgwbe!`S>4g&TpySMhi=|vN zsowns_)l08SXlmFA)dYe)Hx$(W}sf{|4oUe!pD|q_0O|17h>YeK}x9f&#V4s{h#4* zP+S1e&y)8`j^PfYRVRl&1`L1+L^kx>`J9CWE=m&`;VsZ3KUfq$3fv!`-DPdV;(_Mr z;VURm2ATBV4FS2s?()K}+SLK{!S~|hN;EOJ6Sy*M9+FW(IfQtrUWM076Fk?T^OzQJ z=2htIV}m83)l%t?EInAJWQ8PF-%G)CLI^N55{fAA9QDh)d9DP-6J}y(dtY#VygwRQ zvQQi%3sc}1b2S!hKHw*}3?r!&_DkQ!jzjDXyrE^JNZ;b?RW)-w%E%Q?>eq47uM>dI2ucqUMpn`5wUTF%l`_$YaNiAzS1)mb! z_9ERTUvcbO#Sul5eELv0ftP)CY~9zQKS8-e*WqQy%j2` z)fNC~HHb!PIt?2Z^*0U!fh|481a;0#{kn5j-9QgEHLdFVX0ePJ5mMf};M70PWerzg z^wI+d#x)XHHjHDDLk9nE7U}*+X&xHVy0{le+4ZZ#S(j>wdK%+1VJ0+*a|yD>lWqWF ziq|HTq%Wba96vxw>_|{cJr?XTlKS8BJV;9*;KxVKNQKD~)MU4kr{4SGgH-L}Fy@-` z^sJB|0CY9J371&kipLP6r}sq4B)ZD^_g`~z)2c%-nt=?Ad1L|)x*v2s6T|$I-1P-x z;#TYqL{jt7W$&`-#T|?EOio2k1VtN(As!By{jC#*a_5jN%vBg^{3+|A)=V{q4;zb;^e~32 zu}e}>G4fEc=83bo;>_D+O14*IfxLFlwO?0$REb~G#Y-=vfFMmZQ2htCy(S>@(QUU02RS5zTS3~wCP&x!!LGE3 zLM-~xDaKc^@8|-h4{N}{?1)(|=pj_12})&o22jTZaI~cPsV9~=D`ny8IMKvbE!pEd z{5zdzn$b1BrSTqh)XI0t_|fIz&}{qKPCBD?RN#0$sj}TqG%rk=)mlMv`rNIk?~az_ zHMrB~C-IQ!z6=h^5UADh0zD@bUB~#Xqu<1d`I{+1CDqE`v@wJ1O;oziohVU3q890DL}ge7GqS6BzLCUbMvo4*|AIqyoc&@YaxE^oKM z`-yWJA&7sJ6y)ZEK@k@i@>*z>9lJqlN*qDVBqHeAWs@BW>-^-LP3t%CymN%fp96Gq zvT)k$2VUA>Jny9N>VGMSATPiQO3kst&GFr{1|T`lNhTtiLagzY*(@iS!qvP&H+mjb zq>^i#PQ*c|iJafm;*`|zKL*-kx&>gqKv3o`Mo9?5S3+8Q%34mSI zQ!Z3O(GF@fzF34Y<`=o74Ge(ritp0`5AIoa3zlYvBeEX$0-!U8>t+HW3+T9MkFd{( z#gR4>OdE#`vUPLf>VSXIL4Q_{mWkn85Q$EGp+a2UT_GeYpD3Mi#_FcQvrfc4#i=0n zn8q7aLi$TSLxy|%S7Lta?ky;1hdqLrUhDX$RC ze`2IL!k7=-vnr;te9Z_~jkuW}dOjVJ*8yp{!hscwwa}aNoF13);|J1}It6=^E4MkB z-_0PTu!WV2;4D&g@mQH1k|(_vrt)NEC~8-j$$;035*B`W(31_OOp+H{|K2k##tF{H z!w;&x=_x7BxdD4?b@bZRaX6sh+~)7v2%!AL9^RY`Q zFrD=oy_#0MPz$Fau_;`!`Z9ABMiXblZY`zOOeffi?xja&paOamMGt`F-H>1aAXK4E z0~}gnq|w8}X6{|oGqvdOJr8eV8;D2Wqv$wjt(ff$y!5`@Pstn>ybM!!vU$is%r|uq zqF-x$o>r7_Pp8D8IY85(`V8Mf@ctwBHA9q)bGexl_~$e`rk)0a7(!-3Z8QGT+xA)n zZn51TngZdf+C{Df1odm^=6$4Ji}rmQe22ovZvs?_C1P1F`Ow}vDC>HmC0RgW z+9O)^!B|k=R?Cjc7vf!Qh`^>3%F6kX{;u7-&h-db_MM%{-qwu&-Nll6l=fDAcgGWf zug;91v3%6|d-xD45#1G$)}FD`~8$p_CZ|8Q;jfa&SaLSl(WAF)7a&x+r!eP{$=@I?Qr;`-6t>2J*}UxqA@;-k80> z7Ae|V7@}?-t09uJ;nCMz zn^AGEls`jV?3Y{pIBPF`wrH4XKDH(`_J0`rrr=DYEy|8<+qP|VoOEn=?4)BS9ox3u zvH#e%ZQIE|xp$^!=4Gm;>eN@O_IW$sdDv&|z1LD+7JWWWI~LvAUR@)YVK$7E(VGK@ z**scoa-nTjtRwh5>BZ9?J8;^`ZCPYs5kdF?D-mN;(5UJ4z*b;#QM>0w`=F>Ht>0cYWacKmc> z`$SSn8_ylyEHH21&ZvHNd zbINdPd3ly3oo4SakLxU2!GY|diQ6qLX4=0vHoCW#kE)ACh&n(F^$+VmVv`Y})O^}t zAg>N7h!ihy_=wTLXXQgN^BMMInU?T+)dDFbND=fbdC%gN*E zvs>|(PRR7OE)|pa*yj;eKc=xmr*3e!d&PFT$x8{rR49)sMO1zXq;a`>NHb?gX58iS zBfSdgG6xX^2h0#ZPO<3Y`{2yWUN@-!48B z8V9;r5Ay&wyEL+ZH3y@2KmnZuFbB|>s5y;O8SX~VFgN;}UKmeM6X*{pupglAd7vv> zy^}m$L1>o*S!sd_X{_XLHITbHC#h;d!OfP;;SNiN?^yntoY{UHPTKop3^u;m`>c>}I9e5T zgMM#mhY?Pn;%-oF>G@oi2Z6MfPPrp0W((dfoLVaq!1oCJ8Jex>_1W{AXF<7TKqBof zN4{P0RQip4rO}a{Ln~xhJv@fAV)GAh<{JukiDk$oGDFg;h#z=)c7%v`irDLOiJS#s zECR@>xP!LL7(C8A1kEZ)Rr3f0tl!4;FkC`!$UJ5z(Xy6h%HQ`~*T>JXw|j4#9x%_5 zy;vc}?y%fK6Ar)0hJ3yUF{+#FFM^Pp+8s3hX2_!93i~nxkl3B1 z0OmfjRz?26$GE?@0))LTD-#?G{%Bm=)duVd2cW*oOn9b+_o6OuExKmA(7N29STQ|+ z$?71qneYSPe(v<4v^sz@{s$VO*8eZGlSKL7$p791)D8FeMgLs1`_s%nY;bG(0<^QS zUwNsW%$}SC1vW+eBoGojjcT8feqve`?~m)&Nj>9fzRUkxGux^&^hiF(_XR`qIg3y+K`wdr!?AyhIjl->JU zHH73NAdIy|7MEkJQ^rLsVdHG9tB#BhXbP2diNVi)m>Np$$`z0DpwQda26#QIpE73M z>ms&S`SKRex;ri5Aby?wku~p1oS(8_7U<8fU$`8!Sze=)IDeC->=KdKLSyjzUW@?C%iiub1)Tvj%Po%v z&ECbAniLKZw;osdIP>Ne?p(vp5N?WYV-tGaX2dpvc-6lvckb*TJyxD89T&p-;v(*= z&%_+=y#19^Q0f>2X;LH;X)yJbzoY-^FEj2@^-mR*ZsHIxw1l4duc@!eoO%>LsQQ$& zk35~mR$(R2#nPUvZ$UNl37HxV)LxHuRuGMuy*(Tctxi_7V z&#bPxSjd&6x>VF~nG#OraK6d1-rSZfy*VcT$+hc)gpRnN{D6k-jCn;}k$6Kcb&VHm z;ZVY++xh~_G&aw{cBFq=bsvx%q=8U0=_w1v^l2K=x2+Ja%2SkdVEFAZvEhgKy@$1+t+OGMDNn5rmMd8zZuA()jGE41+aNIr-6kZsue zBLUXHnUx*WF)v{K66k2V5adibBFF?cBu~_DI`8MYpSCL7m#vO*vma&Y(cqD|zi#ZI zWm?ss^0jiTJlK#iEC|#iy)5)pp7!IqvcJCKJqBbxyG7h@tMUK#LE+X}n;1$&n#0K5 zs~Xyb>p>9oRBfM3MQiC*vh=QwfNS|?W2%AwWn&z5$yIV5w)E;e>PYR+D1G1K9*SXv z_5RDn7-RhYh4KHx#l)VyecRD*n~9ZIF$^--Nmk6!WJ;ZJR-qemoBio0yMw9zF2|qu z+;5pa<MI9Vnm zRg-zqJm!T;=Q|b(Gve)YnRNX%%`EF(^{*CbVBgLjwnSLT4p2q*qjv z&C_%(smi!_e!XMShe!19!B&J~`&U-$IyD_iH0JQ6v{p7kQ|Rf!E@0l<@jD*KVNc}` znln=UN~V{I=o~xIDurNZfC0fZmi9Zg~iBo*Vib|2CR4V+^t zny7pq*h-O5WvX3tYNeH`&w-aL@y_O;Y|~3qGk0(p<syi6rfNm(tHT(%aRv19J;1-Fb?6Wdyslup|2 zNuT_nmSTbA>z~e9cCXtzF~mu@MWP#qN|pDkzUr~(PmHAM@NTSX<>hAJZjbDE$S`g$ z1m5}?(esD-D@O7Zu(`u)TL9Pw(8>B%Y`MJyIA2zUq~q zG=F?Y*uiukmfmQ+e~OiM3Yb8-#tRwt`DD2rUarE(@__Lm3WI7RSSXO2ndP8E{c=_p zGeaOJS#P1p|Jh9;?RBb?z@1Cr=CnzdFw z865I$Pj3kN1K>Tr?I%3dHw&*xS|zl#OjnbPJH=p|KC5{5y)7xYmw zt+oDPqa3Ww#6WgB+oF^Oem^KH?7GHB2-83x3+FK$qTj!>nL*EnmV!BW`B+c&6n&p^ zk!Sg`m>LX9aW>o<2|_vLpjqJ)6s`3Y$g>$H6)1IXqeqp7LK0dyMtKiV3r_iANl~q{ z4#)td?Fh|^D9d9y+R0s(n&FLL?J{i0RGxEn4VCUHtdJN6rPg3TVl0div4(T<15RH8csscsM~Q$X!5c?iJo9`Om~ubs7P^$vFt$0wdT z**0=^u%pHI#3Bk_=+@%Ow+cjSMH^lDf}=(1aWq?)9dkUMlQL^-6QXJP$_ixKNn}m=Vtb5|l=-%Zp5eCJu}1Ab$uYT?&Wv5sut z3>uImW=0{Da26$20B_}?&k94&hD0KnfMBF7iW(aobhLmz6isV$kzA!l?(^Q$MuuTf z>4~GAN6HhRw}lPhH)RGBB#}9Qa*A^SdxmXDMfP#` zfnT=5gHK@bka_3AoI()kVVZ6Yp8M1EL55_qlw?_k)Tfv^H%Q$I<-VFKOL|jRWyid~ z7-TEB3)h!u@X+bBM!7s3LY=Y5#Vui}4J-+4?icSzxkqAf+jCEk~!epH&^g24)_DGJoB8ojXk zB?V#P&G+Qqmno*MfmCbB3qklo@C+w>yh5U}km3}mvf1;tIilS>?uf~epFAOTL=+Xd z@h?NrFVW!*9J^=Yk%#u<0)*1{6`tKA{_9AA)4=(jxy@@Z=iob8;KVV^coSc79+BTv z*wi_!TjH%pJB|HE82NFUS=BE3u;NP1or2NI_JXgHJoR?QKY)%+AWQzWr)+|?@9c5c zZaAgC`!XI0+NlCp4M}hZRgEBD7ows=F63-gG*GYu1k~RJ2;AJXJ^s3$yv*MFx=!YY zBO$XZPD5pwzNPSp-mV*diFS{iKBn=#=M+m`n0yNhz3{EMR;jXgM+7+JD(VXw+*s@Q z*b4Po#ExNaU-SEJ`?gr=P1zV+O9@@m6J0k(-S{2felry%i4!ifkvChEP!G2`>-X-q z1|9klt5A1Eh(Sy7*2~!rBv9w)N>p6$G9&rC?dLyv zm5=G#RNlC!EdgR4Q7tY#D!f~=YeM7)H&NZL>i8ZTxd_Y0S$5O++>arf+4nDZyg3~y zZdE!|9t7!+CHApV>>je2d)-;<4eJIs)Na3HEAN_61o|abk8`{U%3k7HZdZ@@?Jib< z3j9Wia_h*ugxHx`!=W+tS7{)>2rdOrKw)QXU1># zN}IsNOXYLo9Dif%8h@jtyZ2H;H)vgCdI!_7C)#-cj+@46c*nKMz=7`sv&wl<^>Q)F z6;7d1$00DMCxr~3(;=!s%h?F9qwWjXd2-qa)DdjiNjd$V9ret{kPWH6@njV)tylL2 z?vxx7ZIFNUP9DBOwP4;O*=c?CTD|;Hf5vCtZl6#S8OS?qdtPvYWW88Zlwo%^A5trAhdJgN~i0$tFrsXN2}`xx4hl=*y8ZX z@P9$WrQFyS`Q5koaQ7|r8o=Lk``tI4)-TNez-ysDEXw~2|Ie`R(7f>f+5e7pRDE*` zfN#-?y0&g!of;&EcHs5U(3H>jD5!4$P=An2GPMJ>Ur8@F2XSht6zljV$9f>UONWRr zbI@5VwiL*e4MN-n3~B)E1O2YQ%x1rZgOP!v9)$vrE9QyZI(<325D&#aW54}L?z1Ot z`7??QD);Op$&!53jwq($(&V%@L=ECoc~OB(Qg8JSOq3_a3zuDHnYzuKb%`{3xLjft zK~gz1gwf`bm?&(MLaKb`A*r~2I=+8&4$fSQU37}Tg>Gw1Uv>$I>>D7mtN7DPzYXFV z6n;sJwHVQWMvAJd@sk>uXn44;AU<|-rTb7vTF`$M7H&Nt)9rB@&NA}#!!=(7K}6o2 z2YX_=@ioYxN~cPoh-3RavtfNkJqFano-rNZ+LrI=WjaB>>V9m0oyLB9Q#kGat^zh+ z@$3VarmiIaV^4AW29y?%dj4^czh@63pCIEWBwga`V80>ykhsR@1M}ab0;Mek+S}Rj ze)^e|o_tIBlRo>=IDeWSTqF6DVGJBzm4PZQ(DYdKG1HKVQy!y3Y5-ZfGFw3HI8;rYbT9c&p8>3m%~Ucsy6DW({$ z9hH>Eo^YBDbSX(kUev^=H)HMtry;Q(g|Z14kImkPBDPZ}5A*Dnt~pcwqZ_ao(T+f= z{a^O5FdL#l9oz`Uz1z;mv8bL2(Tr0uAa76FCB5W#-uTaH{1X8m16HC`dJG%}sb6RE zL&f#Nqcv(j7#&z}5vL%PCSxqrSQ--`J!y(D$9M8f%UCcD}B{OI_^mXEndPYi6y-(awWYmtuaY^TuW0+Hp=%u>R8~)hr%>`i?pk_FF}}n0ya8 z!-8fC{MA*n47rVI*tn z-~U~XekyC+Ep`-OO`OxMTw))8FyxdhB{oIM8%Ub_wIr8|H5;W4G0{O?cXQ@aaoNZw z0A8z+xS`yHlO*%VqYkE4V)LGzs4_Q)Z!kJ*Cdj+?_&C=9(klM}L-Gawcox*!3v(?- zwcl{x8^@vLwvicgH6gPz(97!`+OGv-JXY`{?|!=X!H`>U=;Mn9D%(mtF=m&?sT6hxcZCy1l`^*E$W0AD@sk3coTXO|2imh@86M_X?xvltf#V6q(NPXvd ziBW9Mq(3xIi$r!d?iNn-Ij3F|5a!A1#mWMJv>eaZp5N-#zIS?-WJ#BmDkT`jtf_n# z(QgeZm>W?<5tVEMB{j;r>kHr@Bf=)gS3GP9=ieZNfDQXNkf(dmRFvbn4-95N^m^bw3=rXcj zqD!Qgs8oer=H$l=s)IdZ7F);TfR~_Ep1Kz8)+88PmW#Im5$OqOIHrr@0TxmD00H=V zQrp07K+EBc(6!Aa=F5NT^6#;QP^YfMbng75MLDWdXTsLd0HOuj>lGrM*Z@MicNV03 zb{>BJSj8u8>3fI-^e5|!XQWJFh)nWixA)OdNao{gF6|!d@C|2;K&o1?5x97Ldtfaj zGr3>`k9Yb&3qo((gs+exPKO3sRlm@W`Tf`)vrw1V&9S_a6P$HQo?N-#)M?@vnKZk7 zCb?7`qIBh}sT|qIaDx%0&|2|e&g!+DJ_+RZxjP2^RGj~am1??G`2#X|Go7Hc*@M$c z9TBvM{6g5ZMH&Aqq;4PUY}KIGcXEoCk^)qPtC zp%^S@f9IeJ*Yg8;WMT`_Y@To59HYcLMcTT$GP$y$i55BZrv=TK7Dq;<8Z|(8869%4 zu-&QfUFNQKY}d)NxUy8(-q^@pb(I<1AI0p(?DOvm-+!%28o8o~RZHY0U;-MV4{lAA zQ%7{qlKqkrX+`r>4$bdlSg~G~bAvf*mVbcboXGU>@mI0QI=Qe*<0cB!_p>I5#?d=i zB-%bLoUC^VA1D!`N&lJtp@P_727k3%#UbRsPX#33qQNiiBvY5hGawaIDQSdC>Y#Gp!Y{@^*EZ9T-9iTr7($%eDq!-8^ftg ziaMxX5!Eu~r+AX1lSRpu0P8}yWDeRHG^>OMdl^7?9YY2?G{t`WSoxUi5bu_O>DnJ0 zo}yJpUXn##ZU{HoO+*Mq#m1aX5zVsno`B3#5y_IgWq1Z$b($p>-ZE3CH2BWpCSD1H zbxSFl+4-CY{DDR>&FNCLWur;j8dccD8{NTV?RB~yA7pOYulf42^(EHpyNLRooId>d z2etjP{Wr+&`v-}4H$_d?6Z#W&5lFi3kCDN;v3+<@-GuH+{I2H5dV(GkIY9G`t3t%r zdsx@GB-_80zlA=}r^Agl?6>Hm>d=4EtyLWC5z zn4RVToCh@P0=XrJ(D1xwfnq$QK&*!DSESpNT8UsrJp*$;Uy^)*VwzW3 z>T90Xd~p)gF%q(&v$0k&8aGk2IApAR8TCyr=s}^Mvdd$R6X{MTgCR4|=yt4Inq{5Q;t!S&Nz(;me@KgM5b8`; z2}PJM%7rOQN}uD3vIU2~8cq3G;qU9EE(!Py==TBf6Sl7we#}1g5z#U`l#NQNN64r( z1Ye!sMlW>mez{}mQvU^icWaqHFhT%*H_yNEz6MOPfIVSDB`3exgiCXQHnujG?H_&+ zz;i3Ye;+>IDrstPD^m~sC#D4YmT)^j8GzHFyC-6$#!|T7rTp|N5~oX8COc*FT;%<3 z>%7l@TTBB;2nWxS|IIKl{S8CEqtnM=dEF7O2dgWq(1F2)Jt!Ay=@W1fzusgu2}380 z5IepbG%dUCB)q@#1$mwHO$Z_|FW!|*OT&x?v9JPzh&=6 z7i@9_*QeJY)M*dXX)N|kDn7D^{sm98?Db^Xt%UpdW!Ih(sRUHHT{V3Q=0LYO+CU`j z2Hz7P%6c5aV(WyNL`(NAK{bV7=WU3g%J|T&>jEYcUVi{gL1!Lb{oLG^d%w@&67&AM zF*FcZJWzV6`ju++C;PHt7szuSsZVkX5VJH7{zwleN(p>Fn_^PTH8T0Q+w++HQEBfV zHP*R*<$I+X)wWh4#RI;QjEzsK+^k`zF@??Q)91jg&W`P6H5lj|iYs%SRd0K;?C^R- z0H%`SlwAR14Y5e11dc zxpL3%Xcm=-%-8_KJlrB|X4pzGZW_?H4&*H6Jbq+M+i=DhMmZ8D$ZucOnuTj;cH8W=G zM3}LMIXt~_)C=XTj=6{xS`$i4b*&7y(}=ij?seu}1u7*uGY&1}c0xmzOjXyD4^&n; zm#LNV*+dp6(nRL@IR6&# zD$|vJ>x(9B2*M`FzgP95`Pz?$p`XIJRJm{R|0UQF;9JirzccJk2bba|vYAwn%O8mf z7m&68EUA2Wsb9U)Y<;ROYMzxDW1)726bL*AG=CL3W@|{gnzNXulG!ehl9}|)I|r2t z@Q4ZKwd6lZk7oc+n)k#aCrPdMsz-(mHlIXvjFps^*IM648>rbmqHOc+Q@Cv7HBvGM zW|nkLC}G+o;GHq_2`z(+#0(BhEn;oJO(xkWyzMwIUNlq5db7Px0tYH}9{Fzg#ZtDv zR%qF9f~);mUK8KQ%xGaPp5zm!bZx9si?$BTQV-sC4~$ad?CD+^ zCedGa@3fWG9lR&({MZpaF0cg&tND z&=&q@Rc^`7pv3$0cfVMxmegVyhVEGRsqq=Ztg7;`E^hwIwr*2$;_SS7`E{`jt(|75 z{hTCi3C0K3eucNTx4_0GUF}P+XlqwmA5uPaFvL;o*{gB80LO3f2HJ`{akFxObCWCd zKXIeb+`$CR5?izirt(`>&d^BfHuycT5FeR_Vxc6Rzb7`48GnP}7)`PIgjG4=+h74t zM9*+%z-|Zd6`n5x^<~i8+}a1f?IVqLjdt}#-Urg5%*7U#WyaRfHZxnpBZ2}rN8y~1 z74to;RH0QKsf&;GRIzHbYv)FR&ejvHLw1L)*$T|^zE)+xV2n5&L8v+(EJtbB3s6S+ z$d5>y(UH_fHmuVRi~C8SbV)S@u2v#gG?3#O`x(@DS5yx!%MZ2vcoh~1SLH8@L{%&5 z4qW~+zS~YM3gtNlSi4<&{^wh}2lP!eIDNg=9cEHP^v~2bu~+bI41#o7a?;=}WhNwk zfI;wt;Z7JvxO+)u-I4CCP6?@7a-`!9f;ZD0SDd1-TYx!?=9iHT{MoOPTRqPl%XF8Usf? z+>3sfq|n$qTex>Q^XnfW-Vw%77CP5y(F%OH7CkF>9LJ;F` z4Ps*L|9b)F{YXA@Nu!w#p~^l!+%A_g+(oQcTe`(Gs65mch-U{Mx|Ussw^)fp5&18R9Juk|U22XDk*CT?S$A;HOjn4a zA+>nXw?Ra9Q^GHX))juc%%s9H8vw}dBM~ID>?=t}_;M5bU$#$PN|JznkuQqYT+4Ql zdqUOK2Dd=_+m1V60yL)X84#ic?tKm=sw0nQv~I;)#DKwIq!6}gyZej2ec-O_%e_XU z6R|;bX5GSfAb6spBL^#?g?~z@$1K$oi#bHOkeZc!z*8outw@-m*HBxM#TBK^j8S<= zM=`4}g#)Xj8FAC#bvN|D?{Cswzl?DQ_zcFGs+Ix_eob%OgB2gAZ>G;Nvv-Mj4|i@N zK6$pwO8=K&L~7dl4;VzibaZNvkO0eNzD9IRbFZ^Zzu$>+r({iF+VKzRgJ`$wBJljP zvP_$#UjPn=Z6s>>ZgU*m&spa6EEV!4n@2Jt+499Qn6pR^frT+oC$u#vQS<|!)NXwr zItsGec1-BV!|0?WPLL3Kyl@|M!d&+XWfx6ZBs*#5MzQ zJEfA8QrJit6Y+v~M#`-7i?P(8#kQnST0h)a?8)?Um&M-^@Wf&ywk|`x`DuDlxD3fm zYcl?@8L+k@DJ7lp+@wq08niJ&an37c;^;`@?F1KCKnv_e-Utz9khwCEi4{1Gdm%rL zG-w54{M)~;L;cQ3Z9=gnL@ob%^2qgBCyI8D9!nmO#c*Or4|v+=VK=LUxNn1~I($6- z2r~=2^|Y;kM!9X{1Anqk8$U@uWVUQ`vKTn8er8SJXZhV=@xu+p`tK*j5=}+TaV^Y` zAp=-XGaBjvFB^uqAY+7q&cCa^^HE$Fg?2frLi%l zMnQ{JgBlp4l<6WI^g2lMgm2~Z{J}I#EEaGqJ>;duz&bl7=yL-vk&`w!(Q9S6zIH9- zCBRG|vaaQzXB}eWOr>NONVeD@O$9}wp#*EGy3M@#Bz*zl!^QNFN$wZ^qqDi{kOr6Z zSGKS71JFR|>w0aH&pHPP&^dRjneqdSGPwi$qx@bUk&!-PTd5M3&cT1Qz@KoSV?AVqp?cdGk?3k2z($dEI>dBIc~mq5Lw$pEC^3(8aWU z{T3%77{(j~L5$Tddn74h&dpRs*b*=FVwpyEU%yj`U<(-3v73*E7b85lLwV;%*k)c+ z!zNe8X<4Bt8_c7(cFWW}d9kI zMTsit#O%L8uZykbiEc>^1forCAyztKJFm~~ zGXJa>wK}CsKa1T`IbeNzTak_bB-wHp55HGG?VFcu4Ay8Cy9#+IM zyK5+?r7oCPD2}%?Q0dXF1ViR2yd6eo*rs_uDrX|yUa(6reS1#krP>DHmhD@3Sm*uB5da{15VLLbQ;&WVFfocRl{m?7<6%1x5}cGX&yKY>_xVA{UG^QE`9c5|TL zGws)V%d4eFSG$Y;?w2}+*EQUlCzI82S6OsRH-V|_M!_TqNjlLS0G2C|28gu?f-AQKsii;$_TE6 zl}&wq;79XO+II<^1%^+2&Dr+Xp$~r3mj^UVW*Q^CV(1MjYDHH-wUv%1;lQOXOXjXH z!h;57M5~$sjWjsJ>(u2Doz}a~6R}~EMln%smv1CMCIoSVwZcq`st4Mm4IGjy6-{E} z6f;9^(Pn2MnT%v@Xqc2WU#9qg+K;8+4s^b!J_2<$2-F!lI!1clV^m^O8Lx=Wt$ES! z{s71nFv9aBbZ*@u@SeM#29)^%z5$fqbKAZQDzSfX%%1!tFpko$0SfS!zlA!kah<1qUA(1 zi+aIj!V*leU^q?PWUFwgoqBz)bY|tx81*Pvau(|i6M^OUP0u(n-k0rRk-2`YdT)w|Uf zB7CvYh%ReN?!<$ZXG`eXLf08by0T4gKi7PV#952_$`_qx?Xph{EZb)lNE~)|q(rJ^ zWj%+8j(8H~l$dUkpS|y~eAAzBFkfG}L>8^yEkWUXVMBIaFg$K!SqVpV9??H;YhErF zt@opa7f1L*FPq%fT1Po@Eut$P-g|nyr@6w3$*YR?cf=>g`dze{XT4-N0CHXTl}_`} z2Coudo=iqv$_uFQo_x7LP&#q|xHwj(g=>}k1+tDfTx=L@*@0}7L`{r=u zXy2C~;6@dcs>ORsARtS1>KLF;dwS}KI1#$Id%*TXP6{k>wMazpk5pMXr)BipiNhY> zga3a@e}?fVxtEw)xvz}fPkOxRMdsD3y&|0D<Hb99ScSV?*-&rmh?EMW*P(K=f>G083|vc++YCG6Zyl^ibK49jf^QwK-GzY6 zWA5)r?dkS<{knIYxiB=Vbt zQfFHANE?_i>j!Q3NaVWLu^dUA>YIuh>pZO zr$f7Xt73H}-NMq~RJHT;$q1s#y5`Aj#GTl)W7OzOKSw#H91LtbaBe;)C65~->cB)po7P)t0U^8mD#)OazZ57cWg z9G=qOlRv~)Ve3tPB0mzW?txCv{$t0$w@JRO&)oHvYu!sAVDy^y3+fXy3~2N(+izNl zNFA&5g}@a`izOB<6};PBV`2#XX?CU4dbubeU|HAwQ9Q+1{Q@?RNR8VYL0Fi0E#Cwi z+cBP;pt!)SEvG24ABW(RkqY=hWtk}^c}0lV__4`b8F|?1Y}2Rzw(PJa{RHGXJy-jU z$a_a`8KhlXl~IbGukwagT1<0Xe|MYL*epj876zZon4+FE8Liej zYIMkeJ(WZd6|Jurho`8vKgAu`L&2;^9`-AY_Go&hFWAkwE@$BxBSWkzV3aYZCxwOp zmnZY8wv<}2eezk>^r=w>f@tV~qPd|M0Vj{0vO=Pk6Uc%RFZ;O zSGI+1rciC+-V@uck&$Z)DE!)O8aNt8BdLw@WBjP31nNzp%w)Y>pI7F5xV>M!P13zy z>wI9U92ofDPHPN%#h{E~kRNx~3)bA!VK-G9R#lv6`il+YtE+1Kp4eT;R1%W3ulWtIyXw>tDy7 z>qK1?_-l_kT-DWjfYsSdqw>1@ZB9PFW5|<5$S*4}zor1dS`W|*7a^560k;oY>gy9WGEJdY$-xN4DFp^U&$%y_6O*CFoUWl<427Q# zjiq~sS19sE1c-n8*W8bS+Ywrm5x(d%gs z0OEbz9HM>QC5zu`RI0G2s5!I!!;B?MCe!KFNP@e65J@O;I!wOh;3=R_W~o*O^3z=a z^zvo4PR9@z5HZXAJ5R7NKcnadW%6=9fAk$H@C8gg+h)dIlc5iZ2?kZq8inktDH;h1 z0)enM#sc&rHcyd?t^UxSD^Z^_eXq5oj$8ZjVNR;Wb_SgIl%Tk7uaGOqe3OdXVwh%T zaNcN0kZN$&g7bvxJv|}*4Mv+In(7s1A?6DCBFFfbtD}(u+Z~JXzqG?2GANa;kVd^l zHh;k|FRwcKx1eix2dusSB+W{JNF)AK$$)M+h4##Nh8~0}>@{?O4ceNf5}x?mh8+B4 zGp^1jzJ*0g2N+V>QVd~$+QjsJ!M`5aM`2H!Bs>}Q6-0N_3t4?|VSkMq!3lRB3gPeR zoAmWdz+lAPuV##ygF)nyI@&LkhK;gOH!bL6r}@!C+~5gmdg_S5LBOk{HToaT7AyhzWNhz#@jTs8|fEyd& zH+uSOi%;|`7~*zn#v;KF zH0eZE1FUlhwt!D+a9>0rs?Q7&^y+E`y+)yz$v`lrr7rHqAMs2(ID}F!bef85c{?0` zxmr82iYqe@bh7K|hS65qD1#wtO2$|ecVw!X9 zlM`@jA#6y+dcc~fH#P!3(nbu(16Ny*-|fnt8QaSA%>kH(?@z>^{Q*nv0F}1<`W(H1B^?8&@BQt^#NYy zi}S$Q^qb_b>vLeu6>!!*;N5S6Xl~r*jH-KV4oPv2#aGz1=8J;6r{^YD5tF@;fx|M$ z#oc1dP<@K^o;ULd?3Hra=CwpK(|Z#|)W(e!M_$gdANBXz_^R)0=D`3@Zg1fGwMQw+ zP+!OB2|UI)15|lcFz!$F2=<+-AJMh$igct$6VkVR zubUuEbD-X(n~l}R>J8XeErpcp2tcZ>``NJ0b}_VZ6H+y)4tgL|;vNl~c8tm{u@9EJ zRScQt3w8 zZT_Jr>@;o+vf<(MDD(xp%G0xHdT70W90Q6Ao`hq|-%)$U-}8eTu!xbC^G1;mdztfb zHjICUece=-wmyt{Uhj_6k2hdEPXT#W14&xH5k-nP2AtSQ(+QL~nA*uReG;@pi7HST z-yh)a0@;z?-nha5se@u;TALm|6=}oBS+Mup$0!6wu^pZRJhzLmmFVvb?MvbsK!1 zEZo>wL+3|swKI_CV;nbmD(DVds9};K2>oT3_65xe%@?N#k}usvpTw|GJ11cqa6-krbSaB zWPCkZlI360Ne|@$DN|DpNSaGa)yO~s;{A{tvYJsk#he^Dn6@k)hL=zE#oaE|d^G)1yOJ3j}nc+$=WX(&<GS>j@wec0d^lVtGSgf~cH@43j>(~I+U86vR z*|%Ym5*ffU$&v8ul#Gxro%x6G2n^yh6AHE7Q6|l9^(h6}sV4hbFGW>&c08V*sZ&m) zlEZ`4;pj9;g((FGT|-luC9*~%LQ-}az1d`f_7r%X!|DzrDRIq2w*+K;_aoi{@%!tt z2$-$Hh(jA{?9Zmq;6!Pf}5&Rww8QJV%8ODmxIj zsQ6hb$Z5D5YGG<9{e{zArAamrsv*=7kJAa-hw&Pit;!((kR{hwQef*qf;Yyn+qi(JEwvciS~h%Z+2gVXjpv>+&^8u`azC9TGA;G@7+I+y zLj@&H0rjrD&qv^TIN~dS!})=DU=K}vKpjCfD9!YZEOMb^$YN|xY;VdCzJ)?k18-oAjz|@@aB9Mmg_8wNU(E}ZL7gd1K<4|A_$3{i-Pc3IVqrm zstpxZ)>m!^ZnE)IJHN0>GdZP|+RsixV>;R$k5$kxl!_j9cb05W#s+-DnhPS$&5Ofi zx{B{kj)RX3%)v+J>j;NMm|?O}#$;!3eVgbF#%$ehc3Io9*_5->oif@&ndR4MVZo8p zJkukOoD`TbT;L)RL+(5&%uN{3vei6vt-z#Wk>@ucGIpL|675)Vc*bA@!y|+0(8RS? zcAkR(eJ&a5#A{v*!^U1kD@?L_yWBXL69vCyZnOWM0VY_q7 z+rLX47`}R3Tzki}aBWEU{AoIA!e(R9z9hsaOaDg=6)VY-zmv0CoS0 z0PRb{JB8Gq#$M5?v!Y1_Zz%I_K_z(2p|0*YEQQFNEwvgW#6KlV6Ejs@6I_C3)05Je zI(!CK1F|KJe6|<(88em4CTPl_j@dmE2=|!YX*gZb6lHBygk?Qs?U6$#gwpz6#Z8EO zej#q`+?Rm-*>j?&5TXqZD?`kLGCk6vhZ9d*7{O$VpxSrMw&z2g}qD(9dQ z(Z4QEJ>4(&l3S~*W%T81!eTlyM`m*Y0eTG#VL%6L45$TGfx}_#^SRlxgn<-*Ho%YD zxia$X;YCmA`9?GcVU=HV3H^Qmx|os~*KA6N)Yxw%FSgpr%{yy%jBcB*T%N&brgTT9 zKhooUT*pgUc%f&kRZxSRu3?Un>*KulVO~4vj(2`|gg4Z(>y0FNl>yl&SQP1x^cC%+ z$>><<+Uv>t8LWH#5jG4n;YG~GoJv+ozwb}7^h0=n@Fy|87RR{Ear4q+qA_28UXx?!%>J3KyPl9~oHSrW z0;^I-g7=h%hvFI_-V4m-mBk?`GKrmWuLP*t%!^`{_2iR6&eBn@nIPk7fmFz6qJR zG*U~6Ow_V#6o2W z`%)!?;s#Ij{Z{mc@lnj!lU=a={kn}w+#SL^#H zVKbphwymw`xZIeqF4tMhN)6i7Pv|o))9Px=#QLQd0TCM1aAZ!alHt)|isVUY($5db zE6+69eX)&40P|{i`RM8H%RKjxFX1fT3wAG zZ_Odd6%^<2GziDP7>V@~>Fj_`prkVmJXlhvH=I6Gba*j2P6rKKya)!l76JhCs@+F{ zZkW-zC^Yj6boF+5S4rhMZyc))oqH6TeFPC1z5hIRjy~mu{FKi0#L)?mlXnj4{>leF z5;n^Hv8f_z_HB>d-iHi7L%#|WW@%~RDS^K#(*l3x82Sqbel79)o5o>)wrIT@IPh&I_YHCjbvZE6k%wI#P3?va>+IlcUu zg8EfCIM4$}7CdzQRr(wolT1U{Af7J#@1PglA)W-2#gvT5iO4K6Xpz2IiI|_JlPTM; zBaH>CmX~oG^e=BVri!vs!w??*XI9u#+$X48Y8mgW!Bh8lTb-XJV-X!WED)>Y4hSfXWsGGp@4FU0B8 zPrBeYKG}em(b1NXXT?cZJ~UG388B#E45brCp`VG@A=fTiQ(>PCBCSy9=sJPjD_$qq zema#I`ovJlaVWa&r90Xs0`DAQ7k|i!+=W+8qN>|75ffSuh6imt8rPN^z#@+EAItuz z5`1i;fsg!V3HPLS(r`4)0?BzFnvze?D(R8b&(ePwfuAjJX>lW;qy1(-n_jDSyPRXI zpLShi_Zuxn7V0y43TYh9hET4?IS1!m*nDukw={6D(Z~aq3qM zf$Hb5OVQ26D!kY@Q&YbMO(^@Jg~=ixQo$>__)nmV>WKC=0=q+f>r1hD&2Q_Z6;N;U z)B)8SK0n6--7?p}?pp&}t+DEYL)>C!vBpQtNYt-7*~G{s=-{A=G^&nc$)!)I<`87& zmL;--hTZ4}{SDhO2w89=dHpv0U3kQlLL}~>d$rZ&a8{HgH` z<4hfQMy8K2rp@{O0(|2gzzE84U!sg@f?mIM{lW`_l7ZqX(2W&CuL>Qb8|j zt9*?z<^}T+W_c9UY;kFa9Zq4XK6;A}p79!s(1@WoyS`9H645pLe7VuXV0<-8Vjp=z zcllkvvO6PXcQ))CXqkZrY$=|MFE5qR2R5fj(U$s?+aeK(#Z>MzjC$9QD=pUeS{zt~ z3{CKo5q`C5g2cB%oaK=0O3(`8RAk_&HqY!e_mU?b!Xl8|4criulzrM{a-NtuN?LA zkiV3vEX?mF`)y;$-?MhJIiirN<90poG@G~R<#xM%v(;?gq0qi}TlG8e@?%TJ>a||1 zY!xUf-0E}PO+w~ve%PM_Y zgKY5SxC1Y%4~Lz4-USF<{Peyn;?7c#Tna<`s@Z&{gA1>!Nv_%dBj9}+28G-kXj#}LQ)Dc;a;oEVGWlm+3-Io{zcU?rh#mC1KuNI#U zWYAiCK5Er_&1MfD`xGV@pMIl|xcIcg(#(^n6Q75z`aj_1AM`S5u_|_(&0T!@8-s6U zHC14UW_;SG2*sPfHrs!eD+>N}y#2{Wuh{C0IH;Bh!Iax9E7 zMi@R|(Sv(Bi%NTz!gxclA&SRS>4jWkcYyfeQdCYs_a zboCefux+8UebO=p2PDY&6F0#jD`uiuVN9|^NDn^#VPya4pnrPT2m~)5@2nLq( zhu@C#ENi10oQ!;2ogmrHa2SxLErDu8U8hjjdWYpS#Af(|6O4K!0&wf+&f@h3KbSQ0 zWC+{*G2nNte!TC_=|=$1AHAu9aCH2fCWIe|0q| zSUjX^o?WCCYcN+@v05%UGRRy%v~)dxjrQgz{7dz``0_ZLwK~+1R|o*7QkyS>TIzAv zQD>dPS8Cfy$x>|dh`+I31lB)-HfZT*z=o6GygKU&&g;-x{fl}6ST|d8PX8jhd`C#1 zdnA39i3U$K50JbR`httOU)?$v4SsClpV{}58`mW6v1Clv)J~9&T_18QdXpdHm1-Dk#$wwoz?* zX$$EaH$0&(MLII&w6Ez;i1~)lK5W5YY+>qPt3HGD8D;UOKG7Y4A%TMk#H2+e^Am5P zv$+PC8Fd1MK6XQ7Dz+b{;ZE~t6{eA*Cm-t2BYxAARU8b05klm8rS^mf%SgYbd3>&P zLAW@B0XU-p_yhw0IGJ^5060X0U6W>>XcPz?hBwfw$zoR;?$5UF5AHfh%0Hz&;GLER zM^mf)e#^yvKn8U;W;zSeT8m-Mf#r1DY~3l%$XzZcGF7$h-KGJfkmLch#5Xg~*ErV? zb!FRhWgF$+)mC#?;;%=Dd#J|-YCJ?p%_Fe}G%>k}`)NvUf9i@I69ISj%h7#<5oWCs zo=VL_52Xe8oYP`BmW3SJAngNwZZR~N&t_-?UnS}((J6}BqvgWIql}=`b@4Fqb zop9ijRz|EtbGkmKZ>DsBa_z0e?UoW?9dII5O0+~xP6kYqL=f%FOKZX0GBT`IEd11R z8Jn}8f^utJ3!8G=85C%o3J5|<18Szqu4*3B$k3}Zcw)6~YncrJ-Svd65Fnasion*X z^iBNR9)=b@4=tJ&&A>86jHAnR_(kZ+VAPT0fcM;fScM&j6ft`wfSINnhGgx#);wV> zK#2@2X@Xiolt?|JLCSL}j6ZaD645Hm8e*>|)KcB(uERvb4B276Vprz$)j?07ub;ww zbu=^qI5hVrb?1 zQwz126;j=DZKl02h_MTZ5y4f~w8Z%n63Oh$*p`)tqA`-Y8Y*2S^*-Wc*Kj!5ay6r8 zvX-8xs=d+?%*HI3r0*v=OPwqH!{{K^S~`_P&(x3;lFGyz5z~>72#vJj@2Ns%LSiQ> z35Jeda5$b%8ct4n)N)$D8On}XTqwBnDdTeyP=BXRrs2FKL(d-?eBvi7g!?sPuKGJdH zJ3|zSqlJ@)>UfI=#G^?ww?hhF=c~O|IbEN~wi-2nv&(bDlo9KnQ57TS+GRKn?9H$w z_R=K&QVnA#0K)tLSgL?I0+``< zPxM(2NwQniM@6U)NyN1pcLgHaOl@u#ZHJT;?cx^_$OCiU!3Oy}gmNX6!ufS$?^ zsdnvgG_Qds54IS)#rC~0kDd6a1jjJCrrT%_HDl8LFGF2@b*tH2-J+MZEwzEUB}i*t z+0b^aYQF*z;7fgjzA*470sw1Bm zoncgvMKDvTo|4BGC6X-GeOj&CoxC=Xz0+Ne|Vxbo+`%AWvLN`D%c_`jE;tib|a@>{kcb7)< zZp%7+3fU@X9{t`E-3@|l0nQNWIyX@XDNX!(P`F_0f_*q7r!jTWtU#oB!x?WG4Vda2 z#uZQ|8KyDd+|jhonr>)>!w=NTt#I@}t$A}9=jWrKAgdcnC;@5HocB8$1;bRaWuMwi zuytfd>?k4dqqn6D4NWM`5P+@X6AZl_#C{Yufrw(v^oA)zsGcdB&fO%6$5(F|k#ji8 z#&DSLw%q*yFQs@kKMgmP*g94O*ZpgFEi>e1HUU~5b<+YIfAbXA^R7A}I~A*YPisUC z)wc9=WW1b41tohSABQNwXsmbTK|$WqB+%Qu)uw}Fr?$}k=CGq|2Sa%X(7t|z>2K(m z%|N077Y(QFkQ|T5`DH=e1h=$p(jHx@RDO^{HH?({;iV8c)PbiwtKiG0Z4^S?zW$PlB~@*(OrU zfZ%_Swd9DnEk0aP^I>Q8(nW4_67@Cx!+`QRA_F+P39H0kOLU^4h2&6}RE9Ezc$%SN zqYd5*7|wPlVVLETr__h`v?eelXN`n-%EfH!tZmO}>50Ena-^$J^NgG&jc0j%W}J14 zEIS>?MCXvicyDx#(Q4W96Cwb+gP)|x@L&qlK)1;^ z#d48uXy%DMSIk^+F{7bBi{pAvp*nc}6gt**(i~ey=WFb=hMIM|%l2xBv{!~c*29uI zy$YLodY`pO^&SAe&gJXqTDM31ogVd>m{^(iN*AW*fpv+^J`!Mlm6iy%TUAU$ypzbl z5l^L4S0|IR_%kb7b4D84p4L5}>2kL)vrv*Jxni?d;G1(R8>&xwf+ z<6sJ-$5=VFOGhUorCT}KHD@O;-h*aYAIV6BI*UxOpuMne&eoINvF)V7ZBlTEbuet5 zO{H+0vD?%pBTsc2miDm$x^m&6i{&wmw6I{3IT5-pTXhNd3l@4aT>0ULH$#ljqP#Q9 zxIZE^PTmu~oAIWjzMGwFp-<+Woo6q#*N~*hG6JJKx?+L%1$lE#$N9>1P&Cl1>tEpE z9sa*J8V;LML+Z^?;i-_j|8#}`VH0^<5mKiq{zf+7as?5fIT|NCX>7`oK8y6~;Fk_#S;%GD*^wEd5 zyh7bi#?ayMBtLz%Ra1U~cAnFi4e6Yc60Hxo~yr6<6Qm~0v zM?S1a(Ds@1=-F=adG7}qu1cvdUp`iWRDj54+t>L=K4F4<;`_gryZa; zhLYW3{xRuLu=Yd*Dokoniwc57L91yk06H)sjQJEasS8Z^exJ~WJ|~HWq@zI@KQ&R& zj-&J53ziziXA_2(hDNQm=pq$ULp7G8025DwhN%Alam=-F)*5x#K5x0$t}g zRY^}dHdf9ZY7qi}@dyjp&f)o3g)`HhT{*2-?vZ1Y;He=$^n*AV4NQy#x!w&%hk4K9 z8dmJBFd6O;_c_j|D#+7Nqsy$H*X(6cuw;oG{ z;h+TC2u9Yfz?JuLHMFOTph)Xct|(|ba_a6gxffGTV-L++Bf)Od{7Yg#MhYkXNzcaMU}W* zK}ay&k{iPgE(X*K;mi}a{`V+Y__pM%PlU6q2LxVu^n~`jeyevB%7>?D0eR|VVU6*4>4lITH(fvnSUZtJ0XKnR6}YNmaX z37*#~cE%XNwn9AZU&bJ+?m~#Tg3kdrbVqt_yVYLe=uPy63 zol)iVfQ$R`_cTU);1H0_(hyvTsm+IN!*Oe|`61R4Q2ouVW8!mARtGRs1S}Wy`N)_I zTnGx~2*zi-^FjLT+p7TzInZ&&RRC?Vdk&VEz+~2&!c?7qOaA4r zM2(}gs6p{%bcy#EeST#@fh90LeaWt*Yc*xc5WVPA(+X}vM(Fr z-v$LEtF63wQ~XfJKP$`2=oz$|_Ks?`6Jl=jTVb`pyvW9!tFfY?kV{Sx7D4FsTZQ9uYcbm&jP`ZQTkxW*hwU3OE#MMa zF13M3lb>0@gAE`VANS{$RHP$cinWrwsBgd?RO~3Ix|31fubZs}e0>LB zyTYF^|E_lWyGGcSv}@k5R<))ujsfvIcE;Qow_%9ea@+e6gqfuCQW|t;R1fl@JX%ZkvtEj-!0dQDJyT<1R2LY#Z#X(lQlV**P;00oTp}eq z(TUPn!G4nBj-$V5)oM286pF^w51h>Xh@`-}<;Ea^i6E2}T648O19@tc44g2_7!sC( zqA%&iQ$?$mLY=}9Z=x8#2lnvCoAbwXG!pt7jjy`Y;DM|O81G~7uK)RLfjj?WUW+1h z)96X+vRnIOvbM=b`*e~DZ5xb%h|1ZcxZPU8v-{$4Lk*ia4I%ZE2si@32SVhh=$`2W z726UxQ_l_Z4_Wf&`bs*asKhrg*yx+QduLL70K& z)jMi&PDc}OZ}`Xme0Ga0EuC+eR8>%Z`GZ%eoQA80J9yH1RfR7#B$`c^p@!Hd;3s4Q zVyQN)&2rqWyzUU4971o%&phYIu2RQRu-#XPqm90f#nPbHy8J{WpsB+0M{fvBX6~g1 zNH0~1*@VHyH}yg2>ex4tAV1TA8}opV@9dM%iQ1nrO=bZB)c{6mRU~sQsQJ!QWk#VC zHCd##{bwhkF&*uKL@Yz{p`7rryR#%=7&YUDMYJMKXF>#=`blx8|s=m4`tyZ1SHO~d3VwjYd~ z%s|?o&)G^Y+VK5T(x%|>7PW9S%SymQKl-(rNc|1Sgyb#rYKK-drBFvxQcT2#W6Clr z$rw_oO|N-@w|FMfAH5%~V8{e@PJ)3IeiN?XDP5jPWwn+6J6Wk~*)+g2 zi8I97gQO;Sid;~GK`D%g9PUg=$w<9wrA6MONDyof=O=G27nhi*nDf zu4sS_w-YKi@rDXLAq_1yJy6_jRiKt~e8~VFfieuVD^7cd`w;<`n&V}jONUJ=aYG&0 zieW=bgt{_Aur|uplA`-UyhkzzF&~66-V!iNdQv(tXNn@XB$ZF(v$c--K|CTc;g#mA z7F-8+L`3s@^B3R;D(bnNEIE%K_MC4fQNv_~(AkjIyqkd>FXUEmOGy+uIJ!{<@EL8{ zV|WUuU@jdR$5!bmyUHS)N+Z!Z#T|WLvUsyt!d45~1+J6&8BehGw<+W>5kIMB6 zx{#(PRD)7>TXO6DFtCQMaFYYYws4RXX-NZfT43QoSRDPTpxRI#z?QgfwRPF5_S{B| zuSw!D+E|Dz6^t>ad$pB-Y9`5J1~LEm>@cw%`S`%jNA0+2gNZW%S9vK)(?L4%G#oez z4-E-N>Ew7c%%K`>SoZs)7s|GCQs+Cbba0xU6;_3=*`!S^j$#neyDpTA?w5PXt<}{a z;rI%Xn5sm}E)E31o+)hX*lV9nOe-6aAansTpx15(Ji6+kWh8WI!%k*~CgwjhD;iD7 zYGO7eJZP*nk{4U;NBL)f{*-J}`XfC+$91%9LbI8%R%Z-yvQiwuUU!`L zJ_PC}i{||B2+g@*3*1POR~e9Kg4vNuXs6shnv9Nx7PFqbpWy-G2wQ`hP`TFd0k618 z`;#pF;NVkZYHcH!e6u0~HJS<_#JZm$Py~P52h@Eu-I4T$HZ#JeyO#kM=<`DgVG*xZ zU(y>y;F6U$>_gCo=ux-X5q9IW7Z&#CPj+AKB)>h~ag2?%QV6m~K&$F!!vV~79Pl30 zwV$CS*FioxHj&=3x_Uxq*wRo3M>zsEL37#Rp|D{?qqbby*bPY;rDDbF>QOzF7sV{= z2ZlaU2U7V4npX`Y-9~atlV?u>H>w^w5|5$+$4C@%hOka&yGiyjFQ&>~Ze^{p%Eq9G zKqZcbfzgJr94E!sL2~i*$x+tUH$LY^iV$2NilyX%%dal~Bq9*DEqR5uDNRBu*ld8Ia~! zPTn->=eYAjYTA9Vje5}l(3g*%?mq4a%R<->X2|`oUDQUwKR8USd>02Z(5F^{7Mxlss+2&wSTXNgI6dJRs&>w2uV9PCy^eve&p>vA5yiok*OejHr+hrd zlVu!s$Uue@<2>s@yPO)Pqr*(zX3q310!|>{L)j%dju%!H{j4Vy;>e+~X28OM4bfwj zYGPwVd4!6pvfj~b_`#U+1bAO)8j67ORMu7IaIP$AlH1Ql)@ZUx5;p@H<5_XUU^_Vj zQmHJCw+50Q?}xynO*`xi38+x!i!-^UQ06z&pXISmWB+WLJtiZ0(I69+-C=}bI2)qI zhOn~_A}Yo%1%`FM0zy~_@n(ckC7KQUIK;7mwRHI`lD$Z1^kFTYjLvG|0Uk&b+GZh8 z#Wl(nYC@R#nIE0;p??p%`Pve$$V;>7!B0y;ysE1r4PaidgmVD(#KxFcTH4oA5A~XN zU)w#@BILQ^%XQMZiMdG#lb!UuMnDp3-+X9foHJlgxCY2O#A2K2ftEa*RuI^-fSe?@ zqq-{Kaf%TLUYAZ~hCVSGx}J{yAL!OZ6)6h;!#V3NEs}I2Xi@mg3?@AQc-wGP}kg@HwxRHChEcKsF zKD7{+q8Tc-Nq%SWD6*`1=rpErI2%H?8lPizL#NqfA}uVHp(OSKg-kg)O2A9}PRjFW z@f0&gdPu#D4I=*Ma0t=F5?~cEYnf$NM7lcporm{)NcpZ1e=)>IJLYe8c8A&!TCoj1 zm+Q3QQE!2rj={l#Eiu;5_pJpi%8ZmjB0mMJ(vb5Y#JPy}5bPwJTL&@0#a*e<>Bev^ zdZrrOz0p-nezEhu4IQ@%Rtwa1&ew0PWPYc!ff9VLwz_QP5SKhxtu%4ZlMI&abhJdo zy*y8JjR2MRB%a5;CMpNfZffAFCz7du@2FNANmC7RO)e(8rTxCix$NPkq$1kKI<hUPUfDxe3d!~Gth zB6H@m8WX&|6uY-%mPFo;W#0&5UtDnHxr`;7OEQWUY}1QMeIe8lbSYlOF~|Eyt#-Th zIh@zNwiO^ux!J*ekDK%$Sq&xQxyrWim0=^#-bmf&p7uie1zRs-_FXT`3dz0O)s}Xc zauoCS(fNt3m^a21zFCvHw@n>RcsPaX-4u^3mX}!TShYopCPbgynuWtJQyoQngn6&2UQ&O}Q)_>db1Q|NS@lRq@_>Z4u|K*Ghf2dS4yat=HywZoO9O zxb<2UzpdA*x^2By)obgu%1&Fa&Gp%Ot%9%BYYVtqy;j|e>a`0vQN4C)*G$*qo|&$# z{P4rIZ{n5dn&*@WQdX|bcgb|E#7zvW&gyfSE125rYiM#Me89*@+gFN6biKgXslpA6 zNE3cwvHW} z&4VxN(uF8|5r-}YlaA92jwt0JLnn|&gpf-Xont{K8oFEsKN>o(si)kThE;%j)UZBi zQn{dG4G$RpN<3_M`Om$S#r$ocyN$57jp|JcHOome%{;g1VZIvH&N*$aG+_J{&PZaa*Yx|==n9@HHv3;7IR);uE5CF%<)#D>o0X!!jSVV z9hO)XR`6J2I_x_vaR*cQEMXn{@;*xx*eXs-bki^5wS@KU%Q!A^k!7TxbFZN>-zD)z zUEF=iyml?_!GsO{S8!mWpt~MSYzHP`|0Pn`zN`b2YaY7Jug&#c667M>0f{>h#s`T* zB^7*-xUd#?L&ECx+>n^=MqQBT-U>G()&^`*A0n)%EyW;g-P54o5c9Q~>kzXWvAu_w zbl-u9`4;mbqH_e@h*)2voiQNjU&`Ez zINY$ZhY_<&t>$FJV!kbtUS0S_Toxo_km#I4iy65^4`;*LTh6tk$ekO-JcE-g`9Qwsg7%dKBkX#E=U>b%wA-<%sOhcwZ$ zm-kFl0y^BGnCb?9U&dEWK&P{yvzl5MNOeCoE`Sv_?Z1hW8dKeu@ls>pIdkTVc&Z6N zoGzw@R=;`rW<4O^#2JlOt>=#>IDJ-}MdGV?rE#nH0&Zy>kYVN;bxu=)5d6(`Pcw&= zhkewP^5mGanhP*#?zpD3&Zq~QxdPAP&TQs_bo|=Hdso%DO%Q@>{HuN?PHv(tsqE_} z3Zb&Yn^Npm_k2?drm72^D3CdRaFW`*IpFdl_4{&eal-Jwv~QenEhPdV{>nY&%$+_J zo#upn=FElurJU!?tq6Y=J?T_}<+;X~TPn_1)o+dmo=WYS?~aF@x+q65Rl(xV_=Blj z1b^H?Oyz>}k)?iN=P{LwFFuacystUl%=u6CAusm?bT#Ju_b(swYRJ5#6QWBtw)|_w zZbbbTRnUAnj*Kp<1B(}|Mh2l__ilQ{WjfbmgBRxQiqIqw;eU>$Kc;t6vuG^yvx;qM@ta>f;-5uEjZjX1F%OfkJ@AF81 z<}_69^GIilx;zT%v7%m&tlUAzNAuuS-9DFkK8oa?=l-a4B35yMRHa_#2Pw)Kgae>x za|~;XIYtVwkU74Q9NH>#j#L@DmWQNLoX}4PLp`=EBQ*YMxfl@yxe0_U{DwInq&y*E4fY56>!f< z5}o4T3Z9b|_Lw9Adk&M(J;KUg5@A9BOUW1}`0k6x_m$@&yesjqcCzy){#Eq-FnmUcDHNrjV}R zi|ZS&MXqUa{cZg^UR1+0csv$U5Z`Teul4O_b6e!1KPu1N7Ry6_=rg6MJS#kpsf}KPdFIq* zK7W7)fAD+MZ8p30-DY!FJW2D z&(E99=YeX5@-vm8&pGrg*FEd5%M8@1P}kRFhC@g`Y>6!YfaibcEUOQPoq7(<&%0RQ zeOKVo&fLF9cWq#?4c$dTz{kh+tl7-)=|FZ4pO0GgUbET5$36kXr{8EO@o9&pnI};vJ`YZZowBQ*lg5pS4vP2$P)SWgssyXRsq;`-jyPPbs=_4AL=Y%?F$05!~noN-JQw#C&NstsH+~>{p z)(%ayJ+~*%fn)WlJ%aq5VJt+%B5LnHn6q<-<160O_DuKmv z8tmG)0*mDk>~D)fHAAvZa+3q~f|%v<1i<~P*IN98aG!k<9L!oB5;zdz-`KLGg%Ee4 z2)&wlxJNQWbd9tp-`|2uqaiKixh?hB?YOzktIzFELQCi`4k|I@qxzi|3P$*Rw^h1U zOM%z0sgYRl{EF83TCM2dSt;;WF7Q(Tei{Nk>;}8>g@(?wG1S@+tf(Mi4an46gv@|| z#MU8^0*Sv()V$gP80|G0kel?p-olO@)ANv?b)Kh~2l27q3Nd;%J5auK+X0RHYs<~! z$kyAG$Do~XV^&FeBA!d-qFI|4(?H?`BGMWo{sZ&tJE)q&~N2^9L+4H2i<0+@z7 z%`@oNJ3brg&?9*^8R74#gb@-Yp!j;FMukYx$de9_yfI$q+P5u+@GfIPg73>xn#Yh4W@!gGqU}D%f(kfwsW^hItx)9pLY%{ zr|(Amr!*rDxtz!m4ntt5rVv1zYwBjMah4zIO4D?uY3HE|)C7N}l_oz4T+*1!u^?zp zlcNH-wVOBNI+a!TP#$=Q$_+%ynD5GLK=irA`fWa&u?&2bxHhOV<)~lJkTsG8?~8%KuQs@Ud`$HoW7aT0aCU0--swVza4NQm6{`^OD985O6${hyfeRA3+tAV zQuVI>rq$aU2sG2ATCzP1 zt#BS9H1)Y`%Xy-9IUFMN6yRc-mEG36nlg?X(qTL&(abd6upn#uy5@;#0or3=_lTrJ z7-5=KwgonFQYm%2tAxE?P(yW_yAIb3b6|(tKBtYA(^UsMepf$*yXvf20WdVzI;_Q) zs@aTPq^fm8FR|2-DPki(YhXLGc&Wt%*@Qp%pNntm}!h-8Z$F9Gc(&VGcz+Y zUS}u!E3UUx{pV4xfQwOgt=2rU$uXeAujj{6AGj>;pR{V+-$D4qD(XBhn#i z7Fg{o8-GisR#cpDh{*G$$yQiQ&G`hyQ0;%oW(x=06I{$wqe1`8EJ4F+%4Ex`G@y1|mjgMILu5BOP*TzxO^>q9b6G?=9t@efxy@LybI6n$8__qVI0mXCI4NcogP zbGc78L!NcnT)=0CQIT=MS4avh(}!K5&0shfX;?xNA;pr!q;Mu6~2LEEHmM)z70D z3uYoGwaV~pQRj6fJ7dxzs$V=(QqSjnFCyOqp4Fpfu!XMaD#+t}K!S`jcxGW!+^YmT z{?Qlv^t4=O;_wusv%Nf;|gs13iwzv8WSOU zGd9$ecVeZhKLTY~VRj32TyMkHCMf-5+=b(;!l`WNNZkyxl?5Gd6e}KnXXl=Tt1s|7 z(^~VR$?yux!5^cHI385&LJwN1(^s2+Y zHAu?a4eLj;I*mY9uz09s_D_P0lJ`qPWSFNdYQ-bjnmiM&{U*W2DPXe?-mCCNOK^}A znJCGIDF<~DzOo^Mn;T^Jv0}+xLZ+)73mlE!Jgh%2n5ma!RA7H=^wjpDx3FLh<5|Jg z2^W5lof)uQ?9=)cZssqN<5(oIf``z;-Nxnxt}ktvogI-bji*Q8clOEFv6y

IG(O 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�TcFCpB|BB-j5T>bR@2_xpDGdRw~oWw9u=$bief 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

`3gFB9nM+&HL-Yk&*QzYnl%iG1!0+3%D7KXBe> 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

v%y~Sd_tf*WUG50y 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

AFU;+A#^2h2@5qLqq)PwbXu) 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%0D;_Wj9G~bk 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

-nQEic9rAs83ss5Mg@|k6W(-wE7hp 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˙UIqbftw|~kb_e$-9G4K+4Q@bh|&lPvE37# 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 { + return new __WEBPACK_IMPORTED_MODULE_1__shim_Promise__["a" /* default */]((resolve) => { this.handles.forEach((handle) => { handle && handle.destroy && handle.destroy(); }); @@ -140,19 +140,19 @@ class Destroyable { /***/ }), -/***/ "./node_modules/@dojo/core/Evented.mjs": +/***/ "./node_modules/@dojo/framework/core/Evented.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export isGlobMatch */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Destroyable__ = __webpack_require__("./node_modules/@dojo/core/Destroyable.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Destroyable__ = __webpack_require__("./node_modules/@dojo/framework/core/Destroyable.mjs"); /** * Map of computed regular expressions, keyed by string */ -const regexMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); +const regexMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); /** * Determines is the event type glob has been matched * @@ -183,12 +183,12 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /** * map of listeners keyed by event type */ - this.listenersMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this.listenersMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); } emit(event) { this.listenersMap.forEach((methods, type) => { if (isGlobMatch(type, event.type)) { - methods.forEach((method) => { + [...methods].forEach((method) => { method.call(this, event); }); } @@ -224,7 +224,7 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /***/ }), -/***/ "./node_modules/@dojo/core/lang.mjs": +/***/ "./node_modules/@dojo/framework/core/lang.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -238,8 +238,8 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /* unused harmony export partial */ /* unused harmony export createHandle */ /* harmony export (immutable) */ __webpack_exports__["b"] = createCompositeHandle; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__ = __webpack_require__("./node_modules/@dojo/shim/object.mjs"); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_object__ = __webpack_require__("./node_modules/@dojo/framework/shim/object.mjs"); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__shim_object__["a"]; }); const slice = Array.prototype.slice; @@ -317,7 +317,7 @@ function create(prototype, ...mixins) { } const args = mixins.slice(); args.unshift(Object.create(prototype)); - return __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__["a" /* assign */].apply(null, args); + return __WEBPACK_IMPORTED_MODULE_0__shim_object__["a" /* assign */].apply(null, args); } function deepAssign(target, ...sources) { return _mixin({ @@ -439,7 +439,7 @@ function createCompositeHandle(...handles) { /***/ }), -/***/ "./node_modules/@dojo/has/has.mjs": +/***/ "./node_modules/@dojo/framework/has/has.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -652,16 +652,16 @@ add('host-node', function () { /***/ }), -/***/ "./node_modules/@dojo/shim/Map.mjs": +/***/ "./node_modules/@dojo/framework/shim/Map.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Map; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__object__ = __webpack_require__("./node_modules/@dojo/shim/object.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__object__ = __webpack_require__("./node_modules/@dojo/framework/shim/object.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -761,15 +761,15 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Promise.mjs": +/***/ "./node_modules/@dojo/framework/shim/Promise.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export ShimPromise */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_queue__ = __webpack_require__("./node_modules/@dojo/shim/support/queue.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_queue__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/queue.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); @@ -974,15 +974,15 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Symbol.mjs": +/***/ "./node_modules/@dojo/framework/shim/Symbol.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export Symbol */ /* unused harmony export isSymbol */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -1131,15 +1131,15 @@ function isSymbol(value) { /***/ }), -/***/ "./node_modules/@dojo/shim/WeakMap.mjs": +/***/ "./node_modules/@dojo/framework/shim/WeakMap.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export WeakMap */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -1254,7 +1254,7 @@ if (false) { /***/ }), -/***/ "./node_modules/@dojo/shim/array.mjs": +/***/ "./node_modules/@dojo/framework/shim/array.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1265,11 +1265,11 @@ if (false) { /* unused harmony export find */ /* unused harmony export findIndex */ /* unused harmony export includes */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__number__ = __webpack_require__("./node_modules/@dojo/shim/number.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__number__ = __webpack_require__("./node_modules/@dojo/framework/shim/number.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -1521,7 +1521,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/global.mjs": +/***/ "./node_modules/@dojo/framework/shim/global.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1547,7 +1547,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/iterator.mjs": +/***/ "./node_modules/@dojo/framework/shim/iterator.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1555,8 +1555,8 @@ else { /* unused harmony export isArrayLike */ /* unused harmony export get */ /* unused harmony export forOf */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__string__ = __webpack_require__("./node_modules/@dojo/shim/string.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__string__ = __webpack_require__("./node_modules/@dojo/framework/shim/string.mjs"); const staticDone = { done: true, value: undefined }; @@ -1673,7 +1673,7 @@ function forOf(iterable, callback, thisArg) { /***/ }), -/***/ "./node_modules/@dojo/shim/number.mjs": +/***/ "./node_modules/@dojo/framework/shim/number.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1681,7 +1681,7 @@ function forOf(iterable, callback, thisArg) { /* unused harmony export isFinite */ /* unused harmony export isInteger */ /* unused harmony export isSafeInteger */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); /** * The smallest interval between two representable numbers. @@ -1745,7 +1745,7 @@ function isSafeInteger(value) { /***/ }), -/***/ "./node_modules/@dojo/shim/object.mjs": +/***/ "./node_modules/@dojo/framework/shim/object.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1758,9 +1758,9 @@ function isSafeInteger(value) { /* unused harmony export getOwnPropertyDescriptors */ /* unused harmony export entries */ /* unused harmony export values */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -1875,7 +1875,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/string.mjs": +/***/ "./node_modules/@dojo/framework/shim/string.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1889,9 +1889,9 @@ else { /* unused harmony export startsWith */ /* unused harmony export padEnd */ /* unused harmony export padStart */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -2200,33 +2200,33 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/support/has.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/has.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_has_has__ = __webpack_require__("./node_modules/@dojo/has/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__has_has__ = __webpack_require__("./node_modules/@dojo/framework/has/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); /* unused harmony reexport namespace */ -/* unused harmony default export */ var _unused_webpack_default_export = (__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["b" /* default */]); +/* unused harmony default export */ var _unused_webpack_default_export = (__WEBPACK_IMPORTED_MODULE_0__has_has__["b" /* default */]); /* ECMAScript 6 and 7 Features */ /* Array */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-array', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-array', () => { return (['from', 'of'].every((key) => key in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array) && ['findIndex', 'find', 'copyWithin'].every((key) => key in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype)); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-array-fill', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-array-fill', () => { if ('fill' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype) { /* Some versions of Safari do not properly implement this */ return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1; } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es7-array', () => 'includes' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es7-array', () => 'includes' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype, true); /* Map */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-map', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-map', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Map === 'function') { /* IE11 and older versions of Safari are missing critical ES6 Map functionality @@ -2249,7 +2249,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-map', () return false; }, true); /* Math */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-math', () => { return [ 'clz32', 'sign', @@ -2269,7 +2269,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math', ( 'hypot' ].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Math[name] === 'function'); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math-imul', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-math-imul', () => { if ('imul' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Math) { /* Some versions of Safari on ios do not properly implement this */ return Math.imul(0xffffffff, 5) === -5; @@ -2277,19 +2277,19 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math-imu return false; }, true); /* Object */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-object', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-object', () => { return true && ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Object[name] === 'function'); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es2017-object', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es2017-object', () => { return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Object[name] === 'function'); }, true); /* Observable */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es-observable', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Observable !== 'undefined', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es-observable', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Observable !== 'undefined', true); /* Promise */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-promise', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Promise !== 'undefined' && true, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-promise', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Promise !== 'undefined' && true, true); /* Set */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-set', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-set', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Set === 'function') { /* IE11 and older versions of Safari are missing critical ES6 Set functionality */ const set = new __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Set([1]); @@ -2298,7 +2298,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-set', () return false; }, true); /* String */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-string', () => { return ([ /* static methods */ 'fromCodePoint' @@ -2313,7 +2313,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string', 'includes' ].every((key) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].String.prototype[key] === 'function')); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string-raw', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-string-raw', () => { function getCallSite(callSite, ...substitutions) { const result = [...callSite]; result.raw = callSite.raw; @@ -2328,13 +2328,13 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string-r } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es2017-string', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es2017-string', () => { return ['padStart', 'padEnd'].every((key) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].String.prototype[key] === 'function'); }, true); /* Symbol */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-symbol', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Symbol !== 'undefined' && typeof Symbol() === 'symbol', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-symbol', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Symbol !== 'undefined' && typeof Symbol() === 'symbol', true); /* WeakMap */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-weakmap', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-weakmap', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].WeakMap !== 'undefined') { /* IE11 and older versions of Safari are missing critical ES6 Map functionality */ const key1 = {}; @@ -2346,16 +2346,16 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-weakmap' return false; }, true); /* Miscellaneous features */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('microtasks', () => true || false || true, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('postmessage', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('microtasks', () => true || false || true, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('postmessage', () => { // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist. return typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].window !== 'undefined' && typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].postMessage === 'function'; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('raf', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].requestAnimationFrame === 'function', true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('setimmediate', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].setImmediate !== 'undefined', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('raf', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].requestAnimationFrame === 'function', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('setimmediate', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].setImmediate !== 'undefined', true); /* DOM Features */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-mutationobserver', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('dom-mutationobserver', () => { if (true && Boolean(__WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].MutationObserver || __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].WebKitMutationObserver)) { // IE11 has an unreliable MutationObserver implementation where setProperty() does not // generate a mutation event, observers can crash, and the queue does not drain @@ -2371,18 +2371,18 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-mutation } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-webanimation', () => true && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Animation !== undefined && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].KeyframeEffect !== undefined, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('dom-webanimation', () => true && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Animation !== undefined && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].KeyframeEffect !== undefined, true); //# sourceMappingURL=has.mjs.map /***/ }), -/***/ "./node_modules/@dojo/shim/support/queue.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/queue.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export queueMicroTask */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); function executeTask(item) { @@ -2576,7 +2576,7 @@ let queueMicroTask = (function () { /***/ }), -/***/ "./node_modules/@dojo/shim/support/util.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/util.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -2608,13 +2608,13 @@ function wrapNative(nativeFunction) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/Injector.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/Injector.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); -class Injector extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* Evented */] { +class Injector extends __WEBPACK_IMPORTED_MODULE_0__core_Evented__["a" /* Evented */] { constructor(payload) { super(); this._payload = payload; @@ -2639,13 +2639,13 @@ class Injector extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* E /***/ }), -/***/ "./node_modules/@dojo/widget-core/NodeHandler.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export NodeEventType */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); /** @@ -2658,10 +2658,10 @@ var NodeEventType; NodeEventType["Projector"] = "Projector"; NodeEventType["Widget"] = "Widget"; })(NodeEventType || (NodeEventType = {})); -class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* Evented */] { +class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__core_Evented__["a" /* Evented */] { constructor() { super(...arguments); - this._nodeMap = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._nodeMap = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } get(key) { return this._nodeMap.get(key); @@ -2690,16 +2690,16 @@ class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" / /***/ }), -/***/ "./node_modules/@dojo/widget-core/Registry.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/Registry.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["d"] = isWidgetBaseConstructor; /* unused harmony export isWidgetConstructorDefaultExport */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__ = __webpack_require__("./node_modules/@dojo/shim/Promise.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Promise__ = __webpack_require__("./node_modules/@dojo/framework/shim/Promise.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); @@ -2707,7 +2707,7 @@ class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" / /** * Widget base symbol type */ -const WIDGET_BASE_TYPE = Object(__WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__["a" /* default */])('Widget Base'); +const WIDGET_BASE_TYPE = Object(__WEBPACK_IMPORTED_MODULE_2__shim_Symbol__["a" /* default */])('Widget Base'); /* harmony export (immutable) */ __webpack_exports__["b"] = WIDGET_BASE_TYPE; /** @@ -2728,7 +2728,7 @@ function isWidgetConstructorDefaultExport(item) { /** * The Registry implementation */ -class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* Evented */] { +class Registry extends __WEBPACK_IMPORTED_MODULE_3__core_Evented__["a" /* Evented */] { /** * Emit loaded event for registry label */ @@ -2741,13 +2741,13 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E } define(label, item) { if (this._widgetRegistry === undefined) { - this._widgetRegistry = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._widgetRegistry = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } if (this._widgetRegistry.has(label)) { throw new Error(`widget has already been registered for '${label.toString()}'`); } this._widgetRegistry.set(label, item); - if (item instanceof __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__["a" /* default */]) { + if (item instanceof __WEBPACK_IMPORTED_MODULE_0__shim_Promise__["a" /* default */]) { item.then((widgetCtor) => { this._widgetRegistry.set(label, widgetCtor); this.emitLoadedEvent(label, widgetCtor); @@ -2762,12 +2762,12 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E } defineInjector(label, injectorFactory) { if (this._injectorRegistry === undefined) { - this._injectorRegistry = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._injectorRegistry = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } if (this._injectorRegistry.has(label)) { throw new Error(`injector has already been registered for '${label.toString()}'`); } - const invalidator = new __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* Evented */](); + const invalidator = new __WEBPACK_IMPORTED_MODULE_3__core_Evented__["a" /* Evented */](); const injectorItem = { injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })), invalidator @@ -2783,7 +2783,7 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E if (isWidgetBaseConstructor(item)) { return item; } - if (item instanceof __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__["a" /* default */]) { + if (item instanceof __WEBPACK_IMPORTED_MODULE_0__shim_Promise__["a" /* default */]) { return null; } const promise = item(); @@ -2820,22 +2820,22 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E /***/ }), -/***/ "./node_modules/@dojo/widget-core/RegistryHandler.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); -class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__["a" /* Evented */] { +class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__core_Evented__["a" /* Evented */] { constructor() { super(); this._registry = new __WEBPACK_IMPORTED_MODULE_2__Registry__["a" /* Registry */](); - this._registryWidgetLabelMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["a" /* Map */](); - this._registryInjectorLabelMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["a" /* Map */](); + this._registryWidgetLabelMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["a" /* Map */](); + this._registryInjectorLabelMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["a" /* Map */](); this.own(this._registry); const destroy = () => { if (this.baseRegistry) { @@ -2904,19 +2904,19 @@ class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__[" /***/ }), -/***/ "./node_modules/@dojo/widget-core/WidgetBase.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__diff__ = __webpack_require__("./node_modules/@dojo/widget-core/diff.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__RegistryHandler__ = __webpack_require__("./node_modules/@dojo/widget-core/RegistryHandler.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__NodeHandler__ = __webpack_require__("./node_modules/@dojo/widget-core/NodeHandler.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__vdom__ = __webpack_require__("./node_modules/@dojo/widget-core/vdom.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__RegistryHandler__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__NodeHandler__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/NodeHandler.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__vdom__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); @@ -2926,9 +2926,9 @@ class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__[" -const decoratorMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); +const decoratorMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); const boundAuto = __WEBPACK_IMPORTED_MODULE_4__diff__["a" /* auto */].bind(null); -const noBind = __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__["a" /* default */].for('dojoNoBind'); +const noBind = __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__["a" /* default */].for('dojoNoBind'); /* harmony export (immutable) */ __webpack_exports__["b"] = noBind; /** @@ -2950,7 +2950,7 @@ class WidgetBase { this._nodeHandler = new __WEBPACK_IMPORTED_MODULE_6__NodeHandler__["a" /* default */](); this._handles = []; this._children = []; - this._decoratorCache = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this._decoratorCache = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); this._properties = {}; this._boundRenderFunc = this.render.bind(this); this._boundInvalidate = this.invalidate.bind(this); @@ -2975,7 +2975,7 @@ class WidgetBase { } meta(MetaType) { if (this._metaMap === undefined) { - this._metaMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this._metaMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); } let cached = this._metaMap.get(MetaType); if (!cached) { @@ -3059,9 +3059,14 @@ class WidgetBase { } } if (runReactions) { - this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => { - if (args.changed) { - reaction.call(this, args.previousProperties, args.newProperties); + const reactionFunctions = this.getDecorator('diffReaction'); + const executedReactions = []; + reactionFunctions.forEach(({ reaction, propertyName }) => { + const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1; + const reactionRun = executedReactions.indexOf(reaction) !== -1; + if (propertyChanged && !reactionRun) { + reaction.call(this, this._properties, diffPropertyResults); + executedReactions.push(reaction); } }); } @@ -3124,7 +3129,7 @@ class WidgetBase { if (this.hasOwnProperty('constructor')) { let decoratorList = decoratorMap.get(this.constructor); if (!decoratorList) { - decoratorList = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + decoratorList = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); decoratorMap.set(this.constructor, decoratorList); } let specificDecoratorList = decoratorList.get(decoratorKey); @@ -3176,26 +3181,6 @@ class WidgetBase { this._decoratorCache.set(decoratorKey, allDecorators); return allDecorators; } - _mapDiffPropertyReactions(newProperties, changedPropertyKeys) { - const reactionFunctions = this.getDecorator('diffReaction'); - return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => { - let reactionArguments = reactionPropertyMap.get(reaction); - if (reactionArguments === undefined) { - reactionArguments = { - previousProperties: {}, - newProperties: {}, - changed: false - }; - } - reactionArguments.previousProperties[propertyName] = this._properties[propertyName]; - reactionArguments.newProperties[propertyName] = newProperties[propertyName]; - if (changedPropertyKeys.indexOf(propertyName) !== -1) { - reactionArguments.changed = true; - } - reactionPropertyMap.set(reaction, reactionArguments); - return reactionPropertyMap; - }, new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */]()); - } /** * Binds unbound property functions to the specified `bind` property * @@ -3204,7 +3189,7 @@ class WidgetBase { _bindFunctionProperty(property, bind) { if (typeof property === 'function' && !property[noBind] && Object(__WEBPACK_IMPORTED_MODULE_8__Registry__["d" /* isWidgetBaseConstructor */])(property) === false) { if (this._bindFunctionPropertyMap === undefined) { - this._bindFunctionPropertyMap = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__["a" /* default */](); + this._bindFunctionPropertyMap = new __WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__["a" /* default */](); } const bindInfo = this._bindFunctionPropertyMap.get(property) || {}; let { boundFunc, scope } = bindInfo; @@ -3258,7 +3243,7 @@ class WidgetBase { runAfterRenders(dNode) { const afterRenders = this.getDecorator('afterRender'); if (afterRenders.length > 0) { - return afterRenders.reduce((dNode, afterRenderFunction) => { + dNode = afterRenders.reduce((dNode, afterRenderFunction) => { return afterRenderFunction.call(this, dNode); }, dNode); } @@ -3298,7 +3283,7 @@ WidgetBase._type = __WEBPACK_IMPORTED_MODULE_8__Registry__["b" /* WIDGET_BASE_TY /***/ }), -/***/ "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3368,7 +3353,7 @@ function enter(node, properties, enterAnimation) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/d.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/d.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3380,24 +3365,24 @@ function enter(node, properties, enterAnimation) { /* harmony export (immutable) */ __webpack_exports__["h"] = w; /* harmony export (immutable) */ __webpack_exports__["g"] = v; /* harmony export (immutable) */ __webpack_exports__["c"] = dom; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); /** * The symbol identifier for a WNode type */ -const WNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a WNode.'); +const WNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a WNode.'); /* harmony export (immutable) */ __webpack_exports__["b"] = WNODE; /** * The symbol identifier for a VNode type */ -const VNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a VNode.'); +const VNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a VNode.'); /* harmony export (immutable) */ __webpack_exports__["a"] = VNODE; /** * The symbol identifier for a VNode type created using dom() */ -const DOMVNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a VNode created using existing dom.'); +const DOMVNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a VNode created using existing dom.'); /* unused harmony export DOMVNODE */ /** @@ -3499,12 +3484,12 @@ function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, child /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/afterRender.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = afterRender; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); function afterRender(method) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { @@ -3516,13 +3501,13 @@ function afterRender(method) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = alwaysRender; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__beforeProperties__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__beforeProperties__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs"); function alwaysRender() { @@ -3537,12 +3522,12 @@ function alwaysRender() { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = beforeProperties; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); function beforeProperties(method) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { @@ -3554,13 +3539,13 @@ function beforeProperties(method) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/customElement.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = customElement; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__registerCustomElement__ = __webpack_require__("./node_modules/@dojo/widget-core/registerCustomElement.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__registerCustomElement__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); /** @@ -3584,12 +3569,14 @@ function customElement({ tag, properties = [], attributes = [], events = [], chi /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = diffProperty; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); + /** * Decorator that can be used to register a function as a specific property diff @@ -3598,7 +3585,7 @@ function customElement({ tag, properties = [], attributes = [], events = [], chi * @param diffType The diff type, default is DiffType.AUTO. * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM */ -function diffProperty(propertyName, diffFunction, reactionFunction) { +function diffProperty(propertyName, diffFunction = __WEBPACK_IMPORTED_MODULE_1__diff__["a" /* auto */], reactionFunction) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null)); target.addDecorator('registeredDiffProperty', propertyName); @@ -3615,7 +3602,7 @@ function diffProperty(propertyName, diffFunction, reactionFunction) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3641,21 +3628,21 @@ function handleDecorator(handler) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/inject.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = inject; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__beforeProperties__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__beforeProperties__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs"); /** * Map of instances against registered injectors. */ -const registeredInjectorsMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__["a" /* default */](); +const registeredInjectorsMap = new __WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__["a" /* default */](); /** * Decorator retrieves an injector from an available registry using the name and * calls the `getProperties` function with the payload from the injector @@ -3689,7 +3676,7 @@ function inject({ name, getProperties }) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/diff.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/diff.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3698,7 +3685,7 @@ function inject({ name, getProperties }) { /* unused harmony export reference */ /* harmony export (immutable) */ __webpack_exports__["b"] = shallow; /* harmony export (immutable) */ __webpack_exports__["a"] = auto; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); function isObjectOrArray(value) { return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value); @@ -3768,7 +3755,7 @@ function auto(previousProperty, newProperty) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Projector.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3776,11 +3763,11 @@ function auto(previousProperty, newProperty) { /* unused harmony export AttachType */ /* harmony export (immutable) */ __webpack_exports__["a"] = ProjectorMixin; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__ = __webpack_require__("./node_modules/@dojo/core/lang.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__ = __webpack_require__("./node_modules/@dojo/widget-core/animations/cssTransitions.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/afterRender.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__vdom__ = __webpack_require__("./node_modules/@dojo/widget-core/vdom.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_lang__ = __webpack_require__("./node_modules/@dojo/framework/core/lang.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__vdom__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.mjs"); @@ -3878,7 +3865,7 @@ function ProjectorMixin(Base) { this._projectorProperties.registry.destroy(); } } - this._projectorProperties = Object(__WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__["a" /* assign */])({}, properties); + this._projectorProperties = Object(__WEBPACK_IMPORTED_MODULE_1__core_lang__["a" /* assign */])({}, properties); super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry }); super.__setProperties__(properties); } @@ -3929,10 +3916,7 @@ function ProjectorMixin(Base) { } } __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ - Object(__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__["a" /* afterRender */])(), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:type", Function), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:paramtypes", [Object]), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:returntype", void 0) + Object(__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__["a" /* afterRender */])() ], Projector.prototype, "afterRender", null); return Projector; } @@ -3941,7 +3925,7 @@ function ProjectorMixin(Base) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Themed.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3949,11 +3933,11 @@ function ProjectorMixin(Base) { /* harmony export (immutable) */ __webpack_exports__["b"] = registerThemeInjector; /* harmony export (immutable) */ __webpack_exports__["a"] = ThemedMixin; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Injector__ = __webpack_require__("./node_modules/@dojo/widget-core/Injector.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__decorators_inject__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/inject.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/diffProperty.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__diff__ = __webpack_require__("./node_modules/@dojo/widget-core/diff.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Injector__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Injector.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__decorators_inject__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/inject.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); @@ -4066,7 +4050,7 @@ function ThemedMixin(Base) { const baseThemes = this.getDecorator('baseThemeClasses'); if (!this._registeredBaseTheme) { this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => { - const _a = THEME_KEY, key = baseTheme[_a], classes = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __rest */](baseTheme, [typeof _a === "symbol" ? _a : _a + ""]); + const _a = THEME_KEY, key = baseTheme[_a], classes = __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __rest */](baseTheme, [typeof _a === "symbol" ? _a : _a + ""]); this._registeredBaseThemeKeys.push(key); return Object.assign({}, finalBaseTheme, classes); }, {}); @@ -4080,10 +4064,7 @@ function ThemedMixin(Base) { }; __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('theme', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]), - Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('extraClasses', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:type", Function), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:paramtypes", []), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:returntype", void 0) + Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('extraClasses', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]) ], Themed.prototype, "onPropertiesChanged", null); Themed = __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ Object(__WEBPACK_IMPORTED_MODULE_2__decorators_inject__["a" /* inject */])({ @@ -4103,7 +4084,7 @@ function ThemedMixin(Base) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/registerCustomElement.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -4113,13 +4094,13 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony export (immutable) */ __webpack_exports__["create"] = create; /* harmony export (immutable) */ __webpack_exports__["register"] = register; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__WidgetBase__ = __webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__mixins_Projector__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Projector.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__ = __webpack_require__("./node_modules/@dojo/shim/array.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__mixins_Themed__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__WidgetBase__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__mixins_Projector__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__shim_array__ = __webpack_require__("./node_modules/@dojo/framework/shim/array.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__shim_global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__mixins_Themed__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs"); @@ -4216,7 +4197,7 @@ function create(descriptor, WidgetConstructor) { }); Object.defineProperties(this, domProperties); const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children; - Object(__WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__["a" /* from */])(children).forEach((childNode) => { + Object(__WEBPACK_IMPORTED_MODULE_3__shim_array__["a" /* from */])(children).forEach((childNode) => { if (childType === CustomElementChildType.DOJO) { childNode.addEventListener('dojo-ce-render', () => this._render()); childNode.addEventListener('dojo-ce-connected', () => this._render()); @@ -4236,7 +4217,7 @@ function create(descriptor, WidgetConstructor) { }; const registry = registryFactory(); const themeContext = Object(__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__["b" /* registerThemeInjector */])(this._getTheme(), registry); - __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme())); + __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme())); const Projector = Object(__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__["a" /* ProjectorMixin */])(Wrapper); this._projector = new Projector(); this._projector.setProperties({ registry }); @@ -4248,8 +4229,8 @@ function create(descriptor, WidgetConstructor) { })); } _getTheme() { - if (__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */] && __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce && __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.theme) { - return __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.themes[__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.theme]; + if (__WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */] && __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce && __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.theme) { + return __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.themes[__WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.theme]; } } _childConnected(e) { @@ -4329,25 +4310,25 @@ function register(WidgetConstructor) { if (!descriptor) { throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?'); } - __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor)); + __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor)); } /* harmony default export */ __webpack_exports__["default"] = (register); //# sourceMappingURL=registerCustomElement.mjs.map /***/ }), -/***/ "./node_modules/@dojo/widget-core/vdom.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/vdom.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export toParentVNode */ /* unused harmony export toTextVNode */ /* unused harmony export filterAndDecorateChildren */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__ = __webpack_require__("./node_modules/@dojo/shim/array.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_array__ = __webpack_require__("./node_modules/@dojo/framework/shim/array.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); @@ -4357,11 +4338,13 @@ const NAMESPACE_W3 = 'http://www.w3.org/'; const NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg'; const NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink'; const emptyArray = []; -const widgetInstanceMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); +const nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click']; +const widgetInstanceMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); /* harmony export (immutable) */ __webpack_exports__["b"] = widgetInstanceMap; -const instanceMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); -const projectorStateMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); +const instanceMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); +const nextSiblingMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); +const projectorStateMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); function same(dnode1, dnode2) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(dnode1) && Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(dnode2)) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["d" /* isDomVNode */])(dnode1) || Object(__WEBPACK_IMPORTED_MODULE_2__d__["d" /* isDomVNode */])(dnode2)) { @@ -4418,7 +4401,7 @@ function checkStyleValue(styleValue) { } function updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) { const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); - const eventMap = projectorState.nodeMap.get(domNode) || new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); + const eventMap = projectorState.nodeMap.get(domNode) || new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); if (previousValue) { const previousEvent = eventMap.get(previousValue); domNode.removeEventListener(eventName, previousEvent); @@ -4478,7 +4461,7 @@ function buildPreviousProperties(domNode, previous, current) { }, {}); return newProperties; } -function focusNode(propValue, previousValue, domNode, projectionOptions) { +function nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) { let result; if (typeof propValue === 'function') { result = propValue(); @@ -4489,7 +4472,7 @@ function focusNode(propValue, previousValue, domNode, projectionOptions) { if (result === true) { const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); projectorState.deferredRenderCallbacks.push(() => { - domNode.focus(); + domNode[propName](); }); } } @@ -4585,8 +4568,8 @@ function updateProperties(domNode, previousProperties, properties, projectionOpt } } } - else if (propName === 'focus') { - focusNode(propValue, previousValue, domNode, projectionOptions); + else if (nodeOperations.indexOf(propName) !== -1) { + nodeOperation(propName, propValue, previousValue, domNode, projectionOptions); } else if (propName === 'styles') { const styleNames = Object.keys(propValue); @@ -4740,7 +4723,8 @@ function nodeAdded(dnode, transitions) { } function nodeToRemove(dnode, transitions, projectionOptions) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { - const rendered = dnode.rendered || emptyArray; + const item = instanceMap.get(dnode.instance); + const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray; if (dnode.instance) { const instanceData = widgetInstanceMap.get(dnode.instance); instanceData.onDetach(); @@ -4804,7 +4788,7 @@ function checkDistinguishable(childNodes, indexToCheck, parentInstance) { } } } -function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) { +function updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) { oldChildren = oldChildren || emptyArray; newChildren = newChildren; const oldChildrenLength = oldChildren.length; @@ -4824,38 +4808,49 @@ function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, p addDeferredProperties(newChild, projectionOptions); } if (oldChild !== undefined && same(oldChild, newChild)) { - textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated; oldIndex++; newIndex++; + textUpdated = + updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated; continue; } const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1); const addChild = () => { let insertBeforeDomNode = undefined; + let childrenArray = oldChildren; + let nextIndex = oldIndex + 1; let child = oldChildren[oldIndex]; + if (!child) { + child = siblings[0]; + nextIndex = 1; + childrenArray = siblings; + } if (child) { - let nextIndex = oldIndex + 1; let insertBeforeChildren = [child]; while (insertBeforeChildren.length) { const insertBefore = insertBeforeChildren.shift(); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(insertBefore)) { - if (insertBefore.rendered) { - insertBeforeChildren.push(...insertBefore.rendered); + const item = instanceMap.get(insertBefore.instance); + if (item && item.dnode.rendered) { + insertBeforeChildren.push(...item.dnode.rendered); } } else { if (insertBefore.domNode) { + if (insertBefore.domNode.parentElement !== parentVNode.domNode) { + break; + } insertBeforeDomNode = insertBefore.domNode; break; } } - if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) { - insertBeforeChildren.push(oldChildren[nextIndex]); + if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) { + insertBeforeChildren.push(childrenArray[nextIndex]); nextIndex++; } } } - createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance); + createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance); nodeAdded(newChild, transitions); const indexToCheck = newIndex; projectorState.afterRenderCallbacks.push(() => { @@ -4916,12 +4911,13 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i } const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); if (projectorState.merge && childNodes === undefined) { - childNodes = Object(__WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__["a" /* from */])(parentVNode.domNode.childNodes); + childNodes = Object(__WEBPACK_IMPORTED_MODULE_1__shim_array__["a" /* from */])(parentVNode.domNode.childNodes); } const transitions = projectionOptions.transitions; projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 }); for (let i = 0; i < children.length; i++) { const child = children[i]; + const nextSiblings = children.slice(i + 1); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(child)) { if (projectorState.merge && childNodes) { let domElement = undefined; @@ -4932,10 +4928,10 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i } } } - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance); } else { - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes); } nodeAdded(child, transitions); } @@ -4963,7 +4959,7 @@ function initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOpt } dnode.inserted = true; } -function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) { +function createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) { let domNode; const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { @@ -4978,6 +4974,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } const instance = new widgetConstructor(); dnode.instance = instance; + nextSiblingMap.set(instance, nextSiblings); const instanceData = widgetInstanceMap.get(instance); instanceData.invalidate = () => { instanceData.dirty = true; @@ -5058,7 +5055,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } } } -function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) { +function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { const { instance } = previous; const { parentVNode, dnode: node } = instanceMap.get(instance); @@ -5068,12 +5065,13 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan instance.__setCoreProperties__(dnode.coreProperties); instance.__setChildren__(dnode.children); instance.__setProperties__(dnode.properties); + nextSiblingMap.set(instance, nextSiblings); dnode.instance = instance; if (instanceData.dirty === true) { const rendered = instance.__render__(); instanceData.rendering = false; dnode.rendered = filterAndDecorateChildren(rendered, instance); - updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions); + updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions); } else { instanceData.rendering = false; @@ -5106,7 +5104,7 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan const children = filterAndDecorateChildren(dnode.children, parentInstance); dnode.children = children; updated = - updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated; + updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated; } const previousProperties = buildPreviousProperties(domNode, previous, dnode); if (dnode.attributes && dnode.events) { @@ -5156,7 +5154,7 @@ function runDeferredRenderCallbacks(projectionOptions) { } } else { - __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestAnimationFrame(() => { + __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestAnimationFrame(() => { while (projectorState.deferredRenderCallbacks.length) { const callback = projectorState.deferredRenderCallbacks.shift(); callback && callback(); @@ -5174,8 +5172,8 @@ function runAfterRenderCallbacks(projectionOptions) { } } else { - if (__WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestIdleCallback) { - __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestIdleCallback(() => { + if (__WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestIdleCallback) { + __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestIdleCallback(() => { while (projectorState.afterRenderCallbacks.length) { const callback = projectorState.afterRenderCallbacks.shift(); callback && callback(); @@ -5198,7 +5196,7 @@ function scheduleRender(projectionOptions) { render(projectionOptions); } else if (projectorState.renderScheduled === undefined) { - projectorState.renderScheduled = __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestAnimationFrame(() => { + projectorState.renderScheduled = __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestAnimationFrame(() => { render(projectionOptions); }); } @@ -5217,7 +5215,8 @@ function render(projectionOptions) { previouslyRendered.push(instance); const { parentVNode, dnode } = instanceMap.get(instance); const instanceData = widgetInstanceMap.get(instance); - updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance); + const nextSiblings = nextSiblingMap.get(instance); + updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings); } } runAfterRenderCallbacks(projectionOptions); @@ -5230,7 +5229,7 @@ const dom = { const projectorState = { afterRenderCallbacks: [], deferredRenderCallbacks: [], - nodeMap: new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](), + nodeMap: new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](), renderScheduled: undefined, renderQueue: [], merge: projectionOptions.merge || false, @@ -5248,7 +5247,7 @@ const dom = { scheduleRender(finalProjectorOptions); } }; - updateDom(node, node, finalProjectorOptions, parentVNode, instance); + updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []); projectorState.afterRenderCallbacks.push(() => { instanceData.onAttach(); }); @@ -5282,7 +5281,7 @@ const dom = { /*** IMPORTS FROM imports-loader ***/ var widgetFactory = __webpack_require__("./src/menu-item/MenuItem.ts"); -var registerCustomElement = __webpack_require__("./node_modules/@dojo/widget-core/registerCustomElement.mjs").default; +var registerCustomElement = __webpack_require__("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs").default; var defaultExport = widgetFactory.default; defaultExport && registerCustomElement(defaultExport); @@ -5488,10 +5487,10 @@ process.umask = function() { return 0; }; "use strict"; /* unused harmony export __extends */ /* unused harmony export __assign */ -/* harmony export (immutable) */ __webpack_exports__["c"] = __rest; +/* harmony export (immutable) */ __webpack_exports__["b"] = __rest; /* harmony export (immutable) */ __webpack_exports__["a"] = __decorate; /* unused harmony export __param */ -/* harmony export (immutable) */ __webpack_exports__["b"] = __metadata; +/* unused harmony export __metadata */ /* unused harmony export __awaiter */ /* unused harmony export __generator */ /* unused harmony export __exportStar */ @@ -5708,10 +5707,10 @@ module.exports = g; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MenuItem", function() { return MenuItem; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/customElement.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__ = __webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__ = __webpack_require__("./src/menu-item/menuItem.m.css"); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__menuItem_m_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__); @@ -5720,14 +5719,14 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -let MenuItem = class MenuItem extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__["a" /* ThemedMixin */])(__WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__["a" /* WidgetBase */]) { +let MenuItem = class MenuItem extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__["a" /* ThemedMixin */])(__WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__["a" /* WidgetBase */]) { _onClick() { this.properties.onSelected && this.properties.onSelected(this.properties.data); } render() { const { title, selected } = this.properties; - return Object(__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__["g" /* v */])('li', { classes: this.theme(__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__["root"]) }, [ - Object(__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__["g" /* v */])('span', { + return Object(__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__["g" /* v */])('li', { classes: this.theme(__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__["root"]) }, [ + Object(__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__["g" /* v */])('span', { classes: this.theme([__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__["item"], selected ? __WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__["selected"] : null]), onclick: this._onClick }, [title]) @@ -5735,13 +5734,13 @@ let MenuItem = class MenuItem extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_w } }; MenuItem = __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ - Object(__WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__["a" /* customElement */])({ + Object(__WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__["a" /* customElement */])({ tag: 'demo-menu-item', attributes: ['title', 'selected'], events: ['onSelected'], properties: ['data', 'selected'] }), - Object(__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__["c" /* theme */])(__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__) + Object(__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__["c" /* theme */])(__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__) ], MenuItem); /* harmony default export */ __webpack_exports__["default"] = (MenuItem); @@ -5766,4 +5765,4 @@ module.exports = __webpack_require__("./node_modules/imports-loader/index.js?wid /***/ }) /******/ }));; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgOWRjNTQxZGRkOTk2ODFhYWZhN2MiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRGVzdHJveWFibGUubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0V2ZW50ZWQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL2xhbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9oYXMvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9NYXAubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1Byb21pc2UubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1N5bWJvbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vV2Vha01hcC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vYXJyYXkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2dsb2JhbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vaXRlcmF0b3IubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL251bWJlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vb2JqZWN0Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdHJpbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N1cHBvcnQvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3F1ZXVlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3V0aWwubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9JbmplY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL05vZGVIYW5kbGVyLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvUmVnaXN0cnkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9XaWRnZXRCYXNlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hbHdheXNSZW5kZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2JlZm9yZVByb3BlcnRpZXMubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9pbmplY3QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kaWZmLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS92ZG9tLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS1pdGVtL01lbnVJdGVtLnRzIiwid2VicGFjazovLy8uL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3M/NmE5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7QUM3RGdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSx3Qzs7Ozs7Ozs7Ozs7QUN2REE7QUFDc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0NBQWdDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2RWlCO0FBQ0E7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsaUM7Ozs7Ozs7Ozs7OztBQ25NQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8saUJBQWlCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkUsUUFBUTtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnQzs7Ozs7Ozs7Ozs7Ozs7O0FDbk1vQztBQUNwQztBQUN5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLHFCQUFxQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxZQUFZO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFlBQVk7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0M7Ozs7Ozs7Ozs7Ozs7QUMvRkE7QUFDeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsV0FBVztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7O0FDdE1BO0FBQ0E7QUFDNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxtQzs7Ozs7Ozs7Ozs7OztBQ2hKQTtBQUNzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxxQkFBcUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGdDQUFnQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNrQztBQUNQO0FBQzNCO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3RELG9EQUFvRDtBQUNwRCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFlBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVM7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0M7Ozs7Ozs7O0FDdlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLG1DOzs7Ozs7Ozs7Ozs7Ozs7QUNqQkE7QUFDaUQ7QUFDakQsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDOzs7Ozs7Ozs7Ozs7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREE7QUFDQTtBQUNtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNBO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFlBQVk7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0Y7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DOzs7Ozs7Ozs7OztBQ3hTbUI7QUFDbkI7MEVBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsRUFBRTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxFQUFFO0FBQ2pFLG1DQUFtQyxtQkFBbUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxnQzs7Ozs7Ozs7Ozs7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Qzs7Ozs7Ozs7QUNyWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELGNBQWM7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSw4REFBOEQsZUFBZTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxpQkFBaUIsS0FBSztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMkJBQTJCO0FBQ3REO0FBQ0E7QUFD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RUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLHlEQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvRCxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDdEIsRUFDRCxDQUFDLEtBQUssQ0FBQyxDQUNQO1NBQ0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNEO0FBbkJZLFFBQVE7SUFQcEIseUdBQWEsQ0FBcUI7UUFDbEMsR0FBRyxFQUFFLGdCQUFnQjtRQUNyQixVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO1FBQ2pDLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQztRQUN0QixVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDO0tBQ2hDLENBQUM7SUFDRCxzRkFBSyxDQUFDLDZDQUFHLENBQUM7R0FDRSxRQUFRLENBbUJwQjtBQW5Cb0I7QUFxQnJCLCtEQUFlLFFBQVEsRUFBQzs7Ozs7Ozs7QUMzQ3hCO0FBQ0Esa0JBQWtCLHdJIiwiZmlsZSI6Im1lbnUtaXRlbS0xLjAuMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDlkYzU0MWRkZDk5NjgxYWFmYTdjIiwiaW1wb3J0IHsgY3JlYXRlQ29tcG9zaXRlSGFuZGxlIH0gZnJvbSAnLi9sYW5nJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ0Bkb2pvL3NoaW0vUHJvbWlzZSc7XG4vKipcbiAqIE5vIG9wZXJhdGlvbiBmdW5jdGlvbiB0byByZXBsYWNlIG93biBvbmNlIGluc3RhbmNlIGlzIGRlc3RvcnllZFxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xufVxuLyoqXG4gKiBObyBvcCBmdW5jdGlvbiB1c2VkIHRvIHJlcGxhY2Ugb3duLCBvbmNlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3RvcnllZFxuICovXG5mdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIG1hZGUgdG8gZGVzdHJveWVkIG1ldGhvZCcpO1xufVxuZXhwb3J0IGNsYXNzIERlc3Ryb3lhYmxlIHtcbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVzID0gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGhhbmRsZXMgZm9yIHRoZSBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gYHRoaXMuZGVzdHJveWAgaXMgY2FsbGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0hhbmRsZX0gaGFuZGxlIFRoZSBoYW5kbGUgdG8gYWRkIGZvciB0aGUgaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyB7SGFuZGxlfSBhIGhhbmRsZSBmb3IgdGhlIGhhbmRsZSwgcmVtb3ZlcyB0aGUgaGFuZGxlIGZvciB0aGUgaW5zdGFuY2UgYW5kIGNhbGxzIGRlc3Ryb3lcbiAgICAgKi9cbiAgICBvd24oaGFuZGxlcykge1xuICAgICAgICBjb25zdCBoYW5kbGUgPSBBcnJheS5pc0FycmF5KGhhbmRsZXMpID8gY3JlYXRlQ29tcG9zaXRlSGFuZGxlKC4uLmhhbmRsZXMpIDogaGFuZGxlcztcbiAgICAgICAgY29uc3QgeyBoYW5kbGVzOiBfaGFuZGxlcyB9ID0gdGhpcztcbiAgICAgICAgX2hhbmRsZXMucHVzaChoYW5kbGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICBfaGFuZGxlcy5zcGxpY2UoX2hhbmRsZXMuaW5kZXhPZihoYW5kbGUpKTtcbiAgICAgICAgICAgICAgICBoYW5kbGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXN0cnB5cyBhbGwgaGFuZGVycyByZWdpc3RlcmVkIGZvciB0aGUgaW5zdGFuY2VcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPGFueX0gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSBhbGwgaGFuZGxlcyBoYXZlIGJlZW4gZGVzdHJveWVkXG4gICAgICovXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlICYmIGhhbmRsZS5kZXN0cm95ICYmIGhhbmRsZS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm93biA9IGRlc3Ryb3llZDtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IERlc3Ryb3lhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RGVzdHJveWFibGUubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRGVzdHJveWFibGUubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0Rlc3Ryb3lhYmxlLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBNYXAgZnJvbSAnQGRvam8vc2hpbS9NYXAnO1xuaW1wb3J0IHsgRGVzdHJveWFibGUgfSBmcm9tICcuL0Rlc3Ryb3lhYmxlJztcbi8qKlxuICogTWFwIG9mIGNvbXB1dGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGtleWVkIGJ5IHN0cmluZ1xuICovXG5jb25zdCByZWdleE1hcCA9IG5ldyBNYXAoKTtcbi8qKlxuICogRGV0ZXJtaW5lcyBpcyB0aGUgZXZlbnQgdHlwZSBnbG9iIGhhcyBiZWVuIG1hdGNoZWRcbiAqXG4gKiBAcmV0dXJucyBib29sZWFuIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBnbG9iIGlzIG1hdGNoZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2xvYk1hdGNoKGdsb2JTdHJpbmcsIHRhcmdldFN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0U3RyaW5nID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgZ2xvYlN0cmluZyA9PT0gJ3N0cmluZycgJiYgZ2xvYlN0cmluZy5pbmRleE9mKCcqJykgIT09IC0xKSB7XG4gICAgICAgIGxldCByZWdleDtcbiAgICAgICAgaWYgKHJlZ2V4TWFwLmhhcyhnbG9iU3RyaW5nKSkge1xuICAgICAgICAgICAgcmVnZXggPSByZWdleE1hcC5nZXQoZ2xvYlN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAoYF4ke2dsb2JTdHJpbmcucmVwbGFjZSgvXFwqL2csICcuKicpfSRgKTtcbiAgICAgICAgICAgIHJlZ2V4TWFwLnNldChnbG9iU3RyaW5nLCByZWdleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodGFyZ2V0U3RyaW5nKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBnbG9iU3RyaW5nID09PSB0YXJnZXRTdHJpbmc7XG4gICAgfVxufVxuLyoqXG4gKiBFdmVudCBDbGFzc1xuICovXG5leHBvcnQgY2xhc3MgRXZlbnRlZCBleHRlbmRzIERlc3Ryb3lhYmxlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIG1hcCBvZiBsaXN0ZW5lcnMga2V5ZWQgYnkgZXZlbnQgdHlwZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5saXN0ZW5lcnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGVtaXQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnNNYXAuZm9yRWFjaCgobWV0aG9kcywgdHlwZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzR2xvYk1hdGNoKHR5cGUsIGV2ZW50LnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kcy5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdGVuZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gbGlzdGVuZXIubWFwKChsaXN0ZW5lcikgPT4gdGhpcy5fYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcy5mb3JFYWNoKChoYW5kbGUpID0+IGhhbmRsZS5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcbiAgICB9XG4gICAgX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzTWFwLmdldCh0eXBlKSB8fCBbXTtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICB0aGlzLmxpc3RlbmVyc01hcC5zZXQodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEV2ZW50ZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FdmVudGVkLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0V2ZW50ZWQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0V2ZW50ZWQubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnQGRvam8vc2hpbS9vYmplY3QnO1xuZXhwb3J0IHsgYXNzaWduIH0gZnJvbSAnQGRvam8vc2hpbS9vYmplY3QnO1xuY29uc3Qgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4vKipcbiAqIFR5cGUgZ3VhcmQgdGhhdCBlbnN1cmVzIHRoYXQgdGhlIHZhbHVlIGNhbiBiZSBjb2VyY2VkIHRvIE9iamVjdFxuICogdG8gd2VlZCBvdXQgaG9zdCBvYmplY3RzIHRoYXQgZG8gbm90IGRlcml2ZSBmcm9tIE9iamVjdC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBpZiB3ZSB3YW50IHRvIGRlZXAgY29weSBhbiBvYmplY3Qgb3Igbm90LlxuICogTm90ZTogSW4gRVM2IGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSBhbiBvYmplY3QncyBTeW1ib2wudG9TdHJpbmdUYWcgcHJvcGVydHksIHdoaWNoIHdpbGxcbiAqIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYHRvU3RyaW5nYC4gVGhpcyBpcyBhIHJhcmUgZWRnZSBjYXNlIHRoYXQgaXMgZGlmZmljdWx0IHRvIGhhbmRsZSxcbiAqIHNvIGl0IGlzIG5vdCBoYW5kbGVkIGhlcmUuXG4gKiBAcGFyYW0gIHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybiAgICAgICBJZiB0aGUgdmFsdWUgaXMgY29lcmNpYmxlIGludG8gYW4gT2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHNob3VsZERlZXBDb3B5T2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuZnVuY3Rpb24gY29weUFycmF5KGFycmF5LCBpbmhlcml0ZWQpIHtcbiAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gY29weUFycmF5KGl0ZW0sIGluaGVyaXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFzaG91bGREZWVwQ29weU9iamVjdChpdGVtKVxuICAgICAgICAgICAgPyBpdGVtXG4gICAgICAgICAgICA6IF9taXhpbih7XG4gICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbmhlcml0ZWQ6IGluaGVyaXRlZCxcbiAgICAgICAgICAgICAgICBzb3VyY2VzOiBbaXRlbV0sXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7fVxuICAgICAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBfbWl4aW4oa3dBcmdzKSB7XG4gICAgY29uc3QgZGVlcCA9IGt3QXJncy5kZWVwO1xuICAgIGNvbnN0IGluaGVyaXRlZCA9IGt3QXJncy5pbmhlcml0ZWQ7XG4gICAgY29uc3QgdGFyZ2V0ID0ga3dBcmdzLnRhcmdldDtcbiAgICBjb25zdCBjb3BpZWQgPSBrd0FyZ3MuY29waWVkIHx8IFtdO1xuICAgIGNvbnN0IGNvcGllZENsb25lID0gWy4uLmNvcGllZF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrd0FyZ3Muc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBrd0FyZ3Muc291cmNlc1tpXTtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChjb3BpZWRDbG9uZS5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjb3B5QXJyYXkodmFsdWUsIGluaGVyaXRlZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkRGVlcENvcHlPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtrZXldIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkLnB1c2goc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gX21peGluKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRlZDogaW5oZXJpdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXM6IFt2YWx1ZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCAuLi5taXhpbnMpIHtcbiAgICBpZiAoIW1peGlucy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xhbmcuY3JlYXRlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBtaXhpbiBvYmplY3QuJyk7XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBtaXhpbnMuc2xpY2UoKTtcbiAgICBhcmdzLnVuc2hpZnQoT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpKTtcbiAgICByZXR1cm4gYXNzaWduLmFwcGx5KG51bGwsIGFyZ3MpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ24odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgcmV0dXJuIF9taXhpbih7XG4gICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgIGluaGVyaXRlZDogZmFsc2UsXG4gICAgICAgIHNvdXJjZXM6IHNvdXJjZXMsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVlcE1peGluKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgIHJldHVybiBfbWl4aW4oe1xuICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICBpbmhlcml0ZWQ6IHRydWUsXG4gICAgICAgIHNvdXJjZXM6IHNvdXJjZXMsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgb2JqZWN0IHVzaW5nIHRoZSBwcm92aWRlZCBzb3VyY2UncyBwcm90b3R5cGUgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhlIG5ldyBvYmplY3QsIGFuZCB0aGVuXG4gKiBkZWVwIGNvcGllcyB0aGUgcHJvdmlkZWQgc291cmNlJ3MgdmFsdWVzIGludG8gdGhlIG5ldyB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBUaGUgb2JqZWN0IHRvIGR1cGxpY2F0ZVxuICogQHJldHVybiBUaGUgbmV3IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZHVwbGljYXRlKHNvdXJjZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSkpO1xuICAgIHJldHVybiBkZWVwTWl4aW4odGFyZ2V0LCBzb3VyY2UpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgdGhlIHNhbWUgdmFsdWUuXG4gKlxuICogQHBhcmFtIGEgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIGIgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZTsgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0lkZW50aWNhbChhLCBiKSB7XG4gICAgcmV0dXJuIChhID09PSBiIHx8XG4gICAgICAgIC8qIGJvdGggdmFsdWVzIGFyZSBOYU4gKi9cbiAgICAgICAgKGEgIT09IGEgJiYgYiAhPT0gYikpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBiaW5kcyBhIG1ldGhvZCB0byB0aGUgc3BlY2lmaWVkIG9iamVjdCBhdCBydW50aW1lLiBUaGlzIGlzIHNpbWlsYXIgdG9cbiAqIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAsIGJ1dCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gaXQgdGFrZXMgdGhlIG5hbWUgb2YgYSBtZXRob2Qgb24gYW4gb2JqZWN0LlxuICogQXMgYSByZXN1bHQsIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBgbGF0ZUJpbmRgIHdpbGwgYWx3YXlzIGNhbGwgdGhlIGZ1bmN0aW9uIGN1cnJlbnRseSBhc3NpZ25lZCB0b1xuICogdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0IGFzIG9mIHRoZSBtb21lbnQgdGhlIGZ1bmN0aW9uIGl0IHJldHVybnMgaXMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgY29udGV4dCBvYmplY3RcbiAqIEBwYXJhbSBtZXRob2QgVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCBvbiB0aGUgY29udGV4dCBvYmplY3QgdG8gYmluZCB0byBpdHNlbGZcbiAqIEBwYXJhbSBzdXBwbGllZEFyZ3MgQW4gb3B0aW9uYWwgYXJyYXkgb2YgdmFsdWVzIHRvIHByZXBlbmQgdG8gdGhlIGBpbnN0YW5jZVttZXRob2RdYCBhcmd1bWVudHMgbGlzdFxuICogQHJldHVybiBUaGUgYm91bmQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhdGVCaW5kKGluc3RhbmNlLCBtZXRob2QsIC4uLnN1cHBsaWVkQXJncykge1xuICAgIHJldHVybiBzdXBwbGllZEFyZ3MubGVuZ3RoXG4gICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPyBzdXBwbGllZEFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkgOiBzdXBwbGllZEFyZ3M7XG4gICAgICAgICAgICAvLyBUUzcwMTdcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZVttZXRob2RdLmFwcGx5KGluc3RhbmNlLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFRTNzAxN1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlW21ldGhvZF0uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgcmV0dXJuIF9taXhpbih7XG4gICAgICAgIGRlZXA6IGZhbHNlLFxuICAgICAgICBpbmhlcml0ZWQ6IHRydWUsXG4gICAgICAgIHNvdXJjZXM6IHNvdXJjZXMsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBpbnZva2VzIHRoZSBnaXZlbiBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMgcHJlcGVuZGVkIHRvIGl0cyBhcmd1bWVudCBsaXN0LlxuICogTGlrZSBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgLCBidXQgZG9lcyBub3QgYWx0ZXIgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRhcmdldEZ1bmN0aW9uIFRoZSBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGJvdW5kXG4gKiBAcGFyYW0gc3VwcGxpZWRBcmdzIEFuIG9wdGlvbmFsIGFycmF5IG9mIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRoZSBgdGFyZ2V0RnVuY3Rpb25gIGFyZ3VtZW50cyBsaXN0XG4gKiBAcmV0dXJuIFRoZSBib3VuZCBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbCh0YXJnZXRGdW5jdGlvbiwgLi4uc3VwcGxpZWRBcmdzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPyBzdXBwbGllZEFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkgOiBzdXBwbGllZEFyZ3M7XG4gICAgICAgIHJldHVybiB0YXJnZXRGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xufVxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgZGVzdHJveSBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIGNhbGxzIHRoZSBwYXNzZWQtaW4gZGVzdHJ1Y3Rvci5cbiAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIHVuaWZpZWQgaW50ZXJmYWNlIGZvciBjcmVhdGluZyBcInJlbW92ZVwiIC8gXCJkZXN0cm95XCIgaGFuZGxlcnMgZm9yXG4gKiBldmVudCBsaXN0ZW5lcnMsIHRpbWVycywgZXRjLlxuICpcbiAqIEBwYXJhbSBkZXN0cnVjdG9yIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBoYW5kbGUncyBgZGVzdHJveWAgbWV0aG9kIGlzIGludm9rZWRcbiAqIEByZXR1cm4gVGhlIGhhbmRsZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhhbmRsZShkZXN0cnVjdG9yKSB7XG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkZXN0cnVjdG9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgc2luZ2xlIGhhbmRsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlc3Ryb3kgbXVsdGlwbGUgaGFuZGxlcyBzaW11bHRhbmVvdXNseS5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlcyBBbiBhcnJheSBvZiBoYW5kbGVzIHdpdGggYGRlc3Ryb3lgIG1ldGhvZHNcbiAqIEByZXR1cm4gVGhlIGhhbmRsZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBvc2l0ZUhhbmRsZSguLi5oYW5kbGVzKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhbmRsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaGFuZGxlc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxhbmcubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvbGFuZy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvbGFuZy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJmdW5jdGlvbiBpc0ZlYXR1cmVUZXN0VGhlbmFibGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUudGhlbjtcbn1cbi8qKlxuICogQSBjYWNoZSBvZiByZXN1bHRzIG9mIGZlYXR1cmUgdGVzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RDYWNoZSA9IHt9O1xuLyoqXG4gKiBBIGNhY2hlIG9mIHRoZSB1bi1yZXNvbHZlZCBmZWF0dXJlIHRlc3RzXG4gKi9cbmV4cG9ydCBjb25zdCB0ZXN0RnVuY3Rpb25zID0ge307XG4vKipcbiAqIEEgY2FjaGUgb2YgdW5yZXNvbHZlZCB0aGVuYWJsZXMgKHByb2JhYmx5IHByb21pc2VzKVxuICogQHR5cGUge3t9fVxuICovXG5jb25zdCB0ZXN0VGhlbmFibGVzID0ge307XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgc2NvcGUgKGB3aW5kb3dgIGluIGEgYnJvd3NlciwgYGdsb2JhbGAgaW4gTm9kZUpTKVxuICovXG5jb25zdCBnbG9iYWxTY29wZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gQnJvd3NlcnNcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gTm9kZVxuICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gV2ViIHdvcmtlcnNcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHt9O1xufSkoKTtcbi8qIEdyYWIgdGhlIHN0YXRpY0ZlYXR1cmVzIGlmIHRoZXJlIGFyZSBhdmFpbGFibGUgKi9cbmNvbnN0IHsgc3RhdGljRmVhdHVyZXMgfSA9IGdsb2JhbFNjb3BlLkRvam9IYXNFbnZpcm9ubWVudCB8fCB7fTtcbi8qIENsZWFuaW5nIHVwIHRoZSBEb2pvSGFzRW52aW9ybm1lbnQgKi9cbmlmICgnRG9qb0hhc0Vudmlyb25tZW50JyBpbiBnbG9iYWxTY29wZSkge1xuICAgIGRlbGV0ZSBnbG9iYWxTY29wZS5Eb2pvSGFzRW52aXJvbm1lbnQ7XG59XG4vKipcbiAqIEN1c3RvbSB0eXBlIGd1YXJkIHRvIG5hcnJvdyB0aGUgYHN0YXRpY0ZlYXR1cmVzYCB0byBlaXRoZXIgYSBtYXAgb3IgYSBmdW5jdGlvbiB0aGF0XG4gKiByZXR1cm5zIGEgbWFwLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZ3VhcmQgZm9yXG4gKi9cbmZ1bmN0aW9uIGlzU3RhdGljRmVhdHVyZUZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogVGhlIGNhY2hlIG9mIGFzc2VydGVkIGZlYXR1cmVzIHRoYXQgd2VyZSBhdmFpbGFibGUgaW4gdGhlIGdsb2JhbCBzY29wZSB3aGVuIHRoZVxuICogbW9kdWxlIGxvYWRlZFxuICovXG5jb25zdCBzdGF0aWNDYWNoZSA9IHN0YXRpY0ZlYXR1cmVzXG4gICAgPyBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbihzdGF0aWNGZWF0dXJlcykgPyBzdGF0aWNGZWF0dXJlcy5hcHBseShnbG9iYWxTY29wZSkgOiBzdGF0aWNGZWF0dXJlc1xuICAgIDoge307IC8qIFByb3ZpZGluZyBhbiBlbXB0eSBjYWNoZSwgaWYgbm9uZSB3YXMgaW4gdGhlIGVudmlyb25tZW50XG5cbi8qKlxuKiBBTUQgcGx1Z2luIGZ1bmN0aW9uLlxuKlxuKiBDb25kaXRpb25hbCBsb2FkcyBtb2R1bGVzIGJhc2VkIG9uIGEgaGFzIGZlYXR1cmUgdGVzdCB2YWx1ZS5cbipcbiogQHBhcmFtIHJlc291cmNlSWQgR2l2ZXMgdGhlIHJlc29sdmVkIG1vZHVsZSBpZCB0byBsb2FkLlxuKiBAcGFyYW0gcmVxdWlyZSBUaGUgbG9hZGVyIHJlcXVpcmUgZnVuY3Rpb24gd2l0aCByZXNwZWN0IHRvIHRoZSBtb2R1bGUgdGhhdCBjb250YWluZWQgdGhlIHBsdWdpbiByZXNvdXJjZSBpbiBpdHNcbiogICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBsaXN0LlxuKiBAcGFyYW0gbG9hZCBDYWxsYmFjayB0byBsb2FkZXIgdGhhdCBjb25zdW1lcyByZXN1bHQgb2YgcGx1Z2luIGRlbWFuZC5cbiovXG5leHBvcnQgZnVuY3Rpb24gbG9hZChyZXNvdXJjZUlkLCByZXF1aXJlLCBsb2FkLCBjb25maWcpIHtcbiAgICByZXNvdXJjZUlkID8gcmVxdWlyZShbcmVzb3VyY2VJZF0sIGxvYWQpIDogbG9hZCgpO1xufVxuLyoqXG4gKiBBTUQgcGx1Z2luIGZ1bmN0aW9uLlxuICpcbiAqIFJlc29sdmVzIHJlc291cmNlSWQgaW50byBhIG1vZHVsZSBpZCBiYXNlZCBvbiBwb3NzaWJseS1uZXN0ZWQgdGVuYXJ5IGV4cHJlc3Npb24gdGhhdCBicmFuY2hlcyBvbiBoYXMgZmVhdHVyZSB0ZXN0XG4gKiB2YWx1ZShzKS5cbiAqXG4gKiBAcGFyYW0gcmVzb3VyY2VJZCBUaGUgaWQgb2YgdGhlIG1vZHVsZVxuICogQHBhcmFtIG5vcm1hbGl6ZSBSZXNvbHZlcyBhIHJlbGF0aXZlIG1vZHVsZSBpZCBpbnRvIGFuIGFic29sdXRlIG1vZHVsZSBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHJlc291cmNlSWQsIG5vcm1hbGl6ZSkge1xuICAgIGNvbnN0IHRva2VucyA9IHJlc291cmNlSWQubWF0Y2goL1tcXD86XXxbXjpcXD9dKi9nKSB8fCBbXTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZnVuY3Rpb24gZ2V0KHNraXApIHtcbiAgICAgICAgY29uc3QgdGVybSA9IHRva2Vuc1tpKytdO1xuICAgICAgICBpZiAodGVybSA9PT0gJzonKSB7XG4gICAgICAgICAgICAvLyBlbXB0eSBzdHJpbmcgbW9kdWxlIG5hbWUsIHJlc29sdmVzIHRvIG51bGxcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gcG9zdGZpeGVkIHdpdGggYSA/IG1lYW5zIGl0IGlzIGEgZmVhdHVyZSB0byBicmFuY2ggb24sIHRoZSB0ZXJtIGlzIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXG4gICAgICAgICAgICBpZiAodG9rZW5zW2krK10gPT09ICc/Jykge1xuICAgICAgICAgICAgICAgIGlmICghc2tpcCAmJiBoYXModGVybSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hlZCB0aGUgZmVhdHVyZSwgZ2V0IHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGRpZCBub3QgbWF0Y2gsIGdldCB0aGUgc2Vjb25kIHZhbHVlLCBwYXNzaW5nIG92ZXIgdGhlIGZpcnN0XG4gICAgICAgICAgICAgICAgICAgIGdldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldChza2lwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhIG1vZHVsZVxuICAgICAgICAgICAgcmV0dXJuIHRlcm07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaWQgPSBnZXQoKTtcbiAgICByZXR1cm4gaWQgJiYgbm9ybWFsaXplKGlkKTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYSBmZWF0dXJlIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZFxuICpcbiAqIEBwYXJhbSBmZWF0dXJlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGlzdHMoZmVhdHVyZSkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBCb29sZWFuKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlIHx8IG5vcm1hbGl6ZWRGZWF0dXJlIGluIHRlc3RDYWNoZSB8fCB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXSk7XG59XG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IHRlc3QgZm9yIGEgbmFtZWQgZmVhdHVyZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaGFzLmFkZCgnZG9tLWFkZGV2ZW50bGlzdGVuZXInLCAhIWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpO1xuICpcbiAqIEBleGFtcGxlXG4gKiBoYXMuYWRkKCd0b3VjaC1ldmVudHMnLCBmdW5jdGlvbiAoKSB7XG4gKiAgICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnRcbiAqIH0pO1xuICpcbiAqIEBwYXJhbSBmZWF0dXJlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHJlcG9ydGVkIG9mIHRoZSBmZWF0dXJlLCBvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBvbmNlIG9uIGZpcnN0IHRlc3RcbiAqIEBwYXJhbSBvdmVyd3JpdGUgaWYgYW4gZXhpc3RpbmcgdmFsdWUgc2hvdWxkIGJlIG92ZXJ3cml0dGVuLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZChmZWF0dXJlLCB2YWx1ZSwgb3ZlcndyaXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCBub3JtYWxpemVkRmVhdHVyZSA9IGZlYXR1cmUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoZXhpc3RzKG5vcm1hbGl6ZWRGZWF0dXJlKSAmJiAhb3ZlcndyaXRlICYmICEobm9ybWFsaXplZEZlYXR1cmUgaW4gc3RhdGljQ2FjaGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEZlYXR1cmUgXCIke2ZlYXR1cmV9XCIgZXhpc3RzIGFuZCBvdmVyd3JpdGUgbm90IHRydWUuYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNGZWF0dXJlVGVzdFRoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgICB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdID0gdmFsdWUudGhlbigocmVzb2x2ZWRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGVzdENhY2hlW2ZlYXR1cmVdID0gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgIGRlbGV0ZSB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgdGVzdFRoZW5hYmxlc1tmZWF0dXJlXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdID0gdmFsdWU7XG4gICAgICAgIGRlbGV0ZSB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXTtcbiAgICB9XG59XG4vKipcbiAqIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWVkIGZlYXR1cmUuXG4gKlxuICogQHBhcmFtIGZlYXR1cmUgVGhlIG5hbWUgKGlmIGEgc3RyaW5nKSBvciBpZGVudGlmaWVyIChpZiBhbiBpbnRlZ2VyKSBvZiB0aGUgZmVhdHVyZSB0byB0ZXN0LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXMoZmVhdHVyZSkge1xuICAgIGxldCByZXN1bHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSB7XG4gICAgICAgIHJlc3VsdCA9IHN0YXRpY0NhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0pIHtcbiAgICAgICAgcmVzdWx0ID0gdGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXSA9IHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdLmNhbGwobnVsbCk7XG4gICAgICAgIGRlbGV0ZSB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9ybWFsaXplZEZlYXR1cmUgaW4gdGVzdENhY2hlKSB7XG4gICAgICAgIHJlc3VsdCA9IHRlc3RDYWNoZVtub3JtYWxpemVkRmVhdHVyZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKGZlYXR1cmUgaW4gdGVzdFRoZW5hYmxlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBBdHRlbXB0IHRvIGRldGVjdCB1bnJlZ2lzdGVyZWQgaGFzIGZlYXR1cmUgXCIke2ZlYXR1cmV9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qXG4gKiBPdXQgb2YgdGhlIGJveCBmZWF0dXJlIHRlc3RzXG4gKi9cbi8qIEVudmlyb25tZW50cyAqL1xuLyogVXNlZCBhcyBhIHZhbHVlIHRvIHByb3ZpZGUgYSBkZWJ1ZyBvbmx5IGNvZGUgcGF0aCAqL1xuYWRkKCdkZWJ1ZycsIHRydWUpO1xuLyogRGV0ZWN0cyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgXCJicm93c2VyIGxpa2VcIiAqL1xuYWRkKCdob3N0LWJyb3dzZXInLCB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpO1xuLyogRGV0ZWN0cyBpZiB0aGUgZW52aXJvbm1lbnQgYXBwZWFycyB0byBiZSBOb2RlSlMgKi9cbmFkZCgnaG9zdC1ub2RlJywgZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MudmVyc2lvbnMubm9kZTtcbiAgICB9XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhcy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vaGFzL2hhcy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2hhcy9oYXMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaXNBcnJheUxpa2UsIFNoaW1JdGVyYXRvciB9IGZyb20gJy4vaXRlcmF0b3InO1xuaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBpcyBhcyBvYmplY3RJcyB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgJy4vU3ltYm9sJztcbmV4cG9ydCBsZXQgTWFwID0gZ2xvYmFsLk1hcDtcbmlmICghdHJ1ZSkge1xuICAgIE1hcCA9IChfYSA9IGNsYXNzIE1hcCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnTWFwJztcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCh2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB1c2luZyBPYmplY3QuaXNcbiAgICAgICAgICAgICAqIHRvIGNoZWNrIGZvciBlcXVhbGl0eS4gU2VlIGh0dHA6Ly9temwubGEvMXp1S08yVlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBfaW5kZXhPZktleShrZXlzLCBrZXkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0SXMoa2V5c1tpXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2V0IHNpemUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2tleXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xlYXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5sZW5ndGggPSB0aGlzLl92YWx1ZXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZShrZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50cmllcygpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl9rZXlzLm1hcCgoa2V5LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBba2V5LCB0aGlzLl92YWx1ZXNbaV1dO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3JFYWNoKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuX2tleXM7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgdmFsdWVzW2ldLCBrZXlzW2ldLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZXQoa2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IHRoaXMuX3ZhbHVlc1tpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYXMoa2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KSA+IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih0aGlzLl9rZXlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gdGhpcy5fa2V5cy5sZW5ndGggOiBpbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzW2luZGV4XSA9IGtleTtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZXMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaGltSXRlcmF0b3IodGhpcy5fdmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVudHJpZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX2FbU3ltYm9sLnNwZWNpZXNdID0gX2EsXG4gICAgICAgIF9hKTtcbn1cbmV4cG9ydCBkZWZhdWx0IE1hcDtcbnZhciBfYTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1hcC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9NYXAubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL01hcC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IHF1ZXVlTWljcm9UYXNrIH0gZnJvbSAnLi9zdXBwb3J0L3F1ZXVlJztcbmltcG9ydCAnLi9TeW1ib2wnO1xuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcbmV4cG9ydCBsZXQgU2hpbVByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbmV4cG9ydCBjb25zdCBpc1RoZW5hYmxlID0gZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn07XG5pZiAoIXRydWUpIHtcbiAgICBnbG9iYWwuUHJvbWlzZSA9IFNoaW1Qcm9taXNlID0gKF9hID0gY2xhc3MgUHJvbWlzZSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgUHJvbWlzZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAcGFyYW0gZXhlY3V0b3JcbiAgICAgICAgICAgICAqIFRoZSBleGVjdXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgUHJvbWlzZSBpcyBpbnN0YW50aWF0ZWQuIEl0IGlzIHJlc3BvbnNpYmxlIGZvclxuICAgICAgICAgICAgICogc3RhcnRpbmcgdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hlbiBpdCBpcyBpbnZva2VkLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRoZSBleGVjdXRvciBtdXN0IGNhbGwgZWl0aGVyIHRoZSBwYXNzZWQgYHJlc29sdmVgIGZ1bmN0aW9uIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZFxuICAgICAgICAgICAgICogc3VjY2Vzc2Z1bGx5LCBvciB0aGUgYHJlamVjdGAgZnVuY3Rpb24gd2hlbiB0aGUgb3BlcmF0aW9uIGZhaWxzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMSAvKiBQZW5kaW5nICovO1xuICAgICAgICAgICAgICAgIHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdQcm9taXNlJztcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB0cnVlLCB0aGUgcmVzb2x1dGlvbiBvZiB0aGlzIHByb21pc2UgaXMgY2hhaW5lZCAoXCJsb2NrZWQgaW5cIikgdG8gYW5vdGhlciBwcm9taXNlLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGxldCBpc0NoYWluZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHByb21pc2UgaXMgaW4gYSByZXNvbHZlZCBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBpc1Jlc29sdmVkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSAhPT0gMSAvKiBQZW5kaW5nICovIHx8IGlzQ2hhaW5lZDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIENhbGxiYWNrcyB0aGF0IHNob3VsZCBiZSBpbnZva2VkIG9uY2UgdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBsZXQgY2FsbGJhY2tzID0gW107XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSW5pdGlhbGx5IHB1c2hlcyBjYWxsYmFja3Mgb250byBhIHF1ZXVlIGZvciBleGVjdXRpb24gb25jZSB0aGlzIHByb21pc2Ugc2V0dGxlcy4gQWZ0ZXIgdGhlIHByb21pc2Ugc2V0dGxlcyxcbiAgICAgICAgICAgICAgICAgKiBlbnF1ZXVlcyBjYWxsYmFja3MgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCBldmVudCBsb29wIHR1cm4uXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbGV0IHdoZW5GaW5pc2hlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFNldHRsZXMgdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIG5ld1N0YXRlIFRoZSByZXNvbHZlZCBzdGF0ZSBmb3IgdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7VHxhbnl9IHZhbHVlIFRoZSByZXNvbHZlZCB2YWx1ZSBmb3IgdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRsZSA9IChuZXdTdGF0ZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBwcm9taXNlIGNhbiBvbmx5IGJlIHNldHRsZWQgb25jZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IDEgLyogUGVuZGluZyAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHdoZW5GaW5pc2hlZCA9IHF1ZXVlTWljcm9UYXNrO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGVucXVldWUgYSBjYWxsYmFjayBydW5uZXIgaWYgdGhlcmUgYXJlIGNhbGxiYWNrcyBzbyB0aGF0IGluaXRpYWxseSBmdWxmaWxsZWQgUHJvbWlzZXMgZG9uJ3QgaGF2ZSB0b1xuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IGFuIGV4dHJhIHR1cm4uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MgJiYgY2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlTWljcm9UYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IGNhbGxiYWNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzW2ldLmNhbGwobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogUmVzb2x2ZXMgdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIG5ld1N0YXRlIFRoZSByZXNvbHZlZCBzdGF0ZSBmb3IgdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7VHxhbnl9IHZhbHVlIFRoZSByZXNvbHZlZCB2YWx1ZSBmb3IgdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmUgPSAobmV3U3RhdGUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnRoZW4oc2V0dGxlLmJpbmQobnVsbCwgMCAvKiBGdWxmaWxsZWQgKi8pLCBzZXR0bGUuYmluZChudWxsLCAyIC8qIFJlamVjdGVkICovKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NoYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGxlKG5ld1N0YXRlLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMudGhlbiA9IChvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbkZpbmlzaGVkIGluaXRpYWxseSBxdWV1ZXMgdXAgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gYWZ0ZXIgdGhlIHByb21pc2UgaGFzIHNldHRsZWQuIE9uY2UgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9taXNlIGhhcyBzZXR0bGVkLCB3aGVuRmluaXNoZWQgd2lsbCBzY2hlZHVsZSBjYWxsYmFja3MgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCB0dXJuIHRocm91Z2ggdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBldmVudCBsb29wLlxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlbkZpbmlzaGVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuc3RhdGUgPT09IDIgLyogUmVqZWN0ZWQgKi8gPyBvblJlamVjdGVkIDogb25GdWxmaWxsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjYWxsYmFjayh0aGlzLnJlc29sdmVkVmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gMiAvKiBSZWplY3RlZCAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QodGhpcy5yZXNvbHZlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5yZXNvbHZlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleGVjdXRvcihyZXNvbHZlLmJpbmQobnVsbCwgMCAvKiBGdWxmaWxsZWQgKi8pLCByZXNvbHZlLmJpbmQobnVsbCwgMiAvKiBSZWplY3RlZCAqLykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGxlKDIgLyogUmVqZWN0ZWQgKi8sIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0aWMgYWxsKGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21wbGV0ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3B1bGF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZnVsZmlsbChpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICsrY29tcGxldGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9wdWxhdGluZyB8fCBjb21wbGV0ZSA8IHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICArK3RvdGFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGhlbmFibGUoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbiBpdGVtIFByb21pc2UgcmVqZWN0cywgdGhpcyBQcm9taXNlIGlzIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggdGhlIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9taXNlJ3MgcmVqZWN0aW9uIGVycm9yLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGhlbihmdWxmaWxsLmJpbmQobnVsbCwgaW5kZXgpLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4oZnVsZmlsbC5iaW5kKG51bGwsIGluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSXRlbShpLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRpYyByYWNlKGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIFByb21pc2UgaXRlbSByZWplY3RzLCB0aGlzIFByb21pc2UgaXMgaW1tZWRpYXRlbHkgcmVqZWN0ZWQgd2l0aCB0aGUgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoaXRlbSkudGhlbihyZXNvbHZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGljIHJlamVjdChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRpYyByZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gob25SZWplY3RlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX2FbU3ltYm9sLnNwZWNpZXNdID0gU2hpbVByb21pc2UsXG4gICAgICAgIF9hKTtcbn1cbmV4cG9ydCBkZWZhdWx0IFNoaW1Qcm9taXNlO1xudmFyIF9hO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvbWlzZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9Qcm9taXNlLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9Qcm9taXNlLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IGdldFZhbHVlRGVzY3JpcHRvciB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcbmV4cG9ydCBsZXQgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbmlmICghdHJ1ZSkge1xuICAgIC8qKlxuICAgICAqIFRocm93cyBpZiB0aGUgdmFsdWUgaXMgbm90IGEgc3ltYm9sLCB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBTaGltXG4gICAgICogQHBhcmFtICB7YW55fSAgICB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2tcbiAgICAgKiBAcmV0dXJuIHtzeW1ib2x9ICAgICAgIFJldHVybnMgdGhlIHN5bWJvbCBvciB0aHJvd3NcbiAgICAgKi9cbiAgICBjb25zdCB2YWxpZGF0ZVN5bWJvbCA9IGZ1bmN0aW9uIHZhbGlkYXRlU3ltYm9sKHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBjb25zdCBkZWZpbmVQcm9wZXJ0aWVzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG4gICAgY29uc3QgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4gICAgY29uc3QgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcbiAgICBjb25zdCBvYmpQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuICAgIGNvbnN0IGdsb2JhbFN5bWJvbHMgPSB7fTtcbiAgICBjb25zdCBnZXRTeW1ib2xOYW1lID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlZCA9IGNyZWF0ZShudWxsKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkZXNjKSB7XG4gICAgICAgICAgICBsZXQgcG9zdGZpeCA9IDA7XG4gICAgICAgICAgICBsZXQgbmFtZTtcbiAgICAgICAgICAgIHdoaWxlIChjcmVhdGVkW1N0cmluZyhkZXNjKSArIChwb3N0Zml4IHx8ICcnKV0pIHtcbiAgICAgICAgICAgICAgICArK3Bvc3RmaXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZXNjICs9IFN0cmluZyhwb3N0Zml4IHx8ICcnKTtcbiAgICAgICAgICAgIGNyZWF0ZWRbZGVzY10gPSB0cnVlO1xuICAgICAgICAgICAgbmFtZSA9ICdAQCcgKyBkZXNjO1xuICAgICAgICAgICAgLy8gRklYTUU6IFRlbXBvcmFyeSBndWFyZCB1bnRpbCB0aGUgZHVwbGljYXRlIGV4ZWN1dGlvbiB3aGVuIHRlc3RpbmcgY2FuIGJlXG4gICAgICAgICAgICAvLyBwaW5uZWQgZG93bi5cbiAgICAgICAgICAgIGlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmpQcm90b3R5cGUsIG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkob2JqUHJvdG90eXBlLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCBnZXRWYWx1ZURlc2NyaXB0b3IodmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIH07XG4gICAgfSkoKTtcbiAgICBjb25zdCBJbnRlcm5hbFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEludGVybmFsU3ltYm9sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUeXBlRXJyb3I6IFN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTeW1ib2woZGVzY3JpcHRpb24pO1xuICAgIH07XG4gICAgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzeW0gPSBPYmplY3QuY3JlYXRlKEludGVybmFsU3ltYm9sLnByb3RvdHlwZSk7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnRpZXMoc3ltLCB7XG4gICAgICAgICAgICBfX2Rlc2NyaXB0aW9uX186IGdldFZhbHVlRGVzY3JpcHRvcihkZXNjcmlwdGlvbiksXG4gICAgICAgICAgICBfX25hbWVfXzogZ2V0VmFsdWVEZXNjcmlwdG9yKGdldFN5bWJvbE5hbWUoZGVzY3JpcHRpb24pKVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qIERlY29yYXRlIHRoZSBTeW1ib2wgZnVuY3Rpb24gd2l0aCB0aGUgYXBwcm9wcmlhdGUgcHJvcGVydGllcyAqL1xuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgJ2ZvcicsIGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmIChnbG9iYWxTeW1ib2xzW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxTeW1ib2xzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChnbG9iYWxTeW1ib2xzW2tleV0gPSBTeW1ib2woU3RyaW5nKGtleSkpKTtcbiAgICB9KSk7XG4gICAgZGVmaW5lUHJvcGVydGllcyhTeW1ib2wsIHtcbiAgICAgICAga2V5Rm9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICAgICAgbGV0IGtleTtcbiAgICAgICAgICAgIHZhbGlkYXRlU3ltYm9sKHN5bSk7XG4gICAgICAgICAgICBmb3IgKGtleSBpbiBnbG9iYWxTeW1ib2xzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdsb2JhbFN5bWJvbHNba2V5XSA9PT0gc3ltKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgaGFzSW5zdGFuY2U6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdoYXNJbnN0YW5jZScpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBpc0NvbmNhdFNwcmVhZGFibGU6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdpc0NvbmNhdFNwcmVhZGFibGUnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgaXRlcmF0b3I6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdpdGVyYXRvcicpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBtYXRjaDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ21hdGNoJyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIG9ic2VydmFibGU6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdvYnNlcnZhYmxlJyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIHJlcGxhY2U6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdyZXBsYWNlJyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIHNlYXJjaDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NlYXJjaCcpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBzcGVjaWVzOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignc3BlY2llcycpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBzcGxpdDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwbGl0JyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIHRvUHJpbWl0aXZlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigndG9QcmltaXRpdmUnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgdG9TdHJpbmdUYWc6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCd0b1N0cmluZ1RhZycpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICB1bnNjb3BhYmxlczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3Vuc2NvcGFibGVzJyksIGZhbHNlLCBmYWxzZSlcbiAgICB9KTtcbiAgICAvKiBEZWNvcmF0ZSB0aGUgSW50ZXJuYWxTeW1ib2wgb2JqZWN0ICovXG4gICAgZGVmaW5lUHJvcGVydGllcyhJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wpLFxuICAgICAgICB0b1N0cmluZzogZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fbmFtZV9fO1xuICAgICAgICB9LCBmYWxzZSwgZmFsc2UpXG4gICAgfSk7XG4gICAgLyogRGVjb3JhdGUgdGhlIFN5bWJvbC5wcm90b3R5cGUgKi9cbiAgICBkZWZpbmVQcm9wZXJ0aWVzKFN5bWJvbC5wcm90b3R5cGUsIHtcbiAgICAgICAgdG9TdHJpbmc6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1N5bWJvbCAoJyArIHZhbGlkYXRlU3ltYm9sKHRoaXMpLl9fZGVzY3JpcHRpb25fXyArICcpJztcbiAgICAgICAgfSksXG4gICAgICAgIHZhbHVlT2Y6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7XG4gICAgICAgIH0pXG4gICAgfSk7XG4gICAgZGVmaW5lUHJvcGVydHkoU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sLnRvUHJpbWl0aXZlLCBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7XG4gICAgfSkpO1xuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZ2V0VmFsdWVEZXNjcmlwdG9yKCdTeW1ib2wnLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcbiAgICBkZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1ByaW1pdGl2ZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSwgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XG4gICAgZGVmaW5lUHJvcGVydHkoSW50ZXJuYWxTeW1ib2wucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10sIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpO1xufVxuLyoqXG4gKiBBIGN1c3RvbSBndWFyZCBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgaWYgYW4gb2JqZWN0IGlzIGEgc3ltYm9sIG9yIG5vdFxuICogQHBhcmFtICB7YW55fSAgICAgICB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2sgdG8gc2VlIGlmIGl0IGlzIGEgc3ltYm9sIG9yIG5vdFxuICogQHJldHVybiB7aXMgc3ltYm9sfSAgICAgICBSZXR1cm5zIHRydWUgaWYgYSBzeW1ib2wgb3Igbm90IChhbmQgbmFycm93cyB0aGUgdHlwZSBndWFyZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fCB2YWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykpIHx8IGZhbHNlO1xufVxuLyoqXG4gKiBGaWxsIGFueSBtaXNzaW5nIHdlbGwga25vd24gc3ltYm9scyBpZiB0aGUgbmF0aXZlIFN5bWJvbCBpcyBtaXNzaW5nIHRoZW1cbiAqL1xuW1xuICAgICdoYXNJbnN0YW5jZScsXG4gICAgJ2lzQ29uY2F0U3ByZWFkYWJsZScsXG4gICAgJ2l0ZXJhdG9yJyxcbiAgICAnc3BlY2llcycsXG4gICAgJ3JlcGxhY2UnLFxuICAgICdzZWFyY2gnLFxuICAgICdzcGxpdCcsXG4gICAgJ21hdGNoJyxcbiAgICAndG9QcmltaXRpdmUnLFxuICAgICd0b1N0cmluZ1RhZycsXG4gICAgJ3Vuc2NvcGFibGVzJyxcbiAgICAnb2JzZXJ2YWJsZSdcbl0uZm9yRWFjaCgod2VsbEtub3duKSA9PiB7XG4gICAgaWYgKCFTeW1ib2xbd2VsbEtub3duXSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ltYm9sLCB3ZWxsS25vd24sIGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKHdlbGxLbm93biksIGZhbHNlLCBmYWxzZSkpO1xuICAgIH1cbn0pO1xuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3ltYm9sLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1N5bWJvbC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vU3ltYm9sLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgaXNBcnJheUxpa2UgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgJy4vU3ltYm9sJztcbmV4cG9ydCBsZXQgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuaWYgKCF0cnVlKSB7XG4gICAgY29uc3QgREVMRVRFRCA9IHt9O1xuICAgIGNvbnN0IGdldFVJRCA9IGZ1bmN0aW9uIGdldFVJRCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCk7XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZU5hbWUgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgc3RhcnRJZCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAlIDEwMDAwMDAwMCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBnZW5lcmF0ZU5hbWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ19fd20nICsgZ2V0VUlEKCkgKyAoc3RhcnRJZCsrICsgJ19fJyk7XG4gICAgICAgIH07XG4gICAgfSkoKTtcbiAgICBXZWFrTWFwID0gY2xhc3MgV2Vha01hcCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnV2Vha01hcCc7XG4gICAgICAgICAgICB0aGlzLl9uYW1lID0gZ2VuZXJhdGVOYW1lKCk7XG4gICAgICAgICAgICB0aGlzLl9mcm96ZW5FbnRyaWVzID0gW107XG4gICAgICAgICAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGl0ZW1bMF0sIGl0ZW1bMV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2Zyb3plbkVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnJvemVuRW50cmllc1tpXS5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xuICAgICAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSB7XG4gICAgICAgICAgICAgICAgZW50cnkudmFsdWUgPSBERUxFVEVEO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZnJvemVuSW5kZXggPSB0aGlzLl9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSk7XG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zyb3plbkVudHJpZXMuc3BsaWNlKGZyb3plbkluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xuICAgICAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZnJvemVuSW5kZXggPSB0aGlzLl9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSk7XG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcm96ZW5FbnRyaWVzW2Zyb3plbkluZGV4XS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoYXMoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBrZXlbdGhpcy5fbmFtZV07XG4gICAgICAgICAgICBpZiAoQm9vbGVhbihlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFrZXkgfHwgKHR5cGVvZiBrZXkgIT09ICdvYmplY3QnICYmIHR5cGVvZiBrZXkgIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB2YWx1ZSB1c2VkIGFzIHdlYWsgbWFwIGtleScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xuICAgICAgICAgICAgaWYgKCFlbnRyeSB8fCBlbnRyeS5rZXkgIT09IGtleSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogeyB2YWx1ZToga2V5IH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMuX25hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbnRyeVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgV2Vha01hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdlYWtNYXAubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vV2Vha01hcC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vV2Vha01hcC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IGlzQXJyYXlMaWtlLCBpc0l0ZXJhYmxlIH0gZnJvbSAnLi9pdGVyYXRvcic7XG5pbXBvcnQgeyBNQVhfU0FGRV9JTlRFR0VSIH0gZnJvbSAnLi9udW1iZXInO1xuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcbmltcG9ydCB7IHdyYXBOYXRpdmUgfSBmcm9tICcuL3N1cHBvcnQvdXRpbCc7XG5leHBvcnQgbGV0IGZyb207XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYXJyYXkgZnJvbSB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0gYXJndW1lbnRzIEFueSBudW1iZXIgb2YgYXJndW1lbnRzIGZvciB0aGUgYXJyYXlcbiAqIEByZXR1cm4gQW4gYXJyYXkgZnJvbSB0aGUgZ2l2ZW4gYXJndW1lbnRzXG4gKi9cbmV4cG9ydCBsZXQgb2Y7XG4vKiBFUzYgQXJyYXkgaW5zdGFuY2UgbWV0aG9kcyAqL1xuLyoqXG4gKiBDb3BpZXMgZGF0YSBpbnRlcm5hbGx5IHdpdGhpbiBhbiBhcnJheSBvciBhcnJheS1saWtlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgYXJyYXktbGlrZSBvYmplY3RcbiAqIEBwYXJhbSBvZmZzZXQgVGhlIGluZGV4IHRvIHN0YXJ0IGNvcHlpbmcgdmFsdWVzIHRvOyBpZiBuZWdhdGl2ZSwgaXQgY291bnRzIGJhY2t3YXJkcyBmcm9tIGxlbmd0aFxuICogQHBhcmFtIHN0YXJ0IFRoZSBmaXJzdCAoaW5jbHVzaXZlKSBpbmRleCB0byBjb3B5OyBpZiBuZWdhdGl2ZSwgaXQgY291bnRzIGJhY2t3YXJkcyBmcm9tIGxlbmd0aFxuICogQHBhcmFtIGVuZCBUaGUgbGFzdCAoZXhjbHVzaXZlKSBpbmRleCB0byBjb3B5OyBpZiBuZWdhdGl2ZSwgaXQgY291bnRzIGJhY2t3YXJkcyBmcm9tIGxlbmd0aFxuICogQHJldHVybiBUaGUgdGFyZ2V0XG4gKi9cbmV4cG9ydCBsZXQgY29weVdpdGhpbjtcbi8qKlxuICogRmlsbHMgZWxlbWVudHMgb2YgYW4gYXJyYXktbGlrZSBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCB0byBmaWxsXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgZWFjaCBlbGVtZW50IG9mIHRoZSB0YXJnZXQgd2l0aFxuICogQHBhcmFtIHN0YXJ0IFRoZSBmaXJzdCBpbmRleCB0byBmaWxsXG4gKiBAcGFyYW0gZW5kIFRoZSAoZXhjbHVzaXZlKSBpbmRleCBhdCB3aGljaCB0byBzdG9wIGZpbGxpbmdcbiAqIEByZXR1cm4gVGhlIGZpbGxlZCB0YXJnZXRcbiAqL1xuZXhwb3J0IGxldCBmaWxsO1xuLyoqXG4gKiBGaW5kcyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgaW5zdGFuY2UgbWF0Y2hpbmcgdGhlIGNhbGxiYWNrIG9yIHVuZGVmaW5lZCBpZiBvbmUgaXMgbm90IGZvdW5kLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgQW4gYXJyYXktbGlrZSBvYmplY3RcbiAqIEBwYXJhbSBjYWxsYmFjayBBIGZ1bmN0aW9uIHJldHVybmluZyBpZiB0aGUgY3VycmVudCB2YWx1ZSBtYXRjaGVzIGEgY3JpdGVyaWFcbiAqIEBwYXJhbSB0aGlzQXJnIFRoZSBleGVjdXRpb24gY29udGV4dCBmb3IgdGhlIGZpbmQgZnVuY3Rpb25cbiAqIEByZXR1cm4gVGhlIGZpcnN0IGVsZW1lbnQgbWF0Y2hpbmcgdGhlIGNhbGxiYWNrLCBvciB1bmRlZmluZWQgaWYgb25lIGRvZXMgbm90IGV4aXN0XG4gKi9cbmV4cG9ydCBsZXQgZmluZDtcbi8qKlxuICogUGVyZm9ybXMgYSBsaW5lYXIgc2VhcmNoIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBpbmRleCB3aG9zZSB2YWx1ZSBzYXRpc2ZpZXMgdGhlIHBhc3NlZCBjYWxsYmFjayxcbiAqIG9yIC0xIGlmIG5vIHZhbHVlcyBzYXRpc2Z5IGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgQW4gYXJyYXktbGlrZSBvYmplY3RcbiAqIEBwYXJhbSBjYWxsYmFjayBBIGZ1bmN0aW9uIHJldHVybmluZyB0cnVlIGlmIHRoZSBjdXJyZW50IHZhbHVlIHNhdGlzZmllcyBpdHMgY3JpdGVyaWFcbiAqIEBwYXJhbSB0aGlzQXJnIFRoZSBleGVjdXRpb24gY29udGV4dCBmb3IgdGhlIGZpbmQgZnVuY3Rpb25cbiAqIEByZXR1cm4gVGhlIGZpcnN0IGluZGV4IHdob3NlIHZhbHVlIHNhdGlzZmllcyB0aGUgcGFzc2VkIGNhbGxiYWNrLCBvciAtMSBpZiBubyB2YWx1ZXMgc2F0aXNmeSBpdFxuICovXG5leHBvcnQgbGV0IGZpbmRJbmRleDtcbi8qIEVTNyBBcnJheSBpbnN0YW5jZSBtZXRob2RzICovXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhbiBhcnJheSBpbmNsdWRlcyBhIGdpdmVuIHZhbHVlXG4gKlxuICogQHBhcmFtIHRhcmdldCB0aGUgdGFyZ2V0IGFycmF5LWxpa2Ugb2JqZWN0XG4gKiBAcGFyYW0gc2VhcmNoRWxlbWVudCB0aGUgaXRlbSB0byBzZWFyY2ggZm9yXG4gKiBAcGFyYW0gZnJvbUluZGV4IHRoZSBzdGFydGluZyBpbmRleCB0byBzZWFyY2ggZnJvbVxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGFycmF5IGluY2x1ZGVzIHRoZSBlbGVtZW50LCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG5leHBvcnQgbGV0IGluY2x1ZGVzO1xuaWYgKHRydWUgJiYgdHJ1ZSkge1xuICAgIGZyb20gPSBnbG9iYWwuQXJyYXkuZnJvbTtcbiAgICBvZiA9IGdsb2JhbC5BcnJheS5vZjtcbiAgICBjb3B5V2l0aGluID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4pO1xuICAgIGZpbGwgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZmlsbCk7XG4gICAgZmluZCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maW5kKTtcbiAgICBmaW5kSW5kZXggPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZmluZEluZGV4KTtcbn1cbmVsc2Uge1xuICAgIC8vIEl0IGlzIG9ubHkgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpL2lPUyB0aGF0IGhhdmUgYSBiYWQgZmlsbCBpbXBsZW1lbnRhdGlvbiBhbmQgc28gYXJlbid0IGluIHRoZSB3aWxkXG4gICAgLy8gVG8gbWFrZSB0aGluZ3MgZWFzaWVyLCBpZiB0aGVyZSBpcyBhIGJhZCBmaWxsIGltcGxlbWVudGF0aW9uLCB0aGUgd2hvbGUgc2V0IG9mIGZ1bmN0aW9ucyB3aWxsIGJlIGZpbGxlZFxuICAgIC8qKlxuICAgICAqIEVuc3VyZXMgYSBub24tbmVnYXRpdmUsIG5vbi1pbmZpbml0ZSwgc2FmZSBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIHRvIHZhbGlkYXRlXG4gICAgICogQHJldHVybiBBIHByb3BlciBsZW5ndGhcbiAgICAgKi9cbiAgICBjb25zdCB0b0xlbmd0aCA9IGZ1bmN0aW9uIHRvTGVuZ3RoKGxlbmd0aCkge1xuICAgICAgICBpZiAoaXNOYU4obGVuZ3RoKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7XG4gICAgICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICAgICAgICBsZW5ndGggPSBNYXRoLmZsb29yKGxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5zdXJlIGEgbm9uLW5lZ2F0aXZlLCByZWFsLCBzYWZlIGludGVnZXJcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KGxlbmd0aCwgMCksIE1BWF9TQUZFX0lOVEVHRVIpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRnJvbSBFUzYgNy4xLjQgVG9JbnRlZ2VyKClcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIGNvbnZlcnRcbiAgICAgKiBAcmV0dXJuIEFuIGludGVnZXJcbiAgICAgKi9cbiAgICBjb25zdCB0b0ludGVnZXIgPSBmdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IDAgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodmFsdWUgPiAwID8gMSA6IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZXMgYW4gb2Zmc2V0IGFnYWluc3QgYSBnaXZlbiBsZW5ndGgsIHdyYXBwaW5nIGl0IGlmIG5lZ2F0aXZlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBvcmlnaW5hbCBvZmZzZXRcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSB0b3RhbCBsZW5ndGggdG8gbm9ybWFsaXplIGFnYWluc3RcbiAgICAgKiBAcmV0dXJuIElmIG5lZ2F0aXZlLCBwcm92aWRlIGEgZGlzdGFuY2UgZnJvbSB0aGUgZW5kIChsZW5ndGgpOyBvdGhlcndpc2UgcHJvdmlkZSBhIGRpc3RhbmNlIGZyb20gMFxuICAgICAqL1xuICAgIGNvbnN0IG5vcm1hbGl6ZU9mZnNldCA9IGZ1bmN0aW9uIG5vcm1hbGl6ZU9mZnNldCh2YWx1ZSwgbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA8IDAgPyBNYXRoLm1heChsZW5ndGggKyB2YWx1ZSwgMCkgOiBNYXRoLm1pbih2YWx1ZSwgbGVuZ3RoKTtcbiAgICB9O1xuICAgIGZyb20gPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSwgbWFwRnVuY3Rpb24sIHRoaXNBcmcpIHtcbiAgICAgICAgaWYgKGFycmF5TGlrZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmcm9tOiByZXF1aXJlcyBhbiBhcnJheS1saWtlIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXBGdW5jdGlvbiAmJiB0aGlzQXJnKSB7XG4gICAgICAgICAgICBtYXBGdW5jdGlvbiA9IG1hcEZ1bmN0aW9uLmJpbmQodGhpc0FyZyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cbiAgICAgICAgY29uc3QgQ29uc3RydWN0b3IgPSB0aGlzO1xuICAgICAgICBjb25zdCBsZW5ndGggPSB0b0xlbmd0aChhcnJheUxpa2UubGVuZ3RoKTtcbiAgICAgICAgLy8gU3VwcG9ydCBleHRlbnNpb25cbiAgICAgICAgY29uc3QgYXJyYXkgPSB0eXBlb2YgQ29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicgPyBPYmplY3QobmV3IENvbnN0cnVjdG9yKGxlbmd0aCkpIDogbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgICAgIGlmICghaXNBcnJheUxpa2UoYXJyYXlMaWtlKSAmJiAhaXNJdGVyYWJsZShhcnJheUxpa2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBhbmQgdGhlIG5vcm1hbGl6ZWQgbGVuZ3RoIGlzIDAsIGp1c3QgcmV0dXJuIGFuIGVtcHR5IGFycmF5LiB0aGlzIHByZXZlbnRzIGEgcHJvYmxlbVxuICAgICAgICAvLyB3aXRoIHRoZSBpdGVyYXRpb24gb24gSUUgd2hlbiB1c2luZyBhIE5hTiBhcnJheSBsZW5ndGguXG4gICAgICAgIGlmIChpc0FycmF5TGlrZShhcnJheUxpa2UpKSB7XG4gICAgICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheUxpa2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IG1hcEZ1bmN0aW9uID8gbWFwRnVuY3Rpb24oYXJyYXlMaWtlW2ldLCBpKSA6IGFycmF5TGlrZVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXJyYXlMaWtlKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBtYXBGdW5jdGlvbiA/IG1hcEZ1bmN0aW9uKHZhbHVlLCBpKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyYXlMaWtlLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhcnJheS5sZW5ndGggPSBsZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH07XG4gICAgb2YgPSBmdW5jdGlvbiBvZiguLi5pdGVtcykge1xuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaXRlbXMpO1xuICAgIH07XG4gICAgY29weVdpdGhpbiA9IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBvZmZzZXQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb3B5V2l0aGluOiB0YXJnZXQgbXVzdCBiZSBhbiBhcnJheS1saWtlIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xuICAgICAgICBvZmZzZXQgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKG9mZnNldCksIGxlbmd0aCk7XG4gICAgICAgIHN0YXJ0ID0gbm9ybWFsaXplT2Zmc2V0KHRvSW50ZWdlcihzdGFydCksIGxlbmd0aCk7XG4gICAgICAgIGVuZCA9IG5vcm1hbGl6ZU9mZnNldChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpLCBsZW5ndGgpO1xuICAgICAgICBsZXQgY291bnQgPSBNYXRoLm1pbihlbmQgLSBzdGFydCwgbGVuZ3RoIC0gb2Zmc2V0KTtcbiAgICAgICAgbGV0IGRpcmVjdGlvbiA9IDE7XG4gICAgICAgIGlmIChvZmZzZXQgPiBzdGFydCAmJiBvZmZzZXQgPCBzdGFydCArIGNvdW50KSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICAgICAgICAgIHN0YXJ0ICs9IGNvdW50IC0gMTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjb3VudCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNvdW50ID4gMCkge1xuICAgICAgICAgICAgaWYgKHN0YXJ0IGluIHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtvZmZzZXRdID0gdGFyZ2V0W3N0YXJ0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXRbb2Zmc2V0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCArPSBkaXJlY3Rpb247XG4gICAgICAgICAgICBzdGFydCArPSBkaXJlY3Rpb247XG4gICAgICAgICAgICBjb3VudC0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcbiAgICBmaWxsID0gZnVuY3Rpb24gZmlsbCh0YXJnZXQsIHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xuICAgICAgICBsZXQgaSA9IG5vcm1hbGl6ZU9mZnNldCh0b0ludGVnZXIoc3RhcnQpLCBsZW5ndGgpO1xuICAgICAgICBlbmQgPSBub3JtYWxpemVPZmZzZXQoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXIoZW5kKSwgbGVuZ3RoKTtcbiAgICAgICAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICAgICAgICAgIHRhcmdldFtpKytdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xuICAgIGZpbmQgPSBmdW5jdGlvbiBmaW5kKHRhcmdldCwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBmaW5kSW5kZXgodGFyZ2V0LCBjYWxsYmFjaywgdGhpc0FyZyk7XG4gICAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyB0YXJnZXRbaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgIH07XG4gICAgZmluZEluZGV4ID0gZnVuY3Rpb24gZmluZEluZGV4KHRhcmdldCwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ZpbmQ6IHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpc0FyZykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjay5iaW5kKHRoaXNBcmcpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayh0YXJnZXRbaV0sIGksIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfTtcbn1cbmlmICh0cnVlKSB7XG4gICAgaW5jbHVkZXMgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpO1xufVxuZWxzZSB7XG4gICAgLyoqXG4gICAgICogRW5zdXJlcyBhIG5vbi1uZWdhdGl2ZSwgbm9uLWluZmluaXRlLCBzYWZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgdG8gdmFsaWRhdGVcbiAgICAgKiBAcmV0dXJuIEEgcHJvcGVyIGxlbmd0aFxuICAgICAqL1xuICAgIGNvbnN0IHRvTGVuZ3RoID0gZnVuY3Rpb24gdG9MZW5ndGgobGVuZ3RoKSB7XG4gICAgICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpO1xuICAgICAgICBpZiAoaXNOYU4obGVuZ3RoKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgICAgICAgIGxlbmd0aCA9IE1hdGguZmxvb3IobGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgYSBub24tbmVnYXRpdmUsIHJlYWwsIHNhZmUgaW50ZWdlclxuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGVuZ3RoLCAwKSwgTUFYX1NBRkVfSU5URUdFUik7XG4gICAgfTtcbiAgICBpbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzKHRhcmdldCwgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4ID0gMCkge1xuICAgICAgICBsZXQgbGVuID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSBmcm9tSW5kZXg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSB0YXJnZXRbaV07XG4gICAgICAgICAgICBpZiAoc2VhcmNoRWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnQgfHxcbiAgICAgICAgICAgICAgICAoc2VhcmNoRWxlbWVudCAhPT0gc2VhcmNoRWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gY3VycmVudEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnJheS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9hcnJheS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vYXJyYXkubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiY29uc3QgZ2xvYmFsT2JqZWN0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gZ2xvYmFsIHNwZWMgZGVmaW5lcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdCBjYWxsZWQgJ2dsb2JhbCdcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG4gICAgICAgIC8vIGBnbG9iYWxgIGlzIGFsc28gZGVmaW5lZCBpbiBOb2RlSlNcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gd2luZG93IGlzIGRlZmluZWQgaW4gYnJvd3NlcnNcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIHNlbGYgaXMgZGVmaW5lZCBpbiBXZWJXb3JrZXJzXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbn0pKCk7XG5leHBvcnQgZGVmYXVsdCBnbG9iYWxPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iYWwubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vZ2xvYmFsLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9nbG9iYWwubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0ICcuL1N5bWJvbCc7XG5pbXBvcnQgeyBISUdIX1NVUlJPR0FURV9NQVgsIEhJR0hfU1VSUk9HQVRFX01JTiB9IGZyb20gJy4vc3RyaW5nJztcbmNvbnN0IHN0YXRpY0RvbmUgPSB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbi8qKlxuICogQSBjbGFzcyB0aGF0IF9zaGltc18gYW4gaXRlcmF0b3IgaW50ZXJmYWNlIG9uIGFycmF5IGxpa2Ugb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNoaW1JdGVyYXRvciB7XG4gICAgY29uc3RydWN0b3IobGlzdCkge1xuICAgICAgICB0aGlzLl9uZXh0SW5kZXggPSAtMTtcbiAgICAgICAgaWYgKGlzSXRlcmFibGUobGlzdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX25hdGl2ZUl0ZXJhdG9yID0gbGlzdFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ID0gbGlzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIG5leHQgaXRlcmF0aW9uIHJlc3VsdCBmb3IgdGhlIEl0ZXJhdG9yXG4gICAgICovXG4gICAgbmV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX25hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmF0aXZlSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fbGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRpY0RvbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCsrdGhpcy5fbmV4dEluZGV4IDwgdGhpcy5fbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2xpc3RbdGhpcy5fbmV4dEluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGljRG9uZTtcbiAgICB9XG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbi8qKlxuICogQSB0eXBlIGd1YXJkIGZvciBjaGVja2luZyBpZiBzb21ldGhpbmcgaGFzIGFuIEl0ZXJhYmxlIGludGVyZmFjZVxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHlwZSBndWFyZCBhZ2FpbnN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0l0ZXJhYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xufVxuLyoqXG4gKiBBIHR5cGUgZ3VhcmQgZm9yIGNoZWNraW5nIGlmIHNvbWV0aGluZyBpcyBBcnJheUxpa2VcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcic7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIGZvciBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gaXRlcmFibGUgVGhlIGl0ZXJhYmxlIG9iamVjdCB0byByZXR1cm4gdGhlIGl0ZXJhdG9yIGZvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGl0ZXJhYmxlKSB7XG4gICAgaWYgKGlzSXRlcmFibGUoaXRlcmFibGUpKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xuICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcihpdGVyYWJsZSk7XG4gICAgfVxufVxuLyoqXG4gKiBTaGltcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgZm9yIC4uLiBvZmAgYmxvY2tzXG4gKlxuICogQHBhcmFtIGl0ZXJhYmxlIFRoZSBvYmplY3QgdGhlIHByb3ZpZGVzIGFuIGludGVyYXRvciBpbnRlcmZhY2VcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggaXRlbSBvZiB0aGUgaXRlcmFibGVcbiAqIEBwYXJhbSB0aGlzQXJnIE9wdGlvbmFsIHNjb3BlIHRvIHBhc3MgdGhlIGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JPZihpdGVyYWJsZSwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBsZXQgYnJva2VuID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZG9CcmVhaygpIHtcbiAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICB9XG4gICAgLyogV2UgbmVlZCB0byBoYW5kbGUgaXRlcmF0aW9uIG9mIGRvdWJsZSBieXRlIHN0cmluZ3MgcHJvcGVybHkgKi9cbiAgICBpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpICYmIHR5cGVvZiBpdGVyYWJsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbCA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBjaGFyID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICBpZiAoaSArIDEgPCBsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSA+PSBISUdIX1NVUlJPR0FURV9NSU4gJiYgY29kZSA8PSBISUdIX1NVUlJPR0FURV9NQVgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhciArPSBpdGVyYWJsZVsrK2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgY2hhciwgaXRlcmFibGUsIGRvQnJlYWspO1xuICAgICAgICAgICAgaWYgKGJyb2tlbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBnZXQoaXRlcmFibGUpO1xuICAgICAgICBpZiAoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIGl0ZXJhYmxlLCBkb0JyZWFrKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlcmF0b3IubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vaXRlcmF0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2l0ZXJhdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuLyoqXG4gKiBUaGUgc21hbGxlc3QgaW50ZXJ2YWwgYmV0d2VlbiB0d28gcmVwcmVzZW50YWJsZSBudW1iZXJzLlxuICovXG5leHBvcnQgY29uc3QgRVBTSUxPTiA9IDE7XG4vKipcbiAqIFRoZSBtYXhpbXVtIHNhZmUgaW50ZWdlciBpbiBKYXZhU2NyaXB0XG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbi8qKlxuICogVGhlIG1pbmltdW0gc2FmZSBpbnRlZ2VyIGluIEphdmFTY3JpcHRcbiAqL1xuZXhwb3J0IGNvbnN0IE1JTl9TQUZFX0lOVEVHRVIgPSAtTUFYX1NBRkVfSU5URUdFUjtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgTmFOIHdpdGhvdXQgY29lcnNpb24uXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIE5hTiwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGdsb2JhbC5pc05hTih2YWx1ZSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGEgZmluaXRlIG51bWJlciB3aXRob3V0IGNvZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBmaW5pdGUsIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGaW5pdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBnbG9iYWwuaXNGaW5pdGUodmFsdWUpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLCBmYWxzZSBpZiBpdCBpcyBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyIHRoYXQgaXMgJ3NhZmUsJyBtZWFuaW5nOlxuICogICAxLiBpdCBjYW4gYmUgZXhwcmVzc2VkIGFzIGFuIElFRUUtNzU0IGRvdWJsZSBwcmVjaXNpb24gbnVtYmVyXG4gKiAgIDIuIGl0IGhhcyBhIG9uZS10by1vbmUgbWFwcGluZyB0byBhIG1hdGhlbWF0aWNhbCBpbnRlZ2VyLCBtZWFuaW5nIGl0c1xuICogICAgICBJRUVFLTc1NCByZXByZXNlbnRhdGlvbiBjYW5ub3QgYmUgdGhlIHJlc3VsdCBvZiByb3VuZGluZyBhbnkgb3RoZXJcbiAqICAgICAgaW50ZWdlciB0byBmaXQgdGhlIElFRUUtNzU0IHJlcHJlc2VudGF0aW9uXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIsIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTYWZlSW50ZWdlcih2YWx1ZSkge1xuICAgIHJldHVybiBpc0ludGVnZXIodmFsdWUpICYmIE1hdGguYWJzKHZhbHVlKSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bnVtYmVyLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL251bWJlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vbnVtYmVyLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcbmltcG9ydCB7IGlzU3ltYm9sIH0gZnJvbSAnLi9TeW1ib2wnO1xuZXhwb3J0IGxldCBhc3NpZ247XG4vKipcbiAqIEdldHMgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0LlxuICogQW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgaXMgb25lIHRoYXQgaXMgZGVmaW5lZCBkaXJlY3RseSBvbiB0aGUgb2JqZWN0IGFuZCBpcyBub3RcbiAqIGluaGVyaXRlZCBmcm9tIHRoZSBvYmplY3QncyBwcm90b3R5cGUuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydHkuXG4gKiBAcGFyYW0gcCBOYW1lIG9mIHRoZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBvd24gcHJvcGVydGllcyBvZiBhbiBvYmplY3QuIFRoZSBvd24gcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYXJlIHRob3NlIHRoYXQgYXJlIGRlZmluZWQgZGlyZWN0bHlcbiAqIG9uIHRoYXQgb2JqZWN0LCBhbmQgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSB0aGUgb2JqZWN0J3MgcHJvdG90eXBlLiBUaGUgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgaW5jbHVkZSBib3RoIGZpZWxkcyAob2JqZWN0cykgYW5kIGZ1bmN0aW9ucy5cbiAqIEBwYXJhbSBvIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBvd24gcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBzeW1ib2wgcHJvcGVydGllcyBmb3VuZCBkaXJlY3RseSBvbiBvYmplY3Qgby5cbiAqIEBwYXJhbSBvIE9iamVjdCB0byByZXRyaWV2ZSB0aGUgc3ltYm9scyBmcm9tLlxuICovXG5leHBvcnQgbGV0IGdldE93blByb3BlcnR5U3ltYm9scztcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAcGFyYW0gdmFsdWUxIFRoZSBmaXJzdCB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZTIgVGhlIHNlY29uZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGxldCBpcztcbi8qKlxuICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBvZiBhbiBvYmplY3QuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy4gVGhpcyBjYW4gYmUgYW4gb2JqZWN0IHRoYXQgeW91IGNyZWF0ZWQgb3IgYW4gZXhpc3RpbmcgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIG9iamVjdC5cbiAqL1xuZXhwb3J0IGxldCBrZXlzO1xuLyogRVM3IE9iamVjdCBzdGF0aWMgbWV0aG9kcyAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuZXhwb3J0IGxldCBlbnRyaWVzO1xuZXhwb3J0IGxldCB2YWx1ZXM7XG5pZiAodHJ1ZSkge1xuICAgIGNvbnN0IGdsb2JhbE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XG4gICAgYXNzaWduID0gZ2xvYmFsT2JqZWN0LmFzc2lnbjtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIGdldE93blByb3BlcnR5TmFtZXMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuICAgIGlzID0gZ2xvYmFsT2JqZWN0LmlzO1xuICAgIGtleXMgPSBnbG9iYWxPYmplY3Qua2V5cztcbn1cbmVsc2Uge1xuICAgIGtleXMgPSBmdW5jdGlvbiBzeW1ib2xBd2FyZUtleXMobykge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobykuZmlsdGVyKChrZXkpID0+ICFCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpO1xuICAgIH07XG4gICAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFR5cGVFcnJvciBpZiB1bmRlZmluZWQgb3IgbnVsbFxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG8gPSBPYmplY3QodGFyZ2V0KTtcbiAgICAgICAgc291cmNlcy5mb3JFYWNoKChuZXh0U291cmNlKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV4dFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciBpZiB1bmRlZmluZWQgb3IgbnVsbFxuICAgICAgICAgICAgICAgIGtleXMobmV4dFNvdXJjZSkuZm9yRWFjaCgobmV4dEtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdG87XG4gICAgfTtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCkge1xuICAgICAgICBpZiAoaXNTeW1ib2wocHJvcCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG8pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLmZpbHRlcigoa2V5KSA9PiAhQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKTtcbiAgICB9O1xuICAgIGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhvKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKVxuICAgICAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpXG4gICAgICAgICAgICAubWFwKChrZXkpID0+IFN5bWJvbC5mb3Ioa2V5LnN1YnN0cmluZygyKSkpO1xuICAgIH07XG4gICAgaXMgPSBmdW5jdGlvbiBpcyh2YWx1ZTEsIHZhbHVlMikge1xuICAgICAgICBpZiAodmFsdWUxID09PSB2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTEgIT09IDAgfHwgMSAvIHZhbHVlMSA9PT0gMSAvIHZhbHVlMjsgLy8gLTBcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUxICE9PSB2YWx1ZTEgJiYgdmFsdWUyICE9PSB2YWx1ZTI7IC8vIE5hTlxuICAgIH07XG59XG5pZiAodHJ1ZSkge1xuICAgIGNvbnN0IGdsb2JhbE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuICAgIGVudHJpZXMgPSBnbG9iYWxPYmplY3QuZW50cmllcztcbiAgICB2YWx1ZXMgPSBnbG9iYWxPYmplY3QudmFsdWVzO1xufVxuZWxzZSB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobykge1xuICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5yZWR1Y2UoKHByZXZpb3VzLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHByZXZpb3VzW2tleV0gPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobywga2V5KTtcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgfSwge30pO1xuICAgIH07XG4gICAgZW50cmllcyA9IGZ1bmN0aW9uIGVudHJpZXMobykge1xuICAgICAgICByZXR1cm4ga2V5cyhvKS5tYXAoKGtleSkgPT4gW2tleSwgb1trZXldXSk7XG4gICAgfTtcbiAgICB2YWx1ZXMgPSBmdW5jdGlvbiB2YWx1ZXMobykge1xuICAgICAgICByZXR1cm4ga2V5cyhvKS5tYXAoKGtleSkgPT4gb1trZXldKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL29iamVjdC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcbmltcG9ydCB7IHdyYXBOYXRpdmUgfSBmcm9tICcuL3N1cHBvcnQvdXRpbCc7XG4vKipcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xuICovXG5leHBvcnQgY29uc3QgSElHSF9TVVJST0dBVEVfTUlOID0gMHhkODAwO1xuLyoqXG4gKiBUaGUgbWF4aW11bSBsb2NhdGlvbiBvZiBoaWdoIHN1cnJvZ2F0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IEhJR0hfU1VSUk9HQVRFX01BWCA9IDB4ZGJmZjtcbi8qKlxuICogVGhlIG1pbmltdW0gbG9jYXRpb24gb2YgbG93IHN1cnJvZ2F0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IExPV19TVVJST0dBVEVfTUlOID0gMHhkYzAwO1xuLyoqXG4gKiBUaGUgbWF4aW11bSBsb2NhdGlvbiBvZiBsb3cgc3Vycm9nYXRlc1xuICovXG5leHBvcnQgY29uc3QgTE9XX1NVUlJPR0FURV9NQVggPSAweGRmZmY7XG4vKiBFUzYgc3RhdGljIG1ldGhvZHMgKi9cbi8qKlxuICogUmV0dXJuIHRoZSBTdHJpbmcgdmFsdWUgd2hvc2UgZWxlbWVudHMgYXJlLCBpbiBvcmRlciwgdGhlIGVsZW1lbnRzIGluIHRoZSBMaXN0IGVsZW1lbnRzLlxuICogSWYgbGVuZ3RoIGlzIDAsIHRoZSBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0gY29kZVBvaW50cyBUaGUgY29kZSBwb2ludHMgdG8gZ2VuZXJhdGUgdGhlIHN0cmluZ1xuICovXG5leHBvcnQgbGV0IGZyb21Db2RlUG9pbnQ7XG4vKipcbiAqIGByYXdgIGlzIGludGVuZGVkIGZvciB1c2UgYXMgYSB0YWcgZnVuY3Rpb24gb2YgYSBUYWdnZWQgVGVtcGxhdGUgU3RyaW5nLiBXaGVuIGNhbGxlZFxuICogYXMgc3VjaCB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhIHdlbGwgZm9ybWVkIHRlbXBsYXRlIGNhbGwgc2l0ZSBvYmplY3QgYW5kIHRoZSByZXN0XG4gKiBwYXJhbWV0ZXIgd2lsbCBjb250YWluIHRoZSBzdWJzdGl0dXRpb24gdmFsdWVzLlxuICogQHBhcmFtIHRlbXBsYXRlIEEgd2VsbC1mb3JtZWQgdGVtcGxhdGUgc3RyaW5nIGNhbGwgc2l0ZSByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSBzdWJzdGl0dXRpb25zIEEgc2V0IG9mIHN1YnN0aXR1dGlvbiB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBsZXQgcmF3O1xuLyogRVM2IGluc3RhbmNlIG1ldGhvZHMgKi9cbi8qKlxuICogUmV0dXJucyBhIG5vbm5lZ2F0aXZlIGludGVnZXIgTnVtYmVyIGxlc3MgdGhhbiAxMTE0MTEyICgweDExMDAwMCkgdGhhdCBpcyB0aGUgY29kZSBwb2ludFxuICogdmFsdWUgb2YgdGhlIFVURi0xNiBlbmNvZGVkIGNvZGUgcG9pbnQgc3RhcnRpbmcgYXQgdGhlIHN0cmluZyBlbGVtZW50IGF0IHBvc2l0aW9uIHBvcyBpblxuICogdGhlIFN0cmluZyByZXN1bHRpbmcgZnJvbSBjb252ZXJ0aW5nIHRoaXMgb2JqZWN0IHRvIGEgU3RyaW5nLlxuICogSWYgdGhlcmUgaXMgbm8gZWxlbWVudCBhdCB0aGF0IHBvc2l0aW9uLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC5cbiAqIElmIGEgdmFsaWQgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyIGRvZXMgbm90IGJlZ2luIGF0IHBvcywgdGhlIHJlc3VsdCBpcyB0aGUgY29kZSB1bml0IGF0IHBvcy5cbiAqL1xuZXhwb3J0IGxldCBjb2RlUG9pbnRBdDtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBvZiBzZWFyY2hTdHJpbmcgY29udmVydGVkIHRvIGEgU3RyaW5nIGlzIHRoZVxuICogc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0aGlzIG9iamVjdCAoY29udmVydGVkIHRvIGEgU3RyaW5nKSBzdGFydGluZyBhdFxuICogZW5kUG9zaXRpb24g4oCTIGxlbmd0aCh0aGlzKS4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gKi9cbmV4cG9ydCBsZXQgZW5kc1dpdGg7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBzZWFyY2hTdHJpbmcgYXBwZWFycyBhcyBhIHN1YnN0cmluZyBvZiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdGhpc1xuICogb2JqZWN0IHRvIGEgU3RyaW5nLCBhdCBvbmUgb3IgbW9yZSBwb3NpdGlvbnMgdGhhdCBhcmVcbiAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBwb3NpdGlvbjsgb3RoZXJ3aXNlLCByZXR1cm5zIGZhbHNlLlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xuICogQHBhcmFtIHNlYXJjaFN0cmluZyBzZWFyY2ggc3RyaW5nXG4gKiBAcGFyYW0gcG9zaXRpb24gSWYgcG9zaXRpb24gaXMgdW5kZWZpbmVkLCAwIGlzIGFzc3VtZWQsIHNvIGFzIHRvIHNlYXJjaCBhbGwgb2YgdGhlIFN0cmluZy5cbiAqL1xuZXhwb3J0IGxldCBpbmNsdWRlcztcbi8qKlxuICogUmV0dXJucyB0aGUgU3RyaW5nIHZhbHVlIHJlc3VsdCBvZiBub3JtYWxpemluZyB0aGUgc3RyaW5nIGludG8gdGhlIG5vcm1hbGl6YXRpb24gZm9ybVxuICogbmFtZWQgYnkgZm9ybSBhcyBzcGVjaWZpZWQgaW4gVW5pY29kZSBTdGFuZGFyZCBBbm5leCAjMTUsIFVuaWNvZGUgTm9ybWFsaXphdGlvbiBGb3Jtcy5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcbiAqIEBwYXJhbSBmb3JtIEFwcGxpY2FibGUgdmFsdWVzOiBcIk5GQ1wiLCBcIk5GRFwiLCBcIk5GS0NcIiwgb3IgXCJORktEXCIsIElmIG5vdCBzcGVjaWZpZWQgZGVmYXVsdFxuICogaXMgXCJORkNcIlxuICovXG5leHBvcnQgbGV0IG5vcm1hbGl6ZTtcbi8qKlxuICogUmV0dXJucyBhIFN0cmluZyB2YWx1ZSB0aGF0IGlzIG1hZGUgZnJvbSBjb3VudCBjb3BpZXMgYXBwZW5kZWQgdG9nZXRoZXIuIElmIGNvdW50IGlzIDAsXG4gKiBUIGlzIHRoZSBlbXB0eSBTdHJpbmcgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0gY291bnQgbnVtYmVyIG9mIGNvcGllcyB0byBhcHBlbmRcbiAqL1xuZXhwb3J0IGxldCByZXBlYXQ7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcbiAqIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhpcyBvYmplY3QgKGNvbnZlcnRlZCB0byBhIFN0cmluZykgc3RhcnRpbmcgYXRcbiAqIHBvc2l0aW9uLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAqL1xuZXhwb3J0IGxldCBzdGFydHNXaXRoO1xuLyogRVM3IGluc3RhbmNlIG1ldGhvZHMgKi9cbi8qKlxuICogUGFkcyB0aGUgY3VycmVudCBzdHJpbmcgd2l0aCBhIGdpdmVuIHN0cmluZyAocG9zc2libHkgcmVwZWF0ZWQpIHNvIHRoYXQgdGhlIHJlc3VsdGluZyBzdHJpbmcgcmVhY2hlcyBhIGdpdmVuIGxlbmd0aC5cbiAqIFRoZSBwYWRkaW5nIGlzIGFwcGxpZWQgZnJvbSB0aGUgZW5kIChyaWdodCkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcbiAqIEBwYXJhbSBtYXhMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBvbmNlIHRoZSBjdXJyZW50IHN0cmluZyBoYXMgYmVlbiBwYWRkZWQuXG4gKiAgICAgICAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHN0cmluZydzIGxlbmd0aCwgdGhlIGN1cnJlbnQgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQgYXMgaXQgaXMuXG4gKlxuICogQHBhcmFtIGZpbGxTdHJpbmcgVGhlIHN0cmluZyB0byBwYWQgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGguXG4gKiAgICAgICAgSWYgdGhpcyBzdHJpbmcgaXMgdG9vIGxvbmcsIGl0IHdpbGwgYmUgdHJ1bmNhdGVkIGFuZCB0aGUgbGVmdC1tb3N0IHBhcnQgd2lsbCBiZSBhcHBsaWVkLlxuICogICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyBcIiBcIiAoVSswMDIwKS5cbiAqL1xuZXhwb3J0IGxldCBwYWRFbmQ7XG4vKipcbiAqIFBhZHMgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGggYSBnaXZlbiBzdHJpbmcgKHBvc3NpYmx5IHJlcGVhdGVkKSBzbyB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIHJlYWNoZXMgYSBnaXZlbiBsZW5ndGguXG4gKiBUaGUgcGFkZGluZyBpcyBhcHBsaWVkIGZyb20gdGhlIHN0YXJ0IChsZWZ0KSBvZiB0aGUgY3VycmVudCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xuICogQHBhcmFtIG1heExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9uY2UgdGhlIGN1cnJlbnQgc3RyaW5nIGhhcyBiZWVuIHBhZGRlZC5cbiAqICAgICAgICBJZiB0aGlzIHBhcmFtZXRlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgc3RyaW5nJ3MgbGVuZ3RoLCB0aGUgY3VycmVudCBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZCBhcyBpdCBpcy5cbiAqXG4gKiBAcGFyYW0gZmlsbFN0cmluZyBUaGUgc3RyaW5nIHRvIHBhZCB0aGUgY3VycmVudCBzdHJpbmcgd2l0aC5cbiAqICAgICAgICBJZiB0aGlzIHN0cmluZyBpcyB0b28gbG9uZywgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYW5kIHRoZSBsZWZ0LW1vc3QgcGFydCB3aWxsIGJlIGFwcGxpZWQuXG4gKiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIFwiIFwiIChVKzAwMjApLlxuICovXG5leHBvcnQgbGV0IHBhZFN0YXJ0O1xuaWYgKHRydWUgJiYgdHJ1ZSkge1xuICAgIGZyb21Db2RlUG9pbnQgPSBnbG9iYWwuU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG4gICAgcmF3ID0gZ2xvYmFsLlN0cmluZy5yYXc7XG4gICAgY29kZVBvaW50QXQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KTtcbiAgICBlbmRzV2l0aCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgpO1xuICAgIGluY2x1ZGVzID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyk7XG4gICAgbm9ybWFsaXplID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5ub3JtYWxpemUpO1xuICAgIHJlcGVhdCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucmVwZWF0KTtcbiAgICBzdGFydHNXaXRoID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKTtcbn1cbmVsc2Uge1xuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyB0aGF0IHRleHQgaXMgZGVmaW5lZCwgYW5kIG5vcm1hbGl6ZXMgcG9zaXRpb24gKGJhc2VkIG9uIHRoZSBnaXZlbiBkZWZhdWx0IGlmIHRoZSBpbnB1dCBpcyBOYU4pLlxuICAgICAqIFVzZWQgYnkgc3RhcnRzV2l0aCwgaW5jbHVkZXMsIGFuZCBlbmRzV2l0aC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gTm9ybWFsaXplZCBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdCBub3JtYWxpemVTdWJzdHJpbmdBcmdzID0gZnVuY3Rpb24gKG5hbWUsIHRleHQsIHNlYXJjaCwgcG9zaXRpb24sIGlzRW5kID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLicgKyBuYW1lICsgJyByZXF1aXJlcyBhIHZhbGlkIHN0cmluZyB0byBzZWFyY2ggYWdhaW5zdC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAhPT0gcG9zaXRpb24gPyAoaXNFbmQgPyBsZW5ndGggOiAwKSA6IHBvc2l0aW9uO1xuICAgICAgICByZXR1cm4gW3RleHQsIFN0cmluZyhzZWFyY2gpLCBNYXRoLm1pbihNYXRoLm1heChwb3NpdGlvbiwgMCksIGxlbmd0aCldO1xuICAgIH07XG4gICAgZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cykge1xuICAgICAgICAvLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLmZyb21Db2RlUG9pbnRcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICAgICAgICBjb25zdCBNQVhfU0laRSA9IDB4NDAwMDtcbiAgICAgICAgbGV0IGNvZGVVbml0cyA9IFtdO1xuICAgICAgICBsZXQgaW5kZXggPSAtMTtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGNvZGVQb2ludCA9IE51bWJlcihhcmd1bWVudHNbaW5kZXhdKTtcbiAgICAgICAgICAgIC8vIENvZGUgcG9pbnRzIG11c3QgYmUgZmluaXRlIGludGVnZXJzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2VcbiAgICAgICAgICAgIGxldCBpc1ZhbGlkID0gaXNGaW5pdGUoY29kZVBvaW50KSAmJiBNYXRoLmZsb29yKGNvZGVQb2ludCkgPT09IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPj0gMCAmJiBjb2RlUG9pbnQgPD0gMHgxMGZmZmY7XG4gICAgICAgICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdzdHJpbmcuZnJvbUNvZGVQb2ludDogSW52YWxpZCBjb2RlIHBvaW50ICcgKyBjb2RlUG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweGZmZmYpIHtcbiAgICAgICAgICAgICAgICAvLyBCTVAgY29kZSBwb2ludFxuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW4gc3Vycm9nYXRlIGhhbHZlc1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuICAgICAgICAgICAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwO1xuICAgICAgICAgICAgICAgIGxldCBoaWdoU3Vycm9nYXRlID0gKGNvZGVQb2ludCA+PiAxMCkgKyBISUdIX1NVUlJPR0FURV9NSU47XG4gICAgICAgICAgICAgICAgbGV0IGxvd1N1cnJvZ2F0ZSA9IGNvZGVQb2ludCAlIDB4NDAwICsgTE9XX1NVUlJPR0FURV9NSU47XG4gICAgICAgICAgICAgICAgY29kZVVuaXRzLnB1c2goaGlnaFN1cnJvZ2F0ZSwgbG93U3Vycm9nYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmRleCArIDEgPT09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cyk7XG4gICAgICAgICAgICAgICAgY29kZVVuaXRzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIHJhdyA9IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucykge1xuICAgICAgICBsZXQgcmF3U3RyaW5ncyA9IGNhbGxTaXRlLnJhdztcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBsZXQgbnVtU3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnMubGVuZ3RoO1xuICAgICAgICBpZiAoY2FsbFNpdGUgPT0gbnVsbCB8fCBjYWxsU2l0ZS5yYXcgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJhdyByZXF1aXJlcyBhIHZhbGlkIGNhbGxTaXRlIG9iamVjdCB3aXRoIGEgcmF3IHZhbHVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IHJhd1N0cmluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSByYXdTdHJpbmdzW2ldICsgKGkgPCBudW1TdWJzdGl0dXRpb25zICYmIGkgPCBsZW5ndGggLSAxID8gc3Vic3RpdHV0aW9uc1tpXSA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29kZVBvaW50QXQgPSBmdW5jdGlvbiBjb2RlUG9pbnRBdCh0ZXh0LCBwb3NpdGlvbiA9IDApIHtcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLmNvZGVQb2ludEF0IHJlcXVyaWVzIGEgdmFsaWQgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRleHQubGVuZ3RoO1xuICAgICAgICBpZiAocG9zaXRpb24gIT09IHBvc2l0aW9uKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR2V0IHRoZSBmaXJzdCBjb2RlIHVuaXRcbiAgICAgICAgY29uc3QgZmlyc3QgPSB0ZXh0LmNoYXJDb2RlQXQocG9zaXRpb24pO1xuICAgICAgICBpZiAoZmlyc3QgPj0gSElHSF9TVVJST0dBVEVfTUlOICYmIGZpcnN0IDw9IEhJR0hfU1VSUk9HQVRFX01BWCAmJiBsZW5ndGggPiBwb3NpdGlvbiArIDEpIHtcbiAgICAgICAgICAgIC8vIFN0YXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIgKGhpZ2ggc3Vycm9nYXRlIGFuZCB0aGVyZSBpcyBhIG5leHQgY29kZSB1bml0KTsgY2hlY2sgZm9yIGxvdyBzdXJyb2dhdGVcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSk7XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IExPV19TVVJST0dBVEVfTUlOICYmIHNlY29uZCA8PSBMT1dfU1VSUk9HQVRFX01BWCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoZmlyc3QgLSBISUdIX1NVUlJPR0FURV9NSU4pICogMHg0MDAgKyBzZWNvbmQgLSBMT1dfU1VSUk9HQVRFX01JTiArIDB4MTAwMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0O1xuICAgIH07XG4gICAgZW5kc1dpdGggPSBmdW5jdGlvbiBlbmRzV2l0aCh0ZXh0LCBzZWFyY2gsIGVuZFBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChlbmRQb3NpdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHRleHQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIFt0ZXh0LCBzZWFyY2gsIGVuZFBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ2VuZHNXaXRoJywgdGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZW5kUG9zaXRpb24gLSBzZWFyY2gubGVuZ3RoO1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2Uoc3RhcnQsIGVuZFBvc2l0aW9uKSA9PT0gc2VhcmNoO1xuICAgIH07XG4gICAgaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uID0gMCkge1xuICAgICAgICBbdGV4dCwgc2VhcmNoLCBwb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdpbmNsdWRlcycsIHRleHQsIHNlYXJjaCwgcG9zaXRpb24pO1xuICAgICAgICByZXR1cm4gdGV4dC5pbmRleE9mKHNlYXJjaCwgcG9zaXRpb24pICE9PSAtMTtcbiAgICB9O1xuICAgIHJlcGVhdCA9IGZ1bmN0aW9uIHJlcGVhdCh0ZXh0LCBjb3VudCA9IDApIHtcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUucmVwZWF0XG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50ICE9PSBjb3VudCkge1xuICAgICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICB3aGlsZSAoY291bnQpIHtcbiAgICAgICAgICAgIGlmIChjb3VudCAlIDIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gdGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ICs9IHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3VudCA+Pj0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIHN0YXJ0c1dpdGgodGV4dCwgc2VhcmNoLCBwb3NpdGlvbiA9IDApIHtcbiAgICAgICAgc2VhcmNoID0gU3RyaW5nKHNlYXJjaCk7XG4gICAgICAgIFt0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ3N0YXJ0c1dpdGgnLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgZW5kID0gcG9zaXRpb24gKyBzZWFyY2gubGVuZ3RoO1xuICAgICAgICBpZiAoZW5kID4gdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dC5zbGljZShwb3NpdGlvbiwgZW5kKSA9PT0gc2VhcmNoO1xuICAgIH07XG59XG5pZiAodHJ1ZSkge1xuICAgIHBhZEVuZCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucGFkRW5kKTtcbiAgICBwYWRTdGFydCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQpO1xufVxuZWxzZSB7XG4gICAgcGFkRW5kID0gZnVuY3Rpb24gcGFkRW5kKHRleHQsIG1heExlbmd0aCwgZmlsbFN0cmluZyA9ICcgJykge1xuICAgICAgICBpZiAodGV4dCA9PT0gbnVsbCB8fCB0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdHJpbmcucGFkRW5kIHJlcXVpcmVzIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSBjb3VudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSBudWxsIHx8IG1heExlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IG1heExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIG1heExlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0clRleHQgPSBTdHJpbmcodGV4dCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBtYXhMZW5ndGggLSBzdHJUZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHBhZGRpbmcgPiAwKSB7XG4gICAgICAgICAgICBzdHJUZXh0ICs9XG4gICAgICAgICAgICAgICAgcmVwZWF0KGZpbGxTdHJpbmcsIE1hdGguZmxvb3IocGFkZGluZyAvIGZpbGxTdHJpbmcubGVuZ3RoKSkgK1xuICAgICAgICAgICAgICAgICAgICBmaWxsU3RyaW5nLnNsaWNlKDAsIHBhZGRpbmcgJSBmaWxsU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0clRleHQ7XG4gICAgfTtcbiAgICBwYWRTdGFydCA9IGZ1bmN0aW9uIHBhZFN0YXJ0KHRleHQsIG1heExlbmd0aCwgZmlsbFN0cmluZyA9ICcgJykge1xuICAgICAgICBpZiAodGV4dCA9PT0gbnVsbCB8fCB0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdHJpbmcucGFkU3RhcnQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IG51bGwgfHwgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbWF4TGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgbWF4TGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RyVGV4dCA9IFN0cmluZyh0ZXh0KTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IG1heExlbmd0aCAtIHN0clRleHQubGVuZ3RoO1xuICAgICAgICBpZiAocGFkZGluZyA+IDApIHtcbiAgICAgICAgICAgIHN0clRleHQgPVxuICAgICAgICAgICAgICAgIHJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0cmluZy5zbGljZSgwLCBwYWRkaW5nICUgZmlsbFN0cmluZy5sZW5ndGgpICtcbiAgICAgICAgICAgICAgICAgICAgc3RyVGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyVGV4dDtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RyaW5nLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N0cmluZy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3RyaW5nLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBoYXMsIHsgYWRkIH0gZnJvbSAnQGRvam8vaGFzL2hhcyc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJy4uL2dsb2JhbCc7XG5leHBvcnQgZGVmYXVsdCBoYXM7XG5leHBvcnQgKiBmcm9tICdAZG9qby9oYXMvaGFzJztcbi8qIEVDTUFTY3JpcHQgNiBhbmQgNyBGZWF0dXJlcyAqL1xuLyogQXJyYXkgKi9cbmFkZCgnZXM2LWFycmF5JywgKCkgPT4ge1xuICAgIHJldHVybiAoWydmcm9tJywgJ29mJ10uZXZlcnkoKGtleSkgPT4ga2V5IGluIGdsb2JhbC5BcnJheSkgJiZcbiAgICAgICAgWydmaW5kSW5kZXgnLCAnZmluZCcsICdjb3B5V2l0aGluJ10uZXZlcnkoKGtleSkgPT4ga2V5IGluIGdsb2JhbC5BcnJheS5wcm90b3R5cGUpKTtcbn0sIHRydWUpO1xuYWRkKCdlczYtYXJyYXktZmlsbCcsICgpID0+IHtcbiAgICBpZiAoJ2ZpbGwnIGluIGdsb2JhbC5BcnJheS5wcm90b3R5cGUpIHtcbiAgICAgICAgLyogU29tZSB2ZXJzaW9ucyBvZiBTYWZhcmkgZG8gbm90IHByb3Blcmx5IGltcGxlbWVudCB0aGlzICovXG4gICAgICAgIHJldHVybiBbMV0uZmlsbCg5LCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpWzBdID09PSAxO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59LCB0cnVlKTtcbmFkZCgnZXM3LWFycmF5JywgKCkgPT4gJ2luY2x1ZGVzJyBpbiBnbG9iYWwuQXJyYXkucHJvdG90eXBlLCB0cnVlKTtcbi8qIE1hcCAqL1xuYWRkKCdlczYtbWFwJywgKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsLk1hcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvKlxuICAgIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgTWFwIGZ1bmN0aW9uYWxpdHlcbiAgICBXZSB3cmFwIHRoaXMgaW4gYSB0cnkvY2F0Y2ggYmVjYXVzZSBzb21ldGltZXMgdGhlIE1hcCBjb25zdHJ1Y3RvciBleGlzdHMsIGJ1dCBkb2VzIG5vdFxuICAgIHRha2UgYXJndW1lbnRzIChpT1MgOC40KVxuICAgICAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbWFwID0gbmV3IGdsb2JhbC5NYXAoW1swLCAxXV0pO1xuICAgICAgICAgICAgcmV0dXJuIG1hcC5oYXMoMCkgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWFwLmtleXMgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0cnVlICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hcC52YWx1ZXMgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWFwLmVudHJpZXMgPT09ICdmdW5jdGlvbic7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBub3QgdGVzdGluZyBvbiBpT1MgYXQgdGhlIG1vbWVudCAqL1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn0sIHRydWUpO1xuLyogTWF0aCAqL1xuYWRkKCdlczYtbWF0aCcsICgpID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnY2x6MzInLFxuICAgICAgICAnc2lnbicsXG4gICAgICAgICdsb2cxMCcsXG4gICAgICAgICdsb2cyJyxcbiAgICAgICAgJ2xvZzFwJyxcbiAgICAgICAgJ2V4cG0xJyxcbiAgICAgICAgJ2Nvc2gnLFxuICAgICAgICAnc2luaCcsXG4gICAgICAgICd0YW5oJyxcbiAgICAgICAgJ2Fjb3NoJyxcbiAgICAgICAgJ2FzaW5oJyxcbiAgICAgICAgJ2F0YW5oJyxcbiAgICAgICAgJ3RydW5jJyxcbiAgICAgICAgJ2Zyb3VuZCcsXG4gICAgICAgICdjYnJ0JyxcbiAgICAgICAgJ2h5cG90J1xuICAgIF0uZXZlcnkoKG5hbWUpID0+IHR5cGVvZiBnbG9iYWwuTWF0aFtuYW1lXSA9PT0gJ2Z1bmN0aW9uJyk7XG59LCB0cnVlKTtcbmFkZCgnZXM2LW1hdGgtaW11bCcsICgpID0+IHtcbiAgICBpZiAoJ2ltdWwnIGluIGdsb2JhbC5NYXRoKSB7XG4gICAgICAgIC8qIFNvbWUgdmVyc2lvbnMgb2YgU2FmYXJpIG9uIGlvcyBkbyBub3QgcHJvcGVybHkgaW1wbGVtZW50IHRoaXMgKi9cbiAgICAgICAgcmV0dXJuIE1hdGguaW11bCgweGZmZmZmZmZmLCA1KSA9PT0gLTU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn0sIHRydWUpO1xuLyogT2JqZWN0ICovXG5hZGQoJ2VzNi1vYmplY3QnLCAoKSA9PiB7XG4gICAgcmV0dXJuIHRydWUgJiZcbiAgICAgICAgWydhc3NpZ24nLCAnaXMnLCAnZ2V0T3duUHJvcGVydHlTeW1ib2xzJywgJ3NldFByb3RvdHlwZU9mJ10uZXZlcnkoKG5hbWUpID0+IHR5cGVvZiBnbG9iYWwuT2JqZWN0W25hbWVdID09PSAnZnVuY3Rpb24nKTtcbn0sIHRydWUpO1xuYWRkKCdlczIwMTctb2JqZWN0JywgKCkgPT4ge1xuICAgIHJldHVybiBbJ3ZhbHVlcycsICdlbnRyaWVzJywgJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMnXS5ldmVyeSgobmFtZSkgPT4gdHlwZW9mIGdsb2JhbC5PYmplY3RbbmFtZV0gPT09ICdmdW5jdGlvbicpO1xufSwgdHJ1ZSk7XG4vKiBPYnNlcnZhYmxlICovXG5hZGQoJ2VzLW9ic2VydmFibGUnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLk9ic2VydmFibGUgIT09ICd1bmRlZmluZWQnLCB0cnVlKTtcbi8qIFByb21pc2UgKi9cbmFkZCgnZXM2LXByb21pc2UnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLlByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIHRydWUsIHRydWUpO1xuLyogU2V0ICovXG5hZGQoJ2VzNi1zZXQnLCAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuU2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8qIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgU2V0IGZ1bmN0aW9uYWxpdHkgKi9cbiAgICAgICAgY29uc3Qgc2V0ID0gbmV3IGdsb2JhbC5TZXQoWzFdKTtcbiAgICAgICAgcmV0dXJuIHNldC5oYXMoMSkgJiYgJ2tleXMnIGluIHNldCAmJiB0eXBlb2Ygc2V0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufSwgdHJ1ZSk7XG4vKiBTdHJpbmcgKi9cbmFkZCgnZXM2LXN0cmluZycsICgpID0+IHtcbiAgICByZXR1cm4gKFtcbiAgICAgICAgLyogc3RhdGljIG1ldGhvZHMgKi9cbiAgICAgICAgJ2Zyb21Db2RlUG9pbnQnXG4gICAgXS5ldmVyeSgoa2V5KSA9PiB0eXBlb2YgZ2xvYmFsLlN0cmluZ1trZXldID09PSAnZnVuY3Rpb24nKSAmJlxuICAgICAgICBbXG4gICAgICAgICAgICAvKiBpbnN0YW5jZSBtZXRob2RzICovXG4gICAgICAgICAgICAnY29kZVBvaW50QXQnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAncmVwZWF0JyxcbiAgICAgICAgICAgICdzdGFydHNXaXRoJyxcbiAgICAgICAgICAgICdlbmRzV2l0aCcsXG4gICAgICAgICAgICAnaW5jbHVkZXMnXG4gICAgICAgIF0uZXZlcnkoKGtleSkgPT4gdHlwZW9mIGdsb2JhbC5TdHJpbmcucHJvdG90eXBlW2tleV0gPT09ICdmdW5jdGlvbicpKTtcbn0sIHRydWUpO1xuYWRkKCdlczYtc3RyaW5nLXJhdycsICgpID0+IHtcbiAgICBmdW5jdGlvbiBnZXRDYWxsU2l0ZShjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uY2FsbFNpdGVdO1xuICAgICAgICByZXN1bHQucmF3ID0gY2FsbFNpdGUucmF3O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAoJ3JhdycgaW4gZ2xvYmFsLlN0cmluZykge1xuICAgICAgICBsZXQgYiA9IDE7XG4gICAgICAgIGxldCBjYWxsU2l0ZSA9IGdldENhbGxTaXRlIGBhXFxuJHtifWA7XG4gICAgICAgIGNhbGxTaXRlLnJhdyA9IFsnYVxcXFxuJ107XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzVHJ1bmMgPSBnbG9iYWwuU3RyaW5nLnJhdyhjYWxsU2l0ZSwgNDIpID09PSAnYTpcXFxcbic7XG4gICAgICAgIHJldHVybiBzdXBwb3J0c1RydW5jO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59LCB0cnVlKTtcbmFkZCgnZXMyMDE3LXN0cmluZycsICgpID0+IHtcbiAgICByZXR1cm4gWydwYWRTdGFydCcsICdwYWRFbmQnXS5ldmVyeSgoa2V5KSA9PiB0eXBlb2YgZ2xvYmFsLlN0cmluZy5wcm90b3R5cGVba2V5XSA9PT0gJ2Z1bmN0aW9uJyk7XG59LCB0cnVlKTtcbi8qIFN5bWJvbCAqL1xuYWRkKCdlczYtc3ltYm9sJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5TeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBTeW1ib2woKSA9PT0gJ3N5bWJvbCcsIHRydWUpO1xuLyogV2Vha01hcCAqL1xuYWRkKCdlczYtd2Vha21hcCcsICgpID0+IHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5XZWFrTWFwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvKiBJRTExIGFuZCBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkgYXJlIG1pc3NpbmcgY3JpdGljYWwgRVM2IE1hcCBmdW5jdGlvbmFsaXR5ICovXG4gICAgICAgIGNvbnN0IGtleTEgPSB7fTtcbiAgICAgICAgY29uc3Qga2V5MiA9IHt9O1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgZ2xvYmFsLldlYWtNYXAoW1trZXkxLCAxXV0pO1xuICAgICAgICBPYmplY3QuZnJlZXplKGtleTEpO1xuICAgICAgICByZXR1cm4gbWFwLmdldChrZXkxKSA9PT0gMSAmJiBtYXAuc2V0KGtleTIsIDIpID09PSBtYXAgJiYgdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufSwgdHJ1ZSk7XG4vKiBNaXNjZWxsYW5lb3VzIGZlYXR1cmVzICovXG5hZGQoJ21pY3JvdGFza3MnLCAoKSA9PiB0cnVlIHx8IGZhbHNlIHx8IHRydWUsIHRydWUpO1xuYWRkKCdwb3N0bWVzc2FnZScsICgpID0+IHtcbiAgICAvLyBJZiB3aW5kb3cgaXMgdW5kZWZpbmVkLCBhbmQgd2UgaGF2ZSBwb3N0TWVzc2FnZSwgaXQgcHJvYmFibHkgbWVhbnMgd2UncmUgaW4gYSB3ZWIgd29ya2VyLiBXZWIgd29ya2VycyBoYXZlXG4gICAgLy8gcG9zdCBtZXNzYWdlIGJ1dCBpdCBkb2Vzbid0IHdvcmsgaG93IHdlIGV4cGVjdCBpdCB0bywgc28gaXQncyBiZXN0IGp1c3QgdG8gcHJldGVuZCBpdCBkb2Vzbid0IGV4aXN0LlxuICAgIHJldHVybiB0eXBlb2YgZ2xvYmFsLndpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGdsb2JhbC5wb3N0TWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJztcbn0sIHRydWUpO1xuYWRkKCdyYWYnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJywgdHJ1ZSk7XG5hZGQoJ3NldGltbWVkaWF0ZScsICgpID0+IHR5cGVvZiBnbG9iYWwuc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJywgdHJ1ZSk7XG4vKiBET00gRmVhdHVyZXMgKi9cbmFkZCgnZG9tLW11dGF0aW9ub2JzZXJ2ZXInLCAoKSA9PiB7XG4gICAgaWYgKHRydWUgJiYgQm9vbGVhbihnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcikpIHtcbiAgICAgICAgLy8gSUUxMSBoYXMgYW4gdW5yZWxpYWJsZSBNdXRhdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uIHdoZXJlIHNldFByb3BlcnR5KCkgZG9lcyBub3RcbiAgICAgICAgLy8gZ2VuZXJhdGUgYSBtdXRhdGlvbiBldmVudCwgb2JzZXJ2ZXJzIGNhbiBjcmFzaCwgYW5kIHRoZSBxdWV1ZSBkb2VzIG5vdCBkcmFpblxuICAgICAgICAvLyByZWxpYWJseS4gVGhlIGZvbGxvd2luZyBmZWF0dXJlIHRlc3Qgd2FzIGFkYXB0ZWQgZnJvbVxuICAgICAgICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90MTBrby80YWNlYjhjNzE2ODFmZGIyNzVlMzNlZmU1ZTU3NmIxNFxuICAgICAgICBjb25zdCBleGFtcGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXG4gICAgICAgIGNvbnN0IEhvc3RNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEhvc3RNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHsgfSk7XG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZXhhbXBsZSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuICAgICAgICBleGFtcGxlLnN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgIHJldHVybiBCb29sZWFuKG9ic2VydmVyLnRha2VSZWNvcmRzKCkubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufSwgdHJ1ZSk7XG5hZGQoJ2RvbS13ZWJhbmltYXRpb24nLCAoKSA9PiB0cnVlICYmIGdsb2JhbC5BbmltYXRpb24gIT09IHVuZGVmaW5lZCAmJiBnbG9iYWwuS2V5ZnJhbWVFZmZlY3QgIT09IHVuZGVmaW5lZCwgdHJ1ZSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9oYXMubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N1cHBvcnQvaGFzLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi4vZ2xvYmFsJztcbmltcG9ydCBoYXMgZnJvbSAnLi9oYXMnO1xuZnVuY3Rpb24gZXhlY3V0ZVRhc2soaXRlbSkge1xuICAgIGlmIChpdGVtICYmIGl0ZW0uaXNBY3RpdmUgJiYgaXRlbS5jYWxsYmFjaykge1xuICAgICAgICBpdGVtLmNhbGxiYWNrKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UXVldWVIYW5kbGUoaXRlbSwgZGVzdHJ1Y3Rvcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAgICAgICAgIGl0ZW0uaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGl0ZW0uY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGRlc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICBkZXN0cnVjdG9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxubGV0IGNoZWNrTWljcm9UYXNrUXVldWU7XG5sZXQgbWljcm9UYXNrcztcbi8qKlxuICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gdGhlIG1hY3JvdGFzayBxdWV1ZS5cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxuICovXG5leHBvcnQgY29uc3QgcXVldWVUYXNrID0gKGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZGVzdHJ1Y3RvcjtcbiAgICBsZXQgZW5xdWV1ZTtcbiAgICAvLyBTaW5jZSB0aGUgSUUgaW1wbGVtZW50YXRpb24gb2YgYHNldEltbWVkaWF0ZWAgaXMgbm90IGZsYXdsZXNzLCB3ZSB3aWxsIHRlc3QgZm9yIGBwb3N0TWVzc2FnZWAgZmlyc3QuXG4gICAgaWYgKHRydWUpIHtcbiAgICAgICAgY29uc3QgcXVldWUgPSBbXTtcbiAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIC8vIENvbmZpcm0gdGhhdCB0aGUgZXZlbnQgd2FzIHRyaWdnZXJlZCBieSB0aGUgY3VycmVudCB3aW5kb3cgYW5kIGJ5IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJiBldmVudC5kYXRhID09PSAnZG9qby1xdWV1ZS1tZXNzYWdlJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVRhc2socXVldWUuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBxdWV1ZS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKCdkb2pvLXF1ZXVlLW1lc3NhZ2UnLCAnKicpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChmYWxzZSkge1xuICAgICAgICBkZXN0cnVjdG9yID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRJbW1lZGlhdGUoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkZXN0cnVjdG9yID0gZ2xvYmFsLmNsZWFyVGltZW91dDtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pLCAwKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcXVldWVUYXNrKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpZCA9IGVucXVldWUoaXRlbSk7XG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtLCBkZXN0cnVjdG9yICYmXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RvcihpZCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gVE9ETzogVXNlIGFzcGVjdC5iZWZvcmUgd2hlbiBpdCBpcyBhdmFpbGFibGUuXG4gICAgcmV0dXJuIHRydWVcbiAgICAgICAgPyBxdWV1ZVRhc2tcbiAgICAgICAgOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcbiAgICAgICAgICAgIHJldHVybiBxdWV1ZVRhc2soY2FsbGJhY2spO1xuICAgICAgICB9O1xufSkoKTtcbi8vIFdoZW4gbm8gbWVjaGFuaXNtIGZvciByZWdpc3RlcmluZyBtaWNyb3Rhc2tzIGlzIGV4cG9zZWQgYnkgdGhlIGVudmlyb25tZW50LCBtaWNyb3Rhc2tzIHdpbGxcbi8vIGJlIHF1ZXVlZCBhbmQgdGhlbiBleGVjdXRlZCBpbiBhIHNpbmdsZSBtYWNyb3Rhc2sgYmVmb3JlIHRoZSBvdGhlciBtYWNyb3Rhc2tzIGFyZSBleGVjdXRlZC5cbmlmICghdHJ1ZSkge1xuICAgIGxldCBpc01pY3JvVGFza1F1ZXVlZCA9IGZhbHNlO1xuICAgIG1pY3JvVGFza3MgPSBbXTtcbiAgICBjaGVja01pY3JvVGFza1F1ZXVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWlzTWljcm9UYXNrUXVldWVkKSB7XG4gICAgICAgICAgICBpc01pY3JvVGFza1F1ZXVlZCA9IHRydWU7XG4gICAgICAgICAgICBxdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlzTWljcm9UYXNrUXVldWVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKG1pY3JvVGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGl0ZW0gPSBtaWNyb1Rhc2tzLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlVGFzayhpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn1cbi8qKlxuICogU2NoZWR1bGVzIGFuIGFuaW1hdGlvbiB0YXNrIHdpdGggYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGlmIGl0IGV4aXN0cywgb3Igd2l0aCBgcXVldWVUYXNrYCBvdGhlcndpc2UuXG4gKlxuICogU2luY2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJ3MgYmVoYXZpb3IgZG9lcyBub3QgbWF0Y2ggdGhhdCBleHBlY3RlZCBmcm9tIGBxdWV1ZVRhc2tgLCBpdCBpcyBub3QgdXNlZCB0aGVyZS5cbiAqIEhvd2V2ZXIsIGF0IHRpbWVzIGl0IG1ha2VzIG1vcmUgc2Vuc2UgdG8gZGVsZWdhdGUgdG8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lOyBoZW5jZSB0aGUgZm9sbG93aW5nIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxuICovXG5leHBvcnQgY29uc3QgcXVldWVBbmltYXRpb25UYXNrID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRydWUpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXVlVGFzaztcbiAgICB9XG4gICAgZnVuY3Rpb24gcXVldWVBbmltYXRpb25UYXNrKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcbiAgICAgICAgcmV0dXJuIGdldFF1ZXVlSGFuZGxlKGl0ZW0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxuICAgIHJldHVybiB0cnVlXG4gICAgICAgID8gcXVldWVBbmltYXRpb25UYXNrXG4gICAgICAgIDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjaGVja01pY3JvVGFza1F1ZXVlKCk7XG4gICAgICAgICAgICByZXR1cm4gcXVldWVBbmltYXRpb25UYXNrKGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbn0pKCk7XG4vKipcbiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIHRoZSBtaWNyb3Rhc2sgcXVldWUuXG4gKlxuICogQW55IGNhbGxiYWNrcyByZWdpc3RlcmVkIHdpdGggYHF1ZXVlTWljcm9UYXNrYCB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgbmV4dCBtYWNyb3Rhc2suIElmIG5vIG5hdGl2ZVxuICogbWVjaGFuaXNtIGZvciBzY2hlZHVsaW5nIG1hY3JvdGFza3MgaXMgZXhwb3NlZCwgdGhlbiBhbnkgY2FsbGJhY2tzIHdpbGwgYmUgZmlyZWQgYmVmb3JlIGFueSBtYWNyb3Rhc2tcbiAqIHJlZ2lzdGVyZWQgd2l0aCBgcXVldWVUYXNrYCBvciBgcXVldWVBbmltYXRpb25UYXNrYC5cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxuICovXG5leHBvcnQgbGV0IHF1ZXVlTWljcm9UYXNrID0gKGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZW5xdWV1ZTtcbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBnbG9iYWwucHJvY2Vzcy5uZXh0VGljayhleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHJ1ZSkge1xuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIGdsb2JhbC5Qcm9taXNlLnJlc29sdmUoaXRlbSkudGhlbihleGVjdXRlVGFzayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHRydWUpIHtcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cbiAgICAgICAgY29uc3QgSG9zdE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IFtdO1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBIb3N0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0uaXNBY3RpdmUgJiYgaXRlbS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7XG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcXVldWUucHVzaChpdGVtKTtcbiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdxdWV1ZVN0YXR1cycsICcxJyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcbiAgICAgICAgICAgIG1pY3JvVGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgfTtcbiAgICAgICAgZW5xdWV1ZShpdGVtKTtcbiAgICAgICAgcmV0dXJuIGdldFF1ZXVlSGFuZGxlKGl0ZW0pO1xuICAgIH07XG59KSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVldWUubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9xdWV1ZS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9xdWV1ZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCIvKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHZhbHVlIHByb3BlcnR5IGRlc2NyaXB0b3JcbiAqXG4gKiBAcGFyYW0gdmFsdWUgICAgICAgIFRoZSB2YWx1ZSB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBzaG91bGQgYmUgc2V0IHRvXG4gKiBAcGFyYW0gZW51bWVyYWJsZSAgIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgZW51bWJlcmFibGUsIGRlZmF1bHRzIHRvIGZhbHNlXG4gKiBAcGFyYW0gd3JpdGFibGUgICAgIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgd3JpdGFibGUsIGRlZmF1bHRzIHRvIHRydWVcbiAqIEBwYXJhbSBjb25maWd1cmFibGUgSWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBjb25maWd1cmFibGUsIGRlZmF1bHRzIHRvIHRydWVcbiAqIEByZXR1cm4gICAgICAgICAgICAgVGhlIHByb3BlcnR5IGRlc2NyaXB0b3Igb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZURlc2NyaXB0b3IodmFsdWUsIGVudW1lcmFibGUgPSBmYWxzZSwgd3JpdGFibGUgPSB0cnVlLCBjb25maWd1cmFibGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiBlbnVtZXJhYmxlLFxuICAgICAgICB3cml0YWJsZTogd3JpdGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogY29uZmlndXJhYmxlXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTmF0aXZlKG5hdGl2ZUZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9uLmFwcGx5KHRhcmdldCwgYXJncyk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC91dGlsLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3V0aWwubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJ0Bkb2pvL2NvcmUvRXZlbnRlZCc7XG5leHBvcnQgY2xhc3MgSW5qZWN0b3IgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBjb25zdHJ1Y3RvcihwYXlsb2FkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3BheWxvYWQgPSBwYXlsb2FkO1xuICAgIH1cbiAgICBzZXRJbnZhbGlkYXRvcihpbnZhbGlkYXRvcikge1xuICAgICAgICB0aGlzLl9pbnZhbGlkYXRvciA9IGludmFsaWRhdG9yO1xuICAgIH1cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkO1xuICAgIH1cbiAgICBzZXQocGF5bG9hZCkge1xuICAgICAgICB0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcbiAgICAgICAgaWYgKHRoaXMuX2ludmFsaWRhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRvcigpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgSW5qZWN0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JbmplY3Rvci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvSW5qZWN0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9JbmplY3Rvci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnQGRvam8vY29yZS9FdmVudGVkJztcbmltcG9ydCBNYXAgZnJvbSAnQGRvam8vc2hpbS9NYXAnO1xuLyoqXG4gKiBFbnVtIHRvIGlkZW50aWZ5IHRoZSB0eXBlIG9mIGV2ZW50LlxuICogTGlzdGVuaW5nIHRvICdQcm9qZWN0b3InIHdpbGwgbm90aWZ5IHdoZW4gcHJvamVjdG9yIGlzIGNyZWF0ZWQgb3IgdXBkYXRlZFxuICogTGlzdGVuaW5nIHRvICdXaWRnZXQnIHdpbGwgbm90aWZ5IHdoZW4gd2lkZ2V0IHJvb3QgaXMgY3JlYXRlZCBvciB1cGRhdGVkXG4gKi9cbmV4cG9ydCB2YXIgTm9kZUV2ZW50VHlwZTtcbihmdW5jdGlvbiAoTm9kZUV2ZW50VHlwZSkge1xuICAgIE5vZGVFdmVudFR5cGVbXCJQcm9qZWN0b3JcIl0gPSBcIlByb2plY3RvclwiO1xuICAgIE5vZGVFdmVudFR5cGVbXCJXaWRnZXRcIl0gPSBcIldpZGdldFwiO1xufSkoTm9kZUV2ZW50VHlwZSB8fCAoTm9kZUV2ZW50VHlwZSA9IHt9KSk7XG5leHBvcnQgY2xhc3MgTm9kZUhhbmRsZXIgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fbm9kZU1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZU1hcC5nZXQoa2V5KTtcbiAgICB9XG4gICAgaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZU1hcC5oYXMoa2V5KTtcbiAgICB9XG4gICAgYWRkKGVsZW1lbnQsIGtleSkge1xuICAgICAgICB0aGlzLl9ub2RlTWFwLnNldChrZXksIGVsZW1lbnQpO1xuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBrZXkgfSk7XG4gICAgfVxuICAgIGFkZFJvb3QoKSB7XG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6IE5vZGVFdmVudFR5cGUuV2lkZ2V0IH0pO1xuICAgIH1cbiAgICBhZGRQcm9qZWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6IE5vZGVFdmVudFR5cGUuUHJvamVjdG9yIH0pO1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5fbm9kZU1hcC5jbGVhcigpO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IE5vZGVIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm9kZUhhbmRsZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL05vZGVIYW5kbGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IFByb21pc2UgZnJvbSAnQGRvam8vc2hpbS9Qcm9taXNlJztcbmltcG9ydCBNYXAgZnJvbSAnQGRvam8vc2hpbS9NYXAnO1xuaW1wb3J0IFN5bWJvbCBmcm9tICdAZG9qby9zaGltL1N5bWJvbCc7XG5pbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnQGRvam8vY29yZS9FdmVudGVkJztcbi8qKlxuICogV2lkZ2V0IGJhc2Ugc3ltYm9sIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IFdJREdFVF9CQVNFX1RZUEUgPSBTeW1ib2woJ1dpZGdldCBCYXNlJyk7XG4vKipcbiAqIENoZWNrcyBpcyB0aGUgaXRlbSBpcyBhIHN1YmNsYXNzIG9mIFdpZGdldEJhc2UgKG9yIGEgV2lkZ2V0QmFzZSlcbiAqXG4gKiBAcGFyYW0gaXRlbSB0aGUgaXRlbSB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZS9mYWxzZSBpbmRpY2F0aW5nIGlmIHRoZSBpdGVtIGlzIGEgV2lkZ2V0QmFzZUNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJiBpdGVtLl90eXBlID09PSBXSURHRVRfQkFTRV9UWVBFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1dpZGdldENvbnN0cnVjdG9yRGVmYXVsdEV4cG9ydChpdGVtKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJlxuICAgICAgICBpdGVtLmhhc093blByb3BlcnR5KCdfX2VzTW9kdWxlJykgJiZcbiAgICAgICAgaXRlbS5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpICYmXG4gICAgICAgIGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0uZGVmYXVsdCkpO1xufVxuLyoqXG4gKiBUaGUgUmVnaXN0cnkgaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFJlZ2lzdHJ5IGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgLyoqXG4gICAgICogRW1pdCBsb2FkZWQgZXZlbnQgZm9yIHJlZ2lzdHJ5IGxhYmVsXG4gICAgICovXG4gICAgZW1pdExvYWRlZEV2ZW50KHdpZGdldExhYmVsLCBpdGVtKSB7XG4gICAgICAgIHRoaXMuZW1pdCh7XG4gICAgICAgICAgICB0eXBlOiB3aWRnZXRMYWJlbCxcbiAgICAgICAgICAgIGFjdGlvbjogJ2xvYWRlZCcsXG4gICAgICAgICAgICBpdGVtXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWZpbmUobGFiZWwsIGl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuX3dpZGdldFJlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl93aWRnZXRSZWdpc3RyeS5oYXMobGFiZWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdpZGdldCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgZm9yICcke2xhYmVsLnRvU3RyaW5nKCl9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgaXRlbSk7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgaXRlbS50aGVuKCh3aWRnZXRDdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCB3aWRnZXRDdG9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgd2lkZ2V0Q3Rvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpZGdldEN0b3I7XG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVmaW5lSW5qZWN0b3IobGFiZWwsIGluamVjdG9yRmFjdG9yeSkge1xuICAgICAgICBpZiAodGhpcy5faW5qZWN0b3JSZWdpc3RyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmhhcyhsYWJlbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5qZWN0b3IgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnJHtsYWJlbC50b1N0cmluZygpfSdgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnZhbGlkYXRvciA9IG5ldyBFdmVudGVkKCk7XG4gICAgICAgIGNvbnN0IGluamVjdG9ySXRlbSA9IHtcbiAgICAgICAgICAgIGluamVjdG9yOiBpbmplY3RvckZhY3RvcnkoKCkgPT4gaW52YWxpZGF0b3IuZW1pdCh7IHR5cGU6ICdpbnZhbGlkYXRlJyB9KSksXG4gICAgICAgICAgICBpbnZhbGlkYXRvclxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LnNldChsYWJlbCwgaW5qZWN0b3JJdGVtKTtcbiAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIGluamVjdG9ySXRlbSk7XG4gICAgfVxuICAgIGdldChsYWJlbCkge1xuICAgICAgICBpZiAoIXRoaXMuX3dpZGdldFJlZ2lzdHJ5IHx8ICF0aGlzLmhhcyhsYWJlbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl93aWRnZXRSZWdpc3RyeS5nZXQobGFiZWwpO1xuICAgICAgICBpZiAoaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IGl0ZW0oKTtcbiAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCBwcm9taXNlKTtcbiAgICAgICAgcHJvbWlzZS50aGVuKCh3aWRnZXRDdG9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQod2lkZ2V0Q3RvcikpIHtcbiAgICAgICAgICAgICAgICB3aWRnZXRDdG9yID0gd2lkZ2V0Q3Rvci5kZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCB3aWRnZXRDdG9yKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCB3aWRnZXRDdG9yKTtcbiAgICAgICAgICAgIHJldHVybiB3aWRnZXRDdG9yO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGdldEluamVjdG9yKGxhYmVsKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5qZWN0b3JSZWdpc3RyeSB8fCAhdGhpcy5oYXNJbmplY3RvcihsYWJlbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmdldChsYWJlbCk7XG4gICAgfVxuICAgIGhhcyhsYWJlbCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLl93aWRnZXRSZWdpc3RyeSAmJiB0aGlzLl93aWRnZXRSZWdpc3RyeS5oYXMobGFiZWwpKTtcbiAgICB9XG4gICAgaGFzSW5qZWN0b3IobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5faW5qZWN0b3JSZWdpc3RyeSAmJiB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmhhcyhsYWJlbCkpO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IFJlZ2lzdHJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVnaXN0cnkubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL1JlZ2lzdHJ5Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvUmVnaXN0cnkubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgTWFwIH0gZnJvbSAnQGRvam8vc2hpbS9NYXAnO1xuaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJ0Bkb2pvL2NvcmUvRXZlbnRlZCc7XG5pbXBvcnQgeyBSZWdpc3RyeSB9IGZyb20gJy4vUmVnaXN0cnknO1xuZXhwb3J0IGNsYXNzIFJlZ2lzdHJ5SGFuZGxlciBleHRlbmRzIEV2ZW50ZWQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeSgpO1xuICAgICAgICB0aGlzLl9yZWdpc3RyeVdpZGdldExhYmVsTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMub3duKHRoaXMuX3JlZ2lzdHJ5KTtcbiAgICAgICAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VSZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VSZWdpc3RyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vd24oeyBkZXN0cm95IH0pO1xuICAgIH1cbiAgICBzZXQgYmFzZShiYXNlUmVnaXN0cnkpIHtcbiAgICAgICAgaWYgKHRoaXMuYmFzZVJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9yZWdpc3RyeVdpZGdldExhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XG4gICAgICAgICAgICB0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhc2VSZWdpc3RyeSA9IGJhc2VSZWdpc3RyeTtcbiAgICB9XG4gICAgZGVmaW5lKGxhYmVsLCB3aWRnZXQpIHtcbiAgICAgICAgdGhpcy5fcmVnaXN0cnkuZGVmaW5lKGxhYmVsLCB3aWRnZXQpO1xuICAgIH1cbiAgICBkZWZpbmVJbmplY3RvcihsYWJlbCwgaW5qZWN0b3IpIHtcbiAgICAgICAgdGhpcy5fcmVnaXN0cnkuZGVmaW5lSW5qZWN0b3IobGFiZWwsIGluamVjdG9yKTtcbiAgICB9XG4gICAgaGFzKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeS5oYXMobGFiZWwpIHx8IEJvb2xlYW4odGhpcy5iYXNlUmVnaXN0cnkgJiYgdGhpcy5iYXNlUmVnaXN0cnkuaGFzKGxhYmVsKSk7XG4gICAgfVxuICAgIGhhc0luamVjdG9yKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeS5oYXNJbmplY3RvcihsYWJlbCkgfHwgQm9vbGVhbih0aGlzLmJhc2VSZWdpc3RyeSAmJiB0aGlzLmJhc2VSZWdpc3RyeS5oYXNJbmplY3RvcihsYWJlbCkpO1xuICAgIH1cbiAgICBnZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UgPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCAnZ2V0JywgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcCk7XG4gICAgfVxuICAgIGdldEluamVjdG9yKGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSwgJ2dldEluamVjdG9yJywgdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwKTtcbiAgICB9XG4gICAgX2dldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSwgZ2V0RnVuY3Rpb25OYW1lLCBsYWJlbE1hcCkge1xuICAgICAgICBjb25zdCByZWdpc3RyaWVzID0gZ2xvYmFsUHJlY2VkZW5jZSA/IFt0aGlzLmJhc2VSZWdpc3RyeSwgdGhpcy5fcmVnaXN0cnldIDogW3RoaXMuX3JlZ2lzdHJ5LCB0aGlzLmJhc2VSZWdpc3RyeV07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVnaXN0cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVnaXN0cnkgPSByZWdpc3RyaWVzW2ldO1xuICAgICAgICAgICAgaWYgKCFyZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlZ2lzdHJ5W2dldEZ1bmN0aW9uTmFtZV0obGFiZWwpO1xuICAgICAgICAgICAgY29uc3QgcmVnaXN0ZXJlZExhYmVscyA9IGxhYmVsTWFwLmdldChyZWdpc3RyeSkgfHwgW107XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVnaXN0ZXJlZExhYmVscy5pbmRleE9mKGxhYmVsKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGUgPSByZWdpc3RyeS5vbihsYWJlbCwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdsb2FkZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2dldEZ1bmN0aW9uTmFtZV0obGFiZWwsIGdsb2JhbFByZWNlZGVuY2UpID09PSBldmVudC5pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiAnaW52YWxpZGF0ZScgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm93bihoYW5kbGUpO1xuICAgICAgICAgICAgICAgIGxhYmVsTWFwLnNldChyZWdpc3RyeSwgWy4uLnJlZ2lzdGVyZWRMYWJlbHMsIGxhYmVsXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgUmVnaXN0cnlIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVnaXN0cnlIYW5kbGVyLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IE1hcCBmcm9tICdAZG9qby9zaGltL01hcCc7XG5pbXBvcnQgV2Vha01hcCBmcm9tICdAZG9qby9zaGltL1dlYWtNYXAnO1xuaW1wb3J0IFN5bWJvbCBmcm9tICdAZG9qby9zaGltL1N5bWJvbCc7XG5pbXBvcnQgeyB2IH0gZnJvbSAnLi9kJztcbmltcG9ydCB7IGF1dG8gfSBmcm9tICcuL2RpZmYnO1xuaW1wb3J0IFJlZ2lzdHJ5SGFuZGxlciBmcm9tICcuL1JlZ2lzdHJ5SGFuZGxlcic7XG5pbXBvcnQgTm9kZUhhbmRsZXIgZnJvbSAnLi9Ob2RlSGFuZGxlcic7XG5pbXBvcnQgeyB3aWRnZXRJbnN0YW5jZU1hcCB9IGZyb20gJy4vdmRvbSc7XG5pbXBvcnQgeyBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvciwgV0lER0VUX0JBU0VfVFlQRSB9IGZyb20gJy4vUmVnaXN0cnknO1xuY29uc3QgZGVjb3JhdG9yTWFwID0gbmV3IE1hcCgpO1xuY29uc3QgYm91bmRBdXRvID0gYXV0by5iaW5kKG51bGwpO1xuZXhwb3J0IGNvbnN0IG5vQmluZCA9IFN5bWJvbC5mb3IoJ2Rvam9Ob0JpbmQnKTtcbi8qKlxuICogTWFpbiB3aWRnZXQgYmFzZSBmb3IgYWxsIHdpZGdldHMgdG8gZXh0ZW5kXG4gKi9cbmV4cG9ydCBjbGFzcyBXaWRnZXRCYXNlIHtcbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyBpZiBpdCBpcyB0aGUgaW5pdGlhbCBzZXQgcHJvcGVydGllcyBjeWNsZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5faW5pdGlhbFByb3BlcnRpZXMgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQXJyYXkgb2YgcHJvcGVydHkga2V5cyBjb25zaWRlcmVkIGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgc2V0IHByb3BlcnRpZXNcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5fbm9kZUhhbmRsZXIgPSBuZXcgTm9kZUhhbmRsZXIoKTtcbiAgICAgICAgdGhpcy5faGFuZGxlcyA9IFtdO1xuICAgICAgICB0aGlzLl9jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLl9kZWNvcmF0b3JDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHt9O1xuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlckZ1bmMgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9ib3VuZEludmFsaWRhdGUgPSB0aGlzLmludmFsaWRhdGUuYmluZCh0aGlzKTtcbiAgICAgICAgd2lkZ2V0SW5zdGFuY2VNYXAuc2V0KHRoaXMsIHtcbiAgICAgICAgICAgIGRpcnR5OiB0cnVlLFxuICAgICAgICAgICAgb25BdHRhY2g6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXR0YWNoKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25EZXRhY2g6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGV0YWNoKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9kZUhhbmRsZXI6IHRoaXMuX25vZGVIYW5kbGVyLFxuICAgICAgICAgICAgcmVnaXN0cnk6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3JlUHJvcGVydGllczoge30sXG4gICAgICAgICAgICByZW5kZXJpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaW5wdXRQcm9wZXJ0aWVzOiB7fVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcnVuQWZ0ZXJDb25zdHJ1Y3RvcnMoKTtcbiAgICB9XG4gICAgbWV0YShNZXRhVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5fbWV0YU1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9tZXRhTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjYWNoZWQgPSB0aGlzLl9tZXRhTWFwLmdldChNZXRhVHlwZSk7XG4gICAgICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgICAgICBjYWNoZWQgPSBuZXcgTWV0YVR5cGUoe1xuICAgICAgICAgICAgICAgIGludmFsaWRhdGU6IHRoaXMuX2JvdW5kSW52YWxpZGF0ZSxcbiAgICAgICAgICAgICAgICBub2RlSGFuZGxlcjogdGhpcy5fbm9kZUhhbmRsZXIsXG4gICAgICAgICAgICAgICAgYmluZDogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm93bihjYWNoZWQpO1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcC5zZXQoTWV0YVR5cGUsIGNhY2hlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgb25BdHRhY2goKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgYnkgZGVmYXVsdC5cbiAgICB9XG4gICAgb25EZXRhY2goKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgYnkgZGVmYXVsdC5cbiAgICB9XG4gICAgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBnZXQgY2hhbmdlZFByb3BlcnR5S2V5cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzXTtcbiAgICB9XG4gICAgX19zZXRDb3JlUHJvcGVydGllc19fKGNvcmVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvbnN0IHsgYmFzZVJlZ2lzdHJ5IH0gPSBjb3JlUHJvcGVydGllcztcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJhc2VSZWdpc3RyeSAhPT0gYmFzZVJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5SGFuZGxlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMub3duKHRoaXMuX3JlZ2lzdHJ5KTtcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkuYmFzZSA9IGJhc2VSZWdpc3RyeTtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcyA9IGNvcmVQcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBfX3NldFByb3BlcnRpZXNfXyhvcmlnaW5hbFByb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpbnN0YW5jZURhdGEuaW5wdXRQcm9wZXJ0aWVzID0gb3JpZ2luYWxQcm9wZXJ0aWVzO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5fcnVuQmVmb3JlUHJvcGVydGllcyhvcmlnaW5hbFByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCByZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMgPSB0aGlzLmdldERlY29yYXRvcigncmVnaXN0ZXJlZERpZmZQcm9wZXJ0eScpO1xuICAgICAgICBjb25zdCBjaGFuZ2VkUHJvcGVydHlLZXlzID0gW107XG4gICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID09PSBmYWxzZSB8fCByZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxQcm9wZXJ0aWVzID0gWy4uLnByb3BlcnR5TmFtZXMsIC4uLk9iamVjdC5rZXlzKHRoaXMuX3Byb3BlcnRpZXMpXTtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRQcm9wZXJ0aWVzID0gW107XG4gICAgICAgICAgICBjb25zdCBkaWZmUHJvcGVydHlSZXN1bHRzID0ge307XG4gICAgICAgICAgICBsZXQgcnVuUmVhY3Rpb25zID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja2VkUHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGVja2VkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9wZXJ0eSA9IHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQcm9wZXJ0eSA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSwgaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJpbmQpO1xuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBydW5SZWFjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWZmRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoYGRpZmZQcm9wZXJ0eToke3Byb3BlcnR5TmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkaWZmRnVuY3Rpb25zW2ldKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlZCAmJiBjaGFuZ2VkUHJvcGVydHlLZXlzLmluZGV4T2YocHJvcGVydHlOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkUHJvcGVydHlLZXlzLnB1c2gocHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZQcm9wZXJ0eVJlc3VsdHNbcHJvcGVydHlOYW1lXSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYm91bmRBdXRvKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VkICYmIGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWZmUHJvcGVydHlSZXN1bHRzW3Byb3BlcnR5TmFtZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVuUmVhY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwRGlmZlByb3BlcnR5UmVhY3Rpb25zKHByb3BlcnRpZXMsIGNoYW5nZWRQcm9wZXJ0eUtleXMpLmZvckVhY2goKGFyZ3MsIHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmNhbGwodGhpcywgYXJncy5wcmV2aW91c1Byb3BlcnRpZXMsIGFyZ3MubmV3UHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBkaWZmUHJvcGVydHlSZXN1bHRzO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cyA9IGNoYW5nZWRQcm9wZXJ0eUtleXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsUHJvcGVydGllcyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0sIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iaW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0eUtleXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMgPSBjaGFuZ2VkUHJvcGVydHlLZXlzO1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuICAgIH1cbiAgICBfX3NldENoaWxkcmVuX18oY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA+IDAgfHwgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9fcmVuZGVyX18oKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IHRoaXMuX3J1bkJlZm9yZVJlbmRlcnMoKTtcbiAgICAgICAgbGV0IGROb2RlID0gcmVuZGVyKCk7XG4gICAgICAgIGROb2RlID0gdGhpcy5ydW5BZnRlclJlbmRlcnMoZE5vZGUpO1xuICAgICAgICB0aGlzLl9ub2RlSGFuZGxlci5jbGVhcigpO1xuICAgICAgICByZXR1cm4gZE5vZGU7XG4gICAgfVxuICAgIGludmFsaWRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlKSB7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHYoJ2RpdicsIHt9LCB0aGlzLmNoaWxkcmVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gYWRkIGRlY29yYXRvcnMgdG8gV2lkZ2V0QmFzZVxuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSBUaGUga2V5IG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKi9cbiAgICBhZGREZWNvcmF0b3IoZGVjb3JhdG9yS2V5LCB2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eSgnY29uc3RydWN0b3InKSkge1xuICAgICAgICAgICAgbGV0IGRlY29yYXRvckxpc3QgPSBkZWNvcmF0b3JNYXAuZ2V0KHRoaXMuY29uc3RydWN0b3IpO1xuICAgICAgICAgICAgaWYgKCFkZWNvcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yTGlzdCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JNYXAuc2V0KHRoaXMuY29uc3RydWN0b3IsIGRlY29yYXRvckxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNwZWNpZmljRGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvckxpc3QuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICBpZiAoIXNwZWNpZmljRGVjb3JhdG9yTGlzdCkge1xuICAgICAgICAgICAgICAgIHNwZWNpZmljRGVjb3JhdG9yTGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIGRlY29yYXRvckxpc3Quc2V0KGRlY29yYXRvcktleSwgc3BlY2lmaWNEZWNvcmF0b3JMaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwZWNpZmljRGVjb3JhdG9yTGlzdC5wdXNoKC4uLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSB0aGlzLmdldERlY29yYXRvcihkZWNvcmF0b3JLZXkpO1xuICAgICAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgWy4uLmRlY29yYXRvcnMsIC4uLnZhbHVlXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gYnVpbGQgdGhlIGxpc3Qgb2YgZGVjb3JhdG9ycyBmcm9tIHRoZSBnbG9iYWwgZGVjb3JhdG9yIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWNvcmF0b3JLZXkgIFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgZGVjb3JhdG9yIHZhbHVlc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2J1aWxkRGVjb3JhdG9yTGlzdChkZWNvcmF0b3JLZXkpIHtcbiAgICAgICAgY29uc3QgYWxsRGVjb3JhdG9ycyA9IFtdO1xuICAgICAgICBsZXQgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICB3aGlsZSAoY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZGVjb3JhdG9yTWFwLmdldChjb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VNYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNvcmF0b3JzID0gaW5zdGFuY2VNYXAuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICAgICAgaWYgKGRlY29yYXRvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsRGVjb3JhdG9ycy51bnNoaWZ0KC4uLmRlY29yYXRvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNvbnN0cnVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gcmV0cmlldmUgZGVjb3JhdG9yIHZhbHVlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSBUaGUga2V5IG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICovXG4gICAgZ2V0RGVjb3JhdG9yKGRlY29yYXRvcktleSkge1xuICAgICAgICBsZXQgYWxsRGVjb3JhdG9ycyA9IHRoaXMuX2RlY29yYXRvckNhY2hlLmdldChkZWNvcmF0b3JLZXkpO1xuICAgICAgICBpZiAoYWxsRGVjb3JhdG9ycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICAgICAgfVxuICAgICAgICBhbGxEZWNvcmF0b3JzID0gdGhpcy5fYnVpbGREZWNvcmF0b3JMaXN0KGRlY29yYXRvcktleSk7XG4gICAgICAgIHRoaXMuX2RlY29yYXRvckNhY2hlLnNldChkZWNvcmF0b3JLZXksIGFsbERlY29yYXRvcnMpO1xuICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICB9XG4gICAgX21hcERpZmZQcm9wZXJ0eVJlYWN0aW9ucyhuZXdQcm9wZXJ0aWVzLCBjaGFuZ2VkUHJvcGVydHlLZXlzKSB7XG4gICAgICAgIGNvbnN0IHJlYWN0aW9uRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicpO1xuICAgICAgICByZXR1cm4gcmVhY3Rpb25GdW5jdGlvbnMucmVkdWNlKChyZWFjdGlvblByb3BlcnR5TWFwLCB7IHJlYWN0aW9uLCBwcm9wZXJ0eU5hbWUgfSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlYWN0aW9uQXJndW1lbnRzID0gcmVhY3Rpb25Qcm9wZXJ0eU1hcC5nZXQocmVhY3Rpb24pO1xuICAgICAgICAgICAgaWYgKHJlYWN0aW9uQXJndW1lbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZWFjdGlvbkFyZ3VtZW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQcm9wZXJ0aWVzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgbmV3UHJvcGVydGllczoge30sXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWN0aW9uQXJndW1lbnRzLnByZXZpb3VzUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgcmVhY3Rpb25Bcmd1bWVudHMubmV3UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gbmV3UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlYWN0aW9uQXJndW1lbnRzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVhY3Rpb25Qcm9wZXJ0eU1hcC5zZXQocmVhY3Rpb24sIHJlYWN0aW9uQXJndW1lbnRzKTtcbiAgICAgICAgICAgIHJldHVybiByZWFjdGlvblByb3BlcnR5TWFwO1xuICAgICAgICB9LCBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCaW5kcyB1bmJvdW5kIHByb3BlcnR5IGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBiaW5kYCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgZnVuY3Rpb25zXG4gICAgICovXG4gICAgX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnR5LCBiaW5kKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIXByb3BlcnR5W25vQmluZF0gJiYgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IocHJvcGVydHkpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiaW5kSW5mbyA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwLmdldChwcm9wZXJ0eSkgfHwge307XG4gICAgICAgICAgICBsZXQgeyBib3VuZEZ1bmMsIHNjb3BlIH0gPSBiaW5kSW5mbztcbiAgICAgICAgICAgIGlmIChib3VuZEZ1bmMgPT09IHVuZGVmaW5lZCB8fCBzY29wZSAhPT0gYmluZCkge1xuICAgICAgICAgICAgICAgIGJvdW5kRnVuYyA9IHByb3BlcnR5LmJpbmQoYmluZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAuc2V0KHByb3BlcnR5LCB7IGJvdW5kRnVuYywgc2NvcGU6IGJpbmQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm91bmRGdW5jO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gICAgZ2V0IHJlZ2lzdHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyKCk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeTtcbiAgICB9XG4gICAgX3J1bkJlZm9yZVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBiZWZvcmVQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnKTtcbiAgICAgICAgaWYgKGJlZm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJlZm9yZVByb3BlcnRpZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBiZWZvcmVQcm9wZXJ0aWVzRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uLmNhbGwodGhpcywgcHJvcGVydGllcykpO1xuICAgICAgICAgICAgfSwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYmVmb3JlIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgdXBkYXRlZCByZW5kZXIgbWV0aG9kXG4gICAgICovXG4gICAgX3J1bkJlZm9yZVJlbmRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZVJlbmRlcnMgPSB0aGlzLmdldERlY29yYXRvcignYmVmb3JlUmVuZGVyJyk7XG4gICAgICAgIGlmIChiZWZvcmVSZW5kZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmVSZW5kZXJzLnJlZHVjZSgocmVuZGVyLCBiZWZvcmVSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZW5kZXIgPSBiZWZvcmVSZW5kZXJGdW5jdGlvbi5jYWxsKHRoaXMsIHJlbmRlciwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlciBmdW5jdGlvbiBub3QgcmV0dXJuZWQgZnJvbSBiZWZvcmVSZW5kZXIsIHVzaW5nIHByZXZpb3VzIHJlbmRlcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZFJlbmRlcjtcbiAgICAgICAgICAgIH0sIHRoaXMuX2JvdW5kUmVuZGVyRnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kUmVuZGVyRnVuYztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGFsbCByZWdpc3RlcmVkIGFmdGVyIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgZGVjb3JhdGVkIEROb2Rlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGROb2RlIFRoZSBETm9kZXMgdG8gcnVuIHRocm91Z2ggdGhlIGFmdGVyIHJlbmRlcnNcbiAgICAgKi9cbiAgICBydW5BZnRlclJlbmRlcnMoZE5vZGUpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJSZW5kZXJzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJyk7XG4gICAgICAgIGlmIChhZnRlclJlbmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGFmdGVyUmVuZGVycy5yZWR1Y2UoKGROb2RlLCBhZnRlclJlbmRlckZ1bmN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFmdGVyUmVuZGVyRnVuY3Rpb24uY2FsbCh0aGlzLCBkTm9kZSk7XG4gICAgICAgICAgICB9LCBkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21ldGFNYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcC5mb3JFYWNoKChtZXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgbWV0YS5hZnRlclJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGROb2RlO1xuICAgIH1cbiAgICBfcnVuQWZ0ZXJDb25zdHJ1Y3RvcnMoKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyQ29uc3RydWN0b3JzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyQ29uc3RydWN0b3InKTtcbiAgICAgICAgaWYgKGFmdGVyQ29uc3RydWN0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFmdGVyQ29uc3RydWN0b3JzLmZvckVhY2goKGFmdGVyQ29uc3RydWN0b3IpID0+IGFmdGVyQ29uc3RydWN0b3IuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb3duKGhhbmRsZSkge1xuICAgICAgICB0aGlzLl9oYW5kbGVzLnB1c2goaGFuZGxlKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2hhbmRsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gdGhpcy5faGFuZGxlcy5wb3AoKTtcbiAgICAgICAgICAgIGlmIChoYW5kbGUpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBzdGF0aWMgaWRlbnRpZmllclxuICovXG5XaWRnZXRCYXNlLl90eXBlID0gV0lER0VUX0JBU0VfVFlQRTtcbmV4cG9ydCBkZWZhdWx0IFdpZGdldEJhc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaWRnZXRCYXNlLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9XaWRnZXRCYXNlLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJsZXQgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICcnO1xubGV0IGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9ICcnO1xuZnVuY3Rpb24gZGV0ZXJtaW5lQnJvd3NlclN0eWxlTmFtZXMoZWxlbWVudCkge1xuICAgIGlmICgnV2Via2l0VHJhbnNpdGlvbicgaW4gZWxlbWVudC5zdHlsZSkge1xuICAgICAgICBicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICAgICAgICBicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnd2Via2l0QW5pbWF0aW9uRW5kJztcbiAgICB9XG4gICAgZWxzZSBpZiAoJ3RyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUgfHwgJ01velRyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUpIHtcbiAgICAgICAgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICd0cmFuc2l0aW9uZW5kJztcbiAgICAgICAgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJ2FuaW1hdGlvbmVuZCc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdXIgYnJvd3NlciBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZShlbGVtZW50KSB7XG4gICAgaWYgKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9PT0gJycpIHtcbiAgICAgICAgZGV0ZXJtaW5lQnJvd3NlclN0eWxlTmFtZXMoZWxlbWVudCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcnVuQW5kQ2xlYW5VcChlbGVtZW50LCBzdGFydEFuaW1hdGlvbiwgZmluaXNoQW5pbWF0aW9uKSB7XG4gICAgaW5pdGlhbGl6ZShlbGVtZW50KTtcbiAgICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcbiAgICBsZXQgdHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICBmaW5pc2hBbmltYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc3RhcnRBbmltYXRpb24oKTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG59XG5mdW5jdGlvbiBleGl0KG5vZGUsIHByb3BlcnRpZXMsIGV4aXRBbmltYXRpb24sIHJlbW92ZU5vZGUpIHtcbiAgICBjb25zdCBhY3RpdmVDbGFzcyA9IHByb3BlcnRpZXMuZXhpdEFuaW1hdGlvbkFjdGl2ZSB8fCBgJHtleGl0QW5pbWF0aW9ufS1hY3RpdmVgO1xuICAgIHJ1bkFuZENsZWFuVXAobm9kZSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoZXhpdEFuaW1hdGlvbik7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoYWN0aXZlQ2xhc3MpO1xuICAgICAgICB9KTtcbiAgICB9LCAoKSA9PiB7XG4gICAgICAgIHJlbW92ZU5vZGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGVudGVyKG5vZGUsIHByb3BlcnRpZXMsIGVudGVyQW5pbWF0aW9uKSB7XG4gICAgY29uc3QgYWN0aXZlQ2xhc3MgPSBwcm9wZXJ0aWVzLmVudGVyQW5pbWF0aW9uQWN0aXZlIHx8IGAke2VudGVyQW5pbWF0aW9ufS1hY3RpdmVgO1xuICAgIHJ1bkFuZENsZWFuVXAobm9kZSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoZW50ZXJBbmltYXRpb24pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoZW50ZXJBbmltYXRpb24pO1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoYWN0aXZlQ2xhc3MpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGVudGVyLFxuICAgIGV4aXRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jc3NUcmFuc2l0aW9ucy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IFN5bWJvbCBmcm9tICdAZG9qby9zaGltL1N5bWJvbCc7XG4vKipcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBXTm9kZSB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBXTk9ERSA9IFN5bWJvbCgnSWRlbnRpZmllciBmb3IgYSBXTm9kZS4nKTtcbi8qKlxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFZOb2RlIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IFZOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFZOb2RlLicpO1xuLyoqXG4gKiBUaGUgc3ltYm9sIGlkZW50aWZpZXIgZm9yIGEgVk5vZGUgdHlwZSBjcmVhdGVkIHVzaW5nIGRvbSgpXG4gKi9cbmV4cG9ydCBjb25zdCBET01WTk9ERSA9IFN5bWJvbCgnSWRlbnRpZmllciBmb3IgYSBWTm9kZSBjcmVhdGVkIHVzaW5nIGV4aXN0aW5nIGRvbS4nKTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFdOb2RlYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dOb2RlKGNoaWxkKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiBjaGlsZC50eXBlID09PSBXTk9ERSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgYEROb2RlYCBpcyBhIGBWTm9kZWAgdXNpbmcgdGhlIGB0eXBlYCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWTm9kZShjaGlsZCkge1xuICAgIHJldHVybiBCb29sZWFuKGNoaWxkICYmIHR5cGVvZiBjaGlsZCAhPT0gJ3N0cmluZycgJiYgKGNoaWxkLnR5cGUgPT09IFZOT0RFIHx8IGNoaWxkLnR5cGUgPT09IERPTVZOT0RFKSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgYEROb2RlYCBpcyBhIGBWTm9kZWAgY3JlYXRlZCB3aXRoIGBkb20oKWAgdXNpbmcgdGhlIGB0eXBlYCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEb21WTm9kZShjaGlsZCkge1xuICAgIHJldHVybiBCb29sZWFuKGNoaWxkICYmIHR5cGVvZiBjaGlsZCAhPT0gJ3N0cmluZycgJiYgY2hpbGQudHlwZSA9PT0gRE9NVk5PREUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudE5vZGUodmFsdWUpIHtcbiAgICByZXR1cm4gISF2YWx1ZS50YWdOYW1lO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlKGROb2Rlcywgb3B0aW9uc09yTW9kaWZpZXIsIHByZWRpY2F0ZSkge1xuICAgIGxldCBzaGFsbG93ID0gZmFsc2U7XG4gICAgbGV0IG1vZGlmaWVyO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yTW9kaWZpZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbW9kaWZpZXIgPSBvcHRpb25zT3JNb2RpZmllcjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG1vZGlmaWVyID0gb3B0aW9uc09yTW9kaWZpZXIubW9kaWZpZXI7XG4gICAgICAgIHByZWRpY2F0ZSA9IG9wdGlvbnNPck1vZGlmaWVyLnByZWRpY2F0ZTtcbiAgICAgICAgc2hhbGxvdyA9IG9wdGlvbnNPck1vZGlmaWVyLnNoYWxsb3cgfHwgZmFsc2U7XG4gICAgfVxuICAgIGxldCBub2RlcyA9IEFycmF5LmlzQXJyYXkoZE5vZGVzKSA/IFsuLi5kTm9kZXNdIDogW2ROb2Rlc107XG4gICAgZnVuY3Rpb24gYnJlYWtlcigpIHtcbiAgICAgICAgbm9kZXMgPSBbXTtcbiAgICB9XG4gICAgd2hpbGUgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBub2RlID0gbm9kZXMuc2hpZnQoKTtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICghc2hhbGxvdyAmJiAoaXNXTm9kZShub2RlKSB8fCBpc1ZOb2RlKG5vZGUpKSAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgbm9kZXMgPSBbLi4ubm9kZXMsIC4uLm5vZGUuY2hpbGRyZW5dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXIobm9kZSwgYnJlYWtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGROb2Rlcztcbn1cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgY2FsbHMgdG8gY3JlYXRlIGEgd2lkZ2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdyh3aWRnZXRDb25zdHJ1Y3RvciwgcHJvcGVydGllcywgY2hpbGRyZW4gPSBbXSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB3aWRnZXRDb25zdHJ1Y3RvcixcbiAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgdHlwZTogV05PREVcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHYodGFnLCBwcm9wZXJ0aWVzT3JDaGlsZHJlbiA9IHt9LCBjaGlsZHJlbiA9IHVuZGVmaW5lZCkge1xuICAgIGxldCBwcm9wZXJ0aWVzID0gcHJvcGVydGllc09yQ2hpbGRyZW47XG4gICAgbGV0IGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnRpZXNPckNoaWxkcmVuKSkge1xuICAgICAgICBjaGlsZHJlbiA9IHByb3BlcnRpZXNPckNoaWxkcmVuO1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBkZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9IHByb3BlcnRpZXM7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGFnLFxuICAgICAgICBkZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIHR5cGU6IFZOT0RFXG4gICAgfTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgVk5vZGUgZm9yIGFuIGV4aXN0aW5nIERPTSBOb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZG9tKHsgbm9kZSwgYXR0cnMgPSB7fSwgcHJvcHMgPSB7fSwgb24gPSB7fSwgZGlmZlR5cGUgPSAnbm9uZScgfSwgY2hpbGRyZW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0YWc6IGlzRWxlbWVudE5vZGUobm9kZSkgPyBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA6ICcnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wcyxcbiAgICAgICAgYXR0cmlidXRlczogYXR0cnMsXG4gICAgICAgIGV2ZW50czogb24sXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB0eXBlOiBET01WTk9ERSxcbiAgICAgICAgZG9tTm9kZTogbm9kZSxcbiAgICAgICAgdGV4dDogaXNFbGVtZW50Tm9kZShub2RlKSA/IHVuZGVmaW5lZCA6IG5vZGUuZGF0YSxcbiAgICAgICAgZGlmZlR5cGVcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2QubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyUmVuZGVyKG1ldGhvZCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYWZ0ZXJSZW5kZXInLCBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiBtZXRob2QpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgYWZ0ZXJSZW5kZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZnRlclJlbmRlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hZnRlclJlbmRlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuaW1wb3J0IHsgYmVmb3JlUHJvcGVydGllcyB9IGZyb20gJy4vYmVmb3JlUHJvcGVydGllcyc7XG5leHBvcnQgZnVuY3Rpb24gYWx3YXlzUmVuZGVyKCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgYmVmb3JlUHJvcGVydGllcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICAgICAgfSkodGFyZ2V0KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGFsd2F5c1JlbmRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFsd2F5c1JlbmRlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hbHdheXNSZW5kZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgeyBoYW5kbGVEZWNvcmF0b3IgfSBmcm9tICcuL2hhbmRsZURlY29yYXRvcic7XG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlUHJvcGVydGllcyhtZXRob2QpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnLCBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiBtZXRob2QpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgYmVmb3JlUHJvcGVydGllcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJlZm9yZVByb3BlcnRpZXMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYmVmb3JlUHJvcGVydGllcy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYmVmb3JlUHJvcGVydGllcy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgeyBDdXN0b21FbGVtZW50Q2hpbGRUeXBlIH0gZnJvbSAnLi4vcmVnaXN0ZXJDdXN0b21FbGVtZW50JztcbmltcG9ydCBSZWdpc3RyeSBmcm9tICcuLi9SZWdpc3RyeSc7XG4vKipcbiAqIFRoaXMgRGVjb3JhdG9yIGlzIHByb3ZpZGVkIHByb3BlcnRpZXMgdGhhdCBkZWZpbmUgdGhlIGJlaGF2aW9yIG9mIGEgY3VzdG9tIGVsZW1lbnQsIGFuZFxuICogcmVnaXN0ZXJzIHRoYXQgY3VzdG9tIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b21FbGVtZW50KHsgdGFnLCBwcm9wZXJ0aWVzID0gW10sIGF0dHJpYnV0ZXMgPSBbXSwgZXZlbnRzID0gW10sIGNoaWxkVHlwZSA9IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUuRE9KTywgcmVnaXN0cnlGYWN0b3J5ID0gKCkgPT4gbmV3IFJlZ2lzdHJ5KCkgfSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC5wcm90b3R5cGUuX19jdXN0b21FbGVtZW50RGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgIHRhZ05hbWU6IHRhZyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgICAgZXZlbnRzLFxuICAgICAgICAgICAgY2hpbGRUeXBlLFxuICAgICAgICAgICAgcmVnaXN0cnlGYWN0b3J5XG4gICAgICAgIH07XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbUVsZW1lbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jdXN0b21FbGVtZW50Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZWdpc3RlciBhIGZ1bmN0aW9uIGFzIGEgc3BlY2lmaWMgcHJvcGVydHkgZGlmZlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvZiB3aGljaCB0aGUgZGlmZiBmdW5jdGlvbiBpcyBhcHBsaWVkXG4gKiBAcGFyYW0gZGlmZlR5cGUgICAgICBUaGUgZGlmZiB0eXBlLCBkZWZhdWx0IGlzIERpZmZUeXBlLkFVVE8uXG4gKiBAcGFyYW0gZGlmZkZ1bmN0aW9uICBBIGRpZmYgZnVuY3Rpb24gdG8gcnVuIGlmIGRpZmZUeXBlIGlmIERpZmZUeXBlLkNVU1RPTVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZlByb3BlcnR5KHByb3BlcnR5TmFtZSwgZGlmZkZ1bmN0aW9uLCByZWFjdGlvbkZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKGBkaWZmUHJvcGVydHk6JHtwcm9wZXJ0eU5hbWV9YCwgZGlmZkZ1bmN0aW9uLmJpbmQobnVsbCkpO1xuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdyZWdpc3RlcmVkRGlmZlByb3BlcnR5JywgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKHJlYWN0aW9uRnVuY3Rpb24gfHwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicsIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgICAgcmVhY3Rpb246IHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IHJlYWN0aW9uRnVuY3Rpb25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBkaWZmUHJvcGVydHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaWZmUHJvcGVydHkubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9kaWZmUHJvcGVydHkubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiLyoqXG4gKiBHZW5lcmljIGRlY29yYXRvciBoYW5kbGVyIHRvIHRha2UgY2FyZSBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgZGVjb3JhdG9yIHdhcyBjYWxsZWQgYXQgdGhlIGNsYXNzIGxldmVsXG4gKiBvciB0aGUgbWV0aG9kIGxldmVsLlxuICpcbiAqIEBwYXJhbSBoYW5kbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVEZWNvcmF0b3IoaGFuZGxlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaGFuZGxlcih0YXJnZXQucHJvdG90eXBlLCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlcih0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnQgZGVmYXVsdCBoYW5kbGVEZWNvcmF0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW5kbGVEZWNvcmF0b3IubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9oYW5kbGVEZWNvcmF0b3IubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IFdlYWtNYXAgZnJvbSAnQGRvam8vc2hpbS9XZWFrTWFwJztcbmltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmltcG9ydCB7IGJlZm9yZVByb3BlcnRpZXMgfSBmcm9tICcuL2JlZm9yZVByb3BlcnRpZXMnO1xuLyoqXG4gKiBNYXAgb2YgaW5zdGFuY2VzIGFnYWluc3QgcmVnaXN0ZXJlZCBpbmplY3RvcnMuXG4gKi9cbmNvbnN0IHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBEZWNvcmF0b3IgcmV0cmlldmVzIGFuIGluamVjdG9yIGZyb20gYW4gYXZhaWxhYmxlIHJlZ2lzdHJ5IHVzaW5nIHRoZSBuYW1lIGFuZFxuICogY2FsbHMgdGhlIGBnZXRQcm9wZXJ0aWVzYCBmdW5jdGlvbiB3aXRoIHRoZSBwYXlsb2FkIGZyb20gdGhlIGluamVjdG9yXG4gKiBhbmQgY3VycmVudCBwcm9wZXJ0aWVzIHdpdGggdGhlIHRoZSBpbmplY3RlZCBwcm9wZXJ0aWVzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBJbmplY3RDb25maWcgdGhlIGluamVjdCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoeyBuYW1lLCBnZXRQcm9wZXJ0aWVzIH0pIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIGJlZm9yZVByb3BlcnRpZXMoZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluamVjdG9ySXRlbSA9IHRoaXMucmVnaXN0cnkuZ2V0SW5qZWN0b3IobmFtZSk7XG4gICAgICAgICAgICBpZiAoaW5qZWN0b3JJdGVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpbmplY3RvciwgaW52YWxpZGF0b3IgfSA9IGluamVjdG9ySXRlbTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RlcmVkSW5qZWN0b3JzID0gcmVnaXN0ZXJlZEluamVjdG9yc01hcC5nZXQodGhpcykgfHwgW107XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVyZWRJbmplY3RvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAuc2V0KHRoaXMsIHJlZ2lzdGVyZWRJbmplY3RvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZEluamVjdG9ycy5pbmRleE9mKGluamVjdG9ySXRlbSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3duKGludmFsaWRhdG9yLm9uKCdpbnZhbGlkYXRlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEluamVjdG9ycy5wdXNoKGluamVjdG9ySXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzKGluamVjdG9yKCksIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSh0YXJnZXQpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgaW5qZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5qZWN0Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2luamVjdC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IFdJREdFVF9CQVNFX1RZUEUgfSBmcm9tICcuL1JlZ2lzdHJ5JztcbmZ1bmN0aW9uIGlzT2JqZWN0T3JBcnJheSh2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhbHdheXMocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5nZWQ6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5nZWQ6IHByZXZpb3VzUHJvcGVydHkgIT09IG5ld1Byb3BlcnR5LFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3cocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHZhbGlkT2xkUHJvcGVydHkgPSBwcmV2aW91c1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShwcmV2aW91c1Byb3BlcnR5KTtcbiAgICBjb25zdCB2YWxpZE5ld1Byb3BlcnR5ID0gbmV3UHJvcGVydHkgJiYgaXNPYmplY3RPckFycmF5KG5ld1Byb3BlcnR5KTtcbiAgICBpZiAoIXZhbGlkT2xkUHJvcGVydHkgfHwgIXZhbGlkTmV3UHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoYW5nZWQ6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNLZXlzID0gT2JqZWN0LmtleXMocHJldmlvdXNQcm9wZXJ0eSk7XG4gICAgY29uc3QgbmV3S2V5cyA9IE9iamVjdC5rZXlzKG5ld1Byb3BlcnR5KTtcbiAgICBpZiAocHJldmlvdXNLZXlzLmxlbmd0aCAhPT0gbmV3S2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjaGFuZ2VkID0gbmV3S2V5cy5zb21lKChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXdQcm9wZXJ0eVtrZXldICE9PSBwcmV2aW91c1Byb3BlcnR5W2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGF1dG8ocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0eXBlb2YgbmV3UHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKG5ld1Byb3BlcnR5Ll90eXBlID09PSBXSURHRVRfQkFTRV9UWVBFKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZWZlcmVuY2UocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gaWdub3JlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdE9yQXJyYXkobmV3UHJvcGVydHkpKSB7XG4gICAgICAgIHJlc3VsdCA9IHNoYWxsb3cocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpZmYubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RpZmYubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kaWZmLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdAZG9qby9jb3JlL2xhbmcnO1xuaW1wb3J0IGNzc1RyYW5zaXRpb25zIGZyb20gJy4uL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMnO1xuaW1wb3J0IHsgYWZ0ZXJSZW5kZXIgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXInO1xuaW1wb3J0IHsgdiB9IGZyb20gJy4vLi4vZCc7XG5pbXBvcnQgeyBkb20gfSBmcm9tICcuLy4uL3Zkb20nO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBhdHRhY2ggc3RhdGUgb2YgdGhlIHByb2plY3RvclxuICovXG5leHBvcnQgdmFyIFByb2plY3RvckF0dGFjaFN0YXRlO1xuKGZ1bmN0aW9uIChQcm9qZWN0b3JBdHRhY2hTdGF0ZSkge1xuICAgIFByb2plY3RvckF0dGFjaFN0YXRlW1Byb2plY3RvckF0dGFjaFN0YXRlW1wiQXR0YWNoZWRcIl0gPSAxXSA9IFwiQXR0YWNoZWRcIjtcbiAgICBQcm9qZWN0b3JBdHRhY2hTdGF0ZVtQcm9qZWN0b3JBdHRhY2hTdGF0ZVtcIkRldGFjaGVkXCJdID0gMl0gPSBcIkRldGFjaGVkXCI7XG59KShQcm9qZWN0b3JBdHRhY2hTdGF0ZSB8fCAoUHJvamVjdG9yQXR0YWNoU3RhdGUgPSB7fSkpO1xuLyoqXG4gKiBBdHRhY2ggdHlwZSBmb3IgdGhlIHByb2plY3RvclxuICovXG5leHBvcnQgdmFyIEF0dGFjaFR5cGU7XG4oZnVuY3Rpb24gKEF0dGFjaFR5cGUpIHtcbiAgICBBdHRhY2hUeXBlW0F0dGFjaFR5cGVbXCJBcHBlbmRcIl0gPSAxXSA9IFwiQXBwZW5kXCI7XG4gICAgQXR0YWNoVHlwZVtBdHRhY2hUeXBlW1wiTWVyZ2VcIl0gPSAyXSA9IFwiTWVyZ2VcIjtcbn0pKEF0dGFjaFR5cGUgfHwgKEF0dGFjaFR5cGUgPSB7fSkpO1xuZXhwb3J0IGZ1bmN0aW9uIFByb2plY3Rvck1peGluKEJhc2UpIHtcbiAgICBjbGFzcyBQcm9qZWN0b3IgZXh0ZW5kcyBCYXNlIHtcbiAgICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgICAgICB0aGlzLl9yb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgIHRoaXMuX2FzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zOiBjc3NUcmFuc2l0aW9uc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICB0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuRGV0YWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgYXBwZW5kKHJvb3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogQXR0YWNoVHlwZS5BcHBlbmQsXG4gICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2gob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgbWVyZ2Uocm9vdCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBBdHRhY2hUeXBlLk1lcmdlLFxuICAgICAgICAgICAgICAgIHJvb3RcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHNldCByb290KHJvb3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjaGFuZ2Ugcm9vdCBlbGVtZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9yb290ID0gcm9vdDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcm9vdCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb290O1xuICAgICAgICB9XG4gICAgICAgIGdldCBhc3luYygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hc3luYztcbiAgICAgICAgfVxuICAgICAgICBzZXQgYXN5bmMoYXN5bmMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjaGFuZ2UgYXN5bmMgbW9kZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYXN5bmMgPSBhc3luYztcbiAgICAgICAgfVxuICAgICAgICBzYW5kYm94KGRvYyA9IGRvY3VtZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBhbHJlYWR5IGF0dGFjaGVkLCBjYW5ub3QgY3JlYXRlIHNhbmRib3gnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2FzeW5jID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c1Jvb3QgPSB0aGlzLnJvb3Q7XG4gICAgICAgICAgICAvKiBmcmVlIHVwIHRoZSBkb2N1bWVudCBmcmFnbWVudCBmb3IgR0MgKi9cbiAgICAgICAgICAgIHRoaXMub3duKHtcbiAgICAgICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBwcmV2aW91c1Jvb3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9hdHRhY2goe1xuICAgICAgICAgICAgICAgIC8qIERvY3VtZW50RnJhZ21lbnQgaXMgbm90IGFzc2lnbmFibGUgdG8gRWxlbWVudCwgYnV0IHByb3ZpZGVzIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHdvcmsgKi9cbiAgICAgICAgICAgICAgICByb290OiBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEF0dGFjaFR5cGUuQXBwZW5kXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRDaGlsZHJlbihjaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5fX3NldENoaWxkcmVuX18oY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHNldFByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgICAgICAgICAgdGhpcy5fX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICBfX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyAmJiB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5ICE9PSBwcm9wZXJ0aWVzLnJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcy5yZWdpc3RyeS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyA9IGFzc2lnbih7fSwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICBzdXBlci5fX3NldENvcmVQcm9wZXJ0aWVzX18oeyBiaW5kOiB0aGlzLCBiYXNlUmVnaXN0cnk6IHByb3BlcnRpZXMucmVnaXN0cnkgfSk7XG4gICAgICAgICAgICBzdXBlci5fX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICB0b0h0bWwoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSAhPT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQgfHwgIXRoaXMuX3Byb2plY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBpcyBub3QgYXR0YWNoZWQsIGNhbm5vdCByZXR1cm4gYW4gSFRNTCBzdHJpbmcgb2YgcHJvamVjdGlvbi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9qZWN0aW9uLmRvbU5vZGUuY2hpbGROb2Rlc1swXS5vdXRlckhUTUw7XG4gICAgICAgIH1cbiAgICAgICAgYWZ0ZXJSZW5kZXIocmVzdWx0KSB7XG4gICAgICAgICAgICBsZXQgbm9kZSA9IHJlc3VsdDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyB8fCByZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBub2RlID0gdignc3BhbicsIHt9LCBbcmVzdWx0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIF9hdHRhY2goeyB0eXBlLCByb290IH0pIHtcbiAgICAgICAgICAgIGlmIChyb290KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9hdHRhY2hIYW5kbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoSGFuZGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcm9qZWN0b3JTdGF0ZSA9IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0ge1xuICAgICAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0b3JTdGF0ZSA9IFByb2plY3RvckF0dGFjaFN0YXRlLkRldGFjaGVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMub3duKGhhbmRsZSk7XG4gICAgICAgICAgICB0aGlzLl9hdHRhY2hIYW5kbGUgPSBoYW5kbGU7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zLCB7IHN5bmM6ICF0aGlzLl9hc3luYyB9KTtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQXR0YWNoVHlwZS5BcHBlbmQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb24gPSBkb20uYXBwZW5kKHRoaXMucm9vdCwgdGhpcywgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEF0dGFjaFR5cGUuTWVyZ2U6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb24gPSBkb20ubWVyZ2UodGhpcy5yb290LCB0aGlzLCB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaEhhbmRsZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0c2xpYl8xLl9fZGVjb3JhdGUoW1xuICAgICAgICBhZnRlclJlbmRlcigpLFxuICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKSxcbiAgICAgICAgdHNsaWJfMS5fX21ldGFkYXRhKFwiZGVzaWduOnJldHVybnR5cGVcIiwgdm9pZCAwKVxuICAgIF0sIFByb2plY3Rvci5wcm90b3R5cGUsIFwiYWZ0ZXJSZW5kZXJcIiwgbnVsbCk7XG4gICAgcmV0dXJuIFByb2plY3Rvcjtcbn1cbmV4cG9ydCBkZWZhdWx0IFByb2plY3Rvck1peGluO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvamVjdG9yLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9taXhpbnMvUHJvamVjdG9yLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICcuLy4uL0luamVjdG9yJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9pbmplY3QnO1xuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi8uLi9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBkaWZmUHJvcGVydHkgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5JztcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICcuLy4uL2RpZmYnO1xuY29uc3QgVEhFTUVfS0VZID0gJyBfa2V5JztcbmV4cG9ydCBjb25zdCBJTkpFQ1RFRF9USEVNRV9LRVkgPSBTeW1ib2woJ3RoZW1lJyk7XG4vKipcbiAqIERlY29yYXRvciBmb3IgYmFzZSBjc3MgY2xhc3Nlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWUodGhlbWUpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycsIHRoZW1lKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHJldmVyc2UgbG9va3VwIGZvciB0aGUgY2xhc3NlcyBwYXNzZWQgaW4gdmlhIHRoZSBgdGhlbWVgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBjbGFzc2VzIFRoZSBiYXNlQ2xhc3NlcyBvYmplY3RcbiAqIEByZXF1aXJlc1xuICovXG5mdW5jdGlvbiBjcmVhdGVUaGVtZUNsYXNzZXNMb29rdXAoY2xhc3Nlcykge1xuICAgIHJldHVybiBjbGFzc2VzLnJlZHVjZSgoY3VycmVudENsYXNzTmFtZXMsIGJhc2VDbGFzcykgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhiYXNlQ2xhc3MpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY3VycmVudENsYXNzTmFtZXNbYmFzZUNsYXNzW2tleV1dID0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDbGFzc05hbWVzO1xuICAgIH0sIHt9KTtcbn1cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBpcyBnaXZlbiBhIHRoZW1lIGFuZCBhbiBvcHRpb25hbCByZWdpc3RyeSwgdGhlIHRoZW1lXG4gKiBpbmplY3RvciBpcyBkZWZpbmVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIHRoZW1lLlxuICpcbiAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gc2V0XG4gKiBAcGFyYW0gdGhlbWVSZWdpc3RyeSByZWdpc3RyeSB0byBkZWZpbmUgdGhlIHRoZW1lIGluamVjdG9yIGFnYWluc3QuIERlZmF1bHRzXG4gKiB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XG4gKlxuICogQHJldHVybnMgdGhlIHRoZW1lIGluamVjdG9yIHVzZWQgdG8gc2V0IHRoZSB0aGVtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoZW1lLCB0aGVtZVJlZ2lzdHJ5KSB7XG4gICAgY29uc3QgdGhlbWVJbmplY3RvciA9IG5ldyBJbmplY3Rvcih0aGVtZSk7XG4gICAgdGhlbWVSZWdpc3RyeS5kZWZpbmVJbmplY3RvcihJTkpFQ1RFRF9USEVNRV9LRVksIChpbnZhbGlkYXRvcikgPT4ge1xuICAgICAgICB0aGVtZUluamVjdG9yLnNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHRoZW1lSW5qZWN0b3IuZ2V0KCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoZW1lSW5qZWN0b3I7XG59XG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYXNzIGRlY29yYXRlZCB3aXRoIHdpdGggVGhlbWVkIGZ1bmN0aW9uYWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lZE1peGluKEJhc2UpIHtcbiAgICBsZXQgVGhlbWVkID0gY2xhc3MgVGhlbWVkIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVnaXN0ZXJlZCBiYXNlIHRoZW1lIGtleXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZUtleXMgPSBbXTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW5kaWNhdGVzIGlmIGNsYXNzZXMgbWV0YSBkYXRhIG5lZWQgdG8gYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTG9hZGVkIHRoZW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX3RoZW1lID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhlbWUoY2xhc3Nlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlY2FsY3VsYXRlQ2xhc3Nlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlY2FsY3VsYXRlVGhlbWVDbGFzc2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLm1hcCgoY2xhc3NOYW1lKSA9PiB0aGlzLl9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRoZW1lQ2xhc3MoY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9uIGZpcmVkIHdoZW4gYHRoZW1lYCBvciBgZXh0cmFDbGFzc2VzYCBhcmUgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIG9uUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkIHx8IGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHRyYUNsYXNzZXMgPSB0aGlzLnByb3BlcnRpZXMuZXh0cmFDbGFzc2VzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDbGFzc05hbWUgPSB0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cFtjbGFzc05hbWVdO1xuICAgICAgICAgICAgbGV0IHJlc3VsdENsYXNzTmFtZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhlbWVDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENsYXNzIG5hbWU6ICcke2NsYXNzTmFtZX0nIG5vdCBmb3VuZCBpbiB0aGVtZWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2goZXh0cmFDbGFzc2VzW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2xhc3NOYW1lcy5wdXNoKHRoaXMuX3RoZW1lW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2godGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZVt0aGVtZUNsYXNzTmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdENsYXNzTmFtZXMuam9pbignICcpO1xuICAgICAgICB9XG4gICAgICAgIF9yZWNhbGN1bGF0ZVRoZW1lQ2xhc3NlcygpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdGhlbWUgPSB7fSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgYmFzZVRoZW1lcyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiYXNlVGhlbWVDbGFzc2VzJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lID0gYmFzZVRoZW1lcy5yZWR1Y2UoKGZpbmFsQmFzZVRoZW1lLCBiYXNlVGhlbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2EgPSBUSEVNRV9LRVksIGtleSA9IGJhc2VUaGVtZVtfYV0sIGNsYXNzZXMgPSB0c2xpYl8xLl9fcmVzdChiYXNlVGhlbWUsIFt0eXBlb2YgX2EgPT09IFwic3ltYm9sXCIgPyBfYSA6IF9hICsgXCJcIl0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaW5hbEJhc2VUaGVtZSwgY2xhc3Nlcyk7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2VUaGVtZUNsYXNzZXNSZXZlcnNlTG9va3VwID0gY3JlYXRlVGhlbWVDbGFzc2VzTG9va3VwKGJhc2VUaGVtZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5yZWR1Y2UoKGJhc2VUaGVtZSwgdGhlbWVLZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVRoZW1lLCB0aGVtZVt0aGVtZUtleV0pO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGRpZmZQcm9wZXJ0eSgndGhlbWUnLCBzaGFsbG93KSxcbiAgICAgICAgZGlmZlByb3BlcnR5KCdleHRyYUNsYXNzZXMnLCBzaGFsbG93KSxcbiAgICAgICAgdHNsaWJfMS5fX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxuICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSksXG4gICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIHZvaWQgMClcbiAgICBdLCBUaGVtZWQucHJvdG90eXBlLCBcIm9uUHJvcGVydGllc0NoYW5nZWRcIiwgbnVsbCk7XG4gICAgVGhlbWVkID0gdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAgICAgICAgaW5qZWN0KHtcbiAgICAgICAgICAgIG5hbWU6IElOSkVDVEVEX1RIRU1FX0tFWSxcbiAgICAgICAgICAgIGdldFByb3BlcnRpZXM6ICh0aGVtZSwgcHJvcGVydGllcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydGllcy50aGVtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB0aGVtZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgVGhlbWVkKTtcbiAgICByZXR1cm4gVGhlbWVkO1xufVxuZXhwb3J0IGRlZmF1bHQgVGhlbWVkTWl4aW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UaGVtZWQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBXaWRnZXRCYXNlLCBub0JpbmQgfSBmcm9tICcuL1dpZGdldEJhc2UnO1xuaW1wb3J0IHsgUHJvamVjdG9yTWl4aW4gfSBmcm9tICcuL21peGlucy9Qcm9qZWN0b3InO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJ0Bkb2pvL3NoaW0vYXJyYXknO1xuaW1wb3J0IHsgdywgZG9tIH0gZnJvbSAnLi9kJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnQGRvam8vc2hpbS9nbG9iYWwnO1xuaW1wb3J0IHsgcmVnaXN0ZXJUaGVtZUluamVjdG9yIH0gZnJvbSAnLi9taXhpbnMvVGhlbWVkJztcbmltcG9ydCB7IGFsd2F5c1JlbmRlciB9IGZyb20gJy4vZGVjb3JhdG9ycy9hbHdheXNSZW5kZXInO1xuZXhwb3J0IHZhciBDdXN0b21FbGVtZW50Q2hpbGRUeXBlO1xuKGZ1bmN0aW9uIChDdXN0b21FbGVtZW50Q2hpbGRUeXBlKSB7XG4gICAgQ3VzdG9tRWxlbWVudENoaWxkVHlwZVtcIkRPSk9cIl0gPSBcIkRPSk9cIjtcbiAgICBDdXN0b21FbGVtZW50Q2hpbGRUeXBlW1wiTk9ERVwiXSA9IFwiTk9ERVwiO1xuICAgIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGVbXCJURVhUXCJdID0gXCJURVhUXCI7XG59KShDdXN0b21FbGVtZW50Q2hpbGRUeXBlIHx8IChDdXN0b21FbGVtZW50Q2hpbGRUeXBlID0ge30pKTtcbmV4cG9ydCBmdW5jdGlvbiBEb21Ub1dpZGdldFdyYXBwZXIoZG9tTm9kZSkge1xuICAgIGxldCBEb21Ub1dpZGdldFdyYXBwZXIgPSBjbGFzcyBEb21Ub1dpZGdldFdyYXBwZXIgZXh0ZW5kcyBXaWRnZXRCYXNlIHtcbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykucmVkdWNlKChwcm9wcywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ29uJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gYF9fJHtrZXl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvcHNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIHJldHVybiBkb20oeyBub2RlOiBkb21Ob2RlLCBwcm9wczogcHJvcGVydGllcywgZGlmZlR5cGU6ICdkb20nIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXQgZG9tTm9kZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb21Ob2RlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEb21Ub1dpZGdldFdyYXBwZXIgPSB0c2xpYl8xLl9fZGVjb3JhdGUoW1xuICAgICAgICBhbHdheXNSZW5kZXIoKVxuICAgIF0sIERvbVRvV2lkZ2V0V3JhcHBlcik7XG4gICAgcmV0dXJuIERvbVRvV2lkZ2V0V3JhcHBlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoZGVzY3JpcHRvciwgV2lkZ2V0Q29uc3RydWN0b3IpIHtcbiAgICBjb25zdCB7IGF0dHJpYnV0ZXMsIGNoaWxkVHlwZSwgcmVnaXN0cnlGYWN0b3J5IH0gPSBkZXNjcmlwdG9yO1xuICAgIGNvbnN0IGF0dHJpYnV0ZU1hcCA9IHt9O1xuICAgIGF0dHJpYnV0ZXMuZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYXR0cmlidXRlTWFwW2F0dHJpYnV0ZU5hbWVdID0gcHJvcGVydHlOYW1lO1xuICAgIH0pO1xuICAgIHJldHVybiBjbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50UHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGlzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pbml0aWFsaXNlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRvbVByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHsgYXR0cmlidXRlcywgcHJvcGVydGllcywgZXZlbnRzIH0gPSBkZXNjcmlwdG9yO1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Byb3BlcnRpZXMsIHRoaXMuX2F0dHJpYnV0ZXNUb1Byb3BlcnRpZXMoYXR0cmlidXRlcykpO1xuICAgICAgICAgICAgWy4uLmF0dHJpYnV0ZXMsIC4uLnByb3BlcnRpZXNdLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnJlcGxhY2UoL15vbi8sICdfXycpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRQcm9wZXJ0eU5hbWUgIT09IHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW2ZpbHRlcmVkUHJvcGVydHlOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5fZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogKHZhbHVlKSA9PiB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5fZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiAodmFsdWUpID0+IHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZXZlbnRzLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnX19vbicpO1xuICAgICAgICAgICAgICAgIGRvbVByb3BlcnRpZXNbZmlsdGVyZWRQcm9wZXJ0eU5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuX2dldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiAodmFsdWUpID0+IHRoaXMuX3NldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50Q2FsbGJhY2sgPSB0aGlzLl9nZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXZlbnRDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDYWxsYmFjayguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IGFyZ3NcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIGRvbVByb3BlcnRpZXMpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZFR5cGUgPT09IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUuVEVYVCA/IHRoaXMuY2hpbGROb2RlcyA6IHRoaXMuY2hpbGRyZW47XG4gICAgICAgICAgICBmcm9tKGNoaWxkcmVuKS5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8pIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtcmVuZGVyJywgKCkgPT4gdGhpcy5fcmVuZGVyKCkpO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1jb25uZWN0ZWQnLCAoKSA9PiB0aGlzLl9yZW5kZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goRG9tVG9XaWRnZXRXcmFwcGVyKGNoaWxkTm9kZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChkb20oeyBub2RlOiBjaGlsZE5vZGUsIGRpZmZUeXBlOiAnZG9tJyB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtY29ubmVjdGVkJywgKGUpID0+IHRoaXMuX2NoaWxkQ29ubmVjdGVkKGUpKTtcbiAgICAgICAgICAgIGNvbnN0IHdpZGdldFByb3BlcnRpZXMgPSB0aGlzLl9wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyQ2hpbGRyZW4gPSAoKSA9PiB0aGlzLl9fY2hpbGRyZW5fXygpO1xuICAgICAgICAgICAgY29uc3QgV3JhcHBlciA9IGNsYXNzIGV4dGVuZHMgV2lkZ2V0QmFzZSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdyhXaWRnZXRDb25zdHJ1Y3Rvciwgd2lkZ2V0UHJvcGVydGllcywgcmVuZGVyQ2hpbGRyZW4oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcmVnaXN0cnlGYWN0b3J5KCk7XG4gICAgICAgICAgICBjb25zdCB0aGVtZUNvbnRleHQgPSByZWdpc3RlclRoZW1lSW5qZWN0b3IodGhpcy5fZ2V0VGhlbWUoKSwgcmVnaXN0cnkpO1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tdGhlbWUtc2V0JywgKCkgPT4gdGhlbWVDb250ZXh0LnNldCh0aGlzLl9nZXRUaGVtZSgpKSk7XG4gICAgICAgICAgICBjb25zdCBQcm9qZWN0b3IgPSBQcm9qZWN0b3JNaXhpbihXcmFwcGVyKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvciA9IG5ldyBQcm9qZWN0b3IoKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rvci5zZXRQcm9wZXJ0aWVzKHsgcmVnaXN0cnkgfSk7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3IuYXBwZW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGlzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9qby1jZS1jb25uZWN0ZWQnLCB7XG4gICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXNcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0VGhlbWUoKSB7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsICYmIGdsb2JhbC5kb2pvY2UgJiYgZ2xvYmFsLmRvam9jZS50aGVtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWwuZG9qb2NlLnRoZW1lc1tnbG9iYWwuZG9qb2NlLnRoZW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfY2hpbGRDb25uZWN0ZWQoZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGUuZGV0YWlsO1xuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuX2NoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5kb21Ob2RlID09PSBub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtcmVuZGVyJywgKCkgPT4gdGhpcy5fcmVuZGVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihub2RlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfcmVuZGVyKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Byb2plY3Rvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rvci5pbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9qby1jZS1yZW5kZXInLCB7XG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXNcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX19wcm9wZXJ0aWVzX18oKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NoaWxkcmVuX18oKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW4uZmlsdGVyKChDaGlsZCkgPT4gQ2hpbGQuZG9tTm9kZS5pc1dpZGdldCkubWFwKChDaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRvbU5vZGUgfSA9IENoaWxkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdyhDaGlsZCwgT2JqZWN0LmFzc2lnbih7fSwgZG9tTm9kZS5fX3Byb3BlcnRpZXNfXygpKSwgWy4uLmRvbU5vZGUuX19jaGlsZHJlbl9fKCldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkVmFsdWUsIHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBhdHRyaWJ1dGVNYXBbbmFtZV07XG4gICAgICAgICAgICB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBfc2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIF9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVbbm9CaW5kXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgX2F0dHJpYnV0ZXNUb1Byb3BlcnRpZXMoYXR0cmlidXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzV2lkZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKFdpZGdldENvbnN0cnVjdG9yKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IFdpZGdldENvbnN0cnVjdG9yLnByb3RvdHlwZSAmJiBXaWRnZXRDb25zdHJ1Y3Rvci5wcm90b3R5cGUuX19jdXN0b21FbGVtZW50RGVzY3JpcHRvcjtcbiAgICBpZiAoIWRlc2NyaXB0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IGRlc2NyaXB0b3IgZm9yIEN1c3RvbSBFbGVtZW50LCBoYXZlIHlvdSBhZGRlZCB0aGUgQGN1c3RvbUVsZW1lbnQgZGVjb3JhdG9yIHRvIHlvdXIgV2lkZ2V0PycpO1xuICAgIH1cbiAgICBnbG9iYWwuY3VzdG9tRWxlbWVudHMuZGVmaW5lKGRlc2NyaXB0b3IudGFnTmFtZSwgY3JlYXRlKGRlc2NyaXB0b3IsIFdpZGdldENvbnN0cnVjdG9yKSk7XG59XG5leHBvcnQgZGVmYXVsdCByZWdpc3Rlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvcmVnaXN0ZXJDdXN0b21FbGVtZW50Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvcmVnaXN0ZXJDdXN0b21FbGVtZW50Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnQGRvam8vc2hpbS9nbG9iYWwnO1xuaW1wb3J0IHsgZnJvbSBhcyBhcnJheUZyb20gfSBmcm9tICdAZG9qby9zaGltL2FycmF5JztcbmltcG9ydCB7IGlzV05vZGUsIGlzVk5vZGUsIGlzRG9tVk5vZGUsIFZOT0RFLCBXTk9ERSB9IGZyb20gJy4vZCc7XG5pbXBvcnQgeyBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvciB9IGZyb20gJy4vUmVnaXN0cnknO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnQGRvam8vc2hpbS9XZWFrTWFwJztcbmNvbnN0IE5BTUVTUEFDRV9XMyA9ICdodHRwOi8vd3d3LnczLm9yZy8nO1xuY29uc3QgTkFNRVNQQUNFX1NWRyA9IE5BTUVTUEFDRV9XMyArICcyMDAwL3N2Zyc7XG5jb25zdCBOQU1FU1BBQ0VfWExJTksgPSBOQU1FU1BBQ0VfVzMgKyAnMTk5OS94bGluayc7XG5jb25zdCBlbXB0eUFycmF5ID0gW107XG5leHBvcnQgY29uc3Qgd2lkZ2V0SW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgaW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgcHJvamVjdG9yU3RhdGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gc2FtZShkbm9kZTEsIGRub2RlMikge1xuICAgIGlmIChpc1ZOb2RlKGRub2RlMSkgJiYgaXNWTm9kZShkbm9kZTIpKSB7XG4gICAgICAgIGlmIChpc0RvbVZOb2RlKGRub2RlMSkgfHwgaXNEb21WTm9kZShkbm9kZTIpKSB7XG4gICAgICAgICAgICBpZiAoZG5vZGUxLmRvbU5vZGUgIT09IGRub2RlMi5kb21Ob2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkbm9kZTEudGFnICE9PSBkbm9kZTIudGFnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRub2RlMS5wcm9wZXJ0aWVzLmtleSAhPT0gZG5vZGUyLnByb3BlcnRpZXMua2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzV05vZGUoZG5vZGUxKSAmJiBpc1dOb2RlKGRub2RlMikpIHtcbiAgICAgICAgaWYgKGRub2RlMS5pbnN0YW5jZSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBkbm9kZTIud2lkZ2V0Q29uc3RydWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRub2RlMS53aWRnZXRDb25zdHJ1Y3RvciAhPT0gZG5vZGUyLndpZGdldENvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRub2RlMS5wcm9wZXJ0aWVzLmtleSAhPT0gZG5vZGUyLnByb3BlcnRpZXMua2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmNvbnN0IG1pc3NpbmdUcmFuc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZSBhIHRyYW5zaXRpb25zIG9iamVjdCB0byB0aGUgcHJvamVjdGlvbk9wdGlvbnMgdG8gZG8gYW5pbWF0aW9ucycpO1xufTtcbmZ1bmN0aW9uIGdldFByb2plY3Rpb25PcHRpb25zKHByb2plY3Rvck9wdGlvbnMsIHByb2plY3Rvckluc3RhbmNlKSB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICAgIG5hbWVzcGFjZTogdW5kZWZpbmVkLFxuICAgICAgICBzdHlsZUFwcGx5ZXI6IGZ1bmN0aW9uIChkb21Ob2RlLCBzdHlsZU5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICBkb21Ob2RlLnN0eWxlW3N0eWxlTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNpdGlvbnM6IHtcbiAgICAgICAgICAgIGVudGVyOiBtaXNzaW5nVHJhbnNpdGlvbixcbiAgICAgICAgICAgIGV4aXQ6IG1pc3NpbmdUcmFuc2l0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGRlcHRoOiAwLFxuICAgICAgICBtZXJnZTogZmFsc2UsXG4gICAgICAgIHN5bmM6IGZhbHNlLFxuICAgICAgICBwcm9qZWN0b3JJbnN0YW5jZVxuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLCBwcm9qZWN0b3JPcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGNoZWNrU3R5bGVWYWx1ZShzdHlsZVZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBzdHlsZVZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0eWxlIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVFdmVudChkb21Ob2RlLCBldmVudE5hbWUsIGN1cnJlbnRWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMsIGJpbmQsIHByZXZpb3VzVmFsdWUpIHtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgY29uc3QgZXZlbnRNYXAgPSBwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLmdldChkb21Ob2RlKSB8fCBuZXcgV2Vha01hcCgpO1xuICAgIGlmIChwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzRXZlbnQgPSBldmVudE1hcC5nZXQocHJldmlvdXNWYWx1ZSk7XG4gICAgICAgIGRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHByZXZpb3VzRXZlbnQpO1xuICAgIH1cbiAgICBsZXQgY2FsbGJhY2sgPSBjdXJyZW50VmFsdWUuYmluZChiaW5kKTtcbiAgICBpZiAoZXZlbnROYW1lID09PSAnaW5wdXQnKSB7XG4gICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgICAgY3VycmVudFZhbHVlLmNhbGwodGhpcywgZXZ0KTtcbiAgICAgICAgICAgIGV2dC50YXJnZXRbJ29uaW5wdXQtdmFsdWUnXSA9IGV2dC50YXJnZXQudmFsdWU7XG4gICAgICAgIH0uYmluZChiaW5kKTtcbiAgICB9XG4gICAgZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuICAgIGV2ZW50TWFwLnNldChjdXJyZW50VmFsdWUsIGNhbGxiYWNrKTtcbiAgICBwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLnNldChkb21Ob2RlLCBldmVudE1hcCk7XG59XG5mdW5jdGlvbiBhZGRDbGFzc2VzKGRvbU5vZGUsIGNsYXNzZXMpIHtcbiAgICBpZiAoY2xhc3Nlcykge1xuICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gY2xhc3Nlcy5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRvbU5vZGUuY2xhc3NMaXN0LmFkZChjbGFzc05hbWVzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgY2xhc3Nlcykge1xuICAgIGlmIChjbGFzc2VzKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZG9tTm9kZS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZXNbaV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYnVpbGRQcmV2aW91c1Byb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXMsIGN1cnJlbnQpIHtcbiAgICBjb25zdCB7IGRpZmZUeXBlLCBwcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzIH0gPSBjdXJyZW50O1xuICAgIGlmICghZGlmZlR5cGUgfHwgZGlmZlR5cGUgPT09ICd2ZG9tJykge1xuICAgICAgICByZXR1cm4geyBwcm9wZXJ0aWVzOiBwcmV2aW91cy5wcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzOiBwcmV2aW91cy5hdHRyaWJ1dGVzLCBldmVudHM6IHByZXZpb3VzLmV2ZW50cyB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChkaWZmVHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiB7IHByb3BlcnRpZXM6IHt9LCBhdHRyaWJ1dGVzOiBwcmV2aW91cy5hdHRyaWJ1dGVzID8ge30gOiB1bmRlZmluZWQsIGV2ZW50czogcHJldmlvdXMuZXZlbnRzIH07XG4gICAgfVxuICAgIGxldCBuZXdQcm9wZXJ0aWVzID0ge1xuICAgICAgICBwcm9wZXJ0aWVzOiB7fVxuICAgIH07XG4gICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgbmV3UHJvcGVydGllcy5hdHRyaWJ1dGVzID0ge307XG4gICAgICAgIG5ld1Byb3BlcnRpZXMuZXZlbnRzID0gcHJldmlvdXMuZXZlbnRzO1xuICAgICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuICAgICAgICAgICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzW3Byb3BOYW1lXSA9IGRvbU5vZGVbcHJvcE5hbWVdO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaCgoYXR0ck5hbWUpID0+IHtcbiAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMuYXR0cmlidXRlc1thdHRyTmFtZV0gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZShhdHRyTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3UHJvcGVydGllcztcbiAgICB9XG4gICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykucmVkdWNlKChwcm9wcywgcHJvcGVydHkpID0+IHtcbiAgICAgICAgcHJvcHNbcHJvcGVydHldID0gZG9tTm9kZS5nZXRBdHRyaWJ1dGUocHJvcGVydHkpIHx8IGRvbU5vZGVbcHJvcGVydHldO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfSwge30pO1xuICAgIHJldHVybiBuZXdQcm9wZXJ0aWVzO1xufVxuZnVuY3Rpb24gZm9jdXNOb2RlKHByb3BWYWx1ZSwgcHJldmlvdXNWYWx1ZSwgZG9tTm9kZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3VsdCA9IHByb3BWYWx1ZSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gcHJvcFZhbHVlICYmICFwcmV2aW91c1ZhbHVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICBkb21Ob2RlLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIG9ubHlFdmVudHMgPSBmYWxzZSkge1xuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBjb25zdCBldmVudE1hcCA9IHByb2plY3RvclN0YXRlLm5vZGVNYXAuZ2V0KGRvbU5vZGUpO1xuICAgIGlmIChldmVudE1hcCkge1xuICAgICAgICBPYmplY3Qua2V5cyhwcmV2aW91c1Byb3BlcnRpZXMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0V2ZW50ID0gcHJvcE5hbWUuc3Vic3RyKDAsIDIpID09PSAnb24nIHx8IG9ubHlFdmVudHM7XG4gICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBvbmx5RXZlbnRzID8gcHJvcE5hbWUgOiBwcm9wTmFtZS5zdWJzdHIoMik7XG4gICAgICAgICAgICBpZiAoaXNFdmVudCAmJiAhcHJvcGVydGllc1twcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudENhbGxiYWNrID0gZXZlbnRNYXAuZ2V0KHByZXZpb3VzUHJvcGVydGllc1twcm9wTmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIGF0dHJOYW1lLCBhdHRyVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgaWYgKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSA9PT0gTkFNRVNQQUNFX1NWRyAmJiBhdHRyTmFtZSA9PT0gJ2hyZWYnKSB7XG4gICAgICAgIGRvbU5vZGUuc2V0QXR0cmlidXRlTlMoTkFNRVNQQUNFX1hMSU5LLCBhdHRyTmFtZSwgYXR0clZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKGF0dHJOYW1lID09PSAncm9sZScgJiYgYXR0clZhbHVlID09PSAnJykgfHwgYXR0clZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZG9tTm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZG9tTm9kZS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlcyhkb21Ob2RlLCBwcmV2aW91c0F0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgY29uc3QgYXR0ck5hbWVzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlcyk7XG4gICAgY29uc3QgYXR0ckNvdW50ID0gYXR0ck5hbWVzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGF0dHJOYW1lID0gYXR0ck5hbWVzW2ldO1xuICAgICAgICBjb25zdCBhdHRyVmFsdWUgPSBhdHRyaWJ1dGVzW2F0dHJOYW1lXTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNBdHRyVmFsdWUgPSBwcmV2aW91c0F0dHJpYnV0ZXNbYXR0ck5hbWVdO1xuICAgICAgICBpZiAoYXR0clZhbHVlICE9PSBwcmV2aW91c0F0dHJWYWx1ZSkge1xuICAgICAgICAgICAgdXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIGF0dHJOYW1lLCBhdHRyVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzID0gdHJ1ZSkge1xuICAgIGxldCBwcm9wZXJ0aWVzVXBkYXRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpO1xuICAgIGNvbnN0IHByb3BDb3VudCA9IHByb3BOYW1lcy5sZW5ndGg7XG4gICAgaWYgKHByb3BOYW1lcy5pbmRleE9mKCdjbGFzc2VzJykgPT09IC0xICYmIHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzICYmIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcENvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBwcm9wTmFtZXNbaV07XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSBwcm9wZXJ0aWVzW3Byb3BOYW1lXTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzUHJvcGVydGllc1twcm9wTmFtZV07XG4gICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2NsYXNzZXMnKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0NsYXNzZXMgPSBBcnJheS5pc0FycmF5KHByZXZpb3VzVmFsdWUpID8gcHJldmlvdXNWYWx1ZSA6IFtwcmV2aW91c1ZhbHVlXTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDbGFzc2VzID0gQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpID8gcHJvcFZhbHVlIDogW3Byb3BWYWx1ZV07XG4gICAgICAgICAgICBpZiAocHJldmlvdXNDbGFzc2VzICYmIHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wVmFsdWUgfHwgcHJvcFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c0NsYXNzZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDbGFzc2VzID0gWy4uLmN1cnJlbnRDbGFzc2VzXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c0NsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQ2xhc3NOYW1lID0gcHJldmlvdXNDbGFzc2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xhc3NJbmRleCA9IG5ld0NsYXNzZXMuaW5kZXhPZihwcmV2aW91c0NsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNDbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2xhc3Nlcy5zcGxpY2UoY2xhc3NJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3Q2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3Nlcyhkb21Ob2RlLCBuZXdDbGFzc2VzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudENsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3Nlcyhkb21Ob2RlLCBjdXJyZW50Q2xhc3Nlc1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSAnZm9jdXMnKSB7XG4gICAgICAgICAgICBmb2N1c05vZGUocHJvcFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBkb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgPT09ICdzdHlsZXMnKSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZU5hbWVzID0gT2JqZWN0LmtleXMocHJvcFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlQ291bnQgPSBzdHlsZU5hbWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc3R5bGVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVOYW1lID0gc3R5bGVOYW1lc1tqXTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdHlsZVZhbHVlID0gcHJvcFZhbHVlW3N0eWxlTmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkU3R5bGVWYWx1ZSA9IHByZXZpb3VzVmFsdWUgJiYgcHJldmlvdXNWYWx1ZVtzdHlsZU5hbWVdO1xuICAgICAgICAgICAgICAgIGlmIChuZXdTdHlsZVZhbHVlID09PSBvbGRTdHlsZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1N0eWxlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tTdHlsZVZhbHVlKG5ld1N0eWxlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5zdHlsZUFwcGx5ZXIoZG9tTm9kZSwgc3R5bGVOYW1lLCBuZXdTdHlsZVZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zLnN0eWxlQXBwbHllcihkb21Ob2RlLCBzdHlsZU5hbWUsICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXByb3BWYWx1ZSAmJiB0eXBlb2YgcHJldmlvdXNWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVZhbHVlID0gZG9tTm9kZVtwcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKGRvbVZhbHVlICE9PSBwcm9wVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgKGRvbU5vZGVbJ29uaW5wdXQtdmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBkb21WYWx1ZSA9PT0gZG9tTm9kZVsnb25pbnB1dC12YWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbJ29uaW5wdXQtdmFsdWUnXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgIT09ICdrZXknICYmIHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb24nICYmIHByb3BOYW1lLmxhc3RJbmRleE9mKCdvbicsIDApID09PSAwICYmIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVFdmVudChkb21Ob2RlLCBwcm9wTmFtZS5zdWJzdHIoMiksIHByb3BWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMsIHByb3BlcnRpZXMuYmluZCwgcHJldmlvdXNWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHByb3BOYW1lICE9PSAnaW5uZXJIVE1MJyAmJiBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIHByb3BOYW1lLCBwcm9wVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgPT09ICdzY3JvbGxMZWZ0JyB8fCBwcm9wTmFtZSA9PT0gJ3Njcm9sbFRvcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbU5vZGVbcHJvcE5hbWVdICE9PSBwcm9wVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1VwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJ0aWVzVXBkYXRlZDtcbn1cbmZ1bmN0aW9uIGZpbmRJbmRleE9mQ2hpbGQoY2hpbGRyZW4sIHNhbWVBcywgc3RhcnQpIHtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc2FtZShjaGlsZHJlbltpXSwgc2FtZUFzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvUGFyZW50Vk5vZGUoZG9tTm9kZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogJycsXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICAgICAgICBkb21Ob2RlLFxuICAgICAgICB0eXBlOiBWTk9ERVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gdG9UZXh0Vk5vZGUoZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogJycsXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICAgICAgICB0ZXh0OiBgJHtkYXRhfWAsXG4gICAgICAgIGRvbU5vZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgdHlwZTogVk5PREVcbiAgICB9O1xufVxuZnVuY3Rpb24gdG9JbnRlcm5hbFdOb2RlKGluc3RhbmNlLCBpbnN0YW5jZURhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgcmVuZGVyZWQ6IFtdLFxuICAgICAgICBjb3JlUHJvcGVydGllczogaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLFxuICAgICAgICBjaGlsZHJlbjogaW5zdGFuY2UuY2hpbGRyZW4sXG4gICAgICAgIHdpZGdldENvbnN0cnVjdG9yOiBpbnN0YW5jZS5jb25zdHJ1Y3RvcixcbiAgICAgICAgcHJvcGVydGllczogaW5zdGFuY2VEYXRhLmlucHV0UHJvcGVydGllcyxcbiAgICAgICAgdHlwZTogV05PREVcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oY2hpbGRyZW4sIGluc3RhbmNlKSB7XG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5QXJyYXk7XG4gICAgfVxuICAgIGNoaWxkcmVuID0gQXJyYXkuaXNBcnJheShjaGlsZHJlbikgPyBjaGlsZHJlbiA6IFtjaGlsZHJlbl07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7KSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkIHx8IGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXSA9IHRvVGV4dFZOb2RlKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1ZOb2RlKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5wcm9wZXJ0aWVzLmJpbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm9wZXJ0aWVzLmJpbmQgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4sIGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghY2hpbGQuY29yZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuY29yZVByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kOiBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VSZWdpc3RyeTogaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJhc2VSZWdpc3RyeVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xufVxuZnVuY3Rpb24gbm9kZUFkZGVkKGRub2RlLCB0cmFuc2l0aW9ucykge1xuICAgIGlmIChpc1ZOb2RlKGRub2RlKSAmJiBkbm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvbnN0IGVudGVyQW5pbWF0aW9uID0gZG5vZGUucHJvcGVydGllcy5lbnRlckFuaW1hdGlvbjtcbiAgICAgICAgaWYgKGVudGVyQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudGVyQW5pbWF0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZW50ZXJBbmltYXRpb24oZG5vZGUuZG9tTm9kZSwgZG5vZGUucHJvcGVydGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5lbnRlcihkbm9kZS5kb21Ob2RlLCBkbm9kZS5wcm9wZXJ0aWVzLCBlbnRlckFuaW1hdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBub2RlVG9SZW1vdmUoZG5vZGUsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGlmIChpc1dOb2RlKGRub2RlKSkge1xuICAgICAgICBjb25zdCByZW5kZXJlZCA9IGRub2RlLnJlbmRlcmVkIHx8IGVtcHR5QXJyYXk7XG4gICAgICAgIGlmIChkbm9kZS5pbnN0YW5jZSkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGRub2RlLmluc3RhbmNlKTtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5vbkRldGFjaCgpO1xuICAgICAgICAgICAgaW5zdGFuY2VNYXAuZGVsZXRlKGRub2RlLmluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlcmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBub2RlVG9SZW1vdmUocmVuZGVyZWRbaV0sIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gZG5vZGUucHJvcGVydGllcztcbiAgICAgICAgaWYgKGRub2RlLmNoaWxkcmVuICYmIGRub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUoZG5vZGUuY2hpbGRyZW5baV0sIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhpdEFuaW1hdGlvbiA9IHByb3BlcnRpZXMuZXhpdEFuaW1hdGlvbjtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMgJiYgZXhpdEFuaW1hdGlvbikge1xuICAgICAgICAgICAgZG9tTm9kZS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlRG9tTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkb21Ob2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4aXRBbmltYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBleGl0QW5pbWF0aW9uKGRvbU5vZGUsIHJlbW92ZURvbU5vZGUsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmV4aXQoZG5vZGUuZG9tTm9kZSwgcHJvcGVydGllcywgZXhpdEFuaW1hdGlvbiwgcmVtb3ZlRG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRvbU5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlKTtcbiAgICAgICAgZG5vZGUuZG9tTm9kZSA9IHVuZGVmaW5lZDtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0Rpc3Rpbmd1aXNoYWJsZShjaGlsZE5vZGVzLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gY2hpbGROb2Rlc1tpbmRleFRvQ2hlY2tdO1xuICAgIGlmIChpc1ZOb2RlKGNoaWxkTm9kZSkgJiYgIWNoaWxkTm9kZS50YWcpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBUZXh0IG5vZGVzIG5lZWQgbm90IGJlIGRpc3Rpbmd1aXNoYWJsZVxuICAgIH1cbiAgICBjb25zdCB7IGtleSB9ID0gY2hpbGROb2RlLnByb3BlcnRpZXM7XG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpICE9PSBpbmRleFRvQ2hlY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gY2hpbGROb2Rlc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoc2FtZShub2RlLCBjaGlsZE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBub2RlSWRlbnRpZmllcjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TmFtZSA9IHBhcmVudEluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ3Vua25vd24nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNXTm9kZShjaGlsZE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlSWRlbnRpZmllciA9IGNoaWxkTm9kZS53aWRnZXRDb25zdHJ1Y3Rvci5uYW1lIHx8ICd1bmtub3duJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJZGVudGlmaWVyID0gY2hpbGROb2RlLnRhZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEEgd2lkZ2V0ICgke3BhcmVudE5hbWV9KSBoYXMgaGFkIGEgY2hpbGQgYWRkZGVkIG9yIHJlbW92ZWQsIGJ1dCB0aGV5IHdlcmUgbm90IGFibGUgdG8gdW5pcXVlbHkgaWRlbnRpZmllZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gcHJvdmlkZSBhIHVuaXF1ZSAna2V5JyBwcm9wZXJ0eSB3aGVuIHVzaW5nIHRoZSBzYW1lIHdpZGdldCBvciBlbGVtZW50ICgke25vZGVJZGVudGlmaWVyfSkgbXVsdGlwbGUgdGltZXMgYXMgc2libGluZ3NgKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIG9sZENoaWxkcmVuLCBuZXdDaGlsZHJlbiwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgb2xkQ2hpbGRyZW4gPSBvbGRDaGlsZHJlbiB8fCBlbXB0eUFycmF5O1xuICAgIG5ld0NoaWxkcmVuID0gbmV3Q2hpbGRyZW47XG4gICAgY29uc3Qgb2xkQ2hpbGRyZW5MZW5ndGggPSBvbGRDaGlsZHJlbi5sZW5ndGg7XG4gICAgY29uc3QgbmV3Q2hpbGRyZW5MZW5ndGggPSBuZXdDaGlsZHJlbi5sZW5ndGg7XG4gICAgY29uc3QgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucztcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBkZXB0aDogcHJvamVjdGlvbk9wdGlvbnMuZGVwdGggKyAxIH0pO1xuICAgIGxldCBvbGRJbmRleCA9IDA7XG4gICAgbGV0IG5ld0luZGV4ID0gMDtcbiAgICBsZXQgaTtcbiAgICBsZXQgdGV4dFVwZGF0ZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAobmV3SW5kZXggPCBuZXdDaGlsZHJlbkxlbmd0aCkge1xuICAgICAgICBsZXQgb2xkQ2hpbGQgPSBvbGRJbmRleCA8IG9sZENoaWxkcmVuTGVuZ3RoID8gb2xkQ2hpbGRyZW5bb2xkSW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBuZXdDaGlsZCA9IG5ld0NoaWxkcmVuW25ld0luZGV4XTtcbiAgICAgICAgaWYgKGlzVk5vZGUobmV3Q2hpbGQpICYmIHR5cGVvZiBuZXdDaGlsZC5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmV3Q2hpbGQuaW5zZXJ0ZWQgPSBpc1ZOb2RlKG9sZENoaWxkKSAmJiBvbGRDaGlsZC5pbnNlcnRlZDtcbiAgICAgICAgICAgIGFkZERlZmVycmVkUHJvcGVydGllcyhuZXdDaGlsZCwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbGRDaGlsZCAhPT0gdW5kZWZpbmVkICYmIHNhbWUob2xkQ2hpbGQsIG5ld0NoaWxkKSkge1xuICAgICAgICAgICAgdGV4dFVwZGF0ZWQgPSB1cGRhdGVEb20ob2xkQ2hpbGQsIG5ld0NoaWxkLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50Vk5vZGUsIHBhcmVudEluc3RhbmNlKSB8fCB0ZXh0VXBkYXRlZDtcbiAgICAgICAgICAgIG9sZEluZGV4Kys7XG4gICAgICAgICAgICBuZXdJbmRleCsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmluZE9sZEluZGV4ID0gZmluZEluZGV4T2ZDaGlsZChvbGRDaGlsZHJlbiwgbmV3Q2hpbGQsIG9sZEluZGV4ICsgMSk7XG4gICAgICAgIGNvbnN0IGFkZENoaWxkID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGluc2VydEJlZm9yZURvbU5vZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgY2hpbGQgPSBvbGRDaGlsZHJlbltvbGRJbmRleF07XG4gICAgICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dEluZGV4ID0gb2xkSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIGxldCBpbnNlcnRCZWZvcmVDaGlsZHJlbiA9IFtjaGlsZF07XG4gICAgICAgICAgICAgICAgd2hpbGUgKGluc2VydEJlZm9yZUNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRCZWZvcmUgPSBpbnNlcnRCZWZvcmVDaGlsZHJlbi5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNXTm9kZShpbnNlcnRCZWZvcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlLnJlbmRlcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ucHVzaCguLi5pbnNlcnRCZWZvcmUucmVuZGVyZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZS5kb21Ob2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlRG9tTm9kZSA9IGluc2VydEJlZm9yZS5kb21Ob2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmVDaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgb2xkQ2hpbGRyZW5bbmV4dEluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ucHVzaChvbGRDaGlsZHJlbltuZXh0SW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3JlYXRlRG9tKG5ld0NoaWxkLCBwYXJlbnRWTm9kZSwgaW5zZXJ0QmVmb3JlRG9tTm9kZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIG5vZGVBZGRlZChuZXdDaGlsZCwgdHJhbnNpdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhUb0NoZWNrID0gbmV3SW5kZXg7XG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjaGVja0Rpc3Rpbmd1aXNoYWJsZShuZXdDaGlsZHJlbiwgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFvbGRDaGlsZCB8fCBmaW5kT2xkSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBhZGRDaGlsZCgpO1xuICAgICAgICAgICAgbmV3SW5kZXgrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbW92ZUNoaWxkID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhUb0NoZWNrID0gb2xkSW5kZXg7XG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjaGVja0Rpc3Rpbmd1aXNoYWJsZShvbGRDaGlsZHJlbiwgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpc1dOb2RlKG9sZENoaWxkKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpbnN0YW5jZU1hcC5nZXQob2xkQ2hpbGQuaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZENoaWxkID0gaXRlbS5kbm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlVG9SZW1vdmUob2xkQ2hpbGQsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbmROZXdJbmRleCA9IGZpbmRJbmRleE9mQ2hpbGQobmV3Q2hpbGRyZW4sIG9sZENoaWxkLCBuZXdJbmRleCArIDEpO1xuICAgICAgICBpZiAoZmluZE5ld0luZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmVtb3ZlQ2hpbGQoKTtcbiAgICAgICAgICAgIG9sZEluZGV4Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhZGRDaGlsZCgpO1xuICAgICAgICByZW1vdmVDaGlsZCgpO1xuICAgICAgICBvbGRJbmRleCsrO1xuICAgICAgICBuZXdJbmRleCsrO1xuICAgIH1cbiAgICBpZiAob2xkQ2hpbGRyZW5MZW5ndGggPiBvbGRJbmRleCkge1xuICAgICAgICAvLyBSZW1vdmUgY2hpbGQgZnJhZ21lbnRzXG4gICAgICAgIGZvciAoaSA9IG9sZEluZGV4OyBpIDwgb2xkQ2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhUb0NoZWNrID0gaTtcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGNoaWxkVG9SZW1vdmUgPSBvbGRDaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGlmIChpc1dOb2RlKGNoaWxkVG9SZW1vdmUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGluc3RhbmNlTWFwLmdldChjaGlsZFRvUmVtb3ZlLmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZFRvUmVtb3ZlID0gaXRlbS5kbm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlVG9SZW1vdmUoY2hpbGRUb1JlbW92ZSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGV4dFVwZGF0ZWQ7XG59XG5mdW5jdGlvbiBhZGRDaGlsZHJlbihwYXJlbnRWTm9kZSwgY2hpbGRyZW4sIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgaW5zZXJ0QmVmb3JlID0gdW5kZWZpbmVkLCBjaGlsZE5vZGVzKSB7XG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgaWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjaGlsZE5vZGVzID0gYXJyYXlGcm9tKHBhcmVudFZOb2RlLmRvbU5vZGUuY2hpbGROb2Rlcyk7XG4gICAgfVxuICAgIGNvbnN0IHRyYW5zaXRpb25zID0gcHJvamVjdGlvbk9wdGlvbnMudHJhbnNpdGlvbnM7XG4gICAgcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBkZXB0aDogcHJvamVjdGlvbk9wdGlvbnMuZGVwdGggKyAxIH0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgaWYgKGlzVk5vZGUoY2hpbGQpKSB7XG4gICAgICAgICAgICBpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgY2hpbGROb2Rlcykge1xuICAgICAgICAgICAgICAgIGxldCBkb21FbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZC5kb21Ob2RlID09PSB1bmRlZmluZWQgJiYgY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQgPSBjaGlsZE5vZGVzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb21FbGVtZW50ICYmIGRvbUVsZW1lbnQudGFnTmFtZSA9PT0gKGNoaWxkLnRhZy50b1VwcGVyQ2FzZSgpIHx8IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmRvbU5vZGUgPSBkb21FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3JlYXRlRG9tKGNoaWxkLCBwYXJlbnRWTm9kZSwgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3JlYXRlRG9tKGNoaWxkLCBwYXJlbnRWTm9kZSwgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGNoaWxkTm9kZXMpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVBZGRlZChjaGlsZCwgdHJhbnNpdGlvbnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGFkZENoaWxkcmVuKGRub2RlLCBkbm9kZS5jaGlsZHJlbiwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlLCB1bmRlZmluZWQpO1xuICAgIGlmICh0eXBlb2YgZG5vZGUuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgJiYgZG5vZGUuaW5zZXJ0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhZGREZWZlcnJlZFByb3BlcnRpZXMoZG5vZGUsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGRub2RlLmF0dHJpYnV0ZXMgJiYgZG5vZGUuZXZlbnRzKSB7XG4gICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZSwge30sIGRub2RlLmF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCB7fSwgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIGZhbHNlKTtcbiAgICAgICAgcmVtb3ZlT3JwaGFuZWRFdmVudHMoZG9tTm9kZSwge30sIGRub2RlLmV2ZW50cywgcHJvamVjdGlvbk9wdGlvbnMsIHRydWUpO1xuICAgICAgICBjb25zdCBldmVudHMgPSBkbm9kZS5ldmVudHM7XG4gICAgICAgIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50LCBldmVudHNbZXZlbnRdLCBwcm9qZWN0aW9uT3B0aW9ucywgZG5vZGUucHJvcGVydGllcy5iaW5kKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gbnVsbCAmJiBkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChwYXJlbnRJbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGQoZG9tTm9kZSwgYCR7ZG5vZGUucHJvcGVydGllcy5rZXl9YCk7XG4gICAgfVxuICAgIGRub2RlLmluc2VydGVkID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURvbShkbm9kZSwgcGFyZW50Vk5vZGUsIGluc2VydEJlZm9yZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlLCBjaGlsZE5vZGVzKSB7XG4gICAgbGV0IGRvbU5vZGU7XG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xuICAgIGlmIChpc1dOb2RlKGRub2RlKSkge1xuICAgICAgICBsZXQgeyB3aWRnZXRDb25zdHJ1Y3RvciB9ID0gZG5vZGU7XG4gICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChwYXJlbnRJbnN0YW5jZSk7XG4gICAgICAgIGlmICghaXNXaWRnZXRCYXNlQ29uc3RydWN0b3Iod2lkZ2V0Q29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcGFyZW50SW5zdGFuY2VEYXRhLnJlZ2lzdHJ5KCkuZ2V0KHdpZGdldENvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgIGlmIChpdGVtID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkZ2V0Q29uc3RydWN0b3IgPSBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IHdpZGdldENvbnN0cnVjdG9yKCk7XG4gICAgICAgIGRub2RlLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlID0gKCkgPT4ge1xuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZURhdGEucmVuZGVyaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlLnB1c2goeyBpbnN0YW5jZSwgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoIH0pO1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlUmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IHRydWU7XG4gICAgICAgIGluc3RhbmNlLl9fc2V0Q29yZVByb3BlcnRpZXNfXyhkbm9kZS5jb3JlUHJvcGVydGllcyk7XG4gICAgICAgIGluc3RhbmNlLl9fc2V0Q2hpbGRyZW5fXyhkbm9kZS5jaGlsZHJlbik7XG4gICAgICAgIGluc3RhbmNlLl9fc2V0UHJvcGVydGllc19fKGRub2RlLnByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCByZW5kZXJlZCA9IGluc3RhbmNlLl9fcmVuZGVyX18oKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xuICAgICAgICBpZiAocmVuZGVyZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUmVuZGVyZWQgPSBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKHJlbmRlcmVkLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IGZpbHRlcmVkUmVuZGVyZWQ7XG4gICAgICAgICAgICBhZGRDaGlsZHJlbihwYXJlbnRWTm9kZSwgZmlsdGVyZWRSZW5kZXJlZCwgcHJvamVjdGlvbk9wdGlvbnMsIGluc3RhbmNlLCBpbnNlcnRCZWZvcmUsIGNoaWxkTm9kZXMpO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZSwgcGFyZW50Vk5vZGUgfSk7XG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGRSb290KCk7XG4gICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm9uQXR0YWNoKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IHByb2plY3Rpb25PcHRpb25zLm1lcmdlRWxlbWVudDtcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jID0gcGFyZW50Vk5vZGUuZG9tTm9kZS5vd25lckRvY3VtZW50O1xuICAgICAgICBpZiAoIWRub2RlLnRhZyAmJiB0eXBlb2YgZG5vZGUudGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChkbm9kZS5kb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgcGFyZW50Vk5vZGUuZG9tTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RvbU5vZGUgPSBkbm9kZS5kb21Ob2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFZOb2RlLmRvbU5vZGUgPT09IGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLnJlcGxhY2VDaGlsZChuZXdEb21Ob2RlLCBkbm9kZS5kb21Ob2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQobmV3RG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZSAmJiBkbm9kZS5kb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG5vZGUuZG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSBuZXdEb21Ob2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuaW5zZXJ0QmVmb3JlKGRvbU5vZGUsIGluc2VydEJlZm9yZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmFwcGVuZENoaWxkKGRvbU5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkbm9kZS5kb21Ob2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZG5vZGUudGFnID09PSAnc3ZnJykge1xuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UsIGRub2RlLnRhZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgfHwgZG9jLmNyZWF0ZUVsZW1lbnQoZG5vZGUudGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmluc2VydEJlZm9yZShkb21Ob2RlLCBpbnNlcnRCZWZvcmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZG9tTm9kZS5wYXJlbnROb2RlICE9PSBwYXJlbnRWTm9kZS5kb21Ob2RlKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5hcHBlbmRDaGlsZChkb21Ob2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZURvbShwcmV2aW91cywgZG5vZGUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgcGFyZW50SW5zdGFuY2UpIHtcbiAgICBpZiAoaXNXTm9kZShkbm9kZSkpIHtcbiAgICAgICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gcHJldmlvdXM7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50Vk5vZGUsIGRub2RlOiBub2RlIH0gPSBpbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zdCBwcmV2aW91c1JlbmRlcmVkID0gbm9kZSA/IG5vZGUucmVuZGVyZWQgOiBwcmV2aW91cy5yZW5kZXJlZDtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IHRydWU7XG4gICAgICAgIGluc3RhbmNlLl9fc2V0Q29yZVByb3BlcnRpZXNfXyhkbm9kZS5jb3JlUHJvcGVydGllcyk7XG4gICAgICAgIGluc3RhbmNlLl9fc2V0Q2hpbGRyZW5fXyhkbm9kZS5jaGlsZHJlbik7XG4gICAgICAgIGluc3RhbmNlLl9fc2V0UHJvcGVydGllc19fKGRub2RlLnByb3BlcnRpZXMpO1xuICAgICAgICBkbm9kZS5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmRpcnR5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJlZCA9IGluc3RhbmNlLl9fcmVuZGVyX18oKTtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGRub2RlLnJlbmRlcmVkID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihyZW5kZXJlZCwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgdXBkYXRlQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIHByZXZpb3VzUmVuZGVyZWQsIGRub2RlLnJlbmRlcmVkLCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgZG5vZGUucmVuZGVyZWQgPSBwcmV2aW91c1JlbmRlcmVkO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZSwgcGFyZW50Vk5vZGUgfSk7XG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGRSb290KCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAocHJldmlvdXMgPT09IGRub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9tTm9kZSA9IChkbm9kZS5kb21Ob2RlID0gcHJldmlvdXMuZG9tTm9kZSk7XG4gICAgICAgIGxldCB0ZXh0VXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgdXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoIWRub2RlLnRhZyAmJiB0eXBlb2YgZG5vZGUudGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChkbm9kZS50ZXh0ICE9PSBwcmV2aW91cy50ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RG9tTm9kZSA9IGRvbU5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkbm9kZS50ZXh0KTtcbiAgICAgICAgICAgICAgICBkb21Ob2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld0RvbU5vZGUsIGRvbU5vZGUpO1xuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSBuZXdEb21Ob2RlO1xuICAgICAgICAgICAgICAgIHRleHRVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFVwZGF0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG5vZGUudGFnICYmIGRub2RlLnRhZy5sYXN0SW5kZXhPZignc3ZnJywgMCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmV2aW91cy5jaGlsZHJlbiAhPT0gZG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oZG5vZGUuY2hpbGRyZW4sIHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICBkbm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIHVwZGF0ZWQgPVxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVDaGlsZHJlbihkbm9kZSwgcHJldmlvdXMuY2hpbGRyZW4sIGNoaWxkcmVuLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHx8IHVwZGF0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c1Byb3BlcnRpZXMgPSBidWlsZFByZXZpb3VzUHJvcGVydGllcyhkb21Ob2RlLCBwcmV2aW91cywgZG5vZGUpO1xuICAgICAgICAgICAgaWYgKGRub2RlLmF0dHJpYnV0ZXMgJiYgZG5vZGUuZXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlQXR0cmlidXRlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuYXR0cmlidXRlcywgZG5vZGUuYXR0cmlidXRlcywgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZWQgPVxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5wcm9wZXJ0aWVzLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgZmFsc2UpIHx8IHVwZGF0ZWQ7XG4gICAgICAgICAgICAgICAgcmVtb3ZlT3JwaGFuZWRFdmVudHMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmV2ZW50cywgZG5vZGUuZXZlbnRzLCBwcm9qZWN0aW9uT3B0aW9ucywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gZG5vZGUuZXZlbnRzO1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlRXZlbnQoZG9tTm9kZSwgZXZlbnQsIGV2ZW50c1tldmVudF0sIHByb2plY3Rpb25PcHRpb25zLCBkbm9kZS5wcm9wZXJ0aWVzLmJpbmQsIHByZXZpb3VzUHJvcGVydGllcy5ldmVudHNbZXZlbnRdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVwZGF0ZWQgPVxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5wcm9wZXJ0aWVzLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZG5vZGUucHJvcGVydGllcy5rZXkgIT09IG51bGwgJiYgZG5vZGUucHJvcGVydGllcy5rZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChwYXJlbnRJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZChkb21Ob2RlLCBgJHtkbm9kZS5wcm9wZXJ0aWVzLmtleX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlZCAmJiBkbm9kZS5wcm9wZXJ0aWVzICYmIGRub2RlLnByb3BlcnRpZXMudXBkYXRlQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICBkbm9kZS5wcm9wZXJ0aWVzLnVwZGF0ZUFuaW1hdGlvbihkb21Ob2RlLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcmV2aW91cy5wcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZERlZmVycmVkUHJvcGVydGllcyh2bm9kZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICAvLyB0cmFuc2ZlciBhbnkgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgLSBhcyB0aGVzZSBtdXN0IGJlIGRlY29yYXRlZCBwcm9wZXJ0aWVzXG4gICAgdm5vZGUuZGVjb3JhdGVkRGVmZXJyZWRQcm9wZXJ0aWVzID0gdm5vZGUucHJvcGVydGllcztcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdm5vZGUuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2soISF2bm9kZS5pbnNlcnRlZCk7XG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xuICAgIHZub2RlLnByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0aWVzLCB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMpO1xuICAgIHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdm5vZGUuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2soISF2bm9kZS5pbnNlcnRlZCksIHZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllcyk7XG4gICAgICAgIHVwZGF0ZVByb3BlcnRpZXModm5vZGUuZG9tTm9kZSwgdm5vZGUucHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB2bm9kZS5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHJ1bkRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xuICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHByb2plY3Rpb25PcHRpb25zLnN5bmMpIHtcbiAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gcnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgaWYgKHByb2plY3Rpb25PcHRpb25zLnN5bmMpIHtcbiAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGdsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrKSB7XG4gICAgICAgICAgICBnbG9iYWwucmVxdWVzdElkbGVDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNjaGVkdWxlUmVuZGVyKHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xuICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XG4gICAgICAgIHJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgcmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVuZGVyKHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xuICAgIHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZW5kZXJRdWV1ZSA9IHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlO1xuICAgIGNvbnN0IHJlbmRlcnMgPSBbLi4ucmVuZGVyUXVldWVdO1xuICAgIHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlID0gW107XG4gICAgcmVuZGVycy5zb3J0KChhLCBiKSA9PiBhLmRlcHRoIC0gYi5kZXB0aCk7XG4gICAgY29uc3QgcHJldmlvdXNseVJlbmRlcmVkID0gW107XG4gICAgd2hpbGUgKHJlbmRlcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgaW5zdGFuY2UgfSA9IHJlbmRlcnMuc2hpZnQoKTtcbiAgICAgICAgaWYgKGluc3RhbmNlTWFwLmhhcyhpbnN0YW5jZSkgJiYgcHJldmlvdXNseVJlbmRlcmVkLmluZGV4T2YoaW5zdGFuY2UpID09PSAtMSkge1xuICAgICAgICAgICAgcHJldmlvdXNseVJlbmRlcmVkLnB1c2goaW5zdGFuY2UpO1xuICAgICAgICAgICAgY29uc3QgeyBwYXJlbnRWTm9kZSwgZG5vZGUgfSA9IGluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgdXBkYXRlRG9tKGRub2RlLCB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSksIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKTtcbiAgICBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucyk7XG59XG5leHBvcnQgY29uc3QgZG9tID0ge1xuICAgIGFwcGVuZDogZnVuY3Rpb24gKHBhcmVudE5vZGUsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IGZpbmFsUHJvamVjdG9yT3B0aW9ucyA9IGdldFByb2plY3Rpb25PcHRpb25zKHByb2plY3Rpb25PcHRpb25zLCBpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0ge1xuICAgICAgICAgICAgYWZ0ZXJSZW5kZXJDYWxsYmFja3M6IFtdLFxuICAgICAgICAgICAgZGVmZXJyZWRSZW5kZXJDYWxsYmFja3M6IFtdLFxuICAgICAgICAgICAgbm9kZU1hcDogbmV3IFdlYWtNYXAoKSxcbiAgICAgICAgICAgIHJlbmRlclNjaGVkdWxlZDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmVuZGVyUXVldWU6IFtdLFxuICAgICAgICAgICAgbWVyZ2U6IHByb2plY3Rpb25PcHRpb25zLm1lcmdlIHx8IGZhbHNlLFxuICAgICAgICAgICAgbWVyZ2VFbGVtZW50OiBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnRcbiAgICAgICAgfTtcbiAgICAgICAgcHJvamVjdG9yU3RhdGVNYXAuc2V0KGluc3RhbmNlLCBwcm9qZWN0b3JTdGF0ZSk7XG4gICAgICAgIGZpbmFsUHJvamVjdG9yT3B0aW9ucy5yb290Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICAgIGNvbnN0IHBhcmVudFZOb2RlID0gdG9QYXJlbnRWTm9kZShmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUpO1xuICAgICAgICBjb25zdCBub2RlID0gdG9JbnRlcm5hbFdOb2RlKGluc3RhbmNlLCBpbnN0YW5jZURhdGEpO1xuICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2UsIHsgZG5vZGU6IG5vZGUsIHBhcmVudFZOb2RlIH0pO1xuICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZS5wdXNoKHsgaW5zdGFuY2UsIGRlcHRoOiBmaW5hbFByb2plY3Rvck9wdGlvbnMuZGVwdGggfSk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVSZW5kZXIoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlRG9tKG5vZGUsIG5vZGUsIGZpbmFsUHJvamVjdG9yT3B0aW9ucywgcGFyZW50Vk5vZGUsIGluc3RhbmNlKTtcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEub25BdHRhY2goKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1bkRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XG4gICAgICAgIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb21Ob2RlOiBmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGVcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgfSxcbiAgICBtZXJnZTogZnVuY3Rpb24gKGVsZW1lbnQsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHByb2plY3Rpb25PcHRpb25zLm1lcmdlID0gdHJ1ZTtcbiAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHRoaXMuYXBwZW5kKGVsZW1lbnQucGFyZW50Tm9kZSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQoaW5zdGFuY2UpO1xuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5tZXJnZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcHJvamVjdGlvbjtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmRvbS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvdmRvbS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL3Zkb20ubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIHdpZGdldEZhY3RvcnkgPSByZXF1aXJlKFwic3JjL21lbnUtaXRlbS9NZW51SXRlbVwiKTtcblxudmFyIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IHJlcXVpcmUoJ0Bkb2pvL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCcpLmRlZmF1bHQ7XG5cbnZhciBkZWZhdWx0RXhwb3J0ID0gd2lkZ2V0RmFjdG9yeS5kZWZhdWx0O1xuZGVmYXVsdEV4cG9ydCAmJiByZWdpc3RlckN1c3RvbUVsZW1lbnQoZGVmYXVsdEV4cG9ydCk7XG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ltcG9ydHMtbG9hZGVyP3dpZGdldEZhY3Rvcnk9c3JjL21lbnUtaXRlbS9NZW51SXRlbSEuL25vZGVfbW9kdWxlcy9AZG9qby9jbGktYnVpbGQtd2lkZ2V0L3RlbXBsYXRlL2N1c3RvbS1lbGVtZW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9pbXBvcnRzLWxvYWRlci9pbmRleC5qcz93aWRnZXRGYWN0b3J5PXNyYy9tZW51LWl0ZW0vTWVudUl0ZW0hLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0geVtvcFswXSAmIDIgPyBcInJldHVyblwiIDogb3BbMF0gPyBcInRocm93XCIgOiBcIm5leHRcIl0pICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gWzAsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7ICB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAob1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2goZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxuXHRcdGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IHYgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9kJztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQnO1xuaW1wb3J0IHsgV2lkZ2V0UHJvcGVydGllcyB9IGZyb20gJ0Bkb2pvL3dpZGdldC1jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdGhlbWUsIFRoZW1lZE1peGluIH0gZnJvbSAnQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1RoZW1lZCc7XG5pbXBvcnQgeyBXaWRnZXRCYXNlIH0gZnJvbSAnQGRvam8vd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZSc7XG5cbmltcG9ydCAqIGFzIGNzcyBmcm9tICcuL21lbnVJdGVtLm0uY3NzJztcblxuZXhwb3J0IGludGVyZmFjZSBNZW51SXRlbVByb3BlcnRpZXMgZXh0ZW5kcyBXaWRnZXRQcm9wZXJ0aWVzIHtcblx0dGl0bGU6IHN0cmluZztcblx0c2VsZWN0ZWQ/OiBib29sZWFuO1xuXHRkYXRhPzogYW55O1xuXHRvblNlbGVjdGVkPzogKGRhdGE6IGFueSkgPT4gdm9pZDtcbn1cblxuQGN1c3RvbUVsZW1lbnQ8TWVudUl0ZW1Qcm9wZXJ0aWVzPih7XG5cdHRhZzogJ2RlbW8tbWVudS1pdGVtJyxcblx0YXR0cmlidXRlczogWyd0aXRsZScsICdzZWxlY3RlZCddLFxuXHRldmVudHM6IFsnb25TZWxlY3RlZCddLFxuXHRwcm9wZXJ0aWVzOiBbJ2RhdGEnLCAnc2VsZWN0ZWQnXVxufSlcbkB0aGVtZShjc3MpXG5leHBvcnQgY2xhc3MgTWVudUl0ZW0gZXh0ZW5kcyBUaGVtZWRNaXhpbihXaWRnZXRCYXNlKTxNZW51SXRlbVByb3BlcnRpZXM+IHtcblx0cHJpdmF0ZSBfb25DbGljaygpIHtcblx0XHR0aGlzLnByb3BlcnRpZXMub25TZWxlY3RlZCAmJiB0aGlzLnByb3BlcnRpZXMub25TZWxlY3RlZCh0aGlzLnByb3BlcnRpZXMuZGF0YSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgcmVuZGVyKCkge1xuXHRcdGNvbnN0IHsgdGl0bGUsIHNlbGVjdGVkIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cblx0XHRyZXR1cm4gdignbGknLCB7IGNsYXNzZXM6IHRoaXMudGhlbWUoY3NzLnJvb3QpIH0sIFtcblx0XHRcdHYoXG5cdFx0XHRcdCdzcGFuJyxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNsYXNzZXM6IHRoaXMudGhlbWUoW2Nzcy5pdGVtLCBzZWxlY3RlZCA/IGNzcy5zZWxlY3RlZCA6IG51bGxdKSxcblx0XHRcdFx0XHRvbmNsaWNrOiB0aGlzLl9vbkNsaWNrXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFt0aXRsZV1cblx0XHRcdClcblx0XHRdKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9dHMmaW5zdGFuY2VOYW1lPTBfbWVudS1pdGVtIS4vc3JjL21lbnUtaXRlbS9NZW51SXRlbS50cyIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcIiBfa2V5XCI6XCJ0ZXN0LWFwcC9tZW51SXRlbVwiLFwicm9vdFwiOlwibWVudUl0ZW0tbV9fcm9vdF9fc1VtVWlcIixcIml0ZW1cIjpcIm1lbnVJdGVtLW1fX2l0ZW1fXzJNazZSXCIsXCJzZWxlY3RlZFwiOlwibWVudUl0ZW0tbV9fc2VsZWN0ZWRfXzEtZjNJXCJ9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL21lbnUtaXRlbS9tZW51SXRlbS5tLmNzc1xuLy8gbW9kdWxlIGlkID0gLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZDg5ODVjNzU5MDg5ZmE1MDE3ZjIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL0Rlc3Ryb3lhYmxlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRXZlbnRlZC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL2xhbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvaGFzL2hhcy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL01hcC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL1Byb21pc2UubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9TeW1ib2wubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9XZWFrTWFwLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vYXJyYXkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9nbG9iYWwubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9pdGVyYXRvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL251bWJlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL29iamVjdC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N0cmluZy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC9xdWV1ZS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvdXRpbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9JbmplY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9Ob2RlSGFuZGxlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hZnRlclJlbmRlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2JlZm9yZVByb3BlcnRpZXMubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9jdXN0b21FbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RpZmYubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS92ZG9tLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS1pdGVtL01lbnVJdGVtLnRzIiwid2VicGFjazovLy8uL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3M/NmE5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7QUM3RGdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSx3Qzs7Ozs7Ozs7Ozs7QUN2REE7QUFDc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0NBQWdDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2RWlCO0FBQ0E7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsaUM7Ozs7Ozs7Ozs7OztBQ25NQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8saUJBQWlCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7O0FDdE1BO0FBQ0E7QUFDNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxtQzs7Ozs7Ozs7Ozs7OztBQ2hKQTtBQUNzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxxQkFBcUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGdDQUFnQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNrQztBQUNQO0FBQzNCO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3RELG9EQUFvRDtBQUNwRCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFlBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVM7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0M7Ozs7Ozs7O0FDdlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLG1DOzs7Ozs7Ozs7Ozs7Ozs7QUNqQkE7QUFDaUQ7QUFDakQsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDOzs7Ozs7Ozs7Ozs7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREE7QUFDQTtBQUNtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNBO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFlBQVk7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0Y7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DOzs7Ozs7Ozs7OztBQ3hTbUI7QUFDbkI7MEVBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsRUFBRTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxFQUFFO0FBQ2pFLG1DQUFtQyxtQkFBbUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxnQzs7Ozs7Ozs7Ozs7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsZ0NBQWdDLG1CQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxrQzs7Ozs7Ozs7O0FDekxBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQzs7Ozs7Ozs7O0FDdEJrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxxQzs7Ozs7Ozs7Ozs7QUNwQmtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNB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QUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2THRDO0FBQUE7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFB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LENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVTLE1BQU07UUFDZixNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFNUMsTUFBTSxDQUFDLGdGQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMscURBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDakQsZ0ZBQUMsQ0FDQSxNQUFNLEVBQ047Z0JBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxxREFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMseURBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTthQUN0QixFQUNELENBQUMsS0FBSyxDQUFDLENBQ1A7U0FDRCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Q7QUFuQlksUUFBUTtJQVBwQixtSEFBYSxDQUFxQjtRQUNsQyxHQUFHLEVBQUUsZ0JBQWdCO1FBQ3JCLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7UUFDakMsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDO1FBQ3RCLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUM7S0FDaEMsQ0FBQztJQUNELGdHQUFLLENBQUMsNkNBQUcsQ0FBQztHQUNFLFFBQVEsQ0FtQnBCO0FBbkJvQjtBQXFCckIsK0RBQWUsUUFBUSxFQUFDOzs7Ozs7OztBQzNDeEI7QUFDQSxrQkFBa0Isd0kiLCJmaWxlIjoibWVudS1pdGVtLTEuMC4wLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZDg5ODVjNzU5MDg5ZmE1MDE3ZjIiLCJpbXBvcnQgeyBjcmVhdGVDb21wb3NpdGVIYW5kbGUgfSBmcm9tICcuL2xhbmcnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi4vc2hpbS9Qcm9taXNlJztcbi8qKlxuICogTm8gb3BlcmF0aW9uIGZ1bmN0aW9uIHRvIHJlcGxhY2Ugb3duIG9uY2UgaW5zdGFuY2UgaXMgZGVzdG9yeWVkXG4gKi9cbmZ1bmN0aW9uIG5vb3AoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG59XG4vKipcbiAqIE5vIG9wIGZ1bmN0aW9uIHVzZWQgdG8gcmVwbGFjZSBvd24sIG9uY2UgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdG9yeWVkXG4gKi9cbmZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgbWFkZSB0byBkZXN0cm95ZWQgbWV0aG9kJyk7XG59XG5leHBvcnQgY2xhc3MgRGVzdHJveWFibGUge1xuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmhhbmRsZXMgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgaGFuZGxlcyBmb3IgdGhlIGluc3RhbmNlIHRoYXQgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiBgdGhpcy5kZXN0cm95YCBpcyBjYWxsZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SGFuZGxlfSBoYW5kbGUgVGhlIGhhbmRsZSB0byBhZGQgZm9yIHRoZSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtIYW5kbGV9IGEgaGFuZGxlIGZvciB0aGUgaGFuZGxlLCByZW1vdmVzIHRoZSBoYW5kbGUgZm9yIHRoZSBpbnN0YW5jZSBhbmQgY2FsbHMgZGVzdHJveVxuICAgICAqL1xuICAgIG93bihoYW5kbGVzKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZSA9IEFycmF5LmlzQXJyYXkoaGFuZGxlcykgPyBjcmVhdGVDb21wb3NpdGVIYW5kbGUoLi4uaGFuZGxlcykgOiBoYW5kbGVzO1xuICAgICAgICBjb25zdCB7IGhhbmRsZXM6IF9oYW5kbGVzIH0gPSB0aGlzO1xuICAgICAgICBfaGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgIF9oYW5kbGVzLnNwbGljZShfaGFuZGxlcy5pbmRleE9mKGhhbmRsZSkpO1xuICAgICAgICAgICAgICAgIGhhbmRsZS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlc3RycHlzIGFsbCBoYW5kZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8YW55fSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIGFsbCBoYW5kbGVzIGhhdmUgYmVlbiBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcy5mb3JFYWNoKChoYW5kbGUpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGUgJiYgaGFuZGxlLmRlc3Ryb3kgJiYgaGFuZGxlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gbm9vcDtcbiAgICAgICAgICAgIHRoaXMub3duID0gZGVzdHJveWVkO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgRGVzdHJveWFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1EZXN0cm95YWJsZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRGVzdHJveWFibGUubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9EZXN0cm95YWJsZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgTWFwIGZyb20gJy4uL3NoaW0vTWFwJztcbmltcG9ydCB7IERlc3Ryb3lhYmxlIH0gZnJvbSAnLi9EZXN0cm95YWJsZSc7XG4vKipcbiAqIE1hcCBvZiBjb21wdXRlZCByZWd1bGFyIGV4cHJlc3Npb25zLCBrZXllZCBieSBzdHJpbmdcbiAqL1xuY29uc3QgcmVnZXhNYXAgPSBuZXcgTWFwKCk7XG4vKipcbiAqIERldGVybWluZXMgaXMgdGhlIGV2ZW50IHR5cGUgZ2xvYiBoYXMgYmVlbiBtYXRjaGVkXG4gKlxuICogQHJldHVybnMgYm9vbGVhbiB0aGF0IGluZGljYXRlcyBpZiB0aGUgZ2xvYiBpcyBtYXRjaGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dsb2JNYXRjaChnbG9iU3RyaW5nLCB0YXJnZXRTdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldFN0cmluZyA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGdsb2JTdHJpbmcgPT09ICdzdHJpbmcnICYmIGdsb2JTdHJpbmcuaW5kZXhPZignKicpICE9PSAtMSkge1xuICAgICAgICBsZXQgcmVnZXg7XG4gICAgICAgIGlmIChyZWdleE1hcC5oYXMoZ2xvYlN0cmluZykpIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gcmVnZXhNYXAuZ2V0KGdsb2JTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtnbG9iU3RyaW5nLnJlcGxhY2UoL1xcKi9nLCAnLionKX0kYCk7XG4gICAgICAgICAgICByZWdleE1hcC5zZXQoZ2xvYlN0cmluZywgcmVnZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KHRhcmdldFN0cmluZyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2xvYlN0cmluZyA9PT0gdGFyZ2V0U3RyaW5nO1xuICAgIH1cbn1cbi8qKlxuICogRXZlbnQgQ2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIEV2ZW50ZWQgZXh0ZW5kcyBEZXN0cm95YWJsZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBtYXAgb2YgbGlzdGVuZXJzIGtleWVkIGJ5IGV2ZW50IHR5cGVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBlbWl0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwLmZvckVhY2goKG1ldGhvZHMsIHR5cGUpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0dsb2JNYXRjaCh0eXBlLCBldmVudC50eXBlKSkge1xuICAgICAgICAgICAgICAgIFsuLi5tZXRob2RzXS5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdGVuZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gbGlzdGVuZXIubWFwKChsaXN0ZW5lcikgPT4gdGhpcy5fYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcy5mb3JFYWNoKChoYW5kbGUpID0+IGhhbmRsZS5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcbiAgICB9XG4gICAgX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzTWFwLmdldCh0eXBlKSB8fCBbXTtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICB0aGlzLmxpc3RlbmVyc01hcC5zZXQodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEV2ZW50ZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FdmVudGVkLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9FdmVudGVkLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRXZlbnRlZC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICcuLi9zaGltL29iamVjdCc7XG5leHBvcnQgeyBhc3NpZ24gfSBmcm9tICcuLi9zaGltL29iamVjdCc7XG5jb25zdCBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbmNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbi8qKlxuICogVHlwZSBndWFyZCB0aGF0IGVuc3VyZXMgdGhhdCB0aGUgdmFsdWUgY2FuIGJlIGNvZXJjZWQgdG8gT2JqZWN0XG4gKiB0byB3ZWVkIG91dCBob3N0IG9iamVjdHMgdGhhdCBkbyBub3QgZGVyaXZlIGZyb20gT2JqZWN0LlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGlmIHdlIHdhbnQgdG8gZGVlcCBjb3B5IGFuIG9iamVjdCBvciBub3QuXG4gKiBOb3RlOiBJbiBFUzYgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IGFuIG9iamVjdCdzIFN5bWJvbC50b1N0cmluZ1RhZyBwcm9wZXJ0eSwgd2hpY2ggd2lsbFxuICogY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBgdG9TdHJpbmdgLiBUaGlzIGlzIGEgcmFyZSBlZGdlIGNhc2UgdGhhdCBpcyBkaWZmaWN1bHQgdG8gaGFuZGxlLFxuICogc28gaXQgaXMgbm90IGhhbmRsZWQgaGVyZS5cbiAqIEBwYXJhbSAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJuICAgICAgIElmIHRoZSB2YWx1ZSBpcyBjb2VyY2libGUgaW50byBhbiBPYmplY3RcbiAqL1xuZnVuY3Rpb24gc2hvdWxkRGVlcENvcHlPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5mdW5jdGlvbiBjb3B5QXJyYXkoYXJyYXksIGluaGVyaXRlZCkge1xuICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3B5QXJyYXkoaXRlbSwgaW5oZXJpdGVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXNob3VsZERlZXBDb3B5T2JqZWN0KGl0ZW0pXG4gICAgICAgICAgICA/IGl0ZW1cbiAgICAgICAgICAgIDogX21peGluKHtcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluaGVyaXRlZDogaW5oZXJpdGVkLFxuICAgICAgICAgICAgICAgIHNvdXJjZXM6IFtpdGVtXSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHt9XG4gICAgICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIF9taXhpbihrd0FyZ3MpIHtcbiAgICBjb25zdCBkZWVwID0ga3dBcmdzLmRlZXA7XG4gICAgY29uc3QgaW5oZXJpdGVkID0ga3dBcmdzLmluaGVyaXRlZDtcbiAgICBjb25zdCB0YXJnZXQgPSBrd0FyZ3MudGFyZ2V0O1xuICAgIGNvbnN0IGNvcGllZCA9IGt3QXJncy5jb3BpZWQgfHwgW107XG4gICAgY29uc3QgY29waWVkQ2xvbmUgPSBbLi4uY29waWVkXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGt3QXJncy5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGt3QXJncy5zb3VyY2VzW2ldO1xuICAgICAgICBpZiAoc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gc291cmNlW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGNvcGllZENsb25lLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvcHlBcnJheSh2YWx1ZSwgaW5oZXJpdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzaG91bGREZWVwQ29weU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV0gfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWQucHVzaChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfbWl4aW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkOiBpbmhlcml0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlczogW3ZhbHVlXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIC4uLm1peGlucykge1xuICAgIGlmICghbWl4aW5zLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbGFuZy5jcmVhdGUgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG1peGluIG9iamVjdC4nKTtcbiAgICB9XG4gICAgY29uc3QgYXJncyA9IG1peGlucy5zbGljZSgpO1xuICAgIGFyZ3MudW5zaGlmdChPYmplY3QuY3JlYXRlKHByb3RvdHlwZSkpO1xuICAgIHJldHVybiBhc3NpZ24uYXBwbHkobnVsbCwgYXJncyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVlcEFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICByZXR1cm4gX21peGluKHtcbiAgICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgICAgaW5oZXJpdGVkOiBmYWxzZSxcbiAgICAgICAgc291cmNlczogc291cmNlcyxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWl4aW4odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgcmV0dXJuIF9taXhpbih7XG4gICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgIGluaGVyaXRlZDogdHJ1ZSxcbiAgICAgICAgc291cmNlczogc291cmNlcyxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdXNpbmcgdGhlIHByb3ZpZGVkIHNvdXJjZSdzIHByb3RvdHlwZSBhcyB0aGUgcHJvdG90eXBlIGZvciB0aGUgbmV3IG9iamVjdCwgYW5kIHRoZW5cbiAqIGRlZXAgY29waWVzIHRoZSBwcm92aWRlZCBzb3VyY2UncyB2YWx1ZXMgaW50byB0aGUgbmV3IHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFRoZSBvYmplY3QgdG8gZHVwbGljYXRlXG4gKiBAcmV0dXJuIFRoZSBuZXcgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGUoc291cmNlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKSk7XG4gICAgcmV0dXJuIGRlZXBNaXhpbih0YXJnZXQsIHNvdXJjZSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0d28gdmFsdWVzIGFyZSB0aGUgc2FtZSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gYSBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gKiBAcGFyYW0gYiBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lOyBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSWRlbnRpY2FsKGEsIGIpIHtcbiAgICByZXR1cm4gKGEgPT09IGIgfHxcbiAgICAgICAgLyogYm90aCB2YWx1ZXMgYXJlIE5hTiAqL1xuICAgICAgICAoYSAhPT0gYSAmJiBiICE9PSBiKSk7XG59XG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGJpbmRzIGEgbWV0aG9kIHRvIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGF0IHJ1bnRpbWUuIFRoaXMgaXMgc2ltaWxhciB0b1xuICogYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCwgYnV0IGluc3RlYWQgb2YgYSBmdW5jdGlvbiBpdCB0YWtlcyB0aGUgbmFtZSBvZiBhIG1ldGhvZCBvbiBhbiBvYmplY3QuXG4gKiBBcyBhIHJlc3VsdCwgdGhlIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGBsYXRlQmluZGAgd2lsbCBhbHdheXMgY2FsbCB0aGUgZnVuY3Rpb24gY3VycmVudGx5IGFzc2lnbmVkIHRvXG4gKiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG9uIHRoZSBvYmplY3QgYXMgb2YgdGhlIG1vbWVudCB0aGUgZnVuY3Rpb24gaXQgcmV0dXJucyBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIGluc3RhbmNlIFRoZSBjb250ZXh0IG9iamVjdFxuICogQHBhcmFtIG1ldGhvZCBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIG9uIHRoZSBjb250ZXh0IG9iamVjdCB0byBiaW5kIHRvIGl0c2VsZlxuICogQHBhcmFtIHN1cHBsaWVkQXJncyBBbiBvcHRpb25hbCBhcnJheSBvZiB2YWx1ZXMgdG8gcHJlcGVuZCB0byB0aGUgYGluc3RhbmNlW21ldGhvZF1gIGFyZ3VtZW50cyBsaXN0XG4gKiBAcmV0dXJuIFRoZSBib3VuZCBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF0ZUJpbmQoaW5zdGFuY2UsIG1ldGhvZCwgLi4uc3VwcGxpZWRBcmdzKSB7XG4gICAgcmV0dXJuIHN1cHBsaWVkQXJncy5sZW5ndGhcbiAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA/IHN1cHBsaWVkQXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IHN1cHBsaWVkQXJncztcbiAgICAgICAgICAgIC8vIFRTNzAxN1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlW21ldGhvZF0uYXBwbHkoaW5zdGFuY2UsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gVFM3MDE3XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VbbWV0aG9kXS5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICByZXR1cm4gX21peGluKHtcbiAgICAgICAgZGVlcDogZmFsc2UsXG4gICAgICAgIGluaGVyaXRlZDogdHJ1ZSxcbiAgICAgICAgc291cmNlczogc291cmNlcyxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMgdGhlIGdpdmVuIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cyBwcmVwZW5kZWQgdG8gaXRzIGFyZ3VtZW50IGxpc3QuXG4gKiBMaWtlIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAsIGJ1dCBkb2VzIG5vdCBhbHRlciBleGVjdXRpb24gY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0RnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYm91bmRcbiAqIEBwYXJhbSBzdXBwbGllZEFyZ3MgQW4gb3B0aW9uYWwgYXJyYXkgb2YgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhlIGB0YXJnZXRGdW5jdGlvbmAgYXJndW1lbnRzIGxpc3RcbiAqIEByZXR1cm4gVGhlIGJvdW5kIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsKHRhcmdldEZ1bmN0aW9uLCAuLi5zdXBwbGllZEFyZ3MpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA/IHN1cHBsaWVkQXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IHN1cHBsaWVkQXJncztcbiAgICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG59XG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBkZXN0cm95IG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgY2FsbHMgdGhlIHBhc3NlZC1pbiBkZXN0cnVjdG9yLlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGNyZWF0aW5nIFwicmVtb3ZlXCIgLyBcImRlc3Ryb3lcIiBoYW5kbGVycyBmb3JcbiAqIGV2ZW50IGxpc3RlbmVycywgdGltZXJzLCBldGMuXG4gKlxuICogQHBhcmFtIGRlc3RydWN0b3IgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGhhbmRsZSdzIGBkZXN0cm95YCBtZXRob2QgaXMgaW52b2tlZFxuICogQHJldHVybiBUaGUgaGFuZGxlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGFuZGxlKGRlc3RydWN0b3IpIHtcbiAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRlc3RydWN0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIFJldHVybnMgYSBzaW5nbGUgaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVzdHJveSBtdWx0aXBsZSBoYW5kbGVzIHNpbXVsdGFuZW91c2x5LlxuICpcbiAqIEBwYXJhbSBoYW5kbGVzIEFuIGFycmF5IG9mIGhhbmRsZXMgd2l0aCBgZGVzdHJveWAgbWV0aG9kc1xuICogQHJldHVybiBUaGUgaGFuZGxlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9zaXRlSGFuZGxlKC4uLmhhbmRsZXMpIHtcbiAgICByZXR1cm4gY3JlYXRlSGFuZGxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYW5kbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBoYW5kbGVzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFuZy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvbGFuZy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL2xhbmcubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiZnVuY3Rpb24gaXNGZWF0dXJlVGVzdFRoZW5hYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLnRoZW47XG59XG4vKipcbiAqIEEgY2FjaGUgb2YgcmVzdWx0cyBvZiBmZWF0dXJlIHRlc3RzXG4gKi9cbmV4cG9ydCBjb25zdCB0ZXN0Q2FjaGUgPSB7fTtcbi8qKlxuICogQSBjYWNoZSBvZiB0aGUgdW4tcmVzb2x2ZWQgZmVhdHVyZSB0ZXN0c1xuICovXG5leHBvcnQgY29uc3QgdGVzdEZ1bmN0aW9ucyA9IHt9O1xuLyoqXG4gKiBBIGNhY2hlIG9mIHVucmVzb2x2ZWQgdGhlbmFibGVzIChwcm9iYWJseSBwcm9taXNlcylcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgdGVzdFRoZW5hYmxlcyA9IHt9O1xuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIHNjb3BlIChgd2luZG93YCBpbiBhIGJyb3dzZXIsIGBnbG9iYWxgIGluIE5vZGVKUylcbiAqL1xuY29uc3QgZ2xvYmFsU2NvcGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIEJyb3dzZXJzXG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIE5vZGVcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIFdlYiB3b3JrZXJzXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB7fTtcbn0pKCk7XG4vKiBHcmFiIHRoZSBzdGF0aWNGZWF0dXJlcyBpZiB0aGVyZSBhcmUgYXZhaWxhYmxlICovXG5jb25zdCB7IHN0YXRpY0ZlYXR1cmVzIH0gPSBnbG9iYWxTY29wZS5Eb2pvSGFzRW52aXJvbm1lbnQgfHwge307XG4vKiBDbGVhbmluZyB1cCB0aGUgRG9qb0hhc0Vudmlvcm5tZW50ICovXG5pZiAoJ0Rvam9IYXNFbnZpcm9ubWVudCcgaW4gZ2xvYmFsU2NvcGUpIHtcbiAgICBkZWxldGUgZ2xvYmFsU2NvcGUuRG9qb0hhc0Vudmlyb25tZW50O1xufVxuLyoqXG4gKiBDdXN0b20gdHlwZSBndWFyZCB0byBuYXJyb3cgdGhlIGBzdGF0aWNGZWF0dXJlc2AgdG8gZWl0aGVyIGEgbWFwIG9yIGEgZnVuY3Rpb24gdGhhdFxuICogcmV0dXJucyBhIG1hcC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGd1YXJkIGZvclxuICovXG5mdW5jdGlvbiBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG4vKipcbiAqIFRoZSBjYWNoZSBvZiBhc3NlcnRlZCBmZWF0dXJlcyB0aGF0IHdlcmUgYXZhaWxhYmxlIGluIHRoZSBnbG9iYWwgc2NvcGUgd2hlbiB0aGVcbiAqIG1vZHVsZSBsb2FkZWRcbiAqL1xuY29uc3Qgc3RhdGljQ2FjaGUgPSBzdGF0aWNGZWF0dXJlc1xuICAgID8gaXNTdGF0aWNGZWF0dXJlRnVuY3Rpb24oc3RhdGljRmVhdHVyZXMpID8gc3RhdGljRmVhdHVyZXMuYXBwbHkoZ2xvYmFsU2NvcGUpIDogc3RhdGljRmVhdHVyZXNcbiAgICA6IHt9OyAvKiBQcm92aWRpbmcgYW4gZW1wdHkgY2FjaGUsIGlmIG5vbmUgd2FzIGluIHRoZSBlbnZpcm9ubWVudFxuXG4vKipcbiogQU1EIHBsdWdpbiBmdW5jdGlvbi5cbipcbiogQ29uZGl0aW9uYWwgbG9hZHMgbW9kdWxlcyBiYXNlZCBvbiBhIGhhcyBmZWF0dXJlIHRlc3QgdmFsdWUuXG4qXG4qIEBwYXJhbSByZXNvdXJjZUlkIEdpdmVzIHRoZSByZXNvbHZlZCBtb2R1bGUgaWQgdG8gbG9hZC5cbiogQHBhcmFtIHJlcXVpcmUgVGhlIGxvYWRlciByZXF1aXJlIGZ1bmN0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgbW9kdWxlIHRoYXQgY29udGFpbmVkIHRoZSBwbHVnaW4gcmVzb3VyY2UgaW4gaXRzXG4qICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgbGlzdC5cbiogQHBhcmFtIGxvYWQgQ2FsbGJhY2sgdG8gbG9hZGVyIHRoYXQgY29uc3VtZXMgcmVzdWx0IG9mIHBsdWdpbiBkZW1hbmQuXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWQocmVzb3VyY2VJZCwgcmVxdWlyZSwgbG9hZCwgY29uZmlnKSB7XG4gICAgcmVzb3VyY2VJZCA/IHJlcXVpcmUoW3Jlc291cmNlSWRdLCBsb2FkKSA6IGxvYWQoKTtcbn1cbi8qKlxuICogQU1EIHBsdWdpbiBmdW5jdGlvbi5cbiAqXG4gKiBSZXNvbHZlcyByZXNvdXJjZUlkIGludG8gYSBtb2R1bGUgaWQgYmFzZWQgb24gcG9zc2libHktbmVzdGVkIHRlbmFyeSBleHByZXNzaW9uIHRoYXQgYnJhbmNoZXMgb24gaGFzIGZlYXR1cmUgdGVzdFxuICogdmFsdWUocykuXG4gKlxuICogQHBhcmFtIHJlc291cmNlSWQgVGhlIGlkIG9mIHRoZSBtb2R1bGVcbiAqIEBwYXJhbSBub3JtYWxpemUgUmVzb2x2ZXMgYSByZWxhdGl2ZSBtb2R1bGUgaWQgaW50byBhbiBhYnNvbHV0ZSBtb2R1bGUgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShyZXNvdXJjZUlkLCBub3JtYWxpemUpIHtcbiAgICBjb25zdCB0b2tlbnMgPSByZXNvdXJjZUlkLm1hdGNoKC9bXFw/Ol18W146XFw/XSovZykgfHwgW107XG4gICAgbGV0IGkgPSAwO1xuICAgIGZ1bmN0aW9uIGdldChza2lwKSB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSB0b2tlbnNbaSsrXTtcbiAgICAgICAgaWYgKHRlcm0gPT09ICc6Jykge1xuICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nIG1vZHVsZSBuYW1lLCByZXNvbHZlcyB0byBudWxsXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBvc3RmaXhlZCB3aXRoIGEgPyBtZWFucyBpdCBpcyBhIGZlYXR1cmUgdG8gYnJhbmNoIG9uLCB0aGUgdGVybSBpcyB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxuICAgICAgICAgICAgaWYgKHRva2Vuc1tpKytdID09PSAnPycpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNraXAgJiYgaGFzKHRlcm0pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoZWQgdGhlIGZlYXR1cmUsIGdldCB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBkaWQgbm90IG1hdGNoLCBnZXQgdGhlIHNlY29uZCB2YWx1ZSwgcGFzc2luZyBvdmVyIHRoZSBmaXJzdFxuICAgICAgICAgICAgICAgICAgICBnZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQoc2tpcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYSBtb2R1bGVcbiAgICAgICAgICAgIHJldHVybiB0ZXJtO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlkID0gZ2V0KCk7XG4gICAgcmV0dXJuIGlkICYmIG5vcm1hbGl6ZShpZCk7XG59XG4vKipcbiAqIENoZWNrIGlmIGEgZmVhdHVyZSBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWRcbiAqXG4gKiBAcGFyYW0gZmVhdHVyZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhpc3RzKGZlYXR1cmUpIHtcbiAgICBjb25zdCBub3JtYWxpemVkRmVhdHVyZSA9IGZlYXR1cmUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gQm9vbGVhbihub3JtYWxpemVkRmVhdHVyZSBpbiBzdGF0aWNDYWNoZSB8fCBub3JtYWxpemVkRmVhdHVyZSBpbiB0ZXN0Q2FjaGUgfHwgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0pO1xufVxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyB0ZXN0IGZvciBhIG5hbWVkIGZlYXR1cmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGhhcy5hZGQoJ2RvbS1hZGRldmVudGxpc3RlbmVyJywgISFkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogaGFzLmFkZCgndG91Y2gtZXZlbnRzJywgZnVuY3Rpb24gKCkge1xuICogICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50XG4gKiB9KTtcbiAqXG4gKiBAcGFyYW0gZmVhdHVyZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxuICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSByZXBvcnRlZCBvZiB0aGUgZmVhdHVyZSwgb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgb25jZSBvbiBmaXJzdCB0ZXN0XG4gKiBAcGFyYW0gb3ZlcndyaXRlIGlmIGFuIGV4aXN0aW5nIHZhbHVlIHNob3VsZCBiZSBvdmVyd3JpdHRlbi4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGQoZmVhdHVyZSwgdmFsdWUsIG92ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGV4aXN0cyhub3JtYWxpemVkRmVhdHVyZSkgJiYgIW92ZXJ3cml0ZSAmJiAhKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBGZWF0dXJlIFwiJHtmZWF0dXJlfVwiIGV4aXN0cyBhbmQgb3ZlcndyaXRlIG5vdCB0cnVlLmApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdID0gdmFsdWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRmVhdHVyZVRlc3RUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgdGVzdFRoZW5hYmxlc1tmZWF0dXJlXSA9IHZhbHVlLnRoZW4oKHJlc29sdmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRlc3RDYWNoZVtmZWF0dXJlXSA9IHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICBkZWxldGUgdGVzdFRoZW5hYmxlc1tmZWF0dXJlXTtcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIHRlc3RUaGVuYWJsZXNbZmVhdHVyZV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXSA9IHZhbHVlO1xuICAgICAgICBkZWxldGUgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV07XG4gICAgfVxufVxuLyoqXG4gKiBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBuYW1lZCBmZWF0dXJlLlxuICpcbiAqIEBwYXJhbSBmZWF0dXJlIFRoZSBuYW1lIChpZiBhIHN0cmluZykgb3IgaWRlbnRpZmllciAoaWYgYW4gaW50ZWdlcikgb2YgdGhlIGZlYXR1cmUgdG8gdGVzdC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzKGZlYXR1cmUpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChub3JtYWxpemVkRmVhdHVyZSBpbiBzdGF0aWNDYWNoZSkge1xuICAgICAgICByZXN1bHQgPSBzdGF0aWNDYWNoZVtub3JtYWxpemVkRmVhdHVyZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdKSB7XG4gICAgICAgIHJlc3VsdCA9IHRlc3RDYWNoZVtub3JtYWxpemVkRmVhdHVyZV0gPSB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXS5jYWxsKG51bGwpO1xuICAgICAgICBkZWxldGUgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHRlc3RDYWNoZSkge1xuICAgICAgICByZXN1bHQgPSB0ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdO1xuICAgIH1cbiAgICBlbHNlIGlmIChmZWF0dXJlIGluIHRlc3RUaGVuYWJsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQXR0ZW1wdCB0byBkZXRlY3QgdW5yZWdpc3RlcmVkIGhhcyBmZWF0dXJlIFwiJHtmZWF0dXJlfVwiYCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKlxuICogT3V0IG9mIHRoZSBib3ggZmVhdHVyZSB0ZXN0c1xuICovXG4vKiBFbnZpcm9ubWVudHMgKi9cbi8qIFVzZWQgYXMgYSB2YWx1ZSB0byBwcm92aWRlIGEgZGVidWcgb25seSBjb2RlIHBhdGggKi9cbmFkZCgnZGVidWcnLCB0cnVlKTtcbi8qIERldGVjdHMgaWYgdGhlIGVudmlyb25tZW50IGlzIFwiYnJvd3NlciBsaWtlXCIgKi9cbmFkZCgnaG9zdC1icm93c2VyJywgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnKTtcbi8qIERldGVjdHMgaWYgdGhlIGVudmlyb25tZW50IGFwcGVhcnMgdG8gYmUgTm9kZUpTICovXG5hZGQoJ2hvc3Qtbm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XG4gICAgfVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9oYXMvaGFzLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2hhcy9oYXMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaXNBcnJheUxpa2UsIFNoaW1JdGVyYXRvciB9IGZyb20gJy4vaXRlcmF0b3InO1xuaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBpcyBhcyBvYmplY3RJcyB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgJy4vU3ltYm9sJztcbmV4cG9ydCBsZXQgTWFwID0gZ2xvYmFsLk1hcDtcbmlmICghdHJ1ZSkge1xuICAgIE1hcCA9IChfYSA9IGNsYXNzIE1hcCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnTWFwJztcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCh2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB1c2luZyBPYmplY3QuaXNcbiAgICAgICAgICAgICAqIHRvIGNoZWNrIGZvciBlcXVhbGl0eS4gU2VlIGh0dHA6Ly9temwubGEvMXp1S08yVlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBfaW5kZXhPZktleShrZXlzLCBrZXkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0SXMoa2V5c1tpXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2V0IHNpemUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2tleXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xlYXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5sZW5ndGggPSB0aGlzLl92YWx1ZXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZShrZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50cmllcygpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl9rZXlzLm1hcCgoa2V5LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBba2V5LCB0aGlzLl92YWx1ZXNbaV1dO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3JFYWNoKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuX2tleXM7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgdmFsdWVzW2ldLCBrZXlzW2ldLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZXQoa2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IHRoaXMuX3ZhbHVlc1tpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYXMoa2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KSA+IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih0aGlzLl9rZXlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gdGhpcy5fa2V5cy5sZW5ndGggOiBpbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzW2luZGV4XSA9IGtleTtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZXMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaGltSXRlcmF0b3IodGhpcy5fdmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVudHJpZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX2FbU3ltYm9sLnNwZWNpZXNdID0gX2EsXG4gICAgICAgIF9hKTtcbn1cbmV4cG9ydCBkZWZhdWx0IE1hcDtcbnZhciBfYTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1hcC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vTWFwLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vTWFwLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgcXVldWVNaWNyb1Rhc2sgfSBmcm9tICcuL3N1cHBvcnQvcXVldWUnO1xuaW1wb3J0ICcuL1N5bWJvbCc7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuZXhwb3J0IGxldCBTaGltUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuZXhwb3J0IGNvbnN0IGlzVGhlbmFibGUgPSBmdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nO1xufTtcbmlmICghdHJ1ZSkge1xuICAgIGdsb2JhbC5Qcm9taXNlID0gU2hpbVByb21pc2UgPSAoX2EgPSBjbGFzcyBQcm9taXNlIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBQcm9taXNlLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSBleGVjdXRvclxuICAgICAgICAgICAgICogVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBQcm9taXNlIGlzIGluc3RhbnRpYXRlZC4gSXQgaXMgcmVzcG9uc2libGUgZm9yXG4gICAgICAgICAgICAgKiBzdGFydGluZyB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGVuIGl0IGlzIGludm9rZWQuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVGhlIGV4ZWN1dG9yIG11c3QgY2FsbCBlaXRoZXIgdGhlIHBhc3NlZCBgcmVzb2x2ZWAgZnVuY3Rpb24gd2hlbiB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkXG4gICAgICAgICAgICAgKiBzdWNjZXNzZnVsbHksIG9yIHRoZSBgcmVqZWN0YCBmdW5jdGlvbiB3aGVuIHRoZSBvcGVyYXRpb24gZmFpbHMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxIC8qIFBlbmRpbmcgKi87XG4gICAgICAgICAgICAgICAgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ1Byb21pc2UnO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHRydWUsIHRoZSByZXNvbHV0aW9uIG9mIHRoaXMgcHJvbWlzZSBpcyBjaGFpbmVkIChcImxvY2tlZCBpblwiKSB0byBhbm90aGVyIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbGV0IGlzQ2hhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgcHJvbWlzZSBpcyBpbiBhIHJlc29sdmVkIHN0YXRlLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVzb2x2ZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlICE9PSAxIC8qIFBlbmRpbmcgKi8gfHwgaXNDaGFpbmVkO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogQ2FsbGJhY2tzIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgb25jZSB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGxldCBjYWxsYmFja3MgPSBbXTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJbml0aWFsbHkgcHVzaGVzIGNhbGxiYWNrcyBvbnRvIGEgcXVldWUgZm9yIGV4ZWN1dGlvbiBvbmNlIHRoaXMgcHJvbWlzZSBzZXR0bGVzLiBBZnRlciB0aGUgcHJvbWlzZSBzZXR0bGVzLFxuICAgICAgICAgICAgICAgICAqIGVucXVldWVzIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IGV2ZW50IGxvb3AgdHVybi5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBsZXQgd2hlbkZpbmlzaGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogU2V0dGxlcyB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIHtUfGFueX0gdmFsdWUgVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGxlID0gKG5ld1N0YXRlLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBBIHByb21pc2UgY2FuIG9ubHkgYmUgc2V0dGxlZCBvbmNlLlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gMSAvKiBQZW5kaW5nICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgd2hlbkZpbmlzaGVkID0gcXVldWVNaWNyb1Rhc2s7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZW5xdWV1ZSBhIGNhbGxiYWNrIHJ1bm5lciBpZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHNvIHRoYXQgaW5pdGlhbGx5IGZ1bGZpbGxlZCBQcm9taXNlcyBkb24ndCBoYXZlIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgYW4gZXh0cmEgdHVybi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrcyAmJiBjYWxsYmFja3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVNaWNyb1Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gY2FsbGJhY2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3NbaV0uY2FsbChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBSZXNvbHZlcyB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIHtUfGFueX0gdmFsdWUgVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZSA9IChuZXdTdGF0ZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudGhlbihzZXR0bGUuYmluZChudWxsLCAwIC8qIEZ1bGZpbGxlZCAqLyksIHNldHRsZS5iaW5kKG51bGwsIDIgLyogUmVqZWN0ZWQgKi8pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0bGUobmV3U3RhdGUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy50aGVuID0gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuRmluaXNoZWQgaW5pdGlhbGx5IHF1ZXVlcyB1cCBjYWxsYmFja3MgZm9yIGV4ZWN1dGlvbiBhZnRlciB0aGUgcHJvbWlzZSBoYXMgc2V0dGxlZC4gT25jZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb21pc2UgaGFzIHNldHRsZWQsIHdoZW5GaW5pc2hlZCB3aWxsIHNjaGVkdWxlIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHR1cm4gdGhyb3VnaCB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGxvb3AuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVuRmluaXNoZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5zdGF0ZSA9PT0gMiAvKiBSZWplY3RlZCAqLyA/IG9uUmVqZWN0ZWQgOiBvbkZ1bGZpbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNhbGxiYWNrKHRoaXMucmVzb2x2ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXRlID09PSAyIC8qIFJlamVjdGVkICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh0aGlzLnJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dG9yKHJlc29sdmUuYmluZChudWxsLCAwIC8qIEZ1bGZpbGxlZCAqLyksIHJlc29sdmUuYmluZChudWxsLCAyIC8qIFJlamVjdGVkICovKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBzZXR0bGUoMiAvKiBSZWplY3RlZCAqLywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRpYyBhbGwoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXBsZXRlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvdGFsID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvcHVsYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsKGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgKytjb21wbGV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3B1bGF0aW5nIHx8IGNvbXBsZXRlIDwgdG90YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0l0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICsrdG90YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaGVuYWJsZShpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFuIGl0ZW0gUHJvbWlzZSByZWplY3RzLCB0aGlzIFByb21pc2UgaXMgaW1tZWRpYXRlbHkgcmVqZWN0ZWQgd2l0aCB0aGUgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50aGVuKGZ1bGZpbGwuYmluZChudWxsLCBpbmRleCksIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoaXRlbSkudGhlbihmdWxmaWxsLmJpbmQobnVsbCwgaW5kZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJdGVtKGksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwb3B1bGF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGljIHJhY2UoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgUHJvbWlzZSBpdGVtIHJlamVjdHMsIHRoaXMgUHJvbWlzZSBpcyBpbW1lZGlhdGVseSByZWplY3RlZCB3aXRoIHRoZSBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvbWlzZSdzIHJlamVjdGlvbiBlcnJvci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShpdGVtKS50aGVuKHJlc29sdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0aWMgcmVqZWN0KHJlYXNvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGljIHJlc29sdmUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChvblJlamVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBfYVtTeW1ib2wuc3BlY2llc10gPSBTaGltUHJvbWlzZSxcbiAgICAgICAgX2EpO1xufVxuZXhwb3J0IGRlZmF1bHQgU2hpbVByb21pc2U7XG52YXIgX2E7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Qcm9taXNlLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9Qcm9taXNlLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vUHJvbWlzZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBnZXRWYWx1ZURlc2NyaXB0b3IgfSBmcm9tICcuL3N1cHBvcnQvdXRpbCc7XG5leHBvcnQgbGV0IFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG5pZiAoIXRydWUpIHtcbiAgICAvKipcbiAgICAgKiBUaHJvd3MgaWYgdGhlIHZhbHVlIGlzIG5vdCBhIHN5bWJvbCwgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgU2hpbVxuICAgICAqIEBwYXJhbSAge2FueX0gICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXG4gICAgICogQHJldHVybiB7c3ltYm9sfSAgICAgICBSZXR1cm5zIHRoZSBzeW1ib2wgb3IgdGhyb3dzXG4gICAgICovXG4gICAgY29uc3QgdmFsaWRhdGVTeW1ib2wgPSBmdW5jdGlvbiB2YWxpZGF0ZVN5bWJvbCh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcih2YWx1ZSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgY29uc3QgZGVmaW5lUHJvcGVydGllcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuICAgIGNvbnN0IGNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG4gICAgY29uc3Qgb2JqUHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgICBjb25zdCBnbG9iYWxTeW1ib2xzID0ge307XG4gICAgY29uc3QgZ2V0U3ltYm9sTmFtZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBjcmVhdGUobnVsbCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGVzYykge1xuICAgICAgICAgICAgbGV0IHBvc3RmaXggPSAwO1xuICAgICAgICAgICAgbGV0IG5hbWU7XG4gICAgICAgICAgICB3aGlsZSAoY3JlYXRlZFtTdHJpbmcoZGVzYykgKyAocG9zdGZpeCB8fCAnJyldKSB7XG4gICAgICAgICAgICAgICAgKytwb3N0Zml4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVzYyArPSBTdHJpbmcocG9zdGZpeCB8fCAnJyk7XG4gICAgICAgICAgICBjcmVhdGVkW2Rlc2NdID0gdHJ1ZTtcbiAgICAgICAgICAgIG5hbWUgPSAnQEAnICsgZGVzYztcbiAgICAgICAgICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkgZ3VhcmQgdW50aWwgdGhlIGR1cGxpY2F0ZSBleGVjdXRpb24gd2hlbiB0ZXN0aW5nIGNhbiBiZVxuICAgICAgICAgICAgLy8gcGlubmVkIGRvd24uXG4gICAgICAgICAgICBpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqUHJvdG90eXBlLCBuYW1lKSkge1xuICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KG9ialByb3RvdHlwZSwgbmFtZSwge1xuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICB9O1xuICAgIH0pKCk7XG4gICAgY29uc3QgSW50ZXJuYWxTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woZGVzY3JpcHRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBJbnRlcm5hbFN5bWJvbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3ltYm9sKGRlc2NyaXB0aW9uKTtcbiAgICB9O1xuICAgIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woZGVzY3JpcHRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1R5cGVFcnJvcjogU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3ltID0gT2JqZWN0LmNyZWF0ZShJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUpO1xuICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyhkZXNjcmlwdGlvbik7XG4gICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0aWVzKHN5bSwge1xuICAgICAgICAgICAgX19kZXNjcmlwdGlvbl9fOiBnZXRWYWx1ZURlc2NyaXB0b3IoZGVzY3JpcHRpb24pLFxuICAgICAgICAgICAgX19uYW1lX186IGdldFZhbHVlRGVzY3JpcHRvcihnZXRTeW1ib2xOYW1lKGRlc2NyaXB0aW9uKSlcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKiBEZWNvcmF0ZSB0aGUgU3ltYm9sIGZ1bmN0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlIHByb3BlcnRpZXMgKi9cbiAgICBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsICdmb3InLCBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoZ2xvYmFsU3ltYm9sc1trZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsU3ltYm9sc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoZ2xvYmFsU3ltYm9sc1trZXldID0gU3ltYm9sKFN0cmluZyhrZXkpKSk7XG4gICAgfSkpO1xuICAgIGRlZmluZVByb3BlcnRpZXMoU3ltYm9sLCB7XG4gICAgICAgIGtleUZvcjogZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgICAgICAgIGxldCBrZXk7XG4gICAgICAgICAgICB2YWxpZGF0ZVN5bWJvbChzeW0pO1xuICAgICAgICAgICAgZm9yIChrZXkgaW4gZ2xvYmFsU3ltYm9scykge1xuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxTeW1ib2xzW2tleV0gPT09IHN5bSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGhhc0luc3RhbmNlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaGFzSW5zdGFuY2UnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgaXNDb25jYXRTcHJlYWRhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaXNDb25jYXRTcHJlYWRhYmxlJyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIGl0ZXJhdG9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaXRlcmF0b3InKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgbWF0Y2g6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdtYXRjaCcpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBvYnNlcnZhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignb2JzZXJ2YWJsZScpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICByZXBsYWNlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigncmVwbGFjZScpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBzZWFyY2g6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdzZWFyY2gnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgc3BlY2llczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwZWNpZXMnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgc3BsaXQ6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdzcGxpdCcpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICB0b1ByaW1pdGl2ZTogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3RvUHJpbWl0aXZlJyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIHRvU3RyaW5nVGFnOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigndG9TdHJpbmdUYWcnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgdW5zY29wYWJsZXM6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCd1bnNjb3BhYmxlcycpLCBmYWxzZSwgZmFsc2UpXG4gICAgfSk7XG4gICAgLyogRGVjb3JhdGUgdGhlIEludGVybmFsU3ltYm9sIG9iamVjdCAqL1xuICAgIGRlZmluZVByb3BlcnRpZXMoSW50ZXJuYWxTeW1ib2wucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sKSxcbiAgICAgICAgdG9TdHJpbmc6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX25hbWVfXztcbiAgICAgICAgfSwgZmFsc2UsIGZhbHNlKVxuICAgIH0pO1xuICAgIC8qIERlY29yYXRlIHRoZSBTeW1ib2wucHJvdG90eXBlICovXG4gICAgZGVmaW5lUHJvcGVydGllcyhTeW1ib2wucHJvdG90eXBlLCB7XG4gICAgICAgIHRvU3RyaW5nOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdTeW1ib2wgKCcgKyB2YWxpZGF0ZVN5bWJvbCh0aGlzKS5fX2Rlc2NyaXB0aW9uX18gKyAnKSc7XG4gICAgICAgIH0pLFxuICAgICAgICB2YWx1ZU9mOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlU3ltYm9sKHRoaXMpO1xuICAgICAgICB9KVxuICAgIH0pO1xuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1ByaW1pdGl2ZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlU3ltYm9sKHRoaXMpO1xuICAgIH0pKTtcbiAgICBkZWZpbmVQcm9wZXJ0eShTeW1ib2wucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIGdldFZhbHVlRGVzY3JpcHRvcignU3ltYm9sJywgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XG4gICAgZGVmaW5lUHJvcGVydHkoSW50ZXJuYWxTeW1ib2wucHJvdG90eXBlLCBTeW1ib2wudG9QcmltaXRpdmUsIGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wucHJvdG90eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV0sIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpO1xuICAgIGRlZmluZVByb3BlcnR5KEludGVybmFsU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcbn1cbi8qKlxuICogQSBjdXN0b20gZ3VhcmQgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGlmIGFuIG9iamVjdCBpcyBhIHN5bWJvbCBvciBub3RcbiAqIEBwYXJhbSAge2FueX0gICAgICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyBhIHN5bWJvbCBvciBub3RcbiAqIEByZXR1cm4ge2lzIHN5bWJvbH0gICAgICAgUmV0dXJucyB0cnVlIGlmIGEgc3ltYm9sIG9yIG5vdCAoYW5kIG5hcnJvd3MgdGhlIHR5cGUgZ3VhcmQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcgfHwgdmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpKSB8fCBmYWxzZTtcbn1cbi8qKlxuICogRmlsbCBhbnkgbWlzc2luZyB3ZWxsIGtub3duIHN5bWJvbHMgaWYgdGhlIG5hdGl2ZSBTeW1ib2wgaXMgbWlzc2luZyB0aGVtXG4gKi9cbltcbiAgICAnaGFzSW5zdGFuY2UnLFxuICAgICdpc0NvbmNhdFNwcmVhZGFibGUnLFxuICAgICdpdGVyYXRvcicsXG4gICAgJ3NwZWNpZXMnLFxuICAgICdyZXBsYWNlJyxcbiAgICAnc2VhcmNoJyxcbiAgICAnc3BsaXQnLFxuICAgICdtYXRjaCcsXG4gICAgJ3RvUHJpbWl0aXZlJyxcbiAgICAndG9TdHJpbmdUYWcnLFxuICAgICd1bnNjb3BhYmxlcycsXG4gICAgJ29ic2VydmFibGUnXG5dLmZvckVhY2goKHdlbGxLbm93bikgPT4ge1xuICAgIGlmICghU3ltYm9sW3dlbGxLbm93bl0pIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN5bWJvbCwgd2VsbEtub3duLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcih3ZWxsS25vd24pLCBmYWxzZSwgZmFsc2UpKTtcbiAgICB9XG59KTtcbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN5bWJvbC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vU3ltYm9sLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vU3ltYm9sLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgaXNBcnJheUxpa2UgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgJy4vU3ltYm9sJztcbmV4cG9ydCBsZXQgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuaWYgKCF0cnVlKSB7XG4gICAgY29uc3QgREVMRVRFRCA9IHt9O1xuICAgIGNvbnN0IGdldFVJRCA9IGZ1bmN0aW9uIGdldFVJRCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCk7XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZU5hbWUgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgc3RhcnRJZCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAlIDEwMDAwMDAwMCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBnZW5lcmF0ZU5hbWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ19fd20nICsgZ2V0VUlEKCkgKyAoc3RhcnRJZCsrICsgJ19fJyk7XG4gICAgICAgIH07XG4gICAgfSkoKTtcbiAgICBXZWFrTWFwID0gY2xhc3MgV2Vha01hcCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnV2Vha01hcCc7XG4gICAgICAgICAgICB0aGlzLl9uYW1lID0gZ2VuZXJhdGVOYW1lKCk7XG4gICAgICAgICAgICB0aGlzLl9mcm96ZW5FbnRyaWVzID0gW107XG4gICAgICAgICAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGl0ZW1bMF0sIGl0ZW1bMV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2Zyb3plbkVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnJvemVuRW50cmllc1tpXS5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xuICAgICAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSB7XG4gICAgICAgICAgICAgICAgZW50cnkudmFsdWUgPSBERUxFVEVEO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZnJvemVuSW5kZXggPSB0aGlzLl9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSk7XG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zyb3plbkVudHJpZXMuc3BsaWNlKGZyb3plbkluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xuICAgICAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZnJvemVuSW5kZXggPSB0aGlzLl9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSk7XG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcm96ZW5FbnRyaWVzW2Zyb3plbkluZGV4XS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoYXMoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBrZXlbdGhpcy5fbmFtZV07XG4gICAgICAgICAgICBpZiAoQm9vbGVhbihlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFrZXkgfHwgKHR5cGVvZiBrZXkgIT09ICdvYmplY3QnICYmIHR5cGVvZiBrZXkgIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB2YWx1ZSB1c2VkIGFzIHdlYWsgbWFwIGtleScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xuICAgICAgICAgICAgaWYgKCFlbnRyeSB8fCBlbnRyeS5rZXkgIT09IGtleSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogeyB2YWx1ZToga2V5IH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMuX25hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbnRyeVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgV2Vha01hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdlYWtNYXAubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL1dlYWtNYXAubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9XZWFrTWFwLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgaXNBcnJheUxpa2UsIGlzSXRlcmFibGUgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCB7IE1BWF9TQUZFX0lOVEVHRVIgfSBmcm9tICcuL251bWJlcic7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0IHsgd3JhcE5hdGl2ZSB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcbmV4cG9ydCBsZXQgZnJvbTtcbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBhcnJheSBmcm9tIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBhcmd1bWVudHMgQW55IG51bWJlciBvZiBhcmd1bWVudHMgZm9yIHRoZSBhcnJheVxuICogQHJldHVybiBBbiBhcnJheSBmcm9tIHRoZSBnaXZlbiBhcmd1bWVudHNcbiAqL1xuZXhwb3J0IGxldCBvZjtcbi8qIEVTNiBBcnJheSBpbnN0YW5jZSBtZXRob2RzICovXG4vKipcbiAqIENvcGllcyBkYXRhIGludGVybmFsbHkgd2l0aGluIGFuIGFycmF5IG9yIGFycmF5LWxpa2Ugb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBhcnJheS1saWtlIG9iamVjdFxuICogQHBhcmFtIG9mZnNldCBUaGUgaW5kZXggdG8gc3RhcnQgY29weWluZyB2YWx1ZXMgdG87IGlmIG5lZ2F0aXZlLCBpdCBjb3VudHMgYmFja3dhcmRzIGZyb20gbGVuZ3RoXG4gKiBAcGFyYW0gc3RhcnQgVGhlIGZpcnN0IChpbmNsdXNpdmUpIGluZGV4IHRvIGNvcHk7IGlmIG5lZ2F0aXZlLCBpdCBjb3VudHMgYmFja3dhcmRzIGZyb20gbGVuZ3RoXG4gKiBAcGFyYW0gZW5kIFRoZSBsYXN0IChleGNsdXNpdmUpIGluZGV4IHRvIGNvcHk7IGlmIG5lZ2F0aXZlLCBpdCBjb3VudHMgYmFja3dhcmRzIGZyb20gbGVuZ3RoXG4gKiBAcmV0dXJuIFRoZSB0YXJnZXRcbiAqL1xuZXhwb3J0IGxldCBjb3B5V2l0aGluO1xuLyoqXG4gKiBGaWxscyBlbGVtZW50cyBvZiBhbiBhcnJheS1saWtlIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHRvIGZpbGxcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBlYWNoIGVsZW1lbnQgb2YgdGhlIHRhcmdldCB3aXRoXG4gKiBAcGFyYW0gc3RhcnQgVGhlIGZpcnN0IGluZGV4IHRvIGZpbGxcbiAqIEBwYXJhbSBlbmQgVGhlIChleGNsdXNpdmUpIGluZGV4IGF0IHdoaWNoIHRvIHN0b3AgZmlsbGluZ1xuICogQHJldHVybiBUaGUgZmlsbGVkIHRhcmdldFxuICovXG5leHBvcnQgbGV0IGZpbGw7XG4vKipcbiAqIEZpbmRzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBpbnN0YW5jZSBtYXRjaGluZyB0aGUgY2FsbGJhY2sgb3IgdW5kZWZpbmVkIGlmIG9uZSBpcyBub3QgZm91bmQuXG4gKlxuICogQHBhcmFtIHRhcmdldCBBbiBhcnJheS1saWtlIG9iamVjdFxuICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gcmV0dXJuaW5nIGlmIHRoZSBjdXJyZW50IHZhbHVlIG1hdGNoZXMgYSBjcml0ZXJpYVxuICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgZmluZCBmdW5jdGlvblxuICogQHJldHVybiBUaGUgZmlyc3QgZWxlbWVudCBtYXRjaGluZyB0aGUgY2FsbGJhY2ssIG9yIHVuZGVmaW5lZCBpZiBvbmUgZG9lcyBub3QgZXhpc3RcbiAqL1xuZXhwb3J0IGxldCBmaW5kO1xuLyoqXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBzZWFyY2ggYW5kIHJldHVybnMgdGhlIGZpcnN0IGluZGV4IHdob3NlIHZhbHVlIHNhdGlzZmllcyB0aGUgcGFzc2VkIGNhbGxiYWNrLFxuICogb3IgLTEgaWYgbm8gdmFsdWVzIHNhdGlzZnkgaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCBBbiBhcnJheS1saWtlIG9iamVjdFxuICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgaWYgdGhlIGN1cnJlbnQgdmFsdWUgc2F0aXNmaWVzIGl0cyBjcml0ZXJpYVxuICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgZmluZCBmdW5jdGlvblxuICogQHJldHVybiBUaGUgZmlyc3QgaW5kZXggd2hvc2UgdmFsdWUgc2F0aXNmaWVzIHRoZSBwYXNzZWQgY2FsbGJhY2ssIG9yIC0xIGlmIG5vIHZhbHVlcyBzYXRpc2Z5IGl0XG4gKi9cbmV4cG9ydCBsZXQgZmluZEluZGV4O1xuLyogRVM3IEFycmF5IGluc3RhbmNlIG1ldGhvZHMgKi9cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGFycmF5IGluY2x1ZGVzIGEgZ2l2ZW4gdmFsdWVcbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJnZXQgYXJyYXktbGlrZSBvYmplY3RcbiAqIEBwYXJhbSBzZWFyY2hFbGVtZW50IHRoZSBpdGVtIHRvIHNlYXJjaCBmb3JcbiAqIEBwYXJhbSBmcm9tSW5kZXggdGhlIHN0YXJ0aW5nIGluZGV4IHRvIHNlYXJjaCBmcm9tXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgYXJyYXkgaW5jbHVkZXMgdGhlIGVsZW1lbnQsIG90aGVyd2lzZSBgZmFsc2VgXG4gKi9cbmV4cG9ydCBsZXQgaW5jbHVkZXM7XG5pZiAodHJ1ZSAmJiB0cnVlKSB7XG4gICAgZnJvbSA9IGdsb2JhbC5BcnJheS5mcm9tO1xuICAgIG9mID0gZ2xvYmFsLkFycmF5Lm9mO1xuICAgIGNvcHlXaXRoaW4gPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuY29weVdpdGhpbik7XG4gICAgZmlsbCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maWxsKTtcbiAgICBmaW5kID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmZpbmQpO1xuICAgIGZpbmRJbmRleCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgpO1xufVxuZWxzZSB7XG4gICAgLy8gSXQgaXMgb25seSBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkvaU9TIHRoYXQgaGF2ZSBhIGJhZCBmaWxsIGltcGxlbWVudGF0aW9uIGFuZCBzbyBhcmVuJ3QgaW4gdGhlIHdpbGRcbiAgICAvLyBUbyBtYWtlIHRoaW5ncyBlYXNpZXIsIGlmIHRoZXJlIGlzIGEgYmFkIGZpbGwgaW1wbGVtZW50YXRpb24sIHRoZSB3aG9sZSBzZXQgb2YgZnVuY3Rpb25zIHdpbGwgYmUgZmlsbGVkXG4gICAgLyoqXG4gICAgICogRW5zdXJlcyBhIG5vbi1uZWdhdGl2ZSwgbm9uLWluZmluaXRlLCBzYWZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgdG8gdmFsaWRhdGVcbiAgICAgKiBAcmV0dXJuIEEgcHJvcGVyIGxlbmd0aFxuICAgICAqL1xuICAgIGNvbnN0IHRvTGVuZ3RoID0gZnVuY3Rpb24gdG9MZW5ndGgobGVuZ3RoKSB7XG4gICAgICAgIGlmIChpc05hTihsZW5ndGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKTtcbiAgICAgICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgICAgICAgIGxlbmd0aCA9IE1hdGguZmxvb3IobGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgYSBub24tbmVnYXRpdmUsIHJlYWwsIHNhZmUgaW50ZWdlclxuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGVuZ3RoLCAwKSwgTUFYX1NBRkVfSU5URUdFUik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGcm9tIEVTNiA3LjEuNCBUb0ludGVnZXIoKVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gY29udmVydFxuICAgICAqIEByZXR1cm4gQW4gaW50ZWdlclxuICAgICAqL1xuICAgIGNvbnN0IHRvSW50ZWdlciA9IGZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMCB8fCAhaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh2YWx1ZSA+IDAgPyAxIDogLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyh2YWx1ZSkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplcyBhbiBvZmZzZXQgYWdhaW5zdCBhIGdpdmVuIGxlbmd0aCwgd3JhcHBpbmcgaXQgaWYgbmVnYXRpdmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIG9yaWdpbmFsIG9mZnNldFxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIHRvdGFsIGxlbmd0aCB0byBub3JtYWxpemUgYWdhaW5zdFxuICAgICAqIEByZXR1cm4gSWYgbmVnYXRpdmUsIHByb3ZpZGUgYSBkaXN0YW5jZSBmcm9tIHRoZSBlbmQgKGxlbmd0aCk7IG90aGVyd2lzZSBwcm92aWRlIGEgZGlzdGFuY2UgZnJvbSAwXG4gICAgICovXG4gICAgY29uc3Qgbm9ybWFsaXplT2Zmc2V0ID0gZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0KHZhbHVlLCBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgMCA/IE1hdGgubWF4KGxlbmd0aCArIHZhbHVlLCAwKSA6IE1hdGgubWluKHZhbHVlLCBsZW5ndGgpO1xuICAgIH07XG4gICAgZnJvbSA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLCBtYXBGdW5jdGlvbiwgdGhpc0FyZykge1xuICAgICAgICBpZiAoYXJyYXlMaWtlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Zyb206IHJlcXVpcmVzIGFuIGFycmF5LWxpa2Ugb2JqZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcEZ1bmN0aW9uICYmIHRoaXNBcmcpIHtcbiAgICAgICAgICAgIG1hcEZ1bmN0aW9uID0gbWFwRnVuY3Rpb24uYmluZCh0aGlzQXJnKTtcbiAgICAgICAgfVxuICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSAqL1xuICAgICAgICBjb25zdCBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKGFycmF5TGlrZS5sZW5ndGgpO1xuICAgICAgICAvLyBTdXBwb3J0IGV4dGVuc2lvblxuICAgICAgICBjb25zdCBhcnJheSA9IHR5cGVvZiBDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdChuZXcgQ29uc3RydWN0b3IobGVuZ3RoKSkgOiBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgaWYgKCFpc0FycmF5TGlrZShhcnJheUxpa2UpICYmICFpc0l0ZXJhYmxlKGFycmF5TGlrZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IGFuZCB0aGUgbm9ybWFsaXplZCBsZW5ndGggaXMgMCwganVzdCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuIHRoaXMgcHJldmVudHMgYSBwcm9ibGVtXG4gICAgICAgIC8vIHdpdGggdGhlIGl0ZXJhdGlvbiBvbiBJRSB3aGVuIHVzaW5nIGEgTmFOIGFycmF5IGxlbmd0aC5cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGFycmF5TGlrZSkpIHtcbiAgICAgICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5TGlrZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gbWFwRnVuY3Rpb24gPyBtYXBGdW5jdGlvbihhcnJheUxpa2VbaV0sIGkpIDogYXJyYXlMaWtlW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhcnJheUxpa2UpIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IG1hcEZ1bmN0aW9uID8gbWFwRnVuY3Rpb24odmFsdWUsIGkpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhcnJheUxpa2UubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFycmF5Lmxlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfTtcbiAgICBvZiA9IGZ1bmN0aW9uIG9mKC4uLml0ZW1zKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpdGVtcyk7XG4gICAgfTtcbiAgICBjb3B5V2l0aGluID0gZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQsIG9mZnNldCwgc3RhcnQsIGVuZCkge1xuICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvcHlXaXRoaW46IHRhcmdldCBtdXN0IGJlIGFuIGFycmF5LWxpa2Ugb2JqZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XG4gICAgICAgIG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldCh0b0ludGVnZXIob2Zmc2V0KSwgbGVuZ3RoKTtcbiAgICAgICAgc3RhcnQgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKHN0YXJ0KSwgbGVuZ3RoKTtcbiAgICAgICAgZW5kID0gbm9ybWFsaXplT2Zmc2V0KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCksIGxlbmd0aCk7XG4gICAgICAgIGxldCBjb3VudCA9IE1hdGgubWluKGVuZCAtIHN0YXJ0LCBsZW5ndGggLSBvZmZzZXQpO1xuICAgICAgICBsZXQgZGlyZWN0aW9uID0gMTtcbiAgICAgICAgaWYgKG9mZnNldCA+IHN0YXJ0ICYmIG9mZnNldCA8IHN0YXJ0ICsgY291bnQpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xO1xuICAgICAgICAgICAgc3RhcnQgKz0gY291bnQgLSAxO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGNvdW50IC0gMTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICBpZiAoc3RhcnQgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W29mZnNldF0gPSB0YXJnZXRbc3RhcnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRhcmdldFtvZmZzZXRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ICs9IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIHN0YXJ0ICs9IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIGNvdW50LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xuICAgIGZpbGwgPSBmdW5jdGlvbiBmaWxsKHRhcmdldCwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XG4gICAgICAgIGxldCBpID0gbm9ybWFsaXplT2Zmc2V0KHRvSW50ZWdlcihzdGFydCksIGxlbmd0aCk7XG4gICAgICAgIGVuZCA9IG5vcm1hbGl6ZU9mZnNldChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpLCBsZW5ndGgpO1xuICAgICAgICB3aGlsZSAoaSA8IGVuZCkge1xuICAgICAgICAgICAgdGFyZ2V0W2krK10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG4gICAgZmluZCA9IGZ1bmN0aW9uIGZpbmQodGFyZ2V0LCBjYWxsYmFjaywgdGhpc0FyZykge1xuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKTtcbiAgICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IHRhcmdldFtpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBmaW5kSW5kZXggPSBmdW5jdGlvbiBmaW5kSW5kZXgodGFyZ2V0LCBjYWxsYmFjaywgdGhpc0FyZykge1xuICAgICAgICBjb25zdCBsZW5ndGggPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZmluZDogc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzQXJnKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpc0FyZyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHRhcmdldFtpXSwgaSwgdGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9O1xufVxuaWYgKHRydWUpIHtcbiAgICBpbmNsdWRlcyA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5pbmNsdWRlcyk7XG59XG5lbHNlIHtcbiAgICAvKipcbiAgICAgKiBFbnN1cmVzIGEgbm9uLW5lZ2F0aXZlLCBub24taW5maW5pdGUsIHNhZmUgaW50ZWdlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciB0byB2YWxpZGF0ZVxuICAgICAqIEByZXR1cm4gQSBwcm9wZXIgbGVuZ3RoXG4gICAgICovXG4gICAgY29uc3QgdG9MZW5ndGggPSBmdW5jdGlvbiB0b0xlbmd0aChsZW5ndGgpIHtcbiAgICAgICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7XG4gICAgICAgIGlmIChpc05hTihsZW5ndGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgICAgICAgbGVuZ3RoID0gTWF0aC5mbG9vcihsZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSBhIG5vbi1uZWdhdGl2ZSwgcmVhbCwgc2FmZSBpbnRlZ2VyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChsZW5ndGgsIDApLCBNQVhfU0FGRV9JTlRFR0VSKTtcbiAgICB9O1xuICAgIGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXModGFyZ2V0LCBzZWFyY2hFbGVtZW50LCBmcm9tSW5kZXggPSAwKSB7XG4gICAgICAgIGxldCBsZW4gPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGZyb21JbmRleDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IHRhcmdldFtpXTtcbiAgICAgICAgICAgIGlmIChzZWFyY2hFbGVtZW50ID09PSBjdXJyZW50RWxlbWVudCB8fFxuICAgICAgICAgICAgICAgIChzZWFyY2hFbGVtZW50ICE9PSBzZWFyY2hFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBjdXJyZW50RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFycmF5Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9hcnJheS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2FycmF5Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImNvbnN0IGdsb2JhbE9iamVjdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIGdsb2JhbCBzcGVjIGRlZmluZXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgY2FsbGVkICdnbG9iYWwnXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxuICAgICAgICAvLyBgZ2xvYmFsYCBpcyBhbHNvIGRlZmluZWQgaW4gTm9kZUpTXG4gICAgICAgIHJldHVybiBnbG9iYWw7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIHdpbmRvdyBpcyBkZWZpbmVkIGluIGJyb3dzZXJzXG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBzZWxmIGlzIGRlZmluZWQgaW4gV2ViV29ya2Vyc1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG59KSgpO1xuZXhwb3J0IGRlZmF1bHQgZ2xvYmFsT2JqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2xvYmFsLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9nbG9iYWwubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9nbG9iYWwubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0ICcuL1N5bWJvbCc7XG5pbXBvcnQgeyBISUdIX1NVUlJPR0FURV9NQVgsIEhJR0hfU1VSUk9HQVRFX01JTiB9IGZyb20gJy4vc3RyaW5nJztcbmNvbnN0IHN0YXRpY0RvbmUgPSB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbi8qKlxuICogQSBjbGFzcyB0aGF0IF9zaGltc18gYW4gaXRlcmF0b3IgaW50ZXJmYWNlIG9uIGFycmF5IGxpa2Ugb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNoaW1JdGVyYXRvciB7XG4gICAgY29uc3RydWN0b3IobGlzdCkge1xuICAgICAgICB0aGlzLl9uZXh0SW5kZXggPSAtMTtcbiAgICAgICAgaWYgKGlzSXRlcmFibGUobGlzdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX25hdGl2ZUl0ZXJhdG9yID0gbGlzdFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ID0gbGlzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIG5leHQgaXRlcmF0aW9uIHJlc3VsdCBmb3IgdGhlIEl0ZXJhdG9yXG4gICAgICovXG4gICAgbmV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX25hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmF0aXZlSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fbGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRpY0RvbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCsrdGhpcy5fbmV4dEluZGV4IDwgdGhpcy5fbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2xpc3RbdGhpcy5fbmV4dEluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGljRG9uZTtcbiAgICB9XG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbi8qKlxuICogQSB0eXBlIGd1YXJkIGZvciBjaGVja2luZyBpZiBzb21ldGhpbmcgaGFzIGFuIEl0ZXJhYmxlIGludGVyZmFjZVxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHlwZSBndWFyZCBhZ2FpbnN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0l0ZXJhYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xufVxuLyoqXG4gKiBBIHR5cGUgZ3VhcmQgZm9yIGNoZWNraW5nIGlmIHNvbWV0aGluZyBpcyBBcnJheUxpa2VcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcic7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIGZvciBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gaXRlcmFibGUgVGhlIGl0ZXJhYmxlIG9iamVjdCB0byByZXR1cm4gdGhlIGl0ZXJhdG9yIGZvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGl0ZXJhYmxlKSB7XG4gICAgaWYgKGlzSXRlcmFibGUoaXRlcmFibGUpKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xuICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcihpdGVyYWJsZSk7XG4gICAgfVxufVxuLyoqXG4gKiBTaGltcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgZm9yIC4uLiBvZmAgYmxvY2tzXG4gKlxuICogQHBhcmFtIGl0ZXJhYmxlIFRoZSBvYmplY3QgdGhlIHByb3ZpZGVzIGFuIGludGVyYXRvciBpbnRlcmZhY2VcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggaXRlbSBvZiB0aGUgaXRlcmFibGVcbiAqIEBwYXJhbSB0aGlzQXJnIE9wdGlvbmFsIHNjb3BlIHRvIHBhc3MgdGhlIGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JPZihpdGVyYWJsZSwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBsZXQgYnJva2VuID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZG9CcmVhaygpIHtcbiAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICB9XG4gICAgLyogV2UgbmVlZCB0byBoYW5kbGUgaXRlcmF0aW9uIG9mIGRvdWJsZSBieXRlIHN0cmluZ3MgcHJvcGVybHkgKi9cbiAgICBpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpICYmIHR5cGVvZiBpdGVyYWJsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbCA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBjaGFyID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICBpZiAoaSArIDEgPCBsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSA+PSBISUdIX1NVUlJPR0FURV9NSU4gJiYgY29kZSA8PSBISUdIX1NVUlJPR0FURV9NQVgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhciArPSBpdGVyYWJsZVsrK2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgY2hhciwgaXRlcmFibGUsIGRvQnJlYWspO1xuICAgICAgICAgICAgaWYgKGJyb2tlbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBnZXQoaXRlcmFibGUpO1xuICAgICAgICBpZiAoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIGl0ZXJhYmxlLCBkb0JyZWFrKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlcmF0b3IubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2l0ZXJhdG9yLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vaXRlcmF0b3IubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG4vKipcbiAqIFRoZSBzbWFsbGVzdCBpbnRlcnZhbCBiZXR3ZWVuIHR3byByZXByZXNlbnRhYmxlIG51bWJlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBFUFNJTE9OID0gMTtcbi8qKlxuICogVGhlIG1heGltdW0gc2FmZSBpbnRlZ2VyIGluIEphdmFTY3JpcHRcbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9TQUZFX0lOVEVHRVIgPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuLyoqXG4gKiBUaGUgbWluaW11bSBzYWZlIGludGVnZXIgaW4gSmF2YVNjcmlwdFxuICovXG5leHBvcnQgY29uc3QgTUlOX1NBRkVfSU5URUdFUiA9IC1NQVhfU0FGRV9JTlRFR0VSO1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBOYU4gd2l0aG91dCBjb2Vyc2lvbi5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgTmFOLCBmYWxzZSBpZiBpdCBpcyBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgZ2xvYmFsLmlzTmFOKHZhbHVlKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgYSBmaW5pdGUgbnVtYmVyIHdpdGhvdXQgY29lcnNpb24uXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIGZpbml0ZSwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zpbml0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGdsb2JhbC5pc0Zpbml0ZSh2YWx1ZSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGFuIGludGVnZXIuXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIsIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGFuIGludGVnZXIgdGhhdCBpcyAnc2FmZSwnIG1lYW5pbmc6XG4gKiAgIDEuIGl0IGNhbiBiZSBleHByZXNzZWQgYXMgYW4gSUVFRS03NTQgZG91YmxlIHByZWNpc2lvbiBudW1iZXJcbiAqICAgMi4gaXQgaGFzIGEgb25lLXRvLW9uZSBtYXBwaW5nIHRvIGEgbWF0aGVtYXRpY2FsIGludGVnZXIsIG1lYW5pbmcgaXRzXG4gKiAgICAgIElFRUUtNzU0IHJlcHJlc2VudGF0aW9uIGNhbm5vdCBiZSB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIGFueSBvdGhlclxuICogICAgICBpbnRlZ2VyIHRvIGZpdCB0aGUgSUVFRS03NTQgcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcih2YWx1ZSkgJiYgTWF0aC5hYnModmFsdWUpIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1udW1iZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL251bWJlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL251bWJlci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgeyBpc1N5bWJvbCB9IGZyb20gJy4vU3ltYm9sJztcbmV4cG9ydCBsZXQgYXNzaWduO1xuLyoqXG4gKiBHZXRzIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdC5cbiAqIEFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGlzIG9uZSB0aGF0IGlzIGRlZmluZWQgZGlyZWN0bHkgb24gdGhlIG9iamVjdCBhbmQgaXMgbm90XG4gKiBpbmhlcml0ZWQgZnJvbSB0aGUgb2JqZWN0J3MgcHJvdG90eXBlLlxuICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnR5LlxuICogQHBhcmFtIHAgTmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0LiBUaGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGFyZSB0aG9zZSB0aGF0IGFyZSBkZWZpbmVkIGRpcmVjdGx5XG4gKiBvbiB0aGF0IG9iamVjdCwgYW5kIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGhlIG9iamVjdCdzIHByb3RvdHlwZS4gVGhlIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGluY2x1ZGUgYm90aCBmaWVsZHMgKG9iamVjdHMpIGFuZCBmdW5jdGlvbnMuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgb3duIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlOYW1lcztcbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3ltYm9sIHByb3BlcnRpZXMgZm91bmQgZGlyZWN0bHkgb24gb2JqZWN0IG8uXG4gKiBAcGFyYW0gbyBPYmplY3QgdG8gcmV0cmlldmUgdGhlIHN5bWJvbHMgZnJvbS5cbiAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQHBhcmFtIHZhbHVlMSBUaGUgZmlyc3QgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWUyIFRoZSBzZWNvbmQgdmFsdWUuXG4gKi9cbmV4cG9ydCBsZXQgaXM7XG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgb2YgYW4gb2JqZWN0LlxuICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuIFRoaXMgY2FuIGJlIGFuIG9iamVjdCB0aGF0IHlvdSBjcmVhdGVkIG9yIGFuIGV4aXN0aW5nIERvY3VtZW50IE9iamVjdCBNb2RlbCAoRE9NKSBvYmplY3QuXG4gKi9cbmV4cG9ydCBsZXQga2V5cztcbi8qIEVTNyBPYmplY3Qgc3RhdGljIG1ldGhvZHMgKi9cbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbmV4cG9ydCBsZXQgZW50cmllcztcbmV4cG9ydCBsZXQgdmFsdWVzO1xuaWYgKHRydWUpIHtcbiAgICBjb25zdCBnbG9iYWxPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuICAgIGFzc2lnbiA9IGdsb2JhbE9iamVjdC5hc3NpZ247XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG4gICAgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiAgICBpcyA9IGdsb2JhbE9iamVjdC5pcztcbiAgICBrZXlzID0gZ2xvYmFsT2JqZWN0LmtleXM7XG59XG5lbHNlIHtcbiAgICBrZXlzID0gZnVuY3Rpb24gc3ltYm9sQXdhcmVLZXlzKG8pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG8pLmZpbHRlcigoa2V5KSA9PiAhQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKTtcbiAgICB9O1xuICAgIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUeXBlRXJyb3IgaWYgdW5kZWZpbmVkIG9yIG51bGxcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvID0gT2JqZWN0KHRhcmdldCk7XG4gICAgICAgIHNvdXJjZXMuZm9yRWFjaCgobmV4dFNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5leHRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIG92ZXIgaWYgdW5kZWZpbmVkIG9yIG51bGxcbiAgICAgICAgICAgICAgICBrZXlzKG5leHRTb3VyY2UpLmZvckVhY2goKG5leHRLZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH07XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApIHtcbiAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBwcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5maWx0ZXIoKGtleSkgPT4gIUJvb2xlYW4oa2V5Lm1hdGNoKC9eQEAuKy8pKSk7XG4gICAgfTtcbiAgICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMobykge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobylcbiAgICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKVxuICAgICAgICAgICAgLm1hcCgoa2V5KSA9PiBTeW1ib2wuZm9yKGtleS5zdWJzdHJpbmcoMikpKTtcbiAgICB9O1xuICAgIGlzID0gZnVuY3Rpb24gaXModmFsdWUxLCB2YWx1ZTIpIHtcbiAgICAgICAgaWYgKHZhbHVlMSA9PT0gdmFsdWUyKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUxICE9PSAwIHx8IDEgLyB2YWx1ZTEgPT09IDEgLyB2YWx1ZTI7IC8vIC0wXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlMSAhPT0gdmFsdWUxICYmIHZhbHVlMiAhPT0gdmFsdWUyOyAvLyBOYU5cbiAgICB9O1xufVxuaWYgKHRydWUpIHtcbiAgICBjb25zdCBnbG9iYWxPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbiAgICBlbnRyaWVzID0gZ2xvYmFsT2JqZWN0LmVudHJpZXM7XG4gICAgdmFsdWVzID0gZ2xvYmFsT2JqZWN0LnZhbHVlcztcbn1cbmVsc2Uge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG8pIHtcbiAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5TmFtZXMobykucmVkdWNlKChwcmV2aW91cywga2V5KSA9PiB7XG4gICAgICAgICAgICBwcmV2aW91c1trZXldID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIGtleSk7XG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9O1xuICAgIGVudHJpZXMgPSBmdW5jdGlvbiBlbnRyaWVzKG8pIHtcbiAgICAgICAgcmV0dXJuIGtleXMobykubWFwKChrZXkpID0+IFtrZXksIG9ba2V5XV0pO1xuICAgIH07XG4gICAgdmFsdWVzID0gZnVuY3Rpb24gdmFsdWVzKG8pIHtcbiAgICAgICAgcmV0dXJuIGtleXMobykubWFwKChrZXkpID0+IG9ba2V5XSk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9iamVjdC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcbmltcG9ydCB7IHdyYXBOYXRpdmUgfSBmcm9tICcuL3N1cHBvcnQvdXRpbCc7XG4vKipcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xuICovXG5leHBvcnQgY29uc3QgSElHSF9TVVJST0dBVEVfTUlOID0gMHhkODAwO1xuLyoqXG4gKiBUaGUgbWF4aW11bSBsb2NhdGlvbiBvZiBoaWdoIHN1cnJvZ2F0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IEhJR0hfU1VSUk9HQVRFX01BWCA9IDB4ZGJmZjtcbi8qKlxuICogVGhlIG1pbmltdW0gbG9jYXRpb24gb2YgbG93IHN1cnJvZ2F0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IExPV19TVVJST0dBVEVfTUlOID0gMHhkYzAwO1xuLyoqXG4gKiBUaGUgbWF4aW11bSBsb2NhdGlvbiBvZiBsb3cgc3Vycm9nYXRlc1xuICovXG5leHBvcnQgY29uc3QgTE9XX1NVUlJPR0FURV9NQVggPSAweGRmZmY7XG4vKiBFUzYgc3RhdGljIG1ldGhvZHMgKi9cbi8qKlxuICogUmV0dXJuIHRoZSBTdHJpbmcgdmFsdWUgd2hvc2UgZWxlbWVudHMgYXJlLCBpbiBvcmRlciwgdGhlIGVsZW1lbnRzIGluIHRoZSBMaXN0IGVsZW1lbnRzLlxuICogSWYgbGVuZ3RoIGlzIDAsIHRoZSBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0gY29kZVBvaW50cyBUaGUgY29kZSBwb2ludHMgdG8gZ2VuZXJhdGUgdGhlIHN0cmluZ1xuICovXG5leHBvcnQgbGV0IGZyb21Db2RlUG9pbnQ7XG4vKipcbiAqIGByYXdgIGlzIGludGVuZGVkIGZvciB1c2UgYXMgYSB0YWcgZnVuY3Rpb24gb2YgYSBUYWdnZWQgVGVtcGxhdGUgU3RyaW5nLiBXaGVuIGNhbGxlZFxuICogYXMgc3VjaCB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhIHdlbGwgZm9ybWVkIHRlbXBsYXRlIGNhbGwgc2l0ZSBvYmplY3QgYW5kIHRoZSByZXN0XG4gKiBwYXJhbWV0ZXIgd2lsbCBjb250YWluIHRoZSBzdWJzdGl0dXRpb24gdmFsdWVzLlxuICogQHBhcmFtIHRlbXBsYXRlIEEgd2VsbC1mb3JtZWQgdGVtcGxhdGUgc3RyaW5nIGNhbGwgc2l0ZSByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSBzdWJzdGl0dXRpb25zIEEgc2V0IG9mIHN1YnN0aXR1dGlvbiB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBsZXQgcmF3O1xuLyogRVM2IGluc3RhbmNlIG1ldGhvZHMgKi9cbi8qKlxuICogUmV0dXJucyBhIG5vbm5lZ2F0aXZlIGludGVnZXIgTnVtYmVyIGxlc3MgdGhhbiAxMTE0MTEyICgweDExMDAwMCkgdGhhdCBpcyB0aGUgY29kZSBwb2ludFxuICogdmFsdWUgb2YgdGhlIFVURi0xNiBlbmNvZGVkIGNvZGUgcG9pbnQgc3RhcnRpbmcgYXQgdGhlIHN0cmluZyBlbGVtZW50IGF0IHBvc2l0aW9uIHBvcyBpblxuICogdGhlIFN0cmluZyByZXN1bHRpbmcgZnJvbSBjb252ZXJ0aW5nIHRoaXMgb2JqZWN0IHRvIGEgU3RyaW5nLlxuICogSWYgdGhlcmUgaXMgbm8gZWxlbWVudCBhdCB0aGF0IHBvc2l0aW9uLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC5cbiAqIElmIGEgdmFsaWQgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyIGRvZXMgbm90IGJlZ2luIGF0IHBvcywgdGhlIHJlc3VsdCBpcyB0aGUgY29kZSB1bml0IGF0IHBvcy5cbiAqL1xuZXhwb3J0IGxldCBjb2RlUG9pbnRBdDtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBvZiBzZWFyY2hTdHJpbmcgY29udmVydGVkIHRvIGEgU3RyaW5nIGlzIHRoZVxuICogc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0aGlzIG9iamVjdCAoY29udmVydGVkIHRvIGEgU3RyaW5nKSBzdGFydGluZyBhdFxuICogZW5kUG9zaXRpb24g4oCTIGxlbmd0aCh0aGlzKS4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gKi9cbmV4cG9ydCBsZXQgZW5kc1dpdGg7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBzZWFyY2hTdHJpbmcgYXBwZWFycyBhcyBhIHN1YnN0cmluZyBvZiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdGhpc1xuICogb2JqZWN0IHRvIGEgU3RyaW5nLCBhdCBvbmUgb3IgbW9yZSBwb3NpdGlvbnMgdGhhdCBhcmVcbiAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBwb3NpdGlvbjsgb3RoZXJ3aXNlLCByZXR1cm5zIGZhbHNlLlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xuICogQHBhcmFtIHNlYXJjaFN0cmluZyBzZWFyY2ggc3RyaW5nXG4gKiBAcGFyYW0gcG9zaXRpb24gSWYgcG9zaXRpb24gaXMgdW5kZWZpbmVkLCAwIGlzIGFzc3VtZWQsIHNvIGFzIHRvIHNlYXJjaCBhbGwgb2YgdGhlIFN0cmluZy5cbiAqL1xuZXhwb3J0IGxldCBpbmNsdWRlcztcbi8qKlxuICogUmV0dXJucyB0aGUgU3RyaW5nIHZhbHVlIHJlc3VsdCBvZiBub3JtYWxpemluZyB0aGUgc3RyaW5nIGludG8gdGhlIG5vcm1hbGl6YXRpb24gZm9ybVxuICogbmFtZWQgYnkgZm9ybSBhcyBzcGVjaWZpZWQgaW4gVW5pY29kZSBTdGFuZGFyZCBBbm5leCAjMTUsIFVuaWNvZGUgTm9ybWFsaXphdGlvbiBGb3Jtcy5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcbiAqIEBwYXJhbSBmb3JtIEFwcGxpY2FibGUgdmFsdWVzOiBcIk5GQ1wiLCBcIk5GRFwiLCBcIk5GS0NcIiwgb3IgXCJORktEXCIsIElmIG5vdCBzcGVjaWZpZWQgZGVmYXVsdFxuICogaXMgXCJORkNcIlxuICovXG5leHBvcnQgbGV0IG5vcm1hbGl6ZTtcbi8qKlxuICogUmV0dXJucyBhIFN0cmluZyB2YWx1ZSB0aGF0IGlzIG1hZGUgZnJvbSBjb3VudCBjb3BpZXMgYXBwZW5kZWQgdG9nZXRoZXIuIElmIGNvdW50IGlzIDAsXG4gKiBUIGlzIHRoZSBlbXB0eSBTdHJpbmcgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0gY291bnQgbnVtYmVyIG9mIGNvcGllcyB0byBhcHBlbmRcbiAqL1xuZXhwb3J0IGxldCByZXBlYXQ7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcbiAqIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhpcyBvYmplY3QgKGNvbnZlcnRlZCB0byBhIFN0cmluZykgc3RhcnRpbmcgYXRcbiAqIHBvc2l0aW9uLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAqL1xuZXhwb3J0IGxldCBzdGFydHNXaXRoO1xuLyogRVM3IGluc3RhbmNlIG1ldGhvZHMgKi9cbi8qKlxuICogUGFkcyB0aGUgY3VycmVudCBzdHJpbmcgd2l0aCBhIGdpdmVuIHN0cmluZyAocG9zc2libHkgcmVwZWF0ZWQpIHNvIHRoYXQgdGhlIHJlc3VsdGluZyBzdHJpbmcgcmVhY2hlcyBhIGdpdmVuIGxlbmd0aC5cbiAqIFRoZSBwYWRkaW5nIGlzIGFwcGxpZWQgZnJvbSB0aGUgZW5kIChyaWdodCkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcbiAqIEBwYXJhbSBtYXhMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBvbmNlIHRoZSBjdXJyZW50IHN0cmluZyBoYXMgYmVlbiBwYWRkZWQuXG4gKiAgICAgICAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHN0cmluZydzIGxlbmd0aCwgdGhlIGN1cnJlbnQgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQgYXMgaXQgaXMuXG4gKlxuICogQHBhcmFtIGZpbGxTdHJpbmcgVGhlIHN0cmluZyB0byBwYWQgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGguXG4gKiAgICAgICAgSWYgdGhpcyBzdHJpbmcgaXMgdG9vIGxvbmcsIGl0IHdpbGwgYmUgdHJ1bmNhdGVkIGFuZCB0aGUgbGVmdC1tb3N0IHBhcnQgd2lsbCBiZSBhcHBsaWVkLlxuICogICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyBcIiBcIiAoVSswMDIwKS5cbiAqL1xuZXhwb3J0IGxldCBwYWRFbmQ7XG4vKipcbiAqIFBhZHMgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGggYSBnaXZlbiBzdHJpbmcgKHBvc3NpYmx5IHJlcGVhdGVkKSBzbyB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIHJlYWNoZXMgYSBnaXZlbiBsZW5ndGguXG4gKiBUaGUgcGFkZGluZyBpcyBhcHBsaWVkIGZyb20gdGhlIHN0YXJ0IChsZWZ0KSBvZiB0aGUgY3VycmVudCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xuICogQHBhcmFtIG1heExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9uY2UgdGhlIGN1cnJlbnQgc3RyaW5nIGhhcyBiZWVuIHBhZGRlZC5cbiAqICAgICAgICBJZiB0aGlzIHBhcmFtZXRlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgc3RyaW5nJ3MgbGVuZ3RoLCB0aGUgY3VycmVudCBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZCBhcyBpdCBpcy5cbiAqXG4gKiBAcGFyYW0gZmlsbFN0cmluZyBUaGUgc3RyaW5nIHRvIHBhZCB0aGUgY3VycmVudCBzdHJpbmcgd2l0aC5cbiAqICAgICAgICBJZiB0aGlzIHN0cmluZyBpcyB0b28gbG9uZywgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYW5kIHRoZSBsZWZ0LW1vc3QgcGFydCB3aWxsIGJlIGFwcGxpZWQuXG4gKiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIFwiIFwiIChVKzAwMjApLlxuICovXG5leHBvcnQgbGV0IHBhZFN0YXJ0O1xuaWYgKHRydWUgJiYgdHJ1ZSkge1xuICAgIGZyb21Db2RlUG9pbnQgPSBnbG9iYWwuU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG4gICAgcmF3ID0gZ2xvYmFsLlN0cmluZy5yYXc7XG4gICAgY29kZVBvaW50QXQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KTtcbiAgICBlbmRzV2l0aCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgpO1xuICAgIGluY2x1ZGVzID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyk7XG4gICAgbm9ybWFsaXplID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5ub3JtYWxpemUpO1xuICAgIHJlcGVhdCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucmVwZWF0KTtcbiAgICBzdGFydHNXaXRoID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKTtcbn1cbmVsc2Uge1xuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyB0aGF0IHRleHQgaXMgZGVmaW5lZCwgYW5kIG5vcm1hbGl6ZXMgcG9zaXRpb24gKGJhc2VkIG9uIHRoZSBnaXZlbiBkZWZhdWx0IGlmIHRoZSBpbnB1dCBpcyBOYU4pLlxuICAgICAqIFVzZWQgYnkgc3RhcnRzV2l0aCwgaW5jbHVkZXMsIGFuZCBlbmRzV2l0aC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gTm9ybWFsaXplZCBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdCBub3JtYWxpemVTdWJzdHJpbmdBcmdzID0gZnVuY3Rpb24gKG5hbWUsIHRleHQsIHNlYXJjaCwgcG9zaXRpb24sIGlzRW5kID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLicgKyBuYW1lICsgJyByZXF1aXJlcyBhIHZhbGlkIHN0cmluZyB0byBzZWFyY2ggYWdhaW5zdC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAhPT0gcG9zaXRpb24gPyAoaXNFbmQgPyBsZW5ndGggOiAwKSA6IHBvc2l0aW9uO1xuICAgICAgICByZXR1cm4gW3RleHQsIFN0cmluZyhzZWFyY2gpLCBNYXRoLm1pbihNYXRoLm1heChwb3NpdGlvbiwgMCksIGxlbmd0aCldO1xuICAgIH07XG4gICAgZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cykge1xuICAgICAgICAvLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLmZyb21Db2RlUG9pbnRcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICAgICAgICBjb25zdCBNQVhfU0laRSA9IDB4NDAwMDtcbiAgICAgICAgbGV0IGNvZGVVbml0cyA9IFtdO1xuICAgICAgICBsZXQgaW5kZXggPSAtMTtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGNvZGVQb2ludCA9IE51bWJlcihhcmd1bWVudHNbaW5kZXhdKTtcbiAgICAgICAgICAgIC8vIENvZGUgcG9pbnRzIG11c3QgYmUgZmluaXRlIGludGVnZXJzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2VcbiAgICAgICAgICAgIGxldCBpc1ZhbGlkID0gaXNGaW5pdGUoY29kZVBvaW50KSAmJiBNYXRoLmZsb29yKGNvZGVQb2ludCkgPT09IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPj0gMCAmJiBjb2RlUG9pbnQgPD0gMHgxMGZmZmY7XG4gICAgICAgICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdzdHJpbmcuZnJvbUNvZGVQb2ludDogSW52YWxpZCBjb2RlIHBvaW50ICcgKyBjb2RlUG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweGZmZmYpIHtcbiAgICAgICAgICAgICAgICAvLyBCTVAgY29kZSBwb2ludFxuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW4gc3Vycm9nYXRlIGhhbHZlc1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuICAgICAgICAgICAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwO1xuICAgICAgICAgICAgICAgIGxldCBoaWdoU3Vycm9nYXRlID0gKGNvZGVQb2ludCA+PiAxMCkgKyBISUdIX1NVUlJPR0FURV9NSU47XG4gICAgICAgICAgICAgICAgbGV0IGxvd1N1cnJvZ2F0ZSA9IGNvZGVQb2ludCAlIDB4NDAwICsgTE9XX1NVUlJPR0FURV9NSU47XG4gICAgICAgICAgICAgICAgY29kZVVuaXRzLnB1c2goaGlnaFN1cnJvZ2F0ZSwgbG93U3Vycm9nYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmRleCArIDEgPT09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cyk7XG4gICAgICAgICAgICAgICAgY29kZVVuaXRzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIHJhdyA9IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucykge1xuICAgICAgICBsZXQgcmF3U3RyaW5ncyA9IGNhbGxTaXRlLnJhdztcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBsZXQgbnVtU3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnMubGVuZ3RoO1xuICAgICAgICBpZiAoY2FsbFNpdGUgPT0gbnVsbCB8fCBjYWxsU2l0ZS5yYXcgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJhdyByZXF1aXJlcyBhIHZhbGlkIGNhbGxTaXRlIG9iamVjdCB3aXRoIGEgcmF3IHZhbHVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IHJhd1N0cmluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSByYXdTdHJpbmdzW2ldICsgKGkgPCBudW1TdWJzdGl0dXRpb25zICYmIGkgPCBsZW5ndGggLSAxID8gc3Vic3RpdHV0aW9uc1tpXSA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29kZVBvaW50QXQgPSBmdW5jdGlvbiBjb2RlUG9pbnRBdCh0ZXh0LCBwb3NpdGlvbiA9IDApIHtcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLmNvZGVQb2ludEF0IHJlcXVyaWVzIGEgdmFsaWQgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRleHQubGVuZ3RoO1xuICAgICAgICBpZiAocG9zaXRpb24gIT09IHBvc2l0aW9uKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR2V0IHRoZSBmaXJzdCBjb2RlIHVuaXRcbiAgICAgICAgY29uc3QgZmlyc3QgPSB0ZXh0LmNoYXJDb2RlQXQocG9zaXRpb24pO1xuICAgICAgICBpZiAoZmlyc3QgPj0gSElHSF9TVVJST0dBVEVfTUlOICYmIGZpcnN0IDw9IEhJR0hfU1VSUk9HQVRFX01BWCAmJiBsZW5ndGggPiBwb3NpdGlvbiArIDEpIHtcbiAgICAgICAgICAgIC8vIFN0YXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIgKGhpZ2ggc3Vycm9nYXRlIGFuZCB0aGVyZSBpcyBhIG5leHQgY29kZSB1bml0KTsgY2hlY2sgZm9yIGxvdyBzdXJyb2dhdGVcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSk7XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IExPV19TVVJST0dBVEVfTUlOICYmIHNlY29uZCA8PSBMT1dfU1VSUk9HQVRFX01BWCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoZmlyc3QgLSBISUdIX1NVUlJPR0FURV9NSU4pICogMHg0MDAgKyBzZWNvbmQgLSBMT1dfU1VSUk9HQVRFX01JTiArIDB4MTAwMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0O1xuICAgIH07XG4gICAgZW5kc1dpdGggPSBmdW5jdGlvbiBlbmRzV2l0aCh0ZXh0LCBzZWFyY2gsIGVuZFBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChlbmRQb3NpdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHRleHQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIFt0ZXh0LCBzZWFyY2gsIGVuZFBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ2VuZHNXaXRoJywgdGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZW5kUG9zaXRpb24gLSBzZWFyY2gubGVuZ3RoO1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2Uoc3RhcnQsIGVuZFBvc2l0aW9uKSA9PT0gc2VhcmNoO1xuICAgIH07XG4gICAgaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uID0gMCkge1xuICAgICAgICBbdGV4dCwgc2VhcmNoLCBwb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdpbmNsdWRlcycsIHRleHQsIHNlYXJjaCwgcG9zaXRpb24pO1xuICAgICAgICByZXR1cm4gdGV4dC5pbmRleE9mKHNlYXJjaCwgcG9zaXRpb24pICE9PSAtMTtcbiAgICB9O1xuICAgIHJlcGVhdCA9IGZ1bmN0aW9uIHJlcGVhdCh0ZXh0LCBjb3VudCA9IDApIHtcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUucmVwZWF0XG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50ICE9PSBjb3VudCkge1xuICAgICAgICAgICAgY291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICB3aGlsZSAoY291bnQpIHtcbiAgICAgICAgICAgIGlmIChjb3VudCAlIDIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gdGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ICs9IHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3VudCA+Pj0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIHN0YXJ0c1dpdGgodGV4dCwgc2VhcmNoLCBwb3NpdGlvbiA9IDApIHtcbiAgICAgICAgc2VhcmNoID0gU3RyaW5nKHNlYXJjaCk7XG4gICAgICAgIFt0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ3N0YXJ0c1dpdGgnLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgZW5kID0gcG9zaXRpb24gKyBzZWFyY2gubGVuZ3RoO1xuICAgICAgICBpZiAoZW5kID4gdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dC5zbGljZShwb3NpdGlvbiwgZW5kKSA9PT0gc2VhcmNoO1xuICAgIH07XG59XG5pZiAodHJ1ZSkge1xuICAgIHBhZEVuZCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucGFkRW5kKTtcbiAgICBwYWRTdGFydCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQpO1xufVxuZWxzZSB7XG4gICAgcGFkRW5kID0gZnVuY3Rpb24gcGFkRW5kKHRleHQsIG1heExlbmd0aCwgZmlsbFN0cmluZyA9ICcgJykge1xuICAgICAgICBpZiAodGV4dCA9PT0gbnVsbCB8fCB0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdHJpbmcucGFkRW5kIHJlcXVpcmVzIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSBjb3VudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSBudWxsIHx8IG1heExlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IG1heExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIG1heExlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0clRleHQgPSBTdHJpbmcodGV4dCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBtYXhMZW5ndGggLSBzdHJUZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHBhZGRpbmcgPiAwKSB7XG4gICAgICAgICAgICBzdHJUZXh0ICs9XG4gICAgICAgICAgICAgICAgcmVwZWF0KGZpbGxTdHJpbmcsIE1hdGguZmxvb3IocGFkZGluZyAvIGZpbGxTdHJpbmcubGVuZ3RoKSkgK1xuICAgICAgICAgICAgICAgICAgICBmaWxsU3RyaW5nLnNsaWNlKDAsIHBhZGRpbmcgJSBmaWxsU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0clRleHQ7XG4gICAgfTtcbiAgICBwYWRTdGFydCA9IGZ1bmN0aW9uIHBhZFN0YXJ0KHRleHQsIG1heExlbmd0aCwgZmlsbFN0cmluZyA9ICcgJykge1xuICAgICAgICBpZiAodGV4dCA9PT0gbnVsbCB8fCB0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdHJpbmcucGFkU3RhcnQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IG51bGwgfHwgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbWF4TGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgbWF4TGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RyVGV4dCA9IFN0cmluZyh0ZXh0KTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IG1heExlbmd0aCAtIHN0clRleHQubGVuZ3RoO1xuICAgICAgICBpZiAocGFkZGluZyA+IDApIHtcbiAgICAgICAgICAgIHN0clRleHQgPVxuICAgICAgICAgICAgICAgIHJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0cmluZy5zbGljZSgwLCBwYWRkaW5nICUgZmlsbFN0cmluZy5sZW5ndGgpICtcbiAgICAgICAgICAgICAgICAgICAgc3RyVGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyVGV4dDtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RyaW5nLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdHJpbmcubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdHJpbmcubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IGhhcywgeyBhZGQgfSBmcm9tICcuLi8uLi9oYXMvaGFzJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi4vZ2xvYmFsJztcbmV4cG9ydCBkZWZhdWx0IGhhcztcbmV4cG9ydCAqIGZyb20gJy4uLy4uL2hhcy9oYXMnO1xuLyogRUNNQVNjcmlwdCA2IGFuZCA3IEZlYXR1cmVzICovXG4vKiBBcnJheSAqL1xuYWRkKCdlczYtYXJyYXknLCAoKSA9PiB7XG4gICAgcmV0dXJuIChbJ2Zyb20nLCAnb2YnXS5ldmVyeSgoa2V5KSA9PiBrZXkgaW4gZ2xvYmFsLkFycmF5KSAmJlxuICAgICAgICBbJ2ZpbmRJbmRleCcsICdmaW5kJywgJ2NvcHlXaXRoaW4nXS5ldmVyeSgoa2V5KSA9PiBrZXkgaW4gZ2xvYmFsLkFycmF5LnByb3RvdHlwZSkpO1xufSwgdHJ1ZSk7XG5hZGQoJ2VzNi1hcnJheS1maWxsJywgKCkgPT4ge1xuICAgIGlmICgnZmlsbCcgaW4gZ2xvYmFsLkFycmF5LnByb3RvdHlwZSkge1xuICAgICAgICAvKiBTb21lIHZlcnNpb25zIG9mIFNhZmFyaSBkbyBub3QgcHJvcGVybHkgaW1wbGVtZW50IHRoaXMgKi9cbiAgICAgICAgcmV0dXJuIFsxXS5maWxsKDksIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSlbMF0gPT09IDE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn0sIHRydWUpO1xuYWRkKCdlczctYXJyYXknLCAoKSA9PiAnaW5jbHVkZXMnIGluIGdsb2JhbC5BcnJheS5wcm90b3R5cGUsIHRydWUpO1xuLyogTWFwICovXG5hZGQoJ2VzNi1tYXAnLCAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuTWFwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8qXG4gICAgSUUxMSBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIGFyZSBtaXNzaW5nIGNyaXRpY2FsIEVTNiBNYXAgZnVuY3Rpb25hbGl0eVxuICAgIFdlIHdyYXAgdGhpcyBpbiBhIHRyeS9jYXRjaCBiZWNhdXNlIHNvbWV0aW1lcyB0aGUgTWFwIGNvbnN0cnVjdG9yIGV4aXN0cywgYnV0IGRvZXMgbm90XG4gICAgdGFrZSBhcmd1bWVudHMgKGlPUyA4LjQpXG4gICAgICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtYXAgPSBuZXcgZ2xvYmFsLk1hcChbWzAsIDFdXSk7XG4gICAgICAgICAgICByZXR1cm4gbWFwLmhhcygwKSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXAua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHRydWUgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWFwLnZhbHVlcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXAuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IG5vdCB0ZXN0aW5nIG9uIGlPUyBhdCB0aGUgbW9tZW50ICovXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufSwgdHJ1ZSk7XG4vKiBNYXRoICovXG5hZGQoJ2VzNi1tYXRoJywgKCkgPT4ge1xuICAgIHJldHVybiBbXG4gICAgICAgICdjbHozMicsXG4gICAgICAgICdzaWduJyxcbiAgICAgICAgJ2xvZzEwJyxcbiAgICAgICAgJ2xvZzInLFxuICAgICAgICAnbG9nMXAnLFxuICAgICAgICAnZXhwbTEnLFxuICAgICAgICAnY29zaCcsXG4gICAgICAgICdzaW5oJyxcbiAgICAgICAgJ3RhbmgnLFxuICAgICAgICAnYWNvc2gnLFxuICAgICAgICAnYXNpbmgnLFxuICAgICAgICAnYXRhbmgnLFxuICAgICAgICAndHJ1bmMnLFxuICAgICAgICAnZnJvdW5kJyxcbiAgICAgICAgJ2NicnQnLFxuICAgICAgICAnaHlwb3QnXG4gICAgXS5ldmVyeSgobmFtZSkgPT4gdHlwZW9mIGdsb2JhbC5NYXRoW25hbWVdID09PSAnZnVuY3Rpb24nKTtcbn0sIHRydWUpO1xuYWRkKCdlczYtbWF0aC1pbXVsJywgKCkgPT4ge1xuICAgIGlmICgnaW11bCcgaW4gZ2xvYmFsLk1hdGgpIHtcbiAgICAgICAgLyogU29tZSB2ZXJzaW9ucyBvZiBTYWZhcmkgb24gaW9zIGRvIG5vdCBwcm9wZXJseSBpbXBsZW1lbnQgdGhpcyAqL1xuICAgICAgICByZXR1cm4gTWF0aC5pbXVsKDB4ZmZmZmZmZmYsIDUpID09PSAtNTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufSwgdHJ1ZSk7XG4vKiBPYmplY3QgKi9cbmFkZCgnZXM2LW9iamVjdCcsICgpID0+IHtcbiAgICByZXR1cm4gdHJ1ZSAmJlxuICAgICAgICBbJ2Fzc2lnbicsICdpcycsICdnZXRPd25Qcm9wZXJ0eVN5bWJvbHMnLCAnc2V0UHJvdG90eXBlT2YnXS5ldmVyeSgobmFtZSkgPT4gdHlwZW9mIGdsb2JhbC5PYmplY3RbbmFtZV0gPT09ICdmdW5jdGlvbicpO1xufSwgdHJ1ZSk7XG5hZGQoJ2VzMjAxNy1vYmplY3QnLCAoKSA9PiB7XG4gICAgcmV0dXJuIFsndmFsdWVzJywgJ2VudHJpZXMnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyddLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgZ2xvYmFsLk9iamVjdFtuYW1lXSA9PT0gJ2Z1bmN0aW9uJyk7XG59LCB0cnVlKTtcbi8qIE9ic2VydmFibGUgKi9cbmFkZCgnZXMtb2JzZXJ2YWJsZScsICgpID0+IHR5cGVvZiBnbG9iYWwuT2JzZXJ2YWJsZSAhPT0gJ3VuZGVmaW5lZCcsIHRydWUpO1xuLyogUHJvbWlzZSAqL1xuYWRkKCdlczYtcHJvbWlzZScsICgpID0+IHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHJ1ZSwgdHJ1ZSk7XG4vKiBTZXQgKi9cbmFkZCgnZXM2LXNldCcsICgpID0+IHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5TZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLyogSUUxMSBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIGFyZSBtaXNzaW5nIGNyaXRpY2FsIEVTNiBTZXQgZnVuY3Rpb25hbGl0eSAqL1xuICAgICAgICBjb25zdCBzZXQgPSBuZXcgZ2xvYmFsLlNldChbMV0pO1xuICAgICAgICByZXR1cm4gc2V0LmhhcygxKSAmJiAna2V5cycgaW4gc2V0ICYmIHR5cGVvZiBzZXQua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59LCB0cnVlKTtcbi8qIFN0cmluZyAqL1xuYWRkKCdlczYtc3RyaW5nJywgKCkgPT4ge1xuICAgIHJldHVybiAoW1xuICAgICAgICAvKiBzdGF0aWMgbWV0aG9kcyAqL1xuICAgICAgICAnZnJvbUNvZGVQb2ludCdcbiAgICBdLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nW2tleV0gPT09ICdmdW5jdGlvbicpICYmXG4gICAgICAgIFtcbiAgICAgICAgICAgIC8qIGluc3RhbmNlIG1ldGhvZHMgKi9cbiAgICAgICAgICAgICdjb2RlUG9pbnRBdCcsXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgICdyZXBlYXQnLFxuICAgICAgICAgICAgJ3N0YXJ0c1dpdGgnLFxuICAgICAgICAgICAgJ2VuZHNXaXRoJyxcbiAgICAgICAgICAgICdpbmNsdWRlcydcbiAgICAgICAgXS5ldmVyeSgoa2V5KSA9PiB0eXBlb2YgZ2xvYmFsLlN0cmluZy5wcm90b3R5cGVba2V5XSA9PT0gJ2Z1bmN0aW9uJykpO1xufSwgdHJ1ZSk7XG5hZGQoJ2VzNi1zdHJpbmctcmF3JywgKCkgPT4ge1xuICAgIGZ1bmN0aW9uIGdldENhbGxTaXRlKGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5jYWxsU2l0ZV07XG4gICAgICAgIHJlc3VsdC5yYXcgPSBjYWxsU2l0ZS5yYXc7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICgncmF3JyBpbiBnbG9iYWwuU3RyaW5nKSB7XG4gICAgICAgIGxldCBiID0gMTtcbiAgICAgICAgbGV0IGNhbGxTaXRlID0gZ2V0Q2FsbFNpdGUgYGFcXG4ke2J9YDtcbiAgICAgICAgY2FsbFNpdGUucmF3ID0gWydhXFxcXG4nXTtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNUcnVuYyA9IGdsb2JhbC5TdHJpbmcucmF3KGNhbGxTaXRlLCA0MikgPT09ICdhOlxcXFxuJztcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzVHJ1bmM7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn0sIHRydWUpO1xuYWRkKCdlczIwMTctc3RyaW5nJywgKCkgPT4ge1xuICAgIHJldHVybiBbJ3BhZFN0YXJ0JywgJ3BhZEVuZCddLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nLnByb3RvdHlwZVtrZXldID09PSAnZnVuY3Rpb24nKTtcbn0sIHRydWUpO1xuLyogU3ltYm9sICovXG5hZGQoJ2VzNi1zeW1ib2wnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLlN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbCgpID09PSAnc3ltYm9sJywgdHJ1ZSk7XG4vKiBXZWFrTWFwICovXG5hZGQoJ2VzNi13ZWFrbWFwJywgKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsLldlYWtNYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8qIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgTWFwIGZ1bmN0aW9uYWxpdHkgKi9cbiAgICAgICAgY29uc3Qga2V5MSA9IHt9O1xuICAgICAgICBjb25zdCBrZXkyID0ge307XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBnbG9iYWwuV2Vha01hcChbW2tleTEsIDFdXSk7XG4gICAgICAgIE9iamVjdC5mcmVlemUoa2V5MSk7XG4gICAgICAgIHJldHVybiBtYXAuZ2V0KGtleTEpID09PSAxICYmIG1hcC5zZXQoa2V5MiwgMikgPT09IG1hcCAmJiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59LCB0cnVlKTtcbi8qIE1pc2NlbGxhbmVvdXMgZmVhdHVyZXMgKi9cbmFkZCgnbWljcm90YXNrcycsICgpID0+IHRydWUgfHwgZmFsc2UgfHwgdHJ1ZSwgdHJ1ZSk7XG5hZGQoJ3Bvc3RtZXNzYWdlJywgKCkgPT4ge1xuICAgIC8vIElmIHdpbmRvdyBpcyB1bmRlZmluZWQsIGFuZCB3ZSBoYXZlIHBvc3RNZXNzYWdlLCBpdCBwcm9iYWJseSBtZWFucyB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIuIFdlYiB3b3JrZXJzIGhhdmVcbiAgICAvLyBwb3N0IG1lc3NhZ2UgYnV0IGl0IGRvZXNuJ3Qgd29yayBob3cgd2UgZXhwZWN0IGl0IHRvLCBzbyBpdCdzIGJlc3QganVzdCB0byBwcmV0ZW5kIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgcmV0dXJuIHR5cGVvZiBnbG9iYWwud2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZ2xvYmFsLnBvc3RNZXNzYWdlID09PSAnZnVuY3Rpb24nO1xufSwgdHJ1ZSk7XG5hZGQoJ3JhZicsICgpID0+IHR5cGVvZiBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nLCB0cnVlKTtcbmFkZCgnc2V0aW1tZWRpYXRlJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5zZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnLCB0cnVlKTtcbi8qIERPTSBGZWF0dXJlcyAqL1xuYWRkKCdkb20tbXV0YXRpb25vYnNlcnZlcicsICgpID0+IHtcbiAgICBpZiAodHJ1ZSAmJiBCb29sZWFuKGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyKSkge1xuICAgICAgICAvLyBJRTExIGhhcyBhbiB1bnJlbGlhYmxlIE11dGF0aW9uT2JzZXJ2ZXIgaW1wbGVtZW50YXRpb24gd2hlcmUgc2V0UHJvcGVydHkoKSBkb2VzIG5vdFxuICAgICAgICAvLyBnZW5lcmF0ZSBhIG11dGF0aW9uIGV2ZW50LCBvYnNlcnZlcnMgY2FuIGNyYXNoLCBhbmQgdGhlIHF1ZXVlIGRvZXMgbm90IGRyYWluXG4gICAgICAgIC8vIHJlbGlhYmx5LiBUaGUgZm9sbG93aW5nIGZlYXR1cmUgdGVzdCB3YXMgYWRhcHRlZCBmcm9tXG4gICAgICAgIC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3QxMGtvLzRhY2ViOGM3MTY4MWZkYjI3NWUzM2VmZTVlNTc2YjE0XG4gICAgICAgIGNvbnN0IGV4YW1wbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cbiAgICAgICAgY29uc3QgSG9zdE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSG9zdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgeyB9KTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShleGFtcGxlLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7XG4gICAgICAgIGV4YW1wbGUuc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob2JzZXJ2ZXIudGFrZVJlY29yZHMoKS5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59LCB0cnVlKTtcbmFkZCgnZG9tLXdlYmFuaW1hdGlvbicsICgpID0+IHRydWUgJiYgZ2xvYmFsLkFuaW1hdGlvbiAhPT0gdW5kZWZpbmVkICYmIGdsb2JhbC5LZXlmcmFtZUVmZmVjdCAhPT0gdW5kZWZpbmVkLCB0cnVlKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhcy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC9oYXMubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L2hhcy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4uL2dsb2JhbCc7XG5pbXBvcnQgaGFzIGZyb20gJy4vaGFzJztcbmZ1bmN0aW9uIGV4ZWN1dGVUYXNrKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSAmJiBpdGVtLmlzQWN0aXZlICYmIGl0ZW0uY2FsbGJhY2spIHtcbiAgICAgICAgaXRlbS5jYWxsYmFjaygpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFF1ZXVlSGFuZGxlKGl0ZW0sIGRlc3RydWN0b3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgICAgICBpdGVtLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICBpdGVtLmNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChkZXN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbmxldCBjaGVja01pY3JvVGFza1F1ZXVlO1xubGV0IG1pY3JvVGFza3M7XG4vKipcbiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIHRoZSBtYWNyb3Rhc2sgcXVldWUuXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXVlVGFzayA9IChmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGRlc3RydWN0b3I7XG4gICAgbGV0IGVucXVldWU7XG4gICAgLy8gU2luY2UgdGhlIElFIGltcGxlbWVudGF0aW9uIG9mIGBzZXRJbW1lZGlhdGVgIGlzIG5vdCBmbGF3bGVzcywgd2Ugd2lsbCB0ZXN0IGZvciBgcG9zdE1lc3NhZ2VgIGZpcnN0LlxuICAgIGlmICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gW107XG4gICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAvLyBDb25maXJtIHRoYXQgdGhlIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGN1cnJlbnQgd2luZG93IGFuZCBieSB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiYgZXZlbnQuZGF0YSA9PT0gJ2Rvam8tcXVldWUtbWVzc2FnZScpIHtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVUYXNrKHF1ZXVlLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcXVldWUucHVzaChpdGVtKTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZSgnZG9qby1xdWV1ZS1tZXNzYWdlJywgJyonKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZmFsc2UpIHtcbiAgICAgICAgZGVzdHJ1Y3RvciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SW1tZWRpYXRlKGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSkpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGVzdHJ1Y3RvciA9IGdsb2JhbC5jbGVhclRpbWVvdXQ7XG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSwgMCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHF1ZXVlVGFzayhjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaWQgPSBlbnF1ZXVlKGl0ZW0pO1xuICAgICAgICByZXR1cm4gZ2V0UXVldWVIYW5kbGUoaXRlbSwgZGVzdHJ1Y3RvciAmJlxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRlc3RydWN0b3IoaWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxuICAgIHJldHVybiB0cnVlXG4gICAgICAgID8gcXVldWVUYXNrXG4gICAgICAgIDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjaGVja01pY3JvVGFza1F1ZXVlKCk7XG4gICAgICAgICAgICByZXR1cm4gcXVldWVUYXNrKGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbn0pKCk7XG4vLyBXaGVuIG5vIG1lY2hhbmlzbSBmb3IgcmVnaXN0ZXJpbmcgbWljcm90YXNrcyBpcyBleHBvc2VkIGJ5IHRoZSBlbnZpcm9ubWVudCwgbWljcm90YXNrcyB3aWxsXG4vLyBiZSBxdWV1ZWQgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYSBzaW5nbGUgbWFjcm90YXNrIGJlZm9yZSB0aGUgb3RoZXIgbWFjcm90YXNrcyBhcmUgZXhlY3V0ZWQuXG5pZiAoIXRydWUpIHtcbiAgICBsZXQgaXNNaWNyb1Rhc2tRdWV1ZWQgPSBmYWxzZTtcbiAgICBtaWNyb1Rhc2tzID0gW107XG4gICAgY2hlY2tNaWNyb1Rhc2tRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFpc01pY3JvVGFza1F1ZXVlZCkge1xuICAgICAgICAgICAgaXNNaWNyb1Rhc2tRdWV1ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpc01pY3JvVGFza1F1ZXVlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChtaWNyb1Rhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChpdGVtID0gbWljcm9UYXNrcy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVRhc2soaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIFNjaGVkdWxlcyBhbiBhbmltYXRpb24gdGFzayB3aXRoIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpZiBpdCBleGlzdHMsIG9yIHdpdGggYHF1ZXVlVGFza2Agb3RoZXJ3aXNlLlxuICpcbiAqIFNpbmNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSdzIGJlaGF2aW9yIGRvZXMgbm90IG1hdGNoIHRoYXQgZXhwZWN0ZWQgZnJvbSBgcXVldWVUYXNrYCwgaXQgaXMgbm90IHVzZWQgdGhlcmUuXG4gKiBIb3dldmVyLCBhdCB0aW1lcyBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGRlbGVnYXRlIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZTsgaGVuY2UgdGhlIGZvbGxvd2luZyBtZXRob2QuXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXVlQW5pbWF0aW9uVGFzayA9IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0cnVlKSB7XG4gICAgICAgIHJldHVybiBxdWV1ZVRhc2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHF1ZXVlQW5pbWF0aW9uVGFzayhjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSk7XG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBUT0RPOiBVc2UgYXNwZWN0LmJlZm9yZSB3aGVuIGl0IGlzIGF2YWlsYWJsZS5cbiAgICByZXR1cm4gdHJ1ZVxuICAgICAgICA/IHF1ZXVlQW5pbWF0aW9uVGFza1xuICAgICAgICA6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgY2hlY2tNaWNyb1Rhc2tRdWV1ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXVlQW5pbWF0aW9uVGFzayhjYWxsYmFjayk7XG4gICAgICAgIH07XG59KSgpO1xuLyoqXG4gKiBTY2hlZHVsZXMgYSBjYWxsYmFjayB0byB0aGUgbWljcm90YXNrIHF1ZXVlLlxuICpcbiAqIEFueSBjYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIGBxdWV1ZU1pY3JvVGFza2Agd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIG5leHQgbWFjcm90YXNrLiBJZiBubyBuYXRpdmVcbiAqIG1lY2hhbmlzbSBmb3Igc2NoZWR1bGluZyBtYWNyb3Rhc2tzIGlzIGV4cG9zZWQsIHRoZW4gYW55IGNhbGxiYWNrcyB3aWxsIGJlIGZpcmVkIGJlZm9yZSBhbnkgbWFjcm90YXNrXG4gKiByZWdpc3RlcmVkIHdpdGggYHF1ZXVlVGFza2Agb3IgYHF1ZXVlQW5pbWF0aW9uVGFza2AuXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cbiAqL1xuZXhwb3J0IGxldCBxdWV1ZU1pY3JvVGFzayA9IChmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGVucXVldWU7XG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2soZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHRydWUpIHtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBnbG9iYWwuUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4oZXhlY3V0ZVRhc2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh0cnVlKSB7XG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXG4gICAgICAgIGNvbnN0IEhvc3RNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgY29uc3QgcXVldWUgPSBbXTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSG9zdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmlzQWN0aXZlICYmIGl0ZW0uY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goaXRlbSk7XG4gICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgncXVldWVTdGF0dXMnLCAnMScpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBjaGVja01pY3JvVGFza1F1ZXVlKCk7XG4gICAgICAgICAgICBtaWNyb1Rhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHtcbiAgICAgICAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gICAgICAgIH07XG4gICAgICAgIGVucXVldWUoaXRlbSk7XG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtKTtcbiAgICB9O1xufSkoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXF1ZXVlLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L3F1ZXVlLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC9xdWV1ZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCIvKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHZhbHVlIHByb3BlcnR5IGRlc2NyaXB0b3JcbiAqXG4gKiBAcGFyYW0gdmFsdWUgICAgICAgIFRoZSB2YWx1ZSB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBzaG91bGQgYmUgc2V0IHRvXG4gKiBAcGFyYW0gZW51bWVyYWJsZSAgIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgZW51bWJlcmFibGUsIGRlZmF1bHRzIHRvIGZhbHNlXG4gKiBAcGFyYW0gd3JpdGFibGUgICAgIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgd3JpdGFibGUsIGRlZmF1bHRzIHRvIHRydWVcbiAqIEBwYXJhbSBjb25maWd1cmFibGUgSWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBjb25maWd1cmFibGUsIGRlZmF1bHRzIHRvIHRydWVcbiAqIEByZXR1cm4gICAgICAgICAgICAgVGhlIHByb3BlcnR5IGRlc2NyaXB0b3Igb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZURlc2NyaXB0b3IodmFsdWUsIGVudW1lcmFibGUgPSBmYWxzZSwgd3JpdGFibGUgPSB0cnVlLCBjb25maWd1cmFibGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiBlbnVtZXJhYmxlLFxuICAgICAgICB3cml0YWJsZTogd3JpdGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogY29uZmlndXJhYmxlXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTmF0aXZlKG5hdGl2ZUZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9uLmFwcGx5KHRhcmdldCwgYXJncyk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvdXRpbC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvdXRpbC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnLi4vY29yZS9FdmVudGVkJztcbmV4cG9ydCBjbGFzcyBJbmplY3RvciBleHRlbmRzIEV2ZW50ZWQge1xuICAgIGNvbnN0cnVjdG9yKHBheWxvYWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgfVxuICAgIHNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKSB7XG4gICAgICAgIHRoaXMuX2ludmFsaWRhdG9yID0gaW52YWxpZGF0b3I7XG4gICAgfVxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BheWxvYWQ7XG4gICAgfVxuICAgIHNldChwYXlsb2FkKSB7XG4gICAgICAgIHRoaXMuX3BheWxvYWQgPSBwYXlsb2FkO1xuICAgICAgICBpZiAodGhpcy5faW52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2ludmFsaWRhdG9yKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBJbmplY3Rvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUluamVjdG9yLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvSW5qZWN0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvSW5qZWN0b3IubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJy4uL2NvcmUvRXZlbnRlZCc7XG5pbXBvcnQgTWFwIGZyb20gJy4uL3NoaW0vTWFwJztcbi8qKlxuICogRW51bSB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiBldmVudC5cbiAqIExpc3RlbmluZyB0byAnUHJvamVjdG9yJyB3aWxsIG5vdGlmeSB3aGVuIHByb2plY3RvciBpcyBjcmVhdGVkIG9yIHVwZGF0ZWRcbiAqIExpc3RlbmluZyB0byAnV2lkZ2V0JyB3aWxsIG5vdGlmeSB3aGVuIHdpZGdldCByb290IGlzIGNyZWF0ZWQgb3IgdXBkYXRlZFxuICovXG5leHBvcnQgdmFyIE5vZGVFdmVudFR5cGU7XG4oZnVuY3Rpb24gKE5vZGVFdmVudFR5cGUpIHtcbiAgICBOb2RlRXZlbnRUeXBlW1wiUHJvamVjdG9yXCJdID0gXCJQcm9qZWN0b3JcIjtcbiAgICBOb2RlRXZlbnRUeXBlW1wiV2lkZ2V0XCJdID0gXCJXaWRnZXRcIjtcbn0pKE5vZGVFdmVudFR5cGUgfHwgKE5vZGVFdmVudFR5cGUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIE5vZGVIYW5kbGVyIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX25vZGVNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGdldChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVNYXAuZ2V0KGtleSk7XG4gICAgfVxuICAgIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVNYXAuaGFzKGtleSk7XG4gICAgfVxuICAgIGFkZChlbGVtZW50LCBrZXkpIHtcbiAgICAgICAgdGhpcy5fbm9kZU1hcC5zZXQoa2V5LCBlbGVtZW50KTtcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZToga2V5IH0pO1xuICAgIH1cbiAgICBhZGRSb290KCkge1xuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLldpZGdldCB9KTtcbiAgICB9XG4gICAgYWRkUHJvamVjdG9yKCkge1xuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLlByb2plY3RvciB9KTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX25vZGVNYXAuY2xlYXIoKTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBOb2RlSGFuZGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vZGVIYW5kbGVyLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IFByb21pc2UgZnJvbSAnLi4vc2hpbS9Qcm9taXNlJztcbmltcG9ydCBNYXAgZnJvbSAnLi4vc2hpbS9NYXAnO1xuaW1wb3J0IFN5bWJvbCBmcm9tICcuLi9zaGltL1N5bWJvbCc7XG5pbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnLi4vY29yZS9FdmVudGVkJztcbi8qKlxuICogV2lkZ2V0IGJhc2Ugc3ltYm9sIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IFdJREdFVF9CQVNFX1RZUEUgPSBTeW1ib2woJ1dpZGdldCBCYXNlJyk7XG4vKipcbiAqIENoZWNrcyBpcyB0aGUgaXRlbSBpcyBhIHN1YmNsYXNzIG9mIFdpZGdldEJhc2UgKG9yIGEgV2lkZ2V0QmFzZSlcbiAqXG4gKiBAcGFyYW0gaXRlbSB0aGUgaXRlbSB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZS9mYWxzZSBpbmRpY2F0aW5nIGlmIHRoZSBpdGVtIGlzIGEgV2lkZ2V0QmFzZUNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJiBpdGVtLl90eXBlID09PSBXSURHRVRfQkFTRV9UWVBFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1dpZGdldENvbnN0cnVjdG9yRGVmYXVsdEV4cG9ydChpdGVtKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJlxuICAgICAgICBpdGVtLmhhc093blByb3BlcnR5KCdfX2VzTW9kdWxlJykgJiZcbiAgICAgICAgaXRlbS5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdCcpICYmXG4gICAgICAgIGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0uZGVmYXVsdCkpO1xufVxuLyoqXG4gKiBUaGUgUmVnaXN0cnkgaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFJlZ2lzdHJ5IGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgLyoqXG4gICAgICogRW1pdCBsb2FkZWQgZXZlbnQgZm9yIHJlZ2lzdHJ5IGxhYmVsXG4gICAgICovXG4gICAgZW1pdExvYWRlZEV2ZW50KHdpZGdldExhYmVsLCBpdGVtKSB7XG4gICAgICAgIHRoaXMuZW1pdCh7XG4gICAgICAgICAgICB0eXBlOiB3aWRnZXRMYWJlbCxcbiAgICAgICAgICAgIGFjdGlvbjogJ2xvYWRlZCcsXG4gICAgICAgICAgICBpdGVtXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWZpbmUobGFiZWwsIGl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuX3dpZGdldFJlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl93aWRnZXRSZWdpc3RyeS5oYXMobGFiZWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdpZGdldCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgZm9yICcke2xhYmVsLnRvU3RyaW5nKCl9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgaXRlbSk7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgaXRlbS50aGVuKCh3aWRnZXRDdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCB3aWRnZXRDdG9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgd2lkZ2V0Q3Rvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpZGdldEN0b3I7XG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVmaW5lSW5qZWN0b3IobGFiZWwsIGluamVjdG9yRmFjdG9yeSkge1xuICAgICAgICBpZiAodGhpcy5faW5qZWN0b3JSZWdpc3RyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmhhcyhsYWJlbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5qZWN0b3IgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnJHtsYWJlbC50b1N0cmluZygpfSdgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnZhbGlkYXRvciA9IG5ldyBFdmVudGVkKCk7XG4gICAgICAgIGNvbnN0IGluamVjdG9ySXRlbSA9IHtcbiAgICAgICAgICAgIGluamVjdG9yOiBpbmplY3RvckZhY3RvcnkoKCkgPT4gaW52YWxpZGF0b3IuZW1pdCh7IHR5cGU6ICdpbnZhbGlkYXRlJyB9KSksXG4gICAgICAgICAgICBpbnZhbGlkYXRvclxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LnNldChsYWJlbCwgaW5qZWN0b3JJdGVtKTtcbiAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIGluamVjdG9ySXRlbSk7XG4gICAgfVxuICAgIGdldChsYWJlbCkge1xuICAgICAgICBpZiAoIXRoaXMuX3dpZGdldFJlZ2lzdHJ5IHx8ICF0aGlzLmhhcyhsYWJlbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl93aWRnZXRSZWdpc3RyeS5nZXQobGFiZWwpO1xuICAgICAgICBpZiAoaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IGl0ZW0oKTtcbiAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCBwcm9taXNlKTtcbiAgICAgICAgcHJvbWlzZS50aGVuKCh3aWRnZXRDdG9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQod2lkZ2V0Q3RvcikpIHtcbiAgICAgICAgICAgICAgICB3aWRnZXRDdG9yID0gd2lkZ2V0Q3Rvci5kZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCB3aWRnZXRDdG9yKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCB3aWRnZXRDdG9yKTtcbiAgICAgICAgICAgIHJldHVybiB3aWRnZXRDdG9yO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGdldEluamVjdG9yKGxhYmVsKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5qZWN0b3JSZWdpc3RyeSB8fCAhdGhpcy5oYXNJbmplY3RvcihsYWJlbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmdldChsYWJlbCk7XG4gICAgfVxuICAgIGhhcyhsYWJlbCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLl93aWRnZXRSZWdpc3RyeSAmJiB0aGlzLl93aWRnZXRSZWdpc3RyeS5oYXMobGFiZWwpKTtcbiAgICB9XG4gICAgaGFzSW5qZWN0b3IobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5faW5qZWN0b3JSZWdpc3RyeSAmJiB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmhhcyhsYWJlbCkpO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IFJlZ2lzdHJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVnaXN0cnkubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgeyBNYXAgfSBmcm9tICcuLi9zaGltL01hcCc7XG5pbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnLi4vY29yZS9FdmVudGVkJztcbmltcG9ydCB7IFJlZ2lzdHJ5IH0gZnJvbSAnLi9SZWdpc3RyeSc7XG5leHBvcnQgY2xhc3MgUmVnaXN0cnlIYW5kbGVyIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KCk7XG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5vd24odGhpcy5fcmVnaXN0cnkpO1xuICAgICAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFzZVJlZ2lzdHJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm93bih7IGRlc3Ryb3kgfSk7XG4gICAgfVxuICAgIHNldCBiYXNlKGJhc2VSZWdpc3RyeSkge1xuICAgICAgICBpZiAodGhpcy5iYXNlUmVnaXN0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmFzZVJlZ2lzdHJ5ID0gYmFzZVJlZ2lzdHJ5O1xuICAgIH1cbiAgICBkZWZpbmUobGFiZWwsIHdpZGdldCkge1xuICAgICAgICB0aGlzLl9yZWdpc3RyeS5kZWZpbmUobGFiZWwsIHdpZGdldCk7XG4gICAgfVxuICAgIGRlZmluZUluamVjdG9yKGxhYmVsLCBpbmplY3Rvcikge1xuICAgICAgICB0aGlzLl9yZWdpc3RyeS5kZWZpbmVJbmplY3RvcihsYWJlbCwgaW5qZWN0b3IpO1xuICAgIH1cbiAgICBoYXMobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmhhcyhsYWJlbCkgfHwgQm9vbGVhbih0aGlzLmJhc2VSZWdpc3RyeSAmJiB0aGlzLmJhc2VSZWdpc3RyeS5oYXMobGFiZWwpKTtcbiAgICB9XG4gICAgaGFzSW5qZWN0b3IobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJ5Lmhhc0luamVjdG9yKGxhYmVsKSB8fCBCb29sZWFuKHRoaXMuYmFzZVJlZ2lzdHJ5ICYmIHRoaXMuYmFzZVJlZ2lzdHJ5Lmhhc0luamVjdG9yKGxhYmVsKSk7XG4gICAgfVxuICAgIGdldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsICdnZXQnLCB0aGlzLl9yZWdpc3RyeVdpZGdldExhYmVsTWFwKTtcbiAgICB9XG4gICAgZ2V0SW5qZWN0b3IobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UgPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCAnZ2V0SW5qZWN0b3InLCB0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXApO1xuICAgIH1cbiAgICBfZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCBnZXRGdW5jdGlvbk5hbWUsIGxhYmVsTWFwKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJpZXMgPSBnbG9iYWxQcmVjZWRlbmNlID8gW3RoaXMuYmFzZVJlZ2lzdHJ5LCB0aGlzLl9yZWdpc3RyeV0gOiBbdGhpcy5fcmVnaXN0cnksIHRoaXMuYmFzZVJlZ2lzdHJ5XTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWdpc3RyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IHJlZ2lzdHJpZXNbaV07XG4gICAgICAgICAgICBpZiAoIXJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcmVnaXN0cnlbZ2V0RnVuY3Rpb25OYW1lXShsYWJlbCk7XG4gICAgICAgICAgICBjb25zdCByZWdpc3RlcmVkTGFiZWxzID0gbGFiZWxNYXAuZ2V0KHJlZ2lzdHJ5KSB8fCBbXTtcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZWdpc3RlcmVkTGFiZWxzLmluZGV4T2YobGFiZWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IHJlZ2lzdHJ5Lm9uKGxhYmVsLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ2xvYWRlZCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbZ2V0RnVuY3Rpb25OYW1lXShsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSkgPT09IGV2ZW50Lml0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6ICdpbnZhbGlkYXRlJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMub3duKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgbGFiZWxNYXAuc2V0KHJlZ2lzdHJ5LCBbLi4ucmVnaXN0ZXJlZExhYmVscywgbGFiZWxdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBSZWdpc3RyeUhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWdpc3RyeUhhbmRsZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvUmVnaXN0cnlIYW5kbGVyLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBNYXAgZnJvbSAnLi4vc2hpbS9NYXAnO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnLi4vc2hpbS9XZWFrTWFwJztcbmltcG9ydCBTeW1ib2wgZnJvbSAnLi4vc2hpbS9TeW1ib2wnO1xuaW1wb3J0IHsgdiB9IGZyb20gJy4vZCc7XG5pbXBvcnQgeyBhdXRvIH0gZnJvbSAnLi9kaWZmJztcbmltcG9ydCBSZWdpc3RyeUhhbmRsZXIgZnJvbSAnLi9SZWdpc3RyeUhhbmRsZXInO1xuaW1wb3J0IE5vZGVIYW5kbGVyIGZyb20gJy4vTm9kZUhhbmRsZXInO1xuaW1wb3J0IHsgd2lkZ2V0SW5zdGFuY2VNYXAgfSBmcm9tICcuL3Zkb20nO1xuaW1wb3J0IHsgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IsIFdJREdFVF9CQVNFX1RZUEUgfSBmcm9tICcuL1JlZ2lzdHJ5JztcbmNvbnN0IGRlY29yYXRvck1hcCA9IG5ldyBNYXAoKTtcbmNvbnN0IGJvdW5kQXV0byA9IGF1dG8uYmluZChudWxsKTtcbmV4cG9ydCBjb25zdCBub0JpbmQgPSBTeW1ib2wuZm9yKCdkb2pvTm9CaW5kJyk7XG4vKipcbiAqIE1haW4gd2lkZ2V0IGJhc2UgZm9yIGFsbCB3aWRnZXRzIHRvIGV4dGVuZFxuICovXG5leHBvcnQgY2xhc3MgV2lkZ2V0QmFzZSB7XG4gICAgLyoqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgaWYgaXQgaXMgdGhlIGluaXRpYWwgc2V0IHByb3BlcnRpZXMgY3ljbGVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFycmF5IG9mIHByb3BlcnR5IGtleXMgY29uc2lkZXJlZCBjaGFuZ2VkIGZyb20gdGhlIHByZXZpb3VzIHNldCBwcm9wZXJ0aWVzXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gW107XG4gICAgICAgIHRoaXMuX25vZGVIYW5kbGVyID0gbmV3IE5vZGVIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJGdW5jID0gdGhpcy5yZW5kZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYm91bmRJbnZhbGlkYXRlID0gdGhpcy5pbnZhbGlkYXRlLmJpbmQodGhpcyk7XG4gICAgICAgIHdpZGdldEluc3RhbmNlTWFwLnNldCh0aGlzLCB7XG4gICAgICAgICAgICBkaXJ0eTogdHJ1ZSxcbiAgICAgICAgICAgIG9uQXR0YWNoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkF0dGFjaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRGV0YWNoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRldGFjaCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vZGVIYW5kbGVyOiB0aGlzLl9ub2RlSGFuZGxlcixcbiAgICAgICAgICAgIHJlZ2lzdHJ5OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29yZVByb3BlcnRpZXM6IHt9LFxuICAgICAgICAgICAgcmVuZGVyaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlucHV0UHJvcGVydGllczoge31cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3J1bkFmdGVyQ29uc3RydWN0b3JzKCk7XG4gICAgfVxuICAgIG1ldGEoTWV0YVR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX21ldGFNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FjaGVkID0gdGhpcy5fbWV0YU1hcC5nZXQoTWV0YVR5cGUpO1xuICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgY2FjaGVkID0gbmV3IE1ldGFUeXBlKHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlOiB0aGlzLl9ib3VuZEludmFsaWRhdGUsXG4gICAgICAgICAgICAgICAgbm9kZUhhbmRsZXI6IHRoaXMuX25vZGVIYW5kbGVyLFxuICAgICAgICAgICAgICAgIGJpbmQ6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vd24oY2FjaGVkKTtcbiAgICAgICAgICAgIHRoaXMuX21ldGFNYXAuc2V0KE1ldGFUeXBlLCBjYWNoZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIG9uQXR0YWNoKCkge1xuICAgICAgICAvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4gICAgfVxuICAgIG9uRGV0YWNoKCkge1xuICAgICAgICAvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4gICAgfVxuICAgIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllcztcbiAgICB9XG4gICAgZ2V0IGNoYW5nZWRQcm9wZXJ0eUtleXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5c107XG4gICAgfVxuICAgIF9fc2V0Q29yZVByb3BlcnRpZXNfXyhjb3JlUHJvcGVydGllcykge1xuICAgICAgICBjb25zdCB7IGJhc2VSZWdpc3RyeSB9ID0gY29yZVByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iYXNlUmVnaXN0cnkgIT09IGJhc2VSZWdpc3RyeSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vd24odGhpcy5fcmVnaXN0cnkub24oJ2ludmFsaWRhdGUnLCB0aGlzLl9ib3VuZEludmFsaWRhdGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmJhc2UgPSBiYXNlUmVnaXN0cnk7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMgPSBjb3JlUHJvcGVydGllcztcbiAgICB9XG4gICAgX19zZXRQcm9wZXJ0aWVzX18ob3JpZ2luYWxQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLmlucHV0UHJvcGVydGllcyA9IG9yaWdpbmFsUHJvcGVydGllcztcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX3J1bkJlZm9yZVByb3BlcnRpZXMob3JpZ2luYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ3JlZ2lzdGVyZWREaWZmUHJvcGVydHknKTtcbiAgICAgICAgY29uc3QgY2hhbmdlZFByb3BlcnR5S2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyk7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWFsUHJvcGVydGllcyA9PT0gZmFsc2UgfHwgcmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgYWxsUHJvcGVydGllcyA9IFsuLi5wcm9wZXJ0eU5hbWVzLCAuLi5PYmplY3Qua2V5cyh0aGlzLl9wcm9wZXJ0aWVzKV07XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkUHJvcGVydGllcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZGlmZlByb3BlcnR5UmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgbGV0IHJ1blJlYWN0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZFByb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hlY2tlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUHJvcGVydHkgPSB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UHJvcGVydHkgPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0sIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iaW5kKTtcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuUmVhY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZkZ1bmN0aW9ucyA9IHRoaXMuZ2V0RGVjb3JhdG9yKGBkaWZmUHJvcGVydHk6JHtwcm9wZXJ0eU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZkZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGlmZkZ1bmN0aW9uc1tpXShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNoYW5nZWQgJiYgY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lIGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmUHJvcGVydHlSZXN1bHRzW3Byb3BlcnR5TmFtZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGJvdW5kQXV0byhwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlZCAmJiBjaGFuZ2VkUHJvcGVydHlLZXlzLmluZGV4T2YocHJvcGVydHlOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0eUtleXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlmZlByb3BlcnR5UmVzdWx0c1twcm9wZXJ0eU5hbWVdID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1blJlYWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWN0aW9uRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkUmVhY3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgcmVhY3Rpb25GdW5jdGlvbnMuZm9yRWFjaCgoeyByZWFjdGlvbiwgcHJvcGVydHlOYW1lIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlDaGFuZ2VkID0gY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFjdGlvblJ1biA9IGV4ZWN1dGVkUmVhY3Rpb25zLmluZGV4T2YocmVhY3Rpb24pICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5Q2hhbmdlZCAmJiAhcmVhY3Rpb25SdW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmNhbGwodGhpcywgdGhpcy5fcHJvcGVydGllcywgZGlmZlByb3BlcnR5UmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZFJlYWN0aW9ucy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IGRpZmZQcm9wZXJ0eVJlc3VsdHM7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gY2hhbmdlZFByb3BlcnR5S2V5cztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWVzW2ldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSwgaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJpbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cyA9IGNoYW5nZWRQcm9wZXJ0eUtleXM7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gICAgfVxuICAgIF9fc2V0Q2hpbGRyZW5fXyhjaGlsZHJlbikge1xuICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW4ubGVuZ3RoID4gMCB8fCBjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX19yZW5kZXJfXygpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpbnN0YW5jZURhdGEuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gdGhpcy5fcnVuQmVmb3JlUmVuZGVycygpO1xuICAgICAgICBsZXQgZE5vZGUgPSByZW5kZXIoKTtcbiAgICAgICAgZE5vZGUgPSB0aGlzLnJ1bkFmdGVyUmVuZGVycyhkTm9kZSk7XG4gICAgICAgIHRoaXMuX25vZGVIYW5kbGVyLmNsZWFyKCk7XG4gICAgICAgIHJldHVybiBkTm9kZTtcbiAgICB9XG4gICAgaW52YWxpZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmludmFsaWRhdGUpIHtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdignZGl2Jywge30sIHRoaXMuY2hpbGRyZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBhZGQgZGVjb3JhdG9ycyB0byBXaWRnZXRCYXNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGRlY29yYXRvclxuICAgICAqL1xuICAgIGFkZERlY29yYXRvcihkZWNvcmF0b3JLZXksIHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KCdjb25zdHJ1Y3RvcicpKSB7XG4gICAgICAgICAgICBsZXQgZGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvck1hcC5nZXQodGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICBpZiAoIWRlY29yYXRvckxpc3QpIHtcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JMaXN0ID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgICAgIGRlY29yYXRvck1hcC5zZXQodGhpcy5jb25zdHJ1Y3RvciwgZGVjb3JhdG9yTGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc3BlY2lmaWNEZWNvcmF0b3JMaXN0ID0gZGVjb3JhdG9yTGlzdC5nZXQoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgICAgIGlmICghc3BlY2lmaWNEZWNvcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgc3BlY2lmaWNEZWNvcmF0b3JMaXN0ID0gW107XG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yTGlzdC5zZXQoZGVjb3JhdG9yS2V5LCBzcGVjaWZpY0RlY29yYXRvckxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3BlY2lmaWNEZWNvcmF0b3JMaXN0LnB1c2goLi4udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICB0aGlzLl9kZWNvcmF0b3JDYWNoZS5zZXQoZGVjb3JhdG9yS2V5LCBbLi4uZGVjb3JhdG9ycywgLi4udmFsdWVdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBidWlsZCB0aGUgbGlzdCBvZiBkZWNvcmF0b3JzIGZyb20gdGhlIGdsb2JhbCBkZWNvcmF0b3IgbWFwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSAgVGhlIGtleSBvZiB0aGUgZGVjb3JhdG9yXG4gICAgICogQHJldHVybiBBbiBhcnJheSBvZiBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYnVpbGREZWNvcmF0b3JMaXN0KGRlY29yYXRvcktleSkge1xuICAgICAgICBjb25zdCBhbGxEZWNvcmF0b3JzID0gW107XG4gICAgICAgIGxldCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgIHdoaWxlIChjb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VNYXAgPSBkZWNvcmF0b3JNYXAuZ2V0KGNvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU1hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBpbnN0YW5jZU1hcC5nZXQoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdG9ycykge1xuICAgICAgICAgICAgICAgICAgICBhbGxEZWNvcmF0b3JzLnVuc2hpZnQoLi4uZGVjb3JhdG9ycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY29uc3RydWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byByZXRyaWV2ZSBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGRlY29yYXRvciB2YWx1ZXNcbiAgICAgKi9cbiAgICBnZXREZWNvcmF0b3IoZGVjb3JhdG9yS2V5KSB7XG4gICAgICAgIGxldCBhbGxEZWNvcmF0b3JzID0gdGhpcy5fZGVjb3JhdG9yQ2FjaGUuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgIGlmIChhbGxEZWNvcmF0b3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgICAgICB9XG4gICAgICAgIGFsbERlY29yYXRvcnMgPSB0aGlzLl9idWlsZERlY29yYXRvckxpc3QoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgYWxsRGVjb3JhdG9ycyk7XG4gICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCaW5kcyB1bmJvdW5kIHByb3BlcnR5IGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBiaW5kYCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgZnVuY3Rpb25zXG4gICAgICovXG4gICAgX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnR5LCBiaW5kKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIXByb3BlcnR5W25vQmluZF0gJiYgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IocHJvcGVydHkpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiaW5kSW5mbyA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwLmdldChwcm9wZXJ0eSkgfHwge307XG4gICAgICAgICAgICBsZXQgeyBib3VuZEZ1bmMsIHNjb3BlIH0gPSBiaW5kSW5mbztcbiAgICAgICAgICAgIGlmIChib3VuZEZ1bmMgPT09IHVuZGVmaW5lZCB8fCBzY29wZSAhPT0gYmluZCkge1xuICAgICAgICAgICAgICAgIGJvdW5kRnVuYyA9IHByb3BlcnR5LmJpbmQoYmluZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAuc2V0KHByb3BlcnR5LCB7IGJvdW5kRnVuYywgc2NvcGU6IGJpbmQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm91bmRGdW5jO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gICAgZ2V0IHJlZ2lzdHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyKCk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeTtcbiAgICB9XG4gICAgX3J1bkJlZm9yZVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBiZWZvcmVQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnKTtcbiAgICAgICAgaWYgKGJlZm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJlZm9yZVByb3BlcnRpZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBiZWZvcmVQcm9wZXJ0aWVzRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uLmNhbGwodGhpcywgcHJvcGVydGllcykpO1xuICAgICAgICAgICAgfSwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYmVmb3JlIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgdXBkYXRlZCByZW5kZXIgbWV0aG9kXG4gICAgICovXG4gICAgX3J1bkJlZm9yZVJlbmRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZVJlbmRlcnMgPSB0aGlzLmdldERlY29yYXRvcignYmVmb3JlUmVuZGVyJyk7XG4gICAgICAgIGlmIChiZWZvcmVSZW5kZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmVSZW5kZXJzLnJlZHVjZSgocmVuZGVyLCBiZWZvcmVSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZW5kZXIgPSBiZWZvcmVSZW5kZXJGdW5jdGlvbi5jYWxsKHRoaXMsIHJlbmRlciwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlciBmdW5jdGlvbiBub3QgcmV0dXJuZWQgZnJvbSBiZWZvcmVSZW5kZXIsIHVzaW5nIHByZXZpb3VzIHJlbmRlcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZFJlbmRlcjtcbiAgICAgICAgICAgIH0sIHRoaXMuX2JvdW5kUmVuZGVyRnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kUmVuZGVyRnVuYztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGFsbCByZWdpc3RlcmVkIGFmdGVyIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgZGVjb3JhdGVkIEROb2Rlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGROb2RlIFRoZSBETm9kZXMgdG8gcnVuIHRocm91Z2ggdGhlIGFmdGVyIHJlbmRlcnNcbiAgICAgKi9cbiAgICBydW5BZnRlclJlbmRlcnMoZE5vZGUpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJSZW5kZXJzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJyk7XG4gICAgICAgIGlmIChhZnRlclJlbmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZE5vZGUgPSBhZnRlclJlbmRlcnMucmVkdWNlKChkTm9kZSwgYWZ0ZXJSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZnRlclJlbmRlckZ1bmN0aW9uLmNhbGwodGhpcywgZE5vZGUpO1xuICAgICAgICAgICAgfSwgZE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9tZXRhTWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX21ldGFNYXAuZm9yRWFjaCgobWV0YSkgPT4ge1xuICAgICAgICAgICAgICAgIG1ldGEuYWZ0ZXJSZW5kZXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkTm9kZTtcbiAgICB9XG4gICAgX3J1bkFmdGVyQ29uc3RydWN0b3JzKCkge1xuICAgICAgICBjb25zdCBhZnRlckNvbnN0cnVjdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdhZnRlckNvbnN0cnVjdG9yJyk7XG4gICAgICAgIGlmIChhZnRlckNvbnN0cnVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhZnRlckNvbnN0cnVjdG9ycy5mb3JFYWNoKChhZnRlckNvbnN0cnVjdG9yKSA9PiBhZnRlckNvbnN0cnVjdG9yLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG93bihoYW5kbGUpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLl9oYW5kbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IHRoaXMuX2hhbmRsZXMucG9wKCk7XG4gICAgICAgICAgICBpZiAoaGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogc3RhdGljIGlkZW50aWZpZXJcbiAqL1xuV2lkZ2V0QmFzZS5fdHlwZSA9IFdJREdFVF9CQVNFX1RZUEU7XG5leHBvcnQgZGVmYXVsdCBXaWRnZXRCYXNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2lkZ2V0QmFzZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1dpZGdldEJhc2UubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJsZXQgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICcnO1xubGV0IGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9ICcnO1xuZnVuY3Rpb24gZGV0ZXJtaW5lQnJvd3NlclN0eWxlTmFtZXMoZWxlbWVudCkge1xuICAgIGlmICgnV2Via2l0VHJhbnNpdGlvbicgaW4gZWxlbWVudC5zdHlsZSkge1xuICAgICAgICBicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICAgICAgICBicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnd2Via2l0QW5pbWF0aW9uRW5kJztcbiAgICB9XG4gICAgZWxzZSBpZiAoJ3RyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUgfHwgJ01velRyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUpIHtcbiAgICAgICAgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICd0cmFuc2l0aW9uZW5kJztcbiAgICAgICAgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJ2FuaW1hdGlvbmVuZCc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdXIgYnJvd3NlciBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZShlbGVtZW50KSB7XG4gICAgaWYgKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9PT0gJycpIHtcbiAgICAgICAgZGV0ZXJtaW5lQnJvd3NlclN0eWxlTmFtZXMoZWxlbWVudCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcnVuQW5kQ2xlYW5VcChlbGVtZW50LCBzdGFydEFuaW1hdGlvbiwgZmluaXNoQW5pbWF0aW9uKSB7XG4gICAgaW5pdGlhbGl6ZShlbGVtZW50KTtcbiAgICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcbiAgICBsZXQgdHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICBmaW5pc2hBbmltYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc3RhcnRBbmltYXRpb24oKTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG59XG5mdW5jdGlvbiBleGl0KG5vZGUsIHByb3BlcnRpZXMsIGV4aXRBbmltYXRpb24sIHJlbW92ZU5vZGUpIHtcbiAgICBjb25zdCBhY3RpdmVDbGFzcyA9IHByb3BlcnRpZXMuZXhpdEFuaW1hdGlvbkFjdGl2ZSB8fCBgJHtleGl0QW5pbWF0aW9ufS1hY3RpdmVgO1xuICAgIHJ1bkFuZENsZWFuVXAobm9kZSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoZXhpdEFuaW1hdGlvbik7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoYWN0aXZlQ2xhc3MpO1xuICAgICAgICB9KTtcbiAgICB9LCAoKSA9PiB7XG4gICAgICAgIHJlbW92ZU5vZGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGVudGVyKG5vZGUsIHByb3BlcnRpZXMsIGVudGVyQW5pbWF0aW9uKSB7XG4gICAgY29uc3QgYWN0aXZlQ2xhc3MgPSBwcm9wZXJ0aWVzLmVudGVyQW5pbWF0aW9uQWN0aXZlIHx8IGAke2VudGVyQW5pbWF0aW9ufS1hY3RpdmVgO1xuICAgIHJ1bkFuZENsZWFuVXAobm9kZSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoZW50ZXJBbmltYXRpb24pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoZW50ZXJBbmltYXRpb24pO1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoYWN0aXZlQ2xhc3MpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGVudGVyLFxuICAgIGV4aXRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jc3NUcmFuc2l0aW9ucy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4uL3NoaW0vU3ltYm9sJztcbi8qKlxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFdOb2RlIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IFdOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFdOb2RlLicpO1xuLyoqXG4gKiBUaGUgc3ltYm9sIGlkZW50aWZpZXIgZm9yIGEgVk5vZGUgdHlwZVxuICovXG5leHBvcnQgY29uc3QgVk5PREUgPSBTeW1ib2woJ0lkZW50aWZpZXIgZm9yIGEgVk5vZGUuJyk7XG4vKipcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBWTm9kZSB0eXBlIGNyZWF0ZWQgdXNpbmcgZG9tKClcbiAqL1xuZXhwb3J0IGNvbnN0IERPTVZOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFZOb2RlIGNyZWF0ZWQgdXNpbmcgZXhpc3RpbmcgZG9tLicpO1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgV05vZGVgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV05vZGUoY2hpbGQpIHtcbiAgICByZXR1cm4gQm9vbGVhbihjaGlsZCAmJiB0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnICYmIGNoaWxkLnR5cGUgPT09IFdOT0RFKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFZOb2RlYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZOb2RlKGNoaWxkKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiAoY2hpbGQudHlwZSA9PT0gVk5PREUgfHwgY2hpbGQudHlwZSA9PT0gRE9NVk5PREUpKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFZOb2RlYCBjcmVhdGVkIHdpdGggYGRvbSgpYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RvbVZOb2RlKGNoaWxkKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiBjaGlsZC50eXBlID09PSBET01WTk9ERSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50Tm9kZSh2YWx1ZSkge1xuICAgIHJldHVybiAhIXZhbHVlLnRhZ05hbWU7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGUoZE5vZGVzLCBvcHRpb25zT3JNb2RpZmllciwgcHJlZGljYXRlKSB7XG4gICAgbGV0IHNoYWxsb3cgPSBmYWxzZTtcbiAgICBsZXQgbW9kaWZpZXI7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JNb2RpZmllciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBtb2RpZmllciA9IG9wdGlvbnNPck1vZGlmaWVyO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbW9kaWZpZXIgPSBvcHRpb25zT3JNb2RpZmllci5tb2RpZmllcjtcbiAgICAgICAgcHJlZGljYXRlID0gb3B0aW9uc09yTW9kaWZpZXIucHJlZGljYXRlO1xuICAgICAgICBzaGFsbG93ID0gb3B0aW9uc09yTW9kaWZpZXIuc2hhbGxvdyB8fCBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG5vZGVzID0gQXJyYXkuaXNBcnJheShkTm9kZXMpID8gWy4uLmROb2Rlc10gOiBbZE5vZGVzXTtcbiAgICBmdW5jdGlvbiBicmVha2VyKCkge1xuICAgICAgICBub2RlcyA9IFtdO1xuICAgIH1cbiAgICB3aGlsZSAobm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5zaGlmdCgpO1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKCFzaGFsbG93ICYmIChpc1dOb2RlKG5vZGUpIHx8IGlzVk5vZGUobm9kZSkpICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBub2RlcyA9IFsuLi5ub2RlcywgLi4ubm9kZS5jaGlsZHJlbl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllcihub2RlLCBicmVha2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZE5vZGVzO1xufVxuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciBjYWxscyB0byBjcmVhdGUgYSB3aWRnZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3KHdpZGdldENvbnN0cnVjdG9yLCBwcm9wZXJ0aWVzLCBjaGlsZHJlbiA9IFtdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHdpZGdldENvbnN0cnVjdG9yLFxuICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICB0eXBlOiBXTk9ERVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gdih0YWcsIHByb3BlcnRpZXNPckNoaWxkcmVuID0ge30sIGNoaWxkcmVuID0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzT3JDaGlsZHJlbjtcbiAgICBsZXQgZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2s7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydGllc09yQ2hpbGRyZW4pKSB7XG4gICAgICAgIGNoaWxkcmVuID0gcHJvcGVydGllc09yQ2hpbGRyZW47XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID0gcHJvcGVydGllcztcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0YWcsXG4gICAgICAgIGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgdHlwZTogVk5PREVcbiAgICB9O1xufVxuLyoqXG4gKiBDcmVhdGUgYSBWTm9kZSBmb3IgYW4gZXhpc3RpbmcgRE9NIE5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb20oeyBub2RlLCBhdHRycyA9IHt9LCBwcm9wcyA9IHt9LCBvbiA9IHt9LCBkaWZmVHlwZSA9ICdub25lJyB9LCBjaGlsZHJlbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogaXNFbGVtZW50Tm9kZShub2RlKSA/IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpIDogJycsXG4gICAgICAgIHByb3BlcnRpZXM6IHByb3BzLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRycyxcbiAgICAgICAgZXZlbnRzOiBvbixcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHR5cGU6IERPTVZOT0RFLFxuICAgICAgICBkb21Ob2RlOiBub2RlLFxuICAgICAgICB0ZXh0OiBpc0VsZW1lbnROb2RlKG5vZGUpID8gdW5kZWZpbmVkIDogbm9kZS5kYXRhLFxuICAgICAgICBkaWZmVHlwZVxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmV4cG9ydCBmdW5jdGlvbiBhZnRlclJlbmRlcihtZXRob2QpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJywgcHJvcGVydHlLZXkgPyB0YXJnZXRbcHJvcGVydHlLZXldIDogbWV0aG9kKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGFmdGVyUmVuZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWZ0ZXJSZW5kZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuaW1wb3J0IHsgYmVmb3JlUHJvcGVydGllcyB9IGZyb20gJy4vYmVmb3JlUHJvcGVydGllcyc7XG5leHBvcnQgZnVuY3Rpb24gYWx3YXlzUmVuZGVyKCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgYmVmb3JlUHJvcGVydGllcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICAgICAgfSkodGFyZ2V0KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGFsd2F5c1JlbmRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFsd2F5c1JlbmRlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmV4cG9ydCBmdW5jdGlvbiBiZWZvcmVQcm9wZXJ0aWVzKG1ldGhvZCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmVmb3JlUHJvcGVydGllcycsIHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IG1ldGhvZCk7XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBiZWZvcmVQcm9wZXJ0aWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmVmb3JlUHJvcGVydGllcy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYmVmb3JlUHJvcGVydGllcy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2JlZm9yZVByb3BlcnRpZXMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgQ3VzdG9tRWxlbWVudENoaWxkVHlwZSB9IGZyb20gJy4uL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCc7XG5pbXBvcnQgUmVnaXN0cnkgZnJvbSAnLi4vUmVnaXN0cnknO1xuLyoqXG4gKiBUaGlzIERlY29yYXRvciBpcyBwcm92aWRlZCBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIHRoZSBiZWhhdmlvciBvZiBhIGN1c3RvbSBlbGVtZW50LCBhbmRcbiAqIHJlZ2lzdGVycyB0aGF0IGN1c3RvbSBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tRWxlbWVudCh7IHRhZywgcHJvcGVydGllcyA9IFtdLCBhdHRyaWJ1dGVzID0gW10sIGV2ZW50cyA9IFtdLCBjaGlsZFR5cGUgPSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8sIHJlZ2lzdHJ5RmFjdG9yeSA9ICgpID0+IG5ldyBSZWdpc3RyeSgpIH0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICB0YXJnZXQucHJvdG90eXBlLl9fY3VzdG9tRWxlbWVudERlc2NyaXB0b3IgPSB7XG4gICAgICAgICAgICB0YWdOYW1lOiB0YWcsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICAgIGNoaWxkVHlwZSxcbiAgICAgICAgICAgIHJlZ2lzdHJ5RmFjdG9yeVxuICAgICAgICB9O1xuICAgIH07XG59XG5leHBvcnQgZGVmYXVsdCBjdXN0b21FbGVtZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3VzdG9tRWxlbWVudC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvY3VzdG9tRWxlbWVudC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuaW1wb3J0IHsgYXV0byB9IGZyb20gJy4vLi4vZGlmZic7XG4vKipcbiAqIERlY29yYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZ2lzdGVyIGEgZnVuY3Rpb24gYXMgYSBzcGVjaWZpYyBwcm9wZXJ0eSBkaWZmXG4gKlxuICogQHBhcmFtIHByb3BlcnR5TmFtZSAgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IG9mIHdoaWNoIHRoZSBkaWZmIGZ1bmN0aW9uIGlzIGFwcGxpZWRcbiAqIEBwYXJhbSBkaWZmVHlwZSAgICAgIFRoZSBkaWZmIHR5cGUsIGRlZmF1bHQgaXMgRGlmZlR5cGUuQVVUTy5cbiAqIEBwYXJhbSBkaWZmRnVuY3Rpb24gIEEgZGlmZiBmdW5jdGlvbiB0byBydW4gaWYgZGlmZlR5cGUgaWYgRGlmZlR5cGUuQ1VTVE9NXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmUHJvcGVydHkocHJvcGVydHlOYW1lLCBkaWZmRnVuY3Rpb24gPSBhdXRvLCByZWFjdGlvbkZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKGBkaWZmUHJvcGVydHk6JHtwcm9wZXJ0eU5hbWV9YCwgZGlmZkZ1bmN0aW9uLmJpbmQobnVsbCkpO1xuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdyZWdpc3RlcmVkRGlmZlByb3BlcnR5JywgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKHJlYWN0aW9uRnVuY3Rpb24gfHwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicsIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgICAgcmVhY3Rpb246IHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IHJlYWN0aW9uRnVuY3Rpb25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBkaWZmUHJvcGVydHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaWZmUHJvcGVydHkubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCIvKipcbiAqIEdlbmVyaWMgZGVjb3JhdG9yIGhhbmRsZXIgdG8gdGFrZSBjYXJlIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBkZWNvcmF0b3Igd2FzIGNhbGxlZCBhdCB0aGUgY2xhc3MgbGV2ZWxcbiAqIG9yIHRoZSBtZXRob2QgbGV2ZWwuXG4gKlxuICogQHBhcmFtIGhhbmRsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRvcihoYW5kbGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBoYW5kbGVyKHRhcmdldC5wcm90b3R5cGUsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVyKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZURlY29yYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbmRsZURlY29yYXRvci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBXZWFrTWFwIGZyb20gJy4uLy4uL3NoaW0vV2Vha01hcCc7XG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0b3IgfSBmcm9tICcuL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBiZWZvcmVQcm9wZXJ0aWVzIH0gZnJvbSAnLi9iZWZvcmVQcm9wZXJ0aWVzJztcbi8qKlxuICogTWFwIG9mIGluc3RhbmNlcyBhZ2FpbnN0IHJlZ2lzdGVyZWQgaW5qZWN0b3JzLlxuICovXG5jb25zdCByZWdpc3RlcmVkSW5qZWN0b3JzTWFwID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogRGVjb3JhdG9yIHJldHJpZXZlcyBhbiBpbmplY3RvciBmcm9tIGFuIGF2YWlsYWJsZSByZWdpc3RyeSB1c2luZyB0aGUgbmFtZSBhbmRcbiAqIGNhbGxzIHRoZSBgZ2V0UHJvcGVydGllc2AgZnVuY3Rpb24gd2l0aCB0aGUgcGF5bG9hZCBmcm9tIHRoZSBpbmplY3RvclxuICogYW5kIGN1cnJlbnQgcHJvcGVydGllcyB3aXRoIHRoZSB0aGUgaW5qZWN0ZWQgcHJvcGVydGllcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gSW5qZWN0Q29uZmlnIHRoZSBpbmplY3QgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KHsgbmFtZSwgZ2V0UHJvcGVydGllcyB9KSB7XG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgICAgICBiZWZvcmVQcm9wZXJ0aWVzKGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBpbmplY3Rvckl0ZW0gPSB0aGlzLnJlZ2lzdHJ5LmdldEluamVjdG9yKG5hbWUpO1xuICAgICAgICAgICAgaWYgKGluamVjdG9ySXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaW5qZWN0b3IsIGludmFsaWRhdG9yIH0gPSBpbmplY3Rvckl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnaXN0ZXJlZEluamVjdG9ycyA9IHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAuZ2V0KHRoaXMpIHx8IFtdO1xuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RlcmVkSW5qZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkSW5qZWN0b3JzTWFwLnNldCh0aGlzLCByZWdpc3RlcmVkSW5qZWN0b3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVyZWRJbmplY3RvcnMuaW5kZXhPZihpbmplY3Rvckl0ZW0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm93bihpbnZhbGlkYXRvci5vbignaW52YWxpZGF0ZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRJbmplY3RvcnMucHVzaChpbmplY3Rvckl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydGllcyhpbmplY3RvcigpLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkodGFyZ2V0KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGluamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluamVjdC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IFdJREdFVF9CQVNFX1RZUEUgfSBmcm9tICcuL1JlZ2lzdHJ5JztcbmZ1bmN0aW9uIGlzT2JqZWN0T3JBcnJheSh2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhbHdheXMocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5nZWQ6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5nZWQ6IHByZXZpb3VzUHJvcGVydHkgIT09IG5ld1Byb3BlcnR5LFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3cocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHZhbGlkT2xkUHJvcGVydHkgPSBwcmV2aW91c1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShwcmV2aW91c1Byb3BlcnR5KTtcbiAgICBjb25zdCB2YWxpZE5ld1Byb3BlcnR5ID0gbmV3UHJvcGVydHkgJiYgaXNPYmplY3RPckFycmF5KG5ld1Byb3BlcnR5KTtcbiAgICBpZiAoIXZhbGlkT2xkUHJvcGVydHkgfHwgIXZhbGlkTmV3UHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoYW5nZWQ6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNLZXlzID0gT2JqZWN0LmtleXMocHJldmlvdXNQcm9wZXJ0eSk7XG4gICAgY29uc3QgbmV3S2V5cyA9IE9iamVjdC5rZXlzKG5ld1Byb3BlcnR5KTtcbiAgICBpZiAocHJldmlvdXNLZXlzLmxlbmd0aCAhPT0gbmV3S2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjaGFuZ2VkID0gbmV3S2V5cy5zb21lKChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXdQcm9wZXJ0eVtrZXldICE9PSBwcmV2aW91c1Byb3BlcnR5W2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGF1dG8ocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0eXBlb2YgbmV3UHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKG5ld1Byb3BlcnR5Ll90eXBlID09PSBXSURHRVRfQkFTRV9UWVBFKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZWZlcmVuY2UocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gaWdub3JlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdE9yQXJyYXkobmV3UHJvcGVydHkpKSB7XG4gICAgICAgIHJlc3VsdCA9IHNoYWxsb3cocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpZmYubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kaWZmLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RpZmYubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4uLy4uL2NvcmUvbGFuZyc7XG5pbXBvcnQgY3NzVHJhbnNpdGlvbnMgZnJvbSAnLi4vYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucyc7XG5pbXBvcnQgeyBhZnRlclJlbmRlciB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9hZnRlclJlbmRlcic7XG5pbXBvcnQgeyB2IH0gZnJvbSAnLi8uLi9kJztcbmltcG9ydCB7IGRvbSB9IGZyb20gJy4vLi4vdmRvbSc7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGF0dGFjaCBzdGF0ZSBvZiB0aGUgcHJvamVjdG9yXG4gKi9cbmV4cG9ydCB2YXIgUHJvamVjdG9yQXR0YWNoU3RhdGU7XG4oZnVuY3Rpb24gKFByb2plY3RvckF0dGFjaFN0YXRlKSB7XG4gICAgUHJvamVjdG9yQXR0YWNoU3RhdGVbUHJvamVjdG9yQXR0YWNoU3RhdGVbXCJBdHRhY2hlZFwiXSA9IDFdID0gXCJBdHRhY2hlZFwiO1xuICAgIFByb2plY3RvckF0dGFjaFN0YXRlW1Byb2plY3RvckF0dGFjaFN0YXRlW1wiRGV0YWNoZWRcIl0gPSAyXSA9IFwiRGV0YWNoZWRcIjtcbn0pKFByb2plY3RvckF0dGFjaFN0YXRlIHx8IChQcm9qZWN0b3JBdHRhY2hTdGF0ZSA9IHt9KSk7XG4vKipcbiAqIEF0dGFjaCB0eXBlIGZvciB0aGUgcHJvamVjdG9yXG4gKi9cbmV4cG9ydCB2YXIgQXR0YWNoVHlwZTtcbihmdW5jdGlvbiAoQXR0YWNoVHlwZSkge1xuICAgIEF0dGFjaFR5cGVbQXR0YWNoVHlwZVtcIkFwcGVuZFwiXSA9IDFdID0gXCJBcHBlbmRcIjtcbiAgICBBdHRhY2hUeXBlW0F0dGFjaFR5cGVbXCJNZXJnZVwiXSA9IDJdID0gXCJNZXJnZVwiO1xufSkoQXR0YWNoVHlwZSB8fCAoQXR0YWNoVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdG9yTWl4aW4oQmFzZSkge1xuICAgIGNsYXNzIFByb2plY3RvciBleHRlbmRzIEJhc2Uge1xuICAgICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgdGhpcy5fYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnM6IGNzc1RyYW5zaXRpb25zXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdG9yU3RhdGUgPSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5EZXRhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBhcHBlbmQocm9vdCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBBdHRhY2hUeXBlLkFwcGVuZCxcbiAgICAgICAgICAgICAgICByb290XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBtZXJnZShyb290KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IEF0dGFjaFR5cGUuTWVyZ2UsXG4gICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2gob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHJvb3Qocm9vdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNoYW5nZSByb290IGVsZW1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSByb290O1xuICAgICAgICB9XG4gICAgICAgIGdldCByb290KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGFzeW5jKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FzeW5jO1xuICAgICAgICB9XG4gICAgICAgIHNldCBhc3luYyhhc3luYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNoYW5nZSBhc3luYyBtb2RlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9hc3luYyA9IGFzeW5jO1xuICAgICAgICB9XG4gICAgICAgIHNhbmRib3goZG9jID0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjcmVhdGUgc2FuZGJveCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUm9vdCA9IHRoaXMucm9vdDtcbiAgICAgICAgICAgIC8qIGZyZWUgdXAgdGhlIGRvY3VtZW50IGZyYWdtZW50IGZvciBHQyAqL1xuICAgICAgICAgICAgdGhpcy5vd24oe1xuICAgICAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHByZXZpb3VzUm9vdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaCh7XG4gICAgICAgICAgICAgICAgLyogRG9jdW1lbnRGcmFnbWVudCBpcyBub3QgYXNzaWduYWJsZSB0byBFbGVtZW50LCBidXQgcHJvdmlkZXMgZXZlcnl0aGluZyBuZWVkZWQgdG8gd29yayAqL1xuICAgICAgICAgICAgICAgIHJvb3Q6IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG4gICAgICAgICAgICAgICAgdHlwZTogQXR0YWNoVHlwZS5BcHBlbmRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICB0aGlzLl9fc2V0Q2hpbGRyZW5fXyhjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIF9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzICYmIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkgIT09IHByb3BlcnRpZXMucmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdG9yUHJvcGVydGllcy5yZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzID0gYXNzaWduKHt9LCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHN1cGVyLl9fc2V0Q29yZVByb3BlcnRpZXNfXyh7IGJpbmQ6IHRoaXMsIGJhc2VSZWdpc3RyeTogcHJvcGVydGllcy5yZWdpc3RyeSB9KTtcbiAgICAgICAgICAgIHN1cGVyLl9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRvSHRtbCgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlICE9PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCB8fCAhdGhpcy5fcHJvamVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGlzIG5vdCBhdHRhY2hlZCwgY2Fubm90IHJldHVybiBhbiBIVE1MIHN0cmluZyBvZiBwcm9qZWN0aW9uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb24uZG9tTm9kZS5jaGlsZE5vZGVzWzBdLm91dGVySFRNTDtcbiAgICAgICAgfVxuICAgICAgICBhZnRlclJlbmRlcihyZXN1bHQpIHtcbiAgICAgICAgICAgIGxldCBub2RlID0gcmVzdWx0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnIHx8IHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSB2KCdzcGFuJywge30sIFtyZXN1bHRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgX2F0dGFjaCh7IHR5cGUsIHJvb3QgfSkge1xuICAgICAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3QgPSByb290O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2F0dGFjaEhhbmRsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hIYW5kbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQ7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSB7XG4gICAgICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuRGV0YWNoZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vd24oaGFuZGxlKTtcbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaEhhbmRsZSA9IGhhbmRsZTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMsIHsgc3luYzogIXRoaXMuX2FzeW5jIH0pO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBdHRhY2hUeXBlLkFwcGVuZDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbiA9IGRvbS5hcHBlbmQodGhpcy5yb290LCB0aGlzLCB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQXR0YWNoVHlwZS5NZXJnZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbiA9IGRvbS5tZXJnZSh0aGlzLnJvb3QsIHRoaXMsIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoSGFuZGxlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGFmdGVyUmVuZGVyKClcbiAgICBdLCBQcm9qZWN0b3IucHJvdG90eXBlLCBcImFmdGVyUmVuZGVyXCIsIG51bGwpO1xuICAgIHJldHVybiBQcm9qZWN0b3I7XG59XG5leHBvcnQgZGVmYXVsdCBQcm9qZWN0b3JNaXhpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVByb2plY3Rvci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL21peGlucy9Qcm9qZWN0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICcuLy4uL0luamVjdG9yJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9pbmplY3QnO1xuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi8uLi9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBkaWZmUHJvcGVydHkgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5JztcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICcuLy4uL2RpZmYnO1xuY29uc3QgVEhFTUVfS0VZID0gJyBfa2V5JztcbmV4cG9ydCBjb25zdCBJTkpFQ1RFRF9USEVNRV9LRVkgPSBTeW1ib2woJ3RoZW1lJyk7XG4vKipcbiAqIERlY29yYXRvciBmb3IgYmFzZSBjc3MgY2xhc3Nlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWUodGhlbWUpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycsIHRoZW1lKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHJldmVyc2UgbG9va3VwIGZvciB0aGUgY2xhc3NlcyBwYXNzZWQgaW4gdmlhIHRoZSBgdGhlbWVgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBjbGFzc2VzIFRoZSBiYXNlQ2xhc3NlcyBvYmplY3RcbiAqIEByZXF1aXJlc1xuICovXG5mdW5jdGlvbiBjcmVhdGVUaGVtZUNsYXNzZXNMb29rdXAoY2xhc3Nlcykge1xuICAgIHJldHVybiBjbGFzc2VzLnJlZHVjZSgoY3VycmVudENsYXNzTmFtZXMsIGJhc2VDbGFzcykgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhiYXNlQ2xhc3MpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY3VycmVudENsYXNzTmFtZXNbYmFzZUNsYXNzW2tleV1dID0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDbGFzc05hbWVzO1xuICAgIH0sIHt9KTtcbn1cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBpcyBnaXZlbiBhIHRoZW1lIGFuZCBhbiBvcHRpb25hbCByZWdpc3RyeSwgdGhlIHRoZW1lXG4gKiBpbmplY3RvciBpcyBkZWZpbmVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIHRoZW1lLlxuICpcbiAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gc2V0XG4gKiBAcGFyYW0gdGhlbWVSZWdpc3RyeSByZWdpc3RyeSB0byBkZWZpbmUgdGhlIHRoZW1lIGluamVjdG9yIGFnYWluc3QuIERlZmF1bHRzXG4gKiB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XG4gKlxuICogQHJldHVybnMgdGhlIHRoZW1lIGluamVjdG9yIHVzZWQgdG8gc2V0IHRoZSB0aGVtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoZW1lLCB0aGVtZVJlZ2lzdHJ5KSB7XG4gICAgY29uc3QgdGhlbWVJbmplY3RvciA9IG5ldyBJbmplY3Rvcih0aGVtZSk7XG4gICAgdGhlbWVSZWdpc3RyeS5kZWZpbmVJbmplY3RvcihJTkpFQ1RFRF9USEVNRV9LRVksIChpbnZhbGlkYXRvcikgPT4ge1xuICAgICAgICB0aGVtZUluamVjdG9yLnNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHRoZW1lSW5qZWN0b3IuZ2V0KCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoZW1lSW5qZWN0b3I7XG59XG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYXNzIGRlY29yYXRlZCB3aXRoIHdpdGggVGhlbWVkIGZ1bmN0aW9uYWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lZE1peGluKEJhc2UpIHtcbiAgICBsZXQgVGhlbWVkID0gY2xhc3MgVGhlbWVkIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVnaXN0ZXJlZCBiYXNlIHRoZW1lIGtleXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZUtleXMgPSBbXTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW5kaWNhdGVzIGlmIGNsYXNzZXMgbWV0YSBkYXRhIG5lZWQgdG8gYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTG9hZGVkIHRoZW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX3RoZW1lID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhlbWUoY2xhc3Nlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlY2FsY3VsYXRlQ2xhc3Nlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlY2FsY3VsYXRlVGhlbWVDbGFzc2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLm1hcCgoY2xhc3NOYW1lKSA9PiB0aGlzLl9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRoZW1lQ2xhc3MoY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9uIGZpcmVkIHdoZW4gYHRoZW1lYCBvciBgZXh0cmFDbGFzc2VzYCBhcmUgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIG9uUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkIHx8IGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHRyYUNsYXNzZXMgPSB0aGlzLnByb3BlcnRpZXMuZXh0cmFDbGFzc2VzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDbGFzc05hbWUgPSB0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cFtjbGFzc05hbWVdO1xuICAgICAgICAgICAgbGV0IHJlc3VsdENsYXNzTmFtZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhlbWVDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENsYXNzIG5hbWU6ICcke2NsYXNzTmFtZX0nIG5vdCBmb3VuZCBpbiB0aGVtZWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2goZXh0cmFDbGFzc2VzW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2xhc3NOYW1lcy5wdXNoKHRoaXMuX3RoZW1lW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2godGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZVt0aGVtZUNsYXNzTmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdENsYXNzTmFtZXMuam9pbignICcpO1xuICAgICAgICB9XG4gICAgICAgIF9yZWNhbGN1bGF0ZVRoZW1lQ2xhc3NlcygpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdGhlbWUgPSB7fSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgYmFzZVRoZW1lcyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiYXNlVGhlbWVDbGFzc2VzJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lID0gYmFzZVRoZW1lcy5yZWR1Y2UoKGZpbmFsQmFzZVRoZW1lLCBiYXNlVGhlbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2EgPSBUSEVNRV9LRVksIGtleSA9IGJhc2VUaGVtZVtfYV0sIGNsYXNzZXMgPSB0c2xpYl8xLl9fcmVzdChiYXNlVGhlbWUsIFt0eXBlb2YgX2EgPT09IFwic3ltYm9sXCIgPyBfYSA6IF9hICsgXCJcIl0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaW5hbEJhc2VUaGVtZSwgY2xhc3Nlcyk7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2VUaGVtZUNsYXNzZXNSZXZlcnNlTG9va3VwID0gY3JlYXRlVGhlbWVDbGFzc2VzTG9va3VwKGJhc2VUaGVtZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5yZWR1Y2UoKGJhc2VUaGVtZSwgdGhlbWVLZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVRoZW1lLCB0aGVtZVt0aGVtZUtleV0pO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGRpZmZQcm9wZXJ0eSgndGhlbWUnLCBzaGFsbG93KSxcbiAgICAgICAgZGlmZlByb3BlcnR5KCdleHRyYUNsYXNzZXMnLCBzaGFsbG93KVxuICAgIF0sIFRoZW1lZC5wcm90b3R5cGUsIFwib25Qcm9wZXJ0aWVzQ2hhbmdlZFwiLCBudWxsKTtcbiAgICBUaGVtZWQgPSB0c2xpYl8xLl9fZGVjb3JhdGUoW1xuICAgICAgICBpbmplY3Qoe1xuICAgICAgICAgICAgbmFtZTogSU5KRUNURURfVEhFTUVfS0VZLFxuICAgICAgICAgICAgZ2V0UHJvcGVydGllczogKHRoZW1lLCBwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLnRoZW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHRoZW1lIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICBdLCBUaGVtZWQpO1xuICAgIHJldHVybiBUaGVtZWQ7XG59XG5leHBvcnQgZGVmYXVsdCBUaGVtZWRNaXhpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRoZW1lZC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1RoZW1lZC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgV2lkZ2V0QmFzZSwgbm9CaW5kIH0gZnJvbSAnLi9XaWRnZXRCYXNlJztcbmltcG9ydCB7IFByb2plY3Rvck1peGluIH0gZnJvbSAnLi9taXhpbnMvUHJvamVjdG9yJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuLi9zaGltL2FycmF5JztcbmltcG9ydCB7IHcsIGRvbSB9IGZyb20gJy4vZCc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJy4uL3NoaW0vZ2xvYmFsJztcbmltcG9ydCB7IHJlZ2lzdGVyVGhlbWVJbmplY3RvciB9IGZyb20gJy4vbWl4aW5zL1RoZW1lZCc7XG5pbXBvcnQgeyBhbHdheXNSZW5kZXIgfSBmcm9tICcuL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyJztcbmV4cG9ydCB2YXIgQ3VzdG9tRWxlbWVudENoaWxkVHlwZTtcbihmdW5jdGlvbiAoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSkge1xuICAgIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGVbXCJET0pPXCJdID0gXCJET0pPXCI7XG4gICAgQ3VzdG9tRWxlbWVudENoaWxkVHlwZVtcIk5PREVcIl0gPSBcIk5PREVcIjtcbiAgICBDdXN0b21FbGVtZW50Q2hpbGRUeXBlW1wiVEVYVFwiXSA9IFwiVEVYVFwiO1xufSkoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSB8fCAoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gRG9tVG9XaWRnZXRXcmFwcGVyKGRvbU5vZGUpIHtcbiAgICBsZXQgRG9tVG9XaWRnZXRXcmFwcGVyID0gY2xhc3MgRG9tVG9XaWRnZXRXcmFwcGVyIGV4dGVuZHMgV2lkZ2V0QmFzZSB7XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpLnJlZHVjZSgocHJvcHMsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKCdvbicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGBfXyR7a2V5fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb3BzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICByZXR1cm4gZG9tKHsgbm9kZTogZG9tTm9kZSwgcHJvcHM6IHByb3BlcnRpZXMsIGRpZmZUeXBlOiAnZG9tJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZ2V0IGRvbU5vZGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9tTm9kZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRG9tVG9XaWRnZXRXcmFwcGVyID0gdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAgICAgICAgYWx3YXlzUmVuZGVyKClcbiAgICBdLCBEb21Ub1dpZGdldFdyYXBwZXIpO1xuICAgIHJldHVybiBEb21Ub1dpZGdldFdyYXBwZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKGRlc2NyaXB0b3IsIFdpZGdldENvbnN0cnVjdG9yKSB7XG4gICAgY29uc3QgeyBhdHRyaWJ1dGVzLCBjaGlsZFR5cGUsIHJlZ2lzdHJ5RmFjdG9yeSB9ID0gZGVzY3JpcHRvcjtcbiAgICBjb25zdCBhdHRyaWJ1dGVNYXAgPSB7fTtcbiAgICBhdHRyaWJ1dGVzLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGF0dHJpYnV0ZU1hcFthdHRyaWJ1dGVOYW1lXSA9IHByb3BlcnR5TmFtZTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuID0gW107XG4gICAgICAgICAgICB0aGlzLl9ldmVudFByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faW5pdGlhbGlzZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkb21Qcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICBjb25zdCB7IGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGV2ZW50cyB9ID0gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wcm9wZXJ0aWVzLCB0aGlzLl9hdHRyaWJ1dGVzVG9Qcm9wZXJ0aWVzKGF0dHJpYnV0ZXMpKTtcbiAgICAgICAgICAgIFsuLi5hdHRyaWJ1dGVzLCAuLi5wcm9wZXJ0aWVzXS5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnX18nKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUHJvcGVydHlOYW1lICE9PSBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1tmaWx0ZXJlZFByb3BlcnR5TmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4gdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNldDogKHZhbHVlKSA9PiB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV2ZW50cy5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJ19fb24nKTtcbiAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW2ZpbHRlcmVkUHJvcGVydHlOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9nZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNldDogKHZhbHVlKSA9PiB0aGlzLl9zZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudENhbGxiYWNrID0gdGhpcy5fZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50Q2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Q2FsbGJhY2soLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBhcmdzXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCBkb21Qcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLlRFWFQgPyB0aGlzLmNoaWxkTm9kZXMgOiB0aGlzLmNoaWxkcmVuO1xuICAgICAgICAgICAgZnJvbShjaGlsZHJlbikuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLXJlbmRlcicsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtY29ubmVjdGVkJywgKCkgPT4gdGhpcy5fcmVuZGVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihjaGlsZE5vZGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goZG9tKHsgbm9kZTogY2hpbGROb2RlLCBkaWZmVHlwZTogJ2RvbScgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLWNvbm5lY3RlZCcsIChlKSA9PiB0aGlzLl9jaGlsZENvbm5lY3RlZChlKSk7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRQcm9wZXJ0aWVzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckNoaWxkcmVuID0gKCkgPT4gdGhpcy5fX2NoaWxkcmVuX18oKTtcbiAgICAgICAgICAgIGNvbnN0IFdyYXBwZXIgPSBjbGFzcyBleHRlbmRzIFdpZGdldEJhc2Uge1xuICAgICAgICAgICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHcoV2lkZ2V0Q29uc3RydWN0b3IsIHdpZGdldFByb3BlcnRpZXMsIHJlbmRlckNoaWxkcmVuKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IHJlZ2lzdHJ5RmFjdG9yeSgpO1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDb250ZXh0ID0gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoaXMuX2dldFRoZW1lKCksIHJlZ2lzdHJ5KTtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdkb2pvLXRoZW1lLXNldCcsICgpID0+IHRoZW1lQ29udGV4dC5zZXQodGhpcy5fZ2V0VGhlbWUoKSkpO1xuICAgICAgICAgICAgY29uc3QgUHJvamVjdG9yID0gUHJvamVjdG9yTWl4aW4oV3JhcHBlcik7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3IgPSBuZXcgUHJvamVjdG9yKCk7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3Iuc2V0UHJvcGVydGllcyh7IHJlZ2lzdHJ5IH0pO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yLmFwcGVuZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rvam8tY2UtY29ubmVjdGVkJywge1xuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgX2dldFRoZW1lKCkge1xuICAgICAgICAgICAgaWYgKGdsb2JhbCAmJiBnbG9iYWwuZG9qb2NlICYmIGdsb2JhbC5kb2pvY2UudGhlbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsLmRvam9jZS50aGVtZXNbZ2xvYmFsLmRvam9jZS50aGVtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2NoaWxkQ29ubmVjdGVkKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBlLmRldGFpbDtcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudE5vZGUgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLl9jaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gY2hpbGQuZG9tTm9kZSA9PT0gbm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLXJlbmRlcicsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChEb21Ub1dpZGdldFdyYXBwZXIobm9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3JlbmRlcigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3IuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rvam8tY2UtcmVuZGVyJywge1xuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9fcHJvcGVydGllc19fKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Byb3BlcnRpZXMsIHRoaXMuX2V2ZW50UHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgX19jaGlsZHJlbl9fKCkge1xuICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuLmZpbHRlcigoQ2hpbGQpID0+IENoaWxkLmRvbU5vZGUuaXNXaWRnZXQpLm1hcCgoQ2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkb21Ob2RlIH0gPSBDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHcoQ2hpbGQsIE9iamVjdC5hc3NpZ24oe30sIGRvbU5vZGUuX19wcm9wZXJ0aWVzX18oKSksIFsuLi5kb21Ob2RlLl9fY2hpbGRyZW5fXygpXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZFZhbHVlLCB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gYXR0cmlidXRlTWFwW25hbWVdO1xuICAgICAgICAgICAgdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgX3NldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBfc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHZhbHVlW25vQmluZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIF9hdHRyaWJ1dGVzVG9Qcm9wZXJ0aWVzKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlZHVjZSgocHJvcGVydGllcywgcHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYXApO1xuICAgICAgICB9XG4gICAgICAgIGdldCBpc1dpZGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcihXaWRnZXRDb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBXaWRnZXRDb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgV2lkZ2V0Q29uc3RydWN0b3IucHJvdG90eXBlLl9fY3VzdG9tRWxlbWVudERlc2NyaXB0b3I7XG4gICAgaWYgKCFkZXNjcmlwdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBkZXNjcmlwdG9yIGZvciBDdXN0b20gRWxlbWVudCwgaGF2ZSB5b3UgYWRkZWQgdGhlIEBjdXN0b21FbGVtZW50IGRlY29yYXRvciB0byB5b3VyIFdpZGdldD8nKTtcbiAgICB9XG4gICAgZ2xvYmFsLmN1c3RvbUVsZW1lbnRzLmRlZmluZShkZXNjcmlwdG9yLnRhZ05hbWUsIGNyZWF0ZShkZXNjcmlwdG9yLCBXaWRnZXRDb25zdHJ1Y3RvcikpO1xufVxuZXhwb3J0IGRlZmF1bHQgcmVnaXN0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdpc3RlckN1c3RvbUVsZW1lbnQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvcmVnaXN0ZXJDdXN0b21FbGVtZW50Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi4vc2hpbS9nbG9iYWwnO1xuaW1wb3J0IHsgZnJvbSBhcyBhcnJheUZyb20gfSBmcm9tICcuLi9zaGltL2FycmF5JztcbmltcG9ydCB7IGlzV05vZGUsIGlzVk5vZGUsIGlzRG9tVk5vZGUsIFZOT0RFLCBXTk9ERSB9IGZyb20gJy4vZCc7XG5pbXBvcnQgeyBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvciB9IGZyb20gJy4vUmVnaXN0cnknO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnLi4vc2hpbS9XZWFrTWFwJztcbmNvbnN0IE5BTUVTUEFDRV9XMyA9ICdodHRwOi8vd3d3LnczLm9yZy8nO1xuY29uc3QgTkFNRVNQQUNFX1NWRyA9IE5BTUVTUEFDRV9XMyArICcyMDAwL3N2Zyc7XG5jb25zdCBOQU1FU1BBQ0VfWExJTksgPSBOQU1FU1BBQ0VfVzMgKyAnMTk5OS94bGluayc7XG5jb25zdCBlbXB0eUFycmF5ID0gW107XG5jb25zdCBub2RlT3BlcmF0aW9ucyA9IFsnZm9jdXMnLCAnYmx1cicsICdzY3JvbGxJbnRvVmlldycsICdjbGljayddO1xuZXhwb3J0IGNvbnN0IHdpZGdldEluc3RhbmNlTWFwID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IGluc3RhbmNlTWFwID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IG5leHRTaWJsaW5nTWFwID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IHByb2plY3RvclN0YXRlTWFwID0gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIHNhbWUoZG5vZGUxLCBkbm9kZTIpIHtcbiAgICBpZiAoaXNWTm9kZShkbm9kZTEpICYmIGlzVk5vZGUoZG5vZGUyKSkge1xuICAgICAgICBpZiAoaXNEb21WTm9kZShkbm9kZTEpIHx8IGlzRG9tVk5vZGUoZG5vZGUyKSkge1xuICAgICAgICAgICAgaWYgKGRub2RlMS5kb21Ob2RlICE9PSBkbm9kZTIuZG9tTm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZG5vZGUxLnRhZyAhPT0gZG5vZGUyLnRhZykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkbm9kZTEucHJvcGVydGllcy5rZXkgIT09IGRub2RlMi5wcm9wZXJ0aWVzLmtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1dOb2RlKGRub2RlMSkgJiYgaXNXTm9kZShkbm9kZTIpKSB7XG4gICAgICAgIGlmIChkbm9kZTEuaW5zdGFuY2UgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZG5vZGUyLndpZGdldENvbnN0cnVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkbm9kZTEud2lkZ2V0Q29uc3RydWN0b3IgIT09IGRub2RlMi53aWRnZXRDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkbm9kZTEucHJvcGVydGllcy5rZXkgIT09IGRub2RlMi5wcm9wZXJ0aWVzLmtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5jb25zdCBtaXNzaW5nVHJhbnNpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGUgYSB0cmFuc2l0aW9ucyBvYmplY3QgdG8gdGhlIHByb2plY3Rpb25PcHRpb25zIHRvIGRvIGFuaW1hdGlvbnMnKTtcbn07XG5mdW5jdGlvbiBnZXRQcm9qZWN0aW9uT3B0aW9ucyhwcm9qZWN0b3JPcHRpb25zLCBwcm9qZWN0b3JJbnN0YW5jZSkge1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgICBuYW1lc3BhY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgc3R5bGVBcHBseWVyOiBmdW5jdGlvbiAoZG9tTm9kZSwgc3R5bGVOYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgZG9tTm9kZS5zdHlsZVtzdHlsZU5hbWVdID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zaXRpb25zOiB7XG4gICAgICAgICAgICBlbnRlcjogbWlzc2luZ1RyYW5zaXRpb24sXG4gICAgICAgICAgICBleGl0OiBtaXNzaW5nVHJhbnNpdGlvblxuICAgICAgICB9LFxuICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgbWVyZ2U6IGZhbHNlLFxuICAgICAgICBzeW5jOiBmYWxzZSxcbiAgICAgICAgcHJvamVjdG9ySW5zdGFuY2VcbiAgICB9O1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgcHJvamVjdG9yT3B0aW9ucyk7XG59XG5mdW5jdGlvbiBjaGVja1N0eWxlVmFsdWUoc3R5bGVWYWx1ZSkge1xuICAgIGlmICh0eXBlb2Ygc3R5bGVWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHlsZSB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlRXZlbnQoZG9tTm9kZSwgZXZlbnROYW1lLCBjdXJyZW50VmFsdWUsIHByb2plY3Rpb25PcHRpb25zLCBiaW5kLCBwcmV2aW91c1ZhbHVlKSB7XG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xuICAgIGNvbnN0IGV2ZW50TWFwID0gcHJvamVjdG9yU3RhdGUubm9kZU1hcC5nZXQoZG9tTm9kZSkgfHwgbmV3IFdlYWtNYXAoKTtcbiAgICBpZiAocHJldmlvdXNWYWx1ZSkge1xuICAgICAgICBjb25zdCBwcmV2aW91c0V2ZW50ID0gZXZlbnRNYXAuZ2V0KHByZXZpb3VzVmFsdWUpO1xuICAgICAgICBkb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBwcmV2aW91c0V2ZW50KTtcbiAgICB9XG4gICAgbGV0IGNhbGxiYWNrID0gY3VycmVudFZhbHVlLmJpbmQoYmluZCk7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2lucHV0Jykge1xuICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5jYWxsKHRoaXMsIGV2dCk7XG4gICAgICAgICAgICBldnQudGFyZ2V0WydvbmlucHV0LXZhbHVlJ10gPSBldnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICB9LmJpbmQoYmluZCk7XG4gICAgfVxuICAgIGRvbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgICBldmVudE1hcC5zZXQoY3VycmVudFZhbHVlLCBjYWxsYmFjayk7XG4gICAgcHJvamVjdG9yU3RhdGUubm9kZU1hcC5zZXQoZG9tTm9kZSwgZXZlbnRNYXApO1xufVxuZnVuY3Rpb24gYWRkQ2xhc3Nlcyhkb21Ob2RlLCBjbGFzc2VzKSB7XG4gICAgaWYgKGNsYXNzZXMpIHtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkb21Ob2RlLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIGNsYXNzZXMpIHtcbiAgICBpZiAoY2xhc3Nlcykge1xuICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gY2xhc3Nlcy5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRvbU5vZGUuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGJ1aWxkUHJldmlvdXNQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzLCBjdXJyZW50KSB7XG4gICAgY29uc3QgeyBkaWZmVHlwZSwgcHJvcGVydGllcywgYXR0cmlidXRlcyB9ID0gY3VycmVudDtcbiAgICBpZiAoIWRpZmZUeXBlIHx8IGRpZmZUeXBlID09PSAndmRvbScpIHtcbiAgICAgICAgcmV0dXJuIHsgcHJvcGVydGllczogcHJldmlvdXMucHJvcGVydGllcywgYXR0cmlidXRlczogcHJldmlvdXMuYXR0cmlidXRlcywgZXZlbnRzOiBwcmV2aW91cy5ldmVudHMgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGlmZlR5cGUgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4geyBwcm9wZXJ0aWVzOiB7fSwgYXR0cmlidXRlczogcHJldmlvdXMuYXR0cmlidXRlcyA/IHt9IDogdW5kZWZpbmVkLCBldmVudHM6IHByZXZpb3VzLmV2ZW50cyB9O1xuICAgIH1cbiAgICBsZXQgbmV3UHJvcGVydGllcyA9IHtcbiAgICAgICAgcHJvcGVydGllczoge31cbiAgICB9O1xuICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIG5ld1Byb3BlcnRpZXMuYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBuZXdQcm9wZXJ0aWVzLmV2ZW50cyA9IHByZXZpb3VzLmV2ZW50cztcbiAgICAgICAgT2JqZWN0LmtleXMocHJvcGVydGllcykuZm9yRWFjaCgocHJvcE5hbWUpID0+IHtcbiAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMucHJvcGVydGllc1twcm9wTmFtZV0gPSBkb21Ob2RlW3Byb3BOYW1lXTtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGF0dHJOYW1lKSA9PiB7XG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLmF0dHJpYnV0ZXNbYXR0ck5hbWVdID0gZG9tTm9kZS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ld1Byb3BlcnRpZXM7XG4gICAgfVxuICAgIG5ld1Byb3BlcnRpZXMucHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLnJlZHVjZSgocHJvcHMsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgIHByb3BzW3Byb3BlcnR5XSA9IGRvbU5vZGUuZ2V0QXR0cmlidXRlKHByb3BlcnR5KSB8fCBkb21Ob2RlW3Byb3BlcnR5XTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH0sIHt9KTtcbiAgICByZXR1cm4gbmV3UHJvcGVydGllcztcbn1cbmZ1bmN0aW9uIG5vZGVPcGVyYXRpb24ocHJvcE5hbWUsIHByb3BWYWx1ZSwgcHJldmlvdXNWYWx1ZSwgZG9tTm9kZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3VsdCA9IHByb3BWYWx1ZSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gcHJvcFZhbHVlICYmICFwcmV2aW91c1ZhbHVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMsIHByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zLCBvbmx5RXZlbnRzID0gZmFsc2UpIHtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgY29uc3QgZXZlbnRNYXAgPSBwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLmdldChkb21Ob2RlKTtcbiAgICBpZiAoZXZlbnRNYXApIHtcbiAgICAgICAgT2JqZWN0LmtleXMocHJldmlvdXNQcm9wZXJ0aWVzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNFdmVudCA9IHByb3BOYW1lLnN1YnN0cigwLCAyKSA9PT0gJ29uJyB8fCBvbmx5RXZlbnRzO1xuICAgICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gb25seUV2ZW50cyA/IHByb3BOYW1lIDogcHJvcE5hbWUuc3Vic3RyKDIpO1xuICAgICAgICAgICAgaWYgKGlzRXZlbnQgJiYgIXByb3BlcnRpZXNbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRDYWxsYmFjayA9IGV2ZW50TWFwLmdldChwcmV2aW91c1Byb3BlcnRpZXNbcHJvcE5hbWVdKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZShkb21Ob2RlLCBhdHRyTmFtZSwgYXR0clZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UgPT09IE5BTUVTUEFDRV9TVkcgJiYgYXR0ck5hbWUgPT09ICdocmVmJykge1xuICAgICAgICBkb21Ob2RlLnNldEF0dHJpYnV0ZU5TKE5BTUVTUEFDRV9YTElOSywgYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKChhdHRyTmFtZSA9PT0gJ3JvbGUnICYmIGF0dHJWYWx1ZSA9PT0gJycpIHx8IGF0dHJWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvbU5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRvbU5vZGUuc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZSwgcHJldmlvdXNBdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGNvbnN0IGF0dHJOYW1lcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IGF0dHJDb3VudCA9IGF0dHJOYW1lcy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBhdHRyTmFtZSA9IGF0dHJOYW1lc1tpXTtcbiAgICAgICAgY29uc3QgYXR0clZhbHVlID0gYXR0cmlidXRlc1thdHRyTmFtZV07XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQXR0clZhbHVlID0gcHJldmlvdXNBdHRyaWJ1dGVzW2F0dHJOYW1lXTtcbiAgICAgICAgaWYgKGF0dHJWYWx1ZSAhPT0gcHJldmlvdXNBdHRyVmFsdWUpIHtcbiAgICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZShkb21Ob2RlLCBhdHRyTmFtZSwgYXR0clZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcyA9IHRydWUpIHtcbiAgICBsZXQgcHJvcGVydGllc1VwZGF0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICBjb25zdCBwcm9wQ291bnQgPSBwcm9wTmFtZXMubGVuZ3RoO1xuICAgIGlmIChwcm9wTmFtZXMuaW5kZXhPZignY2xhc3NlcycpID09PSAtMSAmJiBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3NlcykpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcyAmJiByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMsIHByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHByb3BOYW1lID0gcHJvcE5hbWVzW2ldO1xuICAgICAgICBsZXQgcHJvcFZhbHVlID0gcHJvcGVydGllc1twcm9wTmFtZV07XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBwcmV2aW91c1Byb3BlcnRpZXNbcHJvcE5hbWVdO1xuICAgICAgICBpZiAocHJvcE5hbWUgPT09ICdjbGFzc2VzJykge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNDbGFzc2VzID0gQXJyYXkuaXNBcnJheShwcmV2aW91c1ZhbHVlKSA/IHByZXZpb3VzVmFsdWUgOiBbcHJldmlvdXNWYWx1ZV07XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q2xhc3NlcyA9IEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSA/IHByb3BWYWx1ZSA6IFtwcm9wVmFsdWVdO1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2xhc3NlcyAmJiBwcmV2aW91c0NsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICghcHJvcFZhbHVlIHx8IHByb3BWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c0NsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNDbGFzc2VzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3NlcyA9IFsuLi5jdXJyZW50Q2xhc3Nlc107XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldmlvdXNDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0NsYXNzTmFtZSA9IHByZXZpb3VzQ2xhc3Nlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzSW5kZXggPSBuZXdDbGFzc2VzLmluZGV4T2YocHJldmlvdXNDbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc0luZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NsYXNzZXMuc3BsaWNlKGNsYXNzSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0NsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZENsYXNzZXMoZG9tTm9kZSwgbmV3Q2xhc3Nlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZENsYXNzZXMoZG9tTm9kZSwgY3VycmVudENsYXNzZXNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlT3BlcmF0aW9ucy5pbmRleE9mKHByb3BOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIG5vZGVPcGVyYXRpb24ocHJvcE5hbWUsIHByb3BWYWx1ZSwgcHJldmlvdXNWYWx1ZSwgZG9tTm9kZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSAnc3R5bGVzJykge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzdHlsZUNvdW50ID0gc3R5bGVOYW1lcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0eWxlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlTmFtZSA9IHN0eWxlTmFtZXNbal07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3R5bGVWYWx1ZSA9IHByb3BWYWx1ZVtzdHlsZU5hbWVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFN0eWxlVmFsdWUgPSBwcmV2aW91c1ZhbHVlICYmIHByZXZpb3VzVmFsdWVbc3R5bGVOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAobmV3U3R5bGVWYWx1ZSA9PT0gb2xkU3R5bGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1VwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChuZXdTdHlsZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrU3R5bGVWYWx1ZShuZXdTdHlsZVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMuc3R5bGVBcHBseWVyKGRvbU5vZGUsIHN0eWxlTmFtZSwgbmV3U3R5bGVWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5zdHlsZUFwcGx5ZXIoZG9tTm9kZSwgc3R5bGVOYW1lLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFwcm9wVmFsdWUgJiYgdHlwZW9mIHByZXZpb3VzVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcE5hbWUgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21WYWx1ZSA9IGRvbU5vZGVbcHJvcE5hbWVdO1xuICAgICAgICAgICAgICAgIGlmIChkb21WYWx1ZSAhPT0gcHJvcFZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIChkb21Ob2RlWydvbmlucHV0LXZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgID8gZG9tVmFsdWUgPT09IGRvbU5vZGVbJ29uaW5wdXQtdmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwcm9wVmFsdWUgIT09IHByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlWydvbmlucHV0LXZhbHVlJ10gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcm9wVmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1VwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3BOYW1lICE9PSAna2V5JyAmJiBwcm9wVmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wTmFtZS5sYXN0SW5kZXhPZignb24nLCAwKSA9PT0gMCAmJiBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlRXZlbnQoZG9tTm9kZSwgcHJvcE5hbWUuc3Vic3RyKDIpLCBwcm9wVmFsdWUsIHByb2plY3Rpb25PcHRpb25zLCBwcm9wZXJ0aWVzLmJpbmQsIHByZXZpb3VzVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiBwcm9wTmFtZSAhPT0gJ2lubmVySFRNTCcgJiYgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZShkb21Ob2RlLCBwcm9wTmFtZSwgcHJvcFZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSAnc2Nyb2xsTGVmdCcgfHwgcHJvcE5hbWUgPT09ICdzY3JvbGxUb3AnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb21Ob2RlW3Byb3BOYW1lXSAhPT0gcHJvcFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcGVydGllc1VwZGF0ZWQ7XG59XG5mdW5jdGlvbiBmaW5kSW5kZXhPZkNoaWxkKGNoaWxkcmVuLCBzYW1lQXMsIHN0YXJ0KSB7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNhbWUoY2hpbGRyZW5baV0sIHNhbWVBcykpIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b1BhcmVudFZOb2RlKGRvbU5vZGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0YWc6ICcnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgICAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgICAgICAgZG9tTm9kZSxcbiAgICAgICAgdHlwZTogVk5PREVcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvVGV4dFZOb2RlKGRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0YWc6ICcnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgICAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgICAgICAgdGV4dDogYCR7ZGF0YX1gLFxuICAgICAgICBkb21Ob2RlOiB1bmRlZmluZWQsXG4gICAgICAgIHR5cGU6IFZOT0RFXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIHJlbmRlcmVkOiBbXSxcbiAgICAgICAgY29yZVByb3BlcnRpZXM6IGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcyxcbiAgICAgICAgY2hpbGRyZW46IGluc3RhbmNlLmNoaWxkcmVuLFxuICAgICAgICB3aWRnZXRDb25zdHJ1Y3RvcjogaW5zdGFuY2UuY29uc3RydWN0b3IsXG4gICAgICAgIHByb3BlcnRpZXM6IGluc3RhbmNlRGF0YS5pbnB1dFByb3BlcnRpZXMsXG4gICAgICAgIHR5cGU6IFdOT0RFXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkcmVuLCBpbnN0YW5jZSkge1xuICAgIGlmIChjaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBlbXB0eUFycmF5O1xuICAgIH1cbiAgICBjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4gOiBbY2hpbGRyZW5dO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOykge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCB8fCBjaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY2hpbGRyZW5baV0gPSB0b1RleHRWTm9kZShjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNWTm9kZShjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQucHJvcGVydGllcy5iaW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQucHJvcGVydGllcy5iaW5kID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLmNvcmVQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmNvcmVQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmluZDogaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlUmVnaXN0cnk6IGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iYXNlUmVnaXN0cnlcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlbjtcbn1cbmZ1bmN0aW9uIG5vZGVBZGRlZChkbm9kZSwgdHJhbnNpdGlvbnMpIHtcbiAgICBpZiAoaXNWTm9kZShkbm9kZSkgJiYgZG5vZGUucHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBlbnRlckFuaW1hdGlvbiA9IGRub2RlLnByb3BlcnRpZXMuZW50ZXJBbmltYXRpb247XG4gICAgICAgIGlmIChlbnRlckFuaW1hdGlvbikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRlckFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGVudGVyQW5pbWF0aW9uKGRub2RlLmRvbU5vZGUsIGRub2RlLnByb3BlcnRpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuZW50ZXIoZG5vZGUuZG9tTm9kZSwgZG5vZGUucHJvcGVydGllcywgZW50ZXJBbmltYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gbm9kZVRvUmVtb3ZlKGRub2RlLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBpZiAoaXNXTm9kZShkbm9kZSkpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGluc3RhbmNlTWFwLmdldChkbm9kZS5pbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gKGl0ZW0gPyBpdGVtLmRub2RlLnJlbmRlcmVkIDogZG5vZGUucmVuZGVyZWQpIHx8IGVtcHR5QXJyYXk7XG4gICAgICAgIGlmIChkbm9kZS5pbnN0YW5jZSkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGRub2RlLmluc3RhbmNlKTtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5vbkRldGFjaCgpO1xuICAgICAgICAgICAgaW5zdGFuY2VNYXAuZGVsZXRlKGRub2RlLmluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlcmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBub2RlVG9SZW1vdmUocmVuZGVyZWRbaV0sIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gZG5vZGUucHJvcGVydGllcztcbiAgICAgICAgaWYgKGRub2RlLmNoaWxkcmVuICYmIGRub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUoZG5vZGUuY2hpbGRyZW5baV0sIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhpdEFuaW1hdGlvbiA9IHByb3BlcnRpZXMuZXhpdEFuaW1hdGlvbjtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMgJiYgZXhpdEFuaW1hdGlvbikge1xuICAgICAgICAgICAgZG9tTm9kZS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlRG9tTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkb21Ob2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4aXRBbmltYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBleGl0QW5pbWF0aW9uKGRvbU5vZGUsIHJlbW92ZURvbU5vZGUsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmV4aXQoZG5vZGUuZG9tTm9kZSwgcHJvcGVydGllcywgZXhpdEFuaW1hdGlvbiwgcmVtb3ZlRG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRvbU5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlKTtcbiAgICAgICAgZG5vZGUuZG9tTm9kZSA9IHVuZGVmaW5lZDtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0Rpc3Rpbmd1aXNoYWJsZShjaGlsZE5vZGVzLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gY2hpbGROb2Rlc1tpbmRleFRvQ2hlY2tdO1xuICAgIGlmIChpc1ZOb2RlKGNoaWxkTm9kZSkgJiYgIWNoaWxkTm9kZS50YWcpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBUZXh0IG5vZGVzIG5lZWQgbm90IGJlIGRpc3Rpbmd1aXNoYWJsZVxuICAgIH1cbiAgICBjb25zdCB7IGtleSB9ID0gY2hpbGROb2RlLnByb3BlcnRpZXM7XG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpICE9PSBpbmRleFRvQ2hlY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gY2hpbGROb2Rlc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoc2FtZShub2RlLCBjaGlsZE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBub2RlSWRlbnRpZmllcjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TmFtZSA9IHBhcmVudEluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ3Vua25vd24nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNXTm9kZShjaGlsZE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlSWRlbnRpZmllciA9IGNoaWxkTm9kZS53aWRnZXRDb25zdHJ1Y3Rvci5uYW1lIHx8ICd1bmtub3duJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJZGVudGlmaWVyID0gY2hpbGROb2RlLnRhZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEEgd2lkZ2V0ICgke3BhcmVudE5hbWV9KSBoYXMgaGFkIGEgY2hpbGQgYWRkZGVkIG9yIHJlbW92ZWQsIGJ1dCB0aGV5IHdlcmUgbm90IGFibGUgdG8gdW5pcXVlbHkgaWRlbnRpZmllZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gcHJvdmlkZSBhIHVuaXF1ZSAna2V5JyBwcm9wZXJ0eSB3aGVuIHVzaW5nIHRoZSBzYW1lIHdpZGdldCBvciBlbGVtZW50ICgke25vZGVJZGVudGlmaWVyfSkgbXVsdGlwbGUgdGltZXMgYXMgc2libGluZ3NgKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIHNpYmxpbmdzLCBvbGRDaGlsZHJlbiwgbmV3Q2hpbGRyZW4sIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIG9sZENoaWxkcmVuID0gb2xkQ2hpbGRyZW4gfHwgZW1wdHlBcnJheTtcbiAgICBuZXdDaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICAgIGNvbnN0IG9sZENoaWxkcmVuTGVuZ3RoID0gb2xkQ2hpbGRyZW4ubGVuZ3RoO1xuICAgIGNvbnN0IG5ld0NoaWxkcmVuTGVuZ3RoID0gbmV3Q2hpbGRyZW4ubGVuZ3RoO1xuICAgIGNvbnN0IHRyYW5zaXRpb25zID0gcHJvamVjdGlvbk9wdGlvbnMudHJhbnNpdGlvbnM7XG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xuICAgIHByb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoICsgMSB9KTtcbiAgICBsZXQgb2xkSW5kZXggPSAwO1xuICAgIGxldCBuZXdJbmRleCA9IDA7XG4gICAgbGV0IGk7XG4gICAgbGV0IHRleHRVcGRhdGVkID0gZmFsc2U7XG4gICAgd2hpbGUgKG5ld0luZGV4IDwgbmV3Q2hpbGRyZW5MZW5ndGgpIHtcbiAgICAgICAgbGV0IG9sZENoaWxkID0gb2xkSW5kZXggPCBvbGRDaGlsZHJlbkxlbmd0aCA/IG9sZENoaWxkcmVuW29sZEluZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbmV3Q2hpbGQgPSBuZXdDaGlsZHJlbltuZXdJbmRleF07XG4gICAgICAgIGlmIChpc1ZOb2RlKG5ld0NoaWxkKSAmJiB0eXBlb2YgbmV3Q2hpbGQuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5ld0NoaWxkLmluc2VydGVkID0gaXNWTm9kZShvbGRDaGlsZCkgJiYgb2xkQ2hpbGQuaW5zZXJ0ZWQ7XG4gICAgICAgICAgICBhZGREZWZlcnJlZFByb3BlcnRpZXMobmV3Q2hpbGQsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2xkQ2hpbGQgIT09IHVuZGVmaW5lZCAmJiBzYW1lKG9sZENoaWxkLCBuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIG9sZEluZGV4Kys7XG4gICAgICAgICAgICBuZXdJbmRleCsrO1xuICAgICAgICAgICAgdGV4dFVwZGF0ZWQgPVxuICAgICAgICAgICAgICAgIHVwZGF0ZURvbShvbGRDaGlsZCwgbmV3Q2hpbGQsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgcGFyZW50SW5zdGFuY2UsIG9sZENoaWxkcmVuLnNsaWNlKG9sZEluZGV4KSwgbmV3Q2hpbGRyZW4uc2xpY2UobmV3SW5kZXgpKSB8fCB0ZXh0VXBkYXRlZDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbmRPbGRJbmRleCA9IGZpbmRJbmRleE9mQ2hpbGQob2xkQ2hpbGRyZW4sIG5ld0NoaWxkLCBvbGRJbmRleCArIDEpO1xuICAgICAgICBjb25zdCBhZGRDaGlsZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBpbnNlcnRCZWZvcmVEb21Ob2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGNoaWxkcmVuQXJyYXkgPSBvbGRDaGlsZHJlbjtcbiAgICAgICAgICAgIGxldCBuZXh0SW5kZXggPSBvbGRJbmRleCArIDE7XG4gICAgICAgICAgICBsZXQgY2hpbGQgPSBvbGRDaGlsZHJlbltvbGRJbmRleF07XG4gICAgICAgICAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgICAgICAgICAgY2hpbGQgPSBzaWJsaW5nc1swXTtcbiAgICAgICAgICAgICAgICBuZXh0SW5kZXggPSAxO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuQXJyYXkgPSBzaWJsaW5ncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgICAgICAgIGxldCBpbnNlcnRCZWZvcmVDaGlsZHJlbiA9IFtjaGlsZF07XG4gICAgICAgICAgICAgICAgd2hpbGUgKGluc2VydEJlZm9yZUNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRCZWZvcmUgPSBpbnNlcnRCZWZvcmVDaGlsZHJlbi5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNXTm9kZShpbnNlcnRCZWZvcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gaW5zdGFuY2VNYXAuZ2V0KGluc2VydEJlZm9yZS5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmRub2RlLnJlbmRlcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ucHVzaCguLi5pdGVtLmRub2RlLnJlbmRlcmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUuZG9tTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUuZG9tTm9kZS5wYXJlbnRFbGVtZW50ICE9PSBwYXJlbnRWTm9kZS5kb21Ob2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVEb21Ob2RlID0gaW5zZXJ0QmVmb3JlLmRvbU5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZUNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiBjaGlsZHJlbkFycmF5W25leHRJbmRleF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEJlZm9yZUNoaWxkcmVuLnB1c2goY2hpbGRyZW5BcnJheVtuZXh0SW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3JlYXRlRG9tKG5ld0NoaWxkLCBwYXJlbnRWTm9kZSwgbmV3Q2hpbGRyZW4uc2xpY2UobmV3SW5kZXggKyAxKSwgaW5zZXJ0QmVmb3JlRG9tTm9kZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIG5vZGVBZGRlZChuZXdDaGlsZCwgdHJhbnNpdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhUb0NoZWNrID0gbmV3SW5kZXg7XG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjaGVja0Rpc3Rpbmd1aXNoYWJsZShuZXdDaGlsZHJlbiwgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFvbGRDaGlsZCB8fCBmaW5kT2xkSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBhZGRDaGlsZCgpO1xuICAgICAgICAgICAgbmV3SW5kZXgrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbW92ZUNoaWxkID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhUb0NoZWNrID0gb2xkSW5kZXg7XG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjaGVja0Rpc3Rpbmd1aXNoYWJsZShvbGRDaGlsZHJlbiwgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpc1dOb2RlKG9sZENoaWxkKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpbnN0YW5jZU1hcC5nZXQob2xkQ2hpbGQuaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZENoaWxkID0gaXRlbS5kbm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlVG9SZW1vdmUob2xkQ2hpbGQsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbmROZXdJbmRleCA9IGZpbmRJbmRleE9mQ2hpbGQobmV3Q2hpbGRyZW4sIG9sZENoaWxkLCBuZXdJbmRleCArIDEpO1xuICAgICAgICBpZiAoZmluZE5ld0luZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmVtb3ZlQ2hpbGQoKTtcbiAgICAgICAgICAgIG9sZEluZGV4Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhZGRDaGlsZCgpO1xuICAgICAgICByZW1vdmVDaGlsZCgpO1xuICAgICAgICBvbGRJbmRleCsrO1xuICAgICAgICBuZXdJbmRleCsrO1xuICAgIH1cbiAgICBpZiAob2xkQ2hpbGRyZW5MZW5ndGggPiBvbGRJbmRleCkge1xuICAgICAgICAvLyBSZW1vdmUgY2hpbGQgZnJhZ21lbnRzXG4gICAgICAgIGZvciAoaSA9IG9sZEluZGV4OyBpIDwgb2xkQ2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhUb0NoZWNrID0gaTtcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGNoaWxkVG9SZW1vdmUgPSBvbGRDaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGlmIChpc1dOb2RlKGNoaWxkVG9SZW1vdmUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGluc3RhbmNlTWFwLmdldChjaGlsZFRvUmVtb3ZlLmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZFRvUmVtb3ZlID0gaXRlbS5kbm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlVG9SZW1vdmUoY2hpbGRUb1JlbW92ZSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGV4dFVwZGF0ZWQ7XG59XG5mdW5jdGlvbiBhZGRDaGlsZHJlbihwYXJlbnRWTm9kZSwgY2hpbGRyZW4sIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgaW5zZXJ0QmVmb3JlID0gdW5kZWZpbmVkLCBjaGlsZE5vZGVzKSB7XG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgaWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjaGlsZE5vZGVzID0gYXJyYXlGcm9tKHBhcmVudFZOb2RlLmRvbU5vZGUuY2hpbGROb2Rlcyk7XG4gICAgfVxuICAgIGNvbnN0IHRyYW5zaXRpb25zID0gcHJvamVjdGlvbk9wdGlvbnMudHJhbnNpdGlvbnM7XG4gICAgcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBkZXB0aDogcHJvamVjdGlvbk9wdGlvbnMuZGVwdGggKyAxIH0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdzID0gY2hpbGRyZW4uc2xpY2UoaSArIDEpO1xuICAgICAgICBpZiAoaXNWTm9kZShjaGlsZCkpIHtcbiAgICAgICAgICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5tZXJnZSAmJiBjaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRvbUVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoaWxkLmRvbU5vZGUgPT09IHVuZGVmaW5lZCAmJiBjaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCA9IGNoaWxkTm9kZXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbUVsZW1lbnQgJiYgZG9tRWxlbWVudC50YWdOYW1lID09PSAoY2hpbGQudGFnLnRvVXBwZXJDYXNlKCkgfHwgdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuZG9tTm9kZSA9IGRvbUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjcmVhdGVEb20oY2hpbGQsIHBhcmVudFZOb2RlLCBuZXh0U2libGluZ3MsIGluc2VydEJlZm9yZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNyZWF0ZURvbShjaGlsZCwgcGFyZW50Vk5vZGUsIG5leHRTaWJsaW5ncywgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGNoaWxkTm9kZXMpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVBZGRlZChjaGlsZCwgdHJhbnNpdGlvbnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGFkZENoaWxkcmVuKGRub2RlLCBkbm9kZS5jaGlsZHJlbiwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlLCB1bmRlZmluZWQpO1xuICAgIGlmICh0eXBlb2YgZG5vZGUuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgJiYgZG5vZGUuaW5zZXJ0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhZGREZWZlcnJlZFByb3BlcnRpZXMoZG5vZGUsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGRub2RlLmF0dHJpYnV0ZXMgJiYgZG5vZGUuZXZlbnRzKSB7XG4gICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZSwge30sIGRub2RlLmF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCB7fSwgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIGZhbHNlKTtcbiAgICAgICAgcmVtb3ZlT3JwaGFuZWRFdmVudHMoZG9tTm9kZSwge30sIGRub2RlLmV2ZW50cywgcHJvamVjdGlvbk9wdGlvbnMsIHRydWUpO1xuICAgICAgICBjb25zdCBldmVudHMgPSBkbm9kZS5ldmVudHM7XG4gICAgICAgIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50LCBldmVudHNbZXZlbnRdLCBwcm9qZWN0aW9uT3B0aW9ucywgZG5vZGUucHJvcGVydGllcy5iaW5kKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gbnVsbCAmJiBkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChwYXJlbnRJbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGQoZG9tTm9kZSwgYCR7ZG5vZGUucHJvcGVydGllcy5rZXl9YCk7XG4gICAgfVxuICAgIGRub2RlLmluc2VydGVkID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURvbShkbm9kZSwgcGFyZW50Vk5vZGUsIG5leHRTaWJsaW5ncywgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGNoaWxkTm9kZXMpIHtcbiAgICBsZXQgZG9tTm9kZTtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgaWYgKGlzV05vZGUoZG5vZGUpKSB7XG4gICAgICAgIGxldCB7IHdpZGdldENvbnN0cnVjdG9yIH0gPSBkbm9kZTtcbiAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgaWYgKCFpc1dpZGdldEJhc2VDb25zdHJ1Y3Rvcih3aWRnZXRDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwYXJlbnRJbnN0YW5jZURhdGEucmVnaXN0cnkoKS5nZXQod2lkZ2V0Q29uc3RydWN0b3IpO1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aWRnZXRDb25zdHJ1Y3RvciA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgd2lkZ2V0Q29uc3RydWN0b3IoKTtcbiAgICAgICAgZG5vZGUuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgbmV4dFNpYmxpbmdNYXAuc2V0KGluc3RhbmNlLCBuZXh0U2libGluZ3MpO1xuICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZS5wdXNoKHsgaW5zdGFuY2UsIGRlcHRoOiBwcm9qZWN0aW9uT3B0aW9ucy5kZXB0aCB9KTtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSB0cnVlO1xuICAgICAgICBpbnN0YW5jZS5fX3NldENvcmVQcm9wZXJ0aWVzX18oZG5vZGUuY29yZVByb3BlcnRpZXMpO1xuICAgICAgICBpbnN0YW5jZS5fX3NldENoaWxkcmVuX18oZG5vZGUuY2hpbGRyZW4pO1xuICAgICAgICBpbnN0YW5jZS5fX3NldFByb3BlcnRpZXNfXyhkbm9kZS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBpbnN0YW5jZS5fX3JlbmRlcl9fKCk7XG4gICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHJlbmRlcmVkKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJlbmRlcmVkID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihyZW5kZXJlZCwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgZG5vZGUucmVuZGVyZWQgPSBmaWx0ZXJlZFJlbmRlcmVkO1xuICAgICAgICAgICAgYWRkQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIGZpbHRlcmVkUmVuZGVyZWQsIHByb2plY3Rpb25PcHRpb25zLCBpbnN0YW5jZSwgaW5zZXJ0QmVmb3JlLCBjaGlsZE5vZGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2UsIHsgZG5vZGUsIHBhcmVudFZOb2RlIH0pO1xuICAgICAgICBpbnN0YW5jZURhdGEubm9kZUhhbmRsZXIuYWRkUm9vdCgpO1xuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5vbkF0dGFjaCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5tZXJnZSAmJiBwcm9qZWN0b3JTdGF0ZS5tZXJnZUVsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnQ7XG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5tZXJnZUVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpbml0UHJvcGVydGllc0FuZENoaWxkcmVuKGRvbU5vZGUsIGRub2RlLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvYyA9IHBhcmVudFZOb2RlLmRvbU5vZGUub3duZXJEb2N1bWVudDtcbiAgICAgICAgaWYgKCFkbm9kZS50YWcgJiYgdHlwZW9mIGRub2RlLnRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoZG5vZGUuZG9tTm9kZSAhPT0gdW5kZWZpbmVkICYmIHBhcmVudFZOb2RlLmRvbU5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdEb21Ob2RlID0gZG5vZGUuZG9tTm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRub2RlLnRleHQpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRWTm9kZS5kb21Ob2RlID09PSBkbm9kZS5kb21Ob2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5yZXBsYWNlQ2hpbGQobmV3RG9tTm9kZSwgZG5vZGUuZG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmFwcGVuZENoaWxkKG5ld0RvbU5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBkbm9kZS5kb21Ob2RlLnBhcmVudE5vZGUgJiYgZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRub2RlLmRvbU5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkbm9kZS5kb21Ob2RlID0gbmV3RG9tTm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKGRub2RlLnRleHQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmluc2VydEJlZm9yZShkb21Ob2RlLCBpbnNlcnRCZWZvcmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5hcHBlbmRDaGlsZChkb21Ob2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG5vZGUuZG9tTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRub2RlLnRhZyA9PT0gJ3N2ZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBuYW1lc3BhY2U6IE5BTUVTUEFDRV9TVkcgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50TlMocHJvamVjdGlvbk9wdGlvbnMubmFtZXNwYWNlLCBkbm9kZS50YWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlIHx8IGRvYy5jcmVhdGVFbGVtZW50KGRub2RlLnRhZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbml0UHJvcGVydGllc0FuZENoaWxkcmVuKGRvbU5vZGUsIGRub2RlLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5pbnNlcnRCZWZvcmUoZG9tTm9kZSwgaW5zZXJ0QmVmb3JlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRvbU5vZGUucGFyZW50Tm9kZSAhPT0gcGFyZW50Vk5vZGUuZG9tTm9kZSkge1xuICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQoZG9tTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVEb20ocHJldmlvdXMsIGRub2RlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50Vk5vZGUsIHBhcmVudEluc3RhbmNlLCBvbGROZXh0U2libGluZ3MsIG5leHRTaWJsaW5ncykge1xuICAgIGlmIChpc1dOb2RlKGRub2RlKSkge1xuICAgICAgICBjb25zdCB7IGluc3RhbmNlIH0gPSBwcmV2aW91cztcbiAgICAgICAgY29uc3QgeyBwYXJlbnRWTm9kZSwgZG5vZGU6IG5vZGUgfSA9IGluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUmVuZGVyZWQgPSBub2RlID8gbm9kZS5yZW5kZXJlZCA6IHByZXZpb3VzLnJlbmRlcmVkO1xuICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gdHJ1ZTtcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDb3JlUHJvcGVydGllc19fKGRub2RlLmNvcmVQcm9wZXJ0aWVzKTtcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDaGlsZHJlbl9fKGRub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgaW5zdGFuY2UuX19zZXRQcm9wZXJ0aWVzX18oZG5vZGUucHJvcGVydGllcyk7XG4gICAgICAgIG5leHRTaWJsaW5nTWFwLnNldChpbnN0YW5jZSwgbmV4dFNpYmxpbmdzKTtcbiAgICAgICAgZG5vZGUuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5kaXJ0eSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBpbnN0YW5jZS5fX3JlbmRlcl9fKCk7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4ocmVuZGVyZWQsIGluc3RhbmNlKTtcbiAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKHBhcmVudFZOb2RlLCBvbGROZXh0U2libGluZ3MsIHByZXZpb3VzUmVuZGVyZWQsIGRub2RlLnJlbmRlcmVkLCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgZG5vZGUucmVuZGVyZWQgPSBwcmV2aW91c1JlbmRlcmVkO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZSwgcGFyZW50Vk5vZGUgfSk7XG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGRSb290KCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAocHJldmlvdXMgPT09IGRub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9tTm9kZSA9IChkbm9kZS5kb21Ob2RlID0gcHJldmlvdXMuZG9tTm9kZSk7XG4gICAgICAgIGxldCB0ZXh0VXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgdXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoIWRub2RlLnRhZyAmJiB0eXBlb2YgZG5vZGUudGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChkbm9kZS50ZXh0ICE9PSBwcmV2aW91cy50ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RG9tTm9kZSA9IGRvbU5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkbm9kZS50ZXh0KTtcbiAgICAgICAgICAgICAgICBkb21Ob2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld0RvbU5vZGUsIGRvbU5vZGUpO1xuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSBuZXdEb21Ob2RlO1xuICAgICAgICAgICAgICAgIHRleHRVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFVwZGF0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG5vZGUudGFnICYmIGRub2RlLnRhZy5sYXN0SW5kZXhPZignc3ZnJywgMCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmV2aW91cy5jaGlsZHJlbiAhPT0gZG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oZG5vZGUuY2hpbGRyZW4sIHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICBkbm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIHVwZGF0ZWQgPVxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVDaGlsZHJlbihkbm9kZSwgb2xkTmV4dFNpYmxpbmdzLCBwcmV2aW91cy5jaGlsZHJlbiwgY2hpbGRyZW4sIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykgfHwgdXBkYXRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUHJvcGVydGllcyA9IGJ1aWxkUHJldmlvdXNQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzLCBkbm9kZSk7XG4gICAgICAgICAgICBpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5hdHRyaWJ1dGVzLCBkbm9kZS5hdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdXBkYXRlZCA9XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLnByb3BlcnRpZXMsIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zLCBmYWxzZSkgfHwgdXBkYXRlZDtcbiAgICAgICAgICAgICAgICByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuZXZlbnRzLCBkbm9kZS5ldmVudHMsIHByb2plY3Rpb25PcHRpb25zLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudHMgPSBkbm9kZS5ldmVudHM7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVFdmVudChkb21Ob2RlLCBldmVudCwgZXZlbnRzW2V2ZW50XSwgcHJvamVjdGlvbk9wdGlvbnMsIGRub2RlLnByb3BlcnRpZXMuYmluZCwgcHJldmlvdXNQcm9wZXJ0aWVzLmV2ZW50c1tldmVudF0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlZCA9XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLnByb3BlcnRpZXMsIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gbnVsbCAmJiBkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZURhdGEubm9kZUhhbmRsZXIuYWRkKGRvbU5vZGUsIGAke2Rub2RlLnByb3BlcnRpZXMua2V5fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVkICYmIGRub2RlLnByb3BlcnRpZXMgJiYgZG5vZGUucHJvcGVydGllcy51cGRhdGVBbmltYXRpb24pIHtcbiAgICAgICAgICAgIGRub2RlLnByb3BlcnRpZXMudXBkYXRlQW5pbWF0aW9uKGRvbU5vZGUsIGRub2RlLnByb3BlcnRpZXMsIHByZXZpb3VzLnByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKHZub2RlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIC8vIHRyYW5zZmVyIGFueSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCAtIGFzIHRoZXNlIG11c3QgYmUgZGVjb3JhdGVkIHByb3BlcnRpZXNcbiAgICB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMgPSB2bm9kZS5wcm9wZXJ0aWVzO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB2bm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayghIXZub2RlLmluc2VydGVkKTtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgdm5vZGUucHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnRpZXMsIHZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllcyk7XG4gICAgcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCB2bm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayghIXZub2RlLmluc2VydGVkKSwgdm5vZGUuZGVjb3JhdGVkRGVmZXJyZWRQcm9wZXJ0aWVzKTtcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyh2bm9kZS5kb21Ob2RlLCB2bm9kZS5wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIHZub2RlLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcnVuRGVmZXJyZWRSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgaWYgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xuICAgICAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBydW5BZnRlclJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xuICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoZ2xvYmFsLnJlcXVlc3RJZGxlQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGdsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gc2NoZWR1bGVSZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgaWYgKHByb2plY3Rpb25PcHRpb25zLnN5bmMpIHtcbiAgICAgICAgcmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvamVjdG9yU3RhdGUucmVuZGVyU2NoZWR1bGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvamVjdG9yU3RhdGUucmVuZGVyU2NoZWR1bGVkID0gZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgcHJvamVjdG9yU3RhdGUucmVuZGVyU2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlbmRlclF1ZXVlID0gcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWU7XG4gICAgY29uc3QgcmVuZGVycyA9IFsuLi5yZW5kZXJRdWV1ZV07XG4gICAgcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWUgPSBbXTtcbiAgICByZW5kZXJzLnNvcnQoKGEsIGIpID0+IGEuZGVwdGggLSBiLmRlcHRoKTtcbiAgICBjb25zdCBwcmV2aW91c2x5UmVuZGVyZWQgPSBbXTtcbiAgICB3aGlsZSAocmVuZGVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gcmVuZGVycy5zaGlmdCgpO1xuICAgICAgICBpZiAoaW5zdGFuY2VNYXAuaGFzKGluc3RhbmNlKSAmJiBwcmV2aW91c2x5UmVuZGVyZWQuaW5kZXhPZihpbnN0YW5jZSkgPT09IC0xKSB7XG4gICAgICAgICAgICBwcmV2aW91c2x5UmVuZGVyZWQucHVzaChpbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCB7IHBhcmVudFZOb2RlLCBkbm9kZSB9ID0gaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0U2libGluZ3MgPSBuZXh0U2libGluZ01hcC5nZXQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgdXBkYXRlRG9tKGRub2RlLCB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSksIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgaW5zdGFuY2UsIG5leHRTaWJsaW5ncywgbmV4dFNpYmxpbmdzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBydW5BZnRlclJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgcnVuRGVmZXJyZWRSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpO1xufVxuZXhwb3J0IGNvbnN0IGRvbSA9IHtcbiAgICBhcHBlbmQ6IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zdCBmaW5hbFByb2plY3Rvck9wdGlvbnMgPSBnZXRQcm9qZWN0aW9uT3B0aW9ucyhwcm9qZWN0aW9uT3B0aW9ucywgaW5zdGFuY2UpO1xuICAgICAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHtcbiAgICAgICAgICAgIGFmdGVyUmVuZGVyQ2FsbGJhY2tzOiBbXSxcbiAgICAgICAgICAgIGRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzOiBbXSxcbiAgICAgICAgICAgIG5vZGVNYXA6IG5ldyBXZWFrTWFwKCksXG4gICAgICAgICAgICByZW5kZXJTY2hlZHVsZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJlbmRlclF1ZXVlOiBbXSxcbiAgICAgICAgICAgIG1lcmdlOiBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZSB8fCBmYWxzZSxcbiAgICAgICAgICAgIG1lcmdlRWxlbWVudDogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50XG4gICAgICAgIH07XG4gICAgICAgIHByb2plY3RvclN0YXRlTWFwLnNldChpbnN0YW5jZSwgcHJvamVjdG9yU3RhdGUpO1xuICAgICAgICBmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUgPSBwYXJlbnROb2RlO1xuICAgICAgICBjb25zdCBwYXJlbnRWTm9kZSA9IHRvUGFyZW50Vk5vZGUoZmluYWxQcm9qZWN0b3JPcHRpb25zLnJvb3ROb2RlKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKTtcbiAgICAgICAgaW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlOiBub2RlLCBwYXJlbnRWTm9kZSB9KTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLmludmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEuZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWUucHVzaCh7IGluc3RhbmNlLCBkZXB0aDogZmluYWxQcm9qZWN0b3JPcHRpb25zLmRlcHRoIH0pO1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlUmVuZGVyKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHVwZGF0ZURvbShub2RlLCBub2RlLCBmaW5hbFByb2plY3Rvck9wdGlvbnMsIHBhcmVudFZOb2RlLCBpbnN0YW5jZSwgW10sIFtdKTtcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEub25BdHRhY2goKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1bkRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XG4gICAgICAgIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb21Ob2RlOiBmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGVcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgfSxcbiAgICBtZXJnZTogZnVuY3Rpb24gKGVsZW1lbnQsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHByb2plY3Rpb25PcHRpb25zLm1lcmdlID0gdHJ1ZTtcbiAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHRoaXMuYXBwZW5kKGVsZW1lbnQucGFyZW50Tm9kZSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQoaW5zdGFuY2UpO1xuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5tZXJnZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcHJvamVjdGlvbjtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmRvbS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3Zkb20ubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvdmRvbS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgd2lkZ2V0RmFjdG9yeSA9IHJlcXVpcmUoXCJzcmMvbWVudS1pdGVtL01lbnVJdGVtXCIpO1xuXG52YXIgcmVnaXN0ZXJDdXN0b21FbGVtZW50ID0gcmVxdWlyZSgnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCcpLmRlZmF1bHQ7XG5cbnZhciBkZWZhdWx0RXhwb3J0ID0gd2lkZ2V0RmFjdG9yeS5kZWZhdWx0O1xuZGVmYXVsdEV4cG9ydCAmJiByZWdpc3RlckN1c3RvbUVsZW1lbnQoZGVmYXVsdEV4cG9ydCk7XG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ltcG9ydHMtbG9hZGVyP3dpZGdldEZhY3Rvcnk9c3JjL21lbnUtaXRlbS9NZW51SXRlbSEuL25vZGVfbW9kdWxlcy9AZG9qby9jbGktYnVpbGQtd2lkZ2V0L3RlbXBsYXRlL2N1c3RvbS1lbGVtZW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9pbXBvcnRzLWxvYWRlci9pbmRleC5qcz93aWRnZXRGYWN0b3J5PXNyYy9tZW51LWl0ZW0vTWVudUl0ZW0hLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0geVtvcFswXSAmIDIgPyBcInJldHVyblwiIDogb3BbMF0gPyBcInRocm93XCIgOiBcIm5leHRcIl0pICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gWzAsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7ICB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAob1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2goZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxuXHRcdGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IHYgfSBmcm9tICdAZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvY3VzdG9tRWxlbWVudCc7XG5pbXBvcnQgeyBXaWRnZXRQcm9wZXJ0aWVzIH0gZnJvbSAnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdGhlbWUsIFRoZW1lZE1peGluIH0gZnJvbSAnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQnO1xuaW1wb3J0IHsgV2lkZ2V0QmFzZSB9IGZyb20gJ0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9XaWRnZXRCYXNlJztcblxuaW1wb3J0ICogYXMgY3NzIGZyb20gJy4vbWVudUl0ZW0ubS5jc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVJdGVtUHJvcGVydGllcyBleHRlbmRzIFdpZGdldFByb3BlcnRpZXMge1xuXHR0aXRsZTogc3RyaW5nO1xuXHRzZWxlY3RlZD86IGJvb2xlYW47XG5cdGRhdGE/OiBhbnk7XG5cdG9uU2VsZWN0ZWQ/OiAoZGF0YTogYW55KSA9PiB2b2lkO1xufVxuXG5AY3VzdG9tRWxlbWVudDxNZW51SXRlbVByb3BlcnRpZXM+KHtcblx0dGFnOiAnZGVtby1tZW51LWl0ZW0nLFxuXHRhdHRyaWJ1dGVzOiBbJ3RpdGxlJywgJ3NlbGVjdGVkJ10sXG5cdGV2ZW50czogWydvblNlbGVjdGVkJ10sXG5cdHByb3BlcnRpZXM6IFsnZGF0YScsICdzZWxlY3RlZCddXG59KVxuQHRoZW1lKGNzcylcbmV4cG9ydCBjbGFzcyBNZW51SXRlbSBleHRlbmRzIFRoZW1lZE1peGluKFdpZGdldEJhc2UpPE1lbnVJdGVtUHJvcGVydGllcz4ge1xuXHRwcml2YXRlIF9vbkNsaWNrKCkge1xuXHRcdHRoaXMucHJvcGVydGllcy5vblNlbGVjdGVkICYmIHRoaXMucHJvcGVydGllcy5vblNlbGVjdGVkKHRoaXMucHJvcGVydGllcy5kYXRhKTtcblx0fVxuXG5cdHByb3RlY3RlZCByZW5kZXIoKSB7XG5cdFx0Y29uc3QgeyB0aXRsZSwgc2VsZWN0ZWQgfSA9IHRoaXMucHJvcGVydGllcztcblxuXHRcdHJldHVybiB2KCdsaScsIHsgY2xhc3NlczogdGhpcy50aGVtZShjc3Mucm9vdCkgfSwgW1xuXHRcdFx0dihcblx0XHRcdFx0J3NwYW4nLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2xhc3NlczogdGhpcy50aGVtZShbY3NzLml0ZW0sIHNlbGVjdGVkID8gY3NzLnNlbGVjdGVkIDogbnVsbF0pLFxuXHRcdFx0XHRcdG9uY2xpY2s6IHRoaXMuX29uQ2xpY2tcblx0XHRcdFx0fSxcblx0XHRcdFx0W3RpdGxlXVxuXHRcdFx0KVxuXHRcdF0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXI/dHlwZT10cyZpbnN0YW5jZU5hbWU9MF9tZW51LWl0ZW0hLi9zcmMvbWVudS1pdGVtL01lbnVJdGVtLnRzIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiIF9rZXlcIjpcInRlc3QtYXBwL21lbnVJdGVtXCIsXCJyb290XCI6XCJtZW51SXRlbS1tX19yb290X19zVW1VaVwiLFwiaXRlbVwiOlwibWVudUl0ZW0tbV9faXRlbV9fMk1rNlJcIixcInNlbGVjdGVkXCI6XCJtZW51SXRlbS1tX19zZWxlY3RlZF9fMS1mM0lcIn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzXG4vLyBtb2R1bGUgaWQgPSAuL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/test-app/fixtures/unix/dev/menu/menu-1.0.0.js b/test-app/fixtures/unix/dev/menu/menu-1.0.0.js index 23fb38d..a4c7b80 100644 --- a/test-app/fixtures/unix/dev/menu/menu-1.0.0.js +++ b/test-app/fixtures/unix/dev/menu/menu-1.0.0.js @@ -73,19 +73,19 @@ /************************************************************************/ /******/ ({ -/***/ "./node_modules/@dojo/core/Destroyable.mjs": +/***/ "./node_modules/@dojo/framework/core/Destroyable.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lang__ = __webpack_require__("./node_modules/@dojo/core/lang.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Promise__ = __webpack_require__("./node_modules/@dojo/shim/Promise.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lang__ = __webpack_require__("./node_modules/@dojo/framework/core/lang.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_Promise__ = __webpack_require__("./node_modules/@dojo/framework/shim/Promise.mjs"); /** * No operation function to replace own once instance is destoryed */ function noop() { - return __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Promise__["a" /* default */].resolve(false); + return __WEBPACK_IMPORTED_MODULE_1__shim_Promise__["a" /* default */].resolve(false); } /** * No op function used to replace own, once instance has been destoryed @@ -123,7 +123,7 @@ class Destroyable { * @returns {Promise { + return new __WEBPACK_IMPORTED_MODULE_1__shim_Promise__["a" /* default */]((resolve) => { this.handles.forEach((handle) => { handle && handle.destroy && handle.destroy(); }); @@ -140,19 +140,19 @@ class Destroyable { /***/ }), -/***/ "./node_modules/@dojo/core/Evented.mjs": +/***/ "./node_modules/@dojo/framework/core/Evented.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export isGlobMatch */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Destroyable__ = __webpack_require__("./node_modules/@dojo/core/Destroyable.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Destroyable__ = __webpack_require__("./node_modules/@dojo/framework/core/Destroyable.mjs"); /** * Map of computed regular expressions, keyed by string */ -const regexMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); +const regexMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); /** * Determines is the event type glob has been matched * @@ -183,12 +183,12 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /** * map of listeners keyed by event type */ - this.listenersMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this.listenersMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); } emit(event) { this.listenersMap.forEach((methods, type) => { if (isGlobMatch(type, event.type)) { - methods.forEach((method) => { + [...methods].forEach((method) => { method.call(this, event); }); } @@ -224,7 +224,7 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /***/ }), -/***/ "./node_modules/@dojo/core/lang.mjs": +/***/ "./node_modules/@dojo/framework/core/lang.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -238,8 +238,8 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /* unused harmony export partial */ /* unused harmony export createHandle */ /* harmony export (immutable) */ __webpack_exports__["b"] = createCompositeHandle; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__ = __webpack_require__("./node_modules/@dojo/shim/object.mjs"); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_object__ = __webpack_require__("./node_modules/@dojo/framework/shim/object.mjs"); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__shim_object__["a"]; }); const slice = Array.prototype.slice; @@ -317,7 +317,7 @@ function create(prototype, ...mixins) { } const args = mixins.slice(); args.unshift(Object.create(prototype)); - return __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__["a" /* assign */].apply(null, args); + return __WEBPACK_IMPORTED_MODULE_0__shim_object__["a" /* assign */].apply(null, args); } function deepAssign(target, ...sources) { return _mixin({ @@ -439,7 +439,7 @@ function createCompositeHandle(...handles) { /***/ }), -/***/ "./node_modules/@dojo/has/has.mjs": +/***/ "./node_modules/@dojo/framework/has/has.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -652,16 +652,16 @@ add('host-node', function () { /***/ }), -/***/ "./node_modules/@dojo/shim/Map.mjs": +/***/ "./node_modules/@dojo/framework/shim/Map.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Map; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__object__ = __webpack_require__("./node_modules/@dojo/shim/object.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__object__ = __webpack_require__("./node_modules/@dojo/framework/shim/object.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -761,15 +761,15 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Promise.mjs": +/***/ "./node_modules/@dojo/framework/shim/Promise.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export ShimPromise */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_queue__ = __webpack_require__("./node_modules/@dojo/shim/support/queue.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_queue__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/queue.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); @@ -974,15 +974,15 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Symbol.mjs": +/***/ "./node_modules/@dojo/framework/shim/Symbol.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export Symbol */ /* unused harmony export isSymbol */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -1131,15 +1131,15 @@ function isSymbol(value) { /***/ }), -/***/ "./node_modules/@dojo/shim/WeakMap.mjs": +/***/ "./node_modules/@dojo/framework/shim/WeakMap.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export WeakMap */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -1254,7 +1254,7 @@ if (false) { /***/ }), -/***/ "./node_modules/@dojo/shim/array.mjs": +/***/ "./node_modules/@dojo/framework/shim/array.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1265,11 +1265,11 @@ if (false) { /* unused harmony export find */ /* unused harmony export findIndex */ /* unused harmony export includes */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__number__ = __webpack_require__("./node_modules/@dojo/shim/number.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__number__ = __webpack_require__("./node_modules/@dojo/framework/shim/number.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -1521,7 +1521,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/global.mjs": +/***/ "./node_modules/@dojo/framework/shim/global.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1547,7 +1547,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/iterator.mjs": +/***/ "./node_modules/@dojo/framework/shim/iterator.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1555,8 +1555,8 @@ else { /* unused harmony export isArrayLike */ /* unused harmony export get */ /* unused harmony export forOf */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__string__ = __webpack_require__("./node_modules/@dojo/shim/string.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__string__ = __webpack_require__("./node_modules/@dojo/framework/shim/string.mjs"); const staticDone = { done: true, value: undefined }; @@ -1673,7 +1673,7 @@ function forOf(iterable, callback, thisArg) { /***/ }), -/***/ "./node_modules/@dojo/shim/number.mjs": +/***/ "./node_modules/@dojo/framework/shim/number.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1681,7 +1681,7 @@ function forOf(iterable, callback, thisArg) { /* unused harmony export isFinite */ /* unused harmony export isInteger */ /* unused harmony export isSafeInteger */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); /** * The smallest interval between two representable numbers. @@ -1745,7 +1745,7 @@ function isSafeInteger(value) { /***/ }), -/***/ "./node_modules/@dojo/shim/object.mjs": +/***/ "./node_modules/@dojo/framework/shim/object.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1758,9 +1758,9 @@ function isSafeInteger(value) { /* unused harmony export getOwnPropertyDescriptors */ /* unused harmony export entries */ /* unused harmony export values */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -1875,7 +1875,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/string.mjs": +/***/ "./node_modules/@dojo/framework/shim/string.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1889,9 +1889,9 @@ else { /* unused harmony export startsWith */ /* unused harmony export padEnd */ /* unused harmony export padStart */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -2200,33 +2200,33 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/support/has.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/has.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_has_has__ = __webpack_require__("./node_modules/@dojo/has/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__has_has__ = __webpack_require__("./node_modules/@dojo/framework/has/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); /* unused harmony reexport namespace */ -/* unused harmony default export */ var _unused_webpack_default_export = (__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["b" /* default */]); +/* unused harmony default export */ var _unused_webpack_default_export = (__WEBPACK_IMPORTED_MODULE_0__has_has__["b" /* default */]); /* ECMAScript 6 and 7 Features */ /* Array */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-array', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-array', () => { return (['from', 'of'].every((key) => key in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array) && ['findIndex', 'find', 'copyWithin'].every((key) => key in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype)); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-array-fill', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-array-fill', () => { if ('fill' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype) { /* Some versions of Safari do not properly implement this */ return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1; } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es7-array', () => 'includes' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es7-array', () => 'includes' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype, true); /* Map */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-map', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-map', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Map === 'function') { /* IE11 and older versions of Safari are missing critical ES6 Map functionality @@ -2249,7 +2249,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-map', () return false; }, true); /* Math */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-math', () => { return [ 'clz32', 'sign', @@ -2269,7 +2269,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math', ( 'hypot' ].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Math[name] === 'function'); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math-imul', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-math-imul', () => { if ('imul' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Math) { /* Some versions of Safari on ios do not properly implement this */ return Math.imul(0xffffffff, 5) === -5; @@ -2277,19 +2277,19 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math-imu return false; }, true); /* Object */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-object', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-object', () => { return true && ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Object[name] === 'function'); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es2017-object', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es2017-object', () => { return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Object[name] === 'function'); }, true); /* Observable */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es-observable', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Observable !== 'undefined', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es-observable', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Observable !== 'undefined', true); /* Promise */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-promise', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Promise !== 'undefined' && true, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-promise', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Promise !== 'undefined' && true, true); /* Set */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-set', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-set', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Set === 'function') { /* IE11 and older versions of Safari are missing critical ES6 Set functionality */ const set = new __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Set([1]); @@ -2298,7 +2298,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-set', () return false; }, true); /* String */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-string', () => { return ([ /* static methods */ 'fromCodePoint' @@ -2313,7 +2313,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string', 'includes' ].every((key) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].String.prototype[key] === 'function')); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string-raw', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-string-raw', () => { function getCallSite(callSite, ...substitutions) { const result = [...callSite]; result.raw = callSite.raw; @@ -2328,13 +2328,13 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string-r } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es2017-string', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es2017-string', () => { return ['padStart', 'padEnd'].every((key) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].String.prototype[key] === 'function'); }, true); /* Symbol */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-symbol', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Symbol !== 'undefined' && typeof Symbol() === 'symbol', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-symbol', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Symbol !== 'undefined' && typeof Symbol() === 'symbol', true); /* WeakMap */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-weakmap', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-weakmap', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].WeakMap !== 'undefined') { /* IE11 and older versions of Safari are missing critical ES6 Map functionality */ const key1 = {}; @@ -2346,16 +2346,16 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-weakmap' return false; }, true); /* Miscellaneous features */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('microtasks', () => true || false || true, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('postmessage', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('microtasks', () => true || false || true, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('postmessage', () => { // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist. return typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].window !== 'undefined' && typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].postMessage === 'function'; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('raf', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].requestAnimationFrame === 'function', true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('setimmediate', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].setImmediate !== 'undefined', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('raf', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].requestAnimationFrame === 'function', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('setimmediate', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].setImmediate !== 'undefined', true); /* DOM Features */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-mutationobserver', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('dom-mutationobserver', () => { if (true && Boolean(__WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].MutationObserver || __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].WebKitMutationObserver)) { // IE11 has an unreliable MutationObserver implementation where setProperty() does not // generate a mutation event, observers can crash, and the queue does not drain @@ -2371,18 +2371,18 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-mutation } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-webanimation', () => true && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Animation !== undefined && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].KeyframeEffect !== undefined, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('dom-webanimation', () => true && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Animation !== undefined && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].KeyframeEffect !== undefined, true); //# sourceMappingURL=has.mjs.map /***/ }), -/***/ "./node_modules/@dojo/shim/support/queue.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/queue.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export queueMicroTask */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); function executeTask(item) { @@ -2576,7 +2576,7 @@ let queueMicroTask = (function () { /***/ }), -/***/ "./node_modules/@dojo/shim/support/util.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/util.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -2608,13 +2608,13 @@ function wrapNative(nativeFunction) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/Injector.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/Injector.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); -class Injector extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* Evented */] { +class Injector extends __WEBPACK_IMPORTED_MODULE_0__core_Evented__["a" /* Evented */] { constructor(payload) { super(); this._payload = payload; @@ -2639,13 +2639,13 @@ class Injector extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* E /***/ }), -/***/ "./node_modules/@dojo/widget-core/NodeHandler.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export NodeEventType */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); /** @@ -2658,10 +2658,10 @@ var NodeEventType; NodeEventType["Projector"] = "Projector"; NodeEventType["Widget"] = "Widget"; })(NodeEventType || (NodeEventType = {})); -class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* Evented */] { +class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__core_Evented__["a" /* Evented */] { constructor() { super(...arguments); - this._nodeMap = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._nodeMap = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } get(key) { return this._nodeMap.get(key); @@ -2690,16 +2690,16 @@ class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" / /***/ }), -/***/ "./node_modules/@dojo/widget-core/Registry.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/Registry.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["d"] = isWidgetBaseConstructor; /* unused harmony export isWidgetConstructorDefaultExport */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__ = __webpack_require__("./node_modules/@dojo/shim/Promise.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Promise__ = __webpack_require__("./node_modules/@dojo/framework/shim/Promise.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); @@ -2707,7 +2707,7 @@ class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" / /** * Widget base symbol type */ -const WIDGET_BASE_TYPE = Object(__WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__["a" /* default */])('Widget Base'); +const WIDGET_BASE_TYPE = Object(__WEBPACK_IMPORTED_MODULE_2__shim_Symbol__["a" /* default */])('Widget Base'); /* harmony export (immutable) */ __webpack_exports__["b"] = WIDGET_BASE_TYPE; /** @@ -2728,7 +2728,7 @@ function isWidgetConstructorDefaultExport(item) { /** * The Registry implementation */ -class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* Evented */] { +class Registry extends __WEBPACK_IMPORTED_MODULE_3__core_Evented__["a" /* Evented */] { /** * Emit loaded event for registry label */ @@ -2741,13 +2741,13 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E } define(label, item) { if (this._widgetRegistry === undefined) { - this._widgetRegistry = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._widgetRegistry = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } if (this._widgetRegistry.has(label)) { throw new Error(`widget has already been registered for '${label.toString()}'`); } this._widgetRegistry.set(label, item); - if (item instanceof __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__["a" /* default */]) { + if (item instanceof __WEBPACK_IMPORTED_MODULE_0__shim_Promise__["a" /* default */]) { item.then((widgetCtor) => { this._widgetRegistry.set(label, widgetCtor); this.emitLoadedEvent(label, widgetCtor); @@ -2762,12 +2762,12 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E } defineInjector(label, injectorFactory) { if (this._injectorRegistry === undefined) { - this._injectorRegistry = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._injectorRegistry = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } if (this._injectorRegistry.has(label)) { throw new Error(`injector has already been registered for '${label.toString()}'`); } - const invalidator = new __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* Evented */](); + const invalidator = new __WEBPACK_IMPORTED_MODULE_3__core_Evented__["a" /* Evented */](); const injectorItem = { injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })), invalidator @@ -2783,7 +2783,7 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E if (isWidgetBaseConstructor(item)) { return item; } - if (item instanceof __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__["a" /* default */]) { + if (item instanceof __WEBPACK_IMPORTED_MODULE_0__shim_Promise__["a" /* default */]) { return null; } const promise = item(); @@ -2820,22 +2820,22 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E /***/ }), -/***/ "./node_modules/@dojo/widget-core/RegistryHandler.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); -class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__["a" /* Evented */] { +class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__core_Evented__["a" /* Evented */] { constructor() { super(); this._registry = new __WEBPACK_IMPORTED_MODULE_2__Registry__["a" /* Registry */](); - this._registryWidgetLabelMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["a" /* Map */](); - this._registryInjectorLabelMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["a" /* Map */](); + this._registryWidgetLabelMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["a" /* Map */](); + this._registryInjectorLabelMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["a" /* Map */](); this.own(this._registry); const destroy = () => { if (this.baseRegistry) { @@ -2904,19 +2904,19 @@ class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__[" /***/ }), -/***/ "./node_modules/@dojo/widget-core/WidgetBase.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__diff__ = __webpack_require__("./node_modules/@dojo/widget-core/diff.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__RegistryHandler__ = __webpack_require__("./node_modules/@dojo/widget-core/RegistryHandler.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__NodeHandler__ = __webpack_require__("./node_modules/@dojo/widget-core/NodeHandler.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__vdom__ = __webpack_require__("./node_modules/@dojo/widget-core/vdom.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__RegistryHandler__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__NodeHandler__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/NodeHandler.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__vdom__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); @@ -2926,9 +2926,9 @@ class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__[" -const decoratorMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); +const decoratorMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); const boundAuto = __WEBPACK_IMPORTED_MODULE_4__diff__["a" /* auto */].bind(null); -const noBind = __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__["a" /* default */].for('dojoNoBind'); +const noBind = __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__["a" /* default */].for('dojoNoBind'); /* harmony export (immutable) */ __webpack_exports__["b"] = noBind; /** @@ -2950,7 +2950,7 @@ class WidgetBase { this._nodeHandler = new __WEBPACK_IMPORTED_MODULE_6__NodeHandler__["a" /* default */](); this._handles = []; this._children = []; - this._decoratorCache = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this._decoratorCache = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); this._properties = {}; this._boundRenderFunc = this.render.bind(this); this._boundInvalidate = this.invalidate.bind(this); @@ -2975,7 +2975,7 @@ class WidgetBase { } meta(MetaType) { if (this._metaMap === undefined) { - this._metaMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this._metaMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); } let cached = this._metaMap.get(MetaType); if (!cached) { @@ -3059,9 +3059,14 @@ class WidgetBase { } } if (runReactions) { - this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => { - if (args.changed) { - reaction.call(this, args.previousProperties, args.newProperties); + const reactionFunctions = this.getDecorator('diffReaction'); + const executedReactions = []; + reactionFunctions.forEach(({ reaction, propertyName }) => { + const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1; + const reactionRun = executedReactions.indexOf(reaction) !== -1; + if (propertyChanged && !reactionRun) { + reaction.call(this, this._properties, diffPropertyResults); + executedReactions.push(reaction); } }); } @@ -3124,7 +3129,7 @@ class WidgetBase { if (this.hasOwnProperty('constructor')) { let decoratorList = decoratorMap.get(this.constructor); if (!decoratorList) { - decoratorList = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + decoratorList = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); decoratorMap.set(this.constructor, decoratorList); } let specificDecoratorList = decoratorList.get(decoratorKey); @@ -3176,26 +3181,6 @@ class WidgetBase { this._decoratorCache.set(decoratorKey, allDecorators); return allDecorators; } - _mapDiffPropertyReactions(newProperties, changedPropertyKeys) { - const reactionFunctions = this.getDecorator('diffReaction'); - return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => { - let reactionArguments = reactionPropertyMap.get(reaction); - if (reactionArguments === undefined) { - reactionArguments = { - previousProperties: {}, - newProperties: {}, - changed: false - }; - } - reactionArguments.previousProperties[propertyName] = this._properties[propertyName]; - reactionArguments.newProperties[propertyName] = newProperties[propertyName]; - if (changedPropertyKeys.indexOf(propertyName) !== -1) { - reactionArguments.changed = true; - } - reactionPropertyMap.set(reaction, reactionArguments); - return reactionPropertyMap; - }, new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */]()); - } /** * Binds unbound property functions to the specified `bind` property * @@ -3204,7 +3189,7 @@ class WidgetBase { _bindFunctionProperty(property, bind) { if (typeof property === 'function' && !property[noBind] && Object(__WEBPACK_IMPORTED_MODULE_8__Registry__["d" /* isWidgetBaseConstructor */])(property) === false) { if (this._bindFunctionPropertyMap === undefined) { - this._bindFunctionPropertyMap = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__["a" /* default */](); + this._bindFunctionPropertyMap = new __WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__["a" /* default */](); } const bindInfo = this._bindFunctionPropertyMap.get(property) || {}; let { boundFunc, scope } = bindInfo; @@ -3258,7 +3243,7 @@ class WidgetBase { runAfterRenders(dNode) { const afterRenders = this.getDecorator('afterRender'); if (afterRenders.length > 0) { - return afterRenders.reduce((dNode, afterRenderFunction) => { + dNode = afterRenders.reduce((dNode, afterRenderFunction) => { return afterRenderFunction.call(this, dNode); }, dNode); } @@ -3298,7 +3283,7 @@ WidgetBase._type = __WEBPACK_IMPORTED_MODULE_8__Registry__["b" /* WIDGET_BASE_TY /***/ }), -/***/ "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3368,7 +3353,7 @@ function enter(node, properties, enterAnimation) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/d.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/d.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3380,24 +3365,24 @@ function enter(node, properties, enterAnimation) { /* harmony export (immutable) */ __webpack_exports__["h"] = w; /* harmony export (immutable) */ __webpack_exports__["g"] = v; /* harmony export (immutable) */ __webpack_exports__["c"] = dom; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); /** * The symbol identifier for a WNode type */ -const WNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a WNode.'); +const WNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a WNode.'); /* harmony export (immutable) */ __webpack_exports__["b"] = WNODE; /** * The symbol identifier for a VNode type */ -const VNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a VNode.'); +const VNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a VNode.'); /* harmony export (immutable) */ __webpack_exports__["a"] = VNODE; /** * The symbol identifier for a VNode type created using dom() */ -const DOMVNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a VNode created using existing dom.'); +const DOMVNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a VNode created using existing dom.'); /* unused harmony export DOMVNODE */ /** @@ -3499,12 +3484,12 @@ function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, child /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/afterRender.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = afterRender; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); function afterRender(method) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { @@ -3516,13 +3501,13 @@ function afterRender(method) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = alwaysRender; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__beforeProperties__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__beforeProperties__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs"); function alwaysRender() { @@ -3537,12 +3522,12 @@ function alwaysRender() { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = beforeProperties; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); function beforeProperties(method) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { @@ -3554,13 +3539,13 @@ function beforeProperties(method) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/customElement.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = customElement; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__registerCustomElement__ = __webpack_require__("./node_modules/@dojo/widget-core/registerCustomElement.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__registerCustomElement__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); /** @@ -3584,12 +3569,14 @@ function customElement({ tag, properties = [], attributes = [], events = [], chi /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = diffProperty; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); + /** * Decorator that can be used to register a function as a specific property diff @@ -3598,7 +3585,7 @@ function customElement({ tag, properties = [], attributes = [], events = [], chi * @param diffType The diff type, default is DiffType.AUTO. * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM */ -function diffProperty(propertyName, diffFunction, reactionFunction) { +function diffProperty(propertyName, diffFunction = __WEBPACK_IMPORTED_MODULE_1__diff__["a" /* auto */], reactionFunction) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null)); target.addDecorator('registeredDiffProperty', propertyName); @@ -3615,7 +3602,7 @@ function diffProperty(propertyName, diffFunction, reactionFunction) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3641,21 +3628,21 @@ function handleDecorator(handler) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/inject.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = inject; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__beforeProperties__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__beforeProperties__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs"); /** * Map of instances against registered injectors. */ -const registeredInjectorsMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__["a" /* default */](); +const registeredInjectorsMap = new __WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__["a" /* default */](); /** * Decorator retrieves an injector from an available registry using the name and * calls the `getProperties` function with the payload from the injector @@ -3689,7 +3676,7 @@ function inject({ name, getProperties }) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/diff.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/diff.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3698,7 +3685,7 @@ function inject({ name, getProperties }) { /* unused harmony export reference */ /* harmony export (immutable) */ __webpack_exports__["b"] = shallow; /* harmony export (immutable) */ __webpack_exports__["a"] = auto; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); function isObjectOrArray(value) { return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value); @@ -3768,7 +3755,7 @@ function auto(previousProperty, newProperty) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Projector.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3776,11 +3763,11 @@ function auto(previousProperty, newProperty) { /* unused harmony export AttachType */ /* harmony export (immutable) */ __webpack_exports__["a"] = ProjectorMixin; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__ = __webpack_require__("./node_modules/@dojo/core/lang.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__ = __webpack_require__("./node_modules/@dojo/widget-core/animations/cssTransitions.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/afterRender.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__vdom__ = __webpack_require__("./node_modules/@dojo/widget-core/vdom.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_lang__ = __webpack_require__("./node_modules/@dojo/framework/core/lang.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__vdom__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.mjs"); @@ -3878,7 +3865,7 @@ function ProjectorMixin(Base) { this._projectorProperties.registry.destroy(); } } - this._projectorProperties = Object(__WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__["a" /* assign */])({}, properties); + this._projectorProperties = Object(__WEBPACK_IMPORTED_MODULE_1__core_lang__["a" /* assign */])({}, properties); super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry }); super.__setProperties__(properties); } @@ -3929,10 +3916,7 @@ function ProjectorMixin(Base) { } } __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ - Object(__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__["a" /* afterRender */])(), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:type", Function), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:paramtypes", [Object]), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:returntype", void 0) + Object(__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__["a" /* afterRender */])() ], Projector.prototype, "afterRender", null); return Projector; } @@ -3941,7 +3925,7 @@ function ProjectorMixin(Base) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Themed.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3949,11 +3933,11 @@ function ProjectorMixin(Base) { /* harmony export (immutable) */ __webpack_exports__["b"] = registerThemeInjector; /* harmony export (immutable) */ __webpack_exports__["a"] = ThemedMixin; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Injector__ = __webpack_require__("./node_modules/@dojo/widget-core/Injector.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__decorators_inject__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/inject.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/diffProperty.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__diff__ = __webpack_require__("./node_modules/@dojo/widget-core/diff.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Injector__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Injector.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__decorators_inject__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/inject.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); @@ -4066,7 +4050,7 @@ function ThemedMixin(Base) { const baseThemes = this.getDecorator('baseThemeClasses'); if (!this._registeredBaseTheme) { this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => { - const _a = THEME_KEY, key = baseTheme[_a], classes = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __rest */](baseTheme, [typeof _a === "symbol" ? _a : _a + ""]); + const _a = THEME_KEY, key = baseTheme[_a], classes = __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __rest */](baseTheme, [typeof _a === "symbol" ? _a : _a + ""]); this._registeredBaseThemeKeys.push(key); return Object.assign({}, finalBaseTheme, classes); }, {}); @@ -4080,10 +4064,7 @@ function ThemedMixin(Base) { }; __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('theme', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]), - Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('extraClasses', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:type", Function), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:paramtypes", []), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:returntype", void 0) + Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('extraClasses', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]) ], Themed.prototype, "onPropertiesChanged", null); Themed = __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ Object(__WEBPACK_IMPORTED_MODULE_2__decorators_inject__["a" /* inject */])({ @@ -4103,7 +4084,7 @@ function ThemedMixin(Base) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/registerCustomElement.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -4113,13 +4094,13 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony export (immutable) */ __webpack_exports__["create"] = create; /* harmony export (immutable) */ __webpack_exports__["register"] = register; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__WidgetBase__ = __webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__mixins_Projector__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Projector.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__ = __webpack_require__("./node_modules/@dojo/shim/array.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__mixins_Themed__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__WidgetBase__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__mixins_Projector__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__shim_array__ = __webpack_require__("./node_modules/@dojo/framework/shim/array.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__shim_global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__mixins_Themed__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs"); @@ -4216,7 +4197,7 @@ function create(descriptor, WidgetConstructor) { }); Object.defineProperties(this, domProperties); const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children; - Object(__WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__["a" /* from */])(children).forEach((childNode) => { + Object(__WEBPACK_IMPORTED_MODULE_3__shim_array__["a" /* from */])(children).forEach((childNode) => { if (childType === CustomElementChildType.DOJO) { childNode.addEventListener('dojo-ce-render', () => this._render()); childNode.addEventListener('dojo-ce-connected', () => this._render()); @@ -4236,7 +4217,7 @@ function create(descriptor, WidgetConstructor) { }; const registry = registryFactory(); const themeContext = Object(__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__["b" /* registerThemeInjector */])(this._getTheme(), registry); - __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme())); + __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme())); const Projector = Object(__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__["a" /* ProjectorMixin */])(Wrapper); this._projector = new Projector(); this._projector.setProperties({ registry }); @@ -4248,8 +4229,8 @@ function create(descriptor, WidgetConstructor) { })); } _getTheme() { - if (__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */] && __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce && __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.theme) { - return __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.themes[__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.theme]; + if (__WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */] && __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce && __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.theme) { + return __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.themes[__WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.theme]; } } _childConnected(e) { @@ -4329,25 +4310,25 @@ function register(WidgetConstructor) { if (!descriptor) { throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?'); } - __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor)); + __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor)); } /* harmony default export */ __webpack_exports__["default"] = (register); //# sourceMappingURL=registerCustomElement.mjs.map /***/ }), -/***/ "./node_modules/@dojo/widget-core/vdom.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/vdom.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export toParentVNode */ /* unused harmony export toTextVNode */ /* unused harmony export filterAndDecorateChildren */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__ = __webpack_require__("./node_modules/@dojo/shim/array.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_array__ = __webpack_require__("./node_modules/@dojo/framework/shim/array.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); @@ -4357,11 +4338,13 @@ const NAMESPACE_W3 = 'http://www.w3.org/'; const NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg'; const NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink'; const emptyArray = []; -const widgetInstanceMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); +const nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click']; +const widgetInstanceMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); /* harmony export (immutable) */ __webpack_exports__["b"] = widgetInstanceMap; -const instanceMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); -const projectorStateMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); +const instanceMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); +const nextSiblingMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); +const projectorStateMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); function same(dnode1, dnode2) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(dnode1) && Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(dnode2)) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["d" /* isDomVNode */])(dnode1) || Object(__WEBPACK_IMPORTED_MODULE_2__d__["d" /* isDomVNode */])(dnode2)) { @@ -4418,7 +4401,7 @@ function checkStyleValue(styleValue) { } function updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) { const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); - const eventMap = projectorState.nodeMap.get(domNode) || new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); + const eventMap = projectorState.nodeMap.get(domNode) || new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); if (previousValue) { const previousEvent = eventMap.get(previousValue); domNode.removeEventListener(eventName, previousEvent); @@ -4478,7 +4461,7 @@ function buildPreviousProperties(domNode, previous, current) { }, {}); return newProperties; } -function focusNode(propValue, previousValue, domNode, projectionOptions) { +function nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) { let result; if (typeof propValue === 'function') { result = propValue(); @@ -4489,7 +4472,7 @@ function focusNode(propValue, previousValue, domNode, projectionOptions) { if (result === true) { const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); projectorState.deferredRenderCallbacks.push(() => { - domNode.focus(); + domNode[propName](); }); } } @@ -4585,8 +4568,8 @@ function updateProperties(domNode, previousProperties, properties, projectionOpt } } } - else if (propName === 'focus') { - focusNode(propValue, previousValue, domNode, projectionOptions); + else if (nodeOperations.indexOf(propName) !== -1) { + nodeOperation(propName, propValue, previousValue, domNode, projectionOptions); } else if (propName === 'styles') { const styleNames = Object.keys(propValue); @@ -4740,7 +4723,8 @@ function nodeAdded(dnode, transitions) { } function nodeToRemove(dnode, transitions, projectionOptions) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { - const rendered = dnode.rendered || emptyArray; + const item = instanceMap.get(dnode.instance); + const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray; if (dnode.instance) { const instanceData = widgetInstanceMap.get(dnode.instance); instanceData.onDetach(); @@ -4804,7 +4788,7 @@ function checkDistinguishable(childNodes, indexToCheck, parentInstance) { } } } -function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) { +function updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) { oldChildren = oldChildren || emptyArray; newChildren = newChildren; const oldChildrenLength = oldChildren.length; @@ -4824,38 +4808,49 @@ function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, p addDeferredProperties(newChild, projectionOptions); } if (oldChild !== undefined && same(oldChild, newChild)) { - textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated; oldIndex++; newIndex++; + textUpdated = + updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated; continue; } const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1); const addChild = () => { let insertBeforeDomNode = undefined; + let childrenArray = oldChildren; + let nextIndex = oldIndex + 1; let child = oldChildren[oldIndex]; + if (!child) { + child = siblings[0]; + nextIndex = 1; + childrenArray = siblings; + } if (child) { - let nextIndex = oldIndex + 1; let insertBeforeChildren = [child]; while (insertBeforeChildren.length) { const insertBefore = insertBeforeChildren.shift(); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(insertBefore)) { - if (insertBefore.rendered) { - insertBeforeChildren.push(...insertBefore.rendered); + const item = instanceMap.get(insertBefore.instance); + if (item && item.dnode.rendered) { + insertBeforeChildren.push(...item.dnode.rendered); } } else { if (insertBefore.domNode) { + if (insertBefore.domNode.parentElement !== parentVNode.domNode) { + break; + } insertBeforeDomNode = insertBefore.domNode; break; } } - if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) { - insertBeforeChildren.push(oldChildren[nextIndex]); + if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) { + insertBeforeChildren.push(childrenArray[nextIndex]); nextIndex++; } } } - createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance); + createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance); nodeAdded(newChild, transitions); const indexToCheck = newIndex; projectorState.afterRenderCallbacks.push(() => { @@ -4916,12 +4911,13 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i } const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); if (projectorState.merge && childNodes === undefined) { - childNodes = Object(__WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__["a" /* from */])(parentVNode.domNode.childNodes); + childNodes = Object(__WEBPACK_IMPORTED_MODULE_1__shim_array__["a" /* from */])(parentVNode.domNode.childNodes); } const transitions = projectionOptions.transitions; projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 }); for (let i = 0; i < children.length; i++) { const child = children[i]; + const nextSiblings = children.slice(i + 1); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(child)) { if (projectorState.merge && childNodes) { let domElement = undefined; @@ -4932,10 +4928,10 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i } } } - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance); } else { - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes); } nodeAdded(child, transitions); } @@ -4963,7 +4959,7 @@ function initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOpt } dnode.inserted = true; } -function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) { +function createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) { let domNode; const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { @@ -4978,6 +4974,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } const instance = new widgetConstructor(); dnode.instance = instance; + nextSiblingMap.set(instance, nextSiblings); const instanceData = widgetInstanceMap.get(instance); instanceData.invalidate = () => { instanceData.dirty = true; @@ -5058,7 +5055,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } } } -function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) { +function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { const { instance } = previous; const { parentVNode, dnode: node } = instanceMap.get(instance); @@ -5068,12 +5065,13 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan instance.__setCoreProperties__(dnode.coreProperties); instance.__setChildren__(dnode.children); instance.__setProperties__(dnode.properties); + nextSiblingMap.set(instance, nextSiblings); dnode.instance = instance; if (instanceData.dirty === true) { const rendered = instance.__render__(); instanceData.rendering = false; dnode.rendered = filterAndDecorateChildren(rendered, instance); - updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions); + updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions); } else { instanceData.rendering = false; @@ -5106,7 +5104,7 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan const children = filterAndDecorateChildren(dnode.children, parentInstance); dnode.children = children; updated = - updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated; + updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated; } const previousProperties = buildPreviousProperties(domNode, previous, dnode); if (dnode.attributes && dnode.events) { @@ -5156,7 +5154,7 @@ function runDeferredRenderCallbacks(projectionOptions) { } } else { - __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestAnimationFrame(() => { + __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestAnimationFrame(() => { while (projectorState.deferredRenderCallbacks.length) { const callback = projectorState.deferredRenderCallbacks.shift(); callback && callback(); @@ -5174,8 +5172,8 @@ function runAfterRenderCallbacks(projectionOptions) { } } else { - if (__WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestIdleCallback) { - __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestIdleCallback(() => { + if (__WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestIdleCallback) { + __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestIdleCallback(() => { while (projectorState.afterRenderCallbacks.length) { const callback = projectorState.afterRenderCallbacks.shift(); callback && callback(); @@ -5198,7 +5196,7 @@ function scheduleRender(projectionOptions) { render(projectionOptions); } else if (projectorState.renderScheduled === undefined) { - projectorState.renderScheduled = __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestAnimationFrame(() => { + projectorState.renderScheduled = __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestAnimationFrame(() => { render(projectionOptions); }); } @@ -5217,7 +5215,8 @@ function render(projectionOptions) { previouslyRendered.push(instance); const { parentVNode, dnode } = instanceMap.get(instance); const instanceData = widgetInstanceMap.get(instance); - updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance); + const nextSiblings = nextSiblingMap.get(instance); + updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings); } } runAfterRenderCallbacks(projectionOptions); @@ -5230,7 +5229,7 @@ const dom = { const projectorState = { afterRenderCallbacks: [], deferredRenderCallbacks: [], - nodeMap: new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](), + nodeMap: new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](), renderScheduled: undefined, renderQueue: [], merge: projectionOptions.merge || false, @@ -5248,7 +5247,7 @@ const dom = { scheduleRender(finalProjectorOptions); } }; - updateDom(node, node, finalProjectorOptions, parentVNode, instance); + updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []); projectorState.afterRenderCallbacks.push(() => { instanceData.onAttach(); }); @@ -5282,7 +5281,7 @@ const dom = { /*** IMPORTS FROM imports-loader ***/ var widgetFactory = __webpack_require__("./src/menu/Menu.ts"); -var registerCustomElement = __webpack_require__("./node_modules/@dojo/widget-core/registerCustomElement.mjs").default; +var registerCustomElement = __webpack_require__("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs").default; var defaultExport = widgetFactory.default; defaultExport && registerCustomElement(defaultExport); @@ -5488,10 +5487,10 @@ process.umask = function() { return 0; }; "use strict"; /* unused harmony export __extends */ /* unused harmony export __assign */ -/* harmony export (immutable) */ __webpack_exports__["c"] = __rest; +/* harmony export (immutable) */ __webpack_exports__["b"] = __rest; /* harmony export (immutable) */ __webpack_exports__["a"] = __decorate; /* unused harmony export __param */ -/* harmony export (immutable) */ __webpack_exports__["b"] = __metadata; +/* unused harmony export __metadata */ /* unused harmony export __awaiter */ /* unused harmony export __generator */ /* unused harmony export __exportStar */ @@ -5708,10 +5707,10 @@ module.exports = g; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Menu", function() { return Menu; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/customElement.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__ = __webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__menu_m_css__ = __webpack_require__("./src/menu/menu.m.css"); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__menu_m_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__); @@ -5720,7 +5719,7 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -let Menu = class Menu extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__["a" /* ThemedMixin */])(__WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__["a" /* WidgetBase */]) { +let Menu = class Menu extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__["a" /* ThemedMixin */])(__WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__["a" /* WidgetBase */]) { _onSelected(id, data) { this._selectedId = id; this.properties.onSelected(data); @@ -5741,19 +5740,19 @@ let Menu = class Menu extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_widget_co } return child; }); - return Object(__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__["g" /* v */])('nav', { classes: this.theme(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__["root"]) }, [ - Object(__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__["g" /* v */])('ol', { + return Object(__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__["g" /* v */])('nav', { classes: this.theme(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__["root"]) }, [ + Object(__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__["g" /* v */])('ol', { classes: this.theme(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__["menuContainer"]) }, items) ]); } }; Menu = __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ - Object(__WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__["a" /* customElement */])({ + Object(__WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__["a" /* customElement */])({ tag: 'demo-menu', events: ['onSelected'] }), - Object(__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__["c" /* theme */])(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__) + Object(__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__["c" /* theme */])(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__) ], Menu); /* harmony default export */ __webpack_exports__["default"] = (Menu); @@ -5778,4 +5777,4 @@ module.exports = __webpack_require__("./node_modules/imports-loader/index.js?wid /***/ }) /******/ }));; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgYzJkMGQxODVmODI0NzQ4ODYzMzQiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRGVzdHJveWFibGUubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0V2ZW50ZWQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL2xhbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9oYXMvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9NYXAubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1Byb21pc2UubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1N5bWJvbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vV2Vha01hcC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vYXJyYXkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2dsb2JhbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vaXRlcmF0b3IubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL251bWJlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vb2JqZWN0Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdHJpbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N1cHBvcnQvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3F1ZXVlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3V0aWwubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9JbmplY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL05vZGVIYW5kbGVyLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvUmVnaXN0cnkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9XaWRnZXRCYXNlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hbHdheXNSZW5kZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2JlZm9yZVByb3BlcnRpZXMubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9pbmplY3QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kaWZmLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS92ZG9tLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS9NZW51LnRzIiwid2VicGFjazovLy8uL3NyYy9tZW51L21lbnUubS5jc3M/ZWMxMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7QUM3RGdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSx3Qzs7Ozs7Ozs7Ozs7QUN2REE7QUFDc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0NBQWdDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2RWlCO0FBQ0E7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsaUM7Ozs7Ozs7Ozs7OztBQ25NQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8saUJBQWlCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkUsUUFBUTtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnQzs7Ozs7Ozs7Ozs7Ozs7O0FDbk1vQztBQUNwQztBQUN5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLHFCQUFxQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxZQUFZO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFlBQVk7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0M7Ozs7Ozs7Ozs7Ozs7QUMvRkE7QUFDeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsV0FBVztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7O0FDdE1BO0FBQ0E7QUFDNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxtQzs7Ozs7Ozs7Ozs7OztBQ2hKQTtBQUNzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxxQkFBcUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGdDQUFnQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNrQztBQUNQO0FBQzNCO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3RELG9EQUFvRDtBQUNwRCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFlBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVM7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0M7Ozs7Ozs7O0FDdlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLG1DOzs7Ozs7Ozs7Ozs7Ozs7QUNqQkE7QUFDaUQ7QUFDakQsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDOzs7Ozs7Ozs7Ozs7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREE7QUFDQTtBQUNtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNBO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFlBQVk7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0Y7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DOzs7Ozs7Ozs7OztBQ3hTbUI7QUFDbkI7MEVBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsRUFBRTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxFQUFFO0FBQ2pFLG1DQUFtQyxtQkFBbUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxnQzs7Ozs7Ozs7Ozs7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Qzs7Ozs7Ozs7QUNyWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELGNBQWM7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSw4REFBOEQsZUFBZTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxpQkFBaUIsS0FBSztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMkJBQTJCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsMkJBQTJCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCwrQ0FBK0M7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCw4REFBOEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQSxpQzs7Ozs7OztBQ3g1QkE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7QUNOQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQy9CLENBQUM7aUJBQ0QsQ0FBQztnQkFDRixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ2xELENBQUM7Z0JBQ0QsS0FBSyxDQUFDLFVBQVUscUJBQVEsS0FBSyxDQUFDLFVBQVUsRUFBSyxVQUFVLENBQUUsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLHNFQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaURBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDbEQsc0VBQUMsQ0FDQSxJQUFJLEVBQ0o7Z0JBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsMERBQWlCLENBQUM7YUFDdEMsRUFDRCxLQUFLLENBQ0w7U0FDRCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Q7QUFuQ1ksSUFBSTtJQUxoQix5R0FBYSxDQUFpQjtRQUM5QixHQUFHLEVBQUUsV0FBVztRQUNoQixNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUM7S0FDdEIsQ0FBQztJQUNELHNGQUFLLENBQUMseUNBQUcsQ0FBQztHQUNFLElBQUksQ0FtQ2hCO0FBbkNnQjtBQXFDakIsK0RBQWUsSUFBSSxFQUFDOzs7Ozs7OztBQ3ZEcEI7QUFDQSxrQkFBa0IscUciLCJmaWxlIjoibWVudS0xLjAuMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGMyZDBkMTg1ZjgyNDc0ODg2MzM0IiwiaW1wb3J0IHsgY3JlYXRlQ29tcG9zaXRlSGFuZGxlIH0gZnJvbSAnLi9sYW5nJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ0Bkb2pvL3NoaW0vUHJvbWlzZSc7XG4vKipcbiAqIE5vIG9wZXJhdGlvbiBmdW5jdGlvbiB0byByZXBsYWNlIG93biBvbmNlIGluc3RhbmNlIGlzIGRlc3RvcnllZFxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xufVxuLyoqXG4gKiBObyBvcCBmdW5jdGlvbiB1c2VkIHRvIHJlcGxhY2Ugb3duLCBvbmNlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3RvcnllZFxuICovXG5mdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIG1hZGUgdG8gZGVzdHJveWVkIG1ldGhvZCcpO1xufVxuZXhwb3J0IGNsYXNzIERlc3Ryb3lhYmxlIHtcbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVzID0gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGhhbmRsZXMgZm9yIHRoZSBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gYHRoaXMuZGVzdHJveWAgaXMgY2FsbGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0hhbmRsZX0gaGFuZGxlIFRoZSBoYW5kbGUgdG8gYWRkIGZvciB0aGUgaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyB7SGFuZGxlfSBhIGhhbmRsZSBmb3IgdGhlIGhhbmRsZSwgcmVtb3ZlcyB0aGUgaGFuZGxlIGZvciB0aGUgaW5zdGFuY2UgYW5kIGNhbGxzIGRlc3Ryb3lcbiAgICAgKi9cbiAgICBvd24oaGFuZGxlcykge1xuICAgICAgICBjb25zdCBoYW5kbGUgPSBBcnJheS5pc0FycmF5KGhhbmRsZXMpID8gY3JlYXRlQ29tcG9zaXRlSGFuZGxlKC4uLmhhbmRsZXMpIDogaGFuZGxlcztcbiAgICAgICAgY29uc3QgeyBoYW5kbGVzOiBfaGFuZGxlcyB9ID0gdGhpcztcbiAgICAgICAgX2hhbmRsZXMucHVzaChoYW5kbGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICBfaGFuZGxlcy5zcGxpY2UoX2hhbmRsZXMuaW5kZXhPZihoYW5kbGUpKTtcbiAgICAgICAgICAgICAgICBoYW5kbGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXN0cnB5cyBhbGwgaGFuZGVycyByZWdpc3RlcmVkIGZvciB0aGUgaW5zdGFuY2VcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPGFueX0gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSBhbGwgaGFuZGxlcyBoYXZlIGJlZW4gZGVzdHJveWVkXG4gICAgICovXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlICYmIGhhbmRsZS5kZXN0cm95ICYmIGhhbmRsZS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm93biA9IGRlc3Ryb3llZDtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IERlc3Ryb3lhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RGVzdHJveWFibGUubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRGVzdHJveWFibGUubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0Rlc3Ryb3lhYmxlLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgTWFwIGZyb20gJ0Bkb2pvL3NoaW0vTWFwJztcbmltcG9ydCB7IERlc3Ryb3lhYmxlIH0gZnJvbSAnLi9EZXN0cm95YWJsZSc7XG4vKipcbiAqIE1hcCBvZiBjb21wdXRlZCByZWd1bGFyIGV4cHJlc3Npb25zLCBrZXllZCBieSBzdHJpbmdcbiAqL1xuY29uc3QgcmVnZXhNYXAgPSBuZXcgTWFwKCk7XG4vKipcbiAqIERldGVybWluZXMgaXMgdGhlIGV2ZW50IHR5cGUgZ2xvYiBoYXMgYmVlbiBtYXRjaGVkXG4gKlxuICogQHJldHVybnMgYm9vbGVhbiB0aGF0IGluZGljYXRlcyBpZiB0aGUgZ2xvYiBpcyBtYXRjaGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dsb2JNYXRjaChnbG9iU3RyaW5nLCB0YXJnZXRTdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldFN0cmluZyA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGdsb2JTdHJpbmcgPT09ICdzdHJpbmcnICYmIGdsb2JTdHJpbmcuaW5kZXhPZignKicpICE9PSAtMSkge1xuICAgICAgICBsZXQgcmVnZXg7XG4gICAgICAgIGlmIChyZWdleE1hcC5oYXMoZ2xvYlN0cmluZykpIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gcmVnZXhNYXAuZ2V0KGdsb2JTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtnbG9iU3RyaW5nLnJlcGxhY2UoL1xcKi9nLCAnLionKX0kYCk7XG4gICAgICAgICAgICByZWdleE1hcC5zZXQoZ2xvYlN0cmluZywgcmVnZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KHRhcmdldFN0cmluZyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2xvYlN0cmluZyA9PT0gdGFyZ2V0U3RyaW5nO1xuICAgIH1cbn1cbi8qKlxuICogRXZlbnQgQ2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIEV2ZW50ZWQgZXh0ZW5kcyBEZXN0cm95YWJsZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBtYXAgb2YgbGlzdGVuZXJzIGtleWVkIGJ5IGV2ZW50IHR5cGVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBlbWl0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwLmZvckVhY2goKG1ldGhvZHMsIHR5cGUpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0dsb2JNYXRjaCh0eXBlLCBldmVudC50eXBlKSkge1xuICAgICAgICAgICAgICAgIG1ldGhvZHMuZm9yRWFjaCgobWV0aG9kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZC5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3RlbmVyKSkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlcyA9IGxpc3RlbmVyLm1hcCgobGlzdGVuZXIpID0+IHRoaXMuX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlKSA9PiBoYW5kbGUuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XG4gICAgfVxuICAgIF9hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnNNYXAuc2V0KHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNNYXAuZ2V0KHR5cGUpIHx8IFtdO1xuICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UobGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBFdmVudGVkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXZlbnRlZC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vY29yZS9FdmVudGVkLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vY29yZS9FdmVudGVkLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdAZG9qby9zaGltL29iamVjdCc7XG5leHBvcnQgeyBhc3NpZ24gfSBmcm9tICdAZG9qby9zaGltL29iamVjdCc7XG5jb25zdCBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbmNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbi8qKlxuICogVHlwZSBndWFyZCB0aGF0IGVuc3VyZXMgdGhhdCB0aGUgdmFsdWUgY2FuIGJlIGNvZXJjZWQgdG8gT2JqZWN0XG4gKiB0byB3ZWVkIG91dCBob3N0IG9iamVjdHMgdGhhdCBkbyBub3QgZGVyaXZlIGZyb20gT2JqZWN0LlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGlmIHdlIHdhbnQgdG8gZGVlcCBjb3B5IGFuIG9iamVjdCBvciBub3QuXG4gKiBOb3RlOiBJbiBFUzYgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IGFuIG9iamVjdCdzIFN5bWJvbC50b1N0cmluZ1RhZyBwcm9wZXJ0eSwgd2hpY2ggd2lsbFxuICogY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBgdG9TdHJpbmdgLiBUaGlzIGlzIGEgcmFyZSBlZGdlIGNhc2UgdGhhdCBpcyBkaWZmaWN1bHQgdG8gaGFuZGxlLFxuICogc28gaXQgaXMgbm90IGhhbmRsZWQgaGVyZS5cbiAqIEBwYXJhbSAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJuICAgICAgIElmIHRoZSB2YWx1ZSBpcyBjb2VyY2libGUgaW50byBhbiBPYmplY3RcbiAqL1xuZnVuY3Rpb24gc2hvdWxkRGVlcENvcHlPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5mdW5jdGlvbiBjb3B5QXJyYXkoYXJyYXksIGluaGVyaXRlZCkge1xuICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3B5QXJyYXkoaXRlbSwgaW5oZXJpdGVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXNob3VsZERlZXBDb3B5T2JqZWN0KGl0ZW0pXG4gICAgICAgICAgICA/IGl0ZW1cbiAgICAgICAgICAgIDogX21peGluKHtcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluaGVyaXRlZDogaW5oZXJpdGVkLFxuICAgICAgICAgICAgICAgIHNvdXJjZXM6IFtpdGVtXSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHt9XG4gICAgICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIF9taXhpbihrd0FyZ3MpIHtcbiAgICBjb25zdCBkZWVwID0ga3dBcmdzLmRlZXA7XG4gICAgY29uc3QgaW5oZXJpdGVkID0ga3dBcmdzLmluaGVyaXRlZDtcbiAgICBjb25zdCB0YXJnZXQgPSBrd0FyZ3MudGFyZ2V0O1xuICAgIGNvbnN0IGNvcGllZCA9IGt3QXJncy5jb3BpZWQgfHwgW107XG4gICAgY29uc3QgY29waWVkQ2xvbmUgPSBbLi4uY29waWVkXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGt3QXJncy5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGt3QXJncy5zb3VyY2VzW2ldO1xuICAgICAgICBpZiAoc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gc291cmNlW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGNvcGllZENsb25lLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvcHlBcnJheSh2YWx1ZSwgaW5oZXJpdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzaG91bGREZWVwQ29weU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV0gfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWQucHVzaChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfbWl4aW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkOiBpbmhlcml0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlczogW3ZhbHVlXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIC4uLm1peGlucykge1xuICAgIGlmICghbWl4aW5zLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbGFuZy5jcmVhdGUgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG1peGluIG9iamVjdC4nKTtcbiAgICB9XG4gICAgY29uc3QgYXJncyA9IG1peGlucy5zbGljZSgpO1xuICAgIGFyZ3MudW5zaGlmdChPYmplY3QuY3JlYXRlKHByb3RvdHlwZSkpO1xuICAgIHJldHVybiBhc3NpZ24uYXBwbHkobnVsbCwgYXJncyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVlcEFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICByZXR1cm4gX21peGluKHtcbiAgICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgICAgaW5oZXJpdGVkOiBmYWxzZSxcbiAgICAgICAgc291cmNlczogc291cmNlcyxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWl4aW4odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgcmV0dXJuIF9taXhpbih7XG4gICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgIGluaGVyaXRlZDogdHJ1ZSxcbiAgICAgICAgc291cmNlczogc291cmNlcyxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdXNpbmcgdGhlIHByb3ZpZGVkIHNvdXJjZSdzIHByb3RvdHlwZSBhcyB0aGUgcHJvdG90eXBlIGZvciB0aGUgbmV3IG9iamVjdCwgYW5kIHRoZW5cbiAqIGRlZXAgY29waWVzIHRoZSBwcm92aWRlZCBzb3VyY2UncyB2YWx1ZXMgaW50byB0aGUgbmV3IHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFRoZSBvYmplY3QgdG8gZHVwbGljYXRlXG4gKiBAcmV0dXJuIFRoZSBuZXcgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGUoc291cmNlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKSk7XG4gICAgcmV0dXJuIGRlZXBNaXhpbih0YXJnZXQsIHNvdXJjZSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0d28gdmFsdWVzIGFyZSB0aGUgc2FtZSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gYSBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gKiBAcGFyYW0gYiBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lOyBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSWRlbnRpY2FsKGEsIGIpIHtcbiAgICByZXR1cm4gKGEgPT09IGIgfHxcbiAgICAgICAgLyogYm90aCB2YWx1ZXMgYXJlIE5hTiAqL1xuICAgICAgICAoYSAhPT0gYSAmJiBiICE9PSBiKSk7XG59XG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGJpbmRzIGEgbWV0aG9kIHRvIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGF0IHJ1bnRpbWUuIFRoaXMgaXMgc2ltaWxhciB0b1xuICogYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCwgYnV0IGluc3RlYWQgb2YgYSBmdW5jdGlvbiBpdCB0YWtlcyB0aGUgbmFtZSBvZiBhIG1ldGhvZCBvbiBhbiBvYmplY3QuXG4gKiBBcyBhIHJlc3VsdCwgdGhlIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGBsYXRlQmluZGAgd2lsbCBhbHdheXMgY2FsbCB0aGUgZnVuY3Rpb24gY3VycmVudGx5IGFzc2lnbmVkIHRvXG4gKiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG9uIHRoZSBvYmplY3QgYXMgb2YgdGhlIG1vbWVudCB0aGUgZnVuY3Rpb24gaXQgcmV0dXJucyBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIGluc3RhbmNlIFRoZSBjb250ZXh0IG9iamVjdFxuICogQHBhcmFtIG1ldGhvZCBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIG9uIHRoZSBjb250ZXh0IG9iamVjdCB0byBiaW5kIHRvIGl0c2VsZlxuICogQHBhcmFtIHN1cHBsaWVkQXJncyBBbiBvcHRpb25hbCBhcnJheSBvZiB2YWx1ZXMgdG8gcHJlcGVuZCB0byB0aGUgYGluc3RhbmNlW21ldGhvZF1gIGFyZ3VtZW50cyBsaXN0XG4gKiBAcmV0dXJuIFRoZSBib3VuZCBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF0ZUJpbmQoaW5zdGFuY2UsIG1ldGhvZCwgLi4uc3VwcGxpZWRBcmdzKSB7XG4gICAgcmV0dXJuIHN1cHBsaWVkQXJncy5sZW5ndGhcbiAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA/IHN1cHBsaWVkQXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IHN1cHBsaWVkQXJncztcbiAgICAgICAgICAgIC8vIFRTNzAxN1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlW21ldGhvZF0uYXBwbHkoaW5zdGFuY2UsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gVFM3MDE3XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VbbWV0aG9kXS5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICByZXR1cm4gX21peGluKHtcbiAgICAgICAgZGVlcDogZmFsc2UsXG4gICAgICAgIGluaGVyaXRlZDogdHJ1ZSxcbiAgICAgICAgc291cmNlczogc291cmNlcyxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMgdGhlIGdpdmVuIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cyBwcmVwZW5kZWQgdG8gaXRzIGFyZ3VtZW50IGxpc3QuXG4gKiBMaWtlIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAsIGJ1dCBkb2VzIG5vdCBhbHRlciBleGVjdXRpb24gY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0RnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYm91bmRcbiAqIEBwYXJhbSBzdXBwbGllZEFyZ3MgQW4gb3B0aW9uYWwgYXJyYXkgb2YgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhlIGB0YXJnZXRGdW5jdGlvbmAgYXJndW1lbnRzIGxpc3RcbiAqIEByZXR1cm4gVGhlIGJvdW5kIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsKHRhcmdldEZ1bmN0aW9uLCAuLi5zdXBwbGllZEFyZ3MpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA/IHN1cHBsaWVkQXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IHN1cHBsaWVkQXJncztcbiAgICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG59XG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBkZXN0cm95IG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgY2FsbHMgdGhlIHBhc3NlZC1pbiBkZXN0cnVjdG9yLlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGNyZWF0aW5nIFwicmVtb3ZlXCIgLyBcImRlc3Ryb3lcIiBoYW5kbGVycyBmb3JcbiAqIGV2ZW50IGxpc3RlbmVycywgdGltZXJzLCBldGMuXG4gKlxuICogQHBhcmFtIGRlc3RydWN0b3IgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGhhbmRsZSdzIGBkZXN0cm95YCBtZXRob2QgaXMgaW52b2tlZFxuICogQHJldHVybiBUaGUgaGFuZGxlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGFuZGxlKGRlc3RydWN0b3IpIHtcbiAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRlc3RydWN0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIFJldHVybnMgYSBzaW5nbGUgaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVzdHJveSBtdWx0aXBsZSBoYW5kbGVzIHNpbXVsdGFuZW91c2x5LlxuICpcbiAqIEBwYXJhbSBoYW5kbGVzIEFuIGFycmF5IG9mIGhhbmRsZXMgd2l0aCBgZGVzdHJveWAgbWV0aG9kc1xuICogQHJldHVybiBUaGUgaGFuZGxlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9zaXRlSGFuZGxlKC4uLmhhbmRsZXMpIHtcbiAgICByZXR1cm4gY3JlYXRlSGFuZGxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYW5kbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBoYW5kbGVzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFuZy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vY29yZS9sYW5nLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vY29yZS9sYW5nLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJmdW5jdGlvbiBpc0ZlYXR1cmVUZXN0VGhlbmFibGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUudGhlbjtcbn1cbi8qKlxuICogQSBjYWNoZSBvZiByZXN1bHRzIG9mIGZlYXR1cmUgdGVzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RDYWNoZSA9IHt9O1xuLyoqXG4gKiBBIGNhY2hlIG9mIHRoZSB1bi1yZXNvbHZlZCBmZWF0dXJlIHRlc3RzXG4gKi9cbmV4cG9ydCBjb25zdCB0ZXN0RnVuY3Rpb25zID0ge307XG4vKipcbiAqIEEgY2FjaGUgb2YgdW5yZXNvbHZlZCB0aGVuYWJsZXMgKHByb2JhYmx5IHByb21pc2VzKVxuICogQHR5cGUge3t9fVxuICovXG5jb25zdCB0ZXN0VGhlbmFibGVzID0ge307XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgc2NvcGUgKGB3aW5kb3dgIGluIGEgYnJvd3NlciwgYGdsb2JhbGAgaW4gTm9kZUpTKVxuICovXG5jb25zdCBnbG9iYWxTY29wZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gQnJvd3NlcnNcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gTm9kZVxuICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gV2ViIHdvcmtlcnNcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHt9O1xufSkoKTtcbi8qIEdyYWIgdGhlIHN0YXRpY0ZlYXR1cmVzIGlmIHRoZXJlIGFyZSBhdmFpbGFibGUgKi9cbmNvbnN0IHsgc3RhdGljRmVhdHVyZXMgfSA9IGdsb2JhbFNjb3BlLkRvam9IYXNFbnZpcm9ubWVudCB8fCB7fTtcbi8qIENsZWFuaW5nIHVwIHRoZSBEb2pvSGFzRW52aW9ybm1lbnQgKi9cbmlmICgnRG9qb0hhc0Vudmlyb25tZW50JyBpbiBnbG9iYWxTY29wZSkge1xuICAgIGRlbGV0ZSBnbG9iYWxTY29wZS5Eb2pvSGFzRW52aXJvbm1lbnQ7XG59XG4vKipcbiAqIEN1c3RvbSB0eXBlIGd1YXJkIHRvIG5hcnJvdyB0aGUgYHN0YXRpY0ZlYXR1cmVzYCB0byBlaXRoZXIgYSBtYXAgb3IgYSBmdW5jdGlvbiB0aGF0XG4gKiByZXR1cm5zIGEgbWFwLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZ3VhcmQgZm9yXG4gKi9cbmZ1bmN0aW9uIGlzU3RhdGljRmVhdHVyZUZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogVGhlIGNhY2hlIG9mIGFzc2VydGVkIGZlYXR1cmVzIHRoYXQgd2VyZSBhdmFpbGFibGUgaW4gdGhlIGdsb2JhbCBzY29wZSB3aGVuIHRoZVxuICogbW9kdWxlIGxvYWRlZFxuICovXG5jb25zdCBzdGF0aWNDYWNoZSA9IHN0YXRpY0ZlYXR1cmVzXG4gICAgPyBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbihzdGF0aWNGZWF0dXJlcykgPyBzdGF0aWNGZWF0dXJlcy5hcHBseShnbG9iYWxTY29wZSkgOiBzdGF0aWNGZWF0dXJlc1xuICAgIDoge307IC8qIFByb3ZpZGluZyBhbiBlbXB0eSBjYWNoZSwgaWYgbm9uZSB3YXMgaW4gdGhlIGVudmlyb25tZW50XG5cbi8qKlxuKiBBTUQgcGx1Z2luIGZ1bmN0aW9uLlxuKlxuKiBDb25kaXRpb25hbCBsb2FkcyBtb2R1bGVzIGJhc2VkIG9uIGEgaGFzIGZlYXR1cmUgdGVzdCB2YWx1ZS5cbipcbiogQHBhcmFtIHJlc291cmNlSWQgR2l2ZXMgdGhlIHJlc29sdmVkIG1vZHVsZSBpZCB0byBsb2FkLlxuKiBAcGFyYW0gcmVxdWlyZSBUaGUgbG9hZGVyIHJlcXVpcmUgZnVuY3Rpb24gd2l0aCByZXNwZWN0IHRvIHRoZSBtb2R1bGUgdGhhdCBjb250YWluZWQgdGhlIHBsdWdpbiByZXNvdXJjZSBpbiBpdHNcbiogICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBsaXN0LlxuKiBAcGFyYW0gbG9hZCBDYWxsYmFjayB0byBsb2FkZXIgdGhhdCBjb25zdW1lcyByZXN1bHQgb2YgcGx1Z2luIGRlbWFuZC5cbiovXG5leHBvcnQgZnVuY3Rpb24gbG9hZChyZXNvdXJjZUlkLCByZXF1aXJlLCBsb2FkLCBjb25maWcpIHtcbiAgICByZXNvdXJjZUlkID8gcmVxdWlyZShbcmVzb3VyY2VJZF0sIGxvYWQpIDogbG9hZCgpO1xufVxuLyoqXG4gKiBBTUQgcGx1Z2luIGZ1bmN0aW9uLlxuICpcbiAqIFJlc29sdmVzIHJlc291cmNlSWQgaW50byBhIG1vZHVsZSBpZCBiYXNlZCBvbiBwb3NzaWJseS1uZXN0ZWQgdGVuYXJ5IGV4cHJlc3Npb24gdGhhdCBicmFuY2hlcyBvbiBoYXMgZmVhdHVyZSB0ZXN0XG4gKiB2YWx1ZShzKS5cbiAqXG4gKiBAcGFyYW0gcmVzb3VyY2VJZCBUaGUgaWQgb2YgdGhlIG1vZHVsZVxuICogQHBhcmFtIG5vcm1hbGl6ZSBSZXNvbHZlcyBhIHJlbGF0aXZlIG1vZHVsZSBpZCBpbnRvIGFuIGFic29sdXRlIG1vZHVsZSBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHJlc291cmNlSWQsIG5vcm1hbGl6ZSkge1xuICAgIGNvbnN0IHRva2VucyA9IHJlc291cmNlSWQubWF0Y2goL1tcXD86XXxbXjpcXD9dKi9nKSB8fCBbXTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZnVuY3Rpb24gZ2V0KHNraXApIHtcbiAgICAgICAgY29uc3QgdGVybSA9IHRva2Vuc1tpKytdO1xuICAgICAgICBpZiAodGVybSA9PT0gJzonKSB7XG4gICAgICAgICAgICAvLyBlbXB0eSBzdHJpbmcgbW9kdWxlIG5hbWUsIHJlc29sdmVzIHRvIG51bGxcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gcG9zdGZpeGVkIHdpdGggYSA/IG1lYW5zIGl0IGlzIGEgZmVhdHVyZSB0byBicmFuY2ggb24sIHRoZSB0ZXJtIGlzIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXG4gICAgICAgICAgICBpZiAodG9rZW5zW2krK10gPT09ICc/Jykge1xuICAgICAgICAgICAgICAgIGlmICghc2tpcCAmJiBoYXModGVybSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hlZCB0aGUgZmVhdHVyZSwgZ2V0IHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGRpZCBub3QgbWF0Y2gsIGdldCB0aGUgc2Vjb25kIHZhbHVlLCBwYXNzaW5nIG92ZXIgdGhlIGZpcnN0XG4gICAgICAgICAgICAgICAgICAgIGdldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldChza2lwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhIG1vZHVsZVxuICAgICAgICAgICAgcmV0dXJuIHRlcm07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaWQgPSBnZXQoKTtcbiAgICByZXR1cm4gaWQgJiYgbm9ybWFsaXplKGlkKTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYSBmZWF0dXJlIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZFxuICpcbiAqIEBwYXJhbSBmZWF0dXJlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGlzdHMoZmVhdHVyZSkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBCb29sZWFuKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlIHx8IG5vcm1hbGl6ZWRGZWF0dXJlIGluIHRlc3RDYWNoZSB8fCB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXSk7XG59XG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IHRlc3QgZm9yIGEgbmFtZWQgZmVhdHVyZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaGFzLmFkZCgnZG9tLWFkZGV2ZW50bGlzdGVuZXInLCAhIWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpO1xuICpcbiAqIEBleGFtcGxlXG4gKiBoYXMuYWRkKCd0b3VjaC1ldmVudHMnLCBmdW5jdGlvbiAoKSB7XG4gKiAgICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnRcbiAqIH0pO1xuICpcbiAqIEBwYXJhbSBmZWF0dXJlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHJlcG9ydGVkIG9mIHRoZSBmZWF0dXJlLCBvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBvbmNlIG9uIGZpcnN0IHRlc3RcbiAqIEBwYXJhbSBvdmVyd3JpdGUgaWYgYW4gZXhpc3RpbmcgdmFsdWUgc2hvdWxkIGJlIG92ZXJ3cml0dGVuLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZChmZWF0dXJlLCB2YWx1ZSwgb3ZlcndyaXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCBub3JtYWxpemVkRmVhdHVyZSA9IGZlYXR1cmUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoZXhpc3RzKG5vcm1hbGl6ZWRGZWF0dXJlKSAmJiAhb3ZlcndyaXRlICYmICEobm9ybWFsaXplZEZlYXR1cmUgaW4gc3RhdGljQ2FjaGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEZlYXR1cmUgXCIke2ZlYXR1cmV9XCIgZXhpc3RzIGFuZCBvdmVyd3JpdGUgbm90IHRydWUuYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNGZWF0dXJlVGVzdFRoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgICB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdID0gdmFsdWUudGhlbigocmVzb2x2ZWRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGVzdENhY2hlW2ZlYXR1cmVdID0gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgIGRlbGV0ZSB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgdGVzdFRoZW5hYmxlc1tmZWF0dXJlXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdID0gdmFsdWU7XG4gICAgICAgIGRlbGV0ZSB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXTtcbiAgICB9XG59XG4vKipcbiAqIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWVkIGZlYXR1cmUuXG4gKlxuICogQHBhcmFtIGZlYXR1cmUgVGhlIG5hbWUgKGlmIGEgc3RyaW5nKSBvciBpZGVudGlmaWVyIChpZiBhbiBpbnRlZ2VyKSBvZiB0aGUgZmVhdHVyZSB0byB0ZXN0LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXMoZmVhdHVyZSkge1xuICAgIGxldCByZXN1bHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSB7XG4gICAgICAgIHJlc3VsdCA9IHN0YXRpY0NhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0pIHtcbiAgICAgICAgcmVzdWx0ID0gdGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXSA9IHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdLmNhbGwobnVsbCk7XG4gICAgICAgIGRlbGV0ZSB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9ybWFsaXplZEZlYXR1cmUgaW4gdGVzdENhY2hlKSB7XG4gICAgICAgIHJlc3VsdCA9IHRlc3RDYWNoZVtub3JtYWxpemVkRmVhdHVyZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKGZlYXR1cmUgaW4gdGVzdFRoZW5hYmxlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBBdHRlbXB0IHRvIGRldGVjdCB1bnJlZ2lzdGVyZWQgaGFzIGZlYXR1cmUgXCIke2ZlYXR1cmV9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qXG4gKiBPdXQgb2YgdGhlIGJveCBmZWF0dXJlIHRlc3RzXG4gKi9cbi8qIEVudmlyb25tZW50cyAqL1xuLyogVXNlZCBhcyBhIHZhbHVlIHRvIHByb3ZpZGUgYSBkZWJ1ZyBvbmx5IGNvZGUgcGF0aCAqL1xuYWRkKCdkZWJ1ZycsIHRydWUpO1xuLyogRGV0ZWN0cyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgXCJicm93c2VyIGxpa2VcIiAqL1xuYWRkKCdob3N0LWJyb3dzZXInLCB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpO1xuLyogRGV0ZWN0cyBpZiB0aGUgZW52aXJvbm1lbnQgYXBwZWFycyB0byBiZSBOb2RlSlMgKi9cbmFkZCgnaG9zdC1ub2RlJywgZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MudmVyc2lvbnMubm9kZTtcbiAgICB9XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhcy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vaGFzL2hhcy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2hhcy9oYXMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGlzQXJyYXlMaWtlLCBTaGltSXRlcmF0b3IgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgaXMgYXMgb2JqZWN0SXMgfSBmcm9tICcuL29iamVjdCc7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0ICcuL1N5bWJvbCc7XG5leHBvcnQgbGV0IE1hcCA9IGdsb2JhbC5NYXA7XG5pZiAoIXRydWUpIHtcbiAgICBNYXAgPSAoX2EgPSBjbGFzcyBNYXAge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ01hcCc7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gQXJyYXkucHJvdG90eXBlLmluZGV4T2YgdXNpbmcgT2JqZWN0LmlzXG4gICAgICAgICAgICAgKiB0byBjaGVjayBmb3IgZXF1YWxpdHkuIFNlZSBodHRwOi8vbXpsLmxhLzF6dUtPMlZcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgX2luZGV4T2ZLZXkoa2V5cywga2V5KSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdElzKGtleXNbaV0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdldCBzaXplKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9rZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsZWFyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMubGVuZ3RoID0gdGhpcy5fdmFsdWVzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUoa2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVudHJpZXMoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5fa2V5cy5tYXAoKGtleSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2tleSwgdGhpcy5fdmFsdWVzW2ldXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yRWFjaChjYWxsYmFjaywgY29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSB0aGlzLl9rZXlzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX3ZhbHVlcztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHZhbHVlc1tpXSwga2V5c1tpXSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2V0KGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiB0aGlzLl92YWx1ZXNbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFzKGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSkgPiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleXMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaGltSXRlcmF0b3IodGhpcy5fa2V5cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IHRoaXMuX2tleXMubGVuZ3RoIDogaW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5c1tpbmRleF0gPSBrZXk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWVzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHRoaXMuX3ZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIF9hW1N5bWJvbC5zcGVjaWVzXSA9IF9hLFxuICAgICAgICBfYSk7XG59XG5leHBvcnQgZGVmYXVsdCBNYXA7XG52YXIgX2E7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NYXAubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vTWFwLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9NYXAubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgcXVldWVNaWNyb1Rhc2sgfSBmcm9tICcuL3N1cHBvcnQvcXVldWUnO1xuaW1wb3J0ICcuL1N5bWJvbCc7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuZXhwb3J0IGxldCBTaGltUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuZXhwb3J0IGNvbnN0IGlzVGhlbmFibGUgPSBmdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nO1xufTtcbmlmICghdHJ1ZSkge1xuICAgIGdsb2JhbC5Qcm9taXNlID0gU2hpbVByb21pc2UgPSAoX2EgPSBjbGFzcyBQcm9taXNlIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBQcm9taXNlLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSBleGVjdXRvclxuICAgICAgICAgICAgICogVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBQcm9taXNlIGlzIGluc3RhbnRpYXRlZC4gSXQgaXMgcmVzcG9uc2libGUgZm9yXG4gICAgICAgICAgICAgKiBzdGFydGluZyB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGVuIGl0IGlzIGludm9rZWQuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVGhlIGV4ZWN1dG9yIG11c3QgY2FsbCBlaXRoZXIgdGhlIHBhc3NlZCBgcmVzb2x2ZWAgZnVuY3Rpb24gd2hlbiB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkXG4gICAgICAgICAgICAgKiBzdWNjZXNzZnVsbHksIG9yIHRoZSBgcmVqZWN0YCBmdW5jdGlvbiB3aGVuIHRoZSBvcGVyYXRpb24gZmFpbHMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBwcm9taXNlLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxIC8qIFBlbmRpbmcgKi87XG4gICAgICAgICAgICAgICAgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ1Byb21pc2UnO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHRydWUsIHRoZSByZXNvbHV0aW9uIG9mIHRoaXMgcHJvbWlzZSBpcyBjaGFpbmVkIChcImxvY2tlZCBpblwiKSB0byBhbm90aGVyIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbGV0IGlzQ2hhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgcHJvbWlzZSBpcyBpbiBhIHJlc29sdmVkIHN0YXRlLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVzb2x2ZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlICE9PSAxIC8qIFBlbmRpbmcgKi8gfHwgaXNDaGFpbmVkO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogQ2FsbGJhY2tzIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgb25jZSB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGxldCBjYWxsYmFja3MgPSBbXTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJbml0aWFsbHkgcHVzaGVzIGNhbGxiYWNrcyBvbnRvIGEgcXVldWUgZm9yIGV4ZWN1dGlvbiBvbmNlIHRoaXMgcHJvbWlzZSBzZXR0bGVzLiBBZnRlciB0aGUgcHJvbWlzZSBzZXR0bGVzLFxuICAgICAgICAgICAgICAgICAqIGVucXVldWVzIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IGV2ZW50IGxvb3AgdHVybi5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBsZXQgd2hlbkZpbmlzaGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogU2V0dGxlcyB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIHtUfGFueX0gdmFsdWUgVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGxlID0gKG5ld1N0YXRlLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBBIHByb21pc2UgY2FuIG9ubHkgYmUgc2V0dGxlZCBvbmNlLlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gMSAvKiBQZW5kaW5nICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgd2hlbkZpbmlzaGVkID0gcXVldWVNaWNyb1Rhc2s7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZW5xdWV1ZSBhIGNhbGxiYWNrIHJ1bm5lciBpZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHNvIHRoYXQgaW5pdGlhbGx5IGZ1bGZpbGxlZCBQcm9taXNlcyBkb24ndCBoYXZlIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgYW4gZXh0cmEgdHVybi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrcyAmJiBjYWxsYmFja3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVNaWNyb1Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gY2FsbGJhY2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3NbaV0uY2FsbChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBSZXNvbHZlcyB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIHtUfGFueX0gdmFsdWUgVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZSA9IChuZXdTdGF0ZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudGhlbihzZXR0bGUuYmluZChudWxsLCAwIC8qIEZ1bGZpbGxlZCAqLyksIHNldHRsZS5iaW5kKG51bGwsIDIgLyogUmVqZWN0ZWQgKi8pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0bGUobmV3U3RhdGUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy50aGVuID0gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuRmluaXNoZWQgaW5pdGlhbGx5IHF1ZXVlcyB1cCBjYWxsYmFja3MgZm9yIGV4ZWN1dGlvbiBhZnRlciB0aGUgcHJvbWlzZSBoYXMgc2V0dGxlZC4gT25jZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb21pc2UgaGFzIHNldHRsZWQsIHdoZW5GaW5pc2hlZCB3aWxsIHNjaGVkdWxlIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHR1cm4gdGhyb3VnaCB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGxvb3AuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVuRmluaXNoZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5zdGF0ZSA9PT0gMiAvKiBSZWplY3RlZCAqLyA/IG9uUmVqZWN0ZWQgOiBvbkZ1bGZpbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNhbGxiYWNrKHRoaXMucmVzb2x2ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXRlID09PSAyIC8qIFJlamVjdGVkICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh0aGlzLnJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dG9yKHJlc29sdmUuYmluZChudWxsLCAwIC8qIEZ1bGZpbGxlZCAqLyksIHJlc29sdmUuYmluZChudWxsLCAyIC8qIFJlamVjdGVkICovKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBzZXR0bGUoMiAvKiBSZWplY3RlZCAqLywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRpYyBhbGwoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXBsZXRlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvdGFsID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvcHVsYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsKGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgKytjb21wbGV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3B1bGF0aW5nIHx8IGNvbXBsZXRlIDwgdG90YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0l0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICsrdG90YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaGVuYWJsZShpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFuIGl0ZW0gUHJvbWlzZSByZWplY3RzLCB0aGlzIFByb21pc2UgaXMgaW1tZWRpYXRlbHkgcmVqZWN0ZWQgd2l0aCB0aGUgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50aGVuKGZ1bGZpbGwuYmluZChudWxsLCBpbmRleCksIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoaXRlbSkudGhlbihmdWxmaWxsLmJpbmQobnVsbCwgaW5kZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJdGVtKGksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwb3B1bGF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGljIHJhY2UoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgUHJvbWlzZSBpdGVtIHJlamVjdHMsIHRoaXMgUHJvbWlzZSBpcyBpbW1lZGlhdGVseSByZWplY3RlZCB3aXRoIHRoZSBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvbWlzZSdzIHJlamVjdGlvbiBlcnJvci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShpdGVtKS50aGVuKHJlc29sdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0aWMgcmVqZWN0KHJlYXNvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGljIHJlc29sdmUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChvblJlamVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBfYVtTeW1ib2wuc3BlY2llc10gPSBTaGltUHJvbWlzZSxcbiAgICAgICAgX2EpO1xufVxuZXhwb3J0IGRlZmF1bHQgU2hpbVByb21pc2U7XG52YXIgX2E7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Qcm9taXNlLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1Byb21pc2UubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1Byb21pc2UubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IGdldFZhbHVlRGVzY3JpcHRvciB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcbmV4cG9ydCBsZXQgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbmlmICghdHJ1ZSkge1xuICAgIC8qKlxuICAgICAqIFRocm93cyBpZiB0aGUgdmFsdWUgaXMgbm90IGEgc3ltYm9sLCB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBTaGltXG4gICAgICogQHBhcmFtICB7YW55fSAgICB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2tcbiAgICAgKiBAcmV0dXJuIHtzeW1ib2x9ICAgICAgIFJldHVybnMgdGhlIHN5bWJvbCBvciB0aHJvd3NcbiAgICAgKi9cbiAgICBjb25zdCB2YWxpZGF0ZVN5bWJvbCA9IGZ1bmN0aW9uIHZhbGlkYXRlU3ltYm9sKHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBjb25zdCBkZWZpbmVQcm9wZXJ0aWVzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG4gICAgY29uc3QgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4gICAgY29uc3QgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcbiAgICBjb25zdCBvYmpQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuICAgIGNvbnN0IGdsb2JhbFN5bWJvbHMgPSB7fTtcbiAgICBjb25zdCBnZXRTeW1ib2xOYW1lID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlZCA9IGNyZWF0ZShudWxsKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkZXNjKSB7XG4gICAgICAgICAgICBsZXQgcG9zdGZpeCA9IDA7XG4gICAgICAgICAgICBsZXQgbmFtZTtcbiAgICAgICAgICAgIHdoaWxlIChjcmVhdGVkW1N0cmluZyhkZXNjKSArIChwb3N0Zml4IHx8ICcnKV0pIHtcbiAgICAgICAgICAgICAgICArK3Bvc3RmaXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZXNjICs9IFN0cmluZyhwb3N0Zml4IHx8ICcnKTtcbiAgICAgICAgICAgIGNyZWF0ZWRbZGVzY10gPSB0cnVlO1xuICAgICAgICAgICAgbmFtZSA9ICdAQCcgKyBkZXNjO1xuICAgICAgICAgICAgLy8gRklYTUU6IFRlbXBvcmFyeSBndWFyZCB1bnRpbCB0aGUgZHVwbGljYXRlIGV4ZWN1dGlvbiB3aGVuIHRlc3RpbmcgY2FuIGJlXG4gICAgICAgICAgICAvLyBwaW5uZWQgZG93bi5cbiAgICAgICAgICAgIGlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmpQcm90b3R5cGUsIG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkob2JqUHJvdG90eXBlLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCBnZXRWYWx1ZURlc2NyaXB0b3IodmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIH07XG4gICAgfSkoKTtcbiAgICBjb25zdCBJbnRlcm5hbFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEludGVybmFsU3ltYm9sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUeXBlRXJyb3I6IFN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTeW1ib2woZGVzY3JpcHRpb24pO1xuICAgIH07XG4gICAgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzeW0gPSBPYmplY3QuY3JlYXRlKEludGVybmFsU3ltYm9sLnByb3RvdHlwZSk7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnRpZXMoc3ltLCB7XG4gICAgICAgICAgICBfX2Rlc2NyaXB0aW9uX186IGdldFZhbHVlRGVzY3JpcHRvcihkZXNjcmlwdGlvbiksXG4gICAgICAgICAgICBfX25hbWVfXzogZ2V0VmFsdWVEZXNjcmlwdG9yKGdldFN5bWJvbE5hbWUoZGVzY3JpcHRpb24pKVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qIERlY29yYXRlIHRoZSBTeW1ib2wgZnVuY3Rpb24gd2l0aCB0aGUgYXBwcm9wcmlhdGUgcHJvcGVydGllcyAqL1xuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgJ2ZvcicsIGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmIChnbG9iYWxTeW1ib2xzW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxTeW1ib2xzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChnbG9iYWxTeW1ib2xzW2tleV0gPSBTeW1ib2woU3RyaW5nKGtleSkpKTtcbiAgICB9KSk7XG4gICAgZGVmaW5lUHJvcGVydGllcyhTeW1ib2wsIHtcbiAgICAgICAga2V5Rm9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICAgICAgbGV0IGtleTtcbiAgICAgICAgICAgIHZhbGlkYXRlU3ltYm9sKHN5bSk7XG4gICAgICAgICAgICBmb3IgKGtleSBpbiBnbG9iYWxTeW1ib2xzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdsb2JhbFN5bWJvbHNba2V5XSA9PT0gc3ltKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgaGFzSW5zdGFuY2U6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdoYXNJbnN0YW5jZScpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBpc0NvbmNhdFNwcmVhZGFibGU6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdpc0NvbmNhdFNwcmVhZGFibGUnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgaXRlcmF0b3I6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdpdGVyYXRvcicpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBtYXRjaDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ21hdGNoJyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIG9ic2VydmFibGU6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdvYnNlcnZhYmxlJyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIHJlcGxhY2U6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdyZXBsYWNlJyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIHNlYXJjaDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NlYXJjaCcpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBzcGVjaWVzOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignc3BlY2llcycpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBzcGxpdDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwbGl0JyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIHRvUHJpbWl0aXZlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigndG9QcmltaXRpdmUnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgdG9TdHJpbmdUYWc6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCd0b1N0cmluZ1RhZycpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICB1bnNjb3BhYmxlczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3Vuc2NvcGFibGVzJyksIGZhbHNlLCBmYWxzZSlcbiAgICB9KTtcbiAgICAvKiBEZWNvcmF0ZSB0aGUgSW50ZXJuYWxTeW1ib2wgb2JqZWN0ICovXG4gICAgZGVmaW5lUHJvcGVydGllcyhJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wpLFxuICAgICAgICB0b1N0cmluZzogZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fbmFtZV9fO1xuICAgICAgICB9LCBmYWxzZSwgZmFsc2UpXG4gICAgfSk7XG4gICAgLyogRGVjb3JhdGUgdGhlIFN5bWJvbC5wcm90b3R5cGUgKi9cbiAgICBkZWZpbmVQcm9wZXJ0aWVzKFN5bWJvbC5wcm90b3R5cGUsIHtcbiAgICAgICAgdG9TdHJpbmc6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1N5bWJvbCAoJyArIHZhbGlkYXRlU3ltYm9sKHRoaXMpLl9fZGVzY3JpcHRpb25fXyArICcpJztcbiAgICAgICAgfSksXG4gICAgICAgIHZhbHVlT2Y6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7XG4gICAgICAgIH0pXG4gICAgfSk7XG4gICAgZGVmaW5lUHJvcGVydHkoU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sLnRvUHJpbWl0aXZlLCBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7XG4gICAgfSkpO1xuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZ2V0VmFsdWVEZXNjcmlwdG9yKCdTeW1ib2wnLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcbiAgICBkZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1ByaW1pdGl2ZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSwgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XG4gICAgZGVmaW5lUHJvcGVydHkoSW50ZXJuYWxTeW1ib2wucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10sIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpO1xufVxuLyoqXG4gKiBBIGN1c3RvbSBndWFyZCBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgaWYgYW4gb2JqZWN0IGlzIGEgc3ltYm9sIG9yIG5vdFxuICogQHBhcmFtICB7YW55fSAgICAgICB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2sgdG8gc2VlIGlmIGl0IGlzIGEgc3ltYm9sIG9yIG5vdFxuICogQHJldHVybiB7aXMgc3ltYm9sfSAgICAgICBSZXR1cm5zIHRydWUgaWYgYSBzeW1ib2wgb3Igbm90IChhbmQgbmFycm93cyB0aGUgdHlwZSBndWFyZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fCB2YWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykpIHx8IGZhbHNlO1xufVxuLyoqXG4gKiBGaWxsIGFueSBtaXNzaW5nIHdlbGwga25vd24gc3ltYm9scyBpZiB0aGUgbmF0aXZlIFN5bWJvbCBpcyBtaXNzaW5nIHRoZW1cbiAqL1xuW1xuICAgICdoYXNJbnN0YW5jZScsXG4gICAgJ2lzQ29uY2F0U3ByZWFkYWJsZScsXG4gICAgJ2l0ZXJhdG9yJyxcbiAgICAnc3BlY2llcycsXG4gICAgJ3JlcGxhY2UnLFxuICAgICdzZWFyY2gnLFxuICAgICdzcGxpdCcsXG4gICAgJ21hdGNoJyxcbiAgICAndG9QcmltaXRpdmUnLFxuICAgICd0b1N0cmluZ1RhZycsXG4gICAgJ3Vuc2NvcGFibGVzJyxcbiAgICAnb2JzZXJ2YWJsZSdcbl0uZm9yRWFjaCgod2VsbEtub3duKSA9PiB7XG4gICAgaWYgKCFTeW1ib2xbd2VsbEtub3duXSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ltYm9sLCB3ZWxsS25vd24sIGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKHdlbGxLbm93biksIGZhbHNlLCBmYWxzZSkpO1xuICAgIH1cbn0pO1xuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3ltYm9sLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1N5bWJvbC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vU3ltYm9sLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IGlzQXJyYXlMaWtlIH0gZnJvbSAnLi9pdGVyYXRvcic7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0ICcuL1N5bWJvbCc7XG5leHBvcnQgbGV0IFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbmlmICghdHJ1ZSkge1xuICAgIGNvbnN0IERFTEVURUQgPSB7fTtcbiAgICBjb25zdCBnZXRVSUQgPSBmdW5jdGlvbiBnZXRVSUQoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApO1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVOYW1lID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHN0YXJ0SWQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgJSAxMDAwMDAwMDApO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gZ2VuZXJhdGVOYW1lKCkge1xuICAgICAgICAgICAgcmV0dXJuICdfX3dtJyArIGdldFVJRCgpICsgKHN0YXJ0SWQrKyArICdfXycpO1xuICAgICAgICB9O1xuICAgIH0pKCk7XG4gICAgV2Vha01hcCA9IGNsYXNzIFdlYWtNYXAge1xuICAgICAgICBjb25zdHJ1Y3RvcihpdGVyYWJsZSkge1xuICAgICAgICAgICAgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ1dlYWtNYXAnO1xuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IGdlbmVyYXRlTmFtZSgpO1xuICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcyA9IFtdO1xuICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChpdGVtWzBdLCBpdGVtWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9mcm96ZW5FbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Zyb3plbkVudHJpZXNbaV0ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZShrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcbiAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkge1xuICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gREVMRVRFRDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcm96ZW5FbnRyaWVzLnNwbGljZShmcm96ZW5JbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0KGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcbiAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJvemVuRW50cmllc1tmcm96ZW5JbmRleF0udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGFzKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xuICAgICAgICAgICAgaWYgKEJvb2xlYW4oZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURUQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcbiAgICAgICAgICAgIGlmIChmcm96ZW5JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICgha2V5IHx8ICh0eXBlb2Yga2V5ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2Yga2V5ICE9PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdmFsdWUgdXNlZCBhcyB3ZWFrIG1hcCBrZXknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcbiAgICAgICAgICAgIGlmICghZW50cnkgfHwgZW50cnkua2V5ICE9PSBrZXkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHsgdmFsdWU6IGtleSB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zyb3plbkVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoa2V5LCB0aGlzLl9uYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZW50cnlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IFdlYWtNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1XZWFrTWFwLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1dlYWtNYXAubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1dlYWtNYXAubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgaXNBcnJheUxpa2UsIGlzSXRlcmFibGUgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCB7IE1BWF9TQUZFX0lOVEVHRVIgfSBmcm9tICcuL251bWJlcic7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0IHsgd3JhcE5hdGl2ZSB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcbmV4cG9ydCBsZXQgZnJvbTtcbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBhcnJheSBmcm9tIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBhcmd1bWVudHMgQW55IG51bWJlciBvZiBhcmd1bWVudHMgZm9yIHRoZSBhcnJheVxuICogQHJldHVybiBBbiBhcnJheSBmcm9tIHRoZSBnaXZlbiBhcmd1bWVudHNcbiAqL1xuZXhwb3J0IGxldCBvZjtcbi8qIEVTNiBBcnJheSBpbnN0YW5jZSBtZXRob2RzICovXG4vKipcbiAqIENvcGllcyBkYXRhIGludGVybmFsbHkgd2l0aGluIGFuIGFycmF5IG9yIGFycmF5LWxpa2Ugb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBhcnJheS1saWtlIG9iamVjdFxuICogQHBhcmFtIG9mZnNldCBUaGUgaW5kZXggdG8gc3RhcnQgY29weWluZyB2YWx1ZXMgdG87IGlmIG5lZ2F0aXZlLCBpdCBjb3VudHMgYmFja3dhcmRzIGZyb20gbGVuZ3RoXG4gKiBAcGFyYW0gc3RhcnQgVGhlIGZpcnN0IChpbmNsdXNpdmUpIGluZGV4IHRvIGNvcHk7IGlmIG5lZ2F0aXZlLCBpdCBjb3VudHMgYmFja3dhcmRzIGZyb20gbGVuZ3RoXG4gKiBAcGFyYW0gZW5kIFRoZSBsYXN0IChleGNsdXNpdmUpIGluZGV4IHRvIGNvcHk7IGlmIG5lZ2F0aXZlLCBpdCBjb3VudHMgYmFja3dhcmRzIGZyb20gbGVuZ3RoXG4gKiBAcmV0dXJuIFRoZSB0YXJnZXRcbiAqL1xuZXhwb3J0IGxldCBjb3B5V2l0aGluO1xuLyoqXG4gKiBGaWxscyBlbGVtZW50cyBvZiBhbiBhcnJheS1saWtlIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHRvIGZpbGxcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBlYWNoIGVsZW1lbnQgb2YgdGhlIHRhcmdldCB3aXRoXG4gKiBAcGFyYW0gc3RhcnQgVGhlIGZpcnN0IGluZGV4IHRvIGZpbGxcbiAqIEBwYXJhbSBlbmQgVGhlIChleGNsdXNpdmUpIGluZGV4IGF0IHdoaWNoIHRvIHN0b3AgZmlsbGluZ1xuICogQHJldHVybiBUaGUgZmlsbGVkIHRhcmdldFxuICovXG5leHBvcnQgbGV0IGZpbGw7XG4vKipcbiAqIEZpbmRzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBpbnN0YW5jZSBtYXRjaGluZyB0aGUgY2FsbGJhY2sgb3IgdW5kZWZpbmVkIGlmIG9uZSBpcyBub3QgZm91bmQuXG4gKlxuICogQHBhcmFtIHRhcmdldCBBbiBhcnJheS1saWtlIG9iamVjdFxuICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gcmV0dXJuaW5nIGlmIHRoZSBjdXJyZW50IHZhbHVlIG1hdGNoZXMgYSBjcml0ZXJpYVxuICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgZmluZCBmdW5jdGlvblxuICogQHJldHVybiBUaGUgZmlyc3QgZWxlbWVudCBtYXRjaGluZyB0aGUgY2FsbGJhY2ssIG9yIHVuZGVmaW5lZCBpZiBvbmUgZG9lcyBub3QgZXhpc3RcbiAqL1xuZXhwb3J0IGxldCBmaW5kO1xuLyoqXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBzZWFyY2ggYW5kIHJldHVybnMgdGhlIGZpcnN0IGluZGV4IHdob3NlIHZhbHVlIHNhdGlzZmllcyB0aGUgcGFzc2VkIGNhbGxiYWNrLFxuICogb3IgLTEgaWYgbm8gdmFsdWVzIHNhdGlzZnkgaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCBBbiBhcnJheS1saWtlIG9iamVjdFxuICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgaWYgdGhlIGN1cnJlbnQgdmFsdWUgc2F0aXNmaWVzIGl0cyBjcml0ZXJpYVxuICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgZmluZCBmdW5jdGlvblxuICogQHJldHVybiBUaGUgZmlyc3QgaW5kZXggd2hvc2UgdmFsdWUgc2F0aXNmaWVzIHRoZSBwYXNzZWQgY2FsbGJhY2ssIG9yIC0xIGlmIG5vIHZhbHVlcyBzYXRpc2Z5IGl0XG4gKi9cbmV4cG9ydCBsZXQgZmluZEluZGV4O1xuLyogRVM3IEFycmF5IGluc3RhbmNlIG1ldGhvZHMgKi9cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGFycmF5IGluY2x1ZGVzIGEgZ2l2ZW4gdmFsdWVcbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJnZXQgYXJyYXktbGlrZSBvYmplY3RcbiAqIEBwYXJhbSBzZWFyY2hFbGVtZW50IHRoZSBpdGVtIHRvIHNlYXJjaCBmb3JcbiAqIEBwYXJhbSBmcm9tSW5kZXggdGhlIHN0YXJ0aW5nIGluZGV4IHRvIHNlYXJjaCBmcm9tXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgYXJyYXkgaW5jbHVkZXMgdGhlIGVsZW1lbnQsIG90aGVyd2lzZSBgZmFsc2VgXG4gKi9cbmV4cG9ydCBsZXQgaW5jbHVkZXM7XG5pZiAodHJ1ZSAmJiB0cnVlKSB7XG4gICAgZnJvbSA9IGdsb2JhbC5BcnJheS5mcm9tO1xuICAgIG9mID0gZ2xvYmFsLkFycmF5Lm9mO1xuICAgIGNvcHlXaXRoaW4gPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuY29weVdpdGhpbik7XG4gICAgZmlsbCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maWxsKTtcbiAgICBmaW5kID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmZpbmQpO1xuICAgIGZpbmRJbmRleCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgpO1xufVxuZWxzZSB7XG4gICAgLy8gSXQgaXMgb25seSBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkvaU9TIHRoYXQgaGF2ZSBhIGJhZCBmaWxsIGltcGxlbWVudGF0aW9uIGFuZCBzbyBhcmVuJ3QgaW4gdGhlIHdpbGRcbiAgICAvLyBUbyBtYWtlIHRoaW5ncyBlYXNpZXIsIGlmIHRoZXJlIGlzIGEgYmFkIGZpbGwgaW1wbGVtZW50YXRpb24sIHRoZSB3aG9sZSBzZXQgb2YgZnVuY3Rpb25zIHdpbGwgYmUgZmlsbGVkXG4gICAgLyoqXG4gICAgICogRW5zdXJlcyBhIG5vbi1uZWdhdGl2ZSwgbm9uLWluZmluaXRlLCBzYWZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgdG8gdmFsaWRhdGVcbiAgICAgKiBAcmV0dXJuIEEgcHJvcGVyIGxlbmd0aFxuICAgICAqL1xuICAgIGNvbnN0IHRvTGVuZ3RoID0gZnVuY3Rpb24gdG9MZW5ndGgobGVuZ3RoKSB7XG4gICAgICAgIGlmIChpc05hTihsZW5ndGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKTtcbiAgICAgICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgICAgICAgIGxlbmd0aCA9IE1hdGguZmxvb3IobGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgYSBub24tbmVnYXRpdmUsIHJlYWwsIHNhZmUgaW50ZWdlclxuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGVuZ3RoLCAwKSwgTUFYX1NBRkVfSU5URUdFUik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGcm9tIEVTNiA3LjEuNCBUb0ludGVnZXIoKVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gY29udmVydFxuICAgICAqIEByZXR1cm4gQW4gaW50ZWdlclxuICAgICAqL1xuICAgIGNvbnN0IHRvSW50ZWdlciA9IGZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMCB8fCAhaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh2YWx1ZSA+IDAgPyAxIDogLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyh2YWx1ZSkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplcyBhbiBvZmZzZXQgYWdhaW5zdCBhIGdpdmVuIGxlbmd0aCwgd3JhcHBpbmcgaXQgaWYgbmVnYXRpdmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIG9yaWdpbmFsIG9mZnNldFxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIHRvdGFsIGxlbmd0aCB0byBub3JtYWxpemUgYWdhaW5zdFxuICAgICAqIEByZXR1cm4gSWYgbmVnYXRpdmUsIHByb3ZpZGUgYSBkaXN0YW5jZSBmcm9tIHRoZSBlbmQgKGxlbmd0aCk7IG90aGVyd2lzZSBwcm92aWRlIGEgZGlzdGFuY2UgZnJvbSAwXG4gICAgICovXG4gICAgY29uc3Qgbm9ybWFsaXplT2Zmc2V0ID0gZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0KHZhbHVlLCBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgMCA/IE1hdGgubWF4KGxlbmd0aCArIHZhbHVlLCAwKSA6IE1hdGgubWluKHZhbHVlLCBsZW5ndGgpO1xuICAgIH07XG4gICAgZnJvbSA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLCBtYXBGdW5jdGlvbiwgdGhpc0FyZykge1xuICAgICAgICBpZiAoYXJyYXlMaWtlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Zyb206IHJlcXVpcmVzIGFuIGFycmF5LWxpa2Ugb2JqZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcEZ1bmN0aW9uICYmIHRoaXNBcmcpIHtcbiAgICAgICAgICAgIG1hcEZ1bmN0aW9uID0gbWFwRnVuY3Rpb24uYmluZCh0aGlzQXJnKTtcbiAgICAgICAgfVxuICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSAqL1xuICAgICAgICBjb25zdCBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKGFycmF5TGlrZS5sZW5ndGgpO1xuICAgICAgICAvLyBTdXBwb3J0IGV4dGVuc2lvblxuICAgICAgICBjb25zdCBhcnJheSA9IHR5cGVvZiBDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdChuZXcgQ29uc3RydWN0b3IobGVuZ3RoKSkgOiBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgaWYgKCFpc0FycmF5TGlrZShhcnJheUxpa2UpICYmICFpc0l0ZXJhYmxlKGFycmF5TGlrZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IGFuZCB0aGUgbm9ybWFsaXplZCBsZW5ndGggaXMgMCwganVzdCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuIHRoaXMgcHJldmVudHMgYSBwcm9ibGVtXG4gICAgICAgIC8vIHdpdGggdGhlIGl0ZXJhdGlvbiBvbiBJRSB3aGVuIHVzaW5nIGEgTmFOIGFycmF5IGxlbmd0aC5cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGFycmF5TGlrZSkpIHtcbiAgICAgICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5TGlrZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gbWFwRnVuY3Rpb24gPyBtYXBGdW5jdGlvbihhcnJheUxpa2VbaV0sIGkpIDogYXJyYXlMaWtlW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhcnJheUxpa2UpIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IG1hcEZ1bmN0aW9uID8gbWFwRnVuY3Rpb24odmFsdWUsIGkpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhcnJheUxpa2UubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFycmF5Lmxlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfTtcbiAgICBvZiA9IGZ1bmN0aW9uIG9mKC4uLml0ZW1zKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpdGVtcyk7XG4gICAgfTtcbiAgICBjb3B5V2l0aGluID0gZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQsIG9mZnNldCwgc3RhcnQsIGVuZCkge1xuICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvcHlXaXRoaW46IHRhcmdldCBtdXN0IGJlIGFuIGFycmF5LWxpa2Ugb2JqZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XG4gICAgICAgIG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldCh0b0ludGVnZXIob2Zmc2V0KSwgbGVuZ3RoKTtcbiAgICAgICAgc3RhcnQgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKHN0YXJ0KSwgbGVuZ3RoKTtcbiAgICAgICAgZW5kID0gbm9ybWFsaXplT2Zmc2V0KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCksIGxlbmd0aCk7XG4gICAgICAgIGxldCBjb3VudCA9IE1hdGgubWluKGVuZCAtIHN0YXJ0LCBsZW5ndGggLSBvZmZzZXQpO1xuICAgICAgICBsZXQgZGlyZWN0aW9uID0gMTtcbiAgICAgICAgaWYgKG9mZnNldCA+IHN0YXJ0ICYmIG9mZnNldCA8IHN0YXJ0ICsgY291bnQpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xO1xuICAgICAgICAgICAgc3RhcnQgKz0gY291bnQgLSAxO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGNvdW50IC0gMTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICBpZiAoc3RhcnQgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W29mZnNldF0gPSB0YXJnZXRbc3RhcnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRhcmdldFtvZmZzZXRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ICs9IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIHN0YXJ0ICs9IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIGNvdW50LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xuICAgIGZpbGwgPSBmdW5jdGlvbiBmaWxsKHRhcmdldCwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XG4gICAgICAgIGxldCBpID0gbm9ybWFsaXplT2Zmc2V0KHRvSW50ZWdlcihzdGFydCksIGxlbmd0aCk7XG4gICAgICAgIGVuZCA9IG5vcm1hbGl6ZU9mZnNldChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpLCBsZW5ndGgpO1xuICAgICAgICB3aGlsZSAoaSA8IGVuZCkge1xuICAgICAgICAgICAgdGFyZ2V0W2krK10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG4gICAgZmluZCA9IGZ1bmN0aW9uIGZpbmQodGFyZ2V0LCBjYWxsYmFjaywgdGhpc0FyZykge1xuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKTtcbiAgICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IHRhcmdldFtpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBmaW5kSW5kZXggPSBmdW5jdGlvbiBmaW5kSW5kZXgodGFyZ2V0LCBjYWxsYmFjaywgdGhpc0FyZykge1xuICAgICAgICBjb25zdCBsZW5ndGggPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZmluZDogc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzQXJnKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpc0FyZyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHRhcmdldFtpXSwgaSwgdGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9O1xufVxuaWYgKHRydWUpIHtcbiAgICBpbmNsdWRlcyA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5pbmNsdWRlcyk7XG59XG5lbHNlIHtcbiAgICAvKipcbiAgICAgKiBFbnN1cmVzIGEgbm9uLW5lZ2F0aXZlLCBub24taW5maW5pdGUsIHNhZmUgaW50ZWdlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciB0byB2YWxpZGF0ZVxuICAgICAqIEByZXR1cm4gQSBwcm9wZXIgbGVuZ3RoXG4gICAgICovXG4gICAgY29uc3QgdG9MZW5ndGggPSBmdW5jdGlvbiB0b0xlbmd0aChsZW5ndGgpIHtcbiAgICAgICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7XG4gICAgICAgIGlmIChpc05hTihsZW5ndGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgICAgICAgbGVuZ3RoID0gTWF0aC5mbG9vcihsZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSBhIG5vbi1uZWdhdGl2ZSwgcmVhbCwgc2FmZSBpbnRlZ2VyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChsZW5ndGgsIDApLCBNQVhfU0FGRV9JTlRFR0VSKTtcbiAgICB9O1xuICAgIGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXModGFyZ2V0LCBzZWFyY2hFbGVtZW50LCBmcm9tSW5kZXggPSAwKSB7XG4gICAgICAgIGxldCBsZW4gPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGZyb21JbmRleDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IHRhcmdldFtpXTtcbiAgICAgICAgICAgIGlmIChzZWFyY2hFbGVtZW50ID09PSBjdXJyZW50RWxlbWVudCB8fFxuICAgICAgICAgICAgICAgIChzZWFyY2hFbGVtZW50ICE9PSBzZWFyY2hFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBjdXJyZW50RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFycmF5Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2FycmF5Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9hcnJheS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiY29uc3QgZ2xvYmFsT2JqZWN0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gZ2xvYmFsIHNwZWMgZGVmaW5lcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdCBjYWxsZWQgJ2dsb2JhbCdcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG4gICAgICAgIC8vIGBnbG9iYWxgIGlzIGFsc28gZGVmaW5lZCBpbiBOb2RlSlNcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gd2luZG93IGlzIGRlZmluZWQgaW4gYnJvd3NlcnNcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIHNlbGYgaXMgZGVmaW5lZCBpbiBXZWJXb3JrZXJzXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbn0pKCk7XG5leHBvcnQgZGVmYXVsdCBnbG9iYWxPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iYWwubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vZ2xvYmFsLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9nbG9iYWwubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCAnLi9TeW1ib2wnO1xuaW1wb3J0IHsgSElHSF9TVVJST0dBVEVfTUFYLCBISUdIX1NVUlJPR0FURV9NSU4gfSBmcm9tICcuL3N0cmluZyc7XG5jb25zdCBzdGF0aWNEb25lID0geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4vKipcbiAqIEEgY2xhc3MgdGhhdCBfc2hpbXNfIGFuIGl0ZXJhdG9yIGludGVyZmFjZSBvbiBhcnJheSBsaWtlIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaGltSXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGxpc3QpIHtcbiAgICAgICAgdGhpcy5fbmV4dEluZGV4ID0gLTE7XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGxpc3QpKSB7XG4gICAgICAgICAgICB0aGlzLl9uYXRpdmVJdGVyYXRvciA9IGxpc3RbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGlzdCA9IGxpc3Q7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBuZXh0IGl0ZXJhdGlvbiByZXN1bHQgZm9yIHRoZSBJdGVyYXRvclxuICAgICAqL1xuICAgIG5leHQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9uYXRpdmVJdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25hdGl2ZUl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2xpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0aWNEb25lO1xuICAgICAgICB9XG4gICAgICAgIGlmICgrK3RoaXMuX25leHRJbmRleCA8IHRoaXMuX2xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9saXN0W3RoaXMuX25leHRJbmRleF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRpY0RvbmU7XG4gICAgfVxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4vKipcbiAqIEEgdHlwZSBndWFyZCBmb3IgY2hlY2tpbmcgaWYgc29tZXRoaW5nIGhhcyBhbiBJdGVyYWJsZSBpbnRlcmZhY2VcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogQSB0eXBlIGd1YXJkIGZvciBjaGVja2luZyBpZiBzb21ldGhpbmcgaXMgQXJyYXlMaWtlXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0eXBlIGd1YXJkIGFnYWluc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBmb3IgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIGl0ZXJhYmxlIFRoZSBpdGVyYWJsZSBvYmplY3QgdG8gcmV0dXJuIHRoZSBpdGVyYXRvciBmb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldChpdGVyYWJsZSkge1xuICAgIGlmIChpc0l0ZXJhYmxlKGl0ZXJhYmxlKSkge1xuICAgICAgICByZXR1cm4gaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTaGltSXRlcmF0b3IoaXRlcmFibGUpO1xuICAgIH1cbn1cbi8qKlxuICogU2hpbXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYGZvciAuLi4gb2ZgIGJsb2Nrc1xuICpcbiAqIEBwYXJhbSBpdGVyYWJsZSBUaGUgb2JqZWN0IHRoZSBwcm92aWRlcyBhbiBpbnRlcmF0b3IgaW50ZXJmYWNlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIGl0ZW0gb2YgdGhlIGl0ZXJhYmxlXG4gKiBAcGFyYW0gdGhpc0FyZyBPcHRpb25hbCBzY29wZSB0byBwYXNzIHRoZSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9yT2YoaXRlcmFibGUsIGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgbGV0IGJyb2tlbiA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvQnJlYWsoKSB7XG4gICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgfVxuICAgIC8qIFdlIG5lZWQgdG8gaGFuZGxlIGl0ZXJhdGlvbiBvZiBkb3VibGUgYnl0ZSBzdHJpbmdzIHByb3Blcmx5ICovXG4gICAgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSAmJiB0eXBlb2YgaXRlcmFibGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGwgPSBpdGVyYWJsZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBsZXQgY2hhciA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgaWYgKGkgKyAxIDwgbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgPj0gSElHSF9TVVJST0dBVEVfTUlOICYmIGNvZGUgPD0gSElHSF9TVVJST0dBVEVfTUFYKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXIgKz0gaXRlcmFibGVbKytpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIGNoYXIsIGl0ZXJhYmxlLCBkb0JyZWFrKTtcbiAgICAgICAgICAgIGlmIChicm9rZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gZ2V0KGl0ZXJhYmxlKTtcbiAgICAgICAgaWYgKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgcmVzdWx0LnZhbHVlLCBpdGVyYWJsZSwgZG9CcmVhayk7XG4gICAgICAgICAgICAgICAgaWYgKGJyb2tlbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWl0ZXJhdG9yLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2l0ZXJhdG9yLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9pdGVyYXRvci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG4vKipcbiAqIFRoZSBzbWFsbGVzdCBpbnRlcnZhbCBiZXR3ZWVuIHR3byByZXByZXNlbnRhYmxlIG51bWJlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBFUFNJTE9OID0gMTtcbi8qKlxuICogVGhlIG1heGltdW0gc2FmZSBpbnRlZ2VyIGluIEphdmFTY3JpcHRcbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9TQUZFX0lOVEVHRVIgPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuLyoqXG4gKiBUaGUgbWluaW11bSBzYWZlIGludGVnZXIgaW4gSmF2YVNjcmlwdFxuICovXG5leHBvcnQgY29uc3QgTUlOX1NBRkVfSU5URUdFUiA9IC1NQVhfU0FGRV9JTlRFR0VSO1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBOYU4gd2l0aG91dCBjb2Vyc2lvbi5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgTmFOLCBmYWxzZSBpZiBpdCBpcyBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgZ2xvYmFsLmlzTmFOKHZhbHVlKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgYSBmaW5pdGUgbnVtYmVyIHdpdGhvdXQgY29lcnNpb24uXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIGZpbml0ZSwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zpbml0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGdsb2JhbC5pc0Zpbml0ZSh2YWx1ZSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGFuIGludGVnZXIuXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIsIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGFuIGludGVnZXIgdGhhdCBpcyAnc2FmZSwnIG1lYW5pbmc6XG4gKiAgIDEuIGl0IGNhbiBiZSBleHByZXNzZWQgYXMgYW4gSUVFRS03NTQgZG91YmxlIHByZWNpc2lvbiBudW1iZXJcbiAqICAgMi4gaXQgaGFzIGEgb25lLXRvLW9uZSBtYXBwaW5nIHRvIGEgbWF0aGVtYXRpY2FsIGludGVnZXIsIG1lYW5pbmcgaXRzXG4gKiAgICAgIElFRUUtNzU0IHJlcHJlc2VudGF0aW9uIGNhbm5vdCBiZSB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIGFueSBvdGhlclxuICogICAgICBpbnRlZ2VyIHRvIGZpdCB0aGUgSUVFRS03NTQgcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcih2YWx1ZSkgJiYgTWF0aC5hYnModmFsdWUpIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1udW1iZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vbnVtYmVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9udW1iZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcbmltcG9ydCB7IGlzU3ltYm9sIH0gZnJvbSAnLi9TeW1ib2wnO1xuZXhwb3J0IGxldCBhc3NpZ247XG4vKipcbiAqIEdldHMgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0LlxuICogQW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgaXMgb25lIHRoYXQgaXMgZGVmaW5lZCBkaXJlY3RseSBvbiB0aGUgb2JqZWN0IGFuZCBpcyBub3RcbiAqIGluaGVyaXRlZCBmcm9tIHRoZSBvYmplY3QncyBwcm90b3R5cGUuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydHkuXG4gKiBAcGFyYW0gcCBOYW1lIG9mIHRoZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBvd24gcHJvcGVydGllcyBvZiBhbiBvYmplY3QuIFRoZSBvd24gcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYXJlIHRob3NlIHRoYXQgYXJlIGRlZmluZWQgZGlyZWN0bHlcbiAqIG9uIHRoYXQgb2JqZWN0LCBhbmQgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSB0aGUgb2JqZWN0J3MgcHJvdG90eXBlLiBUaGUgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgaW5jbHVkZSBib3RoIGZpZWxkcyAob2JqZWN0cykgYW5kIGZ1bmN0aW9ucy5cbiAqIEBwYXJhbSBvIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBvd24gcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBzeW1ib2wgcHJvcGVydGllcyBmb3VuZCBkaXJlY3RseSBvbiBvYmplY3Qgby5cbiAqIEBwYXJhbSBvIE9iamVjdCB0byByZXRyaWV2ZSB0aGUgc3ltYm9scyBmcm9tLlxuICovXG5leHBvcnQgbGV0IGdldE93blByb3BlcnR5U3ltYm9scztcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAcGFyYW0gdmFsdWUxIFRoZSBmaXJzdCB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZTIgVGhlIHNlY29uZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGxldCBpcztcbi8qKlxuICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBvZiBhbiBvYmplY3QuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy4gVGhpcyBjYW4gYmUgYW4gb2JqZWN0IHRoYXQgeW91IGNyZWF0ZWQgb3IgYW4gZXhpc3RpbmcgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIG9iamVjdC5cbiAqL1xuZXhwb3J0IGxldCBrZXlzO1xuLyogRVM3IE9iamVjdCBzdGF0aWMgbWV0aG9kcyAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuZXhwb3J0IGxldCBlbnRyaWVzO1xuZXhwb3J0IGxldCB2YWx1ZXM7XG5pZiAodHJ1ZSkge1xuICAgIGNvbnN0IGdsb2JhbE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XG4gICAgYXNzaWduID0gZ2xvYmFsT2JqZWN0LmFzc2lnbjtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIGdldE93blByb3BlcnR5TmFtZXMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuICAgIGlzID0gZ2xvYmFsT2JqZWN0LmlzO1xuICAgIGtleXMgPSBnbG9iYWxPYmplY3Qua2V5cztcbn1cbmVsc2Uge1xuICAgIGtleXMgPSBmdW5jdGlvbiBzeW1ib2xBd2FyZUtleXMobykge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobykuZmlsdGVyKChrZXkpID0+ICFCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpO1xuICAgIH07XG4gICAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFR5cGVFcnJvciBpZiB1bmRlZmluZWQgb3IgbnVsbFxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG8gPSBPYmplY3QodGFyZ2V0KTtcbiAgICAgICAgc291cmNlcy5mb3JFYWNoKChuZXh0U291cmNlKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV4dFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciBpZiB1bmRlZmluZWQgb3IgbnVsbFxuICAgICAgICAgICAgICAgIGtleXMobmV4dFNvdXJjZSkuZm9yRWFjaCgobmV4dEtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdG87XG4gICAgfTtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCkge1xuICAgICAgICBpZiAoaXNTeW1ib2wocHJvcCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG8pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLmZpbHRlcigoa2V5KSA9PiAhQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKTtcbiAgICB9O1xuICAgIGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhvKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKVxuICAgICAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpXG4gICAgICAgICAgICAubWFwKChrZXkpID0+IFN5bWJvbC5mb3Ioa2V5LnN1YnN0cmluZygyKSkpO1xuICAgIH07XG4gICAgaXMgPSBmdW5jdGlvbiBpcyh2YWx1ZTEsIHZhbHVlMikge1xuICAgICAgICBpZiAodmFsdWUxID09PSB2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTEgIT09IDAgfHwgMSAvIHZhbHVlMSA9PT0gMSAvIHZhbHVlMjsgLy8gLTBcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUxICE9PSB2YWx1ZTEgJiYgdmFsdWUyICE9PSB2YWx1ZTI7IC8vIE5hTlxuICAgIH07XG59XG5pZiAodHJ1ZSkge1xuICAgIGNvbnN0IGdsb2JhbE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuICAgIGVudHJpZXMgPSBnbG9iYWxPYmplY3QuZW50cmllcztcbiAgICB2YWx1ZXMgPSBnbG9iYWxPYmplY3QudmFsdWVzO1xufVxuZWxzZSB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobykge1xuICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5yZWR1Y2UoKHByZXZpb3VzLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHByZXZpb3VzW2tleV0gPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobywga2V5KTtcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgfSwge30pO1xuICAgIH07XG4gICAgZW50cmllcyA9IGZ1bmN0aW9uIGVudHJpZXMobykge1xuICAgICAgICByZXR1cm4ga2V5cyhvKS5tYXAoKGtleSkgPT4gW2tleSwgb1trZXldXSk7XG4gICAgfTtcbiAgICB2YWx1ZXMgPSBmdW5jdGlvbiB2YWx1ZXMobykge1xuICAgICAgICByZXR1cm4ga2V5cyhvKS5tYXAoKGtleSkgPT4gb1trZXldKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL29iamVjdC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgeyB3cmFwTmF0aXZlIH0gZnJvbSAnLi9zdXBwb3J0L3V0aWwnO1xuLyoqXG4gKiBUaGUgbWluaW11bSBsb2NhdGlvbiBvZiBoaWdoIHN1cnJvZ2F0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IEhJR0hfU1VSUk9HQVRFX01JTiA9IDB4ZDgwMDtcbi8qKlxuICogVGhlIG1heGltdW0gbG9jYXRpb24gb2YgaGlnaCBzdXJyb2dhdGVzXG4gKi9cbmV4cG9ydCBjb25zdCBISUdIX1NVUlJPR0FURV9NQVggPSAweGRiZmY7XG4vKipcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGxvdyBzdXJyb2dhdGVzXG4gKi9cbmV4cG9ydCBjb25zdCBMT1dfU1VSUk9HQVRFX01JTiA9IDB4ZGMwMDtcbi8qKlxuICogVGhlIG1heGltdW0gbG9jYXRpb24gb2YgbG93IHN1cnJvZ2F0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IExPV19TVVJST0dBVEVfTUFYID0gMHhkZmZmO1xuLyogRVM2IHN0YXRpYyBtZXRob2RzICovXG4vKipcbiAqIFJldHVybiB0aGUgU3RyaW5nIHZhbHVlIHdob3NlIGVsZW1lbnRzIGFyZSwgaW4gb3JkZXIsIHRoZSBlbGVtZW50cyBpbiB0aGUgTGlzdCBlbGVtZW50cy5cbiAqIElmIGxlbmd0aCBpcyAwLCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLlxuICogQHBhcmFtIGNvZGVQb2ludHMgVGhlIGNvZGUgcG9pbnRzIHRvIGdlbmVyYXRlIHRoZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGxldCBmcm9tQ29kZVBvaW50O1xuLyoqXG4gKiBgcmF3YCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgdGFnIGZ1bmN0aW9uIG9mIGEgVGFnZ2VkIFRlbXBsYXRlIFN0cmluZy4gV2hlbiBjYWxsZWRcbiAqIGFzIHN1Y2ggdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYSB3ZWxsIGZvcm1lZCB0ZW1wbGF0ZSBjYWxsIHNpdGUgb2JqZWN0IGFuZCB0aGUgcmVzdFxuICogcGFyYW1ldGVyIHdpbGwgY29udGFpbiB0aGUgc3Vic3RpdHV0aW9uIHZhbHVlcy5cbiAqIEBwYXJhbSB0ZW1wbGF0ZSBBIHdlbGwtZm9ybWVkIHRlbXBsYXRlIHN0cmluZyBjYWxsIHNpdGUgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0gc3Vic3RpdHV0aW9ucyBBIHNldCBvZiBzdWJzdGl0dXRpb24gdmFsdWVzLlxuICovXG5leHBvcnQgbGV0IHJhdztcbi8qIEVTNiBpbnN0YW5jZSBtZXRob2RzICovXG4vKipcbiAqIFJldHVybnMgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIE51bWJlciBsZXNzIHRoYW4gMTExNDExMiAoMHgxMTAwMDApIHRoYXQgaXMgdGhlIGNvZGUgcG9pbnRcbiAqIHZhbHVlIG9mIHRoZSBVVEYtMTYgZW5jb2RlZCBjb2RlIHBvaW50IHN0YXJ0aW5nIGF0IHRoZSBzdHJpbmcgZWxlbWVudCBhdCBwb3NpdGlvbiBwb3MgaW5cbiAqIHRoZSBTdHJpbmcgcmVzdWx0aW5nIGZyb20gY29udmVydGluZyB0aGlzIG9iamVjdCB0byBhIFN0cmluZy5cbiAqIElmIHRoZXJlIGlzIG5vIGVsZW1lbnQgYXQgdGhhdCBwb3NpdGlvbiwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuXG4gKiBJZiBhIHZhbGlkIFVURi0xNiBzdXJyb2dhdGUgcGFpciBkb2VzIG5vdCBiZWdpbiBhdCBwb3MsIHRoZSByZXN1bHQgaXMgdGhlIGNvZGUgdW5pdCBhdCBwb3MuXG4gKi9cbmV4cG9ydCBsZXQgY29kZVBvaW50QXQ7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcbiAqIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhpcyBvYmplY3QgKGNvbnZlcnRlZCB0byBhIFN0cmluZykgc3RhcnRpbmcgYXRcbiAqIGVuZFBvc2l0aW9uIOKAkyBsZW5ndGgodGhpcykuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICovXG5leHBvcnQgbGV0IGVuZHNXaXRoO1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgc2VhcmNoU3RyaW5nIGFwcGVhcnMgYXMgYSBzdWJzdHJpbmcgb2YgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoaXNcbiAqIG9iamVjdCB0byBhIFN0cmluZywgYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIHRoYXQgYXJlXG4gKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gcG9zaXRpb247IG90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcbiAqIEBwYXJhbSBzZWFyY2hTdHJpbmcgc2VhcmNoIHN0cmluZ1xuICogQHBhcmFtIHBvc2l0aW9uIElmIHBvc2l0aW9uIGlzIHVuZGVmaW5lZCwgMCBpcyBhc3N1bWVkLCBzbyBhcyB0byBzZWFyY2ggYWxsIG9mIHRoZSBTdHJpbmcuXG4gKi9cbmV4cG9ydCBsZXQgaW5jbHVkZXM7XG4vKipcbiAqIFJldHVybnMgdGhlIFN0cmluZyB2YWx1ZSByZXN1bHQgb2Ygbm9ybWFsaXppbmcgdGhlIHN0cmluZyBpbnRvIHRoZSBub3JtYWxpemF0aW9uIGZvcm1cbiAqIG5hbWVkIGJ5IGZvcm0gYXMgc3BlY2lmaWVkIGluIFVuaWNvZGUgU3RhbmRhcmQgQW5uZXggIzE1LCBVbmljb2RlIE5vcm1hbGl6YXRpb24gRm9ybXMuXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXG4gKiBAcGFyYW0gZm9ybSBBcHBsaWNhYmxlIHZhbHVlczogXCJORkNcIiwgXCJORkRcIiwgXCJORktDXCIsIG9yIFwiTkZLRFwiLCBJZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRcbiAqIGlzIFwiTkZDXCJcbiAqL1xuZXhwb3J0IGxldCBub3JtYWxpemU7XG4vKipcbiAqIFJldHVybnMgYSBTdHJpbmcgdmFsdWUgdGhhdCBpcyBtYWRlIGZyb20gY291bnQgY29waWVzIGFwcGVuZGVkIHRvZ2V0aGVyLiBJZiBjb3VudCBpcyAwLFxuICogVCBpcyB0aGUgZW1wdHkgU3RyaW5nIGlzIHJldHVybmVkLlxuICogQHBhcmFtIGNvdW50IG51bWJlciBvZiBjb3BpZXMgdG8gYXBwZW5kXG4gKi9cbmV4cG9ydCBsZXQgcmVwZWF0O1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlcXVlbmNlIG9mIGVsZW1lbnRzIG9mIHNlYXJjaFN0cmluZyBjb252ZXJ0ZWQgdG8gYSBTdHJpbmcgaXMgdGhlXG4gKiBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHRoaXMgb2JqZWN0IChjb252ZXJ0ZWQgdG8gYSBTdHJpbmcpIHN0YXJ0aW5nIGF0XG4gKiBwb3NpdGlvbi4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gKi9cbmV4cG9ydCBsZXQgc3RhcnRzV2l0aDtcbi8qIEVTNyBpbnN0YW5jZSBtZXRob2RzICovXG4vKipcbiAqIFBhZHMgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGggYSBnaXZlbiBzdHJpbmcgKHBvc3NpYmx5IHJlcGVhdGVkKSBzbyB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIHJlYWNoZXMgYSBnaXZlbiBsZW5ndGguXG4gKiBUaGUgcGFkZGluZyBpcyBhcHBsaWVkIGZyb20gdGhlIGVuZCAocmlnaHQpIG9mIHRoZSBjdXJyZW50IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcgb25jZSB0aGUgY3VycmVudCBzdHJpbmcgaGFzIGJlZW4gcGFkZGVkLlxuICogICAgICAgIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBzdHJpbmcncyBsZW5ndGgsIHRoZSBjdXJyZW50IHN0cmluZyB3aWxsIGJlIHJldHVybmVkIGFzIGl0IGlzLlxuICpcbiAqIEBwYXJhbSBmaWxsU3RyaW5nIFRoZSBzdHJpbmcgdG8gcGFkIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoLlxuICogICAgICAgIElmIHRoaXMgc3RyaW5nIGlzIHRvbyBsb25nLCBpdCB3aWxsIGJlIHRydW5jYXRlZCBhbmQgdGhlIGxlZnQtbW9zdCBwYXJ0IHdpbGwgYmUgYXBwbGllZC5cbiAqICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgXCIgXCIgKFUrMDAyMCkuXG4gKi9cbmV4cG9ydCBsZXQgcGFkRW5kO1xuLyoqXG4gKiBQYWRzIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoIGEgZ2l2ZW4gc3RyaW5nIChwb3NzaWJseSByZXBlYXRlZCkgc28gdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyByZWFjaGVzIGEgZ2l2ZW4gbGVuZ3RoLlxuICogVGhlIHBhZGRpbmcgaXMgYXBwbGllZCBmcm9tIHRoZSBzdGFydCAobGVmdCkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcbiAqIEBwYXJhbSBtYXhMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBvbmNlIHRoZSBjdXJyZW50IHN0cmluZyBoYXMgYmVlbiBwYWRkZWQuXG4gKiAgICAgICAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHN0cmluZydzIGxlbmd0aCwgdGhlIGN1cnJlbnQgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQgYXMgaXQgaXMuXG4gKlxuICogQHBhcmFtIGZpbGxTdHJpbmcgVGhlIHN0cmluZyB0byBwYWQgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGguXG4gKiAgICAgICAgSWYgdGhpcyBzdHJpbmcgaXMgdG9vIGxvbmcsIGl0IHdpbGwgYmUgdHJ1bmNhdGVkIGFuZCB0aGUgbGVmdC1tb3N0IHBhcnQgd2lsbCBiZSBhcHBsaWVkLlxuICogICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyBcIiBcIiAoVSswMDIwKS5cbiAqL1xuZXhwb3J0IGxldCBwYWRTdGFydDtcbmlmICh0cnVlICYmIHRydWUpIHtcbiAgICBmcm9tQ29kZVBvaW50ID0gZ2xvYmFsLlN0cmluZy5mcm9tQ29kZVBvaW50O1xuICAgIHJhdyA9IGdsb2JhbC5TdHJpbmcucmF3O1xuICAgIGNvZGVQb2ludEF0ID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdCk7XG4gICAgZW5kc1dpdGggPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKTtcbiAgICBpbmNsdWRlcyA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMpO1xuICAgIG5vcm1hbGl6ZSA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUubm9ybWFsaXplKTtcbiAgICByZXBlYXQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnJlcGVhdCk7XG4gICAgc3RhcnRzV2l0aCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCk7XG59XG5lbHNlIHtcbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgdGhhdCB0ZXh0IGlzIGRlZmluZWQsIGFuZCBub3JtYWxpemVzIHBvc2l0aW9uIChiYXNlZCBvbiB0aGUgZ2l2ZW4gZGVmYXVsdCBpZiB0aGUgaW5wdXQgaXMgTmFOKS5cbiAgICAgKiBVc2VkIGJ5IHN0YXJ0c1dpdGgsIGluY2x1ZGVzLCBhbmQgZW5kc1dpdGguXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIE5vcm1hbGl6ZWQgcG9zaXRpb24uXG4gICAgICovXG4gICAgY29uc3Qgbm9ybWFsaXplU3Vic3RyaW5nQXJncyA9IGZ1bmN0aW9uIChuYW1lLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uLCBpc0VuZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy4nICsgbmFtZSArICcgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcgdG8gc2VhcmNoIGFnYWluc3QuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XG4gICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gIT09IHBvc2l0aW9uID8gKGlzRW5kID8gbGVuZ3RoIDogMCkgOiBwb3NpdGlvbjtcbiAgICAgICAgcmV0dXJuIFt0ZXh0LCBTdHJpbmcoc2VhcmNoKSwgTWF0aC5taW4oTWF0aC5tYXgocG9zaXRpb24sIDApLCBsZW5ndGgpXTtcbiAgICB9O1xuICAgIGZyb21Db2RlUG9pbnQgPSBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpIHtcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5mcm9tQ29kZVBvaW50XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgICAgICAgY29uc3QgTUFYX1NJWkUgPSAweDQwMDA7XG4gICAgICAgIGxldCBjb2RlVW5pdHMgPSBbXTtcbiAgICAgICAgbGV0IGluZGV4ID0gLTE7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBjb2RlUG9pbnQgPSBOdW1iZXIoYXJndW1lbnRzW2luZGV4XSk7XG4gICAgICAgICAgICAvLyBDb2RlIHBvaW50cyBtdXN0IGJlIGZpbml0ZSBpbnRlZ2VycyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlXG4gICAgICAgICAgICBsZXQgaXNWYWxpZCA9IGlzRmluaXRlKGNvZGVQb2ludCkgJiYgTWF0aC5mbG9vcihjb2RlUG9pbnQpID09PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50ID49IDAgJiYgY29kZVBvaW50IDw9IDB4MTBmZmZmO1xuICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcignc3RyaW5nLmZyb21Db2RlUG9pbnQ6IEludmFsaWQgY29kZSBwb2ludCAnICsgY29kZVBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhmZmZmKSB7XG4gICAgICAgICAgICAgICAgLy8gQk1QIGNvZGUgcG9pbnRcbiAgICAgICAgICAgICAgICBjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQXN0cmFsIGNvZGUgcG9pbnQ7IHNwbGl0IGluIHN1cnJvZ2F0ZSBoYWx2ZXNcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcbiAgICAgICAgICAgICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMDtcbiAgICAgICAgICAgICAgICBsZXQgaGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgSElHSF9TVVJST0dBVEVfTUlOO1xuICAgICAgICAgICAgICAgIGxldCBsb3dTdXJyb2dhdGUgPSBjb2RlUG9pbnQgJSAweDQwMCArIExPV19TVVJST0dBVEVfTUlOO1xuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGhpZ2hTdXJyb2dhdGUsIGxvd1N1cnJvZ2F0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5kZXggKyAxID09PSBsZW5ndGggfHwgY29kZVVuaXRzLmxlbmd0aCA+IE1BWF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZyb21DaGFyQ29kZS5hcHBseShudWxsLCBjb2RlVW5pdHMpO1xuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICByYXcgPSBmdW5jdGlvbiByYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpIHtcbiAgICAgICAgbGV0IHJhd1N0cmluZ3MgPSBjYWxsU2l0ZS5yYXc7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgbGV0IG51bVN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zLmxlbmd0aDtcbiAgICAgICAgaWYgKGNhbGxTaXRlID09IG51bGwgfHwgY2FsbFNpdGUucmF3ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yYXcgcmVxdWlyZXMgYSB2YWxpZCBjYWxsU2l0ZSBvYmplY3Qgd2l0aCBhIHJhdyB2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSByYXdTdHJpbmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gcmF3U3RyaW5nc1tpXSArIChpIDwgbnVtU3Vic3RpdHV0aW9ucyAmJiBpIDwgbGVuZ3RoIC0gMSA/IHN1YnN0aXR1dGlvbnNbaV0gOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvZGVQb2ludEF0ID0gZnVuY3Rpb24gY29kZVBvaW50QXQodGV4dCwgcG9zaXRpb24gPSAwKSB7XG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0XG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5jb2RlUG9pbnRBdCByZXF1cmllcyBhIHZhbGlkIHN0cmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHBvc2l0aW9uICE9PSBwb3NpdGlvbikge1xuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdldCB0aGUgZmlyc3QgY29kZSB1bml0XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICAgICAgaWYgKGZpcnN0ID49IEhJR0hfU1VSUk9HQVRFX01JTiAmJiBmaXJzdCA8PSBISUdIX1NVUlJPR0FURV9NQVggJiYgbGVuZ3RoID4gcG9zaXRpb24gKyAxKSB7XG4gICAgICAgICAgICAvLyBTdGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyIChoaWdoIHN1cnJvZ2F0ZSBhbmQgdGhlcmUgaXMgYSBuZXh0IGNvZGUgdW5pdCk7IGNoZWNrIGZvciBsb3cgc3Vycm9nYXRlXG4gICAgICAgICAgICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHRleHQuY2hhckNvZGVBdChwb3NpdGlvbiArIDEpO1xuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSBMT1dfU1VSUk9HQVRFX01JTiAmJiBzZWNvbmQgPD0gTE9XX1NVUlJPR0FURV9NQVgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGZpcnN0IC0gSElHSF9TVVJST0dBVEVfTUlOKSAqIDB4NDAwICsgc2Vjb25kIC0gTE9XX1NVUlJPR0FURV9NSU4gKyAweDEwMDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdDtcbiAgICB9O1xuICAgIGVuZHNXaXRoID0gZnVuY3Rpb24gZW5kc1dpdGgodGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbikge1xuICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgZW5kUG9zaXRpb24gPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBbdGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdlbmRzV2l0aCcsIHRleHQsIHNlYXJjaCwgZW5kUG9zaXRpb24sIHRydWUpO1xuICAgICAgICBjb25zdCBzdGFydCA9IGVuZFBvc2l0aW9uIC0gc2VhcmNoLmxlbmd0aDtcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmRQb3NpdGlvbikgPT09IHNlYXJjaDtcbiAgICB9O1xuICAgIGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXModGV4dCwgc2VhcmNoLCBwb3NpdGlvbiA9IDApIHtcbiAgICAgICAgW3RleHQsIHNlYXJjaCwgcG9zaXRpb25dID0gbm9ybWFsaXplU3Vic3RyaW5nQXJncygnaW5jbHVkZXMnLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRleHQuaW5kZXhPZihzZWFyY2gsIHBvc2l0aW9uKSAhPT0gLTE7XG4gICAgfTtcbiAgICByZXBlYXQgPSBmdW5jdGlvbiByZXBlYXQodGV4dCwgY291bnQgPSAwKSB7XG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLnJlcGVhdFxuICAgICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3VudCAhPT0gY291bnQpIHtcbiAgICAgICAgICAgIGNvdW50ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPCAwIHx8IGNvdW50ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgd2hpbGUgKGNvdW50KSB7XG4gICAgICAgICAgICBpZiAoY291bnQgJSAyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAgdGV4dCArPSB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnQgPj49IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIHN0YXJ0c1dpdGggPSBmdW5jdGlvbiBzdGFydHNXaXRoKHRleHQsIHNlYXJjaCwgcG9zaXRpb24gPSAwKSB7XG4gICAgICAgIHNlYXJjaCA9IFN0cmluZyhzZWFyY2gpO1xuICAgICAgICBbdGV4dCwgc2VhcmNoLCBwb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdzdGFydHNXaXRoJywgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGVuZCA9IHBvc2l0aW9uICsgc2VhcmNoLmxlbmd0aDtcbiAgICAgICAgaWYgKGVuZCA+IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UocG9zaXRpb24sIGVuZCkgPT09IHNlYXJjaDtcbiAgICB9O1xufVxuaWYgKHRydWUpIHtcbiAgICBwYWRFbmQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnBhZEVuZCk7XG4gICAgcGFkU3RhcnQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KTtcbn1cbmVsc2Uge1xuICAgIHBhZEVuZCA9IGZ1bmN0aW9uIHBhZEVuZCh0ZXh0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcgPSAnICcpIHtcbiAgICAgICAgaWYgKHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnBhZEVuZCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gbnVsbCB8fCBtYXhMZW5ndGggPT09IHVuZGVmaW5lZCB8fCBtYXhMZW5ndGggPCAwKSB7XG4gICAgICAgICAgICBtYXhMZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdHJUZXh0ID0gU3RyaW5nKHRleHQpO1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gbWF4TGVuZ3RoIC0gc3RyVGV4dC5sZW5ndGg7XG4gICAgICAgIGlmIChwYWRkaW5nID4gMCkge1xuICAgICAgICAgICAgc3RyVGV4dCArPVxuICAgICAgICAgICAgICAgIHJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0cmluZy5zbGljZSgwLCBwYWRkaW5nICUgZmlsbFN0cmluZy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJUZXh0O1xuICAgIH07XG4gICAgcGFkU3RhcnQgPSBmdW5jdGlvbiBwYWRTdGFydCh0ZXh0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcgPSAnICcpIHtcbiAgICAgICAgaWYgKHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnBhZFN0YXJ0IHJlcXVpcmVzIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSBjb3VudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSBudWxsIHx8IG1heExlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IG1heExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIG1heExlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0clRleHQgPSBTdHJpbmcodGV4dCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBtYXhMZW5ndGggLSBzdHJUZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHBhZGRpbmcgPiAwKSB7XG4gICAgICAgICAgICBzdHJUZXh0ID1cbiAgICAgICAgICAgICAgICByZXBlYXQoZmlsbFN0cmluZywgTWF0aC5mbG9vcihwYWRkaW5nIC8gZmlsbFN0cmluZy5sZW5ndGgpKSArXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHJpbmcuc2xpY2UoMCwgcGFkZGluZyAlIGZpbGxTdHJpbmcubGVuZ3RoKSArXG4gICAgICAgICAgICAgICAgICAgIHN0clRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0clRleHQ7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmluZy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdHJpbmcubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N0cmluZy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGhhcywgeyBhZGQgfSBmcm9tICdAZG9qby9oYXMvaGFzJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi4vZ2xvYmFsJztcbmV4cG9ydCBkZWZhdWx0IGhhcztcbmV4cG9ydCAqIGZyb20gJ0Bkb2pvL2hhcy9oYXMnO1xuLyogRUNNQVNjcmlwdCA2IGFuZCA3IEZlYXR1cmVzICovXG4vKiBBcnJheSAqL1xuYWRkKCdlczYtYXJyYXknLCAoKSA9PiB7XG4gICAgcmV0dXJuIChbJ2Zyb20nLCAnb2YnXS5ldmVyeSgoa2V5KSA9PiBrZXkgaW4gZ2xvYmFsLkFycmF5KSAmJlxuICAgICAgICBbJ2ZpbmRJbmRleCcsICdmaW5kJywgJ2NvcHlXaXRoaW4nXS5ldmVyeSgoa2V5KSA9PiBrZXkgaW4gZ2xvYmFsLkFycmF5LnByb3RvdHlwZSkpO1xufSwgdHJ1ZSk7XG5hZGQoJ2VzNi1hcnJheS1maWxsJywgKCkgPT4ge1xuICAgIGlmICgnZmlsbCcgaW4gZ2xvYmFsLkFycmF5LnByb3RvdHlwZSkge1xuICAgICAgICAvKiBTb21lIHZlcnNpb25zIG9mIFNhZmFyaSBkbyBub3QgcHJvcGVybHkgaW1wbGVtZW50IHRoaXMgKi9cbiAgICAgICAgcmV0dXJuIFsxXS5maWxsKDksIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSlbMF0gPT09IDE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn0sIHRydWUpO1xuYWRkKCdlczctYXJyYXknLCAoKSA9PiAnaW5jbHVkZXMnIGluIGdsb2JhbC5BcnJheS5wcm90b3R5cGUsIHRydWUpO1xuLyogTWFwICovXG5hZGQoJ2VzNi1tYXAnLCAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuTWFwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8qXG4gICAgSUUxMSBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIGFyZSBtaXNzaW5nIGNyaXRpY2FsIEVTNiBNYXAgZnVuY3Rpb25hbGl0eVxuICAgIFdlIHdyYXAgdGhpcyBpbiBhIHRyeS9jYXRjaCBiZWNhdXNlIHNvbWV0aW1lcyB0aGUgTWFwIGNvbnN0cnVjdG9yIGV4aXN0cywgYnV0IGRvZXMgbm90XG4gICAgdGFrZSBhcmd1bWVudHMgKGlPUyA4LjQpXG4gICAgICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtYXAgPSBuZXcgZ2xvYmFsLk1hcChbWzAsIDFdXSk7XG4gICAgICAgICAgICByZXR1cm4gbWFwLmhhcygwKSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXAua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHRydWUgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWFwLnZhbHVlcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXAuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IG5vdCB0ZXN0aW5nIG9uIGlPUyBhdCB0aGUgbW9tZW50ICovXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufSwgdHJ1ZSk7XG4vKiBNYXRoICovXG5hZGQoJ2VzNi1tYXRoJywgKCkgPT4ge1xuICAgIHJldHVybiBbXG4gICAgICAgICdjbHozMicsXG4gICAgICAgICdzaWduJyxcbiAgICAgICAgJ2xvZzEwJyxcbiAgICAgICAgJ2xvZzInLFxuICAgICAgICAnbG9nMXAnLFxuICAgICAgICAnZXhwbTEnLFxuICAgICAgICAnY29zaCcsXG4gICAgICAgICdzaW5oJyxcbiAgICAgICAgJ3RhbmgnLFxuICAgICAgICAnYWNvc2gnLFxuICAgICAgICAnYXNpbmgnLFxuICAgICAgICAnYXRhbmgnLFxuICAgICAgICAndHJ1bmMnLFxuICAgICAgICAnZnJvdW5kJyxcbiAgICAgICAgJ2NicnQnLFxuICAgICAgICAnaHlwb3QnXG4gICAgXS5ldmVyeSgobmFtZSkgPT4gdHlwZW9mIGdsb2JhbC5NYXRoW25hbWVdID09PSAnZnVuY3Rpb24nKTtcbn0sIHRydWUpO1xuYWRkKCdlczYtbWF0aC1pbXVsJywgKCkgPT4ge1xuICAgIGlmICgnaW11bCcgaW4gZ2xvYmFsLk1hdGgpIHtcbiAgICAgICAgLyogU29tZSB2ZXJzaW9ucyBvZiBTYWZhcmkgb24gaW9zIGRvIG5vdCBwcm9wZXJseSBpbXBsZW1lbnQgdGhpcyAqL1xuICAgICAgICByZXR1cm4gTWF0aC5pbXVsKDB4ZmZmZmZmZmYsIDUpID09PSAtNTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufSwgdHJ1ZSk7XG4vKiBPYmplY3QgKi9cbmFkZCgnZXM2LW9iamVjdCcsICgpID0+IHtcbiAgICByZXR1cm4gdHJ1ZSAmJlxuICAgICAgICBbJ2Fzc2lnbicsICdpcycsICdnZXRPd25Qcm9wZXJ0eVN5bWJvbHMnLCAnc2V0UHJvdG90eXBlT2YnXS5ldmVyeSgobmFtZSkgPT4gdHlwZW9mIGdsb2JhbC5PYmplY3RbbmFtZV0gPT09ICdmdW5jdGlvbicpO1xufSwgdHJ1ZSk7XG5hZGQoJ2VzMjAxNy1vYmplY3QnLCAoKSA9PiB7XG4gICAgcmV0dXJuIFsndmFsdWVzJywgJ2VudHJpZXMnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyddLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgZ2xvYmFsLk9iamVjdFtuYW1lXSA9PT0gJ2Z1bmN0aW9uJyk7XG59LCB0cnVlKTtcbi8qIE9ic2VydmFibGUgKi9cbmFkZCgnZXMtb2JzZXJ2YWJsZScsICgpID0+IHR5cGVvZiBnbG9iYWwuT2JzZXJ2YWJsZSAhPT0gJ3VuZGVmaW5lZCcsIHRydWUpO1xuLyogUHJvbWlzZSAqL1xuYWRkKCdlczYtcHJvbWlzZScsICgpID0+IHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHJ1ZSwgdHJ1ZSk7XG4vKiBTZXQgKi9cbmFkZCgnZXM2LXNldCcsICgpID0+IHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5TZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLyogSUUxMSBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIGFyZSBtaXNzaW5nIGNyaXRpY2FsIEVTNiBTZXQgZnVuY3Rpb25hbGl0eSAqL1xuICAgICAgICBjb25zdCBzZXQgPSBuZXcgZ2xvYmFsLlNldChbMV0pO1xuICAgICAgICByZXR1cm4gc2V0LmhhcygxKSAmJiAna2V5cycgaW4gc2V0ICYmIHR5cGVvZiBzZXQua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59LCB0cnVlKTtcbi8qIFN0cmluZyAqL1xuYWRkKCdlczYtc3RyaW5nJywgKCkgPT4ge1xuICAgIHJldHVybiAoW1xuICAgICAgICAvKiBzdGF0aWMgbWV0aG9kcyAqL1xuICAgICAgICAnZnJvbUNvZGVQb2ludCdcbiAgICBdLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nW2tleV0gPT09ICdmdW5jdGlvbicpICYmXG4gICAgICAgIFtcbiAgICAgICAgICAgIC8qIGluc3RhbmNlIG1ldGhvZHMgKi9cbiAgICAgICAgICAgICdjb2RlUG9pbnRBdCcsXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgICdyZXBlYXQnLFxuICAgICAgICAgICAgJ3N0YXJ0c1dpdGgnLFxuICAgICAgICAgICAgJ2VuZHNXaXRoJyxcbiAgICAgICAgICAgICdpbmNsdWRlcydcbiAgICAgICAgXS5ldmVyeSgoa2V5KSA9PiB0eXBlb2YgZ2xvYmFsLlN0cmluZy5wcm90b3R5cGVba2V5XSA9PT0gJ2Z1bmN0aW9uJykpO1xufSwgdHJ1ZSk7XG5hZGQoJ2VzNi1zdHJpbmctcmF3JywgKCkgPT4ge1xuICAgIGZ1bmN0aW9uIGdldENhbGxTaXRlKGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5jYWxsU2l0ZV07XG4gICAgICAgIHJlc3VsdC5yYXcgPSBjYWxsU2l0ZS5yYXc7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICgncmF3JyBpbiBnbG9iYWwuU3RyaW5nKSB7XG4gICAgICAgIGxldCBiID0gMTtcbiAgICAgICAgbGV0IGNhbGxTaXRlID0gZ2V0Q2FsbFNpdGUgYGFcXG4ke2J9YDtcbiAgICAgICAgY2FsbFNpdGUucmF3ID0gWydhXFxcXG4nXTtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNUcnVuYyA9IGdsb2JhbC5TdHJpbmcucmF3KGNhbGxTaXRlLCA0MikgPT09ICdhOlxcXFxuJztcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzVHJ1bmM7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn0sIHRydWUpO1xuYWRkKCdlczIwMTctc3RyaW5nJywgKCkgPT4ge1xuICAgIHJldHVybiBbJ3BhZFN0YXJ0JywgJ3BhZEVuZCddLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nLnByb3RvdHlwZVtrZXldID09PSAnZnVuY3Rpb24nKTtcbn0sIHRydWUpO1xuLyogU3ltYm9sICovXG5hZGQoJ2VzNi1zeW1ib2wnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLlN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbCgpID09PSAnc3ltYm9sJywgdHJ1ZSk7XG4vKiBXZWFrTWFwICovXG5hZGQoJ2VzNi13ZWFrbWFwJywgKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsLldlYWtNYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8qIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgTWFwIGZ1bmN0aW9uYWxpdHkgKi9cbiAgICAgICAgY29uc3Qga2V5MSA9IHt9O1xuICAgICAgICBjb25zdCBrZXkyID0ge307XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBnbG9iYWwuV2Vha01hcChbW2tleTEsIDFdXSk7XG4gICAgICAgIE9iamVjdC5mcmVlemUoa2V5MSk7XG4gICAgICAgIHJldHVybiBtYXAuZ2V0KGtleTEpID09PSAxICYmIG1hcC5zZXQoa2V5MiwgMikgPT09IG1hcCAmJiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59LCB0cnVlKTtcbi8qIE1pc2NlbGxhbmVvdXMgZmVhdHVyZXMgKi9cbmFkZCgnbWljcm90YXNrcycsICgpID0+IHRydWUgfHwgZmFsc2UgfHwgdHJ1ZSwgdHJ1ZSk7XG5hZGQoJ3Bvc3RtZXNzYWdlJywgKCkgPT4ge1xuICAgIC8vIElmIHdpbmRvdyBpcyB1bmRlZmluZWQsIGFuZCB3ZSBoYXZlIHBvc3RNZXNzYWdlLCBpdCBwcm9iYWJseSBtZWFucyB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIuIFdlYiB3b3JrZXJzIGhhdmVcbiAgICAvLyBwb3N0IG1lc3NhZ2UgYnV0IGl0IGRvZXNuJ3Qgd29yayBob3cgd2UgZXhwZWN0IGl0IHRvLCBzbyBpdCdzIGJlc3QganVzdCB0byBwcmV0ZW5kIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgcmV0dXJuIHR5cGVvZiBnbG9iYWwud2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZ2xvYmFsLnBvc3RNZXNzYWdlID09PSAnZnVuY3Rpb24nO1xufSwgdHJ1ZSk7XG5hZGQoJ3JhZicsICgpID0+IHR5cGVvZiBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nLCB0cnVlKTtcbmFkZCgnc2V0aW1tZWRpYXRlJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5zZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnLCB0cnVlKTtcbi8qIERPTSBGZWF0dXJlcyAqL1xuYWRkKCdkb20tbXV0YXRpb25vYnNlcnZlcicsICgpID0+IHtcbiAgICBpZiAodHJ1ZSAmJiBCb29sZWFuKGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyKSkge1xuICAgICAgICAvLyBJRTExIGhhcyBhbiB1bnJlbGlhYmxlIE11dGF0aW9uT2JzZXJ2ZXIgaW1wbGVtZW50YXRpb24gd2hlcmUgc2V0UHJvcGVydHkoKSBkb2VzIG5vdFxuICAgICAgICAvLyBnZW5lcmF0ZSBhIG11dGF0aW9uIGV2ZW50LCBvYnNlcnZlcnMgY2FuIGNyYXNoLCBhbmQgdGhlIHF1ZXVlIGRvZXMgbm90IGRyYWluXG4gICAgICAgIC8vIHJlbGlhYmx5LiBUaGUgZm9sbG93aW5nIGZlYXR1cmUgdGVzdCB3YXMgYWRhcHRlZCBmcm9tXG4gICAgICAgIC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3QxMGtvLzRhY2ViOGM3MTY4MWZkYjI3NWUzM2VmZTVlNTc2YjE0XG4gICAgICAgIGNvbnN0IGV4YW1wbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cbiAgICAgICAgY29uc3QgSG9zdE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSG9zdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgeyB9KTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShleGFtcGxlLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7XG4gICAgICAgIGV4YW1wbGUuc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob2JzZXJ2ZXIudGFrZVJlY29yZHMoKS5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59LCB0cnVlKTtcbmFkZCgnZG9tLXdlYmFuaW1hdGlvbicsICgpID0+IHRydWUgJiYgZ2xvYmFsLkFuaW1hdGlvbiAhPT0gdW5kZWZpbmVkICYmIGdsb2JhbC5LZXlmcmFtZUVmZmVjdCAhPT0gdW5kZWZpbmVkLCB0cnVlKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhcy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L2hhcy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9oYXMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi4vZ2xvYmFsJztcbmltcG9ydCBoYXMgZnJvbSAnLi9oYXMnO1xuZnVuY3Rpb24gZXhlY3V0ZVRhc2soaXRlbSkge1xuICAgIGlmIChpdGVtICYmIGl0ZW0uaXNBY3RpdmUgJiYgaXRlbS5jYWxsYmFjaykge1xuICAgICAgICBpdGVtLmNhbGxiYWNrKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UXVldWVIYW5kbGUoaXRlbSwgZGVzdHJ1Y3Rvcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAgICAgICAgIGl0ZW0uaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGl0ZW0uY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGRlc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICBkZXN0cnVjdG9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxubGV0IGNoZWNrTWljcm9UYXNrUXVldWU7XG5sZXQgbWljcm9UYXNrcztcbi8qKlxuICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gdGhlIG1hY3JvdGFzayBxdWV1ZS5cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxuICovXG5leHBvcnQgY29uc3QgcXVldWVUYXNrID0gKGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZGVzdHJ1Y3RvcjtcbiAgICBsZXQgZW5xdWV1ZTtcbiAgICAvLyBTaW5jZSB0aGUgSUUgaW1wbGVtZW50YXRpb24gb2YgYHNldEltbWVkaWF0ZWAgaXMgbm90IGZsYXdsZXNzLCB3ZSB3aWxsIHRlc3QgZm9yIGBwb3N0TWVzc2FnZWAgZmlyc3QuXG4gICAgaWYgKHRydWUpIHtcbiAgICAgICAgY29uc3QgcXVldWUgPSBbXTtcbiAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIC8vIENvbmZpcm0gdGhhdCB0aGUgZXZlbnQgd2FzIHRyaWdnZXJlZCBieSB0aGUgY3VycmVudCB3aW5kb3cgYW5kIGJ5IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJiBldmVudC5kYXRhID09PSAnZG9qby1xdWV1ZS1tZXNzYWdlJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVRhc2socXVldWUuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBxdWV1ZS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKCdkb2pvLXF1ZXVlLW1lc3NhZ2UnLCAnKicpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChmYWxzZSkge1xuICAgICAgICBkZXN0cnVjdG9yID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRJbW1lZGlhdGUoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkZXN0cnVjdG9yID0gZ2xvYmFsLmNsZWFyVGltZW91dDtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pLCAwKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcXVldWVUYXNrKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpZCA9IGVucXVldWUoaXRlbSk7XG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtLCBkZXN0cnVjdG9yICYmXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RvcihpZCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gVE9ETzogVXNlIGFzcGVjdC5iZWZvcmUgd2hlbiBpdCBpcyBhdmFpbGFibGUuXG4gICAgcmV0dXJuIHRydWVcbiAgICAgICAgPyBxdWV1ZVRhc2tcbiAgICAgICAgOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcbiAgICAgICAgICAgIHJldHVybiBxdWV1ZVRhc2soY2FsbGJhY2spO1xuICAgICAgICB9O1xufSkoKTtcbi8vIFdoZW4gbm8gbWVjaGFuaXNtIGZvciByZWdpc3RlcmluZyBtaWNyb3Rhc2tzIGlzIGV4cG9zZWQgYnkgdGhlIGVudmlyb25tZW50LCBtaWNyb3Rhc2tzIHdpbGxcbi8vIGJlIHF1ZXVlZCBhbmQgdGhlbiBleGVjdXRlZCBpbiBhIHNpbmdsZSBtYWNyb3Rhc2sgYmVmb3JlIHRoZSBvdGhlciBtYWNyb3Rhc2tzIGFyZSBleGVjdXRlZC5cbmlmICghdHJ1ZSkge1xuICAgIGxldCBpc01pY3JvVGFza1F1ZXVlZCA9IGZhbHNlO1xuICAgIG1pY3JvVGFza3MgPSBbXTtcbiAgICBjaGVja01pY3JvVGFza1F1ZXVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWlzTWljcm9UYXNrUXVldWVkKSB7XG4gICAgICAgICAgICBpc01pY3JvVGFza1F1ZXVlZCA9IHRydWU7XG4gICAgICAgICAgICBxdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlzTWljcm9UYXNrUXVldWVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKG1pY3JvVGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGl0ZW0gPSBtaWNyb1Rhc2tzLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlVGFzayhpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn1cbi8qKlxuICogU2NoZWR1bGVzIGFuIGFuaW1hdGlvbiB0YXNrIHdpdGggYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGlmIGl0IGV4aXN0cywgb3Igd2l0aCBgcXVldWVUYXNrYCBvdGhlcndpc2UuXG4gKlxuICogU2luY2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJ3MgYmVoYXZpb3IgZG9lcyBub3QgbWF0Y2ggdGhhdCBleHBlY3RlZCBmcm9tIGBxdWV1ZVRhc2tgLCBpdCBpcyBub3QgdXNlZCB0aGVyZS5cbiAqIEhvd2V2ZXIsIGF0IHRpbWVzIGl0IG1ha2VzIG1vcmUgc2Vuc2UgdG8gZGVsZWdhdGUgdG8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lOyBoZW5jZSB0aGUgZm9sbG93aW5nIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxuICovXG5leHBvcnQgY29uc3QgcXVldWVBbmltYXRpb25UYXNrID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRydWUpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXVlVGFzaztcbiAgICB9XG4gICAgZnVuY3Rpb24gcXVldWVBbmltYXRpb25UYXNrKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcbiAgICAgICAgcmV0dXJuIGdldFF1ZXVlSGFuZGxlKGl0ZW0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxuICAgIHJldHVybiB0cnVlXG4gICAgICAgID8gcXVldWVBbmltYXRpb25UYXNrXG4gICAgICAgIDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjaGVja01pY3JvVGFza1F1ZXVlKCk7XG4gICAgICAgICAgICByZXR1cm4gcXVldWVBbmltYXRpb25UYXNrKGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbn0pKCk7XG4vKipcbiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIHRoZSBtaWNyb3Rhc2sgcXVldWUuXG4gKlxuICogQW55IGNhbGxiYWNrcyByZWdpc3RlcmVkIHdpdGggYHF1ZXVlTWljcm9UYXNrYCB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgbmV4dCBtYWNyb3Rhc2suIElmIG5vIG5hdGl2ZVxuICogbWVjaGFuaXNtIGZvciBzY2hlZHVsaW5nIG1hY3JvdGFza3MgaXMgZXhwb3NlZCwgdGhlbiBhbnkgY2FsbGJhY2tzIHdpbGwgYmUgZmlyZWQgYmVmb3JlIGFueSBtYWNyb3Rhc2tcbiAqIHJlZ2lzdGVyZWQgd2l0aCBgcXVldWVUYXNrYCBvciBgcXVldWVBbmltYXRpb25UYXNrYC5cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxuICovXG5leHBvcnQgbGV0IHF1ZXVlTWljcm9UYXNrID0gKGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZW5xdWV1ZTtcbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBnbG9iYWwucHJvY2Vzcy5uZXh0VGljayhleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHJ1ZSkge1xuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIGdsb2JhbC5Qcm9taXNlLnJlc29sdmUoaXRlbSkudGhlbihleGVjdXRlVGFzayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHRydWUpIHtcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cbiAgICAgICAgY29uc3QgSG9zdE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IFtdO1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBIb3N0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0uaXNBY3RpdmUgJiYgaXRlbS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7XG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcXVldWUucHVzaChpdGVtKTtcbiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdxdWV1ZVN0YXR1cycsICcxJyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcbiAgICAgICAgICAgIG1pY3JvVGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgfTtcbiAgICAgICAgZW5xdWV1ZShpdGVtKTtcbiAgICAgICAgcmV0dXJuIGdldFF1ZXVlSGFuZGxlKGl0ZW0pO1xuICAgIH07XG59KSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVldWUubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9xdWV1ZS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9xdWV1ZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSB2YWx1ZSBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gKlxuICogQHBhcmFtIHZhbHVlICAgICAgICBUaGUgdmFsdWUgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3Igc2hvdWxkIGJlIHNldCB0b1xuICogQHBhcmFtIGVudW1lcmFibGUgICBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGVudW1iZXJhYmxlLCBkZWZhdWx0cyB0byBmYWxzZVxuICogQHBhcmFtIHdyaXRhYmxlICAgICBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlLCBkZWZhdWx0cyB0byB0cnVlXG4gKiBAcGFyYW0gY29uZmlndXJhYmxlIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uZmlndXJhYmxlLCBkZWZhdWx0cyB0byB0cnVlXG4gKiBAcmV0dXJuICAgICAgICAgICAgIFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWVEZXNjcmlwdG9yKHZhbHVlLCBlbnVtZXJhYmxlID0gZmFsc2UsIHdyaXRhYmxlID0gdHJ1ZSwgY29uZmlndXJhYmxlID0gdHJ1ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogZW51bWVyYWJsZSxcbiAgICAgICAgd3JpdGFibGU6IHdyaXRhYmxlLFxuICAgICAgICBjb25maWd1cmFibGU6IGNvbmZpZ3VyYWJsZVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gd3JhcE5hdGl2ZShuYXRpdmVGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVGdW5jdGlvbi5hcHBseSh0YXJnZXQsIGFyZ3MpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N1cHBvcnQvdXRpbC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC91dGlsLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnQGRvam8vY29yZS9FdmVudGVkJztcbmV4cG9ydCBjbGFzcyBJbmplY3RvciBleHRlbmRzIEV2ZW50ZWQge1xuICAgIGNvbnN0cnVjdG9yKHBheWxvYWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgfVxuICAgIHNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKSB7XG4gICAgICAgIHRoaXMuX2ludmFsaWRhdG9yID0gaW52YWxpZGF0b3I7XG4gICAgfVxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BheWxvYWQ7XG4gICAgfVxuICAgIHNldChwYXlsb2FkKSB7XG4gICAgICAgIHRoaXMuX3BheWxvYWQgPSBwYXlsb2FkO1xuICAgICAgICBpZiAodGhpcy5faW52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2ludmFsaWRhdG9yKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBJbmplY3Rvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUluamVjdG9yLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9JbmplY3Rvci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL0luamVjdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnQGRvam8vY29yZS9FdmVudGVkJztcbmltcG9ydCBNYXAgZnJvbSAnQGRvam8vc2hpbS9NYXAnO1xuLyoqXG4gKiBFbnVtIHRvIGlkZW50aWZ5IHRoZSB0eXBlIG9mIGV2ZW50LlxuICogTGlzdGVuaW5nIHRvICdQcm9qZWN0b3InIHdpbGwgbm90aWZ5IHdoZW4gcHJvamVjdG9yIGlzIGNyZWF0ZWQgb3IgdXBkYXRlZFxuICogTGlzdGVuaW5nIHRvICdXaWRnZXQnIHdpbGwgbm90aWZ5IHdoZW4gd2lkZ2V0IHJvb3QgaXMgY3JlYXRlZCBvciB1cGRhdGVkXG4gKi9cbmV4cG9ydCB2YXIgTm9kZUV2ZW50VHlwZTtcbihmdW5jdGlvbiAoTm9kZUV2ZW50VHlwZSkge1xuICAgIE5vZGVFdmVudFR5cGVbXCJQcm9qZWN0b3JcIl0gPSBcIlByb2plY3RvclwiO1xuICAgIE5vZGVFdmVudFR5cGVbXCJXaWRnZXRcIl0gPSBcIldpZGdldFwiO1xufSkoTm9kZUV2ZW50VHlwZSB8fCAoTm9kZUV2ZW50VHlwZSA9IHt9KSk7XG5leHBvcnQgY2xhc3MgTm9kZUhhbmRsZXIgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fbm9kZU1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZU1hcC5nZXQoa2V5KTtcbiAgICB9XG4gICAgaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZU1hcC5oYXMoa2V5KTtcbiAgICB9XG4gICAgYWRkKGVsZW1lbnQsIGtleSkge1xuICAgICAgICB0aGlzLl9ub2RlTWFwLnNldChrZXksIGVsZW1lbnQpO1xuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBrZXkgfSk7XG4gICAgfVxuICAgIGFkZFJvb3QoKSB7XG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6IE5vZGVFdmVudFR5cGUuV2lkZ2V0IH0pO1xuICAgIH1cbiAgICBhZGRQcm9qZWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6IE5vZGVFdmVudFR5cGUuUHJvamVjdG9yIH0pO1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5fbm9kZU1hcC5jbGVhcigpO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IE5vZGVIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm9kZUhhbmRsZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL05vZGVIYW5kbGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBQcm9taXNlIGZyb20gJ0Bkb2pvL3NoaW0vUHJvbWlzZSc7XG5pbXBvcnQgTWFwIGZyb20gJ0Bkb2pvL3NoaW0vTWFwJztcbmltcG9ydCBTeW1ib2wgZnJvbSAnQGRvam8vc2hpbS9TeW1ib2wnO1xuaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJ0Bkb2pvL2NvcmUvRXZlbnRlZCc7XG4vKipcbiAqIFdpZGdldCBiYXNlIHN5bWJvbCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBXSURHRVRfQkFTRV9UWVBFID0gU3ltYm9sKCdXaWRnZXQgQmFzZScpO1xuLyoqXG4gKiBDaGVja3MgaXMgdGhlIGl0ZW0gaXMgYSBzdWJjbGFzcyBvZiBXaWRnZXRCYXNlIChvciBhIFdpZGdldEJhc2UpXG4gKlxuICogQHBhcmFtIGl0ZW0gdGhlIGl0ZW0gdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUvZmFsc2UgaW5kaWNhdGluZyBpZiB0aGUgaXRlbSBpcyBhIFdpZGdldEJhc2VDb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkge1xuICAgIHJldHVybiBCb29sZWFuKGl0ZW0gJiYgaXRlbS5fdHlwZSA9PT0gV0lER0VUX0JBU0VfVFlQRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQoaXRlbSkge1xuICAgIHJldHVybiBCb29sZWFuKGl0ZW0gJiZcbiAgICAgICAgaXRlbS5oYXNPd25Qcm9wZXJ0eSgnX19lc01vZHVsZScpICYmXG4gICAgICAgIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSAmJlxuICAgICAgICBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtLmRlZmF1bHQpKTtcbn1cbi8qKlxuICogVGhlIFJlZ2lzdHJ5IGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWdpc3RyeSBleHRlbmRzIEV2ZW50ZWQge1xuICAgIC8qKlxuICAgICAqIEVtaXQgbG9hZGVkIGV2ZW50IGZvciByZWdpc3RyeSBsYWJlbFxuICAgICAqL1xuICAgIGVtaXRMb2FkZWRFdmVudCh3aWRnZXRMYWJlbCwgaXRlbSkge1xuICAgICAgICB0aGlzLmVtaXQoe1xuICAgICAgICAgICAgdHlwZTogd2lkZ2V0TGFiZWwsXG4gICAgICAgICAgICBhY3Rpb246ICdsb2FkZWQnLFxuICAgICAgICAgICAgaXRlbVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVmaW5lKGxhYmVsLCBpdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLl93aWRnZXRSZWdpc3RyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeSA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB3aWRnZXQgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnJHtsYWJlbC50b1N0cmluZygpfSdgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIGl0ZW0pO1xuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIGl0ZW0udGhlbigod2lkZ2V0Q3RvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgd2lkZ2V0Q3Rvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiB3aWRnZXRDdG9yO1xuICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlZmluZUluamVjdG9yKGxhYmVsLCBpbmplY3RvckZhY3RvcnkpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luamVjdG9yUmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JSZWdpc3RyeSA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5qZWN0b3JSZWdpc3RyeS5oYXMobGFiZWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGluamVjdG9yIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBmb3IgJyR7bGFiZWwudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW52YWxpZGF0b3IgPSBuZXcgRXZlbnRlZCgpO1xuICAgICAgICBjb25zdCBpbmplY3Rvckl0ZW0gPSB7XG4gICAgICAgICAgICBpbmplY3RvcjogaW5qZWN0b3JGYWN0b3J5KCgpID0+IGludmFsaWRhdG9yLmVtaXQoeyB0eXBlOiAnaW52YWxpZGF0ZScgfSkpLFxuICAgICAgICAgICAgaW52YWxpZGF0b3JcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5faW5qZWN0b3JSZWdpc3RyeS5zZXQobGFiZWwsIGluamVjdG9ySXRlbSk7XG4gICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xuICAgIH1cbiAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLl93aWRnZXRSZWdpc3RyeSB8fCAhdGhpcy5oYXMobGFiZWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fd2lkZ2V0UmVnaXN0cnkuZ2V0KGxhYmVsKTtcbiAgICAgICAgaWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBpdGVtKCk7XG4gICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgcHJvbWlzZSk7XG4gICAgICAgIHByb21pc2UudGhlbigod2lkZ2V0Q3RvcikgPT4ge1xuICAgICAgICAgICAgaWYgKGlzV2lkZ2V0Q29uc3RydWN0b3JEZWZhdWx0RXhwb3J0KHdpZGdldEN0b3IpKSB7XG4gICAgICAgICAgICAgICAgd2lkZ2V0Q3RvciA9IHdpZGdldEN0b3IuZGVmYXVsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgd2lkZ2V0Q3Rvcik7XG4gICAgICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgd2lkZ2V0Q3Rvcik7XG4gICAgICAgICAgICByZXR1cm4gd2lkZ2V0Q3RvcjtcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBnZXRJbmplY3RvcihsYWJlbCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luamVjdG9yUmVnaXN0cnkgfHwgIXRoaXMuaGFzSW5qZWN0b3IobGFiZWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0b3JSZWdpc3RyeS5nZXQobGFiZWwpO1xuICAgIH1cbiAgICBoYXMobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fd2lkZ2V0UmVnaXN0cnkgJiYgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSk7XG4gICAgfVxuICAgIGhhc0luamVjdG9yKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2luamVjdG9yUmVnaXN0cnkgJiYgdGhpcy5faW5qZWN0b3JSZWdpc3RyeS5oYXMobGFiZWwpKTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBSZWdpc3RyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlZ2lzdHJ5Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9SZWdpc3RyeS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL1JlZ2lzdHJ5Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBNYXAgfSBmcm9tICdAZG9qby9zaGltL01hcCc7XG5pbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnQGRvam8vY29yZS9FdmVudGVkJztcbmltcG9ydCB7IFJlZ2lzdHJ5IH0gZnJvbSAnLi9SZWdpc3RyeSc7XG5leHBvcnQgY2xhc3MgUmVnaXN0cnlIYW5kbGVyIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KCk7XG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5vd24odGhpcy5fcmVnaXN0cnkpO1xuICAgICAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFzZVJlZ2lzdHJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm93bih7IGRlc3Ryb3kgfSk7XG4gICAgfVxuICAgIHNldCBiYXNlKGJhc2VSZWdpc3RyeSkge1xuICAgICAgICBpZiAodGhpcy5iYXNlUmVnaXN0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmFzZVJlZ2lzdHJ5ID0gYmFzZVJlZ2lzdHJ5O1xuICAgIH1cbiAgICBkZWZpbmUobGFiZWwsIHdpZGdldCkge1xuICAgICAgICB0aGlzLl9yZWdpc3RyeS5kZWZpbmUobGFiZWwsIHdpZGdldCk7XG4gICAgfVxuICAgIGRlZmluZUluamVjdG9yKGxhYmVsLCBpbmplY3Rvcikge1xuICAgICAgICB0aGlzLl9yZWdpc3RyeS5kZWZpbmVJbmplY3RvcihsYWJlbCwgaW5qZWN0b3IpO1xuICAgIH1cbiAgICBoYXMobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmhhcyhsYWJlbCkgfHwgQm9vbGVhbih0aGlzLmJhc2VSZWdpc3RyeSAmJiB0aGlzLmJhc2VSZWdpc3RyeS5oYXMobGFiZWwpKTtcbiAgICB9XG4gICAgaGFzSW5qZWN0b3IobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJ5Lmhhc0luamVjdG9yKGxhYmVsKSB8fCBCb29sZWFuKHRoaXMuYmFzZVJlZ2lzdHJ5ICYmIHRoaXMuYmFzZVJlZ2lzdHJ5Lmhhc0luamVjdG9yKGxhYmVsKSk7XG4gICAgfVxuICAgIGdldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsICdnZXQnLCB0aGlzLl9yZWdpc3RyeVdpZGdldExhYmVsTWFwKTtcbiAgICB9XG4gICAgZ2V0SW5qZWN0b3IobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UgPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCAnZ2V0SW5qZWN0b3InLCB0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXApO1xuICAgIH1cbiAgICBfZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCBnZXRGdW5jdGlvbk5hbWUsIGxhYmVsTWFwKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJpZXMgPSBnbG9iYWxQcmVjZWRlbmNlID8gW3RoaXMuYmFzZVJlZ2lzdHJ5LCB0aGlzLl9yZWdpc3RyeV0gOiBbdGhpcy5fcmVnaXN0cnksIHRoaXMuYmFzZVJlZ2lzdHJ5XTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWdpc3RyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IHJlZ2lzdHJpZXNbaV07XG4gICAgICAgICAgICBpZiAoIXJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcmVnaXN0cnlbZ2V0RnVuY3Rpb25OYW1lXShsYWJlbCk7XG4gICAgICAgICAgICBjb25zdCByZWdpc3RlcmVkTGFiZWxzID0gbGFiZWxNYXAuZ2V0KHJlZ2lzdHJ5KSB8fCBbXTtcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZWdpc3RlcmVkTGFiZWxzLmluZGV4T2YobGFiZWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IHJlZ2lzdHJ5Lm9uKGxhYmVsLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ2xvYWRlZCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbZ2V0RnVuY3Rpb25OYW1lXShsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSkgPT09IGV2ZW50Lml0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6ICdpbnZhbGlkYXRlJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMub3duKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgbGFiZWxNYXAuc2V0KHJlZ2lzdHJ5LCBbLi4ucmVnaXN0ZXJlZExhYmVscywgbGFiZWxdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBSZWdpc3RyeUhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWdpc3RyeUhhbmRsZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL1JlZ2lzdHJ5SGFuZGxlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL1JlZ2lzdHJ5SGFuZGxlci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IE1hcCBmcm9tICdAZG9qby9zaGltL01hcCc7XG5pbXBvcnQgV2Vha01hcCBmcm9tICdAZG9qby9zaGltL1dlYWtNYXAnO1xuaW1wb3J0IFN5bWJvbCBmcm9tICdAZG9qby9zaGltL1N5bWJvbCc7XG5pbXBvcnQgeyB2IH0gZnJvbSAnLi9kJztcbmltcG9ydCB7IGF1dG8gfSBmcm9tICcuL2RpZmYnO1xuaW1wb3J0IFJlZ2lzdHJ5SGFuZGxlciBmcm9tICcuL1JlZ2lzdHJ5SGFuZGxlcic7XG5pbXBvcnQgTm9kZUhhbmRsZXIgZnJvbSAnLi9Ob2RlSGFuZGxlcic7XG5pbXBvcnQgeyB3aWRnZXRJbnN0YW5jZU1hcCB9IGZyb20gJy4vdmRvbSc7XG5pbXBvcnQgeyBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvciwgV0lER0VUX0JBU0VfVFlQRSB9IGZyb20gJy4vUmVnaXN0cnknO1xuY29uc3QgZGVjb3JhdG9yTWFwID0gbmV3IE1hcCgpO1xuY29uc3QgYm91bmRBdXRvID0gYXV0by5iaW5kKG51bGwpO1xuZXhwb3J0IGNvbnN0IG5vQmluZCA9IFN5bWJvbC5mb3IoJ2Rvam9Ob0JpbmQnKTtcbi8qKlxuICogTWFpbiB3aWRnZXQgYmFzZSBmb3IgYWxsIHdpZGdldHMgdG8gZXh0ZW5kXG4gKi9cbmV4cG9ydCBjbGFzcyBXaWRnZXRCYXNlIHtcbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyBpZiBpdCBpcyB0aGUgaW5pdGlhbCBzZXQgcHJvcGVydGllcyBjeWNsZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5faW5pdGlhbFByb3BlcnRpZXMgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQXJyYXkgb2YgcHJvcGVydHkga2V5cyBjb25zaWRlcmVkIGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgc2V0IHByb3BlcnRpZXNcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5fbm9kZUhhbmRsZXIgPSBuZXcgTm9kZUhhbmRsZXIoKTtcbiAgICAgICAgdGhpcy5faGFuZGxlcyA9IFtdO1xuICAgICAgICB0aGlzLl9jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLl9kZWNvcmF0b3JDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHt9O1xuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlckZ1bmMgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9ib3VuZEludmFsaWRhdGUgPSB0aGlzLmludmFsaWRhdGUuYmluZCh0aGlzKTtcbiAgICAgICAgd2lkZ2V0SW5zdGFuY2VNYXAuc2V0KHRoaXMsIHtcbiAgICAgICAgICAgIGRpcnR5OiB0cnVlLFxuICAgICAgICAgICAgb25BdHRhY2g6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXR0YWNoKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25EZXRhY2g6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGV0YWNoKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9kZUhhbmRsZXI6IHRoaXMuX25vZGVIYW5kbGVyLFxuICAgICAgICAgICAgcmVnaXN0cnk6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3JlUHJvcGVydGllczoge30sXG4gICAgICAgICAgICByZW5kZXJpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaW5wdXRQcm9wZXJ0aWVzOiB7fVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcnVuQWZ0ZXJDb25zdHJ1Y3RvcnMoKTtcbiAgICB9XG4gICAgbWV0YShNZXRhVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5fbWV0YU1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9tZXRhTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjYWNoZWQgPSB0aGlzLl9tZXRhTWFwLmdldChNZXRhVHlwZSk7XG4gICAgICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgICAgICBjYWNoZWQgPSBuZXcgTWV0YVR5cGUoe1xuICAgICAgICAgICAgICAgIGludmFsaWRhdGU6IHRoaXMuX2JvdW5kSW52YWxpZGF0ZSxcbiAgICAgICAgICAgICAgICBub2RlSGFuZGxlcjogdGhpcy5fbm9kZUhhbmRsZXIsXG4gICAgICAgICAgICAgICAgYmluZDogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm93bihjYWNoZWQpO1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcC5zZXQoTWV0YVR5cGUsIGNhY2hlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgb25BdHRhY2goKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgYnkgZGVmYXVsdC5cbiAgICB9XG4gICAgb25EZXRhY2goKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgYnkgZGVmYXVsdC5cbiAgICB9XG4gICAgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBnZXQgY2hhbmdlZFByb3BlcnR5S2V5cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzXTtcbiAgICB9XG4gICAgX19zZXRDb3JlUHJvcGVydGllc19fKGNvcmVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvbnN0IHsgYmFzZVJlZ2lzdHJ5IH0gPSBjb3JlUHJvcGVydGllcztcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJhc2VSZWdpc3RyeSAhPT0gYmFzZVJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5SGFuZGxlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMub3duKHRoaXMuX3JlZ2lzdHJ5KTtcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkuYmFzZSA9IGJhc2VSZWdpc3RyeTtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcyA9IGNvcmVQcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBfX3NldFByb3BlcnRpZXNfXyhvcmlnaW5hbFByb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpbnN0YW5jZURhdGEuaW5wdXRQcm9wZXJ0aWVzID0gb3JpZ2luYWxQcm9wZXJ0aWVzO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5fcnVuQmVmb3JlUHJvcGVydGllcyhvcmlnaW5hbFByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCByZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMgPSB0aGlzLmdldERlY29yYXRvcigncmVnaXN0ZXJlZERpZmZQcm9wZXJ0eScpO1xuICAgICAgICBjb25zdCBjaGFuZ2VkUHJvcGVydHlLZXlzID0gW107XG4gICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID09PSBmYWxzZSB8fCByZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxQcm9wZXJ0aWVzID0gWy4uLnByb3BlcnR5TmFtZXMsIC4uLk9iamVjdC5rZXlzKHRoaXMuX3Byb3BlcnRpZXMpXTtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRQcm9wZXJ0aWVzID0gW107XG4gICAgICAgICAgICBjb25zdCBkaWZmUHJvcGVydHlSZXN1bHRzID0ge307XG4gICAgICAgICAgICBsZXQgcnVuUmVhY3Rpb25zID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja2VkUHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGVja2VkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9wZXJ0eSA9IHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQcm9wZXJ0eSA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSwgaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJpbmQpO1xuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBydW5SZWFjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWZmRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoYGRpZmZQcm9wZXJ0eToke3Byb3BlcnR5TmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkaWZmRnVuY3Rpb25zW2ldKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlZCAmJiBjaGFuZ2VkUHJvcGVydHlLZXlzLmluZGV4T2YocHJvcGVydHlOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkUHJvcGVydHlLZXlzLnB1c2gocHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZQcm9wZXJ0eVJlc3VsdHNbcHJvcGVydHlOYW1lXSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYm91bmRBdXRvKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VkICYmIGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWZmUHJvcGVydHlSZXN1bHRzW3Byb3BlcnR5TmFtZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVuUmVhY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwRGlmZlByb3BlcnR5UmVhY3Rpb25zKHByb3BlcnRpZXMsIGNoYW5nZWRQcm9wZXJ0eUtleXMpLmZvckVhY2goKGFyZ3MsIHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmNhbGwodGhpcywgYXJncy5wcmV2aW91c1Byb3BlcnRpZXMsIGFyZ3MubmV3UHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBkaWZmUHJvcGVydHlSZXN1bHRzO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cyA9IGNoYW5nZWRQcm9wZXJ0eUtleXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsUHJvcGVydGllcyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0sIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iaW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0eUtleXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMgPSBjaGFuZ2VkUHJvcGVydHlLZXlzO1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuICAgIH1cbiAgICBfX3NldENoaWxkcmVuX18oY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA+IDAgfHwgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9fcmVuZGVyX18oKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IHRoaXMuX3J1bkJlZm9yZVJlbmRlcnMoKTtcbiAgICAgICAgbGV0IGROb2RlID0gcmVuZGVyKCk7XG4gICAgICAgIGROb2RlID0gdGhpcy5ydW5BZnRlclJlbmRlcnMoZE5vZGUpO1xuICAgICAgICB0aGlzLl9ub2RlSGFuZGxlci5jbGVhcigpO1xuICAgICAgICByZXR1cm4gZE5vZGU7XG4gICAgfVxuICAgIGludmFsaWRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlKSB7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHYoJ2RpdicsIHt9LCB0aGlzLmNoaWxkcmVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gYWRkIGRlY29yYXRvcnMgdG8gV2lkZ2V0QmFzZVxuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSBUaGUga2V5IG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKi9cbiAgICBhZGREZWNvcmF0b3IoZGVjb3JhdG9yS2V5LCB2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eSgnY29uc3RydWN0b3InKSkge1xuICAgICAgICAgICAgbGV0IGRlY29yYXRvckxpc3QgPSBkZWNvcmF0b3JNYXAuZ2V0KHRoaXMuY29uc3RydWN0b3IpO1xuICAgICAgICAgICAgaWYgKCFkZWNvcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yTGlzdCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JNYXAuc2V0KHRoaXMuY29uc3RydWN0b3IsIGRlY29yYXRvckxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNwZWNpZmljRGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvckxpc3QuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICBpZiAoIXNwZWNpZmljRGVjb3JhdG9yTGlzdCkge1xuICAgICAgICAgICAgICAgIHNwZWNpZmljRGVjb3JhdG9yTGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIGRlY29yYXRvckxpc3Quc2V0KGRlY29yYXRvcktleSwgc3BlY2lmaWNEZWNvcmF0b3JMaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwZWNpZmljRGVjb3JhdG9yTGlzdC5wdXNoKC4uLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSB0aGlzLmdldERlY29yYXRvcihkZWNvcmF0b3JLZXkpO1xuICAgICAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgWy4uLmRlY29yYXRvcnMsIC4uLnZhbHVlXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gYnVpbGQgdGhlIGxpc3Qgb2YgZGVjb3JhdG9ycyBmcm9tIHRoZSBnbG9iYWwgZGVjb3JhdG9yIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWNvcmF0b3JLZXkgIFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgZGVjb3JhdG9yIHZhbHVlc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2J1aWxkRGVjb3JhdG9yTGlzdChkZWNvcmF0b3JLZXkpIHtcbiAgICAgICAgY29uc3QgYWxsRGVjb3JhdG9ycyA9IFtdO1xuICAgICAgICBsZXQgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICB3aGlsZSAoY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZGVjb3JhdG9yTWFwLmdldChjb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VNYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNvcmF0b3JzID0gaW5zdGFuY2VNYXAuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICAgICAgaWYgKGRlY29yYXRvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsRGVjb3JhdG9ycy51bnNoaWZ0KC4uLmRlY29yYXRvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNvbnN0cnVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gcmV0cmlldmUgZGVjb3JhdG9yIHZhbHVlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSBUaGUga2V5IG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICovXG4gICAgZ2V0RGVjb3JhdG9yKGRlY29yYXRvcktleSkge1xuICAgICAgICBsZXQgYWxsRGVjb3JhdG9ycyA9IHRoaXMuX2RlY29yYXRvckNhY2hlLmdldChkZWNvcmF0b3JLZXkpO1xuICAgICAgICBpZiAoYWxsRGVjb3JhdG9ycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICAgICAgfVxuICAgICAgICBhbGxEZWNvcmF0b3JzID0gdGhpcy5fYnVpbGREZWNvcmF0b3JMaXN0KGRlY29yYXRvcktleSk7XG4gICAgICAgIHRoaXMuX2RlY29yYXRvckNhY2hlLnNldChkZWNvcmF0b3JLZXksIGFsbERlY29yYXRvcnMpO1xuICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICB9XG4gICAgX21hcERpZmZQcm9wZXJ0eVJlYWN0aW9ucyhuZXdQcm9wZXJ0aWVzLCBjaGFuZ2VkUHJvcGVydHlLZXlzKSB7XG4gICAgICAgIGNvbnN0IHJlYWN0aW9uRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicpO1xuICAgICAgICByZXR1cm4gcmVhY3Rpb25GdW5jdGlvbnMucmVkdWNlKChyZWFjdGlvblByb3BlcnR5TWFwLCB7IHJlYWN0aW9uLCBwcm9wZXJ0eU5hbWUgfSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlYWN0aW9uQXJndW1lbnRzID0gcmVhY3Rpb25Qcm9wZXJ0eU1hcC5nZXQocmVhY3Rpb24pO1xuICAgICAgICAgICAgaWYgKHJlYWN0aW9uQXJndW1lbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZWFjdGlvbkFyZ3VtZW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQcm9wZXJ0aWVzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgbmV3UHJvcGVydGllczoge30sXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWN0aW9uQXJndW1lbnRzLnByZXZpb3VzUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgcmVhY3Rpb25Bcmd1bWVudHMubmV3UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gbmV3UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlYWN0aW9uQXJndW1lbnRzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVhY3Rpb25Qcm9wZXJ0eU1hcC5zZXQocmVhY3Rpb24sIHJlYWN0aW9uQXJndW1lbnRzKTtcbiAgICAgICAgICAgIHJldHVybiByZWFjdGlvblByb3BlcnR5TWFwO1xuICAgICAgICB9LCBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCaW5kcyB1bmJvdW5kIHByb3BlcnR5IGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBiaW5kYCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgZnVuY3Rpb25zXG4gICAgICovXG4gICAgX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnR5LCBiaW5kKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIXByb3BlcnR5W25vQmluZF0gJiYgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IocHJvcGVydHkpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiaW5kSW5mbyA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwLmdldChwcm9wZXJ0eSkgfHwge307XG4gICAgICAgICAgICBsZXQgeyBib3VuZEZ1bmMsIHNjb3BlIH0gPSBiaW5kSW5mbztcbiAgICAgICAgICAgIGlmIChib3VuZEZ1bmMgPT09IHVuZGVmaW5lZCB8fCBzY29wZSAhPT0gYmluZCkge1xuICAgICAgICAgICAgICAgIGJvdW5kRnVuYyA9IHByb3BlcnR5LmJpbmQoYmluZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAuc2V0KHByb3BlcnR5LCB7IGJvdW5kRnVuYywgc2NvcGU6IGJpbmQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm91bmRGdW5jO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gICAgZ2V0IHJlZ2lzdHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyKCk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeTtcbiAgICB9XG4gICAgX3J1bkJlZm9yZVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBiZWZvcmVQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnKTtcbiAgICAgICAgaWYgKGJlZm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJlZm9yZVByb3BlcnRpZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBiZWZvcmVQcm9wZXJ0aWVzRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uLmNhbGwodGhpcywgcHJvcGVydGllcykpO1xuICAgICAgICAgICAgfSwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYmVmb3JlIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgdXBkYXRlZCByZW5kZXIgbWV0aG9kXG4gICAgICovXG4gICAgX3J1bkJlZm9yZVJlbmRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZVJlbmRlcnMgPSB0aGlzLmdldERlY29yYXRvcignYmVmb3JlUmVuZGVyJyk7XG4gICAgICAgIGlmIChiZWZvcmVSZW5kZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmVSZW5kZXJzLnJlZHVjZSgocmVuZGVyLCBiZWZvcmVSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZW5kZXIgPSBiZWZvcmVSZW5kZXJGdW5jdGlvbi5jYWxsKHRoaXMsIHJlbmRlciwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlciBmdW5jdGlvbiBub3QgcmV0dXJuZWQgZnJvbSBiZWZvcmVSZW5kZXIsIHVzaW5nIHByZXZpb3VzIHJlbmRlcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZFJlbmRlcjtcbiAgICAgICAgICAgIH0sIHRoaXMuX2JvdW5kUmVuZGVyRnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kUmVuZGVyRnVuYztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGFsbCByZWdpc3RlcmVkIGFmdGVyIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgZGVjb3JhdGVkIEROb2Rlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGROb2RlIFRoZSBETm9kZXMgdG8gcnVuIHRocm91Z2ggdGhlIGFmdGVyIHJlbmRlcnNcbiAgICAgKi9cbiAgICBydW5BZnRlclJlbmRlcnMoZE5vZGUpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJSZW5kZXJzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJyk7XG4gICAgICAgIGlmIChhZnRlclJlbmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGFmdGVyUmVuZGVycy5yZWR1Y2UoKGROb2RlLCBhZnRlclJlbmRlckZ1bmN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFmdGVyUmVuZGVyRnVuY3Rpb24uY2FsbCh0aGlzLCBkTm9kZSk7XG4gICAgICAgICAgICB9LCBkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21ldGFNYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcC5mb3JFYWNoKChtZXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgbWV0YS5hZnRlclJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGROb2RlO1xuICAgIH1cbiAgICBfcnVuQWZ0ZXJDb25zdHJ1Y3RvcnMoKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyQ29uc3RydWN0b3JzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyQ29uc3RydWN0b3InKTtcbiAgICAgICAgaWYgKGFmdGVyQ29uc3RydWN0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFmdGVyQ29uc3RydWN0b3JzLmZvckVhY2goKGFmdGVyQ29uc3RydWN0b3IpID0+IGFmdGVyQ29uc3RydWN0b3IuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb3duKGhhbmRsZSkge1xuICAgICAgICB0aGlzLl9oYW5kbGVzLnB1c2goaGFuZGxlKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2hhbmRsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gdGhpcy5faGFuZGxlcy5wb3AoKTtcbiAgICAgICAgICAgIGlmIChoYW5kbGUpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBzdGF0aWMgaWRlbnRpZmllclxuICovXG5XaWRnZXRCYXNlLl90eXBlID0gV0lER0VUX0JBU0VfVFlQRTtcbmV4cG9ydCBkZWZhdWx0IFdpZGdldEJhc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaWRnZXRCYXNlLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9XaWRnZXRCYXNlLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwibGV0IGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUgPSAnJztcbmxldCBicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnJztcbmZ1bmN0aW9uIGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQpIHtcbiAgICBpZiAoJ1dlYmtpdFRyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUpIHtcbiAgICAgICAgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICd3ZWJraXRUcmFuc2l0aW9uRW5kJztcbiAgICAgICAgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKCd0cmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlIHx8ICdNb3pUcmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlKSB7XG4gICAgICAgIGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUgPSAndHJhbnNpdGlvbmVuZCc7XG4gICAgICAgIGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9ICdhbmltYXRpb25lbmQnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIGJyb3dzZXIgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRpYWxpemUoZWxlbWVudCkge1xuICAgIGlmIChicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPT09ICcnKSB7XG4gICAgICAgIGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJ1bkFuZENsZWFuVXAoZWxlbWVudCwgc3RhcnRBbmltYXRpb24sIGZpbmlzaEFuaW1hdGlvbikge1xuICAgIGluaXRpYWxpemUoZWxlbWVudCk7XG4gICAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gICAgbGV0IHRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgZmluaXNoQW5pbWF0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHN0YXJ0QW5pbWF0aW9uKCk7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xufVxuZnVuY3Rpb24gZXhpdChub2RlLCBwcm9wZXJ0aWVzLCBleGl0QW5pbWF0aW9uLCByZW1vdmVOb2RlKSB7XG4gICAgY29uc3QgYWN0aXZlQ2xhc3MgPSBwcm9wZXJ0aWVzLmV4aXRBbmltYXRpb25BY3RpdmUgfHwgYCR7ZXhpdEFuaW1hdGlvbn0tYWN0aXZlYDtcbiAgICBydW5BbmRDbGVhblVwKG5vZGUsICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGV4aXRBbmltYXRpb24pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgICByZW1vdmVOb2RlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBlbnRlcihub2RlLCBwcm9wZXJ0aWVzLCBlbnRlckFuaW1hdGlvbikge1xuICAgIGNvbnN0IGFjdGl2ZUNsYXNzID0gcHJvcGVydGllcy5lbnRlckFuaW1hdGlvbkFjdGl2ZSB8fCBgJHtlbnRlckFuaW1hdGlvbn0tYWN0aXZlYDtcbiAgICBydW5BbmRDbGVhblVwKG5vZGUsICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGVudGVyQW5pbWF0aW9uKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChhY3RpdmVDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgIH0sICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGVudGVyQW5pbWF0aW9uKTtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGFjdGl2ZUNsYXNzKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBlbnRlcixcbiAgICBleGl0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3NzVHJhbnNpdGlvbnMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgU3ltYm9sIGZyb20gJ0Bkb2pvL3NoaW0vU3ltYm9sJztcbi8qKlxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFdOb2RlIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IFdOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFdOb2RlLicpO1xuLyoqXG4gKiBUaGUgc3ltYm9sIGlkZW50aWZpZXIgZm9yIGEgVk5vZGUgdHlwZVxuICovXG5leHBvcnQgY29uc3QgVk5PREUgPSBTeW1ib2woJ0lkZW50aWZpZXIgZm9yIGEgVk5vZGUuJyk7XG4vKipcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBWTm9kZSB0eXBlIGNyZWF0ZWQgdXNpbmcgZG9tKClcbiAqL1xuZXhwb3J0IGNvbnN0IERPTVZOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFZOb2RlIGNyZWF0ZWQgdXNpbmcgZXhpc3RpbmcgZG9tLicpO1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgV05vZGVgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV05vZGUoY2hpbGQpIHtcbiAgICByZXR1cm4gQm9vbGVhbihjaGlsZCAmJiB0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnICYmIGNoaWxkLnR5cGUgPT09IFdOT0RFKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFZOb2RlYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZOb2RlKGNoaWxkKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiAoY2hpbGQudHlwZSA9PT0gVk5PREUgfHwgY2hpbGQudHlwZSA9PT0gRE9NVk5PREUpKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFZOb2RlYCBjcmVhdGVkIHdpdGggYGRvbSgpYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RvbVZOb2RlKGNoaWxkKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiBjaGlsZC50eXBlID09PSBET01WTk9ERSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50Tm9kZSh2YWx1ZSkge1xuICAgIHJldHVybiAhIXZhbHVlLnRhZ05hbWU7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGUoZE5vZGVzLCBvcHRpb25zT3JNb2RpZmllciwgcHJlZGljYXRlKSB7XG4gICAgbGV0IHNoYWxsb3cgPSBmYWxzZTtcbiAgICBsZXQgbW9kaWZpZXI7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JNb2RpZmllciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBtb2RpZmllciA9IG9wdGlvbnNPck1vZGlmaWVyO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbW9kaWZpZXIgPSBvcHRpb25zT3JNb2RpZmllci5tb2RpZmllcjtcbiAgICAgICAgcHJlZGljYXRlID0gb3B0aW9uc09yTW9kaWZpZXIucHJlZGljYXRlO1xuICAgICAgICBzaGFsbG93ID0gb3B0aW9uc09yTW9kaWZpZXIuc2hhbGxvdyB8fCBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG5vZGVzID0gQXJyYXkuaXNBcnJheShkTm9kZXMpID8gWy4uLmROb2Rlc10gOiBbZE5vZGVzXTtcbiAgICBmdW5jdGlvbiBicmVha2VyKCkge1xuICAgICAgICBub2RlcyA9IFtdO1xuICAgIH1cbiAgICB3aGlsZSAobm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5zaGlmdCgpO1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKCFzaGFsbG93ICYmIChpc1dOb2RlKG5vZGUpIHx8IGlzVk5vZGUobm9kZSkpICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBub2RlcyA9IFsuLi5ub2RlcywgLi4ubm9kZS5jaGlsZHJlbl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllcihub2RlLCBicmVha2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZE5vZGVzO1xufVxuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciBjYWxscyB0byBjcmVhdGUgYSB3aWRnZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3KHdpZGdldENvbnN0cnVjdG9yLCBwcm9wZXJ0aWVzLCBjaGlsZHJlbiA9IFtdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHdpZGdldENvbnN0cnVjdG9yLFxuICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICB0eXBlOiBXTk9ERVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gdih0YWcsIHByb3BlcnRpZXNPckNoaWxkcmVuID0ge30sIGNoaWxkcmVuID0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzT3JDaGlsZHJlbjtcbiAgICBsZXQgZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2s7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydGllc09yQ2hpbGRyZW4pKSB7XG4gICAgICAgIGNoaWxkcmVuID0gcHJvcGVydGllc09yQ2hpbGRyZW47XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID0gcHJvcGVydGllcztcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0YWcsXG4gICAgICAgIGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgdHlwZTogVk5PREVcbiAgICB9O1xufVxuLyoqXG4gKiBDcmVhdGUgYSBWTm9kZSBmb3IgYW4gZXhpc3RpbmcgRE9NIE5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb20oeyBub2RlLCBhdHRycyA9IHt9LCBwcm9wcyA9IHt9LCBvbiA9IHt9LCBkaWZmVHlwZSA9ICdub25lJyB9LCBjaGlsZHJlbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogaXNFbGVtZW50Tm9kZShub2RlKSA/IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpIDogJycsXG4gICAgICAgIHByb3BlcnRpZXM6IHByb3BzLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRycyxcbiAgICAgICAgZXZlbnRzOiBvbixcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHR5cGU6IERPTVZOT0RFLFxuICAgICAgICBkb21Ob2RlOiBub2RlLFxuICAgICAgICB0ZXh0OiBpc0VsZW1lbnROb2RlKG5vZGUpID8gdW5kZWZpbmVkIDogbm9kZS5kYXRhLFxuICAgICAgICBkaWZmVHlwZVxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyUmVuZGVyKG1ldGhvZCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYWZ0ZXJSZW5kZXInLCBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiBtZXRob2QpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgYWZ0ZXJSZW5kZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZnRlclJlbmRlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hZnRlclJlbmRlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmltcG9ydCB7IGJlZm9yZVByb3BlcnRpZXMgfSBmcm9tICcuL2JlZm9yZVByb3BlcnRpZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGFsd2F5c1JlbmRlcigpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIGJlZm9yZVByb3BlcnRpZXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH0pKHRhcmdldCk7XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBhbHdheXNSZW5kZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbHdheXNSZW5kZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hbHdheXNSZW5kZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmV4cG9ydCBmdW5jdGlvbiBiZWZvcmVQcm9wZXJ0aWVzKG1ldGhvZCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmVmb3JlUHJvcGVydGllcycsIHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IG1ldGhvZCk7XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBiZWZvcmVQcm9wZXJ0aWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmVmb3JlUHJvcGVydGllcy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9iZWZvcmVQcm9wZXJ0aWVzLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9iZWZvcmVQcm9wZXJ0aWVzLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBDdXN0b21FbGVtZW50Q2hpbGRUeXBlIH0gZnJvbSAnLi4vcmVnaXN0ZXJDdXN0b21FbGVtZW50JztcbmltcG9ydCBSZWdpc3RyeSBmcm9tICcuLi9SZWdpc3RyeSc7XG4vKipcbiAqIFRoaXMgRGVjb3JhdG9yIGlzIHByb3ZpZGVkIHByb3BlcnRpZXMgdGhhdCBkZWZpbmUgdGhlIGJlaGF2aW9yIG9mIGEgY3VzdG9tIGVsZW1lbnQsIGFuZFxuICogcmVnaXN0ZXJzIHRoYXQgY3VzdG9tIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b21FbGVtZW50KHsgdGFnLCBwcm9wZXJ0aWVzID0gW10sIGF0dHJpYnV0ZXMgPSBbXSwgZXZlbnRzID0gW10sIGNoaWxkVHlwZSA9IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUuRE9KTywgcmVnaXN0cnlGYWN0b3J5ID0gKCkgPT4gbmV3IFJlZ2lzdHJ5KCkgfSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC5wcm90b3R5cGUuX19jdXN0b21FbGVtZW50RGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgIHRhZ05hbWU6IHRhZyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgICAgZXZlbnRzLFxuICAgICAgICAgICAgY2hpbGRUeXBlLFxuICAgICAgICAgICAgcmVnaXN0cnlGYWN0b3J5XG4gICAgICAgIH07XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbUVsZW1lbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jdXN0b21FbGVtZW50Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbi8qKlxuICogRGVjb3JhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgYSBmdW5jdGlvbiBhcyBhIHNwZWNpZmljIHByb3BlcnR5IGRpZmZcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lICBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgb2Ygd2hpY2ggdGhlIGRpZmYgZnVuY3Rpb24gaXMgYXBwbGllZFxuICogQHBhcmFtIGRpZmZUeXBlICAgICAgVGhlIGRpZmYgdHlwZSwgZGVmYXVsdCBpcyBEaWZmVHlwZS5BVVRPLlxuICogQHBhcmFtIGRpZmZGdW5jdGlvbiAgQSBkaWZmIGZ1bmN0aW9uIHRvIHJ1biBpZiBkaWZmVHlwZSBpZiBEaWZmVHlwZS5DVVNUT01cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGRpZmZGdW5jdGlvbiwgcmVhY3Rpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcihgZGlmZlByb3BlcnR5OiR7cHJvcGVydHlOYW1lfWAsIGRpZmZGdW5jdGlvbi5iaW5kKG51bGwpKTtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcigncmVnaXN0ZXJlZERpZmZQcm9wZXJ0eScsIHByb3BlcnR5TmFtZSk7XG4gICAgICAgIGlmIChyZWFjdGlvbkZ1bmN0aW9uIHx8IHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdkaWZmUmVhY3Rpb24nLCB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgICAgIHJlYWN0aW9uOiBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiByZWFjdGlvbkZ1bmN0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgZGlmZlByb3BlcnR5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlmZlByb3BlcnR5Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCIvKipcbiAqIEdlbmVyaWMgZGVjb3JhdG9yIGhhbmRsZXIgdG8gdGFrZSBjYXJlIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBkZWNvcmF0b3Igd2FzIGNhbGxlZCBhdCB0aGUgY2xhc3MgbGV2ZWxcbiAqIG9yIHRoZSBtZXRob2QgbGV2ZWwuXG4gKlxuICogQHBhcmFtIGhhbmRsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRvcihoYW5kbGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBoYW5kbGVyKHRhcmdldC5wcm90b3R5cGUsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVyKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZURlY29yYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbmRsZURlY29yYXRvci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9oYW5kbGVEZWNvcmF0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IFdlYWtNYXAgZnJvbSAnQGRvam8vc2hpbS9XZWFrTWFwJztcbmltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmltcG9ydCB7IGJlZm9yZVByb3BlcnRpZXMgfSBmcm9tICcuL2JlZm9yZVByb3BlcnRpZXMnO1xuLyoqXG4gKiBNYXAgb2YgaW5zdGFuY2VzIGFnYWluc3QgcmVnaXN0ZXJlZCBpbmplY3RvcnMuXG4gKi9cbmNvbnN0IHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBEZWNvcmF0b3IgcmV0cmlldmVzIGFuIGluamVjdG9yIGZyb20gYW4gYXZhaWxhYmxlIHJlZ2lzdHJ5IHVzaW5nIHRoZSBuYW1lIGFuZFxuICogY2FsbHMgdGhlIGBnZXRQcm9wZXJ0aWVzYCBmdW5jdGlvbiB3aXRoIHRoZSBwYXlsb2FkIGZyb20gdGhlIGluamVjdG9yXG4gKiBhbmQgY3VycmVudCBwcm9wZXJ0aWVzIHdpdGggdGhlIHRoZSBpbmplY3RlZCBwcm9wZXJ0aWVzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBJbmplY3RDb25maWcgdGhlIGluamVjdCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoeyBuYW1lLCBnZXRQcm9wZXJ0aWVzIH0pIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIGJlZm9yZVByb3BlcnRpZXMoZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluamVjdG9ySXRlbSA9IHRoaXMucmVnaXN0cnkuZ2V0SW5qZWN0b3IobmFtZSk7XG4gICAgICAgICAgICBpZiAoaW5qZWN0b3JJdGVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpbmplY3RvciwgaW52YWxpZGF0b3IgfSA9IGluamVjdG9ySXRlbTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RlcmVkSW5qZWN0b3JzID0gcmVnaXN0ZXJlZEluamVjdG9yc01hcC5nZXQodGhpcykgfHwgW107XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVyZWRJbmplY3RvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAuc2V0KHRoaXMsIHJlZ2lzdGVyZWRJbmplY3RvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZEluamVjdG9ycy5pbmRleE9mKGluamVjdG9ySXRlbSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3duKGludmFsaWRhdG9yLm9uKCdpbnZhbGlkYXRlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEluamVjdG9ycy5wdXNoKGluamVjdG9ySXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzKGluamVjdG9yKCksIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSh0YXJnZXQpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgaW5qZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5qZWN0Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2luamVjdC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBXSURHRVRfQkFTRV9UWVBFIH0gZnJvbSAnLi9SZWdpc3RyeSc7XG5mdW5jdGlvbiBpc09iamVjdE9yQXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYWx3YXlzKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbmdlZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmUocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2UocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiBwcmV2aW91c1Byb3BlcnR5ICE9PSBuZXdQcm9wZXJ0eSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93KHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBjb25zdCB2YWxpZE9sZFByb3BlcnR5ID0gcHJldmlvdXNQcm9wZXJ0eSAmJiBpc09iamVjdE9yQXJyYXkocHJldmlvdXNQcm9wZXJ0eSk7XG4gICAgY29uc3QgdmFsaWROZXdQcm9wZXJ0eSA9IG5ld1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShuZXdQcm9wZXJ0eSk7XG4gICAgaWYgKCF2YWxpZE9sZFByb3BlcnR5IHx8ICF2YWxpZE5ld1Byb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjaGFuZ2VkOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzS2V5cyA9IE9iamVjdC5rZXlzKHByZXZpb3VzUHJvcGVydHkpO1xuICAgIGNvbnN0IG5ld0tleXMgPSBPYmplY3Qua2V5cyhuZXdQcm9wZXJ0eSk7XG4gICAgaWYgKHByZXZpb3VzS2V5cy5sZW5ndGggIT09IG5ld0tleXMubGVuZ3RoKSB7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY2hhbmdlZCA9IG5ld0tleXMuc29tZSgoa2V5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3UHJvcGVydHlba2V5XSAhPT0gcHJldmlvdXNQcm9wZXJ0eVtrZXldO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbmdlZCxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhdXRvKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodHlwZW9mIG5ld1Byb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChuZXdQcm9wZXJ0eS5fdHlwZSA9PT0gV0lER0VUX0JBU0VfVFlQRSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGlnbm9yZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3RPckFycmF5KG5ld1Byb3BlcnR5KSkge1xuICAgICAgICByZXN1bHQgPSBzaGFsbG93KHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaWZmLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kaWZmLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGlmZi5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ0Bkb2pvL2NvcmUvbGFuZyc7XG5pbXBvcnQgY3NzVHJhbnNpdGlvbnMgZnJvbSAnLi4vYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucyc7XG5pbXBvcnQgeyBhZnRlclJlbmRlciB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9hZnRlclJlbmRlcic7XG5pbXBvcnQgeyB2IH0gZnJvbSAnLi8uLi9kJztcbmltcG9ydCB7IGRvbSB9IGZyb20gJy4vLi4vdmRvbSc7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGF0dGFjaCBzdGF0ZSBvZiB0aGUgcHJvamVjdG9yXG4gKi9cbmV4cG9ydCB2YXIgUHJvamVjdG9yQXR0YWNoU3RhdGU7XG4oZnVuY3Rpb24gKFByb2plY3RvckF0dGFjaFN0YXRlKSB7XG4gICAgUHJvamVjdG9yQXR0YWNoU3RhdGVbUHJvamVjdG9yQXR0YWNoU3RhdGVbXCJBdHRhY2hlZFwiXSA9IDFdID0gXCJBdHRhY2hlZFwiO1xuICAgIFByb2plY3RvckF0dGFjaFN0YXRlW1Byb2plY3RvckF0dGFjaFN0YXRlW1wiRGV0YWNoZWRcIl0gPSAyXSA9IFwiRGV0YWNoZWRcIjtcbn0pKFByb2plY3RvckF0dGFjaFN0YXRlIHx8IChQcm9qZWN0b3JBdHRhY2hTdGF0ZSA9IHt9KSk7XG4vKipcbiAqIEF0dGFjaCB0eXBlIGZvciB0aGUgcHJvamVjdG9yXG4gKi9cbmV4cG9ydCB2YXIgQXR0YWNoVHlwZTtcbihmdW5jdGlvbiAoQXR0YWNoVHlwZSkge1xuICAgIEF0dGFjaFR5cGVbQXR0YWNoVHlwZVtcIkFwcGVuZFwiXSA9IDFdID0gXCJBcHBlbmRcIjtcbiAgICBBdHRhY2hUeXBlW0F0dGFjaFR5cGVbXCJNZXJnZVwiXSA9IDJdID0gXCJNZXJnZVwiO1xufSkoQXR0YWNoVHlwZSB8fCAoQXR0YWNoVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdG9yTWl4aW4oQmFzZSkge1xuICAgIGNsYXNzIFByb2plY3RvciBleHRlbmRzIEJhc2Uge1xuICAgICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgdGhpcy5fYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnM6IGNzc1RyYW5zaXRpb25zXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdG9yU3RhdGUgPSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5EZXRhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBhcHBlbmQocm9vdCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBBdHRhY2hUeXBlLkFwcGVuZCxcbiAgICAgICAgICAgICAgICByb290XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBtZXJnZShyb290KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IEF0dGFjaFR5cGUuTWVyZ2UsXG4gICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2gob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHJvb3Qocm9vdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNoYW5nZSByb290IGVsZW1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSByb290O1xuICAgICAgICB9XG4gICAgICAgIGdldCByb290KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGFzeW5jKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FzeW5jO1xuICAgICAgICB9XG4gICAgICAgIHNldCBhc3luYyhhc3luYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNoYW5nZSBhc3luYyBtb2RlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9hc3luYyA9IGFzeW5jO1xuICAgICAgICB9XG4gICAgICAgIHNhbmRib3goZG9jID0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjcmVhdGUgc2FuZGJveCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUm9vdCA9IHRoaXMucm9vdDtcbiAgICAgICAgICAgIC8qIGZyZWUgdXAgdGhlIGRvY3VtZW50IGZyYWdtZW50IGZvciBHQyAqL1xuICAgICAgICAgICAgdGhpcy5vd24oe1xuICAgICAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHByZXZpb3VzUm9vdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaCh7XG4gICAgICAgICAgICAgICAgLyogRG9jdW1lbnRGcmFnbWVudCBpcyBub3QgYXNzaWduYWJsZSB0byBFbGVtZW50LCBidXQgcHJvdmlkZXMgZXZlcnl0aGluZyBuZWVkZWQgdG8gd29yayAqL1xuICAgICAgICAgICAgICAgIHJvb3Q6IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG4gICAgICAgICAgICAgICAgdHlwZTogQXR0YWNoVHlwZS5BcHBlbmRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICB0aGlzLl9fc2V0Q2hpbGRyZW5fXyhjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIF9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzICYmIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkgIT09IHByb3BlcnRpZXMucmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdG9yUHJvcGVydGllcy5yZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzID0gYXNzaWduKHt9LCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHN1cGVyLl9fc2V0Q29yZVByb3BlcnRpZXNfXyh7IGJpbmQ6IHRoaXMsIGJhc2VSZWdpc3RyeTogcHJvcGVydGllcy5yZWdpc3RyeSB9KTtcbiAgICAgICAgICAgIHN1cGVyLl9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRvSHRtbCgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlICE9PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCB8fCAhdGhpcy5fcHJvamVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGlzIG5vdCBhdHRhY2hlZCwgY2Fubm90IHJldHVybiBhbiBIVE1MIHN0cmluZyBvZiBwcm9qZWN0aW9uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb24uZG9tTm9kZS5jaGlsZE5vZGVzWzBdLm91dGVySFRNTDtcbiAgICAgICAgfVxuICAgICAgICBhZnRlclJlbmRlcihyZXN1bHQpIHtcbiAgICAgICAgICAgIGxldCBub2RlID0gcmVzdWx0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnIHx8IHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSB2KCdzcGFuJywge30sIFtyZXN1bHRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgX2F0dGFjaCh7IHR5cGUsIHJvb3QgfSkge1xuICAgICAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3QgPSByb290O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2F0dGFjaEhhbmRsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hIYW5kbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQ7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSB7XG4gICAgICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuRGV0YWNoZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vd24oaGFuZGxlKTtcbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaEhhbmRsZSA9IGhhbmRsZTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMsIHsgc3luYzogIXRoaXMuX2FzeW5jIH0pO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBdHRhY2hUeXBlLkFwcGVuZDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbiA9IGRvbS5hcHBlbmQodGhpcy5yb290LCB0aGlzLCB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQXR0YWNoVHlwZS5NZXJnZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbiA9IGRvbS5tZXJnZSh0aGlzLnJvb3QsIHRoaXMsIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoSGFuZGxlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGFmdGVyUmVuZGVyKCksXG4gICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICAgICAgdHNsaWJfMS5fX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pLFxuICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCB2b2lkIDApXG4gICAgXSwgUHJvamVjdG9yLnByb3RvdHlwZSwgXCJhZnRlclJlbmRlclwiLCBudWxsKTtcbiAgICByZXR1cm4gUHJvamVjdG9yO1xufVxuZXhwb3J0IGRlZmF1bHQgUHJvamVjdG9yTWl4aW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Qcm9qZWN0b3IubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL21peGlucy9Qcm9qZWN0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9taXhpbnMvUHJvamVjdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICcuLy4uL0luamVjdG9yJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9pbmplY3QnO1xuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi8uLi9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBkaWZmUHJvcGVydHkgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5JztcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICcuLy4uL2RpZmYnO1xuY29uc3QgVEhFTUVfS0VZID0gJyBfa2V5JztcbmV4cG9ydCBjb25zdCBJTkpFQ1RFRF9USEVNRV9LRVkgPSBTeW1ib2woJ3RoZW1lJyk7XG4vKipcbiAqIERlY29yYXRvciBmb3IgYmFzZSBjc3MgY2xhc3Nlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWUodGhlbWUpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycsIHRoZW1lKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHJldmVyc2UgbG9va3VwIGZvciB0aGUgY2xhc3NlcyBwYXNzZWQgaW4gdmlhIHRoZSBgdGhlbWVgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBjbGFzc2VzIFRoZSBiYXNlQ2xhc3NlcyBvYmplY3RcbiAqIEByZXF1aXJlc1xuICovXG5mdW5jdGlvbiBjcmVhdGVUaGVtZUNsYXNzZXNMb29rdXAoY2xhc3Nlcykge1xuICAgIHJldHVybiBjbGFzc2VzLnJlZHVjZSgoY3VycmVudENsYXNzTmFtZXMsIGJhc2VDbGFzcykgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhiYXNlQ2xhc3MpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY3VycmVudENsYXNzTmFtZXNbYmFzZUNsYXNzW2tleV1dID0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDbGFzc05hbWVzO1xuICAgIH0sIHt9KTtcbn1cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBpcyBnaXZlbiBhIHRoZW1lIGFuZCBhbiBvcHRpb25hbCByZWdpc3RyeSwgdGhlIHRoZW1lXG4gKiBpbmplY3RvciBpcyBkZWZpbmVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIHRoZW1lLlxuICpcbiAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gc2V0XG4gKiBAcGFyYW0gdGhlbWVSZWdpc3RyeSByZWdpc3RyeSB0byBkZWZpbmUgdGhlIHRoZW1lIGluamVjdG9yIGFnYWluc3QuIERlZmF1bHRzXG4gKiB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XG4gKlxuICogQHJldHVybnMgdGhlIHRoZW1lIGluamVjdG9yIHVzZWQgdG8gc2V0IHRoZSB0aGVtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoZW1lLCB0aGVtZVJlZ2lzdHJ5KSB7XG4gICAgY29uc3QgdGhlbWVJbmplY3RvciA9IG5ldyBJbmplY3Rvcih0aGVtZSk7XG4gICAgdGhlbWVSZWdpc3RyeS5kZWZpbmVJbmplY3RvcihJTkpFQ1RFRF9USEVNRV9LRVksIChpbnZhbGlkYXRvcikgPT4ge1xuICAgICAgICB0aGVtZUluamVjdG9yLnNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHRoZW1lSW5qZWN0b3IuZ2V0KCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoZW1lSW5qZWN0b3I7XG59XG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYXNzIGRlY29yYXRlZCB3aXRoIHdpdGggVGhlbWVkIGZ1bmN0aW9uYWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lZE1peGluKEJhc2UpIHtcbiAgICBsZXQgVGhlbWVkID0gY2xhc3MgVGhlbWVkIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVnaXN0ZXJlZCBiYXNlIHRoZW1lIGtleXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZUtleXMgPSBbXTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW5kaWNhdGVzIGlmIGNsYXNzZXMgbWV0YSBkYXRhIG5lZWQgdG8gYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTG9hZGVkIHRoZW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX3RoZW1lID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhlbWUoY2xhc3Nlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlY2FsY3VsYXRlQ2xhc3Nlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlY2FsY3VsYXRlVGhlbWVDbGFzc2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLm1hcCgoY2xhc3NOYW1lKSA9PiB0aGlzLl9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRoZW1lQ2xhc3MoY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9uIGZpcmVkIHdoZW4gYHRoZW1lYCBvciBgZXh0cmFDbGFzc2VzYCBhcmUgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIG9uUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkIHx8IGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHRyYUNsYXNzZXMgPSB0aGlzLnByb3BlcnRpZXMuZXh0cmFDbGFzc2VzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDbGFzc05hbWUgPSB0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cFtjbGFzc05hbWVdO1xuICAgICAgICAgICAgbGV0IHJlc3VsdENsYXNzTmFtZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhlbWVDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENsYXNzIG5hbWU6ICcke2NsYXNzTmFtZX0nIG5vdCBmb3VuZCBpbiB0aGVtZWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2goZXh0cmFDbGFzc2VzW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2xhc3NOYW1lcy5wdXNoKHRoaXMuX3RoZW1lW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2godGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZVt0aGVtZUNsYXNzTmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdENsYXNzTmFtZXMuam9pbignICcpO1xuICAgICAgICB9XG4gICAgICAgIF9yZWNhbGN1bGF0ZVRoZW1lQ2xhc3NlcygpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdGhlbWUgPSB7fSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgYmFzZVRoZW1lcyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiYXNlVGhlbWVDbGFzc2VzJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lID0gYmFzZVRoZW1lcy5yZWR1Y2UoKGZpbmFsQmFzZVRoZW1lLCBiYXNlVGhlbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2EgPSBUSEVNRV9LRVksIGtleSA9IGJhc2VUaGVtZVtfYV0sIGNsYXNzZXMgPSB0c2xpYl8xLl9fcmVzdChiYXNlVGhlbWUsIFt0eXBlb2YgX2EgPT09IFwic3ltYm9sXCIgPyBfYSA6IF9hICsgXCJcIl0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaW5hbEJhc2VUaGVtZSwgY2xhc3Nlcyk7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2VUaGVtZUNsYXNzZXNSZXZlcnNlTG9va3VwID0gY3JlYXRlVGhlbWVDbGFzc2VzTG9va3VwKGJhc2VUaGVtZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5yZWR1Y2UoKGJhc2VUaGVtZSwgdGhlbWVLZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVRoZW1lLCB0aGVtZVt0aGVtZUtleV0pO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGRpZmZQcm9wZXJ0eSgndGhlbWUnLCBzaGFsbG93KSxcbiAgICAgICAgZGlmZlByb3BlcnR5KCdleHRyYUNsYXNzZXMnLCBzaGFsbG93KSxcbiAgICAgICAgdHNsaWJfMS5fX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxuICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSksXG4gICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIHZvaWQgMClcbiAgICBdLCBUaGVtZWQucHJvdG90eXBlLCBcIm9uUHJvcGVydGllc0NoYW5nZWRcIiwgbnVsbCk7XG4gICAgVGhlbWVkID0gdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAgICAgICAgaW5qZWN0KHtcbiAgICAgICAgICAgIG5hbWU6IElOSkVDVEVEX1RIRU1FX0tFWSxcbiAgICAgICAgICAgIGdldFByb3BlcnRpZXM6ICh0aGVtZSwgcHJvcGVydGllcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydGllcy50aGVtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB0aGVtZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgVGhlbWVkKTtcbiAgICByZXR1cm4gVGhlbWVkO1xufVxuZXhwb3J0IGRlZmF1bHQgVGhlbWVkTWl4aW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UaGVtZWQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgV2lkZ2V0QmFzZSwgbm9CaW5kIH0gZnJvbSAnLi9XaWRnZXRCYXNlJztcbmltcG9ydCB7IFByb2plY3Rvck1peGluIH0gZnJvbSAnLi9taXhpbnMvUHJvamVjdG9yJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICdAZG9qby9zaGltL2FycmF5JztcbmltcG9ydCB7IHcsIGRvbSB9IGZyb20gJy4vZCc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJ0Bkb2pvL3NoaW0vZ2xvYmFsJztcbmltcG9ydCB7IHJlZ2lzdGVyVGhlbWVJbmplY3RvciB9IGZyb20gJy4vbWl4aW5zL1RoZW1lZCc7XG5pbXBvcnQgeyBhbHdheXNSZW5kZXIgfSBmcm9tICcuL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyJztcbmV4cG9ydCB2YXIgQ3VzdG9tRWxlbWVudENoaWxkVHlwZTtcbihmdW5jdGlvbiAoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSkge1xuICAgIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGVbXCJET0pPXCJdID0gXCJET0pPXCI7XG4gICAgQ3VzdG9tRWxlbWVudENoaWxkVHlwZVtcIk5PREVcIl0gPSBcIk5PREVcIjtcbiAgICBDdXN0b21FbGVtZW50Q2hpbGRUeXBlW1wiVEVYVFwiXSA9IFwiVEVYVFwiO1xufSkoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSB8fCAoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gRG9tVG9XaWRnZXRXcmFwcGVyKGRvbU5vZGUpIHtcbiAgICBsZXQgRG9tVG9XaWRnZXRXcmFwcGVyID0gY2xhc3MgRG9tVG9XaWRnZXRXcmFwcGVyIGV4dGVuZHMgV2lkZ2V0QmFzZSB7XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpLnJlZHVjZSgocHJvcHMsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKCdvbicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGBfXyR7a2V5fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb3BzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICByZXR1cm4gZG9tKHsgbm9kZTogZG9tTm9kZSwgcHJvcHM6IHByb3BlcnRpZXMsIGRpZmZUeXBlOiAnZG9tJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZ2V0IGRvbU5vZGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9tTm9kZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRG9tVG9XaWRnZXRXcmFwcGVyID0gdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAgICAgICAgYWx3YXlzUmVuZGVyKClcbiAgICBdLCBEb21Ub1dpZGdldFdyYXBwZXIpO1xuICAgIHJldHVybiBEb21Ub1dpZGdldFdyYXBwZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKGRlc2NyaXB0b3IsIFdpZGdldENvbnN0cnVjdG9yKSB7XG4gICAgY29uc3QgeyBhdHRyaWJ1dGVzLCBjaGlsZFR5cGUsIHJlZ2lzdHJ5RmFjdG9yeSB9ID0gZGVzY3JpcHRvcjtcbiAgICBjb25zdCBhdHRyaWJ1dGVNYXAgPSB7fTtcbiAgICBhdHRyaWJ1dGVzLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGF0dHJpYnV0ZU1hcFthdHRyaWJ1dGVOYW1lXSA9IHByb3BlcnR5TmFtZTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuID0gW107XG4gICAgICAgICAgICB0aGlzLl9ldmVudFByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faW5pdGlhbGlzZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkb21Qcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICBjb25zdCB7IGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGV2ZW50cyB9ID0gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wcm9wZXJ0aWVzLCB0aGlzLl9hdHRyaWJ1dGVzVG9Qcm9wZXJ0aWVzKGF0dHJpYnV0ZXMpKTtcbiAgICAgICAgICAgIFsuLi5hdHRyaWJ1dGVzLCAuLi5wcm9wZXJ0aWVzXS5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnX18nKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUHJvcGVydHlOYW1lICE9PSBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1tmaWx0ZXJlZFByb3BlcnR5TmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4gdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNldDogKHZhbHVlKSA9PiB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV2ZW50cy5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJ19fb24nKTtcbiAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW2ZpbHRlcmVkUHJvcGVydHlOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9nZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNldDogKHZhbHVlKSA9PiB0aGlzLl9zZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudENhbGxiYWNrID0gdGhpcy5fZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50Q2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Q2FsbGJhY2soLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBhcmdzXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCBkb21Qcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLlRFWFQgPyB0aGlzLmNoaWxkTm9kZXMgOiB0aGlzLmNoaWxkcmVuO1xuICAgICAgICAgICAgZnJvbShjaGlsZHJlbikuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLXJlbmRlcicsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtY29ubmVjdGVkJywgKCkgPT4gdGhpcy5fcmVuZGVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihjaGlsZE5vZGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goZG9tKHsgbm9kZTogY2hpbGROb2RlLCBkaWZmVHlwZTogJ2RvbScgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLWNvbm5lY3RlZCcsIChlKSA9PiB0aGlzLl9jaGlsZENvbm5lY3RlZChlKSk7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRQcm9wZXJ0aWVzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckNoaWxkcmVuID0gKCkgPT4gdGhpcy5fX2NoaWxkcmVuX18oKTtcbiAgICAgICAgICAgIGNvbnN0IFdyYXBwZXIgPSBjbGFzcyBleHRlbmRzIFdpZGdldEJhc2Uge1xuICAgICAgICAgICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHcoV2lkZ2V0Q29uc3RydWN0b3IsIHdpZGdldFByb3BlcnRpZXMsIHJlbmRlckNoaWxkcmVuKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IHJlZ2lzdHJ5RmFjdG9yeSgpO1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDb250ZXh0ID0gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoaXMuX2dldFRoZW1lKCksIHJlZ2lzdHJ5KTtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdkb2pvLXRoZW1lLXNldCcsICgpID0+IHRoZW1lQ29udGV4dC5zZXQodGhpcy5fZ2V0VGhlbWUoKSkpO1xuICAgICAgICAgICAgY29uc3QgUHJvamVjdG9yID0gUHJvamVjdG9yTWl4aW4oV3JhcHBlcik7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3IgPSBuZXcgUHJvamVjdG9yKCk7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3Iuc2V0UHJvcGVydGllcyh7IHJlZ2lzdHJ5IH0pO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yLmFwcGVuZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rvam8tY2UtY29ubmVjdGVkJywge1xuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgX2dldFRoZW1lKCkge1xuICAgICAgICAgICAgaWYgKGdsb2JhbCAmJiBnbG9iYWwuZG9qb2NlICYmIGdsb2JhbC5kb2pvY2UudGhlbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsLmRvam9jZS50aGVtZXNbZ2xvYmFsLmRvam9jZS50aGVtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2NoaWxkQ29ubmVjdGVkKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBlLmRldGFpbDtcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudE5vZGUgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLl9jaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gY2hpbGQuZG9tTm9kZSA9PT0gbm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLXJlbmRlcicsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChEb21Ub1dpZGdldFdyYXBwZXIobm9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3JlbmRlcigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3IuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rvam8tY2UtcmVuZGVyJywge1xuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9fcHJvcGVydGllc19fKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Byb3BlcnRpZXMsIHRoaXMuX2V2ZW50UHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgX19jaGlsZHJlbl9fKCkge1xuICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuLmZpbHRlcigoQ2hpbGQpID0+IENoaWxkLmRvbU5vZGUuaXNXaWRnZXQpLm1hcCgoQ2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkb21Ob2RlIH0gPSBDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHcoQ2hpbGQsIE9iamVjdC5hc3NpZ24oe30sIGRvbU5vZGUuX19wcm9wZXJ0aWVzX18oKSksIFsuLi5kb21Ob2RlLl9fY2hpbGRyZW5fXygpXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZFZhbHVlLCB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gYXR0cmlidXRlTWFwW25hbWVdO1xuICAgICAgICAgICAgdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgX3NldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBfc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHZhbHVlW25vQmluZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIF9hdHRyaWJ1dGVzVG9Qcm9wZXJ0aWVzKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlZHVjZSgocHJvcGVydGllcywgcHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYXApO1xuICAgICAgICB9XG4gICAgICAgIGdldCBpc1dpZGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcihXaWRnZXRDb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBXaWRnZXRDb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgV2lkZ2V0Q29uc3RydWN0b3IucHJvdG90eXBlLl9fY3VzdG9tRWxlbWVudERlc2NyaXB0b3I7XG4gICAgaWYgKCFkZXNjcmlwdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBkZXNjcmlwdG9yIGZvciBDdXN0b20gRWxlbWVudCwgaGF2ZSB5b3UgYWRkZWQgdGhlIEBjdXN0b21FbGVtZW50IGRlY29yYXRvciB0byB5b3VyIFdpZGdldD8nKTtcbiAgICB9XG4gICAgZ2xvYmFsLmN1c3RvbUVsZW1lbnRzLmRlZmluZShkZXNjcmlwdG9yLnRhZ05hbWUsIGNyZWF0ZShkZXNjcmlwdG9yLCBXaWRnZXRDb25zdHJ1Y3RvcikpO1xufVxuZXhwb3J0IGRlZmF1bHQgcmVnaXN0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdpc3RlckN1c3RvbUVsZW1lbnQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGdsb2JhbCBmcm9tICdAZG9qby9zaGltL2dsb2JhbCc7XG5pbXBvcnQgeyBmcm9tIGFzIGFycmF5RnJvbSB9IGZyb20gJ0Bkb2pvL3NoaW0vYXJyYXknO1xuaW1wb3J0IHsgaXNXTm9kZSwgaXNWTm9kZSwgaXNEb21WTm9kZSwgVk5PREUsIFdOT0RFIH0gZnJvbSAnLi9kJztcbmltcG9ydCB7IGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yIH0gZnJvbSAnLi9SZWdpc3RyeSc7XG5pbXBvcnQgV2Vha01hcCBmcm9tICdAZG9qby9zaGltL1dlYWtNYXAnO1xuY29uc3QgTkFNRVNQQUNFX1czID0gJ2h0dHA6Ly93d3cudzMub3JnLyc7XG5jb25zdCBOQU1FU1BBQ0VfU1ZHID0gTkFNRVNQQUNFX1czICsgJzIwMDAvc3ZnJztcbmNvbnN0IE5BTUVTUEFDRV9YTElOSyA9IE5BTUVTUEFDRV9XMyArICcxOTk5L3hsaW5rJztcbmNvbnN0IGVtcHR5QXJyYXkgPSBbXTtcbmV4cG9ydCBjb25zdCB3aWRnZXRJbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5jb25zdCBpbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5jb25zdCBwcm9qZWN0b3JTdGF0ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBzYW1lKGRub2RlMSwgZG5vZGUyKSB7XG4gICAgaWYgKGlzVk5vZGUoZG5vZGUxKSAmJiBpc1ZOb2RlKGRub2RlMikpIHtcbiAgICAgICAgaWYgKGlzRG9tVk5vZGUoZG5vZGUxKSB8fCBpc0RvbVZOb2RlKGRub2RlMikpIHtcbiAgICAgICAgICAgIGlmIChkbm9kZTEuZG9tTm9kZSAhPT0gZG5vZGUyLmRvbU5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRub2RlMS50YWcgIT09IGRub2RlMi50YWcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG5vZGUxLnByb3BlcnRpZXMua2V5ICE9PSBkbm9kZTIucHJvcGVydGllcy5rZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNXTm9kZShkbm9kZTEpICYmIGlzV05vZGUoZG5vZGUyKSkge1xuICAgICAgICBpZiAoZG5vZGUxLmluc3RhbmNlID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIGRub2RlMi53aWRnZXRDb25zdHJ1Y3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG5vZGUxLndpZGdldENvbnN0cnVjdG9yICE9PSBkbm9kZTIud2lkZ2V0Q29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG5vZGUxLnByb3BlcnRpZXMua2V5ICE9PSBkbm9kZTIucHJvcGVydGllcy5rZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuY29uc3QgbWlzc2luZ1RyYW5zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlIGEgdHJhbnNpdGlvbnMgb2JqZWN0IHRvIHRoZSBwcm9qZWN0aW9uT3B0aW9ucyB0byBkbyBhbmltYXRpb25zJyk7XG59O1xuZnVuY3Rpb24gZ2V0UHJvamVjdGlvbk9wdGlvbnMocHJvamVjdG9yT3B0aW9ucywgcHJvamVjdG9ySW5zdGFuY2UpIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgICAgbmFtZXNwYWNlOiB1bmRlZmluZWQsXG4gICAgICAgIHN0eWxlQXBwbHllcjogZnVuY3Rpb24gKGRvbU5vZGUsIHN0eWxlTmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGRvbU5vZGUuc3R5bGVbc3R5bGVOYW1lXSA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2l0aW9uczoge1xuICAgICAgICAgICAgZW50ZXI6IG1pc3NpbmdUcmFuc2l0aW9uLFxuICAgICAgICAgICAgZXhpdDogbWlzc2luZ1RyYW5zaXRpb25cbiAgICAgICAgfSxcbiAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgIG1lcmdlOiBmYWxzZSxcbiAgICAgICAgc3luYzogZmFsc2UsXG4gICAgICAgIHByb2plY3Rvckluc3RhbmNlXG4gICAgfTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIHByb2plY3Rvck9wdGlvbnMpO1xufVxuZnVuY3Rpb24gY2hlY2tTdHlsZVZhbHVlKHN0eWxlVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHN0eWxlVmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU3R5bGUgdmFsdWVzIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50TmFtZSwgY3VycmVudFZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucywgYmluZCwgcHJldmlvdXNWYWx1ZSkge1xuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBjb25zdCBldmVudE1hcCA9IHByb2plY3RvclN0YXRlLm5vZGVNYXAuZ2V0KGRvbU5vZGUpIHx8IG5ldyBXZWFrTWFwKCk7XG4gICAgaWYgKHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNFdmVudCA9IGV2ZW50TWFwLmdldChwcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgcHJldmlvdXNFdmVudCk7XG4gICAgfVxuICAgIGxldCBjYWxsYmFjayA9IGN1cnJlbnRWYWx1ZS5iaW5kKGJpbmQpO1xuICAgIGlmIChldmVudE5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgICBjdXJyZW50VmFsdWUuY2FsbCh0aGlzLCBldnQpO1xuICAgICAgICAgICAgZXZ0LnRhcmdldFsnb25pbnB1dC12YWx1ZSddID0gZXZ0LnRhcmdldC52YWx1ZTtcbiAgICAgICAgfS5iaW5kKGJpbmQpO1xuICAgIH1cbiAgICBkb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gICAgZXZlbnRNYXAuc2V0KGN1cnJlbnRWYWx1ZSwgY2FsbGJhY2spO1xuICAgIHByb2plY3RvclN0YXRlLm5vZGVNYXAuc2V0KGRvbU5vZGUsIGV2ZW50TWFwKTtcbn1cbmZ1bmN0aW9uIGFkZENsYXNzZXMoZG9tTm9kZSwgY2xhc3Nlcykge1xuICAgIGlmIChjbGFzc2VzKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZG9tTm9kZS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZXNbaV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBjbGFzc2VzKSB7XG4gICAgaWYgKGNsYXNzZXMpIHtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkb21Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBidWlsZFByZXZpb3VzUHJvcGVydGllcyhkb21Ob2RlLCBwcmV2aW91cywgY3VycmVudCkge1xuICAgIGNvbnN0IHsgZGlmZlR5cGUsIHByb3BlcnRpZXMsIGF0dHJpYnV0ZXMgfSA9IGN1cnJlbnQ7XG4gICAgaWYgKCFkaWZmVHlwZSB8fCBkaWZmVHlwZSA9PT0gJ3Zkb20nKSB7XG4gICAgICAgIHJldHVybiB7IHByb3BlcnRpZXM6IHByZXZpb3VzLnByb3BlcnRpZXMsIGF0dHJpYnV0ZXM6IHByZXZpb3VzLmF0dHJpYnV0ZXMsIGV2ZW50czogcHJldmlvdXMuZXZlbnRzIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGRpZmZUeXBlID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuIHsgcHJvcGVydGllczoge30sIGF0dHJpYnV0ZXM6IHByZXZpb3VzLmF0dHJpYnV0ZXMgPyB7fSA6IHVuZGVmaW5lZCwgZXZlbnRzOiBwcmV2aW91cy5ldmVudHMgfTtcbiAgICB9XG4gICAgbGV0IG5ld1Byb3BlcnRpZXMgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9XG4gICAgfTtcbiAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICBuZXdQcm9wZXJ0aWVzLmF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgbmV3UHJvcGVydGllcy5ldmVudHMgPSBwcmV2aW91cy5ldmVudHM7XG4gICAgICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXNbcHJvcE5hbWVdID0gZG9tTm9kZVtwcm9wTmFtZV07XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChhdHRyTmFtZSkgPT4ge1xuICAgICAgICAgICAgbmV3UHJvcGVydGllcy5hdHRyaWJ1dGVzW2F0dHJOYW1lXSA9IGRvbU5vZGUuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdQcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBuZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5yZWR1Y2UoKHByb3BzLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBwcm9wc1twcm9wZXJ0eV0gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZShwcm9wZXJ0eSkgfHwgZG9tTm9kZVtwcm9wZXJ0eV07XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9LCB7fSk7XG4gICAgcmV0dXJuIG5ld1Byb3BlcnRpZXM7XG59XG5mdW5jdGlvbiBmb2N1c05vZGUocHJvcFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBkb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzdWx0ID0gcHJvcFZhbHVlKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBwcm9wVmFsdWUgJiYgIXByZXZpb3VzVmFsdWU7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgIGRvbU5vZGUuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVtb3ZlT3JwaGFuZWRFdmVudHMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgb25seUV2ZW50cyA9IGZhbHNlKSB7XG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xuICAgIGNvbnN0IGV2ZW50TWFwID0gcHJvamVjdG9yU3RhdGUubm9kZU1hcC5nZXQoZG9tTm9kZSk7XG4gICAgaWYgKGV2ZW50TWFwKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHByZXZpb3VzUHJvcGVydGllcykuZm9yRWFjaCgocHJvcE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzRXZlbnQgPSBwcm9wTmFtZS5zdWJzdHIoMCwgMikgPT09ICdvbicgfHwgb25seUV2ZW50cztcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IG9ubHlFdmVudHMgPyBwcm9wTmFtZSA6IHByb3BOYW1lLnN1YnN0cigyKTtcbiAgICAgICAgICAgIGlmIChpc0V2ZW50ICYmICFwcm9wZXJ0aWVzW3Byb3BOYW1lXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50Q2FsbGJhY2sgPSBldmVudE1hcC5nZXQocHJldmlvdXNQcm9wZXJ0aWVzW3Byb3BOYW1lXSk7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Q2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGUoZG9tTm9kZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMubmFtZXNwYWNlID09PSBOQU1FU1BBQ0VfU1ZHICYmIGF0dHJOYW1lID09PSAnaHJlZicpIHtcbiAgICAgICAgZG9tTm9kZS5zZXRBdHRyaWJ1dGVOUyhOQU1FU1BBQ0VfWExJTkssIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICgoYXR0ck5hbWUgPT09ICdyb2xlJyAmJiBhdHRyVmFsdWUgPT09ICcnKSB8fCBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkb21Ob2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyTmFtZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkb21Ob2RlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0clZhbHVlKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGUsIHByZXZpb3VzQXR0cmlidXRlcywgYXR0cmlidXRlcywgcHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBjb25zdCBhdHRyTmFtZXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKTtcbiAgICBjb25zdCBhdHRyQ291bnQgPSBhdHRyTmFtZXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0ckNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyTmFtZXNbaV07XG4gICAgICAgIGNvbnN0IGF0dHJWYWx1ZSA9IGF0dHJpYnV0ZXNbYXR0ck5hbWVdO1xuICAgICAgICBjb25zdCBwcmV2aW91c0F0dHJWYWx1ZSA9IHByZXZpb3VzQXR0cmlidXRlc1thdHRyTmFtZV07XG4gICAgICAgIGlmIChhdHRyVmFsdWUgIT09IHByZXZpb3VzQXR0clZhbHVlKSB7XG4gICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGUoZG9tTm9kZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMsIHByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zLCBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMgPSB0cnVlKSB7XG4gICAgbGV0IHByb3BlcnRpZXNVcGRhdGVkID0gZmFsc2U7XG4gICAgY29uc3QgcHJvcE5hbWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyk7XG4gICAgY29uc3QgcHJvcENvdW50ID0gcHJvcE5hbWVzLmxlbmd0aDtcbiAgICBpZiAocHJvcE5hbWVzLmluZGV4T2YoJ2NsYXNzZXMnKSA9PT0gLTEgJiYgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMgJiYgcmVtb3ZlT3JwaGFuZWRFdmVudHMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHByb3BOYW1lc1tpXTtcbiAgICAgICAgbGV0IHByb3BWYWx1ZSA9IHByb3BlcnRpZXNbcHJvcE5hbWVdO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gcHJldmlvdXNQcm9wZXJ0aWVzW3Byb3BOYW1lXTtcbiAgICAgICAgaWYgKHByb3BOYW1lID09PSAnY2xhc3NlcycpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQ2xhc3NlcyA9IEFycmF5LmlzQXJyYXkocHJldmlvdXNWYWx1ZSkgPyBwcmV2aW91c1ZhbHVlIDogW3ByZXZpb3VzVmFsdWVdO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudENsYXNzZXMgPSBBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkgPyBwcm9wVmFsdWUgOiBbcHJvcFZhbHVlXTtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0NsYXNzZXMgJiYgcHJldmlvdXNDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BWYWx1ZSB8fCBwcm9wVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldmlvdXNDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzQ2xhc3Nlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NsYXNzZXMgPSBbLi4uY3VycmVudENsYXNzZXNdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNDbGFzc05hbWUgPSBwcmV2aW91c0NsYXNzZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGFzc0luZGV4ID0gbmV3Q2xhc3Nlcy5pbmRleE9mKHByZXZpb3VzQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c0NsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDbGFzc2VzLnNwbGljZShjbGFzc0luZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRDbGFzc2VzKGRvbU5vZGUsIG5ld0NsYXNzZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50Q2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzc2VzKGRvbU5vZGUsIGN1cnJlbnRDbGFzc2VzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgPT09ICdmb2N1cycpIHtcbiAgICAgICAgICAgIGZvY3VzTm9kZShwcm9wVmFsdWUsIHByZXZpb3VzVmFsdWUsIGRvbU5vZGUsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9wTmFtZSA9PT0gJ3N0eWxlcycpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlTmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wVmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVDb3VudCA9IHN0eWxlTmFtZXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzdHlsZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZU5hbWUgPSBzdHlsZU5hbWVzW2pdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0eWxlVmFsdWUgPSBwcm9wVmFsdWVbc3R5bGVOYW1lXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRTdHlsZVZhbHVlID0gcHJldmlvdXNWYWx1ZSAmJiBwcmV2aW91c1ZhbHVlW3N0eWxlTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKG5ld1N0eWxlVmFsdWUgPT09IG9sZFN0eWxlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAobmV3U3R5bGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjaGVja1N0eWxlVmFsdWUobmV3U3R5bGVWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zLnN0eWxlQXBwbHllcihkb21Ob2RlLCBzdHlsZU5hbWUsIG5ld1N0eWxlVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMuc3R5bGVBcHBseWVyKGRvbU5vZGUsIHN0eWxlTmFtZSwgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghcHJvcFZhbHVlICYmIHR5cGVvZiBwcmV2aW91c1ZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHByb3BWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BOYW1lID09PSAndmFsdWUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9tVmFsdWUgPSBkb21Ob2RlW3Byb3BOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoZG9tVmFsdWUgIT09IHByb3BWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAoZG9tTm9kZVsnb25pbnB1dC12YWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRvbVZhbHVlID09PSBkb21Ob2RlWydvbmlucHV0LXZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgIDogcHJvcFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZVsnb25pbnB1dC12YWx1ZSddID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJvcFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9wTmFtZSAhPT0gJ2tleScgJiYgcHJvcFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbicgJiYgcHJvcE5hbWUubGFzdEluZGV4T2YoJ29uJywgMCkgPT09IDAgJiYgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIHByb3BOYW1lLnN1YnN0cigyKSwgcHJvcFZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucywgcHJvcGVydGllcy5iaW5kLCBwcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgcHJvcE5hbWUgIT09ICdpbm5lckhUTUwnICYmIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGUoZG9tTm9kZSwgcHJvcE5hbWUsIHByb3BWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wTmFtZSA9PT0gJ3Njcm9sbExlZnQnIHx8IHByb3BOYW1lID09PSAnc2Nyb2xsVG9wJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tTm9kZVtwcm9wTmFtZV0gIT09IHByb3BWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9tTm9kZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BlcnRpZXNVcGRhdGVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4T2ZDaGlsZChjaGlsZHJlbiwgc2FtZUFzLCBzdGFydCkge1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzYW1lKGNoaWxkcmVuW2ldLCBzYW1lQXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9QYXJlbnRWTm9kZShkb21Ob2RlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGFnOiAnJyxcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbU5vZGUsXG4gICAgICAgIHR5cGU6IFZOT0RFXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b1RleHRWTm9kZShkYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGFnOiAnJyxcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXG4gICAgICAgIHRleHQ6IGAke2RhdGF9YCxcbiAgICAgICAgZG9tTm9kZTogdW5kZWZpbmVkLFxuICAgICAgICB0eXBlOiBWTk9ERVxuICAgIH07XG59XG5mdW5jdGlvbiB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICByZW5kZXJlZDogW10sXG4gICAgICAgIGNvcmVQcm9wZXJ0aWVzOiBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMsXG4gICAgICAgIGNoaWxkcmVuOiBpbnN0YW5jZS5jaGlsZHJlbixcbiAgICAgICAgd2lkZ2V0Q29uc3RydWN0b3I6IGluc3RhbmNlLmNvbnN0cnVjdG9yLFxuICAgICAgICBwcm9wZXJ0aWVzOiBpbnN0YW5jZURhdGEuaW5wdXRQcm9wZXJ0aWVzLFxuICAgICAgICB0eXBlOiBXTk9ERVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZHJlbiwgaW5zdGFuY2UpIHtcbiAgICBpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZW1wdHlBcnJheTtcbiAgICB9XG4gICAgY2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogW2NoaWxkcmVuXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDspIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgaWYgKGNoaWxkID09PSB1bmRlZmluZWQgfHwgY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gdG9UZXh0Vk5vZGUoY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzVk5vZGUoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLnByb3BlcnRpZXMuYmluZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnByb3BlcnRpZXMuYmluZCA9IGluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5jb3JlUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5jb3JlUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmQ6IGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJlZ2lzdHJ5OiBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMuYmFzZVJlZ2lzdHJ5XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4sIGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW47XG59XG5mdW5jdGlvbiBub2RlQWRkZWQoZG5vZGUsIHRyYW5zaXRpb25zKSB7XG4gICAgaWYgKGlzVk5vZGUoZG5vZGUpICYmIGRub2RlLnByb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgZW50ZXJBbmltYXRpb24gPSBkbm9kZS5wcm9wZXJ0aWVzLmVudGVyQW5pbWF0aW9uO1xuICAgICAgICBpZiAoZW50ZXJBbmltYXRpb24pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZW50ZXJBbmltYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBlbnRlckFuaW1hdGlvbihkbm9kZS5kb21Ob2RlLCBkbm9kZS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmVudGVyKGRub2RlLmRvbU5vZGUsIGRub2RlLnByb3BlcnRpZXMsIGVudGVyQW5pbWF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIG5vZGVUb1JlbW92ZShkbm9kZSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgaWYgKGlzV05vZGUoZG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gZG5vZGUucmVuZGVyZWQgfHwgZW1wdHlBcnJheTtcbiAgICAgICAgaWYgKGRub2RlLmluc3RhbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoZG5vZGUuaW5zdGFuY2UpO1xuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm9uRGV0YWNoKCk7XG4gICAgICAgICAgICBpbnN0YW5jZU1hcC5kZWxldGUoZG5vZGUuaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShyZW5kZXJlZFtpXSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGU7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBkbm9kZS5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAoZG5vZGUuY2hpbGRyZW4gJiYgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG5vZGVUb1JlbW92ZShkbm9kZS5jaGlsZHJlbltpXSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleGl0QW5pbWF0aW9uID0gcHJvcGVydGllcy5leGl0QW5pbWF0aW9uO1xuICAgICAgICBpZiAocHJvcGVydGllcyAmJiBleGl0QW5pbWF0aW9uKSB7XG4gICAgICAgICAgICBkb21Ob2RlLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVEb21Ob2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRvbU5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlKTtcbiAgICAgICAgICAgICAgICBkbm9kZS5kb21Ob2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhpdEFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGV4aXRBbmltYXRpb24oZG9tTm9kZSwgcmVtb3ZlRG9tTm9kZSwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuZXhpdChkbm9kZS5kb21Ob2RlLCBwcm9wZXJ0aWVzLCBleGl0QW5pbWF0aW9uLCByZW1vdmVEb21Ob2RlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZG9tTm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbU5vZGUpO1xuICAgICAgICBkbm9kZS5kb21Ob2RlID0gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKGNoaWxkTm9kZXMsIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2luZGV4VG9DaGVja107XG4gICAgaWYgKGlzVk5vZGUoY2hpbGROb2RlKSAmJiAhY2hpbGROb2RlLnRhZykge1xuICAgICAgICByZXR1cm47IC8vIFRleHQgbm9kZXMgbmVlZCBub3QgYmUgZGlzdGluZ3Vpc2hhYmxlXG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBjaGlsZE5vZGUucHJvcGVydGllcztcbiAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgIT09IGluZGV4VG9DaGVjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChzYW1lKG5vZGUsIGNoaWxkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVJZGVudGlmaWVyO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnROYW1lID0gcGFyZW50SW5zdGFuY2UuY29uc3RydWN0b3IubmFtZSB8fCAndW5rbm93bic7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1dOb2RlKGNoaWxkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJZGVudGlmaWVyID0gY2hpbGROb2RlLndpZGdldENvbnN0cnVjdG9yLm5hbWUgfHwgJ3Vua25vd24nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlkZW50aWZpZXIgPSBjaGlsZE5vZGUudGFnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgQSB3aWRnZXQgKCR7cGFyZW50TmFtZX0pIGhhcyBoYWQgYSBjaGlsZCBhZGRkZWQgb3IgcmVtb3ZlZCwgYnV0IHRoZXkgd2VyZSBub3QgYWJsZSB0byB1bmlxdWVseSBpZGVudGlmaWVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byBwcm92aWRlIGEgdW5pcXVlICdrZXknIHByb3BlcnR5IHdoZW4gdXNpbmcgdGhlIHNhbWUgd2lkZ2V0IG9yIGVsZW1lbnQgKCR7bm9kZUlkZW50aWZpZXJ9KSBtdWx0aXBsZSB0aW1lcyBhcyBzaWJsaW5nc2ApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVDaGlsZHJlbihwYXJlbnRWTm9kZSwgb2xkQ2hpbGRyZW4sIG5ld0NoaWxkcmVuLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBvbGRDaGlsZHJlbiA9IG9sZENoaWxkcmVuIHx8IGVtcHR5QXJyYXk7XG4gICAgbmV3Q2hpbGRyZW4gPSBuZXdDaGlsZHJlbjtcbiAgICBjb25zdCBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZENoaWxkcmVuLmxlbmd0aDtcbiAgICBjb25zdCBuZXdDaGlsZHJlbkxlbmd0aCA9IG5ld0NoaWxkcmVuLmxlbmd0aDtcbiAgICBjb25zdCB0cmFuc2l0aW9ucyA9IHByb2plY3Rpb25PcHRpb25zLnRyYW5zaXRpb25zO1xuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IGRlcHRoOiBwcm9qZWN0aW9uT3B0aW9ucy5kZXB0aCArIDEgfSk7XG4gICAgbGV0IG9sZEluZGV4ID0gMDtcbiAgICBsZXQgbmV3SW5kZXggPSAwO1xuICAgIGxldCBpO1xuICAgIGxldCB0ZXh0VXBkYXRlZCA9IGZhbHNlO1xuICAgIHdoaWxlIChuZXdJbmRleCA8IG5ld0NoaWxkcmVuTGVuZ3RoKSB7XG4gICAgICAgIGxldCBvbGRDaGlsZCA9IG9sZEluZGV4IDwgb2xkQ2hpbGRyZW5MZW5ndGggPyBvbGRDaGlsZHJlbltvbGRJbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG5ld0NoaWxkID0gbmV3Q2hpbGRyZW5bbmV3SW5kZXhdO1xuICAgICAgICBpZiAoaXNWTm9kZShuZXdDaGlsZCkgJiYgdHlwZW9mIG5ld0NoaWxkLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZXdDaGlsZC5pbnNlcnRlZCA9IGlzVk5vZGUob2xkQ2hpbGQpICYmIG9sZENoaWxkLmluc2VydGVkO1xuICAgICAgICAgICAgYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKG5ld0NoaWxkLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9sZENoaWxkICE9PSB1bmRlZmluZWQgJiYgc2FtZShvbGRDaGlsZCwgbmV3Q2hpbGQpKSB7XG4gICAgICAgICAgICB0ZXh0VXBkYXRlZCA9IHVwZGF0ZURvbShvbGRDaGlsZCwgbmV3Q2hpbGQsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgcGFyZW50SW5zdGFuY2UpIHx8IHRleHRVcGRhdGVkO1xuICAgICAgICAgICAgb2xkSW5kZXgrKztcbiAgICAgICAgICAgIG5ld0luZGV4Kys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaW5kT2xkSW5kZXggPSBmaW5kSW5kZXhPZkNoaWxkKG9sZENoaWxkcmVuLCBuZXdDaGlsZCwgb2xkSW5kZXggKyAxKTtcbiAgICAgICAgY29uc3QgYWRkQ2hpbGQgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgaW5zZXJ0QmVmb3JlRG9tTm9kZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBjaGlsZCA9IG9sZENoaWxkcmVuW29sZEluZGV4XTtcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgICAgICAgIGxldCBuZXh0SW5kZXggPSBvbGRJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgbGV0IGluc2VydEJlZm9yZUNoaWxkcmVuID0gW2NoaWxkXTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZUNoaWxkcmVuLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1dOb2RlKGluc2VydEJlZm9yZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUucmVuZGVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDaGlsZHJlbi5wdXNoKC4uLmluc2VydEJlZm9yZS5yZW5kZXJlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlLmRvbU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVEb21Ob2RlID0gaW5zZXJ0QmVmb3JlLmRvbU5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZUNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiBvbGRDaGlsZHJlbltuZXh0SW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDaGlsZHJlbi5wdXNoKG9sZENoaWxkcmVuW25leHRJbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjcmVhdGVEb20obmV3Q2hpbGQsIHBhcmVudFZOb2RlLCBpbnNlcnRCZWZvcmVEb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgbm9kZUFkZGVkKG5ld0NoaWxkLCB0cmFuc2l0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBpbmRleFRvQ2hlY2sgPSBuZXdJbmRleDtcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG5ld0NoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoIW9sZENoaWxkIHx8IGZpbmRPbGRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGFkZENoaWxkKCk7XG4gICAgICAgICAgICBuZXdJbmRleCsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVtb3ZlQ2hpbGQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleFRvQ2hlY2sgPSBvbGRJbmRleDtcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGlzV05vZGUob2xkQ2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGluc3RhbmNlTWFwLmdldChvbGRDaGlsZC5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkQ2hpbGQgPSBpdGVtLmRub2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShvbGRDaGlsZCwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmluZE5ld0luZGV4ID0gZmluZEluZGV4T2ZDaGlsZChuZXdDaGlsZHJlbiwgb2xkQ2hpbGQsIG5ld0luZGV4ICsgMSk7XG4gICAgICAgIGlmIChmaW5kTmV3SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZW1vdmVDaGlsZCgpO1xuICAgICAgICAgICAgb2xkSW5kZXgrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGFkZENoaWxkKCk7XG4gICAgICAgIHJlbW92ZUNoaWxkKCk7XG4gICAgICAgIG9sZEluZGV4Kys7XG4gICAgICAgIG5ld0luZGV4Kys7XG4gICAgfVxuICAgIGlmIChvbGRDaGlsZHJlbkxlbmd0aCA+IG9sZEluZGV4KSB7XG4gICAgICAgIC8vIFJlbW92ZSBjaGlsZCBmcmFnbWVudHNcbiAgICAgICAgZm9yIChpID0gb2xkSW5kZXg7IGkgPCBvbGRDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleFRvQ2hlY2sgPSBpO1xuICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2hlY2tEaXN0aW5ndWlzaGFibGUob2xkQ2hpbGRyZW4sIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgY2hpbGRUb1JlbW92ZSA9IG9sZENoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKGlzV05vZGUoY2hpbGRUb1JlbW92ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gaW5zdGFuY2VNYXAuZ2V0KGNoaWxkVG9SZW1vdmUuaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVG9SZW1vdmUgPSBpdGVtLmRub2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShjaGlsZFRvUmVtb3ZlLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZXh0VXBkYXRlZDtcbn1cbmZ1bmN0aW9uIGFkZENoaWxkcmVuKHBhcmVudFZOb2RlLCBjaGlsZHJlbiwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlLCBpbnNlcnRCZWZvcmUgPSB1bmRlZmluZWQsIGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNoaWxkTm9kZXMgPSBhcnJheUZyb20ocGFyZW50Vk5vZGUuZG9tTm9kZS5jaGlsZE5vZGVzKTtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucztcbiAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IGRlcHRoOiBwcm9qZWN0aW9uT3B0aW9ucy5kZXB0aCArIDEgfSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICBpZiAoaXNWTm9kZShjaGlsZCkpIHtcbiAgICAgICAgICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5tZXJnZSAmJiBjaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRvbUVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoaWxkLmRvbU5vZGUgPT09IHVuZGVmaW5lZCAmJiBjaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCA9IGNoaWxkTm9kZXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbUVsZW1lbnQgJiYgZG9tRWxlbWVudC50YWdOYW1lID09PSAoY2hpbGQudGFnLnRvVXBwZXJDYXNlKCkgfHwgdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuZG9tTm9kZSA9IGRvbUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjcmVhdGVEb20oY2hpbGQsIHBhcmVudFZOb2RlLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjcmVhdGVEb20oY2hpbGQsIHBhcmVudFZOb2RlLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgY2hpbGROb2Rlcyk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZUFkZGVkKGNoaWxkLCB0cmFuc2l0aW9ucyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdFByb3BlcnRpZXNBbmRDaGlsZHJlbihkb21Ob2RlLCBkbm9kZSwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgYWRkQ2hpbGRyZW4oZG5vZGUsIGRub2RlLmNoaWxkcmVuLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHR5cGVvZiBkbm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyAmJiBkbm9kZS5pbnNlcnRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFkZERlZmVycmVkUHJvcGVydGllcyhkbm9kZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcbiAgICAgICAgdXBkYXRlQXR0cmlidXRlcyhkb21Ob2RlLCB7fSwgZG5vZGUuYXR0cmlidXRlcywgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgZmFsc2UpO1xuICAgICAgICByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCB7fSwgZG5vZGUuZXZlbnRzLCBwcm9qZWN0aW9uT3B0aW9ucywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IGRub2RlLmV2ZW50cztcbiAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdXBkYXRlRXZlbnQoZG9tTm9kZSwgZXZlbnQsIGV2ZW50c1tldmVudF0sIHByb2plY3Rpb25PcHRpb25zLCBkbm9kZS5wcm9wZXJ0aWVzLmJpbmQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwge30sIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSBudWxsICYmIGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZChkb21Ob2RlLCBgJHtkbm9kZS5wcm9wZXJ0aWVzLmtleX1gKTtcbiAgICB9XG4gICAgZG5vZGUuaW5zZXJ0ZWQgPSB0cnVlO1xufVxuZnVuY3Rpb24gY3JlYXRlRG9tKGRub2RlLCBwYXJlbnRWTm9kZSwgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGNoaWxkTm9kZXMpIHtcbiAgICBsZXQgZG9tTm9kZTtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgaWYgKGlzV05vZGUoZG5vZGUpKSB7XG4gICAgICAgIGxldCB7IHdpZGdldENvbnN0cnVjdG9yIH0gPSBkbm9kZTtcbiAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgaWYgKCFpc1dpZGdldEJhc2VDb25zdHJ1Y3Rvcih3aWRnZXRDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwYXJlbnRJbnN0YW5jZURhdGEucmVnaXN0cnkoKS5nZXQod2lkZ2V0Q29uc3RydWN0b3IpO1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aWRnZXRDb25zdHJ1Y3RvciA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgd2lkZ2V0Q29uc3RydWN0b3IoKTtcbiAgICAgICAgZG5vZGUuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLmludmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEuZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWUucHVzaCh7IGluc3RhbmNlLCBkZXB0aDogcHJvamVjdGlvbk9wdGlvbnMuZGVwdGggfSk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVSZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gdHJ1ZTtcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDb3JlUHJvcGVydGllc19fKGRub2RlLmNvcmVQcm9wZXJ0aWVzKTtcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDaGlsZHJlbl9fKGRub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgaW5zdGFuY2UuX19zZXRQcm9wZXJ0aWVzX18oZG5vZGUucHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gaW5zdGFuY2UuX19yZW5kZXJfXygpO1xuICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChyZW5kZXJlZCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSZW5kZXJlZCA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4ocmVuZGVyZWQsIGluc3RhbmNlKTtcbiAgICAgICAgICAgIGRub2RlLnJlbmRlcmVkID0gZmlsdGVyZWRSZW5kZXJlZDtcbiAgICAgICAgICAgIGFkZENoaWxkcmVuKHBhcmVudFZOb2RlLCBmaWx0ZXJlZFJlbmRlcmVkLCBwcm9qZWN0aW9uT3B0aW9ucywgaW5zdGFuY2UsIGluc2VydEJlZm9yZSwgY2hpbGROb2Rlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlLCBwYXJlbnRWTm9kZSB9KTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZFJvb3QoKTtcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEub25BdHRhY2goKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgcHJvamVjdG9yU3RhdGUubWVyZ2VFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gcHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50O1xuICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUubWVyZ2VFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaW5pdFByb3BlcnRpZXNBbmRDaGlsZHJlbihkb21Ob2RlLCBkbm9kZSwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2MgPSBwYXJlbnRWTm9kZS5kb21Ob2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgICAgIGlmICghZG5vZGUudGFnICYmIHR5cGVvZiBkbm9kZS50ZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGRub2RlLmRvbU5vZGUgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRWTm9kZS5kb21Ob2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RG9tTm9kZSA9IGRub2RlLmRvbU5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkbm9kZS50ZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Vk5vZGUuZG9tTm9kZSA9PT0gZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUucmVwbGFjZUNoaWxkKG5ld0RvbU5vZGUsIGRub2RlLmRvbU5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5hcHBlbmRDaGlsZChuZXdEb21Ob2RlKTtcbiAgICAgICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlICYmIGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkbm9kZS5kb21Ob2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZSA9IG5ld0RvbU5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZShkbm9kZS50ZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5pbnNlcnRCZWZvcmUoZG9tTm9kZSwgaW5zZXJ0QmVmb3JlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQoZG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRub2RlLmRvbU5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChkbm9kZS50YWcgPT09ICdzdmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgbmFtZXNwYWNlOiBOQU1FU1BBQ0VfU1ZHIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMubmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudE5TKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSwgZG5vZGUudGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG5vZGUuZG9tTm9kZSB8fCBkb2MuY3JlYXRlRWxlbWVudChkbm9kZS50YWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5pdFByb3BlcnRpZXNBbmRDaGlsZHJlbihkb21Ob2RlLCBkbm9kZSwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuaW5zZXJ0QmVmb3JlKGRvbU5vZGUsIGluc2VydEJlZm9yZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkb21Ob2RlLnBhcmVudE5vZGUgIT09IHBhcmVudFZOb2RlLmRvbU5vZGUpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmFwcGVuZENoaWxkKGRvbU5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlRG9tKHByZXZpb3VzLCBkbm9kZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBwYXJlbnRJbnN0YW5jZSkge1xuICAgIGlmIChpc1dOb2RlKGRub2RlKSkge1xuICAgICAgICBjb25zdCB7IGluc3RhbmNlIH0gPSBwcmV2aW91cztcbiAgICAgICAgY29uc3QgeyBwYXJlbnRWTm9kZSwgZG5vZGU6IG5vZGUgfSA9IGluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUmVuZGVyZWQgPSBub2RlID8gbm9kZS5yZW5kZXJlZCA6IHByZXZpb3VzLnJlbmRlcmVkO1xuICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gdHJ1ZTtcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDb3JlUHJvcGVydGllc19fKGRub2RlLmNvcmVQcm9wZXJ0aWVzKTtcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDaGlsZHJlbl9fKGRub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgaW5zdGFuY2UuX19zZXRQcm9wZXJ0aWVzX18oZG5vZGUucHJvcGVydGllcyk7XG4gICAgICAgIGRub2RlLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgIGlmIChpbnN0YW5jZURhdGEuZGlydHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVkID0gaW5zdGFuY2UuX19yZW5kZXJfXygpO1xuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgZG5vZGUucmVuZGVyZWQgPSBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKHJlbmRlcmVkLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICB1cGRhdGVDaGlsZHJlbihwYXJlbnRWTm9kZSwgcHJldmlvdXNSZW5kZXJlZCwgZG5vZGUucmVuZGVyZWQsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IHByZXZpb3VzUmVuZGVyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlLCBwYXJlbnRWTm9kZSB9KTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZFJvb3QoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChwcmV2aW91cyA9PT0gZG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb21Ob2RlID0gKGRub2RlLmRvbU5vZGUgPSBwcmV2aW91cy5kb21Ob2RlKTtcbiAgICAgICAgbGV0IHRleHRVcGRhdGVkID0gZmFsc2U7XG4gICAgICAgIGxldCB1cGRhdGVkID0gZmFsc2U7XG4gICAgICAgIGlmICghZG5vZGUudGFnICYmIHR5cGVvZiBkbm9kZS50ZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGRub2RlLnRleHQgIT09IHByZXZpb3VzLnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdEb21Ob2RlID0gZG9tTm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRub2RlLnRleHQpO1xuICAgICAgICAgICAgICAgIGRvbU5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3RG9tTm9kZSwgZG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZSA9IG5ld0RvbU5vZGU7XG4gICAgICAgICAgICAgICAgdGV4dFVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0VXBkYXRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkbm9kZS50YWcgJiYgZG5vZGUudGFnLmxhc3RJbmRleE9mKCdzdmcnLCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgbmFtZXNwYWNlOiBOQU1FU1BBQ0VfU1ZHIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzLmNoaWxkcmVuICE9PSBkbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihkbm9kZS5jaGlsZHJlbiwgcGFyZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGRub2RlLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgdXBkYXRlZCA9XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKGRub2RlLCBwcmV2aW91cy5jaGlsZHJlbiwgY2hpbGRyZW4sIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykgfHwgdXBkYXRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUHJvcGVydGllcyA9IGJ1aWxkUHJldmlvdXNQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzLCBkbm9kZSk7XG4gICAgICAgICAgICBpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5hdHRyaWJ1dGVzLCBkbm9kZS5hdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdXBkYXRlZCA9XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLnByb3BlcnRpZXMsIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zLCBmYWxzZSkgfHwgdXBkYXRlZDtcbiAgICAgICAgICAgICAgICByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuZXZlbnRzLCBkbm9kZS5ldmVudHMsIHByb2plY3Rpb25PcHRpb25zLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudHMgPSBkbm9kZS5ldmVudHM7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVFdmVudChkb21Ob2RlLCBldmVudCwgZXZlbnRzW2V2ZW50XSwgcHJvamVjdGlvbk9wdGlvbnMsIGRub2RlLnByb3BlcnRpZXMuYmluZCwgcHJldmlvdXNQcm9wZXJ0aWVzLmV2ZW50c1tldmVudF0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlZCA9XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLnByb3BlcnRpZXMsIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gbnVsbCAmJiBkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZURhdGEubm9kZUhhbmRsZXIuYWRkKGRvbU5vZGUsIGAke2Rub2RlLnByb3BlcnRpZXMua2V5fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVkICYmIGRub2RlLnByb3BlcnRpZXMgJiYgZG5vZGUucHJvcGVydGllcy51cGRhdGVBbmltYXRpb24pIHtcbiAgICAgICAgICAgIGRub2RlLnByb3BlcnRpZXMudXBkYXRlQW5pbWF0aW9uKGRvbU5vZGUsIGRub2RlLnByb3BlcnRpZXMsIHByZXZpb3VzLnByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKHZub2RlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIC8vIHRyYW5zZmVyIGFueSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCAtIGFzIHRoZXNlIG11c3QgYmUgZGVjb3JhdGVkIHByb3BlcnRpZXNcbiAgICB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMgPSB2bm9kZS5wcm9wZXJ0aWVzO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB2bm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayghIXZub2RlLmluc2VydGVkKTtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgdm5vZGUucHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnRpZXMsIHZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllcyk7XG4gICAgcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCB2bm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayghIXZub2RlLmluc2VydGVkKSwgdm5vZGUuZGVjb3JhdGVkRGVmZXJyZWRQcm9wZXJ0aWVzKTtcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyh2bm9kZS5kb21Ob2RlLCB2bm9kZS5wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIHZub2RlLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcnVuRGVmZXJyZWRSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgaWYgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xuICAgICAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBydW5BZnRlclJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xuICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoZ2xvYmFsLnJlcXVlc3RJZGxlQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGdsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gc2NoZWR1bGVSZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgaWYgKHByb2plY3Rpb25PcHRpb25zLnN5bmMpIHtcbiAgICAgICAgcmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvamVjdG9yU3RhdGUucmVuZGVyU2NoZWR1bGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvamVjdG9yU3RhdGUucmVuZGVyU2NoZWR1bGVkID0gZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpIHtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgcHJvamVjdG9yU3RhdGUucmVuZGVyU2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlbmRlclF1ZXVlID0gcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWU7XG4gICAgY29uc3QgcmVuZGVycyA9IFsuLi5yZW5kZXJRdWV1ZV07XG4gICAgcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWUgPSBbXTtcbiAgICByZW5kZXJzLnNvcnQoKGEsIGIpID0+IGEuZGVwdGggLSBiLmRlcHRoKTtcbiAgICBjb25zdCBwcmV2aW91c2x5UmVuZGVyZWQgPSBbXTtcbiAgICB3aGlsZSAocmVuZGVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gcmVuZGVycy5zaGlmdCgpO1xuICAgICAgICBpZiAoaW5zdGFuY2VNYXAuaGFzKGluc3RhbmNlKSAmJiBwcmV2aW91c2x5UmVuZGVyZWQuaW5kZXhPZihpbnN0YW5jZSkgPT09IC0xKSB7XG4gICAgICAgICAgICBwcmV2aW91c2x5UmVuZGVyZWQucHVzaChpbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCB7IHBhcmVudFZOb2RlLCBkbm9kZSB9ID0gaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgICAgICB1cGRhdGVEb20oZG5vZGUsIHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBpbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpO1xuICAgIHJ1bkRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKTtcbn1cbmV4cG9ydCBjb25zdCBkb20gPSB7XG4gICAgYXBwZW5kOiBmdW5jdGlvbiAocGFyZW50Tm9kZSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgZmluYWxQcm9qZWN0b3JPcHRpb25zID0gZ2V0UHJvamVjdGlvbk9wdGlvbnMocHJvamVjdGlvbk9wdGlvbnMsIGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSB7XG4gICAgICAgICAgICBhZnRlclJlbmRlckNhbGxiYWNrczogW10sXG4gICAgICAgICAgICBkZWZlcnJlZFJlbmRlckNhbGxiYWNrczogW10sXG4gICAgICAgICAgICBub2RlTWFwOiBuZXcgV2Vha01hcCgpLFxuICAgICAgICAgICAgcmVuZGVyU2NoZWR1bGVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICByZW5kZXJRdWV1ZTogW10sXG4gICAgICAgICAgICBtZXJnZTogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgfHwgZmFsc2UsXG4gICAgICAgICAgICBtZXJnZUVsZW1lbnQ6IHByb2plY3Rpb25PcHRpb25zLm1lcmdlRWxlbWVudFxuICAgICAgICB9O1xuICAgICAgICBwcm9qZWN0b3JTdGF0ZU1hcC5zZXQoaW5zdGFuY2UsIHByb2plY3RvclN0YXRlKTtcbiAgICAgICAgZmluYWxQcm9qZWN0b3JPcHRpb25zLnJvb3ROb2RlID0gcGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgcGFyZW50Vk5vZGUgPSB0b1BhcmVudFZOb2RlKGZpbmFsUHJvamVjdG9yT3B0aW9ucy5yb290Tm9kZSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSk7XG4gICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZTogbm9kZSwgcGFyZW50Vk5vZGUgfSk7XG4gICAgICAgIGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlID0gKCkgPT4ge1xuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZURhdGEucmVuZGVyaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlLnB1c2goeyBpbnN0YW5jZSwgZGVwdGg6IGZpbmFsUHJvamVjdG9yT3B0aW9ucy5kZXB0aCB9KTtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVJlbmRlcihmaW5hbFByb2plY3Rvck9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB1cGRhdGVEb20obm9kZSwgbm9kZSwgZmluYWxQcm9qZWN0b3JPcHRpb25zLCBwYXJlbnRWTm9kZSwgaW5zdGFuY2UpO1xuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5vbkF0dGFjaCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuRGVmZXJyZWRSZW5kZXJDYWxsYmFja3MoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcbiAgICAgICAgcnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbU5vZGU6IGZpbmFsUHJvamVjdG9yT3B0aW9ucy5yb290Tm9kZVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICB9LFxuICAgIG1lcmdlOiBmdW5jdGlvbiAoZWxlbWVudCwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zID0ge30pIHtcbiAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgPSB0cnVlO1xuICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uID0gdGhpcy5hcHBlbmQoZWxlbWVudC5wYXJlbnROb2RlLCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgIHByb2plY3RvclN0YXRlLm1lcmdlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBwcm9qZWN0aW9uO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZG9tLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS92ZG9tLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvdmRvbS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIHdpZGdldEZhY3RvcnkgPSByZXF1aXJlKFwic3JjL21lbnUvTWVudVwiKTtcblxudmFyIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IHJlcXVpcmUoJ0Bkb2pvL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCcpLmRlZmF1bHQ7XG5cbnZhciBkZWZhdWx0RXhwb3J0ID0gd2lkZ2V0RmFjdG9yeS5kZWZhdWx0O1xuZGVmYXVsdEV4cG9ydCAmJiByZWdpc3RlckN1c3RvbUVsZW1lbnQoZGVmYXVsdEV4cG9ydCk7XG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ltcG9ydHMtbG9hZGVyP3dpZGdldEZhY3Rvcnk9c3JjL21lbnUvTWVudSEuL25vZGVfbW9kdWxlcy9AZG9qby9jbGktYnVpbGQtd2lkZ2V0L3RlbXBsYXRlL2N1c3RvbS1lbGVtZW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9pbXBvcnRzLWxvYWRlci9pbmRleC5qcz93aWRnZXRGYWN0b3J5PXNyYy9tZW51L01lbnUhLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDApXHJcbiAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSB5W29wWzBdICYgMiA/IFwicmV0dXJuXCIgOiBvcFswXSA/IFwidGhyb3dcIiA6IFwibmV4dFwiXSkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbMCwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgIH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChvW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9OyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2goZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxuXHRcdGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyB2IH0gZnJvbSAnQGRvam8vd2lkZ2V0LWNvcmUvZCc7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9jdXN0b21FbGVtZW50JztcbmltcG9ydCB7IFdpZGdldFByb3BlcnRpZXMsIFdOb2RlIH0gZnJvbSAnQGRvam8vd2lkZ2V0LWNvcmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB0aGVtZSwgVGhlbWVkTWl4aW4gfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkJztcbmltcG9ydCB7IFdpZGdldEJhc2UgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9XaWRnZXRCYXNlJztcbmltcG9ydCB7IE1lbnVJdGVtLCBNZW51SXRlbVByb3BlcnRpZXMgfSBmcm9tICcuLi9tZW51LWl0ZW0vTWVudUl0ZW0nO1xuXG5pbXBvcnQgKiBhcyBjc3MgZnJvbSAnLi9tZW51Lm0uY3NzJztcblxuaW50ZXJmYWNlIE1lbnVQcm9wZXJ0aWVzIGV4dGVuZHMgV2lkZ2V0UHJvcGVydGllcyB7XG5cdG9uU2VsZWN0ZWQ6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG59XG5cbkBjdXN0b21FbGVtZW50PE1lbnVQcm9wZXJ0aWVzPih7XG5cdHRhZzogJ2RlbW8tbWVudScsXG5cdGV2ZW50czogWydvblNlbGVjdGVkJ11cbn0pXG5AdGhlbWUoY3NzKVxuZXhwb3J0IGNsYXNzIE1lbnUgZXh0ZW5kcyBUaGVtZWRNaXhpbihXaWRnZXRCYXNlKTxNZW51UHJvcGVydGllcywgV05vZGU8TWVudUl0ZW0+PiB7XG5cdHByaXZhdGUgX3NlbGVjdGVkSWQ6IG51bWJlcjtcblxuXHRwcml2YXRlIF9vblNlbGVjdGVkKGlkOiBudW1iZXIsIGRhdGE6IGFueSkge1xuXHRcdHRoaXMuX3NlbGVjdGVkSWQgPSBpZDtcblx0XHR0aGlzLnByb3BlcnRpZXMub25TZWxlY3RlZChkYXRhKTtcblx0XHR0aGlzLmludmFsaWRhdGUoKTtcblx0fVxuXG5cdHByb3RlY3RlZCByZW5kZXIoKSB7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLmNoaWxkcmVuLm1hcCgoY2hpbGQsIGluZGV4KSA9PiB7XG5cdFx0XHRpZiAoY2hpbGQpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydGllczogUGFydGlhbDxNZW51SXRlbVByb3BlcnRpZXM+ID0ge1xuXHRcdFx0XHRcdG9uU2VsZWN0ZWQ6IChkYXRhOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX29uU2VsZWN0ZWQoaW5kZXgsIGRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKHRoaXMuX3NlbGVjdGVkSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHByb3BlcnRpZXMuc2VsZWN0ZWQgPSBpbmRleCA9PT0gdGhpcy5fc2VsZWN0ZWRJZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjaGlsZC5wcm9wZXJ0aWVzID0geyAuLi5jaGlsZC5wcm9wZXJ0aWVzLCAuLi5wcm9wZXJ0aWVzIH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2hpbGQ7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdignbmF2JywgeyBjbGFzc2VzOiB0aGlzLnRoZW1lKGNzcy5yb290KSB9LCBbXG5cdFx0XHR2KFxuXHRcdFx0XHQnb2wnLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2xhc3NlczogdGhpcy50aGVtZShjc3MubWVudUNvbnRhaW5lcilcblx0XHRcdFx0fSxcblx0XHRcdFx0aXRlbXNcblx0XHRcdClcblx0XHRdKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXI/dHlwZT10cyZpbnN0YW5jZU5hbWU9MF9tZW51IS4vc3JjL21lbnUvTWVudS50cyIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcIiBfa2V5XCI6XCJ0ZXN0LWFwcC9tZW51XCIsXCJyb290XCI6XCJtZW51LW1fX3Jvb3RfXzNiQTZqXCIsXCJtZW51Q29udGFpbmVyXCI6XCJtZW51LW1fX21lbnVDb250YWluZXJfXzFlb0dmXCJ9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL21lbnUvbWVudS5tLmNzc1xuLy8gbW9kdWxlIGlkID0gLi9zcmMvbWVudS9tZW51Lm0uY3NzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgN2UwYjEwNDFkMDFlMDBjYzljYjMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL0Rlc3Ryb3lhYmxlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRXZlbnRlZC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL2xhbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvaGFzL2hhcy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL01hcC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL1Byb21pc2UubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9TeW1ib2wubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9XZWFrTWFwLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vYXJyYXkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9nbG9iYWwubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9pdGVyYXRvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL251bWJlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL29iamVjdC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N0cmluZy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC9xdWV1ZS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvdXRpbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9JbmplY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9Ob2RlSGFuZGxlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hZnRlclJlbmRlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2JlZm9yZVByb3BlcnRpZXMubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9jdXN0b21FbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RpZmYubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS92ZG9tLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS9NZW51LnRzIiwid2VicGFjazovLy8uL3NyYy9tZW51L21lbnUubS5jc3M/ZWMxMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7QUM3RGdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSx3Qzs7Ozs7Ozs7Ozs7QUN2REE7QUFDc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0NBQWdDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2RWlCO0FBQ0E7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsaUM7Ozs7Ozs7Ozs7OztBQ25NQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8saUJBQWlCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7O0FDdE1BO0FBQ0E7QUFDNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxtQzs7Ozs7Ozs7Ozs7OztBQ2hKQTtBQUNzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxxQkFBcUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGdDQUFnQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNrQztBQUNQO0FBQzNCO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3RELG9EQUFvRDtBQUNwRCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFlBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVM7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0M7Ozs7Ozs7O0FDdlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLG1DOzs7Ozs7Ozs7Ozs7Ozs7QUNqQkE7QUFDaUQ7QUFDakQsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDOzs7Ozs7Ozs7Ozs7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREE7QUFDQTtBQUNtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNBO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFlBQVk7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0Y7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DOzs7Ozs7Ozs7OztBQ3hTbUI7QUFDbkI7MEVBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsRUFBRTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxFQUFFO0FBQ2pFLG1DQUFtQyxtQkFBbUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxnQzs7Ozs7Ozs7Ozs7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsZ0NBQWdDLG1CQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxrQzs7Ozs7Ozs7O0FDekxBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQzs7Ozs7Ozs7O0FDdEJrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxxQzs7Ozs7Ozs7Ozs7QUNwQmtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2THRDO0FBQUE7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxnQkFBZ0Isc0NBQXNDLGlC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QU0sRUFBRSxDQUFDLFlBQVksQ0FBQztLQUN0QixDQUFDO0lBQ0QsZ0dBQUssQ0FBQyx5Q0FBRyxDQUFDO0dBQ0UsSUFBSSxDQW1DaEI7QUFuQ2dCO0FBcUNqQiwrREFBZSxJQUFJLEVBQUM7Ozs7Ozs7O0FDdkRwQjtBQUNBLGtCQUFrQixxRyIsImZpbGUiOiJtZW51LTEuMC4wLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgN2UwYjEwNDFkMDFlMDBjYzljYjMiLCJpbXBvcnQgeyBjcmVhdGVDb21wb3NpdGVIYW5kbGUgfSBmcm9tICcuL2xhbmcnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi4vc2hpbS9Qcm9taXNlJztcbi8qKlxuICogTm8gb3BlcmF0aW9uIGZ1bmN0aW9uIHRvIHJlcGxhY2Ugb3duIG9uY2UgaW5zdGFuY2UgaXMgZGVzdG9yeWVkXG4gKi9cbmZ1bmN0aW9uIG5vb3AoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG59XG4vKipcbiAqIE5vIG9wIGZ1bmN0aW9uIHVzZWQgdG8gcmVwbGFjZSBvd24sIG9uY2UgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdG9yeWVkXG4gKi9cbmZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgbWFkZSB0byBkZXN0cm95ZWQgbWV0aG9kJyk7XG59XG5leHBvcnQgY2xhc3MgRGVzdHJveWFibGUge1xuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmhhbmRsZXMgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgaGFuZGxlcyBmb3IgdGhlIGluc3RhbmNlIHRoYXQgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiBgdGhpcy5kZXN0cm95YCBpcyBjYWxsZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SGFuZGxlfSBoYW5kbGUgVGhlIGhhbmRsZSB0byBhZGQgZm9yIHRoZSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtIYW5kbGV9IGEgaGFuZGxlIGZvciB0aGUgaGFuZGxlLCByZW1vdmVzIHRoZSBoYW5kbGUgZm9yIHRoZSBpbnN0YW5jZSBhbmQgY2FsbHMgZGVzdHJveVxuICAgICAqL1xuICAgIG93bihoYW5kbGVzKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZSA9IEFycmF5LmlzQXJyYXkoaGFuZGxlcykgPyBjcmVhdGVDb21wb3NpdGVIYW5kbGUoLi4uaGFuZGxlcykgOiBoYW5kbGVzO1xuICAgICAgICBjb25zdCB7IGhhbmRsZXM6IF9oYW5kbGVzIH0gPSB0aGlzO1xuICAgICAgICBfaGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgIF9oYW5kbGVzLnNwbGljZShfaGFuZGxlcy5pbmRleE9mKGhhbmRsZSkpO1xuICAgICAgICAgICAgICAgIGhhbmRsZS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlc3RycHlzIGFsbCBoYW5kZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8YW55fSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIGFsbCBoYW5kbGVzIGhhdmUgYmVlbiBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcy5mb3JFYWNoKChoYW5kbGUpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGUgJiYgaGFuZGxlLmRlc3Ryb3kgJiYgaGFuZGxlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gbm9vcDtcbiAgICAgICAgICAgIHRoaXMub3duID0gZGVzdHJveWVkO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgRGVzdHJveWFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1EZXN0cm95YWJsZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRGVzdHJveWFibGUubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9EZXN0cm95YWJsZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IE1hcCBmcm9tICcuLi9zaGltL01hcCc7XG5pbXBvcnQgeyBEZXN0cm95YWJsZSB9IGZyb20gJy4vRGVzdHJveWFibGUnO1xuLyoqXG4gKiBNYXAgb2YgY29tcHV0ZWQgcmVndWxhciBleHByZXNzaW9ucywga2V5ZWQgYnkgc3RyaW5nXG4gKi9cbmNvbnN0IHJlZ2V4TWFwID0gbmV3IE1hcCgpO1xuLyoqXG4gKiBEZXRlcm1pbmVzIGlzIHRoZSBldmVudCB0eXBlIGdsb2IgaGFzIGJlZW4gbWF0Y2hlZFxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGdsb2IgaXMgbWF0Y2hlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHbG9iTWF0Y2goZ2xvYlN0cmluZywgdGFyZ2V0U3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXRTdHJpbmcgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBnbG9iU3RyaW5nID09PSAnc3RyaW5nJyAmJiBnbG9iU3RyaW5nLmluZGV4T2YoJyonKSAhPT0gLTEpIHtcbiAgICAgICAgbGV0IHJlZ2V4O1xuICAgICAgICBpZiAocmVnZXhNYXAuaGFzKGdsb2JTdHJpbmcpKSB7XG4gICAgICAgICAgICByZWdleCA9IHJlZ2V4TWFwLmdldChnbG9iU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7Z2xvYlN0cmluZy5yZXBsYWNlKC9cXCovZywgJy4qJyl9JGApO1xuICAgICAgICAgICAgcmVnZXhNYXAuc2V0KGdsb2JTdHJpbmcsIHJlZ2V4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh0YXJnZXRTdHJpbmcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdsb2JTdHJpbmcgPT09IHRhcmdldFN0cmluZztcbiAgICB9XG59XG4vKipcbiAqIEV2ZW50IENsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBFdmVudGVkIGV4dGVuZHMgRGVzdHJveWFibGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogbWFwIG9mIGxpc3RlbmVycyBrZXllZCBieSBldmVudCB0eXBlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxpc3RlbmVyc01hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgZW1pdChldmVudCkge1xuICAgICAgICB0aGlzLmxpc3RlbmVyc01hcC5mb3JFYWNoKChtZXRob2RzLCB0eXBlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNHbG9iTWF0Y2godHlwZSwgZXZlbnQudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBbLi4ubWV0aG9kc10uZm9yRWFjaCgobWV0aG9kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZC5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3RlbmVyKSkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlcyA9IGxpc3RlbmVyLm1hcCgobGlzdGVuZXIpID0+IHRoaXMuX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlKSA9PiBoYW5kbGUuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XG4gICAgfVxuICAgIF9hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnNNYXAuc2V0KHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNNYXAuZ2V0KHR5cGUpIHx8IFtdO1xuICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UobGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBFdmVudGVkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXZlbnRlZC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRXZlbnRlZC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL0V2ZW50ZWQubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4uL3NoaW0vb2JqZWN0JztcbmV4cG9ydCB7IGFzc2lnbiB9IGZyb20gJy4uL3NoaW0vb2JqZWN0JztcbmNvbnN0IHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuLyoqXG4gKiBUeXBlIGd1YXJkIHRoYXQgZW5zdXJlcyB0aGF0IHRoZSB2YWx1ZSBjYW4gYmUgY29lcmNlZCB0byBPYmplY3RcbiAqIHRvIHdlZWQgb3V0IGhvc3Qgb2JqZWN0cyB0aGF0IGRvIG5vdCBkZXJpdmUgZnJvbSBPYmplY3QuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgaWYgd2Ugd2FudCB0byBkZWVwIGNvcHkgYW4gb2JqZWN0IG9yIG5vdC5cbiAqIE5vdGU6IEluIEVTNiBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgYW4gb2JqZWN0J3MgU3ltYm9sLnRvU3RyaW5nVGFnIHByb3BlcnR5LCB3aGljaCB3aWxsXG4gKiBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGB0b1N0cmluZ2AuIFRoaXMgaXMgYSByYXJlIGVkZ2UgY2FzZSB0aGF0IGlzIGRpZmZpY3VsdCB0byBoYW5kbGUsXG4gKiBzbyBpdCBpcyBub3QgaGFuZGxlZCBoZXJlLlxuICogQHBhcmFtICB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm4gICAgICAgSWYgdGhlIHZhbHVlIGlzIGNvZXJjaWJsZSBpbnRvIGFuIE9iamVjdFxuICovXG5mdW5jdGlvbiBzaG91bGREZWVwQ29weU9iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cbmZ1bmN0aW9uIGNvcHlBcnJheShhcnJheSwgaW5oZXJpdGVkKSB7XG4gICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcHlBcnJheShpdGVtLCBpbmhlcml0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhc2hvdWxkRGVlcENvcHlPYmplY3QoaXRlbSlcbiAgICAgICAgICAgID8gaXRlbVxuICAgICAgICAgICAgOiBfbWl4aW4oe1xuICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgICAgICAgICAgaW5oZXJpdGVkOiBpbmhlcml0ZWQsXG4gICAgICAgICAgICAgICAgc291cmNlczogW2l0ZW1dLFxuICAgICAgICAgICAgICAgIHRhcmdldDoge31cbiAgICAgICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gX21peGluKGt3QXJncykge1xuICAgIGNvbnN0IGRlZXAgPSBrd0FyZ3MuZGVlcDtcbiAgICBjb25zdCBpbmhlcml0ZWQgPSBrd0FyZ3MuaW5oZXJpdGVkO1xuICAgIGNvbnN0IHRhcmdldCA9IGt3QXJncy50YXJnZXQ7XG4gICAgY29uc3QgY29waWVkID0ga3dBcmdzLmNvcGllZCB8fCBbXTtcbiAgICBjb25zdCBjb3BpZWRDbG9uZSA9IFsuLi5jb3BpZWRdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga3dBcmdzLnNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0ga3dBcmdzLnNvdXJjZXNbaV07XG4gICAgICAgIGlmIChzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoY29waWVkQ2xvbmUuaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGVlcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY29weUFycmF5KHZhbHVlLCBpbmhlcml0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZERlZXBDb3B5T2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5XSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZC5wdXNoKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9taXhpbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0ZWQ6IGluaGVyaXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzOiBbdmFsdWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgLi4ubWl4aW5zKSB7XG4gICAgaWYgKCFtaXhpbnMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsYW5nLmNyZWF0ZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWl4aW4gb2JqZWN0LicpO1xuICAgIH1cbiAgICBjb25zdCBhcmdzID0gbWl4aW5zLnNsaWNlKCk7XG4gICAgYXJncy51bnNoaWZ0KE9iamVjdC5jcmVhdGUocHJvdG90eXBlKSk7XG4gICAgcmV0dXJuIGFzc2lnbi5hcHBseShudWxsLCBhcmdzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQXNzaWduKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgIHJldHVybiBfbWl4aW4oe1xuICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICBpbmhlcml0ZWQ6IGZhbHNlLFxuICAgICAgICBzb3VyY2VzOiBzb3VyY2VzLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNaXhpbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICByZXR1cm4gX21peGluKHtcbiAgICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgICAgaW5oZXJpdGVkOiB0cnVlLFxuICAgICAgICBzb3VyY2VzOiBzb3VyY2VzLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB1c2luZyB0aGUgcHJvdmlkZWQgc291cmNlJ3MgcHJvdG90eXBlIGFzIHRoZSBwcm90b3R5cGUgZm9yIHRoZSBuZXcgb2JqZWN0LCBhbmQgdGhlblxuICogZGVlcCBjb3BpZXMgdGhlIHByb3ZpZGVkIHNvdXJjZSdzIHZhbHVlcyBpbnRvIHRoZSBuZXcgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIG9iamVjdCB0byBkdXBsaWNhdGVcbiAqIEByZXR1cm4gVGhlIG5ldyBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGR1cGxpY2F0ZShzb3VyY2UpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpKTtcbiAgICByZXR1cm4gZGVlcE1peGluKHRhcmdldCwgc291cmNlKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBhIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSBiIFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWU7IGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZGVudGljYWwoYSwgYikge1xuICAgIHJldHVybiAoYSA9PT0gYiB8fFxuICAgICAgICAvKiBib3RoIHZhbHVlcyBhcmUgTmFOICovXG4gICAgICAgIChhICE9PSBhICYmIGIgIT09IGIpKTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYmluZHMgYSBtZXRob2QgdG8gdGhlIHNwZWNpZmllZCBvYmplY3QgYXQgcnVudGltZS4gVGhpcyBpcyBzaW1pbGFyIHRvXG4gKiBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgLCBidXQgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIGl0IHRha2VzIHRoZSBuYW1lIG9mIGEgbWV0aG9kIG9uIGFuIG9iamVjdC5cbiAqIEFzIGEgcmVzdWx0LCB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgYGxhdGVCaW5kYCB3aWxsIGFsd2F5cyBjYWxsIHRoZSBmdW5jdGlvbiBjdXJyZW50bHkgYXNzaWduZWQgdG9cbiAqIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgb24gdGhlIG9iamVjdCBhcyBvZiB0aGUgbW9tZW50IHRoZSBmdW5jdGlvbiBpdCByZXR1cm5zIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2UgVGhlIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gbWV0aG9kIFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgb24gdGhlIGNvbnRleHQgb2JqZWN0IHRvIGJpbmQgdG8gaXRzZWxmXG4gKiBAcGFyYW0gc3VwcGxpZWRBcmdzIEFuIG9wdGlvbmFsIGFycmF5IG9mIHZhbHVlcyB0byBwcmVwZW5kIHRvIHRoZSBgaW5zdGFuY2VbbWV0aG9kXWAgYXJndW1lbnRzIGxpc3RcbiAqIEByZXR1cm4gVGhlIGJvdW5kIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXRlQmluZChpbnN0YW5jZSwgbWV0aG9kLCAuLi5zdXBwbGllZEFyZ3MpIHtcbiAgICByZXR1cm4gc3VwcGxpZWRBcmdzLmxlbmd0aFxuICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID8gc3VwcGxpZWRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpIDogc3VwcGxpZWRBcmdzO1xuICAgICAgICAgICAgLy8gVFM3MDE3XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VbbWV0aG9kXS5hcHBseShpbnN0YW5jZSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBUUzcwMTdcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZVttZXRob2RdLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1peGluKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgIHJldHVybiBfbWl4aW4oe1xuICAgICAgICBkZWVwOiBmYWxzZSxcbiAgICAgICAgaW5oZXJpdGVkOiB0cnVlLFxuICAgICAgICBzb3VyY2VzOiBzb3VyY2VzLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgIH0pO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggaW52b2tlcyB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzIHByZXBlbmRlZCB0byBpdHMgYXJndW1lbnQgbGlzdC5cbiAqIExpa2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCwgYnV0IGRvZXMgbm90IGFsdGVyIGV4ZWN1dGlvbiBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXRGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBib3VuZFxuICogQHBhcmFtIHN1cHBsaWVkQXJncyBBbiBvcHRpb25hbCBhcnJheSBvZiBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aGUgYHRhcmdldEZ1bmN0aW9uYCBhcmd1bWVudHMgbGlzdFxuICogQHJldHVybiBUaGUgYm91bmQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWwodGFyZ2V0RnVuY3Rpb24sIC4uLnN1cHBsaWVkQXJncykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID8gc3VwcGxpZWRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpIDogc3VwcGxpZWRBcmdzO1xuICAgICAgICByZXR1cm4gdGFyZ2V0RnVuY3Rpb24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbn1cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhIGRlc3Ryb3kgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBjYWxscyB0aGUgcGFzc2VkLWluIGRlc3RydWN0b3IuXG4gKiBUaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgXCJyZW1vdmVcIiAvIFwiZGVzdHJveVwiIGhhbmRsZXJzIGZvclxuICogZXZlbnQgbGlzdGVuZXJzLCB0aW1lcnMsIGV0Yy5cbiAqXG4gKiBAcGFyYW0gZGVzdHJ1Y3RvciBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgaGFuZGxlJ3MgYGRlc3Ryb3lgIG1ldGhvZCBpcyBpbnZva2VkXG4gKiBAcmV0dXJuIFRoZSBoYW5kbGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIYW5kbGUoZGVzdHJ1Y3Rvcikge1xuICAgIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbi8qKlxuICogUmV0dXJucyBhIHNpbmdsZSBoYW5kbGUgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXN0cm95IG11bHRpcGxlIGhhbmRsZXMgc2ltdWx0YW5lb3VzbHkuXG4gKlxuICogQHBhcmFtIGhhbmRsZXMgQW4gYXJyYXkgb2YgaGFuZGxlcyB3aXRoIGBkZXN0cm95YCBtZXRob2RzXG4gKiBAcmV0dXJuIFRoZSBoYW5kbGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21wb3NpdGVIYW5kbGUoLi4uaGFuZGxlcykge1xuICAgIHJldHVybiBjcmVhdGVIYW5kbGUoZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhbmRsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGhhbmRsZXNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYW5nLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9sYW5nLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvbGFuZy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiZnVuY3Rpb24gaXNGZWF0dXJlVGVzdFRoZW5hYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLnRoZW47XG59XG4vKipcbiAqIEEgY2FjaGUgb2YgcmVzdWx0cyBvZiBmZWF0dXJlIHRlc3RzXG4gKi9cbmV4cG9ydCBjb25zdCB0ZXN0Q2FjaGUgPSB7fTtcbi8qKlxuICogQSBjYWNoZSBvZiB0aGUgdW4tcmVzb2x2ZWQgZmVhdHVyZSB0ZXN0c1xuICovXG5leHBvcnQgY29uc3QgdGVzdEZ1bmN0aW9ucyA9IHt9O1xuLyoqXG4gKiBBIGNhY2hlIG9mIHVucmVzb2x2ZWQgdGhlbmFibGVzIChwcm9iYWJseSBwcm9taXNlcylcbiAqIEB0eXBlIHt7fX1cbiAqL1xuY29uc3QgdGVzdFRoZW5hYmxlcyA9IHt9O1xuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIHNjb3BlIChgd2luZG93YCBpbiBhIGJyb3dzZXIsIGBnbG9iYWxgIGluIE5vZGVKUylcbiAqL1xuY29uc3QgZ2xvYmFsU2NvcGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIEJyb3dzZXJzXG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIE5vZGVcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIFdlYiB3b3JrZXJzXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB7fTtcbn0pKCk7XG4vKiBHcmFiIHRoZSBzdGF0aWNGZWF0dXJlcyBpZiB0aGVyZSBhcmUgYXZhaWxhYmxlICovXG5jb25zdCB7IHN0YXRpY0ZlYXR1cmVzIH0gPSBnbG9iYWxTY29wZS5Eb2pvSGFzRW52aXJvbm1lbnQgfHwge307XG4vKiBDbGVhbmluZyB1cCB0aGUgRG9qb0hhc0Vudmlvcm5tZW50ICovXG5pZiAoJ0Rvam9IYXNFbnZpcm9ubWVudCcgaW4gZ2xvYmFsU2NvcGUpIHtcbiAgICBkZWxldGUgZ2xvYmFsU2NvcGUuRG9qb0hhc0Vudmlyb25tZW50O1xufVxuLyoqXG4gKiBDdXN0b20gdHlwZSBndWFyZCB0byBuYXJyb3cgdGhlIGBzdGF0aWNGZWF0dXJlc2AgdG8gZWl0aGVyIGEgbWFwIG9yIGEgZnVuY3Rpb24gdGhhdFxuICogcmV0dXJucyBhIG1hcC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGd1YXJkIGZvclxuICovXG5mdW5jdGlvbiBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG4vKipcbiAqIFRoZSBjYWNoZSBvZiBhc3NlcnRlZCBmZWF0dXJlcyB0aGF0IHdlcmUgYXZhaWxhYmxlIGluIHRoZSBnbG9iYWwgc2NvcGUgd2hlbiB0aGVcbiAqIG1vZHVsZSBsb2FkZWRcbiAqL1xuY29uc3Qgc3RhdGljQ2FjaGUgPSBzdGF0aWNGZWF0dXJlc1xuICAgID8gaXNTdGF0aWNGZWF0dXJlRnVuY3Rpb24oc3RhdGljRmVhdHVyZXMpID8gc3RhdGljRmVhdHVyZXMuYXBwbHkoZ2xvYmFsU2NvcGUpIDogc3RhdGljRmVhdHVyZXNcbiAgICA6IHt9OyAvKiBQcm92aWRpbmcgYW4gZW1wdHkgY2FjaGUsIGlmIG5vbmUgd2FzIGluIHRoZSBlbnZpcm9ubWVudFxuXG4vKipcbiogQU1EIHBsdWdpbiBmdW5jdGlvbi5cbipcbiogQ29uZGl0aW9uYWwgbG9hZHMgbW9kdWxlcyBiYXNlZCBvbiBhIGhhcyBmZWF0dXJlIHRlc3QgdmFsdWUuXG4qXG4qIEBwYXJhbSByZXNvdXJjZUlkIEdpdmVzIHRoZSByZXNvbHZlZCBtb2R1bGUgaWQgdG8gbG9hZC5cbiogQHBhcmFtIHJlcXVpcmUgVGhlIGxvYWRlciByZXF1aXJlIGZ1bmN0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgbW9kdWxlIHRoYXQgY29udGFpbmVkIHRoZSBwbHVnaW4gcmVzb3VyY2UgaW4gaXRzXG4qICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgbGlzdC5cbiogQHBhcmFtIGxvYWQgQ2FsbGJhY2sgdG8gbG9hZGVyIHRoYXQgY29uc3VtZXMgcmVzdWx0IG9mIHBsdWdpbiBkZW1hbmQuXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWQocmVzb3VyY2VJZCwgcmVxdWlyZSwgbG9hZCwgY29uZmlnKSB7XG4gICAgcmVzb3VyY2VJZCA/IHJlcXVpcmUoW3Jlc291cmNlSWRdLCBsb2FkKSA6IGxvYWQoKTtcbn1cbi8qKlxuICogQU1EIHBsdWdpbiBmdW5jdGlvbi5cbiAqXG4gKiBSZXNvbHZlcyByZXNvdXJjZUlkIGludG8gYSBtb2R1bGUgaWQgYmFzZWQgb24gcG9zc2libHktbmVzdGVkIHRlbmFyeSBleHByZXNzaW9uIHRoYXQgYnJhbmNoZXMgb24gaGFzIGZlYXR1cmUgdGVzdFxuICogdmFsdWUocykuXG4gKlxuICogQHBhcmFtIHJlc291cmNlSWQgVGhlIGlkIG9mIHRoZSBtb2R1bGVcbiAqIEBwYXJhbSBub3JtYWxpemUgUmVzb2x2ZXMgYSByZWxhdGl2ZSBtb2R1bGUgaWQgaW50byBhbiBhYnNvbHV0ZSBtb2R1bGUgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShyZXNvdXJjZUlkLCBub3JtYWxpemUpIHtcbiAgICBjb25zdCB0b2tlbnMgPSByZXNvdXJjZUlkLm1hdGNoKC9bXFw/Ol18W146XFw/XSovZykgfHwgW107XG4gICAgbGV0IGkgPSAwO1xuICAgIGZ1bmN0aW9uIGdldChza2lwKSB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSB0b2tlbnNbaSsrXTtcbiAgICAgICAgaWYgKHRlcm0gPT09ICc6Jykge1xuICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nIG1vZHVsZSBuYW1lLCByZXNvbHZlcyB0byBudWxsXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBvc3RmaXhlZCB3aXRoIGEgPyBtZWFucyBpdCBpcyBhIGZlYXR1cmUgdG8gYnJhbmNoIG9uLCB0aGUgdGVybSBpcyB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxuICAgICAgICAgICAgaWYgKHRva2Vuc1tpKytdID09PSAnPycpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNraXAgJiYgaGFzKHRlcm0pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoZWQgdGhlIGZlYXR1cmUsIGdldCB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBkaWQgbm90IG1hdGNoLCBnZXQgdGhlIHNlY29uZCB2YWx1ZSwgcGFzc2luZyBvdmVyIHRoZSBmaXJzdFxuICAgICAgICAgICAgICAgICAgICBnZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQoc2tpcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYSBtb2R1bGVcbiAgICAgICAgICAgIHJldHVybiB0ZXJtO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlkID0gZ2V0KCk7XG4gICAgcmV0dXJuIGlkICYmIG5vcm1hbGl6ZShpZCk7XG59XG4vKipcbiAqIENoZWNrIGlmIGEgZmVhdHVyZSBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWRcbiAqXG4gKiBAcGFyYW0gZmVhdHVyZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhpc3RzKGZlYXR1cmUpIHtcbiAgICBjb25zdCBub3JtYWxpemVkRmVhdHVyZSA9IGZlYXR1cmUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gQm9vbGVhbihub3JtYWxpemVkRmVhdHVyZSBpbiBzdGF0aWNDYWNoZSB8fCBub3JtYWxpemVkRmVhdHVyZSBpbiB0ZXN0Q2FjaGUgfHwgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0pO1xufVxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyB0ZXN0IGZvciBhIG5hbWVkIGZlYXR1cmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGhhcy5hZGQoJ2RvbS1hZGRldmVudGxpc3RlbmVyJywgISFkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogaGFzLmFkZCgndG91Y2gtZXZlbnRzJywgZnVuY3Rpb24gKCkge1xuICogICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50XG4gKiB9KTtcbiAqXG4gKiBAcGFyYW0gZmVhdHVyZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxuICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSByZXBvcnRlZCBvZiB0aGUgZmVhdHVyZSwgb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgb25jZSBvbiBmaXJzdCB0ZXN0XG4gKiBAcGFyYW0gb3ZlcndyaXRlIGlmIGFuIGV4aXN0aW5nIHZhbHVlIHNob3VsZCBiZSBvdmVyd3JpdHRlbi4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGQoZmVhdHVyZSwgdmFsdWUsIG92ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGV4aXN0cyhub3JtYWxpemVkRmVhdHVyZSkgJiYgIW92ZXJ3cml0ZSAmJiAhKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBGZWF0dXJlIFwiJHtmZWF0dXJlfVwiIGV4aXN0cyBhbmQgb3ZlcndyaXRlIG5vdCB0cnVlLmApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdID0gdmFsdWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRmVhdHVyZVRlc3RUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgdGVzdFRoZW5hYmxlc1tmZWF0dXJlXSA9IHZhbHVlLnRoZW4oKHJlc29sdmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRlc3RDYWNoZVtmZWF0dXJlXSA9IHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICBkZWxldGUgdGVzdFRoZW5hYmxlc1tmZWF0dXJlXTtcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIHRlc3RUaGVuYWJsZXNbZmVhdHVyZV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXSA9IHZhbHVlO1xuICAgICAgICBkZWxldGUgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV07XG4gICAgfVxufVxuLyoqXG4gKiBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBuYW1lZCBmZWF0dXJlLlxuICpcbiAqIEBwYXJhbSBmZWF0dXJlIFRoZSBuYW1lIChpZiBhIHN0cmluZykgb3IgaWRlbnRpZmllciAoaWYgYW4gaW50ZWdlcikgb2YgdGhlIGZlYXR1cmUgdG8gdGVzdC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzKGZlYXR1cmUpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChub3JtYWxpemVkRmVhdHVyZSBpbiBzdGF0aWNDYWNoZSkge1xuICAgICAgICByZXN1bHQgPSBzdGF0aWNDYWNoZVtub3JtYWxpemVkRmVhdHVyZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdKSB7XG4gICAgICAgIHJlc3VsdCA9IHRlc3RDYWNoZVtub3JtYWxpemVkRmVhdHVyZV0gPSB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXS5jYWxsKG51bGwpO1xuICAgICAgICBkZWxldGUgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHRlc3RDYWNoZSkge1xuICAgICAgICByZXN1bHQgPSB0ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdO1xuICAgIH1cbiAgICBlbHNlIGlmIChmZWF0dXJlIGluIHRlc3RUaGVuYWJsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQXR0ZW1wdCB0byBkZXRlY3QgdW5yZWdpc3RlcmVkIGhhcyBmZWF0dXJlIFwiJHtmZWF0dXJlfVwiYCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKlxuICogT3V0IG9mIHRoZSBib3ggZmVhdHVyZSB0ZXN0c1xuICovXG4vKiBFbnZpcm9ubWVudHMgKi9cbi8qIFVzZWQgYXMgYSB2YWx1ZSB0byBwcm92aWRlIGEgZGVidWcgb25seSBjb2RlIHBhdGggKi9cbmFkZCgnZGVidWcnLCB0cnVlKTtcbi8qIERldGVjdHMgaWYgdGhlIGVudmlyb25tZW50IGlzIFwiYnJvd3NlciBsaWtlXCIgKi9cbmFkZCgnaG9zdC1icm93c2VyJywgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnKTtcbi8qIERldGVjdHMgaWYgdGhlIGVudmlyb25tZW50IGFwcGVhcnMgdG8gYmUgTm9kZUpTICovXG5hZGQoJ2hvc3Qtbm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XG4gICAgfVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9oYXMvaGFzLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2hhcy9oYXMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGlzQXJyYXlMaWtlLCBTaGltSXRlcmF0b3IgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgaXMgYXMgb2JqZWN0SXMgfSBmcm9tICcuL29iamVjdCc7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0ICcuL1N5bWJvbCc7XG5leHBvcnQgbGV0IE1hcCA9IGdsb2JhbC5NYXA7XG5pZiAoIXRydWUpIHtcbiAgICBNYXAgPSAoX2EgPSBjbGFzcyBNYXAge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ01hcCc7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gQXJyYXkucHJvdG90eXBlLmluZGV4T2YgdXNpbmcgT2JqZWN0LmlzXG4gICAgICAgICAgICAgKiB0byBjaGVjayBmb3IgZXF1YWxpdHkuIFNlZSBodHRwOi8vbXpsLmxhLzF6dUtPMlZcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgX2luZGV4T2ZLZXkoa2V5cywga2V5KSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdElzKGtleXNbaV0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdldCBzaXplKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9rZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsZWFyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMubGVuZ3RoID0gdGhpcy5fdmFsdWVzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUoa2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVudHJpZXMoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5fa2V5cy5tYXAoKGtleSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2tleSwgdGhpcy5fdmFsdWVzW2ldXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yRWFjaChjYWxsYmFjaywgY29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSB0aGlzLl9rZXlzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX3ZhbHVlcztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHZhbHVlc1tpXSwga2V5c1tpXSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2V0KGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiB0aGlzLl92YWx1ZXNbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFzKGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSkgPiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleXMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaGltSXRlcmF0b3IodGhpcy5fa2V5cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IHRoaXMuX2tleXMubGVuZ3RoIDogaW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5c1tpbmRleF0gPSBrZXk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWVzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHRoaXMuX3ZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIF9hW1N5bWJvbC5zcGVjaWVzXSA9IF9hLFxuICAgICAgICBfYSk7XG59XG5leHBvcnQgZGVmYXVsdCBNYXA7XG52YXIgX2E7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NYXAubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL01hcC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL01hcC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBxdWV1ZU1pY3JvVGFzayB9IGZyb20gJy4vc3VwcG9ydC9xdWV1ZSc7XG5pbXBvcnQgJy4vU3ltYm9sJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5leHBvcnQgbGV0IFNoaW1Qcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG5leHBvcnQgY29uc3QgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbic7XG59O1xuaWYgKCF0cnVlKSB7XG4gICAgZ2xvYmFsLlByb21pc2UgPSBTaGltUHJvbWlzZSA9IChfYSA9IGNsYXNzIFByb21pc2Uge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFByb21pc2UuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIGV4ZWN1dG9yXG4gICAgICAgICAgICAgKiBUaGUgZXhlY3V0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIFByb21pc2UgaXMgaW5zdGFudGlhdGVkLiBJdCBpcyByZXNwb25zaWJsZSBmb3JcbiAgICAgICAgICAgICAqIHN0YXJ0aW5nIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoZW4gaXQgaXMgaW52b2tlZC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUaGUgZXhlY3V0b3IgbXVzdCBjYWxsIGVpdGhlciB0aGUgcGFzc2VkIGByZXNvbHZlYCBmdW5jdGlvbiB3aGVuIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWRcbiAgICAgICAgICAgICAqIHN1Y2Nlc3NmdWxseSwgb3IgdGhlIGByZWplY3RgIGZ1bmN0aW9uIHdoZW4gdGhlIG9wZXJhdGlvbiBmYWlscy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEgLyogUGVuZGluZyAqLztcbiAgICAgICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnUHJvbWlzZSc7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgdHJ1ZSwgdGhlIHJlc29sdXRpb24gb2YgdGhpcyBwcm9taXNlIGlzIGNoYWluZWQgKFwibG9ja2VkIGluXCIpIHRvIGFub3RoZXIgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBsZXQgaXNDaGFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogV2hldGhlciBvciBub3QgdGhpcyBwcm9taXNlIGlzIGluIGEgcmVzb2x2ZWQgc3RhdGUuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZXNvbHZlZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgIT09IDEgLyogUGVuZGluZyAqLyB8fCBpc0NoYWluZWQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBDYWxsYmFja3MgdGhhdCBzaG91bGQgYmUgaW52b2tlZCBvbmNlIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbGV0IGNhbGxiYWNrcyA9IFtdO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIEluaXRpYWxseSBwdXNoZXMgY2FsbGJhY2tzIG9udG8gYSBxdWV1ZSBmb3IgZXhlY3V0aW9uIG9uY2UgdGhpcyBwcm9taXNlIHNldHRsZXMuIEFmdGVyIHRoZSBwcm9taXNlIHNldHRsZXMsXG4gICAgICAgICAgICAgICAgICogZW5xdWV1ZXMgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgZXZlbnQgbG9vcCB0dXJuLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGxldCB3aGVuRmluaXNoZWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBTZXR0bGVzIHRoaXMgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSBuZXdTdGF0ZSBUaGUgcmVzb2x2ZWQgc3RhdGUgZm9yIHRoaXMgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge1R8YW55fSB2YWx1ZSBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBzZXR0bGUgPSAobmV3U3RhdGUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgcHJvbWlzZSBjYW4gb25seSBiZSBzZXR0bGVkIG9uY2UuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSAxIC8qIFBlbmRpbmcgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB3aGVuRmluaXNoZWQgPSBxdWV1ZU1pY3JvVGFzaztcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBlbnF1ZXVlIGEgY2FsbGJhY2sgcnVubmVyIGlmIHRoZXJlIGFyZSBjYWxsYmFja3Mgc28gdGhhdCBpbml0aWFsbHkgZnVsZmlsbGVkIFByb21pc2VzIGRvbid0IGhhdmUgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCBhbiBleHRyYSB0dXJuLlxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzICYmIGNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvVGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY291bnQgPSBjYWxsYmFja3MubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFJlc29sdmVzIHRoaXMgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSBuZXdTdGF0ZSBUaGUgcmVzb2x2ZWQgc3RhdGUgZm9yIHRoaXMgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge1R8YW55fSB2YWx1ZSBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgcHJvbWlzZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlID0gKG5ld1N0YXRlLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXNvbHZlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS50aGVuKHNldHRsZS5iaW5kKG51bGwsIDAgLyogRnVsZmlsbGVkICovKSwgc2V0dGxlLmJpbmQobnVsbCwgMiAvKiBSZWplY3RlZCAqLykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGFpbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRsZShuZXdTdGF0ZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnRoZW4gPSAob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW5GaW5pc2hlZCBpbml0aWFsbHkgcXVldWVzIHVwIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIGFmdGVyIHRoZSBwcm9taXNlIGhhcyBzZXR0bGVkLiBPbmNlIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvbWlzZSBoYXMgc2V0dGxlZCwgd2hlbkZpbmlzaGVkIHdpbGwgc2NoZWR1bGUgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgdHVybiB0aHJvdWdoIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZlbnQgbG9vcC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW5GaW5pc2hlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLnN0YXRlID09PSAyIC8qIFJlamVjdGVkICovID8gb25SZWplY3RlZCA6IG9uRnVsZmlsbGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2FsbGJhY2sodGhpcy5yZXNvbHZlZFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IDIgLyogUmVqZWN0ZWQgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHRoaXMucmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0b3IocmVzb2x2ZS5iaW5kKG51bGwsIDAgLyogRnVsZmlsbGVkICovKSwgcmVzb2x2ZS5iaW5kKG51bGwsIDIgLyogUmVqZWN0ZWQgKi8pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldHRsZSgyIC8qIFJlamVjdGVkICovLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGljIGFsbChpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29tcGxldGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG90YWwgPSAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcG9wdWxhdGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGwoaW5kZXgsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICArK2NvbXBsZXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluaXNoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcHVsYXRpbmcgfHwgY29tcGxldGUgPCB0b3RhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzSXRlbShpbmRleCwgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKyt0b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYW4gaXRlbSBQcm9taXNlIHJlamVjdHMsIHRoaXMgUHJvbWlzZSBpcyBpbW1lZGlhdGVseSByZWplY3RlZCB3aXRoIHRoZSBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvbWlzZSdzIHJlamVjdGlvbiBlcnJvci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRoZW4oZnVsZmlsbC5iaW5kKG51bGwsIGluZGV4KSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShpdGVtKS50aGVuKGZ1bGZpbGwuYmluZChudWxsLCBpbmRleCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0l0ZW0oaSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBvcHVsYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0aWMgcmFjZShpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBQcm9taXNlIGl0ZW0gcmVqZWN0cywgdGhpcyBQcm9taXNlIGlzIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggdGhlIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9taXNlJ3MgcmVqZWN0aW9uIGVycm9yLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4ocmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRpYyByZWplY3QocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoKG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIF9hW1N5bWJvbC5zcGVjaWVzXSA9IFNoaW1Qcm9taXNlLFxuICAgICAgICBfYSk7XG59XG5leHBvcnQgZGVmYXVsdCBTaGltUHJvbWlzZTtcbnZhciBfYTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVByb21pc2UubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL1Byb21pc2UubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9Qcm9taXNlLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBnZXRWYWx1ZURlc2NyaXB0b3IgfSBmcm9tICcuL3N1cHBvcnQvdXRpbCc7XG5leHBvcnQgbGV0IFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG5pZiAoIXRydWUpIHtcbiAgICAvKipcbiAgICAgKiBUaHJvd3MgaWYgdGhlIHZhbHVlIGlzIG5vdCBhIHN5bWJvbCwgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgU2hpbVxuICAgICAqIEBwYXJhbSAge2FueX0gICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXG4gICAgICogQHJldHVybiB7c3ltYm9sfSAgICAgICBSZXR1cm5zIHRoZSBzeW1ib2wgb3IgdGhyb3dzXG4gICAgICovXG4gICAgY29uc3QgdmFsaWRhdGVTeW1ib2wgPSBmdW5jdGlvbiB2YWxpZGF0ZVN5bWJvbCh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcih2YWx1ZSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgY29uc3QgZGVmaW5lUHJvcGVydGllcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuICAgIGNvbnN0IGNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG4gICAgY29uc3Qgb2JqUHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgICBjb25zdCBnbG9iYWxTeW1ib2xzID0ge307XG4gICAgY29uc3QgZ2V0U3ltYm9sTmFtZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBjcmVhdGUobnVsbCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGVzYykge1xuICAgICAgICAgICAgbGV0IHBvc3RmaXggPSAwO1xuICAgICAgICAgICAgbGV0IG5hbWU7XG4gICAgICAgICAgICB3aGlsZSAoY3JlYXRlZFtTdHJpbmcoZGVzYykgKyAocG9zdGZpeCB8fCAnJyldKSB7XG4gICAgICAgICAgICAgICAgKytwb3N0Zml4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVzYyArPSBTdHJpbmcocG9zdGZpeCB8fCAnJyk7XG4gICAgICAgICAgICBjcmVhdGVkW2Rlc2NdID0gdHJ1ZTtcbiAgICAgICAgICAgIG5hbWUgPSAnQEAnICsgZGVzYztcbiAgICAgICAgICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkgZ3VhcmQgdW50aWwgdGhlIGR1cGxpY2F0ZSBleGVjdXRpb24gd2hlbiB0ZXN0aW5nIGNhbiBiZVxuICAgICAgICAgICAgLy8gcGlubmVkIGRvd24uXG4gICAgICAgICAgICBpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqUHJvdG90eXBlLCBuYW1lKSkge1xuICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KG9ialByb3RvdHlwZSwgbmFtZSwge1xuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICB9O1xuICAgIH0pKCk7XG4gICAgY29uc3QgSW50ZXJuYWxTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woZGVzY3JpcHRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBJbnRlcm5hbFN5bWJvbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3ltYm9sKGRlc2NyaXB0aW9uKTtcbiAgICB9O1xuICAgIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woZGVzY3JpcHRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1R5cGVFcnJvcjogU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3ltID0gT2JqZWN0LmNyZWF0ZShJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUpO1xuICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyhkZXNjcmlwdGlvbik7XG4gICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0aWVzKHN5bSwge1xuICAgICAgICAgICAgX19kZXNjcmlwdGlvbl9fOiBnZXRWYWx1ZURlc2NyaXB0b3IoZGVzY3JpcHRpb24pLFxuICAgICAgICAgICAgX19uYW1lX186IGdldFZhbHVlRGVzY3JpcHRvcihnZXRTeW1ib2xOYW1lKGRlc2NyaXB0aW9uKSlcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKiBEZWNvcmF0ZSB0aGUgU3ltYm9sIGZ1bmN0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlIHByb3BlcnRpZXMgKi9cbiAgICBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsICdmb3InLCBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoZ2xvYmFsU3ltYm9sc1trZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsU3ltYm9sc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoZ2xvYmFsU3ltYm9sc1trZXldID0gU3ltYm9sKFN0cmluZyhrZXkpKSk7XG4gICAgfSkpO1xuICAgIGRlZmluZVByb3BlcnRpZXMoU3ltYm9sLCB7XG4gICAgICAgIGtleUZvcjogZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgICAgICAgIGxldCBrZXk7XG4gICAgICAgICAgICB2YWxpZGF0ZVN5bWJvbChzeW0pO1xuICAgICAgICAgICAgZm9yIChrZXkgaW4gZ2xvYmFsU3ltYm9scykge1xuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxTeW1ib2xzW2tleV0gPT09IHN5bSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGhhc0luc3RhbmNlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaGFzSW5zdGFuY2UnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgaXNDb25jYXRTcHJlYWRhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaXNDb25jYXRTcHJlYWRhYmxlJyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIGl0ZXJhdG9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaXRlcmF0b3InKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgbWF0Y2g6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdtYXRjaCcpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBvYnNlcnZhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignb2JzZXJ2YWJsZScpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICByZXBsYWNlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigncmVwbGFjZScpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICBzZWFyY2g6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdzZWFyY2gnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgc3BlY2llczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwZWNpZXMnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgc3BsaXQ6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdzcGxpdCcpLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgICB0b1ByaW1pdGl2ZTogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3RvUHJpbWl0aXZlJyksIGZhbHNlLCBmYWxzZSksXG4gICAgICAgIHRvU3RyaW5nVGFnOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigndG9TdHJpbmdUYWcnKSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgICAgdW5zY29wYWJsZXM6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCd1bnNjb3BhYmxlcycpLCBmYWxzZSwgZmFsc2UpXG4gICAgfSk7XG4gICAgLyogRGVjb3JhdGUgdGhlIEludGVybmFsU3ltYm9sIG9iamVjdCAqL1xuICAgIGRlZmluZVByb3BlcnRpZXMoSW50ZXJuYWxTeW1ib2wucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sKSxcbiAgICAgICAgdG9TdHJpbmc6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX25hbWVfXztcbiAgICAgICAgfSwgZmFsc2UsIGZhbHNlKVxuICAgIH0pO1xuICAgIC8qIERlY29yYXRlIHRoZSBTeW1ib2wucHJvdG90eXBlICovXG4gICAgZGVmaW5lUHJvcGVydGllcyhTeW1ib2wucHJvdG90eXBlLCB7XG4gICAgICAgIHRvU3RyaW5nOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdTeW1ib2wgKCcgKyB2YWxpZGF0ZVN5bWJvbCh0aGlzKS5fX2Rlc2NyaXB0aW9uX18gKyAnKSc7XG4gICAgICAgIH0pLFxuICAgICAgICB2YWx1ZU9mOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlU3ltYm9sKHRoaXMpO1xuICAgICAgICB9KVxuICAgIH0pO1xuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1ByaW1pdGl2ZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlU3ltYm9sKHRoaXMpO1xuICAgIH0pKTtcbiAgICBkZWZpbmVQcm9wZXJ0eShTeW1ib2wucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIGdldFZhbHVlRGVzY3JpcHRvcignU3ltYm9sJywgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XG4gICAgZGVmaW5lUHJvcGVydHkoSW50ZXJuYWxTeW1ib2wucHJvdG90eXBlLCBTeW1ib2wudG9QcmltaXRpdmUsIGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wucHJvdG90eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV0sIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpO1xuICAgIGRlZmluZVByb3BlcnR5KEludGVybmFsU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcbn1cbi8qKlxuICogQSBjdXN0b20gZ3VhcmQgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGlmIGFuIG9iamVjdCBpcyBhIHN5bWJvbCBvciBub3RcbiAqIEBwYXJhbSAge2FueX0gICAgICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyBhIHN5bWJvbCBvciBub3RcbiAqIEByZXR1cm4ge2lzIHN5bWJvbH0gICAgICAgUmV0dXJucyB0cnVlIGlmIGEgc3ltYm9sIG9yIG5vdCAoYW5kIG5hcnJvd3MgdGhlIHR5cGUgZ3VhcmQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcgfHwgdmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpKSB8fCBmYWxzZTtcbn1cbi8qKlxuICogRmlsbCBhbnkgbWlzc2luZyB3ZWxsIGtub3duIHN5bWJvbHMgaWYgdGhlIG5hdGl2ZSBTeW1ib2wgaXMgbWlzc2luZyB0aGVtXG4gKi9cbltcbiAgICAnaGFzSW5zdGFuY2UnLFxuICAgICdpc0NvbmNhdFNwcmVhZGFibGUnLFxuICAgICdpdGVyYXRvcicsXG4gICAgJ3NwZWNpZXMnLFxuICAgICdyZXBsYWNlJyxcbiAgICAnc2VhcmNoJyxcbiAgICAnc3BsaXQnLFxuICAgICdtYXRjaCcsXG4gICAgJ3RvUHJpbWl0aXZlJyxcbiAgICAndG9TdHJpbmdUYWcnLFxuICAgICd1bnNjb3BhYmxlcycsXG4gICAgJ29ic2VydmFibGUnXG5dLmZvckVhY2goKHdlbGxLbm93bikgPT4ge1xuICAgIGlmICghU3ltYm9sW3dlbGxLbm93bl0pIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN5bWJvbCwgd2VsbEtub3duLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcih3ZWxsS25vd24pLCBmYWxzZSwgZmFsc2UpKTtcbiAgICB9XG59KTtcbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN5bWJvbC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vU3ltYm9sLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vU3ltYm9sLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IGlzQXJyYXlMaWtlIH0gZnJvbSAnLi9pdGVyYXRvcic7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0ICcuL1N5bWJvbCc7XG5leHBvcnQgbGV0IFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbmlmICghdHJ1ZSkge1xuICAgIGNvbnN0IERFTEVURUQgPSB7fTtcbiAgICBjb25zdCBnZXRVSUQgPSBmdW5jdGlvbiBnZXRVSUQoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApO1xuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVOYW1lID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHN0YXJ0SWQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgJSAxMDAwMDAwMDApO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gZ2VuZXJhdGVOYW1lKCkge1xuICAgICAgICAgICAgcmV0dXJuICdfX3dtJyArIGdldFVJRCgpICsgKHN0YXJ0SWQrKyArICdfXycpO1xuICAgICAgICB9O1xuICAgIH0pKCk7XG4gICAgV2Vha01hcCA9IGNsYXNzIFdlYWtNYXAge1xuICAgICAgICBjb25zdHJ1Y3RvcihpdGVyYWJsZSkge1xuICAgICAgICAgICAgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ1dlYWtNYXAnO1xuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IGdlbmVyYXRlTmFtZSgpO1xuICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcyA9IFtdO1xuICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChpdGVtWzBdLCBpdGVtWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9mcm96ZW5FbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Zyb3plbkVudHJpZXNbaV0ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZShrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcbiAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkge1xuICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gREVMRVRFRDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcm96ZW5FbnRyaWVzLnNwbGljZShmcm96ZW5JbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0KGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcbiAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJvemVuRW50cmllc1tmcm96ZW5JbmRleF0udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGFzKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xuICAgICAgICAgICAgaWYgKEJvb2xlYW4oZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURUQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcbiAgICAgICAgICAgIGlmIChmcm96ZW5JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICgha2V5IHx8ICh0eXBlb2Yga2V5ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2Yga2V5ICE9PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdmFsdWUgdXNlZCBhcyB3ZWFrIG1hcCBrZXknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcbiAgICAgICAgICAgIGlmICghZW50cnkgfHwgZW50cnkua2V5ICE9PSBrZXkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHsgdmFsdWU6IGtleSB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zyb3plbkVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoa2V5LCB0aGlzLl9uYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZW50cnlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IFdlYWtNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1XZWFrTWFwLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9XZWFrTWFwLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vV2Vha01hcC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBpc0FycmF5TGlrZSwgaXNJdGVyYWJsZSB9IGZyb20gJy4vaXRlcmF0b3InO1xuaW1wb3J0IHsgTUFYX1NBRkVfSU5URUdFUiB9IGZyb20gJy4vbnVtYmVyJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgeyB3cmFwTmF0aXZlIH0gZnJvbSAnLi9zdXBwb3J0L3V0aWwnO1xuZXhwb3J0IGxldCBmcm9tO1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGFycmF5IGZyb20gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIGFyZ3VtZW50cyBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgdGhlIGFycmF5XG4gKiBAcmV0dXJuIEFuIGFycmF5IGZyb20gdGhlIGdpdmVuIGFyZ3VtZW50c1xuICovXG5leHBvcnQgbGV0IG9mO1xuLyogRVM2IEFycmF5IGluc3RhbmNlIG1ldGhvZHMgKi9cbi8qKlxuICogQ29waWVzIGRhdGEgaW50ZXJuYWxseSB3aXRoaW4gYW4gYXJyYXkgb3IgYXJyYXktbGlrZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGFycmF5LWxpa2Ugb2JqZWN0XG4gKiBAcGFyYW0gb2Zmc2V0IFRoZSBpbmRleCB0byBzdGFydCBjb3B5aW5nIHZhbHVlcyB0bzsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcbiAqIEBwYXJhbSBzdGFydCBUaGUgZmlyc3QgKGluY2x1c2l2ZSkgaW5kZXggdG8gY29weTsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcbiAqIEBwYXJhbSBlbmQgVGhlIGxhc3QgKGV4Y2x1c2l2ZSkgaW5kZXggdG8gY29weTsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcbiAqIEByZXR1cm4gVGhlIHRhcmdldFxuICovXG5leHBvcnQgbGV0IGNvcHlXaXRoaW47XG4vKipcbiAqIEZpbGxzIGVsZW1lbnRzIG9mIGFuIGFycmF5LWxpa2Ugb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgdG8gZmlsbFxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGVhY2ggZWxlbWVudCBvZiB0aGUgdGFyZ2V0IHdpdGhcbiAqIEBwYXJhbSBzdGFydCBUaGUgZmlyc3QgaW5kZXggdG8gZmlsbFxuICogQHBhcmFtIGVuZCBUaGUgKGV4Y2x1c2l2ZSkgaW5kZXggYXQgd2hpY2ggdG8gc3RvcCBmaWxsaW5nXG4gKiBAcmV0dXJuIFRoZSBmaWxsZWQgdGFyZ2V0XG4gKi9cbmV4cG9ydCBsZXQgZmlsbDtcbi8qKlxuICogRmluZHMgYW5kIHJldHVybnMgdGhlIGZpcnN0IGluc3RhbmNlIG1hdGNoaW5nIHRoZSBjYWxsYmFjayBvciB1bmRlZmluZWQgaWYgb25lIGlzIG5vdCBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IEFuIGFycmF5LWxpa2Ugb2JqZWN0XG4gKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiByZXR1cm5pbmcgaWYgdGhlIGN1cnJlbnQgdmFsdWUgbWF0Y2hlcyBhIGNyaXRlcmlhXG4gKiBAcGFyYW0gdGhpc0FyZyBUaGUgZXhlY3V0aW9uIGNvbnRleHQgZm9yIHRoZSBmaW5kIGZ1bmN0aW9uXG4gKiBAcmV0dXJuIFRoZSBmaXJzdCBlbGVtZW50IG1hdGNoaW5nIHRoZSBjYWxsYmFjaywgb3IgdW5kZWZpbmVkIGlmIG9uZSBkb2VzIG5vdCBleGlzdFxuICovXG5leHBvcnQgbGV0IGZpbmQ7XG4vKipcbiAqIFBlcmZvcm1zIGEgbGluZWFyIHNlYXJjaCBhbmQgcmV0dXJucyB0aGUgZmlyc3QgaW5kZXggd2hvc2UgdmFsdWUgc2F0aXNmaWVzIHRoZSBwYXNzZWQgY2FsbGJhY2ssXG4gKiBvciAtMSBpZiBubyB2YWx1ZXMgc2F0aXNmeSBpdC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IEFuIGFycmF5LWxpa2Ugb2JqZWN0XG4gKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiByZXR1cm5pbmcgdHJ1ZSBpZiB0aGUgY3VycmVudCB2YWx1ZSBzYXRpc2ZpZXMgaXRzIGNyaXRlcmlhXG4gKiBAcGFyYW0gdGhpc0FyZyBUaGUgZXhlY3V0aW9uIGNvbnRleHQgZm9yIHRoZSBmaW5kIGZ1bmN0aW9uXG4gKiBAcmV0dXJuIFRoZSBmaXJzdCBpbmRleCB3aG9zZSB2YWx1ZSBzYXRpc2ZpZXMgdGhlIHBhc3NlZCBjYWxsYmFjaywgb3IgLTEgaWYgbm8gdmFsdWVzIHNhdGlzZnkgaXRcbiAqL1xuZXhwb3J0IGxldCBmaW5kSW5kZXg7XG4vKiBFUzcgQXJyYXkgaW5zdGFuY2UgbWV0aG9kcyAqL1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gYXJyYXkgaW5jbHVkZXMgYSBnaXZlbiB2YWx1ZVxuICpcbiAqIEBwYXJhbSB0YXJnZXQgdGhlIHRhcmdldCBhcnJheS1saWtlIG9iamVjdFxuICogQHBhcmFtIHNlYXJjaEVsZW1lbnQgdGhlIGl0ZW0gdG8gc2VhcmNoIGZvclxuICogQHBhcmFtIGZyb21JbmRleCB0aGUgc3RhcnRpbmcgaW5kZXggdG8gc2VhcmNoIGZyb21cbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBhcnJheSBpbmNsdWRlcyB0aGUgZWxlbWVudCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xuZXhwb3J0IGxldCBpbmNsdWRlcztcbmlmICh0cnVlICYmIHRydWUpIHtcbiAgICBmcm9tID0gZ2xvYmFsLkFycmF5LmZyb207XG4gICAgb2YgPSBnbG9iYWwuQXJyYXkub2Y7XG4gICAgY29weVdpdGhpbiA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKTtcbiAgICBmaWxsID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmZpbGwpO1xuICAgIGZpbmQgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZmluZCk7XG4gICAgZmluZEluZGV4ID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCk7XG59XG5lbHNlIHtcbiAgICAvLyBJdCBpcyBvbmx5IG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaS9pT1MgdGhhdCBoYXZlIGEgYmFkIGZpbGwgaW1wbGVtZW50YXRpb24gYW5kIHNvIGFyZW4ndCBpbiB0aGUgd2lsZFxuICAgIC8vIFRvIG1ha2UgdGhpbmdzIGVhc2llciwgaWYgdGhlcmUgaXMgYSBiYWQgZmlsbCBpbXBsZW1lbnRhdGlvbiwgdGhlIHdob2xlIHNldCBvZiBmdW5jdGlvbnMgd2lsbCBiZSBmaWxsZWRcbiAgICAvKipcbiAgICAgKiBFbnN1cmVzIGEgbm9uLW5lZ2F0aXZlLCBub24taW5maW5pdGUsIHNhZmUgaW50ZWdlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciB0byB2YWxpZGF0ZVxuICAgICAqIEByZXR1cm4gQSBwcm9wZXIgbGVuZ3RoXG4gICAgICovXG4gICAgY29uc3QgdG9MZW5ndGggPSBmdW5jdGlvbiB0b0xlbmd0aChsZW5ndGgpIHtcbiAgICAgICAgaWYgKGlzTmFOKGxlbmd0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpO1xuICAgICAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgICAgICAgbGVuZ3RoID0gTWF0aC5mbG9vcihsZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSBhIG5vbi1uZWdhdGl2ZSwgcmVhbCwgc2FmZSBpbnRlZ2VyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChsZW5ndGgsIDApLCBNQVhfU0FGRV9JTlRFR0VSKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZyb20gRVM2IDcuMS40IFRvSW50ZWdlcigpXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBjb252ZXJ0XG4gICAgICogQHJldHVybiBBbiBpbnRlZ2VyXG4gICAgICovXG4gICAgY29uc3QgdG9JbnRlZ2VyID0gZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSAwIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHZhbHVlID4gMCA/IDEgOiAtMSkgKiBNYXRoLmZsb29yKE1hdGguYWJzKHZhbHVlKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemVzIGFuIG9mZnNldCBhZ2FpbnN0IGEgZ2l2ZW4gbGVuZ3RoLCB3cmFwcGluZyBpdCBpZiBuZWdhdGl2ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgb3JpZ2luYWwgb2Zmc2V0XG4gICAgICogQHBhcmFtIGxlbmd0aCBUaGUgdG90YWwgbGVuZ3RoIHRvIG5vcm1hbGl6ZSBhZ2FpbnN0XG4gICAgICogQHJldHVybiBJZiBuZWdhdGl2ZSwgcHJvdmlkZSBhIGRpc3RhbmNlIGZyb20gdGhlIGVuZCAobGVuZ3RoKTsgb3RoZXJ3aXNlIHByb3ZpZGUgYSBkaXN0YW5jZSBmcm9tIDBcbiAgICAgKi9cbiAgICBjb25zdCBub3JtYWxpemVPZmZzZXQgPSBmdW5jdGlvbiBub3JtYWxpemVPZmZzZXQodmFsdWUsIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPCAwID8gTWF0aC5tYXgobGVuZ3RoICsgdmFsdWUsIDApIDogTWF0aC5taW4odmFsdWUsIGxlbmd0aCk7XG4gICAgfTtcbiAgICBmcm9tID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UsIG1hcEZ1bmN0aW9uLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmIChhcnJheUxpa2UgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZnJvbTogcmVxdWlyZXMgYW4gYXJyYXktbGlrZSBvYmplY3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFwRnVuY3Rpb24gJiYgdGhpc0FyZykge1xuICAgICAgICAgICAgbWFwRnVuY3Rpb24gPSBtYXBGdW5jdGlvbi5iaW5kKHRoaXNBcmcpO1xuICAgICAgICB9XG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXG4gICAgICAgIGNvbnN0IENvbnN0cnVjdG9yID0gdGhpcztcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdG9MZW5ndGgoYXJyYXlMaWtlLmxlbmd0aCk7XG4gICAgICAgIC8vIFN1cHBvcnQgZXh0ZW5zaW9uXG4gICAgICAgIGNvbnN0IGFycmF5ID0gdHlwZW9mIENvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KG5ldyBDb25zdHJ1Y3RvcihsZW5ndGgpKSA6IG5ldyBBcnJheShsZW5ndGgpO1xuICAgICAgICBpZiAoIWlzQXJyYXlMaWtlKGFycmF5TGlrZSkgJiYgIWlzSXRlcmFibGUoYXJyYXlMaWtlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgYW5kIHRoZSBub3JtYWxpemVkIGxlbmd0aCBpcyAwLCBqdXN0IHJldHVybiBhbiBlbXB0eSBhcnJheS4gdGhpcyBwcmV2ZW50cyBhIHByb2JsZW1cbiAgICAgICAgLy8gd2l0aCB0aGUgaXRlcmF0aW9uIG9uIElFIHdoZW4gdXNpbmcgYSBOYU4gYXJyYXkgbGVuZ3RoLlxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoYXJyYXlMaWtlKSkge1xuICAgICAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlMaWtlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBtYXBGdW5jdGlvbiA/IG1hcEZ1bmN0aW9uKGFycmF5TGlrZVtpXSwgaSkgOiBhcnJheUxpa2VbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFycmF5TGlrZSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gbWFwRnVuY3Rpb24gPyBtYXBGdW5jdGlvbih2YWx1ZSwgaSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFycmF5TGlrZS5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXJyYXkubGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9O1xuICAgIG9mID0gZnVuY3Rpb24gb2YoLi4uaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGl0ZW1zKTtcbiAgICB9O1xuICAgIGNvcHlXaXRoaW4gPSBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgb2Zmc2V0LCBzdGFydCwgZW5kKSB7XG4gICAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29weVdpdGhpbjogdGFyZ2V0IG11c3QgYmUgYW4gYXJyYXktbGlrZSBvYmplY3QnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZW5ndGggPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ID0gbm9ybWFsaXplT2Zmc2V0KHRvSW50ZWdlcihvZmZzZXQpLCBsZW5ndGgpO1xuICAgICAgICBzdGFydCA9IG5vcm1hbGl6ZU9mZnNldCh0b0ludGVnZXIoc3RhcnQpLCBsZW5ndGgpO1xuICAgICAgICBlbmQgPSBub3JtYWxpemVPZmZzZXQoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXIoZW5kKSwgbGVuZ3RoKTtcbiAgICAgICAgbGV0IGNvdW50ID0gTWF0aC5taW4oZW5kIC0gc3RhcnQsIGxlbmd0aCAtIG9mZnNldCk7XG4gICAgICAgIGxldCBkaXJlY3Rpb24gPSAxO1xuICAgICAgICBpZiAob2Zmc2V0ID4gc3RhcnQgJiYgb2Zmc2V0IDwgc3RhcnQgKyBjb3VudCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gLTE7XG4gICAgICAgICAgICBzdGFydCArPSBjb3VudCAtIDE7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY291bnQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjb3VudCA+IDApIHtcbiAgICAgICAgICAgIGlmIChzdGFydCBpbiB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbb2Zmc2V0XSA9IHRhcmdldFtzdGFydF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGFyZ2V0W29mZnNldF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvZmZzZXQgKz0gZGlyZWN0aW9uO1xuICAgICAgICAgICAgc3RhcnQgKz0gZGlyZWN0aW9uO1xuICAgICAgICAgICAgY291bnQtLTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG4gICAgZmlsbCA9IGZ1bmN0aW9uIGZpbGwodGFyZ2V0LCB2YWx1ZSwgc3RhcnQsIGVuZCkge1xuICAgICAgICBjb25zdCBsZW5ndGggPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcbiAgICAgICAgbGV0IGkgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKHN0YXJ0KSwgbGVuZ3RoKTtcbiAgICAgICAgZW5kID0gbm9ybWFsaXplT2Zmc2V0KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCksIGxlbmd0aCk7XG4gICAgICAgIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgICAgICAgICB0YXJnZXRbaSsrXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcbiAgICBmaW5kID0gZnVuY3Rpb24gZmluZCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmluZEluZGV4KHRhcmdldCwgY2FsbGJhY2ssIHRoaXNBcmcpO1xuICAgICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gdGFyZ2V0W2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGZpbmRJbmRleCA9IGZ1bmN0aW9uIGZpbmRJbmRleCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmaW5kOiBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXNBcmcpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzQXJnKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sodGFyZ2V0W2ldLCBpLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG59XG5pZiAodHJ1ZSkge1xuICAgIGluY2x1ZGVzID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKTtcbn1cbmVsc2Uge1xuICAgIC8qKlxuICAgICAqIEVuc3VyZXMgYSBub24tbmVnYXRpdmUsIG5vbi1pbmZpbml0ZSwgc2FmZSBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIHRvIHZhbGlkYXRlXG4gICAgICogQHJldHVybiBBIHByb3BlciBsZW5ndGhcbiAgICAgKi9cbiAgICBjb25zdCB0b0xlbmd0aCA9IGZ1bmN0aW9uIHRvTGVuZ3RoKGxlbmd0aCkge1xuICAgICAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKTtcbiAgICAgICAgaWYgKGlzTmFOKGxlbmd0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICAgICAgICBsZW5ndGggPSBNYXRoLmZsb29yKGxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5zdXJlIGEgbm9uLW5lZ2F0aXZlLCByZWFsLCBzYWZlIGludGVnZXJcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KGxlbmd0aCwgMCksIE1BWF9TQUZFX0lOVEVHRVIpO1xuICAgIH07XG4gICAgaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh0YXJnZXQsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCA9IDApIHtcbiAgICAgICAgbGV0IGxlbiA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gZnJvbUluZGV4OyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0W2ldO1xuICAgICAgICAgICAgaWYgKHNlYXJjaEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50IHx8XG4gICAgICAgICAgICAgICAgKHNlYXJjaEVsZW1lbnQgIT09IHNlYXJjaEVsZW1lbnQgJiYgY3VycmVudEVsZW1lbnQgIT09IGN1cnJlbnRFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJyYXkubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2FycmF5Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vYXJyYXkubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImNvbnN0IGdsb2JhbE9iamVjdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIGdsb2JhbCBzcGVjIGRlZmluZXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgY2FsbGVkICdnbG9iYWwnXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxuICAgICAgICAvLyBgZ2xvYmFsYCBpcyBhbHNvIGRlZmluZWQgaW4gTm9kZUpTXG4gICAgICAgIHJldHVybiBnbG9iYWw7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIHdpbmRvdyBpcyBkZWZpbmVkIGluIGJyb3dzZXJzXG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBzZWxmIGlzIGRlZmluZWQgaW4gV2ViV29ya2Vyc1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG59KSgpO1xuZXhwb3J0IGRlZmF1bHQgZ2xvYmFsT2JqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2xvYmFsLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9nbG9iYWwubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9nbG9iYWwubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCAnLi9TeW1ib2wnO1xuaW1wb3J0IHsgSElHSF9TVVJST0dBVEVfTUFYLCBISUdIX1NVUlJPR0FURV9NSU4gfSBmcm9tICcuL3N0cmluZyc7XG5jb25zdCBzdGF0aWNEb25lID0geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4vKipcbiAqIEEgY2xhc3MgdGhhdCBfc2hpbXNfIGFuIGl0ZXJhdG9yIGludGVyZmFjZSBvbiBhcnJheSBsaWtlIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaGltSXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGxpc3QpIHtcbiAgICAgICAgdGhpcy5fbmV4dEluZGV4ID0gLTE7XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGxpc3QpKSB7XG4gICAgICAgICAgICB0aGlzLl9uYXRpdmVJdGVyYXRvciA9IGxpc3RbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGlzdCA9IGxpc3Q7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBuZXh0IGl0ZXJhdGlvbiByZXN1bHQgZm9yIHRoZSBJdGVyYXRvclxuICAgICAqL1xuICAgIG5leHQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9uYXRpdmVJdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25hdGl2ZUl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2xpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0aWNEb25lO1xuICAgICAgICB9XG4gICAgICAgIGlmICgrK3RoaXMuX25leHRJbmRleCA8IHRoaXMuX2xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9saXN0W3RoaXMuX25leHRJbmRleF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRpY0RvbmU7XG4gICAgfVxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4vKipcbiAqIEEgdHlwZSBndWFyZCBmb3IgY2hlY2tpbmcgaWYgc29tZXRoaW5nIGhhcyBhbiBJdGVyYWJsZSBpbnRlcmZhY2VcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogQSB0eXBlIGd1YXJkIGZvciBjaGVja2luZyBpZiBzb21ldGhpbmcgaXMgQXJyYXlMaWtlXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0eXBlIGd1YXJkIGFnYWluc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBmb3IgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIGl0ZXJhYmxlIFRoZSBpdGVyYWJsZSBvYmplY3QgdG8gcmV0dXJuIHRoZSBpdGVyYXRvciBmb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldChpdGVyYWJsZSkge1xuICAgIGlmIChpc0l0ZXJhYmxlKGl0ZXJhYmxlKSkge1xuICAgICAgICByZXR1cm4gaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTaGltSXRlcmF0b3IoaXRlcmFibGUpO1xuICAgIH1cbn1cbi8qKlxuICogU2hpbXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYGZvciAuLi4gb2ZgIGJsb2Nrc1xuICpcbiAqIEBwYXJhbSBpdGVyYWJsZSBUaGUgb2JqZWN0IHRoZSBwcm92aWRlcyBhbiBpbnRlcmF0b3IgaW50ZXJmYWNlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIGl0ZW0gb2YgdGhlIGl0ZXJhYmxlXG4gKiBAcGFyYW0gdGhpc0FyZyBPcHRpb25hbCBzY29wZSB0byBwYXNzIHRoZSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9yT2YoaXRlcmFibGUsIGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgbGV0IGJyb2tlbiA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvQnJlYWsoKSB7XG4gICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgfVxuICAgIC8qIFdlIG5lZWQgdG8gaGFuZGxlIGl0ZXJhdGlvbiBvZiBkb3VibGUgYnl0ZSBzdHJpbmdzIHByb3Blcmx5ICovXG4gICAgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSAmJiB0eXBlb2YgaXRlcmFibGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGwgPSBpdGVyYWJsZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBsZXQgY2hhciA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgaWYgKGkgKyAxIDwgbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgPj0gSElHSF9TVVJST0dBVEVfTUlOICYmIGNvZGUgPD0gSElHSF9TVVJST0dBVEVfTUFYKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXIgKz0gaXRlcmFibGVbKytpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIGNoYXIsIGl0ZXJhYmxlLCBkb0JyZWFrKTtcbiAgICAgICAgICAgIGlmIChicm9rZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gZ2V0KGl0ZXJhYmxlKTtcbiAgICAgICAgaWYgKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgcmVzdWx0LnZhbHVlLCBpdGVyYWJsZSwgZG9CcmVhayk7XG4gICAgICAgICAgICAgICAgaWYgKGJyb2tlbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWl0ZXJhdG9yLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9pdGVyYXRvci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2l0ZXJhdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbi8qKlxuICogVGhlIHNtYWxsZXN0IGludGVydmFsIGJldHdlZW4gdHdvIHJlcHJlc2VudGFibGUgbnVtYmVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVQU0lMT04gPSAxO1xuLyoqXG4gKiBUaGUgbWF4aW11bSBzYWZlIGludGVnZXIgaW4gSmF2YVNjcmlwdFxuICovXG5leHBvcnQgY29uc3QgTUFYX1NBRkVfSU5URUdFUiA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4vKipcbiAqIFRoZSBtaW5pbXVtIHNhZmUgaW50ZWdlciBpbiBKYXZhU2NyaXB0XG4gKi9cbmV4cG9ydCBjb25zdCBNSU5fU0FGRV9JTlRFR0VSID0gLU1BWF9TQUZFX0lOVEVHRVI7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIE5hTiB3aXRob3V0IGNvZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBOYU4sIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBnbG9iYWwuaXNOYU4odmFsdWUpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhIGZpbml0ZSBudW1iZXIgd2l0aG91dCBjb2Vyc2lvbi5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgZmluaXRlLCBmYWxzZSBpZiBpdCBpcyBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgZ2xvYmFsLmlzRmluaXRlKHZhbHVlKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgYW4gaW50ZWdlciB0aGF0IGlzICdzYWZlLCcgbWVhbmluZzpcbiAqICAgMS4gaXQgY2FuIGJlIGV4cHJlc3NlZCBhcyBhbiBJRUVFLTc1NCBkb3VibGUgcHJlY2lzaW9uIG51bWJlclxuICogICAyLiBpdCBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgdG8gYSBtYXRoZW1hdGljYWwgaW50ZWdlciwgbWVhbmluZyBpdHNcbiAqICAgICAgSUVFRS03NTQgcmVwcmVzZW50YXRpb24gY2Fubm90IGJlIHRoZSByZXN1bHQgb2Ygcm91bmRpbmcgYW55IG90aGVyXG4gKiAgICAgIGludGVnZXIgdG8gZml0IHRoZSBJRUVFLTc1NCByZXByZXNlbnRhdGlvblxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLCBmYWxzZSBpZiBpdCBpcyBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIodmFsdWUpIHtcbiAgICByZXR1cm4gaXNJbnRlZ2VyKHZhbHVlKSAmJiBNYXRoLmFicyh2YWx1ZSkgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW51bWJlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vbnVtYmVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vbnVtYmVyLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgeyBpc1N5bWJvbCB9IGZyb20gJy4vU3ltYm9sJztcbmV4cG9ydCBsZXQgYXNzaWduO1xuLyoqXG4gKiBHZXRzIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdC5cbiAqIEFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGlzIG9uZSB0aGF0IGlzIGRlZmluZWQgZGlyZWN0bHkgb24gdGhlIG9iamVjdCBhbmQgaXMgbm90XG4gKiBpbmhlcml0ZWQgZnJvbSB0aGUgb2JqZWN0J3MgcHJvdG90eXBlLlxuICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnR5LlxuICogQHBhcmFtIHAgTmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0LiBUaGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGFyZSB0aG9zZSB0aGF0IGFyZSBkZWZpbmVkIGRpcmVjdGx5XG4gKiBvbiB0aGF0IG9iamVjdCwgYW5kIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGhlIG9iamVjdCdzIHByb3RvdHlwZS4gVGhlIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGluY2x1ZGUgYm90aCBmaWVsZHMgKG9iamVjdHMpIGFuZCBmdW5jdGlvbnMuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgb3duIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlOYW1lcztcbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3ltYm9sIHByb3BlcnRpZXMgZm91bmQgZGlyZWN0bHkgb24gb2JqZWN0IG8uXG4gKiBAcGFyYW0gbyBPYmplY3QgdG8gcmV0cmlldmUgdGhlIHN5bWJvbHMgZnJvbS5cbiAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQHBhcmFtIHZhbHVlMSBUaGUgZmlyc3QgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWUyIFRoZSBzZWNvbmQgdmFsdWUuXG4gKi9cbmV4cG9ydCBsZXQgaXM7XG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgb2YgYW4gb2JqZWN0LlxuICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuIFRoaXMgY2FuIGJlIGFuIG9iamVjdCB0aGF0IHlvdSBjcmVhdGVkIG9yIGFuIGV4aXN0aW5nIERvY3VtZW50IE9iamVjdCBNb2RlbCAoRE9NKSBvYmplY3QuXG4gKi9cbmV4cG9ydCBsZXQga2V5cztcbi8qIEVTNyBPYmplY3Qgc3RhdGljIG1ldGhvZHMgKi9cbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbmV4cG9ydCBsZXQgZW50cmllcztcbmV4cG9ydCBsZXQgdmFsdWVzO1xuaWYgKHRydWUpIHtcbiAgICBjb25zdCBnbG9iYWxPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuICAgIGFzc2lnbiA9IGdsb2JhbE9iamVjdC5hc3NpZ247XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG4gICAgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiAgICBpcyA9IGdsb2JhbE9iamVjdC5pcztcbiAgICBrZXlzID0gZ2xvYmFsT2JqZWN0LmtleXM7XG59XG5lbHNlIHtcbiAgICBrZXlzID0gZnVuY3Rpb24gc3ltYm9sQXdhcmVLZXlzKG8pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG8pLmZpbHRlcigoa2V5KSA9PiAhQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKTtcbiAgICB9O1xuICAgIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUeXBlRXJyb3IgaWYgdW5kZWZpbmVkIG9yIG51bGxcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvID0gT2JqZWN0KHRhcmdldCk7XG4gICAgICAgIHNvdXJjZXMuZm9yRWFjaCgobmV4dFNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5leHRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIG92ZXIgaWYgdW5kZWZpbmVkIG9yIG51bGxcbiAgICAgICAgICAgICAgICBrZXlzKG5leHRTb3VyY2UpLmZvckVhY2goKG5leHRLZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH07XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApIHtcbiAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBwcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5maWx0ZXIoKGtleSkgPT4gIUJvb2xlYW4oa2V5Lm1hdGNoKC9eQEAuKy8pKSk7XG4gICAgfTtcbiAgICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMobykge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobylcbiAgICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKVxuICAgICAgICAgICAgLm1hcCgoa2V5KSA9PiBTeW1ib2wuZm9yKGtleS5zdWJzdHJpbmcoMikpKTtcbiAgICB9O1xuICAgIGlzID0gZnVuY3Rpb24gaXModmFsdWUxLCB2YWx1ZTIpIHtcbiAgICAgICAgaWYgKHZhbHVlMSA9PT0gdmFsdWUyKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUxICE9PSAwIHx8IDEgLyB2YWx1ZTEgPT09IDEgLyB2YWx1ZTI7IC8vIC0wXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlMSAhPT0gdmFsdWUxICYmIHZhbHVlMiAhPT0gdmFsdWUyOyAvLyBOYU5cbiAgICB9O1xufVxuaWYgKHRydWUpIHtcbiAgICBjb25zdCBnbG9iYWxPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbiAgICBlbnRyaWVzID0gZ2xvYmFsT2JqZWN0LmVudHJpZXM7XG4gICAgdmFsdWVzID0gZ2xvYmFsT2JqZWN0LnZhbHVlcztcbn1cbmVsc2Uge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG8pIHtcbiAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5TmFtZXMobykucmVkdWNlKChwcmV2aW91cywga2V5KSA9PiB7XG4gICAgICAgICAgICBwcmV2aW91c1trZXldID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIGtleSk7XG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9O1xuICAgIGVudHJpZXMgPSBmdW5jdGlvbiBlbnRyaWVzKG8pIHtcbiAgICAgICAgcmV0dXJuIGtleXMobykubWFwKChrZXkpID0+IFtrZXksIG9ba2V5XV0pO1xuICAgIH07XG4gICAgdmFsdWVzID0gZnVuY3Rpb24gdmFsdWVzKG8pIHtcbiAgICAgICAgcmV0dXJuIGtleXMobykubWFwKChrZXkpID0+IG9ba2V5XSk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9iamVjdC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgeyB3cmFwTmF0aXZlIH0gZnJvbSAnLi9zdXBwb3J0L3V0aWwnO1xuLyoqXG4gKiBUaGUgbWluaW11bSBsb2NhdGlvbiBvZiBoaWdoIHN1cnJvZ2F0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IEhJR0hfU1VSUk9HQVRFX01JTiA9IDB4ZDgwMDtcbi8qKlxuICogVGhlIG1heGltdW0gbG9jYXRpb24gb2YgaGlnaCBzdXJyb2dhdGVzXG4gKi9cbmV4cG9ydCBjb25zdCBISUdIX1NVUlJPR0FURV9NQVggPSAweGRiZmY7XG4vKipcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGxvdyBzdXJyb2dhdGVzXG4gKi9cbmV4cG9ydCBjb25zdCBMT1dfU1VSUk9HQVRFX01JTiA9IDB4ZGMwMDtcbi8qKlxuICogVGhlIG1heGltdW0gbG9jYXRpb24gb2YgbG93IHN1cnJvZ2F0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IExPV19TVVJST0dBVEVfTUFYID0gMHhkZmZmO1xuLyogRVM2IHN0YXRpYyBtZXRob2RzICovXG4vKipcbiAqIFJldHVybiB0aGUgU3RyaW5nIHZhbHVlIHdob3NlIGVsZW1lbnRzIGFyZSwgaW4gb3JkZXIsIHRoZSBlbGVtZW50cyBpbiB0aGUgTGlzdCBlbGVtZW50cy5cbiAqIElmIGxlbmd0aCBpcyAwLCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLlxuICogQHBhcmFtIGNvZGVQb2ludHMgVGhlIGNvZGUgcG9pbnRzIHRvIGdlbmVyYXRlIHRoZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGxldCBmcm9tQ29kZVBvaW50O1xuLyoqXG4gKiBgcmF3YCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgdGFnIGZ1bmN0aW9uIG9mIGEgVGFnZ2VkIFRlbXBsYXRlIFN0cmluZy4gV2hlbiBjYWxsZWRcbiAqIGFzIHN1Y2ggdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYSB3ZWxsIGZvcm1lZCB0ZW1wbGF0ZSBjYWxsIHNpdGUgb2JqZWN0IGFuZCB0aGUgcmVzdFxuICogcGFyYW1ldGVyIHdpbGwgY29udGFpbiB0aGUgc3Vic3RpdHV0aW9uIHZhbHVlcy5cbiAqIEBwYXJhbSB0ZW1wbGF0ZSBBIHdlbGwtZm9ybWVkIHRlbXBsYXRlIHN0cmluZyBjYWxsIHNpdGUgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0gc3Vic3RpdHV0aW9ucyBBIHNldCBvZiBzdWJzdGl0dXRpb24gdmFsdWVzLlxuICovXG5leHBvcnQgbGV0IHJhdztcbi8qIEVTNiBpbnN0YW5jZSBtZXRob2RzICovXG4vKipcbiAqIFJldHVybnMgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIE51bWJlciBsZXNzIHRoYW4gMTExNDExMiAoMHgxMTAwMDApIHRoYXQgaXMgdGhlIGNvZGUgcG9pbnRcbiAqIHZhbHVlIG9mIHRoZSBVVEYtMTYgZW5jb2RlZCBjb2RlIHBvaW50IHN0YXJ0aW5nIGF0IHRoZSBzdHJpbmcgZWxlbWVudCBhdCBwb3NpdGlvbiBwb3MgaW5cbiAqIHRoZSBTdHJpbmcgcmVzdWx0aW5nIGZyb20gY29udmVydGluZyB0aGlzIG9iamVjdCB0byBhIFN0cmluZy5cbiAqIElmIHRoZXJlIGlzIG5vIGVsZW1lbnQgYXQgdGhhdCBwb3NpdGlvbiwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuXG4gKiBJZiBhIHZhbGlkIFVURi0xNiBzdXJyb2dhdGUgcGFpciBkb2VzIG5vdCBiZWdpbiBhdCBwb3MsIHRoZSByZXN1bHQgaXMgdGhlIGNvZGUgdW5pdCBhdCBwb3MuXG4gKi9cbmV4cG9ydCBsZXQgY29kZVBvaW50QXQ7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcbiAqIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhpcyBvYmplY3QgKGNvbnZlcnRlZCB0byBhIFN0cmluZykgc3RhcnRpbmcgYXRcbiAqIGVuZFBvc2l0aW9uIOKAkyBsZW5ndGgodGhpcykuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICovXG5leHBvcnQgbGV0IGVuZHNXaXRoO1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgc2VhcmNoU3RyaW5nIGFwcGVhcnMgYXMgYSBzdWJzdHJpbmcgb2YgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoaXNcbiAqIG9iamVjdCB0byBhIFN0cmluZywgYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIHRoYXQgYXJlXG4gKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gcG9zaXRpb247IG90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcbiAqIEBwYXJhbSBzZWFyY2hTdHJpbmcgc2VhcmNoIHN0cmluZ1xuICogQHBhcmFtIHBvc2l0aW9uIElmIHBvc2l0aW9uIGlzIHVuZGVmaW5lZCwgMCBpcyBhc3N1bWVkLCBzbyBhcyB0byBzZWFyY2ggYWxsIG9mIHRoZSBTdHJpbmcuXG4gKi9cbmV4cG9ydCBsZXQgaW5jbHVkZXM7XG4vKipcbiAqIFJldHVybnMgdGhlIFN0cmluZyB2YWx1ZSByZXN1bHQgb2Ygbm9ybWFsaXppbmcgdGhlIHN0cmluZyBpbnRvIHRoZSBub3JtYWxpemF0aW9uIGZvcm1cbiAqIG5hbWVkIGJ5IGZvcm0gYXMgc3BlY2lmaWVkIGluIFVuaWNvZGUgU3RhbmRhcmQgQW5uZXggIzE1LCBVbmljb2RlIE5vcm1hbGl6YXRpb24gRm9ybXMuXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXG4gKiBAcGFyYW0gZm9ybSBBcHBsaWNhYmxlIHZhbHVlczogXCJORkNcIiwgXCJORkRcIiwgXCJORktDXCIsIG9yIFwiTkZLRFwiLCBJZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRcbiAqIGlzIFwiTkZDXCJcbiAqL1xuZXhwb3J0IGxldCBub3JtYWxpemU7XG4vKipcbiAqIFJldHVybnMgYSBTdHJpbmcgdmFsdWUgdGhhdCBpcyBtYWRlIGZyb20gY291bnQgY29waWVzIGFwcGVuZGVkIHRvZ2V0aGVyLiBJZiBjb3VudCBpcyAwLFxuICogVCBpcyB0aGUgZW1wdHkgU3RyaW5nIGlzIHJldHVybmVkLlxuICogQHBhcmFtIGNvdW50IG51bWJlciBvZiBjb3BpZXMgdG8gYXBwZW5kXG4gKi9cbmV4cG9ydCBsZXQgcmVwZWF0O1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlcXVlbmNlIG9mIGVsZW1lbnRzIG9mIHNlYXJjaFN0cmluZyBjb252ZXJ0ZWQgdG8gYSBTdHJpbmcgaXMgdGhlXG4gKiBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHRoaXMgb2JqZWN0IChjb252ZXJ0ZWQgdG8gYSBTdHJpbmcpIHN0YXJ0aW5nIGF0XG4gKiBwb3NpdGlvbi4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gKi9cbmV4cG9ydCBsZXQgc3RhcnRzV2l0aDtcbi8qIEVTNyBpbnN0YW5jZSBtZXRob2RzICovXG4vKipcbiAqIFBhZHMgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGggYSBnaXZlbiBzdHJpbmcgKHBvc3NpYmx5IHJlcGVhdGVkKSBzbyB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIHJlYWNoZXMgYSBnaXZlbiBsZW5ndGguXG4gKiBUaGUgcGFkZGluZyBpcyBhcHBsaWVkIGZyb20gdGhlIGVuZCAocmlnaHQpIG9mIHRoZSBjdXJyZW50IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcgb25jZSB0aGUgY3VycmVudCBzdHJpbmcgaGFzIGJlZW4gcGFkZGVkLlxuICogICAgICAgIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBzdHJpbmcncyBsZW5ndGgsIHRoZSBjdXJyZW50IHN0cmluZyB3aWxsIGJlIHJldHVybmVkIGFzIGl0IGlzLlxuICpcbiAqIEBwYXJhbSBmaWxsU3RyaW5nIFRoZSBzdHJpbmcgdG8gcGFkIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoLlxuICogICAgICAgIElmIHRoaXMgc3RyaW5nIGlzIHRvbyBsb25nLCBpdCB3aWxsIGJlIHRydW5jYXRlZCBhbmQgdGhlIGxlZnQtbW9zdCBwYXJ0IHdpbGwgYmUgYXBwbGllZC5cbiAqICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgXCIgXCIgKFUrMDAyMCkuXG4gKi9cbmV4cG9ydCBsZXQgcGFkRW5kO1xuLyoqXG4gKiBQYWRzIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoIGEgZ2l2ZW4gc3RyaW5nIChwb3NzaWJseSByZXBlYXRlZCkgc28gdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyByZWFjaGVzIGEgZ2l2ZW4gbGVuZ3RoLlxuICogVGhlIHBhZGRpbmcgaXMgYXBwbGllZCBmcm9tIHRoZSBzdGFydCAobGVmdCkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcbiAqIEBwYXJhbSBtYXhMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBvbmNlIHRoZSBjdXJyZW50IHN0cmluZyBoYXMgYmVlbiBwYWRkZWQuXG4gKiAgICAgICAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHN0cmluZydzIGxlbmd0aCwgdGhlIGN1cnJlbnQgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQgYXMgaXQgaXMuXG4gKlxuICogQHBhcmFtIGZpbGxTdHJpbmcgVGhlIHN0cmluZyB0byBwYWQgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGguXG4gKiAgICAgICAgSWYgdGhpcyBzdHJpbmcgaXMgdG9vIGxvbmcsIGl0IHdpbGwgYmUgdHJ1bmNhdGVkIGFuZCB0aGUgbGVmdC1tb3N0IHBhcnQgd2lsbCBiZSBhcHBsaWVkLlxuICogICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyBcIiBcIiAoVSswMDIwKS5cbiAqL1xuZXhwb3J0IGxldCBwYWRTdGFydDtcbmlmICh0cnVlICYmIHRydWUpIHtcbiAgICBmcm9tQ29kZVBvaW50ID0gZ2xvYmFsLlN0cmluZy5mcm9tQ29kZVBvaW50O1xuICAgIHJhdyA9IGdsb2JhbC5TdHJpbmcucmF3O1xuICAgIGNvZGVQb2ludEF0ID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdCk7XG4gICAgZW5kc1dpdGggPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKTtcbiAgICBpbmNsdWRlcyA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMpO1xuICAgIG5vcm1hbGl6ZSA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUubm9ybWFsaXplKTtcbiAgICByZXBlYXQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnJlcGVhdCk7XG4gICAgc3RhcnRzV2l0aCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCk7XG59XG5lbHNlIHtcbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgdGhhdCB0ZXh0IGlzIGRlZmluZWQsIGFuZCBub3JtYWxpemVzIHBvc2l0aW9uIChiYXNlZCBvbiB0aGUgZ2l2ZW4gZGVmYXVsdCBpZiB0aGUgaW5wdXQgaXMgTmFOKS5cbiAgICAgKiBVc2VkIGJ5IHN0YXJ0c1dpdGgsIGluY2x1ZGVzLCBhbmQgZW5kc1dpdGguXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIE5vcm1hbGl6ZWQgcG9zaXRpb24uXG4gICAgICovXG4gICAgY29uc3Qgbm9ybWFsaXplU3Vic3RyaW5nQXJncyA9IGZ1bmN0aW9uIChuYW1lLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uLCBpc0VuZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy4nICsgbmFtZSArICcgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcgdG8gc2VhcmNoIGFnYWluc3QuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XG4gICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gIT09IHBvc2l0aW9uID8gKGlzRW5kID8gbGVuZ3RoIDogMCkgOiBwb3NpdGlvbjtcbiAgICAgICAgcmV0dXJuIFt0ZXh0LCBTdHJpbmcoc2VhcmNoKSwgTWF0aC5taW4oTWF0aC5tYXgocG9zaXRpb24sIDApLCBsZW5ndGgpXTtcbiAgICB9O1xuICAgIGZyb21Db2RlUG9pbnQgPSBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpIHtcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5mcm9tQ29kZVBvaW50XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgICAgICAgY29uc3QgTUFYX1NJWkUgPSAweDQwMDA7XG4gICAgICAgIGxldCBjb2RlVW5pdHMgPSBbXTtcbiAgICAgICAgbGV0IGluZGV4ID0gLTE7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBjb2RlUG9pbnQgPSBOdW1iZXIoYXJndW1lbnRzW2luZGV4XSk7XG4gICAgICAgICAgICAvLyBDb2RlIHBvaW50cyBtdXN0IGJlIGZpbml0ZSBpbnRlZ2VycyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlXG4gICAgICAgICAgICBsZXQgaXNWYWxpZCA9IGlzRmluaXRlKGNvZGVQb2ludCkgJiYgTWF0aC5mbG9vcihjb2RlUG9pbnQpID09PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50ID49IDAgJiYgY29kZVBvaW50IDw9IDB4MTBmZmZmO1xuICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcignc3RyaW5nLmZyb21Db2RlUG9pbnQ6IEludmFsaWQgY29kZSBwb2ludCAnICsgY29kZVBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhmZmZmKSB7XG4gICAgICAgICAgICAgICAgLy8gQk1QIGNvZGUgcG9pbnRcbiAgICAgICAgICAgICAgICBjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQXN0cmFsIGNvZGUgcG9pbnQ7IHNwbGl0IGluIHN1cnJvZ2F0ZSBoYWx2ZXNcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcbiAgICAgICAgICAgICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMDtcbiAgICAgICAgICAgICAgICBsZXQgaGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgSElHSF9TVVJST0dBVEVfTUlOO1xuICAgICAgICAgICAgICAgIGxldCBsb3dTdXJyb2dhdGUgPSBjb2RlUG9pbnQgJSAweDQwMCArIExPV19TVVJST0dBVEVfTUlOO1xuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGhpZ2hTdXJyb2dhdGUsIGxvd1N1cnJvZ2F0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5kZXggKyAxID09PSBsZW5ndGggfHwgY29kZVVuaXRzLmxlbmd0aCA+IE1BWF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZyb21DaGFyQ29kZS5hcHBseShudWxsLCBjb2RlVW5pdHMpO1xuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICByYXcgPSBmdW5jdGlvbiByYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpIHtcbiAgICAgICAgbGV0IHJhd1N0cmluZ3MgPSBjYWxsU2l0ZS5yYXc7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgbGV0IG51bVN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zLmxlbmd0aDtcbiAgICAgICAgaWYgKGNhbGxTaXRlID09IG51bGwgfHwgY2FsbFNpdGUucmF3ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yYXcgcmVxdWlyZXMgYSB2YWxpZCBjYWxsU2l0ZSBvYmplY3Qgd2l0aCBhIHJhdyB2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSByYXdTdHJpbmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gcmF3U3RyaW5nc1tpXSArIChpIDwgbnVtU3Vic3RpdHV0aW9ucyAmJiBpIDwgbGVuZ3RoIC0gMSA/IHN1YnN0aXR1dGlvbnNbaV0gOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvZGVQb2ludEF0ID0gZnVuY3Rpb24gY29kZVBvaW50QXQodGV4dCwgcG9zaXRpb24gPSAwKSB7XG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0XG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5jb2RlUG9pbnRBdCByZXF1cmllcyBhIHZhbGlkIHN0cmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHBvc2l0aW9uICE9PSBwb3NpdGlvbikge1xuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdldCB0aGUgZmlyc3QgY29kZSB1bml0XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICAgICAgaWYgKGZpcnN0ID49IEhJR0hfU1VSUk9HQVRFX01JTiAmJiBmaXJzdCA8PSBISUdIX1NVUlJPR0FURV9NQVggJiYgbGVuZ3RoID4gcG9zaXRpb24gKyAxKSB7XG4gICAgICAgICAgICAvLyBTdGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyIChoaWdoIHN1cnJvZ2F0ZSBhbmQgdGhlcmUgaXMgYSBuZXh0IGNvZGUgdW5pdCk7IGNoZWNrIGZvciBsb3cgc3Vycm9nYXRlXG4gICAgICAgICAgICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHRleHQuY2hhckNvZGVBdChwb3NpdGlvbiArIDEpO1xuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSBMT1dfU1VSUk9HQVRFX01JTiAmJiBzZWNvbmQgPD0gTE9XX1NVUlJPR0FURV9NQVgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGZpcnN0IC0gSElHSF9TVVJST0dBVEVfTUlOKSAqIDB4NDAwICsgc2Vjb25kIC0gTE9XX1NVUlJPR0FURV9NSU4gKyAweDEwMDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdDtcbiAgICB9O1xuICAgIGVuZHNXaXRoID0gZnVuY3Rpb24gZW5kc1dpdGgodGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbikge1xuICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgZW5kUG9zaXRpb24gPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBbdGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdlbmRzV2l0aCcsIHRleHQsIHNlYXJjaCwgZW5kUG9zaXRpb24sIHRydWUpO1xuICAgICAgICBjb25zdCBzdGFydCA9IGVuZFBvc2l0aW9uIC0gc2VhcmNoLmxlbmd0aDtcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmRQb3NpdGlvbikgPT09IHNlYXJjaDtcbiAgICB9O1xuICAgIGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXModGV4dCwgc2VhcmNoLCBwb3NpdGlvbiA9IDApIHtcbiAgICAgICAgW3RleHQsIHNlYXJjaCwgcG9zaXRpb25dID0gbm9ybWFsaXplU3Vic3RyaW5nQXJncygnaW5jbHVkZXMnLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRleHQuaW5kZXhPZihzZWFyY2gsIHBvc2l0aW9uKSAhPT0gLTE7XG4gICAgfTtcbiAgICByZXBlYXQgPSBmdW5jdGlvbiByZXBlYXQodGV4dCwgY291bnQgPSAwKSB7XG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLnJlcGVhdFxuICAgICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3VudCAhPT0gY291bnQpIHtcbiAgICAgICAgICAgIGNvdW50ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPCAwIHx8IGNvdW50ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgd2hpbGUgKGNvdW50KSB7XG4gICAgICAgICAgICBpZiAoY291bnQgJSAyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAgdGV4dCArPSB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnQgPj49IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIHN0YXJ0c1dpdGggPSBmdW5jdGlvbiBzdGFydHNXaXRoKHRleHQsIHNlYXJjaCwgcG9zaXRpb24gPSAwKSB7XG4gICAgICAgIHNlYXJjaCA9IFN0cmluZyhzZWFyY2gpO1xuICAgICAgICBbdGV4dCwgc2VhcmNoLCBwb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdzdGFydHNXaXRoJywgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGVuZCA9IHBvc2l0aW9uICsgc2VhcmNoLmxlbmd0aDtcbiAgICAgICAgaWYgKGVuZCA+IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UocG9zaXRpb24sIGVuZCkgPT09IHNlYXJjaDtcbiAgICB9O1xufVxuaWYgKHRydWUpIHtcbiAgICBwYWRFbmQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnBhZEVuZCk7XG4gICAgcGFkU3RhcnQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KTtcbn1cbmVsc2Uge1xuICAgIHBhZEVuZCA9IGZ1bmN0aW9uIHBhZEVuZCh0ZXh0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcgPSAnICcpIHtcbiAgICAgICAgaWYgKHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnBhZEVuZCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gbnVsbCB8fCBtYXhMZW5ndGggPT09IHVuZGVmaW5lZCB8fCBtYXhMZW5ndGggPCAwKSB7XG4gICAgICAgICAgICBtYXhMZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdHJUZXh0ID0gU3RyaW5nKHRleHQpO1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gbWF4TGVuZ3RoIC0gc3RyVGV4dC5sZW5ndGg7XG4gICAgICAgIGlmIChwYWRkaW5nID4gMCkge1xuICAgICAgICAgICAgc3RyVGV4dCArPVxuICAgICAgICAgICAgICAgIHJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0cmluZy5zbGljZSgwLCBwYWRkaW5nICUgZmlsbFN0cmluZy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJUZXh0O1xuICAgIH07XG4gICAgcGFkU3RhcnQgPSBmdW5jdGlvbiBwYWRTdGFydCh0ZXh0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcgPSAnICcpIHtcbiAgICAgICAgaWYgKHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnBhZFN0YXJ0IHJlcXVpcmVzIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSBjb3VudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSBudWxsIHx8IG1heExlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IG1heExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIG1heExlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0clRleHQgPSBTdHJpbmcodGV4dCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBtYXhMZW5ndGggLSBzdHJUZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHBhZGRpbmcgPiAwKSB7XG4gICAgICAgICAgICBzdHJUZXh0ID1cbiAgICAgICAgICAgICAgICByZXBlYXQoZmlsbFN0cmluZywgTWF0aC5mbG9vcihwYWRkaW5nIC8gZmlsbFN0cmluZy5sZW5ndGgpKSArXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHJpbmcuc2xpY2UoMCwgcGFkZGluZyAlIGZpbGxTdHJpbmcubGVuZ3RoKSArXG4gICAgICAgICAgICAgICAgICAgIHN0clRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0clRleHQ7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmluZy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3RyaW5nLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3RyaW5nLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgaGFzLCB7IGFkZCB9IGZyb20gJy4uLy4uL2hhcy9oYXMnO1xuaW1wb3J0IGdsb2JhbCBmcm9tICcuLi9nbG9iYWwnO1xuZXhwb3J0IGRlZmF1bHQgaGFzO1xuZXhwb3J0ICogZnJvbSAnLi4vLi4vaGFzL2hhcyc7XG4vKiBFQ01BU2NyaXB0IDYgYW5kIDcgRmVhdHVyZXMgKi9cbi8qIEFycmF5ICovXG5hZGQoJ2VzNi1hcnJheScsICgpID0+IHtcbiAgICByZXR1cm4gKFsnZnJvbScsICdvZiddLmV2ZXJ5KChrZXkpID0+IGtleSBpbiBnbG9iYWwuQXJyYXkpICYmXG4gICAgICAgIFsnZmluZEluZGV4JywgJ2ZpbmQnLCAnY29weVdpdGhpbiddLmV2ZXJ5KChrZXkpID0+IGtleSBpbiBnbG9iYWwuQXJyYXkucHJvdG90eXBlKSk7XG59LCB0cnVlKTtcbmFkZCgnZXM2LWFycmF5LWZpbGwnLCAoKSA9PiB7XG4gICAgaWYgKCdmaWxsJyBpbiBnbG9iYWwuQXJyYXkucHJvdG90eXBlKSB7XG4gICAgICAgIC8qIFNvbWUgdmVyc2lvbnMgb2YgU2FmYXJpIGRvIG5vdCBwcm9wZXJseSBpbXBsZW1lbnQgdGhpcyAqL1xuICAgICAgICByZXR1cm4gWzFdLmZpbGwoOSwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKVswXSA9PT0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufSwgdHJ1ZSk7XG5hZGQoJ2VzNy1hcnJheScsICgpID0+ICdpbmNsdWRlcycgaW4gZ2xvYmFsLkFycmF5LnByb3RvdHlwZSwgdHJ1ZSk7XG4vKiBNYXAgKi9cbmFkZCgnZXM2LW1hcCcsICgpID0+IHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5NYXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLypcbiAgICBJRTExIGFuZCBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkgYXJlIG1pc3NpbmcgY3JpdGljYWwgRVM2IE1hcCBmdW5jdGlvbmFsaXR5XG4gICAgV2Ugd3JhcCB0aGlzIGluIGEgdHJ5L2NhdGNoIGJlY2F1c2Ugc29tZXRpbWVzIHRoZSBNYXAgY29uc3RydWN0b3IgZXhpc3RzLCBidXQgZG9lcyBub3RcbiAgICB0YWtlIGFyZ3VtZW50cyAoaU9TIDguNClcbiAgICAgKi9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG1hcCA9IG5ldyBnbG9iYWwuTWFwKFtbMCwgMV1dKTtcbiAgICAgICAgICAgIHJldHVybiBtYXAuaGFzKDApICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hcC5rZXlzID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICAgICAgdHJ1ZSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXAudmFsdWVzID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hcC5lbnRyaWVzID09PSAnZnVuY3Rpb24nO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogbm90IHRlc3Rpbmcgb24gaU9TIGF0IHRoZSBtb21lbnQgKi9cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59LCB0cnVlKTtcbi8qIE1hdGggKi9cbmFkZCgnZXM2LW1hdGgnLCAoKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ2NsejMyJyxcbiAgICAgICAgJ3NpZ24nLFxuICAgICAgICAnbG9nMTAnLFxuICAgICAgICAnbG9nMicsXG4gICAgICAgICdsb2cxcCcsXG4gICAgICAgICdleHBtMScsXG4gICAgICAgICdjb3NoJyxcbiAgICAgICAgJ3NpbmgnLFxuICAgICAgICAndGFuaCcsXG4gICAgICAgICdhY29zaCcsXG4gICAgICAgICdhc2luaCcsXG4gICAgICAgICdhdGFuaCcsXG4gICAgICAgICd0cnVuYycsXG4gICAgICAgICdmcm91bmQnLFxuICAgICAgICAnY2JydCcsXG4gICAgICAgICdoeXBvdCdcbiAgICBdLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgZ2xvYmFsLk1hdGhbbmFtZV0gPT09ICdmdW5jdGlvbicpO1xufSwgdHJ1ZSk7XG5hZGQoJ2VzNi1tYXRoLWltdWwnLCAoKSA9PiB7XG4gICAgaWYgKCdpbXVsJyBpbiBnbG9iYWwuTWF0aCkge1xuICAgICAgICAvKiBTb21lIHZlcnNpb25zIG9mIFNhZmFyaSBvbiBpb3MgZG8gbm90IHByb3Blcmx5IGltcGxlbWVudCB0aGlzICovXG4gICAgICAgIHJldHVybiBNYXRoLmltdWwoMHhmZmZmZmZmZiwgNSkgPT09IC01O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59LCB0cnVlKTtcbi8qIE9iamVjdCAqL1xuYWRkKCdlczYtb2JqZWN0JywgKCkgPT4ge1xuICAgIHJldHVybiB0cnVlICYmXG4gICAgICAgIFsnYXNzaWduJywgJ2lzJywgJ2dldE93blByb3BlcnR5U3ltYm9scycsICdzZXRQcm90b3R5cGVPZiddLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgZ2xvYmFsLk9iamVjdFtuYW1lXSA9PT0gJ2Z1bmN0aW9uJyk7XG59LCB0cnVlKTtcbmFkZCgnZXMyMDE3LW9iamVjdCcsICgpID0+IHtcbiAgICByZXR1cm4gWyd2YWx1ZXMnLCAnZW50cmllcycsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzJ10uZXZlcnkoKG5hbWUpID0+IHR5cGVvZiBnbG9iYWwuT2JqZWN0W25hbWVdID09PSAnZnVuY3Rpb24nKTtcbn0sIHRydWUpO1xuLyogT2JzZXJ2YWJsZSAqL1xuYWRkKCdlcy1vYnNlcnZhYmxlJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5PYnNlcnZhYmxlICE9PSAndW5kZWZpbmVkJywgdHJ1ZSk7XG4vKiBQcm9taXNlICovXG5hZGQoJ2VzNi1wcm9taXNlJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5Qcm9taXNlICE9PSAndW5kZWZpbmVkJyAmJiB0cnVlLCB0cnVlKTtcbi8qIFNldCAqL1xuYWRkKCdlczYtc2V0JywgKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsLlNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvKiBJRTExIGFuZCBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkgYXJlIG1pc3NpbmcgY3JpdGljYWwgRVM2IFNldCBmdW5jdGlvbmFsaXR5ICovXG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBnbG9iYWwuU2V0KFsxXSk7XG4gICAgICAgIHJldHVybiBzZXQuaGFzKDEpICYmICdrZXlzJyBpbiBzZXQgJiYgdHlwZW9mIHNldC5rZXlzID09PSAnZnVuY3Rpb24nICYmIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn0sIHRydWUpO1xuLyogU3RyaW5nICovXG5hZGQoJ2VzNi1zdHJpbmcnLCAoKSA9PiB7XG4gICAgcmV0dXJuIChbXG4gICAgICAgIC8qIHN0YXRpYyBtZXRob2RzICovXG4gICAgICAgICdmcm9tQ29kZVBvaW50J1xuICAgIF0uZXZlcnkoKGtleSkgPT4gdHlwZW9mIGdsb2JhbC5TdHJpbmdba2V5XSA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgICAgW1xuICAgICAgICAgICAgLyogaW5zdGFuY2UgbWV0aG9kcyAqL1xuICAgICAgICAgICAgJ2NvZGVQb2ludEF0JyxcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAgJ3JlcGVhdCcsXG4gICAgICAgICAgICAnc3RhcnRzV2l0aCcsXG4gICAgICAgICAgICAnZW5kc1dpdGgnLFxuICAgICAgICAgICAgJ2luY2x1ZGVzJ1xuICAgICAgICBdLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nLnByb3RvdHlwZVtrZXldID09PSAnZnVuY3Rpb24nKSk7XG59LCB0cnVlKTtcbmFkZCgnZXM2LXN0cmluZy1yYXcnLCAoKSA9PiB7XG4gICAgZnVuY3Rpb24gZ2V0Q2FsbFNpdGUoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gWy4uLmNhbGxTaXRlXTtcbiAgICAgICAgcmVzdWx0LnJhdyA9IGNhbGxTaXRlLnJhdztcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKCdyYXcnIGluIGdsb2JhbC5TdHJpbmcpIHtcbiAgICAgICAgbGV0IGIgPSAxO1xuICAgICAgICBsZXQgY2FsbFNpdGUgPSBnZXRDYWxsU2l0ZSBgYVxcbiR7Yn1gO1xuICAgICAgICBjYWxsU2l0ZS5yYXcgPSBbJ2FcXFxcbiddO1xuICAgICAgICBjb25zdCBzdXBwb3J0c1RydW5jID0gZ2xvYmFsLlN0cmluZy5yYXcoY2FsbFNpdGUsIDQyKSA9PT0gJ2E6XFxcXG4nO1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNUcnVuYztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufSwgdHJ1ZSk7XG5hZGQoJ2VzMjAxNy1zdHJpbmcnLCAoKSA9PiB7XG4gICAgcmV0dXJuIFsncGFkU3RhcnQnLCAncGFkRW5kJ10uZXZlcnkoKGtleSkgPT4gdHlwZW9mIGdsb2JhbC5TdHJpbmcucHJvdG90eXBlW2tleV0gPT09ICdmdW5jdGlvbicpO1xufSwgdHJ1ZSk7XG4vKiBTeW1ib2wgKi9cbmFkZCgnZXM2LXN5bWJvbCcsICgpID0+IHR5cGVvZiBnbG9iYWwuU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgU3ltYm9sKCkgPT09ICdzeW1ib2wnLCB0cnVlKTtcbi8qIFdlYWtNYXAgKi9cbmFkZCgnZXM2LXdlYWttYXAnLCAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuV2Vha01hcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLyogSUUxMSBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIGFyZSBtaXNzaW5nIGNyaXRpY2FsIEVTNiBNYXAgZnVuY3Rpb25hbGl0eSAqL1xuICAgICAgICBjb25zdCBrZXkxID0ge307XG4gICAgICAgIGNvbnN0IGtleTIgPSB7fTtcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IGdsb2JhbC5XZWFrTWFwKFtba2V5MSwgMV1dKTtcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShrZXkxKTtcbiAgICAgICAgcmV0dXJuIG1hcC5nZXQoa2V5MSkgPT09IDEgJiYgbWFwLnNldChrZXkyLCAyKSA9PT0gbWFwICYmIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn0sIHRydWUpO1xuLyogTWlzY2VsbGFuZW91cyBmZWF0dXJlcyAqL1xuYWRkKCdtaWNyb3Rhc2tzJywgKCkgPT4gdHJ1ZSB8fCBmYWxzZSB8fCB0cnVlLCB0cnVlKTtcbmFkZCgncG9zdG1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgLy8gSWYgd2luZG93IGlzIHVuZGVmaW5lZCwgYW5kIHdlIGhhdmUgcG9zdE1lc3NhZ2UsIGl0IHByb2JhYmx5IG1lYW5zIHdlJ3JlIGluIGEgd2ViIHdvcmtlci4gV2ViIHdvcmtlcnMgaGF2ZVxuICAgIC8vIHBvc3QgbWVzc2FnZSBidXQgaXQgZG9lc24ndCB3b3JrIGhvdyB3ZSBleHBlY3QgaXQgdG8sIHNvIGl0J3MgYmVzdCBqdXN0IHRvIHByZXRlbmQgaXQgZG9lc24ndCBleGlzdC5cbiAgICByZXR1cm4gdHlwZW9mIGdsb2JhbC53aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBnbG9iYWwucG9zdE1lc3NhZ2UgPT09ICdmdW5jdGlvbic7XG59LCB0cnVlKTtcbmFkZCgncmFmJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicsIHRydWUpO1xuYWRkKCdzZXRpbW1lZGlhdGUnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLnNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcsIHRydWUpO1xuLyogRE9NIEZlYXR1cmVzICovXG5hZGQoJ2RvbS1tdXRhdGlvbm9ic2VydmVyJywgKCkgPT4ge1xuICAgIGlmICh0cnVlICYmIEJvb2xlYW4oZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpKSB7XG4gICAgICAgIC8vIElFMTEgaGFzIGFuIHVucmVsaWFibGUgTXV0YXRpb25PYnNlcnZlciBpbXBsZW1lbnRhdGlvbiB3aGVyZSBzZXRQcm9wZXJ0eSgpIGRvZXMgbm90XG4gICAgICAgIC8vIGdlbmVyYXRlIGEgbXV0YXRpb24gZXZlbnQsIG9ic2VydmVycyBjYW4gY3Jhc2gsIGFuZCB0aGUgcXVldWUgZG9lcyBub3QgZHJhaW5cbiAgICAgICAgLy8gcmVsaWFibHkuIFRoZSBmb2xsb3dpbmcgZmVhdHVyZSB0ZXN0IHdhcyBhZGFwdGVkIGZyb21cbiAgICAgICAgLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdDEwa28vNGFjZWI4YzcxNjgxZmRiMjc1ZTMzZWZlNWU1NzZiMTRcbiAgICAgICAgY29uc3QgZXhhbXBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSAqL1xuICAgICAgICBjb25zdCBIb3N0TXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBIb3N0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7IH0pO1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGV4YW1wbGUsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTtcbiAgICAgICAgZXhhbXBsZS5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgICByZXR1cm4gQm9vbGVhbihvYnNlcnZlci50YWtlUmVjb3JkcygpLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn0sIHRydWUpO1xuYWRkKCdkb20td2ViYW5pbWF0aW9uJywgKCkgPT4gdHJ1ZSAmJiBnbG9iYWwuQW5pbWF0aW9uICE9PSB1bmRlZmluZWQgJiYgZ2xvYmFsLktleWZyYW1lRWZmZWN0ICE9PSB1bmRlZmluZWQsIHRydWUpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L2hhcy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvaGFzLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4uL2dsb2JhbCc7XG5pbXBvcnQgaGFzIGZyb20gJy4vaGFzJztcbmZ1bmN0aW9uIGV4ZWN1dGVUYXNrKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSAmJiBpdGVtLmlzQWN0aXZlICYmIGl0ZW0uY2FsbGJhY2spIHtcbiAgICAgICAgaXRlbS5jYWxsYmFjaygpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFF1ZXVlSGFuZGxlKGl0ZW0sIGRlc3RydWN0b3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgICAgICBpdGVtLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICBpdGVtLmNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChkZXN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbmxldCBjaGVja01pY3JvVGFza1F1ZXVlO1xubGV0IG1pY3JvVGFza3M7XG4vKipcbiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIHRoZSBtYWNyb3Rhc2sgcXVldWUuXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXVlVGFzayA9IChmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGRlc3RydWN0b3I7XG4gICAgbGV0IGVucXVldWU7XG4gICAgLy8gU2luY2UgdGhlIElFIGltcGxlbWVudGF0aW9uIG9mIGBzZXRJbW1lZGlhdGVgIGlzIG5vdCBmbGF3bGVzcywgd2Ugd2lsbCB0ZXN0IGZvciBgcG9zdE1lc3NhZ2VgIGZpcnN0LlxuICAgIGlmICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gW107XG4gICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAvLyBDb25maXJtIHRoYXQgdGhlIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGN1cnJlbnQgd2luZG93IGFuZCBieSB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiYgZXZlbnQuZGF0YSA9PT0gJ2Rvam8tcXVldWUtbWVzc2FnZScpIHtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVUYXNrKHF1ZXVlLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcXVldWUucHVzaChpdGVtKTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZSgnZG9qby1xdWV1ZS1tZXNzYWdlJywgJyonKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZmFsc2UpIHtcbiAgICAgICAgZGVzdHJ1Y3RvciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SW1tZWRpYXRlKGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSkpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGVzdHJ1Y3RvciA9IGdsb2JhbC5jbGVhclRpbWVvdXQ7XG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSwgMCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHF1ZXVlVGFzayhjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaWQgPSBlbnF1ZXVlKGl0ZW0pO1xuICAgICAgICByZXR1cm4gZ2V0UXVldWVIYW5kbGUoaXRlbSwgZGVzdHJ1Y3RvciAmJlxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRlc3RydWN0b3IoaWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxuICAgIHJldHVybiB0cnVlXG4gICAgICAgID8gcXVldWVUYXNrXG4gICAgICAgIDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjaGVja01pY3JvVGFza1F1ZXVlKCk7XG4gICAgICAgICAgICByZXR1cm4gcXVldWVUYXNrKGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbn0pKCk7XG4vLyBXaGVuIG5vIG1lY2hhbmlzbSBmb3IgcmVnaXN0ZXJpbmcgbWljcm90YXNrcyBpcyBleHBvc2VkIGJ5IHRoZSBlbnZpcm9ubWVudCwgbWljcm90YXNrcyB3aWxsXG4vLyBiZSBxdWV1ZWQgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYSBzaW5nbGUgbWFjcm90YXNrIGJlZm9yZSB0aGUgb3RoZXIgbWFjcm90YXNrcyBhcmUgZXhlY3V0ZWQuXG5pZiAoIXRydWUpIHtcbiAgICBsZXQgaXNNaWNyb1Rhc2tRdWV1ZWQgPSBmYWxzZTtcbiAgICBtaWNyb1Rhc2tzID0gW107XG4gICAgY2hlY2tNaWNyb1Rhc2tRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFpc01pY3JvVGFza1F1ZXVlZCkge1xuICAgICAgICAgICAgaXNNaWNyb1Rhc2tRdWV1ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpc01pY3JvVGFza1F1ZXVlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChtaWNyb1Rhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChpdGVtID0gbWljcm9UYXNrcy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVRhc2soaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIFNjaGVkdWxlcyBhbiBhbmltYXRpb24gdGFzayB3aXRoIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpZiBpdCBleGlzdHMsIG9yIHdpdGggYHF1ZXVlVGFza2Agb3RoZXJ3aXNlLlxuICpcbiAqIFNpbmNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSdzIGJlaGF2aW9yIGRvZXMgbm90IG1hdGNoIHRoYXQgZXhwZWN0ZWQgZnJvbSBgcXVldWVUYXNrYCwgaXQgaXMgbm90IHVzZWQgdGhlcmUuXG4gKiBIb3dldmVyLCBhdCB0aW1lcyBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGRlbGVnYXRlIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZTsgaGVuY2UgdGhlIGZvbGxvd2luZyBtZXRob2QuXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXVlQW5pbWF0aW9uVGFzayA9IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0cnVlKSB7XG4gICAgICAgIHJldHVybiBxdWV1ZVRhc2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHF1ZXVlQW5pbWF0aW9uVGFzayhjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSk7XG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBUT0RPOiBVc2UgYXNwZWN0LmJlZm9yZSB3aGVuIGl0IGlzIGF2YWlsYWJsZS5cbiAgICByZXR1cm4gdHJ1ZVxuICAgICAgICA/IHF1ZXVlQW5pbWF0aW9uVGFza1xuICAgICAgICA6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgY2hlY2tNaWNyb1Rhc2tRdWV1ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXVlQW5pbWF0aW9uVGFzayhjYWxsYmFjayk7XG4gICAgICAgIH07XG59KSgpO1xuLyoqXG4gKiBTY2hlZHVsZXMgYSBjYWxsYmFjayB0byB0aGUgbWljcm90YXNrIHF1ZXVlLlxuICpcbiAqIEFueSBjYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIGBxdWV1ZU1pY3JvVGFza2Agd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIG5leHQgbWFjcm90YXNrLiBJZiBubyBuYXRpdmVcbiAqIG1lY2hhbmlzbSBmb3Igc2NoZWR1bGluZyBtYWNyb3Rhc2tzIGlzIGV4cG9zZWQsIHRoZW4gYW55IGNhbGxiYWNrcyB3aWxsIGJlIGZpcmVkIGJlZm9yZSBhbnkgbWFjcm90YXNrXG4gKiByZWdpc3RlcmVkIHdpdGggYHF1ZXVlVGFza2Agb3IgYHF1ZXVlQW5pbWF0aW9uVGFza2AuXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cbiAqL1xuZXhwb3J0IGxldCBxdWV1ZU1pY3JvVGFzayA9IChmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGVucXVldWU7XG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2soZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHRydWUpIHtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBnbG9iYWwuUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4oZXhlY3V0ZVRhc2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh0cnVlKSB7XG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXG4gICAgICAgIGNvbnN0IEhvc3RNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgY29uc3QgcXVldWUgPSBbXTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSG9zdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmlzQWN0aXZlICYmIGl0ZW0uY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goaXRlbSk7XG4gICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgncXVldWVTdGF0dXMnLCAnMScpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBjaGVja01pY3JvVGFza1F1ZXVlKCk7XG4gICAgICAgICAgICBtaWNyb1Rhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHtcbiAgICAgICAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gICAgICAgIH07XG4gICAgICAgIGVucXVldWUoaXRlbSk7XG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtKTtcbiAgICB9O1xufSkoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXF1ZXVlLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L3F1ZXVlLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC9xdWV1ZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSB2YWx1ZSBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gKlxuICogQHBhcmFtIHZhbHVlICAgICAgICBUaGUgdmFsdWUgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3Igc2hvdWxkIGJlIHNldCB0b1xuICogQHBhcmFtIGVudW1lcmFibGUgICBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGVudW1iZXJhYmxlLCBkZWZhdWx0cyB0byBmYWxzZVxuICogQHBhcmFtIHdyaXRhYmxlICAgICBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlLCBkZWZhdWx0cyB0byB0cnVlXG4gKiBAcGFyYW0gY29uZmlndXJhYmxlIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uZmlndXJhYmxlLCBkZWZhdWx0cyB0byB0cnVlXG4gKiBAcmV0dXJuICAgICAgICAgICAgIFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWVEZXNjcmlwdG9yKHZhbHVlLCBlbnVtZXJhYmxlID0gZmFsc2UsIHdyaXRhYmxlID0gdHJ1ZSwgY29uZmlndXJhYmxlID0gdHJ1ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogZW51bWVyYWJsZSxcbiAgICAgICAgd3JpdGFibGU6IHdyaXRhYmxlLFxuICAgICAgICBjb25maWd1cmFibGU6IGNvbmZpZ3VyYWJsZVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gd3JhcE5hdGl2ZShuYXRpdmVGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVGdW5jdGlvbi5hcHBseSh0YXJnZXQsIGFyZ3MpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L3V0aWwubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L3V0aWwubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IEV2ZW50ZWQgfSBmcm9tICcuLi9jb3JlL0V2ZW50ZWQnO1xuZXhwb3J0IGNsYXNzIEluamVjdG9yIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgY29uc3RydWN0b3IocGF5bG9hZCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcbiAgICB9XG4gICAgc2V0SW52YWxpZGF0b3IoaW52YWxpZGF0b3IpIHtcbiAgICAgICAgdGhpcy5faW52YWxpZGF0b3IgPSBpbnZhbGlkYXRvcjtcbiAgICB9XG4gICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGF5bG9hZDtcbiAgICB9XG4gICAgc2V0KHBheWxvYWQpIHtcbiAgICAgICAgdGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgICAgIGlmICh0aGlzLl9pbnZhbGlkYXRvcikge1xuICAgICAgICAgICAgdGhpcy5faW52YWxpZGF0b3IoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEluamVjdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW5qZWN0b3IubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9JbmplY3Rvci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9JbmplY3Rvci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJy4uL2NvcmUvRXZlbnRlZCc7XG5pbXBvcnQgTWFwIGZyb20gJy4uL3NoaW0vTWFwJztcbi8qKlxuICogRW51bSB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiBldmVudC5cbiAqIExpc3RlbmluZyB0byAnUHJvamVjdG9yJyB3aWxsIG5vdGlmeSB3aGVuIHByb2plY3RvciBpcyBjcmVhdGVkIG9yIHVwZGF0ZWRcbiAqIExpc3RlbmluZyB0byAnV2lkZ2V0JyB3aWxsIG5vdGlmeSB3aGVuIHdpZGdldCByb290IGlzIGNyZWF0ZWQgb3IgdXBkYXRlZFxuICovXG5leHBvcnQgdmFyIE5vZGVFdmVudFR5cGU7XG4oZnVuY3Rpb24gKE5vZGVFdmVudFR5cGUpIHtcbiAgICBOb2RlRXZlbnRUeXBlW1wiUHJvamVjdG9yXCJdID0gXCJQcm9qZWN0b3JcIjtcbiAgICBOb2RlRXZlbnRUeXBlW1wiV2lkZ2V0XCJdID0gXCJXaWRnZXRcIjtcbn0pKE5vZGVFdmVudFR5cGUgfHwgKE5vZGVFdmVudFR5cGUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIE5vZGVIYW5kbGVyIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX25vZGVNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGdldChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVNYXAuZ2V0KGtleSk7XG4gICAgfVxuICAgIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVNYXAuaGFzKGtleSk7XG4gICAgfVxuICAgIGFkZChlbGVtZW50LCBrZXkpIHtcbiAgICAgICAgdGhpcy5fbm9kZU1hcC5zZXQoa2V5LCBlbGVtZW50KTtcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZToga2V5IH0pO1xuICAgIH1cbiAgICBhZGRSb290KCkge1xuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLldpZGdldCB9KTtcbiAgICB9XG4gICAgYWRkUHJvamVjdG9yKCkge1xuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLlByb2plY3RvciB9KTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX25vZGVNYXAuY2xlYXIoKTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBOb2RlSGFuZGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vZGVIYW5kbGVyLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBQcm9taXNlIGZyb20gJy4uL3NoaW0vUHJvbWlzZSc7XG5pbXBvcnQgTWFwIGZyb20gJy4uL3NoaW0vTWFwJztcbmltcG9ydCBTeW1ib2wgZnJvbSAnLi4vc2hpbS9TeW1ib2wnO1xuaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJy4uL2NvcmUvRXZlbnRlZCc7XG4vKipcbiAqIFdpZGdldCBiYXNlIHN5bWJvbCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBXSURHRVRfQkFTRV9UWVBFID0gU3ltYm9sKCdXaWRnZXQgQmFzZScpO1xuLyoqXG4gKiBDaGVja3MgaXMgdGhlIGl0ZW0gaXMgYSBzdWJjbGFzcyBvZiBXaWRnZXRCYXNlIChvciBhIFdpZGdldEJhc2UpXG4gKlxuICogQHBhcmFtIGl0ZW0gdGhlIGl0ZW0gdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUvZmFsc2UgaW5kaWNhdGluZyBpZiB0aGUgaXRlbSBpcyBhIFdpZGdldEJhc2VDb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkge1xuICAgIHJldHVybiBCb29sZWFuKGl0ZW0gJiYgaXRlbS5fdHlwZSA9PT0gV0lER0VUX0JBU0VfVFlQRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQoaXRlbSkge1xuICAgIHJldHVybiBCb29sZWFuKGl0ZW0gJiZcbiAgICAgICAgaXRlbS5oYXNPd25Qcm9wZXJ0eSgnX19lc01vZHVsZScpICYmXG4gICAgICAgIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSAmJlxuICAgICAgICBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtLmRlZmF1bHQpKTtcbn1cbi8qKlxuICogVGhlIFJlZ2lzdHJ5IGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWdpc3RyeSBleHRlbmRzIEV2ZW50ZWQge1xuICAgIC8qKlxuICAgICAqIEVtaXQgbG9hZGVkIGV2ZW50IGZvciByZWdpc3RyeSBsYWJlbFxuICAgICAqL1xuICAgIGVtaXRMb2FkZWRFdmVudCh3aWRnZXRMYWJlbCwgaXRlbSkge1xuICAgICAgICB0aGlzLmVtaXQoe1xuICAgICAgICAgICAgdHlwZTogd2lkZ2V0TGFiZWwsXG4gICAgICAgICAgICBhY3Rpb246ICdsb2FkZWQnLFxuICAgICAgICAgICAgaXRlbVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVmaW5lKGxhYmVsLCBpdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLl93aWRnZXRSZWdpc3RyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeSA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB3aWRnZXQgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnJHtsYWJlbC50b1N0cmluZygpfSdgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIGl0ZW0pO1xuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIGl0ZW0udGhlbigod2lkZ2V0Q3RvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgd2lkZ2V0Q3Rvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiB3aWRnZXRDdG9yO1xuICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlZmluZUluamVjdG9yKGxhYmVsLCBpbmplY3RvckZhY3RvcnkpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luamVjdG9yUmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JSZWdpc3RyeSA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5qZWN0b3JSZWdpc3RyeS5oYXMobGFiZWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGluamVjdG9yIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBmb3IgJyR7bGFiZWwudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW52YWxpZGF0b3IgPSBuZXcgRXZlbnRlZCgpO1xuICAgICAgICBjb25zdCBpbmplY3Rvckl0ZW0gPSB7XG4gICAgICAgICAgICBpbmplY3RvcjogaW5qZWN0b3JGYWN0b3J5KCgpID0+IGludmFsaWRhdG9yLmVtaXQoeyB0eXBlOiAnaW52YWxpZGF0ZScgfSkpLFxuICAgICAgICAgICAgaW52YWxpZGF0b3JcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5faW5qZWN0b3JSZWdpc3RyeS5zZXQobGFiZWwsIGluamVjdG9ySXRlbSk7XG4gICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xuICAgIH1cbiAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLl93aWRnZXRSZWdpc3RyeSB8fCAhdGhpcy5oYXMobGFiZWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fd2lkZ2V0UmVnaXN0cnkuZ2V0KGxhYmVsKTtcbiAgICAgICAgaWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBpdGVtKCk7XG4gICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgcHJvbWlzZSk7XG4gICAgICAgIHByb21pc2UudGhlbigod2lkZ2V0Q3RvcikgPT4ge1xuICAgICAgICAgICAgaWYgKGlzV2lkZ2V0Q29uc3RydWN0b3JEZWZhdWx0RXhwb3J0KHdpZGdldEN0b3IpKSB7XG4gICAgICAgICAgICAgICAgd2lkZ2V0Q3RvciA9IHdpZGdldEN0b3IuZGVmYXVsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgd2lkZ2V0Q3Rvcik7XG4gICAgICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgd2lkZ2V0Q3Rvcik7XG4gICAgICAgICAgICByZXR1cm4gd2lkZ2V0Q3RvcjtcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBnZXRJbmplY3RvcihsYWJlbCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luamVjdG9yUmVnaXN0cnkgfHwgIXRoaXMuaGFzSW5qZWN0b3IobGFiZWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0b3JSZWdpc3RyeS5nZXQobGFiZWwpO1xuICAgIH1cbiAgICBoYXMobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fd2lkZ2V0UmVnaXN0cnkgJiYgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSk7XG4gICAgfVxuICAgIGhhc0luamVjdG9yKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2luamVjdG9yUmVnaXN0cnkgJiYgdGhpcy5faW5qZWN0b3JSZWdpc3RyeS5oYXMobGFiZWwpKTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBSZWdpc3RyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlZ2lzdHJ5Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvUmVnaXN0cnkubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvUmVnaXN0cnkubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IE1hcCB9IGZyb20gJy4uL3NoaW0vTWFwJztcbmltcG9ydCB7IEV2ZW50ZWQgfSBmcm9tICcuLi9jb3JlL0V2ZW50ZWQnO1xuaW1wb3J0IHsgUmVnaXN0cnkgfSBmcm9tICcuL1JlZ2lzdHJ5JztcbmV4cG9ydCBjbGFzcyBSZWdpc3RyeUhhbmRsZXIgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTtcbiAgICAgICAgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlUmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeVdpZGdldExhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlUmVnaXN0cnkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub3duKHsgZGVzdHJveSB9KTtcbiAgICB9XG4gICAgc2V0IGJhc2UoYmFzZVJlZ2lzdHJ5KSB7XG4gICAgICAgIGlmICh0aGlzLmJhc2VSZWdpc3RyeSkge1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iYXNlUmVnaXN0cnkgPSBiYXNlUmVnaXN0cnk7XG4gICAgfVxuICAgIGRlZmluZShsYWJlbCwgd2lkZ2V0KSB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmRlZmluZShsYWJlbCwgd2lkZ2V0KTtcbiAgICB9XG4gICAgZGVmaW5lSW5qZWN0b3IobGFiZWwsIGluamVjdG9yKSB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmRlZmluZUluamVjdG9yKGxhYmVsLCBpbmplY3Rvcik7XG4gICAgfVxuICAgIGhhcyhsYWJlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVnaXN0cnkuaGFzKGxhYmVsKSB8fCBCb29sZWFuKHRoaXMuYmFzZVJlZ2lzdHJ5ICYmIHRoaXMuYmFzZVJlZ2lzdHJ5LmhhcyhsYWJlbCkpO1xuICAgIH1cbiAgICBoYXNJbmplY3RvcihsYWJlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpIHx8IEJvb2xlYW4odGhpcy5iYXNlUmVnaXN0cnkgJiYgdGhpcy5iYXNlUmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpKTtcbiAgICB9XG4gICAgZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSwgJ2dldCcsIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXApO1xuICAgIH1cbiAgICBnZXRJbmplY3RvcihsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsICdnZXRJbmplY3RvcicsIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcCk7XG4gICAgfVxuICAgIF9nZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsIGdldEZ1bmN0aW9uTmFtZSwgbGFiZWxNYXApIHtcbiAgICAgICAgY29uc3QgcmVnaXN0cmllcyA9IGdsb2JhbFByZWNlZGVuY2UgPyBbdGhpcy5iYXNlUmVnaXN0cnksIHRoaXMuX3JlZ2lzdHJ5XSA6IFt0aGlzLl9yZWdpc3RyeSwgdGhpcy5iYXNlUmVnaXN0cnldO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZ2lzdHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcmVnaXN0cmllc1tpXTtcbiAgICAgICAgICAgIGlmICghcmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZWdpc3RyeVtnZXRGdW5jdGlvbk5hbWVdKGxhYmVsKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lzdGVyZWRMYWJlbHMgPSBsYWJlbE1hcC5nZXQocmVnaXN0cnkpIHx8IFtdO1xuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyZWRMYWJlbHMuaW5kZXhPZihsYWJlbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gcmVnaXN0cnkub24obGFiZWwsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbG9hZGVkJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tnZXRGdW5jdGlvbk5hbWVdKGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlKSA9PT0gZXZlbnQuaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KHsgdHlwZTogJ2ludmFsaWRhdGUnIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vd24oaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBsYWJlbE1hcC5zZXQocmVnaXN0cnksIFsuLi5yZWdpc3RlcmVkTGFiZWxzLCBsYWJlbF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IFJlZ2lzdHJ5SGFuZGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlZ2lzdHJ5SGFuZGxlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1JlZ2lzdHJ5SGFuZGxlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBNYXAgZnJvbSAnLi4vc2hpbS9NYXAnO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnLi4vc2hpbS9XZWFrTWFwJztcbmltcG9ydCBTeW1ib2wgZnJvbSAnLi4vc2hpbS9TeW1ib2wnO1xuaW1wb3J0IHsgdiB9IGZyb20gJy4vZCc7XG5pbXBvcnQgeyBhdXRvIH0gZnJvbSAnLi9kaWZmJztcbmltcG9ydCBSZWdpc3RyeUhhbmRsZXIgZnJvbSAnLi9SZWdpc3RyeUhhbmRsZXInO1xuaW1wb3J0IE5vZGVIYW5kbGVyIGZyb20gJy4vTm9kZUhhbmRsZXInO1xuaW1wb3J0IHsgd2lkZ2V0SW5zdGFuY2VNYXAgfSBmcm9tICcuL3Zkb20nO1xuaW1wb3J0IHsgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IsIFdJREdFVF9CQVNFX1RZUEUgfSBmcm9tICcuL1JlZ2lzdHJ5JztcbmNvbnN0IGRlY29yYXRvck1hcCA9IG5ldyBNYXAoKTtcbmNvbnN0IGJvdW5kQXV0byA9IGF1dG8uYmluZChudWxsKTtcbmV4cG9ydCBjb25zdCBub0JpbmQgPSBTeW1ib2wuZm9yKCdkb2pvTm9CaW5kJyk7XG4vKipcbiAqIE1haW4gd2lkZ2V0IGJhc2UgZm9yIGFsbCB3aWRnZXRzIHRvIGV4dGVuZFxuICovXG5leHBvcnQgY2xhc3MgV2lkZ2V0QmFzZSB7XG4gICAgLyoqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgaWYgaXQgaXMgdGhlIGluaXRpYWwgc2V0IHByb3BlcnRpZXMgY3ljbGVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFycmF5IG9mIHByb3BlcnR5IGtleXMgY29uc2lkZXJlZCBjaGFuZ2VkIGZyb20gdGhlIHByZXZpb3VzIHNldCBwcm9wZXJ0aWVzXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gW107XG4gICAgICAgIHRoaXMuX25vZGVIYW5kbGVyID0gbmV3IE5vZGVIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJGdW5jID0gdGhpcy5yZW5kZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYm91bmRJbnZhbGlkYXRlID0gdGhpcy5pbnZhbGlkYXRlLmJpbmQodGhpcyk7XG4gICAgICAgIHdpZGdldEluc3RhbmNlTWFwLnNldCh0aGlzLCB7XG4gICAgICAgICAgICBkaXJ0eTogdHJ1ZSxcbiAgICAgICAgICAgIG9uQXR0YWNoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkF0dGFjaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRGV0YWNoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRldGFjaCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vZGVIYW5kbGVyOiB0aGlzLl9ub2RlSGFuZGxlcixcbiAgICAgICAgICAgIHJlZ2lzdHJ5OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29yZVByb3BlcnRpZXM6IHt9LFxuICAgICAgICAgICAgcmVuZGVyaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlucHV0UHJvcGVydGllczoge31cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3J1bkFmdGVyQ29uc3RydWN0b3JzKCk7XG4gICAgfVxuICAgIG1ldGEoTWV0YVR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX21ldGFNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FjaGVkID0gdGhpcy5fbWV0YU1hcC5nZXQoTWV0YVR5cGUpO1xuICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgY2FjaGVkID0gbmV3IE1ldGFUeXBlKHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlOiB0aGlzLl9ib3VuZEludmFsaWRhdGUsXG4gICAgICAgICAgICAgICAgbm9kZUhhbmRsZXI6IHRoaXMuX25vZGVIYW5kbGVyLFxuICAgICAgICAgICAgICAgIGJpbmQ6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vd24oY2FjaGVkKTtcbiAgICAgICAgICAgIHRoaXMuX21ldGFNYXAuc2V0KE1ldGFUeXBlLCBjYWNoZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIG9uQXR0YWNoKCkge1xuICAgICAgICAvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4gICAgfVxuICAgIG9uRGV0YWNoKCkge1xuICAgICAgICAvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4gICAgfVxuICAgIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllcztcbiAgICB9XG4gICAgZ2V0IGNoYW5nZWRQcm9wZXJ0eUtleXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5c107XG4gICAgfVxuICAgIF9fc2V0Q29yZVByb3BlcnRpZXNfXyhjb3JlUHJvcGVydGllcykge1xuICAgICAgICBjb25zdCB7IGJhc2VSZWdpc3RyeSB9ID0gY29yZVByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iYXNlUmVnaXN0cnkgIT09IGJhc2VSZWdpc3RyeSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vd24odGhpcy5fcmVnaXN0cnkub24oJ2ludmFsaWRhdGUnLCB0aGlzLl9ib3VuZEludmFsaWRhdGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmJhc2UgPSBiYXNlUmVnaXN0cnk7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMgPSBjb3JlUHJvcGVydGllcztcbiAgICB9XG4gICAgX19zZXRQcm9wZXJ0aWVzX18ob3JpZ2luYWxQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLmlucHV0UHJvcGVydGllcyA9IG9yaWdpbmFsUHJvcGVydGllcztcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX3J1bkJlZm9yZVByb3BlcnRpZXMob3JpZ2luYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ3JlZ2lzdGVyZWREaWZmUHJvcGVydHknKTtcbiAgICAgICAgY29uc3QgY2hhbmdlZFByb3BlcnR5S2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyk7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWFsUHJvcGVydGllcyA9PT0gZmFsc2UgfHwgcmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgYWxsUHJvcGVydGllcyA9IFsuLi5wcm9wZXJ0eU5hbWVzLCAuLi5PYmplY3Qua2V5cyh0aGlzLl9wcm9wZXJ0aWVzKV07XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkUHJvcGVydGllcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZGlmZlByb3BlcnR5UmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgbGV0IHJ1blJlYWN0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZFByb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hlY2tlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUHJvcGVydHkgPSB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UHJvcGVydHkgPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0sIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iaW5kKTtcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuUmVhY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZkZ1bmN0aW9ucyA9IHRoaXMuZ2V0RGVjb3JhdG9yKGBkaWZmUHJvcGVydHk6JHtwcm9wZXJ0eU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZkZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGlmZkZ1bmN0aW9uc1tpXShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNoYW5nZWQgJiYgY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lIGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmUHJvcGVydHlSZXN1bHRzW3Byb3BlcnR5TmFtZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGJvdW5kQXV0byhwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlZCAmJiBjaGFuZ2VkUHJvcGVydHlLZXlzLmluZGV4T2YocHJvcGVydHlOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0eUtleXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlmZlByb3BlcnR5UmVzdWx0c1twcm9wZXJ0eU5hbWVdID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1blJlYWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWN0aW9uRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkUmVhY3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgcmVhY3Rpb25GdW5jdGlvbnMuZm9yRWFjaCgoeyByZWFjdGlvbiwgcHJvcGVydHlOYW1lIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlDaGFuZ2VkID0gY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFjdGlvblJ1biA9IGV4ZWN1dGVkUmVhY3Rpb25zLmluZGV4T2YocmVhY3Rpb24pICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5Q2hhbmdlZCAmJiAhcmVhY3Rpb25SdW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmNhbGwodGhpcywgdGhpcy5fcHJvcGVydGllcywgZGlmZlByb3BlcnR5UmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZFJlYWN0aW9ucy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IGRpZmZQcm9wZXJ0eVJlc3VsdHM7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gY2hhbmdlZFByb3BlcnR5S2V5cztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWVzW2ldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSwgaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJpbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cyA9IGNoYW5nZWRQcm9wZXJ0eUtleXM7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gICAgfVxuICAgIF9fc2V0Q2hpbGRyZW5fXyhjaGlsZHJlbikge1xuICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW4ubGVuZ3RoID4gMCB8fCBjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX19yZW5kZXJfXygpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpbnN0YW5jZURhdGEuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gdGhpcy5fcnVuQmVmb3JlUmVuZGVycygpO1xuICAgICAgICBsZXQgZE5vZGUgPSByZW5kZXIoKTtcbiAgICAgICAgZE5vZGUgPSB0aGlzLnJ1bkFmdGVyUmVuZGVycyhkTm9kZSk7XG4gICAgICAgIHRoaXMuX25vZGVIYW5kbGVyLmNsZWFyKCk7XG4gICAgICAgIHJldHVybiBkTm9kZTtcbiAgICB9XG4gICAgaW52YWxpZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmludmFsaWRhdGUpIHtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdignZGl2Jywge30sIHRoaXMuY2hpbGRyZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBhZGQgZGVjb3JhdG9ycyB0byBXaWRnZXRCYXNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGRlY29yYXRvclxuICAgICAqL1xuICAgIGFkZERlY29yYXRvcihkZWNvcmF0b3JLZXksIHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KCdjb25zdHJ1Y3RvcicpKSB7XG4gICAgICAgICAgICBsZXQgZGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvck1hcC5nZXQodGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICBpZiAoIWRlY29yYXRvckxpc3QpIHtcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JMaXN0ID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgICAgIGRlY29yYXRvck1hcC5zZXQodGhpcy5jb25zdHJ1Y3RvciwgZGVjb3JhdG9yTGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc3BlY2lmaWNEZWNvcmF0b3JMaXN0ID0gZGVjb3JhdG9yTGlzdC5nZXQoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgICAgIGlmICghc3BlY2lmaWNEZWNvcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgc3BlY2lmaWNEZWNvcmF0b3JMaXN0ID0gW107XG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yTGlzdC5zZXQoZGVjb3JhdG9yS2V5LCBzcGVjaWZpY0RlY29yYXRvckxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3BlY2lmaWNEZWNvcmF0b3JMaXN0LnB1c2goLi4udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICB0aGlzLl9kZWNvcmF0b3JDYWNoZS5zZXQoZGVjb3JhdG9yS2V5LCBbLi4uZGVjb3JhdG9ycywgLi4udmFsdWVdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBidWlsZCB0aGUgbGlzdCBvZiBkZWNvcmF0b3JzIGZyb20gdGhlIGdsb2JhbCBkZWNvcmF0b3IgbWFwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSAgVGhlIGtleSBvZiB0aGUgZGVjb3JhdG9yXG4gICAgICogQHJldHVybiBBbiBhcnJheSBvZiBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYnVpbGREZWNvcmF0b3JMaXN0KGRlY29yYXRvcktleSkge1xuICAgICAgICBjb25zdCBhbGxEZWNvcmF0b3JzID0gW107XG4gICAgICAgIGxldCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgIHdoaWxlIChjb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VNYXAgPSBkZWNvcmF0b3JNYXAuZ2V0KGNvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU1hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBpbnN0YW5jZU1hcC5nZXQoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdG9ycykge1xuICAgICAgICAgICAgICAgICAgICBhbGxEZWNvcmF0b3JzLnVuc2hpZnQoLi4uZGVjb3JhdG9ycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY29uc3RydWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byByZXRyaWV2ZSBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGRlY29yYXRvciB2YWx1ZXNcbiAgICAgKi9cbiAgICBnZXREZWNvcmF0b3IoZGVjb3JhdG9yS2V5KSB7XG4gICAgICAgIGxldCBhbGxEZWNvcmF0b3JzID0gdGhpcy5fZGVjb3JhdG9yQ2FjaGUuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgIGlmIChhbGxEZWNvcmF0b3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgICAgICB9XG4gICAgICAgIGFsbERlY29yYXRvcnMgPSB0aGlzLl9idWlsZERlY29yYXRvckxpc3QoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgYWxsRGVjb3JhdG9ycyk7XG4gICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCaW5kcyB1bmJvdW5kIHByb3BlcnR5IGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBiaW5kYCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgZnVuY3Rpb25zXG4gICAgICovXG4gICAgX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnR5LCBiaW5kKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIXByb3BlcnR5W25vQmluZF0gJiYgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IocHJvcGVydHkpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiaW5kSW5mbyA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwLmdldChwcm9wZXJ0eSkgfHwge307XG4gICAgICAgICAgICBsZXQgeyBib3VuZEZ1bmMsIHNjb3BlIH0gPSBiaW5kSW5mbztcbiAgICAgICAgICAgIGlmIChib3VuZEZ1bmMgPT09IHVuZGVmaW5lZCB8fCBzY29wZSAhPT0gYmluZCkge1xuICAgICAgICAgICAgICAgIGJvdW5kRnVuYyA9IHByb3BlcnR5LmJpbmQoYmluZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAuc2V0KHByb3BlcnR5LCB7IGJvdW5kRnVuYywgc2NvcGU6IGJpbmQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm91bmRGdW5jO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gICAgZ2V0IHJlZ2lzdHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyKCk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeTtcbiAgICB9XG4gICAgX3J1bkJlZm9yZVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBiZWZvcmVQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnKTtcbiAgICAgICAgaWYgKGJlZm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJlZm9yZVByb3BlcnRpZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBiZWZvcmVQcm9wZXJ0aWVzRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uLmNhbGwodGhpcywgcHJvcGVydGllcykpO1xuICAgICAgICAgICAgfSwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYmVmb3JlIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgdXBkYXRlZCByZW5kZXIgbWV0aG9kXG4gICAgICovXG4gICAgX3J1bkJlZm9yZVJlbmRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZVJlbmRlcnMgPSB0aGlzLmdldERlY29yYXRvcignYmVmb3JlUmVuZGVyJyk7XG4gICAgICAgIGlmIChiZWZvcmVSZW5kZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmVSZW5kZXJzLnJlZHVjZSgocmVuZGVyLCBiZWZvcmVSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZW5kZXIgPSBiZWZvcmVSZW5kZXJGdW5jdGlvbi5jYWxsKHRoaXMsIHJlbmRlciwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlciBmdW5jdGlvbiBub3QgcmV0dXJuZWQgZnJvbSBiZWZvcmVSZW5kZXIsIHVzaW5nIHByZXZpb3VzIHJlbmRlcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZFJlbmRlcjtcbiAgICAgICAgICAgIH0sIHRoaXMuX2JvdW5kUmVuZGVyRnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kUmVuZGVyRnVuYztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGFsbCByZWdpc3RlcmVkIGFmdGVyIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgZGVjb3JhdGVkIEROb2Rlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGROb2RlIFRoZSBETm9kZXMgdG8gcnVuIHRocm91Z2ggdGhlIGFmdGVyIHJlbmRlcnNcbiAgICAgKi9cbiAgICBydW5BZnRlclJlbmRlcnMoZE5vZGUpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJSZW5kZXJzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJyk7XG4gICAgICAgIGlmIChhZnRlclJlbmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZE5vZGUgPSBhZnRlclJlbmRlcnMucmVkdWNlKChkTm9kZSwgYWZ0ZXJSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZnRlclJlbmRlckZ1bmN0aW9uLmNhbGwodGhpcywgZE5vZGUpO1xuICAgICAgICAgICAgfSwgZE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9tZXRhTWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX21ldGFNYXAuZm9yRWFjaCgobWV0YSkgPT4ge1xuICAgICAgICAgICAgICAgIG1ldGEuYWZ0ZXJSZW5kZXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkTm9kZTtcbiAgICB9XG4gICAgX3J1bkFmdGVyQ29uc3RydWN0b3JzKCkge1xuICAgICAgICBjb25zdCBhZnRlckNvbnN0cnVjdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdhZnRlckNvbnN0cnVjdG9yJyk7XG4gICAgICAgIGlmIChhZnRlckNvbnN0cnVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhZnRlckNvbnN0cnVjdG9ycy5mb3JFYWNoKChhZnRlckNvbnN0cnVjdG9yKSA9PiBhZnRlckNvbnN0cnVjdG9yLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG93bihoYW5kbGUpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLl9oYW5kbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IHRoaXMuX2hhbmRsZXMucG9wKCk7XG4gICAgICAgICAgICBpZiAoaGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogc3RhdGljIGlkZW50aWZpZXJcbiAqL1xuV2lkZ2V0QmFzZS5fdHlwZSA9IFdJREdFVF9CQVNFX1RZUEU7XG5leHBvcnQgZGVmYXVsdCBXaWRnZXRCYXNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2lkZ2V0QmFzZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1dpZGdldEJhc2UubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwibGV0IGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUgPSAnJztcbmxldCBicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnJztcbmZ1bmN0aW9uIGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQpIHtcbiAgICBpZiAoJ1dlYmtpdFRyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUpIHtcbiAgICAgICAgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICd3ZWJraXRUcmFuc2l0aW9uRW5kJztcbiAgICAgICAgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKCd0cmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlIHx8ICdNb3pUcmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlKSB7XG4gICAgICAgIGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUgPSAndHJhbnNpdGlvbmVuZCc7XG4gICAgICAgIGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9ICdhbmltYXRpb25lbmQnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIGJyb3dzZXIgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRpYWxpemUoZWxlbWVudCkge1xuICAgIGlmIChicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPT09ICcnKSB7XG4gICAgICAgIGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJ1bkFuZENsZWFuVXAoZWxlbWVudCwgc3RhcnRBbmltYXRpb24sIGZpbmlzaEFuaW1hdGlvbikge1xuICAgIGluaXRpYWxpemUoZWxlbWVudCk7XG4gICAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gICAgbGV0IHRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgZmluaXNoQW5pbWF0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHN0YXJ0QW5pbWF0aW9uKCk7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xufVxuZnVuY3Rpb24gZXhpdChub2RlLCBwcm9wZXJ0aWVzLCBleGl0QW5pbWF0aW9uLCByZW1vdmVOb2RlKSB7XG4gICAgY29uc3QgYWN0aXZlQ2xhc3MgPSBwcm9wZXJ0aWVzLmV4aXRBbmltYXRpb25BY3RpdmUgfHwgYCR7ZXhpdEFuaW1hdGlvbn0tYWN0aXZlYDtcbiAgICBydW5BbmRDbGVhblVwKG5vZGUsICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGV4aXRBbmltYXRpb24pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgICByZW1vdmVOb2RlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBlbnRlcihub2RlLCBwcm9wZXJ0aWVzLCBlbnRlckFuaW1hdGlvbikge1xuICAgIGNvbnN0IGFjdGl2ZUNsYXNzID0gcHJvcGVydGllcy5lbnRlckFuaW1hdGlvbkFjdGl2ZSB8fCBgJHtlbnRlckFuaW1hdGlvbn0tYWN0aXZlYDtcbiAgICBydW5BbmRDbGVhblVwKG5vZGUsICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGVudGVyQW5pbWF0aW9uKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChhY3RpdmVDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgIH0sICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGVudGVyQW5pbWF0aW9uKTtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGFjdGl2ZUNsYXNzKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBlbnRlcixcbiAgICBleGl0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3NzVHJhbnNpdGlvbnMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi4vc2hpbS9TeW1ib2wnO1xuLyoqXG4gKiBUaGUgc3ltYm9sIGlkZW50aWZpZXIgZm9yIGEgV05vZGUgdHlwZVxuICovXG5leHBvcnQgY29uc3QgV05PREUgPSBTeW1ib2woJ0lkZW50aWZpZXIgZm9yIGEgV05vZGUuJyk7XG4vKipcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBWTm9kZSB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBWTk9ERSA9IFN5bWJvbCgnSWRlbnRpZmllciBmb3IgYSBWTm9kZS4nKTtcbi8qKlxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFZOb2RlIHR5cGUgY3JlYXRlZCB1c2luZyBkb20oKVxuICovXG5leHBvcnQgY29uc3QgRE9NVk5PREUgPSBTeW1ib2woJ0lkZW50aWZpZXIgZm9yIGEgVk5vZGUgY3JlYXRlZCB1c2luZyBleGlzdGluZyBkb20uJyk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgYEROb2RlYCBpcyBhIGBXTm9kZWAgdXNpbmcgdGhlIGB0eXBlYCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXTm9kZShjaGlsZCkge1xuICAgIHJldHVybiBCb29sZWFuKGNoaWxkICYmIHR5cGVvZiBjaGlsZCAhPT0gJ3N0cmluZycgJiYgY2hpbGQudHlwZSA9PT0gV05PREUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgVk5vZGVgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVk5vZGUoY2hpbGQpIHtcbiAgICByZXR1cm4gQm9vbGVhbihjaGlsZCAmJiB0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnICYmIChjaGlsZC50eXBlID09PSBWTk9ERSB8fCBjaGlsZC50eXBlID09PSBET01WTk9ERSkpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgVk5vZGVgIGNyZWF0ZWQgd2l0aCBgZG9tKClgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRG9tVk5vZGUoY2hpbGQpIHtcbiAgICByZXR1cm4gQm9vbGVhbihjaGlsZCAmJiB0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnICYmIGNoaWxkLnR5cGUgPT09IERPTVZOT0RFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnROb2RlKHZhbHVlKSB7XG4gICAgcmV0dXJuICEhdmFsdWUudGFnTmFtZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZShkTm9kZXMsIG9wdGlvbnNPck1vZGlmaWVyLCBwcmVkaWNhdGUpIHtcbiAgICBsZXQgc2hhbGxvdyA9IGZhbHNlO1xuICAgIGxldCBtb2RpZmllcjtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNPck1vZGlmaWVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG1vZGlmaWVyID0gb3B0aW9uc09yTW9kaWZpZXI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBtb2RpZmllciA9IG9wdGlvbnNPck1vZGlmaWVyLm1vZGlmaWVyO1xuICAgICAgICBwcmVkaWNhdGUgPSBvcHRpb25zT3JNb2RpZmllci5wcmVkaWNhdGU7XG4gICAgICAgIHNoYWxsb3cgPSBvcHRpb25zT3JNb2RpZmllci5zaGFsbG93IHx8IGZhbHNlO1xuICAgIH1cbiAgICBsZXQgbm9kZXMgPSBBcnJheS5pc0FycmF5KGROb2RlcykgPyBbLi4uZE5vZGVzXSA6IFtkTm9kZXNdO1xuICAgIGZ1bmN0aW9uIGJyZWFrZXIoKSB7XG4gICAgICAgIG5vZGVzID0gW107XG4gICAgfVxuICAgIHdoaWxlIChub2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnNoaWZ0KCk7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoIXNoYWxsb3cgJiYgKGlzV05vZGUobm9kZSkgfHwgaXNWTm9kZShub2RlKSkgJiYgbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIG5vZGVzID0gWy4uLm5vZGVzLCAuLi5ub2RlLmNoaWxkcmVuXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZShub2RlKSkge1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyKG5vZGUsIGJyZWFrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkTm9kZXM7XG59XG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIGNhbGxzIHRvIGNyZWF0ZSBhIHdpZGdldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHcod2lkZ2V0Q29uc3RydWN0b3IsIHByb3BlcnRpZXMsIGNoaWxkcmVuID0gW10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgd2lkZ2V0Q29uc3RydWN0b3IsXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIHR5cGU6IFdOT0RFXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB2KHRhZywgcHJvcGVydGllc09yQ2hpbGRyZW4gPSB7fSwgY2hpbGRyZW4gPSB1bmRlZmluZWQpIHtcbiAgICBsZXQgcHJvcGVydGllcyA9IHByb3BlcnRpZXNPckNoaWxkcmVuO1xuICAgIGxldCBkZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjaztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzT3JDaGlsZHJlbikpIHtcbiAgICAgICAgY2hpbGRyZW4gPSBwcm9wZXJ0aWVzT3JDaGlsZHJlbjtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2sgPSBwcm9wZXJ0aWVzO1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRhZyxcbiAgICAgICAgZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2ssXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICB0eXBlOiBWTk9ERVxuICAgIH07XG59XG4vKipcbiAqIENyZWF0ZSBhIFZOb2RlIGZvciBhbiBleGlzdGluZyBET00gTm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvbSh7IG5vZGUsIGF0dHJzID0ge30sIHByb3BzID0ge30sIG9uID0ge30sIGRpZmZUeXBlID0gJ25vbmUnIH0sIGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGFnOiBpc0VsZW1lbnROb2RlKG5vZGUpID8gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgOiAnJyxcbiAgICAgICAgcHJvcGVydGllczogcHJvcHMsXG4gICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJzLFxuICAgICAgICBldmVudHM6IG9uLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdHlwZTogRE9NVk5PREUsXG4gICAgICAgIGRvbU5vZGU6IG5vZGUsXG4gICAgICAgIHRleHQ6IGlzRWxlbWVudE5vZGUobm9kZSkgPyB1bmRlZmluZWQgOiBub2RlLmRhdGEsXG4gICAgICAgIGRpZmZUeXBlXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2QubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmV4cG9ydCBmdW5jdGlvbiBhZnRlclJlbmRlcihtZXRob2QpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJywgcHJvcGVydHlLZXkgPyB0YXJnZXRbcHJvcGVydHlLZXldIDogbWV0aG9kKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGFmdGVyUmVuZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWZ0ZXJSZW5kZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmltcG9ydCB7IGJlZm9yZVByb3BlcnRpZXMgfSBmcm9tICcuL2JlZm9yZVByb3BlcnRpZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGFsd2F5c1JlbmRlcigpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIGJlZm9yZVByb3BlcnRpZXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH0pKHRhcmdldCk7XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBhbHdheXNSZW5kZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbHdheXNSZW5kZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZVByb3BlcnRpZXMobWV0aG9kKSB7XG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdiZWZvcmVQcm9wZXJ0aWVzJywgcHJvcGVydHlLZXkgPyB0YXJnZXRbcHJvcGVydHlLZXldIDogbWV0aG9kKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGJlZm9yZVByb3BlcnRpZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iZWZvcmVQcm9wZXJ0aWVzLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9iZWZvcmVQcm9wZXJ0aWVzLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYmVmb3JlUHJvcGVydGllcy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IHsgQ3VzdG9tRWxlbWVudENoaWxkVHlwZSB9IGZyb20gJy4uL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCc7XG5pbXBvcnQgUmVnaXN0cnkgZnJvbSAnLi4vUmVnaXN0cnknO1xuLyoqXG4gKiBUaGlzIERlY29yYXRvciBpcyBwcm92aWRlZCBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIHRoZSBiZWhhdmlvciBvZiBhIGN1c3RvbSBlbGVtZW50LCBhbmRcbiAqIHJlZ2lzdGVycyB0aGF0IGN1c3RvbSBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tRWxlbWVudCh7IHRhZywgcHJvcGVydGllcyA9IFtdLCBhdHRyaWJ1dGVzID0gW10sIGV2ZW50cyA9IFtdLCBjaGlsZFR5cGUgPSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8sIHJlZ2lzdHJ5RmFjdG9yeSA9ICgpID0+IG5ldyBSZWdpc3RyeSgpIH0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICB0YXJnZXQucHJvdG90eXBlLl9fY3VzdG9tRWxlbWVudERlc2NyaXB0b3IgPSB7XG4gICAgICAgICAgICB0YWdOYW1lOiB0YWcsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICAgIGNoaWxkVHlwZSxcbiAgICAgICAgICAgIHJlZ2lzdHJ5RmFjdG9yeVxuICAgICAgICB9O1xuICAgIH07XG59XG5leHBvcnQgZGVmYXVsdCBjdXN0b21FbGVtZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3VzdG9tRWxlbWVudC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvY3VzdG9tRWxlbWVudC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmltcG9ydCB7IGF1dG8gfSBmcm9tICcuLy4uL2RpZmYnO1xuLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZWdpc3RlciBhIGZ1bmN0aW9uIGFzIGEgc3BlY2lmaWMgcHJvcGVydHkgZGlmZlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvZiB3aGljaCB0aGUgZGlmZiBmdW5jdGlvbiBpcyBhcHBsaWVkXG4gKiBAcGFyYW0gZGlmZlR5cGUgICAgICBUaGUgZGlmZiB0eXBlLCBkZWZhdWx0IGlzIERpZmZUeXBlLkFVVE8uXG4gKiBAcGFyYW0gZGlmZkZ1bmN0aW9uICBBIGRpZmYgZnVuY3Rpb24gdG8gcnVuIGlmIGRpZmZUeXBlIGlmIERpZmZUeXBlLkNVU1RPTVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZlByb3BlcnR5KHByb3BlcnR5TmFtZSwgZGlmZkZ1bmN0aW9uID0gYXV0bywgcmVhY3Rpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcihgZGlmZlByb3BlcnR5OiR7cHJvcGVydHlOYW1lfWAsIGRpZmZGdW5jdGlvbi5iaW5kKG51bGwpKTtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcigncmVnaXN0ZXJlZERpZmZQcm9wZXJ0eScsIHByb3BlcnR5TmFtZSk7XG4gICAgICAgIGlmIChyZWFjdGlvbkZ1bmN0aW9uIHx8IHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdkaWZmUmVhY3Rpb24nLCB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgICAgIHJlYWN0aW9uOiBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiByZWFjdGlvbkZ1bmN0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgZGlmZlByb3BlcnR5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlmZlByb3BlcnR5Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9kaWZmUHJvcGVydHkubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9kaWZmUHJvcGVydHkubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsIi8qKlxuICogR2VuZXJpYyBkZWNvcmF0b3IgaGFuZGxlciB0byB0YWtlIGNhcmUgb2Ygd2hldGhlciBvciBub3QgdGhlIGRlY29yYXRvciB3YXMgY2FsbGVkIGF0IHRoZSBjbGFzcyBsZXZlbFxuICogb3IgdGhlIG1ldGhvZCBsZXZlbC5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdG9yKGhhbmRsZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGhhbmRsZXIodGFyZ2V0LnByb3RvdHlwZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZXIodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlRGVjb3JhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFuZGxlRGVjb3JhdG9yLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9oYW5kbGVEZWNvcmF0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9oYW5kbGVEZWNvcmF0b3IubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBXZWFrTWFwIGZyb20gJy4uLy4uL3NoaW0vV2Vha01hcCc7XG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0b3IgfSBmcm9tICcuL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBiZWZvcmVQcm9wZXJ0aWVzIH0gZnJvbSAnLi9iZWZvcmVQcm9wZXJ0aWVzJztcbi8qKlxuICogTWFwIG9mIGluc3RhbmNlcyBhZ2FpbnN0IHJlZ2lzdGVyZWQgaW5qZWN0b3JzLlxuICovXG5jb25zdCByZWdpc3RlcmVkSW5qZWN0b3JzTWFwID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogRGVjb3JhdG9yIHJldHJpZXZlcyBhbiBpbmplY3RvciBmcm9tIGFuIGF2YWlsYWJsZSByZWdpc3RyeSB1c2luZyB0aGUgbmFtZSBhbmRcbiAqIGNhbGxzIHRoZSBgZ2V0UHJvcGVydGllc2AgZnVuY3Rpb24gd2l0aCB0aGUgcGF5bG9hZCBmcm9tIHRoZSBpbmplY3RvclxuICogYW5kIGN1cnJlbnQgcHJvcGVydGllcyB3aXRoIHRoZSB0aGUgaW5qZWN0ZWQgcHJvcGVydGllcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gSW5qZWN0Q29uZmlnIHRoZSBpbmplY3QgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KHsgbmFtZSwgZ2V0UHJvcGVydGllcyB9KSB7XG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgICAgICBiZWZvcmVQcm9wZXJ0aWVzKGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBpbmplY3Rvckl0ZW0gPSB0aGlzLnJlZ2lzdHJ5LmdldEluamVjdG9yKG5hbWUpO1xuICAgICAgICAgICAgaWYgKGluamVjdG9ySXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaW5qZWN0b3IsIGludmFsaWRhdG9yIH0gPSBpbmplY3Rvckl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnaXN0ZXJlZEluamVjdG9ycyA9IHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAuZ2V0KHRoaXMpIHx8IFtdO1xuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RlcmVkSW5qZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkSW5qZWN0b3JzTWFwLnNldCh0aGlzLCByZWdpc3RlcmVkSW5qZWN0b3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVyZWRJbmplY3RvcnMuaW5kZXhPZihpbmplY3Rvckl0ZW0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm93bihpbnZhbGlkYXRvci5vbignaW52YWxpZGF0ZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRJbmplY3RvcnMucHVzaChpbmplY3Rvckl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydGllcyhpbmplY3RvcigpLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkodGFyZ2V0KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGluamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluamVjdC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBXSURHRVRfQkFTRV9UWVBFIH0gZnJvbSAnLi9SZWdpc3RyeSc7XG5mdW5jdGlvbiBpc09iamVjdE9yQXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYWx3YXlzKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbmdlZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmUocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2UocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiBwcmV2aW91c1Byb3BlcnR5ICE9PSBuZXdQcm9wZXJ0eSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93KHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBjb25zdCB2YWxpZE9sZFByb3BlcnR5ID0gcHJldmlvdXNQcm9wZXJ0eSAmJiBpc09iamVjdE9yQXJyYXkocHJldmlvdXNQcm9wZXJ0eSk7XG4gICAgY29uc3QgdmFsaWROZXdQcm9wZXJ0eSA9IG5ld1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShuZXdQcm9wZXJ0eSk7XG4gICAgaWYgKCF2YWxpZE9sZFByb3BlcnR5IHx8ICF2YWxpZE5ld1Byb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjaGFuZ2VkOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzS2V5cyA9IE9iamVjdC5rZXlzKHByZXZpb3VzUHJvcGVydHkpO1xuICAgIGNvbnN0IG5ld0tleXMgPSBPYmplY3Qua2V5cyhuZXdQcm9wZXJ0eSk7XG4gICAgaWYgKHByZXZpb3VzS2V5cy5sZW5ndGggIT09IG5ld0tleXMubGVuZ3RoKSB7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY2hhbmdlZCA9IG5ld0tleXMuc29tZSgoa2V5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3UHJvcGVydHlba2V5XSAhPT0gcHJldmlvdXNQcm9wZXJ0eVtrZXldO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbmdlZCxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhdXRvKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodHlwZW9mIG5ld1Byb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChuZXdQcm9wZXJ0eS5fdHlwZSA9PT0gV0lER0VUX0JBU0VfVFlQRSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGlnbm9yZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3RPckFycmF5KG5ld1Byb3BlcnR5KSkge1xuICAgICAgICByZXN1bHQgPSBzaGFsbG93KHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaWZmLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGlmZi5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kaWZmLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnLi4vLi4vY29yZS9sYW5nJztcbmltcG9ydCBjc3NUcmFuc2l0aW9ucyBmcm9tICcuLi9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zJztcbmltcG9ydCB7IGFmdGVyUmVuZGVyIH0gZnJvbSAnLi8uLi9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyJztcbmltcG9ydCB7IHYgfSBmcm9tICcuLy4uL2QnO1xuaW1wb3J0IHsgZG9tIH0gZnJvbSAnLi8uLi92ZG9tJztcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYXR0YWNoIHN0YXRlIG9mIHRoZSBwcm9qZWN0b3JcbiAqL1xuZXhwb3J0IHZhciBQcm9qZWN0b3JBdHRhY2hTdGF0ZTtcbihmdW5jdGlvbiAoUHJvamVjdG9yQXR0YWNoU3RhdGUpIHtcbiAgICBQcm9qZWN0b3JBdHRhY2hTdGF0ZVtQcm9qZWN0b3JBdHRhY2hTdGF0ZVtcIkF0dGFjaGVkXCJdID0gMV0gPSBcIkF0dGFjaGVkXCI7XG4gICAgUHJvamVjdG9yQXR0YWNoU3RhdGVbUHJvamVjdG9yQXR0YWNoU3RhdGVbXCJEZXRhY2hlZFwiXSA9IDJdID0gXCJEZXRhY2hlZFwiO1xufSkoUHJvamVjdG9yQXR0YWNoU3RhdGUgfHwgKFByb2plY3RvckF0dGFjaFN0YXRlID0ge30pKTtcbi8qKlxuICogQXR0YWNoIHR5cGUgZm9yIHRoZSBwcm9qZWN0b3JcbiAqL1xuZXhwb3J0IHZhciBBdHRhY2hUeXBlO1xuKGZ1bmN0aW9uIChBdHRhY2hUeXBlKSB7XG4gICAgQXR0YWNoVHlwZVtBdHRhY2hUeXBlW1wiQXBwZW5kXCJdID0gMV0gPSBcIkFwcGVuZFwiO1xuICAgIEF0dGFjaFR5cGVbQXR0YWNoVHlwZVtcIk1lcmdlXCJdID0gMl0gPSBcIk1lcmdlXCI7XG59KShBdHRhY2hUeXBlIHx8IChBdHRhY2hUeXBlID0ge30pKTtcbmV4cG9ydCBmdW5jdGlvbiBQcm9qZWN0b3JNaXhpbihCYXNlKSB7XG4gICAgY2xhc3MgUHJvamVjdG9yIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICB0aGlzLl9hc3luYyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uczogY3NzVHJhbnNpdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnJvb3QgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0b3JTdGF0ZSA9IFByb2plY3RvckF0dGFjaFN0YXRlLkRldGFjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZChyb290KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IEF0dGFjaFR5cGUuQXBwZW5kLFxuICAgICAgICAgICAgICAgIHJvb3RcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIG1lcmdlKHJvb3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogQXR0YWNoVHlwZS5NZXJnZSxcbiAgICAgICAgICAgICAgICByb290XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgcm9vdChyb290KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBhbHJlYWR5IGF0dGFjaGVkLCBjYW5ub3QgY2hhbmdlIHJvb3QgZWxlbWVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHJvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHJvb3QoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9vdDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgYXN5bmMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXN5bmM7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGFzeW5jKGFzeW5jKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBhbHJlYWR5IGF0dGFjaGVkLCBjYW5ub3QgY2hhbmdlIGFzeW5jIG1vZGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2FzeW5jID0gYXN5bmM7XG4gICAgICAgIH1cbiAgICAgICAgc2FuZGJveChkb2MgPSBkb2N1bWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNyZWF0ZSBzYW5kYm94Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9hc3luYyA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNSb290ID0gdGhpcy5yb290O1xuICAgICAgICAgICAgLyogZnJlZSB1cCB0aGUgZG9jdW1lbnQgZnJhZ21lbnQgZm9yIEdDICovXG4gICAgICAgICAgICB0aGlzLm93bih7XG4gICAgICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb290ID0gcHJldmlvdXNSb290O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fYXR0YWNoKHtcbiAgICAgICAgICAgICAgICAvKiBEb2N1bWVudEZyYWdtZW50IGlzIG5vdCBhc3NpZ25hYmxlIHRvIEVsZW1lbnQsIGJ1dCBwcm92aWRlcyBldmVyeXRoaW5nIG5lZWRlZCB0byB3b3JrICovXG4gICAgICAgICAgICAgICAgcm9vdDogZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBBdHRhY2hUeXBlLkFwcGVuZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX19zZXRDaGlsZHJlbl9fKGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX19zZXRQcm9wZXJ0aWVzX18ocHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgX19zZXRQcm9wZXJ0aWVzX18ocHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMgJiYgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcy5yZWdpc3RyeSAhPT0gcHJvcGVydGllcy5yZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMgPSBhc3NpZ24oe30sIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgc3VwZXIuX19zZXRDb3JlUHJvcGVydGllc19fKHsgYmluZDogdGhpcywgYmFzZVJlZ2lzdHJ5OiBwcm9wZXJ0aWVzLnJlZ2lzdHJ5IH0pO1xuICAgICAgICAgICAgc3VwZXIuX19zZXRQcm9wZXJ0aWVzX18ocHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgdG9IdG1sKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgIT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkIHx8ICF0aGlzLl9wcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgaXMgbm90IGF0dGFjaGVkLCBjYW5ub3QgcmV0dXJuIGFuIEhUTUwgc3RyaW5nIG9mIHByb2plY3Rpb24uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbi5kb21Ob2RlLmNoaWxkTm9kZXNbMF0ub3V0ZXJIVE1MO1xuICAgICAgICB9XG4gICAgICAgIGFmdGVyUmVuZGVyKHJlc3VsdCkge1xuICAgICAgICAgICAgbGV0IG5vZGUgPSByZXN1bHQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgfHwgcmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbm9kZSA9IHYoJ3NwYW4nLCB7fSwgW3Jlc3VsdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBfYXR0YWNoKHsgdHlwZSwgcm9vdCB9KSB7XG4gICAgICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fYXR0YWNoSGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaEhhbmRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvamVjdG9yU3RhdGUgPSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZDtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IHtcbiAgICAgICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdG9yU3RhdGUgPSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5EZXRhY2hlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm93bihoYW5kbGUpO1xuICAgICAgICAgICAgdGhpcy5fYXR0YWNoSGFuZGxlID0gaGFuZGxlO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucywgeyBzeW5jOiAhdGhpcy5fYXN5bmMgfSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEF0dGFjaFR5cGUuQXBwZW5kOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uID0gZG9tLmFwcGVuZCh0aGlzLnJvb3QsIHRoaXMsIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBdHRhY2hUeXBlLk1lcmdlOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uID0gZG9tLm1lcmdlKHRoaXMucm9vdCwgdGhpcywgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hIYW5kbGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAgICAgICAgYWZ0ZXJSZW5kZXIoKVxuICAgIF0sIFByb2plY3Rvci5wcm90b3R5cGUsIFwiYWZ0ZXJSZW5kZXJcIiwgbnVsbCk7XG4gICAgcmV0dXJuIFByb2plY3Rvcjtcbn1cbmV4cG9ydCBkZWZhdWx0IFByb2plY3Rvck1peGluO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvamVjdG9yLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9taXhpbnMvUHJvamVjdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICcuLy4uL0luamVjdG9yJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9pbmplY3QnO1xuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi8uLi9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBkaWZmUHJvcGVydHkgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5JztcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICcuLy4uL2RpZmYnO1xuY29uc3QgVEhFTUVfS0VZID0gJyBfa2V5JztcbmV4cG9ydCBjb25zdCBJTkpFQ1RFRF9USEVNRV9LRVkgPSBTeW1ib2woJ3RoZW1lJyk7XG4vKipcbiAqIERlY29yYXRvciBmb3IgYmFzZSBjc3MgY2xhc3Nlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWUodGhlbWUpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycsIHRoZW1lKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHJldmVyc2UgbG9va3VwIGZvciB0aGUgY2xhc3NlcyBwYXNzZWQgaW4gdmlhIHRoZSBgdGhlbWVgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBjbGFzc2VzIFRoZSBiYXNlQ2xhc3NlcyBvYmplY3RcbiAqIEByZXF1aXJlc1xuICovXG5mdW5jdGlvbiBjcmVhdGVUaGVtZUNsYXNzZXNMb29rdXAoY2xhc3Nlcykge1xuICAgIHJldHVybiBjbGFzc2VzLnJlZHVjZSgoY3VycmVudENsYXNzTmFtZXMsIGJhc2VDbGFzcykgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhiYXNlQ2xhc3MpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY3VycmVudENsYXNzTmFtZXNbYmFzZUNsYXNzW2tleV1dID0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDbGFzc05hbWVzO1xuICAgIH0sIHt9KTtcbn1cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBpcyBnaXZlbiBhIHRoZW1lIGFuZCBhbiBvcHRpb25hbCByZWdpc3RyeSwgdGhlIHRoZW1lXG4gKiBpbmplY3RvciBpcyBkZWZpbmVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIHRoZW1lLlxuICpcbiAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gc2V0XG4gKiBAcGFyYW0gdGhlbWVSZWdpc3RyeSByZWdpc3RyeSB0byBkZWZpbmUgdGhlIHRoZW1lIGluamVjdG9yIGFnYWluc3QuIERlZmF1bHRzXG4gKiB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XG4gKlxuICogQHJldHVybnMgdGhlIHRoZW1lIGluamVjdG9yIHVzZWQgdG8gc2V0IHRoZSB0aGVtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoZW1lLCB0aGVtZVJlZ2lzdHJ5KSB7XG4gICAgY29uc3QgdGhlbWVJbmplY3RvciA9IG5ldyBJbmplY3Rvcih0aGVtZSk7XG4gICAgdGhlbWVSZWdpc3RyeS5kZWZpbmVJbmplY3RvcihJTkpFQ1RFRF9USEVNRV9LRVksIChpbnZhbGlkYXRvcikgPT4ge1xuICAgICAgICB0aGVtZUluamVjdG9yLnNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHRoZW1lSW5qZWN0b3IuZ2V0KCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoZW1lSW5qZWN0b3I7XG59XG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYXNzIGRlY29yYXRlZCB3aXRoIHdpdGggVGhlbWVkIGZ1bmN0aW9uYWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lZE1peGluKEJhc2UpIHtcbiAgICBsZXQgVGhlbWVkID0gY2xhc3MgVGhlbWVkIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVnaXN0ZXJlZCBiYXNlIHRoZW1lIGtleXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZUtleXMgPSBbXTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW5kaWNhdGVzIGlmIGNsYXNzZXMgbWV0YSBkYXRhIG5lZWQgdG8gYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTG9hZGVkIHRoZW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX3RoZW1lID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhlbWUoY2xhc3Nlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlY2FsY3VsYXRlQ2xhc3Nlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlY2FsY3VsYXRlVGhlbWVDbGFzc2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLm1hcCgoY2xhc3NOYW1lKSA9PiB0aGlzLl9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRoZW1lQ2xhc3MoY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9uIGZpcmVkIHdoZW4gYHRoZW1lYCBvciBgZXh0cmFDbGFzc2VzYCBhcmUgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIG9uUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkIHx8IGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHRyYUNsYXNzZXMgPSB0aGlzLnByb3BlcnRpZXMuZXh0cmFDbGFzc2VzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDbGFzc05hbWUgPSB0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cFtjbGFzc05hbWVdO1xuICAgICAgICAgICAgbGV0IHJlc3VsdENsYXNzTmFtZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhlbWVDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENsYXNzIG5hbWU6ICcke2NsYXNzTmFtZX0nIG5vdCBmb3VuZCBpbiB0aGVtZWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2goZXh0cmFDbGFzc2VzW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2xhc3NOYW1lcy5wdXNoKHRoaXMuX3RoZW1lW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2godGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZVt0aGVtZUNsYXNzTmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdENsYXNzTmFtZXMuam9pbignICcpO1xuICAgICAgICB9XG4gICAgICAgIF9yZWNhbGN1bGF0ZVRoZW1lQ2xhc3NlcygpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdGhlbWUgPSB7fSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgYmFzZVRoZW1lcyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiYXNlVGhlbWVDbGFzc2VzJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lID0gYmFzZVRoZW1lcy5yZWR1Y2UoKGZpbmFsQmFzZVRoZW1lLCBiYXNlVGhlbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2EgPSBUSEVNRV9LRVksIGtleSA9IGJhc2VUaGVtZVtfYV0sIGNsYXNzZXMgPSB0c2xpYl8xLl9fcmVzdChiYXNlVGhlbWUsIFt0eXBlb2YgX2EgPT09IFwic3ltYm9sXCIgPyBfYSA6IF9hICsgXCJcIl0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaW5hbEJhc2VUaGVtZSwgY2xhc3Nlcyk7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2VUaGVtZUNsYXNzZXNSZXZlcnNlTG9va3VwID0gY3JlYXRlVGhlbWVDbGFzc2VzTG9va3VwKGJhc2VUaGVtZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5yZWR1Y2UoKGJhc2VUaGVtZSwgdGhlbWVLZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVRoZW1lLCB0aGVtZVt0aGVtZUtleV0pO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGRpZmZQcm9wZXJ0eSgndGhlbWUnLCBzaGFsbG93KSxcbiAgICAgICAgZGlmZlByb3BlcnR5KCdleHRyYUNsYXNzZXMnLCBzaGFsbG93KVxuICAgIF0sIFRoZW1lZC5wcm90b3R5cGUsIFwib25Qcm9wZXJ0aWVzQ2hhbmdlZFwiLCBudWxsKTtcbiAgICBUaGVtZWQgPSB0c2xpYl8xLl9fZGVjb3JhdGUoW1xuICAgICAgICBpbmplY3Qoe1xuICAgICAgICAgICAgbmFtZTogSU5KRUNURURfVEhFTUVfS0VZLFxuICAgICAgICAgICAgZ2V0UHJvcGVydGllczogKHRoZW1lLCBwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLnRoZW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHRoZW1lIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICBdLCBUaGVtZWQpO1xuICAgIHJldHVybiBUaGVtZWQ7XG59XG5leHBvcnQgZGVmYXVsdCBUaGVtZWRNaXhpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRoZW1lZC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1RoZW1lZC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFdpZGdldEJhc2UsIG5vQmluZCB9IGZyb20gJy4vV2lkZ2V0QmFzZSc7XG5pbXBvcnQgeyBQcm9qZWN0b3JNaXhpbiB9IGZyb20gJy4vbWl4aW5zL1Byb2plY3Rvcic7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi4vc2hpbS9hcnJheSc7XG5pbXBvcnQgeyB3LCBkb20gfSBmcm9tICcuL2QnO1xuaW1wb3J0IGdsb2JhbCBmcm9tICcuLi9zaGltL2dsb2JhbCc7XG5pbXBvcnQgeyByZWdpc3RlclRoZW1lSW5qZWN0b3IgfSBmcm9tICcuL21peGlucy9UaGVtZWQnO1xuaW1wb3J0IHsgYWx3YXlzUmVuZGVyIH0gZnJvbSAnLi9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlcic7XG5leHBvcnQgdmFyIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGU7XG4oZnVuY3Rpb24gKEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUpIHtcbiAgICBDdXN0b21FbGVtZW50Q2hpbGRUeXBlW1wiRE9KT1wiXSA9IFwiRE9KT1wiO1xuICAgIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGVbXCJOT0RFXCJdID0gXCJOT0RFXCI7XG4gICAgQ3VzdG9tRWxlbWVudENoaWxkVHlwZVtcIlRFWFRcIl0gPSBcIlRFWFRcIjtcbn0pKEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUgfHwgKEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUgPSB7fSkpO1xuZXhwb3J0IGZ1bmN0aW9uIERvbVRvV2lkZ2V0V3JhcHBlcihkb21Ob2RlKSB7XG4gICAgbGV0IERvbVRvV2lkZ2V0V3JhcHBlciA9IGNsYXNzIERvbVRvV2lkZ2V0V3JhcHBlciBleHRlbmRzIFdpZGdldEJhc2Uge1xuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5yZWR1Y2UoKHByb3BzLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignb24nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBgX18ke2tleX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9wc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgcmV0dXJuIGRvbSh7IG5vZGU6IGRvbU5vZGUsIHByb3BzOiBwcm9wZXJ0aWVzLCBkaWZmVHlwZTogJ2RvbScgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGdldCBkb21Ob2RlKCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERvbVRvV2lkZ2V0V3JhcHBlciA9IHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGFsd2F5c1JlbmRlcigpXG4gICAgXSwgRG9tVG9XaWRnZXRXcmFwcGVyKTtcbiAgICByZXR1cm4gRG9tVG9XaWRnZXRXcmFwcGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShkZXNjcmlwdG9yLCBXaWRnZXRDb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IHsgYXR0cmlidXRlcywgY2hpbGRUeXBlLCByZWdpc3RyeUZhY3RvcnkgfSA9IGRlc2NyaXB0b3I7XG4gICAgY29uc3QgYXR0cmlidXRlTWFwID0ge307XG4gICAgYXR0cmlidXRlcy5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBhdHRyaWJ1dGVNYXBbYXR0cmlidXRlTmFtZV0gPSBwcm9wZXJ0eU5hbWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICB0aGlzLl9jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxpc2VkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZG9tUHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgeyBhdHRyaWJ1dGVzLCBwcm9wZXJ0aWVzLCBldmVudHMgfSA9IGRlc2NyaXB0b3I7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fYXR0cmlidXRlc1RvUHJvcGVydGllcyhhdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgICBbLi4uYXR0cmlidXRlcywgLi4ucHJvcGVydGllc10uZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJ19fJyk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZFByb3BlcnR5TmFtZSAhPT0gcHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbVByb3BlcnRpZXNbZmlsdGVyZWRQcm9wZXJ0eU5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAodmFsdWUpID0+IHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbVByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4gdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBldmVudHMuZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gcHJvcGVydHlOYW1lLnJlcGxhY2UoL15vbi8sICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnJlcGxhY2UoL15vbi8sICdfX29uJyk7XG4gICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1tmaWx0ZXJlZFByb3BlcnR5TmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5fZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4gdGhpcy5fc2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnRDYWxsYmFjayA9IHRoaXMuX2dldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudENhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudENhbGxiYWNrKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogYXJnc1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywgZG9tUHJvcGVydGllcyk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5URVhUID8gdGhpcy5jaGlsZE5vZGVzIDogdGhpcy5jaGlsZHJlbjtcbiAgICAgICAgICAgIGZyb20oY2hpbGRyZW4pLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZFR5cGUgPT09IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUuRE9KTykge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1yZW5kZXInLCAoKSA9PiB0aGlzLl9yZW5kZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLWNvbm5lY3RlZCcsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChEb21Ub1dpZGdldFdyYXBwZXIoY2hpbGROb2RlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGRvbSh7IG5vZGU6IGNoaWxkTm9kZSwgZGlmZlR5cGU6ICdkb20nIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1jb25uZWN0ZWQnLCAoZSkgPT4gdGhpcy5fY2hpbGRDb25uZWN0ZWQoZSkpO1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0UHJvcGVydGllcyA9IHRoaXMuX3Byb3BlcnRpZXM7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJDaGlsZHJlbiA9ICgpID0+IHRoaXMuX19jaGlsZHJlbl9fKCk7XG4gICAgICAgICAgICBjb25zdCBXcmFwcGVyID0gY2xhc3MgZXh0ZW5kcyBXaWRnZXRCYXNlIHtcbiAgICAgICAgICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3KFdpZGdldENvbnN0cnVjdG9yLCB3aWRnZXRQcm9wZXJ0aWVzLCByZW5kZXJDaGlsZHJlbigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcmVnaXN0cnkgPSByZWdpc3RyeUZhY3RvcnkoKTtcbiAgICAgICAgICAgIGNvbnN0IHRoZW1lQ29udGV4dCA9IHJlZ2lzdGVyVGhlbWVJbmplY3Rvcih0aGlzLl9nZXRUaGVtZSgpLCByZWdpc3RyeSk7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignZG9qby10aGVtZS1zZXQnLCAoKSA9PiB0aGVtZUNvbnRleHQuc2V0KHRoaXMuX2dldFRoZW1lKCkpKTtcbiAgICAgICAgICAgIGNvbnN0IFByb2plY3RvciA9IFByb2plY3Rvck1peGluKFdyYXBwZXIpO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yID0gbmV3IFByb2plY3RvcigpO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yLnNldFByb3BlcnRpZXMoeyByZWdpc3RyeSB9KTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rvci5hcHBlbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb2pvLWNlLWNvbm5lY3RlZCcsIHtcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRldGFpbDogdGhpc1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRUaGVtZSgpIHtcbiAgICAgICAgICAgIGlmIChnbG9iYWwgJiYgZ2xvYmFsLmRvam9jZSAmJiBnbG9iYWwuZG9qb2NlLnRoZW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbC5kb2pvY2UudGhlbWVzW2dsb2JhbC5kb2pvY2UudGhlbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9jaGlsZENvbm5lY3RlZChlKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gZS5kZXRhaWw7XG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5fY2hpbGRyZW4uc29tZSgoY2hpbGQpID0+IGNoaWxkLmRvbU5vZGUgPT09IG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1yZW5kZXInLCAoKSA9PiB0aGlzLl9yZW5kZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goRG9tVG9XaWRnZXRXcmFwcGVyKG5vZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9yZW5kZXIoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yLmludmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb2pvLWNlLXJlbmRlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgYnViYmxlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbDogdGhpc1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfX3Byb3BlcnRpZXNfXygpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wcm9wZXJ0aWVzLCB0aGlzLl9ldmVudFByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIF9fY2hpbGRyZW5fXygpIHtcbiAgICAgICAgICAgIGlmIChjaGlsZFR5cGUgPT09IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUuRE9KTykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbi5maWx0ZXIoKENoaWxkKSA9PiBDaGlsZC5kb21Ob2RlLmlzV2lkZ2V0KS5tYXAoKENoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZG9tTm9kZSB9ID0gQ2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3KENoaWxkLCBPYmplY3QuYXNzaWduKHt9LCBkb21Ob2RlLl9fcHJvcGVydGllc19fKCkpLCBbLi4uZG9tTm9kZS5fX2NoaWxkcmVuX18oKV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGRWYWx1ZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGF0dHJpYnV0ZU1hcFtuYW1lXTtcbiAgICAgICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIF9zZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgX2dldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVtub0JpbmRdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBfYXR0cmlidXRlc1RvUHJvcGVydGllcyhhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5yZWR1Y2UoKHByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXNXaWRnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIoV2lkZ2V0Q29uc3RydWN0b3IpIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gV2lkZ2V0Q29uc3RydWN0b3IucHJvdG90eXBlICYmIFdpZGdldENvbnN0cnVjdG9yLnByb3RvdHlwZS5fX2N1c3RvbUVsZW1lbnREZXNjcmlwdG9yO1xuICAgIGlmICghZGVzY3JpcHRvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgZGVzY3JpcHRvciBmb3IgQ3VzdG9tIEVsZW1lbnQsIGhhdmUgeW91IGFkZGVkIHRoZSBAY3VzdG9tRWxlbWVudCBkZWNvcmF0b3IgdG8geW91ciBXaWRnZXQ/Jyk7XG4gICAgfVxuICAgIGdsb2JhbC5jdXN0b21FbGVtZW50cy5kZWZpbmUoZGVzY3JpcHRvci50YWdOYW1lLCBjcmVhdGUoZGVzY3JpcHRvciwgV2lkZ2V0Q29uc3RydWN0b3IpKTtcbn1cbmV4cG9ydCBkZWZhdWx0IHJlZ2lzdGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVnaXN0ZXJDdXN0b21FbGVtZW50Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvcmVnaXN0ZXJDdXN0b21FbGVtZW50Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuLi9zaGltL2dsb2JhbCc7XG5pbXBvcnQgeyBmcm9tIGFzIGFycmF5RnJvbSB9IGZyb20gJy4uL3NoaW0vYXJyYXknO1xuaW1wb3J0IHsgaXNXTm9kZSwgaXNWTm9kZSwgaXNEb21WTm9kZSwgVk5PREUsIFdOT0RFIH0gZnJvbSAnLi9kJztcbmltcG9ydCB7IGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yIH0gZnJvbSAnLi9SZWdpc3RyeSc7XG5pbXBvcnQgV2Vha01hcCBmcm9tICcuLi9zaGltL1dlYWtNYXAnO1xuY29uc3QgTkFNRVNQQUNFX1czID0gJ2h0dHA6Ly93d3cudzMub3JnLyc7XG5jb25zdCBOQU1FU1BBQ0VfU1ZHID0gTkFNRVNQQUNFX1czICsgJzIwMDAvc3ZnJztcbmNvbnN0IE5BTUVTUEFDRV9YTElOSyA9IE5BTUVTUEFDRV9XMyArICcxOTk5L3hsaW5rJztcbmNvbnN0IGVtcHR5QXJyYXkgPSBbXTtcbmNvbnN0IG5vZGVPcGVyYXRpb25zID0gWydmb2N1cycsICdibHVyJywgJ3Njcm9sbEludG9WaWV3JywgJ2NsaWNrJ107XG5leHBvcnQgY29uc3Qgd2lkZ2V0SW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgaW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgbmV4dFNpYmxpbmdNYXAgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgcHJvamVjdG9yU3RhdGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gc2FtZShkbm9kZTEsIGRub2RlMikge1xuICAgIGlmIChpc1ZOb2RlKGRub2RlMSkgJiYgaXNWTm9kZShkbm9kZTIpKSB7XG4gICAgICAgIGlmIChpc0RvbVZOb2RlKGRub2RlMSkgfHwgaXNEb21WTm9kZShkbm9kZTIpKSB7XG4gICAgICAgICAgICBpZiAoZG5vZGUxLmRvbU5vZGUgIT09IGRub2RlMi5kb21Ob2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkbm9kZTEudGFnICE9PSBkbm9kZTIudGFnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRub2RlMS5wcm9wZXJ0aWVzLmtleSAhPT0gZG5vZGUyLnByb3BlcnRpZXMua2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzV05vZGUoZG5vZGUxKSAmJiBpc1dOb2RlKGRub2RlMikpIHtcbiAgICAgICAgaWYgKGRub2RlMS5pbnN0YW5jZSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBkbm9kZTIud2lkZ2V0Q29uc3RydWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRub2RlMS53aWRnZXRDb25zdHJ1Y3RvciAhPT0gZG5vZGUyLndpZGdldENvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRub2RlMS5wcm9wZXJ0aWVzLmtleSAhPT0gZG5vZGUyLnByb3BlcnRpZXMua2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmNvbnN0IG1pc3NpbmdUcmFuc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZSBhIHRyYW5zaXRpb25zIG9iamVjdCB0byB0aGUgcHJvamVjdGlvbk9wdGlvbnMgdG8gZG8gYW5pbWF0aW9ucycpO1xufTtcbmZ1bmN0aW9uIGdldFByb2plY3Rpb25PcHRpb25zKHByb2plY3Rvck9wdGlvbnMsIHByb2plY3Rvckluc3RhbmNlKSB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICAgIG5hbWVzcGFjZTogdW5kZWZpbmVkLFxuICAgICAgICBzdHlsZUFwcGx5ZXI6IGZ1bmN0aW9uIChkb21Ob2RlLCBzdHlsZU5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICBkb21Ob2RlLnN0eWxlW3N0eWxlTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNpdGlvbnM6IHtcbiAgICAgICAgICAgIGVudGVyOiBtaXNzaW5nVHJhbnNpdGlvbixcbiAgICAgICAgICAgIGV4aXQ6IG1pc3NpbmdUcmFuc2l0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGRlcHRoOiAwLFxuICAgICAgICBtZXJnZTogZmFsc2UsXG4gICAgICAgIHN5bmM6IGZhbHNlLFxuICAgICAgICBwcm9qZWN0b3JJbnN0YW5jZVxuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLCBwcm9qZWN0b3JPcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGNoZWNrU3R5bGVWYWx1ZShzdHlsZVZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBzdHlsZVZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0eWxlIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVFdmVudChkb21Ob2RlLCBldmVudE5hbWUsIGN1cnJlbnRWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMsIGJpbmQsIHByZXZpb3VzVmFsdWUpIHtcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgY29uc3QgZXZlbnRNYXAgPSBwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLmdldChkb21Ob2RlKSB8fCBuZXcgV2Vha01hcCgpO1xuICAgIGlmIChwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzRXZlbnQgPSBldmVudE1hcC5nZXQocHJldmlvdXNWYWx1ZSk7XG4gICAgICAgIGRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHByZXZpb3VzRXZlbnQpO1xuICAgIH1cbiAgICBsZXQgY2FsbGJhY2sgPSBjdXJyZW50VmFsdWUuYmluZChiaW5kKTtcbiAgICBpZiAoZXZlbnROYW1lID09PSAnaW5wdXQnKSB7XG4gICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgICAgY3VycmVudFZhbHVlLmNhbGwodGhpcywgZXZ0KTtcbiAgICAgICAgICAgIGV2dC50YXJnZXRbJ29uaW5wdXQtdmFsdWUnXSA9IGV2dC50YXJnZXQudmFsdWU7XG4gICAgICAgIH0uYmluZChiaW5kKTtcbiAgICB9XG4gICAgZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuICAgIGV2ZW50TWFwLnNldChjdXJyZW50VmFsdWUsIGNhbGxiYWNrKTtcbiAgICBwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLnNldChkb21Ob2RlLCBldmVudE1hcCk7XG59XG5mdW5jdGlvbiBhZGRDbGFzc2VzKGRvbU5vZGUsIGNsYXNzZXMpIHtcbiAgICBpZiAoY2xhc3Nlcykge1xuICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gY2xhc3Nlcy5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRvbU5vZGUuY2xhc3NMaXN0LmFkZChjbGFzc05hbWVzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgY2xhc3Nlcykge1xuICAgIGlmIChjbGFzc2VzKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZG9tTm9kZS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZXNbaV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYnVpbGRQcmV2aW91c1Byb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXMsIGN1cnJlbnQpIHtcbiAgICBjb25zdCB7IGRpZmZUeXBlLCBwcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzIH0gPSBjdXJyZW50O1xuICAgIGlmICghZGlmZlR5cGUgfHwgZGlmZlR5cGUgPT09ICd2ZG9tJykge1xuICAgICAgICByZXR1cm4geyBwcm9wZXJ0aWVzOiBwcmV2aW91cy5wcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzOiBwcmV2aW91cy5hdHRyaWJ1dGVzLCBldmVudHM6IHByZXZpb3VzLmV2ZW50cyB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChkaWZmVHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiB7IHByb3BlcnRpZXM6IHt9LCBhdHRyaWJ1dGVzOiBwcmV2aW91cy5hdHRyaWJ1dGVzID8ge30gOiB1bmRlZmluZWQsIGV2ZW50czogcHJldmlvdXMuZXZlbnRzIH07XG4gICAgfVxuICAgIGxldCBuZXdQcm9wZXJ0aWVzID0ge1xuICAgICAgICBwcm9wZXJ0aWVzOiB7fVxuICAgIH07XG4gICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgbmV3UHJvcGVydGllcy5hdHRyaWJ1dGVzID0ge307XG4gICAgICAgIG5ld1Byb3BlcnRpZXMuZXZlbnRzID0gcHJldmlvdXMuZXZlbnRzO1xuICAgICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuICAgICAgICAgICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzW3Byb3BOYW1lXSA9IGRvbU5vZGVbcHJvcE5hbWVdO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaCgoYXR0ck5hbWUpID0+IHtcbiAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMuYXR0cmlidXRlc1thdHRyTmFtZV0gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZShhdHRyTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3UHJvcGVydGllcztcbiAgICB9XG4gICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykucmVkdWNlKChwcm9wcywgcHJvcGVydHkpID0+IHtcbiAgICAgICAgcHJvcHNbcHJvcGVydHldID0gZG9tTm9kZS5nZXRBdHRyaWJ1dGUocHJvcGVydHkpIHx8IGRvbU5vZGVbcHJvcGVydHldO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfSwge30pO1xuICAgIHJldHVybiBuZXdQcm9wZXJ0aWVzO1xufVxuZnVuY3Rpb24gbm9kZU9wZXJhdGlvbihwcm9wTmFtZSwgcHJvcFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBkb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzdWx0ID0gcHJvcFZhbHVlKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBwcm9wVmFsdWUgJiYgIXByZXZpb3VzVmFsdWU7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIG9ubHlFdmVudHMgPSBmYWxzZSkge1xuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBjb25zdCBldmVudE1hcCA9IHByb2plY3RvclN0YXRlLm5vZGVNYXAuZ2V0KGRvbU5vZGUpO1xuICAgIGlmIChldmVudE1hcCkge1xuICAgICAgICBPYmplY3Qua2V5cyhwcmV2aW91c1Byb3BlcnRpZXMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0V2ZW50ID0gcHJvcE5hbWUuc3Vic3RyKDAsIDIpID09PSAnb24nIHx8IG9ubHlFdmVudHM7XG4gICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBvbmx5RXZlbnRzID8gcHJvcE5hbWUgOiBwcm9wTmFtZS5zdWJzdHIoMik7XG4gICAgICAgICAgICBpZiAoaXNFdmVudCAmJiAhcHJvcGVydGllc1twcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudENhbGxiYWNrID0gZXZlbnRNYXAuZ2V0KHByZXZpb3VzUHJvcGVydGllc1twcm9wTmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIGF0dHJOYW1lLCBhdHRyVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgaWYgKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSA9PT0gTkFNRVNQQUNFX1NWRyAmJiBhdHRyTmFtZSA9PT0gJ2hyZWYnKSB7XG4gICAgICAgIGRvbU5vZGUuc2V0QXR0cmlidXRlTlMoTkFNRVNQQUNFX1hMSU5LLCBhdHRyTmFtZSwgYXR0clZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKGF0dHJOYW1lID09PSAncm9sZScgJiYgYXR0clZhbHVlID09PSAnJykgfHwgYXR0clZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZG9tTm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZG9tTm9kZS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlcyhkb21Ob2RlLCBwcmV2aW91c0F0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgY29uc3QgYXR0ck5hbWVzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlcyk7XG4gICAgY29uc3QgYXR0ckNvdW50ID0gYXR0ck5hbWVzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGF0dHJOYW1lID0gYXR0ck5hbWVzW2ldO1xuICAgICAgICBjb25zdCBhdHRyVmFsdWUgPSBhdHRyaWJ1dGVzW2F0dHJOYW1lXTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNBdHRyVmFsdWUgPSBwcmV2aW91c0F0dHJpYnV0ZXNbYXR0ck5hbWVdO1xuICAgICAgICBpZiAoYXR0clZhbHVlICE9PSBwcmV2aW91c0F0dHJWYWx1ZSkge1xuICAgICAgICAgICAgdXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIGF0dHJOYW1lLCBhdHRyVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzID0gdHJ1ZSkge1xuICAgIGxldCBwcm9wZXJ0aWVzVXBkYXRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpO1xuICAgIGNvbnN0IHByb3BDb3VudCA9IHByb3BOYW1lcy5sZW5ndGg7XG4gICAgaWYgKHByb3BOYW1lcy5pbmRleE9mKCdjbGFzc2VzJykgPT09IC0xICYmIHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzICYmIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcENvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBwcm9wTmFtZXNbaV07XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSBwcm9wZXJ0aWVzW3Byb3BOYW1lXTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzUHJvcGVydGllc1twcm9wTmFtZV07XG4gICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2NsYXNzZXMnKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0NsYXNzZXMgPSBBcnJheS5pc0FycmF5KHByZXZpb3VzVmFsdWUpID8gcHJldmlvdXNWYWx1ZSA6IFtwcmV2aW91c1ZhbHVlXTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDbGFzc2VzID0gQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpID8gcHJvcFZhbHVlIDogW3Byb3BWYWx1ZV07XG4gICAgICAgICAgICBpZiAocHJldmlvdXNDbGFzc2VzICYmIHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wVmFsdWUgfHwgcHJvcFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c0NsYXNzZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDbGFzc2VzID0gWy4uLmN1cnJlbnRDbGFzc2VzXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c0NsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQ2xhc3NOYW1lID0gcHJldmlvdXNDbGFzc2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xhc3NJbmRleCA9IG5ld0NsYXNzZXMuaW5kZXhPZihwcmV2aW91c0NsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNDbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2xhc3Nlcy5zcGxpY2UoY2xhc3NJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3Q2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3Nlcyhkb21Ob2RlLCBuZXdDbGFzc2VzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudENsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3Nlcyhkb21Ob2RlLCBjdXJyZW50Q2xhc3Nlc1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGVPcGVyYXRpb25zLmluZGV4T2YocHJvcE5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgbm9kZU9wZXJhdGlvbihwcm9wTmFtZSwgcHJvcFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBkb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgPT09ICdzdHlsZXMnKSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZU5hbWVzID0gT2JqZWN0LmtleXMocHJvcFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlQ291bnQgPSBzdHlsZU5hbWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc3R5bGVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVOYW1lID0gc3R5bGVOYW1lc1tqXTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdHlsZVZhbHVlID0gcHJvcFZhbHVlW3N0eWxlTmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkU3R5bGVWYWx1ZSA9IHByZXZpb3VzVmFsdWUgJiYgcHJldmlvdXNWYWx1ZVtzdHlsZU5hbWVdO1xuICAgICAgICAgICAgICAgIGlmIChuZXdTdHlsZVZhbHVlID09PSBvbGRTdHlsZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1N0eWxlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tTdHlsZVZhbHVlKG5ld1N0eWxlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5zdHlsZUFwcGx5ZXIoZG9tTm9kZSwgc3R5bGVOYW1lLCBuZXdTdHlsZVZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zLnN0eWxlQXBwbHllcihkb21Ob2RlLCBzdHlsZU5hbWUsICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXByb3BWYWx1ZSAmJiB0eXBlb2YgcHJldmlvdXNWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVZhbHVlID0gZG9tTm9kZVtwcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKGRvbVZhbHVlICE9PSBwcm9wVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgKGRvbU5vZGVbJ29uaW5wdXQtdmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBkb21WYWx1ZSA9PT0gZG9tTm9kZVsnb25pbnB1dC12YWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbJ29uaW5wdXQtdmFsdWUnXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgIT09ICdrZXknICYmIHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb24nICYmIHByb3BOYW1lLmxhc3RJbmRleE9mKCdvbicsIDApID09PSAwICYmIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVFdmVudChkb21Ob2RlLCBwcm9wTmFtZS5zdWJzdHIoMiksIHByb3BWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMsIHByb3BlcnRpZXMuYmluZCwgcHJldmlvdXNWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHByb3BOYW1lICE9PSAnaW5uZXJIVE1MJyAmJiBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIHByb3BOYW1lLCBwcm9wVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgPT09ICdzY3JvbGxMZWZ0JyB8fCBwcm9wTmFtZSA9PT0gJ3Njcm9sbFRvcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbU5vZGVbcHJvcE5hbWVdICE9PSBwcm9wVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1VwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJ0aWVzVXBkYXRlZDtcbn1cbmZ1bmN0aW9uIGZpbmRJbmRleE9mQ2hpbGQoY2hpbGRyZW4sIHNhbWVBcywgc3RhcnQpIHtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc2FtZShjaGlsZHJlbltpXSwgc2FtZUFzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvUGFyZW50Vk5vZGUoZG9tTm9kZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogJycsXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICAgICAgICBkb21Ob2RlLFxuICAgICAgICB0eXBlOiBWTk9ERVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gdG9UZXh0Vk5vZGUoZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogJycsXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICAgICAgICB0ZXh0OiBgJHtkYXRhfWAsXG4gICAgICAgIGRvbU5vZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgdHlwZTogVk5PREVcbiAgICB9O1xufVxuZnVuY3Rpb24gdG9JbnRlcm5hbFdOb2RlKGluc3RhbmNlLCBpbnN0YW5jZURhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgcmVuZGVyZWQ6IFtdLFxuICAgICAgICBjb3JlUHJvcGVydGllczogaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLFxuICAgICAgICBjaGlsZHJlbjogaW5zdGFuY2UuY2hpbGRyZW4sXG4gICAgICAgIHdpZGdldENvbnN0cnVjdG9yOiBpbnN0YW5jZS5jb25zdHJ1Y3RvcixcbiAgICAgICAgcHJvcGVydGllczogaW5zdGFuY2VEYXRhLmlucHV0UHJvcGVydGllcyxcbiAgICAgICAgdHlwZTogV05PREVcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oY2hpbGRyZW4sIGluc3RhbmNlKSB7XG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5QXJyYXk7XG4gICAgfVxuICAgIGNoaWxkcmVuID0gQXJyYXkuaXNBcnJheShjaGlsZHJlbikgPyBjaGlsZHJlbiA6IFtjaGlsZHJlbl07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7KSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkIHx8IGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXSA9IHRvVGV4dFZOb2RlKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1ZOb2RlKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5wcm9wZXJ0aWVzLmJpbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm9wZXJ0aWVzLmJpbmQgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4sIGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghY2hpbGQuY29yZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuY29yZVByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kOiBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VSZWdpc3RyeTogaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJhc2VSZWdpc3RyeVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xufVxuZnVuY3Rpb24gbm9kZUFkZGVkKGRub2RlLCB0cmFuc2l0aW9ucykge1xuICAgIGlmIChpc1ZOb2RlKGRub2RlKSAmJiBkbm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvbnN0IGVudGVyQW5pbWF0aW9uID0gZG5vZGUucHJvcGVydGllcy5lbnRlckFuaW1hdGlvbjtcbiAgICAgICAgaWYgKGVudGVyQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudGVyQW5pbWF0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZW50ZXJBbmltYXRpb24oZG5vZGUuZG9tTm9kZSwgZG5vZGUucHJvcGVydGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5lbnRlcihkbm9kZS5kb21Ob2RlLCBkbm9kZS5wcm9wZXJ0aWVzLCBlbnRlckFuaW1hdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBub2RlVG9SZW1vdmUoZG5vZGUsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGlmIChpc1dOb2RlKGRub2RlKSkge1xuICAgICAgICBjb25zdCBpdGVtID0gaW5zdGFuY2VNYXAuZ2V0KGRub2RlLmluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSAoaXRlbSA/IGl0ZW0uZG5vZGUucmVuZGVyZWQgOiBkbm9kZS5yZW5kZXJlZCkgfHwgZW1wdHlBcnJheTtcbiAgICAgICAgaWYgKGRub2RlLmluc3RhbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoZG5vZGUuaW5zdGFuY2UpO1xuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm9uRGV0YWNoKCk7XG4gICAgICAgICAgICBpbnN0YW5jZU1hcC5kZWxldGUoZG5vZGUuaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShyZW5kZXJlZFtpXSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGU7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBkbm9kZS5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAoZG5vZGUuY2hpbGRyZW4gJiYgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG5vZGVUb1JlbW92ZShkbm9kZS5jaGlsZHJlbltpXSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleGl0QW5pbWF0aW9uID0gcHJvcGVydGllcy5leGl0QW5pbWF0aW9uO1xuICAgICAgICBpZiAocHJvcGVydGllcyAmJiBleGl0QW5pbWF0aW9uKSB7XG4gICAgICAgICAgICBkb21Ob2RlLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVEb21Ob2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRvbU5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlKTtcbiAgICAgICAgICAgICAgICBkbm9kZS5kb21Ob2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhpdEFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGV4aXRBbmltYXRpb24oZG9tTm9kZSwgcmVtb3ZlRG9tTm9kZSwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuZXhpdChkbm9kZS5kb21Ob2RlLCBwcm9wZXJ0aWVzLCBleGl0QW5pbWF0aW9uLCByZW1vdmVEb21Ob2RlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZG9tTm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbU5vZGUpO1xuICAgICAgICBkbm9kZS5kb21Ob2RlID0gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKGNoaWxkTm9kZXMsIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2luZGV4VG9DaGVja107XG4gICAgaWYgKGlzVk5vZGUoY2hpbGROb2RlKSAmJiAhY2hpbGROb2RlLnRhZykge1xuICAgICAgICByZXR1cm47IC8vIFRleHQgbm9kZXMgbmVlZCBub3QgYmUgZGlzdGluZ3Vpc2hhYmxlXG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBjaGlsZE5vZGUucHJvcGVydGllcztcbiAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgIT09IGluZGV4VG9DaGVjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChzYW1lKG5vZGUsIGNoaWxkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVJZGVudGlmaWVyO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnROYW1lID0gcGFyZW50SW5zdGFuY2UuY29uc3RydWN0b3IubmFtZSB8fCAndW5rbm93bic7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1dOb2RlKGNoaWxkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJZGVudGlmaWVyID0gY2hpbGROb2RlLndpZGdldENvbnN0cnVjdG9yLm5hbWUgfHwgJ3Vua25vd24nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlkZW50aWZpZXIgPSBjaGlsZE5vZGUudGFnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgQSB3aWRnZXQgKCR7cGFyZW50TmFtZX0pIGhhcyBoYWQgYSBjaGlsZCBhZGRkZWQgb3IgcmVtb3ZlZCwgYnV0IHRoZXkgd2VyZSBub3QgYWJsZSB0byB1bmlxdWVseSBpZGVudGlmaWVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byBwcm92aWRlIGEgdW5pcXVlICdrZXknIHByb3BlcnR5IHdoZW4gdXNpbmcgdGhlIHNhbWUgd2lkZ2V0IG9yIGVsZW1lbnQgKCR7bm9kZUlkZW50aWZpZXJ9KSBtdWx0aXBsZSB0aW1lcyBhcyBzaWJsaW5nc2ApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVDaGlsZHJlbihwYXJlbnRWTm9kZSwgc2libGluZ3MsIG9sZENoaWxkcmVuLCBuZXdDaGlsZHJlbiwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgb2xkQ2hpbGRyZW4gPSBvbGRDaGlsZHJlbiB8fCBlbXB0eUFycmF5O1xuICAgIG5ld0NoaWxkcmVuID0gbmV3Q2hpbGRyZW47XG4gICAgY29uc3Qgb2xkQ2hpbGRyZW5MZW5ndGggPSBvbGRDaGlsZHJlbi5sZW5ndGg7XG4gICAgY29uc3QgbmV3Q2hpbGRyZW5MZW5ndGggPSBuZXdDaGlsZHJlbi5sZW5ndGg7XG4gICAgY29uc3QgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucztcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XG4gICAgcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBkZXB0aDogcHJvamVjdGlvbk9wdGlvbnMuZGVwdGggKyAxIH0pO1xuICAgIGxldCBvbGRJbmRleCA9IDA7XG4gICAgbGV0IG5ld0luZGV4ID0gMDtcbiAgICBsZXQgaTtcbiAgICBsZXQgdGV4dFVwZGF0ZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAobmV3SW5kZXggPCBuZXdDaGlsZHJlbkxlbmd0aCkge1xuICAgICAgICBsZXQgb2xkQ2hpbGQgPSBvbGRJbmRleCA8IG9sZENoaWxkcmVuTGVuZ3RoID8gb2xkQ2hpbGRyZW5bb2xkSW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBuZXdDaGlsZCA9IG5ld0NoaWxkcmVuW25ld0luZGV4XTtcbiAgICAgICAgaWYgKGlzVk5vZGUobmV3Q2hpbGQpICYmIHR5cGVvZiBuZXdDaGlsZC5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmV3Q2hpbGQuaW5zZXJ0ZWQgPSBpc1ZOb2RlKG9sZENoaWxkKSAmJiBvbGRDaGlsZC5pbnNlcnRlZDtcbiAgICAgICAgICAgIGFkZERlZmVycmVkUHJvcGVydGllcyhuZXdDaGlsZCwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvbGRDaGlsZCAhPT0gdW5kZWZpbmVkICYmIHNhbWUob2xkQ2hpbGQsIG5ld0NoaWxkKSkge1xuICAgICAgICAgICAgb2xkSW5kZXgrKztcbiAgICAgICAgICAgIG5ld0luZGV4Kys7XG4gICAgICAgICAgICB0ZXh0VXBkYXRlZCA9XG4gICAgICAgICAgICAgICAgdXBkYXRlRG9tKG9sZENoaWxkLCBuZXdDaGlsZCwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBwYXJlbnRJbnN0YW5jZSwgb2xkQ2hpbGRyZW4uc2xpY2Uob2xkSW5kZXgpLCBuZXdDaGlsZHJlbi5zbGljZShuZXdJbmRleCkpIHx8IHRleHRVcGRhdGVkO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmluZE9sZEluZGV4ID0gZmluZEluZGV4T2ZDaGlsZChvbGRDaGlsZHJlbiwgbmV3Q2hpbGQsIG9sZEluZGV4ICsgMSk7XG4gICAgICAgIGNvbnN0IGFkZENoaWxkID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGluc2VydEJlZm9yZURvbU5vZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgY2hpbGRyZW5BcnJheSA9IG9sZENoaWxkcmVuO1xuICAgICAgICAgICAgbGV0IG5leHRJbmRleCA9IG9sZEluZGV4ICsgMTtcbiAgICAgICAgICAgIGxldCBjaGlsZCA9IG9sZENoaWxkcmVuW29sZEluZGV4XTtcbiAgICAgICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZCA9IHNpYmxpbmdzWzBdO1xuICAgICAgICAgICAgICAgIG5leHRJbmRleCA9IDE7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5BcnJheSA9IHNpYmxpbmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluc2VydEJlZm9yZUNoaWxkcmVuID0gW2NoaWxkXTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZUNoaWxkcmVuLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1dOb2RlKGluc2VydEJlZm9yZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpbnN0YW5jZU1hcC5nZXQoaW5zZXJ0QmVmb3JlLmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0uZG5vZGUucmVuZGVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDaGlsZHJlbi5wdXNoKC4uLml0ZW0uZG5vZGUucmVuZGVyZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZS5kb21Ob2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZS5kb21Ob2RlLnBhcmVudEVsZW1lbnQgIT09IHBhcmVudFZOb2RlLmRvbU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEJlZm9yZURvbU5vZGUgPSBpbnNlcnRCZWZvcmUuZG9tTm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ubGVuZ3RoID09PSAwICYmIGNoaWxkcmVuQXJyYXlbbmV4dEluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ucHVzaChjaGlsZHJlbkFycmF5W25leHRJbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjcmVhdGVEb20obmV3Q2hpbGQsIHBhcmVudFZOb2RlLCBuZXdDaGlsZHJlbi5zbGljZShuZXdJbmRleCArIDEpLCBpbnNlcnRCZWZvcmVEb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgbm9kZUFkZGVkKG5ld0NoaWxkLCB0cmFuc2l0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBpbmRleFRvQ2hlY2sgPSBuZXdJbmRleDtcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG5ld0NoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoIW9sZENoaWxkIHx8IGZpbmRPbGRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGFkZENoaWxkKCk7XG4gICAgICAgICAgICBuZXdJbmRleCsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVtb3ZlQ2hpbGQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleFRvQ2hlY2sgPSBvbGRJbmRleDtcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGlzV05vZGUob2xkQ2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGluc3RhbmNlTWFwLmdldChvbGRDaGlsZC5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkQ2hpbGQgPSBpdGVtLmRub2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShvbGRDaGlsZCwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmluZE5ld0luZGV4ID0gZmluZEluZGV4T2ZDaGlsZChuZXdDaGlsZHJlbiwgb2xkQ2hpbGQsIG5ld0luZGV4ICsgMSk7XG4gICAgICAgIGlmIChmaW5kTmV3SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZW1vdmVDaGlsZCgpO1xuICAgICAgICAgICAgb2xkSW5kZXgrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGFkZENoaWxkKCk7XG4gICAgICAgIHJlbW92ZUNoaWxkKCk7XG4gICAgICAgIG9sZEluZGV4Kys7XG4gICAgICAgIG5ld0luZGV4Kys7XG4gICAgfVxuICAgIGlmIChvbGRDaGlsZHJlbkxlbmd0aCA+IG9sZEluZGV4KSB7XG4gICAgICAgIC8vIFJlbW92ZSBjaGlsZCBmcmFnbWVudHNcbiAgICAgICAgZm9yIChpID0gb2xkSW5kZXg7IGkgPCBvbGRDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleFRvQ2hlY2sgPSBpO1xuICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2hlY2tEaXN0aW5ndWlzaGFibGUob2xkQ2hpbGRyZW4sIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgY2hpbGRUb1JlbW92ZSA9IG9sZENoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKGlzV05vZGUoY2hpbGRUb1JlbW92ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gaW5zdGFuY2VNYXAuZ2V0KGNoaWxkVG9SZW1vdmUuaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVG9SZW1vdmUgPSBpdGVtLmRub2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShjaGlsZFRvUmVtb3ZlLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZXh0VXBkYXRlZDtcbn1cbmZ1bmN0aW9uIGFkZENoaWxkcmVuKHBhcmVudFZOb2RlLCBjaGlsZHJlbiwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlLCBpbnNlcnRCZWZvcmUgPSB1bmRlZmluZWQsIGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNoaWxkTm9kZXMgPSBhcnJheUZyb20ocGFyZW50Vk5vZGUuZG9tTm9kZS5jaGlsZE5vZGVzKTtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucztcbiAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IGRlcHRoOiBwcm9qZWN0aW9uT3B0aW9ucy5kZXB0aCArIDEgfSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICBjb25zdCBuZXh0U2libGluZ3MgPSBjaGlsZHJlbi5zbGljZShpICsgMSk7XG4gICAgICAgIGlmIChpc1ZOb2RlKGNoaWxkKSkge1xuICAgICAgICAgICAgaWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIGNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZG9tRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGQuZG9tTm9kZSA9PT0gdW5kZWZpbmVkICYmIGNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50ID0gY2hpbGROb2Rlcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tRWxlbWVudCAmJiBkb21FbGVtZW50LnRhZ05hbWUgPT09IChjaGlsZC50YWcudG9VcHBlckNhc2UoKSB8fCB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5kb21Ob2RlID0gZG9tRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNyZWF0ZURvbShjaGlsZCwgcGFyZW50Vk5vZGUsIG5leHRTaWJsaW5ncywgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3JlYXRlRG9tKGNoaWxkLCBwYXJlbnRWTm9kZSwgbmV4dFNpYmxpbmdzLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgY2hpbGROb2Rlcyk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZUFkZGVkKGNoaWxkLCB0cmFuc2l0aW9ucyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdFByb3BlcnRpZXNBbmRDaGlsZHJlbihkb21Ob2RlLCBkbm9kZSwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgYWRkQ2hpbGRyZW4oZG5vZGUsIGRub2RlLmNoaWxkcmVuLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHR5cGVvZiBkbm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyAmJiBkbm9kZS5pbnNlcnRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFkZERlZmVycmVkUHJvcGVydGllcyhkbm9kZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcbiAgICAgICAgdXBkYXRlQXR0cmlidXRlcyhkb21Ob2RlLCB7fSwgZG5vZGUuYXR0cmlidXRlcywgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgZmFsc2UpO1xuICAgICAgICByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCB7fSwgZG5vZGUuZXZlbnRzLCBwcm9qZWN0aW9uT3B0aW9ucywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IGRub2RlLmV2ZW50cztcbiAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdXBkYXRlRXZlbnQoZG9tTm9kZSwgZXZlbnQsIGV2ZW50c1tldmVudF0sIHByb2plY3Rpb25PcHRpb25zLCBkbm9kZS5wcm9wZXJ0aWVzLmJpbmQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwge30sIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSBudWxsICYmIGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZChkb21Ob2RlLCBgJHtkbm9kZS5wcm9wZXJ0aWVzLmtleX1gKTtcbiAgICB9XG4gICAgZG5vZGUuaW5zZXJ0ZWQgPSB0cnVlO1xufVxuZnVuY3Rpb24gY3JlYXRlRG9tKGRub2RlLCBwYXJlbnRWTm9kZSwgbmV4dFNpYmxpbmdzLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgY2hpbGROb2Rlcykge1xuICAgIGxldCBkb21Ob2RlO1xuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBpZiAoaXNXTm9kZShkbm9kZSkpIHtcbiAgICAgICAgbGV0IHsgd2lkZ2V0Q29uc3RydWN0b3IgfSA9IGRub2RlO1xuICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpO1xuICAgICAgICBpZiAoIWlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKHdpZGdldENvbnN0cnVjdG9yKSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHBhcmVudEluc3RhbmNlRGF0YS5yZWdpc3RyeSgpLmdldCh3aWRnZXRDb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpZGdldENvbnN0cnVjdG9yID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB3aWRnZXRDb25zdHJ1Y3RvcigpO1xuICAgICAgICBkbm9kZS5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICBuZXh0U2libGluZ01hcC5zZXQoaW5zdGFuY2UsIG5leHRTaWJsaW5ncyk7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlID0gKCkgPT4ge1xuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZURhdGEucmVuZGVyaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlLnB1c2goeyBpbnN0YW5jZSwgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoIH0pO1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlUmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IHRydWU7XG4gICAgICAgIGluc3RhbmNlLl9fc2V0Q29yZVByb3BlcnRpZXNfXyhkbm9kZS5jb3JlUHJvcGVydGllcyk7XG4gICAgICAgIGluc3RhbmNlLl9fc2V0Q2hpbGRyZW5fXyhkbm9kZS5jaGlsZHJlbik7XG4gICAgICAgIGluc3RhbmNlLl9fc2V0UHJvcGVydGllc19fKGRub2RlLnByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCByZW5kZXJlZCA9IGluc3RhbmNlLl9fcmVuZGVyX18oKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xuICAgICAgICBpZiAocmVuZGVyZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUmVuZGVyZWQgPSBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKHJlbmRlcmVkLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IGZpbHRlcmVkUmVuZGVyZWQ7XG4gICAgICAgICAgICBhZGRDaGlsZHJlbihwYXJlbnRWTm9kZSwgZmlsdGVyZWRSZW5kZXJlZCwgcHJvamVjdGlvbk9wdGlvbnMsIGluc3RhbmNlLCBpbnNlcnRCZWZvcmUsIGNoaWxkTm9kZXMpO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZSwgcGFyZW50Vk5vZGUgfSk7XG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGRSb290KCk7XG4gICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm9uQXR0YWNoKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IHByb2plY3Rpb25PcHRpb25zLm1lcmdlRWxlbWVudDtcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jID0gcGFyZW50Vk5vZGUuZG9tTm9kZS5vd25lckRvY3VtZW50O1xuICAgICAgICBpZiAoIWRub2RlLnRhZyAmJiB0eXBlb2YgZG5vZGUudGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChkbm9kZS5kb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgcGFyZW50Vk5vZGUuZG9tTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RvbU5vZGUgPSBkbm9kZS5kb21Ob2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFZOb2RlLmRvbU5vZGUgPT09IGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLnJlcGxhY2VDaGlsZChuZXdEb21Ob2RlLCBkbm9kZS5kb21Ob2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQobmV3RG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZSAmJiBkbm9kZS5kb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG5vZGUuZG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSBuZXdEb21Ob2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuaW5zZXJ0QmVmb3JlKGRvbU5vZGUsIGluc2VydEJlZm9yZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmFwcGVuZENoaWxkKGRvbU5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkbm9kZS5kb21Ob2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZG5vZGUudGFnID09PSAnc3ZnJykge1xuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UsIGRub2RlLnRhZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgfHwgZG9jLmNyZWF0ZUVsZW1lbnQoZG5vZGUudGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmluc2VydEJlZm9yZShkb21Ob2RlLCBpbnNlcnRCZWZvcmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZG9tTm9kZS5wYXJlbnROb2RlICE9PSBwYXJlbnRWTm9kZS5kb21Ob2RlKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5hcHBlbmRDaGlsZChkb21Ob2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZURvbShwcmV2aW91cywgZG5vZGUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgcGFyZW50SW5zdGFuY2UsIG9sZE5leHRTaWJsaW5ncywgbmV4dFNpYmxpbmdzKSB7XG4gICAgaWYgKGlzV05vZGUoZG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IHsgaW5zdGFuY2UgfSA9IHByZXZpb3VzO1xuICAgICAgICBjb25zdCB7IHBhcmVudFZOb2RlLCBkbm9kZTogbm9kZSB9ID0gaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNSZW5kZXJlZCA9IG5vZGUgPyBub2RlLnJlbmRlcmVkIDogcHJldmlvdXMucmVuZGVyZWQ7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSB0cnVlO1xuICAgICAgICBpbnN0YW5jZS5fX3NldENvcmVQcm9wZXJ0aWVzX18oZG5vZGUuY29yZVByb3BlcnRpZXMpO1xuICAgICAgICBpbnN0YW5jZS5fX3NldENoaWxkcmVuX18oZG5vZGUuY2hpbGRyZW4pO1xuICAgICAgICBpbnN0YW5jZS5fX3NldFByb3BlcnRpZXNfXyhkbm9kZS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgbmV4dFNpYmxpbmdNYXAuc2V0KGluc3RhbmNlLCBuZXh0U2libGluZ3MpO1xuICAgICAgICBkbm9kZS5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmRpcnR5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJlZCA9IGluc3RhbmNlLl9fcmVuZGVyX18oKTtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGRub2RlLnJlbmRlcmVkID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihyZW5kZXJlZCwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgdXBkYXRlQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIG9sZE5leHRTaWJsaW5ncywgcHJldmlvdXNSZW5kZXJlZCwgZG5vZGUucmVuZGVyZWQsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IHByZXZpb3VzUmVuZGVyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlLCBwYXJlbnRWTm9kZSB9KTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZFJvb3QoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChwcmV2aW91cyA9PT0gZG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb21Ob2RlID0gKGRub2RlLmRvbU5vZGUgPSBwcmV2aW91cy5kb21Ob2RlKTtcbiAgICAgICAgbGV0IHRleHRVcGRhdGVkID0gZmFsc2U7XG4gICAgICAgIGxldCB1cGRhdGVkID0gZmFsc2U7XG4gICAgICAgIGlmICghZG5vZGUudGFnICYmIHR5cGVvZiBkbm9kZS50ZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGRub2RlLnRleHQgIT09IHByZXZpb3VzLnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdEb21Ob2RlID0gZG9tTm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRub2RlLnRleHQpO1xuICAgICAgICAgICAgICAgIGRvbU5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3RG9tTm9kZSwgZG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZSA9IG5ld0RvbU5vZGU7XG4gICAgICAgICAgICAgICAgdGV4dFVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0VXBkYXRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkbm9kZS50YWcgJiYgZG5vZGUudGFnLmxhc3RJbmRleE9mKCdzdmcnLCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgbmFtZXNwYWNlOiBOQU1FU1BBQ0VfU1ZHIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzLmNoaWxkcmVuICE9PSBkbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihkbm9kZS5jaGlsZHJlbiwgcGFyZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGRub2RlLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgdXBkYXRlZCA9XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKGRub2RlLCBvbGROZXh0U2libGluZ3MsIHByZXZpb3VzLmNoaWxkcmVuLCBjaGlsZHJlbiwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB8fCB1cGRhdGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9wZXJ0aWVzID0gYnVpbGRQcmV2aW91c1Byb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXMsIGRub2RlKTtcbiAgICAgICAgICAgIGlmIChkbm9kZS5hdHRyaWJ1dGVzICYmIGRub2RlLmV2ZW50cykge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmF0dHJpYnV0ZXMsIGRub2RlLmF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICB1cGRhdGVkID1cbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMucHJvcGVydGllcywgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIGZhbHNlKSB8fCB1cGRhdGVkO1xuICAgICAgICAgICAgICAgIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5ldmVudHMsIGRub2RlLmV2ZW50cywgcHJvamVjdGlvbk9wdGlvbnMsIHRydWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGRub2RlLmV2ZW50cztcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhldmVudHMpLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50LCBldmVudHNbZXZlbnRdLCBwcm9qZWN0aW9uT3B0aW9ucywgZG5vZGUucHJvcGVydGllcy5iaW5kLCBwcmV2aW91c1Byb3BlcnRpZXMuZXZlbnRzW2V2ZW50XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkID1cbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMucHJvcGVydGllcywgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSBudWxsICYmIGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGQoZG9tTm9kZSwgYCR7ZG5vZGUucHJvcGVydGllcy5rZXl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZWQgJiYgZG5vZGUucHJvcGVydGllcyAmJiBkbm9kZS5wcm9wZXJ0aWVzLnVwZGF0ZUFuaW1hdGlvbikge1xuICAgICAgICAgICAgZG5vZGUucHJvcGVydGllcy51cGRhdGVBbmltYXRpb24oZG9tTm9kZSwgZG5vZGUucHJvcGVydGllcywgcHJldmlvdXMucHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBhZGREZWZlcnJlZFByb3BlcnRpZXModm5vZGUsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgLy8gdHJhbnNmZXIgYW55IHByb3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkIC0gYXMgdGhlc2UgbXVzdCBiZSBkZWNvcmF0ZWQgcHJvcGVydGllc1xuICAgIHZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllcyA9IHZub2RlLnByb3BlcnRpZXM7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHZub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrKCEhdm5vZGUuaW5zZXJ0ZWQpO1xuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICB2bm9kZS5wcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcywgdm5vZGUuZGVjb3JhdGVkRGVmZXJyZWRQcm9wZXJ0aWVzKTtcbiAgICBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHZub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrKCEhdm5vZGUuaW5zZXJ0ZWQpLCB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMpO1xuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKHZub2RlLmRvbU5vZGUsIHZub2RlLnByb3BlcnRpZXMsIHByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgdm5vZGUucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBpZiAocHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XG4gICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xuICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XG4gICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcbiAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChnbG9iYWwucmVxdWVzdElkbGVDYWxsYmFjaykge1xuICAgICAgICAgICAgZ2xvYmFsLnJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBzY2hlZHVsZVJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xuICAgICAgICByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9qZWN0b3JTdGF0ZS5yZW5kZXJTY2hlZHVsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJTY2hlZHVsZWQgPSBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucykge1xuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcbiAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJTY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVuZGVyUXVldWUgPSBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZTtcbiAgICBjb25zdCByZW5kZXJzID0gWy4uLnJlbmRlclF1ZXVlXTtcbiAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZSA9IFtdO1xuICAgIHJlbmRlcnMuc29ydCgoYSwgYikgPT4gYS5kZXB0aCAtIGIuZGVwdGgpO1xuICAgIGNvbnN0IHByZXZpb3VzbHlSZW5kZXJlZCA9IFtdO1xuICAgIHdoaWxlIChyZW5kZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB7IGluc3RhbmNlIH0gPSByZW5kZXJzLnNoaWZ0KCk7XG4gICAgICAgIGlmIChpbnN0YW5jZU1hcC5oYXMoaW5zdGFuY2UpICYmIHByZXZpb3VzbHlSZW5kZXJlZC5pbmRleE9mKGluc3RhbmNlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHByZXZpb3VzbHlSZW5kZXJlZC5wdXNoKGluc3RhbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IHsgcGFyZW50Vk5vZGUsIGRub2RlIH0gPSBpbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5ncyA9IG5leHRTaWJsaW5nTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgICAgICB1cGRhdGVEb20oZG5vZGUsIHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBpbnN0YW5jZSwgbmV4dFNpYmxpbmdzLCBuZXh0U2libGluZ3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKTtcbiAgICBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucyk7XG59XG5leHBvcnQgY29uc3QgZG9tID0ge1xuICAgIGFwcGVuZDogZnVuY3Rpb24gKHBhcmVudE5vZGUsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IGZpbmFsUHJvamVjdG9yT3B0aW9ucyA9IGdldFByb2plY3Rpb25PcHRpb25zKHByb2plY3Rpb25PcHRpb25zLCBpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0ge1xuICAgICAgICAgICAgYWZ0ZXJSZW5kZXJDYWxsYmFja3M6IFtdLFxuICAgICAgICAgICAgZGVmZXJyZWRSZW5kZXJDYWxsYmFja3M6IFtdLFxuICAgICAgICAgICAgbm9kZU1hcDogbmV3IFdlYWtNYXAoKSxcbiAgICAgICAgICAgIHJlbmRlclNjaGVkdWxlZDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmVuZGVyUXVldWU6IFtdLFxuICAgICAgICAgICAgbWVyZ2U6IHByb2plY3Rpb25PcHRpb25zLm1lcmdlIHx8IGZhbHNlLFxuICAgICAgICAgICAgbWVyZ2VFbGVtZW50OiBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnRcbiAgICAgICAgfTtcbiAgICAgICAgcHJvamVjdG9yU3RhdGVNYXAuc2V0KGluc3RhbmNlLCBwcm9qZWN0b3JTdGF0ZSk7XG4gICAgICAgIGZpbmFsUHJvamVjdG9yT3B0aW9ucy5yb290Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICAgIGNvbnN0IHBhcmVudFZOb2RlID0gdG9QYXJlbnRWTm9kZShmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUpO1xuICAgICAgICBjb25zdCBub2RlID0gdG9JbnRlcm5hbFdOb2RlKGluc3RhbmNlLCBpbnN0YW5jZURhdGEpO1xuICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2UsIHsgZG5vZGU6IG5vZGUsIHBhcmVudFZOb2RlIH0pO1xuICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZS5wdXNoKHsgaW5zdGFuY2UsIGRlcHRoOiBmaW5hbFByb2plY3Rvck9wdGlvbnMuZGVwdGggfSk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVSZW5kZXIoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlRG9tKG5vZGUsIG5vZGUsIGZpbmFsUHJvamVjdG9yT3B0aW9ucywgcGFyZW50Vk5vZGUsIGluc3RhbmNlLCBbXSwgW10pO1xuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5vbkF0dGFjaCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuRGVmZXJyZWRSZW5kZXJDYWxsYmFja3MoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcbiAgICAgICAgcnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbU5vZGU6IGZpbmFsUHJvamVjdG9yT3B0aW9ucy5yb290Tm9kZVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcbiAgICB9LFxuICAgIG1lcmdlOiBmdW5jdGlvbiAoZWxlbWVudCwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zID0ge30pIHtcbiAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgPSB0cnVlO1xuICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uID0gdGhpcy5hcHBlbmQoZWxlbWVudC5wYXJlbnROb2RlLCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChpbnN0YW5jZSk7XG4gICAgICAgIHByb2plY3RvclN0YXRlLm1lcmdlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBwcm9qZWN0aW9uO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZG9tLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvdmRvbS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS92ZG9tLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgd2lkZ2V0RmFjdG9yeSA9IHJlcXVpcmUoXCJzcmMvbWVudS9NZW51XCIpO1xuXG52YXIgcmVnaXN0ZXJDdXN0b21FbGVtZW50ID0gcmVxdWlyZSgnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCcpLmRlZmF1bHQ7XG5cbnZhciBkZWZhdWx0RXhwb3J0ID0gd2lkZ2V0RmFjdG9yeS5kZWZhdWx0O1xuZGVmYXVsdEV4cG9ydCAmJiByZWdpc3RlckN1c3RvbUVsZW1lbnQoZGVmYXVsdEV4cG9ydCk7XG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ltcG9ydHMtbG9hZGVyP3dpZGdldEZhY3Rvcnk9c3JjL21lbnUvTWVudSEuL25vZGVfbW9kdWxlcy9AZG9qby9jbGktYnVpbGQtd2lkZ2V0L3RlbXBsYXRlL2N1c3RvbS1lbGVtZW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9pbXBvcnRzLWxvYWRlci9pbmRleC5qcz93aWRnZXRGYWN0b3J5PXNyYy9tZW51L01lbnUhLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDApXHJcbiAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSB5W29wWzBdICYgMiA/IFwicmV0dXJuXCIgOiBvcFswXSA/IFwidGhyb3dcIiA6IFwibmV4dFwiXSkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbMCwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgIH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChvW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9OyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2goZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxuXHRcdGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyB2IH0gZnJvbSAnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2QnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQnO1xuaW1wb3J0IHsgV2lkZ2V0UHJvcGVydGllcywgV05vZGUgfSBmcm9tICdAZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB0aGVtZSwgVGhlbWVkTWl4aW4gfSBmcm9tICdAZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1RoZW1lZCc7XG5pbXBvcnQgeyBXaWRnZXRCYXNlIH0gZnJvbSAnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1dpZGdldEJhc2UnO1xuaW1wb3J0IHsgTWVudUl0ZW0sIE1lbnVJdGVtUHJvcGVydGllcyB9IGZyb20gJy4uL21lbnUtaXRlbS9NZW51SXRlbSc7XG5cbmltcG9ydCAqIGFzIGNzcyBmcm9tICcuL21lbnUubS5jc3MnO1xuXG5pbnRlcmZhY2UgTWVudVByb3BlcnRpZXMgZXh0ZW5kcyBXaWRnZXRQcm9wZXJ0aWVzIHtcblx0b25TZWxlY3RlZDogKGRhdGE6IGFueSkgPT4gdm9pZDtcbn1cblxuQGN1c3RvbUVsZW1lbnQ8TWVudVByb3BlcnRpZXM+KHtcblx0dGFnOiAnZGVtby1tZW51Jyxcblx0ZXZlbnRzOiBbJ29uU2VsZWN0ZWQnXVxufSlcbkB0aGVtZShjc3MpXG5leHBvcnQgY2xhc3MgTWVudSBleHRlbmRzIFRoZW1lZE1peGluKFdpZGdldEJhc2UpPE1lbnVQcm9wZXJ0aWVzLCBXTm9kZTxNZW51SXRlbT4+IHtcblx0cHJpdmF0ZSBfc2VsZWN0ZWRJZDogbnVtYmVyO1xuXG5cdHByaXZhdGUgX29uU2VsZWN0ZWQoaWQ6IG51bWJlciwgZGF0YTogYW55KSB7XG5cdFx0dGhpcy5fc2VsZWN0ZWRJZCA9IGlkO1xuXHRcdHRoaXMucHJvcGVydGllcy5vblNlbGVjdGVkKGRhdGEpO1xuXHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xuXHR9XG5cblx0cHJvdGVjdGVkIHJlbmRlcigpIHtcblx0XHRjb25zdCBpdGVtcyA9IHRoaXMuY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcblx0XHRcdGlmIChjaGlsZCkge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0aWVzOiBQYXJ0aWFsPE1lbnVJdGVtUHJvcGVydGllcz4gPSB7XG5cdFx0XHRcdFx0b25TZWxlY3RlZDogKGRhdGE6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fb25TZWxlY3RlZChpbmRleCwgZGF0YSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAodGhpcy5fc2VsZWN0ZWRJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cHJvcGVydGllcy5zZWxlY3RlZCA9IGluZGV4ID09PSB0aGlzLl9zZWxlY3RlZElkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNoaWxkLnByb3BlcnRpZXMgPSB7IC4uLmNoaWxkLnByb3BlcnRpZXMsIC4uLnByb3BlcnRpZXMgfTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjaGlsZDtcblx0XHR9KTtcblxuXHRcdHJldHVybiB2KCduYXYnLCB7IGNsYXNzZXM6IHRoaXMudGhlbWUoY3NzLnJvb3QpIH0sIFtcblx0XHRcdHYoXG5cdFx0XHRcdCdvbCcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjbGFzc2VzOiB0aGlzLnRoZW1lKGNzcy5tZW51Q29udGFpbmVyKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpdGVtc1xuXHRcdFx0KVxuXHRcdF0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPXRzJmluc3RhbmNlTmFtZT0wX21lbnUhLi9zcmMvbWVudS9NZW51LnRzIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiIF9rZXlcIjpcInRlc3QtYXBwL21lbnVcIixcInJvb3RcIjpcIm1lbnUtbV9fcm9vdF9fM2JBNmpcIixcIm1lbnVDb250YWluZXJcIjpcIm1lbnUtbV9fbWVudUNvbnRhaW5lcl9fMWVvR2ZcIn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWVudS9tZW51Lm0uY3NzXG4vLyBtb2R1bGUgaWQgPSAuL3NyYy9tZW51L21lbnUubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/test-app/fixtures/unix/dist/menu-item/menu-item-1.0.0.js b/test-app/fixtures/unix/dist/menu-item/menu-item-1.0.0.js index f805ed0..3e1453e 100644 --- a/test-app/fixtures/unix/dist/menu-item/menu-item-1.0.0.js +++ b/test-app/fixtures/unix/dist/menu-item/menu-item-1.0.0.js @@ -6,7 +6,7 @@ * All rights reserved * */ -!function(e){var t={};function o(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,o),s.l=!0,s.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}({"./node_modules/@dojo/core/Destroyable.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/core/lang.mjs"),s=o("./node_modules/@dojo/shim/Promise.mjs");function n(){return s.a.resolve(!1)}function i(){throw new Error("Call made to destroyed method")}class d{constructor(){this.handles=[]}own(e){const t=Array.isArray(e)?Object(r.b)(...e):e,{handles:o}=this;return o.push(t),{destroy(){o.splice(o.indexOf(t)),t.destroy()}}}destroy(){return new s.a(e=>{this.handles.forEach(e=>{e&&e.destroy&&e.destroy()}),this.destroy=n,this.own=i,e(!0)})}}t.a=d},"./node_modules/@dojo/core/Evented.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/core/Destroyable.mjs");const n=new r.b;class i extends s.a{constructor(){super(...arguments),this.listenersMap=new r.b}emit(e){this.listenersMap.forEach((t,o)=>{(function(e,t){if("string"==typeof t&&"string"==typeof e&&-1!==e.indexOf("*")){let o;return n.has(e)?o=n.get(e):(o=new RegExp(`^${e.replace(/\*/g,".*")}$`),n.set(e,o)),o.test(t)}return e===t})(o,e.type)&&t.forEach(t=>{t.call(this,e)})})}on(e,t){if(Array.isArray(t)){const o=t.map(t=>this._addListener(e,t));return{destroy(){o.forEach(e=>e.destroy())}}}return this._addListener(e,t)}_addListener(e,t){const o=this.listenersMap.get(e)||[];return o.push(t),this.listenersMap.set(e,o),{destroy:()=>{const o=this.listenersMap.get(e)||[];o.splice(o.indexOf(t),1)}}}}t.a=i},"./node_modules/@dojo/core/lang.mjs":function(e,t,o){"use strict";t.b=function(...e){return function(e){let t=!1;return{destroy:function(){t||(t=!0,e())}}}(function(){for(let t=0;t{r[e]=t,delete n[e]},()=>{delete n[e]})}function l(e){let t;const o=e.toLowerCase();if(o in a)t=a[o];else if(s[o])t=r[o]=s[o].call(null),delete s[o];else{if(!(o in r)){if(e in n)return!1;throw new TypeError(`Attempt to detect unregistered has feature "${e}"`)}t=r[o]}return t}c("debug",!0),c("host-browser","undefined"!=typeof document&&"undefined"!=typeof location),c("host-node",function(){if("object"==typeof o&&o.versions&&o.versions.node)return o.versions.node})}).call(t,o("./node_modules/webpack/buildin/global.js"),o("./node_modules/process/browser.js"))},"./node_modules/@dojo/shim/Map.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});o("./node_modules/@dojo/shim/iterator.mjs");var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/object.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s=r.a.Map;t.b=s},"./node_modules/@dojo/shim/Promise.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/queue.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs"),o("./node_modules/@dojo/shim/support/has.mjs");let s=r.a.Promise;t.a=s},"./node_modules/@dojo/shim/Symbol.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/support/has.mjs");var r=o("./node_modules/@dojo/shim/global.mjs"),s=o("./node_modules/@dojo/shim/support/util.mjs");let n=r.a.Symbol;["hasInstance","isConcatSpreadable","iterator","species","replace","search","split","match","toPrimitive","toStringTag","unscopables","observable"].forEach(e=>{n[e]||Object.defineProperty(n,e,Object(s.a)(n.for(e),!1,!1))}),t.a=n},"./node_modules/@dojo/shim/WeakMap.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/iterator.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s=r.a.WeakMap;t.a=s},"./node_modules/@dojo/shim/array.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return n});var r=o("./node_modules/@dojo/shim/global.mjs"),s=(o("./node_modules/@dojo/shim/iterator.mjs"),o("./node_modules/@dojo/shim/number.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/support/util.mjs"));let n,i,d,a,c,l,u;n=r.a.Array.from,i=r.a.Array.of,d=Object(s.b)(r.a.Array.prototype.copyWithin),a=Object(s.b)(r.a.Array.prototype.fill),c=Object(s.b)(r.a.Array.prototype.find),l=Object(s.b)(r.a.Array.prototype.findIndex),u=Object(s.b)(r.a.Array.prototype.includes)},"./node_modules/@dojo/shim/global.mjs":function(e,t,o){"use strict";(function(e){const o=void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0;t.a=o}).call(t,o("./node_modules/webpack/buildin/global.js"))},"./node_modules/@dojo/shim/iterator.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/Symbol.mjs"),o("./node_modules/@dojo/shim/string.mjs")},"./node_modules/@dojo/shim/number.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/global.mjs");Math.pow(2,53)},"./node_modules/@dojo/shim/object.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s,n,i,d,a,c,l,u,h;{const e=r.a.Object;s=e.assign,n=e.getOwnPropertyDescriptor,i=e.getOwnPropertyNames,d=e.getOwnPropertySymbols,a=e.is,c=e.keys}{const e=r.a.Object;l=e.getOwnPropertyDescriptors,u=e.entries,h=e.values}},"./node_modules/@dojo/shim/string.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs"),s=(o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/support/util.mjs"));t.b=55296;t.a=56319;let n,i,d,a,c,l,u,h,p,m;n=r.a.String.fromCodePoint,i=r.a.String.raw,d=Object(s.b)(r.a.String.prototype.codePointAt),a=Object(s.b)(r.a.String.prototype.endsWith),c=Object(s.b)(r.a.String.prototype.includes),l=Object(s.b)(r.a.String.prototype.normalize),u=Object(s.b)(r.a.String.prototype.repeat),h=Object(s.b)(r.a.String.prototype.startsWith),p=Object(s.b)(r.a.String.prototype.padEnd),m=Object(s.b)(r.a.String.prototype.padStart)},"./node_modules/@dojo/shim/support/has.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/has/has.mjs"),s=o("./node_modules/@dojo/shim/global.mjs");r.b;Object(r.a)("es6-array",()=>["from","of"].every(e=>e in s.a.Array)&&["findIndex","find","copyWithin"].every(e=>e in s.a.Array.prototype),!0),Object(r.a)("es6-array-fill",()=>"fill"in s.a.Array.prototype&&1===[1].fill(9,Number.POSITIVE_INFINITY)[0],!0),Object(r.a)("es7-array",()=>"includes"in s.a.Array.prototype,!0),Object(r.a)("es6-map",()=>{if("function"==typeof s.a.Map)try{const e=new s.a.Map([[0,1]]);return e.has(0)&&"function"==typeof e.keys&&"function"==typeof e.values&&"function"==typeof e.entries}catch(e){return!1}return!1},!0),Object(r.a)("es6-math",()=>["clz32","sign","log10","log2","log1p","expm1","cosh","sinh","tanh","acosh","asinh","atanh","trunc","fround","cbrt","hypot"].every(e=>"function"==typeof s.a.Math[e]),!0),Object(r.a)("es6-math-imul",()=>"imul"in s.a.Math&&-5===Math.imul(4294967295,5),!0),Object(r.a)("es6-object",()=>["assign","is","getOwnPropertySymbols","setPrototypeOf"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es2017-object",()=>["values","entries","getOwnPropertyDescriptors"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es-observable",()=>void 0!==s.a.Observable,!0),Object(r.a)("es6-promise",()=>void 0!==s.a.Promise&&!0,!0),Object(r.a)("es6-set",()=>{if("function"==typeof s.a.Set){const e=new s.a.Set([1]);return e.has(1)&&"keys"in e&&"function"==typeof e.keys&&!0}return!1},!0),Object(r.a)("es6-string",()=>["fromCodePoint"].every(e=>"function"==typeof s.a.String[e])&&["codePointAt","normalize","repeat","startsWith","endsWith","includes"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-string-raw",()=>{function e(e,...t){const o=[...e];return o.raw=e.raw,o}if("raw"in s.a.String){let t=e`a\n${1}`;return t.raw=["a\\n"],"a:\\n"===s.a.String.raw(t,42)}return!1},!0),Object(r.a)("es2017-string",()=>["padStart","padEnd"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-symbol",()=>void 0!==s.a.Symbol&&"symbol"==typeof Symbol(),!0),Object(r.a)("es6-weakmap",()=>{if(void 0!==s.a.WeakMap){const e={},t={},o=new s.a.WeakMap([[e,1]]);return Object.freeze(e),1===o.get(e)&&o.set(t,2)===o&&!0}return!1},!0),Object(r.a)("microtasks",()=>!0,!0),Object(r.a)("postmessage",()=>void 0!==s.a.window&&"function"==typeof s.a.postMessage,!0),Object(r.a)("raf",()=>"function"==typeof s.a.requestAnimationFrame,!0),Object(r.a)("setimmediate",()=>void 0!==s.a.setImmediate,!0),Object(r.a)("dom-mutationobserver",()=>{if(Boolean(s.a.MutationObserver||s.a.WebKitMutationObserver)){const e=document.createElement("div"),t=new(s.a.MutationObserver||s.a.WebKitMutationObserver)(function(){});return t.observe(e,{attributes:!0}),e.style.setProperty("display","block"),Boolean(t.takeRecords().length)}return!1},!0),Object(r.a)("dom-webanimation",()=>void 0!==s.a.Animation&&void 0!==s.a.KeyframeEffect,!0)},"./node_modules/@dojo/shim/support/queue.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/has.mjs");function s(e){e&&e.isActive&&e.callback&&e.callback()}function n(e,t){return{destroy:function(){this.destroy=function(){},e.isActive=!1,e.callback=null,t&&t()}}}!function(){let e,t;{const e=[];r.a.addEventListener("message",function(t){t.source===r.a&&"dojo-queue-message"===t.data&&(t.stopPropagation(),e.length&&s(e.shift()))}),t=function(t){e.push(t),r.a.postMessage("dojo-queue-message","*")}}function o(o){const r={isActive:!0,callback:o},s=t(r);return n(r,e&&function(){e(s)})}}();!function(){function e(e){const t={isActive:!0,callback:e},o=requestAnimationFrame(s.bind(null,t));return n(t,function(){cancelAnimationFrame(o)})}}();!function(){let e;e=function(e){r.a.Promise.resolve(e).then(s)}}()},"./node_modules/@dojo/shim/support/util.mjs":function(e,t,o){"use strict";t.a=function(e,t=!1,o=!0,r=!0){return{value:e,enumerable:t,writable:o,configurable:r}},t.b=function(e){return function(t,...o){return e.apply(t,o)}}},"./node_modules/@dojo/widget-core/Injector.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/core/Evented.mjs");class s extends r.a{constructor(e){super(),this._payload=e}setInvalidator(e){this._invalidator=e}get(){return this._payload}set(e){this._payload=e,this._invalidator&&this._invalidator()}}t.a=s},"./node_modules/@dojo/widget-core/NodeHandler.mjs":function(e,t,o){"use strict";var r,s=o("./node_modules/@dojo/core/Evented.mjs"),n=o("./node_modules/@dojo/shim/Map.mjs");!function(e){e.Projector="Projector",e.Widget="Widget"}(r||(r={}));t.a=class extends s.a{constructor(){super(...arguments),this._nodeMap=new n.b}get(e){return this._nodeMap.get(e)}has(e){return this._nodeMap.has(e)}add(e,t){this._nodeMap.set(t,e),this.emit({type:t})}addRoot(){this.emit({type:r.Widget})}addProjector(){this.emit({type:r.Projector})}clear(){this._nodeMap.clear()}}},"./node_modules/@dojo/widget-core/Registry.mjs":function(e,t,o){"use strict";t.d=a;var r=o("./node_modules/@dojo/shim/Promise.mjs"),s=o("./node_modules/@dojo/shim/Map.mjs"),n=o("./node_modules/@dojo/shim/Symbol.mjs"),i=o("./node_modules/@dojo/core/Evented.mjs");const d=Object(n.a)("Widget Base");function a(e){return Boolean(e&&e._type===d)}t.b=d;class c extends i.a{emitLoadedEvent(e,t){this.emit({type:e,action:"loaded",item:t})}define(e,t){if(void 0===this._widgetRegistry&&(this._widgetRegistry=new s.b),this._widgetRegistry.has(e))throw new Error(`widget has already been registered for '${e.toString()}'`);this._widgetRegistry.set(e,t),t instanceof r.a?t.then(t=>(this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}):a(t)&&this.emitLoadedEvent(e,t)}defineInjector(e,t){if(void 0===this._injectorRegistry&&(this._injectorRegistry=new s.b),this._injectorRegistry.has(e))throw new Error(`injector has already been registered for '${e.toString()}'`);const o=new i.a,r={injector:t(()=>o.emit({type:"invalidate"})),invalidator:o};this._injectorRegistry.set(e,r),this.emitLoadedEvent(e,r)}get(e){if(!this._widgetRegistry||!this.has(e))return null;const t=this._widgetRegistry.get(e);if(a(t))return t;if(t instanceof r.a)return null;const o=t();return this._widgetRegistry.set(e,o),o.then(t=>((function(e){return Boolean(e&&e.hasOwnProperty("__esModule")&&e.hasOwnProperty("default")&&a(e.default))})(t)&&(t=t.default),this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}),null}getInjector(e){return this._injectorRegistry&&this.hasInjector(e)?this._injectorRegistry.get(e):null}has(e){return Boolean(this._widgetRegistry&&this._widgetRegistry.has(e))}hasInjector(e){return Boolean(this._injectorRegistry&&this._injectorRegistry.has(e))}}t.a=c,t.c=c},"./node_modules/@dojo/widget-core/RegistryHandler.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/core/Evented.mjs"),n=o("./node_modules/@dojo/widget-core/Registry.mjs");t.a=class extends s.a{constructor(){super(),this._registry=new n.a,this._registryWidgetLabelMap=new r.a,this._registryInjectorLabelMap=new r.a,this.own(this._registry),this.own({destroy:()=>{this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry),this.baseRegistry=void 0)}})}set base(e){this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry)),this.baseRegistry=e}define(e,t){this._registry.define(e,t)}defineInjector(e,t){this._registry.defineInjector(e,t)}has(e){return this._registry.has(e)||Boolean(this.baseRegistry&&this.baseRegistry.has(e))}hasInjector(e){return this._registry.hasInjector(e)||Boolean(this.baseRegistry&&this.baseRegistry.hasInjector(e))}get(e,t=!1){return this._get(e,t,"get",this._registryWidgetLabelMap)}getInjector(e,t=!1){return this._get(e,t,"getInjector",this._registryInjectorLabelMap)}_get(e,t,o,r){const s=t?[this.baseRegistry,this._registry]:[this._registry,this.baseRegistry];for(let n=0;n{"loaded"===r.action&&this[o](e,t)===r.item&&this.emit({type:"invalidate"})});this.own(s),r.set(i,[...a,e])}}return null}}},"./node_modules/@dojo/widget-core/WidgetBase.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/shim/WeakMap.mjs"),n=o("./node_modules/@dojo/shim/Symbol.mjs"),i=o("./node_modules/@dojo/widget-core/d.mjs"),d=o("./node_modules/@dojo/widget-core/diff.mjs"),a=o("./node_modules/@dojo/widget-core/RegistryHandler.mjs"),c=o("./node_modules/@dojo/widget-core/NodeHandler.mjs"),l=o("./node_modules/@dojo/widget-core/vdom.mjs"),u=o("./node_modules/@dojo/widget-core/Registry.mjs");const h=new r.b,p=d.a.bind(null),m=n.a.for("dojoNoBind");t.b=m;class f{constructor(){this._initialProperties=!0,this._changedPropertyKeys=[],this._nodeHandler=new c.a,this._handles=[],this._children=[],this._decoratorCache=new r.b,this._properties={},this._boundRenderFunc=this.render.bind(this),this._boundInvalidate=this.invalidate.bind(this),l.b.set(this,{dirty:!0,onAttach:()=>{this.onAttach()},onDetach:()=>{this.onDetach(),this.destroy()},nodeHandler:this._nodeHandler,registry:()=>this.registry,coreProperties:{},rendering:!1,inputProperties:{}}),this._runAfterConstructors()}meta(e){void 0===this._metaMap&&(this._metaMap=new r.b);let t=this._metaMap.get(e);return t||(t=new e({invalidate:this._boundInvalidate,nodeHandler:this._nodeHandler,bind:this}),this.own(t),this._metaMap.set(e,t)),t}onAttach(){}onDetach(){}get properties(){return this._properties}get changedPropertyKeys(){return[...this._changedPropertyKeys]}__setCoreProperties__(e){const{baseRegistry:t}=e,o=l.b.get(this);o.coreProperties.baseRegistry!==t&&(void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry.base=t,this.invalidate()),o.coreProperties=e}__setProperties__(e){const t=l.b.get(this);t.inputProperties=e;const o=this._runBeforeProperties(e),r=this.getDecorator("registeredDiffProperty"),s=[],n=Object.keys(o);if(!1===this._initialProperties||0!==r.length){const e=[...n,...Object.keys(this._properties)],i=[],d={};let a=!1;for(let n=0;n{e.changed&&t.call(this,e.previousProperties,e.newProperties)}),this._properties=d,this._changedPropertyKeys=s}else{this._initialProperties=!1;for(let e=0;e0&&this.invalidate()}get children(){return this._children}__setChildren__(e){(this._children.length>0||e.length>0)&&(this._children=e,this.invalidate())}__render__(){l.b.get(this).dirty=!1;let e=this._runBeforeRenders()();return e=this.runAfterRenders(e),this._nodeHandler.clear(),e}invalidate(){const e=l.b.get(this);e.invalidate&&e.invalidate()}render(){return Object(i.g)("div",{},this.children)}addDecorator(e,t){if(t=Array.isArray(t)?t:[t],this.hasOwnProperty("constructor")){let o=h.get(this.constructor);o||(o=new r.b,h.set(this.constructor,o));let s=o.get(e);s||(s=[],o.set(e,s)),s.push(...t)}else{const o=this.getDecorator(e);this._decoratorCache.set(e,[...o,...t])}}_buildDecoratorList(e){const t=[];let o=this.constructor;for(;o;){const r=h.get(o);if(r){const o=r.get(e);o&&t.unshift(...o)}o=Object.getPrototypeOf(o)}return t}getDecorator(e){let t=this._decoratorCache.get(e);return void 0!==t?t:(t=this._buildDecoratorList(e),this._decoratorCache.set(e,t),t)}_mapDiffPropertyReactions(e,t){return this.getDecorator("diffReaction").reduce((o,{reaction:r,propertyName:s})=>{let n=o.get(r);return void 0===n&&(n={previousProperties:{},newProperties:{},changed:!1}),n.previousProperties[s]=this._properties[s],n.newProperties[s]=e[s],-1!==t.indexOf(s)&&(n.changed=!0),o.set(r,n),o},new r.b)}_bindFunctionProperty(e,t){if("function"==typeof e&&!e[m]&&!1===Object(u.d)(e)){void 0===this._bindFunctionPropertyMap&&(this._bindFunctionPropertyMap=new s.a);const o=this._bindFunctionPropertyMap.get(e)||{};let{boundFunc:r,scope:n}=o;return void 0!==r&&n===t||(r=e.bind(t),this._bindFunctionPropertyMap.set(e,{boundFunc:r,scope:t})),r}return e}get registry(){return void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry}_runBeforeProperties(e){const t=this.getDecorator("beforeProperties");return t.length>0?t.reduce((e,t)=>Object.assign({},e,t.call(this,e)),Object.assign({},e)):e}_runBeforeRenders(){const e=this.getDecorator("beforeRender");return e.length>0?e.reduce((e,t)=>{const o=t.call(this,e,this._properties,this._children);return o||(console.warn("Render function not returned from beforeRender, using previous render"),e)},this._boundRenderFunc):this._boundRenderFunc}runAfterRenders(e){const t=this.getDecorator("afterRender");return t.length>0?t.reduce((e,t)=>t.call(this,e),e):(void 0!==this._metaMap&&this._metaMap.forEach(e=>{e.afterRender()}),e)}_runAfterConstructors(){const e=this.getDecorator("afterConstructor");e.length>0&&e.forEach(e=>e.call(this))}own(e){this._handles.push(e)}destroy(){for(;this._handles.length>0;){const e=this._handles.pop();e&&e.destroy()}}}t.a=f,f._type=u.b},"./node_modules/@dojo/widget-core/animations/cssTransitions.mjs":function(e,t,o){"use strict";let r="",s="";function n(e){""===s&&function(e){if("WebkitTransition"in e.style)r="webkitTransitionEnd",s="webkitAnimationEnd";else{if(!("transition"in e.style||"MozTransition"in e.style))throw new Error("Your browser is not supported");r="transitionend",s="animationend"}}(e)}function i(e,t,o){n(e);let i=!1,d=function(){i||(i=!0,e.removeEventListener(r,d),e.removeEventListener(s,d),o())};t(),e.addEventListener(s,d),e.addEventListener(r,d)}t.a={enter:function(e,t,o){const r=t.enterAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(r)})},()=>{e.classList.remove(o),e.classList.remove(r)})},exit:function(e,t,o,r){const s=t.exitAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(s)})},()=>{r()})}}},"./node_modules/@dojo/widget-core/d.mjs":function(e,t,o){"use strict";t.f=d,t.e=a,t.d=function(e){return Boolean(e&&"string"!=typeof e&&e.type===i)},t.h=function(e,t,o=[]){return{children:o,widgetConstructor:e,properties:t,type:s}},t.g=function(e,t={},o){let r,s=t;Array.isArray(t)&&(o=t,s={});"function"==typeof s&&(r=s,s={});return{tag:e,deferredPropertiesCallback:r,children:o,properties:s,type:n}},t.c=function({node:e,attrs:t={},props:o={},on:r={},diffType:s="none"},n){return{tag:c(e)?e.tagName.toLowerCase():"",properties:o,attributes:t,events:r,children:n,type:i,domNode:e,text:c(e)?void 0:e.data,diffType:s}};var r=o("./node_modules/@dojo/shim/Symbol.mjs");const s=Object(r.a)("Identifier for a WNode.");t.b=s;const n=Object(r.a)("Identifier for a VNode.");t.a=n;const i=Object(r.a)("Identifier for a VNode created using existing dom.");function d(e){return Boolean(e&&"string"!=typeof e&&e.type===s)}function a(e){return Boolean(e&&"string"!=typeof e&&(e.type===n||e.type===i))}function c(e){return!!e.tagName}},"./node_modules/@dojo/widget-core/decorators/afterRender.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("afterRender",o?t[o]:e)})}},"./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs");function n(){return Object(r.a)((e,t)=>{Object(s.a)(function(){this.invalidate()})(e)})}},"./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("beforeProperties",o?t[o]:e)})}},"./node_modules/@dojo/widget-core/decorators/customElement.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/widget-core/registerCustomElement.mjs"),s=o("./node_modules/@dojo/widget-core/Registry.mjs");function n({tag:e,properties:t=[],attributes:o=[],events:n=[],childType:i=r.CustomElementChildType.DOJO,registryFactory:d=(()=>new s.c)}){return function(r){r.prototype.__customElementDescriptor={tagName:e,attributes:o,properties:t,events:n,childType:i,registryFactory:d}}}},"./node_modules/@dojo/widget-core/decorators/diffProperty.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e,t,o){return Object(r.a)((r,s)=>{r.addDecorator(`diffProperty:${e}`,t.bind(null)),r.addDecorator("registeredDiffProperty",e),(o||s)&&r.addDecorator("diffReaction",{propertyName:e,reaction:s?r[s]:o})})}},"./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs":function(e,t,o){"use strict";function r(e){return function(t,o,r){"function"==typeof t?e(t.prototype,void 0):e(t,o)}}t.a=r},"./node_modules/@dojo/widget-core/decorators/inject.mjs":function(e,t,o){"use strict";t.a=d;var r=o("./node_modules/@dojo/shim/WeakMap.mjs"),s=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs");const i=new r.a;function d({name:e,getProperties:t}){return Object(s.a)((o,r)=>{Object(n.a)(function(o){const r=this.registry.getInjector(e);if(r){const{injector:e,invalidator:s}=r,n=i.get(this)||[];return 0===n.length&&i.set(this,n),-1===n.indexOf(r)&&(this.own(s.on("invalidate",()=>{this.invalidate()})),n.push(r)),t(e(),o)}})(o)})}},"./node_modules/@dojo/widget-core/diff.mjs":function(e,t,o){"use strict";t.b=i,t.a=function(e,t){let o;o="function"==typeof t?t._type===r.b?n(e,t):function(e,t){return{changed:!1,value:t}}(0,t):s(t)?i(e,t):n(e,t);return o};var r=o("./node_modules/@dojo/widget-core/Registry.mjs");function s(e){return"[object Object]"===Object.prototype.toString.call(e)||Array.isArray(e)}function n(e,t){return{changed:e!==t,value:t}}function i(e,t){let o=!1;const r=e&&s(e),n=t&&s(t);if(!r||!n)return{changed:!0,value:t};const i=Object.keys(e),d=Object.keys(t);return{changed:o=i.length!==d.length||d.some(o=>t[o]!==e[o]),value:t}}},"./node_modules/@dojo/widget-core/mixins/Projector.mjs":function(e,t,o){"use strict";t.a=u;var r,s,n=o("./node_modules/tslib/tslib.es6.js"),i=o("./node_modules/@dojo/core/lang.mjs"),d=o("./node_modules/@dojo/widget-core/animations/cssTransitions.mjs"),a=o("./node_modules/@dojo/widget-core/decorators/afterRender.mjs"),c=o("./node_modules/@dojo/widget-core/d.mjs"),l=o("./node_modules/@dojo/widget-core/vdom.mjs");function u(e){class t extends e{constructor(...e){super(...e),this._root=document.body,this._async=!0,this._projectorProperties={},this._projectionOptions={transitions:d.a},this.root=document.body,this.projectorState=r.Detached}append(e){const t={type:s.Append,root:e};return this._attach(t)}merge(e){const t={type:s.Merge,root:e};return this._attach(t)}set root(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change root element");this._root=e}get root(){return this._root}get async(){return this._async}set async(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change async mode");this._async=e}sandbox(e=document){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot create sandbox");this._async=!1;const t=this.root;this.own({destroy:()=>{this._root=t}}),this._attach({root:e.createDocumentFragment(),type:s.Append})}setChildren(e){this.__setChildren__(e)}setProperties(e){this.__setProperties__(e)}__setProperties__(e){this._projectorProperties&&this._projectorProperties.registry!==e.registry&&this._projectorProperties.registry&&this._projectorProperties.registry.destroy(),this._projectorProperties=Object(i.a)({},e),super.__setCoreProperties__({bind:this,baseRegistry:e.registry}),super.__setProperties__(e)}toHtml(){if(this.projectorState!==r.Attached||!this._projection)throw new Error("Projector is not attached, cannot return an HTML string of projection.");return this._projection.domNode.childNodes[0].outerHTML}afterRender(e){let t=e;return"string"!=typeof e&&null!==e&&void 0!==e||(t=Object(c.g)("span",{},[e])),t}destroy(){super.destroy()}_attach({type:e,root:t}){if(t&&(this.root=t),this._attachHandle)return this._attachHandle;this.projectorState=r.Attached;const o={destroy:()=>{this.projectorState===r.Attached&&(this._projection=void 0,this.projectorState=r.Detached)}};switch(this.own(o),this._attachHandle=o,this._projectionOptions=Object.assign({},this._projectionOptions,{sync:!this._async}),e){case s.Append:this._projection=l.a.append(this.root,this,this._projectionOptions);break;case s.Merge:this._projection=l.a.merge(this.root,this,this._projectionOptions)}return this._attachHandle}}return n.a([Object(a.a)(),n.b("design:type",Function),n.b("design:paramtypes",[Object]),n.b("design:returntype",void 0)],t.prototype,"afterRender",null),t}!function(e){e[e.Attached=1]="Attached",e[e.Detached=2]="Detached"}(r||(r={})),function(e){e[e.Append=1]="Append",e[e.Merge=2]="Merge"}(s||(s={}))},"./node_modules/@dojo/widget-core/mixins/Themed.mjs":function(e,t,o){"use strict";t.c=function(e){return Object(i.a)(t=>{t.addDecorator("baseThemeClasses",e)})},t.b=function(e,t){const o=new s.a(e);return t.defineInjector(l,e=>(o.setInvalidator(e),()=>o.get())),o},t.a=u;var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/widget-core/Injector.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/inject.mjs"),i=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),d=o("./node_modules/@dojo/widget-core/decorators/diffProperty.mjs"),a=o("./node_modules/@dojo/widget-core/diff.mjs");const c=" _key",l=Symbol("theme");function u(e){let t=class extends e{constructor(){super(...arguments),this._registeredBaseThemeKeys=[],this._recalculateClasses=!0,this._theme={}}theme(e){return this._recalculateClasses&&this._recalculateThemeClasses(),Array.isArray(e)?e.map(e=>this._getThemeClass(e)):this._getThemeClass(e)}onPropertiesChanged(){this._recalculateClasses=!0}_getThemeClass(e){if(void 0===e||null===e)return e;const t=this.properties.extraClasses||{},o=this._baseThemeClassesReverseLookup[e];let r=[];return o?(t[o]&&r.push(t[o]),this._theme[o]?r.push(this._theme[o]):r.push(this._registeredBaseTheme[o]),r.join(" ")):(console.warn(`Class name: '${e}' not found in theme`),null)}_recalculateThemeClasses(){const{theme:e={}}=this.properties,t=this.getDecorator("baseThemeClasses");this._registeredBaseTheme||(this._registeredBaseTheme=t.reduce((e,t)=>{const o=c,s=t[o],n=r.c(t,["symbol"==typeof o?o:o+""]);return this._registeredBaseThemeKeys.push(s),Object.assign({},e,n)},{}),this._baseThemeClassesReverseLookup=t.reduce((e,t)=>(Object.keys(t).forEach(o=>{e[t[o]]=o}),e),{})),this._theme=this._registeredBaseThemeKeys.reduce((t,o)=>Object.assign({},t,e[o]),{}),this._recalculateClasses=!1}};return r.a([Object(d.a)("theme",a.b),Object(d.a)("extraClasses",a.b),r.b("design:type",Function),r.b("design:paramtypes",[]),r.b("design:returntype",void 0)],t.prototype,"onPropertiesChanged",null),t=r.a([Object(n.a)({name:l,getProperties:(e,t)=>t.theme?{}:{theme:e}})],t)}},"./node_modules/@dojo/widget-core/registerCustomElement.mjs":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"CustomElementChildType",function(){return r}),t.DomToWidgetWrapper=h,t.create=p,t.register=m;var r,s=o("./node_modules/tslib/tslib.es6.js"),n=o("./node_modules/@dojo/widget-core/WidgetBase.mjs"),i=o("./node_modules/@dojo/widget-core/mixins/Projector.mjs"),d=o("./node_modules/@dojo/shim/array.mjs"),a=o("./node_modules/@dojo/widget-core/d.mjs"),c=o("./node_modules/@dojo/shim/global.mjs"),l=o("./node_modules/@dojo/widget-core/mixins/Themed.mjs"),u=o("./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs");function h(e){let t=class extends n.a{render(){const t=Object.keys(this.properties).reduce((e,t)=>{const o=this.properties[t];return 0===t.indexOf("on")&&(t=`__${t}`),e[t]=o,e},{});return Object(a.c)({node:e,props:t,diffType:"dom"})}static get domNode(){return e}};return t=s.a([Object(u.a)()],t)}function p(e,t){const{attributes:o,childType:s,registryFactory:u}=e,p={};return o.forEach(e=>{const t=e.toLowerCase();p[t]=e}),class extends HTMLElement{constructor(){super(...arguments),this._properties={},this._children=[],this._eventProperties={},this._initialised=!1}connectedCallback(){if(this._initialised)return;const o={},{attributes:p,properties:m,events:f}=e;this._properties=Object.assign({},this._properties,this._attributesToProperties(p)),[...p,...m].forEach(e=>{const t=this[e],r=e.replace(/^on/,"__");void 0!==t&&(this._properties[e]=t),r!==e&&(o[r]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}),o[e]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}}),f.forEach(e=>{const t=e.replace(/^on/,"").toLowerCase(),r=e.replace(/^on/,"__on");o[r]={get:()=>this._getEventProperty(e),set:t=>this._setEventProperty(e,t)},this._eventProperties[e]=void 0,this._properties[e]=((...o)=>{const r=this._getEventProperty(e);"function"==typeof r&&r(...o),this.dispatchEvent(new CustomEvent(t,{bubbles:!1,detail:o}))})}),Object.defineProperties(this,o);const g=s===r.TEXT?this.childNodes:this.children;Object(d.a)(g).forEach(e=>{s===r.DOJO?(e.addEventListener("dojo-ce-render",()=>this._render()),e.addEventListener("dojo-ce-connected",()=>this._render()),this._children.push(h(e))):this._children.push(Object(a.c)({node:e,diffType:"dom"}))}),this.addEventListener("dojo-ce-connected",e=>this._childConnected(e));const j=this._properties,_=()=>this.__children__(),y=u(),b=Object(l.b)(this._getTheme(),y);c.a.addEventListener("dojo-theme-set",()=>b.set(this._getTheme()));const v=Object(i.a)(class extends n.a{render(){return Object(a.h)(t,j,_())}});this._projector=new v,this._projector.setProperties({registry:y}),this._projector.append(this),this._initialised=!0,this.dispatchEvent(new CustomEvent("dojo-ce-connected",{bubbles:!0,detail:this}))}_getTheme(){if(c.a&&c.a.dojoce&&c.a.dojoce.theme)return c.a.dojoce.themes[c.a.dojoce.theme]}_childConnected(e){const t=e.detail;if(t.parentNode===this){this._children.some(e=>e.domNode===t)||(t.addEventListener("dojo-ce-render",()=>this._render()),this._children.push(h(t)),this._render())}}_render(){this._projector&&(this._projector.invalidate(),this.dispatchEvent(new CustomEvent("dojo-ce-render",{bubbles:!1,detail:this})))}__properties__(){return Object.assign({},this._properties,this._eventProperties)}__children__(){return s===r.DOJO?this._children.filter(e=>e.domNode.isWidget).map(e=>{const{domNode:t}=e;return Object(a.h)(e,Object.assign({},t.__properties__()),[...t.__children__()])}):this._children}attributeChangedCallback(e,t,o){const r=p[e];this._setProperty(r,o)}_setEventProperty(e,t){this._eventProperties[e]=t}_getEventProperty(e){return this._eventProperties[e]}_setProperty(e,t){"function"==typeof t&&(t[n.b]=!0),this._properties[e]=t,this._render()}_getProperty(e){return this._properties[e]}_attributesToProperties(e){return e.reduce((e,t)=>{const o=t.toLowerCase(),r=this.getAttribute(o);return null!==r&&(e[t]=r),e},{})}static get observedAttributes(){return Object.keys(p)}get isWidget(){return!0}}}function m(e){const t=e.prototype&&e.prototype.__customElementDescriptor;if(!t)throw new Error("Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?");c.a.customElements.define(t.tagName,p(t,e))}!function(e){e.DOJO="DOJO",e.NODE="NODE",e.TEXT="TEXT"}(r||(r={})),t.default=m},"./node_modules/@dojo/widget-core/vdom.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs"),s=o("./node_modules/@dojo/shim/array.mjs"),n=o("./node_modules/@dojo/widget-core/d.mjs"),i=o("./node_modules/@dojo/widget-core/Registry.mjs"),d=o("./node_modules/@dojo/shim/WeakMap.mjs");const a="http://www.w3.org/2000/svg",c="http://www.w3.org/1999/xlink",l=[],u=new d.a;t.b=u;const h=new d.a,p=new d.a;function m(e,t){return Object(n.e)(e)&&Object(n.e)(t)?(!Object(n.d)(e)&&!Object(n.d)(t)||e.domNode===t.domNode)&&(e.tag===t.tag&&e.properties.key===t.properties.key):!(!Object(n.f)(e)||!Object(n.f)(t))&&((void 0!==e.instance||"string"!=typeof t.widgetConstructor)&&(e.widgetConstructor===t.widgetConstructor&&e.properties.key===t.properties.key))}const f=function(){throw new Error("Provide a transitions object to the projectionOptions to do animations")};function g(e){if("string"!=typeof e)throw new Error("Style values must be strings")}function j(e,t,o,r,s,n){const i=p.get(r.projectorInstance),a=i.nodeMap.get(e)||new d.a;if(n){const o=a.get(n);e.removeEventListener(t,o)}let c=o.bind(s);"input"===t&&(c=function(e){o.call(this,e),e.target["oninput-value"]=e.target.value}.bind(s)),e.addEventListener(t,c),a.set(o,c),i.nodeMap.set(e,a)}function _(e,t){if(t){const o=t.split(" ");for(let t=0;t{o.focus()})}}function v(e,t,o,r,s=!1){const n=p.get(r.projectorInstance).nodeMap.get(e);n&&Object.keys(t).forEach(r=>{const i="on"===r.substr(0,2)||s,d=s?r:r.substr(2);if(i&&!o[r]){const o=n.get(t[r]);o&&e.removeEventListener(d,o)}})}function w(e,t,o,r){r.namespace===a&&"href"===t?e.setAttributeNS(c,t,o):"role"===t&&""===o||void 0===o?e.removeAttribute(t):e.setAttribute(t,o)}function O(e,t,o,r){const s=Object.keys(o),n=s.length;for(let i=0;i0)if(c&&0!==c.length){const r=[...o];for(let o=0;o0&&R(r.children,t));else{if(!r.coreProperties){const e=u.get(t);r.coreProperties={bind:t,baseRegistry:e.coreProperties.baseRegistry}}r.children&&r.children.length>0&&R(r.children,t)}o++}else e.splice(o,1)}return e}function k(e,t){if(Object(n.e)(e)&&e.properties){const o=e.properties.enterAnimation;o&&("function"==typeof o?o(e.domNode,e.properties):t.enter(e.domNode,e.properties,o))}}function N(e,t,o){if(Object(n.f)(e)){const r=e.rendered||l;if(e.instance){u.get(e.instance).onDetach(),h.delete(e.instance)}for(let e=0;e0)for(let r=0;r{let i=void 0,d=t[f];if(d){let e=f+1,o=[d];for(;o.length;){const r=o.shift();if(Object(n.f)(r))r.rendered&&o.push(...r.rendered);else if(r.domNode){i=r.domNode;break}0===o.length&&t[e]&&(o.push(t[e]),e++)}}D(l,e,i,s,r),k(l,a);const u=g;c.afterRenderCallbacks.push(()=>{A(o,u,r)})};if(!d||-1===u){p(),g++;continue}const _=()=>{const e=f;if(c.afterRenderCallbacks.push(()=>{A(t,e,r)}),Object(n.f)(d)){const e=h.get(d.instance);e&&(d=e.dnode)}N(d,a,s)};-1!==E(o,d,g+1)?(p(),_(),f++,g++):(_(),f++)}if(i>f)for(u=f;u{A(t,e,r)});let o=t[u];if(Object(n.f)(o)){const e=h.get(o.instance);e&&(o=e.dnode)}N(o,a,s)}return j}function T(e,t,o,r,i,d){if(void 0===t)return;const a=p.get(o.projectorInstance);a.merge&&void 0===d&&(d=Object(s.a)(e.domNode.childNodes));const c=o.transitions;o=Object.assign({},o,{depth:o.depth+1});for(let s=0;s0;)(e=d.shift())&&e.tagName===(l.tag.toUpperCase()||void 0)&&(l.domNode=e)}D(l,e,i,o,r)}else D(l,e,i,o,r,d);k(l,c)}}function x(e,t,o,r){if(T(t,t.children,r,o,void 0),"function"==typeof t.deferredPropertiesCallback&&void 0===t.inserted&&S(t,r),t.attributes&&t.events){O(e,{},t.attributes,r),P(e,{},t.properties,r,!1),v(e,{},t.events,r,!0);const o=t.events;Object.keys(o).forEach(s=>{j(e,s,o[s],r,t.properties.bind)})}else P(e,{},t.properties,r);if(null!==t.properties.key&&void 0!==t.properties.key){u.get(o).nodeHandler.add(e,`${t.properties.key}`)}t.inserted=!0}function D(e,t,o,r,s,d){let c;const l=p.get(r.projectorInstance);if(Object(n.f)(e)){let{widgetConstructor:n}=e;const a=u.get(s);if(!Object(i.d)(n)){const e=a.registry().get(n);if(null===e)return;n=e}const c=new n;e.instance=c;const p=u.get(c);p.invalidate=(()=>{p.dirty=!0,!1===p.rendering&&(l.renderQueue.push({instance:c,depth:r.depth}),F(r))}),p.rendering=!0,c.__setCoreProperties__(e.coreProperties),c.__setChildren__(e.children),c.__setProperties__(e.properties);const m=c.__render__();if(p.rendering=!1,m){const s=R(m,c);e.rendered=s,T(t,s,r,c,o,d)}h.set(c,{dnode:e,parentVNode:t}),p.nodeHandler.addRoot(),l.afterRenderCallbacks.push(()=>{p.onAttach()})}else{if(l.merge&&void 0!==l.mergeElement)return c=e.domNode=r.mergeElement,l.mergeElement=void 0,void x(c,e,s,r);const n=t.domNode.ownerDocument;if(e.tag||"string"!=typeof e.text)void 0===e.domNode?("svg"===e.tag&&(r=Object.assign({},r,{namespace:a})),c=void 0!==r.namespace?e.domNode=n.createElementNS(r.namespace,e.tag):e.domNode=e.domNode||n.createElement(e.tag)):c=e.domNode,x(c,e,s,r),void 0!==o?t.domNode.insertBefore(c,o):c.parentNode!==t.domNode&&t.domNode.appendChild(c);else if(void 0!==e.domNode&&t.domNode){const o=e.domNode.ownerDocument.createTextNode(e.text);t.domNode===e.domNode.parentNode?t.domNode.replaceChild(o,e.domNode):(t.domNode.appendChild(o),e.domNode.parentNode&&e.domNode.parentNode.removeChild(e.domNode)),e.domNode=o}else c=e.domNode=n.createTextNode(e.text),void 0!==o?t.domNode.insertBefore(c,o):t.domNode.appendChild(c)}}function I(e,t,o,r,s){if(Object(n.f)(t)){const{instance:r}=e,{parentVNode:s,dnode:n}=h.get(r),i=n?n.rendered:e.rendered,d=u.get(r);if(d.rendering=!0,r.__setCoreProperties__(t.coreProperties),r.__setChildren__(t.children),r.__setProperties__(t.properties),t.instance=r,!0===d.dirty){const e=r.__render__();d.rendering=!1,t.rendered=R(e,r),M(s,i,t.rendered,r,o)}else d.rendering=!1,t.rendered=i;h.set(r,{dnode:t,parentVNode:s}),d.nodeHandler.addRoot()}else{if(e===t)return!1;const r=t.domNode=e.domNode;let n=!1,i=!1;if(t.tag||"string"!=typeof t.text){if(t.tag&&0===t.tag.lastIndexOf("svg",0)&&(o=Object.assign({},o,{namespace:a})),e.children!==t.children){const r=R(t.children,s);t.children=r,i=M(t,e.children,r,s,o)||i}const n=function(e,t,o){const{diffType:r,properties:s,attributes:n}=o;if(!r||"vdom"===r)return{properties:t.properties,attributes:t.attributes,events:t.events};if("none"===r)return{properties:{},attributes:t.attributes?{}:void 0,events:t.events};let i={properties:{}};return n?(i.attributes={},i.events=t.events,Object.keys(s).forEach(t=>{i.properties[t]=e[t]}),Object.keys(n).forEach(t=>{i.attributes[t]=e.getAttribute(t)}),i):(i.properties=Object.keys(s).reduce((t,o)=>(t[o]=e.getAttribute(o)||e[o],t),{}),i)}(r,e,t);if(t.attributes&&t.events){O(r,n.attributes,t.attributes,o),i=P(r,n.properties,t.properties,o,!1)||i,v(r,n.events,t.events,o,!0);const e=t.events;Object.keys(e).forEach(s=>{j(r,s,e[s],o,t.properties.bind,n.events[s])})}else i=P(r,n.properties,t.properties,o)||i;if(null!==t.properties.key&&void 0!==t.properties.key){u.get(s).nodeHandler.add(r,`${t.properties.key}`)}}else if(t.text!==e.text){const e=r.ownerDocument.createTextNode(t.text);return r.parentNode.replaceChild(e,r),t.domNode=e,n=!0}i&&t.properties&&t.properties.updateAnimation&&t.properties.updateAnimation(r,t.properties,e.properties)}}function S(e,t){e.decoratedDeferredProperties=e.properties;const o=e.deferredPropertiesCallback(!!e.inserted),r=p.get(t.projectorInstance);e.properties=Object.assign({},o,e.decoratedDeferredProperties),r.deferredRenderCallbacks.push(()=>{const o=Object.assign({},e.deferredPropertiesCallback(!!e.inserted),e.decoratedDeferredProperties);P(e.domNode,e.properties,o,t),e.properties=o})}function L(e){const t=p.get(e.projectorInstance);if(t.deferredRenderCallbacks.length)if(e.sync)for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}else r.a.requestAnimationFrame(()=>{for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}})}function W(e){const t=p.get(e.projectorInstance);if(e.sync)for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}else r.a.requestIdleCallback?r.a.requestIdleCallback(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}}):setTimeout(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}})}function F(e){const t=p.get(e.projectorInstance);e.sync?B(e):void 0===t.renderScheduled&&(t.renderScheduled=r.a.requestAnimationFrame(()=>{B(e)}))}function B(e){const t=p.get(e.projectorInstance);t.renderScheduled=void 0;const o=[...t.renderQueue];t.renderQueue=[],o.sort((e,t)=>e.depth-t.depth);const r=[];for(;o.length;){const{instance:t}=o.shift();if(h.has(t)&&-1===r.indexOf(t)){r.push(t);const{parentVNode:o,dnode:s}=h.get(t);I(s,C(t,u.get(t)),e,0,t)}}W(e),L(e)}const H={append:function(e,t,o={}){const r=u.get(t),s=function(e,t){const o={namespace:void 0,styleApplyer:function(e,t,o){e.style[t]=o},transitions:{enter:f,exit:f},depth:0,merge:!1,sync:!1,projectorInstance:t};return Object.assign({},o,e)}(o,t),i={afterRenderCallbacks:[],deferredRenderCallbacks:[],nodeMap:new d.a,renderScheduled:void 0,renderQueue:[],merge:o.merge||!1,mergeElement:o.mergeElement};p.set(t,i),s.rootNode=e;const a={tag:"",properties:{},children:void 0,domNode:s.rootNode,type:n.a};const c=C(t,r);return h.set(t,{dnode:c,parentVNode:a}),r.invalidate=(()=>{r.dirty=!0,!1===r.rendering&&(i.renderQueue.push({instance:t,depth:s.depth}),F(s))}),I(c,c,s,0,t),i.afterRenderCallbacks.push(()=>{r.onAttach()}),L(s),W(s),{domNode:s.rootNode}},create:function(e,t){return this.append(document.createElement("div"),e,t)},merge:function(e,t,o={}){o.merge=!0,o.mergeElement=e;const r=this.append(e.parentNode,t,o);return p.get(t).merge=!1,r}};t.a=H},"./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js":function(e,t,o){var r=o("./src/menu-item/MenuItem.ts"),s=o("./node_modules/@dojo/widget-core/registerCustomElement.mjs").default,n=r.default;n&&s(n)},"./node_modules/process/browser.js":function(e,t){var o,r,s=e.exports={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function d(e){if(o===setTimeout)return setTimeout(e,0);if((o===n||!o)&&setTimeout)return o=setTimeout,setTimeout(e,0);try{return o(e,0)}catch(t){try{return o.call(null,e,0)}catch(t){return o.call(this,e,0)}}}!function(){try{o="function"==typeof setTimeout?setTimeout:n}catch(e){o=n}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var a,c=[],l=!1,u=-1;function h(){l&&a&&(l=!1,a.length?c=a.concat(c):u=-1,c.length&&p())}function p(){if(!l){var e=d(h);l=!0;for(var t=c.length;t;){for(a=c,c=[];++u1)for(var o=1;o=0;d--)(s=e[d])&&(i=(n<3?s(i):n>3?s(t,o,i):s(t,o))||i);return n>3&&i&&Object.defineProperty(t,o,i),i},t.b=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}; +!function(e){var t={};function o(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,o),s.l=!0,s.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}({"./node_modules/@dojo/framework/core/Destroyable.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/core/lang.mjs"),s=o("./node_modules/@dojo/framework/shim/Promise.mjs");function n(){return s.a.resolve(!1)}function i(){throw new Error("Call made to destroyed method")}class d{constructor(){this.handles=[]}own(e){const t=Array.isArray(e)?Object(r.b)(...e):e,{handles:o}=this;return o.push(t),{destroy(){o.splice(o.indexOf(t)),t.destroy()}}}destroy(){return new s.a(e=>{this.handles.forEach(e=>{e&&e.destroy&&e.destroy()}),this.destroy=n,this.own=i,e(!0)})}}t.a=d},"./node_modules/@dojo/framework/core/Evented.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/core/Destroyable.mjs");const n=new r.b;class i extends s.a{constructor(){super(...arguments),this.listenersMap=new r.b}emit(e){this.listenersMap.forEach((t,o)=>{(function(e,t){if("string"==typeof t&&"string"==typeof e&&-1!==e.indexOf("*")){let o;return n.has(e)?o=n.get(e):(o=new RegExp(`^${e.replace(/\*/g,".*")}$`),n.set(e,o)),o.test(t)}return e===t})(o,e.type)&&[...t].forEach(t=>{t.call(this,e)})})}on(e,t){if(Array.isArray(t)){const o=t.map(t=>this._addListener(e,t));return{destroy(){o.forEach(e=>e.destroy())}}}return this._addListener(e,t)}_addListener(e,t){const o=this.listenersMap.get(e)||[];return o.push(t),this.listenersMap.set(e,o),{destroy:()=>{const o=this.listenersMap.get(e)||[];o.splice(o.indexOf(t),1)}}}}t.a=i},"./node_modules/@dojo/framework/core/lang.mjs":function(e,t,o){"use strict";t.b=function(...e){return function(e){let t=!1;return{destroy:function(){t||(t=!0,e())}}}(function(){for(let t=0;t{r[e]=t,delete n[e]},()=>{delete n[e]})}function l(e){let t;const o=e.toLowerCase();if(o in a)t=a[o];else if(s[o])t=r[o]=s[o].call(null),delete s[o];else{if(!(o in r)){if(e in n)return!1;throw new TypeError(`Attempt to detect unregistered has feature "${e}"`)}t=r[o]}return t}c("debug",!0),c("host-browser","undefined"!=typeof document&&"undefined"!=typeof location),c("host-node",function(){if("object"==typeof o&&o.versions&&o.versions.node)return o.versions.node})}).call(t,o("./node_modules/webpack/buildin/global.js"),o("./node_modules/process/browser.js"))},"./node_modules/@dojo/framework/shim/Map.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});o("./node_modules/@dojo/framework/shim/iterator.mjs");var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/object.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s=r.a.Map;t.b=s},"./node_modules/@dojo/framework/shim/Promise.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/queue.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs");let s=r.a.Promise;t.a=s},"./node_modules/@dojo/framework/shim/Symbol.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/support/has.mjs");var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=o("./node_modules/@dojo/framework/shim/support/util.mjs");let n=r.a.Symbol;["hasInstance","isConcatSpreadable","iterator","species","replace","search","split","match","toPrimitive","toStringTag","unscopables","observable"].forEach(e=>{n[e]||Object.defineProperty(n,e,Object(s.a)(n.for(e),!1,!1))}),t.a=n},"./node_modules/@dojo/framework/shim/WeakMap.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/iterator.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s=r.a.WeakMap;t.a=s},"./node_modules/@dojo/framework/shim/array.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return n});var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=(o("./node_modules/@dojo/framework/shim/iterator.mjs"),o("./node_modules/@dojo/framework/shim/number.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/support/util.mjs"));let n,i,d,a,c,l,u;n=r.a.Array.from,i=r.a.Array.of,d=Object(s.b)(r.a.Array.prototype.copyWithin),a=Object(s.b)(r.a.Array.prototype.fill),c=Object(s.b)(r.a.Array.prototype.find),l=Object(s.b)(r.a.Array.prototype.findIndex),u=Object(s.b)(r.a.Array.prototype.includes)},"./node_modules/@dojo/framework/shim/global.mjs":function(e,t,o){"use strict";(function(e){const o=void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0;t.a=o}).call(t,o("./node_modules/webpack/buildin/global.js"))},"./node_modules/@dojo/framework/shim/iterator.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/Symbol.mjs"),o("./node_modules/@dojo/framework/shim/string.mjs")},"./node_modules/@dojo/framework/shim/number.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/global.mjs");Math.pow(2,53)},"./node_modules/@dojo/framework/shim/object.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s,n,i,d,a,c,l,u,m;{const e=r.a.Object;s=e.assign,n=e.getOwnPropertyDescriptor,i=e.getOwnPropertyNames,d=e.getOwnPropertySymbols,a=e.is,c=e.keys}{const e=r.a.Object;l=e.getOwnPropertyDescriptors,u=e.entries,m=e.values}},"./node_modules/@dojo/framework/shim/string.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=(o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/support/util.mjs"));t.b=55296;t.a=56319;let n,i,d,a,c,l,u,m,h,p;n=r.a.String.fromCodePoint,i=r.a.String.raw,d=Object(s.b)(r.a.String.prototype.codePointAt),a=Object(s.b)(r.a.String.prototype.endsWith),c=Object(s.b)(r.a.String.prototype.includes),l=Object(s.b)(r.a.String.prototype.normalize),u=Object(s.b)(r.a.String.prototype.repeat),m=Object(s.b)(r.a.String.prototype.startsWith),h=Object(s.b)(r.a.String.prototype.padEnd),p=Object(s.b)(r.a.String.prototype.padStart)},"./node_modules/@dojo/framework/shim/support/has.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/has/has.mjs"),s=o("./node_modules/@dojo/framework/shim/global.mjs");r.b;Object(r.a)("es6-array",()=>["from","of"].every(e=>e in s.a.Array)&&["findIndex","find","copyWithin"].every(e=>e in s.a.Array.prototype),!0),Object(r.a)("es6-array-fill",()=>"fill"in s.a.Array.prototype&&1===[1].fill(9,Number.POSITIVE_INFINITY)[0],!0),Object(r.a)("es7-array",()=>"includes"in s.a.Array.prototype,!0),Object(r.a)("es6-map",()=>{if("function"==typeof s.a.Map)try{const e=new s.a.Map([[0,1]]);return e.has(0)&&"function"==typeof e.keys&&"function"==typeof e.values&&"function"==typeof e.entries}catch(e){return!1}return!1},!0),Object(r.a)("es6-math",()=>["clz32","sign","log10","log2","log1p","expm1","cosh","sinh","tanh","acosh","asinh","atanh","trunc","fround","cbrt","hypot"].every(e=>"function"==typeof s.a.Math[e]),!0),Object(r.a)("es6-math-imul",()=>"imul"in s.a.Math&&-5===Math.imul(4294967295,5),!0),Object(r.a)("es6-object",()=>["assign","is","getOwnPropertySymbols","setPrototypeOf"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es2017-object",()=>["values","entries","getOwnPropertyDescriptors"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es-observable",()=>void 0!==s.a.Observable,!0),Object(r.a)("es6-promise",()=>void 0!==s.a.Promise&&!0,!0),Object(r.a)("es6-set",()=>{if("function"==typeof s.a.Set){const e=new s.a.Set([1]);return e.has(1)&&"keys"in e&&"function"==typeof e.keys&&!0}return!1},!0),Object(r.a)("es6-string",()=>["fromCodePoint"].every(e=>"function"==typeof s.a.String[e])&&["codePointAt","normalize","repeat","startsWith","endsWith","includes"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-string-raw",()=>{function e(e,...t){const o=[...e];return o.raw=e.raw,o}if("raw"in s.a.String){let t=e`a\n${1}`;return t.raw=["a\\n"],"a:\\n"===s.a.String.raw(t,42)}return!1},!0),Object(r.a)("es2017-string",()=>["padStart","padEnd"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-symbol",()=>void 0!==s.a.Symbol&&"symbol"==typeof Symbol(),!0),Object(r.a)("es6-weakmap",()=>{if(void 0!==s.a.WeakMap){const e={},t={},o=new s.a.WeakMap([[e,1]]);return Object.freeze(e),1===o.get(e)&&o.set(t,2)===o&&!0}return!1},!0),Object(r.a)("microtasks",()=>!0,!0),Object(r.a)("postmessage",()=>void 0!==s.a.window&&"function"==typeof s.a.postMessage,!0),Object(r.a)("raf",()=>"function"==typeof s.a.requestAnimationFrame,!0),Object(r.a)("setimmediate",()=>void 0!==s.a.setImmediate,!0),Object(r.a)("dom-mutationobserver",()=>{if(Boolean(s.a.MutationObserver||s.a.WebKitMutationObserver)){const e=document.createElement("div"),t=new(s.a.MutationObserver||s.a.WebKitMutationObserver)(function(){});return t.observe(e,{attributes:!0}),e.style.setProperty("display","block"),Boolean(t.takeRecords().length)}return!1},!0),Object(r.a)("dom-webanimation",()=>void 0!==s.a.Animation&&void 0!==s.a.KeyframeEffect,!0)},"./node_modules/@dojo/framework/shim/support/queue.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/has.mjs");function s(e){e&&e.isActive&&e.callback&&e.callback()}function n(e,t){return{destroy:function(){this.destroy=function(){},e.isActive=!1,e.callback=null,t&&t()}}}!function(){let e,t;{const e=[];r.a.addEventListener("message",function(t){t.source===r.a&&"dojo-queue-message"===t.data&&(t.stopPropagation(),e.length&&s(e.shift()))}),t=function(t){e.push(t),r.a.postMessage("dojo-queue-message","*")}}function o(o){const r={isActive:!0,callback:o},s=t(r);return n(r,e&&function(){e(s)})}}();!function(){function e(e){const t={isActive:!0,callback:e},o=requestAnimationFrame(s.bind(null,t));return n(t,function(){cancelAnimationFrame(o)})}}();!function(){let e;e=function(e){r.a.Promise.resolve(e).then(s)}}()},"./node_modules/@dojo/framework/shim/support/util.mjs":function(e,t,o){"use strict";t.a=function(e,t=!1,o=!0,r=!0){return{value:e,enumerable:t,writable:o,configurable:r}},t.b=function(e){return function(t,...o){return e.apply(t,o)}}},"./node_modules/@dojo/framework/widget-core/Injector.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/core/Evented.mjs");class s extends r.a{constructor(e){super(),this._payload=e}setInvalidator(e){this._invalidator=e}get(){return this._payload}set(e){this._payload=e,this._invalidator&&this._invalidator()}}t.a=s},"./node_modules/@dojo/framework/widget-core/NodeHandler.mjs":function(e,t,o){"use strict";var r,s=o("./node_modules/@dojo/framework/core/Evented.mjs"),n=o("./node_modules/@dojo/framework/shim/Map.mjs");!function(e){e.Projector="Projector",e.Widget="Widget"}(r||(r={}));t.a=class extends s.a{constructor(){super(...arguments),this._nodeMap=new n.b}get(e){return this._nodeMap.get(e)}has(e){return this._nodeMap.has(e)}add(e,t){this._nodeMap.set(t,e),this.emit({type:t})}addRoot(){this.emit({type:r.Widget})}addProjector(){this.emit({type:r.Projector})}clear(){this._nodeMap.clear()}}},"./node_modules/@dojo/framework/widget-core/Registry.mjs":function(e,t,o){"use strict";t.d=a;var r=o("./node_modules/@dojo/framework/shim/Promise.mjs"),s=o("./node_modules/@dojo/framework/shim/Map.mjs"),n=o("./node_modules/@dojo/framework/shim/Symbol.mjs"),i=o("./node_modules/@dojo/framework/core/Evented.mjs");const d=Object(n.a)("Widget Base");function a(e){return Boolean(e&&e._type===d)}t.b=d;class c extends i.a{emitLoadedEvent(e,t){this.emit({type:e,action:"loaded",item:t})}define(e,t){if(void 0===this._widgetRegistry&&(this._widgetRegistry=new s.b),this._widgetRegistry.has(e))throw new Error(`widget has already been registered for '${e.toString()}'`);this._widgetRegistry.set(e,t),t instanceof r.a?t.then(t=>(this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}):a(t)&&this.emitLoadedEvent(e,t)}defineInjector(e,t){if(void 0===this._injectorRegistry&&(this._injectorRegistry=new s.b),this._injectorRegistry.has(e))throw new Error(`injector has already been registered for '${e.toString()}'`);const o=new i.a,r={injector:t(()=>o.emit({type:"invalidate"})),invalidator:o};this._injectorRegistry.set(e,r),this.emitLoadedEvent(e,r)}get(e){if(!this._widgetRegistry||!this.has(e))return null;const t=this._widgetRegistry.get(e);if(a(t))return t;if(t instanceof r.a)return null;const o=t();return this._widgetRegistry.set(e,o),o.then(t=>((function(e){return Boolean(e&&e.hasOwnProperty("__esModule")&&e.hasOwnProperty("default")&&a(e.default))})(t)&&(t=t.default),this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}),null}getInjector(e){return this._injectorRegistry&&this.hasInjector(e)?this._injectorRegistry.get(e):null}has(e){return Boolean(this._widgetRegistry&&this._widgetRegistry.has(e))}hasInjector(e){return Boolean(this._injectorRegistry&&this._injectorRegistry.has(e))}}t.a=c,t.c=c},"./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/core/Evented.mjs"),n=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");t.a=class extends s.a{constructor(){super(),this._registry=new n.a,this._registryWidgetLabelMap=new r.a,this._registryInjectorLabelMap=new r.a,this.own(this._registry),this.own({destroy:()=>{this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry),this.baseRegistry=void 0)}})}set base(e){this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry)),this.baseRegistry=e}define(e,t){this._registry.define(e,t)}defineInjector(e,t){this._registry.defineInjector(e,t)}has(e){return this._registry.has(e)||Boolean(this.baseRegistry&&this.baseRegistry.has(e))}hasInjector(e){return this._registry.hasInjector(e)||Boolean(this.baseRegistry&&this.baseRegistry.hasInjector(e))}get(e,t=!1){return this._get(e,t,"get",this._registryWidgetLabelMap)}getInjector(e,t=!1){return this._get(e,t,"getInjector",this._registryInjectorLabelMap)}_get(e,t,o,r){const s=t?[this.baseRegistry,this._registry]:[this._registry,this.baseRegistry];for(let n=0;n{"loaded"===r.action&&this[o](e,t)===r.item&&this.emit({type:"invalidate"})});this.own(s),r.set(i,[...a,e])}}return null}}},"./node_modules/@dojo/framework/widget-core/WidgetBase.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/shim/WeakMap.mjs"),n=o("./node_modules/@dojo/framework/shim/Symbol.mjs"),i=o("./node_modules/@dojo/framework/widget-core/d.mjs"),d=o("./node_modules/@dojo/framework/widget-core/diff.mjs"),a=o("./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs"),c=o("./node_modules/@dojo/framework/widget-core/NodeHandler.mjs"),l=o("./node_modules/@dojo/framework/widget-core/vdom.mjs"),u=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");const m=new r.b,h=d.a.bind(null),p=n.a.for("dojoNoBind");t.b=p;class f{constructor(){this._initialProperties=!0,this._changedPropertyKeys=[],this._nodeHandler=new c.a,this._handles=[],this._children=[],this._decoratorCache=new r.b,this._properties={},this._boundRenderFunc=this.render.bind(this),this._boundInvalidate=this.invalidate.bind(this),l.b.set(this,{dirty:!0,onAttach:()=>{this.onAttach()},onDetach:()=>{this.onDetach(),this.destroy()},nodeHandler:this._nodeHandler,registry:()=>this.registry,coreProperties:{},rendering:!1,inputProperties:{}}),this._runAfterConstructors()}meta(e){void 0===this._metaMap&&(this._metaMap=new r.b);let t=this._metaMap.get(e);return t||(t=new e({invalidate:this._boundInvalidate,nodeHandler:this._nodeHandler,bind:this}),this.own(t),this._metaMap.set(e,t)),t}onAttach(){}onDetach(){}get properties(){return this._properties}get changedPropertyKeys(){return[...this._changedPropertyKeys]}__setCoreProperties__(e){const{baseRegistry:t}=e,o=l.b.get(this);o.coreProperties.baseRegistry!==t&&(void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry.base=t,this.invalidate()),o.coreProperties=e}__setProperties__(e){const t=l.b.get(this);t.inputProperties=e;const o=this._runBeforeProperties(e),r=this.getDecorator("registeredDiffProperty"),s=[],n=Object.keys(o);if(!1===this._initialProperties||0!==r.length){const e=[...n,...Object.keys(this._properties)],i=[],d={};let a=!1;for(let n=0;n{const r=-1!==s.indexOf(o),n=-1!==e.indexOf(t);r&&!n&&(t.call(this,this._properties,d),e.push(t))})}this._properties=d,this._changedPropertyKeys=s}else{this._initialProperties=!1;for(let e=0;e0&&this.invalidate()}get children(){return this._children}__setChildren__(e){(this._children.length>0||e.length>0)&&(this._children=e,this.invalidate())}__render__(){l.b.get(this).dirty=!1;let e=this._runBeforeRenders()();return e=this.runAfterRenders(e),this._nodeHandler.clear(),e}invalidate(){const e=l.b.get(this);e.invalidate&&e.invalidate()}render(){return Object(i.g)("div",{},this.children)}addDecorator(e,t){if(t=Array.isArray(t)?t:[t],this.hasOwnProperty("constructor")){let o=m.get(this.constructor);o||(o=new r.b,m.set(this.constructor,o));let s=o.get(e);s||(s=[],o.set(e,s)),s.push(...t)}else{const o=this.getDecorator(e);this._decoratorCache.set(e,[...o,...t])}}_buildDecoratorList(e){const t=[];let o=this.constructor;for(;o;){const r=m.get(o);if(r){const o=r.get(e);o&&t.unshift(...o)}o=Object.getPrototypeOf(o)}return t}getDecorator(e){let t=this._decoratorCache.get(e);return void 0!==t?t:(t=this._buildDecoratorList(e),this._decoratorCache.set(e,t),t)}_bindFunctionProperty(e,t){if("function"==typeof e&&!e[p]&&!1===Object(u.d)(e)){void 0===this._bindFunctionPropertyMap&&(this._bindFunctionPropertyMap=new s.a);const o=this._bindFunctionPropertyMap.get(e)||{};let{boundFunc:r,scope:n}=o;return void 0!==r&&n===t||(r=e.bind(t),this._bindFunctionPropertyMap.set(e,{boundFunc:r,scope:t})),r}return e}get registry(){return void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry}_runBeforeProperties(e){const t=this.getDecorator("beforeProperties");return t.length>0?t.reduce((e,t)=>Object.assign({},e,t.call(this,e)),Object.assign({},e)):e}_runBeforeRenders(){const e=this.getDecorator("beforeRender");return e.length>0?e.reduce((e,t)=>{const o=t.call(this,e,this._properties,this._children);return o||(console.warn("Render function not returned from beforeRender, using previous render"),e)},this._boundRenderFunc):this._boundRenderFunc}runAfterRenders(e){const t=this.getDecorator("afterRender");return t.length>0&&(e=t.reduce((e,t)=>t.call(this,e),e)),void 0!==this._metaMap&&this._metaMap.forEach(e=>{e.afterRender()}),e}_runAfterConstructors(){const e=this.getDecorator("afterConstructor");e.length>0&&e.forEach(e=>e.call(this))}own(e){this._handles.push(e)}destroy(){for(;this._handles.length>0;){const e=this._handles.pop();e&&e.destroy()}}}t.a=f,f._type=u.b},"./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs":function(e,t,o){"use strict";let r="",s="";function n(e){""===s&&function(e){if("WebkitTransition"in e.style)r="webkitTransitionEnd",s="webkitAnimationEnd";else{if(!("transition"in e.style||"MozTransition"in e.style))throw new Error("Your browser is not supported");r="transitionend",s="animationend"}}(e)}function i(e,t,o){n(e);let i=!1,d=function(){i||(i=!0,e.removeEventListener(r,d),e.removeEventListener(s,d),o())};t(),e.addEventListener(s,d),e.addEventListener(r,d)}t.a={enter:function(e,t,o){const r=t.enterAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(r)})},()=>{e.classList.remove(o),e.classList.remove(r)})},exit:function(e,t,o,r){const s=t.exitAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(s)})},()=>{r()})}}},"./node_modules/@dojo/framework/widget-core/d.mjs":function(e,t,o){"use strict";t.f=d,t.e=a,t.d=function(e){return Boolean(e&&"string"!=typeof e&&e.type===i)},t.h=function(e,t,o=[]){return{children:o,widgetConstructor:e,properties:t,type:s}},t.g=function(e,t={},o){let r,s=t;Array.isArray(t)&&(o=t,s={});"function"==typeof s&&(r=s,s={});return{tag:e,deferredPropertiesCallback:r,children:o,properties:s,type:n}},t.c=function({node:e,attrs:t={},props:o={},on:r={},diffType:s="none"},n){return{tag:c(e)?e.tagName.toLowerCase():"",properties:o,attributes:t,events:r,children:n,type:i,domNode:e,text:c(e)?void 0:e.data,diffType:s}};var r=o("./node_modules/@dojo/framework/shim/Symbol.mjs");const s=Object(r.a)("Identifier for a WNode.");t.b=s;const n=Object(r.a)("Identifier for a VNode.");t.a=n;const i=Object(r.a)("Identifier for a VNode created using existing dom.");function d(e){return Boolean(e&&"string"!=typeof e&&e.type===s)}function a(e){return Boolean(e&&"string"!=typeof e&&(e.type===n||e.type===i))}function c(e){return!!e.tagName}},"./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("afterRender",o?t[o]:e)})}},"./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs");function n(){return Object(r.a)((e,t)=>{Object(s.a)(function(){this.invalidate()})(e)})}},"./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("beforeProperties",o?t[o]:e)})}},"./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs"),s=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");function n({tag:e,properties:t=[],attributes:o=[],events:n=[],childType:i=r.CustomElementChildType.DOJO,registryFactory:d=(()=>new s.c)}){return function(r){r.prototype.__customElementDescriptor={tagName:e,attributes:o,properties:t,events:n,childType:i,registryFactory:d}}}},"./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/framework/widget-core/diff.mjs");function n(e,t=s.a,o){return Object(r.a)((r,s)=>{r.addDecorator(`diffProperty:${e}`,t.bind(null)),r.addDecorator("registeredDiffProperty",e),(o||s)&&r.addDecorator("diffReaction",{propertyName:e,reaction:s?r[s]:o})})}},"./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs":function(e,t,o){"use strict";function r(e){return function(t,o,r){"function"==typeof t?e(t.prototype,void 0):e(t,o)}}t.a=r},"./node_modules/@dojo/framework/widget-core/decorators/inject.mjs":function(e,t,o){"use strict";t.a=d;var r=o("./node_modules/@dojo/framework/shim/WeakMap.mjs"),s=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs");const i=new r.a;function d({name:e,getProperties:t}){return Object(s.a)((o,r)=>{Object(n.a)(function(o){const r=this.registry.getInjector(e);if(r){const{injector:e,invalidator:s}=r,n=i.get(this)||[];return 0===n.length&&i.set(this,n),-1===n.indexOf(r)&&(this.own(s.on("invalidate",()=>{this.invalidate()})),n.push(r)),t(e(),o)}})(o)})}},"./node_modules/@dojo/framework/widget-core/diff.mjs":function(e,t,o){"use strict";t.b=i,t.a=function(e,t){let o;o="function"==typeof t?t._type===r.b?n(e,t):function(e,t){return{changed:!1,value:t}}(0,t):s(t)?i(e,t):n(e,t);return o};var r=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");function s(e){return"[object Object]"===Object.prototype.toString.call(e)||Array.isArray(e)}function n(e,t){return{changed:e!==t,value:t}}function i(e,t){let o=!1;const r=e&&s(e),n=t&&s(t);if(!r||!n)return{changed:!0,value:t};const i=Object.keys(e),d=Object.keys(t);return{changed:o=i.length!==d.length||d.some(o=>t[o]!==e[o]),value:t}}},"./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs":function(e,t,o){"use strict";t.a=u;var r,s,n=o("./node_modules/tslib/tslib.es6.js"),i=o("./node_modules/@dojo/framework/core/lang.mjs"),d=o("./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs"),a=o("./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs"),c=o("./node_modules/@dojo/framework/widget-core/d.mjs"),l=o("./node_modules/@dojo/framework/widget-core/vdom.mjs");function u(e){class t extends e{constructor(...e){super(...e),this._root=document.body,this._async=!0,this._projectorProperties={},this._projectionOptions={transitions:d.a},this.root=document.body,this.projectorState=r.Detached}append(e){const t={type:s.Append,root:e};return this._attach(t)}merge(e){const t={type:s.Merge,root:e};return this._attach(t)}set root(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change root element");this._root=e}get root(){return this._root}get async(){return this._async}set async(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change async mode");this._async=e}sandbox(e=document){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot create sandbox");this._async=!1;const t=this.root;this.own({destroy:()=>{this._root=t}}),this._attach({root:e.createDocumentFragment(),type:s.Append})}setChildren(e){this.__setChildren__(e)}setProperties(e){this.__setProperties__(e)}__setProperties__(e){this._projectorProperties&&this._projectorProperties.registry!==e.registry&&this._projectorProperties.registry&&this._projectorProperties.registry.destroy(),this._projectorProperties=Object(i.a)({},e),super.__setCoreProperties__({bind:this,baseRegistry:e.registry}),super.__setProperties__(e)}toHtml(){if(this.projectorState!==r.Attached||!this._projection)throw new Error("Projector is not attached, cannot return an HTML string of projection.");return this._projection.domNode.childNodes[0].outerHTML}afterRender(e){let t=e;return"string"!=typeof e&&null!==e&&void 0!==e||(t=Object(c.g)("span",{},[e])),t}destroy(){super.destroy()}_attach({type:e,root:t}){if(t&&(this.root=t),this._attachHandle)return this._attachHandle;this.projectorState=r.Attached;const o={destroy:()=>{this.projectorState===r.Attached&&(this._projection=void 0,this.projectorState=r.Detached)}};switch(this.own(o),this._attachHandle=o,this._projectionOptions=Object.assign({},this._projectionOptions,{sync:!this._async}),e){case s.Append:this._projection=l.a.append(this.root,this,this._projectionOptions);break;case s.Merge:this._projection=l.a.merge(this.root,this,this._projectionOptions)}return this._attachHandle}}return n.a([Object(a.a)()],t.prototype,"afterRender",null),t}!function(e){e[e.Attached=1]="Attached",e[e.Detached=2]="Detached"}(r||(r={})),function(e){e[e.Append=1]="Append",e[e.Merge=2]="Merge"}(s||(s={}))},"./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs":function(e,t,o){"use strict";t.c=function(e){return Object(i.a)(t=>{t.addDecorator("baseThemeClasses",e)})},t.b=function(e,t){const o=new s.a(e);return t.defineInjector(l,e=>(o.setInvalidator(e),()=>o.get())),o},t.a=u;var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/framework/widget-core/Injector.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/inject.mjs"),i=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),d=o("./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs"),a=o("./node_modules/@dojo/framework/widget-core/diff.mjs");const c=" _key",l=Symbol("theme");function u(e){let t=class extends e{constructor(){super(...arguments),this._registeredBaseThemeKeys=[],this._recalculateClasses=!0,this._theme={}}theme(e){return this._recalculateClasses&&this._recalculateThemeClasses(),Array.isArray(e)?e.map(e=>this._getThemeClass(e)):this._getThemeClass(e)}onPropertiesChanged(){this._recalculateClasses=!0}_getThemeClass(e){if(void 0===e||null===e)return e;const t=this.properties.extraClasses||{},o=this._baseThemeClassesReverseLookup[e];let r=[];return o?(t[o]&&r.push(t[o]),this._theme[o]?r.push(this._theme[o]):r.push(this._registeredBaseTheme[o]),r.join(" ")):(console.warn(`Class name: '${e}' not found in theme`),null)}_recalculateThemeClasses(){const{theme:e={}}=this.properties,t=this.getDecorator("baseThemeClasses");this._registeredBaseTheme||(this._registeredBaseTheme=t.reduce((e,t)=>{const o=c,s=t[o],n=r.b(t,["symbol"==typeof o?o:o+""]);return this._registeredBaseThemeKeys.push(s),Object.assign({},e,n)},{}),this._baseThemeClassesReverseLookup=t.reduce((e,t)=>(Object.keys(t).forEach(o=>{e[t[o]]=o}),e),{})),this._theme=this._registeredBaseThemeKeys.reduce((t,o)=>Object.assign({},t,e[o]),{}),this._recalculateClasses=!1}};return r.a([Object(d.a)("theme",a.b),Object(d.a)("extraClasses",a.b)],t.prototype,"onPropertiesChanged",null),t=r.a([Object(n.a)({name:l,getProperties:(e,t)=>t.theme?{}:{theme:e}})],t)}},"./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"CustomElementChildType",function(){return r}),t.DomToWidgetWrapper=m,t.create=h,t.register=p;var r,s=o("./node_modules/tslib/tslib.es6.js"),n=o("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"),i=o("./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs"),d=o("./node_modules/@dojo/framework/shim/array.mjs"),a=o("./node_modules/@dojo/framework/widget-core/d.mjs"),c=o("./node_modules/@dojo/framework/shim/global.mjs"),l=o("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"),u=o("./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs");function m(e){let t=class extends n.a{render(){const t=Object.keys(this.properties).reduce((e,t)=>{const o=this.properties[t];return 0===t.indexOf("on")&&(t=`__${t}`),e[t]=o,e},{});return Object(a.c)({node:e,props:t,diffType:"dom"})}static get domNode(){return e}};return t=s.a([Object(u.a)()],t)}function h(e,t){const{attributes:o,childType:s,registryFactory:u}=e,h={};return o.forEach(e=>{const t=e.toLowerCase();h[t]=e}),class extends HTMLElement{constructor(){super(...arguments),this._properties={},this._children=[],this._eventProperties={},this._initialised=!1}connectedCallback(){if(this._initialised)return;const o={},{attributes:h,properties:p,events:f}=e;this._properties=Object.assign({},this._properties,this._attributesToProperties(h)),[...h,...p].forEach(e=>{const t=this[e],r=e.replace(/^on/,"__");void 0!==t&&(this._properties[e]=t),r!==e&&(o[r]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}),o[e]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}}),f.forEach(e=>{const t=e.replace(/^on/,"").toLowerCase(),r=e.replace(/^on/,"__on");o[r]={get:()=>this._getEventProperty(e),set:t=>this._setEventProperty(e,t)},this._eventProperties[e]=void 0,this._properties[e]=((...o)=>{const r=this._getEventProperty(e);"function"==typeof r&&r(...o),this.dispatchEvent(new CustomEvent(t,{bubbles:!1,detail:o}))})}),Object.defineProperties(this,o);const g=s===r.TEXT?this.childNodes:this.children;Object(d.a)(g).forEach(e=>{s===r.DOJO?(e.addEventListener("dojo-ce-render",()=>this._render()),e.addEventListener("dojo-ce-connected",()=>this._render()),this._children.push(m(e))):this._children.push(Object(a.c)({node:e,diffType:"dom"}))}),this.addEventListener("dojo-ce-connected",e=>this._childConnected(e));const j=this._properties,_=()=>this.__children__(),y=u(),b=Object(l.b)(this._getTheme(),y);c.a.addEventListener("dojo-theme-set",()=>b.set(this._getTheme()));const w=Object(i.a)(class extends n.a{render(){return Object(a.h)(t,j,_())}});this._projector=new w,this._projector.setProperties({registry:y}),this._projector.append(this),this._initialised=!0,this.dispatchEvent(new CustomEvent("dojo-ce-connected",{bubbles:!0,detail:this}))}_getTheme(){if(c.a&&c.a.dojoce&&c.a.dojoce.theme)return c.a.dojoce.themes[c.a.dojoce.theme]}_childConnected(e){const t=e.detail;if(t.parentNode===this){this._children.some(e=>e.domNode===t)||(t.addEventListener("dojo-ce-render",()=>this._render()),this._children.push(m(t)),this._render())}}_render(){this._projector&&(this._projector.invalidate(),this.dispatchEvent(new CustomEvent("dojo-ce-render",{bubbles:!1,detail:this})))}__properties__(){return Object.assign({},this._properties,this._eventProperties)}__children__(){return s===r.DOJO?this._children.filter(e=>e.domNode.isWidget).map(e=>{const{domNode:t}=e;return Object(a.h)(e,Object.assign({},t.__properties__()),[...t.__children__()])}):this._children}attributeChangedCallback(e,t,o){const r=h[e];this._setProperty(r,o)}_setEventProperty(e,t){this._eventProperties[e]=t}_getEventProperty(e){return this._eventProperties[e]}_setProperty(e,t){"function"==typeof t&&(t[n.b]=!0),this._properties[e]=t,this._render()}_getProperty(e){return this._properties[e]}_attributesToProperties(e){return e.reduce((e,t)=>{const o=t.toLowerCase(),r=this.getAttribute(o);return null!==r&&(e[t]=r),e},{})}static get observedAttributes(){return Object.keys(h)}get isWidget(){return!0}}}function p(e){const t=e.prototype&&e.prototype.__customElementDescriptor;if(!t)throw new Error("Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?");c.a.customElements.define(t.tagName,h(t,e))}!function(e){e.DOJO="DOJO",e.NODE="NODE",e.TEXT="TEXT"}(r||(r={})),t.default=p},"./node_modules/@dojo/framework/widget-core/vdom.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=o("./node_modules/@dojo/framework/shim/array.mjs"),n=o("./node_modules/@dojo/framework/widget-core/d.mjs"),i=o("./node_modules/@dojo/framework/widget-core/Registry.mjs"),d=o("./node_modules/@dojo/framework/shim/WeakMap.mjs");const a="http://www.w3.org/2000/svg",c="http://www.w3.org/1999/xlink",l=[],u=["focus","blur","scrollIntoView","click"],m=new d.a;t.b=m;const h=new d.a,p=new d.a,f=new d.a;function g(e,t){return Object(n.e)(e)&&Object(n.e)(t)?(!Object(n.d)(e)&&!Object(n.d)(t)||e.domNode===t.domNode)&&(e.tag===t.tag&&e.properties.key===t.properties.key):!(!Object(n.f)(e)||!Object(n.f)(t))&&((void 0!==e.instance||"string"!=typeof t.widgetConstructor)&&(e.widgetConstructor===t.widgetConstructor&&e.properties.key===t.properties.key))}const j=function(){throw new Error("Provide a transitions object to the projectionOptions to do animations")};function _(e){if("string"!=typeof e)throw new Error("Style values must be strings")}function y(e,t,o,r,s,n){const i=f.get(r.projectorInstance),a=i.nodeMap.get(e)||new d.a;if(n){const o=a.get(n);e.removeEventListener(t,o)}let c=o.bind(s);"input"===t&&(c=function(e){o.call(this,e),e.target["oninput-value"]=e.target.value}.bind(s)),e.addEventListener(t,c),a.set(o,c),i.nodeMap.set(e,a)}function b(e,t){if(t){const o=t.split(" ");for(let t=0;t{r[e]()})}}function k(e,t,o,r,s=!1){const n=f.get(r.projectorInstance).nodeMap.get(e);n&&Object.keys(t).forEach(r=>{const i="on"===r.substr(0,2)||s,d=s?r:r.substr(2);if(i&&!o[r]){const o=n.get(t[r]);o&&e.removeEventListener(d,o)}})}function O(e,t,o,r){r.namespace===a&&"href"===t?e.setAttributeNS(c,t,o):"role"===t&&""===o||void 0===o?e.removeAttribute(t):e.setAttribute(t,o)}function P(e,t,o,r){const s=Object.keys(o),n=s.length;for(let i=0;i0)if(c&&0!==c.length){const r=[...o];for(let o=0;o0&&R(r.children,t));else{if(!r.coreProperties){const e=m.get(t);r.coreProperties={bind:t,baseRegistry:e.coreProperties.baseRegistry}}r.children&&r.children.length>0&&R(r.children,t)}o++}else e.splice(o,1)}return e}function A(e,t){if(Object(n.e)(e)&&e.properties){const o=e.properties.enterAnimation;o&&("function"==typeof o?o(e.domNode,e.properties):t.enter(e.domNode,e.properties,o))}}function M(e,t,o){if(Object(n.f)(e)){const r=h.get(e.instance),s=(r?r.dnode.rendered:e.rendered)||l;if(e.instance){m.get(e.instance).onDetach(),h.delete(e.instance)}for(let e=0;e0)for(let r=0;r{let d=void 0,a=o,m=p+1,f=o[p];if(f||(f=t[0],m=1,a=t),f){let t=[f];for(;t.length;){const o=t.shift();if(Object(n.f)(o)){const e=h.get(o.instance);e&&e.dnode.rendered&&t.push(...e.dnode.rendered)}else if(o.domNode){if(o.domNode.parentElement!==e.domNode)break;d=o.domNode;break}0===t.length&&a[m]&&(t.push(a[m]),m++)}}S(l,e,r.slice(j+1),d,i,s),A(l,c);const g=j;u.afterRenderCallbacks.push(()=>{x(r,g,s)})};if(!a||-1===m){f(),j++;continue}const y=()=>{const e=p;if(u.afterRenderCallbacks.push(()=>{x(o,e,s)}),Object(n.f)(a)){const e=h.get(a.instance);e&&(a=e.dnode)}M(a,c,i)};-1!==C(r,a,j+1)?(f(),y(),p++,j++):(y(),p++)}if(d>p)for(m=p;m{x(o,e,s)});let t=o[m];if(Object(n.f)(t)){const e=h.get(t.instance);e&&(t=e.dnode)}M(t,c,i)}return _}function I(e,t,o,r,i,d){if(void 0===t)return;const a=f.get(o.projectorInstance);a.merge&&void 0===d&&(d=Object(s.a)(e.domNode.childNodes));const c=o.transitions;o=Object.assign({},o,{depth:o.depth+1});for(let s=0;s0;)(e=d.shift())&&e.tagName===(l.tag.toUpperCase()||void 0)&&(l.domNode=e)}S(l,e,u,i,o,r)}else S(l,e,u,i,o,r,d);A(l,c)}}function D(e,t,o,r){if(I(t,t.children,r,o,void 0),"function"==typeof t.deferredPropertiesCallback&&void 0===t.inserted&&W(t,r),t.attributes&&t.events){P(e,{},t.attributes,r),E(e,{},t.properties,r,!1),k(e,{},t.events,r,!0);const o=t.events;Object.keys(o).forEach(s=>{y(e,s,o[s],r,t.properties.bind)})}else E(e,{},t.properties,r);if(null!==t.properties.key&&void 0!==t.properties.key){m.get(o).nodeHandler.add(e,`${t.properties.key}`)}t.inserted=!0}function S(e,t,o,r,s,d,c){let l;const u=f.get(s.projectorInstance);if(Object(n.f)(e)){let{widgetConstructor:n}=e;const a=m.get(d);if(!Object(i.d)(n)){const e=a.registry().get(n);if(null===e)return;n=e}const l=new n;e.instance=l,p.set(l,o);const f=m.get(l);f.invalidate=(()=>{f.dirty=!0,!1===f.rendering&&(u.renderQueue.push({instance:l,depth:s.depth}),H(s))}),f.rendering=!0,l.__setCoreProperties__(e.coreProperties),l.__setChildren__(e.children),l.__setProperties__(e.properties);const g=l.__render__();if(f.rendering=!1,g){const o=R(g,l);e.rendered=o,I(t,o,s,l,r,c)}h.set(l,{dnode:e,parentVNode:t}),f.nodeHandler.addRoot(),u.afterRenderCallbacks.push(()=>{f.onAttach()})}else{if(u.merge&&void 0!==u.mergeElement)return l=e.domNode=s.mergeElement,u.mergeElement=void 0,void D(l,e,d,s);const o=t.domNode.ownerDocument;if(e.tag||"string"!=typeof e.text)void 0===e.domNode?("svg"===e.tag&&(s=Object.assign({},s,{namespace:a})),l=void 0!==s.namespace?e.domNode=o.createElementNS(s.namespace,e.tag):e.domNode=e.domNode||o.createElement(e.tag)):l=e.domNode,D(l,e,d,s),void 0!==r?t.domNode.insertBefore(l,r):l.parentNode!==t.domNode&&t.domNode.appendChild(l);else if(void 0!==e.domNode&&t.domNode){const o=e.domNode.ownerDocument.createTextNode(e.text);t.domNode===e.domNode.parentNode?t.domNode.replaceChild(o,e.domNode):(t.domNode.appendChild(o),e.domNode.parentNode&&e.domNode.parentNode.removeChild(e.domNode)),e.domNode=o}else l=e.domNode=o.createTextNode(e.text),void 0!==r?t.domNode.insertBefore(l,r):t.domNode.appendChild(l)}}function L(e,t,o,r,s,i,d){if(Object(n.f)(t)){const{instance:r}=e,{parentVNode:s,dnode:n}=h.get(r),a=n?n.rendered:e.rendered,c=m.get(r);if(c.rendering=!0,r.__setCoreProperties__(t.coreProperties),r.__setChildren__(t.children),r.__setProperties__(t.properties),p.set(r,d),t.instance=r,!0===c.dirty){const e=r.__render__();c.rendering=!1,t.rendered=R(e,r),T(s,i,a,t.rendered,r,o)}else c.rendering=!1,t.rendered=a;h.set(r,{dnode:t,parentVNode:s}),c.nodeHandler.addRoot()}else{if(e===t)return!1;const r=t.domNode=e.domNode;let n=!1,d=!1;if(t.tag||"string"!=typeof t.text){if(t.tag&&0===t.tag.lastIndexOf("svg",0)&&(o=Object.assign({},o,{namespace:a})),e.children!==t.children){const r=R(t.children,s);t.children=r,d=T(t,i,e.children,r,s,o)||d}const n=function(e,t,o){const{diffType:r,properties:s,attributes:n}=o;if(!r||"vdom"===r)return{properties:t.properties,attributes:t.attributes,events:t.events};if("none"===r)return{properties:{},attributes:t.attributes?{}:void 0,events:t.events};let i={properties:{}};return n?(i.attributes={},i.events=t.events,Object.keys(s).forEach(t=>{i.properties[t]=e[t]}),Object.keys(n).forEach(t=>{i.attributes[t]=e.getAttribute(t)}),i):(i.properties=Object.keys(s).reduce((t,o)=>(t[o]=e.getAttribute(o)||e[o],t),{}),i)}(r,e,t);if(t.attributes&&t.events){P(r,n.attributes,t.attributes,o),d=E(r,n.properties,t.properties,o,!1)||d,k(r,n.events,t.events,o,!0);const e=t.events;Object.keys(e).forEach(s=>{y(r,s,e[s],o,t.properties.bind,n.events[s])})}else d=E(r,n.properties,t.properties,o)||d;if(null!==t.properties.key&&void 0!==t.properties.key){m.get(s).nodeHandler.add(r,`${t.properties.key}`)}}else if(t.text!==e.text){const e=r.ownerDocument.createTextNode(t.text);return r.parentNode.replaceChild(e,r),t.domNode=e,n=!0}d&&t.properties&&t.properties.updateAnimation&&t.properties.updateAnimation(r,t.properties,e.properties)}}function W(e,t){e.decoratedDeferredProperties=e.properties;const o=e.deferredPropertiesCallback(!!e.inserted),r=f.get(t.projectorInstance);e.properties=Object.assign({},o,e.decoratedDeferredProperties),r.deferredRenderCallbacks.push(()=>{const o=Object.assign({},e.deferredPropertiesCallback(!!e.inserted),e.decoratedDeferredProperties);E(e.domNode,e.properties,o,t),e.properties=o})}function B(e){const t=f.get(e.projectorInstance);if(t.deferredRenderCallbacks.length)if(e.sync)for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}else r.a.requestAnimationFrame(()=>{for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}})}function F(e){const t=f.get(e.projectorInstance);if(e.sync)for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}else r.a.requestIdleCallback?r.a.requestIdleCallback(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}}):setTimeout(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}})}function H(e){const t=f.get(e.projectorInstance);e.sync?$(e):void 0===t.renderScheduled&&(t.renderScheduled=r.a.requestAnimationFrame(()=>{$(e)}))}function $(e){const t=f.get(e.projectorInstance);t.renderScheduled=void 0;const o=[...t.renderQueue];t.renderQueue=[],o.sort((e,t)=>e.depth-t.depth);const r=[];for(;o.length;){const{instance:t}=o.shift();if(h.has(t)&&-1===r.indexOf(t)){r.push(t);const{parentVNode:o,dnode:s}=h.get(t),n=m.get(t),i=p.get(t);L(s,N(t,n),e,0,t,i,i)}}F(e),B(e)}const q={append:function(e,t,o={}){const r=m.get(t),s=function(e,t){const o={namespace:void 0,styleApplyer:function(e,t,o){e.style[t]=o},transitions:{enter:j,exit:j},depth:0,merge:!1,sync:!1,projectorInstance:t};return Object.assign({},o,e)}(o,t),i={afterRenderCallbacks:[],deferredRenderCallbacks:[],nodeMap:new d.a,renderScheduled:void 0,renderQueue:[],merge:o.merge||!1,mergeElement:o.mergeElement};f.set(t,i),s.rootNode=e;const a={tag:"",properties:{},children:void 0,domNode:s.rootNode,type:n.a};const c=N(t,r);return h.set(t,{dnode:c,parentVNode:a}),r.invalidate=(()=>{r.dirty=!0,!1===r.rendering&&(i.renderQueue.push({instance:t,depth:s.depth}),H(s))}),L(c,c,s,0,t,[],[]),i.afterRenderCallbacks.push(()=>{r.onAttach()}),B(s),F(s),{domNode:s.rootNode}},create:function(e,t){return this.append(document.createElement("div"),e,t)},merge:function(e,t,o={}){o.merge=!0,o.mergeElement=e;const r=this.append(e.parentNode,t,o);return f.get(t).merge=!1,r}};t.a=q},"./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js":function(e,t,o){var r=o("./src/menu-item/MenuItem.ts"),s=o("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs").default,n=r.default;n&&s(n)},"./node_modules/process/browser.js":function(e,t){var o,r,s=e.exports={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function d(e){if(o===setTimeout)return setTimeout(e,0);if((o===n||!o)&&setTimeout)return o=setTimeout,setTimeout(e,0);try{return o(e,0)}catch(t){try{return o.call(null,e,0)}catch(t){return o.call(this,e,0)}}}!function(){try{o="function"==typeof setTimeout?setTimeout:n}catch(e){o=n}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var a,c=[],l=!1,u=-1;function m(){l&&a&&(l=!1,a.length?c=a.concat(c):u=-1,c.length&&h())}function h(){if(!l){var e=d(m);l=!0;for(var t=c.length;t;){for(a=c,c=[];++u1)for(var o=1;o=0;d--)(s=e[d])&&(i=(n<3?s(i):n>3?s(t,o,i):s(t,o))||i);return n>3&&i&&Object.defineProperty(t,o,i),i}; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use @@ -21,5 +21,5 @@ MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ -Object.setPrototypeOf||Array;Object.assign},"./node_modules/webpack/buildin/global.js":function(e,t){var o;o=function(){return this}();try{o=o||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(o=window)}e.exports=o},"./src/menu-item/MenuItem.ts":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"MenuItem",function(){return c});var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/widget-core/d.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/customElement.mjs"),i=o("./node_modules/@dojo/widget-core/mixins/Themed.mjs"),d=o("./node_modules/@dojo/widget-core/WidgetBase.mjs"),a=o("./src/menu-item/menuItem.m.css");o.n(a);let c=class extends(Object(i.a)(d.a)){_onClick(){this.properties.onSelected&&this.properties.onSelected(this.properties.data)}render(){const{title:e,selected:t}=this.properties;return Object(s.g)("li",{classes:this.theme(a.root)},[Object(s.g)("span",{classes:this.theme([a.item,t?a.selected:null]),onclick:this._onClick},[e])])}};c=r.a([Object(n.a)({tag:"demo-menu-item",attributes:["title","selected"],events:["onSelected"],properties:["data","selected"]}),Object(i.c)(a)],c),t.default=c},"./src/menu-item/menuItem.m.css":function(e,t){e.exports={" _key":"test-app/menuItem",root:"sUmUi4Sh",item:"_2Mk6Rdqa",selected:"_1-f3ItOh"}},0:function(e,t,o){e.exports=o("./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js")}}); +Object.setPrototypeOf||Array;Object.assign},"./node_modules/webpack/buildin/global.js":function(e,t){var o;o=function(){return this}();try{o=o||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(o=window)}e.exports=o},"./src/menu-item/MenuItem.ts":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"MenuItem",function(){return c});var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/framework/widget-core/d.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs"),i=o("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"),d=o("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"),a=o("./src/menu-item/menuItem.m.css");o.n(a);let c=class extends(Object(i.a)(d.a)){_onClick(){this.properties.onSelected&&this.properties.onSelected(this.properties.data)}render(){const{title:e,selected:t}=this.properties;return Object(s.g)("li",{classes:this.theme(a.root)},[Object(s.g)("span",{classes:this.theme([a.item,t?a.selected:null]),onclick:this._onClick},[e])])}};c=r.a([Object(n.a)({tag:"demo-menu-item",attributes:["title","selected"],events:["onSelected"],properties:["data","selected"]}),Object(i.c)(a)],c),t.default=c},"./src/menu-item/menuItem.m.css":function(e,t){e.exports={" _key":"test-app/menuItem",root:"sUmUi4Sh",item:"_2Mk6Rdqa",selected:"_1-f3ItOh"}},0:function(e,t,o){e.exports=o("./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js")}}); //# sourceMappingURL=menu-item-1.0.0.js.map \ No newline at end of file diff --git a/test-app/fixtures/unix/dist/menu-item/menu-item-1.0.0.js.map b/test-app/fixtures/unix/dist/menu-item/menu-item-1.0.0.js.map index 47d1c4b..1139523 100644 --- a/test-app/fixtures/unix/dist/menu-item/menu-item-1.0.0.js.map +++ b/test-app/fixtures/unix/dist/menu-item/menu-item-1.0.0.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 931d3d7713b7be398580","webpack:///./node_modules/@dojo/core/Destroyable.mjs","webpack:///./node_modules/@dojo/core/Evented.mjs","webpack:///./node_modules/@dojo/core/lang.mjs","webpack:///./node_modules/@dojo/has/has.mjs","webpack:///./node_modules/@dojo/shim/Map.mjs","webpack:///./node_modules/@dojo/shim/Promise.mjs","webpack:///./node_modules/@dojo/shim/Symbol.mjs","webpack:///./node_modules/@dojo/shim/WeakMap.mjs","webpack:///./node_modules/@dojo/shim/array.mjs","webpack:///./node_modules/@dojo/shim/global.mjs","webpack:///./node_modules/@dojo/shim/number.mjs","webpack:///./node_modules/@dojo/shim/object.mjs","webpack:///./node_modules/@dojo/shim/string.mjs","webpack:///./node_modules/@dojo/shim/support/has.mjs","webpack:///./node_modules/@dojo/shim/support/queue.mjs","webpack:///./node_modules/@dojo/shim/support/util.mjs","webpack:///./node_modules/@dojo/widget-core/Injector.mjs","webpack:///./node_modules/@dojo/widget-core/NodeHandler.mjs","webpack:///./node_modules/@dojo/widget-core/Registry.mjs","webpack:///./node_modules/@dojo/widget-core/RegistryHandler.mjs","webpack:///./node_modules/@dojo/widget-core/WidgetBase.mjs","webpack:///./node_modules/@dojo/widget-core/animations/cssTransitions.mjs","webpack:///./node_modules/@dojo/widget-core/d.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/afterRender.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/customElement.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/diffProperty.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/inject.mjs","webpack:///./node_modules/@dojo/widget-core/diff.mjs","webpack:///./node_modules/@dojo/widget-core/mixins/Projector.mjs","webpack:///./node_modules/@dojo/widget-core/mixins/Themed.mjs","webpack:///./node_modules/@dojo/widget-core/registerCustomElement.mjs","webpack:///./node_modules/@dojo/widget-core/vdom.mjs","webpack:///./node_modules/@dojo/cli-build-widget/template/custom-element.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/menu-item/MenuItem.ts","webpack:///./src/menu-item/menuItem.m.css?6a95"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","noop","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_Promise__","resolve","destroyed","Error","Destroyable","[object Object]","this","handles","handle","Array","isArray","__WEBPACK_IMPORTED_MODULE_0__lang__","_handles","push","splice","indexOf","destroy","forEach","own","__webpack_exports__","regexMap","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__","Evented","__WEBPACK_IMPORTED_MODULE_1__Destroyable__","super","arguments","listenersMap","event","methods","type","globString","targetString","regex","has","RegExp","replace","set","test","isGlobMatch","method","listener","map","_addListener","listeners","destructor","called","createHandle","length","slice","testCache","testFunctions","testThenables","globalScope","window","global","self","staticFeatures","DojoHasEnvironment","staticCache","apply","add","feature","value","overwrite","normalizedFeature","toLowerCase","Boolean","exists","TypeError","then","isFeatureTestThenable","resolvedValue","result","document","location","process","versions","node","Map","__WEBPACK_IMPORTED_MODULE_1__global__","ShimPromise","__WEBPACK_IMPORTED_MODULE_0__global__","Promise","Symbol","wellKnown","__WEBPACK_IMPORTED_MODULE_2__support_util__","for","WeakMap","from","of","copyWithin","fill","find","findIndex","includes","__WEBPACK_IMPORTED_MODULE_4__support_util__","globalObject","Math","pow","assign","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","is","keys","getOwnPropertyDescriptors","entries","values","fromCodePoint","raw","codePointAt","endsWith","normalize","repeat","startsWith","padEnd","padStart","String","__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__","every","key","Number","POSITIVE_INFINITY","e","imul","Observable","Set","getCallSite","callSite","substitutions","key1","key2","freeze","postMessage","requestAnimationFrame","setImmediate","MutationObserver","WebKitMutationObserver","example","createElement","observer","observe","attributes","style","setProperty","takeRecords","undefined","Animation","KeyframeEffect","executeTask","item","isActive","callback","getQueueHandle","enqueue","queue","addEventListener","source","data","stopPropagation","shift","queueTask","id","queueAnimationTask","rafId","bind","cancelAnimationFrame","writable","nativeFunction","target","args","Injector","__WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__","payload","_payload","invalidator","_invalidator","NodeEventType","_nodeMap","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__","element","emit","Widget","Projector","clear","WIDGET_BASE_TYPE","__WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__","isWidgetBaseConstructor","_type","Registry","__WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__","widgetLabel","action","label","_widgetRegistry","toString","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__","widgetCtor","emitLoadedEvent","error","injectorFactory","_injectorRegistry","injectorItem","injector","promise","default","isWidgetConstructorDefaultExport","hasInjector","__WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__","_registry","__WEBPACK_IMPORTED_MODULE_2__Registry__","_registryWidgetLabelMap","_registryInjectorLabelMap","baseRegistry","delete","base","widget","define","defineInjector","globalPrecedence","_get","getFunctionName","labelMap","registries","registry","registeredLabels","on","decoratorMap","boundAuto","__WEBPACK_IMPORTED_MODULE_4__diff__","noBind","WidgetBase","_initialProperties","_changedPropertyKeys","_nodeHandler","__WEBPACK_IMPORTED_MODULE_6__NodeHandler__","_children","_decoratorCache","_properties","_boundRenderFunc","render","_boundInvalidate","invalidate","__WEBPACK_IMPORTED_MODULE_7__vdom__","dirty","onAttach","onDetach","nodeHandler","coreProperties","rendering","inputProperties","_runAfterConstructors","MetaType","_metaMap","cached","properties","changedPropertyKeys","instanceData","__WEBPACK_IMPORTED_MODULE_5__RegistryHandler__","originalProperties","_runBeforeProperties","registeredDiffPropertyNames","getDecorator","propertyNames","allProperties","checkedProperties","diffPropertyResults","runReactions","propertyName","previousProperty","newProperty","_bindFunctionProperty","diffFunctions","changed","_mapDiffPropertyReactions","reaction","previousProperties","newProperties","children","dNode","_runBeforeRenders","runAfterRenders","__WEBPACK_IMPORTED_MODULE_3__d__","decoratorKey","decoratorList","constructor","specificDecoratorList","decorators","allDecorators","instanceMap","unshift","getPrototypeOf","_buildDecoratorList","reduce","reactionPropertyMap","reactionArguments","__WEBPACK_IMPORTED_MODULE_8__Registry__","_bindFunctionPropertyMap","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__","bindInfo","boundFunc","scope","beforeProperties","beforePropertiesFunction","beforeRenders","beforeRenderFunction","updatedRender","console","warn","afterRenders","afterRenderFunction","meta","afterRender","afterConstructors","afterConstructor","pop","browserSpecificTransitionEndEventName","browserSpecificAnimationEndEventName","initialize","determineBrowserStyleNames","runAndCleanUp","startAnimation","finishAnimation","finished","transitionEnd","removeEventListener","enter","enterAnimation","activeClass","enterAnimationActive","classList","remove","exit","exitAnimation","removeNode","exitAnimationActive","child","DOMVNODE","widgetConstructor","WNODE","tag","propertiesOrChildren","deferredPropertiesCallback","VNODE","attrs","props","diffType","isElementNode","tagName","events","domNode","text","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__","isWNode","isVNode","__WEBPACK_IMPORTED_MODULE_0__handleDecorator__","propertyKey","addDecorator","alwaysRender","__WEBPACK_IMPORTED_MODULE_1__beforeProperties__","customElement","childType","__WEBPACK_IMPORTED_MODULE_0__registerCustomElement__","DOJO","registryFactory","__WEBPACK_IMPORTED_MODULE_1__Registry__","__customElementDescriptor","diffProperty","diffFunction","reactionFunction","handleDecorator","handler","descriptor","registeredInjectorsMap","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__","inject","getProperties","__WEBPACK_IMPORTED_MODULE_1__handleDecorator__","__WEBPACK_IMPORTED_MODULE_2__beforeProperties__","getInjector","registeredInjectors","__WEBPACK_IMPORTED_MODULE_0__Registry__","reference","ignore","isObjectOrArray","shallow","validOldProperty","validNewProperty","previousKeys","newKeys","some","ProjectorAttachState","AttachType","ProjectorMixin","Base","_root","body","_async","_projectorProperties","_projectionOptions","transitions","__WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__","root","projectorState","Detached","options","Append","_attach","Merge","Attached","async","doc","previousRoot","createDocumentFragment","__setChildren__","__setProperties__","__WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__","__setCoreProperties__","_projection","childNodes","outerHTML","__WEBPACK_IMPORTED_MODULE_4__d__","_attachHandle","sync","__WEBPACK_IMPORTED_MODULE_5__vdom__","append","merge","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__","Function","theme","__WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__","themeRegistry","themeInjector","__WEBPACK_IMPORTED_MODULE_1__Injector__","INJECTED_THEME_KEY","setInvalidator","THEME_KEY","ThemedMixin","Themed","_registeredBaseThemeKeys","_recalculateClasses","_theme","classes","_recalculateThemeClasses","className","_getThemeClass","extraClasses","themeClassName","_baseThemeClassesReverseLookup","resultClassNames","_registeredBaseTheme","join","baseThemes","finalBaseTheme","baseTheme","_a","currentClassNames","baseClass","themeKey","__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__","__WEBPACK_IMPORTED_MODULE_5__diff__","__WEBPACK_IMPORTED_MODULE_2__decorators_inject__","CustomElementChildType","DomToWidgetWrapper","__WEBPACK_IMPORTED_MODULE_1__WidgetBase__","__WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__","create","WidgetConstructor","attributeMap","attributeName","HTMLElement","_eventProperties","_initialised","domProperties","_attributesToProperties","filteredPropertyName","_getProperty","_setProperty","eventName","_getEventProperty","_setEventProperty","eventCallback","dispatchEvent","CustomEvent","bubbles","detail","defineProperties","TEXT","__WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__","childNode","_render","_childConnected","widgetProperties","renderChildren","__children__","themeContext","__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__","_getTheme","__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__","__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__","_projector","setProperties","dojoce","themes","parentNode","filter","Child","isWidget","__properties__","oldValue","getAttribute","observedAttributes","register","customElements","NAMESPACE_SVG","NAMESPACE_W3","NAMESPACE_XLINK","emptyArray","widgetInstanceMap","__WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__","projectorStateMap","same","dnode1","dnode2","__WEBPACK_IMPORTED_MODULE_2__d__","instance","missingTransition","checkStyleValue","styleValue","updateEvent","currentValue","projectionOptions","previousValue","projectorInstance","eventMap","nodeMap","previousEvent","evt","addClasses","classNames","split","removeClasses","focusNode","propValue","deferredRenderCallbacks","focus","removeOrphanedEvents","onlyEvents","propName","isEvent","substr","updateAttribute","attrName","attrValue","namespace","setAttributeNS","removeAttribute","setAttribute","updateAttributes","previousAttributes","attrNames","attrCount","updateProperties","includesEventsAndAttributes","propertiesUpdated","propNames","propCount","previousClasses","currentClasses","newClasses","previousClassName","classIndex","styleNames","styleCount","j","styleName","newStyleValue","styleApplyer","domValue","lastIndexOf","findIndexOfChild","sameAs","start","toInternalWNode","rendered","filterAndDecorateChildren","nodeAdded","dnode","nodeToRemove","pointerEvents","removeDomNode","removeChild","checkDistinguishable","indexToCheck","parentInstance","nodeIdentifier","parentName","updateChildren","parentVNode","oldChildren","newChildren","oldChildrenLength","newChildrenLength","depth","oldIndex","newIndex","textUpdated","oldChild","newChild","inserted","addDeferredProperties","updateDom","findOldIndex","addChild","insertBeforeDomNode","nextIndex","insertBeforeChildren","insertBefore","createDom","afterRenderCallbacks","childToRemove","addChildren","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__","domElement","toUpperCase","initPropertiesAndChildren","parentInstanceData","__WEBPACK_IMPORTED_MODULE_3__Registry__","renderQueue","scheduleRender","__render__","filteredRendered","addRoot","mergeElement","ownerDocument","createElementNS","appendChild","newDomNode","createTextNode","replaceChild","previous","previousRendered","updated","current","buildPreviousProperties","updateAnimation","vnode","decoratedDeferredProperties","runDeferredRenderCallbacks","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__","runAfterRenderCallbacks","requestIdleCallback","setTimeout","renderScheduled","renders","sort","a","b","previouslyRendered","dom","finalProjectorOptions","projectorOptions","defaults","getProjectionOptions","rootNode","projection","widgetFactory","registerCustomElement","defaultExport","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","nextTick","title","browser","env","argv","version","addListener","once","off","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","t","desc","r","Reflect","decorate","metadataKey","metadataValue","metadata","setPrototypeOf","g","eval","MenuItem","__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__","__WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__","onSelected","selected","__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__","__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__","onclick","_onClick","__WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__"," _key"],"mappings":"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","file":"menu-item-1.0.0.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 931d3d7713b7be398580","import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/Destroyable.mjs\n// module id = ./node_modules/@dojo/core/Destroyable.mjs\n// module chunks = menu-item","import Map from '@dojo/shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n methods.forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/Evented.mjs\n// module id = ./node_modules/@dojo/core/Evented.mjs\n// module chunks = menu-item","import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/lang.mjs\n// module id = ./node_modules/@dojo/core/lang.mjs\n// module chunks = menu-item","function isFeatureTestThenable(value) {\n return value && value.then;\n}\n/**\n * A cache of results of feature tests\n */\nexport const testCache = {};\n/**\n * A cache of the un-resolved feature tests\n */\nexport const testFunctions = {};\n/**\n * A cache of unresolved thenables (probably promises)\n * @type {{}}\n */\nconst testThenables = {};\n/**\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\n */\nconst globalScope = (function () {\n /* istanbul ignore else */\n if (typeof window !== 'undefined') {\n // Browsers\n return window;\n }\n else if (typeof global !== 'undefined') {\n // Node\n return global;\n }\n else if (typeof self !== 'undefined') {\n // Web workers\n return self;\n }\n /* istanbul ignore next */\n return {};\n})();\n/* Grab the staticFeatures if there are available */\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\n/* Cleaning up the DojoHasEnviornment */\nif ('DojoHasEnvironment' in globalScope) {\n delete globalScope.DojoHasEnvironment;\n}\n/**\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\n * returns a map.\n *\n * @param value The value to guard for\n */\nfunction isStaticFeatureFunction(value) {\n return typeof value === 'function';\n}\n/**\n * The cache of asserted features that were available in the global scope when the\n * module loaded\n */\nconst staticCache = staticFeatures\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\n : {}; /* Providing an empty cache, if none was in the environment\n\n/**\n* AMD plugin function.\n*\n* Conditional loads modules based on a has feature test value.\n*\n* @param resourceId Gives the resolved module id to load.\n* @param require The loader require function with respect to the module that contained the plugin resource in its\n* dependency list.\n* @param load Callback to loader that consumes result of plugin demand.\n*/\nexport function load(resourceId, require, load, config) {\n resourceId ? require([resourceId], load) : load();\n}\n/**\n * AMD plugin function.\n *\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\n * value(s).\n *\n * @param resourceId The id of the module\n * @param normalize Resolves a relative module id into an absolute module id\n */\nexport function normalize(resourceId, normalize) {\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\n let i = 0;\n function get(skip) {\n const term = tokens[i++];\n if (term === ':') {\n // empty string module name, resolves to null\n return null;\n }\n else {\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\n if (tokens[i++] === '?') {\n if (!skip && has(term)) {\n // matched the feature, get the first value from the options\n return get();\n }\n else {\n // did not match, get the second value, passing over the first\n get(true);\n return get(skip);\n }\n }\n // a module\n return term;\n }\n }\n const id = get();\n return id && normalize(id);\n}\n/**\n * Check if a feature has already been registered\n *\n * @param feature the name of the feature\n */\nexport function exists(feature) {\n const normalizedFeature = feature.toLowerCase();\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\n}\n/**\n * Register a new test for a named feature.\n *\n * @example\n * has.add('dom-addeventlistener', !!document.addEventListener);\n *\n * @example\n * has.add('touch-events', function () {\n * return 'ontouchstart' in document\n * });\n *\n * @param feature the name of the feature\n * @param value the value reported of the feature, or a function that will be executed once on first test\n * @param overwrite if an existing value should be overwritten. Defaults to false.\n */\nexport function add(feature, value, overwrite = false) {\n const normalizedFeature = feature.toLowerCase();\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\n }\n if (typeof value === 'function') {\n testFunctions[normalizedFeature] = value;\n }\n else if (isFeatureTestThenable(value)) {\n testThenables[feature] = value.then((resolvedValue) => {\n testCache[feature] = resolvedValue;\n delete testThenables[feature];\n }, () => {\n delete testThenables[feature];\n });\n }\n else {\n testCache[normalizedFeature] = value;\n delete testFunctions[normalizedFeature];\n }\n}\n/**\n * Return the current value of a named feature.\n *\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\n */\nexport default function has(feature) {\n let result;\n const normalizedFeature = feature.toLowerCase();\n if (normalizedFeature in staticCache) {\n result = staticCache[normalizedFeature];\n }\n else if (testFunctions[normalizedFeature]) {\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\n delete testFunctions[normalizedFeature];\n }\n else if (normalizedFeature in testCache) {\n result = testCache[normalizedFeature];\n }\n else if (feature in testThenables) {\n return false;\n }\n else {\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\n }\n return result;\n}\n/*\n * Out of the box feature tests\n */\n/* Environments */\n/* Used as a value to provide a debug only code path */\nadd('debug', true);\n/* Detects if the environment is \"browser like\" */\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\n/* Detects if the environment appears to be NodeJS */\nadd('host-node', function () {\n if (typeof process === 'object' && process.versions && process.versions.node) {\n return process.versions.node;\n }\n});\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/has/has.mjs\n// module id = ./node_modules/@dojo/has/has.mjs\n// module chunks = menu-item","import { isArrayLike, ShimIterator } from './iterator';\nimport global from './global';\nimport { is as objectIs } from './object';\nimport has from './support/has';\nimport './Symbol';\nexport let Map = global.Map;\nif (!true) {\n Map = (_a = class Map {\n constructor(iterable) {\n this._keys = [];\n this._values = [];\n this[Symbol.toStringTag] = 'Map';\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const value = iterable[i];\n this.set(value[0], value[1]);\n }\n }\n else {\n for (const value of iterable) {\n this.set(value[0], value[1]);\n }\n }\n }\n }\n /**\n * An alternative to Array.prototype.indexOf using Object.is\n * to check for equality. See http://mzl.la/1zuKO2V\n */\n _indexOfKey(keys, key) {\n for (let i = 0, length = keys.length; i < length; i++) {\n if (objectIs(keys[i], key)) {\n return i;\n }\n }\n return -1;\n }\n get size() {\n return this._keys.length;\n }\n clear() {\n this._keys.length = this._values.length = 0;\n }\n delete(key) {\n const index = this._indexOfKey(this._keys, key);\n if (index < 0) {\n return false;\n }\n this._keys.splice(index, 1);\n this._values.splice(index, 1);\n return true;\n }\n entries() {\n const values = this._keys.map((key, i) => {\n return [key, this._values[i]];\n });\n return new ShimIterator(values);\n }\n forEach(callback, context) {\n const keys = this._keys;\n const values = this._values;\n for (let i = 0, length = keys.length; i < length; i++) {\n callback.call(context, values[i], keys[i], this);\n }\n }\n get(key) {\n const index = this._indexOfKey(this._keys, key);\n return index < 0 ? undefined : this._values[index];\n }\n has(key) {\n return this._indexOfKey(this._keys, key) > -1;\n }\n keys() {\n return new ShimIterator(this._keys);\n }\n set(key, value) {\n let index = this._indexOfKey(this._keys, key);\n index = index < 0 ? this._keys.length : index;\n this._keys[index] = key;\n this._values[index] = value;\n return this;\n }\n values() {\n return new ShimIterator(this._values);\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n },\n _a[Symbol.species] = _a,\n _a);\n}\nexport default Map;\nvar _a;\n//# sourceMappingURL=Map.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Map.mjs\n// module id = ./node_modules/@dojo/shim/Map.mjs\n// module chunks = menu-item","import global from './global';\nimport { queueMicroTask } from './support/queue';\nimport './Symbol';\nimport has from './support/has';\nexport let ShimPromise = global.Promise;\nexport const isThenable = function isThenable(value) {\n return value && typeof value.then === 'function';\n};\nif (!true) {\n global.Promise = ShimPromise = (_a = class Promise {\n /**\n * Creates a new Promise.\n *\n * @constructor\n *\n * @param executor\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\n * starting the asynchronous operation when it is invoked.\n *\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\n * successfully, or the `reject` function when the operation fails.\n */\n constructor(executor) {\n /**\n * The current state of this promise.\n */\n this.state = 1 /* Pending */;\n this[Symbol.toStringTag] = 'Promise';\n /**\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\n */\n let isChained = false;\n /**\n * Whether or not this promise is in a resolved state.\n */\n const isResolved = () => {\n return this.state !== 1 /* Pending */ || isChained;\n };\n /**\n * Callbacks that should be invoked once the asynchronous operation has completed.\n */\n let callbacks = [];\n /**\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\n * enqueues callbacks for execution on the next event loop turn.\n */\n let whenFinished = function (callback) {\n if (callbacks) {\n callbacks.push(callback);\n }\n };\n /**\n * Settles this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const settle = (newState, value) => {\n // A promise can only be settled once.\n if (this.state !== 1 /* Pending */) {\n return;\n }\n this.state = newState;\n this.resolvedValue = value;\n whenFinished = queueMicroTask;\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\n // wait an extra turn.\n if (callbacks && callbacks.length > 0) {\n queueMicroTask(function () {\n if (callbacks) {\n let count = callbacks.length;\n for (let i = 0; i < count; ++i) {\n callbacks[i].call(null);\n }\n callbacks = null;\n }\n });\n }\n };\n /**\n * Resolves this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const resolve = (newState, value) => {\n if (isResolved()) {\n return;\n }\n if (isThenable(value)) {\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\n isChained = true;\n }\n else {\n settle(newState, value);\n }\n };\n this.then = (onFulfilled, onRejected) => {\n return new Promise((resolve, reject) => {\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\n // event loop.\n whenFinished(() => {\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\n if (typeof callback === 'function') {\n try {\n resolve(callback(this.resolvedValue));\n }\n catch (error) {\n reject(error);\n }\n }\n else if (this.state === 2 /* Rejected */) {\n reject(this.resolvedValue);\n }\n else {\n resolve(this.resolvedValue);\n }\n });\n });\n };\n try {\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\n }\n catch (error) {\n settle(2 /* Rejected */, error);\n }\n }\n static all(iterable) {\n return new this(function (resolve, reject) {\n const values = [];\n let complete = 0;\n let total = 0;\n let populating = true;\n function fulfill(index, value) {\n values[index] = value;\n ++complete;\n finish();\n }\n function finish() {\n if (populating || complete < total) {\n return;\n }\n resolve(values);\n }\n function processItem(index, item) {\n ++total;\n if (isThenable(item)) {\n // If an item Promise rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(fulfill.bind(null, index), reject);\n }\n else {\n Promise.resolve(item).then(fulfill.bind(null, index));\n }\n }\n let i = 0;\n for (const value of iterable) {\n processItem(i, value);\n i++;\n }\n populating = false;\n finish();\n });\n }\n static race(iterable) {\n return new this(function (resolve, reject) {\n for (const item of iterable) {\n if (item instanceof Promise) {\n // If a Promise item rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(resolve, reject);\n }\n else {\n Promise.resolve(item).then(resolve);\n }\n }\n });\n }\n static reject(reason) {\n return new this(function (resolve, reject) {\n reject(reason);\n });\n }\n static resolve(value) {\n return new this(function (resolve) {\n resolve(value);\n });\n }\n catch(onRejected) {\n return this.then(undefined, onRejected);\n }\n },\n _a[Symbol.species] = ShimPromise,\n _a);\n}\nexport default ShimPromise;\nvar _a;\n//# sourceMappingURL=Promise.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Promise.mjs\n// module id = ./node_modules/@dojo/shim/Promise.mjs\n// module chunks = menu-item","import has from './support/has';\nimport global from './global';\nimport { getValueDescriptor } from './support/util';\nexport let Symbol = global.Symbol;\nif (!true) {\n /**\n * Throws if the value is not a symbol, used internally within the Shim\n * @param {any} value The value to check\n * @return {symbol} Returns the symbol or throws\n */\n const validateSymbol = function validateSymbol(value) {\n if (!isSymbol(value)) {\n throw new TypeError(value + ' is not a symbol');\n }\n return value;\n };\n const defineProperties = Object.defineProperties;\n const defineProperty = Object.defineProperty;\n const create = Object.create;\n const objPrototype = Object.prototype;\n const globalSymbols = {};\n const getSymbolName = (function () {\n const created = create(null);\n return function (desc) {\n let postfix = 0;\n let name;\n while (created[String(desc) + (postfix || '')]) {\n ++postfix;\n }\n desc += String(postfix || '');\n created[desc] = true;\n name = '@@' + desc;\n // FIXME: Temporary guard until the duplicate execution when testing can be\n // pinned down.\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\n defineProperty(objPrototype, name, {\n set: function (value) {\n defineProperty(this, name, getValueDescriptor(value));\n }\n });\n }\n return name;\n };\n })();\n const InternalSymbol = function Symbol(description) {\n if (this instanceof InternalSymbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n return Symbol(description);\n };\n Symbol = global.Symbol = function Symbol(description) {\n if (this instanceof Symbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n const sym = Object.create(InternalSymbol.prototype);\n description = description === undefined ? '' : String(description);\n return defineProperties(sym, {\n __description__: getValueDescriptor(description),\n __name__: getValueDescriptor(getSymbolName(description))\n });\n };\n /* Decorate the Symbol function with the appropriate properties */\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\n if (globalSymbols[key]) {\n return globalSymbols[key];\n }\n return (globalSymbols[key] = Symbol(String(key)));\n }));\n defineProperties(Symbol, {\n keyFor: getValueDescriptor(function (sym) {\n let key;\n validateSymbol(sym);\n for (key in globalSymbols) {\n if (globalSymbols[key] === sym) {\n return key;\n }\n }\n }),\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\n match: getValueDescriptor(Symbol.for('match'), false, false),\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\n search: getValueDescriptor(Symbol.for('search'), false, false),\n species: getValueDescriptor(Symbol.for('species'), false, false),\n split: getValueDescriptor(Symbol.for('split'), false, false),\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\n });\n /* Decorate the InternalSymbol object */\n defineProperties(InternalSymbol.prototype, {\n constructor: getValueDescriptor(Symbol),\n toString: getValueDescriptor(function () {\n return this.__name__;\n }, false, false)\n });\n /* Decorate the Symbol.prototype */\n defineProperties(Symbol.prototype, {\n toString: getValueDescriptor(function () {\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\n }),\n valueOf: getValueDescriptor(function () {\n return validateSymbol(this);\n })\n });\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\n return validateSymbol(this);\n }));\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\n}\n/**\n * A custom guard function that determines if an object is a symbol or not\n * @param {any} value The value to check to see if it is a symbol or not\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\n */\nexport function isSymbol(value) {\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\n}\n/**\n * Fill any missing well known symbols if the native Symbol is missing them\n */\n[\n 'hasInstance',\n 'isConcatSpreadable',\n 'iterator',\n 'species',\n 'replace',\n 'search',\n 'split',\n 'match',\n 'toPrimitive',\n 'toStringTag',\n 'unscopables',\n 'observable'\n].forEach((wellKnown) => {\n if (!Symbol[wellKnown]) {\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\n }\n});\nexport default Symbol;\n//# sourceMappingURL=Symbol.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Symbol.mjs\n// module id = ./node_modules/@dojo/shim/Symbol.mjs\n// module chunks = menu-item","import global from './global';\nimport { isArrayLike } from './iterator';\nimport has from './support/has';\nimport './Symbol';\nexport let WeakMap = global.WeakMap;\nif (!true) {\n const DELETED = {};\n const getUID = function getUID() {\n return Math.floor(Math.random() * 100000000);\n };\n const generateName = (function () {\n let startId = Math.floor(Date.now() % 100000000);\n return function generateName() {\n return '__wm' + getUID() + (startId++ + '__');\n };\n })();\n WeakMap = class WeakMap {\n constructor(iterable) {\n this[Symbol.toStringTag] = 'WeakMap';\n this._name = generateName();\n this._frozenEntries = [];\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const item = iterable[i];\n this.set(item[0], item[1]);\n }\n }\n else {\n for (const [key, value] of iterable) {\n this.set(key, value);\n }\n }\n }\n }\n _getFrozenEntryIndex(key) {\n for (let i = 0; i < this._frozenEntries.length; i++) {\n if (this._frozenEntries[i].key === key) {\n return i;\n }\n }\n return -1;\n }\n delete(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n entry.value = DELETED;\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n this._frozenEntries.splice(frozenIndex, 1);\n return true;\n }\n return false;\n }\n get(key) {\n if (key === undefined || key === null) {\n return undefined;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n return entry.value;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return this._frozenEntries[frozenIndex].value;\n }\n }\n has(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return true;\n }\n return false;\n }\n set(key, value) {\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\n throw new TypeError('Invalid value used as weak map key');\n }\n let entry = key[this._name];\n if (!entry || entry.key !== key) {\n entry = Object.create(null, {\n key: { value: key }\n });\n if (Object.isFrozen(key)) {\n this._frozenEntries.push(entry);\n }\n else {\n Object.defineProperty(key, this._name, {\n value: entry\n });\n }\n }\n entry.value = value;\n return this;\n }\n };\n}\nexport default WeakMap;\n//# sourceMappingURL=WeakMap.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/WeakMap.mjs\n// module id = ./node_modules/@dojo/shim/WeakMap.mjs\n// module chunks = menu-item","import global from './global';\nimport { isArrayLike, isIterable } from './iterator';\nimport { MAX_SAFE_INTEGER } from './number';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\nexport let from;\n/**\n * Creates a new array from the function parameters.\n *\n * @param arguments Any number of arguments for the array\n * @return An array from the given arguments\n */\nexport let of;\n/* ES6 Array instance methods */\n/**\n * Copies data internally within an array or array-like object.\n *\n * @param target The target array-like object\n * @param offset The index to start copying values to; if negative, it counts backwards from length\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\n * @return The target\n */\nexport let copyWithin;\n/**\n * Fills elements of an array-like object with the specified value.\n *\n * @param target The target to fill\n * @param value The value to fill each element of the target with\n * @param start The first index to fill\n * @param end The (exclusive) index at which to stop filling\n * @return The filled target\n */\nexport let fill;\n/**\n * Finds and returns the first instance matching the callback or undefined if one is not found.\n *\n * @param target An array-like object\n * @param callback A function returning if the current value matches a criteria\n * @param thisArg The execution context for the find function\n * @return The first element matching the callback, or undefined if one does not exist\n */\nexport let find;\n/**\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\n * or -1 if no values satisfy it.\n *\n * @param target An array-like object\n * @param callback A function returning true if the current value satisfies its criteria\n * @param thisArg The execution context for the find function\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\n */\nexport let findIndex;\n/* ES7 Array instance methods */\n/**\n * Determines whether an array includes a given value\n *\n * @param target the target array-like object\n * @param searchElement the item to search for\n * @param fromIndex the starting index to search from\n * @return `true` if the array includes the element, otherwise `false`\n */\nexport let includes;\nif (true && true) {\n from = global.Array.from;\n of = global.Array.of;\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\n fill = wrapNative(global.Array.prototype.fill);\n find = wrapNative(global.Array.prototype.find);\n findIndex = wrapNative(global.Array.prototype.findIndex);\n}\nelse {\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n if (isNaN(length)) {\n return 0;\n }\n length = Number(length);\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n /**\n * From ES6 7.1.4 ToInteger()\n *\n * @param value A value to convert\n * @return An integer\n */\n const toInteger = function toInteger(value) {\n value = Number(value);\n if (isNaN(value)) {\n return 0;\n }\n if (value === 0 || !isFinite(value)) {\n return value;\n }\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\n };\n /**\n * Normalizes an offset against a given length, wrapping it if negative.\n *\n * @param value The original offset\n * @param length The total length to normalize against\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\n */\n const normalizeOffset = function normalizeOffset(value, length) {\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\n };\n from = function from(arrayLike, mapFunction, thisArg) {\n if (arrayLike == null) {\n throw new TypeError('from: requires an array-like object');\n }\n if (mapFunction && thisArg) {\n mapFunction = mapFunction.bind(thisArg);\n }\n /* tslint:disable-next-line:variable-name */\n const Constructor = this;\n const length = toLength(arrayLike.length);\n // Support extension\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\n return array;\n }\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\n // with the iteration on IE when using a NaN array length.\n if (isArrayLike(arrayLike)) {\n if (length === 0) {\n return [];\n }\n for (let i = 0; i < arrayLike.length; i++) {\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\n }\n }\n else {\n let i = 0;\n for (const value of arrayLike) {\n array[i] = mapFunction ? mapFunction(value, i) : value;\n i++;\n }\n }\n if (arrayLike.length !== undefined) {\n array.length = length;\n }\n return array;\n };\n of = function of(...items) {\n return Array.prototype.slice.call(items);\n };\n copyWithin = function copyWithin(target, offset, start, end) {\n if (target == null) {\n throw new TypeError('copyWithin: target must be an array-like object');\n }\n const length = toLength(target.length);\n offset = normalizeOffset(toInteger(offset), length);\n start = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n let count = Math.min(end - start, length - offset);\n let direction = 1;\n if (offset > start && offset < start + count) {\n direction = -1;\n start += count - 1;\n offset += count - 1;\n }\n while (count > 0) {\n if (start in target) {\n target[offset] = target[start];\n }\n else {\n delete target[offset];\n }\n offset += direction;\n start += direction;\n count--;\n }\n return target;\n };\n fill = function fill(target, value, start, end) {\n const length = toLength(target.length);\n let i = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n while (i < end) {\n target[i++] = value;\n }\n return target;\n };\n find = function find(target, callback, thisArg) {\n const index = findIndex(target, callback, thisArg);\n return index !== -1 ? target[index] : undefined;\n };\n findIndex = function findIndex(target, callback, thisArg) {\n const length = toLength(target.length);\n if (!callback) {\n throw new TypeError('find: second argument must be a function');\n }\n if (thisArg) {\n callback = callback.bind(thisArg);\n }\n for (let i = 0; i < length; i++) {\n if (callback(target[i], i, target)) {\n return i;\n }\n }\n return -1;\n };\n}\nif (true) {\n includes = wrapNative(global.Array.prototype.includes);\n}\nelse {\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n length = Number(length);\n if (isNaN(length)) {\n return 0;\n }\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n includes = function includes(target, searchElement, fromIndex = 0) {\n let len = toLength(target.length);\n for (let i = fromIndex; i < len; ++i) {\n const currentElement = target[i];\n if (searchElement === currentElement ||\n (searchElement !== searchElement && currentElement !== currentElement)) {\n return true;\n }\n }\n return false;\n };\n}\n//# sourceMappingURL=array.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/array.mjs\n// module id = ./node_modules/@dojo/shim/array.mjs\n// module chunks = menu-item","const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/global.mjs\n// module id = ./node_modules/@dojo/shim/global.mjs\n// module chunks = menu-item","import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/number.mjs\n// module id = ./node_modules/@dojo/shim/number.mjs\n// module chunks = menu-item","import global from './global';\nimport has from './support/has';\nimport { isSymbol } from './Symbol';\nexport let assign;\n/**\n * Gets the own property descriptor of the specified object.\n * An own property descriptor is one that is defined directly on the object and is not\n * inherited from the object's prototype.\n * @param o Object that contains the property.\n * @param p Name of the property.\n */\nexport let getOwnPropertyDescriptor;\n/**\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\n * @param o Object that contains the own properties.\n */\nexport let getOwnPropertyNames;\n/**\n * Returns an array of all symbol properties found directly on object o.\n * @param o Object to retrieve the symbols from.\n */\nexport let getOwnPropertySymbols;\n/**\n * Returns true if the values are the same value, false otherwise.\n * @param value1 The first value.\n * @param value2 The second value.\n */\nexport let is;\n/**\n * Returns the names of the enumerable properties and methods of an object.\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n */\nexport let keys;\n/* ES7 Object static methods */\nexport let getOwnPropertyDescriptors;\nexport let entries;\nexport let values;\nif (true) {\n const globalObject = global.Object;\n assign = globalObject.assign;\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\n is = globalObject.is;\n keys = globalObject.keys;\n}\nelse {\n keys = function symbolAwareKeys(o) {\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n assign = function assign(target, ...sources) {\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const to = Object(target);\n sources.forEach((nextSource) => {\n if (nextSource) {\n // Skip over if undefined or null\n keys(nextSource).forEach((nextKey) => {\n to[nextKey] = nextSource[nextKey];\n });\n }\n });\n return to;\n };\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\n if (isSymbol(prop)) {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n else {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n };\n getOwnPropertyNames = function getOwnPropertyNames(o) {\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n return Object.getOwnPropertyNames(o)\n .filter((key) => Boolean(key.match(/^@@.+/)))\n .map((key) => Symbol.for(key.substring(2)));\n };\n is = function is(value1, value2) {\n if (value1 === value2) {\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\n }\n return value1 !== value1 && value2 !== value2; // NaN\n };\n}\nif (true) {\n const globalObject = global.Object;\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\n entries = globalObject.entries;\n values = globalObject.values;\n}\nelse {\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\n return getOwnPropertyNames(o).reduce((previous, key) => {\n previous[key] = getOwnPropertyDescriptor(o, key);\n return previous;\n }, {});\n };\n entries = function entries(o) {\n return keys(o).map((key) => [key, o[key]]);\n };\n values = function values(o) {\n return keys(o).map((key) => o[key]);\n };\n}\n//# sourceMappingURL=object.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/object.mjs\n// module id = ./node_modules/@dojo/shim/object.mjs\n// module chunks = menu-item","import global from './global';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\n/**\n * The minimum location of high surrogates\n */\nexport const HIGH_SURROGATE_MIN = 0xd800;\n/**\n * The maximum location of high surrogates\n */\nexport const HIGH_SURROGATE_MAX = 0xdbff;\n/**\n * The minimum location of low surrogates\n */\nexport const LOW_SURROGATE_MIN = 0xdc00;\n/**\n * The maximum location of low surrogates\n */\nexport const LOW_SURROGATE_MAX = 0xdfff;\n/* ES6 static methods */\n/**\n * Return the String value whose elements are, in order, the elements in the List elements.\n * If length is 0, the empty string is returned.\n * @param codePoints The code points to generate the string\n */\nexport let fromCodePoint;\n/**\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\n * as such the first argument will be a well formed template call site object and the rest\n * parameter will contain the substitution values.\n * @param template A well-formed template string call site representation.\n * @param substitutions A set of substitution values.\n */\nexport let raw;\n/* ES6 instance methods */\n/**\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\n * value of the UTF-16 encoded code point starting at the string element at position pos in\n * the String resulting from converting this object to a String.\n * If there is no element at that position, the result is undefined.\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\n */\nexport let codePointAt;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * endPosition – length(this). Otherwise returns false.\n */\nexport let endsWith;\n/**\n * Returns true if searchString appears as a substring of the result of converting this\n * object to a String, at one or more positions that are\n * greater than or equal to position; otherwise, returns false.\n * @param target The target string\n * @param searchString search string\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\n */\nexport let includes;\n/**\n * Returns the String value result of normalizing the string into the normalization form\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\n * @param target The target string\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\n * is \"NFC\"\n */\nexport let normalize;\n/**\n * Returns a String value that is made from count copies appended together. If count is 0,\n * T is the empty String is returned.\n * @param count number of copies to append\n */\nexport let repeat;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * position. Otherwise returns false.\n */\nexport let startsWith;\n/* ES7 instance methods */\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the end (right) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padEnd;\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the start (left) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padStart;\nif (true && true) {\n fromCodePoint = global.String.fromCodePoint;\n raw = global.String.raw;\n codePointAt = wrapNative(global.String.prototype.codePointAt);\n endsWith = wrapNative(global.String.prototype.endsWith);\n includes = wrapNative(global.String.prototype.includes);\n normalize = wrapNative(global.String.prototype.normalize);\n repeat = wrapNative(global.String.prototype.repeat);\n startsWith = wrapNative(global.String.prototype.startsWith);\n}\nelse {\n /**\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\n * Used by startsWith, includes, and endsWith.\n *\n * @return Normalized position.\n */\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\n if (text == null) {\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\n }\n const length = text.length;\n position = position !== position ? (isEnd ? length : 0) : position;\n return [text, String(search), Math.min(Math.max(position, 0), length)];\n };\n fromCodePoint = function fromCodePoint(...codePoints) {\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\n const length = arguments.length;\n if (!length) {\n return '';\n }\n const fromCharCode = String.fromCharCode;\n const MAX_SIZE = 0x4000;\n let codeUnits = [];\n let index = -1;\n let result = '';\n while (++index < length) {\n let codePoint = Number(arguments[index]);\n // Code points must be finite integers within the valid range\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\n if (!isValid) {\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint);\n }\n else {\n // Astral code point; split in surrogate halves\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += fromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n raw = function raw(callSite, ...substitutions) {\n let rawStrings = callSite.raw;\n let result = '';\n let numSubstitutions = substitutions.length;\n if (callSite == null || callSite.raw == null) {\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\n }\n for (let i = 0, length = rawStrings.length; i < length; i++) {\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\n }\n return result;\n };\n codePointAt = function codePointAt(text, position = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\n if (text == null) {\n throw new TypeError('string.codePointAt requries a valid string.');\n }\n const length = text.length;\n if (position !== position) {\n position = 0;\n }\n if (position < 0 || position >= length) {\n return undefined;\n }\n // Get the first code unit\n const first = text.charCodeAt(position);\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n const second = text.charCodeAt(position + 1);\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\n }\n }\n return first;\n };\n endsWith = function endsWith(text, search, endPosition) {\n if (endPosition == null) {\n endPosition = text.length;\n }\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\n const start = endPosition - search.length;\n if (start < 0) {\n return false;\n }\n return text.slice(start, endPosition) === search;\n };\n includes = function includes(text, search, position = 0) {\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\n return text.indexOf(search, position) !== -1;\n };\n repeat = function repeat(text, count = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\n if (text == null) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (count !== count) {\n count = 0;\n }\n if (count < 0 || count === Infinity) {\n throw new RangeError('string.repeat requires a non-negative finite count.');\n }\n let result = '';\n while (count) {\n if (count % 2) {\n result += text;\n }\n if (count > 1) {\n text += text;\n }\n count >>= 1;\n }\n return result;\n };\n startsWith = function startsWith(text, search, position = 0) {\n search = String(search);\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\n const end = position + search.length;\n if (end > text.length) {\n return false;\n }\n return text.slice(position, end) === search;\n };\n}\nif (true) {\n padEnd = wrapNative(global.String.prototype.padEnd);\n padStart = wrapNative(global.String.prototype.padStart);\n}\nelse {\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padEnd requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText +=\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length);\n }\n return strText;\n };\n padStart = function padStart(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padStart requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText =\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length) +\n strText;\n }\n return strText;\n };\n}\n//# sourceMappingURL=string.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/string.mjs\n// module id = ./node_modules/@dojo/shim/string.mjs\n// module chunks = menu-item","import has, { add } from '@dojo/has/has';\nimport global from '../global';\nexport default has;\nexport * from '@dojo/has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/has.mjs\n// module id = ./node_modules/@dojo/shim/support/has.mjs\n// module chunks = menu-item","import global from '../global';\nimport has from './has';\nfunction executeTask(item) {\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n}\nfunction getQueueHandle(item, destructor) {\n return {\n destroy: function () {\n this.destroy = function () { };\n item.isActive = false;\n item.callback = null;\n if (destructor) {\n destructor();\n }\n }\n };\n}\nlet checkMicroTaskQueue;\nlet microTasks;\n/**\n * Schedules a callback to the macrotask queue.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueTask = (function () {\n let destructor;\n let enqueue;\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\n if (true) {\n const queue = [];\n global.addEventListener('message', function (event) {\n // Confirm that the event was triggered by the current window and by this particular implementation.\n if (event.source === global && event.data === 'dojo-queue-message') {\n event.stopPropagation();\n if (queue.length) {\n executeTask(queue.shift());\n }\n }\n });\n enqueue = function (item) {\n queue.push(item);\n global.postMessage('dojo-queue-message', '*');\n };\n }\n else if (false) {\n destructor = global.clearImmediate;\n enqueue = function (item) {\n return setImmediate(executeTask.bind(null, item));\n };\n }\n else {\n destructor = global.clearTimeout;\n enqueue = function (item) {\n return setTimeout(executeTask.bind(null, item), 0);\n };\n }\n function queueTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const id = enqueue(item);\n return getQueueHandle(item, destructor &&\n function () {\n destructor(id);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueTask(callback);\n };\n})();\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\nif (!true) {\n let isMicroTaskQueued = false;\n microTasks = [];\n checkMicroTaskQueue = function () {\n if (!isMicroTaskQueued) {\n isMicroTaskQueued = true;\n queueTask(function () {\n isMicroTaskQueued = false;\n if (microTasks.length) {\n let item;\n while ((item = microTasks.shift())) {\n executeTask(item);\n }\n }\n });\n }\n };\n}\n/**\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\n *\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueAnimationTask = (function () {\n if (!true) {\n return queueTask;\n }\n function queueAnimationTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\n return getQueueHandle(item, function () {\n cancelAnimationFrame(rafId);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueAnimationTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueAnimationTask(callback);\n };\n})();\n/**\n * Schedules a callback to the microtask queue.\n *\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\n * registered with `queueTask` or `queueAnimationTask`.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport let queueMicroTask = (function () {\n let enqueue;\n if (false) {\n enqueue = function (item) {\n global.process.nextTick(executeTask.bind(null, item));\n };\n }\n else if (true) {\n enqueue = function (item) {\n global.Promise.resolve(item).then(executeTask);\n };\n }\n else if (true) {\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const node = document.createElement('div');\n const queue = [];\n const observer = new HostMutationObserver(function () {\n while (queue.length > 0) {\n const item = queue.shift();\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n }\n });\n observer.observe(node, { attributes: true });\n enqueue = function (item) {\n queue.push(item);\n node.setAttribute('queueStatus', '1');\n };\n }\n else {\n enqueue = function (item) {\n checkMicroTaskQueue();\n microTasks.push(item);\n };\n }\n return function (callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n enqueue(item);\n return getQueueHandle(item);\n };\n})();\n//# sourceMappingURL=queue.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/queue.mjs\n// module id = ./node_modules/@dojo/shim/support/queue.mjs\n// module chunks = menu-item","/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/util.mjs\n// module id = ./node_modules/@dojo/shim/support/util.mjs\n// module chunks = menu-item","import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/Injector.mjs\n// module id = ./node_modules/@dojo/widget-core/Injector.mjs\n// module chunks = menu-item","import { Evented } from '@dojo/core/Evented';\nimport Map from '@dojo/shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/NodeHandler.mjs\n// module id = ./node_modules/@dojo/widget-core/NodeHandler.mjs\n// module chunks = menu-item","import Promise from '@dojo/shim/Promise';\nimport Map from '@dojo/shim/Map';\nimport Symbol from '@dojo/shim/Symbol';\nimport { Evented } from '@dojo/core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/Registry.mjs\n// module id = ./node_modules/@dojo/widget-core/Registry.mjs\n// module chunks = menu-item","import { Map } from '@dojo/shim/Map';\nimport { Evented } from '@dojo/core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/RegistryHandler.mjs\n// module id = ./node_modules/@dojo/widget-core/RegistryHandler.mjs\n// module chunks = menu-item","import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/WidgetBase.mjs\n// module id = ./node_modules/@dojo/widget-core/WidgetBase.mjs\n// module chunks = menu-item","let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/animations/cssTransitions.mjs\n// module id = ./node_modules/@dojo/widget-core/animations/cssTransitions.mjs\n// module chunks = menu-item","import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/d.mjs\n// module id = ./node_modules/@dojo/widget-core/d.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/afterRender.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/afterRender.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs\n// module chunks = menu-item","import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/customElement.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/customElement.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/diffProperty.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/diffProperty.mjs\n// module chunks = menu-item","/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs\n// module chunks = menu-item","import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/inject.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/inject.mjs\n// module chunks = menu-item","import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/diff.mjs\n// module id = ./node_modules/@dojo/widget-core/diff.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/mixins/Projector.mjs\n// module id = ./node_modules/@dojo/widget-core/mixins/Projector.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/mixins/Themed.mjs\n// module id = ./node_modules/@dojo/widget-core/mixins/Themed.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/registerCustomElement.mjs\n// module id = ./node_modules/@dojo/widget-core/registerCustomElement.mjs\n// module chunks = menu-item","import global from '@dojo/shim/global';\nimport { from as arrayFrom } from '@dojo/shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '@dojo/shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode.focus();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (propName === 'focus') {\n focusNode(propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const rendered = dnode.rendered || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\n oldIndex++;\n newIndex++;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let child = oldChildren[oldIndex];\n if (child) {\n let nextIndex = oldIndex + 1;\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n if (insertBefore.rendered) {\n insertBeforeChildren.push(...insertBefore.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\n insertBeforeChildren.push(oldChildren[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/vdom.mjs\n// module id = ./node_modules/@dojo/widget-core/vdom.mjs\n// module chunks = menu-item","/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module id = ./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module chunks = menu-item","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = ./node_modules/process/browser.js\n// module chunks = menu-item","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator];\r\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/tslib/tslib.es6.js\n// module id = ./node_modules/tslib/tslib.es6.js\n// module chunks = menu-item","var 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 || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = 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// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = ./node_modules/webpack/buildin/global.js\n// module chunks = menu-item","import { v } from '@dojo/widget-core/d';\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\nimport { WidgetProperties } from '@dojo/widget-core/interfaces';\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\n\nimport * as css from './menuItem.m.css';\n\nexport interface MenuItemProperties extends WidgetProperties {\n\ttitle: string;\n\tselected?: boolean;\n\tdata?: any;\n\tonSelected?: (data: any) => void;\n}\n\n@customElement({\n\ttag: 'demo-menu-item',\n\tattributes: ['title', 'selected'],\n\tevents: ['onSelected'],\n\tproperties: ['data', 'selected']\n})\n@theme(css)\nexport class MenuItem extends ThemedMixin(WidgetBase) {\n\tprivate _onClick() {\n\t\tthis.properties.onSelected && this.properties.onSelected(this.properties.data);\n\t}\n\n\tprotected render() {\n\t\tconst { title, selected } = this.properties;\n\n\t\treturn v('li', { classes: this.theme(css.root) }, [\n\t\t\tv(\n\t\t\t\t'span',\n\t\t\t\t{\n\t\t\t\t\tclasses: this.theme([css.item, selected ? css.selected : null]),\n\t\t\t\t\tonclick: this._onClick\n\t\t\t\t},\n\t\t\t\t[title]\n\t\t\t)\n\t\t]);\n\t}\n}\n\nexport default MenuItem;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@dojo/webpack-contrib/css-module-dts-loader?type=ts&instanceName=0_menu-item!./src/menu-item/MenuItem.ts","// removed by extract-text-webpack-plugin\nmodule.exports = {\" _key\":\"test-app/menuItem\",\"root\":\"sUmUi4Sh\",\"item\":\"_2Mk6Rdqa\",\"selected\":\"_1-f3ItOh\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/menu-item/menuItem.m.css\n// module id = ./src/menu-item/menuItem.m.css\n// module chunks = menu-item"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap ea035e8f5bc7b3c31aa9","webpack:///./node_modules/@dojo/framework/core/Destroyable.mjs","webpack:///./node_modules/@dojo/framework/core/Evented.mjs","webpack:///./node_modules/@dojo/framework/core/lang.mjs","webpack:///./node_modules/@dojo/framework/has/has.mjs","webpack:///./node_modules/@dojo/framework/shim/Map.mjs","webpack:///./node_modules/@dojo/framework/shim/Promise.mjs","webpack:///./node_modules/@dojo/framework/shim/Symbol.mjs","webpack:///./node_modules/@dojo/framework/shim/WeakMap.mjs","webpack:///./node_modules/@dojo/framework/shim/array.mjs","webpack:///./node_modules/@dojo/framework/shim/global.mjs","webpack:///./node_modules/@dojo/framework/shim/number.mjs","webpack:///./node_modules/@dojo/framework/shim/object.mjs","webpack:///./node_modules/@dojo/framework/shim/string.mjs","webpack:///./node_modules/@dojo/framework/shim/support/has.mjs","webpack:///./node_modules/@dojo/framework/shim/support/queue.mjs","webpack:///./node_modules/@dojo/framework/shim/support/util.mjs","webpack:///./node_modules/@dojo/framework/widget-core/Injector.mjs","webpack:///./node_modules/@dojo/framework/widget-core/NodeHandler.mjs","webpack:///./node_modules/@dojo/framework/widget-core/Registry.mjs","webpack:///./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs","webpack:///./node_modules/@dojo/framework/widget-core/WidgetBase.mjs","webpack:///./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs","webpack:///./node_modules/@dojo/framework/widget-core/d.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/inject.mjs","webpack:///./node_modules/@dojo/framework/widget-core/diff.mjs","webpack:///./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs","webpack:///./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs","webpack:///./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs","webpack:///./node_modules/@dojo/framework/widget-core/vdom.mjs","webpack:///./node_modules/@dojo/cli-build-widget/template/custom-element.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/menu-item/MenuItem.ts","webpack:///./src/menu-item/menuItem.m.css?6a95"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","noop","__WEBPACK_IMPORTED_MODULE_1__shim_Promise__","resolve","destroyed","Error","Destroyable","[object Object]","this","handles","handle","Array","isArray","__WEBPACK_IMPORTED_MODULE_0__lang__","_handles","push","splice","indexOf","destroy","forEach","own","__webpack_exports__","regexMap","__WEBPACK_IMPORTED_MODULE_0__shim_Map__","Evented","__WEBPACK_IMPORTED_MODULE_1__Destroyable__","super","arguments","listenersMap","event","methods","type","globString","targetString","regex","has","RegExp","replace","set","test","isGlobMatch","method","listener","map","_addListener","listeners","destructor","called","createHandle","length","slice","testCache","testFunctions","testThenables","globalScope","window","global","self","staticFeatures","DojoHasEnvironment","staticCache","apply","add","feature","value","overwrite","normalizedFeature","toLowerCase","Boolean","exists","TypeError","then","isFeatureTestThenable","resolvedValue","result","document","location","process","versions","node","Map","__WEBPACK_IMPORTED_MODULE_1__global__","ShimPromise","__WEBPACK_IMPORTED_MODULE_0__global__","Promise","Symbol","wellKnown","__WEBPACK_IMPORTED_MODULE_2__support_util__","for","WeakMap","from","of","copyWithin","fill","find","findIndex","includes","__WEBPACK_IMPORTED_MODULE_4__support_util__","globalObject","Math","pow","assign","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","is","keys","getOwnPropertyDescriptors","entries","values","fromCodePoint","raw","codePointAt","endsWith","normalize","repeat","startsWith","padEnd","padStart","String","__WEBPACK_IMPORTED_MODULE_0__has_has__","every","key","Number","POSITIVE_INFINITY","e","imul","Observable","Set","getCallSite","callSite","substitutions","key1","key2","freeze","postMessage","requestAnimationFrame","setImmediate","MutationObserver","WebKitMutationObserver","example","createElement","observer","observe","attributes","style","setProperty","takeRecords","undefined","Animation","KeyframeEffect","executeTask","item","isActive","callback","getQueueHandle","enqueue","queue","addEventListener","source","data","stopPropagation","shift","queueTask","id","queueAnimationTask","rafId","bind","cancelAnimationFrame","writable","nativeFunction","target","args","Injector","__WEBPACK_IMPORTED_MODULE_0__core_Evented__","payload","_payload","invalidator","_invalidator","NodeEventType","_nodeMap","__WEBPACK_IMPORTED_MODULE_1__shim_Map__","element","emit","Widget","Projector","clear","WIDGET_BASE_TYPE","__WEBPACK_IMPORTED_MODULE_2__shim_Symbol__","isWidgetBaseConstructor","_type","Registry","__WEBPACK_IMPORTED_MODULE_3__core_Evented__","widgetLabel","action","label","_widgetRegistry","toString","__WEBPACK_IMPORTED_MODULE_0__shim_Promise__","widgetCtor","emitLoadedEvent","error","injectorFactory","_injectorRegistry","injectorItem","injector","promise","default","isWidgetConstructorDefaultExport","hasInjector","__WEBPACK_IMPORTED_MODULE_1__core_Evented__","_registry","__WEBPACK_IMPORTED_MODULE_2__Registry__","_registryWidgetLabelMap","_registryInjectorLabelMap","baseRegistry","delete","base","widget","define","defineInjector","globalPrecedence","_get","getFunctionName","labelMap","registries","registry","registeredLabels","on","decoratorMap","boundAuto","__WEBPACK_IMPORTED_MODULE_4__diff__","noBind","WidgetBase","_initialProperties","_changedPropertyKeys","_nodeHandler","__WEBPACK_IMPORTED_MODULE_6__NodeHandler__","_children","_decoratorCache","_properties","_boundRenderFunc","render","_boundInvalidate","invalidate","__WEBPACK_IMPORTED_MODULE_7__vdom__","dirty","onAttach","onDetach","nodeHandler","coreProperties","rendering","inputProperties","_runAfterConstructors","MetaType","_metaMap","cached","properties","changedPropertyKeys","instanceData","__WEBPACK_IMPORTED_MODULE_5__RegistryHandler__","originalProperties","_runBeforeProperties","registeredDiffPropertyNames","getDecorator","propertyNames","allProperties","checkedProperties","diffPropertyResults","runReactions","propertyName","previousProperty","newProperty","_bindFunctionProperty","diffFunctions","changed","executedReactions","reaction","propertyChanged","reactionRun","children","dNode","_runBeforeRenders","runAfterRenders","__WEBPACK_IMPORTED_MODULE_3__d__","decoratorKey","decoratorList","constructor","specificDecoratorList","decorators","allDecorators","instanceMap","unshift","getPrototypeOf","_buildDecoratorList","__WEBPACK_IMPORTED_MODULE_8__Registry__","_bindFunctionPropertyMap","__WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__","bindInfo","boundFunc","scope","beforeProperties","reduce","beforePropertiesFunction","beforeRenders","beforeRenderFunction","updatedRender","console","warn","afterRenders","afterRenderFunction","meta","afterRender","afterConstructors","afterConstructor","pop","browserSpecificTransitionEndEventName","browserSpecificAnimationEndEventName","initialize","determineBrowserStyleNames","runAndCleanUp","startAnimation","finishAnimation","finished","transitionEnd","removeEventListener","enter","enterAnimation","activeClass","enterAnimationActive","classList","remove","exit","exitAnimation","removeNode","exitAnimationActive","child","DOMVNODE","widgetConstructor","WNODE","tag","propertiesOrChildren","deferredPropertiesCallback","VNODE","attrs","props","diffType","isElementNode","tagName","events","domNode","text","__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__","isWNode","isVNode","__WEBPACK_IMPORTED_MODULE_0__handleDecorator__","propertyKey","addDecorator","alwaysRender","__WEBPACK_IMPORTED_MODULE_1__beforeProperties__","customElement","childType","__WEBPACK_IMPORTED_MODULE_0__registerCustomElement__","DOJO","registryFactory","__WEBPACK_IMPORTED_MODULE_1__Registry__","__customElementDescriptor","diffProperty","diffFunction","__WEBPACK_IMPORTED_MODULE_1__diff__","reactionFunction","handleDecorator","handler","descriptor","registeredInjectorsMap","__WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__","inject","getProperties","__WEBPACK_IMPORTED_MODULE_1__handleDecorator__","__WEBPACK_IMPORTED_MODULE_2__beforeProperties__","getInjector","registeredInjectors","__WEBPACK_IMPORTED_MODULE_0__Registry__","reference","ignore","isObjectOrArray","shallow","validOldProperty","validNewProperty","previousKeys","newKeys","some","ProjectorAttachState","AttachType","ProjectorMixin","Base","_root","body","_async","_projectorProperties","_projectionOptions","transitions","__WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__","root","projectorState","Detached","options","Append","_attach","Merge","Attached","async","doc","previousRoot","createDocumentFragment","__setChildren__","__setProperties__","__WEBPACK_IMPORTED_MODULE_1__core_lang__","__setCoreProperties__","_projection","childNodes","outerHTML","__WEBPACK_IMPORTED_MODULE_4__d__","_attachHandle","sync","__WEBPACK_IMPORTED_MODULE_5__vdom__","append","merge","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__","theme","__WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__","themeRegistry","themeInjector","__WEBPACK_IMPORTED_MODULE_1__Injector__","INJECTED_THEME_KEY","setInvalidator","THEME_KEY","ThemedMixin","Themed","_registeredBaseThemeKeys","_recalculateClasses","_theme","classes","_recalculateThemeClasses","className","_getThemeClass","extraClasses","themeClassName","_baseThemeClassesReverseLookup","resultClassNames","_registeredBaseTheme","join","baseThemes","finalBaseTheme","baseTheme","_a","currentClassNames","baseClass","themeKey","__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__","__WEBPACK_IMPORTED_MODULE_5__diff__","__WEBPACK_IMPORTED_MODULE_2__decorators_inject__","CustomElementChildType","DomToWidgetWrapper","__WEBPACK_IMPORTED_MODULE_1__WidgetBase__","__WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__","create","WidgetConstructor","attributeMap","attributeName","HTMLElement","_eventProperties","_initialised","domProperties","_attributesToProperties","filteredPropertyName","_getProperty","_setProperty","eventName","_getEventProperty","_setEventProperty","eventCallback","dispatchEvent","CustomEvent","bubbles","detail","defineProperties","TEXT","__WEBPACK_IMPORTED_MODULE_3__shim_array__","childNode","_render","_childConnected","widgetProperties","renderChildren","__children__","themeContext","__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__","_getTheme","__WEBPACK_IMPORTED_MODULE_5__shim_global__","__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__","_projector","setProperties","dojoce","themes","parentNode","filter","Child","isWidget","__properties__","oldValue","getAttribute","observedAttributes","register","customElements","NAMESPACE_SVG","NAMESPACE_W3","NAMESPACE_XLINK","emptyArray","nodeOperations","widgetInstanceMap","__WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__","nextSiblingMap","projectorStateMap","same","dnode1","dnode2","__WEBPACK_IMPORTED_MODULE_2__d__","instance","missingTransition","checkStyleValue","styleValue","updateEvent","currentValue","projectionOptions","previousValue","projectorInstance","eventMap","nodeMap","previousEvent","evt","addClasses","classNames","split","removeClasses","nodeOperation","propName","propValue","deferredRenderCallbacks","removeOrphanedEvents","previousProperties","onlyEvents","isEvent","substr","updateAttribute","attrName","attrValue","namespace","setAttributeNS","removeAttribute","setAttribute","updateAttributes","previousAttributes","attrNames","attrCount","updateProperties","includesEventsAndAttributes","propertiesUpdated","propNames","propCount","previousClasses","currentClasses","newClasses","previousClassName","classIndex","styleNames","styleCount","j","styleName","newStyleValue","styleApplyer","domValue","lastIndexOf","findIndexOfChild","sameAs","start","toInternalWNode","rendered","filterAndDecorateChildren","nodeAdded","dnode","nodeToRemove","pointerEvents","removeDomNode","removeChild","checkDistinguishable","indexToCheck","parentInstance","nodeIdentifier","parentName","updateChildren","parentVNode","siblings","oldChildren","newChildren","oldChildrenLength","newChildrenLength","depth","oldIndex","newIndex","textUpdated","oldChild","newChild","inserted","addDeferredProperties","updateDom","findOldIndex","addChild","insertBeforeDomNode","childrenArray","nextIndex","insertBeforeChildren","insertBefore","parentElement","createDom","afterRenderCallbacks","childToRemove","addChildren","__WEBPACK_IMPORTED_MODULE_1__shim_array__","nextSiblings","domElement","toUpperCase","initPropertiesAndChildren","parentInstanceData","__WEBPACK_IMPORTED_MODULE_3__Registry__","renderQueue","scheduleRender","__render__","filteredRendered","addRoot","mergeElement","ownerDocument","createElementNS","appendChild","newDomNode","createTextNode","replaceChild","previous","oldNextSiblings","previousRendered","updated","current","newProperties","buildPreviousProperties","updateAnimation","vnode","decoratedDeferredProperties","runDeferredRenderCallbacks","__WEBPACK_IMPORTED_MODULE_0__shim_global__","runAfterRenderCallbacks","requestIdleCallback","setTimeout","renderScheduled","renders","sort","a","b","previouslyRendered","dom","finalProjectorOptions","projectorOptions","defaults","getProjectionOptions","rootNode","projection","widgetFactory","registerCustomElement","defaultExport","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","nextTick","title","browser","env","argv","version","addListener","once","off","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","t","desc","r","Reflect","decorate","setPrototypeOf","g","Function","eval","MenuItem","__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__","__WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__","onSelected","selected","__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__","__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__","onclick","_onClick","__WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__"," _key"],"mappings":"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","file":"menu-item-1.0.0.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ea035e8f5bc7b3c31aa9","import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/Destroyable.mjs\n// module id = ./node_modules/@dojo/framework/core/Destroyable.mjs\n// module chunks = menu-item","import Map from '../shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n [...methods].forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/Evented.mjs\n// module id = ./node_modules/@dojo/framework/core/Evented.mjs\n// module chunks = menu-item","import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/lang.mjs\n// module id = ./node_modules/@dojo/framework/core/lang.mjs\n// module chunks = menu-item","function isFeatureTestThenable(value) {\n return value && value.then;\n}\n/**\n * A cache of results of feature tests\n */\nexport const testCache = {};\n/**\n * A cache of the un-resolved feature tests\n */\nexport const testFunctions = {};\n/**\n * A cache of unresolved thenables (probably promises)\n * @type {{}}\n */\nconst testThenables = {};\n/**\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\n */\nconst globalScope = (function () {\n /* istanbul ignore else */\n if (typeof window !== 'undefined') {\n // Browsers\n return window;\n }\n else if (typeof global !== 'undefined') {\n // Node\n return global;\n }\n else if (typeof self !== 'undefined') {\n // Web workers\n return self;\n }\n /* istanbul ignore next */\n return {};\n})();\n/* Grab the staticFeatures if there are available */\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\n/* Cleaning up the DojoHasEnviornment */\nif ('DojoHasEnvironment' in globalScope) {\n delete globalScope.DojoHasEnvironment;\n}\n/**\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\n * returns a map.\n *\n * @param value The value to guard for\n */\nfunction isStaticFeatureFunction(value) {\n return typeof value === 'function';\n}\n/**\n * The cache of asserted features that were available in the global scope when the\n * module loaded\n */\nconst staticCache = staticFeatures\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\n : {}; /* Providing an empty cache, if none was in the environment\n\n/**\n* AMD plugin function.\n*\n* Conditional loads modules based on a has feature test value.\n*\n* @param resourceId Gives the resolved module id to load.\n* @param require The loader require function with respect to the module that contained the plugin resource in its\n* dependency list.\n* @param load Callback to loader that consumes result of plugin demand.\n*/\nexport function load(resourceId, require, load, config) {\n resourceId ? require([resourceId], load) : load();\n}\n/**\n * AMD plugin function.\n *\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\n * value(s).\n *\n * @param resourceId The id of the module\n * @param normalize Resolves a relative module id into an absolute module id\n */\nexport function normalize(resourceId, normalize) {\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\n let i = 0;\n function get(skip) {\n const term = tokens[i++];\n if (term === ':') {\n // empty string module name, resolves to null\n return null;\n }\n else {\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\n if (tokens[i++] === '?') {\n if (!skip && has(term)) {\n // matched the feature, get the first value from the options\n return get();\n }\n else {\n // did not match, get the second value, passing over the first\n get(true);\n return get(skip);\n }\n }\n // a module\n return term;\n }\n }\n const id = get();\n return id && normalize(id);\n}\n/**\n * Check if a feature has already been registered\n *\n * @param feature the name of the feature\n */\nexport function exists(feature) {\n const normalizedFeature = feature.toLowerCase();\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\n}\n/**\n * Register a new test for a named feature.\n *\n * @example\n * has.add('dom-addeventlistener', !!document.addEventListener);\n *\n * @example\n * has.add('touch-events', function () {\n * return 'ontouchstart' in document\n * });\n *\n * @param feature the name of the feature\n * @param value the value reported of the feature, or a function that will be executed once on first test\n * @param overwrite if an existing value should be overwritten. Defaults to false.\n */\nexport function add(feature, value, overwrite = false) {\n const normalizedFeature = feature.toLowerCase();\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\n }\n if (typeof value === 'function') {\n testFunctions[normalizedFeature] = value;\n }\n else if (isFeatureTestThenable(value)) {\n testThenables[feature] = value.then((resolvedValue) => {\n testCache[feature] = resolvedValue;\n delete testThenables[feature];\n }, () => {\n delete testThenables[feature];\n });\n }\n else {\n testCache[normalizedFeature] = value;\n delete testFunctions[normalizedFeature];\n }\n}\n/**\n * Return the current value of a named feature.\n *\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\n */\nexport default function has(feature) {\n let result;\n const normalizedFeature = feature.toLowerCase();\n if (normalizedFeature in staticCache) {\n result = staticCache[normalizedFeature];\n }\n else if (testFunctions[normalizedFeature]) {\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\n delete testFunctions[normalizedFeature];\n }\n else if (normalizedFeature in testCache) {\n result = testCache[normalizedFeature];\n }\n else if (feature in testThenables) {\n return false;\n }\n else {\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\n }\n return result;\n}\n/*\n * Out of the box feature tests\n */\n/* Environments */\n/* Used as a value to provide a debug only code path */\nadd('debug', true);\n/* Detects if the environment is \"browser like\" */\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\n/* Detects if the environment appears to be NodeJS */\nadd('host-node', function () {\n if (typeof process === 'object' && process.versions && process.versions.node) {\n return process.versions.node;\n }\n});\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/has/has.mjs\n// module id = ./node_modules/@dojo/framework/has/has.mjs\n// module chunks = menu-item","import { isArrayLike, ShimIterator } from './iterator';\nimport global from './global';\nimport { is as objectIs } from './object';\nimport has from './support/has';\nimport './Symbol';\nexport let Map = global.Map;\nif (!true) {\n Map = (_a = class Map {\n constructor(iterable) {\n this._keys = [];\n this._values = [];\n this[Symbol.toStringTag] = 'Map';\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const value = iterable[i];\n this.set(value[0], value[1]);\n }\n }\n else {\n for (const value of iterable) {\n this.set(value[0], value[1]);\n }\n }\n }\n }\n /**\n * An alternative to Array.prototype.indexOf using Object.is\n * to check for equality. See http://mzl.la/1zuKO2V\n */\n _indexOfKey(keys, key) {\n for (let i = 0, length = keys.length; i < length; i++) {\n if (objectIs(keys[i], key)) {\n return i;\n }\n }\n return -1;\n }\n get size() {\n return this._keys.length;\n }\n clear() {\n this._keys.length = this._values.length = 0;\n }\n delete(key) {\n const index = this._indexOfKey(this._keys, key);\n if (index < 0) {\n return false;\n }\n this._keys.splice(index, 1);\n this._values.splice(index, 1);\n return true;\n }\n entries() {\n const values = this._keys.map((key, i) => {\n return [key, this._values[i]];\n });\n return new ShimIterator(values);\n }\n forEach(callback, context) {\n const keys = this._keys;\n const values = this._values;\n for (let i = 0, length = keys.length; i < length; i++) {\n callback.call(context, values[i], keys[i], this);\n }\n }\n get(key) {\n const index = this._indexOfKey(this._keys, key);\n return index < 0 ? undefined : this._values[index];\n }\n has(key) {\n return this._indexOfKey(this._keys, key) > -1;\n }\n keys() {\n return new ShimIterator(this._keys);\n }\n set(key, value) {\n let index = this._indexOfKey(this._keys, key);\n index = index < 0 ? this._keys.length : index;\n this._keys[index] = key;\n this._values[index] = value;\n return this;\n }\n values() {\n return new ShimIterator(this._values);\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n },\n _a[Symbol.species] = _a,\n _a);\n}\nexport default Map;\nvar _a;\n//# sourceMappingURL=Map.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Map.mjs\n// module id = ./node_modules/@dojo/framework/shim/Map.mjs\n// module chunks = menu-item","import global from './global';\nimport { queueMicroTask } from './support/queue';\nimport './Symbol';\nimport has from './support/has';\nexport let ShimPromise = global.Promise;\nexport const isThenable = function isThenable(value) {\n return value && typeof value.then === 'function';\n};\nif (!true) {\n global.Promise = ShimPromise = (_a = class Promise {\n /**\n * Creates a new Promise.\n *\n * @constructor\n *\n * @param executor\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\n * starting the asynchronous operation when it is invoked.\n *\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\n * successfully, or the `reject` function when the operation fails.\n */\n constructor(executor) {\n /**\n * The current state of this promise.\n */\n this.state = 1 /* Pending */;\n this[Symbol.toStringTag] = 'Promise';\n /**\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\n */\n let isChained = false;\n /**\n * Whether or not this promise is in a resolved state.\n */\n const isResolved = () => {\n return this.state !== 1 /* Pending */ || isChained;\n };\n /**\n * Callbacks that should be invoked once the asynchronous operation has completed.\n */\n let callbacks = [];\n /**\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\n * enqueues callbacks for execution on the next event loop turn.\n */\n let whenFinished = function (callback) {\n if (callbacks) {\n callbacks.push(callback);\n }\n };\n /**\n * Settles this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const settle = (newState, value) => {\n // A promise can only be settled once.\n if (this.state !== 1 /* Pending */) {\n return;\n }\n this.state = newState;\n this.resolvedValue = value;\n whenFinished = queueMicroTask;\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\n // wait an extra turn.\n if (callbacks && callbacks.length > 0) {\n queueMicroTask(function () {\n if (callbacks) {\n let count = callbacks.length;\n for (let i = 0; i < count; ++i) {\n callbacks[i].call(null);\n }\n callbacks = null;\n }\n });\n }\n };\n /**\n * Resolves this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const resolve = (newState, value) => {\n if (isResolved()) {\n return;\n }\n if (isThenable(value)) {\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\n isChained = true;\n }\n else {\n settle(newState, value);\n }\n };\n this.then = (onFulfilled, onRejected) => {\n return new Promise((resolve, reject) => {\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\n // event loop.\n whenFinished(() => {\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\n if (typeof callback === 'function') {\n try {\n resolve(callback(this.resolvedValue));\n }\n catch (error) {\n reject(error);\n }\n }\n else if (this.state === 2 /* Rejected */) {\n reject(this.resolvedValue);\n }\n else {\n resolve(this.resolvedValue);\n }\n });\n });\n };\n try {\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\n }\n catch (error) {\n settle(2 /* Rejected */, error);\n }\n }\n static all(iterable) {\n return new this(function (resolve, reject) {\n const values = [];\n let complete = 0;\n let total = 0;\n let populating = true;\n function fulfill(index, value) {\n values[index] = value;\n ++complete;\n finish();\n }\n function finish() {\n if (populating || complete < total) {\n return;\n }\n resolve(values);\n }\n function processItem(index, item) {\n ++total;\n if (isThenable(item)) {\n // If an item Promise rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(fulfill.bind(null, index), reject);\n }\n else {\n Promise.resolve(item).then(fulfill.bind(null, index));\n }\n }\n let i = 0;\n for (const value of iterable) {\n processItem(i, value);\n i++;\n }\n populating = false;\n finish();\n });\n }\n static race(iterable) {\n return new this(function (resolve, reject) {\n for (const item of iterable) {\n if (item instanceof Promise) {\n // If a Promise item rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(resolve, reject);\n }\n else {\n Promise.resolve(item).then(resolve);\n }\n }\n });\n }\n static reject(reason) {\n return new this(function (resolve, reject) {\n reject(reason);\n });\n }\n static resolve(value) {\n return new this(function (resolve) {\n resolve(value);\n });\n }\n catch(onRejected) {\n return this.then(undefined, onRejected);\n }\n },\n _a[Symbol.species] = ShimPromise,\n _a);\n}\nexport default ShimPromise;\nvar _a;\n//# sourceMappingURL=Promise.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Promise.mjs\n// module id = ./node_modules/@dojo/framework/shim/Promise.mjs\n// module chunks = menu-item","import has from './support/has';\nimport global from './global';\nimport { getValueDescriptor } from './support/util';\nexport let Symbol = global.Symbol;\nif (!true) {\n /**\n * Throws if the value is not a symbol, used internally within the Shim\n * @param {any} value The value to check\n * @return {symbol} Returns the symbol or throws\n */\n const validateSymbol = function validateSymbol(value) {\n if (!isSymbol(value)) {\n throw new TypeError(value + ' is not a symbol');\n }\n return value;\n };\n const defineProperties = Object.defineProperties;\n const defineProperty = Object.defineProperty;\n const create = Object.create;\n const objPrototype = Object.prototype;\n const globalSymbols = {};\n const getSymbolName = (function () {\n const created = create(null);\n return function (desc) {\n let postfix = 0;\n let name;\n while (created[String(desc) + (postfix || '')]) {\n ++postfix;\n }\n desc += String(postfix || '');\n created[desc] = true;\n name = '@@' + desc;\n // FIXME: Temporary guard until the duplicate execution when testing can be\n // pinned down.\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\n defineProperty(objPrototype, name, {\n set: function (value) {\n defineProperty(this, name, getValueDescriptor(value));\n }\n });\n }\n return name;\n };\n })();\n const InternalSymbol = function Symbol(description) {\n if (this instanceof InternalSymbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n return Symbol(description);\n };\n Symbol = global.Symbol = function Symbol(description) {\n if (this instanceof Symbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n const sym = Object.create(InternalSymbol.prototype);\n description = description === undefined ? '' : String(description);\n return defineProperties(sym, {\n __description__: getValueDescriptor(description),\n __name__: getValueDescriptor(getSymbolName(description))\n });\n };\n /* Decorate the Symbol function with the appropriate properties */\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\n if (globalSymbols[key]) {\n return globalSymbols[key];\n }\n return (globalSymbols[key] = Symbol(String(key)));\n }));\n defineProperties(Symbol, {\n keyFor: getValueDescriptor(function (sym) {\n let key;\n validateSymbol(sym);\n for (key in globalSymbols) {\n if (globalSymbols[key] === sym) {\n return key;\n }\n }\n }),\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\n match: getValueDescriptor(Symbol.for('match'), false, false),\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\n search: getValueDescriptor(Symbol.for('search'), false, false),\n species: getValueDescriptor(Symbol.for('species'), false, false),\n split: getValueDescriptor(Symbol.for('split'), false, false),\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\n });\n /* Decorate the InternalSymbol object */\n defineProperties(InternalSymbol.prototype, {\n constructor: getValueDescriptor(Symbol),\n toString: getValueDescriptor(function () {\n return this.__name__;\n }, false, false)\n });\n /* Decorate the Symbol.prototype */\n defineProperties(Symbol.prototype, {\n toString: getValueDescriptor(function () {\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\n }),\n valueOf: getValueDescriptor(function () {\n return validateSymbol(this);\n })\n });\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\n return validateSymbol(this);\n }));\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\n}\n/**\n * A custom guard function that determines if an object is a symbol or not\n * @param {any} value The value to check to see if it is a symbol or not\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\n */\nexport function isSymbol(value) {\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\n}\n/**\n * Fill any missing well known symbols if the native Symbol is missing them\n */\n[\n 'hasInstance',\n 'isConcatSpreadable',\n 'iterator',\n 'species',\n 'replace',\n 'search',\n 'split',\n 'match',\n 'toPrimitive',\n 'toStringTag',\n 'unscopables',\n 'observable'\n].forEach((wellKnown) => {\n if (!Symbol[wellKnown]) {\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\n }\n});\nexport default Symbol;\n//# sourceMappingURL=Symbol.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Symbol.mjs\n// module id = ./node_modules/@dojo/framework/shim/Symbol.mjs\n// module chunks = menu-item","import global from './global';\nimport { isArrayLike } from './iterator';\nimport has from './support/has';\nimport './Symbol';\nexport let WeakMap = global.WeakMap;\nif (!true) {\n const DELETED = {};\n const getUID = function getUID() {\n return Math.floor(Math.random() * 100000000);\n };\n const generateName = (function () {\n let startId = Math.floor(Date.now() % 100000000);\n return function generateName() {\n return '__wm' + getUID() + (startId++ + '__');\n };\n })();\n WeakMap = class WeakMap {\n constructor(iterable) {\n this[Symbol.toStringTag] = 'WeakMap';\n this._name = generateName();\n this._frozenEntries = [];\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const item = iterable[i];\n this.set(item[0], item[1]);\n }\n }\n else {\n for (const [key, value] of iterable) {\n this.set(key, value);\n }\n }\n }\n }\n _getFrozenEntryIndex(key) {\n for (let i = 0; i < this._frozenEntries.length; i++) {\n if (this._frozenEntries[i].key === key) {\n return i;\n }\n }\n return -1;\n }\n delete(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n entry.value = DELETED;\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n this._frozenEntries.splice(frozenIndex, 1);\n return true;\n }\n return false;\n }\n get(key) {\n if (key === undefined || key === null) {\n return undefined;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n return entry.value;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return this._frozenEntries[frozenIndex].value;\n }\n }\n has(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return true;\n }\n return false;\n }\n set(key, value) {\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\n throw new TypeError('Invalid value used as weak map key');\n }\n let entry = key[this._name];\n if (!entry || entry.key !== key) {\n entry = Object.create(null, {\n key: { value: key }\n });\n if (Object.isFrozen(key)) {\n this._frozenEntries.push(entry);\n }\n else {\n Object.defineProperty(key, this._name, {\n value: entry\n });\n }\n }\n entry.value = value;\n return this;\n }\n };\n}\nexport default WeakMap;\n//# sourceMappingURL=WeakMap.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/WeakMap.mjs\n// module id = ./node_modules/@dojo/framework/shim/WeakMap.mjs\n// module chunks = menu-item","import global from './global';\nimport { isArrayLike, isIterable } from './iterator';\nimport { MAX_SAFE_INTEGER } from './number';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\nexport let from;\n/**\n * Creates a new array from the function parameters.\n *\n * @param arguments Any number of arguments for the array\n * @return An array from the given arguments\n */\nexport let of;\n/* ES6 Array instance methods */\n/**\n * Copies data internally within an array or array-like object.\n *\n * @param target The target array-like object\n * @param offset The index to start copying values to; if negative, it counts backwards from length\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\n * @return The target\n */\nexport let copyWithin;\n/**\n * Fills elements of an array-like object with the specified value.\n *\n * @param target The target to fill\n * @param value The value to fill each element of the target with\n * @param start The first index to fill\n * @param end The (exclusive) index at which to stop filling\n * @return The filled target\n */\nexport let fill;\n/**\n * Finds and returns the first instance matching the callback or undefined if one is not found.\n *\n * @param target An array-like object\n * @param callback A function returning if the current value matches a criteria\n * @param thisArg The execution context for the find function\n * @return The first element matching the callback, or undefined if one does not exist\n */\nexport let find;\n/**\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\n * or -1 if no values satisfy it.\n *\n * @param target An array-like object\n * @param callback A function returning true if the current value satisfies its criteria\n * @param thisArg The execution context for the find function\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\n */\nexport let findIndex;\n/* ES7 Array instance methods */\n/**\n * Determines whether an array includes a given value\n *\n * @param target the target array-like object\n * @param searchElement the item to search for\n * @param fromIndex the starting index to search from\n * @return `true` if the array includes the element, otherwise `false`\n */\nexport let includes;\nif (true && true) {\n from = global.Array.from;\n of = global.Array.of;\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\n fill = wrapNative(global.Array.prototype.fill);\n find = wrapNative(global.Array.prototype.find);\n findIndex = wrapNative(global.Array.prototype.findIndex);\n}\nelse {\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n if (isNaN(length)) {\n return 0;\n }\n length = Number(length);\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n /**\n * From ES6 7.1.4 ToInteger()\n *\n * @param value A value to convert\n * @return An integer\n */\n const toInteger = function toInteger(value) {\n value = Number(value);\n if (isNaN(value)) {\n return 0;\n }\n if (value === 0 || !isFinite(value)) {\n return value;\n }\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\n };\n /**\n * Normalizes an offset against a given length, wrapping it if negative.\n *\n * @param value The original offset\n * @param length The total length to normalize against\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\n */\n const normalizeOffset = function normalizeOffset(value, length) {\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\n };\n from = function from(arrayLike, mapFunction, thisArg) {\n if (arrayLike == null) {\n throw new TypeError('from: requires an array-like object');\n }\n if (mapFunction && thisArg) {\n mapFunction = mapFunction.bind(thisArg);\n }\n /* tslint:disable-next-line:variable-name */\n const Constructor = this;\n const length = toLength(arrayLike.length);\n // Support extension\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\n return array;\n }\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\n // with the iteration on IE when using a NaN array length.\n if (isArrayLike(arrayLike)) {\n if (length === 0) {\n return [];\n }\n for (let i = 0; i < arrayLike.length; i++) {\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\n }\n }\n else {\n let i = 0;\n for (const value of arrayLike) {\n array[i] = mapFunction ? mapFunction(value, i) : value;\n i++;\n }\n }\n if (arrayLike.length !== undefined) {\n array.length = length;\n }\n return array;\n };\n of = function of(...items) {\n return Array.prototype.slice.call(items);\n };\n copyWithin = function copyWithin(target, offset, start, end) {\n if (target == null) {\n throw new TypeError('copyWithin: target must be an array-like object');\n }\n const length = toLength(target.length);\n offset = normalizeOffset(toInteger(offset), length);\n start = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n let count = Math.min(end - start, length - offset);\n let direction = 1;\n if (offset > start && offset < start + count) {\n direction = -1;\n start += count - 1;\n offset += count - 1;\n }\n while (count > 0) {\n if (start in target) {\n target[offset] = target[start];\n }\n else {\n delete target[offset];\n }\n offset += direction;\n start += direction;\n count--;\n }\n return target;\n };\n fill = function fill(target, value, start, end) {\n const length = toLength(target.length);\n let i = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n while (i < end) {\n target[i++] = value;\n }\n return target;\n };\n find = function find(target, callback, thisArg) {\n const index = findIndex(target, callback, thisArg);\n return index !== -1 ? target[index] : undefined;\n };\n findIndex = function findIndex(target, callback, thisArg) {\n const length = toLength(target.length);\n if (!callback) {\n throw new TypeError('find: second argument must be a function');\n }\n if (thisArg) {\n callback = callback.bind(thisArg);\n }\n for (let i = 0; i < length; i++) {\n if (callback(target[i], i, target)) {\n return i;\n }\n }\n return -1;\n };\n}\nif (true) {\n includes = wrapNative(global.Array.prototype.includes);\n}\nelse {\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n length = Number(length);\n if (isNaN(length)) {\n return 0;\n }\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n includes = function includes(target, searchElement, fromIndex = 0) {\n let len = toLength(target.length);\n for (let i = fromIndex; i < len; ++i) {\n const currentElement = target[i];\n if (searchElement === currentElement ||\n (searchElement !== searchElement && currentElement !== currentElement)) {\n return true;\n }\n }\n return false;\n };\n}\n//# sourceMappingURL=array.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/array.mjs\n// module id = ./node_modules/@dojo/framework/shim/array.mjs\n// module chunks = menu-item","const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/global.mjs\n// module id = ./node_modules/@dojo/framework/shim/global.mjs\n// module chunks = menu-item","import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/number.mjs\n// module id = ./node_modules/@dojo/framework/shim/number.mjs\n// module chunks = menu-item","import global from './global';\nimport has from './support/has';\nimport { isSymbol } from './Symbol';\nexport let assign;\n/**\n * Gets the own property descriptor of the specified object.\n * An own property descriptor is one that is defined directly on the object and is not\n * inherited from the object's prototype.\n * @param o Object that contains the property.\n * @param p Name of the property.\n */\nexport let getOwnPropertyDescriptor;\n/**\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\n * @param o Object that contains the own properties.\n */\nexport let getOwnPropertyNames;\n/**\n * Returns an array of all symbol properties found directly on object o.\n * @param o Object to retrieve the symbols from.\n */\nexport let getOwnPropertySymbols;\n/**\n * Returns true if the values are the same value, false otherwise.\n * @param value1 The first value.\n * @param value2 The second value.\n */\nexport let is;\n/**\n * Returns the names of the enumerable properties and methods of an object.\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n */\nexport let keys;\n/* ES7 Object static methods */\nexport let getOwnPropertyDescriptors;\nexport let entries;\nexport let values;\nif (true) {\n const globalObject = global.Object;\n assign = globalObject.assign;\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\n is = globalObject.is;\n keys = globalObject.keys;\n}\nelse {\n keys = function symbolAwareKeys(o) {\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n assign = function assign(target, ...sources) {\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const to = Object(target);\n sources.forEach((nextSource) => {\n if (nextSource) {\n // Skip over if undefined or null\n keys(nextSource).forEach((nextKey) => {\n to[nextKey] = nextSource[nextKey];\n });\n }\n });\n return to;\n };\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\n if (isSymbol(prop)) {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n else {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n };\n getOwnPropertyNames = function getOwnPropertyNames(o) {\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n return Object.getOwnPropertyNames(o)\n .filter((key) => Boolean(key.match(/^@@.+/)))\n .map((key) => Symbol.for(key.substring(2)));\n };\n is = function is(value1, value2) {\n if (value1 === value2) {\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\n }\n return value1 !== value1 && value2 !== value2; // NaN\n };\n}\nif (true) {\n const globalObject = global.Object;\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\n entries = globalObject.entries;\n values = globalObject.values;\n}\nelse {\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\n return getOwnPropertyNames(o).reduce((previous, key) => {\n previous[key] = getOwnPropertyDescriptor(o, key);\n return previous;\n }, {});\n };\n entries = function entries(o) {\n return keys(o).map((key) => [key, o[key]]);\n };\n values = function values(o) {\n return keys(o).map((key) => o[key]);\n };\n}\n//# sourceMappingURL=object.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/object.mjs\n// module id = ./node_modules/@dojo/framework/shim/object.mjs\n// module chunks = menu-item","import global from './global';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\n/**\n * The minimum location of high surrogates\n */\nexport const HIGH_SURROGATE_MIN = 0xd800;\n/**\n * The maximum location of high surrogates\n */\nexport const HIGH_SURROGATE_MAX = 0xdbff;\n/**\n * The minimum location of low surrogates\n */\nexport const LOW_SURROGATE_MIN = 0xdc00;\n/**\n * The maximum location of low surrogates\n */\nexport const LOW_SURROGATE_MAX = 0xdfff;\n/* ES6 static methods */\n/**\n * Return the String value whose elements are, in order, the elements in the List elements.\n * If length is 0, the empty string is returned.\n * @param codePoints The code points to generate the string\n */\nexport let fromCodePoint;\n/**\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\n * as such the first argument will be a well formed template call site object and the rest\n * parameter will contain the substitution values.\n * @param template A well-formed template string call site representation.\n * @param substitutions A set of substitution values.\n */\nexport let raw;\n/* ES6 instance methods */\n/**\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\n * value of the UTF-16 encoded code point starting at the string element at position pos in\n * the String resulting from converting this object to a String.\n * If there is no element at that position, the result is undefined.\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\n */\nexport let codePointAt;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * endPosition – length(this). Otherwise returns false.\n */\nexport let endsWith;\n/**\n * Returns true if searchString appears as a substring of the result of converting this\n * object to a String, at one or more positions that are\n * greater than or equal to position; otherwise, returns false.\n * @param target The target string\n * @param searchString search string\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\n */\nexport let includes;\n/**\n * Returns the String value result of normalizing the string into the normalization form\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\n * @param target The target string\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\n * is \"NFC\"\n */\nexport let normalize;\n/**\n * Returns a String value that is made from count copies appended together. If count is 0,\n * T is the empty String is returned.\n * @param count number of copies to append\n */\nexport let repeat;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * position. Otherwise returns false.\n */\nexport let startsWith;\n/* ES7 instance methods */\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the end (right) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padEnd;\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the start (left) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padStart;\nif (true && true) {\n fromCodePoint = global.String.fromCodePoint;\n raw = global.String.raw;\n codePointAt = wrapNative(global.String.prototype.codePointAt);\n endsWith = wrapNative(global.String.prototype.endsWith);\n includes = wrapNative(global.String.prototype.includes);\n normalize = wrapNative(global.String.prototype.normalize);\n repeat = wrapNative(global.String.prototype.repeat);\n startsWith = wrapNative(global.String.prototype.startsWith);\n}\nelse {\n /**\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\n * Used by startsWith, includes, and endsWith.\n *\n * @return Normalized position.\n */\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\n if (text == null) {\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\n }\n const length = text.length;\n position = position !== position ? (isEnd ? length : 0) : position;\n return [text, String(search), Math.min(Math.max(position, 0), length)];\n };\n fromCodePoint = function fromCodePoint(...codePoints) {\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\n const length = arguments.length;\n if (!length) {\n return '';\n }\n const fromCharCode = String.fromCharCode;\n const MAX_SIZE = 0x4000;\n let codeUnits = [];\n let index = -1;\n let result = '';\n while (++index < length) {\n let codePoint = Number(arguments[index]);\n // Code points must be finite integers within the valid range\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\n if (!isValid) {\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint);\n }\n else {\n // Astral code point; split in surrogate halves\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += fromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n raw = function raw(callSite, ...substitutions) {\n let rawStrings = callSite.raw;\n let result = '';\n let numSubstitutions = substitutions.length;\n if (callSite == null || callSite.raw == null) {\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\n }\n for (let i = 0, length = rawStrings.length; i < length; i++) {\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\n }\n return result;\n };\n codePointAt = function codePointAt(text, position = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\n if (text == null) {\n throw new TypeError('string.codePointAt requries a valid string.');\n }\n const length = text.length;\n if (position !== position) {\n position = 0;\n }\n if (position < 0 || position >= length) {\n return undefined;\n }\n // Get the first code unit\n const first = text.charCodeAt(position);\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n const second = text.charCodeAt(position + 1);\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\n }\n }\n return first;\n };\n endsWith = function endsWith(text, search, endPosition) {\n if (endPosition == null) {\n endPosition = text.length;\n }\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\n const start = endPosition - search.length;\n if (start < 0) {\n return false;\n }\n return text.slice(start, endPosition) === search;\n };\n includes = function includes(text, search, position = 0) {\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\n return text.indexOf(search, position) !== -1;\n };\n repeat = function repeat(text, count = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\n if (text == null) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (count !== count) {\n count = 0;\n }\n if (count < 0 || count === Infinity) {\n throw new RangeError('string.repeat requires a non-negative finite count.');\n }\n let result = '';\n while (count) {\n if (count % 2) {\n result += text;\n }\n if (count > 1) {\n text += text;\n }\n count >>= 1;\n }\n return result;\n };\n startsWith = function startsWith(text, search, position = 0) {\n search = String(search);\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\n const end = position + search.length;\n if (end > text.length) {\n return false;\n }\n return text.slice(position, end) === search;\n };\n}\nif (true) {\n padEnd = wrapNative(global.String.prototype.padEnd);\n padStart = wrapNative(global.String.prototype.padStart);\n}\nelse {\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padEnd requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText +=\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length);\n }\n return strText;\n };\n padStart = function padStart(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padStart requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText =\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length) +\n strText;\n }\n return strText;\n };\n}\n//# sourceMappingURL=string.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/string.mjs\n// module id = ./node_modules/@dojo/framework/shim/string.mjs\n// module chunks = menu-item","import has, { add } from '../../has/has';\nimport global from '../global';\nexport default has;\nexport * from '../../has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/has.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/has.mjs\n// module chunks = menu-item","import global from '../global';\nimport has from './has';\nfunction executeTask(item) {\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n}\nfunction getQueueHandle(item, destructor) {\n return {\n destroy: function () {\n this.destroy = function () { };\n item.isActive = false;\n item.callback = null;\n if (destructor) {\n destructor();\n }\n }\n };\n}\nlet checkMicroTaskQueue;\nlet microTasks;\n/**\n * Schedules a callback to the macrotask queue.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueTask = (function () {\n let destructor;\n let enqueue;\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\n if (true) {\n const queue = [];\n global.addEventListener('message', function (event) {\n // Confirm that the event was triggered by the current window and by this particular implementation.\n if (event.source === global && event.data === 'dojo-queue-message') {\n event.stopPropagation();\n if (queue.length) {\n executeTask(queue.shift());\n }\n }\n });\n enqueue = function (item) {\n queue.push(item);\n global.postMessage('dojo-queue-message', '*');\n };\n }\n else if (false) {\n destructor = global.clearImmediate;\n enqueue = function (item) {\n return setImmediate(executeTask.bind(null, item));\n };\n }\n else {\n destructor = global.clearTimeout;\n enqueue = function (item) {\n return setTimeout(executeTask.bind(null, item), 0);\n };\n }\n function queueTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const id = enqueue(item);\n return getQueueHandle(item, destructor &&\n function () {\n destructor(id);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueTask(callback);\n };\n})();\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\nif (!true) {\n let isMicroTaskQueued = false;\n microTasks = [];\n checkMicroTaskQueue = function () {\n if (!isMicroTaskQueued) {\n isMicroTaskQueued = true;\n queueTask(function () {\n isMicroTaskQueued = false;\n if (microTasks.length) {\n let item;\n while ((item = microTasks.shift())) {\n executeTask(item);\n }\n }\n });\n }\n };\n}\n/**\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\n *\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueAnimationTask = (function () {\n if (!true) {\n return queueTask;\n }\n function queueAnimationTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\n return getQueueHandle(item, function () {\n cancelAnimationFrame(rafId);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueAnimationTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueAnimationTask(callback);\n };\n})();\n/**\n * Schedules a callback to the microtask queue.\n *\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\n * registered with `queueTask` or `queueAnimationTask`.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport let queueMicroTask = (function () {\n let enqueue;\n if (false) {\n enqueue = function (item) {\n global.process.nextTick(executeTask.bind(null, item));\n };\n }\n else if (true) {\n enqueue = function (item) {\n global.Promise.resolve(item).then(executeTask);\n };\n }\n else if (true) {\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const node = document.createElement('div');\n const queue = [];\n const observer = new HostMutationObserver(function () {\n while (queue.length > 0) {\n const item = queue.shift();\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n }\n });\n observer.observe(node, { attributes: true });\n enqueue = function (item) {\n queue.push(item);\n node.setAttribute('queueStatus', '1');\n };\n }\n else {\n enqueue = function (item) {\n checkMicroTaskQueue();\n microTasks.push(item);\n };\n }\n return function (callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n enqueue(item);\n return getQueueHandle(item);\n };\n})();\n//# sourceMappingURL=queue.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/queue.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/queue.mjs\n// module chunks = menu-item","/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/util.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/util.mjs\n// module chunks = menu-item","import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/Injector.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/Injector.mjs\n// module chunks = menu-item","import { Evented } from '../core/Evented';\nimport Map from '../shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/NodeHandler.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/NodeHandler.mjs\n// module chunks = menu-item","import Promise from '../shim/Promise';\nimport Map from '../shim/Map';\nimport Symbol from '../shim/Symbol';\nimport { Evented } from '../core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/Registry.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/Registry.mjs\n// module chunks = menu-item","import { Map } from '../shim/Map';\nimport { Evented } from '../core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs\n// module chunks = menu-item","import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/WidgetBase.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/WidgetBase.mjs\n// module chunks = menu-item","let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs\n// module chunks = menu-item","import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/d.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/d.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs\n// module chunks = menu-item","import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs\n// module chunks = menu-item","/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs\n// module chunks = menu-item","import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/inject.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/inject.mjs\n// module chunks = menu-item","import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/diff.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/diff.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs\n// module chunks = menu-item","import global from '../shim/global';\nimport { from as arrayFrom } from '../shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '../shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst nextSiblingMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode[propName]();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (nodeOperations.indexOf(propName) !== -1) {\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const item = instanceMap.get(dnode.instance);\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n oldIndex++;\n newIndex++;\n textUpdated =\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let childrenArray = oldChildren;\n let nextIndex = oldIndex + 1;\n let child = oldChildren[oldIndex];\n if (!child) {\n child = siblings[0];\n nextIndex = 1;\n childrenArray = siblings;\n }\n if (child) {\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n const item = instanceMap.get(insertBefore.instance);\n if (item && item.dnode.rendered) {\n insertBeforeChildren.push(...item.dnode.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\n break;\n }\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\n insertBeforeChildren.push(childrenArray[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const nextSiblings = children.slice(i + 1);\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n nextSiblingMap.set(instance, nextSiblings);\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n nextSiblingMap.set(instance, nextSiblings);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n const nextSiblings = nextSiblingMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/vdom.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/vdom.mjs\n// module chunks = menu-item","/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module id = ./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module chunks = menu-item","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = ./node_modules/process/browser.js\n// module chunks = menu-item","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator];\r\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/tslib/tslib.es6.js\n// module id = ./node_modules/tslib/tslib.es6.js\n// module chunks = menu-item","var 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 || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = 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// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = ./node_modules/webpack/buildin/global.js\n// module chunks = menu-item","import { v } from '@dojo/framework/widget-core/d';\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\nimport { WidgetProperties } from '@dojo/framework/widget-core/interfaces';\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\n\nimport * as css from './menuItem.m.css';\n\nexport interface MenuItemProperties extends WidgetProperties {\n\ttitle: string;\n\tselected?: boolean;\n\tdata?: any;\n\tonSelected?: (data: any) => void;\n}\n\n@customElement({\n\ttag: 'demo-menu-item',\n\tattributes: ['title', 'selected'],\n\tevents: ['onSelected'],\n\tproperties: ['data', 'selected']\n})\n@theme(css)\nexport class MenuItem extends ThemedMixin(WidgetBase) {\n\tprivate _onClick() {\n\t\tthis.properties.onSelected && this.properties.onSelected(this.properties.data);\n\t}\n\n\tprotected render() {\n\t\tconst { title, selected } = this.properties;\n\n\t\treturn v('li', { classes: this.theme(css.root) }, [\n\t\t\tv(\n\t\t\t\t'span',\n\t\t\t\t{\n\t\t\t\t\tclasses: this.theme([css.item, selected ? css.selected : null]),\n\t\t\t\t\tonclick: this._onClick\n\t\t\t\t},\n\t\t\t\t[title]\n\t\t\t)\n\t\t]);\n\t}\n}\n\nexport default MenuItem;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@dojo/webpack-contrib/css-module-dts-loader?type=ts&instanceName=0_menu-item!./src/menu-item/MenuItem.ts","// removed by extract-text-webpack-plugin\nmodule.exports = {\" _key\":\"test-app/menuItem\",\"root\":\"sUmUi4Sh\",\"item\":\"_2Mk6Rdqa\",\"selected\":\"_1-f3ItOh\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/menu-item/menuItem.m.css\n// module id = ./src/menu-item/menuItem.m.css\n// module chunks = menu-item"],"sourceRoot":""} \ No newline at end of file diff --git a/test-app/fixtures/unix/dist/menu/menu-1.0.0.js b/test-app/fixtures/unix/dist/menu/menu-1.0.0.js index 7d7e6dc..56bbb6d 100644 --- a/test-app/fixtures/unix/dist/menu/menu-1.0.0.js +++ b/test-app/fixtures/unix/dist/menu/menu-1.0.0.js @@ -6,7 +6,7 @@ * All rights reserved * */ -!function(e){var t={};function o(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,o),s.l=!0,s.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}({"./node_modules/@dojo/core/Destroyable.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/core/lang.mjs"),s=o("./node_modules/@dojo/shim/Promise.mjs");function n(){return s.a.resolve(!1)}function i(){throw new Error("Call made to destroyed method")}class d{constructor(){this.handles=[]}own(e){const t=Array.isArray(e)?Object(r.b)(...e):e,{handles:o}=this;return o.push(t),{destroy(){o.splice(o.indexOf(t)),t.destroy()}}}destroy(){return new s.a(e=>{this.handles.forEach(e=>{e&&e.destroy&&e.destroy()}),this.destroy=n,this.own=i,e(!0)})}}t.a=d},"./node_modules/@dojo/core/Evented.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/core/Destroyable.mjs");const n=new r.b;class i extends s.a{constructor(){super(...arguments),this.listenersMap=new r.b}emit(e){this.listenersMap.forEach((t,o)=>{(function(e,t){if("string"==typeof t&&"string"==typeof e&&-1!==e.indexOf("*")){let o;return n.has(e)?o=n.get(e):(o=new RegExp(`^${e.replace(/\*/g,".*")}$`),n.set(e,o)),o.test(t)}return e===t})(o,e.type)&&t.forEach(t=>{t.call(this,e)})})}on(e,t){if(Array.isArray(t)){const o=t.map(t=>this._addListener(e,t));return{destroy(){o.forEach(e=>e.destroy())}}}return this._addListener(e,t)}_addListener(e,t){const o=this.listenersMap.get(e)||[];return o.push(t),this.listenersMap.set(e,o),{destroy:()=>{const o=this.listenersMap.get(e)||[];o.splice(o.indexOf(t),1)}}}}t.a=i},"./node_modules/@dojo/core/lang.mjs":function(e,t,o){"use strict";t.b=function(...e){return function(e){let t=!1;return{destroy:function(){t||(t=!0,e())}}}(function(){for(let t=0;t{r[e]=t,delete n[e]},()=>{delete n[e]})}function u(e){let t;const o=e.toLowerCase();if(o in a)t=a[o];else if(s[o])t=r[o]=s[o].call(null),delete s[o];else{if(!(o in r)){if(e in n)return!1;throw new TypeError(`Attempt to detect unregistered has feature "${e}"`)}t=r[o]}return t}c("debug",!0),c("host-browser","undefined"!=typeof document&&"undefined"!=typeof location),c("host-node",function(){if("object"==typeof o&&o.versions&&o.versions.node)return o.versions.node})}).call(t,o("./node_modules/webpack/buildin/global.js"),o("./node_modules/process/browser.js"))},"./node_modules/@dojo/shim/Map.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});o("./node_modules/@dojo/shim/iterator.mjs");var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/object.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s=r.a.Map;t.b=s},"./node_modules/@dojo/shim/Promise.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/queue.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs"),o("./node_modules/@dojo/shim/support/has.mjs");let s=r.a.Promise;t.a=s},"./node_modules/@dojo/shim/Symbol.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/support/has.mjs");var r=o("./node_modules/@dojo/shim/global.mjs"),s=o("./node_modules/@dojo/shim/support/util.mjs");let n=r.a.Symbol;["hasInstance","isConcatSpreadable","iterator","species","replace","search","split","match","toPrimitive","toStringTag","unscopables","observable"].forEach(e=>{n[e]||Object.defineProperty(n,e,Object(s.a)(n.for(e),!1,!1))}),t.a=n},"./node_modules/@dojo/shim/WeakMap.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/iterator.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s=r.a.WeakMap;t.a=s},"./node_modules/@dojo/shim/array.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return n});var r=o("./node_modules/@dojo/shim/global.mjs"),s=(o("./node_modules/@dojo/shim/iterator.mjs"),o("./node_modules/@dojo/shim/number.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/support/util.mjs"));let n,i,d,a,c,u,l;n=r.a.Array.from,i=r.a.Array.of,d=Object(s.b)(r.a.Array.prototype.copyWithin),a=Object(s.b)(r.a.Array.prototype.fill),c=Object(s.b)(r.a.Array.prototype.find),u=Object(s.b)(r.a.Array.prototype.findIndex),l=Object(s.b)(r.a.Array.prototype.includes)},"./node_modules/@dojo/shim/global.mjs":function(e,t,o){"use strict";(function(e){const o=void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0;t.a=o}).call(t,o("./node_modules/webpack/buildin/global.js"))},"./node_modules/@dojo/shim/iterator.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/Symbol.mjs"),o("./node_modules/@dojo/shim/string.mjs")},"./node_modules/@dojo/shim/number.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/global.mjs");Math.pow(2,53)},"./node_modules/@dojo/shim/object.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s,n,i,d,a,c,u,l,h;{const e=r.a.Object;s=e.assign,n=e.getOwnPropertyDescriptor,i=e.getOwnPropertyNames,d=e.getOwnPropertySymbols,a=e.is,c=e.keys}{const e=r.a.Object;u=e.getOwnPropertyDescriptors,l=e.entries,h=e.values}},"./node_modules/@dojo/shim/string.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs"),s=(o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/support/util.mjs"));t.b=55296;t.a=56319;let n,i,d,a,c,u,l,h,p,m;n=r.a.String.fromCodePoint,i=r.a.String.raw,d=Object(s.b)(r.a.String.prototype.codePointAt),a=Object(s.b)(r.a.String.prototype.endsWith),c=Object(s.b)(r.a.String.prototype.includes),u=Object(s.b)(r.a.String.prototype.normalize),l=Object(s.b)(r.a.String.prototype.repeat),h=Object(s.b)(r.a.String.prototype.startsWith),p=Object(s.b)(r.a.String.prototype.padEnd),m=Object(s.b)(r.a.String.prototype.padStart)},"./node_modules/@dojo/shim/support/has.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/has/has.mjs"),s=o("./node_modules/@dojo/shim/global.mjs");r.b;Object(r.a)("es6-array",()=>["from","of"].every(e=>e in s.a.Array)&&["findIndex","find","copyWithin"].every(e=>e in s.a.Array.prototype),!0),Object(r.a)("es6-array-fill",()=>"fill"in s.a.Array.prototype&&1===[1].fill(9,Number.POSITIVE_INFINITY)[0],!0),Object(r.a)("es7-array",()=>"includes"in s.a.Array.prototype,!0),Object(r.a)("es6-map",()=>{if("function"==typeof s.a.Map)try{const e=new s.a.Map([[0,1]]);return e.has(0)&&"function"==typeof e.keys&&"function"==typeof e.values&&"function"==typeof e.entries}catch(e){return!1}return!1},!0),Object(r.a)("es6-math",()=>["clz32","sign","log10","log2","log1p","expm1","cosh","sinh","tanh","acosh","asinh","atanh","trunc","fround","cbrt","hypot"].every(e=>"function"==typeof s.a.Math[e]),!0),Object(r.a)("es6-math-imul",()=>"imul"in s.a.Math&&-5===Math.imul(4294967295,5),!0),Object(r.a)("es6-object",()=>["assign","is","getOwnPropertySymbols","setPrototypeOf"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es2017-object",()=>["values","entries","getOwnPropertyDescriptors"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es-observable",()=>void 0!==s.a.Observable,!0),Object(r.a)("es6-promise",()=>void 0!==s.a.Promise&&!0,!0),Object(r.a)("es6-set",()=>{if("function"==typeof s.a.Set){const e=new s.a.Set([1]);return e.has(1)&&"keys"in e&&"function"==typeof e.keys&&!0}return!1},!0),Object(r.a)("es6-string",()=>["fromCodePoint"].every(e=>"function"==typeof s.a.String[e])&&["codePointAt","normalize","repeat","startsWith","endsWith","includes"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-string-raw",()=>{function e(e,...t){const o=[...e];return o.raw=e.raw,o}if("raw"in s.a.String){let t=e`a\n${1}`;return t.raw=["a\\n"],"a:\\n"===s.a.String.raw(t,42)}return!1},!0),Object(r.a)("es2017-string",()=>["padStart","padEnd"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-symbol",()=>void 0!==s.a.Symbol&&"symbol"==typeof Symbol(),!0),Object(r.a)("es6-weakmap",()=>{if(void 0!==s.a.WeakMap){const e={},t={},o=new s.a.WeakMap([[e,1]]);return Object.freeze(e),1===o.get(e)&&o.set(t,2)===o&&!0}return!1},!0),Object(r.a)("microtasks",()=>!0,!0),Object(r.a)("postmessage",()=>void 0!==s.a.window&&"function"==typeof s.a.postMessage,!0),Object(r.a)("raf",()=>"function"==typeof s.a.requestAnimationFrame,!0),Object(r.a)("setimmediate",()=>void 0!==s.a.setImmediate,!0),Object(r.a)("dom-mutationobserver",()=>{if(Boolean(s.a.MutationObserver||s.a.WebKitMutationObserver)){const e=document.createElement("div"),t=new(s.a.MutationObserver||s.a.WebKitMutationObserver)(function(){});return t.observe(e,{attributes:!0}),e.style.setProperty("display","block"),Boolean(t.takeRecords().length)}return!1},!0),Object(r.a)("dom-webanimation",()=>void 0!==s.a.Animation&&void 0!==s.a.KeyframeEffect,!0)},"./node_modules/@dojo/shim/support/queue.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/has.mjs");function s(e){e&&e.isActive&&e.callback&&e.callback()}function n(e,t){return{destroy:function(){this.destroy=function(){},e.isActive=!1,e.callback=null,t&&t()}}}!function(){let e,t;{const e=[];r.a.addEventListener("message",function(t){t.source===r.a&&"dojo-queue-message"===t.data&&(t.stopPropagation(),e.length&&s(e.shift()))}),t=function(t){e.push(t),r.a.postMessage("dojo-queue-message","*")}}function o(o){const r={isActive:!0,callback:o},s=t(r);return n(r,e&&function(){e(s)})}}();!function(){function e(e){const t={isActive:!0,callback:e},o=requestAnimationFrame(s.bind(null,t));return n(t,function(){cancelAnimationFrame(o)})}}();!function(){let e;e=function(e){r.a.Promise.resolve(e).then(s)}}()},"./node_modules/@dojo/shim/support/util.mjs":function(e,t,o){"use strict";t.a=function(e,t=!1,o=!0,r=!0){return{value:e,enumerable:t,writable:o,configurable:r}},t.b=function(e){return function(t,...o){return e.apply(t,o)}}},"./node_modules/@dojo/widget-core/Injector.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/core/Evented.mjs");class s extends r.a{constructor(e){super(),this._payload=e}setInvalidator(e){this._invalidator=e}get(){return this._payload}set(e){this._payload=e,this._invalidator&&this._invalidator()}}t.a=s},"./node_modules/@dojo/widget-core/NodeHandler.mjs":function(e,t,o){"use strict";var r,s=o("./node_modules/@dojo/core/Evented.mjs"),n=o("./node_modules/@dojo/shim/Map.mjs");!function(e){e.Projector="Projector",e.Widget="Widget"}(r||(r={}));t.a=class extends s.a{constructor(){super(...arguments),this._nodeMap=new n.b}get(e){return this._nodeMap.get(e)}has(e){return this._nodeMap.has(e)}add(e,t){this._nodeMap.set(t,e),this.emit({type:t})}addRoot(){this.emit({type:r.Widget})}addProjector(){this.emit({type:r.Projector})}clear(){this._nodeMap.clear()}}},"./node_modules/@dojo/widget-core/Registry.mjs":function(e,t,o){"use strict";t.d=a;var r=o("./node_modules/@dojo/shim/Promise.mjs"),s=o("./node_modules/@dojo/shim/Map.mjs"),n=o("./node_modules/@dojo/shim/Symbol.mjs"),i=o("./node_modules/@dojo/core/Evented.mjs");const d=Object(n.a)("Widget Base");function a(e){return Boolean(e&&e._type===d)}t.b=d;class c extends i.a{emitLoadedEvent(e,t){this.emit({type:e,action:"loaded",item:t})}define(e,t){if(void 0===this._widgetRegistry&&(this._widgetRegistry=new s.b),this._widgetRegistry.has(e))throw new Error(`widget has already been registered for '${e.toString()}'`);this._widgetRegistry.set(e,t),t instanceof r.a?t.then(t=>(this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}):a(t)&&this.emitLoadedEvent(e,t)}defineInjector(e,t){if(void 0===this._injectorRegistry&&(this._injectorRegistry=new s.b),this._injectorRegistry.has(e))throw new Error(`injector has already been registered for '${e.toString()}'`);const o=new i.a,r={injector:t(()=>o.emit({type:"invalidate"})),invalidator:o};this._injectorRegistry.set(e,r),this.emitLoadedEvent(e,r)}get(e){if(!this._widgetRegistry||!this.has(e))return null;const t=this._widgetRegistry.get(e);if(a(t))return t;if(t instanceof r.a)return null;const o=t();return this._widgetRegistry.set(e,o),o.then(t=>((function(e){return Boolean(e&&e.hasOwnProperty("__esModule")&&e.hasOwnProperty("default")&&a(e.default))})(t)&&(t=t.default),this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}),null}getInjector(e){return this._injectorRegistry&&this.hasInjector(e)?this._injectorRegistry.get(e):null}has(e){return Boolean(this._widgetRegistry&&this._widgetRegistry.has(e))}hasInjector(e){return Boolean(this._injectorRegistry&&this._injectorRegistry.has(e))}}t.a=c,t.c=c},"./node_modules/@dojo/widget-core/RegistryHandler.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/core/Evented.mjs"),n=o("./node_modules/@dojo/widget-core/Registry.mjs");t.a=class extends s.a{constructor(){super(),this._registry=new n.a,this._registryWidgetLabelMap=new r.a,this._registryInjectorLabelMap=new r.a,this.own(this._registry),this.own({destroy:()=>{this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry),this.baseRegistry=void 0)}})}set base(e){this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry)),this.baseRegistry=e}define(e,t){this._registry.define(e,t)}defineInjector(e,t){this._registry.defineInjector(e,t)}has(e){return this._registry.has(e)||Boolean(this.baseRegistry&&this.baseRegistry.has(e))}hasInjector(e){return this._registry.hasInjector(e)||Boolean(this.baseRegistry&&this.baseRegistry.hasInjector(e))}get(e,t=!1){return this._get(e,t,"get",this._registryWidgetLabelMap)}getInjector(e,t=!1){return this._get(e,t,"getInjector",this._registryInjectorLabelMap)}_get(e,t,o,r){const s=t?[this.baseRegistry,this._registry]:[this._registry,this.baseRegistry];for(let n=0;n{"loaded"===r.action&&this[o](e,t)===r.item&&this.emit({type:"invalidate"})});this.own(s),r.set(i,[...a,e])}}return null}}},"./node_modules/@dojo/widget-core/WidgetBase.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/shim/WeakMap.mjs"),n=o("./node_modules/@dojo/shim/Symbol.mjs"),i=o("./node_modules/@dojo/widget-core/d.mjs"),d=o("./node_modules/@dojo/widget-core/diff.mjs"),a=o("./node_modules/@dojo/widget-core/RegistryHandler.mjs"),c=o("./node_modules/@dojo/widget-core/NodeHandler.mjs"),u=o("./node_modules/@dojo/widget-core/vdom.mjs"),l=o("./node_modules/@dojo/widget-core/Registry.mjs");const h=new r.b,p=d.a.bind(null),m=n.a.for("dojoNoBind");t.b=m;class f{constructor(){this._initialProperties=!0,this._changedPropertyKeys=[],this._nodeHandler=new c.a,this._handles=[],this._children=[],this._decoratorCache=new r.b,this._properties={},this._boundRenderFunc=this.render.bind(this),this._boundInvalidate=this.invalidate.bind(this),u.b.set(this,{dirty:!0,onAttach:()=>{this.onAttach()},onDetach:()=>{this.onDetach(),this.destroy()},nodeHandler:this._nodeHandler,registry:()=>this.registry,coreProperties:{},rendering:!1,inputProperties:{}}),this._runAfterConstructors()}meta(e){void 0===this._metaMap&&(this._metaMap=new r.b);let t=this._metaMap.get(e);return t||(t=new e({invalidate:this._boundInvalidate,nodeHandler:this._nodeHandler,bind:this}),this.own(t),this._metaMap.set(e,t)),t}onAttach(){}onDetach(){}get properties(){return this._properties}get changedPropertyKeys(){return[...this._changedPropertyKeys]}__setCoreProperties__(e){const{baseRegistry:t}=e,o=u.b.get(this);o.coreProperties.baseRegistry!==t&&(void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry.base=t,this.invalidate()),o.coreProperties=e}__setProperties__(e){const t=u.b.get(this);t.inputProperties=e;const o=this._runBeforeProperties(e),r=this.getDecorator("registeredDiffProperty"),s=[],n=Object.keys(o);if(!1===this._initialProperties||0!==r.length){const e=[...n,...Object.keys(this._properties)],i=[],d={};let a=!1;for(let n=0;n{e.changed&&t.call(this,e.previousProperties,e.newProperties)}),this._properties=d,this._changedPropertyKeys=s}else{this._initialProperties=!1;for(let e=0;e0&&this.invalidate()}get children(){return this._children}__setChildren__(e){(this._children.length>0||e.length>0)&&(this._children=e,this.invalidate())}__render__(){u.b.get(this).dirty=!1;let e=this._runBeforeRenders()();return e=this.runAfterRenders(e),this._nodeHandler.clear(),e}invalidate(){const e=u.b.get(this);e.invalidate&&e.invalidate()}render(){return Object(i.g)("div",{},this.children)}addDecorator(e,t){if(t=Array.isArray(t)?t:[t],this.hasOwnProperty("constructor")){let o=h.get(this.constructor);o||(o=new r.b,h.set(this.constructor,o));let s=o.get(e);s||(s=[],o.set(e,s)),s.push(...t)}else{const o=this.getDecorator(e);this._decoratorCache.set(e,[...o,...t])}}_buildDecoratorList(e){const t=[];let o=this.constructor;for(;o;){const r=h.get(o);if(r){const o=r.get(e);o&&t.unshift(...o)}o=Object.getPrototypeOf(o)}return t}getDecorator(e){let t=this._decoratorCache.get(e);return void 0!==t?t:(t=this._buildDecoratorList(e),this._decoratorCache.set(e,t),t)}_mapDiffPropertyReactions(e,t){return this.getDecorator("diffReaction").reduce((o,{reaction:r,propertyName:s})=>{let n=o.get(r);return void 0===n&&(n={previousProperties:{},newProperties:{},changed:!1}),n.previousProperties[s]=this._properties[s],n.newProperties[s]=e[s],-1!==t.indexOf(s)&&(n.changed=!0),o.set(r,n),o},new r.b)}_bindFunctionProperty(e,t){if("function"==typeof e&&!e[m]&&!1===Object(l.d)(e)){void 0===this._bindFunctionPropertyMap&&(this._bindFunctionPropertyMap=new s.a);const o=this._bindFunctionPropertyMap.get(e)||{};let{boundFunc:r,scope:n}=o;return void 0!==r&&n===t||(r=e.bind(t),this._bindFunctionPropertyMap.set(e,{boundFunc:r,scope:t})),r}return e}get registry(){return void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry}_runBeforeProperties(e){const t=this.getDecorator("beforeProperties");return t.length>0?t.reduce((e,t)=>Object.assign({},e,t.call(this,e)),Object.assign({},e)):e}_runBeforeRenders(){const e=this.getDecorator("beforeRender");return e.length>0?e.reduce((e,t)=>{const o=t.call(this,e,this._properties,this._children);return o||(console.warn("Render function not returned from beforeRender, using previous render"),e)},this._boundRenderFunc):this._boundRenderFunc}runAfterRenders(e){const t=this.getDecorator("afterRender");return t.length>0?t.reduce((e,t)=>t.call(this,e),e):(void 0!==this._metaMap&&this._metaMap.forEach(e=>{e.afterRender()}),e)}_runAfterConstructors(){const e=this.getDecorator("afterConstructor");e.length>0&&e.forEach(e=>e.call(this))}own(e){this._handles.push(e)}destroy(){for(;this._handles.length>0;){const e=this._handles.pop();e&&e.destroy()}}}t.a=f,f._type=l.b},"./node_modules/@dojo/widget-core/animations/cssTransitions.mjs":function(e,t,o){"use strict";let r="",s="";function n(e){""===s&&function(e){if("WebkitTransition"in e.style)r="webkitTransitionEnd",s="webkitAnimationEnd";else{if(!("transition"in e.style||"MozTransition"in e.style))throw new Error("Your browser is not supported");r="transitionend",s="animationend"}}(e)}function i(e,t,o){n(e);let i=!1,d=function(){i||(i=!0,e.removeEventListener(r,d),e.removeEventListener(s,d),o())};t(),e.addEventListener(s,d),e.addEventListener(r,d)}t.a={enter:function(e,t,o){const r=t.enterAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(r)})},()=>{e.classList.remove(o),e.classList.remove(r)})},exit:function(e,t,o,r){const s=t.exitAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(s)})},()=>{r()})}}},"./node_modules/@dojo/widget-core/d.mjs":function(e,t,o){"use strict";t.f=d,t.e=a,t.d=function(e){return Boolean(e&&"string"!=typeof e&&e.type===i)},t.h=function(e,t,o=[]){return{children:o,widgetConstructor:e,properties:t,type:s}},t.g=function(e,t={},o){let r,s=t;Array.isArray(t)&&(o=t,s={});"function"==typeof s&&(r=s,s={});return{tag:e,deferredPropertiesCallback:r,children:o,properties:s,type:n}},t.c=function({node:e,attrs:t={},props:o={},on:r={},diffType:s="none"},n){return{tag:c(e)?e.tagName.toLowerCase():"",properties:o,attributes:t,events:r,children:n,type:i,domNode:e,text:c(e)?void 0:e.data,diffType:s}};var r=o("./node_modules/@dojo/shim/Symbol.mjs");const s=Object(r.a)("Identifier for a WNode.");t.b=s;const n=Object(r.a)("Identifier for a VNode.");t.a=n;const i=Object(r.a)("Identifier for a VNode created using existing dom.");function d(e){return Boolean(e&&"string"!=typeof e&&e.type===s)}function a(e){return Boolean(e&&"string"!=typeof e&&(e.type===n||e.type===i))}function c(e){return!!e.tagName}},"./node_modules/@dojo/widget-core/decorators/afterRender.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("afterRender",o?t[o]:e)})}},"./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs");function n(){return Object(r.a)((e,t)=>{Object(s.a)(function(){this.invalidate()})(e)})}},"./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("beforeProperties",o?t[o]:e)})}},"./node_modules/@dojo/widget-core/decorators/customElement.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/widget-core/registerCustomElement.mjs"),s=o("./node_modules/@dojo/widget-core/Registry.mjs");function n({tag:e,properties:t=[],attributes:o=[],events:n=[],childType:i=r.CustomElementChildType.DOJO,registryFactory:d=(()=>new s.c)}){return function(r){r.prototype.__customElementDescriptor={tagName:e,attributes:o,properties:t,events:n,childType:i,registryFactory:d}}}},"./node_modules/@dojo/widget-core/decorators/diffProperty.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e,t,o){return Object(r.a)((r,s)=>{r.addDecorator(`diffProperty:${e}`,t.bind(null)),r.addDecorator("registeredDiffProperty",e),(o||s)&&r.addDecorator("diffReaction",{propertyName:e,reaction:s?r[s]:o})})}},"./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs":function(e,t,o){"use strict";function r(e){return function(t,o,r){"function"==typeof t?e(t.prototype,void 0):e(t,o)}}t.a=r},"./node_modules/@dojo/widget-core/decorators/inject.mjs":function(e,t,o){"use strict";t.a=d;var r=o("./node_modules/@dojo/shim/WeakMap.mjs"),s=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs");const i=new r.a;function d({name:e,getProperties:t}){return Object(s.a)((o,r)=>{Object(n.a)(function(o){const r=this.registry.getInjector(e);if(r){const{injector:e,invalidator:s}=r,n=i.get(this)||[];return 0===n.length&&i.set(this,n),-1===n.indexOf(r)&&(this.own(s.on("invalidate",()=>{this.invalidate()})),n.push(r)),t(e(),o)}})(o)})}},"./node_modules/@dojo/widget-core/diff.mjs":function(e,t,o){"use strict";t.b=i,t.a=function(e,t){let o;o="function"==typeof t?t._type===r.b?n(e,t):function(e,t){return{changed:!1,value:t}}(0,t):s(t)?i(e,t):n(e,t);return o};var r=o("./node_modules/@dojo/widget-core/Registry.mjs");function s(e){return"[object Object]"===Object.prototype.toString.call(e)||Array.isArray(e)}function n(e,t){return{changed:e!==t,value:t}}function i(e,t){let o=!1;const r=e&&s(e),n=t&&s(t);if(!r||!n)return{changed:!0,value:t};const i=Object.keys(e),d=Object.keys(t);return{changed:o=i.length!==d.length||d.some(o=>t[o]!==e[o]),value:t}}},"./node_modules/@dojo/widget-core/mixins/Projector.mjs":function(e,t,o){"use strict";t.a=l;var r,s,n=o("./node_modules/tslib/tslib.es6.js"),i=o("./node_modules/@dojo/core/lang.mjs"),d=o("./node_modules/@dojo/widget-core/animations/cssTransitions.mjs"),a=o("./node_modules/@dojo/widget-core/decorators/afterRender.mjs"),c=o("./node_modules/@dojo/widget-core/d.mjs"),u=o("./node_modules/@dojo/widget-core/vdom.mjs");function l(e){class t extends e{constructor(...e){super(...e),this._root=document.body,this._async=!0,this._projectorProperties={},this._projectionOptions={transitions:d.a},this.root=document.body,this.projectorState=r.Detached}append(e){const t={type:s.Append,root:e};return this._attach(t)}merge(e){const t={type:s.Merge,root:e};return this._attach(t)}set root(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change root element");this._root=e}get root(){return this._root}get async(){return this._async}set async(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change async mode");this._async=e}sandbox(e=document){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot create sandbox");this._async=!1;const t=this.root;this.own({destroy:()=>{this._root=t}}),this._attach({root:e.createDocumentFragment(),type:s.Append})}setChildren(e){this.__setChildren__(e)}setProperties(e){this.__setProperties__(e)}__setProperties__(e){this._projectorProperties&&this._projectorProperties.registry!==e.registry&&this._projectorProperties.registry&&this._projectorProperties.registry.destroy(),this._projectorProperties=Object(i.a)({},e),super.__setCoreProperties__({bind:this,baseRegistry:e.registry}),super.__setProperties__(e)}toHtml(){if(this.projectorState!==r.Attached||!this._projection)throw new Error("Projector is not attached, cannot return an HTML string of projection.");return this._projection.domNode.childNodes[0].outerHTML}afterRender(e){let t=e;return"string"!=typeof e&&null!==e&&void 0!==e||(t=Object(c.g)("span",{},[e])),t}destroy(){super.destroy()}_attach({type:e,root:t}){if(t&&(this.root=t),this._attachHandle)return this._attachHandle;this.projectorState=r.Attached;const o={destroy:()=>{this.projectorState===r.Attached&&(this._projection=void 0,this.projectorState=r.Detached)}};switch(this.own(o),this._attachHandle=o,this._projectionOptions=Object.assign({},this._projectionOptions,{sync:!this._async}),e){case s.Append:this._projection=u.a.append(this.root,this,this._projectionOptions);break;case s.Merge:this._projection=u.a.merge(this.root,this,this._projectionOptions)}return this._attachHandle}}return n.a([Object(a.a)(),n.b("design:type",Function),n.b("design:paramtypes",[Object]),n.b("design:returntype",void 0)],t.prototype,"afterRender",null),t}!function(e){e[e.Attached=1]="Attached",e[e.Detached=2]="Detached"}(r||(r={})),function(e){e[e.Append=1]="Append",e[e.Merge=2]="Merge"}(s||(s={}))},"./node_modules/@dojo/widget-core/mixins/Themed.mjs":function(e,t,o){"use strict";t.c=function(e){return Object(i.a)(t=>{t.addDecorator("baseThemeClasses",e)})},t.b=function(e,t){const o=new s.a(e);return t.defineInjector(u,e=>(o.setInvalidator(e),()=>o.get())),o},t.a=l;var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/widget-core/Injector.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/inject.mjs"),i=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),d=o("./node_modules/@dojo/widget-core/decorators/diffProperty.mjs"),a=o("./node_modules/@dojo/widget-core/diff.mjs");const c=" _key",u=Symbol("theme");function l(e){let t=class extends e{constructor(){super(...arguments),this._registeredBaseThemeKeys=[],this._recalculateClasses=!0,this._theme={}}theme(e){return this._recalculateClasses&&this._recalculateThemeClasses(),Array.isArray(e)?e.map(e=>this._getThemeClass(e)):this._getThemeClass(e)}onPropertiesChanged(){this._recalculateClasses=!0}_getThemeClass(e){if(void 0===e||null===e)return e;const t=this.properties.extraClasses||{},o=this._baseThemeClassesReverseLookup[e];let r=[];return o?(t[o]&&r.push(t[o]),this._theme[o]?r.push(this._theme[o]):r.push(this._registeredBaseTheme[o]),r.join(" ")):(console.warn(`Class name: '${e}' not found in theme`),null)}_recalculateThemeClasses(){const{theme:e={}}=this.properties,t=this.getDecorator("baseThemeClasses");this._registeredBaseTheme||(this._registeredBaseTheme=t.reduce((e,t)=>{const o=c,s=t[o],n=r.c(t,["symbol"==typeof o?o:o+""]);return this._registeredBaseThemeKeys.push(s),Object.assign({},e,n)},{}),this._baseThemeClassesReverseLookup=t.reduce((e,t)=>(Object.keys(t).forEach(o=>{e[t[o]]=o}),e),{})),this._theme=this._registeredBaseThemeKeys.reduce((t,o)=>Object.assign({},t,e[o]),{}),this._recalculateClasses=!1}};return r.a([Object(d.a)("theme",a.b),Object(d.a)("extraClasses",a.b),r.b("design:type",Function),r.b("design:paramtypes",[]),r.b("design:returntype",void 0)],t.prototype,"onPropertiesChanged",null),t=r.a([Object(n.a)({name:u,getProperties:(e,t)=>t.theme?{}:{theme:e}})],t)}},"./node_modules/@dojo/widget-core/registerCustomElement.mjs":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"CustomElementChildType",function(){return r}),t.DomToWidgetWrapper=h,t.create=p,t.register=m;var r,s=o("./node_modules/tslib/tslib.es6.js"),n=o("./node_modules/@dojo/widget-core/WidgetBase.mjs"),i=o("./node_modules/@dojo/widget-core/mixins/Projector.mjs"),d=o("./node_modules/@dojo/shim/array.mjs"),a=o("./node_modules/@dojo/widget-core/d.mjs"),c=o("./node_modules/@dojo/shim/global.mjs"),u=o("./node_modules/@dojo/widget-core/mixins/Themed.mjs"),l=o("./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs");function h(e){let t=class extends n.a{render(){const t=Object.keys(this.properties).reduce((e,t)=>{const o=this.properties[t];return 0===t.indexOf("on")&&(t=`__${t}`),e[t]=o,e},{});return Object(a.c)({node:e,props:t,diffType:"dom"})}static get domNode(){return e}};return t=s.a([Object(l.a)()],t)}function p(e,t){const{attributes:o,childType:s,registryFactory:l}=e,p={};return o.forEach(e=>{const t=e.toLowerCase();p[t]=e}),class extends HTMLElement{constructor(){super(...arguments),this._properties={},this._children=[],this._eventProperties={},this._initialised=!1}connectedCallback(){if(this._initialised)return;const o={},{attributes:p,properties:m,events:f}=e;this._properties=Object.assign({},this._properties,this._attributesToProperties(p)),[...p,...m].forEach(e=>{const t=this[e],r=e.replace(/^on/,"__");void 0!==t&&(this._properties[e]=t),r!==e&&(o[r]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}),o[e]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}}),f.forEach(e=>{const t=e.replace(/^on/,"").toLowerCase(),r=e.replace(/^on/,"__on");o[r]={get:()=>this._getEventProperty(e),set:t=>this._setEventProperty(e,t)},this._eventProperties[e]=void 0,this._properties[e]=((...o)=>{const r=this._getEventProperty(e);"function"==typeof r&&r(...o),this.dispatchEvent(new CustomEvent(t,{bubbles:!1,detail:o}))})}),Object.defineProperties(this,o);const g=s===r.TEXT?this.childNodes:this.children;Object(d.a)(g).forEach(e=>{s===r.DOJO?(e.addEventListener("dojo-ce-render",()=>this._render()),e.addEventListener("dojo-ce-connected",()=>this._render()),this._children.push(h(e))):this._children.push(Object(a.c)({node:e,diffType:"dom"}))}),this.addEventListener("dojo-ce-connected",e=>this._childConnected(e));const j=this._properties,_=()=>this.__children__(),y=l(),b=Object(u.b)(this._getTheme(),y);c.a.addEventListener("dojo-theme-set",()=>b.set(this._getTheme()));const v=Object(i.a)(class extends n.a{render(){return Object(a.h)(t,j,_())}});this._projector=new v,this._projector.setProperties({registry:y}),this._projector.append(this),this._initialised=!0,this.dispatchEvent(new CustomEvent("dojo-ce-connected",{bubbles:!0,detail:this}))}_getTheme(){if(c.a&&c.a.dojoce&&c.a.dojoce.theme)return c.a.dojoce.themes[c.a.dojoce.theme]}_childConnected(e){const t=e.detail;if(t.parentNode===this){this._children.some(e=>e.domNode===t)||(t.addEventListener("dojo-ce-render",()=>this._render()),this._children.push(h(t)),this._render())}}_render(){this._projector&&(this._projector.invalidate(),this.dispatchEvent(new CustomEvent("dojo-ce-render",{bubbles:!1,detail:this})))}__properties__(){return Object.assign({},this._properties,this._eventProperties)}__children__(){return s===r.DOJO?this._children.filter(e=>e.domNode.isWidget).map(e=>{const{domNode:t}=e;return Object(a.h)(e,Object.assign({},t.__properties__()),[...t.__children__()])}):this._children}attributeChangedCallback(e,t,o){const r=p[e];this._setProperty(r,o)}_setEventProperty(e,t){this._eventProperties[e]=t}_getEventProperty(e){return this._eventProperties[e]}_setProperty(e,t){"function"==typeof t&&(t[n.b]=!0),this._properties[e]=t,this._render()}_getProperty(e){return this._properties[e]}_attributesToProperties(e){return e.reduce((e,t)=>{const o=t.toLowerCase(),r=this.getAttribute(o);return null!==r&&(e[t]=r),e},{})}static get observedAttributes(){return Object.keys(p)}get isWidget(){return!0}}}function m(e){const t=e.prototype&&e.prototype.__customElementDescriptor;if(!t)throw new Error("Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?");c.a.customElements.define(t.tagName,p(t,e))}!function(e){e.DOJO="DOJO",e.NODE="NODE",e.TEXT="TEXT"}(r||(r={})),t.default=m},"./node_modules/@dojo/widget-core/vdom.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs"),s=o("./node_modules/@dojo/shim/array.mjs"),n=o("./node_modules/@dojo/widget-core/d.mjs"),i=o("./node_modules/@dojo/widget-core/Registry.mjs"),d=o("./node_modules/@dojo/shim/WeakMap.mjs");const a="http://www.w3.org/2000/svg",c="http://www.w3.org/1999/xlink",u=[],l=new d.a;t.b=l;const h=new d.a,p=new d.a;function m(e,t){return Object(n.e)(e)&&Object(n.e)(t)?(!Object(n.d)(e)&&!Object(n.d)(t)||e.domNode===t.domNode)&&(e.tag===t.tag&&e.properties.key===t.properties.key):!(!Object(n.f)(e)||!Object(n.f)(t))&&((void 0!==e.instance||"string"!=typeof t.widgetConstructor)&&(e.widgetConstructor===t.widgetConstructor&&e.properties.key===t.properties.key))}const f=function(){throw new Error("Provide a transitions object to the projectionOptions to do animations")};function g(e){if("string"!=typeof e)throw new Error("Style values must be strings")}function j(e,t,o,r,s,n){const i=p.get(r.projectorInstance),a=i.nodeMap.get(e)||new d.a;if(n){const o=a.get(n);e.removeEventListener(t,o)}let c=o.bind(s);"input"===t&&(c=function(e){o.call(this,e),e.target["oninput-value"]=e.target.value}.bind(s)),e.addEventListener(t,c),a.set(o,c),i.nodeMap.set(e,a)}function _(e,t){if(t){const o=t.split(" ");for(let t=0;t{o.focus()})}}function v(e,t,o,r,s=!1){const n=p.get(r.projectorInstance).nodeMap.get(e);n&&Object.keys(t).forEach(r=>{const i="on"===r.substr(0,2)||s,d=s?r:r.substr(2);if(i&&!o[r]){const o=n.get(t[r]);o&&e.removeEventListener(d,o)}})}function w(e,t,o,r){r.namespace===a&&"href"===t?e.setAttributeNS(c,t,o):"role"===t&&""===o||void 0===o?e.removeAttribute(t):e.setAttribute(t,o)}function O(e,t,o,r){const s=Object.keys(o),n=s.length;for(let i=0;i0)if(c&&0!==c.length){const r=[...o];for(let o=0;o0&&R(r.children,t));else{if(!r.coreProperties){const e=l.get(t);r.coreProperties={bind:t,baseRegistry:e.coreProperties.baseRegistry}}r.children&&r.children.length>0&&R(r.children,t)}o++}else e.splice(o,1)}return e}function k(e,t){if(Object(n.e)(e)&&e.properties){const o=e.properties.enterAnimation;o&&("function"==typeof o?o(e.domNode,e.properties):t.enter(e.domNode,e.properties,o))}}function N(e,t,o){if(Object(n.f)(e)){const r=e.rendered||u;if(e.instance){l.get(e.instance).onDetach(),h.delete(e.instance)}for(let e=0;e0)for(let r=0;r{let i=void 0,d=t[f];if(d){let e=f+1,o=[d];for(;o.length;){const r=o.shift();if(Object(n.f)(r))r.rendered&&o.push(...r.rendered);else if(r.domNode){i=r.domNode;break}0===o.length&&t[e]&&(o.push(t[e]),e++)}}D(u,e,i,s,r),k(u,a);const l=g;c.afterRenderCallbacks.push(()=>{A(o,l,r)})};if(!d||-1===l){p(),g++;continue}const _=()=>{const e=f;if(c.afterRenderCallbacks.push(()=>{A(t,e,r)}),Object(n.f)(d)){const e=h.get(d.instance);e&&(d=e.dnode)}N(d,a,s)};-1!==E(o,d,g+1)?(p(),_(),f++,g++):(_(),f++)}if(i>f)for(l=f;l{A(t,e,r)});let o=t[l];if(Object(n.f)(o)){const e=h.get(o.instance);e&&(o=e.dnode)}N(o,a,s)}return j}function T(e,t,o,r,i,d){if(void 0===t)return;const a=p.get(o.projectorInstance);a.merge&&void 0===d&&(d=Object(s.a)(e.domNode.childNodes));const c=o.transitions;o=Object.assign({},o,{depth:o.depth+1});for(let s=0;s0;)(e=d.shift())&&e.tagName===(u.tag.toUpperCase()||void 0)&&(u.domNode=e)}D(u,e,i,o,r)}else D(u,e,i,o,r,d);k(u,c)}}function x(e,t,o,r){if(T(t,t.children,r,o,void 0),"function"==typeof t.deferredPropertiesCallback&&void 0===t.inserted&&L(t,r),t.attributes&&t.events){O(e,{},t.attributes,r),P(e,{},t.properties,r,!1),v(e,{},t.events,r,!0);const o=t.events;Object.keys(o).forEach(s=>{j(e,s,o[s],r,t.properties.bind)})}else P(e,{},t.properties,r);if(null!==t.properties.key&&void 0!==t.properties.key){l.get(o).nodeHandler.add(e,`${t.properties.key}`)}t.inserted=!0}function D(e,t,o,r,s,d){let c;const u=p.get(r.projectorInstance);if(Object(n.f)(e)){let{widgetConstructor:n}=e;const a=l.get(s);if(!Object(i.d)(n)){const e=a.registry().get(n);if(null===e)return;n=e}const c=new n;e.instance=c;const p=l.get(c);p.invalidate=(()=>{p.dirty=!0,!1===p.rendering&&(u.renderQueue.push({instance:c,depth:r.depth}),F(r))}),p.rendering=!0,c.__setCoreProperties__(e.coreProperties),c.__setChildren__(e.children),c.__setProperties__(e.properties);const m=c.__render__();if(p.rendering=!1,m){const s=R(m,c);e.rendered=s,T(t,s,r,c,o,d)}h.set(c,{dnode:e,parentVNode:t}),p.nodeHandler.addRoot(),u.afterRenderCallbacks.push(()=>{p.onAttach()})}else{if(u.merge&&void 0!==u.mergeElement)return c=e.domNode=r.mergeElement,u.mergeElement=void 0,void x(c,e,s,r);const n=t.domNode.ownerDocument;if(e.tag||"string"!=typeof e.text)void 0===e.domNode?("svg"===e.tag&&(r=Object.assign({},r,{namespace:a})),c=void 0!==r.namespace?e.domNode=n.createElementNS(r.namespace,e.tag):e.domNode=e.domNode||n.createElement(e.tag)):c=e.domNode,x(c,e,s,r),void 0!==o?t.domNode.insertBefore(c,o):c.parentNode!==t.domNode&&t.domNode.appendChild(c);else if(void 0!==e.domNode&&t.domNode){const o=e.domNode.ownerDocument.createTextNode(e.text);t.domNode===e.domNode.parentNode?t.domNode.replaceChild(o,e.domNode):(t.domNode.appendChild(o),e.domNode.parentNode&&e.domNode.parentNode.removeChild(e.domNode)),e.domNode=o}else c=e.domNode=n.createTextNode(e.text),void 0!==o?t.domNode.insertBefore(c,o):t.domNode.appendChild(c)}}function S(e,t,o,r,s){if(Object(n.f)(t)){const{instance:r}=e,{parentVNode:s,dnode:n}=h.get(r),i=n?n.rendered:e.rendered,d=l.get(r);if(d.rendering=!0,r.__setCoreProperties__(t.coreProperties),r.__setChildren__(t.children),r.__setProperties__(t.properties),t.instance=r,!0===d.dirty){const e=r.__render__();d.rendering=!1,t.rendered=R(e,r),M(s,i,t.rendered,r,o)}else d.rendering=!1,t.rendered=i;h.set(r,{dnode:t,parentVNode:s}),d.nodeHandler.addRoot()}else{if(e===t)return!1;const r=t.domNode=e.domNode;let n=!1,i=!1;if(t.tag||"string"!=typeof t.text){if(t.tag&&0===t.tag.lastIndexOf("svg",0)&&(o=Object.assign({},o,{namespace:a})),e.children!==t.children){const r=R(t.children,s);t.children=r,i=M(t,e.children,r,s,o)||i}const n=function(e,t,o){const{diffType:r,properties:s,attributes:n}=o;if(!r||"vdom"===r)return{properties:t.properties,attributes:t.attributes,events:t.events};if("none"===r)return{properties:{},attributes:t.attributes?{}:void 0,events:t.events};let i={properties:{}};return n?(i.attributes={},i.events=t.events,Object.keys(s).forEach(t=>{i.properties[t]=e[t]}),Object.keys(n).forEach(t=>{i.attributes[t]=e.getAttribute(t)}),i):(i.properties=Object.keys(s).reduce((t,o)=>(t[o]=e.getAttribute(o)||e[o],t),{}),i)}(r,e,t);if(t.attributes&&t.events){O(r,n.attributes,t.attributes,o),i=P(r,n.properties,t.properties,o,!1)||i,v(r,n.events,t.events,o,!0);const e=t.events;Object.keys(e).forEach(s=>{j(r,s,e[s],o,t.properties.bind,n.events[s])})}else i=P(r,n.properties,t.properties,o)||i;if(null!==t.properties.key&&void 0!==t.properties.key){l.get(s).nodeHandler.add(r,`${t.properties.key}`)}}else if(t.text!==e.text){const e=r.ownerDocument.createTextNode(t.text);return r.parentNode.replaceChild(e,r),t.domNode=e,n=!0}i&&t.properties&&t.properties.updateAnimation&&t.properties.updateAnimation(r,t.properties,e.properties)}}function L(e,t){e.decoratedDeferredProperties=e.properties;const o=e.deferredPropertiesCallback(!!e.inserted),r=p.get(t.projectorInstance);e.properties=Object.assign({},o,e.decoratedDeferredProperties),r.deferredRenderCallbacks.push(()=>{const o=Object.assign({},e.deferredPropertiesCallback(!!e.inserted),e.decoratedDeferredProperties);P(e.domNode,e.properties,o,t),e.properties=o})}function I(e){const t=p.get(e.projectorInstance);if(t.deferredRenderCallbacks.length)if(e.sync)for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}else r.a.requestAnimationFrame(()=>{for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}})}function W(e){const t=p.get(e.projectorInstance);if(e.sync)for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}else r.a.requestIdleCallback?r.a.requestIdleCallback(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}}):setTimeout(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}})}function F(e){const t=p.get(e.projectorInstance);e.sync?B(e):void 0===t.renderScheduled&&(t.renderScheduled=r.a.requestAnimationFrame(()=>{B(e)}))}function B(e){const t=p.get(e.projectorInstance);t.renderScheduled=void 0;const o=[...t.renderQueue];t.renderQueue=[],o.sort((e,t)=>e.depth-t.depth);const r=[];for(;o.length;){const{instance:t}=o.shift();if(h.has(t)&&-1===r.indexOf(t)){r.push(t);const{parentVNode:o,dnode:s}=h.get(t);S(s,C(t,l.get(t)),e,0,t)}}W(e),I(e)}const H={append:function(e,t,o={}){const r=l.get(t),s=function(e,t){const o={namespace:void 0,styleApplyer:function(e,t,o){e.style[t]=o},transitions:{enter:f,exit:f},depth:0,merge:!1,sync:!1,projectorInstance:t};return Object.assign({},o,e)}(o,t),i={afterRenderCallbacks:[],deferredRenderCallbacks:[],nodeMap:new d.a,renderScheduled:void 0,renderQueue:[],merge:o.merge||!1,mergeElement:o.mergeElement};p.set(t,i),s.rootNode=e;const a={tag:"",properties:{},children:void 0,domNode:s.rootNode,type:n.a};const c=C(t,r);return h.set(t,{dnode:c,parentVNode:a}),r.invalidate=(()=>{r.dirty=!0,!1===r.rendering&&(i.renderQueue.push({instance:t,depth:s.depth}),F(s))}),S(c,c,s,0,t),i.afterRenderCallbacks.push(()=>{r.onAttach()}),I(s),W(s),{domNode:s.rootNode}},create:function(e,t){return this.append(document.createElement("div"),e,t)},merge:function(e,t,o={}){o.merge=!0,o.mergeElement=e;const r=this.append(e.parentNode,t,o);return p.get(t).merge=!1,r}};t.a=H},"./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js":function(e,t,o){var r=o("./src/menu/Menu.ts"),s=o("./node_modules/@dojo/widget-core/registerCustomElement.mjs").default,n=r.default;n&&s(n)},"./node_modules/process/browser.js":function(e,t){var o,r,s=e.exports={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function d(e){if(o===setTimeout)return setTimeout(e,0);if((o===n||!o)&&setTimeout)return o=setTimeout,setTimeout(e,0);try{return o(e,0)}catch(t){try{return o.call(null,e,0)}catch(t){return o.call(this,e,0)}}}!function(){try{o="function"==typeof setTimeout?setTimeout:n}catch(e){o=n}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var a,c=[],u=!1,l=-1;function h(){u&&a&&(u=!1,a.length?c=a.concat(c):l=-1,c.length&&p())}function p(){if(!u){var e=d(h);u=!0;for(var t=c.length;t;){for(a=c,c=[];++l1)for(var o=1;o=0;d--)(s=e[d])&&(i=(n<3?s(i):n>3?s(t,o,i):s(t,o))||i);return n>3&&i&&Object.defineProperty(t,o,i),i},t.b=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}; +!function(e){var t={};function o(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,o),s.l=!0,s.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}({"./node_modules/@dojo/framework/core/Destroyable.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/core/lang.mjs"),s=o("./node_modules/@dojo/framework/shim/Promise.mjs");function n(){return s.a.resolve(!1)}function i(){throw new Error("Call made to destroyed method")}class d{constructor(){this.handles=[]}own(e){const t=Array.isArray(e)?Object(r.b)(...e):e,{handles:o}=this;return o.push(t),{destroy(){o.splice(o.indexOf(t)),t.destroy()}}}destroy(){return new s.a(e=>{this.handles.forEach(e=>{e&&e.destroy&&e.destroy()}),this.destroy=n,this.own=i,e(!0)})}}t.a=d},"./node_modules/@dojo/framework/core/Evented.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/core/Destroyable.mjs");const n=new r.b;class i extends s.a{constructor(){super(...arguments),this.listenersMap=new r.b}emit(e){this.listenersMap.forEach((t,o)=>{(function(e,t){if("string"==typeof t&&"string"==typeof e&&-1!==e.indexOf("*")){let o;return n.has(e)?o=n.get(e):(o=new RegExp(`^${e.replace(/\*/g,".*")}$`),n.set(e,o)),o.test(t)}return e===t})(o,e.type)&&[...t].forEach(t=>{t.call(this,e)})})}on(e,t){if(Array.isArray(t)){const o=t.map(t=>this._addListener(e,t));return{destroy(){o.forEach(e=>e.destroy())}}}return this._addListener(e,t)}_addListener(e,t){const o=this.listenersMap.get(e)||[];return o.push(t),this.listenersMap.set(e,o),{destroy:()=>{const o=this.listenersMap.get(e)||[];o.splice(o.indexOf(t),1)}}}}t.a=i},"./node_modules/@dojo/framework/core/lang.mjs":function(e,t,o){"use strict";t.b=function(...e){return function(e){let t=!1;return{destroy:function(){t||(t=!0,e())}}}(function(){for(let t=0;t{r[e]=t,delete n[e]},()=>{delete n[e]})}function l(e){let t;const o=e.toLowerCase();if(o in a)t=a[o];else if(s[o])t=r[o]=s[o].call(null),delete s[o];else{if(!(o in r)){if(e in n)return!1;throw new TypeError(`Attempt to detect unregistered has feature "${e}"`)}t=r[o]}return t}c("debug",!0),c("host-browser","undefined"!=typeof document&&"undefined"!=typeof location),c("host-node",function(){if("object"==typeof o&&o.versions&&o.versions.node)return o.versions.node})}).call(t,o("./node_modules/webpack/buildin/global.js"),o("./node_modules/process/browser.js"))},"./node_modules/@dojo/framework/shim/Map.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});o("./node_modules/@dojo/framework/shim/iterator.mjs");var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/object.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s=r.a.Map;t.b=s},"./node_modules/@dojo/framework/shim/Promise.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/queue.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs");let s=r.a.Promise;t.a=s},"./node_modules/@dojo/framework/shim/Symbol.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/support/has.mjs");var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=o("./node_modules/@dojo/framework/shim/support/util.mjs");let n=r.a.Symbol;["hasInstance","isConcatSpreadable","iterator","species","replace","search","split","match","toPrimitive","toStringTag","unscopables","observable"].forEach(e=>{n[e]||Object.defineProperty(n,e,Object(s.a)(n.for(e),!1,!1))}),t.a=n},"./node_modules/@dojo/framework/shim/WeakMap.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/iterator.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s=r.a.WeakMap;t.a=s},"./node_modules/@dojo/framework/shim/array.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return n});var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=(o("./node_modules/@dojo/framework/shim/iterator.mjs"),o("./node_modules/@dojo/framework/shim/number.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/support/util.mjs"));let n,i,d,a,c,l,u;n=r.a.Array.from,i=r.a.Array.of,d=Object(s.b)(r.a.Array.prototype.copyWithin),a=Object(s.b)(r.a.Array.prototype.fill),c=Object(s.b)(r.a.Array.prototype.find),l=Object(s.b)(r.a.Array.prototype.findIndex),u=Object(s.b)(r.a.Array.prototype.includes)},"./node_modules/@dojo/framework/shim/global.mjs":function(e,t,o){"use strict";(function(e){const o=void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0;t.a=o}).call(t,o("./node_modules/webpack/buildin/global.js"))},"./node_modules/@dojo/framework/shim/iterator.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/Symbol.mjs"),o("./node_modules/@dojo/framework/shim/string.mjs")},"./node_modules/@dojo/framework/shim/number.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/global.mjs");Math.pow(2,53)},"./node_modules/@dojo/framework/shim/object.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s,n,i,d,a,c,l,u,m;{const e=r.a.Object;s=e.assign,n=e.getOwnPropertyDescriptor,i=e.getOwnPropertyNames,d=e.getOwnPropertySymbols,a=e.is,c=e.keys}{const e=r.a.Object;l=e.getOwnPropertyDescriptors,u=e.entries,m=e.values}},"./node_modules/@dojo/framework/shim/string.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=(o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/support/util.mjs"));t.b=55296;t.a=56319;let n,i,d,a,c,l,u,m,h,f;n=r.a.String.fromCodePoint,i=r.a.String.raw,d=Object(s.b)(r.a.String.prototype.codePointAt),a=Object(s.b)(r.a.String.prototype.endsWith),c=Object(s.b)(r.a.String.prototype.includes),l=Object(s.b)(r.a.String.prototype.normalize),u=Object(s.b)(r.a.String.prototype.repeat),m=Object(s.b)(r.a.String.prototype.startsWith),h=Object(s.b)(r.a.String.prototype.padEnd),f=Object(s.b)(r.a.String.prototype.padStart)},"./node_modules/@dojo/framework/shim/support/has.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/has/has.mjs"),s=o("./node_modules/@dojo/framework/shim/global.mjs");r.b;Object(r.a)("es6-array",()=>["from","of"].every(e=>e in s.a.Array)&&["findIndex","find","copyWithin"].every(e=>e in s.a.Array.prototype),!0),Object(r.a)("es6-array-fill",()=>"fill"in s.a.Array.prototype&&1===[1].fill(9,Number.POSITIVE_INFINITY)[0],!0),Object(r.a)("es7-array",()=>"includes"in s.a.Array.prototype,!0),Object(r.a)("es6-map",()=>{if("function"==typeof s.a.Map)try{const e=new s.a.Map([[0,1]]);return e.has(0)&&"function"==typeof e.keys&&"function"==typeof e.values&&"function"==typeof e.entries}catch(e){return!1}return!1},!0),Object(r.a)("es6-math",()=>["clz32","sign","log10","log2","log1p","expm1","cosh","sinh","tanh","acosh","asinh","atanh","trunc","fround","cbrt","hypot"].every(e=>"function"==typeof s.a.Math[e]),!0),Object(r.a)("es6-math-imul",()=>"imul"in s.a.Math&&-5===Math.imul(4294967295,5),!0),Object(r.a)("es6-object",()=>["assign","is","getOwnPropertySymbols","setPrototypeOf"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es2017-object",()=>["values","entries","getOwnPropertyDescriptors"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es-observable",()=>void 0!==s.a.Observable,!0),Object(r.a)("es6-promise",()=>void 0!==s.a.Promise&&!0,!0),Object(r.a)("es6-set",()=>{if("function"==typeof s.a.Set){const e=new s.a.Set([1]);return e.has(1)&&"keys"in e&&"function"==typeof e.keys&&!0}return!1},!0),Object(r.a)("es6-string",()=>["fromCodePoint"].every(e=>"function"==typeof s.a.String[e])&&["codePointAt","normalize","repeat","startsWith","endsWith","includes"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-string-raw",()=>{function e(e,...t){const o=[...e];return o.raw=e.raw,o}if("raw"in s.a.String){let t=e`a\n${1}`;return t.raw=["a\\n"],"a:\\n"===s.a.String.raw(t,42)}return!1},!0),Object(r.a)("es2017-string",()=>["padStart","padEnd"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-symbol",()=>void 0!==s.a.Symbol&&"symbol"==typeof Symbol(),!0),Object(r.a)("es6-weakmap",()=>{if(void 0!==s.a.WeakMap){const e={},t={},o=new s.a.WeakMap([[e,1]]);return Object.freeze(e),1===o.get(e)&&o.set(t,2)===o&&!0}return!1},!0),Object(r.a)("microtasks",()=>!0,!0),Object(r.a)("postmessage",()=>void 0!==s.a.window&&"function"==typeof s.a.postMessage,!0),Object(r.a)("raf",()=>"function"==typeof s.a.requestAnimationFrame,!0),Object(r.a)("setimmediate",()=>void 0!==s.a.setImmediate,!0),Object(r.a)("dom-mutationobserver",()=>{if(Boolean(s.a.MutationObserver||s.a.WebKitMutationObserver)){const e=document.createElement("div"),t=new(s.a.MutationObserver||s.a.WebKitMutationObserver)(function(){});return t.observe(e,{attributes:!0}),e.style.setProperty("display","block"),Boolean(t.takeRecords().length)}return!1},!0),Object(r.a)("dom-webanimation",()=>void 0!==s.a.Animation&&void 0!==s.a.KeyframeEffect,!0)},"./node_modules/@dojo/framework/shim/support/queue.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/has.mjs");function s(e){e&&e.isActive&&e.callback&&e.callback()}function n(e,t){return{destroy:function(){this.destroy=function(){},e.isActive=!1,e.callback=null,t&&t()}}}!function(){let e,t;{const e=[];r.a.addEventListener("message",function(t){t.source===r.a&&"dojo-queue-message"===t.data&&(t.stopPropagation(),e.length&&s(e.shift()))}),t=function(t){e.push(t),r.a.postMessage("dojo-queue-message","*")}}function o(o){const r={isActive:!0,callback:o},s=t(r);return n(r,e&&function(){e(s)})}}();!function(){function e(e){const t={isActive:!0,callback:e},o=requestAnimationFrame(s.bind(null,t));return n(t,function(){cancelAnimationFrame(o)})}}();!function(){let e;e=function(e){r.a.Promise.resolve(e).then(s)}}()},"./node_modules/@dojo/framework/shim/support/util.mjs":function(e,t,o){"use strict";t.a=function(e,t=!1,o=!0,r=!0){return{value:e,enumerable:t,writable:o,configurable:r}},t.b=function(e){return function(t,...o){return e.apply(t,o)}}},"./node_modules/@dojo/framework/widget-core/Injector.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/core/Evented.mjs");class s extends r.a{constructor(e){super(),this._payload=e}setInvalidator(e){this._invalidator=e}get(){return this._payload}set(e){this._payload=e,this._invalidator&&this._invalidator()}}t.a=s},"./node_modules/@dojo/framework/widget-core/NodeHandler.mjs":function(e,t,o){"use strict";var r,s=o("./node_modules/@dojo/framework/core/Evented.mjs"),n=o("./node_modules/@dojo/framework/shim/Map.mjs");!function(e){e.Projector="Projector",e.Widget="Widget"}(r||(r={}));t.a=class extends s.a{constructor(){super(...arguments),this._nodeMap=new n.b}get(e){return this._nodeMap.get(e)}has(e){return this._nodeMap.has(e)}add(e,t){this._nodeMap.set(t,e),this.emit({type:t})}addRoot(){this.emit({type:r.Widget})}addProjector(){this.emit({type:r.Projector})}clear(){this._nodeMap.clear()}}},"./node_modules/@dojo/framework/widget-core/Registry.mjs":function(e,t,o){"use strict";t.d=a;var r=o("./node_modules/@dojo/framework/shim/Promise.mjs"),s=o("./node_modules/@dojo/framework/shim/Map.mjs"),n=o("./node_modules/@dojo/framework/shim/Symbol.mjs"),i=o("./node_modules/@dojo/framework/core/Evented.mjs");const d=Object(n.a)("Widget Base");function a(e){return Boolean(e&&e._type===d)}t.b=d;class c extends i.a{emitLoadedEvent(e,t){this.emit({type:e,action:"loaded",item:t})}define(e,t){if(void 0===this._widgetRegistry&&(this._widgetRegistry=new s.b),this._widgetRegistry.has(e))throw new Error(`widget has already been registered for '${e.toString()}'`);this._widgetRegistry.set(e,t),t instanceof r.a?t.then(t=>(this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}):a(t)&&this.emitLoadedEvent(e,t)}defineInjector(e,t){if(void 0===this._injectorRegistry&&(this._injectorRegistry=new s.b),this._injectorRegistry.has(e))throw new Error(`injector has already been registered for '${e.toString()}'`);const o=new i.a,r={injector:t(()=>o.emit({type:"invalidate"})),invalidator:o};this._injectorRegistry.set(e,r),this.emitLoadedEvent(e,r)}get(e){if(!this._widgetRegistry||!this.has(e))return null;const t=this._widgetRegistry.get(e);if(a(t))return t;if(t instanceof r.a)return null;const o=t();return this._widgetRegistry.set(e,o),o.then(t=>((function(e){return Boolean(e&&e.hasOwnProperty("__esModule")&&e.hasOwnProperty("default")&&a(e.default))})(t)&&(t=t.default),this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}),null}getInjector(e){return this._injectorRegistry&&this.hasInjector(e)?this._injectorRegistry.get(e):null}has(e){return Boolean(this._widgetRegistry&&this._widgetRegistry.has(e))}hasInjector(e){return Boolean(this._injectorRegistry&&this._injectorRegistry.has(e))}}t.a=c,t.c=c},"./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/core/Evented.mjs"),n=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");t.a=class extends s.a{constructor(){super(),this._registry=new n.a,this._registryWidgetLabelMap=new r.a,this._registryInjectorLabelMap=new r.a,this.own(this._registry),this.own({destroy:()=>{this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry),this.baseRegistry=void 0)}})}set base(e){this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry)),this.baseRegistry=e}define(e,t){this._registry.define(e,t)}defineInjector(e,t){this._registry.defineInjector(e,t)}has(e){return this._registry.has(e)||Boolean(this.baseRegistry&&this.baseRegistry.has(e))}hasInjector(e){return this._registry.hasInjector(e)||Boolean(this.baseRegistry&&this.baseRegistry.hasInjector(e))}get(e,t=!1){return this._get(e,t,"get",this._registryWidgetLabelMap)}getInjector(e,t=!1){return this._get(e,t,"getInjector",this._registryInjectorLabelMap)}_get(e,t,o,r){const s=t?[this.baseRegistry,this._registry]:[this._registry,this.baseRegistry];for(let n=0;n{"loaded"===r.action&&this[o](e,t)===r.item&&this.emit({type:"invalidate"})});this.own(s),r.set(i,[...a,e])}}return null}}},"./node_modules/@dojo/framework/widget-core/WidgetBase.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/shim/WeakMap.mjs"),n=o("./node_modules/@dojo/framework/shim/Symbol.mjs"),i=o("./node_modules/@dojo/framework/widget-core/d.mjs"),d=o("./node_modules/@dojo/framework/widget-core/diff.mjs"),a=o("./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs"),c=o("./node_modules/@dojo/framework/widget-core/NodeHandler.mjs"),l=o("./node_modules/@dojo/framework/widget-core/vdom.mjs"),u=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");const m=new r.b,h=d.a.bind(null),f=n.a.for("dojoNoBind");t.b=f;class p{constructor(){this._initialProperties=!0,this._changedPropertyKeys=[],this._nodeHandler=new c.a,this._handles=[],this._children=[],this._decoratorCache=new r.b,this._properties={},this._boundRenderFunc=this.render.bind(this),this._boundInvalidate=this.invalidate.bind(this),l.b.set(this,{dirty:!0,onAttach:()=>{this.onAttach()},onDetach:()=>{this.onDetach(),this.destroy()},nodeHandler:this._nodeHandler,registry:()=>this.registry,coreProperties:{},rendering:!1,inputProperties:{}}),this._runAfterConstructors()}meta(e){void 0===this._metaMap&&(this._metaMap=new r.b);let t=this._metaMap.get(e);return t||(t=new e({invalidate:this._boundInvalidate,nodeHandler:this._nodeHandler,bind:this}),this.own(t),this._metaMap.set(e,t)),t}onAttach(){}onDetach(){}get properties(){return this._properties}get changedPropertyKeys(){return[...this._changedPropertyKeys]}__setCoreProperties__(e){const{baseRegistry:t}=e,o=l.b.get(this);o.coreProperties.baseRegistry!==t&&(void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry.base=t,this.invalidate()),o.coreProperties=e}__setProperties__(e){const t=l.b.get(this);t.inputProperties=e;const o=this._runBeforeProperties(e),r=this.getDecorator("registeredDiffProperty"),s=[],n=Object.keys(o);if(!1===this._initialProperties||0!==r.length){const e=[...n,...Object.keys(this._properties)],i=[],d={};let a=!1;for(let n=0;n{const r=-1!==s.indexOf(o),n=-1!==e.indexOf(t);r&&!n&&(t.call(this,this._properties,d),e.push(t))})}this._properties=d,this._changedPropertyKeys=s}else{this._initialProperties=!1;for(let e=0;e0&&this.invalidate()}get children(){return this._children}__setChildren__(e){(this._children.length>0||e.length>0)&&(this._children=e,this.invalidate())}__render__(){l.b.get(this).dirty=!1;let e=this._runBeforeRenders()();return e=this.runAfterRenders(e),this._nodeHandler.clear(),e}invalidate(){const e=l.b.get(this);e.invalidate&&e.invalidate()}render(){return Object(i.g)("div",{},this.children)}addDecorator(e,t){if(t=Array.isArray(t)?t:[t],this.hasOwnProperty("constructor")){let o=m.get(this.constructor);o||(o=new r.b,m.set(this.constructor,o));let s=o.get(e);s||(s=[],o.set(e,s)),s.push(...t)}else{const o=this.getDecorator(e);this._decoratorCache.set(e,[...o,...t])}}_buildDecoratorList(e){const t=[];let o=this.constructor;for(;o;){const r=m.get(o);if(r){const o=r.get(e);o&&t.unshift(...o)}o=Object.getPrototypeOf(o)}return t}getDecorator(e){let t=this._decoratorCache.get(e);return void 0!==t?t:(t=this._buildDecoratorList(e),this._decoratorCache.set(e,t),t)}_bindFunctionProperty(e,t){if("function"==typeof e&&!e[f]&&!1===Object(u.d)(e)){void 0===this._bindFunctionPropertyMap&&(this._bindFunctionPropertyMap=new s.a);const o=this._bindFunctionPropertyMap.get(e)||{};let{boundFunc:r,scope:n}=o;return void 0!==r&&n===t||(r=e.bind(t),this._bindFunctionPropertyMap.set(e,{boundFunc:r,scope:t})),r}return e}get registry(){return void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry}_runBeforeProperties(e){const t=this.getDecorator("beforeProperties");return t.length>0?t.reduce((e,t)=>Object.assign({},e,t.call(this,e)),Object.assign({},e)):e}_runBeforeRenders(){const e=this.getDecorator("beforeRender");return e.length>0?e.reduce((e,t)=>{const o=t.call(this,e,this._properties,this._children);return o||(console.warn("Render function not returned from beforeRender, using previous render"),e)},this._boundRenderFunc):this._boundRenderFunc}runAfterRenders(e){const t=this.getDecorator("afterRender");return t.length>0&&(e=t.reduce((e,t)=>t.call(this,e),e)),void 0!==this._metaMap&&this._metaMap.forEach(e=>{e.afterRender()}),e}_runAfterConstructors(){const e=this.getDecorator("afterConstructor");e.length>0&&e.forEach(e=>e.call(this))}own(e){this._handles.push(e)}destroy(){for(;this._handles.length>0;){const e=this._handles.pop();e&&e.destroy()}}}t.a=p,p._type=u.b},"./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs":function(e,t,o){"use strict";let r="",s="";function n(e){""===s&&function(e){if("WebkitTransition"in e.style)r="webkitTransitionEnd",s="webkitAnimationEnd";else{if(!("transition"in e.style||"MozTransition"in e.style))throw new Error("Your browser is not supported");r="transitionend",s="animationend"}}(e)}function i(e,t,o){n(e);let i=!1,d=function(){i||(i=!0,e.removeEventListener(r,d),e.removeEventListener(s,d),o())};t(),e.addEventListener(s,d),e.addEventListener(r,d)}t.a={enter:function(e,t,o){const r=t.enterAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(r)})},()=>{e.classList.remove(o),e.classList.remove(r)})},exit:function(e,t,o,r){const s=t.exitAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(s)})},()=>{r()})}}},"./node_modules/@dojo/framework/widget-core/d.mjs":function(e,t,o){"use strict";t.f=d,t.e=a,t.d=function(e){return Boolean(e&&"string"!=typeof e&&e.type===i)},t.h=function(e,t,o=[]){return{children:o,widgetConstructor:e,properties:t,type:s}},t.g=function(e,t={},o){let r,s=t;Array.isArray(t)&&(o=t,s={});"function"==typeof s&&(r=s,s={});return{tag:e,deferredPropertiesCallback:r,children:o,properties:s,type:n}},t.c=function({node:e,attrs:t={},props:o={},on:r={},diffType:s="none"},n){return{tag:c(e)?e.tagName.toLowerCase():"",properties:o,attributes:t,events:r,children:n,type:i,domNode:e,text:c(e)?void 0:e.data,diffType:s}};var r=o("./node_modules/@dojo/framework/shim/Symbol.mjs");const s=Object(r.a)("Identifier for a WNode.");t.b=s;const n=Object(r.a)("Identifier for a VNode.");t.a=n;const i=Object(r.a)("Identifier for a VNode created using existing dom.");function d(e){return Boolean(e&&"string"!=typeof e&&e.type===s)}function a(e){return Boolean(e&&"string"!=typeof e&&(e.type===n||e.type===i))}function c(e){return!!e.tagName}},"./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("afterRender",o?t[o]:e)})}},"./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs");function n(){return Object(r.a)((e,t)=>{Object(s.a)(function(){this.invalidate()})(e)})}},"./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("beforeProperties",o?t[o]:e)})}},"./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs"),s=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");function n({tag:e,properties:t=[],attributes:o=[],events:n=[],childType:i=r.CustomElementChildType.DOJO,registryFactory:d=(()=>new s.c)}){return function(r){r.prototype.__customElementDescriptor={tagName:e,attributes:o,properties:t,events:n,childType:i,registryFactory:d}}}},"./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/framework/widget-core/diff.mjs");function n(e,t=s.a,o){return Object(r.a)((r,s)=>{r.addDecorator(`diffProperty:${e}`,t.bind(null)),r.addDecorator("registeredDiffProperty",e),(o||s)&&r.addDecorator("diffReaction",{propertyName:e,reaction:s?r[s]:o})})}},"./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs":function(e,t,o){"use strict";function r(e){return function(t,o,r){"function"==typeof t?e(t.prototype,void 0):e(t,o)}}t.a=r},"./node_modules/@dojo/framework/widget-core/decorators/inject.mjs":function(e,t,o){"use strict";t.a=d;var r=o("./node_modules/@dojo/framework/shim/WeakMap.mjs"),s=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs");const i=new r.a;function d({name:e,getProperties:t}){return Object(s.a)((o,r)=>{Object(n.a)(function(o){const r=this.registry.getInjector(e);if(r){const{injector:e,invalidator:s}=r,n=i.get(this)||[];return 0===n.length&&i.set(this,n),-1===n.indexOf(r)&&(this.own(s.on("invalidate",()=>{this.invalidate()})),n.push(r)),t(e(),o)}})(o)})}},"./node_modules/@dojo/framework/widget-core/diff.mjs":function(e,t,o){"use strict";t.b=i,t.a=function(e,t){let o;o="function"==typeof t?t._type===r.b?n(e,t):function(e,t){return{changed:!1,value:t}}(0,t):s(t)?i(e,t):n(e,t);return o};var r=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");function s(e){return"[object Object]"===Object.prototype.toString.call(e)||Array.isArray(e)}function n(e,t){return{changed:e!==t,value:t}}function i(e,t){let o=!1;const r=e&&s(e),n=t&&s(t);if(!r||!n)return{changed:!0,value:t};const i=Object.keys(e),d=Object.keys(t);return{changed:o=i.length!==d.length||d.some(o=>t[o]!==e[o]),value:t}}},"./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs":function(e,t,o){"use strict";t.a=u;var r,s,n=o("./node_modules/tslib/tslib.es6.js"),i=o("./node_modules/@dojo/framework/core/lang.mjs"),d=o("./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs"),a=o("./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs"),c=o("./node_modules/@dojo/framework/widget-core/d.mjs"),l=o("./node_modules/@dojo/framework/widget-core/vdom.mjs");function u(e){class t extends e{constructor(...e){super(...e),this._root=document.body,this._async=!0,this._projectorProperties={},this._projectionOptions={transitions:d.a},this.root=document.body,this.projectorState=r.Detached}append(e){const t={type:s.Append,root:e};return this._attach(t)}merge(e){const t={type:s.Merge,root:e};return this._attach(t)}set root(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change root element");this._root=e}get root(){return this._root}get async(){return this._async}set async(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change async mode");this._async=e}sandbox(e=document){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot create sandbox");this._async=!1;const t=this.root;this.own({destroy:()=>{this._root=t}}),this._attach({root:e.createDocumentFragment(),type:s.Append})}setChildren(e){this.__setChildren__(e)}setProperties(e){this.__setProperties__(e)}__setProperties__(e){this._projectorProperties&&this._projectorProperties.registry!==e.registry&&this._projectorProperties.registry&&this._projectorProperties.registry.destroy(),this._projectorProperties=Object(i.a)({},e),super.__setCoreProperties__({bind:this,baseRegistry:e.registry}),super.__setProperties__(e)}toHtml(){if(this.projectorState!==r.Attached||!this._projection)throw new Error("Projector is not attached, cannot return an HTML string of projection.");return this._projection.domNode.childNodes[0].outerHTML}afterRender(e){let t=e;return"string"!=typeof e&&null!==e&&void 0!==e||(t=Object(c.g)("span",{},[e])),t}destroy(){super.destroy()}_attach({type:e,root:t}){if(t&&(this.root=t),this._attachHandle)return this._attachHandle;this.projectorState=r.Attached;const o={destroy:()=>{this.projectorState===r.Attached&&(this._projection=void 0,this.projectorState=r.Detached)}};switch(this.own(o),this._attachHandle=o,this._projectionOptions=Object.assign({},this._projectionOptions,{sync:!this._async}),e){case s.Append:this._projection=l.a.append(this.root,this,this._projectionOptions);break;case s.Merge:this._projection=l.a.merge(this.root,this,this._projectionOptions)}return this._attachHandle}}return n.a([Object(a.a)()],t.prototype,"afterRender",null),t}!function(e){e[e.Attached=1]="Attached",e[e.Detached=2]="Detached"}(r||(r={})),function(e){e[e.Append=1]="Append",e[e.Merge=2]="Merge"}(s||(s={}))},"./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs":function(e,t,o){"use strict";t.c=function(e){return Object(i.a)(t=>{t.addDecorator("baseThemeClasses",e)})},t.b=function(e,t){const o=new s.a(e);return t.defineInjector(l,e=>(o.setInvalidator(e),()=>o.get())),o},t.a=u;var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/framework/widget-core/Injector.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/inject.mjs"),i=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),d=o("./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs"),a=o("./node_modules/@dojo/framework/widget-core/diff.mjs");const c=" _key",l=Symbol("theme");function u(e){let t=class extends e{constructor(){super(...arguments),this._registeredBaseThemeKeys=[],this._recalculateClasses=!0,this._theme={}}theme(e){return this._recalculateClasses&&this._recalculateThemeClasses(),Array.isArray(e)?e.map(e=>this._getThemeClass(e)):this._getThemeClass(e)}onPropertiesChanged(){this._recalculateClasses=!0}_getThemeClass(e){if(void 0===e||null===e)return e;const t=this.properties.extraClasses||{},o=this._baseThemeClassesReverseLookup[e];let r=[];return o?(t[o]&&r.push(t[o]),this._theme[o]?r.push(this._theme[o]):r.push(this._registeredBaseTheme[o]),r.join(" ")):(console.warn(`Class name: '${e}' not found in theme`),null)}_recalculateThemeClasses(){const{theme:e={}}=this.properties,t=this.getDecorator("baseThemeClasses");this._registeredBaseTheme||(this._registeredBaseTheme=t.reduce((e,t)=>{const o=c,s=t[o],n=r.b(t,["symbol"==typeof o?o:o+""]);return this._registeredBaseThemeKeys.push(s),Object.assign({},e,n)},{}),this._baseThemeClassesReverseLookup=t.reduce((e,t)=>(Object.keys(t).forEach(o=>{e[t[o]]=o}),e),{})),this._theme=this._registeredBaseThemeKeys.reduce((t,o)=>Object.assign({},t,e[o]),{}),this._recalculateClasses=!1}};return r.a([Object(d.a)("theme",a.b),Object(d.a)("extraClasses",a.b)],t.prototype,"onPropertiesChanged",null),t=r.a([Object(n.a)({name:l,getProperties:(e,t)=>t.theme?{}:{theme:e}})],t)}},"./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"CustomElementChildType",function(){return r}),t.DomToWidgetWrapper=m,t.create=h,t.register=f;var r,s=o("./node_modules/tslib/tslib.es6.js"),n=o("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"),i=o("./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs"),d=o("./node_modules/@dojo/framework/shim/array.mjs"),a=o("./node_modules/@dojo/framework/widget-core/d.mjs"),c=o("./node_modules/@dojo/framework/shim/global.mjs"),l=o("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"),u=o("./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs");function m(e){let t=class extends n.a{render(){const t=Object.keys(this.properties).reduce((e,t)=>{const o=this.properties[t];return 0===t.indexOf("on")&&(t=`__${t}`),e[t]=o,e},{});return Object(a.c)({node:e,props:t,diffType:"dom"})}static get domNode(){return e}};return t=s.a([Object(u.a)()],t)}function h(e,t){const{attributes:o,childType:s,registryFactory:u}=e,h={};return o.forEach(e=>{const t=e.toLowerCase();h[t]=e}),class extends HTMLElement{constructor(){super(...arguments),this._properties={},this._children=[],this._eventProperties={},this._initialised=!1}connectedCallback(){if(this._initialised)return;const o={},{attributes:h,properties:f,events:p}=e;this._properties=Object.assign({},this._properties,this._attributesToProperties(h)),[...h,...f].forEach(e=>{const t=this[e],r=e.replace(/^on/,"__");void 0!==t&&(this._properties[e]=t),r!==e&&(o[r]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}),o[e]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}}),p.forEach(e=>{const t=e.replace(/^on/,"").toLowerCase(),r=e.replace(/^on/,"__on");o[r]={get:()=>this._getEventProperty(e),set:t=>this._setEventProperty(e,t)},this._eventProperties[e]=void 0,this._properties[e]=((...o)=>{const r=this._getEventProperty(e);"function"==typeof r&&r(...o),this.dispatchEvent(new CustomEvent(t,{bubbles:!1,detail:o}))})}),Object.defineProperties(this,o);const g=s===r.TEXT?this.childNodes:this.children;Object(d.a)(g).forEach(e=>{s===r.DOJO?(e.addEventListener("dojo-ce-render",()=>this._render()),e.addEventListener("dojo-ce-connected",()=>this._render()),this._children.push(m(e))):this._children.push(Object(a.c)({node:e,diffType:"dom"}))}),this.addEventListener("dojo-ce-connected",e=>this._childConnected(e));const j=this._properties,_=()=>this.__children__(),y=u(),b=Object(l.b)(this._getTheme(),y);c.a.addEventListener("dojo-theme-set",()=>b.set(this._getTheme()));const w=Object(i.a)(class extends n.a{render(){return Object(a.h)(t,j,_())}});this._projector=new w,this._projector.setProperties({registry:y}),this._projector.append(this),this._initialised=!0,this.dispatchEvent(new CustomEvent("dojo-ce-connected",{bubbles:!0,detail:this}))}_getTheme(){if(c.a&&c.a.dojoce&&c.a.dojoce.theme)return c.a.dojoce.themes[c.a.dojoce.theme]}_childConnected(e){const t=e.detail;if(t.parentNode===this){this._children.some(e=>e.domNode===t)||(t.addEventListener("dojo-ce-render",()=>this._render()),this._children.push(m(t)),this._render())}}_render(){this._projector&&(this._projector.invalidate(),this.dispatchEvent(new CustomEvent("dojo-ce-render",{bubbles:!1,detail:this})))}__properties__(){return Object.assign({},this._properties,this._eventProperties)}__children__(){return s===r.DOJO?this._children.filter(e=>e.domNode.isWidget).map(e=>{const{domNode:t}=e;return Object(a.h)(e,Object.assign({},t.__properties__()),[...t.__children__()])}):this._children}attributeChangedCallback(e,t,o){const r=h[e];this._setProperty(r,o)}_setEventProperty(e,t){this._eventProperties[e]=t}_getEventProperty(e){return this._eventProperties[e]}_setProperty(e,t){"function"==typeof t&&(t[n.b]=!0),this._properties[e]=t,this._render()}_getProperty(e){return this._properties[e]}_attributesToProperties(e){return e.reduce((e,t)=>{const o=t.toLowerCase(),r=this.getAttribute(o);return null!==r&&(e[t]=r),e},{})}static get observedAttributes(){return Object.keys(h)}get isWidget(){return!0}}}function f(e){const t=e.prototype&&e.prototype.__customElementDescriptor;if(!t)throw new Error("Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?");c.a.customElements.define(t.tagName,h(t,e))}!function(e){e.DOJO="DOJO",e.NODE="NODE",e.TEXT="TEXT"}(r||(r={})),t.default=f},"./node_modules/@dojo/framework/widget-core/vdom.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=o("./node_modules/@dojo/framework/shim/array.mjs"),n=o("./node_modules/@dojo/framework/widget-core/d.mjs"),i=o("./node_modules/@dojo/framework/widget-core/Registry.mjs"),d=o("./node_modules/@dojo/framework/shim/WeakMap.mjs");const a="http://www.w3.org/2000/svg",c="http://www.w3.org/1999/xlink",l=[],u=["focus","blur","scrollIntoView","click"],m=new d.a;t.b=m;const h=new d.a,f=new d.a,p=new d.a;function g(e,t){return Object(n.e)(e)&&Object(n.e)(t)?(!Object(n.d)(e)&&!Object(n.d)(t)||e.domNode===t.domNode)&&(e.tag===t.tag&&e.properties.key===t.properties.key):!(!Object(n.f)(e)||!Object(n.f)(t))&&((void 0!==e.instance||"string"!=typeof t.widgetConstructor)&&(e.widgetConstructor===t.widgetConstructor&&e.properties.key===t.properties.key))}const j=function(){throw new Error("Provide a transitions object to the projectionOptions to do animations")};function _(e){if("string"!=typeof e)throw new Error("Style values must be strings")}function y(e,t,o,r,s,n){const i=p.get(r.projectorInstance),a=i.nodeMap.get(e)||new d.a;if(n){const o=a.get(n);e.removeEventListener(t,o)}let c=o.bind(s);"input"===t&&(c=function(e){o.call(this,e),e.target["oninput-value"]=e.target.value}.bind(s)),e.addEventListener(t,c),a.set(o,c),i.nodeMap.set(e,a)}function b(e,t){if(t){const o=t.split(" ");for(let t=0;t{r[e]()})}}function k(e,t,o,r,s=!1){const n=p.get(r.projectorInstance).nodeMap.get(e);n&&Object.keys(t).forEach(r=>{const i="on"===r.substr(0,2)||s,d=s?r:r.substr(2);if(i&&!o[r]){const o=n.get(t[r]);o&&e.removeEventListener(d,o)}})}function O(e,t,o,r){r.namespace===a&&"href"===t?e.setAttributeNS(c,t,o):"role"===t&&""===o||void 0===o?e.removeAttribute(t):e.setAttribute(t,o)}function P(e,t,o,r){const s=Object.keys(o),n=s.length;for(let i=0;i0)if(c&&0!==c.length){const r=[...o];for(let o=0;o0&&R(r.children,t));else{if(!r.coreProperties){const e=m.get(t);r.coreProperties={bind:t,baseRegistry:e.coreProperties.baseRegistry}}r.children&&r.children.length>0&&R(r.children,t)}o++}else e.splice(o,1)}return e}function A(e,t){if(Object(n.e)(e)&&e.properties){const o=e.properties.enterAnimation;o&&("function"==typeof o?o(e.domNode,e.properties):t.enter(e.domNode,e.properties,o))}}function x(e,t,o){if(Object(n.f)(e)){const r=h.get(e.instance),s=(r?r.dnode.rendered:e.rendered)||l;if(e.instance){m.get(e.instance).onDetach(),h.delete(e.instance)}for(let e=0;e0)for(let r=0;r{let d=void 0,a=o,m=f+1,p=o[f];if(p||(p=t[0],m=1,a=t),p){let t=[p];for(;t.length;){const o=t.shift();if(Object(n.f)(o)){const e=h.get(o.instance);e&&e.dnode.rendered&&t.push(...e.dnode.rendered)}else if(o.domNode){if(o.domNode.parentElement!==e.domNode)break;d=o.domNode;break}0===t.length&&a[m]&&(t.push(a[m]),m++)}}I(l,e,r.slice(j+1),d,i,s),A(l,c);const g=j;u.afterRenderCallbacks.push(()=>{M(r,g,s)})};if(!a||-1===m){p(),j++;continue}const y=()=>{const e=f;if(u.afterRenderCallbacks.push(()=>{M(o,e,s)}),Object(n.f)(a)){const e=h.get(a.instance);e&&(a=e.dnode)}x(a,c,i)};-1!==C(r,a,j+1)?(p(),y(),f++,j++):(y(),f++)}if(d>f)for(m=f;m{M(o,e,s)});let t=o[m];if(Object(n.f)(t)){const e=h.get(t.instance);e&&(t=e.dnode)}x(t,c,i)}return _}function S(e,t,o,r,i,d){if(void 0===t)return;const a=p.get(o.projectorInstance);a.merge&&void 0===d&&(d=Object(s.a)(e.domNode.childNodes));const c=o.transitions;o=Object.assign({},o,{depth:o.depth+1});for(let s=0;s0;)(e=d.shift())&&e.tagName===(l.tag.toUpperCase()||void 0)&&(l.domNode=e)}I(l,e,u,i,o,r)}else I(l,e,u,i,o,r,d);A(l,c)}}function D(e,t,o,r){if(S(t,t.children,r,o,void 0),"function"==typeof t.deferredPropertiesCallback&&void 0===t.inserted&&W(t,r),t.attributes&&t.events){P(e,{},t.attributes,r),E(e,{},t.properties,r,!1),k(e,{},t.events,r,!0);const o=t.events;Object.keys(o).forEach(s=>{y(e,s,o[s],r,t.properties.bind)})}else E(e,{},t.properties,r);if(null!==t.properties.key&&void 0!==t.properties.key){m.get(o).nodeHandler.add(e,`${t.properties.key}`)}t.inserted=!0}function I(e,t,o,r,s,d,c){let l;const u=p.get(s.projectorInstance);if(Object(n.f)(e)){let{widgetConstructor:n}=e;const a=m.get(d);if(!Object(i.d)(n)){const e=a.registry().get(n);if(null===e)return;n=e}const l=new n;e.instance=l,f.set(l,o);const p=m.get(l);p.invalidate=(()=>{p.dirty=!0,!1===p.rendering&&(u.renderQueue.push({instance:l,depth:s.depth}),H(s))}),p.rendering=!0,l.__setCoreProperties__(e.coreProperties),l.__setChildren__(e.children),l.__setProperties__(e.properties);const g=l.__render__();if(p.rendering=!1,g){const o=R(g,l);e.rendered=o,S(t,o,s,l,r,c)}h.set(l,{dnode:e,parentVNode:t}),p.nodeHandler.addRoot(),u.afterRenderCallbacks.push(()=>{p.onAttach()})}else{if(u.merge&&void 0!==u.mergeElement)return l=e.domNode=s.mergeElement,u.mergeElement=void 0,void D(l,e,d,s);const o=t.domNode.ownerDocument;if(e.tag||"string"!=typeof e.text)void 0===e.domNode?("svg"===e.tag&&(s=Object.assign({},s,{namespace:a})),l=void 0!==s.namespace?e.domNode=o.createElementNS(s.namespace,e.tag):e.domNode=e.domNode||o.createElement(e.tag)):l=e.domNode,D(l,e,d,s),void 0!==r?t.domNode.insertBefore(l,r):l.parentNode!==t.domNode&&t.domNode.appendChild(l);else if(void 0!==e.domNode&&t.domNode){const o=e.domNode.ownerDocument.createTextNode(e.text);t.domNode===e.domNode.parentNode?t.domNode.replaceChild(o,e.domNode):(t.domNode.appendChild(o),e.domNode.parentNode&&e.domNode.parentNode.removeChild(e.domNode)),e.domNode=o}else l=e.domNode=o.createTextNode(e.text),void 0!==r?t.domNode.insertBefore(l,r):t.domNode.appendChild(l)}}function L(e,t,o,r,s,i,d){if(Object(n.f)(t)){const{instance:r}=e,{parentVNode:s,dnode:n}=h.get(r),a=n?n.rendered:e.rendered,c=m.get(r);if(c.rendering=!0,r.__setCoreProperties__(t.coreProperties),r.__setChildren__(t.children),r.__setProperties__(t.properties),f.set(r,d),t.instance=r,!0===c.dirty){const e=r.__render__();c.rendering=!1,t.rendered=R(e,r),T(s,i,a,t.rendered,r,o)}else c.rendering=!1,t.rendered=a;h.set(r,{dnode:t,parentVNode:s}),c.nodeHandler.addRoot()}else{if(e===t)return!1;const r=t.domNode=e.domNode;let n=!1,d=!1;if(t.tag||"string"!=typeof t.text){if(t.tag&&0===t.tag.lastIndexOf("svg",0)&&(o=Object.assign({},o,{namespace:a})),e.children!==t.children){const r=R(t.children,s);t.children=r,d=T(t,i,e.children,r,s,o)||d}const n=function(e,t,o){const{diffType:r,properties:s,attributes:n}=o;if(!r||"vdom"===r)return{properties:t.properties,attributes:t.attributes,events:t.events};if("none"===r)return{properties:{},attributes:t.attributes?{}:void 0,events:t.events};let i={properties:{}};return n?(i.attributes={},i.events=t.events,Object.keys(s).forEach(t=>{i.properties[t]=e[t]}),Object.keys(n).forEach(t=>{i.attributes[t]=e.getAttribute(t)}),i):(i.properties=Object.keys(s).reduce((t,o)=>(t[o]=e.getAttribute(o)||e[o],t),{}),i)}(r,e,t);if(t.attributes&&t.events){P(r,n.attributes,t.attributes,o),d=E(r,n.properties,t.properties,o,!1)||d,k(r,n.events,t.events,o,!0);const e=t.events;Object.keys(e).forEach(s=>{y(r,s,e[s],o,t.properties.bind,n.events[s])})}else d=E(r,n.properties,t.properties,o)||d;if(null!==t.properties.key&&void 0!==t.properties.key){m.get(s).nodeHandler.add(r,`${t.properties.key}`)}}else if(t.text!==e.text){const e=r.ownerDocument.createTextNode(t.text);return r.parentNode.replaceChild(e,r),t.domNode=e,n=!0}d&&t.properties&&t.properties.updateAnimation&&t.properties.updateAnimation(r,t.properties,e.properties)}}function W(e,t){e.decoratedDeferredProperties=e.properties;const o=e.deferredPropertiesCallback(!!e.inserted),r=p.get(t.projectorInstance);e.properties=Object.assign({},o,e.decoratedDeferredProperties),r.deferredRenderCallbacks.push(()=>{const o=Object.assign({},e.deferredPropertiesCallback(!!e.inserted),e.decoratedDeferredProperties);E(e.domNode,e.properties,o,t),e.properties=o})}function B(e){const t=p.get(e.projectorInstance);if(t.deferredRenderCallbacks.length)if(e.sync)for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}else r.a.requestAnimationFrame(()=>{for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}})}function F(e){const t=p.get(e.projectorInstance);if(e.sync)for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}else r.a.requestIdleCallback?r.a.requestIdleCallback(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}}):setTimeout(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}})}function H(e){const t=p.get(e.projectorInstance);e.sync?$(e):void 0===t.renderScheduled&&(t.renderScheduled=r.a.requestAnimationFrame(()=>{$(e)}))}function $(e){const t=p.get(e.projectorInstance);t.renderScheduled=void 0;const o=[...t.renderQueue];t.renderQueue=[],o.sort((e,t)=>e.depth-t.depth);const r=[];for(;o.length;){const{instance:t}=o.shift();if(h.has(t)&&-1===r.indexOf(t)){r.push(t);const{parentVNode:o,dnode:s}=h.get(t),n=m.get(t),i=f.get(t);L(s,N(t,n),e,0,t,i,i)}}F(e),B(e)}const q={append:function(e,t,o={}){const r=m.get(t),s=function(e,t){const o={namespace:void 0,styleApplyer:function(e,t,o){e.style[t]=o},transitions:{enter:j,exit:j},depth:0,merge:!1,sync:!1,projectorInstance:t};return Object.assign({},o,e)}(o,t),i={afterRenderCallbacks:[],deferredRenderCallbacks:[],nodeMap:new d.a,renderScheduled:void 0,renderQueue:[],merge:o.merge||!1,mergeElement:o.mergeElement};p.set(t,i),s.rootNode=e;const a={tag:"",properties:{},children:void 0,domNode:s.rootNode,type:n.a};const c=N(t,r);return h.set(t,{dnode:c,parentVNode:a}),r.invalidate=(()=>{r.dirty=!0,!1===r.rendering&&(i.renderQueue.push({instance:t,depth:s.depth}),H(s))}),L(c,c,s,0,t,[],[]),i.afterRenderCallbacks.push(()=>{r.onAttach()}),B(s),F(s),{domNode:s.rootNode}},create:function(e,t){return this.append(document.createElement("div"),e,t)},merge:function(e,t,o={}){o.merge=!0,o.mergeElement=e;const r=this.append(e.parentNode,t,o);return p.get(t).merge=!1,r}};t.a=q},"./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js":function(e,t,o){var r=o("./src/menu/Menu.ts"),s=o("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs").default,n=r.default;n&&s(n)},"./node_modules/process/browser.js":function(e,t){var o,r,s=e.exports={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function d(e){if(o===setTimeout)return setTimeout(e,0);if((o===n||!o)&&setTimeout)return o=setTimeout,setTimeout(e,0);try{return o(e,0)}catch(t){try{return o.call(null,e,0)}catch(t){return o.call(this,e,0)}}}!function(){try{o="function"==typeof setTimeout?setTimeout:n}catch(e){o=n}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var a,c=[],l=!1,u=-1;function m(){l&&a&&(l=!1,a.length?c=a.concat(c):u=-1,c.length&&h())}function h(){if(!l){var e=d(m);l=!0;for(var t=c.length;t;){for(a=c,c=[];++u1)for(var o=1;o=0;d--)(s=e[d])&&(i=(n<3?s(i):n>3?s(t,o,i):s(t,o))||i);return n>3&&i&&Object.defineProperty(t,o,i),i}; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use @@ -21,5 +21,5 @@ MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ -Object.setPrototypeOf||Array;Object.assign},"./node_modules/webpack/buildin/global.js":function(e,t){var o;o=function(){return this}();try{o=o||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(o=window)}e.exports=o},"./src/menu/Menu.ts":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"Menu",function(){return c});var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/widget-core/d.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/customElement.mjs"),i=o("./node_modules/@dojo/widget-core/mixins/Themed.mjs"),d=o("./node_modules/@dojo/widget-core/WidgetBase.mjs"),a=o("./src/menu/menu.m.css");o.n(a);let c=class extends(Object(i.a)(d.a)){_onSelected(e,t){this._selectedId=e,this.properties.onSelected(t),this.invalidate()}render(){const e=this.children.map((e,t)=>{if(e){const o={onSelected:e=>{this._onSelected(t,e)}};void 0!==this._selectedId&&(o.selected=t===this._selectedId),e.properties=Object.assign({},e.properties,o)}return e});return Object(s.g)("nav",{classes:this.theme(a.root)},[Object(s.g)("ol",{classes:this.theme(a.menuContainer)},e)])}};c=r.a([Object(n.a)({tag:"demo-menu",events:["onSelected"]}),Object(i.c)(a)],c),t.default=c},"./src/menu/menu.m.css":function(e,t){e.exports={" _key":"test-app/menu",root:"_3bA6jdSn",menuContainer:"_1eoGfqku"}},0:function(e,t,o){e.exports=o("./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js")}}); +Object.setPrototypeOf||Array;Object.assign},"./node_modules/webpack/buildin/global.js":function(e,t){var o;o=function(){return this}();try{o=o||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(o=window)}e.exports=o},"./src/menu/Menu.ts":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"Menu",function(){return c});var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/framework/widget-core/d.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs"),i=o("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"),d=o("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"),a=o("./src/menu/menu.m.css");o.n(a);let c=class extends(Object(i.a)(d.a)){_onSelected(e,t){this._selectedId=e,this.properties.onSelected(t),this.invalidate()}render(){const e=this.children.map((e,t)=>{if(e){const o={onSelected:e=>{this._onSelected(t,e)}};void 0!==this._selectedId&&(o.selected=t===this._selectedId),e.properties=Object.assign({},e.properties,o)}return e});return Object(s.g)("nav",{classes:this.theme(a.root)},[Object(s.g)("ol",{classes:this.theme(a.menuContainer)},e)])}};c=r.a([Object(n.a)({tag:"demo-menu",events:["onSelected"]}),Object(i.c)(a)],c),t.default=c},"./src/menu/menu.m.css":function(e,t){e.exports={" _key":"test-app/menu",root:"_3bA6jdSn",menuContainer:"_1eoGfqku"}},0:function(e,t,o){e.exports=o("./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js")}}); //# sourceMappingURL=menu-1.0.0.js.map \ No newline at end of file diff --git a/test-app/fixtures/unix/dist/menu/menu-1.0.0.js.map b/test-app/fixtures/unix/dist/menu/menu-1.0.0.js.map index dfb2156..ccd09e2 100644 --- a/test-app/fixtures/unix/dist/menu/menu-1.0.0.js.map +++ b/test-app/fixtures/unix/dist/menu/menu-1.0.0.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 90c6db1ff77aa21b0220","webpack:///./node_modules/@dojo/core/Destroyable.mjs","webpack:///./node_modules/@dojo/core/Evented.mjs","webpack:///./node_modules/@dojo/core/lang.mjs","webpack:///./node_modules/@dojo/has/has.mjs","webpack:///./node_modules/@dojo/shim/Map.mjs","webpack:///./node_modules/@dojo/shim/Promise.mjs","webpack:///./node_modules/@dojo/shim/Symbol.mjs","webpack:///./node_modules/@dojo/shim/WeakMap.mjs","webpack:///./node_modules/@dojo/shim/array.mjs","webpack:///./node_modules/@dojo/shim/global.mjs","webpack:///./node_modules/@dojo/shim/number.mjs","webpack:///./node_modules/@dojo/shim/object.mjs","webpack:///./node_modules/@dojo/shim/string.mjs","webpack:///./node_modules/@dojo/shim/support/has.mjs","webpack:///./node_modules/@dojo/shim/support/queue.mjs","webpack:///./node_modules/@dojo/shim/support/util.mjs","webpack:///./node_modules/@dojo/widget-core/Injector.mjs","webpack:///./node_modules/@dojo/widget-core/NodeHandler.mjs","webpack:///./node_modules/@dojo/widget-core/Registry.mjs","webpack:///./node_modules/@dojo/widget-core/RegistryHandler.mjs","webpack:///./node_modules/@dojo/widget-core/WidgetBase.mjs","webpack:///./node_modules/@dojo/widget-core/animations/cssTransitions.mjs","webpack:///./node_modules/@dojo/widget-core/d.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/afterRender.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/customElement.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/diffProperty.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/inject.mjs","webpack:///./node_modules/@dojo/widget-core/diff.mjs","webpack:///./node_modules/@dojo/widget-core/mixins/Projector.mjs","webpack:///./node_modules/@dojo/widget-core/mixins/Themed.mjs","webpack:///./node_modules/@dojo/widget-core/registerCustomElement.mjs","webpack:///./node_modules/@dojo/widget-core/vdom.mjs","webpack:///./node_modules/@dojo/cli-build-widget/template/custom-element.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/menu/Menu.ts","webpack:///./src/menu/menu.m.css?ec11"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","noop","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_Promise__","resolve","destroyed","Error","Destroyable","[object Object]","this","handles","handle","Array","isArray","__WEBPACK_IMPORTED_MODULE_0__lang__","_handles","push","splice","indexOf","destroy","forEach","own","__webpack_exports__","regexMap","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__","Evented","__WEBPACK_IMPORTED_MODULE_1__Destroyable__","super","arguments","listenersMap","event","methods","type","globString","targetString","regex","has","RegExp","replace","set","test","isGlobMatch","method","listener","map","_addListener","listeners","destructor","called","createHandle","length","slice","testCache","testFunctions","testThenables","globalScope","window","global","self","staticFeatures","DojoHasEnvironment","staticCache","apply","add","feature","value","overwrite","normalizedFeature","toLowerCase","Boolean","exists","TypeError","then","isFeatureTestThenable","resolvedValue","result","document","location","process","versions","node","Map","__WEBPACK_IMPORTED_MODULE_1__global__","ShimPromise","__WEBPACK_IMPORTED_MODULE_0__global__","Promise","Symbol","wellKnown","__WEBPACK_IMPORTED_MODULE_2__support_util__","for","WeakMap","from","of","copyWithin","fill","find","findIndex","includes","__WEBPACK_IMPORTED_MODULE_4__support_util__","globalObject","Math","pow","assign","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","is","keys","getOwnPropertyDescriptors","entries","values","fromCodePoint","raw","codePointAt","endsWith","normalize","repeat","startsWith","padEnd","padStart","String","__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__","every","key","Number","POSITIVE_INFINITY","e","imul","Observable","Set","getCallSite","callSite","substitutions","key1","key2","freeze","postMessage","requestAnimationFrame","setImmediate","MutationObserver","WebKitMutationObserver","example","createElement","observer","observe","attributes","style","setProperty","takeRecords","undefined","Animation","KeyframeEffect","executeTask","item","isActive","callback","getQueueHandle","enqueue","queue","addEventListener","source","data","stopPropagation","shift","queueTask","id","queueAnimationTask","rafId","bind","cancelAnimationFrame","writable","nativeFunction","target","args","Injector","__WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__","payload","_payload","invalidator","_invalidator","NodeEventType","_nodeMap","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__","element","emit","Widget","Projector","clear","WIDGET_BASE_TYPE","__WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__","isWidgetBaseConstructor","_type","Registry","__WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__","widgetLabel","action","label","_widgetRegistry","toString","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__","widgetCtor","emitLoadedEvent","error","injectorFactory","_injectorRegistry","injectorItem","injector","promise","default","isWidgetConstructorDefaultExport","hasInjector","__WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__","_registry","__WEBPACK_IMPORTED_MODULE_2__Registry__","_registryWidgetLabelMap","_registryInjectorLabelMap","baseRegistry","delete","base","widget","define","defineInjector","globalPrecedence","_get","getFunctionName","labelMap","registries","registry","registeredLabels","on","decoratorMap","boundAuto","__WEBPACK_IMPORTED_MODULE_4__diff__","noBind","WidgetBase","_initialProperties","_changedPropertyKeys","_nodeHandler","__WEBPACK_IMPORTED_MODULE_6__NodeHandler__","_children","_decoratorCache","_properties","_boundRenderFunc","render","_boundInvalidate","invalidate","__WEBPACK_IMPORTED_MODULE_7__vdom__","dirty","onAttach","onDetach","nodeHandler","coreProperties","rendering","inputProperties","_runAfterConstructors","MetaType","_metaMap","cached","properties","changedPropertyKeys","instanceData","__WEBPACK_IMPORTED_MODULE_5__RegistryHandler__","originalProperties","_runBeforeProperties","registeredDiffPropertyNames","getDecorator","propertyNames","allProperties","checkedProperties","diffPropertyResults","runReactions","propertyName","previousProperty","newProperty","_bindFunctionProperty","diffFunctions","changed","_mapDiffPropertyReactions","reaction","previousProperties","newProperties","children","dNode","_runBeforeRenders","runAfterRenders","__WEBPACK_IMPORTED_MODULE_3__d__","decoratorKey","decoratorList","constructor","specificDecoratorList","decorators","allDecorators","instanceMap","unshift","getPrototypeOf","_buildDecoratorList","reduce","reactionPropertyMap","reactionArguments","__WEBPACK_IMPORTED_MODULE_8__Registry__","_bindFunctionPropertyMap","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__","bindInfo","boundFunc","scope","beforeProperties","beforePropertiesFunction","beforeRenders","beforeRenderFunction","updatedRender","console","warn","afterRenders","afterRenderFunction","meta","afterRender","afterConstructors","afterConstructor","pop","browserSpecificTransitionEndEventName","browserSpecificAnimationEndEventName","initialize","determineBrowserStyleNames","runAndCleanUp","startAnimation","finishAnimation","finished","transitionEnd","removeEventListener","enter","enterAnimation","activeClass","enterAnimationActive","classList","remove","exit","exitAnimation","removeNode","exitAnimationActive","child","DOMVNODE","widgetConstructor","WNODE","tag","propertiesOrChildren","deferredPropertiesCallback","VNODE","attrs","props","diffType","isElementNode","tagName","events","domNode","text","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__","isWNode","isVNode","__WEBPACK_IMPORTED_MODULE_0__handleDecorator__","propertyKey","addDecorator","alwaysRender","__WEBPACK_IMPORTED_MODULE_1__beforeProperties__","customElement","childType","__WEBPACK_IMPORTED_MODULE_0__registerCustomElement__","DOJO","registryFactory","__WEBPACK_IMPORTED_MODULE_1__Registry__","__customElementDescriptor","diffProperty","diffFunction","reactionFunction","handleDecorator","handler","descriptor","registeredInjectorsMap","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__","inject","getProperties","__WEBPACK_IMPORTED_MODULE_1__handleDecorator__","__WEBPACK_IMPORTED_MODULE_2__beforeProperties__","getInjector","registeredInjectors","__WEBPACK_IMPORTED_MODULE_0__Registry__","reference","ignore","isObjectOrArray","shallow","validOldProperty","validNewProperty","previousKeys","newKeys","some","ProjectorAttachState","AttachType","ProjectorMixin","Base","_root","body","_async","_projectorProperties","_projectionOptions","transitions","__WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__","root","projectorState","Detached","options","Append","_attach","Merge","Attached","async","doc","previousRoot","createDocumentFragment","__setChildren__","__setProperties__","__WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__","__setCoreProperties__","_projection","childNodes","outerHTML","__WEBPACK_IMPORTED_MODULE_4__d__","_attachHandle","sync","__WEBPACK_IMPORTED_MODULE_5__vdom__","append","merge","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__","Function","theme","__WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__","themeRegistry","themeInjector","__WEBPACK_IMPORTED_MODULE_1__Injector__","INJECTED_THEME_KEY","setInvalidator","THEME_KEY","ThemedMixin","Themed","_registeredBaseThemeKeys","_recalculateClasses","_theme","classes","_recalculateThemeClasses","className","_getThemeClass","extraClasses","themeClassName","_baseThemeClassesReverseLookup","resultClassNames","_registeredBaseTheme","join","baseThemes","finalBaseTheme","baseTheme","_a","currentClassNames","baseClass","themeKey","__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__","__WEBPACK_IMPORTED_MODULE_5__diff__","__WEBPACK_IMPORTED_MODULE_2__decorators_inject__","CustomElementChildType","DomToWidgetWrapper","__WEBPACK_IMPORTED_MODULE_1__WidgetBase__","__WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__","create","WidgetConstructor","attributeMap","attributeName","HTMLElement","_eventProperties","_initialised","domProperties","_attributesToProperties","filteredPropertyName","_getProperty","_setProperty","eventName","_getEventProperty","_setEventProperty","eventCallback","dispatchEvent","CustomEvent","bubbles","detail","defineProperties","TEXT","__WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__","childNode","_render","_childConnected","widgetProperties","renderChildren","__children__","themeContext","__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__","_getTheme","__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__","__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__","_projector","setProperties","dojoce","themes","parentNode","filter","Child","isWidget","__properties__","oldValue","getAttribute","observedAttributes","register","customElements","NAMESPACE_SVG","NAMESPACE_W3","NAMESPACE_XLINK","emptyArray","widgetInstanceMap","__WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__","projectorStateMap","same","dnode1","dnode2","__WEBPACK_IMPORTED_MODULE_2__d__","instance","missingTransition","checkStyleValue","styleValue","updateEvent","currentValue","projectionOptions","previousValue","projectorInstance","eventMap","nodeMap","previousEvent","evt","addClasses","classNames","split","removeClasses","focusNode","propValue","deferredRenderCallbacks","focus","removeOrphanedEvents","onlyEvents","propName","isEvent","substr","updateAttribute","attrName","attrValue","namespace","setAttributeNS","removeAttribute","setAttribute","updateAttributes","previousAttributes","attrNames","attrCount","updateProperties","includesEventsAndAttributes","propertiesUpdated","propNames","propCount","previousClasses","currentClasses","newClasses","previousClassName","classIndex","styleNames","styleCount","j","styleName","newStyleValue","styleApplyer","domValue","lastIndexOf","findIndexOfChild","sameAs","start","toInternalWNode","rendered","filterAndDecorateChildren","nodeAdded","dnode","nodeToRemove","pointerEvents","removeDomNode","removeChild","checkDistinguishable","indexToCheck","parentInstance","nodeIdentifier","parentName","updateChildren","parentVNode","oldChildren","newChildren","oldChildrenLength","newChildrenLength","depth","oldIndex","newIndex","textUpdated","oldChild","newChild","inserted","addDeferredProperties","updateDom","findOldIndex","addChild","insertBeforeDomNode","nextIndex","insertBeforeChildren","insertBefore","createDom","afterRenderCallbacks","childToRemove","addChildren","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__","domElement","toUpperCase","initPropertiesAndChildren","parentInstanceData","__WEBPACK_IMPORTED_MODULE_3__Registry__","renderQueue","scheduleRender","__render__","filteredRendered","addRoot","mergeElement","ownerDocument","createElementNS","appendChild","newDomNode","createTextNode","replaceChild","previous","previousRendered","updated","current","buildPreviousProperties","updateAnimation","vnode","decoratedDeferredProperties","runDeferredRenderCallbacks","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__","runAfterRenderCallbacks","requestIdleCallback","setTimeout","renderScheduled","renders","sort","a","b","previouslyRendered","dom","finalProjectorOptions","projectorOptions","defaults","getProjectionOptions","rootNode","projection","widgetFactory","registerCustomElement","defaultExport","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","nextTick","title","browser","env","argv","version","addListener","once","off","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","t","desc","r","Reflect","decorate","metadataKey","metadataValue","metadata","setPrototypeOf","g","eval","Menu","__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__","__WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__","_selectedId","onSelected","items","index","_onSelected","selected","__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__","__WEBPACK_IMPORTED_MODULE_5__menu_m_css__","__WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__"," _key","menuContainer"],"mappings":"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","file":"menu-1.0.0.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 90c6db1ff77aa21b0220","import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/Destroyable.mjs\n// module id = ./node_modules/@dojo/core/Destroyable.mjs\n// module chunks = menu","import Map from '@dojo/shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n methods.forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/Evented.mjs\n// module id = ./node_modules/@dojo/core/Evented.mjs\n// module chunks = menu","import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/lang.mjs\n// module id = ./node_modules/@dojo/core/lang.mjs\n// module chunks = menu","function isFeatureTestThenable(value) {\n return value && value.then;\n}\n/**\n * A cache of results of feature tests\n */\nexport const testCache = {};\n/**\n * A cache of the un-resolved feature tests\n */\nexport const testFunctions = {};\n/**\n * A cache of unresolved thenables (probably promises)\n * @type {{}}\n */\nconst testThenables = {};\n/**\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\n */\nconst globalScope = (function () {\n /* istanbul ignore else */\n if (typeof window !== 'undefined') {\n // Browsers\n return window;\n }\n else if (typeof global !== 'undefined') {\n // Node\n return global;\n }\n else if (typeof self !== 'undefined') {\n // Web workers\n return self;\n }\n /* istanbul ignore next */\n return {};\n})();\n/* Grab the staticFeatures if there are available */\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\n/* Cleaning up the DojoHasEnviornment */\nif ('DojoHasEnvironment' in globalScope) {\n delete globalScope.DojoHasEnvironment;\n}\n/**\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\n * returns a map.\n *\n * @param value The value to guard for\n */\nfunction isStaticFeatureFunction(value) {\n return typeof value === 'function';\n}\n/**\n * The cache of asserted features that were available in the global scope when the\n * module loaded\n */\nconst staticCache = staticFeatures\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\n : {}; /* Providing an empty cache, if none was in the environment\n\n/**\n* AMD plugin function.\n*\n* Conditional loads modules based on a has feature test value.\n*\n* @param resourceId Gives the resolved module id to load.\n* @param require The loader require function with respect to the module that contained the plugin resource in its\n* dependency list.\n* @param load Callback to loader that consumes result of plugin demand.\n*/\nexport function load(resourceId, require, load, config) {\n resourceId ? require([resourceId], load) : load();\n}\n/**\n * AMD plugin function.\n *\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\n * value(s).\n *\n * @param resourceId The id of the module\n * @param normalize Resolves a relative module id into an absolute module id\n */\nexport function normalize(resourceId, normalize) {\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\n let i = 0;\n function get(skip) {\n const term = tokens[i++];\n if (term === ':') {\n // empty string module name, resolves to null\n return null;\n }\n else {\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\n if (tokens[i++] === '?') {\n if (!skip && has(term)) {\n // matched the feature, get the first value from the options\n return get();\n }\n else {\n // did not match, get the second value, passing over the first\n get(true);\n return get(skip);\n }\n }\n // a module\n return term;\n }\n }\n const id = get();\n return id && normalize(id);\n}\n/**\n * Check if a feature has already been registered\n *\n * @param feature the name of the feature\n */\nexport function exists(feature) {\n const normalizedFeature = feature.toLowerCase();\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\n}\n/**\n * Register a new test for a named feature.\n *\n * @example\n * has.add('dom-addeventlistener', !!document.addEventListener);\n *\n * @example\n * has.add('touch-events', function () {\n * return 'ontouchstart' in document\n * });\n *\n * @param feature the name of the feature\n * @param value the value reported of the feature, or a function that will be executed once on first test\n * @param overwrite if an existing value should be overwritten. Defaults to false.\n */\nexport function add(feature, value, overwrite = false) {\n const normalizedFeature = feature.toLowerCase();\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\n }\n if (typeof value === 'function') {\n testFunctions[normalizedFeature] = value;\n }\n else if (isFeatureTestThenable(value)) {\n testThenables[feature] = value.then((resolvedValue) => {\n testCache[feature] = resolvedValue;\n delete testThenables[feature];\n }, () => {\n delete testThenables[feature];\n });\n }\n else {\n testCache[normalizedFeature] = value;\n delete testFunctions[normalizedFeature];\n }\n}\n/**\n * Return the current value of a named feature.\n *\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\n */\nexport default function has(feature) {\n let result;\n const normalizedFeature = feature.toLowerCase();\n if (normalizedFeature in staticCache) {\n result = staticCache[normalizedFeature];\n }\n else if (testFunctions[normalizedFeature]) {\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\n delete testFunctions[normalizedFeature];\n }\n else if (normalizedFeature in testCache) {\n result = testCache[normalizedFeature];\n }\n else if (feature in testThenables) {\n return false;\n }\n else {\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\n }\n return result;\n}\n/*\n * Out of the box feature tests\n */\n/* Environments */\n/* Used as a value to provide a debug only code path */\nadd('debug', true);\n/* Detects if the environment is \"browser like\" */\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\n/* Detects if the environment appears to be NodeJS */\nadd('host-node', function () {\n if (typeof process === 'object' && process.versions && process.versions.node) {\n return process.versions.node;\n }\n});\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/has/has.mjs\n// module id = ./node_modules/@dojo/has/has.mjs\n// module chunks = menu","import { isArrayLike, ShimIterator } from './iterator';\nimport global from './global';\nimport { is as objectIs } from './object';\nimport has from './support/has';\nimport './Symbol';\nexport let Map = global.Map;\nif (!true) {\n Map = (_a = class Map {\n constructor(iterable) {\n this._keys = [];\n this._values = [];\n this[Symbol.toStringTag] = 'Map';\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const value = iterable[i];\n this.set(value[0], value[1]);\n }\n }\n else {\n for (const value of iterable) {\n this.set(value[0], value[1]);\n }\n }\n }\n }\n /**\n * An alternative to Array.prototype.indexOf using Object.is\n * to check for equality. See http://mzl.la/1zuKO2V\n */\n _indexOfKey(keys, key) {\n for (let i = 0, length = keys.length; i < length; i++) {\n if (objectIs(keys[i], key)) {\n return i;\n }\n }\n return -1;\n }\n get size() {\n return this._keys.length;\n }\n clear() {\n this._keys.length = this._values.length = 0;\n }\n delete(key) {\n const index = this._indexOfKey(this._keys, key);\n if (index < 0) {\n return false;\n }\n this._keys.splice(index, 1);\n this._values.splice(index, 1);\n return true;\n }\n entries() {\n const values = this._keys.map((key, i) => {\n return [key, this._values[i]];\n });\n return new ShimIterator(values);\n }\n forEach(callback, context) {\n const keys = this._keys;\n const values = this._values;\n for (let i = 0, length = keys.length; i < length; i++) {\n callback.call(context, values[i], keys[i], this);\n }\n }\n get(key) {\n const index = this._indexOfKey(this._keys, key);\n return index < 0 ? undefined : this._values[index];\n }\n has(key) {\n return this._indexOfKey(this._keys, key) > -1;\n }\n keys() {\n return new ShimIterator(this._keys);\n }\n set(key, value) {\n let index = this._indexOfKey(this._keys, key);\n index = index < 0 ? this._keys.length : index;\n this._keys[index] = key;\n this._values[index] = value;\n return this;\n }\n values() {\n return new ShimIterator(this._values);\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n },\n _a[Symbol.species] = _a,\n _a);\n}\nexport default Map;\nvar _a;\n//# sourceMappingURL=Map.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Map.mjs\n// module id = ./node_modules/@dojo/shim/Map.mjs\n// module chunks = menu","import global from './global';\nimport { queueMicroTask } from './support/queue';\nimport './Symbol';\nimport has from './support/has';\nexport let ShimPromise = global.Promise;\nexport const isThenable = function isThenable(value) {\n return value && typeof value.then === 'function';\n};\nif (!true) {\n global.Promise = ShimPromise = (_a = class Promise {\n /**\n * Creates a new Promise.\n *\n * @constructor\n *\n * @param executor\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\n * starting the asynchronous operation when it is invoked.\n *\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\n * successfully, or the `reject` function when the operation fails.\n */\n constructor(executor) {\n /**\n * The current state of this promise.\n */\n this.state = 1 /* Pending */;\n this[Symbol.toStringTag] = 'Promise';\n /**\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\n */\n let isChained = false;\n /**\n * Whether or not this promise is in a resolved state.\n */\n const isResolved = () => {\n return this.state !== 1 /* Pending */ || isChained;\n };\n /**\n * Callbacks that should be invoked once the asynchronous operation has completed.\n */\n let callbacks = [];\n /**\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\n * enqueues callbacks for execution on the next event loop turn.\n */\n let whenFinished = function (callback) {\n if (callbacks) {\n callbacks.push(callback);\n }\n };\n /**\n * Settles this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const settle = (newState, value) => {\n // A promise can only be settled once.\n if (this.state !== 1 /* Pending */) {\n return;\n }\n this.state = newState;\n this.resolvedValue = value;\n whenFinished = queueMicroTask;\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\n // wait an extra turn.\n if (callbacks && callbacks.length > 0) {\n queueMicroTask(function () {\n if (callbacks) {\n let count = callbacks.length;\n for (let i = 0; i < count; ++i) {\n callbacks[i].call(null);\n }\n callbacks = null;\n }\n });\n }\n };\n /**\n * Resolves this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const resolve = (newState, value) => {\n if (isResolved()) {\n return;\n }\n if (isThenable(value)) {\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\n isChained = true;\n }\n else {\n settle(newState, value);\n }\n };\n this.then = (onFulfilled, onRejected) => {\n return new Promise((resolve, reject) => {\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\n // event loop.\n whenFinished(() => {\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\n if (typeof callback === 'function') {\n try {\n resolve(callback(this.resolvedValue));\n }\n catch (error) {\n reject(error);\n }\n }\n else if (this.state === 2 /* Rejected */) {\n reject(this.resolvedValue);\n }\n else {\n resolve(this.resolvedValue);\n }\n });\n });\n };\n try {\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\n }\n catch (error) {\n settle(2 /* Rejected */, error);\n }\n }\n static all(iterable) {\n return new this(function (resolve, reject) {\n const values = [];\n let complete = 0;\n let total = 0;\n let populating = true;\n function fulfill(index, value) {\n values[index] = value;\n ++complete;\n finish();\n }\n function finish() {\n if (populating || complete < total) {\n return;\n }\n resolve(values);\n }\n function processItem(index, item) {\n ++total;\n if (isThenable(item)) {\n // If an item Promise rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(fulfill.bind(null, index), reject);\n }\n else {\n Promise.resolve(item).then(fulfill.bind(null, index));\n }\n }\n let i = 0;\n for (const value of iterable) {\n processItem(i, value);\n i++;\n }\n populating = false;\n finish();\n });\n }\n static race(iterable) {\n return new this(function (resolve, reject) {\n for (const item of iterable) {\n if (item instanceof Promise) {\n // If a Promise item rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(resolve, reject);\n }\n else {\n Promise.resolve(item).then(resolve);\n }\n }\n });\n }\n static reject(reason) {\n return new this(function (resolve, reject) {\n reject(reason);\n });\n }\n static resolve(value) {\n return new this(function (resolve) {\n resolve(value);\n });\n }\n catch(onRejected) {\n return this.then(undefined, onRejected);\n }\n },\n _a[Symbol.species] = ShimPromise,\n _a);\n}\nexport default ShimPromise;\nvar _a;\n//# sourceMappingURL=Promise.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Promise.mjs\n// module id = ./node_modules/@dojo/shim/Promise.mjs\n// module chunks = menu","import has from './support/has';\nimport global from './global';\nimport { getValueDescriptor } from './support/util';\nexport let Symbol = global.Symbol;\nif (!true) {\n /**\n * Throws if the value is not a symbol, used internally within the Shim\n * @param {any} value The value to check\n * @return {symbol} Returns the symbol or throws\n */\n const validateSymbol = function validateSymbol(value) {\n if (!isSymbol(value)) {\n throw new TypeError(value + ' is not a symbol');\n }\n return value;\n };\n const defineProperties = Object.defineProperties;\n const defineProperty = Object.defineProperty;\n const create = Object.create;\n const objPrototype = Object.prototype;\n const globalSymbols = {};\n const getSymbolName = (function () {\n const created = create(null);\n return function (desc) {\n let postfix = 0;\n let name;\n while (created[String(desc) + (postfix || '')]) {\n ++postfix;\n }\n desc += String(postfix || '');\n created[desc] = true;\n name = '@@' + desc;\n // FIXME: Temporary guard until the duplicate execution when testing can be\n // pinned down.\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\n defineProperty(objPrototype, name, {\n set: function (value) {\n defineProperty(this, name, getValueDescriptor(value));\n }\n });\n }\n return name;\n };\n })();\n const InternalSymbol = function Symbol(description) {\n if (this instanceof InternalSymbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n return Symbol(description);\n };\n Symbol = global.Symbol = function Symbol(description) {\n if (this instanceof Symbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n const sym = Object.create(InternalSymbol.prototype);\n description = description === undefined ? '' : String(description);\n return defineProperties(sym, {\n __description__: getValueDescriptor(description),\n __name__: getValueDescriptor(getSymbolName(description))\n });\n };\n /* Decorate the Symbol function with the appropriate properties */\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\n if (globalSymbols[key]) {\n return globalSymbols[key];\n }\n return (globalSymbols[key] = Symbol(String(key)));\n }));\n defineProperties(Symbol, {\n keyFor: getValueDescriptor(function (sym) {\n let key;\n validateSymbol(sym);\n for (key in globalSymbols) {\n if (globalSymbols[key] === sym) {\n return key;\n }\n }\n }),\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\n match: getValueDescriptor(Symbol.for('match'), false, false),\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\n search: getValueDescriptor(Symbol.for('search'), false, false),\n species: getValueDescriptor(Symbol.for('species'), false, false),\n split: getValueDescriptor(Symbol.for('split'), false, false),\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\n });\n /* Decorate the InternalSymbol object */\n defineProperties(InternalSymbol.prototype, {\n constructor: getValueDescriptor(Symbol),\n toString: getValueDescriptor(function () {\n return this.__name__;\n }, false, false)\n });\n /* Decorate the Symbol.prototype */\n defineProperties(Symbol.prototype, {\n toString: getValueDescriptor(function () {\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\n }),\n valueOf: getValueDescriptor(function () {\n return validateSymbol(this);\n })\n });\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\n return validateSymbol(this);\n }));\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\n}\n/**\n * A custom guard function that determines if an object is a symbol or not\n * @param {any} value The value to check to see if it is a symbol or not\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\n */\nexport function isSymbol(value) {\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\n}\n/**\n * Fill any missing well known symbols if the native Symbol is missing them\n */\n[\n 'hasInstance',\n 'isConcatSpreadable',\n 'iterator',\n 'species',\n 'replace',\n 'search',\n 'split',\n 'match',\n 'toPrimitive',\n 'toStringTag',\n 'unscopables',\n 'observable'\n].forEach((wellKnown) => {\n if (!Symbol[wellKnown]) {\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\n }\n});\nexport default Symbol;\n//# sourceMappingURL=Symbol.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Symbol.mjs\n// module id = ./node_modules/@dojo/shim/Symbol.mjs\n// module chunks = menu","import global from './global';\nimport { isArrayLike } from './iterator';\nimport has from './support/has';\nimport './Symbol';\nexport let WeakMap = global.WeakMap;\nif (!true) {\n const DELETED = {};\n const getUID = function getUID() {\n return Math.floor(Math.random() * 100000000);\n };\n const generateName = (function () {\n let startId = Math.floor(Date.now() % 100000000);\n return function generateName() {\n return '__wm' + getUID() + (startId++ + '__');\n };\n })();\n WeakMap = class WeakMap {\n constructor(iterable) {\n this[Symbol.toStringTag] = 'WeakMap';\n this._name = generateName();\n this._frozenEntries = [];\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const item = iterable[i];\n this.set(item[0], item[1]);\n }\n }\n else {\n for (const [key, value] of iterable) {\n this.set(key, value);\n }\n }\n }\n }\n _getFrozenEntryIndex(key) {\n for (let i = 0; i < this._frozenEntries.length; i++) {\n if (this._frozenEntries[i].key === key) {\n return i;\n }\n }\n return -1;\n }\n delete(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n entry.value = DELETED;\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n this._frozenEntries.splice(frozenIndex, 1);\n return true;\n }\n return false;\n }\n get(key) {\n if (key === undefined || key === null) {\n return undefined;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n return entry.value;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return this._frozenEntries[frozenIndex].value;\n }\n }\n has(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return true;\n }\n return false;\n }\n set(key, value) {\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\n throw new TypeError('Invalid value used as weak map key');\n }\n let entry = key[this._name];\n if (!entry || entry.key !== key) {\n entry = Object.create(null, {\n key: { value: key }\n });\n if (Object.isFrozen(key)) {\n this._frozenEntries.push(entry);\n }\n else {\n Object.defineProperty(key, this._name, {\n value: entry\n });\n }\n }\n entry.value = value;\n return this;\n }\n };\n}\nexport default WeakMap;\n//# sourceMappingURL=WeakMap.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/WeakMap.mjs\n// module id = ./node_modules/@dojo/shim/WeakMap.mjs\n// module chunks = menu","import global from './global';\nimport { isArrayLike, isIterable } from './iterator';\nimport { MAX_SAFE_INTEGER } from './number';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\nexport let from;\n/**\n * Creates a new array from the function parameters.\n *\n * @param arguments Any number of arguments for the array\n * @return An array from the given arguments\n */\nexport let of;\n/* ES6 Array instance methods */\n/**\n * Copies data internally within an array or array-like object.\n *\n * @param target The target array-like object\n * @param offset The index to start copying values to; if negative, it counts backwards from length\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\n * @return The target\n */\nexport let copyWithin;\n/**\n * Fills elements of an array-like object with the specified value.\n *\n * @param target The target to fill\n * @param value The value to fill each element of the target with\n * @param start The first index to fill\n * @param end The (exclusive) index at which to stop filling\n * @return The filled target\n */\nexport let fill;\n/**\n * Finds and returns the first instance matching the callback or undefined if one is not found.\n *\n * @param target An array-like object\n * @param callback A function returning if the current value matches a criteria\n * @param thisArg The execution context for the find function\n * @return The first element matching the callback, or undefined if one does not exist\n */\nexport let find;\n/**\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\n * or -1 if no values satisfy it.\n *\n * @param target An array-like object\n * @param callback A function returning true if the current value satisfies its criteria\n * @param thisArg The execution context for the find function\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\n */\nexport let findIndex;\n/* ES7 Array instance methods */\n/**\n * Determines whether an array includes a given value\n *\n * @param target the target array-like object\n * @param searchElement the item to search for\n * @param fromIndex the starting index to search from\n * @return `true` if the array includes the element, otherwise `false`\n */\nexport let includes;\nif (true && true) {\n from = global.Array.from;\n of = global.Array.of;\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\n fill = wrapNative(global.Array.prototype.fill);\n find = wrapNative(global.Array.prototype.find);\n findIndex = wrapNative(global.Array.prototype.findIndex);\n}\nelse {\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n if (isNaN(length)) {\n return 0;\n }\n length = Number(length);\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n /**\n * From ES6 7.1.4 ToInteger()\n *\n * @param value A value to convert\n * @return An integer\n */\n const toInteger = function toInteger(value) {\n value = Number(value);\n if (isNaN(value)) {\n return 0;\n }\n if (value === 0 || !isFinite(value)) {\n return value;\n }\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\n };\n /**\n * Normalizes an offset against a given length, wrapping it if negative.\n *\n * @param value The original offset\n * @param length The total length to normalize against\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\n */\n const normalizeOffset = function normalizeOffset(value, length) {\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\n };\n from = function from(arrayLike, mapFunction, thisArg) {\n if (arrayLike == null) {\n throw new TypeError('from: requires an array-like object');\n }\n if (mapFunction && thisArg) {\n mapFunction = mapFunction.bind(thisArg);\n }\n /* tslint:disable-next-line:variable-name */\n const Constructor = this;\n const length = toLength(arrayLike.length);\n // Support extension\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\n return array;\n }\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\n // with the iteration on IE when using a NaN array length.\n if (isArrayLike(arrayLike)) {\n if (length === 0) {\n return [];\n }\n for (let i = 0; i < arrayLike.length; i++) {\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\n }\n }\n else {\n let i = 0;\n for (const value of arrayLike) {\n array[i] = mapFunction ? mapFunction(value, i) : value;\n i++;\n }\n }\n if (arrayLike.length !== undefined) {\n array.length = length;\n }\n return array;\n };\n of = function of(...items) {\n return Array.prototype.slice.call(items);\n };\n copyWithin = function copyWithin(target, offset, start, end) {\n if (target == null) {\n throw new TypeError('copyWithin: target must be an array-like object');\n }\n const length = toLength(target.length);\n offset = normalizeOffset(toInteger(offset), length);\n start = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n let count = Math.min(end - start, length - offset);\n let direction = 1;\n if (offset > start && offset < start + count) {\n direction = -1;\n start += count - 1;\n offset += count - 1;\n }\n while (count > 0) {\n if (start in target) {\n target[offset] = target[start];\n }\n else {\n delete target[offset];\n }\n offset += direction;\n start += direction;\n count--;\n }\n return target;\n };\n fill = function fill(target, value, start, end) {\n const length = toLength(target.length);\n let i = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n while (i < end) {\n target[i++] = value;\n }\n return target;\n };\n find = function find(target, callback, thisArg) {\n const index = findIndex(target, callback, thisArg);\n return index !== -1 ? target[index] : undefined;\n };\n findIndex = function findIndex(target, callback, thisArg) {\n const length = toLength(target.length);\n if (!callback) {\n throw new TypeError('find: second argument must be a function');\n }\n if (thisArg) {\n callback = callback.bind(thisArg);\n }\n for (let i = 0; i < length; i++) {\n if (callback(target[i], i, target)) {\n return i;\n }\n }\n return -1;\n };\n}\nif (true) {\n includes = wrapNative(global.Array.prototype.includes);\n}\nelse {\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n length = Number(length);\n if (isNaN(length)) {\n return 0;\n }\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n includes = function includes(target, searchElement, fromIndex = 0) {\n let len = toLength(target.length);\n for (let i = fromIndex; i < len; ++i) {\n const currentElement = target[i];\n if (searchElement === currentElement ||\n (searchElement !== searchElement && currentElement !== currentElement)) {\n return true;\n }\n }\n return false;\n };\n}\n//# sourceMappingURL=array.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/array.mjs\n// module id = ./node_modules/@dojo/shim/array.mjs\n// module chunks = menu","const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/global.mjs\n// module id = ./node_modules/@dojo/shim/global.mjs\n// module chunks = menu","import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/number.mjs\n// module id = ./node_modules/@dojo/shim/number.mjs\n// module chunks = menu","import global from './global';\nimport has from './support/has';\nimport { isSymbol } from './Symbol';\nexport let assign;\n/**\n * Gets the own property descriptor of the specified object.\n * An own property descriptor is one that is defined directly on the object and is not\n * inherited from the object's prototype.\n * @param o Object that contains the property.\n * @param p Name of the property.\n */\nexport let getOwnPropertyDescriptor;\n/**\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\n * @param o Object that contains the own properties.\n */\nexport let getOwnPropertyNames;\n/**\n * Returns an array of all symbol properties found directly on object o.\n * @param o Object to retrieve the symbols from.\n */\nexport let getOwnPropertySymbols;\n/**\n * Returns true if the values are the same value, false otherwise.\n * @param value1 The first value.\n * @param value2 The second value.\n */\nexport let is;\n/**\n * Returns the names of the enumerable properties and methods of an object.\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n */\nexport let keys;\n/* ES7 Object static methods */\nexport let getOwnPropertyDescriptors;\nexport let entries;\nexport let values;\nif (true) {\n const globalObject = global.Object;\n assign = globalObject.assign;\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\n is = globalObject.is;\n keys = globalObject.keys;\n}\nelse {\n keys = function symbolAwareKeys(o) {\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n assign = function assign(target, ...sources) {\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const to = Object(target);\n sources.forEach((nextSource) => {\n if (nextSource) {\n // Skip over if undefined or null\n keys(nextSource).forEach((nextKey) => {\n to[nextKey] = nextSource[nextKey];\n });\n }\n });\n return to;\n };\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\n if (isSymbol(prop)) {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n else {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n };\n getOwnPropertyNames = function getOwnPropertyNames(o) {\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n return Object.getOwnPropertyNames(o)\n .filter((key) => Boolean(key.match(/^@@.+/)))\n .map((key) => Symbol.for(key.substring(2)));\n };\n is = function is(value1, value2) {\n if (value1 === value2) {\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\n }\n return value1 !== value1 && value2 !== value2; // NaN\n };\n}\nif (true) {\n const globalObject = global.Object;\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\n entries = globalObject.entries;\n values = globalObject.values;\n}\nelse {\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\n return getOwnPropertyNames(o).reduce((previous, key) => {\n previous[key] = getOwnPropertyDescriptor(o, key);\n return previous;\n }, {});\n };\n entries = function entries(o) {\n return keys(o).map((key) => [key, o[key]]);\n };\n values = function values(o) {\n return keys(o).map((key) => o[key]);\n };\n}\n//# sourceMappingURL=object.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/object.mjs\n// module id = ./node_modules/@dojo/shim/object.mjs\n// module chunks = menu","import global from './global';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\n/**\n * The minimum location of high surrogates\n */\nexport const HIGH_SURROGATE_MIN = 0xd800;\n/**\n * The maximum location of high surrogates\n */\nexport const HIGH_SURROGATE_MAX = 0xdbff;\n/**\n * The minimum location of low surrogates\n */\nexport const LOW_SURROGATE_MIN = 0xdc00;\n/**\n * The maximum location of low surrogates\n */\nexport const LOW_SURROGATE_MAX = 0xdfff;\n/* ES6 static methods */\n/**\n * Return the String value whose elements are, in order, the elements in the List elements.\n * If length is 0, the empty string is returned.\n * @param codePoints The code points to generate the string\n */\nexport let fromCodePoint;\n/**\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\n * as such the first argument will be a well formed template call site object and the rest\n * parameter will contain the substitution values.\n * @param template A well-formed template string call site representation.\n * @param substitutions A set of substitution values.\n */\nexport let raw;\n/* ES6 instance methods */\n/**\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\n * value of the UTF-16 encoded code point starting at the string element at position pos in\n * the String resulting from converting this object to a String.\n * If there is no element at that position, the result is undefined.\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\n */\nexport let codePointAt;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * endPosition – length(this). Otherwise returns false.\n */\nexport let endsWith;\n/**\n * Returns true if searchString appears as a substring of the result of converting this\n * object to a String, at one or more positions that are\n * greater than or equal to position; otherwise, returns false.\n * @param target The target string\n * @param searchString search string\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\n */\nexport let includes;\n/**\n * Returns the String value result of normalizing the string into the normalization form\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\n * @param target The target string\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\n * is \"NFC\"\n */\nexport let normalize;\n/**\n * Returns a String value that is made from count copies appended together. If count is 0,\n * T is the empty String is returned.\n * @param count number of copies to append\n */\nexport let repeat;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * position. Otherwise returns false.\n */\nexport let startsWith;\n/* ES7 instance methods */\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the end (right) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padEnd;\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the start (left) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padStart;\nif (true && true) {\n fromCodePoint = global.String.fromCodePoint;\n raw = global.String.raw;\n codePointAt = wrapNative(global.String.prototype.codePointAt);\n endsWith = wrapNative(global.String.prototype.endsWith);\n includes = wrapNative(global.String.prototype.includes);\n normalize = wrapNative(global.String.prototype.normalize);\n repeat = wrapNative(global.String.prototype.repeat);\n startsWith = wrapNative(global.String.prototype.startsWith);\n}\nelse {\n /**\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\n * Used by startsWith, includes, and endsWith.\n *\n * @return Normalized position.\n */\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\n if (text == null) {\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\n }\n const length = text.length;\n position = position !== position ? (isEnd ? length : 0) : position;\n return [text, String(search), Math.min(Math.max(position, 0), length)];\n };\n fromCodePoint = function fromCodePoint(...codePoints) {\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\n const length = arguments.length;\n if (!length) {\n return '';\n }\n const fromCharCode = String.fromCharCode;\n const MAX_SIZE = 0x4000;\n let codeUnits = [];\n let index = -1;\n let result = '';\n while (++index < length) {\n let codePoint = Number(arguments[index]);\n // Code points must be finite integers within the valid range\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\n if (!isValid) {\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint);\n }\n else {\n // Astral code point; split in surrogate halves\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += fromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n raw = function raw(callSite, ...substitutions) {\n let rawStrings = callSite.raw;\n let result = '';\n let numSubstitutions = substitutions.length;\n if (callSite == null || callSite.raw == null) {\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\n }\n for (let i = 0, length = rawStrings.length; i < length; i++) {\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\n }\n return result;\n };\n codePointAt = function codePointAt(text, position = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\n if (text == null) {\n throw new TypeError('string.codePointAt requries a valid string.');\n }\n const length = text.length;\n if (position !== position) {\n position = 0;\n }\n if (position < 0 || position >= length) {\n return undefined;\n }\n // Get the first code unit\n const first = text.charCodeAt(position);\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n const second = text.charCodeAt(position + 1);\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\n }\n }\n return first;\n };\n endsWith = function endsWith(text, search, endPosition) {\n if (endPosition == null) {\n endPosition = text.length;\n }\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\n const start = endPosition - search.length;\n if (start < 0) {\n return false;\n }\n return text.slice(start, endPosition) === search;\n };\n includes = function includes(text, search, position = 0) {\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\n return text.indexOf(search, position) !== -1;\n };\n repeat = function repeat(text, count = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\n if (text == null) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (count !== count) {\n count = 0;\n }\n if (count < 0 || count === Infinity) {\n throw new RangeError('string.repeat requires a non-negative finite count.');\n }\n let result = '';\n while (count) {\n if (count % 2) {\n result += text;\n }\n if (count > 1) {\n text += text;\n }\n count >>= 1;\n }\n return result;\n };\n startsWith = function startsWith(text, search, position = 0) {\n search = String(search);\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\n const end = position + search.length;\n if (end > text.length) {\n return false;\n }\n return text.slice(position, end) === search;\n };\n}\nif (true) {\n padEnd = wrapNative(global.String.prototype.padEnd);\n padStart = wrapNative(global.String.prototype.padStart);\n}\nelse {\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padEnd requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText +=\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length);\n }\n return strText;\n };\n padStart = function padStart(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padStart requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText =\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length) +\n strText;\n }\n return strText;\n };\n}\n//# sourceMappingURL=string.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/string.mjs\n// module id = ./node_modules/@dojo/shim/string.mjs\n// module chunks = menu","import has, { add } from '@dojo/has/has';\nimport global from '../global';\nexport default has;\nexport * from '@dojo/has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/has.mjs\n// module id = ./node_modules/@dojo/shim/support/has.mjs\n// module chunks = menu","import global from '../global';\nimport has from './has';\nfunction executeTask(item) {\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n}\nfunction getQueueHandle(item, destructor) {\n return {\n destroy: function () {\n this.destroy = function () { };\n item.isActive = false;\n item.callback = null;\n if (destructor) {\n destructor();\n }\n }\n };\n}\nlet checkMicroTaskQueue;\nlet microTasks;\n/**\n * Schedules a callback to the macrotask queue.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueTask = (function () {\n let destructor;\n let enqueue;\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\n if (true) {\n const queue = [];\n global.addEventListener('message', function (event) {\n // Confirm that the event was triggered by the current window and by this particular implementation.\n if (event.source === global && event.data === 'dojo-queue-message') {\n event.stopPropagation();\n if (queue.length) {\n executeTask(queue.shift());\n }\n }\n });\n enqueue = function (item) {\n queue.push(item);\n global.postMessage('dojo-queue-message', '*');\n };\n }\n else if (false) {\n destructor = global.clearImmediate;\n enqueue = function (item) {\n return setImmediate(executeTask.bind(null, item));\n };\n }\n else {\n destructor = global.clearTimeout;\n enqueue = function (item) {\n return setTimeout(executeTask.bind(null, item), 0);\n };\n }\n function queueTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const id = enqueue(item);\n return getQueueHandle(item, destructor &&\n function () {\n destructor(id);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueTask(callback);\n };\n})();\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\nif (!true) {\n let isMicroTaskQueued = false;\n microTasks = [];\n checkMicroTaskQueue = function () {\n if (!isMicroTaskQueued) {\n isMicroTaskQueued = true;\n queueTask(function () {\n isMicroTaskQueued = false;\n if (microTasks.length) {\n let item;\n while ((item = microTasks.shift())) {\n executeTask(item);\n }\n }\n });\n }\n };\n}\n/**\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\n *\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueAnimationTask = (function () {\n if (!true) {\n return queueTask;\n }\n function queueAnimationTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\n return getQueueHandle(item, function () {\n cancelAnimationFrame(rafId);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueAnimationTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueAnimationTask(callback);\n };\n})();\n/**\n * Schedules a callback to the microtask queue.\n *\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\n * registered with `queueTask` or `queueAnimationTask`.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport let queueMicroTask = (function () {\n let enqueue;\n if (false) {\n enqueue = function (item) {\n global.process.nextTick(executeTask.bind(null, item));\n };\n }\n else if (true) {\n enqueue = function (item) {\n global.Promise.resolve(item).then(executeTask);\n };\n }\n else if (true) {\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const node = document.createElement('div');\n const queue = [];\n const observer = new HostMutationObserver(function () {\n while (queue.length > 0) {\n const item = queue.shift();\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n }\n });\n observer.observe(node, { attributes: true });\n enqueue = function (item) {\n queue.push(item);\n node.setAttribute('queueStatus', '1');\n };\n }\n else {\n enqueue = function (item) {\n checkMicroTaskQueue();\n microTasks.push(item);\n };\n }\n return function (callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n enqueue(item);\n return getQueueHandle(item);\n };\n})();\n//# sourceMappingURL=queue.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/queue.mjs\n// module id = ./node_modules/@dojo/shim/support/queue.mjs\n// module chunks = menu","/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/util.mjs\n// module id = ./node_modules/@dojo/shim/support/util.mjs\n// module chunks = menu","import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/Injector.mjs\n// module id = ./node_modules/@dojo/widget-core/Injector.mjs\n// module chunks = menu","import { Evented } from '@dojo/core/Evented';\nimport Map from '@dojo/shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/NodeHandler.mjs\n// module id = ./node_modules/@dojo/widget-core/NodeHandler.mjs\n// module chunks = menu","import Promise from '@dojo/shim/Promise';\nimport Map from '@dojo/shim/Map';\nimport Symbol from '@dojo/shim/Symbol';\nimport { Evented } from '@dojo/core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/Registry.mjs\n// module id = ./node_modules/@dojo/widget-core/Registry.mjs\n// module chunks = menu","import { Map } from '@dojo/shim/Map';\nimport { Evented } from '@dojo/core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/RegistryHandler.mjs\n// module id = ./node_modules/@dojo/widget-core/RegistryHandler.mjs\n// module chunks = menu","import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/WidgetBase.mjs\n// module id = ./node_modules/@dojo/widget-core/WidgetBase.mjs\n// module chunks = menu","let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/animations/cssTransitions.mjs\n// module id = ./node_modules/@dojo/widget-core/animations/cssTransitions.mjs\n// module chunks = menu","import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/d.mjs\n// module id = ./node_modules/@dojo/widget-core/d.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/afterRender.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/afterRender.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs\n// module chunks = menu","import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/customElement.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/customElement.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/diffProperty.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/diffProperty.mjs\n// module chunks = menu","/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs\n// module chunks = menu","import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/inject.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/inject.mjs\n// module chunks = menu","import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/diff.mjs\n// module id = ./node_modules/@dojo/widget-core/diff.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/mixins/Projector.mjs\n// module id = ./node_modules/@dojo/widget-core/mixins/Projector.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/mixins/Themed.mjs\n// module id = ./node_modules/@dojo/widget-core/mixins/Themed.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/registerCustomElement.mjs\n// module id = ./node_modules/@dojo/widget-core/registerCustomElement.mjs\n// module chunks = menu","import global from '@dojo/shim/global';\nimport { from as arrayFrom } from '@dojo/shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '@dojo/shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode.focus();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (propName === 'focus') {\n focusNode(propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const rendered = dnode.rendered || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\n oldIndex++;\n newIndex++;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let child = oldChildren[oldIndex];\n if (child) {\n let nextIndex = oldIndex + 1;\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n if (insertBefore.rendered) {\n insertBeforeChildren.push(...insertBefore.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\n insertBeforeChildren.push(oldChildren[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/vdom.mjs\n// module id = ./node_modules/@dojo/widget-core/vdom.mjs\n// module chunks = menu","/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module id = ./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module chunks = menu","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = ./node_modules/process/browser.js\n// module chunks = menu","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator];\r\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/tslib/tslib.es6.js\n// module id = ./node_modules/tslib/tslib.es6.js\n// module chunks = menu","var 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 || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = 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// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = ./node_modules/webpack/buildin/global.js\n// module chunks = menu","import { v } from '@dojo/widget-core/d';\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\nimport { WidgetProperties, WNode } from '@dojo/widget-core/interfaces';\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\nimport { MenuItem, MenuItemProperties } from '../menu-item/MenuItem';\n\nimport * as css from './menu.m.css';\n\ninterface MenuProperties extends WidgetProperties {\n\tonSelected: (data: any) => void;\n}\n\n@customElement({\n\ttag: 'demo-menu',\n\tevents: ['onSelected']\n})\n@theme(css)\nexport class Menu extends ThemedMixin(WidgetBase)> {\n\tprivate _selectedId: number;\n\n\tprivate _onSelected(id: number, data: any) {\n\t\tthis._selectedId = id;\n\t\tthis.properties.onSelected(data);\n\t\tthis.invalidate();\n\t}\n\n\tprotected render() {\n\t\tconst items = this.children.map((child, index) => {\n\t\t\tif (child) {\n\t\t\t\tconst properties: Partial = {\n\t\t\t\t\tonSelected: (data: any) => {\n\t\t\t\t\t\tthis._onSelected(index, data);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif (this._selectedId !== undefined) {\n\t\t\t\t\tproperties.selected = index === this._selectedId;\n\t\t\t\t}\n\t\t\t\tchild.properties = { ...child.properties, ...properties };\n\t\t\t}\n\t\t\treturn child;\n\t\t});\n\n\t\treturn v('nav', { classes: this.theme(css.root) }, [\n\t\t\tv(\n\t\t\t\t'ol',\n\t\t\t\t{\n\t\t\t\t\tclasses: this.theme(css.menuContainer)\n\t\t\t\t},\n\t\t\t\titems\n\t\t\t)\n\t\t]);\n\t}\n}\n\nexport default Menu;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@dojo/webpack-contrib/css-module-dts-loader?type=ts&instanceName=0_menu!./src/menu/Menu.ts","// removed by extract-text-webpack-plugin\nmodule.exports = {\" _key\":\"test-app/menu\",\"root\":\"_3bA6jdSn\",\"menuContainer\":\"_1eoGfqku\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/menu/menu.m.css\n// module id = ./src/menu/menu.m.css\n// module chunks = menu"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap 01c4fe13e2f1c25e9421","webpack:///./node_modules/@dojo/framework/core/Destroyable.mjs","webpack:///./node_modules/@dojo/framework/core/Evented.mjs","webpack:///./node_modules/@dojo/framework/core/lang.mjs","webpack:///./node_modules/@dojo/framework/has/has.mjs","webpack:///./node_modules/@dojo/framework/shim/Map.mjs","webpack:///./node_modules/@dojo/framework/shim/Promise.mjs","webpack:///./node_modules/@dojo/framework/shim/Symbol.mjs","webpack:///./node_modules/@dojo/framework/shim/WeakMap.mjs","webpack:///./node_modules/@dojo/framework/shim/array.mjs","webpack:///./node_modules/@dojo/framework/shim/global.mjs","webpack:///./node_modules/@dojo/framework/shim/number.mjs","webpack:///./node_modules/@dojo/framework/shim/object.mjs","webpack:///./node_modules/@dojo/framework/shim/string.mjs","webpack:///./node_modules/@dojo/framework/shim/support/has.mjs","webpack:///./node_modules/@dojo/framework/shim/support/queue.mjs","webpack:///./node_modules/@dojo/framework/shim/support/util.mjs","webpack:///./node_modules/@dojo/framework/widget-core/Injector.mjs","webpack:///./node_modules/@dojo/framework/widget-core/NodeHandler.mjs","webpack:///./node_modules/@dojo/framework/widget-core/Registry.mjs","webpack:///./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs","webpack:///./node_modules/@dojo/framework/widget-core/WidgetBase.mjs","webpack:///./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs","webpack:///./node_modules/@dojo/framework/widget-core/d.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/inject.mjs","webpack:///./node_modules/@dojo/framework/widget-core/diff.mjs","webpack:///./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs","webpack:///./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs","webpack:///./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs","webpack:///./node_modules/@dojo/framework/widget-core/vdom.mjs","webpack:///./node_modules/@dojo/cli-build-widget/template/custom-element.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/menu/Menu.ts","webpack:///./src/menu/menu.m.css?ec11"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","noop","__WEBPACK_IMPORTED_MODULE_1__shim_Promise__","resolve","destroyed","Error","Destroyable","[object Object]","this","handles","handle","Array","isArray","__WEBPACK_IMPORTED_MODULE_0__lang__","_handles","push","splice","indexOf","destroy","forEach","own","__webpack_exports__","regexMap","__WEBPACK_IMPORTED_MODULE_0__shim_Map__","Evented","__WEBPACK_IMPORTED_MODULE_1__Destroyable__","super","arguments","listenersMap","event","methods","type","globString","targetString","regex","has","RegExp","replace","set","test","isGlobMatch","method","listener","map","_addListener","listeners","destructor","called","createHandle","length","slice","testCache","testFunctions","testThenables","globalScope","window","global","self","staticFeatures","DojoHasEnvironment","staticCache","apply","add","feature","value","overwrite","normalizedFeature","toLowerCase","Boolean","exists","TypeError","then","isFeatureTestThenable","resolvedValue","result","document","location","process","versions","node","Map","__WEBPACK_IMPORTED_MODULE_1__global__","ShimPromise","__WEBPACK_IMPORTED_MODULE_0__global__","Promise","Symbol","wellKnown","__WEBPACK_IMPORTED_MODULE_2__support_util__","for","WeakMap","from","of","copyWithin","fill","find","findIndex","includes","__WEBPACK_IMPORTED_MODULE_4__support_util__","globalObject","Math","pow","assign","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","is","keys","getOwnPropertyDescriptors","entries","values","fromCodePoint","raw","codePointAt","endsWith","normalize","repeat","startsWith","padEnd","padStart","String","__WEBPACK_IMPORTED_MODULE_0__has_has__","every","key","Number","POSITIVE_INFINITY","e","imul","Observable","Set","getCallSite","callSite","substitutions","key1","key2","freeze","postMessage","requestAnimationFrame","setImmediate","MutationObserver","WebKitMutationObserver","example","createElement","observer","observe","attributes","style","setProperty","takeRecords","undefined","Animation","KeyframeEffect","executeTask","item","isActive","callback","getQueueHandle","enqueue","queue","addEventListener","source","data","stopPropagation","shift","queueTask","id","queueAnimationTask","rafId","bind","cancelAnimationFrame","writable","nativeFunction","target","args","Injector","__WEBPACK_IMPORTED_MODULE_0__core_Evented__","payload","_payload","invalidator","_invalidator","NodeEventType","_nodeMap","__WEBPACK_IMPORTED_MODULE_1__shim_Map__","element","emit","Widget","Projector","clear","WIDGET_BASE_TYPE","__WEBPACK_IMPORTED_MODULE_2__shim_Symbol__","isWidgetBaseConstructor","_type","Registry","__WEBPACK_IMPORTED_MODULE_3__core_Evented__","widgetLabel","action","label","_widgetRegistry","toString","__WEBPACK_IMPORTED_MODULE_0__shim_Promise__","widgetCtor","emitLoadedEvent","error","injectorFactory","_injectorRegistry","injectorItem","injector","promise","default","isWidgetConstructorDefaultExport","hasInjector","__WEBPACK_IMPORTED_MODULE_1__core_Evented__","_registry","__WEBPACK_IMPORTED_MODULE_2__Registry__","_registryWidgetLabelMap","_registryInjectorLabelMap","baseRegistry","delete","base","widget","define","defineInjector","globalPrecedence","_get","getFunctionName","labelMap","registries","registry","registeredLabels","on","decoratorMap","boundAuto","__WEBPACK_IMPORTED_MODULE_4__diff__","noBind","WidgetBase","_initialProperties","_changedPropertyKeys","_nodeHandler","__WEBPACK_IMPORTED_MODULE_6__NodeHandler__","_children","_decoratorCache","_properties","_boundRenderFunc","render","_boundInvalidate","invalidate","__WEBPACK_IMPORTED_MODULE_7__vdom__","dirty","onAttach","onDetach","nodeHandler","coreProperties","rendering","inputProperties","_runAfterConstructors","MetaType","_metaMap","cached","properties","changedPropertyKeys","instanceData","__WEBPACK_IMPORTED_MODULE_5__RegistryHandler__","originalProperties","_runBeforeProperties","registeredDiffPropertyNames","getDecorator","propertyNames","allProperties","checkedProperties","diffPropertyResults","runReactions","propertyName","previousProperty","newProperty","_bindFunctionProperty","diffFunctions","changed","executedReactions","reaction","propertyChanged","reactionRun","children","dNode","_runBeforeRenders","runAfterRenders","__WEBPACK_IMPORTED_MODULE_3__d__","decoratorKey","decoratorList","constructor","specificDecoratorList","decorators","allDecorators","instanceMap","unshift","getPrototypeOf","_buildDecoratorList","__WEBPACK_IMPORTED_MODULE_8__Registry__","_bindFunctionPropertyMap","__WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__","bindInfo","boundFunc","scope","beforeProperties","reduce","beforePropertiesFunction","beforeRenders","beforeRenderFunction","updatedRender","console","warn","afterRenders","afterRenderFunction","meta","afterRender","afterConstructors","afterConstructor","pop","browserSpecificTransitionEndEventName","browserSpecificAnimationEndEventName","initialize","determineBrowserStyleNames","runAndCleanUp","startAnimation","finishAnimation","finished","transitionEnd","removeEventListener","enter","enterAnimation","activeClass","enterAnimationActive","classList","remove","exit","exitAnimation","removeNode","exitAnimationActive","child","DOMVNODE","widgetConstructor","WNODE","tag","propertiesOrChildren","deferredPropertiesCallback","VNODE","attrs","props","diffType","isElementNode","tagName","events","domNode","text","__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__","isWNode","isVNode","__WEBPACK_IMPORTED_MODULE_0__handleDecorator__","propertyKey","addDecorator","alwaysRender","__WEBPACK_IMPORTED_MODULE_1__beforeProperties__","customElement","childType","__WEBPACK_IMPORTED_MODULE_0__registerCustomElement__","DOJO","registryFactory","__WEBPACK_IMPORTED_MODULE_1__Registry__","__customElementDescriptor","diffProperty","diffFunction","__WEBPACK_IMPORTED_MODULE_1__diff__","reactionFunction","handleDecorator","handler","descriptor","registeredInjectorsMap","__WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__","inject","getProperties","__WEBPACK_IMPORTED_MODULE_1__handleDecorator__","__WEBPACK_IMPORTED_MODULE_2__beforeProperties__","getInjector","registeredInjectors","__WEBPACK_IMPORTED_MODULE_0__Registry__","reference","ignore","isObjectOrArray","shallow","validOldProperty","validNewProperty","previousKeys","newKeys","some","ProjectorAttachState","AttachType","ProjectorMixin","Base","_root","body","_async","_projectorProperties","_projectionOptions","transitions","__WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__","root","projectorState","Detached","options","Append","_attach","Merge","Attached","async","doc","previousRoot","createDocumentFragment","__setChildren__","__setProperties__","__WEBPACK_IMPORTED_MODULE_1__core_lang__","__setCoreProperties__","_projection","childNodes","outerHTML","__WEBPACK_IMPORTED_MODULE_4__d__","_attachHandle","sync","__WEBPACK_IMPORTED_MODULE_5__vdom__","append","merge","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__","theme","__WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__","themeRegistry","themeInjector","__WEBPACK_IMPORTED_MODULE_1__Injector__","INJECTED_THEME_KEY","setInvalidator","THEME_KEY","ThemedMixin","Themed","_registeredBaseThemeKeys","_recalculateClasses","_theme","classes","_recalculateThemeClasses","className","_getThemeClass","extraClasses","themeClassName","_baseThemeClassesReverseLookup","resultClassNames","_registeredBaseTheme","join","baseThemes","finalBaseTheme","baseTheme","_a","currentClassNames","baseClass","themeKey","__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__","__WEBPACK_IMPORTED_MODULE_5__diff__","__WEBPACK_IMPORTED_MODULE_2__decorators_inject__","CustomElementChildType","DomToWidgetWrapper","__WEBPACK_IMPORTED_MODULE_1__WidgetBase__","__WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__","create","WidgetConstructor","attributeMap","attributeName","HTMLElement","_eventProperties","_initialised","domProperties","_attributesToProperties","filteredPropertyName","_getProperty","_setProperty","eventName","_getEventProperty","_setEventProperty","eventCallback","dispatchEvent","CustomEvent","bubbles","detail","defineProperties","TEXT","__WEBPACK_IMPORTED_MODULE_3__shim_array__","childNode","_render","_childConnected","widgetProperties","renderChildren","__children__","themeContext","__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__","_getTheme","__WEBPACK_IMPORTED_MODULE_5__shim_global__","__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__","_projector","setProperties","dojoce","themes","parentNode","filter","Child","isWidget","__properties__","oldValue","getAttribute","observedAttributes","register","customElements","NAMESPACE_SVG","NAMESPACE_W3","NAMESPACE_XLINK","emptyArray","nodeOperations","widgetInstanceMap","__WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__","nextSiblingMap","projectorStateMap","same","dnode1","dnode2","__WEBPACK_IMPORTED_MODULE_2__d__","instance","missingTransition","checkStyleValue","styleValue","updateEvent","currentValue","projectionOptions","previousValue","projectorInstance","eventMap","nodeMap","previousEvent","evt","addClasses","classNames","split","removeClasses","nodeOperation","propName","propValue","deferredRenderCallbacks","removeOrphanedEvents","previousProperties","onlyEvents","isEvent","substr","updateAttribute","attrName","attrValue","namespace","setAttributeNS","removeAttribute","setAttribute","updateAttributes","previousAttributes","attrNames","attrCount","updateProperties","includesEventsAndAttributes","propertiesUpdated","propNames","propCount","previousClasses","currentClasses","newClasses","previousClassName","classIndex","styleNames","styleCount","j","styleName","newStyleValue","styleApplyer","domValue","lastIndexOf","findIndexOfChild","sameAs","start","toInternalWNode","rendered","filterAndDecorateChildren","nodeAdded","dnode","nodeToRemove","pointerEvents","removeDomNode","removeChild","checkDistinguishable","indexToCheck","parentInstance","nodeIdentifier","parentName","updateChildren","parentVNode","siblings","oldChildren","newChildren","oldChildrenLength","newChildrenLength","depth","oldIndex","newIndex","textUpdated","oldChild","newChild","inserted","addDeferredProperties","updateDom","findOldIndex","addChild","insertBeforeDomNode","childrenArray","nextIndex","insertBeforeChildren","insertBefore","parentElement","createDom","afterRenderCallbacks","childToRemove","addChildren","__WEBPACK_IMPORTED_MODULE_1__shim_array__","nextSiblings","domElement","toUpperCase","initPropertiesAndChildren","parentInstanceData","__WEBPACK_IMPORTED_MODULE_3__Registry__","renderQueue","scheduleRender","__render__","filteredRendered","addRoot","mergeElement","ownerDocument","createElementNS","appendChild","newDomNode","createTextNode","replaceChild","previous","oldNextSiblings","previousRendered","updated","current","newProperties","buildPreviousProperties","updateAnimation","vnode","decoratedDeferredProperties","runDeferredRenderCallbacks","__WEBPACK_IMPORTED_MODULE_0__shim_global__","runAfterRenderCallbacks","requestIdleCallback","setTimeout","renderScheduled","renders","sort","a","b","previouslyRendered","dom","finalProjectorOptions","projectorOptions","defaults","getProjectionOptions","rootNode","projection","widgetFactory","registerCustomElement","defaultExport","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","nextTick","title","browser","env","argv","version","addListener","once","off","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","t","desc","r","Reflect","decorate","setPrototypeOf","g","Function","eval","Menu","__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__","__WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__","_selectedId","onSelected","items","index","_onSelected","selected","__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__","__WEBPACK_IMPORTED_MODULE_5__menu_m_css__","__WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__"," _key","menuContainer"],"mappings":"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","file":"menu-1.0.0.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 01c4fe13e2f1c25e9421","import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/Destroyable.mjs\n// module id = ./node_modules/@dojo/framework/core/Destroyable.mjs\n// module chunks = menu","import Map from '../shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n [...methods].forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/Evented.mjs\n// module id = ./node_modules/@dojo/framework/core/Evented.mjs\n// module chunks = menu","import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/lang.mjs\n// module id = ./node_modules/@dojo/framework/core/lang.mjs\n// module chunks = menu","function isFeatureTestThenable(value) {\n return value && value.then;\n}\n/**\n * A cache of results of feature tests\n */\nexport const testCache = {};\n/**\n * A cache of the un-resolved feature tests\n */\nexport const testFunctions = {};\n/**\n * A cache of unresolved thenables (probably promises)\n * @type {{}}\n */\nconst testThenables = {};\n/**\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\n */\nconst globalScope = (function () {\n /* istanbul ignore else */\n if (typeof window !== 'undefined') {\n // Browsers\n return window;\n }\n else if (typeof global !== 'undefined') {\n // Node\n return global;\n }\n else if (typeof self !== 'undefined') {\n // Web workers\n return self;\n }\n /* istanbul ignore next */\n return {};\n})();\n/* Grab the staticFeatures if there are available */\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\n/* Cleaning up the DojoHasEnviornment */\nif ('DojoHasEnvironment' in globalScope) {\n delete globalScope.DojoHasEnvironment;\n}\n/**\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\n * returns a map.\n *\n * @param value The value to guard for\n */\nfunction isStaticFeatureFunction(value) {\n return typeof value === 'function';\n}\n/**\n * The cache of asserted features that were available in the global scope when the\n * module loaded\n */\nconst staticCache = staticFeatures\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\n : {}; /* Providing an empty cache, if none was in the environment\n\n/**\n* AMD plugin function.\n*\n* Conditional loads modules based on a has feature test value.\n*\n* @param resourceId Gives the resolved module id to load.\n* @param require The loader require function with respect to the module that contained the plugin resource in its\n* dependency list.\n* @param load Callback to loader that consumes result of plugin demand.\n*/\nexport function load(resourceId, require, load, config) {\n resourceId ? require([resourceId], load) : load();\n}\n/**\n * AMD plugin function.\n *\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\n * value(s).\n *\n * @param resourceId The id of the module\n * @param normalize Resolves a relative module id into an absolute module id\n */\nexport function normalize(resourceId, normalize) {\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\n let i = 0;\n function get(skip) {\n const term = tokens[i++];\n if (term === ':') {\n // empty string module name, resolves to null\n return null;\n }\n else {\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\n if (tokens[i++] === '?') {\n if (!skip && has(term)) {\n // matched the feature, get the first value from the options\n return get();\n }\n else {\n // did not match, get the second value, passing over the first\n get(true);\n return get(skip);\n }\n }\n // a module\n return term;\n }\n }\n const id = get();\n return id && normalize(id);\n}\n/**\n * Check if a feature has already been registered\n *\n * @param feature the name of the feature\n */\nexport function exists(feature) {\n const normalizedFeature = feature.toLowerCase();\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\n}\n/**\n * Register a new test for a named feature.\n *\n * @example\n * has.add('dom-addeventlistener', !!document.addEventListener);\n *\n * @example\n * has.add('touch-events', function () {\n * return 'ontouchstart' in document\n * });\n *\n * @param feature the name of the feature\n * @param value the value reported of the feature, or a function that will be executed once on first test\n * @param overwrite if an existing value should be overwritten. Defaults to false.\n */\nexport function add(feature, value, overwrite = false) {\n const normalizedFeature = feature.toLowerCase();\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\n }\n if (typeof value === 'function') {\n testFunctions[normalizedFeature] = value;\n }\n else if (isFeatureTestThenable(value)) {\n testThenables[feature] = value.then((resolvedValue) => {\n testCache[feature] = resolvedValue;\n delete testThenables[feature];\n }, () => {\n delete testThenables[feature];\n });\n }\n else {\n testCache[normalizedFeature] = value;\n delete testFunctions[normalizedFeature];\n }\n}\n/**\n * Return the current value of a named feature.\n *\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\n */\nexport default function has(feature) {\n let result;\n const normalizedFeature = feature.toLowerCase();\n if (normalizedFeature in staticCache) {\n result = staticCache[normalizedFeature];\n }\n else if (testFunctions[normalizedFeature]) {\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\n delete testFunctions[normalizedFeature];\n }\n else if (normalizedFeature in testCache) {\n result = testCache[normalizedFeature];\n }\n else if (feature in testThenables) {\n return false;\n }\n else {\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\n }\n return result;\n}\n/*\n * Out of the box feature tests\n */\n/* Environments */\n/* Used as a value to provide a debug only code path */\nadd('debug', true);\n/* Detects if the environment is \"browser like\" */\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\n/* Detects if the environment appears to be NodeJS */\nadd('host-node', function () {\n if (typeof process === 'object' && process.versions && process.versions.node) {\n return process.versions.node;\n }\n});\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/has/has.mjs\n// module id = ./node_modules/@dojo/framework/has/has.mjs\n// module chunks = menu","import { isArrayLike, ShimIterator } from './iterator';\nimport global from './global';\nimport { is as objectIs } from './object';\nimport has from './support/has';\nimport './Symbol';\nexport let Map = global.Map;\nif (!true) {\n Map = (_a = class Map {\n constructor(iterable) {\n this._keys = [];\n this._values = [];\n this[Symbol.toStringTag] = 'Map';\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const value = iterable[i];\n this.set(value[0], value[1]);\n }\n }\n else {\n for (const value of iterable) {\n this.set(value[0], value[1]);\n }\n }\n }\n }\n /**\n * An alternative to Array.prototype.indexOf using Object.is\n * to check for equality. See http://mzl.la/1zuKO2V\n */\n _indexOfKey(keys, key) {\n for (let i = 0, length = keys.length; i < length; i++) {\n if (objectIs(keys[i], key)) {\n return i;\n }\n }\n return -1;\n }\n get size() {\n return this._keys.length;\n }\n clear() {\n this._keys.length = this._values.length = 0;\n }\n delete(key) {\n const index = this._indexOfKey(this._keys, key);\n if (index < 0) {\n return false;\n }\n this._keys.splice(index, 1);\n this._values.splice(index, 1);\n return true;\n }\n entries() {\n const values = this._keys.map((key, i) => {\n return [key, this._values[i]];\n });\n return new ShimIterator(values);\n }\n forEach(callback, context) {\n const keys = this._keys;\n const values = this._values;\n for (let i = 0, length = keys.length; i < length; i++) {\n callback.call(context, values[i], keys[i], this);\n }\n }\n get(key) {\n const index = this._indexOfKey(this._keys, key);\n return index < 0 ? undefined : this._values[index];\n }\n has(key) {\n return this._indexOfKey(this._keys, key) > -1;\n }\n keys() {\n return new ShimIterator(this._keys);\n }\n set(key, value) {\n let index = this._indexOfKey(this._keys, key);\n index = index < 0 ? this._keys.length : index;\n this._keys[index] = key;\n this._values[index] = value;\n return this;\n }\n values() {\n return new ShimIterator(this._values);\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n },\n _a[Symbol.species] = _a,\n _a);\n}\nexport default Map;\nvar _a;\n//# sourceMappingURL=Map.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Map.mjs\n// module id = ./node_modules/@dojo/framework/shim/Map.mjs\n// module chunks = menu","import global from './global';\nimport { queueMicroTask } from './support/queue';\nimport './Symbol';\nimport has from './support/has';\nexport let ShimPromise = global.Promise;\nexport const isThenable = function isThenable(value) {\n return value && typeof value.then === 'function';\n};\nif (!true) {\n global.Promise = ShimPromise = (_a = class Promise {\n /**\n * Creates a new Promise.\n *\n * @constructor\n *\n * @param executor\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\n * starting the asynchronous operation when it is invoked.\n *\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\n * successfully, or the `reject` function when the operation fails.\n */\n constructor(executor) {\n /**\n * The current state of this promise.\n */\n this.state = 1 /* Pending */;\n this[Symbol.toStringTag] = 'Promise';\n /**\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\n */\n let isChained = false;\n /**\n * Whether or not this promise is in a resolved state.\n */\n const isResolved = () => {\n return this.state !== 1 /* Pending */ || isChained;\n };\n /**\n * Callbacks that should be invoked once the asynchronous operation has completed.\n */\n let callbacks = [];\n /**\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\n * enqueues callbacks for execution on the next event loop turn.\n */\n let whenFinished = function (callback) {\n if (callbacks) {\n callbacks.push(callback);\n }\n };\n /**\n * Settles this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const settle = (newState, value) => {\n // A promise can only be settled once.\n if (this.state !== 1 /* Pending */) {\n return;\n }\n this.state = newState;\n this.resolvedValue = value;\n whenFinished = queueMicroTask;\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\n // wait an extra turn.\n if (callbacks && callbacks.length > 0) {\n queueMicroTask(function () {\n if (callbacks) {\n let count = callbacks.length;\n for (let i = 0; i < count; ++i) {\n callbacks[i].call(null);\n }\n callbacks = null;\n }\n });\n }\n };\n /**\n * Resolves this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const resolve = (newState, value) => {\n if (isResolved()) {\n return;\n }\n if (isThenable(value)) {\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\n isChained = true;\n }\n else {\n settle(newState, value);\n }\n };\n this.then = (onFulfilled, onRejected) => {\n return new Promise((resolve, reject) => {\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\n // event loop.\n whenFinished(() => {\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\n if (typeof callback === 'function') {\n try {\n resolve(callback(this.resolvedValue));\n }\n catch (error) {\n reject(error);\n }\n }\n else if (this.state === 2 /* Rejected */) {\n reject(this.resolvedValue);\n }\n else {\n resolve(this.resolvedValue);\n }\n });\n });\n };\n try {\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\n }\n catch (error) {\n settle(2 /* Rejected */, error);\n }\n }\n static all(iterable) {\n return new this(function (resolve, reject) {\n const values = [];\n let complete = 0;\n let total = 0;\n let populating = true;\n function fulfill(index, value) {\n values[index] = value;\n ++complete;\n finish();\n }\n function finish() {\n if (populating || complete < total) {\n return;\n }\n resolve(values);\n }\n function processItem(index, item) {\n ++total;\n if (isThenable(item)) {\n // If an item Promise rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(fulfill.bind(null, index), reject);\n }\n else {\n Promise.resolve(item).then(fulfill.bind(null, index));\n }\n }\n let i = 0;\n for (const value of iterable) {\n processItem(i, value);\n i++;\n }\n populating = false;\n finish();\n });\n }\n static race(iterable) {\n return new this(function (resolve, reject) {\n for (const item of iterable) {\n if (item instanceof Promise) {\n // If a Promise item rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(resolve, reject);\n }\n else {\n Promise.resolve(item).then(resolve);\n }\n }\n });\n }\n static reject(reason) {\n return new this(function (resolve, reject) {\n reject(reason);\n });\n }\n static resolve(value) {\n return new this(function (resolve) {\n resolve(value);\n });\n }\n catch(onRejected) {\n return this.then(undefined, onRejected);\n }\n },\n _a[Symbol.species] = ShimPromise,\n _a);\n}\nexport default ShimPromise;\nvar _a;\n//# sourceMappingURL=Promise.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Promise.mjs\n// module id = ./node_modules/@dojo/framework/shim/Promise.mjs\n// module chunks = menu","import has from './support/has';\nimport global from './global';\nimport { getValueDescriptor } from './support/util';\nexport let Symbol = global.Symbol;\nif (!true) {\n /**\n * Throws if the value is not a symbol, used internally within the Shim\n * @param {any} value The value to check\n * @return {symbol} Returns the symbol or throws\n */\n const validateSymbol = function validateSymbol(value) {\n if (!isSymbol(value)) {\n throw new TypeError(value + ' is not a symbol');\n }\n return value;\n };\n const defineProperties = Object.defineProperties;\n const defineProperty = Object.defineProperty;\n const create = Object.create;\n const objPrototype = Object.prototype;\n const globalSymbols = {};\n const getSymbolName = (function () {\n const created = create(null);\n return function (desc) {\n let postfix = 0;\n let name;\n while (created[String(desc) + (postfix || '')]) {\n ++postfix;\n }\n desc += String(postfix || '');\n created[desc] = true;\n name = '@@' + desc;\n // FIXME: Temporary guard until the duplicate execution when testing can be\n // pinned down.\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\n defineProperty(objPrototype, name, {\n set: function (value) {\n defineProperty(this, name, getValueDescriptor(value));\n }\n });\n }\n return name;\n };\n })();\n const InternalSymbol = function Symbol(description) {\n if (this instanceof InternalSymbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n return Symbol(description);\n };\n Symbol = global.Symbol = function Symbol(description) {\n if (this instanceof Symbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n const sym = Object.create(InternalSymbol.prototype);\n description = description === undefined ? '' : String(description);\n return defineProperties(sym, {\n __description__: getValueDescriptor(description),\n __name__: getValueDescriptor(getSymbolName(description))\n });\n };\n /* Decorate the Symbol function with the appropriate properties */\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\n if (globalSymbols[key]) {\n return globalSymbols[key];\n }\n return (globalSymbols[key] = Symbol(String(key)));\n }));\n defineProperties(Symbol, {\n keyFor: getValueDescriptor(function (sym) {\n let key;\n validateSymbol(sym);\n for (key in globalSymbols) {\n if (globalSymbols[key] === sym) {\n return key;\n }\n }\n }),\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\n match: getValueDescriptor(Symbol.for('match'), false, false),\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\n search: getValueDescriptor(Symbol.for('search'), false, false),\n species: getValueDescriptor(Symbol.for('species'), false, false),\n split: getValueDescriptor(Symbol.for('split'), false, false),\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\n });\n /* Decorate the InternalSymbol object */\n defineProperties(InternalSymbol.prototype, {\n constructor: getValueDescriptor(Symbol),\n toString: getValueDescriptor(function () {\n return this.__name__;\n }, false, false)\n });\n /* Decorate the Symbol.prototype */\n defineProperties(Symbol.prototype, {\n toString: getValueDescriptor(function () {\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\n }),\n valueOf: getValueDescriptor(function () {\n return validateSymbol(this);\n })\n });\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\n return validateSymbol(this);\n }));\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\n}\n/**\n * A custom guard function that determines if an object is a symbol or not\n * @param {any} value The value to check to see if it is a symbol or not\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\n */\nexport function isSymbol(value) {\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\n}\n/**\n * Fill any missing well known symbols if the native Symbol is missing them\n */\n[\n 'hasInstance',\n 'isConcatSpreadable',\n 'iterator',\n 'species',\n 'replace',\n 'search',\n 'split',\n 'match',\n 'toPrimitive',\n 'toStringTag',\n 'unscopables',\n 'observable'\n].forEach((wellKnown) => {\n if (!Symbol[wellKnown]) {\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\n }\n});\nexport default Symbol;\n//# sourceMappingURL=Symbol.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Symbol.mjs\n// module id = ./node_modules/@dojo/framework/shim/Symbol.mjs\n// module chunks = menu","import global from './global';\nimport { isArrayLike } from './iterator';\nimport has from './support/has';\nimport './Symbol';\nexport let WeakMap = global.WeakMap;\nif (!true) {\n const DELETED = {};\n const getUID = function getUID() {\n return Math.floor(Math.random() * 100000000);\n };\n const generateName = (function () {\n let startId = Math.floor(Date.now() % 100000000);\n return function generateName() {\n return '__wm' + getUID() + (startId++ + '__');\n };\n })();\n WeakMap = class WeakMap {\n constructor(iterable) {\n this[Symbol.toStringTag] = 'WeakMap';\n this._name = generateName();\n this._frozenEntries = [];\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const item = iterable[i];\n this.set(item[0], item[1]);\n }\n }\n else {\n for (const [key, value] of iterable) {\n this.set(key, value);\n }\n }\n }\n }\n _getFrozenEntryIndex(key) {\n for (let i = 0; i < this._frozenEntries.length; i++) {\n if (this._frozenEntries[i].key === key) {\n return i;\n }\n }\n return -1;\n }\n delete(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n entry.value = DELETED;\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n this._frozenEntries.splice(frozenIndex, 1);\n return true;\n }\n return false;\n }\n get(key) {\n if (key === undefined || key === null) {\n return undefined;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n return entry.value;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return this._frozenEntries[frozenIndex].value;\n }\n }\n has(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return true;\n }\n return false;\n }\n set(key, value) {\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\n throw new TypeError('Invalid value used as weak map key');\n }\n let entry = key[this._name];\n if (!entry || entry.key !== key) {\n entry = Object.create(null, {\n key: { value: key }\n });\n if (Object.isFrozen(key)) {\n this._frozenEntries.push(entry);\n }\n else {\n Object.defineProperty(key, this._name, {\n value: entry\n });\n }\n }\n entry.value = value;\n return this;\n }\n };\n}\nexport default WeakMap;\n//# sourceMappingURL=WeakMap.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/WeakMap.mjs\n// module id = ./node_modules/@dojo/framework/shim/WeakMap.mjs\n// module chunks = menu","import global from './global';\nimport { isArrayLike, isIterable } from './iterator';\nimport { MAX_SAFE_INTEGER } from './number';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\nexport let from;\n/**\n * Creates a new array from the function parameters.\n *\n * @param arguments Any number of arguments for the array\n * @return An array from the given arguments\n */\nexport let of;\n/* ES6 Array instance methods */\n/**\n * Copies data internally within an array or array-like object.\n *\n * @param target The target array-like object\n * @param offset The index to start copying values to; if negative, it counts backwards from length\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\n * @return The target\n */\nexport let copyWithin;\n/**\n * Fills elements of an array-like object with the specified value.\n *\n * @param target The target to fill\n * @param value The value to fill each element of the target with\n * @param start The first index to fill\n * @param end The (exclusive) index at which to stop filling\n * @return The filled target\n */\nexport let fill;\n/**\n * Finds and returns the first instance matching the callback or undefined if one is not found.\n *\n * @param target An array-like object\n * @param callback A function returning if the current value matches a criteria\n * @param thisArg The execution context for the find function\n * @return The first element matching the callback, or undefined if one does not exist\n */\nexport let find;\n/**\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\n * or -1 if no values satisfy it.\n *\n * @param target An array-like object\n * @param callback A function returning true if the current value satisfies its criteria\n * @param thisArg The execution context for the find function\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\n */\nexport let findIndex;\n/* ES7 Array instance methods */\n/**\n * Determines whether an array includes a given value\n *\n * @param target the target array-like object\n * @param searchElement the item to search for\n * @param fromIndex the starting index to search from\n * @return `true` if the array includes the element, otherwise `false`\n */\nexport let includes;\nif (true && true) {\n from = global.Array.from;\n of = global.Array.of;\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\n fill = wrapNative(global.Array.prototype.fill);\n find = wrapNative(global.Array.prototype.find);\n findIndex = wrapNative(global.Array.prototype.findIndex);\n}\nelse {\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n if (isNaN(length)) {\n return 0;\n }\n length = Number(length);\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n /**\n * From ES6 7.1.4 ToInteger()\n *\n * @param value A value to convert\n * @return An integer\n */\n const toInteger = function toInteger(value) {\n value = Number(value);\n if (isNaN(value)) {\n return 0;\n }\n if (value === 0 || !isFinite(value)) {\n return value;\n }\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\n };\n /**\n * Normalizes an offset against a given length, wrapping it if negative.\n *\n * @param value The original offset\n * @param length The total length to normalize against\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\n */\n const normalizeOffset = function normalizeOffset(value, length) {\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\n };\n from = function from(arrayLike, mapFunction, thisArg) {\n if (arrayLike == null) {\n throw new TypeError('from: requires an array-like object');\n }\n if (mapFunction && thisArg) {\n mapFunction = mapFunction.bind(thisArg);\n }\n /* tslint:disable-next-line:variable-name */\n const Constructor = this;\n const length = toLength(arrayLike.length);\n // Support extension\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\n return array;\n }\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\n // with the iteration on IE when using a NaN array length.\n if (isArrayLike(arrayLike)) {\n if (length === 0) {\n return [];\n }\n for (let i = 0; i < arrayLike.length; i++) {\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\n }\n }\n else {\n let i = 0;\n for (const value of arrayLike) {\n array[i] = mapFunction ? mapFunction(value, i) : value;\n i++;\n }\n }\n if (arrayLike.length !== undefined) {\n array.length = length;\n }\n return array;\n };\n of = function of(...items) {\n return Array.prototype.slice.call(items);\n };\n copyWithin = function copyWithin(target, offset, start, end) {\n if (target == null) {\n throw new TypeError('copyWithin: target must be an array-like object');\n }\n const length = toLength(target.length);\n offset = normalizeOffset(toInteger(offset), length);\n start = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n let count = Math.min(end - start, length - offset);\n let direction = 1;\n if (offset > start && offset < start + count) {\n direction = -1;\n start += count - 1;\n offset += count - 1;\n }\n while (count > 0) {\n if (start in target) {\n target[offset] = target[start];\n }\n else {\n delete target[offset];\n }\n offset += direction;\n start += direction;\n count--;\n }\n return target;\n };\n fill = function fill(target, value, start, end) {\n const length = toLength(target.length);\n let i = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n while (i < end) {\n target[i++] = value;\n }\n return target;\n };\n find = function find(target, callback, thisArg) {\n const index = findIndex(target, callback, thisArg);\n return index !== -1 ? target[index] : undefined;\n };\n findIndex = function findIndex(target, callback, thisArg) {\n const length = toLength(target.length);\n if (!callback) {\n throw new TypeError('find: second argument must be a function');\n }\n if (thisArg) {\n callback = callback.bind(thisArg);\n }\n for (let i = 0; i < length; i++) {\n if (callback(target[i], i, target)) {\n return i;\n }\n }\n return -1;\n };\n}\nif (true) {\n includes = wrapNative(global.Array.prototype.includes);\n}\nelse {\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n length = Number(length);\n if (isNaN(length)) {\n return 0;\n }\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n includes = function includes(target, searchElement, fromIndex = 0) {\n let len = toLength(target.length);\n for (let i = fromIndex; i < len; ++i) {\n const currentElement = target[i];\n if (searchElement === currentElement ||\n (searchElement !== searchElement && currentElement !== currentElement)) {\n return true;\n }\n }\n return false;\n };\n}\n//# sourceMappingURL=array.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/array.mjs\n// module id = ./node_modules/@dojo/framework/shim/array.mjs\n// module chunks = menu","const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/global.mjs\n// module id = ./node_modules/@dojo/framework/shim/global.mjs\n// module chunks = menu","import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/number.mjs\n// module id = ./node_modules/@dojo/framework/shim/number.mjs\n// module chunks = menu","import global from './global';\nimport has from './support/has';\nimport { isSymbol } from './Symbol';\nexport let assign;\n/**\n * Gets the own property descriptor of the specified object.\n * An own property descriptor is one that is defined directly on the object and is not\n * inherited from the object's prototype.\n * @param o Object that contains the property.\n * @param p Name of the property.\n */\nexport let getOwnPropertyDescriptor;\n/**\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\n * @param o Object that contains the own properties.\n */\nexport let getOwnPropertyNames;\n/**\n * Returns an array of all symbol properties found directly on object o.\n * @param o Object to retrieve the symbols from.\n */\nexport let getOwnPropertySymbols;\n/**\n * Returns true if the values are the same value, false otherwise.\n * @param value1 The first value.\n * @param value2 The second value.\n */\nexport let is;\n/**\n * Returns the names of the enumerable properties and methods of an object.\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n */\nexport let keys;\n/* ES7 Object static methods */\nexport let getOwnPropertyDescriptors;\nexport let entries;\nexport let values;\nif (true) {\n const globalObject = global.Object;\n assign = globalObject.assign;\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\n is = globalObject.is;\n keys = globalObject.keys;\n}\nelse {\n keys = function symbolAwareKeys(o) {\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n assign = function assign(target, ...sources) {\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const to = Object(target);\n sources.forEach((nextSource) => {\n if (nextSource) {\n // Skip over if undefined or null\n keys(nextSource).forEach((nextKey) => {\n to[nextKey] = nextSource[nextKey];\n });\n }\n });\n return to;\n };\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\n if (isSymbol(prop)) {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n else {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n };\n getOwnPropertyNames = function getOwnPropertyNames(o) {\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n return Object.getOwnPropertyNames(o)\n .filter((key) => Boolean(key.match(/^@@.+/)))\n .map((key) => Symbol.for(key.substring(2)));\n };\n is = function is(value1, value2) {\n if (value1 === value2) {\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\n }\n return value1 !== value1 && value2 !== value2; // NaN\n };\n}\nif (true) {\n const globalObject = global.Object;\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\n entries = globalObject.entries;\n values = globalObject.values;\n}\nelse {\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\n return getOwnPropertyNames(o).reduce((previous, key) => {\n previous[key] = getOwnPropertyDescriptor(o, key);\n return previous;\n }, {});\n };\n entries = function entries(o) {\n return keys(o).map((key) => [key, o[key]]);\n };\n values = function values(o) {\n return keys(o).map((key) => o[key]);\n };\n}\n//# sourceMappingURL=object.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/object.mjs\n// module id = ./node_modules/@dojo/framework/shim/object.mjs\n// module chunks = menu","import global from './global';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\n/**\n * The minimum location of high surrogates\n */\nexport const HIGH_SURROGATE_MIN = 0xd800;\n/**\n * The maximum location of high surrogates\n */\nexport const HIGH_SURROGATE_MAX = 0xdbff;\n/**\n * The minimum location of low surrogates\n */\nexport const LOW_SURROGATE_MIN = 0xdc00;\n/**\n * The maximum location of low surrogates\n */\nexport const LOW_SURROGATE_MAX = 0xdfff;\n/* ES6 static methods */\n/**\n * Return the String value whose elements are, in order, the elements in the List elements.\n * If length is 0, the empty string is returned.\n * @param codePoints The code points to generate the string\n */\nexport let fromCodePoint;\n/**\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\n * as such the first argument will be a well formed template call site object and the rest\n * parameter will contain the substitution values.\n * @param template A well-formed template string call site representation.\n * @param substitutions A set of substitution values.\n */\nexport let raw;\n/* ES6 instance methods */\n/**\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\n * value of the UTF-16 encoded code point starting at the string element at position pos in\n * the String resulting from converting this object to a String.\n * If there is no element at that position, the result is undefined.\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\n */\nexport let codePointAt;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * endPosition – length(this). Otherwise returns false.\n */\nexport let endsWith;\n/**\n * Returns true if searchString appears as a substring of the result of converting this\n * object to a String, at one or more positions that are\n * greater than or equal to position; otherwise, returns false.\n * @param target The target string\n * @param searchString search string\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\n */\nexport let includes;\n/**\n * Returns the String value result of normalizing the string into the normalization form\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\n * @param target The target string\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\n * is \"NFC\"\n */\nexport let normalize;\n/**\n * Returns a String value that is made from count copies appended together. If count is 0,\n * T is the empty String is returned.\n * @param count number of copies to append\n */\nexport let repeat;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * position. Otherwise returns false.\n */\nexport let startsWith;\n/* ES7 instance methods */\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the end (right) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padEnd;\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the start (left) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padStart;\nif (true && true) {\n fromCodePoint = global.String.fromCodePoint;\n raw = global.String.raw;\n codePointAt = wrapNative(global.String.prototype.codePointAt);\n endsWith = wrapNative(global.String.prototype.endsWith);\n includes = wrapNative(global.String.prototype.includes);\n normalize = wrapNative(global.String.prototype.normalize);\n repeat = wrapNative(global.String.prototype.repeat);\n startsWith = wrapNative(global.String.prototype.startsWith);\n}\nelse {\n /**\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\n * Used by startsWith, includes, and endsWith.\n *\n * @return Normalized position.\n */\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\n if (text == null) {\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\n }\n const length = text.length;\n position = position !== position ? (isEnd ? length : 0) : position;\n return [text, String(search), Math.min(Math.max(position, 0), length)];\n };\n fromCodePoint = function fromCodePoint(...codePoints) {\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\n const length = arguments.length;\n if (!length) {\n return '';\n }\n const fromCharCode = String.fromCharCode;\n const MAX_SIZE = 0x4000;\n let codeUnits = [];\n let index = -1;\n let result = '';\n while (++index < length) {\n let codePoint = Number(arguments[index]);\n // Code points must be finite integers within the valid range\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\n if (!isValid) {\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint);\n }\n else {\n // Astral code point; split in surrogate halves\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += fromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n raw = function raw(callSite, ...substitutions) {\n let rawStrings = callSite.raw;\n let result = '';\n let numSubstitutions = substitutions.length;\n if (callSite == null || callSite.raw == null) {\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\n }\n for (let i = 0, length = rawStrings.length; i < length; i++) {\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\n }\n return result;\n };\n codePointAt = function codePointAt(text, position = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\n if (text == null) {\n throw new TypeError('string.codePointAt requries a valid string.');\n }\n const length = text.length;\n if (position !== position) {\n position = 0;\n }\n if (position < 0 || position >= length) {\n return undefined;\n }\n // Get the first code unit\n const first = text.charCodeAt(position);\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n const second = text.charCodeAt(position + 1);\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\n }\n }\n return first;\n };\n endsWith = function endsWith(text, search, endPosition) {\n if (endPosition == null) {\n endPosition = text.length;\n }\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\n const start = endPosition - search.length;\n if (start < 0) {\n return false;\n }\n return text.slice(start, endPosition) === search;\n };\n includes = function includes(text, search, position = 0) {\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\n return text.indexOf(search, position) !== -1;\n };\n repeat = function repeat(text, count = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\n if (text == null) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (count !== count) {\n count = 0;\n }\n if (count < 0 || count === Infinity) {\n throw new RangeError('string.repeat requires a non-negative finite count.');\n }\n let result = '';\n while (count) {\n if (count % 2) {\n result += text;\n }\n if (count > 1) {\n text += text;\n }\n count >>= 1;\n }\n return result;\n };\n startsWith = function startsWith(text, search, position = 0) {\n search = String(search);\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\n const end = position + search.length;\n if (end > text.length) {\n return false;\n }\n return text.slice(position, end) === search;\n };\n}\nif (true) {\n padEnd = wrapNative(global.String.prototype.padEnd);\n padStart = wrapNative(global.String.prototype.padStart);\n}\nelse {\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padEnd requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText +=\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length);\n }\n return strText;\n };\n padStart = function padStart(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padStart requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText =\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length) +\n strText;\n }\n return strText;\n };\n}\n//# sourceMappingURL=string.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/string.mjs\n// module id = ./node_modules/@dojo/framework/shim/string.mjs\n// module chunks = menu","import has, { add } from '../../has/has';\nimport global from '../global';\nexport default has;\nexport * from '../../has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/has.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/has.mjs\n// module chunks = menu","import global from '../global';\nimport has from './has';\nfunction executeTask(item) {\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n}\nfunction getQueueHandle(item, destructor) {\n return {\n destroy: function () {\n this.destroy = function () { };\n item.isActive = false;\n item.callback = null;\n if (destructor) {\n destructor();\n }\n }\n };\n}\nlet checkMicroTaskQueue;\nlet microTasks;\n/**\n * Schedules a callback to the macrotask queue.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueTask = (function () {\n let destructor;\n let enqueue;\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\n if (true) {\n const queue = [];\n global.addEventListener('message', function (event) {\n // Confirm that the event was triggered by the current window and by this particular implementation.\n if (event.source === global && event.data === 'dojo-queue-message') {\n event.stopPropagation();\n if (queue.length) {\n executeTask(queue.shift());\n }\n }\n });\n enqueue = function (item) {\n queue.push(item);\n global.postMessage('dojo-queue-message', '*');\n };\n }\n else if (false) {\n destructor = global.clearImmediate;\n enqueue = function (item) {\n return setImmediate(executeTask.bind(null, item));\n };\n }\n else {\n destructor = global.clearTimeout;\n enqueue = function (item) {\n return setTimeout(executeTask.bind(null, item), 0);\n };\n }\n function queueTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const id = enqueue(item);\n return getQueueHandle(item, destructor &&\n function () {\n destructor(id);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueTask(callback);\n };\n})();\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\nif (!true) {\n let isMicroTaskQueued = false;\n microTasks = [];\n checkMicroTaskQueue = function () {\n if (!isMicroTaskQueued) {\n isMicroTaskQueued = true;\n queueTask(function () {\n isMicroTaskQueued = false;\n if (microTasks.length) {\n let item;\n while ((item = microTasks.shift())) {\n executeTask(item);\n }\n }\n });\n }\n };\n}\n/**\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\n *\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueAnimationTask = (function () {\n if (!true) {\n return queueTask;\n }\n function queueAnimationTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\n return getQueueHandle(item, function () {\n cancelAnimationFrame(rafId);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueAnimationTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueAnimationTask(callback);\n };\n})();\n/**\n * Schedules a callback to the microtask queue.\n *\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\n * registered with `queueTask` or `queueAnimationTask`.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport let queueMicroTask = (function () {\n let enqueue;\n if (false) {\n enqueue = function (item) {\n global.process.nextTick(executeTask.bind(null, item));\n };\n }\n else if (true) {\n enqueue = function (item) {\n global.Promise.resolve(item).then(executeTask);\n };\n }\n else if (true) {\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const node = document.createElement('div');\n const queue = [];\n const observer = new HostMutationObserver(function () {\n while (queue.length > 0) {\n const item = queue.shift();\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n }\n });\n observer.observe(node, { attributes: true });\n enqueue = function (item) {\n queue.push(item);\n node.setAttribute('queueStatus', '1');\n };\n }\n else {\n enqueue = function (item) {\n checkMicroTaskQueue();\n microTasks.push(item);\n };\n }\n return function (callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n enqueue(item);\n return getQueueHandle(item);\n };\n})();\n//# sourceMappingURL=queue.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/queue.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/queue.mjs\n// module chunks = menu","/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/util.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/util.mjs\n// module chunks = menu","import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/Injector.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/Injector.mjs\n// module chunks = menu","import { Evented } from '../core/Evented';\nimport Map from '../shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/NodeHandler.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/NodeHandler.mjs\n// module chunks = menu","import Promise from '../shim/Promise';\nimport Map from '../shim/Map';\nimport Symbol from '../shim/Symbol';\nimport { Evented } from '../core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/Registry.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/Registry.mjs\n// module chunks = menu","import { Map } from '../shim/Map';\nimport { Evented } from '../core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs\n// module chunks = menu","import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/WidgetBase.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/WidgetBase.mjs\n// module chunks = menu","let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs\n// module chunks = menu","import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/d.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/d.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs\n// module chunks = menu","import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs\n// module chunks = menu","/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs\n// module chunks = menu","import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/inject.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/inject.mjs\n// module chunks = menu","import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/diff.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/diff.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs\n// module chunks = menu","import global from '../shim/global';\nimport { from as arrayFrom } from '../shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '../shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst nextSiblingMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode[propName]();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (nodeOperations.indexOf(propName) !== -1) {\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const item = instanceMap.get(dnode.instance);\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n oldIndex++;\n newIndex++;\n textUpdated =\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let childrenArray = oldChildren;\n let nextIndex = oldIndex + 1;\n let child = oldChildren[oldIndex];\n if (!child) {\n child = siblings[0];\n nextIndex = 1;\n childrenArray = siblings;\n }\n if (child) {\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n const item = instanceMap.get(insertBefore.instance);\n if (item && item.dnode.rendered) {\n insertBeforeChildren.push(...item.dnode.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\n break;\n }\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\n insertBeforeChildren.push(childrenArray[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const nextSiblings = children.slice(i + 1);\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n nextSiblingMap.set(instance, nextSiblings);\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n nextSiblingMap.set(instance, nextSiblings);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n const nextSiblings = nextSiblingMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/vdom.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/vdom.mjs\n// module chunks = menu","/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module id = ./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module chunks = menu","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = ./node_modules/process/browser.js\n// module chunks = menu","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator];\r\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/tslib/tslib.es6.js\n// module id = ./node_modules/tslib/tslib.es6.js\n// module chunks = menu","var 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 || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = 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// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = ./node_modules/webpack/buildin/global.js\n// module chunks = menu","import { v } from '@dojo/framework/widget-core/d';\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\nimport { WidgetProperties, WNode } from '@dojo/framework/widget-core/interfaces';\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\nimport { MenuItem, MenuItemProperties } from '../menu-item/MenuItem';\n\nimport * as css from './menu.m.css';\n\ninterface MenuProperties extends WidgetProperties {\n\tonSelected: (data: any) => void;\n}\n\n@customElement({\n\ttag: 'demo-menu',\n\tevents: ['onSelected']\n})\n@theme(css)\nexport class Menu extends ThemedMixin(WidgetBase)> {\n\tprivate _selectedId: number;\n\n\tprivate _onSelected(id: number, data: any) {\n\t\tthis._selectedId = id;\n\t\tthis.properties.onSelected(data);\n\t\tthis.invalidate();\n\t}\n\n\tprotected render() {\n\t\tconst items = this.children.map((child, index) => {\n\t\t\tif (child) {\n\t\t\t\tconst properties: Partial = {\n\t\t\t\t\tonSelected: (data: any) => {\n\t\t\t\t\t\tthis._onSelected(index, data);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif (this._selectedId !== undefined) {\n\t\t\t\t\tproperties.selected = index === this._selectedId;\n\t\t\t\t}\n\t\t\t\tchild.properties = { ...child.properties, ...properties };\n\t\t\t}\n\t\t\treturn child;\n\t\t});\n\n\t\treturn v('nav', { classes: this.theme(css.root) }, [\n\t\t\tv(\n\t\t\t\t'ol',\n\t\t\t\t{\n\t\t\t\t\tclasses: this.theme(css.menuContainer)\n\t\t\t\t},\n\t\t\t\titems\n\t\t\t)\n\t\t]);\n\t}\n}\n\nexport default Menu;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@dojo/webpack-contrib/css-module-dts-loader?type=ts&instanceName=0_menu!./src/menu/Menu.ts","// removed by extract-text-webpack-plugin\nmodule.exports = {\" _key\":\"test-app/menu\",\"root\":\"_3bA6jdSn\",\"menuContainer\":\"_1eoGfqku\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/menu/menu.m.css\n// module id = ./src/menu/menu.m.css\n// module chunks = menu"],"sourceRoot":""} \ No newline at end of file diff --git a/test-app/fixtures/unix/info/menu-item/report.html b/test-app/fixtures/unix/info/menu-item/report.html index 930890f..ad3b00d 100644 --- a/test-app/fixtures/unix/info/menu-item/report.html +++ b/test-app/fixtures/unix/info/menu-item/report.html @@ -4,7 +4,7 @@ Webpack Bundle Analyzer diff --git a/test-app/fixtures/unix/info/menu-item/stats.json b/test-app/fixtures/unix/info/menu-item/stats.json index f448cfe..3a0f563 100644 --- a/test-app/fixtures/unix/info/menu-item/stats.json +++ b/test-app/fixtures/unix/info/menu-item/stats.json @@ -2,8 +2,8 @@ "errors": [], "warnings": [], "version": "3.8.1", - "hash": "931d3d7713b7be398580", - "time": 8071, + "hash": "ea035e8f5bc7b3c31aa9", + "time": 5019, "publicPath": "", "assetsByChunkName": { "menu-item": [ @@ -16,7 +16,7 @@ "assets": [ { "name": "menu-item-1.0.0.js", - "size": 54046, + "size": 55222, "chunks": [ "menu-item" ], @@ -38,7 +38,7 @@ }, { "name": "menu-item-1.0.0.js.map", - "size": 267737, + "size": 269167, "chunks": [ "menu-item" ], @@ -80,7 +80,7 @@ "initial": true, "entry": true, "extraAsync": false, - "size": 191947, + "size": 192149, "names": [ "menu-item" ], @@ -90,16 +90,16 @@ "menu-item-1.0.0.js.map", "menu-item-1.0.0.css.map" ], - "hash": "841539ebdd3cbcdc7e40", + "hash": "b9286203e08d4aeb5c84", "parents": [], "modules": [ { - "id": "./node_modules/@dojo/core/Destroyable.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "name": "./node_modules/@dojo/core/Destroyable.mjs", + "id": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "name": "./node_modules/@dojo/framework/core/Destroyable.mjs", "index": 25, "index2": 17, - "size": 1668, + "size": 1665, "cacheable": true, "built": true, "optional": false, @@ -108,18 +108,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "issuerId": "./node_modules/@dojo/core/Evented.mjs", - "issuerName": "./node_modules/@dojo/core/Evented.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "issuerId": "./node_modules/@dojo/framework/core/Evented.mjs", + "issuerName": "./node_modules/@dojo/framework/core/Evented.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", "userRequest": "./Destroyable", "loc": "2:0-44" @@ -134,15 +134,15 @@ ], "optimizationBailout": [], "depth": 6, - "source": "import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" + "source": "import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" }, { - "id": "./node_modules/@dojo/core/Evented.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "name": "./node_modules/@dojo/core/Evented.mjs", + "id": "./node_modules/@dojo/framework/core/Evented.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "name": "./node_modules/@dojo/framework/core/Evented.mjs", "index": 24, "index2": 18, - "size": 2149, + "size": 2151, "cacheable": true, "built": true, "optional": false, @@ -151,48 +151,48 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "issuerId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "issuerName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "2:0-45" + "userRequest": "../core/Evented", + "loc": "2:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "4:0-45" + "userRequest": "../core/Evented", + "loc": "4:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Injector.mjs", - "module": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Injector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Injector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" } ], "usedExports": [ @@ -205,15 +205,15 @@ ], "optimizationBailout": [], "depth": 5, - "source": "import Map from '@dojo/shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n methods.forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map" + "source": "import Map from '../shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n [...methods].forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map" }, { - "id": "./node_modules/@dojo/core/lang.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "name": "./node_modules/@dojo/core/lang.mjs", + "id": "./node_modules/@dojo/framework/core/lang.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "name": "./node_modules/@dojo/framework/core/lang.mjs", "index": 26, "index2": 16, - "size": 6843, + "size": 6837, "cacheable": true, "built": true, "optional": false, @@ -222,27 +222,27 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/lang", + "userRequest": "../../core/lang", "loc": "2:0-41" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", "userRequest": "./lang", "loc": "1:0-47" @@ -267,12 +267,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" + "source": "import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" }, { - "id": "./node_modules/@dojo/has/has.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "name": "./node_modules/@dojo/has/has.mjs", + "id": "./node_modules/@dojo/framework/has/has.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "name": "./node_modules/@dojo/framework/has/has.mjs", "index": 7, "index2": 3, "size": 6305, @@ -284,29 +284,29 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "issuerId": "./node_modules/@dojo/shim/support/has.mjs", - "issuerName": "./node_modules/@dojo/shim/support/has.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/support/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "1:0-41" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "4:0-30" } ], @@ -328,9 +328,9 @@ "source": "function isFeatureTestThenable(value) {\n return value && value.then;\n}\n/**\n * A cache of results of feature tests\n */\nexport const testCache = {};\n/**\n * A cache of the un-resolved feature tests\n */\nexport const testFunctions = {};\n/**\n * A cache of unresolved thenables (probably promises)\n * @type {{}}\n */\nconst testThenables = {};\n/**\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\n */\nconst globalScope = (function () {\n /* istanbul ignore else */\n if (typeof window !== 'undefined') {\n // Browsers\n return window;\n }\n else if (typeof global !== 'undefined') {\n // Node\n return global;\n }\n else if (typeof self !== 'undefined') {\n // Web workers\n return self;\n }\n /* istanbul ignore next */\n return {};\n})();\n/* Grab the staticFeatures if there are available */\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\n/* Cleaning up the DojoHasEnviornment */\nif ('DojoHasEnvironment' in globalScope) {\n delete globalScope.DojoHasEnvironment;\n}\n/**\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\n * returns a map.\n *\n * @param value The value to guard for\n */\nfunction isStaticFeatureFunction(value) {\n return typeof value === 'function';\n}\n/**\n * The cache of asserted features that were available in the global scope when the\n * module loaded\n */\nconst staticCache = staticFeatures\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\n : {}; /* Providing an empty cache, if none was in the environment\n\n/**\n* AMD plugin function.\n*\n* Conditional loads modules based on a has feature test value.\n*\n* @param resourceId Gives the resolved module id to load.\n* @param require The loader require function with respect to the module that contained the plugin resource in its\n* dependency list.\n* @param load Callback to loader that consumes result of plugin demand.\n*/\nexport function load(resourceId, require, load, config) {\n resourceId ? require([resourceId], load) : load();\n}\n/**\n * AMD plugin function.\n *\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\n * value(s).\n *\n * @param resourceId The id of the module\n * @param normalize Resolves a relative module id into an absolute module id\n */\nexport function normalize(resourceId, normalize) {\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\n let i = 0;\n function get(skip) {\n const term = tokens[i++];\n if (term === ':') {\n // empty string module name, resolves to null\n return null;\n }\n else {\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\n if (tokens[i++] === '?') {\n if (!skip && has(term)) {\n // matched the feature, get the first value from the options\n return get();\n }\n else {\n // did not match, get the second value, passing over the first\n get(true);\n return get(skip);\n }\n }\n // a module\n return term;\n }\n }\n const id = get();\n return id && normalize(id);\n}\n/**\n * Check if a feature has already been registered\n *\n * @param feature the name of the feature\n */\nexport function exists(feature) {\n const normalizedFeature = feature.toLowerCase();\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\n}\n/**\n * Register a new test for a named feature.\n *\n * @example\n * has.add('dom-addeventlistener', !!document.addEventListener);\n *\n * @example\n * has.add('touch-events', function () {\n * return 'ontouchstart' in document\n * });\n *\n * @param feature the name of the feature\n * @param value the value reported of the feature, or a function that will be executed once on first test\n * @param overwrite if an existing value should be overwritten. Defaults to false.\n */\nexport function add(feature, value, overwrite = false) {\n const normalizedFeature = feature.toLowerCase();\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\n }\n if (typeof value === 'function') {\n testFunctions[normalizedFeature] = value;\n }\n else if (isFeatureTestThenable(value)) {\n testThenables[feature] = value.then((resolvedValue) => {\n testCache[feature] = resolvedValue;\n delete testThenables[feature];\n }, () => {\n delete testThenables[feature];\n });\n }\n else {\n testCache[normalizedFeature] = value;\n delete testFunctions[normalizedFeature];\n }\n}\n/**\n * Return the current value of a named feature.\n *\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\n */\nexport default function has(feature) {\n let result;\n const normalizedFeature = feature.toLowerCase();\n if (normalizedFeature in staticCache) {\n result = staticCache[normalizedFeature];\n }\n else if (testFunctions[normalizedFeature]) {\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\n delete testFunctions[normalizedFeature];\n }\n else if (normalizedFeature in testCache) {\n result = testCache[normalizedFeature];\n }\n else if (feature in testThenables) {\n return false;\n }\n else {\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\n }\n return result;\n}\n/*\n * Out of the box feature tests\n */\n/* Environments */\n/* Used as a value to provide a debug only code path */\nadd('debug', true);\n/* Detects if the environment is \"browser like\" */\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\n/* Detects if the environment appears to be NodeJS */\nadd('host-node', function () {\n if (typeof process === 'object' && process.versions && process.versions.node) {\n return process.versions.node;\n }\n});\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Map.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "name": "./node_modules/@dojo/shim/Map.mjs", + "id": "./node_modules/@dojo/framework/shim/Map.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "name": "./node_modules/@dojo/framework/shim/Map.mjs", "index": 15, "index2": 12, "size": 3331, @@ -342,57 +342,57 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-37" + "userRequest": "../shim/Map", + "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" } ], "usedExports": [ @@ -408,9 +408,9 @@ "source": "import { isArrayLike, ShimIterator } from './iterator';\nimport global from './global';\nimport { is as objectIs } from './object';\nimport has from './support/has';\nimport './Symbol';\nexport let Map = global.Map;\nif (!true) {\n Map = (_a = class Map {\n constructor(iterable) {\n this._keys = [];\n this._values = [];\n this[Symbol.toStringTag] = 'Map';\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const value = iterable[i];\n this.set(value[0], value[1]);\n }\n }\n else {\n for (const value of iterable) {\n this.set(value[0], value[1]);\n }\n }\n }\n }\n /**\n * An alternative to Array.prototype.indexOf using Object.is\n * to check for equality. See http://mzl.la/1zuKO2V\n */\n _indexOfKey(keys, key) {\n for (let i = 0, length = keys.length; i < length; i++) {\n if (objectIs(keys[i], key)) {\n return i;\n }\n }\n return -1;\n }\n get size() {\n return this._keys.length;\n }\n clear() {\n this._keys.length = this._values.length = 0;\n }\n delete(key) {\n const index = this._indexOfKey(this._keys, key);\n if (index < 0) {\n return false;\n }\n this._keys.splice(index, 1);\n this._values.splice(index, 1);\n return true;\n }\n entries() {\n const values = this._keys.map((key, i) => {\n return [key, this._values[i]];\n });\n return new ShimIterator(values);\n }\n forEach(callback, context) {\n const keys = this._keys;\n const values = this._values;\n for (let i = 0, length = keys.length; i < length; i++) {\n callback.call(context, values[i], keys[i], this);\n }\n }\n get(key) {\n const index = this._indexOfKey(this._keys, key);\n return index < 0 ? undefined : this._values[index];\n }\n has(key) {\n return this._indexOfKey(this._keys, key) > -1;\n }\n keys() {\n return new ShimIterator(this._keys);\n }\n set(key, value) {\n let index = this._indexOfKey(this._keys, key);\n index = index < 0 ? this._keys.length : index;\n this._keys[index] = key;\n this._values[index] = value;\n return this;\n }\n values() {\n return new ShimIterator(this._values);\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n },\n _a[Symbol.species] = _a,\n _a);\n}\nexport default Map;\nvar _a;\n//# sourceMappingURL=Map.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Promise.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "name": "./node_modules/@dojo/shim/Promise.mjs", + "id": "./node_modules/@dojo/framework/shim/Promise.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "name": "./node_modules/@dojo/framework/shim/Promise.mjs", "index": 22, "index2": 15, "size": 8519, @@ -422,30 +422,30 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "issuerId": "./node_modules/@dojo/widget-core/Registry.mjs", - "issuerName": "./node_modules/@dojo/widget-core/Registry.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "1:0-41" + "userRequest": "../shim/Promise", + "loc": "1:0-38" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "2:0-41" + "userRequest": "../shim/Promise", + "loc": "2:0-38" } ], "usedExports": [ @@ -461,9 +461,9 @@ "source": "import global from './global';\nimport { queueMicroTask } from './support/queue';\nimport './Symbol';\nimport has from './support/has';\nexport let ShimPromise = global.Promise;\nexport const isThenable = function isThenable(value) {\n return value && typeof value.then === 'function';\n};\nif (!true) {\n global.Promise = ShimPromise = (_a = class Promise {\n /**\n * Creates a new Promise.\n *\n * @constructor\n *\n * @param executor\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\n * starting the asynchronous operation when it is invoked.\n *\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\n * successfully, or the `reject` function when the operation fails.\n */\n constructor(executor) {\n /**\n * The current state of this promise.\n */\n this.state = 1 /* Pending */;\n this[Symbol.toStringTag] = 'Promise';\n /**\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\n */\n let isChained = false;\n /**\n * Whether or not this promise is in a resolved state.\n */\n const isResolved = () => {\n return this.state !== 1 /* Pending */ || isChained;\n };\n /**\n * Callbacks that should be invoked once the asynchronous operation has completed.\n */\n let callbacks = [];\n /**\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\n * enqueues callbacks for execution on the next event loop turn.\n */\n let whenFinished = function (callback) {\n if (callbacks) {\n callbacks.push(callback);\n }\n };\n /**\n * Settles this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const settle = (newState, value) => {\n // A promise can only be settled once.\n if (this.state !== 1 /* Pending */) {\n return;\n }\n this.state = newState;\n this.resolvedValue = value;\n whenFinished = queueMicroTask;\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\n // wait an extra turn.\n if (callbacks && callbacks.length > 0) {\n queueMicroTask(function () {\n if (callbacks) {\n let count = callbacks.length;\n for (let i = 0; i < count; ++i) {\n callbacks[i].call(null);\n }\n callbacks = null;\n }\n });\n }\n };\n /**\n * Resolves this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const resolve = (newState, value) => {\n if (isResolved()) {\n return;\n }\n if (isThenable(value)) {\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\n isChained = true;\n }\n else {\n settle(newState, value);\n }\n };\n this.then = (onFulfilled, onRejected) => {\n return new Promise((resolve, reject) => {\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\n // event loop.\n whenFinished(() => {\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\n if (typeof callback === 'function') {\n try {\n resolve(callback(this.resolvedValue));\n }\n catch (error) {\n reject(error);\n }\n }\n else if (this.state === 2 /* Rejected */) {\n reject(this.resolvedValue);\n }\n else {\n resolve(this.resolvedValue);\n }\n });\n });\n };\n try {\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\n }\n catch (error) {\n settle(2 /* Rejected */, error);\n }\n }\n static all(iterable) {\n return new this(function (resolve, reject) {\n const values = [];\n let complete = 0;\n let total = 0;\n let populating = true;\n function fulfill(index, value) {\n values[index] = value;\n ++complete;\n finish();\n }\n function finish() {\n if (populating || complete < total) {\n return;\n }\n resolve(values);\n }\n function processItem(index, item) {\n ++total;\n if (isThenable(item)) {\n // If an item Promise rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(fulfill.bind(null, index), reject);\n }\n else {\n Promise.resolve(item).then(fulfill.bind(null, index));\n }\n }\n let i = 0;\n for (const value of iterable) {\n processItem(i, value);\n i++;\n }\n populating = false;\n finish();\n });\n }\n static race(iterable) {\n return new this(function (resolve, reject) {\n for (const item of iterable) {\n if (item instanceof Promise) {\n // If a Promise item rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(resolve, reject);\n }\n else {\n Promise.resolve(item).then(resolve);\n }\n }\n });\n }\n static reject(reason) {\n return new this(function (resolve, reject) {\n reject(reason);\n });\n }\n static resolve(value) {\n return new this(function (resolve) {\n resolve(value);\n });\n }\n catch(onRejected) {\n return this.then(undefined, onRejected);\n }\n },\n _a[Symbol.species] = ShimPromise,\n _a);\n}\nexport default ShimPromise;\nvar _a;\n//# sourceMappingURL=Promise.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Symbol.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "name": "./node_modules/@dojo/shim/Symbol.mjs", + "id": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "name": "./node_modules/@dojo/framework/shim/Symbol.mjs", "index": 5, "index2": 7, "size": 5929, @@ -475,81 +475,81 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/d.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/d.mjs", - "module": "./node_modules/@dojo/widget-core/d.mjs", - "moduleName": "./node_modules/@dojo/widget-core/d.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "1:0-39" + "userRequest": "../shim/Symbol", + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/d.mjs", + "module": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/d.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" + "userRequest": "../shim/Symbol", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "5:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "4:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "type": "harmony import", + "userRequest": "../shim/Symbol", + "loc": "3:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "1:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-18" @@ -568,9 +568,9 @@ "source": "import has from './support/has';\nimport global from './global';\nimport { getValueDescriptor } from './support/util';\nexport let Symbol = global.Symbol;\nif (!true) {\n /**\n * Throws if the value is not a symbol, used internally within the Shim\n * @param {any} value The value to check\n * @return {symbol} Returns the symbol or throws\n */\n const validateSymbol = function validateSymbol(value) {\n if (!isSymbol(value)) {\n throw new TypeError(value + ' is not a symbol');\n }\n return value;\n };\n const defineProperties = Object.defineProperties;\n const defineProperty = Object.defineProperty;\n const create = Object.create;\n const objPrototype = Object.prototype;\n const globalSymbols = {};\n const getSymbolName = (function () {\n const created = create(null);\n return function (desc) {\n let postfix = 0;\n let name;\n while (created[String(desc) + (postfix || '')]) {\n ++postfix;\n }\n desc += String(postfix || '');\n created[desc] = true;\n name = '@@' + desc;\n // FIXME: Temporary guard until the duplicate execution when testing can be\n // pinned down.\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\n defineProperty(objPrototype, name, {\n set: function (value) {\n defineProperty(this, name, getValueDescriptor(value));\n }\n });\n }\n return name;\n };\n })();\n const InternalSymbol = function Symbol(description) {\n if (this instanceof InternalSymbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n return Symbol(description);\n };\n Symbol = global.Symbol = function Symbol(description) {\n if (this instanceof Symbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n const sym = Object.create(InternalSymbol.prototype);\n description = description === undefined ? '' : String(description);\n return defineProperties(sym, {\n __description__: getValueDescriptor(description),\n __name__: getValueDescriptor(getSymbolName(description))\n });\n };\n /* Decorate the Symbol function with the appropriate properties */\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\n if (globalSymbols[key]) {\n return globalSymbols[key];\n }\n return (globalSymbols[key] = Symbol(String(key)));\n }));\n defineProperties(Symbol, {\n keyFor: getValueDescriptor(function (sym) {\n let key;\n validateSymbol(sym);\n for (key in globalSymbols) {\n if (globalSymbols[key] === sym) {\n return key;\n }\n }\n }),\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\n match: getValueDescriptor(Symbol.for('match'), false, false),\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\n search: getValueDescriptor(Symbol.for('search'), false, false),\n species: getValueDescriptor(Symbol.for('species'), false, false),\n split: getValueDescriptor(Symbol.for('split'), false, false),\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\n });\n /* Decorate the InternalSymbol object */\n defineProperties(InternalSymbol.prototype, {\n constructor: getValueDescriptor(Symbol),\n toString: getValueDescriptor(function () {\n return this.__name__;\n }, false, false)\n });\n /* Decorate the Symbol.prototype */\n defineProperties(Symbol.prototype, {\n toString: getValueDescriptor(function () {\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\n }),\n valueOf: getValueDescriptor(function () {\n return validateSymbol(this);\n })\n });\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\n return validateSymbol(this);\n }));\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\n}\n/**\n * A custom guard function that determines if an object is a symbol or not\n * @param {any} value The value to check to see if it is a symbol or not\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\n */\nexport function isSymbol(value) {\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\n}\n/**\n * Fill any missing well known symbols if the native Symbol is missing them\n */\n[\n 'hasInstance',\n 'isConcatSpreadable',\n 'iterator',\n 'species',\n 'replace',\n 'search',\n 'split',\n 'match',\n 'toPrimitive',\n 'toStringTag',\n 'unscopables',\n 'observable'\n].forEach((wellKnown) => {\n if (!Symbol[wellKnown]) {\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\n }\n});\nexport default Symbol;\n//# sourceMappingURL=Symbol.mjs.map" }, { - "id": "./node_modules/@dojo/shim/WeakMap.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "name": "./node_modules/@dojo/shim/WeakMap.mjs", + "id": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "name": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "index": 19, "index2": 13, "size": 3748, @@ -582,38 +582,38 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "2:0-41" + "userRequest": "../shim/WeakMap", + "loc": "2:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "5:0-41" + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", + "userRequest": "../../shim/WeakMap", "loc": "1:0-41" } ], @@ -629,9 +629,9 @@ "source": "import global from './global';\nimport { isArrayLike } from './iterator';\nimport has from './support/has';\nimport './Symbol';\nexport let WeakMap = global.WeakMap;\nif (!true) {\n const DELETED = {};\n const getUID = function getUID() {\n return Math.floor(Math.random() * 100000000);\n };\n const generateName = (function () {\n let startId = Math.floor(Date.now() % 100000000);\n return function generateName() {\n return '__wm' + getUID() + (startId++ + '__');\n };\n })();\n WeakMap = class WeakMap {\n constructor(iterable) {\n this[Symbol.toStringTag] = 'WeakMap';\n this._name = generateName();\n this._frozenEntries = [];\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const item = iterable[i];\n this.set(item[0], item[1]);\n }\n }\n else {\n for (const [key, value] of iterable) {\n this.set(key, value);\n }\n }\n }\n }\n _getFrozenEntryIndex(key) {\n for (let i = 0; i < this._frozenEntries.length; i++) {\n if (this._frozenEntries[i].key === key) {\n return i;\n }\n }\n return -1;\n }\n delete(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n entry.value = DELETED;\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n this._frozenEntries.splice(frozenIndex, 1);\n return true;\n }\n return false;\n }\n get(key) {\n if (key === undefined || key === null) {\n return undefined;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n return entry.value;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return this._frozenEntries[frozenIndex].value;\n }\n }\n has(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return true;\n }\n return false;\n }\n set(key, value) {\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\n throw new TypeError('Invalid value used as weak map key');\n }\n let entry = key[this._name];\n if (!entry || entry.key !== key) {\n entry = Object.create(null, {\n key: { value: key }\n });\n if (Object.isFrozen(key)) {\n this._frozenEntries.push(entry);\n }\n else {\n Object.defineProperty(key, this._name, {\n value: entry\n });\n }\n }\n entry.value = value;\n return this;\n }\n };\n}\nexport default WeakMap;\n//# sourceMappingURL=WeakMap.mjs.map" }, { - "id": "./node_modules/@dojo/shim/array.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "name": "./node_modules/@dojo/shim/array.mjs", + "id": "./node_modules/@dojo/framework/shim/array.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "name": "./node_modules/@dojo/framework/shim/array.mjs", "index": 30, "index2": 24, "size": 8928, @@ -643,30 +643,30 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "4:0-40" + "userRequest": "../shim/array", + "loc": "4:0-37" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "2:0-53" + "userRequest": "../shim/array", + "loc": "2:0-50" } ], "usedExports": [ @@ -686,9 +686,9 @@ "source": "import global from './global';\nimport { isArrayLike, isIterable } from './iterator';\nimport { MAX_SAFE_INTEGER } from './number';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\nexport let from;\n/**\n * Creates a new array from the function parameters.\n *\n * @param arguments Any number of arguments for the array\n * @return An array from the given arguments\n */\nexport let of;\n/* ES6 Array instance methods */\n/**\n * Copies data internally within an array or array-like object.\n *\n * @param target The target array-like object\n * @param offset The index to start copying values to; if negative, it counts backwards from length\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\n * @return The target\n */\nexport let copyWithin;\n/**\n * Fills elements of an array-like object with the specified value.\n *\n * @param target The target to fill\n * @param value The value to fill each element of the target with\n * @param start The first index to fill\n * @param end The (exclusive) index at which to stop filling\n * @return The filled target\n */\nexport let fill;\n/**\n * Finds and returns the first instance matching the callback or undefined if one is not found.\n *\n * @param target An array-like object\n * @param callback A function returning if the current value matches a criteria\n * @param thisArg The execution context for the find function\n * @return The first element matching the callback, or undefined if one does not exist\n */\nexport let find;\n/**\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\n * or -1 if no values satisfy it.\n *\n * @param target An array-like object\n * @param callback A function returning true if the current value satisfies its criteria\n * @param thisArg The execution context for the find function\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\n */\nexport let findIndex;\n/* ES7 Array instance methods */\n/**\n * Determines whether an array includes a given value\n *\n * @param target the target array-like object\n * @param searchElement the item to search for\n * @param fromIndex the starting index to search from\n * @return `true` if the array includes the element, otherwise `false`\n */\nexport let includes;\nif (true && true) {\n from = global.Array.from;\n of = global.Array.of;\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\n fill = wrapNative(global.Array.prototype.fill);\n find = wrapNative(global.Array.prototype.find);\n findIndex = wrapNative(global.Array.prototype.findIndex);\n}\nelse {\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n if (isNaN(length)) {\n return 0;\n }\n length = Number(length);\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n /**\n * From ES6 7.1.4 ToInteger()\n *\n * @param value A value to convert\n * @return An integer\n */\n const toInteger = function toInteger(value) {\n value = Number(value);\n if (isNaN(value)) {\n return 0;\n }\n if (value === 0 || !isFinite(value)) {\n return value;\n }\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\n };\n /**\n * Normalizes an offset against a given length, wrapping it if negative.\n *\n * @param value The original offset\n * @param length The total length to normalize against\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\n */\n const normalizeOffset = function normalizeOffset(value, length) {\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\n };\n from = function from(arrayLike, mapFunction, thisArg) {\n if (arrayLike == null) {\n throw new TypeError('from: requires an array-like object');\n }\n if (mapFunction && thisArg) {\n mapFunction = mapFunction.bind(thisArg);\n }\n /* tslint:disable-next-line:variable-name */\n const Constructor = this;\n const length = toLength(arrayLike.length);\n // Support extension\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\n return array;\n }\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\n // with the iteration on IE when using a NaN array length.\n if (isArrayLike(arrayLike)) {\n if (length === 0) {\n return [];\n }\n for (let i = 0; i < arrayLike.length; i++) {\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\n }\n }\n else {\n let i = 0;\n for (const value of arrayLike) {\n array[i] = mapFunction ? mapFunction(value, i) : value;\n i++;\n }\n }\n if (arrayLike.length !== undefined) {\n array.length = length;\n }\n return array;\n };\n of = function of(...items) {\n return Array.prototype.slice.call(items);\n };\n copyWithin = function copyWithin(target, offset, start, end) {\n if (target == null) {\n throw new TypeError('copyWithin: target must be an array-like object');\n }\n const length = toLength(target.length);\n offset = normalizeOffset(toInteger(offset), length);\n start = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n let count = Math.min(end - start, length - offset);\n let direction = 1;\n if (offset > start && offset < start + count) {\n direction = -1;\n start += count - 1;\n offset += count - 1;\n }\n while (count > 0) {\n if (start in target) {\n target[offset] = target[start];\n }\n else {\n delete target[offset];\n }\n offset += direction;\n start += direction;\n count--;\n }\n return target;\n };\n fill = function fill(target, value, start, end) {\n const length = toLength(target.length);\n let i = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n while (i < end) {\n target[i++] = value;\n }\n return target;\n };\n find = function find(target, callback, thisArg) {\n const index = findIndex(target, callback, thisArg);\n return index !== -1 ? target[index] : undefined;\n };\n findIndex = function findIndex(target, callback, thisArg) {\n const length = toLength(target.length);\n if (!callback) {\n throw new TypeError('find: second argument must be a function');\n }\n if (thisArg) {\n callback = callback.bind(thisArg);\n }\n for (let i = 0; i < length; i++) {\n if (callback(target[i], i, target)) {\n return i;\n }\n }\n return -1;\n };\n}\nif (true) {\n includes = wrapNative(global.Array.prototype.includes);\n}\nelse {\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n length = Number(length);\n if (isNaN(length)) {\n return 0;\n }\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n includes = function includes(target, searchElement, fromIndex = 0) {\n let len = toLength(target.length);\n for (let i = fromIndex; i < len; ++i) {\n const currentElement = target[i];\n if (searchElement === currentElement ||\n (searchElement !== searchElement && currentElement !== currentElement)) {\n return true;\n }\n }\n return false;\n };\n}\n//# sourceMappingURL=array.mjs.map" }, { - "id": "./node_modules/@dojo/shim/global.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "name": "./node_modules/@dojo/shim/global.mjs", + "id": "./node_modules/@dojo/framework/shim/global.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "name": "./node_modules/@dojo/framework/shim/global.mjs", "index": 10, "index2": 4, "size": 581, @@ -700,117 +700,117 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "6:0-39" + "userRequest": "../shim/global", + "loc": "6:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "1:0-39" + "userRequest": "./global", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./global", - "loc": "1:0-30" + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./global", - "loc": "2:0-30" + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "./global", - "loc": "1:0-30" + "userRequest": "../shim/global", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/number.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/number.mjs", - "module": "./node_modules/@dojo/shim/number.mjs", - "moduleName": "./node_modules/@dojo/shim/number.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/number.mjs", + "module": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/number.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", "userRequest": "../global", "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "../global", "loc": "1:0-31" @@ -827,9 +827,9 @@ "source": "const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map" }, { - "id": "./node_modules/@dojo/shim/iterator.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "name": "./node_modules/@dojo/shim/iterator.mjs", + "id": "./node_modules/@dojo/framework/shim/iterator.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "name": "./node_modules/@dojo/framework/shim/iterator.mjs", "index": 16, "index2": 10, "size": 3158, @@ -841,36 +841,36 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-53" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "1:0-55" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-41" @@ -889,9 +889,9 @@ "source": "import './Symbol';\nimport { HIGH_SURROGATE_MAX, HIGH_SURROGATE_MIN } from './string';\nconst staticDone = { done: true, value: undefined };\n/**\n * A class that _shims_ an iterator interface on array like objects.\n */\nexport class ShimIterator {\n constructor(list) {\n this._nextIndex = -1;\n if (isIterable(list)) {\n this._nativeIterator = list[Symbol.iterator]();\n }\n else {\n this._list = list;\n }\n }\n /**\n * Return the next iteration result for the Iterator\n */\n next() {\n if (this._nativeIterator) {\n return this._nativeIterator.next();\n }\n if (!this._list) {\n return staticDone;\n }\n if (++this._nextIndex < this._list.length) {\n return {\n done: false,\n value: this._list[this._nextIndex]\n };\n }\n return staticDone;\n }\n [Symbol.iterator]() {\n return this;\n }\n}\n/**\n * A type guard for checking if something has an Iterable interface\n *\n * @param value The value to type guard against\n */\nexport function isIterable(value) {\n return value && typeof value[Symbol.iterator] === 'function';\n}\n/**\n * A type guard for checking if something is ArrayLike\n *\n * @param value The value to type guard against\n */\nexport function isArrayLike(value) {\n return value && typeof value.length === 'number';\n}\n/**\n * Returns the iterator for an object\n *\n * @param iterable The iterable object to return the iterator for\n */\nexport function get(iterable) {\n if (isIterable(iterable)) {\n return iterable[Symbol.iterator]();\n }\n else if (isArrayLike(iterable)) {\n return new ShimIterator(iterable);\n }\n}\n/**\n * Shims the functionality of `for ... of` blocks\n *\n * @param iterable The object the provides an interator interface\n * @param callback The callback which will be called for each item of the iterable\n * @param thisArg Optional scope to pass the callback\n */\nexport function forOf(iterable, callback, thisArg) {\n let broken = false;\n function doBreak() {\n broken = true;\n }\n /* We need to handle iteration of double byte strings properly */\n if (isArrayLike(iterable) && typeof iterable === 'string') {\n const l = iterable.length;\n for (let i = 0; i < l; ++i) {\n let char = iterable[i];\n if (i + 1 < l) {\n const code = char.charCodeAt(0);\n if (code >= HIGH_SURROGATE_MIN && code <= HIGH_SURROGATE_MAX) {\n char += iterable[++i];\n }\n }\n callback.call(thisArg, char, iterable, doBreak);\n if (broken) {\n return;\n }\n }\n }\n else {\n const iterator = get(iterable);\n if (iterator) {\n let result = iterator.next();\n while (!result.done) {\n callback.call(thisArg, result.value, iterable, doBreak);\n if (broken) {\n return;\n }\n result = iterator.next();\n }\n }\n }\n}\n//# sourceMappingURL=iterator.mjs.map" }, { - "id": "./node_modules/@dojo/shim/number.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/number.mjs", - "name": "./node_modules/@dojo/shim/number.mjs", + "id": "./node_modules/@dojo/framework/shim/number.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/number.mjs", + "name": "./node_modules/@dojo/framework/shim/number.mjs", "index": 31, "index2": 23, "size": 1724, @@ -903,18 +903,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./number", "loc": "3:0-44" @@ -935,9 +935,9 @@ "source": "import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map" }, { - "id": "./node_modules/@dojo/shim/object.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "name": "./node_modules/@dojo/shim/object.mjs", + "id": "./node_modules/@dojo/framework/shim/object.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "name": "./node_modules/@dojo/framework/shim/object.mjs", "index": 18, "index2": 11, "size": 4061, @@ -949,39 +949,39 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "issuerId": "./node_modules/@dojo/shim/Map.mjs", - "issuerName": "./node_modules/@dojo/shim/Map.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Map.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Map.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./object", "loc": "3:0-42" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "1:0-43" + "userRequest": "../shim/object", + "loc": "1:0-40" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "2:0-43" + "userRequest": "../shim/object", + "loc": "2:0-40" } ], "usedExports": [ @@ -1003,9 +1003,9 @@ "source": "import global from './global';\nimport has from './support/has';\nimport { isSymbol } from './Symbol';\nexport let assign;\n/**\n * Gets the own property descriptor of the specified object.\n * An own property descriptor is one that is defined directly on the object and is not\n * inherited from the object's prototype.\n * @param o Object that contains the property.\n * @param p Name of the property.\n */\nexport let getOwnPropertyDescriptor;\n/**\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\n * @param o Object that contains the own properties.\n */\nexport let getOwnPropertyNames;\n/**\n * Returns an array of all symbol properties found directly on object o.\n * @param o Object to retrieve the symbols from.\n */\nexport let getOwnPropertySymbols;\n/**\n * Returns true if the values are the same value, false otherwise.\n * @param value1 The first value.\n * @param value2 The second value.\n */\nexport let is;\n/**\n * Returns the names of the enumerable properties and methods of an object.\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n */\nexport let keys;\n/* ES7 Object static methods */\nexport let getOwnPropertyDescriptors;\nexport let entries;\nexport let values;\nif (true) {\n const globalObject = global.Object;\n assign = globalObject.assign;\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\n is = globalObject.is;\n keys = globalObject.keys;\n}\nelse {\n keys = function symbolAwareKeys(o) {\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n assign = function assign(target, ...sources) {\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const to = Object(target);\n sources.forEach((nextSource) => {\n if (nextSource) {\n // Skip over if undefined or null\n keys(nextSource).forEach((nextKey) => {\n to[nextKey] = nextSource[nextKey];\n });\n }\n });\n return to;\n };\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\n if (isSymbol(prop)) {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n else {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n };\n getOwnPropertyNames = function getOwnPropertyNames(o) {\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n return Object.getOwnPropertyNames(o)\n .filter((key) => Boolean(key.match(/^@@.+/)))\n .map((key) => Symbol.for(key.substring(2)));\n };\n is = function is(value1, value2) {\n if (value1 === value2) {\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\n }\n return value1 !== value1 && value2 !== value2; // NaN\n };\n}\nif (true) {\n const globalObject = global.Object;\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\n entries = globalObject.entries;\n values = globalObject.values;\n}\nelse {\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\n return getOwnPropertyNames(o).reduce((previous, key) => {\n previous[key] = getOwnPropertyDescriptor(o, key);\n return previous;\n }, {});\n };\n entries = function entries(o) {\n return keys(o).map((key) => [key, o[key]]);\n };\n values = function values(o) {\n return keys(o).map((key) => o[key]);\n };\n}\n//# sourceMappingURL=object.mjs.map" }, { - "id": "./node_modules/@dojo/shim/string.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "name": "./node_modules/@dojo/shim/string.mjs", + "id": "./node_modules/@dojo/framework/shim/string.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "name": "./node_modules/@dojo/framework/shim/string.mjs", "index": 17, "index2": 9, "size": 12418, @@ -1017,18 +1017,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "issuerId": "./node_modules/@dojo/shim/iterator.mjs", - "issuerName": "./node_modules/@dojo/shim/iterator.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/iterator.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./string", "loc": "2:0-66" @@ -1059,9 +1059,9 @@ "source": "import global from './global';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\n/**\n * The minimum location of high surrogates\n */\nexport const HIGH_SURROGATE_MIN = 0xd800;\n/**\n * The maximum location of high surrogates\n */\nexport const HIGH_SURROGATE_MAX = 0xdbff;\n/**\n * The minimum location of low surrogates\n */\nexport const LOW_SURROGATE_MIN = 0xdc00;\n/**\n * The maximum location of low surrogates\n */\nexport const LOW_SURROGATE_MAX = 0xdfff;\n/* ES6 static methods */\n/**\n * Return the String value whose elements are, in order, the elements in the List elements.\n * If length is 0, the empty string is returned.\n * @param codePoints The code points to generate the string\n */\nexport let fromCodePoint;\n/**\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\n * as such the first argument will be a well formed template call site object and the rest\n * parameter will contain the substitution values.\n * @param template A well-formed template string call site representation.\n * @param substitutions A set of substitution values.\n */\nexport let raw;\n/* ES6 instance methods */\n/**\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\n * value of the UTF-16 encoded code point starting at the string element at position pos in\n * the String resulting from converting this object to a String.\n * If there is no element at that position, the result is undefined.\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\n */\nexport let codePointAt;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * endPosition – length(this). Otherwise returns false.\n */\nexport let endsWith;\n/**\n * Returns true if searchString appears as a substring of the result of converting this\n * object to a String, at one or more positions that are\n * greater than or equal to position; otherwise, returns false.\n * @param target The target string\n * @param searchString search string\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\n */\nexport let includes;\n/**\n * Returns the String value result of normalizing the string into the normalization form\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\n * @param target The target string\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\n * is \"NFC\"\n */\nexport let normalize;\n/**\n * Returns a String value that is made from count copies appended together. If count is 0,\n * T is the empty String is returned.\n * @param count number of copies to append\n */\nexport let repeat;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * position. Otherwise returns false.\n */\nexport let startsWith;\n/* ES7 instance methods */\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the end (right) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padEnd;\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the start (left) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padStart;\nif (true && true) {\n fromCodePoint = global.String.fromCodePoint;\n raw = global.String.raw;\n codePointAt = wrapNative(global.String.prototype.codePointAt);\n endsWith = wrapNative(global.String.prototype.endsWith);\n includes = wrapNative(global.String.prototype.includes);\n normalize = wrapNative(global.String.prototype.normalize);\n repeat = wrapNative(global.String.prototype.repeat);\n startsWith = wrapNative(global.String.prototype.startsWith);\n}\nelse {\n /**\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\n * Used by startsWith, includes, and endsWith.\n *\n * @return Normalized position.\n */\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\n if (text == null) {\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\n }\n const length = text.length;\n position = position !== position ? (isEnd ? length : 0) : position;\n return [text, String(search), Math.min(Math.max(position, 0), length)];\n };\n fromCodePoint = function fromCodePoint(...codePoints) {\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\n const length = arguments.length;\n if (!length) {\n return '';\n }\n const fromCharCode = String.fromCharCode;\n const MAX_SIZE = 0x4000;\n let codeUnits = [];\n let index = -1;\n let result = '';\n while (++index < length) {\n let codePoint = Number(arguments[index]);\n // Code points must be finite integers within the valid range\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\n if (!isValid) {\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint);\n }\n else {\n // Astral code point; split in surrogate halves\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += fromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n raw = function raw(callSite, ...substitutions) {\n let rawStrings = callSite.raw;\n let result = '';\n let numSubstitutions = substitutions.length;\n if (callSite == null || callSite.raw == null) {\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\n }\n for (let i = 0, length = rawStrings.length; i < length; i++) {\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\n }\n return result;\n };\n codePointAt = function codePointAt(text, position = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\n if (text == null) {\n throw new TypeError('string.codePointAt requries a valid string.');\n }\n const length = text.length;\n if (position !== position) {\n position = 0;\n }\n if (position < 0 || position >= length) {\n return undefined;\n }\n // Get the first code unit\n const first = text.charCodeAt(position);\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n const second = text.charCodeAt(position + 1);\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\n }\n }\n return first;\n };\n endsWith = function endsWith(text, search, endPosition) {\n if (endPosition == null) {\n endPosition = text.length;\n }\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\n const start = endPosition - search.length;\n if (start < 0) {\n return false;\n }\n return text.slice(start, endPosition) === search;\n };\n includes = function includes(text, search, position = 0) {\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\n return text.indexOf(search, position) !== -1;\n };\n repeat = function repeat(text, count = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\n if (text == null) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (count !== count) {\n count = 0;\n }\n if (count < 0 || count === Infinity) {\n throw new RangeError('string.repeat requires a non-negative finite count.');\n }\n let result = '';\n while (count) {\n if (count % 2) {\n result += text;\n }\n if (count > 1) {\n text += text;\n }\n count >>= 1;\n }\n return result;\n };\n startsWith = function startsWith(text, search, position = 0) {\n search = String(search);\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\n const end = position + search.length;\n if (end > text.length) {\n return false;\n }\n return text.slice(position, end) === search;\n };\n}\nif (true) {\n padEnd = wrapNative(global.String.prototype.padEnd);\n padStart = wrapNative(global.String.prototype.padStart);\n}\nelse {\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padEnd requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText +=\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length);\n }\n return strText;\n };\n padStart = function padStart(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padStart requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText =\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length) +\n strText;\n }\n return strText;\n };\n}\n//# sourceMappingURL=string.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/has.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "name": "./node_modules/@dojo/shim/support/has.mjs", + "id": "./node_modules/@dojo/framework/shim/support/has.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "name": "./node_modules/@dojo/framework/shim/support/has.mjs", "index": 6, "index2": 5, "size": 6151, @@ -1073,81 +1073,81 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "1:0-32" + "loc": "3:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "3:0-32" + "loc": "1:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "./has", "loc": "2:0-24" @@ -1165,12 +1165,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import has, { add } from '@dojo/has/has';\nimport global from '../global';\nexport default has;\nexport * from '@dojo/has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map" + "source": "import has, { add } from '../../has/has';\nimport global from '../global';\nexport default has;\nexport * from '../../has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/queue.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "name": "./node_modules/@dojo/shim/support/queue.mjs", + "id": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "name": "./node_modules/@dojo/framework/shim/support/queue.mjs", "index": 23, "index2": 14, "size": 6196, @@ -1182,18 +1182,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "issuerId": "./node_modules/@dojo/shim/Promise.mjs", - "issuerName": "./node_modules/@dojo/shim/Promise.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Promise.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/queue", "loc": "2:0-49" @@ -1210,9 +1210,9 @@ "source": "import global from '../global';\nimport has from './has';\nfunction executeTask(item) {\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n}\nfunction getQueueHandle(item, destructor) {\n return {\n destroy: function () {\n this.destroy = function () { };\n item.isActive = false;\n item.callback = null;\n if (destructor) {\n destructor();\n }\n }\n };\n}\nlet checkMicroTaskQueue;\nlet microTasks;\n/**\n * Schedules a callback to the macrotask queue.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueTask = (function () {\n let destructor;\n let enqueue;\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\n if (true) {\n const queue = [];\n global.addEventListener('message', function (event) {\n // Confirm that the event was triggered by the current window and by this particular implementation.\n if (event.source === global && event.data === 'dojo-queue-message') {\n event.stopPropagation();\n if (queue.length) {\n executeTask(queue.shift());\n }\n }\n });\n enqueue = function (item) {\n queue.push(item);\n global.postMessage('dojo-queue-message', '*');\n };\n }\n else if (false) {\n destructor = global.clearImmediate;\n enqueue = function (item) {\n return setImmediate(executeTask.bind(null, item));\n };\n }\n else {\n destructor = global.clearTimeout;\n enqueue = function (item) {\n return setTimeout(executeTask.bind(null, item), 0);\n };\n }\n function queueTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const id = enqueue(item);\n return getQueueHandle(item, destructor &&\n function () {\n destructor(id);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueTask(callback);\n };\n})();\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\nif (!true) {\n let isMicroTaskQueued = false;\n microTasks = [];\n checkMicroTaskQueue = function () {\n if (!isMicroTaskQueued) {\n isMicroTaskQueued = true;\n queueTask(function () {\n isMicroTaskQueued = false;\n if (microTasks.length) {\n let item;\n while ((item = microTasks.shift())) {\n executeTask(item);\n }\n }\n });\n }\n };\n}\n/**\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\n *\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueAnimationTask = (function () {\n if (!true) {\n return queueTask;\n }\n function queueAnimationTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\n return getQueueHandle(item, function () {\n cancelAnimationFrame(rafId);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueAnimationTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueAnimationTask(callback);\n };\n})();\n/**\n * Schedules a callback to the microtask queue.\n *\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\n * registered with `queueTask` or `queueAnimationTask`.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport let queueMicroTask = (function () {\n let enqueue;\n if (false) {\n enqueue = function (item) {\n global.process.nextTick(executeTask.bind(null, item));\n };\n }\n else if (true) {\n enqueue = function (item) {\n global.Promise.resolve(item).then(executeTask);\n };\n }\n else if (true) {\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const node = document.createElement('div');\n const queue = [];\n const observer = new HostMutationObserver(function () {\n while (queue.length > 0) {\n const item = queue.shift();\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n }\n });\n observer.observe(node, { attributes: true });\n enqueue = function (item) {\n queue.push(item);\n node.setAttribute('queueStatus', '1');\n };\n }\n else {\n enqueue = function (item) {\n checkMicroTaskQueue();\n microTasks.push(item);\n };\n }\n return function (callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n enqueue(item);\n return getQueueHandle(item);\n };\n})();\n//# sourceMappingURL=queue.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/util.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/util.mjs", - "name": "./node_modules/@dojo/shim/support/util.mjs", + "id": "./node_modules/@dojo/framework/shim/support/util.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/util.mjs", + "name": "./node_modules/@dojo/framework/shim/support/util.mjs", "index": 11, "index2": 6, "size": 853, @@ -1224,36 +1224,36 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "5:0-44" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-52" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-44" @@ -1272,12 +1272,12 @@ "source": "/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Injector.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Injector.mjs", - "name": "./node_modules/@dojo/widget-core/Injector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Injector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "index": 37, "index2": 31, - "size": 496, + "size": 493, "cacheable": true, "built": true, "optional": false, @@ -1286,18 +1286,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../Injector", "loc": "2:0-41" @@ -1312,15 +1312,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" + "source": "import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "name": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "index": 28, "index2": 22, - "size": 1096, + "size": 1090, "cacheable": true, "built": true, "optional": false, @@ -1329,18 +1329,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./NodeHandler", "loc": "7:0-40" @@ -1356,15 +1356,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nimport Map from '@dojo/shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map" + "source": "import { Evented } from '../core/Evented';\nimport Map from '../shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Registry.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "name": "./node_modules/@dojo/widget-core/Registry.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "index": 21, "index2": 19, - "size": 3702, + "size": 3690, "cacheable": true, "built": true, "optional": false, @@ -1373,54 +1373,54 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/diff.mjs", - "module": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleName": "./node_modules/@dojo/widget-core/diff.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/diff.mjs", + "module": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/diff.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "1:0-46" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "3:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../Registry", "loc": "2:0-35" @@ -1441,15 +1441,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import Promise from '@dojo/shim/Promise';\nimport Map from '@dojo/shim/Map';\nimport Symbol from '@dojo/shim/Symbol';\nimport { Evented } from '@dojo/core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map" + "source": "import Promise from '../shim/Promise';\nimport Map from '../shim/Map';\nimport Symbol from '../shim/Symbol';\nimport { Evented } from '../core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "name": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "index": 27, "index2": 21, - "size": 2862, + "size": 2856, "cacheable": true, "built": true, "optional": false, @@ -1458,18 +1458,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./RegistryHandler", "loc": "6:0-48" @@ -1484,15 +1484,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Map } from '@dojo/shim/Map';\nimport { Evented } from '@dojo/core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map" + "source": "import { Map } from '../shim/Map';\nimport { Evented } from '../core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "name": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "id": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "name": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "index": 14, "index2": 26, - "size": 14386, + "size": 13720, "cacheable": true, "built": true, "optional": false, @@ -1501,18 +1501,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./WidgetBase", "loc": "2:0-50" @@ -1523,8 +1523,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/WidgetBase", - "loc": "5:0-58" + "userRequest": "@dojo/framework/widget-core/WidgetBase", + "loc": "5:0-68" } ], "usedExports": [ @@ -1538,12 +1538,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" + "source": "import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "name": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", + "id": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "name": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", "index": 33, "index2": 27, "size": 2288, @@ -1555,18 +1555,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "../animations/cssTransitions", "loc": "3:0-58" @@ -1583,12 +1583,12 @@ "source": "let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/d.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/d.mjs", - "name": "./node_modules/@dojo/widget-core/d.mjs", + "id": "./node_modules/@dojo/framework/widget-core/d.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/d.mjs", + "name": "./node_modules/@dojo/framework/widget-core/d.mjs", "index": 4, "index2": 8, - "size": 3270, + "size": 3267, "cacheable": true, "built": true, "optional": false, @@ -1597,54 +1597,54 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./d", "loc": "5:0-29" }, { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./d", "loc": "4:0-24" }, - { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "type": "harmony import", - "userRequest": "./../d", - "loc": "5:0-27" - }, { "moduleId": "./src/menu-item/MenuItem.ts", "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--3-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/umd-compat-loader/index.js??ref--3-1!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/ts-loader/index.js??ref--3-2!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=ts&instanceName=0_menu-item!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/MenuItem.ts", "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/d", - "loc": "2:0-40" + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "type": "harmony import", + "userRequest": "./../d", + "loc": "5:0-27" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./d", "loc": "3:0-65" @@ -1675,12 +1675,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" + "source": "import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "index": 34, "index2": 29, "size": 311, @@ -1692,18 +1692,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../decorators/afterRender", "loc": "4:0-58" @@ -1721,9 +1721,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "index": 41, "index2": 36, "size": 365, @@ -1735,18 +1735,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./decorators/alwaysRender", "loc": "8:0-57" @@ -1764,9 +1764,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "index": 39, "index2": 32, "size": 331, @@ -1778,27 +1778,27 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "2:0-54" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "3:0-54" @@ -1816,9 +1816,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "index": 12, "index2": 38, "size": 728, @@ -1843,8 +1843,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/decorators/customElement", - "loc": "3:0-75" + "userRequest": "@dojo/framework/widget-core/decorators/customElement", + "loc": "3:0-85" } ], "usedExports": [ @@ -1886,12 +1886,12 @@ "depth": 0 }, { - "id": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "index": 40, "index2": 34, - "size": 973, + "size": 1014, "cacheable": true, "built": true, "optional": false, @@ -1900,18 +1900,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/diffProperty", "loc": "5:0-60" @@ -1926,12 +1926,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" + "source": "import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", "index": 35, "index2": 28, "size": 512, @@ -1943,63 +1943,63 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/handleDecorator", "loc": "4:0-66" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "2:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" @@ -2017,9 +2017,9 @@ "source": "/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "index": 38, "index2": 33, "size": 1532, @@ -2031,18 +2031,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/inject", "loc": "3:0-48" @@ -2057,12 +2057,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" + "source": "import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/diff.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/diff.mjs", - "name": "./node_modules/@dojo/widget-core/diff.mjs", + "id": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/diff.mjs", + "name": "./node_modules/@dojo/framework/widget-core/diff.mjs", "index": 20, "index2": 20, "size": 1930, @@ -2074,30 +2074,39 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./diff", "loc": "5:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../diff", "loc": "6:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "type": "harmony import", + "userRequest": "./../diff", + "loc": "2:0-33" } ], "usedExports": [ @@ -2116,12 +2125,12 @@ "source": "import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "index": 32, "index2": 30, - "size": 5852, + "size": 5683, "cacheable": true, "built": true, "optional": false, @@ -2130,18 +2139,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Projector", "loc": "3:0-52" @@ -2158,15 +2167,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "index": 36, "index2": 35, - "size": 5320, + "size": 5157, "cacheable": true, "built": true, "optional": false, @@ -2175,18 +2184,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Themed", "loc": "7:0-56" @@ -2197,8 +2206,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/mixins/Themed", - "loc": "4:0-69" + "userRequest": "@dojo/framework/widget-core/mixins/Themed", + "loc": "4:0-79" } ], "usedExports": [ @@ -2215,15 +2224,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "name": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "index": 13, "index2": 37, - "size": 9124, + "size": 9118, "cacheable": true, "built": true, "optional": false, @@ -2245,14 +2254,14 @@ "module": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "moduleName": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "type": "cjs require", - "userRequest": "@dojo/widget-core/registerCustomElement", - "loc": "4:28-78" + "userRequest": "@dojo/framework/widget-core/registerCustomElement", + "loc": "4:28-88" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../registerCustomElement", "loc": "1:0-66" @@ -2268,15 +2277,15 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/vdom.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "name": "./node_modules/@dojo/widget-core/vdom.mjs", + "id": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "name": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "index": 29, "index2": 25, - "size": 38814, + "size": 39966, "cacheable": true, "built": true, "optional": false, @@ -2285,27 +2294,27 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./vdom", "loc": "8:0-43" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../vdom", "loc": "6:0-32" @@ -2324,7 +2333,7 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import global from '@dojo/shim/global';\nimport { from as arrayFrom } from '@dojo/shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '@dojo/shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode.focus();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (propName === 'focus') {\n focusNode(propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const rendered = dnode.rendered || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\n oldIndex++;\n newIndex++;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let child = oldChildren[oldIndex];\n if (child) {\n let nextIndex = oldIndex + 1;\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n if (insertBefore.rendered) {\n insertBeforeChildren.push(...insertBefore.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\n insertBeforeChildren.push(oldChildren[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map" + "source": "import global from '../shim/global';\nimport { from as arrayFrom } from '../shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '../shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst nextSiblingMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode[propName]();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (nodeOperations.indexOf(propName) !== -1) {\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const item = instanceMap.get(dnode.instance);\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n oldIndex++;\n newIndex++;\n textUpdated =\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let childrenArray = oldChildren;\n let nextIndex = oldIndex + 1;\n let child = oldChildren[oldIndex];\n if (!child) {\n child = siblings[0];\n nextIndex = 1;\n childrenArray = siblings;\n }\n if (child) {\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n const item = instanceMap.get(insertBefore.instance);\n if (item && item.dnode.rendered) {\n insertBeforeChildren.push(...item.dnode.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\n break;\n }\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\n insertBeforeChildren.push(childrenArray[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const nextSiblings = children.slice(i + 1);\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n nextSiblingMap.set(instance, nextSiblings);\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n nextSiblingMap.set(instance, nextSiblings);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n const nextSiblings = nextSiblingMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map" }, { "id": "./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", @@ -2332,7 +2341,7 @@ "name": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "index": 1, "index2": 41, - "size": 282, + "size": 292, "cacheable": true, "built": true, "optional": false, @@ -2362,7 +2371,7 @@ "providedExports": null, "optimizationBailout": [], "depth": 1, - "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n" + "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n" }, { "id": "./node_modules/process/browser.js", @@ -2379,21 +2388,21 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "issuerId": "./node_modules/@dojo/has/has.mjs", - "issuerName": "./node_modules/@dojo/has/has.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "issuerId": "./node_modules/@dojo/framework/has/has.mjs", + "issuerName": "./node_modules/@dojo/framework/has/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "process", - "loc": "1:0-37" + "loc": "1:0-40" } ], "usedExports": true, @@ -2417,18 +2426,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -2443,19 +2452,19 @@ "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -2463,7 +2472,6 @@ ], "usedExports": [ "__decorate", - "__metadata", "__rest" ], "providedExports": [ @@ -2504,30 +2512,30 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "issuerId": "./node_modules/@dojo/shim/global.mjs", - "issuerName": "./node_modules/@dojo/shim/global.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/global.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/global.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/global.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "module": "./node_modules/@dojo/shim/global.mjs", - "moduleName": "./node_modules/@dojo/shim/global.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "module": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/global.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" }, { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" } ], "usedExports": true, @@ -2542,7 +2550,7 @@ "name": "./src/menu-item/MenuItem.ts", "index": 2, "index2": 40, - "size": 1095, + "size": 1135, "cacheable": true, "built": true, "optional": false, @@ -2575,7 +2583,7 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { v } from '@dojo/widget-core/d';\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\nimport * as css from './menuItem.m.css';\nlet MenuItem = class MenuItem extends ThemedMixin(WidgetBase) {\n _onClick() {\n this.properties.onSelected && this.properties.onSelected(this.properties.data);\n }\n render() {\n const { title, selected } = this.properties;\n return v('li', { classes: this.theme(css.root) }, [\n v('span', {\n classes: this.theme([css.item, selected ? css.selected : null]),\n onclick: this._onClick\n }, [title])\n ]);\n }\n};\nMenuItem = tslib_1.__decorate([\n customElement({\n tag: 'demo-menu-item',\n attributes: ['title', 'selected'],\n events: ['onSelected'],\n properties: ['data', 'selected']\n }),\n theme(css)\n], MenuItem);\nexport { MenuItem };\nexport default MenuItem;\n" + "source": "import * as tslib_1 from \"tslib\";\nimport { v } from '@dojo/framework/widget-core/d';\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\nimport * as css from './menuItem.m.css';\nlet MenuItem = class MenuItem extends ThemedMixin(WidgetBase) {\n _onClick() {\n this.properties.onSelected && this.properties.onSelected(this.properties.data);\n }\n render() {\n const { title, selected } = this.properties;\n return v('li', { classes: this.theme(css.root) }, [\n v('span', {\n classes: this.theme([css.item, selected ? css.selected : null]),\n onclick: this._onClick\n }, [title])\n ]);\n }\n};\nMenuItem = tslib_1.__decorate([\n customElement({\n tag: 'demo-menu-item',\n attributes: ['title', 'selected'],\n events: ['onSelected'],\n properties: ['data', 'selected']\n }),\n theme(css)\n], MenuItem);\nexport { MenuItem };\nexport default MenuItem;\n" }, { "id": "./src/menu-item/menuItem.m.css", @@ -2632,12 +2640,12 @@ ], "modules": [ { - "id": "./node_modules/@dojo/core/Destroyable.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "name": "./node_modules/@dojo/core/Destroyable.mjs", + "id": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "name": "./node_modules/@dojo/framework/core/Destroyable.mjs", "index": 25, "index2": 17, - "size": 1668, + "size": 1665, "cacheable": true, "built": true, "optional": false, @@ -2646,18 +2654,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "issuerId": "./node_modules/@dojo/core/Evented.mjs", - "issuerName": "./node_modules/@dojo/core/Evented.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "issuerId": "./node_modules/@dojo/framework/core/Evented.mjs", + "issuerName": "./node_modules/@dojo/framework/core/Evented.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", "userRequest": "./Destroyable", "loc": "2:0-44" @@ -2672,15 +2680,15 @@ ], "optimizationBailout": [], "depth": 6, - "source": "import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" + "source": "import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" }, { - "id": "./node_modules/@dojo/core/Evented.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "name": "./node_modules/@dojo/core/Evented.mjs", + "id": "./node_modules/@dojo/framework/core/Evented.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "name": "./node_modules/@dojo/framework/core/Evented.mjs", "index": 24, "index2": 18, - "size": 2149, + "size": 2151, "cacheable": true, "built": true, "optional": false, @@ -2689,48 +2697,48 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "issuerId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "issuerName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "2:0-45" + "userRequest": "../core/Evented", + "loc": "2:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "4:0-45" + "userRequest": "../core/Evented", + "loc": "4:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Injector.mjs", - "module": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Injector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Injector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" } ], "usedExports": [ @@ -2743,15 +2751,15 @@ ], "optimizationBailout": [], "depth": 5, - "source": "import Map from '@dojo/shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n methods.forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map" + "source": "import Map from '../shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n [...methods].forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map" }, { - "id": "./node_modules/@dojo/core/lang.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "name": "./node_modules/@dojo/core/lang.mjs", + "id": "./node_modules/@dojo/framework/core/lang.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "name": "./node_modules/@dojo/framework/core/lang.mjs", "index": 26, "index2": 16, - "size": 6843, + "size": 6837, "cacheable": true, "built": true, "optional": false, @@ -2760,27 +2768,27 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/lang", + "userRequest": "../../core/lang", "loc": "2:0-41" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", "userRequest": "./lang", "loc": "1:0-47" @@ -2805,12 +2813,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" + "source": "import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" }, { - "id": "./node_modules/@dojo/has/has.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "name": "./node_modules/@dojo/has/has.mjs", + "id": "./node_modules/@dojo/framework/has/has.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "name": "./node_modules/@dojo/framework/has/has.mjs", "index": 7, "index2": 3, "size": 6305, @@ -2822,29 +2830,29 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "issuerId": "./node_modules/@dojo/shim/support/has.mjs", - "issuerName": "./node_modules/@dojo/shim/support/has.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/support/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "1:0-41" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "4:0-30" } ], @@ -2866,9 +2874,9 @@ "source": "function isFeatureTestThenable(value) {\n return value && value.then;\n}\n/**\n * A cache of results of feature tests\n */\nexport const testCache = {};\n/**\n * A cache of the un-resolved feature tests\n */\nexport const testFunctions = {};\n/**\n * A cache of unresolved thenables (probably promises)\n * @type {{}}\n */\nconst testThenables = {};\n/**\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\n */\nconst globalScope = (function () {\n /* istanbul ignore else */\n if (typeof window !== 'undefined') {\n // Browsers\n return window;\n }\n else if (typeof global !== 'undefined') {\n // Node\n return global;\n }\n else if (typeof self !== 'undefined') {\n // Web workers\n return self;\n }\n /* istanbul ignore next */\n return {};\n})();\n/* Grab the staticFeatures if there are available */\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\n/* Cleaning up the DojoHasEnviornment */\nif ('DojoHasEnvironment' in globalScope) {\n delete globalScope.DojoHasEnvironment;\n}\n/**\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\n * returns a map.\n *\n * @param value The value to guard for\n */\nfunction isStaticFeatureFunction(value) {\n return typeof value === 'function';\n}\n/**\n * The cache of asserted features that were available in the global scope when the\n * module loaded\n */\nconst staticCache = staticFeatures\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\n : {}; /* Providing an empty cache, if none was in the environment\n\n/**\n* AMD plugin function.\n*\n* Conditional loads modules based on a has feature test value.\n*\n* @param resourceId Gives the resolved module id to load.\n* @param require The loader require function with respect to the module that contained the plugin resource in its\n* dependency list.\n* @param load Callback to loader that consumes result of plugin demand.\n*/\nexport function load(resourceId, require, load, config) {\n resourceId ? require([resourceId], load) : load();\n}\n/**\n * AMD plugin function.\n *\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\n * value(s).\n *\n * @param resourceId The id of the module\n * @param normalize Resolves a relative module id into an absolute module id\n */\nexport function normalize(resourceId, normalize) {\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\n let i = 0;\n function get(skip) {\n const term = tokens[i++];\n if (term === ':') {\n // empty string module name, resolves to null\n return null;\n }\n else {\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\n if (tokens[i++] === '?') {\n if (!skip && has(term)) {\n // matched the feature, get the first value from the options\n return get();\n }\n else {\n // did not match, get the second value, passing over the first\n get(true);\n return get(skip);\n }\n }\n // a module\n return term;\n }\n }\n const id = get();\n return id && normalize(id);\n}\n/**\n * Check if a feature has already been registered\n *\n * @param feature the name of the feature\n */\nexport function exists(feature) {\n const normalizedFeature = feature.toLowerCase();\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\n}\n/**\n * Register a new test for a named feature.\n *\n * @example\n * has.add('dom-addeventlistener', !!document.addEventListener);\n *\n * @example\n * has.add('touch-events', function () {\n * return 'ontouchstart' in document\n * });\n *\n * @param feature the name of the feature\n * @param value the value reported of the feature, or a function that will be executed once on first test\n * @param overwrite if an existing value should be overwritten. Defaults to false.\n */\nexport function add(feature, value, overwrite = false) {\n const normalizedFeature = feature.toLowerCase();\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\n }\n if (typeof value === 'function') {\n testFunctions[normalizedFeature] = value;\n }\n else if (isFeatureTestThenable(value)) {\n testThenables[feature] = value.then((resolvedValue) => {\n testCache[feature] = resolvedValue;\n delete testThenables[feature];\n }, () => {\n delete testThenables[feature];\n });\n }\n else {\n testCache[normalizedFeature] = value;\n delete testFunctions[normalizedFeature];\n }\n}\n/**\n * Return the current value of a named feature.\n *\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\n */\nexport default function has(feature) {\n let result;\n const normalizedFeature = feature.toLowerCase();\n if (normalizedFeature in staticCache) {\n result = staticCache[normalizedFeature];\n }\n else if (testFunctions[normalizedFeature]) {\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\n delete testFunctions[normalizedFeature];\n }\n else if (normalizedFeature in testCache) {\n result = testCache[normalizedFeature];\n }\n else if (feature in testThenables) {\n return false;\n }\n else {\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\n }\n return result;\n}\n/*\n * Out of the box feature tests\n */\n/* Environments */\n/* Used as a value to provide a debug only code path */\nadd('debug', true);\n/* Detects if the environment is \"browser like\" */\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\n/* Detects if the environment appears to be NodeJS */\nadd('host-node', function () {\n if (typeof process === 'object' && process.versions && process.versions.node) {\n return process.versions.node;\n }\n});\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Map.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "name": "./node_modules/@dojo/shim/Map.mjs", + "id": "./node_modules/@dojo/framework/shim/Map.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "name": "./node_modules/@dojo/framework/shim/Map.mjs", "index": 15, "index2": 12, "size": 3331, @@ -2880,57 +2888,57 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-37" + "userRequest": "../shim/Map", + "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" } ], "usedExports": [ @@ -2946,9 +2954,9 @@ "source": "import { isArrayLike, ShimIterator } from './iterator';\nimport global from './global';\nimport { is as objectIs } from './object';\nimport has from './support/has';\nimport './Symbol';\nexport let Map = global.Map;\nif (!true) {\n Map = (_a = class Map {\n constructor(iterable) {\n this._keys = [];\n this._values = [];\n this[Symbol.toStringTag] = 'Map';\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const value = iterable[i];\n this.set(value[0], value[1]);\n }\n }\n else {\n for (const value of iterable) {\n this.set(value[0], value[1]);\n }\n }\n }\n }\n /**\n * An alternative to Array.prototype.indexOf using Object.is\n * to check for equality. See http://mzl.la/1zuKO2V\n */\n _indexOfKey(keys, key) {\n for (let i = 0, length = keys.length; i < length; i++) {\n if (objectIs(keys[i], key)) {\n return i;\n }\n }\n return -1;\n }\n get size() {\n return this._keys.length;\n }\n clear() {\n this._keys.length = this._values.length = 0;\n }\n delete(key) {\n const index = this._indexOfKey(this._keys, key);\n if (index < 0) {\n return false;\n }\n this._keys.splice(index, 1);\n this._values.splice(index, 1);\n return true;\n }\n entries() {\n const values = this._keys.map((key, i) => {\n return [key, this._values[i]];\n });\n return new ShimIterator(values);\n }\n forEach(callback, context) {\n const keys = this._keys;\n const values = this._values;\n for (let i = 0, length = keys.length; i < length; i++) {\n callback.call(context, values[i], keys[i], this);\n }\n }\n get(key) {\n const index = this._indexOfKey(this._keys, key);\n return index < 0 ? undefined : this._values[index];\n }\n has(key) {\n return this._indexOfKey(this._keys, key) > -1;\n }\n keys() {\n return new ShimIterator(this._keys);\n }\n set(key, value) {\n let index = this._indexOfKey(this._keys, key);\n index = index < 0 ? this._keys.length : index;\n this._keys[index] = key;\n this._values[index] = value;\n return this;\n }\n values() {\n return new ShimIterator(this._values);\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n },\n _a[Symbol.species] = _a,\n _a);\n}\nexport default Map;\nvar _a;\n//# sourceMappingURL=Map.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Promise.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "name": "./node_modules/@dojo/shim/Promise.mjs", + "id": "./node_modules/@dojo/framework/shim/Promise.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "name": "./node_modules/@dojo/framework/shim/Promise.mjs", "index": 22, "index2": 15, "size": 8519, @@ -2960,30 +2968,30 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "issuerId": "./node_modules/@dojo/widget-core/Registry.mjs", - "issuerName": "./node_modules/@dojo/widget-core/Registry.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "1:0-41" + "userRequest": "../shim/Promise", + "loc": "1:0-38" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "2:0-41" + "userRequest": "../shim/Promise", + "loc": "2:0-38" } ], "usedExports": [ @@ -2999,9 +3007,9 @@ "source": "import global from './global';\nimport { queueMicroTask } from './support/queue';\nimport './Symbol';\nimport has from './support/has';\nexport let ShimPromise = global.Promise;\nexport const isThenable = function isThenable(value) {\n return value && typeof value.then === 'function';\n};\nif (!true) {\n global.Promise = ShimPromise = (_a = class Promise {\n /**\n * Creates a new Promise.\n *\n * @constructor\n *\n * @param executor\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\n * starting the asynchronous operation when it is invoked.\n *\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\n * successfully, or the `reject` function when the operation fails.\n */\n constructor(executor) {\n /**\n * The current state of this promise.\n */\n this.state = 1 /* Pending */;\n this[Symbol.toStringTag] = 'Promise';\n /**\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\n */\n let isChained = false;\n /**\n * Whether or not this promise is in a resolved state.\n */\n const isResolved = () => {\n return this.state !== 1 /* Pending */ || isChained;\n };\n /**\n * Callbacks that should be invoked once the asynchronous operation has completed.\n */\n let callbacks = [];\n /**\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\n * enqueues callbacks for execution on the next event loop turn.\n */\n let whenFinished = function (callback) {\n if (callbacks) {\n callbacks.push(callback);\n }\n };\n /**\n * Settles this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const settle = (newState, value) => {\n // A promise can only be settled once.\n if (this.state !== 1 /* Pending */) {\n return;\n }\n this.state = newState;\n this.resolvedValue = value;\n whenFinished = queueMicroTask;\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\n // wait an extra turn.\n if (callbacks && callbacks.length > 0) {\n queueMicroTask(function () {\n if (callbacks) {\n let count = callbacks.length;\n for (let i = 0; i < count; ++i) {\n callbacks[i].call(null);\n }\n callbacks = null;\n }\n });\n }\n };\n /**\n * Resolves this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const resolve = (newState, value) => {\n if (isResolved()) {\n return;\n }\n if (isThenable(value)) {\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\n isChained = true;\n }\n else {\n settle(newState, value);\n }\n };\n this.then = (onFulfilled, onRejected) => {\n return new Promise((resolve, reject) => {\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\n // event loop.\n whenFinished(() => {\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\n if (typeof callback === 'function') {\n try {\n resolve(callback(this.resolvedValue));\n }\n catch (error) {\n reject(error);\n }\n }\n else if (this.state === 2 /* Rejected */) {\n reject(this.resolvedValue);\n }\n else {\n resolve(this.resolvedValue);\n }\n });\n });\n };\n try {\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\n }\n catch (error) {\n settle(2 /* Rejected */, error);\n }\n }\n static all(iterable) {\n return new this(function (resolve, reject) {\n const values = [];\n let complete = 0;\n let total = 0;\n let populating = true;\n function fulfill(index, value) {\n values[index] = value;\n ++complete;\n finish();\n }\n function finish() {\n if (populating || complete < total) {\n return;\n }\n resolve(values);\n }\n function processItem(index, item) {\n ++total;\n if (isThenable(item)) {\n // If an item Promise rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(fulfill.bind(null, index), reject);\n }\n else {\n Promise.resolve(item).then(fulfill.bind(null, index));\n }\n }\n let i = 0;\n for (const value of iterable) {\n processItem(i, value);\n i++;\n }\n populating = false;\n finish();\n });\n }\n static race(iterable) {\n return new this(function (resolve, reject) {\n for (const item of iterable) {\n if (item instanceof Promise) {\n // If a Promise item rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(resolve, reject);\n }\n else {\n Promise.resolve(item).then(resolve);\n }\n }\n });\n }\n static reject(reason) {\n return new this(function (resolve, reject) {\n reject(reason);\n });\n }\n static resolve(value) {\n return new this(function (resolve) {\n resolve(value);\n });\n }\n catch(onRejected) {\n return this.then(undefined, onRejected);\n }\n },\n _a[Symbol.species] = ShimPromise,\n _a);\n}\nexport default ShimPromise;\nvar _a;\n//# sourceMappingURL=Promise.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Symbol.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "name": "./node_modules/@dojo/shim/Symbol.mjs", + "id": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "name": "./node_modules/@dojo/framework/shim/Symbol.mjs", "index": 5, "index2": 7, "size": 5929, @@ -3013,81 +3021,81 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/d.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/d.mjs", - "module": "./node_modules/@dojo/widget-core/d.mjs", - "moduleName": "./node_modules/@dojo/widget-core/d.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "1:0-39" + "userRequest": "../shim/Symbol", + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/d.mjs", + "module": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/d.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" + "userRequest": "../shim/Symbol", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "5:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "4:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "type": "harmony import", + "userRequest": "../shim/Symbol", + "loc": "3:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "1:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-18" @@ -3106,9 +3114,9 @@ "source": "import has from './support/has';\nimport global from './global';\nimport { getValueDescriptor } from './support/util';\nexport let Symbol = global.Symbol;\nif (!true) {\n /**\n * Throws if the value is not a symbol, used internally within the Shim\n * @param {any} value The value to check\n * @return {symbol} Returns the symbol or throws\n */\n const validateSymbol = function validateSymbol(value) {\n if (!isSymbol(value)) {\n throw new TypeError(value + ' is not a symbol');\n }\n return value;\n };\n const defineProperties = Object.defineProperties;\n const defineProperty = Object.defineProperty;\n const create = Object.create;\n const objPrototype = Object.prototype;\n const globalSymbols = {};\n const getSymbolName = (function () {\n const created = create(null);\n return function (desc) {\n let postfix = 0;\n let name;\n while (created[String(desc) + (postfix || '')]) {\n ++postfix;\n }\n desc += String(postfix || '');\n created[desc] = true;\n name = '@@' + desc;\n // FIXME: Temporary guard until the duplicate execution when testing can be\n // pinned down.\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\n defineProperty(objPrototype, name, {\n set: function (value) {\n defineProperty(this, name, getValueDescriptor(value));\n }\n });\n }\n return name;\n };\n })();\n const InternalSymbol = function Symbol(description) {\n if (this instanceof InternalSymbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n return Symbol(description);\n };\n Symbol = global.Symbol = function Symbol(description) {\n if (this instanceof Symbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n const sym = Object.create(InternalSymbol.prototype);\n description = description === undefined ? '' : String(description);\n return defineProperties(sym, {\n __description__: getValueDescriptor(description),\n __name__: getValueDescriptor(getSymbolName(description))\n });\n };\n /* Decorate the Symbol function with the appropriate properties */\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\n if (globalSymbols[key]) {\n return globalSymbols[key];\n }\n return (globalSymbols[key] = Symbol(String(key)));\n }));\n defineProperties(Symbol, {\n keyFor: getValueDescriptor(function (sym) {\n let key;\n validateSymbol(sym);\n for (key in globalSymbols) {\n if (globalSymbols[key] === sym) {\n return key;\n }\n }\n }),\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\n match: getValueDescriptor(Symbol.for('match'), false, false),\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\n search: getValueDescriptor(Symbol.for('search'), false, false),\n species: getValueDescriptor(Symbol.for('species'), false, false),\n split: getValueDescriptor(Symbol.for('split'), false, false),\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\n });\n /* Decorate the InternalSymbol object */\n defineProperties(InternalSymbol.prototype, {\n constructor: getValueDescriptor(Symbol),\n toString: getValueDescriptor(function () {\n return this.__name__;\n }, false, false)\n });\n /* Decorate the Symbol.prototype */\n defineProperties(Symbol.prototype, {\n toString: getValueDescriptor(function () {\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\n }),\n valueOf: getValueDescriptor(function () {\n return validateSymbol(this);\n })\n });\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\n return validateSymbol(this);\n }));\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\n}\n/**\n * A custom guard function that determines if an object is a symbol or not\n * @param {any} value The value to check to see if it is a symbol or not\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\n */\nexport function isSymbol(value) {\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\n}\n/**\n * Fill any missing well known symbols if the native Symbol is missing them\n */\n[\n 'hasInstance',\n 'isConcatSpreadable',\n 'iterator',\n 'species',\n 'replace',\n 'search',\n 'split',\n 'match',\n 'toPrimitive',\n 'toStringTag',\n 'unscopables',\n 'observable'\n].forEach((wellKnown) => {\n if (!Symbol[wellKnown]) {\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\n }\n});\nexport default Symbol;\n//# sourceMappingURL=Symbol.mjs.map" }, { - "id": "./node_modules/@dojo/shim/WeakMap.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "name": "./node_modules/@dojo/shim/WeakMap.mjs", + "id": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "name": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "index": 19, "index2": 13, "size": 3748, @@ -3120,38 +3128,38 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "2:0-41" + "userRequest": "../shim/WeakMap", + "loc": "2:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "5:0-41" + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", + "userRequest": "../../shim/WeakMap", "loc": "1:0-41" } ], @@ -3167,9 +3175,9 @@ "source": "import global from './global';\nimport { isArrayLike } from './iterator';\nimport has from './support/has';\nimport './Symbol';\nexport let WeakMap = global.WeakMap;\nif (!true) {\n const DELETED = {};\n const getUID = function getUID() {\n return Math.floor(Math.random() * 100000000);\n };\n const generateName = (function () {\n let startId = Math.floor(Date.now() % 100000000);\n return function generateName() {\n return '__wm' + getUID() + (startId++ + '__');\n };\n })();\n WeakMap = class WeakMap {\n constructor(iterable) {\n this[Symbol.toStringTag] = 'WeakMap';\n this._name = generateName();\n this._frozenEntries = [];\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const item = iterable[i];\n this.set(item[0], item[1]);\n }\n }\n else {\n for (const [key, value] of iterable) {\n this.set(key, value);\n }\n }\n }\n }\n _getFrozenEntryIndex(key) {\n for (let i = 0; i < this._frozenEntries.length; i++) {\n if (this._frozenEntries[i].key === key) {\n return i;\n }\n }\n return -1;\n }\n delete(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n entry.value = DELETED;\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n this._frozenEntries.splice(frozenIndex, 1);\n return true;\n }\n return false;\n }\n get(key) {\n if (key === undefined || key === null) {\n return undefined;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n return entry.value;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return this._frozenEntries[frozenIndex].value;\n }\n }\n has(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return true;\n }\n return false;\n }\n set(key, value) {\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\n throw new TypeError('Invalid value used as weak map key');\n }\n let entry = key[this._name];\n if (!entry || entry.key !== key) {\n entry = Object.create(null, {\n key: { value: key }\n });\n if (Object.isFrozen(key)) {\n this._frozenEntries.push(entry);\n }\n else {\n Object.defineProperty(key, this._name, {\n value: entry\n });\n }\n }\n entry.value = value;\n return this;\n }\n };\n}\nexport default WeakMap;\n//# sourceMappingURL=WeakMap.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "index": 34, "index2": 29, "size": 311, @@ -3181,18 +3189,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../decorators/afterRender", "loc": "4:0-58" @@ -3237,9 +3245,9 @@ "depth": 0 }, { - "id": "./node_modules/@dojo/shim/array.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "name": "./node_modules/@dojo/shim/array.mjs", + "id": "./node_modules/@dojo/framework/shim/array.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "name": "./node_modules/@dojo/framework/shim/array.mjs", "index": 30, "index2": 24, "size": 8928, @@ -3251,30 +3259,30 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "4:0-40" + "userRequest": "../shim/array", + "loc": "4:0-37" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "2:0-53" + "userRequest": "../shim/array", + "loc": "2:0-50" } ], "usedExports": [ @@ -3294,9 +3302,9 @@ "source": "import global from './global';\nimport { isArrayLike, isIterable } from './iterator';\nimport { MAX_SAFE_INTEGER } from './number';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\nexport let from;\n/**\n * Creates a new array from the function parameters.\n *\n * @param arguments Any number of arguments for the array\n * @return An array from the given arguments\n */\nexport let of;\n/* ES6 Array instance methods */\n/**\n * Copies data internally within an array or array-like object.\n *\n * @param target The target array-like object\n * @param offset The index to start copying values to; if negative, it counts backwards from length\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\n * @return The target\n */\nexport let copyWithin;\n/**\n * Fills elements of an array-like object with the specified value.\n *\n * @param target The target to fill\n * @param value The value to fill each element of the target with\n * @param start The first index to fill\n * @param end The (exclusive) index at which to stop filling\n * @return The filled target\n */\nexport let fill;\n/**\n * Finds and returns the first instance matching the callback or undefined if one is not found.\n *\n * @param target An array-like object\n * @param callback A function returning if the current value matches a criteria\n * @param thisArg The execution context for the find function\n * @return The first element matching the callback, or undefined if one does not exist\n */\nexport let find;\n/**\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\n * or -1 if no values satisfy it.\n *\n * @param target An array-like object\n * @param callback A function returning true if the current value satisfies its criteria\n * @param thisArg The execution context for the find function\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\n */\nexport let findIndex;\n/* ES7 Array instance methods */\n/**\n * Determines whether an array includes a given value\n *\n * @param target the target array-like object\n * @param searchElement the item to search for\n * @param fromIndex the starting index to search from\n * @return `true` if the array includes the element, otherwise `false`\n */\nexport let includes;\nif (true && true) {\n from = global.Array.from;\n of = global.Array.of;\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\n fill = wrapNative(global.Array.prototype.fill);\n find = wrapNative(global.Array.prototype.find);\n findIndex = wrapNative(global.Array.prototype.findIndex);\n}\nelse {\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n if (isNaN(length)) {\n return 0;\n }\n length = Number(length);\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n /**\n * From ES6 7.1.4 ToInteger()\n *\n * @param value A value to convert\n * @return An integer\n */\n const toInteger = function toInteger(value) {\n value = Number(value);\n if (isNaN(value)) {\n return 0;\n }\n if (value === 0 || !isFinite(value)) {\n return value;\n }\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\n };\n /**\n * Normalizes an offset against a given length, wrapping it if negative.\n *\n * @param value The original offset\n * @param length The total length to normalize against\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\n */\n const normalizeOffset = function normalizeOffset(value, length) {\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\n };\n from = function from(arrayLike, mapFunction, thisArg) {\n if (arrayLike == null) {\n throw new TypeError('from: requires an array-like object');\n }\n if (mapFunction && thisArg) {\n mapFunction = mapFunction.bind(thisArg);\n }\n /* tslint:disable-next-line:variable-name */\n const Constructor = this;\n const length = toLength(arrayLike.length);\n // Support extension\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\n return array;\n }\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\n // with the iteration on IE when using a NaN array length.\n if (isArrayLike(arrayLike)) {\n if (length === 0) {\n return [];\n }\n for (let i = 0; i < arrayLike.length; i++) {\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\n }\n }\n else {\n let i = 0;\n for (const value of arrayLike) {\n array[i] = mapFunction ? mapFunction(value, i) : value;\n i++;\n }\n }\n if (arrayLike.length !== undefined) {\n array.length = length;\n }\n return array;\n };\n of = function of(...items) {\n return Array.prototype.slice.call(items);\n };\n copyWithin = function copyWithin(target, offset, start, end) {\n if (target == null) {\n throw new TypeError('copyWithin: target must be an array-like object');\n }\n const length = toLength(target.length);\n offset = normalizeOffset(toInteger(offset), length);\n start = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n let count = Math.min(end - start, length - offset);\n let direction = 1;\n if (offset > start && offset < start + count) {\n direction = -1;\n start += count - 1;\n offset += count - 1;\n }\n while (count > 0) {\n if (start in target) {\n target[offset] = target[start];\n }\n else {\n delete target[offset];\n }\n offset += direction;\n start += direction;\n count--;\n }\n return target;\n };\n fill = function fill(target, value, start, end) {\n const length = toLength(target.length);\n let i = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n while (i < end) {\n target[i++] = value;\n }\n return target;\n };\n find = function find(target, callback, thisArg) {\n const index = findIndex(target, callback, thisArg);\n return index !== -1 ? target[index] : undefined;\n };\n findIndex = function findIndex(target, callback, thisArg) {\n const length = toLength(target.length);\n if (!callback) {\n throw new TypeError('find: second argument must be a function');\n }\n if (thisArg) {\n callback = callback.bind(thisArg);\n }\n for (let i = 0; i < length; i++) {\n if (callback(target[i], i, target)) {\n return i;\n }\n }\n return -1;\n };\n}\nif (true) {\n includes = wrapNative(global.Array.prototype.includes);\n}\nelse {\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n length = Number(length);\n if (isNaN(length)) {\n return 0;\n }\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n includes = function includes(target, searchElement, fromIndex = 0) {\n let len = toLength(target.length);\n for (let i = fromIndex; i < len; ++i) {\n const currentElement = target[i];\n if (searchElement === currentElement ||\n (searchElement !== searchElement && currentElement !== currentElement)) {\n return true;\n }\n }\n return false;\n };\n}\n//# sourceMappingURL=array.mjs.map" }, { - "id": "./node_modules/@dojo/shim/global.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "name": "./node_modules/@dojo/shim/global.mjs", + "id": "./node_modules/@dojo/framework/shim/global.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "name": "./node_modules/@dojo/framework/shim/global.mjs", "index": 10, "index2": 4, "size": 581, @@ -3308,117 +3316,117 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "6:0-39" + "userRequest": "../shim/global", + "loc": "6:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "1:0-39" + "userRequest": "./global", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./global", - "loc": "1:0-30" + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./global", - "loc": "2:0-30" + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "./global", - "loc": "1:0-30" + "userRequest": "../shim/global", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/number.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/number.mjs", - "module": "./node_modules/@dojo/shim/number.mjs", - "moduleName": "./node_modules/@dojo/shim/number.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/number.mjs", + "module": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/number.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", "userRequest": "../global", "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "../global", "loc": "1:0-31" @@ -3435,9 +3443,9 @@ "source": "const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map" }, { - "id": "./node_modules/@dojo/shim/iterator.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "name": "./node_modules/@dojo/shim/iterator.mjs", + "id": "./node_modules/@dojo/framework/shim/iterator.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "name": "./node_modules/@dojo/framework/shim/iterator.mjs", "index": 16, "index2": 10, "size": 3158, @@ -3449,36 +3457,36 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-53" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "1:0-55" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-41" @@ -3497,9 +3505,9 @@ "source": "import './Symbol';\nimport { HIGH_SURROGATE_MAX, HIGH_SURROGATE_MIN } from './string';\nconst staticDone = { done: true, value: undefined };\n/**\n * A class that _shims_ an iterator interface on array like objects.\n */\nexport class ShimIterator {\n constructor(list) {\n this._nextIndex = -1;\n if (isIterable(list)) {\n this._nativeIterator = list[Symbol.iterator]();\n }\n else {\n this._list = list;\n }\n }\n /**\n * Return the next iteration result for the Iterator\n */\n next() {\n if (this._nativeIterator) {\n return this._nativeIterator.next();\n }\n if (!this._list) {\n return staticDone;\n }\n if (++this._nextIndex < this._list.length) {\n return {\n done: false,\n value: this._list[this._nextIndex]\n };\n }\n return staticDone;\n }\n [Symbol.iterator]() {\n return this;\n }\n}\n/**\n * A type guard for checking if something has an Iterable interface\n *\n * @param value The value to type guard against\n */\nexport function isIterable(value) {\n return value && typeof value[Symbol.iterator] === 'function';\n}\n/**\n * A type guard for checking if something is ArrayLike\n *\n * @param value The value to type guard against\n */\nexport function isArrayLike(value) {\n return value && typeof value.length === 'number';\n}\n/**\n * Returns the iterator for an object\n *\n * @param iterable The iterable object to return the iterator for\n */\nexport function get(iterable) {\n if (isIterable(iterable)) {\n return iterable[Symbol.iterator]();\n }\n else if (isArrayLike(iterable)) {\n return new ShimIterator(iterable);\n }\n}\n/**\n * Shims the functionality of `for ... of` blocks\n *\n * @param iterable The object the provides an interator interface\n * @param callback The callback which will be called for each item of the iterable\n * @param thisArg Optional scope to pass the callback\n */\nexport function forOf(iterable, callback, thisArg) {\n let broken = false;\n function doBreak() {\n broken = true;\n }\n /* We need to handle iteration of double byte strings properly */\n if (isArrayLike(iterable) && typeof iterable === 'string') {\n const l = iterable.length;\n for (let i = 0; i < l; ++i) {\n let char = iterable[i];\n if (i + 1 < l) {\n const code = char.charCodeAt(0);\n if (code >= HIGH_SURROGATE_MIN && code <= HIGH_SURROGATE_MAX) {\n char += iterable[++i];\n }\n }\n callback.call(thisArg, char, iterable, doBreak);\n if (broken) {\n return;\n }\n }\n }\n else {\n const iterator = get(iterable);\n if (iterator) {\n let result = iterator.next();\n while (!result.done) {\n callback.call(thisArg, result.value, iterable, doBreak);\n if (broken) {\n return;\n }\n result = iterator.next();\n }\n }\n }\n}\n//# sourceMappingURL=iterator.mjs.map" }, { - "id": "./node_modules/@dojo/shim/number.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/number.mjs", - "name": "./node_modules/@dojo/shim/number.mjs", + "id": "./node_modules/@dojo/framework/shim/number.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/number.mjs", + "name": "./node_modules/@dojo/framework/shim/number.mjs", "index": 31, "index2": 23, "size": 1724, @@ -3511,18 +3519,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./number", "loc": "3:0-44" @@ -3543,9 +3551,9 @@ "source": "import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map" }, { - "id": "./node_modules/@dojo/shim/object.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "name": "./node_modules/@dojo/shim/object.mjs", + "id": "./node_modules/@dojo/framework/shim/object.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "name": "./node_modules/@dojo/framework/shim/object.mjs", "index": 18, "index2": 11, "size": 4061, @@ -3557,39 +3565,39 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "issuerId": "./node_modules/@dojo/shim/Map.mjs", - "issuerName": "./node_modules/@dojo/shim/Map.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Map.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Map.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./object", "loc": "3:0-42" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "1:0-43" + "userRequest": "../shim/object", + "loc": "1:0-40" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "2:0-43" + "userRequest": "../shim/object", + "loc": "2:0-40" } ], "usedExports": [ @@ -3611,9 +3619,9 @@ "source": "import global from './global';\nimport has from './support/has';\nimport { isSymbol } from './Symbol';\nexport let assign;\n/**\n * Gets the own property descriptor of the specified object.\n * An own property descriptor is one that is defined directly on the object and is not\n * inherited from the object's prototype.\n * @param o Object that contains the property.\n * @param p Name of the property.\n */\nexport let getOwnPropertyDescriptor;\n/**\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\n * @param o Object that contains the own properties.\n */\nexport let getOwnPropertyNames;\n/**\n * Returns an array of all symbol properties found directly on object o.\n * @param o Object to retrieve the symbols from.\n */\nexport let getOwnPropertySymbols;\n/**\n * Returns true if the values are the same value, false otherwise.\n * @param value1 The first value.\n * @param value2 The second value.\n */\nexport let is;\n/**\n * Returns the names of the enumerable properties and methods of an object.\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n */\nexport let keys;\n/* ES7 Object static methods */\nexport let getOwnPropertyDescriptors;\nexport let entries;\nexport let values;\nif (true) {\n const globalObject = global.Object;\n assign = globalObject.assign;\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\n is = globalObject.is;\n keys = globalObject.keys;\n}\nelse {\n keys = function symbolAwareKeys(o) {\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n assign = function assign(target, ...sources) {\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const to = Object(target);\n sources.forEach((nextSource) => {\n if (nextSource) {\n // Skip over if undefined or null\n keys(nextSource).forEach((nextKey) => {\n to[nextKey] = nextSource[nextKey];\n });\n }\n });\n return to;\n };\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\n if (isSymbol(prop)) {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n else {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n };\n getOwnPropertyNames = function getOwnPropertyNames(o) {\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n return Object.getOwnPropertyNames(o)\n .filter((key) => Boolean(key.match(/^@@.+/)))\n .map((key) => Symbol.for(key.substring(2)));\n };\n is = function is(value1, value2) {\n if (value1 === value2) {\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\n }\n return value1 !== value1 && value2 !== value2; // NaN\n };\n}\nif (true) {\n const globalObject = global.Object;\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\n entries = globalObject.entries;\n values = globalObject.values;\n}\nelse {\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\n return getOwnPropertyNames(o).reduce((previous, key) => {\n previous[key] = getOwnPropertyDescriptor(o, key);\n return previous;\n }, {});\n };\n entries = function entries(o) {\n return keys(o).map((key) => [key, o[key]]);\n };\n values = function values(o) {\n return keys(o).map((key) => o[key]);\n };\n}\n//# sourceMappingURL=object.mjs.map" }, { - "id": "./node_modules/@dojo/shim/string.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "name": "./node_modules/@dojo/shim/string.mjs", + "id": "./node_modules/@dojo/framework/shim/string.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "name": "./node_modules/@dojo/framework/shim/string.mjs", "index": 17, "index2": 9, "size": 12418, @@ -3625,18 +3633,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "issuerId": "./node_modules/@dojo/shim/iterator.mjs", - "issuerName": "./node_modules/@dojo/shim/iterator.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/iterator.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./string", "loc": "2:0-66" @@ -3667,9 +3675,9 @@ "source": "import global from './global';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\n/**\n * The minimum location of high surrogates\n */\nexport const HIGH_SURROGATE_MIN = 0xd800;\n/**\n * The maximum location of high surrogates\n */\nexport const HIGH_SURROGATE_MAX = 0xdbff;\n/**\n * The minimum location of low surrogates\n */\nexport const LOW_SURROGATE_MIN = 0xdc00;\n/**\n * The maximum location of low surrogates\n */\nexport const LOW_SURROGATE_MAX = 0xdfff;\n/* ES6 static methods */\n/**\n * Return the String value whose elements are, in order, the elements in the List elements.\n * If length is 0, the empty string is returned.\n * @param codePoints The code points to generate the string\n */\nexport let fromCodePoint;\n/**\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\n * as such the first argument will be a well formed template call site object and the rest\n * parameter will contain the substitution values.\n * @param template A well-formed template string call site representation.\n * @param substitutions A set of substitution values.\n */\nexport let raw;\n/* ES6 instance methods */\n/**\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\n * value of the UTF-16 encoded code point starting at the string element at position pos in\n * the String resulting from converting this object to a String.\n * If there is no element at that position, the result is undefined.\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\n */\nexport let codePointAt;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * endPosition – length(this). Otherwise returns false.\n */\nexport let endsWith;\n/**\n * Returns true if searchString appears as a substring of the result of converting this\n * object to a String, at one or more positions that are\n * greater than or equal to position; otherwise, returns false.\n * @param target The target string\n * @param searchString search string\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\n */\nexport let includes;\n/**\n * Returns the String value result of normalizing the string into the normalization form\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\n * @param target The target string\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\n * is \"NFC\"\n */\nexport let normalize;\n/**\n * Returns a String value that is made from count copies appended together. If count is 0,\n * T is the empty String is returned.\n * @param count number of copies to append\n */\nexport let repeat;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * position. Otherwise returns false.\n */\nexport let startsWith;\n/* ES7 instance methods */\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the end (right) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padEnd;\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the start (left) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padStart;\nif (true && true) {\n fromCodePoint = global.String.fromCodePoint;\n raw = global.String.raw;\n codePointAt = wrapNative(global.String.prototype.codePointAt);\n endsWith = wrapNative(global.String.prototype.endsWith);\n includes = wrapNative(global.String.prototype.includes);\n normalize = wrapNative(global.String.prototype.normalize);\n repeat = wrapNative(global.String.prototype.repeat);\n startsWith = wrapNative(global.String.prototype.startsWith);\n}\nelse {\n /**\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\n * Used by startsWith, includes, and endsWith.\n *\n * @return Normalized position.\n */\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\n if (text == null) {\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\n }\n const length = text.length;\n position = position !== position ? (isEnd ? length : 0) : position;\n return [text, String(search), Math.min(Math.max(position, 0), length)];\n };\n fromCodePoint = function fromCodePoint(...codePoints) {\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\n const length = arguments.length;\n if (!length) {\n return '';\n }\n const fromCharCode = String.fromCharCode;\n const MAX_SIZE = 0x4000;\n let codeUnits = [];\n let index = -1;\n let result = '';\n while (++index < length) {\n let codePoint = Number(arguments[index]);\n // Code points must be finite integers within the valid range\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\n if (!isValid) {\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint);\n }\n else {\n // Astral code point; split in surrogate halves\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += fromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n raw = function raw(callSite, ...substitutions) {\n let rawStrings = callSite.raw;\n let result = '';\n let numSubstitutions = substitutions.length;\n if (callSite == null || callSite.raw == null) {\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\n }\n for (let i = 0, length = rawStrings.length; i < length; i++) {\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\n }\n return result;\n };\n codePointAt = function codePointAt(text, position = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\n if (text == null) {\n throw new TypeError('string.codePointAt requries a valid string.');\n }\n const length = text.length;\n if (position !== position) {\n position = 0;\n }\n if (position < 0 || position >= length) {\n return undefined;\n }\n // Get the first code unit\n const first = text.charCodeAt(position);\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n const second = text.charCodeAt(position + 1);\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\n }\n }\n return first;\n };\n endsWith = function endsWith(text, search, endPosition) {\n if (endPosition == null) {\n endPosition = text.length;\n }\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\n const start = endPosition - search.length;\n if (start < 0) {\n return false;\n }\n return text.slice(start, endPosition) === search;\n };\n includes = function includes(text, search, position = 0) {\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\n return text.indexOf(search, position) !== -1;\n };\n repeat = function repeat(text, count = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\n if (text == null) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (count !== count) {\n count = 0;\n }\n if (count < 0 || count === Infinity) {\n throw new RangeError('string.repeat requires a non-negative finite count.');\n }\n let result = '';\n while (count) {\n if (count % 2) {\n result += text;\n }\n if (count > 1) {\n text += text;\n }\n count >>= 1;\n }\n return result;\n };\n startsWith = function startsWith(text, search, position = 0) {\n search = String(search);\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\n const end = position + search.length;\n if (end > text.length) {\n return false;\n }\n return text.slice(position, end) === search;\n };\n}\nif (true) {\n padEnd = wrapNative(global.String.prototype.padEnd);\n padStart = wrapNative(global.String.prototype.padStart);\n}\nelse {\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padEnd requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText +=\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length);\n }\n return strText;\n };\n padStart = function padStart(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padStart requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText =\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length) +\n strText;\n }\n return strText;\n };\n}\n//# sourceMappingURL=string.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/has.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "name": "./node_modules/@dojo/shim/support/has.mjs", + "id": "./node_modules/@dojo/framework/shim/support/has.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "name": "./node_modules/@dojo/framework/shim/support/has.mjs", "index": 6, "index2": 5, "size": 6151, @@ -3681,81 +3689,81 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "1:0-32" + "loc": "3:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "3:0-32" + "loc": "1:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "./has", "loc": "2:0-24" @@ -3773,12 +3781,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import has, { add } from '@dojo/has/has';\nimport global from '../global';\nexport default has;\nexport * from '@dojo/has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map" + "source": "import has, { add } from '../../has/has';\nimport global from '../global';\nexport default has;\nexport * from '../../has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/queue.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "name": "./node_modules/@dojo/shim/support/queue.mjs", + "id": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "name": "./node_modules/@dojo/framework/shim/support/queue.mjs", "index": 23, "index2": 14, "size": 6196, @@ -3790,18 +3798,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "issuerId": "./node_modules/@dojo/shim/Promise.mjs", - "issuerName": "./node_modules/@dojo/shim/Promise.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Promise.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/queue", "loc": "2:0-49" @@ -3818,9 +3826,9 @@ "source": "import global from '../global';\nimport has from './has';\nfunction executeTask(item) {\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n}\nfunction getQueueHandle(item, destructor) {\n return {\n destroy: function () {\n this.destroy = function () { };\n item.isActive = false;\n item.callback = null;\n if (destructor) {\n destructor();\n }\n }\n };\n}\nlet checkMicroTaskQueue;\nlet microTasks;\n/**\n * Schedules a callback to the macrotask queue.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueTask = (function () {\n let destructor;\n let enqueue;\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\n if (true) {\n const queue = [];\n global.addEventListener('message', function (event) {\n // Confirm that the event was triggered by the current window and by this particular implementation.\n if (event.source === global && event.data === 'dojo-queue-message') {\n event.stopPropagation();\n if (queue.length) {\n executeTask(queue.shift());\n }\n }\n });\n enqueue = function (item) {\n queue.push(item);\n global.postMessage('dojo-queue-message', '*');\n };\n }\n else if (false) {\n destructor = global.clearImmediate;\n enqueue = function (item) {\n return setImmediate(executeTask.bind(null, item));\n };\n }\n else {\n destructor = global.clearTimeout;\n enqueue = function (item) {\n return setTimeout(executeTask.bind(null, item), 0);\n };\n }\n function queueTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const id = enqueue(item);\n return getQueueHandle(item, destructor &&\n function () {\n destructor(id);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueTask(callback);\n };\n})();\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\nif (!true) {\n let isMicroTaskQueued = false;\n microTasks = [];\n checkMicroTaskQueue = function () {\n if (!isMicroTaskQueued) {\n isMicroTaskQueued = true;\n queueTask(function () {\n isMicroTaskQueued = false;\n if (microTasks.length) {\n let item;\n while ((item = microTasks.shift())) {\n executeTask(item);\n }\n }\n });\n }\n };\n}\n/**\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\n *\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueAnimationTask = (function () {\n if (!true) {\n return queueTask;\n }\n function queueAnimationTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\n return getQueueHandle(item, function () {\n cancelAnimationFrame(rafId);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueAnimationTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueAnimationTask(callback);\n };\n})();\n/**\n * Schedules a callback to the microtask queue.\n *\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\n * registered with `queueTask` or `queueAnimationTask`.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport let queueMicroTask = (function () {\n let enqueue;\n if (false) {\n enqueue = function (item) {\n global.process.nextTick(executeTask.bind(null, item));\n };\n }\n else if (true) {\n enqueue = function (item) {\n global.Promise.resolve(item).then(executeTask);\n };\n }\n else if (true) {\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const node = document.createElement('div');\n const queue = [];\n const observer = new HostMutationObserver(function () {\n while (queue.length > 0) {\n const item = queue.shift();\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n }\n });\n observer.observe(node, { attributes: true });\n enqueue = function (item) {\n queue.push(item);\n node.setAttribute('queueStatus', '1');\n };\n }\n else {\n enqueue = function (item) {\n checkMicroTaskQueue();\n microTasks.push(item);\n };\n }\n return function (callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n enqueue(item);\n return getQueueHandle(item);\n };\n})();\n//# sourceMappingURL=queue.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/util.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/util.mjs", - "name": "./node_modules/@dojo/shim/support/util.mjs", + "id": "./node_modules/@dojo/framework/shim/support/util.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/util.mjs", + "name": "./node_modules/@dojo/framework/shim/support/util.mjs", "index": 11, "index2": 6, "size": 853, @@ -3832,36 +3840,36 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "5:0-44" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-52" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-44" @@ -3880,12 +3888,12 @@ "source": "/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Injector.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Injector.mjs", - "name": "./node_modules/@dojo/widget-core/Injector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Injector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "index": 37, "index2": 31, - "size": 496, + "size": 493, "cacheable": true, "built": true, "optional": false, @@ -3894,18 +3902,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../Injector", "loc": "2:0-41" @@ -3920,15 +3928,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" + "source": "import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "name": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "index": 28, "index2": 22, - "size": 1096, + "size": 1090, "cacheable": true, "built": true, "optional": false, @@ -3937,18 +3945,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./NodeHandler", "loc": "7:0-40" @@ -3964,15 +3972,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nimport Map from '@dojo/shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map" + "source": "import { Evented } from '../core/Evented';\nimport Map from '../shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Registry.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "name": "./node_modules/@dojo/widget-core/Registry.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "index": 21, "index2": 19, - "size": 3702, + "size": 3690, "cacheable": true, "built": true, "optional": false, @@ -3981,54 +3989,54 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/diff.mjs", - "module": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleName": "./node_modules/@dojo/widget-core/diff.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/diff.mjs", + "module": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/diff.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "1:0-46" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "3:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../Registry", "loc": "2:0-35" @@ -4049,15 +4057,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import Promise from '@dojo/shim/Promise';\nimport Map from '@dojo/shim/Map';\nimport Symbol from '@dojo/shim/Symbol';\nimport { Evented } from '@dojo/core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map" + "source": "import Promise from '../shim/Promise';\nimport Map from '../shim/Map';\nimport Symbol from '../shim/Symbol';\nimport { Evented } from '../core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "name": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "index": 27, "index2": 21, - "size": 2862, + "size": 2856, "cacheable": true, "built": true, "optional": false, @@ -4066,18 +4074,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./RegistryHandler", "loc": "6:0-48" @@ -4092,15 +4100,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Map } from '@dojo/shim/Map';\nimport { Evented } from '@dojo/core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map" + "source": "import { Map } from '../shim/Map';\nimport { Evented } from '../core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "name": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "id": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "name": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "index": 14, "index2": 26, - "size": 14386, + "size": 13720, "cacheable": true, "built": true, "optional": false, @@ -4109,18 +4117,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./WidgetBase", "loc": "2:0-50" @@ -4131,8 +4139,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/WidgetBase", - "loc": "5:0-58" + "userRequest": "@dojo/framework/widget-core/WidgetBase", + "loc": "5:0-68" } ], "usedExports": [ @@ -4146,12 +4154,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" + "source": "import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "name": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", + "id": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "name": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", "index": 33, "index2": 27, "size": 2288, @@ -4163,18 +4171,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "../animations/cssTransitions", "loc": "3:0-58" @@ -4191,12 +4199,12 @@ "source": "let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/d.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/d.mjs", - "name": "./node_modules/@dojo/widget-core/d.mjs", + "id": "./node_modules/@dojo/framework/widget-core/d.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/d.mjs", + "name": "./node_modules/@dojo/framework/widget-core/d.mjs", "index": 4, "index2": 8, - "size": 3270, + "size": 3267, "cacheable": true, "built": true, "optional": false, @@ -4205,54 +4213,54 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./d", "loc": "5:0-29" }, { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./d", "loc": "4:0-24" }, - { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "type": "harmony import", - "userRequest": "./../d", - "loc": "5:0-27" - }, { "moduleId": "./src/menu-item/MenuItem.ts", "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--3-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/umd-compat-loader/index.js??ref--3-1!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/ts-loader/index.js??ref--3-2!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=ts&instanceName=0_menu-item!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/MenuItem.ts", "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/d", - "loc": "2:0-40" + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "type": "harmony import", + "userRequest": "./../d", + "loc": "5:0-27" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./d", "loc": "3:0-65" @@ -4283,12 +4291,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" + "source": "import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "index": 41, "index2": 36, "size": 365, @@ -4300,18 +4308,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./decorators/alwaysRender", "loc": "8:0-57" @@ -4329,9 +4337,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "index": 39, "index2": 32, "size": 331, @@ -4343,27 +4351,27 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "2:0-54" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "3:0-54" @@ -4381,9 +4389,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "index": 12, "index2": 38, "size": 728, @@ -4408,8 +4416,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/decorators/customElement", - "loc": "3:0-75" + "userRequest": "@dojo/framework/widget-core/decorators/customElement", + "loc": "3:0-85" } ], "usedExports": [ @@ -4424,12 +4432,12 @@ "source": "import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "index": 40, "index2": 34, - "size": 973, + "size": 1014, "cacheable": true, "built": true, "optional": false, @@ -4438,18 +4446,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/diffProperty", "loc": "5:0-60" @@ -4464,12 +4472,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" + "source": "import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", "index": 35, "index2": 28, "size": 512, @@ -4481,63 +4489,63 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/handleDecorator", "loc": "4:0-66" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "2:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" @@ -4555,9 +4563,9 @@ "source": "/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "index": 38, "index2": 33, "size": 1532, @@ -4569,18 +4577,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/inject", "loc": "3:0-48" @@ -4595,12 +4603,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" + "source": "import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/diff.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/diff.mjs", - "name": "./node_modules/@dojo/widget-core/diff.mjs", + "id": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/diff.mjs", + "name": "./node_modules/@dojo/framework/widget-core/diff.mjs", "index": 20, "index2": 20, "size": 1930, @@ -4612,30 +4620,39 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./diff", "loc": "5:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../diff", "loc": "6:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "type": "harmony import", + "userRequest": "./../diff", + "loc": "2:0-33" } ], "usedExports": [ @@ -4654,12 +4671,12 @@ "source": "import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "index": 32, "index2": 30, - "size": 5852, + "size": 5683, "cacheable": true, "built": true, "optional": false, @@ -4668,18 +4685,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Projector", "loc": "3:0-52" @@ -4696,15 +4713,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "index": 36, "index2": 35, - "size": 5320, + "size": 5157, "cacheable": true, "built": true, "optional": false, @@ -4713,18 +4730,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Themed", "loc": "7:0-56" @@ -4735,8 +4752,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/mixins/Themed", - "loc": "4:0-69" + "userRequest": "@dojo/framework/widget-core/mixins/Themed", + "loc": "4:0-79" } ], "usedExports": [ @@ -4753,15 +4770,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "name": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "index": 13, "index2": 37, - "size": 9124, + "size": 9118, "cacheable": true, "built": true, "optional": false, @@ -4783,14 +4800,14 @@ "module": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "moduleName": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "type": "cjs require", - "userRequest": "@dojo/widget-core/registerCustomElement", - "loc": "4:28-78" + "userRequest": "@dojo/framework/widget-core/registerCustomElement", + "loc": "4:28-88" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../registerCustomElement", "loc": "1:0-66" @@ -4806,15 +4823,15 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/vdom.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "name": "./node_modules/@dojo/widget-core/vdom.mjs", + "id": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "name": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "index": 29, "index2": 25, - "size": 38814, + "size": 39966, "cacheable": true, "built": true, "optional": false, @@ -4823,27 +4840,27 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./vdom", "loc": "8:0-43" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../vdom", "loc": "6:0-32" @@ -4862,7 +4879,7 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import global from '@dojo/shim/global';\nimport { from as arrayFrom } from '@dojo/shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '@dojo/shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode.focus();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (propName === 'focus') {\n focusNode(propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const rendered = dnode.rendered || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\n oldIndex++;\n newIndex++;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let child = oldChildren[oldIndex];\n if (child) {\n let nextIndex = oldIndex + 1;\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n if (insertBefore.rendered) {\n insertBeforeChildren.push(...insertBefore.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\n insertBeforeChildren.push(oldChildren[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map" + "source": "import global from '../shim/global';\nimport { from as arrayFrom } from '../shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '../shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst nextSiblingMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode[propName]();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (nodeOperations.indexOf(propName) !== -1) {\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const item = instanceMap.get(dnode.instance);\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n oldIndex++;\n newIndex++;\n textUpdated =\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let childrenArray = oldChildren;\n let nextIndex = oldIndex + 1;\n let child = oldChildren[oldIndex];\n if (!child) {\n child = siblings[0];\n nextIndex = 1;\n childrenArray = siblings;\n }\n if (child) {\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n const item = instanceMap.get(insertBefore.instance);\n if (item && item.dnode.rendered) {\n insertBeforeChildren.push(...item.dnode.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\n break;\n }\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\n insertBeforeChildren.push(childrenArray[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const nextSiblings = children.slice(i + 1);\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n nextSiblingMap.set(instance, nextSiblings);\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n nextSiblingMap.set(instance, nextSiblings);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n const nextSiblings = nextSiblingMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map" }, { "id": "./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", @@ -4870,7 +4887,7 @@ "name": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "index": 1, "index2": 41, - "size": 282, + "size": 292, "cacheable": true, "built": true, "optional": false, @@ -4900,7 +4917,7 @@ "providedExports": null, "optimizationBailout": [], "depth": 1, - "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n" + "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n" }, { "id": "./node_modules/process/browser.js", @@ -4917,21 +4934,21 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "issuerId": "./node_modules/@dojo/has/has.mjs", - "issuerName": "./node_modules/@dojo/has/has.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "issuerId": "./node_modules/@dojo/framework/has/has.mjs", + "issuerName": "./node_modules/@dojo/framework/has/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "process", - "loc": "1:0-37" + "loc": "1:0-40" } ], "usedExports": true, @@ -4955,18 +4972,18 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -4981,19 +4998,19 @@ "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -5001,7 +5018,6 @@ ], "usedExports": [ "__decorate", - "__metadata", "__rest" ], "providedExports": [ @@ -5042,30 +5058,30 @@ "menu-item" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "issuerId": "./node_modules/@dojo/shim/global.mjs", - "issuerName": "./node_modules/@dojo/shim/global.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/global.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/global.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/global.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "module": "./node_modules/@dojo/shim/global.mjs", - "moduleName": "./node_modules/@dojo/shim/global.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "module": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/global.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" }, { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" } ], "usedExports": true, @@ -5080,7 +5096,7 @@ "name": "./src/menu-item/MenuItem.ts", "index": 2, "index2": 40, - "size": 1095, + "size": 1135, "cacheable": true, "built": true, "optional": false, @@ -5113,7 +5129,7 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { v } from '@dojo/widget-core/d';\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\nimport * as css from './menuItem.m.css';\nlet MenuItem = class MenuItem extends ThemedMixin(WidgetBase) {\n _onClick() {\n this.properties.onSelected && this.properties.onSelected(this.properties.data);\n }\n render() {\n const { title, selected } = this.properties;\n return v('li', { classes: this.theme(css.root) }, [\n v('span', {\n classes: this.theme([css.item, selected ? css.selected : null]),\n onclick: this._onClick\n }, [title])\n ]);\n }\n};\nMenuItem = tslib_1.__decorate([\n customElement({\n tag: 'demo-menu-item',\n attributes: ['title', 'selected'],\n events: ['onSelected'],\n properties: ['data', 'selected']\n }),\n theme(css)\n], MenuItem);\nexport { MenuItem };\nexport default MenuItem;\n" + "source": "import * as tslib_1 from \"tslib\";\nimport { v } from '@dojo/framework/widget-core/d';\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\nimport * as css from './menuItem.m.css';\nlet MenuItem = class MenuItem extends ThemedMixin(WidgetBase) {\n _onClick() {\n this.properties.onSelected && this.properties.onSelected(this.properties.data);\n }\n render() {\n const { title, selected } = this.properties;\n return v('li', { classes: this.theme(css.root) }, [\n v('span', {\n classes: this.theme([css.item, selected ? css.selected : null]),\n onclick: this._onClick\n }, [title])\n ]);\n }\n};\nMenuItem = tslib_1.__decorate([\n customElement({\n tag: 'demo-menu-item',\n attributes: ['title', 'selected'],\n events: ['onSelected'],\n properties: ['data', 'selected']\n }),\n theme(css)\n], MenuItem);\nexport { MenuItem };\nexport default MenuItem;\n" }, { "id": "./src/menu-item/menuItem.m.css", diff --git a/test-app/fixtures/unix/info/menu/report.html b/test-app/fixtures/unix/info/menu/report.html index af32108..40b3788 100644 --- a/test-app/fixtures/unix/info/menu/report.html +++ b/test-app/fixtures/unix/info/menu/report.html @@ -4,7 +4,7 @@ Webpack Bundle Analyzer diff --git a/test-app/fixtures/unix/info/menu/stats.json b/test-app/fixtures/unix/info/menu/stats.json index c93fcda..81dd3e4 100644 --- a/test-app/fixtures/unix/info/menu/stats.json +++ b/test-app/fixtures/unix/info/menu/stats.json @@ -2,8 +2,8 @@ "errors": [], "warnings": [], "version": "3.8.1", - "hash": "90c6db1ff77aa21b0220", - "time": 7931, + "hash": "01c4fe13e2f1c25e9421", + "time": 5188, "publicPath": "", "assetsByChunkName": { "menu": [ @@ -16,7 +16,7 @@ "assets": [ { "name": "menu-1.0.0.js", - "size": 54024, + "size": 55200, "chunks": [ "menu" ], @@ -38,7 +38,7 @@ }, { "name": "menu-1.0.0.js.map", - "size": 267936, + "size": 269366, "chunks": [ "menu" ], @@ -80,7 +80,7 @@ "initial": true, "entry": true, "extraAsync": false, - "size": 192245, + "size": 192447, "names": [ "menu" ], @@ -90,16 +90,16 @@ "menu-1.0.0.js.map", "menu-1.0.0.css.map" ], - "hash": "2e07bb677691d23bdd61", + "hash": "9eda2e227ab609e28ae5", "parents": [], "modules": [ { - "id": "./node_modules/@dojo/core/Destroyable.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "name": "./node_modules/@dojo/core/Destroyable.mjs", + "id": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "name": "./node_modules/@dojo/framework/core/Destroyable.mjs", "index": 25, "index2": 17, - "size": 1668, + "size": 1665, "cacheable": true, "built": true, "optional": false, @@ -108,18 +108,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "issuerId": "./node_modules/@dojo/core/Evented.mjs", - "issuerName": "./node_modules/@dojo/core/Evented.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "issuerId": "./node_modules/@dojo/framework/core/Evented.mjs", + "issuerName": "./node_modules/@dojo/framework/core/Evented.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", "userRequest": "./Destroyable", "loc": "2:0-44" @@ -134,15 +134,15 @@ ], "optimizationBailout": [], "depth": 6, - "source": "import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" + "source": "import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" }, { - "id": "./node_modules/@dojo/core/Evented.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "name": "./node_modules/@dojo/core/Evented.mjs", + "id": "./node_modules/@dojo/framework/core/Evented.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "name": "./node_modules/@dojo/framework/core/Evented.mjs", "index": 24, "index2": 18, - "size": 2149, + "size": 2151, "cacheable": true, "built": true, "optional": false, @@ -151,48 +151,48 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "issuerId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "issuerName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "2:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "2:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "4:0-45" + "userRequest": "../core/Evented", + "loc": "4:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Injector.mjs", - "module": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Injector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Injector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" } ], "usedExports": [ @@ -205,15 +205,15 @@ ], "optimizationBailout": [], "depth": 5, - "source": "import Map from '@dojo/shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n methods.forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map" + "source": "import Map from '../shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n [...methods].forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map" }, { - "id": "./node_modules/@dojo/core/lang.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "name": "./node_modules/@dojo/core/lang.mjs", + "id": "./node_modules/@dojo/framework/core/lang.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "name": "./node_modules/@dojo/framework/core/lang.mjs", "index": 26, "index2": 16, - "size": 6843, + "size": 6837, "cacheable": true, "built": true, "optional": false, @@ -222,27 +222,27 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/lang", + "userRequest": "../../core/lang", "loc": "2:0-41" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", "userRequest": "./lang", "loc": "1:0-47" @@ -267,12 +267,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" + "source": "import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" }, { - "id": "./node_modules/@dojo/has/has.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "name": "./node_modules/@dojo/has/has.mjs", + "id": "./node_modules/@dojo/framework/has/has.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "name": "./node_modules/@dojo/framework/has/has.mjs", "index": 7, "index2": 3, "size": 6305, @@ -284,29 +284,29 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "issuerId": "./node_modules/@dojo/shim/support/has.mjs", - "issuerName": "./node_modules/@dojo/shim/support/has.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/support/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "1:0-41" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "4:0-30" } ], @@ -328,9 +328,9 @@ "source": "function isFeatureTestThenable(value) {\n return value && value.then;\n}\n/**\n * A cache of results of feature tests\n */\nexport const testCache = {};\n/**\n * A cache of the un-resolved feature tests\n */\nexport const testFunctions = {};\n/**\n * A cache of unresolved thenables (probably promises)\n * @type {{}}\n */\nconst testThenables = {};\n/**\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\n */\nconst globalScope = (function () {\n /* istanbul ignore else */\n if (typeof window !== 'undefined') {\n // Browsers\n return window;\n }\n else if (typeof global !== 'undefined') {\n // Node\n return global;\n }\n else if (typeof self !== 'undefined') {\n // Web workers\n return self;\n }\n /* istanbul ignore next */\n return {};\n})();\n/* Grab the staticFeatures if there are available */\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\n/* Cleaning up the DojoHasEnviornment */\nif ('DojoHasEnvironment' in globalScope) {\n delete globalScope.DojoHasEnvironment;\n}\n/**\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\n * returns a map.\n *\n * @param value The value to guard for\n */\nfunction isStaticFeatureFunction(value) {\n return typeof value === 'function';\n}\n/**\n * The cache of asserted features that were available in the global scope when the\n * module loaded\n */\nconst staticCache = staticFeatures\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\n : {}; /* Providing an empty cache, if none was in the environment\n\n/**\n* AMD plugin function.\n*\n* Conditional loads modules based on a has feature test value.\n*\n* @param resourceId Gives the resolved module id to load.\n* @param require The loader require function with respect to the module that contained the plugin resource in its\n* dependency list.\n* @param load Callback to loader that consumes result of plugin demand.\n*/\nexport function load(resourceId, require, load, config) {\n resourceId ? require([resourceId], load) : load();\n}\n/**\n * AMD plugin function.\n *\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\n * value(s).\n *\n * @param resourceId The id of the module\n * @param normalize Resolves a relative module id into an absolute module id\n */\nexport function normalize(resourceId, normalize) {\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\n let i = 0;\n function get(skip) {\n const term = tokens[i++];\n if (term === ':') {\n // empty string module name, resolves to null\n return null;\n }\n else {\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\n if (tokens[i++] === '?') {\n if (!skip && has(term)) {\n // matched the feature, get the first value from the options\n return get();\n }\n else {\n // did not match, get the second value, passing over the first\n get(true);\n return get(skip);\n }\n }\n // a module\n return term;\n }\n }\n const id = get();\n return id && normalize(id);\n}\n/**\n * Check if a feature has already been registered\n *\n * @param feature the name of the feature\n */\nexport function exists(feature) {\n const normalizedFeature = feature.toLowerCase();\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\n}\n/**\n * Register a new test for a named feature.\n *\n * @example\n * has.add('dom-addeventlistener', !!document.addEventListener);\n *\n * @example\n * has.add('touch-events', function () {\n * return 'ontouchstart' in document\n * });\n *\n * @param feature the name of the feature\n * @param value the value reported of the feature, or a function that will be executed once on first test\n * @param overwrite if an existing value should be overwritten. Defaults to false.\n */\nexport function add(feature, value, overwrite = false) {\n const normalizedFeature = feature.toLowerCase();\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\n }\n if (typeof value === 'function') {\n testFunctions[normalizedFeature] = value;\n }\n else if (isFeatureTestThenable(value)) {\n testThenables[feature] = value.then((resolvedValue) => {\n testCache[feature] = resolvedValue;\n delete testThenables[feature];\n }, () => {\n delete testThenables[feature];\n });\n }\n else {\n testCache[normalizedFeature] = value;\n delete testFunctions[normalizedFeature];\n }\n}\n/**\n * Return the current value of a named feature.\n *\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\n */\nexport default function has(feature) {\n let result;\n const normalizedFeature = feature.toLowerCase();\n if (normalizedFeature in staticCache) {\n result = staticCache[normalizedFeature];\n }\n else if (testFunctions[normalizedFeature]) {\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\n delete testFunctions[normalizedFeature];\n }\n else if (normalizedFeature in testCache) {\n result = testCache[normalizedFeature];\n }\n else if (feature in testThenables) {\n return false;\n }\n else {\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\n }\n return result;\n}\n/*\n * Out of the box feature tests\n */\n/* Environments */\n/* Used as a value to provide a debug only code path */\nadd('debug', true);\n/* Detects if the environment is \"browser like\" */\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\n/* Detects if the environment appears to be NodeJS */\nadd('host-node', function () {\n if (typeof process === 'object' && process.versions && process.versions.node) {\n return process.versions.node;\n }\n});\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Map.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "name": "./node_modules/@dojo/shim/Map.mjs", + "id": "./node_modules/@dojo/framework/shim/Map.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "name": "./node_modules/@dojo/framework/shim/Map.mjs", "index": 15, "index2": 12, "size": 3331, @@ -342,57 +342,57 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-37" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" } ], "usedExports": [ @@ -408,9 +408,9 @@ "source": "import { isArrayLike, ShimIterator } from './iterator';\nimport global from './global';\nimport { is as objectIs } from './object';\nimport has from './support/has';\nimport './Symbol';\nexport let Map = global.Map;\nif (!true) {\n Map = (_a = class Map {\n constructor(iterable) {\n this._keys = [];\n this._values = [];\n this[Symbol.toStringTag] = 'Map';\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const value = iterable[i];\n this.set(value[0], value[1]);\n }\n }\n else {\n for (const value of iterable) {\n this.set(value[0], value[1]);\n }\n }\n }\n }\n /**\n * An alternative to Array.prototype.indexOf using Object.is\n * to check for equality. See http://mzl.la/1zuKO2V\n */\n _indexOfKey(keys, key) {\n for (let i = 0, length = keys.length; i < length; i++) {\n if (objectIs(keys[i], key)) {\n return i;\n }\n }\n return -1;\n }\n get size() {\n return this._keys.length;\n }\n clear() {\n this._keys.length = this._values.length = 0;\n }\n delete(key) {\n const index = this._indexOfKey(this._keys, key);\n if (index < 0) {\n return false;\n }\n this._keys.splice(index, 1);\n this._values.splice(index, 1);\n return true;\n }\n entries() {\n const values = this._keys.map((key, i) => {\n return [key, this._values[i]];\n });\n return new ShimIterator(values);\n }\n forEach(callback, context) {\n const keys = this._keys;\n const values = this._values;\n for (let i = 0, length = keys.length; i < length; i++) {\n callback.call(context, values[i], keys[i], this);\n }\n }\n get(key) {\n const index = this._indexOfKey(this._keys, key);\n return index < 0 ? undefined : this._values[index];\n }\n has(key) {\n return this._indexOfKey(this._keys, key) > -1;\n }\n keys() {\n return new ShimIterator(this._keys);\n }\n set(key, value) {\n let index = this._indexOfKey(this._keys, key);\n index = index < 0 ? this._keys.length : index;\n this._keys[index] = key;\n this._values[index] = value;\n return this;\n }\n values() {\n return new ShimIterator(this._values);\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n },\n _a[Symbol.species] = _a,\n _a);\n}\nexport default Map;\nvar _a;\n//# sourceMappingURL=Map.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Promise.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "name": "./node_modules/@dojo/shim/Promise.mjs", + "id": "./node_modules/@dojo/framework/shim/Promise.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "name": "./node_modules/@dojo/framework/shim/Promise.mjs", "index": 22, "index2": 15, "size": 8519, @@ -422,30 +422,30 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "issuerId": "./node_modules/@dojo/widget-core/Registry.mjs", - "issuerName": "./node_modules/@dojo/widget-core/Registry.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "1:0-41" + "userRequest": "../shim/Promise", + "loc": "1:0-38" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "2:0-41" + "userRequest": "../shim/Promise", + "loc": "2:0-38" } ], "usedExports": [ @@ -461,9 +461,9 @@ "source": "import global from './global';\nimport { queueMicroTask } from './support/queue';\nimport './Symbol';\nimport has from './support/has';\nexport let ShimPromise = global.Promise;\nexport const isThenable = function isThenable(value) {\n return value && typeof value.then === 'function';\n};\nif (!true) {\n global.Promise = ShimPromise = (_a = class Promise {\n /**\n * Creates a new Promise.\n *\n * @constructor\n *\n * @param executor\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\n * starting the asynchronous operation when it is invoked.\n *\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\n * successfully, or the `reject` function when the operation fails.\n */\n constructor(executor) {\n /**\n * The current state of this promise.\n */\n this.state = 1 /* Pending */;\n this[Symbol.toStringTag] = 'Promise';\n /**\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\n */\n let isChained = false;\n /**\n * Whether or not this promise is in a resolved state.\n */\n const isResolved = () => {\n return this.state !== 1 /* Pending */ || isChained;\n };\n /**\n * Callbacks that should be invoked once the asynchronous operation has completed.\n */\n let callbacks = [];\n /**\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\n * enqueues callbacks for execution on the next event loop turn.\n */\n let whenFinished = function (callback) {\n if (callbacks) {\n callbacks.push(callback);\n }\n };\n /**\n * Settles this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const settle = (newState, value) => {\n // A promise can only be settled once.\n if (this.state !== 1 /* Pending */) {\n return;\n }\n this.state = newState;\n this.resolvedValue = value;\n whenFinished = queueMicroTask;\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\n // wait an extra turn.\n if (callbacks && callbacks.length > 0) {\n queueMicroTask(function () {\n if (callbacks) {\n let count = callbacks.length;\n for (let i = 0; i < count; ++i) {\n callbacks[i].call(null);\n }\n callbacks = null;\n }\n });\n }\n };\n /**\n * Resolves this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const resolve = (newState, value) => {\n if (isResolved()) {\n return;\n }\n if (isThenable(value)) {\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\n isChained = true;\n }\n else {\n settle(newState, value);\n }\n };\n this.then = (onFulfilled, onRejected) => {\n return new Promise((resolve, reject) => {\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\n // event loop.\n whenFinished(() => {\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\n if (typeof callback === 'function') {\n try {\n resolve(callback(this.resolvedValue));\n }\n catch (error) {\n reject(error);\n }\n }\n else if (this.state === 2 /* Rejected */) {\n reject(this.resolvedValue);\n }\n else {\n resolve(this.resolvedValue);\n }\n });\n });\n };\n try {\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\n }\n catch (error) {\n settle(2 /* Rejected */, error);\n }\n }\n static all(iterable) {\n return new this(function (resolve, reject) {\n const values = [];\n let complete = 0;\n let total = 0;\n let populating = true;\n function fulfill(index, value) {\n values[index] = value;\n ++complete;\n finish();\n }\n function finish() {\n if (populating || complete < total) {\n return;\n }\n resolve(values);\n }\n function processItem(index, item) {\n ++total;\n if (isThenable(item)) {\n // If an item Promise rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(fulfill.bind(null, index), reject);\n }\n else {\n Promise.resolve(item).then(fulfill.bind(null, index));\n }\n }\n let i = 0;\n for (const value of iterable) {\n processItem(i, value);\n i++;\n }\n populating = false;\n finish();\n });\n }\n static race(iterable) {\n return new this(function (resolve, reject) {\n for (const item of iterable) {\n if (item instanceof Promise) {\n // If a Promise item rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(resolve, reject);\n }\n else {\n Promise.resolve(item).then(resolve);\n }\n }\n });\n }\n static reject(reason) {\n return new this(function (resolve, reject) {\n reject(reason);\n });\n }\n static resolve(value) {\n return new this(function (resolve) {\n resolve(value);\n });\n }\n catch(onRejected) {\n return this.then(undefined, onRejected);\n }\n },\n _a[Symbol.species] = ShimPromise,\n _a);\n}\nexport default ShimPromise;\nvar _a;\n//# sourceMappingURL=Promise.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Symbol.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "name": "./node_modules/@dojo/shim/Symbol.mjs", + "id": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "name": "./node_modules/@dojo/framework/shim/Symbol.mjs", "index": 5, "index2": 7, "size": 5929, @@ -475,81 +475,81 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/d.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/d.mjs", - "module": "./node_modules/@dojo/widget-core/d.mjs", - "moduleName": "./node_modules/@dojo/widget-core/d.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "1:0-39" + "userRequest": "../shim/Symbol", + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/d.mjs", + "module": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/d.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" + "userRequest": "../shim/Symbol", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "5:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "4:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "type": "harmony import", + "userRequest": "../shim/Symbol", + "loc": "3:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "1:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-18" @@ -568,9 +568,9 @@ "source": "import has from './support/has';\nimport global from './global';\nimport { getValueDescriptor } from './support/util';\nexport let Symbol = global.Symbol;\nif (!true) {\n /**\n * Throws if the value is not a symbol, used internally within the Shim\n * @param {any} value The value to check\n * @return {symbol} Returns the symbol or throws\n */\n const validateSymbol = function validateSymbol(value) {\n if (!isSymbol(value)) {\n throw new TypeError(value + ' is not a symbol');\n }\n return value;\n };\n const defineProperties = Object.defineProperties;\n const defineProperty = Object.defineProperty;\n const create = Object.create;\n const objPrototype = Object.prototype;\n const globalSymbols = {};\n const getSymbolName = (function () {\n const created = create(null);\n return function (desc) {\n let postfix = 0;\n let name;\n while (created[String(desc) + (postfix || '')]) {\n ++postfix;\n }\n desc += String(postfix || '');\n created[desc] = true;\n name = '@@' + desc;\n // FIXME: Temporary guard until the duplicate execution when testing can be\n // pinned down.\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\n defineProperty(objPrototype, name, {\n set: function (value) {\n defineProperty(this, name, getValueDescriptor(value));\n }\n });\n }\n return name;\n };\n })();\n const InternalSymbol = function Symbol(description) {\n if (this instanceof InternalSymbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n return Symbol(description);\n };\n Symbol = global.Symbol = function Symbol(description) {\n if (this instanceof Symbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n const sym = Object.create(InternalSymbol.prototype);\n description = description === undefined ? '' : String(description);\n return defineProperties(sym, {\n __description__: getValueDescriptor(description),\n __name__: getValueDescriptor(getSymbolName(description))\n });\n };\n /* Decorate the Symbol function with the appropriate properties */\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\n if (globalSymbols[key]) {\n return globalSymbols[key];\n }\n return (globalSymbols[key] = Symbol(String(key)));\n }));\n defineProperties(Symbol, {\n keyFor: getValueDescriptor(function (sym) {\n let key;\n validateSymbol(sym);\n for (key in globalSymbols) {\n if (globalSymbols[key] === sym) {\n return key;\n }\n }\n }),\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\n match: getValueDescriptor(Symbol.for('match'), false, false),\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\n search: getValueDescriptor(Symbol.for('search'), false, false),\n species: getValueDescriptor(Symbol.for('species'), false, false),\n split: getValueDescriptor(Symbol.for('split'), false, false),\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\n });\n /* Decorate the InternalSymbol object */\n defineProperties(InternalSymbol.prototype, {\n constructor: getValueDescriptor(Symbol),\n toString: getValueDescriptor(function () {\n return this.__name__;\n }, false, false)\n });\n /* Decorate the Symbol.prototype */\n defineProperties(Symbol.prototype, {\n toString: getValueDescriptor(function () {\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\n }),\n valueOf: getValueDescriptor(function () {\n return validateSymbol(this);\n })\n });\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\n return validateSymbol(this);\n }));\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\n}\n/**\n * A custom guard function that determines if an object is a symbol or not\n * @param {any} value The value to check to see if it is a symbol or not\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\n */\nexport function isSymbol(value) {\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\n}\n/**\n * Fill any missing well known symbols if the native Symbol is missing them\n */\n[\n 'hasInstance',\n 'isConcatSpreadable',\n 'iterator',\n 'species',\n 'replace',\n 'search',\n 'split',\n 'match',\n 'toPrimitive',\n 'toStringTag',\n 'unscopables',\n 'observable'\n].forEach((wellKnown) => {\n if (!Symbol[wellKnown]) {\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\n }\n});\nexport default Symbol;\n//# sourceMappingURL=Symbol.mjs.map" }, { - "id": "./node_modules/@dojo/shim/WeakMap.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "name": "./node_modules/@dojo/shim/WeakMap.mjs", + "id": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "name": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "index": 19, "index2": 13, "size": 3748, @@ -582,38 +582,38 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "2:0-41" + "userRequest": "../shim/WeakMap", + "loc": "2:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "5:0-41" + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", + "userRequest": "../../shim/WeakMap", "loc": "1:0-41" } ], @@ -629,9 +629,9 @@ "source": "import global from './global';\nimport { isArrayLike } from './iterator';\nimport has from './support/has';\nimport './Symbol';\nexport let WeakMap = global.WeakMap;\nif (!true) {\n const DELETED = {};\n const getUID = function getUID() {\n return Math.floor(Math.random() * 100000000);\n };\n const generateName = (function () {\n let startId = Math.floor(Date.now() % 100000000);\n return function generateName() {\n return '__wm' + getUID() + (startId++ + '__');\n };\n })();\n WeakMap = class WeakMap {\n constructor(iterable) {\n this[Symbol.toStringTag] = 'WeakMap';\n this._name = generateName();\n this._frozenEntries = [];\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const item = iterable[i];\n this.set(item[0], item[1]);\n }\n }\n else {\n for (const [key, value] of iterable) {\n this.set(key, value);\n }\n }\n }\n }\n _getFrozenEntryIndex(key) {\n for (let i = 0; i < this._frozenEntries.length; i++) {\n if (this._frozenEntries[i].key === key) {\n return i;\n }\n }\n return -1;\n }\n delete(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n entry.value = DELETED;\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n this._frozenEntries.splice(frozenIndex, 1);\n return true;\n }\n return false;\n }\n get(key) {\n if (key === undefined || key === null) {\n return undefined;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n return entry.value;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return this._frozenEntries[frozenIndex].value;\n }\n }\n has(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return true;\n }\n return false;\n }\n set(key, value) {\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\n throw new TypeError('Invalid value used as weak map key');\n }\n let entry = key[this._name];\n if (!entry || entry.key !== key) {\n entry = Object.create(null, {\n key: { value: key }\n });\n if (Object.isFrozen(key)) {\n this._frozenEntries.push(entry);\n }\n else {\n Object.defineProperty(key, this._name, {\n value: entry\n });\n }\n }\n entry.value = value;\n return this;\n }\n };\n}\nexport default WeakMap;\n//# sourceMappingURL=WeakMap.mjs.map" }, { - "id": "./node_modules/@dojo/shim/array.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "name": "./node_modules/@dojo/shim/array.mjs", + "id": "./node_modules/@dojo/framework/shim/array.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "name": "./node_modules/@dojo/framework/shim/array.mjs", "index": 30, "index2": 24, "size": 8928, @@ -643,30 +643,30 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "4:0-40" + "userRequest": "../shim/array", + "loc": "4:0-37" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "2:0-53" + "userRequest": "../shim/array", + "loc": "2:0-50" } ], "usedExports": [ @@ -686,9 +686,9 @@ "source": "import global from './global';\nimport { isArrayLike, isIterable } from './iterator';\nimport { MAX_SAFE_INTEGER } from './number';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\nexport let from;\n/**\n * Creates a new array from the function parameters.\n *\n * @param arguments Any number of arguments for the array\n * @return An array from the given arguments\n */\nexport let of;\n/* ES6 Array instance methods */\n/**\n * Copies data internally within an array or array-like object.\n *\n * @param target The target array-like object\n * @param offset The index to start copying values to; if negative, it counts backwards from length\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\n * @return The target\n */\nexport let copyWithin;\n/**\n * Fills elements of an array-like object with the specified value.\n *\n * @param target The target to fill\n * @param value The value to fill each element of the target with\n * @param start The first index to fill\n * @param end The (exclusive) index at which to stop filling\n * @return The filled target\n */\nexport let fill;\n/**\n * Finds and returns the first instance matching the callback or undefined if one is not found.\n *\n * @param target An array-like object\n * @param callback A function returning if the current value matches a criteria\n * @param thisArg The execution context for the find function\n * @return The first element matching the callback, or undefined if one does not exist\n */\nexport let find;\n/**\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\n * or -1 if no values satisfy it.\n *\n * @param target An array-like object\n * @param callback A function returning true if the current value satisfies its criteria\n * @param thisArg The execution context for the find function\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\n */\nexport let findIndex;\n/* ES7 Array instance methods */\n/**\n * Determines whether an array includes a given value\n *\n * @param target the target array-like object\n * @param searchElement the item to search for\n * @param fromIndex the starting index to search from\n * @return `true` if the array includes the element, otherwise `false`\n */\nexport let includes;\nif (true && true) {\n from = global.Array.from;\n of = global.Array.of;\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\n fill = wrapNative(global.Array.prototype.fill);\n find = wrapNative(global.Array.prototype.find);\n findIndex = wrapNative(global.Array.prototype.findIndex);\n}\nelse {\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n if (isNaN(length)) {\n return 0;\n }\n length = Number(length);\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n /**\n * From ES6 7.1.4 ToInteger()\n *\n * @param value A value to convert\n * @return An integer\n */\n const toInteger = function toInteger(value) {\n value = Number(value);\n if (isNaN(value)) {\n return 0;\n }\n if (value === 0 || !isFinite(value)) {\n return value;\n }\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\n };\n /**\n * Normalizes an offset against a given length, wrapping it if negative.\n *\n * @param value The original offset\n * @param length The total length to normalize against\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\n */\n const normalizeOffset = function normalizeOffset(value, length) {\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\n };\n from = function from(arrayLike, mapFunction, thisArg) {\n if (arrayLike == null) {\n throw new TypeError('from: requires an array-like object');\n }\n if (mapFunction && thisArg) {\n mapFunction = mapFunction.bind(thisArg);\n }\n /* tslint:disable-next-line:variable-name */\n const Constructor = this;\n const length = toLength(arrayLike.length);\n // Support extension\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\n return array;\n }\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\n // with the iteration on IE when using a NaN array length.\n if (isArrayLike(arrayLike)) {\n if (length === 0) {\n return [];\n }\n for (let i = 0; i < arrayLike.length; i++) {\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\n }\n }\n else {\n let i = 0;\n for (const value of arrayLike) {\n array[i] = mapFunction ? mapFunction(value, i) : value;\n i++;\n }\n }\n if (arrayLike.length !== undefined) {\n array.length = length;\n }\n return array;\n };\n of = function of(...items) {\n return Array.prototype.slice.call(items);\n };\n copyWithin = function copyWithin(target, offset, start, end) {\n if (target == null) {\n throw new TypeError('copyWithin: target must be an array-like object');\n }\n const length = toLength(target.length);\n offset = normalizeOffset(toInteger(offset), length);\n start = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n let count = Math.min(end - start, length - offset);\n let direction = 1;\n if (offset > start && offset < start + count) {\n direction = -1;\n start += count - 1;\n offset += count - 1;\n }\n while (count > 0) {\n if (start in target) {\n target[offset] = target[start];\n }\n else {\n delete target[offset];\n }\n offset += direction;\n start += direction;\n count--;\n }\n return target;\n };\n fill = function fill(target, value, start, end) {\n const length = toLength(target.length);\n let i = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n while (i < end) {\n target[i++] = value;\n }\n return target;\n };\n find = function find(target, callback, thisArg) {\n const index = findIndex(target, callback, thisArg);\n return index !== -1 ? target[index] : undefined;\n };\n findIndex = function findIndex(target, callback, thisArg) {\n const length = toLength(target.length);\n if (!callback) {\n throw new TypeError('find: second argument must be a function');\n }\n if (thisArg) {\n callback = callback.bind(thisArg);\n }\n for (let i = 0; i < length; i++) {\n if (callback(target[i], i, target)) {\n return i;\n }\n }\n return -1;\n };\n}\nif (true) {\n includes = wrapNative(global.Array.prototype.includes);\n}\nelse {\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n length = Number(length);\n if (isNaN(length)) {\n return 0;\n }\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n includes = function includes(target, searchElement, fromIndex = 0) {\n let len = toLength(target.length);\n for (let i = fromIndex; i < len; ++i) {\n const currentElement = target[i];\n if (searchElement === currentElement ||\n (searchElement !== searchElement && currentElement !== currentElement)) {\n return true;\n }\n }\n return false;\n };\n}\n//# sourceMappingURL=array.mjs.map" }, { - "id": "./node_modules/@dojo/shim/global.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "name": "./node_modules/@dojo/shim/global.mjs", + "id": "./node_modules/@dojo/framework/shim/global.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "name": "./node_modules/@dojo/framework/shim/global.mjs", "index": 10, "index2": 4, "size": 581, @@ -700,117 +700,117 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "6:0-39" + "userRequest": "../shim/global", + "loc": "6:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "1:0-39" + "userRequest": "./global", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./global", - "loc": "1:0-30" + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "./global", - "loc": "2:0-30" + "userRequest": "../shim/global", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/number.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/number.mjs", - "module": "./node_modules/@dojo/shim/number.mjs", - "moduleName": "./node_modules/@dojo/shim/number.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/number.mjs", + "module": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/number.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", "userRequest": "../global", "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "../global", "loc": "1:0-31" @@ -827,9 +827,9 @@ "source": "const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map" }, { - "id": "./node_modules/@dojo/shim/iterator.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "name": "./node_modules/@dojo/shim/iterator.mjs", + "id": "./node_modules/@dojo/framework/shim/iterator.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "name": "./node_modules/@dojo/framework/shim/iterator.mjs", "index": 16, "index2": 10, "size": 3158, @@ -841,36 +841,36 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-53" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "1:0-55" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-41" @@ -889,9 +889,9 @@ "source": "import './Symbol';\nimport { HIGH_SURROGATE_MAX, HIGH_SURROGATE_MIN } from './string';\nconst staticDone = { done: true, value: undefined };\n/**\n * A class that _shims_ an iterator interface on array like objects.\n */\nexport class ShimIterator {\n constructor(list) {\n this._nextIndex = -1;\n if (isIterable(list)) {\n this._nativeIterator = list[Symbol.iterator]();\n }\n else {\n this._list = list;\n }\n }\n /**\n * Return the next iteration result for the Iterator\n */\n next() {\n if (this._nativeIterator) {\n return this._nativeIterator.next();\n }\n if (!this._list) {\n return staticDone;\n }\n if (++this._nextIndex < this._list.length) {\n return {\n done: false,\n value: this._list[this._nextIndex]\n };\n }\n return staticDone;\n }\n [Symbol.iterator]() {\n return this;\n }\n}\n/**\n * A type guard for checking if something has an Iterable interface\n *\n * @param value The value to type guard against\n */\nexport function isIterable(value) {\n return value && typeof value[Symbol.iterator] === 'function';\n}\n/**\n * A type guard for checking if something is ArrayLike\n *\n * @param value The value to type guard against\n */\nexport function isArrayLike(value) {\n return value && typeof value.length === 'number';\n}\n/**\n * Returns the iterator for an object\n *\n * @param iterable The iterable object to return the iterator for\n */\nexport function get(iterable) {\n if (isIterable(iterable)) {\n return iterable[Symbol.iterator]();\n }\n else if (isArrayLike(iterable)) {\n return new ShimIterator(iterable);\n }\n}\n/**\n * Shims the functionality of `for ... of` blocks\n *\n * @param iterable The object the provides an interator interface\n * @param callback The callback which will be called for each item of the iterable\n * @param thisArg Optional scope to pass the callback\n */\nexport function forOf(iterable, callback, thisArg) {\n let broken = false;\n function doBreak() {\n broken = true;\n }\n /* We need to handle iteration of double byte strings properly */\n if (isArrayLike(iterable) && typeof iterable === 'string') {\n const l = iterable.length;\n for (let i = 0; i < l; ++i) {\n let char = iterable[i];\n if (i + 1 < l) {\n const code = char.charCodeAt(0);\n if (code >= HIGH_SURROGATE_MIN && code <= HIGH_SURROGATE_MAX) {\n char += iterable[++i];\n }\n }\n callback.call(thisArg, char, iterable, doBreak);\n if (broken) {\n return;\n }\n }\n }\n else {\n const iterator = get(iterable);\n if (iterator) {\n let result = iterator.next();\n while (!result.done) {\n callback.call(thisArg, result.value, iterable, doBreak);\n if (broken) {\n return;\n }\n result = iterator.next();\n }\n }\n }\n}\n//# sourceMappingURL=iterator.mjs.map" }, { - "id": "./node_modules/@dojo/shim/number.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/number.mjs", - "name": "./node_modules/@dojo/shim/number.mjs", + "id": "./node_modules/@dojo/framework/shim/number.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/number.mjs", + "name": "./node_modules/@dojo/framework/shim/number.mjs", "index": 31, "index2": 23, "size": 1724, @@ -903,18 +903,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./number", "loc": "3:0-44" @@ -935,9 +935,9 @@ "source": "import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map" }, { - "id": "./node_modules/@dojo/shim/object.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "name": "./node_modules/@dojo/shim/object.mjs", + "id": "./node_modules/@dojo/framework/shim/object.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "name": "./node_modules/@dojo/framework/shim/object.mjs", "index": 18, "index2": 11, "size": 4061, @@ -949,39 +949,39 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "issuerId": "./node_modules/@dojo/shim/Map.mjs", - "issuerName": "./node_modules/@dojo/shim/Map.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Map.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Map.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./object", "loc": "3:0-42" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "1:0-43" + "userRequest": "../shim/object", + "loc": "1:0-40" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "2:0-43" + "userRequest": "../shim/object", + "loc": "2:0-40" } ], "usedExports": [ @@ -1003,9 +1003,9 @@ "source": "import global from './global';\nimport has from './support/has';\nimport { isSymbol } from './Symbol';\nexport let assign;\n/**\n * Gets the own property descriptor of the specified object.\n * An own property descriptor is one that is defined directly on the object and is not\n * inherited from the object's prototype.\n * @param o Object that contains the property.\n * @param p Name of the property.\n */\nexport let getOwnPropertyDescriptor;\n/**\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\n * @param o Object that contains the own properties.\n */\nexport let getOwnPropertyNames;\n/**\n * Returns an array of all symbol properties found directly on object o.\n * @param o Object to retrieve the symbols from.\n */\nexport let getOwnPropertySymbols;\n/**\n * Returns true if the values are the same value, false otherwise.\n * @param value1 The first value.\n * @param value2 The second value.\n */\nexport let is;\n/**\n * Returns the names of the enumerable properties and methods of an object.\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n */\nexport let keys;\n/* ES7 Object static methods */\nexport let getOwnPropertyDescriptors;\nexport let entries;\nexport let values;\nif (true) {\n const globalObject = global.Object;\n assign = globalObject.assign;\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\n is = globalObject.is;\n keys = globalObject.keys;\n}\nelse {\n keys = function symbolAwareKeys(o) {\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n assign = function assign(target, ...sources) {\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const to = Object(target);\n sources.forEach((nextSource) => {\n if (nextSource) {\n // Skip over if undefined or null\n keys(nextSource).forEach((nextKey) => {\n to[nextKey] = nextSource[nextKey];\n });\n }\n });\n return to;\n };\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\n if (isSymbol(prop)) {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n else {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n };\n getOwnPropertyNames = function getOwnPropertyNames(o) {\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n return Object.getOwnPropertyNames(o)\n .filter((key) => Boolean(key.match(/^@@.+/)))\n .map((key) => Symbol.for(key.substring(2)));\n };\n is = function is(value1, value2) {\n if (value1 === value2) {\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\n }\n return value1 !== value1 && value2 !== value2; // NaN\n };\n}\nif (true) {\n const globalObject = global.Object;\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\n entries = globalObject.entries;\n values = globalObject.values;\n}\nelse {\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\n return getOwnPropertyNames(o).reduce((previous, key) => {\n previous[key] = getOwnPropertyDescriptor(o, key);\n return previous;\n }, {});\n };\n entries = function entries(o) {\n return keys(o).map((key) => [key, o[key]]);\n };\n values = function values(o) {\n return keys(o).map((key) => o[key]);\n };\n}\n//# sourceMappingURL=object.mjs.map" }, { - "id": "./node_modules/@dojo/shim/string.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "name": "./node_modules/@dojo/shim/string.mjs", + "id": "./node_modules/@dojo/framework/shim/string.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "name": "./node_modules/@dojo/framework/shim/string.mjs", "index": 17, "index2": 9, "size": 12418, @@ -1017,18 +1017,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "issuerId": "./node_modules/@dojo/shim/iterator.mjs", - "issuerName": "./node_modules/@dojo/shim/iterator.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/iterator.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./string", "loc": "2:0-66" @@ -1059,9 +1059,9 @@ "source": "import global from './global';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\n/**\n * The minimum location of high surrogates\n */\nexport const HIGH_SURROGATE_MIN = 0xd800;\n/**\n * The maximum location of high surrogates\n */\nexport const HIGH_SURROGATE_MAX = 0xdbff;\n/**\n * The minimum location of low surrogates\n */\nexport const LOW_SURROGATE_MIN = 0xdc00;\n/**\n * The maximum location of low surrogates\n */\nexport const LOW_SURROGATE_MAX = 0xdfff;\n/* ES6 static methods */\n/**\n * Return the String value whose elements are, in order, the elements in the List elements.\n * If length is 0, the empty string is returned.\n * @param codePoints The code points to generate the string\n */\nexport let fromCodePoint;\n/**\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\n * as such the first argument will be a well formed template call site object and the rest\n * parameter will contain the substitution values.\n * @param template A well-formed template string call site representation.\n * @param substitutions A set of substitution values.\n */\nexport let raw;\n/* ES6 instance methods */\n/**\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\n * value of the UTF-16 encoded code point starting at the string element at position pos in\n * the String resulting from converting this object to a String.\n * If there is no element at that position, the result is undefined.\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\n */\nexport let codePointAt;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * endPosition – length(this). Otherwise returns false.\n */\nexport let endsWith;\n/**\n * Returns true if searchString appears as a substring of the result of converting this\n * object to a String, at one or more positions that are\n * greater than or equal to position; otherwise, returns false.\n * @param target The target string\n * @param searchString search string\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\n */\nexport let includes;\n/**\n * Returns the String value result of normalizing the string into the normalization form\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\n * @param target The target string\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\n * is \"NFC\"\n */\nexport let normalize;\n/**\n * Returns a String value that is made from count copies appended together. If count is 0,\n * T is the empty String is returned.\n * @param count number of copies to append\n */\nexport let repeat;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * position. Otherwise returns false.\n */\nexport let startsWith;\n/* ES7 instance methods */\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the end (right) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padEnd;\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the start (left) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padStart;\nif (true && true) {\n fromCodePoint = global.String.fromCodePoint;\n raw = global.String.raw;\n codePointAt = wrapNative(global.String.prototype.codePointAt);\n endsWith = wrapNative(global.String.prototype.endsWith);\n includes = wrapNative(global.String.prototype.includes);\n normalize = wrapNative(global.String.prototype.normalize);\n repeat = wrapNative(global.String.prototype.repeat);\n startsWith = wrapNative(global.String.prototype.startsWith);\n}\nelse {\n /**\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\n * Used by startsWith, includes, and endsWith.\n *\n * @return Normalized position.\n */\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\n if (text == null) {\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\n }\n const length = text.length;\n position = position !== position ? (isEnd ? length : 0) : position;\n return [text, String(search), Math.min(Math.max(position, 0), length)];\n };\n fromCodePoint = function fromCodePoint(...codePoints) {\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\n const length = arguments.length;\n if (!length) {\n return '';\n }\n const fromCharCode = String.fromCharCode;\n const MAX_SIZE = 0x4000;\n let codeUnits = [];\n let index = -1;\n let result = '';\n while (++index < length) {\n let codePoint = Number(arguments[index]);\n // Code points must be finite integers within the valid range\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\n if (!isValid) {\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint);\n }\n else {\n // Astral code point; split in surrogate halves\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += fromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n raw = function raw(callSite, ...substitutions) {\n let rawStrings = callSite.raw;\n let result = '';\n let numSubstitutions = substitutions.length;\n if (callSite == null || callSite.raw == null) {\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\n }\n for (let i = 0, length = rawStrings.length; i < length; i++) {\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\n }\n return result;\n };\n codePointAt = function codePointAt(text, position = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\n if (text == null) {\n throw new TypeError('string.codePointAt requries a valid string.');\n }\n const length = text.length;\n if (position !== position) {\n position = 0;\n }\n if (position < 0 || position >= length) {\n return undefined;\n }\n // Get the first code unit\n const first = text.charCodeAt(position);\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n const second = text.charCodeAt(position + 1);\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\n }\n }\n return first;\n };\n endsWith = function endsWith(text, search, endPosition) {\n if (endPosition == null) {\n endPosition = text.length;\n }\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\n const start = endPosition - search.length;\n if (start < 0) {\n return false;\n }\n return text.slice(start, endPosition) === search;\n };\n includes = function includes(text, search, position = 0) {\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\n return text.indexOf(search, position) !== -1;\n };\n repeat = function repeat(text, count = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\n if (text == null) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (count !== count) {\n count = 0;\n }\n if (count < 0 || count === Infinity) {\n throw new RangeError('string.repeat requires a non-negative finite count.');\n }\n let result = '';\n while (count) {\n if (count % 2) {\n result += text;\n }\n if (count > 1) {\n text += text;\n }\n count >>= 1;\n }\n return result;\n };\n startsWith = function startsWith(text, search, position = 0) {\n search = String(search);\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\n const end = position + search.length;\n if (end > text.length) {\n return false;\n }\n return text.slice(position, end) === search;\n };\n}\nif (true) {\n padEnd = wrapNative(global.String.prototype.padEnd);\n padStart = wrapNative(global.String.prototype.padStart);\n}\nelse {\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padEnd requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText +=\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length);\n }\n return strText;\n };\n padStart = function padStart(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padStart requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText =\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length) +\n strText;\n }\n return strText;\n };\n}\n//# sourceMappingURL=string.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/has.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "name": "./node_modules/@dojo/shim/support/has.mjs", + "id": "./node_modules/@dojo/framework/shim/support/has.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "name": "./node_modules/@dojo/framework/shim/support/has.mjs", "index": 6, "index2": 5, "size": 6151, @@ -1073,81 +1073,81 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "3:0-32" + "loc": "1:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "1:0-32" + "loc": "3:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "./has", "loc": "2:0-24" @@ -1165,12 +1165,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import has, { add } from '@dojo/has/has';\nimport global from '../global';\nexport default has;\nexport * from '@dojo/has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map" + "source": "import has, { add } from '../../has/has';\nimport global from '../global';\nexport default has;\nexport * from '../../has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/queue.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "name": "./node_modules/@dojo/shim/support/queue.mjs", + "id": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "name": "./node_modules/@dojo/framework/shim/support/queue.mjs", "index": 23, "index2": 14, "size": 6196, @@ -1182,18 +1182,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "issuerId": "./node_modules/@dojo/shim/Promise.mjs", - "issuerName": "./node_modules/@dojo/shim/Promise.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Promise.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/queue", "loc": "2:0-49" @@ -1210,9 +1210,9 @@ "source": "import global from '../global';\nimport has from './has';\nfunction executeTask(item) {\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n}\nfunction getQueueHandle(item, destructor) {\n return {\n destroy: function () {\n this.destroy = function () { };\n item.isActive = false;\n item.callback = null;\n if (destructor) {\n destructor();\n }\n }\n };\n}\nlet checkMicroTaskQueue;\nlet microTasks;\n/**\n * Schedules a callback to the macrotask queue.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueTask = (function () {\n let destructor;\n let enqueue;\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\n if (true) {\n const queue = [];\n global.addEventListener('message', function (event) {\n // Confirm that the event was triggered by the current window and by this particular implementation.\n if (event.source === global && event.data === 'dojo-queue-message') {\n event.stopPropagation();\n if (queue.length) {\n executeTask(queue.shift());\n }\n }\n });\n enqueue = function (item) {\n queue.push(item);\n global.postMessage('dojo-queue-message', '*');\n };\n }\n else if (false) {\n destructor = global.clearImmediate;\n enqueue = function (item) {\n return setImmediate(executeTask.bind(null, item));\n };\n }\n else {\n destructor = global.clearTimeout;\n enqueue = function (item) {\n return setTimeout(executeTask.bind(null, item), 0);\n };\n }\n function queueTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const id = enqueue(item);\n return getQueueHandle(item, destructor &&\n function () {\n destructor(id);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueTask(callback);\n };\n})();\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\nif (!true) {\n let isMicroTaskQueued = false;\n microTasks = [];\n checkMicroTaskQueue = function () {\n if (!isMicroTaskQueued) {\n isMicroTaskQueued = true;\n queueTask(function () {\n isMicroTaskQueued = false;\n if (microTasks.length) {\n let item;\n while ((item = microTasks.shift())) {\n executeTask(item);\n }\n }\n });\n }\n };\n}\n/**\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\n *\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueAnimationTask = (function () {\n if (!true) {\n return queueTask;\n }\n function queueAnimationTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\n return getQueueHandle(item, function () {\n cancelAnimationFrame(rafId);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueAnimationTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueAnimationTask(callback);\n };\n})();\n/**\n * Schedules a callback to the microtask queue.\n *\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\n * registered with `queueTask` or `queueAnimationTask`.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport let queueMicroTask = (function () {\n let enqueue;\n if (false) {\n enqueue = function (item) {\n global.process.nextTick(executeTask.bind(null, item));\n };\n }\n else if (true) {\n enqueue = function (item) {\n global.Promise.resolve(item).then(executeTask);\n };\n }\n else if (true) {\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const node = document.createElement('div');\n const queue = [];\n const observer = new HostMutationObserver(function () {\n while (queue.length > 0) {\n const item = queue.shift();\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n }\n });\n observer.observe(node, { attributes: true });\n enqueue = function (item) {\n queue.push(item);\n node.setAttribute('queueStatus', '1');\n };\n }\n else {\n enqueue = function (item) {\n checkMicroTaskQueue();\n microTasks.push(item);\n };\n }\n return function (callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n enqueue(item);\n return getQueueHandle(item);\n };\n})();\n//# sourceMappingURL=queue.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/util.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/util.mjs", - "name": "./node_modules/@dojo/shim/support/util.mjs", + "id": "./node_modules/@dojo/framework/shim/support/util.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/util.mjs", + "name": "./node_modules/@dojo/framework/shim/support/util.mjs", "index": 11, "index2": 6, "size": 853, @@ -1224,36 +1224,36 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "5:0-44" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-52" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-44" @@ -1272,12 +1272,12 @@ "source": "/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Injector.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Injector.mjs", - "name": "./node_modules/@dojo/widget-core/Injector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Injector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "index": 37, "index2": 31, - "size": 496, + "size": 493, "cacheable": true, "built": true, "optional": false, @@ -1286,18 +1286,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../Injector", "loc": "2:0-41" @@ -1312,15 +1312,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" + "source": "import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "name": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "index": 28, "index2": 22, - "size": 1096, + "size": 1090, "cacheable": true, "built": true, "optional": false, @@ -1329,18 +1329,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./NodeHandler", "loc": "7:0-40" @@ -1356,15 +1356,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nimport Map from '@dojo/shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map" + "source": "import { Evented } from '../core/Evented';\nimport Map from '../shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Registry.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "name": "./node_modules/@dojo/widget-core/Registry.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "index": 21, "index2": 19, - "size": 3702, + "size": 3690, "cacheable": true, "built": true, "optional": false, @@ -1373,54 +1373,54 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/diff.mjs", - "module": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleName": "./node_modules/@dojo/widget-core/diff.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/diff.mjs", + "module": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/diff.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "1:0-46" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "3:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../Registry", "loc": "2:0-35" @@ -1441,15 +1441,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import Promise from '@dojo/shim/Promise';\nimport Map from '@dojo/shim/Map';\nimport Symbol from '@dojo/shim/Symbol';\nimport { Evented } from '@dojo/core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map" + "source": "import Promise from '../shim/Promise';\nimport Map from '../shim/Map';\nimport Symbol from '../shim/Symbol';\nimport { Evented } from '../core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "name": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "index": 27, "index2": 21, - "size": 2862, + "size": 2856, "cacheable": true, "built": true, "optional": false, @@ -1458,18 +1458,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./RegistryHandler", "loc": "6:0-48" @@ -1484,15 +1484,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Map } from '@dojo/shim/Map';\nimport { Evented } from '@dojo/core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map" + "source": "import { Map } from '../shim/Map';\nimport { Evented } from '../core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "name": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "id": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "name": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "index": 14, "index2": 26, - "size": 14386, + "size": 13720, "cacheable": true, "built": true, "optional": false, @@ -1501,18 +1501,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./WidgetBase", "loc": "2:0-50" @@ -1523,8 +1523,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/WidgetBase", - "loc": "5:0-58" + "userRequest": "@dojo/framework/widget-core/WidgetBase", + "loc": "5:0-68" } ], "usedExports": [ @@ -1538,12 +1538,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" + "source": "import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "name": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", + "id": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "name": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", "index": 33, "index2": 27, "size": 2288, @@ -1555,18 +1555,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "../animations/cssTransitions", "loc": "3:0-58" @@ -1583,12 +1583,12 @@ "source": "let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/d.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/d.mjs", - "name": "./node_modules/@dojo/widget-core/d.mjs", + "id": "./node_modules/@dojo/framework/widget-core/d.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/d.mjs", + "name": "./node_modules/@dojo/framework/widget-core/d.mjs", "index": 4, "index2": 8, - "size": 3270, + "size": 3267, "cacheable": true, "built": true, "optional": false, @@ -1597,54 +1597,54 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./d", "loc": "5:0-29" }, { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./src/menu/Menu.ts", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--3-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/umd-compat-loader/index.js??ref--3-1!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/ts-loader/index.js??ref--3-2!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=ts&instanceName=0_menu!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts", + "module": "./src/menu/Menu.ts", + "moduleName": "./src/menu/Menu.ts", + "type": "harmony import", + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./d", "loc": "4:0-24" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../d", "loc": "5:0-27" }, { - "moduleId": "./src/menu/Menu.ts", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--3-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/umd-compat-loader/index.js??ref--3-1!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/ts-loader/index.js??ref--3-2!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=ts&instanceName=0_menu!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts", - "module": "./src/menu/Menu.ts", - "moduleName": "./src/menu/Menu.ts", - "type": "harmony import", - "userRequest": "@dojo/widget-core/d", - "loc": "2:0-40" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./d", "loc": "3:0-65" @@ -1675,12 +1675,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" + "source": "import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "index": 34, "index2": 29, "size": 311, @@ -1692,18 +1692,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../decorators/afterRender", "loc": "4:0-58" @@ -1721,9 +1721,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "index": 41, "index2": 36, "size": 365, @@ -1735,18 +1735,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./decorators/alwaysRender", "loc": "8:0-57" @@ -1764,9 +1764,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "index": 39, "index2": 32, "size": 331, @@ -1778,27 +1778,27 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "2:0-54" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "3:0-54" @@ -1816,9 +1816,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "index": 12, "index2": 38, "size": 728, @@ -1843,8 +1843,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/decorators/customElement", - "loc": "3:0-75" + "userRequest": "@dojo/framework/widget-core/decorators/customElement", + "loc": "3:0-85" } ], "usedExports": [ @@ -1886,12 +1886,12 @@ "depth": 0 }, { - "id": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "index": 40, "index2": 34, - "size": 973, + "size": 1014, "cacheable": true, "built": true, "optional": false, @@ -1900,18 +1900,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/diffProperty", "loc": "5:0-60" @@ -1926,12 +1926,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" + "source": "import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", "index": 35, "index2": 28, "size": 512, @@ -1943,63 +1943,63 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/handleDecorator", "loc": "4:0-66" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "2:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" @@ -2017,9 +2017,9 @@ "source": "/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "index": 38, "index2": 33, "size": 1532, @@ -2031,18 +2031,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/inject", "loc": "3:0-48" @@ -2057,12 +2057,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" + "source": "import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/diff.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/diff.mjs", - "name": "./node_modules/@dojo/widget-core/diff.mjs", + "id": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/diff.mjs", + "name": "./node_modules/@dojo/framework/widget-core/diff.mjs", "index": 20, "index2": 20, "size": 1930, @@ -2074,30 +2074,39 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./diff", "loc": "5:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../diff", "loc": "6:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "type": "harmony import", + "userRequest": "./../diff", + "loc": "2:0-33" } ], "usedExports": [ @@ -2116,12 +2125,12 @@ "source": "import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "index": 32, "index2": 30, - "size": 5852, + "size": 5683, "cacheable": true, "built": true, "optional": false, @@ -2130,18 +2139,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Projector", "loc": "3:0-52" @@ -2158,15 +2167,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "index": 36, "index2": 35, - "size": 5320, + "size": 5157, "cacheable": true, "built": true, "optional": false, @@ -2175,18 +2184,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Themed", "loc": "7:0-56" @@ -2197,8 +2206,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/mixins/Themed", - "loc": "4:0-69" + "userRequest": "@dojo/framework/widget-core/mixins/Themed", + "loc": "4:0-79" } ], "usedExports": [ @@ -2215,15 +2224,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "name": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "index": 13, "index2": 37, - "size": 9124, + "size": 9118, "cacheable": true, "built": true, "optional": false, @@ -2245,14 +2254,14 @@ "module": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "moduleName": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "type": "cjs require", - "userRequest": "@dojo/widget-core/registerCustomElement", - "loc": "4:28-78" + "userRequest": "@dojo/framework/widget-core/registerCustomElement", + "loc": "4:28-88" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../registerCustomElement", "loc": "1:0-66" @@ -2268,15 +2277,15 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/vdom.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "name": "./node_modules/@dojo/widget-core/vdom.mjs", + "id": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "name": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "index": 29, "index2": 25, - "size": 38814, + "size": 39966, "cacheable": true, "built": true, "optional": false, @@ -2285,27 +2294,27 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./vdom", "loc": "8:0-43" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../vdom", "loc": "6:0-32" @@ -2324,7 +2333,7 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import global from '@dojo/shim/global';\nimport { from as arrayFrom } from '@dojo/shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '@dojo/shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode.focus();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (propName === 'focus') {\n focusNode(propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const rendered = dnode.rendered || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\n oldIndex++;\n newIndex++;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let child = oldChildren[oldIndex];\n if (child) {\n let nextIndex = oldIndex + 1;\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n if (insertBefore.rendered) {\n insertBeforeChildren.push(...insertBefore.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\n insertBeforeChildren.push(oldChildren[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map" + "source": "import global from '../shim/global';\nimport { from as arrayFrom } from '../shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '../shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst nextSiblingMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode[propName]();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (nodeOperations.indexOf(propName) !== -1) {\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const item = instanceMap.get(dnode.instance);\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n oldIndex++;\n newIndex++;\n textUpdated =\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let childrenArray = oldChildren;\n let nextIndex = oldIndex + 1;\n let child = oldChildren[oldIndex];\n if (!child) {\n child = siblings[0];\n nextIndex = 1;\n childrenArray = siblings;\n }\n if (child) {\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n const item = instanceMap.get(insertBefore.instance);\n if (item && item.dnode.rendered) {\n insertBeforeChildren.push(...item.dnode.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\n break;\n }\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\n insertBeforeChildren.push(childrenArray[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const nextSiblings = children.slice(i + 1);\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n nextSiblingMap.set(instance, nextSiblings);\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n nextSiblingMap.set(instance, nextSiblings);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n const nextSiblings = nextSiblingMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map" }, { "id": "./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", @@ -2332,7 +2341,7 @@ "name": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "index": 1, "index2": 41, - "size": 273, + "size": 283, "cacheable": true, "built": true, "optional": false, @@ -2362,7 +2371,7 @@ "providedExports": null, "optimizationBailout": [], "depth": 1, - "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n" + "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n" }, { "id": "./node_modules/process/browser.js", @@ -2379,21 +2388,21 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "issuerId": "./node_modules/@dojo/has/has.mjs", - "issuerName": "./node_modules/@dojo/has/has.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "issuerId": "./node_modules/@dojo/framework/has/has.mjs", + "issuerName": "./node_modules/@dojo/framework/has/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "process", - "loc": "1:0-37" + "loc": "1:0-40" } ], "usedExports": true, @@ -2417,18 +2426,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -2443,19 +2452,19 @@ "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -2463,7 +2472,6 @@ ], "usedExports": [ "__decorate", - "__metadata", "__rest" ], "providedExports": [ @@ -2504,30 +2512,30 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "issuerId": "./node_modules/@dojo/shim/global.mjs", - "issuerName": "./node_modules/@dojo/shim/global.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/global.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/global.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/global.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "module": "./node_modules/@dojo/shim/global.mjs", - "moduleName": "./node_modules/@dojo/shim/global.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "module": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/global.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" }, { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" } ], "usedExports": true, @@ -2542,7 +2550,7 @@ "name": "./src/menu/Menu.ts", "index": 2, "index2": 40, - "size": 1419, + "size": 1459, "cacheable": true, "built": true, "optional": false, @@ -2575,7 +2583,7 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { v } from '@dojo/widget-core/d';\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\nimport * as css from './menu.m.css';\nlet Menu = class Menu extends ThemedMixin(WidgetBase) {\n _onSelected(id, data) {\n this._selectedId = id;\n this.properties.onSelected(data);\n this.invalidate();\n }\n render() {\n const items = this.children.map((child, index) => {\n if (child) {\n const properties = {\n onSelected: (data) => {\n this._onSelected(index, data);\n }\n };\n if (this._selectedId !== undefined) {\n properties.selected = index === this._selectedId;\n }\n child.properties = Object.assign({}, child.properties, properties);\n }\n return child;\n });\n return v('nav', { classes: this.theme(css.root) }, [\n v('ol', {\n classes: this.theme(css.menuContainer)\n }, items)\n ]);\n }\n};\nMenu = tslib_1.__decorate([\n customElement({\n tag: 'demo-menu',\n events: ['onSelected']\n }),\n theme(css)\n], Menu);\nexport { Menu };\nexport default Menu;\n" + "source": "import * as tslib_1 from \"tslib\";\nimport { v } from '@dojo/framework/widget-core/d';\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\nimport * as css from './menu.m.css';\nlet Menu = class Menu extends ThemedMixin(WidgetBase) {\n _onSelected(id, data) {\n this._selectedId = id;\n this.properties.onSelected(data);\n this.invalidate();\n }\n render() {\n const items = this.children.map((child, index) => {\n if (child) {\n const properties = {\n onSelected: (data) => {\n this._onSelected(index, data);\n }\n };\n if (this._selectedId !== undefined) {\n properties.selected = index === this._selectedId;\n }\n child.properties = Object.assign({}, child.properties, properties);\n }\n return child;\n });\n return v('nav', { classes: this.theme(css.root) }, [\n v('ol', {\n classes: this.theme(css.menuContainer)\n }, items)\n ]);\n }\n};\nMenu = tslib_1.__decorate([\n customElement({\n tag: 'demo-menu',\n events: ['onSelected']\n }),\n theme(css)\n], Menu);\nexport { Menu };\nexport default Menu;\n" }, { "id": "./src/menu/menu.m.css", @@ -2632,12 +2640,12 @@ ], "modules": [ { - "id": "./node_modules/@dojo/core/Destroyable.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "name": "./node_modules/@dojo/core/Destroyable.mjs", + "id": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "name": "./node_modules/@dojo/framework/core/Destroyable.mjs", "index": 25, "index2": 17, - "size": 1668, + "size": 1665, "cacheable": true, "built": true, "optional": false, @@ -2646,18 +2654,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "issuerId": "./node_modules/@dojo/core/Evented.mjs", - "issuerName": "./node_modules/@dojo/core/Evented.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "issuerId": "./node_modules/@dojo/framework/core/Evented.mjs", + "issuerName": "./node_modules/@dojo/framework/core/Evented.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", "userRequest": "./Destroyable", "loc": "2:0-44" @@ -2672,15 +2680,15 @@ ], "optimizationBailout": [], "depth": 6, - "source": "import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" + "source": "import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" }, { - "id": "./node_modules/@dojo/core/Evented.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "name": "./node_modules/@dojo/core/Evented.mjs", + "id": "./node_modules/@dojo/framework/core/Evented.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "name": "./node_modules/@dojo/framework/core/Evented.mjs", "index": 24, "index2": 18, - "size": 2149, + "size": 2151, "cacheable": true, "built": true, "optional": false, @@ -2689,48 +2697,48 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "issuerId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "issuerName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "2:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "2:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "4:0-45" + "userRequest": "../core/Evented", + "loc": "4:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Injector.mjs", - "module": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Injector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Injector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" } ], "usedExports": [ @@ -2743,15 +2751,15 @@ ], "optimizationBailout": [], "depth": 5, - "source": "import Map from '@dojo/shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n methods.forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map" + "source": "import Map from '../shim/Map';\nimport { Destroyable } from './Destroyable';\n/**\n * Map of computed regular expressions, keyed by string\n */\nconst regexMap = new Map();\n/**\n * Determines is the event type glob has been matched\n *\n * @returns boolean that indicates if the glob is matched\n */\nexport function isGlobMatch(globString, targetString) {\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\n let regex;\n if (regexMap.has(globString)) {\n regex = regexMap.get(globString);\n }\n else {\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\n regexMap.set(globString, regex);\n }\n return regex.test(targetString);\n }\n else {\n return globString === targetString;\n }\n}\n/**\n * Event Class\n */\nexport class Evented extends Destroyable {\n constructor() {\n super(...arguments);\n /**\n * map of listeners keyed by event type\n */\n this.listenersMap = new Map();\n }\n emit(event) {\n this.listenersMap.forEach((methods, type) => {\n if (isGlobMatch(type, event.type)) {\n [...methods].forEach((method) => {\n method.call(this, event);\n });\n }\n });\n }\n on(type, listener) {\n if (Array.isArray(listener)) {\n const handles = listener.map((listener) => this._addListener(type, listener));\n return {\n destroy() {\n handles.forEach((handle) => handle.destroy());\n }\n };\n }\n return this._addListener(type, listener);\n }\n _addListener(type, listener) {\n const listeners = this.listenersMap.get(type) || [];\n listeners.push(listener);\n this.listenersMap.set(type, listeners);\n return {\n destroy: () => {\n const listeners = this.listenersMap.get(type) || [];\n listeners.splice(listeners.indexOf(listener), 1);\n }\n };\n }\n}\nexport default Evented;\n//# sourceMappingURL=Evented.mjs.map" }, { - "id": "./node_modules/@dojo/core/lang.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "name": "./node_modules/@dojo/core/lang.mjs", + "id": "./node_modules/@dojo/framework/core/lang.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "name": "./node_modules/@dojo/framework/core/lang.mjs", "index": 26, "index2": 16, - "size": 6843, + "size": 6837, "cacheable": true, "built": true, "optional": false, @@ -2760,27 +2768,27 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/lang", + "userRequest": "../../core/lang", "loc": "2:0-41" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", "userRequest": "./lang", "loc": "1:0-47" @@ -2805,12 +2813,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" + "source": "import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" }, { - "id": "./node_modules/@dojo/has/has.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "name": "./node_modules/@dojo/has/has.mjs", + "id": "./node_modules/@dojo/framework/has/has.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "name": "./node_modules/@dojo/framework/has/has.mjs", "index": 7, "index2": 3, "size": 6305, @@ -2822,29 +2830,29 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "issuerId": "./node_modules/@dojo/shim/support/has.mjs", - "issuerName": "./node_modules/@dojo/shim/support/has.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/support/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "1:0-41" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "4:0-30" } ], @@ -2866,9 +2874,9 @@ "source": "function isFeatureTestThenable(value) {\n return value && value.then;\n}\n/**\n * A cache of results of feature tests\n */\nexport const testCache = {};\n/**\n * A cache of the un-resolved feature tests\n */\nexport const testFunctions = {};\n/**\n * A cache of unresolved thenables (probably promises)\n * @type {{}}\n */\nconst testThenables = {};\n/**\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\n */\nconst globalScope = (function () {\n /* istanbul ignore else */\n if (typeof window !== 'undefined') {\n // Browsers\n return window;\n }\n else if (typeof global !== 'undefined') {\n // Node\n return global;\n }\n else if (typeof self !== 'undefined') {\n // Web workers\n return self;\n }\n /* istanbul ignore next */\n return {};\n})();\n/* Grab the staticFeatures if there are available */\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\n/* Cleaning up the DojoHasEnviornment */\nif ('DojoHasEnvironment' in globalScope) {\n delete globalScope.DojoHasEnvironment;\n}\n/**\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\n * returns a map.\n *\n * @param value The value to guard for\n */\nfunction isStaticFeatureFunction(value) {\n return typeof value === 'function';\n}\n/**\n * The cache of asserted features that were available in the global scope when the\n * module loaded\n */\nconst staticCache = staticFeatures\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\n : {}; /* Providing an empty cache, if none was in the environment\n\n/**\n* AMD plugin function.\n*\n* Conditional loads modules based on a has feature test value.\n*\n* @param resourceId Gives the resolved module id to load.\n* @param require The loader require function with respect to the module that contained the plugin resource in its\n* dependency list.\n* @param load Callback to loader that consumes result of plugin demand.\n*/\nexport function load(resourceId, require, load, config) {\n resourceId ? require([resourceId], load) : load();\n}\n/**\n * AMD plugin function.\n *\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\n * value(s).\n *\n * @param resourceId The id of the module\n * @param normalize Resolves a relative module id into an absolute module id\n */\nexport function normalize(resourceId, normalize) {\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\n let i = 0;\n function get(skip) {\n const term = tokens[i++];\n if (term === ':') {\n // empty string module name, resolves to null\n return null;\n }\n else {\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\n if (tokens[i++] === '?') {\n if (!skip && has(term)) {\n // matched the feature, get the first value from the options\n return get();\n }\n else {\n // did not match, get the second value, passing over the first\n get(true);\n return get(skip);\n }\n }\n // a module\n return term;\n }\n }\n const id = get();\n return id && normalize(id);\n}\n/**\n * Check if a feature has already been registered\n *\n * @param feature the name of the feature\n */\nexport function exists(feature) {\n const normalizedFeature = feature.toLowerCase();\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\n}\n/**\n * Register a new test for a named feature.\n *\n * @example\n * has.add('dom-addeventlistener', !!document.addEventListener);\n *\n * @example\n * has.add('touch-events', function () {\n * return 'ontouchstart' in document\n * });\n *\n * @param feature the name of the feature\n * @param value the value reported of the feature, or a function that will be executed once on first test\n * @param overwrite if an existing value should be overwritten. Defaults to false.\n */\nexport function add(feature, value, overwrite = false) {\n const normalizedFeature = feature.toLowerCase();\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\n }\n if (typeof value === 'function') {\n testFunctions[normalizedFeature] = value;\n }\n else if (isFeatureTestThenable(value)) {\n testThenables[feature] = value.then((resolvedValue) => {\n testCache[feature] = resolvedValue;\n delete testThenables[feature];\n }, () => {\n delete testThenables[feature];\n });\n }\n else {\n testCache[normalizedFeature] = value;\n delete testFunctions[normalizedFeature];\n }\n}\n/**\n * Return the current value of a named feature.\n *\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\n */\nexport default function has(feature) {\n let result;\n const normalizedFeature = feature.toLowerCase();\n if (normalizedFeature in staticCache) {\n result = staticCache[normalizedFeature];\n }\n else if (testFunctions[normalizedFeature]) {\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\n delete testFunctions[normalizedFeature];\n }\n else if (normalizedFeature in testCache) {\n result = testCache[normalizedFeature];\n }\n else if (feature in testThenables) {\n return false;\n }\n else {\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\n }\n return result;\n}\n/*\n * Out of the box feature tests\n */\n/* Environments */\n/* Used as a value to provide a debug only code path */\nadd('debug', true);\n/* Detects if the environment is \"browser like\" */\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\n/* Detects if the environment appears to be NodeJS */\nadd('host-node', function () {\n if (typeof process === 'object' && process.versions && process.versions.node) {\n return process.versions.node;\n }\n});\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Map.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "name": "./node_modules/@dojo/shim/Map.mjs", + "id": "./node_modules/@dojo/framework/shim/Map.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "name": "./node_modules/@dojo/framework/shim/Map.mjs", "index": 15, "index2": 12, "size": 3331, @@ -2880,57 +2888,57 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-37" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" } ], "usedExports": [ @@ -2946,9 +2954,9 @@ "source": "import { isArrayLike, ShimIterator } from './iterator';\nimport global from './global';\nimport { is as objectIs } from './object';\nimport has from './support/has';\nimport './Symbol';\nexport let Map = global.Map;\nif (!true) {\n Map = (_a = class Map {\n constructor(iterable) {\n this._keys = [];\n this._values = [];\n this[Symbol.toStringTag] = 'Map';\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const value = iterable[i];\n this.set(value[0], value[1]);\n }\n }\n else {\n for (const value of iterable) {\n this.set(value[0], value[1]);\n }\n }\n }\n }\n /**\n * An alternative to Array.prototype.indexOf using Object.is\n * to check for equality. See http://mzl.la/1zuKO2V\n */\n _indexOfKey(keys, key) {\n for (let i = 0, length = keys.length; i < length; i++) {\n if (objectIs(keys[i], key)) {\n return i;\n }\n }\n return -1;\n }\n get size() {\n return this._keys.length;\n }\n clear() {\n this._keys.length = this._values.length = 0;\n }\n delete(key) {\n const index = this._indexOfKey(this._keys, key);\n if (index < 0) {\n return false;\n }\n this._keys.splice(index, 1);\n this._values.splice(index, 1);\n return true;\n }\n entries() {\n const values = this._keys.map((key, i) => {\n return [key, this._values[i]];\n });\n return new ShimIterator(values);\n }\n forEach(callback, context) {\n const keys = this._keys;\n const values = this._values;\n for (let i = 0, length = keys.length; i < length; i++) {\n callback.call(context, values[i], keys[i], this);\n }\n }\n get(key) {\n const index = this._indexOfKey(this._keys, key);\n return index < 0 ? undefined : this._values[index];\n }\n has(key) {\n return this._indexOfKey(this._keys, key) > -1;\n }\n keys() {\n return new ShimIterator(this._keys);\n }\n set(key, value) {\n let index = this._indexOfKey(this._keys, key);\n index = index < 0 ? this._keys.length : index;\n this._keys[index] = key;\n this._values[index] = value;\n return this;\n }\n values() {\n return new ShimIterator(this._values);\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n },\n _a[Symbol.species] = _a,\n _a);\n}\nexport default Map;\nvar _a;\n//# sourceMappingURL=Map.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Promise.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "name": "./node_modules/@dojo/shim/Promise.mjs", + "id": "./node_modules/@dojo/framework/shim/Promise.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "name": "./node_modules/@dojo/framework/shim/Promise.mjs", "index": 22, "index2": 15, "size": 8519, @@ -2960,30 +2968,30 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "issuerId": "./node_modules/@dojo/widget-core/Registry.mjs", - "issuerName": "./node_modules/@dojo/widget-core/Registry.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "1:0-41" + "userRequest": "../shim/Promise", + "loc": "1:0-38" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "2:0-41" + "userRequest": "../shim/Promise", + "loc": "2:0-38" } ], "usedExports": [ @@ -2999,9 +3007,9 @@ "source": "import global from './global';\nimport { queueMicroTask } from './support/queue';\nimport './Symbol';\nimport has from './support/has';\nexport let ShimPromise = global.Promise;\nexport const isThenable = function isThenable(value) {\n return value && typeof value.then === 'function';\n};\nif (!true) {\n global.Promise = ShimPromise = (_a = class Promise {\n /**\n * Creates a new Promise.\n *\n * @constructor\n *\n * @param executor\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\n * starting the asynchronous operation when it is invoked.\n *\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\n * successfully, or the `reject` function when the operation fails.\n */\n constructor(executor) {\n /**\n * The current state of this promise.\n */\n this.state = 1 /* Pending */;\n this[Symbol.toStringTag] = 'Promise';\n /**\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\n */\n let isChained = false;\n /**\n * Whether or not this promise is in a resolved state.\n */\n const isResolved = () => {\n return this.state !== 1 /* Pending */ || isChained;\n };\n /**\n * Callbacks that should be invoked once the asynchronous operation has completed.\n */\n let callbacks = [];\n /**\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\n * enqueues callbacks for execution on the next event loop turn.\n */\n let whenFinished = function (callback) {\n if (callbacks) {\n callbacks.push(callback);\n }\n };\n /**\n * Settles this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const settle = (newState, value) => {\n // A promise can only be settled once.\n if (this.state !== 1 /* Pending */) {\n return;\n }\n this.state = newState;\n this.resolvedValue = value;\n whenFinished = queueMicroTask;\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\n // wait an extra turn.\n if (callbacks && callbacks.length > 0) {\n queueMicroTask(function () {\n if (callbacks) {\n let count = callbacks.length;\n for (let i = 0; i < count; ++i) {\n callbacks[i].call(null);\n }\n callbacks = null;\n }\n });\n }\n };\n /**\n * Resolves this promise.\n *\n * @param newState The resolved state for this promise.\n * @param {T|any} value The resolved value for this promise.\n */\n const resolve = (newState, value) => {\n if (isResolved()) {\n return;\n }\n if (isThenable(value)) {\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\n isChained = true;\n }\n else {\n settle(newState, value);\n }\n };\n this.then = (onFulfilled, onRejected) => {\n return new Promise((resolve, reject) => {\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\n // event loop.\n whenFinished(() => {\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\n if (typeof callback === 'function') {\n try {\n resolve(callback(this.resolvedValue));\n }\n catch (error) {\n reject(error);\n }\n }\n else if (this.state === 2 /* Rejected */) {\n reject(this.resolvedValue);\n }\n else {\n resolve(this.resolvedValue);\n }\n });\n });\n };\n try {\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\n }\n catch (error) {\n settle(2 /* Rejected */, error);\n }\n }\n static all(iterable) {\n return new this(function (resolve, reject) {\n const values = [];\n let complete = 0;\n let total = 0;\n let populating = true;\n function fulfill(index, value) {\n values[index] = value;\n ++complete;\n finish();\n }\n function finish() {\n if (populating || complete < total) {\n return;\n }\n resolve(values);\n }\n function processItem(index, item) {\n ++total;\n if (isThenable(item)) {\n // If an item Promise rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(fulfill.bind(null, index), reject);\n }\n else {\n Promise.resolve(item).then(fulfill.bind(null, index));\n }\n }\n let i = 0;\n for (const value of iterable) {\n processItem(i, value);\n i++;\n }\n populating = false;\n finish();\n });\n }\n static race(iterable) {\n return new this(function (resolve, reject) {\n for (const item of iterable) {\n if (item instanceof Promise) {\n // If a Promise item rejects, this Promise is immediately rejected with the item\n // Promise's rejection error.\n item.then(resolve, reject);\n }\n else {\n Promise.resolve(item).then(resolve);\n }\n }\n });\n }\n static reject(reason) {\n return new this(function (resolve, reject) {\n reject(reason);\n });\n }\n static resolve(value) {\n return new this(function (resolve) {\n resolve(value);\n });\n }\n catch(onRejected) {\n return this.then(undefined, onRejected);\n }\n },\n _a[Symbol.species] = ShimPromise,\n _a);\n}\nexport default ShimPromise;\nvar _a;\n//# sourceMappingURL=Promise.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Symbol.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "name": "./node_modules/@dojo/shim/Symbol.mjs", + "id": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "name": "./node_modules/@dojo/framework/shim/Symbol.mjs", "index": 5, "index2": 7, "size": 5929, @@ -3013,81 +3021,81 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/d.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/d.mjs", - "module": "./node_modules/@dojo/widget-core/d.mjs", - "moduleName": "./node_modules/@dojo/widget-core/d.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "1:0-39" + "userRequest": "../shim/Symbol", + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/d.mjs", + "module": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/d.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" + "userRequest": "../shim/Symbol", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "5:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "4:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "type": "harmony import", + "userRequest": "../shim/Symbol", + "loc": "3:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "1:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-18" @@ -3106,9 +3114,9 @@ "source": "import has from './support/has';\nimport global from './global';\nimport { getValueDescriptor } from './support/util';\nexport let Symbol = global.Symbol;\nif (!true) {\n /**\n * Throws if the value is not a symbol, used internally within the Shim\n * @param {any} value The value to check\n * @return {symbol} Returns the symbol or throws\n */\n const validateSymbol = function validateSymbol(value) {\n if (!isSymbol(value)) {\n throw new TypeError(value + ' is not a symbol');\n }\n return value;\n };\n const defineProperties = Object.defineProperties;\n const defineProperty = Object.defineProperty;\n const create = Object.create;\n const objPrototype = Object.prototype;\n const globalSymbols = {};\n const getSymbolName = (function () {\n const created = create(null);\n return function (desc) {\n let postfix = 0;\n let name;\n while (created[String(desc) + (postfix || '')]) {\n ++postfix;\n }\n desc += String(postfix || '');\n created[desc] = true;\n name = '@@' + desc;\n // FIXME: Temporary guard until the duplicate execution when testing can be\n // pinned down.\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\n defineProperty(objPrototype, name, {\n set: function (value) {\n defineProperty(this, name, getValueDescriptor(value));\n }\n });\n }\n return name;\n };\n })();\n const InternalSymbol = function Symbol(description) {\n if (this instanceof InternalSymbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n return Symbol(description);\n };\n Symbol = global.Symbol = function Symbol(description) {\n if (this instanceof Symbol) {\n throw new TypeError('TypeError: Symbol is not a constructor');\n }\n const sym = Object.create(InternalSymbol.prototype);\n description = description === undefined ? '' : String(description);\n return defineProperties(sym, {\n __description__: getValueDescriptor(description),\n __name__: getValueDescriptor(getSymbolName(description))\n });\n };\n /* Decorate the Symbol function with the appropriate properties */\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\n if (globalSymbols[key]) {\n return globalSymbols[key];\n }\n return (globalSymbols[key] = Symbol(String(key)));\n }));\n defineProperties(Symbol, {\n keyFor: getValueDescriptor(function (sym) {\n let key;\n validateSymbol(sym);\n for (key in globalSymbols) {\n if (globalSymbols[key] === sym) {\n return key;\n }\n }\n }),\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\n match: getValueDescriptor(Symbol.for('match'), false, false),\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\n search: getValueDescriptor(Symbol.for('search'), false, false),\n species: getValueDescriptor(Symbol.for('species'), false, false),\n split: getValueDescriptor(Symbol.for('split'), false, false),\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\n });\n /* Decorate the InternalSymbol object */\n defineProperties(InternalSymbol.prototype, {\n constructor: getValueDescriptor(Symbol),\n toString: getValueDescriptor(function () {\n return this.__name__;\n }, false, false)\n });\n /* Decorate the Symbol.prototype */\n defineProperties(Symbol.prototype, {\n toString: getValueDescriptor(function () {\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\n }),\n valueOf: getValueDescriptor(function () {\n return validateSymbol(this);\n })\n });\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\n return validateSymbol(this);\n }));\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\n}\n/**\n * A custom guard function that determines if an object is a symbol or not\n * @param {any} value The value to check to see if it is a symbol or not\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\n */\nexport function isSymbol(value) {\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\n}\n/**\n * Fill any missing well known symbols if the native Symbol is missing them\n */\n[\n 'hasInstance',\n 'isConcatSpreadable',\n 'iterator',\n 'species',\n 'replace',\n 'search',\n 'split',\n 'match',\n 'toPrimitive',\n 'toStringTag',\n 'unscopables',\n 'observable'\n].forEach((wellKnown) => {\n if (!Symbol[wellKnown]) {\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\n }\n});\nexport default Symbol;\n//# sourceMappingURL=Symbol.mjs.map" }, { - "id": "./node_modules/@dojo/shim/WeakMap.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "name": "./node_modules/@dojo/shim/WeakMap.mjs", + "id": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "name": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "index": 19, "index2": 13, "size": 3748, @@ -3120,38 +3128,38 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "2:0-41" + "userRequest": "../shim/WeakMap", + "loc": "2:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "5:0-41" + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", + "userRequest": "../../shim/WeakMap", "loc": "1:0-41" } ], @@ -3167,9 +3175,9 @@ "source": "import global from './global';\nimport { isArrayLike } from './iterator';\nimport has from './support/has';\nimport './Symbol';\nexport let WeakMap = global.WeakMap;\nif (!true) {\n const DELETED = {};\n const getUID = function getUID() {\n return Math.floor(Math.random() * 100000000);\n };\n const generateName = (function () {\n let startId = Math.floor(Date.now() % 100000000);\n return function generateName() {\n return '__wm' + getUID() + (startId++ + '__');\n };\n })();\n WeakMap = class WeakMap {\n constructor(iterable) {\n this[Symbol.toStringTag] = 'WeakMap';\n this._name = generateName();\n this._frozenEntries = [];\n if (iterable) {\n if (isArrayLike(iterable)) {\n for (let i = 0; i < iterable.length; i++) {\n const item = iterable[i];\n this.set(item[0], item[1]);\n }\n }\n else {\n for (const [key, value] of iterable) {\n this.set(key, value);\n }\n }\n }\n }\n _getFrozenEntryIndex(key) {\n for (let i = 0; i < this._frozenEntries.length; i++) {\n if (this._frozenEntries[i].key === key) {\n return i;\n }\n }\n return -1;\n }\n delete(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n entry.value = DELETED;\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n this._frozenEntries.splice(frozenIndex, 1);\n return true;\n }\n return false;\n }\n get(key) {\n if (key === undefined || key === null) {\n return undefined;\n }\n const entry = key[this._name];\n if (entry && entry.key === key && entry.value !== DELETED) {\n return entry.value;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return this._frozenEntries[frozenIndex].value;\n }\n }\n has(key) {\n if (key === undefined || key === null) {\n return false;\n }\n const entry = key[this._name];\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\n return true;\n }\n const frozenIndex = this._getFrozenEntryIndex(key);\n if (frozenIndex >= 0) {\n return true;\n }\n return false;\n }\n set(key, value) {\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\n throw new TypeError('Invalid value used as weak map key');\n }\n let entry = key[this._name];\n if (!entry || entry.key !== key) {\n entry = Object.create(null, {\n key: { value: key }\n });\n if (Object.isFrozen(key)) {\n this._frozenEntries.push(entry);\n }\n else {\n Object.defineProperty(key, this._name, {\n value: entry\n });\n }\n }\n entry.value = value;\n return this;\n }\n };\n}\nexport default WeakMap;\n//# sourceMappingURL=WeakMap.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "index": 34, "index2": 29, "size": 311, @@ -3181,18 +3189,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../decorators/afterRender", "loc": "4:0-58" @@ -3237,9 +3245,9 @@ "depth": 0 }, { - "id": "./node_modules/@dojo/shim/array.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "name": "./node_modules/@dojo/shim/array.mjs", + "id": "./node_modules/@dojo/framework/shim/array.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "name": "./node_modules/@dojo/framework/shim/array.mjs", "index": 30, "index2": 24, "size": 8928, @@ -3251,30 +3259,30 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "4:0-40" + "userRequest": "../shim/array", + "loc": "4:0-37" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "2:0-53" + "userRequest": "../shim/array", + "loc": "2:0-50" } ], "usedExports": [ @@ -3294,9 +3302,9 @@ "source": "import global from './global';\nimport { isArrayLike, isIterable } from './iterator';\nimport { MAX_SAFE_INTEGER } from './number';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\nexport let from;\n/**\n * Creates a new array from the function parameters.\n *\n * @param arguments Any number of arguments for the array\n * @return An array from the given arguments\n */\nexport let of;\n/* ES6 Array instance methods */\n/**\n * Copies data internally within an array or array-like object.\n *\n * @param target The target array-like object\n * @param offset The index to start copying values to; if negative, it counts backwards from length\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\n * @return The target\n */\nexport let copyWithin;\n/**\n * Fills elements of an array-like object with the specified value.\n *\n * @param target The target to fill\n * @param value The value to fill each element of the target with\n * @param start The first index to fill\n * @param end The (exclusive) index at which to stop filling\n * @return The filled target\n */\nexport let fill;\n/**\n * Finds and returns the first instance matching the callback or undefined if one is not found.\n *\n * @param target An array-like object\n * @param callback A function returning if the current value matches a criteria\n * @param thisArg The execution context for the find function\n * @return The first element matching the callback, or undefined if one does not exist\n */\nexport let find;\n/**\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\n * or -1 if no values satisfy it.\n *\n * @param target An array-like object\n * @param callback A function returning true if the current value satisfies its criteria\n * @param thisArg The execution context for the find function\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\n */\nexport let findIndex;\n/* ES7 Array instance methods */\n/**\n * Determines whether an array includes a given value\n *\n * @param target the target array-like object\n * @param searchElement the item to search for\n * @param fromIndex the starting index to search from\n * @return `true` if the array includes the element, otherwise `false`\n */\nexport let includes;\nif (true && true) {\n from = global.Array.from;\n of = global.Array.of;\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\n fill = wrapNative(global.Array.prototype.fill);\n find = wrapNative(global.Array.prototype.find);\n findIndex = wrapNative(global.Array.prototype.findIndex);\n}\nelse {\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n if (isNaN(length)) {\n return 0;\n }\n length = Number(length);\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n /**\n * From ES6 7.1.4 ToInteger()\n *\n * @param value A value to convert\n * @return An integer\n */\n const toInteger = function toInteger(value) {\n value = Number(value);\n if (isNaN(value)) {\n return 0;\n }\n if (value === 0 || !isFinite(value)) {\n return value;\n }\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\n };\n /**\n * Normalizes an offset against a given length, wrapping it if negative.\n *\n * @param value The original offset\n * @param length The total length to normalize against\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\n */\n const normalizeOffset = function normalizeOffset(value, length) {\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\n };\n from = function from(arrayLike, mapFunction, thisArg) {\n if (arrayLike == null) {\n throw new TypeError('from: requires an array-like object');\n }\n if (mapFunction && thisArg) {\n mapFunction = mapFunction.bind(thisArg);\n }\n /* tslint:disable-next-line:variable-name */\n const Constructor = this;\n const length = toLength(arrayLike.length);\n // Support extension\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\n return array;\n }\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\n // with the iteration on IE when using a NaN array length.\n if (isArrayLike(arrayLike)) {\n if (length === 0) {\n return [];\n }\n for (let i = 0; i < arrayLike.length; i++) {\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\n }\n }\n else {\n let i = 0;\n for (const value of arrayLike) {\n array[i] = mapFunction ? mapFunction(value, i) : value;\n i++;\n }\n }\n if (arrayLike.length !== undefined) {\n array.length = length;\n }\n return array;\n };\n of = function of(...items) {\n return Array.prototype.slice.call(items);\n };\n copyWithin = function copyWithin(target, offset, start, end) {\n if (target == null) {\n throw new TypeError('copyWithin: target must be an array-like object');\n }\n const length = toLength(target.length);\n offset = normalizeOffset(toInteger(offset), length);\n start = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n let count = Math.min(end - start, length - offset);\n let direction = 1;\n if (offset > start && offset < start + count) {\n direction = -1;\n start += count - 1;\n offset += count - 1;\n }\n while (count > 0) {\n if (start in target) {\n target[offset] = target[start];\n }\n else {\n delete target[offset];\n }\n offset += direction;\n start += direction;\n count--;\n }\n return target;\n };\n fill = function fill(target, value, start, end) {\n const length = toLength(target.length);\n let i = normalizeOffset(toInteger(start), length);\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\n while (i < end) {\n target[i++] = value;\n }\n return target;\n };\n find = function find(target, callback, thisArg) {\n const index = findIndex(target, callback, thisArg);\n return index !== -1 ? target[index] : undefined;\n };\n findIndex = function findIndex(target, callback, thisArg) {\n const length = toLength(target.length);\n if (!callback) {\n throw new TypeError('find: second argument must be a function');\n }\n if (thisArg) {\n callback = callback.bind(thisArg);\n }\n for (let i = 0; i < length; i++) {\n if (callback(target[i], i, target)) {\n return i;\n }\n }\n return -1;\n };\n}\nif (true) {\n includes = wrapNative(global.Array.prototype.includes);\n}\nelse {\n /**\n * Ensures a non-negative, non-infinite, safe integer.\n *\n * @param length The number to validate\n * @return A proper length\n */\n const toLength = function toLength(length) {\n length = Number(length);\n if (isNaN(length)) {\n return 0;\n }\n if (isFinite(length)) {\n length = Math.floor(length);\n }\n // Ensure a non-negative, real, safe integer\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\n };\n includes = function includes(target, searchElement, fromIndex = 0) {\n let len = toLength(target.length);\n for (let i = fromIndex; i < len; ++i) {\n const currentElement = target[i];\n if (searchElement === currentElement ||\n (searchElement !== searchElement && currentElement !== currentElement)) {\n return true;\n }\n }\n return false;\n };\n}\n//# sourceMappingURL=array.mjs.map" }, { - "id": "./node_modules/@dojo/shim/global.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "name": "./node_modules/@dojo/shim/global.mjs", + "id": "./node_modules/@dojo/framework/shim/global.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "name": "./node_modules/@dojo/framework/shim/global.mjs", "index": 10, "index2": 4, "size": 581, @@ -3308,117 +3316,117 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "6:0-39" + "userRequest": "../shim/global", + "loc": "6:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "1:0-39" + "userRequest": "./global", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./global", - "loc": "1:0-30" + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "./global", - "loc": "2:0-30" + "userRequest": "../shim/global", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/number.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/number.mjs", - "module": "./node_modules/@dojo/shim/number.mjs", - "moduleName": "./node_modules/@dojo/shim/number.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/number.mjs", + "module": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/number.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", "userRequest": "../global", "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "../global", "loc": "1:0-31" @@ -3435,9 +3443,9 @@ "source": "const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map" }, { - "id": "./node_modules/@dojo/shim/iterator.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "name": "./node_modules/@dojo/shim/iterator.mjs", + "id": "./node_modules/@dojo/framework/shim/iterator.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "name": "./node_modules/@dojo/framework/shim/iterator.mjs", "index": 16, "index2": 10, "size": 3158, @@ -3449,36 +3457,36 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-53" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "1:0-55" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-41" @@ -3497,9 +3505,9 @@ "source": "import './Symbol';\nimport { HIGH_SURROGATE_MAX, HIGH_SURROGATE_MIN } from './string';\nconst staticDone = { done: true, value: undefined };\n/**\n * A class that _shims_ an iterator interface on array like objects.\n */\nexport class ShimIterator {\n constructor(list) {\n this._nextIndex = -1;\n if (isIterable(list)) {\n this._nativeIterator = list[Symbol.iterator]();\n }\n else {\n this._list = list;\n }\n }\n /**\n * Return the next iteration result for the Iterator\n */\n next() {\n if (this._nativeIterator) {\n return this._nativeIterator.next();\n }\n if (!this._list) {\n return staticDone;\n }\n if (++this._nextIndex < this._list.length) {\n return {\n done: false,\n value: this._list[this._nextIndex]\n };\n }\n return staticDone;\n }\n [Symbol.iterator]() {\n return this;\n }\n}\n/**\n * A type guard for checking if something has an Iterable interface\n *\n * @param value The value to type guard against\n */\nexport function isIterable(value) {\n return value && typeof value[Symbol.iterator] === 'function';\n}\n/**\n * A type guard for checking if something is ArrayLike\n *\n * @param value The value to type guard against\n */\nexport function isArrayLike(value) {\n return value && typeof value.length === 'number';\n}\n/**\n * Returns the iterator for an object\n *\n * @param iterable The iterable object to return the iterator for\n */\nexport function get(iterable) {\n if (isIterable(iterable)) {\n return iterable[Symbol.iterator]();\n }\n else if (isArrayLike(iterable)) {\n return new ShimIterator(iterable);\n }\n}\n/**\n * Shims the functionality of `for ... of` blocks\n *\n * @param iterable The object the provides an interator interface\n * @param callback The callback which will be called for each item of the iterable\n * @param thisArg Optional scope to pass the callback\n */\nexport function forOf(iterable, callback, thisArg) {\n let broken = false;\n function doBreak() {\n broken = true;\n }\n /* We need to handle iteration of double byte strings properly */\n if (isArrayLike(iterable) && typeof iterable === 'string') {\n const l = iterable.length;\n for (let i = 0; i < l; ++i) {\n let char = iterable[i];\n if (i + 1 < l) {\n const code = char.charCodeAt(0);\n if (code >= HIGH_SURROGATE_MIN && code <= HIGH_SURROGATE_MAX) {\n char += iterable[++i];\n }\n }\n callback.call(thisArg, char, iterable, doBreak);\n if (broken) {\n return;\n }\n }\n }\n else {\n const iterator = get(iterable);\n if (iterator) {\n let result = iterator.next();\n while (!result.done) {\n callback.call(thisArg, result.value, iterable, doBreak);\n if (broken) {\n return;\n }\n result = iterator.next();\n }\n }\n }\n}\n//# sourceMappingURL=iterator.mjs.map" }, { - "id": "./node_modules/@dojo/shim/number.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/number.mjs", - "name": "./node_modules/@dojo/shim/number.mjs", + "id": "./node_modules/@dojo/framework/shim/number.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/number.mjs", + "name": "./node_modules/@dojo/framework/shim/number.mjs", "index": 31, "index2": 23, "size": 1724, @@ -3511,18 +3519,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./number", "loc": "3:0-44" @@ -3543,9 +3551,9 @@ "source": "import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map" }, { - "id": "./node_modules/@dojo/shim/object.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "name": "./node_modules/@dojo/shim/object.mjs", + "id": "./node_modules/@dojo/framework/shim/object.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "name": "./node_modules/@dojo/framework/shim/object.mjs", "index": 18, "index2": 11, "size": 4061, @@ -3557,39 +3565,39 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "issuerId": "./node_modules/@dojo/shim/Map.mjs", - "issuerName": "./node_modules/@dojo/shim/Map.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Map.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Map.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./object", "loc": "3:0-42" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "1:0-43" + "userRequest": "../shim/object", + "loc": "1:0-40" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/core/lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/core/lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "2:0-43" + "userRequest": "../shim/object", + "loc": "2:0-40" } ], "usedExports": [ @@ -3611,9 +3619,9 @@ "source": "import global from './global';\nimport has from './support/has';\nimport { isSymbol } from './Symbol';\nexport let assign;\n/**\n * Gets the own property descriptor of the specified object.\n * An own property descriptor is one that is defined directly on the object and is not\n * inherited from the object's prototype.\n * @param o Object that contains the property.\n * @param p Name of the property.\n */\nexport let getOwnPropertyDescriptor;\n/**\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\n * @param o Object that contains the own properties.\n */\nexport let getOwnPropertyNames;\n/**\n * Returns an array of all symbol properties found directly on object o.\n * @param o Object to retrieve the symbols from.\n */\nexport let getOwnPropertySymbols;\n/**\n * Returns true if the values are the same value, false otherwise.\n * @param value1 The first value.\n * @param value2 The second value.\n */\nexport let is;\n/**\n * Returns the names of the enumerable properties and methods of an object.\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n */\nexport let keys;\n/* ES7 Object static methods */\nexport let getOwnPropertyDescriptors;\nexport let entries;\nexport let values;\nif (true) {\n const globalObject = global.Object;\n assign = globalObject.assign;\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\n is = globalObject.is;\n keys = globalObject.keys;\n}\nelse {\n keys = function symbolAwareKeys(o) {\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n assign = function assign(target, ...sources) {\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n const to = Object(target);\n sources.forEach((nextSource) => {\n if (nextSource) {\n // Skip over if undefined or null\n keys(nextSource).forEach((nextKey) => {\n to[nextKey] = nextSource[nextKey];\n });\n }\n });\n return to;\n };\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\n if (isSymbol(prop)) {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n else {\n return Object.getOwnPropertyDescriptor(o, prop);\n }\n };\n getOwnPropertyNames = function getOwnPropertyNames(o) {\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\n };\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n return Object.getOwnPropertyNames(o)\n .filter((key) => Boolean(key.match(/^@@.+/)))\n .map((key) => Symbol.for(key.substring(2)));\n };\n is = function is(value1, value2) {\n if (value1 === value2) {\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\n }\n return value1 !== value1 && value2 !== value2; // NaN\n };\n}\nif (true) {\n const globalObject = global.Object;\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\n entries = globalObject.entries;\n values = globalObject.values;\n}\nelse {\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\n return getOwnPropertyNames(o).reduce((previous, key) => {\n previous[key] = getOwnPropertyDescriptor(o, key);\n return previous;\n }, {});\n };\n entries = function entries(o) {\n return keys(o).map((key) => [key, o[key]]);\n };\n values = function values(o) {\n return keys(o).map((key) => o[key]);\n };\n}\n//# sourceMappingURL=object.mjs.map" }, { - "id": "./node_modules/@dojo/shim/string.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "name": "./node_modules/@dojo/shim/string.mjs", + "id": "./node_modules/@dojo/framework/shim/string.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "name": "./node_modules/@dojo/framework/shim/string.mjs", "index": 17, "index2": 9, "size": 12418, @@ -3625,18 +3633,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "issuerId": "./node_modules/@dojo/shim/iterator.mjs", - "issuerName": "./node_modules/@dojo/shim/iterator.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/iterator.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./string", "loc": "2:0-66" @@ -3667,9 +3675,9 @@ "source": "import global from './global';\nimport has from './support/has';\nimport { wrapNative } from './support/util';\n/**\n * The minimum location of high surrogates\n */\nexport const HIGH_SURROGATE_MIN = 0xd800;\n/**\n * The maximum location of high surrogates\n */\nexport const HIGH_SURROGATE_MAX = 0xdbff;\n/**\n * The minimum location of low surrogates\n */\nexport const LOW_SURROGATE_MIN = 0xdc00;\n/**\n * The maximum location of low surrogates\n */\nexport const LOW_SURROGATE_MAX = 0xdfff;\n/* ES6 static methods */\n/**\n * Return the String value whose elements are, in order, the elements in the List elements.\n * If length is 0, the empty string is returned.\n * @param codePoints The code points to generate the string\n */\nexport let fromCodePoint;\n/**\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\n * as such the first argument will be a well formed template call site object and the rest\n * parameter will contain the substitution values.\n * @param template A well-formed template string call site representation.\n * @param substitutions A set of substitution values.\n */\nexport let raw;\n/* ES6 instance methods */\n/**\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\n * value of the UTF-16 encoded code point starting at the string element at position pos in\n * the String resulting from converting this object to a String.\n * If there is no element at that position, the result is undefined.\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\n */\nexport let codePointAt;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * endPosition – length(this). Otherwise returns false.\n */\nexport let endsWith;\n/**\n * Returns true if searchString appears as a substring of the result of converting this\n * object to a String, at one or more positions that are\n * greater than or equal to position; otherwise, returns false.\n * @param target The target string\n * @param searchString search string\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\n */\nexport let includes;\n/**\n * Returns the String value result of normalizing the string into the normalization form\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\n * @param target The target string\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\n * is \"NFC\"\n */\nexport let normalize;\n/**\n * Returns a String value that is made from count copies appended together. If count is 0,\n * T is the empty String is returned.\n * @param count number of copies to append\n */\nexport let repeat;\n/**\n * Returns true if the sequence of elements of searchString converted to a String is the\n * same as the corresponding elements of this object (converted to a String) starting at\n * position. Otherwise returns false.\n */\nexport let startsWith;\n/* ES7 instance methods */\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the end (right) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padEnd;\n/**\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n * The padding is applied from the start (left) of the current string.\n *\n * @param target The target string\n * @param maxLength The length of the resulting string once the current string has been padded.\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\n *\n * @param fillString The string to pad the current string with.\n * If this string is too long, it will be truncated and the left-most part will be applied.\n * The default value for this parameter is \" \" (U+0020).\n */\nexport let padStart;\nif (true && true) {\n fromCodePoint = global.String.fromCodePoint;\n raw = global.String.raw;\n codePointAt = wrapNative(global.String.prototype.codePointAt);\n endsWith = wrapNative(global.String.prototype.endsWith);\n includes = wrapNative(global.String.prototype.includes);\n normalize = wrapNative(global.String.prototype.normalize);\n repeat = wrapNative(global.String.prototype.repeat);\n startsWith = wrapNative(global.String.prototype.startsWith);\n}\nelse {\n /**\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\n * Used by startsWith, includes, and endsWith.\n *\n * @return Normalized position.\n */\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\n if (text == null) {\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\n }\n const length = text.length;\n position = position !== position ? (isEnd ? length : 0) : position;\n return [text, String(search), Math.min(Math.max(position, 0), length)];\n };\n fromCodePoint = function fromCodePoint(...codePoints) {\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\n const length = arguments.length;\n if (!length) {\n return '';\n }\n const fromCharCode = String.fromCharCode;\n const MAX_SIZE = 0x4000;\n let codeUnits = [];\n let index = -1;\n let result = '';\n while (++index < length) {\n let codePoint = Number(arguments[index]);\n // Code points must be finite integers within the valid range\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\n if (!isValid) {\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint);\n }\n else {\n // Astral code point; split in surrogate halves\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += fromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n raw = function raw(callSite, ...substitutions) {\n let rawStrings = callSite.raw;\n let result = '';\n let numSubstitutions = substitutions.length;\n if (callSite == null || callSite.raw == null) {\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\n }\n for (let i = 0, length = rawStrings.length; i < length; i++) {\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\n }\n return result;\n };\n codePointAt = function codePointAt(text, position = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\n if (text == null) {\n throw new TypeError('string.codePointAt requries a valid string.');\n }\n const length = text.length;\n if (position !== position) {\n position = 0;\n }\n if (position < 0 || position >= length) {\n return undefined;\n }\n // Get the first code unit\n const first = text.charCodeAt(position);\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n const second = text.charCodeAt(position + 1);\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\n }\n }\n return first;\n };\n endsWith = function endsWith(text, search, endPosition) {\n if (endPosition == null) {\n endPosition = text.length;\n }\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\n const start = endPosition - search.length;\n if (start < 0) {\n return false;\n }\n return text.slice(start, endPosition) === search;\n };\n includes = function includes(text, search, position = 0) {\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\n return text.indexOf(search, position) !== -1;\n };\n repeat = function repeat(text, count = 0) {\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\n if (text == null) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (count !== count) {\n count = 0;\n }\n if (count < 0 || count === Infinity) {\n throw new RangeError('string.repeat requires a non-negative finite count.');\n }\n let result = '';\n while (count) {\n if (count % 2) {\n result += text;\n }\n if (count > 1) {\n text += text;\n }\n count >>= 1;\n }\n return result;\n };\n startsWith = function startsWith(text, search, position = 0) {\n search = String(search);\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\n const end = position + search.length;\n if (end > text.length) {\n return false;\n }\n return text.slice(position, end) === search;\n };\n}\nif (true) {\n padEnd = wrapNative(global.String.prototype.padEnd);\n padStart = wrapNative(global.String.prototype.padStart);\n}\nelse {\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padEnd requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText +=\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length);\n }\n return strText;\n };\n padStart = function padStart(text, maxLength, fillString = ' ') {\n if (text === null || text === undefined) {\n throw new TypeError('string.repeat requires a valid string.');\n }\n if (maxLength === Infinity) {\n throw new RangeError('string.padStart requires a non-negative finite count.');\n }\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\n maxLength = 0;\n }\n let strText = String(text);\n const padding = maxLength - strText.length;\n if (padding > 0) {\n strText =\n repeat(fillString, Math.floor(padding / fillString.length)) +\n fillString.slice(0, padding % fillString.length) +\n strText;\n }\n return strText;\n };\n}\n//# sourceMappingURL=string.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/has.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/has.mjs", - "name": "./node_modules/@dojo/shim/support/has.mjs", + "id": "./node_modules/@dojo/framework/shim/support/has.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/has.mjs", + "name": "./node_modules/@dojo/framework/shim/support/has.mjs", "index": 6, "index2": 5, "size": 6151, @@ -3681,81 +3689,81 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "3:0-32" + "loc": "1:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "1:0-32" + "loc": "3:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "./has", "loc": "2:0-24" @@ -3773,12 +3781,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import has, { add } from '@dojo/has/has';\nimport global from '../global';\nexport default has;\nexport * from '@dojo/has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map" + "source": "import has, { add } from '../../has/has';\nimport global from '../global';\nexport default has;\nexport * from '../../has/has';\n/* ECMAScript 6 and 7 Features */\n/* Array */\nadd('es6-array', () => {\n return (['from', 'of'].every((key) => key in global.Array) &&\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\n}, true);\nadd('es6-array-fill', () => {\n if ('fill' in global.Array.prototype) {\n /* Some versions of Safari do not properly implement this */\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\n }\n return false;\n}, true);\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\n/* Map */\nadd('es6-map', () => {\n if (typeof global.Map === 'function') {\n /*\n IE11 and older versions of Safari are missing critical ES6 Map functionality\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\n take arguments (iOS 8.4)\n */\n try {\n const map = new global.Map([[0, 1]]);\n return map.has(0) &&\n typeof map.keys === 'function' &&\n true &&\n typeof map.values === 'function' &&\n typeof map.entries === 'function';\n }\n catch (e) {\n /* istanbul ignore next: not testing on iOS at the moment */\n return false;\n }\n }\n return false;\n}, true);\n/* Math */\nadd('es6-math', () => {\n return [\n 'clz32',\n 'sign',\n 'log10',\n 'log2',\n 'log1p',\n 'expm1',\n 'cosh',\n 'sinh',\n 'tanh',\n 'acosh',\n 'asinh',\n 'atanh',\n 'trunc',\n 'fround',\n 'cbrt',\n 'hypot'\n ].every((name) => typeof global.Math[name] === 'function');\n}, true);\nadd('es6-math-imul', () => {\n if ('imul' in global.Math) {\n /* Some versions of Safari on ios do not properly implement this */\n return Math.imul(0xffffffff, 5) === -5;\n }\n return false;\n}, true);\n/* Object */\nadd('es6-object', () => {\n return true &&\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\n}, true);\nadd('es2017-object', () => {\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\n}, true);\n/* Observable */\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\n/* Promise */\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\n/* Set */\nadd('es6-set', () => {\n if (typeof global.Set === 'function') {\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\n const set = new global.Set([1]);\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\n }\n return false;\n}, true);\n/* String */\nadd('es6-string', () => {\n return ([\n /* static methods */\n 'fromCodePoint'\n ].every((key) => typeof global.String[key] === 'function') &&\n [\n /* instance methods */\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'startsWith',\n 'endsWith',\n 'includes'\n ].every((key) => typeof global.String.prototype[key] === 'function'));\n}, true);\nadd('es6-string-raw', () => {\n function getCallSite(callSite, ...substitutions) {\n const result = [...callSite];\n result.raw = callSite.raw;\n return result;\n }\n if ('raw' in global.String) {\n let b = 1;\n let callSite = getCallSite `a\\n${b}`;\n callSite.raw = ['a\\\\n'];\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\n return supportsTrunc;\n }\n return false;\n}, true);\nadd('es2017-string', () => {\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\n}, true);\n/* Symbol */\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\n/* WeakMap */\nadd('es6-weakmap', () => {\n if (typeof global.WeakMap !== 'undefined') {\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\n const key1 = {};\n const key2 = {};\n const map = new global.WeakMap([[key1, 1]]);\n Object.freeze(key1);\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\n }\n return false;\n}, true);\n/* Miscellaneous features */\nadd('microtasks', () => true || false || true, true);\nadd('postmessage', () => {\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\n}, true);\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\n/* DOM Features */\nadd('dom-mutationobserver', () => {\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\n // generate a mutation event, observers can crash, and the queue does not drain\n // reliably. The following feature test was adapted from\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\n const example = document.createElement('div');\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const observer = new HostMutationObserver(function () { });\n observer.observe(example, { attributes: true });\n example.style.setProperty('display', 'block');\n return Boolean(observer.takeRecords().length);\n }\n return false;\n}, true);\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/queue.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/queue.mjs", - "name": "./node_modules/@dojo/shim/support/queue.mjs", + "id": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/queue.mjs", + "name": "./node_modules/@dojo/framework/shim/support/queue.mjs", "index": 23, "index2": 14, "size": 6196, @@ -3790,18 +3798,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "issuerId": "./node_modules/@dojo/shim/Promise.mjs", - "issuerName": "./node_modules/@dojo/shim/Promise.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Promise.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/queue", "loc": "2:0-49" @@ -3818,9 +3826,9 @@ "source": "import global from '../global';\nimport has from './has';\nfunction executeTask(item) {\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n}\nfunction getQueueHandle(item, destructor) {\n return {\n destroy: function () {\n this.destroy = function () { };\n item.isActive = false;\n item.callback = null;\n if (destructor) {\n destructor();\n }\n }\n };\n}\nlet checkMicroTaskQueue;\nlet microTasks;\n/**\n * Schedules a callback to the macrotask queue.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueTask = (function () {\n let destructor;\n let enqueue;\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\n if (true) {\n const queue = [];\n global.addEventListener('message', function (event) {\n // Confirm that the event was triggered by the current window and by this particular implementation.\n if (event.source === global && event.data === 'dojo-queue-message') {\n event.stopPropagation();\n if (queue.length) {\n executeTask(queue.shift());\n }\n }\n });\n enqueue = function (item) {\n queue.push(item);\n global.postMessage('dojo-queue-message', '*');\n };\n }\n else if (false) {\n destructor = global.clearImmediate;\n enqueue = function (item) {\n return setImmediate(executeTask.bind(null, item));\n };\n }\n else {\n destructor = global.clearTimeout;\n enqueue = function (item) {\n return setTimeout(executeTask.bind(null, item), 0);\n };\n }\n function queueTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const id = enqueue(item);\n return getQueueHandle(item, destructor &&\n function () {\n destructor(id);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueTask(callback);\n };\n})();\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\nif (!true) {\n let isMicroTaskQueued = false;\n microTasks = [];\n checkMicroTaskQueue = function () {\n if (!isMicroTaskQueued) {\n isMicroTaskQueued = true;\n queueTask(function () {\n isMicroTaskQueued = false;\n if (microTasks.length) {\n let item;\n while ((item = microTasks.shift())) {\n executeTask(item);\n }\n }\n });\n }\n };\n}\n/**\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\n *\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport const queueAnimationTask = (function () {\n if (!true) {\n return queueTask;\n }\n function queueAnimationTask(callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\n return getQueueHandle(item, function () {\n cancelAnimationFrame(rafId);\n });\n }\n // TODO: Use aspect.before when it is available.\n return true\n ? queueAnimationTask\n : function (callback) {\n checkMicroTaskQueue();\n return queueAnimationTask(callback);\n };\n})();\n/**\n * Schedules a callback to the microtask queue.\n *\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\n * registered with `queueTask` or `queueAnimationTask`.\n *\n * @param callback the function to be queued and later executed.\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\n */\nexport let queueMicroTask = (function () {\n let enqueue;\n if (false) {\n enqueue = function (item) {\n global.process.nextTick(executeTask.bind(null, item));\n };\n }\n else if (true) {\n enqueue = function (item) {\n global.Promise.resolve(item).then(executeTask);\n };\n }\n else if (true) {\n /* tslint:disable-next-line:variable-name */\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\n const node = document.createElement('div');\n const queue = [];\n const observer = new HostMutationObserver(function () {\n while (queue.length > 0) {\n const item = queue.shift();\n if (item && item.isActive && item.callback) {\n item.callback();\n }\n }\n });\n observer.observe(node, { attributes: true });\n enqueue = function (item) {\n queue.push(item);\n node.setAttribute('queueStatus', '1');\n };\n }\n else {\n enqueue = function (item) {\n checkMicroTaskQueue();\n microTasks.push(item);\n };\n }\n return function (callback) {\n const item = {\n isActive: true,\n callback: callback\n };\n enqueue(item);\n return getQueueHandle(item);\n };\n})();\n//# sourceMappingURL=queue.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/util.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/support/util.mjs", - "name": "./node_modules/@dojo/shim/support/util.mjs", + "id": "./node_modules/@dojo/framework/shim/support/util.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/support/util.mjs", + "name": "./node_modules/@dojo/framework/shim/support/util.mjs", "index": 11, "index2": 6, "size": 853, @@ -3832,36 +3840,36 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "5:0-44" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-52" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-44" @@ -3880,12 +3888,12 @@ "source": "/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Injector.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Injector.mjs", - "name": "./node_modules/@dojo/widget-core/Injector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Injector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "index": 37, "index2": 31, - "size": 496, + "size": 493, "cacheable": true, "built": true, "optional": false, @@ -3894,18 +3902,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../Injector", "loc": "2:0-41" @@ -3920,15 +3928,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" + "source": "import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/NodeHandler.mjs", - "name": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "index": 28, "index2": 22, - "size": 1096, + "size": 1090, "cacheable": true, "built": true, "optional": false, @@ -3937,18 +3945,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./NodeHandler", "loc": "7:0-40" @@ -3964,15 +3972,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nimport Map from '@dojo/shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map" + "source": "import { Evented } from '../core/Evented';\nimport Map from '../shim/Map';\n/**\n * Enum to identify the type of event.\n * Listening to 'Projector' will notify when projector is created or updated\n * Listening to 'Widget' will notify when widget root is created or updated\n */\nexport var NodeEventType;\n(function (NodeEventType) {\n NodeEventType[\"Projector\"] = \"Projector\";\n NodeEventType[\"Widget\"] = \"Widget\";\n})(NodeEventType || (NodeEventType = {}));\nexport class NodeHandler extends Evented {\n constructor() {\n super(...arguments);\n this._nodeMap = new Map();\n }\n get(key) {\n return this._nodeMap.get(key);\n }\n has(key) {\n return this._nodeMap.has(key);\n }\n add(element, key) {\n this._nodeMap.set(key, element);\n this.emit({ type: key });\n }\n addRoot() {\n this.emit({ type: NodeEventType.Widget });\n }\n addProjector() {\n this.emit({ type: NodeEventType.Projector });\n }\n clear() {\n this._nodeMap.clear();\n }\n}\nexport default NodeHandler;\n//# sourceMappingURL=NodeHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Registry.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/Registry.mjs", - "name": "./node_modules/@dojo/widget-core/Registry.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/Registry.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "index": 21, "index2": 19, - "size": 3702, + "size": 3690, "cacheable": true, "built": true, "optional": false, @@ -3981,54 +3989,54 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/diff.mjs", - "module": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleName": "./node_modules/@dojo/widget-core/diff.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/diff.mjs", + "module": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/diff.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "1:0-46" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "3:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../Registry", "loc": "2:0-35" @@ -4049,15 +4057,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import Promise from '@dojo/shim/Promise';\nimport Map from '@dojo/shim/Map';\nimport Symbol from '@dojo/shim/Symbol';\nimport { Evented } from '@dojo/core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map" + "source": "import Promise from '../shim/Promise';\nimport Map from '../shim/Map';\nimport Symbol from '../shim/Symbol';\nimport { Evented } from '../core/Evented';\n/**\n * Widget base symbol type\n */\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\n/**\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\n *\n * @param item the item to check\n * @returns true/false indicating if the item is a WidgetBaseConstructor\n */\nexport function isWidgetBaseConstructor(item) {\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\n}\nexport function isWidgetConstructorDefaultExport(item) {\n return Boolean(item &&\n item.hasOwnProperty('__esModule') &&\n item.hasOwnProperty('default') &&\n isWidgetBaseConstructor(item.default));\n}\n/**\n * The Registry implementation\n */\nexport class Registry extends Evented {\n /**\n * Emit loaded event for registry label\n */\n emitLoadedEvent(widgetLabel, item) {\n this.emit({\n type: widgetLabel,\n action: 'loaded',\n item\n });\n }\n define(label, item) {\n if (this._widgetRegistry === undefined) {\n this._widgetRegistry = new Map();\n }\n if (this._widgetRegistry.has(label)) {\n throw new Error(`widget has already been registered for '${label.toString()}'`);\n }\n this._widgetRegistry.set(label, item);\n if (item instanceof Promise) {\n item.then((widgetCtor) => {\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n }\n else if (isWidgetBaseConstructor(item)) {\n this.emitLoadedEvent(label, item);\n }\n }\n defineInjector(label, injectorFactory) {\n if (this._injectorRegistry === undefined) {\n this._injectorRegistry = new Map();\n }\n if (this._injectorRegistry.has(label)) {\n throw new Error(`injector has already been registered for '${label.toString()}'`);\n }\n const invalidator = new Evented();\n const injectorItem = {\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\n invalidator\n };\n this._injectorRegistry.set(label, injectorItem);\n this.emitLoadedEvent(label, injectorItem);\n }\n get(label) {\n if (!this._widgetRegistry || !this.has(label)) {\n return null;\n }\n const item = this._widgetRegistry.get(label);\n if (isWidgetBaseConstructor(item)) {\n return item;\n }\n if (item instanceof Promise) {\n return null;\n }\n const promise = item();\n this._widgetRegistry.set(label, promise);\n promise.then((widgetCtor) => {\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\n widgetCtor = widgetCtor.default;\n }\n this._widgetRegistry.set(label, widgetCtor);\n this.emitLoadedEvent(label, widgetCtor);\n return widgetCtor;\n }, (error) => {\n throw error;\n });\n return null;\n }\n getInjector(label) {\n if (!this._injectorRegistry || !this.hasInjector(label)) {\n return null;\n }\n return this._injectorRegistry.get(label);\n }\n has(label) {\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\n }\n hasInjector(label) {\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\n }\n}\nexport default Registry;\n//# sourceMappingURL=Registry.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/RegistryHandler.mjs", - "name": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "index": 27, "index2": 21, - "size": 2862, + "size": 2856, "cacheable": true, "built": true, "optional": false, @@ -4066,18 +4074,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./RegistryHandler", "loc": "6:0-48" @@ -4092,15 +4100,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Map } from '@dojo/shim/Map';\nimport { Evented } from '@dojo/core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map" + "source": "import { Map } from '../shim/Map';\nimport { Evented } from '../core/Evented';\nimport { Registry } from './Registry';\nexport class RegistryHandler extends Evented {\n constructor() {\n super();\n this._registry = new Registry();\n this._registryWidgetLabelMap = new Map();\n this._registryInjectorLabelMap = new Map();\n this.own(this._registry);\n const destroy = () => {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n this.baseRegistry = undefined;\n }\n };\n this.own({ destroy });\n }\n set base(baseRegistry) {\n if (this.baseRegistry) {\n this._registryWidgetLabelMap.delete(this.baseRegistry);\n this._registryInjectorLabelMap.delete(this.baseRegistry);\n }\n this.baseRegistry = baseRegistry;\n }\n define(label, widget) {\n this._registry.define(label, widget);\n }\n defineInjector(label, injector) {\n this._registry.defineInjector(label, injector);\n }\n has(label) {\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\n }\n hasInjector(label) {\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\n }\n get(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\n }\n getInjector(label, globalPrecedence = false) {\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\n }\n _get(label, globalPrecedence, getFunctionName, labelMap) {\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\n for (let i = 0; i < registries.length; i++) {\n const registry = registries[i];\n if (!registry) {\n continue;\n }\n const item = registry[getFunctionName](label);\n const registeredLabels = labelMap.get(registry) || [];\n if (item) {\n return item;\n }\n else if (registeredLabels.indexOf(label) === -1) {\n const handle = registry.on(label, (event) => {\n if (event.action === 'loaded' &&\n this[getFunctionName](label, globalPrecedence) === event.item) {\n this.emit({ type: 'invalidate' });\n }\n });\n this.own(handle);\n labelMap.set(registry, [...registeredLabels, label]);\n }\n }\n return null;\n }\n}\nexport default RegistryHandler;\n//# sourceMappingURL=RegistryHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "name": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "id": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "name": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "index": 14, "index2": 26, - "size": 14386, + "size": 13720, "cacheable": true, "built": true, "optional": false, @@ -4109,18 +4117,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./WidgetBase", "loc": "2:0-50" @@ -4131,8 +4139,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/WidgetBase", - "loc": "5:0-58" + "userRequest": "@dojo/framework/widget-core/WidgetBase", + "loc": "5:0-68" } ], "usedExports": [ @@ -4146,12 +4154,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" + "source": "import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "name": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", + "id": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "name": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", "index": 33, "index2": 27, "size": 2288, @@ -4163,18 +4171,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "../animations/cssTransitions", "loc": "3:0-58" @@ -4191,12 +4199,12 @@ "source": "let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/d.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/d.mjs", - "name": "./node_modules/@dojo/widget-core/d.mjs", + "id": "./node_modules/@dojo/framework/widget-core/d.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/d.mjs", + "name": "./node_modules/@dojo/framework/widget-core/d.mjs", "index": 4, "index2": 8, - "size": 3270, + "size": 3267, "cacheable": true, "built": true, "optional": false, @@ -4205,54 +4213,54 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./d", "loc": "5:0-29" }, { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./src/menu/Menu.ts", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--3-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/umd-compat-loader/index.js??ref--3-1!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/ts-loader/index.js??ref--3-2!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=ts&instanceName=0_menu!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts", + "module": "./src/menu/Menu.ts", + "moduleName": "./src/menu/Menu.ts", + "type": "harmony import", + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./d", "loc": "4:0-24" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../d", "loc": "5:0-27" }, { - "moduleId": "./src/menu/Menu.ts", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--3-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/umd-compat-loader/index.js??ref--3-1!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/ts-loader/index.js??ref--3-2!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=ts&instanceName=0_menu!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts", - "module": "./src/menu/Menu.ts", - "moduleName": "./src/menu/Menu.ts", - "type": "harmony import", - "userRequest": "@dojo/widget-core/d", - "loc": "2:0-40" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./d", "loc": "3:0-65" @@ -4283,12 +4291,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" + "source": "import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "index": 41, "index2": 36, "size": 365, @@ -4300,18 +4308,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./decorators/alwaysRender", "loc": "8:0-57" @@ -4329,9 +4337,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "index": 39, "index2": 32, "size": 331, @@ -4343,27 +4351,27 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "2:0-54" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "3:0-54" @@ -4381,9 +4389,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "index": 12, "index2": 38, "size": 728, @@ -4408,8 +4416,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/decorators/customElement", - "loc": "3:0-75" + "userRequest": "@dojo/framework/widget-core/decorators/customElement", + "loc": "3:0-85" } ], "usedExports": [ @@ -4424,12 +4432,12 @@ "source": "import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "index": 40, "index2": 34, - "size": 973, + "size": 1014, "cacheable": true, "built": true, "optional": false, @@ -4438,18 +4446,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/diffProperty", "loc": "5:0-60" @@ -4464,12 +4472,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" + "source": "import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", "index": 35, "index2": 28, "size": 512, @@ -4481,63 +4489,63 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/handleDecorator", "loc": "4:0-66" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "2:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" @@ -4555,9 +4563,9 @@ "source": "/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/inject.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "index": 38, "index2": 33, "size": 1532, @@ -4569,18 +4577,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/inject", "loc": "3:0-48" @@ -4595,12 +4603,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" + "source": "import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/diff.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/diff.mjs", - "name": "./node_modules/@dojo/widget-core/diff.mjs", + "id": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/diff.mjs", + "name": "./node_modules/@dojo/framework/widget-core/diff.mjs", "index": 20, "index2": 20, "size": 1930, @@ -4612,30 +4620,39 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./diff", "loc": "5:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../diff", "loc": "6:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "type": "harmony import", + "userRequest": "./../diff", + "loc": "2:0-33" } ], "usedExports": [ @@ -4654,12 +4671,12 @@ "source": "import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "index": 32, "index2": 30, - "size": 5852, + "size": 5683, "cacheable": true, "built": true, "optional": false, @@ -4668,18 +4685,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Projector", "loc": "3:0-52" @@ -4696,15 +4713,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "index": 36, "index2": 35, - "size": 5320, + "size": 5157, "cacheable": true, "built": true, "optional": false, @@ -4713,18 +4730,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Themed", "loc": "7:0-56" @@ -4735,8 +4752,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/mixins/Themed", - "loc": "4:0-69" + "userRequest": "@dojo/framework/widget-core/mixins/Themed", + "loc": "4:0-79" } ], "usedExports": [ @@ -4753,15 +4770,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "name": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "index": 13, "index2": 37, - "size": 9124, + "size": 9118, "cacheable": true, "built": true, "optional": false, @@ -4783,14 +4800,14 @@ "module": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "moduleName": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "type": "cjs require", - "userRequest": "@dojo/widget-core/registerCustomElement", - "loc": "4:28-78" + "userRequest": "@dojo/framework/widget-core/registerCustomElement", + "loc": "4:28-88" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/decorators/customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../registerCustomElement", "loc": "1:0-66" @@ -4806,15 +4823,15 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/vdom.mjs", - "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/vdom.mjs", - "name": "./node_modules/@dojo/widget-core/vdom.mjs", + "id": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "identifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/vdom.mjs", + "name": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "index": 29, "index2": 25, - "size": 38814, + "size": 39966, "cacheable": true, "built": true, "optional": false, @@ -4823,27 +4840,27 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./vdom", "loc": "8:0-43" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../vdom", "loc": "6:0-32" @@ -4862,7 +4879,7 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import global from '@dojo/shim/global';\nimport { from as arrayFrom } from '@dojo/shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '@dojo/shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode.focus();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (propName === 'focus') {\n focusNode(propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const rendered = dnode.rendered || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\n oldIndex++;\n newIndex++;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let child = oldChildren[oldIndex];\n if (child) {\n let nextIndex = oldIndex + 1;\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n if (insertBefore.rendered) {\n insertBeforeChildren.push(...insertBefore.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\n insertBeforeChildren.push(oldChildren[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map" + "source": "import global from '../shim/global';\nimport { from as arrayFrom } from '../shim/array';\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\nimport { isWidgetBaseConstructor } from './Registry';\nimport WeakMap from '../shim/WeakMap';\nconst NAMESPACE_W3 = 'http://www.w3.org/';\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\nconst emptyArray = [];\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\nexport const widgetInstanceMap = new WeakMap();\nconst instanceMap = new WeakMap();\nconst nextSiblingMap = new WeakMap();\nconst projectorStateMap = new WeakMap();\nfunction same(dnode1, dnode2) {\n if (isVNode(dnode1) && isVNode(dnode2)) {\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\n if (dnode1.domNode !== dnode2.domNode) {\n return false;\n }\n }\n if (dnode1.tag !== dnode2.tag) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n else if (isWNode(dnode1) && isWNode(dnode2)) {\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\n return false;\n }\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\n return false;\n }\n if (dnode1.properties.key !== dnode2.properties.key) {\n return false;\n }\n return true;\n }\n return false;\n}\nconst missingTransition = function () {\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\n};\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\n const defaults = {\n namespace: undefined,\n styleApplyer: function (domNode, styleName, value) {\n domNode.style[styleName] = value;\n },\n transitions: {\n enter: missingTransition,\n exit: missingTransition\n },\n depth: 0,\n merge: false,\n sync: false,\n projectorInstance\n };\n return Object.assign({}, defaults, projectorOptions);\n}\nfunction checkStyleValue(styleValue) {\n if (typeof styleValue !== 'string') {\n throw new Error('Style values must be strings');\n }\n}\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\n if (previousValue) {\n const previousEvent = eventMap.get(previousValue);\n domNode.removeEventListener(eventName, previousEvent);\n }\n let callback = currentValue.bind(bind);\n if (eventName === 'input') {\n callback = function (evt) {\n currentValue.call(this, evt);\n evt.target['oninput-value'] = evt.target.value;\n }.bind(bind);\n }\n domNode.addEventListener(eventName, callback);\n eventMap.set(currentValue, callback);\n projectorState.nodeMap.set(domNode, eventMap);\n}\nfunction addClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.add(classNames[i]);\n }\n }\n}\nfunction removeClasses(domNode, classes) {\n if (classes) {\n const classNames = classes.split(' ');\n for (let i = 0; i < classNames.length; i++) {\n domNode.classList.remove(classNames[i]);\n }\n }\n}\nfunction buildPreviousProperties(domNode, previous, current) {\n const { diffType, properties, attributes } = current;\n if (!diffType || diffType === 'vdom') {\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\n }\n else if (diffType === 'none') {\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\n }\n let newProperties = {\n properties: {}\n };\n if (attributes) {\n newProperties.attributes = {};\n newProperties.events = previous.events;\n Object.keys(properties).forEach((propName) => {\n newProperties.properties[propName] = domNode[propName];\n });\n Object.keys(attributes).forEach((attrName) => {\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\n });\n return newProperties;\n }\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\n props[property] = domNode.getAttribute(property) || domNode[property];\n return props;\n }, {});\n return newProperties;\n}\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\n let result;\n if (typeof propValue === 'function') {\n result = propValue();\n }\n else {\n result = propValue && !previousValue;\n }\n if (result === true) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.deferredRenderCallbacks.push(() => {\n domNode[propName]();\n });\n }\n}\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n const eventMap = projectorState.nodeMap.get(domNode);\n if (eventMap) {\n Object.keys(previousProperties).forEach((propName) => {\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\n const eventName = onlyEvents ? propName : propName.substr(2);\n if (isEvent && !properties[propName]) {\n const eventCallback = eventMap.get(previousProperties[propName]);\n if (eventCallback) {\n domNode.removeEventListener(eventName, eventCallback);\n }\n }\n });\n }\n}\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\n }\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\n domNode.removeAttribute(attrName);\n }\n else {\n domNode.setAttribute(attrName, attrValue);\n }\n}\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\n const attrNames = Object.keys(attributes);\n const attrCount = attrNames.length;\n for (let i = 0; i < attrCount; i++) {\n const attrName = attrNames[i];\n const attrValue = attributes[attrName];\n const previousAttrValue = previousAttributes[attrName];\n if (attrValue !== previousAttrValue) {\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\n }\n }\n}\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\n let propertiesUpdated = false;\n const propNames = Object.keys(properties);\n const propCount = propNames.length;\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\n if (Array.isArray(previousProperties.classes)) {\n for (let i = 0; i < previousProperties.classes.length; i++) {\n removeClasses(domNode, previousProperties.classes[i]);\n }\n }\n else {\n removeClasses(domNode, previousProperties.classes);\n }\n }\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\n for (let i = 0; i < propCount; i++) {\n const propName = propNames[i];\n let propValue = properties[propName];\n const previousValue = previousProperties[propName];\n if (propName === 'classes') {\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\n if (previousClasses && previousClasses.length > 0) {\n if (!propValue || propValue.length === 0) {\n for (let i = 0; i < previousClasses.length; i++) {\n removeClasses(domNode, previousClasses[i]);\n }\n }\n else {\n const newClasses = [...currentClasses];\n for (let i = 0; i < previousClasses.length; i++) {\n const previousClassName = previousClasses[i];\n if (previousClassName) {\n const classIndex = newClasses.indexOf(previousClassName);\n if (classIndex === -1) {\n removeClasses(domNode, previousClassName);\n }\n else {\n newClasses.splice(classIndex, 1);\n }\n }\n }\n for (let i = 0; i < newClasses.length; i++) {\n addClasses(domNode, newClasses[i]);\n }\n }\n }\n else {\n for (let i = 0; i < currentClasses.length; i++) {\n addClasses(domNode, currentClasses[i]);\n }\n }\n }\n else if (nodeOperations.indexOf(propName) !== -1) {\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\n }\n else if (propName === 'styles') {\n const styleNames = Object.keys(propValue);\n const styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n const styleName = styleNames[j];\n const newStyleValue = propValue[styleName];\n const oldStyleValue = previousValue && previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\n }\n else {\n projectionOptions.styleApplyer(domNode, styleName, '');\n }\n }\n }\n else {\n if (!propValue && typeof previousValue === 'string') {\n propValue = '';\n }\n if (propName === 'value') {\n const domValue = domNode[propName];\n if (domValue !== propValue &&\n (domNode['oninput-value']\n ? domValue === domNode['oninput-value']\n : propValue !== previousValue)) {\n domNode[propName] = propValue;\n domNode['oninput-value'] = undefined;\n }\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n }\n else if (propName !== 'key' && propValue !== previousValue) {\n const type = typeof propValue;\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\n }\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\n updateAttribute(domNode, propName, propValue, projectionOptions);\n }\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\n if (domNode[propName] !== propValue) {\n domNode[propName] = propValue;\n }\n }\n else {\n domNode[propName] = propValue;\n }\n propertiesUpdated = true;\n }\n }\n }\n return propertiesUpdated;\n}\nfunction findIndexOfChild(children, sameAs, start) {\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n return -1;\n}\nexport function toParentVNode(domNode) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n domNode,\n type: VNODE\n };\n}\nexport function toTextVNode(data) {\n return {\n tag: '',\n properties: {},\n children: undefined,\n text: `${data}`,\n domNode: undefined,\n type: VNODE\n };\n}\nfunction toInternalWNode(instance, instanceData) {\n return {\n instance,\n rendered: [],\n coreProperties: instanceData.coreProperties,\n children: instance.children,\n widgetConstructor: instance.constructor,\n properties: instanceData.inputProperties,\n type: WNODE\n };\n}\nexport function filterAndDecorateChildren(children, instance) {\n if (children === undefined) {\n return emptyArray;\n }\n children = Array.isArray(children) ? children : [children];\n for (let i = 0; i < children.length;) {\n const child = children[i];\n if (child === undefined || child === null) {\n children.splice(i, 1);\n continue;\n }\n else if (typeof child === 'string') {\n children[i] = toTextVNode(child);\n }\n else {\n if (isVNode(child)) {\n if (child.properties.bind === undefined) {\n child.properties.bind = instance;\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n else {\n if (!child.coreProperties) {\n const instanceData = widgetInstanceMap.get(instance);\n child.coreProperties = {\n bind: instance,\n baseRegistry: instanceData.coreProperties.baseRegistry\n };\n }\n if (child.children && child.children.length > 0) {\n filterAndDecorateChildren(child.children, instance);\n }\n }\n }\n i++;\n }\n return children;\n}\nfunction nodeAdded(dnode, transitions) {\n if (isVNode(dnode) && dnode.properties) {\n const enterAnimation = dnode.properties.enterAnimation;\n if (enterAnimation) {\n if (typeof enterAnimation === 'function') {\n enterAnimation(dnode.domNode, dnode.properties);\n }\n else {\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\n }\n }\n }\n}\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\n if (isWNode(dnode)) {\n const item = instanceMap.get(dnode.instance);\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\n if (dnode.instance) {\n const instanceData = widgetInstanceMap.get(dnode.instance);\n instanceData.onDetach();\n instanceMap.delete(dnode.instance);\n }\n for (let i = 0; i < rendered.length; i++) {\n nodeToRemove(rendered[i], transitions, projectionOptions);\n }\n }\n else {\n const domNode = dnode.domNode;\n const properties = dnode.properties;\n if (dnode.children && dnode.children.length > 0) {\n for (let i = 0; i < dnode.children.length; i++) {\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\n }\n }\n const exitAnimation = properties.exitAnimation;\n if (properties && exitAnimation) {\n domNode.style.pointerEvents = 'none';\n const removeDomNode = function () {\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n };\n if (typeof exitAnimation === 'function') {\n exitAnimation(domNode, removeDomNode, properties);\n return;\n }\n else {\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\n return;\n }\n }\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\n dnode.domNode = undefined;\n }\n}\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\n const childNode = childNodes[indexToCheck];\n if (isVNode(childNode) && !childNode.tag) {\n return; // Text nodes need not be distinguishable\n }\n const { key } = childNode.properties;\n if (key === undefined || key === null) {\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n const node = childNodes[i];\n if (same(node, childNode)) {\n let nodeIdentifier;\n const parentName = parentInstance.constructor.name || 'unknown';\n if (isWNode(childNode)) {\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\n }\n else {\n nodeIdentifier = childNode.tag;\n }\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\n break;\n }\n }\n }\n }\n}\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren;\n const oldChildrenLength = oldChildren.length;\n const newChildrenLength = newChildren.length;\n const transitions = projectionOptions.transitions;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n let oldIndex = 0;\n let newIndex = 0;\n let i;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n const newChild = newChildren[newIndex];\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\n addDeferredProperties(newChild, projectionOptions);\n }\n if (oldChild !== undefined && same(oldChild, newChild)) {\n oldIndex++;\n newIndex++;\n textUpdated =\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\n continue;\n }\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n const addChild = () => {\n let insertBeforeDomNode = undefined;\n let childrenArray = oldChildren;\n let nextIndex = oldIndex + 1;\n let child = oldChildren[oldIndex];\n if (!child) {\n child = siblings[0];\n nextIndex = 1;\n childrenArray = siblings;\n }\n if (child) {\n let insertBeforeChildren = [child];\n while (insertBeforeChildren.length) {\n const insertBefore = insertBeforeChildren.shift();\n if (isWNode(insertBefore)) {\n const item = instanceMap.get(insertBefore.instance);\n if (item && item.dnode.rendered) {\n insertBeforeChildren.push(...item.dnode.rendered);\n }\n }\n else {\n if (insertBefore.domNode) {\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\n break;\n }\n insertBeforeDomNode = insertBefore.domNode;\n break;\n }\n }\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\n insertBeforeChildren.push(childrenArray[nextIndex]);\n nextIndex++;\n }\n }\n }\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\n nodeAdded(newChild, transitions);\n const indexToCheck = newIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\n });\n };\n if (!oldChild || findOldIndex === -1) {\n addChild();\n newIndex++;\n continue;\n }\n const removeChild = () => {\n const indexToCheck = oldIndex;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n if (isWNode(oldChild)) {\n const item = instanceMap.get(oldChild.instance);\n if (item) {\n oldChild = item.dnode;\n }\n }\n nodeToRemove(oldChild, transitions, projectionOptions);\n };\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\n if (findNewIndex === -1) {\n removeChild();\n oldIndex++;\n continue;\n }\n addChild();\n removeChild();\n oldIndex++;\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n const indexToCheck = i;\n projectorState.afterRenderCallbacks.push(() => {\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\n });\n let childToRemove = oldChildren[i];\n if (isWNode(childToRemove)) {\n const item = instanceMap.get(childToRemove.instance);\n if (item) {\n childToRemove = item.dnode;\n }\n }\n nodeToRemove(childToRemove, transitions, projectionOptions);\n }\n }\n return textUpdated;\n}\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\n if (children === undefined) {\n return;\n }\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.merge && childNodes === undefined) {\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\n }\n const transitions = projectionOptions.transitions;\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const nextSiblings = children.slice(i + 1);\n if (isVNode(child)) {\n if (projectorState.merge && childNodes) {\n let domElement = undefined;\n while (child.domNode === undefined && childNodes.length > 0) {\n domElement = childNodes.shift();\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\n child.domNode = domElement;\n }\n }\n }\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\n }\n else {\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\n }\n nodeAdded(child, transitions);\n }\n}\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\n addDeferredProperties(dnode, projectionOptions);\n }\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\n });\n }\n else {\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n dnode.inserted = true;\n}\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\n let domNode;\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (isWNode(dnode)) {\n let { widgetConstructor } = dnode;\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\n if (!isWidgetBaseConstructor(widgetConstructor)) {\n const item = parentInstanceData.registry().get(widgetConstructor);\n if (item === null) {\n return;\n }\n widgetConstructor = item;\n }\n const instance = new widgetConstructor();\n dnode.instance = instance;\n nextSiblingMap.set(instance, nextSiblings);\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\n scheduleRender(projectionOptions);\n }\n };\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n const rendered = instance.__render__();\n instanceData.rendering = false;\n if (rendered) {\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\n dnode.rendered = filteredRendered;\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n }\n else {\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\n domNode = dnode.domNode = projectionOptions.mergeElement;\n projectorState.mergeElement = undefined;\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n return;\n }\n const doc = parentVNode.domNode.ownerDocument;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.domNode !== undefined && parentVNode.domNode) {\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\n if (parentVNode.domNode === dnode.domNode.parentNode) {\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\n }\n else {\n parentVNode.domNode.appendChild(newDomNode);\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\n }\n dnode.domNode = newDomNode;\n }\n else {\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n else {\n if (dnode.domNode === undefined) {\n if (dnode.tag === 'svg') {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\n }\n else {\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\n }\n }\n else {\n domNode = dnode.domNode;\n }\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\n if (insertBefore !== undefined) {\n parentVNode.domNode.insertBefore(domNode, insertBefore);\n }\n else if (domNode.parentNode !== parentVNode.domNode) {\n parentVNode.domNode.appendChild(domNode);\n }\n }\n }\n}\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\n if (isWNode(dnode)) {\n const { instance } = previous;\n const { parentVNode, dnode: node } = instanceMap.get(instance);\n const previousRendered = node ? node.rendered : previous.rendered;\n const instanceData = widgetInstanceMap.get(instance);\n instanceData.rendering = true;\n instance.__setCoreProperties__(dnode.coreProperties);\n instance.__setChildren__(dnode.children);\n instance.__setProperties__(dnode.properties);\n nextSiblingMap.set(instance, nextSiblings);\n dnode.instance = instance;\n if (instanceData.dirty === true) {\n const rendered = instance.__render__();\n instanceData.rendering = false;\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\n }\n else {\n instanceData.rendering = false;\n dnode.rendered = previousRendered;\n }\n instanceMap.set(instance, { dnode, parentVNode });\n instanceData.nodeHandler.addRoot();\n }\n else {\n if (previous === dnode) {\n return false;\n }\n const domNode = (dnode.domNode = previous.domNode);\n let textUpdated = false;\n let updated = false;\n if (!dnode.tag && typeof dnode.text === 'string') {\n if (dnode.text !== previous.text) {\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\n domNode.parentNode.replaceChild(newDomNode, domNode);\n dnode.domNode = newDomNode;\n textUpdated = true;\n return textUpdated;\n }\n }\n else {\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\n }\n if (previous.children !== dnode.children) {\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\n dnode.children = children;\n updated =\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\n }\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\n if (dnode.attributes && dnode.events) {\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\n const events = dnode.events;\n Object.keys(events).forEach((event) => {\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\n });\n }\n else {\n updated =\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\n updated;\n }\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\n const instanceData = widgetInstanceMap.get(parentInstance);\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\n }\n }\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\n }\n }\n}\nfunction addDeferredProperties(vnode, projectionOptions) {\n // transfer any properties that have been passed - as these must be decorated properties\n vnode.decoratedDeferredProperties = vnode.properties;\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\n projectorState.deferredRenderCallbacks.push(() => {\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\n vnode.properties = properties;\n });\n}\nfunction runDeferredRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectorState.deferredRenderCallbacks.length) {\n if (projectionOptions.sync) {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n global.requestAnimationFrame(() => {\n while (projectorState.deferredRenderCallbacks.length) {\n const callback = projectorState.deferredRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction runAfterRenderCallbacks(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n }\n else {\n if (global.requestIdleCallback) {\n global.requestIdleCallback(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n else {\n setTimeout(() => {\n while (projectorState.afterRenderCallbacks.length) {\n const callback = projectorState.afterRenderCallbacks.shift();\n callback && callback();\n }\n });\n }\n }\n}\nfunction scheduleRender(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n if (projectionOptions.sync) {\n render(projectionOptions);\n }\n else if (projectorState.renderScheduled === undefined) {\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\n render(projectionOptions);\n });\n }\n}\nfunction render(projectionOptions) {\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\n projectorState.renderScheduled = undefined;\n const renderQueue = projectorState.renderQueue;\n const renders = [...renderQueue];\n projectorState.renderQueue = [];\n renders.sort((a, b) => a.depth - b.depth);\n const previouslyRendered = [];\n while (renders.length) {\n const { instance } = renders.shift();\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\n previouslyRendered.push(instance);\n const { parentVNode, dnode } = instanceMap.get(instance);\n const instanceData = widgetInstanceMap.get(instance);\n const nextSiblings = nextSiblingMap.get(instance);\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\n }\n }\n runAfterRenderCallbacks(projectionOptions);\n runDeferredRenderCallbacks(projectionOptions);\n}\nexport const dom = {\n append: function (parentNode, instance, projectionOptions = {}) {\n const instanceData = widgetInstanceMap.get(instance);\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\n const projectorState = {\n afterRenderCallbacks: [],\n deferredRenderCallbacks: [],\n nodeMap: new WeakMap(),\n renderScheduled: undefined,\n renderQueue: [],\n merge: projectionOptions.merge || false,\n mergeElement: projectionOptions.mergeElement\n };\n projectorStateMap.set(instance, projectorState);\n finalProjectorOptions.rootNode = parentNode;\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\n const node = toInternalWNode(instance, instanceData);\n instanceMap.set(instance, { dnode: node, parentVNode });\n instanceData.invalidate = () => {\n instanceData.dirty = true;\n if (instanceData.rendering === false) {\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\n scheduleRender(finalProjectorOptions);\n }\n };\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\n projectorState.afterRenderCallbacks.push(() => {\n instanceData.onAttach();\n });\n runDeferredRenderCallbacks(finalProjectorOptions);\n runAfterRenderCallbacks(finalProjectorOptions);\n return {\n domNode: finalProjectorOptions.rootNode\n };\n },\n create: function (instance, projectionOptions) {\n return this.append(document.createElement('div'), instance, projectionOptions);\n },\n merge: function (element, instance, projectionOptions = {}) {\n projectionOptions.merge = true;\n projectionOptions.mergeElement = element;\n const projection = this.append(element.parentNode, instance, projectionOptions);\n const projectorState = projectorStateMap.get(instance);\n projectorState.merge = false;\n return projection;\n }\n};\n//# sourceMappingURL=vdom.mjs.map" }, { "id": "./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", @@ -4870,7 +4887,7 @@ "name": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "index": 1, "index2": 41, - "size": 273, + "size": 283, "cacheable": true, "built": true, "optional": false, @@ -4900,7 +4917,7 @@ "providedExports": null, "optimizationBailout": [], "depth": 1, - "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n" + "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\n\nvar defaultExport = widgetFactory.default;\ndefaultExport && registerCustomElement(defaultExport);\n\n" }, { "id": "./node_modules/process/browser.js", @@ -4917,21 +4934,21 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "issuerId": "./node_modules/@dojo/has/has.mjs", - "issuerName": "./node_modules/@dojo/has/has.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "issuerId": "./node_modules/@dojo/framework/has/has.mjs", + "issuerName": "./node_modules/@dojo/framework/has/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "process", - "loc": "1:0-37" + "loc": "1:0-40" } ], "usedExports": true, @@ -4955,18 +4972,18 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -4981,19 +4998,19 @@ "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/widget-core/mixins/Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -5001,7 +5018,6 @@ ], "usedExports": [ "__decorate", - "__metadata", "__rest" ], "providedExports": [ @@ -5042,30 +5058,30 @@ "menu" ], "assets": [], - "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "issuerId": "./node_modules/@dojo/shim/global.mjs", - "issuerName": "./node_modules/@dojo/shim/global.mjs", + "issuer": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/global.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/global.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/global.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/shim/global.mjs", - "module": "./node_modules/@dojo/shim/global.mjs", - "moduleName": "./node_modules/@dojo/shim/global.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/shim/global.mjs", + "module": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/global.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" }, { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/has/has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/webpack-contrib/static-build-loader/index.js??ref--4-0!/Users/bryan/Projects/dojo2/cli-build-widget/test-app/node_modules/@dojo/framework/has/has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" } ], "usedExports": true, @@ -5080,7 +5096,7 @@ "name": "./src/menu/Menu.ts", "index": 2, "index2": 40, - "size": 1419, + "size": 1459, "cacheable": true, "built": true, "optional": false, @@ -5113,7 +5129,7 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { v } from '@dojo/widget-core/d';\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\nimport * as css from './menu.m.css';\nlet Menu = class Menu extends ThemedMixin(WidgetBase) {\n _onSelected(id, data) {\n this._selectedId = id;\n this.properties.onSelected(data);\n this.invalidate();\n }\n render() {\n const items = this.children.map((child, index) => {\n if (child) {\n const properties = {\n onSelected: (data) => {\n this._onSelected(index, data);\n }\n };\n if (this._selectedId !== undefined) {\n properties.selected = index === this._selectedId;\n }\n child.properties = Object.assign({}, child.properties, properties);\n }\n return child;\n });\n return v('nav', { classes: this.theme(css.root) }, [\n v('ol', {\n classes: this.theme(css.menuContainer)\n }, items)\n ]);\n }\n};\nMenu = tslib_1.__decorate([\n customElement({\n tag: 'demo-menu',\n events: ['onSelected']\n }),\n theme(css)\n], Menu);\nexport { Menu };\nexport default Menu;\n" + "source": "import * as tslib_1 from \"tslib\";\nimport { v } from '@dojo/framework/widget-core/d';\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\nimport * as css from './menu.m.css';\nlet Menu = class Menu extends ThemedMixin(WidgetBase) {\n _onSelected(id, data) {\n this._selectedId = id;\n this.properties.onSelected(data);\n this.invalidate();\n }\n render() {\n const items = this.children.map((child, index) => {\n if (child) {\n const properties = {\n onSelected: (data) => {\n this._onSelected(index, data);\n }\n };\n if (this._selectedId !== undefined) {\n properties.selected = index === this._selectedId;\n }\n child.properties = Object.assign({}, child.properties, properties);\n }\n return child;\n });\n return v('nav', { classes: this.theme(css.root) }, [\n v('ol', {\n classes: this.theme(css.menuContainer)\n }, items)\n ]);\n }\n};\nMenu = tslib_1.__decorate([\n customElement({\n tag: 'demo-menu',\n events: ['onSelected']\n }),\n theme(css)\n], Menu);\nexport { Menu };\nexport default Menu;\n" }, { "id": "./src/menu/menu.m.css", diff --git a/test-app/fixtures/unix/test/functional.js b/test-app/fixtures/unix/test/functional.js index 03f5e21..b45b291 100644 --- a/test-app/fixtures/unix/test/functional.js +++ b/test-app/fixtures/unix/test/functional.js @@ -103,4 +103,4 @@ module.exports = __webpack_require__("./tests/functional/main.ts"); /***/ }) /******/ }));; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMGJhYmY2MDU5YmUzOTNmMmEzZGYiLCJ3ZWJwYWNrOi8vLy4vdGVzdHMvZnVuY3Rpb25hbC9hbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7O0FDN0RBIiwiZmlsZSI6ImZ1bmN0aW9uYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCAwYmFiZjYwNTliZTM5M2YyYTNkZiIsImltcG9ydCAnLi9tYWluJztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9dHMmaW5zdGFuY2VOYW1lPTBfY3VzdG9tLWVsZW1lbnRzIS4vdGVzdHMvZnVuY3Rpb25hbC9hbGwudHMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZWYzNTAzNjRjNjU4OTg4ZTRiMzMiLCJ3ZWJwYWNrOi8vLy4vdGVzdHMvZnVuY3Rpb25hbC9hbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7O0FDN0RBIiwiZmlsZSI6ImZ1bmN0aW9uYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBlZjM1MDM2NGM2NTg5ODhlNGIzMyIsImltcG9ydCAnLi9tYWluJztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9dHMmaW5zdGFuY2VOYW1lPTBfY3VzdG9tLWVsZW1lbnRzIS4vdGVzdHMvZnVuY3Rpb25hbC9hbGwudHMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/test-app/fixtures/unix/test/unit.js b/test-app/fixtures/unix/test/unit.js index d4685f4..2b91409 100644 --- a/test-app/fixtures/unix/test/unit.js +++ b/test-app/fixtures/unix/test/unit.js @@ -73,15 +73,15 @@ /************************************************************************/ /******/ ({ -/***/ "./node_modules/@dojo/core/Destroyable.js": +/***/ "./node_modules/@dojo/framework/core/Destroyable.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var lang_1 = __webpack_require__("./node_modules/@dojo/core/lang.js"); -var Promise_1 = __webpack_require__("./node_modules/@dojo/shim/Promise.js"); +var lang_1 = __webpack_require__("./node_modules/@dojo/framework/core/lang.js"); +var Promise_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Promise.js"); /** * No operation function to replace own once instance is destoryed */ @@ -142,15 +142,15 @@ exports.default = Destroyable; /***/ }), -/***/ "./node_modules/@dojo/core/Evented.js": +/***/ "./node_modules/@dojo/framework/core/Evented.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); -var Destroyable_1 = __webpack_require__("./node_modules/@dojo/core/Destroyable.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); +var Destroyable_1 = __webpack_require__("./node_modules/@dojo/framework/core/Destroyable.js"); /** * Map of computed regular expressions, keyed by string */ @@ -194,7 +194,7 @@ var Evented = /** @class */ (function (_super) { var _this = this; this.listenersMap.forEach(function (methods, type) { if (isGlobMatch(type, event.type)) { - methods.forEach(function (method) { + tslib_1.__spread(methods).forEach(function (method) { method.call(_this, event); }); } @@ -232,15 +232,15 @@ exports.default = Evented; /***/ }), -/***/ "./node_modules/@dojo/core/lang.js": +/***/ "./node_modules/@dojo/framework/core/lang.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var object_1 = __webpack_require__("./node_modules/@dojo/shim/object.js"); -var object_2 = __webpack_require__("./node_modules/@dojo/shim/object.js"); +var object_1 = __webpack_require__("./node_modules/@dojo/framework/shim/object.js"); +var object_2 = __webpack_require__("./node_modules/@dojo/framework/shim/object.js"); exports.assign = object_2.assign; var slice = Array.prototype.slice; var hasOwnProperty = Object.prototype.hasOwnProperty; @@ -477,7 +477,7 @@ exports.createCompositeHandle = createCompositeHandle; /***/ }), -/***/ "./node_modules/@dojo/has/has.js": +/***/ "./node_modules/@dojo/framework/has/has.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -689,18 +689,18 @@ add('host-node', function () { /***/ }), -/***/ "./node_modules/@dojo/shim/Map.js": +/***/ "./node_modules/@dojo/framework/shim/Map.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var iterator_1 = __webpack_require__("./node_modules/@dojo/shim/iterator.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var object_1 = __webpack_require__("./node_modules/@dojo/shim/object.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -__webpack_require__("./node_modules/@dojo/shim/Symbol.js"); +var iterator_1 = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var object_1 = __webpack_require__("./node_modules/@dojo/framework/shim/object.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +__webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); exports.Map = global_1.default.Map; if (!has_1.default('es6-map')) { exports.Map = (_a = /** @class */ (function () { @@ -812,17 +812,17 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Promise.js": +/***/ "./node_modules/@dojo/framework/shim/Promise.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var queue_1 = __webpack_require__("./node_modules/@dojo/shim/support/queue.js"); -__webpack_require__("./node_modules/@dojo/shim/Symbol.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var queue_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/queue.js"); +__webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); exports.ShimPromise = global_1.default.Promise; exports.isThenable = function isThenable(value) { return value && typeof value.then === 'function'; @@ -1045,17 +1045,17 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Set.js": +/***/ "./node_modules/@dojo/framework/shim/Set.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var iterator_1 = __webpack_require__("./node_modules/@dojo/shim/iterator.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -__webpack_require__("./node_modules/@dojo/shim/Symbol.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var iterator_1 = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +__webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); exports.Set = global_1.default.Set; if (!has_1.default('es6-set')) { exports.Set = (_a = /** @class */ (function () { @@ -1145,15 +1145,15 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Symbol.js": +/***/ "./node_modules/@dojo/framework/shim/Symbol.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var util_1 = __webpack_require__("./node_modules/@dojo/shim/support/util.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var util_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.js"); exports.Symbol = global_1.default.Symbol; if (!has_1.default('es6-symbol')) { /** @@ -1300,17 +1300,17 @@ exports.default = exports.Symbol; /***/ }), -/***/ "./node_modules/@dojo/shim/WeakMap.js": +/***/ "./node_modules/@dojo/framework/shim/WeakMap.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var iterator_1 = __webpack_require__("./node_modules/@dojo/shim/iterator.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -__webpack_require__("./node_modules/@dojo/shim/Symbol.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var iterator_1 = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +__webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); exports.WeakMap = global_1.default.WeakMap; if (!has_1.default('es6-weakmap')) { var DELETED_1 = {}; @@ -1433,18 +1433,18 @@ exports.default = exports.WeakMap; /***/ }), -/***/ "./node_modules/@dojo/shim/array.js": +/***/ "./node_modules/@dojo/framework/shim/array.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var iterator_1 = __webpack_require__("./node_modules/@dojo/shim/iterator.js"); -var number_1 = __webpack_require__("./node_modules/@dojo/shim/number.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -var util_1 = __webpack_require__("./node_modules/@dojo/shim/support/util.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var iterator_1 = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.js"); +var number_1 = __webpack_require__("./node_modules/@dojo/framework/shim/number.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +var util_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.js"); if (has_1.default('es6-array') && has_1.default('es6-array-fill')) { exports.from = global_1.default.Array.from; exports.of = global_1.default.Array.of; @@ -1649,7 +1649,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/global.js": +/***/ "./node_modules/@dojo/framework/shim/global.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1677,14 +1677,14 @@ exports.default = globalObject; /***/ }), -/***/ "./node_modules/@dojo/shim/iterator.js": +/***/ "./node_modules/@dojo/framework/shim/iterator.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -__webpack_require__("./node_modules/@dojo/shim/Symbol.js"); -var string_1 = __webpack_require__("./node_modules/@dojo/shim/string.js"); +__webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); +var string_1 = __webpack_require__("./node_modules/@dojo/framework/shim/string.js"); var staticDone = { done: true, value: undefined }; /** * A class that _shims_ an iterator interface on array like objects. @@ -1803,13 +1803,13 @@ exports.forOf = forOf; /***/ }), -/***/ "./node_modules/@dojo/shim/number.js": +/***/ "./node_modules/@dojo/framework/shim/number.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); /** * The smallest interval between two representable numbers. */ @@ -1870,15 +1870,15 @@ exports.isSafeInteger = isSafeInteger; /***/ }), -/***/ "./node_modules/@dojo/shim/object.js": +/***/ "./node_modules/@dojo/framework/shim/object.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -var Symbol_1 = __webpack_require__("./node_modules/@dojo/shim/Symbol.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +var Symbol_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); if (has_1.default('es6-object')) { var globalObject = global_1.default.Object; exports.assign = globalObject.assign; @@ -1959,16 +1959,16 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/string.js": +/***/ "./node_modules/@dojo/framework/shim/string.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -var util_1 = __webpack_require__("./node_modules/@dojo/shim/support/util.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +var util_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.js"); /** * The minimum location of high surrogates */ @@ -2198,17 +2198,17 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/support/has.js": +/***/ "./node_modules/@dojo/framework/shim/support/has.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/has/has.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/has/has.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); exports.default = has_1.default; -tslib_1.__exportStar(__webpack_require__("./node_modules/@dojo/has/has.js"), exports); +tslib_1.__exportStar(__webpack_require__("./node_modules/@dojo/framework/has/has.js"), exports); /* ECMAScript 6 and 7 Features */ /* Array */ has_1.add('es6-array', function () { @@ -2379,14 +2379,14 @@ var templateObject_1; /***/ }), -/***/ "./node_modules/@dojo/shim/support/queue.js": +/***/ "./node_modules/@dojo/framework/shim/support/queue.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(setImmediate) { Object.defineProperty(exports, "__esModule", { value: true }); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); function executeTask(item) { if (item && item.isActive && item.callback) { item.callback(); @@ -2575,7 +2575,7 @@ exports.queueMicroTask = (function () { /***/ }), -/***/ "./node_modules/@dojo/shim/support/util.js": +/***/ "./node_modules/@dojo/framework/shim/support/util.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2616,16 +2616,16 @@ exports.wrapNative = wrapNative; /***/ }), -/***/ "./node_modules/@dojo/test-extras/harness.js": +/***/ "./node_modules/@dojo/framework/testing/harness.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var assertRender_1 = __webpack_require__("./node_modules/@dojo/test-extras/support/assertRender.js"); -var selector_1 = __webpack_require__("./node_modules/@dojo/test-extras/support/selector.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); +var assertRender_1 = __webpack_require__("./node_modules/@dojo/framework/testing/support/assertRender.js"); +var selector_1 = __webpack_require__("./node_modules/@dojo/framework/testing/support/selector.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); function decorateNodes(dNode) { var hasDeferredProperties = false; function addParent(parent) { @@ -2762,18 +2762,18 @@ exports.default = harness; /***/ }), -/***/ "./node_modules/@dojo/test-extras/support/assertRender.js": +/***/ "./node_modules/@dojo/framework/testing/support/assertRender.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); var diff = __webpack_require__("./node_modules/diff/dist/diff.js"); -var WeakMap_1 = __webpack_require__("./node_modules/@dojo/shim/WeakMap.js"); -var Set_1 = __webpack_require__("./node_modules/@dojo/shim/Set.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); -var array_1 = __webpack_require__("./node_modules/@dojo/shim/array.js"); +var WeakMap_1 = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.js"); +var Set_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Set.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); +var array_1 = __webpack_require__("./node_modules/@dojo/framework/shim/array.js"); var widgetClassCounter = 0; var widgetMap = new WeakMap_1.default(); function replacer(key, value) { @@ -2883,14 +2883,14 @@ exports.default = assertRender; /***/ }), -/***/ "./node_modules/@dojo/test-extras/support/selector.js": +/***/ "./node_modules/@dojo/framework/testing/support/selector.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); var cssSelect = __webpack_require__("./node_modules/css-select-umd/dist/index.js"); exports.parseSelector = function (selector) { var selectors = selector.split(' '); @@ -3000,51 +3000,14 @@ exports.default = select; /***/ }), -/***/ "./node_modules/@dojo/webpack-contrib/css-module-decorator-loader/index.js!./node_modules/css-loader/index.js?{\"modules\":true,\"sourceMap\":true,\"importLoaders\":1,\"localIdentName\":\"[hash:base64:8]\"}!./node_modules/postcss-loader/lib/index.js?{\"ident\":\"postcss\",\"plugins\":[null,{\"version\":\"6.0.23\",\"plugins\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\"postcssPlugin\":\"postcss-cssnext\",\"postcssVersion\":\"6.0.23\"}]}!./node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=css!./src/menu-item/menuItem.m.css": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module -exports.push([module.i, ".sUmUi4Sh {\n\theight: 100%;\n\tdisplay: inline-block;\n}\n\n._2Mk6Rdqa {\n\tcolor: #fff;\n\ttext-decoration: none;\n\tmargin: 0 6.4px;\n\tposition: relative;\n\tdisplay: -webkit-box;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-orient: vertical;\n\t-webkit-box-direction: normal;\n\t -ms-flex-direction: column;\n\t flex-direction: column;\n\t-webkit-box-pack: center;\n\t -ms-flex-pack: center;\n\t justify-content: center;\n\theight: 48px;\n\tcursor: pointer;\n}\n\n._2Mk6Rdqa::after {\n\tdisplay: block;\n\tcontent: \"\";\n\tbackground: #fff;\n\theight: 2px;\n\tposition: absolute;\n\twidth: 100%;\n\tbottom: 0;\n\t-webkit-transition: -webkit-transform .3s ease-out;\n\ttransition: -webkit-transform .3s ease-out;\n\ttransition: transform .3s ease-out;\n\ttransition: transform .3s ease-out, -webkit-transform .3s ease-out;\n\t-webkit-transform: translateY(3px);\n\t transform: translateY(3px);\n}\n\n._1-f3ItOh::after {\n\t-webkit-transform: translateY(0);\n\t transform: translateY(0);\n}\n", "", {"version":3,"sources":["/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/menuItem.m.css"],"names":[],"mappings":"AAAA;CACC,aAAa;CACb,sBAAsB;CACtB;;AAED;CACC,YAAY;CACZ,sBAAsB;CACtB,gBAAgB;CAChB,mBAAmB;CACnB,qBAAqB;CACrB,qBAAqB;CACrB,cAAc;CACd,6BAA6B;CAC7B,8BAA8B;KAC1B,2BAA2B;SACvB,uBAAuB;CAC/B,yBAAyB;KACrB,sBAAsB;SAClB,wBAAwB;CAChC,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,eAAe;CACf,YAAY;CACZ,iBAAiB;CACjB,YAAY;CACZ,mBAAmB;CACnB,YAAY;CACZ,UAAU;CACV,mDAAmD;CACnD,2CAA2C;CAC3C,mCAAmC;CACnC,mEAAmE;CACnE,mCAAmC;SAC3B,2BAA2B;CACnC;;AAED;CACC,iCAAiC;SACzB,yBAAyB;CACjC","file":"menuItem.m.css","sourcesContent":[".root {\n\theight: 100%;\n\tdisplay: inline-block;\n}\n\n.item {\n\tcolor: #fff;\n\ttext-decoration: none;\n\tmargin: 0 6.4px;\n\tposition: relative;\n\tdisplay: -webkit-box;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-orient: vertical;\n\t-webkit-box-direction: normal;\n\t -ms-flex-direction: column;\n\t flex-direction: column;\n\t-webkit-box-pack: center;\n\t -ms-flex-pack: center;\n\t justify-content: center;\n\theight: 48px;\n\tcursor: pointer;\n}\n\n.item::after {\n\tdisplay: block;\n\tcontent: \"\";\n\tbackground: #fff;\n\theight: 2px;\n\tposition: absolute;\n\twidth: 100%;\n\tbottom: 0;\n\t-webkit-transition: -webkit-transform .3s ease-out;\n\ttransition: -webkit-transform .3s ease-out;\n\ttransition: transform .3s ease-out;\n\ttransition: transform .3s ease-out, -webkit-transform .3s ease-out;\n\t-webkit-transform: translateY(3px);\n\t transform: translateY(3px);\n}\n\n.selected::after {\n\t-webkit-transform: translateY(0);\n\t transform: translateY(0);\n}\n"],"sourceRoot":""}]); - -// exports -exports.locals = {" _key": "test-app/menuItem", - "root": "sUmUi4Sh", - "item": "_2Mk6Rdqa", - "selected": "_1-f3ItOh" -}; - -/***/ }), - -/***/ "./node_modules/@dojo/webpack-contrib/css-module-decorator-loader/index.js!./node_modules/css-loader/index.js?{\"modules\":true,\"sourceMap\":true,\"importLoaders\":1,\"localIdentName\":\"[hash:base64:8]\"}!./node_modules/postcss-loader/lib/index.js?{\"ident\":\"postcss\",\"plugins\":[null,{\"version\":\"6.0.23\",\"plugins\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\"postcssPlugin\":\"postcss-cssnext\",\"postcssVersion\":\"6.0.23\"}]}!./node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=css!./src/menu/menu.m.css": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module -exports.push([module.i, "._3bA6jdSn {\n\twidth: 100%;\n\ttop: 0;\n\theight: 48px;\n\tz-index: 100;\n\tbackground-color: #1d1f20;\n}\n\n._1eoGfqku {\n\theight: 100%;\n\tmargin: 0 auto;\n}\n", "", {"version":3,"sources":["/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/menu.m.css"],"names":[],"mappings":"AAAA;CACC,YAAY;CACZ,OAAO;CACP,aAAa;CACb,aAAa;CACb,0BAA0B;CAC1B;;AAED;CACC,aAAa;CACb,eAAe;CACf","file":"menu.m.css","sourcesContent":[".root {\n\twidth: 100%;\n\ttop: 0;\n\theight: 48px;\n\tz-index: 100;\n\tbackground-color: #1d1f20;\n}\n\n.menuContainer {\n\theight: 100%;\n\tmargin: 0 auto;\n}\n"],"sourceRoot":""}]); - -// exports -exports.locals = {" _key": "test-app/menu", - "root": "_3bA6jdSn", - "menuContainer": "_1eoGfqku" -}; - -/***/ }), - -/***/ "./node_modules/@dojo/widget-core/Injector.js": +/***/ "./node_modules/@dojo/framework/widget-core/Injector.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Evented_1 = __webpack_require__("./node_modules/@dojo/core/Evented.js"); +var Evented_1 = __webpack_require__("./node_modules/@dojo/framework/core/Evented.js"); var Injector = /** @class */ (function (_super) { tslib_1.__extends(Injector, _super); function Injector(payload) { @@ -3072,15 +3035,15 @@ exports.default = Injector; /***/ }), -/***/ "./node_modules/@dojo/widget-core/NodeHandler.js": +/***/ "./node_modules/@dojo/framework/widget-core/NodeHandler.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Evented_1 = __webpack_require__("./node_modules/@dojo/core/Evented.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); +var Evented_1 = __webpack_require__("./node_modules/@dojo/framework/core/Evented.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); /** * Enum to identify the type of event. * Listening to 'Projector' will notify when projector is created or updated @@ -3125,17 +3088,17 @@ exports.default = NodeHandler; /***/ }), -/***/ "./node_modules/@dojo/widget-core/Registry.js": +/***/ "./node_modules/@dojo/framework/widget-core/Registry.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Promise_1 = __webpack_require__("./node_modules/@dojo/shim/Promise.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); -var Symbol_1 = __webpack_require__("./node_modules/@dojo/shim/Symbol.js"); -var Evented_1 = __webpack_require__("./node_modules/@dojo/core/Evented.js"); +var Promise_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Promise.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); +var Symbol_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); +var Evented_1 = __webpack_require__("./node_modules/@dojo/framework/core/Evented.js"); /** * Widget base symbol type */ @@ -3258,16 +3221,16 @@ exports.default = Registry; /***/ }), -/***/ "./node_modules/@dojo/widget-core/RegistryHandler.js": +/***/ "./node_modules/@dojo/framework/widget-core/RegistryHandler.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); -var Evented_1 = __webpack_require__("./node_modules/@dojo/core/Evented.js"); -var Registry_1 = __webpack_require__("./node_modules/@dojo/widget-core/Registry.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); +var Evented_1 = __webpack_require__("./node_modules/@dojo/framework/core/Evented.js"); +var Registry_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.js"); var RegistryHandler = /** @class */ (function (_super) { tslib_1.__extends(RegistryHandler, _super); function RegistryHandler() { @@ -3351,22 +3314,22 @@ exports.default = RegistryHandler; /***/ }), -/***/ "./node_modules/@dojo/widget-core/WidgetBase.js": +/***/ "./node_modules/@dojo/framework/widget-core/WidgetBase.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); -var WeakMap_1 = __webpack_require__("./node_modules/@dojo/shim/WeakMap.js"); -var Symbol_1 = __webpack_require__("./node_modules/@dojo/shim/Symbol.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); -var diff_1 = __webpack_require__("./node_modules/@dojo/widget-core/diff.js"); -var RegistryHandler_1 = __webpack_require__("./node_modules/@dojo/widget-core/RegistryHandler.js"); -var NodeHandler_1 = __webpack_require__("./node_modules/@dojo/widget-core/NodeHandler.js"); -var vdom_1 = __webpack_require__("./node_modules/@dojo/widget-core/vdom.js"); -var Registry_1 = __webpack_require__("./node_modules/@dojo/widget-core/Registry.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); +var WeakMap_1 = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.js"); +var Symbol_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); +var diff_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.js"); +var RegistryHandler_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/RegistryHandler.js"); +var NodeHandler_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/NodeHandler.js"); +var vdom_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.js"); +var Registry_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.js"); var decoratorMap = new Map_1.default(); var boundAuto = diff_1.auto.bind(null); exports.noBind = Symbol_1.default.for('dojoNoBind'); @@ -3474,7 +3437,7 @@ var WidgetBase = /** @class */ (function () { if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) { var allProperties = tslib_1.__spread(propertyNames, Object.keys(this._properties)); var checkedProperties = []; - var diffPropertyResults = {}; + var diffPropertyResults_1 = {}; var runReactions = false; for (var i = 0; i < allProperties.length; i++) { var propertyName = allProperties[i]; @@ -3493,7 +3456,7 @@ var WidgetBase = /** @class */ (function () { changedPropertyKeys.push(propertyName); } if (propertyName in properties) { - diffPropertyResults[propertyName] = result.value; + diffPropertyResults_1[propertyName] = result.value; } } } @@ -3503,18 +3466,24 @@ var WidgetBase = /** @class */ (function () { changedPropertyKeys.push(propertyName); } if (propertyName in properties) { - diffPropertyResults[propertyName] = result.value; + diffPropertyResults_1[propertyName] = result.value; } } } if (runReactions) { - this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach(function (args, reaction) { - if (args.changed) { - reaction.call(_this, args.previousProperties, args.newProperties); + var reactionFunctions = this.getDecorator('diffReaction'); + var executedReactions_1 = []; + reactionFunctions.forEach(function (_a) { + var reaction = _a.reaction, propertyName = _a.propertyName; + var propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1; + var reactionRun = executedReactions_1.indexOf(reaction) !== -1; + if (propertyChanged && !reactionRun) { + reaction.call(_this, _this._properties, diffPropertyResults_1); + executedReactions_1.push(reaction); } }); } - this._properties = diffPropertyResults; + this._properties = diffPropertyResults_1; this._changedPropertyKeys = changedPropertyKeys; } else { @@ -3629,28 +3598,6 @@ var WidgetBase = /** @class */ (function () { this._decoratorCache.set(decoratorKey, allDecorators); return allDecorators; }; - WidgetBase.prototype._mapDiffPropertyReactions = function (newProperties, changedPropertyKeys) { - var _this = this; - var reactionFunctions = this.getDecorator('diffReaction'); - return reactionFunctions.reduce(function (reactionPropertyMap, _a) { - var reaction = _a.reaction, propertyName = _a.propertyName; - var reactionArguments = reactionPropertyMap.get(reaction); - if (reactionArguments === undefined) { - reactionArguments = { - previousProperties: {}, - newProperties: {}, - changed: false - }; - } - reactionArguments.previousProperties[propertyName] = _this._properties[propertyName]; - reactionArguments.newProperties[propertyName] = newProperties[propertyName]; - if (changedPropertyKeys.indexOf(propertyName) !== -1) { - reactionArguments.changed = true; - } - reactionPropertyMap.set(reaction, reactionArguments); - return reactionPropertyMap; - }, new Map_1.default()); - }; /** * Binds unbound property functions to the specified `bind` property * @@ -3720,7 +3667,7 @@ var WidgetBase = /** @class */ (function () { var _this = this; var afterRenders = this.getDecorator('afterRender'); if (afterRenders.length > 0) { - return afterRenders.reduce(function (dNode, afterRenderFunction) { + dNode = afterRenders.reduce(function (dNode, afterRenderFunction) { return afterRenderFunction.call(_this, dNode); }, dNode); } @@ -3761,7 +3708,7 @@ exports.default = WidgetBase; /***/ }), -/***/ "./node_modules/@dojo/widget-core/animations/cssTransitions.js": +/***/ "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3833,14 +3780,14 @@ exports.default = { /***/ }), -/***/ "./node_modules/@dojo/widget-core/d.js": +/***/ "./node_modules/@dojo/framework/widget-core/d.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Symbol_1 = __webpack_require__("./node_modules/@dojo/shim/Symbol.js"); +var Symbol_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); /** * The symbol identifier for a WNode type */ @@ -3964,13 +3911,13 @@ exports.dom = dom; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/afterRender.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/afterRender.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); function afterRender(method) { return handleDecorator_1.handleDecorator(function (target, propertyKey) { target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method); @@ -3982,14 +3929,14 @@ exports.default = afterRender; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/alwaysRender.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); -var beforeProperties_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); +var beforeProperties_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.js"); function alwaysRender() { return handleDecorator_1.handleDecorator(function (target, propertyKey) { beforeProperties_1.beforeProperties(function () { @@ -4003,13 +3950,13 @@ exports.default = alwaysRender; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/beforeProperties.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); function beforeProperties(method) { return handleDecorator_1.handleDecorator(function (target, propertyKey) { target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method); @@ -4021,14 +3968,14 @@ exports.default = beforeProperties; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/customElement.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/customElement.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var registerCustomElement_1 = __webpack_require__("./node_modules/@dojo/widget-core/registerCustomElement.js"); -var Registry_1 = __webpack_require__("./node_modules/@dojo/widget-core/Registry.js"); +var registerCustomElement_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/registerCustomElement.js"); +var Registry_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.js"); /** * This Decorator is provided properties that define the behavior of a custom element, and * registers that custom element. @@ -4052,13 +3999,14 @@ exports.default = customElement; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/diffProperty.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); +var diff_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.js"); /** * Decorator that can be used to register a function as a specific property diff * @@ -4067,6 +4015,7 @@ var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/de * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM */ function diffProperty(propertyName, diffFunction, reactionFunction) { + if (diffFunction === void 0) { diffFunction = diff_1.auto; } return handleDecorator_1.handleDecorator(function (target, propertyKey) { target.addDecorator("diffProperty:" + propertyName, diffFunction.bind(null)); target.addDecorator('registeredDiffProperty', propertyName); @@ -4084,7 +4033,7 @@ exports.default = diffProperty; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/handleDecorator.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4112,15 +4061,15 @@ exports.default = handleDecorator; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/inject.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/inject.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var WeakMap_1 = __webpack_require__("./node_modules/@dojo/shim/WeakMap.js"); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); -var beforeProperties_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.js"); +var WeakMap_1 = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); +var beforeProperties_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.js"); /** * Map of instances against registered injectors. */ @@ -4161,13 +4110,13 @@ exports.default = inject; /***/ }), -/***/ "./node_modules/@dojo/widget-core/diff.js": +/***/ "./node_modules/@dojo/framework/widget-core/diff.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var Registry_1 = __webpack_require__("./node_modules/@dojo/widget-core/Registry.js"); +var Registry_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.js"); function isObjectOrArray(value) { return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value); } @@ -4241,18 +4190,18 @@ exports.auto = auto; /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Projector.js": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Projector.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var lang_1 = __webpack_require__("./node_modules/@dojo/core/lang.js"); -var cssTransitions_1 = __webpack_require__("./node_modules/@dojo/widget-core/animations/cssTransitions.js"); -var afterRender_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/afterRender.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); -var vdom_1 = __webpack_require__("./node_modules/@dojo/widget-core/vdom.js"); +var lang_1 = __webpack_require__("./node_modules/@dojo/framework/core/lang.js"); +var cssTransitions_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/animations/cssTransitions.js"); +var afterRender_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/afterRender.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); +var vdom_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.js"); /** * Represents the attach state of the projector */ @@ -4412,10 +4361,7 @@ function ProjectorMixin(Base) { return this._attachHandle; }; tslib_1.__decorate([ - afterRender_1.afterRender(), - tslib_1.__metadata("design:type", Function), - tslib_1.__metadata("design:paramtypes", [Object]), - tslib_1.__metadata("design:returntype", void 0) + afterRender_1.afterRender() ], Projector.prototype, "afterRender", null); return Projector; }(Base)); @@ -4427,18 +4373,18 @@ exports.default = ProjectorMixin; /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Themed.js": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Themed.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Injector_1 = __webpack_require__("./node_modules/@dojo/widget-core/Injector.js"); -var inject_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/inject.js"); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); -var diffProperty_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/diffProperty.js"); -var diff_1 = __webpack_require__("./node_modules/@dojo/widget-core/diff.js"); +var Injector_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Injector.js"); +var inject_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/inject.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); +var diffProperty_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/diffProperty.js"); +var diff_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.js"); var THEME_KEY = ' _key'; exports.INJECTED_THEME_KEY = Symbol('theme'); /** @@ -4562,10 +4508,7 @@ function ThemedMixin(Base) { }; tslib_1.__decorate([ diffProperty_1.diffProperty('theme', diff_1.shallow), - diffProperty_1.diffProperty('extraClasses', diff_1.shallow), - tslib_1.__metadata("design:type", Function), - tslib_1.__metadata("design:paramtypes", []), - tslib_1.__metadata("design:returntype", void 0) + diffProperty_1.diffProperty('extraClasses', diff_1.shallow) ], Themed.prototype, "onPropertiesChanged", null); Themed = tslib_1.__decorate([ inject_1.inject({ @@ -4588,20 +4531,20 @@ exports.default = ThemedMixin; /***/ }), -/***/ "./node_modules/@dojo/widget-core/registerCustomElement.js": +/***/ "./node_modules/@dojo/framework/widget-core/registerCustomElement.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var WidgetBase_1 = __webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.js"); -var Projector_1 = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Projector.js"); -var array_1 = __webpack_require__("./node_modules/@dojo/shim/array.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var Themed_1 = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.js"); -var alwaysRender_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/alwaysRender.js"); +var WidgetBase_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.js"); +var Projector_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Projector.js"); +var array_1 = __webpack_require__("./node_modules/@dojo/framework/shim/array.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var Themed_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.js"); +var alwaysRender_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.js"); var CustomElementChildType; (function (CustomElementChildType) { CustomElementChildType["DOJO"] = "DOJO"; @@ -4846,24 +4789,26 @@ exports.default = register; /***/ }), -/***/ "./node_modules/@dojo/widget-core/vdom.js": +/***/ "./node_modules/@dojo/framework/widget-core/vdom.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var array_1 = __webpack_require__("./node_modules/@dojo/shim/array.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); -var Registry_1 = __webpack_require__("./node_modules/@dojo/widget-core/Registry.js"); -var WeakMap_1 = __webpack_require__("./node_modules/@dojo/shim/WeakMap.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var array_1 = __webpack_require__("./node_modules/@dojo/framework/shim/array.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); +var Registry_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.js"); +var WeakMap_1 = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.js"); var NAMESPACE_W3 = 'http://www.w3.org/'; var NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg'; var NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink'; var emptyArray = []; +var nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click']; exports.widgetInstanceMap = new WeakMap_1.default(); var instanceMap = new WeakMap_1.default(); +var nextSiblingMap = new WeakMap_1.default(); var projectorStateMap = new WeakMap_1.default(); function same(dnode1, dnode2) { if (d_1.isVNode(dnode1) && d_1.isVNode(dnode2)) { @@ -4981,7 +4926,7 @@ function buildPreviousProperties(domNode, previous, current) { }, {}); return newProperties; } -function focusNode(propValue, previousValue, domNode, projectionOptions) { +function nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) { var result; if (typeof propValue === 'function') { result = propValue(); @@ -4992,7 +4937,7 @@ function focusNode(propValue, previousValue, domNode, projectionOptions) { if (result === true) { var projectorState = projectorStateMap.get(projectionOptions.projectorInstance); projectorState.deferredRenderCallbacks.push(function () { - domNode.focus(); + domNode[propName](); }); } } @@ -5090,8 +5035,8 @@ function updateProperties(domNode, previousProperties, properties, projectionOpt } } } - else if (propName === 'focus') { - focusNode(propValue, previousValue, domNode, projectionOptions); + else if (nodeOperations.indexOf(propName) !== -1) { + nodeOperation(propName, propValue, previousValue, domNode, projectionOptions); } else if (propName === 'styles') { var styleNames = Object.keys(propValue); @@ -5248,7 +5193,8 @@ function nodeAdded(dnode, transitions) { } function nodeToRemove(dnode, transitions, projectionOptions) { if (d_1.isWNode(dnode)) { - var rendered = dnode.rendered || emptyArray; + var item = instanceMap.get(dnode.instance); + var rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray; if (dnode.instance) { var instanceData = exports.widgetInstanceMap.get(dnode.instance); instanceData.onDetach(); @@ -5312,7 +5258,7 @@ function checkDistinguishable(childNodes, indexToCheck, parentInstance) { } } } -function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) { +function updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) { oldChildren = oldChildren || emptyArray; newChildren = newChildren; var oldChildrenLength = oldChildren.length; @@ -5332,38 +5278,49 @@ function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, p addDeferredProperties(newChild, projectionOptions); } if (oldChild !== undefined && same(oldChild, newChild)) { - textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated; oldIndex++; newIndex++; + textUpdated = + updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated; return "continue"; } var findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1); var addChild = function () { var insertBeforeDomNode = undefined; + var childrenArray = oldChildren; + var nextIndex = oldIndex + 1; var child = oldChildren[oldIndex]; + if (!child) { + child = siblings[0]; + nextIndex = 1; + childrenArray = siblings; + } if (child) { - var nextIndex = oldIndex + 1; var insertBeforeChildren = [child]; while (insertBeforeChildren.length) { var insertBefore = insertBeforeChildren.shift(); if (d_1.isWNode(insertBefore)) { - if (insertBefore.rendered) { - insertBeforeChildren.push.apply(insertBeforeChildren, tslib_1.__spread(insertBefore.rendered)); + var item = instanceMap.get(insertBefore.instance); + if (item && item.dnode.rendered) { + insertBeforeChildren.push.apply(insertBeforeChildren, tslib_1.__spread(item.dnode.rendered)); } } else { if (insertBefore.domNode) { + if (insertBefore.domNode.parentElement !== parentVNode.domNode) { + break; + } insertBeforeDomNode = insertBefore.domNode; break; } } - if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) { - insertBeforeChildren.push(oldChildren[nextIndex]); + if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) { + insertBeforeChildren.push(childrenArray[nextIndex]); nextIndex++; } } } - createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance); + createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance); nodeAdded(newChild, transitions); var indexToCheck = newIndex; projectorState.afterRenderCallbacks.push(function () { @@ -5437,6 +5394,7 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i projectionOptions = tslib_1.__assign({}, projectionOptions, { depth: projectionOptions.depth + 1 }); for (var i = 0; i < children.length; i++) { var child = children[i]; + var nextSiblings = children.slice(i + 1); if (d_1.isVNode(child)) { if (projectorState.merge && childNodes) { var domElement = undefined; @@ -5447,10 +5405,10 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i } } } - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance); } else { - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes); } nodeAdded(child, transitions); } @@ -5478,7 +5436,7 @@ function initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOpt } dnode.inserted = true; } -function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) { +function createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) { var domNode; var projectorState = projectorStateMap.get(projectionOptions.projectorInstance); if (d_1.isWNode(dnode)) { @@ -5493,6 +5451,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } var instance_1 = new widgetConstructor(); dnode.instance = instance_1; + nextSiblingMap.set(instance_1, nextSiblings); var instanceData_1 = exports.widgetInstanceMap.get(instance_1); instanceData_1.invalidate = function () { instanceData_1.dirty = true; @@ -5573,7 +5532,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } } } -function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) { +function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) { if (d_1.isWNode(dnode)) { var instance = previous.instance; var _a = instanceMap.get(instance), parentVNode_1 = _a.parentVNode, node = _a.dnode; @@ -5583,12 +5542,13 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan instance.__setCoreProperties__(dnode.coreProperties); instance.__setChildren__(dnode.children); instance.__setProperties__(dnode.properties); + nextSiblingMap.set(instance, nextSiblings); dnode.instance = instance; if (instanceData.dirty === true) { var rendered = instance.__render__(); instanceData.rendering = false; dnode.rendered = filterAndDecorateChildren(rendered, instance); - updateChildren(parentVNode_1, previousRendered, dnode.rendered, instance, projectionOptions); + updateChildren(parentVNode_1, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions); } else { instanceData.rendering = false; @@ -5621,7 +5581,7 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan var children = filterAndDecorateChildren(dnode.children, parentInstance); dnode.children = children; updated = - updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated; + updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated; } var previousProperties_1 = buildPreviousProperties(domNode_2, previous, dnode); if (dnode.attributes && dnode.events) { @@ -5732,7 +5692,8 @@ function render(projectionOptions) { previouslyRendered.push(instance); var _a = instanceMap.get(instance), parentVNode = _a.parentVNode, dnode = _a.dnode; var instanceData = exports.widgetInstanceMap.get(instance); - updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance); + var nextSiblings = nextSiblingMap.get(instance); + updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings); } } runAfterRenderCallbacks(projectionOptions); @@ -5764,7 +5725,7 @@ exports.dom = { scheduleRender(finalProjectorOptions); } }; - updateDom(node, node, finalProjectorOptions, parentVNode, instance); + updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []); projectorState.afterRenderCallbacks.push(function () { instanceData.onAttach(); }); @@ -5789,6 +5750,43 @@ exports.dom = { }; +/***/ }), + +/***/ "./node_modules/@dojo/webpack-contrib/css-module-decorator-loader/index.js!./node_modules/css-loader/index.js?{\"modules\":true,\"sourceMap\":true,\"importLoaders\":1,\"localIdentName\":\"[hash:base64:8]\"}!./node_modules/postcss-loader/lib/index.js?{\"ident\":\"postcss\",\"plugins\":[null,{\"version\":\"6.0.23\",\"plugins\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\"postcssPlugin\":\"postcss-cssnext\",\"postcssVersion\":\"6.0.23\"}]}!./node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=css!./src/menu-item/menuItem.m.css": +/***/ (function(module, exports, __webpack_require__) { + +exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(true); +// imports + + +// module +exports.push([module.i, ".sUmUi4Sh {\n\theight: 100%;\n\tdisplay: inline-block;\n}\n\n._2Mk6Rdqa {\n\tcolor: #fff;\n\ttext-decoration: none;\n\tmargin: 0 6.4px;\n\tposition: relative;\n\tdisplay: -webkit-box;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-orient: vertical;\n\t-webkit-box-direction: normal;\n\t -ms-flex-direction: column;\n\t flex-direction: column;\n\t-webkit-box-pack: center;\n\t -ms-flex-pack: center;\n\t justify-content: center;\n\theight: 48px;\n\tcursor: pointer;\n}\n\n._2Mk6Rdqa::after {\n\tdisplay: block;\n\tcontent: \"\";\n\tbackground: #fff;\n\theight: 2px;\n\tposition: absolute;\n\twidth: 100%;\n\tbottom: 0;\n\t-webkit-transition: -webkit-transform .3s ease-out;\n\ttransition: -webkit-transform .3s ease-out;\n\ttransition: transform .3s ease-out;\n\ttransition: transform .3s ease-out, -webkit-transform .3s ease-out;\n\t-webkit-transform: translateY(3px);\n\t transform: translateY(3px);\n}\n\n._1-f3ItOh::after {\n\t-webkit-transform: translateY(0);\n\t transform: translateY(0);\n}\n", "", {"version":3,"sources":["/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/menuItem.m.css"],"names":[],"mappings":"AAAA;CACC,aAAa;CACb,sBAAsB;CACtB;;AAED;CACC,YAAY;CACZ,sBAAsB;CACtB,gBAAgB;CAChB,mBAAmB;CACnB,qBAAqB;CACrB,qBAAqB;CACrB,cAAc;CACd,6BAA6B;CAC7B,8BAA8B;KAC1B,2BAA2B;SACvB,uBAAuB;CAC/B,yBAAyB;KACrB,sBAAsB;SAClB,wBAAwB;CAChC,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,eAAe;CACf,YAAY;CACZ,iBAAiB;CACjB,YAAY;CACZ,mBAAmB;CACnB,YAAY;CACZ,UAAU;CACV,mDAAmD;CACnD,2CAA2C;CAC3C,mCAAmC;CACnC,mEAAmE;CACnE,mCAAmC;SAC3B,2BAA2B;CACnC;;AAED;CACC,iCAAiC;SACzB,yBAAyB;CACjC","file":"menuItem.m.css","sourcesContent":[".root {\n\theight: 100%;\n\tdisplay: inline-block;\n}\n\n.item {\n\tcolor: #fff;\n\ttext-decoration: none;\n\tmargin: 0 6.4px;\n\tposition: relative;\n\tdisplay: -webkit-box;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-orient: vertical;\n\t-webkit-box-direction: normal;\n\t -ms-flex-direction: column;\n\t flex-direction: column;\n\t-webkit-box-pack: center;\n\t -ms-flex-pack: center;\n\t justify-content: center;\n\theight: 48px;\n\tcursor: pointer;\n}\n\n.item::after {\n\tdisplay: block;\n\tcontent: \"\";\n\tbackground: #fff;\n\theight: 2px;\n\tposition: absolute;\n\twidth: 100%;\n\tbottom: 0;\n\t-webkit-transition: -webkit-transform .3s ease-out;\n\ttransition: -webkit-transform .3s ease-out;\n\ttransition: transform .3s ease-out;\n\ttransition: transform .3s ease-out, -webkit-transform .3s ease-out;\n\t-webkit-transform: translateY(3px);\n\t transform: translateY(3px);\n}\n\n.selected::after {\n\t-webkit-transform: translateY(0);\n\t transform: translateY(0);\n}\n"],"sourceRoot":""}]); + +// exports +exports.locals = {" _key": "test-app/menuItem", + "root": "sUmUi4Sh", + "item": "_2Mk6Rdqa", + "selected": "_1-f3ItOh" +}; + +/***/ }), + +/***/ "./node_modules/@dojo/webpack-contrib/css-module-decorator-loader/index.js!./node_modules/css-loader/index.js?{\"modules\":true,\"sourceMap\":true,\"importLoaders\":1,\"localIdentName\":\"[hash:base64:8]\"}!./node_modules/postcss-loader/lib/index.js?{\"ident\":\"postcss\",\"plugins\":[null,{\"version\":\"6.0.23\",\"plugins\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\"postcssPlugin\":\"postcss-cssnext\",\"postcssVersion\":\"6.0.23\"}]}!./node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=css!./src/menu/menu.m.css": +/***/ (function(module, exports, __webpack_require__) { + +exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(true); +// imports + + +// module +exports.push([module.i, "._3bA6jdSn {\n\twidth: 100%;\n\ttop: 0;\n\theight: 48px;\n\tz-index: 100;\n\tbackground-color: #1d1f20;\n}\n\n._1eoGfqku {\n\theight: 100%;\n\tmargin: 0 auto;\n}\n", "", {"version":3,"sources":["/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/menu.m.css"],"names":[],"mappings":"AAAA;CACC,YAAY;CACZ,OAAO;CACP,aAAa;CACb,aAAa;CACb,0BAA0B;CAC1B;;AAED;CACC,aAAa;CACb,eAAe;CACf","file":"menu.m.css","sourcesContent":[".root {\n\twidth: 100%;\n\ttop: 0;\n\theight: 48px;\n\tz-index: 100;\n\tbackground-color: #1d1f20;\n}\n\n.menuContainer {\n\theight: 100%;\n\tmargin: 0 auto;\n}\n"],"sourceRoot":""}]); + +// exports +exports.locals = {" _key": "test-app/menu", + "root": "_3bA6jdSn", + "menuContainer": "_1eoGfqku" +}; + /***/ }), /***/ "./node_modules/css-loader/lib/css-base.js": @@ -13260,7 +13258,7 @@ module.exports = g; /***/ (function(module, exports, __webpack_require__) { "use strict"; -var cov_6vl6bll1n=function(){var path="/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/MenuItem.ts",hash="dffc074c416ffe5aed89b57b2d8a809a71253a52",global=new Function('return this')(),gcv="__coverage__",coverageData={path:"/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/MenuItem.ts",statementMap:{"0":{start:{line:2,column:0},end:{line:2,column:62}},"1":{start:{line:3,column:14},end:{line:3,column:30}},"2":{start:{line:4,column:10},end:{line:4,column:40}},"3":{start:{line:5,column:22},end:{line:5,column:75}},"4":{start:{line:6,column:15},end:{line:6,column:57}},"5":{start:{line:7,column:19},end:{line:7,column:58}},"6":{start:{line:8,column:10},end:{line:8,column:37}},"7":{start:{line:9,column:30},end:{line:36,column:48}},"8":{start:{line:10,column:4},end:{line:10,column:40}},"9":{start:{line:12,column:8},end:{line:12,column:72}},"10":{start:{line:14,column:4},end:{line:16,column:6}},"11":{start:{line:15,column:8},end:{line:15,column:87}},"12":{start:{line:17,column:4},end:{line:25,column:6}},"13":{start:{line:18,column:17},end:{line:18,column:32}},"14":{start:{line:18,column:42},end:{line:18,column:50}},"15":{start:{line:18,column:63},end:{line:18,column:74}},"16":{start:{line:19,column:8},end:{line:24,column:11}},"17":{start:{line:26,column:4},end:{line:34,column:17}},"18":{start:{line:35,column:4},end:{line:35,column:20}},"19":{start:{line:37,column:0},end:{line:37,column:28}},"20":{start:{line:38,column:0},end:{line:38,column:27}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:9,column:30},end:{line:9,column:31}},loc:{start:{line:9,column:48},end:{line:36,column:1}},line:9},"1":{name:"MenuItem",decl:{start:{line:11,column:13},end:{line:11,column:21}},loc:{start:{line:11,column:24},end:{line:13,column:5}},line:11},"2":{name:"(anonymous_2)",decl:{start:{line:14,column:34},end:{line:14,column:35}},loc:{start:{line:14,column:46},end:{line:16,column:5}},line:14},"3":{name:"(anonymous_3)",decl:{start:{line:17,column:32},end:{line:17,column:33}},loc:{start:{line:17,column:44},end:{line:25,column:5}},line:17}},branchMap:{"0":{loc:{start:{line:12,column:15},end:{line:12,column:71}},type:"binary-expr",locations:[{start:{line:12,column:15},end:{line:12,column:30}},{start:{line:12,column:34},end:{line:12,column:63}},{start:{line:12,column:67},end:{line:12,column:71}}],line:12},"1":{loc:{start:{line:15,column:8},end:{line:15,column:86}},type:"binary-expr",locations:[{start:{line:15,column:8},end:{line:15,column:34}},{start:{line:15,column:38},end:{line:15,column:86}}],line:15},"2":{loc:{start:{line:21,column:47},end:{line:21,column:77}},type:"cond-expr",locations:[{start:{line:21,column:58},end:{line:21,column:70}},{start:{line:21,column:73},end:{line:21,column:77}}],line:21}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0},f:{"0":0,"1":0,"2":0,"3":0},b:{"0":[0,0,0],"1":[0,0],"2":[0,0]},inputSourceMap:{version:3,sources:["/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/MenuItem.ts"],names:[],mappings:";;;AAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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",file:"/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/MenuItem.ts",sourcesContent:["import { v } from '@dojo/widget-core/d';\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\nimport { WidgetProperties } from '@dojo/widget-core/interfaces';\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\n\nimport * as css from './menuItem.m.css';\n\nexport interface MenuItemProperties extends WidgetProperties {\n\ttitle: string;\n\tselected?: boolean;\n\tdata?: any;\n\tonSelected?: (data: any) => void;\n}\n\n@customElement({\n\ttag: 'demo-menu-item',\n\tattributes: ['title', 'selected'],\n\tevents: ['onSelected'],\n\tproperties: ['data', 'selected']\n})\n@theme(css)\nexport class MenuItem extends ThemedMixin(WidgetBase) {\n\tprivate _onClick() {\n\t\tthis.properties.onSelected && this.properties.onSelected(this.properties.data);\n\t}\n\n\tprotected render() {\n\t\tconst { title, selected } = this.properties;\n\n\t\treturn v('li', { classes: this.theme(css.root) }, [\n\t\t\tv(\n\t\t\t\t'span',\n\t\t\t\t{\n\t\t\t\t\tclasses: this.theme([css.item, selected ? css.selected : null]),\n\t\t\t\t\tonclick: this._onClick\n\t\t\t\t},\n\t\t\t\t[title]\n\t\t\t)\n\t\t]);\n\t}\n}\n\nexport default MenuItem;\n"]},_coverageSchema:"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c"},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();cov_6vl6bll1n.s[0]++;Object.defineProperty(exports,"__esModule",{value:true});var tslib_1=(cov_6vl6bll1n.s[1]++,__webpack_require__("./node_modules/tslib/tslib.es6.js"));var d_1=(cov_6vl6bll1n.s[2]++,__webpack_require__("./node_modules/@dojo/widget-core/d.js"));var customElement_1=(cov_6vl6bll1n.s[3]++,__webpack_require__("./node_modules/@dojo/widget-core/decorators/customElement.js"));var Themed_1=(cov_6vl6bll1n.s[4]++,__webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.js"));var WidgetBase_1=(cov_6vl6bll1n.s[5]++,__webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.js"));var css=(cov_6vl6bll1n.s[6]++,__webpack_require__("./src/menu-item/menuItem.m.css"));var MenuItem=(/** @class */cov_6vl6bll1n.s[7]++,function(_super){cov_6vl6bll1n.f[0]++;cov_6vl6bll1n.s[8]++;tslib_1.__extends(MenuItem,_super);function MenuItem(){cov_6vl6bll1n.f[1]++;cov_6vl6bll1n.s[9]++;return(cov_6vl6bll1n.b[0][0]++,_super!==null)&&(cov_6vl6bll1n.b[0][1]++,_super.apply(this,arguments))||(cov_6vl6bll1n.b[0][2]++,this);}cov_6vl6bll1n.s[10]++;MenuItem.prototype._onClick=function(){cov_6vl6bll1n.f[2]++;cov_6vl6bll1n.s[11]++;(cov_6vl6bll1n.b[1][0]++,this.properties.onSelected)&&(cov_6vl6bll1n.b[1][1]++,this.properties.onSelected(this.properties.data));};cov_6vl6bll1n.s[12]++;MenuItem.prototype.render=function(){cov_6vl6bll1n.f[3]++;var _a=(cov_6vl6bll1n.s[13]++,this.properties),title=(cov_6vl6bll1n.s[14]++,_a.title),selected=(cov_6vl6bll1n.s[15]++,_a.selected);cov_6vl6bll1n.s[16]++;return d_1.v('li',{classes:this.theme(css.root)},[d_1.v('span',{classes:this.theme([css.item,selected?(cov_6vl6bll1n.b[2][0]++,css.selected):(cov_6vl6bll1n.b[2][1]++,null)]),onclick:this._onClick},[title])]);};cov_6vl6bll1n.s[17]++;MenuItem=tslib_1.__decorate([customElement_1.customElement({tag:'demo-menu-item',attributes:['title','selected'],events:['onSelected'],properties:['data','selected']}),Themed_1.theme(css)],MenuItem);cov_6vl6bll1n.s[18]++;return MenuItem;}(Themed_1.ThemedMixin(WidgetBase_1.WidgetBase)));cov_6vl6bll1n.s[19]++;exports.MenuItem=MenuItem;cov_6vl6bll1n.s[20]++;exports.default=MenuItem; +var cov_6vl6bll1n=function(){var path="/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/MenuItem.ts",hash="e9ec7644ac047507cdafe7ee7be18d6c43a1bc9e",Function=function(){}.constructor,global=new Function('return this')(),gcv="__coverage__",coverageData={path:"/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/MenuItem.ts",statementMap:{"0":{start:{line:2,column:0},end:{line:2,column:62}},"1":{start:{line:3,column:14},end:{line:3,column:30}},"2":{start:{line:4,column:10},end:{line:4,column:50}},"3":{start:{line:5,column:22},end:{line:5,column:85}},"4":{start:{line:6,column:15},end:{line:6,column:67}},"5":{start:{line:7,column:19},end:{line:7,column:68}},"6":{start:{line:8,column:10},end:{line:8,column:37}},"7":{start:{line:9,column:30},end:{line:36,column:48}},"8":{start:{line:10,column:4},end:{line:10,column:40}},"9":{start:{line:12,column:8},end:{line:12,column:72}},"10":{start:{line:14,column:4},end:{line:16,column:6}},"11":{start:{line:15,column:8},end:{line:15,column:87}},"12":{start:{line:17,column:4},end:{line:25,column:6}},"13":{start:{line:18,column:17},end:{line:18,column:32}},"14":{start:{line:18,column:42},end:{line:18,column:50}},"15":{start:{line:18,column:63},end:{line:18,column:74}},"16":{start:{line:19,column:8},end:{line:24,column:11}},"17":{start:{line:26,column:4},end:{line:34,column:17}},"18":{start:{line:35,column:4},end:{line:35,column:20}},"19":{start:{line:37,column:0},end:{line:37,column:28}},"20":{start:{line:38,column:0},end:{line:38,column:27}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:9,column:30},end:{line:9,column:31}},loc:{start:{line:9,column:48},end:{line:36,column:1}},line:9},"1":{name:"MenuItem",decl:{start:{line:11,column:13},end:{line:11,column:21}},loc:{start:{line:11,column:24},end:{line:13,column:5}},line:11},"2":{name:"(anonymous_2)",decl:{start:{line:14,column:34},end:{line:14,column:35}},loc:{start:{line:14,column:46},end:{line:16,column:5}},line:14},"3":{name:"(anonymous_3)",decl:{start:{line:17,column:32},end:{line:17,column:33}},loc:{start:{line:17,column:44},end:{line:25,column:5}},line:17}},branchMap:{"0":{loc:{start:{line:12,column:15},end:{line:12,column:71}},type:"binary-expr",locations:[{start:{line:12,column:15},end:{line:12,column:30}},{start:{line:12,column:34},end:{line:12,column:63}},{start:{line:12,column:67},end:{line:12,column:71}}],line:12},"1":{loc:{start:{line:15,column:8},end:{line:15,column:86}},type:"binary-expr",locations:[{start:{line:15,column:8},end:{line:15,column:34}},{start:{line:15,column:38},end:{line:15,column:86}}],line:15},"2":{loc:{start:{line:21,column:47},end:{line:21,column:77}},type:"cond-expr",locations:[{start:{line:21,column:58},end:{line:21,column:70}},{start:{line:21,column:73},end:{line:21,column:77}}],line:21}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0},f:{"0":0,"1":0,"2":0,"3":0},b:{"0":[0,0,0],"1":[0,0],"2":[0,0]},inputSourceMap:{version:3,sources:["/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/MenuItem.ts"],names:[],mappings:";;;AAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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",file:"/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu-item/MenuItem.ts",sourcesContent:["import { v } from '@dojo/framework/widget-core/d';\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\nimport { WidgetProperties } from '@dojo/framework/widget-core/interfaces';\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\n\nimport * as css from './menuItem.m.css';\n\nexport interface MenuItemProperties extends WidgetProperties {\n\ttitle: string;\n\tselected?: boolean;\n\tdata?: any;\n\tonSelected?: (data: any) => void;\n}\n\n@customElement({\n\ttag: 'demo-menu-item',\n\tattributes: ['title', 'selected'],\n\tevents: ['onSelected'],\n\tproperties: ['data', 'selected']\n})\n@theme(css)\nexport class MenuItem extends ThemedMixin(WidgetBase) {\n\tprivate _onClick() {\n\t\tthis.properties.onSelected && this.properties.onSelected(this.properties.data);\n\t}\n\n\tprotected render() {\n\t\tconst { title, selected } = this.properties;\n\n\t\treturn v('li', { classes: this.theme(css.root) }, [\n\t\t\tv(\n\t\t\t\t'span',\n\t\t\t\t{\n\t\t\t\t\tclasses: this.theme([css.item, selected ? css.selected : null]),\n\t\t\t\t\tonclick: this._onClick\n\t\t\t\t},\n\t\t\t\t[title]\n\t\t\t)\n\t\t]);\n\t}\n}\n\nexport default MenuItem;\n"]},_coverageSchema:"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c"},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();cov_6vl6bll1n.s[0]++;Object.defineProperty(exports,"__esModule",{value:true});var tslib_1=(cov_6vl6bll1n.s[1]++,__webpack_require__("./node_modules/tslib/tslib.es6.js"));var d_1=(cov_6vl6bll1n.s[2]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"));var customElement_1=(cov_6vl6bll1n.s[3]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/customElement.js"));var Themed_1=(cov_6vl6bll1n.s[4]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.js"));var WidgetBase_1=(cov_6vl6bll1n.s[5]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.js"));var css=(cov_6vl6bll1n.s[6]++,__webpack_require__("./src/menu-item/menuItem.m.css"));var MenuItem=(cov_6vl6bll1n.s[7]++,function(_super){cov_6vl6bll1n.f[0]++;cov_6vl6bll1n.s[8]++;tslib_1.__extends(MenuItem,_super);function MenuItem(){cov_6vl6bll1n.f[1]++;cov_6vl6bll1n.s[9]++;return(cov_6vl6bll1n.b[0][0]++,_super!==null)&&(cov_6vl6bll1n.b[0][1]++,_super.apply(this,arguments))||(cov_6vl6bll1n.b[0][2]++,this);}cov_6vl6bll1n.s[10]++;MenuItem.prototype._onClick=function(){cov_6vl6bll1n.f[2]++;cov_6vl6bll1n.s[11]++;(cov_6vl6bll1n.b[1][0]++,this.properties.onSelected)&&(cov_6vl6bll1n.b[1][1]++,this.properties.onSelected(this.properties.data));};cov_6vl6bll1n.s[12]++;MenuItem.prototype.render=function(){cov_6vl6bll1n.f[3]++;var _a=(cov_6vl6bll1n.s[13]++,this.properties),title=(cov_6vl6bll1n.s[14]++,_a.title),selected=(cov_6vl6bll1n.s[15]++,_a.selected);cov_6vl6bll1n.s[16]++;return d_1.v('li',{classes:this.theme(css.root)},[d_1.v('span',{classes:this.theme([css.item,selected?(cov_6vl6bll1n.b[2][0]++,css.selected):(cov_6vl6bll1n.b[2][1]++,null)]),onclick:this._onClick},[title])]);};cov_6vl6bll1n.s[17]++;MenuItem=tslib_1.__decorate([customElement_1.customElement({tag:'demo-menu-item',attributes:['title','selected'],events:['onSelected'],properties:['data','selected']}),Themed_1.theme(css)],MenuItem);cov_6vl6bll1n.s[18]++;return MenuItem;}(Themed_1.ThemedMixin(WidgetBase_1.WidgetBase)));cov_6vl6bll1n.s[19]++;exports.MenuItem=MenuItem;cov_6vl6bll1n.s[20]++;exports.default=MenuItem; /***/ }), @@ -13300,7 +13298,7 @@ if(false) { /***/ (function(module, exports, __webpack_require__) { "use strict"; -var cov_276i61pj3t=function(){var path="/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts",hash="ec7fbc29b6cd52a39d18e8f3d152fc79e0454afa",global=new Function('return this')(),gcv="__coverage__",coverageData={path:"/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts",statementMap:{"0":{start:{line:2,column:0},end:{line:2,column:62}},"1":{start:{line:3,column:14},end:{line:3,column:30}},"2":{start:{line:4,column:10},end:{line:4,column:40}},"3":{start:{line:5,column:22},end:{line:5,column:75}},"4":{start:{line:6,column:15},end:{line:6,column:57}},"5":{start:{line:7,column:19},end:{line:7,column:58}},"6":{start:{line:8,column:10},end:{line:8,column:33}},"7":{start:{line:9,column:26},end:{line:49,column:48}},"8":{start:{line:10,column:4},end:{line:10,column:36}},"9":{start:{line:12,column:8},end:{line:12,column:72}},"10":{start:{line:14,column:4},end:{line:18,column:6}},"11":{start:{line:15,column:8},end:{line:15,column:30}},"12":{start:{line:16,column:8},end:{line:16,column:41}},"13":{start:{line:17,column:8},end:{line:17,column:26}},"14":{start:{line:19,column:4},end:{line:40,column:6}},"15":{start:{line:20,column:20},end:{line:20,column:24}},"16":{start:{line:21,column:20},end:{line:34,column:10}},"17":{start:{line:22,column:12},end:{line:32,column:13}},"18":{start:{line:23,column:33},end:{line:27,column:17}},"19":{start:{line:25,column:24},end:{line:25,column:55}},"20":{start:{line:28,column:16},end:{line:30,column:17}},"21":{start:{line:29,column:20},end:{line:29,column:70}},"22":{start:{line:31,column:16},end:{line:31,column:86}},"23":{start:{line:33,column:12},end:{line:33,column:25}},"24":{start:{line:35,column:8},end:{line:39,column:11}},"25":{start:{line:41,column:4},end:{line:47,column:13}},"26":{start:{line:48,column:4},end:{line:48,column:16}},"27":{start:{line:50,column:0},end:{line:50,column:20}},"28":{start:{line:51,column:0},end:{line:51,column:23}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:9,column:26},end:{line:9,column:27}},loc:{start:{line:9,column:44},end:{line:49,column:1}},line:9},"1":{name:"Menu",decl:{start:{line:11,column:13},end:{line:11,column:17}},loc:{start:{line:11,column:20},end:{line:13,column:5}},line:11},"2":{name:"(anonymous_2)",decl:{start:{line:14,column:33},end:{line:14,column:34}},loc:{start:{line:14,column:53},end:{line:18,column:5}},line:14},"3":{name:"(anonymous_3)",decl:{start:{line:19,column:28},end:{line:19,column:29}},loc:{start:{line:19,column:40},end:{line:40,column:5}},line:19},"4":{name:"(anonymous_4)",decl:{start:{line:21,column:38},end:{line:21,column:39}},loc:{start:{line:21,column:62},end:{line:34,column:9}},line:21},"5":{name:"(anonymous_5)",decl:{start:{line:24,column:32},end:{line:24,column:33}},loc:{start:{line:24,column:48},end:{line:26,column:21}},line:24}},branchMap:{"0":{loc:{start:{line:12,column:15},end:{line:12,column:71}},type:"binary-expr",locations:[{start:{line:12,column:15},end:{line:12,column:30}},{start:{line:12,column:34},end:{line:12,column:63}},{start:{line:12,column:67},end:{line:12,column:71}}],line:12},"1":{loc:{start:{line:22,column:12},end:{line:32,column:13}},type:"if",locations:[{start:{line:22,column:12},end:{line:32,column:13}},{start:{line:22,column:12},end:{line:32,column:13}}],line:22},"2":{loc:{start:{line:28,column:16},end:{line:30,column:17}},type:"if",locations:[{start:{line:28,column:16},end:{line:30,column:17}},{start:{line:28,column:16},end:{line:30,column:17}}],line:28}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},b:{"0":[0,0,0],"1":[0,0],"2":[0,0]},inputSourceMap:{version:3,sources:["/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts"],names:[],mappings:";;;AAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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",file:"/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts",sourcesContent:["import { v } from '@dojo/widget-core/d';\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\nimport { WidgetProperties, WNode } from '@dojo/widget-core/interfaces';\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\nimport { MenuItem, MenuItemProperties } from '../menu-item/MenuItem';\n\nimport * as css from './menu.m.css';\n\ninterface MenuProperties extends WidgetProperties {\n\tonSelected: (data: any) => void;\n}\n\n@customElement({\n\ttag: 'demo-menu',\n\tevents: ['onSelected']\n})\n@theme(css)\nexport class Menu extends ThemedMixin(WidgetBase)> {\n\tprivate _selectedId: number;\n\n\tprivate _onSelected(id: number, data: any) {\n\t\tthis._selectedId = id;\n\t\tthis.properties.onSelected(data);\n\t\tthis.invalidate();\n\t}\n\n\tprotected render() {\n\t\tconst items = this.children.map((child, index) => {\n\t\t\tif (child) {\n\t\t\t\tconst properties: Partial = {\n\t\t\t\t\tonSelected: (data: any) => {\n\t\t\t\t\t\tthis._onSelected(index, data);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif (this._selectedId !== undefined) {\n\t\t\t\t\tproperties.selected = index === this._selectedId;\n\t\t\t\t}\n\t\t\t\tchild.properties = { ...child.properties, ...properties };\n\t\t\t}\n\t\t\treturn child;\n\t\t});\n\n\t\treturn v('nav', { classes: this.theme(css.root) }, [\n\t\t\tv(\n\t\t\t\t'ol',\n\t\t\t\t{\n\t\t\t\t\tclasses: this.theme(css.menuContainer)\n\t\t\t\t},\n\t\t\t\titems\n\t\t\t)\n\t\t]);\n\t}\n}\n\nexport default Menu;\n"]},_coverageSchema:"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c"},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();cov_276i61pj3t.s[0]++;Object.defineProperty(exports,"__esModule",{value:true});var tslib_1=(cov_276i61pj3t.s[1]++,__webpack_require__("./node_modules/tslib/tslib.es6.js"));var d_1=(cov_276i61pj3t.s[2]++,__webpack_require__("./node_modules/@dojo/widget-core/d.js"));var customElement_1=(cov_276i61pj3t.s[3]++,__webpack_require__("./node_modules/@dojo/widget-core/decorators/customElement.js"));var Themed_1=(cov_276i61pj3t.s[4]++,__webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.js"));var WidgetBase_1=(cov_276i61pj3t.s[5]++,__webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.js"));var css=(cov_276i61pj3t.s[6]++,__webpack_require__("./src/menu/menu.m.css"));var Menu=(/** @class */cov_276i61pj3t.s[7]++,function(_super){cov_276i61pj3t.f[0]++;cov_276i61pj3t.s[8]++;tslib_1.__extends(Menu,_super);function Menu(){cov_276i61pj3t.f[1]++;cov_276i61pj3t.s[9]++;return(cov_276i61pj3t.b[0][0]++,_super!==null)&&(cov_276i61pj3t.b[0][1]++,_super.apply(this,arguments))||(cov_276i61pj3t.b[0][2]++,this);}cov_276i61pj3t.s[10]++;Menu.prototype._onSelected=function(id,data){cov_276i61pj3t.f[2]++;cov_276i61pj3t.s[11]++;this._selectedId=id;cov_276i61pj3t.s[12]++;this.properties.onSelected(data);cov_276i61pj3t.s[13]++;this.invalidate();};cov_276i61pj3t.s[14]++;Menu.prototype.render=function(){cov_276i61pj3t.f[3]++;var _this=(cov_276i61pj3t.s[15]++,this);var items=(cov_276i61pj3t.s[16]++,this.children.map(function(child,index){cov_276i61pj3t.f[4]++;cov_276i61pj3t.s[17]++;if(child){cov_276i61pj3t.b[1][0]++;var properties=(cov_276i61pj3t.s[18]++,{onSelected:function(data){cov_276i61pj3t.f[5]++;cov_276i61pj3t.s[19]++;_this._onSelected(index,data);}});cov_276i61pj3t.s[20]++;if(_this._selectedId!==undefined){cov_276i61pj3t.b[2][0]++;cov_276i61pj3t.s[21]++;properties.selected=index===_this._selectedId;}else{cov_276i61pj3t.b[2][1]++;}cov_276i61pj3t.s[22]++;child.properties=tslib_1.__assign({},child.properties,properties);}else{cov_276i61pj3t.b[1][1]++;}cov_276i61pj3t.s[23]++;return child;}));cov_276i61pj3t.s[24]++;return d_1.v('nav',{classes:this.theme(css.root)},[d_1.v('ol',{classes:this.theme(css.menuContainer)},items)]);};cov_276i61pj3t.s[25]++;Menu=tslib_1.__decorate([customElement_1.customElement({tag:'demo-menu',events:['onSelected']}),Themed_1.theme(css)],Menu);cov_276i61pj3t.s[26]++;return Menu;}(Themed_1.ThemedMixin(WidgetBase_1.WidgetBase)));cov_276i61pj3t.s[27]++;exports.Menu=Menu;cov_276i61pj3t.s[28]++;exports.default=Menu; +var cov_276i61pj3t=function(){var path="/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts",hash="4853a42605855c0557dc2d97f88858fd013f2edf",Function=function(){}.constructor,global=new Function('return this')(),gcv="__coverage__",coverageData={path:"/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts",statementMap:{"0":{start:{line:2,column:0},end:{line:2,column:62}},"1":{start:{line:3,column:14},end:{line:3,column:30}},"2":{start:{line:4,column:10},end:{line:4,column:50}},"3":{start:{line:5,column:22},end:{line:5,column:85}},"4":{start:{line:6,column:15},end:{line:6,column:67}},"5":{start:{line:7,column:19},end:{line:7,column:68}},"6":{start:{line:8,column:10},end:{line:8,column:33}},"7":{start:{line:9,column:26},end:{line:49,column:48}},"8":{start:{line:10,column:4},end:{line:10,column:36}},"9":{start:{line:12,column:8},end:{line:12,column:72}},"10":{start:{line:14,column:4},end:{line:18,column:6}},"11":{start:{line:15,column:8},end:{line:15,column:30}},"12":{start:{line:16,column:8},end:{line:16,column:41}},"13":{start:{line:17,column:8},end:{line:17,column:26}},"14":{start:{line:19,column:4},end:{line:40,column:6}},"15":{start:{line:20,column:20},end:{line:20,column:24}},"16":{start:{line:21,column:20},end:{line:34,column:10}},"17":{start:{line:22,column:12},end:{line:32,column:13}},"18":{start:{line:23,column:33},end:{line:27,column:17}},"19":{start:{line:25,column:24},end:{line:25,column:55}},"20":{start:{line:28,column:16},end:{line:30,column:17}},"21":{start:{line:29,column:20},end:{line:29,column:70}},"22":{start:{line:31,column:16},end:{line:31,column:86}},"23":{start:{line:33,column:12},end:{line:33,column:25}},"24":{start:{line:35,column:8},end:{line:39,column:11}},"25":{start:{line:41,column:4},end:{line:47,column:13}},"26":{start:{line:48,column:4},end:{line:48,column:16}},"27":{start:{line:50,column:0},end:{line:50,column:20}},"28":{start:{line:51,column:0},end:{line:51,column:23}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:9,column:26},end:{line:9,column:27}},loc:{start:{line:9,column:44},end:{line:49,column:1}},line:9},"1":{name:"Menu",decl:{start:{line:11,column:13},end:{line:11,column:17}},loc:{start:{line:11,column:20},end:{line:13,column:5}},line:11},"2":{name:"(anonymous_2)",decl:{start:{line:14,column:33},end:{line:14,column:34}},loc:{start:{line:14,column:53},end:{line:18,column:5}},line:14},"3":{name:"(anonymous_3)",decl:{start:{line:19,column:28},end:{line:19,column:29}},loc:{start:{line:19,column:40},end:{line:40,column:5}},line:19},"4":{name:"(anonymous_4)",decl:{start:{line:21,column:38},end:{line:21,column:39}},loc:{start:{line:21,column:62},end:{line:34,column:9}},line:21},"5":{name:"(anonymous_5)",decl:{start:{line:24,column:32},end:{line:24,column:33}},loc:{start:{line:24,column:48},end:{line:26,column:21}},line:24}},branchMap:{"0":{loc:{start:{line:12,column:15},end:{line:12,column:71}},type:"binary-expr",locations:[{start:{line:12,column:15},end:{line:12,column:30}},{start:{line:12,column:34},end:{line:12,column:63}},{start:{line:12,column:67},end:{line:12,column:71}}],line:12},"1":{loc:{start:{line:22,column:12},end:{line:32,column:13}},type:"if",locations:[{start:{line:22,column:12},end:{line:32,column:13}},{start:{line:22,column:12},end:{line:32,column:13}}],line:22},"2":{loc:{start:{line:28,column:16},end:{line:30,column:17}},type:"if",locations:[{start:{line:28,column:16},end:{line:30,column:17}},{start:{line:28,column:16},end:{line:30,column:17}}],line:28}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},b:{"0":[0,0,0],"1":[0,0],"2":[0,0]},inputSourceMap:{version:3,sources:["/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts"],names:[],mappings:";;;AAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAWA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;IAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IAA1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;;IAmCA;IAhCS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAW,EAAnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAoB,CAAA,CAAU,EAAE,CAAA,CAAA,CAAA,CAAS,EAAA;QACxC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAW,EAAG,CAAA,CAAE;QACrB,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC;QAChC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAE;IAClB,CAAC;IAES,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAM,EAAhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA;QAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;QACC,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,EAAK,EAAG,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,CAAA,CAAA,CAAA,CAAA,CAAK,EAAA;YAC5C,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE;gBACV,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,EAAgC;oBAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAC,CAAA,CAAA,CAAA,CAAS,EAAA;wBACrB,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,CAAA,CAAA,CAAA,CAAI,CAAC;oBAC9B;iBACA;gBACD,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAW,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE;oBACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,EAAG,CAAA,CAAA,CAAA,CAAA,EAAK,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW;gBACjD;gBACA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE;YAC1D;YACA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA,CAAA,CAAA,CAAK;QACb,CAAC,CAAC;QAEF,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAE,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAI,EAAC,CAAE,EAAE;YAClD,CAAA,CAAA,CAAA,CAAA,CAAC,CACA,CAAA,CAAA,CAAA,CAAI,EACJ;gBACC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAE,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa;aACrC,EACD,CAAA,CAAA,CAAA,CAAA,CAAK;SAEN,CAAC;IACH,CAAC;IAlCW,CAAA,CAAA,CAAA,EAAI,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QALhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAiB;YAC9B,CAAA,CAAA,CAAG,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW;YAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY;SACrB,CAAC;QACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAG;OACG,CAAA,CAAA,CAAA,CAAI,CAmChB;IAAD,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAC;CAnCD,CAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA;AAApC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAqCb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAe,CAAA,CAAA,CAAA,CAAI",file:"/Users/bryan/Projects/dojo2/cli-build-widget/test-app/src/menu/Menu.ts",sourcesContent:["import { v } from '@dojo/framework/widget-core/d';\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\nimport { WidgetProperties, WNode } from '@dojo/framework/widget-core/interfaces';\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\nimport { MenuItem, MenuItemProperties } from '../menu-item/MenuItem';\n\nimport * as css from './menu.m.css';\n\ninterface MenuProperties extends WidgetProperties {\n\tonSelected: (data: any) => void;\n}\n\n@customElement({\n\ttag: 'demo-menu',\n\tevents: ['onSelected']\n})\n@theme(css)\nexport class Menu extends ThemedMixin(WidgetBase)> {\n\tprivate _selectedId: number;\n\n\tprivate _onSelected(id: number, data: any) {\n\t\tthis._selectedId = id;\n\t\tthis.properties.onSelected(data);\n\t\tthis.invalidate();\n\t}\n\n\tprotected render() {\n\t\tconst items = this.children.map((child, index) => {\n\t\t\tif (child) {\n\t\t\t\tconst properties: Partial = {\n\t\t\t\t\tonSelected: (data: any) => {\n\t\t\t\t\t\tthis._onSelected(index, data);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif (this._selectedId !== undefined) {\n\t\t\t\t\tproperties.selected = index === this._selectedId;\n\t\t\t\t}\n\t\t\t\tchild.properties = { ...child.properties, ...properties };\n\t\t\t}\n\t\t\treturn child;\n\t\t});\n\n\t\treturn v('nav', { classes: this.theme(css.root) }, [\n\t\t\tv(\n\t\t\t\t'ol',\n\t\t\t\t{\n\t\t\t\t\tclasses: this.theme(css.menuContainer)\n\t\t\t\t},\n\t\t\t\titems\n\t\t\t)\n\t\t]);\n\t}\n}\n\nexport default Menu;\n"]},_coverageSchema:"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c"},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();cov_276i61pj3t.s[0]++;Object.defineProperty(exports,"__esModule",{value:true});var tslib_1=(cov_276i61pj3t.s[1]++,__webpack_require__("./node_modules/tslib/tslib.es6.js"));var d_1=(cov_276i61pj3t.s[2]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"));var customElement_1=(cov_276i61pj3t.s[3]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/customElement.js"));var Themed_1=(cov_276i61pj3t.s[4]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.js"));var WidgetBase_1=(cov_276i61pj3t.s[5]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.js"));var css=(cov_276i61pj3t.s[6]++,__webpack_require__("./src/menu/menu.m.css"));var Menu=(cov_276i61pj3t.s[7]++,function(_super){cov_276i61pj3t.f[0]++;cov_276i61pj3t.s[8]++;tslib_1.__extends(Menu,_super);function Menu(){cov_276i61pj3t.f[1]++;cov_276i61pj3t.s[9]++;return(cov_276i61pj3t.b[0][0]++,_super!==null)&&(cov_276i61pj3t.b[0][1]++,_super.apply(this,arguments))||(cov_276i61pj3t.b[0][2]++,this);}cov_276i61pj3t.s[10]++;Menu.prototype._onSelected=function(id,data){cov_276i61pj3t.f[2]++;cov_276i61pj3t.s[11]++;this._selectedId=id;cov_276i61pj3t.s[12]++;this.properties.onSelected(data);cov_276i61pj3t.s[13]++;this.invalidate();};cov_276i61pj3t.s[14]++;Menu.prototype.render=function(){cov_276i61pj3t.f[3]++;var _this=(cov_276i61pj3t.s[15]++,this);var items=(cov_276i61pj3t.s[16]++,this.children.map(function(child,index){cov_276i61pj3t.f[4]++;cov_276i61pj3t.s[17]++;if(child){cov_276i61pj3t.b[1][0]++;var properties=(cov_276i61pj3t.s[18]++,{onSelected:function(data){cov_276i61pj3t.f[5]++;cov_276i61pj3t.s[19]++;_this._onSelected(index,data);}});cov_276i61pj3t.s[20]++;if(_this._selectedId!==undefined){cov_276i61pj3t.b[2][0]++;cov_276i61pj3t.s[21]++;properties.selected=index===_this._selectedId;}else{cov_276i61pj3t.b[2][1]++;}cov_276i61pj3t.s[22]++;child.properties=tslib_1.__assign({},child.properties,properties);}else{cov_276i61pj3t.b[1][1]++;}cov_276i61pj3t.s[23]++;return child;}));cov_276i61pj3t.s[24]++;return d_1.v('nav',{classes:this.theme(css.root)},[d_1.v('ol',{classes:this.theme(css.menuContainer)},items)]);};cov_276i61pj3t.s[25]++;Menu=tslib_1.__decorate([customElement_1.customElement({tag:'demo-menu',events:['onSelected']}),Themed_1.theme(css)],Menu);cov_276i61pj3t.s[26]++;return Menu;}(Themed_1.ThemedMixin(WidgetBase_1.WidgetBase)));cov_276i61pj3t.s[27]++;exports.Menu=Menu;cov_276i61pj3t.s[28]++;exports.default=Menu; /***/ }), @@ -13355,8 +13353,8 @@ __webpack_require__("./tests/unit/menu/Menu.ts"); Object.defineProperty(exports, "__esModule", { value: true }); var _a = intern.getInterface('bdd'), describe = _a.describe, it = _a.it; -var harness_1 = __webpack_require__("./node_modules/@dojo/test-extras/harness.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); +var harness_1 = __webpack_require__("./node_modules/@dojo/framework/testing/harness.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); var MenuItem_1 = __webpack_require__("./src/menu-item/MenuItem.ts"); var css = __webpack_require__("./src/menu-item/menuItem.m.css"); describe('MenuItem', function () { @@ -13384,8 +13382,8 @@ describe('MenuItem', function () { Object.defineProperty(exports, "__esModule", { value: true }); var _a = intern.getInterface('bdd'), describe = _a.describe, it = _a.it; -var harness_1 = __webpack_require__("./node_modules/@dojo/test-extras/harness.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); +var harness_1 = __webpack_require__("./node_modules/@dojo/framework/testing/harness.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); var Menu_1 = __webpack_require__("./src/menu/Menu.ts"); var css = __webpack_require__("./src/menu/menu.m.css"); describe('Menu', function () { @@ -13409,4 +13407,4 @@ module.exports = __webpack_require__("./tests/unit/menu/Menu.ts"); /***/ }) /******/ }));; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMGJhYmY2MDU5YmUzOTNmMmEzZGYiLCJ3ZWJwYWNrOi8vL0Rlc3Ryb3lhYmxlLnRzIiwid2VicGFjazovLy9FdmVudGVkLnRzIiwid2VicGFjazovLy9sYW5nLnRzIiwid2VicGFjazovLy9oYXMudHMiLCJ3ZWJwYWNrOi8vL01hcC50cyIsIndlYnBhY2s6Ly8vUHJvbWlzZS50cyIsIndlYnBhY2s6Ly8vU2V0LnRzIiwid2VicGFjazovLy9TeW1ib2wudHMiLCJ3ZWJwYWNrOi8vL1dlYWtNYXAudHMiLCJ3ZWJwYWNrOi8vL2FycmF5LnRzIiwid2VicGFjazovLy9nbG9iYWwudHMiLCJ3ZWJwYWNrOi8vL2l0ZXJhdG9yLnRzIiwid2VicGFjazovLy9udW1iZXIudHMiLCJ3ZWJwYWNrOi8vL29iamVjdC50cyIsIndlYnBhY2s6Ly8vc3RyaW5nLnRzIiwid2VicGFjazovLy9xdWV1ZS50cyIsIndlYnBhY2s6Ly8vdXRpbC50cyIsIndlYnBhY2s6Ly8vaGFybmVzcy50cyIsIndlYnBhY2s6Ly8vYXNzZXJ0UmVuZGVyLnRzIiwid2VicGFjazovLy9zZWxlY3Rvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzPzJlNTYiLCJ3ZWJwYWNrOi8vLy4vc3JjL21lbnUvbWVudS5tLmNzcz80MWNiIiwid2VicGFjazovLy9JbmplY3Rvci50cyIsIndlYnBhY2s6Ly8vTm9kZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vL1JlZ2lzdHJ5LnRzIiwid2VicGFjazovLy9SZWdpc3RyeUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vL1dpZGdldEJhc2UudHMiLCJ3ZWJwYWNrOi8vL2Nzc1RyYW5zaXRpb25zLnRzIiwid2VicGFjazovLy9kLnRzIiwid2VicGFjazovLy9hZnRlclJlbmRlci50cyIsIndlYnBhY2s6Ly8vYWx3YXlzUmVuZGVyLnRzIiwid2VicGFjazovLy9iZWZvcmVQcm9wZXJ0aWVzLnRzIiwid2VicGFjazovLy9jdXN0b21FbGVtZW50LnRzIiwid2VicGFjazovLy9kaWZmUHJvcGVydHkudHMiLCJ3ZWJwYWNrOi8vL2hhbmRsZURlY29yYXRvci50cyIsIndlYnBhY2s6Ly8vaW5qZWN0LnRzIiwid2VicGFjazovLy9kaWZmLnRzIiwid2VicGFjazovLy9Qcm9qZWN0b3IudHMiLCJ3ZWJwYWNrOi8vL1RoZW1lZC50cyIsIndlYnBhY2s6Ly8vcmVnaXN0ZXJDdXN0b21FbGVtZW50LnRzIiwid2VicGFjazovLy92ZG9tLnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdC11bWQvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGlmZi9kaXN0L2RpZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21lbnUtaXRlbS9NZW51SXRlbS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzIiwid2VicGFjazovLy8uL3NyYy9tZW51L01lbnUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21lbnUvbWVudS5tLmNzcyIsIndlYnBhY2s6Ly8vLi90ZXN0cy91bml0L2FsbC50cyIsIndlYnBhY2s6Ly8vLi90ZXN0cy91bml0L21lbnUtaXRlbS9NZW51SXRlbS50cyIsIndlYnBhY2s6Ly8vLi90ZXN0cy91bml0L21lbnUvTWVudS50cyJdLCJuYW1lcyI6WyJkXzEiLCJyZXF1aXJlIiwiY3VzdG9tRWxlbWVudF8xIiwiVGhlbWVkXzEiLCJXaWRnZXRCYXNlXzEiLCJjc3MiLCJNZW51SXRlbSIsIl9zdXBlciIsInRzbGliXzEiLCJfX2V4dGVuZHMiLCJwcm90b3R5cGUiLCJfb25DbGljayIsInByb3BlcnRpZXMiLCJvblNlbGVjdGVkIiwiZGF0YSIsInJlbmRlciIsIl9hIiwidGl0bGUiLCJzZWxlY3RlZCIsInYiLCJjbGFzc2VzIiwidGhlbWUiLCJyb290IiwiaXRlbSIsIm9uY2xpY2siLCJfX2RlY29yYXRlIiwiY3VzdG9tRWxlbWVudCIsInRhZyIsImF0dHJpYnV0ZXMiLCJldmVudHMiLCJUaGVtZWRNaXhpbiIsIldpZGdldEJhc2UiLCJleHBvcnRzIiwiZGVmYXVsdCIsIk1lbnUiLCJfb25TZWxlY3RlZCIsImlkIiwiX3NlbGVjdGVkSWQiLCJpbnZhbGlkYXRlIiwiX3RoaXMiLCJpdGVtcyIsImNoaWxkcmVuIiwibWFwIiwiY2hpbGQiLCJpbmRleCIsInVuZGVmaW5lZCIsIl9fYXNzaWduIiwibWVudUNvbnRhaW5lciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7OztBQzVEQTtBQUNBO0FBRUE7OztBQUdBO0lBQ0MsT0FBTyxpQkFBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFFQTs7O0FBR0E7SUFDQyxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDO0FBQ2pEO0FBRUE7SUFNQzs7O0lBR0E7UUFDQyxJQUFJLENBQUMsUUFBTyxFQUFHLEVBQUU7SUFDbEI7SUFFQTs7Ozs7O0lBTUEsMEJBQUcsRUFBSCxVQUFJLE9BQTBCO1FBQzdCLElBQU0sT0FBTSxFQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsNEJBQXFCLGdDQUFJLE9BQU8sR0FBRSxFQUFFLE9BQU87UUFDM0UsMkJBQWlCO1FBQ3pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLE9BQU87WUFDTixPQUFPO2dCQUNOLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNqQjtTQUNBO0lBQ0YsQ0FBQztJQUVEOzs7OztJQUtBLDhCQUFPLEVBQVA7UUFBQTtRQUNDLE9BQU8sSUFBSSxpQkFBTyxDQUFDLFVBQUMsT0FBTztZQUMxQixLQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFDLE1BQU07Z0JBQzNCLE9BQU0sR0FBSSxNQUFNLENBQUMsUUFBTyxHQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDN0MsQ0FBQyxDQUFDO1lBQ0YsS0FBSSxDQUFDLFFBQU8sRUFBRyxJQUFJO1lBQ25CLEtBQUksQ0FBQyxJQUFHLEVBQUcsU0FBUztZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNGLGtCQUFDO0FBQUQsQ0E5Q0E7QUFBYTtBQWdEYixrQkFBZSxXQUFXOzs7Ozs7Ozs7Ozs7QUNsRTFCO0FBRUE7QUFFQTs7O0FBR0EsSUFBTSxTQUFRLEVBQUcsSUFBSSxhQUFHLEVBQWtCO0FBRTFDOzs7OztBQUtBLHFCQUE0QixVQUEyQixFQUFFLFlBQTZCO0lBQ3JGLEdBQUcsQ0FBQyxPQUFPLGFBQVksSUFBSyxTQUFRLEdBQUksT0FBTyxXQUFVLElBQUssU0FBUSxHQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFDLElBQUssQ0FBQyxDQUFDLEVBQUU7UUFDekcsSUFBSSxNQUFLLFFBQVE7UUFDakIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDN0IsTUFBSyxFQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFO1FBQ2xDO1FBQUUsS0FBSztZQUNOLE1BQUssRUFBRyxJQUFJLE1BQU0sQ0FBQyxNQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxLQUFHLENBQUM7WUFDMUQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO1FBQ2hDO1FBQ0EsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUNoQztJQUFFLEtBQUs7UUFDTixPQUFPLFdBQVUsSUFBSyxZQUFZO0lBQ25DO0FBQ0Q7QUFiQTtBQXNDQTs7O0FBR0E7SUFJVTtJQUpWO1FBQUE7UUFTQzs7O1FBR1UsbUJBQVksRUFBOEMsSUFBSSxhQUFHLEVBQUU7O0lBOEQ5RTtJQXJEQyx1QkFBSSxFQUFKLFVBQUssS0FBVTtRQUFmO1FBQ0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsSUFBSTtZQUN2QyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBQyxNQUFNO29CQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUksRUFBRSxLQUFLLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQztZQUNIO1FBQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQXNCRCxxQkFBRSxFQUFGLFVBQUcsSUFBUyxFQUFFLFFBQTBDO1FBQXhEO1FBQ0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDNUIsSUFBTSxVQUFPLEVBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFDLFFBQVEsSUFBSyxZQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBakMsQ0FBaUMsQ0FBQztZQUM3RSxPQUFPO2dCQUNOLE9BQU87b0JBQ04sU0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFDLE1BQU0sSUFBSyxhQUFNLENBQUMsT0FBTyxFQUFFLEVBQWhCLENBQWdCLENBQUM7Z0JBQzlDO2FBQ0E7UUFDRjtRQUNBLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO0lBQ3pDLENBQUM7SUFFTywrQkFBWSxFQUFwQixVQUFxQixJQUFpQixFQUFFLFFBQStCO1FBQXZFO1FBQ0MsSUFBTSxVQUFTLEVBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFDLEdBQUksRUFBRTtRQUNuRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO1FBQ3RDLE9BQU87WUFDTixPQUFPLEVBQUU7Z0JBQ1IsSUFBTSxVQUFTLEVBQUcsS0FBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFDLEdBQUksRUFBRTtnQkFDbkQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRDtTQUNBO0lBQ0YsQ0FBQztJQUNGLGNBQUM7QUFBRCxDQTFFQSxDQUlVLHlCQUFXO0FBSlI7QUE0RWIsa0JBQWUsT0FBTzs7Ozs7Ozs7Ozs7O0FDbEl0QjtBQUVBO0FBQVMsZ0NBQU07QUFFZixJQUFNLE1BQUssRUFBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDbkMsSUFBTSxlQUFjLEVBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjO0FBRXREOzs7Ozs7Ozs7O0FBVUEsOEJBQThCLEtBQVU7SUFDdkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDLElBQUssaUJBQWlCO0FBQ25FO0FBRUEsbUJBQXNCLEtBQVUsRUFBRSxTQUFrQjtJQUNuRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBUyxJQUFPO1FBQ2hDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hCLE9BQVksU0FBUyxDQUFNLElBQUksRUFBRSxTQUFTLENBQUM7UUFDNUM7UUFFQSxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSTtZQUNoQyxFQUFFO1lBQ0YsRUFBRSxNQUFNLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLE9BQU8sRUFBWSxDQUFDLElBQUksQ0FBQztnQkFDekIsTUFBTSxFQUFLO2FBQ1gsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNIO0FBVUEsZ0JBQTRDLE1BQXVCO0lBQ2xFLElBQU0sS0FBSSxFQUFHLE1BQU0sQ0FBQyxJQUFJO0lBQ3hCLElBQU0sVUFBUyxFQUFHLE1BQU0sQ0FBQyxTQUFTO0lBQ2xDLElBQU0sT0FBTSxFQUFRLE1BQU0sQ0FBQyxNQUFNO0lBQ2pDLElBQU0sT0FBTSxFQUFHLE1BQU0sQ0FBQyxPQUFNLEdBQUksRUFBRTtJQUNsQyxJQUFNLFlBQVcsbUJBQU8sTUFBTSxDQUFDO0lBRS9CLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsRUFBQyxFQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQy9DLElBQU0sT0FBTSxFQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRWhDLEdBQUcsQ0FBQyxPQUFNLElBQUssS0FBSSxHQUFJLE9BQU0sSUFBSyxTQUFTLEVBQUU7WUFDNUMsUUFBUTtRQUNUO1FBQ0EsSUFBSSxDQUFDLElBQUksSUFBRyxHQUFJLE1BQU0sRUFBRTtZQUN2QixHQUFHLENBQUMsVUFBUyxHQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNsRCxJQUFJLE1BQUssRUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDO2dCQUU1QixHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsSUFBSyxDQUFDLENBQUMsRUFBRTtvQkFDdEMsUUFBUTtnQkFDVDtnQkFFQSxHQUFHLENBQUMsSUFBSSxFQUFFO29CQUNULEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUN6QixNQUFLLEVBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUM7b0JBQ3BDO29CQUFFLEtBQUssR0FBRyxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUN2QyxJQUFNLFlBQVcsRUFBUSxNQUFNLENBQUMsR0FBRyxFQUFDLEdBQUksRUFBRTt3QkFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7d0JBQ25CLE1BQUssRUFBRyxNQUFNLENBQUM7NEJBQ2QsSUFBSSxFQUFFLElBQUk7NEJBQ1YsU0FBUyxFQUFFLFNBQVM7NEJBQ3BCLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQzs0QkFDaEIsTUFBTSxFQUFFLFdBQVc7NEJBQ25CLE1BQU07eUJBQ04sQ0FBQztvQkFDSDtnQkFDRDtnQkFDQSxNQUFNLENBQUMsR0FBRyxFQUFDLEVBQUcsS0FBSztZQUNwQjtRQUNEO0lBQ0Q7SUFFQSxPQUFjLE1BQU07QUFDckI7QUEyQ0EsZ0JBQXVCLFNBQWM7SUFBRTtTQUFBLFVBQWdCLEVBQWhCLHFCQUFnQixFQUFoQixJQUFnQjtRQUFoQjs7SUFDdEMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUNuQixNQUFNLElBQUksVUFBVSxDQUFDLGlEQUFpRCxDQUFDO0lBQ3hFO0lBRUEsSUFBTSxLQUFJLEVBQUcsTUFBTSxDQUFDLEtBQUssRUFBRTtJQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFdEMsT0FBTyxlQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDaEM7QUFUQTtBQW1EQSxvQkFBMkIsTUFBVztJQUFFO1NBQUEsVUFBaUIsRUFBakIscUJBQWlCLEVBQWpCLElBQWlCO1FBQWpCOztJQUN2QyxPQUFPLE1BQU0sQ0FBQztRQUNiLElBQUksRUFBRSxJQUFJO1FBQ1YsU0FBUyxFQUFFLEtBQUs7UUFDaEIsT0FBTyxFQUFFLE9BQU87UUFDaEIsTUFBTSxFQUFFO0tBQ1IsQ0FBQztBQUNIO0FBUEE7QUFpREEsbUJBQTBCLE1BQVc7SUFBRTtTQUFBLFVBQWlCLEVBQWpCLHFCQUFpQixFQUFqQixJQUFpQjtRQUFqQjs7SUFDdEMsT0FBTyxNQUFNLENBQUM7UUFDYixJQUFJLEVBQUUsSUFBSTtRQUNWLFNBQVMsRUFBRSxJQUFJO1FBQ2YsT0FBTyxFQUFFLE9BQU87UUFDaEIsTUFBTSxFQUFFO0tBQ1IsQ0FBQztBQUNIO0FBUEE7QUFTQTs7Ozs7OztBQU9BLG1CQUF3QyxNQUFTO0lBQ2hELElBQU0sT0FBTSxFQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0FBQ2pDO0FBSkE7QUFNQTs7Ozs7OztBQU9BLHFCQUE0QixDQUFNLEVBQUUsQ0FBTTtJQUN6QyxPQUFPLENBQ04sRUFBQyxJQUFLLEVBQUM7UUFDUDtRQUNBLENBQUMsRUFBQyxJQUFLLEVBQUMsR0FBSSxFQUFDLElBQUssQ0FBQyxDQUFDLENBQ3BCO0FBQ0Y7QUFOQTtBQVFBOzs7Ozs7Ozs7OztBQVdBLGtCQUF5QixRQUFZLEVBQUUsTUFBYztJQUFFO1NBQUEsVUFBc0IsRUFBdEIscUJBQXNCLEVBQXRCLElBQXNCO1FBQXRCOztJQUN0RCxPQUFPLFlBQVksQ0FBQztRQUNuQixFQUFFO1lBQ0EsSUFBTSxLQUFJLEVBQVUsU0FBUyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxZQUFZO1lBRWhHO1lBQ0EsT0FBYSxRQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDckQ7UUFDRCxFQUFFO1lBQ0E7WUFDQSxPQUFhLFFBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztRQUMxRCxDQUFDO0FBQ0o7QUFaQTtBQW9EQSxlQUFzQixNQUFXO0lBQUU7U0FBQSxVQUFpQixFQUFqQixxQkFBaUIsRUFBakIsSUFBaUI7UUFBakI7O0lBQ2xDLE9BQU8sTUFBTSxDQUFDO1FBQ2IsSUFBSSxFQUFFLEtBQUs7UUFDWCxTQUFTLEVBQUUsSUFBSTtRQUNmLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLE1BQU0sRUFBRTtLQUNSLENBQUM7QUFDSDtBQVBBO0FBU0E7Ozs7Ozs7O0FBUUEsaUJBQXdCLGNBQXVDO0lBQUU7U0FBQSxVQUFzQixFQUF0QixxQkFBc0IsRUFBdEIsSUFBc0I7UUFBdEI7O0lBQ2hFLE9BQU87UUFDTixJQUFNLEtBQUksRUFBVSxTQUFTLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFlBQVk7UUFFaEcsT0FBTyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFDeEMsQ0FBQztBQUNGO0FBTkE7QUFRQTs7Ozs7Ozs7QUFRQSxzQkFBNkIsVUFBc0I7SUFDbEQsSUFBSSxPQUFNLEVBQUcsS0FBSztJQUNsQixPQUFPO1FBQ04sT0FBTyxFQUFFO1lBQ1IsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNaLE9BQU0sRUFBRyxJQUFJO2dCQUNiLFVBQVUsRUFBRTtZQUNiO1FBQ0Q7S0FDQTtBQUNGO0FBVkE7QUFZQTs7Ozs7O0FBTUE7SUFBc0M7U0FBQSxVQUFvQixFQUFwQixxQkFBb0IsRUFBcEIsSUFBb0I7UUFBcEI7O0lBQ3JDLE9BQU8sWUFBWSxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsRUFBQyxFQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtRQUNyQjtJQUNELENBQUMsQ0FBQztBQUNIO0FBTkE7Ozs7Ozs7Ozs7O0FDalhBLCtCQUErQixLQUFVO0lBQ3hDLE9BQU8sTUFBSyxHQUFJLEtBQUssQ0FBQyxJQUFJO0FBQzNCO0FBRUE7OztBQUdhLGtCQUFTLEVBQTZDLEVBQUU7QUFFckU7OztBQUdhLHNCQUFhLEVBQXVDLEVBQUU7QUFFbkU7Ozs7QUFJQSxJQUFNLGNBQWEsRUFBK0MsRUFBRTtBQXdCcEU7OztBQUdBLElBQU0sWUFBVyxFQUFHLENBQUM7SUFDcEI7SUFDQSxHQUFHLENBQUMsT0FBTyxPQUFNLElBQUssV0FBVyxFQUFFO1FBQ2xDO1FBQ0EsT0FBTyxNQUFNO0lBQ2Q7SUFBRSxLQUFLLEdBQUcsQ0FBQyxPQUFPLE9BQU0sSUFBSyxXQUFXLEVBQUU7UUFDekM7UUFDQSxPQUFPLE1BQU07SUFDZDtJQUFFLEtBQUssR0FBRyxDQUFDLE9BQU8sS0FBSSxJQUFLLFdBQVcsRUFBRTtRQUN2QztRQUNBLE9BQU8sSUFBSTtJQUNaO0lBQ0E7SUFDQSxPQUFPLEVBQUU7QUFDVixDQUFDLENBQUMsRUFBRTtBQUVKO0FBQ1EsMEVBQWM7QUFFdEI7QUFDQSxHQUFHLENBQUMscUJBQW9CLEdBQUksV0FBVyxFQUFFO0lBQ3hDLE9BQU8sV0FBVyxDQUFDLGtCQUFrQjtBQUN0QztBQUVBOzs7Ozs7QUFNQSxpQ0FBaUMsS0FBVTtJQUMxQyxPQUFPLE9BQU8sTUFBSyxJQUFLLFVBQVU7QUFDbkM7QUFFQTs7OztBQUlBLElBQU0sWUFBVyxFQUFzQjtJQUN0QyxFQUFFLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUU7SUFDaEYsRUFBRSxFQUFFLENBQUU7Ozs7Ozs7Ozs7OztBQVlQLGNBQXFCLFVBQWtCLEVBQUUsT0FBZ0IsRUFBRSxJQUEyQixFQUFFLE1BQWU7SUFDdEcsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRTtBQUNsRDtBQUZBO0FBSUE7Ozs7Ozs7OztBQVNBLG1CQUEwQixVQUFrQixFQUFFLFNBQXVDO0lBQ3BGLElBQU0sT0FBTSxFQUFxQixVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFDLEdBQUksRUFBRTtJQUN6RSxJQUFJLEVBQUMsRUFBRyxDQUFDO0lBRVQsYUFBYSxJQUFjO1FBQzFCLElBQU0sS0FBSSxFQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4QixHQUFHLENBQUMsS0FBSSxJQUFLLEdBQUcsRUFBRTtZQUNqQjtZQUNBLE9BQU8sSUFBSTtRQUNaO1FBQUUsS0FBSztZQUNOO1lBQ0EsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBQyxJQUFLLEdBQUcsRUFBRTtnQkFDeEIsR0FBRyxDQUFDLENBQUMsS0FBSSxHQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDdkI7b0JBQ0EsT0FBTyxHQUFHLEVBQUU7Z0JBQ2I7Z0JBQUUsS0FBSztvQkFDTjtvQkFDQSxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUNULE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDakI7WUFDRDtZQUNBO1lBQ0EsT0FBTyxJQUFJO1FBQ1o7SUFDRDtJQUVBLElBQU0sR0FBRSxFQUFHLEdBQUcsRUFBRTtJQUVoQixPQUFPLEdBQUUsR0FBSSxTQUFTLENBQUMsRUFBRSxDQUFDO0FBQzNCO0FBN0JBO0FBK0JBOzs7OztBQUtBLGdCQUF1QixPQUFlO0lBQ3JDLElBQU0sa0JBQWlCLEVBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRTtJQUUvQyxPQUFPLE9BQU8sQ0FDYixrQkFBaUIsR0FBSSxZQUFXLEdBQUksa0JBQWlCLEdBQUksa0JBQVMsR0FBSSxxQkFBYSxDQUFDLGlCQUFpQixDQUFDLENBQ3RHO0FBQ0Y7QUFOQTtBQVFBOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxhQUNDLE9BQWUsRUFDZixLQUE0RCxFQUM1RCxTQUEwQjtJQUExQiw2Q0FBMEI7SUFFMUIsSUFBTSxrQkFBaUIsRUFBRyxPQUFPLENBQUMsV0FBVyxFQUFFO0lBRS9DLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUMsR0FBSSxDQUFDLFVBQVMsR0FBSSxDQUFDLENBQUMsa0JBQWlCLEdBQUksV0FBVyxDQUFDLEVBQUU7UUFDbkYsTUFBTSxJQUFJLFNBQVMsQ0FBQyxlQUFZLFFBQU8scUNBQWtDLENBQUM7SUFDM0U7SUFFQSxHQUFHLENBQUMsT0FBTyxNQUFLLElBQUssVUFBVSxFQUFFO1FBQ2hDLHFCQUFhLENBQUMsaUJBQWlCLEVBQUMsRUFBRyxLQUFLO0lBQ3pDO0lBQUUsS0FBSyxHQUFHLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDeEMsYUFBYSxDQUFDLE9BQU8sRUFBQyxFQUFHLEtBQUssQ0FBQyxJQUFJLENBQ2xDLFVBQUMsYUFBZ0M7WUFDaEMsaUJBQVMsQ0FBQyxPQUFPLEVBQUMsRUFBRyxhQUFhO1lBQ2xDLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUM5QixDQUFDLEVBQ0Q7WUFDQyxPQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDOUIsQ0FBQyxDQUNEO0lBQ0Y7SUFBRSxLQUFLO1FBQ04saUJBQVMsQ0FBQyxpQkFBaUIsRUFBQyxFQUFHLEtBQUs7UUFDcEMsT0FBTyxxQkFBYSxDQUFDLGlCQUFpQixDQUFDO0lBQ3hDO0FBQ0Q7QUEzQkE7QUE2QkE7Ozs7O0FBS0EsYUFBNEIsT0FBZTtJQUMxQyxJQUFJLE1BQXlCO0lBRTdCLElBQU0sa0JBQWlCLEVBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRTtJQUUvQyxHQUFHLENBQUMsa0JBQWlCLEdBQUksV0FBVyxFQUFFO1FBQ3JDLE9BQU0sRUFBRyxXQUFXLENBQUMsaUJBQWlCLENBQUM7SUFDeEM7SUFBRSxLQUFLLEdBQUcsQ0FBQyxxQkFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDNUMsT0FBTSxFQUFHLGlCQUFTLENBQUMsaUJBQWlCLEVBQUMsRUFBRyxxQkFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuRixPQUFPLHFCQUFhLENBQUMsaUJBQWlCLENBQUM7SUFDeEM7SUFBRSxLQUFLLEdBQUcsQ0FBQyxrQkFBaUIsR0FBSSxpQkFBUyxFQUFFO1FBQzFDLE9BQU0sRUFBRyxpQkFBUyxDQUFDLGlCQUFpQixDQUFDO0lBQ3RDO0lBQUUsS0FBSyxHQUFHLENBQUMsUUFBTyxHQUFJLGFBQWEsRUFBRTtRQUNwQyxPQUFPLEtBQUs7SUFDYjtJQUFFLEtBQUs7UUFDTixNQUFNLElBQUksU0FBUyxDQUFDLGtEQUErQyxRQUFPLE1BQUcsQ0FBQztJQUMvRTtJQUVBLE9BQU8sTUFBTTtBQUNkO0FBbkJBO0FBcUJBOzs7QUFJQTtBQUVBO0FBQ0EsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7QUFFbEI7QUFDQSxHQUFHLENBQUMsY0FBYyxFQUFFLE9BQU8sU0FBUSxJQUFLLFlBQVcsR0FBSSxPQUFPLFNBQVEsSUFBSyxXQUFXLENBQUM7QUFFdkY7QUFDQSxHQUFHLENBQUMsV0FBVyxFQUFFO0lBQ2hCLEdBQUcsQ0FBQyxPQUFPLFFBQU8sSUFBSyxTQUFRLEdBQUksT0FBTyxDQUFDLFNBQVEsR0FBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtRQUM3RSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSTtJQUM3QjtBQUNELENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQy9QRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBd0hXLFlBQUcsRUFBbUIsZ0JBQU0sQ0FBQyxHQUFHO0FBRTNDLEdBQUcsQ0FBQyxDQUFDLGFBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtJQUNwQixZQUFHO1lBbUJGLGFBQVksUUFBK0M7Z0JBbEJ4QyxXQUFLLEVBQVEsRUFBRTtnQkFDZixhQUFPLEVBQVEsRUFBRTtnQkErRnBDLEtBQUMsTUFBTSxDQUFDLFdBQVcsRUFBQyxFQUFVLEtBQUs7Z0JBN0VsQyxHQUFHLENBQUMsUUFBUSxFQUFFO29CQUNiLEdBQUcsQ0FBQyxzQkFBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUMxQixJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUMsRUFBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUN6QyxJQUFNLE1BQUssRUFBRyxRQUFRLENBQUMsQ0FBQyxDQUFDOzRCQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzdCO29CQUNEO29CQUFFLEtBQUs7OzRCQUNOLElBQUksQ0FBZ0IsMENBQVE7Z0NBQXZCLElBQU0sTUFBSztnQ0FDZixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7b0JBRTlCO2dCQUNEOztZQUNEO1lBNUJBOzs7O1lBSVUsMEJBQVcsRUFBckIsVUFBc0IsSUFBUyxFQUFFLEdBQU07Z0JBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsU0FBTSxFQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxFQUFHLFFBQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDdEQsR0FBRyxDQUFDLFdBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7d0JBQzNCLE9BQU8sQ0FBQztvQkFDVDtnQkFDRDtnQkFDQSxPQUFPLENBQUMsQ0FBQztZQUNWLENBQUM7WUFtQkQsc0JBQUkscUJBQUk7cUJBQVI7b0JBQ0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQ3pCLENBQUM7Ozs7WUFFRCxvQkFBSyxFQUFMO2dCQUNDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTSxFQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTSxFQUFHLENBQUM7WUFDNUMsQ0FBQztZQUVELHFCQUFNLEVBQU4sVUFBTyxHQUFNO2dCQUNaLElBQU0sTUFBSyxFQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7Z0JBQy9DLEdBQUcsQ0FBQyxNQUFLLEVBQUcsQ0FBQyxFQUFFO29CQUNkLE9BQU8sS0FBSztnQkFDYjtnQkFDQSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QixPQUFPLElBQUk7WUFDWixDQUFDO1lBRUQsc0JBQU8sRUFBUDtnQkFBQTtnQkFDQyxJQUFNLE9BQU0sRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFDLEdBQU0sRUFBRSxDQUFTO29CQUMvQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLENBQUMsQ0FBQztnQkFFRixPQUFPLElBQUksdUJBQVksQ0FBQyxNQUFNLENBQUM7WUFDaEMsQ0FBQztZQUVELHNCQUFPLEVBQVAsVUFBUSxRQUEyRCxFQUFFLE9BQVk7Z0JBQ2hGLElBQU0sS0FBSSxFQUFHLElBQUksQ0FBQyxLQUFLO2dCQUN2QixJQUFNLE9BQU0sRUFBRyxJQUFJLENBQUMsT0FBTztnQkFDM0IsSUFBSSxDQUFDLElBQUksRUFBQyxFQUFHLENBQUMsRUFBRSxTQUFNLEVBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLEVBQUcsUUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN0RCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztnQkFDakQ7WUFDRCxDQUFDO1lBRUQsa0JBQUcsRUFBSCxVQUFJLEdBQU07Z0JBQ1QsSUFBTSxNQUFLLEVBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztnQkFDL0MsT0FBTyxNQUFLLEVBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNuRCxDQUFDO1lBRUQsa0JBQUcsRUFBSCxVQUFJLEdBQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFDLEVBQUcsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFFRCxtQkFBSSxFQUFKO2dCQUNDLE9BQU8sSUFBSSx1QkFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDcEMsQ0FBQztZQUVELGtCQUFHLEVBQUgsVUFBSSxHQUFNLEVBQUUsS0FBUTtnQkFDbkIsSUFBSSxNQUFLLEVBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztnQkFDN0MsTUFBSyxFQUFHLE1BQUssRUFBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSztnQkFDN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUMsRUFBRyxHQUFHO2dCQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxFQUFHLEtBQUs7Z0JBQzNCLE9BQU8sSUFBSTtZQUNaLENBQUM7WUFFRCxxQkFBTSxFQUFOO2dCQUNDLE9BQU8sSUFBSSx1QkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDdEMsQ0FBQztZQUVELGNBQUMsTUFBTSxDQUFDLFFBQVEsRUFBQyxFQUFqQjtnQkFDQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDdEIsQ0FBQztZQUdGLFVBQUM7UUFBRCxDQWxHTTtRQWlCRSxHQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUMsRUFBRyxFQUFJO1dBaUY5QjtBQUNGO0FBRUEsa0JBQWUsV0FBRzs7Ozs7Ozs7Ozs7OztBQ25PbEI7QUFDQTtBQUVBO0FBQ0E7QUFlVyxvQkFBVyxFQUFtQixnQkFBTSxDQUFDLE9BQU87QUFFMUMsbUJBQVUsRUFBRyxvQkFBdUIsS0FBVTtJQUMxRCxPQUFPLE1BQUssR0FBSSxPQUFPLEtBQUssQ0FBQyxLQUFJLElBQUssVUFBVTtBQUNqRCxDQUFDO0FBRUQsR0FBRyxDQUFDLENBQUMsYUFBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFO0lBT3hCLGdCQUFNLENBQUMsUUFBTyxFQUFHLG9CQUFXO1lBeUUzQjs7Ozs7Ozs7Ozs7O1lBWUEsaUJBQVksUUFBcUI7Z0JBQWpDO2dCQXNIQTs7O2dCQUdRLFdBQUs7Z0JBY2IsS0FBQyxNQUFNLENBQUMsV0FBVyxFQUFDLEVBQWMsU0FBUztnQkF0STFDOzs7Z0JBR0EsSUFBSSxVQUFTLEVBQUcsS0FBSztnQkFFckI7OztnQkFHQSxJQUFNLFdBQVUsRUFBRztvQkFDbEIsT0FBTyxLQUFJLENBQUMsTUFBSyxvQkFBa0IsR0FBSSxTQUFTO2dCQUNqRCxDQUFDO2dCQUVEOzs7Z0JBR0EsSUFBSSxVQUFTLEVBQStCLEVBQUU7Z0JBRTlDOzs7O2dCQUlBLElBQUksYUFBWSxFQUFHLFVBQVMsUUFBb0I7b0JBQy9DLEdBQUcsQ0FBQyxTQUFTLEVBQUU7d0JBQ2QsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ3pCO2dCQUNELENBQUM7Z0JBRUQ7Ozs7OztnQkFNQSxJQUFNLE9BQU0sRUFBRyxVQUFDLFFBQWUsRUFBRSxLQUFVO29CQUMxQztvQkFDQSxHQUFHLENBQUMsS0FBSSxDQUFDLE1BQUssbUJBQWtCLEVBQUU7d0JBQ2pDLE1BQU07b0JBQ1A7b0JBRUEsS0FBSSxDQUFDLE1BQUssRUFBRyxRQUFRO29CQUNyQixLQUFJLENBQUMsY0FBYSxFQUFHLEtBQUs7b0JBQzFCLGFBQVksRUFBRyxzQkFBYztvQkFFN0I7b0JBQ0E7b0JBQ0EsR0FBRyxDQUFDLFVBQVMsR0FBSSxTQUFTLENBQUMsT0FBTSxFQUFHLENBQUMsRUFBRTt3QkFDdEMsc0JBQWMsQ0FBQzs0QkFDZCxHQUFHLENBQUMsU0FBUyxFQUFFO2dDQUNkLElBQUksTUFBSyxFQUFHLFNBQVMsQ0FBQyxNQUFNO2dDQUM1QixJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUMsRUFBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7b0NBQy9CLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dDQUN4QjtnQ0FDQSxVQUFTLEVBQUcsSUFBSTs0QkFDakI7d0JBQ0QsQ0FBQyxDQUFDO29CQUNIO2dCQUNELENBQUM7Z0JBRUQ7Ozs7OztnQkFNQSxJQUFNLFFBQU8sRUFBRyxVQUFDLFFBQWUsRUFBRSxLQUFVO29CQUMzQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUU7d0JBQ2pCLE1BQU07b0JBQ1A7b0JBRUEsR0FBRyxDQUFDLGtCQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLG9CQUFrQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxtQkFBaUIsQ0FBQzt3QkFDakYsVUFBUyxFQUFHLElBQUk7b0JBQ2pCO29CQUFFLEtBQUs7d0JBQ04sTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7b0JBQ3hCO2dCQUNELENBQUM7Z0JBRUQsSUFBSSxDQUFDLEtBQUksRUFBRyxVQUNYLFdBQWlGLEVBQ2pGLFVBQW1GO29CQUVuRixPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTyxFQUFFLE1BQU07d0JBQ2xDO3dCQUNBO3dCQUNBO3dCQUNBLFlBQVksQ0FBQzs0QkFDWixJQUFNLFNBQVEsRUFDYixLQUFJLENBQUMsTUFBSyxxQkFBb0IsRUFBRSxXQUFXLEVBQUUsV0FBVzs0QkFFekQsR0FBRyxDQUFDLE9BQU8sU0FBUSxJQUFLLFVBQVUsRUFBRTtnQ0FDbkMsSUFBSTtvQ0FDSCxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQ0FDdEM7Z0NBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtvQ0FDZixNQUFNLENBQUMsS0FBSyxDQUFDO2dDQUNkOzRCQUNEOzRCQUFFLEtBQUssR0FBRyxDQUFDLEtBQUksQ0FBQyxNQUFLLG9CQUFtQixFQUFFO2dDQUN6QyxNQUFNLENBQUMsS0FBSSxDQUFDLGFBQWEsQ0FBQzs0QkFDM0I7NEJBQUUsS0FBSztnQ0FDTixPQUFPLENBQUMsS0FBSSxDQUFDLGFBQWEsQ0FBQzs0QkFDNUI7d0JBQ0QsQ0FBQyxDQUFDO29CQUNILENBQUMsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUk7b0JBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxvQkFBa0IsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksbUJBQWlCLENBQUM7Z0JBQ2xGO2dCQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7b0JBQ2YsTUFBTSxtQkFBaUIsS0FBSyxDQUFDO2dCQUM5QjtZQUNEO1lBbE1PLFlBQUcsRUFBVixVQUFXLFFBQXVFO2dCQUNqRixPQUFPLElBQUksSUFBSSxDQUFDLFVBQVMsT0FBTyxFQUFFLE1BQU07b0JBQ3ZDLElBQU0sT0FBTSxFQUFVLEVBQUU7b0JBQ3hCLElBQUksU0FBUSxFQUFHLENBQUM7b0JBQ2hCLElBQUksTUFBSyxFQUFHLENBQUM7b0JBQ2IsSUFBSSxXQUFVLEVBQUcsSUFBSTtvQkFFckIsaUJBQWlCLEtBQWEsRUFBRSxLQUFVO3dCQUN6QyxNQUFNLENBQUMsS0FBSyxFQUFDLEVBQUcsS0FBSzt3QkFDckIsRUFBRSxRQUFRO3dCQUNWLE1BQU0sRUFBRTtvQkFDVDtvQkFFQTt3QkFDQyxHQUFHLENBQUMsV0FBVSxHQUFJLFNBQVEsRUFBRyxLQUFLLEVBQUU7NEJBQ25DLE1BQU07d0JBQ1A7d0JBQ0EsT0FBTyxDQUFDLE1BQU0sQ0FBQztvQkFDaEI7b0JBRUEscUJBQXFCLEtBQWEsRUFBRSxJQUFTO3dCQUM1QyxFQUFFLEtBQUs7d0JBQ1AsR0FBRyxDQUFDLGtCQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQ3JCOzRCQUNBOzRCQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDO3dCQUM3Qzt3QkFBRSxLQUFLOzRCQUNOLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUN0RDtvQkFDRDtvQkFFQSxJQUFJLEVBQUMsRUFBRyxDQUFDOzt3QkFDVCxJQUFJLENBQWdCLDBDQUFROzRCQUF2QixJQUFNLE1BQUs7NEJBQ2YsV0FBVyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7NEJBQ3JCLENBQUMsRUFBRTs7Ozs7Ozs7OztvQkFFSixXQUFVLEVBQUcsS0FBSztvQkFFbEIsTUFBTSxFQUFFOztnQkFDVCxDQUFDLENBQUM7WUFDSCxDQUFDO1lBRU0sYUFBSSxFQUFYLFVBQWUsUUFBK0Q7Z0JBQzdFLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBUyxPQUE4QixFQUFFLE1BQU07O3dCQUM5RCxJQUFJLENBQWUsMENBQVE7NEJBQXRCLElBQU0sS0FBSTs0QkFDZCxHQUFHLENBQUMsS0FBSSxXQUFZLE9BQU8sRUFBRTtnQ0FDNUI7Z0NBQ0E7Z0NBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDOzRCQUMzQjs0QkFBRSxLQUFLO2dDQUNOLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQzs0QkFDcEM7Ozs7Ozs7Ozs7O2dCQUVGLENBQUMsQ0FBQztZQUNILENBQUM7WUFFTSxlQUFNLEVBQWIsVUFBYyxNQUFZO2dCQUN6QixPQUFPLElBQUksSUFBSSxDQUFDLFVBQVMsT0FBTyxFQUFFLE1BQU07b0JBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDO1lBQ0gsQ0FBQztZQUlNLGdCQUFPLEVBQWQsVUFBa0IsS0FBVztnQkFDNUIsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFTLE9BQU87b0JBQy9CLE9BQU8sQ0FBSSxLQUFLLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQztZQUNILENBQUM7WUFnSUQsd0JBQUssRUFBTCxVQUNDLFVBQWlGO2dCQUVqRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztZQUN4QyxDQUFDO1lBb0JGLGNBQUM7UUFBRCxDQTdOK0I7UUF1RXZCLEdBQUMsTUFBTSxDQUFDLE9BQU8sRUFBQyxFQUF1QixtQkFBa0M7V0FzSmhGO0FBQ0Y7QUFFQSxrQkFBZSxtQkFBVzs7Ozs7Ozs7Ozs7OztBQ2pRMUI7QUFDQTtBQUNBO0FBQ0E7QUFtR1csWUFBRyxFQUFtQixnQkFBTSxDQUFDLEdBQUc7QUFFM0MsR0FBRyxDQUFDLENBQUMsYUFBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0lBQ3BCLFlBQUc7WUFLRixhQUFZLFFBQXFDO2dCQUpoQyxjQUFRLEVBQVEsRUFBRTtnQkF3RW5DLEtBQUMsTUFBTSxDQUFDLFdBQVcsRUFBQyxFQUFVLEtBQUs7Z0JBbkVsQyxHQUFHLENBQUMsUUFBUSxFQUFFO29CQUNiLEdBQUcsQ0FBQyxzQkFBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUMxQixJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUMsRUFBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDdEI7b0JBQ0Q7b0JBQUUsS0FBSzs7NEJBQ04sSUFBSSxDQUFnQiwwQ0FBUTtnQ0FBdkIsSUFBTSxNQUFLO2dDQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOzs7Ozs7Ozs7O29CQUVqQjtnQkFDRDs7WUFDRDtZQUVBLGtCQUFHLEVBQUgsVUFBSSxLQUFRO2dCQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNwQixPQUFPLElBQUk7Z0JBQ1o7Z0JBQ0EsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN6QixPQUFPLElBQUk7WUFDWixDQUFDO1lBRUQsb0JBQUssRUFBTDtnQkFDQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU0sRUFBRyxDQUFDO1lBQ3pCLENBQUM7WUFFRCxxQkFBTSxFQUFOLFVBQU8sS0FBUTtnQkFDZCxJQUFNLElBQUcsRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3hDLEdBQUcsQ0FBQyxJQUFHLElBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ2YsT0FBTyxLQUFLO2dCQUNiO2dCQUNBLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzVCLE9BQU8sSUFBSTtZQUNaLENBQUM7WUFFRCxzQkFBTyxFQUFQO2dCQUNDLE9BQU8sSUFBSSx1QkFBWSxDQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFhLFVBQUMsS0FBSyxJQUFLLFFBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFkLENBQWMsQ0FBQyxDQUFDO1lBQzlGLENBQUM7WUFFRCxzQkFBTyxFQUFQLFVBQVEsVUFBcUQsRUFBRSxPQUFhO2dCQUMzRSxJQUFNLFNBQVEsRUFBRyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUM5QixJQUFJLE9BQU0sRUFBRyxRQUFRLENBQUMsSUFBSSxFQUFFO2dCQUM1QixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtvQkFDcEIsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztvQkFDMUQsT0FBTSxFQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pCO1lBQ0QsQ0FBQztZQUVELGtCQUFHLEVBQUgsVUFBSSxLQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDLEVBQUcsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxtQkFBSSxFQUFKO2dCQUNDLE9BQU8sSUFBSSx1QkFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDdkMsQ0FBQztZQUVELHNCQUFJLHFCQUFJO3FCQUFSO29CQUNDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dCQUM1QixDQUFDOzs7O1lBRUQscUJBQU0sRUFBTjtnQkFDQyxPQUFPLElBQUksdUJBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLENBQUM7WUFFRCxjQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUMsRUFBakI7Z0JBQ0MsT0FBTyxJQUFJLHVCQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN2QyxDQUFDO1lBR0YsVUFBQztRQUFELENBMUVNO1FBR0UsR0FBQyxNQUFNLENBQUMsT0FBTyxFQUFDLEVBQUcsRUFBSTtXQXVFOUI7QUFDRjtBQUVBLGtCQUFlLFdBQUc7Ozs7Ozs7Ozs7OztBQ3RMbEI7QUFDQTtBQUNBO0FBUVcsZUFBTSxFQUFzQixnQkFBTSxDQUFDLE1BQU07QUFFcEQsR0FBRyxDQUFDLENBQUMsYUFBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO0lBQ3ZCOzs7OztJQUtBLElBQU0saUJBQWMsRUFBRyx3QkFBd0IsS0FBVTtRQUN4RCxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFLLEVBQUcsa0JBQWtCLENBQUM7UUFDaEQ7UUFDQSxPQUFPLEtBQUs7SUFDYixDQUFDO0lBRUQsSUFBTSxtQkFBZ0IsRUFBRyxNQUFNLENBQUMsZ0JBQWdCO0lBQ2hELElBQU0saUJBQWMsRUFJVCxNQUFNLENBQUMsY0FBcUI7SUFDdkMsSUFBTSxTQUFNLEVBQUcsTUFBTSxDQUFDLE1BQU07SUFFNUIsSUFBTSxlQUFZLEVBQUcsTUFBTSxDQUFDLFNBQVM7SUFFckMsSUFBTSxnQkFBYSxFQUE4QixFQUFFO0lBRW5ELElBQU0sZ0JBQWEsRUFBRyxDQUFDO1FBQ3RCLElBQU0sUUFBTyxFQUFHLFFBQU0sQ0FBQyxJQUFJLENBQUM7UUFDNUIsT0FBTyxVQUFTLElBQXFCO1lBQ3BDLElBQUksUUFBTyxFQUFHLENBQUM7WUFDZixJQUFJLElBQVk7WUFDaEIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBQyxFQUFHLENBQUMsUUFBTyxHQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQy9DLEVBQUUsT0FBTztZQUNWO1lBQ0EsS0FBSSxHQUFJLE1BQU0sQ0FBQyxRQUFPLEdBQUksRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxJQUFJLEVBQUMsRUFBRyxJQUFJO1lBQ3BCLEtBQUksRUFBRyxLQUFJLEVBQUcsSUFBSTtZQUVsQjtZQUNBO1lBQ0EsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLGNBQVksRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDekQsZ0JBQWMsQ0FBQyxjQUFZLEVBQUUsSUFBSSxFQUFFO29CQUNsQyxHQUFHLEVBQUUsVUFBdUIsS0FBVTt3QkFDckMsZ0JBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLHlCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0RDtpQkFDQSxDQUFDO1lBQ0g7WUFFQSxPQUFPLElBQUk7UUFDWixDQUFDO0lBQ0YsQ0FBQyxDQUFDLEVBQUU7SUFFSixJQUFNLGlCQUFjLEVBQUcsZ0JBQTJCLFdBQTZCO1FBQzlFLEdBQUcsQ0FBQyxLQUFJLFdBQVksZ0JBQWMsRUFBRTtZQUNuQyxNQUFNLElBQUksU0FBUyxDQUFDLHdDQUF3QyxDQUFDO1FBQzlEO1FBQ0EsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQzNCLENBQUM7SUFFRCxlQUFNLEVBQUcsZ0JBQU0sQ0FBQyxPQUFNLEVBQUcsZ0JBQThCLFdBQTZCO1FBQ25GLEdBQUcsQ0FBQyxLQUFJLFdBQVksTUFBTSxFQUFFO1lBQzNCLE1BQU0sSUFBSSxTQUFTLENBQUMsd0NBQXdDLENBQUM7UUFDOUQ7UUFDQSxJQUFNLElBQUcsRUFBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFjLENBQUMsU0FBUyxDQUFDO1FBQ25ELFlBQVcsRUFBRyxZQUFXLElBQUssVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ2xFLE9BQU8sa0JBQWdCLENBQUMsR0FBRyxFQUFFO1lBQzVCLGVBQWUsRUFBRSx5QkFBa0IsQ0FBQyxXQUFXLENBQUM7WUFDaEQsUUFBUSxFQUFFLHlCQUFrQixDQUFDLGVBQWEsQ0FBQyxXQUFXLENBQUM7U0FDdkQsQ0FBQztJQUNILENBQXNCO0lBRXRCO0lBQ0EsZ0JBQWMsQ0FDYixjQUFNLEVBQ04sS0FBSyxFQUNMLHlCQUFrQixDQUFDLFVBQVMsR0FBVztRQUN0QyxHQUFHLENBQUMsZUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sZUFBYSxDQUFDLEdBQUcsQ0FBQztRQUMxQjtRQUNBLE9BQU8sQ0FBQyxlQUFhLENBQUMsR0FBRyxFQUFDLEVBQUcsY0FBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUNGO0lBQ0Qsa0JBQWdCLENBQUMsY0FBTSxFQUFFO1FBQ3hCLE1BQU0sRUFBRSx5QkFBa0IsQ0FBQyxVQUFTLEdBQVc7WUFDOUMsSUFBSSxHQUFXO1lBQ2YsZ0JBQWMsQ0FBQyxHQUFHLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUcsR0FBSSxlQUFhLEVBQUU7Z0JBQzFCLEdBQUcsQ0FBQyxlQUFhLENBQUMsR0FBRyxFQUFDLElBQUssR0FBRyxFQUFFO29CQUMvQixPQUFPLEdBQUc7Z0JBQ1g7WUFDRDtRQUNELENBQUMsQ0FBQztRQUNGLFdBQVcsRUFBRSx5QkFBa0IsQ0FBQyxjQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7UUFDeEUsa0JBQWtCLEVBQUUseUJBQWtCLENBQUMsY0FBTSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7UUFDdEYsUUFBUSxFQUFFLHlCQUFrQixDQUFDLGNBQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztRQUNsRSxLQUFLLEVBQUUseUJBQWtCLENBQUMsY0FBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQzVELFVBQVUsRUFBRSx5QkFBa0IsQ0FBQyxjQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7UUFDdEUsT0FBTyxFQUFFLHlCQUFrQixDQUFDLGNBQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztRQUNoRSxNQUFNLEVBQUUseUJBQWtCLENBQUMsY0FBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQzlELE9BQU8sRUFBRSx5QkFBa0IsQ0FBQyxjQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7UUFDaEUsS0FBSyxFQUFFLHlCQUFrQixDQUFDLGNBQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztRQUM1RCxXQUFXLEVBQUUseUJBQWtCLENBQUMsY0FBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQ3hFLFdBQVcsRUFBRSx5QkFBa0IsQ0FBQyxjQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7UUFDeEUsV0FBVyxFQUFFLHlCQUFrQixDQUFDLGNBQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUs7S0FDdkUsQ0FBQztJQUVGO0lBQ0Esa0JBQWdCLENBQUMsZ0JBQWMsQ0FBQyxTQUFTLEVBQUU7UUFDMUMsV0FBVyxFQUFFLHlCQUFrQixDQUFDLGNBQU0sQ0FBQztRQUN2QyxRQUFRLEVBQUUseUJBQWtCLENBQzNCO1lBQ0MsT0FBTyxJQUFJLENBQUMsUUFBUTtRQUNyQixDQUFDLEVBQ0QsS0FBSyxFQUNMLEtBQUs7S0FFTixDQUFDO0lBRUY7SUFDQSxrQkFBZ0IsQ0FBQyxjQUFNLENBQUMsU0FBUyxFQUFFO1FBQ2xDLFFBQVEsRUFBRSx5QkFBa0IsQ0FBQztZQUM1QixPQUFPLFdBQVUsRUFBUyxnQkFBYyxDQUFDLElBQUksQ0FBRSxDQUFDLGdCQUFlLEVBQUcsR0FBRztRQUN0RSxDQUFDLENBQUM7UUFDRixPQUFPLEVBQUUseUJBQWtCLENBQUM7WUFDM0IsT0FBTyxnQkFBYyxDQUFDLElBQUksQ0FBQztRQUM1QixDQUFDO0tBQ0QsQ0FBQztJQUVGLGdCQUFjLENBQ2IsY0FBTSxDQUFDLFNBQVMsRUFDaEIsY0FBTSxDQUFDLFdBQVcsRUFDbEIseUJBQWtCLENBQUM7UUFDbEIsT0FBTyxnQkFBYyxDQUFDLElBQUksQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FDRjtJQUNELGdCQUFjLENBQUMsY0FBTSxDQUFDLFNBQVMsRUFBRSxjQUFNLENBQUMsV0FBVyxFQUFFLHlCQUFrQixDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXRHLGdCQUFjLENBQ2IsZ0JBQWMsQ0FBQyxTQUFTLEVBQ3hCLGNBQU0sQ0FBQyxXQUFXLEVBQ2xCLHlCQUFrQixDQUFPLGNBQU8sQ0FBQyxTQUFTLENBQUMsY0FBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQ25GO0lBQ0QsZ0JBQWMsQ0FDYixnQkFBYyxDQUFDLFNBQVMsRUFDeEIsY0FBTSxDQUFDLFdBQVcsRUFDbEIseUJBQWtCLENBQU8sY0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FDbkY7QUFDRjtBQUVBOzs7OztBQUtBLGtCQUF5QixLQUFVO0lBQ2xDLE9BQU8sQ0FBQyxNQUFLLEdBQUksQ0FBQyxPQUFPLE1BQUssSUFBSyxTQUFRLEdBQUksS0FBSyxDQUFDLGVBQWUsRUFBQyxJQUFLLFFBQVEsQ0FBQyxFQUFDLEdBQUksS0FBSztBQUM5RjtBQUZBO0FBSUE7OztBQUdBO0lBQ0MsYUFBYTtJQUNiLG9CQUFvQjtJQUNwQixVQUFVO0lBQ1YsU0FBUztJQUNULFNBQVM7SUFDVCxRQUFRO0lBQ1IsT0FBTztJQUNQLE9BQU87SUFDUCxhQUFhO0lBQ2IsYUFBYTtJQUNiLGFBQWE7SUFDYjtDQUNBLENBQUMsT0FBTyxDQUFDLFVBQUMsU0FBUztJQUNuQixHQUFHLENBQUMsQ0FBRSxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDaEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFNLEVBQUUsU0FBUyxFQUFFLHlCQUFrQixDQUFDLGNBQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xHO0FBQ0QsQ0FBQyxDQUFDO0FBRUYsa0JBQWUsY0FBTTs7Ozs7Ozs7Ozs7O0FDL0xyQjtBQUNBO0FBQ0E7QUFDQTtBQW9FVyxnQkFBTyxFQUF1QixnQkFBTSxDQUFDLE9BQU87QUFPdkQsR0FBRyxDQUFDLENBQUMsYUFBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFO0lBQ3hCLElBQU0sVUFBTyxFQUFRLEVBQUU7SUFFdkIsSUFBTSxTQUFNLEVBQUc7UUFDZCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRSxFQUFHLFNBQVMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBTSxlQUFZLEVBQUcsQ0FBQztRQUNyQixJQUFJLFFBQU8sRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUUsRUFBRyxTQUFTLENBQUM7UUFFaEQsT0FBTztZQUNOLE9BQU8sT0FBTSxFQUFHLFFBQU0sR0FBRSxFQUFHLENBQUMsT0FBTyxHQUFFLEVBQUcsSUFBSSxDQUFDO1FBQzlDLENBQUM7SUFDRixDQUFDLENBQUMsRUFBRTtJQUVKLGdCQUFPO1FBSU4saUJBQVksUUFBK0M7WUF5RzNELEtBQUMsTUFBTSxDQUFDLFdBQVcsRUFBQyxFQUFjLFNBQVM7WUF4RzFDLElBQUksQ0FBQyxNQUFLLEVBQUcsY0FBWSxFQUFFO1lBRTNCLElBQUksQ0FBQyxlQUFjLEVBQUcsRUFBRTtZQUV4QixHQUFHLENBQUMsUUFBUSxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxzQkFBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUMxQixJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUMsRUFBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN6QyxJQUFNLEtBQUksRUFBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNCO2dCQUNEO2dCQUFFLEtBQUs7O3dCQUNOLElBQUksQ0FBdUIsMENBQVE7NEJBQXhCLDhDQUFZLEVBQVgsV0FBRyxFQUFFLGFBQUs7NEJBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQzs7Ozs7Ozs7OztnQkFFdEI7WUFDRDs7UUFDRDtRQUVRLHVDQUFvQixFQUE1QixVQUE2QixHQUFRO1lBQ3BDLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsRUFBQyxFQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwRCxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFHLElBQUssR0FBRyxFQUFFO29CQUN2QyxPQUFPLENBQUM7Z0JBQ1Q7WUFDRDtZQUVBLE9BQU8sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztRQUVELHlCQUFNLEVBQU4sVUFBTyxHQUFRO1lBQ2QsR0FBRyxDQUFDLElBQUcsSUFBSyxVQUFTLEdBQUksSUFBRyxJQUFLLElBQUksRUFBRTtnQkFDdEMsT0FBTyxLQUFLO1lBQ2I7WUFFQSxJQUFNLE1BQUssRUFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDMUMsR0FBRyxDQUFDLE1BQUssR0FBSSxLQUFLLENBQUMsSUFBRyxJQUFLLElBQUcsR0FBSSxLQUFLLENBQUMsTUFBSyxJQUFLLFNBQU8sRUFBRTtnQkFDMUQsS0FBSyxDQUFDLE1BQUssRUFBRyxTQUFPO2dCQUNyQixPQUFPLElBQUk7WUFDWjtZQUVBLElBQU0sWUFBVyxFQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7WUFDbEQsR0FBRyxDQUFDLFlBQVcsR0FBSSxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sSUFBSTtZQUNaO1lBRUEsT0FBTyxLQUFLO1FBQ2IsQ0FBQztRQUVELHNCQUFHLEVBQUgsVUFBSSxHQUFRO1lBQ1gsR0FBRyxDQUFDLElBQUcsSUFBSyxVQUFTLEdBQUksSUFBRyxJQUFLLElBQUksRUFBRTtnQkFDdEMsT0FBTyxTQUFTO1lBQ2pCO1lBRUEsSUFBTSxNQUFLLEVBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzFDLEdBQUcsQ0FBQyxNQUFLLEdBQUksS0FBSyxDQUFDLElBQUcsSUFBSyxJQUFHLEdBQUksS0FBSyxDQUFDLE1BQUssSUFBSyxTQUFPLEVBQUU7Z0JBQzFELE9BQU8sS0FBSyxDQUFDLEtBQUs7WUFDbkI7WUFFQSxJQUFNLFlBQVcsRUFBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDO1lBQ2xELEdBQUcsQ0FBQyxZQUFXLEdBQUksQ0FBQyxFQUFFO2dCQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSztZQUM5QztRQUNELENBQUM7UUFFRCxzQkFBRyxFQUFILFVBQUksR0FBUTtZQUNYLEdBQUcsQ0FBQyxJQUFHLElBQUssVUFBUyxHQUFJLElBQUcsSUFBSyxJQUFJLEVBQUU7Z0JBQ3RDLE9BQU8sS0FBSztZQUNiO1lBRUEsSUFBTSxNQUFLLEVBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBSyxHQUFJLEtBQUssQ0FBQyxJQUFHLElBQUssSUFBRyxHQUFJLEtBQUssQ0FBQyxNQUFLLElBQUssU0FBTyxDQUFDLEVBQUU7Z0JBQ25FLE9BQU8sSUFBSTtZQUNaO1lBRUEsSUFBTSxZQUFXLEVBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztZQUNsRCxHQUFHLENBQUMsWUFBVyxHQUFJLENBQUMsRUFBRTtnQkFDckIsT0FBTyxJQUFJO1lBQ1o7WUFFQSxPQUFPLEtBQUs7UUFDYixDQUFDO1FBRUQsc0JBQUcsRUFBSCxVQUFJLEdBQVEsRUFBRSxLQUFXO1lBQ3hCLEdBQUcsQ0FBQyxDQUFDLElBQUcsR0FBSSxDQUFDLE9BQU8sSUFBRyxJQUFLLFNBQVEsR0FBSSxPQUFPLElBQUcsSUFBSyxVQUFVLENBQUMsRUFBRTtnQkFDbkUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvQ0FBb0MsQ0FBQztZQUMxRDtZQUNBLElBQUksTUFBSyxFQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN4QyxHQUFHLENBQUMsQ0FBQyxNQUFLLEdBQUksS0FBSyxDQUFDLElBQUcsSUFBSyxHQUFHLEVBQUU7Z0JBQ2hDLE1BQUssRUFBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtvQkFDM0IsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUc7aUJBQ2pCLENBQUM7Z0JBRUYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDaEM7Z0JBQUUsS0FBSztvQkFDTixNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO3dCQUN0QyxLQUFLLEVBQUU7cUJBQ1AsQ0FBQztnQkFDSDtZQUNEO1lBQ0EsS0FBSyxDQUFDLE1BQUssRUFBRyxLQUFLO1lBQ25CLE9BQU8sSUFBSTtRQUNaLENBQUM7UUFHRixjQUFDO0lBQUQsQ0E5R1UsR0E4R1Q7QUFDRjtBQUVBLGtCQUFlLGVBQU87Ozs7Ozs7Ozs7OztBQzlNdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXFIQSxHQUFHLENBQUMsYUFBRyxDQUFDLFdBQVcsRUFBQyxHQUFJLGFBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO0lBQzlDLGFBQUksRUFBRyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJO0lBQ3hCLFdBQUUsRUFBRyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3BCLG1CQUFVLEVBQUcsaUJBQVUsQ0FBQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO0lBQzFELGFBQUksRUFBRyxpQkFBVSxDQUFDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDOUMsYUFBSSxFQUFHLGlCQUFVLENBQUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztJQUM5QyxrQkFBUyxFQUFHLGlCQUFVLENBQUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztBQUN6RDtBQUFFLEtBQUs7SUFDTjtJQUNBO0lBRUE7Ozs7OztJQU1BLElBQU0sV0FBUSxFQUFHLGtCQUFrQixNQUFjO1FBQ2hELEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEIsT0FBTyxDQUFDO1FBQ1Q7UUFFQSxPQUFNLEVBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2QixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JCLE9BQU0sRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM1QjtRQUNBO1FBQ0EsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLHlCQUFnQixDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7O0lBTUEsSUFBTSxZQUFTLEVBQUcsbUJBQW1CLEtBQVU7UUFDOUMsTUFBSyxFQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDckIsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixPQUFPLENBQUM7UUFDVDtRQUNBLEdBQUcsQ0FBQyxNQUFLLElBQUssRUFBQyxHQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sS0FBSztRQUNiO1FBRUEsT0FBTyxDQUFDLE1BQUssRUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7OztJQU9BLElBQU0sa0JBQWUsRUFBRyx5QkFBeUIsS0FBYSxFQUFFLE1BQWM7UUFDN0UsT0FBTyxNQUFLLEVBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTSxFQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDekUsQ0FBQztJQUVELGFBQUksRUFBRyxjQUVOLFNBQXlDLEVBQ3pDLFdBQW1DLEVBQ25DLE9BQWE7UUFFYixHQUFHLENBQUMsVUFBUyxHQUFJLElBQUksRUFBRTtZQUN0QixNQUFNLElBQUksU0FBUyxDQUFDLHFDQUFxQyxDQUFDO1FBQzNEO1FBRUEsR0FBRyxDQUFDLFlBQVcsR0FBSSxPQUFPLEVBQUU7WUFDM0IsWUFBVyxFQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3hDO1FBRUE7UUFDQSxJQUFNLFlBQVcsRUFBRyxJQUFJO1FBQ3hCLElBQU0sT0FBTSxFQUFXLFVBQVEsQ0FBTyxTQUFVLENBQUMsTUFBTSxDQUFDO1FBRXhEO1FBQ0EsSUFBTSxNQUFLLEVBQ1YsT0FBTyxZQUFXLElBQUssV0FBVyxFQUFTLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUUvRixHQUFHLENBQUMsQ0FBQyxzQkFBVyxDQUFDLFNBQVMsRUFBQyxHQUFJLENBQUMscUJBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0RCxPQUFPLEtBQUs7UUFDYjtRQUVBO1FBQ0E7UUFDQSxHQUFHLENBQUMsc0JBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMzQixHQUFHLENBQUMsT0FBTSxJQUFLLENBQUMsRUFBRTtnQkFDakIsT0FBTyxFQUFFO1lBQ1Y7WUFFQSxJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUMsRUFBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQyxLQUFLLENBQUMsQ0FBQyxFQUFDLEVBQUcsWUFBWSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNyRTtRQUNEO1FBQUUsS0FBSztZQUNOLElBQUksRUFBQyxFQUFHLENBQUM7O2dCQUNULElBQUksQ0FBZ0IsNENBQVM7b0JBQXhCLElBQU0sTUFBSztvQkFDZixLQUFLLENBQUMsQ0FBQyxFQUFDLEVBQUcsWUFBWSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSztvQkFDdEQsQ0FBQyxFQUFFOzs7Ozs7Ozs7O1FBRUw7UUFFQSxHQUFHLENBQU8sU0FBVSxDQUFDLE9BQU0sSUFBSyxTQUFTLEVBQUU7WUFDMUMsS0FBSyxDQUFDLE9BQU0sRUFBRyxNQUFNO1FBQ3RCO1FBRUEsT0FBTyxLQUFLOztJQUNiLENBQUM7SUFFRCxXQUFFLEVBQUc7UUFBZTthQUFBLFVBQWEsRUFBYixxQkFBYSxFQUFiLElBQWE7WUFBYjs7UUFDbkIsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxtQkFBVSxFQUFHLG9CQUNaLE1BQW9CLEVBQ3BCLE1BQWMsRUFDZCxLQUFhLEVBQ2IsR0FBWTtRQUVaLEdBQUcsQ0FBQyxPQUFNLEdBQUksSUFBSSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxTQUFTLENBQUMsaURBQWlELENBQUM7UUFDdkU7UUFFQSxJQUFNLE9BQU0sRUFBRyxVQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN0QyxPQUFNLEVBQUcsaUJBQWUsQ0FBQyxXQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ25ELE1BQUssRUFBRyxpQkFBZSxDQUFDLFdBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDakQsSUFBRyxFQUFHLGlCQUFlLENBQUMsSUFBRyxJQUFLLFVBQVUsRUFBRSxPQUFPLEVBQUUsV0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUMxRSxJQUFJLE1BQUssRUFBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUcsRUFBRyxLQUFLLEVBQUUsT0FBTSxFQUFHLE1BQU0sQ0FBQztRQUVsRCxJQUFJLFVBQVMsRUFBRyxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxPQUFNLEVBQUcsTUFBSyxHQUFJLE9BQU0sRUFBRyxNQUFLLEVBQUcsS0FBSyxFQUFFO1lBQzdDLFVBQVMsRUFBRyxDQUFDLENBQUM7WUFDZCxNQUFLLEdBQUksTUFBSyxFQUFHLENBQUM7WUFDbEIsT0FBTSxHQUFJLE1BQUssRUFBRyxDQUFDO1FBQ3BCO1FBRUEsT0FBTyxNQUFLLEVBQUcsQ0FBQyxFQUFFO1lBQ2pCLEdBQUcsQ0FBQyxNQUFLLEdBQUksTUFBTSxFQUFFO2dCQUNuQixNQUErQixDQUFDLE1BQU0sRUFBQyxFQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDekQ7WUFBRSxLQUFLO2dCQUNOLE9BQVEsTUFBK0IsQ0FBQyxNQUFNLENBQUM7WUFDaEQ7WUFFQSxPQUFNLEdBQUksU0FBUztZQUNuQixNQUFLLEdBQUksU0FBUztZQUNsQixLQUFLLEVBQUU7UUFDUjtRQUVBLE9BQU8sTUFBTTtJQUNkLENBQUM7SUFFRCxhQUFJLEVBQUcsY0FBaUIsTUFBb0IsRUFBRSxLQUFVLEVBQUUsS0FBYyxFQUFFLEdBQVk7UUFDckYsSUFBTSxPQUFNLEVBQUcsVUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdEMsSUFBSSxFQUFDLEVBQUcsaUJBQWUsQ0FBQyxXQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ2pELElBQUcsRUFBRyxpQkFBZSxDQUFDLElBQUcsSUFBSyxVQUFVLEVBQUUsT0FBTyxFQUFFLFdBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUM7UUFFMUUsT0FBTyxFQUFDLEVBQUcsR0FBRyxFQUFFO1lBQ2QsTUFBK0IsQ0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFHLEtBQUs7UUFDOUM7UUFFQSxPQUFPLE1BQU07SUFDZCxDQUFDO0lBRUQsYUFBSSxFQUFHLGNBQWlCLE1BQW9CLEVBQUUsUUFBeUIsRUFBRSxPQUFZO1FBQ3BGLElBQU0sTUFBSyxFQUFHLGlCQUFTLENBQUksTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7UUFDckQsT0FBTyxNQUFLLElBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVM7SUFDaEQsQ0FBQztJQUVELGtCQUFTLEVBQUcsbUJBQXNCLE1BQW9CLEVBQUUsUUFBeUIsRUFBRSxPQUFZO1FBQzlGLElBQU0sT0FBTSxFQUFHLFVBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRXRDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNkLE1BQU0sSUFBSSxTQUFTLENBQUMsMENBQTBDLENBQUM7UUFDaEU7UUFFQSxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQ1osU0FBUSxFQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2xDO1FBRUEsSUFBSSxDQUFDLElBQUksRUFBQyxFQUFHLENBQUMsRUFBRSxFQUFDLEVBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDbkMsT0FBTyxDQUFDO1lBQ1Q7UUFDRDtRQUVBLE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztBQUNGO0FBRUEsR0FBRyxDQUFDLGFBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTtJQUNyQixpQkFBUSxFQUFHLGlCQUFVLENBQUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUN2RDtBQUFFLEtBQUs7SUFDTjs7Ozs7O0lBTUEsSUFBTSxXQUFRLEVBQUcsa0JBQWtCLE1BQWM7UUFDaEQsT0FBTSxFQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQixPQUFPLENBQUM7UUFDVDtRQUNBLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckIsT0FBTSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzVCO1FBQ0E7UUFDQSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUseUJBQWdCLENBQUM7SUFDdkQsQ0FBQztJQUVELGlCQUFRLEVBQUcsa0JBQXFCLE1BQW9CLEVBQUUsYUFBZ0IsRUFBRSxTQUFxQjtRQUFyQix5Q0FBcUI7UUFDNUYsSUFBSSxJQUFHLEVBQUcsVUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFakMsSUFBSSxDQUFDLElBQUksRUFBQyxFQUFHLFNBQVMsRUFBRSxFQUFDLEVBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ3JDLElBQU0sZUFBYyxFQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEMsR0FBRyxDQUNGLGNBQWEsSUFBSyxlQUFjO2dCQUNoQyxDQUFDLGNBQWEsSUFBSyxjQUFhLEdBQUksZUFBYyxJQUFLLGNBQWMsQ0FDdEUsRUFBRTtnQkFDRCxPQUFPLElBQUk7WUFDWjtRQUNEO1FBRUEsT0FBTyxLQUFLO0lBQ2IsQ0FBQztBQUNGOzs7Ozs7Ozs7OztBQzNWQSxJQUFNLGFBQVksRUFBUSxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxPQUFPLE9BQU0sSUFBSyxXQUFXLEVBQUU7UUFDbEM7UUFDQTtRQUNBO1FBQ0EsT0FBTyxNQUFNO0lBQ2Q7SUFBRSxLQUFLLEdBQUcsQ0FBQyxPQUFPLE9BQU0sSUFBSyxXQUFXLEVBQUU7UUFDekM7UUFDQSxPQUFPLE1BQU07SUFDZDtJQUFFLEtBQUssR0FBRyxDQUFDLE9BQU8sS0FBSSxJQUFLLFdBQVcsRUFBRTtRQUN2QztRQUNBLE9BQU8sSUFBSTtJQUNaO0FBQ0QsQ0FBQyxDQUFDLEVBQUU7QUFFSixrQkFBZSxZQUFZOzs7Ozs7Ozs7Ozs7QUNmM0I7QUFDQTtBQXVCQSxJQUFNLFdBQVUsRUFBd0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFTLENBQUU7QUFFeEU7OztBQUdBO0lBS0Msc0JBQVksSUFBZ0M7UUFIcEMsZ0JBQVUsRUFBRyxDQUFDLENBQUM7UUFJdEIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsZ0JBQWUsRUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQy9DO1FBQUUsS0FBSztZQUNOLElBQUksQ0FBQyxNQUFLLEVBQUcsSUFBSTtRQUNsQjtJQUNEO0lBRUE7OztJQUdBLDRCQUFJLEVBQUo7UUFDQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFO1FBQ25DO1FBQ0EsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNoQixPQUFPLFVBQVU7UUFDbEI7UUFDQSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzFDLE9BQU87Z0JBQ04sSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVU7YUFDakM7UUFDRjtRQUNBLE9BQU8sVUFBVTtJQUNsQixDQUFDO0lBRUQsdUJBQUMsTUFBTSxDQUFDLFFBQVEsRUFBQyxFQUFqQjtRQUNDLE9BQU8sSUFBSTtJQUNaLENBQUM7SUFDRixtQkFBQztBQUFELENBbkNBO0FBQWE7QUFxQ2I7Ozs7O0FBS0Esb0JBQTJCLEtBQVU7SUFDcEMsT0FBTyxNQUFLLEdBQUksT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBQyxJQUFLLFVBQVU7QUFDN0Q7QUFGQTtBQUlBOzs7OztBQUtBLHFCQUE0QixLQUFVO0lBQ3JDLE9BQU8sTUFBSyxHQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU0sSUFBSyxRQUFRO0FBQ2pEO0FBRkE7QUFJQTs7Ozs7QUFLQSxhQUF1QixRQUFvQztJQUMxRCxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUNuQztJQUFFLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNqQyxPQUFPLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNsQztBQUNEO0FBTkE7QUFtQkE7Ozs7Ozs7QUFPQSxlQUNDLFFBQTZDLEVBQzdDLFFBQTBCLEVBQzFCLE9BQWE7SUFFYixJQUFJLE9BQU0sRUFBRyxLQUFLO0lBRWxCO1FBQ0MsT0FBTSxFQUFHLElBQUk7SUFDZDtJQUVBO0lBQ0EsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUMsR0FBSSxPQUFPLFNBQVEsSUFBSyxRQUFRLEVBQUU7UUFDMUQsSUFBTSxFQUFDLEVBQUcsUUFBUSxDQUFDLE1BQU07UUFDekIsSUFBSSxDQUFDLElBQUksRUFBQyxFQUFHLENBQUMsRUFBRSxFQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzNCLElBQUksS0FBSSxFQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEIsR0FBRyxDQUFDLEVBQUMsRUFBRyxFQUFDLEVBQUcsQ0FBQyxFQUFFO2dCQUNkLElBQU0sS0FBSSxFQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixHQUFHLENBQUMsS0FBSSxHQUFJLDRCQUFrQixHQUFJLEtBQUksR0FBSSwyQkFBa0IsRUFBRTtvQkFDN0QsS0FBSSxHQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEI7WUFDRDtZQUNBLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDO1lBQy9DLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ1gsTUFBTTtZQUNQO1FBQ0Q7SUFDRDtJQUFFLEtBQUs7UUFDTixJQUFNLFNBQVEsRUFBRyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxRQUFRLEVBQUU7WUFDYixJQUFJLE9BQU0sRUFBRyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBRTVCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO2dCQUNwQixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7Z0JBQ3ZELEdBQUcsQ0FBQyxNQUFNLEVBQUU7b0JBQ1gsTUFBTTtnQkFDUDtnQkFDQSxPQUFNLEVBQUcsUUFBUSxDQUFDLElBQUksRUFBRTtZQUN6QjtRQUNEO0lBQ0Q7QUFDRDtBQXpDQTs7Ozs7Ozs7Ozs7QUNuSEE7QUFFQTs7O0FBR2EsZ0JBQU8sRUFBRyxDQUFDO0FBRXhCOzs7QUFHYSx5QkFBZ0IsRUFBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsRUFBRyxDQUFDO0FBRW5EOzs7QUFHYSx5QkFBZ0IsRUFBRyxDQUFDLHdCQUFnQjtBQUVqRDs7Ozs7O0FBTUEsZUFBc0IsS0FBVTtJQUMvQixPQUFPLE9BQU8sTUFBSyxJQUFLLFNBQVEsR0FBSSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDeEQ7QUFGQTtBQUlBOzs7Ozs7QUFNQSxrQkFBeUIsS0FBVTtJQUNsQyxPQUFPLE9BQU8sTUFBSyxJQUFLLFNBQVEsR0FBSSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDM0Q7QUFGQTtBQUlBOzs7Ozs7QUFNQSxtQkFBMEIsS0FBVTtJQUNuQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUMsR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBQyxJQUFLLEtBQUs7QUFDdEQ7QUFGQTtBQUlBOzs7Ozs7Ozs7O0FBVUEsdUJBQThCLEtBQVU7SUFDdkMsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFDLEdBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUMsR0FBSSx3QkFBZ0I7QUFDL0Q7QUFGQTs7Ozs7Ozs7Ozs7QUN6REE7QUFDQTtBQUNBO0FBcUhBLEdBQUcsQ0FBQyxhQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7SUFDdEIsSUFBTSxhQUFZLEVBQUcsZ0JBQU0sQ0FBQyxNQUFNO0lBQ2xDLGVBQU0sRUFBRyxZQUFZLENBQUMsTUFBTTtJQUM1QixpQ0FBd0IsRUFBRyxZQUFZLENBQUMsd0JBQXdCO0lBQ2hFLDRCQUFtQixFQUFHLFlBQVksQ0FBQyxtQkFBbUI7SUFDdEQsOEJBQXFCLEVBQUcsWUFBWSxDQUFDLHFCQUFxQjtJQUMxRCxXQUFFLEVBQUcsWUFBWSxDQUFDLEVBQUU7SUFDcEIsYUFBSSxFQUFHLFlBQVksQ0FBQyxJQUFJO0FBQ3pCO0FBQUUsS0FBSztJQUNOLGFBQUksRUFBRyx5QkFBeUIsQ0FBUztRQUN4QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQUMsR0FBRyxJQUFLLFFBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBNUIsQ0FBNEIsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZUFBTSxFQUFHLGdCQUFnQixNQUFXO1FBQUU7YUFBQSxVQUFpQixFQUFqQixxQkFBaUIsRUFBakIsSUFBaUI7WUFBakI7O1FBQ3JDLEdBQUcsQ0FBQyxPQUFNLEdBQUksSUFBSSxFQUFFO1lBQ25CO1lBQ0EsTUFBTSxJQUFJLFNBQVMsQ0FBQyw0Q0FBNEMsQ0FBQztRQUNsRTtRQUVBLElBQU0sR0FBRSxFQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDekIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFDLFVBQVU7WUFDMUIsR0FBRyxDQUFDLFVBQVUsRUFBRTtnQkFDZjtnQkFDQSxZQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsT0FBTztvQkFDaEMsRUFBRSxDQUFDLE9BQU8sRUFBQyxFQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQztZQUNIO1FBQ0QsQ0FBQyxDQUFDO1FBRUYsT0FBTyxFQUFFO0lBQ1YsQ0FBQztJQUVELGlDQUF3QixFQUFHLGtDQUMxQixDQUFNLEVBQ04sSUFBcUI7UUFFckIsR0FBRyxDQUFDLGlCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkIsT0FBYSxNQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztRQUN2RDtRQUFFLEtBQUs7WUFDTixPQUFPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ2hEO0lBQ0QsQ0FBQztJQUVELDRCQUFtQixFQUFHLDZCQUE2QixDQUFNO1FBQ3hELE9BQU8sTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFDLEdBQUcsSUFBSyxRQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQTVCLENBQTRCLENBQUM7SUFDbkYsQ0FBQztJQUVELDhCQUFxQixFQUFHLCtCQUErQixDQUFNO1FBQzVELE9BQU8sTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDakMsTUFBTSxDQUFDLFVBQUMsR0FBRyxJQUFLLGNBQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQTNCLENBQTJCO2FBQzNDLEdBQUcsQ0FBQyxVQUFDLEdBQUcsSUFBSyxhQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBNUIsQ0FBNEIsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBRSxFQUFHLFlBQVksTUFBVyxFQUFFLE1BQVc7UUFDeEMsR0FBRyxDQUFDLE9BQU0sSUFBSyxNQUFNLEVBQUU7WUFDdEIsT0FBTyxPQUFNLElBQUssRUFBQyxHQUFJLEVBQUMsRUFBRyxPQUFNLElBQUssRUFBQyxFQUFHLE1BQU0sRUFBRTtRQUNuRDtRQUNBLE9BQU8sT0FBTSxJQUFLLE9BQU0sR0FBSSxPQUFNLElBQUssTUFBTSxFQUFFO0lBQ2hELENBQUM7QUFDRjtBQUVBLEdBQUcsQ0FBQyxhQUFHLENBQUMsZUFBZSxDQUFDLEVBQUU7SUFDekIsSUFBTSxhQUFZLEVBQUcsZ0JBQU0sQ0FBQyxNQUFNO0lBQ2xDLGtDQUF5QixFQUFHLFlBQVksQ0FBQyx5QkFBeUI7SUFDbEUsZ0JBQU8sRUFBRyxZQUFZLENBQUMsT0FBTztJQUM5QixlQUFNLEVBQUcsWUFBWSxDQUFDLE1BQU07QUFDN0I7QUFBRSxLQUFLO0lBQ04sa0NBQXlCLEVBQUcsbUNBQW1DLENBQU07UUFDcEUsT0FBTywyQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ25DLFVBQUMsUUFBUSxFQUFFLEdBQUc7WUFDYixRQUFRLENBQUMsR0FBRyxFQUFDLEVBQUcsZ0NBQXdCLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBRTtZQUNqRCxPQUFPLFFBQVE7UUFDaEIsQ0FBQyxFQUNELEVBQTJDLENBQzNDO0lBQ0YsQ0FBQztJQUVELGdCQUFPLEVBQUcsaUJBQWlCLENBQU07UUFDaEMsT0FBTyxZQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUMsR0FBRyxJQUFLLFFBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBa0IsRUFBOUIsQ0FBOEIsQ0FBQztJQUM1RCxDQUFDO0lBRUQsZUFBTSxFQUFHLGdCQUFnQixDQUFNO1FBQzlCLE9BQU8sWUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFDLEdBQUcsSUFBSyxRQUFDLENBQUMsR0FBRyxDQUFDLEVBQU4sQ0FBTSxDQUFDO0lBQ3BDLENBQUM7QUFDRjs7Ozs7Ozs7Ozs7O0FDM01BO0FBQ0E7QUFDQTtBQXNCQTs7O0FBR2EsMkJBQWtCLEVBQUcsTUFBTTtBQUV4Qzs7O0FBR2EsMkJBQWtCLEVBQUcsTUFBTTtBQUV4Qzs7O0FBR2EsMEJBQWlCLEVBQUcsTUFBTTtBQUV2Qzs7O0FBR2EsMEJBQWlCLEVBQUcsTUFBTTtBQXFHdkMsR0FBRyxDQUFDLGFBQUcsQ0FBQyxZQUFZLEVBQUMsR0FBSSxhQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtJQUMvQyxzQkFBYSxFQUFHLGdCQUFNLENBQUMsTUFBTSxDQUFDLGFBQWE7SUFDM0MsWUFBRyxFQUFHLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUc7SUFFdkIsb0JBQVcsRUFBRyxpQkFBVSxDQUFDLGdCQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7SUFDN0QsaUJBQVEsRUFBRyxpQkFBVSxDQUFDLGdCQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDdkQsaUJBQVEsRUFBRyxpQkFBVSxDQUFDLGdCQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDdkQsa0JBQVMsRUFBRyxpQkFBVSxDQUFDLGdCQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7SUFDekQsZUFBTSxFQUFHLGlCQUFVLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUNuRCxtQkFBVSxFQUFHLGlCQUFVLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztBQUM1RDtBQUFFLEtBQUs7SUFDTjs7Ozs7O0lBTUEsSUFBTSx5QkFBc0IsRUFBRyxVQUM5QixJQUFZLEVBQ1osSUFBWSxFQUNaLE1BQWMsRUFDZCxRQUFnQixFQUNoQixLQUFzQjtRQUF0QixxQ0FBc0I7UUFFdEIsR0FBRyxDQUFDLEtBQUksR0FBSSxJQUFJLEVBQUU7WUFDakIsTUFBTSxJQUFJLFNBQVMsQ0FBQyxVQUFTLEVBQUcsS0FBSSxFQUFHLDZDQUE2QyxDQUFDO1FBQ3RGO1FBRUEsSUFBTSxPQUFNLEVBQUcsSUFBSSxDQUFDLE1BQU07UUFDMUIsU0FBUSxFQUFHLFNBQVEsSUFBSyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVE7UUFDbEUsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsc0JBQWEsRUFBRztRQUF1QjthQUFBLFVBQXVCLEVBQXZCLHFCQUF1QixFQUF2QixJQUF1QjtZQUF2Qjs7UUFDdEM7UUFDQSxJQUFNLE9BQU0sRUFBRyxTQUFTLENBQUMsTUFBTTtRQUMvQixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDWixPQUFPLEVBQUU7UUFDVjtRQUVBLElBQU0sYUFBWSxFQUFHLE1BQU0sQ0FBQyxZQUFZO1FBQ3hDLElBQU0sU0FBUSxFQUFHLE1BQU07UUFDdkIsSUFBSSxVQUFTLEVBQWEsRUFBRTtRQUM1QixJQUFJLE1BQUssRUFBRyxDQUFDLENBQUM7UUFDZCxJQUFJLE9BQU0sRUFBRyxFQUFFO1FBRWYsT0FBTyxFQUFFLE1BQUssRUFBRyxNQUFNLEVBQUU7WUFDeEIsSUFBSSxVQUFTLEVBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV4QztZQUNBLElBQUksUUFBTyxFQUNWLFFBQVEsQ0FBQyxTQUFTLEVBQUMsR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBQyxJQUFLLFVBQVMsR0FBSSxVQUFTLEdBQUksRUFBQyxHQUFJLFVBQVMsR0FBSSxRQUFRO1lBQ3RHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQkFDYixNQUFNLFVBQVUsQ0FBQyw0Q0FBMkMsRUFBRyxTQUFTLENBQUM7WUFDMUU7WUFFQSxHQUFHLENBQUMsVUFBUyxHQUFJLE1BQU0sRUFBRTtnQkFDeEI7Z0JBQ0EsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDMUI7WUFBRSxLQUFLO2dCQUNOO2dCQUNBO2dCQUNBLFVBQVMsR0FBSSxPQUFPO2dCQUNwQixJQUFJLGNBQWEsRUFBRyxDQUFDLFVBQVMsR0FBSSxFQUFFLEVBQUMsRUFBRywwQkFBa0I7Z0JBQzFELElBQUksYUFBWSxFQUFHLFVBQVMsRUFBRyxNQUFLLEVBQUcseUJBQWlCO2dCQUN4RCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUM7WUFDNUM7WUFFQSxHQUFHLENBQUMsTUFBSyxFQUFHLEVBQUMsSUFBSyxPQUFNLEdBQUksU0FBUyxDQUFDLE9BQU0sRUFBRyxRQUFRLEVBQUU7Z0JBQ3hELE9BQU0sR0FBSSxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7Z0JBQzdDLFNBQVMsQ0FBQyxPQUFNLEVBQUcsQ0FBQztZQUNyQjtRQUNEO1FBQ0EsT0FBTyxNQUFNO0lBQ2QsQ0FBQztJQUVELFlBQUcsRUFBRyxhQUFhLFFBQThCO1FBQUU7YUFBQSxVQUF1QixFQUF2QixxQkFBdUIsRUFBdkIsSUFBdUI7WUFBdkI7O1FBQ2xELElBQUksV0FBVSxFQUFHLFFBQVEsQ0FBQyxHQUFHO1FBQzdCLElBQUksT0FBTSxFQUFHLEVBQUU7UUFDZixJQUFJLGlCQUFnQixFQUFHLGFBQWEsQ0FBQyxNQUFNO1FBRTNDLEdBQUcsQ0FBQyxTQUFRLEdBQUksS0FBSSxHQUFJLFFBQVEsQ0FBQyxJQUFHLEdBQUksSUFBSSxFQUFFO1lBQzdDLE1BQU0sSUFBSSxTQUFTLENBQUMsOERBQThELENBQUM7UUFDcEY7UUFFQSxJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUcsQ0FBQyxFQUFFLFNBQU0sRUFBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUMsRUFBRyxRQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUQsT0FBTSxHQUFJLFVBQVUsQ0FBQyxDQUFDLEVBQUMsRUFBRyxDQUFDLEVBQUMsRUFBRyxpQkFBZ0IsR0FBSSxFQUFDLEVBQUcsU0FBTSxFQUFHLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQzNGO1FBRUEsT0FBTyxNQUFNO0lBQ2QsQ0FBQztJQUVELG9CQUFXLEVBQUcscUJBQXFCLElBQVksRUFBRSxRQUFvQjtRQUFwQix1Q0FBb0I7UUFDcEU7UUFDQSxHQUFHLENBQUMsS0FBSSxHQUFJLElBQUksRUFBRTtZQUNqQixNQUFNLElBQUksU0FBUyxDQUFDLDZDQUE2QyxDQUFDO1FBQ25FO1FBQ0EsSUFBTSxPQUFNLEVBQUcsSUFBSSxDQUFDLE1BQU07UUFFMUIsR0FBRyxDQUFDLFNBQVEsSUFBSyxRQUFRLEVBQUU7WUFDMUIsU0FBUSxFQUFHLENBQUM7UUFDYjtRQUNBLEdBQUcsQ0FBQyxTQUFRLEVBQUcsRUFBQyxHQUFJLFNBQVEsR0FBSSxNQUFNLEVBQUU7WUFDdkMsT0FBTyxTQUFTO1FBQ2pCO1FBRUE7UUFDQSxJQUFNLE1BQUssRUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUN2QyxHQUFHLENBQUMsTUFBSyxHQUFJLDJCQUFrQixHQUFJLE1BQUssR0FBSSwyQkFBa0IsR0FBSSxPQUFNLEVBQUcsU0FBUSxFQUFHLENBQUMsRUFBRTtZQUN4RjtZQUNBO1lBQ0EsSUFBTSxPQUFNLEVBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFRLEVBQUcsQ0FBQyxDQUFDO1lBQzVDLEdBQUcsQ0FBQyxPQUFNLEdBQUksMEJBQWlCLEdBQUksT0FBTSxHQUFJLHlCQUFpQixFQUFFO2dCQUMvRCxPQUFPLENBQUMsTUFBSyxFQUFHLDBCQUFrQixFQUFDLEVBQUcsTUFBSyxFQUFHLE9BQU0sRUFBRywwQkFBaUIsRUFBRyxPQUFPO1lBQ25GO1FBQ0Q7UUFDQSxPQUFPLEtBQUs7SUFDYixDQUFDO0lBRUQsaUJBQVEsRUFBRyxrQkFBa0IsSUFBWSxFQUFFLE1BQWMsRUFBRSxXQUFvQjtRQUM5RSxHQUFHLENBQUMsWUFBVyxHQUFJLElBQUksRUFBRTtZQUN4QixZQUFXLEVBQUcsSUFBSSxDQUFDLE1BQU07UUFDMUI7UUFFQSw2RkFBaUcsRUFBaEcsWUFBSSxFQUFFLGNBQU0sRUFBRSxtQkFBVztRQUUxQixJQUFNLE1BQUssRUFBRyxZQUFXLEVBQUcsTUFBTSxDQUFDLE1BQU07UUFDekMsR0FBRyxDQUFDLE1BQUssRUFBRyxDQUFDLEVBQUU7WUFDZCxPQUFPLEtBQUs7UUFDYjtRQUVBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFDLElBQUssTUFBTTs7SUFDakQsQ0FBQztJQUVELGlCQUFRLEVBQUcsa0JBQWtCLElBQVksRUFBRSxNQUFjLEVBQUUsUUFBb0I7UUFBcEIsdUNBQW9CO1FBQzlFLG9GQUFxRixFQUFwRixZQUFJLEVBQUUsY0FBTSxFQUFFLGdCQUFRO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFDLElBQUssQ0FBQyxDQUFDOztJQUM3QyxDQUFDO0lBRUQsZUFBTSxFQUFHLGdCQUFnQixJQUFZLEVBQUUsS0FBaUI7UUFBakIsaUNBQWlCO1FBQ3ZEO1FBQ0EsR0FBRyxDQUFDLEtBQUksR0FBSSxJQUFJLEVBQUU7WUFDakIsTUFBTSxJQUFJLFNBQVMsQ0FBQyx3Q0FBd0MsQ0FBQztRQUM5RDtRQUNBLEdBQUcsQ0FBQyxNQUFLLElBQUssS0FBSyxFQUFFO1lBQ3BCLE1BQUssRUFBRyxDQUFDO1FBQ1Y7UUFDQSxHQUFHLENBQUMsTUFBSyxFQUFHLEVBQUMsR0FBSSxNQUFLLElBQUssUUFBUSxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxVQUFVLENBQUMscURBQXFELENBQUM7UUFDNUU7UUFFQSxJQUFJLE9BQU0sRUFBRyxFQUFFO1FBQ2YsT0FBTyxLQUFLLEVBQUU7WUFDYixHQUFHLENBQUMsTUFBSyxFQUFHLENBQUMsRUFBRTtnQkFDZCxPQUFNLEdBQUksSUFBSTtZQUNmO1lBQ0EsR0FBRyxDQUFDLE1BQUssRUFBRyxDQUFDLEVBQUU7Z0JBQ2QsS0FBSSxHQUFJLElBQUk7WUFDYjtZQUNBLE1BQUssSUFBSyxDQUFDO1FBQ1o7UUFDQSxPQUFPLE1BQU07SUFDZCxDQUFDO0lBRUQsbUJBQVUsRUFBRyxvQkFBb0IsSUFBWSxFQUFFLE1BQWMsRUFBRSxRQUFvQjtRQUFwQix1Q0FBb0I7UUFDbEYsT0FBTSxFQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdkIsc0ZBQXVGLEVBQXRGLFlBQUksRUFBRSxjQUFNLEVBQUUsZ0JBQVE7UUFFdkIsSUFBTSxJQUFHLEVBQUcsU0FBUSxFQUFHLE1BQU0sQ0FBQyxNQUFNO1FBQ3BDLEdBQUcsQ0FBQyxJQUFHLEVBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN0QixPQUFPLEtBQUs7UUFDYjtRQUVBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFDLElBQUssTUFBTTs7SUFDNUMsQ0FBQztBQUNGO0FBRUEsR0FBRyxDQUFDLGFBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRTtJQUN6QixlQUFNLEVBQUcsaUJBQVUsQ0FBQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQ25ELGlCQUFRLEVBQUcsaUJBQVUsQ0FBQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0FBQ3hEO0FBQUUsS0FBSztJQUNOLGVBQU0sRUFBRyxnQkFBZ0IsSUFBWSxFQUFFLFNBQWlCLEVBQUUsVUFBd0I7UUFBeEIsNkNBQXdCO1FBQ2pGLEdBQUcsQ0FBQyxLQUFJLElBQUssS0FBSSxHQUFJLEtBQUksSUFBSyxTQUFTLEVBQUU7WUFDeEMsTUFBTSxJQUFJLFNBQVMsQ0FBQyx3Q0FBd0MsQ0FBQztRQUM5RDtRQUVBLEdBQUcsQ0FBQyxVQUFTLElBQUssUUFBUSxFQUFFO1lBQzNCLE1BQU0sSUFBSSxVQUFVLENBQUMscURBQXFELENBQUM7UUFDNUU7UUFFQSxHQUFHLENBQUMsVUFBUyxJQUFLLEtBQUksR0FBSSxVQUFTLElBQUssVUFBUyxHQUFJLFVBQVMsRUFBRyxDQUFDLEVBQUU7WUFDbkUsVUFBUyxFQUFHLENBQUM7UUFDZDtRQUVBLElBQUksUUFBTyxFQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDMUIsSUFBTSxRQUFPLEVBQUcsVUFBUyxFQUFHLE9BQU8sQ0FBQyxNQUFNO1FBRTFDLEdBQUcsQ0FBQyxRQUFPLEVBQUcsQ0FBQyxFQUFFO1lBQ2hCLFFBQU87Z0JBQ04sY0FBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQU8sRUFBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUM7b0JBQzNELFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQU8sRUFBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ2xEO1FBRUEsT0FBTyxPQUFPO0lBQ2YsQ0FBQztJQUVELGlCQUFRLEVBQUcsa0JBQWtCLElBQVksRUFBRSxTQUFpQixFQUFFLFVBQXdCO1FBQXhCLDZDQUF3QjtRQUNyRixHQUFHLENBQUMsS0FBSSxJQUFLLEtBQUksR0FBSSxLQUFJLElBQUssU0FBUyxFQUFFO1lBQ3hDLE1BQU0sSUFBSSxTQUFTLENBQUMsd0NBQXdDLENBQUM7UUFDOUQ7UUFFQSxHQUFHLENBQUMsVUFBUyxJQUFLLFFBQVEsRUFBRTtZQUMzQixNQUFNLElBQUksVUFBVSxDQUFDLHVEQUF1RCxDQUFDO1FBQzlFO1FBRUEsR0FBRyxDQUFDLFVBQVMsSUFBSyxLQUFJLEdBQUksVUFBUyxJQUFLLFVBQVMsR0FBSSxVQUFTLEVBQUcsQ0FBQyxFQUFFO1lBQ25FLFVBQVMsRUFBRyxDQUFDO1FBQ2Q7UUFFQSxJQUFJLFFBQU8sRUFBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzFCLElBQU0sUUFBTyxFQUFHLFVBQVMsRUFBRyxPQUFPLENBQUMsTUFBTTtRQUUxQyxHQUFHLENBQUMsUUFBTyxFQUFHLENBQUMsRUFBRTtZQUNoQixRQUFPO2dCQUNOLGNBQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFPLEVBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFDO29CQUMzRCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFPLEVBQUcsVUFBVSxDQUFDLE1BQU0sRUFBQztvQkFDaEQsT0FBTztRQUNUO1FBRUEsT0FBTyxPQUFPO0lBQ2YsQ0FBQztBQUNGOzs7Ozs7Ozs7Ozs7QVh0WEE7QUFDQTtBQUVBLGtCQUFlLGFBQUc7QUFDbEI7QUFFQTtBQUVBO0FBQ0EsU0FBRyxDQUNGLFdBQVcsRUFDWDtJQUNDLE9BQU8sQ0FDTixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBQyxHQUFHLElBQUssV0FBRyxHQUFJLGdCQUFNLENBQUMsS0FBSyxFQUFuQixDQUFtQixFQUFDO1FBQ2xELENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBQyxHQUFHLElBQUssV0FBRyxHQUFJLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBN0IsQ0FBNkIsQ0FBQyxDQUNqRjtBQUNGLENBQUMsRUFDRCxJQUFJLENBQ0o7QUFFRCxTQUFHLENBQ0YsZ0JBQWdCLEVBQ2hCO0lBQ0MsR0FBRyxDQUFDLE9BQU0sR0FBSSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7UUFDckM7UUFDQSxPQUFhLENBQUMsQ0FBQyxDQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSyxDQUFDO0lBQzdEO0lBQ0EsT0FBTyxLQUFLO0FBQ2IsQ0FBQyxFQUNELElBQUksQ0FDSjtBQUVELFNBQUcsQ0FBQyxXQUFXLEVBQUUsY0FBTSxrQkFBVSxHQUFJLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBcEMsQ0FBb0MsRUFBRSxJQUFJLENBQUM7QUFFbEU7QUFDQSxTQUFHLENBQ0YsU0FBUyxFQUNUO0lBQ0MsR0FBRyxDQUFDLE9BQU8sZ0JBQU0sQ0FBQyxJQUFHLElBQUssVUFBVSxFQUFFO1FBQ3JDOzs7OztRQUtBLElBQUk7WUFDSCxJQUFNLElBQUcsRUFBRyxJQUFJLGdCQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwQyxPQUFPLENBQ04sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Z0JBQ1YsT0FBTyxHQUFHLENBQUMsS0FBSSxJQUFLLFdBQVU7Z0JBQzlCLGFBQUcsQ0FBQyxZQUFZLEVBQUM7Z0JBQ2pCLE9BQU8sR0FBRyxDQUFDLE9BQU0sSUFBSyxXQUFVO2dCQUNoQyxPQUFPLEdBQUcsQ0FBQyxRQUFPLElBQUssVUFBVSxDQUNqQztRQUNGO1FBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtZQUNYO1lBQ0EsT0FBTyxLQUFLO1FBQ2I7SUFDRDtJQUNBLE9BQU8sS0FBSztBQUNiLENBQUMsRUFDRCxJQUFJLENBQ0o7QUFFRDtBQUNBLFNBQUcsQ0FDRixVQUFVLEVBQ1Y7SUFDQyxPQUFPO1FBQ04sT0FBTztRQUNQLE1BQU07UUFDTixPQUFPO1FBQ1AsTUFBTTtRQUNOLE9BQU87UUFDUCxPQUFPO1FBQ1AsTUFBTTtRQUNOLE1BQU07UUFDTixNQUFNO1FBQ04sT0FBTztRQUNQLE9BQU87UUFDUCxPQUFPO1FBQ1AsT0FBTztRQUNQLFFBQVE7UUFDUixNQUFNO1FBQ047S0FDQSxDQUFDLEtBQUssQ0FBQyxVQUFDLElBQUksSUFBSyxjQUFPLGdCQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxJQUFLLFVBQVUsRUFBdkMsQ0FBdUMsQ0FBQztBQUMzRCxDQUFDLEVBQ0QsSUFBSSxDQUNKO0FBRUQsU0FBRyxDQUNGLGVBQWUsRUFDZjtJQUNDLEdBQUcsQ0FBQyxPQUFNLEdBQUksZ0JBQU0sQ0FBQyxJQUFJLEVBQUU7UUFDMUI7UUFDQSxPQUFhLElBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBQyxJQUFLLENBQUMsQ0FBQztJQUM5QztJQUNBLE9BQU8sS0FBSztBQUNiLENBQUMsRUFDRCxJQUFJLENBQ0o7QUFFRDtBQUNBLFNBQUcsQ0FDRixZQUFZLEVBQ1o7SUFDQyxPQUFPLENBQ04sYUFBRyxDQUFDLFlBQVksRUFBQztRQUNqQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQ2hFLFVBQUMsSUFBSSxJQUFLLGNBQU8sZ0JBQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFDLElBQUssVUFBVSxFQUF6QyxDQUF5QyxDQUNuRCxDQUNEO0FBQ0YsQ0FBQyxFQUNELElBQUksQ0FDSjtBQUVELFNBQUcsQ0FDRixlQUFlLEVBQ2Y7SUFDQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLEtBQUssQ0FDOUQsVUFBQyxJQUFJLElBQUssY0FBTyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUMsSUFBSyxVQUFVLEVBQXpDLENBQXlDLENBQ25EO0FBQ0YsQ0FBQyxFQUNELElBQUksQ0FDSjtBQUVEO0FBQ0EsU0FBRyxDQUFDLGVBQWUsRUFBRSxjQUFNLGNBQU8sZ0JBQU0sQ0FBQyxXQUFVLElBQUssV0FBVyxFQUF4QyxDQUF3QyxFQUFFLElBQUksQ0FBQztBQUUxRTtBQUNBLFNBQUcsQ0FBQyxhQUFhLEVBQUUsY0FBTSxjQUFPLGdCQUFNLENBQUMsUUFBTyxJQUFLLFlBQVcsR0FBSSxhQUFHLENBQUMsWUFBWSxDQUFDLEVBQTFELENBQTBELEVBQUUsSUFBSSxDQUFDO0FBRTFGO0FBQ0EsU0FBRyxDQUNGLFNBQVMsRUFDVDtJQUNDLEdBQUcsQ0FBQyxPQUFPLGdCQUFNLENBQUMsSUFBRyxJQUFLLFVBQVUsRUFBRTtRQUNyQztRQUNBLElBQU0sSUFBRyxFQUFHLElBQUksZ0JBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEdBQUksT0FBTSxHQUFJLElBQUcsR0FBSSxPQUFPLEdBQUcsQ0FBQyxLQUFJLElBQUssV0FBVSxHQUFJLGFBQUcsQ0FBQyxZQUFZLENBQUM7SUFDMUY7SUFDQSxPQUFPLEtBQUs7QUFDYixDQUFDLEVBQ0QsSUFBSSxDQUNKO0FBRUQ7QUFDQSxTQUFHLENBQ0YsWUFBWSxFQUNaO0lBQ0MsT0FBTyxDQUNOO1FBQ0M7UUFDQTtLQUNBLENBQUMsS0FBSyxDQUFDLFVBQUMsR0FBRyxJQUFLLGNBQU8sZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLElBQUssVUFBVSxFQUF4QyxDQUF3QyxFQUFDO1FBQzFEO1lBQ0M7WUFDQSxhQUFhO1lBQ2IsV0FBVztZQUNYLFFBQVE7WUFDUixZQUFZO1lBQ1osVUFBVTtZQUNWO1NBQ0EsQ0FBQyxLQUFLLENBQUMsVUFBQyxHQUFHLElBQUssY0FBTyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFDLElBQUssVUFBVSxFQUFsRCxDQUFrRCxDQUFDLENBQ3BFO0FBQ0YsQ0FBQyxFQUNELElBQUksQ0FDSjtBQUVELFNBQUcsQ0FDRixnQkFBZ0IsRUFDaEI7SUFDQyxxQkFBcUIsUUFBOEI7UUFBRTthQUFBLFVBQXVCLEVBQXZCLHFCQUF1QixFQUF2QixJQUF1QjtZQUF2Qjs7UUFDcEQsSUFBTSxPQUFNLG1CQUFPLFFBQVEsQ0FBQztRQUMzQixNQUFjLENBQUMsSUFBRyxFQUFHLFFBQVEsQ0FBQyxHQUFHO1FBQ2xDLE9BQU8sTUFBTTtJQUNkO0lBRUEsR0FBRyxDQUFDLE1BQUssR0FBSSxnQkFBTSxDQUFDLE1BQU0sRUFBRTtRQUMzQixJQUFJLEVBQUMsRUFBRyxDQUFDO1FBQ1QsSUFBSSxTQUFRLEVBQUcsV0FBVywwRkFBTSxFQUFDLEVBQUUsS0FBSCxDQUFDLENBQUU7UUFFbEMsUUFBZ0IsQ0FBQyxJQUFHLEVBQUcsQ0FBQyxNQUFNLENBQUM7UUFDaEMsSUFBTSxjQUFhLEVBQUcsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUMsSUFBSyxPQUFPO1FBRWpFLE9BQU8sYUFBYTtJQUNyQjtJQUVBLE9BQU8sS0FBSztBQUNiLENBQUMsRUFDRCxJQUFJLENBQ0o7QUFFRCxTQUFHLENBQ0YsZUFBZSxFQUNmO0lBQ0MsT0FBTyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBQyxHQUFHLElBQUssY0FBTyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFDLElBQUssVUFBVSxFQUFsRCxDQUFrRCxDQUFDO0FBQ2pHLENBQUMsRUFDRCxJQUFJLENBQ0o7QUFFRDtBQUNBLFNBQUcsQ0FBQyxZQUFZLEVBQUUsY0FBTSxjQUFPLGdCQUFNLENBQUMsT0FBTSxJQUFLLFlBQVcsR0FBSSxPQUFPLE1BQU0sR0FBRSxJQUFLLFFBQVEsRUFBcEUsQ0FBb0UsRUFBRSxJQUFJLENBQUM7QUFFbkc7QUFDQSxTQUFHLENBQ0YsYUFBYSxFQUNiO0lBQ0MsR0FBRyxDQUFDLE9BQU8sZ0JBQU0sQ0FBQyxRQUFPLElBQUssV0FBVyxFQUFFO1FBQzFDO1FBQ0EsSUFBTSxLQUFJLEVBQUcsRUFBRTtRQUNmLElBQU0sS0FBSSxFQUFHLEVBQUU7UUFDZixJQUFNLElBQUcsRUFBRyxJQUFJLGdCQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNuQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFDLElBQUssRUFBQyxHQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBQyxJQUFLLElBQUcsR0FBSSxhQUFHLENBQUMsWUFBWSxDQUFDO0lBQzVFO0lBQ0EsT0FBTyxLQUFLO0FBQ2IsQ0FBQyxFQUNELElBQUksQ0FDSjtBQUVEO0FBQ0EsU0FBRyxDQUFDLFlBQVksRUFBRSxjQUFNLG9CQUFHLENBQUMsYUFBYSxFQUFDLEdBQUksYUFBRyxDQUFDLFdBQVcsRUFBQyxHQUFJLGFBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFyRSxDQUFxRSxFQUFFLElBQUksQ0FBQztBQUNwRyxTQUFHLENBQ0YsYUFBYSxFQUNiO0lBQ0M7SUFDQTtJQUNBLE9BQU8sT0FBTyxnQkFBTSxDQUFDLE9BQU0sSUFBSyxZQUFXLEdBQUksT0FBTyxnQkFBTSxDQUFDLFlBQVcsSUFBSyxVQUFVO0FBQ3hGLENBQUMsRUFDRCxJQUFJLENBQ0o7QUFDRCxTQUFHLENBQUMsS0FBSyxFQUFFLGNBQU0sY0FBTyxnQkFBTSxDQUFDLHNCQUFxQixJQUFLLFVBQVUsRUFBbEQsQ0FBa0QsRUFBRSxJQUFJLENBQUM7QUFDMUUsU0FBRyxDQUFDLGNBQWMsRUFBRSxjQUFNLGNBQU8sZ0JBQU0sQ0FBQyxhQUFZLElBQUssV0FBVyxFQUExQyxDQUEwQyxFQUFFLElBQUksQ0FBQztBQUUzRTtBQUVBLFNBQUcsQ0FDRixzQkFBc0IsRUFDdEI7SUFDQyxHQUFHLENBQUMsYUFBRyxDQUFDLGNBQWMsRUFBQyxHQUFJLE9BQU8sQ0FBQyxnQkFBTSxDQUFDLGlCQUFnQixHQUFJLGdCQUFNLENBQUMsc0JBQXNCLENBQUMsRUFBRTtRQUM3RjtRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQU0sUUFBTyxFQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQzdDO1FBQ0EsSUFBTSxxQkFBb0IsRUFBRyxnQkFBTSxDQUFDLGlCQUFnQixHQUFJLGdCQUFNLENBQUMsc0JBQXNCO1FBQ3JGLElBQU0sU0FBUSxFQUFHLElBQUksb0JBQW9CLENBQUMsY0FBWSxDQUFDLENBQUM7UUFDeEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSSxDQUFFLENBQUM7UUFFL0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQztRQUU3QyxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQzlDO0lBQ0EsT0FBTyxLQUFLO0FBQ2IsQ0FBQyxFQUNELElBQUksQ0FDSjtBQUVELFNBQUcsQ0FDRixrQkFBa0IsRUFDbEIsY0FBTSxvQkFBRyxDQUFDLGNBQWMsRUFBQyxHQUFJLGdCQUFNLENBQUMsVUFBUyxJQUFLLFVBQVMsR0FBSSxnQkFBTSxDQUFDLGVBQWMsSUFBSyxTQUFTLEVBQTVGLENBQTRGLEVBQ2xHLElBQUksQ0FDSjs7Ozs7Ozs7Ozs7O0FZeFFEO0FBQ0E7QUFHQSxxQkFBcUIsSUFBMkI7SUFDL0MsR0FBRyxDQUFDLEtBQUksR0FBSSxJQUFJLENBQUMsU0FBUSxHQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDM0MsSUFBSSxDQUFDLFFBQVEsRUFBRTtJQUNoQjtBQUNEO0FBRUEsd0JBQXdCLElBQWUsRUFBRSxVQUFvQztJQUM1RSxPQUFPO1FBQ04sT0FBTyxFQUFFO1lBQ1IsSUFBSSxDQUFDLFFBQU8sRUFBRyxjQUFZLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVEsRUFBRyxLQUFLO1lBQ3JCLElBQUksQ0FBQyxTQUFRLEVBQUcsSUFBSTtZQUVwQixHQUFHLENBQUMsVUFBVSxFQUFFO2dCQUNmLFVBQVUsRUFBRTtZQUNiO1FBQ0Q7S0FDQTtBQUNGO0FBWUEsSUFBSSxtQkFBK0I7QUFDbkMsSUFBSSxVQUF1QjtBQUUzQjs7Ozs7O0FBTWEsa0JBQVMsRUFBRyxDQUFDO0lBQ3pCLElBQUksVUFBbUM7SUFDdkMsSUFBSSxPQUFrQztJQUV0QztJQUNBLEdBQUcsQ0FBQyxhQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDdkIsSUFBTSxRQUFLLEVBQWdCLEVBQUU7UUFFN0IsZ0JBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBUyxLQUF1QjtZQUNsRTtZQUNBLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTSxJQUFLLGlCQUFNLEdBQUksS0FBSyxDQUFDLEtBQUksSUFBSyxvQkFBb0IsRUFBRTtnQkFDbkUsS0FBSyxDQUFDLGVBQWUsRUFBRTtnQkFFdkIsR0FBRyxDQUFDLE9BQUssQ0FBQyxNQUFNLEVBQUU7b0JBQ2pCLFdBQVcsQ0FBQyxPQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCO1lBQ0Q7UUFDRCxDQUFDLENBQUM7UUFFRixRQUFPLEVBQUcsVUFBUyxJQUFlO1lBQ2pDLE9BQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2hCLGdCQUFNLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQztRQUM5QyxDQUFDO0lBQ0Y7SUFBRSxLQUFLLEdBQUcsQ0FBQyxhQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDL0IsV0FBVSxFQUFHLGdCQUFNLENBQUMsY0FBYztRQUNsQyxRQUFPLEVBQUcsVUFBUyxJQUFlO1lBQ2pDLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDRjtJQUFFLEtBQUs7UUFDTixXQUFVLEVBQUcsZ0JBQU0sQ0FBQyxZQUFZO1FBQ2hDLFFBQU8sRUFBRyxVQUFTLElBQWU7WUFDakMsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDRjtJQUVBLG1CQUFtQixRQUFpQztRQUNuRCxJQUFNLEtBQUksRUFBYztZQUN2QixRQUFRLEVBQUUsSUFBSTtZQUNkLFFBQVEsRUFBRTtTQUNWO1FBQ0QsSUFBTSxHQUFFLEVBQVEsT0FBTyxDQUFDLElBQUksQ0FBQztRQUU3QixPQUFPLGNBQWMsQ0FDcEIsSUFBSSxFQUNKLFdBQVU7WUFDVDtnQkFDQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUNGO0lBQ0Y7SUFFQTtJQUNBLE9BQU8sYUFBRyxDQUFDLFlBQVk7UUFDdEIsRUFBRTtRQUNGLEVBQUUsVUFBUyxRQUFpQztZQUMxQyxtQkFBbUIsRUFBRTtZQUNyQixPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDM0IsQ0FBQztBQUNKLENBQUMsQ0FBQyxFQUFFO0FBRUo7QUFDQTtBQUNBLEdBQUcsQ0FBQyxDQUFDLGFBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtJQUN2QixJQUFJLG9CQUFpQixFQUFHLEtBQUs7SUFFN0IsV0FBVSxFQUFHLEVBQUU7SUFDZixvQkFBbUIsRUFBRztRQUNyQixHQUFHLENBQUMsQ0FBQyxtQkFBaUIsRUFBRTtZQUN2QixvQkFBaUIsRUFBRyxJQUFJO1lBQ3hCLGlCQUFTLENBQUM7Z0JBQ1Qsb0JBQWlCLEVBQUcsS0FBSztnQkFFekIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7b0JBQ3RCLElBQUksS0FBSSxRQUF1QjtvQkFDL0IsT0FBTyxDQUFDLEtBQUksRUFBRyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTt3QkFDbkMsV0FBVyxDQUFDLElBQUksQ0FBQztvQkFDbEI7Z0JBQ0Q7WUFDRCxDQUFDLENBQUM7UUFDSDtJQUNELENBQUM7QUFDRjtBQUVBOzs7Ozs7Ozs7QUFTYSwyQkFBa0IsRUFBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLGFBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNoQixPQUFPLGlCQUFTO0lBQ2pCO0lBRUEsNEJBQTRCLFFBQWlDO1FBQzVELElBQU0sS0FBSSxFQUFjO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFO1NBQ1Y7UUFDRCxJQUFNLE1BQUssRUFBVyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV6RSxPQUFPLGNBQWMsQ0FBQyxJQUFJLEVBQUU7WUFDM0Isb0JBQW9CLENBQUMsS0FBSyxDQUFDO1FBQzVCLENBQUMsQ0FBQztJQUNIO0lBRUE7SUFDQSxPQUFPLGFBQUcsQ0FBQyxZQUFZO1FBQ3RCLEVBQUU7UUFDRixFQUFFLFVBQVMsUUFBaUM7WUFDMUMsbUJBQW1CLEVBQUU7WUFDckIsT0FBTyxrQkFBa0IsQ0FBQyxRQUFRLENBQUM7UUFDcEMsQ0FBQztBQUNKLENBQUMsQ0FBQyxFQUFFO0FBRUo7Ozs7Ozs7Ozs7QUFVVyx1QkFBYyxFQUFHLENBQUM7SUFDNUIsSUFBSSxPQUFrQztJQUV0QyxHQUFHLENBQUMsYUFBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQ3JCLFFBQU8sRUFBRyxVQUFTLElBQWU7WUFDakMsZ0JBQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDRjtJQUFFLEtBQUssR0FBRyxDQUFDLGFBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUM5QixRQUFPLEVBQUcsVUFBUyxJQUFlO1lBQ2pDLGdCQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQy9DLENBQUM7SUFDRjtJQUFFLEtBQUssR0FBRyxDQUFDLGFBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1FBQ3ZDO1FBQ0EsSUFBTSxxQkFBb0IsRUFBRyxnQkFBTSxDQUFDLGlCQUFnQixHQUFJLGdCQUFNLENBQUMsc0JBQXNCO1FBQ3JGLElBQU0sT0FBSSxFQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQzFDLElBQU0sUUFBSyxFQUFnQixFQUFFO1FBQzdCLElBQU0sU0FBUSxFQUFHLElBQUksb0JBQW9CLENBQUM7WUFDekMsT0FBTyxPQUFLLENBQUMsT0FBTSxFQUFHLENBQUMsRUFBRTtnQkFDeEIsSUFBTSxLQUFJLEVBQUcsT0FBSyxDQUFDLEtBQUssRUFBRTtnQkFDMUIsR0FBRyxDQUFDLEtBQUksR0FBSSxJQUFJLENBQUMsU0FBUSxHQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hCO1lBQ0Q7UUFDRCxDQUFDLENBQUM7UUFFRixRQUFRLENBQUMsT0FBTyxDQUFDLE1BQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFJLENBQUUsQ0FBQztRQUU1QyxRQUFPLEVBQUcsVUFBUyxJQUFlO1lBQ2pDLE9BQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2hCLE1BQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQztRQUN0QyxDQUFDO0lBQ0Y7SUFBRSxLQUFLO1FBQ04sUUFBTyxFQUFHLFVBQVMsSUFBZTtZQUNqQyxtQkFBbUIsRUFBRTtZQUNyQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixDQUFDO0lBQ0Y7SUFFQSxPQUFPLFVBQVMsUUFBaUM7UUFDaEQsSUFBTSxLQUFJLEVBQWM7WUFDdkIsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUU7U0FDVjtRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFYixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUM7SUFDNUIsQ0FBQztBQUNGLENBQUMsQ0FBQyxFQUFFOzs7Ozs7Ozs7Ozs7QUMzTko7Ozs7Ozs7OztBQVNBLDRCQUNDLEtBQVEsRUFDUixVQUEyQixFQUMzQixRQUF3QixFQUN4QixZQUE0QjtJQUY1QiwrQ0FBMkI7SUFDM0IsMENBQXdCO0lBQ3hCLGtEQUE0QjtJQUU1QixPQUFPO1FBQ04sS0FBSyxFQUFFLEtBQUs7UUFDWixVQUFVLEVBQUUsVUFBVTtRQUN0QixRQUFRLEVBQUUsUUFBUTtRQUNsQixZQUFZLEVBQUU7S0FDZDtBQUNGO0FBWkE7QUErQkEsb0JBQTJCLGNBQXVDO0lBQ2pFLE9BQU8sVUFBUyxNQUFXO1FBQUU7YUFBQSxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQ7O1FBQzVCLE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBQzFDLENBQUM7QUFDRjtBQUpBOzs7Ozs7Ozs7Ozs7QUN4Q0E7QUFDQTtBQUdBO0FBa0RBLHVCQUF1QixLQUFVO0lBQ2hDLElBQUksc0JBQXFCLEVBQUcsS0FBSztJQUNqQyxtQkFBbUIsTUFBcUI7UUFDdkMsQ0FBQyxNQUFNLENBQUMsU0FBUSxHQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEtBQUs7WUFDckMsR0FBRyxDQUFDLFdBQU8sQ0FBQyxLQUFLLEVBQUMsR0FBSSxXQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BDLEtBQWEsQ0FBQyxPQUFNLEVBQUcsTUFBTTtZQUMvQjtRQUNELENBQUMsQ0FBQztRQUNGLEdBQUcsQ0FBQyxXQUFPLENBQUMsTUFBTSxFQUFDLEdBQUksT0FBTyxNQUFNLENBQUMsMkJBQTBCLElBQUssVUFBVSxFQUFFO1lBQy9FLHNCQUFxQixFQUFHLElBQUk7WUFDNUIsTUFBTSxDQUFDLFdBQVUsdUJBQVEsTUFBTSxDQUFDLFVBQVUsRUFBSyxNQUFNLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUU7UUFDMUY7SUFDRDtJQUNBLElBQU0sTUFBSyxFQUFHLFlBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQUMsSUFBVyxJQUE0QixrQkFBTyxDQUFDLElBQUksRUFBQyxHQUFJLFdBQU8sQ0FBQyxJQUFJLENBQUMsRUFBOUIsQ0FBOEIsQ0FBQztJQUNoSCxPQUFPLEVBQUUscUJBQXFCLHlCQUFFLEtBQUssU0FBRTtBQUN4QztBQUVBLGlCQUNDLFVBQTRDLEVBQzVDLGdCQUF5QztJQUF6Qyx3REFBeUM7SUFFekMsSUFBSSxZQUFXLEVBQUcsSUFBSTtJQUN0QixJQUFJLE1BQUssRUFBRyxVQUFVLEVBQUU7SUFDeEIsSUFBSSxNQUFrQjtJQUN0QixJQUFNLFlBQVcsRUFBd0IsRUFBRTtJQUNuQyxpQ0FBVSxFQUFFLHlCQUFRO0lBQzVCLElBQU0sa0JBQWlCLEVBQUcsS0FBSyxDQUFDLGlCQUE0QztJQUM1RSxHQUFHLENBQUMsT0FBTyxrQkFBaUIsSUFBSyxVQUFVLEVBQUU7UUFDNUMsT0FBTSxFQUFHO1lBQWtCO1lBQWQ7O1lBS2I7WUFKQyw2QkFBVSxFQUFWO2dCQUNDLFlBQVcsRUFBRyxJQUFJO2dCQUNsQixpQkFBTSxVQUFVLFdBQUU7WUFDbkIsQ0FBQztZQUNGLGNBQUM7UUFBRCxDQUxhLENBQWMsaUJBQWlCLElBS3pDO1FBQ0gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztRQUNwQyxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxVQUFVLEVBQUU7SUFDYjtJQUFFLEtBQUs7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDO0lBQzNEO0lBRUEsb0JBQW9CLEtBQWM7UUFDakMsT0FBTyxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTSxFQUFHLENBQUMsQ0FBQztJQUN4RTtJQUVBLHNCQUFzQixLQUFzQixFQUFFLFVBQTJCO1FBQTNCLCtDQUEyQjtRQUN4RSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsVUFBQyxFQUFrQztnQkFBaEMsc0JBQVEsRUFBRSxzQkFBUSxFQUFFLDBCQUFVO1lBQ3pELElBQU0sTUFBSyxFQUFHLGlCQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztZQUNyQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUMsSUFBUyxFQUFFLEtBQWE7Z0JBQ3RDLElBQU0sZUFBYyxFQUFHLHlCQUF1QixTQUFRLFNBQUssU0FBUSxLQUFHO2dCQUN0RSxHQUFHLENBQUMsS0FBSSxHQUFJLElBQUksQ0FBQyxXQUFVLEdBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUMsSUFBSyxTQUFTLEVBQUU7b0JBQ3ZFLElBQU0saUJBQWdCLEVBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO3dCQUM1RCxFQUFFO3dCQUNGLEVBQUssZUFBYyxXQUFTO29CQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBQyxFQUFHLFdBQVcsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCO2dCQUMzRTtZQUNELENBQUMsQ0FBQztRQUNILENBQUMsQ0FBQztJQUNIO0lBRUE7UUFDTyxxQkFBdUMsRUFBckMsMEJBQVUsRUFBRSxzQkFBUTtRQUM1QixNQUFNLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxXQUFXLEVBQUU7WUFDaEIsSUFBTSxPQUFNLEVBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUM1Qiw4QkFBd0QsRUFBdEQsZ0RBQXFCLEVBQUUsZ0JBQUs7WUFDcEMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNuQixXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN2QixHQUFHLENBQUMscUJBQXFCLEVBQUU7Z0JBQ2xCLDhEQUFtQztnQkFDM0MsWUFBWSxDQUFDLDRCQUE0QixDQUFDO2dCQUMxQyxXQUFXLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDO1lBQy9DO1lBQ0EsWUFBVyxFQUFHLEtBQUs7UUFDcEI7SUFDRDtJQUVBLGlCQUFpQixrQkFBa0MsRUFBRSxnQkFBaUMsRUFBRSxRQUFpQjtRQUN4RyxJQUFJLFlBQTZCO1FBQ2pDLEdBQUcsQ0FBQyxpQkFBZ0IsSUFBSyxTQUFTLEVBQUU7WUFDbkMsVUFBVSxFQUFFO1lBQ1osYUFBWSxFQUFHLFVBQVUsRUFBRTtRQUM1QjtRQUFFLEtBQUs7WUFDTixhQUFZLEVBQUcsZ0JBQWdCLEVBQUU7UUFDbEM7UUFFUSxvRUFBMkI7UUFDbkMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQztRQUN4QyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ1AscUVBQTRDLEVBQTNDLGlCQUFTO1lBQ2hCLHNCQUFZLENBQUMsU0FBUyxFQUFFLG9CQUFvQixDQUFDO1FBQzlDO1FBQUUsS0FBSztZQUNOLHNCQUFZLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDO1FBQ2pEO0lBQ0Q7SUFFQSxPQUFPO1FBQ04sTUFBTSxZQUFDLGtCQUFrQyxFQUFFLGdCQUFpQztZQUMzRSxPQUFPLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsYUFBYSxZQUFDLFFBQWdCLEVBQUUsa0JBQWtDLEVBQUUsZ0JBQWlDO1lBQ3BHLE9BQU8sT0FBTyxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxFQUFQLFVBQVEsUUFBZ0IsRUFBRSxnQkFBNkM7WUFBRTtpQkFBQSxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO2dCQUFkOztZQUN4RSxVQUFVLEVBQUU7WUFDTixxRUFBNEMsRUFBM0MsaUJBQVM7WUFDaEIsR0FBRyxDQUFDLFNBQVMsRUFBRTtnQkFDZCxJQUFJLGdCQUFlLFFBQXNCO2dCQUN6QyxHQUFHLENBQUMsT0FBTyxpQkFBZ0IsSUFBSyxRQUFRLEVBQUU7b0JBQ3pDLGdCQUFlLEVBQUksU0FBUyxDQUFDLFVBQWtCLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2xFO2dCQUFFLEtBQUs7b0JBQ04sZ0JBQWUsRUFBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7Z0JBQzlDO2dCQUNBLEdBQUcsQ0FBQyxlQUFlLEVBQUU7b0JBQ3BCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO2dCQUMzQztZQUNEO1FBQ0QsQ0FBQztRQUNELFNBQVMsRUFBVCxVQUFVLEtBQWM7WUFDdkIsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3pCO0tBQ0E7QUFDRjtBQTFHQTtBQTRHQSxrQkFBZSxPQUFPOzs7Ozs7Ozs7OztBQ2xMdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSSxtQkFBa0IsRUFBRyxDQUFDO0FBQzFCLElBQU0sVUFBUyxFQUFHLElBQUksaUJBQU8sRUFBbUQ7QUFFaEYsa0JBQWtCLEdBQVcsRUFBRSxLQUFVO0lBQ3hDLEdBQUcsQ0FBQyxPQUFPLE1BQUssSUFBSyxVQUFVLEVBQUU7UUFDaEMsT0FBTyxVQUFVO0lBQ2xCO0lBQUUsS0FBSyxHQUFHLENBQUMsT0FBTyxNQUFLLElBQUssV0FBVyxFQUFFO1FBQ3hDLE9BQU8sV0FBVztJQUNuQjtJQUFFLEtBQUssR0FBRyxDQUFDLE1BQUssV0FBWSxjQUFHLEdBQUksTUFBSyxXQUFZLGFBQUcsRUFBRTtRQUN4RCxPQUFPLFlBQVMsQ0FBQyxLQUFLLENBQUM7SUFDeEI7SUFDQSxPQUFPLEtBQUs7QUFDYjtBQUVBLHNCQUE2QixLQUFzQixFQUFFLEtBQWlCO0lBQWpCLGlDQUFpQjtJQUNyRSxJQUFNLGdCQUFlLEVBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsR0FBSSxNQUFLLElBQUssQ0FBQztJQUMzRCxJQUFJLFFBQU8sRUFBRyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsRUFBRTtJQUMxQyxJQUFJLEtBQUksRUFBRyxFQUFFO0lBQ2IsTUFBSyxFQUFHLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxLQUFLO0lBQ25DLE1BQUssRUFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztJQUU5QyxJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUMsRUFBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDL0IsS0FBSSxFQUFNLEtBQUksTUFBSTtJQUNuQjtJQUNBLElBQUksY0FBYSxFQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBQyxNQUFjLEVBQUUsSUFBSSxFQUFFLEtBQUs7UUFDNUQsR0FBRyxDQUFDLEtBQUksSUFBSyxLQUFJLEdBQUksS0FBSSxJQUFLLFNBQVMsRUFBRTtZQUN4QyxPQUFPLE1BQU07UUFDZDtRQUNBLEdBQUcsQ0FBQyxNQUFLLEVBQUcsQ0FBQyxFQUFFO1lBQ2QsT0FBTSxFQUFNLE9BQU0sTUFBSTtRQUN2QjtRQUNBLE9BQU0sRUFBRyxLQUFHLE9BQU0sRUFBRyxJQUFNO1FBRTNCLEdBQUcsQ0FBQyxPQUFPLEtBQUksSUFBSyxRQUFRLEVBQUU7WUFDN0IsT0FBVSxPQUFNLFNBQUksS0FBSSxNQUFHO1FBQzVCO1FBRUEsT0FBTSxFQUFHLEtBQUcsT0FBTSxFQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFHO1FBQzdDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUSxHQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTSxFQUFHLENBQUMsRUFBRTtZQUM5QyxPQUFNLEVBQU0sT0FBTSxZQUFRLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQUssRUFBRyxDQUFDLEVBQUMsU0FBSyxLQUFJLEtBQUc7UUFDN0U7UUFDQSxPQUFVLE9BQU0sS0FBRztJQUNwQixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBRVgsT0FBTyxnQkFBZ0IsRUFBRSxDQUFDLGNBQWEsRUFBTSxjQUFhLE9BQUssRUFBRSxFQUFFLGFBQWE7QUFDakY7QUEvQkE7QUFpQ0EsMEJBQTBCLFVBQWUsRUFBRSxJQUFZO0lBQ3RELFdBQVUsRUFBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVU7U0FDakMsSUFBSTtTQUNKLE1BQU0sQ0FBQyxVQUFDLEtBQVUsRUFBRSxHQUFHO1FBQ3ZCLEtBQUssQ0FBQyxHQUFHLEVBQUMsRUFBRyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQzVCLE9BQU8sS0FBSztJQUNiLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDUCxXQUFVLEVBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFLLEtBQUksTUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRSxPQUFPLEtBQUcsV0FBVSxFQUFHLEtBQUksS0FBRztBQUMvQjtBQUVBLHVCQUF1QixpQkFBc0I7SUFDNUMsSUFBSSxJQUFZO0lBQ2hCLEdBQUcsQ0FBQyxPQUFPLGtCQUFpQixJQUFLLFNBQVEsR0FBSSxPQUFPLGtCQUFpQixJQUFLLFFBQVEsRUFBRTtRQUNuRixLQUFJLEVBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFO0lBQ3BDO0lBQUUsS0FBSztRQUNOLEtBQUksRUFBRyxpQkFBaUIsQ0FBQyxJQUFJO1FBQzdCLEdBQUcsQ0FBQyxLQUFJLElBQUssU0FBUyxFQUFFO1lBQ3ZCLElBQUksR0FBRSxFQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7WUFDekMsR0FBRyxDQUFDLEdBQUUsSUFBSyxTQUFTLEVBQUU7Z0JBQ3JCLEdBQUUsRUFBRyxFQUFFLGtCQUFrQjtnQkFDekIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDckM7WUFDQSxLQUFJLEVBQUcsWUFBVSxFQUFJO1FBQ3RCO0lBQ0Q7SUFDQSxPQUFPLElBQUk7QUFDWjtBQUVBLG9CQUFvQixJQUFtQixFQUFFLElBQVM7SUFDakQsSUFBTSxpQkFBZ0IsRUFBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNO0lBQzVELElBQUksV0FBVSxFQUFHLGlCQUFnQixFQUFHLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUk7SUFDdEYsR0FBRyxDQUFDLFdBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNsQixPQUFPLE9BQUssYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBQyxTQUFLLFVBQVk7SUFDbkU7SUFDQSxPQUFPLFNBQU0sSUFBSSxDQUFDLElBQUcsV0FBTSxVQUFZO0FBQ3hDO0FBRUEsc0JBQTZCLE1BQXVCLEVBQUUsUUFBeUIsRUFBRSxPQUFnQjtJQUNoRyxJQUFNLGFBQVksRUFBRyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ3pDLElBQU0sZUFBYyxFQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDN0MsSUFBTSxXQUFVLEVBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDO0lBQy9ELElBQUksVUFBUyxFQUFHLEtBQUs7SUFDckIsSUFBTSxXQUFVLEVBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFDLE1BQWMsRUFBRSxJQUFJLEVBQUUsS0FBSztRQUNoRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLFVBQVMsRUFBRyxJQUFJO1lBQ2hCLE9BQU0sRUFBTSxPQUFNLFVBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBRztRQUNqRTtRQUFFLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDeEIsVUFBUyxFQUFHLElBQUk7WUFDaEIsT0FBTSxFQUFNLE9BQU0sVUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFHO1FBQ2pFO1FBQUUsS0FBSztZQUNOLE9BQU0sRUFBRyxLQUFHLE9BQU0sRUFBRyxJQUFJLENBQUMsS0FBTztRQUNsQztRQUNBLE9BQU8sTUFBTTtJQUNkLENBQUMsRUFBRSxJQUFJLENBQUM7SUFFUixHQUFHLENBQUMsU0FBUyxFQUFFO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDNUI7QUFDRDtBQXJCQTtBQXVCQSxrQkFBZSxZQUFZOzs7Ozs7Ozs7Ozs7QUNuSDNCO0FBQ0E7QUFJYSxzQkFBYSxFQUFHLFVBQUMsUUFBZ0I7SUFDN0MsSUFBTSxVQUFTLEVBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDckMsT0FBTztTQUNMLEdBQUcsQ0FBQyxVQUFDLFFBQVE7UUFDYixJQUFNLGNBQWEsRUFBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUMzQyxHQUFHLENBQUMsY0FBYSxJQUFLLENBQUMsRUFBRTtZQUN4QixPQUFPLFlBQVMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsT0FBSTtRQUN2QztRQUFFLEtBQUssR0FBRyxDQUFDLGNBQWEsRUFBRyxDQUFDLEVBQUU7WUFDN0IsSUFBTSxJQUFHLEVBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxjQUFhLEVBQUcsQ0FBQyxDQUFDO1lBQ2pELE9BQVUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFDLGNBQVMsSUFBRyxPQUFJO1FBQzNEO1FBQ0EsT0FBTyxRQUFRO0lBQ2hCLENBQUM7U0FDQSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ1osQ0FBQztBQUVZLGdCQUFPLEVBQVE7SUFDM0IsS0FBSyxZQUFDLElBQVc7UUFDaEIsT0FBTyxXQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxPQUFPLFlBQUMsSUFBYTtRQUNwQixPQUFPLEVBQUU7SUFDVixDQUFDO0lBQ0QsYUFBYSxZQUFDLFFBQWlCO1FBQzlCLE9BQU8sUUFBUTtJQUNoQixDQUFDO0lBQ0QsV0FBVyxZQUFDLElBQVc7UUFDdEIsT0FBTyxXQUFPLENBQUMsSUFBSSxFQUFDLEdBQUksV0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtJQUMzRCxDQUFDO0lBQ0QsaUJBQWlCLFlBQUMsSUFBVyxFQUFFLElBQVk7UUFDMUMsR0FBRyxDQUFDLFdBQU8sQ0FBQyxJQUFJLEVBQUMsR0FBSSxXQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkMsR0FBRyxDQUFDLEtBQUksSUFBSyxPQUFPLEVBQUU7Z0JBQ3JCLElBQU0sUUFBTyxFQUFJLElBQUksQ0FBQyxVQUFrQixDQUFDLE9BQU87Z0JBQ2hELEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUMzQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUN6QjtnQkFDQSxPQUFPLE9BQU87WUFDZjtZQUNBLE9BQVEsSUFBSSxDQUFDLFVBQWtCLENBQUMsSUFBSSxDQUFDO1FBQ3RDO0lBQ0QsQ0FBQztJQUNELFNBQVMsWUFBQyxJQUFXLEVBQUUsSUFBWTtRQUNsQyxHQUFHLENBQUMsV0FBTyxDQUFDLElBQUksRUFBQyxHQUFJLFdBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQyxPQUFPLEtBQUksR0FBSSxJQUFJLENBQUMsVUFBVTtRQUMvQjtRQUNBLE9BQU8sS0FBSztJQUNiLENBQUM7SUFDRCxTQUFTLFlBQUMsSUFBa0IsRUFBRSxRQUFpQjtRQUM5QyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFXLElBQUssV0FBSSxDQUFDLElBQUksQ0FBQyxFQUFWLENBQVUsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxZQUFDLElBQVc7UUFDbEIsR0FBRyxDQUFDLFdBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQyxHQUFHO1FBQ2hCO0lBQ0QsQ0FBQztJQUNELFNBQVMsWUFBQyxJQUFXO1FBQ3BCLEdBQUcsQ0FBQyxXQUFPLENBQUMsSUFBSSxFQUFDLEdBQUksV0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25DLE9BQVEsSUFBWSxDQUFDLE1BQU07UUFDNUI7SUFDRCxDQUFDO0lBQ0QsV0FBVyxZQUFDLElBQVc7UUFDdEIsR0FBRyxDQUFDLFdBQU8sQ0FBQyxJQUFJLEVBQUMsR0FBSSxXQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkMsR0FBRyxDQUFFLElBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3pCLE9BQVEsSUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQ3JDO1lBQ0EsT0FBTyxDQUFDLElBQUksQ0FBQztRQUNkO0lBQ0QsQ0FBQztJQUNELE9BQU8sRUFBUCxVQUFRLElBQWtCLEVBQUUsR0FBWTtRQUN2QyxJQUFJLEtBQUksRUFBRyxJQUFJO1FBQ2YsSUFBSSxDQUFDLElBQUksRUFBQyxFQUFHLENBQUMsRUFBRSxFQUFDLEVBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFDLEVBQUcsRUFBQyxHQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BELEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pCLEtBQUksRUFBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2Q7WUFBRSxLQUFLO2dCQUNOLElBQU0sU0FBUSxFQUFHLGVBQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxHQUFHLENBQUMsU0FBUSxHQUFJLFFBQVEsQ0FBQyxPQUFNLEVBQUcsQ0FBQyxFQUFFO29CQUNwQyxLQUFJLEVBQUcsZUFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO2dCQUN2QztZQUNEO1FBQ0Q7UUFDQSxPQUFPLElBQUk7SUFDWixDQUFDO0lBQ0QsT0FBTyxFQUFQLFVBQVEsSUFBa0IsRUFBRSxRQUFpQjtRQUM1QyxJQUFJLE9BQU0sRUFBWSxFQUFFO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsRUFBQyxFQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBQyxFQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoRCxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QjtZQUNBLElBQU0sU0FBUSxFQUFHLGVBQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pELEdBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsT0FBTSxtQkFBTyxNQUFNLEVBQUssZUFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekQ7UUFDRDtRQUNBLE9BQU8sTUFBTTtJQUNkO0NBQ0E7QUFFRCxnQkFBdUIsUUFBZ0IsRUFBRSxLQUFzQjtJQUM5RCxNQUFLLEVBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDOUMsU0FBUSxFQUFHLHFCQUFhLENBQUMsUUFBUSxDQUFDO0lBQ2xDLE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLG1CQUFFLENBQXNCO0FBQ3BFO0FBSkE7QUFNQSxrQkFBZSxNQUFNOzs7Ozs7OztBQzdHckI7QUFDQTs7O0FBR0E7QUFDQSxvQ0FBcUMsaUJBQWlCLDBCQUEwQixHQUFHLGdCQUFnQixnQkFBZ0IsMEJBQTBCLG9CQUFvQix1QkFBdUIseUJBQXlCLHlCQUF5QixrQkFBa0IsaUNBQWlDLGtDQUFrQyxtQ0FBbUMsbUNBQW1DLDZCQUE2Qiw4QkFBOEIsb0NBQW9DLGlCQUFpQixvQkFBb0IsR0FBRyx1QkFBdUIsbUJBQW1CLGtCQUFrQixxQkFBcUIsZ0JBQWdCLHVCQUF1QixnQkFBZ0IsY0FBYyx1REFBdUQsK0NBQStDLHVDQUF1Qyx1RUFBdUUsdUNBQXVDLHVDQUF1QyxHQUFHLHVCQUF1QixxQ0FBcUMscUNBQXFDLEdBQUcsVUFBVSx5SUFBeUksVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxXQUFXLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEseURBQXlELGlCQUFpQiwwQkFBMEIsR0FBRyxXQUFXLGdCQUFnQiwwQkFBMEIsb0JBQW9CLHVCQUF1Qix5QkFBeUIseUJBQXlCLGtCQUFrQixpQ0FBaUMsa0NBQWtDLG1DQUFtQyxtQ0FBbUMsNkJBQTZCLDhCQUE4QixvQ0FBb0MsaUJBQWlCLG9CQUFvQixHQUFHLGtCQUFrQixtQkFBbUIsa0JBQWtCLHFCQUFxQixnQkFBZ0IsdUJBQXVCLGdCQUFnQixjQUFjLHVEQUF1RCwrQ0FBK0MsdUNBQXVDLHVFQUF1RSx1Q0FBdUMsdUNBQXVDLEdBQUcsc0JBQXNCLHFDQUFxQyxxQ0FBcUMsR0FBRyxxQkFBcUI7O0FBRXpyRjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7O0FDWkE7QUFDQTs7O0FBR0E7QUFDQSxxQ0FBc0MsZ0JBQWdCLFdBQVcsaUJBQWlCLGlCQUFpQiw4QkFBOEIsR0FBRyxnQkFBZ0IsaUJBQWlCLG1CQUFtQixHQUFHLFVBQVUsZ0lBQWdJLFVBQVUsVUFBVSxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLG9EQUFvRCxnQkFBZ0IsV0FBVyxpQkFBaUIsaUJBQWlCLDhCQUE4QixHQUFHLG9CQUFvQixpQkFBaUIsbUJBQW1CLEdBQUcscUJBQXFCOztBQUUzbkI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLEU7Ozs7Ozs7Ozs7O0FDWEE7QUFPQTtJQUF1QztJQUl0QyxrQkFBWSxPQUFVO1FBQXRCLFlBQ0Msa0JBQU87UUFDUCxLQUFJLENBQUMsU0FBUSxFQUFHLE9BQU87O0lBQ3hCO0lBRU8sa0NBQWMsRUFBckIsVUFBc0IsV0FBdUI7UUFDNUMsSUFBSSxDQUFDLGFBQVksRUFBRyxXQUFXO0lBQ2hDLENBQUM7SUFFTSx1QkFBRyxFQUFWO1FBQ0MsT0FBTyxJQUFJLENBQUMsUUFBUTtJQUNyQixDQUFDO0lBRU0sdUJBQUcsRUFBVixVQUFXLE9BQVU7UUFDcEIsSUFBSSxDQUFDLFNBQVEsRUFBRyxPQUFPO1FBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEVBQUU7UUFDcEI7SUFDRCxDQUFDO0lBQ0YsZUFBQztBQUFELENBdkJBLENBQXVDLGlCQUFPO0FBQWpDO0FBeUJiLGtCQUFlLFFBQVE7Ozs7Ozs7Ozs7OztBQ2hDdkI7QUFFQTtBQUdBOzs7OztBQUtBLElBQVksYUFHWDtBQUhELFdBQVksYUFBYTtJQUN4Qix3Q0FBdUI7SUFDdkIsa0NBQWlCO0FBQ2xCLENBQUMsRUFIVyxjQUFhLEVBQWIsc0JBQWEsSUFBYixzQkFBYTtBQVV6QjtJQUFpQztJQUFqQztRQUFBO1FBQ1MsZUFBUSxFQUFHLElBQUksYUFBRyxFQUFtQjs7SUEwQjlDO0lBeEJRLDBCQUFHLEVBQVYsVUFBVyxHQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQzlCLENBQUM7SUFFTSwwQkFBRyxFQUFWLFVBQVcsR0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUM5QixDQUFDO0lBRU0sMEJBQUcsRUFBVixVQUFXLE9BQWdCLEVBQUUsR0FBVztRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBRyxDQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLDhCQUFPLEVBQWQ7UUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxPQUFNLENBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU0sbUNBQVksRUFBbkI7UUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxVQUFTLENBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRU0sNEJBQUssRUFBWjtRQUNDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO0lBQ3RCLENBQUM7SUFDRixrQkFBQztBQUFELENBM0JBLENBQWlDLGlCQUFPO0FBQTNCO0FBNkJiLGtCQUFlLFdBQVc7Ozs7Ozs7Ozs7OztBQ2pEMUI7QUFDQTtBQUNBO0FBRUE7QUFvQkE7OztBQUdhLHlCQUFnQixFQUFHLGdCQUFNLENBQUMsYUFBYSxDQUFDO0FBMkRyRDs7Ozs7O0FBTUEsaUNBQXVFLElBQVM7SUFDL0UsT0FBTyxPQUFPLENBQUMsS0FBSSxHQUFJLElBQUksQ0FBQyxNQUFLLElBQUssd0JBQWdCLENBQUM7QUFDeEQ7QUFGQTtBQVNBLDBDQUFvRCxJQUFTO0lBQzVELE9BQU8sT0FBTyxDQUNiLEtBQUk7UUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBQztRQUM5Qix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQ3RDO0FBQ0Y7QUFQQTtBQVNBOzs7QUFHQTtJQUE4QjtJQUE5Qjs7SUFxSEE7SUE3R0M7OztJQUdRLG1DQUFlLEVBQXZCLFVBQXdCLFdBQTBCLEVBQUUsSUFBMEM7UUFDN0YsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNULElBQUksRUFBRSxXQUFXO1lBQ2pCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLElBQUk7U0FDSixDQUFDO0lBQ0gsQ0FBQztJQUVNLDBCQUFNLEVBQWIsVUFBYyxLQUFvQixFQUFFLElBQWtCO1FBQXREO1FBQ0MsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZSxJQUFLLFNBQVMsRUFBRTtZQUN2QyxJQUFJLENBQUMsZ0JBQWUsRUFBRyxJQUFJLGFBQUcsRUFBRTtRQUNqQztRQUVBLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUEyQyxLQUFLLENBQUMsUUFBUSxHQUFFLEtBQUcsQ0FBQztRQUNoRjtRQUVBLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7UUFFckMsR0FBRyxDQUFDLEtBQUksV0FBWSxpQkFBTyxFQUFFO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQ1IsVUFBQyxVQUFVO2dCQUNWLEtBQUksQ0FBQyxlQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO2dCQUM1QyxLQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7Z0JBQ3ZDLE9BQU8sVUFBVTtZQUNsQixDQUFDLEVBQ0QsVUFBQyxLQUFLO2dCQUNMLE1BQU0sS0FBSztZQUNaLENBQUMsQ0FDRDtRQUNGO1FBQUUsS0FBSyxHQUFHLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBQ2xDO0lBQ0QsQ0FBQztJQUVNLGtDQUFjLEVBQXJCLFVBQXNCLEtBQW9CLEVBQUUsZUFBZ0M7UUFDM0UsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBaUIsSUFBSyxTQUFTLEVBQUU7WUFDekMsSUFBSSxDQUFDLGtCQUFpQixFQUFHLElBQUksYUFBRyxFQUFFO1FBQ25DO1FBRUEsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBNkMsS0FBSyxDQUFDLFFBQVEsR0FBRSxLQUFHLENBQUM7UUFDbEY7UUFFQSxJQUFNLFlBQVcsRUFBRyxJQUFJLGlCQUFPLEVBQUU7UUFFakMsSUFBTSxhQUFZLEVBQWlCO1lBQ2xDLFFBQVEsRUFBRSxlQUFlLENBQUMsY0FBTSxrQkFBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFZLENBQUUsQ0FBQyxFQUF4QyxDQUF3QyxDQUFDO1lBQ3pFLFdBQVc7U0FDWDtRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7SUFDMUMsQ0FBQztJQUVNLHVCQUFHLEVBQVYsVUFBZ0UsS0FBb0I7UUFBcEY7UUFDQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWUsR0FBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUMsT0FBTyxJQUFJO1FBQ1o7UUFFQSxJQUFNLEtBQUksRUFBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFFNUMsR0FBRyxDQUFDLHVCQUF1QixDQUFJLElBQUksQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sSUFBSTtRQUNaO1FBRUEsR0FBRyxDQUFDLEtBQUksV0FBWSxpQkFBTyxFQUFFO1lBQzVCLE9BQU8sSUFBSTtRQUNaO1FBRUEsSUFBTSxRQUFPLEVBQW1DLElBQUssRUFBRTtRQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO1FBRXhDLE9BQU8sQ0FBQyxJQUFJLENBQ1gsVUFBQyxVQUFVO1lBQ1YsR0FBRyxDQUFDLGdDQUFnQyxDQUFJLFVBQVUsQ0FBQyxFQUFFO2dCQUNwRCxXQUFVLEVBQUcsVUFBVSxDQUFDLE9BQU87WUFDaEM7WUFFQSxLQUFJLENBQUMsZUFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztZQUM1QyxLQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7WUFDdkMsT0FBTyxVQUFVO1FBQ2xCLENBQUMsRUFDRCxVQUFDLEtBQUs7WUFDTCxNQUFNLEtBQUs7UUFDWixDQUFDLENBQ0Q7UUFFRCxPQUFPLElBQUk7SUFDWixDQUFDO0lBRU0sK0JBQVcsRUFBbEIsVUFBc0IsS0FBb0I7UUFDekMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFpQixHQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4RCxPQUFPLElBQUk7UUFDWjtRQUVBLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUU7SUFDMUMsQ0FBQztJQUVNLHVCQUFHLEVBQVYsVUFBVyxLQUFvQjtRQUM5QixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWUsR0FBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0sK0JBQVcsRUFBbEIsVUFBbUIsS0FBb0I7UUFDdEMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFpQixHQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNGLGVBQUM7QUFBRCxDQXJIQSxDQUE4QixpQkFBTztBQUF4QjtBQXVIYixrQkFBZSxRQUFROzs7Ozs7Ozs7Ozs7QUN4T3ZCO0FBQ0E7QUFHQTtBQU1BO0lBQXFDO0lBTXBDO1FBQUEsWUFDQyxrQkFBTztRQU5BLGdCQUFTLEVBQUcsSUFBSSxtQkFBUSxFQUFFO1FBQzFCLDhCQUF1QixFQUFtQyxJQUFJLFNBQUcsRUFBRTtRQUNuRSxnQ0FBeUIsRUFBbUMsSUFBSSxTQUFHLEVBQUU7UUFLNUUsS0FBSSxDQUFDLEdBQUcsQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLElBQU0sUUFBTyxFQUFHO1lBQ2YsR0FBRyxDQUFDLEtBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3RCLEtBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsS0FBSSxDQUFDLFlBQVksQ0FBQztnQkFDdEQsS0FBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsWUFBWSxDQUFDO2dCQUN4RCxLQUFJLENBQUMsYUFBWSxFQUFHLFNBQVM7WUFDOUI7UUFDRCxDQUFDO1FBQ0QsS0FBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sV0FBRSxDQUFDOztJQUN0QjtJQUVBLHNCQUFXLGlDQUFJO2FBQWYsVUFBZ0IsWUFBc0I7WUFDckMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDdEQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3pEO1lBQ0EsSUFBSSxDQUFDLGFBQVksRUFBRyxZQUFZO1FBQ2pDLENBQUM7Ozs7SUFFTSxpQ0FBTSxFQUFiLFVBQWMsS0FBb0IsRUFBRSxNQUFvQjtRQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQ3JDLENBQUM7SUFFTSx5Q0FBYyxFQUFyQixVQUFzQixLQUFvQixFQUFFLFFBQXlCO1FBQ3BFLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7SUFDL0MsQ0FBQztJQUVNLDhCQUFHLEVBQVYsVUFBVyxLQUFvQjtRQUM5QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxHQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBWSxHQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFTSxzQ0FBVyxFQUFsQixVQUFtQixLQUFvQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxHQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBWSxHQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFFTSw4QkFBRyxFQUFWLFVBQ0MsS0FBb0IsRUFDcEIsZ0JBQWlDO1FBQWpDLDJEQUFpQztRQUVqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDL0UsQ0FBQztJQUVNLHNDQUFXLEVBQWxCLFVBQXNCLEtBQW9CLEVBQUUsZ0JBQWlDO1FBQWpDLDJEQUFpQztRQUM1RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUM7SUFDekYsQ0FBQztJQUVPLCtCQUFJLEVBQVosVUFDQyxLQUFvQixFQUNwQixnQkFBeUIsRUFDekIsZUFBc0MsRUFDdEMsUUFBd0M7UUFKekM7UUFNQyxJQUFNLFdBQVUsRUFBRyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQy9HLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsRUFBQyxFQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsSUFBTSxTQUFRLEVBQVEsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNuQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2QsUUFBUTtZQUNUO1lBQ0EsSUFBTSxLQUFJLEVBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM3QyxJQUFNLGlCQUFnQixFQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFDLEdBQUksRUFBRTtZQUNyRCxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNULE9BQU8sSUFBSTtZQUNaO1lBQUUsS0FBSyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxJQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNsRCxJQUFNLE9BQU0sRUFBRyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxVQUFDLEtBQTBCO29CQUM1RCxHQUFHLENBQ0YsS0FBSyxDQUFDLE9BQU0sSUFBSyxTQUFRO3dCQUN4QixLQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFDLElBQUssS0FBSyxDQUFDLElBQ25FLEVBQUU7d0JBQ0QsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFZLENBQUUsQ0FBQztvQkFDbEM7Z0JBQ0QsQ0FBQyxDQUFDO2dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO2dCQUNoQixRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsbUJBQU0sZ0JBQWdCLEdBQUUsS0FBSyxHQUFFO1lBQ3JEO1FBQ0Q7UUFDQSxPQUFPLElBQUk7SUFDWixDQUFDO0lBQ0Ysc0JBQUM7QUFBRCxDQXJGQSxDQUFxQyxpQkFBTztBQUEvQjtBQXVGYixrQkFBZSxlQUFlOzs7Ozs7Ozs7Ozs7QUNqRzlCO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQWVBLElBQU0sYUFBWSxFQUFHLElBQUksYUFBRyxFQUFnQztBQUM1RCxJQUFNLFVBQVMsRUFBRyxXQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztBQUVwQixlQUFNLEVBQUcsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO0FBRTlDOzs7QUFHQTtJQWdEQzs7O0lBR0E7UUFBQTtRQXhDQTs7O1FBR1Esd0JBQWtCLEVBQUcsSUFBSTtRQU9qQzs7O1FBR1EsMEJBQW9CLEVBQWEsRUFBRTtRQW9CbkMsa0JBQVksRUFBZ0IsSUFBSSxxQkFBVyxFQUFFO1FBRTdDLGNBQVEsRUFBYSxFQUFFO1FBTTlCLElBQUksQ0FBQyxVQUFTLEVBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsZ0JBQWUsRUFBRyxJQUFJLGFBQUcsRUFBaUI7UUFDL0MsSUFBSSxDQUFDLFlBQVcsRUFBTSxFQUFFO1FBQ3hCLElBQUksQ0FBQyxpQkFBZ0IsRUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDOUMsSUFBSSxDQUFDLGlCQUFnQixFQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUVsRCx3QkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQzNCLEtBQUssRUFBRSxJQUFJO1lBQ1gsUUFBUSxFQUFFO2dCQUNULEtBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsQ0FBQztZQUNELFFBQVEsRUFBRTtnQkFDVCxLQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLEtBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixDQUFDO1lBQ0QsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQzlCLFFBQVEsRUFBRTtnQkFDVCxPQUFPLEtBQUksQ0FBQyxRQUFRO1lBQ3JCLENBQUM7WUFDRCxjQUFjLEVBQUUsRUFBb0I7WUFDcEMsU0FBUyxFQUFFLEtBQUs7WUFDaEIsZUFBZSxFQUFFO1NBQ2pCLENBQUM7UUFFRixJQUFJLENBQUMscUJBQXFCLEVBQUU7SUFDN0I7SUFFVSwwQkFBSSxFQUFkLFVBQXlDLFFBQWtDO1FBQzFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUSxJQUFLLFNBQVMsRUFBRTtZQUNoQyxJQUFJLENBQUMsU0FBUSxFQUFHLElBQUksYUFBRyxFQUE4QztRQUN0RTtRQUNBLElBQUksT0FBTSxFQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN4QyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDWixPQUFNLEVBQUcsSUFBSSxRQUFRLENBQUM7Z0JBQ3JCLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQzlCLElBQUksRUFBRTthQUNOLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ3BDO1FBRUEsT0FBTyxNQUFXO0lBQ25CLENBQUM7SUFFUyw4QkFBUSxFQUFsQjtRQUNDO0lBQ0QsQ0FBQztJQUVTLDhCQUFRLEVBQWxCO1FBQ0M7SUFDRCxDQUFDO0lBRUQsc0JBQVcsa0NBQVU7YUFBckI7WUFDQyxPQUFPLElBQUksQ0FBQyxXQUFXO1FBQ3hCLENBQUM7Ozs7SUFFRCxzQkFBVywyQ0FBbUI7YUFBOUI7WUFDQyxPQUFNLGlCQUFLLElBQUksQ0FBQyxvQkFBb0I7UUFDckMsQ0FBQzs7OztJQUVNLDJDQUFxQixFQUE1QixVQUE2QixjQUE4QjtRQUNsRCw4Q0FBWTtRQUNwQixJQUFNLGFBQVksRUFBRyx3QkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFO1FBRWpELEdBQUcsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGFBQVksSUFBSyxZQUFZLEVBQUU7WUFDOUQsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFTLElBQUssU0FBUyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsVUFBUyxFQUFHLElBQUkseUJBQWUsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNqRTtZQUNBLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSSxFQUFHLFlBQVk7WUFDbEMsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNsQjtRQUNBLFlBQVksQ0FBQyxlQUFjLEVBQUcsY0FBYztJQUM3QyxDQUFDO0lBRU0sdUNBQWlCLEVBQXhCLFVBQXlCLGtCQUFzQztRQUEvRDtRQUNDLElBQU0sYUFBWSxFQUFHLHdCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUU7UUFDakQsWUFBWSxDQUFDLGdCQUFlLEVBQUcsa0JBQWtCO1FBQ2pELElBQU0sV0FBVSxFQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQztRQUNoRSxJQUFNLDRCQUEyQixFQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUM7UUFDL0UsSUFBTSxvQkFBbUIsRUFBYSxFQUFFO1FBQ3hDLElBQU0sY0FBYSxFQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRTdDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQWtCLElBQUssTUFBSyxHQUFJLDJCQUEyQixDQUFDLE9BQU0sSUFBSyxDQUFDLEVBQUU7WUFDbEYsSUFBTSxjQUFhLG1CQUFPLGFBQWEsRUFBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxRSxJQUFNLGtCQUFpQixFQUF3QixFQUFFO1lBQ2pELElBQU0sb0JBQW1CLEVBQVEsRUFBRTtZQUNuQyxJQUFJLGFBQVksRUFBRyxLQUFLO1lBRXhCLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsRUFBQyxFQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlDLElBQU0sYUFBWSxFQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFDLElBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ25ELFFBQVE7Z0JBQ1Q7Z0JBQ0EsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDcEMsSUFBTSxpQkFBZ0IsRUFBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztnQkFDdkQsSUFBTSxZQUFXLEVBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUM3QyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQ3hCLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNoQztnQkFDRCxHQUFHLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBQyxJQUFLLENBQUMsQ0FBQyxFQUFFO29CQUM3RCxhQUFZLEVBQUcsSUFBSTtvQkFDbkIsSUFBTSxjQUFhLEVBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBZ0IsWUFBYyxDQUFDO29CQUN2RSxJQUFJLENBQUMsSUFBSSxJQUFDLEVBQUcsQ0FBQyxFQUFFLElBQUMsRUFBRyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUMsRUFBRSxFQUFFO3dCQUM5QyxJQUFNLE9BQU0sRUFBRyxhQUFhLENBQUMsR0FBQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDO3dCQUM5RCxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQU8sR0FBSSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFDLElBQUssQ0FBQyxDQUFDLEVBQUU7NEJBQ3ZFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7d0JBQ3ZDO3dCQUNBLEdBQUcsQ0FBQyxhQUFZLEdBQUksVUFBVSxFQUFFOzRCQUMvQixtQkFBbUIsQ0FBQyxZQUFZLEVBQUMsRUFBRyxNQUFNLENBQUMsS0FBSzt3QkFDakQ7b0JBQ0Q7Z0JBQ0Q7Z0JBQUUsS0FBSztvQkFDTixJQUFNLE9BQU0sRUFBRyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDO29CQUN2RCxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQU8sR0FBSSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFDLElBQUssQ0FBQyxDQUFDLEVBQUU7d0JBQ3ZFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQ3ZDO29CQUNBLEdBQUcsQ0FBQyxhQUFZLEdBQUksVUFBVSxFQUFFO3dCQUMvQixtQkFBbUIsQ0FBQyxZQUFZLEVBQUMsRUFBRyxNQUFNLENBQUMsS0FBSztvQkFDakQ7Z0JBQ0Q7WUFDRDtZQUVBLEdBQUcsQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxJQUFJLEVBQUUsUUFBUTtvQkFDdEYsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO29CQUNqRTtnQkFDRCxDQUFDLENBQUM7WUFDSDtZQUNBLElBQUksQ0FBQyxZQUFXLEVBQUcsbUJBQW1CO1lBQ3RDLElBQUksQ0FBQyxxQkFBb0IsRUFBRyxtQkFBbUI7UUFDaEQ7UUFBRSxLQUFLO1lBQ04sSUFBSSxDQUFDLG1CQUFrQixFQUFHLEtBQUs7WUFDL0IsSUFBSSxDQUFDLElBQUksRUFBQyxFQUFHLENBQUMsRUFBRSxFQUFDLEVBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDOUMsSUFBTSxhQUFZLEVBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDckMsR0FBRyxDQUFDLE9BQU8sVUFBVSxDQUFDLFlBQVksRUFBQyxJQUFLLFVBQVUsRUFBRTtvQkFDbkQsVUFBVSxDQUFDLFlBQVksRUFBQyxFQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDcEQsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUN4QixZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDaEM7Z0JBQ0Y7Z0JBQUUsS0FBSztvQkFDTixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUN2QztZQUNEO1lBQ0EsSUFBSSxDQUFDLHFCQUFvQixFQUFHLG1CQUFtQjtZQUMvQyxJQUFJLENBQUMsWUFBVyx1QkFBUSxVQUFVLENBQUU7UUFDckM7UUFFQSxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU0sRUFBRyxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNsQjtJQUNELENBQUM7SUFFRCxzQkFBVyxnQ0FBUTthQUFuQjtZQUNDLE9BQU8sSUFBSSxDQUFDLFNBQVM7UUFDdEIsQ0FBQzs7OztJQUVNLHFDQUFlLEVBQXRCLFVBQXVCLFFBQXNCO1FBQzVDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU0sRUFBRyxFQUFDLEdBQUksUUFBUSxDQUFDLE9BQU0sRUFBRyxDQUFDLEVBQUU7WUFDckQsSUFBSSxDQUFDLFVBQVMsRUFBRyxRQUFRO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDbEI7SUFDRCxDQUFDO0lBRU0sZ0NBQVUsRUFBakI7UUFDQyxJQUFNLGFBQVksRUFBRyx3QkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFO1FBQ2pELFlBQVksQ0FBQyxNQUFLLEVBQUcsS0FBSztRQUMxQixJQUFNLE9BQU0sRUFBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7UUFDdkMsSUFBSSxNQUFLLEVBQUcsTUFBTSxFQUFFO1FBQ3BCLE1BQUssRUFBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtRQUN6QixPQUFPLEtBQUs7SUFDYixDQUFDO0lBRU0sZ0NBQVUsRUFBakI7UUFDQyxJQUFNLGFBQVksRUFBRyx3QkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFO1FBQ2pELEdBQUcsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzVCLFlBQVksQ0FBQyxVQUFVLEVBQUU7UUFDMUI7SUFDRCxDQUFDO0lBRVMsNEJBQU0sRUFBaEI7UUFDQyxPQUFPLEtBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7SUFNVSxrQ0FBWSxFQUF0QixVQUF1QixZQUFvQixFQUFFLEtBQVU7UUFDdEQsTUFBSyxFQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksY0FBYSxFQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN0RCxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUU7Z0JBQ25CLGNBQWEsRUFBRyxJQUFJLGFBQUcsRUFBaUI7Z0JBQ3hDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUM7WUFDbEQ7WUFFQSxJQUFJLHNCQUFxQixFQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO1lBQzNELEdBQUcsQ0FBQyxDQUFDLHFCQUFxQixFQUFFO2dCQUMzQixzQkFBcUIsRUFBRyxFQUFFO2dCQUMxQixhQUFhLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQztZQUN2RDtZQUNBLHFCQUFxQixDQUFDLElBQUksT0FBMUIscUJBQXFCLG1CQUFTLEtBQUs7UUFDcEM7UUFBRSxLQUFLO1lBQ04sSUFBTSxXQUFVLEVBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsWUFBWSxtQkFBTSxVQUFVLEVBQUssS0FBSyxFQUFFO1FBQ2xFO0lBQ0QsQ0FBQztJQUVEOzs7Ozs7O0lBT1EseUNBQW1CLEVBQTNCLFVBQTRCLFlBQW9CO1FBQy9DLElBQU0sY0FBYSxFQUFHLEVBQUU7UUFFeEIsSUFBSSxZQUFXLEVBQUcsSUFBSSxDQUFDLFdBQVc7UUFFbEMsT0FBTyxXQUFXLEVBQUU7WUFDbkIsSUFBTSxZQUFXLEVBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDakQsR0FBRyxDQUFDLFdBQVcsRUFBRTtnQkFDaEIsSUFBTSxXQUFVLEVBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7Z0JBRWhELEdBQUcsQ0FBQyxVQUFVLEVBQUU7b0JBQ2YsYUFBYSxDQUFDLE9BQU8sT0FBckIsYUFBYSxtQkFBWSxVQUFVO2dCQUNwQztZQUNEO1lBRUEsWUFBVyxFQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO1FBQ2pEO1FBRUEsT0FBTyxhQUFhO0lBQ3JCLENBQUM7SUFFRDs7Ozs7O0lBTVUsa0NBQVksRUFBdEIsVUFBdUIsWUFBb0I7UUFDMUMsSUFBSSxjQUFhLEVBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBRTFELEdBQUcsQ0FBQyxjQUFhLElBQUssU0FBUyxFQUFFO1lBQ2hDLE9BQU8sYUFBYTtRQUNyQjtRQUVBLGNBQWEsRUFBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDO1FBRXRELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7UUFDckQsT0FBTyxhQUFhO0lBQ3JCLENBQUM7SUFFTywrQ0FBeUIsRUFBakMsVUFDQyxhQUFrQixFQUNsQixtQkFBNkI7UUFGOUI7UUFJQyxJQUFNLGtCQUFpQixFQUE2QixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUVyRixPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxVQUFDLG1CQUFtQixFQUFFLEVBQTBCO2dCQUF4QixzQkFBUSxFQUFFLDhCQUFZO1lBQzdFLElBQUksa0JBQWlCLEVBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUN6RCxHQUFHLENBQUMsa0JBQWlCLElBQUssU0FBUyxFQUFFO2dCQUNwQyxrQkFBaUIsRUFBRztvQkFDbkIsa0JBQWtCLEVBQUUsRUFBRTtvQkFDdEIsYUFBYSxFQUFFLEVBQUU7b0JBQ2pCLE9BQU8sRUFBRTtpQkFDVDtZQUNGO1lBQ0EsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFDLEVBQUcsS0FBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7WUFDbkYsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBQyxFQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUM7WUFDM0UsR0FBRyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUMsSUFBSyxDQUFDLENBQUMsRUFBRTtnQkFDckQsaUJBQWlCLENBQUMsUUFBTyxFQUFHLElBQUk7WUFDakM7WUFDQSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDO1lBQ3BELE9BQU8sbUJBQW1CO1FBQzNCLENBQUMsRUFBRSxJQUFJLGFBQUcsRUFBdUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7O0lBS1EsMkNBQXFCLEVBQTdCLFVBQThCLFFBQWEsRUFBRSxJQUFTO1FBQ3JELEdBQUcsQ0FBQyxPQUFPLFNBQVEsSUFBSyxXQUFVLEdBQUksQ0FBQyxRQUFRLENBQUMsY0FBTSxFQUFDLEdBQUksa0NBQXVCLENBQUMsUUFBUSxFQUFDLElBQUssS0FBSyxFQUFFO1lBQ3ZHLEdBQUcsQ0FBQyxJQUFJLENBQUMseUJBQXdCLElBQUssU0FBUyxFQUFFO2dCQUNoRCxJQUFJLENBQUMseUJBQXdCLEVBQUcsSUFBSSxpQkFBTyxFQUd4QztZQUNKO1lBQ0EsSUFBTSxTQUFRLEVBQStCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFDLEdBQUksRUFBRTtZQUN4RixrQ0FBUyxFQUFFLHNCQUFLO1lBRXRCLEdBQUcsQ0FBQyxVQUFTLElBQUssVUFBUyxHQUFJLE1BQUssSUFBSyxJQUFJLEVBQUU7Z0JBQzlDLFVBQVMsRUFBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBNEI7Z0JBQzFELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxhQUFFLEtBQUssRUFBRSxLQUFJLENBQUUsQ0FBQztZQUN4RTtZQUNBLE9BQU8sU0FBUztRQUNqQjtRQUNBLE9BQU8sUUFBUTtJQUNoQixDQUFDO0lBRUQsc0JBQVcsZ0NBQVE7YUFBbkI7WUFDQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVMsSUFBSyxTQUFTLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxVQUFTLEVBQUcsSUFBSSx5QkFBZSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2pFO1lBQ0EsT0FBTyxJQUFJLENBQUMsU0FBUztRQUN0QixDQUFDOzs7O0lBRU8sMENBQW9CLEVBQTVCLFVBQTZCLFVBQWU7UUFBNUM7UUFDQyxJQUFNLGlCQUFnQixFQUF1QixJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBQ2xGLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFNLEVBQUcsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUM3QixVQUFDLFVBQVUsRUFBRSx3QkFBd0I7Z0JBQ3BDLE9BQU0scUJBQU0sVUFBVSxFQUFLLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFJLEVBQUUsVUFBVSxDQUFDO1lBQzNFLENBQUMsdUJBQ0ksVUFBVSxFQUNmO1FBQ0Y7UUFDQSxPQUFPLFVBQVU7SUFDbEIsQ0FBQztJQUVEOzs7SUFHUSx1Q0FBaUIsRUFBekI7UUFBQTtRQUNDLElBQU0sY0FBYSxFQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDO1FBRXZELEdBQUcsQ0FBQyxhQUFhLENBQUMsT0FBTSxFQUFHLENBQUMsRUFBRTtZQUM3QixPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBQyxNQUFjLEVBQUUsb0JBQWtDO2dCQUM5RSxJQUFNLGNBQWEsRUFBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSSxFQUFFLE1BQU0sRUFBRSxLQUFJLENBQUMsV0FBVyxFQUFFLEtBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQy9GLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRTtvQkFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyx1RUFBdUUsQ0FBQztvQkFDckYsT0FBTyxNQUFNO2dCQUNkO2dCQUNBLE9BQU8sYUFBYTtZQUNyQixDQUFDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzFCO1FBQ0EsT0FBTyxJQUFJLENBQUMsZ0JBQWdCO0lBQzdCLENBQUM7SUFFRDs7Ozs7SUFLVSxxQ0FBZSxFQUF6QixVQUEwQixLQUFzQjtRQUFoRDtRQUNDLElBQU0sYUFBWSxFQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO1FBRXJELEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTSxFQUFHLENBQUMsRUFBRTtZQUM1QixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBQyxLQUFzQixFQUFFLG1CQUFnQztnQkFDbkYsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSSxFQUFFLEtBQUssQ0FBQztZQUM3QyxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ1Y7UUFFQSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVEsSUFBSyxTQUFTLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBQyxJQUFJO2dCQUMxQixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLENBQUMsQ0FBQztRQUNIO1FBRUEsT0FBTyxLQUFLO0lBQ2IsQ0FBQztJQUVPLDJDQUFxQixFQUE3QjtRQUFBO1FBQ0MsSUFBTSxrQkFBaUIsRUFBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBRS9ELEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFNLEVBQUcsQ0FBQyxFQUFFO1lBQ2pDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxVQUFDLGdCQUFnQixJQUFLLHVCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsRUFBM0IsQ0FBMkIsQ0FBQztRQUM3RTtJQUNELENBQUM7SUFFUyx5QkFBRyxFQUFiLFVBQWMsTUFBYztRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUVTLDZCQUFPLEVBQWpCO1FBQ0MsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU0sRUFBRyxDQUFDLEVBQUU7WUFDaEMsSUFBTSxPQUFNLEVBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDWCxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ2pCO1FBQ0Q7SUFDRCxDQUFDO0lBOWJEOzs7SUFHTyxpQkFBSyxFQUFXLDJCQUFnQjtJQTRieEMsaUJBQUM7Q0FoY0Q7QUFBYTtBQWtjYixrQkFBZSxVQUFVOzs7Ozs7Ozs7OztBQzdlekIsSUFBSSxzQ0FBcUMsRUFBRyxFQUFFO0FBQzlDLElBQUkscUNBQW9DLEVBQUcsRUFBRTtBQUU3QyxvQ0FBb0MsT0FBb0I7SUFDdkQsR0FBRyxDQUFDLG1CQUFrQixHQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7UUFDeEMsc0NBQXFDLEVBQUcscUJBQXFCO1FBQzdELHFDQUFvQyxFQUFHLG9CQUFvQjtJQUM1RDtJQUFFLEtBQUssR0FBRyxDQUFDLGFBQVksR0FBSSxPQUFPLENBQUMsTUFBSyxHQUFJLGdCQUFlLEdBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtRQUM3RSxzQ0FBcUMsRUFBRyxlQUFlO1FBQ3ZELHFDQUFvQyxFQUFHLGNBQWM7SUFDdEQ7SUFBRSxLQUFLO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztJQUNqRDtBQUNEO0FBRUEsb0JBQW9CLE9BQW9CO0lBQ3ZDLEdBQUcsQ0FBQyxxQ0FBb0MsSUFBSyxFQUFFLEVBQUU7UUFDaEQsMEJBQTBCLENBQUMsT0FBTyxDQUFDO0lBQ3BDO0FBQ0Q7QUFFQSx1QkFBdUIsT0FBb0IsRUFBRSxjQUEwQixFQUFFLGVBQTJCO0lBQ25HLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFFbkIsSUFBSSxTQUFRLEVBQUcsS0FBSztJQUVwQixJQUFJLGNBQWEsRUFBRztRQUNuQixHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDZCxTQUFRLEVBQUcsSUFBSTtZQUNmLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxxQ0FBcUMsRUFBRSxhQUFhLENBQUM7WUFDakYsT0FBTyxDQUFDLG1CQUFtQixDQUFDLG9DQUFvQyxFQUFFLGFBQWEsQ0FBQztZQUVoRixlQUFlLEVBQUU7UUFDbEI7SUFDRCxDQUFDO0lBRUQsY0FBYyxFQUFFO0lBRWhCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxvQ0FBb0MsRUFBRSxhQUFhLENBQUM7SUFDN0UsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHFDQUFxQyxFQUFFLGFBQWEsQ0FBQztBQUMvRTtBQUVBLGNBQWMsSUFBaUIsRUFBRSxVQUEyQixFQUFFLGFBQXFCLEVBQUUsVUFBc0I7SUFDMUcsSUFBTSxZQUFXLEVBQUcsVUFBVSxDQUFDLG9CQUFtQixHQUFPLGNBQWEsV0FBUztJQUUvRSxhQUFhLENBQ1osSUFBSSxFQUNKO1FBQ0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO1FBRWpDLHFCQUFxQixDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNoQyxDQUFDLENBQUM7SUFDSCxDQUFDLEVBQ0Q7UUFDQyxVQUFVLEVBQUU7SUFDYixDQUFDLENBQ0Q7QUFDRjtBQUVBLGVBQWUsSUFBaUIsRUFBRSxVQUEyQixFQUFFLGNBQXNCO0lBQ3BGLElBQU0sWUFBVyxFQUFHLFVBQVUsQ0FBQyxxQkFBb0IsR0FBTyxlQUFjLFdBQVM7SUFFakYsYUFBYSxDQUNaLElBQUksRUFDSjtRQUNDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUVsQyxxQkFBcUIsQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDaEMsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxFQUNEO1FBQ0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUNuQyxDQUFDLENBQ0Q7QUFDRjtBQUVBLGtCQUFlO0lBQ2QsS0FBSztJQUNMLElBQUk7Q0FDSjs7Ozs7Ozs7Ozs7O0FDcEZEO0FBZUE7OztBQUdhLGNBQUssRUFBRyxnQkFBTSxDQUFDLHlCQUF5QixDQUFDO0FBRXREOzs7QUFHYSxjQUFLLEVBQUcsZ0JBQU0sQ0FBQyx5QkFBeUIsQ0FBQztBQUV0RDs7O0FBR2EsaUJBQVEsRUFBRyxnQkFBTSxDQUFDLG9EQUFvRCxDQUFDO0FBRXBGOzs7QUFHQSxpQkFDQyxLQUFlO0lBRWYsT0FBTyxPQUFPLENBQUMsTUFBSyxHQUFJLE9BQU8sTUFBSyxJQUFLLFNBQVEsR0FBSSxLQUFLLENBQUMsS0FBSSxJQUFLLGFBQUssQ0FBQztBQUMzRTtBQUpBO0FBTUE7OztBQUdBLGlCQUF3QixLQUFZO0lBQ25DLE9BQU8sT0FBTyxDQUFDLE1BQUssR0FBSSxPQUFPLE1BQUssSUFBSyxTQUFRLEdBQUksQ0FBQyxLQUFLLENBQUMsS0FBSSxJQUFLLGNBQUssR0FBSSxLQUFLLENBQUMsS0FBSSxJQUFLLGdCQUFRLENBQUMsQ0FBQztBQUN4RztBQUZBO0FBSUE7OztBQUdBLG9CQUEyQixLQUFZO0lBQ3RDLE9BQU8sT0FBTyxDQUFDLE1BQUssR0FBSSxPQUFPLE1BQUssSUFBSyxTQUFRLEdBQUksS0FBSyxDQUFDLEtBQUksSUFBSyxnQkFBUSxDQUFDO0FBQzlFO0FBRkE7QUFJQSx1QkFBOEIsS0FBVTtJQUN2QyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztBQUN2QjtBQUZBO0FBb0RBLGtCQUNDLE1BQXVCLEVBQ3ZCLGlCQUEyRCxFQUMzRCxTQUE0QjtJQUU1QixJQUFJLFFBQU8sRUFBRyxLQUFLO0lBQ25CLElBQUksUUFBUTtJQUNaLEdBQUcsQ0FBQyxPQUFPLGtCQUFpQixJQUFLLFVBQVUsRUFBRTtRQUM1QyxTQUFRLEVBQUcsaUJBQWlCO0lBQzdCO0lBQUUsS0FBSztRQUNOLFNBQVEsRUFBRyxpQkFBaUIsQ0FBQyxRQUFRO1FBQ3JDLFVBQVMsRUFBRyxpQkFBaUIsQ0FBQyxTQUFTO1FBQ3ZDLFFBQU8sRUFBRyxpQkFBaUIsQ0FBQyxRQUFPLEdBQUksS0FBSztJQUM3QztJQUVBLElBQUksTUFBSyxFQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUMsaUJBQUssTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDMUQ7UUFDQyxNQUFLLEVBQUcsRUFBRTtJQUNYO0lBQ0EsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ3BCLElBQU0sS0FBSSxFQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUU7UUFDMUIsR0FBRyxDQUFDLElBQUksRUFBRTtZQUNULEdBQUcsQ0FBQyxDQUFDLFFBQU8sR0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUMsR0FBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNsRSxNQUFLLG1CQUFPLEtBQUssRUFBSyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3JDO1lBQ0EsR0FBRyxDQUFDLENBQUMsVUFBUyxHQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7WUFDeEI7UUFDRDtJQUNEO0lBQ0EsT0FBTyxNQUFNO0FBQ2Q7QUEvQkE7QUFpQ0E7OztBQUdBLFdBQ0MsaUJBQWlELEVBQ2pELFVBQTJCLEVBQzNCLFFBQTRCO0lBQTVCLHdDQUE0QjtJQUU1QixPQUFPO1FBQ04sUUFBUTtRQUNSLGlCQUFpQjtRQUNqQixVQUFVO1FBQ1YsSUFBSSxFQUFFO0tBQ047QUFDRjtBQVhBO0FBbUJBLFdBQ0MsR0FBVyxFQUNYLG9CQUFnRixFQUNoRixRQUF5QztJQUR6QyxnRUFBZ0Y7SUFDaEYsK0NBQXlDO0lBRXpDLElBQUksV0FBVSxFQUFnRCxvQkFBb0I7SUFDbEYsSUFBSSwwQkFBMEI7SUFFOUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFBRTtRQUN4QyxTQUFRLEVBQUcsb0JBQW9CO1FBQy9CLFdBQVUsRUFBRyxFQUFFO0lBQ2hCO0lBRUEsR0FBRyxDQUFDLE9BQU8sV0FBVSxJQUFLLFVBQVUsRUFBRTtRQUNyQywyQkFBMEIsRUFBRyxVQUFVO1FBQ3ZDLFdBQVUsRUFBRyxFQUFFO0lBQ2hCO0lBRUEsT0FBTztRQUNOLEdBQUc7UUFDSCwwQkFBMEI7UUFDMUIsUUFBUTtRQUNSLFVBQVU7UUFDVixJQUFJLEVBQUU7S0FDTjtBQUNGO0FBekJBO0FBMkJBOzs7QUFHQSxhQUNDLEVBQXdFLEVBQ3hFLFFBQWtCO1FBRGhCLGNBQUksRUFBRSxhQUFVLEVBQVYsK0JBQVUsRUFBRSxhQUFVLEVBQVYsK0JBQVUsRUFBRSxVQUFPLEVBQVAsNEJBQU8sRUFBRSxnQkFBaUIsRUFBakIsc0NBQWlCO0lBRzFELE9BQU87UUFDTixHQUFHLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsRUFBRTtRQUMxRCxVQUFVLEVBQUUsS0FBSztRQUNqQixVQUFVLEVBQUUsS0FBSztRQUNqQixNQUFNLEVBQUUsRUFBRTtRQUNWLFFBQVE7UUFDUixJQUFJLEVBQUUsZ0JBQVE7UUFDZCxPQUFPLEVBQUUsSUFBSTtRQUNiLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ2pELFFBQVE7S0FDUztBQUNuQjtBQWZBOzs7Ozs7Ozs7OztBQzlMQTtBQU9BLHFCQUE0QixNQUFpQjtJQUM1QyxPQUFPLGlDQUFlLENBQUMsVUFBQyxNQUFNLEVBQUUsV0FBVztRQUMxQyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sQ0FBQztJQUMvRSxDQUFDLENBQUM7QUFDSDtBQUpBO0FBTUEsa0JBQWUsV0FBVzs7Ozs7Ozs7Ozs7QUNaMUI7QUFDQTtBQUVBO0lBQ0MsT0FBTyxpQ0FBZSxDQUFDLFVBQUMsTUFBTSxFQUFFLFdBQVc7UUFDMUMsbUNBQWdCLENBQUM7WUFDaEIsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNsQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDWCxDQUFDLENBQUM7QUFDSDtBQU5BO0FBUUEsa0JBQWUsWUFBWTs7Ozs7Ozs7Ozs7QUNaM0I7QUFTQSwwQkFBaUMsTUFBeUI7SUFDekQsT0FBTyxpQ0FBZSxDQUFDLFVBQUMsTUFBTSxFQUFFLFdBQVc7UUFDMUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sQ0FBQztJQUNwRixDQUFDLENBQUM7QUFDSDtBQUpBO0FBTUEsa0JBQWUsZ0JBQWdCOzs7Ozs7Ozs7OztBQ2QvQjtBQUNBO0FBaUNBOzs7O0FBSUEsdUJBQTJFLEVBT2xEO1FBTnhCLFlBQUcsRUFDSCxrQkFBZSxFQUFmLG9DQUFlLEVBQ2Ysa0JBQWUsRUFBZixvQ0FBZSxFQUNmLGNBQVcsRUFBWCxnQ0FBVyxFQUNYLGlCQUF1QyxFQUF2QyxvRkFBdUMsRUFDdkMsdUJBQXNDLEVBQXRDLHVGQUFzQztJQUV0QyxPQUFPLFVBQXFDLE1BQVM7UUFDcEQsTUFBTSxDQUFDLFNBQVMsQ0FBQywwQkFBeUIsRUFBRztZQUM1QyxPQUFPLEVBQUUsR0FBRztZQUNaLFVBQVU7WUFDVixVQUFVO1lBQ1YsTUFBTTtZQUNOLFNBQVM7WUFDVCxlQUFlO1NBQ2Y7SUFDRixDQUFDO0FBQ0Y7QUFsQkE7QUFvQkEsa0JBQWUsYUFBYTs7Ozs7Ozs7Ozs7QUMzRDVCO0FBR0E7Ozs7Ozs7QUFPQSxzQkFBNkIsWUFBb0IsRUFBRSxZQUFrQyxFQUFFLGdCQUEyQjtJQUNqSCxPQUFPLGlDQUFlLENBQUMsVUFBQyxNQUFNLEVBQUUsV0FBVztRQUMxQyxNQUFNLENBQUMsWUFBWSxDQUFDLGtCQUFnQixZQUFjLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RSxNQUFNLENBQUMsWUFBWSxDQUFDLHdCQUF3QixFQUFFLFlBQVksQ0FBQztRQUMzRCxHQUFHLENBQUMsaUJBQWdCLEdBQUksV0FBVyxFQUFFO1lBQ3BDLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFO2dCQUNuQyxZQUFZO2dCQUNaLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFO2FBQzlDLENBQUM7UUFDSDtJQUNELENBQUMsQ0FBQztBQUNIO0FBWEE7QUFhQSxrQkFBZSxZQUFZOzs7Ozs7Ozs7OztBQ3JCM0I7Ozs7OztBQU1BLHlCQUFnQyxPQUF5QjtJQUN4RCxPQUFPLFVBQVMsTUFBVyxFQUFFLFdBQW9CLEVBQUUsVUFBK0I7UUFDakYsR0FBRyxDQUFDLE9BQU8sT0FBTSxJQUFLLFVBQVUsRUFBRTtZQUNqQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7UUFDckM7UUFBRSxLQUFLO1lBQ04sT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7UUFDN0I7SUFDRCxDQUFDO0FBQ0Y7QUFSQTtBQVVBLGtCQUFlLGVBQWU7Ozs7Ozs7Ozs7O0FDbEI5QjtBQUVBO0FBQ0E7QUFHQTs7O0FBR0EsSUFBTSx1QkFBc0IsRUFBd0MsSUFBSSxpQkFBTyxFQUFFO0FBMEJqRjs7Ozs7OztBQU9BLGdCQUF1QixFQUFxQztRQUFuQyxjQUFJLEVBQUUsZ0NBQWE7SUFDM0MsT0FBTyxpQ0FBZSxDQUFDLFVBQUMsTUFBTSxFQUFFLFdBQVc7UUFDMUMsbUNBQWdCLENBQUMsVUFBK0MsVUFBZTtZQUE5RDtZQUNoQixJQUFNLGFBQVksRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEQsR0FBRyxDQUFDLFlBQVksRUFBRTtnQkFDVCxvQ0FBUSxFQUFFLHNDQUFXO2dCQUM3QixJQUFNLG9CQUFtQixFQUFHLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUMsR0FBSSxFQUFFO2dCQUNsRSxHQUFHLENBQUMsbUJBQW1CLENBQUMsT0FBTSxJQUFLLENBQUMsRUFBRTtvQkFDckMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQztnQkFDdEQ7Z0JBQ0EsR0FBRyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUMsSUFBSyxDQUFDLENBQUMsRUFBRTtvQkFDckQsSUFBSSxDQUFDLEdBQUcsQ0FDUCxXQUFXLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRTt3QkFDNUIsS0FBSSxDQUFDLFVBQVUsRUFBRTtvQkFDbEIsQ0FBQyxDQUFDLENBQ0Y7b0JBQ0QsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDdkM7Z0JBQ0EsT0FBTyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxDQUFDO1lBQzdDO1FBQ0QsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0FBQ0g7QUF0QkE7QUF3QkEsa0JBQWUsTUFBTTs7Ozs7Ozs7Ozs7QUNqRXJCO0FBRUEseUJBQXlCLEtBQVU7SUFDbEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDLElBQUssa0JBQWlCLEdBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDM0Y7QUFFQSxnQkFBdUIsZ0JBQXFCLEVBQUUsV0FBZ0I7SUFDN0QsT0FBTztRQUNOLE9BQU8sRUFBRSxJQUFJO1FBQ2IsS0FBSyxFQUFFO0tBQ1A7QUFDRjtBQUxBO0FBT0EsZ0JBQXVCLGdCQUFxQixFQUFFLFdBQWdCO0lBQzdELE9BQU87UUFDTixPQUFPLEVBQUUsS0FBSztRQUNkLEtBQUssRUFBRTtLQUNQO0FBQ0Y7QUFMQTtBQU9BLG1CQUEwQixnQkFBcUIsRUFBRSxXQUFnQjtJQUNoRSxPQUFPO1FBQ04sT0FBTyxFQUFFLGlCQUFnQixJQUFLLFdBQVc7UUFDekMsS0FBSyxFQUFFO0tBQ1A7QUFDRjtBQUxBO0FBT0EsaUJBQXdCLGdCQUFxQixFQUFFLFdBQWdCO0lBQzlELElBQUksUUFBTyxFQUFHLEtBQUs7SUFFbkIsSUFBTSxpQkFBZ0IsRUFBRyxpQkFBZ0IsR0FBSSxlQUFlLENBQUMsZ0JBQWdCLENBQUM7SUFDOUUsSUFBTSxpQkFBZ0IsRUFBRyxZQUFXLEdBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQztJQUVwRSxHQUFHLENBQUMsQ0FBQyxpQkFBZ0IsR0FBSSxDQUFDLGdCQUFnQixFQUFFO1FBQzNDLE9BQU87WUFDTixPQUFPLEVBQUUsSUFBSTtZQUNiLEtBQUssRUFBRTtTQUNQO0lBQ0Y7SUFFQSxJQUFNLGFBQVksRUFBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2xELElBQU0sUUFBTyxFQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBRXhDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTSxJQUFLLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFDM0MsUUFBTyxFQUFHLElBQUk7SUFDZjtJQUFFLEtBQUs7UUFDTixRQUFPLEVBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUc7WUFDMUIsT0FBTyxXQUFXLENBQUMsR0FBRyxFQUFDLElBQUssZ0JBQWdCLENBQUMsR0FBRyxDQUFDO1FBQ2xELENBQUMsQ0FBQztJQUNIO0lBQ0EsT0FBTztRQUNOLE9BQU87UUFDUCxLQUFLLEVBQUU7S0FDUDtBQUNGO0FBM0JBO0FBNkJBLGNBQXFCLGdCQUFxQixFQUFFLFdBQWdCO0lBQzNELElBQUksTUFBTTtJQUNWLEdBQUcsQ0FBQyxPQUFPLFlBQVcsSUFBSyxVQUFVLEVBQUU7UUFDdEMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFLLElBQUssMkJBQWdCLEVBQUU7WUFDM0MsT0FBTSxFQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUM7UUFDbEQ7UUFBRSxLQUFLO1lBQ04sT0FBTSxFQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUM7UUFDL0M7SUFDRDtJQUFFLEtBQUssR0FBRyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUN4QyxPQUFNLEVBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQztJQUNoRDtJQUFFLEtBQUs7UUFDTixPQUFNLEVBQUcsU0FBUyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQztJQUNsRDtJQUNBLE9BQU8sTUFBTTtBQUNkO0FBZEE7Ozs7Ozs7Ozs7OztBQ3pEQTtBQUVBO0FBR0E7QUFDQTtBQUVBO0FBRUE7OztBQUdBLElBQVksb0JBR1g7QUFIRCxXQUFZLG9CQUFvQjtJQUMvQix1RUFBWTtJQUNaLHVFQUFRO0FBQ1QsQ0FBQyxFQUhXLHFCQUFvQixFQUFwQiw2QkFBb0IsSUFBcEIsNkJBQW9CO0FBS2hDOzs7QUFHQSxJQUFZLFVBR1g7QUFIRCxXQUFZLFVBQVU7SUFDckIsK0NBQVU7SUFDViw2Q0FBUztBQUNWLENBQUMsRUFIVyxXQUFVLEVBQVYsbUJBQVUsSUFBVixtQkFBVTtBQXlGdEIsd0JBQXdFLElBQU87SUFDOUU7UUFBaUM7UUFXaEM7WUFBWTtpQkFBQSxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO2dCQUFkOztZQUFaLGdEQUNVLElBQUk7WUFUTixZQUFLLEVBQVksUUFBUSxDQUFDLElBQUk7WUFDOUIsYUFBTSxFQUFHLElBQUk7WUFJYiwyQkFBb0IsRUFBdUIsRUFBd0I7WUFNMUUsS0FBSSxDQUFDLG1CQUFrQixFQUFHO2dCQUN6QixXQUFXLEVBQUU7YUFDYjtZQUVELEtBQUksQ0FBQyxLQUFJLEVBQUcsUUFBUSxDQUFDLElBQUk7WUFDekIsS0FBSSxDQUFDLGVBQWMsRUFBRyxvQkFBb0IsQ0FBQyxRQUFROztRQUNwRDtRQUVPLDJCQUFNLEVBQWIsVUFBYyxJQUFjO1lBQzNCLElBQU0sUUFBTyxFQUFHO2dCQUNmLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTTtnQkFDdkIsSUFBSTthQUNKO1lBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM3QixDQUFDO1FBRU0sMEJBQUssRUFBWixVQUFhLElBQWM7WUFDMUIsSUFBTSxRQUFPLEVBQUc7Z0JBQ2YsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLO2dCQUN0QixJQUFJO2FBQ0o7WUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzdCLENBQUM7UUFFRCxzQkFBVywyQkFBSTtpQkFPZjtnQkFDQyxPQUFPLElBQUksQ0FBQyxLQUFLO1lBQ2xCLENBQUM7aUJBVEQsVUFBZ0IsSUFBYTtnQkFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFjLElBQUssb0JBQW9CLENBQUMsUUFBUSxFQUFFO29CQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDO2dCQUMxRTtnQkFDQSxJQUFJLENBQUMsTUFBSyxFQUFHLElBQUk7WUFDbEIsQ0FBQzs7OztRQU1ELHNCQUFXLDRCQUFLO2lCQUFoQjtnQkFDQyxPQUFPLElBQUksQ0FBQyxNQUFNO1lBQ25CLENBQUM7aUJBRUQsVUFBaUIsS0FBYztnQkFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFjLElBQUssb0JBQW9CLENBQUMsUUFBUSxFQUFFO29CQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDO2dCQUN4RTtnQkFDQSxJQUFJLENBQUMsT0FBTSxFQUFHLEtBQUs7WUFDcEIsQ0FBQzs7OztRQUVNLDRCQUFPLEVBQWQsVUFBZSxHQUF3QjtZQUF2QztZQUFlLG9DQUF3QjtZQUN0QyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWMsSUFBSyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7Z0JBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUM7WUFDckU7WUFDQSxJQUFJLENBQUMsT0FBTSxFQUFHLEtBQUs7WUFDbkIsSUFBTSxhQUFZLEVBQUcsSUFBSSxDQUFDLElBQUk7WUFFOUI7WUFDQSxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUixLQUFJLENBQUMsTUFBSyxFQUFHLFlBQVk7Z0JBQzFCO2FBQ0EsQ0FBQztZQUVGLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ1o7Z0JBQ0EsSUFBSSxFQUFFLEdBQUcsQ0FBQyxzQkFBc0IsRUFBUztnQkFDekMsSUFBSSxFQUFFLFVBQVUsQ0FBQzthQUNqQixDQUFDO1FBQ0gsQ0FBQztRQUVNLGdDQUFXLEVBQWxCLFVBQW1CLFFBQWlCO1lBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO1FBQy9CLENBQUM7UUFFTSxrQ0FBYSxFQUFwQixVQUFxQixVQUE4QjtZQUNsRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ25DLENBQUM7UUFFTSxzQ0FBaUIsRUFBeEIsVUFBeUIsVUFBOEI7WUFDdEQsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBb0IsR0FBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUSxJQUFLLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0JBQzVGLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFO29CQUN2QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDN0M7WUFDRDtZQUNBLElBQUksQ0FBQyxxQkFBb0IsRUFBRyxhQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQztZQUNsRCxpQkFBTSxxQkFBcUIsWUFBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxTQUFRLENBQUUsQ0FBQztZQUM5RSxpQkFBTSxpQkFBaUIsWUFBQyxVQUFVLENBQUM7UUFDcEMsQ0FBQztRQUVNLDJCQUFNLEVBQWI7WUFDQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWMsSUFBSyxvQkFBb0IsQ0FBQyxTQUFRLEdBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUMvRSxNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDO1lBQzFGO1lBQ0EsT0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFhLENBQUMsU0FBUztRQUNyRSxDQUFDO1FBR00sZ0NBQVcsRUFBbEIsVUFBbUIsTUFBYTtZQUMvQixJQUFJLEtBQUksRUFBRyxNQUFNO1lBQ2pCLEdBQUcsQ0FBQyxPQUFPLE9BQU0sSUFBSyxTQUFRLEdBQUksT0FBTSxJQUFLLEtBQUksR0FBSSxPQUFNLElBQUssU0FBUyxFQUFFO2dCQUMxRSxLQUFJLEVBQUcsS0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQjtZQUVBLE9BQU8sSUFBSTtRQUNaLENBQUM7UUFFTSw0QkFBTyxFQUFkO1lBQ0MsaUJBQU0sT0FBTyxXQUFFO1FBQ2hCLENBQUM7UUFFTyw0QkFBTyxFQUFmLFVBQWdCLEVBQTZCO1lBQTdDO2dCQUFrQixjQUFJLEVBQUUsY0FBSTtZQUMzQixHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNULElBQUksQ0FBQyxLQUFJLEVBQUcsSUFBSTtZQUNqQjtZQUVBLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN2QixPQUFPLElBQUksQ0FBQyxhQUFhO1lBQzFCO1lBRUEsSUFBSSxDQUFDLGVBQWMsRUFBRyxvQkFBb0IsQ0FBQyxRQUFRO1lBRW5ELElBQU0sT0FBTSxFQUFHO2dCQUNkLE9BQU8sRUFBRTtvQkFDUixHQUFHLENBQUMsS0FBSSxDQUFDLGVBQWMsSUFBSyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7d0JBQzFELEtBQUksQ0FBQyxZQUFXLEVBQUcsU0FBUzt3QkFDNUIsS0FBSSxDQUFDLGVBQWMsRUFBRyxvQkFBb0IsQ0FBQyxRQUFRO29CQUNwRDtnQkFDRDthQUNBO1lBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDaEIsSUFBSSxDQUFDLGNBQWEsRUFBRyxNQUFNO1lBRTNCLElBQUksQ0FBQyxtQkFBa0IsdUJBQVEsSUFBSSxDQUFDLGtCQUFrQixFQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU0sQ0FBRSxDQUFFO1lBRW5GLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2IsS0FBSyxVQUFVLENBQUMsTUFBTTtvQkFDckIsSUFBSSxDQUFDLFlBQVcsRUFBRyxVQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztvQkFDdkUsS0FBSztnQkFDTixLQUFLLFVBQVUsQ0FBQyxLQUFLO29CQUNwQixJQUFJLENBQUMsWUFBVyxFQUFHLFVBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDO29CQUN0RSxLQUFLO1lBQ1A7WUFFQSxPQUFPLElBQUksQ0FBQyxhQUFhO1FBQzFCLENBQUM7UUFoREQ7WUFEQyx5QkFBVyxFQUFFOzs7O29EQVFiO1FBMENGLGdCQUFDO0tBL0pELENBQWlDLElBQUk7SUFpS3JDLE9BQU8sU0FBUztBQUNqQjtBQW5LQTtBQXFLQSxrQkFBZSxjQUFjOzs7Ozs7Ozs7Ozs7QUNqUjdCO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUF5QkEsSUFBTSxVQUFTLEVBQUcsT0FBTztBQUVaLDJCQUFrQixFQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFXakQ7OztBQUdBLGVBQXNCLEtBQVM7SUFDOUIsT0FBTyxpQ0FBZSxDQUFDLFVBQUMsTUFBTTtRQUM3QixNQUFNLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQztJQUMvQyxDQUFDLENBQUM7QUFDSDtBQUpBO0FBTUE7Ozs7OztBQU1BLGtDQUFrQyxPQUFxQjtJQUN0RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQ3BCLFVBQUMsaUJBQWlCLEVBQUUsU0FBUztRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEdBQVc7WUFDMUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUcsR0FBRztRQUN4QyxDQUFDLENBQUM7UUFDRixPQUFPLGlCQUFpQjtJQUN6QixDQUFDLEVBQ1csRUFBRSxDQUNkO0FBQ0Y7QUFFQTs7Ozs7Ozs7OztBQVVBLCtCQUFzQyxLQUFVLEVBQUUsYUFBdUI7SUFDeEUsSUFBTSxjQUFhLEVBQUcsSUFBSSxtQkFBUSxDQUFDLEtBQUssQ0FBQztJQUN6QyxhQUFhLENBQUMsY0FBYyxDQUFDLDBCQUFrQixFQUFFLFVBQUMsV0FBVztRQUM1RCxhQUFhLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQztRQUN6QyxPQUFPLGNBQU0sb0JBQWEsQ0FBQyxHQUFHLEVBQUUsRUFBbkIsQ0FBbUI7SUFDakMsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxhQUFhO0FBQ3JCO0FBUEE7QUFTQTs7O0FBSUEscUJBQ0MsSUFBTztJQVdQO1FBQThCO1FBVDlCO1lBQUE7WUFpQkM7OztZQUdRLCtCQUF3QixFQUFhLEVBQUU7WUFPL0M7OztZQUdRLDBCQUFtQixFQUFHLElBQUk7WUFFbEM7OztZQUdRLGFBQU0sRUFBZSxFQUFFOztRQWtFaEM7UUE5RFEsdUJBQUssRUFBWixVQUFhLE9BQWtEO1lBQS9EO1lBQ0MsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQ2hDO1lBQ0EsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzNCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFDLFNBQVMsSUFBSyxZQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUE5QixDQUE4QixDQUFDO1lBQ2xFO1lBQ0EsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUNwQyxDQUFDO1FBRUQ7OztRQUtVLHFDQUFtQixFQUE3QjtZQUNDLElBQUksQ0FBQyxvQkFBbUIsRUFBRyxJQUFJO1FBQ2hDLENBQUM7UUFFTyxnQ0FBYyxFQUF0QixVQUF1QixTQUE2QjtZQUNuRCxHQUFHLENBQUMsVUFBUyxJQUFLLFVBQVMsR0FBSSxVQUFTLElBQUssSUFBSSxFQUFFO2dCQUNsRCxPQUFPLFNBQVM7WUFDakI7WUFFQSxJQUFNLGFBQVksRUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQVksR0FBSyxFQUFVO1lBQ2hFLElBQU0sZUFBYyxFQUFHLElBQUksQ0FBQyw4QkFBK0IsQ0FBQyxTQUFTLENBQUM7WUFDdEUsSUFBSSxpQkFBZ0IsRUFBYSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRTtnQkFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBZ0IsVUFBUyx3QkFBc0IsQ0FBQztnQkFDN0QsT0FBTyxJQUFJO1lBQ1o7WUFFQSxHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNqQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BEO1lBRUEsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ2hDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ25EO1lBQUUsS0FBSztnQkFDTixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xFO1lBQ0EsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2xDLENBQUM7UUFFTywwQ0FBd0IsRUFBaEM7WUFBQTtZQUNTLDhCQUFVLEVBQVYsK0JBQVU7WUFDbEIsSUFBTSxXQUFVLEVBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztZQUN4RCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxxQkFBb0IsRUFBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQUMsY0FBYyxFQUFFLFNBQVM7b0JBQ3ZFLElBQVEsY0FBVyxFQUFYLG1CQUFnQixFQUFFLDRFQUF3QjtvQkFDbEQsS0FBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ3ZDLE9BQU0scUJBQU0sY0FBYyxFQUFLLE9BQU87Z0JBQ3ZDLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ04sSUFBSSxDQUFDLCtCQUE4QixFQUFHLHdCQUF3QixDQUFDLFVBQVUsQ0FBQztZQUMzRTtZQUVBLElBQUksQ0FBQyxPQUFNLEVBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxVQUFDLFNBQVMsRUFBRSxRQUFRO2dCQUN0RSxPQUFNLHFCQUFNLFNBQVMsRUFBSyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQzFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFFTixJQUFJLENBQUMsb0JBQW1CLEVBQUcsS0FBSztRQUNqQyxDQUFDO1FBOUNEO1lBRkMsMkJBQVksQ0FBQyxPQUFPLEVBQUUsY0FBTyxDQUFDO1lBQzlCLDJCQUFZLENBQUMsY0FBYyxFQUFFLGNBQU8sQ0FBQzs7Ozt5REFHckM7UUEvQ2EsT0FBTTtZQVRwQixlQUFNLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLDBCQUFrQjtnQkFDeEIsYUFBYSxFQUFFLFVBQUMsS0FBWSxFQUFFLFVBQTRCO29CQUN6RCxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO3dCQUN0QixPQUFPLEVBQUUsS0FBSyxTQUFFO29CQUNqQjtvQkFDQSxPQUFPLEVBQUU7Z0JBQ1Y7YUFDQTtXQUNjLE1BQU0sQ0E0RnBCO1FBQUQsYUFBQztLQTVGRCxDQUE4QixJQUFJO0lBOEZsQyxPQUFPLE1BQU07QUFDZDtBQTNHQTtBQTZHQSxrQkFBZSxXQUFXOzs7Ozs7Ozs7Ozs7QUM1TTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBWSxzQkFJWDtBQUpELFdBQVksc0JBQXNCO0lBQ2pDLHVDQUFhO0lBQ2IsdUNBQWE7SUFDYix1Q0FBYTtBQUNkLENBQUMsRUFKVyx1QkFBc0IsRUFBdEIsK0JBQXNCLElBQXRCLCtCQUFzQjtBQU1sQyw0QkFBbUMsT0FBb0I7SUFFdEQ7UUFBaUM7UUFBakM7O1FBbUJBO1FBbEJXLG9DQUFNLEVBQWhCO1lBQUE7WUFDQyxJQUFNLFdBQVUsRUFBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQ3JELFVBQUMsS0FBSyxFQUFFLEdBQVc7Z0JBQ2xCLElBQU0sTUFBSyxFQUFHLEtBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO2dCQUNsQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUMsSUFBSyxDQUFDLEVBQUU7b0JBQzVCLElBQUcsRUFBRyxPQUFLLEdBQUs7Z0JBQ2pCO2dCQUNBLEtBQUssQ0FBQyxHQUFHLEVBQUMsRUFBRyxLQUFLO2dCQUNsQixPQUFPLEtBQUs7WUFDYixDQUFDLEVBQ0QsRUFBUyxDQUNUO1lBQ0QsT0FBTyxPQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQUssQ0FBRSxDQUFDO1FBQ2xFLENBQUM7UUFFRCxzQkFBVyw2QkFBTztpQkFBbEI7Z0JBQ0MsT0FBTyxPQUFPO1lBQ2YsQ0FBQzs7OztRQWxCSSxtQkFBa0I7WUFEdkIsMkJBQVk7V0FDUCxrQkFBa0IsQ0FtQnZCO1FBQUQseUJBQUM7S0FuQkQsQ0FBaUMsdUJBQVU7SUFxQjNDLE9BQU8sa0JBQWtCO0FBQzFCO0FBeEJBO0FBMEJBLGdCQUF1QixVQUFlLEVBQUUsaUJBQXNCO0lBQ3JELHNDQUFVLEVBQUUsZ0NBQVMsRUFBRSw0Q0FBZTtJQUM5QyxJQUFNLGFBQVksRUFBUSxFQUFFO0lBRTVCLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBQyxZQUFvQjtRQUN2QyxJQUFNLGNBQWEsRUFBRyxZQUFZLENBQUMsV0FBVyxFQUFFO1FBQ2hELFlBQVksQ0FBQyxhQUFhLEVBQUMsRUFBRyxZQUFZO0lBQzNDLENBQUMsQ0FBQztJQUVGLE9BQU07UUFBZTtRQUFkO1lBQUE7WUFFRSxrQkFBVyxFQUFRLEVBQUU7WUFDckIsZ0JBQVMsRUFBVSxFQUFFO1lBQ3JCLHVCQUFnQixFQUFRLEVBQUU7WUFDMUIsbUJBQVksRUFBRyxLQUFLOztRQXdMN0I7UUF0TFEsb0NBQWlCLEVBQXhCO1lBQUE7WUFDQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDdEIsTUFBTTtZQUNQO1lBRUEsSUFBTSxjQUFhLEVBQVEsRUFBRTtZQUNyQixzQ0FBVSxFQUFFLGtDQUFVLEVBQUUsMEJBQU07WUFFdEMsSUFBSSxDQUFDLFlBQVcsdUJBQVEsSUFBSSxDQUFDLFdBQVcsRUFBSyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUU7WUFFdkYsaUJBQUksVUFBVSxFQUFLLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBQyxZQUFvQjtnQkFDM0QsSUFBTSxNQUFLLEVBQUksS0FBWSxDQUFDLFlBQVksQ0FBQztnQkFDekMsSUFBTSxxQkFBb0IsRUFBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7Z0JBQzlELEdBQUcsQ0FBQyxNQUFLLElBQUssU0FBUyxFQUFFO29CQUN4QixLQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBQyxFQUFHLEtBQUs7Z0JBQ3ZDO2dCQUVBLEdBQUcsQ0FBQyxxQkFBb0IsSUFBSyxZQUFZLEVBQUU7b0JBQzFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBQyxFQUFHO3dCQUNyQyxHQUFHLEVBQUUsY0FBTSxZQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUEvQixDQUErQjt3QkFDMUMsR0FBRyxFQUFFLFVBQUMsS0FBVSxJQUFLLFlBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUF0QztxQkFDckI7Z0JBQ0Y7Z0JBRUEsYUFBYSxDQUFDLFlBQVksRUFBQyxFQUFHO29CQUM3QixHQUFHLEVBQUUsY0FBTSxZQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUEvQixDQUErQjtvQkFDMUMsR0FBRyxFQUFFLFVBQUMsS0FBVSxJQUFLLFlBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUF0QztpQkFDckI7WUFDRixDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsWUFBb0I7Z0JBQ25DLElBQU0sVUFBUyxFQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRTtnQkFDL0QsSUFBTSxxQkFBb0IsRUFBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7Z0JBRWhFLGFBQWEsQ0FBQyxvQkFBb0IsRUFBQyxFQUFHO29CQUNyQyxHQUFHLEVBQUUsY0FBTSxZQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLEVBQXBDLENBQW9DO29CQUMvQyxHQUFHLEVBQUUsVUFBQyxLQUFVLElBQUssWUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBM0M7aUJBQ3JCO2dCQUVELEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUMsRUFBRyxTQUFTO2dCQUMvQyxLQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBQyxFQUFHO29CQUFDO3lCQUFBLFVBQWMsRUFBZCxxQkFBYyxFQUFkLElBQWM7d0JBQWQ7O29CQUNqQyxJQUFNLGNBQWEsRUFBRyxLQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDO29CQUMxRCxHQUFHLENBQUMsT0FBTyxjQUFhLElBQUssVUFBVSxFQUFFO3dCQUN4QyxhQUFhLGdDQUFJLElBQUk7b0JBQ3RCO29CQUNBLEtBQUksQ0FBQyxhQUFhLENBQ2pCLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRTt3QkFDMUIsT0FBTyxFQUFFLEtBQUs7d0JBQ2QsTUFBTSxFQUFFO3FCQUNSLENBQUMsQ0FDRjtnQkFDRixDQUFDO1lBQ0YsQ0FBQyxDQUFDO1lBRUYsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7WUFFNUMsSUFBTSxTQUFRLEVBQUcsVUFBUyxJQUFLLHNCQUFzQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBRTVGLFlBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxTQUFlO2dCQUN0QyxHQUFHLENBQUMsVUFBUyxJQUFLLHNCQUFzQixDQUFDLElBQUksRUFBRTtvQkFDOUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLGNBQU0sWUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFkLENBQWMsQ0FBQztvQkFDbEUsU0FBUyxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLGNBQU0sWUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFkLENBQWMsQ0FBQztvQkFDckUsS0FBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBd0IsQ0FBQyxDQUFDO2dCQUNsRTtnQkFBRSxLQUFLO29CQUNOLEtBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUF3QixFQUFFLFFBQVEsRUFBRSxNQUFLLENBQUUsQ0FBQyxDQUFDO2dCQUM5RTtZQUNELENBQUMsQ0FBQztZQUVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxVQUFDLENBQU0sSUFBSyxZQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUF2QixDQUF1QixDQUFDO1lBRS9FLElBQU0saUJBQWdCLEVBQUcsSUFBSSxDQUFDLFdBQVc7WUFDekMsSUFBTSxlQUFjLEVBQUcsY0FBTSxZQUFJLENBQUMsWUFBWSxFQUFFLEVBQW5CLENBQW1CO1lBQ2hELElBQU0sUUFBTztnQkFBaUI7Z0JBQWQ7O2dCQUloQjtnQkFIQyx5QkFBTSxFQUFOO29CQUNDLE9BQU8sS0FBQyxDQUFDLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxDQUFDO2dCQUNoRSxDQUFDO2dCQUNGLGNBQUM7WUFBRCxDQUpnQixDQUFjLHVCQUFVLEVBSXZDO1lBQ0QsSUFBTSxTQUFRLEVBQUcsZUFBZSxFQUFFO1lBQ2xDLElBQU0sYUFBWSxFQUFHLDhCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLENBQUM7WUFDdEUsZ0JBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFNLG1CQUFZLENBQUMsR0FBRyxDQUFDLEtBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFsQyxDQUFrQyxDQUFDO1lBQ25GLElBQU0sVUFBUyxFQUFHLDBCQUFjLENBQUMsT0FBTyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxXQUFVLEVBQUcsSUFBSSxTQUFTLEVBQUU7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLFlBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFFNUIsSUFBSSxDQUFDLGFBQVksRUFBRyxJQUFJO1lBQ3hCLElBQUksQ0FBQyxhQUFhLENBQ2pCLElBQUksV0FBVyxDQUFDLG1CQUFtQixFQUFFO2dCQUNwQyxPQUFPLEVBQUUsSUFBSTtnQkFDYixNQUFNLEVBQUU7YUFDUixDQUFDLENBQ0Y7UUFDRixDQUFDO1FBRU8sNEJBQVMsRUFBakI7WUFDQyxHQUFHLENBQUMsaUJBQU0sR0FBSSxnQkFBTSxDQUFDLE9BQU0sR0FBSSxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7Z0JBQ25ELE9BQU8sZ0JBQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqRDtRQUNELENBQUM7UUFFTyxrQ0FBZSxFQUF2QixVQUF3QixDQUFNO1lBQTlCO1lBQ0MsSUFBTSxLQUFJLEVBQUcsQ0FBQyxDQUFDLE1BQU07WUFDckIsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFVLElBQUssSUFBSSxFQUFFO2dCQUM3QixJQUFNLE9BQU0sRUFBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFDLEtBQUssSUFBSyxZQUFLLENBQUMsUUFBTyxJQUFLLElBQUksRUFBdEIsQ0FBc0IsQ0FBQztnQkFDckUsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFO29CQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFNLFlBQUksQ0FBQyxPQUFPLEVBQUUsRUFBZCxDQUFjLENBQUM7b0JBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM3QyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNmO1lBQ0Q7UUFDRCxDQUFDO1FBRU8sMEJBQU8sRUFBZjtZQUNDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FDakIsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ2pDLE9BQU8sRUFBRSxLQUFLO29CQUNkLE1BQU0sRUFBRTtpQkFDUixDQUFDLENBQ0Y7WUFDRjtRQUNELENBQUM7UUFFTSxpQ0FBYyxFQUFyQjtZQUNDLE9BQU0scUJBQU0sSUFBSSxDQUFDLFdBQVcsRUFBSyxJQUFJLENBQUMsZ0JBQWdCO1FBQ3ZELENBQUM7UUFFTSwrQkFBWSxFQUFuQjtZQUNDLEdBQUcsQ0FBQyxVQUFTLElBQUssc0JBQXNCLENBQUMsSUFBSSxFQUFFO2dCQUM5QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQUMsS0FBSyxJQUFLLFlBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUF0QixDQUFzQixDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUMsS0FBVTtvQkFDdEUsMkJBQU87b0JBQ2YsT0FBTyxLQUFDLENBQUMsS0FBSyx1QkFBTyxPQUFPLENBQUMsY0FBYyxFQUFFLG9CQUFRLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDOUUsQ0FBQyxDQUFDO1lBQ0g7WUFBRSxLQUFLO2dCQUNOLE9BQU8sSUFBSSxDQUFDLFNBQVM7WUFDdEI7UUFDRCxDQUFDO1FBRU0sMkNBQXdCLEVBQS9CLFVBQWdDLElBQVksRUFBRSxRQUF1QixFQUFFLEtBQW9CO1lBQzFGLElBQU0sYUFBWSxFQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO1FBQ3ZDLENBQUM7UUFFTyxvQ0FBaUIsRUFBekIsVUFBMEIsWUFBb0IsRUFBRSxLQUFVO1lBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUMsRUFBRyxLQUFLO1FBQzVDLENBQUM7UUFFTyxvQ0FBaUIsRUFBekIsVUFBMEIsWUFBb0I7WUFDN0MsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDO1FBQzNDLENBQUM7UUFFTywrQkFBWSxFQUFwQixVQUFxQixZQUFvQixFQUFFLEtBQVU7WUFDcEQsR0FBRyxDQUFDLE9BQU8sTUFBSyxJQUFLLFVBQVUsRUFBRTtnQkFDaEMsS0FBSyxDQUFDLG1CQUFNLEVBQUMsRUFBRyxJQUFJO1lBQ3JCO1lBQ0EsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUMsRUFBRyxLQUFLO1lBQ3RDLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDZixDQUFDO1FBRU8sK0JBQVksRUFBcEIsVUFBcUIsWUFBb0I7WUFDeEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztRQUN0QyxDQUFDO1FBRU8sMENBQXVCLEVBQS9CLFVBQWdDLFVBQW9CO1lBQXBEO1lBQ0MsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQUMsVUFBZSxFQUFFLFlBQW9CO2dCQUM5RCxJQUFNLGNBQWEsRUFBRyxZQUFZLENBQUMsV0FBVyxFQUFFO2dCQUNoRCxJQUFNLE1BQUssRUFBRyxLQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztnQkFDOUMsR0FBRyxDQUFDLE1BQUssSUFBSyxJQUFJLEVBQUU7b0JBQ25CLFVBQVUsQ0FBQyxZQUFZLEVBQUMsRUFBRyxLQUFLO2dCQUNqQztnQkFDQSxPQUFPLFVBQVU7WUFDbEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNQLENBQUM7UUFFRCxzQkFBVyw2QkFBa0I7aUJBQTdCO2dCQUNDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDakMsQ0FBQzs7OztRQUVELHNCQUFXLDZCQUFRO2lCQUFuQjtnQkFDQyxPQUFPLElBQUk7WUFDWixDQUFDOzs7O1FBQ0YsY0FBQztJQUFELENBN0xPLENBQWMsV0FBVztBQThMakM7QUF2TUE7QUF5TUEsa0JBQXlCLGlCQUFzQjtJQUM5QyxJQUFNLFdBQVUsRUFBRyxpQkFBaUIsQ0FBQyxVQUFTLEdBQUksaUJBQWlCLENBQUMsU0FBUyxDQUFDLHlCQUF5QjtJQUV2RyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUU7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FDZCx1R0FBdUcsQ0FDdkc7SUFDRjtJQUVBLGdCQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUN4RjtBQVZBO0FBWUEsa0JBQWUsUUFBUTs7Ozs7Ozs7Ozs7O0FDN1B2QjtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBSUEsSUFBTSxhQUFZLEVBQUcsb0JBQW9CO0FBQ3pDLElBQU0sY0FBYSxFQUFHLGFBQVksRUFBRyxVQUFVO0FBQy9DLElBQU0sZ0JBQWUsRUFBRyxhQUFZLEVBQUcsWUFBWTtBQUVuRCxJQUFNLFdBQVUsRUFBc0MsRUFBRTtBQStFM0MsMEJBQWlCLEVBQUcsSUFBSSxpQkFBTyxFQUFtQjtBQUUvRCxJQUFNLFlBQVcsRUFBRyxJQUFJLGlCQUFPLEVBQStDO0FBQzlFLElBQU0sa0JBQWlCLEVBQUcsSUFBSSxpQkFBTyxFQUE4QztBQUVuRixjQUFjLE1BQXFCLEVBQUUsTUFBcUI7SUFDekQsR0FBRyxDQUFDLFdBQU8sQ0FBQyxNQUFNLEVBQUMsR0FBSSxXQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDdkMsR0FBRyxDQUFDLGNBQVUsQ0FBQyxNQUFNLEVBQUMsR0FBSSxjQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDN0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFPLElBQUssTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsT0FBTyxLQUFLO1lBQ2I7UUFDRDtRQUNBLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBRyxJQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDOUIsT0FBTyxLQUFLO1FBQ2I7UUFDQSxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFHLElBQUssTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDcEQsT0FBTyxLQUFLO1FBQ2I7UUFDQSxPQUFPLElBQUk7SUFDWjtJQUFFLEtBQUssR0FBRyxDQUFDLFdBQU8sQ0FBQyxNQUFNLEVBQUMsR0FBSSxXQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDOUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFRLElBQUssVUFBUyxHQUFJLE9BQU8sTUFBTSxDQUFDLGtCQUFpQixJQUFLLFFBQVEsRUFBRTtZQUNsRixPQUFPLEtBQUs7UUFDYjtRQUNBLEdBQUcsQ0FBQyxNQUFNLENBQUMsa0JBQWlCLElBQUssTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQzFELE9BQU8sS0FBSztRQUNiO1FBQ0EsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBRyxJQUFLLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3BELE9BQU8sS0FBSztRQUNiO1FBQ0EsT0FBTyxJQUFJO0lBQ1o7SUFDQSxPQUFPLEtBQUs7QUFDYjtBQUVBLElBQU0sa0JBQWlCLEVBQUc7SUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQztBQUMxRixDQUFDO0FBRUQsOEJBQ0MsZ0JBQTRDLEVBQzVDLGlCQUE2QztJQUU3QyxJQUFNLFNBQVEsRUFBK0I7UUFDNUMsU0FBUyxFQUFFLFNBQVM7UUFDcEIsWUFBWSxFQUFFLFVBQVMsT0FBb0IsRUFBRSxTQUFpQixFQUFFLEtBQWE7WUFDM0UsT0FBTyxDQUFDLEtBQWEsQ0FBQyxTQUFTLEVBQUMsRUFBRyxLQUFLO1FBQzFDLENBQUM7UUFDRCxXQUFXLEVBQUU7WUFDWixLQUFLLEVBQUUsaUJBQWlCO1lBQ3hCLElBQUksRUFBRTtTQUNOO1FBQ0QsS0FBSyxFQUFFLENBQUM7UUFDUixLQUFLLEVBQUUsS0FBSztRQUNaLElBQUksRUFBRSxLQUFLO1FBQ1gsaUJBQWlCO0tBQ2pCO0lBQ0QsT0FBTyxxQkFBSyxRQUFRLEVBQUssZ0JBQWdCLENBQXVCO0FBQ2pFO0FBRUEseUJBQXlCLFVBQWtCO0lBQzFDLEdBQUcsQ0FBQyxPQUFPLFdBQVUsSUFBSyxRQUFRLEVBQUU7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQztJQUNoRDtBQUNEO0FBRUEscUJBQ0MsT0FBYSxFQUNiLFNBQWlCLEVBQ2pCLFlBQXNCLEVBQ3RCLGlCQUFvQyxFQUNwQyxJQUFTLEVBQ1QsYUFBd0I7SUFFeEIsSUFBTSxlQUFjLEVBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFFO0lBQ2xGLElBQU0sU0FBUSxFQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBQyxHQUFJLElBQUksaUJBQU8sRUFBRTtJQUVyRSxHQUFHLENBQUMsYUFBYSxFQUFFO1FBQ2xCLElBQU0sY0FBYSxFQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO0lBQ3REO0lBRUEsSUFBSSxTQUFRLEVBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFFdEMsR0FBRyxDQUFDLFVBQVMsSUFBSyxPQUFPLEVBQUU7UUFDMUIsU0FBUSxFQUFHLFVBQW9CLEdBQVU7WUFDeEMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxNQUFjLENBQUMsZUFBZSxFQUFDLEVBQUksR0FBRyxDQUFDLE1BQTJCLENBQUMsS0FBSztRQUM5RSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNiO0lBRUEsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7SUFDN0MsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDO0lBQ3BDLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7QUFDOUM7QUFFQSxvQkFBb0IsT0FBZ0IsRUFBRSxPQUEyQjtJQUNoRSxHQUFHLENBQUMsT0FBTyxFQUFFO1FBQ1osSUFBTSxXQUFVLEVBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksRUFBQyxFQUFHLENBQUMsRUFBRSxFQUFDLEVBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckM7SUFDRDtBQUNEO0FBRUEsdUJBQXVCLE9BQWdCLEVBQUUsT0FBMkI7SUFDbkUsR0FBRyxDQUFDLE9BQU8sRUFBRTtRQUNaLElBQU0sV0FBVSxFQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsRUFBQyxFQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDO0lBQ0Q7QUFDRDtBQUVBLGlDQUFpQyxPQUFZLEVBQUUsUUFBdUIsRUFBRSxPQUFzQjtJQUNyRiwrQkFBUSxFQUFFLCtCQUFVLEVBQUUsK0JBQVU7SUFDeEMsR0FBRyxDQUFDLENBQUMsU0FBUSxHQUFJLFNBQVEsSUFBSyxNQUFNLEVBQUU7UUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTSxDQUFFO0lBQ3JHO0lBQUUsS0FBSyxHQUFHLENBQUMsU0FBUSxJQUFLLE1BQU0sRUFBRTtRQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTSxDQUFFO0lBQ3JHO0lBQ0EsSUFBSSxjQUFhLEVBQVE7UUFDeEIsVUFBVSxFQUFFO0tBQ1o7SUFDRCxHQUFHLENBQUMsVUFBVSxFQUFFO1FBQ2YsYUFBYSxDQUFDLFdBQVUsRUFBRyxFQUFFO1FBQzdCLGFBQWEsQ0FBQyxPQUFNLEVBQUcsUUFBUSxDQUFDLE1BQU07UUFDdEMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxRQUFRO1lBQ3hDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFDLEVBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUN2RCxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFDLFFBQVE7WUFDeEMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUMsRUFBRyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUNwRSxDQUFDLENBQUM7UUFDRixPQUFPLGFBQWE7SUFDckI7SUFDQSxhQUFhLENBQUMsV0FBVSxFQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUN4RCxVQUFDLEtBQUssRUFBRSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBQyxFQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFDLEdBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNyRSxPQUFPLEtBQUs7SUFDYixDQUFDLEVBQ0QsRUFBUyxDQUNUO0lBQ0QsT0FBTyxhQUFhO0FBQ3JCO0FBRUEsbUJBQW1CLFNBQWMsRUFBRSxhQUFrQixFQUFFLE9BQWdCLEVBQUUsaUJBQW9DO0lBQzVHLElBQUksTUFBTTtJQUNWLEdBQUcsQ0FBQyxPQUFPLFVBQVMsSUFBSyxVQUFVLEVBQUU7UUFDcEMsT0FBTSxFQUFHLFNBQVMsRUFBRTtJQUNyQjtJQUFFLEtBQUs7UUFDTixPQUFNLEVBQUcsVUFBUyxHQUFJLENBQUMsYUFBYTtJQUNyQztJQUNBLEdBQUcsQ0FBQyxPQUFNLElBQUssSUFBSSxFQUFFO1FBQ3BCLElBQU0sZUFBYyxFQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBRTtRQUNsRixjQUFjLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDO1lBQzFDLE9BQXVCLENBQUMsS0FBSyxFQUFFO1FBQ2pDLENBQUMsQ0FBQztJQUNIO0FBQ0Q7QUFFQSw4QkFDQyxPQUFnQixFQUNoQixrQkFBbUMsRUFDbkMsVUFBMkIsRUFDM0IsaUJBQW9DLEVBQ3BDLFVBQTJCO0lBQTNCLCtDQUEyQjtJQUUzQixJQUFNLGVBQWMsRUFBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUU7SUFDbEYsSUFBTSxTQUFRLEVBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxRQUFRLEVBQUU7UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsUUFBUTtZQUNoRCxJQUFNLFFBQU8sRUFBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSyxLQUFJLEdBQUksVUFBVTtZQUM1RCxJQUFNLFVBQVMsRUFBRyxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzVELEdBQUcsQ0FBQyxRQUFPLEdBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3JDLElBQU0sY0FBYSxFQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2hFLEdBQUcsQ0FBQyxhQUFhLEVBQUU7b0JBQ2xCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO2dCQUN0RDtZQUNEO1FBQ0QsQ0FBQyxDQUFDO0lBQ0g7QUFDRDtBQUVBLHlCQUF5QixPQUFnQixFQUFFLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxpQkFBb0M7SUFDbkgsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFVBQVMsSUFBSyxjQUFhLEdBQUksU0FBUSxJQUFLLE1BQU0sRUFBRTtRQUN6RSxPQUFPLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDO0lBQzdEO0lBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFRLElBQUssT0FBTSxHQUFJLFVBQVMsSUFBSyxFQUFFLEVBQUMsR0FBSSxVQUFTLElBQUssU0FBUyxFQUFFO1FBQ2hGLE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO0lBQ2xDO0lBQUUsS0FBSztRQUNOLE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztJQUMxQztBQUNEO0FBRUEsMEJBQ0MsT0FBZ0IsRUFDaEIsa0JBQStDLEVBQy9DLFVBQXVDLEVBQ3ZDLGlCQUFvQztJQUVwQyxJQUFNLFVBQVMsRUFBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QyxJQUFNLFVBQVMsRUFBRyxTQUFTLENBQUMsTUFBTTtJQUNsQyxJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUMsRUFBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsSUFBTSxTQUFRLEVBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3QixJQUFNLFVBQVMsRUFBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ3RDLElBQU0sa0JBQWlCLEVBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDO1FBQ3RELEdBQUcsQ0FBQyxVQUFTLElBQUssaUJBQWlCLEVBQUU7WUFDcEMsZUFBZSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixDQUFDO1FBQ2pFO0lBQ0Q7QUFDRDtBQUVBLDBCQUNDLE9BQWdCLEVBQ2hCLGtCQUFtQyxFQUNuQyxVQUEyQixFQUMzQixpQkFBb0MsRUFDcEMsMkJBQWtDO0lBQWxDLGdGQUFrQztJQUVsQyxJQUFJLGtCQUFpQixFQUFHLEtBQUs7SUFDN0IsSUFBTSxVQUFTLEVBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekMsSUFBTSxVQUFTLEVBQUcsU0FBUyxDQUFDLE1BQU07SUFDbEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFDLElBQUssQ0FBQyxFQUFDLEdBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFO1FBQ3RFLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsRUFBQyxFQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNELGFBQWEsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3REO1FBQ0Q7UUFBRSxLQUFLO1lBQ04sYUFBYSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFDbkQ7SUFDRDtJQUVBLDRCQUEyQixHQUFJLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLENBQUM7SUFFL0csSUFBSSxDQUFDLElBQUksRUFBQyxFQUFHLENBQUMsRUFBRSxFQUFDLEVBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLElBQU0sU0FBUSxFQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxVQUFTLEVBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxJQUFNLGNBQWEsRUFBRyxrQkFBbUIsQ0FBQyxRQUFRLENBQUM7UUFDbkQsR0FBRyxDQUFDLFNBQVEsSUFBSyxTQUFTLEVBQUU7WUFDM0IsSUFBTSxnQkFBZSxFQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3RGLElBQU0sZUFBYyxFQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ3pFLEdBQUcsQ0FBQyxnQkFBZSxHQUFJLGVBQWUsQ0FBQyxPQUFNLEVBQUcsQ0FBQyxFQUFFO2dCQUNsRCxHQUFHLENBQUMsQ0FBQyxVQUFTLEdBQUksU0FBUyxDQUFDLE9BQU0sSUFBSyxDQUFDLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyxJQUFJLElBQUMsRUFBRyxDQUFDLEVBQUUsSUFBQyxFQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsR0FBQyxFQUFFLEVBQUU7d0JBQ2hELGFBQWEsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLEdBQUMsQ0FBQyxDQUFDO29CQUMzQztnQkFDRDtnQkFBRSxLQUFLO29CQUNOLElBQU0sV0FBVSxtQkFBc0MsY0FBYyxDQUFDO29CQUNyRSxJQUFJLENBQUMsSUFBSSxJQUFDLEVBQUcsQ0FBQyxFQUFFLElBQUMsRUFBRyxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUMsRUFBRSxFQUFFO3dCQUNoRCxJQUFNLGtCQUFpQixFQUFHLGVBQWUsQ0FBQyxHQUFDLENBQUM7d0JBQzVDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRTs0QkFDdEIsSUFBTSxXQUFVLEVBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzs0QkFDeEQsR0FBRyxDQUFDLFdBQVUsSUFBSyxDQUFDLENBQUMsRUFBRTtnQ0FDdEIsYUFBYSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQzs0QkFDMUM7NEJBQUUsS0FBSztnQ0FDTixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7NEJBQ2pDO3dCQUNEO29CQUNEO29CQUNBLElBQUksQ0FBQyxJQUFJLElBQUMsRUFBRyxDQUFDLEVBQUUsSUFBQyxFQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBQyxFQUFFLEVBQUU7d0JBQzNDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUMsQ0FBQyxDQUFDO29CQUNuQztnQkFDRDtZQUNEO1lBQUUsS0FBSztnQkFDTixJQUFJLENBQUMsSUFBSSxJQUFDLEVBQUcsQ0FBQyxFQUFFLElBQUMsRUFBRyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUMsRUFBRSxFQUFFO29CQUMvQyxVQUFVLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxHQUFDLENBQUMsQ0FBQztnQkFDdkM7WUFDRDtRQUNEO1FBQUUsS0FBSyxHQUFHLENBQUMsU0FBUSxJQUFLLE9BQU8sRUFBRTtZQUNoQyxTQUFTLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUM7UUFDaEU7UUFBRSxLQUFLLEdBQUcsQ0FBQyxTQUFRLElBQUssUUFBUSxFQUFFO1lBQ2pDLElBQU0sV0FBVSxFQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3pDLElBQU0sV0FBVSxFQUFHLFVBQVUsQ0FBQyxNQUFNO1lBQ3BDLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsRUFBQyxFQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDcEMsSUFBTSxVQUFTLEVBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBTSxjQUFhLEVBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDMUMsSUFBTSxjQUFhLEVBQUcsY0FBYSxHQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUM7Z0JBQy9ELEdBQUcsQ0FBQyxjQUFhLElBQUssYUFBYSxFQUFFO29CQUNwQyxRQUFRO2dCQUNUO2dCQUNBLGtCQUFpQixFQUFHLElBQUk7Z0JBQ3hCLEdBQUcsQ0FBQyxhQUFhLEVBQUU7b0JBQ2xCLGVBQWUsQ0FBQyxhQUFhLENBQUM7b0JBQzlCLGlCQUFpQixDQUFDLFlBQWEsQ0FBQyxPQUFzQixFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUM7Z0JBQ2xGO2dCQUFFLEtBQUs7b0JBQ04saUJBQWlCLENBQUMsWUFBYSxDQUFDLE9BQXNCLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDdkU7WUFDRDtRQUNEO1FBQUUsS0FBSztZQUNOLEdBQUcsQ0FBQyxDQUFDLFVBQVMsR0FBSSxPQUFPLGNBQWEsSUFBSyxRQUFRLEVBQUU7Z0JBQ3BELFVBQVMsRUFBRyxFQUFFO1lBQ2Y7WUFDQSxHQUFHLENBQUMsU0FBUSxJQUFLLE9BQU8sRUFBRTtnQkFDekIsSUFBTSxTQUFRLEVBQUksT0FBZSxDQUFDLFFBQVEsQ0FBQztnQkFDM0MsR0FBRyxDQUNGLFNBQVEsSUFBSyxVQUFTO29CQUN0QixDQUFFLE9BQWUsQ0FBQyxlQUFlO3dCQUNoQyxFQUFFLFNBQVEsSUFBTSxPQUFlLENBQUMsZUFBZTt3QkFDL0MsRUFBRSxVQUFTLElBQUssYUFBYSxDQUMvQixFQUFFO29CQUNBLE9BQWUsQ0FBQyxRQUFRLEVBQUMsRUFBRyxTQUFTO29CQUNyQyxPQUFlLENBQUMsZUFBZSxFQUFDLEVBQUcsU0FBUztnQkFDOUM7Z0JBQ0EsR0FBRyxDQUFDLFVBQVMsSUFBSyxhQUFhLEVBQUU7b0JBQ2hDLGtCQUFpQixFQUFHLElBQUk7Z0JBQ3pCO1lBQ0Q7WUFBRSxLQUFLLEdBQUcsQ0FBQyxTQUFRLElBQUssTUFBSyxHQUFJLFVBQVMsSUFBSyxhQUFhLEVBQUU7Z0JBQzdELElBQU0sS0FBSSxFQUFHLE9BQU8sU0FBUztnQkFDN0IsR0FBRyxDQUFDLEtBQUksSUFBSyxXQUFVLEdBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDLElBQUssRUFBQyxHQUFJLDJCQUEyQixFQUFFO29CQUM5RixXQUFXLENBQ1YsT0FBTyxFQUNQLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ2xCLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxDQUFDLElBQUksRUFDZixhQUFhLENBQ2I7Z0JBQ0Y7Z0JBQUUsS0FBSyxHQUFHLENBQUMsS0FBSSxJQUFLLFNBQVEsR0FBSSxTQUFRLElBQUssWUFBVyxHQUFJLDJCQUEyQixFQUFFO29CQUN4RixlQUFlLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLENBQUM7Z0JBQ2pFO2dCQUFFLEtBQUssR0FBRyxDQUFDLFNBQVEsSUFBSyxhQUFZLEdBQUksU0FBUSxJQUFLLFdBQVcsRUFBRTtvQkFDakUsR0FBRyxDQUFFLE9BQWUsQ0FBQyxRQUFRLEVBQUMsSUFBSyxTQUFTLEVBQUU7d0JBQzVDLE9BQWUsQ0FBQyxRQUFRLEVBQUMsRUFBRyxTQUFTO29CQUN2QztnQkFDRDtnQkFBRSxLQUFLO29CQUNMLE9BQWUsQ0FBQyxRQUFRLEVBQUMsRUFBRyxTQUFTO2dCQUN2QztnQkFDQSxrQkFBaUIsRUFBRyxJQUFJO1lBQ3pCO1FBQ0Q7SUFDRDtJQUNBLE9BQU8saUJBQWlCO0FBQ3pCO0FBRUEsMEJBQTBCLFFBQXlCLEVBQUUsTUFBcUIsRUFBRSxLQUFhO0lBQ3hGLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxLQUFLLEVBQUUsRUFBQyxFQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDOUIsT0FBTyxDQUFDO1FBQ1Q7SUFDRDtJQUNBLE9BQU8sQ0FBQyxDQUFDO0FBQ1Y7QUFFQSx1QkFBOEIsT0FBZ0I7SUFDN0MsT0FBTztRQUNOLEdBQUcsRUFBRSxFQUFFO1FBQ1AsVUFBVSxFQUFFLEVBQUU7UUFDZCxRQUFRLEVBQUUsU0FBUztRQUNuQixPQUFPO1FBQ1AsSUFBSSxFQUFFO0tBQ047QUFDRjtBQVJBO0FBVUEscUJBQTRCLElBQVM7SUFDcEMsT0FBTztRQUNOLEdBQUcsRUFBRSxFQUFFO1FBQ1AsVUFBVSxFQUFFLEVBQUU7UUFDZCxRQUFRLEVBQUUsU0FBUztRQUNuQixJQUFJLEVBQUUsS0FBRyxJQUFNO1FBQ2YsT0FBTyxFQUFFLFNBQVM7UUFDbEIsSUFBSSxFQUFFO0tBQ047QUFDRjtBQVRBO0FBV0EseUJBQXlCLFFBQW9DLEVBQUUsWUFBd0I7SUFDdEYsT0FBTztRQUNOLFFBQVE7UUFDUixRQUFRLEVBQUUsRUFBRTtRQUNaLGNBQWMsRUFBRSxZQUFZLENBQUMsY0FBYztRQUMzQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQWU7UUFDbEMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLFdBQWtCO1FBQzlDLFVBQVUsRUFBRSxZQUFZLENBQUMsZUFBZTtRQUN4QyxJQUFJLEVBQUU7S0FDTjtBQUNGO0FBRUEsbUNBQ0MsUUFBcUMsRUFDckMsUUFBb0M7SUFFcEMsR0FBRyxDQUFDLFNBQVEsSUFBSyxTQUFTLEVBQUU7UUFDM0IsT0FBTyxVQUFVO0lBQ2xCO0lBQ0EsU0FBUSxFQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO0lBRTFELElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsRUFBQyxFQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUk7UUFDdEMsSUFBTSxNQUFLLEVBQUcsUUFBUSxDQUFDLENBQUMsQ0FBa0I7UUFDMUMsR0FBRyxDQUFDLE1BQUssSUFBSyxVQUFTLEdBQUksTUFBSyxJQUFLLElBQUksRUFBRTtZQUMxQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckIsUUFBUTtRQUNUO1FBQUUsS0FBSyxHQUFHLENBQUMsT0FBTyxNQUFLLElBQUssUUFBUSxFQUFFO1lBQ3JDLFFBQVEsQ0FBQyxDQUFDLEVBQUMsRUFBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ2pDO1FBQUUsS0FBSztZQUNOLEdBQUcsQ0FBQyxXQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ25CLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUksSUFBSyxTQUFTLEVBQUU7b0JBQ3ZDLEtBQUssQ0FBQyxVQUFrQixDQUFDLEtBQUksRUFBRyxRQUFRO29CQUN6QyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVEsR0FBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU0sRUFBRyxDQUFDLEVBQUU7d0JBQ2hELHlCQUF5QixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO29CQUNwRDtnQkFDRDtZQUNEO1lBQUUsS0FBSztnQkFDTixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFO29CQUMxQixJQUFNLGFBQVksRUFBRyx5QkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFO29CQUNyRCxLQUFLLENBQUMsZUFBYyxFQUFHO3dCQUN0QixJQUFJLEVBQUUsUUFBUTt3QkFDZCxZQUFZLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQztxQkFDMUM7Z0JBQ0Y7Z0JBQ0EsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFRLEdBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFNLEVBQUcsQ0FBQyxFQUFFO29CQUNoRCx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztnQkFDcEQ7WUFDRDtRQUNEO1FBQ0EsQ0FBQyxFQUFFO0lBQ0o7SUFDQSxPQUFPLFFBQTJCO0FBQ25DO0FBeENBO0FBMENBLG1CQUFtQixLQUFvQixFQUFFLFdBQStCO0lBQ3ZFLEdBQUcsQ0FBQyxXQUFPLENBQUMsS0FBSyxFQUFDLEdBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtRQUN2QyxJQUFNLGVBQWMsRUFBRyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWM7UUFDdEQsR0FBRyxDQUFDLGNBQWMsRUFBRTtZQUNuQixHQUFHLENBQUMsT0FBTyxlQUFjLElBQUssVUFBVSxFQUFFO2dCQUN6QyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQWtCLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMzRDtZQUFFLEtBQUs7Z0JBQ04sV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBa0IsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLGNBQXdCLENBQUM7WUFDeEY7UUFDRDtJQUNEO0FBQ0Q7QUFFQSxzQkFBc0IsS0FBb0IsRUFBRSxXQUErQixFQUFFLGlCQUFvQztJQUNoSCxHQUFHLENBQUMsV0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25CLElBQU0sU0FBUSxFQUFHLEtBQUssQ0FBQyxTQUFRLEdBQUksVUFBVTtRQUM3QyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNuQixJQUFNLGFBQVksRUFBRyx5QkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBRTtZQUMzRCxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNuQztRQUNBLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRyxDQUFDLEVBQUUsRUFBQyxFQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUM7UUFDMUQ7SUFDRDtJQUFFLEtBQUs7UUFDTixJQUFNLFVBQU8sRUFBRyxLQUFLLENBQUMsT0FBTztRQUM3QixJQUFNLFdBQVUsRUFBRyxLQUFLLENBQUMsVUFBVTtRQUNuQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVEsR0FBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU0sRUFBRyxDQUFDLEVBQUU7WUFDaEQsSUFBSSxDQUFDLElBQUksRUFBQyxFQUFHLENBQUMsRUFBRSxFQUFDLEVBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9DLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQztZQUNoRTtRQUNEO1FBQ0EsSUFBTSxjQUFhLEVBQUcsVUFBVSxDQUFDLGFBQWE7UUFDOUMsR0FBRyxDQUFDLFdBQVUsR0FBSSxhQUFhLEVBQUU7WUFDL0IsU0FBdUIsQ0FBQyxLQUFLLENBQUMsY0FBYSxFQUFHLE1BQU07WUFDckQsSUFBTSxjQUFhLEVBQUc7Z0JBQ3JCLFVBQU8sR0FBSSxTQUFPLENBQUMsV0FBVSxHQUFJLFNBQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFNBQU8sQ0FBQztnQkFDeEUsS0FBSyxDQUFDLFFBQU8sRUFBRyxTQUFTO1lBQzFCLENBQUM7WUFDRCxHQUFHLENBQUMsT0FBTyxjQUFhLElBQUssVUFBVSxFQUFFO2dCQUN4QyxhQUFhLENBQUMsU0FBa0IsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDO2dCQUM1RCxNQUFNO1lBQ1A7WUFBRSxLQUFLO2dCQUNOLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQWtCLEVBQUUsVUFBVSxFQUFFLGFBQXVCLEVBQUUsYUFBYSxDQUFDO2dCQUM5RixNQUFNO1lBQ1A7UUFDRDtRQUNBLFVBQU8sR0FBSSxTQUFPLENBQUMsV0FBVSxHQUFJLFNBQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFNBQU8sQ0FBQztRQUN4RSxLQUFLLENBQUMsUUFBTyxFQUFHLFNBQVM7SUFDMUI7QUFDRDtBQUVBLDhCQUNDLFVBQTJCLEVBQzNCLFlBQW9CLEVBQ3BCLGNBQTBDO0lBRTFDLElBQU0sVUFBUyxFQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7SUFDMUMsR0FBRyxDQUFDLFdBQU8sQ0FBQyxTQUFTLEVBQUMsR0FBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDekMsTUFBTSxFQUFFO0lBQ1Q7SUFDUSxrQ0FBRztJQUVYLEdBQUcsQ0FBQyxJQUFHLElBQUssVUFBUyxHQUFJLElBQUcsSUFBSyxJQUFJLEVBQUU7UUFDdEMsSUFBSSxDQUFDLElBQUksRUFBQyxFQUFHLENBQUMsRUFBRSxFQUFDLEVBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQyxHQUFHLENBQUMsRUFBQyxJQUFLLFlBQVksRUFBRTtnQkFDdkIsSUFBTSxLQUFJLEVBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDMUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7b0JBQzFCLElBQUksZUFBYyxRQUFRO29CQUMxQixJQUFNLFdBQVUsRUFBSSxjQUFzQixDQUFDLFdBQVcsQ0FBQyxLQUFJLEdBQUksU0FBUztvQkFDeEUsR0FBRyxDQUFDLFdBQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTt3QkFDdkIsZUFBYyxFQUFJLFNBQVMsQ0FBQyxpQkFBeUIsQ0FBQyxLQUFJLEdBQUksU0FBUztvQkFDeEU7b0JBQUUsS0FBSzt3QkFDTixlQUFjLEVBQUcsU0FBUyxDQUFDLEdBQUc7b0JBQy9CO29CQUVBLE9BQU8sQ0FBQyxJQUFJLENBQ1gsZUFBYSxXQUFVLHVMQUFtTCxlQUFjLGdDQUE4QixDQUN0UDtvQkFDRCxLQUFLO2dCQUNOO1lBQ0Q7UUFDRDtJQUNEO0FBQ0Q7QUFFQSx3QkFDQyxXQUEwQixFQUMxQixXQUE0QixFQUM1QixXQUE0QixFQUM1QixjQUEwQyxFQUMxQyxpQkFBb0M7SUFFcEMsWUFBVyxFQUFHLFlBQVcsR0FBSSxVQUFVO0lBQ3ZDLFlBQVcsRUFBRyxXQUFXO0lBQ3pCLElBQU0sa0JBQWlCLEVBQUcsV0FBVyxDQUFDLE1BQU07SUFDNUMsSUFBTSxrQkFBaUIsRUFBRyxXQUFXLENBQUMsTUFBTTtJQUM1QyxJQUFNLFlBQVcsRUFBRyxpQkFBaUIsQ0FBQyxXQUFZO0lBQ2xELElBQU0sZUFBYyxFQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBRTtJQUNsRixrQkFBaUIsdUJBQVEsaUJBQWlCLElBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLE1BQUssRUFBRyxFQUFDLEVBQUU7SUFDaEYsSUFBSSxTQUFRLEVBQUcsQ0FBQztJQUNoQixJQUFJLFNBQVEsRUFBRyxDQUFDO0lBQ2hCLElBQUksQ0FBUztJQUNiLElBQUksWUFBVyxFQUFHLEtBQUs7O1FBRXRCLElBQUksU0FBUSxFQUFHLFNBQVEsRUFBRyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUztRQUMvRSxJQUFNLFNBQVEsRUFBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQ3RDLEdBQUcsQ0FBQyxXQUFPLENBQUMsUUFBUSxFQUFDLEdBQUksT0FBTyxRQUFRLENBQUMsMkJBQTBCLElBQUssVUFBVSxFQUFFO1lBQ25GLFFBQVEsQ0FBQyxTQUFRLEVBQUcsV0FBTyxDQUFDLFFBQVEsRUFBQyxHQUFJLFFBQVEsQ0FBQyxRQUFRO1lBQzFELHFCQUFxQixDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQztRQUNuRDtRQUNBLEdBQUcsQ0FBQyxTQUFRLElBQUssVUFBUyxHQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDdkQsWUFBVyxFQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUMsR0FBSSxXQUFXO1lBQzFHLFFBQVEsRUFBRTtZQUNWLFFBQVEsRUFBRTs7UUFFWDtRQUVBLElBQU0sYUFBWSxFQUFHLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUSxFQUFHLENBQUMsQ0FBQztRQUMxRSxJQUFNLFNBQVEsRUFBRztZQUNoQixJQUFJLG9CQUFtQixFQUErQixTQUFTO1lBQy9ELElBQUksTUFBSyxFQUFrQixXQUFXLENBQUMsUUFBUSxDQUFDO1lBQ2hELEdBQUcsQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsSUFBSSxVQUFTLEVBQUcsU0FBUSxFQUFHLENBQUM7Z0JBQzVCLElBQUkscUJBQW9CLEVBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xDLE9BQU8sb0JBQW9CLENBQUMsTUFBTSxFQUFFO29CQUNuQyxJQUFNLGFBQVksRUFBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUc7b0JBQ2xELEdBQUcsQ0FBQyxXQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7d0JBQzFCLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFOzRCQUMxQixvQkFBb0IsQ0FBQyxJQUFJLE9BQXpCLG9CQUFvQixtQkFBUyxZQUFZLENBQUMsUUFBUTt3QkFDbkQ7b0JBQ0Q7b0JBQUUsS0FBSzt3QkFDTixHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTs0QkFDekIsb0JBQW1CLEVBQUcsWUFBWSxDQUFDLE9BQU87NEJBQzFDLEtBQUs7d0JBQ047b0JBQ0Q7b0JBQ0EsR0FBRyxDQUFDLG9CQUFvQixDQUFDLE9BQU0sSUFBSyxFQUFDLEdBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUNoRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNqRCxTQUFTLEVBQUU7b0JBQ1o7Z0JBQ0Q7WUFDRDtZQUVBLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsQ0FBQztZQUN4RixTQUFTLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQztZQUNoQyxJQUFNLGFBQVksRUFBRyxRQUFRO1lBQzdCLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDO1lBQ2hFLENBQUMsQ0FBQztRQUNILENBQUM7UUFFRCxHQUFHLENBQUMsQ0FBQyxTQUFRLEdBQUksYUFBWSxJQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3JDLFFBQVEsRUFBRTtZQUNWLFFBQVEsRUFBRTs7UUFFWDtRQUVBLElBQU0sWUFBVyxFQUFHO1lBQ25CLElBQU0sYUFBWSxFQUFHLFFBQVE7WUFDN0IsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztnQkFDeEMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUM7WUFDaEUsQ0FBQyxDQUFDO1lBQ0YsR0FBRyxDQUFDLFdBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDdEIsSUFBTSxLQUFJLEVBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUMvQyxHQUFHLENBQUMsSUFBSSxFQUFFO29CQUNULFNBQVEsRUFBRyxJQUFJLENBQUMsS0FBSztnQkFDdEI7WUFDRDtZQUNBLFlBQVksQ0FBQyxRQUFTLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDO1FBQ3hELENBQUM7UUFDRCxJQUFNLGFBQVksRUFBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVEsRUFBRyxDQUFDLENBQUM7UUFFMUUsR0FBRyxDQUFDLGFBQVksSUFBSyxDQUFDLENBQUMsRUFBRTtZQUN4QixXQUFXLEVBQUU7WUFDYixRQUFRLEVBQUU7O1FBRVg7UUFFQSxRQUFRLEVBQUU7UUFDVixXQUFXLEVBQUU7UUFDYixRQUFRLEVBQUU7UUFDVixRQUFRLEVBQUU7SUFDWCxDQUFDO0lBL0VELE9BQU8sU0FBUSxFQUFHLGlCQUFpQjs7O0lBZ0ZuQyxHQUFHLENBQUMsa0JBQWlCLEVBQUcsUUFBUSxFQUFFOztZQUdoQyxJQUFNLGFBQVksRUFBRyxDQUFDO1lBQ3RCLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDO1lBQ2hFLENBQUMsQ0FBQztZQUNGLElBQUksY0FBYSxFQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDbEMsR0FBRyxDQUFDLFdBQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDM0IsSUFBTSxLQUFJLEVBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO2dCQUNwRCxHQUFHLENBQUMsSUFBSSxFQUFFO29CQUNULGNBQWEsRUFBRyxJQUFJLENBQUMsS0FBSztnQkFDM0I7WUFDRDtZQUNBLFlBQVksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDO1FBQzVELENBQUM7UUFkRDtRQUNBLElBQUksQ0FBQyxFQUFDLEVBQUcsUUFBUSxFQUFFLEVBQUMsRUFBRyxpQkFBaUIsRUFBRSxDQUFDLEVBQUU7OztJQWM5QztJQUNBLE9BQU8sV0FBVztBQUNuQjtBQUVBLHFCQUNDLFdBQTBCLEVBQzFCLFFBQXFDLEVBQ3JDLGlCQUFvQyxFQUNwQyxjQUEwQyxFQUMxQyxZQUFvRCxFQUNwRCxVQUErQjtJQUQvQix1REFBb0Q7SUFHcEQsR0FBRyxDQUFDLFNBQVEsSUFBSyxTQUFTLEVBQUU7UUFDM0IsTUFBTTtJQUNQO0lBRUEsSUFBTSxlQUFjLEVBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFFO0lBQ2xGLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBSyxHQUFJLFdBQVUsSUFBSyxTQUFTLEVBQUU7UUFDckQsV0FBVSxFQUFHLFlBQVMsQ0FBQyxXQUFXLENBQUMsT0FBUSxDQUFDLFVBQVUsQ0FBdUI7SUFDOUU7SUFDQSxJQUFNLFlBQVcsRUFBRyxpQkFBaUIsQ0FBQyxXQUFZO0lBQ2xELGtCQUFpQix1QkFBUSxpQkFBaUIsSUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsTUFBSyxFQUFHLEVBQUMsRUFBRTtJQUVoRixJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUcsQ0FBQyxFQUFFLEVBQUMsRUFBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3pDLElBQU0sTUFBSyxFQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFekIsR0FBRyxDQUFDLFdBQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQixHQUFHLENBQUMsY0FBYyxDQUFDLE1BQUssR0FBSSxVQUFVLEVBQUU7Z0JBQ3ZDLElBQUksV0FBVSxFQUF3QixTQUFTO2dCQUMvQyxPQUFPLEtBQUssQ0FBQyxRQUFPLElBQUssVUFBUyxHQUFJLFVBQVUsQ0FBQyxPQUFNLEVBQUcsQ0FBQyxFQUFFO29CQUM1RCxXQUFVLEVBQUcsVUFBVSxDQUFDLEtBQUssRUFBYTtvQkFDMUMsR0FBRyxDQUFDLFdBQVUsR0FBSSxVQUFVLENBQUMsUUFBTyxJQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUUsR0FBSSxTQUFTLENBQUMsRUFBRTt3QkFDaEYsS0FBSyxDQUFDLFFBQU8sRUFBRyxVQUFVO29CQUMzQjtnQkFDRDtZQUNEO1lBQ0EsU0FBUyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsQ0FBQztRQUMvRTtRQUFFLEtBQUs7WUFDTixTQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFVBQVUsQ0FBQztRQUMzRjtRQUNBLFNBQVMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDO0lBQzlCO0FBQ0Q7QUFFQSxtQ0FDQyxPQUFnQixFQUNoQixLQUFvQixFQUNwQixjQUEwQyxFQUMxQyxpQkFBb0M7SUFFcEMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxTQUFTLENBQUM7SUFDaEYsR0FBRyxDQUFDLE9BQU8sS0FBSyxDQUFDLDJCQUEwQixJQUFLLFdBQVUsR0FBSSxLQUFLLENBQUMsU0FBUSxJQUFLLFNBQVMsRUFBRTtRQUMzRixxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUM7SUFDaEQ7SUFFQSxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVUsR0FBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ3JDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQztRQUNsRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO1FBQ3pFLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFDeEUsSUFBTSxTQUFNLEVBQUcsS0FBSyxDQUFDLE1BQU07UUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLO1lBQ2pDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUNyRixDQUFDLENBQUM7SUFDSDtJQUFFLEtBQUs7UUFDTixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUM7SUFDbkU7SUFDQSxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFHLElBQUssS0FBSSxHQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBRyxJQUFLLFNBQVMsRUFBRTtRQUN4RSxJQUFNLGFBQVksRUFBRyx5QkFBaUIsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFFO1FBQzNELFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQXNCLEVBQUUsS0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUssQ0FBQztJQUNoRjtJQUNBLEtBQUssQ0FBQyxTQUFRLEVBQUcsSUFBSTtBQUN0QjtBQUVBLG1CQUNDLEtBQW9CLEVBQ3BCLFdBQTBCLEVBQzFCLFlBQXdDLEVBQ3hDLGlCQUFvQyxFQUNwQyxjQUEwQyxFQUMxQyxVQUErQjtJQUUvQixJQUFJLE9BQW1DO0lBQ3ZDLElBQU0sZUFBYyxFQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBRTtJQUNsRixHQUFHLENBQUMsV0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2IsK0NBQWlCO1FBQ3ZCLElBQU0sbUJBQWtCLEVBQUcseUJBQWlCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBRTtRQUNqRSxHQUFHLENBQUMsQ0FBQyxrQ0FBdUIsQ0FBNkIsaUJBQWlCLENBQUMsRUFBRTtZQUM1RSxJQUFNLEtBQUksRUFBRyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQTZCLGlCQUFpQixDQUFDO1lBQzdGLEdBQUcsQ0FBQyxLQUFJLElBQUssSUFBSSxFQUFFO2dCQUNsQixNQUFNO1lBQ1A7WUFDQSxrQkFBaUIsRUFBRyxJQUFJO1FBQ3pCO1FBQ0EsSUFBTSxXQUFRLEVBQUcsSUFBSSxpQkFBaUIsRUFBRTtRQUN4QyxLQUFLLENBQUMsU0FBUSxFQUFHLFVBQVE7UUFDekIsSUFBTSxlQUFZLEVBQUcseUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVEsQ0FBRTtRQUNyRCxjQUFZLENBQUMsV0FBVSxFQUFHO1lBQ3pCLGNBQVksQ0FBQyxNQUFLLEVBQUcsSUFBSTtZQUN6QixHQUFHLENBQUMsY0FBWSxDQUFDLFVBQVMsSUFBSyxLQUFLLEVBQUU7Z0JBQ3JDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxjQUFFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxNQUFLLENBQUUsQ0FBQztnQkFDN0UsY0FBYyxDQUFDLGlCQUFpQixDQUFDO1lBQ2xDO1FBQ0QsQ0FBQztRQUNELGNBQVksQ0FBQyxVQUFTLEVBQUcsSUFBSTtRQUM3QixVQUFRLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUNwRCxVQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDeEMsVUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDNUMsSUFBTSxTQUFRLEVBQUcsVUFBUSxDQUFDLFVBQVUsRUFBRTtRQUN0QyxjQUFZLENBQUMsVUFBUyxFQUFHLEtBQUs7UUFDOUIsR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUNiLElBQU0saUJBQWdCLEVBQUcseUJBQXlCLENBQUMsUUFBUSxFQUFFLFVBQVEsQ0FBQztZQUN0RSxLQUFLLENBQUMsU0FBUSxFQUFHLGdCQUFnQjtZQUNqQyxXQUFXLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFVBQVEsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDO1FBQ2xHO1FBQ0EsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFRLEVBQUUsRUFBRSxLQUFLLFNBQUUsV0FBVyxlQUFFLENBQUM7UUFDakQsY0FBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7UUFDbEMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztZQUN4QyxjQUFZLENBQUMsUUFBUSxFQUFFO1FBQ3hCLENBQUMsQ0FBQztJQUNIO0lBQUUsS0FBSztRQUNOLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBSyxHQUFJLGNBQWMsQ0FBQyxhQUFZLElBQUssU0FBUyxFQUFFO1lBQ3RFLFFBQU8sRUFBRyxLQUFLLENBQUMsUUFBTyxFQUFHLGlCQUFpQixDQUFDLFlBQVk7WUFDeEQsY0FBYyxDQUFDLGFBQVksRUFBRyxTQUFTO1lBQ3ZDLHlCQUF5QixDQUFDLE9BQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixDQUFDO1lBQzdFLE1BQU07UUFDUDtRQUNBLElBQU0sSUFBRyxFQUFHLFdBQVcsQ0FBQyxPQUFRLENBQUMsYUFBYTtRQUM5QyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBRyxHQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUksSUFBSyxRQUFRLEVBQUU7WUFDakQsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFPLElBQUssVUFBUyxHQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZELElBQU0sV0FBVSxFQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSyxDQUFDO2dCQUMxRSxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQU8sSUFBSyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtvQkFDckQsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQzVEO2dCQUFFLEtBQUs7b0JBQ04sV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO29CQUMzQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVUsR0FBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDaEY7Z0JBQ0EsS0FBSyxDQUFDLFFBQU8sRUFBRyxVQUFVO1lBQzNCO1lBQUUsS0FBSztnQkFDTixRQUFPLEVBQUcsS0FBSyxDQUFDLFFBQU8sRUFBRyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFLLENBQUM7Z0JBQ3pELEdBQUcsQ0FBQyxhQUFZLElBQUssU0FBUyxFQUFFO29CQUMvQixXQUFXLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO2dCQUN6RDtnQkFBRSxLQUFLO29CQUNOLFdBQVcsQ0FBQyxPQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztnQkFDMUM7WUFDRDtRQUNEO1FBQUUsS0FBSztZQUNOLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBTyxJQUFLLFNBQVMsRUFBRTtnQkFDaEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFHLElBQUssS0FBSyxFQUFFO29CQUN4QixrQkFBaUIsdUJBQVEsaUJBQWlCLEVBQUssRUFBRSxTQUFTLEVBQUUsY0FBYSxDQUFFLENBQUU7Z0JBQzlFO2dCQUNBLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFTLElBQUssU0FBUyxFQUFFO29CQUM5QyxRQUFPLEVBQUcsS0FBSyxDQUFDLFFBQU8sRUFBRyxHQUFHLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN0RjtnQkFBRSxLQUFLO29CQUNOLFFBQU8sRUFBRyxLQUFLLENBQUMsUUFBTyxFQUFHLEtBQUssQ0FBQyxRQUFPLEdBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN4RTtZQUNEO1lBQUUsS0FBSztnQkFDTixRQUFPLEVBQUcsS0FBSyxDQUFDLE9BQU87WUFDeEI7WUFDQSx5QkFBeUIsQ0FBQyxPQUFtQixFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsaUJBQWlCLENBQUM7WUFDeEYsR0FBRyxDQUFDLGFBQVksSUFBSyxTQUFTLEVBQUU7Z0JBQy9CLFdBQVcsQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7WUFDekQ7WUFBRSxLQUFLLEdBQUcsQ0FBQyxPQUFRLENBQUMsV0FBVSxJQUFLLFdBQVcsQ0FBQyxPQUFRLEVBQUU7Z0JBQ3hELFdBQVcsQ0FBQyxPQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUMxQztRQUNEO0lBQ0Q7QUFDRDtBQUVBLG1CQUNDLFFBQWEsRUFDYixLQUFvQixFQUNwQixpQkFBb0MsRUFDcEMsV0FBMEIsRUFDMUIsY0FBMEM7SUFFMUMsR0FBRyxDQUFDLFdBQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNYLGdDQUFRO1FBQ1Ysa0NBQXlELEVBQXZELDhCQUFXLEVBQUUsZUFBVztRQUNoQyxJQUFNLGlCQUFnQixFQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRO1FBQ2pFLElBQU0sYUFBWSxFQUFHLHlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUU7UUFDckQsWUFBWSxDQUFDLFVBQVMsRUFBRyxJQUFJO1FBQzdCLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ3BELFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUN4QyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUM1QyxLQUFLLENBQUMsU0FBUSxFQUFHLFFBQVE7UUFDekIsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFLLElBQUssSUFBSSxFQUFFO1lBQ2hDLElBQU0sU0FBUSxFQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDdEMsWUFBWSxDQUFDLFVBQVMsRUFBRyxLQUFLO1lBQzlCLEtBQUssQ0FBQyxTQUFRLEVBQUcseUJBQXlCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztZQUM5RCxjQUFjLENBQUMsYUFBVyxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDO1FBQzNGO1FBQUUsS0FBSztZQUNOLFlBQVksQ0FBQyxVQUFTLEVBQUcsS0FBSztZQUM5QixLQUFLLENBQUMsU0FBUSxFQUFHLGdCQUFnQjtRQUNsQztRQUNBLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxTQUFFLFdBQVcsaUJBQUUsQ0FBQztRQUNqRCxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtJQUNuQztJQUFFLEtBQUs7UUFDTixHQUFHLENBQUMsU0FBUSxJQUFLLEtBQUssRUFBRTtZQUN2QixPQUFPLEtBQUs7UUFDYjtRQUNBLElBQU0sVUFBTyxFQUFHLENBQUMsS0FBSyxDQUFDLFFBQU8sRUFBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ2xELElBQUksWUFBVyxFQUFHLEtBQUs7UUFDdkIsSUFBSSxRQUFPLEVBQUcsS0FBSztRQUNuQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBRyxHQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUksSUFBSyxRQUFRLEVBQUU7WUFDakQsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFJLElBQUssUUFBUSxDQUFDLElBQUksRUFBRTtnQkFDakMsSUFBTSxXQUFVLEVBQUcsU0FBTyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUssQ0FBQztnQkFDcEUsU0FBTyxDQUFDLFVBQVcsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFNBQU8sQ0FBQztnQkFDckQsS0FBSyxDQUFDLFFBQU8sRUFBRyxVQUFVO2dCQUMxQixZQUFXLEVBQUcsSUFBSTtnQkFDbEIsT0FBTyxXQUFXO1lBQ25CO1FBQ0Q7UUFBRSxLQUFLO1lBQ04sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFHLEdBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxJQUFLLENBQUMsRUFBRTtnQkFDdkQsa0JBQWlCLHVCQUFRLGlCQUFpQixFQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWEsQ0FBRSxDQUFFO1lBQzlFO1lBQ0EsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFRLElBQUssS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDekMsSUFBTSxTQUFRLEVBQUcseUJBQXlCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUM7Z0JBQzFFLEtBQUssQ0FBQyxTQUFRLEVBQUcsUUFBUTtnQkFDekIsUUFBTztvQkFDTixjQUFjLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBQyxHQUFJLE9BQU87WUFDbEc7WUFFQSxJQUFNLHFCQUFrQixFQUFHLHVCQUF1QixDQUFDLFNBQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDO1lBQzVFLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVSxHQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JDLGdCQUFnQixDQUFDLFNBQU8sRUFBRSxvQkFBa0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQztnQkFDN0YsUUFBTztvQkFDTixnQkFBZ0IsQ0FDZixTQUFPLEVBQ1Asb0JBQWtCLENBQUMsVUFBVSxFQUM3QixLQUFLLENBQUMsVUFBVSxFQUNoQixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLEdBQUksT0FBTztnQkFDYixvQkFBb0IsQ0FBQyxTQUFPLEVBQUUsb0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO2dCQUMvRixJQUFNLFNBQU0sRUFBRyxLQUFLLENBQUMsTUFBTTtnQkFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLO29CQUNqQyxXQUFXLENBQ1YsU0FBTyxFQUNQLEtBQUssRUFDTCxRQUFNLENBQUMsS0FBSyxDQUFDLEVBQ2IsaUJBQWlCLEVBQ2pCLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUNyQixvQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQ2hDO2dCQUNGLENBQUMsQ0FBQztZQUNIO1lBQUUsS0FBSztnQkFDTixRQUFPO29CQUNOLGdCQUFnQixDQUFDLFNBQU8sRUFBRSxvQkFBa0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBQzt3QkFDN0YsT0FBTztZQUNUO1lBRUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBRyxJQUFLLEtBQUksR0FBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUcsSUFBSyxTQUFTLEVBQUU7Z0JBQ3hFLElBQU0sYUFBWSxFQUFHLHlCQUFpQixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUU7Z0JBQzNELFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQU8sRUFBRSxLQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBSyxDQUFDO1lBQ2pFO1FBQ0Q7UUFDQSxHQUFHLENBQUMsUUFBTyxHQUFJLEtBQUssQ0FBQyxXQUFVLEdBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUU7WUFDcEUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsU0FBa0IsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDNUY7SUFDRDtBQUNEO0FBRUEsK0JBQStCLEtBQW9CLEVBQUUsaUJBQW9DO0lBQ3hGO0lBQ0EsS0FBSyxDQUFDLDRCQUEyQixFQUFHLEtBQUssQ0FBQyxVQUFVO0lBQ3BELElBQU0sV0FBVSxFQUFHLEtBQUssQ0FBQywwQkFBMkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUN0RSxJQUFNLGVBQWMsRUFBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUU7SUFDbEYsS0FBSyxDQUFDLFdBQVUsdUJBQVEsVUFBVSxFQUFLLEtBQUssQ0FBQywyQkFBMkIsQ0FBRTtJQUMxRSxjQUFjLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDO1FBQzNDLElBQU0sV0FBVSx1QkFDWixLQUFLLENBQUMsMEJBQTJCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFDbkQsS0FBSyxDQUFDLDJCQUEyQixDQUNwQztRQUNELGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFtQixFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixDQUFDO1FBQzVGLEtBQUssQ0FBQyxXQUFVLEVBQUcsVUFBVTtJQUM5QixDQUFDLENBQUM7QUFDSDtBQUVBLG9DQUFvQyxpQkFBb0M7SUFDdkUsSUFBTSxlQUFjLEVBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFFO0lBQ2xGLEdBQUcsQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFO1FBQ2xELEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7WUFDM0IsT0FBTyxjQUFjLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFO2dCQUNyRCxJQUFNLFNBQVEsRUFBRyxjQUFjLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFO2dCQUMvRCxTQUFRLEdBQUksUUFBUSxFQUFFO1lBQ3ZCO1FBQ0Q7UUFBRSxLQUFLO1lBQ04sZ0JBQU0sQ0FBQyxxQkFBcUIsQ0FBQztnQkFDNUIsT0FBTyxjQUFjLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFO29CQUNyRCxJQUFNLFNBQVEsRUFBRyxjQUFjLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFO29CQUMvRCxTQUFRLEdBQUksUUFBUSxFQUFFO2dCQUN2QjtZQUNELENBQUMsQ0FBQztRQUNIO0lBQ0Q7QUFDRDtBQUVBLGlDQUFpQyxpQkFBb0M7SUFDcEUsSUFBTSxlQUFjLEVBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFFO0lBQ2xGLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7UUFDM0IsT0FBTyxjQUFjLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFO1lBQ2xELElBQU0sU0FBUSxFQUFHLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7WUFDNUQsU0FBUSxHQUFJLFFBQVEsRUFBRTtRQUN2QjtJQUNEO0lBQUUsS0FBSztRQUNOLEdBQUcsQ0FBQyxnQkFBTSxDQUFDLG1CQUFtQixFQUFFO1lBQy9CLGdCQUFNLENBQUMsbUJBQW1CLENBQUM7Z0JBQzFCLE9BQU8sY0FBYyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRTtvQkFDbEQsSUFBTSxTQUFRLEVBQUcsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRTtvQkFDNUQsU0FBUSxHQUFJLFFBQVEsRUFBRTtnQkFDdkI7WUFDRCxDQUFDLENBQUM7UUFDSDtRQUFFLEtBQUs7WUFDTixVQUFVLENBQUM7Z0JBQ1YsT0FBTyxjQUFjLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFO29CQUNsRCxJQUFNLFNBQVEsRUFBRyxjQUFjLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFO29CQUM1RCxTQUFRLEdBQUksUUFBUSxFQUFFO2dCQUN2QjtZQUNELENBQUMsQ0FBQztRQUNIO0lBQ0Q7QUFDRDtBQUVBLHdCQUF3QixpQkFBb0M7SUFDM0QsSUFBTSxlQUFjLEVBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFFO0lBQ2xGLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7UUFDM0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQzFCO0lBQUUsS0FBSyxHQUFHLENBQUMsY0FBYyxDQUFDLGdCQUFlLElBQUssU0FBUyxFQUFFO1FBQ3hELGNBQWMsQ0FBQyxnQkFBZSxFQUFHLGdCQUFNLENBQUMscUJBQXFCLENBQUM7WUFDN0QsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQzFCLENBQUMsQ0FBQztJQUNIO0FBQ0Q7QUFFQSxnQkFBZ0IsaUJBQW9DO0lBQ25ELElBQU0sZUFBYyxFQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBRTtJQUNsRixjQUFjLENBQUMsZ0JBQWUsRUFBRyxTQUFTO0lBQzFDLElBQU0sWUFBVyxFQUFHLGNBQWMsQ0FBQyxXQUFXO0lBQzlDLElBQU0sUUFBTyxtQkFBTyxXQUFXLENBQUM7SUFDaEMsY0FBYyxDQUFDLFlBQVcsRUFBRyxFQUFFO0lBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFLLFFBQUMsQ0FBQyxNQUFLLEVBQUcsQ0FBQyxDQUFDLEtBQUssRUFBakIsQ0FBaUIsQ0FBQztJQUN6QyxJQUFNLG1CQUFrQixFQUFHLEVBQUU7SUFDN0IsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ2QsdUNBQVE7UUFDaEIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFDLEdBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBQyxJQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzdFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDM0Isa0NBQW1ELEVBQWpELDRCQUFXLEVBQUUsZ0JBQUs7WUFDMUIsSUFBTSxhQUFZLEVBQUcseUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBRTtZQUNyRCxTQUFTLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQztRQUNwRztJQUNEO0lBQ0EsdUJBQXVCLENBQUMsaUJBQWlCLENBQUM7SUFDMUMsMEJBQTBCLENBQUMsaUJBQWlCLENBQUM7QUFDOUM7QUFFYSxZQUFHLEVBQUc7SUFDbEIsTUFBTSxFQUFFLFVBQ1AsVUFBbUIsRUFDbkIsUUFBb0MsRUFDcEMsaUJBQWtEO1FBQWxELDBEQUFrRDtRQUVsRCxJQUFNLGFBQVksRUFBRyx5QkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFO1FBQ3JELElBQU0sc0JBQXFCLEVBQUcsb0JBQW9CLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDO1FBQy9FLElBQU0sZUFBYyxFQUFtQjtZQUN0QyxvQkFBb0IsRUFBRSxFQUFFO1lBQ3hCLHVCQUF1QixFQUFFLEVBQUU7WUFDM0IsT0FBTyxFQUFFLElBQUksaUJBQU8sRUFBRTtZQUN0QixlQUFlLEVBQUUsU0FBUztZQUMxQixXQUFXLEVBQUUsRUFBRTtZQUNmLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxNQUFLLEdBQUksS0FBSztZQUN2QyxZQUFZLEVBQUUsaUJBQWlCLENBQUM7U0FDaEM7UUFDRCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQztRQUUvQyxxQkFBcUIsQ0FBQyxTQUFRLEVBQUcsVUFBVTtRQUMzQyxJQUFNLFlBQVcsRUFBRyxhQUFhLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDO1FBQ2pFLElBQU0sS0FBSSxFQUFHLGVBQWUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO1FBQ3BELFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLGVBQUUsQ0FBQztRQUN2RCxZQUFZLENBQUMsV0FBVSxFQUFHO1lBQ3pCLFlBQVksQ0FBQyxNQUFLLEVBQUcsSUFBSTtZQUN6QixHQUFHLENBQUMsWUFBWSxDQUFDLFVBQVMsSUFBSyxLQUFLLEVBQUU7Z0JBQ3JDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxZQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxNQUFLLENBQUUsQ0FBQztnQkFDakYsY0FBYyxDQUFDLHFCQUFxQixDQUFDO1lBQ3RDO1FBQ0QsQ0FBQztRQUNELFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUM7UUFDbkUsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztZQUN4QyxZQUFZLENBQUMsUUFBUSxFQUFFO1FBQ3hCLENBQUMsQ0FBQztRQUNGLDBCQUEwQixDQUFDLHFCQUFxQixDQUFDO1FBQ2pELHVCQUF1QixDQUFDLHFCQUFxQixDQUFDO1FBQzlDLE9BQU87WUFDTixPQUFPLEVBQUUscUJBQXFCLENBQUM7U0FDL0I7SUFDRixDQUFDO0lBQ0QsTUFBTSxFQUFFLFVBQVMsUUFBb0MsRUFBRSxpQkFBOEM7UUFDcEcsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDO0lBQy9FLENBQUM7SUFDRCxLQUFLLEVBQUUsVUFDTixPQUFnQixFQUNoQixRQUFvQyxFQUNwQyxpQkFBa0Q7UUFBbEQsMERBQWtEO1FBRWxELGlCQUFpQixDQUFDLE1BQUssRUFBRyxJQUFJO1FBQzlCLGlCQUFpQixDQUFDLGFBQVksRUFBRyxPQUFPO1FBQ3hDLElBQU0sV0FBVSxFQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQXFCLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDO1FBQzFGLElBQU0sZUFBYyxFQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUU7UUFDdkQsY0FBYyxDQUFDLE1BQUssRUFBRyxLQUFLO1FBQzVCLE9BQU8sVUFBVTtJQUNsQjtDQUNBOzs7Ozs7OztBQ3htQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxnQkFBZ0I7QUFDbkQsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9CQUFvQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsY0FBYzs7QUFFbEU7QUFDQTs7Ozs7Ozs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQywwQkFBMEIsRUFBRTtBQUMvRCx5Q0FBeUMsZUFBZTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThELCtEQUErRDtBQUM3SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBLDJDQUEyQzs7QUFFM0M7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsaUNBQWlDO0FBQ2pDLFlBQVk7QUFDWixJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBLGtCQUFrQjs7QUFFbEIsT0FBTztBQUNQO0FBQ0E7O0FBRUEsa0JBQWtCLHMvVkFBcy9WLGdJQUFnSSx1cVNBQXVxUyxnSUFBZ0ksbzREQUFvNEQ7O0FBRW56c0IsT0FBTztBQUNQO0FBQ0E7O0FBRUEsa0JBQWtCOztBQUVsQixPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQSxJQUFJO0FBQ0osMkRBQTJEO0FBQzNEOztBQUVBO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0Esc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLFNBQVM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxnQkFBZ0IsZ0JBQWdCO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQSxFQUFFLElBQUk7QUFDTjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsK0RBQStEO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxHQUFHO0FBQ0gsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUEsbUVBQW1FLFFBQVE7QUFDM0U7O0FBRUE7QUFDQSwwQkFBMEIsWUFBWTtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBLGtCQUFrQjs7QUFFbEIsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxrQkFBa0I7O0FBRWxCLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUNBQWlDLE9BQU87QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLE9BQU87QUFDeEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUNBQWlDLGdCQUFnQjtBQUNqRDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLE9BQU87QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQ0FBaUMsT0FBTztBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsdUNBQXVDO0FBQ2hFLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCx5QkFBeUIsMENBQTBDO0FBQ25FO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSx5QkFBeUIsd0JBQXdCO0FBQ2pELEdBQUc7QUFDSCx5QkFBeUIsMkJBQTJCO0FBQ3BEO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSx5QkFBeUIsd0NBQXdDO0FBQ2pFLEdBQUc7QUFDSCx5QkFBeUIsMkNBQTJDO0FBQ3BFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCLG9EQUFvRDtBQUM1RSxFQUFFO0FBQ0Ysd0JBQXdCLHVEQUF1RDtBQUMvRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLEtBQUs7QUFDbkIsY0FBYyxLQUFLO0FBQ25CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCO0FBQ0EsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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OztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLGNBQWMsYUFBYSxHQUFHLGVBQWU7QUFDN0M7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsWUFBWSxZQUFZO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFD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QTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsQ0FBQztBQUNEOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsb0NBQW9DLEVBQUU7QUFDaEY7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FB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O0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxjQUFjOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDLGNBQWM7OztBQUcxRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGNBQWM7OztBQUcxRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsNERBQTRELDBCQUEwQiwwQ0FBMEMsZ0JBQWdCLE9BQU8sa0JBQWtCLEVBQUUsYUFBYSxFQUFFLE9BQU8sd0JBQXdCLEVBQUU7O0FBRTNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQscUJBQXFCO0FBQ3RFLHVEQUF1RDs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaURBQWlEO0FBQ2hFLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLGtCQUFrQixXQUFXO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKLFdBQVc7QUFDWDtBQUNBLDRDQUE0QyxjQUFjOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsNERBQTRELDBCQUEwQiwwQ0FBMEMsZ0JBQWdCLE9BQU8sa0JBQWtCLEVBQUUsYUFBYSxFQUFFLE9BQU8sd0JBQXdCLEVBQUU7O0FBRTNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyx1QkFBdUIsRUFBRTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixpQkFBaUI7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsdUJBQXVCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGNBQWM7OztBQUcxRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixrQkFBa0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QyxjQUFjOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isb0JBQW9CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGNBQWM7OztBQUcxRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixvQkFBb0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IsNEJBQTRCO0FBQzVCLDRCQUE0QjtBQUM1Qiw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQSw0Q0FBNEMsY0FBYzs7O0FBRzFELE9BQU87QUFDUDtBQUNBLENBQUM7QUFDRCxDOzs7Ozs7O0FDOXlEQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOzs7Ozs7OztBQ3ZMdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDLHNCQUFzQixFQUFFO0FBQ2xFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7QUN6TEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQW1CO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixzQkFBc0I7QUFDdkM7O0FBRUE7QUFDQSxtQkFBbUIsMkJBQTJCOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLDJCQUEyQjtBQUM1QztBQUNBOztBQUVBLFFBQVEsdUJBQXVCO0FBQy9CO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQsa0RBQWtELHNCQUFzQjtBQUN4RTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDs7QUFFQSw2QkFBNkIsbUJBQW1COztBQUVoRDs7QUFFQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7QUM1V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVcsRUFBRTtBQUNyRCx3Q0FBd0MsV0FBVyxFQUFFOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHNDQUFzQztBQUN0QyxHQUFHO0FBQ0g7QUFDQSw4REFBOEQ7QUFDOUQ7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOzs7Ozs7OztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlEQTtBQUFBO0FBQ0E7QUFDQSwrREFBK0Q7QUFDL0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0sZ0JBQWdCLHNDQUFzQyxpQkFBaUIsRUFBRTtBQUMvRSxxQkFBcUIsdURBQXVEOztBQUU1RTtBQUNBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBOztBQUVBO0FBQ0EsNENBQTRDLE9BQU87QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELGNBQWM7QUFDMUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxRQUFRO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUMsb0NBQW9DO0FBQ3ZFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLE1BQU0sNkJBQTZCLEVBQUUsWUFBWSxXQUFXLEVBQUU7QUFDakcsa0NBQWtDLE1BQU0saUNBQWlDLEVBQUUsWUFBWSxXQUFXLEVBQUU7QUFDcEcsK0JBQStCLGlFQUFpRSx1QkFBdUIsRUFBRSw0QkFBNEI7QUFDcko7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxhQUFhLDZCQUE2QiwwQkFBMEIsYUFBYSxFQUFFLHFCQUFxQjtBQUN4RyxnQkFBZ0IscURBQXFELG9FQUFvRSxhQUFhLEVBQUU7QUFDeEosc0JBQXNCLHNCQUFzQixxQkFBcUIsR0FBRztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsa0NBQWtDLFNBQVM7QUFDM0Msa0NBQWtDLFdBQVcsVUFBVTtBQUN2RCx5Q0FBeUMsY0FBYztBQUN2RDtBQUNBLDZHQUE2RyxPQUFPLFVBQVU7QUFDOUgsZ0ZBQWdGLGlCQUFpQixPQUFPO0FBQ3hHLHdEQUF3RCxnQkFBZ0IsUUFBUSxPQUFPO0FBQ3ZGLDhDQUE4QyxnQkFBZ0IsZ0JBQWdCLE9BQU87QUFDckY7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLFNBQVMsWUFBWSxhQUFhLE9BQU8sRUFBRSxVQUFVLFdBQVc7QUFDaEUsbUNBQW1DLFNBQVM7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixNQUFNLGdCQUFnQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLHNCQUFzQjtBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixzRkFBc0YsYUFBYSxFQUFFO0FBQ3RILHNCQUFzQixnQ0FBZ0MscUNBQXFDLDBDQUEwQyxFQUFFLEVBQUUsR0FBRztBQUM1SSwyQkFBMkIsTUFBTSxlQUFlLEVBQUUsWUFBWSxvQkFBb0IsRUFBRTtBQUNwRixzQkFBc0Isb0dBQW9HO0FBQzFILDZCQUE2Qix1QkFBdUI7QUFDcEQsNEJBQTRCLHdCQUF3QjtBQUNwRCwyQkFBMkIseURBQXlEO0FBQ3BGOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsNENBQTRDLFNBQVMsRUFBRSxxREFBcUQsYUFBYSxFQUFFO0FBQzVJLHlCQUF5QixnQ0FBZ0Msb0JBQW9CLGdEQUFnRCxnQkFBZ0IsR0FBRztBQUNoSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDLHVDQUF1QyxhQUFhLEVBQUUsRUFBRSxPQUFPLGtCQUFrQjtBQUNqSDtBQUNBOzs7Ozs7OztBQ3JLQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qzs7Ozs7Ozs7O3MxVENwQkEsR0FBQUEsMkJBQUEsbUJBQUFDLENBQUEsMENBQ0EsR0FBQUMsdUNBQUEsbUJBQUFELENBQUEsaUVBRUEsR0FBQUUsZ0NBQUEsbUJBQUFGLENBQUEsc0RBQ0EsR0FBQUcsb0NBQUEsbUJBQUFILENBQUEsbURBRUEsR0FBQUksMkJBQUEsbUJBQUFKLENBQUEsbUNBZ0JBLEdBQUFLLFdBQUEsMkNBQUFDLE1BQUEsNENBQThCQyxRQUFBQyxTQUFBLENBQUFILFFBQUEsQ0FBQUMsTUFBQSxFQUE5QixRQUFBRCxTQUFBLG1MQW1CQSxDQW5CQSxzQkFDU0EsU0FBQUksU0FBQSxDQUFBQyxRQUFBLENBQVIsc0RBQ0MsOEJBQUtDLFVBQUwsQ0FBZ0JDLFVBQWhCLDRCQUE4QixLQUFLRCxVQUFMLENBQWdCQyxVQUFoQixDQUEyQixLQUFLRCxVQUFMLENBQWdCRSxJQUEzQyxDQUE5QixFQUNBLENBRk8sQ0FEVCxzQkFLV1IsU0FBQUksU0FBQSxDQUFBSyxNQUFBLENBQVYsZ0NBQ08sR0FBQUMsMkJBQUEsS0FBQUosVUFBQSxFQUFFSyw2QkFBQUQsR0FBQUMsS0FBQSxDQUFGLENBQVNDLGdDQUFBRixHQUFBRSxRQUFBLENBQVQsQ0FEUCxzQkFHQyxNQUFPbEIsS0FBQW1CLENBQUEsQ0FBRSxJQUFGLENBQVEsQ0FBRUMsUUFBUyxLQUFLQyxLQUFMLENBQVdoQixJQUFJaUIsSUFBZixDQUFYLENBQVIsQ0FBMkMsQ0FDakR0QixJQUFBbUIsQ0FBQSxDQUNDLE1BREQsQ0FFQyxDQUNDQyxRQUFTLEtBQUtDLEtBQUwsQ0FBVyxDQUFDaEIsSUFBSWtCLElBQUwsQ0FBV0wsa0NBQVdiLElBQUlhLFFBQWYsMkJBQTBCLElBQTFCLENBQVgsQ0FBWCxDQURWLENBRUNNLFFBQVMsS0FBS2IsUUFGZixDQUZELENBTUMsQ0FBQ00sS0FBRCxDQU5ELENBRGlELENBQTNDLENBQVAsQ0FVQSxDQWJTLENBTFgsc0JBQWFYLFNBQVFFLFFBQUFpQixVQUFBLEVBUHBCdkIsZ0JBQUF3QixhQUFBLENBQWtDLENBQ2xDQyxJQUFLLGdCQUQ2QixDQUVsQ0MsV0FBWSxDQUFDLE9BQUQsQ0FBVSxVQUFWLENBRnNCLENBR2xDQyxPQUFRLENBQUMsWUFBRCxDQUgwQixDQUlsQ2pCLFdBQVksQ0FBQyxNQUFELENBQVMsVUFBVCxDQUpzQixDQUFsQyxDQU9vQixDQURwQlQsU0FBQWtCLEtBQUEsQ0FBTWhCLEdBQU4sQ0FDb0IsRUFBUkMsUUFBUSxDQUFSLENBQWIsc0JBbUJBLE1BQUFBLFNBQUEsQ0FuQkEsRUFBOEJILFNBQUEyQixXQUFBLENBQVkxQixhQUFBMkIsVUFBWixDQUE5Qix5QkFBYUMsUUFBQTFCLFFBQUEsQ0FBQUEsUUFBQSx1QkFxQmIwQixRQUFBQyxPQUFBLENBQWUzQixRQUFmLEM7Ozs7Ozs7QUMzQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxnQ0FBZ0MsVUFBVSxFQUFFO0FBQzVDLEM7Ozs7Ozs7O281V0N6QkEsR0FBQU4sNEJBQUEsbUJBQUFDLENBQUEsMENBQ0EsR0FBQUMsd0NBQUEsbUJBQUFELENBQUEsaUVBRUEsR0FBQUUsaUNBQUEsbUJBQUFGLENBQUEsc0RBQ0EsR0FBQUcscUNBQUEsbUJBQUFILENBQUEsbURBR0EsR0FBQUksNEJBQUEsbUJBQUFKLENBQUEsMEJBV0EsR0FBQWlDLE9BQUEsNENBQUEzQixNQUFBLDhDQUEwQkMsUUFBQUMsU0FBQSxDQUFBeUIsSUFBQSxDQUFBM0IsTUFBQSxFQUExQixRQUFBMkIsS0FBQSx3TEFtQ0EsQ0FuQ0EsdUJBR1NBLEtBQUF4QixTQUFBLENBQUF5QixXQUFBLENBQVIsU0FBb0JDLEVBQXBCLENBQWdDdEIsSUFBaEMsQ0FBeUMsOENBQ3hDLEtBQUt1QixXQUFMLENBQW1CRCxFQUFuQixDQUR3Qyx1QkFFeEMsS0FBS3hCLFVBQUwsQ0FBZ0JDLFVBQWhCLENBQTJCQyxJQUEzQixFQUZ3Qyx1QkFHeEMsS0FBS3dCLFVBQUwsR0FDQSxDQUpPLENBSFQsdUJBU1dKLEtBQUF4QixTQUFBLENBQUFLLE1BQUEsQ0FBVixvQ0FBQXdCLCtCQUFBLE1BQ0MsR0FBTUMsK0JBQVEsS0FBS0MsUUFBTCxDQUFjQyxHQUFkLENBQWtCLFNBQUNDLEtBQUQsQ0FBUUMsS0FBUixDQUFhLDhDQUM1QyxHQUFJRCxLQUFKLENBQVcsMEJBQ1YsR0FBTS9CLG9DQUEwQyxDQUMvQ0MsV0FBWSxTQUFDQyxJQUFELENBQVUsOENBQ3JCeUIsTUFBS0osV0FBTCxDQUFpQlMsS0FBakIsQ0FBd0I5QixJQUF4QixFQUNELENBSCtDLENBQTFDLENBQU4sQ0FEVSx1QkFNVixHQUFJeUIsTUFBS0YsV0FBTCxHQUFxQlEsU0FBekIsQ0FBb0MsaURBQ25DakMsV0FBV00sUUFBWCxDQUFzQjBCLFFBQVVMLE1BQUtGLFdBQXJDLENBQ0QsQ0FGQSwrQkFOVSx1QkFTVk0sTUFBTS9CLFVBQU4sQ0FBZ0JKLFFBQUFzQyxRQUFBLElBQVFILE1BQU0vQixVQUFkLENBQTZCQSxVQUE3QixDQUFoQixDQUNELENBVkEsK0JBRDRDLHVCQVk1QyxNQUFPK0IsTUFBUCxDQUNBLENBYmEsQ0FBUixDQUFOLENBREQsdUJBZ0JDLE1BQU8zQyxLQUFBbUIsQ0FBQSxDQUFFLEtBQUYsQ0FBUyxDQUFFQyxRQUFTLEtBQUtDLEtBQUwsQ0FBV2hCLElBQUlpQixJQUFmLENBQVgsQ0FBVCxDQUE0QyxDQUNsRHRCLElBQUFtQixDQUFBLENBQ0MsSUFERCxDQUVDLENBQ0NDLFFBQVMsS0FBS0MsS0FBTCxDQUFXaEIsSUFBSTBDLGFBQWYsQ0FEVixDQUZELENBS0NQLEtBTEQsQ0FEa0QsQ0FBNUMsQ0FBUCxDQVNBLENBekJTLENBVFgsdUJBQWFOLEtBQUkxQixRQUFBaUIsVUFBQSxFQUxoQnZCLGdCQUFBd0IsYUFBQSxDQUE4QixDQUM5QkMsSUFBSyxXQUR5QixDQUU5QkUsT0FBUSxDQUFDLFlBQUQsQ0FGc0IsQ0FBOUIsQ0FLZ0IsQ0FEaEIxQixTQUFBa0IsS0FBQSxDQUFNaEIsR0FBTixDQUNnQixFQUFKNkIsSUFBSSxDQUFKLENBQWIsdUJBbUNBLE1BQUFBLEtBQUEsQ0FuQ0EsRUFBMEIvQixTQUFBMkIsV0FBQSxDQUFZMUIsYUFBQTJCLFVBQVosQ0FBMUIsMEJBQWFDLFFBQUFFLElBQUEsQ0FBQUEsSUFBQSx3QkFxQ2JGLFFBQUFDLE9BQUEsQ0FBZUMsSUFBZixDOzs7Ozs7O0FDdkRBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsZ0NBQWdDLFVBQVUsRUFBRTtBQUM1QyxDOzs7Ozs7Ozs7O0FDekJBO0FBQ0E7Ozs7Ozs7Ozs7O0FDRE0sbUNBQTZDLEVBQTNDLHNCQUFRLEVBQUUsVUFBRTtBQUNwQjtBQUVBO0FBRUE7QUFDQTtBQUVBLFFBQVEsQ0FBQyxVQUFVLEVBQUU7SUFDcEIsRUFBRSxDQUFDLHNCQUFzQixFQUFFO1FBQzFCLElBQU0sYUFBWSxFQUFHLGlCQUFPLENBQUMsbUJBQVEsQ0FBQztRQUN0QyxJQUFNLFNBQVEsRUFBRyxJQUFJO1FBQ3JCLElBQU0sTUFBSyxFQUFHLFdBQVc7UUFDekIsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsWUFBRSxLQUFLLFNBQUUsQ0FBQztRQUMvQyxZQUFZLENBQUMsWUFBWSxDQUN4QixLQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFJLENBQUUsRUFBRTtZQUM5QixLQUFDLENBQ0EsTUFBTSxFQUNOO2dCQUNDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDakMsT0FBTyxFQUFFLFlBQVksQ0FBQzthQUN0QixFQUNELENBQUMsS0FBSyxDQUFDO1NBRVIsQ0FBQyxDQUNGO0lBQ0YsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDOzs7Ozs7Ozs7OztBQzNCSSxtQ0FBNkMsRUFBM0Msc0JBQVEsRUFBRSxVQUFFO0FBQ3BCO0FBRUE7QUFFQTtBQUNBO0FBRUEsUUFBUSxDQUFDLE1BQU0sRUFBRTtJQUNoQixFQUFFLENBQUMsc0JBQXNCLEVBQUU7UUFDMUIsSUFBTSxTQUFRLEVBQUcsaUJBQU8sQ0FBQyxXQUFJLENBQUM7UUFDOUIsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFJLENBQUUsRUFBRSxDQUFDLEtBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLGNBQWEsQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xHLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQyIsImZpbGUiOiJ1bml0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMGJhYmY2MDU5YmUzOTNmMmEzZGYiLCJpbXBvcnQgeyBIYW5kbGUgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY3JlYXRlQ29tcG9zaXRlSGFuZGxlIH0gZnJvbSAnLi9sYW5nJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ0Bkb2pvL3NoaW0vUHJvbWlzZSc7XG5cbi8qKlxuICogTm8gb3BlcmF0aW9uIGZ1bmN0aW9uIHRvIHJlcGxhY2Ugb3duIG9uY2UgaW5zdGFuY2UgaXMgZGVzdG9yeWVkXG4gKi9cbmZ1bmN0aW9uIG5vb3AoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xufVxuXG4vKipcbiAqIE5vIG9wIGZ1bmN0aW9uIHVzZWQgdG8gcmVwbGFjZSBvd24sIG9uY2UgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdG9yeWVkXG4gKi9cbmZ1bmN0aW9uIGRlc3Ryb3llZCgpOiBuZXZlciB7XG5cdHRocm93IG5ldyBFcnJvcignQ2FsbCBtYWRlIHRvIGRlc3Ryb3llZCBtZXRob2QnKTtcbn1cblxuZXhwb3J0IGNsYXNzIERlc3Ryb3lhYmxlIHtcblx0LyoqXG5cdCAqIHJlZ2lzdGVyIGhhbmRsZXMgZm9yIHRoZSBpbnN0YW5jZVxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVzOiBIYW5kbGVbXTtcblxuXHQvKipcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmhhbmRsZXMgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlciBoYW5kbGVzIGZvciB0aGUgaW5zdGFuY2UgdGhhdCB3aWxsIGJlIGRlc3Ryb3llZCB3aGVuIGB0aGlzLmRlc3Ryb3lgIGlzIGNhbGxlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge0hhbmRsZX0gaGFuZGxlIFRoZSBoYW5kbGUgdG8gYWRkIGZvciB0aGUgaW5zdGFuY2Vcblx0ICogQHJldHVybnMge0hhbmRsZX0gYSBoYW5kbGUgZm9yIHRoZSBoYW5kbGUsIHJlbW92ZXMgdGhlIGhhbmRsZSBmb3IgdGhlIGluc3RhbmNlIGFuZCBjYWxscyBkZXN0cm95XG5cdCAqL1xuXHRvd24oaGFuZGxlczogSGFuZGxlIHwgSGFuZGxlW10pOiBIYW5kbGUge1xuXHRcdGNvbnN0IGhhbmRsZSA9IEFycmF5LmlzQXJyYXkoaGFuZGxlcykgPyBjcmVhdGVDb21wb3NpdGVIYW5kbGUoLi4uaGFuZGxlcykgOiBoYW5kbGVzO1xuXHRcdGNvbnN0IHsgaGFuZGxlczogX2hhbmRsZXMgfSA9IHRoaXM7XG5cdFx0X2hhbmRsZXMucHVzaChoYW5kbGUpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRkZXN0cm95KCkge1xuXHRcdFx0XHRfaGFuZGxlcy5zcGxpY2UoX2hhbmRsZXMuaW5kZXhPZihoYW5kbGUpKTtcblx0XHRcdFx0aGFuZGxlLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIERlc3RycHlzIGFsbCBoYW5kZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBpbnN0YW5jZVxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnl9IGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgYWxsIGhhbmRsZXMgaGF2ZSBiZWVuIGRlc3Ryb3llZFxuXHQgKi9cblx0ZGVzdHJveSgpOiBQcm9taXNlPGFueT4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGhpcy5oYW5kbGVzLmZvckVhY2goKGhhbmRsZSkgPT4ge1xuXHRcdFx0XHRoYW5kbGUgJiYgaGFuZGxlLmRlc3Ryb3kgJiYgaGFuZGxlLmRlc3Ryb3koKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5kZXN0cm95ID0gbm9vcDtcblx0XHRcdHRoaXMub3duID0gZGVzdHJveWVkO1xuXHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBEZXN0cm95YWJsZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBEZXN0cm95YWJsZS50cyIsImltcG9ydCBNYXAgZnJvbSAnQGRvam8vc2hpbS9NYXAnO1xuaW1wb3J0IHsgSGFuZGxlLCBFdmVudFR5cGUsIEV2ZW50T2JqZWN0IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERlc3Ryb3lhYmxlIH0gZnJvbSAnLi9EZXN0cm95YWJsZSc7XG5cbi8qKlxuICogTWFwIG9mIGNvbXB1dGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGtleWVkIGJ5IHN0cmluZ1xuICovXG5jb25zdCByZWdleE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBSZWdFeHA+KCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpcyB0aGUgZXZlbnQgdHlwZSBnbG9iIGhhcyBiZWVuIG1hdGNoZWRcbiAqXG4gKiBAcmV0dXJucyBib29sZWFuIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBnbG9iIGlzIG1hdGNoZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2xvYk1hdGNoKGdsb2JTdHJpbmc6IHN0cmluZyB8IHN5bWJvbCwgdGFyZ2V0U3RyaW5nOiBzdHJpbmcgfCBzeW1ib2wpOiBib29sZWFuIHtcblx0aWYgKHR5cGVvZiB0YXJnZXRTdHJpbmcgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBnbG9iU3RyaW5nID09PSAnc3RyaW5nJyAmJiBnbG9iU3RyaW5nLmluZGV4T2YoJyonKSAhPT0gLTEpIHtcblx0XHRsZXQgcmVnZXg6IFJlZ0V4cDtcblx0XHRpZiAocmVnZXhNYXAuaGFzKGdsb2JTdHJpbmcpKSB7XG5cdFx0XHRyZWdleCA9IHJlZ2V4TWFwLmdldChnbG9iU3RyaW5nKSE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7Z2xvYlN0cmluZy5yZXBsYWNlKC9cXCovZywgJy4qJyl9JGApO1xuXHRcdFx0cmVnZXhNYXAuc2V0KGdsb2JTdHJpbmcsIHJlZ2V4KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlZ2V4LnRlc3QodGFyZ2V0U3RyaW5nKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZ2xvYlN0cmluZyA9PT0gdGFyZ2V0U3RyaW5nO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEV2ZW50ZWRDYWxsYmFjazxUID0gRXZlbnRUeXBlLCBFIGV4dGVuZHMgRXZlbnRPYmplY3Q8VD4gPSBFdmVudE9iamVjdDxUPj4gPSB7XG5cdC8qKlxuXHQgKiBBIGNhbGxiYWNrIHRoYXQgdGFrZXMgYW4gYGV2ZW50YCBhcmd1bWVudFxuXHQgKlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdFxuXHQgKi9cblxuXHQoZXZlbnQ6IEUpOiBib29sZWFuIHwgdm9pZDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRXZlbnRUeXBlczxUIGV4dGVuZHMgRXZlbnRPYmplY3Q8YW55PiA9IEV2ZW50T2JqZWN0PGFueT4+IHtcblx0W2luZGV4OiBzdHJpbmddOiBUO1xufVxuXG4vKipcbiAqIEEgdHlwZSB3aGljaCBpcyBlaXRoZXIgYSB0YXJnZXRlZCBldmVudCBsaXN0ZW5lciBvciBhbiBhcnJheSBvZiBsaXN0ZW5lcnNcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHRhcmdldCBmb3IgdGhlIGV2ZW50c1xuICogQHRlbXBsYXRlIEUgVGhlIGV2ZW50IHR5cGUgZm9yIHRoZSBldmVudHNcbiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRlZENhbGxiYWNrT3JBcnJheTxUID0gRXZlbnRUeXBlLCBFIGV4dGVuZHMgRXZlbnRPYmplY3Q8VD4gPSBFdmVudE9iamVjdDxUPj4gPVxuXHR8IEV2ZW50ZWRDYWxsYmFjazxULCBFPlxuXHR8IEV2ZW50ZWRDYWxsYmFjazxULCBFPltdO1xuXG4vKipcbiAqIEV2ZW50IENsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBFdmVudGVkPFxuXHRNIGV4dGVuZHMgQ3VzdG9tRXZlbnRUeXBlcyA9IHt9LFxuXHRUID0gRXZlbnRUeXBlLFxuXHRPIGV4dGVuZHMgRXZlbnRPYmplY3Q8VD4gPSBFdmVudE9iamVjdDxUPlxuPiBleHRlbmRzIERlc3Ryb3lhYmxlIHtcblx0Ly8gVGhlIGZvbGxvd2luZyBtZW1iZXIgaXMgcHVyZWx5IHNvIFR5cGVTY3JpcHQgcmVtZW1iZXJzIHRoZSB0eXBlIG9mIGBNYCB3aGVuIGV4dGVuZGluZyBzb1xuXHQvLyB0aGF0IHRoZSB1dGlsaXRpZXMgaW4gYG9uLnRzYCB3aWxsIHdvcmsgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yMDM0OFxuXHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcblx0cHJvdGVjdGVkIF9fdHlwZU1hcF9fPzogTTtcblx0LyoqXG5cdCAqIG1hcCBvZiBsaXN0ZW5lcnMga2V5ZWQgYnkgZXZlbnQgdHlwZVxuXHQgKi9cblx0cHJvdGVjdGVkIGxpc3RlbmVyc01hcDogTWFwPFQgfCBrZXlvZiBNLCBFdmVudGVkQ2FsbGJhY2s8VCwgTz5bXT4gPSBuZXcgTWFwKCk7XG5cblx0LyoqXG5cdCAqIEVtaXRzIHRoZSBldmVudCBvYmplY3QgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZVxuXHQgKlxuXHQgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHRvIGVtaXRcblx0ICovXG5cdGVtaXQ8SyBleHRlbmRzIGtleW9mIE0+KGV2ZW50OiBNW0tdKTogdm9pZDtcblx0ZW1pdChldmVudDogTyk6IHZvaWQ7XG5cdGVtaXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuXHRcdHRoaXMubGlzdGVuZXJzTWFwLmZvckVhY2goKG1ldGhvZHMsIHR5cGUpID0+IHtcblx0XHRcdGlmIChpc0dsb2JNYXRjaCh0eXBlIGFzIGFueSwgZXZlbnQudHlwZSkpIHtcblx0XHRcdFx0bWV0aG9kcy5mb3JFYWNoKChtZXRob2QpID0+IHtcblx0XHRcdFx0XHRtZXRob2QuY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhdGNoIGFsbCBoYW5kbGVyIGZvciB2YXJpb3VzIGNhbGwgc2lnbmF0dXJlcy4gVGhlIHNpZ25hdHVyZXMgYXJlIGRlZmluZWQgaW5cblx0ICogYEJhc2VFdmVudGVkRXZlbnRzYC4gIFlvdSBjYW4gYWRkIHlvdXIgb3duIGV2ZW50IHR5cGUgLT4gaGFuZGxlciB0eXBlcyBieSBleHRlbmRpbmdcblx0ICogYEJhc2VFdmVudGVkRXZlbnRzYC4gIFNlZSBleGFtcGxlIGZvciBkZXRhaWxzLlxuXHQgKlxuXHQgKiBAcGFyYW0gYXJnc1xuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKlxuXHQgKiBpbnRlcmZhY2UgV2lkZ2V0QmFzZUV2ZW50cyBleHRlbmRzIEJhc2VFdmVudGVkRXZlbnRzIHtcblx0ICogICAgICh0eXBlOiAncHJvcGVydGllczpjaGFuZ2VkJywgaGFuZGxlcjogUHJvcGVydGllc0NoYW5nZWRIYW5kbGVyKTogSGFuZGxlO1xuXHQgKiB9XG5cdCAqIGNsYXNzIFdpZGdldEJhc2UgZXh0ZW5kcyBFdmVudGVkIHtcblx0ICogICAgb246IFdpZGdldEJhc2VFdmVudHM7XG5cdCAqIH1cblx0ICpcblx0ICogQHJldHVybiB7YW55fVxuXHQgKi9cblx0b248SyBleHRlbmRzIGtleW9mIE0+KHR5cGU6IEssIGxpc3RlbmVyOiBFdmVudGVkQ2FsbGJhY2tPckFycmF5PEssIE1bS10+KTogSGFuZGxlO1xuXHRvbih0eXBlOiBULCBsaXN0ZW5lcjogRXZlbnRlZENhbGxiYWNrT3JBcnJheTxULCBPPik6IEhhbmRsZTtcblx0b24odHlwZTogYW55LCBsaXN0ZW5lcjogRXZlbnRlZENhbGxiYWNrT3JBcnJheTxhbnksIGFueT4pOiBIYW5kbGUge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGxpc3RlbmVyKSkge1xuXHRcdFx0Y29uc3QgaGFuZGxlcyA9IGxpc3RlbmVyLm1hcCgobGlzdGVuZXIpID0+IHRoaXMuX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkZXN0cm95KCkge1xuXHRcdFx0XHRcdGhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlKSA9PiBoYW5kbGUuZGVzdHJveSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcblx0fVxuXG5cdHByaXZhdGUgX2FkZExpc3RlbmVyKHR5cGU6IFQgfCBrZXlvZiBNLCBsaXN0ZW5lcjogRXZlbnRlZENhbGxiYWNrPFQsIE8+KSB7XG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNNYXAuZ2V0KHR5cGUpIHx8IFtdO1xuXHRcdGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblx0XHR0aGlzLmxpc3RlbmVyc01hcC5zZXQodHlwZSwgbGlzdGVuZXJzKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGVzdHJveTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XG5cdFx0XHRcdGxpc3RlbmVycy5zcGxpY2UobGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpLCAxKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50ZWQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gRXZlbnRlZC50cyIsImltcG9ydCB7IEhhbmRsZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdAZG9qby9zaGltL29iamVjdCc7XG5cbmV4cG9ydCB7IGFzc2lnbiB9IGZyb20gJ0Bkb2pvL3NoaW0vb2JqZWN0JztcblxuY29uc3Qgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVHlwZSBndWFyZCB0aGF0IGVuc3VyZXMgdGhhdCB0aGUgdmFsdWUgY2FuIGJlIGNvZXJjZWQgdG8gT2JqZWN0XG4gKiB0byB3ZWVkIG91dCBob3N0IG9iamVjdHMgdGhhdCBkbyBub3QgZGVyaXZlIGZyb20gT2JqZWN0LlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGlmIHdlIHdhbnQgdG8gZGVlcCBjb3B5IGFuIG9iamVjdCBvciBub3QuXG4gKiBOb3RlOiBJbiBFUzYgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IGFuIG9iamVjdCdzIFN5bWJvbC50b1N0cmluZ1RhZyBwcm9wZXJ0eSwgd2hpY2ggd2lsbFxuICogY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBgdG9TdHJpbmdgLiBUaGlzIGlzIGEgcmFyZSBlZGdlIGNhc2UgdGhhdCBpcyBkaWZmaWN1bHQgdG8gaGFuZGxlLFxuICogc28gaXQgaXMgbm90IGhhbmRsZWQgaGVyZS5cbiAqIEBwYXJhbSAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJuICAgICAgIElmIHRoZSB2YWx1ZSBpcyBjb2VyY2libGUgaW50byBhbiBPYmplY3RcbiAqL1xuZnVuY3Rpb24gc2hvdWxkRGVlcENvcHlPYmplY3QodmFsdWU6IGFueSk6IHZhbHVlIGlzIE9iamVjdCB7XG5cdHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gY29weUFycmF5PFQ+KGFycmF5OiBUW10sIGluaGVyaXRlZDogYm9vbGVhbik6IFRbXSB7XG5cdHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24oaXRlbTogVCk6IFQge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG5cdFx0XHRyZXR1cm4gPGFueT5jb3B5QXJyYXkoPGFueT5pdGVtLCBpbmhlcml0ZWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiAhc2hvdWxkRGVlcENvcHlPYmplY3QoaXRlbSlcblx0XHRcdD8gaXRlbVxuXHRcdFx0OiBfbWl4aW4oe1xuXHRcdFx0XHRcdGRlZXA6IHRydWUsXG5cdFx0XHRcdFx0aW5oZXJpdGVkOiBpbmhlcml0ZWQsXG5cdFx0XHRcdFx0c291cmNlczogPEFycmF5PFQ+PltpdGVtXSxcblx0XHRcdFx0XHR0YXJnZXQ6IDxUPnt9XG5cdFx0XHRcdH0pO1xuXHR9KTtcbn1cblxuaW50ZXJmYWNlIE1peGluQXJnczxUIGV4dGVuZHMge30sIFUgZXh0ZW5kcyB7fT4ge1xuXHRkZWVwOiBib29sZWFuO1xuXHRpbmhlcml0ZWQ6IGJvb2xlYW47XG5cdHNvdXJjZXM6IChVIHwgbnVsbCB8IHVuZGVmaW5lZClbXTtcblx0dGFyZ2V0OiBUO1xuXHRjb3BpZWQ/OiBhbnlbXTtcbn1cblxuZnVuY3Rpb24gX21peGluPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9Pihrd0FyZ3M6IE1peGluQXJnczxULCBVPik6IFQgJiBVIHtcblx0Y29uc3QgZGVlcCA9IGt3QXJncy5kZWVwO1xuXHRjb25zdCBpbmhlcml0ZWQgPSBrd0FyZ3MuaW5oZXJpdGVkO1xuXHRjb25zdCB0YXJnZXQ6IGFueSA9IGt3QXJncy50YXJnZXQ7XG5cdGNvbnN0IGNvcGllZCA9IGt3QXJncy5jb3BpZWQgfHwgW107XG5cdGNvbnN0IGNvcGllZENsb25lID0gWy4uLmNvcGllZF07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrd0FyZ3Muc291cmNlcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGt3QXJncy5zb3VyY2VzW2ldO1xuXG5cdFx0aWYgKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGZvciAobGV0IGtleSBpbiBzb3VyY2UpIHtcblx0XHRcdGlmIChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcblx0XHRcdFx0bGV0IHZhbHVlOiBhbnkgPSBzb3VyY2Vba2V5XTtcblxuXHRcdFx0XHRpZiAoY29waWVkQ2xvbmUuaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGVlcCkge1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBjb3B5QXJyYXkodmFsdWUsIGluaGVyaXRlZCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzaG91bGREZWVwQ29weU9iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldFZhbHVlOiBhbnkgPSB0YXJnZXRba2V5XSB8fCB7fTtcblx0XHRcdFx0XHRcdGNvcGllZC5wdXNoKHNvdXJjZSk7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IF9taXhpbih7XG5cdFx0XHRcdFx0XHRcdGRlZXA6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluaGVyaXRlZDogaW5oZXJpdGVkLFxuXHRcdFx0XHRcdFx0XHRzb3VyY2VzOiBbdmFsdWVdLFxuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHRhcmdldFZhbHVlLFxuXHRcdFx0XHRcdFx0XHRjb3BpZWRcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0YXJnZXRba2V5XSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiA8VCAmIFU+dGFyZ2V0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgb2JqZWN0IGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSwgYW5kIGNvcGllcyBhbGwgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBvZiBvbmUgb3IgbW9yZVxuICogc291cmNlIG9iamVjdHMgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gcHJvdG90eXBlIFRoZSBwcm90b3R5cGUgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCBmcm9tXG4gKiBAcGFyYW0gbWl4aW5zIEFueSBudW1iZXIgb2Ygb2JqZWN0cyB3aG9zZSBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIHdpbGwgYmUgY29waWVkIHRvIHRoZSBjcmVhdGVkIG9iamVjdFxuICogQHJldHVybiBUaGUgbmV3IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlPFxuXHRUIGV4dGVuZHMge30sXG5cdFUgZXh0ZW5kcyB7fSxcblx0ViBleHRlbmRzIHt9LFxuXHRXIGV4dGVuZHMge30sXG5cdFggZXh0ZW5kcyB7fSxcblx0WSBleHRlbmRzIHt9LFxuXHRaIGV4dGVuZHMge31cbj4ocHJvdG90eXBlOiBULCBtaXhpbjE6IFUsIG1peGluMjogViwgbWl4aW4zOiBXLCBtaXhpbjQ6IFgsIG1peGluNTogWSwgbWl4aW42OiBaKTogVCAmIFUgJiBWICYgVyAmIFggJiBZICYgWjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30sIFkgZXh0ZW5kcyB7fT4oXG5cdHByb3RvdHlwZTogVCxcblx0bWl4aW4xOiBVLFxuXHRtaXhpbjI6IFYsXG5cdG1peGluMzogVyxcblx0bWl4aW40OiBYLFxuXHRtaXhpbjU6IFlcbik6IFQgJiBVICYgViAmIFcgJiBYICYgWTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30+KFxuXHRwcm90b3R5cGU6IFQsXG5cdG1peGluMTogVSxcblx0bWl4aW4yOiBWLFxuXHRtaXhpbjM6IFcsXG5cdG1peGluNDogWFxuKTogVCAmIFUgJiBWICYgVyAmIFg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30sIFcgZXh0ZW5kcyB7fT4oXG5cdHByb3RvdHlwZTogVCxcblx0bWl4aW4xOiBVLFxuXHRtaXhpbjI6IFYsXG5cdG1peGluMzogV1xuKTogVCAmIFUgJiBWICYgVztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fT4ocHJvdG90eXBlOiBULCBtaXhpbjE6IFUsIG1peGluMjogVik6IFQgJiBVICYgVjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30+KHByb3RvdHlwZTogVCwgbWl4aW46IFUpOiBUICYgVTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIHt9Pihwcm90b3R5cGU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGU6IGFueSwgLi4ubWl4aW5zOiBhbnlbXSk6IGFueSB7XG5cdGlmICghbWl4aW5zLmxlbmd0aCkge1xuXHRcdHRocm93IG5ldyBSYW5nZUVycm9yKCdsYW5nLmNyZWF0ZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWl4aW4gb2JqZWN0LicpO1xuXHR9XG5cblx0Y29uc3QgYXJncyA9IG1peGlucy5zbGljZSgpO1xuXHRhcmdzLnVuc2hpZnQoT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpKTtcblxuXHRyZXR1cm4gYXNzaWduLmFwcGx5KG51bGwsIGFyZ3MpO1xufVxuXG4vKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGFsbCBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIG9mIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIHRoZSB0YXJnZXQgb2JqZWN0LFxuICogcmVjdXJzaXZlbHkgY29weWluZyBhbGwgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cyBhcyB3ZWxsLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3QgdG8gcmVjZWl2ZSB2YWx1ZXMgZnJvbSBzb3VyY2Ugb2JqZWN0c1xuICogQHBhcmFtIHNvdXJjZXMgQW55IG51bWJlciBvZiBvYmplY3RzIHdob3NlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIHRhcmdldCBvYmplY3RcbiAqIEByZXR1cm4gVGhlIG1vZGlmaWVkIHRhcmdldCBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248XG5cdFQgZXh0ZW5kcyB7fSxcblx0VSBleHRlbmRzIHt9LFxuXHRWIGV4dGVuZHMge30sXG5cdFcgZXh0ZW5kcyB7fSxcblx0WCBleHRlbmRzIHt9LFxuXHRZIGV4dGVuZHMge30sXG5cdFogZXh0ZW5kcyB7fVxuPih0YXJnZXQ6IFQsIHNvdXJjZTE6IFUsIHNvdXJjZTI6IFYsIHNvdXJjZTM6IFcsIHNvdXJjZTQ6IFgsIHNvdXJjZTU6IFksIHNvdXJjZTY6IFopOiBUICYgVSAmIFYgJiBXICYgWCAmIFkgJiBaO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30sIFkgZXh0ZW5kcyB7fT4oXG5cdHRhcmdldDogVCxcblx0c291cmNlMTogVSxcblx0c291cmNlMjogVixcblx0c291cmNlMzogVyxcblx0c291cmNlNDogWCxcblx0c291cmNlNTogWVxuKTogVCAmIFUgJiBWICYgVyAmIFggJiBZO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30+KFxuXHR0YXJnZXQ6IFQsXG5cdHNvdXJjZTE6IFUsXG5cdHNvdXJjZTI6IFYsXG5cdHNvdXJjZTM6IFcsXG5cdHNvdXJjZTQ6IFhcbik6IFQgJiBVICYgViAmIFcgJiBYO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9Pihcblx0dGFyZ2V0OiBULFxuXHRzb3VyY2UxOiBVLFxuXHRzb3VyY2UyOiBWLFxuXHRzb3VyY2UzOiBXXG4pOiBUICYgVSAmIFYgJiBXO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fT4odGFyZ2V0OiBULCBzb3VyY2UxOiBVLCBzb3VyY2UyOiBWKTogVCAmIFUgJiBWO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30+KHRhcmdldDogVCwgc291cmNlOiBVKTogVCAmIFU7XG5leHBvcnQgZnVuY3Rpb24gZGVlcEFzc2lnbih0YXJnZXQ6IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnkge1xuXHRyZXR1cm4gX21peGluKHtcblx0XHRkZWVwOiB0cnVlLFxuXHRcdGluaGVyaXRlZDogZmFsc2UsXG5cdFx0c291cmNlczogc291cmNlcyxcblx0XHR0YXJnZXQ6IHRhcmdldFxuXHR9KTtcbn1cblxuLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBhbGwgZW51bWVyYWJsZSAob3duIG9yIGluaGVyaXRlZCkgcHJvcGVydGllcyBvZiBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAqIHRhcmdldCBvYmplY3QsIHJlY3Vyc2l2ZWx5IGNvcHlpbmcgYWxsIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMgYXMgd2VsbC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IHRvIHJlY2VpdmUgdmFsdWVzIGZyb20gc291cmNlIG9iamVjdHNcbiAqIEBwYXJhbSBzb3VyY2VzIEFueSBudW1iZXIgb2Ygb2JqZWN0cyB3aG9zZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIHRhcmdldCBvYmplY3RcbiAqIEByZXR1cm4gVGhlIG1vZGlmaWVkIHRhcmdldCBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNaXhpbjxcblx0VCBleHRlbmRzIHt9LFxuXHRVIGV4dGVuZHMge30sXG5cdFYgZXh0ZW5kcyB7fSxcblx0VyBleHRlbmRzIHt9LFxuXHRYIGV4dGVuZHMge30sXG5cdFkgZXh0ZW5kcyB7fSxcblx0WiBleHRlbmRzIHt9XG4+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogViwgc291cmNlMzogVywgc291cmNlNDogWCwgc291cmNlNTogWSwgc291cmNlNjogWik6IFQgJiBVICYgViAmIFcgJiBYICYgWSAmIFo7XG5leHBvcnQgZnVuY3Rpb24gZGVlcE1peGluPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30sIFcgZXh0ZW5kcyB7fSwgWCBleHRlbmRzIHt9LCBZIGV4dGVuZHMge30+KFxuXHR0YXJnZXQ6IFQsXG5cdHNvdXJjZTE6IFUsXG5cdHNvdXJjZTI6IFYsXG5cdHNvdXJjZTM6IFcsXG5cdHNvdXJjZTQ6IFgsXG5cdHNvdXJjZTU6IFlcbik6IFQgJiBVICYgViAmIFcgJiBYICYgWTtcbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWl4aW48VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30+KFxuXHR0YXJnZXQ6IFQsXG5cdHNvdXJjZTE6IFUsXG5cdHNvdXJjZTI6IFYsXG5cdHNvdXJjZTM6IFcsXG5cdHNvdXJjZTQ6IFhcbik6IFQgJiBVICYgViAmIFcgJiBYO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNaXhpbjxUIGV4dGVuZHMge30sIFUgZXh0ZW5kcyB7fSwgViBleHRlbmRzIHt9LCBXIGV4dGVuZHMge30+KFxuXHR0YXJnZXQ6IFQsXG5cdHNvdXJjZTE6IFUsXG5cdHNvdXJjZTI6IFYsXG5cdHNvdXJjZTM6IFdcbik6IFQgJiBVICYgViAmIFc7XG5leHBvcnQgZnVuY3Rpb24gZGVlcE1peGluPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogVik6IFQgJiBVICYgVjtcbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWl4aW48VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30+KHRhcmdldDogVCwgc291cmNlOiBVKTogVCAmIFU7XG5leHBvcnQgZnVuY3Rpb24gZGVlcE1peGluKHRhcmdldDogYW55LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFueSB7XG5cdHJldHVybiBfbWl4aW4oe1xuXHRcdGRlZXA6IHRydWUsXG5cdFx0aW5oZXJpdGVkOiB0cnVlLFxuXHRcdHNvdXJjZXM6IHNvdXJjZXMsXG5cdFx0dGFyZ2V0OiB0YXJnZXRcblx0fSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdXNpbmcgdGhlIHByb3ZpZGVkIHNvdXJjZSdzIHByb3RvdHlwZSBhcyB0aGUgcHJvdG90eXBlIGZvciB0aGUgbmV3IG9iamVjdCwgYW5kIHRoZW5cbiAqIGRlZXAgY29waWVzIHRoZSBwcm92aWRlZCBzb3VyY2UncyB2YWx1ZXMgaW50byB0aGUgbmV3IHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFRoZSBvYmplY3QgdG8gZHVwbGljYXRlXG4gKiBAcmV0dXJuIFRoZSBuZXcgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGU8VCBleHRlbmRzIHt9Pihzb3VyY2U6IFQpOiBUIHtcblx0Y29uc3QgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKSk7XG5cblx0cmV0dXJuIGRlZXBNaXhpbih0YXJnZXQsIHNvdXJjZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBhIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSBiIFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWU7IGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZGVudGljYWwoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRhID09PSBiIHx8XG5cdFx0LyogYm90aCB2YWx1ZXMgYXJlIE5hTiAqL1xuXHRcdChhICE9PSBhICYmIGIgIT09IGIpXG5cdCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYmluZHMgYSBtZXRob2QgdG8gdGhlIHNwZWNpZmllZCBvYmplY3QgYXQgcnVudGltZS4gVGhpcyBpcyBzaW1pbGFyIHRvXG4gKiBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgLCBidXQgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIGl0IHRha2VzIHRoZSBuYW1lIG9mIGEgbWV0aG9kIG9uIGFuIG9iamVjdC5cbiAqIEFzIGEgcmVzdWx0LCB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgYGxhdGVCaW5kYCB3aWxsIGFsd2F5cyBjYWxsIHRoZSBmdW5jdGlvbiBjdXJyZW50bHkgYXNzaWduZWQgdG9cbiAqIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgb24gdGhlIG9iamVjdCBhcyBvZiB0aGUgbW9tZW50IHRoZSBmdW5jdGlvbiBpdCByZXR1cm5zIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2UgVGhlIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gbWV0aG9kIFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgb24gdGhlIGNvbnRleHQgb2JqZWN0IHRvIGJpbmQgdG8gaXRzZWxmXG4gKiBAcGFyYW0gc3VwcGxpZWRBcmdzIEFuIG9wdGlvbmFsIGFycmF5IG9mIHZhbHVlcyB0byBwcmVwZW5kIHRvIHRoZSBgaW5zdGFuY2VbbWV0aG9kXWAgYXJndW1lbnRzIGxpc3RcbiAqIEByZXR1cm4gVGhlIGJvdW5kIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXRlQmluZChpbnN0YW5jZToge30sIG1ldGhvZDogc3RyaW5nLCAuLi5zdXBwbGllZEFyZ3M6IGFueVtdKTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkge1xuXHRyZXR1cm4gc3VwcGxpZWRBcmdzLmxlbmd0aFxuXHRcdD8gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNvbnN0IGFyZ3M6IGFueVtdID0gYXJndW1lbnRzLmxlbmd0aCA/IHN1cHBsaWVkQXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IHN1cHBsaWVkQXJncztcblxuXHRcdFx0XHQvLyBUUzcwMTdcblx0XHRcdFx0cmV0dXJuICg8YW55Pmluc3RhbmNlKVttZXRob2RdLmFwcGx5KGluc3RhbmNlLCBhcmdzKTtcblx0XHRcdH1cblx0XHQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBUUzcwMTdcblx0XHRcdFx0cmV0dXJuICg8YW55Pmluc3RhbmNlKVttZXRob2RdLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuXHRcdFx0fTtcbn1cblxuLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBhbGwgZW51bWVyYWJsZSAob3duIG9yIGluaGVyaXRlZCkgcHJvcGVydGllcyBvZiBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAqIHRhcmdldCBvYmplY3QuXG4gKlxuICogQHJldHVybiBUaGUgbW9kaWZpZWQgdGFyZ2V0IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWl4aW48VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30sIFkgZXh0ZW5kcyB7fSwgWiBleHRlbmRzIHt9Pihcblx0dGFyZ2V0OiBULFxuXHRzb3VyY2UxOiBVLFxuXHRzb3VyY2UyOiBWLFxuXHRzb3VyY2UzOiBXLFxuXHRzb3VyY2U0OiBYLFxuXHRzb3VyY2U1OiBZLFxuXHRzb3VyY2U2OiBaXG4pOiBUICYgVSAmIFYgJiBXICYgWCAmIFkgJiBaO1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30sIFcgZXh0ZW5kcyB7fSwgWCBleHRlbmRzIHt9LCBZIGV4dGVuZHMge30+KFxuXHR0YXJnZXQ6IFQsXG5cdHNvdXJjZTE6IFUsXG5cdHNvdXJjZTI6IFYsXG5cdHNvdXJjZTM6IFcsXG5cdHNvdXJjZTQ6IFgsXG5cdHNvdXJjZTU6IFlcbik6IFQgJiBVICYgViAmIFcgJiBYICYgWTtcbmV4cG9ydCBmdW5jdGlvbiBtaXhpbjxUIGV4dGVuZHMge30sIFUgZXh0ZW5kcyB7fSwgViBleHRlbmRzIHt9LCBXIGV4dGVuZHMge30sIFggZXh0ZW5kcyB7fT4oXG5cdHRhcmdldDogVCxcblx0c291cmNlMTogVSxcblx0c291cmNlMjogVixcblx0c291cmNlMzogVyxcblx0c291cmNlNDogWFxuKTogVCAmIFUgJiBWICYgVyAmIFg7XG5leHBvcnQgZnVuY3Rpb24gbWl4aW48VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9Pihcblx0dGFyZ2V0OiBULFxuXHRzb3VyY2UxOiBVLFxuXHRzb3VyY2UyOiBWLFxuXHRzb3VyY2UzOiBXXG4pOiBUICYgVSAmIFYgJiBXO1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogVik6IFQgJiBVICYgVjtcbmV4cG9ydCBmdW5jdGlvbiBtaXhpbjxUIGV4dGVuZHMge30sIFUgZXh0ZW5kcyB7fT4odGFyZ2V0OiBULCBzb3VyY2U6IFUpOiBUICYgVTtcbmV4cG9ydCBmdW5jdGlvbiBtaXhpbih0YXJnZXQ6IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnkge1xuXHRyZXR1cm4gX21peGluKHtcblx0XHRkZWVwOiBmYWxzZSxcblx0XHRpbmhlcml0ZWQ6IHRydWUsXG5cdFx0c291cmNlczogc291cmNlcyxcblx0XHR0YXJnZXQ6IHRhcmdldFxuXHR9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggaW52b2tlcyB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzIHByZXBlbmRlZCB0byBpdHMgYXJndW1lbnQgbGlzdC5cbiAqIExpa2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCwgYnV0IGRvZXMgbm90IGFsdGVyIGV4ZWN1dGlvbiBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXRGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBib3VuZFxuICogQHBhcmFtIHN1cHBsaWVkQXJncyBBbiBvcHRpb25hbCBhcnJheSBvZiBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aGUgYHRhcmdldEZ1bmN0aW9uYCBhcmd1bWVudHMgbGlzdFxuICogQHJldHVybiBUaGUgYm91bmQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWwodGFyZ2V0RnVuY3Rpb246ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCAuLi5zdXBwbGllZEFyZ3M6IGFueVtdKTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGhpczogYW55KSB7XG5cdFx0Y29uc3QgYXJnczogYW55W10gPSBhcmd1bWVudHMubGVuZ3RoID8gc3VwcGxpZWRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpIDogc3VwcGxpZWRBcmdzO1xuXG5cdFx0cmV0dXJuIHRhcmdldEZ1bmN0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBkZXN0cm95IG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgY2FsbHMgdGhlIHBhc3NlZC1pbiBkZXN0cnVjdG9yLlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGNyZWF0aW5nIFwicmVtb3ZlXCIgLyBcImRlc3Ryb3lcIiBoYW5kbGVycyBmb3JcbiAqIGV2ZW50IGxpc3RlbmVycywgdGltZXJzLCBldGMuXG4gKlxuICogQHBhcmFtIGRlc3RydWN0b3IgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGhhbmRsZSdzIGBkZXN0cm95YCBtZXRob2QgaXMgaW52b2tlZFxuICogQHJldHVybiBUaGUgaGFuZGxlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGFuZGxlKGRlc3RydWN0b3I6ICgpID0+IHZvaWQpOiBIYW5kbGUge1xuXHRsZXQgY2FsbGVkID0gZmFsc2U7XG5cdHJldHVybiB7XG5cdFx0ZGVzdHJveTogZnVuY3Rpb24odGhpczogSGFuZGxlKSB7XG5cdFx0XHRpZiAoIWNhbGxlZCkge1xuXHRcdFx0XHRjYWxsZWQgPSB0cnVlO1xuXHRcdFx0XHRkZXN0cnVjdG9yKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBzaW5nbGUgaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVzdHJveSBtdWx0aXBsZSBoYW5kbGVzIHNpbXVsdGFuZW91c2x5LlxuICpcbiAqIEBwYXJhbSBoYW5kbGVzIEFuIGFycmF5IG9mIGhhbmRsZXMgd2l0aCBgZGVzdHJveWAgbWV0aG9kc1xuICogQHJldHVybiBUaGUgaGFuZGxlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9zaXRlSGFuZGxlKC4uLmhhbmRsZXM6IEhhbmRsZVtdKTogSGFuZGxlIHtcblx0cmV0dXJuIGNyZWF0ZUhhbmRsZShmdW5jdGlvbigpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGhhbmRsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhbmRsZXNbaV0uZGVzdHJveSgpO1xuXHRcdH1cblx0fSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gbGFuZy50cyIsImltcG9ydCBoYXMsIHsgYWRkIH0gZnJvbSAnQGRvam8vaGFzL2hhcyc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJy4uL2dsb2JhbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGhhcztcbmV4cG9ydCAqIGZyb20gJ0Bkb2pvL2hhcy9oYXMnO1xuXG4vKiBFQ01BU2NyaXB0IDYgYW5kIDcgRmVhdHVyZXMgKi9cblxuLyogQXJyYXkgKi9cbmFkZChcblx0J2VzNi1hcnJheScsXG5cdCgpID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0Wydmcm9tJywgJ29mJ10uZXZlcnkoKGtleSkgPT4ga2V5IGluIGdsb2JhbC5BcnJheSkgJiZcblx0XHRcdFsnZmluZEluZGV4JywgJ2ZpbmQnLCAnY29weVdpdGhpbiddLmV2ZXJ5KChrZXkpID0+IGtleSBpbiBnbG9iYWwuQXJyYXkucHJvdG90eXBlKVxuXHRcdCk7XG5cdH0sXG5cdHRydWVcbik7XG5cbmFkZChcblx0J2VzNi1hcnJheS1maWxsJyxcblx0KCkgPT4ge1xuXHRcdGlmICgnZmlsbCcgaW4gZ2xvYmFsLkFycmF5LnByb3RvdHlwZSkge1xuXHRcdFx0LyogU29tZSB2ZXJzaW9ucyBvZiBTYWZhcmkgZG8gbm90IHByb3Blcmx5IGltcGxlbWVudCB0aGlzICovXG5cdFx0XHRyZXR1cm4gKDxhbnk+WzFdKS5maWxsKDksIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSlbMF0gPT09IDE7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0dHJ1ZVxuKTtcblxuYWRkKCdlczctYXJyYXknLCAoKSA9PiAnaW5jbHVkZXMnIGluIGdsb2JhbC5BcnJheS5wcm90b3R5cGUsIHRydWUpO1xuXG4vKiBNYXAgKi9cbmFkZChcblx0J2VzNi1tYXAnLFxuXHQoKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBnbG9iYWwuTWFwID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvKlxuXHRcdElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgTWFwIGZ1bmN0aW9uYWxpdHlcblx0XHRXZSB3cmFwIHRoaXMgaW4gYSB0cnkvY2F0Y2ggYmVjYXVzZSBzb21ldGltZXMgdGhlIE1hcCBjb25zdHJ1Y3RvciBleGlzdHMsIGJ1dCBkb2VzIG5vdFxuXHRcdHRha2UgYXJndW1lbnRzIChpT1MgOC40KVxuXHRcdCAqL1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgbWFwID0gbmV3IGdsb2JhbC5NYXAoW1swLCAxXV0pO1xuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0bWFwLmhhcygwKSAmJlxuXHRcdFx0XHRcdHR5cGVvZiBtYXAua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdFx0XHRcdGhhcygnZXM2LXN5bWJvbCcpICYmXG5cdFx0XHRcdFx0dHlwZW9mIG1hcC52YWx1ZXMgPT09ICdmdW5jdGlvbicgJiZcblx0XHRcdFx0XHR0eXBlb2YgbWFwLmVudHJpZXMgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQ6IG5vdCB0ZXN0aW5nIG9uIGlPUyBhdCB0aGUgbW9tZW50ICovXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG4vKiBNYXRoICovXG5hZGQoXG5cdCdlczYtbWF0aCcsXG5cdCgpID0+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0J2NsejMyJyxcblx0XHRcdCdzaWduJyxcblx0XHRcdCdsb2cxMCcsXG5cdFx0XHQnbG9nMicsXG5cdFx0XHQnbG9nMXAnLFxuXHRcdFx0J2V4cG0xJyxcblx0XHRcdCdjb3NoJyxcblx0XHRcdCdzaW5oJyxcblx0XHRcdCd0YW5oJyxcblx0XHRcdCdhY29zaCcsXG5cdFx0XHQnYXNpbmgnLFxuXHRcdFx0J2F0YW5oJyxcblx0XHRcdCd0cnVuYycsXG5cdFx0XHQnZnJvdW5kJyxcblx0XHRcdCdjYnJ0Jyxcblx0XHRcdCdoeXBvdCdcblx0XHRdLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgZ2xvYmFsLk1hdGhbbmFtZV0gPT09ICdmdW5jdGlvbicpO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG5hZGQoXG5cdCdlczYtbWF0aC1pbXVsJyxcblx0KCkgPT4ge1xuXHRcdGlmICgnaW11bCcgaW4gZ2xvYmFsLk1hdGgpIHtcblx0XHRcdC8qIFNvbWUgdmVyc2lvbnMgb2YgU2FmYXJpIG9uIGlvcyBkbyBub3QgcHJvcGVybHkgaW1wbGVtZW50IHRoaXMgKi9cblx0XHRcdHJldHVybiAoPGFueT5NYXRoKS5pbXVsKDB4ZmZmZmZmZmYsIDUpID09PSAtNTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG4vKiBPYmplY3QgKi9cbmFkZChcblx0J2VzNi1vYmplY3QnLFxuXHQoKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdGhhcygnZXM2LXN5bWJvbCcpICYmXG5cdFx0XHRbJ2Fzc2lnbicsICdpcycsICdnZXRPd25Qcm9wZXJ0eVN5bWJvbHMnLCAnc2V0UHJvdG90eXBlT2YnXS5ldmVyeShcblx0XHRcdFx0KG5hbWUpID0+IHR5cGVvZiBnbG9iYWwuT2JqZWN0W25hbWVdID09PSAnZnVuY3Rpb24nXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblx0dHJ1ZVxuKTtcblxuYWRkKFxuXHQnZXMyMDE3LW9iamVjdCcsXG5cdCgpID0+IHtcblx0XHRyZXR1cm4gWyd2YWx1ZXMnLCAnZW50cmllcycsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzJ10uZXZlcnkoXG5cdFx0XHQobmFtZSkgPT4gdHlwZW9mIGdsb2JhbC5PYmplY3RbbmFtZV0gPT09ICdmdW5jdGlvbidcblx0XHQpO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG4vKiBPYnNlcnZhYmxlICovXG5hZGQoJ2VzLW9ic2VydmFibGUnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLk9ic2VydmFibGUgIT09ICd1bmRlZmluZWQnLCB0cnVlKTtcblxuLyogUHJvbWlzZSAqL1xuYWRkKCdlczYtcHJvbWlzZScsICgpID0+IHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaGFzKCdlczYtc3ltYm9sJyksIHRydWUpO1xuXG4vKiBTZXQgKi9cbmFkZChcblx0J2VzNi1zZXQnLFxuXHQoKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBnbG9iYWwuU2V0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvKiBJRTExIGFuZCBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkgYXJlIG1pc3NpbmcgY3JpdGljYWwgRVM2IFNldCBmdW5jdGlvbmFsaXR5ICovXG5cdFx0XHRjb25zdCBzZXQgPSBuZXcgZ2xvYmFsLlNldChbMV0pO1xuXHRcdFx0cmV0dXJuIHNldC5oYXMoMSkgJiYgJ2tleXMnIGluIHNldCAmJiB0eXBlb2Ygc2V0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgaGFzKCdlczYtc3ltYm9sJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0dHJ1ZVxuKTtcblxuLyogU3RyaW5nICovXG5hZGQoXG5cdCdlczYtc3RyaW5nJyxcblx0KCkgPT4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHRbXG5cdFx0XHRcdC8qIHN0YXRpYyBtZXRob2RzICovXG5cdFx0XHRcdCdmcm9tQ29kZVBvaW50J1xuXHRcdFx0XS5ldmVyeSgoa2V5KSA9PiB0eXBlb2YgZ2xvYmFsLlN0cmluZ1trZXldID09PSAnZnVuY3Rpb24nKSAmJlxuXHRcdFx0W1xuXHRcdFx0XHQvKiBpbnN0YW5jZSBtZXRob2RzICovXG5cdFx0XHRcdCdjb2RlUG9pbnRBdCcsXG5cdFx0XHRcdCdub3JtYWxpemUnLFxuXHRcdFx0XHQncmVwZWF0Jyxcblx0XHRcdFx0J3N0YXJ0c1dpdGgnLFxuXHRcdFx0XHQnZW5kc1dpdGgnLFxuXHRcdFx0XHQnaW5jbHVkZXMnXG5cdFx0XHRdLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nLnByb3RvdHlwZVtrZXldID09PSAnZnVuY3Rpb24nKVxuXHRcdCk7XG5cdH0sXG5cdHRydWVcbik7XG5cbmFkZChcblx0J2VzNi1zdHJpbmctcmF3Jyxcblx0KCkgPT4ge1xuXHRcdGZ1bmN0aW9uIGdldENhbGxTaXRlKGNhbGxTaXRlOiBUZW1wbGF0ZVN0cmluZ3NBcnJheSwgLi4uc3Vic3RpdHV0aW9uczogYW55W10pIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFsuLi5jYWxsU2l0ZV07XG5cdFx0XHQocmVzdWx0IGFzIGFueSkucmF3ID0gY2FsbFNpdGUucmF3O1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRpZiAoJ3JhdycgaW4gZ2xvYmFsLlN0cmluZykge1xuXHRcdFx0bGV0IGIgPSAxO1xuXHRcdFx0bGV0IGNhbGxTaXRlID0gZ2V0Q2FsbFNpdGVgYVxcbiR7Yn1gO1xuXG5cdFx0XHQoY2FsbFNpdGUgYXMgYW55KS5yYXcgPSBbJ2FcXFxcbiddO1xuXHRcdFx0Y29uc3Qgc3VwcG9ydHNUcnVuYyA9IGdsb2JhbC5TdHJpbmcucmF3KGNhbGxTaXRlLCA0MikgPT09ICdhOlxcXFxuJztcblxuXHRcdFx0cmV0dXJuIHN1cHBvcnRzVHJ1bmM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG5hZGQoXG5cdCdlczIwMTctc3RyaW5nJyxcblx0KCkgPT4ge1xuXHRcdHJldHVybiBbJ3BhZFN0YXJ0JywgJ3BhZEVuZCddLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nLnByb3RvdHlwZVtrZXldID09PSAnZnVuY3Rpb24nKTtcblx0fSxcblx0dHJ1ZVxuKTtcblxuLyogU3ltYm9sICovXG5hZGQoJ2VzNi1zeW1ib2wnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLlN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbCgpID09PSAnc3ltYm9sJywgdHJ1ZSk7XG5cbi8qIFdlYWtNYXAgKi9cbmFkZChcblx0J2VzNi13ZWFrbWFwJyxcblx0KCkgPT4ge1xuXHRcdGlmICh0eXBlb2YgZ2xvYmFsLldlYWtNYXAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHQvKiBJRTExIGFuZCBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkgYXJlIG1pc3NpbmcgY3JpdGljYWwgRVM2IE1hcCBmdW5jdGlvbmFsaXR5ICovXG5cdFx0XHRjb25zdCBrZXkxID0ge307XG5cdFx0XHRjb25zdCBrZXkyID0ge307XG5cdFx0XHRjb25zdCBtYXAgPSBuZXcgZ2xvYmFsLldlYWtNYXAoW1trZXkxLCAxXV0pO1xuXHRcdFx0T2JqZWN0LmZyZWV6ZShrZXkxKTtcblx0XHRcdHJldHVybiBtYXAuZ2V0KGtleTEpID09PSAxICYmIG1hcC5zZXQoa2V5MiwgMikgPT09IG1hcCAmJiBoYXMoJ2VzNi1zeW1ib2wnKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG4vKiBNaXNjZWxsYW5lb3VzIGZlYXR1cmVzICovXG5hZGQoJ21pY3JvdGFza3MnLCAoKSA9PiBoYXMoJ2VzNi1wcm9taXNlJykgfHwgaGFzKCdob3N0LW5vZGUnKSB8fCBoYXMoJ2RvbS1tdXRhdGlvbm9ic2VydmVyJyksIHRydWUpO1xuYWRkKFxuXHQncG9zdG1lc3NhZ2UnLFxuXHQoKSA9PiB7XG5cdFx0Ly8gSWYgd2luZG93IGlzIHVuZGVmaW5lZCwgYW5kIHdlIGhhdmUgcG9zdE1lc3NhZ2UsIGl0IHByb2JhYmx5IG1lYW5zIHdlJ3JlIGluIGEgd2ViIHdvcmtlci4gV2ViIHdvcmtlcnMgaGF2ZVxuXHRcdC8vIHBvc3QgbWVzc2FnZSBidXQgaXQgZG9lc24ndCB3b3JrIGhvdyB3ZSBleHBlY3QgaXQgdG8sIHNvIGl0J3MgYmVzdCBqdXN0IHRvIHByZXRlbmQgaXQgZG9lc24ndCBleGlzdC5cblx0XHRyZXR1cm4gdHlwZW9mIGdsb2JhbC53aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBnbG9iYWwucG9zdE1lc3NhZ2UgPT09ICdmdW5jdGlvbic7XG5cdH0sXG5cdHRydWVcbik7XG5hZGQoJ3JhZicsICgpID0+IHR5cGVvZiBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nLCB0cnVlKTtcbmFkZCgnc2V0aW1tZWRpYXRlJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5zZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnLCB0cnVlKTtcblxuLyogRE9NIEZlYXR1cmVzICovXG5cbmFkZChcblx0J2RvbS1tdXRhdGlvbm9ic2VydmVyJyxcblx0KCkgPT4ge1xuXHRcdGlmIChoYXMoJ2hvc3QtYnJvd3NlcicpICYmIEJvb2xlYW4oZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpKSB7XG5cdFx0XHQvLyBJRTExIGhhcyBhbiB1bnJlbGlhYmxlIE11dGF0aW9uT2JzZXJ2ZXIgaW1wbGVtZW50YXRpb24gd2hlcmUgc2V0UHJvcGVydHkoKSBkb2VzIG5vdFxuXHRcdFx0Ly8gZ2VuZXJhdGUgYSBtdXRhdGlvbiBldmVudCwgb2JzZXJ2ZXJzIGNhbiBjcmFzaCwgYW5kIHRoZSBxdWV1ZSBkb2VzIG5vdCBkcmFpblxuXHRcdFx0Ly8gcmVsaWFibHkuIFRoZSBmb2xsb3dpbmcgZmVhdHVyZSB0ZXN0IHdhcyBhZGFwdGVkIGZyb21cblx0XHRcdC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3QxMGtvLzRhY2ViOGM3MTY4MWZkYjI3NWUzM2VmZTVlNTc2YjE0XG5cdFx0XHRjb25zdCBleGFtcGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHQvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSAqL1xuXHRcdFx0Y29uc3QgSG9zdE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcblx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IEhvc3RNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCkge30pO1xuXHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZShleGFtcGxlLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7XG5cblx0XHRcdGV4YW1wbGUuc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnYmxvY2snKTtcblxuXHRcdFx0cmV0dXJuIEJvb2xlYW4ob2JzZXJ2ZXIudGFrZVJlY29yZHMoKS5sZW5ndGgpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdHRydWVcbik7XG5cbmFkZChcblx0J2RvbS13ZWJhbmltYXRpb24nLFxuXHQoKSA9PiBoYXMoJ2hvc3QtYnJvd3NlcicpICYmIGdsb2JhbC5BbmltYXRpb24gIT09IHVuZGVmaW5lZCAmJiBnbG9iYWwuS2V5ZnJhbWVFZmZlY3QgIT09IHVuZGVmaW5lZCxcblx0dHJ1ZVxuKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBoYXMudHMiLCJpbXBvcnQgeyBpc0FycmF5TGlrZSwgSXRlcmFibGUsIEl0ZXJhYmxlSXRlcmF0b3IsIFNoaW1JdGVyYXRvciB9IGZyb20gJy4vaXRlcmF0b3InO1xuaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBpcyBhcyBvYmplY3RJcyB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgJy4vU3ltYm9sJztcblxuZXhwb3J0IGludGVyZmFjZSBNYXA8SywgVj4ge1xuXHQvKipcblx0ICogRGVsZXRlcyBhbGwga2V5cyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB2YWx1ZXMuXG5cdCAqL1xuXHRjbGVhcigpOiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGEgZ2l2ZW4ga2V5IGFuZCBpdHMgYXNzb2NpYXRlZCB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIGtleSBUaGUga2V5IHRvIGRlbGV0ZVxuXHQgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGtleSBleGlzdHMsIGZhbHNlIGlmIGl0IGRvZXMgbm90XG5cdCAqL1xuXHRkZWxldGUoa2V5OiBLKTogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBlYWNoIGtleS92YWx1ZSBwYWlyIGFzIGFuIGFycmF5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIGZvciBlYWNoIGtleS92YWx1ZSBwYWlyIGluIHRoZSBpbnN0YW5jZS5cblx0ICovXG5cdGVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbSywgVl0+O1xuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyBhIGdpdmVuIGZ1bmN0aW9uIGZvciBlYWNoIG1hcCBlbnRyeS4gVGhlIGZ1bmN0aW9uXG5cdCAqIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSBlbGVtZW50IHZhbHVlLCB0aGVcblx0ICogZWxlbWVudCBrZXksIGFuZCB0aGUgYXNzb2NpYXRlZCBNYXAgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBjYWxsYmFja2ZuIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGZvciBlYWNoIG1hcCBlbnRyeSxcblx0ICogQHBhcmFtIHRoaXNBcmcgVGhlIHZhbHVlIHRvIHVzZSBmb3IgYHRoaXNgIGZvciBlYWNoIGV4ZWN1dGlvbiBvZiB0aGUgY2FsYmFja1xuXHQgKi9cblx0Zm9yRWFjaChjYWxsYmFja2ZuOiAodmFsdWU6IFYsIGtleTogSywgbWFwOiBNYXA8SywgVj4pID0+IHZvaWQsIHRoaXNBcmc/OiBhbnkpOiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBrZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBsb29rIHVwXG5cdCAqIEByZXR1cm4gVGhlIHZhbHVlIGlmIG9uZSBleGlzdHMgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRnZXQoa2V5OiBLKTogViB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBlYWNoIGtleSBpbiB0aGUgbWFwLlxuXHQgKlxuXHQgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgdGhlIGluc3RhbmNlJ3Mga2V5cy5cblx0ICovXG5cdGtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxLPjtcblxuXHQvKipcblx0ICogQ2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSBnaXZlbiBrZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBjaGVjayBmb3Jcblx0ICogQHJldHVybiB0cnVlIGlmIHRoZSBrZXkgZXhpc3RzLCBmYWxzZSBpZiBpdCBkb2VzIG5vdFxuXHQgKi9cblx0aGFzKGtleTogSyk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGtleS5cblx0ICpcblx0ICogQHBhcmFtIGtleSBUaGUga2V5IHRvIGRlZmluZSBhIHZhbHVlIHRvXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduXG5cdCAqIEByZXR1cm4gVGhlIE1hcCBpbnN0YW5jZVxuXHQgKi9cblx0c2V0KGtleTogSywgdmFsdWU6IFYpOiB0aGlzO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yga2V5IC8gdmFsdWUgcGFpcnMgaW4gdGhlIE1hcC5cblx0ICovXG5cdHJlYWRvbmx5IHNpemU6IG51bWJlcjtcblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBlYWNoIHZhbHVlIGluIHRoZSBtYXAuXG5cdCAqXG5cdCAqIEByZXR1cm4gQW4gaXRlcmF0b3IgY29udGFpbmluZyB0aGUgaW5zdGFuY2UncyB2YWx1ZXMuXG5cdCAqL1xuXHR2YWx1ZXMoKTogSXRlcmFibGVJdGVyYXRvcjxWPjtcblxuXHQvKiogUmV0dXJucyBhbiBpdGVyYWJsZSBvZiBlbnRyaWVzIGluIHRoZSBtYXAuICovXG5cdFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0ssIFZdPjtcblxuXHRyZWFkb25seSBbU3ltYm9sLnRvU3RyaW5nVGFnXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcENvbnN0cnVjdG9yIHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgTWFwXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKi9cblx0bmV3ICgpOiBNYXA8YW55LCBhbnk+O1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IE1hcFxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICpcblx0ICogQHBhcmFtIGl0ZXJhdG9yXG5cdCAqIEFycmF5IG9yIGl0ZXJhdG9yIGNvbnRhaW5pbmcgdHdvLWl0ZW0gdHVwbGVzIHVzZWQgdG8gaW5pdGlhbGx5IHBvcHVsYXRlIHRoZSBtYXAuXG5cdCAqIFRoZSBmaXJzdCBpdGVtIGluIGVhY2ggdHVwbGUgY29ycmVzcG9uZHMgdG8gdGhlIGtleSBvZiB0aGUgbWFwIGVudHJ5LlxuXHQgKiBUaGUgc2Vjb25kIGl0ZW0gY29ycmVzcG9uZHMgdG8gdGhlIHZhbHVlIG9mIHRoZSBtYXAgZW50cnkuXG5cdCAqL1xuXHRuZXcgPEssIFY+KGl0ZXJhdG9yPzogW0ssIFZdW10pOiBNYXA8SywgVj47XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgTWFwXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcGFyYW0gaXRlcmF0b3Jcblx0ICogQXJyYXkgb3IgaXRlcmF0b3IgY29udGFpbmluZyB0d28taXRlbSB0dXBsZXMgdXNlZCB0byBpbml0aWFsbHkgcG9wdWxhdGUgdGhlIG1hcC5cblx0ICogVGhlIGZpcnN0IGl0ZW0gaW4gZWFjaCB0dXBsZSBjb3JyZXNwb25kcyB0byB0aGUga2V5IG9mIHRoZSBtYXAgZW50cnkuXG5cdCAqIFRoZSBzZWNvbmQgaXRlbSBjb3JyZXNwb25kcyB0byB0aGUgdmFsdWUgb2YgdGhlIG1hcCBlbnRyeS5cblx0ICovXG5cdG5ldyA8SywgVj4oaXRlcmF0b3I6IEl0ZXJhYmxlPFtLLCBWXT4pOiBNYXA8SywgVj47XG5cblx0cmVhZG9ubHkgcHJvdG90eXBlOiBNYXA8YW55LCBhbnk+O1xuXG5cdHJlYWRvbmx5IFtTeW1ib2wuc3BlY2llc106IE1hcENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgbGV0IE1hcDogTWFwQ29uc3RydWN0b3IgPSBnbG9iYWwuTWFwO1xuXG5pZiAoIWhhcygnZXM2LW1hcCcpKSB7XG5cdE1hcCA9IGNsYXNzIE1hcDxLLCBWPiB7XG5cdFx0cHJvdGVjdGVkIHJlYWRvbmx5IF9rZXlzOiBLW10gPSBbXTtcblx0XHRwcm90ZWN0ZWQgcmVhZG9ubHkgX3ZhbHVlczogVltdID0gW107XG5cblx0XHQvKipcblx0XHQgKiBBbiBhbHRlcm5hdGl2ZSB0byBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB1c2luZyBPYmplY3QuaXNcblx0XHQgKiB0byBjaGVjayBmb3IgZXF1YWxpdHkuIFNlZSBodHRwOi8vbXpsLmxhLzF6dUtPMlZcblx0XHQgKi9cblx0XHRwcm90ZWN0ZWQgX2luZGV4T2ZLZXkoa2V5czogS1tdLCBrZXk6IEspOiBudW1iZXIge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKG9iamVjdElzKGtleXNbaV0sIGtleSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblxuXHRcdHN0YXRpYyBbU3ltYm9sLnNwZWNpZXNdID0gTWFwO1xuXG5cdFx0Y29uc3RydWN0b3IoaXRlcmFibGU/OiBBcnJheUxpa2U8W0ssIFZdPiB8IEl0ZXJhYmxlPFtLLCBWXT4pIHtcblx0XHRcdGlmIChpdGVyYWJsZSkge1xuXHRcdFx0XHRpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpdGVyYWJsZVtpXTtcblx0XHRcdFx0XHRcdHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Z2V0IHNpemUoKTogbnVtYmVyIHtcblx0XHRcdHJldHVybiB0aGlzLl9rZXlzLmxlbmd0aDtcblx0XHR9XG5cblx0XHRjbGVhcigpOiB2b2lkIHtcblx0XHRcdHRoaXMuX2tleXMubGVuZ3RoID0gdGhpcy5fdmFsdWVzLmxlbmd0aCA9IDA7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlKGtleTogSyk6IGJvb2xlYW4ge1xuXHRcdFx0Y29uc3QgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XG5cdFx0XHRpZiAoaW5kZXggPCAwKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2tleXMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdHRoaXMuX3ZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0ZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtLLCBWXT4ge1xuXHRcdFx0Y29uc3QgdmFsdWVzID0gdGhpcy5fa2V5cy5tYXAoKGtleTogSywgaTogbnVtYmVyKTogW0ssIFZdID0+IHtcblx0XHRcdFx0cmV0dXJuIFtrZXksIHRoaXMuX3ZhbHVlc1tpXV07XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIG5ldyBTaGltSXRlcmF0b3IodmFsdWVzKTtcblx0XHR9XG5cblx0XHRmb3JFYWNoKGNhbGxiYWNrOiAodmFsdWU6IFYsIGtleTogSywgbWFwSW5zdGFuY2U6IE1hcDxLLCBWPikgPT4gYW55LCBjb250ZXh0Pzoge30pIHtcblx0XHRcdGNvbnN0IGtleXMgPSB0aGlzLl9rZXlzO1xuXHRcdFx0Y29uc3QgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y2FsbGJhY2suY2FsbChjb250ZXh0LCB2YWx1ZXNbaV0sIGtleXNbaV0sIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGdldChrZXk6IEspOiBWIHwgdW5kZWZpbmVkIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xuXHRcdFx0cmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IHRoaXMuX3ZhbHVlc1tpbmRleF07XG5cdFx0fVxuXG5cdFx0aGFzKGtleTogSyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KSA+IC0xO1xuXHRcdH1cblxuXHRcdGtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxLPiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih0aGlzLl9rZXlzKTtcblx0XHR9XG5cblx0XHRzZXQoa2V5OiBLLCB2YWx1ZTogVik6IE1hcDxLLCBWPiB7XG5cdFx0XHRsZXQgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XG5cdFx0XHRpbmRleCA9IGluZGV4IDwgMCA/IHRoaXMuX2tleXMubGVuZ3RoIDogaW5kZXg7XG5cdFx0XHR0aGlzLl9rZXlzW2luZGV4XSA9IGtleTtcblx0XHRcdHRoaXMuX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHZhbHVlcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFY+IHtcblx0XHRcdHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHRoaXMuX3ZhbHVlcyk7XG5cdFx0fVxuXG5cdFx0W1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSywgVl0+IHtcblx0XHRcdHJldHVybiB0aGlzLmVudHJpZXMoKTtcblx0XHR9XG5cblx0XHRbU3ltYm9sLnRvU3RyaW5nVGFnXTogJ01hcCcgPSAnTWFwJztcblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFwO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIE1hcC50cyIsImltcG9ydCB7IFRoZW5hYmxlIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgcXVldWVNaWNyb1Rhc2sgfSBmcm9tICcuL3N1cHBvcnQvcXVldWUnO1xuaW1wb3J0IHsgSXRlcmFibGUgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCAnLi9TeW1ib2wnO1xuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcblxuLyoqXG4gKiBFeGVjdXRvciBpcyB0aGUgaW50ZXJmYWNlIGZvciBmdW5jdGlvbnMgdXNlZCB0byBpbml0aWFsaXplIGEgUHJvbWlzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRvcjxUPiB7XG5cdC8qKlxuXHQgKiBUaGUgZXhlY3V0b3IgZm9yIHRoZSBwcm9taXNlXG5cdCAqXG5cdCAqIEBwYXJhbSByZXNvbHZlIFRoZSByZXNvbHZlciBjYWxsYmFjayBvZiB0aGUgcHJvbWlzZVxuXHQgKiBAcGFyYW0gcmVqZWN0IFRoZSByZWplY3RvciBjYWxsYmFjayBvZiB0aGUgcHJvbWlzZVxuXHQgKi9cblx0KHJlc29sdmU6ICh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKTogdm9pZDtcbn1cblxuZXhwb3J0IGxldCBTaGltUHJvbWlzZTogdHlwZW9mIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcblxuZXhwb3J0IGNvbnN0IGlzVGhlbmFibGUgPSBmdW5jdGlvbiBpc1RoZW5hYmxlPFQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQcm9taXNlTGlrZTxUPiB7XG5cdHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cbmlmICghaGFzKCdlczYtcHJvbWlzZScpKSB7XG5cdGNvbnN0IGVudW0gU3RhdGUge1xuXHRcdEZ1bGZpbGxlZCxcblx0XHRQZW5kaW5nLFxuXHRcdFJlamVjdGVkXG5cdH1cblxuXHRnbG9iYWwuUHJvbWlzZSA9IFNoaW1Qcm9taXNlID0gY2xhc3MgUHJvbWlzZTxUPiBpbXBsZW1lbnRzIFRoZW5hYmxlPFQ+IHtcblx0XHRzdGF0aWMgYWxsKGl0ZXJhYmxlOiBJdGVyYWJsZTxhbnkgfCBQcm9taXNlTGlrZTxhbnk+PiB8IChhbnkgfCBQcm9taXNlTGlrZTxhbnk+KVtdKTogUHJvbWlzZTxhbnk+IHtcblx0XHRcdHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWVzOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRsZXQgY29tcGxldGUgPSAwO1xuXHRcdFx0XHRsZXQgdG90YWwgPSAwO1xuXHRcdFx0XHRsZXQgcG9wdWxhdGluZyA9IHRydWU7XG5cblx0XHRcdFx0ZnVuY3Rpb24gZnVsZmlsbChpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XG5cdFx0XHRcdFx0dmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuXHRcdFx0XHRcdCsrY29tcGxldGU7XG5cdFx0XHRcdFx0ZmluaXNoKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmdW5jdGlvbiBmaW5pc2goKTogdm9pZCB7XG5cdFx0XHRcdFx0aWYgKHBvcHVsYXRpbmcgfHwgY29tcGxldGUgPCB0b3RhbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXNvbHZlKHZhbHVlcyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmdW5jdGlvbiBwcm9jZXNzSXRlbShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiB2b2lkIHtcblx0XHRcdFx0XHQrK3RvdGFsO1xuXHRcdFx0XHRcdGlmIChpc1RoZW5hYmxlKGl0ZW0pKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiBhbiBpdGVtIFByb21pc2UgcmVqZWN0cywgdGhpcyBQcm9taXNlIGlzIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggdGhlIGl0ZW1cblx0XHRcdFx0XHRcdC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXG5cdFx0XHRcdFx0XHRpdGVtLnRoZW4oZnVsZmlsbC5iaW5kKG51bGwsIGluZGV4KSwgcmVqZWN0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4oZnVsZmlsbC5iaW5kKG51bGwsIGluZGV4KSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGkgPSAwO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG5cdFx0XHRcdFx0cHJvY2Vzc0l0ZW0oaSwgdmFsdWUpO1xuXHRcdFx0XHRcdGkrKztcblx0XHRcdFx0fVxuXHRcdFx0XHRwb3B1bGF0aW5nID0gZmFsc2U7XG5cblx0XHRcdFx0ZmluaXNoKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRzdGF0aWMgcmFjZTxUPihpdGVyYWJsZTogSXRlcmFibGU8VCB8IFByb21pc2VMaWtlPFQ+PiB8IChUIHwgUHJvbWlzZUxpa2U8VD4pW10pOiBQcm9taXNlPFRbXT4ge1xuXHRcdFx0cmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uKHJlc29sdmU6ICh2YWx1ZT86IGFueSkgPT4gdm9pZCwgcmVqZWN0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBpdGVyYWJsZSkge1xuXHRcdFx0XHRcdGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgYSBQcm9taXNlIGl0ZW0gcmVqZWN0cywgdGhpcyBQcm9taXNlIGlzIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggdGhlIGl0ZW1cblx0XHRcdFx0XHRcdC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXG5cdFx0XHRcdFx0XHRpdGVtLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4ocmVzb2x2ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRzdGF0aWMgcmVqZWN0KHJlYXNvbj86IGFueSk6IFByb21pc2U8bmV2ZXI+IHtcblx0XHRcdHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdFx0cmVqZWN0KHJlYXNvbik7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRzdGF0aWMgcmVzb2x2ZSgpOiBQcm9taXNlPHZvaWQ+O1xuXHRcdHN0YXRpYyByZXNvbHZlPFQ+KHZhbHVlOiBUIHwgUHJvbWlzZUxpa2U8VD4pOiBQcm9taXNlPFQ+O1xuXHRcdHN0YXRpYyByZXNvbHZlPFQ+KHZhbHVlPzogYW55KTogUHJvbWlzZTxUPiB7XG5cdFx0XHRyZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKDxUPnZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHN0YXRpYyBbU3ltYm9sLnNwZWNpZXNdOiBQcm9taXNlQ29uc3RydWN0b3IgPSBTaGltUHJvbWlzZSBhcyBQcm9taXNlQ29uc3RydWN0b3I7XG5cblx0XHQvKipcblx0XHQgKiBDcmVhdGVzIGEgbmV3IFByb21pc2UuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBleGVjdXRvclxuXHRcdCAqIFRoZSBleGVjdXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgUHJvbWlzZSBpcyBpbnN0YW50aWF0ZWQuIEl0IGlzIHJlc3BvbnNpYmxlIGZvclxuXHRcdCAqIHN0YXJ0aW5nIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoZW4gaXQgaXMgaW52b2tlZC5cblx0XHQgKlxuXHRcdCAqIFRoZSBleGVjdXRvciBtdXN0IGNhbGwgZWl0aGVyIHRoZSBwYXNzZWQgYHJlc29sdmVgIGZ1bmN0aW9uIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZFxuXHRcdCAqIHN1Y2Nlc3NmdWxseSwgb3IgdGhlIGByZWplY3RgIGZ1bmN0aW9uIHdoZW4gdGhlIG9wZXJhdGlvbiBmYWlscy5cblx0XHQgKi9cblx0XHRjb25zdHJ1Y3RvcihleGVjdXRvcjogRXhlY3V0b3I8VD4pIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogSWYgdHJ1ZSwgdGhlIHJlc29sdXRpb24gb2YgdGhpcyBwcm9taXNlIGlzIGNoYWluZWQgKFwibG9ja2VkIGluXCIpIHRvIGFub3RoZXIgcHJvbWlzZS5cblx0XHRcdCAqL1xuXHRcdFx0bGV0IGlzQ2hhaW5lZCA9IGZhbHNlO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIFdoZXRoZXIgb3Igbm90IHRoaXMgcHJvbWlzZSBpcyBpbiBhIHJlc29sdmVkIHN0YXRlLlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBpc1Jlc29sdmVkID0gKCk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdGF0ZSAhPT0gU3RhdGUuUGVuZGluZyB8fCBpc0NoYWluZWQ7XG5cdFx0XHR9O1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIENhbGxiYWNrcyB0aGF0IHNob3VsZCBiZSBpbnZva2VkIG9uY2UgdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC5cblx0XHRcdCAqL1xuXHRcdFx0bGV0IGNhbGxiYWNrczogbnVsbCB8IChBcnJheTwoKSA9PiB2b2lkPikgPSBbXTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbml0aWFsbHkgcHVzaGVzIGNhbGxiYWNrcyBvbnRvIGEgcXVldWUgZm9yIGV4ZWN1dGlvbiBvbmNlIHRoaXMgcHJvbWlzZSBzZXR0bGVzLiBBZnRlciB0aGUgcHJvbWlzZSBzZXR0bGVzLFxuXHRcdFx0ICogZW5xdWV1ZXMgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgZXZlbnQgbG9vcCB0dXJuLlxuXHRcdFx0ICovXG5cdFx0XHRsZXQgd2hlbkZpbmlzaGVkID0gZnVuY3Rpb24oY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrcykge1xuXHRcdFx0XHRcdGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBTZXR0bGVzIHRoaXMgcHJvbWlzZS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXG5cdFx0XHQgKiBAcGFyYW0ge1R8YW55fSB2YWx1ZSBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgcHJvbWlzZS5cblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgc2V0dGxlID0gKG5ld1N0YXRlOiBTdGF0ZSwgdmFsdWU6IGFueSk6IHZvaWQgPT4ge1xuXHRcdFx0XHQvLyBBIHByb21pc2UgY2FuIG9ubHkgYmUgc2V0dGxlZCBvbmNlLlxuXHRcdFx0XHRpZiAodGhpcy5zdGF0ZSAhPT0gU3RhdGUuUGVuZGluZykge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcblx0XHRcdFx0dGhpcy5yZXNvbHZlZFZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdHdoZW5GaW5pc2hlZCA9IHF1ZXVlTWljcm9UYXNrO1xuXG5cdFx0XHRcdC8vIE9ubHkgZW5xdWV1ZSBhIGNhbGxiYWNrIHJ1bm5lciBpZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHNvIHRoYXQgaW5pdGlhbGx5IGZ1bGZpbGxlZCBQcm9taXNlcyBkb24ndCBoYXZlIHRvXG5cdFx0XHRcdC8vIHdhaXQgYW4gZXh0cmEgdHVybi5cblx0XHRcdFx0aWYgKGNhbGxiYWNrcyAmJiBjYWxsYmFja3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHF1ZXVlTWljcm9UYXNrKGZ1bmN0aW9uKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrcykge1xuXHRcdFx0XHRcdFx0XHRsZXQgY291bnQgPSBjYWxsYmFja3MubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcblx0XHRcdFx0XHRcdFx0XHRjYWxsYmFja3NbaV0uY2FsbChudWxsKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjYWxsYmFja3MgPSBudWxsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJlc29sdmVzIHRoaXMgcHJvbWlzZS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXG5cdFx0XHQgKiBAcGFyYW0ge1R8YW55fSB2YWx1ZSBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgcHJvbWlzZS5cblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgcmVzb2x2ZSA9IChuZXdTdGF0ZTogU3RhdGUsIHZhbHVlOiBhbnkpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKGlzUmVzb2x2ZWQoKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc1RoZW5hYmxlKHZhbHVlKSkge1xuXHRcdFx0XHRcdHZhbHVlLnRoZW4oc2V0dGxlLmJpbmQobnVsbCwgU3RhdGUuRnVsZmlsbGVkKSwgc2V0dGxlLmJpbmQobnVsbCwgU3RhdGUuUmVqZWN0ZWQpKTtcblx0XHRcdFx0XHRpc0NoYWluZWQgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNldHRsZShuZXdTdGF0ZSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLnRoZW4gPSA8VFJlc3VsdDEgPSBULCBUUmVzdWx0MiA9IG5ldmVyPihcblx0XHRcdFx0b25GdWxmaWxsZWQ/OiAoKHZhbHVlOiBUKSA9PiBUUmVzdWx0MSB8IFByb21pc2VMaWtlPFRSZXN1bHQxPikgfCB1bmRlZmluZWQgfCBudWxsLFxuXHRcdFx0XHRvblJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgdW5kZWZpbmVkIHwgbnVsbFxuXHRcdFx0KTogUHJvbWlzZTxUUmVzdWx0MSB8IFRSZXN1bHQyPiA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0Ly8gd2hlbkZpbmlzaGVkIGluaXRpYWxseSBxdWV1ZXMgdXAgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gYWZ0ZXIgdGhlIHByb21pc2UgaGFzIHNldHRsZWQuIE9uY2UgdGhlXG5cdFx0XHRcdFx0Ly8gcHJvbWlzZSBoYXMgc2V0dGxlZCwgd2hlbkZpbmlzaGVkIHdpbGwgc2NoZWR1bGUgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgdHVybiB0aHJvdWdoIHRoZVxuXHRcdFx0XHRcdC8vIGV2ZW50IGxvb3AuXG5cdFx0XHRcdFx0d2hlbkZpbmlzaGVkKCgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGNhbGxiYWNrOiAoKHZhbHVlPzogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkIHwgbnVsbCA9XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUgPT09IFN0YXRlLlJlamVjdGVkID8gb25SZWplY3RlZCA6IG9uRnVsZmlsbGVkO1xuXG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShjYWxsYmFjayh0aGlzLnJlc29sdmVkVmFsdWUpKTtcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IFN0YXRlLlJlamVjdGVkKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0aGlzLnJlc29sdmVkVmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0aGlzLnJlc29sdmVkVmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGV4ZWN1dG9yKHJlc29sdmUuYmluZChudWxsLCBTdGF0ZS5GdWxmaWxsZWQpLCByZXNvbHZlLmJpbmQobnVsbCwgU3RhdGUuUmVqZWN0ZWQpKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHNldHRsZShTdGF0ZS5SZWplY3RlZCwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNhdGNoPFRSZXN1bHQgPSBuZXZlcj4oXG5cdFx0XHRvblJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdCB8IFByb21pc2VMaWtlPFRSZXN1bHQ+KSB8IHVuZGVmaW5lZCB8IG51bGxcblx0XHQpOiBQcm9taXNlPFQgfCBUUmVzdWx0PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBwcm9taXNlLlxuXHRcdCAqL1xuXHRcdHByaXZhdGUgc3RhdGUgPSBTdGF0ZS5QZW5kaW5nO1xuXG5cdFx0LyoqXG5cdFx0ICogVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHByb21pc2UuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7VHxhbnl9XG5cdFx0ICovXG5cdFx0cHJpdmF0ZSByZXNvbHZlZFZhbHVlOiBhbnk7XG5cblx0XHR0aGVuOiA8VFJlc3VsdDEgPSBULCBUUmVzdWx0MiA9IG5ldmVyPihcblx0XHRcdG9uZnVsZmlsbGVkPzogKCh2YWx1ZTogVCkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgdW5kZWZpbmVkIHwgbnVsbCxcblx0XHRcdG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCB1bmRlZmluZWQgfCBudWxsXG5cdFx0KSA9PiBQcm9taXNlPFRSZXN1bHQxIHwgVFJlc3VsdDI+O1xuXG5cdFx0W1N5bWJvbC50b1N0cmluZ1RhZ106ICdQcm9taXNlJyA9ICdQcm9taXNlJztcblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2hpbVByb21pc2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gUHJvbWlzZS50cyIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgaXNBcnJheUxpa2UsIEl0ZXJhYmxlLCBJdGVyYWJsZUl0ZXJhdG9yLCBTaGltSXRlcmF0b3IgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgJy4vU3ltYm9sJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXQ8VD4ge1xuXHQvKipcblx0ICogQWRkcyBhIGB2YWx1ZWAgdG8gdGhlIGBTZXRgXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYWRkIHRvIHRoZSBzZXRcblx0ICogQHJldHVybnMgVGhlIGluc3RhbmNlIG9mIHRoZSBgU2V0YFxuXHQgKi9cblx0YWRkKHZhbHVlOiBUKTogdGhpcztcblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbGwgdGhlIHZhbHVlcyBmcm9tIHRoZSBgU2V0YC5cblx0ICovXG5cdGNsZWFyKCk6IHZvaWQ7XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBgdmFsdWVgIGZyb20gdGhlIHNldFxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHJlbW92ZWRcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSB3YXMgcmVtb3ZlZFxuXHQgKi9cblx0ZGVsZXRlKHZhbHVlOiBUKTogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBlYWNoIGVudHJ5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIGZvciBlYWNoIGtleS92YWx1ZSBwYWlyIGluIHRoZSBpbnN0YW5jZS5cblx0ICovXG5cdGVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbVCwgVF0+O1xuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyBhIGdpdmVuIGZ1bmN0aW9uIGZvciBlYWNoIHNldCBlbnRyeS4gVGhlIGZ1bmN0aW9uXG5cdCAqIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSBlbGVtZW50IHZhbHVlLCB0aGVcblx0ICogZWxlbWVudCBrZXksIGFuZCB0aGUgYXNzb2NpYXRlZCBgU2V0YCBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIGNhbGxiYWNrZm4gVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZm9yIGVhY2ggbWFwIGVudHJ5LFxuXHQgKiBAcGFyYW0gdGhpc0FyZyBUaGUgdmFsdWUgdG8gdXNlIGZvciBgdGhpc2AgZm9yIGVhY2ggZXhlY3V0aW9uIG9mIHRoZSBjYWxiYWNrXG5cdCAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrZm46ICh2YWx1ZTogVCwgdmFsdWUyOiBULCBzZXQ6IFNldDxUPikgPT4gdm9pZCwgdGhpc0FyZz86IGFueSk6IHZvaWQ7XG5cblx0LyoqXG5cdCAqIElkZW50aWZpZXMgaWYgYSB2YWx1ZSBpcyBwYXJ0IG9mIHRoZSBzZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2tcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBwYXJ0IG9mIHRoZSBzZXQgb3RoZXJ3aXNlIGBmYWxzZWBcblx0ICovXG5cdGhhcyh2YWx1ZTogVCk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERlc3BpdGUgaXRzIG5hbWUsIHJldHVybnMgYW4gaXRlcmFibGUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgc2V0LFxuXHQgKi9cblx0a2V5cygpOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+O1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIGluIHRoZSBgU2V0YC5cblx0ICovXG5cdHJlYWRvbmx5IHNpemU6IG51bWJlcjtcblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBpdGVyYWJsZSBvZiB2YWx1ZXMgaW4gdGhlIHNldC5cblx0ICovXG5cdHZhbHVlcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+O1xuXG5cdC8qKiBJdGVyYXRlcyBvdmVyIHZhbHVlcyBpbiB0aGUgc2V0LiAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+O1xuXG5cdHJlYWRvbmx5IFtTeW1ib2wudG9TdHJpbmdUYWddOiAnU2V0Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXRDb25zdHJ1Y3RvciB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFNldFxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICovXG5cdG5ldyAoKTogU2V0PGFueT47XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgU2V0XG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcGFyYW0gaXRlcmF0b3IgVGhlIGl0ZXJhYmxlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplIHRoZSBzZXQgd2l0aFxuXHQgKi9cblx0bmV3IDxUPihpdGVyYXRvcj86IFRbXSk6IFNldDxUPjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBTZXRcblx0ICpcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqXG5cdCAqIEBwYXJhbSBpdGVyYXRvciBUaGUgaXRlcmFibGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUgdGhlIHNldCB3aXRoXG5cdCAqL1xuXHRuZXcgPFQ+KGl0ZXJhdG9yOiBJdGVyYWJsZTxUPik6IFNldDxUPjtcblxuXHRyZWFkb25seSBwcm90b3R5cGU6IFNldDxhbnk+O1xufVxuXG5leHBvcnQgbGV0IFNldDogU2V0Q29uc3RydWN0b3IgPSBnbG9iYWwuU2V0O1xuXG5pZiAoIWhhcygnZXM2LXNldCcpKSB7XG5cdFNldCA9IGNsYXNzIFNldDxUPiB7XG5cdFx0cHJpdmF0ZSByZWFkb25seSBfc2V0RGF0YTogVFtdID0gW107XG5cblx0XHRzdGF0aWMgW1N5bWJvbC5zcGVjaWVzXSA9IFNldDtcblxuXHRcdGNvbnN0cnVjdG9yKGl0ZXJhYmxlPzogQXJyYXlMaWtlPFQ+IHwgSXRlcmFibGU8VD4pIHtcblx0XHRcdGlmIChpdGVyYWJsZSkge1xuXHRcdFx0XHRpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0dGhpcy5hZGQoaXRlcmFibGVbaV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmFkZCh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YWRkKHZhbHVlOiBUKTogdGhpcyB7XG5cdFx0XHRpZiAodGhpcy5oYXModmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fc2V0RGF0YS5wdXNoKHZhbHVlKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNsZWFyKCk6IHZvaWQge1xuXHRcdFx0dGhpcy5fc2V0RGF0YS5sZW5ndGggPSAwO1xuXHRcdH1cblxuXHRcdGRlbGV0ZSh2YWx1ZTogVCk6IGJvb2xlYW4ge1xuXHRcdFx0Y29uc3QgaWR4ID0gdGhpcy5fc2V0RGF0YS5pbmRleE9mKHZhbHVlKTtcblx0XHRcdGlmIChpZHggPT09IC0xKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3NldERhdGEuc3BsaWNlKGlkeCwgMSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W1QsIFRdPiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNoaW1JdGVyYXRvcjxbYW55LCBhbnldPih0aGlzLl9zZXREYXRhLm1hcDxbYW55LCBhbnldPigodmFsdWUpID0+IFt2YWx1ZSwgdmFsdWVdKSk7XG5cdFx0fVxuXG5cdFx0Zm9yRWFjaChjYWxsYmFja2ZuOiAodmFsdWU6IFQsIGluZGV4OiBULCBzZXQ6IFNldDxUPikgPT4gdm9pZCwgdGhpc0FyZz86IGFueSk6IHZvaWQge1xuXHRcdFx0Y29uc3QgaXRlcmF0b3IgPSB0aGlzLnZhbHVlcygpO1xuXHRcdFx0bGV0IHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcblx0XHRcdHdoaWxlICghcmVzdWx0LmRvbmUpIHtcblx0XHRcdFx0Y2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsIHJlc3VsdC52YWx1ZSwgcmVzdWx0LnZhbHVlLCB0aGlzKTtcblx0XHRcdFx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhhcyh2YWx1ZTogVCk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3NldERhdGEuaW5kZXhPZih2YWx1ZSkgPiAtMTtcblx0XHR9XG5cblx0XHRrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8VD4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTaGltSXRlcmF0b3IodGhpcy5fc2V0RGF0YSk7XG5cdFx0fVxuXG5cdFx0Z2V0IHNpemUoKTogbnVtYmVyIHtcblx0XHRcdHJldHVybiB0aGlzLl9zZXREYXRhLmxlbmd0aDtcblx0XHR9XG5cblx0XHR2YWx1ZXMoKTogSXRlcmFibGVJdGVyYXRvcjxUPiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih0aGlzLl9zZXREYXRhKTtcblx0XHR9XG5cblx0XHRbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcblx0XHRcdHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHRoaXMuX3NldERhdGEpO1xuXHRcdH1cblxuXHRcdFtTeW1ib2wudG9TdHJpbmdUYWddOiAnU2V0JyA9ICdTZXQnO1xuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZXQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gU2V0LnRzIiwiaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgZ2V0VmFsdWVEZXNjcmlwdG9yIH0gZnJvbSAnLi9zdXBwb3J0L3V0aWwnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBTeW1ib2xDb25zdHJ1Y3RvciB7XG5cdFx0b2JzZXJ2YWJsZTogc3ltYm9sO1xuXHR9XG59XG5cbmV4cG9ydCBsZXQgU3ltYm9sOiBTeW1ib2xDb25zdHJ1Y3RvciA9IGdsb2JhbC5TeW1ib2w7XG5cbmlmICghaGFzKCdlczYtc3ltYm9sJykpIHtcblx0LyoqXG5cdCAqIFRocm93cyBpZiB0aGUgdmFsdWUgaXMgbm90IGEgc3ltYm9sLCB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBTaGltXG5cdCAqIEBwYXJhbSAge2FueX0gICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXG5cdCAqIEByZXR1cm4ge3N5bWJvbH0gICAgICAgUmV0dXJucyB0aGUgc3ltYm9sIG9yIHRocm93c1xuXHQgKi9cblx0Y29uc3QgdmFsaWRhdGVTeW1ib2wgPSBmdW5jdGlvbiB2YWxpZGF0ZVN5bWJvbCh2YWx1ZTogYW55KTogc3ltYm9sIHtcblx0XHRpZiAoIWlzU3ltYm9sKHZhbHVlKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcih2YWx1ZSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fTtcblxuXHRjb25zdCBkZWZpbmVQcm9wZXJ0aWVzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG5cdGNvbnN0IGRlZmluZVByb3BlcnR5OiAoXG5cdFx0bzogYW55LFxuXHRcdHA6IHN0cmluZyB8IHN5bWJvbCxcblx0XHRhdHRyaWJ1dGVzOiBQcm9wZXJ0eURlc2NyaXB0b3IgJiBUaGlzVHlwZTxhbnk+XG5cdCkgPT4gYW55ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5IGFzIGFueTtcblx0Y29uc3QgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuXHRjb25zdCBvYmpQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuXG5cdGNvbnN0IGdsb2JhbFN5bWJvbHM6IHsgW2tleTogc3RyaW5nXTogc3ltYm9sIH0gPSB7fTtcblxuXHRjb25zdCBnZXRTeW1ib2xOYW1lID0gKGZ1bmN0aW9uKCkge1xuXHRcdGNvbnN0IGNyZWF0ZWQgPSBjcmVhdGUobnVsbCk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGRlc2M6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG5cdFx0XHRsZXQgcG9zdGZpeCA9IDA7XG5cdFx0XHRsZXQgbmFtZTogc3RyaW5nO1xuXHRcdFx0d2hpbGUgKGNyZWF0ZWRbU3RyaW5nKGRlc2MpICsgKHBvc3RmaXggfHwgJycpXSkge1xuXHRcdFx0XHQrK3Bvc3RmaXg7XG5cdFx0XHR9XG5cdFx0XHRkZXNjICs9IFN0cmluZyhwb3N0Zml4IHx8ICcnKTtcblx0XHRcdGNyZWF0ZWRbZGVzY10gPSB0cnVlO1xuXHRcdFx0bmFtZSA9ICdAQCcgKyBkZXNjO1xuXG5cdFx0XHQvLyBGSVhNRTogVGVtcG9yYXJ5IGd1YXJkIHVudGlsIHRoZSBkdXBsaWNhdGUgZXhlY3V0aW9uIHdoZW4gdGVzdGluZyBjYW4gYmVcblx0XHRcdC8vIHBpbm5lZCBkb3duLlxuXHRcdFx0aWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9ialByb3RvdHlwZSwgbmFtZSkpIHtcblx0XHRcdFx0ZGVmaW5lUHJvcGVydHkob2JqUHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRcdFx0c2V0OiBmdW5jdGlvbih0aGlzOiBTeW1ib2wsIHZhbHVlOiBhbnkpIHtcblx0XHRcdFx0XHRcdGRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIGdldFZhbHVlRGVzY3JpcHRvcih2YWx1ZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH07XG5cdH0pKCk7XG5cblx0Y29uc3QgSW50ZXJuYWxTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2wodGhpczogYW55LCBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bWJlcik6IHN5bWJvbCB7XG5cdFx0aWYgKHRoaXMgaW5zdGFuY2VvZiBJbnRlcm5hbFN5bWJvbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcblx0XHR9XG5cdFx0cmV0dXJuIFN5bWJvbChkZXNjcmlwdGlvbik7XG5cdH07XG5cblx0U3ltYm9sID0gZ2xvYmFsLlN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCh0aGlzOiBTeW1ib2wsIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVtYmVyKTogc3ltYm9sIHtcblx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIFN5bWJvbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcblx0XHR9XG5cdFx0Y29uc3Qgc3ltID0gT2JqZWN0LmNyZWF0ZShJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUpO1xuXHRcdGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKGRlc2NyaXB0aW9uKTtcblx0XHRyZXR1cm4gZGVmaW5lUHJvcGVydGllcyhzeW0sIHtcblx0XHRcdF9fZGVzY3JpcHRpb25fXzogZ2V0VmFsdWVEZXNjcmlwdG9yKGRlc2NyaXB0aW9uKSxcblx0XHRcdF9fbmFtZV9fOiBnZXRWYWx1ZURlc2NyaXB0b3IoZ2V0U3ltYm9sTmFtZShkZXNjcmlwdGlvbikpXG5cdFx0fSk7XG5cdH0gYXMgU3ltYm9sQ29uc3RydWN0b3I7XG5cblx0LyogRGVjb3JhdGUgdGhlIFN5bWJvbCBmdW5jdGlvbiB3aXRoIHRoZSBhcHByb3ByaWF0ZSBwcm9wZXJ0aWVzICovXG5cdGRlZmluZVByb3BlcnR5KFxuXHRcdFN5bWJvbCxcblx0XHQnZm9yJyxcblx0XHRnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24oa2V5OiBzdHJpbmcpOiBzeW1ib2wge1xuXHRcdFx0aWYgKGdsb2JhbFN5bWJvbHNba2V5XSkge1xuXHRcdFx0XHRyZXR1cm4gZ2xvYmFsU3ltYm9sc1trZXldO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIChnbG9iYWxTeW1ib2xzW2tleV0gPSBTeW1ib2woU3RyaW5nKGtleSkpKTtcblx0XHR9KVxuXHQpO1xuXHRkZWZpbmVQcm9wZXJ0aWVzKFN5bWJvbCwge1xuXHRcdGtleUZvcjogZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uKHN5bTogc3ltYm9sKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRcdGxldCBrZXk6IHN0cmluZztcblx0XHRcdHZhbGlkYXRlU3ltYm9sKHN5bSk7XG5cdFx0XHRmb3IgKGtleSBpbiBnbG9iYWxTeW1ib2xzKSB7XG5cdFx0XHRcdGlmIChnbG9iYWxTeW1ib2xzW2tleV0gPT09IHN5bSkge1xuXHRcdFx0XHRcdHJldHVybiBrZXk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSxcblx0XHRoYXNJbnN0YW5jZTogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ2hhc0luc3RhbmNlJyksIGZhbHNlLCBmYWxzZSksXG5cdFx0aXNDb25jYXRTcHJlYWRhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaXNDb25jYXRTcHJlYWRhYmxlJyksIGZhbHNlLCBmYWxzZSksXG5cdFx0aXRlcmF0b3I6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdpdGVyYXRvcicpLCBmYWxzZSwgZmFsc2UpLFxuXHRcdG1hdGNoOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignbWF0Y2gnKSwgZmFsc2UsIGZhbHNlKSxcblx0XHRvYnNlcnZhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignb2JzZXJ2YWJsZScpLCBmYWxzZSwgZmFsc2UpLFxuXHRcdHJlcGxhY2U6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdyZXBsYWNlJyksIGZhbHNlLCBmYWxzZSksXG5cdFx0c2VhcmNoOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignc2VhcmNoJyksIGZhbHNlLCBmYWxzZSksXG5cdFx0c3BlY2llczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwZWNpZXMnKSwgZmFsc2UsIGZhbHNlKSxcblx0XHRzcGxpdDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwbGl0JyksIGZhbHNlLCBmYWxzZSksXG5cdFx0dG9QcmltaXRpdmU6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCd0b1ByaW1pdGl2ZScpLCBmYWxzZSwgZmFsc2UpLFxuXHRcdHRvU3RyaW5nVGFnOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigndG9TdHJpbmdUYWcnKSwgZmFsc2UsIGZhbHNlKSxcblx0XHR1bnNjb3BhYmxlczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3Vuc2NvcGFibGVzJyksIGZhbHNlLCBmYWxzZSlcblx0fSk7XG5cblx0LyogRGVjb3JhdGUgdGhlIEludGVybmFsU3ltYm9sIG9iamVjdCAqL1xuXHRkZWZpbmVQcm9wZXJ0aWVzKEludGVybmFsU3ltYm9sLnByb3RvdHlwZSwge1xuXHRcdGNvbnN0cnVjdG9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sKSxcblx0XHR0b1N0cmluZzogZ2V0VmFsdWVEZXNjcmlwdG9yKFxuXHRcdFx0ZnVuY3Rpb24odGhpczogeyBfX25hbWVfXzogc3RyaW5nIH0pIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX19uYW1lX187XG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRmYWxzZVxuXHRcdClcblx0fSk7XG5cblx0LyogRGVjb3JhdGUgdGhlIFN5bWJvbC5wcm90b3R5cGUgKi9cblx0ZGVmaW5lUHJvcGVydGllcyhTeW1ib2wucHJvdG90eXBlLCB7XG5cdFx0dG9TdHJpbmc6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbih0aGlzOiBTeW1ib2wpIHtcblx0XHRcdHJldHVybiAnU3ltYm9sICgnICsgKDxhbnk+dmFsaWRhdGVTeW1ib2wodGhpcykpLl9fZGVzY3JpcHRpb25fXyArICcpJztcblx0XHR9KSxcblx0XHR2YWx1ZU9mOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24odGhpczogU3ltYm9sKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7XG5cdFx0fSlcblx0fSk7XG5cblx0ZGVmaW5lUHJvcGVydHkoXG5cdFx0U3ltYm9sLnByb3RvdHlwZSxcblx0XHRTeW1ib2wudG9QcmltaXRpdmUsXG5cdFx0Z2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uKHRoaXM6IFN5bWJvbCkge1xuXHRcdFx0cmV0dXJuIHZhbGlkYXRlU3ltYm9sKHRoaXMpO1xuXHRcdH0pXG5cdCk7XG5cdGRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZ2V0VmFsdWVEZXNjcmlwdG9yKCdTeW1ib2wnLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcblxuXHRkZWZpbmVQcm9wZXJ0eShcblx0XHRJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsXG5cdFx0U3ltYm9sLnRvUHJpbWl0aXZlLFxuXHRcdGdldFZhbHVlRGVzY3JpcHRvcigoPGFueT5TeW1ib2wpLnByb3RvdHlwZVtTeW1ib2wudG9QcmltaXRpdmVdLCBmYWxzZSwgZmFsc2UsIHRydWUpXG5cdCk7XG5cdGRlZmluZVByb3BlcnR5KFxuXHRcdEludGVybmFsU3ltYm9sLnByb3RvdHlwZSxcblx0XHRTeW1ib2wudG9TdHJpbmdUYWcsXG5cdFx0Z2V0VmFsdWVEZXNjcmlwdG9yKCg8YW55PlN5bWJvbCkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10sIGZhbHNlLCBmYWxzZSwgdHJ1ZSlcblx0KTtcbn1cblxuLyoqXG4gKiBBIGN1c3RvbSBndWFyZCBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgaWYgYW4gb2JqZWN0IGlzIGEgc3ltYm9sIG9yIG5vdFxuICogQHBhcmFtICB7YW55fSAgICAgICB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2sgdG8gc2VlIGlmIGl0IGlzIGEgc3ltYm9sIG9yIG5vdFxuICogQHJldHVybiB7aXMgc3ltYm9sfSAgICAgICBSZXR1cm5zIHRydWUgaWYgYSBzeW1ib2wgb3Igbm90IChhbmQgbmFycm93cyB0aGUgdHlwZSBndWFyZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBzeW1ib2wge1xuXHRyZXR1cm4gKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8IHZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSkgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogRmlsbCBhbnkgbWlzc2luZyB3ZWxsIGtub3duIHN5bWJvbHMgaWYgdGhlIG5hdGl2ZSBTeW1ib2wgaXMgbWlzc2luZyB0aGVtXG4gKi9cbltcblx0J2hhc0luc3RhbmNlJyxcblx0J2lzQ29uY2F0U3ByZWFkYWJsZScsXG5cdCdpdGVyYXRvcicsXG5cdCdzcGVjaWVzJyxcblx0J3JlcGxhY2UnLFxuXHQnc2VhcmNoJyxcblx0J3NwbGl0Jyxcblx0J21hdGNoJyxcblx0J3RvUHJpbWl0aXZlJyxcblx0J3RvU3RyaW5nVGFnJyxcblx0J3Vuc2NvcGFibGVzJyxcblx0J29ic2VydmFibGUnXG5dLmZvckVhY2goKHdlbGxLbm93bikgPT4ge1xuXHRpZiAoIShTeW1ib2wgYXMgYW55KVt3ZWxsS25vd25dKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFN5bWJvbCwgd2VsbEtub3duLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcih3ZWxsS25vd24pLCBmYWxzZSwgZmFsc2UpKTtcblx0fVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBTeW1ib2wudHMiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IGlzQXJyYXlMaWtlLCBJdGVyYWJsZSB9IGZyb20gJy4vaXRlcmF0b3InO1xuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcbmltcG9ydCAnLi9TeW1ib2wnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdlYWtNYXA8SyBleHRlbmRzIG9iamVjdCwgVj4ge1xuXHQvKipcblx0ICogUmVtb3ZlIGEgYGtleWAgZnJvbSB0aGUgbWFwXG5cdCAqXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmVcblx0ICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHZhbHVlIHdhcyByZW1vdmVkLCBvdGhlcndpc2UgYGZhbHNlYFxuXHQgKi9cblx0ZGVsZXRlKGtleTogSyk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSB2YWx1ZSwgYmFzZWQgb24gdGhlIHN1cHBsaWVkIGBrZXlgXG5cdCAqXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZXRyaWV2ZSB0aGUgYHZhbHVlYCBmb3Jcblx0ICogQHJldHVybiB0aGUgYHZhbHVlYCBiYXNlZCBvbiB0aGUgYGtleWAgaWYgZm91bmQsIG90aGVyd2lzZSBgZmFsc2VgXG5cdCAqL1xuXHRnZXQoa2V5OiBLKTogViB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiBhIGBrZXlgIGlzIHByZXNlbnQgaW4gdGhlIG1hcFxuXHQgKlxuXHQgKiBAcGFyYW0ga2V5IFRoZSBga2V5YCB0byBjaGVja1xuXHQgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUga2V5IGlzIHBhcnQgb2YgdGhlIG1hcCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG5cdCAqL1xuXHRoYXMoa2V5OiBLKTogYm9vbGVhbjtcblxuXHQvKipcblx0ICogU2V0IGEgYHZhbHVlYCBmb3IgYSBwYXJ0aWN1bGFyIGBrZXlgLlxuXHQgKlxuXHQgKiBAcGFyYW0ga2V5IFRoZSBga2V5YCB0byBzZXQgdGhlIGB2YWx1ZWAgZm9yXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgYHZhbHVlYCB0byBzZXRcblx0ICogQHJldHVybiB0aGUgaW5zdGFuY2VzXG5cdCAqL1xuXHRzZXQoa2V5OiBLLCB2YWx1ZTogVik6IHRoaXM7XG5cblx0cmVhZG9ubHkgW1N5bWJvbC50b1N0cmluZ1RhZ106ICdXZWFrTWFwJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWFrTWFwQ29uc3RydWN0b3Ige1xuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgYFdlYWtNYXBgXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKi9cblx0bmV3ICgpOiBXZWFrTWFwPG9iamVjdCwgYW55PjtcblxuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgYFdlYWtNYXBgXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcGFyYW0gaXRlcmFibGUgQW4gaXRlcmFibGUgdGhhdCBjb250YWlucyB5aWVsZHMgdXAga2V5L3ZhbHVlIHBhaXIgZW50cmllc1xuXHQgKi9cblx0bmV3IDxLIGV4dGVuZHMgb2JqZWN0LCBWPihpdGVyYWJsZT86IFtLLCBWXVtdKTogV2Vha01hcDxLLCBWPjtcblxuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgYFdlYWtNYXBgXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcGFyYW0gaXRlcmFibGUgQW4gaXRlcmFibGUgdGhhdCBjb250YWlucyB5aWVsZHMgdXAga2V5L3ZhbHVlIHBhaXIgZW50cmllc1xuXHQgKi9cblx0bmV3IDxLIGV4dGVuZHMgb2JqZWN0LCBWPihpdGVyYWJsZTogSXRlcmFibGU8W0ssIFZdPik6IFdlYWtNYXA8SywgVj47XG5cblx0cmVhZG9ubHkgcHJvdG90eXBlOiBXZWFrTWFwPG9iamVjdCwgYW55Pjtcbn1cblxuZXhwb3J0IGxldCBXZWFrTWFwOiBXZWFrTWFwQ29uc3RydWN0b3IgPSBnbG9iYWwuV2Vha01hcDtcblxuaW50ZXJmYWNlIEVudHJ5PEssIFY+IHtcblx0a2V5OiBLO1xuXHR2YWx1ZTogVjtcbn1cblxuaWYgKCFoYXMoJ2VzNi13ZWFrbWFwJykpIHtcblx0Y29uc3QgREVMRVRFRDogYW55ID0ge307XG5cblx0Y29uc3QgZ2V0VUlEID0gZnVuY3Rpb24gZ2V0VUlEKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCk7XG5cdH07XG5cblx0Y29uc3QgZ2VuZXJhdGVOYW1lID0gKGZ1bmN0aW9uKCkge1xuXHRcdGxldCBzdGFydElkID0gTWF0aC5mbG9vcihEYXRlLm5vdygpICUgMTAwMDAwMDAwKTtcblxuXHRcdHJldHVybiBmdW5jdGlvbiBnZW5lcmF0ZU5hbWUoKTogc3RyaW5nIHtcblx0XHRcdHJldHVybiAnX193bScgKyBnZXRVSUQoKSArIChzdGFydElkKysgKyAnX18nKTtcblx0XHR9O1xuXHR9KSgpO1xuXG5cdFdlYWtNYXAgPSBjbGFzcyBXZWFrTWFwPEssIFY+IHtcblx0XHRwcml2YXRlIHJlYWRvbmx5IF9uYW1lOiBzdHJpbmc7XG5cdFx0cHJpdmF0ZSByZWFkb25seSBfZnJvemVuRW50cmllczogRW50cnk8SywgVj5bXTtcblxuXHRcdGNvbnN0cnVjdG9yKGl0ZXJhYmxlPzogQXJyYXlMaWtlPFtLLCBWXT4gfCBJdGVyYWJsZTxbSywgVl0+KSB7XG5cdFx0XHR0aGlzLl9uYW1lID0gZ2VuZXJhdGVOYW1lKCk7XG5cblx0XHRcdHRoaXMuX2Zyb3plbkVudHJpZXMgPSBbXTtcblxuXHRcdFx0aWYgKGl0ZXJhYmxlKSB7XG5cdFx0XHRcdGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gaXRlcmFibGVbaV07XG5cdFx0XHRcdFx0XHR0aGlzLnNldChpdGVtWzBdLCBpdGVtWzFdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaXRlcmFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0KGtleSwgdmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHByaXZhdGUgX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5OiBhbnkpOiBudW1iZXIge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9mcm96ZW5FbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9mcm96ZW5FbnRyaWVzW2ldLmtleSA9PT0ga2V5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblxuXHRcdGRlbGV0ZShrZXk6IGFueSk6IGJvb2xlYW4ge1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGVudHJ5OiBFbnRyeTxLLCBWPiA9IGtleVt0aGlzLl9uYW1lXTtcblx0XHRcdGlmIChlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkge1xuXHRcdFx0XHRlbnRyeS52YWx1ZSA9IERFTEVURUQ7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcblx0XHRcdGlmIChmcm96ZW5JbmRleCA+PSAwKSB7XG5cdFx0XHRcdHRoaXMuX2Zyb3plbkVudHJpZXMuc3BsaWNlKGZyb3plbkluZGV4LCAxKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRnZXQoa2V5OiBhbnkpOiBWIHwgdW5kZWZpbmVkIHtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZW50cnk6IEVudHJ5PEssIFY+ID0ga2V5W3RoaXMuX25hbWVdO1xuXHRcdFx0aWYgKGVudHJ5ICYmIGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSB7XG5cdFx0XHRcdHJldHVybiBlbnRyeS52YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZnJvemVuSW5kZXggPSB0aGlzLl9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSk7XG5cdFx0XHRpZiAoZnJvemVuSW5kZXggPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZnJvemVuRW50cmllc1tmcm96ZW5JbmRleF0udmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFzKGtleTogYW55KTogYm9vbGVhbiB7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZW50cnk6IEVudHJ5PEssIFY+ID0ga2V5W3RoaXMuX25hbWVdO1xuXHRcdFx0aWYgKEJvb2xlYW4oZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURUQpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcblx0XHRcdGlmIChmcm96ZW5JbmRleCA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0c2V0KGtleTogYW55LCB2YWx1ZT86IGFueSk6IHRoaXMge1xuXHRcdFx0aWYgKCFrZXkgfHwgKHR5cGVvZiBrZXkgIT09ICdvYmplY3QnICYmIHR5cGVvZiBrZXkgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdmFsdWUgdXNlZCBhcyB3ZWFrIG1hcCBrZXknKTtcblx0XHRcdH1cblx0XHRcdGxldCBlbnRyeTogRW50cnk8SywgVj4gPSBrZXlbdGhpcy5fbmFtZV07XG5cdFx0XHRpZiAoIWVudHJ5IHx8IGVudHJ5LmtleSAhPT0ga2V5KSB7XG5cdFx0XHRcdGVudHJ5ID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7XG5cdFx0XHRcdFx0a2V5OiB7IHZhbHVlOiBrZXkgfVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoT2JqZWN0LmlzRnJvemVuKGtleSkpIHtcblx0XHRcdFx0XHR0aGlzLl9mcm96ZW5FbnRyaWVzLnB1c2goZW50cnkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMuX25hbWUsIHtcblx0XHRcdFx0XHRcdHZhbHVlOiBlbnRyeVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbnRyeS52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0W1N5bWJvbC50b1N0cmluZ1RhZ106ICdXZWFrTWFwJyA9ICdXZWFrTWFwJztcblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgV2Vha01hcDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBXZWFrTWFwLnRzIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBpc0FycmF5TGlrZSwgaXNJdGVyYWJsZSwgSXRlcmFibGUgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCB7IE1BWF9TQUZFX0lOVEVHRVIgfSBmcm9tICcuL251bWJlcic7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0IHsgd3JhcE5hdGl2ZSB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBNYXBDYWxsYmFjazxULCBVPiB7XG5cdC8qKlxuXHQgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gbWFwcGluZ1xuXHQgKlxuXHQgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBtYXBwZWRcblx0ICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBlbGVtZW50XG5cdCAqL1xuXHQoZWxlbWVudDogVCwgaW5kZXg6IG51bWJlcik6IFU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmluZENhbGxiYWNrPFQ+IHtcblx0LyoqXG5cdCAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB1c2luZyBmaW5kXG5cdCAqXG5cdCAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRoYXQgaXMgY3VycmVudHkgYmVpbmcgYW5hbHlzZWRcblx0ICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBlbGVtZW50IHRoYXQgaXMgYmVpbmcgYW5hbHlzZWRcblx0ICogQHBhcmFtIGFycmF5IFRoZSBzb3VyY2UgYXJyYXlcblx0ICovXG5cdChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogQXJyYXlMaWtlPFQ+KTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFdyaXRhYmxlQXJyYXlMaWtlPFQ+IHtcblx0cmVhZG9ubHkgbGVuZ3RoOiBudW1iZXI7XG5cdFtuOiBudW1iZXJdOiBUO1xufVxuXG4vKiBFUzYgQXJyYXkgc3RhdGljIG1ldGhvZHMgKi9cblxuZXhwb3J0IGludGVyZmFjZSBGcm9tIHtcblx0LyoqXG5cdCAqIFRoZSBBcnJheS5mcm9tKCkgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgQXJyYXkgaW5zdGFuY2UgZnJvbSBhbiBhcnJheS1saWtlIG9yIGl0ZXJhYmxlIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHNvdXJjZSBBbiBhcnJheS1saWtlIG9yIGl0ZXJhYmxlIG9iamVjdCB0byBjb252ZXJ0IHRvIGFuIGFycmF5XG5cdCAqIEBwYXJhbSBtYXBGdW5jdGlvbiBBIG1hcCBmdW5jdGlvbiB0byBjYWxsIG9uIGVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXlcblx0ICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgbWFwIGZ1bmN0aW9uXG5cdCAqIEByZXR1cm4gVGhlIG5ldyBBcnJheVxuXHQgKi9cblx0PFQsIFU+KHNvdXJjZTogQXJyYXlMaWtlPFQ+IHwgSXRlcmFibGU8VD4sIG1hcEZ1bmN0aW9uOiBNYXBDYWxsYmFjazxULCBVPiwgdGhpc0FyZz86IGFueSk6IEFycmF5PFU+O1xuXG5cdC8qKlxuXHQgKiBUaGUgQXJyYXkuZnJvbSgpIG1ldGhvZCBjcmVhdGVzIGEgbmV3IEFycmF5IGluc3RhbmNlIGZyb20gYW4gYXJyYXktbGlrZSBvciBpdGVyYWJsZSBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBzb3VyY2UgQW4gYXJyYXktbGlrZSBvciBpdGVyYWJsZSBvYmplY3QgdG8gY29udmVydCB0byBhbiBhcnJheVxuXHQgKiBAcmV0dXJuIFRoZSBuZXcgQXJyYXlcblx0ICovXG5cdDxUPihzb3VyY2U6IEFycmF5TGlrZTxUPiB8IEl0ZXJhYmxlPFQ+KTogQXJyYXk8VD47XG59XG5cbmV4cG9ydCBsZXQgZnJvbTogRnJvbTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGFycmF5IGZyb20gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIGFyZ3VtZW50cyBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgdGhlIGFycmF5XG4gKiBAcmV0dXJuIEFuIGFycmF5IGZyb20gdGhlIGdpdmVuIGFyZ3VtZW50c1xuICovXG5leHBvcnQgbGV0IG9mOiA8VD4oLi4uaXRlbXM6IFRbXSkgPT4gQXJyYXk8VD47XG5cbi8qIEVTNiBBcnJheSBpbnN0YW5jZSBtZXRob2RzICovXG5cbi8qKlxuICogQ29waWVzIGRhdGEgaW50ZXJuYWxseSB3aXRoaW4gYW4gYXJyYXkgb3IgYXJyYXktbGlrZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGFycmF5LWxpa2Ugb2JqZWN0XG4gKiBAcGFyYW0gb2Zmc2V0IFRoZSBpbmRleCB0byBzdGFydCBjb3B5aW5nIHZhbHVlcyB0bzsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcbiAqIEBwYXJhbSBzdGFydCBUaGUgZmlyc3QgKGluY2x1c2l2ZSkgaW5kZXggdG8gY29weTsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcbiAqIEBwYXJhbSBlbmQgVGhlIGxhc3QgKGV4Y2x1c2l2ZSkgaW5kZXggdG8gY29weTsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcbiAqIEByZXR1cm4gVGhlIHRhcmdldFxuICovXG5leHBvcnQgbGV0IGNvcHlXaXRoaW46IDxUPih0YXJnZXQ6IEFycmF5TGlrZTxUPiwgb2Zmc2V0OiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcikgPT4gQXJyYXlMaWtlPFQ+O1xuXG4vKipcbiAqIEZpbGxzIGVsZW1lbnRzIG9mIGFuIGFycmF5LWxpa2Ugb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgdG8gZmlsbFxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGVhY2ggZWxlbWVudCBvZiB0aGUgdGFyZ2V0IHdpdGhcbiAqIEBwYXJhbSBzdGFydCBUaGUgZmlyc3QgaW5kZXggdG8gZmlsbFxuICogQHBhcmFtIGVuZCBUaGUgKGV4Y2x1c2l2ZSkgaW5kZXggYXQgd2hpY2ggdG8gc3RvcCBmaWxsaW5nXG4gKiBAcmV0dXJuIFRoZSBmaWxsZWQgdGFyZ2V0XG4gKi9cbmV4cG9ydCBsZXQgZmlsbDogPFQ+KHRhcmdldDogQXJyYXlMaWtlPFQ+LCB2YWx1ZTogVCwgc3RhcnQ/OiBudW1iZXIsIGVuZD86IG51bWJlcikgPT4gQXJyYXlMaWtlPFQ+O1xuXG4vKipcbiAqIEZpbmRzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBpbnN0YW5jZSBtYXRjaGluZyB0aGUgY2FsbGJhY2sgb3IgdW5kZWZpbmVkIGlmIG9uZSBpcyBub3QgZm91bmQuXG4gKlxuICogQHBhcmFtIHRhcmdldCBBbiBhcnJheS1saWtlIG9iamVjdFxuICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gcmV0dXJuaW5nIGlmIHRoZSBjdXJyZW50IHZhbHVlIG1hdGNoZXMgYSBjcml0ZXJpYVxuICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgZmluZCBmdW5jdGlvblxuICogQHJldHVybiBUaGUgZmlyc3QgZWxlbWVudCBtYXRjaGluZyB0aGUgY2FsbGJhY2ssIG9yIHVuZGVmaW5lZCBpZiBvbmUgZG9lcyBub3QgZXhpc3RcbiAqL1xuZXhwb3J0IGxldCBmaW5kOiA8VD4odGFyZ2V0OiBBcnJheUxpa2U8VD4sIGNhbGxiYWNrOiBGaW5kQ2FsbGJhY2s8VD4sIHRoaXNBcmc/OiB7fSkgPT4gVCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBzZWFyY2ggYW5kIHJldHVybnMgdGhlIGZpcnN0IGluZGV4IHdob3NlIHZhbHVlIHNhdGlzZmllcyB0aGUgcGFzc2VkIGNhbGxiYWNrLFxuICogb3IgLTEgaWYgbm8gdmFsdWVzIHNhdGlzZnkgaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCBBbiBhcnJheS1saWtlIG9iamVjdFxuICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgaWYgdGhlIGN1cnJlbnQgdmFsdWUgc2F0aXNmaWVzIGl0cyBjcml0ZXJpYVxuICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgZmluZCBmdW5jdGlvblxuICogQHJldHVybiBUaGUgZmlyc3QgaW5kZXggd2hvc2UgdmFsdWUgc2F0aXNmaWVzIHRoZSBwYXNzZWQgY2FsbGJhY2ssIG9yIC0xIGlmIG5vIHZhbHVlcyBzYXRpc2Z5IGl0XG4gKi9cbmV4cG9ydCBsZXQgZmluZEluZGV4OiA8VD4odGFyZ2V0OiBBcnJheUxpa2U8VD4sIGNhbGxiYWNrOiBGaW5kQ2FsbGJhY2s8VD4sIHRoaXNBcmc/OiB7fSkgPT4gbnVtYmVyO1xuXG4vKiBFUzcgQXJyYXkgaW5zdGFuY2UgbWV0aG9kcyAqL1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhbiBhcnJheSBpbmNsdWRlcyBhIGdpdmVuIHZhbHVlXG4gKlxuICogQHBhcmFtIHRhcmdldCB0aGUgdGFyZ2V0IGFycmF5LWxpa2Ugb2JqZWN0XG4gKiBAcGFyYW0gc2VhcmNoRWxlbWVudCB0aGUgaXRlbSB0byBzZWFyY2ggZm9yXG4gKiBAcGFyYW0gZnJvbUluZGV4IHRoZSBzdGFydGluZyBpbmRleCB0byBzZWFyY2ggZnJvbVxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGFycmF5IGluY2x1ZGVzIHRoZSBlbGVtZW50LCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG5leHBvcnQgbGV0IGluY2x1ZGVzOiA8VD4odGFyZ2V0OiBBcnJheUxpa2U8VD4sIHNlYXJjaEVsZW1lbnQ6IFQsIGZyb21JbmRleD86IG51bWJlcikgPT4gYm9vbGVhbjtcblxuaWYgKGhhcygnZXM2LWFycmF5JykgJiYgaGFzKCdlczYtYXJyYXktZmlsbCcpKSB7XG5cdGZyb20gPSBnbG9iYWwuQXJyYXkuZnJvbTtcblx0b2YgPSBnbG9iYWwuQXJyYXkub2Y7XG5cdGNvcHlXaXRoaW4gPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuY29weVdpdGhpbik7XG5cdGZpbGwgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZmlsbCk7XG5cdGZpbmQgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZmluZCk7XG5cdGZpbmRJbmRleCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgpO1xufSBlbHNlIHtcblx0Ly8gSXQgaXMgb25seSBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkvaU9TIHRoYXQgaGF2ZSBhIGJhZCBmaWxsIGltcGxlbWVudGF0aW9uIGFuZCBzbyBhcmVuJ3QgaW4gdGhlIHdpbGRcblx0Ly8gVG8gbWFrZSB0aGluZ3MgZWFzaWVyLCBpZiB0aGVyZSBpcyBhIGJhZCBmaWxsIGltcGxlbWVudGF0aW9uLCB0aGUgd2hvbGUgc2V0IG9mIGZ1bmN0aW9ucyB3aWxsIGJlIGZpbGxlZFxuXG5cdC8qKlxuXHQgKiBFbnN1cmVzIGEgbm9uLW5lZ2F0aXZlLCBub24taW5maW5pdGUsIHNhZmUgaW50ZWdlci5cblx0ICpcblx0ICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIHRvIHZhbGlkYXRlXG5cdCAqIEByZXR1cm4gQSBwcm9wZXIgbGVuZ3RoXG5cdCAqL1xuXHRjb25zdCB0b0xlbmd0aCA9IGZ1bmN0aW9uIHRvTGVuZ3RoKGxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRpZiAoaXNOYU4obGVuZ3RoKSkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0bGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7XG5cdFx0aWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcblx0XHRcdGxlbmd0aCA9IE1hdGguZmxvb3IobGVuZ3RoKTtcblx0XHR9XG5cdFx0Ly8gRW5zdXJlIGEgbm9uLW5lZ2F0aXZlLCByZWFsLCBzYWZlIGludGVnZXJcblx0XHRyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGVuZ3RoLCAwKSwgTUFYX1NBRkVfSU5URUdFUik7XG5cdH07XG5cblx0LyoqXG5cdCAqIEZyb20gRVM2IDcuMS40IFRvSW50ZWdlcigpXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIGNvbnZlcnRcblx0ICogQHJldHVybiBBbiBpbnRlZ2VyXG5cdCAqL1xuXHRjb25zdCB0b0ludGVnZXIgPSBmdW5jdGlvbiB0b0ludGVnZXIodmFsdWU6IGFueSk6IG51bWJlciB7XG5cdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdGlmIChpc05hTih2YWx1ZSkpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgPT09IDAgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdHJldHVybiAodmFsdWUgPiAwID8gMSA6IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcblx0fTtcblxuXHQvKipcblx0ICogTm9ybWFsaXplcyBhbiBvZmZzZXQgYWdhaW5zdCBhIGdpdmVuIGxlbmd0aCwgd3JhcHBpbmcgaXQgaWYgbmVnYXRpdmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgb3JpZ2luYWwgb2Zmc2V0XG5cdCAqIEBwYXJhbSBsZW5ndGggVGhlIHRvdGFsIGxlbmd0aCB0byBub3JtYWxpemUgYWdhaW5zdFxuXHQgKiBAcmV0dXJuIElmIG5lZ2F0aXZlLCBwcm92aWRlIGEgZGlzdGFuY2UgZnJvbSB0aGUgZW5kIChsZW5ndGgpOyBvdGhlcndpc2UgcHJvdmlkZSBhIGRpc3RhbmNlIGZyb20gMFxuXHQgKi9cblx0Y29uc3Qgbm9ybWFsaXplT2Zmc2V0ID0gZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0KHZhbHVlOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdmFsdWUgPCAwID8gTWF0aC5tYXgobGVuZ3RoICsgdmFsdWUsIDApIDogTWF0aC5taW4odmFsdWUsIGxlbmd0aCk7XG5cdH07XG5cblx0ZnJvbSA9IGZ1bmN0aW9uIGZyb20oXG5cdFx0dGhpczogQXJyYXlDb25zdHJ1Y3Rvcixcblx0XHRhcnJheUxpa2U6IEl0ZXJhYmxlPGFueT4gfCBBcnJheUxpa2U8YW55Pixcblx0XHRtYXBGdW5jdGlvbj86IE1hcENhbGxiYWNrPGFueSwgYW55Pixcblx0XHR0aGlzQXJnPzogYW55XG5cdCk6IEFycmF5PGFueT4ge1xuXHRcdGlmIChhcnJheUxpa2UgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignZnJvbTogcmVxdWlyZXMgYW4gYXJyYXktbGlrZSBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAobWFwRnVuY3Rpb24gJiYgdGhpc0FyZykge1xuXHRcdFx0bWFwRnVuY3Rpb24gPSBtYXBGdW5jdGlvbi5iaW5kKHRoaXNBcmcpO1xuXHRcdH1cblxuXHRcdC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXG5cdFx0Y29uc3QgQ29uc3RydWN0b3IgPSB0aGlzO1xuXHRcdGNvbnN0IGxlbmd0aDogbnVtYmVyID0gdG9MZW5ndGgoKDxhbnk+YXJyYXlMaWtlKS5sZW5ndGgpO1xuXG5cdFx0Ly8gU3VwcG9ydCBleHRlbnNpb25cblx0XHRjb25zdCBhcnJheTogYW55W10gPVxuXHRcdFx0dHlwZW9mIENvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nID8gPGFueVtdPk9iamVjdChuZXcgQ29uc3RydWN0b3IobGVuZ3RoKSkgOiBuZXcgQXJyYXkobGVuZ3RoKTtcblxuXHRcdGlmICghaXNBcnJheUxpa2UoYXJyYXlMaWtlKSAmJiAhaXNJdGVyYWJsZShhcnJheUxpa2UpKSB7XG5cdFx0XHRyZXR1cm4gYXJyYXk7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgdGhpcyBpcyBhbiBhcnJheSBhbmQgdGhlIG5vcm1hbGl6ZWQgbGVuZ3RoIGlzIDAsIGp1c3QgcmV0dXJuIGFuIGVtcHR5IGFycmF5LiB0aGlzIHByZXZlbnRzIGEgcHJvYmxlbVxuXHRcdC8vIHdpdGggdGhlIGl0ZXJhdGlvbiBvbiBJRSB3aGVuIHVzaW5nIGEgTmFOIGFycmF5IGxlbmd0aC5cblx0XHRpZiAoaXNBcnJheUxpa2UoYXJyYXlMaWtlKSkge1xuXHRcdFx0aWYgKGxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlMaWtlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGFycmF5W2ldID0gbWFwRnVuY3Rpb24gPyBtYXBGdW5jdGlvbihhcnJheUxpa2VbaV0sIGkpIDogYXJyYXlMaWtlW2ldO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgaSA9IDA7XG5cdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIGFycmF5TGlrZSkge1xuXHRcdFx0XHRhcnJheVtpXSA9IG1hcEZ1bmN0aW9uID8gbWFwRnVuY3Rpb24odmFsdWUsIGkpIDogdmFsdWU7XG5cdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoKDxhbnk+YXJyYXlMaWtlKS5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YXJyYXkubGVuZ3RoID0gbGVuZ3RoO1xuXHRcdH1cblxuXHRcdHJldHVybiBhcnJheTtcblx0fTtcblxuXHRvZiA9IGZ1bmN0aW9uIG9mPFQ+KC4uLml0ZW1zOiBUW10pOiBBcnJheTxUPiB7XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGl0ZW1zKTtcblx0fTtcblxuXHRjb3B5V2l0aGluID0gZnVuY3Rpb24gY29weVdpdGhpbjxUPihcblx0XHR0YXJnZXQ6IEFycmF5TGlrZTxUPixcblx0XHRvZmZzZXQ6IG51bWJlcixcblx0XHRzdGFydDogbnVtYmVyLFxuXHRcdGVuZD86IG51bWJlclxuXHQpOiBBcnJheUxpa2U8VD4ge1xuXHRcdGlmICh0YXJnZXQgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignY29weVdpdGhpbjogdGFyZ2V0IG11c3QgYmUgYW4gYXJyYXktbGlrZSBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRjb25zdCBsZW5ndGggPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcblx0XHRvZmZzZXQgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKG9mZnNldCksIGxlbmd0aCk7XG5cdFx0c3RhcnQgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKHN0YXJ0KSwgbGVuZ3RoKTtcblx0XHRlbmQgPSBub3JtYWxpemVPZmZzZXQoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXIoZW5kKSwgbGVuZ3RoKTtcblx0XHRsZXQgY291bnQgPSBNYXRoLm1pbihlbmQgLSBzdGFydCwgbGVuZ3RoIC0gb2Zmc2V0KTtcblxuXHRcdGxldCBkaXJlY3Rpb24gPSAxO1xuXHRcdGlmIChvZmZzZXQgPiBzdGFydCAmJiBvZmZzZXQgPCBzdGFydCArIGNvdW50KSB7XG5cdFx0XHRkaXJlY3Rpb24gPSAtMTtcblx0XHRcdHN0YXJ0ICs9IGNvdW50IC0gMTtcblx0XHRcdG9mZnNldCArPSBjb3VudCAtIDE7XG5cdFx0fVxuXG5cdFx0d2hpbGUgKGNvdW50ID4gMCkge1xuXHRcdFx0aWYgKHN0YXJ0IGluIHRhcmdldCkge1xuXHRcdFx0XHQodGFyZ2V0IGFzIFdyaXRhYmxlQXJyYXlMaWtlPFQ+KVtvZmZzZXRdID0gdGFyZ2V0W3N0YXJ0XTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSAodGFyZ2V0IGFzIFdyaXRhYmxlQXJyYXlMaWtlPFQ+KVtvZmZzZXRdO1xuXHRcdFx0fVxuXG5cdFx0XHRvZmZzZXQgKz0gZGlyZWN0aW9uO1xuXHRcdFx0c3RhcnQgKz0gZGlyZWN0aW9uO1xuXHRcdFx0Y291bnQtLTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9O1xuXG5cdGZpbGwgPSBmdW5jdGlvbiBmaWxsPFQ+KHRhcmdldDogQXJyYXlMaWtlPFQ+LCB2YWx1ZTogYW55LCBzdGFydD86IG51bWJlciwgZW5kPzogbnVtYmVyKTogQXJyYXlMaWtlPFQ+IHtcblx0XHRjb25zdCBsZW5ndGggPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcblx0XHRsZXQgaSA9IG5vcm1hbGl6ZU9mZnNldCh0b0ludGVnZXIoc3RhcnQpLCBsZW5ndGgpO1xuXHRcdGVuZCA9IG5vcm1hbGl6ZU9mZnNldChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpLCBsZW5ndGgpO1xuXG5cdFx0d2hpbGUgKGkgPCBlbmQpIHtcblx0XHRcdCh0YXJnZXQgYXMgV3JpdGFibGVBcnJheUxpa2U8VD4pW2krK10gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9O1xuXG5cdGZpbmQgPSBmdW5jdGlvbiBmaW5kPFQ+KHRhcmdldDogQXJyYXlMaWtlPFQ+LCBjYWxsYmFjazogRmluZENhbGxiYWNrPFQ+LCB0aGlzQXJnPzoge30pOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBpbmRleCA9IGZpbmRJbmRleDxUPih0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKTtcblx0XHRyZXR1cm4gaW5kZXggIT09IC0xID8gdGFyZ2V0W2luZGV4XSA6IHVuZGVmaW5lZDtcblx0fTtcblxuXHRmaW5kSW5kZXggPSBmdW5jdGlvbiBmaW5kSW5kZXg8VD4odGFyZ2V0OiBBcnJheUxpa2U8VD4sIGNhbGxiYWNrOiBGaW5kQ2FsbGJhY2s8VD4sIHRoaXNBcmc/OiB7fSk6IG51bWJlciB7XG5cdFx0Y29uc3QgbGVuZ3RoID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XG5cblx0XHRpZiAoIWNhbGxiYWNrKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdmaW5kOiBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXNBcmcpIHtcblx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzQXJnKTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2sodGFyZ2V0W2ldLCBpLCB0YXJnZXQpKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fTtcbn1cblxuaWYgKGhhcygnZXM3LWFycmF5JykpIHtcblx0aW5jbHVkZXMgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpO1xufSBlbHNlIHtcblx0LyoqXG5cdCAqIEVuc3VyZXMgYSBub24tbmVnYXRpdmUsIG5vbi1pbmZpbml0ZSwgc2FmZSBpbnRlZ2VyLlxuXHQgKlxuXHQgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgdG8gdmFsaWRhdGVcblx0ICogQHJldHVybiBBIHByb3BlciBsZW5ndGhcblx0ICovXG5cdGNvbnN0IHRvTGVuZ3RoID0gZnVuY3Rpb24gdG9MZW5ndGgobGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdGxlbmd0aCA9IE51bWJlcihsZW5ndGgpO1xuXHRcdGlmIChpc05hTihsZW5ndGgpKSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdFx0aWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcblx0XHRcdGxlbmd0aCA9IE1hdGguZmxvb3IobGVuZ3RoKTtcblx0XHR9XG5cdFx0Ly8gRW5zdXJlIGEgbm9uLW5lZ2F0aXZlLCByZWFsLCBzYWZlIGludGVnZXJcblx0XHRyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGVuZ3RoLCAwKSwgTUFYX1NBRkVfSU5URUdFUik7XG5cdH07XG5cblx0aW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlczxUPih0YXJnZXQ6IEFycmF5TGlrZTxUPiwgc2VhcmNoRWxlbWVudDogVCwgZnJvbUluZGV4OiBudW1iZXIgPSAwKTogYm9vbGVhbiB7XG5cdFx0bGV0IGxlbiA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IGZyb21JbmRleDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50RWxlbWVudCA9IHRhcmdldFtpXTtcblx0XHRcdGlmIChcblx0XHRcdFx0c2VhcmNoRWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnQgfHxcblx0XHRcdFx0KHNlYXJjaEVsZW1lbnQgIT09IHNlYXJjaEVsZW1lbnQgJiYgY3VycmVudEVsZW1lbnQgIT09IGN1cnJlbnRFbGVtZW50KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBhcnJheS50cyIsImNvbnN0IGdsb2JhbE9iamVjdDogYW55ID0gKGZ1bmN0aW9uKCk6IGFueSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuXHRcdC8vIGdsb2JhbCBzcGVjIGRlZmluZXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgY2FsbGVkICdnbG9iYWwnXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG5cdFx0Ly8gYGdsb2JhbGAgaXMgYWxzbyBkZWZpbmVkIGluIE5vZGVKU1xuXHRcdHJldHVybiBnbG9iYWw7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHQvLyB3aW5kb3cgaXMgZGVmaW5lZCBpbiBicm93c2Vyc1xuXHRcdHJldHVybiB3aW5kb3c7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0Ly8gc2VsZiBpcyBkZWZpbmVkIGluIFdlYldvcmtlcnNcblx0XHRyZXR1cm4gc2VsZjtcblx0fVxufSkoKTtcblxuZXhwb3J0IGRlZmF1bHQgZ2xvYmFsT2JqZWN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGdsb2JhbC50cyIsImltcG9ydCAnLi9TeW1ib2wnO1xuaW1wb3J0IHsgSElHSF9TVVJST0dBVEVfTUFYLCBISUdIX1NVUlJPR0FURV9NSU4gfSBmcm9tICcuL3N0cmluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlcmF0b3JSZXN1bHQ8VD4ge1xuXHRyZWFkb25seSBkb25lOiBib29sZWFuO1xuXHRyZWFkb25seSB2YWx1ZTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJdGVyYXRvcjxUPiB7XG5cdG5leHQodmFsdWU/OiBhbnkpOiBJdGVyYXRvclJlc3VsdDxUPjtcblxuXHRyZXR1cm4/KHZhbHVlPzogYW55KTogSXRlcmF0b3JSZXN1bHQ8VD47XG5cblx0dGhyb3c/KGU/OiBhbnkpOiBJdGVyYXRvclJlc3VsdDxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJdGVyYWJsZTxUPiB7XG5cdFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhdG9yPFQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZXJhYmxlSXRlcmF0b3I8VD4gZXh0ZW5kcyBJdGVyYXRvcjxUPiB7XG5cdFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8VD47XG59XG5cbmNvbnN0IHN0YXRpY0RvbmU6IEl0ZXJhdG9yUmVzdWx0PGFueT4gPSB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgX3NoaW1zXyBhbiBpdGVyYXRvciBpbnRlcmZhY2Ugb24gYXJyYXkgbGlrZSBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgU2hpbUl0ZXJhdG9yPFQ+IHtcblx0cHJpdmF0ZSBfbGlzdDogQXJyYXlMaWtlPFQ+IHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIF9uZXh0SW5kZXggPSAtMTtcblx0cHJpdmF0ZSBfbmF0aXZlSXRlcmF0b3I6IEl0ZXJhdG9yPFQ+IHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKGxpc3Q6IEFycmF5TGlrZTxUPiB8IEl0ZXJhYmxlPFQ+KSB7XG5cdFx0aWYgKGlzSXRlcmFibGUobGlzdCkpIHtcblx0XHRcdHRoaXMuX25hdGl2ZUl0ZXJhdG9yID0gbGlzdFtTeW1ib2wuaXRlcmF0b3JdKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2xpc3QgPSBsaXN0O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm4gdGhlIG5leHQgaXRlcmF0aW9uIHJlc3VsdCBmb3IgdGhlIEl0ZXJhdG9yXG5cdCAqL1xuXHRuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PFQ+IHtcblx0XHRpZiAodGhpcy5fbmF0aXZlSXRlcmF0b3IpIHtcblx0XHRcdHJldHVybiB0aGlzLl9uYXRpdmVJdGVyYXRvci5uZXh0KCk7XG5cdFx0fVxuXHRcdGlmICghdGhpcy5fbGlzdCkge1xuXHRcdFx0cmV0dXJuIHN0YXRpY0RvbmU7XG5cdFx0fVxuXHRcdGlmICgrK3RoaXMuX25leHRJbmRleCA8IHRoaXMuX2xpc3QubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkb25lOiBmYWxzZSxcblx0XHRcdFx0dmFsdWU6IHRoaXMuX2xpc3RbdGhpcy5fbmV4dEluZGV4XVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHN0YXRpY0RvbmU7XG5cdH1cblxuXHRbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEEgdHlwZSBndWFyZCBmb3IgY2hlY2tpbmcgaWYgc29tZXRoaW5nIGhhcyBhbiBJdGVyYWJsZSBpbnRlcmZhY2VcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgSXRlcmFibGU8YW55PiB7XG5cdHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBBIHR5cGUgZ3VhcmQgZm9yIGNoZWNraW5nIGlmIHNvbWV0aGluZyBpcyBBcnJheUxpa2VcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWU6IGFueSk6IHZhbHVlIGlzIEFycmF5TGlrZTxhbnk+IHtcblx0cmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIGZvciBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gaXRlcmFibGUgVGhlIGl0ZXJhYmxlIG9iamVjdCB0byByZXR1cm4gdGhlIGl0ZXJhdG9yIGZvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0PFQ+KGl0ZXJhYmxlOiBJdGVyYWJsZTxUPiB8IEFycmF5TGlrZTxUPik6IEl0ZXJhdG9yPFQ+IHwgdW5kZWZpbmVkIHtcblx0aWYgKGlzSXRlcmFibGUoaXRlcmFibGUpKSB7XG5cdFx0cmV0dXJuIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcblx0fSBlbHNlIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcblx0XHRyZXR1cm4gbmV3IFNoaW1JdGVyYXRvcihpdGVyYWJsZSk7XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JPZkNhbGxiYWNrPFQ+IHtcblx0LyoqXG5cdCAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGEgZm9yT2YoKSBpdGVyYXRpb25cblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIFRoZSBjdXJyZW50IHZhbHVlXG5cdCAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyXG5cdCAqIEBwYXJhbSBkb0JyZWFrIEEgZnVuY3Rpb24sIGlmIGNhbGxlZCwgd2lsbCBzdG9wIHRoZSBpdGVyYXRpb25cblx0ICovXG5cdCh2YWx1ZTogVCwgb2JqZWN0OiBJdGVyYWJsZTxUPiB8IEFycmF5TGlrZTxUPiB8IHN0cmluZywgZG9CcmVhazogKCkgPT4gdm9pZCk6IHZvaWQ7XG59XG5cbi8qKlxuICogU2hpbXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYGZvciAuLi4gb2ZgIGJsb2Nrc1xuICpcbiAqIEBwYXJhbSBpdGVyYWJsZSBUaGUgb2JqZWN0IHRoZSBwcm92aWRlcyBhbiBpbnRlcmF0b3IgaW50ZXJmYWNlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIGl0ZW0gb2YgdGhlIGl0ZXJhYmxlXG4gKiBAcGFyYW0gdGhpc0FyZyBPcHRpb25hbCBzY29wZSB0byBwYXNzIHRoZSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9yT2Y8VD4oXG5cdGl0ZXJhYmxlOiBJdGVyYWJsZTxUPiB8IEFycmF5TGlrZTxUPiB8IHN0cmluZyxcblx0Y2FsbGJhY2s6IEZvck9mQ2FsbGJhY2s8VD4sXG5cdHRoaXNBcmc/OiBhbnlcbik6IHZvaWQge1xuXHRsZXQgYnJva2VuID0gZmFsc2U7XG5cblx0ZnVuY3Rpb24gZG9CcmVhaygpIHtcblx0XHRicm9rZW4gPSB0cnVlO1xuXHR9XG5cblx0LyogV2UgbmVlZCB0byBoYW5kbGUgaXRlcmF0aW9uIG9mIGRvdWJsZSBieXRlIHN0cmluZ3MgcHJvcGVybHkgKi9cblx0aWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSAmJiB0eXBlb2YgaXRlcmFibGUgPT09ICdzdHJpbmcnKSB7XG5cdFx0Y29uc3QgbCA9IGl0ZXJhYmxlLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGw7ICsraSkge1xuXHRcdFx0bGV0IGNoYXIgPSBpdGVyYWJsZVtpXTtcblx0XHRcdGlmIChpICsgMSA8IGwpIHtcblx0XHRcdFx0Y29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcblx0XHRcdFx0aWYgKGNvZGUgPj0gSElHSF9TVVJST0dBVEVfTUlOICYmIGNvZGUgPD0gSElHSF9TVVJST0dBVEVfTUFYKSB7XG5cdFx0XHRcdFx0Y2hhciArPSBpdGVyYWJsZVsrK2ldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjYWxsYmFjay5jYWxsKHRoaXNBcmcsIGNoYXIsIGl0ZXJhYmxlLCBkb0JyZWFrKTtcblx0XHRcdGlmIChicm9rZW4pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBpdGVyYXRvciA9IGdldChpdGVyYWJsZSk7XG5cdFx0aWYgKGl0ZXJhdG9yKSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuXG5cdFx0XHR3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwodGhpc0FyZywgcmVzdWx0LnZhbHVlLCBpdGVyYWJsZSwgZG9CcmVhayk7XG5cdFx0XHRcdGlmIChicm9rZW4pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGl0ZXJhdG9yLnRzIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5cbi8qKlxuICogVGhlIHNtYWxsZXN0IGludGVydmFsIGJldHdlZW4gdHdvIHJlcHJlc2VudGFibGUgbnVtYmVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVQU0lMT04gPSAxO1xuXG4vKipcbiAqIFRoZSBtYXhpbXVtIHNhZmUgaW50ZWdlciBpbiBKYXZhU2NyaXB0XG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcblxuLyoqXG4gKiBUaGUgbWluaW11bSBzYWZlIGludGVnZXIgaW4gSmF2YVNjcmlwdFxuICovXG5leHBvcnQgY29uc3QgTUlOX1NBRkVfSU5URUdFUiA9IC1NQVhfU0FGRV9JTlRFR0VSO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIE5hTiB3aXRob3V0IGNvZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBOYU4sIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOYU4odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBnbG9iYWwuaXNOYU4odmFsdWUpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGEgZmluaXRlIG51bWJlciB3aXRob3V0IGNvZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBmaW5pdGUsIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGaW5pdGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIG51bWJlciB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGdsb2JhbC5pc0Zpbml0ZSh2YWx1ZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWU6IGFueSk6IHZhbHVlIGlzIG51bWJlciB7XG5cdHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGFuIGludGVnZXIgdGhhdCBpcyAnc2FmZSwnIG1lYW5pbmc6XG4gKiAgIDEuIGl0IGNhbiBiZSBleHByZXNzZWQgYXMgYW4gSUVFRS03NTQgZG91YmxlIHByZWNpc2lvbiBudW1iZXJcbiAqICAgMi4gaXQgaGFzIGEgb25lLXRvLW9uZSBtYXBwaW5nIHRvIGEgbWF0aGVtYXRpY2FsIGludGVnZXIsIG1lYW5pbmcgaXRzXG4gKiAgICAgIElFRUUtNzU0IHJlcHJlc2VudGF0aW9uIGNhbm5vdCBiZSB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIGFueSBvdGhlclxuICogICAgICBpbnRlZ2VyIHRvIGZpdCB0aGUgSUVFRS03NTQgcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBudW1iZXIge1xuXHRyZXR1cm4gaXNJbnRlZ2VyKHZhbHVlKSAmJiBNYXRoLmFicyh2YWx1ZSkgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBudW1iZXIudHMiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgeyBpc1N5bWJvbCB9IGZyb20gJy4vU3ltYm9sJztcblxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RBc3NpZ24ge1xuXHQvKipcblx0ICogQ29weSB0aGUgdmFsdWVzIG9mIGFsbCBvZiB0aGUgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGFcblx0ICogdGFyZ2V0IG9iamVjdC4gUmV0dXJucyB0aGUgdGFyZ2V0IG9iamVjdC5cblx0ICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxuXHQgKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGZyb20gd2hpY2ggdG8gY29weSBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0PFQsIFU+KHRhcmdldDogVCwgc291cmNlOiBVKTogVCAmIFU7XG5cblx0LyoqXG5cdCAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXG5cdCAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3QgdG8gY29weSB0by5cblx0ICogQHBhcmFtIHNvdXJjZTEgVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBzb3VyY2UyIFRoZSBzZWNvbmQgc291cmNlIG9iamVjdCBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllcy5cblx0ICovXG5cdDxULCBVLCBWPih0YXJnZXQ6IFQsIHNvdXJjZTE6IFUsIHNvdXJjZTI6IFYpOiBUICYgVSAmIFY7XG5cblx0LyoqXG5cdCAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXG5cdCAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3QgdG8gY29weSB0by5cblx0ICogQHBhcmFtIHNvdXJjZTEgVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBzb3VyY2UyIFRoZSBzZWNvbmQgc291cmNlIG9iamVjdCBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIHNvdXJjZTMgVGhlIHRoaXJkIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXG5cdCAqL1xuXHQ8VCwgVSwgViwgVz4odGFyZ2V0OiBULCBzb3VyY2UxOiBVLCBzb3VyY2UyOiBWLCBzb3VyY2UzOiBXKTogVCAmIFUgJiBWICYgVztcblxuXHQvKipcblx0ICogQ29weSB0aGUgdmFsdWVzIG9mIGFsbCBvZiB0aGUgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGFcblx0ICogdGFyZ2V0IG9iamVjdC4gUmV0dXJucyB0aGUgdGFyZ2V0IG9iamVjdC5cblx0ICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxuXHQgKiBAcGFyYW0gc291cmNlcyBPbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllc1xuXHQgKi9cblx0KHRhcmdldDogb2JqZWN0LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RFbnRlcmllcyB7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGtleS92YWx1ZXMgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBhbiBvYmplY3Rcblx0ICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuIFRoaXMgY2FuIGJlIGFuIG9iamVjdCB0aGF0IHlvdSBjcmVhdGVkIG9yIGFuIGV4aXN0aW5nIERvY3VtZW50IE9iamVjdCBNb2RlbCAoRE9NKSBvYmplY3QuXG5cdCAqL1xuXHQ8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0sIEsgZXh0ZW5kcyBrZXlvZiBUPihvOiBUKTogW2tleW9mIFQsIFRbS11dW107XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgb2Yga2V5L3ZhbHVlcyBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdFxuXHQgKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy4gVGhpcyBjYW4gYmUgYW4gb2JqZWN0IHRoYXQgeW91IGNyZWF0ZWQgb3IgYW4gZXhpc3RpbmcgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIG9iamVjdC5cblx0ICovXG5cdChvOiBvYmplY3QpOiBbc3RyaW5nLCBhbnldW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyB7XG5cdDxUPihvOiBUKTogeyBbSyBpbiBrZXlvZiBUXTogUHJvcGVydHlEZXNjcmlwdG9yIH07XG5cdChvOiBhbnkpOiB7IFtrZXk6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvciB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFZhbHVlcyB7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHZhbHVlcyBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdFxuXHQgKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy4gVGhpcyBjYW4gYmUgYW4gb2JqZWN0IHRoYXQgeW91IGNyZWF0ZWQgb3IgYW4gZXhpc3RpbmcgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIG9iamVjdC5cblx0ICovXG5cdDxUPihvOiB7IFtzOiBzdHJpbmddOiBUIH0pOiBUW107XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgb2YgdmFsdWVzIG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0XG5cdCAqIEBwYXJhbSBvIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLiBUaGlzIGNhbiBiZSBhbiBvYmplY3QgdGhhdCB5b3UgY3JlYXRlZCBvciBhbiBleGlzdGluZyBEb2N1bWVudCBPYmplY3QgTW9kZWwgKERPTSkgb2JqZWN0LlxuXHQgKi9cblx0KG86IG9iamVjdCk6IGFueVtdO1xufVxuXG5leHBvcnQgbGV0IGFzc2lnbjogT2JqZWN0QXNzaWduO1xuXG4vKipcbiAqIEdldHMgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0LlxuICogQW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgaXMgb25lIHRoYXQgaXMgZGVmaW5lZCBkaXJlY3RseSBvbiB0aGUgb2JqZWN0IGFuZCBpcyBub3RcbiAqIGluaGVyaXRlZCBmcm9tIHRoZSBvYmplY3QncyBwcm90b3R5cGUuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydHkuXG4gKiBAcGFyYW0gcCBOYW1lIG9mIHRoZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IDxULCBLIGV4dGVuZHMga2V5b2YgVD4obzogVCwgcHJvcGVydHlLZXk6IEspID0+IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0LiBUaGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGFyZSB0aG9zZSB0aGF0IGFyZSBkZWZpbmVkIGRpcmVjdGx5XG4gKiBvbiB0aGF0IG9iamVjdCwgYW5kIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGhlIG9iamVjdCdzIHByb3RvdHlwZS4gVGhlIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGluY2x1ZGUgYm90aCBmaWVsZHMgKG9iamVjdHMpIGFuZCBmdW5jdGlvbnMuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgb3duIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlOYW1lczogKG86IGFueSkgPT4gc3RyaW5nW107XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3ltYm9sIHByb3BlcnRpZXMgZm91bmQgZGlyZWN0bHkgb24gb2JqZWN0IG8uXG4gKiBAcGFyYW0gbyBPYmplY3QgdG8gcmV0cmlldmUgdGhlIHN5bWJvbHMgZnJvbS5cbiAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IChvOiBhbnkpID0+IHN5bWJvbFtdO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQHBhcmFtIHZhbHVlMSBUaGUgZmlyc3QgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWUyIFRoZSBzZWNvbmQgdmFsdWUuXG4gKi9cbmV4cG9ydCBsZXQgaXM6ICh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpID0+IGJvb2xlYW47XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBvZiBhbiBvYmplY3QuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy4gVGhpcyBjYW4gYmUgYW4gb2JqZWN0IHRoYXQgeW91IGNyZWF0ZWQgb3IgYW4gZXhpc3RpbmcgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIG9iamVjdC5cbiAqL1xuZXhwb3J0IGxldCBrZXlzOiAobzogb2JqZWN0KSA9PiBzdHJpbmdbXTtcblxuLyogRVM3IE9iamVjdCBzdGF0aWMgbWV0aG9kcyAqL1xuXG5leHBvcnQgbGV0IGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG5cbmV4cG9ydCBsZXQgZW50cmllczogT2JqZWN0RW50ZXJpZXM7XG5cbmV4cG9ydCBsZXQgdmFsdWVzOiBPYmplY3RWYWx1ZXM7XG5cbmlmIChoYXMoJ2VzNi1vYmplY3QnKSkge1xuXHRjb25zdCBnbG9iYWxPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuXHRhc3NpZ24gPSBnbG9iYWxPYmplY3QuYXNzaWduO1xuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXHRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG5cdGdldE93blByb3BlcnR5U3ltYm9scyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cdGlzID0gZ2xvYmFsT2JqZWN0LmlzO1xuXHRrZXlzID0gZ2xvYmFsT2JqZWN0LmtleXM7XG59IGVsc2Uge1xuXHRrZXlzID0gZnVuY3Rpb24gc3ltYm9sQXdhcmVLZXlzKG86IG9iamVjdCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMobykuZmlsdGVyKChrZXkpID0+ICFCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpO1xuXHR9O1xuXG5cdGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQ6IGFueSwgLi4uc291cmNlczogYW55W10pIHtcblx0XHRpZiAodGFyZ2V0ID09IG51bGwpIHtcblx0XHRcdC8vIFR5cGVFcnJvciBpZiB1bmRlZmluZWQgb3IgbnVsbFxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdG8gPSBPYmplY3QodGFyZ2V0KTtcblx0XHRzb3VyY2VzLmZvckVhY2goKG5leHRTb3VyY2UpID0+IHtcblx0XHRcdGlmIChuZXh0U291cmNlKSB7XG5cdFx0XHRcdC8vIFNraXAgb3ZlciBpZiB1bmRlZmluZWQgb3IgbnVsbFxuXHRcdFx0XHRrZXlzKG5leHRTb3VyY2UpLmZvckVhY2goKG5leHRLZXkpID0+IHtcblx0XHRcdFx0XHR0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRvO1xuXHR9O1xuXG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihcblx0XHRvOiBhbnksXG5cdFx0cHJvcDogc3RyaW5nIHwgc3ltYm9sXG5cdCk6IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGlzU3ltYm9sKHByb3ApKSB7XG5cdFx0XHRyZXR1cm4gKDxhbnk+T2JqZWN0KS5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApO1xuXHRcdH1cblx0fTtcblxuXHRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvOiBhbnkpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLmZpbHRlcigoa2V5KSA9PiAhQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKTtcblx0fTtcblxuXHRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMobzogYW55KTogc3ltYm9sW10ge1xuXHRcdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKVxuXHRcdFx0LmZpbHRlcigoa2V5KSA9PiBCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpXG5cdFx0XHQubWFwKChrZXkpID0+IFN5bWJvbC5mb3Ioa2V5LnN1YnN0cmluZygyKSkpO1xuXHR9O1xuXG5cdGlzID0gZnVuY3Rpb24gaXModmFsdWUxOiBhbnksIHZhbHVlMjogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYgKHZhbHVlMSA9PT0gdmFsdWUyKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUxICE9PSAwIHx8IDEgLyB2YWx1ZTEgPT09IDEgLyB2YWx1ZTI7IC8vIC0wXG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTEgIT09IHZhbHVlMSAmJiB2YWx1ZTIgIT09IHZhbHVlMjsgLy8gTmFOXG5cdH07XG59XG5cbmlmIChoYXMoJ2VzMjAxNy1vYmplY3QnKSkge1xuXHRjb25zdCBnbG9iYWxPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG5cdGVudHJpZXMgPSBnbG9iYWxPYmplY3QuZW50cmllcztcblx0dmFsdWVzID0gZ2xvYmFsT2JqZWN0LnZhbHVlcztcbn0gZWxzZSB7XG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG86IGFueSkge1xuXHRcdHJldHVybiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLnJlZHVjZShcblx0XHRcdChwcmV2aW91cywga2V5KSA9PiB7XG5cdFx0XHRcdHByZXZpb3VzW2tleV0gPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobywga2V5KSE7XG5cdFx0XHRcdHJldHVybiBwcmV2aW91cztcblx0XHRcdH0sXG5cdFx0XHR7fSBhcyB7IFtrZXk6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvciB9XG5cdFx0KTtcblx0fTtcblxuXHRlbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcyhvOiBhbnkpOiBbc3RyaW5nLCBhbnldW10ge1xuXHRcdHJldHVybiBrZXlzKG8pLm1hcCgoa2V5KSA9PiBba2V5LCBvW2tleV1dIGFzIFtzdHJpbmcsIGFueV0pO1xuXHR9O1xuXG5cdHZhbHVlcyA9IGZ1bmN0aW9uIHZhbHVlcyhvOiBhbnkpOiBhbnlbXSB7XG5cdFx0cmV0dXJuIGtleXMobykubWFwKChrZXkpID0+IG9ba2V5XSk7XG5cdH07XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gb2JqZWN0LnRzIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0IHsgd3JhcE5hdGl2ZSB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdOb3JtYWxpemUge1xuXHQvKipcblx0ICogUmV0dXJucyB0aGUgU3RyaW5nIHZhbHVlIHJlc3VsdCBvZiBub3JtYWxpemluZyB0aGUgc3RyaW5nIGludG8gdGhlIG5vcm1hbGl6YXRpb24gZm9ybVxuXHQgKiBuYW1lZCBieSBmb3JtIGFzIHNwZWNpZmllZCBpbiBVbmljb2RlIFN0YW5kYXJkIEFubmV4ICMxNSwgVW5pY29kZSBOb3JtYWxpemF0aW9uIEZvcm1zLlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXG5cdCAqIEBwYXJhbSBmb3JtIEFwcGxpY2FibGUgdmFsdWVzOiBcIk5GQ1wiLCBcIk5GRFwiLCBcIk5GS0NcIiwgb3IgXCJORktEXCIsIElmIG5vdCBzcGVjaWZpZWQgZGVmYXVsdFxuXHQgKiBpcyBcIk5GQ1wiXG5cdCAqL1xuXHQodGFyZ2V0OiBzdHJpbmcsIGZvcm06ICdORkMnIHwgJ05GRCcgfCAnTkZLQycgfCAnTkZLRCcpOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIFN0cmluZyB2YWx1ZSByZXN1bHQgb2Ygbm9ybWFsaXppbmcgdGhlIHN0cmluZyBpbnRvIHRoZSBub3JtYWxpemF0aW9uIGZvcm1cblx0ICogbmFtZWQgYnkgZm9ybSBhcyBzcGVjaWZpZWQgaW4gVW5pY29kZSBTdGFuZGFyZCBBbm5leCAjMTUsIFVuaWNvZGUgTm9ybWFsaXphdGlvbiBGb3Jtcy5cblx0ICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xuXHQgKiBAcGFyYW0gZm9ybSBBcHBsaWNhYmxlIHZhbHVlczogXCJORkNcIiwgXCJORkRcIiwgXCJORktDXCIsIG9yIFwiTkZLRFwiLCBJZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRcblx0ICogaXMgXCJORkNcIlxuXHQgKi9cblx0KHRhcmdldDogc3RyaW5nLCBmb3JtPzogc3RyaW5nKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xuICovXG5leHBvcnQgY29uc3QgSElHSF9TVVJST0dBVEVfTUlOID0gMHhkODAwO1xuXG4vKipcbiAqIFRoZSBtYXhpbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xuICovXG5leHBvcnQgY29uc3QgSElHSF9TVVJST0dBVEVfTUFYID0gMHhkYmZmO1xuXG4vKipcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGxvdyBzdXJyb2dhdGVzXG4gKi9cbmV4cG9ydCBjb25zdCBMT1dfU1VSUk9HQVRFX01JTiA9IDB4ZGMwMDtcblxuLyoqXG4gKiBUaGUgbWF4aW11bSBsb2NhdGlvbiBvZiBsb3cgc3Vycm9nYXRlc1xuICovXG5leHBvcnQgY29uc3QgTE9XX1NVUlJPR0FURV9NQVggPSAweGRmZmY7XG5cbi8qIEVTNiBzdGF0aWMgbWV0aG9kcyAqL1xuXG4vKipcbiAqIFJldHVybiB0aGUgU3RyaW5nIHZhbHVlIHdob3NlIGVsZW1lbnRzIGFyZSwgaW4gb3JkZXIsIHRoZSBlbGVtZW50cyBpbiB0aGUgTGlzdCBlbGVtZW50cy5cbiAqIElmIGxlbmd0aCBpcyAwLCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLlxuICogQHBhcmFtIGNvZGVQb2ludHMgVGhlIGNvZGUgcG9pbnRzIHRvIGdlbmVyYXRlIHRoZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGxldCBmcm9tQ29kZVBvaW50OiAoLi4uY29kZVBvaW50czogbnVtYmVyW10pID0+IHN0cmluZztcblxuLyoqXG4gKiBgcmF3YCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgdGFnIGZ1bmN0aW9uIG9mIGEgVGFnZ2VkIFRlbXBsYXRlIFN0cmluZy4gV2hlbiBjYWxsZWRcbiAqIGFzIHN1Y2ggdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYSB3ZWxsIGZvcm1lZCB0ZW1wbGF0ZSBjYWxsIHNpdGUgb2JqZWN0IGFuZCB0aGUgcmVzdFxuICogcGFyYW1ldGVyIHdpbGwgY29udGFpbiB0aGUgc3Vic3RpdHV0aW9uIHZhbHVlcy5cbiAqIEBwYXJhbSB0ZW1wbGF0ZSBBIHdlbGwtZm9ybWVkIHRlbXBsYXRlIHN0cmluZyBjYWxsIHNpdGUgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0gc3Vic3RpdHV0aW9ucyBBIHNldCBvZiBzdWJzdGl0dXRpb24gdmFsdWVzLlxuICovXG5leHBvcnQgbGV0IHJhdzogKHRlbXBsYXRlOiBUZW1wbGF0ZVN0cmluZ3NBcnJheSwgLi4uc3Vic3RpdHV0aW9uczogYW55W10pID0+IHN0cmluZztcblxuLyogRVM2IGluc3RhbmNlIG1ldGhvZHMgKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgbm9ubmVnYXRpdmUgaW50ZWdlciBOdW1iZXIgbGVzcyB0aGFuIDExMTQxMTIgKDB4MTEwMDAwKSB0aGF0IGlzIHRoZSBjb2RlIHBvaW50XG4gKiB2YWx1ZSBvZiB0aGUgVVRGLTE2IGVuY29kZWQgY29kZSBwb2ludCBzdGFydGluZyBhdCB0aGUgc3RyaW5nIGVsZW1lbnQgYXQgcG9zaXRpb24gcG9zIGluXG4gKiB0aGUgU3RyaW5nIHJlc3VsdGluZyBmcm9tIGNvbnZlcnRpbmcgdGhpcyBvYmplY3QgdG8gYSBTdHJpbmcuXG4gKiBJZiB0aGVyZSBpcyBubyBlbGVtZW50IGF0IHRoYXQgcG9zaXRpb24sIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLlxuICogSWYgYSB2YWxpZCBVVEYtMTYgc3Vycm9nYXRlIHBhaXIgZG9lcyBub3QgYmVnaW4gYXQgcG9zLCB0aGUgcmVzdWx0IGlzIHRoZSBjb2RlIHVuaXQgYXQgcG9zLlxuICovXG5leHBvcnQgbGV0IGNvZGVQb2ludEF0OiAodGFyZ2V0OiBzdHJpbmcsIHBvcz86IG51bWJlcikgPT4gbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcbiAqIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhpcyBvYmplY3QgKGNvbnZlcnRlZCB0byBhIFN0cmluZykgc3RhcnRpbmcgYXRcbiAqIGVuZFBvc2l0aW9uIOKAkyBsZW5ndGgodGhpcykuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICovXG5leHBvcnQgbGV0IGVuZHNXaXRoOiAodGFyZ2V0OiBzdHJpbmcsIHNlYXJjaFN0cmluZzogc3RyaW5nLCBlbmRQb3NpdGlvbj86IG51bWJlcikgPT4gYm9vbGVhbjtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgc2VhcmNoU3RyaW5nIGFwcGVhcnMgYXMgYSBzdWJzdHJpbmcgb2YgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoaXNcbiAqIG9iamVjdCB0byBhIFN0cmluZywgYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIHRoYXQgYXJlXG4gKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gcG9zaXRpb247IG90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcbiAqIEBwYXJhbSBzZWFyY2hTdHJpbmcgc2VhcmNoIHN0cmluZ1xuICogQHBhcmFtIHBvc2l0aW9uIElmIHBvc2l0aW9uIGlzIHVuZGVmaW5lZCwgMCBpcyBhc3N1bWVkLCBzbyBhcyB0byBzZWFyY2ggYWxsIG9mIHRoZSBTdHJpbmcuXG4gKi9cbmV4cG9ydCBsZXQgaW5jbHVkZXM6ICh0YXJnZXQ6IHN0cmluZywgc2VhcmNoU3RyaW5nOiBzdHJpbmcsIHBvc2l0aW9uPzogbnVtYmVyKSA9PiBib29sZWFuO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIFN0cmluZyB2YWx1ZSByZXN1bHQgb2Ygbm9ybWFsaXppbmcgdGhlIHN0cmluZyBpbnRvIHRoZSBub3JtYWxpemF0aW9uIGZvcm1cbiAqIG5hbWVkIGJ5IGZvcm0gYXMgc3BlY2lmaWVkIGluIFVuaWNvZGUgU3RhbmRhcmQgQW5uZXggIzE1LCBVbmljb2RlIE5vcm1hbGl6YXRpb24gRm9ybXMuXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXG4gKiBAcGFyYW0gZm9ybSBBcHBsaWNhYmxlIHZhbHVlczogXCJORkNcIiwgXCJORkRcIiwgXCJORktDXCIsIG9yIFwiTkZLRFwiLCBJZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRcbiAqIGlzIFwiTkZDXCJcbiAqL1xuZXhwb3J0IGxldCBub3JtYWxpemU6IFN0cmluZ05vcm1hbGl6ZTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgU3RyaW5nIHZhbHVlIHRoYXQgaXMgbWFkZSBmcm9tIGNvdW50IGNvcGllcyBhcHBlbmRlZCB0b2dldGhlci4gSWYgY291bnQgaXMgMCxcbiAqIFQgaXMgdGhlIGVtcHR5IFN0cmluZyBpcyByZXR1cm5lZC5cbiAqIEBwYXJhbSBjb3VudCBudW1iZXIgb2YgY29waWVzIHRvIGFwcGVuZFxuICovXG5leHBvcnQgbGV0IHJlcGVhdDogKHRhcmdldDogc3RyaW5nLCBjb3VudD86IG51bWJlcikgPT4gc3RyaW5nO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcbiAqIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhpcyBvYmplY3QgKGNvbnZlcnRlZCB0byBhIFN0cmluZykgc3RhcnRpbmcgYXRcbiAqIHBvc2l0aW9uLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAqL1xuZXhwb3J0IGxldCBzdGFydHNXaXRoOiAodGFyZ2V0OiBzdHJpbmcsIHNlYXJjaFN0cmluZzogc3RyaW5nLCBwb3NpdGlvbj86IG51bWJlcikgPT4gYm9vbGVhbjtcblxuLyogRVM3IGluc3RhbmNlIG1ldGhvZHMgKi9cblxuLyoqXG4gKiBQYWRzIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoIGEgZ2l2ZW4gc3RyaW5nIChwb3NzaWJseSByZXBlYXRlZCkgc28gdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyByZWFjaGVzIGEgZ2l2ZW4gbGVuZ3RoLlxuICogVGhlIHBhZGRpbmcgaXMgYXBwbGllZCBmcm9tIHRoZSBlbmQgKHJpZ2h0KSBvZiB0aGUgY3VycmVudCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xuICogQHBhcmFtIG1heExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9uY2UgdGhlIGN1cnJlbnQgc3RyaW5nIGhhcyBiZWVuIHBhZGRlZC5cbiAqICAgICAgICBJZiB0aGlzIHBhcmFtZXRlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgc3RyaW5nJ3MgbGVuZ3RoLCB0aGUgY3VycmVudCBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZCBhcyBpdCBpcy5cbiAqXG4gKiBAcGFyYW0gZmlsbFN0cmluZyBUaGUgc3RyaW5nIHRvIHBhZCB0aGUgY3VycmVudCBzdHJpbmcgd2l0aC5cbiAqICAgICAgICBJZiB0aGlzIHN0cmluZyBpcyB0b28gbG9uZywgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYW5kIHRoZSBsZWZ0LW1vc3QgcGFydCB3aWxsIGJlIGFwcGxpZWQuXG4gKiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIFwiIFwiIChVKzAwMjApLlxuICovXG5leHBvcnQgbGV0IHBhZEVuZDogKHRhcmdldDogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlciwgZmlsbFN0cmluZz86IHN0cmluZykgPT4gc3RyaW5nO1xuXG4vKipcbiAqIFBhZHMgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGggYSBnaXZlbiBzdHJpbmcgKHBvc3NpYmx5IHJlcGVhdGVkKSBzbyB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIHJlYWNoZXMgYSBnaXZlbiBsZW5ndGguXG4gKiBUaGUgcGFkZGluZyBpcyBhcHBsaWVkIGZyb20gdGhlIHN0YXJ0IChsZWZ0KSBvZiB0aGUgY3VycmVudCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xuICogQHBhcmFtIG1heExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9uY2UgdGhlIGN1cnJlbnQgc3RyaW5nIGhhcyBiZWVuIHBhZGRlZC5cbiAqICAgICAgICBJZiB0aGlzIHBhcmFtZXRlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgc3RyaW5nJ3MgbGVuZ3RoLCB0aGUgY3VycmVudCBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZCBhcyBpdCBpcy5cbiAqXG4gKiBAcGFyYW0gZmlsbFN0cmluZyBUaGUgc3RyaW5nIHRvIHBhZCB0aGUgY3VycmVudCBzdHJpbmcgd2l0aC5cbiAqICAgICAgICBJZiB0aGlzIHN0cmluZyBpcyB0b28gbG9uZywgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYW5kIHRoZSBsZWZ0LW1vc3QgcGFydCB3aWxsIGJlIGFwcGxpZWQuXG4gKiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIFwiIFwiIChVKzAwMjApLlxuICovXG5leHBvcnQgbGV0IHBhZFN0YXJ0OiAodGFyZ2V0OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyLCBmaWxsU3RyaW5nPzogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbmlmIChoYXMoJ2VzNi1zdHJpbmcnKSAmJiBoYXMoJ2VzNi1zdHJpbmctcmF3JykpIHtcblx0ZnJvbUNvZGVQb2ludCA9IGdsb2JhbC5TdHJpbmcuZnJvbUNvZGVQb2ludDtcblx0cmF3ID0gZ2xvYmFsLlN0cmluZy5yYXc7XG5cblx0Y29kZVBvaW50QXQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KTtcblx0ZW5kc1dpdGggPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKTtcblx0aW5jbHVkZXMgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKTtcblx0bm9ybWFsaXplID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5ub3JtYWxpemUpO1xuXHRyZXBlYXQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnJlcGVhdCk7XG5cdHN0YXJ0c1dpdGggPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgpO1xufSBlbHNlIHtcblx0LyoqXG5cdCAqIFZhbGlkYXRlcyB0aGF0IHRleHQgaXMgZGVmaW5lZCwgYW5kIG5vcm1hbGl6ZXMgcG9zaXRpb24gKGJhc2VkIG9uIHRoZSBnaXZlbiBkZWZhdWx0IGlmIHRoZSBpbnB1dCBpcyBOYU4pLlxuXHQgKiBVc2VkIGJ5IHN0YXJ0c1dpdGgsIGluY2x1ZGVzLCBhbmQgZW5kc1dpdGguXG5cdCAqXG5cdCAqIEByZXR1cm4gTm9ybWFsaXplZCBwb3NpdGlvbi5cblx0ICovXG5cdGNvbnN0IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MgPSBmdW5jdGlvbihcblx0XHRuYW1lOiBzdHJpbmcsXG5cdFx0dGV4dDogc3RyaW5nLFxuXHRcdHNlYXJjaDogc3RyaW5nLFxuXHRcdHBvc2l0aW9uOiBudW1iZXIsXG5cdFx0aXNFbmQ6IGJvb2xlYW4gPSBmYWxzZVxuXHQpOiBbc3RyaW5nLCBzdHJpbmcsIG51bWJlcl0ge1xuXHRcdGlmICh0ZXh0ID09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy4nICsgbmFtZSArICcgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcgdG8gc2VhcmNoIGFnYWluc3QuJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XG5cdFx0cG9zaXRpb24gPSBwb3NpdGlvbiAhPT0gcG9zaXRpb24gPyAoaXNFbmQgPyBsZW5ndGggOiAwKSA6IHBvc2l0aW9uO1xuXHRcdHJldHVybiBbdGV4dCwgU3RyaW5nKHNlYXJjaCksIE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLCAwKSwgbGVuZ3RoKV07XG5cdH07XG5cblx0ZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50czogbnVtYmVyW10pOiBzdHJpbmcge1xuXHRcdC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcuZnJvbUNvZGVQb2ludFxuXHRcdGNvbnN0IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0aWYgKCFsZW5ndGgpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRjb25zdCBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXHRcdGNvbnN0IE1BWF9TSVpFID0gMHg0MDAwO1xuXHRcdGxldCBjb2RlVW5pdHM6IG51bWJlcltdID0gW107XG5cdFx0bGV0IGluZGV4ID0gLTE7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXG5cdFx0d2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcblx0XHRcdGxldCBjb2RlUG9pbnQgPSBOdW1iZXIoYXJndW1lbnRzW2luZGV4XSk7XG5cblx0XHRcdC8vIENvZGUgcG9pbnRzIG11c3QgYmUgZmluaXRlIGludGVnZXJzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2Vcblx0XHRcdGxldCBpc1ZhbGlkID1cblx0XHRcdFx0aXNGaW5pdGUoY29kZVBvaW50KSAmJiBNYXRoLmZsb29yKGNvZGVQb2ludCkgPT09IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPj0gMCAmJiBjb2RlUG9pbnQgPD0gMHgxMGZmZmY7XG5cdFx0XHRpZiAoIWlzVmFsaWQpIHtcblx0XHRcdFx0dGhyb3cgUmFuZ2VFcnJvcignc3RyaW5nLmZyb21Db2RlUG9pbnQ6IEludmFsaWQgY29kZSBwb2ludCAnICsgY29kZVBvaW50KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNvZGVQb2ludCA8PSAweGZmZmYpIHtcblx0XHRcdFx0Ly8gQk1QIGNvZGUgcG9pbnRcblx0XHRcdFx0Y29kZVVuaXRzLnB1c2goY29kZVBvaW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEFzdHJhbCBjb2RlIHBvaW50OyBzcGxpdCBpbiBzdXJyb2dhdGUgaGFsdmVzXG5cdFx0XHRcdC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuXHRcdFx0XHRjb2RlUG9pbnQgLT0gMHgxMDAwMDtcblx0XHRcdFx0bGV0IGhpZ2hTdXJyb2dhdGUgPSAoY29kZVBvaW50ID4+IDEwKSArIEhJR0hfU1VSUk9HQVRFX01JTjtcblx0XHRcdFx0bGV0IGxvd1N1cnJvZ2F0ZSA9IGNvZGVQb2ludCAlIDB4NDAwICsgTE9XX1NVUlJPR0FURV9NSU47XG5cdFx0XHRcdGNvZGVVbml0cy5wdXNoKGhpZ2hTdXJyb2dhdGUsIGxvd1N1cnJvZ2F0ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbmRleCArIDEgPT09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcblx0XHRcdFx0cmVzdWx0ICs9IGZyb21DaGFyQ29kZS5hcHBseShudWxsLCBjb2RlVW5pdHMpO1xuXHRcdFx0XHRjb2RlVW5pdHMubGVuZ3RoID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHRyYXcgPSBmdW5jdGlvbiByYXcoY2FsbFNpdGU6IFRlbXBsYXRlU3RyaW5nc0FycmF5LCAuLi5zdWJzdGl0dXRpb25zOiBhbnlbXSk6IHN0cmluZyB7XG5cdFx0bGV0IHJhd1N0cmluZ3MgPSBjYWxsU2l0ZS5yYXc7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdGxldCBudW1TdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9ucy5sZW5ndGg7XG5cblx0XHRpZiAoY2FsbFNpdGUgPT0gbnVsbCB8fCBjYWxsU2l0ZS5yYXcgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJhdyByZXF1aXJlcyBhIHZhbGlkIGNhbGxTaXRlIG9iamVjdCB3aXRoIGEgcmF3IHZhbHVlJyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IHJhd1N0cmluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdHJlc3VsdCArPSByYXdTdHJpbmdzW2ldICsgKGkgPCBudW1TdWJzdGl0dXRpb25zICYmIGkgPCBsZW5ndGggLSAxID8gc3Vic3RpdHV0aW9uc1tpXSA6ICcnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdGNvZGVQb2ludEF0ID0gZnVuY3Rpb24gY29kZVBvaW50QXQodGV4dDogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyID0gMCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRcblx0XHRpZiAodGV4dCA9PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcuY29kZVBvaW50QXQgcmVxdXJpZXMgYSB2YWxpZCBzdHJpbmcuJyk7XG5cdFx0fVxuXHRcdGNvbnN0IGxlbmd0aCA9IHRleHQubGVuZ3RoO1xuXG5cdFx0aWYgKHBvc2l0aW9uICE9PSBwb3NpdGlvbikge1xuXHRcdFx0cG9zaXRpb24gPSAwO1xuXHRcdH1cblx0XHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IGxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIGZpcnN0IGNvZGUgdW5pdFxuXHRcdGNvbnN0IGZpcnN0ID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcblx0XHRpZiAoZmlyc3QgPj0gSElHSF9TVVJST0dBVEVfTUlOICYmIGZpcnN0IDw9IEhJR0hfU1VSUk9HQVRFX01BWCAmJiBsZW5ndGggPiBwb3NpdGlvbiArIDEpIHtcblx0XHRcdC8vIFN0YXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIgKGhpZ2ggc3Vycm9nYXRlIGFuZCB0aGVyZSBpcyBhIG5leHQgY29kZSB1bml0KTsgY2hlY2sgZm9yIGxvdyBzdXJyb2dhdGVcblx0XHRcdC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuXHRcdFx0Y29uc3Qgc2Vjb25kID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSk7XG5cdFx0XHRpZiAoc2Vjb25kID49IExPV19TVVJST0dBVEVfTUlOICYmIHNlY29uZCA8PSBMT1dfU1VSUk9HQVRFX01BWCkge1xuXHRcdFx0XHRyZXR1cm4gKGZpcnN0IC0gSElHSF9TVVJST0dBVEVfTUlOKSAqIDB4NDAwICsgc2Vjb25kIC0gTE9XX1NVUlJPR0FURV9NSU4gKyAweDEwMDAwO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH07XG5cblx0ZW5kc1dpdGggPSBmdW5jdGlvbiBlbmRzV2l0aCh0ZXh0OiBzdHJpbmcsIHNlYXJjaDogc3RyaW5nLCBlbmRQb3NpdGlvbj86IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGlmIChlbmRQb3NpdGlvbiA9PSBudWxsKSB7XG5cdFx0XHRlbmRQb3NpdGlvbiA9IHRleHQubGVuZ3RoO1xuXHRcdH1cblxuXHRcdFt0ZXh0LCBzZWFyY2gsIGVuZFBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ2VuZHNXaXRoJywgdGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbiwgdHJ1ZSk7XG5cblx0XHRjb25zdCBzdGFydCA9IGVuZFBvc2l0aW9uIC0gc2VhcmNoLmxlbmd0aDtcblx0XHRpZiAoc3RhcnQgPCAwKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRleHQuc2xpY2Uoc3RhcnQsIGVuZFBvc2l0aW9uKSA9PT0gc2VhcmNoO1xuXHR9O1xuXG5cdGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXModGV4dDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZywgcG9zaXRpb246IG51bWJlciA9IDApOiBib29sZWFuIHtcblx0XHRbdGV4dCwgc2VhcmNoLCBwb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdpbmNsdWRlcycsIHRleHQsIHNlYXJjaCwgcG9zaXRpb24pO1xuXHRcdHJldHVybiB0ZXh0LmluZGV4T2Yoc2VhcmNoLCBwb3NpdGlvbikgIT09IC0xO1xuXHR9O1xuXG5cdHJlcGVhdCA9IGZ1bmN0aW9uIHJlcGVhdCh0ZXh0OiBzdHJpbmcsIGNvdW50OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcblx0XHQvLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcblx0XHRpZiAodGV4dCA9PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblx0XHRpZiAoY291bnQgIT09IGNvdW50KSB7XG5cdFx0XHRjb3VudCA9IDA7XG5cdFx0fVxuXHRcdGlmIChjb3VudCA8IDAgfHwgY291bnQgPT09IEluZmluaXR5KSB7XG5cdFx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XG5cdFx0fVxuXG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdHdoaWxlIChjb3VudCkge1xuXHRcdFx0aWYgKGNvdW50ICUgMikge1xuXHRcdFx0XHRyZXN1bHQgKz0gdGV4dDtcblx0XHRcdH1cblx0XHRcdGlmIChjb3VudCA+IDEpIHtcblx0XHRcdFx0dGV4dCArPSB0ZXh0O1xuXHRcdFx0fVxuXHRcdFx0Y291bnQgPj49IDE7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0c3RhcnRzV2l0aCA9IGZ1bmN0aW9uIHN0YXJ0c1dpdGgodGV4dDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZywgcG9zaXRpb246IG51bWJlciA9IDApOiBib29sZWFuIHtcblx0XHRzZWFyY2ggPSBTdHJpbmcoc2VhcmNoKTtcblx0XHRbdGV4dCwgc2VhcmNoLCBwb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdzdGFydHNXaXRoJywgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbik7XG5cblx0XHRjb25zdCBlbmQgPSBwb3NpdGlvbiArIHNlYXJjaC5sZW5ndGg7XG5cdFx0aWYgKGVuZCA+IHRleHQubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRleHQuc2xpY2UocG9zaXRpb24sIGVuZCkgPT09IHNlYXJjaDtcblx0fTtcbn1cblxuaWYgKGhhcygnZXMyMDE3LXN0cmluZycpKSB7XG5cdHBhZEVuZCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucGFkRW5kKTtcblx0cGFkU3RhcnQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KTtcbn0gZWxzZSB7XG5cdHBhZEVuZCA9IGZ1bmN0aW9uIHBhZEVuZCh0ZXh0OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyLCBmaWxsU3RyaW5nOiBzdHJpbmcgPSAnICcpOiBzdHJpbmcge1xuXHRcdGlmICh0ZXh0ID09PSBudWxsIHx8IHRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIHZhbGlkIHN0cmluZy4nKTtcblx0XHR9XG5cblx0XHRpZiAobWF4TGVuZ3RoID09PSBJbmZpbml0eSkge1xuXHRcdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5wYWRFbmQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xuXHRcdH1cblxuXHRcdGlmIChtYXhMZW5ndGggPT09IG51bGwgfHwgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbWF4TGVuZ3RoIDwgMCkge1xuXHRcdFx0bWF4TGVuZ3RoID0gMDtcblx0XHR9XG5cblx0XHRsZXQgc3RyVGV4dCA9IFN0cmluZyh0ZXh0KTtcblx0XHRjb25zdCBwYWRkaW5nID0gbWF4TGVuZ3RoIC0gc3RyVGV4dC5sZW5ndGg7XG5cblx0XHRpZiAocGFkZGluZyA+IDApIHtcblx0XHRcdHN0clRleHQgKz1cblx0XHRcdFx0cmVwZWF0KGZpbGxTdHJpbmcsIE1hdGguZmxvb3IocGFkZGluZyAvIGZpbGxTdHJpbmcubGVuZ3RoKSkgK1xuXHRcdFx0XHRmaWxsU3RyaW5nLnNsaWNlKDAsIHBhZGRpbmcgJSBmaWxsU3RyaW5nLmxlbmd0aCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN0clRleHQ7XG5cdH07XG5cblx0cGFkU3RhcnQgPSBmdW5jdGlvbiBwYWRTdGFydCh0ZXh0OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyLCBmaWxsU3RyaW5nOiBzdHJpbmcgPSAnICcpOiBzdHJpbmcge1xuXHRcdGlmICh0ZXh0ID09PSBudWxsIHx8IHRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIHZhbGlkIHN0cmluZy4nKTtcblx0XHR9XG5cblx0XHRpZiAobWF4TGVuZ3RoID09PSBJbmZpbml0eSkge1xuXHRcdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5wYWRTdGFydCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKG1heExlbmd0aCA9PT0gbnVsbCB8fCBtYXhMZW5ndGggPT09IHVuZGVmaW5lZCB8fCBtYXhMZW5ndGggPCAwKSB7XG5cdFx0XHRtYXhMZW5ndGggPSAwO1xuXHRcdH1cblxuXHRcdGxldCBzdHJUZXh0ID0gU3RyaW5nKHRleHQpO1xuXHRcdGNvbnN0IHBhZGRpbmcgPSBtYXhMZW5ndGggLSBzdHJUZXh0Lmxlbmd0aDtcblxuXHRcdGlmIChwYWRkaW5nID4gMCkge1xuXHRcdFx0c3RyVGV4dCA9XG5cdFx0XHRcdHJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcblx0XHRcdFx0ZmlsbFN0cmluZy5zbGljZSgwLCBwYWRkaW5nICUgZmlsbFN0cmluZy5sZW5ndGgpICtcblx0XHRcdFx0c3RyVGV4dDtcblx0XHR9XG5cblx0XHRyZXR1cm4gc3RyVGV4dDtcblx0fTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzdHJpbmcudHMiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4uL2dsb2JhbCc7XG5pbXBvcnQgaGFzIGZyb20gJy4vaGFzJztcbmltcG9ydCB7IEhhbmRsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5mdW5jdGlvbiBleGVjdXRlVGFzayhpdGVtOiBRdWV1ZUl0ZW0gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0aWYgKGl0ZW0gJiYgaXRlbS5pc0FjdGl2ZSAmJiBpdGVtLmNhbGxiYWNrKSB7XG5cdFx0aXRlbS5jYWxsYmFjaygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFF1ZXVlSGFuZGxlKGl0ZW06IFF1ZXVlSXRlbSwgZGVzdHJ1Y3Rvcj86ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogSGFuZGxlIHtcblx0cmV0dXJuIHtcblx0XHRkZXN0cm95OiBmdW5jdGlvbih0aGlzOiBIYW5kbGUpIHtcblx0XHRcdHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkge307XG5cdFx0XHRpdGVtLmlzQWN0aXZlID0gZmFsc2U7XG5cdFx0XHRpdGVtLmNhbGxiYWNrID0gbnVsbDtcblxuXHRcdFx0aWYgKGRlc3RydWN0b3IpIHtcblx0XHRcdFx0ZGVzdHJ1Y3RvcigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuaW50ZXJmYWNlIFBvc3RNZXNzYWdlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG5cdHNvdXJjZTogYW55O1xuXHRkYXRhOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVJdGVtIHtcblx0aXNBY3RpdmU6IGJvb2xlYW47XG5cdGNhbGxiYWNrOiBudWxsIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4gYW55KTtcbn1cblxubGV0IGNoZWNrTWljcm9UYXNrUXVldWU6ICgpID0+IHZvaWQ7XG5sZXQgbWljcm9UYXNrczogUXVldWVJdGVtW107XG5cbi8qKlxuICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gdGhlIG1hY3JvdGFzayBxdWV1ZS5cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxuICovXG5leHBvcnQgY29uc3QgcXVldWVUYXNrID0gKGZ1bmN0aW9uKCkge1xuXHRsZXQgZGVzdHJ1Y3RvcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG5cdGxldCBlbnF1ZXVlOiAoaXRlbTogUXVldWVJdGVtKSA9PiB2b2lkO1xuXG5cdC8vIFNpbmNlIHRoZSBJRSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0SW1tZWRpYXRlYCBpcyBub3QgZmxhd2xlc3MsIHdlIHdpbGwgdGVzdCBmb3IgYHBvc3RNZXNzYWdlYCBmaXJzdC5cblx0aWYgKGhhcygncG9zdG1lc3NhZ2UnKSkge1xuXHRcdGNvbnN0IHF1ZXVlOiBRdWV1ZUl0ZW1bXSA9IFtdO1xuXG5cdFx0Z2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihldmVudDogUG9zdE1lc3NhZ2VFdmVudCk6IHZvaWQge1xuXHRcdFx0Ly8gQ29uZmlybSB0aGF0IHRoZSBldmVudCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgYnkgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLlxuXHRcdFx0aWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmIGV2ZW50LmRhdGEgPT09ICdkb2pvLXF1ZXVlLW1lc3NhZ2UnKSB7XG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0XHRcdGlmIChxdWV1ZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRleGVjdXRlVGFzayhxdWV1ZS5zaGlmdCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZW5xdWV1ZSA9IGZ1bmN0aW9uKGl0ZW06IFF1ZXVlSXRlbSk6IHZvaWQge1xuXHRcdFx0cXVldWUucHVzaChpdGVtKTtcblx0XHRcdGdsb2JhbC5wb3N0TWVzc2FnZSgnZG9qby1xdWV1ZS1tZXNzYWdlJywgJyonKTtcblx0XHR9O1xuXHR9IGVsc2UgaWYgKGhhcygnc2V0aW1tZWRpYXRlJykpIHtcblx0XHRkZXN0cnVjdG9yID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xuXHRcdGVucXVldWUgPSBmdW5jdGlvbihpdGVtOiBRdWV1ZUl0ZW0pOiBhbnkge1xuXHRcdFx0cmV0dXJuIHNldEltbWVkaWF0ZShleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGRlc3RydWN0b3IgPSBnbG9iYWwuY2xlYXJUaW1lb3V0O1xuXHRcdGVucXVldWUgPSBmdW5jdGlvbihpdGVtOiBRdWV1ZUl0ZW0pOiBhbnkge1xuXHRcdFx0cmV0dXJuIHNldFRpbWVvdXQoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSwgMCk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHF1ZXVlVGFzayhjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBIYW5kbGUge1xuXHRcdGNvbnN0IGl0ZW06IFF1ZXVlSXRlbSA9IHtcblx0XHRcdGlzQWN0aXZlOiB0cnVlLFxuXHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrXG5cdFx0fTtcblx0XHRjb25zdCBpZDogYW55ID0gZW5xdWV1ZShpdGVtKTtcblxuXHRcdHJldHVybiBnZXRRdWV1ZUhhbmRsZShcblx0XHRcdGl0ZW0sXG5cdFx0XHRkZXN0cnVjdG9yICYmXG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlc3RydWN0b3IoaWQpO1xuXHRcdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxuXHRyZXR1cm4gaGFzKCdtaWNyb3Rhc2tzJylcblx0XHQ/IHF1ZXVlVGFza1xuXHRcdDogZnVuY3Rpb24oY2FsbGJhY2s6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogSGFuZGxlIHtcblx0XHRcdFx0Y2hlY2tNaWNyb1Rhc2tRdWV1ZSgpO1xuXHRcdFx0XHRyZXR1cm4gcXVldWVUYXNrKGNhbGxiYWNrKTtcblx0XHRcdH07XG59KSgpO1xuXG4vLyBXaGVuIG5vIG1lY2hhbmlzbSBmb3IgcmVnaXN0ZXJpbmcgbWljcm90YXNrcyBpcyBleHBvc2VkIGJ5IHRoZSBlbnZpcm9ubWVudCwgbWljcm90YXNrcyB3aWxsXG4vLyBiZSBxdWV1ZWQgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYSBzaW5nbGUgbWFjcm90YXNrIGJlZm9yZSB0aGUgb3RoZXIgbWFjcm90YXNrcyBhcmUgZXhlY3V0ZWQuXG5pZiAoIWhhcygnbWljcm90YXNrcycpKSB7XG5cdGxldCBpc01pY3JvVGFza1F1ZXVlZCA9IGZhbHNlO1xuXG5cdG1pY3JvVGFza3MgPSBbXTtcblx0Y2hlY2tNaWNyb1Rhc2tRdWV1ZSA9IGZ1bmN0aW9uKCk6IHZvaWQge1xuXHRcdGlmICghaXNNaWNyb1Rhc2tRdWV1ZWQpIHtcblx0XHRcdGlzTWljcm9UYXNrUXVldWVkID0gdHJ1ZTtcblx0XHRcdHF1ZXVlVGFzayhmdW5jdGlvbigpIHtcblx0XHRcdFx0aXNNaWNyb1Rhc2tRdWV1ZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAobWljcm9UYXNrcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRsZXQgaXRlbTogUXVldWVJdGVtIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdHdoaWxlICgoaXRlbSA9IG1pY3JvVGFza3Muc2hpZnQoKSkpIHtcblx0XHRcdFx0XHRcdGV4ZWN1dGVUYXNrKGl0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIFNjaGVkdWxlcyBhbiBhbmltYXRpb24gdGFzayB3aXRoIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpZiBpdCBleGlzdHMsIG9yIHdpdGggYHF1ZXVlVGFza2Agb3RoZXJ3aXNlLlxuICpcbiAqIFNpbmNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSdzIGJlaGF2aW9yIGRvZXMgbm90IG1hdGNoIHRoYXQgZXhwZWN0ZWQgZnJvbSBgcXVldWVUYXNrYCwgaXQgaXMgbm90IHVzZWQgdGhlcmUuXG4gKiBIb3dldmVyLCBhdCB0aW1lcyBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGRlbGVnYXRlIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZTsgaGVuY2UgdGhlIGZvbGxvd2luZyBtZXRob2QuXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXVlQW5pbWF0aW9uVGFzayA9IChmdW5jdGlvbigpIHtcblx0aWYgKCFoYXMoJ3JhZicpKSB7XG5cdFx0cmV0dXJuIHF1ZXVlVGFzaztcblx0fVxuXG5cdGZ1bmN0aW9uIHF1ZXVlQW5pbWF0aW9uVGFzayhjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBIYW5kbGUge1xuXHRcdGNvbnN0IGl0ZW06IFF1ZXVlSXRlbSA9IHtcblx0XHRcdGlzQWN0aXZlOiB0cnVlLFxuXHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrXG5cdFx0fTtcblx0XHRjb25zdCByYWZJZDogbnVtYmVyID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSkpO1xuXG5cdFx0cmV0dXJuIGdldFF1ZXVlSGFuZGxlKGl0ZW0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gVE9ETzogVXNlIGFzcGVjdC5iZWZvcmUgd2hlbiBpdCBpcyBhdmFpbGFibGUuXG5cdHJldHVybiBoYXMoJ21pY3JvdGFza3MnKVxuXHRcdD8gcXVldWVBbmltYXRpb25UYXNrXG5cdFx0OiBmdW5jdGlvbihjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBIYW5kbGUge1xuXHRcdFx0XHRjaGVja01pY3JvVGFza1F1ZXVlKCk7XG5cdFx0XHRcdHJldHVybiBxdWV1ZUFuaW1hdGlvblRhc2soY2FsbGJhY2spO1xuXHRcdFx0fTtcbn0pKCk7XG5cbi8qKlxuICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gdGhlIG1pY3JvdGFzayBxdWV1ZS5cbiAqXG4gKiBBbnkgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBgcXVldWVNaWNyb1Rhc2tgIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBuZXh0IG1hY3JvdGFzay4gSWYgbm8gbmF0aXZlXG4gKiBtZWNoYW5pc20gZm9yIHNjaGVkdWxpbmcgbWFjcm90YXNrcyBpcyBleHBvc2VkLCB0aGVuIGFueSBjYWxsYmFja3Mgd2lsbCBiZSBmaXJlZCBiZWZvcmUgYW55IG1hY3JvdGFza1xuICogcmVnaXN0ZXJlZCB3aXRoIGBxdWV1ZVRhc2tgIG9yIGBxdWV1ZUFuaW1hdGlvblRhc2tgLlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayB0aGUgZnVuY3Rpb24gdG8gYmUgcXVldWVkIGFuZCBsYXRlciBleGVjdXRlZC5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGEgYGRlc3Ryb3lgIG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgcHJldmVudHMgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnJvbSBleGVjdXRpbmcuXG4gKi9cbmV4cG9ydCBsZXQgcXVldWVNaWNyb1Rhc2sgPSAoZnVuY3Rpb24oKSB7XG5cdGxldCBlbnF1ZXVlOiAoaXRlbTogUXVldWVJdGVtKSA9PiB2b2lkO1xuXG5cdGlmIChoYXMoJ2hvc3Qtbm9kZScpKSB7XG5cdFx0ZW5xdWV1ZSA9IGZ1bmN0aW9uKGl0ZW06IFF1ZXVlSXRlbSk6IHZvaWQge1xuXHRcdFx0Z2xvYmFsLnByb2Nlc3MubmV4dFRpY2soZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSk7XG5cdFx0fTtcblx0fSBlbHNlIGlmIChoYXMoJ2VzNi1wcm9taXNlJykpIHtcblx0XHRlbnF1ZXVlID0gZnVuY3Rpb24oaXRlbTogUXVldWVJdGVtKTogdm9pZCB7XG5cdFx0XHRnbG9iYWwuUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4oZXhlY3V0ZVRhc2spO1xuXHRcdH07XG5cdH0gZWxzZSBpZiAoaGFzKCdkb20tbXV0YXRpb25vYnNlcnZlcicpKSB7XG5cdFx0LyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cblx0XHRjb25zdCBIb3N0TXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuXHRcdGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRjb25zdCBxdWV1ZTogUXVldWVJdGVtW10gPSBbXTtcblx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBIb3N0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpOiB2b2lkIHtcblx0XHRcdHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmlzQWN0aXZlICYmIGl0ZW0uY2FsbGJhY2spIHtcblx0XHRcdFx0XHRpdGVtLmNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuXG5cdFx0ZW5xdWV1ZSA9IGZ1bmN0aW9uKGl0ZW06IFF1ZXVlSXRlbSk6IHZvaWQge1xuXHRcdFx0cXVldWUucHVzaChpdGVtKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdxdWV1ZVN0YXR1cycsICcxJyk7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRlbnF1ZXVlID0gZnVuY3Rpb24oaXRlbTogUXVldWVJdGVtKTogdm9pZCB7XG5cdFx0XHRjaGVja01pY3JvVGFza1F1ZXVlKCk7XG5cdFx0XHRtaWNyb1Rhc2tzLnB1c2goaXRlbSk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBmdW5jdGlvbihjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBIYW5kbGUge1xuXHRcdGNvbnN0IGl0ZW06IFF1ZXVlSXRlbSA9IHtcblx0XHRcdGlzQWN0aXZlOiB0cnVlLFxuXHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrXG5cdFx0fTtcblxuXHRcdGVucXVldWUoaXRlbSk7XG5cblx0XHRyZXR1cm4gZ2V0UXVldWVIYW5kbGUoaXRlbSk7XG5cdH07XG59KSgpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHF1ZXVlLnRzIiwiLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSB2YWx1ZSBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gKlxuICogQHBhcmFtIHZhbHVlICAgICAgICBUaGUgdmFsdWUgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3Igc2hvdWxkIGJlIHNldCB0b1xuICogQHBhcmFtIGVudW1lcmFibGUgICBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGVudW1iZXJhYmxlLCBkZWZhdWx0cyB0byBmYWxzZVxuICogQHBhcmFtIHdyaXRhYmxlICAgICBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlLCBkZWZhdWx0cyB0byB0cnVlXG4gKiBAcGFyYW0gY29uZmlndXJhYmxlIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uZmlndXJhYmxlLCBkZWZhdWx0cyB0byB0cnVlXG4gKiBAcmV0dXJuICAgICAgICAgICAgIFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWVEZXNjcmlwdG9yPFQ+KFxuXHR2YWx1ZTogVCxcblx0ZW51bWVyYWJsZTogYm9vbGVhbiA9IGZhbHNlLFxuXHR3cml0YWJsZTogYm9vbGVhbiA9IHRydWUsXG5cdGNvbmZpZ3VyYWJsZTogYm9vbGVhbiA9IHRydWVcbik6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+IHtcblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZW51bWVyYWJsZTogZW51bWVyYWJsZSxcblx0XHR3cml0YWJsZTogd3JpdGFibGUsXG5cdFx0Y29uZmlndXJhYmxlOiBjb25maWd1cmFibGVcblx0fTtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciBmdW5jdGlvbiB3aGljaCB3cmFwcyBhIGZ1bmN0aW9uIHdoZXJlIHRoZSBmaXJzdCBhcmd1bWVudCBiZWNvbWVzIHRoZSBzY29wZVxuICogb2YgdGhlIGNhbGxcbiAqXG4gKiBAcGFyYW0gbmF0aXZlRnVuY3Rpb24gVGhlIHNvdXJjZSBmdW5jdGlvbiB0byBiZSB3cmFwcGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTmF0aXZlPFQsIFUsIFI+KG5hdGl2ZUZ1bmN0aW9uOiAoYXJnMTogVSkgPT4gUik6ICh0YXJnZXQ6IFQsIGFyZzE6IFUpID0+IFI7XG5leHBvcnQgZnVuY3Rpb24gd3JhcE5hdGl2ZTxULCBVLCBWLCBSPihuYXRpdmVGdW5jdGlvbjogKGFyZzE6IFUsIGFyZzI6IFYpID0+IFIpOiAodGFyZ2V0OiBULCBhcmcxOiBVLCBhcmcyOiBWKSA9PiBSO1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBOYXRpdmU8VCwgVSwgViwgVywgUj4oXG5cdG5hdGl2ZUZ1bmN0aW9uOiAoYXJnMTogVSwgYXJnMjogViwgYXJnMzogVykgPT4gUlxuKTogKHRhcmdldDogVCwgYXJnMTogVSwgYXJnMjogViwgYXJnMzogVykgPT4gUjtcbmV4cG9ydCBmdW5jdGlvbiB3cmFwTmF0aXZlPFQsIFUsIFYsIFcsIFgsIFI+KFxuXHRuYXRpdmVGdW5jdGlvbjogKGFyZzE6IFUsIGFyZzI6IFYsIGFyZzM6IFcpID0+IFJcbik6ICh0YXJnZXQ6IFQsIGFyZzE6IFUsIGFyZzI6IFYsIGFyZzM6IFcpID0+IFI7XG5leHBvcnQgZnVuY3Rpb24gd3JhcE5hdGl2ZTxULCBVLCBWLCBXLCBYLCBZLCBSPihcblx0bmF0aXZlRnVuY3Rpb246IChhcmcxOiBVLCBhcmcyOiBWLCBhcmczOiBXLCBhcmc0OiBZKSA9PiBSXG4pOiAodGFyZ2V0OiBULCBhcmcxOiBVLCBhcmcyOiBWLCBhcmczOiBXLCBhcmc0OiBZKSA9PiBSO1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBOYXRpdmUobmF0aXZlRnVuY3Rpb246ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogKHRhcmdldDogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueSB7XG5cdFx0cmV0dXJuIG5hdGl2ZUZ1bmN0aW9uLmFwcGx5KHRhcmdldCwgYXJncyk7XG5cdH07XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gdXRpbC50cyIsImltcG9ydCBhc3NlcnRSZW5kZXIgZnJvbSAnLi9zdXBwb3J0L2Fzc2VydFJlbmRlcic7XG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tICcuL3N1cHBvcnQvc2VsZWN0b3InO1xuaW1wb3J0IHsgV05vZGUsIEROb2RlLCBXaWRnZXRCYXNlSW50ZXJmYWNlLCBDb25zdHJ1Y3RvciwgVk5vZGUgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFdpZGdldEJhc2UgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9XaWRnZXRCYXNlJztcbmltcG9ydCB7IGRlY29yYXRlLCBpc1ZOb2RlLCBpc1dOb2RlIH0gZnJvbSAnQGRvam8vd2lkZ2V0LWNvcmUvZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tQ29tcGFyYXRvciB7XG5cdHNlbGVjdG9yOiBzdHJpbmc7XG5cdHByb3BlcnR5OiBzdHJpbmc7XG5cdGNvbXBhcmF0b3I6ICh2YWx1ZTogYW55KSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uYWxTZWxlY3RvciB7XG5cdChub2RlOiBWTm9kZSB8IFdOb2RlKTogdW5kZWZpbmVkIHwgRnVuY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb3JhdG9yUmVzdWx0PFQ+IHtcblx0aGFzRGVmZXJyZWRQcm9wZXJ0aWVzOiBib29sZWFuO1xuXHRub2RlczogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBlY3RlZFJlbmRlciB7XG5cdCgpOiBETm9kZSB8IEROb2RlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwZWN0IHtcblx0KGV4cGVjdGVkUmVuZGVyRnVuYzogRXhwZWN0ZWRSZW5kZXIpOiB2b2lkO1xuXHQoZXhwZWN0ZWRSZW5kZXJGdW5jOiBFeHBlY3RlZFJlbmRlciwgYWN0dWFsUmVuZGVyRnVuYz86IEV4cGVjdGVkUmVuZGVyKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBlY3RQYXJ0aWFsIHtcblx0KHNlbGVjdG9yOiBzdHJpbmcsIGV4cGVjdGVkUmVuZGVyRnVuYzogRXhwZWN0ZWRSZW5kZXIpOiB2b2lkO1xuXHQoc2VsZWN0b3I6IHN0cmluZywgZXhwZWN0ZWRSZW5kZXJGdW5jOiBFeHBlY3RlZFJlbmRlciwgYWN0dWFsUmVuZGVyRnVuYz86IEV4cGVjdGVkUmVuZGVyKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmlnZ2VyIHtcblx0KHNlbGVjdG9yOiBzdHJpbmcsIGZ1bmN0aW9uU2VsZWN0b3I6IEZ1bmN0aW9uYWxTZWxlY3RvciwgLi4uYXJnczogYW55W10pOiBhbnk7XG5cdChzZWxlY3Rvcjogc3RyaW5nLCBmdW5jdGlvblNlbGVjdG9yOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFJlbmRlciB7XG5cdChpbmRleD86IG51bWJlcik6IEROb2RlIHwgRE5vZGVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIYXJuZXNzQVBJIHtcblx0ZXhwZWN0OiBFeHBlY3Q7XG5cdGV4cGVjdFBhcnRpYWw6IEV4cGVjdFBhcnRpYWw7XG5cdHRyaWdnZXI6IFRyaWdnZXI7XG5cdGdldFJlbmRlcjogR2V0UmVuZGVyO1xufVxuXG5mdW5jdGlvbiBkZWNvcmF0ZU5vZGVzKGROb2RlOiBETm9kZVtdKTogRGVjb3JhdG9yUmVzdWx0PEROb2RlW10+O1xuZnVuY3Rpb24gZGVjb3JhdGVOb2RlcyhkTm9kZTogRE5vZGUpOiBEZWNvcmF0b3JSZXN1bHQ8RE5vZGU+O1xuZnVuY3Rpb24gZGVjb3JhdGVOb2RlcyhkTm9kZTogRE5vZGUgfCBETm9kZVtdKTogRGVjb3JhdG9yUmVzdWx0PEROb2RlIHwgRE5vZGVbXT47XG5mdW5jdGlvbiBkZWNvcmF0ZU5vZGVzKGROb2RlOiBhbnkpOiBEZWNvcmF0b3JSZXN1bHQ8RE5vZGUgfCBETm9kZVtdPiB7XG5cdGxldCBoYXNEZWZlcnJlZFByb3BlcnRpZXMgPSBmYWxzZTtcblx0ZnVuY3Rpb24gYWRkUGFyZW50KHBhcmVudDogV05vZGUgfCBWTm9kZSk6IHZvaWQge1xuXHRcdChwYXJlbnQuY2hpbGRyZW4gfHwgW10pLmZvckVhY2goKGNoaWxkKSA9PiB7XG5cdFx0XHRpZiAoaXNWTm9kZShjaGlsZCkgfHwgaXNXTm9kZShjaGlsZCkpIHtcblx0XHRcdFx0KGNoaWxkIGFzIGFueSkucGFyZW50ID0gcGFyZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChpc1ZOb2RlKHBhcmVudCkgJiYgdHlwZW9mIHBhcmVudC5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0aGFzRGVmZXJyZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblx0XHRcdHBhcmVudC5wcm9wZXJ0aWVzID0geyAuLi5wYXJlbnQucHJvcGVydGllcywgLi4ucGFyZW50LmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrKGZhbHNlKSB9O1xuXHRcdH1cblx0fVxuXHRjb25zdCBub2RlcyA9IGRlY29yYXRlKGROb2RlLCBhZGRQYXJlbnQsIChub2RlOiBETm9kZSk6IG5vZGUgaXMgV05vZGUgfCBWTm9kZSA9PiBpc1dOb2RlKG5vZGUpIHx8IGlzVk5vZGUobm9kZSkpO1xuXHRyZXR1cm4geyBoYXNEZWZlcnJlZFByb3BlcnRpZXMsIG5vZGVzIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXJuZXNzKFxuXHRyZW5kZXJGdW5jOiAoKSA9PiBXTm9kZTxXaWRnZXRCYXNlSW50ZXJmYWNlPixcblx0Y3VzdG9tQ29tcGFyYXRvcjogQ3VzdG9tQ29tcGFyYXRvcltdID0gW11cbik6IEhhcm5lc3NBUEkge1xuXHRsZXQgaW52YWxpZGF0ZWQgPSB0cnVlO1xuXHRsZXQgd05vZGUgPSByZW5kZXJGdW5jKCk7XG5cdGxldCB3aWRnZXQ6IFdpZGdldEJhc2U7XG5cdGNvbnN0IHJlbmRlclN0YWNrOiAoRE5vZGUgfCBETm9kZVtdKVtdID0gW107XG5cdGNvbnN0IHsgcHJvcGVydGllcywgY2hpbGRyZW4gfSA9IHdOb2RlO1xuXHRjb25zdCB3aWRnZXRDb25zdHJ1Y3RvciA9IHdOb2RlLndpZGdldENvbnN0cnVjdG9yIGFzIENvbnN0cnVjdG9yPFdpZGdldEJhc2U+O1xuXHRpZiAodHlwZW9mIHdpZGdldENvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0d2lkZ2V0ID0gbmV3IGNsYXNzIGV4dGVuZHMgd2lkZ2V0Q29uc3RydWN0b3Ige1xuXHRcdFx0aW52YWxpZGF0ZSgpIHtcblx0XHRcdFx0aW52YWxpZGF0ZWQgPSB0cnVlO1xuXHRcdFx0XHRzdXBlci5pbnZhbGlkYXRlKCk7XG5cdFx0XHR9XG5cdFx0fSgpO1xuXHRcdHdpZGdldC5fX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzKTtcblx0XHR3aWRnZXQuX19zZXRDaGlsZHJlbl9fKGNoaWxkcmVuKTtcblx0XHRfdHJ5UmVuZGVyKCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdIYXJuZXNzIGRvZXMgbm90IHN1cHBvcnQgcmVnaXN0cnkgaXRlbXMnKTtcblx0fVxuXG5cdGZ1bmN0aW9uIF9nZXRSZW5kZXIoY291bnQ/OiBudW1iZXIpOiBETm9kZSB8IEROb2RlW10ge1xuXHRcdHJldHVybiBjb3VudCA/IHJlbmRlclN0YWNrW2NvdW50XSA6IHJlbmRlclN0YWNrW3JlbmRlclN0YWNrLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0ZnVuY3Rpb24gX3J1bkNvbXBhcmVzKG5vZGVzOiBETm9kZSB8IEROb2RlW10sIGlzRXhwZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdGN1c3RvbUNvbXBhcmF0b3IuZm9yRWFjaCgoeyBzZWxlY3RvciwgcHJvcGVydHksIGNvbXBhcmF0b3IgfSkgPT4ge1xuXHRcdFx0Y29uc3QgaXRlbXMgPSBzZWxlY3Qoc2VsZWN0b3IsIG5vZGVzKTtcblx0XHRcdGl0ZW1zLmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBjb21wYXJhdG9yTmFtZSA9IGBjb21wYXJhdG9yKHNlbGVjdG9yPSR7c2VsZWN0b3J9LCAke3Byb3BlcnR5fSlgO1xuXHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLnByb3BlcnRpZXMgJiYgaXRlbS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29tcGFyYXRvclJlc3VsdCA9IGNvbXBhcmF0b3IoaXRlbS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSlcblx0XHRcdFx0XHRcdD8gY29tcGFyYXRvck5hbWVcblx0XHRcdFx0XHRcdDogYCR7Y29tcGFyYXRvck5hbWV9IEZBSUxFRGA7XG5cdFx0XHRcdFx0aXRlbS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IGlzRXhwZWN0ZWQgPyBjb21wYXJhdG9yTmFtZSA6IGNvbXBhcmF0b3JSZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gX3RyeVJlbmRlcigpIHtcblx0XHRjb25zdCB7IHByb3BlcnRpZXMsIGNoaWxkcmVuIH0gPSByZW5kZXJGdW5jKCk7XG5cdFx0d2lkZ2V0Ll9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xuXHRcdHdpZGdldC5fX3NldENoaWxkcmVuX18oY2hpbGRyZW4pO1xuXHRcdGlmIChpbnZhbGlkYXRlZCkge1xuXHRcdFx0Y29uc3QgcmVuZGVyID0gd2lkZ2V0Ll9fcmVuZGVyX18oKTtcblx0XHRcdGNvbnN0IHsgaGFzRGVmZXJyZWRQcm9wZXJ0aWVzLCBub2RlcyB9ID0gZGVjb3JhdGVOb2RlcyhyZW5kZXIpO1xuXHRcdFx0X3J1bkNvbXBhcmVzKG5vZGVzKTtcblx0XHRcdHJlbmRlclN0YWNrLnB1c2gobm9kZXMpO1xuXHRcdFx0aWYgKGhhc0RlZmVycmVkUHJvcGVydGllcykge1xuXHRcdFx0XHRjb25zdCB7IG5vZGVzOiBhZnRlckRlZmVycmVkUHJvcGVydGllc05vZGVzIH0gPSBkZWNvcmF0ZU5vZGVzKHJlbmRlcik7XG5cdFx0XHRcdF9ydW5Db21wYXJlcyhhZnRlckRlZmVycmVkUHJvcGVydGllc05vZGVzKTtcblx0XHRcdFx0cmVuZGVyU3RhY2sucHVzaChhZnRlckRlZmVycmVkUHJvcGVydGllc05vZGVzKTtcblx0XHRcdH1cblx0XHRcdGludmFsaWRhdGVkID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gX2V4cGVjdChleHBlY3RlZFJlbmRlckZ1bmM6IEV4cGVjdGVkUmVuZGVyLCBhY3R1YWxSZW5kZXJGdW5jPzogRXhwZWN0ZWRSZW5kZXIsIHNlbGVjdG9yPzogc3RyaW5nKSB7XG5cdFx0bGV0IHJlbmRlclJlc3VsdDogRE5vZGUgfCBETm9kZVtdO1xuXHRcdGlmIChhY3R1YWxSZW5kZXJGdW5jID09PSB1bmRlZmluZWQpIHtcblx0XHRcdF90cnlSZW5kZXIoKTtcblx0XHRcdHJlbmRlclJlc3VsdCA9IF9nZXRSZW5kZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVuZGVyUmVzdWx0ID0gYWN0dWFsUmVuZGVyRnVuYygpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHsgbm9kZXM6IGV4cGVjdGVkUmVuZGVyUmVzdWx0IH0gPSBkZWNvcmF0ZU5vZGVzKGV4cGVjdGVkUmVuZGVyRnVuYygpKTtcblx0XHRfcnVuQ29tcGFyZXMoZXhwZWN0ZWRSZW5kZXJSZXN1bHQsIHRydWUpO1xuXHRcdGlmIChzZWxlY3Rvcikge1xuXHRcdFx0Y29uc3QgW2ZpcnN0SXRlbV0gPSBzZWxlY3Qoc2VsZWN0b3IsIHJlbmRlclJlc3VsdCk7XG5cdFx0XHRhc3NlcnRSZW5kZXIoZmlyc3RJdGVtLCBleHBlY3RlZFJlbmRlclJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFzc2VydFJlbmRlcihyZW5kZXJSZXN1bHQsIGV4cGVjdGVkUmVuZGVyUmVzdWx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGV4cGVjdChleHBlY3RlZFJlbmRlckZ1bmM6IEV4cGVjdGVkUmVuZGVyLCBhY3R1YWxSZW5kZXJGdW5jPzogRXhwZWN0ZWRSZW5kZXIpIHtcblx0XHRcdHJldHVybiBfZXhwZWN0KGV4cGVjdGVkUmVuZGVyRnVuYywgYWN0dWFsUmVuZGVyRnVuYyk7XG5cdFx0fSxcblx0XHRleHBlY3RQYXJ0aWFsKHNlbGVjdG9yOiBzdHJpbmcsIGV4cGVjdGVkUmVuZGVyRnVuYzogRXhwZWN0ZWRSZW5kZXIsIGFjdHVhbFJlbmRlckZ1bmM/OiBFeHBlY3RlZFJlbmRlcikge1xuXHRcdFx0cmV0dXJuIF9leHBlY3QoZXhwZWN0ZWRSZW5kZXJGdW5jLCBhY3R1YWxSZW5kZXJGdW5jLCBzZWxlY3Rvcik7XG5cdFx0fSxcblx0XHR0cmlnZ2VyKHNlbGVjdG9yOiBzdHJpbmcsIGZ1bmN0aW9uU2VsZWN0b3I6IHN0cmluZyB8IEZ1bmN0aW9uYWxTZWxlY3RvciwgLi4uYXJnczogYW55W10pOiBhbnkge1xuXHRcdFx0X3RyeVJlbmRlcigpO1xuXHRcdFx0Y29uc3QgW2ZpcnN0SXRlbV0gPSBzZWxlY3Qoc2VsZWN0b3IsIF9nZXRSZW5kZXIoKSk7XG5cdFx0XHRpZiAoZmlyc3RJdGVtKSB7XG5cdFx0XHRcdGxldCB0cmlnZ2VyRnVuY3Rpb246IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAodHlwZW9mIGZ1bmN0aW9uU2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0dHJpZ2dlckZ1bmN0aW9uID0gKGZpcnN0SXRlbS5wcm9wZXJ0aWVzIGFzIGFueSlbZnVuY3Rpb25TZWxlY3Rvcl07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHJpZ2dlckZ1bmN0aW9uID0gZnVuY3Rpb25TZWxlY3RvcihmaXJzdEl0ZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0cmlnZ2VyRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJpZ2dlckZ1bmN0aW9uLmFwcGx5KHdpZGdldCwgYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGdldFJlbmRlcihpbmRleD86IG51bWJlcik6IEROb2RlIHwgRE5vZGVbXSB7XG5cdFx0XHRyZXR1cm4gX2dldFJlbmRlcihpbmRleCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXJuZXNzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGhhcm5lc3MudHMiLCJpbXBvcnQgeyBETm9kZSwgV05vZGUsIFZOb2RlLCBEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZSwgQ29uc3RydWN0b3IgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzV05vZGUgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9kJztcbmltcG9ydCAqIGFzIGRpZmYgZnJvbSAnZGlmZic7XG5pbXBvcnQgV2Vha01hcCBmcm9tICdAZG9qby9zaGltL1dlYWtNYXAnO1xuaW1wb3J0IFNldCBmcm9tICdAZG9qby9zaGltL1NldCc7XG5pbXBvcnQgTWFwIGZyb20gJ0Bkb2pvL3NoaW0vTWFwJztcbmltcG9ydCB7IGZyb20gYXMgYXJyYXlGcm9tIH0gZnJvbSAnQGRvam8vc2hpbS9hcnJheSc7XG5cbmxldCB3aWRnZXRDbGFzc0NvdW50ZXIgPSAwO1xuY29uc3Qgd2lkZ2V0TWFwID0gbmV3IFdlYWtNYXA8Q29uc3RydWN0b3I8RGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2U+LCBudW1iZXI+KCk7XG5cbmZ1bmN0aW9uIHJlcGxhY2VyKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiAnZnVuY3Rpb24nO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gJ3VuZGVmaW5lZCc7XG5cdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQgfHwgdmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcblx0XHRyZXR1cm4gYXJyYXlGcm9tKHZhbHVlKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRETm9kZXMobm9kZXM6IEROb2RlIHwgRE5vZGVbXSwgZGVwdGg6IG51bWJlciA9IDApOiBzdHJpbmcge1xuXHRjb25zdCBpc0FycmF5RnJhZ21lbnQgPSBBcnJheS5pc0FycmF5KG5vZGVzKSAmJiBkZXB0aCA9PT0gMDtcblx0bGV0IGluaXRpYWwgPSBpc0FycmF5RnJhZ21lbnQgPyAnW1xcbicgOiAnJztcblx0bGV0IHRhYnMgPSAnJztcblx0ZGVwdGggPSBpc0FycmF5RnJhZ21lbnQgPyAxIDogZGVwdGg7XG5cdG5vZGVzID0gQXJyYXkuaXNBcnJheShub2RlcykgPyBub2RlcyA6IFtub2Rlc107XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7XG5cdFx0dGFicyA9IGAke3RhYnN9XFx0YDtcblx0fVxuXHRsZXQgZm9ybWF0dGVkTm9kZSA9IG5vZGVzLnJlZHVjZSgocmVzdWx0OiBzdHJpbmcsIG5vZGUsIGluZGV4KSA9PiB7XG5cdFx0aWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0XHRpZiAoaW5kZXggPiAwKSB7XG5cdFx0XHRyZXN1bHQgPSBgJHtyZXN1bHR9XFxuYDtcblx0XHR9XG5cdFx0cmVzdWx0ID0gYCR7cmVzdWx0fSR7dGFic31gO1xuXG5cdFx0aWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIGAke3Jlc3VsdH1cIiR7bm9kZX1cImA7XG5cdFx0fVxuXG5cdFx0cmVzdWx0ID0gYCR7cmVzdWx0fSR7Zm9ybWF0Tm9kZShub2RlLCB0YWJzKX1gO1xuXHRcdGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0cmVzdWx0ID0gYCR7cmVzdWx0fSwgW1xcbiR7Zm9ybWF0RE5vZGVzKG5vZGUuY2hpbGRyZW4sIGRlcHRoICsgMSl9XFxuJHt0YWJzfV1gO1xuXHRcdH1cblx0XHRyZXR1cm4gYCR7cmVzdWx0fSlgO1xuXHR9LCBpbml0aWFsKTtcblxuXHRyZXR1cm4gaXNBcnJheUZyYWdtZW50ID8gKGZvcm1hdHRlZE5vZGUgPSBgJHtmb3JtYXR0ZWROb2RlfVxcbl1gKSA6IGZvcm1hdHRlZE5vZGU7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFByb3BlcnRpZXMocHJvcGVydGllczogYW55LCB0YWJzOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcylcblx0XHQuc29ydCgpXG5cdFx0LnJlZHVjZSgocHJvcHM6IGFueSwga2V5KSA9PiB7XG5cdFx0XHRwcm9wc1trZXldID0gcHJvcGVydGllc1trZXldO1xuXHRcdFx0cmV0dXJuIHByb3BzO1xuXHRcdH0sIHt9KTtcblx0cHJvcGVydGllcyA9IEpTT04uc3RyaW5naWZ5KHByb3BlcnRpZXMsIHJlcGxhY2VyLCBgJHt0YWJzfVxcdGApLnNsaWNlKDAsIC0xKTtcblx0cmV0dXJuIGAke3Byb3BlcnRpZXN9JHt0YWJzfX1gO1xufVxuXG5mdW5jdGlvbiBnZXRXaWRnZXROYW1lKHdpZGdldENvbnN0cnVjdG9yOiBhbnkpOiBzdHJpbmcge1xuXHRsZXQgbmFtZTogc3RyaW5nO1xuXHRpZiAodHlwZW9mIHdpZGdldENvbnN0cnVjdG9yID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygd2lkZ2V0Q29uc3RydWN0b3IgPT09ICdzeW1ib2wnKSB7XG5cdFx0bmFtZSA9IHdpZGdldENvbnN0cnVjdG9yLnRvU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0bmFtZSA9IHdpZGdldENvbnN0cnVjdG9yLm5hbWU7XG5cdFx0aWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IGlkID0gd2lkZ2V0TWFwLmdldCh3aWRnZXRDb25zdHJ1Y3Rvcik7XG5cdFx0XHRpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZCA9ICsrd2lkZ2V0Q2xhc3NDb3VudGVyO1xuXHRcdFx0XHR3aWRnZXRNYXAuc2V0KHdpZGdldENvbnN0cnVjdG9yLCBpZCk7XG5cdFx0XHR9XG5cdFx0XHRuYW1lID0gYFdpZGdldC0ke2lkfWA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBuYW1lO1xufVxuXG5mdW5jdGlvbiBmb3JtYXROb2RlKG5vZGU6IFdOb2RlIHwgVk5vZGUsIHRhYnM6IGFueSk6IHN0cmluZyB7XG5cdGNvbnN0IHByb3BlcnR5S2V5Q291bnQgPSBPYmplY3Qua2V5cyhub2RlLnByb3BlcnRpZXMpLmxlbmd0aDtcblx0bGV0IHByb3BlcnRpZXMgPSBwcm9wZXJ0eUtleUNvdW50ID4gMCA/IGZvcm1hdFByb3BlcnRpZXMobm9kZS5wcm9wZXJ0aWVzLCB0YWJzKSA6ICd7fSc7XG5cdGlmIChpc1dOb2RlKG5vZGUpKSB7XG5cdFx0cmV0dXJuIGB3KCR7Z2V0V2lkZ2V0TmFtZShub2RlLndpZGdldENvbnN0cnVjdG9yKX0sICR7cHJvcGVydGllc31gO1xuXHR9XG5cdHJldHVybiBgdihcIiR7bm9kZS50YWd9XCIsICR7cHJvcGVydGllc31gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0UmVuZGVyKGFjdHVhbDogRE5vZGUgfCBETm9kZVtdLCBleHBlY3RlZDogRE5vZGUgfCBETm9kZVtdLCBtZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XG5cdGNvbnN0IHBhcnNlZEFjdHVhbCA9IGZvcm1hdEROb2RlcyhhY3R1YWwpO1xuXHRjb25zdCBwYXJzZWRFeHBlY3RlZCA9IGZvcm1hdEROb2RlcyhleHBlY3RlZCk7XG5cdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmLmRpZmZMaW5lcyhwYXJzZWRBY3R1YWwsIHBhcnNlZEV4cGVjdGVkKTtcblx0bGV0IGRpZmZGb3VuZCA9IGZhbHNlO1xuXHRjb25zdCBwYXJzZWREaWZmID0gZGlmZlJlc3VsdC5yZWR1Y2UoKHJlc3VsdDogc3RyaW5nLCBwYXJ0LCBpbmRleCkgPT4ge1xuXHRcdGlmIChwYXJ0LmFkZGVkKSB7XG5cdFx0XHRkaWZmRm91bmQgPSB0cnVlO1xuXHRcdFx0cmVzdWx0ID0gYCR7cmVzdWx0fShFKSR7cGFydC52YWx1ZS5yZXBsYWNlKC9cXG5cXHQvZywgJ1xcbihFKVxcdCcpfWA7XG5cdFx0fSBlbHNlIGlmIChwYXJ0LnJlbW92ZWQpIHtcblx0XHRcdGRpZmZGb3VuZCA9IHRydWU7XG5cdFx0XHRyZXN1bHQgPSBgJHtyZXN1bHR9KEEpJHtwYXJ0LnZhbHVlLnJlcGxhY2UoL1xcblxcdC9nLCAnXFxuKEEpXFx0Jyl9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gYCR7cmVzdWx0fSR7cGFydC52YWx1ZX1gO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LCAnXFxuJyk7XG5cblx0aWYgKGRpZmZGb3VuZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihwYXJzZWREaWZmKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRSZW5kZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gYXNzZXJ0UmVuZGVyLnRzIiwiaW1wb3J0IHsgRE5vZGUsIERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLCBXTm9kZSwgVk5vZGUgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzVk5vZGUsIGlzV05vZGUgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9kJztcbmltcG9ydCAqIGFzIGNzc1NlbGVjdCBmcm9tICdjc3Mtc2VsZWN0LXVtZCc7XG5cbmV4cG9ydCB0eXBlIFRlc3RGdW5jdGlvbiA9IChlbGVtOiBETm9kZTxEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZT4pID0+IGJvb2xlYW47XG5cbmV4cG9ydCBjb25zdCBwYXJzZVNlbGVjdG9yID0gKHNlbGVjdG9yOiBzdHJpbmcpID0+IHtcblx0Y29uc3Qgc2VsZWN0b3JzID0gc2VsZWN0b3Iuc3BsaXQoJyAnKTtcblx0cmV0dXJuIHNlbGVjdG9yc1xuXHRcdC5tYXAoKHNlbGVjdG9yKSA9PiB7XG5cdFx0XHRjb25zdCBrZXlTaWdpbEluZGV4ID0gc2VsZWN0b3IuaW5kZXhPZignQCcpO1xuXHRcdFx0aWYgKGtleVNpZ2lsSW5kZXggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIGBba2V5PVwiJHtzZWxlY3Rvci5zdWJzdHIoMSl9XCJdYDtcblx0XHRcdH0gZWxzZSBpZiAoa2V5U2lnaWxJbmRleCA+IDApIHtcblx0XHRcdFx0Y29uc3Qga2V5ID0gc2VsZWN0b3Iuc3Vic3RyaW5nKGtleVNpZ2lsSW5kZXggKyAxKTtcblx0XHRcdFx0cmV0dXJuIGAke3NlbGVjdG9yLnNsaWNlKDAsIGtleVNpZ2lsSW5kZXgpfVtrZXk9XCIke2tleX1cIl1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNlbGVjdG9yO1xuXHRcdH0pXG5cdFx0LmpvaW4oJyAnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGFwdGVyOiBhbnkgPSB7XG5cdGlzVGFnKGVsZW06IEROb2RlKSB7XG5cdFx0cmV0dXJuIGlzVk5vZGUoZWxlbSk7XG5cdH0sXG5cdGdldFRleHQoZWxlbTogRE5vZGVbXSkge1xuXHRcdHJldHVybiAnJztcblx0fSxcblx0cmVtb3ZlU3Vic2V0cyhlbGVtZW50czogRE5vZGVbXSkge1xuXHRcdHJldHVybiBlbGVtZW50cztcblx0fSxcblx0Z2V0Q2hpbGRyZW4oZWxlbTogRE5vZGUpIHtcblx0XHRyZXR1cm4gaXNWTm9kZShlbGVtKSB8fCBpc1dOb2RlKGVsZW0pID8gZWxlbS5jaGlsZHJlbiA6IFtdO1xuXHR9LFxuXHRnZXRBdHRyaWJ1dGVWYWx1ZShlbGVtOiBETm9kZSwgbmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKGlzVk5vZGUoZWxlbSkgfHwgaXNXTm9kZShlbGVtKSkge1xuXHRcdFx0aWYgKG5hbWUgPT09ICdjbGFzcycpIHtcblx0XHRcdFx0Y29uc3QgY2xhc3NlcyA9IChlbGVtLnByb3BlcnRpZXMgYXMgYW55KS5jbGFzc2VzO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xuXHRcdFx0XHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY2xhc3Nlcztcblx0XHRcdH1cblx0XHRcdHJldHVybiAoZWxlbS5wcm9wZXJ0aWVzIGFzIGFueSlbbmFtZV07XG5cdFx0fVxuXHR9LFxuXHRoYXNBdHRyaWIoZWxlbTogRE5vZGUsIG5hbWU6IHN0cmluZykge1xuXHRcdGlmIChpc1ZOb2RlKGVsZW0pIHx8IGlzV05vZGUoZWxlbSkpIHtcblx0XHRcdHJldHVybiBuYW1lIGluIGVsZW0ucHJvcGVydGllcztcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHRleGlzdHNPbmUodGVzdDogVGVzdEZ1bmN0aW9uLCBlbGVtZW50czogRE5vZGVbXSkge1xuXHRcdHJldHVybiBlbGVtZW50cy5zb21lKChlbGVtOiBETm9kZSkgPT4gdGVzdChlbGVtKSk7XG5cdH0sXG5cdGdldE5hbWUoZWxlbTogRE5vZGUpIHtcblx0XHRpZiAoaXNWTm9kZShlbGVtKSkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGFnO1xuXHRcdH1cblx0fSxcblx0Z2V0UGFyZW50KGVsZW06IEROb2RlKSB7XG5cdFx0aWYgKGlzVk5vZGUoZWxlbSkgfHwgaXNXTm9kZShlbGVtKSkge1xuXHRcdFx0cmV0dXJuIChlbGVtIGFzIGFueSkucGFyZW50O1xuXHRcdH1cblx0fSxcblx0Z2V0U2libGluZ3MoZWxlbTogRE5vZGUpIHtcblx0XHRpZiAoaXNWTm9kZShlbGVtKSB8fCBpc1dOb2RlKGVsZW0pKSB7XG5cdFx0XHRpZiAoKGVsZW0gYXMgYW55KS5wYXJlbnQpIHtcblx0XHRcdFx0cmV0dXJuIChlbGVtIGFzIGFueSkucGFyZW50LmNoaWxkcmVuO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFtlbGVtXTtcblx0XHR9XG5cdH0sXG5cdGZpbmRPbmUodGVzdDogVGVzdEZ1bmN0aW9uLCBhcnI6IEROb2RlW10pOiBETm9kZSB7XG5cdFx0bGV0IGVsZW0gPSBudWxsO1xuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gYXJyLmxlbmd0aDsgaSA8IGwgJiYgIWVsZW07IGkrKykge1xuXHRcdFx0aWYgKHRlc3QoYXJyW2ldKSkge1xuXHRcdFx0XHRlbGVtID0gYXJyW2ldO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBhZGFwdGVyLmdldENoaWxkcmVuKGFycltpXSk7XG5cdFx0XHRcdGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGFkYXB0ZXIuZmluZE9uZSh0ZXN0LCBjaGlsZHJlbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH0sXG5cdGZpbmRBbGwodGVzdDogVGVzdEZ1bmN0aW9uLCBlbGVtZW50czogRE5vZGVbXSk6IEROb2RlW10ge1xuXHRcdGxldCByZXN1bHQ6IEROb2RlW10gPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMCwgaiA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0aWYgKHRlc3QoZWxlbWVudHNbaV0pKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVsZW1lbnRzW2ldKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gYWRhcHRlci5nZXRDaGlsZHJlbihlbGVtZW50c1tpXSk7XG5cdFx0XHRpZiAoY2hpbGRyZW4pIHtcblx0XHRcdFx0cmVzdWx0ID0gWy4uLnJlc3VsdCwgLi4uYWRhcHRlci5maW5kQWxsKHRlc3QsIGNoaWxkcmVuKV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3Qoc2VsZWN0b3I6IHN0cmluZywgbm9kZXM6IEROb2RlIHwgRE5vZGVbXSk6IChXTm9kZSB8IFZOb2RlKVtdIHtcblx0bm9kZXMgPSBBcnJheS5pc0FycmF5KG5vZGVzKSA/IG5vZGVzIDogW25vZGVzXTtcblx0c2VsZWN0b3IgPSBwYXJzZVNlbGVjdG9yKHNlbGVjdG9yKTtcblx0cmV0dXJuIGNzc1NlbGVjdChzZWxlY3Rvciwgbm9kZXMsIHsgYWRhcHRlciB9KSBhcyAoV05vZGUgfCBWTm9kZSlbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNlbGVjdG9yLnRzIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKSh0cnVlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5zVW1VaTRTaCB7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLl8yTWs2UmRxYSB7XFxuXFx0Y29sb3I6ICNmZmY7XFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcblxcdG1hcmdpbjogMCA2LjRweDtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0ZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuXFx0ZGlzcGxheTogLW1zLWZsZXhib3g7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHQtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xcblxcdC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xcblxcdCAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG5cXHQgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuXFx0LXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xcblxcdCAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuXFx0ICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG5cXHRoZWlnaHQ6IDQ4cHg7XFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uXzJNazZSZHFhOjphZnRlciB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0Y29udGVudDogXFxcIlxcXCI7XFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXG5cXHRoZWlnaHQ6IDJweDtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0Ym90dG9tOiAwO1xcblxcdC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGVhc2Utb3V0O1xcblxcdHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0O1xcblxcdHRyYW5zaXRpb246IHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQsIC13ZWJraXQtdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXG5cXHQtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgzcHgpO1xcblxcdCAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7XFxufVxcblxcbi5fMS1mM0l0T2g6OmFmdGVyIHtcXG5cXHQtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG5cXHQgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG59XFxuXCIsIFwiXCIsIHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIi9Vc2Vycy9icnlhbi9Qcm9qZWN0cy9kb2pvMi9jbGktYnVpbGQtd2lkZ2V0L3Rlc3QtYXBwL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7Q0FDQyxhQUFhO0NBQ2Isc0JBQXNCO0NBQ3RCOztBQUVEO0NBQ0MsWUFBWTtDQUNaLHNCQUFzQjtDQUN0QixnQkFBZ0I7Q0FDaEIsbUJBQW1CO0NBQ25CLHFCQUFxQjtDQUNyQixxQkFBcUI7Q0FDckIsY0FBYztDQUNkLDZCQUE2QjtDQUM3Qiw4QkFBOEI7S0FDMUIsMkJBQTJCO1NBQ3ZCLHVCQUF1QjtDQUMvQix5QkFBeUI7S0FDckIsc0JBQXNCO1NBQ2xCLHdCQUF3QjtDQUNoQyxhQUFhO0NBQ2IsZ0JBQWdCO0NBQ2hCOztBQUVEO0NBQ0MsZUFBZTtDQUNmLFlBQVk7Q0FDWixpQkFBaUI7Q0FDakIsWUFBWTtDQUNaLG1CQUFtQjtDQUNuQixZQUFZO0NBQ1osVUFBVTtDQUNWLG1EQUFtRDtDQUNuRCwyQ0FBMkM7Q0FDM0MsbUNBQW1DO0NBQ25DLG1FQUFtRTtDQUNuRSxtQ0FBbUM7U0FDM0IsMkJBQTJCO0NBQ25DOztBQUVEO0NBQ0MsaUNBQWlDO1NBQ3pCLHlCQUF5QjtDQUNqQ1wiLFwiZmlsZVwiOlwibWVudUl0ZW0ubS5jc3NcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLnJvb3Qge1xcblxcdGhlaWdodDogMTAwJTtcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5pdGVtIHtcXG5cXHRjb2xvcjogI2ZmZjtcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuXFx0bWFyZ2luOiAwIDYuNHB4O1xcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXHRkaXNwbGF5OiAtd2Via2l0LWJveDtcXG5cXHRkaXNwbGF5OiAtbXMtZmxleGJveDtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XFxuXFx0LXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XFxuXFx0ICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcblxcdCAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG5cXHQtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XFxuXFx0ICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG5cXHQgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcdGhlaWdodDogNDhweDtcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5pdGVtOjphZnRlciB7XFxuXFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0Y29udGVudDogXFxcIlxcXCI7XFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXG5cXHRoZWlnaHQ6IDJweDtcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0Ym90dG9tOiAwO1xcblxcdC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGVhc2Utb3V0O1xcblxcdHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0O1xcblxcdHRyYW5zaXRpb246IHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQsIC13ZWJraXQtdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXG5cXHQtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgzcHgpO1xcblxcdCAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7XFxufVxcblxcbi5zZWxlY3RlZDo6YWZ0ZXIge1xcblxcdC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcblxcdCAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcblxuLy8gZXhwb3J0c1xuZXhwb3J0cy5sb2NhbHMgPSB7XCIgX2tleVwiOiBcInRlc3QtYXBwL21lbnVJdGVtXCIsXG5cdFwicm9vdFwiOiBcInNVbVVpNFNoXCIsXG5cdFwiaXRlbVwiOiBcIl8yTWs2UmRxYVwiLFxuXHRcInNlbGVjdGVkXCI6IFwiXzEtZjNJdE9oXCJcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZGVjb3JhdG9yLWxvYWRlciEuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyP3tcIm1vZHVsZXNcIjp0cnVlLFwic291cmNlTWFwXCI6dHJ1ZSxcImltcG9ydExvYWRlcnNcIjoxLFwibG9jYWxJZGVudE5hbWVcIjpcIltoYXNoOmJhc2U2NDo4XVwifSEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9saWI/e1wiaWRlbnRcIjpcInBvc3Rjc3NcIixcInBsdWdpbnNcIjpbbnVsbCx7XCJ2ZXJzaW9uXCI6XCI2LjAuMjNcIixcInBsdWdpbnNcIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sXCJwb3N0Y3NzUGx1Z2luXCI6XCJwb3N0Y3NzLWNzc25leHRcIixcInBvc3Rjc3NWZXJzaW9uXCI6XCI2LjAuMjNcIn1dfSEuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9Y3NzIS4vc3JjL21lbnUtaXRlbS9tZW51SXRlbS5tLmNzc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZGVjb3JhdG9yLWxvYWRlci9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzP3tcIm1vZHVsZXNcIjp0cnVlLFwic291cmNlTWFwXCI6dHJ1ZSxcImltcG9ydExvYWRlcnNcIjoxLFwibG9jYWxJZGVudE5hbWVcIjpcIltoYXNoOmJhc2U2NDo4XVwifSEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9saWIvaW5kZXguanM/e1wiaWRlbnRcIjpcInBvc3Rjc3NcIixcInBsdWdpbnNcIjpbbnVsbCx7XCJ2ZXJzaW9uXCI6XCI2LjAuMjNcIixcInBsdWdpbnNcIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sXCJwb3N0Y3NzUGx1Z2luXCI6XCJwb3N0Y3NzLWNzc25leHRcIixcInBvc3Rjc3NWZXJzaW9uXCI6XCI2LjAuMjNcIn1dfSEuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyL2luZGV4LmpzP3R5cGU9Y3NzIS4vc3JjL21lbnUtaXRlbS9tZW51SXRlbS5tLmNzc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKHRydWUpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLl8zYkE2amRTbiB7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0dG9wOiAwO1xcblxcdGhlaWdodDogNDhweDtcXG5cXHR6LWluZGV4OiAxMDA7XFxuXFx0YmFja2dyb3VuZC1jb2xvcjogIzFkMWYyMDtcXG59XFxuXFxuLl8xZW9HZnFrdSB7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdG1hcmdpbjogMCBhdXRvO1xcbn1cXG5cIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wiL1VzZXJzL2JyeWFuL1Byb2plY3RzL2Rvam8yL2NsaS1idWlsZC13aWRnZXQvdGVzdC1hcHAvc3JjL21lbnUvbWVudS5tLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtDQUNDLFlBQVk7Q0FDWixPQUFPO0NBQ1AsYUFBYTtDQUNiLGFBQWE7Q0FDYiwwQkFBMEI7Q0FDMUI7O0FBRUQ7Q0FDQyxhQUFhO0NBQ2IsZUFBZTtDQUNmXCIsXCJmaWxlXCI6XCJtZW51Lm0uY3NzXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5yb290IHtcXG5cXHR3aWR0aDogMTAwJTtcXG5cXHR0b3A6IDA7XFxuXFx0aGVpZ2h0OiA0OHB4O1xcblxcdHotaW5kZXg6IDEwMDtcXG5cXHRiYWNrZ3JvdW5kLWNvbG9yOiAjMWQxZjIwO1xcbn1cXG5cXG4ubWVudUNvbnRhaW5lciB7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdG1hcmdpbjogMCBhdXRvO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcblxuLy8gZXhwb3J0c1xuZXhwb3J0cy5sb2NhbHMgPSB7XCIgX2tleVwiOiBcInRlc3QtYXBwL21lbnVcIixcblx0XCJyb290XCI6IFwiXzNiQTZqZFNuXCIsXG5cdFwibWVudUNvbnRhaW5lclwiOiBcIl8xZW9HZnFrdVwiXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlcj97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPWNzcyEuL3NyYy9tZW51L21lbnUubS5jc3Ncbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL3NyYy9tZW51L21lbnUubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJ0Bkb2pvL2NvcmUvRXZlbnRlZCc7XG5pbXBvcnQgeyBFdmVudE9iamVjdCB9IGZyb20gJ0Bkb2pvL2NvcmUvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB0eXBlIEluamVjdG9yRXZlbnRNYXAgPSB7XG5cdGludmFsaWRhdGU6IEV2ZW50T2JqZWN0PCdpbnZhbGlkYXRlJz47XG59O1xuXG5leHBvcnQgY2xhc3MgSW5qZWN0b3I8VCA9IGFueT4gZXh0ZW5kcyBFdmVudGVkPEluamVjdG9yRXZlbnRNYXA+IHtcblx0cHJpdmF0ZSBfcGF5bG9hZDogVDtcblx0cHJpdmF0ZSBfaW52YWxpZGF0b3I6IHVuZGVmaW5lZCB8ICgoKSA9PiB2b2lkKTtcblxuXHRjb25zdHJ1Y3RvcihwYXlsb2FkOiBUKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcblx0fVxuXG5cdHB1YmxpYyBzZXRJbnZhbGlkYXRvcihpbnZhbGlkYXRvcjogKCkgPT4gdm9pZCkge1xuXHRcdHRoaXMuX2ludmFsaWRhdG9yID0gaW52YWxpZGF0b3I7XG5cdH1cblxuXHRwdWJsaWMgZ2V0KCk6IFQge1xuXHRcdHJldHVybiB0aGlzLl9wYXlsb2FkO1xuXHR9XG5cblx0cHVibGljIHNldChwYXlsb2FkOiBUKTogdm9pZCB7XG5cdFx0dGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XG5cdFx0aWYgKHRoaXMuX2ludmFsaWRhdG9yKSB7XG5cdFx0XHR0aGlzLl9pbnZhbGlkYXRvcigpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbmplY3RvcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBJbmplY3Rvci50cyIsImltcG9ydCB7IEV2ZW50ZWQgfSBmcm9tICdAZG9qby9jb3JlL0V2ZW50ZWQnO1xuaW1wb3J0IHsgRXZlbnRPYmplY3QgfSBmcm9tICdAZG9qby9jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IE1hcCBmcm9tICdAZG9qby9zaGltL01hcCc7XG5pbXBvcnQgeyBOb2RlSGFuZGxlckludGVyZmFjZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogRW51bSB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiBldmVudC5cbiAqIExpc3RlbmluZyB0byAnUHJvamVjdG9yJyB3aWxsIG5vdGlmeSB3aGVuIHByb2plY3RvciBpcyBjcmVhdGVkIG9yIHVwZGF0ZWRcbiAqIExpc3RlbmluZyB0byAnV2lkZ2V0JyB3aWxsIG5vdGlmeSB3aGVuIHdpZGdldCByb290IGlzIGNyZWF0ZWQgb3IgdXBkYXRlZFxuICovXG5leHBvcnQgZW51bSBOb2RlRXZlbnRUeXBlIHtcblx0UHJvamVjdG9yID0gJ1Byb2plY3RvcicsXG5cdFdpZGdldCA9ICdXaWRnZXQnXG59XG5cbmV4cG9ydCB0eXBlIE5vZGVIYW5kbGVyRXZlbnRNYXAgPSB7XG5cdFByb2plY3RvcjogRXZlbnRPYmplY3Q8Tm9kZUV2ZW50VHlwZS5Qcm9qZWN0b3I+O1xuXHRXaWRnZXQ6IEV2ZW50T2JqZWN0PE5vZGVFdmVudFR5cGUuV2lkZ2V0Pjtcbn07XG5cbmV4cG9ydCBjbGFzcyBOb2RlSGFuZGxlciBleHRlbmRzIEV2ZW50ZWQ8Tm9kZUhhbmRsZXJFdmVudE1hcD4gaW1wbGVtZW50cyBOb2RlSGFuZGxlckludGVyZmFjZSB7XG5cdHByaXZhdGUgX25vZGVNYXAgPSBuZXcgTWFwPHN0cmluZywgRWxlbWVudD4oKTtcblxuXHRwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogRWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX25vZGVNYXAuZ2V0KGtleSk7XG5cdH1cblxuXHRwdWJsaWMgaGFzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX25vZGVNYXAuaGFzKGtleSk7XG5cdH1cblxuXHRwdWJsaWMgYWRkKGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5fbm9kZU1hcC5zZXQoa2V5LCBlbGVtZW50KTtcblx0XHR0aGlzLmVtaXQoeyB0eXBlOiBrZXkgfSk7XG5cdH1cblxuXHRwdWJsaWMgYWRkUm9vdCgpOiB2b2lkIHtcblx0XHR0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLldpZGdldCB9KTtcblx0fVxuXG5cdHB1YmxpYyBhZGRQcm9qZWN0b3IoKTogdm9pZCB7XG5cdFx0dGhpcy5lbWl0KHsgdHlwZTogTm9kZUV2ZW50VHlwZS5Qcm9qZWN0b3IgfSk7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG5cdFx0dGhpcy5fbm9kZU1hcC5jbGVhcigpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGVIYW5kbGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIE5vZGVIYW5kbGVyLnRzIiwiaW1wb3J0IFByb21pc2UgZnJvbSAnQGRvam8vc2hpbS9Qcm9taXNlJztcbmltcG9ydCBNYXAgZnJvbSAnQGRvam8vc2hpbS9NYXAnO1xuaW1wb3J0IFN5bWJvbCBmcm9tICdAZG9qby9zaGltL1N5bWJvbCc7XG5pbXBvcnQgeyBFdmVudE9iamVjdCB9IGZyb20gJ0Bkb2pvL2NvcmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnQGRvam8vY29yZS9FdmVudGVkJztcbmltcG9ydCB7XG5cdENvbnN0cnVjdG9yLFxuXHRJbmplY3RvckZhY3RvcnksXG5cdEluamVjdG9ySXRlbSxcblx0UmVnaXN0cnlMYWJlbCxcblx0V2lkZ2V0QmFzZUNvbnN0cnVjdG9yLFxuXHRXaWRnZXRCYXNlSW50ZXJmYWNlXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB0eXBlIFdpZGdldEJhc2VDb25zdHJ1Y3RvckZ1bmN0aW9uID0gKCkgPT4gUHJvbWlzZTxXaWRnZXRCYXNlQ29uc3RydWN0b3I+O1xuXG5leHBvcnQgdHlwZSBFU01EZWZhdWx0V2lkZ2V0QmFzZUZ1bmN0aW9uID0gKCkgPT4gUHJvbWlzZTxFU01EZWZhdWx0V2lkZ2V0QmFzZTxXaWRnZXRCYXNlSW50ZXJmYWNlPj47XG5cbmV4cG9ydCB0eXBlIFJlZ2lzdHJ5SXRlbSA9XG5cdHwgV2lkZ2V0QmFzZUNvbnN0cnVjdG9yXG5cdHwgUHJvbWlzZTxXaWRnZXRCYXNlQ29uc3RydWN0b3I+XG5cdHwgV2lkZ2V0QmFzZUNvbnN0cnVjdG9yRnVuY3Rpb25cblx0fCBFU01EZWZhdWx0V2lkZ2V0QmFzZUZ1bmN0aW9uO1xuXG4vKipcbiAqIFdpZGdldCBiYXNlIHN5bWJvbCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBXSURHRVRfQkFTRV9UWVBFID0gU3ltYm9sKCdXaWRnZXQgQmFzZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBFdmVudE9iamVjdDxSZWdpc3RyeUxhYmVsPiB7XG5cdGFjdGlvbjogc3RyaW5nO1xuXHRpdGVtOiBXaWRnZXRCYXNlQ29uc3RydWN0b3IgfCBJbmplY3RvckZhY3Rvcnk7XG59XG4vKipcbiAqIFdpZGdldCBSZWdpc3RyeSBJbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyeUludGVyZmFjZSB7XG5cdC8qKlxuXHQgKiBEZWZpbmUgYSBXaWRnZXRSZWdpc3RyeUl0ZW0gYWdhaW5zdCBhIGxhYmVsXG5cdCAqXG5cdCAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgb2YgdGhlIHdpZGdldCB0byByZWdpc3RlclxuXHQgKiBAcGFyYW0gcmVnaXN0cnlJdGVtIFRoZSByZWdpc3RyeSBpdGVtIHRvIGRlZmluZVxuXHQgKi9cblx0ZGVmaW5lKGxhYmVsOiBSZWdpc3RyeUxhYmVsLCByZWdpc3RyeUl0ZW06IFJlZ2lzdHJ5SXRlbSk6IHZvaWQ7XG5cblx0LyoqXG5cdCAqIFJldHVybiBhIFJlZ2lzdHJ5SXRlbSBmb3IgdGhlIGdpdmVuIGxhYmVsLCBudWxsIGlmIGFuIGVudHJ5IGRvZXNuJ3QgZXhpc3Rcblx0ICpcblx0ICogQHBhcmFtIHdpZGdldExhYmVsIFRoZSBsYWJlbCBvZiB0aGUgd2lkZ2V0IHRvIHJldHVyblxuXHQgKiBAcmV0dXJucyBUaGUgUmVnaXN0cnlJdGVtIGZvciB0aGUgd2lkZ2V0TGFiZWwsIGBudWxsYCBpZiBubyBlbnRyeSBleGlzdHNcblx0ICovXG5cdGdldDxUIGV4dGVuZHMgV2lkZ2V0QmFzZUludGVyZmFjZSA9IFdpZGdldEJhc2VJbnRlcmZhY2U+KGxhYmVsOiBSZWdpc3RyeUxhYmVsKTogQ29uc3RydWN0b3I8VD4gfCBudWxsO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgYm9vbGVhbiBpZiBhbiBlbnRyeSBmb3IgdGhlIGxhYmVsIGV4aXN0c1xuXHQgKlxuXHQgKiBAcGFyYW0gd2lkZ2V0TGFiZWwgVGhlIGxhYmVsIHRvIHNlYXJjaCBmb3Jcblx0ICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGEgd2lkZ2V0IHJlZ2lzdHJ5IGl0ZW0gZXhpc3RzXG5cdCAqL1xuXHRoYXMobGFiZWw6IFJlZ2lzdHJ5TGFiZWwpOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmUgYW4gSW5qZWN0b3IgYWdhaW5zdCBhIGxhYmVsXG5cdCAqXG5cdCAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGluamVjdG9yIHRvIHJlZ2lzdGVyXG5cdCAqIEBwYXJhbSByZWdpc3RyeUl0ZW0gVGhlIGluamVjdG9yIGZhY3Rvcnlcblx0ICovXG5cdGRlZmluZUluamVjdG9yKGxhYmVsOiBSZWdpc3RyeUxhYmVsLCBpbmplY3RvckZhY3Rvcnk6IEluamVjdG9yRmFjdG9yeSk6IHZvaWQ7XG5cblx0LyoqXG5cdCAqIFJldHVybiBhbiBJbmplY3RvciByZWdpc3RyeSBpdGVtIGZvciB0aGUgZ2l2ZW4gbGFiZWwsIG51bGwgaWYgYW4gZW50cnkgZG9lc24ndCBleGlzdFxuXHQgKlxuXHQgKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBpbmplY3RvciB0byByZXR1cm5cblx0ICogQHJldHVybnMgVGhlIFJlZ2lzdHJ5SXRlbSBmb3IgdGhlIHdpZGdldExhYmVsLCBgbnVsbGAgaWYgbm8gZW50cnkgZXhpc3RzXG5cdCAqL1xuXHRnZXRJbmplY3RvcjxUPihsYWJlbDogUmVnaXN0cnlMYWJlbCk6IEluamVjdG9ySXRlbTxUPiB8IG51bGw7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBib29sZWFuIGlmIGFuIGluamVjdG9yIGZvciB0aGUgbGFiZWwgZXhpc3RzXG5cdCAqXG5cdCAqIEBwYXJhbSB3aWRnZXRMYWJlbCBUaGUgbGFiZWwgdG8gc2VhcmNoIGZvclxuXHQgKiBAcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgYSBpbmplY3RvciByZWdpc3RyeSBpdGVtIGV4aXN0c1xuXHQgKi9cblx0aGFzSW5qZWN0b3IobGFiZWw6IFJlZ2lzdHJ5TGFiZWwpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIENoZWNrcyBpcyB0aGUgaXRlbSBpcyBhIHN1YmNsYXNzIG9mIFdpZGdldEJhc2UgKG9yIGEgV2lkZ2V0QmFzZSlcbiAqXG4gKiBAcGFyYW0gaXRlbSB0aGUgaXRlbSB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZS9mYWxzZSBpbmRpY2F0aW5nIGlmIHRoZSBpdGVtIGlzIGEgV2lkZ2V0QmFzZUNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcjxUIGV4dGVuZHMgV2lkZ2V0QmFzZUludGVyZmFjZT4oaXRlbTogYW55KTogaXRlbSBpcyBDb25zdHJ1Y3RvcjxUPiB7XG5cdHJldHVybiBCb29sZWFuKGl0ZW0gJiYgaXRlbS5fdHlwZSA9PT0gV0lER0VUX0JBU0VfVFlQRSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRVNNRGVmYXVsdFdpZGdldEJhc2U8VD4ge1xuXHRkZWZhdWx0OiBDb25zdHJ1Y3RvcjxUPjtcblx0X19lc01vZHVsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpZGdldENvbnN0cnVjdG9yRGVmYXVsdEV4cG9ydDxUPihpdGVtOiBhbnkpOiBpdGVtIGlzIEVTTURlZmF1bHRXaWRnZXRCYXNlPFQ+IHtcblx0cmV0dXJuIEJvb2xlYW4oXG5cdFx0aXRlbSAmJlxuXHRcdFx0aXRlbS5oYXNPd25Qcm9wZXJ0eSgnX19lc01vZHVsZScpICYmXG5cdFx0XHRpdGVtLmhhc093blByb3BlcnR5KCdkZWZhdWx0JykgJiZcblx0XHRcdGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0uZGVmYXVsdClcblx0KTtcbn1cblxuLyoqXG4gKiBUaGUgUmVnaXN0cnkgaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFJlZ2lzdHJ5IGV4dGVuZHMgRXZlbnRlZDx7fSwgUmVnaXN0cnlMYWJlbCwgUmVnaXN0cnlFdmVudE9iamVjdD4gaW1wbGVtZW50cyBSZWdpc3RyeUludGVyZmFjZSB7XG5cdC8qKlxuXHQgKiBpbnRlcm5hbCBtYXAgb2YgbGFiZWxzIGFuZCBSZWdpc3RyeUl0ZW1cblx0ICovXG5cdHByaXZhdGUgX3dpZGdldFJlZ2lzdHJ5OiBNYXA8UmVnaXN0cnlMYWJlbCwgUmVnaXN0cnlJdGVtPiB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIF9pbmplY3RvclJlZ2lzdHJ5OiBNYXA8UmVnaXN0cnlMYWJlbCwgSW5qZWN0b3JJdGVtPiB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogRW1pdCBsb2FkZWQgZXZlbnQgZm9yIHJlZ2lzdHJ5IGxhYmVsXG5cdCAqL1xuXHRwcml2YXRlIGVtaXRMb2FkZWRFdmVudCh3aWRnZXRMYWJlbDogUmVnaXN0cnlMYWJlbCwgaXRlbTogV2lkZ2V0QmFzZUNvbnN0cnVjdG9yIHwgSW5qZWN0b3JJdGVtKTogdm9pZCB7XG5cdFx0dGhpcy5lbWl0KHtcblx0XHRcdHR5cGU6IHdpZGdldExhYmVsLFxuXHRcdFx0YWN0aW9uOiAnbG9hZGVkJyxcblx0XHRcdGl0ZW1cblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBkZWZpbmUobGFiZWw6IFJlZ2lzdHJ5TGFiZWwsIGl0ZW06IFJlZ2lzdHJ5SXRlbSk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl93aWRnZXRSZWdpc3RyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLl93aWRnZXRSZWdpc3RyeSA9IG5ldyBNYXAoKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGB3aWRnZXQgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnJHtsYWJlbC50b1N0cmluZygpfSdgKTtcblx0XHR9XG5cblx0XHR0aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIGl0ZW0pO1xuXG5cdFx0aWYgKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRpdGVtLnRoZW4oXG5cdFx0XHRcdCh3aWRnZXRDdG9yKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fd2lkZ2V0UmVnaXN0cnkhLnNldChsYWJlbCwgd2lkZ2V0Q3Rvcik7XG5cdFx0XHRcdFx0dGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xuXHRcdFx0XHRcdHJldHVybiB3aWRnZXRDdG9yO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQoZXJyb3IpID0+IHtcblx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pKSB7XG5cdFx0XHR0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgaXRlbSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGRlZmluZUluamVjdG9yKGxhYmVsOiBSZWdpc3RyeUxhYmVsLCBpbmplY3RvckZhY3Rvcnk6IEluamVjdG9yRmFjdG9yeSk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuX2luamVjdG9yUmVnaXN0cnkgPSBuZXcgTWFwKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2luamVjdG9yUmVnaXN0cnkuaGFzKGxhYmVsKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBpbmplY3RvciBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgZm9yICcke2xhYmVsLnRvU3RyaW5nKCl9J2ApO1xuXHRcdH1cblxuXHRcdGNvbnN0IGludmFsaWRhdG9yID0gbmV3IEV2ZW50ZWQoKTtcblxuXHRcdGNvbnN0IGluamVjdG9ySXRlbTogSW5qZWN0b3JJdGVtID0ge1xuXHRcdFx0aW5qZWN0b3I6IGluamVjdG9yRmFjdG9yeSgoKSA9PiBpbnZhbGlkYXRvci5lbWl0KHsgdHlwZTogJ2ludmFsaWRhdGUnIH0pKSxcblx0XHRcdGludmFsaWRhdG9yXG5cdFx0fTtcblxuXHRcdHRoaXMuX2luamVjdG9yUmVnaXN0cnkuc2V0KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xuXHRcdHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xuXHR9XG5cblx0cHVibGljIGdldDxUIGV4dGVuZHMgV2lkZ2V0QmFzZUludGVyZmFjZSA9IFdpZGdldEJhc2VJbnRlcmZhY2U+KGxhYmVsOiBSZWdpc3RyeUxhYmVsKTogQ29uc3RydWN0b3I8VD4gfCBudWxsIHtcblx0XHRpZiAoIXRoaXMuX3dpZGdldFJlZ2lzdHJ5IHx8ICF0aGlzLmhhcyhsYWJlbCkpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGl0ZW0gPSB0aGlzLl93aWRnZXRSZWdpc3RyeS5nZXQobGFiZWwpO1xuXG5cdFx0aWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yPFQ+KGl0ZW0pKSB7XG5cdFx0XHRyZXR1cm4gaXRlbTtcblx0XHR9XG5cblx0XHRpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb21pc2UgPSAoPFdpZGdldEJhc2VDb25zdHJ1Y3RvckZ1bmN0aW9uPml0ZW0pKCk7XG5cdFx0dGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCBwcm9taXNlKTtcblxuXHRcdHByb21pc2UudGhlbihcblx0XHRcdCh3aWRnZXRDdG9yKSA9PiB7XG5cdFx0XHRcdGlmIChpc1dpZGdldENvbnN0cnVjdG9yRGVmYXVsdEV4cG9ydDxUPih3aWRnZXRDdG9yKSkge1xuXHRcdFx0XHRcdHdpZGdldEN0b3IgPSB3aWRnZXRDdG9yLmRlZmF1bHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl93aWRnZXRSZWdpc3RyeSEuc2V0KGxhYmVsLCB3aWRnZXRDdG9yKTtcblx0XHRcdFx0dGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xuXHRcdFx0XHRyZXR1cm4gd2lkZ2V0Q3Rvcjtcblx0XHRcdH0sXG5cdFx0XHQoZXJyb3IpID0+IHtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHVibGljIGdldEluamVjdG9yPFQ+KGxhYmVsOiBSZWdpc3RyeUxhYmVsKTogSW5qZWN0b3JJdGVtPFQ+IHwgbnVsbCB7XG5cdFx0aWYgKCF0aGlzLl9pbmplY3RvclJlZ2lzdHJ5IHx8ICF0aGlzLmhhc0luamVjdG9yKGxhYmVsKSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2luamVjdG9yUmVnaXN0cnkuZ2V0KGxhYmVsKSE7XG5cdH1cblxuXHRwdWJsaWMgaGFzKGxhYmVsOiBSZWdpc3RyeUxhYmVsKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIEJvb2xlYW4odGhpcy5fd2lkZ2V0UmVnaXN0cnkgJiYgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSk7XG5cdH1cblxuXHRwdWJsaWMgaGFzSW5qZWN0b3IobGFiZWw6IFJlZ2lzdHJ5TGFiZWwpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gQm9vbGVhbih0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ICYmIHRoaXMuX2luamVjdG9yUmVnaXN0cnkuaGFzKGxhYmVsKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVnaXN0cnk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gUmVnaXN0cnkudHMiLCJpbXBvcnQgeyBNYXAgfSBmcm9tICdAZG9qby9zaGltL01hcCc7XG5pbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnQGRvam8vY29yZS9FdmVudGVkJztcbmltcG9ydCB7IEV2ZW50T2JqZWN0IH0gZnJvbSAnQGRvam8vY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBJbmplY3RvckZhY3RvcnksIEluamVjdG9ySXRlbSwgUmVnaXN0cnlMYWJlbCwgV2lkZ2V0QmFzZUludGVyZmFjZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZWdpc3RyeSwgUmVnaXN0cnlFdmVudE9iamVjdCwgUmVnaXN0cnlJdGVtIH0gZnJvbSAnLi9SZWdpc3RyeSc7XG5cbmV4cG9ydCB0eXBlIFJlZ2lzdHJ5SGFuZGxlckV2ZW50TWFwID0ge1xuXHRpbnZhbGlkYXRlOiBFdmVudE9iamVjdDwnaW52YWxpZGF0ZSc+O1xufTtcblxuZXhwb3J0IGNsYXNzIFJlZ2lzdHJ5SGFuZGxlciBleHRlbmRzIEV2ZW50ZWQ8UmVnaXN0cnlIYW5kbGVyRXZlbnRNYXA+IHtcblx0cHJpdmF0ZSBfcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTtcblx0cHJpdmF0ZSBfcmVnaXN0cnlXaWRnZXRMYWJlbE1hcDogTWFwPFJlZ2lzdHJ5LCBSZWdpc3RyeUxhYmVsW10+ID0gbmV3IE1hcCgpO1xuXHRwcml2YXRlIF9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXA6IE1hcDxSZWdpc3RyeSwgUmVnaXN0cnlMYWJlbFtdPiA9IG5ldyBNYXAoKTtcblx0cHJvdGVjdGVkIGJhc2VSZWdpc3RyeT86IFJlZ2lzdHJ5O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vd24odGhpcy5fcmVnaXN0cnkpO1xuXHRcdGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5iYXNlUmVnaXN0cnkpIHtcblx0XHRcdFx0dGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xuXHRcdFx0XHR0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcblx0XHRcdFx0dGhpcy5iYXNlUmVnaXN0cnkgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLm93bih7IGRlc3Ryb3kgfSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGJhc2UoYmFzZVJlZ2lzdHJ5OiBSZWdpc3RyeSkge1xuXHRcdGlmICh0aGlzLmJhc2VSZWdpc3RyeSkge1xuXHRcdFx0dGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xuXHRcdFx0dGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XG5cdFx0fVxuXHRcdHRoaXMuYmFzZVJlZ2lzdHJ5ID0gYmFzZVJlZ2lzdHJ5O1xuXHR9XG5cblx0cHVibGljIGRlZmluZShsYWJlbDogUmVnaXN0cnlMYWJlbCwgd2lkZ2V0OiBSZWdpc3RyeUl0ZW0pOiB2b2lkIHtcblx0XHR0aGlzLl9yZWdpc3RyeS5kZWZpbmUobGFiZWwsIHdpZGdldCk7XG5cdH1cblxuXHRwdWJsaWMgZGVmaW5lSW5qZWN0b3IobGFiZWw6IFJlZ2lzdHJ5TGFiZWwsIGluamVjdG9yOiBJbmplY3RvckZhY3RvcnkpOiB2b2lkIHtcblx0XHR0aGlzLl9yZWdpc3RyeS5kZWZpbmVJbmplY3RvcihsYWJlbCwgaW5qZWN0b3IpO1xuXHR9XG5cblx0cHVibGljIGhhcyhsYWJlbDogUmVnaXN0cnlMYWJlbCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9yZWdpc3RyeS5oYXMobGFiZWwpIHx8IEJvb2xlYW4odGhpcy5iYXNlUmVnaXN0cnkgJiYgdGhpcy5iYXNlUmVnaXN0cnkuaGFzKGxhYmVsKSk7XG5cdH1cblxuXHRwdWJsaWMgaGFzSW5qZWN0b3IobGFiZWw6IFJlZ2lzdHJ5TGFiZWwpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpIHx8IEJvb2xlYW4odGhpcy5iYXNlUmVnaXN0cnkgJiYgdGhpcy5iYXNlUmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQ8VCBleHRlbmRzIFdpZGdldEJhc2VJbnRlcmZhY2UgPSBXaWRnZXRCYXNlSW50ZXJmYWNlPihcblx0XHRsYWJlbDogUmVnaXN0cnlMYWJlbCxcblx0XHRnbG9iYWxQcmVjZWRlbmNlOiBib29sZWFuID0gZmFsc2Vcblx0KTogQ29uc3RydWN0b3I8VD4gfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCAnZ2V0JywgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0SW5qZWN0b3I8VD4obGFiZWw6IFJlZ2lzdHJ5TGFiZWwsIGdsb2JhbFByZWNlZGVuY2U6IGJvb2xlYW4gPSBmYWxzZSk6IEluamVjdG9ySXRlbTxUPiB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLl9nZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsICdnZXRJbmplY3RvcicsIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcCk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXQoXG5cdFx0bGFiZWw6IFJlZ2lzdHJ5TGFiZWwsXG5cdFx0Z2xvYmFsUHJlY2VkZW5jZTogYm9vbGVhbixcblx0XHRnZXRGdW5jdGlvbk5hbWU6ICdnZXRJbmplY3RvcicgfCAnZ2V0Jyxcblx0XHRsYWJlbE1hcDogTWFwPFJlZ2lzdHJ5LCBSZWdpc3RyeUxhYmVsW10+XG5cdCk6IGFueSB7XG5cdFx0Y29uc3QgcmVnaXN0cmllcyA9IGdsb2JhbFByZWNlZGVuY2UgPyBbdGhpcy5iYXNlUmVnaXN0cnksIHRoaXMuX3JlZ2lzdHJ5XSA6IFt0aGlzLl9yZWdpc3RyeSwgdGhpcy5iYXNlUmVnaXN0cnldO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVnaXN0cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgcmVnaXN0cnk6IGFueSA9IHJlZ2lzdHJpZXNbaV07XG5cdFx0XHRpZiAoIXJlZ2lzdHJ5KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaXRlbSA9IHJlZ2lzdHJ5W2dldEZ1bmN0aW9uTmFtZV0obGFiZWwpO1xuXHRcdFx0Y29uc3QgcmVnaXN0ZXJlZExhYmVscyA9IGxhYmVsTWFwLmdldChyZWdpc3RyeSkgfHwgW107XG5cdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH0gZWxzZSBpZiAocmVnaXN0ZXJlZExhYmVscy5pbmRleE9mKGxhYmVsKSA9PT0gLTEpIHtcblx0XHRcdFx0Y29uc3QgaGFuZGxlID0gcmVnaXN0cnkub24obGFiZWwsIChldmVudDogUmVnaXN0cnlFdmVudE9iamVjdCkgPT4ge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGV2ZW50LmFjdGlvbiA9PT0gJ2xvYWRlZCcgJiZcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSlbZ2V0RnVuY3Rpb25OYW1lXShsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSkgPT09IGV2ZW50Lml0ZW1cblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRoaXMuZW1pdCh7IHR5cGU6ICdpbnZhbGlkYXRlJyB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLm93bihoYW5kbGUpO1xuXHRcdFx0XHRsYWJlbE1hcC5zZXQocmVnaXN0cnksIFsuLi5yZWdpc3RlcmVkTGFiZWxzLCBsYWJlbF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZWdpc3RyeUhhbmRsZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gUmVnaXN0cnlIYW5kbGVyLnRzIiwiaW1wb3J0IE1hcCBmcm9tICdAZG9qby9zaGltL01hcCc7XG5pbXBvcnQgV2Vha01hcCBmcm9tICdAZG9qby9zaGltL1dlYWtNYXAnO1xuaW1wb3J0IFN5bWJvbCBmcm9tICdAZG9qby9zaGltL1N5bWJvbCc7XG5pbXBvcnQgeyBIYW5kbGUgfSBmcm9tICdAZG9qby9jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdiB9IGZyb20gJy4vZCc7XG5pbXBvcnQgeyBhdXRvIH0gZnJvbSAnLi9kaWZmJztcbmltcG9ydCB7XG5cdEFmdGVyUmVuZGVyLFxuXHRCZWZvcmVQcm9wZXJ0aWVzLFxuXHRCZWZvcmVSZW5kZXIsXG5cdENvcmVQcm9wZXJ0aWVzLFxuXHREaWZmUHJvcGVydHlSZWFjdGlvbixcblx0RE5vZGUsXG5cdFJlbmRlcixcblx0V2lkZ2V0TWV0YUJhc2UsXG5cdFdpZGdldE1ldGFDb25zdHJ1Y3Rvcixcblx0V2lkZ2V0QmFzZUludGVyZmFjZSxcblx0V2lkZ2V0UHJvcGVydGllc1xufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IFJlZ2lzdHJ5SGFuZGxlciBmcm9tICcuL1JlZ2lzdHJ5SGFuZGxlcic7XG5pbXBvcnQgTm9kZUhhbmRsZXIgZnJvbSAnLi9Ob2RlSGFuZGxlcic7XG5pbXBvcnQgeyB3aWRnZXRJbnN0YW5jZU1hcCB9IGZyb20gJy4vdmRvbSc7XG5pbXBvcnQgeyBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvciwgV0lER0VUX0JBU0VfVFlQRSB9IGZyb20gJy4vUmVnaXN0cnknO1xuXG5pbnRlcmZhY2UgUmVhY3Rpb25GdW5jdGlvbkFyZ3VtZW50cyB7XG5cdHByZXZpb3VzUHJvcGVydGllczogYW55O1xuXHRuZXdQcm9wZXJ0aWVzOiBhbnk7XG5cdGNoYW5nZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBSZWFjdGlvbkZ1bmN0aW9uQ29uZmlnIHtcblx0cHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdHJlYWN0aW9uOiBEaWZmUHJvcGVydHlSZWFjdGlvbjtcbn1cblxuZXhwb3J0IHR5cGUgQm91bmRGdW5jdGlvbkRhdGEgPSB7IGJvdW5kRnVuYzogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7IHNjb3BlOiBhbnkgfTtcblxuY29uc3QgZGVjb3JhdG9yTWFwID0gbmV3IE1hcDxGdW5jdGlvbiwgTWFwPHN0cmluZywgYW55W10+PigpO1xuY29uc3QgYm91bmRBdXRvID0gYXV0by5iaW5kKG51bGwpO1xuXG5leHBvcnQgY29uc3Qgbm9CaW5kID0gU3ltYm9sLmZvcignZG9qb05vQmluZCcpO1xuXG4vKipcbiAqIE1haW4gd2lkZ2V0IGJhc2UgZm9yIGFsbCB3aWRnZXRzIHRvIGV4dGVuZFxuICovXG5leHBvcnQgY2xhc3MgV2lkZ2V0QmFzZTxQID0gV2lkZ2V0UHJvcGVydGllcywgQyBleHRlbmRzIEROb2RlID0gRE5vZGU+IGltcGxlbWVudHMgV2lkZ2V0QmFzZUludGVyZmFjZTxQLCBDPiB7XG5cdC8qKlxuXHQgKiBzdGF0aWMgaWRlbnRpZmllclxuXHQgKi9cblx0c3RhdGljIF90eXBlOiBzeW1ib2wgPSBXSURHRVRfQkFTRV9UWVBFO1xuXG5cdC8qKlxuXHQgKiBjaGlsZHJlbiBhcnJheVxuXHQgKi9cblx0cHJpdmF0ZSBfY2hpbGRyZW46IChDIHwgbnVsbClbXTtcblxuXHQvKipcblx0ICogSW5kaWNhdGVzIGlmIGl0IGlzIHRoZSBpbml0aWFsIHNldCBwcm9wZXJ0aWVzIGN5Y2xlXG5cdCAqL1xuXHRwcml2YXRlIF9pbml0aWFsUHJvcGVydGllcyA9IHRydWU7XG5cblx0LyoqXG5cdCAqIGludGVybmFsIHdpZGdldCBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRwcml2YXRlIF9wcm9wZXJ0aWVzOiBQICYgV2lkZ2V0UHJvcGVydGllcyAmIHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfTtcblxuXHQvKipcblx0ICogQXJyYXkgb2YgcHJvcGVydHkga2V5cyBjb25zaWRlcmVkIGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgc2V0IHByb3BlcnRpZXNcblx0ICovXG5cdHByaXZhdGUgX2NoYW5nZWRQcm9wZXJ0eUtleXM6IHN0cmluZ1tdID0gW107XG5cblx0LyoqXG5cdCAqIG1hcCBvZiBkZWNvcmF0b3JzIHRoYXQgYXJlIGFwcGxpZWQgdG8gdGhpcyB3aWRnZXRcblx0ICovXG5cdHByaXZhdGUgX2RlY29yYXRvckNhY2hlOiBNYXA8c3RyaW5nLCBhbnlbXT47XG5cblx0cHJpdmF0ZSBfcmVnaXN0cnk6IFJlZ2lzdHJ5SGFuZGxlciB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogTWFwIG9mIGZ1bmN0aW9ucyBwcm9wZXJ0aWVzIGZvciB0aGUgYm91bmQgZnVuY3Rpb25cblx0ICovXG5cdHByaXZhdGUgX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwOiBXZWFrTWFwPCguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBCb3VuZEZ1bmN0aW9uRGF0YT4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfbWV0YU1hcDogTWFwPFdpZGdldE1ldGFDb25zdHJ1Y3Rvcjxhbnk+LCBXaWRnZXRNZXRhQmFzZT4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfYm91bmRSZW5kZXJGdW5jOiBSZW5kZXI7XG5cblx0cHJpdmF0ZSBfYm91bmRJbnZhbGlkYXRlOiAoKSA9PiB2b2lkO1xuXG5cdHByaXZhdGUgX25vZGVIYW5kbGVyOiBOb2RlSGFuZGxlciA9IG5ldyBOb2RlSGFuZGxlcigpO1xuXG5cdHByaXZhdGUgX2hhbmRsZXM6IEhhbmRsZVtdID0gW107XG5cblx0LyoqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5fY2hpbGRyZW4gPSBbXTtcblx0XHR0aGlzLl9kZWNvcmF0b3JDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcblx0XHR0aGlzLl9wcm9wZXJ0aWVzID0gPFA+e307XG5cdFx0dGhpcy5fYm91bmRSZW5kZXJGdW5jID0gdGhpcy5yZW5kZXIuYmluZCh0aGlzKTtcblx0XHR0aGlzLl9ib3VuZEludmFsaWRhdGUgPSB0aGlzLmludmFsaWRhdGUuYmluZCh0aGlzKTtcblxuXHRcdHdpZGdldEluc3RhbmNlTWFwLnNldCh0aGlzLCB7XG5cdFx0XHRkaXJ0eTogdHJ1ZSxcblx0XHRcdG9uQXR0YWNoOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMub25BdHRhY2goKTtcblx0XHRcdH0sXG5cdFx0XHRvbkRldGFjaDogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLm9uRGV0YWNoKCk7XG5cdFx0XHRcdHRoaXMuZGVzdHJveSgpO1xuXHRcdFx0fSxcblx0XHRcdG5vZGVIYW5kbGVyOiB0aGlzLl9ub2RlSGFuZGxlcixcblx0XHRcdHJlZ2lzdHJ5OiAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlZ2lzdHJ5O1xuXHRcdFx0fSxcblx0XHRcdGNvcmVQcm9wZXJ0aWVzOiB7fSBhcyBDb3JlUHJvcGVydGllcyxcblx0XHRcdHJlbmRlcmluZzogZmFsc2UsXG5cdFx0XHRpbnB1dFByb3BlcnRpZXM6IHt9XG5cdFx0fSk7XG5cblx0XHR0aGlzLl9ydW5BZnRlckNvbnN0cnVjdG9ycygpO1xuXHR9XG5cblx0cHJvdGVjdGVkIG1ldGE8VCBleHRlbmRzIFdpZGdldE1ldGFCYXNlPihNZXRhVHlwZTogV2lkZ2V0TWV0YUNvbnN0cnVjdG9yPFQ+KTogVCB7XG5cdFx0aWYgKHRoaXMuX21ldGFNYXAgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5fbWV0YU1hcCA9IG5ldyBNYXA8V2lkZ2V0TWV0YUNvbnN0cnVjdG9yPGFueT4sIFdpZGdldE1ldGFCYXNlPigpO1xuXHRcdH1cblx0XHRsZXQgY2FjaGVkID0gdGhpcy5fbWV0YU1hcC5nZXQoTWV0YVR5cGUpO1xuXHRcdGlmICghY2FjaGVkKSB7XG5cdFx0XHRjYWNoZWQgPSBuZXcgTWV0YVR5cGUoe1xuXHRcdFx0XHRpbnZhbGlkYXRlOiB0aGlzLl9ib3VuZEludmFsaWRhdGUsXG5cdFx0XHRcdG5vZGVIYW5kbGVyOiB0aGlzLl9ub2RlSGFuZGxlcixcblx0XHRcdFx0YmluZDogdGhpc1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLm93bihjYWNoZWQpO1xuXHRcdFx0dGhpcy5fbWV0YU1hcC5zZXQoTWV0YVR5cGUsIGNhY2hlZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNhY2hlZCBhcyBUO1xuXHR9XG5cblx0cHJvdGVjdGVkIG9uQXR0YWNoKCk6IHZvaWQge1xuXHRcdC8vIERvIG5vdGhpbmcgYnkgZGVmYXVsdC5cblx0fVxuXG5cdHByb3RlY3RlZCBvbkRldGFjaCgpOiB2b2lkIHtcblx0XHQvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXG5cdH1cblxuXHRwdWJsaWMgZ2V0IHByb3BlcnRpZXMoKTogUmVhZG9ubHk8UD4gJiBSZWFkb25seTxXaWRnZXRQcm9wZXJ0aWVzPiB7XG5cdFx0cmV0dXJuIHRoaXMuX3Byb3BlcnRpZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGNoYW5nZWRQcm9wZXJ0eUtleXMoKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiBbLi4udGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5c107XG5cdH1cblxuXHRwdWJsaWMgX19zZXRDb3JlUHJvcGVydGllc19fKGNvcmVQcm9wZXJ0aWVzOiBDb3JlUHJvcGVydGllcyk6IHZvaWQge1xuXHRcdGNvbnN0IHsgYmFzZVJlZ2lzdHJ5IH0gPSBjb3JlUHJvcGVydGllcztcblx0XHRjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQodGhpcykhO1xuXG5cdFx0aWYgKGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iYXNlUmVnaXN0cnkgIT09IGJhc2VSZWdpc3RyeSkge1xuXHRcdFx0aWYgKHRoaXMuX3JlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyKCk7XG5cdFx0XHRcdHRoaXMub3duKHRoaXMuX3JlZ2lzdHJ5KTtcblx0XHRcdFx0dGhpcy5vd24odGhpcy5fcmVnaXN0cnkub24oJ2ludmFsaWRhdGUnLCB0aGlzLl9ib3VuZEludmFsaWRhdGUpKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3JlZ2lzdHJ5LmJhc2UgPSBiYXNlUmVnaXN0cnk7XG5cdFx0XHR0aGlzLmludmFsaWRhdGUoKTtcblx0XHR9XG5cdFx0aW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzID0gY29yZVByb3BlcnRpZXM7XG5cdH1cblxuXHRwdWJsaWMgX19zZXRQcm9wZXJ0aWVzX18ob3JpZ2luYWxQcm9wZXJ0aWVzOiB0aGlzWydwcm9wZXJ0aWVzJ10pOiB2b2lkIHtcblx0XHRjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQodGhpcykhO1xuXHRcdGluc3RhbmNlRGF0YS5pbnB1dFByb3BlcnRpZXMgPSBvcmlnaW5hbFByb3BlcnRpZXM7XG5cdFx0Y29uc3QgcHJvcGVydGllcyA9IHRoaXMuX3J1bkJlZm9yZVByb3BlcnRpZXMob3JpZ2luYWxQcm9wZXJ0aWVzKTtcblx0XHRjb25zdCByZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMgPSB0aGlzLmdldERlY29yYXRvcigncmVnaXN0ZXJlZERpZmZQcm9wZXJ0eScpO1xuXHRcdGNvbnN0IGNoYW5nZWRQcm9wZXJ0eUtleXM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpO1xuXG5cdFx0aWYgKHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID09PSBmYWxzZSB8fCByZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRjb25zdCBhbGxQcm9wZXJ0aWVzID0gWy4uLnByb3BlcnR5TmFtZXMsIC4uLk9iamVjdC5rZXlzKHRoaXMuX3Byb3BlcnRpZXMpXTtcblx0XHRcdGNvbnN0IGNoZWNrZWRQcm9wZXJ0aWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW107XG5cdFx0XHRjb25zdCBkaWZmUHJvcGVydHlSZXN1bHRzOiBhbnkgPSB7fTtcblx0XHRcdGxldCBydW5SZWFjdGlvbnMgPSBmYWxzZTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhbGxQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IGFsbFByb3BlcnRpZXNbaV07XG5cdFx0XHRcdGlmIChjaGVja2VkUHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hlY2tlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91c1Byb3BlcnR5ID0gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0XHRjb25zdCBuZXdQcm9wZXJ0eSA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5KFxuXHRcdFx0XHRcdHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSxcblx0XHRcdFx0XHRpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMuYmluZFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAocmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRydW5SZWFjdGlvbnMgPSB0cnVlO1xuXHRcdFx0XHRcdGNvbnN0IGRpZmZGdW5jdGlvbnMgPSB0aGlzLmdldERlY29yYXRvcihgZGlmZlByb3BlcnR5OiR7cHJvcGVydHlOYW1lfWApO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZkZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gZGlmZkZ1bmN0aW9uc1tpXShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0LmNoYW5nZWQgJiYgY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNoYW5nZWRQcm9wZXJ0eUtleXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdFx0XHRcdGRpZmZQcm9wZXJ0eVJlc3VsdHNbcHJvcGVydHlOYW1lXSA9IHJlc3VsdC52YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYm91bmRBdXRvKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcblx0XHRcdFx0XHRpZiAocmVzdWx0LmNoYW5nZWQgJiYgY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRjaGFuZ2VkUHJvcGVydHlLZXlzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdFx0XHRkaWZmUHJvcGVydHlSZXN1bHRzW3Byb3BlcnR5TmFtZV0gPSByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChydW5SZWFjdGlvbnMpIHtcblx0XHRcdFx0dGhpcy5fbWFwRGlmZlByb3BlcnR5UmVhY3Rpb25zKHByb3BlcnRpZXMsIGNoYW5nZWRQcm9wZXJ0eUtleXMpLmZvckVhY2goKGFyZ3MsIHJlYWN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGFyZ3MuY2hhbmdlZCkge1xuXHRcdFx0XHRcdFx0cmVhY3Rpb24uY2FsbCh0aGlzLCBhcmdzLnByZXZpb3VzUHJvcGVydGllcywgYXJncy5uZXdQcm9wZXJ0aWVzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fcHJvcGVydGllcyA9IGRpZmZQcm9wZXJ0eVJlc3VsdHM7XG5cdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gY2hhbmdlZFByb3BlcnR5S2V5cztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5faW5pdGlhbFByb3BlcnRpZXMgPSBmYWxzZTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWVzW2ldO1xuXHRcdFx0XHRpZiAodHlwZW9mIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5KFxuXHRcdFx0XHRcdFx0cHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJpbmRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNoYW5nZWRQcm9wZXJ0eUtleXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gY2hhbmdlZFByb3BlcnR5S2V5cztcblx0XHRcdHRoaXMuX3Byb3BlcnRpZXMgPSB7IC4uLnByb3BlcnRpZXMgfTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLmludmFsaWRhdGUoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IChDIHwgbnVsbClbXSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuXHR9XG5cblx0cHVibGljIF9fc2V0Q2hpbGRyZW5fXyhjaGlsZHJlbjogKEMgfCBudWxsKVtdKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA+IDAgfHwgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5fY2hpbGRyZW4gPSBjaGlsZHJlbjtcblx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBfX3JlbmRlcl9fKCk6IEROb2RlIHwgRE5vZGVbXSB7XG5cdFx0Y29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpITtcblx0XHRpbnN0YW5jZURhdGEuZGlydHkgPSBmYWxzZTtcblx0XHRjb25zdCByZW5kZXIgPSB0aGlzLl9ydW5CZWZvcmVSZW5kZXJzKCk7XG5cdFx0bGV0IGROb2RlID0gcmVuZGVyKCk7XG5cdFx0ZE5vZGUgPSB0aGlzLnJ1bkFmdGVyUmVuZGVycyhkTm9kZSk7XG5cdFx0dGhpcy5fbm9kZUhhbmRsZXIuY2xlYXIoKTtcblx0XHRyZXR1cm4gZE5vZGU7XG5cdH1cblxuXHRwdWJsaWMgaW52YWxpZGF0ZSgpOiB2b2lkIHtcblx0XHRjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQodGhpcykhO1xuXHRcdGlmIChpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSkge1xuXHRcdFx0aW5zdGFuY2VEYXRhLmludmFsaWRhdGUoKTtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgcmVuZGVyKCk6IEROb2RlIHwgRE5vZGVbXSB7XG5cdFx0cmV0dXJuIHYoJ2RpdicsIHt9LCB0aGlzLmNoaWxkcmVuKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBhZGQgZGVjb3JhdG9ycyB0byBXaWRnZXRCYXNlXG5cdCAqXG5cdCAqIEBwYXJhbSBkZWNvcmF0b3JLZXkgVGhlIGtleSBvZiB0aGUgZGVjb3JhdG9yXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGRlY29yYXRvclxuXHQgKi9cblx0cHJvdGVjdGVkIGFkZERlY29yYXRvcihkZWNvcmF0b3JLZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuXHRcdHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG5cdFx0aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoJ2NvbnN0cnVjdG9yJykpIHtcblx0XHRcdGxldCBkZWNvcmF0b3JMaXN0ID0gZGVjb3JhdG9yTWFwLmdldCh0aGlzLmNvbnN0cnVjdG9yKTtcblx0XHRcdGlmICghZGVjb3JhdG9yTGlzdCkge1xuXHRcdFx0XHRkZWNvcmF0b3JMaXN0ID0gbmV3IE1hcDxzdHJpbmcsIGFueVtdPigpO1xuXHRcdFx0XHRkZWNvcmF0b3JNYXAuc2V0KHRoaXMuY29uc3RydWN0b3IsIGRlY29yYXRvckxpc3QpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgc3BlY2lmaWNEZWNvcmF0b3JMaXN0ID0gZGVjb3JhdG9yTGlzdC5nZXQoZGVjb3JhdG9yS2V5KTtcblx0XHRcdGlmICghc3BlY2lmaWNEZWNvcmF0b3JMaXN0KSB7XG5cdFx0XHRcdHNwZWNpZmljRGVjb3JhdG9yTGlzdCA9IFtdO1xuXHRcdFx0XHRkZWNvcmF0b3JMaXN0LnNldChkZWNvcmF0b3JLZXksIHNwZWNpZmljRGVjb3JhdG9yTGlzdCk7XG5cdFx0XHR9XG5cdFx0XHRzcGVjaWZpY0RlY29yYXRvckxpc3QucHVzaCguLi52YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGRlY29yYXRvcnMgPSB0aGlzLmdldERlY29yYXRvcihkZWNvcmF0b3JLZXkpO1xuXHRcdFx0dGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgWy4uLmRlY29yYXRvcnMsIC4uLnZhbHVlXSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRvIGJ1aWxkIHRoZSBsaXN0IG9mIGRlY29yYXRvcnMgZnJvbSB0aGUgZ2xvYmFsIGRlY29yYXRvciBtYXAuXG5cdCAqXG5cdCAqIEBwYXJhbSBkZWNvcmF0b3JLZXkgIFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuXHQgKiBAcmV0dXJuIEFuIGFycmF5IG9mIGRlY29yYXRvciB2YWx1ZXNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgX2J1aWxkRGVjb3JhdG9yTGlzdChkZWNvcmF0b3JLZXk6IHN0cmluZyk6IGFueVtdIHtcblx0XHRjb25zdCBhbGxEZWNvcmF0b3JzID0gW107XG5cblx0XHRsZXQgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG5cdFx0d2hpbGUgKGNvbnN0cnVjdG9yKSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZU1hcCA9IGRlY29yYXRvck1hcC5nZXQoY29uc3RydWN0b3IpO1xuXHRcdFx0aWYgKGluc3RhbmNlTWFwKSB7XG5cdFx0XHRcdGNvbnN0IGRlY29yYXRvcnMgPSBpbnN0YW5jZU1hcC5nZXQoZGVjb3JhdG9yS2V5KTtcblxuXHRcdFx0XHRpZiAoZGVjb3JhdG9ycykge1xuXHRcdFx0XHRcdGFsbERlY29yYXRvcnMudW5zaGlmdCguLi5kZWNvcmF0b3JzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdHJ1Y3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjb25zdHJ1Y3Rvcik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFsbERlY29yYXRvcnM7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gcmV0cmlldmUgZGVjb3JhdG9yIHZhbHVlc1xuXHQgKlxuXHQgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkZWNvcmF0b3IgdmFsdWVzXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0RGVjb3JhdG9yKGRlY29yYXRvcktleTogc3RyaW5nKTogYW55W10ge1xuXHRcdGxldCBhbGxEZWNvcmF0b3JzID0gdGhpcy5fZGVjb3JhdG9yQ2FjaGUuZ2V0KGRlY29yYXRvcktleSk7XG5cblx0XHRpZiAoYWxsRGVjb3JhdG9ycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gYWxsRGVjb3JhdG9ycztcblx0XHR9XG5cblx0XHRhbGxEZWNvcmF0b3JzID0gdGhpcy5fYnVpbGREZWNvcmF0b3JMaXN0KGRlY29yYXRvcktleSk7XG5cblx0XHR0aGlzLl9kZWNvcmF0b3JDYWNoZS5zZXQoZGVjb3JhdG9yS2V5LCBhbGxEZWNvcmF0b3JzKTtcblx0XHRyZXR1cm4gYWxsRGVjb3JhdG9ycztcblx0fVxuXG5cdHByaXZhdGUgX21hcERpZmZQcm9wZXJ0eVJlYWN0aW9ucyhcblx0XHRuZXdQcm9wZXJ0aWVzOiBhbnksXG5cdFx0Y2hhbmdlZFByb3BlcnR5S2V5czogc3RyaW5nW11cblx0KTogTWFwPEZ1bmN0aW9uLCBSZWFjdGlvbkZ1bmN0aW9uQXJndW1lbnRzPiB7XG5cdFx0Y29uc3QgcmVhY3Rpb25GdW5jdGlvbnM6IFJlYWN0aW9uRnVuY3Rpb25Db25maWdbXSA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdkaWZmUmVhY3Rpb24nKTtcblxuXHRcdHJldHVybiByZWFjdGlvbkZ1bmN0aW9ucy5yZWR1Y2UoKHJlYWN0aW9uUHJvcGVydHlNYXAsIHsgcmVhY3Rpb24sIHByb3BlcnR5TmFtZSB9KSA9PiB7XG5cdFx0XHRsZXQgcmVhY3Rpb25Bcmd1bWVudHMgPSByZWFjdGlvblByb3BlcnR5TWFwLmdldChyZWFjdGlvbik7XG5cdFx0XHRpZiAocmVhY3Rpb25Bcmd1bWVudHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZWFjdGlvbkFyZ3VtZW50cyA9IHtcblx0XHRcdFx0XHRwcmV2aW91c1Byb3BlcnRpZXM6IHt9LFxuXHRcdFx0XHRcdG5ld1Byb3BlcnRpZXM6IHt9LFxuXHRcdFx0XHRcdGNoYW5nZWQ6IGZhbHNlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZWFjdGlvbkFyZ3VtZW50cy5wcmV2aW91c1Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdHJlYWN0aW9uQXJndW1lbnRzLm5ld1Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IG5ld1Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChjaGFuZ2VkUHJvcGVydHlLZXlzLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcblx0XHRcdFx0cmVhY3Rpb25Bcmd1bWVudHMuY2hhbmdlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZWFjdGlvblByb3BlcnR5TWFwLnNldChyZWFjdGlvbiwgcmVhY3Rpb25Bcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIHJlYWN0aW9uUHJvcGVydHlNYXA7XG5cdFx0fSwgbmV3IE1hcDxGdW5jdGlvbiwgUmVhY3Rpb25GdW5jdGlvbkFyZ3VtZW50cz4oKSk7XG5cdH1cblxuXHQvKipcblx0ICogQmluZHMgdW5ib3VuZCBwcm9wZXJ0eSBmdW5jdGlvbnMgdG8gdGhlIHNwZWNpZmllZCBgYmluZGAgcHJvcGVydHlcblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnRpZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgZnVuY3Rpb25zXG5cdCAqL1xuXHRwcml2YXRlIF9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShwcm9wZXJ0eTogYW55LCBiaW5kOiBhbnkpOiBhbnkge1xuXHRcdGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIXByb3BlcnR5W25vQmluZF0gJiYgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IocHJvcGVydHkpID09PSBmYWxzZSkge1xuXHRcdFx0aWYgKHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAgPSBuZXcgV2Vha01hcDxcblx0XHRcdFx0XHQoLi4uYXJnczogYW55W10pID0+IGFueSxcblx0XHRcdFx0XHR7IGJvdW5kRnVuYzogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7IHNjb3BlOiBhbnkgfVxuXHRcdFx0XHQ+KCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBiaW5kSW5mbzogUGFydGlhbDxCb3VuZEZ1bmN0aW9uRGF0YT4gPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcC5nZXQocHJvcGVydHkpIHx8IHt9O1xuXHRcdFx0bGV0IHsgYm91bmRGdW5jLCBzY29wZSB9ID0gYmluZEluZm87XG5cblx0XHRcdGlmIChib3VuZEZ1bmMgPT09IHVuZGVmaW5lZCB8fCBzY29wZSAhPT0gYmluZCkge1xuXHRcdFx0XHRib3VuZEZ1bmMgPSBwcm9wZXJ0eS5iaW5kKGJpbmQpIGFzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuXHRcdFx0XHR0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcC5zZXQocHJvcGVydHksIHsgYm91bmRGdW5jLCBzY29wZTogYmluZCB9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBib3VuZEZ1bmM7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcmVnaXN0cnkoKTogUmVnaXN0cnlIYW5kbGVyIHtcblx0XHRpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyKCk7XG5cdFx0XHR0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG5cdFx0XHR0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fcmVnaXN0cnk7XG5cdH1cblxuXHRwcml2YXRlIF9ydW5CZWZvcmVQcm9wZXJ0aWVzKHByb3BlcnRpZXM6IGFueSkge1xuXHRcdGNvbnN0IGJlZm9yZVByb3BlcnRpZXM6IEJlZm9yZVByb3BlcnRpZXNbXSA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiZWZvcmVQcm9wZXJ0aWVzJyk7XG5cdFx0aWYgKGJlZm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGJlZm9yZVByb3BlcnRpZXMucmVkdWNlKFxuXHRcdFx0XHQocHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4ucHJvcGVydGllcywgLi4uYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uLmNhbGwodGhpcywgcHJvcGVydGllcykgfTtcblx0XHRcdFx0fSxcblx0XHRcdFx0eyAuLi5wcm9wZXJ0aWVzIH1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1biBhbGwgcmVnaXN0ZXJlZCBiZWZvcmUgcmVuZGVycyBhbmQgcmV0dXJuIHRoZSB1cGRhdGVkIHJlbmRlciBtZXRob2Rcblx0ICovXG5cdHByaXZhdGUgX3J1bkJlZm9yZVJlbmRlcnMoKTogUmVuZGVyIHtcblx0XHRjb25zdCBiZWZvcmVSZW5kZXJzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2JlZm9yZVJlbmRlcicpO1xuXG5cdFx0aWYgKGJlZm9yZVJlbmRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGJlZm9yZVJlbmRlcnMucmVkdWNlKChyZW5kZXI6IFJlbmRlciwgYmVmb3JlUmVuZGVyRnVuY3Rpb246IEJlZm9yZVJlbmRlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1cGRhdGVkUmVuZGVyID0gYmVmb3JlUmVuZGVyRnVuY3Rpb24uY2FsbCh0aGlzLCByZW5kZXIsIHRoaXMuX3Byb3BlcnRpZXMsIHRoaXMuX2NoaWxkcmVuKTtcblx0XHRcdFx0aWYgKCF1cGRhdGVkUmVuZGVyKSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdSZW5kZXIgZnVuY3Rpb24gbm90IHJldHVybmVkIGZyb20gYmVmb3JlUmVuZGVyLCB1c2luZyBwcmV2aW91cyByZW5kZXInKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVuZGVyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1cGRhdGVkUmVuZGVyO1xuXHRcdFx0fSwgdGhpcy5fYm91bmRSZW5kZXJGdW5jKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2JvdW5kUmVuZGVyRnVuYztcblx0fVxuXG5cdC8qKlxuXHQgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYWZ0ZXIgcmVuZGVycyBhbmQgcmV0dXJuIHRoZSBkZWNvcmF0ZWQgRE5vZGVzXG5cdCAqXG5cdCAqIEBwYXJhbSBkTm9kZSBUaGUgRE5vZGVzIHRvIHJ1biB0aHJvdWdoIHRoZSBhZnRlciByZW5kZXJzXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcnVuQWZ0ZXJSZW5kZXJzKGROb2RlOiBETm9kZSB8IEROb2RlW10pOiBETm9kZSB8IEROb2RlW10ge1xuXHRcdGNvbnN0IGFmdGVyUmVuZGVycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdhZnRlclJlbmRlcicpO1xuXG5cdFx0aWYgKGFmdGVyUmVuZGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gYWZ0ZXJSZW5kZXJzLnJlZHVjZSgoZE5vZGU6IEROb2RlIHwgRE5vZGVbXSwgYWZ0ZXJSZW5kZXJGdW5jdGlvbjogQWZ0ZXJSZW5kZXIpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFmdGVyUmVuZGVyRnVuY3Rpb24uY2FsbCh0aGlzLCBkTm9kZSk7XG5cdFx0XHR9LCBkTm9kZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX21ldGFNYXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5fbWV0YU1hcC5mb3JFYWNoKChtZXRhKSA9PiB7XG5cdFx0XHRcdG1ldGEuYWZ0ZXJSZW5kZXIoKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkTm9kZTtcblx0fVxuXG5cdHByaXZhdGUgX3J1bkFmdGVyQ29uc3RydWN0b3JzKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFmdGVyQ29uc3RydWN0b3JzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyQ29uc3RydWN0b3InKTtcblxuXHRcdGlmIChhZnRlckNvbnN0cnVjdG9ycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhZnRlckNvbnN0cnVjdG9ycy5mb3JFYWNoKChhZnRlckNvbnN0cnVjdG9yKSA9PiBhZnRlckNvbnN0cnVjdG9yLmNhbGwodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBvd24oaGFuZGxlOiBIYW5kbGUpOiB2b2lkIHtcblx0XHR0aGlzLl9oYW5kbGVzLnB1c2goaGFuZGxlKTtcblx0fVxuXG5cdHByb3RlY3RlZCBkZXN0cm95KCkge1xuXHRcdHdoaWxlICh0aGlzLl9oYW5kbGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGhhbmRsZSA9IHRoaXMuX2hhbmRsZXMucG9wKCk7XG5cdFx0XHRpZiAoaGFuZGxlKSB7XG5cdFx0XHRcdGhhbmRsZS5kZXN0cm95KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdpZGdldEJhc2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gV2lkZ2V0QmFzZS50cyIsImltcG9ydCB7IFZOb2RlUHJvcGVydGllcyB9IGZyb20gJy4vLi4vaW50ZXJmYWNlcyc7XG5cbmxldCBicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lID0gJyc7XG5sZXQgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJyc7XG5cbmZ1bmN0aW9uIGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG5cdGlmICgnV2Via2l0VHJhbnNpdGlvbicgaW4gZWxlbWVudC5zdHlsZSkge1xuXHRcdGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUgPSAnd2Via2l0VHJhbnNpdGlvbkVuZCc7XG5cdFx0YnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG5cdH0gZWxzZSBpZiAoJ3RyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUgfHwgJ01velRyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUpIHtcblx0XHRicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lID0gJ3RyYW5zaXRpb25lbmQnO1xuXHRcdGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9ICdhbmltYXRpb25lbmQnO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcignWW91ciBicm93c2VyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcblx0fVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG5cdGlmIChicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPT09ICcnKSB7XG5cdFx0ZGV0ZXJtaW5lQnJvd3NlclN0eWxlTmFtZXMoZWxlbWVudCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcnVuQW5kQ2xlYW5VcChlbGVtZW50OiBIVE1MRWxlbWVudCwgc3RhcnRBbmltYXRpb246ICgpID0+IHZvaWQsIGZpbmlzaEFuaW1hdGlvbjogKCkgPT4gdm9pZCkge1xuXHRpbml0aWFsaXplKGVsZW1lbnQpO1xuXG5cdGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuXG5cdGxldCB0cmFuc2l0aW9uRW5kID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCFmaW5pc2hlZCkge1xuXHRcdFx0ZmluaXNoZWQgPSB0cnVlO1xuXHRcdFx0ZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xuXHRcdFx0ZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG5cblx0XHRcdGZpbmlzaEFuaW1hdGlvbigpO1xuXHRcdH1cblx0fTtcblxuXHRzdGFydEFuaW1hdGlvbigpO1xuXG5cdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xuXHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG59XG5cbmZ1bmN0aW9uIGV4aXQobm9kZTogSFRNTEVsZW1lbnQsIHByb3BlcnRpZXM6IFZOb2RlUHJvcGVydGllcywgZXhpdEFuaW1hdGlvbjogc3RyaW5nLCByZW1vdmVOb2RlOiAoKSA9PiB2b2lkKSB7XG5cdGNvbnN0IGFjdGl2ZUNsYXNzID0gcHJvcGVydGllcy5leGl0QW5pbWF0aW9uQWN0aXZlIHx8IGAke2V4aXRBbmltYXRpb259LWFjdGl2ZWA7XG5cblx0cnVuQW5kQ2xlYW5VcChcblx0XHRub2RlLFxuXHRcdCgpID0+IHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LmFkZChleGl0QW5pbWF0aW9uKTtcblxuXHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRub2RlLmNsYXNzTGlzdC5hZGQoYWN0aXZlQ2xhc3MpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHQoKSA9PiB7XG5cdFx0XHRyZW1vdmVOb2RlKCk7XG5cdFx0fVxuXHQpO1xufVxuXG5mdW5jdGlvbiBlbnRlcihub2RlOiBIVE1MRWxlbWVudCwgcHJvcGVydGllczogVk5vZGVQcm9wZXJ0aWVzLCBlbnRlckFuaW1hdGlvbjogc3RyaW5nKSB7XG5cdGNvbnN0IGFjdGl2ZUNsYXNzID0gcHJvcGVydGllcy5lbnRlckFuaW1hdGlvbkFjdGl2ZSB8fCBgJHtlbnRlckFuaW1hdGlvbn0tYWN0aXZlYDtcblxuXHRydW5BbmRDbGVhblVwKFxuXHRcdG5vZGUsXG5cdFx0KCkgPT4ge1xuXHRcdFx0bm9kZS5jbGFzc0xpc3QuYWRkKGVudGVyQW5pbWF0aW9uKTtcblxuXHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRub2RlLmNsYXNzTGlzdC5hZGQoYWN0aXZlQ2xhc3MpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHQoKSA9PiB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5yZW1vdmUoZW50ZXJBbmltYXRpb24pO1xuXHRcdFx0bm9kZS5jbGFzc0xpc3QucmVtb3ZlKGFjdGl2ZUNsYXNzKTtcblx0XHR9XG5cdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcblx0ZW50ZXIsXG5cdGV4aXRcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gY3NzVHJhbnNpdGlvbnMudHMiLCJpbXBvcnQgU3ltYm9sIGZyb20gJ0Bkb2pvL3NoaW0vU3ltYm9sJztcbmltcG9ydCB7XG5cdENvbnN0cnVjdG9yLFxuXHREZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZSxcblx0RGVmZXJyZWRWaXJ0dWFsUHJvcGVydGllcyxcblx0RE5vZGUsXG5cdFZOb2RlLFxuXHRSZWdpc3RyeUxhYmVsLFxuXHRWTm9kZVByb3BlcnRpZXMsXG5cdFdpZGdldEJhc2VJbnRlcmZhY2UsXG5cdFdOb2RlLFxuXHREb21PcHRpb25zXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJbnRlcm5hbFZOb2RlLCBSZW5kZXJSZXN1bHQgfSBmcm9tICcuL3Zkb20nO1xuXG4vKipcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBXTm9kZSB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBXTk9ERSA9IFN5bWJvbCgnSWRlbnRpZmllciBmb3IgYSBXTm9kZS4nKTtcblxuLyoqXG4gKiBUaGUgc3ltYm9sIGlkZW50aWZpZXIgZm9yIGEgVk5vZGUgdHlwZVxuICovXG5leHBvcnQgY29uc3QgVk5PREUgPSBTeW1ib2woJ0lkZW50aWZpZXIgZm9yIGEgVk5vZGUuJyk7XG5cbi8qKlxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFZOb2RlIHR5cGUgY3JlYXRlZCB1c2luZyBkb20oKVxuICovXG5leHBvcnQgY29uc3QgRE9NVk5PREUgPSBTeW1ib2woJ0lkZW50aWZpZXIgZm9yIGEgVk5vZGUgY3JlYXRlZCB1c2luZyBleGlzdGluZyBkb20uJyk7XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFdOb2RlYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dOb2RlPFcgZXh0ZW5kcyBXaWRnZXRCYXNlSW50ZXJmYWNlID0gRGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2U+KFxuXHRjaGlsZDogRE5vZGU8Vz5cbik6IGNoaWxkIGlzIFdOb2RlPFc+IHtcblx0cmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiBjaGlsZC50eXBlID09PSBXTk9ERSk7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFZOb2RlYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZOb2RlKGNoaWxkOiBETm9kZSk6IGNoaWxkIGlzIFZOb2RlIHtcblx0cmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiAoY2hpbGQudHlwZSA9PT0gVk5PREUgfHwgY2hpbGQudHlwZSA9PT0gRE9NVk5PREUpKTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgVk5vZGVgIGNyZWF0ZWQgd2l0aCBgZG9tKClgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRG9tVk5vZGUoY2hpbGQ6IEROb2RlKTogY2hpbGQgaXMgVk5vZGUge1xuXHRyZXR1cm4gQm9vbGVhbihjaGlsZCAmJiB0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnICYmIGNoaWxkLnR5cGUgPT09IERPTVZOT0RFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudE5vZGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIEVsZW1lbnQge1xuXHRyZXR1cm4gISF2YWx1ZS50YWdOYW1lO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgdGhlIGRlY29yYXRlIG1vZGlmaWVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kaWZpZXI8VCBleHRlbmRzIEROb2RlPiB7XG5cdChkTm9kZTogVCwgYnJlYWtlcjogKCkgPT4gdm9pZCk6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiBmb3IgZGVjb3JhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVkaWNhdGU8VCBleHRlbmRzIEROb2RlPiB7XG5cdChkTm9kZTogRE5vZGUpOiBkTm9kZSBpcyBUO1xufVxuXG4vKipcbiAqIERlY29yYXRvciBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb3JhdGVPcHRpb25zPFQgZXh0ZW5kcyBETm9kZT4ge1xuXHRtb2RpZmllcjogTW9kaWZpZXI8VD47XG5cdHByZWRpY2F0ZT86IFByZWRpY2F0ZTxUPjtcblx0c2hhbGxvdz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogR2VuZXJpYyBkZWNvcmF0ZSBmdW5jdGlvbiBmb3IgRE5vZGVzLiBUaGUgbm9kZXMgYXJlIG1vZGlmaWVkIGluIHBsYWNlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwcmVkaWNhdGVcbiAqIGFuZCBtb2RpZmllciBmdW5jdGlvbnMuXG4gKlxuICogVGhlIGNoaWxkcmVuIG9mIGVhY2ggbm9kZSBhcmUgZmxhdHRlbmVkIGFuZCBhZGRlZCB0byB0aGUgYXJyYXkgZm9yIGRlY29yYXRpb24uXG4gKlxuICogSWYgbm8gcHJlZGljYXRlIGlzIHN1cHBsaWVkIHRoZW4gdGhlIG1vZGlmaWVyIHdpbGwgYmUgZXhlY3V0ZWQgb24gYWxsIG5vZGVzLiBBIGBicmVha2VyYCBmdW5jdGlvbiBpcyBwYXNzZWQgdG8gdGhlXG4gKiBtb2RpZmllciB3aGljaCB3aWxsIGRyYWluIHRoZSBub2RlcyBhcnJheSBhbmQgZXhpdCB0aGUgZGVjb3JhdGlvbi5cbiAqXG4gKiBXaGVuIHRoZSBgc2hhbGxvd2Agb3B0aW9ucyBpcyBzZXQgdG8gYHRydWVgIHRoZSBvbmx5IHRoZSB0b3Agbm9kZSBvciBub2RlcyB3aWxsIGJlIGRlY29yYXRlZCAob25seSBzdXBwb3J0ZWQgdXNpbmdcbiAqIGBEZWNvcmF0ZU9wdGlvbnNgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlPFQgZXh0ZW5kcyBETm9kZT4oZE5vZGVzOiBETm9kZSwgb3B0aW9uczogRGVjb3JhdGVPcHRpb25zPFQ+KTogRE5vZGU7XG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGU8VCBleHRlbmRzIEROb2RlPihkTm9kZXM6IEROb2RlW10sIG9wdGlvbnM6IERlY29yYXRlT3B0aW9uczxUPik6IEROb2RlW107XG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGU8VCBleHRlbmRzIEROb2RlPihkTm9kZXM6IEROb2RlIHwgRE5vZGVbXSwgb3B0aW9uczogRGVjb3JhdGVPcHRpb25zPFQ+KTogRE5vZGUgfCBETm9kZVtdO1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlPFQgZXh0ZW5kcyBETm9kZT4oZE5vZGVzOiBETm9kZSwgbW9kaWZpZXI6IE1vZGlmaWVyPFQ+LCBwcmVkaWNhdGU6IFByZWRpY2F0ZTxUPik6IEROb2RlO1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlPFQgZXh0ZW5kcyBETm9kZT4oZE5vZGVzOiBETm9kZVtdLCBtb2RpZmllcjogTW9kaWZpZXI8VD4sIHByZWRpY2F0ZTogUHJlZGljYXRlPFQ+KTogRE5vZGVbXTtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZTxUIGV4dGVuZHMgRE5vZGU+KFxuXHRkTm9kZXM6IFJlbmRlclJlc3VsdCxcblx0bW9kaWZpZXI6IE1vZGlmaWVyPFQ+LFxuXHRwcmVkaWNhdGU6IFByZWRpY2F0ZTxUPlxuKTogUmVuZGVyUmVzdWx0O1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlKGROb2RlczogRE5vZGUsIG1vZGlmaWVyOiBNb2RpZmllcjxETm9kZT4pOiBETm9kZTtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZShkTm9kZXM6IEROb2RlW10sIG1vZGlmaWVyOiBNb2RpZmllcjxETm9kZT4pOiBETm9kZVtdO1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlKGROb2RlczogUmVuZGVyUmVzdWx0LCBtb2RpZmllcjogTW9kaWZpZXI8RE5vZGU+KTogUmVuZGVyUmVzdWx0O1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlKFxuXHRkTm9kZXM6IEROb2RlIHwgRE5vZGVbXSxcblx0b3B0aW9uc09yTW9kaWZpZXI6IE1vZGlmaWVyPEROb2RlPiB8IERlY29yYXRlT3B0aW9uczxETm9kZT4sXG5cdHByZWRpY2F0ZT86IFByZWRpY2F0ZTxETm9kZT5cbik6IEROb2RlIHwgRE5vZGVbXSB7XG5cdGxldCBzaGFsbG93ID0gZmFsc2U7XG5cdGxldCBtb2RpZmllcjtcblx0aWYgKHR5cGVvZiBvcHRpb25zT3JNb2RpZmllciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdG1vZGlmaWVyID0gb3B0aW9uc09yTW9kaWZpZXI7XG5cdH0gZWxzZSB7XG5cdFx0bW9kaWZpZXIgPSBvcHRpb25zT3JNb2RpZmllci5tb2RpZmllcjtcblx0XHRwcmVkaWNhdGUgPSBvcHRpb25zT3JNb2RpZmllci5wcmVkaWNhdGU7XG5cdFx0c2hhbGxvdyA9IG9wdGlvbnNPck1vZGlmaWVyLnNoYWxsb3cgfHwgZmFsc2U7XG5cdH1cblxuXHRsZXQgbm9kZXMgPSBBcnJheS5pc0FycmF5KGROb2RlcykgPyBbLi4uZE5vZGVzXSA6IFtkTm9kZXNdO1xuXHRmdW5jdGlvbiBicmVha2VyKCkge1xuXHRcdG5vZGVzID0gW107XG5cdH1cblx0d2hpbGUgKG5vZGVzLmxlbmd0aCkge1xuXHRcdGNvbnN0IG5vZGUgPSBub2Rlcy5zaGlmdCgpO1xuXHRcdGlmIChub2RlKSB7XG5cdFx0XHRpZiAoIXNoYWxsb3cgJiYgKGlzV05vZGUobm9kZSkgfHwgaXNWTm9kZShub2RlKSkgJiYgbm9kZS5jaGlsZHJlbikge1xuXHRcdFx0XHRub2RlcyA9IFsuLi5ub2RlcywgLi4ubm9kZS5jaGlsZHJlbl07XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUobm9kZSkpIHtcblx0XHRcdFx0bW9kaWZpZXIobm9kZSwgYnJlYWtlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkTm9kZXM7XG59XG5cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgY2FsbHMgdG8gY3JlYXRlIGEgd2lkZ2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdzxXIGV4dGVuZHMgV2lkZ2V0QmFzZUludGVyZmFjZT4oXG5cdHdpZGdldENvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxXPiB8IFJlZ2lzdHJ5TGFiZWwsXG5cdHByb3BlcnRpZXM6IFdbJ3Byb3BlcnRpZXMnXSxcblx0Y2hpbGRyZW46IFdbJ2NoaWxkcmVuJ10gPSBbXVxuKTogV05vZGU8Vz4ge1xuXHRyZXR1cm4ge1xuXHRcdGNoaWxkcmVuLFxuXHRcdHdpZGdldENvbnN0cnVjdG9yLFxuXHRcdHByb3BlcnRpZXMsXG5cdFx0dHlwZTogV05PREVcblx0fTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciBjYWxscyB0byBjcmVhdGUgVk5vZGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdih0YWc6IHN0cmluZywgY2hpbGRyZW46IHVuZGVmaW5lZCB8IEROb2RlW10pOiBWTm9kZTtcbmV4cG9ydCBmdW5jdGlvbiB2KHRhZzogc3RyaW5nLCBwcm9wZXJ0aWVzOiBEZWZlcnJlZFZpcnR1YWxQcm9wZXJ0aWVzIHwgVk5vZGVQcm9wZXJ0aWVzLCBjaGlsZHJlbj86IEROb2RlW10pOiBWTm9kZTtcbmV4cG9ydCBmdW5jdGlvbiB2KHRhZzogc3RyaW5nKTogVk5vZGU7XG5leHBvcnQgZnVuY3Rpb24gdihcblx0dGFnOiBzdHJpbmcsXG5cdHByb3BlcnRpZXNPckNoaWxkcmVuOiBWTm9kZVByb3BlcnRpZXMgfCBEZWZlcnJlZFZpcnR1YWxQcm9wZXJ0aWVzIHwgRE5vZGVbXSA9IHt9LFxuXHRjaGlsZHJlbjogdW5kZWZpbmVkIHwgRE5vZGVbXSA9IHVuZGVmaW5lZFxuKTogVk5vZGUge1xuXHRsZXQgcHJvcGVydGllczogVk5vZGVQcm9wZXJ0aWVzIHwgRGVmZXJyZWRWaXJ0dWFsUHJvcGVydGllcyA9IHByb3BlcnRpZXNPckNoaWxkcmVuO1xuXHRsZXQgZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2s7XG5cblx0aWYgKEFycmF5LmlzQXJyYXkocHJvcGVydGllc09yQ2hpbGRyZW4pKSB7XG5cdFx0Y2hpbGRyZW4gPSBwcm9wZXJ0aWVzT3JDaGlsZHJlbjtcblx0XHRwcm9wZXJ0aWVzID0ge307XG5cdH1cblxuXHRpZiAodHlwZW9mIHByb3BlcnRpZXMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRkZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9IHByb3BlcnRpZXM7XG5cdFx0cHJvcGVydGllcyA9IHt9O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR0YWcsXG5cdFx0ZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2ssXG5cdFx0Y2hpbGRyZW4sXG5cdFx0cHJvcGVydGllcyxcblx0XHR0eXBlOiBWTk9ERVxuXHR9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIFZOb2RlIGZvciBhbiBleGlzdGluZyBET00gTm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvbShcblx0eyBub2RlLCBhdHRycyA9IHt9LCBwcm9wcyA9IHt9LCBvbiA9IHt9LCBkaWZmVHlwZSA9ICdub25lJyB9OiBEb21PcHRpb25zLFxuXHRjaGlsZHJlbj86IEROb2RlW11cbik6IFZOb2RlIHtcblx0cmV0dXJuIHtcblx0XHR0YWc6IGlzRWxlbWVudE5vZGUobm9kZSkgPyBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA6ICcnLFxuXHRcdHByb3BlcnRpZXM6IHByb3BzLFxuXHRcdGF0dHJpYnV0ZXM6IGF0dHJzLFxuXHRcdGV2ZW50czogb24sXG5cdFx0Y2hpbGRyZW4sXG5cdFx0dHlwZTogRE9NVk5PREUsXG5cdFx0ZG9tTm9kZTogbm9kZSxcblx0XHR0ZXh0OiBpc0VsZW1lbnROb2RlKG5vZGUpID8gdW5kZWZpbmVkIDogbm9kZS5kYXRhLFxuXHRcdGRpZmZUeXBlXG5cdH0gYXMgSW50ZXJuYWxWTm9kZTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBkLnRzIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuXG4vKipcbiAqIERlY29yYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gcnVuIGFzIGFuIGFzcGVjdCB0byBgcmVuZGVyYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXJSZW5kZXIobWV0aG9kOiBGdW5jdGlvbik6ICh0YXJnZXQ6IGFueSkgPT4gdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiBhZnRlclJlbmRlcigpOiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXJSZW5kZXIobWV0aG9kPzogRnVuY3Rpb24pIHtcblx0cmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdHRhcmdldC5hZGREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJywgcHJvcGVydHlLZXkgPyB0YXJnZXRbcHJvcGVydHlLZXldIDogbWV0aG9kKTtcblx0fSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFmdGVyUmVuZGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGFmdGVyUmVuZGVyLnRzIiwiaW1wb3J0IHsgV2lkZ2V0QmFzZSB9IGZyb20gJy4vLi4vV2lkZ2V0QmFzZSc7XG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0b3IgfSBmcm9tICcuL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBiZWZvcmVQcm9wZXJ0aWVzIH0gZnJvbSAnLi9iZWZvcmVQcm9wZXJ0aWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFsd2F5c1JlbmRlcigpIHtcblx0cmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdGJlZm9yZVByb3BlcnRpZXMoZnVuY3Rpb24odGhpczogV2lkZ2V0QmFzZSkge1xuXHRcdFx0dGhpcy5pbnZhbGlkYXRlKCk7XG5cdFx0fSkodGFyZ2V0KTtcblx0fSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFsd2F5c1JlbmRlcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBhbHdheXNSZW5kZXIudHMiLCJpbXBvcnQgeyBoYW5kbGVEZWNvcmF0b3IgfSBmcm9tICcuL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBCZWZvcmVQcm9wZXJ0aWVzIH0gZnJvbSAnLi8uLi9pbnRlcmZhY2VzJztcblxuLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBhZGRzIHRoZSBmdW5jdGlvbiBwYXNzZWQgb2YgdGFyZ2V0IG1ldGhvZCB0byBiZSBydW5cbiAqIGluIHRoZSBgYmVmb3JlUHJvcGVydGllc2AgbGlmZWN5Y2xlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlUHJvcGVydGllcyhtZXRob2Q6IEJlZm9yZVByb3BlcnRpZXMpOiAodGFyZ2V0OiBhbnkpID0+IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlUHJvcGVydGllcygpOiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlUHJvcGVydGllcyhtZXRob2Q/OiBCZWZvcmVQcm9wZXJ0aWVzKSB7XG5cdHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcblx0XHR0YXJnZXQuYWRkRGVjb3JhdG9yKCdiZWZvcmVQcm9wZXJ0aWVzJywgcHJvcGVydHlLZXkgPyB0YXJnZXRbcHJvcGVydHlLZXldIDogbWV0aG9kKTtcblx0fSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJlZm9yZVByb3BlcnRpZXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gYmVmb3JlUHJvcGVydGllcy50cyIsImltcG9ydCB7IENvbnN0cnVjdG9yLCBXaWRnZXRQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50Q2hpbGRUeXBlIH0gZnJvbSAnLi4vcmVnaXN0ZXJDdXN0b21FbGVtZW50JztcbmltcG9ydCBSZWdpc3RyeSBmcm9tICcuLi9SZWdpc3RyeSc7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVsZW1lbnRQcm9wZXJ0eU5hbWVzPFAgZXh0ZW5kcyBvYmplY3Q+ID0gKChrZXlvZiBQKSB8IChrZXlvZiBXaWRnZXRQcm9wZXJ0aWVzKSlbXTtcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBjdXN0b20gZWxlbWVudCBjb25maWd1cmF0aW9uIHVzZWQgYnkgdGhlIGN1c3RvbUVsZW1lbnQgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRWxlbWVudENvbmZpZzxQIGV4dGVuZHMgb2JqZWN0ID0geyBbaW5kZXg6IHN0cmluZ106IGFueSB9PiB7XG5cdC8qKlxuXHQgKiBUaGUgdGFnIG9mIHRoZSBjdXN0b20gZWxlbWVudFxuXHQgKi9cblx0dGFnOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIExpc3Qgb2Ygd2lkZ2V0IHByb3BlcnRpZXMgdG8gZXhwb3NlIGFzIHByb3BlcnRpZXMgb24gdGhlIGN1c3RvbSBlbGVtZW50XG5cdCAqL1xuXHRwcm9wZXJ0aWVzPzogQ3VzdG9tRWxlbWVudFByb3BlcnR5TmFtZXM8UD47XG5cblx0LyoqXG5cdCAqIExpc3Qgb2YgYXR0cmlidXRlcyBvbiB0aGUgY3VzdG9tIGVsZW1lbnQgdG8gbWFwIHRvIHdpZGdldCBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRhdHRyaWJ1dGVzPzogQ3VzdG9tRWxlbWVudFByb3BlcnR5TmFtZXM8UD47XG5cblx0LyoqXG5cdCAqIExpc3Qgb2YgZXZlbnRzIHRvIGV4cG9zZVxuXHQgKi9cblx0ZXZlbnRzPzogQ3VzdG9tRWxlbWVudFByb3BlcnR5TmFtZXM8UD47XG5cblx0Y2hpbGRUeXBlPzogQ3VzdG9tRWxlbWVudENoaWxkVHlwZTtcblxuXHRyZWdpc3RyeUZhY3Rvcnk/OiAoKSA9PiBSZWdpc3RyeTtcbn1cblxuLyoqXG4gKiBUaGlzIERlY29yYXRvciBpcyBwcm92aWRlZCBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIHRoZSBiZWhhdmlvciBvZiBhIGN1c3RvbSBlbGVtZW50LCBhbmRcbiAqIHJlZ2lzdGVycyB0aGF0IGN1c3RvbSBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0geyBbaW5kZXg6IHN0cmluZ106IGFueSB9Pih7XG5cdHRhZyxcblx0cHJvcGVydGllcyA9IFtdLFxuXHRhdHRyaWJ1dGVzID0gW10sXG5cdGV2ZW50cyA9IFtdLFxuXHRjaGlsZFR5cGUgPSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8sXG5cdHJlZ2lzdHJ5RmFjdG9yeSA9ICgpID0+IG5ldyBSZWdpc3RyeSgpXG59OiBDdXN0b21FbGVtZW50Q29uZmlnPFA+KSB7XG5cdHJldHVybiBmdW5jdGlvbjxUIGV4dGVuZHMgQ29uc3RydWN0b3I8YW55Pj4odGFyZ2V0OiBUKSB7XG5cdFx0dGFyZ2V0LnByb3RvdHlwZS5fX2N1c3RvbUVsZW1lbnREZXNjcmlwdG9yID0ge1xuXHRcdFx0dGFnTmFtZTogdGFnLFxuXHRcdFx0YXR0cmlidXRlcyxcblx0XHRcdHByb3BlcnRpZXMsXG5cdFx0XHRldmVudHMsXG5cdFx0XHRjaGlsZFR5cGUsXG5cdFx0XHRyZWdpc3RyeUZhY3Rvcnlcblx0XHR9O1xuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjdXN0b21FbGVtZW50O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGN1c3RvbUVsZW1lbnQudHMiLCJpbXBvcnQgeyBoYW5kbGVEZWNvcmF0b3IgfSBmcm9tICcuL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBEaWZmUHJvcGVydHlGdW5jdGlvbiB9IGZyb20gJy4vLi4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogRGVjb3JhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgYSBmdW5jdGlvbiBhcyBhIHNwZWNpZmljIHByb3BlcnR5IGRpZmZcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lICBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgb2Ygd2hpY2ggdGhlIGRpZmYgZnVuY3Rpb24gaXMgYXBwbGllZFxuICogQHBhcmFtIGRpZmZUeXBlICAgICAgVGhlIGRpZmYgdHlwZSwgZGVmYXVsdCBpcyBEaWZmVHlwZS5BVVRPLlxuICogQHBhcmFtIGRpZmZGdW5jdGlvbiAgQSBkaWZmIGZ1bmN0aW9uIHRvIHJ1biBpZiBkaWZmVHlwZSBpZiBEaWZmVHlwZS5DVVNUT01cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZywgZGlmZkZ1bmN0aW9uOiBEaWZmUHJvcGVydHlGdW5jdGlvbiwgcmVhY3Rpb25GdW5jdGlvbj86IEZ1bmN0aW9uKSB7XG5cdHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcblx0XHR0YXJnZXQuYWRkRGVjb3JhdG9yKGBkaWZmUHJvcGVydHk6JHtwcm9wZXJ0eU5hbWV9YCwgZGlmZkZ1bmN0aW9uLmJpbmQobnVsbCkpO1xuXHRcdHRhcmdldC5hZGREZWNvcmF0b3IoJ3JlZ2lzdGVyZWREaWZmUHJvcGVydHknLCBwcm9wZXJ0eU5hbWUpO1xuXHRcdGlmIChyZWFjdGlvbkZ1bmN0aW9uIHx8IHByb3BlcnR5S2V5KSB7XG5cdFx0XHR0YXJnZXQuYWRkRGVjb3JhdG9yKCdkaWZmUmVhY3Rpb24nLCB7XG5cdFx0XHRcdHByb3BlcnR5TmFtZSxcblx0XHRcdFx0cmVhY3Rpb246IHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IHJlYWN0aW9uRnVuY3Rpb25cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpZmZQcm9wZXJ0eTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBkaWZmUHJvcGVydHkudHMiLCJleHBvcnQgdHlwZSBEZWNvcmF0b3JIYW5kbGVyID0gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleT86IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBHZW5lcmljIGRlY29yYXRvciBoYW5kbGVyIHRvIHRha2UgY2FyZSBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgZGVjb3JhdG9yIHdhcyBjYWxsZWQgYXQgdGhlIGNsYXNzIGxldmVsXG4gKiBvciB0aGUgbWV0aG9kIGxldmVsLlxuICpcbiAqIEBwYXJhbSBoYW5kbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVEZWNvcmF0b3IoaGFuZGxlcjogRGVjb3JhdG9ySGFuZGxlcikge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5Pzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG5cdFx0aWYgKHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGhhbmRsZXIodGFyZ2V0LnByb3RvdHlwZSwgdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGFuZGxlcih0YXJnZXQsIHByb3BlcnR5S2V5KTtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZURlY29yYXRvcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBoYW5kbGVEZWNvcmF0b3IudHMiLCJpbXBvcnQgV2Vha01hcCBmcm9tICdAZG9qby9zaGltL1dlYWtNYXAnO1xuaW1wb3J0IHsgV2lkZ2V0QmFzZSB9IGZyb20gJy4vLi4vV2lkZ2V0QmFzZSc7XG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0b3IgfSBmcm9tICcuL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBiZWZvcmVQcm9wZXJ0aWVzIH0gZnJvbSAnLi9iZWZvcmVQcm9wZXJ0aWVzJztcbmltcG9ydCB7IEluamVjdG9ySXRlbSwgUmVnaXN0cnlMYWJlbCB9IGZyb20gJy4vLi4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogTWFwIG9mIGluc3RhbmNlcyBhZ2FpbnN0IHJlZ2lzdGVyZWQgaW5qZWN0b3JzLlxuICovXG5jb25zdCByZWdpc3RlcmVkSW5qZWN0b3JzTWFwOiBXZWFrTWFwPFdpZGdldEJhc2UsIEluamVjdG9ySXRlbVtdPiA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgY29udHJhY3QgcmVxdWlyZXMgZm9yIHRoZSBnZXQgcHJvcGVydGllcyBmdW5jdGlvblxuICogdXNlZCB0byBtYXAgdGhlIGluamVjdGVkIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UHJvcGVydGllczxUID0gYW55PiB7XG5cdChwYXlsb2FkOiBhbnksIHByb3BlcnRpZXM6IFQpOiBUO1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGluamVjdCBjb25maWd1cmF0aW9uIHJlcXVpcmVkIGZvciB1c2Ugb2YgdGhlIGBpbmplY3RgIGRlY29yYXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluamVjdENvbmZpZyB7XG5cdC8qKlxuXHQgKiBUaGUgbGFiZWwgb2YgdGhlIHJlZ2lzdHJ5IGluamVjdG9yXG5cdCAqL1xuXHRuYW1lOiBSZWdpc3RyeUxhYmVsO1xuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgcHJvcGVydHVlcyB0byBpbmplY3QgdXNpbmcgdGhlIHBhc3NlZCBwcm9wZXJ0aWVzXG5cdCAqIGFuZCB0aGUgaW5qZWN0ZWQgcGF5bG9hZC5cblx0ICovXG5cdGdldFByb3BlcnRpZXM6IEdldFByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogRGVjb3JhdG9yIHJldHJpZXZlcyBhbiBpbmplY3RvciBmcm9tIGFuIGF2YWlsYWJsZSByZWdpc3RyeSB1c2luZyB0aGUgbmFtZSBhbmRcbiAqIGNhbGxzIHRoZSBgZ2V0UHJvcGVydGllc2AgZnVuY3Rpb24gd2l0aCB0aGUgcGF5bG9hZCBmcm9tIHRoZSBpbmplY3RvclxuICogYW5kIGN1cnJlbnQgcHJvcGVydGllcyB3aXRoIHRoZSB0aGUgaW5qZWN0ZWQgcHJvcGVydGllcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gSW5qZWN0Q29uZmlnIHRoZSBpbmplY3QgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KHsgbmFtZSwgZ2V0UHJvcGVydGllcyB9OiBJbmplY3RDb25maWcpIHtcblx0cmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdGJlZm9yZVByb3BlcnRpZXMoZnVuY3Rpb24odGhpczogV2lkZ2V0QmFzZSAmIHsgb3duOiBGdW5jdGlvbiB9LCBwcm9wZXJ0aWVzOiBhbnkpIHtcblx0XHRcdGNvbnN0IGluamVjdG9ySXRlbSA9IHRoaXMucmVnaXN0cnkuZ2V0SW5qZWN0b3IobmFtZSk7XG5cdFx0XHRpZiAoaW5qZWN0b3JJdGVtKSB7XG5cdFx0XHRcdGNvbnN0IHsgaW5qZWN0b3IsIGludmFsaWRhdG9yIH0gPSBpbmplY3Rvckl0ZW07XG5cdFx0XHRcdGNvbnN0IHJlZ2lzdGVyZWRJbmplY3RvcnMgPSByZWdpc3RlcmVkSW5qZWN0b3JzTWFwLmdldCh0aGlzKSB8fCBbXTtcblx0XHRcdFx0aWYgKHJlZ2lzdGVyZWRJbmplY3RvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0cmVnaXN0ZXJlZEluamVjdG9yc01hcC5zZXQodGhpcywgcmVnaXN0ZXJlZEluamVjdG9ycyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJlZ2lzdGVyZWRJbmplY3RvcnMuaW5kZXhPZihpbmplY3Rvckl0ZW0pID09PSAtMSkge1xuXHRcdFx0XHRcdHRoaXMub3duKFxuXHRcdFx0XHRcdFx0aW52YWxpZGF0b3Iub24oJ2ludmFsaWRhdGUnLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJlZ2lzdGVyZWRJbmplY3RvcnMucHVzaChpbmplY3Rvckl0ZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBnZXRQcm9wZXJ0aWVzKGluamVjdG9yKCksIHByb3BlcnRpZXMpO1xuXHRcdFx0fVxuXHRcdH0pKHRhcmdldCk7XG5cdH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbmplY3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gaW5qZWN0LnRzIiwiaW1wb3J0IHsgUHJvcGVydHlDaGFuZ2VSZWNvcmQgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgV0lER0VUX0JBU0VfVFlQRSB9IGZyb20gJy4vUmVnaXN0cnknO1xuXG5mdW5jdGlvbiBpc09iamVjdE9yQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHdheXMocHJldmlvdXNQcm9wZXJ0eTogYW55LCBuZXdQcm9wZXJ0eTogYW55KTogUHJvcGVydHlDaGFuZ2VSZWNvcmQge1xuXHRyZXR1cm4ge1xuXHRcdGNoYW5nZWQ6IHRydWUsXG5cdFx0dmFsdWU6IG5ld1Byb3BlcnR5XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmUocHJldmlvdXNQcm9wZXJ0eTogYW55LCBuZXdQcm9wZXJ0eTogYW55KTogUHJvcGVydHlDaGFuZ2VSZWNvcmQge1xuXHRyZXR1cm4ge1xuXHRcdGNoYW5nZWQ6IGZhbHNlLFxuXHRcdHZhbHVlOiBuZXdQcm9wZXJ0eVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHk6IGFueSwgbmV3UHJvcGVydHk6IGFueSk6IFByb3BlcnR5Q2hhbmdlUmVjb3JkIHtcblx0cmV0dXJuIHtcblx0XHRjaGFuZ2VkOiBwcmV2aW91c1Byb3BlcnR5ICE9PSBuZXdQcm9wZXJ0eSxcblx0XHR2YWx1ZTogbmV3UHJvcGVydHlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3cocHJldmlvdXNQcm9wZXJ0eTogYW55LCBuZXdQcm9wZXJ0eTogYW55KTogUHJvcGVydHlDaGFuZ2VSZWNvcmQge1xuXHRsZXQgY2hhbmdlZCA9IGZhbHNlO1xuXG5cdGNvbnN0IHZhbGlkT2xkUHJvcGVydHkgPSBwcmV2aW91c1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShwcmV2aW91c1Byb3BlcnR5KTtcblx0Y29uc3QgdmFsaWROZXdQcm9wZXJ0eSA9IG5ld1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShuZXdQcm9wZXJ0eSk7XG5cblx0aWYgKCF2YWxpZE9sZFByb3BlcnR5IHx8ICF2YWxpZE5ld1Byb3BlcnR5KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNoYW5nZWQ6IHRydWUsXG5cdFx0XHR2YWx1ZTogbmV3UHJvcGVydHlcblx0XHR9O1xuXHR9XG5cblx0Y29uc3QgcHJldmlvdXNLZXlzID0gT2JqZWN0LmtleXMocHJldmlvdXNQcm9wZXJ0eSk7XG5cdGNvbnN0IG5ld0tleXMgPSBPYmplY3Qua2V5cyhuZXdQcm9wZXJ0eSk7XG5cblx0aWYgKHByZXZpb3VzS2V5cy5sZW5ndGggIT09IG5ld0tleXMubGVuZ3RoKSB7XG5cdFx0Y2hhbmdlZCA9IHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0Y2hhbmdlZCA9IG5ld0tleXMuc29tZSgoa2V5KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3UHJvcGVydHlba2V5XSAhPT0gcHJldmlvdXNQcm9wZXJ0eVtrZXldO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0Y2hhbmdlZCxcblx0XHR2YWx1ZTogbmV3UHJvcGVydHlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1dG8ocHJldmlvdXNQcm9wZXJ0eTogYW55LCBuZXdQcm9wZXJ0eTogYW55KTogUHJvcGVydHlDaGFuZ2VSZWNvcmQge1xuXHRsZXQgcmVzdWx0O1xuXHRpZiAodHlwZW9mIG5ld1Byb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0aWYgKG5ld1Byb3BlcnR5Ll90eXBlID09PSBXSURHRVRfQkFTRV9UWVBFKSB7XG5cdFx0XHRyZXN1bHQgPSByZWZlcmVuY2UocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQgPSBpZ25vcmUocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpc09iamVjdE9yQXJyYXkobmV3UHJvcGVydHkpKSB7XG5cdFx0cmVzdWx0ID0gc2hhbGxvdyhwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG5cdH0gZWxzZSB7XG5cdFx0cmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGRpZmYudHMiLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdAZG9qby9jb3JlL2xhbmcnO1xuaW1wb3J0IHsgSGFuZGxlIH0gZnJvbSAnQGRvam8vY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCBjc3NUcmFuc2l0aW9ucyBmcm9tICcuLi9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zJztcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBETm9kZSwgUHJvamVjdGlvbiwgUHJvamVjdGlvbk9wdGlvbnMgfSBmcm9tICcuLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgV2lkZ2V0QmFzZSB9IGZyb20gJy4vLi4vV2lkZ2V0QmFzZSc7XG5pbXBvcnQgeyBhZnRlclJlbmRlciB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9hZnRlclJlbmRlcic7XG5pbXBvcnQgeyB2IH0gZnJvbSAnLi8uLi9kJztcbmltcG9ydCB7IFJlZ2lzdHJ5IH0gZnJvbSAnLi8uLi9SZWdpc3RyeSc7XG5pbXBvcnQgeyBkb20gfSBmcm9tICcuLy4uL3Zkb20nO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGF0dGFjaCBzdGF0ZSBvZiB0aGUgcHJvamVjdG9yXG4gKi9cbmV4cG9ydCBlbnVtIFByb2plY3RvckF0dGFjaFN0YXRlIHtcblx0QXR0YWNoZWQgPSAxLFxuXHREZXRhY2hlZFxufVxuXG4vKipcbiAqIEF0dGFjaCB0eXBlIGZvciB0aGUgcHJvamVjdG9yXG4gKi9cbmV4cG9ydCBlbnVtIEF0dGFjaFR5cGUge1xuXHRBcHBlbmQgPSAxLFxuXHRNZXJnZSA9IDJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRhY2hPcHRpb25zIHtcblx0LyoqXG5cdCAqIElmIGAnYXBwZW5kJ2AgaXQgd2lsbCBhcHBlbmRlZCB0byB0aGUgcm9vdC4gSWYgYCdtZXJnZSdgIGl0IHdpbGwgbWVyZ2VkIHdpdGggdGhlIHJvb3QuIElmIGAncmVwbGFjZSdgIGl0IHdpbGxcblx0ICogcmVwbGFjZSB0aGUgcm9vdC5cblx0ICovXG5cdHR5cGU6IEF0dGFjaFR5cGU7XG5cblx0LyoqXG5cdCAqIEVsZW1lbnQgdG8gYXR0YWNoIHRoZSBwcm9qZWN0b3IuXG5cdCAqL1xuXHRyb290PzogRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0b3JQcm9wZXJ0aWVzIHtcblx0cmVnaXN0cnk/OiBSZWdpc3RyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0b3JNaXhpbjxQPiB7XG5cdHJlYWRvbmx5IHByb3BlcnRpZXM6IFJlYWRvbmx5PFA+ICYgUmVhZG9ubHk8UHJvamVjdG9yUHJvcGVydGllcz47XG5cblx0LyoqXG5cdCAqIEFwcGVuZCB0aGUgcHJvamVjdG9yIHRvIHRoZSByb290LlxuXHQgKi9cblx0YXBwZW5kKHJvb3Q/OiBFbGVtZW50KTogSGFuZGxlO1xuXG5cdC8qKlxuXHQgKiBNZXJnZSB0aGUgcHJvamVjdG9yIG9udG8gdGhlIHJvb3QuXG5cdCAqXG5cdCAqIFRoZSBgcm9vdGAgYW5kIGFueSBvZiBpdHMgYGNoaWxkcmVuYCB3aWxsIGJlIHJlLXVzZWQuICBBbnkgZXhjZXNzIERPTSBub2RlcyB3aWxsIGJlIGlnbm9yZWQgYW5kIGFueSBtaXNzaW5nIERPTSBub2Rlc1xuXHQgKiB3aWxsIGJlIGNyZWF0ZWQuXG5cdCAqIEBwYXJhbSByb290IFRoZSByb290IGVsZW1lbnQgdGhhdCB0aGUgcm9vdCB2aXJ0dWFsIERPTSBub2RlIHdpbGwgYmUgbWVyZ2VkIHdpdGguICBEZWZhdWx0cyB0byBgZG9jdW1lbnQuYm9keWAuXG5cdCAqL1xuXHRtZXJnZShyb290PzogRWxlbWVudCk6IEhhbmRsZTtcblxuXHQvKipcblx0ICogQXR0YWNoIHRoZSBwcm9qZWN0IHRvIGEgX3NhbmRib3hlZF8gZG9jdW1lbnQgZnJhZ21lbnQgdGhhdCBpcyBub3QgcGFydCBvZiB0aGUgRE9NLlxuXHQgKlxuXHQgKiBXaGVuIHNhbmRib3hlZCwgdGhlIGBQcm9qZWN0b3JgIHdpbGwgcnVuIGluIGEgc3luYyBtYW5uZXIsIHdoZXJlIHJlbmRlcnMgYXJlIGNvbXBsZXRlZCB3aXRoaW4gdGhlIHNhbWUgdHVybi5cblx0ICogVGhlIGBQcm9qZWN0b3JgIGNyZWF0ZXMgYSBgRG9jdW1lbnRGcmFnbWVudGAgd2hpY2ggcmVwbGFjZXMgYW55IG90aGVyIGByb290YCB0aGF0IGhhcyBiZWVuIHNldC5cblx0ICogQHBhcmFtIGRvYyBUaGUgYERvY3VtZW50YCB0byB1c2UsIHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBnbG9iYWwgYGRvY3VtZW50YC5cblx0ICovXG5cdHNhbmRib3goZG9jPzogRG9jdW1lbnQpOiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgd2lkZ2V0LiBSZXNwb25zaWJsZSBmb3IgY2FsbGluZyB0aGUgZGlmZmluZyBmdW5jdGlvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIGFnYWluc3QgdGhlXG5cdCAqIHByZXZpb3VzIHByb3BlcnRpZXMuIFJ1bnMgdGhvdWdoIGFueSByZWdpc3RlcmVkIHNwZWNpZmljIHByb3BlcnR5IGRpZmYgZnVuY3Rpb25zIGNvbGxlY3RpbmcgdGhlIHJlc3VsdHMgYW5kIHRoZW5cblx0ICogcnVucyB0aGUgcmVtYWluZGVyIHRocm91Z2ggdGhlIGNhdGNoIGFsbCBkaWZmIGZ1bmN0aW9uLiBUaGUgYWdncmVnYXRlIG9mIHRoZSB0d28gc2V0cyBvZiB0aGUgcmVzdWx0cyBpcyB0aGVuXG5cdCAqIHNldCBhcyB0aGUgd2lkZ2V0J3MgcHJvcGVydGllc1xuXHQgKlxuXHQgKiBAcGFyYW0gcHJvcGVydGllcyBUaGUgbmV3IHdpZGdldCBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRzZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXM6IHRoaXNbJ3Byb3BlcnRpZXMnXSk6IHZvaWQ7XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHdpZGdldCdzIGNoaWxkcmVuXG5cdCAqL1xuXHRzZXRDaGlsZHJlbihjaGlsZHJlbjogRE5vZGVbXSk6IHZvaWQ7XG5cblx0LyoqXG5cdCAqIFJldHVybiBhIGBzdHJpbmdgIHRoYXQgcmVwcmVzZW50cyB0aGUgSFRNTCBvZiB0aGUgY3VycmVudCBwcm9qZWN0aW9uLiAgVGhlIHByb2plY3RvciBuZWVkcyB0byBiZSBhdHRhY2hlZC5cblx0ICovXG5cdHRvSHRtbCgpOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyBpZiB0aGUgcHJvamVjdG9ycyBpcyBpbiBhc3luYyBtb2RlLCBjb25maWd1cmVkIHRvIGB0cnVlYCBieSBkZWZhdWx0cy5cblx0ICovXG5cdGFzeW5jOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBSb290IGVsZW1lbnQgdG8gYXR0YWNoIHRoZSBwcm9qZWN0b3Jcblx0ICovXG5cdHJvb3Q6IEVsZW1lbnQ7XG5cblx0LyoqXG5cdCAqIFRoZSBzdGF0dXMgb2YgdGhlIHByb2plY3RvclxuXHQgKi9cblx0cmVhZG9ubHkgcHJvamVjdG9yU3RhdGU6IFByb2plY3RvckF0dGFjaFN0YXRlO1xuXG5cdC8qKlxuXHQgKiBSdW5zIHJlZ2lzdGVyZWQgZGVzdHJveSBoYW5kbGVzXG5cdCAqL1xuXHRkZXN0cm95KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQcm9qZWN0b3JNaXhpbjxQLCBUIGV4dGVuZHMgQ29uc3RydWN0b3I8V2lkZ2V0QmFzZTxQPj4+KEJhc2U6IFQpOiBUICYgQ29uc3RydWN0b3I8UHJvamVjdG9yTWl4aW48UD4+IHtcblx0YWJzdHJhY3QgY2xhc3MgUHJvamVjdG9yIGV4dGVuZHMgQmFzZSB7XG5cdFx0cHVibGljIHByb2plY3RvclN0YXRlOiBQcm9qZWN0b3JBdHRhY2hTdGF0ZTtcblxuXHRcdHByaXZhdGUgX3Jvb3Q6IEVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuXHRcdHByaXZhdGUgX2FzeW5jID0gdHJ1ZTtcblx0XHRwcml2YXRlIF9hdHRhY2hIYW5kbGU6IEhhbmRsZSB8IHVuZGVmaW5lZDtcblx0XHRwcml2YXRlIF9wcm9qZWN0aW9uT3B0aW9uczogUGFydGlhbDxQcm9qZWN0aW9uT3B0aW9ucz47XG5cdFx0cHJpdmF0ZSBfcHJvamVjdGlvbjogUHJvamVjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRwcml2YXRlIF9wcm9qZWN0b3JQcm9wZXJ0aWVzOiB0aGlzWydwcm9wZXJ0aWVzJ10gPSB7fSBhcyB0aGlzWydwcm9wZXJ0aWVzJ107XG5cdFx0cHVibGljIGFic3RyYWN0IHByb3BlcnRpZXM6IFJlYWRvbmx5PFA+ICYgUmVhZG9ubHk8UHJvamVjdG9yUHJvcGVydGllcz47XG5cblx0XHRjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xuXHRcdFx0c3VwZXIoLi4uYXJncyk7XG5cblx0XHRcdHRoaXMuX3Byb2plY3Rpb25PcHRpb25zID0ge1xuXHRcdFx0XHR0cmFuc2l0aW9uczogY3NzVHJhbnNpdGlvbnNcblx0XHRcdH07XG5cblx0XHRcdHRoaXMucm9vdCA9IGRvY3VtZW50LmJvZHk7XG5cdFx0XHR0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuRGV0YWNoZWQ7XG5cdFx0fVxuXG5cdFx0cHVibGljIGFwcGVuZChyb290PzogRWxlbWVudCk6IEhhbmRsZSB7XG5cdFx0XHRjb25zdCBvcHRpb25zID0ge1xuXHRcdFx0XHR0eXBlOiBBdHRhY2hUeXBlLkFwcGVuZCxcblx0XHRcdFx0cm9vdFxuXHRcdFx0fTtcblxuXHRcdFx0cmV0dXJuIHRoaXMuX2F0dGFjaChvcHRpb25zKTtcblx0XHR9XG5cblx0XHRwdWJsaWMgbWVyZ2Uocm9vdD86IEVsZW1lbnQpOiBIYW5kbGUge1xuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHtcblx0XHRcdFx0dHlwZTogQXR0YWNoVHlwZS5NZXJnZSxcblx0XHRcdFx0cm9vdFxuXHRcdFx0fTtcblxuXHRcdFx0cmV0dXJuIHRoaXMuX2F0dGFjaChvcHRpb25zKTtcblx0XHR9XG5cblx0XHRwdWJsaWMgc2V0IHJvb3Qocm9vdDogRWxlbWVudCkge1xuXHRcdFx0aWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjaGFuZ2Ugcm9vdCBlbGVtZW50Jyk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9yb290ID0gcm9vdDtcblx0XHR9XG5cblx0XHRwdWJsaWMgZ2V0IHJvb3QoKTogRWxlbWVudCB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fcm9vdDtcblx0XHR9XG5cblx0XHRwdWJsaWMgZ2V0IGFzeW5jKCk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2FzeW5jO1xuXHRcdH1cblxuXHRcdHB1YmxpYyBzZXQgYXN5bmMoYXN5bmM6IGJvb2xlYW4pIHtcblx0XHRcdGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBhbHJlYWR5IGF0dGFjaGVkLCBjYW5ub3QgY2hhbmdlIGFzeW5jIG1vZGUnKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2FzeW5jID0gYXN5bmM7XG5cdFx0fVxuXG5cdFx0cHVibGljIHNhbmRib3goZG9jOiBEb2N1bWVudCA9IGRvY3VtZW50KTogdm9pZCB7XG5cdFx0XHRpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNyZWF0ZSBzYW5kYm94Jyk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9hc3luYyA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgcHJldmlvdXNSb290ID0gdGhpcy5yb290O1xuXG5cdFx0XHQvKiBmcmVlIHVwIHRoZSBkb2N1bWVudCBmcmFnbWVudCBmb3IgR0MgKi9cblx0XHRcdHRoaXMub3duKHtcblx0XHRcdFx0ZGVzdHJveTogKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3Jvb3QgPSBwcmV2aW91c1Jvb3Q7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLl9hdHRhY2goe1xuXHRcdFx0XHQvKiBEb2N1bWVudEZyYWdtZW50IGlzIG5vdCBhc3NpZ25hYmxlIHRvIEVsZW1lbnQsIGJ1dCBwcm92aWRlcyBldmVyeXRoaW5nIG5lZWRlZCB0byB3b3JrICovXG5cdFx0XHRcdHJvb3Q6IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkgYXMgYW55LFxuXHRcdFx0XHR0eXBlOiBBdHRhY2hUeXBlLkFwcGVuZFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cHVibGljIHNldENoaWxkcmVuKGNoaWxkcmVuOiBETm9kZVtdKTogdm9pZCB7XG5cdFx0XHR0aGlzLl9fc2V0Q2hpbGRyZW5fXyhjaGlsZHJlbik7XG5cdFx0fVxuXG5cdFx0cHVibGljIHNldFByb3BlcnRpZXMocHJvcGVydGllczogdGhpc1sncHJvcGVydGllcyddKTogdm9pZCB7XG5cdFx0XHR0aGlzLl9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xuXHRcdH1cblxuXHRcdHB1YmxpYyBfX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzOiB0aGlzWydwcm9wZXJ0aWVzJ10pOiB2b2lkIHtcblx0XHRcdGlmICh0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzICYmIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkgIT09IHByb3BlcnRpZXMucmVnaXN0cnkpIHtcblx0XHRcdFx0aWYgKHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkpIHtcblx0XHRcdFx0XHR0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5LmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyA9IGFzc2lnbih7fSwgcHJvcGVydGllcyk7XG5cdFx0XHRzdXBlci5fX3NldENvcmVQcm9wZXJ0aWVzX18oeyBiaW5kOiB0aGlzLCBiYXNlUmVnaXN0cnk6IHByb3BlcnRpZXMucmVnaXN0cnkgfSk7XG5cdFx0XHRzdXBlci5fX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzKTtcblx0XHR9XG5cblx0XHRwdWJsaWMgdG9IdG1sKCk6IHN0cmluZyB7XG5cdFx0XHRpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSAhPT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQgfHwgIXRoaXMuX3Byb2plY3Rpb24pIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgaXMgbm90IGF0dGFjaGVkLCBjYW5ub3QgcmV0dXJuIGFuIEhUTUwgc3RyaW5nIG9mIHByb2plY3Rpb24uJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gKHRoaXMuX3Byb2plY3Rpb24uZG9tTm9kZS5jaGlsZE5vZGVzWzBdIGFzIEVsZW1lbnQpLm91dGVySFRNTDtcblx0XHR9XG5cblx0XHRAYWZ0ZXJSZW5kZXIoKVxuXHRcdHB1YmxpYyBhZnRlclJlbmRlcihyZXN1bHQ6IEROb2RlKSB7XG5cdFx0XHRsZXQgbm9kZSA9IHJlc3VsdDtcblx0XHRcdGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyB8fCByZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bm9kZSA9IHYoJ3NwYW4nLCB7fSwgW3Jlc3VsdF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9XG5cblx0XHRwdWJsaWMgZGVzdHJveSgpIHtcblx0XHRcdHN1cGVyLmRlc3Ryb3koKTtcblx0XHR9XG5cblx0XHRwcml2YXRlIF9hdHRhY2goeyB0eXBlLCByb290IH06IEF0dGFjaE9wdGlvbnMpOiBIYW5kbGUge1xuXHRcdFx0aWYgKHJvb3QpIHtcblx0XHRcdFx0dGhpcy5yb290ID0gcm9vdDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX2F0dGFjaEhhbmRsZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fYXR0YWNoSGFuZGxlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQ7XG5cblx0XHRcdGNvbnN0IGhhbmRsZSA9IHtcblx0XHRcdFx0ZGVzdHJveTogKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fcHJvamVjdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdHRoaXMucHJvamVjdG9yU3RhdGUgPSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5EZXRhY2hlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdHRoaXMub3duKGhhbmRsZSk7XG5cdFx0XHR0aGlzLl9hdHRhY2hIYW5kbGUgPSBoYW5kbGU7XG5cblx0XHRcdHRoaXMuX3Byb2plY3Rpb25PcHRpb25zID0geyAuLi50aGlzLl9wcm9qZWN0aW9uT3B0aW9ucywgLi4ueyBzeW5jOiAhdGhpcy5fYXN5bmMgfSB9O1xuXG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0Y2FzZSBBdHRhY2hUeXBlLkFwcGVuZDpcblx0XHRcdFx0XHR0aGlzLl9wcm9qZWN0aW9uID0gZG9tLmFwcGVuZCh0aGlzLnJvb3QsIHRoaXMsIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBBdHRhY2hUeXBlLk1lcmdlOlxuXHRcdFx0XHRcdHRoaXMuX3Byb2plY3Rpb24gPSBkb20ubWVyZ2UodGhpcy5yb290LCB0aGlzLCB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLl9hdHRhY2hIYW5kbGU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFByb2plY3Rvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvamVjdG9yTWl4aW47XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gUHJvamVjdG9yLnRzIiwiaW1wb3J0IHsgQ29uc3RydWN0b3IsIFdpZGdldFByb3BlcnRpZXMsIFN1cHBvcnRlZENsYXNzTmFtZSB9IGZyb20gJy4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZWdpc3RyeSB9IGZyb20gJy4vLi4vUmVnaXN0cnknO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICcuLy4uL0luamVjdG9yJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9pbmplY3QnO1xuaW1wb3J0IHsgV2lkZ2V0QmFzZSB9IGZyb20gJy4vLi4vV2lkZ2V0QmFzZSc7XG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0b3IgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yJztcbmltcG9ydCB7IGRpZmZQcm9wZXJ0eSB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9kaWZmUHJvcGVydHknO1xuaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJy4vLi4vZGlmZic7XG5cbi8qKlxuICogQSBsb29rdXAgb2JqZWN0IGZvciBhdmFpbGFibGUgY2xhc3MgbmFtZXNcbiAqL1xuZXhwb3J0IHR5cGUgQ2xhc3NOYW1lcyA9IHtcblx0W2tleTogc3RyaW5nXTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBBIGxvb2t1cCBvYmplY3QgZm9yIGF2YWlsYWJsZSB3aWRnZXQgY2xhc3NlcyBuYW1lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lIHtcblx0W2tleTogc3RyaW5nXTogb2JqZWN0O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIHRoZSBUaGVtZWQgbWl4aW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZWRQcm9wZXJ0aWVzPFQgPSBDbGFzc05hbWVzPiBleHRlbmRzIFdpZGdldFByb3BlcnRpZXMge1xuXHRpbmplY3RlZFRoZW1lPzogYW55O1xuXHR0aGVtZT86IFRoZW1lO1xuXHRleHRyYUNsYXNzZXM/OiB7IFtQIGluIGtleW9mIFRdPzogc3RyaW5nIH07XG59XG5cbmNvbnN0IFRIRU1FX0tFWSA9ICcgX2tleSc7XG5cbmV4cG9ydCBjb25zdCBJTkpFQ1RFRF9USEVNRV9LRVkgPSBTeW1ib2woJ3RoZW1lJyk7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciB0aGUgVGhlbWVkTWl4aW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZWRNaXhpbjxUID0gQ2xhc3NOYW1lcz4ge1xuXHR0aGVtZShjbGFzc2VzOiBTdXBwb3J0ZWRDbGFzc05hbWUpOiBTdXBwb3J0ZWRDbGFzc05hbWU7XG5cdHRoZW1lKGNsYXNzZXM6IFN1cHBvcnRlZENsYXNzTmFtZVtdKTogU3VwcG9ydGVkQ2xhc3NOYW1lW107XG5cdHByb3BlcnRpZXM6IFRoZW1lZFByb3BlcnRpZXM8VD47XG59XG5cbi8qKlxuICogRGVjb3JhdG9yIGZvciBiYXNlIGNzcyBjbGFzc2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aGVtZSh0aGVtZToge30pIHtcblx0cmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0KSA9PiB7XG5cdFx0dGFyZ2V0LmFkZERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycsIHRoZW1lKTtcblx0fSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJldmVyc2UgbG9va3VwIGZvciB0aGUgY2xhc3NlcyBwYXNzZWQgaW4gdmlhIHRoZSBgdGhlbWVgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBjbGFzc2VzIFRoZSBiYXNlQ2xhc3NlcyBvYmplY3RcbiAqIEByZXF1aXJlc1xuICovXG5mdW5jdGlvbiBjcmVhdGVUaGVtZUNsYXNzZXNMb29rdXAoY2xhc3NlczogQ2xhc3NOYW1lc1tdKTogQ2xhc3NOYW1lcyB7XG5cdHJldHVybiBjbGFzc2VzLnJlZHVjZShcblx0XHQoY3VycmVudENsYXNzTmFtZXMsIGJhc2VDbGFzcykgPT4ge1xuXHRcdFx0T2JqZWN0LmtleXMoYmFzZUNsYXNzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjdXJyZW50Q2xhc3NOYW1lc1tiYXNlQ2xhc3Nba2V5XV0gPSBrZXk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBjdXJyZW50Q2xhc3NOYW1lcztcblx0XHR9LFxuXHRcdDxDbGFzc05hbWVzPnt9XG5cdCk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBpcyBnaXZlbiBhIHRoZW1lIGFuZCBhbiBvcHRpb25hbCByZWdpc3RyeSwgdGhlIHRoZW1lXG4gKiBpbmplY3RvciBpcyBkZWZpbmVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIHRoZW1lLlxuICpcbiAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gc2V0XG4gKiBAcGFyYW0gdGhlbWVSZWdpc3RyeSByZWdpc3RyeSB0byBkZWZpbmUgdGhlIHRoZW1lIGluamVjdG9yIGFnYWluc3QuIERlZmF1bHRzXG4gKiB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XG4gKlxuICogQHJldHVybnMgdGhlIHRoZW1lIGluamVjdG9yIHVzZWQgdG8gc2V0IHRoZSB0aGVtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoZW1lOiBhbnksIHRoZW1lUmVnaXN0cnk6IFJlZ2lzdHJ5KTogSW5qZWN0b3Ige1xuXHRjb25zdCB0aGVtZUluamVjdG9yID0gbmV3IEluamVjdG9yKHRoZW1lKTtcblx0dGhlbWVSZWdpc3RyeS5kZWZpbmVJbmplY3RvcihJTkpFQ1RFRF9USEVNRV9LRVksIChpbnZhbGlkYXRvcikgPT4ge1xuXHRcdHRoZW1lSW5qZWN0b3Iuc2V0SW52YWxpZGF0b3IoaW52YWxpZGF0b3IpO1xuXHRcdHJldHVybiAoKSA9PiB0aGVtZUluamVjdG9yLmdldCgpO1xuXHR9KTtcblx0cmV0dXJuIHRoZW1lSW5qZWN0b3I7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhc3MgZGVjb3JhdGVkIHdpdGggd2l0aCBUaGVtZWQgZnVuY3Rpb25hbGl0eVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBUaGVtZWRNaXhpbjxFLCBUIGV4dGVuZHMgQ29uc3RydWN0b3I8V2lkZ2V0QmFzZTxUaGVtZWRQcm9wZXJ0aWVzPEU+Pj4+KFxuXHRCYXNlOiBUXG4pOiBDb25zdHJ1Y3RvcjxUaGVtZWRNaXhpbjxFPj4gJiBUIHtcblx0QGluamVjdCh7XG5cdFx0bmFtZTogSU5KRUNURURfVEhFTUVfS0VZLFxuXHRcdGdldFByb3BlcnRpZXM6ICh0aGVtZTogVGhlbWUsIHByb3BlcnRpZXM6IFRoZW1lZFByb3BlcnRpZXMpOiBUaGVtZWRQcm9wZXJ0aWVzID0+IHtcblx0XHRcdGlmICghcHJvcGVydGllcy50aGVtZSkge1xuXHRcdFx0XHRyZXR1cm4geyB0aGVtZSB9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblx0fSlcblx0YWJzdHJhY3QgY2xhc3MgVGhlbWVkIGV4dGVuZHMgQmFzZSB7XG5cdFx0cHVibGljIGFic3RyYWN0IHByb3BlcnRpZXM6IFRoZW1lZFByb3BlcnRpZXM8RT47XG5cblx0XHQvKipcblx0XHQgKiBUaGUgVGhlbWVkIGJhc2VDbGFzc2VzXG5cdFx0ICovXG5cdFx0cHJpdmF0ZSBfcmVnaXN0ZXJlZEJhc2VUaGVtZTogQ2xhc3NOYW1lcyB8IHVuZGVmaW5lZDtcblxuXHRcdC8qKlxuXHRcdCAqIFJlZ2lzdGVyZWQgYmFzZSB0aGVtZSBrZXlzXG5cdFx0ICovXG5cdFx0cHJpdmF0ZSBfcmVnaXN0ZXJlZEJhc2VUaGVtZUtleXM6IHN0cmluZ1tdID0gW107XG5cblx0XHQvKipcblx0XHQgKiBSZXZlcnNlIGxvb2t1cCBvZiB0aGUgdGhlbWUgY2xhc3Nlc1xuXHRcdCAqL1xuXHRcdHByaXZhdGUgX2Jhc2VUaGVtZUNsYXNzZXNSZXZlcnNlTG9va3VwOiBDbGFzc05hbWVzIHwgdW5kZWZpbmVkO1xuXG5cdFx0LyoqXG5cdFx0ICogSW5kaWNhdGVzIGlmIGNsYXNzZXMgbWV0YSBkYXRhIG5lZWQgdG8gYmUgY2FsY3VsYXRlZC5cblx0XHQgKi9cblx0XHRwcml2YXRlIF9yZWNhbGN1bGF0ZUNsYXNzZXMgPSB0cnVlO1xuXG5cdFx0LyoqXG5cdFx0ICogTG9hZGVkIHRoZW1lXG5cdFx0ICovXG5cdFx0cHJpdmF0ZSBfdGhlbWU6IENsYXNzTmFtZXMgPSB7fTtcblxuXHRcdHB1YmxpYyB0aGVtZShjbGFzc2VzOiBTdXBwb3J0ZWRDbGFzc05hbWUpOiBTdXBwb3J0ZWRDbGFzc05hbWU7XG5cdFx0cHVibGljIHRoZW1lKGNsYXNzZXM6IFN1cHBvcnRlZENsYXNzTmFtZVtdKTogU3VwcG9ydGVkQ2xhc3NOYW1lW107XG5cdFx0cHVibGljIHRoZW1lKGNsYXNzZXM6IFN1cHBvcnRlZENsYXNzTmFtZSB8IFN1cHBvcnRlZENsYXNzTmFtZVtdKTogU3VwcG9ydGVkQ2xhc3NOYW1lIHwgU3VwcG9ydGVkQ2xhc3NOYW1lW10ge1xuXHRcdFx0aWYgKHRoaXMuX3JlY2FsY3VsYXRlQ2xhc3Nlcykge1xuXHRcdFx0XHR0aGlzLl9yZWNhbGN1bGF0ZVRoZW1lQ2xhc3NlcygpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoY2xhc3NlcykpIHtcblx0XHRcdFx0cmV0dXJuIGNsYXNzZXMubWFwKChjbGFzc05hbWUpID0+IHRoaXMuX2dldFRoZW1lQ2xhc3MoY2xhc3NOYW1lKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0VGhlbWVDbGFzcyhjbGFzc2VzKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBGdW5jdGlvbiBmaXJlZCB3aGVuIGB0aGVtZWAgb3IgYGV4dHJhQ2xhc3Nlc2AgYXJlIGNoYW5nZWQuXG5cdFx0ICovXG5cdFx0QGRpZmZQcm9wZXJ0eSgndGhlbWUnLCBzaGFsbG93KVxuXHRcdEBkaWZmUHJvcGVydHkoJ2V4dHJhQ2xhc3NlcycsIHNoYWxsb3cpXG5cdFx0cHJvdGVjdGVkIG9uUHJvcGVydGllc0NoYW5nZWQoKSB7XG5cdFx0XHR0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHByaXZhdGUgX2dldFRoZW1lQ2xhc3MoY2xhc3NOYW1lOiBTdXBwb3J0ZWRDbGFzc05hbWUpOiBTdXBwb3J0ZWRDbGFzc05hbWUge1xuXHRcdFx0aWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkIHx8IGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gY2xhc3NOYW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBleHRyYUNsYXNzZXMgPSB0aGlzLnByb3BlcnRpZXMuZXh0cmFDbGFzc2VzIHx8ICh7fSBhcyBhbnkpO1xuXHRcdFx0Y29uc3QgdGhlbWVDbGFzc05hbWUgPSB0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cCFbY2xhc3NOYW1lXTtcblx0XHRcdGxldCByZXN1bHRDbGFzc05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0aWYgKCF0aGVtZUNsYXNzTmFtZSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oYENsYXNzIG5hbWU6ICcke2NsYXNzTmFtZX0nIG5vdCBmb3VuZCBpbiB0aGVtZWApO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pIHtcblx0XHRcdFx0cmVzdWx0Q2xhc3NOYW1lcy5wdXNoKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKSB7XG5cdFx0XHRcdHJlc3VsdENsYXNzTmFtZXMucHVzaCh0aGlzLl90aGVtZVt0aGVtZUNsYXNzTmFtZV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0Q2xhc3NOYW1lcy5wdXNoKHRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUhW3RoZW1lQ2xhc3NOYW1lXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0Q2xhc3NOYW1lcy5qb2luKCcgJyk7XG5cdFx0fVxuXG5cdFx0cHJpdmF0ZSBfcmVjYWxjdWxhdGVUaGVtZUNsYXNzZXMoKSB7XG5cdFx0XHRjb25zdCB7IHRoZW1lID0ge30gfSA9IHRoaXMucHJvcGVydGllcztcblx0XHRcdGNvbnN0IGJhc2VUaGVtZXMgPSB0aGlzLmdldERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycpO1xuXHRcdFx0aWYgKCF0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lKSB7XG5cdFx0XHRcdHRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUgPSBiYXNlVGhlbWVzLnJlZHVjZSgoZmluYWxCYXNlVGhlbWUsIGJhc2VUaGVtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgW1RIRU1FX0tFWV06IGtleSwgLi4uY2xhc3NlcyB9ID0gYmFzZVRoZW1lO1xuXHRcdFx0XHRcdHRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWVLZXlzLnB1c2goa2V5KTtcblx0XHRcdFx0XHRyZXR1cm4geyAuLi5maW5hbEJhc2VUaGVtZSwgLi4uY2xhc3NlcyB9O1xuXHRcdFx0XHR9LCB7fSk7XG5cdFx0XHRcdHRoaXMuX2Jhc2VUaGVtZUNsYXNzZXNSZXZlcnNlTG9va3VwID0gY3JlYXRlVGhlbWVDbGFzc2VzTG9va3VwKGJhc2VUaGVtZXMpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl90aGVtZSA9IHRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWVLZXlzLnJlZHVjZSgoYmFzZVRoZW1lLCB0aGVtZUtleSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4geyAuLi5iYXNlVGhlbWUsIC4uLnRoZW1lW3RoZW1lS2V5XSB9O1xuXHRcdFx0fSwge30pO1xuXG5cdFx0XHR0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gVGhlbWVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUaGVtZWRNaXhpbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBUaGVtZWQudHMiLCJpbXBvcnQgeyBXaWRnZXRCYXNlLCBub0JpbmQgfSBmcm9tICcuL1dpZGdldEJhc2UnO1xuaW1wb3J0IHsgUHJvamVjdG9yTWl4aW4gfSBmcm9tICcuL21peGlucy9Qcm9qZWN0b3InO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJ0Bkb2pvL3NoaW0vYXJyYXknO1xuaW1wb3J0IHsgdywgZG9tIH0gZnJvbSAnLi9kJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnQGRvam8vc2hpbS9nbG9iYWwnO1xuaW1wb3J0IHsgcmVnaXN0ZXJUaGVtZUluamVjdG9yIH0gZnJvbSAnLi9taXhpbnMvVGhlbWVkJztcbmltcG9ydCB7IGFsd2F5c1JlbmRlciB9IGZyb20gJy4vZGVjb3JhdG9ycy9hbHdheXNSZW5kZXInO1xuXG5leHBvcnQgZW51bSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlIHtcblx0RE9KTyA9ICdET0pPJyxcblx0Tk9ERSA9ICdOT0RFJyxcblx0VEVYVCA9ICdURVhUJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRG9tVG9XaWRnZXRXcmFwcGVyKGRvbU5vZGU6IEhUTUxFbGVtZW50KTogYW55IHtcblx0QGFsd2F5c1JlbmRlcigpXG5cdGNsYXNzIERvbVRvV2lkZ2V0V3JhcHBlciBleHRlbmRzIFdpZGdldEJhc2U8YW55PiB7XG5cdFx0cHJvdGVjdGVkIHJlbmRlcigpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpLnJlZHVjZShcblx0XHRcdFx0KHByb3BzLCBrZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG5cdFx0XHRcdFx0aWYgKGtleS5pbmRleE9mKCdvbicpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRrZXkgPSBgX18ke2tleX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwcm9wc1trZXldID0gdmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3BzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7fSBhcyBhbnlcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gZG9tKHsgbm9kZTogZG9tTm9kZSwgcHJvcHM6IHByb3BlcnRpZXMsIGRpZmZUeXBlOiAnZG9tJyB9KTtcblx0XHR9XG5cblx0XHRzdGF0aWMgZ2V0IGRvbU5vZGUoKSB7XG5cdFx0XHRyZXR1cm4gZG9tTm9kZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gRG9tVG9XaWRnZXRXcmFwcGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKGRlc2NyaXB0b3I6IGFueSwgV2lkZ2V0Q29uc3RydWN0b3I6IGFueSk6IGFueSB7XG5cdGNvbnN0IHsgYXR0cmlidXRlcywgY2hpbGRUeXBlLCByZWdpc3RyeUZhY3RvcnkgfSA9IGRlc2NyaXB0b3I7XG5cdGNvbnN0IGF0dHJpYnV0ZU1hcDogYW55ID0ge307XG5cblx0YXR0cmlidXRlcy5mb3JFYWNoKChwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRhdHRyaWJ1dGVNYXBbYXR0cmlidXRlTmFtZV0gPSBwcm9wZXJ0eU5hbWU7XG5cdH0pO1xuXG5cdHJldHVybiBjbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50IHtcblx0XHRwcml2YXRlIF9wcm9qZWN0b3I6IGFueTtcblx0XHRwcml2YXRlIF9wcm9wZXJ0aWVzOiBhbnkgPSB7fTtcblx0XHRwcml2YXRlIF9jaGlsZHJlbjogYW55W10gPSBbXTtcblx0XHRwcml2YXRlIF9ldmVudFByb3BlcnRpZXM6IGFueSA9IHt9O1xuXHRcdHByaXZhdGUgX2luaXRpYWxpc2VkID0gZmFsc2U7XG5cblx0XHRwdWJsaWMgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0XHRpZiAodGhpcy5faW5pdGlhbGlzZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkb21Qcm9wZXJ0aWVzOiBhbnkgPSB7fTtcblx0XHRcdGNvbnN0IHsgYXR0cmlidXRlcywgcHJvcGVydGllcywgZXZlbnRzIH0gPSBkZXNjcmlwdG9yO1xuXG5cdFx0XHR0aGlzLl9wcm9wZXJ0aWVzID0geyAuLi50aGlzLl9wcm9wZXJ0aWVzLCAuLi50aGlzLl9hdHRyaWJ1dGVzVG9Qcm9wZXJ0aWVzKGF0dHJpYnV0ZXMpIH07XG5cblx0XHRcdFsuLi5hdHRyaWJ1dGVzLCAuLi5wcm9wZXJ0aWVzXS5mb3JFYWNoKChwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9ICh0aGlzIGFzIGFueSlbcHJvcGVydHlOYW1lXTtcblx0XHRcdFx0Y29uc3QgZmlsdGVyZWRQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJ19fJyk7XG5cdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZmlsdGVyZWRQcm9wZXJ0eU5hbWUgIT09IHByb3BlcnR5TmFtZSkge1xuXHRcdFx0XHRcdGRvbVByb3BlcnRpZXNbZmlsdGVyZWRQcm9wZXJ0eU5hbWVdID0ge1xuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB0aGlzLl9nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpLFxuXHRcdFx0XHRcdFx0c2V0OiAodmFsdWU6IGFueSkgPT4gdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSlcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZG9tUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0ge1xuXHRcdFx0XHRcdGdldDogKCkgPT4gdGhpcy5fZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSxcblx0XHRcdFx0XHRzZXQ6ICh2YWx1ZTogYW55KSA9PiB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cblx0XHRcdGV2ZW50cy5mb3JFYWNoKChwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudE5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJycpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdGNvbnN0IGZpbHRlcmVkUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnJlcGxhY2UoL15vbi8sICdfX29uJyk7XG5cblx0XHRcdFx0ZG9tUHJvcGVydGllc1tmaWx0ZXJlZFByb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB0aGlzLl9nZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG5cdFx0XHRcdFx0c2V0OiAodmFsdWU6IGFueSkgPT4gdGhpcy5fc2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHRoaXMuX2V2ZW50UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSAoLi4uYXJnczogYW55W10pID0+IHtcblx0XHRcdFx0XHRjb25zdCBldmVudENhbGxiYWNrID0gdGhpcy5fZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgZXZlbnRDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0ZXZlbnRDYWxsYmFjayguLi5hcmdzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5kaXNwYXRjaEV2ZW50KFxuXHRcdFx0XHRcdFx0bmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwge1xuXHRcdFx0XHRcdFx0XHRidWJibGVzOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0ZGV0YWlsOiBhcmdzXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywgZG9tUHJvcGVydGllcyk7XG5cblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLlRFWFQgPyB0aGlzLmNoaWxkTm9kZXMgOiB0aGlzLmNoaWxkcmVuO1xuXG5cdFx0XHRmcm9tKGNoaWxkcmVuKS5mb3JFYWNoKChjaGlsZE5vZGU6IE5vZGUpID0+IHtcblx0XHRcdFx0aWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XG5cdFx0XHRcdFx0Y2hpbGROb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtcmVuZGVyJywgKCkgPT4gdGhpcy5fcmVuZGVyKCkpO1xuXHRcdFx0XHRcdGNoaWxkTm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLWNvbm5lY3RlZCcsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcblx0XHRcdFx0XHR0aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihjaGlsZE5vZGUgYXMgSFRNTEVsZW1lbnQpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9jaGlsZHJlbi5wdXNoKGRvbSh7IG5vZGU6IGNoaWxkTm9kZSBhcyBIVE1MRWxlbWVudCwgZGlmZlR5cGU6ICdkb20nIH0pKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1jb25uZWN0ZWQnLCAoZTogYW55KSA9PiB0aGlzLl9jaGlsZENvbm5lY3RlZChlKSk7XG5cblx0XHRcdGNvbnN0IHdpZGdldFByb3BlcnRpZXMgPSB0aGlzLl9wcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3QgcmVuZGVyQ2hpbGRyZW4gPSAoKSA9PiB0aGlzLl9fY2hpbGRyZW5fXygpO1xuXHRcdFx0Y29uc3QgV3JhcHBlciA9IGNsYXNzIGV4dGVuZHMgV2lkZ2V0QmFzZSB7XG5cdFx0XHRcdHJlbmRlcigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdyhXaWRnZXRDb25zdHJ1Y3Rvciwgd2lkZ2V0UHJvcGVydGllcywgcmVuZGVyQ2hpbGRyZW4oKSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCByZWdpc3RyeSA9IHJlZ2lzdHJ5RmFjdG9yeSgpO1xuXHRcdFx0Y29uc3QgdGhlbWVDb250ZXh0ID0gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoaXMuX2dldFRoZW1lKCksIHJlZ2lzdHJ5KTtcblx0XHRcdGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdkb2pvLXRoZW1lLXNldCcsICgpID0+IHRoZW1lQ29udGV4dC5zZXQodGhpcy5fZ2V0VGhlbWUoKSkpO1xuXHRcdFx0Y29uc3QgUHJvamVjdG9yID0gUHJvamVjdG9yTWl4aW4oV3JhcHBlcik7XG5cdFx0XHR0aGlzLl9wcm9qZWN0b3IgPSBuZXcgUHJvamVjdG9yKCk7XG5cdFx0XHR0aGlzLl9wcm9qZWN0b3Iuc2V0UHJvcGVydGllcyh7IHJlZ2lzdHJ5IH0pO1xuXHRcdFx0dGhpcy5fcHJvamVjdG9yLmFwcGVuZCh0aGlzKTtcblxuXHRcdFx0dGhpcy5faW5pdGlhbGlzZWQgPSB0cnVlO1xuXHRcdFx0dGhpcy5kaXNwYXRjaEV2ZW50KFxuXHRcdFx0XHRuZXcgQ3VzdG9tRXZlbnQoJ2Rvam8tY2UtY29ubmVjdGVkJywge1xuXHRcdFx0XHRcdGJ1YmJsZXM6IHRydWUsXG5cdFx0XHRcdFx0ZGV0YWlsOiB0aGlzXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHByaXZhdGUgX2dldFRoZW1lKCkge1xuXHRcdFx0aWYgKGdsb2JhbCAmJiBnbG9iYWwuZG9qb2NlICYmIGdsb2JhbC5kb2pvY2UudGhlbWUpIHtcblx0XHRcdFx0cmV0dXJuIGdsb2JhbC5kb2pvY2UudGhlbWVzW2dsb2JhbC5kb2pvY2UudGhlbWVdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHByaXZhdGUgX2NoaWxkQ29ubmVjdGVkKGU6IGFueSkge1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGUuZGV0YWlsO1xuXHRcdFx0aWYgKG5vZGUucGFyZW50Tm9kZSA9PT0gdGhpcykge1xuXHRcdFx0XHRjb25zdCBleGlzdHMgPSB0aGlzLl9jaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gY2hpbGQuZG9tTm9kZSA9PT0gbm9kZSk7XG5cdFx0XHRcdGlmICghZXhpc3RzKSB7XG5cdFx0XHRcdFx0bm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLXJlbmRlcicsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcblx0XHRcdFx0XHR0aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihub2RlKSk7XG5cdFx0XHRcdFx0dGhpcy5fcmVuZGVyKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRwcml2YXRlIF9yZW5kZXIoKSB7XG5cdFx0XHRpZiAodGhpcy5fcHJvamVjdG9yKSB7XG5cdFx0XHRcdHRoaXMuX3Byb2plY3Rvci5pbnZhbGlkYXRlKCk7XG5cdFx0XHRcdHRoaXMuZGlzcGF0Y2hFdmVudChcblx0XHRcdFx0XHRuZXcgQ3VzdG9tRXZlbnQoJ2Rvam8tY2UtcmVuZGVyJywge1xuXHRcdFx0XHRcdFx0YnViYmxlczogZmFsc2UsXG5cdFx0XHRcdFx0XHRkZXRhaWw6IHRoaXNcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHB1YmxpYyBfX3Byb3BlcnRpZXNfXygpIHtcblx0XHRcdHJldHVybiB7IC4uLnRoaXMuX3Byb3BlcnRpZXMsIC4uLnRoaXMuX2V2ZW50UHJvcGVydGllcyB9O1xuXHRcdH1cblxuXHRcdHB1YmxpYyBfX2NoaWxkcmVuX18oKSB7XG5cdFx0XHRpZiAoY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8pIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2NoaWxkcmVuLmZpbHRlcigoQ2hpbGQpID0+IENoaWxkLmRvbU5vZGUuaXNXaWRnZXQpLm1hcCgoQ2hpbGQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgZG9tTm9kZSB9ID0gQ2hpbGQ7XG5cdFx0XHRcdFx0cmV0dXJuIHcoQ2hpbGQsIHsgLi4uZG9tTm9kZS5fX3Byb3BlcnRpZXNfXygpIH0sIFsuLi5kb21Ob2RlLl9fY2hpbGRyZW5fXygpXSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHB1YmxpYyBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZTogc3RyaW5nLCBvbGRWYWx1ZTogc3RyaW5nIHwgbnVsbCwgdmFsdWU6IHN0cmluZyB8IG51bGwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IGF0dHJpYnV0ZU1hcFtuYW1lXTtcblx0XHRcdHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpO1xuXHRcdH1cblxuXHRcdHByaXZhdGUgX3NldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblx0XHRcdHRoaXMuX2V2ZW50UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0cHJpdmF0ZSBfZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2V2ZW50UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdH1cblxuXHRcdHByaXZhdGUgX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cdFx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHZhbHVlW25vQmluZF0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG5cdFx0XHR0aGlzLl9yZW5kZXIoKTtcblx0XHR9XG5cblx0XHRwcml2YXRlIF9nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHR9XG5cblx0XHRwcml2YXRlIF9hdHRyaWJ1dGVzVG9Qcm9wZXJ0aWVzKGF0dHJpYnV0ZXM6IHN0cmluZ1tdKSB7XG5cdFx0XHRyZXR1cm4gYXR0cmlidXRlcy5yZWR1Y2UoKHByb3BlcnRpZXM6IGFueSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXHRcdFx0XHRpZiAodmFsdWUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcHJvcGVydGllcztcblx0XHRcdH0sIHt9KTtcblx0XHR9XG5cblx0XHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRcdHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYXApO1xuXHRcdH1cblxuXHRcdHB1YmxpYyBnZXQgaXNXaWRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcihXaWRnZXRDb25zdHJ1Y3RvcjogYW55KTogdm9pZCB7XG5cdGNvbnN0IGRlc2NyaXB0b3IgPSBXaWRnZXRDb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgV2lkZ2V0Q29uc3RydWN0b3IucHJvdG90eXBlLl9fY3VzdG9tRWxlbWVudERlc2NyaXB0b3I7XG5cblx0aWYgKCFkZXNjcmlwdG9yKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J0Nhbm5vdCBnZXQgZGVzY3JpcHRvciBmb3IgQ3VzdG9tIEVsZW1lbnQsIGhhdmUgeW91IGFkZGVkIHRoZSBAY3VzdG9tRWxlbWVudCBkZWNvcmF0b3IgdG8geW91ciBXaWRnZXQ/J1xuXHRcdCk7XG5cdH1cblxuXHRnbG9iYWwuY3VzdG9tRWxlbWVudHMuZGVmaW5lKGRlc2NyaXB0b3IudGFnTmFtZSwgY3JlYXRlKGRlc2NyaXB0b3IsIFdpZGdldENvbnN0cnVjdG9yKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlZ2lzdGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudC50cyIsImltcG9ydCBnbG9iYWwgZnJvbSAnQGRvam8vc2hpbS9nbG9iYWwnO1xuaW1wb3J0IHtcblx0Q29yZVByb3BlcnRpZXMsXG5cdERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLFxuXHRETm9kZSxcblx0Vk5vZGUsXG5cdFdOb2RlLFxuXHRQcm9qZWN0aW9uT3B0aW9ucyxcblx0UHJvamVjdGlvbixcblx0U3VwcG9ydGVkQ2xhc3NOYW1lLFxuXHRUcmFuc2l0aW9uU3RyYXRlZ3ksXG5cdFZOb2RlUHJvcGVydGllc1xufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZnJvbSBhcyBhcnJheUZyb20gfSBmcm9tICdAZG9qby9zaGltL2FycmF5JztcbmltcG9ydCB7IGlzV05vZGUsIGlzVk5vZGUsIGlzRG9tVk5vZGUsIFZOT0RFLCBXTk9ERSB9IGZyb20gJy4vZCc7XG5pbXBvcnQgeyBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvciB9IGZyb20gJy4vUmVnaXN0cnknO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnQGRvam8vc2hpbS9XZWFrTWFwJztcbmltcG9ydCBOb2RlSGFuZGxlciBmcm9tICcuL05vZGVIYW5kbGVyJztcbmltcG9ydCBSZWdpc3RyeUhhbmRsZXIgZnJvbSAnLi9SZWdpc3RyeUhhbmRsZXInO1xuXG5jb25zdCBOQU1FU1BBQ0VfVzMgPSAnaHR0cDovL3d3dy53My5vcmcvJztcbmNvbnN0IE5BTUVTUEFDRV9TVkcgPSBOQU1FU1BBQ0VfVzMgKyAnMjAwMC9zdmcnO1xuY29uc3QgTkFNRVNQQUNFX1hMSU5LID0gTkFNRVNQQUNFX1czICsgJzE5OTkveGxpbmsnO1xuXG5jb25zdCBlbXB0eUFycmF5OiAoSW50ZXJuYWxXTm9kZSB8IEludGVybmFsVk5vZGUpW10gPSBbXTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyUmVzdWx0ID0gRE5vZGU8YW55PiB8IEROb2RlPGFueT5bXTtcblxuaW50ZXJmYWNlIEluc3RhbmNlTWFwRGF0YSB7XG5cdHBhcmVudFZOb2RlOiBJbnRlcm5hbFZOb2RlO1xuXHRkbm9kZTogSW50ZXJuYWxXTm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbFdOb2RlIGV4dGVuZHMgV05vZGU8RGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2U+IHtcblx0LyoqXG5cdCAqIFRoZSBpbnN0YW5jZSBvZiB0aGUgd2lkZ2V0XG5cdCAqL1xuXHRpbnN0YW5jZTogRGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2U7XG5cblx0LyoqXG5cdCAqIFRoZSByZW5kZXJlZCBETm9kZXMgZnJvbSB0aGUgaW5zdGFuY2Vcblx0ICovXG5cdHJlbmRlcmVkOiBJbnRlcm5hbEROb2RlW107XG5cblx0LyoqXG5cdCAqIENvcmUgcHJvcGVydGllcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSB3aWRnZXQgY29yZSBzeXN0ZW1cblx0ICovXG5cdGNvcmVQcm9wZXJ0aWVzOiBDb3JlUHJvcGVydGllcztcblxuXHQvKipcblx0ICogQ2hpbGRyZW4gZm9yIHRoZSBXTm9kZVxuXHQgKi9cblx0Y2hpbGRyZW46IEludGVybmFsRE5vZGVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbFZOb2RlIGV4dGVuZHMgVk5vZGUge1xuXHQvKipcblx0ICogQ2hpbGRyZW4gZm9yIHRoZSBWTm9kZVxuXHQgKi9cblx0Y2hpbGRyZW4/OiBJbnRlcm5hbEROb2RlW107XG5cblx0aW5zZXJ0ZWQ/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBCYWcgdXNlZCB0byBzdGlsbCBkZWNvcmF0ZSBwcm9wZXJ0aWVzIG9uIGEgZGVmZXJyZWQgcHJvcGVydGllcyBjYWxsYmFja1xuXHQgKi9cblx0ZGVjb3JhdGVkRGVmZXJyZWRQcm9wZXJ0aWVzPzogVk5vZGVQcm9wZXJ0aWVzO1xuXG5cdC8qKlxuXHQgKiBET00gZWxlbWVudFxuXHQgKi9cblx0ZG9tTm9kZT86IEVsZW1lbnQgfCBUZXh0O1xufVxuXG5leHBvcnQgdHlwZSBJbnRlcm5hbEROb2RlID0gSW50ZXJuYWxWTm9kZSB8IEludGVybmFsV05vZGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUXVldWUge1xuXHRpbnN0YW5jZTogRGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2U7XG5cdGRlcHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0RGF0YSB7XG5cdG9uRGV0YWNoOiAoKSA9PiB2b2lkO1xuXHRvbkF0dGFjaDogKCkgPT4gdm9pZDtcblx0ZGlydHk6IGJvb2xlYW47XG5cdHJlZ2lzdHJ5OiAoKSA9PiBSZWdpc3RyeUhhbmRsZXI7XG5cdG5vZGVIYW5kbGVyOiBOb2RlSGFuZGxlcjtcblx0Y29yZVByb3BlcnRpZXM6IENvcmVQcm9wZXJ0aWVzO1xuXHRpbnZhbGlkYXRlPzogRnVuY3Rpb247XG5cdHJlbmRlcmluZzogYm9vbGVhbjtcblx0aW5wdXRQcm9wZXJ0aWVzOiBhbnk7XG59XG5cbmludGVyZmFjZSBQcm9qZWN0b3JTdGF0ZSB7XG5cdGRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzOiBGdW5jdGlvbltdO1xuXHRhZnRlclJlbmRlckNhbGxiYWNrczogRnVuY3Rpb25bXTtcblx0bm9kZU1hcDogV2Vha01hcDxOb2RlLCBXZWFrTWFwPEZ1bmN0aW9uLCBFdmVudExpc3RlbmVyPj47XG5cdHJlbmRlclNjaGVkdWxlZD86IG51bWJlcjtcblx0cmVuZGVyUXVldWU6IFJlbmRlclF1ZXVlW107XG5cdG1lcmdlOiBib29sZWFuO1xuXHRtZXJnZUVsZW1lbnQ/OiBOb2RlO1xufVxuXG5leHBvcnQgY29uc3Qgd2lkZ2V0SW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcDxhbnksIFdpZGdldERhdGE+KCk7XG5cbmNvbnN0IGluc3RhbmNlTWFwID0gbmV3IFdlYWtNYXA8RGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2UsIEluc3RhbmNlTWFwRGF0YT4oKTtcbmNvbnN0IHByb2plY3RvclN0YXRlTWFwID0gbmV3IFdlYWtNYXA8RGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2UsIFByb2plY3RvclN0YXRlPigpO1xuXG5mdW5jdGlvbiBzYW1lKGRub2RlMTogSW50ZXJuYWxETm9kZSwgZG5vZGUyOiBJbnRlcm5hbEROb2RlKSB7XG5cdGlmIChpc1ZOb2RlKGRub2RlMSkgJiYgaXNWTm9kZShkbm9kZTIpKSB7XG5cdFx0aWYgKGlzRG9tVk5vZGUoZG5vZGUxKSB8fCBpc0RvbVZOb2RlKGRub2RlMikpIHtcblx0XHRcdGlmIChkbm9kZTEuZG9tTm9kZSAhPT0gZG5vZGUyLmRvbU5vZGUpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoZG5vZGUxLnRhZyAhPT0gZG5vZGUyLnRhZykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZG5vZGUxLnByb3BlcnRpZXMua2V5ICE9PSBkbm9kZTIucHJvcGVydGllcy5rZXkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoaXNXTm9kZShkbm9kZTEpICYmIGlzV05vZGUoZG5vZGUyKSkge1xuXHRcdGlmIChkbm9kZTEuaW5zdGFuY2UgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZG5vZGUyLndpZGdldENvbnN0cnVjdG9yID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZG5vZGUxLndpZGdldENvbnN0cnVjdG9yICE9PSBkbm9kZTIud2lkZ2V0Q29uc3RydWN0b3IpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGRub2RlMS5wcm9wZXJ0aWVzLmtleSAhPT0gZG5vZGUyLnByb3BlcnRpZXMua2V5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuY29uc3QgbWlzc2luZ1RyYW5zaXRpb24gPSBmdW5jdGlvbigpIHtcblx0dGhyb3cgbmV3IEVycm9yKCdQcm92aWRlIGEgdHJhbnNpdGlvbnMgb2JqZWN0IHRvIHRoZSBwcm9qZWN0aW9uT3B0aW9ucyB0byBkbyBhbmltYXRpb25zJyk7XG59O1xuXG5mdW5jdGlvbiBnZXRQcm9qZWN0aW9uT3B0aW9ucyhcblx0cHJvamVjdG9yT3B0aW9uczogUGFydGlhbDxQcm9qZWN0aW9uT3B0aW9ucz4sXG5cdHByb2plY3Rvckluc3RhbmNlOiBEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZVxuKTogUHJvamVjdGlvbk9wdGlvbnMge1xuXHRjb25zdCBkZWZhdWx0czogUGFydGlhbDxQcm9qZWN0aW9uT3B0aW9ucz4gPSB7XG5cdFx0bmFtZXNwYWNlOiB1bmRlZmluZWQsXG5cdFx0c3R5bGVBcHBseWVyOiBmdW5jdGlvbihkb21Ob2RlOiBIVE1MRWxlbWVudCwgc3R5bGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcblx0XHRcdChkb21Ob2RlLnN0eWxlIGFzIGFueSlbc3R5bGVOYW1lXSA9IHZhbHVlO1xuXHRcdH0sXG5cdFx0dHJhbnNpdGlvbnM6IHtcblx0XHRcdGVudGVyOiBtaXNzaW5nVHJhbnNpdGlvbixcblx0XHRcdGV4aXQ6IG1pc3NpbmdUcmFuc2l0aW9uXG5cdFx0fSxcblx0XHRkZXB0aDogMCxcblx0XHRtZXJnZTogZmFsc2UsXG5cdFx0c3luYzogZmFsc2UsXG5cdFx0cHJvamVjdG9ySW5zdGFuY2Vcblx0fTtcblx0cmV0dXJuIHsgLi4uZGVmYXVsdHMsIC4uLnByb2plY3Rvck9wdGlvbnMgfSBhcyBQcm9qZWN0aW9uT3B0aW9ucztcbn1cblxuZnVuY3Rpb24gY2hlY2tTdHlsZVZhbHVlKHN0eWxlVmFsdWU6IE9iamVjdCkge1xuXHRpZiAodHlwZW9mIHN0eWxlVmFsdWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdTdHlsZSB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzJyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRXZlbnQoXG5cdGRvbU5vZGU6IE5vZGUsXG5cdGV2ZW50TmFtZTogc3RyaW5nLFxuXHRjdXJyZW50VmFsdWU6IEZ1bmN0aW9uLFxuXHRwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnMsXG5cdGJpbmQ6IGFueSxcblx0cHJldmlvdXNWYWx1ZT86IEZ1bmN0aW9uXG4pIHtcblx0Y29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpITtcblx0Y29uc3QgZXZlbnRNYXAgPSBwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLmdldChkb21Ob2RlKSB8fCBuZXcgV2Vha01hcCgpO1xuXG5cdGlmIChwcmV2aW91c1ZhbHVlKSB7XG5cdFx0Y29uc3QgcHJldmlvdXNFdmVudCA9IGV2ZW50TWFwLmdldChwcmV2aW91c1ZhbHVlKTtcblx0XHRkb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBwcmV2aW91c0V2ZW50KTtcblx0fVxuXG5cdGxldCBjYWxsYmFjayA9IGN1cnJlbnRWYWx1ZS5iaW5kKGJpbmQpO1xuXG5cdGlmIChldmVudE5hbWUgPT09ICdpbnB1dCcpIHtcblx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgZXZ0OiBFdmVudCkge1xuXHRcdFx0Y3VycmVudFZhbHVlLmNhbGwodGhpcywgZXZ0KTtcblx0XHRcdChldnQudGFyZ2V0IGFzIGFueSlbJ29uaW5wdXQtdmFsdWUnXSA9IChldnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuXHRcdH0uYmluZChiaW5kKTtcblx0fVxuXG5cdGRvbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKTtcblx0ZXZlbnRNYXAuc2V0KGN1cnJlbnRWYWx1ZSwgY2FsbGJhY2spO1xuXHRwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLnNldChkb21Ob2RlLCBldmVudE1hcCk7XG59XG5cbmZ1bmN0aW9uIGFkZENsYXNzZXMoZG9tTm9kZTogRWxlbWVudCwgY2xhc3NlczogU3VwcG9ydGVkQ2xhc3NOYW1lKSB7XG5cdGlmIChjbGFzc2VzKSB7XG5cdFx0Y29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGRvbU5vZGUuY2xhc3NMaXN0LmFkZChjbGFzc05hbWVzW2ldKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlOiBFbGVtZW50LCBjbGFzc2VzOiBTdXBwb3J0ZWRDbGFzc05hbWUpIHtcblx0aWYgKGNsYXNzZXMpIHtcblx0XHRjb25zdCBjbGFzc05hbWVzID0gY2xhc3Nlcy5zcGxpdCgnICcpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0ZG9tTm9kZS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZXNbaV0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBidWlsZFByZXZpb3VzUHJvcGVydGllcyhkb21Ob2RlOiBhbnksIHByZXZpb3VzOiBJbnRlcm5hbFZOb2RlLCBjdXJyZW50OiBJbnRlcm5hbFZOb2RlKSB7XG5cdGNvbnN0IHsgZGlmZlR5cGUsIHByb3BlcnRpZXMsIGF0dHJpYnV0ZXMgfSA9IGN1cnJlbnQ7XG5cdGlmICghZGlmZlR5cGUgfHwgZGlmZlR5cGUgPT09ICd2ZG9tJykge1xuXHRcdHJldHVybiB7IHByb3BlcnRpZXM6IHByZXZpb3VzLnByb3BlcnRpZXMsIGF0dHJpYnV0ZXM6IHByZXZpb3VzLmF0dHJpYnV0ZXMsIGV2ZW50czogcHJldmlvdXMuZXZlbnRzIH07XG5cdH0gZWxzZSBpZiAoZGlmZlR5cGUgPT09ICdub25lJykge1xuXHRcdHJldHVybiB7IHByb3BlcnRpZXM6IHt9LCBhdHRyaWJ1dGVzOiBwcmV2aW91cy5hdHRyaWJ1dGVzID8ge30gOiB1bmRlZmluZWQsIGV2ZW50czogcHJldmlvdXMuZXZlbnRzIH07XG5cdH1cblx0bGV0IG5ld1Byb3BlcnRpZXM6IGFueSA9IHtcblx0XHRwcm9wZXJ0aWVzOiB7fVxuXHR9O1xuXHRpZiAoYXR0cmlidXRlcykge1xuXHRcdG5ld1Byb3BlcnRpZXMuYXR0cmlidXRlcyA9IHt9O1xuXHRcdG5ld1Byb3BlcnRpZXMuZXZlbnRzID0gcHJldmlvdXMuZXZlbnRzO1xuXHRcdE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG5cdFx0XHRuZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXNbcHJvcE5hbWVdID0gZG9tTm9kZVtwcm9wTmFtZV07XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaCgoYXR0ck5hbWUpID0+IHtcblx0XHRcdG5ld1Byb3BlcnRpZXMuYXR0cmlidXRlc1thdHRyTmFtZV0gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZShhdHRyTmFtZSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG5ld1Byb3BlcnRpZXM7XG5cdH1cblx0bmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykucmVkdWNlKFxuXHRcdChwcm9wcywgcHJvcGVydHkpID0+IHtcblx0XHRcdHByb3BzW3Byb3BlcnR5XSA9IGRvbU5vZGUuZ2V0QXR0cmlidXRlKHByb3BlcnR5KSB8fCBkb21Ob2RlW3Byb3BlcnR5XTtcblx0XHRcdHJldHVybiBwcm9wcztcblx0XHR9LFxuXHRcdHt9IGFzIGFueVxuXHQpO1xuXHRyZXR1cm4gbmV3UHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gZm9jdXNOb2RlKHByb3BWYWx1ZTogYW55LCBwcmV2aW91c1ZhbHVlOiBhbnksIGRvbU5vZGU6IEVsZW1lbnQsIHByb2plY3Rpb25PcHRpb25zOiBQcm9qZWN0aW9uT3B0aW9ucyk6IHZvaWQge1xuXHRsZXQgcmVzdWx0O1xuXHRpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJlc3VsdCA9IHByb3BWYWx1ZSgpO1xuXHR9IGVsc2Uge1xuXHRcdHJlc3VsdCA9IHByb3BWYWx1ZSAmJiAhcHJldmlvdXNWYWx1ZTtcblx0fVxuXHRpZiAocmVzdWx0ID09PSB0cnVlKSB7XG5cdFx0Y29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpITtcblx0XHRwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcblx0XHRcdChkb21Ob2RlIGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU9ycGhhbmVkRXZlbnRzKFxuXHRkb21Ob2RlOiBFbGVtZW50LFxuXHRwcmV2aW91c1Byb3BlcnRpZXM6IFZOb2RlUHJvcGVydGllcyxcblx0cHJvcGVydGllczogVk5vZGVQcm9wZXJ0aWVzLFxuXHRwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnMsXG5cdG9ubHlFdmVudHM6IGJvb2xlYW4gPSBmYWxzZVxuKSB7XG5cdGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKSE7XG5cdGNvbnN0IGV2ZW50TWFwID0gcHJvamVjdG9yU3RhdGUubm9kZU1hcC5nZXQoZG9tTm9kZSk7XG5cdGlmIChldmVudE1hcCkge1xuXHRcdE9iamVjdC5rZXlzKHByZXZpb3VzUHJvcGVydGllcykuZm9yRWFjaCgocHJvcE5hbWUpID0+IHtcblx0XHRcdGNvbnN0IGlzRXZlbnQgPSBwcm9wTmFtZS5zdWJzdHIoMCwgMikgPT09ICdvbicgfHwgb25seUV2ZW50cztcblx0XHRcdGNvbnN0IGV2ZW50TmFtZSA9IG9ubHlFdmVudHMgPyBwcm9wTmFtZSA6IHByb3BOYW1lLnN1YnN0cigyKTtcblx0XHRcdGlmIChpc0V2ZW50ICYmICFwcm9wZXJ0aWVzW3Byb3BOYW1lXSkge1xuXHRcdFx0XHRjb25zdCBldmVudENhbGxiYWNrID0gZXZlbnRNYXAuZ2V0KHByZXZpb3VzUHJvcGVydGllc1twcm9wTmFtZV0pO1xuXHRcdFx0XHRpZiAoZXZlbnRDYWxsYmFjaykge1xuXHRcdFx0XHRcdGRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlKGRvbU5vZGU6IEVsZW1lbnQsIGF0dHJOYW1lOiBzdHJpbmcsIGF0dHJWYWx1ZTogc3RyaW5nLCBwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnMpIHtcblx0aWYgKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSA9PT0gTkFNRVNQQUNFX1NWRyAmJiBhdHRyTmFtZSA9PT0gJ2hyZWYnKSB7XG5cdFx0ZG9tTm9kZS5zZXRBdHRyaWJ1dGVOUyhOQU1FU1BBQ0VfWExJTkssIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuXHR9IGVsc2UgaWYgKChhdHRyTmFtZSA9PT0gJ3JvbGUnICYmIGF0dHJWYWx1ZSA9PT0gJycpIHx8IGF0dHJWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZG9tTm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuXHR9IGVsc2Uge1xuXHRcdGRvbU5vZGUuc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZXMoXG5cdGRvbU5vZGU6IEVsZW1lbnQsXG5cdHByZXZpb3VzQXR0cmlidXRlczogeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB9LFxuXHRhdHRyaWJ1dGVzOiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdHByb2plY3Rpb25PcHRpb25zOiBQcm9qZWN0aW9uT3B0aW9uc1xuKSB7XG5cdGNvbnN0IGF0dHJOYW1lcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpO1xuXHRjb25zdCBhdHRyQ291bnQgPSBhdHRyTmFtZXMubGVuZ3RoO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJDb3VudDsgaSsrKSB7XG5cdFx0Y29uc3QgYXR0ck5hbWUgPSBhdHRyTmFtZXNbaV07XG5cdFx0Y29uc3QgYXR0clZhbHVlID0gYXR0cmlidXRlc1thdHRyTmFtZV07XG5cdFx0Y29uc3QgcHJldmlvdXNBdHRyVmFsdWUgPSBwcmV2aW91c0F0dHJpYnV0ZXNbYXR0ck5hbWVdO1xuXHRcdGlmIChhdHRyVmFsdWUgIT09IHByZXZpb3VzQXR0clZhbHVlKSB7XG5cdFx0XHR1cGRhdGVBdHRyaWJ1dGUoZG9tTm9kZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKFxuXHRkb21Ob2RlOiBFbGVtZW50LFxuXHRwcmV2aW91c1Byb3BlcnRpZXM6IFZOb2RlUHJvcGVydGllcyxcblx0cHJvcGVydGllczogVk5vZGVQcm9wZXJ0aWVzLFxuXHRwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnMsXG5cdGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcyA9IHRydWVcbikge1xuXHRsZXQgcHJvcGVydGllc1VwZGF0ZWQgPSBmYWxzZTtcblx0Y29uc3QgcHJvcE5hbWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyk7XG5cdGNvbnN0IHByb3BDb3VudCA9IHByb3BOYW1lcy5sZW5ndGg7XG5cdGlmIChwcm9wTmFtZXMuaW5kZXhPZignY2xhc3NlcycpID09PSAtMSAmJiBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcykge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRyZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzW2ldKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcyk7XG5cdFx0fVxuXHR9XG5cblx0aW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzICYmIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcENvdW50OyBpKyspIHtcblx0XHRjb25zdCBwcm9wTmFtZSA9IHByb3BOYW1lc1tpXTtcblx0XHRsZXQgcHJvcFZhbHVlID0gcHJvcGVydGllc1twcm9wTmFtZV07XG5cdFx0Y29uc3QgcHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzUHJvcGVydGllcyFbcHJvcE5hbWVdO1xuXHRcdGlmIChwcm9wTmFtZSA9PT0gJ2NsYXNzZXMnKSB7XG5cdFx0XHRjb25zdCBwcmV2aW91c0NsYXNzZXMgPSBBcnJheS5pc0FycmF5KHByZXZpb3VzVmFsdWUpID8gcHJldmlvdXNWYWx1ZSA6IFtwcmV2aW91c1ZhbHVlXTtcblx0XHRcdGNvbnN0IGN1cnJlbnRDbGFzc2VzID0gQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpID8gcHJvcFZhbHVlIDogW3Byb3BWYWx1ZV07XG5cdFx0XHRpZiAocHJldmlvdXNDbGFzc2VzICYmIHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGlmICghcHJvcFZhbHVlIHx8IHByb3BWYWx1ZS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0cmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c0NsYXNzZXNbaV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBuZXdDbGFzc2VzOiAobnVsbCB8IHVuZGVmaW5lZCB8IHN0cmluZylbXSA9IFsuLi5jdXJyZW50Q2xhc3Nlc107XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c0NsYXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzQ2xhc3NOYW1lID0gcHJldmlvdXNDbGFzc2VzW2ldO1xuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzQ2xhc3NOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNsYXNzSW5kZXggPSBuZXdDbGFzc2VzLmluZGV4T2YocHJldmlvdXNDbGFzc05hbWUpO1xuXHRcdFx0XHRcdFx0XHRpZiAoY2xhc3NJbmRleCA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRyZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzQ2xhc3NOYW1lKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRuZXdDbGFzc2VzLnNwbGljZShjbGFzc0luZGV4LCAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5ld0NsYXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGFkZENsYXNzZXMoZG9tTm9kZSwgbmV3Q2xhc3Nlc1tpXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0YWRkQ2xhc3Nlcyhkb21Ob2RlLCBjdXJyZW50Q2xhc3Nlc1tpXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHByb3BOYW1lID09PSAnZm9jdXMnKSB7XG5cdFx0XHRmb2N1c05vZGUocHJvcFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBkb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0fSBlbHNlIGlmIChwcm9wTmFtZSA9PT0gJ3N0eWxlcycpIHtcblx0XHRcdGNvbnN0IHN0eWxlTmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wVmFsdWUpO1xuXHRcdFx0Y29uc3Qgc3R5bGVDb3VudCA9IHN0eWxlTmFtZXMubGVuZ3RoO1xuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBzdHlsZUNvdW50OyBqKyspIHtcblx0XHRcdFx0Y29uc3Qgc3R5bGVOYW1lID0gc3R5bGVOYW1lc1tqXTtcblx0XHRcdFx0Y29uc3QgbmV3U3R5bGVWYWx1ZSA9IHByb3BWYWx1ZVtzdHlsZU5hbWVdO1xuXHRcdFx0XHRjb25zdCBvbGRTdHlsZVZhbHVlID0gcHJldmlvdXNWYWx1ZSAmJiBwcmV2aW91c1ZhbHVlW3N0eWxlTmFtZV07XG5cdFx0XHRcdGlmIChuZXdTdHlsZVZhbHVlID09PSBvbGRTdHlsZVZhbHVlKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cHJvcGVydGllc1VwZGF0ZWQgPSB0cnVlO1xuXHRcdFx0XHRpZiAobmV3U3R5bGVWYWx1ZSkge1xuXHRcdFx0XHRcdGNoZWNrU3R5bGVWYWx1ZShuZXdTdHlsZVZhbHVlKTtcblx0XHRcdFx0XHRwcm9qZWN0aW9uT3B0aW9ucy5zdHlsZUFwcGx5ZXIhKGRvbU5vZGUgYXMgSFRNTEVsZW1lbnQsIHN0eWxlTmFtZSwgbmV3U3R5bGVWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cHJvamVjdGlvbk9wdGlvbnMuc3R5bGVBcHBseWVyIShkb21Ob2RlIGFzIEhUTUxFbGVtZW50LCBzdHlsZU5hbWUsICcnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXByb3BWYWx1ZSAmJiB0eXBlb2YgcHJldmlvdXNWYWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0cHJvcFZhbHVlID0gJyc7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcE5hbWUgPT09ICd2YWx1ZScpIHtcblx0XHRcdFx0Y29uc3QgZG9tVmFsdWUgPSAoZG9tTm9kZSBhcyBhbnkpW3Byb3BOYW1lXTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGRvbVZhbHVlICE9PSBwcm9wVmFsdWUgJiZcblx0XHRcdFx0XHQoKGRvbU5vZGUgYXMgYW55KVsnb25pbnB1dC12YWx1ZSddXG5cdFx0XHRcdFx0XHQ/IGRvbVZhbHVlID09PSAoZG9tTm9kZSBhcyBhbnkpWydvbmlucHV0LXZhbHVlJ11cblx0XHRcdFx0XHRcdDogcHJvcFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQoZG9tTm9kZSBhcyBhbnkpW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcblx0XHRcdFx0XHQoZG9tTm9kZSBhcyBhbnkpWydvbmlucHV0LXZhbHVlJ10gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkge1xuXHRcdFx0XHRcdHByb3BlcnRpZXNVcGRhdGVkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChwcm9wTmFtZSAhPT0gJ2tleScgJiYgcHJvcFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSB7XG5cdFx0XHRcdGNvbnN0IHR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wTmFtZS5sYXN0SW5kZXhPZignb24nLCAwKSA9PT0gMCAmJiBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0XHR1cGRhdGVFdmVudChcblx0XHRcdFx0XHRcdGRvbU5vZGUsXG5cdFx0XHRcdFx0XHRwcm9wTmFtZS5zdWJzdHIoMiksXG5cdFx0XHRcdFx0XHRwcm9wVmFsdWUsXG5cdFx0XHRcdFx0XHRwcm9qZWN0aW9uT3B0aW9ucyxcblx0XHRcdFx0XHRcdHByb3BlcnRpZXMuYmluZCxcblx0XHRcdFx0XHRcdHByZXZpb3VzVmFsdWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHByb3BOYW1lICE9PSAnaW5uZXJIVE1MJyAmJiBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0XHR1cGRhdGVBdHRyaWJ1dGUoZG9tTm9kZSwgcHJvcE5hbWUsIHByb3BWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHByb3BOYW1lID09PSAnc2Nyb2xsTGVmdCcgfHwgcHJvcE5hbWUgPT09ICdzY3JvbGxUb3AnKSB7XG5cdFx0XHRcdFx0aWYgKChkb21Ob2RlIGFzIGFueSlbcHJvcE5hbWVdICE9PSBwcm9wVmFsdWUpIHtcblx0XHRcdFx0XHRcdChkb21Ob2RlIGFzIGFueSlbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoZG9tTm9kZSBhcyBhbnkpW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wZXJ0aWVzVXBkYXRlZDtcbn1cblxuZnVuY3Rpb24gZmluZEluZGV4T2ZDaGlsZChjaGlsZHJlbjogSW50ZXJuYWxETm9kZVtdLCBzYW1lQXM6IEludGVybmFsRE5vZGUsIHN0YXJ0OiBudW1iZXIpIHtcblx0Zm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoc2FtZShjaGlsZHJlbltpXSwgc2FtZUFzKSkge1xuXHRcdFx0cmV0dXJuIGk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUGFyZW50Vk5vZGUoZG9tTm9kZTogRWxlbWVudCk6IEludGVybmFsVk5vZGUge1xuXHRyZXR1cm4ge1xuXHRcdHRhZzogJycsXG5cdFx0cHJvcGVydGllczoge30sXG5cdFx0Y2hpbGRyZW46IHVuZGVmaW5lZCxcblx0XHRkb21Ob2RlLFxuXHRcdHR5cGU6IFZOT0RFXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RleHRWTm9kZShkYXRhOiBhbnkpOiBJbnRlcm5hbFZOb2RlIHtcblx0cmV0dXJuIHtcblx0XHR0YWc6ICcnLFxuXHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdGNoaWxkcmVuOiB1bmRlZmluZWQsXG5cdFx0dGV4dDogYCR7ZGF0YX1gLFxuXHRcdGRvbU5vZGU6IHVuZGVmaW5lZCxcblx0XHR0eXBlOiBWTk9ERVxuXHR9O1xufVxuXG5mdW5jdGlvbiB0b0ludGVybmFsV05vZGUoaW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLCBpbnN0YW5jZURhdGE6IFdpZGdldERhdGEpOiBJbnRlcm5hbFdOb2RlIHtcblx0cmV0dXJuIHtcblx0XHRpbnN0YW5jZSxcblx0XHRyZW5kZXJlZDogW10sXG5cdFx0Y29yZVByb3BlcnRpZXM6IGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcyxcblx0XHRjaGlsZHJlbjogaW5zdGFuY2UuY2hpbGRyZW4gYXMgYW55LFxuXHRcdHdpZGdldENvbnN0cnVjdG9yOiBpbnN0YW5jZS5jb25zdHJ1Y3RvciBhcyBhbnksXG5cdFx0cHJvcGVydGllczogaW5zdGFuY2VEYXRhLmlucHV0UHJvcGVydGllcyxcblx0XHR0eXBlOiBXTk9ERVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihcblx0Y2hpbGRyZW46IHVuZGVmaW5lZCB8IEROb2RlIHwgRE5vZGVbXSxcblx0aW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlXG4pOiBJbnRlcm5hbEROb2RlW10ge1xuXHRpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBlbXB0eUFycmF5O1xuXHR9XG5cdGNoaWxkcmVuID0gQXJyYXkuaXNBcnJheShjaGlsZHJlbikgPyBjaGlsZHJlbiA6IFtjaGlsZHJlbl07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICkge1xuXHRcdGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV0gYXMgSW50ZXJuYWxETm9kZTtcblx0XHRpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCB8fCBjaGlsZCA9PT0gbnVsbCkge1xuXHRcdFx0Y2hpbGRyZW4uc3BsaWNlKGksIDEpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRjaGlsZHJlbltpXSA9IHRvVGV4dFZOb2RlKGNoaWxkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGlzVk5vZGUoY2hpbGQpKSB7XG5cdFx0XHRcdGlmIChjaGlsZC5wcm9wZXJ0aWVzLmJpbmQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdChjaGlsZC5wcm9wZXJ0aWVzIGFzIGFueSkuYmluZCA9IGluc3RhbmNlO1xuXHRcdFx0XHRcdGlmIChjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBpbnN0YW5jZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoIWNoaWxkLmNvcmVQcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKSE7XG5cdFx0XHRcdFx0Y2hpbGQuY29yZVByb3BlcnRpZXMgPSB7XG5cdFx0XHRcdFx0XHRiaW5kOiBpbnN0YW5jZSxcblx0XHRcdFx0XHRcdGJhc2VSZWdpc3RyeTogaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJhc2VSZWdpc3RyeVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBpbnN0YW5jZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aSsrO1xuXHR9XG5cdHJldHVybiBjaGlsZHJlbiBhcyBJbnRlcm5hbEROb2RlW107XG59XG5cbmZ1bmN0aW9uIG5vZGVBZGRlZChkbm9kZTogSW50ZXJuYWxETm9kZSwgdHJhbnNpdGlvbnM6IFRyYW5zaXRpb25TdHJhdGVneSkge1xuXHRpZiAoaXNWTm9kZShkbm9kZSkgJiYgZG5vZGUucHJvcGVydGllcykge1xuXHRcdGNvbnN0IGVudGVyQW5pbWF0aW9uID0gZG5vZGUucHJvcGVydGllcy5lbnRlckFuaW1hdGlvbjtcblx0XHRpZiAoZW50ZXJBbmltYXRpb24pIHtcblx0XHRcdGlmICh0eXBlb2YgZW50ZXJBbmltYXRpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0ZW50ZXJBbmltYXRpb24oZG5vZGUuZG9tTm9kZSBhcyBFbGVtZW50LCBkbm9kZS5wcm9wZXJ0aWVzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyYW5zaXRpb25zLmVudGVyKGRub2RlLmRvbU5vZGUgYXMgRWxlbWVudCwgZG5vZGUucHJvcGVydGllcywgZW50ZXJBbmltYXRpb24gYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbm9kZVRvUmVtb3ZlKGRub2RlOiBJbnRlcm5hbEROb2RlLCB0cmFuc2l0aW9uczogVHJhbnNpdGlvblN0cmF0ZWd5LCBwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnMpIHtcblx0aWYgKGlzV05vZGUoZG5vZGUpKSB7XG5cdFx0Y29uc3QgcmVuZGVyZWQgPSBkbm9kZS5yZW5kZXJlZCB8fCBlbXB0eUFycmF5O1xuXHRcdGlmIChkbm9kZS5pbnN0YW5jZSkge1xuXHRcdFx0Y29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGRub2RlLmluc3RhbmNlKSE7XG5cdFx0XHRpbnN0YW5jZURhdGEub25EZXRhY2goKTtcblx0XHRcdGluc3RhbmNlTWFwLmRlbGV0ZShkbm9kZS5pbnN0YW5jZSk7XG5cdFx0fVxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyZWQubGVuZ3RoOyBpKyspIHtcblx0XHRcdG5vZGVUb1JlbW92ZShyZW5kZXJlZFtpXSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGU7XG5cdFx0Y29uc3QgcHJvcGVydGllcyA9IGRub2RlLnByb3BlcnRpZXM7XG5cdFx0aWYgKGRub2RlLmNoaWxkcmVuICYmIGRub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0bm9kZVRvUmVtb3ZlKGRub2RlLmNoaWxkcmVuW2ldLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBleGl0QW5pbWF0aW9uID0gcHJvcGVydGllcy5leGl0QW5pbWF0aW9uO1xuXHRcdGlmIChwcm9wZXJ0aWVzICYmIGV4aXRBbmltYXRpb24pIHtcblx0XHRcdChkb21Ob2RlIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuXHRcdFx0Y29uc3QgcmVtb3ZlRG9tTm9kZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkb21Ob2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZSk7XG5cdFx0XHRcdGRub2RlLmRvbU5vZGUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKHR5cGVvZiBleGl0QW5pbWF0aW9uID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGV4aXRBbmltYXRpb24oZG9tTm9kZSBhcyBFbGVtZW50LCByZW1vdmVEb21Ob2RlLCBwcm9wZXJ0aWVzKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJhbnNpdGlvbnMuZXhpdChkbm9kZS5kb21Ob2RlIGFzIEVsZW1lbnQsIHByb3BlcnRpZXMsIGV4aXRBbmltYXRpb24gYXMgc3RyaW5nLCByZW1vdmVEb21Ob2RlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRkb21Ob2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZSk7XG5cdFx0ZG5vZGUuZG9tTm9kZSA9IHVuZGVmaW5lZDtcblx0fVxufVxuXG5mdW5jdGlvbiBjaGVja0Rpc3Rpbmd1aXNoYWJsZShcblx0Y2hpbGROb2RlczogSW50ZXJuYWxETm9kZVtdLFxuXHRpbmRleFRvQ2hlY2s6IG51bWJlcixcblx0cGFyZW50SW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlXG4pIHtcblx0Y29uc3QgY2hpbGROb2RlID0gY2hpbGROb2Rlc1tpbmRleFRvQ2hlY2tdO1xuXHRpZiAoaXNWTm9kZShjaGlsZE5vZGUpICYmICFjaGlsZE5vZGUudGFnKSB7XG5cdFx0cmV0dXJuOyAvLyBUZXh0IG5vZGVzIG5lZWQgbm90IGJlIGRpc3Rpbmd1aXNoYWJsZVxuXHR9XG5cdGNvbnN0IHsga2V5IH0gPSBjaGlsZE5vZGUucHJvcGVydGllcztcblxuXHRpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoaSAhPT0gaW5kZXhUb0NoZWNrKSB7XG5cdFx0XHRcdGNvbnN0IG5vZGUgPSBjaGlsZE5vZGVzW2ldO1xuXHRcdFx0XHRpZiAoc2FtZShub2RlLCBjaGlsZE5vZGUpKSB7XG5cdFx0XHRcdFx0bGV0IG5vZGVJZGVudGlmaWVyOiBzdHJpbmc7XG5cdFx0XHRcdFx0Y29uc3QgcGFyZW50TmFtZSA9IChwYXJlbnRJbnN0YW5jZSBhcyBhbnkpLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ3Vua25vd24nO1xuXHRcdFx0XHRcdGlmIChpc1dOb2RlKGNoaWxkTm9kZSkpIHtcblx0XHRcdFx0XHRcdG5vZGVJZGVudGlmaWVyID0gKGNoaWxkTm9kZS53aWRnZXRDb25zdHJ1Y3RvciBhcyBhbnkpLm5hbWUgfHwgJ3Vua25vd24nO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRub2RlSWRlbnRpZmllciA9IGNoaWxkTm9kZS50YWc7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKFxuXHRcdFx0XHRcdFx0YEEgd2lkZ2V0ICgke3BhcmVudE5hbWV9KSBoYXMgaGFkIGEgY2hpbGQgYWRkZGVkIG9yIHJlbW92ZWQsIGJ1dCB0aGV5IHdlcmUgbm90IGFibGUgdG8gdW5pcXVlbHkgaWRlbnRpZmllZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gcHJvdmlkZSBhIHVuaXF1ZSAna2V5JyBwcm9wZXJ0eSB3aGVuIHVzaW5nIHRoZSBzYW1lIHdpZGdldCBvciBlbGVtZW50ICgke25vZGVJZGVudGlmaWVyfSkgbXVsdGlwbGUgdGltZXMgYXMgc2libGluZ3NgXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDaGlsZHJlbihcblx0cGFyZW50Vk5vZGU6IEludGVybmFsVk5vZGUsXG5cdG9sZENoaWxkcmVuOiBJbnRlcm5hbEROb2RlW10sXG5cdG5ld0NoaWxkcmVuOiBJbnRlcm5hbEROb2RlW10sXG5cdHBhcmVudEluc3RhbmNlOiBEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZSxcblx0cHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zXG4pIHtcblx0b2xkQ2hpbGRyZW4gPSBvbGRDaGlsZHJlbiB8fCBlbXB0eUFycmF5O1xuXHRuZXdDaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuXHRjb25zdCBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZENoaWxkcmVuLmxlbmd0aDtcblx0Y29uc3QgbmV3Q2hpbGRyZW5MZW5ndGggPSBuZXdDaGlsZHJlbi5sZW5ndGg7XG5cdGNvbnN0IHRyYW5zaXRpb25zID0gcHJvamVjdGlvbk9wdGlvbnMudHJhbnNpdGlvbnMhO1xuXHRjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSkhO1xuXHRwcm9qZWN0aW9uT3B0aW9ucyA9IHsgLi4ucHJvamVjdGlvbk9wdGlvbnMsIGRlcHRoOiBwcm9qZWN0aW9uT3B0aW9ucy5kZXB0aCArIDEgfTtcblx0bGV0IG9sZEluZGV4ID0gMDtcblx0bGV0IG5ld0luZGV4ID0gMDtcblx0bGV0IGk6IG51bWJlcjtcblx0bGV0IHRleHRVcGRhdGVkID0gZmFsc2U7XG5cdHdoaWxlIChuZXdJbmRleCA8IG5ld0NoaWxkcmVuTGVuZ3RoKSB7XG5cdFx0bGV0IG9sZENoaWxkID0gb2xkSW5kZXggPCBvbGRDaGlsZHJlbkxlbmd0aCA/IG9sZENoaWxkcmVuW29sZEluZGV4XSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBuZXdDaGlsZCA9IG5ld0NoaWxkcmVuW25ld0luZGV4XTtcblx0XHRpZiAoaXNWTm9kZShuZXdDaGlsZCkgJiYgdHlwZW9mIG5ld0NoaWxkLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRuZXdDaGlsZC5pbnNlcnRlZCA9IGlzVk5vZGUob2xkQ2hpbGQpICYmIG9sZENoaWxkLmluc2VydGVkO1xuXHRcdFx0YWRkRGVmZXJyZWRQcm9wZXJ0aWVzKG5ld0NoaWxkLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0fVxuXHRcdGlmIChvbGRDaGlsZCAhPT0gdW5kZWZpbmVkICYmIHNhbWUob2xkQ2hpbGQsIG5ld0NoaWxkKSkge1xuXHRcdFx0dGV4dFVwZGF0ZWQgPSB1cGRhdGVEb20ob2xkQ2hpbGQsIG5ld0NoaWxkLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50Vk5vZGUsIHBhcmVudEluc3RhbmNlKSB8fCB0ZXh0VXBkYXRlZDtcblx0XHRcdG9sZEluZGV4Kys7XG5cdFx0XHRuZXdJbmRleCsrO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZmluZE9sZEluZGV4ID0gZmluZEluZGV4T2ZDaGlsZChvbGRDaGlsZHJlbiwgbmV3Q2hpbGQsIG9sZEluZGV4ICsgMSk7XG5cdFx0Y29uc3QgYWRkQ2hpbGQgPSAoKSA9PiB7XG5cdFx0XHRsZXQgaW5zZXJ0QmVmb3JlRG9tTm9kZTogRWxlbWVudCB8IFRleHQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgY2hpbGQ6IEludGVybmFsRE5vZGUgPSBvbGRDaGlsZHJlbltvbGRJbmRleF07XG5cdFx0XHRpZiAoY2hpbGQpIHtcblx0XHRcdFx0bGV0IG5leHRJbmRleCA9IG9sZEluZGV4ICsgMTtcblx0XHRcdFx0bGV0IGluc2VydEJlZm9yZUNoaWxkcmVuID0gW2NoaWxkXTtcblx0XHRcdFx0d2hpbGUgKGluc2VydEJlZm9yZUNoaWxkcmVuLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnN0IGluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZUNoaWxkcmVuLnNoaWZ0KCkhO1xuXHRcdFx0XHRcdGlmIChpc1dOb2RlKGluc2VydEJlZm9yZSkpIHtcblx0XHRcdFx0XHRcdGlmIChpbnNlcnRCZWZvcmUucmVuZGVyZWQpIHtcblx0XHRcdFx0XHRcdFx0aW5zZXJ0QmVmb3JlQ2hpbGRyZW4ucHVzaCguLi5pbnNlcnRCZWZvcmUucmVuZGVyZWQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoaW5zZXJ0QmVmb3JlLmRvbU5vZGUpIHtcblx0XHRcdFx0XHRcdFx0aW5zZXJ0QmVmb3JlRG9tTm9kZSA9IGluc2VydEJlZm9yZS5kb21Ob2RlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGluc2VydEJlZm9yZUNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiBvbGRDaGlsZHJlbltuZXh0SW5kZXhdKSB7XG5cdFx0XHRcdFx0XHRpbnNlcnRCZWZvcmVDaGlsZHJlbi5wdXNoKG9sZENoaWxkcmVuW25leHRJbmRleF0pO1xuXHRcdFx0XHRcdFx0bmV4dEluZGV4Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNyZWF0ZURvbShuZXdDaGlsZCwgcGFyZW50Vk5vZGUsIGluc2VydEJlZm9yZURvbU5vZGUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSk7XG5cdFx0XHRub2RlQWRkZWQobmV3Q2hpbGQsIHRyYW5zaXRpb25zKTtcblx0XHRcdGNvbnN0IGluZGV4VG9DaGVjayA9IG5ld0luZGV4O1xuXHRcdFx0cHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG5cdFx0XHRcdGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG5ld0NoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRpZiAoIW9sZENoaWxkIHx8IGZpbmRPbGRJbmRleCA9PT0gLTEpIHtcblx0XHRcdGFkZENoaWxkKCk7XG5cdFx0XHRuZXdJbmRleCsrO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVtb3ZlQ2hpbGQgPSAoKSA9PiB7XG5cdFx0XHRjb25zdCBpbmRleFRvQ2hlY2sgPSBvbGRJbmRleDtcblx0XHRcdHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuXHRcdFx0XHRjaGVja0Rpc3Rpbmd1aXNoYWJsZShvbGRDaGlsZHJlbiwgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSk7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChpc1dOb2RlKG9sZENoaWxkKSkge1xuXHRcdFx0XHRjb25zdCBpdGVtID0gaW5zdGFuY2VNYXAuZ2V0KG9sZENoaWxkLmluc3RhbmNlKTtcblx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRvbGRDaGlsZCA9IGl0ZW0uZG5vZGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG5vZGVUb1JlbW92ZShvbGRDaGlsZCEsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0fTtcblx0XHRjb25zdCBmaW5kTmV3SW5kZXggPSBmaW5kSW5kZXhPZkNoaWxkKG5ld0NoaWxkcmVuLCBvbGRDaGlsZCwgbmV3SW5kZXggKyAxKTtcblxuXHRcdGlmIChmaW5kTmV3SW5kZXggPT09IC0xKSB7XG5cdFx0XHRyZW1vdmVDaGlsZCgpO1xuXHRcdFx0b2xkSW5kZXgrKztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGFkZENoaWxkKCk7XG5cdFx0cmVtb3ZlQ2hpbGQoKTtcblx0XHRvbGRJbmRleCsrO1xuXHRcdG5ld0luZGV4Kys7XG5cdH1cblx0aWYgKG9sZENoaWxkcmVuTGVuZ3RoID4gb2xkSW5kZXgpIHtcblx0XHQvLyBSZW1vdmUgY2hpbGQgZnJhZ21lbnRzXG5cdFx0Zm9yIChpID0gb2xkSW5kZXg7IGkgPCBvbGRDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpbmRleFRvQ2hlY2sgPSBpO1xuXHRcdFx0cHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG5cdFx0XHRcdGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcblx0XHRcdH0pO1xuXHRcdFx0bGV0IGNoaWxkVG9SZW1vdmUgPSBvbGRDaGlsZHJlbltpXTtcblx0XHRcdGlmIChpc1dOb2RlKGNoaWxkVG9SZW1vdmUpKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSBpbnN0YW5jZU1hcC5nZXQoY2hpbGRUb1JlbW92ZS5pbnN0YW5jZSk7XG5cdFx0XHRcdGlmIChpdGVtKSB7XG5cdFx0XHRcdFx0Y2hpbGRUb1JlbW92ZSA9IGl0ZW0uZG5vZGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG5vZGVUb1JlbW92ZShjaGlsZFRvUmVtb3ZlLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGV4dFVwZGF0ZWQ7XG59XG5cbmZ1bmN0aW9uIGFkZENoaWxkcmVuKFxuXHRwYXJlbnRWTm9kZTogSW50ZXJuYWxWTm9kZSxcblx0Y2hpbGRyZW46IEludGVybmFsRE5vZGVbXSB8IHVuZGVmaW5lZCxcblx0cHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zLFxuXHRwYXJlbnRJbnN0YW5jZTogRGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2UsXG5cdGluc2VydEJlZm9yZTogRWxlbWVudCB8IFRleHQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG5cdGNoaWxkTm9kZXM/OiAoRWxlbWVudCB8IFRleHQpW11cbikge1xuXHRpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKSE7XG5cdGlmIChwcm9qZWN0b3JTdGF0ZS5tZXJnZSAmJiBjaGlsZE5vZGVzID09PSB1bmRlZmluZWQpIHtcblx0XHRjaGlsZE5vZGVzID0gYXJyYXlGcm9tKHBhcmVudFZOb2RlLmRvbU5vZGUhLmNoaWxkTm9kZXMpIGFzIChFbGVtZW50IHwgVGV4dClbXTtcblx0fVxuXHRjb25zdCB0cmFuc2l0aW9ucyA9IHByb2plY3Rpb25PcHRpb25zLnRyYW5zaXRpb25zITtcblx0cHJvamVjdGlvbk9wdGlvbnMgPSB7IC4uLnByb2plY3Rpb25PcHRpb25zLCBkZXB0aDogcHJvamVjdGlvbk9wdGlvbnMuZGVwdGggKyAxIH07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG5cblx0XHRpZiAoaXNWTm9kZShjaGlsZCkpIHtcblx0XHRcdGlmIChwcm9qZWN0b3JTdGF0ZS5tZXJnZSAmJiBjaGlsZE5vZGVzKSB7XG5cdFx0XHRcdGxldCBkb21FbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR3aGlsZSAoY2hpbGQuZG9tTm9kZSA9PT0gdW5kZWZpbmVkICYmIGNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGRvbUVsZW1lbnQgPSBjaGlsZE5vZGVzLnNoaWZ0KCkgYXMgRWxlbWVudDtcblx0XHRcdFx0XHRpZiAoZG9tRWxlbWVudCAmJiBkb21FbGVtZW50LnRhZ05hbWUgPT09IChjaGlsZC50YWcudG9VcHBlckNhc2UoKSB8fCB1bmRlZmluZWQpKSB7XG5cdFx0XHRcdFx0XHRjaGlsZC5kb21Ob2RlID0gZG9tRWxlbWVudDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNyZWF0ZURvbShjaGlsZCwgcGFyZW50Vk5vZGUsIGluc2VydEJlZm9yZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3JlYXRlRG9tKGNoaWxkLCBwYXJlbnRWTm9kZSwgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGNoaWxkTm9kZXMpO1xuXHRcdH1cblx0XHRub2RlQWRkZWQoY2hpbGQsIHRyYW5zaXRpb25zKTtcblx0fVxufVxuXG5mdW5jdGlvbiBpbml0UHJvcGVydGllc0FuZENoaWxkcmVuKFxuXHRkb21Ob2RlOiBFbGVtZW50LFxuXHRkbm9kZTogSW50ZXJuYWxWTm9kZSxcblx0cGFyZW50SW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLFxuXHRwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnNcbikge1xuXHRhZGRDaGlsZHJlbihkbm9kZSwgZG5vZGUuY2hpbGRyZW4sIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgdW5kZWZpbmVkKTtcblx0aWYgKHR5cGVvZiBkbm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyAmJiBkbm9kZS5pbnNlcnRlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0YWRkRGVmZXJyZWRQcm9wZXJ0aWVzKGRub2RlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdH1cblxuXHRpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcblx0XHR1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGUsIHt9LCBkbm9kZS5hdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0dXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCB7fSwgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIGZhbHNlKTtcblx0XHRyZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCB7fSwgZG5vZGUuZXZlbnRzLCBwcm9qZWN0aW9uT3B0aW9ucywgdHJ1ZSk7XG5cdFx0Y29uc3QgZXZlbnRzID0gZG5vZGUuZXZlbnRzO1xuXHRcdE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnQpID0+IHtcblx0XHRcdHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50LCBldmVudHNbZXZlbnRdLCBwcm9qZWN0aW9uT3B0aW9ucywgZG5vZGUucHJvcGVydGllcy5iaW5kKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdH1cblx0aWYgKGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSBudWxsICYmIGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpITtcblx0XHRpbnN0YW5jZURhdGEubm9kZUhhbmRsZXIuYWRkKGRvbU5vZGUgYXMgSFRNTEVsZW1lbnQsIGAke2Rub2RlLnByb3BlcnRpZXMua2V5fWApO1xuXHR9XG5cdGRub2RlLmluc2VydGVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRG9tKFxuXHRkbm9kZTogSW50ZXJuYWxETm9kZSxcblx0cGFyZW50Vk5vZGU6IEludGVybmFsVk5vZGUsXG5cdGluc2VydEJlZm9yZTogRWxlbWVudCB8IFRleHQgfCB1bmRlZmluZWQsXG5cdHByb2plY3Rpb25PcHRpb25zOiBQcm9qZWN0aW9uT3B0aW9ucyxcblx0cGFyZW50SW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLFxuXHRjaGlsZE5vZGVzPzogKEVsZW1lbnQgfCBUZXh0KVtdXG4pIHtcblx0bGV0IGRvbU5vZGU6IEVsZW1lbnQgfCBUZXh0IHwgdW5kZWZpbmVkO1xuXHRjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSkhO1xuXHRpZiAoaXNXTm9kZShkbm9kZSkpIHtcblx0XHRsZXQgeyB3aWRnZXRDb25zdHJ1Y3RvciB9ID0gZG5vZGU7XG5cdFx0Y29uc3QgcGFyZW50SW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKSE7XG5cdFx0aWYgKCFpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcjxEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZT4od2lkZ2V0Q29uc3RydWN0b3IpKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gcGFyZW50SW5zdGFuY2VEYXRhLnJlZ2lzdHJ5KCkuZ2V0PERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlPih3aWRnZXRDb25zdHJ1Y3Rvcik7XG5cdFx0XHRpZiAoaXRlbSA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR3aWRnZXRDb25zdHJ1Y3RvciA9IGl0ZW07XG5cdFx0fVxuXHRcdGNvbnN0IGluc3RhbmNlID0gbmV3IHdpZGdldENvbnN0cnVjdG9yKCk7XG5cdFx0ZG5vZGUuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblx0XHRjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpITtcblx0XHRpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9ICgpID0+IHtcblx0XHRcdGluc3RhbmNlRGF0YS5kaXJ0eSA9IHRydWU7XG5cdFx0XHRpZiAoaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWUucHVzaCh7IGluc3RhbmNlLCBkZXB0aDogcHJvamVjdGlvbk9wdGlvbnMuZGVwdGggfSk7XG5cdFx0XHRcdHNjaGVkdWxlUmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSB0cnVlO1xuXHRcdGluc3RhbmNlLl9fc2V0Q29yZVByb3BlcnRpZXNfXyhkbm9kZS5jb3JlUHJvcGVydGllcyk7XG5cdFx0aW5zdGFuY2UuX19zZXRDaGlsZHJlbl9fKGRub2RlLmNoaWxkcmVuKTtcblx0XHRpbnN0YW5jZS5fX3NldFByb3BlcnRpZXNfXyhkbm9kZS5wcm9wZXJ0aWVzKTtcblx0XHRjb25zdCByZW5kZXJlZCA9IGluc3RhbmNlLl9fcmVuZGVyX18oKTtcblx0XHRpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gZmFsc2U7XG5cdFx0aWYgKHJlbmRlcmVkKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJlZFJlbmRlcmVkID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihyZW5kZXJlZCwgaW5zdGFuY2UpO1xuXHRcdFx0ZG5vZGUucmVuZGVyZWQgPSBmaWx0ZXJlZFJlbmRlcmVkO1xuXHRcdFx0YWRkQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIGZpbHRlcmVkUmVuZGVyZWQsIHByb2plY3Rpb25PcHRpb25zLCBpbnN0YW5jZSwgaW5zZXJ0QmVmb3JlLCBjaGlsZE5vZGVzKTtcblx0XHR9XG5cdFx0aW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlLCBwYXJlbnRWTm9kZSB9KTtcblx0XHRpbnN0YW5jZURhdGEubm9kZUhhbmRsZXIuYWRkUm9vdCgpO1xuXHRcdHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuXHRcdFx0aW5zdGFuY2VEYXRhLm9uQXR0YWNoKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IHByb2plY3Rpb25PcHRpb25zLm1lcmdlRWxlbWVudDtcblx0XHRcdHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCA9IHVuZGVmaW5lZDtcblx0XHRcdGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSEsIGRub2RlLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBkb2MgPSBwYXJlbnRWTm9kZS5kb21Ob2RlIS5vd25lckRvY3VtZW50O1xuXHRcdGlmICghZG5vZGUudGFnICYmIHR5cGVvZiBkbm9kZS50ZXh0ID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKGRub2RlLmRvbU5vZGUgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRWTm9kZS5kb21Ob2RlKSB7XG5cdFx0XHRcdGNvbnN0IG5ld0RvbU5vZGUgPSBkbm9kZS5kb21Ob2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCEpO1xuXHRcdFx0XHRpZiAocGFyZW50Vk5vZGUuZG9tTm9kZSA9PT0gZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlKSB7XG5cdFx0XHRcdFx0cGFyZW50Vk5vZGUuZG9tTm9kZS5yZXBsYWNlQ2hpbGQobmV3RG9tTm9kZSwgZG5vZGUuZG9tTm9kZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFyZW50Vk5vZGUuZG9tTm9kZS5hcHBlbmRDaGlsZChuZXdEb21Ob2RlKTtcblx0XHRcdFx0XHRkbm9kZS5kb21Ob2RlLnBhcmVudE5vZGUgJiYgZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRub2RlLmRvbU5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRub2RlLmRvbU5vZGUgPSBuZXdEb21Ob2RlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCEpO1xuXHRcdFx0XHRpZiAoaW5zZXJ0QmVmb3JlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwYXJlbnRWTm9kZS5kb21Ob2RlIS5pbnNlcnRCZWZvcmUoZG9tTm9kZSwgaW5zZXJ0QmVmb3JlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYXJlbnRWTm9kZS5kb21Ob2RlIS5hcHBlbmRDaGlsZChkb21Ob2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoZG5vZGUuZG9tTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmIChkbm9kZS50YWcgPT09ICdzdmcnKSB7XG5cdFx0XHRcdFx0cHJvamVjdGlvbk9wdGlvbnMgPSB7IC4uLnByb2plY3Rpb25PcHRpb25zLCAuLi57IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9IH07XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0ZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudE5TKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSwgZG5vZGUudGFnKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgfHwgZG9jLmNyZWF0ZUVsZW1lbnQoZG5vZGUudGFnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9tTm9kZSA9IGRub2RlLmRvbU5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpbml0UHJvcGVydGllc0FuZENoaWxkcmVuKGRvbU5vZGUhIGFzIEVsZW1lbnQsIGRub2RlLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuXHRcdFx0aWYgKGluc2VydEJlZm9yZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcmVudFZOb2RlLmRvbU5vZGUhLmluc2VydEJlZm9yZShkb21Ob2RlLCBpbnNlcnRCZWZvcmUpO1xuXHRcdFx0fSBlbHNlIGlmIChkb21Ob2RlIS5wYXJlbnROb2RlICE9PSBwYXJlbnRWTm9kZS5kb21Ob2RlISkge1xuXHRcdFx0XHRwYXJlbnRWTm9kZS5kb21Ob2RlIS5hcHBlbmRDaGlsZChkb21Ob2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRG9tKFxuXHRwcmV2aW91czogYW55LFxuXHRkbm9kZTogSW50ZXJuYWxETm9kZSxcblx0cHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zLFxuXHRwYXJlbnRWTm9kZTogSW50ZXJuYWxWTm9kZSxcblx0cGFyZW50SW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlXG4pIHtcblx0aWYgKGlzV05vZGUoZG5vZGUpKSB7XG5cdFx0Y29uc3QgeyBpbnN0YW5jZSB9ID0gcHJldmlvdXM7XG5cdFx0Y29uc3QgeyBwYXJlbnRWTm9kZSwgZG5vZGU6IG5vZGUgfSA9IGluc3RhbmNlTWFwLmdldChpbnN0YW5jZSkhO1xuXHRcdGNvbnN0IHByZXZpb3VzUmVuZGVyZWQgPSBub2RlID8gbm9kZS5yZW5kZXJlZCA6IHByZXZpb3VzLnJlbmRlcmVkO1xuXHRcdGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSkhO1xuXHRcdGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSB0cnVlO1xuXHRcdGluc3RhbmNlLl9fc2V0Q29yZVByb3BlcnRpZXNfXyhkbm9kZS5jb3JlUHJvcGVydGllcyk7XG5cdFx0aW5zdGFuY2UuX19zZXRDaGlsZHJlbl9fKGRub2RlLmNoaWxkcmVuKTtcblx0XHRpbnN0YW5jZS5fX3NldFByb3BlcnRpZXNfXyhkbm9kZS5wcm9wZXJ0aWVzKTtcblx0XHRkbm9kZS5pbnN0YW5jZSA9IGluc3RhbmNlO1xuXHRcdGlmIChpbnN0YW5jZURhdGEuZGlydHkgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IHJlbmRlcmVkID0gaW5zdGFuY2UuX19yZW5kZXJfXygpO1xuXHRcdFx0aW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xuXHRcdFx0ZG5vZGUucmVuZGVyZWQgPSBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKHJlbmRlcmVkLCBpbnN0YW5jZSk7XG5cdFx0XHR1cGRhdGVDaGlsZHJlbihwYXJlbnRWTm9kZSwgcHJldmlvdXNSZW5kZXJlZCwgZG5vZGUucmVuZGVyZWQsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcblx0XHRcdGRub2RlLnJlbmRlcmVkID0gcHJldmlvdXNSZW5kZXJlZDtcblx0XHR9XG5cdFx0aW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlLCBwYXJlbnRWTm9kZSB9KTtcblx0XHRpbnN0YW5jZURhdGEubm9kZUhhbmRsZXIuYWRkUm9vdCgpO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChwcmV2aW91cyA9PT0gZG5vZGUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgZG9tTm9kZSA9IChkbm9kZS5kb21Ob2RlID0gcHJldmlvdXMuZG9tTm9kZSk7XG5cdFx0bGV0IHRleHRVcGRhdGVkID0gZmFsc2U7XG5cdFx0bGV0IHVwZGF0ZWQgPSBmYWxzZTtcblx0XHRpZiAoIWRub2RlLnRhZyAmJiB0eXBlb2YgZG5vZGUudGV4dCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGlmIChkbm9kZS50ZXh0ICE9PSBwcmV2aW91cy50ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG5ld0RvbU5vZGUgPSBkb21Ob2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCEpO1xuXHRcdFx0XHRkb21Ob2RlLnBhcmVudE5vZGUhLnJlcGxhY2VDaGlsZChuZXdEb21Ob2RlLCBkb21Ob2RlKTtcblx0XHRcdFx0ZG5vZGUuZG9tTm9kZSA9IG5ld0RvbU5vZGU7XG5cdFx0XHRcdHRleHRVcGRhdGVkID0gdHJ1ZTtcblx0XHRcdFx0cmV0dXJuIHRleHRVcGRhdGVkO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoZG5vZGUudGFnICYmIGRub2RlLnRhZy5sYXN0SW5kZXhPZignc3ZnJywgMCkgPT09IDApIHtcblx0XHRcdFx0cHJvamVjdGlvbk9wdGlvbnMgPSB7IC4uLnByb2plY3Rpb25PcHRpb25zLCAuLi57IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9IH07XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJldmlvdXMuY2hpbGRyZW4gIT09IGRub2RlLmNoaWxkcmVuKSB7XG5cdFx0XHRcdGNvbnN0IGNoaWxkcmVuID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihkbm9kZS5jaGlsZHJlbiwgcGFyZW50SW5zdGFuY2UpO1xuXHRcdFx0XHRkbm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuXHRcdFx0XHR1cGRhdGVkID1cblx0XHRcdFx0XHR1cGRhdGVDaGlsZHJlbihkbm9kZSwgcHJldmlvdXMuY2hpbGRyZW4sIGNoaWxkcmVuLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHx8IHVwZGF0ZWQ7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHByZXZpb3VzUHJvcGVydGllcyA9IGJ1aWxkUHJldmlvdXNQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzLCBkbm9kZSk7XG5cdFx0XHRpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcblx0XHRcdFx0dXBkYXRlQXR0cmlidXRlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuYXR0cmlidXRlcywgZG5vZGUuYXR0cmlidXRlcywgcHJvamVjdGlvbk9wdGlvbnMpO1xuXHRcdFx0XHR1cGRhdGVkID1cblx0XHRcdFx0XHR1cGRhdGVQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdFx0ZG9tTm9kZSxcblx0XHRcdFx0XHRcdHByZXZpb3VzUHJvcGVydGllcy5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0ZG5vZGUucHJvcGVydGllcyxcblx0XHRcdFx0XHRcdHByb2plY3Rpb25PcHRpb25zLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpIHx8IHVwZGF0ZWQ7XG5cdFx0XHRcdHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5ldmVudHMsIGRub2RlLmV2ZW50cywgcHJvamVjdGlvbk9wdGlvbnMsIHRydWUpO1xuXHRcdFx0XHRjb25zdCBldmVudHMgPSBkbm9kZS5ldmVudHM7XG5cdFx0XHRcdE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHR1cGRhdGVFdmVudChcblx0XHRcdFx0XHRcdGRvbU5vZGUsXG5cdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdGV2ZW50c1tldmVudF0sXG5cdFx0XHRcdFx0XHRwcm9qZWN0aW9uT3B0aW9ucyxcblx0XHRcdFx0XHRcdGRub2RlLnByb3BlcnRpZXMuYmluZCxcblx0XHRcdFx0XHRcdHByZXZpb3VzUHJvcGVydGllcy5ldmVudHNbZXZlbnRdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR1cGRhdGVkID1cblx0XHRcdFx0XHR1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5wcm9wZXJ0aWVzLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucykgfHxcblx0XHRcdFx0XHR1cGRhdGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZG5vZGUucHJvcGVydGllcy5rZXkgIT09IG51bGwgJiYgZG5vZGUucHJvcGVydGllcy5rZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpITtcblx0XHRcdFx0aW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZChkb21Ob2RlLCBgJHtkbm9kZS5wcm9wZXJ0aWVzLmtleX1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHVwZGF0ZWQgJiYgZG5vZGUucHJvcGVydGllcyAmJiBkbm9kZS5wcm9wZXJ0aWVzLnVwZGF0ZUFuaW1hdGlvbikge1xuXHRcdFx0ZG5vZGUucHJvcGVydGllcy51cGRhdGVBbmltYXRpb24oZG9tTm9kZSBhcyBFbGVtZW50LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcmV2aW91cy5wcm9wZXJ0aWVzKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKHZub2RlOiBJbnRlcm5hbFZOb2RlLCBwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnMpIHtcblx0Ly8gdHJhbnNmZXIgYW55IHByb3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkIC0gYXMgdGhlc2UgbXVzdCBiZSBkZWNvcmF0ZWQgcHJvcGVydGllc1xuXHR2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMgPSB2bm9kZS5wcm9wZXJ0aWVzO1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gdm5vZGUuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2shKCEhdm5vZGUuaW5zZXJ0ZWQpO1xuXHRjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSkhO1xuXHR2bm9kZS5wcm9wZXJ0aWVzID0geyAuLi5wcm9wZXJ0aWVzLCAuLi52bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMgfTtcblx0cHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydGllcyA9IHtcblx0XHRcdC4uLnZub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrISghIXZub2RlLmluc2VydGVkKSxcblx0XHRcdC4uLnZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllc1xuXHRcdH07XG5cdFx0dXBkYXRlUHJvcGVydGllcyh2bm9kZS5kb21Ob2RlISBhcyBFbGVtZW50LCB2bm9kZS5wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0dm5vZGUucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnMpIHtcblx0Y29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpITtcblx0aWYgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuXHRcdGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XG5cdFx0XHR3aGlsZSAocHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcblx0XHRcdFx0Y2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Z2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XG5cdFx0XHRcdFx0Y2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zOiBQcm9qZWN0aW9uT3B0aW9ucykge1xuXHRjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSkhO1xuXHRpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xuXHRcdHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcblx0XHRcdGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChnbG9iYWwucmVxdWVzdElkbGVDYWxsYmFjaykge1xuXHRcdFx0Z2xvYmFsLnJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdFx0XHR3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xuXHRcdFx0XHRcdGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0d2hpbGUgKHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcblx0XHRcdFx0XHRjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVSZW5kZXIocHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zKSB7XG5cdGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKSE7XG5cdGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XG5cdFx0cmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcblx0fSBlbHNlIGlmIChwcm9qZWN0b3JTdGF0ZS5yZW5kZXJTY2hlZHVsZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0cmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXIocHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zKSB7XG5cdGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKSE7XG5cdHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IHVuZGVmaW5lZDtcblx0Y29uc3QgcmVuZGVyUXVldWUgPSBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZTtcblx0Y29uc3QgcmVuZGVycyA9IFsuLi5yZW5kZXJRdWV1ZV07XG5cdHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlID0gW107XG5cdHJlbmRlcnMuc29ydCgoYSwgYikgPT4gYS5kZXB0aCAtIGIuZGVwdGgpO1xuXHRjb25zdCBwcmV2aW91c2x5UmVuZGVyZWQgPSBbXTtcblx0d2hpbGUgKHJlbmRlcnMubGVuZ3RoKSB7XG5cdFx0Y29uc3QgeyBpbnN0YW5jZSB9ID0gcmVuZGVycy5zaGlmdCgpITtcblx0XHRpZiAoaW5zdGFuY2VNYXAuaGFzKGluc3RhbmNlKSAmJiBwcmV2aW91c2x5UmVuZGVyZWQuaW5kZXhPZihpbnN0YW5jZSkgPT09IC0xKSB7XG5cdFx0XHRwcmV2aW91c2x5UmVuZGVyZWQucHVzaChpbnN0YW5jZSk7XG5cdFx0XHRjb25zdCB7IHBhcmVudFZOb2RlLCBkbm9kZSB9ID0gaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKSE7XG5cdFx0XHRjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpITtcblx0XHRcdHVwZGF0ZURvbShkbm9kZSwgdG9JbnRlcm5hbFdOb2RlKGluc3RhbmNlLCBpbnN0YW5jZURhdGEpLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50Vk5vZGUsIGluc3RhbmNlKTtcblx0XHR9XG5cdH1cblx0cnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpO1xuXHRydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucyk7XG59XG5cbmV4cG9ydCBjb25zdCBkb20gPSB7XG5cdGFwcGVuZDogZnVuY3Rpb24oXG5cdFx0cGFyZW50Tm9kZTogRWxlbWVudCxcblx0XHRpbnN0YW5jZTogRGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2UsXG5cdFx0cHJvamVjdGlvbk9wdGlvbnM6IFBhcnRpYWw8UHJvamVjdGlvbk9wdGlvbnM+ID0ge31cblx0KTogUHJvamVjdGlvbiB7XG5cdFx0Y29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKSE7XG5cdFx0Y29uc3QgZmluYWxQcm9qZWN0b3JPcHRpb25zID0gZ2V0UHJvamVjdGlvbk9wdGlvbnMocHJvamVjdGlvbk9wdGlvbnMsIGluc3RhbmNlKTtcblx0XHRjb25zdCBwcm9qZWN0b3JTdGF0ZTogUHJvamVjdG9yU3RhdGUgPSB7XG5cdFx0XHRhZnRlclJlbmRlckNhbGxiYWNrczogW10sXG5cdFx0XHRkZWZlcnJlZFJlbmRlckNhbGxiYWNrczogW10sXG5cdFx0XHRub2RlTWFwOiBuZXcgV2Vha01hcCgpLFxuXHRcdFx0cmVuZGVyU2NoZWR1bGVkOiB1bmRlZmluZWQsXG5cdFx0XHRyZW5kZXJRdWV1ZTogW10sXG5cdFx0XHRtZXJnZTogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgfHwgZmFsc2UsXG5cdFx0XHRtZXJnZUVsZW1lbnQ6IHByb2plY3Rpb25PcHRpb25zLm1lcmdlRWxlbWVudFxuXHRcdH07XG5cdFx0cHJvamVjdG9yU3RhdGVNYXAuc2V0KGluc3RhbmNlLCBwcm9qZWN0b3JTdGF0ZSk7XG5cblx0XHRmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUgPSBwYXJlbnROb2RlO1xuXHRcdGNvbnN0IHBhcmVudFZOb2RlID0gdG9QYXJlbnRWTm9kZShmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUpO1xuXHRcdGNvbnN0IG5vZGUgPSB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSk7XG5cdFx0aW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlOiBub2RlLCBwYXJlbnRWTm9kZSB9KTtcblx0XHRpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9ICgpID0+IHtcblx0XHRcdGluc3RhbmNlRGF0YS5kaXJ0eSA9IHRydWU7XG5cdFx0XHRpZiAoaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWUucHVzaCh7IGluc3RhbmNlLCBkZXB0aDogZmluYWxQcm9qZWN0b3JPcHRpb25zLmRlcHRoIH0pO1xuXHRcdFx0XHRzY2hlZHVsZVJlbmRlcihmaW5hbFByb2plY3Rvck9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dXBkYXRlRG9tKG5vZGUsIG5vZGUsIGZpbmFsUHJvamVjdG9yT3B0aW9ucywgcGFyZW50Vk5vZGUsIGluc3RhbmNlKTtcblx0XHRwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcblx0XHRcdGluc3RhbmNlRGF0YS5vbkF0dGFjaCgpO1xuXHRcdH0pO1xuXHRcdHJ1bkRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XG5cdFx0cnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZG9tTm9kZTogZmluYWxQcm9qZWN0b3JPcHRpb25zLnJvb3ROb2RlXG5cdFx0fTtcblx0fSxcblx0Y3JlYXRlOiBmdW5jdGlvbihpbnN0YW5jZTogRGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2UsIHByb2plY3Rpb25PcHRpb25zPzogUGFydGlhbDxQcm9qZWN0aW9uT3B0aW9ucz4pOiBQcm9qZWN0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdH0sXG5cdG1lcmdlOiBmdW5jdGlvbihcblx0XHRlbGVtZW50OiBFbGVtZW50LFxuXHRcdGluc3RhbmNlOiBEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZSxcblx0XHRwcm9qZWN0aW9uT3B0aW9uczogUGFydGlhbDxQcm9qZWN0aW9uT3B0aW9ucz4gPSB7fVxuXHQpOiBQcm9qZWN0aW9uIHtcblx0XHRwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZSA9IHRydWU7XG5cdFx0cHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50ID0gZWxlbWVudDtcblx0XHRjb25zdCBwcm9qZWN0aW9uID0gdGhpcy5hcHBlbmQoZWxlbWVudC5wYXJlbnROb2RlIGFzIEVsZW1lbnQsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0Y29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQoaW5zdGFuY2UpITtcblx0XHRwcm9qZWN0b3JTdGF0ZS5tZXJnZSA9IGZhbHNlO1xuXHRcdHJldHVybiBwcm9qZWN0aW9uO1xuXHR9XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHZkb20udHMiLCIvKlxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odXNlU291cmNlTWFwKSB7XG5cdHZhciBsaXN0ID0gW107XG5cblx0Ly8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXHRsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHR2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKTtcblx0XHRcdGlmKGl0ZW1bMl0pIHtcblx0XHRcdFx0cmV0dXJuIFwiQG1lZGlhIFwiICsgaXRlbVsyXSArIFwie1wiICsgY29udGVudCArIFwifVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdFx0XHR9XG5cdFx0fSkuam9pbihcIlwiKTtcblx0fTtcblxuXHQvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXHRsaXN0LmkgPSBmdW5jdGlvbihtb2R1bGVzLCBtZWRpYVF1ZXJ5KSB7XG5cdFx0aWYodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG5cdFx0dmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGlkID0gdGhpc1tpXVswXTtcblx0XHRcdGlmKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIilcblx0XHRcdFx0YWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuXHRcdH1cblx0XHRmb3IoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IG1vZHVsZXNbaV07XG5cdFx0XHQvLyBza2lwIGFscmVhZHkgaW1wb3J0ZWQgbW9kdWxlXG5cdFx0XHQvLyB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdCAxMDAlIHBlcmZlY3QgZm9yIHdlaXJkIG1lZGlhIHF1ZXJ5IGNvbWJpbmF0aW9uc1xuXHRcdFx0Ly8gIHdoZW4gYSBtb2R1bGUgaXMgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgbWVkaWEgcXVlcmllcy5cblx0XHRcdC8vICBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXG5cdFx0XHRpZih0eXBlb2YgaXRlbVswXSAhPT0gXCJudW1iZXJcIiB8fCAhYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuXHRcdFx0XHRpZihtZWRpYVF1ZXJ5ICYmICFpdGVtWzJdKSB7XG5cdFx0XHRcdFx0aXRlbVsyXSA9IG1lZGlhUXVlcnk7XG5cdFx0XHRcdH0gZWxzZSBpZihtZWRpYVF1ZXJ5KSB7XG5cdFx0XHRcdFx0aXRlbVsyXSA9IFwiKFwiICsgaXRlbVsyXSArIFwiKSBhbmQgKFwiICsgbWVkaWFRdWVyeSArIFwiKVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3QucHVzaChpdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHJldHVybiBsaXN0O1xufTtcblxuZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApIHtcblx0dmFyIGNvbnRlbnQgPSBpdGVtWzFdIHx8ICcnO1xuXHR2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cdGlmICghY3NzTWFwcGluZykge1xuXHRcdHJldHVybiBjb250ZW50O1xuXHR9XG5cblx0aWYgKHVzZVNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBzb3VyY2VNYXBwaW5nID0gdG9Db21tZW50KGNzc01hcHBpbmcpO1xuXHRcdHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG5cdFx0XHRyZXR1cm4gJy8qIyBzb3VyY2VVUkw9JyArIGNzc01hcHBpbmcuc291cmNlUm9vdCArIHNvdXJjZSArICcgKi8nXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKCdcXG4nKTtcblx0fVxuXG5cdHJldHVybiBbY29udGVudF0uam9pbignXFxuJyk7XG59XG5cbi8vIEFkYXB0ZWQgZnJvbSBjb252ZXJ0LXNvdXJjZS1tYXAgKE1JVClcbmZ1bmN0aW9uIHRvQ29tbWVudChzb3VyY2VNYXApIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG5cdHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpO1xuXHR2YXIgZGF0YSA9ICdzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwnICsgYmFzZTY0O1xuXG5cdHJldHVybiAnLyojICcgKyBkYXRhICsgJyAqLyc7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiY3NzU2VsZWN0XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImNzc1NlbGVjdFwiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4vKioqKioqLyBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdGdldDogZ2V0dGVyXG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMjQpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNWYWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdGlmICghaXNWYWx1ZSh2YWx1ZSkpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlIG51bGwgb3IgdW5kZWZpbmVkXCIpO1xuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbikge1xuXHRpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcblx0cmV0dXJuIGZuO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2KSgpID8gU3ltYm9sIDogX193ZWJwYWNrX3JlcXVpcmVfXyg2Nyk7XG5cblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBhc3NpZ24gICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcbiAgLCBub3JtYWxpemVPcHRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSlcbiAgLCBpc0NhbGxhYmxlICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MilcbiAgLCBjb250YWlucyAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcblxuICAsIGQ7XG5cbmQgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkc2NyLCB2YWx1ZS8qLCBvcHRpb25zKi8pIHtcblx0dmFyIGMsIGUsIHcsIG9wdGlvbnMsIGRlc2M7XG5cdGlmICgoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHx8ICh0eXBlb2YgZHNjciAhPT0gJ3N0cmluZycpKSB7XG5cdFx0b3B0aW9ucyA9IHZhbHVlO1xuXHRcdHZhbHVlID0gZHNjcjtcblx0XHRkc2NyID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHRvcHRpb25zID0gYXJndW1lbnRzWzJdO1xuXHR9XG5cdGlmIChkc2NyID09IG51bGwpIHtcblx0XHRjID0gdyA9IHRydWU7XG5cdFx0ZSA9IGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdGMgPSBjb250YWlucy5jYWxsKGRzY3IsICdjJyk7XG5cdFx0ZSA9IGNvbnRhaW5zLmNhbGwoZHNjciwgJ2UnKTtcblx0XHR3ID0gY29udGFpbnMuY2FsbChkc2NyLCAndycpO1xuXHR9XG5cblx0ZGVzYyA9IHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IGMsIGVudW1lcmFibGU6IGUsIHdyaXRhYmxlOiB3IH07XG5cdHJldHVybiAhb3B0aW9ucyA/IGRlc2MgOiBhc3NpZ24obm9ybWFsaXplT3B0cyhvcHRpb25zKSwgZGVzYyk7XG59O1xuXG5kLmdzID0gZnVuY3Rpb24gKGRzY3IsIGdldCwgc2V0LyosIG9wdGlvbnMqLykge1xuXHR2YXIgYywgZSwgb3B0aW9ucywgZGVzYztcblx0aWYgKHR5cGVvZiBkc2NyICE9PSAnc3RyaW5nJykge1xuXHRcdG9wdGlvbnMgPSBzZXQ7XG5cdFx0c2V0ID0gZ2V0O1xuXHRcdGdldCA9IGRzY3I7XG5cdFx0ZHNjciA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0b3B0aW9ucyA9IGFyZ3VtZW50c1szXTtcblx0fVxuXHRpZiAoZ2V0ID09IG51bGwpIHtcblx0XHRnZXQgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoZ2V0KSkge1xuXHRcdG9wdGlvbnMgPSBnZXQ7XG5cdFx0Z2V0ID0gc2V0ID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKHNldCA9PSBudWxsKSB7XG5cdFx0c2V0ID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKHNldCkpIHtcblx0XHRvcHRpb25zID0gc2V0O1xuXHRcdHNldCA9IHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoZHNjciA9PSBudWxsKSB7XG5cdFx0YyA9IHRydWU7XG5cdFx0ZSA9IGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdGMgPSBjb250YWlucy5jYWxsKGRzY3IsICdjJyk7XG5cdFx0ZSA9IGNvbnRhaW5zLmNhbGwoZHNjciwgJ2UnKTtcblx0fVxuXG5cdGRlc2MgPSB7IGdldDogZ2V0LCBzZXQ6IHNldCwgY29uZmlndXJhYmxlOiBjLCBlbnVtZXJhYmxlOiBlIH07XG5cdHJldHVybiAhb3B0aW9ucyA/IGRlc2MgOiBhc3NpZ24obm9ybWFsaXplT3B0cyhvcHRpb25zKSwgZGVzYyk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgX3VuZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpKCk7IC8vIFN1cHBvcnQgRVMzIGVuZ2luZXNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsKSB7XG4gcmV0dXJuICh2YWwgIT09IF91bmRlZmluZWQpICYmICh2YWwgIT09IG51bGwpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHRydWVGdW5jOiBmdW5jdGlvbiB0cnVlRnVuYygpe1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXHRmYWxzZUZ1bmM6IGZ1bmN0aW9uIGZhbHNlRnVuYygpe1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSkoKVxuXHQ/IE9iamVjdC5zZXRQcm90b3R5cGVPZlxuXHQ6IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xuXG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgb2JqVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG4gICwgaWQgPSBvYmpUb1N0cmluZy5jYWxsKFxuXHQoZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBhcmd1bWVudHM7XG5cdH0pKClcbik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdHJldHVybiBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gaWQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgb2JqVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLCBpZCA9IG9ialRvU3RyaW5nLmNhbGwoXCJcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdHJldHVybiAoXG5cdFx0dHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8XG5cdFx0KHZhbHVlICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcblx0XHRcdCh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gaWQpKSB8fFxuXHRcdGZhbHNlXG5cdCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vL1R5cGVzIG9mIGVsZW1lbnRzIGZvdW5kIGluIHRoZSBET01cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRUZXh0OiBcInRleHRcIiwgLy9UZXh0XG5cdERpcmVjdGl2ZTogXCJkaXJlY3RpdmVcIiwgLy88PyAuLi4gPz5cblx0Q29tbWVudDogXCJjb21tZW50XCIsIC8vPCEtLSAuLi4gLS0+XG5cdFNjcmlwdDogXCJzY3JpcHRcIiwgLy88c2NyaXB0PiB0YWdzXG5cdFN0eWxlOiBcInN0eWxlXCIsIC8vPHN0eWxlPiB0YWdzXG5cdFRhZzogXCJ0YWdcIiwgLy9BbnkgdGFnXG5cdENEQVRBOiBcImNkYXRhXCIsIC8vPCFbQ0RBVEFbIC4uLiBdXT5cblx0RG9jdHlwZTogXCJkb2N0eXBlXCIsXG5cblx0aXNUYWc6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdHJldHVybiBlbGVtLnR5cGUgPT09IFwidGFnXCIgfHwgZWxlbS50eXBlID09PSBcInNjcmlwdFwiIHx8IGVsZW0udHlwZSA9PT0gXCJzdHlsZVwiO1xuXHR9XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KSgpXG5cdD8gT2JqZWN0LmFzc2lnblxuXHQ6IF9fd2VicGFja19yZXF1aXJlX18oNTgpO1xuXG5cbi8qKiovIH0pLFxuLyogMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKSgpXG5cdD8gU3RyaW5nLnByb3RvdHlwZS5jb250YWluc1xuXHQ6IF9fd2VicGFja19yZXF1aXJlX18oNjQpO1xuXG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGNsZWFyICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNilcbiAgLCBhc3NpZ24gICA9IF9fd2VicGFja19yZXF1aXJlX18oMTApXG4gICwgY2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgdmFsdWUgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApXG4gICwgZCAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG4gICwgYXV0b0JpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KVxuICAsIFN5bWJvbCAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LCBkZWZpbmVQcm9wZXJ0aWVzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMsIEl0ZXJhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEl0ZXJhdG9yID0gZnVuY3Rpb24gKGxpc3QsIGNvbnRleHQpIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIEl0ZXJhdG9yKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnXCIpO1xuXHRkZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcblx0XHRfX2xpc3RfXzogZChcIndcIiwgdmFsdWUobGlzdCkpLFxuXHRcdF9fY29udGV4dF9fOiBkKFwid1wiLCBjb250ZXh0KSxcblx0XHRfX25leHRJbmRleF9fOiBkKFwid1wiLCAwKVxuXHR9KTtcblx0aWYgKCFjb250ZXh0KSByZXR1cm47XG5cdGNhbGxhYmxlKGNvbnRleHQub24pO1xuXHRjb250ZXh0Lm9uKFwiX2FkZFwiLCB0aGlzLl9vbkFkZCk7XG5cdGNvbnRleHQub24oXCJfZGVsZXRlXCIsIHRoaXMuX29uRGVsZXRlKTtcblx0Y29udGV4dC5vbihcIl9jbGVhclwiLCB0aGlzLl9vbkNsZWFyKTtcbn07XG5cbi8vIEludGVybmFsICVJdGVyYXRvclByb3RvdHlwZSUgZG9lc24ndCBleHBvc2UgaXRzIGNvbnN0cnVjdG9yXG5kZWxldGUgSXRlcmF0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5kZWZpbmVQcm9wZXJ0aWVzKFxuXHRJdGVyYXRvci5wcm90b3R5cGUsXG5cdGFzc2lnbihcblx0XHR7XG5cdFx0XHRfbmV4dDogZChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHZhciBpO1xuXHRcdFx0XHRpZiAoIXRoaXMuX19saXN0X18pIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmICh0aGlzLl9fcmVkb19fKSB7XG5cdFx0XHRcdFx0aSA9IHRoaXMuX19yZWRvX18uc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAoaSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gaTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fX25leHRJbmRleF9fIDwgdGhpcy5fX2xpc3RfXy5sZW5ndGgpIHJldHVybiB0aGlzLl9fbmV4dEluZGV4X18rKztcblx0XHRcdFx0dGhpcy5fdW5CaW5kKCk7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9KSxcblx0XHRcdG5leHQ6IGQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fY3JlYXRlUmVzdWx0KHRoaXMuX25leHQoKSk7XG5cdFx0XHR9KSxcblx0XHRcdF9jcmVhdGVSZXN1bHQ6IGQoZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0aWYgKGkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuXHRcdFx0XHRyZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IHRoaXMuX3Jlc29sdmUoaSkgfTtcblx0XHRcdH0pLFxuXHRcdFx0X3Jlc29sdmU6IGQoZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX19saXN0X19baV07XG5cdFx0XHR9KSxcblx0XHRcdF91bkJpbmQ6IGQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR0aGlzLl9fbGlzdF9fID0gbnVsbDtcblx0XHRcdFx0ZGVsZXRlIHRoaXMuX19yZWRvX187XG5cdFx0XHRcdGlmICghdGhpcy5fX2NvbnRleHRfXykgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLl9fY29udGV4dF9fLm9mZihcIl9hZGRcIiwgdGhpcy5fb25BZGQpO1xuXHRcdFx0XHR0aGlzLl9fY29udGV4dF9fLm9mZihcIl9kZWxldGVcIiwgdGhpcy5fb25EZWxldGUpO1xuXHRcdFx0XHR0aGlzLl9fY29udGV4dF9fLm9mZihcIl9jbGVhclwiLCB0aGlzLl9vbkNsZWFyKTtcblx0XHRcdFx0dGhpcy5fX2NvbnRleHRfXyA9IG51bGw7XG5cdFx0XHR9KSxcblx0XHRcdHRvU3RyaW5nOiBkKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIFwiW29iamVjdCBcIiArICh0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gfHwgXCJPYmplY3RcIikgKyBcIl1cIjtcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRhdXRvQmluZCh7XG5cdFx0XHRfb25BZGQ6IGQoZnVuY3Rpb24gKGluZGV4KSB7XG5cdFx0XHRcdGlmIChpbmRleCA+PSB0aGlzLl9fbmV4dEluZGV4X18pIHJldHVybjtcblx0XHRcdFx0Kyt0aGlzLl9fbmV4dEluZGV4X187XG5cdFx0XHRcdGlmICghdGhpcy5fX3JlZG9fXykge1xuXHRcdFx0XHRcdGRlZmluZVByb3BlcnR5KHRoaXMsIFwiX19yZWRvX19cIiwgZChcImNcIiwgW2luZGV4XSkpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24gKHJlZG8sIGkpIHtcblx0XHRcdFx0XHRpZiAocmVkbyA+PSBpbmRleCkgdGhpcy5fX3JlZG9fX1tpXSA9ICsrcmVkbztcblx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHRcdHRoaXMuX19yZWRvX18ucHVzaChpbmRleCk7XG5cdFx0XHR9KSxcblx0XHRcdF9vbkRlbGV0ZTogZChmdW5jdGlvbiAoaW5kZXgpIHtcblx0XHRcdFx0dmFyIGk7XG5cdFx0XHRcdGlmIChpbmRleCA+PSB0aGlzLl9fbmV4dEluZGV4X18pIHJldHVybjtcblx0XHRcdFx0LS10aGlzLl9fbmV4dEluZGV4X187XG5cdFx0XHRcdGlmICghdGhpcy5fX3JlZG9fXykgcmV0dXJuO1xuXHRcdFx0XHRpID0gdGhpcy5fX3JlZG9fXy5pbmRleE9mKGluZGV4KTtcblx0XHRcdFx0aWYgKGkgIT09IC0xKSB0aGlzLl9fcmVkb19fLnNwbGljZShpLCAxKTtcblx0XHRcdFx0dGhpcy5fX3JlZG9fXy5mb3JFYWNoKGZ1bmN0aW9uIChyZWRvLCBqKSB7XG5cdFx0XHRcdFx0aWYgKHJlZG8gPiBpbmRleCkgdGhpcy5fX3JlZG9fX1tqXSA9IC0tcmVkbztcblx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHR9KSxcblx0XHRcdF9vbkNsZWFyOiBkKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKHRoaXMuX19yZWRvX18pIGNsZWFyLmNhbGwodGhpcy5fX3JlZG9fXyk7XG5cdFx0XHRcdHRoaXMuX19uZXh0SW5kZXhfXyA9IDA7XG5cdFx0XHR9KVxuXHRcdH0pXG5cdClcbik7XG5cbmRlZmluZVByb3BlcnR5KFxuXHRJdGVyYXRvci5wcm90b3R5cGUsXG5cdFN5bWJvbC5pdGVyYXRvcixcblx0ZChmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0pXG4pO1xuXG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7XCJhbXBcIjpcIiZcIixcImFwb3NcIjpcIidcIixcImd0XCI6XCI+XCIsXCJsdFwiOlwiPFwiLFwicXVvdFwiOlwiXFxcIlwifVxuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0ge1wiQWFjdXRlXCI6XCLDgVwiLFwiYWFjdXRlXCI6XCLDoVwiLFwiQWJyZXZlXCI6XCLEglwiLFwiYWJyZXZlXCI6XCLEg1wiLFwiYWNcIjpcIuKIvlwiLFwiYWNkXCI6XCLiiL9cIixcImFjRVwiOlwi4oi+zLNcIixcIkFjaXJjXCI6XCLDglwiLFwiYWNpcmNcIjpcIsOiXCIsXCJhY3V0ZVwiOlwiwrRcIixcIkFjeVwiOlwi0JBcIixcImFjeVwiOlwi0LBcIixcIkFFbGlnXCI6XCLDhlwiLFwiYWVsaWdcIjpcIsOmXCIsXCJhZlwiOlwi4oGhXCIsXCJBZnJcIjpcIvCdlIRcIixcImFmclwiOlwi8J2UnlwiLFwiQWdyYXZlXCI6XCLDgFwiLFwiYWdyYXZlXCI6XCLDoFwiLFwiYWxlZnN5bVwiOlwi4oS1XCIsXCJhbGVwaFwiOlwi4oS1XCIsXCJBbHBoYVwiOlwizpFcIixcImFscGhhXCI6XCLOsVwiLFwiQW1hY3JcIjpcIsSAXCIsXCJhbWFjclwiOlwixIFcIixcImFtYWxnXCI6XCLiqL9cIixcImFtcFwiOlwiJlwiLFwiQU1QXCI6XCImXCIsXCJhbmRhbmRcIjpcIuKplVwiLFwiQW5kXCI6XCLiqZNcIixcImFuZFwiOlwi4oinXCIsXCJhbmRkXCI6XCLiqZxcIixcImFuZHNsb3BlXCI6XCLiqZhcIixcImFuZHZcIjpcIuKpmlwiLFwiYW5nXCI6XCLiiKBcIixcImFuZ2VcIjpcIuKmpFwiLFwiYW5nbGVcIjpcIuKIoFwiLFwiYW5nbXNkYWFcIjpcIuKmqFwiLFwiYW5nbXNkYWJcIjpcIuKmqVwiLFwiYW5nbXNkYWNcIjpcIuKmqlwiLFwiYW5nbXNkYWRcIjpcIuKmq1wiLFwiYW5nbXNkYWVcIjpcIuKmrFwiLFwiYW5nbXNkYWZcIjpcIuKmrVwiLFwiYW5nbXNkYWdcIjpcIuKmrlwiLFwiYW5nbXNkYWhcIjpcIuKmr1wiLFwiYW5nbXNkXCI6XCLiiKFcIixcImFuZ3J0XCI6XCLiiJ9cIixcImFuZ3J0dmJcIjpcIuKKvlwiLFwiYW5ncnR2YmRcIjpcIuKmnVwiLFwiYW5nc3BoXCI6XCLiiKJcIixcImFuZ3N0XCI6XCLDhVwiLFwiYW5nemFyclwiOlwi4o28XCIsXCJBb2dvblwiOlwixIRcIixcImFvZ29uXCI6XCLEhVwiLFwiQW9wZlwiOlwi8J2UuFwiLFwiYW9wZlwiOlwi8J2VklwiLFwiYXBhY2lyXCI6XCLiqa9cIixcImFwXCI6XCLiiYhcIixcImFwRVwiOlwi4qmwXCIsXCJhcGVcIjpcIuKJilwiLFwiYXBpZFwiOlwi4omLXCIsXCJhcG9zXCI6XCInXCIsXCJBcHBseUZ1bmN0aW9uXCI6XCLigaFcIixcImFwcHJveFwiOlwi4omIXCIsXCJhcHByb3hlcVwiOlwi4omKXCIsXCJBcmluZ1wiOlwiw4VcIixcImFyaW5nXCI6XCLDpVwiLFwiQXNjclwiOlwi8J2SnFwiLFwiYXNjclwiOlwi8J2StlwiLFwiQXNzaWduXCI6XCLiiZRcIixcImFzdFwiOlwiKlwiLFwiYXN5bXBcIjpcIuKJiFwiLFwiYXN5bXBlcVwiOlwi4omNXCIsXCJBdGlsZGVcIjpcIsODXCIsXCJhdGlsZGVcIjpcIsOjXCIsXCJBdW1sXCI6XCLDhFwiLFwiYXVtbFwiOlwiw6RcIixcImF3Y29uaW50XCI6XCLiiLNcIixcImF3aW50XCI6XCLiqJFcIixcImJhY2tjb25nXCI6XCLiiYxcIixcImJhY2tlcHNpbG9uXCI6XCLPtlwiLFwiYmFja3ByaW1lXCI6XCLigLVcIixcImJhY2tzaW1cIjpcIuKIvVwiLFwiYmFja3NpbWVxXCI6XCLii41cIixcIkJhY2tzbGFzaFwiOlwi4oiWXCIsXCJCYXJ2XCI6XCLiq6dcIixcImJhcnZlZVwiOlwi4oq9XCIsXCJiYXJ3ZWRcIjpcIuKMhVwiLFwiQmFyd2VkXCI6XCLijIZcIixcImJhcndlZGdlXCI6XCLijIVcIixcImJicmtcIjpcIuKOtVwiLFwiYmJya3RicmtcIjpcIuKOtlwiLFwiYmNvbmdcIjpcIuKJjFwiLFwiQmN5XCI6XCLQkVwiLFwiYmN5XCI6XCLQsVwiLFwiYmRxdW9cIjpcIuKAnlwiLFwiYmVjYXVzXCI6XCLiiLVcIixcImJlY2F1c2VcIjpcIuKItVwiLFwiQmVjYXVzZVwiOlwi4oi1XCIsXCJiZW1wdHl2XCI6XCLiprBcIixcImJlcHNpXCI6XCLPtlwiLFwiYmVybm91XCI6XCLihKxcIixcIkJlcm5vdWxsaXNcIjpcIuKErFwiLFwiQmV0YVwiOlwizpJcIixcImJldGFcIjpcIs6yXCIsXCJiZXRoXCI6XCLihLZcIixcImJldHdlZW5cIjpcIuKJrFwiLFwiQmZyXCI6XCLwnZSFXCIsXCJiZnJcIjpcIvCdlJ9cIixcImJpZ2NhcFwiOlwi4ouCXCIsXCJiaWdjaXJjXCI6XCLil69cIixcImJpZ2N1cFwiOlwi4ouDXCIsXCJiaWdvZG90XCI6XCLiqIBcIixcImJpZ29wbHVzXCI6XCLiqIFcIixcImJpZ290aW1lc1wiOlwi4qiCXCIsXCJiaWdzcWN1cFwiOlwi4qiGXCIsXCJiaWdzdGFyXCI6XCLimIVcIixcImJpZ3RyaWFuZ2xlZG93blwiOlwi4pa9XCIsXCJiaWd0cmlhbmdsZXVwXCI6XCLilrNcIixcImJpZ3VwbHVzXCI6XCLiqIRcIixcImJpZ3ZlZVwiOlwi4ouBXCIsXCJiaWd3ZWRnZVwiOlwi4ouAXCIsXCJia2Fyb3dcIjpcIuKkjVwiLFwiYmxhY2tsb3plbmdlXCI6XCLip6tcIixcImJsYWNrc3F1YXJlXCI6XCLilqpcIixcImJsYWNrdHJpYW5nbGVcIjpcIuKWtFwiLFwiYmxhY2t0cmlhbmdsZWRvd25cIjpcIuKWvlwiLFwiYmxhY2t0cmlhbmdsZWxlZnRcIjpcIuKXglwiLFwiYmxhY2t0cmlhbmdsZXJpZ2h0XCI6XCLilrhcIixcImJsYW5rXCI6XCLikKNcIixcImJsazEyXCI6XCLilpJcIixcImJsazE0XCI6XCLilpFcIixcImJsazM0XCI6XCLilpNcIixcImJsb2NrXCI6XCLilohcIixcImJuZVwiOlwiPeKDpVwiLFwiYm5lcXVpdlwiOlwi4omh4oOlXCIsXCJiTm90XCI6XCLiq61cIixcImJub3RcIjpcIuKMkFwiLFwiQm9wZlwiOlwi8J2UuVwiLFwiYm9wZlwiOlwi8J2Vk1wiLFwiYm90XCI6XCLiiqVcIixcImJvdHRvbVwiOlwi4oqlXCIsXCJib3d0aWVcIjpcIuKLiFwiLFwiYm94Ym94XCI6XCLip4lcIixcImJveGRsXCI6XCLilJBcIixcImJveGRMXCI6XCLilZVcIixcImJveERsXCI6XCLilZZcIixcImJveERMXCI6XCLilZdcIixcImJveGRyXCI6XCLilIxcIixcImJveGRSXCI6XCLilZJcIixcImJveERyXCI6XCLilZNcIixcImJveERSXCI6XCLilZRcIixcImJveGhcIjpcIuKUgFwiLFwiYm94SFwiOlwi4pWQXCIsXCJib3hoZFwiOlwi4pSsXCIsXCJib3hIZFwiOlwi4pWkXCIsXCJib3hoRFwiOlwi4pWlXCIsXCJib3hIRFwiOlwi4pWmXCIsXCJib3hodVwiOlwi4pS0XCIsXCJib3hIdVwiOlwi4pWnXCIsXCJib3hoVVwiOlwi4pWoXCIsXCJib3hIVVwiOlwi4pWpXCIsXCJib3htaW51c1wiOlwi4oqfXCIsXCJib3hwbHVzXCI6XCLiip5cIixcImJveHRpbWVzXCI6XCLiiqBcIixcImJveHVsXCI6XCLilJhcIixcImJveHVMXCI6XCLilZtcIixcImJveFVsXCI6XCLilZxcIixcImJveFVMXCI6XCLilZ1cIixcImJveHVyXCI6XCLilJRcIixcImJveHVSXCI6XCLilZhcIixcImJveFVyXCI6XCLilZlcIixcImJveFVSXCI6XCLilZpcIixcImJveHZcIjpcIuKUglwiLFwiYm94VlwiOlwi4pWRXCIsXCJib3h2aFwiOlwi4pS8XCIsXCJib3h2SFwiOlwi4pWqXCIsXCJib3hWaFwiOlwi4pWrXCIsXCJib3hWSFwiOlwi4pWsXCIsXCJib3h2bFwiOlwi4pSkXCIsXCJib3h2TFwiOlwi4pWhXCIsXCJib3hWbFwiOlwi4pWiXCIsXCJib3hWTFwiOlwi4pWjXCIsXCJib3h2clwiOlwi4pScXCIsXCJib3h2UlwiOlwi4pWeXCIsXCJib3hWclwiOlwi4pWfXCIsXCJib3hWUlwiOlwi4pWgXCIsXCJicHJpbWVcIjpcIuKAtVwiLFwiYnJldmVcIjpcIsuYXCIsXCJCcmV2ZVwiOlwiy5hcIixcImJydmJhclwiOlwiwqZcIixcImJzY3JcIjpcIvCdkrdcIixcIkJzY3JcIjpcIuKErFwiLFwiYnNlbWlcIjpcIuKBj1wiLFwiYnNpbVwiOlwi4oi9XCIsXCJic2ltZVwiOlwi4ouNXCIsXCJic29sYlwiOlwi4qeFXCIsXCJic29sXCI6XCJcXFxcXCIsXCJic29saHN1YlwiOlwi4p+IXCIsXCJidWxsXCI6XCLigKJcIixcImJ1bGxldFwiOlwi4oCiXCIsXCJidW1wXCI6XCLiiY5cIixcImJ1bXBFXCI6XCLiqq5cIixcImJ1bXBlXCI6XCLiiY9cIixcIkJ1bXBlcVwiOlwi4omOXCIsXCJidW1wZXFcIjpcIuKJj1wiLFwiQ2FjdXRlXCI6XCLEhlwiLFwiY2FjdXRlXCI6XCLEh1wiLFwiY2FwYW5kXCI6XCLiqYRcIixcImNhcGJyY3VwXCI6XCLiqYlcIixcImNhcGNhcFwiOlwi4qmLXCIsXCJjYXBcIjpcIuKIqVwiLFwiQ2FwXCI6XCLii5JcIixcImNhcGN1cFwiOlwi4qmHXCIsXCJjYXBkb3RcIjpcIuKpgFwiLFwiQ2FwaXRhbERpZmZlcmVudGlhbERcIjpcIuKFhVwiLFwiY2Fwc1wiOlwi4oip77iAXCIsXCJjYXJldFwiOlwi4oGBXCIsXCJjYXJvblwiOlwiy4dcIixcIkNheWxleXNcIjpcIuKErVwiLFwiY2NhcHNcIjpcIuKpjVwiLFwiQ2Nhcm9uXCI6XCLEjFwiLFwiY2Nhcm9uXCI6XCLEjVwiLFwiQ2NlZGlsXCI6XCLDh1wiLFwiY2NlZGlsXCI6XCLDp1wiLFwiQ2NpcmNcIjpcIsSIXCIsXCJjY2lyY1wiOlwixIlcIixcIkNjb25pbnRcIjpcIuKIsFwiLFwiY2N1cHNcIjpcIuKpjFwiLFwiY2N1cHNzbVwiOlwi4qmQXCIsXCJDZG90XCI6XCLEilwiLFwiY2RvdFwiOlwixItcIixcImNlZGlsXCI6XCLCuFwiLFwiQ2VkaWxsYVwiOlwiwrhcIixcImNlbXB0eXZcIjpcIuKmslwiLFwiY2VudFwiOlwiwqJcIixcImNlbnRlcmRvdFwiOlwiwrdcIixcIkNlbnRlckRvdFwiOlwiwrdcIixcImNmclwiOlwi8J2UoFwiLFwiQ2ZyXCI6XCLihK1cIixcIkNIY3lcIjpcItCnXCIsXCJjaGN5XCI6XCLRh1wiLFwiY2hlY2tcIjpcIuKck1wiLFwiY2hlY2ttYXJrXCI6XCLinJNcIixcIkNoaVwiOlwizqdcIixcImNoaVwiOlwiz4dcIixcImNpcmNcIjpcIsuGXCIsXCJjaXJjZXFcIjpcIuKJl1wiLFwiY2lyY2xlYXJyb3dsZWZ0XCI6XCLihrpcIixcImNpcmNsZWFycm93cmlnaHRcIjpcIuKGu1wiLFwiY2lyY2xlZGFzdFwiOlwi4oqbXCIsXCJjaXJjbGVkY2lyY1wiOlwi4oqaXCIsXCJjaXJjbGVkZGFzaFwiOlwi4oqdXCIsXCJDaXJjbGVEb3RcIjpcIuKKmVwiLFwiY2lyY2xlZFJcIjpcIsKuXCIsXCJjaXJjbGVkU1wiOlwi4pOIXCIsXCJDaXJjbGVNaW51c1wiOlwi4oqWXCIsXCJDaXJjbGVQbHVzXCI6XCLiipVcIixcIkNpcmNsZVRpbWVzXCI6XCLiipdcIixcImNpclwiOlwi4peLXCIsXCJjaXJFXCI6XCLip4NcIixcImNpcmVcIjpcIuKJl1wiLFwiY2lyZm5pbnRcIjpcIuKokFwiLFwiY2lybWlkXCI6XCLiq69cIixcImNpcnNjaXJcIjpcIuKnglwiLFwiQ2xvY2t3aXNlQ29udG91ckludGVncmFsXCI6XCLiiLJcIixcIkNsb3NlQ3VybHlEb3VibGVRdW90ZVwiOlwi4oCdXCIsXCJDbG9zZUN1cmx5UXVvdGVcIjpcIuKAmVwiLFwiY2x1YnNcIjpcIuKZo1wiLFwiY2x1YnN1aXRcIjpcIuKZo1wiLFwiY29sb25cIjpcIjpcIixcIkNvbG9uXCI6XCLiiLdcIixcIkNvbG9uZVwiOlwi4qm0XCIsXCJjb2xvbmVcIjpcIuKJlFwiLFwiY29sb25lcVwiOlwi4omUXCIsXCJjb21tYVwiOlwiLFwiLFwiY29tbWF0XCI6XCJAXCIsXCJjb21wXCI6XCLiiIFcIixcImNvbXBmblwiOlwi4oiYXCIsXCJjb21wbGVtZW50XCI6XCLiiIFcIixcImNvbXBsZXhlc1wiOlwi4oSCXCIsXCJjb25nXCI6XCLiiYVcIixcImNvbmdkb3RcIjpcIuKprVwiLFwiQ29uZ3J1ZW50XCI6XCLiiaFcIixcImNvbmludFwiOlwi4oiuXCIsXCJDb25pbnRcIjpcIuKIr1wiLFwiQ29udG91ckludGVncmFsXCI6XCLiiK5cIixcImNvcGZcIjpcIvCdlZRcIixcIkNvcGZcIjpcIuKEglwiLFwiY29wcm9kXCI6XCLiiJBcIixcIkNvcHJvZHVjdFwiOlwi4oiQXCIsXCJjb3B5XCI6XCLCqVwiLFwiQ09QWVwiOlwiwqlcIixcImNvcHlzclwiOlwi4oSXXCIsXCJDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsXCI6XCLiiLNcIixcImNyYXJyXCI6XCLihrVcIixcImNyb3NzXCI6XCLinJdcIixcIkNyb3NzXCI6XCLiqK9cIixcIkNzY3JcIjpcIvCdkp5cIixcImNzY3JcIjpcIvCdkrhcIixcImNzdWJcIjpcIuKrj1wiLFwiY3N1YmVcIjpcIuKrkVwiLFwiY3N1cFwiOlwi4quQXCIsXCJjc3VwZVwiOlwi4quSXCIsXCJjdGRvdFwiOlwi4ouvXCIsXCJjdWRhcnJsXCI6XCLipLhcIixcImN1ZGFycnJcIjpcIuKktVwiLFwiY3VlcHJcIjpcIuKLnlwiLFwiY3Vlc2NcIjpcIuKLn1wiLFwiY3VsYXJyXCI6XCLihrZcIixcImN1bGFycnBcIjpcIuKkvVwiLFwiY3VwYnJjYXBcIjpcIuKpiFwiLFwiY3VwY2FwXCI6XCLiqYZcIixcIkN1cENhcFwiOlwi4omNXCIsXCJjdXBcIjpcIuKIqlwiLFwiQ3VwXCI6XCLii5NcIixcImN1cGN1cFwiOlwi4qmKXCIsXCJjdXBkb3RcIjpcIuKKjVwiLFwiY3Vwb3JcIjpcIuKphVwiLFwiY3Vwc1wiOlwi4oiq77iAXCIsXCJjdXJhcnJcIjpcIuKGt1wiLFwiY3VyYXJybVwiOlwi4qS8XCIsXCJjdXJseWVxcHJlY1wiOlwi4oueXCIsXCJjdXJseWVxc3VjY1wiOlwi4oufXCIsXCJjdXJseXZlZVwiOlwi4ouOXCIsXCJjdXJseXdlZGdlXCI6XCLii49cIixcImN1cnJlblwiOlwiwqRcIixcImN1cnZlYXJyb3dsZWZ0XCI6XCLihrZcIixcImN1cnZlYXJyb3dyaWdodFwiOlwi4oa3XCIsXCJjdXZlZVwiOlwi4ouOXCIsXCJjdXdlZFwiOlwi4ouPXCIsXCJjd2NvbmludFwiOlwi4oiyXCIsXCJjd2ludFwiOlwi4oixXCIsXCJjeWxjdHlcIjpcIuKMrVwiLFwiZGFnZ2VyXCI6XCLigKBcIixcIkRhZ2dlclwiOlwi4oChXCIsXCJkYWxldGhcIjpcIuKEuFwiLFwiZGFyclwiOlwi4oaTXCIsXCJEYXJyXCI6XCLihqFcIixcImRBcnJcIjpcIuKHk1wiLFwiZGFzaFwiOlwi4oCQXCIsXCJEYXNodlwiOlwi4qukXCIsXCJkYXNodlwiOlwi4oqjXCIsXCJkYmthcm93XCI6XCLipI9cIixcImRibGFjXCI6XCLLnVwiLFwiRGNhcm9uXCI6XCLEjlwiLFwiZGNhcm9uXCI6XCLEj1wiLFwiRGN5XCI6XCLQlFwiLFwiZGN5XCI6XCLQtFwiLFwiZGRhZ2dlclwiOlwi4oChXCIsXCJkZGFyclwiOlwi4oeKXCIsXCJERFwiOlwi4oWFXCIsXCJkZFwiOlwi4oWGXCIsXCJERG90cmFoZFwiOlwi4qSRXCIsXCJkZG90c2VxXCI6XCLiqbdcIixcImRlZ1wiOlwiwrBcIixcIkRlbFwiOlwi4oiHXCIsXCJEZWx0YVwiOlwizpRcIixcImRlbHRhXCI6XCLOtFwiLFwiZGVtcHR5dlwiOlwi4qaxXCIsXCJkZmlzaHRcIjpcIuKlv1wiLFwiRGZyXCI6XCLwnZSHXCIsXCJkZnJcIjpcIvCdlKFcIixcImRIYXJcIjpcIuKlpVwiLFwiZGhhcmxcIjpcIuKHg1wiLFwiZGhhcnJcIjpcIuKHglwiLFwiRGlhY3JpdGljYWxBY3V0ZVwiOlwiwrRcIixcIkRpYWNyaXRpY2FsRG90XCI6XCLLmVwiLFwiRGlhY3JpdGljYWxEb3VibGVBY3V0ZVwiOlwiy51cIixcIkRpYWNyaXRpY2FsR3JhdmVcIjpcImBcIixcIkRpYWNyaXRpY2FsVGlsZGVcIjpcIsucXCIsXCJkaWFtXCI6XCLii4RcIixcImRpYW1vbmRcIjpcIuKLhFwiLFwiRGlhbW9uZFwiOlwi4ouEXCIsXCJkaWFtb25kc3VpdFwiOlwi4pmmXCIsXCJkaWFtc1wiOlwi4pmmXCIsXCJkaWVcIjpcIsKoXCIsXCJEaWZmZXJlbnRpYWxEXCI6XCLihYZcIixcImRpZ2FtbWFcIjpcIs+dXCIsXCJkaXNpblwiOlwi4ouyXCIsXCJkaXZcIjpcIsO3XCIsXCJkaXZpZGVcIjpcIsO3XCIsXCJkaXZpZGVvbnRpbWVzXCI6XCLii4dcIixcImRpdm9ueFwiOlwi4ouHXCIsXCJESmN5XCI6XCLQglwiLFwiZGpjeVwiOlwi0ZJcIixcImRsY29yblwiOlwi4oyeXCIsXCJkbGNyb3BcIjpcIuKMjVwiLFwiZG9sbGFyXCI6XCIkXCIsXCJEb3BmXCI6XCLwnZS7XCIsXCJkb3BmXCI6XCLwnZWVXCIsXCJEb3RcIjpcIsKoXCIsXCJkb3RcIjpcIsuZXCIsXCJEb3REb3RcIjpcIuKDnFwiLFwiZG90ZXFcIjpcIuKJkFwiLFwiZG90ZXFkb3RcIjpcIuKJkVwiLFwiRG90RXF1YWxcIjpcIuKJkFwiLFwiZG90bWludXNcIjpcIuKIuFwiLFwiZG90cGx1c1wiOlwi4oiUXCIsXCJkb3RzcXVhcmVcIjpcIuKKoVwiLFwiZG91YmxlYmFyd2VkZ2VcIjpcIuKMhlwiLFwiRG91YmxlQ29udG91ckludGVncmFsXCI6XCLiiK9cIixcIkRvdWJsZURvdFwiOlwiwqhcIixcIkRvdWJsZURvd25BcnJvd1wiOlwi4oeTXCIsXCJEb3VibGVMZWZ0QXJyb3dcIjpcIuKHkFwiLFwiRG91YmxlTGVmdFJpZ2h0QXJyb3dcIjpcIuKHlFwiLFwiRG91YmxlTGVmdFRlZVwiOlwi4qukXCIsXCJEb3VibGVMb25nTGVmdEFycm93XCI6XCLin7hcIixcIkRvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvd1wiOlwi4p+6XCIsXCJEb3VibGVMb25nUmlnaHRBcnJvd1wiOlwi4p+5XCIsXCJEb3VibGVSaWdodEFycm93XCI6XCLih5JcIixcIkRvdWJsZVJpZ2h0VGVlXCI6XCLiiqhcIixcIkRvdWJsZVVwQXJyb3dcIjpcIuKHkVwiLFwiRG91YmxlVXBEb3duQXJyb3dcIjpcIuKHlVwiLFwiRG91YmxlVmVydGljYWxCYXJcIjpcIuKIpVwiLFwiRG93bkFycm93QmFyXCI6XCLipJNcIixcImRvd25hcnJvd1wiOlwi4oaTXCIsXCJEb3duQXJyb3dcIjpcIuKGk1wiLFwiRG93bmFycm93XCI6XCLih5NcIixcIkRvd25BcnJvd1VwQXJyb3dcIjpcIuKHtVwiLFwiRG93bkJyZXZlXCI6XCLMkVwiLFwiZG93bmRvd25hcnJvd3NcIjpcIuKHilwiLFwiZG93bmhhcnBvb25sZWZ0XCI6XCLih4NcIixcImRvd25oYXJwb29ucmlnaHRcIjpcIuKHglwiLFwiRG93bkxlZnRSaWdodFZlY3RvclwiOlwi4qWQXCIsXCJEb3duTGVmdFRlZVZlY3RvclwiOlwi4qWeXCIsXCJEb3duTGVmdFZlY3RvckJhclwiOlwi4qWWXCIsXCJEb3duTGVmdFZlY3RvclwiOlwi4oa9XCIsXCJEb3duUmlnaHRUZWVWZWN0b3JcIjpcIuKln1wiLFwiRG93blJpZ2h0VmVjdG9yQmFyXCI6XCLipZdcIixcIkRvd25SaWdodFZlY3RvclwiOlwi4oeBXCIsXCJEb3duVGVlQXJyb3dcIjpcIuKGp1wiLFwiRG93blRlZVwiOlwi4oqkXCIsXCJkcmJrYXJvd1wiOlwi4qSQXCIsXCJkcmNvcm5cIjpcIuKMn1wiLFwiZHJjcm9wXCI6XCLijIxcIixcIkRzY3JcIjpcIvCdkp9cIixcImRzY3JcIjpcIvCdkrlcIixcIkRTY3lcIjpcItCFXCIsXCJkc2N5XCI6XCLRlVwiLFwiZHNvbFwiOlwi4qe2XCIsXCJEc3Ryb2tcIjpcIsSQXCIsXCJkc3Ryb2tcIjpcIsSRXCIsXCJkdGRvdFwiOlwi4ouxXCIsXCJkdHJpXCI6XCLilr9cIixcImR0cmlmXCI6XCLilr5cIixcImR1YXJyXCI6XCLih7VcIixcImR1aGFyXCI6XCLipa9cIixcImR3YW5nbGVcIjpcIuKmplwiLFwiRFpjeVwiOlwi0I9cIixcImR6Y3lcIjpcItGfXCIsXCJkemlncmFyclwiOlwi4p+/XCIsXCJFYWN1dGVcIjpcIsOJXCIsXCJlYWN1dGVcIjpcIsOpXCIsXCJlYXN0ZXJcIjpcIuKprlwiLFwiRWNhcm9uXCI6XCLEmlwiLFwiZWNhcm9uXCI6XCLEm1wiLFwiRWNpcmNcIjpcIsOKXCIsXCJlY2lyY1wiOlwiw6pcIixcImVjaXJcIjpcIuKJllwiLFwiZWNvbG9uXCI6XCLiiZVcIixcIkVjeVwiOlwi0K1cIixcImVjeVwiOlwi0Y1cIixcImVERG90XCI6XCLiqbdcIixcIkVkb3RcIjpcIsSWXCIsXCJlZG90XCI6XCLEl1wiLFwiZURvdFwiOlwi4omRXCIsXCJlZVwiOlwi4oWHXCIsXCJlZkRvdFwiOlwi4omSXCIsXCJFZnJcIjpcIvCdlIhcIixcImVmclwiOlwi8J2UolwiLFwiZWdcIjpcIuKqmlwiLFwiRWdyYXZlXCI6XCLDiFwiLFwiZWdyYXZlXCI6XCLDqFwiLFwiZWdzXCI6XCLiqpZcIixcImVnc2RvdFwiOlwi4qqYXCIsXCJlbFwiOlwi4qqZXCIsXCJFbGVtZW50XCI6XCLiiIhcIixcImVsaW50ZXJzXCI6XCLij6dcIixcImVsbFwiOlwi4oSTXCIsXCJlbHNcIjpcIuKqlVwiLFwiZWxzZG90XCI6XCLiqpdcIixcIkVtYWNyXCI6XCLEklwiLFwiZW1hY3JcIjpcIsSTXCIsXCJlbXB0eVwiOlwi4oiFXCIsXCJlbXB0eXNldFwiOlwi4oiFXCIsXCJFbXB0eVNtYWxsU3F1YXJlXCI6XCLil7tcIixcImVtcHR5dlwiOlwi4oiFXCIsXCJFbXB0eVZlcnlTbWFsbFNxdWFyZVwiOlwi4parXCIsXCJlbXNwMTNcIjpcIuKAhFwiLFwiZW1zcDE0XCI6XCLigIVcIixcImVtc3BcIjpcIuKAg1wiLFwiRU5HXCI6XCLFilwiLFwiZW5nXCI6XCLFi1wiLFwiZW5zcFwiOlwi4oCCXCIsXCJFb2dvblwiOlwixJhcIixcImVvZ29uXCI6XCLEmVwiLFwiRW9wZlwiOlwi8J2UvFwiLFwiZW9wZlwiOlwi8J2VllwiLFwiZXBhclwiOlwi4ouVXCIsXCJlcGFyc2xcIjpcIuKno1wiLFwiZXBsdXNcIjpcIuKpsVwiLFwiZXBzaVwiOlwizrVcIixcIkVwc2lsb25cIjpcIs6VXCIsXCJlcHNpbG9uXCI6XCLOtVwiLFwiZXBzaXZcIjpcIs+1XCIsXCJlcWNpcmNcIjpcIuKJllwiLFwiZXFjb2xvblwiOlwi4omVXCIsXCJlcXNpbVwiOlwi4omCXCIsXCJlcXNsYW50Z3RyXCI6XCLiqpZcIixcImVxc2xhbnRsZXNzXCI6XCLiqpVcIixcIkVxdWFsXCI6XCLiqbVcIixcImVxdWFsc1wiOlwiPVwiLFwiRXF1YWxUaWxkZVwiOlwi4omCXCIsXCJlcXVlc3RcIjpcIuKJn1wiLFwiRXF1aWxpYnJpdW1cIjpcIuKHjFwiLFwiZXF1aXZcIjpcIuKJoVwiLFwiZXF1aXZERFwiOlwi4qm4XCIsXCJlcXZwYXJzbFwiOlwi4qelXCIsXCJlcmFyclwiOlwi4qWxXCIsXCJlckRvdFwiOlwi4omTXCIsXCJlc2NyXCI6XCLihK9cIixcIkVzY3JcIjpcIuKEsFwiLFwiZXNkb3RcIjpcIuKJkFwiLFwiRXNpbVwiOlwi4qmzXCIsXCJlc2ltXCI6XCLiiYJcIixcIkV0YVwiOlwizpdcIixcImV0YVwiOlwizrdcIixcIkVUSFwiOlwiw5BcIixcImV0aFwiOlwiw7BcIixcIkV1bWxcIjpcIsOLXCIsXCJldW1sXCI6XCLDq1wiLFwiZXVyb1wiOlwi4oKsXCIsXCJleGNsXCI6XCIhXCIsXCJleGlzdFwiOlwi4oiDXCIsXCJFeGlzdHNcIjpcIuKIg1wiLFwiZXhwZWN0YXRpb25cIjpcIuKEsFwiLFwiZXhwb25lbnRpYWxlXCI6XCLihYdcIixcIkV4cG9uZW50aWFsRVwiOlwi4oWHXCIsXCJmYWxsaW5nZG90c2VxXCI6XCLiiZJcIixcIkZjeVwiOlwi0KRcIixcImZjeVwiOlwi0YRcIixcImZlbWFsZVwiOlwi4pmAXCIsXCJmZmlsaWdcIjpcIu+sg1wiLFwiZmZsaWdcIjpcIu+sgFwiLFwiZmZsbGlnXCI6XCLvrIRcIixcIkZmclwiOlwi8J2UiVwiLFwiZmZyXCI6XCLwnZSjXCIsXCJmaWxpZ1wiOlwi76yBXCIsXCJGaWxsZWRTbWFsbFNxdWFyZVwiOlwi4pe8XCIsXCJGaWxsZWRWZXJ5U21hbGxTcXVhcmVcIjpcIuKWqlwiLFwiZmpsaWdcIjpcImZqXCIsXCJmbGF0XCI6XCLima1cIixcImZsbGlnXCI6XCLvrIJcIixcImZsdG5zXCI6XCLilrFcIixcImZub2ZcIjpcIsaSXCIsXCJGb3BmXCI6XCLwnZS9XCIsXCJmb3BmXCI6XCLwnZWXXCIsXCJmb3JhbGxcIjpcIuKIgFwiLFwiRm9yQWxsXCI6XCLiiIBcIixcImZvcmtcIjpcIuKLlFwiLFwiZm9ya3ZcIjpcIuKrmVwiLFwiRm91cmllcnRyZlwiOlwi4oSxXCIsXCJmcGFydGludFwiOlwi4qiNXCIsXCJmcmFjMTJcIjpcIsK9XCIsXCJmcmFjMTNcIjpcIuKFk1wiLFwiZnJhYzE0XCI6XCLCvFwiLFwiZnJhYzE1XCI6XCLihZVcIixcImZyYWMxNlwiOlwi4oWZXCIsXCJmcmFjMThcIjpcIuKFm1wiLFwiZnJhYzIzXCI6XCLihZRcIixcImZyYWMyNVwiOlwi4oWWXCIsXCJmcmFjMzRcIjpcIsK+XCIsXCJmcmFjMzVcIjpcIuKFl1wiLFwiZnJhYzM4XCI6XCLihZxcIixcImZyYWM0NVwiOlwi4oWYXCIsXCJmcmFjNTZcIjpcIuKFmlwiLFwiZnJhYzU4XCI6XCLihZ1cIixcImZyYWM3OFwiOlwi4oWeXCIsXCJmcmFzbFwiOlwi4oGEXCIsXCJmcm93blwiOlwi4oyiXCIsXCJmc2NyXCI6XCLwnZK7XCIsXCJGc2NyXCI6XCLihLFcIixcImdhY3V0ZVwiOlwix7VcIixcIkdhbW1hXCI6XCLOk1wiLFwiZ2FtbWFcIjpcIs6zXCIsXCJHYW1tYWRcIjpcIs+cXCIsXCJnYW1tYWRcIjpcIs+dXCIsXCJnYXBcIjpcIuKqhlwiLFwiR2JyZXZlXCI6XCLEnlwiLFwiZ2JyZXZlXCI6XCLEn1wiLFwiR2NlZGlsXCI6XCLEolwiLFwiR2NpcmNcIjpcIsScXCIsXCJnY2lyY1wiOlwixJ1cIixcIkdjeVwiOlwi0JNcIixcImdjeVwiOlwi0LNcIixcIkdkb3RcIjpcIsSgXCIsXCJnZG90XCI6XCLEoVwiLFwiZ2VcIjpcIuKJpVwiLFwiZ0VcIjpcIuKJp1wiLFwiZ0VsXCI6XCLiqoxcIixcImdlbFwiOlwi4oubXCIsXCJnZXFcIjpcIuKJpVwiLFwiZ2VxcVwiOlwi4omnXCIsXCJnZXFzbGFudFwiOlwi4qm+XCIsXCJnZXNjY1wiOlwi4qqpXCIsXCJnZXNcIjpcIuKpvlwiLFwiZ2VzZG90XCI6XCLiqoBcIixcImdlc2RvdG9cIjpcIuKqglwiLFwiZ2VzZG90b2xcIjpcIuKqhFwiLFwiZ2VzbFwiOlwi4oub77iAXCIsXCJnZXNsZXNcIjpcIuKqlFwiLFwiR2ZyXCI6XCLwnZSKXCIsXCJnZnJcIjpcIvCdlKRcIixcImdnXCI6XCLiiatcIixcIkdnXCI6XCLii5lcIixcImdnZ1wiOlwi4ouZXCIsXCJnaW1lbFwiOlwi4oS3XCIsXCJHSmN5XCI6XCLQg1wiLFwiZ2pjeVwiOlwi0ZNcIixcImdsYVwiOlwi4qqlXCIsXCJnbFwiOlwi4om3XCIsXCJnbEVcIjpcIuKqklwiLFwiZ2xqXCI6XCLiqqRcIixcImduYXBcIjpcIuKqilwiLFwiZ25hcHByb3hcIjpcIuKqilwiLFwiZ25lXCI6XCLiqohcIixcImduRVwiOlwi4ompXCIsXCJnbmVxXCI6XCLiqohcIixcImduZXFxXCI6XCLiialcIixcImduc2ltXCI6XCLii6dcIixcIkdvcGZcIjpcIvCdlL5cIixcImdvcGZcIjpcIvCdlZhcIixcImdyYXZlXCI6XCJgXCIsXCJHcmVhdGVyRXF1YWxcIjpcIuKJpVwiLFwiR3JlYXRlckVxdWFsTGVzc1wiOlwi4oubXCIsXCJHcmVhdGVyRnVsbEVxdWFsXCI6XCLiiadcIixcIkdyZWF0ZXJHcmVhdGVyXCI6XCLiqqJcIixcIkdyZWF0ZXJMZXNzXCI6XCLiibdcIixcIkdyZWF0ZXJTbGFudEVxdWFsXCI6XCLiqb5cIixcIkdyZWF0ZXJUaWxkZVwiOlwi4omzXCIsXCJHc2NyXCI6XCLwnZKiXCIsXCJnc2NyXCI6XCLihIpcIixcImdzaW1cIjpcIuKJs1wiLFwiZ3NpbWVcIjpcIuKqjlwiLFwiZ3NpbWxcIjpcIuKqkFwiLFwiZ3RjY1wiOlwi4qqnXCIsXCJndGNpclwiOlwi4qm6XCIsXCJndFwiOlwiPlwiLFwiR1RcIjpcIj5cIixcIkd0XCI6XCLiiatcIixcImd0ZG90XCI6XCLii5dcIixcImd0bFBhclwiOlwi4qaVXCIsXCJndHF1ZXN0XCI6XCLiqbxcIixcImd0cmFwcHJveFwiOlwi4qqGXCIsXCJndHJhcnJcIjpcIuKluFwiLFwiZ3RyZG90XCI6XCLii5dcIixcImd0cmVxbGVzc1wiOlwi4oubXCIsXCJndHJlcXFsZXNzXCI6XCLiqoxcIixcImd0cmxlc3NcIjpcIuKJt1wiLFwiZ3Ryc2ltXCI6XCLiibNcIixcImd2ZXJ0bmVxcVwiOlwi4omp77iAXCIsXCJndm5FXCI6XCLiianvuIBcIixcIkhhY2VrXCI6XCLLh1wiLFwiaGFpcnNwXCI6XCLigIpcIixcImhhbGZcIjpcIsK9XCIsXCJoYW1pbHRcIjpcIuKEi1wiLFwiSEFSRGN5XCI6XCLQqlwiLFwiaGFyZGN5XCI6XCLRilwiLFwiaGFycmNpclwiOlwi4qWIXCIsXCJoYXJyXCI6XCLihpRcIixcImhBcnJcIjpcIuKHlFwiLFwiaGFycndcIjpcIuKGrVwiLFwiSGF0XCI6XCJeXCIsXCJoYmFyXCI6XCLihI9cIixcIkhjaXJjXCI6XCLEpFwiLFwiaGNpcmNcIjpcIsSlXCIsXCJoZWFydHNcIjpcIuKZpVwiLFwiaGVhcnRzdWl0XCI6XCLimaVcIixcImhlbGxpcFwiOlwi4oCmXCIsXCJoZXJjb25cIjpcIuKKuVwiLFwiaGZyXCI6XCLwnZSlXCIsXCJIZnJcIjpcIuKEjFwiLFwiSGlsYmVydFNwYWNlXCI6XCLihItcIixcImhrc2Vhcm93XCI6XCLipKVcIixcImhrc3dhcm93XCI6XCLipKZcIixcImhvYXJyXCI6XCLih79cIixcImhvbXRodFwiOlwi4oi7XCIsXCJob29rbGVmdGFycm93XCI6XCLihqlcIixcImhvb2tyaWdodGFycm93XCI6XCLihqpcIixcImhvcGZcIjpcIvCdlZlcIixcIkhvcGZcIjpcIuKEjVwiLFwiaG9yYmFyXCI6XCLigJVcIixcIkhvcml6b250YWxMaW5lXCI6XCLilIBcIixcImhzY3JcIjpcIvCdkr1cIixcIkhzY3JcIjpcIuKEi1wiLFwiaHNsYXNoXCI6XCLihI9cIixcIkhzdHJva1wiOlwixKZcIixcImhzdHJva1wiOlwixKdcIixcIkh1bXBEb3duSHVtcFwiOlwi4omOXCIsXCJIdW1wRXF1YWxcIjpcIuKJj1wiLFwiaHlidWxsXCI6XCLigYNcIixcImh5cGhlblwiOlwi4oCQXCIsXCJJYWN1dGVcIjpcIsONXCIsXCJpYWN1dGVcIjpcIsOtXCIsXCJpY1wiOlwi4oGjXCIsXCJJY2lyY1wiOlwiw45cIixcImljaXJjXCI6XCLDrlwiLFwiSWN5XCI6XCLQmFwiLFwiaWN5XCI6XCLQuFwiLFwiSWRvdFwiOlwixLBcIixcIklFY3lcIjpcItCVXCIsXCJpZWN5XCI6XCLQtVwiLFwiaWV4Y2xcIjpcIsKhXCIsXCJpZmZcIjpcIuKHlFwiLFwiaWZyXCI6XCLwnZSmXCIsXCJJZnJcIjpcIuKEkVwiLFwiSWdyYXZlXCI6XCLDjFwiLFwiaWdyYXZlXCI6XCLDrFwiLFwiaWlcIjpcIuKFiFwiLFwiaWlpaW50XCI6XCLiqIxcIixcImlpaW50XCI6XCLiiK1cIixcImlpbmZpblwiOlwi4qecXCIsXCJpaW90YVwiOlwi4oSpXCIsXCJJSmxpZ1wiOlwixLJcIixcImlqbGlnXCI6XCLEs1wiLFwiSW1hY3JcIjpcIsSqXCIsXCJpbWFjclwiOlwixKtcIixcImltYWdlXCI6XCLihJFcIixcIkltYWdpbmFyeUlcIjpcIuKFiFwiLFwiaW1hZ2xpbmVcIjpcIuKEkFwiLFwiaW1hZ3BhcnRcIjpcIuKEkVwiLFwiaW1hdGhcIjpcIsSxXCIsXCJJbVwiOlwi4oSRXCIsXCJpbW9mXCI6XCLiirdcIixcImltcGVkXCI6XCLGtVwiLFwiSW1wbGllc1wiOlwi4oeSXCIsXCJpbmNhcmVcIjpcIuKEhVwiLFwiaW5cIjpcIuKIiFwiLFwiaW5maW5cIjpcIuKInlwiLFwiaW5maW50aWVcIjpcIuKnnVwiLFwiaW5vZG90XCI6XCLEsVwiLFwiaW50Y2FsXCI6XCLiirpcIixcImludFwiOlwi4oirXCIsXCJJbnRcIjpcIuKIrFwiLFwiaW50ZWdlcnNcIjpcIuKEpFwiLFwiSW50ZWdyYWxcIjpcIuKIq1wiLFwiaW50ZXJjYWxcIjpcIuKKulwiLFwiSW50ZXJzZWN0aW9uXCI6XCLii4JcIixcImludGxhcmhrXCI6XCLiqJdcIixcImludHByb2RcIjpcIuKovFwiLFwiSW52aXNpYmxlQ29tbWFcIjpcIuKBo1wiLFwiSW52aXNpYmxlVGltZXNcIjpcIuKBolwiLFwiSU9jeVwiOlwi0IFcIixcImlvY3lcIjpcItGRXCIsXCJJb2dvblwiOlwixK5cIixcImlvZ29uXCI6XCLEr1wiLFwiSW9wZlwiOlwi8J2VgFwiLFwiaW9wZlwiOlwi8J2VmlwiLFwiSW90YVwiOlwizplcIixcImlvdGFcIjpcIs65XCIsXCJpcHJvZFwiOlwi4qi8XCIsXCJpcXVlc3RcIjpcIsK/XCIsXCJpc2NyXCI6XCLwnZK+XCIsXCJJc2NyXCI6XCLihJBcIixcImlzaW5cIjpcIuKIiFwiLFwiaXNpbmRvdFwiOlwi4ou1XCIsXCJpc2luRVwiOlwi4ou5XCIsXCJpc2luc1wiOlwi4ou0XCIsXCJpc2luc3ZcIjpcIuKLs1wiLFwiaXNpbnZcIjpcIuKIiFwiLFwiaXRcIjpcIuKBolwiLFwiSXRpbGRlXCI6XCLEqFwiLFwiaXRpbGRlXCI6XCLEqVwiLFwiSXVrY3lcIjpcItCGXCIsXCJpdWtjeVwiOlwi0ZZcIixcIkl1bWxcIjpcIsOPXCIsXCJpdW1sXCI6XCLDr1wiLFwiSmNpcmNcIjpcIsS0XCIsXCJqY2lyY1wiOlwixLVcIixcIkpjeVwiOlwi0JlcIixcImpjeVwiOlwi0LlcIixcIkpmclwiOlwi8J2UjVwiLFwiamZyXCI6XCLwnZSnXCIsXCJqbWF0aFwiOlwiyLdcIixcIkpvcGZcIjpcIvCdlYFcIixcImpvcGZcIjpcIvCdlZtcIixcIkpzY3JcIjpcIvCdkqVcIixcImpzY3JcIjpcIvCdkr9cIixcIkpzZXJjeVwiOlwi0IhcIixcImpzZXJjeVwiOlwi0ZhcIixcIkp1a2N5XCI6XCLQhFwiLFwianVrY3lcIjpcItGUXCIsXCJLYXBwYVwiOlwizppcIixcImthcHBhXCI6XCLOulwiLFwia2FwcGF2XCI6XCLPsFwiLFwiS2NlZGlsXCI6XCLEtlwiLFwia2NlZGlsXCI6XCLEt1wiLFwiS2N5XCI6XCLQmlwiLFwia2N5XCI6XCLQulwiLFwiS2ZyXCI6XCLwnZSOXCIsXCJrZnJcIjpcIvCdlKhcIixcImtncmVlblwiOlwixLhcIixcIktIY3lcIjpcItClXCIsXCJraGN5XCI6XCLRhVwiLFwiS0pjeVwiOlwi0IxcIixcImtqY3lcIjpcItGcXCIsXCJLb3BmXCI6XCLwnZWCXCIsXCJrb3BmXCI6XCLwnZWcXCIsXCJLc2NyXCI6XCLwnZKmXCIsXCJrc2NyXCI6XCLwnZOAXCIsXCJsQWFyclwiOlwi4oeaXCIsXCJMYWN1dGVcIjpcIsS5XCIsXCJsYWN1dGVcIjpcIsS6XCIsXCJsYWVtcHR5dlwiOlwi4qa0XCIsXCJsYWdyYW5cIjpcIuKEklwiLFwiTGFtYmRhXCI6XCLOm1wiLFwibGFtYmRhXCI6XCLOu1wiLFwibGFuZ1wiOlwi4p+oXCIsXCJMYW5nXCI6XCLin6pcIixcImxhbmdkXCI6XCLippFcIixcImxhbmdsZVwiOlwi4p+oXCIsXCJsYXBcIjpcIuKqhVwiLFwiTGFwbGFjZXRyZlwiOlwi4oSSXCIsXCJsYXF1b1wiOlwiwqtcIixcImxhcnJiXCI6XCLih6RcIixcImxhcnJiZnNcIjpcIuKkn1wiLFwibGFyclwiOlwi4oaQXCIsXCJMYXJyXCI6XCLihp5cIixcImxBcnJcIjpcIuKHkFwiLFwibGFycmZzXCI6XCLipJ1cIixcImxhcnJoa1wiOlwi4oapXCIsXCJsYXJybHBcIjpcIuKGq1wiLFwibGFycnBsXCI6XCLipLlcIixcImxhcnJzaW1cIjpcIuKls1wiLFwibGFycnRsXCI6XCLihqJcIixcImxhdGFpbFwiOlwi4qSZXCIsXCJsQXRhaWxcIjpcIuKkm1wiLFwibGF0XCI6XCLiqqtcIixcImxhdGVcIjpcIuKqrVwiLFwibGF0ZXNcIjpcIuKqre+4gFwiLFwibGJhcnJcIjpcIuKkjFwiLFwibEJhcnJcIjpcIuKkjlwiLFwibGJicmtcIjpcIuKdslwiLFwibGJyYWNlXCI6XCJ7XCIsXCJsYnJhY2tcIjpcIltcIixcImxicmtlXCI6XCLipotcIixcImxicmtzbGRcIjpcIuKmj1wiLFwibGJya3NsdVwiOlwi4qaNXCIsXCJMY2Fyb25cIjpcIsS9XCIsXCJsY2Fyb25cIjpcIsS+XCIsXCJMY2VkaWxcIjpcIsS7XCIsXCJsY2VkaWxcIjpcIsS8XCIsXCJsY2VpbFwiOlwi4oyIXCIsXCJsY3ViXCI6XCJ7XCIsXCJMY3lcIjpcItCbXCIsXCJsY3lcIjpcItC7XCIsXCJsZGNhXCI6XCLipLZcIixcImxkcXVvXCI6XCLigJxcIixcImxkcXVvclwiOlwi4oCeXCIsXCJsZHJkaGFyXCI6XCLipadcIixcImxkcnVzaGFyXCI6XCLipYtcIixcImxkc2hcIjpcIuKGslwiLFwibGVcIjpcIuKJpFwiLFwibEVcIjpcIuKJplwiLFwiTGVmdEFuZ2xlQnJhY2tldFwiOlwi4p+oXCIsXCJMZWZ0QXJyb3dCYXJcIjpcIuKHpFwiLFwibGVmdGFycm93XCI6XCLihpBcIixcIkxlZnRBcnJvd1wiOlwi4oaQXCIsXCJMZWZ0YXJyb3dcIjpcIuKHkFwiLFwiTGVmdEFycm93UmlnaHRBcnJvd1wiOlwi4oeGXCIsXCJsZWZ0YXJyb3d0YWlsXCI6XCLihqJcIixcIkxlZnRDZWlsaW5nXCI6XCLijIhcIixcIkxlZnREb3VibGVCcmFja2V0XCI6XCLin6ZcIixcIkxlZnREb3duVGVlVmVjdG9yXCI6XCLipaFcIixcIkxlZnREb3duVmVjdG9yQmFyXCI6XCLipZlcIixcIkxlZnREb3duVmVjdG9yXCI6XCLih4NcIixcIkxlZnRGbG9vclwiOlwi4oyKXCIsXCJsZWZ0aGFycG9vbmRvd25cIjpcIuKGvVwiLFwibGVmdGhhcnBvb251cFwiOlwi4oa8XCIsXCJsZWZ0bGVmdGFycm93c1wiOlwi4oeHXCIsXCJsZWZ0cmlnaHRhcnJvd1wiOlwi4oaUXCIsXCJMZWZ0UmlnaHRBcnJvd1wiOlwi4oaUXCIsXCJMZWZ0cmlnaHRhcnJvd1wiOlwi4oeUXCIsXCJsZWZ0cmlnaHRhcnJvd3NcIjpcIuKHhlwiLFwibGVmdHJpZ2h0aGFycG9vbnNcIjpcIuKHi1wiLFwibGVmdHJpZ2h0c3F1aWdhcnJvd1wiOlwi4oatXCIsXCJMZWZ0UmlnaHRWZWN0b3JcIjpcIuKljlwiLFwiTGVmdFRlZUFycm93XCI6XCLihqRcIixcIkxlZnRUZWVcIjpcIuKKo1wiLFwiTGVmdFRlZVZlY3RvclwiOlwi4qWaXCIsXCJsZWZ0dGhyZWV0aW1lc1wiOlwi4ouLXCIsXCJMZWZ0VHJpYW5nbGVCYXJcIjpcIuKnj1wiLFwiTGVmdFRyaWFuZ2xlXCI6XCLiirJcIixcIkxlZnRUcmlhbmdsZUVxdWFsXCI6XCLiirRcIixcIkxlZnRVcERvd25WZWN0b3JcIjpcIuKlkVwiLFwiTGVmdFVwVGVlVmVjdG9yXCI6XCLipaBcIixcIkxlZnRVcFZlY3RvckJhclwiOlwi4qWYXCIsXCJMZWZ0VXBWZWN0b3JcIjpcIuKGv1wiLFwiTGVmdFZlY3RvckJhclwiOlwi4qWSXCIsXCJMZWZ0VmVjdG9yXCI6XCLihrxcIixcImxFZ1wiOlwi4qqLXCIsXCJsZWdcIjpcIuKLmlwiLFwibGVxXCI6XCLiiaRcIixcImxlcXFcIjpcIuKJplwiLFwibGVxc2xhbnRcIjpcIuKpvVwiLFwibGVzY2NcIjpcIuKqqFwiLFwibGVzXCI6XCLiqb1cIixcImxlc2RvdFwiOlwi4qm/XCIsXCJsZXNkb3RvXCI6XCLiqoFcIixcImxlc2RvdG9yXCI6XCLiqoNcIixcImxlc2dcIjpcIuKLmu+4gFwiLFwibGVzZ2VzXCI6XCLiqpNcIixcImxlc3NhcHByb3hcIjpcIuKqhVwiLFwibGVzc2RvdFwiOlwi4ouWXCIsXCJsZXNzZXFndHJcIjpcIuKLmlwiLFwibGVzc2VxcWd0clwiOlwi4qqLXCIsXCJMZXNzRXF1YWxHcmVhdGVyXCI6XCLii5pcIixcIkxlc3NGdWxsRXF1YWxcIjpcIuKJplwiLFwiTGVzc0dyZWF0ZXJcIjpcIuKJtlwiLFwibGVzc2d0clwiOlwi4om2XCIsXCJMZXNzTGVzc1wiOlwi4qqhXCIsXCJsZXNzc2ltXCI6XCLiibJcIixcIkxlc3NTbGFudEVxdWFsXCI6XCLiqb1cIixcIkxlc3NUaWxkZVwiOlwi4omyXCIsXCJsZmlzaHRcIjpcIuKlvFwiLFwibGZsb29yXCI6XCLijIpcIixcIkxmclwiOlwi8J2Uj1wiLFwibGZyXCI6XCLwnZSpXCIsXCJsZ1wiOlwi4om2XCIsXCJsZ0VcIjpcIuKqkVwiLFwibEhhclwiOlwi4qWiXCIsXCJsaGFyZFwiOlwi4oa9XCIsXCJsaGFydVwiOlwi4oa8XCIsXCJsaGFydWxcIjpcIuKlqlwiLFwibGhibGtcIjpcIuKWhFwiLFwiTEpjeVwiOlwi0IlcIixcImxqY3lcIjpcItGZXCIsXCJsbGFyclwiOlwi4oeHXCIsXCJsbFwiOlwi4omqXCIsXCJMbFwiOlwi4ouYXCIsXCJsbGNvcm5lclwiOlwi4oyeXCIsXCJMbGVmdGFycm93XCI6XCLih5pcIixcImxsaGFyZFwiOlwi4qWrXCIsXCJsbHRyaVwiOlwi4pe6XCIsXCJMbWlkb3RcIjpcIsS/XCIsXCJsbWlkb3RcIjpcIsWAXCIsXCJsbW91c3RhY2hlXCI6XCLijrBcIixcImxtb3VzdFwiOlwi4o6wXCIsXCJsbmFwXCI6XCLiqolcIixcImxuYXBwcm94XCI6XCLiqolcIixcImxuZVwiOlwi4qqHXCIsXCJsbkVcIjpcIuKJqFwiLFwibG5lcVwiOlwi4qqHXCIsXCJsbmVxcVwiOlwi4omoXCIsXCJsbnNpbVwiOlwi4oumXCIsXCJsb2FuZ1wiOlwi4p+sXCIsXCJsb2FyclwiOlwi4oe9XCIsXCJsb2Jya1wiOlwi4p+mXCIsXCJsb25nbGVmdGFycm93XCI6XCLin7VcIixcIkxvbmdMZWZ0QXJyb3dcIjpcIuKftVwiLFwiTG9uZ2xlZnRhcnJvd1wiOlwi4p+4XCIsXCJsb25nbGVmdHJpZ2h0YXJyb3dcIjpcIuKft1wiLFwiTG9uZ0xlZnRSaWdodEFycm93XCI6XCLin7dcIixcIkxvbmdsZWZ0cmlnaHRhcnJvd1wiOlwi4p+6XCIsXCJsb25nbWFwc3RvXCI6XCLin7xcIixcImxvbmdyaWdodGFycm93XCI6XCLin7ZcIixcIkxvbmdSaWdodEFycm93XCI6XCLin7ZcIixcIkxvbmdyaWdodGFycm93XCI6XCLin7lcIixcImxvb3BhcnJvd2xlZnRcIjpcIuKGq1wiLFwibG9vcGFycm93cmlnaHRcIjpcIuKGrFwiLFwibG9wYXJcIjpcIuKmhVwiLFwiTG9wZlwiOlwi8J2Vg1wiLFwibG9wZlwiOlwi8J2VnVwiLFwibG9wbHVzXCI6XCLiqK1cIixcImxvdGltZXNcIjpcIuKotFwiLFwibG93YXN0XCI6XCLiiJdcIixcImxvd2JhclwiOlwiX1wiLFwiTG93ZXJMZWZ0QXJyb3dcIjpcIuKGmVwiLFwiTG93ZXJSaWdodEFycm93XCI6XCLihphcIixcImxvelwiOlwi4peKXCIsXCJsb3plbmdlXCI6XCLil4pcIixcImxvemZcIjpcIuKnq1wiLFwibHBhclwiOlwiKFwiLFwibHBhcmx0XCI6XCLippNcIixcImxyYXJyXCI6XCLih4ZcIixcImxyY29ybmVyXCI6XCLijJ9cIixcImxyaGFyXCI6XCLih4tcIixcImxyaGFyZFwiOlwi4qWtXCIsXCJscm1cIjpcIuKAjlwiLFwibHJ0cmlcIjpcIuKKv1wiLFwibHNhcXVvXCI6XCLigLlcIixcImxzY3JcIjpcIvCdk4FcIixcIkxzY3JcIjpcIuKEklwiLFwibHNoXCI6XCLihrBcIixcIkxzaFwiOlwi4oawXCIsXCJsc2ltXCI6XCLiibJcIixcImxzaW1lXCI6XCLiqo1cIixcImxzaW1nXCI6XCLiqo9cIixcImxzcWJcIjpcIltcIixcImxzcXVvXCI6XCLigJhcIixcImxzcXVvclwiOlwi4oCaXCIsXCJMc3Ryb2tcIjpcIsWBXCIsXCJsc3Ryb2tcIjpcIsWCXCIsXCJsdGNjXCI6XCLiqqZcIixcImx0Y2lyXCI6XCLiqblcIixcImx0XCI6XCI8XCIsXCJMVFwiOlwiPFwiLFwiTHRcIjpcIuKJqlwiLFwibHRkb3RcIjpcIuKLllwiLFwibHRocmVlXCI6XCLii4tcIixcImx0aW1lc1wiOlwi4ouJXCIsXCJsdGxhcnJcIjpcIuKltlwiLFwibHRxdWVzdFwiOlwi4qm7XCIsXCJsdHJpXCI6XCLil4NcIixcImx0cmllXCI6XCLiirRcIixcImx0cmlmXCI6XCLil4JcIixcImx0clBhclwiOlwi4qaWXCIsXCJsdXJkc2hhclwiOlwi4qWKXCIsXCJsdXJ1aGFyXCI6XCLipaZcIixcImx2ZXJ0bmVxcVwiOlwi4omo77iAXCIsXCJsdm5FXCI6XCLiiajvuIBcIixcIm1hY3JcIjpcIsKvXCIsXCJtYWxlXCI6XCLimYJcIixcIm1hbHRcIjpcIuKcoFwiLFwibWFsdGVzZVwiOlwi4pygXCIsXCJNYXBcIjpcIuKkhVwiLFwibWFwXCI6XCLihqZcIixcIm1hcHN0b1wiOlwi4oamXCIsXCJtYXBzdG9kb3duXCI6XCLihqdcIixcIm1hcHN0b2xlZnRcIjpcIuKGpFwiLFwibWFwc3RvdXBcIjpcIuKGpVwiLFwibWFya2VyXCI6XCLilq5cIixcIm1jb21tYVwiOlwi4qipXCIsXCJNY3lcIjpcItCcXCIsXCJtY3lcIjpcItC8XCIsXCJtZGFzaFwiOlwi4oCUXCIsXCJtRERvdFwiOlwi4oi6XCIsXCJtZWFzdXJlZGFuZ2xlXCI6XCLiiKFcIixcIk1lZGl1bVNwYWNlXCI6XCLigZ9cIixcIk1lbGxpbnRyZlwiOlwi4oSzXCIsXCJNZnJcIjpcIvCdlJBcIixcIm1mclwiOlwi8J2UqlwiLFwibWhvXCI6XCLihKdcIixcIm1pY3JvXCI6XCLCtVwiLFwibWlkYXN0XCI6XCIqXCIsXCJtaWRjaXJcIjpcIuKrsFwiLFwibWlkXCI6XCLiiKNcIixcIm1pZGRvdFwiOlwiwrdcIixcIm1pbnVzYlwiOlwi4oqfXCIsXCJtaW51c1wiOlwi4oiSXCIsXCJtaW51c2RcIjpcIuKIuFwiLFwibWludXNkdVwiOlwi4qiqXCIsXCJNaW51c1BsdXNcIjpcIuKIk1wiLFwibWxjcFwiOlwi4qubXCIsXCJtbGRyXCI6XCLigKZcIixcIm1ucGx1c1wiOlwi4oiTXCIsXCJtb2RlbHNcIjpcIuKKp1wiLFwiTW9wZlwiOlwi8J2VhFwiLFwibW9wZlwiOlwi8J2VnlwiLFwibXBcIjpcIuKIk1wiLFwibXNjclwiOlwi8J2TglwiLFwiTXNjclwiOlwi4oSzXCIsXCJtc3Rwb3NcIjpcIuKIvlwiLFwiTXVcIjpcIs6cXCIsXCJtdVwiOlwizrxcIixcIm11bHRpbWFwXCI6XCLiirhcIixcIm11bWFwXCI6XCLiirhcIixcIm5hYmxhXCI6XCLiiIdcIixcIk5hY3V0ZVwiOlwixYNcIixcIm5hY3V0ZVwiOlwixYRcIixcIm5hbmdcIjpcIuKIoOKDklwiLFwibmFwXCI6XCLiiYlcIixcIm5hcEVcIjpcIuKpsMy4XCIsXCJuYXBpZFwiOlwi4omLzLhcIixcIm5hcG9zXCI6XCLFiVwiLFwibmFwcHJveFwiOlwi4omJXCIsXCJuYXR1cmFsXCI6XCLima5cIixcIm5hdHVyYWxzXCI6XCLihJVcIixcIm5hdHVyXCI6XCLima5cIixcIm5ic3BcIjpcIsKgXCIsXCJuYnVtcFwiOlwi4omOzLhcIixcIm5idW1wZVwiOlwi4omPzLhcIixcIm5jYXBcIjpcIuKpg1wiLFwiTmNhcm9uXCI6XCLFh1wiLFwibmNhcm9uXCI6XCLFiFwiLFwiTmNlZGlsXCI6XCLFhVwiLFwibmNlZGlsXCI6XCLFhlwiLFwibmNvbmdcIjpcIuKJh1wiLFwibmNvbmdkb3RcIjpcIuKprcy4XCIsXCJuY3VwXCI6XCLiqYJcIixcIk5jeVwiOlwi0J1cIixcIm5jeVwiOlwi0L1cIixcIm5kYXNoXCI6XCLigJNcIixcIm5lYXJoa1wiOlwi4qSkXCIsXCJuZWFyclwiOlwi4oaXXCIsXCJuZUFyclwiOlwi4oeXXCIsXCJuZWFycm93XCI6XCLihpdcIixcIm5lXCI6XCLiiaBcIixcIm5lZG90XCI6XCLiiZDMuFwiLFwiTmVnYXRpdmVNZWRpdW1TcGFjZVwiOlwi4oCLXCIsXCJOZWdhdGl2ZVRoaWNrU3BhY2VcIjpcIuKAi1wiLFwiTmVnYXRpdmVUaGluU3BhY2VcIjpcIuKAi1wiLFwiTmVnYXRpdmVWZXJ5VGhpblNwYWNlXCI6XCLigItcIixcIm5lcXVpdlwiOlwi4omiXCIsXCJuZXNlYXJcIjpcIuKkqFwiLFwibmVzaW1cIjpcIuKJgsy4XCIsXCJOZXN0ZWRHcmVhdGVyR3JlYXRlclwiOlwi4omrXCIsXCJOZXN0ZWRMZXNzTGVzc1wiOlwi4omqXCIsXCJOZXdMaW5lXCI6XCJcXG5cIixcIm5leGlzdFwiOlwi4oiEXCIsXCJuZXhpc3RzXCI6XCLiiIRcIixcIk5mclwiOlwi8J2UkVwiLFwibmZyXCI6XCLwnZSrXCIsXCJuZ0VcIjpcIuKJp8y4XCIsXCJuZ2VcIjpcIuKJsVwiLFwibmdlcVwiOlwi4omxXCIsXCJuZ2VxcVwiOlwi4omnzLhcIixcIm5nZXFzbGFudFwiOlwi4qm+zLhcIixcIm5nZXNcIjpcIuKpvsy4XCIsXCJuR2dcIjpcIuKLmcy4XCIsXCJuZ3NpbVwiOlwi4om1XCIsXCJuR3RcIjpcIuKJq+KDklwiLFwibmd0XCI6XCLiia9cIixcIm5ndHJcIjpcIuKJr1wiLFwibkd0dlwiOlwi4omrzLhcIixcIm5oYXJyXCI6XCLihq5cIixcIm5oQXJyXCI6XCLih45cIixcIm5ocGFyXCI6XCLiq7JcIixcIm5pXCI6XCLiiItcIixcIm5pc1wiOlwi4ou8XCIsXCJuaXNkXCI6XCLii7pcIixcIm5pdlwiOlwi4oiLXCIsXCJOSmN5XCI6XCLQilwiLFwibmpjeVwiOlwi0ZpcIixcIm5sYXJyXCI6XCLihppcIixcIm5sQXJyXCI6XCLih41cIixcIm5sZHJcIjpcIuKApVwiLFwibmxFXCI6XCLiiabMuFwiLFwibmxlXCI6XCLiibBcIixcIm5sZWZ0YXJyb3dcIjpcIuKGmlwiLFwibkxlZnRhcnJvd1wiOlwi4oeNXCIsXCJubGVmdHJpZ2h0YXJyb3dcIjpcIuKGrlwiLFwibkxlZnRyaWdodGFycm93XCI6XCLih45cIixcIm5sZXFcIjpcIuKJsFwiLFwibmxlcXFcIjpcIuKJpsy4XCIsXCJubGVxc2xhbnRcIjpcIuKpvcy4XCIsXCJubGVzXCI6XCLiqb3MuFwiLFwibmxlc3NcIjpcIuKJrlwiLFwibkxsXCI6XCLii5jMuFwiLFwibmxzaW1cIjpcIuKJtFwiLFwibkx0XCI6XCLiiarig5JcIixcIm5sdFwiOlwi4omuXCIsXCJubHRyaVwiOlwi4ouqXCIsXCJubHRyaWVcIjpcIuKLrFwiLFwibkx0dlwiOlwi4omqzLhcIixcIm5taWRcIjpcIuKIpFwiLFwiTm9CcmVha1wiOlwi4oGgXCIsXCJOb25CcmVha2luZ1NwYWNlXCI6XCLCoFwiLFwibm9wZlwiOlwi8J2Vn1wiLFwiTm9wZlwiOlwi4oSVXCIsXCJOb3RcIjpcIuKrrFwiLFwibm90XCI6XCLCrFwiLFwiTm90Q29uZ3J1ZW50XCI6XCLiiaJcIixcIk5vdEN1cENhcFwiOlwi4omtXCIsXCJOb3REb3VibGVWZXJ0aWNhbEJhclwiOlwi4oimXCIsXCJOb3RFbGVtZW50XCI6XCLiiIlcIixcIk5vdEVxdWFsXCI6XCLiiaBcIixcIk5vdEVxdWFsVGlsZGVcIjpcIuKJgsy4XCIsXCJOb3RFeGlzdHNcIjpcIuKIhFwiLFwiTm90R3JlYXRlclwiOlwi4omvXCIsXCJOb3RHcmVhdGVyRXF1YWxcIjpcIuKJsVwiLFwiTm90R3JlYXRlckZ1bGxFcXVhbFwiOlwi4omnzLhcIixcIk5vdEdyZWF0ZXJHcmVhdGVyXCI6XCLiiavMuFwiLFwiTm90R3JlYXRlckxlc3NcIjpcIuKJuVwiLFwiTm90R3JlYXRlclNsYW50RXF1YWxcIjpcIuKpvsy4XCIsXCJOb3RHcmVhdGVyVGlsZGVcIjpcIuKJtVwiLFwiTm90SHVtcERvd25IdW1wXCI6XCLiiY7MuFwiLFwiTm90SHVtcEVxdWFsXCI6XCLiiY/MuFwiLFwibm90aW5cIjpcIuKIiVwiLFwibm90aW5kb3RcIjpcIuKLtcy4XCIsXCJub3RpbkVcIjpcIuKLucy4XCIsXCJub3RpbnZhXCI6XCLiiIlcIixcIm5vdGludmJcIjpcIuKLt1wiLFwibm90aW52Y1wiOlwi4ou2XCIsXCJOb3RMZWZ0VHJpYW5nbGVCYXJcIjpcIuKnj8y4XCIsXCJOb3RMZWZ0VHJpYW5nbGVcIjpcIuKLqlwiLFwiTm90TGVmdFRyaWFuZ2xlRXF1YWxcIjpcIuKLrFwiLFwiTm90TGVzc1wiOlwi4omuXCIsXCJOb3RMZXNzRXF1YWxcIjpcIuKJsFwiLFwiTm90TGVzc0dyZWF0ZXJcIjpcIuKJuFwiLFwiTm90TGVzc0xlc3NcIjpcIuKJqsy4XCIsXCJOb3RMZXNzU2xhbnRFcXVhbFwiOlwi4qm9zLhcIixcIk5vdExlc3NUaWxkZVwiOlwi4om0XCIsXCJOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlclwiOlwi4qqizLhcIixcIk5vdE5lc3RlZExlc3NMZXNzXCI6XCLiqqHMuFwiLFwibm90bmlcIjpcIuKIjFwiLFwibm90bml2YVwiOlwi4oiMXCIsXCJub3RuaXZiXCI6XCLii75cIixcIm5vdG5pdmNcIjpcIuKLvVwiLFwiTm90UHJlY2VkZXNcIjpcIuKKgFwiLFwiTm90UHJlY2VkZXNFcXVhbFwiOlwi4qqvzLhcIixcIk5vdFByZWNlZGVzU2xhbnRFcXVhbFwiOlwi4ougXCIsXCJOb3RSZXZlcnNlRWxlbWVudFwiOlwi4oiMXCIsXCJOb3RSaWdodFRyaWFuZ2xlQmFyXCI6XCLip5DMuFwiLFwiTm90UmlnaHRUcmlhbmdsZVwiOlwi4ourXCIsXCJOb3RSaWdodFRyaWFuZ2xlRXF1YWxcIjpcIuKLrVwiLFwiTm90U3F1YXJlU3Vic2V0XCI6XCLiio/MuFwiLFwiTm90U3F1YXJlU3Vic2V0RXF1YWxcIjpcIuKLolwiLFwiTm90U3F1YXJlU3VwZXJzZXRcIjpcIuKKkMy4XCIsXCJOb3RTcXVhcmVTdXBlcnNldEVxdWFsXCI6XCLii6NcIixcIk5vdFN1YnNldFwiOlwi4oqC4oOSXCIsXCJOb3RTdWJzZXRFcXVhbFwiOlwi4oqIXCIsXCJOb3RTdWNjZWVkc1wiOlwi4oqBXCIsXCJOb3RTdWNjZWVkc0VxdWFsXCI6XCLiqrDMuFwiLFwiTm90U3VjY2VlZHNTbGFudEVxdWFsXCI6XCLii6FcIixcIk5vdFN1Y2NlZWRzVGlsZGVcIjpcIuKJv8y4XCIsXCJOb3RTdXBlcnNldFwiOlwi4oqD4oOSXCIsXCJOb3RTdXBlcnNldEVxdWFsXCI6XCLiiolcIixcIk5vdFRpbGRlXCI6XCLiiYFcIixcIk5vdFRpbGRlRXF1YWxcIjpcIuKJhFwiLFwiTm90VGlsZGVGdWxsRXF1YWxcIjpcIuKJh1wiLFwiTm90VGlsZGVUaWxkZVwiOlwi4omJXCIsXCJOb3RWZXJ0aWNhbEJhclwiOlwi4oikXCIsXCJucGFyYWxsZWxcIjpcIuKIplwiLFwibnBhclwiOlwi4oimXCIsXCJucGFyc2xcIjpcIuKrveKDpVwiLFwibnBhcnRcIjpcIuKIgsy4XCIsXCJucG9saW50XCI6XCLiqJRcIixcIm5wclwiOlwi4oqAXCIsXCJucHJjdWVcIjpcIuKLoFwiLFwibnByZWNcIjpcIuKKgFwiLFwibnByZWNlcVwiOlwi4qqvzLhcIixcIm5wcmVcIjpcIuKqr8y4XCIsXCJucmFycmNcIjpcIuKks8y4XCIsXCJucmFyclwiOlwi4oabXCIsXCJuckFyclwiOlwi4oePXCIsXCJucmFycndcIjpcIuKGncy4XCIsXCJucmlnaHRhcnJvd1wiOlwi4oabXCIsXCJuUmlnaHRhcnJvd1wiOlwi4oePXCIsXCJucnRyaVwiOlwi4ourXCIsXCJucnRyaWVcIjpcIuKLrVwiLFwibnNjXCI6XCLiioFcIixcIm5zY2N1ZVwiOlwi4ouhXCIsXCJuc2NlXCI6XCLiqrDMuFwiLFwiTnNjclwiOlwi8J2SqVwiLFwibnNjclwiOlwi8J2Tg1wiLFwibnNob3J0bWlkXCI6XCLiiKRcIixcIm5zaG9ydHBhcmFsbGVsXCI6XCLiiKZcIixcIm5zaW1cIjpcIuKJgVwiLFwibnNpbWVcIjpcIuKJhFwiLFwibnNpbWVxXCI6XCLiiYRcIixcIm5zbWlkXCI6XCLiiKRcIixcIm5zcGFyXCI6XCLiiKZcIixcIm5zcXN1YmVcIjpcIuKLolwiLFwibnNxc3VwZVwiOlwi4oujXCIsXCJuc3ViXCI6XCLiioRcIixcIm5zdWJFXCI6XCLiq4XMuFwiLFwibnN1YmVcIjpcIuKKiFwiLFwibnN1YnNldFwiOlwi4oqC4oOSXCIsXCJuc3Vic2V0ZXFcIjpcIuKKiFwiLFwibnN1YnNldGVxcVwiOlwi4quFzLhcIixcIm5zdWNjXCI6XCLiioFcIixcIm5zdWNjZXFcIjpcIuKqsMy4XCIsXCJuc3VwXCI6XCLiioVcIixcIm5zdXBFXCI6XCLiq4bMuFwiLFwibnN1cGVcIjpcIuKKiVwiLFwibnN1cHNldFwiOlwi4oqD4oOSXCIsXCJuc3Vwc2V0ZXFcIjpcIuKKiVwiLFwibnN1cHNldGVxcVwiOlwi4quGzLhcIixcIm50Z2xcIjpcIuKJuVwiLFwiTnRpbGRlXCI6XCLDkVwiLFwibnRpbGRlXCI6XCLDsVwiLFwibnRsZ1wiOlwi4om4XCIsXCJudHJpYW5nbGVsZWZ0XCI6XCLii6pcIixcIm50cmlhbmdsZWxlZnRlcVwiOlwi4ousXCIsXCJudHJpYW5nbGVyaWdodFwiOlwi4ourXCIsXCJudHJpYW5nbGVyaWdodGVxXCI6XCLii61cIixcIk51XCI6XCLOnVwiLFwibnVcIjpcIs69XCIsXCJudW1cIjpcIiNcIixcIm51bWVyb1wiOlwi4oSWXCIsXCJudW1zcFwiOlwi4oCHXCIsXCJudmFwXCI6XCLiiY3ig5JcIixcIm52ZGFzaFwiOlwi4oqsXCIsXCJudkRhc2hcIjpcIuKKrVwiLFwiblZkYXNoXCI6XCLiiq5cIixcIm5WRGFzaFwiOlwi4oqvXCIsXCJudmdlXCI6XCLiiaXig5JcIixcIm52Z3RcIjpcIj7ig5JcIixcIm52SGFyclwiOlwi4qSEXCIsXCJudmluZmluXCI6XCLip55cIixcIm52bEFyclwiOlwi4qSCXCIsXCJudmxlXCI6XCLiiaTig5JcIixcIm52bHRcIjpcIjzig5JcIixcIm52bHRyaWVcIjpcIuKKtOKDklwiLFwibnZyQXJyXCI6XCLipINcIixcIm52cnRyaWVcIjpcIuKKteKDklwiLFwibnZzaW1cIjpcIuKIvOKDklwiLFwibndhcmhrXCI6XCLipKNcIixcIm53YXJyXCI6XCLihpZcIixcIm53QXJyXCI6XCLih5ZcIixcIm53YXJyb3dcIjpcIuKGllwiLFwibnduZWFyXCI6XCLipKdcIixcIk9hY3V0ZVwiOlwiw5NcIixcIm9hY3V0ZVwiOlwiw7NcIixcIm9hc3RcIjpcIuKKm1wiLFwiT2NpcmNcIjpcIsOUXCIsXCJvY2lyY1wiOlwiw7RcIixcIm9jaXJcIjpcIuKKmlwiLFwiT2N5XCI6XCLQnlwiLFwib2N5XCI6XCLQvlwiLFwib2Rhc2hcIjpcIuKKnVwiLFwiT2RibGFjXCI6XCLFkFwiLFwib2RibGFjXCI6XCLFkVwiLFwib2RpdlwiOlwi4qi4XCIsXCJvZG90XCI6XCLiiplcIixcIm9kc29sZFwiOlwi4qa8XCIsXCJPRWxpZ1wiOlwixZJcIixcIm9lbGlnXCI6XCLFk1wiLFwib2ZjaXJcIjpcIuKmv1wiLFwiT2ZyXCI6XCLwnZSSXCIsXCJvZnJcIjpcIvCdlKxcIixcIm9nb25cIjpcIsubXCIsXCJPZ3JhdmVcIjpcIsOSXCIsXCJvZ3JhdmVcIjpcIsOyXCIsXCJvZ3RcIjpcIuKngVwiLFwib2hiYXJcIjpcIuKmtVwiLFwib2htXCI6XCLOqVwiLFwib2ludFwiOlwi4oiuXCIsXCJvbGFyclwiOlwi4oa6XCIsXCJvbGNpclwiOlwi4qa+XCIsXCJvbGNyb3NzXCI6XCLiprtcIixcIm9saW5lXCI6XCLigL5cIixcIm9sdFwiOlwi4qeAXCIsXCJPbWFjclwiOlwixYxcIixcIm9tYWNyXCI6XCLFjVwiLFwiT21lZ2FcIjpcIs6pXCIsXCJvbWVnYVwiOlwiz4lcIixcIk9taWNyb25cIjpcIs6fXCIsXCJvbWljcm9uXCI6XCLOv1wiLFwib21pZFwiOlwi4qa2XCIsXCJvbWludXNcIjpcIuKKllwiLFwiT29wZlwiOlwi8J2VhlwiLFwib29wZlwiOlwi8J2VoFwiLFwib3BhclwiOlwi4qa3XCIsXCJPcGVuQ3VybHlEb3VibGVRdW90ZVwiOlwi4oCcXCIsXCJPcGVuQ3VybHlRdW90ZVwiOlwi4oCYXCIsXCJvcGVycFwiOlwi4qa5XCIsXCJvcGx1c1wiOlwi4oqVXCIsXCJvcmFyclwiOlwi4oa7XCIsXCJPclwiOlwi4qmUXCIsXCJvclwiOlwi4oioXCIsXCJvcmRcIjpcIuKpnVwiLFwib3JkZXJcIjpcIuKEtFwiLFwib3JkZXJvZlwiOlwi4oS0XCIsXCJvcmRmXCI6XCLCqlwiLFwib3JkbVwiOlwiwrpcIixcIm9yaWdvZlwiOlwi4oq2XCIsXCJvcm9yXCI6XCLiqZZcIixcIm9yc2xvcGVcIjpcIuKpl1wiLFwib3J2XCI6XCLiqZtcIixcIm9TXCI6XCLik4hcIixcIk9zY3JcIjpcIvCdkqpcIixcIm9zY3JcIjpcIuKEtFwiLFwiT3NsYXNoXCI6XCLDmFwiLFwib3NsYXNoXCI6XCLDuFwiLFwib3NvbFwiOlwi4oqYXCIsXCJPdGlsZGVcIjpcIsOVXCIsXCJvdGlsZGVcIjpcIsO1XCIsXCJvdGltZXNhc1wiOlwi4qi2XCIsXCJPdGltZXNcIjpcIuKot1wiLFwib3RpbWVzXCI6XCLiipdcIixcIk91bWxcIjpcIsOWXCIsXCJvdW1sXCI6XCLDtlwiLFwib3ZiYXJcIjpcIuKMvVwiLFwiT3ZlckJhclwiOlwi4oC+XCIsXCJPdmVyQnJhY2VcIjpcIuKPnlwiLFwiT3ZlckJyYWNrZXRcIjpcIuKOtFwiLFwiT3ZlclBhcmVudGhlc2lzXCI6XCLij5xcIixcInBhcmFcIjpcIsK2XCIsXCJwYXJhbGxlbFwiOlwi4oilXCIsXCJwYXJcIjpcIuKIpVwiLFwicGFyc2ltXCI6XCLiq7NcIixcInBhcnNsXCI6XCLiq71cIixcInBhcnRcIjpcIuKIglwiLFwiUGFydGlhbERcIjpcIuKIglwiLFwiUGN5XCI6XCLQn1wiLFwicGN5XCI6XCLQv1wiLFwicGVyY250XCI6XCIlXCIsXCJwZXJpb2RcIjpcIi5cIixcInBlcm1pbFwiOlwi4oCwXCIsXCJwZXJwXCI6XCLiiqVcIixcInBlcnRlbmtcIjpcIuKAsVwiLFwiUGZyXCI6XCLwnZSTXCIsXCJwZnJcIjpcIvCdlK1cIixcIlBoaVwiOlwizqZcIixcInBoaVwiOlwiz4ZcIixcInBoaXZcIjpcIs+VXCIsXCJwaG1tYXRcIjpcIuKEs1wiLFwicGhvbmVcIjpcIuKYjlwiLFwiUGlcIjpcIs6gXCIsXCJwaVwiOlwiz4BcIixcInBpdGNoZm9ya1wiOlwi4ouUXCIsXCJwaXZcIjpcIs+WXCIsXCJwbGFuY2tcIjpcIuKEj1wiLFwicGxhbmNraFwiOlwi4oSOXCIsXCJwbGFua3ZcIjpcIuKEj1wiLFwicGx1c2FjaXJcIjpcIuKoo1wiLFwicGx1c2JcIjpcIuKKnlwiLFwicGx1c2NpclwiOlwi4qiiXCIsXCJwbHVzXCI6XCIrXCIsXCJwbHVzZG9cIjpcIuKIlFwiLFwicGx1c2R1XCI6XCLiqKVcIixcInBsdXNlXCI6XCLiqbJcIixcIlBsdXNNaW51c1wiOlwiwrFcIixcInBsdXNtblwiOlwiwrFcIixcInBsdXNzaW1cIjpcIuKoplwiLFwicGx1c3R3b1wiOlwi4qinXCIsXCJwbVwiOlwiwrFcIixcIlBvaW5jYXJlcGxhbmVcIjpcIuKEjFwiLFwicG9pbnRpbnRcIjpcIuKolVwiLFwicG9wZlwiOlwi8J2VoVwiLFwiUG9wZlwiOlwi4oSZXCIsXCJwb3VuZFwiOlwiwqNcIixcInByYXBcIjpcIuKqt1wiLFwiUHJcIjpcIuKqu1wiLFwicHJcIjpcIuKJulwiLFwicHJjdWVcIjpcIuKJvFwiLFwicHJlY2FwcHJveFwiOlwi4qq3XCIsXCJwcmVjXCI6XCLiibpcIixcInByZWNjdXJseWVxXCI6XCLiibxcIixcIlByZWNlZGVzXCI6XCLiibpcIixcIlByZWNlZGVzRXF1YWxcIjpcIuKqr1wiLFwiUHJlY2VkZXNTbGFudEVxdWFsXCI6XCLiibxcIixcIlByZWNlZGVzVGlsZGVcIjpcIuKJvlwiLFwicHJlY2VxXCI6XCLiqq9cIixcInByZWNuYXBwcm94XCI6XCLiqrlcIixcInByZWNuZXFxXCI6XCLiqrVcIixcInByZWNuc2ltXCI6XCLii6hcIixcInByZVwiOlwi4qqvXCIsXCJwckVcIjpcIuKqs1wiLFwicHJlY3NpbVwiOlwi4om+XCIsXCJwcmltZVwiOlwi4oCyXCIsXCJQcmltZVwiOlwi4oCzXCIsXCJwcmltZXNcIjpcIuKEmVwiLFwicHJuYXBcIjpcIuKquVwiLFwicHJuRVwiOlwi4qq1XCIsXCJwcm5zaW1cIjpcIuKLqFwiLFwicHJvZFwiOlwi4oiPXCIsXCJQcm9kdWN0XCI6XCLiiI9cIixcInByb2ZhbGFyXCI6XCLijK5cIixcInByb2ZsaW5lXCI6XCLijJJcIixcInByb2ZzdXJmXCI6XCLijJNcIixcInByb3BcIjpcIuKInVwiLFwiUHJvcG9ydGlvbmFsXCI6XCLiiJ1cIixcIlByb3BvcnRpb25cIjpcIuKIt1wiLFwicHJvcHRvXCI6XCLiiJ1cIixcInByc2ltXCI6XCLiib5cIixcInBydXJlbFwiOlwi4oqwXCIsXCJQc2NyXCI6XCLwnZKrXCIsXCJwc2NyXCI6XCLwnZOFXCIsXCJQc2lcIjpcIs6oXCIsXCJwc2lcIjpcIs+IXCIsXCJwdW5jc3BcIjpcIuKAiFwiLFwiUWZyXCI6XCLwnZSUXCIsXCJxZnJcIjpcIvCdlK5cIixcInFpbnRcIjpcIuKojFwiLFwicW9wZlwiOlwi8J2VolwiLFwiUW9wZlwiOlwi4oSaXCIsXCJxcHJpbWVcIjpcIuKBl1wiLFwiUXNjclwiOlwi8J2SrFwiLFwicXNjclwiOlwi8J2ThlwiLFwicXVhdGVybmlvbnNcIjpcIuKEjVwiLFwicXVhdGludFwiOlwi4qiWXCIsXCJxdWVzdFwiOlwiP1wiLFwicXVlc3RlcVwiOlwi4omfXCIsXCJxdW90XCI6XCJcXFwiXCIsXCJRVU9UXCI6XCJcXFwiXCIsXCJyQWFyclwiOlwi4oebXCIsXCJyYWNlXCI6XCLiiL3MsVwiLFwiUmFjdXRlXCI6XCLFlFwiLFwicmFjdXRlXCI6XCLFlVwiLFwicmFkaWNcIjpcIuKImlwiLFwicmFlbXB0eXZcIjpcIuKms1wiLFwicmFuZ1wiOlwi4p+pXCIsXCJSYW5nXCI6XCLin6tcIixcInJhbmdkXCI6XCLippJcIixcInJhbmdlXCI6XCLipqVcIixcInJhbmdsZVwiOlwi4p+pXCIsXCJyYXF1b1wiOlwiwrtcIixcInJhcnJhcFwiOlwi4qW1XCIsXCJyYXJyYlwiOlwi4oelXCIsXCJyYXJyYmZzXCI6XCLipKBcIixcInJhcnJjXCI6XCLipLNcIixcInJhcnJcIjpcIuKGklwiLFwiUmFyclwiOlwi4oagXCIsXCJyQXJyXCI6XCLih5JcIixcInJhcnJmc1wiOlwi4qSeXCIsXCJyYXJyaGtcIjpcIuKGqlwiLFwicmFycmxwXCI6XCLihqxcIixcInJhcnJwbFwiOlwi4qWFXCIsXCJyYXJyc2ltXCI6XCLipbRcIixcIlJhcnJ0bFwiOlwi4qSWXCIsXCJyYXJydGxcIjpcIuKGo1wiLFwicmFycndcIjpcIuKGnVwiLFwicmF0YWlsXCI6XCLipJpcIixcInJBdGFpbFwiOlwi4qScXCIsXCJyYXRpb1wiOlwi4oi2XCIsXCJyYXRpb25hbHNcIjpcIuKEmlwiLFwicmJhcnJcIjpcIuKkjVwiLFwickJhcnJcIjpcIuKkj1wiLFwiUkJhcnJcIjpcIuKkkFwiLFwicmJicmtcIjpcIuKds1wiLFwicmJyYWNlXCI6XCJ9XCIsXCJyYnJhY2tcIjpcIl1cIixcInJicmtlXCI6XCLipoxcIixcInJicmtzbGRcIjpcIuKmjlwiLFwicmJya3NsdVwiOlwi4qaQXCIsXCJSY2Fyb25cIjpcIsWYXCIsXCJyY2Fyb25cIjpcIsWZXCIsXCJSY2VkaWxcIjpcIsWWXCIsXCJyY2VkaWxcIjpcIsWXXCIsXCJyY2VpbFwiOlwi4oyJXCIsXCJyY3ViXCI6XCJ9XCIsXCJSY3lcIjpcItCgXCIsXCJyY3lcIjpcItGAXCIsXCJyZGNhXCI6XCLipLdcIixcInJkbGRoYXJcIjpcIuKlqVwiLFwicmRxdW9cIjpcIuKAnVwiLFwicmRxdW9yXCI6XCLigJ1cIixcInJkc2hcIjpcIuKGs1wiLFwicmVhbFwiOlwi4oScXCIsXCJyZWFsaW5lXCI6XCLihJtcIixcInJlYWxwYXJ0XCI6XCLihJxcIixcInJlYWxzXCI6XCLihJ1cIixcIlJlXCI6XCLihJxcIixcInJlY3RcIjpcIuKWrVwiLFwicmVnXCI6XCLCrlwiLFwiUkVHXCI6XCLCrlwiLFwiUmV2ZXJzZUVsZW1lbnRcIjpcIuKIi1wiLFwiUmV2ZXJzZUVxdWlsaWJyaXVtXCI6XCLih4tcIixcIlJldmVyc2VVcEVxdWlsaWJyaXVtXCI6XCLipa9cIixcInJmaXNodFwiOlwi4qW9XCIsXCJyZmxvb3JcIjpcIuKMi1wiLFwicmZyXCI6XCLwnZSvXCIsXCJSZnJcIjpcIuKEnFwiLFwickhhclwiOlwi4qWkXCIsXCJyaGFyZFwiOlwi4oeBXCIsXCJyaGFydVwiOlwi4oeAXCIsXCJyaGFydWxcIjpcIuKlrFwiLFwiUmhvXCI6XCLOoVwiLFwicmhvXCI6XCLPgVwiLFwicmhvdlwiOlwiz7FcIixcIlJpZ2h0QW5nbGVCcmFja2V0XCI6XCLin6lcIixcIlJpZ2h0QXJyb3dCYXJcIjpcIuKHpVwiLFwicmlnaHRhcnJvd1wiOlwi4oaSXCIsXCJSaWdodEFycm93XCI6XCLihpJcIixcIlJpZ2h0YXJyb3dcIjpcIuKHklwiLFwiUmlnaHRBcnJvd0xlZnRBcnJvd1wiOlwi4oeEXCIsXCJyaWdodGFycm93dGFpbFwiOlwi4oajXCIsXCJSaWdodENlaWxpbmdcIjpcIuKMiVwiLFwiUmlnaHREb3VibGVCcmFja2V0XCI6XCLin6dcIixcIlJpZ2h0RG93blRlZVZlY3RvclwiOlwi4qWdXCIsXCJSaWdodERvd25WZWN0b3JCYXJcIjpcIuKllVwiLFwiUmlnaHREb3duVmVjdG9yXCI6XCLih4JcIixcIlJpZ2h0Rmxvb3JcIjpcIuKMi1wiLFwicmlnaHRoYXJwb29uZG93blwiOlwi4oeBXCIsXCJyaWdodGhhcnBvb251cFwiOlwi4oeAXCIsXCJyaWdodGxlZnRhcnJvd3NcIjpcIuKHhFwiLFwicmlnaHRsZWZ0aGFycG9vbnNcIjpcIuKHjFwiLFwicmlnaHRyaWdodGFycm93c1wiOlwi4oeJXCIsXCJyaWdodHNxdWlnYXJyb3dcIjpcIuKGnVwiLFwiUmlnaHRUZWVBcnJvd1wiOlwi4oamXCIsXCJSaWdodFRlZVwiOlwi4oqiXCIsXCJSaWdodFRlZVZlY3RvclwiOlwi4qWbXCIsXCJyaWdodHRocmVldGltZXNcIjpcIuKLjFwiLFwiUmlnaHRUcmlhbmdsZUJhclwiOlwi4qeQXCIsXCJSaWdodFRyaWFuZ2xlXCI6XCLiirNcIixcIlJpZ2h0VHJpYW5nbGVFcXVhbFwiOlwi4oq1XCIsXCJSaWdodFVwRG93blZlY3RvclwiOlwi4qWPXCIsXCJSaWdodFVwVGVlVmVjdG9yXCI6XCLipZxcIixcIlJpZ2h0VXBWZWN0b3JCYXJcIjpcIuKllFwiLFwiUmlnaHRVcFZlY3RvclwiOlwi4oa+XCIsXCJSaWdodFZlY3RvckJhclwiOlwi4qWTXCIsXCJSaWdodFZlY3RvclwiOlwi4oeAXCIsXCJyaW5nXCI6XCLLmlwiLFwicmlzaW5nZG90c2VxXCI6XCLiiZNcIixcInJsYXJyXCI6XCLih4RcIixcInJsaGFyXCI6XCLih4xcIixcInJsbVwiOlwi4oCPXCIsXCJybW91c3RhY2hlXCI6XCLijrFcIixcInJtb3VzdFwiOlwi4o6xXCIsXCJybm1pZFwiOlwi4quuXCIsXCJyb2FuZ1wiOlwi4p+tXCIsXCJyb2FyclwiOlwi4oe+XCIsXCJyb2Jya1wiOlwi4p+nXCIsXCJyb3BhclwiOlwi4qaGXCIsXCJyb3BmXCI6XCLwnZWjXCIsXCJSb3BmXCI6XCLihJ1cIixcInJvcGx1c1wiOlwi4qiuXCIsXCJyb3RpbWVzXCI6XCLiqLVcIixcIlJvdW5kSW1wbGllc1wiOlwi4qWwXCIsXCJycGFyXCI6XCIpXCIsXCJycGFyZ3RcIjpcIuKmlFwiLFwicnBwb2xpbnRcIjpcIuKoklwiLFwicnJhcnJcIjpcIuKHiVwiLFwiUnJpZ2h0YXJyb3dcIjpcIuKHm1wiLFwicnNhcXVvXCI6XCLigLpcIixcInJzY3JcIjpcIvCdk4dcIixcIlJzY3JcIjpcIuKEm1wiLFwicnNoXCI6XCLihrFcIixcIlJzaFwiOlwi4oaxXCIsXCJyc3FiXCI6XCJdXCIsXCJyc3F1b1wiOlwi4oCZXCIsXCJyc3F1b3JcIjpcIuKAmVwiLFwicnRocmVlXCI6XCLii4xcIixcInJ0aW1lc1wiOlwi4ouKXCIsXCJydHJpXCI6XCLilrlcIixcInJ0cmllXCI6XCLiirVcIixcInJ0cmlmXCI6XCLilrhcIixcInJ0cmlsdHJpXCI6XCLip45cIixcIlJ1bGVEZWxheWVkXCI6XCLip7RcIixcInJ1bHVoYXJcIjpcIuKlqFwiLFwicnhcIjpcIuKEnlwiLFwiU2FjdXRlXCI6XCLFmlwiLFwic2FjdXRlXCI6XCLFm1wiLFwic2JxdW9cIjpcIuKAmlwiLFwic2NhcFwiOlwi4qq4XCIsXCJTY2Fyb25cIjpcIsWgXCIsXCJzY2Fyb25cIjpcIsWhXCIsXCJTY1wiOlwi4qq8XCIsXCJzY1wiOlwi4om7XCIsXCJzY2N1ZVwiOlwi4om9XCIsXCJzY2VcIjpcIuKqsFwiLFwic2NFXCI6XCLiqrRcIixcIlNjZWRpbFwiOlwixZ5cIixcInNjZWRpbFwiOlwixZ9cIixcIlNjaXJjXCI6XCLFnFwiLFwic2NpcmNcIjpcIsWdXCIsXCJzY25hcFwiOlwi4qq6XCIsXCJzY25FXCI6XCLiqrZcIixcInNjbnNpbVwiOlwi4oupXCIsXCJzY3BvbGludFwiOlwi4qiTXCIsXCJzY3NpbVwiOlwi4om/XCIsXCJTY3lcIjpcItChXCIsXCJzY3lcIjpcItGBXCIsXCJzZG90YlwiOlwi4oqhXCIsXCJzZG90XCI6XCLii4VcIixcInNkb3RlXCI6XCLiqaZcIixcInNlYXJoa1wiOlwi4qSlXCIsXCJzZWFyclwiOlwi4oaYXCIsXCJzZUFyclwiOlwi4oeYXCIsXCJzZWFycm93XCI6XCLihphcIixcInNlY3RcIjpcIsKnXCIsXCJzZW1pXCI6XCI7XCIsXCJzZXN3YXJcIjpcIuKkqVwiLFwic2V0bWludXNcIjpcIuKIllwiLFwic2V0bW5cIjpcIuKIllwiLFwic2V4dFwiOlwi4py2XCIsXCJTZnJcIjpcIvCdlJZcIixcInNmclwiOlwi8J2UsFwiLFwic2Zyb3duXCI6XCLijKJcIixcInNoYXJwXCI6XCLima9cIixcIlNIQ0hjeVwiOlwi0KlcIixcInNoY2hjeVwiOlwi0YlcIixcIlNIY3lcIjpcItCoXCIsXCJzaGN5XCI6XCLRiFwiLFwiU2hvcnREb3duQXJyb3dcIjpcIuKGk1wiLFwiU2hvcnRMZWZ0QXJyb3dcIjpcIuKGkFwiLFwic2hvcnRtaWRcIjpcIuKIo1wiLFwic2hvcnRwYXJhbGxlbFwiOlwi4oilXCIsXCJTaG9ydFJpZ2h0QXJyb3dcIjpcIuKGklwiLFwiU2hvcnRVcEFycm93XCI6XCLihpFcIixcInNoeVwiOlwiwq1cIixcIlNpZ21hXCI6XCLOo1wiLFwic2lnbWFcIjpcIs+DXCIsXCJzaWdtYWZcIjpcIs+CXCIsXCJzaWdtYXZcIjpcIs+CXCIsXCJzaW1cIjpcIuKIvFwiLFwic2ltZG90XCI6XCLiqapcIixcInNpbWVcIjpcIuKJg1wiLFwic2ltZXFcIjpcIuKJg1wiLFwic2ltZ1wiOlwi4qqeXCIsXCJzaW1nRVwiOlwi4qqgXCIsXCJzaW1sXCI6XCLiqp1cIixcInNpbWxFXCI6XCLiqp9cIixcInNpbW5lXCI6XCLiiYZcIixcInNpbXBsdXNcIjpcIuKopFwiLFwic2ltcmFyclwiOlwi4qWyXCIsXCJzbGFyclwiOlwi4oaQXCIsXCJTbWFsbENpcmNsZVwiOlwi4oiYXCIsXCJzbWFsbHNldG1pbnVzXCI6XCLiiJZcIixcInNtYXNocFwiOlwi4qizXCIsXCJzbWVwYXJzbFwiOlwi4qekXCIsXCJzbWlkXCI6XCLiiKNcIixcInNtaWxlXCI6XCLijKNcIixcInNtdFwiOlwi4qqqXCIsXCJzbXRlXCI6XCLiqqxcIixcInNtdGVzXCI6XCLiqqzvuIBcIixcIlNPRlRjeVwiOlwi0KxcIixcInNvZnRjeVwiOlwi0YxcIixcInNvbGJhclwiOlwi4oy/XCIsXCJzb2xiXCI6XCLip4RcIixcInNvbFwiOlwiL1wiLFwiU29wZlwiOlwi8J2VilwiLFwic29wZlwiOlwi8J2VpFwiLFwic3BhZGVzXCI6XCLimaBcIixcInNwYWRlc3VpdFwiOlwi4pmgXCIsXCJzcGFyXCI6XCLiiKVcIixcInNxY2FwXCI6XCLiipNcIixcInNxY2Fwc1wiOlwi4oqT77iAXCIsXCJzcWN1cFwiOlwi4oqUXCIsXCJzcWN1cHNcIjpcIuKKlO+4gFwiLFwiU3FydFwiOlwi4oiaXCIsXCJzcXN1YlwiOlwi4oqPXCIsXCJzcXN1YmVcIjpcIuKKkVwiLFwic3FzdWJzZXRcIjpcIuKKj1wiLFwic3FzdWJzZXRlcVwiOlwi4oqRXCIsXCJzcXN1cFwiOlwi4oqQXCIsXCJzcXN1cGVcIjpcIuKKklwiLFwic3FzdXBzZXRcIjpcIuKKkFwiLFwic3FzdXBzZXRlcVwiOlwi4oqSXCIsXCJzcXVhcmVcIjpcIuKWoVwiLFwiU3F1YXJlXCI6XCLilqFcIixcIlNxdWFyZUludGVyc2VjdGlvblwiOlwi4oqTXCIsXCJTcXVhcmVTdWJzZXRcIjpcIuKKj1wiLFwiU3F1YXJlU3Vic2V0RXF1YWxcIjpcIuKKkVwiLFwiU3F1YXJlU3VwZXJzZXRcIjpcIuKKkFwiLFwiU3F1YXJlU3VwZXJzZXRFcXVhbFwiOlwi4oqSXCIsXCJTcXVhcmVVbmlvblwiOlwi4oqUXCIsXCJzcXVhcmZcIjpcIuKWqlwiLFwic3F1XCI6XCLilqFcIixcInNxdWZcIjpcIuKWqlwiLFwic3JhcnJcIjpcIuKGklwiLFwiU3NjclwiOlwi8J2SrlwiLFwic3NjclwiOlwi8J2TiFwiLFwic3NldG1uXCI6XCLiiJZcIixcInNzbWlsZVwiOlwi4oyjXCIsXCJzc3RhcmZcIjpcIuKLhlwiLFwiU3RhclwiOlwi4ouGXCIsXCJzdGFyXCI6XCLimIZcIixcInN0YXJmXCI6XCLimIVcIixcInN0cmFpZ2h0ZXBzaWxvblwiOlwiz7VcIixcInN0cmFpZ2h0cGhpXCI6XCLPlVwiLFwic3RybnNcIjpcIsKvXCIsXCJzdWJcIjpcIuKKglwiLFwiU3ViXCI6XCLii5BcIixcInN1YmRvdFwiOlwi4qq9XCIsXCJzdWJFXCI6XCLiq4VcIixcInN1YmVcIjpcIuKKhlwiLFwic3ViZWRvdFwiOlwi4quDXCIsXCJzdWJtdWx0XCI6XCLiq4FcIixcInN1Ym5FXCI6XCLiq4tcIixcInN1Ym5lXCI6XCLiiopcIixcInN1YnBsdXNcIjpcIuKqv1wiLFwic3VicmFyclwiOlwi4qW5XCIsXCJzdWJzZXRcIjpcIuKKglwiLFwiU3Vic2V0XCI6XCLii5BcIixcInN1YnNldGVxXCI6XCLiioZcIixcInN1YnNldGVxcVwiOlwi4quFXCIsXCJTdWJzZXRFcXVhbFwiOlwi4oqGXCIsXCJzdWJzZXRuZXFcIjpcIuKKilwiLFwic3Vic2V0bmVxcVwiOlwi4quLXCIsXCJzdWJzaW1cIjpcIuKrh1wiLFwic3Vic3ViXCI6XCLiq5VcIixcInN1YnN1cFwiOlwi4quTXCIsXCJzdWNjYXBwcm94XCI6XCLiqrhcIixcInN1Y2NcIjpcIuKJu1wiLFwic3VjY2N1cmx5ZXFcIjpcIuKJvVwiLFwiU3VjY2VlZHNcIjpcIuKJu1wiLFwiU3VjY2VlZHNFcXVhbFwiOlwi4qqwXCIsXCJTdWNjZWVkc1NsYW50RXF1YWxcIjpcIuKJvVwiLFwiU3VjY2VlZHNUaWxkZVwiOlwi4om/XCIsXCJzdWNjZXFcIjpcIuKqsFwiLFwic3VjY25hcHByb3hcIjpcIuKqulwiLFwic3VjY25lcXFcIjpcIuKqtlwiLFwic3VjY25zaW1cIjpcIuKLqVwiLFwic3VjY3NpbVwiOlwi4om/XCIsXCJTdWNoVGhhdFwiOlwi4oiLXCIsXCJzdW1cIjpcIuKIkVwiLFwiU3VtXCI6XCLiiJFcIixcInN1bmdcIjpcIuKZqlwiLFwic3VwMVwiOlwiwrlcIixcInN1cDJcIjpcIsKyXCIsXCJzdXAzXCI6XCLCs1wiLFwic3VwXCI6XCLiioNcIixcIlN1cFwiOlwi4ouRXCIsXCJzdXBkb3RcIjpcIuKqvlwiLFwic3VwZHN1YlwiOlwi4quYXCIsXCJzdXBFXCI6XCLiq4ZcIixcInN1cGVcIjpcIuKKh1wiLFwic3VwZWRvdFwiOlwi4quEXCIsXCJTdXBlcnNldFwiOlwi4oqDXCIsXCJTdXBlcnNldEVxdWFsXCI6XCLiiodcIixcInN1cGhzb2xcIjpcIuKfiVwiLFwic3VwaHN1YlwiOlwi4quXXCIsXCJzdXBsYXJyXCI6XCLipbtcIixcInN1cG11bHRcIjpcIuKrglwiLFwic3VwbkVcIjpcIuKrjFwiLFwic3VwbmVcIjpcIuKKi1wiLFwic3VwcGx1c1wiOlwi4quAXCIsXCJzdXBzZXRcIjpcIuKKg1wiLFwiU3Vwc2V0XCI6XCLii5FcIixcInN1cHNldGVxXCI6XCLiiodcIixcInN1cHNldGVxcVwiOlwi4quGXCIsXCJzdXBzZXRuZXFcIjpcIuKKi1wiLFwic3Vwc2V0bmVxcVwiOlwi4quMXCIsXCJzdXBzaW1cIjpcIuKriFwiLFwic3Vwc3ViXCI6XCLiq5RcIixcInN1cHN1cFwiOlwi4quWXCIsXCJzd2FyaGtcIjpcIuKkplwiLFwic3dhcnJcIjpcIuKGmVwiLFwic3dBcnJcIjpcIuKHmVwiLFwic3dhcnJvd1wiOlwi4oaZXCIsXCJzd253YXJcIjpcIuKkqlwiLFwic3psaWdcIjpcIsOfXCIsXCJUYWJcIjpcIlxcdFwiLFwidGFyZ2V0XCI6XCLijJZcIixcIlRhdVwiOlwizqRcIixcInRhdVwiOlwiz4RcIixcInRicmtcIjpcIuKOtFwiLFwiVGNhcm9uXCI6XCLFpFwiLFwidGNhcm9uXCI6XCLFpVwiLFwiVGNlZGlsXCI6XCLFolwiLFwidGNlZGlsXCI6XCLFo1wiLFwiVGN5XCI6XCLQolwiLFwidGN5XCI6XCLRglwiLFwidGRvdFwiOlwi4oObXCIsXCJ0ZWxyZWNcIjpcIuKMlVwiLFwiVGZyXCI6XCLwnZSXXCIsXCJ0ZnJcIjpcIvCdlLFcIixcInRoZXJlNFwiOlwi4oi0XCIsXCJ0aGVyZWZvcmVcIjpcIuKItFwiLFwiVGhlcmVmb3JlXCI6XCLiiLRcIixcIlRoZXRhXCI6XCLOmFwiLFwidGhldGFcIjpcIs64XCIsXCJ0aGV0YXN5bVwiOlwiz5FcIixcInRoZXRhdlwiOlwiz5FcIixcInRoaWNrYXBwcm94XCI6XCLiiYhcIixcInRoaWNrc2ltXCI6XCLiiLxcIixcIlRoaWNrU3BhY2VcIjpcIuKBn+KAilwiLFwiVGhpblNwYWNlXCI6XCLigIlcIixcInRoaW5zcFwiOlwi4oCJXCIsXCJ0aGthcFwiOlwi4omIXCIsXCJ0aGtzaW1cIjpcIuKIvFwiLFwiVEhPUk5cIjpcIsOeXCIsXCJ0aG9yblwiOlwiw75cIixcInRpbGRlXCI6XCLLnFwiLFwiVGlsZGVcIjpcIuKIvFwiLFwiVGlsZGVFcXVhbFwiOlwi4omDXCIsXCJUaWxkZUZ1bGxFcXVhbFwiOlwi4omFXCIsXCJUaWxkZVRpbGRlXCI6XCLiiYhcIixcInRpbWVzYmFyXCI6XCLiqLFcIixcInRpbWVzYlwiOlwi4oqgXCIsXCJ0aW1lc1wiOlwiw5dcIixcInRpbWVzZFwiOlwi4qiwXCIsXCJ0aW50XCI6XCLiiK1cIixcInRvZWFcIjpcIuKkqFwiLFwidG9wYm90XCI6XCLijLZcIixcInRvcGNpclwiOlwi4quxXCIsXCJ0b3BcIjpcIuKKpFwiLFwiVG9wZlwiOlwi8J2Vi1wiLFwidG9wZlwiOlwi8J2VpVwiLFwidG9wZm9ya1wiOlwi4quaXCIsXCJ0b3NhXCI6XCLipKlcIixcInRwcmltZVwiOlwi4oC0XCIsXCJ0cmFkZVwiOlwi4oSiXCIsXCJUUkFERVwiOlwi4oSiXCIsXCJ0cmlhbmdsZVwiOlwi4pa1XCIsXCJ0cmlhbmdsZWRvd25cIjpcIuKWv1wiLFwidHJpYW5nbGVsZWZ0XCI6XCLil4NcIixcInRyaWFuZ2xlbGVmdGVxXCI6XCLiirRcIixcInRyaWFuZ2xlcVwiOlwi4omcXCIsXCJ0cmlhbmdsZXJpZ2h0XCI6XCLilrlcIixcInRyaWFuZ2xlcmlnaHRlcVwiOlwi4oq1XCIsXCJ0cmlkb3RcIjpcIuKXrFwiLFwidHJpZVwiOlwi4omcXCIsXCJ0cmltaW51c1wiOlwi4qi6XCIsXCJUcmlwbGVEb3RcIjpcIuKDm1wiLFwidHJpcGx1c1wiOlwi4qi5XCIsXCJ0cmlzYlwiOlwi4qeNXCIsXCJ0cml0aW1lXCI6XCLiqLtcIixcInRycGV6aXVtXCI6XCLij6JcIixcIlRzY3JcIjpcIvCdkq9cIixcInRzY3JcIjpcIvCdk4lcIixcIlRTY3lcIjpcItCmXCIsXCJ0c2N5XCI6XCLRhlwiLFwiVFNIY3lcIjpcItCLXCIsXCJ0c2hjeVwiOlwi0ZtcIixcIlRzdHJva1wiOlwixaZcIixcInRzdHJva1wiOlwixadcIixcInR3aXh0XCI6XCLiiaxcIixcInR3b2hlYWRsZWZ0YXJyb3dcIjpcIuKGnlwiLFwidHdvaGVhZHJpZ2h0YXJyb3dcIjpcIuKGoFwiLFwiVWFjdXRlXCI6XCLDmlwiLFwidWFjdXRlXCI6XCLDulwiLFwidWFyclwiOlwi4oaRXCIsXCJVYXJyXCI6XCLihp9cIixcInVBcnJcIjpcIuKHkVwiLFwiVWFycm9jaXJcIjpcIuKliVwiLFwiVWJyY3lcIjpcItCOXCIsXCJ1YnJjeVwiOlwi0Z5cIixcIlVicmV2ZVwiOlwixaxcIixcInVicmV2ZVwiOlwixa1cIixcIlVjaXJjXCI6XCLDm1wiLFwidWNpcmNcIjpcIsO7XCIsXCJVY3lcIjpcItCjXCIsXCJ1Y3lcIjpcItGDXCIsXCJ1ZGFyclwiOlwi4oeFXCIsXCJVZGJsYWNcIjpcIsWwXCIsXCJ1ZGJsYWNcIjpcIsWxXCIsXCJ1ZGhhclwiOlwi4qWuXCIsXCJ1ZmlzaHRcIjpcIuKlvlwiLFwiVWZyXCI6XCLwnZSYXCIsXCJ1ZnJcIjpcIvCdlLJcIixcIlVncmF2ZVwiOlwiw5lcIixcInVncmF2ZVwiOlwiw7lcIixcInVIYXJcIjpcIuKlo1wiLFwidWhhcmxcIjpcIuKGv1wiLFwidWhhcnJcIjpcIuKGvlwiLFwidWhibGtcIjpcIuKWgFwiLFwidWxjb3JuXCI6XCLijJxcIixcInVsY29ybmVyXCI6XCLijJxcIixcInVsY3JvcFwiOlwi4oyPXCIsXCJ1bHRyaVwiOlwi4pe4XCIsXCJVbWFjclwiOlwixapcIixcInVtYWNyXCI6XCLFq1wiLFwidW1sXCI6XCLCqFwiLFwiVW5kZXJCYXJcIjpcIl9cIixcIlVuZGVyQnJhY2VcIjpcIuKPn1wiLFwiVW5kZXJCcmFja2V0XCI6XCLijrVcIixcIlVuZGVyUGFyZW50aGVzaXNcIjpcIuKPnVwiLFwiVW5pb25cIjpcIuKLg1wiLFwiVW5pb25QbHVzXCI6XCLiio5cIixcIlVvZ29uXCI6XCLFslwiLFwidW9nb25cIjpcIsWzXCIsXCJVb3BmXCI6XCLwnZWMXCIsXCJ1b3BmXCI6XCLwnZWmXCIsXCJVcEFycm93QmFyXCI6XCLipJJcIixcInVwYXJyb3dcIjpcIuKGkVwiLFwiVXBBcnJvd1wiOlwi4oaRXCIsXCJVcGFycm93XCI6XCLih5FcIixcIlVwQXJyb3dEb3duQXJyb3dcIjpcIuKHhVwiLFwidXBkb3duYXJyb3dcIjpcIuKGlVwiLFwiVXBEb3duQXJyb3dcIjpcIuKGlVwiLFwiVXBkb3duYXJyb3dcIjpcIuKHlVwiLFwiVXBFcXVpbGlicml1bVwiOlwi4qWuXCIsXCJ1cGhhcnBvb25sZWZ0XCI6XCLihr9cIixcInVwaGFycG9vbnJpZ2h0XCI6XCLihr5cIixcInVwbHVzXCI6XCLiio5cIixcIlVwcGVyTGVmdEFycm93XCI6XCLihpZcIixcIlVwcGVyUmlnaHRBcnJvd1wiOlwi4oaXXCIsXCJ1cHNpXCI6XCLPhVwiLFwiVXBzaVwiOlwiz5JcIixcInVwc2loXCI6XCLPklwiLFwiVXBzaWxvblwiOlwizqVcIixcInVwc2lsb25cIjpcIs+FXCIsXCJVcFRlZUFycm93XCI6XCLihqVcIixcIlVwVGVlXCI6XCLiiqVcIixcInVwdXBhcnJvd3NcIjpcIuKHiFwiLFwidXJjb3JuXCI6XCLijJ1cIixcInVyY29ybmVyXCI6XCLijJ1cIixcInVyY3JvcFwiOlwi4oyOXCIsXCJVcmluZ1wiOlwixa5cIixcInVyaW5nXCI6XCLFr1wiLFwidXJ0cmlcIjpcIuKXuVwiLFwiVXNjclwiOlwi8J2SsFwiLFwidXNjclwiOlwi8J2TilwiLFwidXRkb3RcIjpcIuKLsFwiLFwiVXRpbGRlXCI6XCLFqFwiLFwidXRpbGRlXCI6XCLFqVwiLFwidXRyaVwiOlwi4pa1XCIsXCJ1dHJpZlwiOlwi4pa0XCIsXCJ1dWFyclwiOlwi4oeIXCIsXCJVdW1sXCI6XCLDnFwiLFwidXVtbFwiOlwiw7xcIixcInV3YW5nbGVcIjpcIuKmp1wiLFwidmFuZ3J0XCI6XCLippxcIixcInZhcmVwc2lsb25cIjpcIs+1XCIsXCJ2YXJrYXBwYVwiOlwiz7BcIixcInZhcm5vdGhpbmdcIjpcIuKIhVwiLFwidmFycGhpXCI6XCLPlVwiLFwidmFycGlcIjpcIs+WXCIsXCJ2YXJwcm9wdG9cIjpcIuKInVwiLFwidmFyclwiOlwi4oaVXCIsXCJ2QXJyXCI6XCLih5VcIixcInZhcnJob1wiOlwiz7FcIixcInZhcnNpZ21hXCI6XCLPglwiLFwidmFyc3Vic2V0bmVxXCI6XCLiiorvuIBcIixcInZhcnN1YnNldG5lcXFcIjpcIuKri++4gFwiLFwidmFyc3Vwc2V0bmVxXCI6XCLiiovvuIBcIixcInZhcnN1cHNldG5lcXFcIjpcIuKrjO+4gFwiLFwidmFydGhldGFcIjpcIs+RXCIsXCJ2YXJ0cmlhbmdsZWxlZnRcIjpcIuKKslwiLFwidmFydHJpYW5nbGVyaWdodFwiOlwi4oqzXCIsXCJ2QmFyXCI6XCLiq6hcIixcIlZiYXJcIjpcIuKrq1wiLFwidkJhcnZcIjpcIuKrqVwiLFwiVmN5XCI6XCLQklwiLFwidmN5XCI6XCLQslwiLFwidmRhc2hcIjpcIuKKolwiLFwidkRhc2hcIjpcIuKKqFwiLFwiVmRhc2hcIjpcIuKKqVwiLFwiVkRhc2hcIjpcIuKKq1wiLFwiVmRhc2hsXCI6XCLiq6ZcIixcInZlZWJhclwiOlwi4oq7XCIsXCJ2ZWVcIjpcIuKIqFwiLFwiVmVlXCI6XCLii4FcIixcInZlZWVxXCI6XCLiiZpcIixcInZlbGxpcFwiOlwi4ouuXCIsXCJ2ZXJiYXJcIjpcInxcIixcIlZlcmJhclwiOlwi4oCWXCIsXCJ2ZXJ0XCI6XCJ8XCIsXCJWZXJ0XCI6XCLigJZcIixcIlZlcnRpY2FsQmFyXCI6XCLiiKNcIixcIlZlcnRpY2FsTGluZVwiOlwifFwiLFwiVmVydGljYWxTZXBhcmF0b3JcIjpcIuKdmFwiLFwiVmVydGljYWxUaWxkZVwiOlwi4omAXCIsXCJWZXJ5VGhpblNwYWNlXCI6XCLigIpcIixcIlZmclwiOlwi8J2UmVwiLFwidmZyXCI6XCLwnZSzXCIsXCJ2bHRyaVwiOlwi4oqyXCIsXCJ2bnN1YlwiOlwi4oqC4oOSXCIsXCJ2bnN1cFwiOlwi4oqD4oOSXCIsXCJWb3BmXCI6XCLwnZWNXCIsXCJ2b3BmXCI6XCLwnZWnXCIsXCJ2cHJvcFwiOlwi4oidXCIsXCJ2cnRyaVwiOlwi4oqzXCIsXCJWc2NyXCI6XCLwnZKxXCIsXCJ2c2NyXCI6XCLwnZOLXCIsXCJ2c3VibkVcIjpcIuKri++4gFwiLFwidnN1Ym5lXCI6XCLiiorvuIBcIixcInZzdXBuRVwiOlwi4quM77iAXCIsXCJ2c3VwbmVcIjpcIuKKi++4gFwiLFwiVnZkYXNoXCI6XCLiiqpcIixcInZ6aWd6YWdcIjpcIuKmmlwiLFwiV2NpcmNcIjpcIsW0XCIsXCJ3Y2lyY1wiOlwixbVcIixcIndlZGJhclwiOlwi4qmfXCIsXCJ3ZWRnZVwiOlwi4oinXCIsXCJXZWRnZVwiOlwi4ouAXCIsXCJ3ZWRnZXFcIjpcIuKJmVwiLFwid2VpZXJwXCI6XCLihJhcIixcIldmclwiOlwi8J2UmlwiLFwid2ZyXCI6XCLwnZS0XCIsXCJXb3BmXCI6XCLwnZWOXCIsXCJ3b3BmXCI6XCLwnZWoXCIsXCJ3cFwiOlwi4oSYXCIsXCJ3clwiOlwi4omAXCIsXCJ3cmVhdGhcIjpcIuKJgFwiLFwiV3NjclwiOlwi8J2SslwiLFwid3NjclwiOlwi8J2TjFwiLFwieGNhcFwiOlwi4ouCXCIsXCJ4Y2lyY1wiOlwi4pevXCIsXCJ4Y3VwXCI6XCLii4NcIixcInhkdHJpXCI6XCLilr1cIixcIlhmclwiOlwi8J2Um1wiLFwieGZyXCI6XCLwnZS1XCIsXCJ4aGFyclwiOlwi4p+3XCIsXCJ4aEFyclwiOlwi4p+6XCIsXCJYaVwiOlwizp5cIixcInhpXCI6XCLOvlwiLFwieGxhcnJcIjpcIuKftVwiLFwieGxBcnJcIjpcIuKfuFwiLFwieG1hcFwiOlwi4p+8XCIsXCJ4bmlzXCI6XCLii7tcIixcInhvZG90XCI6XCLiqIBcIixcIlhvcGZcIjpcIvCdlY9cIixcInhvcGZcIjpcIvCdlalcIixcInhvcGx1c1wiOlwi4qiBXCIsXCJ4b3RpbWVcIjpcIuKoglwiLFwieHJhcnJcIjpcIuKftlwiLFwieHJBcnJcIjpcIuKfuVwiLFwiWHNjclwiOlwi8J2Ss1wiLFwieHNjclwiOlwi8J2TjVwiLFwieHNxY3VwXCI6XCLiqIZcIixcInh1cGx1c1wiOlwi4qiEXCIsXCJ4dXRyaVwiOlwi4pazXCIsXCJ4dmVlXCI6XCLii4FcIixcInh3ZWRnZVwiOlwi4ouAXCIsXCJZYWN1dGVcIjpcIsOdXCIsXCJ5YWN1dGVcIjpcIsO9XCIsXCJZQWN5XCI6XCLQr1wiLFwieWFjeVwiOlwi0Y9cIixcIlljaXJjXCI6XCLFtlwiLFwieWNpcmNcIjpcIsW3XCIsXCJZY3lcIjpcItCrXCIsXCJ5Y3lcIjpcItGLXCIsXCJ5ZW5cIjpcIsKlXCIsXCJZZnJcIjpcIvCdlJxcIixcInlmclwiOlwi8J2UtlwiLFwiWUljeVwiOlwi0IdcIixcInlpY3lcIjpcItGXXCIsXCJZb3BmXCI6XCLwnZWQXCIsXCJ5b3BmXCI6XCLwnZWqXCIsXCJZc2NyXCI6XCLwnZK0XCIsXCJ5c2NyXCI6XCLwnZOOXCIsXCJZVWN5XCI6XCLQrlwiLFwieXVjeVwiOlwi0Y5cIixcInl1bWxcIjpcIsO/XCIsXCJZdW1sXCI6XCLFuFwiLFwiWmFjdXRlXCI6XCLFuVwiLFwiemFjdXRlXCI6XCLFulwiLFwiWmNhcm9uXCI6XCLFvVwiLFwiemNhcm9uXCI6XCLFvlwiLFwiWmN5XCI6XCLQl1wiLFwiemN5XCI6XCLQt1wiLFwiWmRvdFwiOlwixbtcIixcInpkb3RcIjpcIsW8XCIsXCJ6ZWV0cmZcIjpcIuKEqFwiLFwiWmVyb1dpZHRoU3BhY2VcIjpcIuKAi1wiLFwiWmV0YVwiOlwizpZcIixcInpldGFcIjpcIs62XCIsXCJ6ZnJcIjpcIvCdlLdcIixcIlpmclwiOlwi4oSoXCIsXCJaSGN5XCI6XCLQllwiLFwiemhjeVwiOlwi0LZcIixcInppZ3JhcnJcIjpcIuKHnVwiLFwiem9wZlwiOlwi8J2Vq1wiLFwiWm9wZlwiOlwi4oSkXCIsXCJac2NyXCI6XCLwnZK1XCIsXCJ6c2NyXCI6XCLwnZOPXCIsXCJ6d2pcIjpcIuKAjVwiLFwiendualwiOlwi4oCMXCJ9XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7XCJ1bml2ZXJzYWxcIjo1MCxcInRhZ1wiOjMwLFwiYXR0cmlidXRlXCI6MSxcInBzZXVkb1wiOjAsXCJkZXNjZW5kYW50XCI6LTEsXCJjaGlsZFwiOi0xLFwicGFyZW50XCI6LTEsXCJzaWJsaW5nXCI6LTEsXCJhZGphY2VudFwiOi0xfVxuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gSW5zcGlyZWQgYnkgR29vZ2xlIENsb3N1cmU6XG4vLyBodHRwOi8vY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL3N2bi9kb2NzL1xuLy8gY2xvc3VyZV9nb29nX2FycmF5X2FycmF5LmpzLmh0bWwjZ29vZy5hcnJheS5jbGVhclxuXG5cblxudmFyIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhbHVlKHRoaXMpLmxlbmd0aCA9IDA7XG5cdHJldHVybiB0aGlzO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7fTtcblxuXG4vKioqLyB9KSxcbi8qIDE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxKVxuXG4gICwgbWF4ID0gTWF0aC5tYXg7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gcmV0dXJuIG1heCgwLCB0b0ludGVnZXIodmFsdWUpKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZSwgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsIHBsYWluT2JqZWN0ID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKC8qIEN1c3RvbUNyZWF0ZSovKSB7XG5cdHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiwgY3VzdG9tQ3JlYXRlID0gYXJndW1lbnRzWzBdIHx8IGNyZWF0ZTtcblx0aWYgKHR5cGVvZiBzZXRQcm90b3R5cGVPZiAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiBnZXRQcm90b3R5cGVPZihzZXRQcm90b3R5cGVPZihjdXN0b21DcmVhdGUobnVsbCksIHBsYWluT2JqZWN0KSkgPT09IHBsYWluT2JqZWN0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDIwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogZXNsaW50IG5vLXByb3RvOiBcIm9mZlwiICovXG5cbi8vIEJpZyB0aGFua3MgdG8gQFdlYlJlZmxlY3Rpb24gZm9yIHNvcnRpbmcgdGhpcyBvdXRcbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL1dlYlJlZmxlY3Rpb24vNTU5MzU1NFxuXG5cblxudmFyIGlzT2JqZWN0ICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNTUpXG4gICwgdmFsdWUgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKVxuICAsIG9iaklzUHJvdG90eXBlT2YgPSBPYmplY3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2ZcbiAgLCBkZWZpbmVQcm9wZXJ0eSAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHlcbiAgLCBudWxsRGVzYyAgICAgICAgPSB7XG5cdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdHdyaXRhYmxlOiB0cnVlLFxuXHR2YWx1ZTogdW5kZWZpbmVkXG59XG4gICwgdmFsaWRhdGU7XG5cbnZhbGlkYXRlID0gZnVuY3Rpb24gKG9iaiwgcHJvdG90eXBlKSB7XG5cdHZhbHVlKG9iaik7XG5cdGlmIChwcm90b3R5cGUgPT09IG51bGwgfHwgaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIG9iajtcblx0dGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3RvdHlwZSBtdXN0IGJlIG51bGwgb3IgYW4gb2JqZWN0XCIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKHN0YXR1cykge1xuXHR2YXIgZm4sIHNldDtcblx0aWYgKCFzdGF0dXMpIHJldHVybiBudWxsO1xuXHRpZiAoc3RhdHVzLmxldmVsID09PSAyKSB7XG5cdFx0aWYgKHN0YXR1cy5zZXQpIHtcblx0XHRcdHNldCA9IHN0YXR1cy5zZXQ7XG5cdFx0XHRmbiA9IGZ1bmN0aW9uIChvYmosIHByb3RvdHlwZSkge1xuXHRcdFx0XHRzZXQuY2FsbCh2YWxpZGF0ZShvYmosIHByb3RvdHlwZSksIHByb3RvdHlwZSk7XG5cdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmbiA9IGZ1bmN0aW9uIChvYmosIHByb3RvdHlwZSkge1xuXHRcdFx0XHR2YWxpZGF0ZShvYmosIHByb3RvdHlwZSkuX19wcm90b19fID0gcHJvdG90eXBlO1xuXHRcdFx0XHRyZXR1cm4gb2JqO1xuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Zm4gPSBmdW5jdGlvbiBzZWxmKG9iaiwgcHJvdG90eXBlKSB7XG5cdFx0XHR2YXIgaXNOdWxsQmFzZTtcblx0XHRcdHZhbGlkYXRlKG9iaiwgcHJvdG90eXBlKTtcblx0XHRcdGlzTnVsbEJhc2UgPSBvYmpJc1Byb3RvdHlwZU9mLmNhbGwoc2VsZi5udWxsUG9seWZpbGwsIG9iaik7XG5cdFx0XHRpZiAoaXNOdWxsQmFzZSkgZGVsZXRlIHNlbGYubnVsbFBvbHlmaWxsLl9fcHJvdG9fXztcblx0XHRcdGlmIChwcm90b3R5cGUgPT09IG51bGwpIHByb3RvdHlwZSA9IHNlbGYubnVsbFBvbHlmaWxsO1xuXHRcdFx0b2JqLl9fcHJvdG9fXyA9IHByb3RvdHlwZTtcblx0XHRcdGlmIChpc051bGxCYXNlKSBkZWZpbmVQcm9wZXJ0eShzZWxmLm51bGxQb2x5ZmlsbCwgXCJfX3Byb3RvX19cIiwgbnVsbERlc2MpO1xuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9O1xuXHR9XG5cdHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIFwibGV2ZWxcIiwge1xuXHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0d3JpdGFibGU6IGZhbHNlLFxuXHRcdHZhbHVlOiBzdGF0dXMubGV2ZWxcblx0fSk7XG59KFxuXHQoZnVuY3Rpb24gKCkge1xuXHRcdHZhciB0bXBPYmoxID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXHRcdCAgLCB0bXBPYmoyID0ge31cblx0XHQgICwgc2V0XG5cdFx0ICAsIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIFwiX19wcm90b19fXCIpO1xuXG5cdFx0aWYgKGRlc2MpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHNldCA9IGRlc2Muc2V0OyAvLyBPcGVyYSBjcmFzaGVzIGF0IHRoaXMgcG9pbnRcblx0XHRcdFx0c2V0LmNhbGwodG1wT2JqMSwgdG1wT2JqMik7XG5cdFx0XHR9IGNhdGNoIChpZ25vcmUpIHt9XG5cdFx0XHRpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRtcE9iajEpID09PSB0bXBPYmoyKSByZXR1cm4geyBzZXQ6IHNldCwgbGV2ZWw6IDIgfTtcblx0XHR9XG5cblx0XHR0bXBPYmoxLl9fcHJvdG9fXyA9IHRtcE9iajI7XG5cdFx0aWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0bXBPYmoxKSA9PT0gdG1wT2JqMikgcmV0dXJuIHsgbGV2ZWw6IDIgfTtcblxuXHRcdHRtcE9iajEgPSB7fTtcblx0XHR0bXBPYmoxLl9fcHJvdG9fXyA9IHRtcE9iajI7XG5cdFx0aWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0bXBPYmoxKSA9PT0gdG1wT2JqMikgcmV0dXJuIHsgbGV2ZWw6IDEgfTtcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fSkoKVxuKSk7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNTYpO1xuXG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzVmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG52YXIgZm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLCBjcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG52YXIgcHJvY2VzcyA9IGZ1bmN0aW9uIChzcmMsIG9iaikge1xuXHR2YXIga2V5O1xuXHRmb3IgKGtleSBpbiBzcmMpIG9ialtrZXldID0gc3JjW2tleV07XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdHMxIC8qLCDigKZvcHRpb25zKi8pIHtcblx0dmFyIHJlc3VsdCA9IGNyZWF0ZShudWxsKTtcblx0Zm9yRWFjaC5jYWxsKGFyZ3VtZW50cywgZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0XHRpZiAoIWlzVmFsdWUob3B0aW9ucykpIHJldHVybjtcblx0XHRwcm9jZXNzKE9iamVjdChvcHRpb25zKSwgcmVzdWx0KTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzSXRlcmFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0aWYgKCFpc0l0ZXJhYmxlKHZhbHVlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih2YWx1ZSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcblx0cmV0dXJuIHZhbHVlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBmYWxzZUZ1bmMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLmZhbHNlRnVuYztcblxuLy9odHRwczovL2dpdGh1Yi5jb20vc2xldml0aGFuL1hSZWdFeHAvYmxvYi9tYXN0ZXIvc3JjL3hyZWdleHAuanMjTDQ2OVxudmFyIHJlQ2hhcnMgPSAvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2c7XG5cbmZ1bmN0aW9uIGZhY3RvcnkoYWRhcHRlcil7XG5cdC8qXG5cdFx0YXR0cmlidXRlIHNlbGVjdG9yc1xuXHQqL1xuXHR2YXIgYXR0cmlidXRlUnVsZXMgPSB7XG5cdFx0X19wcm90b19fOiBudWxsLFxuXHRcdGVxdWFsczogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSAgPSBkYXRhLm5hbWUsXG5cdFx0XHRcdHZhbHVlID0gZGF0YS52YWx1ZTtcblxuXHRcdFx0aWYoZGF0YS5pZ25vcmVDYXNlKXtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiBlcXVhbHNJQyhlbGVtKXtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlICYmIG5leHQoZWxlbSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBlcXVhbHMoZWxlbSl7XG5cdFx0XHRcdHJldHVybiBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpID09PSB2YWx1ZSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGh5cGhlbjogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSAgPSBkYXRhLm5hbWUsXG5cdFx0XHRcdHZhbHVlID0gZGF0YS52YWx1ZSxcblx0XHRcdFx0bGVuID0gdmFsdWUubGVuZ3RoO1xuXG5cdFx0XHRpZihkYXRhLmlnbm9yZUNhc2Upe1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGh5cGhlbklDKGVsZW0pe1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmXG5cdFx0XHRcdFx0XHRcdChhdHRyLmxlbmd0aCA9PT0gbGVuIHx8IGF0dHIuY2hhckF0KGxlbikgPT09IFwiLVwiKSAmJlxuXHRcdFx0XHRcdFx0XHRhdHRyLnN1YnN0cigwLCBsZW4pLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlICYmXG5cdFx0XHRcdFx0XHRcdG5leHQoZWxlbSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBoeXBoZW4oZWxlbSl7XG5cdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0YXR0ci5zdWJzdHIoMCwgbGVuKSA9PT0gdmFsdWUgJiZcblx0XHRcdFx0XHRcdChhdHRyLmxlbmd0aCA9PT0gbGVuIHx8IGF0dHIuY2hhckF0KGxlbikgPT09IFwiLVwiKSAmJlxuXHRcdFx0XHRcdFx0bmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRlbGVtZW50OiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lID0gZGF0YS5uYW1lLFxuXHRcdFx0XHR2YWx1ZSA9IGRhdGEudmFsdWU7XG5cblx0XHRcdGlmKC9cXHMvLnRlc3QodmFsdWUpKXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlRnVuYztcblx0XHRcdH1cblxuXHRcdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlQ2hhcnMsIFwiXFxcXCQmXCIpO1xuXG5cdFx0XHR2YXIgcGF0dGVybiA9IFwiKD86XnxcXFxccylcIiArIHZhbHVlICsgXCIoPzokfFxcXFxzKVwiLFxuXHRcdFx0XHRmbGFncyA9IGRhdGEuaWdub3JlQ2FzZSA/IFwiaVwiIDogXCJcIixcblx0XHRcdFx0cmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGVsZW1lbnQoZWxlbSl7XG5cdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiByZWdleC50ZXN0KGF0dHIpICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0ZXhpc3RzOiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lID0gZGF0YS5uYW1lO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGV4aXN0cyhlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIG5hbWUpICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0c3RhcnQ6IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgID0gZGF0YS5uYW1lLFxuXHRcdFx0XHR2YWx1ZSA9IGRhdGEudmFsdWUsXG5cdFx0XHRcdGxlbiA9IHZhbHVlLmxlbmd0aDtcblxuXHRcdFx0aWYobGVuID09PSAwKXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlRnVuYztcblx0XHRcdH1cblxuXHRcdFx0aWYoZGF0YS5pZ25vcmVDYXNlKXtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiBzdGFydElDKGVsZW0pe1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIGF0dHIuc3Vic3RyKDAsIGxlbikudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIHN0YXJ0KGVsZW0pe1xuXHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiYgYXR0ci5zdWJzdHIoMCwgbGVuKSA9PT0gdmFsdWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgID0gZGF0YS5uYW1lLFxuXHRcdFx0XHR2YWx1ZSA9IGRhdGEudmFsdWUsXG5cdFx0XHRcdGxlbiAgID0gLXZhbHVlLmxlbmd0aDtcblxuXHRcdFx0aWYobGVuID09PSAwKXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlRnVuYztcblx0XHRcdH1cblxuXHRcdFx0aWYoZGF0YS5pZ25vcmVDYXNlKXtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiBlbmRJQyhlbGVtKXtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiBhdHRyLnN1YnN0cihsZW4pLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlICYmIG5leHQoZWxlbSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBlbmQoZWxlbSl7XG5cdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiBhdHRyLnN1YnN0cihsZW4pID09PSB2YWx1ZSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFueTogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSAgPSBkYXRhLm5hbWUsXG5cdFx0XHRcdHZhbHVlID0gZGF0YS52YWx1ZTtcblxuXHRcdFx0aWYodmFsdWUgPT09IFwiXCIpe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2VGdW5jO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihkYXRhLmlnbm9yZUNhc2Upe1xuXHRcdFx0XHR2YXIgcmVnZXggPSBuZXcgUmVnRXhwKHZhbHVlLnJlcGxhY2UocmVDaGFycywgXCJcXFxcJCZcIiksIFwiaVwiKTtcblxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gYW55SUMoZWxlbSl7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiYgcmVnZXgudGVzdChhdHRyKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gYW55KGVsZW0pe1xuXHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiYgYXR0ci5pbmRleE9mKHZhbHVlKSA+PSAwICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0bm90OiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lICA9IGRhdGEubmFtZSxcblx0XHRcdFx0dmFsdWUgPSBkYXRhLnZhbHVlO1xuXG5cdFx0XHRpZih2YWx1ZSA9PT0gXCJcIil7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiBub3RFbXB0eShlbGVtKXtcblx0XHRcdFx0XHRyZXR1cm4gISFhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpICYmIG5leHQoZWxlbSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2UgaWYoZGF0YS5pZ25vcmVDYXNlKXtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiBub3RJQyhlbGVtKXtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiBhdHRyLnRvTG93ZXJDYXNlKCkgIT09IHZhbHVlICYmIG5leHQoZWxlbSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBub3QoZWxlbSl7XG5cdFx0XHRcdHJldHVybiBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpICE9PSB2YWx1ZSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIHtcblx0XHRjb21waWxlOiBmdW5jdGlvbihuZXh0LCBkYXRhLCBvcHRpb25zKXtcblx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5zdHJpY3QgJiYgKFxuXHRcdFx0XHRkYXRhLmlnbm9yZUNhc2UgfHwgZGF0YS5hY3Rpb24gPT09IFwibm90XCJcblx0XHRcdCkpIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGF0dHJpYnV0ZSBzZWxlY3RvclwiKTtcblx0XHRcdHJldHVybiBhdHRyaWJ1dGVSdWxlc1tkYXRhLmFjdGlvbl0obmV4dCwgZGF0YSk7XG5cdFx0fSxcblx0XHRydWxlczogYXR0cmlidXRlUnVsZXNcblx0fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5O1xuXG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBDU1NzZWxlY3Q7XG5cbnZhciBEb21VdGlscyAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpLFxuXHRmYWxzZUZ1bmMgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNSkuZmFsc2VGdW5jLFxuXHRjb21waWxlRmFjdG9yeSA9IF9fd2VicGFja19yZXF1aXJlX18oNDApLFxuXHRkZWZhdWx0Q29tcGlsZSA9IGNvbXBpbGVGYWN0b3J5KERvbVV0aWxzKTtcblxuZnVuY3Rpb24gYWRhcHRlckNvbXBpbGUoYWRhcHRlcil7XG5cdHJldHVybiBhZGFwdGVyID09PSBEb21VdGlscyA/IGRlZmF1bHRDb21waWxlIDogY29tcGlsZUZhY3RvcnkoYWRhcHRlcik7XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdG9yRnVuYyhzZWFyY2hGdW5jKXtcblx0cmV0dXJuIGZ1bmN0aW9uIHNlbGVjdChxdWVyeSwgZWxlbXMsIG9wdGlvbnMpe1xuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cdFx0b3B0aW9ucy5hZGFwdGVyID0gb3B0aW9ucy5hZGFwdGVyIHx8IERvbVV0aWxzO1xuXHRcdHZhciBjb21waWxlID0gYWRhcHRlckNvbXBpbGUob3B0aW9ucy5hZGFwdGVyKTtcblxuXHRcdGlmKHR5cGVvZiBxdWVyeSAhPT0gXCJmdW5jdGlvblwiKSBxdWVyeSA9IGNvbXBpbGUuY29tcGlsZVVuc2FmZShxdWVyeSwgb3B0aW9ucywgZWxlbXMpO1xuXHRcdGlmKHF1ZXJ5LnNob3VsZFRlc3ROZXh0U2libGluZ3MpIGVsZW1zID0gYXBwZW5kTmV4dFNpYmxpbmdzKChvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dCkgfHwgZWxlbXMsIG9wdGlvbnMuYWRhcHRlcik7XG5cdFx0aWYoIUFycmF5LmlzQXJyYXkoZWxlbXMpKSBlbGVtcyA9IG9wdGlvbnMuYWRhcHRlci5nZXRDaGlsZHJlbihlbGVtcyk7XG5cdFx0ZWxzZSBlbGVtcyA9IG9wdGlvbnMuYWRhcHRlci5yZW1vdmVTdWJzZXRzKGVsZW1zKTtcblx0XHRyZXR1cm4gc2VhcmNoRnVuYyhxdWVyeSwgZWxlbXMsIG9wdGlvbnMpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXROZXh0U2libGluZ3MoZWxlbSwgYWRhcHRlcil7XG5cdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cdGlmKCFBcnJheS5pc0FycmF5KHNpYmxpbmdzKSkgcmV0dXJuIFtdO1xuXHRzaWJsaW5ncyA9IHNpYmxpbmdzLnNsaWNlKDApO1xuXHR3aGlsZShzaWJsaW5ncy5zaGlmdCgpICE9PSBlbGVtKTtcblx0cmV0dXJuIHNpYmxpbmdzO1xufVxuXG5mdW5jdGlvbiBhcHBlbmROZXh0U2libGluZ3MoZWxlbXMsIGFkYXB0ZXIpe1xuXHQvLyBPcmRlciBtYXR0ZXJzIGJlY2F1c2UgalF1ZXJ5IHNlZW1zIHRvIGNoZWNrIHRoZSBjaGlsZHJlbiBiZWZvcmUgdGhlIHNpYmxpbmdzXG5cdGlmKCFBcnJheS5pc0FycmF5KGVsZW1zKSkgZWxlbXMgPSBbZWxlbXNdO1xuXHR2YXIgbmV3RWxlbXMgPSBlbGVtcy5zbGljZSgwKTtcblxuXHRmb3IodmFyIGkgPSAwLCBsZW4gPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKyl7XG5cdFx0dmFyIG5leHRTaWJsaW5ncyA9IGdldE5leHRTaWJsaW5ncyhuZXdFbGVtc1tpXSwgYWRhcHRlcik7XG5cdFx0bmV3RWxlbXMucHVzaC5hcHBseShuZXdFbGVtcywgbmV4dFNpYmxpbmdzKTtcblx0fVxuXHRyZXR1cm4gbmV3RWxlbXM7XG59XG5cbnZhciBzZWxlY3RBbGwgPSBnZXRTZWxlY3RvckZ1bmMoZnVuY3Rpb24gc2VsZWN0QWxsKHF1ZXJ5LCBlbGVtcywgb3B0aW9ucyl7XG5cdHJldHVybiAocXVlcnkgPT09IGZhbHNlRnVuYyB8fCAhZWxlbXMgfHwgZWxlbXMubGVuZ3RoID09PSAwKSA/IFtdIDogb3B0aW9ucy5hZGFwdGVyLmZpbmRBbGwocXVlcnksIGVsZW1zKTtcbn0pO1xuXG52YXIgc2VsZWN0T25lID0gZ2V0U2VsZWN0b3JGdW5jKGZ1bmN0aW9uIHNlbGVjdE9uZShxdWVyeSwgZWxlbXMsIG9wdGlvbnMpe1xuXHRyZXR1cm4gKHF1ZXJ5ID09PSBmYWxzZUZ1bmMgfHwgIWVsZW1zIHx8IGVsZW1zLmxlbmd0aCA9PT0gMCkgPyBudWxsIDogb3B0aW9ucy5hZGFwdGVyLmZpbmRPbmUocXVlcnksIGVsZW1zKTtcbn0pO1xuXG5mdW5jdGlvbiBpcyhlbGVtLCBxdWVyeSwgb3B0aW9ucyl7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cdG9wdGlvbnMuYWRhcHRlciA9IG9wdGlvbnMuYWRhcHRlciB8fCBEb21VdGlscztcblx0dmFyIGNvbXBpbGUgPSBhZGFwdGVyQ29tcGlsZShvcHRpb25zLmFkYXB0ZXIpO1xuXHRyZXR1cm4gKHR5cGVvZiBxdWVyeSA9PT0gXCJmdW5jdGlvblwiID8gcXVlcnkgOiBjb21waWxlKHF1ZXJ5LCBvcHRpb25zKSkoZWxlbSk7XG59XG5cbi8qXG5cdHRoZSBleHBvcnRlZCBpbnRlcmZhY2VcbiovXG5mdW5jdGlvbiBDU1NzZWxlY3QocXVlcnksIGVsZW1zLCBvcHRpb25zKXtcblx0cmV0dXJuIHNlbGVjdEFsbChxdWVyeSwgZWxlbXMsIG9wdGlvbnMpO1xufVxuXG5DU1NzZWxlY3QuY29tcGlsZSA9IGRlZmF1bHRDb21waWxlO1xuQ1NTc2VsZWN0LmZpbHRlcnMgPSBkZWZhdWx0Q29tcGlsZS5Qc2V1ZG9zLmZpbHRlcnM7XG5DU1NzZWxlY3QucHNldWRvcyA9IGRlZmF1bHRDb21waWxlLlBzZXVkb3MucHNldWRvcztcblxuQ1NTc2VsZWN0LnNlbGVjdEFsbCA9IHNlbGVjdEFsbDtcbkNTU3NlbGVjdC5zZWxlY3RPbmUgPSBzZWxlY3RPbmU7XG5cbkNTU3NlbGVjdC5pcyA9IGlzO1xuXG4vL2xlZ2FjeSBtZXRob2RzIChtaWdodCBiZSByZW1vdmVkKVxuQ1NTc2VsZWN0LnBhcnNlID0gZGVmYXVsdENvbXBpbGU7XG5DU1NzZWxlY3QuaXRlcmF0ZSA9IHNlbGVjdEFsbDtcblxuLy9ob29rc1xuQ1NTc2VsZWN0Ll9jb21waWxlVW5zYWZlID0gZGVmYXVsdENvbXBpbGUuY29tcGlsZVVuc2FmZTtcbkNTU3NlbGVjdC5fY29tcGlsZVRva2VuID0gZGVmYXVsdENvbXBpbGUuY29tcGlsZVRva2VuO1xuXG5cbi8qKiovIH0pLFxuLyogMjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIERvbVV0aWxzID0gbW9kdWxlLmV4cG9ydHM7XG5cbltcblx0X193ZWJwYWNrX3JlcXVpcmVfXygyNiksXG5cdF9fd2VicGFja19yZXF1aXJlX18oMzUpLFxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KSxcblx0X193ZWJwYWNrX3JlcXVpcmVfXygzNyksXG5cdF9fd2VicGFja19yZXF1aXJlX18oMzgpLFxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KVxuXS5mb3JFYWNoKGZ1bmN0aW9uKGV4dCl7XG5cdE9iamVjdC5rZXlzKGV4dCkuZm9yRWFjaChmdW5jdGlvbihrZXkpe1xuXHRcdERvbVV0aWxzW2tleV0gPSBleHRba2V5XS5iaW5kKERvbVV0aWxzKTtcblx0fSk7XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDI2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBFbGVtZW50VHlwZSA9IF9fd2VicGFja19yZXF1aXJlX18oOSksXG4gICAgZ2V0T3V0ZXJIVE1MID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyksXG4gICAgaXNUYWcgPSBFbGVtZW50VHlwZS5pc1RhZztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdGdldElubmVySFRNTDogZ2V0SW5uZXJIVE1MLFxuXHRnZXRPdXRlckhUTUw6IGdldE91dGVySFRNTCxcblx0Z2V0VGV4dDogZ2V0VGV4dFxufTtcblxuZnVuY3Rpb24gZ2V0SW5uZXJIVE1MKGVsZW0sIG9wdHMpe1xuXHRyZXR1cm4gZWxlbS5jaGlsZHJlbiA/IGVsZW0uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGVsZW0pe1xuXHRcdHJldHVybiBnZXRPdXRlckhUTUwoZWxlbSwgb3B0cyk7XG5cdH0pLmpvaW4oXCJcIikgOiBcIlwiO1xufVxuXG5mdW5jdGlvbiBnZXRUZXh0KGVsZW0pe1xuXHRpZihBcnJheS5pc0FycmF5KGVsZW0pKSByZXR1cm4gZWxlbS5tYXAoZ2V0VGV4dCkuam9pbihcIlwiKTtcblx0aWYoaXNUYWcoZWxlbSkgfHwgZWxlbS50eXBlID09PSBFbGVtZW50VHlwZS5DREFUQSkgcmV0dXJuIGdldFRleHQoZWxlbS5jaGlsZHJlbik7XG5cdGlmKGVsZW0udHlwZSA9PT0gRWxlbWVudFR5cGUuVGV4dCkgcmV0dXJuIGVsZW0uZGF0YTtcblx0cmV0dXJuIFwiXCI7XG59XG5cblxuLyoqKi8gfSksXG4vKiAyNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vKlxuICBNb2R1bGUgZGVwZW5kZW5jaWVzXG4qL1xudmFyIEVsZW1lbnRUeXBlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOCk7XG52YXIgZW50aXRpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcblxuLypcbiAgQm9vbGVhbiBBdHRyaWJ1dGVzXG4qL1xudmFyIGJvb2xlYW5BdHRyaWJ1dGVzID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIGFsbG93ZnVsbHNjcmVlbjogdHJ1ZSxcbiAgYXN5bmM6IHRydWUsXG4gIGF1dG9mb2N1czogdHJ1ZSxcbiAgYXV0b3BsYXk6IHRydWUsXG4gIGNoZWNrZWQ6IHRydWUsXG4gIGNvbnRyb2xzOiB0cnVlLFxuICBkZWZhdWx0OiB0cnVlLFxuICBkZWZlcjogdHJ1ZSxcbiAgZGlzYWJsZWQ6IHRydWUsXG4gIGhpZGRlbjogdHJ1ZSxcbiAgaXNtYXA6IHRydWUsXG4gIGxvb3A6IHRydWUsXG4gIG11bHRpcGxlOiB0cnVlLFxuICBtdXRlZDogdHJ1ZSxcbiAgb3BlbjogdHJ1ZSxcbiAgcmVhZG9ubHk6IHRydWUsXG4gIHJlcXVpcmVkOiB0cnVlLFxuICByZXZlcnNlZDogdHJ1ZSxcbiAgc2NvcGVkOiB0cnVlLFxuICBzZWFtbGVzczogdHJ1ZSxcbiAgc2VsZWN0ZWQ6IHRydWUsXG4gIHR5cGVtdXN0bWF0Y2g6IHRydWVcbn07XG5cbnZhciB1bmVuY29kZWRFbGVtZW50cyA9IHtcbiAgX19wcm90b19fOiBudWxsLFxuICBzdHlsZTogdHJ1ZSxcbiAgc2NyaXB0OiB0cnVlLFxuICB4bXA6IHRydWUsXG4gIGlmcmFtZTogdHJ1ZSxcbiAgbm9lbWJlZDogdHJ1ZSxcbiAgbm9mcmFtZXM6IHRydWUsXG4gIHBsYWludGV4dDogdHJ1ZSxcbiAgbm9zY3JpcHQ6IHRydWVcbn07XG5cbi8qXG4gIEZvcm1hdCBhdHRyaWJ1dGVzXG4qL1xuZnVuY3Rpb24gZm9ybWF0QXR0cnMoYXR0cmlidXRlcywgb3B0cykge1xuICBpZiAoIWF0dHJpYnV0ZXMpIHJldHVybjtcblxuICB2YXIgb3V0cHV0ID0gJycsXG4gICAgICB2YWx1ZTtcblxuICAvLyBMb29wIHRocm91Z2ggdGhlIGF0dHJpYnV0ZXNcbiAgZm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHtcbiAgICB2YWx1ZSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICBpZiAob3V0cHV0KSB7XG4gICAgICBvdXRwdXQgKz0gJyAnO1xuICAgIH1cblxuICAgIGlmICghdmFsdWUgJiYgYm9vbGVhbkF0dHJpYnV0ZXNba2V5XSkge1xuICAgICAgb3V0cHV0ICs9IGtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ICs9IGtleSArICc9XCInICsgKG9wdHMuZGVjb2RlRW50aXRpZXMgPyBlbnRpdGllcy5lbmNvZGVYTUwodmFsdWUpIDogdmFsdWUpICsgJ1wiJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKlxuICBTZWxmLWVuY2xvc2luZyB0YWdzIChzdG9sZW4gZnJvbSBub2RlLWh0bWxwYXJzZXIpXG4qL1xudmFyIHNpbmdsZVRhZyA9IHtcbiAgX19wcm90b19fOiBudWxsLFxuICBhcmVhOiB0cnVlLFxuICBiYXNlOiB0cnVlLFxuICBiYXNlZm9udDogdHJ1ZSxcbiAgYnI6IHRydWUsXG4gIGNvbDogdHJ1ZSxcbiAgY29tbWFuZDogdHJ1ZSxcbiAgZW1iZWQ6IHRydWUsXG4gIGZyYW1lOiB0cnVlLFxuICBocjogdHJ1ZSxcbiAgaW1nOiB0cnVlLFxuICBpbnB1dDogdHJ1ZSxcbiAgaXNpbmRleDogdHJ1ZSxcbiAga2V5Z2VuOiB0cnVlLFxuICBsaW5rOiB0cnVlLFxuICBtZXRhOiB0cnVlLFxuICBwYXJhbTogdHJ1ZSxcbiAgc291cmNlOiB0cnVlLFxuICB0cmFjazogdHJ1ZSxcbiAgd2JyOiB0cnVlLFxufTtcblxuXG52YXIgcmVuZGVyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkb20sIG9wdHMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGRvbSkgJiYgIWRvbS5jaGVlcmlvKSBkb20gPSBbZG9tXTtcbiAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgdmFyIG91dHB1dCA9ICcnO1xuXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBkb20ubGVuZ3RoOyBpKyspe1xuICAgIHZhciBlbGVtID0gZG9tW2ldO1xuXG4gICAgaWYgKGVsZW0udHlwZSA9PT0gJ3Jvb3QnKVxuICAgICAgb3V0cHV0ICs9IHJlbmRlcihlbGVtLmNoaWxkcmVuLCBvcHRzKTtcbiAgICBlbHNlIGlmIChFbGVtZW50VHlwZS5pc1RhZyhlbGVtKSlcbiAgICAgIG91dHB1dCArPSByZW5kZXJUYWcoZWxlbSwgb3B0cyk7XG4gICAgZWxzZSBpZiAoZWxlbS50eXBlID09PSBFbGVtZW50VHlwZS5EaXJlY3RpdmUpXG4gICAgICBvdXRwdXQgKz0gcmVuZGVyRGlyZWN0aXZlKGVsZW0pO1xuICAgIGVsc2UgaWYgKGVsZW0udHlwZSA9PT0gRWxlbWVudFR5cGUuQ29tbWVudClcbiAgICAgIG91dHB1dCArPSByZW5kZXJDb21tZW50KGVsZW0pO1xuICAgIGVsc2UgaWYgKGVsZW0udHlwZSA9PT0gRWxlbWVudFR5cGUuQ0RBVEEpXG4gICAgICBvdXRwdXQgKz0gcmVuZGVyQ2RhdGEoZWxlbSk7XG4gICAgZWxzZVxuICAgICAgb3V0cHV0ICs9IHJlbmRlclRleHQoZWxlbSwgb3B0cyk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufTtcblxuZnVuY3Rpb24gcmVuZGVyVGFnKGVsZW0sIG9wdHMpIHtcbiAgLy8gSGFuZGxlIFNWR1xuICBpZiAoZWxlbS5uYW1lID09PSBcInN2Z1wiKSBvcHRzID0ge2RlY29kZUVudGl0aWVzOiBvcHRzLmRlY29kZUVudGl0aWVzLCB4bWxNb2RlOiB0cnVlfTtcblxuICB2YXIgdGFnID0gJzwnICsgZWxlbS5uYW1lLFxuICAgICAgYXR0cmlicyA9IGZvcm1hdEF0dHJzKGVsZW0uYXR0cmlicywgb3B0cyk7XG5cbiAgaWYgKGF0dHJpYnMpIHtcbiAgICB0YWcgKz0gJyAnICsgYXR0cmlicztcbiAgfVxuXG4gIGlmIChcbiAgICBvcHRzLnhtbE1vZGVcbiAgICAmJiAoIWVsZW0uY2hpbGRyZW4gfHwgZWxlbS5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICkge1xuICAgIHRhZyArPSAnLz4nO1xuICB9IGVsc2Uge1xuICAgIHRhZyArPSAnPic7XG4gICAgaWYgKGVsZW0uY2hpbGRyZW4pIHtcbiAgICAgIHRhZyArPSByZW5kZXIoZWxlbS5jaGlsZHJlbiwgb3B0cyk7XG4gICAgfVxuXG4gICAgaWYgKCFzaW5nbGVUYWdbZWxlbS5uYW1lXSB8fCBvcHRzLnhtbE1vZGUpIHtcbiAgICAgIHRhZyArPSAnPC8nICsgZWxlbS5uYW1lICsgJz4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YWc7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckRpcmVjdGl2ZShlbGVtKSB7XG4gIHJldHVybiAnPCcgKyBlbGVtLmRhdGEgKyAnPic7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRleHQoZWxlbSwgb3B0cykge1xuICB2YXIgZGF0YSA9IGVsZW0uZGF0YSB8fCAnJztcblxuICAvLyBpZiBlbnRpdGllcyB3ZXJlbid0IGRlY29kZWQsIG5vIG5lZWQgdG8gZW5jb2RlIHRoZW0gYmFja1xuICBpZiAob3B0cy5kZWNvZGVFbnRpdGllcyAmJiAhKGVsZW0ucGFyZW50ICYmIGVsZW0ucGFyZW50Lm5hbWUgaW4gdW5lbmNvZGVkRWxlbWVudHMpKSB7XG4gICAgZGF0YSA9IGVudGl0aWVzLmVuY29kZVhNTChkYXRhKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDZGF0YShlbGVtKSB7XG4gIHJldHVybiAnPCFbQ0RBVEFbJyArIGVsZW0uY2hpbGRyZW5bMF0uZGF0YSArICddXT4nO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb21tZW50KGVsZW0pIHtcbiAgcmV0dXJuICc8IS0tJyArIGVsZW0uZGF0YSArICctLT4nO1xufVxuXG5cbi8qKiovIH0pLFxuLyogMjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy9UeXBlcyBvZiBlbGVtZW50cyBmb3VuZCBpbiB0aGUgRE9NXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0VGV4dDogXCJ0ZXh0XCIsIC8vVGV4dFxuXHREaXJlY3RpdmU6IFwiZGlyZWN0aXZlXCIsIC8vPD8gLi4uID8+XG5cdENvbW1lbnQ6IFwiY29tbWVudFwiLCAvLzwhLS0gLi4uIC0tPlxuXHRTY3JpcHQ6IFwic2NyaXB0XCIsIC8vPHNjcmlwdD4gdGFnc1xuXHRTdHlsZTogXCJzdHlsZVwiLCAvLzxzdHlsZT4gdGFnc1xuXHRUYWc6IFwidGFnXCIsIC8vQW55IHRhZ1xuXHRDREFUQTogXCJjZGF0YVwiLCAvLzwhW0NEQVRBWyAuLi4gXV0+XG5cblx0aXNUYWc6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdHJldHVybiBlbGVtLnR5cGUgPT09IFwidGFnXCIgfHwgZWxlbS50eXBlID09PSBcInNjcmlwdFwiIHx8IGVsZW0udHlwZSA9PT0gXCJzdHlsZVwiO1xuXHR9XG59O1xuXG4vKioqLyB9KSxcbi8qIDI5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBlbmNvZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKSxcbiAgICBkZWNvZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcblxuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbihkYXRhLCBsZXZlbCl7XG5cdHJldHVybiAoIWxldmVsIHx8IGxldmVsIDw9IDAgPyBkZWNvZGUuWE1MIDogZGVjb2RlLkhUTUwpKGRhdGEpO1xufTtcblxuZXhwb3J0cy5kZWNvZGVTdHJpY3QgPSBmdW5jdGlvbihkYXRhLCBsZXZlbCl7XG5cdHJldHVybiAoIWxldmVsIHx8IGxldmVsIDw9IDAgPyBkZWNvZGUuWE1MIDogZGVjb2RlLkhUTUxTdHJpY3QpKGRhdGEpO1xufTtcblxuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbihkYXRhLCBsZXZlbCl7XG5cdHJldHVybiAoIWxldmVsIHx8IGxldmVsIDw9IDAgPyBlbmNvZGUuWE1MIDogZW5jb2RlLkhUTUwpKGRhdGEpO1xufTtcblxuZXhwb3J0cy5lbmNvZGVYTUwgPSBlbmNvZGUuWE1MO1xuXG5leHBvcnRzLmVuY29kZUhUTUw0ID1cbmV4cG9ydHMuZW5jb2RlSFRNTDUgPVxuZXhwb3J0cy5lbmNvZGVIVE1MICA9IGVuY29kZS5IVE1MO1xuXG5leHBvcnRzLmRlY29kZVhNTCA9XG5leHBvcnRzLmRlY29kZVhNTFN0cmljdCA9IGRlY29kZS5YTUw7XG5cbmV4cG9ydHMuZGVjb2RlSFRNTDQgPVxuZXhwb3J0cy5kZWNvZGVIVE1MNSA9XG5leHBvcnRzLmRlY29kZUhUTUwgPSBkZWNvZGUuSFRNTDtcblxuZXhwb3J0cy5kZWNvZGVIVE1MNFN0cmljdCA9XG5leHBvcnRzLmRlY29kZUhUTUw1U3RyaWN0ID1cbmV4cG9ydHMuZGVjb2RlSFRNTFN0cmljdCA9IGRlY29kZS5IVE1MU3RyaWN0O1xuXG5leHBvcnRzLmVzY2FwZSA9IGVuY29kZS5lc2NhcGU7XG5cblxuLyoqKi8gfSksXG4vKiAzMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaW52ZXJzZVhNTCA9IGdldEludmVyc2VPYmooX193ZWJwYWNrX3JlcXVpcmVfXygxMykpLFxuICAgIHhtbFJlcGxhY2VyID0gZ2V0SW52ZXJzZVJlcGxhY2VyKGludmVyc2VYTUwpO1xuXG5leHBvcnRzLlhNTCA9IGdldEludmVyc2UoaW52ZXJzZVhNTCwgeG1sUmVwbGFjZXIpO1xuXG52YXIgaW52ZXJzZUhUTUwgPSBnZXRJbnZlcnNlT2JqKF9fd2VicGFja19yZXF1aXJlX18oMTQpKSxcbiAgICBodG1sUmVwbGFjZXIgPSBnZXRJbnZlcnNlUmVwbGFjZXIoaW52ZXJzZUhUTUwpO1xuXG5leHBvcnRzLkhUTUwgPSBnZXRJbnZlcnNlKGludmVyc2VIVE1MLCBodG1sUmVwbGFjZXIpO1xuXG5mdW5jdGlvbiBnZXRJbnZlcnNlT2JqKG9iail7XG5cdHJldHVybiBPYmplY3Qua2V5cyhvYmopLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24oaW52ZXJzZSwgbmFtZSl7XG5cdFx0aW52ZXJzZVtvYmpbbmFtZV1dID0gXCImXCIgKyBuYW1lICsgXCI7XCI7XG5cdFx0cmV0dXJuIGludmVyc2U7XG5cdH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gZ2V0SW52ZXJzZVJlcGxhY2VyKGludmVyc2Upe1xuXHR2YXIgc2luZ2xlID0gW10sXG5cdCAgICBtdWx0aXBsZSA9IFtdO1xuXG5cdE9iamVjdC5rZXlzKGludmVyc2UpLmZvckVhY2goZnVuY3Rpb24oayl7XG5cdFx0aWYoay5sZW5ndGggPT09IDEpe1xuXHRcdFx0c2luZ2xlLnB1c2goXCJcXFxcXCIgKyBrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bXVsdGlwbGUucHVzaChrKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vVE9ETyBhZGQgcmFuZ2VzXG5cdG11bHRpcGxlLnVuc2hpZnQoXCJbXCIgKyBzaW5nbGUuam9pbihcIlwiKSArIFwiXVwiKTtcblxuXHRyZXR1cm4gbmV3IFJlZ0V4cChtdWx0aXBsZS5qb2luKFwifFwiKSwgXCJnXCIpO1xufVxuXG52YXIgcmVfbm9uQVNDSUkgPSAvW15cXDAtXFx4N0ZdL2csXG4gICAgcmVfYXN0cmFsU3ltYm9scyA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2c7XG5cbmZ1bmN0aW9uIHNpbmdsZUNoYXJSZXBsYWNlcihjKXtcblx0cmV0dXJuIFwiJiN4XCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyBcIjtcIjtcbn1cblxuZnVuY3Rpb24gYXN0cmFsUmVwbGFjZXIoYyl7XG5cdC8vIGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdHZhciBoaWdoID0gYy5jaGFyQ29kZUF0KDApO1xuXHR2YXIgbG93ICA9IGMuY2hhckNvZGVBdCgxKTtcblx0dmFyIGNvZGVQb2ludCA9IChoaWdoIC0gMHhEODAwKSAqIDB4NDAwICsgbG93IC0gMHhEQzAwICsgMHgxMDAwMDtcblx0cmV0dXJuIFwiJiN4XCIgKyBjb2RlUG9pbnQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyBcIjtcIjtcbn1cblxuZnVuY3Rpb24gZ2V0SW52ZXJzZShpbnZlcnNlLCByZSl7XG5cdGZ1bmN0aW9uIGZ1bmMobmFtZSl7XG5cdFx0cmV0dXJuIGludmVyc2VbbmFtZV07XG5cdH1cblxuXHRyZXR1cm4gZnVuY3Rpb24oZGF0YSl7XG5cdFx0cmV0dXJuIGRhdGFcblx0XHRcdFx0LnJlcGxhY2UocmUsIGZ1bmMpXG5cdFx0XHRcdC5yZXBsYWNlKHJlX2FzdHJhbFN5bWJvbHMsIGFzdHJhbFJlcGxhY2VyKVxuXHRcdFx0XHQucmVwbGFjZShyZV9ub25BU0NJSSwgc2luZ2xlQ2hhclJlcGxhY2VyKTtcblx0fTtcbn1cblxudmFyIHJlX3htbENoYXJzID0gZ2V0SW52ZXJzZVJlcGxhY2VyKGludmVyc2VYTUwpO1xuXG5mdW5jdGlvbiBlc2NhcGVYTUwoZGF0YSl7XG5cdHJldHVybiBkYXRhXG5cdFx0XHQucmVwbGFjZShyZV94bWxDaGFycywgc2luZ2xlQ2hhclJlcGxhY2VyKVxuXHRcdFx0LnJlcGxhY2UocmVfYXN0cmFsU3ltYm9scywgYXN0cmFsUmVwbGFjZXIpXG5cdFx0XHQucmVwbGFjZShyZV9ub25BU0NJSSwgc2luZ2xlQ2hhclJlcGxhY2VyKTtcbn1cblxuZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGVYTUw7XG5cblxuLyoqKi8gfSksXG4vKiAzMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZW50aXR5TWFwID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCksXG4gICAgbGVnYWN5TWFwID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMiksXG4gICAgeG1sTWFwICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyksXG4gICAgZGVjb2RlQ29kZVBvaW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XG5cbnZhciBkZWNvZGVYTUxTdHJpY3QgID0gZ2V0U3RyaWN0RGVjb2Rlcih4bWxNYXApLFxuICAgIGRlY29kZUhUTUxTdHJpY3QgPSBnZXRTdHJpY3REZWNvZGVyKGVudGl0eU1hcCk7XG5cbmZ1bmN0aW9uIGdldFN0cmljdERlY29kZXIobWFwKXtcblx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhtYXApLmpvaW4oXCJ8XCIpLFxuXHQgICAgcmVwbGFjZSA9IGdldFJlcGxhY2VyKG1hcCk7XG5cblx0a2V5cyArPSBcInwjW3hYXVtcXFxcZGEtZkEtRl0rfCNcXFxcZCtcIjtcblxuXHR2YXIgcmUgPSBuZXcgUmVnRXhwKFwiJig/OlwiICsga2V5cyArIFwiKTtcIiwgXCJnXCIpO1xuXG5cdHJldHVybiBmdW5jdGlvbihzdHIpe1xuXHRcdHJldHVybiBTdHJpbmcoc3RyKS5yZXBsYWNlKHJlLCByZXBsYWNlKTtcblx0fTtcbn1cblxudmFyIGRlY29kZUhUTUwgPSAoZnVuY3Rpb24oKXtcblx0dmFyIGxlZ2FjeSA9IE9iamVjdC5rZXlzKGxlZ2FjeU1hcClcblx0XHQuc29ydChzb3J0ZXIpO1xuXG5cdHZhciBrZXlzID0gT2JqZWN0LmtleXMoZW50aXR5TWFwKVxuXHRcdC5zb3J0KHNvcnRlcik7XG5cblx0Zm9yKHZhciBpID0gMCwgaiA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcblx0XHRpZihsZWdhY3lbal0gPT09IGtleXNbaV0pe1xuXHRcdFx0a2V5c1tpXSArPSBcIjs/XCI7XG5cdFx0XHRqKys7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGtleXNbaV0gKz0gXCI7XCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHJlID0gbmV3IFJlZ0V4cChcIiYoPzpcIiArIGtleXMuam9pbihcInxcIikgKyBcInwjW3hYXVtcXFxcZGEtZkEtRl0rOz98I1xcXFxkKzs/KVwiLCBcImdcIiksXG5cdCAgICByZXBsYWNlID0gZ2V0UmVwbGFjZXIoZW50aXR5TWFwKTtcblxuXHRmdW5jdGlvbiByZXBsYWNlcihzdHIpe1xuXHRcdGlmKHN0ci5zdWJzdHIoLTEpICE9PSBcIjtcIikgc3RyICs9IFwiO1wiO1xuXHRcdHJldHVybiByZXBsYWNlKHN0cik7XG5cdH1cblxuXHQvL1RPRE8gY29uc2lkZXIgY3JlYXRpbmcgYSBtZXJnZWQgbWFwXG5cdHJldHVybiBmdW5jdGlvbihzdHIpe1xuXHRcdHJldHVybiBTdHJpbmcoc3RyKS5yZXBsYWNlKHJlLCByZXBsYWNlcik7XG5cdH07XG59KCkpO1xuXG5mdW5jdGlvbiBzb3J0ZXIoYSwgYil7XG5cdHJldHVybiBhIDwgYiA/IDEgOiAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVwbGFjZXIobWFwKXtcblx0cmV0dXJuIGZ1bmN0aW9uIHJlcGxhY2Uoc3RyKXtcblx0XHRpZihzdHIuY2hhckF0KDEpID09PSBcIiNcIil7XG5cdFx0XHRpZihzdHIuY2hhckF0KDIpID09PSBcIlhcIiB8fCBzdHIuY2hhckF0KDIpID09PSBcInhcIil7XG5cdFx0XHRcdHJldHVybiBkZWNvZGVDb2RlUG9pbnQocGFyc2VJbnQoc3RyLnN1YnN0cigzKSwgMTYpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBkZWNvZGVDb2RlUG9pbnQocGFyc2VJbnQoc3RyLnN1YnN0cigyKSwgMTApKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1hcFtzdHIuc2xpY2UoMSwgLTEpXTtcblx0fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdFhNTDogZGVjb2RlWE1MU3RyaWN0LFxuXHRIVE1MOiBkZWNvZGVIVE1MLFxuXHRIVE1MU3RyaWN0OiBkZWNvZGVIVE1MU3RyaWN0XG59O1xuXG4vKioqLyB9KSxcbi8qIDMyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0ge1wiQWFjdXRlXCI6XCLDgVwiLFwiYWFjdXRlXCI6XCLDoVwiLFwiQWNpcmNcIjpcIsOCXCIsXCJhY2lyY1wiOlwiw6JcIixcImFjdXRlXCI6XCLCtFwiLFwiQUVsaWdcIjpcIsOGXCIsXCJhZWxpZ1wiOlwiw6ZcIixcIkFncmF2ZVwiOlwiw4BcIixcImFncmF2ZVwiOlwiw6BcIixcImFtcFwiOlwiJlwiLFwiQU1QXCI6XCImXCIsXCJBcmluZ1wiOlwiw4VcIixcImFyaW5nXCI6XCLDpVwiLFwiQXRpbGRlXCI6XCLDg1wiLFwiYXRpbGRlXCI6XCLDo1wiLFwiQXVtbFwiOlwiw4RcIixcImF1bWxcIjpcIsOkXCIsXCJicnZiYXJcIjpcIsKmXCIsXCJDY2VkaWxcIjpcIsOHXCIsXCJjY2VkaWxcIjpcIsOnXCIsXCJjZWRpbFwiOlwiwrhcIixcImNlbnRcIjpcIsKiXCIsXCJjb3B5XCI6XCLCqVwiLFwiQ09QWVwiOlwiwqlcIixcImN1cnJlblwiOlwiwqRcIixcImRlZ1wiOlwiwrBcIixcImRpdmlkZVwiOlwiw7dcIixcIkVhY3V0ZVwiOlwiw4lcIixcImVhY3V0ZVwiOlwiw6lcIixcIkVjaXJjXCI6XCLDilwiLFwiZWNpcmNcIjpcIsOqXCIsXCJFZ3JhdmVcIjpcIsOIXCIsXCJlZ3JhdmVcIjpcIsOoXCIsXCJFVEhcIjpcIsOQXCIsXCJldGhcIjpcIsOwXCIsXCJFdW1sXCI6XCLDi1wiLFwiZXVtbFwiOlwiw6tcIixcImZyYWMxMlwiOlwiwr1cIixcImZyYWMxNFwiOlwiwrxcIixcImZyYWMzNFwiOlwiwr5cIixcImd0XCI6XCI+XCIsXCJHVFwiOlwiPlwiLFwiSWFjdXRlXCI6XCLDjVwiLFwiaWFjdXRlXCI6XCLDrVwiLFwiSWNpcmNcIjpcIsOOXCIsXCJpY2lyY1wiOlwiw65cIixcImlleGNsXCI6XCLCoVwiLFwiSWdyYXZlXCI6XCLDjFwiLFwiaWdyYXZlXCI6XCLDrFwiLFwiaXF1ZXN0XCI6XCLCv1wiLFwiSXVtbFwiOlwiw49cIixcIml1bWxcIjpcIsOvXCIsXCJsYXF1b1wiOlwiwqtcIixcImx0XCI6XCI8XCIsXCJMVFwiOlwiPFwiLFwibWFjclwiOlwiwq9cIixcIm1pY3JvXCI6XCLCtVwiLFwibWlkZG90XCI6XCLCt1wiLFwibmJzcFwiOlwiwqBcIixcIm5vdFwiOlwiwqxcIixcIk50aWxkZVwiOlwiw5FcIixcIm50aWxkZVwiOlwiw7FcIixcIk9hY3V0ZVwiOlwiw5NcIixcIm9hY3V0ZVwiOlwiw7NcIixcIk9jaXJjXCI6XCLDlFwiLFwib2NpcmNcIjpcIsO0XCIsXCJPZ3JhdmVcIjpcIsOSXCIsXCJvZ3JhdmVcIjpcIsOyXCIsXCJvcmRmXCI6XCLCqlwiLFwib3JkbVwiOlwiwrpcIixcIk9zbGFzaFwiOlwiw5hcIixcIm9zbGFzaFwiOlwiw7hcIixcIk90aWxkZVwiOlwiw5VcIixcIm90aWxkZVwiOlwiw7VcIixcIk91bWxcIjpcIsOWXCIsXCJvdW1sXCI6XCLDtlwiLFwicGFyYVwiOlwiwrZcIixcInBsdXNtblwiOlwiwrFcIixcInBvdW5kXCI6XCLCo1wiLFwicXVvdFwiOlwiXFxcIlwiLFwiUVVPVFwiOlwiXFxcIlwiLFwicmFxdW9cIjpcIsK7XCIsXCJyZWdcIjpcIsKuXCIsXCJSRUdcIjpcIsKuXCIsXCJzZWN0XCI6XCLCp1wiLFwic2h5XCI6XCLCrVwiLFwic3VwMVwiOlwiwrlcIixcInN1cDJcIjpcIsKyXCIsXCJzdXAzXCI6XCLCs1wiLFwic3psaWdcIjpcIsOfXCIsXCJUSE9STlwiOlwiw55cIixcInRob3JuXCI6XCLDvlwiLFwidGltZXNcIjpcIsOXXCIsXCJVYWN1dGVcIjpcIsOaXCIsXCJ1YWN1dGVcIjpcIsO6XCIsXCJVY2lyY1wiOlwiw5tcIixcInVjaXJjXCI6XCLDu1wiLFwiVWdyYXZlXCI6XCLDmVwiLFwidWdyYXZlXCI6XCLDuVwiLFwidW1sXCI6XCLCqFwiLFwiVXVtbFwiOlwiw5xcIixcInV1bWxcIjpcIsO8XCIsXCJZYWN1dGVcIjpcIsOdXCIsXCJ5YWN1dGVcIjpcIsO9XCIsXCJ5ZW5cIjpcIsKlXCIsXCJ5dW1sXCI6XCLDv1wifVxuXG4vKioqLyB9KSxcbi8qIDMzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBkZWNvZGVNYXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWNvZGVDb2RlUG9pbnQ7XG5cbi8vIG1vZGlmaWVkIHZlcnNpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvaGUvYmxvYi9tYXN0ZXIvc3JjL2hlLmpzI0w5NC1MMTE5XG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnQoY29kZVBvaW50KXtcblxuXHRpZigoY29kZVBvaW50ID49IDB4RDgwMCAmJiBjb2RlUG9pbnQgPD0gMHhERkZGKSB8fCBjb2RlUG9pbnQgPiAweDEwRkZGRil7XG5cdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHR9XG5cblx0aWYoY29kZVBvaW50IGluIGRlY29kZU1hcCl7XG5cdFx0Y29kZVBvaW50ID0gZGVjb2RlTWFwW2NvZGVQb2ludF07XG5cdH1cblxuXHR2YXIgb3V0cHV0ID0gXCJcIjtcblxuXHRpZihjb2RlUG9pbnQgPiAweEZGRkYpe1xuXHRcdGNvZGVQb2ludCAtPSAweDEwMDAwO1xuXHRcdG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0Y29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkY7XG5cdH1cblxuXHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlUG9pbnQpO1xuXHRyZXR1cm4gb3V0cHV0O1xufVxuXG5cbi8qKiovIH0pLFxuLyogMzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7XCIwXCI6NjU1MzMsXCIxMjhcIjo4MzY0LFwiMTMwXCI6ODIxOCxcIjEzMVwiOjQwMixcIjEzMlwiOjgyMjIsXCIxMzNcIjo4MjMwLFwiMTM0XCI6ODIyNCxcIjEzNVwiOjgyMjUsXCIxMzZcIjo3MTAsXCIxMzdcIjo4MjQwLFwiMTM4XCI6MzUyLFwiMTM5XCI6ODI0OSxcIjE0MFwiOjMzOCxcIjE0MlwiOjM4MSxcIjE0NVwiOjgyMTYsXCIxNDZcIjo4MjE3LFwiMTQ3XCI6ODIyMCxcIjE0OFwiOjgyMjEsXCIxNDlcIjo4MjI2LFwiMTUwXCI6ODIxMSxcIjE1MVwiOjgyMTIsXCIxNTJcIjo3MzIsXCIxNTNcIjo4NDgyLFwiMTU0XCI6MzUzLFwiMTU1XCI6ODI1MCxcIjE1NlwiOjMzOSxcIjE1OFwiOjM4MixcIjE1OVwiOjM3Nn1cblxuLyoqKi8gfSksXG4vKiAzNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG52YXIgZ2V0Q2hpbGRyZW4gPSBleHBvcnRzLmdldENoaWxkcmVuID0gZnVuY3Rpb24oZWxlbSl7XG5cdHJldHVybiBlbGVtLmNoaWxkcmVuO1xufTtcblxudmFyIGdldFBhcmVudCA9IGV4cG9ydHMuZ2V0UGFyZW50ID0gZnVuY3Rpb24oZWxlbSl7XG5cdHJldHVybiBlbGVtLnBhcmVudDtcbn07XG5cbmV4cG9ydHMuZ2V0U2libGluZ3MgPSBmdW5jdGlvbihlbGVtKXtcblx0dmFyIHBhcmVudCA9IGdldFBhcmVudChlbGVtKTtcblx0cmV0dXJuIHBhcmVudCA/IGdldENoaWxkcmVuKHBhcmVudCkgOiBbZWxlbV07XG59O1xuXG5leHBvcnRzLmdldEF0dHJpYnV0ZVZhbHVlID0gZnVuY3Rpb24oZWxlbSwgbmFtZSl7XG5cdHJldHVybiBlbGVtLmF0dHJpYnMgJiYgZWxlbS5hdHRyaWJzW25hbWVdO1xufTtcblxuZXhwb3J0cy5oYXNBdHRyaWIgPSBmdW5jdGlvbihlbGVtLCBuYW1lKXtcblx0cmV0dXJuICEhZWxlbS5hdHRyaWJzICYmIGhhc093blByb3BlcnR5LmNhbGwoZWxlbS5hdHRyaWJzLCBuYW1lKTtcbn07XG5cbmV4cG9ydHMuZ2V0TmFtZSA9IGZ1bmN0aW9uKGVsZW0pe1xuXHRyZXR1cm4gZWxlbS5uYW1lO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDM2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbmV4cG9ydHMucmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW0pe1xuXHRpZihlbGVtLnByZXYpIGVsZW0ucHJldi5uZXh0ID0gZWxlbS5uZXh0O1xuXHRpZihlbGVtLm5leHQpIGVsZW0ubmV4dC5wcmV2ID0gZWxlbS5wcmV2O1xuXG5cdGlmKGVsZW0ucGFyZW50KXtcblx0XHR2YXIgY2hpbGRzID0gZWxlbS5wYXJlbnQuY2hpbGRyZW47XG5cdFx0Y2hpbGRzLnNwbGljZShjaGlsZHMubGFzdEluZGV4T2YoZWxlbSksIDEpO1xuXHR9XG59O1xuXG5leHBvcnRzLnJlcGxhY2VFbGVtZW50ID0gZnVuY3Rpb24oZWxlbSwgcmVwbGFjZW1lbnQpe1xuXHR2YXIgcHJldiA9IHJlcGxhY2VtZW50LnByZXYgPSBlbGVtLnByZXY7XG5cdGlmKHByZXYpe1xuXHRcdHByZXYubmV4dCA9IHJlcGxhY2VtZW50O1xuXHR9XG5cblx0dmFyIG5leHQgPSByZXBsYWNlbWVudC5uZXh0ID0gZWxlbS5uZXh0O1xuXHRpZihuZXh0KXtcblx0XHRuZXh0LnByZXYgPSByZXBsYWNlbWVudDtcblx0fVxuXG5cdHZhciBwYXJlbnQgPSByZXBsYWNlbWVudC5wYXJlbnQgPSBlbGVtLnBhcmVudDtcblx0aWYocGFyZW50KXtcblx0XHR2YXIgY2hpbGRzID0gcGFyZW50LmNoaWxkcmVuO1xuXHRcdGNoaWxkc1tjaGlsZHMubGFzdEluZGV4T2YoZWxlbSldID0gcmVwbGFjZW1lbnQ7XG5cdH1cbn07XG5cbmV4cG9ydHMuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbihlbGVtLCBjaGlsZCl7XG5cdGNoaWxkLnBhcmVudCA9IGVsZW07XG5cblx0aWYoZWxlbS5jaGlsZHJlbi5wdXNoKGNoaWxkKSAhPT0gMSl7XG5cdFx0dmFyIHNpYmxpbmcgPSBlbGVtLmNoaWxkcmVuW2VsZW0uY2hpbGRyZW4ubGVuZ3RoIC0gMl07XG5cdFx0c2libGluZy5uZXh0ID0gY2hpbGQ7XG5cdFx0Y2hpbGQucHJldiA9IHNpYmxpbmc7XG5cdFx0Y2hpbGQubmV4dCA9IG51bGw7XG5cdH1cbn07XG5cbmV4cG9ydHMuYXBwZW5kID0gZnVuY3Rpb24oZWxlbSwgbmV4dCl7XG5cdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudCxcblx0XHRjdXJyTmV4dCA9IGVsZW0ubmV4dDtcblxuXHRuZXh0Lm5leHQgPSBjdXJyTmV4dDtcblx0bmV4dC5wcmV2ID0gZWxlbTtcblx0ZWxlbS5uZXh0ID0gbmV4dDtcblx0bmV4dC5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0aWYoY3Vyck5leHQpe1xuXHRcdGN1cnJOZXh0LnByZXYgPSBuZXh0O1xuXHRcdGlmKHBhcmVudCl7XG5cdFx0XHR2YXIgY2hpbGRzID0gcGFyZW50LmNoaWxkcmVuO1xuXHRcdFx0Y2hpbGRzLnNwbGljZShjaGlsZHMubGFzdEluZGV4T2YoY3Vyck5leHQpLCAwLCBuZXh0KTtcblx0XHR9XG5cdH0gZWxzZSBpZihwYXJlbnQpe1xuXHRcdHBhcmVudC5jaGlsZHJlbi5wdXNoKG5leHQpO1xuXHR9XG59O1xuXG5leHBvcnRzLnByZXBlbmQgPSBmdW5jdGlvbihlbGVtLCBwcmV2KXtcblx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50O1xuXHRpZihwYXJlbnQpe1xuXHRcdHZhciBjaGlsZHMgPSBwYXJlbnQuY2hpbGRyZW47XG5cdFx0Y2hpbGRzLnNwbGljZShjaGlsZHMubGFzdEluZGV4T2YoZWxlbSksIDAsIHByZXYpO1xuXHR9XG5cblx0aWYoZWxlbS5wcmV2KXtcblx0XHRlbGVtLnByZXYubmV4dCA9IHByZXY7XG5cdH1cblx0XG5cdHByZXYucGFyZW50ID0gcGFyZW50O1xuXHRwcmV2LnByZXYgPSBlbGVtLnByZXY7XG5cdHByZXYubmV4dCA9IGVsZW07XG5cdGVsZW0ucHJldiA9IHByZXY7XG59O1xuXG5cblxuXG4vKioqLyB9KSxcbi8qIDM3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpc1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oOSkuaXNUYWc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRmaWx0ZXI6IGZpbHRlcixcblx0ZmluZDogZmluZCxcblx0ZmluZE9uZUNoaWxkOiBmaW5kT25lQ2hpbGQsXG5cdGZpbmRPbmU6IGZpbmRPbmUsXG5cdGV4aXN0c09uZTogZXhpc3RzT25lLFxuXHRmaW5kQWxsOiBmaW5kQWxsXG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIodGVzdCwgZWxlbWVudCwgcmVjdXJzZSwgbGltaXQpe1xuXHRpZighQXJyYXkuaXNBcnJheShlbGVtZW50KSkgZWxlbWVudCA9IFtlbGVtZW50XTtcblxuXHRpZih0eXBlb2YgbGltaXQgIT09IFwibnVtYmVyXCIgfHwgIWlzRmluaXRlKGxpbWl0KSl7XG5cdFx0bGltaXQgPSBJbmZpbml0eTtcblx0fVxuXHRyZXR1cm4gZmluZCh0ZXN0LCBlbGVtZW50LCByZWN1cnNlICE9PSBmYWxzZSwgbGltaXQpO1xufVxuXG5mdW5jdGlvbiBmaW5kKHRlc3QsIGVsZW1zLCByZWN1cnNlLCBsaW1pdCl7XG5cdHZhciByZXN1bHQgPSBbXSwgY2hpbGRzO1xuXG5cdGZvcih2YXIgaSA9IDAsIGogPSBlbGVtcy5sZW5ndGg7IGkgPCBqOyBpKyspe1xuXHRcdGlmKHRlc3QoZWxlbXNbaV0pKXtcblx0XHRcdHJlc3VsdC5wdXNoKGVsZW1zW2ldKTtcblx0XHRcdGlmKC0tbGltaXQgPD0gMCkgYnJlYWs7XG5cdFx0fVxuXG5cdFx0Y2hpbGRzID0gZWxlbXNbaV0uY2hpbGRyZW47XG5cdFx0aWYocmVjdXJzZSAmJiBjaGlsZHMgJiYgY2hpbGRzLmxlbmd0aCA+IDApe1xuXHRcdFx0Y2hpbGRzID0gZmluZCh0ZXN0LCBjaGlsZHMsIHJlY3Vyc2UsIGxpbWl0KTtcblx0XHRcdHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoY2hpbGRzKTtcblx0XHRcdGxpbWl0IC09IGNoaWxkcy5sZW5ndGg7XG5cdFx0XHRpZihsaW1pdCA8PSAwKSBicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmaW5kT25lQ2hpbGQodGVzdCwgZWxlbXMpe1xuXHRmb3IodmFyIGkgPSAwLCBsID0gZWxlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRpZih0ZXN0KGVsZW1zW2ldKSkgcmV0dXJuIGVsZW1zW2ldO1xuXHR9XG5cblx0cmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmRPbmUodGVzdCwgZWxlbXMpe1xuXHR2YXIgZWxlbSA9IG51bGw7XG5cblx0Zm9yKHZhciBpID0gMCwgbCA9IGVsZW1zLmxlbmd0aDsgaSA8IGwgJiYgIWVsZW07IGkrKyl7XG5cdFx0aWYoIWlzVGFnKGVsZW1zW2ldKSl7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9IGVsc2UgaWYodGVzdChlbGVtc1tpXSkpe1xuXHRcdFx0ZWxlbSA9IGVsZW1zW2ldO1xuXHRcdH0gZWxzZSBpZihlbGVtc1tpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcblx0XHRcdGVsZW0gPSBmaW5kT25lKHRlc3QsIGVsZW1zW2ldLmNoaWxkcmVuKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gZXhpc3RzT25lKHRlc3QsIGVsZW1zKXtcblx0Zm9yKHZhciBpID0gMCwgbCA9IGVsZW1zLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0aWYoXG5cdFx0XHRpc1RhZyhlbGVtc1tpXSkgJiYgKFxuXHRcdFx0XHR0ZXN0KGVsZW1zW2ldKSB8fCAoXG5cdFx0XHRcdFx0ZWxlbXNbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdGV4aXN0c09uZSh0ZXN0LCBlbGVtc1tpXS5jaGlsZHJlbilcblx0XHRcdFx0KVxuXHRcdFx0KVxuXHRcdCl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZpbmRBbGwodGVzdCwgZWxlbXMpe1xuXHR2YXIgcmVzdWx0ID0gW107XG5cdGZvcih2YXIgaSA9IDAsIGogPSBlbGVtcy5sZW5ndGg7IGkgPCBqOyBpKyspe1xuXHRcdGlmKCFpc1RhZyhlbGVtc1tpXSkpIGNvbnRpbnVlO1xuXHRcdGlmKHRlc3QoZWxlbXNbaV0pKSByZXN1bHQucHVzaChlbGVtc1tpXSk7XG5cblx0XHRpZihlbGVtc1tpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcblx0XHRcdHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZmluZEFsbCh0ZXN0LCBlbGVtc1tpXS5jaGlsZHJlbikpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5cbi8qKiovIH0pLFxuLyogMzggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIEVsZW1lbnRUeXBlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbnZhciBpc1RhZyA9IGV4cG9ydHMuaXNUYWcgPSBFbGVtZW50VHlwZS5pc1RhZztcblxuZXhwb3J0cy50ZXN0RWxlbWVudCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGVsZW1lbnQpe1xuXHRmb3IodmFyIGtleSBpbiBvcHRpb25zKXtcblx0XHRpZighb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKTtcblx0XHRlbHNlIGlmKGtleSA9PT0gXCJ0YWdfbmFtZVwiKXtcblx0XHRcdGlmKCFpc1RhZyhlbGVtZW50KSB8fCAhb3B0aW9ucy50YWdfbmFtZShlbGVtZW50Lm5hbWUpKXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZihrZXkgPT09IFwidGFnX3R5cGVcIil7XG5cdFx0XHRpZighb3B0aW9ucy50YWdfdHlwZShlbGVtZW50LnR5cGUpKSByZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmKGtleSA9PT0gXCJ0YWdfY29udGFpbnNcIil7XG5cdFx0XHRpZihpc1RhZyhlbGVtZW50KSB8fCAhb3B0aW9ucy50YWdfY29udGFpbnMoZWxlbWVudC5kYXRhKSl7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYoIWVsZW1lbnQuYXR0cmlicyB8fCAhb3B0aW9uc1trZXldKGVsZW1lbnQuYXR0cmlic1trZXldKSl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxudmFyIENoZWNrcyA9IHtcblx0dGFnX25hbWU6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdGlmKHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gaXNUYWcoZWxlbSkgJiYgbmFtZShlbGVtLm5hbWUpOyB9O1xuXHRcdH0gZWxzZSBpZihuYW1lID09PSBcIipcIil7XG5cdFx0XHRyZXR1cm4gaXNUYWc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXsgcmV0dXJuIGlzVGFnKGVsZW0pICYmIGVsZW0ubmFtZSA9PT0gbmFtZTsgfTtcblx0XHR9XG5cdH0sXG5cdHRhZ190eXBlOiBmdW5jdGlvbih0eXBlKXtcblx0XHRpZih0eXBlb2YgdHlwZSA9PT0gXCJmdW5jdGlvblwiKXtcblx0XHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXsgcmV0dXJuIHR5cGUoZWxlbS50eXBlKTsgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gZWxlbS50eXBlID09PSB0eXBlOyB9O1xuXHRcdH1cblx0fSxcblx0dGFnX2NvbnRhaW5zOiBmdW5jdGlvbihkYXRhKXtcblx0XHRpZih0eXBlb2YgZGF0YSA9PT0gXCJmdW5jdGlvblwiKXtcblx0XHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXsgcmV0dXJuICFpc1RhZyhlbGVtKSAmJiBkYXRhKGVsZW0uZGF0YSk7IH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXsgcmV0dXJuICFpc1RhZyhlbGVtKSAmJiBlbGVtLmRhdGEgPT09IGRhdGE7IH07XG5cdFx0fVxuXHR9XG59O1xuXG5mdW5jdGlvbiBnZXRBdHRyaWJDaGVjayhhdHRyaWIsIHZhbHVlKXtcblx0aWYodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXsgcmV0dXJuIGVsZW0uYXR0cmlicyAmJiB2YWx1ZShlbGVtLmF0dHJpYnNbYXR0cmliXSk7IH07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gZWxlbS5hdHRyaWJzICYmIGVsZW0uYXR0cmlic1thdHRyaWJdID09PSB2YWx1ZTsgfTtcblx0fVxufVxuXG5mdW5jdGlvbiBjb21iaW5lRnVuY3MoYSwgYil7XG5cdHJldHVybiBmdW5jdGlvbihlbGVtKXtcblx0XHRyZXR1cm4gYShlbGVtKSB8fCBiKGVsZW0pO1xuXHR9O1xufVxuXG5leHBvcnRzLmdldEVsZW1lbnRzID0gZnVuY3Rpb24ob3B0aW9ucywgZWxlbWVudCwgcmVjdXJzZSwgbGltaXQpe1xuXHR2YXIgZnVuY3MgPSBPYmplY3Qua2V5cyhvcHRpb25zKS5tYXAoZnVuY3Rpb24oa2V5KXtcblx0XHR2YXIgdmFsdWUgPSBvcHRpb25zW2tleV07XG5cdFx0cmV0dXJuIGtleSBpbiBDaGVja3MgPyBDaGVja3Nba2V5XSh2YWx1ZSkgOiBnZXRBdHRyaWJDaGVjayhrZXksIHZhbHVlKTtcblx0fSk7XG5cblx0cmV0dXJuIGZ1bmNzLmxlbmd0aCA9PT0gMCA/IFtdIDogdGhpcy5maWx0ZXIoXG5cdFx0ZnVuY3MucmVkdWNlKGNvbWJpbmVGdW5jcyksXG5cdFx0ZWxlbWVudCwgcmVjdXJzZSwgbGltaXRcblx0KTtcbn07XG5cbmV4cG9ydHMuZ2V0RWxlbWVudEJ5SWQgPSBmdW5jdGlvbihpZCwgZWxlbWVudCwgcmVjdXJzZSl7XG5cdGlmKCFBcnJheS5pc0FycmF5KGVsZW1lbnQpKSBlbGVtZW50ID0gW2VsZW1lbnRdO1xuXHRyZXR1cm4gdGhpcy5maW5kT25lKGdldEF0dHJpYkNoZWNrKFwiaWRcIiwgaWQpLCBlbGVtZW50LCByZWN1cnNlICE9PSBmYWxzZSk7XG59O1xuXG5leHBvcnRzLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gZnVuY3Rpb24obmFtZSwgZWxlbWVudCwgcmVjdXJzZSwgbGltaXQpe1xuXHRyZXR1cm4gdGhpcy5maWx0ZXIoQ2hlY2tzLnRhZ19uYW1lKG5hbWUpLCBlbGVtZW50LCByZWN1cnNlLCBsaW1pdCk7XG59O1xuXG5leHBvcnRzLmdldEVsZW1lbnRzQnlUYWdUeXBlID0gZnVuY3Rpb24odHlwZSwgZWxlbWVudCwgcmVjdXJzZSwgbGltaXQpe1xuXHRyZXR1cm4gdGhpcy5maWx0ZXIoQ2hlY2tzLnRhZ190eXBlKHR5cGUpLCBlbGVtZW50LCByZWN1cnNlLCBsaW1pdCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gcmVtb3ZlU3Vic2V0c1xuLy8gR2l2ZW4gYW4gYXJyYXkgb2Ygbm9kZXMsIHJlbW92ZSBhbnkgbWVtYmVyIHRoYXQgaXMgY29udGFpbmVkIGJ5IGFub3RoZXIuXG5leHBvcnRzLnJlbW92ZVN1YnNldHMgPSBmdW5jdGlvbihub2Rlcykge1xuXHR2YXIgaWR4ID0gbm9kZXMubGVuZ3RoLCBub2RlLCBhbmNlc3RvciwgcmVwbGFjZTtcblxuXHQvLyBDaGVjayBpZiBlYWNoIG5vZGUgKG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzKSBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGVcblx0Ly8gYXJyYXkuXG5cdHdoaWxlICgtLWlkeCA+IC0xKSB7XG5cdFx0bm9kZSA9IGFuY2VzdG9yID0gbm9kZXNbaWR4XTtcblxuXHRcdC8vIFRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgbm9kZSB1bmRlciBjb25zaWRlcmF0aW9uXG5cdFx0bm9kZXNbaWR4XSA9IG51bGw7XG5cdFx0cmVwbGFjZSA9IHRydWU7XG5cblx0XHR3aGlsZSAoYW5jZXN0b3IpIHtcblx0XHRcdGlmIChub2Rlcy5pbmRleE9mKGFuY2VzdG9yKSA+IC0xKSB7XG5cdFx0XHRcdHJlcGxhY2UgPSBmYWxzZTtcblx0XHRcdFx0bm9kZXMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0YW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIG5vZGUgaGFzIGJlZW4gZm91bmQgdG8gYmUgdW5pcXVlLCByZS1pbnNlcnQgaXQuXG5cdFx0aWYgKHJlcGxhY2UpIHtcblx0XHRcdG5vZGVzW2lkeF0gPSBub2RlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBub2Rlcztcbn07XG5cbi8vIFNvdXJjZTogaHR0cDovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ub2RlLWNvbXBhcmVkb2N1bWVudHBvc2l0aW9uXG52YXIgUE9TSVRJT04gPSB7XG5cdERJU0NPTk5FQ1RFRDogMSxcblx0UFJFQ0VESU5HOiAyLFxuXHRGT0xMT1dJTkc6IDQsXG5cdENPTlRBSU5TOiA4LFxuXHRDT05UQUlORURfQlk6IDE2XG59O1xuXG4vLyBDb21wYXJlIHRoZSBwb3NpdGlvbiBvZiBvbmUgbm9kZSBhZ2FpbnN0IGFub3RoZXIgbm9kZSBpbiBhbnkgb3RoZXIgZG9jdW1lbnQuXG4vLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYml0bWFzayB3aXRoIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuLy9cbi8vIGRvY3VtZW50IG9yZGVyOlxuLy8gPiBUaGVyZSBpcyBhbiBvcmRlcmluZywgZG9jdW1lbnQgb3JkZXIsIGRlZmluZWQgb24gYWxsIHRoZSBub2RlcyBpbiB0aGVcbi8vID4gZG9jdW1lbnQgY29ycmVzcG9uZGluZyB0byB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbi8vID4gWE1MIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggbm9kZSBvY2N1cnMgaW4gdGhlIFhNTCByZXByZXNlbnRhdGlvbiBvZiB0aGVcbi8vID4gZG9jdW1lbnQgYWZ0ZXIgZXhwYW5zaW9uIG9mIGdlbmVyYWwgZW50aXRpZXMuIFRodXMsIHRoZSBkb2N1bWVudCBlbGVtZW50XG4vLyA+IG5vZGUgd2lsbCBiZSB0aGUgZmlyc3Qgbm9kZS4gRWxlbWVudCBub2RlcyBvY2N1ciBiZWZvcmUgdGhlaXIgY2hpbGRyZW4uXG4vLyA+IFRodXMsIGRvY3VtZW50IG9yZGVyIG9yZGVycyBlbGVtZW50IG5vZGVzIGluIG9yZGVyIG9mIHRoZSBvY2N1cnJlbmNlIG9mXG4vLyA+IHRoZWlyIHN0YXJ0LXRhZyBpbiB0aGUgWE1MIChhZnRlciBleHBhbnNpb24gb2YgZW50aXRpZXMpLiBUaGUgYXR0cmlidXRlXG4vLyA+IG5vZGVzIG9mIGFuIGVsZW1lbnQgb2NjdXIgYWZ0ZXIgdGhlIGVsZW1lbnQgYW5kIGJlZm9yZSBpdHMgY2hpbGRyZW4uIFRoZVxuLy8gPiByZWxhdGl2ZSBvcmRlciBvZiBhdHRyaWJ1dGUgbm9kZXMgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50Li9cbi8vIFNvdXJjZTpcbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUNvcmUvZ2xvc3NhcnkuaHRtbCNkdC1kb2N1bWVudC1vcmRlclxuLy9cbi8vIEBhcmd1bWVudCB7Tm9kZX0gbm9kYUEgVGhlIGZpcnN0IG5vZGUgdG8gdXNlIGluIHRoZSBjb21wYXJpc29uXG4vLyBAYXJndW1lbnQge05vZGV9IG5vZGVCIFRoZSBzZWNvbmQgbm9kZSB0byB1c2UgaW4gdGhlIGNvbXBhcmlzb25cbi8vXG4vLyBAcmV0dXJuIHtOdW1iZXJ9IEEgYml0bWFzayBkZXNjcmliaW5nIHRoZSBpbnB1dCBub2RlcycgcmVsYXRpdmUgcG9zaXRpb24uXG4vLyAgICAgICAgIFNlZSBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLW5vZGUtY29tcGFyZWRvY3VtZW50cG9zaXRpb24gZm9yXG4vLyAgICAgICAgIGEgZGVzY3JpcHRpb24gb2YgdGhlc2UgdmFsdWVzLlxudmFyIGNvbXBhcmVQb3MgPSBleHBvcnRzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24obm9kZUEsIG5vZGVCKSB7XG5cdHZhciBhUGFyZW50cyA9IFtdO1xuXHR2YXIgYlBhcmVudHMgPSBbXTtcblx0dmFyIGN1cnJlbnQsIHNoYXJlZFBhcmVudCwgc2libGluZ3MsIGFTaWJsaW5nLCBiU2libGluZywgaWR4O1xuXG5cdGlmIChub2RlQSA9PT0gbm9kZUIpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGN1cnJlbnQgPSBub2RlQTtcblx0d2hpbGUgKGN1cnJlbnQpIHtcblx0XHRhUGFyZW50cy51bnNoaWZ0KGN1cnJlbnQpO1xuXHRcdGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcblx0fVxuXHRjdXJyZW50ID0gbm9kZUI7XG5cdHdoaWxlIChjdXJyZW50KSB7XG5cdFx0YlBhcmVudHMudW5zaGlmdChjdXJyZW50KTtcblx0XHRjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG5cdH1cblxuXHRpZHggPSAwO1xuXHR3aGlsZSAoYVBhcmVudHNbaWR4XSA9PT0gYlBhcmVudHNbaWR4XSkge1xuXHRcdGlkeCsrO1xuXHR9XG5cblx0aWYgKGlkeCA9PT0gMCkge1xuXHRcdHJldHVybiBQT1NJVElPTi5ESVNDT05ORUNURUQ7XG5cdH1cblxuXHRzaGFyZWRQYXJlbnQgPSBhUGFyZW50c1tpZHggLSAxXTtcblx0c2libGluZ3MgPSBzaGFyZWRQYXJlbnQuY2hpbGRyZW47XG5cdGFTaWJsaW5nID0gYVBhcmVudHNbaWR4XTtcblx0YlNpYmxpbmcgPSBiUGFyZW50c1tpZHhdO1xuXG5cdGlmIChzaWJsaW5ncy5pbmRleE9mKGFTaWJsaW5nKSA+IHNpYmxpbmdzLmluZGV4T2YoYlNpYmxpbmcpKSB7XG5cdFx0aWYgKHNoYXJlZFBhcmVudCA9PT0gbm9kZUIpIHtcblx0XHRcdHJldHVybiBQT1NJVElPTi5GT0xMT1dJTkcgfCBQT1NJVElPTi5DT05UQUlORURfQlk7XG5cdFx0fVxuXHRcdHJldHVybiBQT1NJVElPTi5GT0xMT1dJTkc7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKHNoYXJlZFBhcmVudCA9PT0gbm9kZUEpIHtcblx0XHRcdHJldHVybiBQT1NJVElPTi5QUkVDRURJTkcgfCBQT1NJVElPTi5DT05UQUlOUztcblx0XHR9XG5cdFx0cmV0dXJuIFBPU0lUSU9OLlBSRUNFRElORztcblx0fVxufTtcblxuLy8gU29ydCBhbiBhcnJheSBvZiBub2RlcyBiYXNlZCBvbiB0aGVpciByZWxhdGl2ZSBwb3NpdGlvbiBpbiB0aGUgZG9jdW1lbnQgYW5kXG4vLyByZW1vdmUgYW55IGR1cGxpY2F0ZSBub2Rlcy4gSWYgdGhlIGFycmF5IGNvbnRhaW5zIG5vZGVzIHRoYXQgZG8gbm90IGJlbG9uZ1xuLy8gdG8gdGhlIHNhbWUgZG9jdW1lbnQsIHNvcnQgb3JkZXIgaXMgdW5zcGVjaWZpZWQuXG4vL1xuLy8gQGFyZ3VtZW50IHtBcnJheX0gbm9kZXMgQXJyYXkgb2YgRE9NIG5vZGVzXG4vL1xuLy8gQHJldHVybnMge0FycmF5fSBjb2xsZWN0aW9uIG9mIHVuaXF1ZSBub2Rlcywgc29ydGVkIGluIGRvY3VtZW50IG9yZGVyXG5leHBvcnRzLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbihub2Rlcykge1xuXHR2YXIgaWR4ID0gbm9kZXMubGVuZ3RoLCBub2RlLCBwb3NpdGlvbjtcblxuXHRub2RlcyA9IG5vZGVzLnNsaWNlKCk7XG5cblx0d2hpbGUgKC0taWR4ID4gLTEpIHtcblx0XHRub2RlID0gbm9kZXNbaWR4XTtcblx0XHRwb3NpdGlvbiA9IG5vZGVzLmluZGV4T2Yobm9kZSk7XG5cdFx0aWYgKHBvc2l0aW9uID4gLTEgJiYgcG9zaXRpb24gPCBpZHgpIHtcblx0XHRcdG5vZGVzLnNwbGljZShpZHgsIDEpO1xuXHRcdH1cblx0fVxuXHRub2Rlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcblx0XHR2YXIgcmVsYXRpdmUgPSBjb21wYXJlUG9zKGEsIGIpO1xuXHRcdGlmIChyZWxhdGl2ZSAmIFBPU0lUSU9OLlBSRUNFRElORykge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH0gZWxzZSBpZiAocmVsYXRpdmUgJiBQT1NJVElPTi5GT0xMT1dJTkcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSk7XG5cblx0cmV0dXJuIG5vZGVzO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qXG5cdGNvbXBpbGVzIGEgc2VsZWN0b3IgdG8gYW4gZXhlY3V0YWJsZSBmdW5jdGlvblxuKi9cblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlRmFjdG9yeTtcblxudmFyIHBhcnNlICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MSksXG5cdEJhc2VGdW5jcyAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSxcblx0c29ydFJ1bGVzICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKSxcblx0cHJvY2VkdXJlICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KSxcblx0cnVsZXNGYWN0b3J5ICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKSxcblx0cHNldWRvc0ZhY3RvcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2KSxcblx0dHJ1ZUZ1bmMgICAgICAgPSBCYXNlRnVuY3MudHJ1ZUZ1bmMsXG5cdGZhbHNlRnVuYyAgICAgID0gQmFzZUZ1bmNzLmZhbHNlRnVuYztcblxuZnVuY3Rpb24gY29tcGlsZUZhY3RvcnkoYWRhcHRlcil7XG5cdHZhciBQc2V1ZG9zICAgICA9IHBzZXVkb3NGYWN0b3J5KGFkYXB0ZXIpLFxuXHRcdGZpbHRlcnMgICAgID0gUHNldWRvcy5maWx0ZXJzLFxuXHRcdFJ1bGVzIFx0XHRcdD0gcnVsZXNGYWN0b3J5KGFkYXB0ZXIsIFBzZXVkb3MpO1xuXG5cdGZ1bmN0aW9uIGNvbXBpbGUoc2VsZWN0b3IsIG9wdGlvbnMsIGNvbnRleHQpe1xuXHRcdHZhciBuZXh0ID0gY29tcGlsZVVuc2FmZShzZWxlY3Rvciwgb3B0aW9ucywgY29udGV4dCk7XG5cdFx0cmV0dXJuIHdyYXAobmV4dCk7XG5cdH1cblxuXHRmdW5jdGlvbiB3cmFwKG5leHQpe1xuXHRcdHJldHVybiBmdW5jdGlvbiBiYXNlKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGFkYXB0ZXIuaXNUYWcoZWxlbSkgJiYgbmV4dChlbGVtKTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gY29tcGlsZVVuc2FmZShzZWxlY3Rvciwgb3B0aW9ucywgY29udGV4dCl7XG5cdFx0dmFyIHRva2VuID0gcGFyc2Uoc2VsZWN0b3IsIG9wdGlvbnMpO1xuXHRcdHJldHVybiBjb21waWxlVG9rZW4odG9rZW4sIG9wdGlvbnMsIGNvbnRleHQpO1xuXHR9XG5cblx0ZnVuY3Rpb24gaW5jbHVkZXNTY29wZVBzZXVkbyh0KXtcblx0XHRyZXR1cm4gdC50eXBlID09PSBcInBzZXVkb1wiICYmIChcblx0XHRcdHQubmFtZSA9PT0gXCJzY29wZVwiIHx8IChcblx0XHRcdFx0QXJyYXkuaXNBcnJheSh0LmRhdGEpICYmXG5cdFx0XHRcdHQuZGF0YS5zb21lKGZ1bmN0aW9uKGRhdGEpe1xuXHRcdFx0XHRcdHJldHVybiBkYXRhLnNvbWUoaW5jbHVkZXNTY29wZVBzZXVkbyk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXG5cdHZhciBERVNDRU5EQU5UX1RPS0VOID0ge3R5cGU6IFwiZGVzY2VuZGFudFwifSxcblx0XHRGTEVYSUJMRV9ERVNDRU5EQU5UX1RPS0VOID0ge3R5cGU6IFwiX2ZsZXhpYmxlRGVzY2VuZGFudFwifSxcblx0XHRTQ09QRV9UT0tFTiA9IHt0eXBlOiBcInBzZXVkb1wiLCBuYW1lOiBcInNjb3BlXCJ9LFxuXHRcdFBMQUNFSE9MREVSX0VMRU1FTlQgPSB7fTtcblxuXHQvL0NTUyA0IFNwZWMgKERyYWZ0KTogMy4zLjEuIEFic29sdXRpemluZyBhIFNjb3BlLXJlbGF0aXZlIFNlbGVjdG9yXG5cdC8vaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzNC8jYWJzb2x1dGl6aW5nXG5cdGZ1bmN0aW9uIGFic29sdXRpemUodG9rZW4sIGNvbnRleHQpe1xuXHRcdC8vVE9ETyBiZXR0ZXIgY2hlY2sgaWYgY29udGV4dCBpcyBkb2N1bWVudFxuXHRcdHZhciBoYXNDb250ZXh0ID0gISFjb250ZXh0ICYmICEhY29udGV4dC5sZW5ndGggJiYgY29udGV4dC5ldmVyeShmdW5jdGlvbihlKXtcblx0XHRcdHJldHVybiBlID09PSBQTEFDRUhPTERFUl9FTEVNRU5UIHx8ICEhYWRhcHRlci5nZXRQYXJlbnQoZSk7XG5cdFx0fSk7XG5cblxuXHRcdHRva2VuLmZvckVhY2goZnVuY3Rpb24odCl7XG5cdFx0XHRpZih0Lmxlbmd0aCA+IDAgJiYgaXNUcmF2ZXJzYWwodFswXSkgJiYgdFswXS50eXBlICE9PSBcImRlc2NlbmRhbnRcIil7XG5cdFx0XHRcdC8vZG9uJ3QgcmV0dXJuIGluIGVsc2UgYnJhbmNoXG5cdFx0XHR9IGVsc2UgaWYoaGFzQ29udGV4dCAmJiAhaW5jbHVkZXNTY29wZVBzZXVkbyh0KSl7XG5cdFx0XHRcdHQudW5zaGlmdChERVNDRU5EQU5UX1RPS0VOKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dC51bnNoaWZ0KFNDT1BFX1RPS0VOKTtcblx0XHR9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvbXBpbGVUb2tlbih0b2tlbiwgb3B0aW9ucywgY29udGV4dCl7XG5cdFx0dG9rZW4gPSB0b2tlbi5maWx0ZXIoZnVuY3Rpb24odCl7IHJldHVybiB0Lmxlbmd0aCA+IDA7IH0pO1xuXG5cdFx0dG9rZW4uZm9yRWFjaChzb3J0UnVsZXMpO1xuXG5cdFx0dmFyIGlzQXJyYXlDb250ZXh0ID0gQXJyYXkuaXNBcnJheShjb250ZXh0KTtcblxuXHRcdGNvbnRleHQgPSAob3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQpIHx8IGNvbnRleHQ7XG5cblx0XHRpZihjb250ZXh0ICYmICFpc0FycmF5Q29udGV4dCkgY29udGV4dCA9IFtjb250ZXh0XTtcblxuXHRcdGFic29sdXRpemUodG9rZW4sIGNvbnRleHQpO1xuXG5cdFx0dmFyIHNob3VsZFRlc3ROZXh0U2libGluZ3MgPSBmYWxzZTtcblxuXHRcdHZhciBxdWVyeSA9IHRva2VuXG5cdFx0XHQubWFwKGZ1bmN0aW9uKHJ1bGVzKXtcblx0XHRcdFx0aWYocnVsZXNbMF0gJiYgcnVsZXNbMV0gJiYgcnVsZXNbMF0ubmFtZSA9PT0gXCJzY29wZVwiKXtcblx0XHRcdFx0XHR2YXIgcnVsZVR5cGUgPSBydWxlc1sxXS50eXBlO1xuXHRcdFx0XHRcdGlmKGlzQXJyYXlDb250ZXh0ICYmIHJ1bGVUeXBlID09PSBcImRlc2NlbmRhbnRcIikgcnVsZXNbMV0gPSBGTEVYSUJMRV9ERVNDRU5EQU5UX1RPS0VOO1xuXHRcdFx0XHRcdGVsc2UgaWYocnVsZVR5cGUgPT09IFwiYWRqYWNlbnRcIiB8fCBydWxlVHlwZSA9PT0gXCJzaWJsaW5nXCIpIHNob3VsZFRlc3ROZXh0U2libGluZ3MgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb21waWxlUnVsZXMocnVsZXMsIG9wdGlvbnMsIGNvbnRleHQpO1xuXHRcdFx0fSlcblx0XHRcdC5yZWR1Y2UocmVkdWNlUnVsZXMsIGZhbHNlRnVuYyk7XG5cblx0XHRxdWVyeS5zaG91bGRUZXN0TmV4dFNpYmxpbmdzID0gc2hvdWxkVGVzdE5leHRTaWJsaW5ncztcblxuXHRcdHJldHVybiBxdWVyeTtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzVHJhdmVyc2FsKHQpe1xuXHRcdHJldHVybiBwcm9jZWR1cmVbdC50eXBlXSA8IDA7XG5cdH1cblxuXHRmdW5jdGlvbiBjb21waWxlUnVsZXMocnVsZXMsIG9wdGlvbnMsIGNvbnRleHQpe1xuXHRcdHJldHVybiBydWxlcy5yZWR1Y2UoZnVuY3Rpb24oZnVuYywgcnVsZSl7XG5cdFx0XHRpZihmdW5jID09PSBmYWxzZUZ1bmMpIHJldHVybiBmdW5jO1xuXHRcdFx0cmV0dXJuIFJ1bGVzW3J1bGUudHlwZV0oZnVuYywgcnVsZSwgb3B0aW9ucywgY29udGV4dCk7XG5cdFx0fSwgb3B0aW9ucyAmJiBvcHRpb25zLnJvb3RGdW5jIHx8IHRydWVGdW5jKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlZHVjZVJ1bGVzKGEsIGIpe1xuXHRcdGlmKGIgPT09IGZhbHNlRnVuYyB8fCBhID09PSB0cnVlRnVuYyl7XG5cdFx0XHRyZXR1cm4gYTtcblx0XHR9XG5cdFx0aWYoYSA9PT0gZmFsc2VGdW5jIHx8IGIgPT09IHRydWVGdW5jKXtcblx0XHRcdHJldHVybiBiO1xuXHRcdH1cblxuXHRcdHJldHVybiBmdW5jdGlvbiBjb21iaW5lKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGEoZWxlbSkgfHwgYihlbGVtKTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gY29udGFpbnNUcmF2ZXJzYWwodCl7XG5cdFx0cmV0dXJuIHQuc29tZShpc1RyYXZlcnNhbCk7XG5cdH1cblxuXHQvLzpub3QsIDpoYXMgYW5kIDptYXRjaGVzIGhhdmUgdG8gY29tcGlsZSBzZWxlY3RvcnNcblx0Ly9kb2luZyB0aGlzIGluIGxpYi9wc2V1ZG9zLmpzIHdvdWxkIGxlYWQgdG8gY2lyY3VsYXIgZGVwZW5kZW5jaWVzLFxuXHQvL3NvIHdlIGFkZCB0aGVtIGhlcmVcblx0ZmlsdGVycy5ub3QgPSBmdW5jdGlvbihuZXh0LCB0b2tlbiwgb3B0aW9ucywgY29udGV4dCl7XG5cdFx0dmFyIG9wdHMgPSB7XG5cdFx0XHR4bWxNb2RlOiAhIShvcHRpb25zICYmIG9wdGlvbnMueG1sTW9kZSksXG5cdFx0XHRzdHJpY3Q6ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5zdHJpY3QpXG5cdFx0fTtcblxuXHRcdGlmKG9wdHMuc3RyaWN0KXtcblx0XHRcdGlmKHRva2VuLmxlbmd0aCA+IDEgfHwgdG9rZW4uc29tZShjb250YWluc1RyYXZlcnNhbCkpe1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjb21wbGV4IHNlbGVjdG9ycyBpbiA6bm90IGFyZW4ndCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBmdW5jID0gY29tcGlsZVRva2VuKHRva2VuLCBvcHRzLCBjb250ZXh0KTtcblxuXHRcdGlmKGZ1bmMgPT09IGZhbHNlRnVuYykgcmV0dXJuIG5leHQ7XG5cdFx0aWYoZnVuYyA9PT0gdHJ1ZUZ1bmMpICByZXR1cm4gZmFsc2VGdW5jO1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuICFmdW5jKGVsZW0pICYmIG5leHQoZWxlbSk7XG5cdFx0fTtcblx0fTtcblxuXHRmaWx0ZXJzLmhhcyA9IGZ1bmN0aW9uKG5leHQsIHRva2VuLCBvcHRpb25zKXtcblx0XHR2YXIgb3B0cyA9IHtcblx0XHRcdHhtbE1vZGU6ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy54bWxNb2RlKSxcblx0XHRcdHN0cmljdDogISEob3B0aW9ucyAmJiBvcHRpb25zLnN0cmljdClcblx0XHR9O1xuXG5cdFx0Ly9GSVhNRTogVXNlcyBhbiBhcnJheSBhcyBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZWxlbWVudCAoc2lkZSBlZmZlY3RzKVxuXHRcdHZhciBjb250ZXh0ID0gdG9rZW4uc29tZShjb250YWluc1RyYXZlcnNhbCkgPyBbUExBQ0VIT0xERVJfRUxFTUVOVF0gOiBudWxsO1xuXG5cdFx0dmFyIGZ1bmMgPSBjb21waWxlVG9rZW4odG9rZW4sIG9wdHMsIGNvbnRleHQpO1xuXG5cdFx0aWYoZnVuYyA9PT0gZmFsc2VGdW5jKSByZXR1cm4gZmFsc2VGdW5jO1xuXHRcdGlmKGZ1bmMgPT09IHRydWVGdW5jKXtcblx0XHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuZ2V0Q2hpbGRyZW4oZWxlbSkuc29tZShhZGFwdGVyLmlzVGFnKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRmdW5jID0gd3JhcChmdW5jKTtcblxuXHRcdGlmKGNvbnRleHQpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGhhcyhlbGVtKXtcblx0XHRcdFx0cmV0dXJuIG5leHQoZWxlbSkgJiYgKFxuXHRcdFx0XHRcdChjb250ZXh0WzBdID0gZWxlbSksIGFkYXB0ZXIuZXhpc3RzT25lKGZ1bmMsIGFkYXB0ZXIuZ2V0Q2hpbGRyZW4oZWxlbSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiBmdW5jdGlvbiBoYXMoZWxlbSl7XG5cdFx0XHRyZXR1cm4gbmV4dChlbGVtKSAmJiBhZGFwdGVyLmV4aXN0c09uZShmdW5jLCBhZGFwdGVyLmdldENoaWxkcmVuKGVsZW0pKTtcblx0XHR9O1xuXHR9O1xuXG5cdGZpbHRlcnMubWF0Y2hlcyA9IGZ1bmN0aW9uKG5leHQsIHRva2VuLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHR2YXIgb3B0cyA9IHtcblx0XHRcdHhtbE1vZGU6ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy54bWxNb2RlKSxcblx0XHRcdHN0cmljdDogISEob3B0aW9ucyAmJiBvcHRpb25zLnN0cmljdCksXG5cdFx0XHRyb290RnVuYzogbmV4dFxuXHRcdH07XG5cblx0XHRyZXR1cm4gY29tcGlsZVRva2VuKHRva2VuLCBvcHRzLCBjb250ZXh0KTtcblx0fTtcblxuXHRjb21waWxlLmNvbXBpbGVUb2tlbiA9IGNvbXBpbGVUb2tlbjtcblx0Y29tcGlsZS5jb21waWxlVW5zYWZlID0gY29tcGlsZVVuc2FmZTtcblx0Y29tcGlsZS5Qc2V1ZG9zID0gUHNldWRvcztcblxuXHRyZXR1cm4gY29tcGlsZTtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDQxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2U7XG5cbnZhciByZV9uYW1lID0gL14oPzpcXFxcLnxbXFx3XFwtXFx1MDBjMC1cXHVGRkZGXSkrLyxcbiAgICByZV9lc2NhcGUgPSAvXFxcXChbXFxkYS1mXXsxLDZ9XFxzP3woXFxzKXwuKS9pZyxcbiAgICAvL21vZGlmaWVkIHZlcnNpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvYmxvYi9tYXN0ZXIvc3JjL3NpenpsZS5qcyNMODdcbiAgICByZV9hdHRyID0gL15cXHMqKCg/OlxcXFwufFtcXHdcXHUwMGMwLVxcdUZGRkZcXC1dKSspXFxzKig/OihcXFM/KT1cXHMqKD86KFsnXCJdKSguKj8pXFwzfCgjPyg/OlxcXFwufFtcXHdcXHUwMGMwLVxcdUZGRkZcXC1dKSopfCl8KVxccyooaSk/XFxdLztcblxudmFyIGFjdGlvblR5cGVzID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdFwidW5kZWZpbmVkXCI6IFwiZXhpc3RzXCIsXG5cdFwiXCI6ICBcImVxdWFsc1wiLFxuXHRcIn5cIjogXCJlbGVtZW50XCIsXG5cdFwiXlwiOiBcInN0YXJ0XCIsXG5cdFwiJFwiOiBcImVuZFwiLFxuXHRcIipcIjogXCJhbnlcIixcblx0XCIhXCI6IFwibm90XCIsXG5cdFwifFwiOiBcImh5cGhlblwiXG59O1xuXG52YXIgc2ltcGxlU2VsZWN0b3JzID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdFwiPlwiOiBcImNoaWxkXCIsXG5cdFwiPFwiOiBcInBhcmVudFwiLFxuXHRcIn5cIjogXCJzaWJsaW5nXCIsXG5cdFwiK1wiOiBcImFkamFjZW50XCJcbn07XG5cbnZhciBhdHRyaWJTZWxlY3RvcnMgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0XCIjXCI6IFtcImlkXCIsIFwiZXF1YWxzXCJdLFxuXHRcIi5cIjogW1wiY2xhc3NcIiwgXCJlbGVtZW50XCJdXG59O1xuXG4vL3BzZXVkb3MsIHdob3NlIGRhdGEtcHJvcGVydHkgaXMgcGFyc2VkIGFzIHdlbGxcbnZhciB1bnBhY2tQc2V1ZG9zID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdFwiaGFzXCI6IHRydWUsXG5cdFwibm90XCI6IHRydWUsXG5cdFwibWF0Y2hlc1wiOiB0cnVlXG59O1xuXG52YXIgc3RyaXBRdW90ZXNGcm9tUHNldWRvcyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRcImNvbnRhaW5zXCI6IHRydWUsXG5cdFwiaWNvbnRhaW5zXCI6IHRydWVcbn07XG5cbnZhciBxdW90ZXMgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0XCJcXFwiXCI6IHRydWUsXG5cdFwiJ1wiOiB0cnVlXG59O1xuXG4vL3VuZXNjYXBlIGZ1bmN0aW9uIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvYmxvYi9tYXN0ZXIvc3JjL3NpenpsZS5qcyNMMTM5XG5mdW5jdGlvbiBmdW5lc2NhcGUoIF8sIGVzY2FwZWQsIGVzY2FwZWRXaGl0ZXNwYWNlICkge1xuXHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZWQgLSAweDEwMDAwO1xuXHQvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxuXHQvLyBTdXBwb3J0OiBGaXJlZm94XG5cdC8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24gb2YgK1wiMHhcIlxuXHRyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/XG5cdFx0ZXNjYXBlZCA6XG5cdFx0Ly8gQk1QIGNvZGVwb2ludFxuXHRcdGhpZ2ggPCAwID9cblx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0Ly8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXG5cdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcbn1cblxuZnVuY3Rpb24gdW5lc2NhcGVDU1Moc3RyKXtcblx0cmV0dXJuIHN0ci5yZXBsYWNlKHJlX2VzY2FwZSwgZnVuZXNjYXBlKTtcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMpe1xuXHRyZXR1cm4gYyA9PT0gXCIgXCIgfHwgYyA9PT0gXCJcXG5cIiB8fCBjID09PSBcIlxcdFwiIHx8IGMgPT09IFwiXFxmXCIgfHwgYyA9PT0gXCJcXHJcIjtcbn1cblxuZnVuY3Rpb24gcGFyc2Uoc2VsZWN0b3IsIG9wdGlvbnMpe1xuXHR2YXIgc3Vic2VsZWN0cyA9IFtdO1xuXG5cdHNlbGVjdG9yID0gcGFyc2VTZWxlY3RvcihzdWJzZWxlY3RzLCBzZWxlY3RvciArIFwiXCIsIG9wdGlvbnMpO1xuXG5cdGlmKHNlbGVjdG9yICE9PSBcIlwiKXtcblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbm1hdGNoZWQgc2VsZWN0b3I6IFwiICsgc2VsZWN0b3IpO1xuXHR9XG5cblx0cmV0dXJuIHN1YnNlbGVjdHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2VsZWN0b3Ioc3Vic2VsZWN0cywgc2VsZWN0b3IsIG9wdGlvbnMpe1xuXHR2YXIgdG9rZW5zID0gW10sXG5cdFx0c2F3V1MgPSBmYWxzZSxcblx0XHRkYXRhLCBmaXJzdENoYXIsIG5hbWUsIHF1b3Q7XG5cblx0ZnVuY3Rpb24gZ2V0TmFtZSgpe1xuXHRcdHZhciBzdWIgPSBzZWxlY3Rvci5tYXRjaChyZV9uYW1lKVswXTtcblx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cihzdWIubGVuZ3RoKTtcblx0XHRyZXR1cm4gdW5lc2NhcGVDU1Moc3ViKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHN0cmlwV2hpdGVzcGFjZShzdGFydCl7XG5cdFx0d2hpbGUoaXNXaGl0ZXNwYWNlKHNlbGVjdG9yLmNoYXJBdChzdGFydCkpKSBzdGFydCsrO1xuXHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKHN0YXJ0KTtcblx0fVxuXG5cdHN0cmlwV2hpdGVzcGFjZSgwKTtcblxuXHR3aGlsZShzZWxlY3RvciAhPT0gXCJcIil7XG5cdFx0Zmlyc3RDaGFyID0gc2VsZWN0b3IuY2hhckF0KDApO1xuXG5cdFx0aWYoaXNXaGl0ZXNwYWNlKGZpcnN0Q2hhcikpe1xuXHRcdFx0c2F3V1MgPSB0cnVlO1xuXHRcdFx0c3RyaXBXaGl0ZXNwYWNlKDEpO1xuXHRcdH0gZWxzZSBpZihmaXJzdENoYXIgaW4gc2ltcGxlU2VsZWN0b3JzKXtcblx0XHRcdHRva2Vucy5wdXNoKHt0eXBlOiBzaW1wbGVTZWxlY3RvcnNbZmlyc3RDaGFyXX0pO1xuXHRcdFx0c2F3V1MgPSBmYWxzZTtcblxuXHRcdFx0c3RyaXBXaGl0ZXNwYWNlKDEpO1xuXHRcdH0gZWxzZSBpZihmaXJzdENoYXIgPT09IFwiLFwiKXtcblx0XHRcdGlmKHRva2Vucy5sZW5ndGggPT09IDApe1xuXHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJlbXB0eSBzdWItc2VsZWN0b3JcIik7XG5cdFx0XHR9XG5cdFx0XHRzdWJzZWxlY3RzLnB1c2godG9rZW5zKTtcblx0XHRcdHRva2VucyA9IFtdO1xuXHRcdFx0c2F3V1MgPSBmYWxzZTtcblx0XHRcdHN0cmlwV2hpdGVzcGFjZSgxKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYoc2F3V1Mpe1xuXHRcdFx0XHRpZih0b2tlbnMubGVuZ3RoID4gMCl7XG5cdFx0XHRcdFx0dG9rZW5zLnB1c2goe3R5cGU6IFwiZGVzY2VuZGFudFwifSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2F3V1MgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYoZmlyc3RDaGFyID09PSBcIipcIil7XG5cdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKDEpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7dHlwZTogXCJ1bml2ZXJzYWxcIn0pO1xuXHRcdFx0fSBlbHNlIGlmKGZpcnN0Q2hhciBpbiBhdHRyaWJTZWxlY3RvcnMpe1xuXHRcdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cigxKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IFwiYXR0cmlidXRlXCIsXG5cdFx0XHRcdFx0bmFtZTogYXR0cmliU2VsZWN0b3JzW2ZpcnN0Q2hhcl1bMF0sXG5cdFx0XHRcdFx0YWN0aW9uOiBhdHRyaWJTZWxlY3RvcnNbZmlyc3RDaGFyXVsxXSxcblx0XHRcdFx0XHR2YWx1ZTogZ2V0TmFtZSgpLFxuXHRcdFx0XHRcdGlnbm9yZUNhc2U6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmKGZpcnN0Q2hhciA9PT0gXCJbXCIpe1xuXHRcdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cigxKTtcblx0XHRcdFx0ZGF0YSA9IHNlbGVjdG9yLm1hdGNoKHJlX2F0dHIpO1xuXHRcdFx0XHRpZighZGF0YSl7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwiTWFsZm9ybWVkIGF0dHJpYnV0ZSBzZWxlY3RvcjogXCIgKyBzZWxlY3Rvcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoZGF0YVswXS5sZW5ndGgpO1xuXHRcdFx0XHRuYW1lID0gdW5lc2NhcGVDU1MoZGF0YVsxXSk7XG5cblx0XHRcdFx0aWYoXG5cdFx0XHRcdFx0IW9wdGlvbnMgfHwgKFxuXHRcdFx0XHRcdFx0XCJsb3dlckNhc2VBdHRyaWJ1dGVOYW1lc1wiIGluIG9wdGlvbnMgP1xuXHRcdFx0XHRcdFx0XHRvcHRpb25zLmxvd2VyQ2FzZUF0dHJpYnV0ZU5hbWVzIDpcblx0XHRcdFx0XHRcdFx0IW9wdGlvbnMueG1sTW9kZVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KXtcblx0XHRcdFx0XHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IFwiYXR0cmlidXRlXCIsXG5cdFx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0XHRhY3Rpb246IGFjdGlvblR5cGVzW2RhdGFbMl1dLFxuXHRcdFx0XHRcdHZhbHVlOiB1bmVzY2FwZUNTUyhkYXRhWzRdIHx8IGRhdGFbNV0gfHwgXCJcIiksXG5cdFx0XHRcdFx0aWdub3JlQ2FzZTogISFkYXRhWzZdXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHR9IGVsc2UgaWYoZmlyc3RDaGFyID09PSBcIjpcIil7XG5cdFx0XHRcdGlmKHNlbGVjdG9yLmNoYXJBdCgxKSA9PT0gXCI6XCIpe1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKDIpO1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHt0eXBlOiBcInBzZXVkby1lbGVtZW50XCIsIG5hbWU6IGdldE5hbWUoKS50b0xvd2VyQ2FzZSgpfSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cigxKTtcblxuXHRcdFx0XHRuYW1lID0gZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdGRhdGEgPSBudWxsO1xuXG5cdFx0XHRcdGlmKHNlbGVjdG9yLmNoYXJBdCgwKSA9PT0gXCIoXCIpe1xuXHRcdFx0XHRcdGlmKG5hbWUgaW4gdW5wYWNrUHNldWRvcyl7XG5cdFx0XHRcdFx0XHRxdW90ID0gc2VsZWN0b3IuY2hhckF0KDEpO1xuXHRcdFx0XHRcdFx0dmFyIHF1b3RlZCA9IHF1b3QgaW4gcXVvdGVzO1xuXG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cihxdW90ZWQgKyAxKTtcblxuXHRcdFx0XHRcdFx0ZGF0YSA9IFtdO1xuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPSBwYXJzZVNlbGVjdG9yKGRhdGEsIHNlbGVjdG9yLCBvcHRpb25zKTtcblxuXHRcdFx0XHRcdFx0aWYocXVvdGVkKXtcblx0XHRcdFx0XHRcdFx0aWYoc2VsZWN0b3IuY2hhckF0KDApICE9PSBxdW90KXtcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJ1bm1hdGNoZWQgcXVvdGVzIGluIDpcIiArIG5hbWUpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHNlbGVjdG9yLmNoYXJBdCgwKSAhPT0gXCIpXCIpe1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJtaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMgaW4gOlwiICsgbmFtZSArIFwiIFwiICsgc2VsZWN0b3IpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cigxKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFyIHBvcyA9IDEsIGNvdW50ZXIgPSAxO1xuXG5cdFx0XHRcdFx0XHRmb3IoOyBjb3VudGVyID4gMCAmJiBwb3MgPCBzZWxlY3Rvci5sZW5ndGg7IHBvcysrKXtcblx0XHRcdFx0XHRcdFx0aWYoc2VsZWN0b3IuY2hhckF0KHBvcykgPT09IFwiKFwiKSBjb3VudGVyKys7XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYoc2VsZWN0b3IuY2hhckF0KHBvcykgPT09IFwiKVwiKSBjb3VudGVyLS07XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGNvdW50ZXIpe1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJwYXJlbnRoZXNpcyBub3QgbWF0Y2hlZFwiKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0ZGF0YSA9IHNlbGVjdG9yLnN1YnN0cigxLCBwb3MgLSAyKTtcblx0XHRcdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKHBvcyk7XG5cblx0XHRcdFx0XHRcdGlmKG5hbWUgaW4gc3RyaXBRdW90ZXNGcm9tUHNldWRvcyl7XG5cdFx0XHRcdFx0XHRcdHF1b3QgPSBkYXRhLmNoYXJBdCgwKTtcblxuXHRcdFx0XHRcdFx0XHRpZihxdW90ID09PSBkYXRhLnNsaWNlKC0xKSAmJiBxdW90IGluIHF1b3Rlcyl7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YSA9IGRhdGEuc2xpY2UoMSwgLTEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0ZGF0YSA9IHVuZXNjYXBlQ1NTKGRhdGEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRva2Vucy5wdXNoKHt0eXBlOiBcInBzZXVkb1wiLCBuYW1lOiBuYW1lLCBkYXRhOiBkYXRhfSk7XG5cdFx0XHR9IGVsc2UgaWYocmVfbmFtZS50ZXN0KHNlbGVjdG9yKSl7XG5cdFx0XHRcdG5hbWUgPSBnZXROYW1lKCk7XG5cblx0XHRcdFx0aWYoIW9wdGlvbnMgfHwgKFwibG93ZXJDYXNlVGFnc1wiIGluIG9wdGlvbnMgPyBvcHRpb25zLmxvd2VyQ2FzZVRhZ3MgOiAhb3B0aW9ucy54bWxNb2RlKSl7XG5cdFx0XHRcdFx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRva2Vucy5wdXNoKHt0eXBlOiBcInRhZ1wiLCBuYW1lOiBuYW1lfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZih0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9PT0gXCJkZXNjZW5kYW50XCIpe1xuXHRcdFx0XHRcdHRva2Vucy5wb3AoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhZGRUb2tlbihzdWJzZWxlY3RzLCB0b2tlbnMpO1xuXHRcdFx0XHRyZXR1cm4gc2VsZWN0b3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YWRkVG9rZW4oc3Vic2VsZWN0cywgdG9rZW5zKTtcblxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZFRva2VuKHN1YnNlbGVjdHMsIHRva2Vucyl7XG5cdGlmKHN1YnNlbGVjdHMubGVuZ3RoID4gMCAmJiB0b2tlbnMubGVuZ3RoID09PSAwKXtcblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJlbXB0eSBzdWItc2VsZWN0b3JcIik7XG5cdH1cblxuXHRzdWJzZWxlY3RzLnB1c2godG9rZW5zKTtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDQyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gc29ydEJ5UHJvY2VkdXJlO1xuXG4vKlxuXHRzb3J0IHRoZSBwYXJ0cyBvZiB0aGUgcGFzc2VkIHNlbGVjdG9yLFxuXHRhcyB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIG9wdGltaXphdGlvblxuXHQoc29tZSB0eXBlcyBvZiBzZWxlY3RvcnMgYXJlIGZhc3RlciB0aGFuIG90aGVycylcbiovXG5cbnZhciBwcm9jZWR1cmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblxudmFyIGF0dHJpYnV0ZXMgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0ZXhpc3RzOiAxMCxcblx0ZXF1YWxzOiA4LFxuXHRub3Q6IDcsXG5cdHN0YXJ0OiA2LFxuXHRlbmQ6IDYsXG5cdGFueTogNSxcblx0aHlwaGVuOiA0LFxuXHRlbGVtZW50OiA0XG59O1xuXG5mdW5jdGlvbiBzb3J0QnlQcm9jZWR1cmUoYXJyKXtcblx0dmFyIHByb2NzID0gYXJyLm1hcChnZXRQcm9jZWR1cmUpO1xuXHRmb3IodmFyIGkgPSAxOyBpIDwgYXJyLmxlbmd0aDsgaSsrKXtcblx0XHR2YXIgcHJvY05ldyA9IHByb2NzW2ldO1xuXG5cdFx0aWYocHJvY05ldyA8IDApIGNvbnRpbnVlO1xuXG5cdFx0Zm9yKHZhciBqID0gaSAtIDE7IGogPj0gMCAmJiBwcm9jTmV3IDwgcHJvY3Nbal07IGotLSl7XG5cdFx0XHR2YXIgdG9rZW4gPSBhcnJbaiArIDFdO1xuXHRcdFx0YXJyW2ogKyAxXSA9IGFycltqXTtcblx0XHRcdGFycltqXSA9IHRva2VuO1xuXHRcdFx0cHJvY3NbaiArIDFdID0gcHJvY3Nbal07XG5cdFx0XHRwcm9jc1tqXSA9IHByb2NOZXc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFByb2NlZHVyZSh0b2tlbil7XG5cdHZhciBwcm9jID0gcHJvY2VkdXJlW3Rva2VuLnR5cGVdO1xuXG5cdGlmKHByb2MgPT09IHByb2NlZHVyZS5hdHRyaWJ1dGUpe1xuXHRcdHByb2MgPSBhdHRyaWJ1dGVzW3Rva2VuLmFjdGlvbl07XG5cblx0XHRpZihwcm9jID09PSBhdHRyaWJ1dGVzLmVxdWFscyAmJiB0b2tlbi5uYW1lID09PSBcImlkXCIpe1xuXHRcdFx0Ly9wcmVmZXIgSUQgc2VsZWN0b3JzIChlZy4gI0lEKVxuXHRcdFx0cHJvYyA9IDk7XG5cdFx0fVxuXG5cdFx0aWYodG9rZW4uaWdub3JlQ2FzZSl7XG5cdFx0XHQvL2lnbm9yZUNhc2UgYWRkcyBzb21lIG92ZXJoZWFkLCBwcmVmZXIgXCJub3JtYWxcIiB0b2tlblxuXHRcdFx0Ly90aGlzIGlzIGEgYmluYXJ5IG9wZXJhdGlvbiwgdG8gZW5zdXJlIGl0J3Mgc3RpbGwgYW4gaW50XG5cdFx0XHRwcm9jID4+PSAxO1xuXHRcdH1cblx0fSBlbHNlIGlmKHByb2MgPT09IHByb2NlZHVyZS5wc2V1ZG8pe1xuXHRcdGlmKCF0b2tlbi5kYXRhKXtcblx0XHRcdHByb2MgPSAzO1xuXHRcdH0gZWxzZSBpZih0b2tlbi5uYW1lID09PSBcImhhc1wiIHx8IHRva2VuLm5hbWUgPT09IFwiY29udGFpbnNcIil7XG5cdFx0XHRwcm9jID0gMDsgLy9leHBlbnNpdmUgaW4gYW55IGNhc2Vcblx0XHR9IGVsc2UgaWYodG9rZW4ubmFtZSA9PT0gXCJtYXRjaGVzXCIgfHwgdG9rZW4ubmFtZSA9PT0gXCJub3RcIil7XG5cdFx0XHRwcm9jID0gMDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0b2tlbi5kYXRhLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0Ly9UT0RPIGJldHRlciBoYW5kbGluZyBvZiBjb21wbGV4IHNlbGVjdG9yc1xuXHRcdFx0XHRpZih0b2tlbi5kYXRhW2ldLmxlbmd0aCAhPT0gMSkgY29udGludWU7XG5cdFx0XHRcdHZhciBjdXIgPSBnZXRQcm9jZWR1cmUodG9rZW4uZGF0YVtpXVswXSk7XG5cdFx0XHRcdC8vYXZvaWQgZXhlY3V0aW5nIDpoYXMgb3IgOmNvbnRhaW5zXG5cdFx0XHRcdGlmKGN1ciA9PT0gMCl7XG5cdFx0XHRcdFx0cHJvYyA9IDA7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoY3VyID4gcHJvYykgcHJvYyA9IGN1cjtcblx0XHRcdH1cblx0XHRcdGlmKHRva2VuLmRhdGEubGVuZ3RoID4gMSAmJiBwcm9jID4gMCkgcHJvYyAtPSAxO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9jID0gMTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHByb2M7XG59XG5cblxuLyoqKi8gfSksXG4vKiA0MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgU2V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG52YXIgYXR0cmlidXRlRmFjdG9yeSA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xuXG5mdW5jdGlvbiBnZW5lcmFsRmFjdG9yeShhZGFwdGVyLCBQc2V1ZG9zKXtcblx0Lypcblx0XHRhbGwgYXZhaWxhYmxlIHJ1bGVzXG5cdCovXG5cdHJldHVybiB7XG5cdFx0X19wcm90b19fOiBudWxsLFxuXG5cdFx0YXR0cmlidXRlOiBhdHRyaWJ1dGVGYWN0b3J5KGFkYXB0ZXIpLmNvbXBpbGUsXG5cdFx0cHNldWRvOiBQc2V1ZG9zLmNvbXBpbGUsXG5cblx0XHQvL3RhZ3Ncblx0XHR0YWc6IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgPSBkYXRhLm5hbWU7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gdGFnKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gYWRhcHRlci5nZXROYW1lKGVsZW0pID09PSBuYW1lICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHQvL3RyYXZlcnNhbFxuXHRcdGRlc2NlbmRhbnQ6IGZ1bmN0aW9uKG5leHQpe1xuXHRcdFx0dmFyIGlzRmFsc2VDYWNoZSA9IG5ldyBTZXQoKTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGRlc2NlbmRhbnQoZWxlbSl7XG5cdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXG5cdFx0XHRcdHdoaWxlKCFmb3VuZCAmJiAoZWxlbSA9IGFkYXB0ZXIuZ2V0UGFyZW50KGVsZW0pKSl7XG5cdFx0XHRcdFx0aWYoIWlzRmFsc2VDYWNoZS5oYXMoZWxlbSkpe1xuXHRcdFx0XHRcdFx0Zm91bmQgPSBuZXh0KGVsZW0pO1xuXHRcdFx0XHRcdFx0aWYoIWZvdW5kKXtcblx0XHRcdFx0XHRcdFx0aXNGYWxzZUNhY2hlLmFkZChlbGVtKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZm91bmQ7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0X2ZsZXhpYmxlRGVzY2VuZGFudDogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHQvLyBJbmNsdWRlIGVsZW1lbnQgaXRzZWxmLCBvbmx5IHVzZWQgd2hpbGUgcXVlcnlpbmcgYW4gYXJyYXlcblx0XHRcdHJldHVybiBmdW5jdGlvbiBkZXNjZW5kYW50KGVsZW0pe1xuXG5cdFx0XHRcdHZhciBmb3VuZCA9IG5leHQoZWxlbSk7XG5cblx0XHRcdFx0d2hpbGUoIWZvdW5kICYmIChlbGVtID0gYWRhcHRlci5nZXRQYXJlbnQoZWxlbSkpKXtcblx0XHRcdFx0XHRmb3VuZCA9IG5leHQoZWxlbSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZm91bmQ7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0cGFyZW50OiBmdW5jdGlvbihuZXh0LCBkYXRhLCBvcHRpb25zKXtcblx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5zdHJpY3QpIHRocm93IG5ldyBFcnJvcihcIlBhcmVudCBzZWxlY3RvciBpc24ndCBwYXJ0IG9mIENTUzNcIik7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBwYXJlbnQoZWxlbSl7XG5cdFx0XHRcdHJldHVybiBhZGFwdGVyLmdldENoaWxkcmVuKGVsZW0pLnNvbWUodGVzdCk7XG5cdFx0XHR9O1xuXG5cdFx0XHRmdW5jdGlvbiB0ZXN0KGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gYWRhcHRlci5pc1RhZyhlbGVtKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Y2hpbGQ6IGZ1bmN0aW9uKG5leHQpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGNoaWxkKGVsZW0pe1xuXHRcdFx0XHR2YXIgcGFyZW50ID0gYWRhcHRlci5nZXRQYXJlbnQoZWxlbSk7XG5cdFx0XHRcdHJldHVybiAhIXBhcmVudCAmJiBuZXh0KHBhcmVudCk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0c2libGluZzogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gc2libGluZyhlbGVtKXtcblx0XHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc2libGluZ3MubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSBicmVhaztcblx0XHRcdFx0XHRcdGlmKG5leHQoc2libGluZ3NbaV0pKSByZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YWRqYWNlbnQ6IGZ1bmN0aW9uKG5leHQpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGFkamFjZW50KGVsZW0pe1xuXHRcdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pLFxuXHRcdFx0XHRcdGxhc3RFbGVtZW50O1xuXG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIGJyZWFrO1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQgPSBzaWJsaW5nc1tpXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gISFsYXN0RWxlbWVudCAmJiBuZXh0KGxhc3RFbGVtZW50KTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHR1bml2ZXJzYWw6IGZ1bmN0aW9uKG5leHQpe1xuXHRcdFx0cmV0dXJuIG5leHQ7XG5cdFx0fVxuXHR9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYWxGYWN0b3J5O1xuXG5cbi8qKiovIH0pLFxuLyogNDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KSgpID8gU2V0IDogX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XG5cblxuLyoqKi8gfSksXG4vKiA0NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHNldCwgaXRlcmF0b3IsIHJlc3VsdDtcblx0aWYgKHR5cGVvZiBTZXQgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0c2V0ID0gbmV3IFNldChbJ3JheicsICdkd2EnLCAndHJ6eSddKTtcblx0aWYgKFN0cmluZyhzZXQpICE9PSAnW29iamVjdCBTZXRdJykgcmV0dXJuIGZhbHNlO1xuXHRpZiAoc2V0LnNpemUgIT09IDMpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQuYWRkICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2Ygc2V0LmNsZWFyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2Ygc2V0LmRlbGV0ZSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHNldC5lbnRyaWVzICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2Ygc2V0LmZvckVhY2ggIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQuaGFzICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2Ygc2V0LmtleXMgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQudmFsdWVzICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cblx0aXRlcmF0b3IgPSBzZXQudmFsdWVzKCk7XG5cdHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcblx0aWYgKHJlc3VsdC5kb25lICE9PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAocmVzdWx0LnZhbHVlICE9PSAncmF6JykgcmV0dXJuIGZhbHNlO1xuXG5cdHJldHVybiB0cnVlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQ2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBjbGVhciAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpXG4gICwgZUluZGV4T2YgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KVxuICAsIHNldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KVxuICAsIGNhbGxhYmxlICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuICAsIGQgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuICAsIGVlICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NSlcbiAgLCBTeW1ib2wgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMilcbiAgLCBpdGVyYXRvciAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpXG4gICwgZm9yT2YgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKVxuICAsIEl0ZXJhdG9yICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NClcbiAgLCBpc05hdGl2ZSAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oODUpXG5cbiAgLCBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGxcbiAgLCBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2ZcbiAgLCBTZXRQb2x5LCBnZXRWYWx1ZXMsIE5hdGl2ZVNldDtcblxuaWYgKGlzTmF0aXZlKSBOYXRpdmVTZXQgPSBTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0UG9seSA9IGZ1bmN0aW9uIFNldCgvKml0ZXJhYmxlKi8pIHtcblx0dmFyIGl0ZXJhYmxlID0gYXJndW1lbnRzWzBdLCBzZWxmO1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgU2V0UG9seSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbnN0cnVjdG9yIHJlcXVpcmVzIFxcJ25ld1xcJycpO1xuXHRpZiAoaXNOYXRpdmUgJiYgc2V0UHJvdG90eXBlT2YpIHNlbGYgPSBzZXRQcm90b3R5cGVPZihuZXcgTmF0aXZlU2V0KCksIGdldFByb3RvdHlwZU9mKHRoaXMpKTtcblx0ZWxzZSBzZWxmID0gdGhpcztcblx0aWYgKGl0ZXJhYmxlICE9IG51bGwpIGl0ZXJhdG9yKGl0ZXJhYmxlKTtcblx0ZGVmaW5lUHJvcGVydHkoc2VsZiwgJ19fc2V0RGF0YV9fJywgZCgnYycsIFtdKSk7XG5cdGlmICghaXRlcmFibGUpIHJldHVybiBzZWxmO1xuXHRmb3JPZihpdGVyYWJsZSwgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0aWYgKGVJbmRleE9mLmNhbGwodGhpcywgdmFsdWUpICE9PSAtMSkgcmV0dXJuO1xuXHRcdHRoaXMucHVzaCh2YWx1ZSk7XG5cdH0sIHNlbGYuX19zZXREYXRhX18pO1xuXHRyZXR1cm4gc2VsZjtcbn07XG5cbmlmIChpc05hdGl2ZSkge1xuXHRpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFNldFBvbHksIE5hdGl2ZVNldCk7XG5cdFNldFBvbHkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShOYXRpdmVTZXQucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiBkKFNldFBvbHkpIH0pO1xufVxuXG5lZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhTZXRQb2x5LnByb3RvdHlwZSwge1xuXHRhZGQ6IGQoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuaGFzKHZhbHVlKSkgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5lbWl0KCdfYWRkJywgdGhpcy5fX3NldERhdGFfXy5wdXNoKHZhbHVlKSAtIDEsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSksXG5cdGNsZWFyOiBkKGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoIXRoaXMuX19zZXREYXRhX18ubGVuZ3RoKSByZXR1cm47XG5cdFx0Y2xlYXIuY2FsbCh0aGlzLl9fc2V0RGF0YV9fKTtcblx0XHR0aGlzLmVtaXQoJ19jbGVhcicpO1xuXHR9KSxcblx0ZGVsZXRlOiBkKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdHZhciBpbmRleCA9IGVJbmRleE9mLmNhbGwodGhpcy5fX3NldERhdGFfXywgdmFsdWUpO1xuXHRcdGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBmYWxzZTtcblx0XHR0aGlzLl9fc2V0RGF0YV9fLnNwbGljZShpbmRleCwgMSk7XG5cdFx0dGhpcy5lbWl0KCdfZGVsZXRlJywgaW5kZXgsIHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSksXG5cdGVudHJpZXM6IGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yKHRoaXMsICdrZXkrdmFsdWUnKTsgfSksXG5cdGZvckVhY2g6IGQoZnVuY3Rpb24gKGNiLyosIHRoaXNBcmcqLykge1xuXHRcdHZhciB0aGlzQXJnID0gYXJndW1lbnRzWzFdLCBpdGVyYXRvciwgcmVzdWx0LCB2YWx1ZTtcblx0XHRjYWxsYWJsZShjYik7XG5cdFx0aXRlcmF0b3IgPSB0aGlzLnZhbHVlcygpO1xuXHRcdHJlc3VsdCA9IGl0ZXJhdG9yLl9uZXh0KCk7XG5cdFx0d2hpbGUgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IGl0ZXJhdG9yLl9yZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRjYWxsLmNhbGwoY2IsIHRoaXNBcmcsIHZhbHVlLCB2YWx1ZSwgdGhpcyk7XG5cdFx0XHRyZXN1bHQgPSBpdGVyYXRvci5fbmV4dCgpO1xuXHRcdH1cblx0fSksXG5cdGhhczogZChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRyZXR1cm4gKGVJbmRleE9mLmNhbGwodGhpcy5fX3NldERhdGFfXywgdmFsdWUpICE9PSAtMSk7XG5cdH0pLFxuXHRrZXlzOiBkKGdldFZhbHVlcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudmFsdWVzKCk7IH0pLFxuXHRzaXplOiBkLmdzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX19zZXREYXRhX18ubGVuZ3RoOyB9KSxcblx0dmFsdWVzOiBkKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvcih0aGlzKTsgfSksXG5cdHRvU3RyaW5nOiBkKGZ1bmN0aW9uICgpIHsgcmV0dXJuICdbb2JqZWN0IFNldF0nOyB9KVxufSkpO1xuZGVmaW5lUHJvcGVydHkoU2V0UG9seS5wcm90b3R5cGUsIFN5bWJvbC5pdGVyYXRvciwgZChnZXRWYWx1ZXMpKTtcbmRlZmluZVByb3BlcnR5KFNldFBvbHkucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIGQoJ2MnLCAnU2V0JykpO1xuXG5cbi8qKiovIH0pLFxuLyogNDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIG51bWJlcklzTmFOICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OClcbiAgLCB0b1Bvc0ludCAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpXG4gICwgdmFsdWUgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApXG4gICwgaW5kZXhPZiAgICAgICAgICAgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZlxuICAsIG9iakhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIGFicyAgICAgICAgICAgICAgID0gTWF0aC5hYnNcbiAgLCBmbG9vciAgICAgICAgICAgICA9IE1hdGguZmxvb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNlYXJjaEVsZW1lbnQgLyosIGZyb21JbmRleCovKSB7XG5cdHZhciBpLCBsZW5ndGgsIGZyb21JbmRleCwgdmFsO1xuXHRpZiAoIW51bWJlcklzTmFOKHNlYXJjaEVsZW1lbnQpKSByZXR1cm4gaW5kZXhPZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG5cdGxlbmd0aCA9IHRvUG9zSW50KHZhbHVlKHRoaXMpLmxlbmd0aCk7XG5cdGZyb21JbmRleCA9IGFyZ3VtZW50c1sxXTtcblx0aWYgKGlzTmFOKGZyb21JbmRleCkpIGZyb21JbmRleCA9IDA7XG5cdGVsc2UgaWYgKGZyb21JbmRleCA+PSAwKSBmcm9tSW5kZXggPSBmbG9vcihmcm9tSW5kZXgpO1xuXHRlbHNlIGZyb21JbmRleCA9IHRvUG9zSW50KHRoaXMubGVuZ3RoKSAtIGZsb29yKGFicyhmcm9tSW5kZXgpKTtcblxuXHRmb3IgKGkgPSBmcm9tSW5kZXg7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdGlmIChvYmpIYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsIGkpKSB7XG5cdFx0XHR2YWwgPSB0aGlzW2ldO1xuXHRcdFx0aWYgKG51bWJlcklzTmFOKHZhbCkpIHJldHVybiBpOyAvLyBKc2xpbnQ6IGlnbm9yZVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gLTE7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5KSgpXG5cdD8gTnVtYmVyLmlzTmFOXG5cdDogX193ZWJwYWNrX3JlcXVpcmVfXyg1MCk7XG5cblxuLyoqKi8gfSksXG4vKiA0OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOO1xuXHRpZiAodHlwZW9mIG51bWJlcklzTmFOICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuICFudW1iZXJJc05hTih7fSkgJiYgbnVtYmVySXNOYU4oTmFOKSAmJiAhbnVtYmVySXNOYU4oMzQpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDUwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcblx0cmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpXG5cbiAgLCBhYnMgPSBNYXRoLmFicywgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRpZiAoaXNOYU4odmFsdWUpKSByZXR1cm4gMDtcblx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRpZiAoKHZhbHVlID09PSAwKSB8fCAhaXNGaW5pdGUodmFsdWUpKSByZXR1cm4gdmFsdWU7XG5cdHJldHVybiBzaWduKHZhbHVlKSAqIGZsb29yKGFicyh2YWx1ZSkpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDUyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MykoKVxuXHQ/IE1hdGguc2lnblxuXHQ6IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xuXG5cbi8qKiovIH0pLFxuLyogNTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBzaWduID0gTWF0aC5zaWduO1xuXHRpZiAodHlwZW9mIHNpZ24gIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gKHNpZ24oMTApID09PSAxKSAmJiAoc2lnbigtMjApID09PSAtMSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRpZiAoaXNOYU4odmFsdWUpIHx8ICh2YWx1ZSA9PT0gMCkpIHJldHVybiB2YWx1ZTtcblx0cmV0dXJuIHZhbHVlID4gMCA/IDEgOiAtMTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNWYWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbnZhciBtYXAgPSB7IGZ1bmN0aW9uOiB0cnVlLCBvYmplY3Q6IHRydWUgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIChpc1ZhbHVlKHZhbHVlKSAmJiBtYXBbdHlwZW9mIHZhbHVlXSkgfHwgZmFsc2U7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBXb3JrYXJvdW5kIGZvciBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yODA0XG5cblxuXG52YXIgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZSwgc2hpbTtcblxuaWYgKCFfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KSgpKSB7XG5cdHNoaW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgbnVsbE9iamVjdCwgcG9seVByb3BzLCBkZXNjO1xuXHRpZiAoIXNoaW0pIHJldHVybiBjcmVhdGU7XG5cdGlmIChzaGltLmxldmVsICE9PSAxKSByZXR1cm4gY3JlYXRlO1xuXG5cdG51bGxPYmplY3QgPSB7fTtcblx0cG9seVByb3BzID0ge307XG5cdGRlc2MgPSB7XG5cdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHR2YWx1ZTogdW5kZWZpbmVkXG5cdH07XG5cdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5wcm90b3R5cGUpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcblx0XHRpZiAobmFtZSA9PT0gXCJfX3Byb3RvX19cIikge1xuXHRcdFx0cG9seVByb3BzW25hbWVdID0ge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZFxuXHRcdFx0fTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cG9seVByb3BzW25hbWVdID0gZGVzYztcblx0fSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG51bGxPYmplY3QsIHBvbHlQcm9wcyk7XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHNoaW0sIFwibnVsbFBvbHlmaWxsXCIsIHtcblx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdHdyaXRhYmxlOiBmYWxzZSxcblx0XHR2YWx1ZTogbnVsbE9iamVjdFxuXHR9KTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKHByb3RvdHlwZSwgcHJvcHMpIHtcblx0XHRyZXR1cm4gY3JlYXRlKHByb3RvdHlwZSA9PT0gbnVsbCA/IG51bGxPYmplY3QgOiBwcm90b3R5cGUsIHByb3BzKTtcblx0fTtcbn0oKSk7XG5cblxuLyoqKi8gfSksXG4vKiA1NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ24sIG9iajtcblx0aWYgKHR5cGVvZiBhc3NpZ24gIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhbHNlO1xuXHRvYmogPSB7IGZvbzogXCJyYXpcIiB9O1xuXHRhc3NpZ24ob2JqLCB7IGJhcjogXCJkd2FcIiB9LCB7IHRyenk6IFwidHJ6eVwiIH0pO1xuXHRyZXR1cm4gKG9iai5mb28gKyBvYmouYmFyICsgb2JqLnRyenkpID09PSBcInJhemR3YXRyenlcIjtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIga2V5cyAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KVxuICAsIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKVxuICAsIG1heCAgID0gTWF0aC5tYXg7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRlc3QsIHNyYyAvKiwg4oCmc3JjbiovKSB7XG5cdHZhciBlcnJvciwgaSwgbGVuZ3RoID0gbWF4KGFyZ3VtZW50cy5sZW5ndGgsIDIpLCBhc3NpZ247XG5cdGRlc3QgPSBPYmplY3QodmFsdWUoZGVzdCkpO1xuXHRhc3NpZ24gPSBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0dHJ5IHtcblx0XHRcdGRlc3Rba2V5XSA9IHNyY1trZXldO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZTtcblx0XHR9XG5cdH07XG5cdGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdHNyYyA9IGFyZ3VtZW50c1tpXTtcblx0XHRrZXlzKHNyYykuZm9yRWFjaChhc3NpZ24pO1xuXHR9XG5cdGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB0aHJvdyBlcnJvcjtcblx0cmV0dXJuIGRlc3Q7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKSgpXG5cdD8gT2JqZWN0LmtleXNcblx0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxKTtcblxuXG4vKioqLyB9KSxcbi8qIDYwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdE9iamVjdC5rZXlzKFwicHJpbWl0aXZlXCIpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG4gcmV0dXJuIGZhbHNlO1xufVxufTtcblxuXG4vKioqLyB9KSxcbi8qIDYxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpc1ZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxudmFyIGtleXMgPSBPYmplY3Qua2V5cztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdHJldHVybiBrZXlzKGlzVmFsdWUob2JqZWN0KSA/IE9iamVjdChvYmplY3QpIDogb2JqZWN0KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA2MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIERlcHJlY2F0ZWRcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuIHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCI7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIHN0ciA9IFwicmF6ZHdhdHJ6eVwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0aWYgKHR5cGVvZiBzdHIuY29udGFpbnMgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gKHN0ci5jb250YWlucyhcImR3YVwiKSA9PT0gdHJ1ZSkgJiYgKHN0ci5jb250YWlucyhcImZvb1wiKSA9PT0gZmFsc2UpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDY0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpbmRleE9mID0gU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWFyY2hTdHJpbmcvKiwgcG9zaXRpb24qLykge1xuXHRyZXR1cm4gaW5kZXhPZi5jYWxsKHRoaXMsIHNlYXJjaFN0cmluZywgYXJndW1lbnRzWzFdKSA+IC0xO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDY1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBkICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMylcbiAgLCBjYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcblxuICAsIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LCBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGxcbiAgLCBjcmVhdGUgPSBPYmplY3QuY3JlYXRlLCBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICAsIGRlZmluZVByb3BlcnRpZXMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllc1xuICAsIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIGRlc2NyaXB0b3IgPSB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlIH1cblxuICAsIG9uLCBvbmNlLCBvZmYsIGVtaXQsIG1ldGhvZHMsIGRlc2NyaXB0b3JzLCBiYXNlO1xuXG5vbiA9IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xuXHR2YXIgZGF0YTtcblxuXHRjYWxsYWJsZShsaXN0ZW5lcik7XG5cblx0aWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsICdfX2VlX18nKSkge1xuXHRcdGRhdGEgPSBkZXNjcmlwdG9yLnZhbHVlID0gY3JlYXRlKG51bGwpO1xuXHRcdGRlZmluZVByb3BlcnR5KHRoaXMsICdfX2VlX18nLCBkZXNjcmlwdG9yKTtcblx0XHRkZXNjcmlwdG9yLnZhbHVlID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHRkYXRhID0gdGhpcy5fX2VlX187XG5cdH1cblx0aWYgKCFkYXRhW3R5cGVdKSBkYXRhW3R5cGVdID0gbGlzdGVuZXI7XG5cdGVsc2UgaWYgKHR5cGVvZiBkYXRhW3R5cGVdID09PSAnb2JqZWN0JykgZGF0YVt0eXBlXS5wdXNoKGxpc3RlbmVyKTtcblx0ZWxzZSBkYXRhW3R5cGVdID0gW2RhdGFbdHlwZV0sIGxpc3RlbmVyXTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbm9uY2UgPSBmdW5jdGlvbiAodHlwZSwgbGlzdGVuZXIpIHtcblx0dmFyIG9uY2UsIHNlbGY7XG5cblx0Y2FsbGFibGUobGlzdGVuZXIpO1xuXHRzZWxmID0gdGhpcztcblx0b24uY2FsbCh0aGlzLCB0eXBlLCBvbmNlID0gZnVuY3Rpb24gKCkge1xuXHRcdG9mZi5jYWxsKHNlbGYsIHR5cGUsIG9uY2UpO1xuXHRcdGFwcGx5LmNhbGwobGlzdGVuZXIsIHRoaXMsIGFyZ3VtZW50cyk7XG5cdH0pO1xuXG5cdG9uY2UuX19lZU9uY2VMaXN0ZW5lcl9fID0gbGlzdGVuZXI7XG5cdHJldHVybiB0aGlzO1xufTtcblxub2ZmID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyKSB7XG5cdHZhciBkYXRhLCBsaXN0ZW5lcnMsIGNhbmRpZGF0ZSwgaTtcblxuXHRjYWxsYWJsZShsaXN0ZW5lcik7XG5cblx0aWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsICdfX2VlX18nKSkgcmV0dXJuIHRoaXM7XG5cdGRhdGEgPSB0aGlzLl9fZWVfXztcblx0aWYgKCFkYXRhW3R5cGVdKSByZXR1cm4gdGhpcztcblx0bGlzdGVuZXJzID0gZGF0YVt0eXBlXTtcblxuXHRpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ29iamVjdCcpIHtcblx0XHRmb3IgKGkgPSAwOyAoY2FuZGlkYXRlID0gbGlzdGVuZXJzW2ldKTsgKytpKSB7XG5cdFx0XHRpZiAoKGNhbmRpZGF0ZSA9PT0gbGlzdGVuZXIpIHx8XG5cdFx0XHRcdFx0KGNhbmRpZGF0ZS5fX2VlT25jZUxpc3RlbmVyX18gPT09IGxpc3RlbmVyKSkge1xuXHRcdFx0XHRpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gMikgZGF0YVt0eXBlXSA9IGxpc3RlbmVyc1tpID8gMCA6IDFdO1xuXHRcdFx0XHRlbHNlIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmICgobGlzdGVuZXJzID09PSBsaXN0ZW5lcikgfHxcblx0XHRcdFx0KGxpc3RlbmVycy5fX2VlT25jZUxpc3RlbmVyX18gPT09IGxpc3RlbmVyKSkge1xuXHRcdFx0ZGVsZXRlIGRhdGFbdHlwZV07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5lbWl0ID0gZnVuY3Rpb24gKHR5cGUpIHtcblx0dmFyIGksIGwsIGxpc3RlbmVyLCBsaXN0ZW5lcnMsIGFyZ3M7XG5cblx0aWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsICdfX2VlX18nKSkgcmV0dXJuO1xuXHRsaXN0ZW5lcnMgPSB0aGlzLl9fZWVfX1t0eXBlXTtcblx0aWYgKCFsaXN0ZW5lcnMpIHJldHVybjtcblxuXHRpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ29iamVjdCcpIHtcblx0XHRsID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRhcmdzID0gbmV3IEFycmF5KGwgLSAxKTtcblx0XHRmb3IgKGkgPSAxOyBpIDwgbDsgKytpKSBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcblxuXHRcdGxpc3RlbmVycyA9IGxpc3RlbmVycy5zbGljZSgpO1xuXHRcdGZvciAoaSA9IDA7IChsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXSk7ICsraSkge1xuXHRcdFx0YXBwbHkuY2FsbChsaXN0ZW5lciwgdGhpcywgYXJncyk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuXHRcdGNhc2UgMTpcblx0XHRcdGNhbGwuY2FsbChsaXN0ZW5lcnMsIHRoaXMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAyOlxuXHRcdFx0Y2FsbC5jYWxsKGxpc3RlbmVycywgdGhpcywgYXJndW1lbnRzWzFdKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgMzpcblx0XHRcdGNhbGwuY2FsbChsaXN0ZW5lcnMsIHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRsID0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkobCAtIDEpO1xuXHRcdFx0Zm9yIChpID0gMTsgaSA8IGw7ICsraSkge1xuXHRcdFx0XHRhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdH1cblx0XHRcdGFwcGx5LmNhbGwobGlzdGVuZXJzLCB0aGlzLCBhcmdzKTtcblx0XHR9XG5cdH1cbn07XG5cbm1ldGhvZHMgPSB7XG5cdG9uOiBvbixcblx0b25jZTogb25jZSxcblx0b2ZmOiBvZmYsXG5cdGVtaXQ6IGVtaXRcbn07XG5cbmRlc2NyaXB0b3JzID0ge1xuXHRvbjogZChvbiksXG5cdG9uY2U6IGQob25jZSksXG5cdG9mZjogZChvZmYpLFxuXHRlbWl0OiBkKGVtaXQpXG59O1xuXG5iYXNlID0gZGVmaW5lUHJvcGVydGllcyh7fSwgZGVzY3JpcHRvcnMpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmdW5jdGlvbiAobykge1xuXHRyZXR1cm4gKG8gPT0gbnVsbCkgPyBjcmVhdGUoYmFzZSkgOiBkZWZpbmVQcm9wZXJ0aWVzKE9iamVjdChvKSwgZGVzY3JpcHRvcnMpO1xufTtcbmV4cG9ydHMubWV0aG9kcyA9IG1ldGhvZHM7XG5cblxuLyoqKi8gfSksXG4vKiA2NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgdmFsaWRUeXBlcyA9IHsgb2JqZWN0OiB0cnVlLCBzeW1ib2w6IHRydWUgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBzeW1ib2w7XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cdHN5bWJvbCA9IFN5bWJvbCgndGVzdCBzeW1ib2wnKTtcblx0dHJ5IHsgU3RyaW5nKHN5bWJvbCk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gUmV0dXJuICd0cnVlJyBhbHNvIGZvciBwb2x5ZmlsbHNcblx0aWYgKCF2YWxpZFR5cGVzW3R5cGVvZiBTeW1ib2wuaXRlcmF0b3JdKSByZXR1cm4gZmFsc2U7XG5cdGlmICghdmFsaWRUeXBlc1t0eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlXSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXZhbGlkVHlwZXNbdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZ10pIHJldHVybiBmYWxzZTtcblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA2NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEVTMjAxNSBTeW1ib2wgcG9seWZpbGwgZm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCAob3IgcGFydGlhbGx5KSBzdXBwb3J0IGl0XG5cblxuXG52YXIgZCAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG4gICwgdmFsaWRhdGVTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY4KVxuXG4gICwgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZSwgZGVmaW5lUHJvcGVydGllcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzXG4gICwgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHksIG9ialByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGVcbiAgLCBOYXRpdmVTeW1ib2wsIFN5bWJvbFBvbHlmaWxsLCBIaWRkZW5TeW1ib2wsIGdsb2JhbFN5bWJvbHMgPSBjcmVhdGUobnVsbClcbiAgLCBpc05hdGl2ZVNhZmU7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG5cdE5hdGl2ZVN5bWJvbCA9IFN5bWJvbDtcblx0dHJ5IHtcblx0XHRTdHJpbmcoTmF0aXZlU3ltYm9sKCkpO1xuXHRcdGlzTmF0aXZlU2FmZSA9IHRydWU7XG5cdH0gY2F0Y2ggKGlnbm9yZSkge31cbn1cblxudmFyIGdlbmVyYXRlTmFtZSA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciBjcmVhdGVkID0gY3JlYXRlKG51bGwpO1xuXHRyZXR1cm4gZnVuY3Rpb24gKGRlc2MpIHtcblx0XHR2YXIgcG9zdGZpeCA9IDAsIG5hbWUsIGllMTFCdWdXb3JrYXJvdW5kO1xuXHRcdHdoaWxlIChjcmVhdGVkW2Rlc2MgKyAocG9zdGZpeCB8fCAnJyldKSArK3Bvc3RmaXg7XG5cdFx0ZGVzYyArPSAocG9zdGZpeCB8fCAnJyk7XG5cdFx0Y3JlYXRlZFtkZXNjXSA9IHRydWU7XG5cdFx0bmFtZSA9ICdAQCcgKyBkZXNjO1xuXHRcdGRlZmluZVByb3BlcnR5KG9ialByb3RvdHlwZSwgbmFtZSwgZC5ncyhudWxsLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdC8vIEZvciBJRTExIGlzc3VlIHNlZTpcblx0XHRcdC8vIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrZGV0YWlsL3ZpZXcvMTkyODUwOC9cblx0XHRcdC8vICAgIGllMTEtYnJva2VuLWdldHRlcnMtb24tZG9tLW9iamVjdHNcblx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpa29vL2VzNi1zeW1ib2wvaXNzdWVzLzEyXG5cdFx0XHRpZiAoaWUxMUJ1Z1dvcmthcm91bmQpIHJldHVybjtcblx0XHRcdGllMTFCdWdXb3JrYXJvdW5kID0gdHJ1ZTtcblx0XHRcdGRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIGQodmFsdWUpKTtcblx0XHRcdGllMTFCdWdXb3JrYXJvdW5kID0gZmFsc2U7XG5cdFx0fSkpO1xuXHRcdHJldHVybiBuYW1lO1xuXHR9O1xufSgpKTtcblxuLy8gSW50ZXJuYWwgY29uc3RydWN0b3IgKG5vdCBvbmUgZXhwb3NlZCkgZm9yIGNyZWF0aW5nIFN5bWJvbCBpbnN0YW5jZXMuXG4vLyBUaGlzIG9uZSBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IGBzb21lU3ltYm9sIGluc3RhbmNlb2YgU3ltYm9sYCBhbHdheXMgcmV0dXJuIGZhbHNlXG5IaWRkZW5TeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woZGVzY3JpcHRpb24pIHtcblx0aWYgKHRoaXMgaW5zdGFuY2VvZiBIaWRkZW5TeW1ib2wpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuXHRyZXR1cm4gU3ltYm9sUG9seWZpbGwoZGVzY3JpcHRpb24pO1xufTtcblxuLy8gRXhwb3NlZCBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gKHJldHVybnMgaW5zdGFuY2VzIG9mIEhpZGRlblN5bWJvbClcbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sUG9seWZpbGwgPSBmdW5jdGlvbiBTeW1ib2woZGVzY3JpcHRpb24pIHtcblx0dmFyIHN5bWJvbDtcblx0aWYgKHRoaXMgaW5zdGFuY2VvZiBTeW1ib2wpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuXHRpZiAoaXNOYXRpdmVTYWZlKSByZXR1cm4gTmF0aXZlU3ltYm9sKGRlc2NyaXB0aW9uKTtcblx0c3ltYm9sID0gY3JlYXRlKEhpZGRlblN5bWJvbC5wcm90b3R5cGUpO1xuXHRkZXNjcmlwdGlvbiA9IChkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcoZGVzY3JpcHRpb24pKTtcblx0cmV0dXJuIGRlZmluZVByb3BlcnRpZXMoc3ltYm9sLCB7XG5cdFx0X19kZXNjcmlwdGlvbl9fOiBkKCcnLCBkZXNjcmlwdGlvbiksXG5cdFx0X19uYW1lX186IGQoJycsIGdlbmVyYXRlTmFtZShkZXNjcmlwdGlvbikpXG5cdH0pO1xufTtcbmRlZmluZVByb3BlcnRpZXMoU3ltYm9sUG9seWZpbGwsIHtcblx0Zm9yOiBkKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRpZiAoZ2xvYmFsU3ltYm9sc1trZXldKSByZXR1cm4gZ2xvYmFsU3ltYm9sc1trZXldO1xuXHRcdHJldHVybiAoZ2xvYmFsU3ltYm9sc1trZXldID0gU3ltYm9sUG9seWZpbGwoU3RyaW5nKGtleSkpKTtcblx0fSksXG5cdGtleUZvcjogZChmdW5jdGlvbiAocykge1xuXHRcdHZhciBrZXk7XG5cdFx0dmFsaWRhdGVTeW1ib2wocyk7XG5cdFx0Zm9yIChrZXkgaW4gZ2xvYmFsU3ltYm9scykgaWYgKGdsb2JhbFN5bWJvbHNba2V5XSA9PT0gcykgcmV0dXJuIGtleTtcblx0fSksXG5cblx0Ly8gVG8gZW5zdXJlIHByb3BlciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggb3RoZXIgbmF0aXZlIGZ1bmN0aW9ucyAoZS5nLiBBcnJheS5mcm9tKVxuXHQvLyBmYWxsYmFjayB0byBldmVudHVhbCBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgZ2l2ZW4gc3ltYm9sXG5cdGhhc0luc3RhbmNlOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5oYXNJbnN0YW5jZSkgfHwgU3ltYm9sUG9seWZpbGwoJ2hhc0luc3RhbmNlJykpLFxuXHRpc0NvbmNhdFNwcmVhZGFibGU6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSkgfHxcblx0XHRTeW1ib2xQb2x5ZmlsbCgnaXNDb25jYXRTcHJlYWRhYmxlJykpLFxuXHRpdGVyYXRvcjogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wuaXRlcmF0b3IpIHx8IFN5bWJvbFBvbHlmaWxsKCdpdGVyYXRvcicpKSxcblx0bWF0Y2g6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLm1hdGNoKSB8fCBTeW1ib2xQb2x5ZmlsbCgnbWF0Y2gnKSksXG5cdHJlcGxhY2U6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnJlcGxhY2UpIHx8IFN5bWJvbFBvbHlmaWxsKCdyZXBsYWNlJykpLFxuXHRzZWFyY2g6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnNlYXJjaCkgfHwgU3ltYm9sUG9seWZpbGwoJ3NlYXJjaCcpKSxcblx0c3BlY2llczogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wuc3BlY2llcykgfHwgU3ltYm9sUG9seWZpbGwoJ3NwZWNpZXMnKSksXG5cdHNwbGl0OiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5zcGxpdCkgfHwgU3ltYm9sUG9seWZpbGwoJ3NwbGl0JykpLFxuXHR0b1ByaW1pdGl2ZTogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wudG9QcmltaXRpdmUpIHx8IFN5bWJvbFBvbHlmaWxsKCd0b1ByaW1pdGl2ZScpKSxcblx0dG9TdHJpbmdUYWc6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnRvU3RyaW5nVGFnKSB8fCBTeW1ib2xQb2x5ZmlsbCgndG9TdHJpbmdUYWcnKSksXG5cdHVuc2NvcGFibGVzOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC51bnNjb3BhYmxlcykgfHwgU3ltYm9sUG9seWZpbGwoJ3Vuc2NvcGFibGVzJykpXG59KTtcblxuLy8gSW50ZXJuYWwgdHdlYWtzIGZvciByZWFsIHN5bWJvbCBwcm9kdWNlclxuZGVmaW5lUHJvcGVydGllcyhIaWRkZW5TeW1ib2wucHJvdG90eXBlLCB7XG5cdGNvbnN0cnVjdG9yOiBkKFN5bWJvbFBvbHlmaWxsKSxcblx0dG9TdHJpbmc6IGQoJycsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX19uYW1lX187IH0pXG59KTtcblxuLy8gUHJvcGVyIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgZXhwb3NlZCBvbiBTeW1ib2wucHJvdG90eXBlXG4vLyBUaGV5IHdvbid0IGJlIGFjY2Vzc2libGUgb24gcHJvZHVjZWQgc3ltYm9sIGluc3RhbmNlcyBhcyB0aGV5IGRlcml2ZSBmcm9tIEhpZGRlblN5bWJvbC5wcm90b3R5cGVcbmRlZmluZVByb3BlcnRpZXMoU3ltYm9sUG9seWZpbGwucHJvdG90eXBlLCB7XG5cdHRvU3RyaW5nOiBkKGZ1bmN0aW9uICgpIHsgcmV0dXJuICdTeW1ib2wgKCcgKyB2YWxpZGF0ZVN5bWJvbCh0aGlzKS5fX2Rlc2NyaXB0aW9uX18gKyAnKSc7IH0pLFxuXHR2YWx1ZU9mOiBkKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlU3ltYm9sKHRoaXMpOyB9KVxufSk7XG5kZWZpbmVQcm9wZXJ0eShTeW1ib2xQb2x5ZmlsbC5wcm90b3R5cGUsIFN5bWJvbFBvbHlmaWxsLnRvUHJpbWl0aXZlLCBkKCcnLCBmdW5jdGlvbiAoKSB7XG5cdHZhciBzeW1ib2wgPSB2YWxpZGF0ZVN5bWJvbCh0aGlzKTtcblx0aWYgKHR5cGVvZiBzeW1ib2wgPT09ICdzeW1ib2wnKSByZXR1cm4gc3ltYm9sO1xuXHRyZXR1cm4gc3ltYm9sLnRvU3RyaW5nKCk7XG59KSk7XG5kZWZpbmVQcm9wZXJ0eShTeW1ib2xQb2x5ZmlsbC5wcm90b3R5cGUsIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnLCBkKCdjJywgJ1N5bWJvbCcpKTtcblxuLy8gUHJvcGVyIGltcGxlbWVudGF0b24gb2YgdG9QcmltaXRpdmUgYW5kIHRvU3RyaW5nVGFnIGZvciByZXR1cm5lZCBzeW1ib2wgaW5zdGFuY2VzXG5kZWZpbmVQcm9wZXJ0eShIaWRkZW5TeW1ib2wucHJvdG90eXBlLCBTeW1ib2xQb2x5ZmlsbC50b1N0cmluZ1RhZyxcblx0ZCgnYycsIFN5bWJvbFBvbHlmaWxsLnByb3RvdHlwZVtTeW1ib2xQb2x5ZmlsbC50b1N0cmluZ1RhZ10pKTtcblxuLy8gTm90ZTogSXQncyBpbXBvcnRhbnQgdG8gZGVmaW5lIGB0b1ByaW1pdGl2ZWAgYXMgbGFzdCBvbmUsIGFzIHNvbWUgaW1wbGVtZW50YXRpb25zXG4vLyBpbXBsZW1lbnQgYHRvUHJpbWl0aXZlYCBuYXRpdmVseSB3aXRob3V0IGltcGxlbWVudGluZyBgdG9TdHJpbmdUYWdgIChvciBvdGhlciBzcGVjaWZpZWQgc3ltYm9scylcbi8vIEFuZCB0aGF0IG1heSBpbnZva2UgZXJyb3IgaW4gZGVmaW5pdGlvbiBmbG93OlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWVkaWtvby9lczYtc3ltYm9sL2lzc3Vlcy8xMyNpc3N1ZWNvbW1lbnQtMTY0MTQ2MTQ5XG5kZWZpbmVQcm9wZXJ0eShIaWRkZW5TeW1ib2wucHJvdG90eXBlLCBTeW1ib2xQb2x5ZmlsbC50b1ByaW1pdGl2ZSxcblx0ZCgnYycsIFN5bWJvbFBvbHlmaWxsLnByb3RvdHlwZVtTeW1ib2xQb2x5ZmlsbC50b1ByaW1pdGl2ZV0pKTtcblxuXG4vKioqLyB9KSxcbi8qIDY4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpc1N5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRpZiAoIWlzU3ltYm9sKHZhbHVlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih2YWx1ZSArIFwiIGlzIG5vdCBhIHN5bWJvbFwiKTtcblx0cmV0dXJuIHZhbHVlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDY5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHgpIHtcblx0aWYgKCF4KSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHJldHVybiB0cnVlO1xuXHRpZiAoIXguY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcblx0aWYgKHguY29uc3RydWN0b3IubmFtZSAhPT0gJ1N5bWJvbCcpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuICh4W3guY29uc3RydWN0b3IudG9TdHJpbmdUYWddID09PSAnU3ltYm9sJyk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzQXJndW1lbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KVxuICAsIGlzVmFsdWUgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KVxuICAsIGlzU3RyaW5nICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcblxudmFyIGl0ZXJhdG9yU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5pdGVyYXRvclxuICAsIGlzQXJyYXkgICAgICAgID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0aWYgKCFpc1ZhbHVlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoaXNBcnJheSh2YWx1ZSkpIHJldHVybiB0cnVlO1xuXHRpZiAoaXNTdHJpbmcodmFsdWUpKSByZXR1cm4gdHJ1ZTtcblx0aWYgKGlzQXJndW1lbnRzKHZhbHVlKSkgcmV0dXJuIHRydWU7XG5cdHJldHVybiB0eXBlb2YgdmFsdWVbaXRlcmF0b3JTeW1ib2xdID09PSBcImZ1bmN0aW9uXCI7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzQXJndW1lbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KVxuICAsIGNhbGxhYmxlICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuICAsIGlzU3RyaW5nICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KVxuICAsIGdldCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSwgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLCBzb21lID0gQXJyYXkucHJvdG90eXBlLnNvbWU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBjYiAvKiwgdGhpc0FyZyovKSB7XG5cdHZhciBtb2RlLCB0aGlzQXJnID0gYXJndW1lbnRzWzJdLCByZXN1bHQsIGRvQnJlYWssIGJyb2tlbiwgaSwgbGVuZ3RoLCBjaGFyLCBjb2RlO1xuXHRpZiAoaXNBcnJheShpdGVyYWJsZSkgfHwgaXNBcmd1bWVudHMoaXRlcmFibGUpKSBtb2RlID0gXCJhcnJheVwiO1xuXHRlbHNlIGlmIChpc1N0cmluZyhpdGVyYWJsZSkpIG1vZGUgPSBcInN0cmluZ1wiO1xuXHRlbHNlIGl0ZXJhYmxlID0gZ2V0KGl0ZXJhYmxlKTtcblxuXHRjYWxsYWJsZShjYik7XG5cdGRvQnJlYWsgPSBmdW5jdGlvbiAoKSB7XG5cdFx0YnJva2VuID0gdHJ1ZTtcblx0fTtcblx0aWYgKG1vZGUgPT09IFwiYXJyYXlcIikge1xuXHRcdHNvbWUuY2FsbChpdGVyYWJsZSwgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRjYWxsLmNhbGwoY2IsIHRoaXNBcmcsIHZhbHVlLCBkb0JyZWFrKTtcblx0XHRcdHJldHVybiBicm9rZW47XG5cdFx0fSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChtb2RlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0bGVuZ3RoID0gaXRlcmFibGUubGVuZ3RoO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdFx0Y2hhciA9IGl0ZXJhYmxlW2ldO1xuXHRcdFx0aWYgKGkgKyAxIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMCk7XG5cdFx0XHRcdGlmIChjb2RlID49IDB4ZDgwMCAmJiBjb2RlIDw9IDB4ZGJmZikgY2hhciArPSBpdGVyYWJsZVsrK2ldO1xuXHRcdFx0fVxuXHRcdFx0Y2FsbC5jYWxsKGNiLCB0aGlzQXJnLCBjaGFyLCBkb0JyZWFrKTtcblx0XHRcdGlmIChicm9rZW4pIGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblx0cmVzdWx0ID0gaXRlcmFibGUubmV4dCgpO1xuXG5cdHdoaWxlICghcmVzdWx0LmRvbmUpIHtcblx0XHRjYWxsLmNhbGwoY2IsIHRoaXNBcmcsIHJlc3VsdC52YWx1ZSwgZG9CcmVhayk7XG5cdFx0aWYgKGJyb2tlbikgcmV0dXJuO1xuXHRcdHJlc3VsdCA9IGl0ZXJhYmxlLm5leHQoKTtcblx0fVxufTtcblxuXG4vKioqLyB9KSxcbi8qIDcyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpc0FyZ3VtZW50cyAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNylcbiAgLCBpc1N0cmluZyAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oOClcbiAgLCBBcnJheUl0ZXJhdG9yICA9IF9fd2VicGFja19yZXF1aXJlX18oNzMpXG4gICwgU3RyaW5nSXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzKVxuICAsIGl0ZXJhYmxlICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMilcbiAgLCBpdGVyYXRvclN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMikuaXRlcmF0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuXHRpZiAodHlwZW9mIGl0ZXJhYmxlKG9iailbaXRlcmF0b3JTeW1ib2xdID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBvYmpbaXRlcmF0b3JTeW1ib2xdKCk7XG5cdGlmIChpc0FyZ3VtZW50cyhvYmopKSByZXR1cm4gbmV3IEFycmF5SXRlcmF0b3Iob2JqKTtcblx0aWYgKGlzU3RyaW5nKG9iaikpIHJldHVybiBuZXcgU3RyaW5nSXRlcmF0b3Iob2JqKTtcblx0cmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKG9iaik7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIHNldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KVxuICAsIGNvbnRhaW5zICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcbiAgLCBkICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMylcbiAgLCBTeW1ib2wgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMilcbiAgLCBJdGVyYXRvciAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHksIEFycmF5SXRlcmF0b3I7XG5cbkFycmF5SXRlcmF0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcnIsIGtpbmQpIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIEFycmF5SXRlcmF0b3IpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldydcIik7XG5cdEl0ZXJhdG9yLmNhbGwodGhpcywgYXJyKTtcblx0aWYgKCFraW5kKSBraW5kID0gXCJ2YWx1ZVwiO1xuXHRlbHNlIGlmIChjb250YWlucy5jYWxsKGtpbmQsIFwia2V5K3ZhbHVlXCIpKSBraW5kID0gXCJrZXkrdmFsdWVcIjtcblx0ZWxzZSBpZiAoY29udGFpbnMuY2FsbChraW5kLCBcImtleVwiKSkga2luZCA9IFwia2V5XCI7XG5cdGVsc2Uga2luZCA9IFwidmFsdWVcIjtcblx0ZGVmaW5lUHJvcGVydHkodGhpcywgXCJfX2tpbmRfX1wiLCBkKFwiXCIsIGtpbmQpKTtcbn07XG5pZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKEFycmF5SXRlcmF0b3IsIEl0ZXJhdG9yKTtcblxuLy8gSW50ZXJuYWwgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIGRvZXNuJ3QgZXhwb3NlIGl0cyBjb25zdHJ1Y3RvclxuZGVsZXRlIEFycmF5SXRlcmF0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5BcnJheUl0ZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3IucHJvdG90eXBlLCB7XG5cdF9yZXNvbHZlOiBkKGZ1bmN0aW9uIChpKSB7XG5cdFx0aWYgKHRoaXMuX19raW5kX18gPT09IFwidmFsdWVcIikgcmV0dXJuIHRoaXMuX19saXN0X19baV07XG5cdFx0aWYgKHRoaXMuX19raW5kX18gPT09IFwia2V5K3ZhbHVlXCIpIHJldHVybiBbaSwgdGhpcy5fX2xpc3RfX1tpXV07XG5cdFx0cmV0dXJuIGk7XG5cdH0pXG59KTtcbmRlZmluZVByb3BlcnR5KEFycmF5SXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIGQoXCJjXCIsIFwiQXJyYXkgSXRlcmF0b3JcIikpO1xuXG5cbi8qKiovIH0pLFxuLyogNzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGNvcHkgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1KVxuICAsIG5vcm1hbGl6ZU9wdGlvbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKVxuICAsIGVuc3VyZUNhbGxhYmxlICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgbWFwICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oODApXG4gICwgY2FsbGFibGUgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcbiAgLCB2YWxpZFZhbHVlICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKVxuXG4gICwgYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICAsIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIGRlZmluZTtcblxuZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGRlc2MsIG9wdGlvbnMpIHtcblx0dmFyIHZhbHVlID0gdmFsaWRWYWx1ZShkZXNjKSAmJiBjYWxsYWJsZShkZXNjLnZhbHVlKSwgZGdzO1xuXHRkZ3MgPSBjb3B5KGRlc2MpO1xuXHRkZWxldGUgZGdzLndyaXRhYmxlO1xuXHRkZWxldGUgZGdzLnZhbHVlO1xuXHRkZ3MuZ2V0ID0gZnVuY3Rpb24gKCkge1xuXHRcdGlmICghb3B0aW9ucy5vdmVyd3JpdGVEZWZpbml0aW9uICYmIGhhc093blByb3BlcnR5LmNhbGwodGhpcywgbmFtZSkpIHJldHVybiB2YWx1ZTtcblx0XHRkZXNjLnZhbHVlID0gYmluZC5jYWxsKHZhbHVlLCBvcHRpb25zLnJlc29sdmVDb250ZXh0ID8gb3B0aW9ucy5yZXNvbHZlQ29udGV4dCh0aGlzKSA6IHRoaXMpO1xuXHRcdGRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIGRlc2MpO1xuXHRcdHJldHVybiB0aGlzW25hbWVdO1xuXHR9O1xuXHRyZXR1cm4gZGdzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocHJvcHMvKiwgb3B0aW9ucyovKSB7XG5cdHZhciBvcHRpb25zID0gbm9ybWFsaXplT3B0aW9ucyhhcmd1bWVudHNbMV0pO1xuXHRpZiAob3B0aW9ucy5yZXNvbHZlQ29udGV4dCAhPSBudWxsKSBlbnN1cmVDYWxsYWJsZShvcHRpb25zLnJlc29sdmVDb250ZXh0KTtcblx0cmV0dXJuIG1hcChwcm9wcywgZnVuY3Rpb24gKGRlc2MsIG5hbWUpIHsgcmV0dXJuIGRlZmluZShuYW1lLCBkZXNjLCBvcHRpb25zKTsgfSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGFGcm9tICA9IF9fd2VicGFja19yZXF1aXJlX18oNzYpXG4gICwgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcbiAgLCB2YWx1ZSAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmovKiwgcHJvcGVydHlOYW1lcywgb3B0aW9ucyovKSB7XG5cdHZhciBjb3B5ID0gT2JqZWN0KHZhbHVlKG9iaikpLCBwcm9wZXJ0eU5hbWVzID0gYXJndW1lbnRzWzFdLCBvcHRpb25zID0gT2JqZWN0KGFyZ3VtZW50c1syXSk7XG5cdGlmIChjb3B5ICE9PSBvYmogJiYgIXByb3BlcnR5TmFtZXMpIHJldHVybiBjb3B5O1xuXHR2YXIgcmVzdWx0ID0ge307XG5cdGlmIChwcm9wZXJ0eU5hbWVzKSB7XG5cdFx0YUZyb20ocHJvcGVydHlOYW1lcywgZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xuXHRcdFx0aWYgKG9wdGlvbnMuZW5zdXJlIHx8IHByb3BlcnR5TmFtZSBpbiBvYmopIHJlc3VsdFtwcm9wZXJ0eU5hbWVdID0gb2JqW3Byb3BlcnR5TmFtZV07XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0YXNzaWduKHJlc3VsdCwgb2JqKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDc2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NykoKVxuXHQ/IEFycmF5LmZyb21cblx0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4KTtcblxuXG4vKioqLyB9KSxcbi8qIDc3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgZnJvbSA9IEFycmF5LmZyb20sIGFyciwgcmVzdWx0O1xuXHRpZiAodHlwZW9mIGZyb20gIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhbHNlO1xuXHRhcnIgPSBbXCJyYXpcIiwgXCJkd2FcIl07XG5cdHJlc3VsdCA9IGZyb20oYXJyKTtcblx0cmV0dXJuIEJvb2xlYW4ocmVzdWx0ICYmIChyZXN1bHQgIT09IGFycikgJiYgKHJlc3VsdFsxXSA9PT0gXCJkd2FcIikpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDc4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpdGVyYXRvclN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMikuaXRlcmF0b3JcbiAgLCBpc0FyZ3VtZW50cyAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNylcbiAgLCBpc0Z1bmN0aW9uICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzkpXG4gICwgdG9Qb3NJbnQgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KVxuICAsIGNhbGxhYmxlICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuICAsIHZhbGlkVmFsdWUgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKVxuICAsIGlzVmFsdWUgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KVxuICAsIGlzU3RyaW5nICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KVxuICAsIGlzQXJyYXkgICAgICAgID0gQXJyYXkuaXNBcnJheVxuICAsIGNhbGwgICAgICAgICAgID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGxcbiAgLCBkZXNjICAgICAgICAgICA9IHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IG51bGwgfVxuICAsIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJyYXlMaWtlIC8qLCBtYXBGbiwgdGhpc0FyZyovKSB7XG5cdHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXVxuXHQgICwgdGhpc0FyZyA9IGFyZ3VtZW50c1syXVxuXHQgICwgQ29udGV4dFxuXHQgICwgaVxuXHQgICwgalxuXHQgICwgYXJyXG5cdCAgLCBsZW5ndGhcblx0ICAsIGNvZGVcblx0ICAsIGl0ZXJhdG9yXG5cdCAgLCByZXN1bHRcblx0ICAsIGdldEl0ZXJhdG9yXG5cdCAgLCB2YWx1ZTtcblxuXHRhcnJheUxpa2UgPSBPYmplY3QodmFsaWRWYWx1ZShhcnJheUxpa2UpKTtcblxuXHRpZiAoaXNWYWx1ZShtYXBGbikpIGNhbGxhYmxlKG1hcEZuKTtcblx0aWYgKCF0aGlzIHx8IHRoaXMgPT09IEFycmF5IHx8ICFpc0Z1bmN0aW9uKHRoaXMpKSB7XG5cdFx0Ly8gUmVzdWx0OiBQbGFpbiBhcnJheVxuXHRcdGlmICghbWFwRm4pIHtcblx0XHRcdGlmIChpc0FyZ3VtZW50cyhhcnJheUxpa2UpKSB7XG5cdFx0XHRcdC8vIFNvdXJjZTogQXJndW1lbnRzXG5cdFx0XHRcdGxlbmd0aCA9IGFycmF5TGlrZS5sZW5ndGg7XG5cdFx0XHRcdGlmIChsZW5ndGggIT09IDEpIHJldHVybiBBcnJheS5hcHBseShudWxsLCBhcnJheUxpa2UpO1xuXHRcdFx0XHRhcnIgPSBuZXcgQXJyYXkoMSk7XG5cdFx0XHRcdGFyclswXSA9IGFycmF5TGlrZVswXTtcblx0XHRcdFx0cmV0dXJuIGFycjtcblx0XHRcdH1cblx0XHRcdGlmIChpc0FycmF5KGFycmF5TGlrZSkpIHtcblx0XHRcdFx0Ly8gU291cmNlOiBBcnJheVxuXHRcdFx0XHRhcnIgPSBuZXcgQXJyYXkobGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aCk7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgYXJyW2ldID0gYXJyYXlMaWtlW2ldO1xuXHRcdFx0XHRyZXR1cm4gYXJyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhcnIgPSBbXTtcblx0fSBlbHNlIHtcblx0XHQvLyBSZXN1bHQ6IE5vbiBwbGFpbiBhcnJheVxuXHRcdENvbnRleHQgPSB0aGlzO1xuXHR9XG5cblx0aWYgKCFpc0FycmF5KGFycmF5TGlrZSkpIHtcblx0XHRpZiAoKGdldEl0ZXJhdG9yID0gYXJyYXlMaWtlW2l0ZXJhdG9yU3ltYm9sXSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gU291cmNlOiBJdGVyYXRvclxuXHRcdFx0aXRlcmF0b3IgPSBjYWxsYWJsZShnZXRJdGVyYXRvcikuY2FsbChhcnJheUxpa2UpO1xuXHRcdFx0aWYgKENvbnRleHQpIGFyciA9IG5ldyBDb250ZXh0KCk7XG5cdFx0XHRyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG5cdFx0XHRpID0gMDtcblx0XHRcdHdoaWxlICghcmVzdWx0LmRvbmUpIHtcblx0XHRcdFx0dmFsdWUgPSBtYXBGbiA/IGNhbGwuY2FsbChtYXBGbiwgdGhpc0FyZywgcmVzdWx0LnZhbHVlLCBpKSA6IHJlc3VsdC52YWx1ZTtcblx0XHRcdFx0aWYgKENvbnRleHQpIHtcblx0XHRcdFx0XHRkZXNjLnZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdFx0ZGVmaW5lUHJvcGVydHkoYXJyLCBpLCBkZXNjKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhcnJbaV0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG5cdFx0XHRcdCsraTtcblx0XHRcdH1cblx0XHRcdGxlbmd0aCA9IGk7XG5cdFx0fSBlbHNlIGlmIChpc1N0cmluZyhhcnJheUxpa2UpKSB7XG5cdFx0XHQvLyBTb3VyY2U6IFN0cmluZ1xuXHRcdFx0bGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aDtcblx0XHRcdGlmIChDb250ZXh0KSBhcnIgPSBuZXcgQ29udGV4dCgpO1xuXHRcdFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdFx0XHR2YWx1ZSA9IGFycmF5TGlrZVtpXTtcblx0XHRcdFx0aWYgKGkgKyAxIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoMCk7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1kZXB0aFxuXHRcdFx0XHRcdGlmIChjb2RlID49IDB4ZDgwMCAmJiBjb2RlIDw9IDB4ZGJmZikgdmFsdWUgKz0gYXJyYXlMaWtlWysraV07XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFsdWUgPSBtYXBGbiA/IGNhbGwuY2FsbChtYXBGbiwgdGhpc0FyZywgdmFsdWUsIGopIDogdmFsdWU7XG5cdFx0XHRcdGlmIChDb250ZXh0KSB7XG5cdFx0XHRcdFx0ZGVzYy52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGRlZmluZVByb3BlcnR5KGFyciwgaiwgZGVzYyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YXJyW2pdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0KytqO1xuXHRcdFx0fVxuXHRcdFx0bGVuZ3RoID0gajtcblx0XHR9XG5cdH1cblx0aWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gU291cmNlOiBhcnJheSBvciBhcnJheS1saWtlXG5cdFx0bGVuZ3RoID0gdG9Qb3NJbnQoYXJyYXlMaWtlLmxlbmd0aCk7XG5cdFx0aWYgKENvbnRleHQpIGFyciA9IG5ldyBDb250ZXh0KGxlbmd0aCk7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0XHR2YWx1ZSA9IG1hcEZuID8gY2FsbC5jYWxsKG1hcEZuLCB0aGlzQXJnLCBhcnJheUxpa2VbaV0sIGkpIDogYXJyYXlMaWtlW2ldO1xuXHRcdFx0aWYgKENvbnRleHQpIHtcblx0XHRcdFx0ZGVzYy52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0XHRkZWZpbmVQcm9wZXJ0eShhcnIsIGksIGRlc2MpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YXJyW2ldID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChDb250ZXh0KSB7XG5cdFx0ZGVzYy52YWx1ZSA9IG51bGw7XG5cdFx0YXJyLmxlbmd0aCA9IGxlbmd0aDtcblx0fVxuXHRyZXR1cm4gYXJyO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDc5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBvYmpUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsIGlkID0gb2JqVG9TdHJpbmcuY2FsbChfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gaWQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogODAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuICAsIGZvckVhY2ggID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MSlcbiAgLCBjYWxsICAgICA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmosIGNiIC8qLCB0aGlzQXJnKi8pIHtcblx0dmFyIHJlc3VsdCA9IHt9LCB0aGlzQXJnID0gYXJndW1lbnRzWzJdO1xuXHRjYWxsYWJsZShjYik7XG5cdGZvckVhY2gob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSwgdGFyZ2V0T2JqLCBpbmRleCkge1xuXHRcdHJlc3VsdFtrZXldID0gY2FsbC5jYWxsKGNiLCB0aGlzQXJnLCB2YWx1ZSwga2V5LCB0YXJnZXRPYmosIGluZGV4KTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogODEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyKShcImZvckVhY2hcIik7XG5cblxuLyoqKi8gfSksXG4vKiA4MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEludGVybmFsIG1ldGhvZCwgdXNlZCBieSBpdGVyYXRpb24gZnVuY3Rpb25zLlxuLy8gQ2FsbHMgYSBmdW5jdGlvbiBmb3IgZWFjaCBrZXktdmFsdWUgcGFpciBmb3VuZCBpbiBvYmplY3Rcbi8vIE9wdGlvbmFsbHkgdGFrZXMgY29tcGFyZUZuIHRvIGl0ZXJhdGUgb2JqZWN0IGluIHNwZWNpZmljIG9yZGVyXG5cblxuXG52YXIgY2FsbGFibGUgICAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgdmFsdWUgICAgICAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApXG4gICwgYmluZCAgICAgICAgICAgICAgICAgICAgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuICAsIGNhbGwgICAgICAgICAgICAgICAgICAgID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGxcbiAgLCBrZXlzICAgICAgICAgICAgICAgICAgICA9IE9iamVjdC5rZXlzXG4gICwgb2JqUHJvcGVydHlJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGRlZlZhbCkge1xuXHRyZXR1cm4gZnVuY3Rpb24gKG9iaiwgY2IgLyosIHRoaXNBcmcsIGNvbXBhcmVGbiovKSB7XG5cdFx0dmFyIGxpc3QsIHRoaXNBcmcgPSBhcmd1bWVudHNbMl0sIGNvbXBhcmVGbiA9IGFyZ3VtZW50c1szXTtcblx0XHRvYmogPSBPYmplY3QodmFsdWUob2JqKSk7XG5cdFx0Y2FsbGFibGUoY2IpO1xuXG5cdFx0bGlzdCA9IGtleXMob2JqKTtcblx0XHRpZiAoY29tcGFyZUZuKSB7XG5cdFx0XHRsaXN0LnNvcnQodHlwZW9mIGNvbXBhcmVGbiA9PT0gXCJmdW5jdGlvblwiID8gYmluZC5jYWxsKGNvbXBhcmVGbiwgb2JqKSA6IHVuZGVmaW5lZCk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIG1ldGhvZCA9IGxpc3RbbWV0aG9kXTtcblx0XHRyZXR1cm4gY2FsbC5jYWxsKG1ldGhvZCwgbGlzdCwgZnVuY3Rpb24gKGtleSwgaW5kZXgpIHtcblx0XHRcdGlmICghb2JqUHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIGtleSkpIHJldHVybiBkZWZWYWw7XG5cdFx0XHRyZXR1cm4gY2FsbC5jYWxsKGNiLCB0aGlzQXJnLCBvYmpba2V5XSwga2V5LCBvYmosIGluZGV4KTtcblx0XHR9KTtcblx0fTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIFRoYW5rcyBAbWF0aGlhc2J5bmVuc1xuLy8gaHR0cDovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC11bmljb2RlI2l0ZXJhdGluZy1vdmVyLXN5bWJvbHNcblxuXG5cbnZhciBzZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNilcbiAgLCBkICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMylcbiAgLCBTeW1ib2wgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMilcbiAgLCBJdGVyYXRvciAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHksIFN0cmluZ0l0ZXJhdG9yO1xuXG5TdHJpbmdJdGVyYXRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0cikge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RyaW5nSXRlcmF0b3IpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldydcIik7XG5cdHN0ciA9IFN0cmluZyhzdHIpO1xuXHRJdGVyYXRvci5jYWxsKHRoaXMsIHN0cik7XG5cdGRlZmluZVByb3BlcnR5KHRoaXMsIFwiX19sZW5ndGhfX1wiLCBkKFwiXCIsIHN0ci5sZW5ndGgpKTtcbn07XG5pZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFN0cmluZ0l0ZXJhdG9yLCBJdGVyYXRvcik7XG5cbi8vIEludGVybmFsICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSBkb2Vzbid0IGV4cG9zZSBpdHMgY29uc3RydWN0b3JcbmRlbGV0ZSBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cblN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3IucHJvdG90eXBlLCB7XG5cdF9uZXh0OiBkKGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoIXRoaXMuX19saXN0X18pIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0aWYgKHRoaXMuX19uZXh0SW5kZXhfXyA8IHRoaXMuX19sZW5ndGhfXykgcmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXysrO1xuXHRcdHRoaXMuX3VuQmluZCgpO1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0pLFxuXHRfcmVzb2x2ZTogZChmdW5jdGlvbiAoaSkge1xuXHRcdHZhciBjaGFyID0gdGhpcy5fX2xpc3RfX1tpXSwgY29kZTtcblx0XHRpZiAodGhpcy5fX25leHRJbmRleF9fID09PSB0aGlzLl9fbGVuZ3RoX18pIHJldHVybiBjaGFyO1xuXHRcdGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMCk7XG5cdFx0aWYgKGNvZGUgPj0gMHhkODAwICYmIGNvZGUgPD0gMHhkYmZmKSByZXR1cm4gY2hhciArIHRoaXMuX19saXN0X19bdGhpcy5fX25leHRJbmRleF9fKytdO1xuXHRcdHJldHVybiBjaGFyO1xuXHR9KVxufSk7XG5kZWZpbmVQcm9wZXJ0eShTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZChcImNcIiwgXCJTdHJpbmcgSXRlcmF0b3JcIikpO1xuXG5cbi8qKiovIH0pLFxuLyogODQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIHNldFByb3RvdHlwZU9mICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KVxuICAsIGNvbnRhaW5zICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcbiAgLCBkICAgICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMylcbiAgLCBJdGVyYXRvciAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpXG4gICwgdG9TdHJpbmdUYWdTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLnRvU3RyaW5nVGFnXG5cbiAgLCBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICAsIFNldEl0ZXJhdG9yO1xuXG5TZXRJdGVyYXRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCwga2luZCkge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgU2V0SXRlcmF0b3IpKSByZXR1cm4gbmV3IFNldEl0ZXJhdG9yKHNldCwga2luZCk7XG5cdEl0ZXJhdG9yLmNhbGwodGhpcywgc2V0Ll9fc2V0RGF0YV9fLCBzZXQpO1xuXHRpZiAoIWtpbmQpIGtpbmQgPSAndmFsdWUnO1xuXHRlbHNlIGlmIChjb250YWlucy5jYWxsKGtpbmQsICdrZXkrdmFsdWUnKSkga2luZCA9ICdrZXkrdmFsdWUnO1xuXHRlbHNlIGtpbmQgPSAndmFsdWUnO1xuXHRkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19raW5kX18nLCBkKCcnLCBraW5kKSk7XG59O1xuaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZihTZXRJdGVyYXRvciwgSXRlcmF0b3IpO1xuXG5TZXRJdGVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yLnByb3RvdHlwZSwge1xuXHRjb25zdHJ1Y3RvcjogZChTZXRJdGVyYXRvciksXG5cdF9yZXNvbHZlOiBkKGZ1bmN0aW9uIChpKSB7XG5cdFx0aWYgKHRoaXMuX19raW5kX18gPT09ICd2YWx1ZScpIHJldHVybiB0aGlzLl9fbGlzdF9fW2ldO1xuXHRcdHJldHVybiBbdGhpcy5fX2xpc3RfX1tpXSwgdGhpcy5fX2xpc3RfX1tpXV07XG5cdH0pLFxuXHR0b1N0cmluZzogZChmdW5jdGlvbiAoKSB7IHJldHVybiAnW29iamVjdCBTZXQgSXRlcmF0b3JdJzsgfSlcbn0pO1xuZGVmaW5lUHJvcGVydHkoU2V0SXRlcmF0b3IucHJvdG90eXBlLCB0b1N0cmluZ1RhZ1N5bWJvbCwgZCgnYycsICdTZXQgSXRlcmF0b3InKSk7XG5cblxuLyoqKi8gfSksXG4vKiA4NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEV4cG9ydHMgdHJ1ZSBpZiBlbnZpcm9ubWVudCBwcm92aWRlcyBuYXRpdmUgYFNldGAgaW1wbGVtZW50YXRpb24sXG4vLyB3aGF0ZXZlciB0aGF0IGlzLlxuXG5cblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKCkge1xuXHRpZiAodHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoU2V0LnByb3RvdHlwZSkgPT09ICdbb2JqZWN0IFNldF0nKTtcbn0oKSk7XG5cblxuLyoqKi8gfSksXG4vKiA4NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vKlxuXHRwc2V1ZG8gc2VsZWN0b3JzXG5cblx0LS0tXG5cblx0dGhleSBhcmUgYXZhaWxhYmxlIGluIHR3byBmb3Jtczpcblx0KiBmaWx0ZXJzIGNhbGxlZCB3aGVuIHRoZSBzZWxlY3RvclxuXHQgIGlzIGNvbXBpbGVkIGFuZCByZXR1cm4gYSBmdW5jdGlvblxuXHQgIHRoYXQgbmVlZHMgdG8gcmV0dXJuIG5leHQoKVxuXHQqIHBzZXVkb3MgZ2V0IGNhbGxlZCBvbiBleGVjdXRpb25cblx0ICB0aGV5IG5lZWQgdG8gcmV0dXJuIGEgYm9vbGVhblxuKi9cblxudmFyIGdldE5DaGVjayAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NyksXG5cdEJhc2VGdW5jcyAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSxcblx0YXR0cmlidXRlc0ZhY3RvcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKSxcblx0dHJ1ZUZ1bmMgICAgICAgICAgPSBCYXNlRnVuY3MudHJ1ZUZ1bmMsXG5cdGZhbHNlRnVuYyAgICAgICAgID0gQmFzZUZ1bmNzLmZhbHNlRnVuYztcblxuZnVuY3Rpb24gZmlsdGVyc0ZhY3RvcnkoYWRhcHRlcil7XG5cdHZhciBhdHRyaWJ1dGVzICA9IGF0dHJpYnV0ZXNGYWN0b3J5KGFkYXB0ZXIpLFxuXHRcdGNoZWNrQXR0cmliID0gYXR0cmlidXRlcy5ydWxlcy5lcXVhbHM7XG5cblx0Ly9oZWxwZXIgbWV0aG9kc1xuXHRmdW5jdGlvbiBlcXVhbHMoYSwgYil7XG5cdFx0aWYodHlwZW9mIGFkYXB0ZXIuZXF1YWxzID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBhZGFwdGVyLmVxdWFscyhhLCBiKTtcblxuXHRcdHJldHVybiBhID09PSBiO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0QXR0cmliRnVuYyhuYW1lLCB2YWx1ZSl7XG5cdFx0dmFyIGRhdGEgPSB7bmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlfTtcblx0XHRyZXR1cm4gZnVuY3Rpb24gYXR0cmliRnVuYyhuZXh0KXtcblx0XHRcdHJldHVybiBjaGVja0F0dHJpYihuZXh0LCBkYXRhKTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Q2hpbGRGdW5jKG5leHQpe1xuXHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiAhIWFkYXB0ZXIuZ2V0UGFyZW50KGVsZW0pICYmIG5leHQoZWxlbSk7XG5cdFx0fTtcblx0fVxuXG5cdHZhciBmaWx0ZXJzID0ge1xuXHRcdGNvbnRhaW5zOiBmdW5jdGlvbihuZXh0LCB0ZXh0KXtcblx0XHRcdHJldHVybiBmdW5jdGlvbiBjb250YWlucyhlbGVtKXtcblx0XHRcdFx0cmV0dXJuIG5leHQoZWxlbSkgJiYgYWRhcHRlci5nZXRUZXh0KGVsZW0pLmluZGV4T2YodGV4dCkgPj0gMDtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRpY29udGFpbnM6IGZ1bmN0aW9uKG5leHQsIHRleHQpe1xuXHRcdFx0dmFyIGl0ZXh0ID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGljb250YWlucyhlbGVtKXtcblx0XHRcdFx0cmV0dXJuIG5leHQoZWxlbSkgJiZcblx0XHRcdFx0XHRhZGFwdGVyLmdldFRleHQoZWxlbSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGl0ZXh0KSA+PSAwO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0Ly9sb2NhdGlvbiBzcGVjaWZpYyBtZXRob2RzXG5cdFx0XCJudGgtY2hpbGRcIjogZnVuY3Rpb24obmV4dCwgcnVsZSl7XG5cdFx0XHR2YXIgZnVuYyA9IGdldE5DaGVjayhydWxlKTtcblxuXHRcdFx0aWYoZnVuYyA9PT0gZmFsc2VGdW5jKSByZXR1cm4gZnVuYztcblx0XHRcdGlmKGZ1bmMgPT09IHRydWVGdW5jKSAgcmV0dXJuIGdldENoaWxkRnVuYyhuZXh0KTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIG50aENoaWxkKGVsZW0pe1xuXHRcdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRcdGZvcih2YXIgaSA9IDAsIHBvcyA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIGJyZWFrO1xuXHRcdFx0XHRcdFx0ZWxzZSBwb3MrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZnVuYyhwb3MpICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0XCJudGgtbGFzdC1jaGlsZFwiOiBmdW5jdGlvbihuZXh0LCBydWxlKXtcblx0XHRcdHZhciBmdW5jID0gZ2V0TkNoZWNrKHJ1bGUpO1xuXG5cdFx0XHRpZihmdW5jID09PSBmYWxzZUZ1bmMpIHJldHVybiBmdW5jO1xuXHRcdFx0aWYoZnVuYyA9PT0gdHJ1ZUZ1bmMpICByZXR1cm4gZ2V0Q2hpbGRGdW5jKG5leHQpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gbnRoTGFzdENoaWxkKGVsZW0pe1xuXHRcdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRcdGZvcih2YXIgcG9zID0gMCwgaSA9IHNpYmxpbmdzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRlbHNlIHBvcysrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmdW5jKHBvcykgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRcIm50aC1vZi10eXBlXCI6IGZ1bmN0aW9uKG5leHQsIHJ1bGUpe1xuXHRcdFx0dmFyIGZ1bmMgPSBnZXROQ2hlY2socnVsZSk7XG5cblx0XHRcdGlmKGZ1bmMgPT09IGZhbHNlRnVuYykgcmV0dXJuIGZ1bmM7XG5cdFx0XHRpZihmdW5jID09PSB0cnVlRnVuYykgIHJldHVybiBnZXRDaGlsZEZ1bmMobmV4dCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBudGhPZlR5cGUoZWxlbSl7XG5cdFx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdFx0Zm9yKHZhciBwb3MgPSAwLCBpID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRpZihhZGFwdGVyLmdldE5hbWUoc2libGluZ3NbaV0pID09PSBhZGFwdGVyLmdldE5hbWUoZWxlbSkpIHBvcysrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmdW5jKHBvcykgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRcIm50aC1sYXN0LW9mLXR5cGVcIjogZnVuY3Rpb24obmV4dCwgcnVsZSl7XG5cdFx0XHR2YXIgZnVuYyA9IGdldE5DaGVjayhydWxlKTtcblxuXHRcdFx0aWYoZnVuYyA9PT0gZmFsc2VGdW5jKSByZXR1cm4gZnVuYztcblx0XHRcdGlmKGZ1bmMgPT09IHRydWVGdW5jKSAgcmV0dXJuIGdldENoaWxkRnVuYyhuZXh0KTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIG50aExhc3RPZlR5cGUoZWxlbSl7XG5cdFx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdFx0Zm9yKHZhciBwb3MgPSAwLCBpID0gc2libGluZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xuXHRcdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSBicmVhaztcblx0XHRcdFx0XHRcdGlmKGFkYXB0ZXIuZ2V0TmFtZShzaWJsaW5nc1tpXSkgPT09IGFkYXB0ZXIuZ2V0TmFtZShlbGVtKSkgcG9zKys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmMocG9zKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0Ly9UT0RPIGRldGVybWluZSB0aGUgYWN0dWFsIHJvb3QgZWxlbWVudFxuXHRcdHJvb3Q6IGZ1bmN0aW9uKG5leHQpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gIWFkYXB0ZXIuZ2V0UGFyZW50KGVsZW0pICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRzY29wZTogZnVuY3Rpb24obmV4dCwgcnVsZSwgb3B0aW9ucywgY29udGV4dCl7XG5cdFx0XHRpZighY29udGV4dCB8fCBjb250ZXh0Lmxlbmd0aCA9PT0gMCl7XG5cdFx0XHRcdC8vZXF1aXZhbGVudCB0byA6cm9vdFxuXHRcdFx0XHRyZXR1cm4gZmlsdGVycy5yb290KG5leHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihjb250ZXh0Lmxlbmd0aCA9PT0gMSl7XG5cdFx0XHRcdC8vTk9URTogY2FuJ3QgYmUgdW5wYWNrZWQsIGFzIDpoYXMgdXNlcyB0aGlzIGZvciBzaWRlLWVmZmVjdHNcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0XHRcdHJldHVybiBlcXVhbHMoY29udGV4dFswXSwgZWxlbSkgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5pbmRleE9mKGVsZW0pID49IDAgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdC8valF1ZXJ5IGV4dGVuc2lvbnMgKG90aGVycyBmb2xsb3cgYXMgcHNldWRvcylcblx0XHRjaGVja2JveDogZ2V0QXR0cmliRnVuYyhcInR5cGVcIiwgXCJjaGVja2JveFwiKSxcblx0XHRmaWxlOiBnZXRBdHRyaWJGdW5jKFwidHlwZVwiLCBcImZpbGVcIiksXG5cdFx0cGFzc3dvcmQ6IGdldEF0dHJpYkZ1bmMoXCJ0eXBlXCIsIFwicGFzc3dvcmRcIiksXG5cdFx0cmFkaW86IGdldEF0dHJpYkZ1bmMoXCJ0eXBlXCIsIFwicmFkaW9cIiksXG5cdFx0cmVzZXQ6IGdldEF0dHJpYkZ1bmMoXCJ0eXBlXCIsIFwicmVzZXRcIiksXG5cdFx0aW1hZ2U6IGdldEF0dHJpYkZ1bmMoXCJ0eXBlXCIsIFwiaW1hZ2VcIiksXG5cdFx0c3VibWl0OiBnZXRBdHRyaWJGdW5jKFwidHlwZVwiLCBcInN1Ym1pdFwiKVxuXHR9O1xuXHRyZXR1cm4gZmlsdGVycztcbn1cblxuZnVuY3Rpb24gcHNldWRvc0ZhY3RvcnkoYWRhcHRlcil7XG5cdC8vaGVscGVyIG1ldGhvZHNcblx0ZnVuY3Rpb24gZ2V0Rmlyc3RFbGVtZW50KGVsZW1zKXtcblx0XHRmb3IodmFyIGkgPSAwOyBlbGVtcyAmJiBpIDwgZWxlbXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0aWYoYWRhcHRlci5pc1RhZyhlbGVtc1tpXSkpIHJldHVybiBlbGVtc1tpXTtcblx0XHR9XG5cdH1cblxuXHQvL3doaWxlIGZpbHRlcnMgYXJlIHByZWNvbXBpbGVkLCBwc2V1ZG9zIGdldCBjYWxsZWQgd2hlbiB0aGV5IGFyZSBuZWVkZWRcblx0dmFyIHBzZXVkb3MgPSB7XG5cdFx0ZW1wdHk6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuICFhZGFwdGVyLmdldENoaWxkcmVuKGVsZW0pLnNvbWUoZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRcdHJldHVybiBhZGFwdGVyLmlzVGFnKGVsZW0pIHx8IGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCI7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0XCJmaXJzdC1jaGlsZFwiOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiBnZXRGaXJzdEVsZW1lbnQoYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKSkgPT09IGVsZW07XG5cdFx0fSxcblx0XHRcImxhc3QtY2hpbGRcIjogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRmb3IodmFyIGkgPSBzaWJsaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG5cdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSByZXR1cm4gdHJ1ZTtcblx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpIGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRcImZpcnN0LW9mLXR5cGVcIjogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc2libGluZ3MubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdGlmKGFkYXB0ZXIuZ2V0TmFtZShzaWJsaW5nc1tpXSkgPT09IGFkYXB0ZXIuZ2V0TmFtZShlbGVtKSkgYnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0XCJsYXN0LW9mLXR5cGVcIjogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRmb3IodmFyIGkgPSBzaWJsaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG5cdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgcmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5nZXROYW1lKHNpYmxpbmdzW2ldKSA9PT0gYWRhcHRlci5nZXROYW1lKGVsZW0pKSBicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRcIm9ubHktb2YtdHlwZVwiOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdGZvcih2YXIgaSA9IDAsIGogPSBzaWJsaW5ncy5sZW5ndGg7IGkgPCBqOyBpKyspe1xuXHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIGNvbnRpbnVlO1xuXHRcdFx0XHRcdGlmKGFkYXB0ZXIuZ2V0TmFtZShzaWJsaW5nc1tpXSkgPT09IGFkYXB0ZXIuZ2V0TmFtZShlbGVtKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cdFx0XCJvbmx5LWNoaWxkXCI6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkgJiYgc2libGluZ3NbaV0gIT09IGVsZW0pIHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8vOm1hdGNoZXMoYSwgYXJlYSwgbGluaylbaHJlZl1cblx0XHRsaW5rOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiBhZGFwdGVyLmhhc0F0dHJpYihlbGVtLCBcImhyZWZcIik7XG5cdFx0fSxcblx0XHR2aXNpdGVkOiBmYWxzZUZ1bmMsIC8vc2VlbXMgdG8gYmUgYSB2YWxpZCBpbXBsZW1lbnRhdGlvblxuXHRcdC8vVE9ETzogOmFueS1saW5rIG9uY2UgdGhlIG5hbWUgaXMgZmluYWxpemVkIChhcyBhbiBhbGlhcyBvZiA6bGluaylcblxuXHRcdC8vZm9ybXNcblx0XHQvL3RvIGNvbnNpZGVyOiA6dGFyZ2V0XG5cblx0XHQvLzptYXRjaGVzKFtzZWxlY3RlZF0sIHNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KD4gb3B0aW9uW3NlbGVjdGVkXSkgPiBvcHRpb246Zmlyc3Qtb2YtdHlwZSlcblx0XHRzZWxlY3RlZDogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRpZihhZGFwdGVyLmhhc0F0dHJpYihlbGVtLCBcInNlbGVjdGVkXCIpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGVsc2UgaWYoYWRhcHRlci5nZXROYW1lKGVsZW0pICE9PSBcIm9wdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdC8vdGhlIGZpcnN0IDxvcHRpb24+IGluIGEgPHNlbGVjdD4gaXMgYWxzbyBzZWxlY3RlZFxuXHRcdFx0dmFyIHBhcmVudCA9IGFkYXB0ZXIuZ2V0UGFyZW50KGVsZW0pO1xuXG5cdFx0XHRpZihcblx0XHRcdFx0IXBhcmVudCB8fFxuXHRcdFx0XHRhZGFwdGVyLmdldE5hbWUocGFyZW50KSAhPT0gXCJzZWxlY3RcIiB8fFxuXHRcdFx0XHRhZGFwdGVyLmhhc0F0dHJpYihwYXJlbnQsIFwibXVsdGlwbGVcIilcblx0XHRcdCkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldENoaWxkcmVuKHBhcmVudCksXG5cdFx0XHRcdHNhd0VsZW0gID0gZmFsc2U7XG5cblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSl7XG5cdFx0XHRcdFx0XHRzYXdFbGVtID0gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2UgaWYoIXNhd0VsZW0pe1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZihhZGFwdGVyLmhhc0F0dHJpYihzaWJsaW5nc1tpXSwgXCJzZWxlY3RlZFwiKSl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzYXdFbGVtO1xuXHRcdH0sXG5cdFx0Ly9odHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNkaXNhYmxlZC1lbGVtZW50c1xuXHRcdC8vOm1hdGNoZXMoXG5cdFx0Ly8gIDptYXRjaGVzKGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIG1lbnVpdGVtLCBvcHRncm91cCwgb3B0aW9uKVtkaXNhYmxlZF0sXG5cdFx0Ly8gIG9wdGdyb3VwW2Rpc2FibGVkXSA+IG9wdGlvbiksXG5cdFx0Ly8gZmllbGRzZXRbZGlzYWJsZWRdICogLy9UT0RPIG5vdCBjaGlsZCBvZiBmaXJzdCA8bGVnZW5kPlxuXHRcdC8vKVxuXHRcdGRpc2FibGVkOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiBhZGFwdGVyLmhhc0F0dHJpYihlbGVtLCBcImRpc2FibGVkXCIpO1xuXHRcdH0sXG5cdFx0ZW5hYmxlZDogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gIWFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwiZGlzYWJsZWRcIik7XG5cdFx0fSxcblx0XHQvLzptYXRjaGVzKDptYXRjaGVzKDpyYWRpbywgOmNoZWNrYm94KVtjaGVja2VkXSwgOnNlbGVjdGVkKSAoVE9ETyBtZW51aXRlbSlcblx0XHRjaGVja2VkOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiBhZGFwdGVyLmhhc0F0dHJpYihlbGVtLCBcImNoZWNrZWRcIikgfHwgcHNldWRvcy5zZWxlY3RlZChlbGVtKTtcblx0XHR9LFxuXHRcdC8vOm1hdGNoZXMoaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEpW3JlcXVpcmVkXVxuXHRcdHJlcXVpcmVkOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiBhZGFwdGVyLmhhc0F0dHJpYihlbGVtLCBcInJlcXVpcmVkXCIpO1xuXHRcdH0sXG5cdFx0Ly86bWF0Y2hlcyhpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSk6bm90KFtyZXF1aXJlZF0pXG5cdFx0b3B0aW9uYWw6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuICFhZGFwdGVyLmhhc0F0dHJpYihlbGVtLCBcInJlcXVpcmVkXCIpO1xuXHRcdH0sXG5cblx0XHQvL2pRdWVyeSBleHRlbnNpb25zXG5cblx0XHQvLzpub3QoOmVtcHR5KVxuXHRcdHBhcmVudDogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gIXBzZXVkb3MuZW1wdHkoZWxlbSk7XG5cdFx0fSxcblx0XHQvLzptYXRjaGVzKGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpXG5cdFx0aGVhZGVyOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBuYW1lID0gYWRhcHRlci5nZXROYW1lKGVsZW0pO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaDFcIiB8fFxuXHRcdFx0XHRcdG5hbWUgPT09IFwiaDJcIiB8fFxuXHRcdFx0XHRcdG5hbWUgPT09IFwiaDNcIiB8fFxuXHRcdFx0XHRcdG5hbWUgPT09IFwiaDRcIiB8fFxuXHRcdFx0XHRcdG5hbWUgPT09IFwiaDVcIiB8fFxuXHRcdFx0XHRcdG5hbWUgPT09IFwiaDZcIjtcblx0XHR9LFxuXG5cdFx0Ly86bWF0Y2hlcyhidXR0b24sIGlucHV0W3R5cGU9YnV0dG9uXSlcblx0XHRidXR0b246IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIG5hbWUgPSBhZGFwdGVyLmdldE5hbWUoZWxlbSk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJidXR0b25cIiB8fFxuXHRcdFx0XHRcdG5hbWUgPT09IFwiaW5wdXRcIiAmJlxuXHRcdFx0XHRcdGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgXCJ0eXBlXCIpID09PSBcImJ1dHRvblwiO1xuXHRcdH0sXG5cdFx0Ly86bWF0Y2hlcyhpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgYnV0dG9uKVxuXHRcdGlucHV0OiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBuYW1lID0gYWRhcHRlci5nZXROYW1lKGVsZW0pO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiB8fFxuXHRcdFx0XHRcdG5hbWUgPT09IFwidGV4dGFyZWFcIiB8fFxuXHRcdFx0XHRcdG5hbWUgPT09IFwic2VsZWN0XCIgfHxcblx0XHRcdFx0XHRuYW1lID09PSBcImJ1dHRvblwiO1xuXHRcdH0sXG5cdFx0Ly9pbnB1dDptYXRjaGVzKDpub3QoW3R5cGUhPScnXSksIFt0eXBlPSd0ZXh0JyBpXSlcblx0XHR0ZXh0OiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGFkYXB0ZXIuZ2V0TmFtZShlbGVtKSA9PT0gXCJpbnB1dFwiICYmIChcblx0XHRcdFx0IShhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBcInR5cGVcIikpIHx8XG5cdFx0XHRcdGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCJcblx0XHRcdCk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBwc2V1ZG9zO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlBcmdzKGZ1bmMsIG5hbWUsIHN1YnNlbGVjdCl7XG5cdGlmKHN1YnNlbGVjdCA9PT0gbnVsbCl7XG5cdFx0aWYoZnVuYy5sZW5ndGggPiAxICYmIG5hbWUgIT09IFwic2NvcGVcIil7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwc2V1ZG8tc2VsZWN0b3IgOlwiICsgbmFtZSArIFwiIHJlcXVpcmVzIGFuIGFyZ3VtZW50XCIpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZihmdW5jLmxlbmd0aCA9PT0gMSl7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwc2V1ZG8tc2VsZWN0b3IgOlwiICsgbmFtZSArIFwiIGRvZXNuJ3QgaGF2ZSBhbnkgYXJndW1lbnRzXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vL0ZJWE1FIHRoaXMgZmVlbHMgaGFja3lcbnZhciByZV9DU1MzID0gL14oPzooPzpudGh8bGFzdHxmaXJzdHxvbmx5KS0oPzpjaGlsZHxvZi10eXBlKXxyb290fGVtcHR5fCg/OmVufGRpcylhYmxlZHxjaGVja2VkfG5vdCkkLztcblxuZnVuY3Rpb24gZmFjdG9yeShhZGFwdGVyKXtcblx0dmFyIHBzZXVkb3MgPSBwc2V1ZG9zRmFjdG9yeShhZGFwdGVyKTtcblx0dmFyIGZpbHRlcnMgPSBmaWx0ZXJzRmFjdG9yeShhZGFwdGVyKTtcblxuXHRyZXR1cm4ge1xuXHRcdGNvbXBpbGU6IGZ1bmN0aW9uKG5leHQsIGRhdGEsIG9wdGlvbnMsIGNvbnRleHQpe1xuXHRcdFx0dmFyIG5hbWUgPSBkYXRhLm5hbWUsXG5cdFx0XHRcdHN1YnNlbGVjdCA9IGRhdGEuZGF0YTtcblxuXHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLnN0cmljdCAmJiAhcmVfQ1NTMy50ZXN0KG5hbWUpKXtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiOlwiICsgbmFtZSArIFwiIGlzbid0IHBhcnQgb2YgQ1NTM1wiKTtcblx0XHRcdH1cblxuXHRcdFx0aWYodHlwZW9mIGZpbHRlcnNbbmFtZV0gPT09IFwiZnVuY3Rpb25cIil7XG5cdFx0XHRcdHZlcmlmeUFyZ3MoZmlsdGVyc1tuYW1lXSwgbmFtZSwgIHN1YnNlbGVjdCk7XG5cdFx0XHRcdHJldHVybiBmaWx0ZXJzW25hbWVdKG5leHQsIHN1YnNlbGVjdCwgb3B0aW9ucywgY29udGV4dCk7XG5cdFx0XHR9IGVsc2UgaWYodHlwZW9mIHBzZXVkb3NbbmFtZV0gPT09IFwiZnVuY3Rpb25cIil7XG5cdFx0XHRcdHZhciBmdW5jID0gcHNldWRvc1tuYW1lXTtcblx0XHRcdFx0dmVyaWZ5QXJncyhmdW5jLCBuYW1lLCBzdWJzZWxlY3QpO1xuXG5cdFx0XHRcdGlmKG5leHQgPT09IHRydWVGdW5jKSByZXR1cm4gZnVuYztcblxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gcHNldWRvQXJncyhlbGVtKXtcblx0XHRcdFx0XHRyZXR1cm4gZnVuYyhlbGVtLCBzdWJzZWxlY3QpICYmIG5leHQoZWxlbSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bm1hdGNoZWQgcHNldWRvLWNsYXNzIDpcIiArIG5hbWUpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZmlsdGVyczogZmlsdGVycyxcblx0XHRwc2V1ZG9zOiBwc2V1ZG9zXG5cdH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeTtcblxuXG4vKioqLyB9KSxcbi8qIDg3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBwYXJzZSA9IF9fd2VicGFja19yZXF1aXJlX18oODgpLFxuICAgIGNvbXBpbGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBudGhDaGVjayhmb3JtdWxhKXtcblx0cmV0dXJuIGNvbXBpbGUocGFyc2UoZm9ybXVsYSkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbm1vZHVsZS5leHBvcnRzLmNvbXBpbGUgPSBjb21waWxlO1xuXG4vKioqLyB9KSxcbi8qIDg4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2U7XG5cbi8vZm9sbG93aW5nIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyNudGgtY2hpbGQtcHNldWRvXG5cbi8vWyBbJy0nfCcrJ10/IElOVEVHRVI/IHtOfSBbIFMqIFsnLSd8JysnXSBTKiBJTlRFR0VSIF0/XG52YXIgcmVfbnRoRWxlbWVudCA9IC9eKFsrXFwtXT9cXGQqbik/XFxzKig/OihbK1xcLV0/KVxccyooXFxkKykpPyQvO1xuXG4vKlxuXHRwYXJzZXMgYSBudGgtY2hlY2sgZm9ybXVsYSwgcmV0dXJucyBhbiBhcnJheSBvZiB0d28gbnVtYmVyc1xuKi9cbmZ1bmN0aW9uIHBhcnNlKGZvcm11bGEpe1xuXHRmb3JtdWxhID0gZm9ybXVsYS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuXHRpZihmb3JtdWxhID09PSBcImV2ZW5cIil7XG5cdFx0cmV0dXJuIFsyLCAwXTtcblx0fSBlbHNlIGlmKGZvcm11bGEgPT09IFwib2RkXCIpe1xuXHRcdHJldHVybiBbMiwgMV07XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHBhcnNlZCA9IGZvcm11bGEubWF0Y2gocmVfbnRoRWxlbWVudCk7XG5cblx0XHRpZighcGFyc2VkKXtcblx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcIm4tdGggcnVsZSBjb3VsZG4ndCBiZSBwYXJzZWQgKCdcIiArIGZvcm11bGEgKyBcIicpXCIpO1xuXHRcdH1cblxuXHRcdHZhciBhO1xuXG5cdFx0aWYocGFyc2VkWzFdKXtcblx0XHRcdGEgPSBwYXJzZUludChwYXJzZWRbMV0sIDEwKTtcblx0XHRcdGlmKGlzTmFOKGEpKXtcblx0XHRcdFx0aWYocGFyc2VkWzFdLmNoYXJBdCgwKSA9PT0gXCItXCIpIGEgPSAtMTtcblx0XHRcdFx0ZWxzZSBhID0gMTtcblx0XHRcdH1cblx0XHR9IGVsc2UgYSA9IDA7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0YSxcblx0XHRcdHBhcnNlZFszXSA/IHBhcnNlSW50KChwYXJzZWRbMl0gfHwgXCJcIikgKyBwYXJzZWRbM10sIDEwKSA6IDBcblx0XHRdO1xuXHR9XG59XG5cblxuLyoqKi8gfSksXG4vKiA4OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBpbGU7XG5cbnZhciBCYXNlRnVuY3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLFxuICAgIHRydWVGdW5jICA9IEJhc2VGdW5jcy50cnVlRnVuYyxcbiAgICBmYWxzZUZ1bmMgPSBCYXNlRnVuY3MuZmFsc2VGdW5jO1xuXG4vKlxuXHRyZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYW4gZWxlbWVudHMgaW5kZXggbWF0Y2hlcyB0aGUgZ2l2ZW4gcnVsZVxuXHRoaWdobHkgb3B0aW1pemVkIHRvIHJldHVybiB0aGUgZmFzdGVzdCBzb2x1dGlvblxuKi9cbmZ1bmN0aW9uIGNvbXBpbGUocGFyc2VkKXtcblx0dmFyIGEgPSBwYXJzZWRbMF0sXG5cdCAgICBiID0gcGFyc2VkWzFdIC0gMTtcblxuXHQvL3doZW4gYiA8PSAwLCBhKm4gd29uJ3QgYmUgcG9zc2libGUgZm9yIGFueSBtYXRjaGVzIHdoZW4gYSA8IDBcblx0Ly9iZXNpZGVzLCB0aGUgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgbm8gZWxlbWVudCBpcyBtYXRjaGVkIHdoZW4gYSBhbmQgYiBhcmUgMFxuXHRpZihiIDwgMCAmJiBhIDw9IDApIHJldHVybiBmYWxzZUZ1bmM7XG5cblx0Ly93aGVuIGEgaXMgaW4gdGhlIHJhbmdlIC0xLi4xLCBpdCBtYXRjaGVzIGFueSBlbGVtZW50IChzbyBvbmx5IGIgaXMgY2hlY2tlZClcblx0aWYoYSA9PT0tMSkgcmV0dXJuIGZ1bmN0aW9uKHBvcyl7IHJldHVybiBwb3MgPD0gYjsgfTtcblx0aWYoYSA9PT0gMCkgcmV0dXJuIGZ1bmN0aW9uKHBvcyl7IHJldHVybiBwb3MgPT09IGI7IH07XG5cdC8vd2hlbiBiIDw9IDAgYW5kIGEgPT09IDEsIHRoZXkgbWF0Y2ggYW55IGVsZW1lbnRcblx0aWYoYSA9PT0gMSkgcmV0dXJuIGIgPCAwID8gdHJ1ZUZ1bmMgOiBmdW5jdGlvbihwb3MpeyByZXR1cm4gcG9zID49IGI7IH07XG5cblx0Ly93aGVuIGEgPiAwLCBtb2R1bG8gY2FuIGJlIHVzZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBtYXRjaFxuXHR2YXIgYk1vZCA9IGIgJSBhO1xuXHRpZihiTW9kIDwgMCkgYk1vZCArPSBhO1xuXG5cdGlmKGEgPiAxKXtcblx0XHRyZXR1cm4gZnVuY3Rpb24ocG9zKXtcblx0XHRcdHJldHVybiBwb3MgPj0gYiAmJiBwb3MgJSBhID09PSBiTW9kO1xuXHRcdH07XG5cdH1cblxuXHRhICo9IC0xOyAvL21ha2UgYGFgIHBvc2l0aXZlXG5cblx0cmV0dXJuIGZ1bmN0aW9uKHBvcyl7XG5cdFx0cmV0dXJuIHBvcyA8PSBiICYmIHBvcyAlIGEgPT09IGJNb2Q7XG5cdH07XG59XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1zZWxlY3QtdW1kL2Rpc3QvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2Nzcy1zZWxlY3QtdW1kL2Rpc3QvaW5kZXguanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiLyohXG5cbiBkaWZmIHYzLjQuMFxuXG5Tb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudCAoQlNEIExpY2Vuc2UpXG5cbkNvcHlyaWdodCAoYykgMjAwOS0yMDE1LCBLZXZpbiBEZWNrZXIgPGtwZGVja2VyQGdtYWlsLmNvbT5cblxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4qIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmVcbiAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZVxuICBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGVcbiAgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyXG4gIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiogTmVpdGhlciB0aGUgbmFtZSBvZiBLZXZpbiBEZWNrZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0c1xuICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yXG4gIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SXG5JTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkRcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SXG5DT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMXG5EQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG5EQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUlxuSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVFxuT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuQGxpY2Vuc2VcbiovXG4oZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJKc0RpZmZcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiSnNEaWZmXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcblxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cblxuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuY2Fub25pY2FsaXplID0gZXhwb3J0cy5jb252ZXJ0Q2hhbmdlc1RvWE1MID0gZXhwb3J0cy5jb252ZXJ0Q2hhbmdlc1RvRE1QID0gZXhwb3J0cy5tZXJnZSA9IGV4cG9ydHMucGFyc2VQYXRjaCA9IGV4cG9ydHMuYXBwbHlQYXRjaGVzID0gZXhwb3J0cy5hcHBseVBhdGNoID0gZXhwb3J0cy5jcmVhdGVQYXRjaCA9IGV4cG9ydHMuY3JlYXRlVHdvRmlsZXNQYXRjaCA9IGV4cG9ydHMuc3RydWN0dXJlZFBhdGNoID0gZXhwb3J0cy5kaWZmQXJyYXlzID0gZXhwb3J0cy5kaWZmSnNvbiA9IGV4cG9ydHMuZGlmZkNzcyA9IGV4cG9ydHMuZGlmZlNlbnRlbmNlcyA9IGV4cG9ydHMuZGlmZlRyaW1tZWRMaW5lcyA9IGV4cG9ydHMuZGlmZkxpbmVzID0gZXhwb3J0cy5kaWZmV29yZHNXaXRoU3BhY2UgPSBleHBvcnRzLmRpZmZXb3JkcyA9IGV4cG9ydHMuZGlmZkNoYXJzID0gZXhwb3J0cy5EaWZmID0gdW5kZWZpbmVkO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfYmFzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9iYXNlKTtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2NoYXJhY3RlciA9IF9fd2VicGFja19yZXF1aXJlX18oMikgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fd29yZCA9IF9fd2VicGFja19yZXF1aXJlX18oMykgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fbGluZSA9IF9fd2VicGFja19yZXF1aXJlX18oNSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fc2VudGVuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2NzcyA9IF9fd2VicGFja19yZXF1aXJlX18oNykgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fanNvbiA9IF9fd2VicGFja19yZXF1aXJlX18oOCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2FwcGx5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fcGFyc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19tZXJnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2NyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2RtcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3htbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0LyogU2VlIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMgb2YgdXNlICovXG5cblx0Lypcblx0ICogVGV4dCBkaWZmIGltcGxlbWVudGF0aW9uLlxuXHQgKlxuXHQgKiBUaGlzIGxpYnJhcnkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBBUElTOlxuXHQgKiBKc0RpZmYuZGlmZkNoYXJzOiBDaGFyYWN0ZXIgYnkgY2hhcmFjdGVyIGRpZmZcblx0ICogSnNEaWZmLmRpZmZXb3JkczogV29yZCAoYXMgZGVmaW5lZCBieSBcXGIgcmVnZXgpIGRpZmYgd2hpY2ggaWdub3JlcyB3aGl0ZXNwYWNlXG5cdCAqIEpzRGlmZi5kaWZmTGluZXM6IExpbmUgYmFzZWQgZGlmZlxuXHQgKlxuXHQgKiBKc0RpZmYuZGlmZkNzczogRGlmZiB0YXJnZXRlZCBhdCBDU1MgY29udGVudFxuXHQgKlxuXHQgKiBUaGVzZSBtZXRob2RzIGFyZSBiYXNlZCBvbiB0aGUgaW1wbGVtZW50YXRpb24gcHJvcG9zZWQgaW5cblx0ICogXCJBbiBPKE5EKSBEaWZmZXJlbmNlIEFsZ29yaXRobSBhbmQgaXRzIFZhcmlhdGlvbnNcIiAoTXllcnMsIDE5ODYpLlxuXHQgKiBodHRwOi8vY2l0ZXNlZXJ4LmlzdC5wc3UuZWR1L3ZpZXdkb2Mvc3VtbWFyeT9kb2k9MTAuMS4xLjQuNjkyN1xuXHQgKi9cblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9EaWZmID0gX2Jhc2UyWydkZWZhdWx0J107XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZDaGFycyA9IF9jaGFyYWN0ZXIuZGlmZkNoYXJzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmV29yZHMgPSBfd29yZC5kaWZmV29yZHM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZXb3Jkc1dpdGhTcGFjZSA9IF93b3JkLmRpZmZXb3Jkc1dpdGhTcGFjZTtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkxpbmVzID0gX2xpbmUuZGlmZkxpbmVzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmVHJpbW1lZExpbmVzID0gX2xpbmUuZGlmZlRyaW1tZWRMaW5lcztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZlNlbnRlbmNlcyA9IF9zZW50ZW5jZS5kaWZmU2VudGVuY2VzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmQ3NzID0gX2Nzcy5kaWZmQ3NzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmSnNvbiA9IF9qc29uLmRpZmZKc29uO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmQXJyYXlzID0gX2FycmF5LmRpZmZBcnJheXM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3N0cnVjdHVyZWRQYXRjaCA9IF9jcmVhdGUuc3RydWN0dXJlZFBhdGNoO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jcmVhdGVUd29GaWxlc1BhdGNoID0gX2NyZWF0ZS5jcmVhdGVUd29GaWxlc1BhdGNoO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jcmVhdGVQYXRjaCA9IF9jcmVhdGUuY3JlYXRlUGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2FwcGx5UGF0Y2ggPSBfYXBwbHkuYXBwbHlQYXRjaDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovYXBwbHlQYXRjaGVzID0gX2FwcGx5LmFwcGx5UGF0Y2hlcztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovcGFyc2VQYXRjaCA9IF9wYXJzZS5wYXJzZVBhdGNoO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9tZXJnZSA9IF9tZXJnZS5tZXJnZTtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY29udmVydENoYW5nZXNUb0RNUCA9IF9kbXAuY29udmVydENoYW5nZXNUb0RNUDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY29udmVydENoYW5nZXNUb1hNTCA9IF94bWwuY29udmVydENoYW5nZXNUb1hNTDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY2Fub25pY2FsaXplID0gX2pzb24uY2Fub25pY2FsaXplO1xuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OXBibVJsZUM1cWN5SmRMQ0p1WVcxbGN5STZXeUpFYVdabUlpd2laR2xtWmtOb1lYSnpJaXdpWkdsbVpsZHZjbVJ6SWl3aVpHbG1abGR2Y21SelYybDBhRk53WVdObElpd2laR2xtWmt4cGJtVnpJaXdpWkdsbVpsUnlhVzF0WldSTWFXNWxjeUlzSW1ScFptWlRaVzUwWlc1alpYTWlMQ0prYVdabVEzTnpJaXdpWkdsbVprcHpiMjRpTENKa2FXWm1RWEp5WVhseklpd2ljM1J5ZFdOMGRYSmxaRkJoZEdOb0lpd2lZM0psWVhSbFZIZHZSbWxzWlhOUVlYUmphQ0lzSW1OeVpXRjBaVkJoZEdOb0lpd2lZWEJ3YkhsUVlYUmphQ0lzSW1Gd2NHeDVVR0YwWTJobGN5SXNJbkJoY25ObFVHRjBZMmdpTENKdFpYSm5aU0lzSW1OdmJuWmxjblJEYUdGdVoyVnpWRzlFVFZBaUxDSmpiMjUyWlhKMFEyaGhibWRsYzFSdldFMU1JaXdpWTJGdWIyNXBZMkZzYVhwbElsMHNJbTFoY0hCcGJtZHpJam9pT3pzN096dDFRa0ZuUWtFN096czdkVUpCUTBFN08wRkJRMEU3TzBGQlEwRTdPMEZCUTBFN08wRkJSVUU3TzBGQlEwRTdPMEZCUlVFN08wRkJSVUU3TzBGQlEwRTdPMEZCUTBFN08wRkJRMEU3TzBGQlJVRTdPMEZCUTBFN096czdRVUZxUTBFN08wRkJSVUU3T3pzN096czdPenM3T3pzN08yZERRV3REUlVFc1NUdDVSRUZGUVVNc1V6dDVSRUZEUVVNc1V6dDVSRUZEUVVNc2EwSTdlVVJCUTBGRExGTTdlVVJCUTBGRExHZENPM2xFUVVOQlF5eGhPM2xFUVVWQlF5eFBPM2xFUVVOQlF5eFJPM2xFUVVWQlF5eFZPM2xFUVVWQlF5eGxPM2xFUVVOQlF5eHRRanQ1UkVGRFFVTXNWenQ1UkVGRFFVTXNWVHQ1UkVGRFFVTXNXVHQ1UkVGRFFVTXNWVHQ1UkVGRFFVTXNTenQ1UkVGRFFVTXNiVUk3ZVVSQlEwRkRMRzFDTzNsRVFVTkJReXhaSWl3aVptbHNaU0k2SW1sdVpHVjRMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b2dVMlZsSUV4SlEwVk9VMFVnWm1sc1pTQm1iM0lnZEdWeWJYTWdiMllnZFhObElDb3ZYRzVjYmk4cVhHNGdLaUJVWlhoMElHUnBabVlnYVcxd2JHVnRaVzUwWVhScGIyNHVYRzRnS2x4dUlDb2dWR2hwY3lCc2FXSnlZWEo1SUhOMWNIQnZjblJ6SUhSb1pTQm1iMnhzYjNkcGJtY2dRVkJKVXpwY2JpQXFJRXB6UkdsbVppNWthV1ptUTJoaGNuTTZJRU5vWVhKaFkzUmxjaUJpZVNCamFHRnlZV04wWlhJZ1pHbG1abHh1SUNvZ1NuTkVhV1ptTG1ScFptWlhiM0prY3pvZ1YyOXlaQ0FvWVhNZ1pHVm1hVzVsWkNCaWVTQmNYR0lnY21WblpYZ3BJR1JwWm1ZZ2QyaHBZMmdnYVdkdWIzSmxjeUIzYUdsMFpYTndZV05sWEc0Z0tpQktjMFJwWm1ZdVpHbG1aa3hwYm1Wek9pQk1hVzVsSUdKaGMyVmtJR1JwWm1aY2JpQXFYRzRnS2lCS2MwUnBabVl1WkdsbVprTnpjem9nUkdsbVppQjBZWEpuWlhSbFpDQmhkQ0JEVTFNZ1kyOXVkR1Z1ZEZ4dUlDcGNiaUFxSUZSb1pYTmxJRzFsZEdodlpITWdZWEpsSUdKaGMyVmtJRzl1SUhSb1pTQnBiWEJzWlcxbGJuUmhkR2x2YmlCd2NtOXdiM05sWkNCcGJseHVJQ29nWENKQmJpQlBLRTVFS1NCRWFXWm1aWEpsYm1ObElFRnNaMjl5YVhSb2JTQmhibVFnYVhSeklGWmhjbWxoZEdsdmJuTmNJaUFvVFhsbGNuTXNJREU1T0RZcExseHVJQ29nYUhSMGNEb3ZMMk5wZEdWelpXVnllQzVwYzNRdWNITjFMbVZrZFM5MmFXVjNaRzlqTDNOMWJXMWhjbmsvWkc5cFBURXdMakV1TVM0MExqWTVNamRjYmlBcUwxeHVhVzF3YjNKMElFUnBabVlnWm5KdmJTQW5MaTlrYVdabUwySmhjMlVuTzF4dWFXMXdiM0owSUh0a2FXWm1RMmhoY25OOUlHWnliMjBnSnk0dlpHbG1aaTlqYUdGeVlXTjBaWEluTzF4dWFXMXdiM0owSUh0a2FXWm1WMjl5WkhNc0lHUnBabVpYYjNKa2MxZHBkR2hUY0dGalpYMGdabkp2YlNBbkxpOWthV1ptTDNkdmNtUW5PMXh1YVcxd2IzSjBJSHRrYVdabVRHbHVaWE1zSUdScFptWlVjbWx0YldWa1RHbHVaWE45SUdaeWIyMGdKeTR2WkdsbVppOXNhVzVsSnp0Y2JtbHRjRzl5ZENCN1pHbG1abE5sYm5SbGJtTmxjMzBnWm5KdmJTQW5MaTlrYVdabUwzTmxiblJsYm1ObEp6dGNibHh1YVcxd2IzSjBJSHRrYVdabVEzTnpmU0JtY205dElDY3VMMlJwWm1ZdlkzTnpKenRjYm1sdGNHOXlkQ0I3WkdsbVprcHpiMjRzSUdOaGJtOXVhV05oYkdsNlpYMGdabkp2YlNBbkxpOWthV1ptTDJwemIyNG5PMXh1WEc1cGJYQnZjblFnZTJScFptWkJjbkpoZVhOOUlHWnliMjBnSnk0dlpHbG1aaTloY25KaGVTYzdYRzVjYm1sdGNHOXlkQ0I3WVhCd2JIbFFZWFJqYUN3Z1lYQndiSGxRWVhSamFHVnpmU0JtY205dElDY3VMM0JoZEdOb0wyRndjR3g1Snp0Y2JtbHRjRzl5ZENCN2NHRnljMlZRWVhSamFIMGdabkp2YlNBbkxpOXdZWFJqYUM5d1lYSnpaU2M3WEc1cGJYQnZjblFnZTIxbGNtZGxmU0JtY205dElDY3VMM0JoZEdOb0wyMWxjbWRsSnp0Y2JtbHRjRzl5ZENCN2MzUnlkV04wZFhKbFpGQmhkR05vTENCamNtVmhkR1ZVZDI5R2FXeGxjMUJoZEdOb0xDQmpjbVZoZEdWUVlYUmphSDBnWm5KdmJTQW5MaTl3WVhSamFDOWpjbVZoZEdVbk8xeHVYRzVwYlhCdmNuUWdlMk52Ym5abGNuUkRhR0Z1WjJWelZHOUVUVkI5SUdaeWIyMGdKeTR2WTI5dWRtVnlkQzlrYlhBbk8xeHVhVzF3YjNKMElIdGpiMjUyWlhKMFEyaGhibWRsYzFSdldFMU1mU0JtY205dElDY3VMMk52Ym5abGNuUXZlRzFzSnp0Y2JseHVaWGh3YjNKMElIdGNiaUFnUkdsbVppeGNibHh1SUNCa2FXWm1RMmhoY25Nc1hHNGdJR1JwWm1aWGIzSmtjeXhjYmlBZ1pHbG1abGR2Y21SelYybDBhRk53WVdObExGeHVJQ0JrYVdabVRHbHVaWE1zWEc0Z0lHUnBabVpVY21sdGJXVmtUR2x1WlhNc1hHNGdJR1JwWm1aVFpXNTBaVzVqWlhNc1hHNWNiaUFnWkdsbVprTnpjeXhjYmlBZ1pHbG1aa3B6YjI0c1hHNWNiaUFnWkdsbVprRnljbUY1Y3l4Y2JseHVJQ0J6ZEhKMVkzUjFjbVZrVUdGMFkyZ3NYRzRnSUdOeVpXRjBaVlIzYjBacGJHVnpVR0YwWTJnc1hHNGdJR055WldGMFpWQmhkR05vTEZ4dUlDQmhjSEJzZVZCaGRHTm9MRnh1SUNCaGNIQnNlVkJoZEdOb1pYTXNYRzRnSUhCaGNuTmxVR0YwWTJnc1hHNGdJRzFsY21kbExGeHVJQ0JqYjI1MlpYSjBRMmhoYm1kbGMxUnZSRTFRTEZ4dUlDQmpiMjUyWlhKMFEyaGhibWRsYzFSdldFMU1MRnh1SUNCallXNXZibWxqWVd4cGVtVmNibjA3WEc0aVhYMD1cblxuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovRGlmZjtcblx0ZnVuY3Rpb24gRGlmZigpIHt9XG5cblx0RGlmZi5wcm90b3R5cGUgPSB7XG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmY6IGZ1bmN0aW9uIGRpZmYob2xkU3RyaW5nLCBuZXdTdHJpbmcpIHtcblx0ICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9vcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcblxuXHQgICAgdmFyIGNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG5cdCAgICAgIG9wdGlvbnMgPSB7fTtcblx0ICAgIH1cblx0ICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cblx0ICAgIHZhciBzZWxmID0gdGhpcztcblxuXHQgICAgZnVuY3Rpb24gZG9uZSh2YWx1ZSkge1xuXHQgICAgICBpZiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgdmFsdWUpO1xuXHQgICAgICAgIH0sIDApO1xuXHQgICAgICAgIHJldHVybiB0cnVlO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHJldHVybiB2YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICAvLyBBbGxvdyBzdWJjbGFzc2VzIHRvIG1hc3NhZ2UgdGhlIGlucHV0IHByaW9yIHRvIHJ1bm5pbmdcblx0ICAgIG9sZFN0cmluZyA9IHRoaXMuY2FzdElucHV0KG9sZFN0cmluZyk7XG5cdCAgICBuZXdTdHJpbmcgPSB0aGlzLmNhc3RJbnB1dChuZXdTdHJpbmcpO1xuXG5cdCAgICBvbGRTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUob2xkU3RyaW5nKSk7XG5cdCAgICBuZXdTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUobmV3U3RyaW5nKSk7XG5cblx0ICAgIHZhciBuZXdMZW4gPSBuZXdTdHJpbmcubGVuZ3RoLFxuXHQgICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGg7XG5cdCAgICB2YXIgZWRpdExlbmd0aCA9IDE7XG5cdCAgICB2YXIgbWF4RWRpdExlbmd0aCA9IG5ld0xlbiArIG9sZExlbjtcblx0ICAgIHZhciBiZXN0UGF0aCA9IFt7IG5ld1BvczogLTEsIGNvbXBvbmVudHM6IFtdIH1dO1xuXG5cdCAgICAvLyBTZWVkIGVkaXRMZW5ndGggPSAwLCBpLmUuIHRoZSBjb250ZW50IHN0YXJ0cyB3aXRoIHRoZSBzYW1lIHZhbHVlc1xuXHQgICAgdmFyIG9sZFBvcyA9IHRoaXMuZXh0cmFjdENvbW1vbihiZXN0UGF0aFswXSwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIDApO1xuXHQgICAgaWYgKGJlc3RQYXRoWzBdLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIG9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG5cdCAgICAgIC8vIElkZW50aXR5IHBlciB0aGUgZXF1YWxpdHkgYW5kIHRva2VuaXplclxuXHQgICAgICByZXR1cm4gZG9uZShbeyB2YWx1ZTogdGhpcy5qb2luKG5ld1N0cmluZyksIGNvdW50OiBuZXdTdHJpbmcubGVuZ3RoIH1dKTtcblx0ICAgIH1cblxuXHQgICAgLy8gTWFpbiB3b3JrZXIgbWV0aG9kLiBjaGVja3MgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIGVkaXQgbGVuZ3RoIGZvciBhY2NlcHRhbmNlLlxuXHQgICAgZnVuY3Rpb24gZXhlY0VkaXRMZW5ndGgoKSB7XG5cdCAgICAgIGZvciAodmFyIGRpYWdvbmFsUGF0aCA9IC0xICogZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoIDw9IGVkaXRMZW5ndGg7IGRpYWdvbmFsUGF0aCArPSAyKSB7XG5cdCAgICAgICAgdmFyIGJhc2VQYXRoID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZvaWQgMCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblx0ICAgICAgICB2YXIgYWRkUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdLFxuXHQgICAgICAgICAgICByZW1vdmVQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoICsgMV0sXG5cdCAgICAgICAgICAgIF9vbGRQb3MgPSAocmVtb3ZlUGF0aCA/IHJlbW92ZVBhdGgubmV3UG9zIDogMCkgLSBkaWFnb25hbFBhdGg7XG5cdCAgICAgICAgaWYgKGFkZFBhdGgpIHtcblx0ICAgICAgICAgIC8vIE5vIG9uZSBlbHNlIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gdXNlIHRoaXMgdmFsdWUsIGNsZWFyIGl0XG5cdCAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGggLSAxXSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB2YXIgY2FuQWRkID0gYWRkUGF0aCAmJiBhZGRQYXRoLm5ld1BvcyArIDEgPCBuZXdMZW4sXG5cdCAgICAgICAgICAgIGNhblJlbW92ZSA9IHJlbW92ZVBhdGggJiYgMCA8PSBfb2xkUG9zICYmIF9vbGRQb3MgPCBvbGRMZW47XG5cdCAgICAgICAgaWYgKCFjYW5BZGQgJiYgIWNhblJlbW92ZSkge1xuXHQgICAgICAgICAgLy8gSWYgdGhpcyBwYXRoIGlzIGEgdGVybWluYWwgdGhlbiBwcnVuZVxuXHQgICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoXSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgIGNvbnRpbnVlO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIFNlbGVjdCB0aGUgZGlhZ29uYWwgdGhhdCB3ZSB3YW50IHRvIGJyYW5jaCBmcm9tLiBXZSBzZWxlY3QgdGhlIHByaW9yXG5cdCAgICAgICAgLy8gcGF0aCB3aG9zZSBwb3NpdGlvbiBpbiB0aGUgbmV3IHN0cmluZyBpcyB0aGUgZmFydGhlc3QgZnJvbSB0aGUgb3JpZ2luXG5cdCAgICAgICAgLy8gYW5kIGRvZXMgbm90IHBhc3MgdGhlIGJvdW5kcyBvZiB0aGUgZGlmZiBncmFwaFxuXHQgICAgICAgIGlmICghY2FuQWRkIHx8IGNhblJlbW92ZSAmJiBhZGRQYXRoLm5ld1BvcyA8IHJlbW92ZVBhdGgubmV3UG9zKSB7XG5cdCAgICAgICAgICBiYXNlUGF0aCA9IGNsb25lUGF0aChyZW1vdmVQYXRoKTtcblx0ICAgICAgICAgIHNlbGYucHVzaENvbXBvbmVudChiYXNlUGF0aC5jb21wb25lbnRzLCB1bmRlZmluZWQsIHRydWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBiYXNlUGF0aCA9IGFkZFBhdGg7IC8vIE5vIG5lZWQgdG8gY2xvbmUsIHdlJ3ZlIHB1bGxlZCBpdCBmcm9tIHRoZSBsaXN0XG5cdCAgICAgICAgICBiYXNlUGF0aC5uZXdQb3MrKztcblx0ICAgICAgICAgIHNlbGYucHVzaENvbXBvbmVudChiYXNlUGF0aC5jb21wb25lbnRzLCB0cnVlLCB1bmRlZmluZWQpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIF9vbGRQb3MgPSBzZWxmLmV4dHJhY3RDb21tb24oYmFzZVBhdGgsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBkaWFnb25hbFBhdGgpO1xuXG5cdCAgICAgICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGVuZCBvZiBib3RoIHN0cmluZ3MsIHRoZW4gd2UgYXJlIGRvbmVcblx0ICAgICAgICBpZiAoYmFzZVBhdGgubmV3UG9zICsgMSA+PSBuZXdMZW4gJiYgX29sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG5cdCAgICAgICAgICByZXR1cm4gZG9uZShidWlsZFZhbHVlcyhzZWxmLCBiYXNlUGF0aC5jb21wb25lbnRzLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgc2VsZi51c2VMb25nZXN0VG9rZW4pKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRyYWNrIHRoaXMgcGF0aCBhcyBhIHBvdGVudGlhbCBjYW5kaWRhdGUgYW5kIGNvbnRpbnVlLlxuXHQgICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoXSA9IGJhc2VQYXRoO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIGVkaXRMZW5ndGgrKztcblx0ICAgIH1cblxuXHQgICAgLy8gUGVyZm9ybXMgdGhlIGxlbmd0aCBvZiBlZGl0IGl0ZXJhdGlvbi4gSXMgYSBiaXQgZnVnbHkgYXMgdGhpcyBoYXMgdG8gc3VwcG9ydCB0aGVcblx0ICAgIC8vIHN5bmMgYW5kIGFzeW5jIG1vZGUgd2hpY2ggaXMgbmV2ZXIgZnVuLiBMb29wcyBvdmVyIGV4ZWNFZGl0TGVuZ3RoIHVudGlsIGEgdmFsdWVcblx0ICAgIC8vIGlzIHByb2R1Y2VkLlxuXHQgICAgaWYgKGNhbGxiYWNrKSB7XG5cdCAgICAgIChmdW5jdGlvbiBleGVjKCkge1xuXHQgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IHdlIHdhbnQgdG8gYmUgc2FmZS5cblx0ICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdCAgICAgICAgICBpZiAoZWRpdExlbmd0aCA+IG1heEVkaXRMZW5ndGgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG5cdCAgICAgICAgICB9XG5cblx0ICAgICAgICAgIGlmICghZXhlY0VkaXRMZW5ndGgoKSkge1xuXHQgICAgICAgICAgICBleGVjKCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMCk7XG5cdCAgICAgIH0pKCk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB3aGlsZSAoZWRpdExlbmd0aCA8PSBtYXhFZGl0TGVuZ3RoKSB7XG5cdCAgICAgICAgdmFyIHJldCA9IGV4ZWNFZGl0TGVuZ3RoKCk7XG5cdCAgICAgICAgaWYgKHJldCkge1xuXHQgICAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9wdXNoQ29tcG9uZW50OiBmdW5jdGlvbiBwdXNoQ29tcG9uZW50KGNvbXBvbmVudHMsIGFkZGVkLCByZW1vdmVkKSB7XG5cdCAgICB2YXIgbGFzdCA9IGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXTtcblx0ICAgIGlmIChsYXN0ICYmIGxhc3QuYWRkZWQgPT09IGFkZGVkICYmIGxhc3QucmVtb3ZlZCA9PT0gcmVtb3ZlZCkge1xuXHQgICAgICAvLyBXZSBuZWVkIHRvIGNsb25lIGhlcmUgYXMgdGhlIGNvbXBvbmVudCBjbG9uZSBvcGVyYXRpb24gaXMganVzdFxuXHQgICAgICAvLyBhcyBzaGFsbG93IGFycmF5IGNsb25lXG5cdCAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXSA9IHsgY291bnQ6IGxhc3QuY291bnQgKyAxLCBhZGRlZDogYWRkZWQsIHJlbW92ZWQ6IHJlbW92ZWQgfTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGNvbXBvbmVudHMucHVzaCh7IGNvdW50OiAxLCBhZGRlZDogYWRkZWQsIHJlbW92ZWQ6IHJlbW92ZWQgfSk7XG5cdCAgICB9XG5cdCAgfSxcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZXh0cmFjdENvbW1vbjogZnVuY3Rpb24gZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCkge1xuXHQgICAgdmFyIG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG5cdCAgICAgICAgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aCxcblx0ICAgICAgICBuZXdQb3MgPSBiYXNlUGF0aC5uZXdQb3MsXG5cdCAgICAgICAgb2xkUG9zID0gbmV3UG9zIC0gZGlhZ29uYWxQYXRoLFxuXHQgICAgICAgIGNvbW1vbkNvdW50ID0gMDtcblx0ICAgIHdoaWxlIChuZXdQb3MgKyAxIDwgbmV3TGVuICYmIG9sZFBvcyArIDEgPCBvbGRMZW4gJiYgdGhpcy5lcXVhbHMobmV3U3RyaW5nW25ld1BvcyArIDFdLCBvbGRTdHJpbmdbb2xkUG9zICsgMV0pKSB7XG5cdCAgICAgIG5ld1BvcysrO1xuXHQgICAgICBvbGRQb3MrKztcblx0ICAgICAgY29tbW9uQ291bnQrKztcblx0ICAgIH1cblxuXHQgICAgaWYgKGNvbW1vbkNvdW50KSB7XG5cdCAgICAgIGJhc2VQYXRoLmNvbXBvbmVudHMucHVzaCh7IGNvdW50OiBjb21tb25Db3VudCB9KTtcblx0ICAgIH1cblxuXHQgICAgYmFzZVBhdGgubmV3UG9zID0gbmV3UG9zO1xuXHQgICAgcmV0dXJuIG9sZFBvcztcblx0ICB9LFxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9lcXVhbHM6IGZ1bmN0aW9uIGVxdWFscyhsZWZ0LCByaWdodCkge1xuXHQgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29tcGFyYXRvcihsZWZ0LCByaWdodCk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHQgfHwgdGhpcy5vcHRpb25zLmlnbm9yZUNhc2UgJiYgbGVmdC50b0xvd2VyQ2FzZSgpID09PSByaWdodC50b0xvd2VyQ2FzZSgpO1xuXHQgICAgfVxuXHQgIH0sXG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3JlbW92ZUVtcHR5OiBmdW5jdGlvbiByZW1vdmVFbXB0eShhcnJheSkge1xuXHQgICAgdmFyIHJldCA9IFtdO1xuXHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuXHQgICAgICBpZiAoYXJyYXlbaV0pIHtcblx0ICAgICAgICByZXQucHVzaChhcnJheVtpXSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHJldHVybiByZXQ7XG5cdCAgfSxcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY2FzdElucHV0OiBmdW5jdGlvbiBjYXN0SW5wdXQodmFsdWUpIHtcblx0ICAgIHJldHVybiB2YWx1ZTtcblx0ICB9LFxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi90b2tlbml6ZTogZnVuY3Rpb24gdG9rZW5pemUodmFsdWUpIHtcblx0ICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJyk7XG5cdCAgfSxcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovIC8qaXN0YW5idWwgaWdub3JlIGVuZCovam9pbjogZnVuY3Rpb24gam9pbihjaGFycykge1xuXHQgICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuXHQgIH1cblx0fTtcblxuXHRmdW5jdGlvbiBidWlsZFZhbHVlcyhkaWZmLCBjb21wb25lbnRzLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgdXNlTG9uZ2VzdFRva2VuKSB7XG5cdCAgdmFyIGNvbXBvbmVudFBvcyA9IDAsXG5cdCAgICAgIGNvbXBvbmVudExlbiA9IGNvbXBvbmVudHMubGVuZ3RoLFxuXHQgICAgICBuZXdQb3MgPSAwLFxuXHQgICAgICBvbGRQb3MgPSAwO1xuXG5cdCAgZm9yICg7IGNvbXBvbmVudFBvcyA8IGNvbXBvbmVudExlbjsgY29tcG9uZW50UG9zKyspIHtcblx0ICAgIHZhciBjb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG5cdCAgICBpZiAoIWNvbXBvbmVudC5yZW1vdmVkKSB7XG5cdCAgICAgIGlmICghY29tcG9uZW50LmFkZGVkICYmIHVzZUxvbmdlc3RUb2tlbikge1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCk7XG5cdCAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZnVuY3Rpb24gKHZhbHVlLCBpKSB7XG5cdCAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBvbGRTdHJpbmdbb2xkUG9zICsgaV07XG5cdCAgICAgICAgICByZXR1cm4gb2xkVmFsdWUubGVuZ3RoID4gdmFsdWUubGVuZ3RoID8gb2xkVmFsdWUgOiB2YWx1ZTtcblx0ICAgICAgICB9KTtcblxuXHQgICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbih2YWx1ZSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuXHQgICAgICB9XG5cdCAgICAgIG5ld1BvcyArPSBjb21wb25lbnQuY291bnQ7XG5cblx0ICAgICAgLy8gQ29tbW9uIGNhc2Vcblx0ICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQpIHtcblx0ICAgICAgICBvbGRQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuXHQgICAgICB9XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4ob2xkU3RyaW5nLnNsaWNlKG9sZFBvcywgb2xkUG9zICsgY29tcG9uZW50LmNvdW50KSk7XG5cdCAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7XG5cblx0ICAgICAgLy8gUmV2ZXJzZSBhZGQgYW5kIHJlbW92ZSBzbyByZW1vdmVzIGFyZSBvdXRwdXQgZmlyc3QgdG8gbWF0Y2ggY29tbW9uIGNvbnZlbnRpb25cblx0ICAgICAgLy8gVGhlIGRpZmZpbmcgYWxnb3JpdGhtIGlzIHRpZWQgdG8gYWRkIHRoZW4gcmVtb3ZlIG91dHB1dCBhbmQgdGhpcyBpcyB0aGUgc2ltcGxlc3Rcblx0ICAgICAgLy8gcm91dGUgdG8gZ2V0IHRoZSBkZXNpcmVkIG91dHB1dCB3aXRoIG1pbmltYWwgb3ZlcmhlYWQuXG5cdCAgICAgIGlmIChjb21wb25lbnRQb3MgJiYgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXS5hZGRlZCkge1xuXHQgICAgICAgIHZhciB0bXAgPSBjb21wb25lbnRzW2NvbXBvbmVudFBvcyAtIDFdO1xuXHQgICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0gPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG5cdCAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3NdID0gdG1wO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgLy8gU3BlY2lhbCBjYXNlIGhhbmRsZSBmb3Igd2hlbiBvbmUgdGVybWluYWwgaXMgaWdub3JlZCAoaS5lLiB3aGl0ZXNwYWNlKS5cblx0ICAvLyBGb3IgdGhpcyBjYXNlIHdlIG1lcmdlIHRoZSB0ZXJtaW5hbCBpbnRvIHRoZSBwcmlvciBzdHJpbmcgYW5kIGRyb3AgdGhlIGNoYW5nZS5cblx0ICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBzdHJpbmcgbW9kZS5cblx0ICB2YXIgbGFzdENvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50TGVuIC0gMV07XG5cdCAgaWYgKGNvbXBvbmVudExlbiA+IDEgJiYgdHlwZW9mIGxhc3RDb21wb25lbnQudmFsdWUgPT09ICdzdHJpbmcnICYmIChsYXN0Q29tcG9uZW50LmFkZGVkIHx8IGxhc3RDb21wb25lbnQucmVtb3ZlZCkgJiYgZGlmZi5lcXVhbHMoJycsIGxhc3RDb21wb25lbnQudmFsdWUpKSB7XG5cdCAgICBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDJdLnZhbHVlICs9IGxhc3RDb21wb25lbnQudmFsdWU7XG5cdCAgICBjb21wb25lbnRzLnBvcCgpO1xuXHQgIH1cblxuXHQgIHJldHVybiBjb21wb25lbnRzO1xuXHR9XG5cblx0ZnVuY3Rpb24gY2xvbmVQYXRoKHBhdGgpIHtcblx0ICByZXR1cm4geyBuZXdQb3M6IHBhdGgubmV3UG9zLCBjb21wb25lbnRzOiBwYXRoLmNvbXBvbmVudHMuc2xpY2UoMCkgfTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlrYVdabUwySmhjMlV1YW5NaVhTd2libUZ0WlhNaU9sc2lSR2xtWmlJc0luQnliM1J2ZEhsd1pTSXNJbVJwWm1ZaUxDSnZiR1JUZEhKcGJtY2lMQ0p1WlhkVGRISnBibWNpTENKdmNIUnBiMjV6SWl3aVkyRnNiR0poWTJzaUxDSnpaV3htSWl3aVpHOXVaU0lzSW5aaGJIVmxJaXdpYzJWMFZHbHRaVzkxZENJc0luVnVaR1ZtYVc1bFpDSXNJbU5oYzNSSmJuQjFkQ0lzSW5KbGJXOTJaVVZ0Y0hSNUlpd2lkRzlyWlc1cGVtVWlMQ0p1WlhkTVpXNGlMQ0pzWlc1bmRHZ2lMQ0p2YkdSTVpXNGlMQ0psWkdsMFRHVnVaM1JvSWl3aWJXRjRSV1JwZEV4bGJtZDBhQ0lzSW1KbGMzUlFZWFJvSWl3aWJtVjNVRzl6SWl3aVkyOXRjRzl1Wlc1MGN5SXNJbTlzWkZCdmN5SXNJbVY0ZEhKaFkzUkRiMjF0YjI0aUxDSnFiMmx1SWl3aVkyOTFiblFpTENKbGVHVmpSV1JwZEV4bGJtZDBhQ0lzSW1ScFlXZHZibUZzVUdGMGFDSXNJbUpoYzJWUVlYUm9JaXdpWVdSa1VHRjBhQ0lzSW5KbGJXOTJaVkJoZEdnaUxDSmpZVzVCWkdRaUxDSmpZVzVTWlcxdmRtVWlMQ0pqYkc5dVpWQmhkR2dpTENKd2RYTm9RMjl0Y0c5dVpXNTBJaXdpWW5WcGJHUldZV3gxWlhNaUxDSjFjMlZNYjI1blpYTjBWRzlyWlc0aUxDSmxlR1ZqSWl3aWNtVjBJaXdpWVdSa1pXUWlMQ0p5WlcxdmRtVmtJaXdpYkdGemRDSXNJbkIxYzJnaUxDSmpiMjF0YjI1RGIzVnVkQ0lzSW1WeGRXRnNjeUlzSW14bFpuUWlMQ0p5YVdkb2RDSXNJbU52YlhCaGNtRjBiM0lpTENKcFoyNXZjbVZEWVhObElpd2lkRzlNYjNkbGNrTmhjMlVpTENKaGNuSmhlU0lzSW1raUxDSnpjR3hwZENJc0ltTm9ZWEp6SWl3aVkyOXRjRzl1Wlc1MFVHOXpJaXdpWTI5dGNHOXVaVzUwVEdWdUlpd2lZMjl0Y0c5dVpXNTBJaXdpYzJ4cFkyVWlMQ0p0WVhBaUxDSnZiR1JXWVd4MVpTSXNJblJ0Y0NJc0lteGhjM1JEYjIxd2IyNWxiblFpTENKd2IzQWlMQ0p3WVhSb0lsMHNJbTFoY0hCcGJtZHpJam9pT3pzN05FTkJRWGRDUVN4Sk8wRkJRVlFzVTBGQlUwRXNTVUZCVkN4SFFVRm5RaXhEUVVGRk96dEJRVVZxUTBFc1MwRkJTME1zVTBGQlRDeEhRVUZwUWp0QlFVRkJMRzFFUVVObVF5eEpRVVJsTEdkQ1FVTldReXhUUVVSVkxFVkJRME5ETEZOQlJFUXNSVUZETUVJN1FVRkJRU3gzUkVGQlpFTXNUMEZCWXl4MVJVRkJTaXhGUVVGSk96dEJRVU4yUXl4UlFVRkpReXhYUVVGWFJDeFJRVUZSUXl4UlFVRjJRanRCUVVOQkxGRkJRVWtzVDBGQlQwUXNUMEZCVUN4TFFVRnRRaXhWUVVGMlFpeEZRVUZ0UXp0QlFVTnFRME1zYVVKQlFWZEVMRTlCUVZnN1FVRkRRVUVzWjBKQlFWVXNSVUZCVmp0QlFVTkVPMEZCUTBRc1UwRkJTMEVzVDBGQlRDeEhRVUZsUVN4UFFVRm1PenRCUVVWQkxGRkJRVWxGTEU5QlFVOHNTVUZCV0RzN1FVRkZRU3hoUVVGVFF5eEpRVUZVTEVOQlFXTkRMRXRCUVdRc1JVRkJjVUk3UVVGRGJrSXNWVUZCU1Vnc1VVRkJTaXhGUVVGak8wRkJRMXBKTEcxQ1FVRlhMRmxCUVZjN1FVRkJSVW9zYlVKQlFWTkxMRk5CUVZRc1JVRkJiMEpHTEV0QlFYQkNPMEZCUVRaQ0xGTkJRWEpFTEVWQlFYVkVMRU5CUVhaRU8wRkJRMEVzWlVGQlR5eEpRVUZRTzBGQlEwUXNUMEZJUkN4TlFVZFBPMEZCUTB3c1pVRkJUMEVzUzBGQlVEdEJRVU5FTzBGQlEwWTdPMEZCUlVRN1FVRkRRVTRzWjBKQlFWa3NTMEZCUzFNc1UwRkJUQ3hEUVVGbFZDeFRRVUZtTEVOQlFWbzdRVUZEUVVNc1owSkJRVmtzUzBGQlMxRXNVMEZCVEN4RFFVRmxVaXhUUVVGbUxFTkJRVm83TzBGQlJVRkVMR2RDUVVGWkxFdEJRVXRWTEZkQlFVd3NRMEZCYVVJc1MwRkJTME1zVVVGQlRDeERRVUZqV0N4VFFVRmtMRU5CUVdwQ0xFTkJRVm83UVVGRFFVTXNaMEpCUVZrc1MwRkJTMU1zVjBGQlRDeERRVUZwUWl4TFFVRkxReXhSUVVGTUxFTkJRV05XTEZOQlFXUXNRMEZCYWtJc1EwRkJXanM3UVVGRlFTeFJRVUZKVnl4VFFVRlRXQ3hWUVVGVldTeE5RVUYyUWp0QlFVRkJMRkZCUVN0Q1F5eFRRVUZUWkN4VlFVRlZZU3hOUVVGc1JEdEJRVU5CTEZGQlFVbEZMR0ZCUVdFc1EwRkJha0k3UVVGRFFTeFJRVUZKUXl4blFrRkJaMEpLTEZOQlFWTkZMRTFCUVRkQ08wRkJRMEVzVVVGQlNVY3NWMEZCVnl4RFFVRkRMRVZCUVVWRExGRkJRVkVzUTBGQlF5eERRVUZZTEVWQlFXTkRMRmxCUVZrc1JVRkJNVUlzUlVGQlJDeERRVUZtT3p0QlFVVkJPMEZCUTBFc1VVRkJTVU1zVTBGQlV5eExRVUZMUXl4aFFVRk1MRU5CUVcxQ1NpeFRRVUZUTEVOQlFWUXNRMEZCYmtJc1JVRkJaME5vUWl4VFFVRm9ReXhGUVVFeVEwUXNVMEZCTTBNc1JVRkJjMFFzUTBGQmRFUXNRMEZCWWp0QlFVTkJMRkZCUVVscFFpeFRRVUZUTEVOQlFWUXNSVUZCV1VNc1RVRkJXaXhIUVVGeFFpeERRVUZ5UWl4SlFVRXdRazRzVFVGQk1VSXNTVUZCYjBOUkxGTkJRVk1zUTBGQlZDeEpRVUZqVGl4TlFVRjBSQ3hGUVVFNFJEdEJRVU0xUkR0QlFVTkJMR0ZCUVU5VUxFdEJRVXNzUTBGQlF5eEZRVUZEUXl4UFFVRlBMRXRCUVV0blFpeEpRVUZNTEVOQlFWVnlRaXhUUVVGV0xFTkJRVklzUlVGQk9FSnpRaXhQUVVGUGRFSXNWVUZCVlZrc1RVRkJMME1zUlVGQlJDeERRVUZNTEVOQlFWQTdRVUZEUkRzN1FVRkZSRHRCUVVOQkxHRkJRVk5YTEdOQlFWUXNSMEZCTUVJN1FVRkRlRUlzVjBGQlN5eEpRVUZKUXl4bFFVRmxMRU5CUVVNc1EwRkJSQ3hIUVVGTFZpeFZRVUUzUWl4RlFVRjVRMVVzWjBKQlFXZENWaXhWUVVGNlJDeEZRVUZ4UlZVc1owSkJRV2RDTEVOQlFYSkdMRVZCUVhkR08wRkJRM1JHTEZsQlFVbERMREJEUVVGS08wRkJRMEVzV1VGQlNVTXNWVUZCVlZZc1UwRkJVMUVzWlVGQlpTeERRVUY0UWl4RFFVRmtPMEZCUVVFc1dVRkRTVWNzWVVGQllWZ3NVMEZCVTFFc1pVRkJaU3hEUVVGNFFpeERRVVJxUWp0QlFVRkJMRmxCUlVsTUxGVkJRVk1zUTBGQlExRXNZVUZCWVVFc1YwRkJWMVlzVFVGQmVFSXNSMEZCYVVNc1EwRkJiRU1zU1VGQmRVTlBMRmxCUm5CRU8wRkJSMEVzV1VGQlNVVXNUMEZCU2l4RlFVRmhPMEZCUTFnN1FVRkRRVllzYlVKQlFWTlJMR1ZCUVdVc1EwRkJlRUlzU1VGQk5rSnFRaXhUUVVFM1FqdEJRVU5FT3p0QlFVVkVMRmxCUVVseFFpeFRRVUZUUml4WFFVRlhRU3hSUVVGUlZDeE5RVUZTTEVkQlFXbENMRU5CUVdwQ0xFZEJRWEZDVGl4TlFVRTNRenRCUVVGQkxGbEJRMGxyUWl4WlFVRlpSaXhqUVVGakxFdEJRVXRTTEU5QlFXNUNMRWxCUVRaQ1FTeFZRVUZUVGl4TlFVUjBSRHRCUVVWQkxGbEJRVWtzUTBGQlEyVXNUVUZCUkN4SlFVRlhMRU5CUVVORExGTkJRV2hDTEVWQlFUSkNPMEZCUTNwQ08wRkJRMEZpTEcxQ1FVRlRVU3haUVVGVUxFbEJRWGxDYWtJc1UwRkJla0k3UVVGRFFUdEJRVU5FT3p0QlFVVkVPMEZCUTBFN1FVRkRRVHRCUVVOQkxGbEJRVWtzUTBGQlEzRkNMRTFCUVVRc1NVRkJXVU1zWVVGQllVZ3NVVUZCVVZRc1RVRkJVaXhIUVVGcFFsVXNWMEZCVjFZc1RVRkJla1FzUlVGQmEwVTdRVUZEYUVWUkxIRkNRVUZYU3l4VlFVRlZTQ3hWUVVGV0xFTkJRVmc3UVVGRFFYaENMR1ZCUVVzMFFpeGhRVUZNTEVOQlFXMUNUaXhUUVVGVFVDeFZRVUUxUWl4RlFVRjNRMWdzVTBGQmVFTXNSVUZCYlVRc1NVRkJia1E3UVVGRFJDeFRRVWhFTEUxQlIwODdRVUZEVEd0Q0xIRkNRVUZYUXl4UFFVRllMRU5CUkVzc1EwRkRhVUk3UVVGRGRFSkVMRzFDUVVGVFVpeE5RVUZVTzBGQlEwRmtMR1ZCUVVzMFFpeGhRVUZNTEVOQlFXMUNUaXhUUVVGVFVDeFZRVUUxUWl4RlFVRjNReXhKUVVGNFF5eEZRVUU0UTFnc1UwRkJPVU03UVVGRFJEczdRVUZGUkZrc2EwSkJRVk5vUWl4TFFVRkxhVUlzWVVGQlRDeERRVUZ0UWtzc1VVRkJia0lzUlVGQk5rSjZRaXhUUVVFM1FpeEZRVUYzUTBRc1UwRkJlRU1zUlVGQmJVUjVRaXhaUVVGdVJDeERRVUZVT3p0QlFVVkJPMEZCUTBFc1dVRkJTVU1zVTBGQlUxSXNUVUZCVkN4SFFVRnJRaXhEUVVGc1FpeEpRVUYxUWs0c1RVRkJka0lzU1VGQmFVTlJMRlZCUVZNc1EwRkJWQ3hKUVVGalRpeE5RVUZ1UkN4RlFVRXlSRHRCUVVONlJDeHBRa0ZCVDFRc1MwRkJTelJDTEZsQlFWazNRaXhKUVVGYUxFVkJRV3RDYzBJc1UwRkJVMUFzVlVGQk0wSXNSVUZCZFVOc1FpeFRRVUYyUXl4RlFVRnJSRVFzVTBGQmJFUXNSVUZCTmtSSkxFdEJRVXM0UWl4bFFVRnNSU3hEUVVGTUxFTkJRVkE3UVVGRFJDeFRRVVpFTEUxQlJVODdRVUZEVER0QlFVTkJha0lzYlVKQlFWTlJMRmxCUVZRc1NVRkJlVUpETEZGQlFYcENPMEZCUTBRN1FVRkRSanM3UVVGRlJGZzdRVUZEUkRzN1FVRkZSRHRCUVVOQk8wRkJRMEU3UVVGRFFTeFJRVUZKV2l4UlFVRktMRVZCUVdNN1FVRkRXQ3huUWtGQlUyZERMRWxCUVZRc1IwRkJaMEk3UVVGRFpqVkNMRzFDUVVGWExGbEJRVmM3UVVGRGNFSTdRVUZEUVR0QlFVTkJMR05CUVVsUkxHRkJRV0ZETEdGQlFXcENMRVZCUVdkRE8wRkJRemxDTEcxQ1FVRlBZaXhWUVVGUU8wRkJRMFE3TzBGQlJVUXNZMEZCU1N4RFFVRkRjVUlzWjBKQlFVd3NSVUZCZFVJN1FVRkRja0pYTzBGQlEwUTdRVUZEUml4VFFWWkVMRVZCVlVjc1EwRldTRHRCUVZkRUxFOUJXa0VzUjBGQlJEdEJRV0ZFTEV0QlpFUXNUVUZqVHp0QlFVTk1MR0ZCUVU5d1FpeGpRVUZqUXl4aFFVRnlRaXhGUVVGdlF6dEJRVU5zUXl4WlFVRkpiMElzVFVGQlRWb3NaMEpCUVZZN1FVRkRRU3haUVVGSldTeEhRVUZLTEVWQlFWTTdRVUZEVUN4cFFrRkJUMEVzUjBGQlVEdEJRVU5FTzBGQlEwWTdRVUZEUmp0QlFVTkdMRWRCT1Vkak8wRkJRVUVzYlVSQlowaG1TaXhoUVdoSVpTeDVRa0ZuU0VSaUxGVkJhRWhETEVWQlowaFhhMElzUzBGb1NGZ3NSVUZuU0d0Q1F5eFBRV2hJYkVJc1JVRm5TREpDTzBGQlEzaERMRkZCUVVsRExFOUJRVTl3UWl4WFFVRlhRU3hYUVVGWFRpeE5RVUZZTEVkQlFXOUNMRU5CUVM5Q0xFTkJRVmc3UVVGRFFTeFJRVUZKTUVJc1VVRkJVVUVzUzBGQlMwWXNTMEZCVEN4TFFVRmxRU3hMUVVGMlFpeEpRVUZuUTBVc1MwRkJTMFFzVDBGQlRDeExRVUZwUWtFc1QwRkJja1FzUlVGQk9FUTdRVUZETlVRN1FVRkRRVHRCUVVOQmJrSXNhVUpCUVZkQkxGZEJRVmRPTEUxQlFWZ3NSMEZCYjBJc1EwRkJMMElzU1VGQmIwTXNSVUZCUTFVc1QwRkJUMmRDTEV0QlFVdG9RaXhMUVVGTUxFZEJRV0VzUTBGQmNrSXNSVUZCZDBKakxFOUJRVTlCTEV0QlFTOUNMRVZCUVhORFF5eFRRVUZUUVN4UFFVRXZReXhGUVVGd1F6dEJRVU5FTEV0QlNrUXNUVUZKVHp0QlFVTk1ia0lzYVVKQlFWZHhRaXhKUVVGWUxFTkJRV2RDTEVWQlFVTnFRaXhQUVVGUExFTkJRVklzUlVGQlYyTXNUMEZCVDBFc1MwRkJiRUlzUlVGQmVVSkRMRk5CUVZOQkxFOUJRV3hETEVWQlFXaENPMEZCUTBRN1FVRkRSaXhIUVhwSVl6dEJRVUZCTEcxRVFUQklabXBDTEdGQk1VaGxMSGxDUVRCSVJFc3NVVUV4U0VNc1JVRXdTRk42UWl4VFFURklWQ3hGUVRCSWIwSkVMRk5CTVVod1FpeEZRVEJJSzBKNVFpeFpRVEZJTDBJc1JVRXdTRFpETzBGQlF6RkVMRkZCUVVsaUxGTkJRVk5ZTEZWQlFWVlpMRTFCUVhaQ08wRkJRVUVzVVVGRFNVTXNVMEZCVTJRc1ZVRkJWV0VzVFVGRWRrSTdRVUZCUVN4UlFVVkpTeXhUUVVGVFVTeFRRVUZUVWl4TlFVWjBRanRCUVVGQkxGRkJSMGxGTEZOQlFWTkdMRk5CUVZOUExGbEJTSFJDTzBGQlFVRXNVVUZMU1dkQ0xHTkJRV01zUTBGTWJFSTdRVUZOUVN4WFFVRlBka0lzVTBGQlV5eERRVUZVTEVkQlFXRk9MRTFCUVdJc1NVRkJkVUpSTEZOQlFWTXNRMEZCVkN4SFFVRmhUaXhOUVVGd1F5eEpRVUU0UXl4TFFVRkxORUlzVFVGQlRDeERRVUZaZWtNc1ZVRkJWV2xDTEZOQlFWTXNRMEZCYmtJc1EwRkJXaXhGUVVGdFEyeENMRlZCUVZWdlFpeFRRVUZUTEVOQlFXNUNMRU5CUVc1RExFTkJRWEpFTEVWQlFXZElPMEZCUXpsSFJqdEJRVU5CUlR0QlFVTkJjVUk3UVVGRFJEczdRVUZGUkN4UlFVRkpRU3hYUVVGS0xFVkJRV2xDTzBGQlEyWm1MR1ZCUVZOUUxGVkJRVlFzUTBGQmIwSnhRaXhKUVVGd1FpeERRVUY1UWl4RlFVRkRha0lzVDBGQlQydENMRmRCUVZJc1JVRkJla0k3UVVGRFJEczdRVUZGUkdZc1lVRkJVMUlzVFVGQlZDeEhRVUZyUWtFc1RVRkJiRUk3UVVGRFFTeFhRVUZQUlN4TlFVRlFPMEZCUTBRc1IwRTNTV003UVVGQlFTeHRSRUVyU1daelFpeE5RUzlKWlN4clFrRXJTVkpETEVsQkwwbFJMRVZCSzBsR1F5eExRUzlKUlN4RlFTdEpTenRCUVVOc1FpeFJRVUZKTEV0QlFVc3hReXhQUVVGTUxFTkJRV0V5UXl4VlFVRnFRaXhGUVVFMlFqdEJRVU16UWl4aFFVRlBMRXRCUVVzelF5eFBRVUZNTEVOQlFXRXlReXhWUVVGaUxFTkJRWGRDUml4SlFVRjRRaXhGUVVFNFFrTXNTMEZCT1VJc1EwRkJVRHRCUVVORUxFdEJSa1FzVFVGRlR6dEJRVU5NTEdGQlFVOUVMRk5CUVZORExFdEJRVlFzU1VGRFJDeExRVUZMTVVNc1QwRkJUQ3hEUVVGaE5FTXNWVUZCWWl4SlFVRXlRa2dzUzBGQlMwa3NWMEZCVEN4UFFVRjFRa2dzVFVGQlRVY3NWMEZCVGl4RlFVUjRSRHRCUVVWRU8wRkJRMFlzUjBGMFNtTTdRVUZCUVN4dFJFRjFTbVp5UXl4WFFYWktaU3gxUWtGMVNraHpReXhMUVhaS1J5eEZRWFZLU1R0QlFVTnFRaXhSUVVGSldpeE5RVUZOTEVWQlFWWTdRVUZEUVN4VFFVRkxMRWxCUVVsaExFbEJRVWtzUTBGQllpeEZRVUZuUWtFc1NVRkJTVVFzVFVGQlRXNURMRTFCUVRGQ0xFVkJRV3REYjBNc1IwRkJiRU1zUlVGQmRVTTdRVUZEY2tNc1ZVRkJTVVFzVFVGQlRVTXNRMEZCVGl4RFFVRktMRVZCUVdNN1FVRkRXbUlzV1VGQlNVa3NTVUZCU2l4RFFVRlRVU3hOUVVGTlF5eERRVUZPTEVOQlFWUTdRVUZEUkR0QlFVTkdPMEZCUTBRc1YwRkJUMklzUjBGQlVEdEJRVU5FTEVkQkwwcGpPMEZCUVVFc2JVUkJaMHRtTTBJc1UwRm9TMlVzY1VKQlowdE1TQ3hMUVdoTFN5eEZRV2RMUlR0QlFVTm1MRmRCUVU5QkxFdEJRVkE3UVVGRFJDeEhRV3hMWXp0QlFVRkJMRzFFUVcxTFprc3NVVUZ1UzJVc2IwSkJiVXRPVEN4TFFXNUxUU3hGUVcxTFF6dEJRVU5rTEZkQlFVOUJMRTFCUVUwMFF5eExRVUZPTEVOQlFWa3NSVUZCV2l4RFFVRlFPMEZCUTBRc1IwRnlTMk03UVVGQlFTeHRSRUZ6UzJZMVFpeEpRWFJMWlN4blFrRnpTMVkyUWl4TFFYUkxWU3hGUVhOTFNEdEJRVU5XTEZkQlFVOUJMRTFCUVUwM1FpeEpRVUZPTEVOQlFWY3NSVUZCV0N4RFFVRlFPMEZCUTBRN1FVRjRTMk1zUTBGQmFrSTdPMEZCTWt0QkxGTkJRVk5YTEZkQlFWUXNRMEZCY1VKc1F5eEpRVUZ5UWl4RlFVRXlRbTlDTEZWQlFUTkNMRVZCUVhWRGJFSXNVMEZCZGtNc1JVRkJhMFJFTEZOQlFXeEVMRVZCUVRaRWEwTXNaVUZCTjBRc1JVRkJPRVU3UVVGRE5VVXNUVUZCU1d0Q0xHVkJRV1VzUTBGQmJrSTdRVUZCUVN4TlFVTkpReXhsUVVGbGJFTXNWMEZCVjA0c1RVRkVPVUk3UVVGQlFTeE5RVVZKU3l4VFFVRlRMRU5CUm1JN1FVRkJRU3hOUVVkSlJTeFRRVUZUTEVOQlNHSTdPMEZCUzBFc1UwRkJUMmRETEdWQlFXVkRMRmxCUVhSQ0xFVkJRVzlEUkN4alFVRndReXhGUVVGdlJEdEJRVU5zUkN4UlFVRkpSU3haUVVGWmJrTXNWMEZCVjJsRExGbEJRVmdzUTBGQmFFSTdRVUZEUVN4UlFVRkpMRU5CUVVORkxGVkJRVlZvUWl4UFFVRm1MRVZCUVhkQ08wRkJRM1JDTEZWQlFVa3NRMEZCUTJkQ0xGVkJRVlZxUWl4TFFVRllMRWxCUVc5Q1NDeGxRVUY0UWl4RlFVRjVRenRCUVVOMlF5eFpRVUZKTlVJc1VVRkJVVXdzVlVGQlZYTkVMRXRCUVZZc1EwRkJaMEp5UXl4TlFVRm9RaXhGUVVGM1FrRXNVMEZCVTI5RExGVkJRVlV2UWl4TFFVRXpReXhEUVVGYU8wRkJRMEZxUWl4blFrRkJVVUVzVFVGQlRXdEVMRWRCUVU0c1EwRkJWU3hWUVVGVGJFUXNTMEZCVkN4RlFVRm5RakpETEVOQlFXaENMRVZCUVcxQ08wRkJRMjVETEdOQlFVbFJMRmRCUVZkNlJDeFZRVUZWYjBJc1UwRkJVelpDTEVOQlFXNUNMRU5CUVdZN1FVRkRRU3hwUWtGQlQxRXNVMEZCVXpWRExFMUJRVlFzUjBGQmEwSlFMRTFCUVUxUExFMUJRWGhDTEVkQlFXbERORU1zVVVGQmFrTXNSMEZCTkVOdVJDeExRVUZ1UkR0QlFVTkVMRk5CU0U4c1EwRkJVanM3UVVGTFFXZEVMR3RDUVVGVmFFUXNTMEZCVml4SFFVRnJRbEFzUzBGQlMzVkNMRWxCUVV3c1EwRkJWV2hDTEV0QlFWWXNRMEZCYkVJN1FVRkRSQ3hQUVZKRUxFMUJVVTg3UVVGRFRHZEVMR3RDUVVGVmFFUXNTMEZCVml4SFFVRnJRbEFzUzBGQlMzVkNMRWxCUVV3c1EwRkJWWEpDTEZWQlFWVnpSQ3hMUVVGV0xFTkJRV2RDY2tNc1RVRkJhRUlzUlVGQmQwSkJMRk5CUVZOdlF5eFZRVUZWTDBJc1MwRkJNME1zUTBGQlZpeERRVUZzUWp0QlFVTkVPMEZCUTBSTUxHZENRVUZWYjBNc1ZVRkJWUzlDTEV0QlFYQkNPenRCUVVWQk8wRkJRMEVzVlVGQlNTeERRVUZESzBJc1ZVRkJWV3BDTEV0QlFXWXNSVUZCYzBJN1FVRkRjRUpxUWl4clFrRkJWV3RETEZWQlFWVXZRaXhMUVVGd1FqdEJRVU5FTzBGQlEwWXNTMEZzUWtRc1RVRnJRazg3UVVGRFRDdENMR2RDUVVGVmFFUXNTMEZCVml4SFFVRnJRbEFzUzBGQlMzVkNMRWxCUVV3c1EwRkJWWFJDTEZWQlFWVjFSQ3hMUVVGV0xFTkJRV2RDYmtNc1RVRkJhRUlzUlVGQmQwSkJMRk5CUVZOclF5eFZRVUZWTDBJc1MwRkJNME1zUTBGQlZpeERRVUZzUWp0QlFVTkJTQ3huUWtGQlZXdERMRlZCUVZVdlFpeExRVUZ3UWpzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeFZRVUZKTmtJc1owSkJRV2RDYWtNc1YwRkJWMmxETEdWQlFXVXNRMEZCTVVJc1JVRkJOa0ptTEV0QlFXcEVMRVZCUVhkRU8wRkJRM1JFTEZsQlFVbHhRaXhOUVVGTmRrTXNWMEZCVjJsRExHVkJRV1VzUTBGQk1VSXNRMEZCVmp0QlFVTkJha01zYlVKQlFWZHBReXhsUVVGbExFTkJRVEZDTEVsQlFTdENha01zVjBGQlYybERMRmxCUVZnc1EwRkJMMEk3UVVGRFFXcERMRzFDUVVGWGFVTXNXVUZCV0N4SlFVRXlRazBzUjBGQk0wSTdRVUZEUkR0QlFVTkdPMEZCUTBZN08wRkJSVVE3UVVGRFFUdEJRVU5CTzBGQlEwRXNUVUZCU1VNc1owSkJRV2RDZUVNc1YwRkJWMnRETEdWQlFXVXNRMEZCTVVJc1EwRkJjRUk3UVVGRFFTeE5RVUZKUVN4bFFVRmxMRU5CUVdZc1NVRkRSeXhQUVVGUFRTeGpRVUZqY2tRc1MwRkJja0lzUzBGQkswSXNVVUZFYkVNc1MwRkZTWEZFTEdOQlFXTjBRaXhMUVVGa0xFbEJRWFZDYzBJc1kwRkJZM0pDTEU5QlJucERMRXRCUjBkMlF5eExRVUZMTWtNc1RVRkJUQ3hEUVVGWkxFVkJRVm9zUlVGQlowSnBRaXhqUVVGamNrUXNTMEZCT1VJc1EwRklVQ3hGUVVjMlF6dEJRVU16UTJFc1pVRkJWMnRETEdWQlFXVXNRMEZCTVVJc1JVRkJOa0l2UXl4TFFVRTNRaXhKUVVGelEzRkVMR05CUVdOeVJDeExRVUZ3UkR0QlFVTkJZU3hsUVVGWGVVTXNSMEZCV0R0QlFVTkVPenRCUVVWRUxGTkJRVTk2UXl4VlFVRlFPMEZCUTBRN08wRkJSVVFzVTBGQlUxa3NVMEZCVkN4RFFVRnRRamhDTEVsQlFXNUNMRVZCUVhsQ08wRkJRM1pDTEZOQlFVOHNSVUZCUlRORExGRkJRVkV5UXl4TFFVRkxNME1zVFVGQlppeEZRVUYxUWtNc1dVRkJXVEJETEV0QlFVc3hReXhWUVVGTUxFTkJRV2RDYjBNc1MwRkJhRUlzUTBGQmMwSXNRMEZCZEVJc1EwRkJia01zUlVGQlVEdEJRVU5FSWl3aVptbHNaU0k2SW1KaGMyVXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKbGVIQnZjblFnWkdWbVlYVnNkQ0JtZFc1amRHbHZiaUJFYVdabUtDa2dlMzFjYmx4dVJHbG1aaTV3Y205MGIzUjVjR1VnUFNCN1hHNGdJR1JwWm1Zb2IyeGtVM1J5YVc1bkxDQnVaWGRUZEhKcGJtY3NJRzl3ZEdsdmJuTWdQU0I3ZlNrZ2UxeHVJQ0FnSUd4bGRDQmpZV3hzWW1GamF5QTlJRzl3ZEdsdmJuTXVZMkZzYkdKaFkyczdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnZjSFJwYjI1eklEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNCallXeHNZbUZqYXlBOUlHOXdkR2x2Ym5NN1hHNGdJQ0FnSUNCdmNIUnBiMjV6SUQwZ2UzMDdYRzRnSUNBZ2ZWeHVJQ0FnSUhSb2FYTXViM0IwYVc5dWN5QTlJRzl3ZEdsdmJuTTdYRzVjYmlBZ0lDQnNaWFFnYzJWc1ppQTlJSFJvYVhNN1hHNWNiaUFnSUNCbWRXNWpkR2x2YmlCa2IyNWxLSFpoYkhWbEtTQjdYRzRnSUNBZ0lDQnBaaUFvWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0FnSUNBZ2MyVjBWR2x0Wlc5MWRDaG1kVzVqZEdsdmJpZ3BJSHNnWTJGc2JHSmhZMnNvZFc1a1pXWnBibVZrTENCMllXeDFaU2s3SUgwc0lEQXBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIyWVd4MVpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QkJiR3h2ZHlCemRXSmpiR0Z6YzJWeklIUnZJRzFoYzNOaFoyVWdkR2hsSUdsdWNIVjBJSEJ5YVc5eUlIUnZJSEoxYm01cGJtZGNiaUFnSUNCdmJHUlRkSEpwYm1jZ1BTQjBhR2x6TG1OaGMzUkpibkIxZENodmJHUlRkSEpwYm1jcE8xeHVJQ0FnSUc1bGQxTjBjbWx1WnlBOUlIUm9hWE11WTJGemRFbHVjSFYwS0c1bGQxTjBjbWx1WnlrN1hHNWNiaUFnSUNCdmJHUlRkSEpwYm1jZ1BTQjBhR2x6TG5KbGJXOTJaVVZ0Y0hSNUtIUm9hWE11ZEc5clpXNXBlbVVvYjJ4a1UzUnlhVzVuS1NrN1hHNGdJQ0FnYm1WM1UzUnlhVzVuSUQwZ2RHaHBjeTV5WlcxdmRtVkZiWEIwZVNoMGFHbHpMblJ2YTJWdWFYcGxLRzVsZDFOMGNtbHVaeWtwTzF4dVhHNGdJQ0FnYkdWMElHNWxkMHhsYmlBOUlHNWxkMU4wY21sdVp5NXNaVzVuZEdnc0lHOXNaRXhsYmlBOUlHOXNaRk4wY21sdVp5NXNaVzVuZEdnN1hHNGdJQ0FnYkdWMElHVmthWFJNWlc1bmRHZ2dQU0F4TzF4dUlDQWdJR3hsZENCdFlYaEZaR2wwVEdWdVozUm9JRDBnYm1WM1RHVnVJQ3NnYjJ4a1RHVnVPMXh1SUNBZ0lHeGxkQ0JpWlhOMFVHRjBhQ0E5SUZ0N0lHNWxkMUJ2Y3pvZ0xURXNJR052YlhCdmJtVnVkSE02SUZ0ZElIMWRPMXh1WEc0Z0lDQWdMeThnVTJWbFpDQmxaR2wwVEdWdVozUm9JRDBnTUN3Z2FTNWxMaUIwYUdVZ1kyOXVkR1Z1ZENCemRHRnlkSE1nZDJsMGFDQjBhR1VnYzJGdFpTQjJZV3gxWlhOY2JpQWdJQ0JzWlhRZ2IyeGtVRzl6SUQwZ2RHaHBjeTVsZUhSeVlXTjBRMjl0Ylc5dUtHSmxjM1JRWVhSb1d6QmRMQ0J1WlhkVGRISnBibWNzSUc5c1pGTjBjbWx1Wnl3Z01DazdYRzRnSUNBZ2FXWWdLR0psYzNSUVlYUm9XekJkTG01bGQxQnZjeUFySURFZ1BqMGdibVYzVEdWdUlDWW1JRzlzWkZCdmN5QXJJREVnUGowZ2IyeGtUR1Z1S1NCN1hHNGdJQ0FnSUNBdkx5QkpaR1Z1ZEdsMGVTQndaWElnZEdobElHVnhkV0ZzYVhSNUlHRnVaQ0IwYjJ0bGJtbDZaWEpjYmlBZ0lDQWdJSEpsZEhWeWJpQmtiMjVsS0Z0N2RtRnNkV1U2SUhSb2FYTXVhbTlwYmlodVpYZFRkSEpwYm1jcExDQmpiM1Z1ZERvZ2JtVjNVM1J5YVc1bkxteGxibWQwYUgxZEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5Qk5ZV2x1SUhkdmNtdGxjaUJ0WlhSb2IyUXVJR05vWldOcmN5QmhiR3dnY0dWeWJYVjBZWFJwYjI1eklHOW1JR0VnWjJsMlpXNGdaV1JwZENCc1pXNW5kR2dnWm05eUlHRmpZMlZ3ZEdGdVkyVXVYRzRnSUNBZ1puVnVZM1JwYjI0Z1pYaGxZMFZrYVhSTVpXNW5kR2dvS1NCN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCa2FXRm5iMjVoYkZCaGRHZ2dQU0F0TVNBcUlHVmthWFJNWlc1bmRHZzdJR1JwWVdkdmJtRnNVR0YwYUNBOFBTQmxaR2wwVEdWdVozUm9PeUJrYVdGbmIyNWhiRkJoZEdnZ0t6MGdNaWtnZTF4dUlDQWdJQ0FnSUNCc1pYUWdZbUZ6WlZCaGRHZzdYRzRnSUNBZ0lDQWdJR3hsZENCaFpHUlFZWFJvSUQwZ1ltVnpkRkJoZEdoYlpHbGhaMjl1WVd4UVlYUm9JQzBnTVYwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlcxdmRtVlFZWFJvSUQwZ1ltVnpkRkJoZEdoYlpHbGhaMjl1WVd4UVlYUm9JQ3NnTVYwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J2YkdSUWIzTWdQU0FvY21WdGIzWmxVR0YwYUNBL0lISmxiVzkyWlZCaGRHZ3VibVYzVUc5eklEb2dNQ2tnTFNCa2FXRm5iMjVoYkZCaGRHZzdYRzRnSUNBZ0lDQWdJR2xtSUNoaFpHUlFZWFJvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVG04Z2IyNWxJR1ZzYzJVZ2FYTWdaMjlwYm1jZ2RHOGdZWFIwWlcxd2RDQjBieUIxYzJVZ2RHaHBjeUIyWVd4MVpTd2dZMnhsWVhJZ2FYUmNiaUFnSUNBZ0lDQWdJQ0JpWlhOMFVHRjBhRnRrYVdGbmIyNWhiRkJoZEdnZ0xTQXhYU0E5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJR3hsZENCallXNUJaR1FnUFNCaFpHUlFZWFJvSUNZbUlHRmtaRkJoZEdndWJtVjNVRzl6SUNzZ01TQThJRzVsZDB4bGJpeGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGJsSmxiVzkyWlNBOUlISmxiVzkyWlZCaGRHZ2dKaVlnTUNBOFBTQnZiR1JRYjNNZ0ppWWdiMnhrVUc5eklEd2diMnhrVEdWdU8xeHVJQ0FnSUNBZ0lDQnBaaUFvSVdOaGJrRmtaQ0FtSmlBaFkyRnVVbVZ0YjNabEtTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1NXWWdkR2hwY3lCd1lYUm9JR2x6SUdFZ2RHVnliV2x1WVd3Z2RHaGxiaUJ3Y25WdVpWeHVJQ0FnSUNBZ0lDQWdJR0psYzNSUVlYUm9XMlJwWVdkdmJtRnNVR0YwYUYwZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQXZMeUJUWld4bFkzUWdkR2hsSUdScFlXZHZibUZzSUhSb1lYUWdkMlVnZDJGdWRDQjBieUJpY21GdVkyZ2dabkp2YlM0Z1YyVWdjMlZzWldOMElIUm9aU0J3Y21sdmNseHVJQ0FnSUNBZ0lDQXZMeUJ3WVhSb0lIZG9iM05sSUhCdmMybDBhVzl1SUdsdUlIUm9aU0J1WlhjZ2MzUnlhVzVuSUdseklIUm9aU0JtWVhKMGFHVnpkQ0JtY205dElIUm9aU0J2Y21sbmFXNWNiaUFnSUNBZ0lDQWdMeThnWVc1a0lHUnZaWE1nYm05MElIQmhjM01nZEdobElHSnZkVzVrY3lCdlppQjBhR1VnWkdsbVppQm5jbUZ3YUZ4dUlDQWdJQ0FnSUNCcFppQW9JV05oYmtGa1pDQjhmQ0FvWTJGdVVtVnRiM1psSUNZbUlHRmtaRkJoZEdndWJtVjNVRzl6SUR3Z2NtVnRiM1psVUdGMGFDNXVaWGRRYjNNcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnWW1GelpWQmhkR2dnUFNCamJHOXVaVkJoZEdnb2NtVnRiM1psVUdGMGFDazdYRzRnSUNBZ0lDQWdJQ0FnYzJWc1ppNXdkWE5vUTI5dGNHOXVaVzUwS0dKaGMyVlFZWFJvTG1OdmJYQnZibVZ1ZEhNc0lIVnVaR1ZtYVc1bFpDd2dkSEoxWlNrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdZbUZ6WlZCaGRHZ2dQU0JoWkdSUVlYUm9PeUFnSUM4dklFNXZJRzVsWldRZ2RHOGdZMnh2Ym1Vc0lIZGxKM1psSUhCMWJHeGxaQ0JwZENCbWNtOXRJSFJvWlNCc2FYTjBYRzRnSUNBZ0lDQWdJQ0FnWW1GelpWQmhkR2d1Ym1WM1VHOXpLeXM3WEc0Z0lDQWdJQ0FnSUNBZ2MyVnNaaTV3ZFhOb1EyOXRjRzl1Wlc1MEtHSmhjMlZRWVhSb0xtTnZiWEJ2Ym1WdWRITXNJSFJ5ZFdVc0lIVnVaR1ZtYVc1bFpDazdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCdmJHUlFiM01nUFNCelpXeG1MbVY0ZEhKaFkzUkRiMjF0YjI0b1ltRnpaVkJoZEdnc0lHNWxkMU4wY21sdVp5d2diMnhrVTNSeWFXNW5MQ0JrYVdGbmIyNWhiRkJoZEdncE8xeHVYRzRnSUNBZ0lDQWdJQzh2SUVsbUlIZGxJR2hoZG1VZ2FHbDBJSFJvWlNCbGJtUWdiMllnWW05MGFDQnpkSEpwYm1kekxDQjBhR1Z1SUhkbElHRnlaU0JrYjI1bFhHNGdJQ0FnSUNBZ0lHbG1JQ2hpWVhObFVHRjBhQzV1WlhkUWIzTWdLeUF4SUQ0OUlHNWxkMHhsYmlBbUppQnZiR1JRYjNNZ0t5QXhJRDQ5SUc5c1pFeGxiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCa2IyNWxLR0oxYVd4a1ZtRnNkV1Z6S0hObGJHWXNJR0poYzJWUVlYUm9MbU52YlhCdmJtVnVkSE1zSUc1bGQxTjBjbWx1Wnl3Z2IyeGtVM1J5YVc1bkxDQnpaV3htTG5WelpVeHZibWRsYzNSVWIydGxiaWtwTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDOHZJRTkwYUdWeWQybHpaU0IwY21GamF5QjBhR2x6SUhCaGRHZ2dZWE1nWVNCd2IzUmxiblJwWVd3Z1kyRnVaR2xrWVhSbElHRnVaQ0JqYjI1MGFXNTFaUzVjYmlBZ0lDQWdJQ0FnSUNCaVpYTjBVR0YwYUZ0a2FXRm5iMjVoYkZCaGRHaGRJRDBnWW1GelpWQmhkR2c3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1pXUnBkRXhsYm1kMGFDc3JPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRkJsY21admNtMXpJSFJvWlNCc1pXNW5kR2dnYjJZZ1pXUnBkQ0JwZEdWeVlYUnBiMjR1SUVseklHRWdZbWwwSUdaMVoyeDVJR0Z6SUhSb2FYTWdhR0Z6SUhSdklITjFjSEJ2Y25RZ2RHaGxYRzRnSUNBZ0x5OGdjM2x1WXlCaGJtUWdZWE41Ym1NZ2JXOWtaU0IzYUdsamFDQnBjeUJ1WlhabGNpQm1kVzR1SUV4dmIzQnpJRzkyWlhJZ1pYaGxZMFZrYVhSTVpXNW5kR2dnZFc1MGFXd2dZU0IyWVd4MVpWeHVJQ0FnSUM4dklHbHpJSEJ5YjJSMVkyVmtMbHh1SUNBZ0lHbG1JQ2hqWVd4c1ltRmpheWtnZTF4dUlDQWdJQ0FnS0daMWJtTjBhVzl1SUdWNFpXTW9LU0I3WEc0Z0lDQWdJQ0FnSUhObGRGUnBiV1Z2ZFhRb1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1ZHaHBjeUJ6YUc5MWJHUWdibTkwSUdoaGNIQmxiaXdnWW5WMElIZGxJSGRoYm5RZ2RHOGdZbVVnYzJGbVpTNWNiaUFnSUNBZ0lDQWdJQ0F2S2lCcGMzUmhibUoxYkNCcFoyNXZjbVVnYm1WNGRDQXFMMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaGxaR2wwVEdWdVozUm9JRDRnYldGNFJXUnBkRXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdOaGJHeGlZV05yS0NrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLQ0ZsZUdWalJXUnBkRXhsYm1kMGFDZ3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxlR1ZqS0NrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5TENBd0tUdGNiaUFnSUNBZ0lIMG9LU2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIZG9hV3hsSUNobFpHbDBUR1Z1WjNSb0lEdzlJRzFoZUVWa2FYUk1aVzVuZEdncElIdGNiaUFnSUNBZ0lDQWdiR1YwSUhKbGRDQTlJR1Y0WldORlpHbDBUR1Z1WjNSb0tDazdYRzRnSUNBZ0lDQWdJR2xtSUNoeVpYUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WME8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJSEIxYzJoRGIyMXdiMjVsYm5Rb1kyOXRjRzl1Wlc1MGN5d2dZV1JrWldRc0lISmxiVzkyWldRcElIdGNiaUFnSUNCc1pYUWdiR0Z6ZENBOUlHTnZiWEJ2Ym1WdWRITmJZMjl0Y0c5dVpXNTBjeTVzWlc1bmRHZ2dMU0F4WFR0Y2JpQWdJQ0JwWmlBb2JHRnpkQ0FtSmlCc1lYTjBMbUZrWkdWa0lEMDlQU0JoWkdSbFpDQW1KaUJzWVhOMExuSmxiVzkyWldRZ1BUMDlJSEpsYlc5MlpXUXBJSHRjYmlBZ0lDQWdJQzh2SUZkbElHNWxaV1FnZEc4Z1kyeHZibVVnYUdWeVpTQmhjeUIwYUdVZ1kyOXRjRzl1Wlc1MElHTnNiMjVsSUc5d1pYSmhkR2x2YmlCcGN5QnFkWE4wWEc0Z0lDQWdJQ0F2THlCaGN5QnphR0ZzYkc5M0lHRnljbUY1SUdOc2IyNWxYRzRnSUNBZ0lDQmpiMjF3YjI1bGJuUnpXMk52YlhCdmJtVnVkSE11YkdWdVozUm9JQzBnTVYwZ1BTQjdZMjkxYm5RNklHeGhjM1F1WTI5MWJuUWdLeUF4TENCaFpHUmxaRG9nWVdSa1pXUXNJSEpsYlc5MlpXUTZJSEpsYlc5MlpXUWdmVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ1kyOXRjRzl1Wlc1MGN5NXdkWE5vS0h0amIzVnVkRG9nTVN3Z1lXUmtaV1E2SUdGa1pHVmtMQ0J5WlcxdmRtVmtPaUJ5WlcxdmRtVmtJSDBwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNiaUFnWlhoMGNtRmpkRU52YlcxdmJpaGlZWE5sVUdGMGFDd2dibVYzVTNSeWFXNW5MQ0J2YkdSVGRISnBibWNzSUdScFlXZHZibUZzVUdGMGFDa2dlMXh1SUNBZ0lHeGxkQ0J1WlhkTVpXNGdQU0J1WlhkVGRISnBibWN1YkdWdVozUm9MRnh1SUNBZ0lDQWdJQ0J2YkdSTVpXNGdQU0J2YkdSVGRISnBibWN1YkdWdVozUm9MRnh1SUNBZ0lDQWdJQ0J1WlhkUWIzTWdQU0JpWVhObFVHRjBhQzV1WlhkUWIzTXNYRzRnSUNBZ0lDQWdJRzlzWkZCdmN5QTlJRzVsZDFCdmN5QXRJR1JwWVdkdmJtRnNVR0YwYUN4Y2JseHVJQ0FnSUNBZ0lDQmpiMjF0YjI1RGIzVnVkQ0E5SURBN1hHNGdJQ0FnZDJocGJHVWdLRzVsZDFCdmN5QXJJREVnUENCdVpYZE1aVzRnSmlZZ2IyeGtVRzl6SUNzZ01TQThJRzlzWkV4bGJpQW1KaUIwYUdsekxtVnhkV0ZzY3lodVpYZFRkSEpwYm1kYmJtVjNVRzl6SUNzZ01WMHNJRzlzWkZOMGNtbHVaMXR2YkdSUWIzTWdLeUF4WFNrcElIdGNiaUFnSUNBZ0lHNWxkMUJ2Y3lzck8xeHVJQ0FnSUNBZ2IyeGtVRzl6S3lzN1hHNGdJQ0FnSUNCamIyMXRiMjVEYjNWdWRDc3JPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hqYjIxdGIyNURiM1Z1ZENrZ2UxeHVJQ0FnSUNBZ1ltRnpaVkJoZEdndVkyOXRjRzl1Wlc1MGN5NXdkWE5vS0h0amIzVnVkRG9nWTI5dGJXOXVRMjkxYm5SOUtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCaVlYTmxVR0YwYUM1dVpYZFFiM01nUFNCdVpYZFFiM003WEc0Z0lDQWdjbVYwZFhKdUlHOXNaRkJ2Y3p0Y2JpQWdmU3hjYmx4dUlDQmxjWFZoYkhNb2JHVm1kQ3dnY21sbmFIUXBJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXZjSFJwYjI1ekxtTnZiWEJoY21GMGIzSXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG05d2RHbHZibk11WTI5dGNHRnlZWFJ2Y2loc1pXWjBMQ0J5YVdkb2RDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJzWldaMElEMDlQU0J5YVdkb2RGeHVJQ0FnSUNBZ0lDQjhmQ0FvZEdocGN5NXZjSFJwYjI1ekxtbG5ibTl5WlVOaGMyVWdKaVlnYkdWbWRDNTBiMHh2ZDJWeVEyRnpaU2dwSUQwOVBTQnlhV2RvZEM1MGIweHZkMlZ5UTJGelpTZ3BLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSEpsYlc5MlpVVnRjSFI1S0dGeWNtRjVLU0I3WEc0Z0lDQWdiR1YwSUhKbGRDQTlJRnRkTzF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWVhKeVlYa3ViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUdsbUlDaGhjbkpoZVZ0cFhTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhRdWNIVnphQ2hoY25KaGVWdHBYU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCeVpYUTdYRzRnSUgwc1hHNGdJR05oYzNSSmJuQjFkQ2gyWVd4MVpTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMllXeDFaVHRjYmlBZ2ZTeGNiaUFnZEc5clpXNXBlbVVvZG1Gc2RXVXBJSHRjYmlBZ0lDQnlaWFIxY200Z2RtRnNkV1V1YzNCc2FYUW9KeWNwTzF4dUlDQjlMRnh1SUNCcWIybHVLR05vWVhKektTQjdYRzRnSUNBZ2NtVjBkWEp1SUdOb1lYSnpMbXB2YVc0b0p5Y3BPMXh1SUNCOVhHNTlPMXh1WEc1bWRXNWpkR2x2YmlCaWRXbHNaRlpoYkhWbGN5aGthV1ptTENCamIyMXdiMjVsYm5SekxDQnVaWGRUZEhKcGJtY3NJRzlzWkZOMGNtbHVaeXdnZFhObFRHOXVaMlZ6ZEZSdmEyVnVLU0I3WEc0Z0lHeGxkQ0JqYjIxd2IyNWxiblJRYjNNZ1BTQXdMRnh1SUNBZ0lDQWdZMjl0Y0c5dVpXNTBUR1Z1SUQwZ1kyOXRjRzl1Wlc1MGN5NXNaVzVuZEdnc1hHNGdJQ0FnSUNCdVpYZFFiM01nUFNBd0xGeHVJQ0FnSUNBZ2IyeGtVRzl6SUQwZ01EdGNibHh1SUNCbWIzSWdLRHNnWTI5dGNHOXVaVzUwVUc5eklEd2dZMjl0Y0c5dVpXNTBUR1Z1T3lCamIyMXdiMjVsYm5SUWIzTXJLeWtnZTF4dUlDQWdJR3hsZENCamIyMXdiMjVsYm5RZ1BTQmpiMjF3YjI1bGJuUnpXMk52YlhCdmJtVnVkRkJ2YzEwN1hHNGdJQ0FnYVdZZ0tDRmpiMjF3YjI1bGJuUXVjbVZ0YjNabFpDa2dlMXh1SUNBZ0lDQWdhV1lnS0NGamIyMXdiMjVsYm5RdVlXUmtaV1FnSmlZZ2RYTmxURzl1WjJWemRGUnZhMlZ1S1NCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0IyWVd4MVpTQTlJRzVsZDFOMGNtbHVaeTV6YkdsalpTaHVaWGRRYjNNc0lHNWxkMUJ2Y3lBcklHTnZiWEJ2Ym1WdWRDNWpiM1Z1ZENrN1hHNGdJQ0FnSUNBZ0lIWmhiSFZsSUQwZ2RtRnNkV1V1YldGd0tHWjFibU4wYVc5dUtIWmhiSFZsTENCcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElHOXNaRlpoYkhWbElEMGdiMnhrVTNSeWFXNW5XMjlzWkZCdmN5QXJJR2xkTzF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCdmJHUldZV3gxWlM1c1pXNW5kR2dnUGlCMllXeDFaUzVzWlc1bmRHZ2dQeUJ2YkdSV1lXeDFaU0E2SUhaaGJIVmxPMXh1SUNBZ0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ0lDQmpiMjF3YjI1bGJuUXVkbUZzZFdVZ1BTQmthV1ptTG1wdmFXNG9kbUZzZFdVcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1kyOXRjRzl1Wlc1MExuWmhiSFZsSUQwZ1pHbG1aaTVxYjJsdUtHNWxkMU4wY21sdVp5NXpiR2xqWlNodVpYZFFiM01zSUc1bGQxQnZjeUFySUdOdmJYQnZibVZ1ZEM1amIzVnVkQ2twTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYm1WM1VHOXpJQ3M5SUdOdmJYQnZibVZ1ZEM1amIzVnVkRHRjYmx4dUlDQWdJQ0FnTHk4Z1EyOXRiVzl1SUdOaGMyVmNiaUFnSUNBZ0lHbG1JQ2doWTI5dGNHOXVaVzUwTG1Ga1pHVmtLU0I3WEc0Z0lDQWdJQ0FnSUc5c1pGQnZjeUFyUFNCamIyMXdiMjVsYm5RdVkyOTFiblE3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHTnZiWEJ2Ym1WdWRDNTJZV3gxWlNBOUlHUnBabVl1YW05cGJpaHZiR1JUZEhKcGJtY3VjMnhwWTJVb2IyeGtVRzl6TENCdmJHUlFiM01nS3lCamIyMXdiMjVsYm5RdVkyOTFiblFwS1R0Y2JpQWdJQ0FnSUc5c1pGQnZjeUFyUFNCamIyMXdiMjVsYm5RdVkyOTFiblE3WEc1Y2JpQWdJQ0FnSUM4dklGSmxkbVZ5YzJVZ1lXUmtJR0Z1WkNCeVpXMXZkbVVnYzI4Z2NtVnRiM1psY3lCaGNtVWdiM1YwY0hWMElHWnBjbk4wSUhSdklHMWhkR05vSUdOdmJXMXZiaUJqYjI1MlpXNTBhVzl1WEc0Z0lDQWdJQ0F2THlCVWFHVWdaR2xtWm1sdVp5QmhiR2R2Y21sMGFHMGdhWE1nZEdsbFpDQjBieUJoWkdRZ2RHaGxiaUJ5WlcxdmRtVWdiM1YwY0hWMElHRnVaQ0IwYUdseklHbHpJSFJvWlNCemFXMXdiR1Z6ZEZ4dUlDQWdJQ0FnTHk4Z2NtOTFkR1VnZEc4Z1oyVjBJSFJvWlNCa1pYTnBjbVZrSUc5MWRIQjFkQ0IzYVhSb0lHMXBibWx0WVd3Z2IzWmxjbWhsWVdRdVhHNGdJQ0FnSUNCcFppQW9ZMjl0Y0c5dVpXNTBVRzl6SUNZbUlHTnZiWEJ2Ym1WdWRITmJZMjl0Y0c5dVpXNTBVRzl6SUMwZ01WMHVZV1JrWldRcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUhSdGNDQTlJR052YlhCdmJtVnVkSE5iWTI5dGNHOXVaVzUwVUc5eklDMGdNVjA3WEc0Z0lDQWdJQ0FnSUdOdmJYQnZibVZ1ZEhOYlkyOXRjRzl1Wlc1MFVHOXpJQzBnTVYwZ1BTQmpiMjF3YjI1bGJuUnpXMk52YlhCdmJtVnVkRkJ2YzEwN1hHNGdJQ0FnSUNBZ0lHTnZiWEJ2Ym1WdWRITmJZMjl0Y0c5dVpXNTBVRzl6WFNBOUlIUnRjRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2THlCVGNHVmphV0ZzSUdOaGMyVWdhR0Z1Wkd4bElHWnZjaUIzYUdWdUlHOXVaU0IwWlhKdGFXNWhiQ0JwY3lCcFoyNXZjbVZrSUNocExtVXVJSGRvYVhSbGMzQmhZMlVwTGx4dUlDQXZMeUJHYjNJZ2RHaHBjeUJqWVhObElIZGxJRzFsY21kbElIUm9aU0IwWlhKdGFXNWhiQ0JwYm5SdklIUm9aU0J3Y21sdmNpQnpkSEpwYm1jZ1lXNWtJR1J5YjNBZ2RHaGxJR05vWVc1blpTNWNiaUFnTHk4Z1ZHaHBjeUJwY3lCdmJteDVJR0YyWVdsc1lXSnNaU0JtYjNJZ2MzUnlhVzVuSUcxdlpHVXVYRzRnSUd4bGRDQnNZWE4wUTI5dGNHOXVaVzUwSUQwZ1kyOXRjRzl1Wlc1MGMxdGpiMjF3YjI1bGJuUk1aVzRnTFNBeFhUdGNiaUFnYVdZZ0tHTnZiWEJ2Ym1WdWRFeGxiaUErSURGY2JpQWdJQ0FnSUNZbUlIUjVjR1Z2WmlCc1lYTjBRMjl0Y0c5dVpXNTBMblpoYkhWbElEMDlQU0FuYzNSeWFXNW5KMXh1SUNBZ0lDQWdKaVlnS0d4aGMzUkRiMjF3YjI1bGJuUXVZV1JrWldRZ2ZId2diR0Z6ZEVOdmJYQnZibVZ1ZEM1eVpXMXZkbVZrS1Z4dUlDQWdJQ0FnSmlZZ1pHbG1aaTVsY1hWaGJITW9KeWNzSUd4aGMzUkRiMjF3YjI1bGJuUXVkbUZzZFdVcEtTQjdYRzRnSUNBZ1kyOXRjRzl1Wlc1MGMxdGpiMjF3YjI1bGJuUk1aVzRnTFNBeVhTNTJZV3gxWlNBclBTQnNZWE4wUTI5dGNHOXVaVzUwTG5aaGJIVmxPMXh1SUNBZ0lHTnZiWEJ2Ym1WdWRITXVjRzl3S0NrN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z1kyOXRjRzl1Wlc1MGN6dGNibjFjYmx4dVpuVnVZM1JwYjI0Z1kyeHZibVZRWVhSb0tIQmhkR2dwSUh0Y2JpQWdjbVYwZFhKdUlIc2dibVYzVUc5ek9pQndZWFJvTG01bGQxQnZjeXdnWTI5dGNHOXVaVzUwY3pvZ2NHRjBhQzVqYjIxd2IyNWxiblJ6TG5Oc2FXTmxLREFwSUgwN1hHNTlYRzRpWFgwPVxuXG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5jaGFyYWN0ZXJEaWZmID0gdW5kZWZpbmVkO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZDaGFycyA9IGRpZmZDaGFycztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciBjaGFyYWN0ZXJEaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY2hhcmFjdGVyRGlmZiA9IG5ldyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UyWydkZWZhdWx0J10gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oKTtcblx0ZnVuY3Rpb24gZGlmZkNoYXJzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKSB7XG5cdCAgcmV0dXJuIGNoYXJhY3RlckRpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5a2FXWm1MMk5vWVhKaFkzUmxjaTVxY3lKZExDSnVZVzFsY3lJNld5SmthV1ptUTJoaGNuTWlMQ0pqYUdGeVlXTjBaWEpFYVdabUlpd2liMnhrVTNSeUlpd2libVYzVTNSeUlpd2liM0IwYVc5dWN5SXNJbVJwWm1ZaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN1owTkJSMmRDUVN4VExFZEJRVUZCTEZNN08wRkJTR2hDT3pzN096czdkVUpCUlU4c1NVRkJUVU1zZVVaQlFXZENMSGRGUVVGMFFqdEJRVU5CTEZOQlFWTkVMRk5CUVZRc1EwRkJiVUpGTEUxQlFXNUNMRVZCUVRKQ1F5eE5RVUV6UWl4RlFVRnRRME1zVDBGQmJrTXNSVUZCTkVNN1FVRkJSU3hUUVVGUFNDeGpRVUZqU1N4SlFVRmtMRU5CUVcxQ1NDeE5RVUZ1UWl4RlFVRXlRa01zVFVGQk0wSXNSVUZCYlVORExFOUJRVzVETEVOQlFWQTdRVUZCY1VRaUxDSm1hV3hsSWpvaVkyaGhjbUZqZEdWeUxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJRVJwWm1ZZ1puSnZiU0FuTGk5aVlYTmxKenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR05vWVhKaFkzUmxja1JwWm1ZZ1BTQnVaWGNnUkdsbVppZ3BPMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1JwWm1aRGFHRnljeWh2YkdSVGRISXNJRzVsZDFOMGNpd2diM0IwYVc5dWN5a2dleUJ5WlhSMWNtNGdZMmhoY21GamRHVnlSR2xtWmk1a2FXWm1LRzlzWkZOMGNpd2dibVYzVTNSeUxDQnZjSFJwYjI1ektUc2dmVnh1SWwxOVxuXG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy53b3JkRGlmZiA9IHVuZGVmaW5lZDtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmV29yZHMgPSBkaWZmV29yZHM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZXb3Jkc1dpdGhTcGFjZSA9IGRpZmZXb3Jkc1dpdGhTcGFjZTtcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fcGFyYW1zID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8vIEJhc2VkIG9uIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX3NjcmlwdF9pbl9Vbmljb2RlXG5cdC8vXG5cdC8vIFJhbmdlcyBhbmQgZXhjZXB0aW9uczpcblx0Ly8gTGF0aW4tMSBTdXBwbGVtZW50LCAwMDgw4oCTMDBGRlxuXHQvLyAgLSBVKzAwRDcgIMOXIE11bHRpcGxpY2F0aW9uIHNpZ25cblx0Ly8gIC0gVSswMEY3ICDDtyBEaXZpc2lvbiBzaWduXG5cdC8vIExhdGluIEV4dGVuZGVkLUEsIDAxMDDigJMwMTdGXG5cdC8vIExhdGluIEV4dGVuZGVkLUIsIDAxODDigJMwMjRGXG5cdC8vIElQQSBFeHRlbnNpb25zLCAwMjUw4oCTMDJBRlxuXHQvLyBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMsIDAyQjDigJMwMkZGXG5cdC8vICAtIFUrMDJDNyAgy4cgJiM3MTE7ICBDYXJvblxuXHQvLyAgLSBVKzAyRDggIMuYICYjNzI4OyAgQnJldmVcblx0Ly8gIC0gVSswMkQ5ICDLmSAmIzcyOTsgIERvdCBBYm92ZVxuXHQvLyAgLSBVKzAyREEgIMuaICYjNzMwOyAgUmluZyBBYm92ZVxuXHQvLyAgLSBVKzAyREIgIMubICYjNzMxOyAgT2dvbmVrXG5cdC8vICAtIFUrMDJEQyAgy5wgJiM3MzI7ICBTbWFsbCBUaWxkZVxuXHQvLyAgLSBVKzAyREQgIMudICYjNzMzOyAgRG91YmxlIEFjdXRlIEFjY2VudFxuXHQvLyBMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsLCAxRTAw4oCTMUVGRlxuXHR2YXIgZXh0ZW5kZWRXb3JkQ2hhcnMgPSAvXltBLVphLXpcXHhDMC1cXHUwMkM2XFx1MDJDOC1cXHUwMkQ3XFx1MDJERS1cXHUwMkZGXFx1MUUwMC1cXHUxRUZGXSskLztcblxuXHR2YXIgcmVXaGl0ZXNwYWNlID0gL1xcUy87XG5cblx0dmFyIHdvcmREaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovd29yZERpZmYgPSBuZXcgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCk7XG5cdHdvcmREaWZmLmVxdWFscyA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuXHQgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSkge1xuXHQgICAgbGVmdCA9IGxlZnQudG9Mb3dlckNhc2UoKTtcblx0ICAgIHJpZ2h0ID0gcmlnaHQudG9Mb3dlckNhc2UoKTtcblx0ICB9XG5cdCAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8IHRoaXMub3B0aW9ucy5pZ25vcmVXaGl0ZXNwYWNlICYmICFyZVdoaXRlc3BhY2UudGVzdChsZWZ0KSAmJiAhcmVXaGl0ZXNwYWNlLnRlc3QocmlnaHQpO1xuXHR9O1xuXHR3b3JkRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgIHZhciB0b2tlbnMgPSB2YWx1ZS5zcGxpdCgvKFxccyt8XFxiKS8pO1xuXG5cdCAgLy8gSm9pbiB0aGUgYm91bmRhcnkgc3BsaXRzIHRoYXQgd2UgZG8gbm90IGNvbnNpZGVyIHRvIGJlIGJvdW5kYXJpZXMuIFRoaXMgaXMgcHJpbWFyaWx5IHRoZSBleHRlbmRlZCBMYXRpbiBjaGFyYWN0ZXIgc2V0LlxuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aCAtIDE7IGkrKykge1xuXHQgICAgLy8gSWYgd2UgaGF2ZSBhbiBlbXB0eSBzdHJpbmcgaW4gdGhlIG5leHQgZmllbGQgYW5kIHdlIGhhdmUgb25seSB3b3JkIGNoYXJzIGJlZm9yZSBhbmQgYWZ0ZXIsIG1lcmdlXG5cdCAgICBpZiAoIXRva2Vuc1tpICsgMV0gJiYgdG9rZW5zW2kgKyAyXSAmJiBleHRlbmRlZFdvcmRDaGFycy50ZXN0KHRva2Vuc1tpXSkgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaSArIDJdKSkge1xuXHQgICAgICB0b2tlbnNbaV0gKz0gdG9rZW5zW2kgKyAyXTtcblx0ICAgICAgdG9rZW5zLnNwbGljZShpICsgMSwgMik7XG5cdCAgICAgIGktLTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXR1cm4gdG9rZW5zO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGRpZmZXb3JkcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuXHQgIG9wdGlvbnMgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9wYXJhbXMuZ2VuZXJhdGVPcHRpb25zKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyhvcHRpb25zLCB7IGlnbm9yZVdoaXRlc3BhY2U6IHRydWUgfSk7XG5cdCAgcmV0dXJuIHdvcmREaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZGlmZldvcmRzV2l0aFNwYWNlKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKSB7XG5cdCAgcmV0dXJuIHdvcmREaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDNkdmNtUXVhbk1pWFN3aWJtRnRaWE1pT2xzaVpHbG1abGR2Y21Seklpd2laR2xtWmxkdmNtUnpWMmwwYUZOd1lXTmxJaXdpWlhoMFpXNWtaV1JYYjNKa1EyaGhjbk1pTENKeVpWZG9hWFJsYzNCaFkyVWlMQ0ozYjNKa1JHbG1aaUlzSW1WeGRXRnNjeUlzSW14bFpuUWlMQ0p5YVdkb2RDSXNJbTl3ZEdsdmJuTWlMQ0pwWjI1dmNtVkRZWE5sSWl3aWRHOU1iM2RsY2tOaGMyVWlMQ0pwWjI1dmNtVlhhR2wwWlhOd1lXTmxJaXdpZEdWemRDSXNJblJ2YTJWdWFYcGxJaXdpZG1Gc2RXVWlMQ0owYjJ0bGJuTWlMQ0p6Y0d4cGRDSXNJbWtpTENKc1pXNW5kR2dpTENKemNHeHBZMlVpTENKdmJHUlRkSElpTENKdVpYZFRkSElpTENKa2FXWm1JbDBzSW0xaGNIQnBibWR6SWpvaU96czdPMmREUVcxRVowSkJMRk1zUjBGQlFVRXNVenQ1UkVGTFFVTXNhMElzUjBGQlFVRXNhMEk3TzBGQmVFUm9RanM3T3p0MVFrRkRRVHM3T3p0M1FrRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU3hKUVVGTlF5eHZRa0ZCYjBJc0swUkJRVEZDT3p0QlFVVkJMRWxCUVUxRExHVkJRV1VzU1VGQmNrSTdPMEZCUlU4c1NVRkJUVU1zSzBWQlFWY3NkMFZCUVdwQ08wRkJRMUJCTEZOQlFWTkRMRTFCUVZRc1IwRkJhMElzVlVGQlUwTXNTVUZCVkN4RlFVRmxReXhMUVVGbUxFVkJRWE5DTzBGQlEzUkRMRTFCUVVrc1MwRkJTME1zVDBGQlRDeERRVUZoUXl4VlFVRnFRaXhGUVVFMlFqdEJRVU16UWtnc1YwRkJUMEVzUzBGQlMwa3NWMEZCVEN4RlFVRlFPMEZCUTBGSUxGbEJRVkZCTEUxQlFVMUhMRmRCUVU0c1JVRkJVanRCUVVORU8wRkJRMFFzVTBGQlQwb3NVMEZCVTBNc1MwRkJWQ3hKUVVGdFFpeExRVUZMUXl4UFFVRk1MRU5CUVdGSExHZENRVUZpTEVsQlFXbERMRU5CUVVOU0xHRkJRV0ZUTEVsQlFXSXNRMEZCYTBKT0xFbEJRV3hDTEVOQlFXeERMRWxCUVRaRUxFTkJRVU5JTEdGQlFXRlRMRWxCUVdJc1EwRkJhMEpNTEV0QlFXeENMRU5CUVhoR08wRkJRMFFzUTBGT1JEdEJRVTlCU0N4VFFVRlRVeXhSUVVGVUxFZEJRVzlDTEZWQlFWTkRMRXRCUVZRc1JVRkJaMEk3UVVGRGJFTXNUVUZCU1VNc1UwRkJVMFFzVFVGQlRVVXNTMEZCVGl4RFFVRlpMRlZCUVZvc1EwRkJZanM3UVVGRlFUdEJRVU5CTEU5QlFVc3NTVUZCU1VNc1NVRkJTU3hEUVVGaUxFVkJRV2RDUVN4SlFVRkpSaXhQUVVGUFJ5eE5RVUZRTEVkQlFXZENMRU5CUVhCRExFVkJRWFZEUkN4SFFVRjJReXhGUVVFMFF6dEJRVU14UXp0QlFVTkJMRkZCUVVrc1EwRkJRMFlzVDBGQlQwVXNTVUZCU1N4RFFVRllMRU5CUVVRc1NVRkJhMEpHTEU5QlFVOUZMRWxCUVVrc1EwRkJXQ3hEUVVGc1FpeEpRVU5MWml4clFrRkJhMEpWTEVsQlFXeENMRU5CUVhWQ1J5eFBRVUZQUlN4RFFVRlFMRU5CUVhaQ0xFTkJSRXdzU1VGRlMyWXNhMEpCUVd0Q1ZTeEpRVUZzUWl4RFFVRjFRa2NzVDBGQlQwVXNTVUZCU1N4RFFVRllMRU5CUVhaQ0xFTkJSbFFzUlVGRlowUTdRVUZET1VOR0xHRkJRVTlGTEVOQlFWQXNTMEZCWVVZc1QwRkJUMFVzU1VGQlNTeERRVUZZTEVOQlFXSTdRVUZEUVVZc1lVRkJUMGtzVFVGQlVDeERRVUZqUml4SlFVRkpMRU5CUVd4Q0xFVkJRWEZDTEVOQlFYSkNPMEZCUTBGQk8wRkJRMFE3UVVGRFJqczdRVUZGUkN4VFFVRlBSaXhOUVVGUU8wRkJRMFFzUTBGb1FrUTdPMEZCYTBKUExGTkJRVk5tTEZOQlFWUXNRMEZCYlVKdlFpeE5RVUZ1UWl4RlFVRXlRa01zVFVGQk0wSXNSVUZCYlVOaUxFOUJRVzVETEVWQlFUUkRPMEZCUTJwRVFTeFpRVUZWTERoRlFVRm5Ra0VzVDBGQmFFSXNSVUZCZVVJc1JVRkJRMGNzYTBKQlFXdENMRWxCUVc1Q0xFVkJRWHBDTEVOQlFWWTdRVUZEUVN4VFFVRlBVQ3hUUVVGVGEwSXNTVUZCVkN4RFFVRmpSaXhOUVVGa0xFVkJRWE5DUXl4TlFVRjBRaXhGUVVFNFFtSXNUMEZCT1VJc1EwRkJVRHRCUVVORU96dEJRVVZOTEZOQlFWTlFMR3RDUVVGVUxFTkJRVFJDYlVJc1RVRkJOVUlzUlVGQmIwTkRMRTFCUVhCRExFVkJRVFJEWWl4UFFVRTFReXhGUVVGeFJEdEJRVU14UkN4VFFVRlBTaXhUUVVGVGEwSXNTVUZCVkN4RFFVRmpSaXhOUVVGa0xFVkJRWE5DUXl4TlFVRjBRaXhGUVVFNFFtSXNUMEZCT1VJc1EwRkJVRHRCUVVORUlpd2labWxzWlNJNkluZHZjbVF1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ1JHbG1aaUJtY205dElDY3VMMkpoYzJVbk8xeHVhVzF3YjNKMElIdG5aVzVsY21GMFpVOXdkR2x2Ym5OOUlHWnliMjBnSnk0dUwzVjBhV3d2Y0dGeVlXMXpKenRjYmx4dUx5OGdRbUZ6WldRZ2IyNGdhSFIwY0hNNkx5OWxiaTUzYVd0cGNHVmthV0V1YjNKbkwzZHBhMmt2VEdGMGFXNWZjMk55YVhCMFgybHVYMVZ1YVdOdlpHVmNiaTh2WEc0dkx5QlNZVzVuWlhNZ1lXNWtJR1Y0WTJWd2RHbHZibk02WEc0dkx5Qk1ZWFJwYmkweElGTjFjSEJzWlcxbGJuUXNJREF3T0REaWdKTXdNRVpHWEc0dkx5QWdMU0JWS3pBd1JEY2dJTU9YSUUxMWJIUnBjR3hwWTJGMGFXOXVJSE5wWjI1Y2JpOHZJQ0F0SUZVck1EQkdOeUFndzdjZ1JHbDJhWE5wYjI0Z2MybG5ibHh1THk4Z1RHRjBhVzRnUlhoMFpXNWtaV1F0UVN3Z01ERXdNT0tBa3pBeE4wWmNiaTh2SUV4aGRHbHVJRVY0ZEdWdVpHVmtMVUlzSURBeE9ERGlnSk13TWpSR1hHNHZMeUJKVUVFZ1JYaDBaVzV6YVc5dWN5d2dNREkxTU9LQWt6QXlRVVpjYmk4dklGTndZV05wYm1jZ1RXOWthV1pwWlhJZ1RHVjBkR1Z5Y3l3Z01ESkNNT0tBa3pBeVJrWmNiaTh2SUNBdElGVXJNREpETnlBZ3k0Y2dKaU0zTVRFN0lDQkRZWEp2Ymx4dUx5OGdJQzBnVlNzd01rUTRJQ0RMbUNBbUl6Y3lPRHNnSUVKeVpYWmxYRzR2THlBZ0xTQlZLekF5UkRrZ0lNdVpJQ1lqTnpJNU95QWdSRzkwSUVGaWIzWmxYRzR2THlBZ0xTQlZLekF5UkVFZ0lNdWFJQ1lqTnpNd095QWdVbWx1WnlCQlltOTJaVnh1THk4Z0lDMGdWU3N3TWtSQ0lDRExteUFtSXpjek1Uc2dJRTluYjI1bGExeHVMeThnSUMwZ1ZTc3dNa1JESUNETG5DQW1JemN6TWpzZ0lGTnRZV3hzSUZScGJHUmxYRzR2THlBZ0xTQlZLekF5UkVRZ0lNdWRJQ1lqTnpNek95QWdSRzkxWW14bElFRmpkWFJsSUVGalkyVnVkRnh1THk4Z1RHRjBhVzRnUlhoMFpXNWtaV1FnUVdSa2FYUnBiMjVoYkN3Z01VVXdNT0tBa3pGRlJrWmNibU52Ym5OMElHVjRkR1Z1WkdWa1YyOXlaRU5vWVhKeklEMGdMMTViWVMxNlFTMWFYRngxZTBNd2ZTMWNYSFY3UmtaOVhGeDFlMFE0ZlMxY1hIVjdSalo5WEZ4MWUwWTRmUzFjWEhWN01rTTJmVnhjZFhzeVF6aDlMVnhjZFhzeVJEZDlYRngxZXpKRVJYMHRYRngxZXpKR1JuMWNYSFY3TVVVd01IMHRYRngxZXpGRlJrWjlYU3NrTDNVN1hHNWNibU52Ym5OMElISmxWMmhwZEdWemNHRmpaU0E5SUM5Y1hGTXZPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdkMjl5WkVScFptWWdQU0J1WlhjZ1JHbG1aaWdwTzF4dWQyOXlaRVJwWm1ZdVpYRjFZV3h6SUQwZ1puVnVZM1JwYjI0b2JHVm1kQ3dnY21sbmFIUXBJSHRjYmlBZ2FXWWdLSFJvYVhNdWIzQjBhVzl1Y3k1cFoyNXZjbVZEWVhObEtTQjdYRzRnSUNBZ2JHVm1kQ0E5SUd4bFpuUXVkRzlNYjNkbGNrTmhjMlVvS1R0Y2JpQWdJQ0J5YVdkb2RDQTlJSEpwWjJoMExuUnZURzkzWlhKRFlYTmxLQ2s3WEc0Z0lIMWNiaUFnY21WMGRYSnVJR3hsWm5RZ1BUMDlJSEpwWjJoMElIeDhJQ2gwYUdsekxtOXdkR2x2Ym5NdWFXZHViM0psVjJocGRHVnpjR0ZqWlNBbUppQWhjbVZYYUdsMFpYTndZV05sTG5SbGMzUW9iR1ZtZENrZ0ppWWdJWEpsVjJocGRHVnpjR0ZqWlM1MFpYTjBLSEpwWjJoMEtTazdYRzU5TzF4dWQyOXlaRVJwWm1ZdWRHOXJaVzVwZW1VZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0JzWlhRZ2RHOXJaVzV6SUQwZ2RtRnNkV1V1YzNCc2FYUW9MeWhjWEhNcmZGeGNZaWt2S1R0Y2JseHVJQ0F2THlCS2IybHVJSFJvWlNCaWIzVnVaR0Z5ZVNCemNHeHBkSE1nZEdoaGRDQjNaU0JrYnlCdWIzUWdZMjl1YzJsa1pYSWdkRzhnWW1VZ1ltOTFibVJoY21sbGN5NGdWR2hwY3lCcGN5QndjbWx0WVhKcGJIa2dkR2hsSUdWNGRHVnVaR1ZrSUV4aGRHbHVJR05vWVhKaFkzUmxjaUJ6WlhRdVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEc5clpXNXpMbXhsYm1kMGFDQXRJREU3SUdrckt5a2dlMXh1SUNBZ0lDOHZJRWxtSUhkbElHaGhkbVVnWVc0Z1pXMXdkSGtnYzNSeWFXNW5JR2x1SUhSb1pTQnVaWGgwSUdacFpXeGtJR0Z1WkNCM1pTQm9ZWFpsSUc5dWJIa2dkMjl5WkNCamFHRnljeUJpWldadmNtVWdZVzVrSUdGbWRHVnlMQ0J0WlhKblpWeHVJQ0FnSUdsbUlDZ2hkRzlyWlc1elcya2dLeUF4WFNBbUppQjBiMnRsYm5OYmFTQXJJREpkWEc0Z0lDQWdJQ0FnSUNBZ0ppWWdaWGgwWlc1a1pXUlhiM0prUTJoaGNuTXVkR1Z6ZENoMGIydGxibk5iYVYwcFhHNGdJQ0FnSUNBZ0lDQWdKaVlnWlhoMFpXNWtaV1JYYjNKa1EyaGhjbk11ZEdWemRDaDBiMnRsYm5OYmFTQXJJREpkS1NrZ2UxeHVJQ0FnSUNBZ2RHOXJaVzV6VzJsZElDczlJSFJ2YTJWdWMxdHBJQ3NnTWwwN1hHNGdJQ0FnSUNCMGIydGxibk11YzNCc2FXTmxLR2tnS3lBeExDQXlLVHRjYmlBZ0lDQWdJR2t0TFR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnZEc5clpXNXpPMXh1ZlR0Y2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUnBabVpYYjNKa2N5aHZiR1JUZEhJc0lHNWxkMU4wY2l3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0J2Y0hScGIyNXpJRDBnWjJWdVpYSmhkR1ZQY0hScGIyNXpLRzl3ZEdsdmJuTXNJSHRwWjI1dmNtVlhhR2wwWlhOd1lXTmxPaUIwY25WbGZTazdYRzRnSUhKbGRIVnliaUIzYjNKa1JHbG1aaTVrYVdabUtHOXNaRk4wY2l3Z2JtVjNVM1J5TENCdmNIUnBiMjV6S1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1JwWm1aWGIzSmtjMWRwZEdoVGNHRmpaU2h2YkdSVGRISXNJRzVsZDFOMGNpd2diM0IwYVc5dWN5a2dlMXh1SUNCeVpYUjFjbTRnZDI5eVpFUnBabVl1WkdsbVppaHZiR1JUZEhJc0lHNWxkMU4wY2l3Z2IzQjBhVzl1Y3lrN1hHNTlYRzRpWFgwPVxuXG5cbi8qKiovIH0pLFxuLyogNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9nZW5lcmF0ZU9wdGlvbnMgPSBnZW5lcmF0ZU9wdGlvbnM7XG5cdGZ1bmN0aW9uIGdlbmVyYXRlT3B0aW9ucyhvcHRpb25zLCBkZWZhdWx0cykge1xuXHQgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgZGVmYXVsdHMuY2FsbGJhY2sgPSBvcHRpb25zO1xuXHQgIH0gZWxzZSBpZiAob3B0aW9ucykge1xuXHQgICAgZm9yICh2YXIgbmFtZSBpbiBvcHRpb25zKSB7XG5cdCAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdCAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG5cdCAgICAgICAgZGVmYXVsdHNbbmFtZV0gPSBvcHRpb25zW25hbWVdO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXHQgIHJldHVybiBkZWZhdWx0cztcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkxZEdsc0wzQmhjbUZ0Y3k1cWN5SmRMQ0p1WVcxbGN5STZXeUpuWlc1bGNtRjBaVTl3ZEdsdmJuTWlMQ0p2Y0hScGIyNXpJaXdpWkdWbVlYVnNkSE1pTENKallXeHNZbUZqYXlJc0ltNWhiV1VpTENKb1lYTlBkMjVRY205d1pYSjBlU0pkTENKdFlYQndhVzVuY3lJNklqczdPMmREUVVGblFrRXNaU3hIUVVGQlFTeGxPMEZCUVZRc1UwRkJVMEVzWlVGQlZDeERRVUY1UWtNc1QwRkJla0lzUlVGQmEwTkRMRkZCUVd4RExFVkJRVFJETzBGQlEycEVMRTFCUVVrc1QwRkJUMFFzVDBGQlVDeExRVUZ0UWl4VlFVRjJRaXhGUVVGdFF6dEJRVU5xUTBNc1lVRkJVME1zVVVGQlZDeEhRVUZ2UWtZc1QwRkJjRUk3UVVGRFJDeEhRVVpFTEUxQlJVOHNTVUZCU1VFc1QwRkJTaXhGUVVGaE8wRkJRMnhDTEZOQlFVc3NTVUZCU1Vjc1NVRkJWQ3hKUVVGcFFrZ3NUMEZCYWtJc1JVRkJNRUk3UVVGRGVFSTdRVUZEUVN4VlFVRkpRU3hSUVVGUlNTeGpRVUZTTEVOQlFYVkNSQ3hKUVVGMlFpeERRVUZLTEVWQlFXdERPMEZCUTJoRFJpeHBRa0ZCVTBVc1NVRkJWQ3hKUVVGcFFrZ3NVVUZCVVVjc1NVRkJVaXhEUVVGcVFqdEJRVU5FTzBGQlEwWTdRVUZEUmp0QlFVTkVMRk5CUVU5R0xGRkJRVkE3UVVGRFJDSXNJbVpwYkdVaU9pSndZWEpoYlhNdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdablZ1WTNScGIyNGdaMlZ1WlhKaGRHVlBjSFJwYjI1ektHOXdkR2x2Ym5Nc0lHUmxabUYxYkhSektTQjdYRzRnSUdsbUlDaDBlWEJsYjJZZ2IzQjBhVzl1Y3lBOVBUMGdKMloxYm1OMGFXOXVKeWtnZTF4dUlDQWdJR1JsWm1GMWJIUnpMbU5oYkd4aVlXTnJJRDBnYjNCMGFXOXVjenRjYmlBZ2ZTQmxiSE5sSUdsbUlDaHZjSFJwYjI1ektTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2JtRnRaU0JwYmlCdmNIUnBiMjV6S1NCN1hHNGdJQ0FnSUNBdktpQnBjM1JoYm1KMWJDQnBaMjV2Y21VZ1pXeHpaU0FxTDF4dUlDQWdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTa3BJSHRjYmlBZ0lDQWdJQ0FnWkdWbVlYVnNkSE5iYm1GdFpWMGdQU0J2Y0hScGIyNXpXMjVoYldWZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnWkdWbVlYVnNkSE03WEc1OVhHNGlYWDA9XG5cblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmxpbmVEaWZmID0gdW5kZWZpbmVkO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZMaW5lcyA9IGRpZmZMaW5lcztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZlRyaW1tZWRMaW5lcyA9IGRpZmZUcmltbWVkTGluZXM7XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfYmFzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9iYXNlKTtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3BhcmFtcyA9IF9fd2VicGFja19yZXF1aXJlX18oNCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2Z1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciBsaW5lRGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2xpbmVEaWZmID0gbmV3IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZTJbJ2RlZmF1bHQnXSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLygpO1xuXHRsaW5lRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgIHZhciByZXRMaW5lcyA9IFtdLFxuXHQgICAgICBsaW5lc0FuZE5ld2xpbmVzID0gdmFsdWUuc3BsaXQoLyhcXG58XFxyXFxuKS8pO1xuXG5cdCAgLy8gSWdub3JlIHRoZSBmaW5hbCBlbXB0eSB0b2tlbiB0aGF0IG9jY3VycyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBhIG5ldyBsaW5lXG5cdCAgaWYgKCFsaW5lc0FuZE5ld2xpbmVzW2xpbmVzQW5kTmV3bGluZXMubGVuZ3RoIC0gMV0pIHtcblx0ICAgIGxpbmVzQW5kTmV3bGluZXMucG9wKCk7XG5cdCAgfVxuXG5cdCAgLy8gTWVyZ2UgdGhlIGNvbnRlbnQgYW5kIGxpbmUgc2VwYXJhdG9ycyBpbnRvIHNpbmdsZSB0b2tlbnNcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzQW5kTmV3bGluZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgIHZhciBsaW5lID0gbGluZXNBbmROZXdsaW5lc1tpXTtcblxuXHQgICAgaWYgKGkgJSAyICYmICF0aGlzLm9wdGlvbnMubmV3bGluZUlzVG9rZW4pIHtcblx0ICAgICAgcmV0TGluZXNbcmV0TGluZXMubGVuZ3RoIC0gMV0gKz0gbGluZTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSkge1xuXHQgICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTtcblx0ICAgICAgfVxuXHQgICAgICByZXRMaW5lcy5wdXNoKGxpbmUpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiByZXRMaW5lcztcblx0fTtcblxuXHRmdW5jdGlvbiBkaWZmTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG5cdCAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKTtcblx0fVxuXHRmdW5jdGlvbiBkaWZmVHJpbW1lZExpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuXHQgIHZhciBvcHRpb25zID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfcGFyYW1zLmdlbmVyYXRlT3B0aW9ucykgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oY2FsbGJhY2ssIHsgaWdub3JlV2hpdGVzcGFjZTogdHJ1ZSB9KTtcblx0ICByZXR1cm4gbGluZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5a2FXWm1MMnhwYm1VdWFuTWlYU3dpYm1GdFpYTWlPbHNpWkdsbVpreHBibVZ6SWl3aVpHbG1abFJ5YVcxdFpXUk1hVzVsY3lJc0lteHBibVZFYVdabUlpd2lkRzlyWlc1cGVtVWlMQ0oyWVd4MVpTSXNJbkpsZEV4cGJtVnpJaXdpYkdsdVpYTkJibVJPWlhkc2FXNWxjeUlzSW5Od2JHbDBJaXdpYkdWdVozUm9JaXdpY0c5d0lpd2lhU0lzSW14cGJtVWlMQ0p2Y0hScGIyNXpJaXdpYm1WM2JHbHVaVWx6Vkc5clpXNGlMQ0pwWjI1dmNtVlhhR2wwWlhOd1lXTmxJaXdpZEhKcGJTSXNJbkIxYzJnaUxDSnZiR1JUZEhJaUxDSnVaWGRUZEhJaUxDSmpZV3hzWW1GamF5SXNJbVJwWm1ZaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN1owTkJPRUpuUWtFc1V5eEhRVUZCUVN4VE8zbEVRVU5CUXl4blFpeEhRVUZCUVN4blFqczdRVUV2UW1oQ096czdPM1ZDUVVOQk96czdPM1ZDUVVWUExFbEJRVTFETEN0RlFVRlhMSGRGUVVGcVFqdEJRVU5RUVN4VFFVRlRReXhSUVVGVUxFZEJRVzlDTEZWQlFWTkRMRXRCUVZRc1JVRkJaMEk3UVVGRGJFTXNUVUZCU1VNc1YwRkJWeXhGUVVGbU8wRkJRVUVzVFVGRFNVTXNiVUpCUVcxQ1JpeE5RVUZOUnl4TFFVRk9MRU5CUVZrc1YwRkJXaXhEUVVSMlFqczdRVUZIUVR0QlFVTkJMRTFCUVVrc1EwRkJRMFFzYVVKQlFXbENRU3hwUWtGQmFVSkZMRTFCUVdwQ0xFZEJRVEJDTEVOQlFUTkRMRU5CUVV3c1JVRkJiMFE3UVVGRGJFUkdMSEZDUVVGcFFrY3NSMEZCYWtJN1FVRkRSRHM3UVVGRlJEdEJRVU5CTEU5QlFVc3NTVUZCU1VNc1NVRkJTU3hEUVVGaUxFVkJRV2RDUVN4SlFVRkpTaXhwUWtGQmFVSkZMRTFCUVhKRExFVkJRVFpEUlN4SFFVRTNReXhGUVVGclJEdEJRVU5vUkN4UlFVRkpReXhQUVVGUFRDeHBRa0ZCYVVKSkxFTkJRV3BDTEVOQlFWZzdPMEZCUlVFc1VVRkJTVUVzU1VGQlNTeERRVUZLTEVsQlFWTXNRMEZCUXl4TFFVRkxSU3hQUVVGTUxFTkJRV0ZETEdOQlFUTkNMRVZCUVRKRE8wRkJRM3BEVWl4bFFVRlRRU3hUUVVGVFJ5eE5RVUZVTEVkQlFXdENMRU5CUVROQ0xFdEJRV2xEUnl4SlFVRnFRenRCUVVORUxFdEJSa1FzVFVGRlR6dEJRVU5NTEZWQlFVa3NTMEZCUzBNc1QwRkJUQ3hEUVVGaFJTeG5Ra0ZCYWtJc1JVRkJiVU03UVVGRGFrTklMR1ZCUVU5QkxFdEJRVXRKTEVsQlFVd3NSVUZCVUR0QlFVTkVPMEZCUTBSV0xHVkJRVk5YTEVsQlFWUXNRMEZCWTB3c1NVRkJaRHRCUVVORU8wRkJRMFk3TzBGQlJVUXNVMEZCVDA0c1VVRkJVRHRCUVVORUxFTkJlRUpFT3p0QlFUQkNUeXhUUVVGVFRDeFRRVUZVTEVOQlFXMUNhVUlzVFVGQmJrSXNSVUZCTWtKRExFMUJRVE5DTEVWQlFXMURReXhSUVVGdVF5eEZRVUUyUXp0QlFVRkZMRk5CUVU5cVFpeFRRVUZUYTBJc1NVRkJWQ3hEUVVGalNDeE5RVUZrTEVWQlFYTkNReXhOUVVGMFFpeEZRVUU0UWtNc1VVRkJPVUlzUTBGQlVEdEJRVUZwUkR0QlFVTm9SeXhUUVVGVGJFSXNaMEpCUVZRc1EwRkJNRUpuUWl4TlFVRXhRaXhGUVVGclEwTXNUVUZCYkVNc1JVRkJNRU5ETEZGQlFURkRMRVZCUVc5RU8wRkJRM3BFTEUxQlFVbFFMRlZCUVZVc09FVkJRV2RDVHl4UlFVRm9RaXhGUVVFd1FpeEZRVUZEVEN4clFrRkJhMElzU1VGQmJrSXNSVUZCTVVJc1EwRkJaRHRCUVVOQkxGTkJRVTlhTEZOQlFWTnJRaXhKUVVGVUxFTkJRV05JTEUxQlFXUXNSVUZCYzBKRExFMUJRWFJDTEVWQlFUaENUaXhQUVVFNVFpeERRVUZRTzBGQlEwUWlMQ0ptYVd4bElqb2liR2x1WlM1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQkVhV1ptSUdaeWIyMGdKeTR2WW1GelpTYzdYRzVwYlhCdmNuUWdlMmRsYm1WeVlYUmxUM0IwYVc5dWMzMGdabkp2YlNBbkxpNHZkWFJwYkM5d1lYSmhiWE1uTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYkdsdVpVUnBabVlnUFNCdVpYY2dSR2xtWmlncE8xeHViR2x1WlVScFptWXVkRzlyWlc1cGVtVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCc1pYUWdjbVYwVEdsdVpYTWdQU0JiWFN4Y2JpQWdJQ0FnSUd4cGJtVnpRVzVrVG1WM2JHbHVaWE1nUFNCMllXeDFaUzV6Y0d4cGRDZ3ZLRnhjYm54Y1hISmNYRzRwTHlrN1hHNWNiaUFnTHk4Z1NXZHViM0psSUhSb1pTQm1hVzVoYkNCbGJYQjBlU0IwYjJ0bGJpQjBhR0YwSUc5alkzVnljeUJwWmlCMGFHVWdjM1J5YVc1bklHVnVaSE1nZDJsMGFDQmhJRzVsZHlCc2FXNWxYRzRnSUdsbUlDZ2hiR2x1WlhOQmJtUk9aWGRzYVc1bGMxdHNhVzVsYzBGdVpFNWxkMnhwYm1WekxteGxibWQwYUNBdElERmRLU0I3WEc0Z0lDQWdiR2x1WlhOQmJtUk9aWGRzYVc1bGN5NXdiM0FvS1R0Y2JpQWdmVnh1WEc0Z0lDOHZJRTFsY21kbElIUm9aU0JqYjI1MFpXNTBJR0Z1WkNCc2FXNWxJSE5sY0dGeVlYUnZjbk1nYVc1MGJ5QnphVzVuYkdVZ2RHOXJaVzV6WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2diR2x1WlhOQmJtUk9aWGRzYVc1bGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR3hsZENCc2FXNWxJRDBnYkdsdVpYTkJibVJPWlhkc2FXNWxjMXRwWFR0Y2JseHVJQ0FnSUdsbUlDaHBJQ1VnTWlBbUppQWhkR2hwY3k1dmNIUnBiMjV6TG01bGQyeHBibVZKYzFSdmEyVnVLU0I3WEc0Z0lDQWdJQ0J5WlhSTWFXNWxjMXR5WlhSTWFXNWxjeTVzWlc1bmRHZ2dMU0F4WFNBclBTQnNhVzVsTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NXZjSFJwYjI1ekxtbG5ibTl5WlZkb2FYUmxjM0JoWTJVcElIdGNiaUFnSUNBZ0lDQWdiR2x1WlNBOUlHeHBibVV1ZEhKcGJTZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdjbVYwVEdsdVpYTXVjSFZ6YUNoc2FXNWxLVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdjbVYwVEdsdVpYTTdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pHbG1aa3hwYm1WektHOXNaRk4wY2l3Z2JtVjNVM1J5TENCallXeHNZbUZqYXlrZ2V5QnlaWFIxY200Z2JHbHVaVVJwWm1ZdVpHbG1aaWh2YkdSVGRISXNJRzVsZDFOMGNpd2dZMkZzYkdKaFkyc3BPeUI5WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWkdsbVpsUnlhVzF0WldSTWFXNWxjeWh2YkdSVGRISXNJRzVsZDFOMGNpd2dZMkZzYkdKaFkyc3BJSHRjYmlBZ2JHVjBJRzl3ZEdsdmJuTWdQU0JuWlc1bGNtRjBaVTl3ZEdsdmJuTW9ZMkZzYkdKaFkyc3NJSHRwWjI1dmNtVlhhR2wwWlhOd1lXTmxPaUIwY25WbGZTazdYRzRnSUhKbGRIVnliaUJzYVc1bFJHbG1aaTVrYVdabUtHOXNaRk4wY2l3Z2JtVjNVM1J5TENCdmNIUnBiMjV6S1R0Y2JuMWNiaUpkZlE9PVxuXG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5zZW50ZW5jZURpZmYgPSB1bmRlZmluZWQ7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZlNlbnRlbmNlcyA9IGRpZmZTZW50ZW5jZXM7XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfYmFzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9iYXNlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgc2VudGVuY2VEaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovc2VudGVuY2VEaWZmID0gbmV3IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZTJbJ2RlZmF1bHQnXSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLygpO1xuXHRzZW50ZW5jZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICByZXR1cm4gdmFsdWUuc3BsaXQoLyhcXFMuKz9bLiE/XSkoPz1cXHMrfCQpLyk7XG5cdH07XG5cblx0ZnVuY3Rpb24gZGlmZlNlbnRlbmNlcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcblx0ICByZXR1cm4gc2VudGVuY2VEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlrYVdabUwzTmxiblJsYm1ObExtcHpJbDBzSW01aGJXVnpJanBiSW1ScFptWlRaVzUwWlc1alpYTWlMQ0p6Wlc1MFpXNWpaVVJwWm1ZaUxDSjBiMnRsYm1sNlpTSXNJblpoYkhWbElpd2ljM0JzYVhRaUxDSnZiR1JUZEhJaUxDSnVaWGRUZEhJaUxDSmpZV3hzWW1GamF5SXNJbVJwWm1ZaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN1owTkJVV2RDUVN4aExFZEJRVUZCTEdFN08wRkJVbWhDT3pzN096czdkVUpCUjA4c1NVRkJUVU1zZFVaQlFXVXNkMFZCUVhKQ08wRkJRMUJCTEdGQlFXRkRMRkZCUVdJc1IwRkJkMElzVlVGQlUwTXNTMEZCVkN4RlFVRm5RanRCUVVOMFF5eFRRVUZQUVN4TlFVRk5ReXhMUVVGT0xFTkJRVmtzZFVKQlFWb3NRMEZCVUR0QlFVTkVMRU5CUmtRN08wRkJTVThzVTBGQlUwb3NZVUZCVkN4RFFVRjFRa3NzVFVGQmRrSXNSVUZCSzBKRExFMUJRUzlDTEVWQlFYVkRReXhSUVVGMlF5eEZRVUZwUkR0QlFVRkZMRk5CUVU5T0xHRkJRV0ZQTEVsQlFXSXNRMEZCYTBKSUxFMUJRV3hDTEVWQlFUQkNReXhOUVVFeFFpeEZRVUZyUTBNc1VVRkJiRU1zUTBGQlVEdEJRVUZ4UkNJc0ltWnBiR1VpT2lKelpXNTBaVzVqWlM1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQkVhV1ptSUdaeWIyMGdKeTR2WW1GelpTYzdYRzVjYmx4dVpYaHdiM0owSUdOdmJuTjBJSE5sYm5SbGJtTmxSR2xtWmlBOUlHNWxkeUJFYVdabUtDazdYRzV6Wlc1MFpXNWpaVVJwWm1ZdWRHOXJaVzVwZW1VZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdkbUZzZFdVdWMzQnNhWFFvTHloY1hGTXVLejliTGlFL1hTa29QejFjWEhNcmZDUXBMeWs3WEc1OU8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaR2xtWmxObGJuUmxibU5sY3lodmJHUlRkSElzSUc1bGQxTjBjaXdnWTJGc2JHSmhZMnNwSUhzZ2NtVjBkWEp1SUhObGJuUmxibU5sUkdsbVppNWthV1ptS0c5c1pGTjBjaXdnYm1WM1UzUnlMQ0JqWVd4c1ltRmpheWs3SUgxY2JpSmRmUT09XG5cblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmNzc0RpZmYgPSB1bmRlZmluZWQ7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkNzcyA9IGRpZmZDc3M7XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfYmFzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9iYXNlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgY3NzRGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2Nzc0RpZmYgPSBuZXcgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCk7XG5cdGNzc0RpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICByZXR1cm4gdmFsdWUuc3BsaXQoLyhbe306OyxdfFxccyspLyk7XG5cdH07XG5cblx0ZnVuY3Rpb24gZGlmZkNzcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcblx0ICByZXR1cm4gY3NzRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5a2FXWm1MMk56Y3k1cWN5SmRMQ0p1WVcxbGN5STZXeUprYVdabVEzTnpJaXdpWTNOelJHbG1aaUlzSW5SdmEyVnVhWHBsSWl3aWRtRnNkV1VpTENKemNHeHBkQ0lzSW05c1pGTjBjaUlzSW01bGQxTjBjaUlzSW1OaGJHeGlZV05ySWl3aVpHbG1aaUpkTENKdFlYQndhVzVuY3lJNklqczdPenRuUTBGUFowSkJMRThzUjBGQlFVRXNUenM3UVVGUWFFSTdPenM3T3p0MVFrRkZUeXhKUVVGTlF5dzJSVUZCVlN4M1JVRkJhRUk3UVVGRFVFRXNVVUZCVVVNc1VVRkJVaXhIUVVGdFFpeFZRVUZUUXl4TFFVRlVMRVZCUVdkQ08wRkJRMnBETEZOQlFVOUJMRTFCUVUxRExFdEJRVTRzUTBGQldTeGxRVUZhTEVOQlFWQTdRVUZEUkN4RFFVWkVPenRCUVVsUExGTkJRVk5LTEU5QlFWUXNRMEZCYVVKTExFMUJRV3BDTEVWQlFYbENReXhOUVVGNlFpeEZRVUZwUTBNc1VVRkJha01zUlVGQk1rTTdRVUZCUlN4VFFVRlBUaXhSUVVGUlR5eEpRVUZTTEVOQlFXRklMRTFCUVdJc1JVRkJjVUpETEUxQlFYSkNMRVZCUVRaQ1F5eFJRVUUzUWl4RFFVRlFPMEZCUVdkRUlpd2labWxzWlNJNkltTnpjeTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCRWFXWm1JR1p5YjIwZ0p5NHZZbUZ6WlNjN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCamMzTkVhV1ptSUQwZ2JtVjNJRVJwWm1Zb0tUdGNibU56YzBScFptWXVkRzlyWlc1cGVtVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnZG1Gc2RXVXVjM0JzYVhRb0x5aGJlMzA2T3l4ZGZGeGNjeXNwTHlrN1hHNTlPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWkdsbVprTnpjeWh2YkdSVGRISXNJRzVsZDFOMGNpd2dZMkZzYkdKaFkyc3BJSHNnY21WMGRYSnVJR056YzBScFptWXVaR2xtWmlodmJHUlRkSElzSUc1bGQxTjBjaXdnWTJGc2JHSmhZMnNwT3lCOVhHNGlYWDA9XG5cblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmpzb25EaWZmID0gdW5kZWZpbmVkO1xuXG5cdHZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZKc29uID0gZGlmZkpzb247XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2Nhbm9uaWNhbGl6ZSA9IGNhbm9uaWNhbGl6ZTtcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fbGluZSA9IF9fd2VicGFja19yZXF1aXJlX18oNSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2Z1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciBvYmplY3RQcm90b3R5cGVUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cblx0dmFyIGpzb25EaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovanNvbkRpZmYgPSBuZXcgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCk7XG5cdC8vIERpc2NyaW1pbmF0ZSBiZXR3ZWVuIHR3byBsaW5lcyBvZiBwcmV0dHktcHJpbnRlZCwgc2VyaWFsaXplZCBKU09OIHdoZXJlIG9uZSBvZiB0aGVtIGhhcyBhXG5cdC8vIGRhbmdsaW5nIGNvbW1hIGFuZCB0aGUgb3RoZXIgZG9lc24ndC4gVHVybnMgb3V0IGluY2x1ZGluZyB0aGUgZGFuZ2xpbmcgY29tbWEgeWllbGRzIHRoZSBuaWNlc3Qgb3V0cHV0OlxuXHRqc29uRGlmZi51c2VMb25nZXN0VG9rZW4gPSB0cnVlO1xuXG5cdGpzb25EaWZmLnRva2VuaXplID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19saW5lLmxpbmVEaWZmIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLnRva2VuaXplO1xuXHRqc29uRGlmZi5jYXN0SW5wdXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIC8qaXN0YW5idWwgaWdub3JlIGVuZCovdW5kZWZpbmVkUmVwbGFjZW1lbnQgPSB0aGlzLm9wdGlvbnMudW5kZWZpbmVkUmVwbGFjZW1lbnQ7XG5cblxuXHQgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeShjYW5vbmljYWxpemUodmFsdWUpLCBmdW5jdGlvbiAoaywgdikge1xuXHQgICAgaWYgKHR5cGVvZiB2ID09PSAndW5kZWZpbmVkJykge1xuXHQgICAgICByZXR1cm4gdW5kZWZpbmVkUmVwbGFjZW1lbnQ7XG5cdCAgICB9XG5cblx0ICAgIHJldHVybiB2O1xuXHQgIH0sICcgICcpO1xuXHR9O1xuXHRqc29uRGlmZi5lcXVhbHMgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcblx0ICByZXR1cm4gKC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZTJbJ2RlZmF1bHQnXSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLy5wcm90b3R5cGUuZXF1YWxzLmNhbGwoanNvbkRpZmYsIGxlZnQucmVwbGFjZSgvLChbXFxyXFxuXSkvZywgJyQxJyksIHJpZ2h0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpKVxuXHQgICk7XG5cdH07XG5cblx0ZnVuY3Rpb24gZGlmZkpzb24ob2xkT2JqLCBuZXdPYmosIG9wdGlvbnMpIHtcblx0ICByZXR1cm4ganNvbkRpZmYuZGlmZihvbGRPYmosIG5ld09iaiwgb3B0aW9ucyk7XG5cdH1cblxuXHQvLyBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHByZXNlbmNlIG9mIGNpcmN1bGFyIHJlZmVyZW5jZXMgYnkgYmFpbGluZyBvdXQgd2hlbiBlbmNvdW50ZXJpbmcgYW5cblx0Ly8gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgXCJzdGFja1wiIG9mIGl0ZW1zIGJlaW5nIHByb2Nlc3NlZC5cblx0ZnVuY3Rpb24gY2Fub25pY2FsaXplKG9iaiwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2spIHtcblx0ICBzdGFjayA9IHN0YWNrIHx8IFtdO1xuXHQgIHJlcGxhY2VtZW50U3RhY2sgPSByZXBsYWNlbWVudFN0YWNrIHx8IFtdO1xuXG5cdCAgdmFyIGkgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdm9pZCAwIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdCAgZm9yIChpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSArPSAxKSB7XG5cdCAgICBpZiAoc3RhY2tbaV0gPT09IG9iaikge1xuXHQgICAgICByZXR1cm4gcmVwbGFjZW1lbnRTdGFja1tpXTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICB2YXIgY2Fub25pY2FsaXplZE9iaiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0ICBpZiAoJ1tvYmplY3QgQXJyYXldJyA9PT0gb2JqZWN0UHJvdG90eXBlVG9TdHJpbmcuY2FsbChvYmopKSB7XG5cdCAgICBzdGFjay5wdXNoKG9iaik7XG5cdCAgICBjYW5vbmljYWxpemVkT2JqID0gbmV3IEFycmF5KG9iai5sZW5ndGgpO1xuXHQgICAgcmVwbGFjZW1lbnRTdGFjay5wdXNoKGNhbm9uaWNhbGl6ZWRPYmopO1xuXHQgICAgZm9yIChpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkgKz0gMSkge1xuXHQgICAgICBjYW5vbmljYWxpemVkT2JqW2ldID0gY2Fub25pY2FsaXplKG9ialtpXSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2spO1xuXHQgICAgfVxuXHQgICAgc3RhY2sucG9wKCk7XG5cdCAgICByZXBsYWNlbWVudFN0YWNrLnBvcCgpO1xuXHQgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRPYmo7XG5cdCAgfVxuXG5cdCAgaWYgKG9iaiAmJiBvYmoudG9KU09OKSB7XG5cdCAgICBvYmogPSBvYmoudG9KU09OKCk7XG5cdCAgfVxuXG5cdCAgaWYgKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKHR5cGVvZiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL29iaiA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2Yob2JqKSkgPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuXHQgICAgc3RhY2sucHVzaChvYmopO1xuXHQgICAgY2Fub25pY2FsaXplZE9iaiA9IHt9O1xuXHQgICAgcmVwbGFjZW1lbnRTdGFjay5wdXNoKGNhbm9uaWNhbGl6ZWRPYmopO1xuXHQgICAgdmFyIHNvcnRlZEtleXMgPSBbXSxcblx0ICAgICAgICBrZXkgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdm9pZCAwIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXHQgICAgZm9yIChrZXkgaW4gb2JqKSB7XG5cdCAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdCAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHQgICAgICAgIHNvcnRlZEtleXMucHVzaChrZXkpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgICBzb3J0ZWRLZXlzLnNvcnQoKTtcblx0ICAgIGZvciAoaSA9IDA7IGkgPCBzb3J0ZWRLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG5cdCAgICAgIGtleSA9IHNvcnRlZEtleXNbaV07XG5cdCAgICAgIGNhbm9uaWNhbGl6ZWRPYmpba2V5XSA9IGNhbm9uaWNhbGl6ZShvYmpba2V5XSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2spO1xuXHQgICAgfVxuXHQgICAgc3RhY2sucG9wKCk7XG5cdCAgICByZXBsYWNlbWVudFN0YWNrLnBvcCgpO1xuXHQgIH0gZWxzZSB7XG5cdCAgICBjYW5vbmljYWxpemVkT2JqID0gb2JqO1xuXHQgIH1cblx0ICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlrYVdabUwycHpiMjR1YW5NaVhTd2libUZ0WlhNaU9sc2laR2xtWmtwemIyNGlMQ0pqWVc1dmJtbGpZV3hwZW1VaUxDSnZZbXBsWTNSUWNtOTBiM1I1Y0dWVWIxTjBjbWx1WnlJc0lrOWlhbVZqZENJc0luQnliM1J2ZEhsd1pTSXNJblJ2VTNSeWFXNW5JaXdpYW5OdmJrUnBabVlpTENKMWMyVk1iMjVuWlhOMFZHOXJaVzRpTENKMGIydGxibWw2WlNJc0ltTmhjM1JKYm5CMWRDSXNJblpoYkhWbElpd2lkVzVrWldacGJtVmtVbVZ3YkdGalpXMWxiblFpTENKdmNIUnBiMjV6SWl3aVNsTlBUaUlzSW5OMGNtbHVaMmxtZVNJc0ltc2lMQ0oySWl3aVpYRjFZV3h6SWl3aWJHVm1kQ0lzSW5KcFoyaDBJaXdpWTJGc2JDSXNJbkpsY0d4aFkyVWlMQ0p2YkdSUFltb2lMQ0p1WlhkUFltb2lMQ0prYVdabUlpd2liMkpxSWl3aWMzUmhZMnNpTENKeVpYQnNZV05sYldWdWRGTjBZV05ySWl3aWFTSXNJbXhsYm1kMGFDSXNJbU5oYm05dWFXTmhiR2w2WldSUFltb2lMQ0p3ZFhOb0lpd2lRWEp5WVhraUxDSndiM0FpTENKMGIwcFRUMDRpTENKemIzSjBaV1JMWlhseklpd2lhMlY1SWl3aWFHRnpUM2R1VUhKdmNHVnlkSGtpTENKemIzSjBJbDBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3TzJkRFFUSkNaMEpCTEZFc1IwRkJRVUVzVVR0NVJFRkpRVU1zV1N4SFFVRkJRU3haT3p0QlFTOUNhRUk3T3pzN2RVSkJRMEU3T3pzN2RVSkJSVUVzU1VGQlRVTXNNRUpCUVRCQ1F5eFBRVUZQUXl4VFFVRlFMRU5CUVdsQ1F5eFJRVUZxUkRzN1FVRkhUeXhKUVVGTlF5d3JSVUZCVnl4M1JVRkJha0k3UVVGRFVEdEJRVU5CTzBGQlEwRkJMRk5CUVZORExHVkJRVlFzUjBGQk1rSXNTVUZCTTBJN08wRkJSVUZFTEZOQlFWTkZMRkZCUVZRc1IwRkJiMElzWjBWQlFWTkJMRkZCUVRkQ08wRkJRMEZHTEZOQlFWTkhMRk5CUVZRc1IwRkJjVUlzVlVGQlUwTXNTMEZCVkN4RlFVRm5RanRCUVVGQkxITkVRVU0xUWtNc2IwSkJSRFJDTEVkQlEwb3NTMEZCUzBNc1QwRkVSQ3hEUVVNMVFrUXNiMEpCUkRSQ096czdRVUZIYmtNc1UwRkJUeXhQUVVGUFJDeExRVUZRTEV0QlFXbENMRkZCUVdwQ0xFZEJRVFJDUVN4TFFVRTFRaXhIUVVGdlEwY3NTMEZCUzBNc1UwRkJUQ3hEUVVGbFlpeGhRVUZoVXl4TFFVRmlMRU5CUVdZc1JVRkJiME1zVlVGQlUwc3NRMEZCVkN4RlFVRlpReXhEUVVGYUxFVkJRV1U3UVVGRE5VWXNVVUZCU1N4UFFVRlBRU3hEUVVGUUxFdEJRV0VzVjBGQmFrSXNSVUZCT0VJN1FVRkROVUlzWVVGQlQwd3NiMEpCUVZBN1FVRkRSRHM3UVVGRlJDeFhRVUZQU3l4RFFVRlFPMEZCUTBRc1IwRk9NRU1zUlVGTmVFTXNTVUZPZDBNc1EwRkJNME03UVVGUFJDeERRVlpFTzBGQlYwRldMRk5CUVZOWExFMUJRVlFzUjBGQmEwSXNWVUZCVTBNc1NVRkJWQ3hGUVVGbFF5eExRVUZtTEVWQlFYTkNPMEZCUTNSRExGTkJRVThzYjBWQlFVdG1MRk5CUVV3c1EwRkJaV0VzVFVGQlppeERRVUZ6UWtjc1NVRkJkRUlzUTBGQk1rSmtMRkZCUVROQ0xFVkJRWEZEV1N4TFFVRkxSeXhQUVVGTUxFTkJRV0VzV1VGQllpeEZRVUV5UWl4SlFVRXpRaXhEUVVGeVF5eEZRVUYxUlVZc1RVRkJUVVVzVDBGQlRpeERRVUZqTEZsQlFXUXNSVUZCTkVJc1NVRkJOVUlzUTBGQmRrVTdRVUZCVUR0QlFVTkVMRU5CUmtRN08wRkJTVThzVTBGQlUzSkNMRkZCUVZRc1EwRkJhMEp6UWl4TlFVRnNRaXhGUVVFd1FrTXNUVUZCTVVJc1JVRkJhME5ZTEU5QlFXeERMRVZCUVRKRE8wRkJRVVVzVTBGQlQwNHNVMEZCVTJ0Q0xFbEJRVlFzUTBGQlkwWXNUVUZCWkN4RlFVRnpRa01zVFVGQmRFSXNSVUZCT0VKWUxFOUJRVGxDTEVOQlFWQTdRVUZCWjBRN08wRkJSWEJITzBGQlEwRTdRVUZEVHl4VFFVRlRXQ3haUVVGVUxFTkJRWE5DZDBJc1IwRkJkRUlzUlVGQk1rSkRMRXRCUVROQ0xFVkJRV3REUXl4blFrRkJiRU1zUlVGQmIwUTdRVUZEZWtSRUxGVkJRVkZCTEZOQlFWTXNSVUZCYWtJN1FVRkRRVU1zY1VKQlFXMUNRU3h2UWtGQmIwSXNSVUZCZGtNN08wRkJSVUVzVFVGQlNVTXNiVU5CUVVvN08wRkJSVUVzVDBGQlMwRXNTVUZCU1N4RFFVRlVMRVZCUVZsQkxFbEJRVWxHTEUxQlFVMUhMRTFCUVhSQ0xFVkJRVGhDUkN4TFFVRkxMRU5CUVc1RExFVkJRWE5ETzBGQlEzQkRMRkZCUVVsR0xFMUJRVTFGTEVOQlFVNHNUVUZCWVVnc1IwRkJha0lzUlVGQmMwSTdRVUZEY0VJc1lVRkJUMFVzYVVKQlFXbENReXhEUVVGcVFpeERRVUZRTzBGQlEwUTdRVUZEUmpzN1FVRkZSQ3hOUVVGSlJTeHJSRUZCU2pzN1FVRkZRU3hOUVVGSkxIRkNRVUZ4UWpWQ0xIZENRVUYzUW10Q0xFbEJRWGhDTEVOQlFUWkNTeXhIUVVFM1FpeERRVUY2UWl4RlFVRTBSRHRCUVVNeFJFTXNWVUZCVFVzc1NVRkJUaXhEUVVGWFRpeEhRVUZZTzBGQlEwRkxMSFZDUVVGdFFpeEpRVUZKUlN4TFFVRktMRU5CUVZWUUxFbEJRVWxKTEUxQlFXUXNRMEZCYmtJN1FVRkRRVVlzY1VKQlFXbENTU3hKUVVGcVFpeERRVUZ6UWtRc1owSkJRWFJDTzBGQlEwRXNVMEZCUzBZc1NVRkJTU3hEUVVGVUxFVkJRVmxCTEVsQlFVbElMRWxCUVVsSkxFMUJRWEJDTEVWQlFUUkNSQ3hMUVVGTExFTkJRV3BETEVWQlFXOURPMEZCUTJ4RFJTeDFRa0ZCYVVKR0xFTkJRV3BDTEVsQlFYTkNNMElzWVVGQllYZENMRWxCUVVsSExFTkJRVW9zUTBGQllpeEZRVUZ4UWtZc1MwRkJja0lzUlVGQk5FSkRMR2RDUVVFMVFpeERRVUYwUWp0QlFVTkVPMEZCUTBSRUxGVkJRVTFQTEVkQlFVNDdRVUZEUVU0c2NVSkJRV2xDVFN4SFFVRnFRanRCUVVOQkxGZEJRVTlJTEdkQ1FVRlFPMEZCUTBRN08wRkJSVVFzVFVGQlNVd3NUMEZCVDBFc1NVRkJTVk1zVFVGQlppeEZRVUYxUWp0QlFVTnlRbFFzVlVGQlRVRXNTVUZCU1ZNc1RVRkJTaXhGUVVGT08wRkJRMFE3TzBGQlJVUXNUVUZCU1N4NVJFRkJUMVFzUjBGQlVDeDVRMEZCVDBFc1IwRkJVQ3hQUVVGbExGRkJRV1lzU1VGQk1rSkJMRkZCUVZFc1NVRkJka01zUlVGQk5rTTdRVUZETTBORExGVkJRVTFMTEVsQlFVNHNRMEZCVjA0c1IwRkJXRHRCUVVOQlN5eDFRa0ZCYlVJc1JVRkJia0k3UVVGRFFVZ3NjVUpCUVdsQ1NTeEpRVUZxUWl4RFFVRnpRa1FzWjBKQlFYUkNPMEZCUTBFc1VVRkJTVXNzWVVGQllTeEZRVUZxUWp0QlFVRkJMRkZCUTBsRExIRkRRVVJLTzBGQlJVRXNVMEZCUzBFc1IwRkJUQ3hKUVVGWldDeEhRVUZhTEVWQlFXbENPMEZCUTJZN1FVRkRRU3hWUVVGSlFTeEpRVUZKV1N4alFVRktMRU5CUVcxQ1JDeEhRVUZ1UWl4RFFVRktMRVZCUVRaQ08wRkJRek5DUkN4dFFrRkJWMG9zU1VGQldDeERRVUZuUWtzc1IwRkJhRUk3UVVGRFJEdEJRVU5HTzBGQlEwUkVMR1ZCUVZkSExFbEJRVmc3UVVGRFFTeFRRVUZMVml4SlFVRkpMRU5CUVZRc1JVRkJXVUVzU1VGQlNVOHNWMEZCVjA0c1RVRkJNMElzUlVGQmJVTkVMRXRCUVVzc1EwRkJlRU1zUlVGQk1rTTdRVUZEZWtOUkxGbEJRVTFFTEZkQlFWZFFMRU5CUVZnc1EwRkJUanRCUVVOQlJTeDFRa0ZCYVVKTkxFZEJRV3BDTEVsQlFYZENia01zWVVGQllYZENMRWxCUVVsWExFZEJRVW9zUTBGQllpeEZRVUYxUWxZc1MwRkJka0lzUlVGQk9FSkRMR2RDUVVFNVFpeERRVUY0UWp0QlFVTkVPMEZCUTBSRUxGVkJRVTFQTEVkQlFVNDdRVUZEUVU0c2NVSkJRV2xDVFN4SFFVRnFRanRCUVVORUxFZEJia0pFTEUxQmJVSlBPMEZCUTB4SUxIVkNRVUZ0UWt3c1IwRkJia0k3UVVGRFJEdEJRVU5FTEZOQlFVOUxMR2RDUVVGUU8wRkJRMFFpTENKbWFXeGxJam9pYW5OdmJpNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JFYVdabUlHWnliMjBnSnk0dlltRnpaU2M3WEc1cGJYQnZjblFnZTJ4cGJtVkVhV1ptZlNCbWNtOXRJQ2N1TDJ4cGJtVW5PMXh1WEc1amIyNXpkQ0J2WW1wbFkzUlFjbTkwYjNSNWNHVlViMU4wY21sdVp5QTlJRTlpYW1WamRDNXdjbTkwYjNSNWNHVXVkRzlUZEhKcGJtYzdYRzVjYmx4dVpYaHdiM0owSUdOdmJuTjBJR3B6YjI1RWFXWm1JRDBnYm1WM0lFUnBabVlvS1R0Y2JpOHZJRVJwYzJOeWFXMXBibUYwWlNCaVpYUjNaV1Z1SUhSM2J5QnNhVzVsY3lCdlppQndjbVYwZEhrdGNISnBiblJsWkN3Z2MyVnlhV0ZzYVhwbFpDQktVMDlPSUhkb1pYSmxJRzl1WlNCdlppQjBhR1Z0SUdoaGN5QmhYRzR2THlCa1lXNW5iR2x1WnlCamIyMXRZU0JoYm1RZ2RHaGxJRzkwYUdWeUlHUnZaWE51SjNRdUlGUjFjbTV6SUc5MWRDQnBibU5zZFdScGJtY2dkR2hsSUdSaGJtZHNhVzVuSUdOdmJXMWhJSGxwWld4a2N5QjBhR1VnYm1salpYTjBJRzkxZEhCMWREcGNibXB6YjI1RWFXWm1MblZ6WlV4dmJtZGxjM1JVYjJ0bGJpQTlJSFJ5ZFdVN1hHNWNibXB6YjI1RWFXWm1MblJ2YTJWdWFYcGxJRDBnYkdsdVpVUnBabVl1ZEc5clpXNXBlbVU3WEc1cWMyOXVSR2xtWmk1allYTjBTVzV3ZFhRZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0JqYjI1emRDQjdkVzVrWldacGJtVmtVbVZ3YkdGalpXMWxiblI5SUQwZ2RHaHBjeTV2Y0hScGIyNXpPMXh1WEc0Z0lISmxkSFZ5YmlCMGVYQmxiMllnZG1Gc2RXVWdQVDA5SUNkemRISnBibWNuSUQ4Z2RtRnNkV1VnT2lCS1UwOU9Mbk4wY21sdVoybG1lU2hqWVc1dmJtbGpZV3hwZW1Vb2RtRnNkV1VwTENCbWRXNWpkR2x2YmlockxDQjJLU0I3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUIySUQwOVBTQW5kVzVrWldacGJtVmtKeWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFZ1WkdWbWFXNWxaRkpsY0d4aFkyVnRaVzUwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEhWeWJpQjJPMXh1SUNCOUxDQW5JQ0FuS1R0Y2JuMDdYRzVxYzI5dVJHbG1aaTVsY1hWaGJITWdQU0JtZFc1amRHbHZiaWhzWldaMExDQnlhV2RvZENrZ2UxeHVJQ0J5WlhSMWNtNGdSR2xtWmk1d2NtOTBiM1I1Y0dVdVpYRjFZV3h6TG1OaGJHd29hbk52YmtScFptWXNJR3hsWm5RdWNtVndiR0ZqWlNndkxDaGJYRnh5WEZ4dVhTa3ZaeXdnSnlReEp5a3NJSEpwWjJoMExuSmxjR3hoWTJVb0x5d29XMXhjY2x4Y2JsMHBMMmNzSUNja01TY3BLVHRjYm4wN1hHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmthV1ptU25OdmJpaHZiR1JQWW1vc0lHNWxkMDlpYWl3Z2IzQjBhVzl1Y3lrZ2V5QnlaWFIxY200Z2FuTnZia1JwWm1ZdVpHbG1aaWh2YkdSUFltb3NJRzVsZDA5aWFpd2diM0IwYVc5dWN5azdJSDFjYmx4dUx5OGdWR2hwY3lCbWRXNWpkR2x2YmlCb1lXNWtiR1Z6SUhSb1pTQndjbVZ6Wlc1alpTQnZaaUJqYVhKamRXeGhjaUJ5WldabGNtVnVZMlZ6SUdKNUlHSmhhV3hwYm1jZ2IzVjBJSGRvWlc0Z1pXNWpiM1Z1ZEdWeWFXNW5JR0Z1WEc0dkx5QnZZbXBsWTNRZ2RHaGhkQ0JwY3lCaGJISmxZV1I1SUc5dUlIUm9aU0JjSW5OMFlXTnJYQ0lnYjJZZ2FYUmxiWE1nWW1WcGJtY2djSEp2WTJWemMyVmtMbHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR05oYm05dWFXTmhiR2w2WlNodlltb3NJSE4wWVdOckxDQnlaWEJzWVdObGJXVnVkRk4wWVdOcktTQjdYRzRnSUhOMFlXTnJJRDBnYzNSaFkyc2dmSHdnVzEwN1hHNGdJSEpsY0d4aFkyVnRaVzUwVTNSaFkyc2dQU0J5WlhCc1lXTmxiV1Z1ZEZOMFlXTnJJSHg4SUZ0ZE8xeHVYRzRnSUd4bGRDQnBPMXh1WEc0Z0lHWnZjaUFvYVNBOUlEQTdJR2tnUENCemRHRmpheTVzWlc1bmRHZzdJR2tnS3owZ01Ta2dlMXh1SUNBZ0lHbG1JQ2h6ZEdGamExdHBYU0E5UFQwZ2IySnFLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdjbVZ3YkdGalpXMWxiblJUZEdGamExdHBYVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0JzWlhRZ1kyRnViMjVwWTJGc2FYcGxaRTlpYWp0Y2JseHVJQ0JwWmlBb0oxdHZZbXBsWTNRZ1FYSnlZWGxkSnlBOVBUMGdiMkpxWldOMFVISnZkRzkwZVhCbFZHOVRkSEpwYm1jdVkyRnNiQ2h2WW1vcEtTQjdYRzRnSUNBZ2MzUmhZMnN1Y0hWemFDaHZZbW9wTzF4dUlDQWdJR05oYm05dWFXTmhiR2w2WldSUFltb2dQU0J1WlhjZ1FYSnlZWGtvYjJKcUxteGxibWQwYUNrN1hHNGdJQ0FnY21Wd2JHRmpaVzFsYm5SVGRHRmpheTV3ZFhOb0tHTmhibTl1YVdOaGJHbDZaV1JQWW1vcE8xeHVJQ0FnSUdadmNpQW9hU0E5SURBN0lHa2dQQ0J2WW1vdWJHVnVaM1JvT3lCcElDczlJREVwSUh0Y2JpQWdJQ0FnSUdOaGJtOXVhV05oYkdsNlpXUlBZbXBiYVYwZ1BTQmpZVzV2Ym1sallXeHBlbVVvYjJKcVcybGRMQ0J6ZEdGamF5d2djbVZ3YkdGalpXMWxiblJUZEdGamF5azdYRzRnSUNBZ2ZWeHVJQ0FnSUhOMFlXTnJMbkJ2Y0NncE8xeHVJQ0FnSUhKbGNHeGhZMlZ0Wlc1MFUzUmhZMnN1Y0c5d0tDazdYRzRnSUNBZ2NtVjBkWEp1SUdOaGJtOXVhV05oYkdsNlpXUlBZbW83WEc0Z0lIMWNibHh1SUNCcFppQW9iMkpxSUNZbUlHOWlhaTUwYjBwVFQwNHBJSHRjYmlBZ0lDQnZZbW9nUFNCdlltb3VkRzlLVTA5T0tDazdYRzRnSUgxY2JseHVJQ0JwWmlBb2RIbHdaVzltSUc5aWFpQTlQVDBnSjI5aWFtVmpkQ2NnSmlZZ2IySnFJQ0U5UFNCdWRXeHNLU0I3WEc0Z0lDQWdjM1JoWTJzdWNIVnphQ2h2WW1vcE8xeHVJQ0FnSUdOaGJtOXVhV05oYkdsNlpXUlBZbW9nUFNCN2ZUdGNiaUFnSUNCeVpYQnNZV05sYldWdWRGTjBZV05yTG5CMWMyZ29ZMkZ1YjI1cFkyRnNhWHBsWkU5aWFpazdYRzRnSUNBZ2JHVjBJSE52Y25SbFpFdGxlWE1nUFNCYlhTeGNiaUFnSUNBZ0lDQWdhMlY1TzF4dUlDQWdJR1p2Y2lBb2EyVjVJR2x1SUc5aWFpa2dlMXh1SUNBZ0lDQWdMeW9nYVhOMFlXNWlkV3dnYVdkdWIzSmxJR1ZzYzJVZ0tpOWNiaUFnSUNBZ0lHbG1JQ2h2WW1vdWFHRnpUM2R1VUhKdmNHVnlkSGtvYTJWNUtTa2dlMXh1SUNBZ0lDQWdJQ0J6YjNKMFpXUkxaWGx6TG5CMWMyZ29hMlY1S1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjMjl5ZEdWa1MyVjVjeTV6YjNKMEtDazdYRzRnSUNBZ1ptOXlJQ2hwSUQwZ01Ec2dhU0E4SUhOdmNuUmxaRXRsZVhNdWJHVnVaM1JvT3lCcElDczlJREVwSUh0Y2JpQWdJQ0FnSUd0bGVTQTlJSE52Y25SbFpFdGxlWE5iYVYwN1hHNGdJQ0FnSUNCallXNXZibWxqWVd4cGVtVmtUMkpxVzJ0bGVWMGdQU0JqWVc1dmJtbGpZV3hwZW1Vb2IySnFXMnRsZVYwc0lITjBZV05yTENCeVpYQnNZV05sYldWdWRGTjBZV05yS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjM1JoWTJzdWNHOXdLQ2s3WEc0Z0lDQWdjbVZ3YkdGalpXMWxiblJUZEdGamF5NXdiM0FvS1R0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNCallXNXZibWxqWVd4cGVtVmtUMkpxSUQwZ2IySnFPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQmpZVzV2Ym1sallXeHBlbVZrVDJKcU8xeHVmVnh1SWwxOVxuXG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5hcnJheURpZmYgPSB1bmRlZmluZWQ7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkFycmF5cyA9IGRpZmZBcnJheXM7XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfYmFzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9iYXNlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgYXJyYXlEaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovYXJyYXlEaWZmID0gbmV3IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZTJbJ2RlZmF1bHQnXSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLygpO1xuXHRhcnJheURpZmYudG9rZW5pemUgPSBhcnJheURpZmYuam9pbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgIHJldHVybiB2YWx1ZS5zbGljZSgpO1xuXHR9O1xuXHRhcnJheURpZmYucmVtb3ZlRW1wdHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICByZXR1cm4gdmFsdWU7XG5cdH07XG5cblx0ZnVuY3Rpb24gZGlmZkFycmF5cyhvbGRBcnIsIG5ld0FyciwgY2FsbGJhY2spIHtcblx0ICByZXR1cm4gYXJyYXlEaWZmLmRpZmYob2xkQXJyLCBuZXdBcnIsIGNhbGxiYWNrKTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlrYVdabUwyRnljbUY1TG1weklsMHNJbTVoYldWeklqcGJJbVJwWm1aQmNuSmhlWE1pTENKaGNuSmhlVVJwWm1ZaUxDSjBiMnRsYm1sNlpTSXNJbXB2YVc0aUxDSjJZV3gxWlNJc0luTnNhV05sSWl3aWNtVnRiM1psUlcxd2RIa2lMQ0p2YkdSQmNuSWlMQ0p1WlhkQmNuSWlMQ0pqWVd4c1ltRmpheUlzSW1ScFptWWlYU3dpYldGd2NHbHVaM01pT2lJN096czdaME5CVldkQ1FTeFZMRWRCUVVGQkxGVTdPMEZCVm1oQ096czdPenM3ZFVKQlJVOHNTVUZCVFVNc2FVWkJRVmtzZDBWQlFXeENPMEZCUTFCQkxGVkJRVlZETEZGQlFWWXNSMEZCY1VKRUxGVkJRVlZGTEVsQlFWWXNSMEZCYVVJc1ZVRkJVME1zUzBGQlZDeEZRVUZuUWp0QlFVTndSQ3hUUVVGUFFTeE5RVUZOUXl4TFFVRk9MRVZCUVZBN1FVRkRSQ3hEUVVaRU8wRkJSMEZLTEZWQlFWVkxMRmRCUVZZc1IwRkJkMElzVlVGQlUwWXNTMEZCVkN4RlFVRm5RanRCUVVOMFF5eFRRVUZQUVN4TFFVRlFPMEZCUTBRc1EwRkdSRHM3UVVGSlR5eFRRVUZUU2l4VlFVRlVMRU5CUVc5Q1R5eE5RVUZ3UWl4RlFVRTBRa01zVFVGQk5VSXNSVUZCYjBORExGRkJRWEJETEVWQlFUaERPMEZCUVVVc1UwRkJUMUlzVlVGQlZWTXNTVUZCVml4RFFVRmxTQ3hOUVVGbUxFVkJRWFZDUXl4TlFVRjJRaXhGUVVFclFrTXNVVUZCTDBJc1EwRkJVRHRCUVVGclJDSXNJbVpwYkdVaU9pSmhjbkpoZVM1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQkVhV1ptSUdaeWIyMGdKeTR2WW1GelpTYzdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQmhjbkpoZVVScFptWWdQU0J1WlhjZ1JHbG1aaWdwTzF4dVlYSnlZWGxFYVdabUxuUnZhMlZ1YVhwbElEMGdZWEp5WVhsRWFXWm1MbXB2YVc0Z1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdkbUZzZFdVdWMyeHBZMlVvS1R0Y2JuMDdYRzVoY25KaGVVUnBabVl1Y21WdGIzWmxSVzF3ZEhrZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdkbUZzZFdVN1hHNTlPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWkdsbVprRnljbUY1Y3lodmJHUkJjbklzSUc1bGQwRnljaXdnWTJGc2JHSmhZMnNwSUhzZ2NtVjBkWEp1SUdGeWNtRjVSR2xtWmk1a2FXWm1LRzlzWkVGeWNpd2dibVYzUVhKeUxDQmpZV3hzWW1GamF5azdJSDFjYmlKZGZRPT1cblxuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2FwcGx5UGF0Y2ggPSBhcHBseVBhdGNoO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9hcHBseVBhdGNoZXMgPSBhcHBseVBhdGNoZXM7XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fcGFyc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19kaXN0YW5jZUl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMikgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfZGlzdGFuY2VJdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kaXN0YW5jZUl0ZXJhdG9yKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9mdW5jdGlvbiBhcHBseVBhdGNoKHNvdXJjZSwgdW5pRGlmZikge1xuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9vcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcblxuXHQgIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcblx0ICAgIHVuaURpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9wYXJzZS5wYXJzZVBhdGNoKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyh1bmlEaWZmKTtcblx0ICB9XG5cblx0ICBpZiAoQXJyYXkuaXNBcnJheSh1bmlEaWZmKSkge1xuXHQgICAgaWYgKHVuaURpZmYubGVuZ3RoID4gMSkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5UGF0Y2ggb25seSB3b3JrcyB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuXHQgICAgfVxuXG5cdCAgICB1bmlEaWZmID0gdW5pRGlmZlswXTtcblx0ICB9XG5cblx0ICAvLyBBcHBseSB0aGUgZGlmZiB0byB0aGUgaW5wdXRcblx0ICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdLyksXG5cdCAgICAgIGRlbGltaXRlcnMgPSBzb3VyY2UubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuXHQgICAgICBodW5rcyA9IHVuaURpZmYuaHVua3MsXG5cdCAgICAgIGNvbXBhcmVMaW5lID0gb3B0aW9ucy5jb21wYXJlTGluZSB8fCBmdW5jdGlvbiAobGluZU51bWJlciwgbGluZSwgb3BlcmF0aW9uLCBwYXRjaENvbnRlbnQpIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki97XG5cdCAgICByZXR1cm4gKC8qaXN0YW5idWwgaWdub3JlIGVuZCovbGluZSA9PT0gcGF0Y2hDb250ZW50XG5cdCAgICApO1xuXHQgIH0sXG5cdCAgICAgIGVycm9yQ291bnQgPSAwLFxuXHQgICAgICBmdXp6RmFjdG9yID0gb3B0aW9ucy5mdXp6RmFjdG9yIHx8IDAsXG5cdCAgICAgIG1pbkxpbmUgPSAwLFxuXHQgICAgICBvZmZzZXQgPSAwLFxuXHQgICAgICByZW1vdmVFT0ZOTCA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sXG5cdCAgICAgIGFkZEVPRk5MID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZvaWQgMCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQgIC8qKlxuXHQgICAqIENoZWNrcyBpZiB0aGUgaHVuayBleGFjdGx5IGZpdHMgb24gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG5cdCAgICovXG5cdCAgZnVuY3Rpb24gaHVua0ZpdHMoaHVuaywgdG9Qb3MpIHtcblx0ICAgIGZvciAodmFyIGogPSAwOyBqIDwgaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuXHQgICAgICB2YXIgbGluZSA9IGh1bmsubGluZXNbal0sXG5cdCAgICAgICAgICBvcGVyYXRpb24gPSBsaW5lWzBdLFxuXHQgICAgICAgICAgY29udGVudCA9IGxpbmUuc3Vic3RyKDEpO1xuXG5cdCAgICAgIGlmIChvcGVyYXRpb24gPT09ICcgJyB8fCBvcGVyYXRpb24gPT09ICctJykge1xuXHQgICAgICAgIC8vIENvbnRleHQgc2FuaXR5IGNoZWNrXG5cdCAgICAgICAgaWYgKCFjb21wYXJlTGluZSh0b1BvcyArIDEsIGxpbmVzW3RvUG9zXSwgb3BlcmF0aW9uLCBjb250ZW50KSkge1xuXHQgICAgICAgICAgZXJyb3JDb3VudCsrO1xuXG5cdCAgICAgICAgICBpZiAoZXJyb3JDb3VudCA+IGZ1enpGYWN0b3IpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0b1BvcysrO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJldHVybiB0cnVlO1xuXHQgIH1cblxuXHQgIC8vIFNlYXJjaCBiZXN0IGZpdCBvZmZzZXRzIGZvciBlYWNoIGh1bmsgYmFzZWQgb24gdGhlIHByZXZpb3VzIG9uZXNcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGh1bmtzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICB2YXIgaHVuayA9IGh1bmtzW2ldLFxuXHQgICAgICAgIG1heExpbmUgPSBsaW5lcy5sZW5ndGggLSBodW5rLm9sZExpbmVzLFxuXHQgICAgICAgIGxvY2FsT2Zmc2V0ID0gMCxcblx0ICAgICAgICB0b1BvcyA9IG9mZnNldCArIGh1bmsub2xkU3RhcnQgLSAxO1xuXG5cdCAgICB2YXIgaXRlcmF0b3IgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9kaXN0YW5jZUl0ZXJhdG9yMlsnZGVmYXVsdCddKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyh0b1BvcywgbWluTGluZSwgbWF4TGluZSk7XG5cblx0ICAgIGZvciAoOyBsb2NhbE9mZnNldCAhPT0gdW5kZWZpbmVkOyBsb2NhbE9mZnNldCA9IGl0ZXJhdG9yKCkpIHtcblx0ICAgICAgaWYgKGh1bmtGaXRzKGh1bmssIHRvUG9zICsgbG9jYWxPZmZzZXQpKSB7XG5cdCAgICAgICAgaHVuay5vZmZzZXQgPSBvZmZzZXQgKz0gbG9jYWxPZmZzZXQ7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgaWYgKGxvY2FsT2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgfVxuXG5cdCAgICAvLyBTZXQgbG93ZXIgdGV4dCBsaW1pdCB0byBlbmQgb2YgdGhlIGN1cnJlbnQgaHVuaywgc28gbmV4dCBvbmVzIGRvbid0IHRyeVxuXHQgICAgLy8gdG8gZml0IG92ZXIgYWxyZWFkeSBwYXRjaGVkIHRleHRcblx0ICAgIG1pbkxpbmUgPSBodW5rLm9mZnNldCArIGh1bmsub2xkU3RhcnQgKyBodW5rLm9sZExpbmVzO1xuXHQgIH1cblxuXHQgIC8vIEFwcGx5IHBhdGNoIGh1bmtzXG5cdCAgdmFyIGRpZmZPZmZzZXQgPSAwO1xuXHQgIGZvciAodmFyIF9pID0gMDsgX2kgPCBodW5rcy5sZW5ndGg7IF9pKyspIHtcblx0ICAgIHZhciBfaHVuayA9IGh1bmtzW19pXSxcblx0ICAgICAgICBfdG9Qb3MgPSBfaHVuay5vbGRTdGFydCArIF9odW5rLm9mZnNldCArIGRpZmZPZmZzZXQgLSAxO1xuXHQgICAgZGlmZk9mZnNldCArPSBfaHVuay5uZXdMaW5lcyAtIF9odW5rLm9sZExpbmVzO1xuXG5cdCAgICBpZiAoX3RvUG9zIDwgMCkge1xuXHQgICAgICAvLyBDcmVhdGluZyBhIG5ldyBmaWxlXG5cdCAgICAgIF90b1BvcyA9IDA7XG5cdCAgICB9XG5cblx0ICAgIGZvciAodmFyIGogPSAwOyBqIDwgX2h1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgdmFyIGxpbmUgPSBfaHVuay5saW5lc1tqXSxcblx0ICAgICAgICAgIG9wZXJhdGlvbiA9IGxpbmVbMF0sXG5cdCAgICAgICAgICBjb250ZW50ID0gbGluZS5zdWJzdHIoMSksXG5cdCAgICAgICAgICBkZWxpbWl0ZXIgPSBfaHVuay5saW5lZGVsaW1pdGVyc1tqXTtcblxuXHQgICAgICBpZiAob3BlcmF0aW9uID09PSAnICcpIHtcblx0ICAgICAgICBfdG9Qb3MrKztcblx0ICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICctJykge1xuXHQgICAgICAgIGxpbmVzLnNwbGljZShfdG9Qb3MsIDEpO1xuXHQgICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKF90b1BvcywgMSk7XG5cdCAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0ICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICcrJykge1xuXHQgICAgICAgIGxpbmVzLnNwbGljZShfdG9Qb3MsIDAsIGNvbnRlbnQpO1xuXHQgICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKF90b1BvcywgMCwgZGVsaW1pdGVyKTtcblx0ICAgICAgICBfdG9Qb3MrKztcblx0ICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICdcXFxcJykge1xuXHQgICAgICAgIHZhciBwcmV2aW91c09wZXJhdGlvbiA9IF9odW5rLmxpbmVzW2ogLSAxXSA/IF9odW5rLmxpbmVzW2ogLSAxXVswXSA6IG51bGw7XG5cdCAgICAgICAgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnKycpIHtcblx0ICAgICAgICAgIHJlbW92ZUVPRk5MID0gdHJ1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnLScpIHtcblx0ICAgICAgICAgIGFkZEVPRk5MID0gdHJ1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICAvLyBIYW5kbGUgRU9GTkwgaW5zZXJ0aW9uL3JlbW92YWxcblx0ICBpZiAocmVtb3ZlRU9GTkwpIHtcblx0ICAgIHdoaWxlICghbGluZXNbbGluZXMubGVuZ3RoIC0gMV0pIHtcblx0ICAgICAgbGluZXMucG9wKCk7XG5cdCAgICAgIGRlbGltaXRlcnMucG9wKCk7XG5cdCAgICB9XG5cdCAgfSBlbHNlIGlmIChhZGRFT0ZOTCkge1xuXHQgICAgbGluZXMucHVzaCgnJyk7XG5cdCAgICBkZWxpbWl0ZXJzLnB1c2goJ1xcbicpO1xuXHQgIH1cblx0ICBmb3IgKHZhciBfayA9IDA7IF9rIDwgbGluZXMubGVuZ3RoIC0gMTsgX2srKykge1xuXHQgICAgbGluZXNbX2tdID0gbGluZXNbX2tdICsgZGVsaW1pdGVyc1tfa107XG5cdCAgfVxuXHQgIHJldHVybiBsaW5lcy5qb2luKCcnKTtcblx0fVxuXG5cdC8vIFdyYXBwZXIgdGhhdCBzdXBwb3J0cyBtdWx0aXBsZSBmaWxlIHBhdGNoZXMgdmlhIGNhbGxiYWNrcy5cblx0ZnVuY3Rpb24gYXBwbHlQYXRjaGVzKHVuaURpZmYsIG9wdGlvbnMpIHtcblx0ICBpZiAodHlwZW9mIHVuaURpZmYgPT09ICdzdHJpbmcnKSB7XG5cdCAgICB1bmlEaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfcGFyc2UucGFyc2VQYXRjaCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8odW5pRGlmZik7XG5cdCAgfVxuXG5cdCAgdmFyIGN1cnJlbnRJbmRleCA9IDA7XG5cdCAgZnVuY3Rpb24gcHJvY2Vzc0luZGV4KCkge1xuXHQgICAgdmFyIGluZGV4ID0gdW5pRGlmZltjdXJyZW50SW5kZXgrK107XG5cdCAgICBpZiAoIWluZGV4KSB7XG5cdCAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKCk7XG5cdCAgICB9XG5cblx0ICAgIG9wdGlvbnMubG9hZEZpbGUoaW5kZXgsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcblx0ICAgICAgaWYgKGVycikge1xuXHQgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG5cdCAgICAgIH1cblxuXHQgICAgICB2YXIgdXBkYXRlZENvbnRlbnQgPSBhcHBseVBhdGNoKGRhdGEsIGluZGV4LCBvcHRpb25zKTtcblx0ICAgICAgb3B0aW9ucy5wYXRjaGVkKGluZGV4LCB1cGRhdGVkQ29udGVudCwgZnVuY3Rpb24gKGVycikge1xuXHQgICAgICAgIGlmIChlcnIpIHtcblx0ICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcHJvY2Vzc0luZGV4KCk7XG5cdCAgICAgIH0pO1xuXHQgICAgfSk7XG5cdCAgfVxuXHQgIHByb2Nlc3NJbmRleCgpO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWFJqYUM5aGNIQnNlUzVxY3lKZExDSnVZVzFsY3lJNld5SmhjSEJzZVZCaGRHTm9JaXdpWVhCd2JIbFFZWFJqYUdWeklpd2ljMjkxY21ObElpd2lkVzVwUkdsbVppSXNJbTl3ZEdsdmJuTWlMQ0pCY25KaGVTSXNJbWx6UVhKeVlYa2lMQ0pzWlc1bmRHZ2lMQ0pGY25KdmNpSXNJbXhwYm1Weklpd2ljM0JzYVhRaUxDSmtaV3hwYldsMFpYSnpJaXdpYldGMFkyZ2lMQ0pvZFc1cmN5SXNJbU52YlhCaGNtVk1hVzVsSWl3aWJHbHVaVTUxYldKbGNpSXNJbXhwYm1VaUxDSnZjR1Z5WVhScGIyNGlMQ0p3WVhSamFFTnZiblJsYm5RaUxDSmxjbkp2Y2tOdmRXNTBJaXdpWm5WNmVrWmhZM1J2Y2lJc0ltMXBia3hwYm1VaUxDSnZabVp6WlhRaUxDSnlaVzF2ZG1WRlQwWk9UQ0lzSW1Ga1pFVlBSazVNSWl3aWFIVnVhMFpwZEhNaUxDSm9kVzVySWl3aWRHOVFiM01pTENKcUlpd2lZMjl1ZEdWdWRDSXNJbk4xWW5OMGNpSXNJbWtpTENKdFlYaE1hVzVsSWl3aWIyeGtUR2x1WlhNaUxDSnNiMk5oYkU5bVpuTmxkQ0lzSW05c1pGTjBZWEowSWl3aWFYUmxjbUYwYjNJaUxDSjFibVJsWm1sdVpXUWlMQ0prYVdabVQyWm1jMlYwSWl3aWJtVjNUR2x1WlhNaUxDSmtaV3hwYldsMFpYSWlMQ0pzYVc1bFpHVnNhVzFwZEdWeWN5SXNJbk53YkdsalpTSXNJbkJ5WlhacGIzVnpUM0JsY21GMGFXOXVJaXdpY0c5d0lpd2ljSFZ6YUNJc0lsOXJJaXdpYW05cGJpSXNJbU4xY25KbGJuUkpibVJsZUNJc0luQnliMk5sYzNOSmJtUmxlQ0lzSW1sdVpHVjRJaXdpWTI5dGNHeGxkR1VpTENKc2IyRmtSbWxzWlNJc0ltVnljaUlzSW1SaGRHRWlMQ0oxY0dSaGRHVmtRMjl1ZEdWdWRDSXNJbkJoZEdOb1pXUWlYU3dpYldGd2NHbHVaM01pT2lJN096dG5RMEZIWjBKQkxGVXNSMEZCUVVFc1ZUdDVSRUZ2U1VGRExGa3NSMEZCUVVFc1dUczdRVUYyU1doQ096dEJRVU5CT3pzN096czdkVUpCUlU4c1UwRkJVMFFzVlVGQlZDeERRVUZ2UWtVc1RVRkJjRUlzUlVGQk5FSkRMRTlCUVRWQ0xFVkJRVzFFTzBGQlFVRXNjMFJCUVdSRExFOUJRV01zZFVWQlFVb3NSVUZCU1RzN1FVRkRlRVFzVFVGQlNTeFBRVUZQUkN4UFFVRlFMRXRCUVcxQ0xGRkJRWFpDTEVWQlFXbERPMEZCUXk5Q1FTeGpRVUZWTEhkRlFVRlhRU3hQUVVGWUxFTkJRVlk3UVVGRFJEczdRVUZGUkN4TlFVRkpSU3hOUVVGTlF5eFBRVUZPTEVOQlFXTklMRTlCUVdRc1EwRkJTaXhGUVVFMFFqdEJRVU14UWl4UlFVRkpRU3hSUVVGUlNTeE5RVUZTTEVkQlFXbENMRU5CUVhKQ0xFVkJRWGRDTzBGQlEzUkNMRmxCUVUwc1NVRkJTVU1zUzBGQlNpeERRVUZWTERSRFFVRldMRU5CUVU0N1FVRkRSRHM3UVVGRlJFd3NZMEZCVlVFc1VVRkJVU3hEUVVGU0xFTkJRVlk3UVVGRFJEczdRVUZGUkR0QlFVTkJMRTFCUVVsTkxGRkJRVkZRTEU5QlFVOVJMRXRCUVZBc1EwRkJZU3h4UWtGQllpeERRVUZhTzBGQlFVRXNUVUZEU1VNc1lVRkJZVlFzVDBGQlQxVXNTMEZCVUN4RFFVRmhMSE5DUVVGaUxFdEJRWGRETEVWQlJIcEVPMEZCUVVFc1RVRkZTVU1zVVVGQlVWWXNVVUZCVVZVc1MwRkdjRUk3UVVGQlFTeE5RVWxKUXl4alFVRmpWaXhSUVVGUlZTeFhRVUZTTEVsQlFYZENMRlZCUVVORExGVkJRVVFzUlVGQllVTXNTVUZCWWl4RlFVRnRRa01zVTBGQmJrSXNSVUZCT0VKRExGbEJRVGxDTzBGQlFVRXNiVU5CUVN0RFJpeFRRVUZUUlR0QlFVRjRSRHRCUVVGQkxFZEJTakZETzBGQlFVRXNUVUZMU1VNc1lVRkJZU3hEUVV4cVFqdEJRVUZCTEUxQlRVbERMR0ZCUVdGb1FpeFJRVUZSWjBJc1ZVRkJVaXhKUVVGelFpeERRVTUyUXp0QlFVRkJMRTFCVDBsRExGVkJRVlVzUTBGUVpEdEJRVUZCTEUxQlVVbERMRk5CUVZNc1EwRlNZanRCUVVGQkxFMUJWVWxETERaRFFWWktPMEZCUVVFc1RVRlhTVU1zTUVOQldFbzdPMEZCWVVFN096dEJRVWRCTEZkQlFWTkRMRkZCUVZRc1EwRkJhMEpETEVsQlFXeENMRVZCUVhkQ1F5eExRVUY0UWl4RlFVRXJRanRCUVVNM1FpeFRRVUZMTEVsQlFVbERMRWxCUVVrc1EwRkJZaXhGUVVGblFrRXNTVUZCU1VZc1MwRkJTMnBDTEV0QlFVd3NRMEZCVjBZc1RVRkJMMElzUlVGQmRVTnhRaXhIUVVGMlF5eEZRVUUwUXp0QlFVTXhReXhWUVVGSldpeFBRVUZQVlN4TFFVRkxha0lzUzBGQlRDeERRVUZYYlVJc1EwRkJXQ3hEUVVGWU8wRkJRVUVzVlVGRFNWZ3NXVUZCV1VRc1MwRkJTeXhEUVVGTUxFTkJSR2hDTzBGQlFVRXNWVUZGU1dFc1ZVRkJWV0lzUzBGQlMyTXNUVUZCVEN4RFFVRlpMRU5CUVZvc1EwRkdaRHM3UVVGSlFTeFZRVUZKWWl4alFVRmpMRWRCUVdRc1NVRkJjVUpCTEdOQlFXTXNSMEZCZGtNc1JVRkJORU03UVVGRE1VTTdRVUZEUVN4WlFVRkpMRU5CUVVOSUxGbEJRVmxoTEZGQlFWRXNRMEZCY0VJc1JVRkJkVUpzUWl4TlFVRk5hMElzUzBGQlRpeERRVUYyUWl4RlFVRnhRMVlzVTBGQmNrTXNSVUZCWjBSWkxFOUJRV2hFTEVOQlFVd3NSVUZCSzBRN1FVRkROMFJXT3p0QlFVVkJMR05CUVVsQkxHRkJRV0ZETEZWQlFXcENMRVZCUVRaQ08wRkJRek5DTEcxQ1FVRlBMRXRCUVZBN1FVRkRSRHRCUVVOR08wRkJRMFJQTzBGQlEwUTdRVUZEUmpzN1FVRkZSQ3hYUVVGUExFbEJRVkE3UVVGRFJEczdRVUZGUkR0QlFVTkJMRTlCUVVzc1NVRkJTVWtzU1VGQlNTeERRVUZpTEVWQlFXZENRU3hKUVVGSmJFSXNUVUZCVFU0c1RVRkJNVUlzUlVGQmEwTjNRaXhIUVVGc1F5eEZRVUYxUXp0QlFVTnlReXhSUVVGSlRDeFBRVUZQWWl4TlFVRk5hMElzUTBGQlRpeERRVUZZTzBGQlFVRXNVVUZEU1VNc1ZVRkJWWFpDTEUxQlFVMUdMRTFCUVU0c1IwRkJaVzFDTEV0QlFVdFBMRkZCUkd4RE8wRkJRVUVzVVVGRlNVTXNZMEZCWXl4RFFVWnNRanRCUVVGQkxGRkJSMGxRTEZGQlFWRk1MRk5CUVZOSkxFdEJRVXRUTEZGQlFXUXNSMEZCZVVJc1EwRklja003TzBGQlMwRXNVVUZCU1VNc1YwRkJWeXh2UmtGQmFVSlVMRXRCUVdwQ0xFVkJRWGRDVGl4UFFVRjRRaXhGUVVGcFExY3NUMEZCYWtNc1EwRkJaanM3UVVGRlFTeFhRVUZQUlN4blFrRkJaMEpITEZOQlFYWkNMRVZCUVd0RFNDeGpRVUZqUlN4VlFVRm9SQ3hGUVVFMFJEdEJRVU14UkN4VlFVRkpXQ3hUUVVGVFF5eEpRVUZVTEVWQlFXVkRMRkZCUVZGUExGZEJRWFpDTEVOQlFVb3NSVUZCZVVNN1FVRkRka05TTEdGQlFVdEtMRTFCUVV3c1IwRkJZMEVzVlVGQlZWa3NWMEZCZUVJN1FVRkRRVHRCUVVORU8wRkJRMFk3TzBGQlJVUXNVVUZCU1VFc1owSkJRV2RDUnl4VFFVRndRaXhGUVVFclFqdEJRVU0zUWl4aFFVRlBMRXRCUVZBN1FVRkRSRHM3UVVGRlJEdEJRVU5CTzBGQlEwRm9RaXhqUVVGVlN5eExRVUZMU2l4TlFVRk1MRWRCUVdOSkxFdEJRVXRUTEZGQlFXNUNMRWRCUVRoQ1ZDeExRVUZMVHl4UlFVRTNRenRCUVVORU96dEJRVVZFTzBGQlEwRXNUVUZCU1Vzc1lVRkJZU3hEUVVGcVFqdEJRVU5CTEU5QlFVc3NTVUZCU1ZBc1MwRkJTU3hEUVVGaUxFVkJRV2RDUVN4TFFVRkpiRUlzVFVGQlRVNHNUVUZCTVVJc1JVRkJhME4zUWl4SlFVRnNReXhGUVVGMVF6dEJRVU55UXl4UlFVRkpUQ3hSUVVGUFlpeE5RVUZOYTBJc1JVRkJUaXhEUVVGWU8wRkJRVUVzVVVGRFNVb3NVMEZCVVVRc1RVRkJTMU1zVVVGQlRDeEhRVUZuUWxRc1RVRkJTMG9zVFVGQmNrSXNSMEZCT0VKblFpeFZRVUU1UWl4SFFVRXlReXhEUVVSMlJEdEJRVVZCUVN4clFrRkJZMW9zVFVGQlMyRXNVVUZCVEN4SFFVRm5RbUlzVFVGQlMwOHNVVUZCYmtNN08wRkJSVUVzVVVGQlNVNHNVMEZCVVN4RFFVRmFMRVZCUVdVN1FVRkJSVHRCUVVObVFTeGxRVUZSTEVOQlFWSTdRVUZEUkRzN1FVRkZSQ3hUUVVGTExFbEJRVWxETEVsQlFVa3NRMEZCWWl4RlFVRm5Ra0VzU1VGQlNVWXNUVUZCUzJwQ0xFdEJRVXdzUTBGQlYwWXNUVUZCTDBJc1JVRkJkVU54UWl4SFFVRjJReXhGUVVFMFF6dEJRVU14UXl4VlFVRkpXaXhQUVVGUFZTeE5RVUZMYWtJc1MwRkJUQ3hEUVVGWGJVSXNRMEZCV0N4RFFVRllPMEZCUVVFc1ZVRkRTVmdzV1VGQldVUXNTMEZCU3l4RFFVRk1MRU5CUkdoQ08wRkJRVUVzVlVGRlNXRXNWVUZCVldJc1MwRkJTMk1zVFVGQlRDeERRVUZaTEVOQlFWb3NRMEZHWkR0QlFVRkJMRlZCUjBsVkxGbEJRVmxrTEUxQlFVdGxMR05CUVV3c1EwRkJiMEppTEVOQlFYQkNMRU5CU0doQ096dEJRVXRCTEZWQlFVbFlMR05CUVdNc1IwRkJiRUlzUlVGQmRVSTdRVUZEY2tKVk8wRkJRMFFzVDBGR1JDeE5RVVZQTEVsQlFVbFdMR05CUVdNc1IwRkJiRUlzUlVGQmRVSTdRVUZETlVKU0xHTkJRVTFwUXl4TlFVRk9MRU5CUVdGbUxFMUJRV0lzUlVGQmIwSXNRMEZCY0VJN1FVRkRRV2hDTEcxQ1FVRlhLMElzVFVGQldDeERRVUZyUW1Zc1RVRkJiRUlzUlVGQmVVSXNRMEZCZWtJN1FVRkRSanRCUVVORExFOUJTazBzVFVGSlFTeEpRVUZKVml4alFVRmpMRWRCUVd4Q0xFVkJRWFZDTzBGQlF6VkNVaXhqUVVGTmFVTXNUVUZCVGl4RFFVRmhaaXhOUVVGaUxFVkJRVzlDTEVOQlFYQkNMRVZCUVhWQ1JTeFBRVUYyUWp0QlFVTkJiRUlzYlVKQlFWY3JRaXhOUVVGWUxFTkJRV3RDWml4TlFVRnNRaXhGUVVGNVFpeERRVUY2UWl4RlFVRTBRbUVzVTBGQk5VSTdRVUZEUVdJN1FVRkRSQ3hQUVVwTkxFMUJTVUVzU1VGQlNWWXNZMEZCWXl4SlFVRnNRaXhGUVVGM1FqdEJRVU0zUWl4WlFVRkpNRUlzYjBKQlFXOUNha0lzVFVGQlMycENMRXRCUVV3c1EwRkJWMjFDTEVsQlFVa3NRMEZCWml4SlFVRnZRa1lzVFVGQlMycENMRXRCUVV3c1EwRkJWMjFDTEVsQlFVa3NRMEZCWml4RlFVRnJRaXhEUVVGc1FpeERRVUZ3UWl4SFFVRXlReXhKUVVGdVJUdEJRVU5CTEZsQlFVbGxMSE5DUVVGelFpeEhRVUV4UWl4RlFVRXJRanRCUVVNM1FuQkNMSGRDUVVGakxFbEJRV1E3UVVGRFJDeFRRVVpFTEUxQlJVOHNTVUZCU1c5Q0xITkNRVUZ6UWl4SFFVRXhRaXhGUVVFclFqdEJRVU53UTI1Q0xIRkNRVUZYTEVsQlFWZzdRVUZEUkR0QlFVTkdPMEZCUTBZN1FVRkRSanM3UVVGRlJEdEJRVU5CTEUxQlFVbEVMRmRCUVVvc1JVRkJhVUk3UVVGRFppeFhRVUZQTEVOQlFVTmtMRTFCUVUxQkxFMUJRVTFHTEUxQlFVNHNSMEZCWlN4RFFVRnlRaXhEUVVGU0xFVkJRV2xETzBGQlF5OUNSU3haUVVGTmJVTXNSMEZCVGp0QlFVTkJha01zYVVKQlFWZHBReXhIUVVGWU8wRkJRMFE3UVVGRFJpeEhRVXhFTEUxQlMwOHNTVUZCU1hCQ0xGRkJRVW9zUlVGQll6dEJRVU51UW1Zc1ZVRkJUVzlETEVsQlFVNHNRMEZCVnl4RlFVRllPMEZCUTBGc1F5eGxRVUZYYTBNc1NVRkJXQ3hEUVVGblFpeEpRVUZvUWp0QlFVTkVPMEZCUTBRc1QwRkJTeXhKUVVGSlF5eExRVUZMTEVOQlFXUXNSVUZCYVVKQkxFdEJRVXR5UXl4TlFVRk5SaXhOUVVGT0xFZEJRV1VzUTBGQmNrTXNSVUZCZDBOMVF5eEpRVUY0UXl4RlFVRTRRenRCUVVNMVEzSkRMRlZCUVUxeFF5eEZRVUZPTEVsQlFWbHlReXhOUVVGTmNVTXNSVUZCVGl4SlFVRlpia01zVjBGQlYyMURMRVZCUVZnc1EwRkJlRUk3UVVGRFJEdEJRVU5FTEZOQlFVOXlReXhOUVVGTmMwTXNTVUZCVGl4RFFVRlhMRVZCUVZnc1EwRkJVRHRCUVVORU96dEJRVVZFTzBGQlEwOHNVMEZCVXpsRExGbEJRVlFzUTBGQmMwSkZMRTlCUVhSQ0xFVkJRU3RDUXl4UFFVRXZRaXhGUVVGM1F6dEJRVU0zUXl4TlFVRkpMRTlCUVU5RUxFOUJRVkFzUzBGQmJVSXNVVUZCZGtJc1JVRkJhVU03UVVGREwwSkJMR05CUVZVc2QwVkJRVmRCTEU5QlFWZ3NRMEZCVmp0QlFVTkVPenRCUVVWRUxFMUJRVWsyUXl4bFFVRmxMRU5CUVc1Q08wRkJRMEVzVjBGQlUwTXNXVUZCVkN4SFFVRjNRanRCUVVOMFFpeFJRVUZKUXl4UlFVRlJMME1zVVVGQlVUWkRMR05CUVZJc1EwRkJXanRCUVVOQkxGRkJRVWtzUTBGQlEwVXNTMEZCVEN4RlFVRlpPMEZCUTFZc1lVRkJUemxETEZGQlFWRXJReXhSUVVGU0xFVkJRVkE3UVVGRFJEczdRVUZGUkM5RExGbEJRVkZuUkN4UlFVRlNMRU5CUVdsQ1JpeExRVUZxUWl4RlFVRjNRaXhWUVVGVFJ5eEhRVUZVTEVWQlFXTkRMRWxCUVdRc1JVRkJiMEk3UVVGRE1VTXNWVUZCU1VRc1IwRkJTaXhGUVVGVE8wRkJRMUFzWlVGQlQycEVMRkZCUVZFclF5eFJRVUZTTEVOQlFXbENSU3hIUVVGcVFpeERRVUZRTzBGQlEwUTdPMEZCUlVRc1ZVRkJTVVVzYVVKQlFXbENka1FzVjBGQlYzTkVMRWxCUVZnc1JVRkJhVUpLTEV0QlFXcENMRVZCUVhkQ09VTXNUMEZCZUVJc1EwRkJja0k3UVVGRFFVRXNZMEZCVVc5RUxFOUJRVklzUTBGQlowSk9MRXRCUVdoQ0xFVkJRWFZDU3l4alFVRjJRaXhGUVVGMVF5eFZRVUZUUml4SFFVRlVMRVZCUVdNN1FVRkRia1FzV1VGQlNVRXNSMEZCU2l4RlFVRlRPMEZCUTFBc2FVSkJRVTlxUkN4UlFVRlJLME1zVVVGQlVpeERRVUZwUWtVc1IwRkJha0lzUTBGQlVEdEJRVU5FT3p0QlFVVkVTanRCUVVORUxFOUJUa1E3UVVGUFJDeExRV0pFTzBGQlkwUTdRVUZEUkVFN1FVRkRSQ0lzSW1acGJHVWlPaUpoY0hCc2VTNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3Y0dGeWMyVlFZWFJqYUgwZ1puSnZiU0FuTGk5d1lYSnpaU2M3WEc1cGJYQnZjblFnWkdsemRHRnVZMlZKZEdWeVlYUnZjaUJtY205dElDY3VMaTkxZEdsc0wyUnBjM1JoYm1ObExXbDBaWEpoZEc5eUp6dGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR0Z3Y0d4NVVHRjBZMmdvYzI5MWNtTmxMQ0IxYm1sRWFXWm1MQ0J2Y0hScGIyNXpJRDBnZTMwcElIdGNiaUFnYVdZZ0tIUjVjR1Z2WmlCMWJtbEVhV1ptSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lIVnVhVVJwWm1ZZ1BTQndZWEp6WlZCaGRHTm9LSFZ1YVVScFptWXBPMXh1SUNCOVhHNWNiaUFnYVdZZ0tFRnljbUY1TG1selFYSnlZWGtvZFc1cFJHbG1aaWtwSUh0Y2JpQWdJQ0JwWmlBb2RXNXBSR2xtWmk1c1pXNW5kR2dnUGlBeEtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oyRndjR3g1VUdGMFkyZ2diMjVzZVNCM2IzSnJjeUIzYVhSb0lHRWdjMmx1WjJ4bElHbHVjSFYwTGljcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhWdWFVUnBabVlnUFNCMWJtbEVhV1ptV3pCZE8xeHVJQ0I5WEc1Y2JpQWdMeThnUVhCd2JIa2dkR2hsSUdScFptWWdkRzhnZEdobElHbHVjSFYwWEc0Z0lHeGxkQ0JzYVc1bGN5QTlJSE52ZFhKalpTNXpjR3hwZENndlhGeHlYRnh1ZkZ0Y1hHNWNYSFpjWEdaY1hISmNYSGc0TlYwdktTeGNiaUFnSUNBZ0lHUmxiR2x0YVhSbGNuTWdQU0J6YjNWeVkyVXViV0YwWTJnb0wxeGNjbHhjYm54YlhGeHVYRngyWEZ4bVhGeHlYRng0T0RWZEwyY3BJSHg4SUZ0ZExGeHVJQ0FnSUNBZ2FIVnVhM01nUFNCMWJtbEVhV1ptTG1oMWJtdHpMRnh1WEc0Z0lDQWdJQ0JqYjIxd1lYSmxUR2x1WlNBOUlHOXdkR2x2Ym5NdVkyOXRjR0Z5WlV4cGJtVWdmSHdnS0Noc2FXNWxUblZ0WW1WeUxDQnNhVzVsTENCdmNHVnlZWFJwYjI0c0lIQmhkR05vUTI5dWRHVnVkQ2tnUFQ0Z2JHbHVaU0E5UFQwZ2NHRjBZMmhEYjI1MFpXNTBLU3hjYmlBZ0lDQWdJR1Z5Y205eVEyOTFiblFnUFNBd0xGeHVJQ0FnSUNBZ1puVjZla1poWTNSdmNpQTlJRzl3ZEdsdmJuTXVablY2ZWtaaFkzUnZjaUI4ZkNBd0xGeHVJQ0FnSUNBZ2JXbHVUR2x1WlNBOUlEQXNYRzRnSUNBZ0lDQnZabVp6WlhRZ1BTQXdMRnh1WEc0Z0lDQWdJQ0J5WlcxdmRtVkZUMFpPVEN4Y2JpQWdJQ0FnSUdGa1pFVlBSazVNTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJEYUdWamEzTWdhV1lnZEdobElHaDFibXNnWlhoaFkzUnNlU0JtYVhSeklHOXVJSFJvWlNCd2NtOTJhV1JsWkNCc2IyTmhkR2x2Ymx4dUlDQWdLaTljYmlBZ1puVnVZM1JwYjI0Z2FIVnVhMFpwZEhNb2FIVnVheXdnZEc5UWIzTXBJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnTURzZ2FpQThJR2gxYm1zdWJHbHVaWE11YkdWdVozUm9PeUJxS3lzcElIdGNiaUFnSUNBZ0lHeGxkQ0JzYVc1bElEMGdhSFZ1YXk1c2FXNWxjMXRxWFN4Y2JpQWdJQ0FnSUNBZ0lDQnZjR1Z5WVhScGIyNGdQU0JzYVc1bFd6QmRMRnh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmxiblFnUFNCc2FXNWxMbk4xWW5OMGNpZ3hLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHOXdaWEpoZEdsdmJpQTlQVDBnSnlBbklIeDhJRzl3WlhKaGRHbHZiaUE5UFQwZ0p5MG5LU0I3WEc0Z0lDQWdJQ0FnSUM4dklFTnZiblJsZUhRZ2MyRnVhWFI1SUdOb1pXTnJYRzRnSUNBZ0lDQWdJR2xtSUNnaFkyOXRjR0Z5WlV4cGJtVW9kRzlRYjNNZ0t5QXhMQ0JzYVc1bGMxdDBiMUJ2YzEwc0lHOXdaWEpoZEdsdmJpd2dZMjl1ZEdWdWRDa3BJSHRjYmlBZ0lDQWdJQ0FnSUNCbGNuSnZja052ZFc1MEt5czdYRzVjYmlBZ0lDQWdJQ0FnSUNCcFppQW9aWEp5YjNKRGIzVnVkQ0ErSUdaMWVucEdZV04wYjNJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2RHOVFiM01yS3p0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdmVnh1WEc0Z0lDOHZJRk5sWVhKamFDQmlaWE4wSUdacGRDQnZabVp6WlhSeklHWnZjaUJsWVdOb0lHaDFibXNnWW1GelpXUWdiMjRnZEdobElIQnlaWFpwYjNWeklHOXVaWE5jYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQm9kVzVyY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHeGxkQ0JvZFc1cklEMGdhSFZ1YTNOYmFWMHNYRzRnSUNBZ0lDQWdJRzFoZUV4cGJtVWdQU0JzYVc1bGN5NXNaVzVuZEdnZ0xTQm9kVzVyTG05c1pFeHBibVZ6TEZ4dUlDQWdJQ0FnSUNCc2IyTmhiRTltWm5ObGRDQTlJREFzWEc0Z0lDQWdJQ0FnSUhSdlVHOXpJRDBnYjJabWMyVjBJQ3NnYUhWdWF5NXZiR1JUZEdGeWRDQXRJREU3WEc1Y2JpQWdJQ0JzWlhRZ2FYUmxjbUYwYjNJZ1BTQmthWE4wWVc1alpVbDBaWEpoZEc5eUtIUnZVRzl6TENCdGFXNU1hVzVsTENCdFlYaE1hVzVsS1R0Y2JseHVJQ0FnSUdadmNpQW9PeUJzYjJOaGJFOW1abk5sZENBaFBUMGdkVzVrWldacGJtVmtPeUJzYjJOaGJFOW1abk5sZENBOUlHbDBaWEpoZEc5eUtDa3BJSHRjYmlBZ0lDQWdJR2xtSUNob2RXNXJSbWwwY3lob2RXNXJMQ0IwYjFCdmN5QXJJR3h2WTJGc1QyWm1jMlYwS1NrZ2UxeHVJQ0FnSUNBZ0lDQm9kVzVyTG05bVpuTmxkQ0E5SUc5bVpuTmxkQ0FyUFNCc2IyTmhiRTltWm5ObGREdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHeHZZMkZzVDJabWMyVjBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJUWlhRZ2JHOTNaWElnZEdWNGRDQnNhVzFwZENCMGJ5QmxibVFnYjJZZ2RHaGxJR04xY25KbGJuUWdhSFZ1YXl3Z2MyOGdibVY0ZENCdmJtVnpJR1J2YmlkMElIUnllVnh1SUNBZ0lDOHZJSFJ2SUdacGRDQnZkbVZ5SUdGc2NtVmhaSGtnY0dGMFkyaGxaQ0IwWlhoMFhHNGdJQ0FnYldsdVRHbHVaU0E5SUdoMWJtc3ViMlptYzJWMElDc2dhSFZ1YXk1dmJHUlRkR0Z5ZENBcklHaDFibXN1YjJ4a1RHbHVaWE03WEc0Z0lIMWNibHh1SUNBdkx5QkJjSEJzZVNCd1lYUmphQ0JvZFc1cmMxeHVJQ0JzWlhRZ1pHbG1aazltWm5ObGRDQTlJREE3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dhSFZ1YTNNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQnNaWFFnYUhWdWF5QTlJR2gxYm10elcybGRMRnh1SUNBZ0lDQWdJQ0IwYjFCdmN5QTlJR2gxYm1zdWIyeGtVM1JoY25RZ0t5Qm9kVzVyTG05bVpuTmxkQ0FySUdScFptWlBabVp6WlhRZ0xTQXhPMXh1SUNBZ0lHUnBabVpQWm1aelpYUWdLejBnYUhWdWF5NXVaWGRNYVc1bGN5QXRJR2gxYm1zdWIyeGtUR2x1WlhNN1hHNWNiaUFnSUNCcFppQW9kRzlRYjNNZ1BDQXdLU0I3SUM4dklFTnlaV0YwYVc1bklHRWdibVYzSUdacGJHVmNiaUFnSUNBZ0lIUnZVRzl6SUQwZ01EdGNiaUFnSUNCOVhHNWNiaUFnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBOElHaDFibXN1YkdsdVpYTXViR1Z1WjNSb095QnFLeXNwSUh0Y2JpQWdJQ0FnSUd4bGRDQnNhVzVsSUQwZ2FIVnVheTVzYVc1bGMxdHFYU3hjYmlBZ0lDQWdJQ0FnSUNCdmNHVnlZWFJwYjI0Z1BTQnNhVzVsV3pCZExGeHVJQ0FnSUNBZ0lDQWdJR052Ym5SbGJuUWdQU0JzYVc1bExuTjFZbk4wY2lneEtTeGNiaUFnSUNBZ0lDQWdJQ0JrWld4cGJXbDBaWElnUFNCb2RXNXJMbXhwYm1Wa1pXeHBiV2wwWlhKelcycGRPMXh1WEc0Z0lDQWdJQ0JwWmlBb2IzQmxjbUYwYVc5dUlEMDlQU0FuSUNjcElIdGNiaUFnSUNBZ0lDQWdkRzlRYjNNckt6dGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9iM0JsY21GMGFXOXVJRDA5UFNBbkxTY3BJSHRjYmlBZ0lDQWdJQ0FnYkdsdVpYTXVjM0JzYVdObEtIUnZVRzl6TENBeEtUdGNiaUFnSUNBZ0lDQWdaR1ZzYVcxcGRHVnljeTV6Y0d4cFkyVW9kRzlRYjNNc0lERXBPMXh1SUNBZ0lDQWdMeW9nYVhOMFlXNWlkV3dnYVdkdWIzSmxJR1ZzYzJVZ0tpOWNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9iM0JsY21GMGFXOXVJRDA5UFNBbkt5Y3BJSHRjYmlBZ0lDQWdJQ0FnYkdsdVpYTXVjM0JzYVdObEtIUnZVRzl6TENBd0xDQmpiMjUwWlc1MEtUdGNiaUFnSUNBZ0lDQWdaR1ZzYVcxcGRHVnljeTV6Y0d4cFkyVW9kRzlRYjNNc0lEQXNJR1JsYkdsdGFYUmxjaWs3WEc0Z0lDQWdJQ0FnSUhSdlVHOXpLeXM3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0c5d1pYSmhkR2x2YmlBOVBUMGdKMXhjWEZ3bktTQjdYRzRnSUNBZ0lDQWdJR3hsZENCd2NtVjJhVzkxYzA5d1pYSmhkR2x2YmlBOUlHaDFibXN1YkdsdVpYTmJhaUF0SURGZElEOGdhSFZ1YXk1c2FXNWxjMXRxSUMwZ01WMWJNRjBnT2lCdWRXeHNPMXh1SUNBZ0lDQWdJQ0JwWmlBb2NISmxkbWx2ZFhOUGNHVnlZWFJwYjI0Z1BUMDlJQ2NySnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsYlc5MlpVVlBSazVNSUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNod2NtVjJhVzkxYzA5d1pYSmhkR2x2YmlBOVBUMGdKeTBuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdZV1JrUlU5R1Rrd2dQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdMeThnU0dGdVpHeGxJRVZQUms1TUlHbHVjMlZ5ZEdsdmJpOXlaVzF2ZG1Gc1hHNGdJR2xtSUNoeVpXMXZkbVZGVDBaT1RDa2dlMXh1SUNBZ0lIZG9hV3hsSUNnaGJHbHVaWE5iYkdsdVpYTXViR1Z1WjNSb0lDMGdNVjBwSUh0Y2JpQWdJQ0FnSUd4cGJtVnpMbkJ2Y0NncE8xeHVJQ0FnSUNBZ1pHVnNhVzFwZEdWeWN5NXdiM0FvS1R0Y2JpQWdJQ0I5WEc0Z0lIMGdaV3h6WlNCcFppQW9ZV1JrUlU5R1Rrd3BJSHRjYmlBZ0lDQnNhVzVsY3k1d2RYTm9LQ2NuS1R0Y2JpQWdJQ0JrWld4cGJXbDBaWEp6TG5CMWMyZ29KMXhjYmljcE8xeHVJQ0I5WEc0Z0lHWnZjaUFvYkdWMElGOXJJRDBnTURzZ1gyc2dQQ0JzYVc1bGN5NXNaVzVuZEdnZ0xTQXhPeUJmYXlzcktTQjdYRzRnSUNBZ2JHbHVaWE5iWDJ0ZElEMGdiR2x1WlhOYlgydGRJQ3NnWkdWc2FXMXBkR1Z5YzF0ZmExMDdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHeHBibVZ6TG1wdmFXNG9KeWNwTzF4dWZWeHVYRzR2THlCWGNtRndjR1Z5SUhSb1lYUWdjM1Z3Y0c5eWRITWdiWFZzZEdsd2JHVWdabWxzWlNCd1lYUmphR1Z6SUhacFlTQmpZV3hzWW1GamEzTXVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZWEJ3YkhsUVlYUmphR1Z6S0hWdWFVUnBabVlzSUc5d2RHbHZibk1wSUh0Y2JpQWdhV1lnS0hSNWNHVnZaaUIxYm1sRWFXWm1JRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUhWdWFVUnBabVlnUFNCd1lYSnpaVkJoZEdOb0tIVnVhVVJwWm1ZcE8xeHVJQ0I5WEc1Y2JpQWdiR1YwSUdOMWNuSmxiblJKYm1SbGVDQTlJREE3WEc0Z0lHWjFibU4wYVc5dUlIQnliMk5sYzNOSmJtUmxlQ2dwSUh0Y2JpQWdJQ0JzWlhRZ2FXNWtaWGdnUFNCMWJtbEVhV1ptVzJOMWNuSmxiblJKYm1SbGVDc3JYVHRjYmlBZ0lDQnBaaUFvSVdsdVpHVjRLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdiM0IwYVc5dWN5NWpiMjF3YkdWMFpTZ3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHOXdkR2x2Ym5NdWJHOWhaRVpwYkdVb2FXNWtaWGdzSUdaMWJtTjBhVzl1S0dWeWNpd2daR0YwWVNrZ2UxeHVJQ0FnSUNBZ2FXWWdLR1Z5Y2lrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2IzQjBhVzl1Y3k1amIyMXdiR1YwWlNobGNuSXBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JzWlhRZ2RYQmtZWFJsWkVOdmJuUmxiblFnUFNCaGNIQnNlVkJoZEdOb0tHUmhkR0VzSUdsdVpHVjRMQ0J2Y0hScGIyNXpLVHRjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVjR0YwWTJobFpDaHBibVJsZUN3Z2RYQmtZWFJsWkVOdmJuUmxiblFzSUdaMWJtTjBhVzl1S0dWeWNpa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1pYSnlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUc5d2RHbHZibk11WTI5dGNHeGxkR1VvWlhKeUtUdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUhCeWIyTmxjM05KYm1SbGVDZ3BPMXh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmU2s3WEc0Z0lIMWNiaUFnY0hKdlkyVnpjMGx1WkdWNEtDazdYRzU5WEc0aVhYMD1cblxuXG4vKioqLyB9KSxcbi8qIDExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3BhcnNlUGF0Y2ggPSBwYXJzZVBhdGNoO1xuXHRmdW5jdGlvbiBwYXJzZVBhdGNoKHVuaURpZmYpIHtcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIC8qaXN0YW5idWwgaWdub3JlIGVuZCovb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cblx0ICB2YXIgZGlmZnN0ciA9IHVuaURpZmYuc3BsaXQoL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdLyksXG5cdCAgICAgIGRlbGltaXRlcnMgPSB1bmlEaWZmLm1hdGNoKC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS9nKSB8fCBbXSxcblx0ICAgICAgbGlzdCA9IFtdLFxuXHQgICAgICBpID0gMDtcblxuXHQgIGZ1bmN0aW9uIHBhcnNlSW5kZXgoKSB7XG5cdCAgICB2YXIgaW5kZXggPSB7fTtcblx0ICAgIGxpc3QucHVzaChpbmRleCk7XG5cblx0ICAgIC8vIFBhcnNlIGRpZmYgbWV0YWRhdGFcblx0ICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcblx0ICAgICAgdmFyIGxpbmUgPSBkaWZmc3RyW2ldO1xuXG5cdCAgICAgIC8vIEZpbGUgaGVhZGVyIGZvdW5kLCBlbmQgcGFyc2luZyBkaWZmIG1ldGFkYXRhXG5cdCAgICAgIGlmICgvXihcXC1cXC1cXC18XFwrXFwrXFwrfEBAKVxccy8udGVzdChsaW5lKSkge1xuXHQgICAgICAgIGJyZWFrO1xuXHQgICAgICB9XG5cblx0ICAgICAgLy8gRGlmZiBpbmRleFxuXHQgICAgICB2YXIgaGVhZGVyID0gL14oPzpJbmRleDp8ZGlmZig/OiAtciBcXHcrKSspXFxzKyguKz8pXFxzKiQvLmV4ZWMobGluZSk7XG5cdCAgICAgIGlmIChoZWFkZXIpIHtcblx0ICAgICAgICBpbmRleC5pbmRleCA9IGhlYWRlclsxXTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGkrKztcblx0ICAgIH1cblxuXHQgICAgLy8gUGFyc2UgZmlsZSBoZWFkZXJzIGlmIHRoZXkgYXJlIGRlZmluZWQuIFVuaWZpZWQgZGlmZiByZXF1aXJlcyB0aGVtLCBidXRcblx0ICAgIC8vIHRoZXJlJ3Mgbm8gdGVjaG5pY2FsIGlzc3VlcyB0byBoYXZlIGFuIGlzb2xhdGVkIGh1bmsgd2l0aG91dCBmaWxlIGhlYWRlclxuXHQgICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTtcblx0ICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG5cblx0ICAgIC8vIFBhcnNlIGh1bmtzXG5cdCAgICBpbmRleC5odW5rcyA9IFtdO1xuXG5cdCAgICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG5cdCAgICAgIHZhciBfbGluZSA9IGRpZmZzdHJbaV07XG5cblx0ICAgICAgaWYgKC9eKEluZGV4OnxkaWZmfFxcLVxcLVxcLXxcXCtcXCtcXCspXFxzLy50ZXN0KF9saW5lKSkge1xuXHQgICAgICAgIGJyZWFrO1xuXHQgICAgICB9IGVsc2UgaWYgKC9eQEAvLnRlc3QoX2xpbmUpKSB7XG5cdCAgICAgICAgaW5kZXguaHVua3MucHVzaChwYXJzZUh1bmsoKSk7XG5cdCAgICAgIH0gZWxzZSBpZiAoX2xpbmUgJiYgb3B0aW9ucy5zdHJpY3QpIHtcblx0ICAgICAgICAvLyBJZ25vcmUgdW5leHBlY3RlZCBjb250ZW50IHVubGVzcyBpbiBzdHJpY3QgbW9kZVxuXHQgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBsaW5lICcgKyAoaSArIDEpICsgJyAnICsgSlNPTi5zdHJpbmdpZnkoX2xpbmUpKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBpKys7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICAvLyBQYXJzZXMgdGhlIC0tLSBhbmQgKysrIGhlYWRlcnMsIGlmIG5vbmUgYXJlIGZvdW5kLCBubyBsaW5lc1xuXHQgIC8vIGFyZSBjb25zdW1lZC5cblx0ICBmdW5jdGlvbiBwYXJzZUZpbGVIZWFkZXIoaW5kZXgpIHtcblx0ICAgIHZhciBoZWFkZXJQYXR0ZXJuID0gL14oLS0tfFxcK1xcK1xcKylcXHMrKFtcXFMgXSopKD86XFx0KC4qPylcXHMqKT8kLztcblx0ICAgIHZhciBmaWxlSGVhZGVyID0gaGVhZGVyUGF0dGVybi5leGVjKGRpZmZzdHJbaV0pO1xuXHQgICAgaWYgKGZpbGVIZWFkZXIpIHtcblx0ICAgICAgdmFyIGtleVByZWZpeCA9IGZpbGVIZWFkZXJbMV0gPT09ICctLS0nID8gJ29sZCcgOiAnbmV3Jztcblx0ICAgICAgdmFyIGZpbGVOYW1lID0gZmlsZUhlYWRlclsyXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnXFxcXCcpO1xuXHQgICAgICBpZiAoL15cIi4qXCIkLy50ZXN0KGZpbGVOYW1lKSkge1xuXHQgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUuc3Vic3RyKDEsIGZpbGVOYW1lLmxlbmd0aCAtIDIpO1xuXHQgICAgICB9XG5cdCAgICAgIGluZGV4W2tleVByZWZpeCArICdGaWxlTmFtZSddID0gZmlsZU5hbWU7XG5cdCAgICAgIGluZGV4W2tleVByZWZpeCArICdIZWFkZXInXSA9IGZpbGVIZWFkZXJbM107XG5cblx0ICAgICAgaSsrO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIC8vIFBhcnNlcyBhIGh1bmtcblx0ICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIGEgaHVuay5cblx0ICBmdW5jdGlvbiBwYXJzZUh1bmsoKSB7XG5cdCAgICB2YXIgY2h1bmtIZWFkZXJJbmRleCA9IGksXG5cdCAgICAgICAgY2h1bmtIZWFkZXJMaW5lID0gZGlmZnN0cltpKytdLFxuXHQgICAgICAgIGNodW5rSGVhZGVyID0gY2h1bmtIZWFkZXJMaW5lLnNwbGl0KC9AQCAtKFxcZCspKD86LChcXGQrKSk/IFxcKyhcXGQrKSg/OiwoXFxkKykpPyBAQC8pO1xuXG5cdCAgICB2YXIgaHVuayA9IHtcblx0ICAgICAgb2xkU3RhcnQ6ICtjaHVua0hlYWRlclsxXSxcblx0ICAgICAgb2xkTGluZXM6ICtjaHVua0hlYWRlclsyXSB8fCAxLFxuXHQgICAgICBuZXdTdGFydDogK2NodW5rSGVhZGVyWzNdLFxuXHQgICAgICBuZXdMaW5lczogK2NodW5rSGVhZGVyWzRdIHx8IDEsXG5cdCAgICAgIGxpbmVzOiBbXSxcblx0ICAgICAgbGluZWRlbGltaXRlcnM6IFtdXG5cdCAgICB9O1xuXG5cdCAgICB2YXIgYWRkQ291bnQgPSAwLFxuXHQgICAgICAgIHJlbW92ZUNvdW50ID0gMDtcblx0ICAgIGZvciAoOyBpIDwgZGlmZnN0ci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAvLyBMaW5lcyBzdGFydGluZyB3aXRoICctLS0nIGNvdWxkIGJlIG1pc3Rha2VuIGZvciB0aGUgXCJyZW1vdmUgbGluZVwiIG9wZXJhdGlvblxuXHQgICAgICAvLyBCdXQgdGhleSBjb3VsZCBiZSB0aGUgaGVhZGVyIGZvciB0aGUgbmV4dCBmaWxlLiBUaGVyZWZvcmUgcHJ1bmUgc3VjaCBjYXNlcyBvdXQuXG5cdCAgICAgIGlmIChkaWZmc3RyW2ldLmluZGV4T2YoJy0tLSAnKSA9PT0gMCAmJiBpICsgMiA8IGRpZmZzdHIubGVuZ3RoICYmIGRpZmZzdHJbaSArIDFdLmluZGV4T2YoJysrKyAnKSA9PT0gMCAmJiBkaWZmc3RyW2kgKyAyXS5pbmRleE9mKCdAQCcpID09PSAwKSB7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIG9wZXJhdGlvbiA9IGRpZmZzdHJbaV1bMF07XG5cblx0ICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnIHx8IG9wZXJhdGlvbiA9PT0gJy0nIHx8IG9wZXJhdGlvbiA9PT0gJyAnIHx8IG9wZXJhdGlvbiA9PT0gJ1xcXFwnKSB7XG5cdCAgICAgICAgaHVuay5saW5lcy5wdXNoKGRpZmZzdHJbaV0pO1xuXHQgICAgICAgIGh1bmsubGluZWRlbGltaXRlcnMucHVzaChkZWxpbWl0ZXJzW2ldIHx8ICdcXG4nKTtcblxuXHQgICAgICAgIGlmIChvcGVyYXRpb24gPT09ICcrJykge1xuXHQgICAgICAgICAgYWRkQ291bnQrKztcblx0ICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG5cdCAgICAgICAgICByZW1vdmVDb3VudCsrO1xuXHQgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnICcpIHtcblx0ICAgICAgICAgIGFkZENvdW50Kys7XG5cdCAgICAgICAgICByZW1vdmVDb3VudCsrO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBicmVhaztcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICAvLyBIYW5kbGUgdGhlIGVtcHR5IGJsb2NrIGNvdW50IGNhc2Vcblx0ICAgIGlmICghYWRkQ291bnQgJiYgaHVuay5uZXdMaW5lcyA9PT0gMSkge1xuXHQgICAgICBodW5rLm5ld0xpbmVzID0gMDtcblx0ICAgIH1cblx0ICAgIGlmICghcmVtb3ZlQ291bnQgJiYgaHVuay5vbGRMaW5lcyA9PT0gMSkge1xuXHQgICAgICBodW5rLm9sZExpbmVzID0gMDtcblx0ICAgIH1cblxuXHQgICAgLy8gUGVyZm9ybSBvcHRpb25hbCBzYW5pdHkgY2hlY2tpbmdcblx0ICAgIGlmIChvcHRpb25zLnN0cmljdCkge1xuXHQgICAgICBpZiAoYWRkQ291bnQgIT09IGh1bmsubmV3TGluZXMpIHtcblx0ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZGVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAocmVtb3ZlQ291bnQgIT09IGh1bmsub2xkTGluZXMpIHtcblx0ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlbW92ZWQgbGluZSBjb3VudCBkaWQgbm90IG1hdGNoIGZvciBodW5rIGF0IGxpbmUgJyArIChjaHVua0hlYWRlckluZGV4ICsgMSkpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJldHVybiBodW5rO1xuXHQgIH1cblxuXHQgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcblx0ICAgIHBhcnNlSW5kZXgoKTtcblx0ICB9XG5cblx0ICByZXR1cm4gbGlzdDtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTl3WVhSamFDOXdZWEp6WlM1cWN5SmRMQ0p1WVcxbGN5STZXeUp3WVhKelpWQmhkR05vSWl3aWRXNXBSR2xtWmlJc0ltOXdkR2x2Ym5NaUxDSmthV1ptYzNSeUlpd2ljM0JzYVhRaUxDSmtaV3hwYldsMFpYSnpJaXdpYldGMFkyZ2lMQ0pzYVhOMElpd2lhU0lzSW5CaGNuTmxTVzVrWlhnaUxDSnBibVJsZUNJc0luQjFjMmdpTENKc1pXNW5kR2dpTENKc2FXNWxJaXdpZEdWemRDSXNJbWhsWVdSbGNpSXNJbVY0WldNaUxDSndZWEp6WlVacGJHVklaV0ZrWlhJaUxDSm9kVzVyY3lJc0luQmhjbk5sU0hWdWF5SXNJbk4wY21samRDSXNJa1Z5Y205eUlpd2lTbE5QVGlJc0luTjBjbWx1WjJsbWVTSXNJbWhsWVdSbGNsQmhkSFJsY200aUxDSm1hV3hsU0dWaFpHVnlJaXdpYTJWNVVISmxabWw0SWl3aVptbHNaVTVoYldVaUxDSnlaWEJzWVdObElpd2ljM1ZpYzNSeUlpd2lZMmgxYm10SVpXRmtaWEpKYm1SbGVDSXNJbU5vZFc1clNHVmhaR1Z5VEdsdVpTSXNJbU5vZFc1clNHVmhaR1Z5SWl3aWFIVnVheUlzSW05c1pGTjBZWEowSWl3aWIyeGtUR2x1WlhNaUxDSnVaWGRUZEdGeWRDSXNJbTVsZDB4cGJtVnpJaXdpYkdsdVpYTWlMQ0pzYVc1bFpHVnNhVzFwZEdWeWN5SXNJbUZrWkVOdmRXNTBJaXdpY21WdGIzWmxRMjkxYm5RaUxDSnBibVJsZUU5bUlpd2liM0JsY21GMGFXOXVJbDBzSW0xaGNIQnBibWR6SWpvaU96czdaME5CUVdkQ1FTeFZMRWRCUVVGQkxGVTdRVUZCVkN4VFFVRlRRU3hWUVVGVUxFTkJRVzlDUXl4UFFVRndRaXhGUVVFeVF6dEJRVUZCTEhORVFVRmtReXhQUVVGakxIVkZRVUZLTEVWQlFVazdPMEZCUTJoRUxFMUJRVWxETEZWQlFWVkdMRkZCUVZGSExFdEJRVklzUTBGQll5eHhRa0ZCWkN4RFFVRmtPMEZCUVVFc1RVRkRTVU1zWVVGQllVb3NVVUZCVVVzc1MwRkJVaXhEUVVGakxITkNRVUZrTEV0QlFYbERMRVZCUkRGRU8wRkJRVUVzVFVGRlNVTXNUMEZCVHl4RlFVWllPMEZCUVVFc1RVRkhTVU1zU1VGQlNTeERRVWhTT3p0QlFVdEJMRmRCUVZORExGVkJRVlFzUjBGQmMwSTdRVUZEY0VJc1VVRkJTVU1zVVVGQlVTeEZRVUZhTzBGQlEwRklMRk5CUVV0SkxFbEJRVXdzUTBGQlZVUXNTMEZCVmpzN1FVRkZRVHRCUVVOQkxGZEJRVTlHTEVsQlFVbE1MRkZCUVZGVExFMUJRVzVDTEVWQlFUSkNPMEZCUTNwQ0xGVkJRVWxETEU5QlFVOVdMRkZCUVZGTExFTkJRVklzUTBGQldEczdRVUZGUVR0QlFVTkJMRlZCUVVrc2QwSkJRWGRDVFN4SlFVRjRRaXhEUVVFMlFrUXNTVUZCTjBJc1EwRkJTaXhGUVVGM1F6dEJRVU4wUXp0QlFVTkVPenRCUVVWRU8wRkJRMEVzVlVGQlNVVXNVMEZCVlN3d1EwRkJSQ3hEUVVFMlEwTXNTVUZCTjBNc1EwRkJhMFJJTEVsQlFXeEVMRU5CUVdJN1FVRkRRU3hWUVVGSlJTeE5RVUZLTEVWQlFWazdRVUZEVmt3c1kwRkJUVUVzUzBGQlRpeEhRVUZqU3l4UFFVRlBMRU5CUVZBc1EwRkJaRHRCUVVORU96dEJRVVZFVUR0QlFVTkVPenRCUVVWRU8wRkJRMEU3UVVGRFFWTXNiMEpCUVdkQ1VDeExRVUZvUWp0QlFVTkJUeXh2UWtGQlowSlFMRXRCUVdoQ096dEJRVVZCTzBGQlEwRkJMRlZCUVUxUkxFdEJRVTRzUjBGQll5eEZRVUZrT3p0QlFVVkJMRmRCUVU5V0xFbEJRVWxNTEZGQlFWRlRMRTFCUVc1Q0xFVkJRVEpDTzBGQlEzcENMRlZCUVVsRExGRkJRVTlXTEZGQlFWRkxMRU5CUVZJc1EwRkJXRHM3UVVGRlFTeFZRVUZKTEdsRFFVRnBRMDBzU1VGQmFrTXNRMEZCYzBORUxFdEJRWFJETEVOQlFVb3NSVUZCYVVRN1FVRkRMME03UVVGRFJDeFBRVVpFTEUxQlJVOHNTVUZCU1N4TlFVRk5ReXhKUVVGT0xFTkJRVmRFTEV0QlFWZ3NRMEZCU2l4RlFVRnpRanRCUVVNelFrZ3NZMEZCVFZFc1MwRkJUaXhEUVVGWlVDeEpRVUZhTEVOQlFXbENVU3hYUVVGcVFqdEJRVU5FTEU5QlJrMHNUVUZGUVN4SlFVRkpUaXhUUVVGUldDeFJRVUZSYTBJc1RVRkJjRUlzUlVGQk5FSTdRVUZEYWtNN1FVRkRRU3hqUVVGTkxFbEJRVWxETEV0QlFVb3NRMEZCVlN4dFFrRkJiVUppTEVsQlFVa3NRMEZCZGtJc1NVRkJORUlzUjBGQk5VSXNSMEZCYTBOakxFdEJRVXRETEZOQlFVd3NRMEZCWlZZc1MwRkJaaXhEUVVFMVF5eERRVUZPTzBGQlEwUXNUMEZJVFN4TlFVZEJPMEZCUTB4TU8wRkJRMFE3UVVGRFJqdEJRVU5HT3p0QlFVVkVPMEZCUTBFN1FVRkRRU3hYUVVGVFV5eGxRVUZVTEVOQlFYbENVQ3hMUVVGNlFpeEZRVUZuUXp0QlFVTTVRaXhSUVVGTll5eG5Ra0ZCWjBJc01FTkJRWFJDTzBGQlEwRXNVVUZCVFVNc1lVRkJZVVFzWTBGQlkxSXNTVUZCWkN4RFFVRnRRbUlzVVVGQlVVc3NRMEZCVWl4RFFVRnVRaXhEUVVGdVFqdEJRVU5CTEZGQlFVbHBRaXhWUVVGS0xFVkJRV2RDTzBGQlEyUXNWVUZCU1VNc1dVRkJXVVFzVjBGQlZ5eERRVUZZTEUxQlFXdENMRXRCUVd4Q0xFZEJRVEJDTEV0QlFURkNMRWRCUVd0RExFdEJRV3hFTzBGQlEwRXNWVUZCU1VVc1YwRkJWMFlzVjBGQlZ5eERRVUZZTEVWQlFXTkhMRTlCUVdRc1EwRkJjMElzVDBGQmRFSXNSVUZCSzBJc1NVRkJMMElzUTBGQlpqdEJRVU5CTEZWQlFVa3NVMEZCVTJRc1NVRkJWQ3hEUVVGallTeFJRVUZrTEVOQlFVb3NSVUZCTmtJN1FVRkRNMEpCTEcxQ1FVRlhRU3hUUVVGVFJTeE5RVUZVTEVOQlFXZENMRU5CUVdoQ0xFVkJRVzFDUml4VFFVRlRaaXhOUVVGVUxFZEJRV3RDTEVOQlFYSkRMRU5CUVZnN1FVRkRSRHRCUVVORVJpeFpRVUZOWjBJc1dVRkJXU3hWUVVGc1FpeEpRVUZuUTBNc1VVRkJhRU03UVVGRFFXcENMRmxCUVUxblFpeFpRVUZaTEZGQlFXeENMRWxCUVRoQ1JDeFhRVUZYTEVOQlFWZ3NRMEZCT1VJN08wRkJSVUZxUWp0QlFVTkVPMEZCUTBZN08wRkJSVVE3UVVGRFFUdEJRVU5CTEZkQlFWTlhMRk5CUVZRc1IwRkJjVUk3UVVGRGJrSXNVVUZCU1Zjc2JVSkJRVzFDZEVJc1EwRkJka0k3UVVGQlFTeFJRVU5KZFVJc2EwSkJRV3RDTlVJc1VVRkJVVXNzUjBGQlVpeERRVVIwUWp0QlFVRkJMRkZCUlVsM1FpeGpRVUZqUkN4blFrRkJaMEl6UWl4TFFVRm9RaXhEUVVGelFpdzBRMEZCZEVJc1EwRkdiRUk3TzBGQlNVRXNVVUZCU1RaQ0xFOUJRVTg3UVVGRFZFTXNaMEpCUVZVc1EwRkJRMFlzV1VGQldTeERRVUZhTEVOQlJFWTdRVUZGVkVjc1owSkJRVlVzUTBGQlEwZ3NXVUZCV1N4RFFVRmFMRU5CUVVRc1NVRkJiVUlzUTBGR2NFSTdRVUZIVkVrc1owSkJRVlVzUTBGQlEwb3NXVUZCV1N4RFFVRmFMRU5CU0VZN1FVRkpWRXNzWjBKQlFWVXNRMEZCUTB3c1dVRkJXU3hEUVVGYUxFTkJRVVFzU1VGQmJVSXNRMEZLY0VJN1FVRkxWRTBzWVVGQlR5eEZRVXhGTzBGQlRWUkRMSE5DUVVGblFqdEJRVTVRTEV0QlFWZzdPMEZCVTBFc1VVRkJTVU1zVjBGQlZ5eERRVUZtTzBGQlFVRXNVVUZEU1VNc1kwRkJZeXhEUVVSc1FqdEJRVVZCTEZkQlFVOXFReXhKUVVGSlRDeFJRVUZSVXl4TlFVRnVRaXhGUVVFeVFrb3NSMEZCTTBJc1JVRkJaME03UVVGRE9VSTdRVUZEUVR0QlFVTkJMRlZCUVVsTUxGRkJRVkZMTEVOQlFWSXNSVUZCVjJ0RExFOUJRVmdzUTBGQmJVSXNUVUZCYmtJc1RVRkJLMElzUTBGQkwwSXNTVUZEVFd4RExFbEJRVWtzUTBGQlNpeEhRVUZSVEN4UlFVRlJVeXhOUVVSMFFpeEpRVVZMVkN4UlFVRlJTeXhKUVVGSkxFTkJRVm9zUlVGQlpXdERMRTlCUVdZc1EwRkJkVUlzVFVGQmRrSXNUVUZCYlVNc1EwRkdlRU1zU1VGSFMzWkRMRkZCUVZGTExFbEJRVWtzUTBGQldpeEZRVUZsYTBNc1QwRkJaaXhEUVVGMVFpeEpRVUYyUWl4TlFVRnBReXhEUVVneFF5eEZRVWMyUXp0QlFVTjZRenRCUVVOSU8wRkJRMFFzVlVGQlNVTXNXVUZCV1hoRExGRkJRVkZMTEVOQlFWSXNSVUZCVnl4RFFVRllMRU5CUVdoQ096dEJRVVZCTEZWQlFVbHRReXhqUVVGakxFZEJRV1FzU1VGQmNVSkJMR05CUVdNc1IwRkJia01zU1VGQk1FTkJMR05CUVdNc1IwRkJlRVFzU1VGQkswUkJMR05CUVdNc1NVRkJha1lzUlVGQmRVWTdRVUZEY2taV0xHRkJRVXRMTEV0QlFVd3NRMEZCVnpOQ0xFbEJRVmdzUTBGQlowSlNMRkZCUVZGTExFTkJRVklzUTBGQmFFSTdRVUZEUVhsQ0xHRkJRVXROTEdOQlFVd3NRMEZCYjBJMVFpeEpRVUZ3UWl4RFFVRjVRazRzVjBGQlYwY3NRMEZCV0N4TFFVRnBRaXhKUVVFeFF6czdRVUZGUVN4WlFVRkpiVU1zWTBGQll5eEhRVUZzUWl4RlFVRjFRanRCUVVOeVFrZzdRVUZEUkN4VFFVWkVMRTFCUlU4c1NVRkJTVWNzWTBGQll5eEhRVUZzUWl4RlFVRjFRanRCUVVNMVFrWTdRVUZEUkN4VFFVWk5MRTFCUlVFc1NVRkJTVVVzWTBGQll5eEhRVUZzUWl4RlFVRjFRanRCUVVNMVFrZzdRVUZEUVVNN1FVRkRSRHRCUVVOR0xFOUJXa1FzVFVGWlR6dEJRVU5NTzBGQlEwUTdRVUZEUmpzN1FVRkZSRHRCUVVOQkxGRkJRVWtzUTBGQlEwUXNVVUZCUkN4SlFVRmhVQ3hMUVVGTFNTeFJRVUZNTEV0QlFXdENMRU5CUVc1RExFVkJRWE5ETzBGQlEzQkRTaXhYUVVGTFNTeFJRVUZNTEVkQlFXZENMRU5CUVdoQ08wRkJRMFE3UVVGRFJDeFJRVUZKTEVOQlFVTkpMRmRCUVVRc1NVRkJaMEpTTEV0QlFVdEZMRkZCUVV3c1MwRkJhMElzUTBGQmRFTXNSVUZCZVVNN1FVRkRka05HTEZkQlFVdEZMRkZCUVV3c1IwRkJaMElzUTBGQmFFSTdRVUZEUkRzN1FVRkZSRHRCUVVOQkxGRkJRVWxxUXl4UlFVRlJhMElzVFVGQldpeEZRVUZ2UWp0QlFVTnNRaXhWUVVGSmIwSXNZVUZCWVZBc1MwRkJTMGtzVVVGQmRFSXNSVUZCWjBNN1FVRkRPVUlzWTBGQlRTeEpRVUZKYUVJc1MwRkJTaXhEUVVGVkxITkVRVUZ6UkZNc2JVSkJRVzFDTEVOQlFYcEZMRU5CUVZZc1EwRkJUanRCUVVORU8wRkJRMFFzVlVGQlNWY3NaMEpCUVdkQ1VpeExRVUZMUlN4UlFVRjZRaXhGUVVGdFF6dEJRVU5xUXl4alFVRk5MRWxCUVVsa0xFdEJRVW9zUTBGQlZTeDNSRUZCZDBSVExHMUNRVUZ0UWl4RFFVRXpSU3hEUVVGV0xFTkJRVTQ3UVVGRFJEdEJRVU5HT3p0QlFVVkVMRmRCUVU5SExFbEJRVkE3UVVGRFJEczdRVUZGUkN4VFFVRlBla0lzU1VGQlNVd3NVVUZCVVZNc1RVRkJia0lzUlVGQk1rSTdRVUZEZWtKSU8wRkJRMFE3TzBGQlJVUXNVMEZCVDBZc1NVRkJVRHRCUVVORUlpd2labWxzWlNJNkluQmhjbk5sTG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2laWGh3YjNKMElHWjFibU4wYVc5dUlIQmhjbk5sVUdGMFkyZ29kVzVwUkdsbVppd2diM0IwYVc5dWN5QTlJSHQ5S1NCN1hHNGdJR3hsZENCa2FXWm1jM1J5SUQwZ2RXNXBSR2xtWmk1emNHeHBkQ2d2WEZ4eVhGeHVmRnRjWEc1Y1hIWmNYR1pjWEhKY1hIZzROVjB2S1N4Y2JpQWdJQ0FnSUdSbGJHbHRhWFJsY25NZ1BTQjFibWxFYVdabUxtMWhkR05vS0M5Y1hISmNYRzU4VzF4Y2JseGNkbHhjWmx4Y2NseGNlRGcxWFM5bktTQjhmQ0JiWFN4Y2JpQWdJQ0FnSUd4cGMzUWdQU0JiWFN4Y2JpQWdJQ0FnSUdrZ1BTQXdPMXh1WEc0Z0lHWjFibU4wYVc5dUlIQmhjbk5sU1c1a1pYZ29LU0I3WEc0Z0lDQWdiR1YwSUdsdVpHVjRJRDBnZTMwN1hHNGdJQ0FnYkdsemRDNXdkWE5vS0dsdVpHVjRLVHRjYmx4dUlDQWdJQzh2SUZCaGNuTmxJR1JwWm1ZZ2JXVjBZV1JoZEdGY2JpQWdJQ0IzYUdsc1pTQW9hU0E4SUdScFptWnpkSEl1YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0JzWlhRZ2JHbHVaU0E5SUdScFptWnpkSEpiYVYwN1hHNWNiaUFnSUNBZ0lDOHZJRVpwYkdVZ2FHVmhaR1Z5SUdadmRXNWtMQ0JsYm1RZ2NHRnljMmx1WnlCa2FXWm1JRzFsZEdGa1lYUmhYRzRnSUNBZ0lDQnBaaUFvTDE0b1hGd3RYRnd0WEZ3dGZGeGNLMXhjSzF4Y0szeEFRQ2xjWEhNdkxuUmxjM1FvYkdsdVpTa3BJSHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQzh2SUVScFptWWdhVzVrWlhoY2JpQWdJQ0FnSUd4bGRDQm9aV0ZrWlhJZ1BTQW9MMTRvUHpwSmJtUmxlRHA4WkdsbVppZy9PaUF0Y2lCY1hIY3JLU3NwWEZ4ekt5Z3VLejhwWEZ4ektpUXZLUzVsZUdWaktHeHBibVVwTzF4dUlDQWdJQ0FnYVdZZ0tHaGxZV1JsY2lrZ2UxeHVJQ0FnSUNBZ0lDQnBibVJsZUM1cGJtUmxlQ0E5SUdobFlXUmxjbHN4WFR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FTc3JPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRkJoY25ObElHWnBiR1VnYUdWaFpHVnljeUJwWmlCMGFHVjVJR0Z5WlNCa1pXWnBibVZrTGlCVmJtbG1hV1ZrSUdScFptWWdjbVZ4ZFdseVpYTWdkR2hsYlN3Z1luVjBYRzRnSUNBZ0x5OGdkR2hsY21VbmN5QnVieUIwWldOb2JtbGpZV3dnYVhOemRXVnpJSFJ2SUdoaGRtVWdZVzRnYVhOdmJHRjBaV1FnYUhWdWF5QjNhWFJvYjNWMElHWnBiR1VnYUdWaFpHVnlYRzRnSUNBZ2NHRnljMlZHYVd4bFNHVmhaR1Z5S0dsdVpHVjRLVHRjYmlBZ0lDQndZWEp6WlVacGJHVklaV0ZrWlhJb2FXNWtaWGdwTzF4dVhHNGdJQ0FnTHk4Z1VHRnljMlVnYUhWdWEzTmNiaUFnSUNCcGJtUmxlQzVvZFc1cmN5QTlJRnRkTzF4dVhHNGdJQ0FnZDJocGJHVWdLR2tnUENCa2FXWm1jM1J5TG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnYkdWMElHeHBibVVnUFNCa2FXWm1jM1J5VzJsZE8xeHVYRzRnSUNBZ0lDQnBaaUFvTDE0b1NXNWtaWGc2ZkdScFptWjhYRnd0WEZ3dFhGd3RmRnhjSzF4Y0sxeGNLeWxjWEhNdkxuUmxjM1FvYkdsdVpTa3BJSHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLQzllUUVBdkxuUmxjM1FvYkdsdVpTa3BJSHRjYmlBZ0lDQWdJQ0FnYVc1a1pYZ3VhSFZ1YTNNdWNIVnphQ2h3WVhKelpVaDFibXNvS1NrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHeHBibVVnSmlZZ2IzQjBhVzl1Y3k1emRISnBZM1FwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdTV2R1YjNKbElIVnVaWGh3WldOMFpXUWdZMjl1ZEdWdWRDQjFibXhsYzNNZ2FXNGdjM1J5YVdOMElHMXZaR1ZjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RWYm10dWIzZHVJR3hwYm1VZ0p5QXJJQ2hwSUNzZ01Ta2dLeUFuSUNjZ0t5QktVMDlPTG5OMGNtbHVaMmxtZVNoc2FXNWxLU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JwS3lzN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5OGdVR0Z5YzJWeklIUm9aU0F0TFMwZ1lXNWtJQ3NyS3lCb1pXRmtaWEp6TENCcFppQnViMjVsSUdGeVpTQm1iM1Z1WkN3Z2JtOGdiR2x1WlhOY2JpQWdMeThnWVhKbElHTnZibk4xYldWa0xseHVJQ0JtZFc1amRHbHZiaUJ3WVhKelpVWnBiR1ZJWldGa1pYSW9hVzVrWlhncElIdGNiaUFnSUNCamIyNXpkQ0JvWldGa1pYSlFZWFIwWlhKdUlEMGdMMTRvTFMwdGZGeGNLMXhjSzF4Y0t5bGNYSE1yS0Z0Y1hGTWdYU29wS0Q4NlhGeDBLQzRxUHlsY1hITXFLVDhrTHp0Y2JpQWdJQ0JqYjI1emRDQm1hV3hsU0dWaFpHVnlJRDBnYUdWaFpHVnlVR0YwZEdWeWJpNWxlR1ZqS0dScFptWnpkSEpiYVYwcE8xeHVJQ0FnSUdsbUlDaG1hV3hsU0dWaFpHVnlLU0I3WEc0Z0lDQWdJQ0JzWlhRZ2EyVjVVSEpsWm1sNElEMGdabWxzWlVobFlXUmxjbHN4WFNBOVBUMGdKeTB0TFNjZ1B5QW5iMnhrSnlBNklDZHVaWGNuTzF4dUlDQWdJQ0FnYkdWMElHWnBiR1ZPWVcxbElEMGdabWxzWlVobFlXUmxjbHN5WFM1eVpYQnNZV05sS0M5Y1hGeGNYRnhjWEM5bkxDQW5YRnhjWENjcE8xeHVJQ0FnSUNBZ2FXWWdLQzllWENJdUtsd2lKQzh1ZEdWemRDaG1hV3hsVG1GdFpTa3BJSHRjYmlBZ0lDQWdJQ0FnWm1sc1pVNWhiV1VnUFNCbWFXeGxUbUZ0WlM1emRXSnpkSElvTVN3Z1ptbHNaVTVoYldVdWJHVnVaM1JvSUMwZ01pazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnBibVJsZUZ0clpYbFFjbVZtYVhnZ0t5QW5SbWxzWlU1aGJXVW5YU0E5SUdacGJHVk9ZVzFsTzF4dUlDQWdJQ0FnYVc1a1pYaGJhMlY1VUhKbFptbDRJQ3NnSjBobFlXUmxjaWRkSUQwZ1ptbHNaVWhsWVdSbGNsc3pYVHRjYmx4dUlDQWdJQ0FnYVNzck8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJRkJoY25ObGN5QmhJR2gxYm10Y2JpQWdMeThnVkdocGN5QmhjM04xYldWeklIUm9ZWFFnZDJVZ1lYSmxJR0YwSUhSb1pTQnpkR0Z5ZENCdlppQmhJR2gxYm1zdVhHNGdJR1oxYm1OMGFXOXVJSEJoY25ObFNIVnVheWdwSUh0Y2JpQWdJQ0JzWlhRZ1kyaDFibXRJWldGa1pYSkpibVJsZUNBOUlHa3NYRzRnSUNBZ0lDQWdJR05vZFc1clNHVmhaR1Z5VEdsdVpTQTlJR1JwWm1aemRISmJhU3NyWFN4Y2JpQWdJQ0FnSUNBZ1kyaDFibXRJWldGa1pYSWdQU0JqYUhWdWEwaGxZV1JsY2t4cGJtVXVjM0JzYVhRb0wwQkFJQzBvWEZ4a0t5a29Qem9zS0Z4Y1pDc3BLVDhnWEZ3cktGeGNaQ3NwS0Q4NkxDaGNYR1FyS1NrL0lFQkFMeWs3WEc1Y2JpQWdJQ0JzWlhRZ2FIVnVheUE5SUh0Y2JpQWdJQ0FnSUc5c1pGTjBZWEowT2lBclkyaDFibXRJWldGa1pYSmJNVjBzWEc0Z0lDQWdJQ0J2YkdSTWFXNWxjem9nSzJOb2RXNXJTR1ZoWkdWeVd6SmRJSHg4SURFc1hHNGdJQ0FnSUNCdVpYZFRkR0Z5ZERvZ0syTm9kVzVyU0dWaFpHVnlXek5kTEZ4dUlDQWdJQ0FnYm1WM1RHbHVaWE02SUN0amFIVnVhMGhsWVdSbGNsczBYU0I4ZkNBeExGeHVJQ0FnSUNBZ2JHbHVaWE02SUZ0ZExGeHVJQ0FnSUNBZ2JHbHVaV1JsYkdsdGFYUmxjbk02SUZ0ZFhHNGdJQ0FnZlR0Y2JseHVJQ0FnSUd4bGRDQmhaR1JEYjNWdWRDQTlJREFzWEc0Z0lDQWdJQ0FnSUhKbGJXOTJaVU52ZFc1MElEMGdNRHRjYmlBZ0lDQm1iM0lnS0RzZ2FTQThJR1JwWm1aemRISXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUM4dklFeHBibVZ6SUhOMFlYSjBhVzVuSUhkcGRHZ2dKeTB0TFNjZ1kyOTFiR1FnWW1VZ2JXbHpkR0ZyWlc0Z1ptOXlJSFJvWlNCY0luSmxiVzkyWlNCc2FXNWxYQ0lnYjNCbGNtRjBhVzl1WEc0Z0lDQWdJQ0F2THlCQ2RYUWdkR2hsZVNCamIzVnNaQ0JpWlNCMGFHVWdhR1ZoWkdWeUlHWnZjaUIwYUdVZ2JtVjRkQ0JtYVd4bExpQlVhR1Z5WldadmNtVWdjSEoxYm1VZ2MzVmphQ0JqWVhObGN5QnZkWFF1WEc0Z0lDQWdJQ0JwWmlBb1pHbG1abk4wY2x0cFhTNXBibVJsZUU5bUtDY3RMUzBnSnlrZ1BUMDlJREJjYmlBZ0lDQWdJQ0FnSUNBZ0lDWW1JQ2hwSUNzZ01pQThJR1JwWm1aemRISXViR1Z1WjNSb0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSmlZZ1pHbG1abk4wY2x0cElDc2dNVjB1YVc1a1pYaFBaaWduS3lzcklDY3BJRDA5UFNBd1hHNGdJQ0FnSUNBZ0lDQWdJQ0FtSmlCa2FXWm1jM1J5VzJrZ0t5QXlYUzVwYm1SbGVFOW1LQ2RBUUNjcElEMDlQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCc1pYUWdiM0JsY21GMGFXOXVJRDBnWkdsbVpuTjBjbHRwWFZzd1hUdGNibHh1SUNBZ0lDQWdhV1lnS0c5d1pYSmhkR2x2YmlBOVBUMGdKeXNuSUh4OElHOXdaWEpoZEdsdmJpQTlQVDBnSnkwbklIeDhJRzl3WlhKaGRHbHZiaUE5UFQwZ0p5QW5JSHg4SUc5d1pYSmhkR2x2YmlBOVBUMGdKMXhjWEZ3bktTQjdYRzRnSUNBZ0lDQWdJR2gxYm1zdWJHbHVaWE11Y0hWemFDaGthV1ptYzNSeVcybGRLVHRjYmlBZ0lDQWdJQ0FnYUhWdWF5NXNhVzVsWkdWc2FXMXBkR1Z5Y3k1d2RYTm9LR1JsYkdsdGFYUmxjbk5iYVYwZ2ZId2dKMXhjYmljcE8xeHVYRzRnSUNBZ0lDQWdJR2xtSUNodmNHVnlZWFJwYjI0Z1BUMDlJQ2NySnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR0ZrWkVOdmRXNTBLeXM3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2IzQmxjbUYwYVc5dUlEMDlQU0FuTFNjcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WlcxdmRtVkRiM1Z1ZENzck8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzl3WlhKaGRHbHZiaUE5UFQwZ0p5QW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ1lXUmtRMjkxYm5Rckt6dGNiaUFnSUNBZ0lDQWdJQ0J5WlcxdmRtVkRiM1Z1ZENzck8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCSVlXNWtiR1VnZEdobElHVnRjSFI1SUdKc2IyTnJJR052ZFc1MElHTmhjMlZjYmlBZ0lDQnBaaUFvSVdGa1pFTnZkVzUwSUNZbUlHaDFibXN1Ym1WM1RHbHVaWE1nUFQwOUlERXBJSHRjYmlBZ0lDQWdJR2gxYm1zdWJtVjNUR2x1WlhNZ1BTQXdPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9JWEpsYlc5MlpVTnZkVzUwSUNZbUlHaDFibXN1YjJ4a1RHbHVaWE1nUFQwOUlERXBJSHRjYmlBZ0lDQWdJR2gxYm1zdWIyeGtUR2x1WlhNZ1BTQXdPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRkJsY21admNtMGdiM0IwYVc5dVlXd2djMkZ1YVhSNUlHTm9aV05yYVc1blhHNGdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdWMzUnlhV04wS1NCN1hHNGdJQ0FnSUNCcFppQW9ZV1JrUTI5MWJuUWdJVDA5SUdoMWJtc3VibVYzVEdsdVpYTXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RCWkdSbFpDQnNhVzVsSUdOdmRXNTBJR1JwWkNCdWIzUWdiV0YwWTJnZ1ptOXlJR2gxYm1zZ1lYUWdiR2x1WlNBbklDc2dLR05vZFc1clNHVmhaR1Z5U1c1a1pYZ2dLeUF4S1NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9jbVZ0YjNabFEyOTFiblFnSVQwOUlHaDFibXN1YjJ4a1RHbHVaWE1wSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkU1pXMXZkbVZrSUd4cGJtVWdZMjkxYm5RZ1pHbGtJRzV2ZENCdFlYUmphQ0JtYjNJZ2FIVnVheUJoZENCc2FXNWxJQ2NnS3lBb1kyaDFibXRJWldGa1pYSkpibVJsZUNBcklERXBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2FIVnVhenRjYmlBZ2ZWeHVYRzRnSUhkb2FXeGxJQ2hwSUR3Z1pHbG1abk4wY2k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0J3WVhKelpVbHVaR1Y0S0NrN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2JHbHpkRHRjYm4xY2JpSmRmUT09XG5cblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9cInVzZSBzdHJpY3RcIjtcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdGV4cG9ydHNbXCJkZWZhdWx0XCJdID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9mdW5jdGlvbiAoc3RhcnQsIG1pbkxpbmUsIG1heExpbmUpIHtcblx0ICB2YXIgd2FudEZvcndhcmQgPSB0cnVlLFxuXHQgICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuXHQgICAgICBmb3J3YXJkRXhoYXVzdGVkID0gZmFsc2UsXG5cdCAgICAgIGxvY2FsT2Zmc2V0ID0gMTtcblxuXHQgIHJldHVybiBmdW5jdGlvbiBpdGVyYXRvcigpIHtcblx0ICAgIGlmICh3YW50Rm9yd2FyZCAmJiAhZm9yd2FyZEV4aGF1c3RlZCkge1xuXHQgICAgICBpZiAoYmFja3dhcmRFeGhhdXN0ZWQpIHtcblx0ICAgICAgICBsb2NhbE9mZnNldCsrO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHdhbnRGb3J3YXJkID0gZmFsc2U7XG5cdCAgICAgIH1cblxuXHQgICAgICAvLyBDaGVjayBpZiB0cnlpbmcgdG8gZml0IGJleW9uZCB0ZXh0IGxlbmd0aCwgYW5kIGlmIG5vdCwgY2hlY2sgaXQgZml0c1xuXHQgICAgICAvLyBhZnRlciBvZmZzZXQgbG9jYXRpb24gKG9yIGRlc2lyZWQgbG9jYXRpb24gb24gZmlyc3QgaXRlcmF0aW9uKVxuXHQgICAgICBpZiAoc3RhcnQgKyBsb2NhbE9mZnNldCA8PSBtYXhMaW5lKSB7XG5cdCAgICAgICAgcmV0dXJuIGxvY2FsT2Zmc2V0O1xuXHQgICAgICB9XG5cblx0ICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IHRydWU7XG5cdCAgICB9XG5cblx0ICAgIGlmICghYmFja3dhcmRFeGhhdXN0ZWQpIHtcblx0ICAgICAgaWYgKCFmb3J3YXJkRXhoYXVzdGVkKSB7XG5cdCAgICAgICAgd2FudEZvcndhcmQgPSB0cnVlO1xuXHQgICAgICB9XG5cblx0ICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZWZvcmUgdGV4dCBiZWdpbm5pbmcsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcblx0ICAgICAgLy8gYmVmb3JlIG9mZnNldCBsb2NhdGlvblxuXHQgICAgICBpZiAobWluTGluZSA8PSBzdGFydCAtIGxvY2FsT2Zmc2V0KSB7XG5cdCAgICAgICAgcmV0dXJuIC1sb2NhbE9mZnNldCsrO1xuXHQgICAgICB9XG5cblx0ICAgICAgYmFja3dhcmRFeGhhdXN0ZWQgPSB0cnVlO1xuXHQgICAgICByZXR1cm4gaXRlcmF0b3IoKTtcblx0ICAgIH1cblxuXHQgICAgLy8gV2UgdHJpZWQgdG8gZml0IGh1bmsgYmVmb3JlIHRleHQgYmVnaW5uaW5nIGFuZCBiZXlvbmQgdGV4dCBsZW5ndGgsIHRoZW5cblx0ICAgIC8vIGh1bmsgY2FuJ3QgZml0IG9uIHRoZSB0ZXh0LiBSZXR1cm4gdW5kZWZpbmVkXG5cdCAgfTtcblx0fTtcblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MWRHbHNMMlJwYzNSaGJtTmxMV2wwWlhKaGRHOXlMbXB6SWwwc0ltNWhiV1Z6SWpwYkluTjBZWEowSWl3aWJXbHVUR2x1WlNJc0ltMWhlRXhwYm1VaUxDSjNZVzUwUm05eWQyRnlaQ0lzSW1KaFkydDNZWEprUlhob1lYVnpkR1ZrSWl3aVptOXlkMkZ5WkVWNGFHRjFjM1JsWkNJc0lteHZZMkZzVDJabWMyVjBJaXdpYVhSbGNtRjBiM0lpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3TkVOQlIyVXNWVUZCVTBFc1MwRkJWQ3hGUVVGblFrTXNUMEZCYUVJc1JVRkJlVUpETEU5QlFYcENMRVZCUVd0RE8wRkJReTlETEUxQlFVbERMR05CUVdNc1NVRkJiRUk3UVVGQlFTeE5RVU5KUXl4dlFrRkJiMElzUzBGRWVFSTdRVUZCUVN4TlFVVkpReXh0UWtGQmJVSXNTMEZHZGtJN1FVRkJRU3hOUVVkSlF5eGpRVUZqTEVOQlNHeENPenRCUVV0QkxGTkJRVThzVTBGQlUwTXNVVUZCVkN4SFFVRnZRanRCUVVONlFpeFJRVUZKU2l4bFFVRmxMRU5CUVVORkxHZENRVUZ3UWl4RlFVRnpRenRCUVVOd1F5eFZRVUZKUkN4cFFrRkJTaXhGUVVGMVFqdEJRVU55UWtVN1FVRkRSQ3hQUVVaRUxFMUJSVTg3UVVGRFRFZ3NjMEpCUVdNc1MwRkJaRHRCUVVORU96dEJRVVZFTzBGQlEwRTdRVUZEUVN4VlFVRkpTQ3hSUVVGUlRTeFhRVUZTTEVsQlFYVkNTaXhQUVVFelFpeEZRVUZ2UXp0QlFVTnNReXhsUVVGUFNTeFhRVUZRTzBGQlEwUTdPMEZCUlVSRUxIbENRVUZ0UWl4SlFVRnVRanRCUVVORU96dEJRVVZFTEZGQlFVa3NRMEZCUTBRc2FVSkJRVXdzUlVGQmQwSTdRVUZEZEVJc1ZVRkJTU3hEUVVGRFF5eG5Ra0ZCVEN4RlFVRjFRanRCUVVOeVFrWXNjMEpCUVdNc1NVRkJaRHRCUVVORU96dEJRVVZFTzBGQlEwRTdRVUZEUVN4VlFVRkpSaXhYUVVGWFJDeFJRVUZSVFN4WFFVRjJRaXhGUVVGdlF6dEJRVU5zUXl4bFFVRlBMRU5CUVVOQkxHRkJRVkk3UVVGRFJEczdRVUZGUkVZc01FSkJRVzlDTEVsQlFYQkNPMEZCUTBFc1lVRkJUMGNzVlVGQlVEdEJRVU5FT3p0QlFVVkVPMEZCUTBFN1FVRkRSQ3hIUVd4RFJEdEJRVzFEUkN4RElpd2labWxzWlNJNkltUnBjM1JoYm1ObExXbDBaWEpoZEc5eUxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHk4Z1NYUmxjbUYwYjNJZ2RHaGhkQ0IwY21GMlpYSnpaWE1nYVc0Z2RHaGxJSEpoYm1kbElHOW1JRnR0YVc0c0lHMWhlRjBzSUhOMFpYQndhVzVuWEc0dkx5QmllU0JrYVhOMFlXNWpaU0JtY205dElHRWdaMmwyWlc0Z2MzUmhjblFnY0c5emFYUnBiMjR1SUVrdVpTNGdabTl5SUZzd0xDQTBYU3dnZDJsMGFGeHVMeThnYzNSaGNuUWdiMllnTWl3Z2RHaHBjeUIzYVd4c0lHbDBaWEpoZEdVZ01pd2dNeXdnTVN3Z05Dd2dNQzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR1oxYm1OMGFXOXVLSE4wWVhKMExDQnRhVzVNYVc1bExDQnRZWGhNYVc1bEtTQjdYRzRnSUd4bGRDQjNZVzUwUm05eWQyRnlaQ0E5SUhSeWRXVXNYRzRnSUNBZ0lDQmlZV05yZDJGeVpFVjRhR0YxYzNSbFpDQTlJR1poYkhObExGeHVJQ0FnSUNBZ1ptOXlkMkZ5WkVWNGFHRjFjM1JsWkNBOUlHWmhiSE5sTEZ4dUlDQWdJQ0FnYkc5allXeFBabVp6WlhRZ1BTQXhPMXh1WEc0Z0lISmxkSFZ5YmlCbWRXNWpkR2x2YmlCcGRHVnlZWFJ2Y2lncElIdGNiaUFnSUNCcFppQW9kMkZ1ZEVadmNuZGhjbVFnSmlZZ0lXWnZjbmRoY21SRmVHaGhkWE4wWldRcElIdGNiaUFnSUNBZ0lHbG1JQ2hpWVdOcmQyRnlaRVY0YUdGMWMzUmxaQ2tnZTF4dUlDQWdJQ0FnSUNCc2IyTmhiRTltWm5ObGRDc3JPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkMkZ1ZEVadmNuZGhjbVFnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnTHk4Z1EyaGxZMnNnYVdZZ2RISjVhVzVuSUhSdklHWnBkQ0JpWlhsdmJtUWdkR1Y0ZENCc1pXNW5kR2dzSUdGdVpDQnBaaUJ1YjNRc0lHTm9aV05ySUdsMElHWnBkSE5jYmlBZ0lDQWdJQzh2SUdGbWRHVnlJRzltWm5ObGRDQnNiMk5oZEdsdmJpQW9iM0lnWkdWemFYSmxaQ0JzYjJOaGRHbHZiaUJ2YmlCbWFYSnpkQ0JwZEdWeVlYUnBiMjRwWEc0Z0lDQWdJQ0JwWmlBb2MzUmhjblFnS3lCc2IyTmhiRTltWm5ObGRDQThQU0J0WVhoTWFXNWxLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJzYjJOaGJFOW1abk5sZER0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1ptOXlkMkZ5WkVWNGFHRjFjM1JsWkNBOUlIUnlkV1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0NGaVlXTnJkMkZ5WkVWNGFHRjFjM1JsWkNrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0ZtYjNKM1lYSmtSWGhvWVhWemRHVmtLU0I3WEc0Z0lDQWdJQ0FnSUhkaGJuUkdiM0ozWVhKa0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0x5OGdRMmhsWTJzZ2FXWWdkSEo1YVc1bklIUnZJR1pwZENCaVpXWnZjbVVnZEdWNGRDQmlaV2RwYm01cGJtY3NJR0Z1WkNCcFppQnViM1FzSUdOb1pXTnJJR2wwSUdacGRITmNiaUFnSUNBZ0lDOHZJR0psWm05eVpTQnZabVp6WlhRZ2JHOWpZWFJwYjI1Y2JpQWdJQ0FnSUdsbUlDaHRhVzVNYVc1bElEdzlJSE4wWVhKMElDMGdiRzlqWVd4UFptWnpaWFFwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUMxc2IyTmhiRTltWm5ObGRDc3JPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JpWVdOcmQyRnlaRVY0YUdGMWMzUmxaQ0E5SUhSeWRXVTdYRzRnSUNBZ0lDQnlaWFIxY200Z2FYUmxjbUYwYjNJb0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QlhaU0IwY21sbFpDQjBieUJtYVhRZ2FIVnVheUJpWldadmNtVWdkR1Y0ZENCaVpXZHBibTVwYm1jZ1lXNWtJR0psZVc5dVpDQjBaWGgwSUd4bGJtZDBhQ3dnZEdobGJseHVJQ0FnSUM4dklHaDFibXNnWTJGdUozUWdabWwwSUc5dUlIUm9aU0IwWlhoMExpQlNaWFIxY200Z2RXNWtaV1pwYm1Wa1hHNGdJSDA3WEc1OVhHNGlYWDA9XG5cblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jYWxjTGluZUNvdW50ID0gY2FsY0xpbmVDb3VudDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovbWVyZ2UgPSBtZXJnZTtcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19jcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19wYXJzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2FycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2Z1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovZnVuY3Rpb24gY2FsY0xpbmVDb3VudChodW5rKSB7XG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfY2FsY09sZE5ld0xpbmVDb3VudCA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovY2FsY09sZE5ld0xpbmVDb3VudChodW5rLmxpbmVzKSxcblx0ICAgICAgb2xkTGluZXMgPSBfY2FsY09sZE5ld0xpbmVDb3VudC5vbGRMaW5lcyxcblx0ICAgICAgbmV3TGluZXMgPSBfY2FsY09sZE5ld0xpbmVDb3VudC5uZXdMaW5lcztcblxuXHQgIGlmIChvbGRMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICBodW5rLm9sZExpbmVzID0gb2xkTGluZXM7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGRlbGV0ZSBodW5rLm9sZExpbmVzO1xuXHQgIH1cblxuXHQgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICBodW5rLm5ld0xpbmVzID0gbmV3TGluZXM7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGRlbGV0ZSBodW5rLm5ld0xpbmVzO1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIG1lcmdlKG1pbmUsIHRoZWlycywgYmFzZSkge1xuXHQgIG1pbmUgPSBsb2FkUGF0Y2gobWluZSwgYmFzZSk7XG5cdCAgdGhlaXJzID0gbG9hZFBhdGNoKHRoZWlycywgYmFzZSk7XG5cblx0ICB2YXIgcmV0ID0ge307XG5cblx0ICAvLyBGb3IgaW5kZXggd2UganVzdCBsZXQgaXQgcGFzcyB0aHJvdWdoIGFzIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgbmVjZXNzYXJ5IG1lYW5pbmcuXG5cdCAgLy8gTGVhdmluZyBzYW5pdHkgY2hlY2tzIG9uIHRoaXMgdG8gdGhlIEFQSSBjb25zdW1lciB0aGF0IG1heSBrbm93IG1vcmUgYWJvdXQgdGhlXG5cdCAgLy8gbWVhbmluZyBpbiB0aGVpciBvd24gY29udGV4dC5cblx0ICBpZiAobWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXgpIHtcblx0ICAgIHJldC5pbmRleCA9IG1pbmUuaW5kZXggfHwgdGhlaXJzLmluZGV4O1xuXHQgIH1cblxuXHQgIGlmIChtaW5lLm5ld0ZpbGVOYW1lIHx8IHRoZWlycy5uZXdGaWxlTmFtZSkge1xuXHQgICAgaWYgKCFmaWxlTmFtZUNoYW5nZWQobWluZSkpIHtcblx0ICAgICAgLy8gTm8gaGVhZGVyIG9yIG5vIGNoYW5nZSBpbiBvdXJzLCB1c2UgdGhlaXJzIChhbmQgb3VycyBpZiB0aGVpcnMgZG9lcyBub3QgZXhpc3QpXG5cdCAgICAgIHJldC5vbGRGaWxlTmFtZSA9IHRoZWlycy5vbGRGaWxlTmFtZSB8fCBtaW5lLm9sZEZpbGVOYW1lO1xuXHQgICAgICByZXQubmV3RmlsZU5hbWUgPSB0aGVpcnMubmV3RmlsZU5hbWUgfHwgbWluZS5uZXdGaWxlTmFtZTtcblx0ICAgICAgcmV0Lm9sZEhlYWRlciA9IHRoZWlycy5vbGRIZWFkZXIgfHwgbWluZS5vbGRIZWFkZXI7XG5cdCAgICAgIHJldC5uZXdIZWFkZXIgPSB0aGVpcnMubmV3SGVhZGVyIHx8IG1pbmUubmV3SGVhZGVyO1xuXHQgICAgfSBlbHNlIGlmICghZmlsZU5hbWVDaGFuZ2VkKHRoZWlycykpIHtcblx0ICAgICAgLy8gTm8gaGVhZGVyIG9yIG5vIGNoYW5nZSBpbiB0aGVpcnMsIHVzZSBvdXJzXG5cdCAgICAgIHJldC5vbGRGaWxlTmFtZSA9IG1pbmUub2xkRmlsZU5hbWU7XG5cdCAgICAgIHJldC5uZXdGaWxlTmFtZSA9IG1pbmUubmV3RmlsZU5hbWU7XG5cdCAgICAgIHJldC5vbGRIZWFkZXIgPSBtaW5lLm9sZEhlYWRlcjtcblx0ICAgICAgcmV0Lm5ld0hlYWRlciA9IG1pbmUubmV3SGVhZGVyO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgLy8gQm90aCBjaGFuZ2VkLi4uIGZpZ3VyZSBpdCBvdXRcblx0ICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm9sZEZpbGVOYW1lLCB0aGVpcnMub2xkRmlsZU5hbWUpO1xuXHQgICAgICByZXQubmV3RmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUubmV3RmlsZU5hbWUsIHRoZWlycy5uZXdGaWxlTmFtZSk7XG5cdCAgICAgIHJldC5vbGRIZWFkZXIgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUub2xkSGVhZGVyLCB0aGVpcnMub2xkSGVhZGVyKTtcblx0ICAgICAgcmV0Lm5ld0hlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5uZXdIZWFkZXIsIHRoZWlycy5uZXdIZWFkZXIpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldC5odW5rcyA9IFtdO1xuXG5cdCAgdmFyIG1pbmVJbmRleCA9IDAsXG5cdCAgICAgIHRoZWlyc0luZGV4ID0gMCxcblx0ICAgICAgbWluZU9mZnNldCA9IDAsXG5cdCAgICAgIHRoZWlyc09mZnNldCA9IDA7XG5cblx0ICB3aGlsZSAobWluZUluZGV4IDwgbWluZS5odW5rcy5sZW5ndGggfHwgdGhlaXJzSW5kZXggPCB0aGVpcnMuaHVua3MubGVuZ3RoKSB7XG5cdCAgICB2YXIgbWluZUN1cnJlbnQgPSBtaW5lLmh1bmtzW21pbmVJbmRleF0gfHwgeyBvbGRTdGFydDogSW5maW5pdHkgfSxcblx0ICAgICAgICB0aGVpcnNDdXJyZW50ID0gdGhlaXJzLmh1bmtzW3RoZWlyc0luZGV4XSB8fCB7IG9sZFN0YXJ0OiBJbmZpbml0eSB9O1xuXG5cdCAgICBpZiAoaHVua0JlZm9yZShtaW5lQ3VycmVudCwgdGhlaXJzQ3VycmVudCkpIHtcblx0ICAgICAgLy8gVGhpcyBwYXRjaCBkb2VzIG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBvdGhlcnMsIHlheS5cblx0ICAgICAgcmV0Lmh1bmtzLnB1c2goY2xvbmVIdW5rKG1pbmVDdXJyZW50LCBtaW5lT2Zmc2V0KSk7XG5cdCAgICAgIG1pbmVJbmRleCsrO1xuXHQgICAgICB0aGVpcnNPZmZzZXQgKz0gbWluZUN1cnJlbnQubmV3TGluZXMgLSBtaW5lQ3VycmVudC5vbGRMaW5lcztcblx0ICAgIH0gZWxzZSBpZiAoaHVua0JlZm9yZSh0aGVpcnNDdXJyZW50LCBtaW5lQ3VycmVudCkpIHtcblx0ICAgICAgLy8gVGhpcyBwYXRjaCBkb2VzIG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBvdGhlcnMsIHlheS5cblx0ICAgICAgcmV0Lmh1bmtzLnB1c2goY2xvbmVIdW5rKHRoZWlyc0N1cnJlbnQsIHRoZWlyc09mZnNldCkpO1xuXHQgICAgICB0aGVpcnNJbmRleCsrO1xuXHQgICAgICBtaW5lT2Zmc2V0ICs9IHRoZWlyc0N1cnJlbnQubmV3TGluZXMgLSB0aGVpcnNDdXJyZW50Lm9sZExpbmVzO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgLy8gT3ZlcmxhcCwgbWVyZ2UgYXMgYmVzdCB3ZSBjYW5cblx0ICAgICAgdmFyIG1lcmdlZEh1bmsgPSB7XG5cdCAgICAgICAgb2xkU3RhcnQ6IE1hdGgubWluKG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCB0aGVpcnNDdXJyZW50Lm9sZFN0YXJ0KSxcblx0ICAgICAgICBvbGRMaW5lczogMCxcblx0ICAgICAgICBuZXdTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQubmV3U3RhcnQgKyBtaW5lT2Zmc2V0LCB0aGVpcnNDdXJyZW50Lm9sZFN0YXJ0ICsgdGhlaXJzT2Zmc2V0KSxcblx0ICAgICAgICBuZXdMaW5lczogMCxcblx0ICAgICAgICBsaW5lczogW11cblx0ICAgICAgfTtcblx0ICAgICAgbWVyZ2VMaW5lcyhtZXJnZWRIdW5rLCBtaW5lQ3VycmVudC5vbGRTdGFydCwgbWluZUN1cnJlbnQubGluZXMsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQubGluZXMpO1xuXHQgICAgICB0aGVpcnNJbmRleCsrO1xuXHQgICAgICBtaW5lSW5kZXgrKztcblxuXHQgICAgICByZXQuaHVua3MucHVzaChtZXJnZWRIdW5rKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXR1cm4gcmV0O1xuXHR9XG5cblx0ZnVuY3Rpb24gbG9hZFBhdGNoKHBhcmFtLCBiYXNlKSB7XG5cdCAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcblx0ICAgIGlmICgvXkBAL20udGVzdChwYXJhbSkgfHwgL15JbmRleDovbS50ZXN0KHBhcmFtKSkge1xuXHQgICAgICByZXR1cm4gKC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX3BhcnNlLnBhcnNlUGF0Y2gpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKHBhcmFtKVswXVxuXHQgICAgICApO1xuXHQgICAgfVxuXG5cdCAgICBpZiAoIWJhc2UpIHtcblx0ICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYSBiYXNlIHJlZmVyZW5jZSBvciBwYXNzIGluIGEgcGF0Y2gnKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiAoLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfY3JlYXRlLnN0cnVjdHVyZWRQYXRjaCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8odW5kZWZpbmVkLCB1bmRlZmluZWQsIGJhc2UsIHBhcmFtKVxuXHQgICAgKTtcblx0ICB9XG5cblx0ICByZXR1cm4gcGFyYW07XG5cdH1cblxuXHRmdW5jdGlvbiBmaWxlTmFtZUNoYW5nZWQocGF0Y2gpIHtcblx0ICByZXR1cm4gcGF0Y2gubmV3RmlsZU5hbWUgJiYgcGF0Y2gubmV3RmlsZU5hbWUgIT09IHBhdGNoLm9sZEZpbGVOYW1lO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2VsZWN0RmllbGQoaW5kZXgsIG1pbmUsIHRoZWlycykge1xuXHQgIGlmIChtaW5lID09PSB0aGVpcnMpIHtcblx0ICAgIHJldHVybiBtaW5lO1xuXHQgIH0gZWxzZSB7XG5cdCAgICBpbmRleC5jb25mbGljdCA9IHRydWU7XG5cdCAgICByZXR1cm4geyBtaW5lOiBtaW5lLCB0aGVpcnM6IHRoZWlycyB9O1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGh1bmtCZWZvcmUodGVzdCwgY2hlY2spIHtcblx0ICByZXR1cm4gdGVzdC5vbGRTdGFydCA8IGNoZWNrLm9sZFN0YXJ0ICYmIHRlc3Qub2xkU3RhcnQgKyB0ZXN0Lm9sZExpbmVzIDwgY2hlY2sub2xkU3RhcnQ7XG5cdH1cblxuXHRmdW5jdGlvbiBjbG9uZUh1bmsoaHVuaywgb2Zmc2V0KSB7XG5cdCAgcmV0dXJuIHtcblx0ICAgIG9sZFN0YXJ0OiBodW5rLm9sZFN0YXJ0LCBvbGRMaW5lczogaHVuay5vbGRMaW5lcyxcblx0ICAgIG5ld1N0YXJ0OiBodW5rLm5ld1N0YXJ0ICsgb2Zmc2V0LCBuZXdMaW5lczogaHVuay5uZXdMaW5lcyxcblx0ICAgIGxpbmVzOiBodW5rLmxpbmVzXG5cdCAgfTtcblx0fVxuXG5cdGZ1bmN0aW9uIG1lcmdlTGluZXMoaHVuaywgbWluZU9mZnNldCwgbWluZUxpbmVzLCB0aGVpck9mZnNldCwgdGhlaXJMaW5lcykge1xuXHQgIC8vIFRoaXMgd2lsbCBnZW5lcmFsbHkgcmVzdWx0IGluIGEgY29uZmxpY3RlZCBodW5rLCBidXQgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBjb250ZXh0XG5cdCAgLy8gaXMgdGhlIG9ubHkgb3ZlcmxhcCB3aGVyZSB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IG1lcmdlIHRoZSBjb250ZW50IGhlcmUuXG5cdCAgdmFyIG1pbmUgPSB7IG9mZnNldDogbWluZU9mZnNldCwgbGluZXM6IG1pbmVMaW5lcywgaW5kZXg6IDAgfSxcblx0ICAgICAgdGhlaXIgPSB7IG9mZnNldDogdGhlaXJPZmZzZXQsIGxpbmVzOiB0aGVpckxpbmVzLCBpbmRleDogMCB9O1xuXG5cdCAgLy8gSGFuZGxlIGFueSBsZWFkaW5nIGNvbnRlbnRcblx0ICBpbnNlcnRMZWFkaW5nKGh1bmssIG1pbmUsIHRoZWlyKTtcblx0ICBpbnNlcnRMZWFkaW5nKGh1bmssIHRoZWlyLCBtaW5lKTtcblxuXHQgIC8vIE5vdyBpbiB0aGUgb3ZlcmxhcCBjb250ZW50LiBTY2FuIHRocm91Z2ggYW5kIHNlbGVjdCB0aGUgYmVzdCBjaGFuZ2VzIGZyb20gZWFjaC5cblx0ICB3aGlsZSAobWluZS5pbmRleCA8IG1pbmUubGluZXMubGVuZ3RoICYmIHRoZWlyLmluZGV4IDwgdGhlaXIubGluZXMubGVuZ3RoKSB7XG5cdCAgICB2YXIgbWluZUN1cnJlbnQgPSBtaW5lLmxpbmVzW21pbmUuaW5kZXhdLFxuXHQgICAgICAgIHRoZWlyQ3VycmVudCA9IHRoZWlyLmxpbmVzW3RoZWlyLmluZGV4XTtcblxuXHQgICAgaWYgKChtaW5lQ3VycmVudFswXSA9PT0gJy0nIHx8IG1pbmVDdXJyZW50WzBdID09PSAnKycpICYmICh0aGVpckN1cnJlbnRbMF0gPT09ICctJyB8fCB0aGVpckN1cnJlbnRbMF0gPT09ICcrJykpIHtcblx0ICAgICAgLy8gQm90aCBtb2RpZmllZCAuLi5cblx0ICAgICAgbXV0dWFsQ2hhbmdlKGh1bmssIG1pbmUsIHRoZWlyKTtcblx0ICAgIH0gZWxzZSBpZiAobWluZUN1cnJlbnRbMF0gPT09ICcrJyAmJiB0aGVpckN1cnJlbnRbMF0gPT09ICcgJykge1xuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9odW5rJGxpbmVzO1xuXG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8vIE1pbmUgaW5zZXJ0ZWRcblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfaHVuayRsaW5lcyA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovaHVuay5saW5lcykucHVzaC4gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2FwcGx5IC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2h1bmskbGluZXMgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY29sbGVjdENoYW5nZShtaW5lKSkpO1xuXHQgICAgfSBlbHNlIGlmICh0aGVpckN1cnJlbnRbMF0gPT09ICcrJyAmJiBtaW5lQ3VycmVudFswXSA9PT0gJyAnKSB7XG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2h1bmskbGluZXMyO1xuXG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8vIFRoZWlycyBpbnNlcnRlZFxuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9odW5rJGxpbmVzMiA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovaHVuay5saW5lcykucHVzaC4gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2FwcGx5IC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2h1bmskbGluZXMyIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3RvQ29uc3VtYWJsZUFycmF5KCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NvbGxlY3RDaGFuZ2UodGhlaXIpKSk7XG5cdCAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50WzBdID09PSAnLScgJiYgdGhlaXJDdXJyZW50WzBdID09PSAnICcpIHtcblx0ICAgICAgLy8gTWluZSByZW1vdmVkIG9yIGVkaXRlZFxuXHQgICAgICByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyKTtcblx0ICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnLScgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuXHQgICAgICAvLyBUaGVpciByZW1vdmVkIG9yIGVkaXRlZFxuXHQgICAgICByZW1vdmFsKGh1bmssIHRoZWlyLCBtaW5lLCB0cnVlKTtcblx0ICAgIH0gZWxzZSBpZiAobWluZUN1cnJlbnQgPT09IHRoZWlyQ3VycmVudCkge1xuXHQgICAgICAvLyBDb250ZXh0IGlkZW50aXR5XG5cdCAgICAgIGh1bmsubGluZXMucHVzaChtaW5lQ3VycmVudCk7XG5cdCAgICAgIG1pbmUuaW5kZXgrKztcblx0ICAgICAgdGhlaXIuaW5kZXgrKztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIC8vIENvbnRleHQgbWlzbWF0Y2hcblx0ICAgICAgY29uZmxpY3QoaHVuaywgY29sbGVjdENoYW5nZShtaW5lKSwgY29sbGVjdENoYW5nZSh0aGVpcikpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIC8vIE5vdyBwdXNoIGFueXRoaW5nIHRoYXQgbWF5IGJlIHJlbWFpbmluZ1xuXHQgIGluc2VydFRyYWlsaW5nKGh1bmssIG1pbmUpO1xuXHQgIGluc2VydFRyYWlsaW5nKGh1bmssIHRoZWlyKTtcblxuXHQgIGNhbGNMaW5lQ291bnQoaHVuayk7XG5cdH1cblxuXHRmdW5jdGlvbiBtdXR1YWxDaGFuZ2UoaHVuaywgbWluZSwgdGhlaXIpIHtcblx0ICB2YXIgbXlDaGFuZ2VzID0gY29sbGVjdENoYW5nZShtaW5lKSxcblx0ICAgICAgdGhlaXJDaGFuZ2VzID0gY29sbGVjdENoYW5nZSh0aGVpcik7XG5cblx0ICBpZiAoYWxsUmVtb3ZlcyhteUNoYW5nZXMpICYmIGFsbFJlbW92ZXModGhlaXJDaGFuZ2VzKSkge1xuXHQgICAgLy8gU3BlY2lhbCBjYXNlIGZvciByZW1vdmUgY2hhbmdlcyB0aGF0IGFyZSBzdXBlcnNldHMgb2Ygb25lIGFub3RoZXJcblx0ICAgIGlmICggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfYXJyYXkuYXJyYXlTdGFydHNXaXRoKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyhteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcykgJiYgc2tpcFJlbW92ZVN1cGVyc2V0KHRoZWlyLCBteUNoYW5nZXMsIG15Q2hhbmdlcy5sZW5ndGggLSB0aGVpckNoYW5nZXMubGVuZ3RoKSkge1xuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9odW5rJGxpbmVzMztcblxuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9odW5rJGxpbmVzMyA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovaHVuay5saW5lcykucHVzaC4gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2FwcGx5IC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2h1bmskbGluZXMzIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3RvQ29uc3VtYWJsZUFycmF5KCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL215Q2hhbmdlcykpO1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9IGVsc2UgaWYgKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9hcnJheS5hcnJheVN0YXJ0c1dpdGgpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKHRoZWlyQ2hhbmdlcywgbXlDaGFuZ2VzKSAmJiBza2lwUmVtb3ZlU3VwZXJzZXQobWluZSwgdGhlaXJDaGFuZ2VzLCB0aGVpckNoYW5nZXMubGVuZ3RoIC0gbXlDaGFuZ2VzLmxlbmd0aCkpIHtcblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfaHVuayRsaW5lczQ7XG5cblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfaHVuayRsaW5lczQgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2h1bmsubGluZXMpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19odW5rJGxpbmVzNCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi90aGVpckNoYW5nZXMpKTtcblx0ICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXHQgIH0gZWxzZSBpZiAoIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX2FycmF5LmFycmF5RXF1YWwpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKG15Q2hhbmdlcywgdGhlaXJDaGFuZ2VzKSkge1xuXHQgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfaHVuayRsaW5lczU7XG5cblx0ICAgIC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2h1bmskbGluZXM1ID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9odW5rLmxpbmVzKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9faHVuayRsaW5lczUgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovbXlDaGFuZ2VzKSk7XG5cdCAgICByZXR1cm47XG5cdCAgfVxuXG5cdCAgY29uZmxpY3QoaHVuaywgbXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVtb3ZhbChodW5rLCBtaW5lLCB0aGVpciwgc3dhcCkge1xuXHQgIHZhciBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuXHQgICAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q29udGV4dCh0aGVpciwgbXlDaGFuZ2VzKTtcblx0ICBpZiAodGhlaXJDaGFuZ2VzLm1lcmdlZCkge1xuXHQgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfaHVuayRsaW5lczY7XG5cblx0ICAgIC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2h1bmskbGluZXM2ID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9odW5rLmxpbmVzKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9faHVuayRsaW5lczYgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovdGhlaXJDaGFuZ2VzLm1lcmdlZCkpO1xuXHQgIH0gZWxzZSB7XG5cdCAgICBjb25mbGljdChodW5rLCBzd2FwID8gdGhlaXJDaGFuZ2VzIDogbXlDaGFuZ2VzLCBzd2FwID8gbXlDaGFuZ2VzIDogdGhlaXJDaGFuZ2VzKTtcblx0ICB9XG5cdH1cblxuXHRmdW5jdGlvbiBjb25mbGljdChodW5rLCBtaW5lLCB0aGVpcikge1xuXHQgIGh1bmsuY29uZmxpY3QgPSB0cnVlO1xuXHQgIGh1bmsubGluZXMucHVzaCh7XG5cdCAgICBjb25mbGljdDogdHJ1ZSxcblx0ICAgIG1pbmU6IG1pbmUsXG5cdCAgICB0aGVpcnM6IHRoZWlyXG5cdCAgfSk7XG5cdH1cblxuXHRmdW5jdGlvbiBpbnNlcnRMZWFkaW5nKGh1bmssIGluc2VydCwgdGhlaXIpIHtcblx0ICB3aGlsZSAoaW5zZXJ0Lm9mZnNldCA8IHRoZWlyLm9mZnNldCAmJiBpbnNlcnQuaW5kZXggPCBpbnNlcnQubGluZXMubGVuZ3RoKSB7XG5cdCAgICB2YXIgbGluZSA9IGluc2VydC5saW5lc1tpbnNlcnQuaW5kZXgrK107XG5cdCAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG5cdCAgICBpbnNlcnQub2Zmc2V0Kys7XG5cdCAgfVxuXHR9XG5cdGZ1bmN0aW9uIGluc2VydFRyYWlsaW5nKGh1bmssIGluc2VydCkge1xuXHQgIHdoaWxlIChpbnNlcnQuaW5kZXggPCBpbnNlcnQubGluZXMubGVuZ3RoKSB7XG5cdCAgICB2YXIgbGluZSA9IGluc2VydC5saW5lc1tpbnNlcnQuaW5kZXgrK107XG5cdCAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gY29sbGVjdENoYW5nZShzdGF0ZSkge1xuXHQgIHZhciByZXQgPSBbXSxcblx0ICAgICAgb3BlcmF0aW9uID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdWzBdO1xuXHQgIHdoaWxlIChzdGF0ZS5pbmRleCA8IHN0YXRlLmxpbmVzLmxlbmd0aCkge1xuXHQgICAgdmFyIGxpbmUgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF07XG5cblx0ICAgIC8vIEdyb3VwIGFkZGl0aW9ucyB0aGF0IGFyZSBpbW1lZGlhdGVseSBhZnRlciBzdWJ0cmFjdGlvbnMgYW5kIHRyZWF0IHRoZW0gYXMgb25lIFwiYXRvbWljXCIgbW9kaWZ5IGNoYW5nZS5cblx0ICAgIGlmIChvcGVyYXRpb24gPT09ICctJyAmJiBsaW5lWzBdID09PSAnKycpIHtcblx0ICAgICAgb3BlcmF0aW9uID0gJysnO1xuXHQgICAgfVxuXG5cdCAgICBpZiAob3BlcmF0aW9uID09PSBsaW5lWzBdKSB7XG5cdCAgICAgIHJldC5wdXNoKGxpbmUpO1xuXHQgICAgICBzdGF0ZS5pbmRleCsrO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgYnJlYWs7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHJldDtcblx0fVxuXHRmdW5jdGlvbiBjb2xsZWN0Q29udGV4dChzdGF0ZSwgbWF0Y2hDaGFuZ2VzKSB7XG5cdCAgdmFyIGNoYW5nZXMgPSBbXSxcblx0ICAgICAgbWVyZ2VkID0gW10sXG5cdCAgICAgIG1hdGNoSW5kZXggPSAwLFxuXHQgICAgICBjb250ZXh0Q2hhbmdlcyA9IGZhbHNlLFxuXHQgICAgICBjb25mbGljdGVkID0gZmFsc2U7XG5cdCAgd2hpbGUgKG1hdGNoSW5kZXggPCBtYXRjaENoYW5nZXMubGVuZ3RoICYmIHN0YXRlLmluZGV4IDwgc3RhdGUubGluZXMubGVuZ3RoKSB7XG5cdCAgICB2YXIgY2hhbmdlID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdLFxuXHQgICAgICAgIG1hdGNoID0gbWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXhdO1xuXG5cdCAgICAvLyBPbmNlIHdlJ3ZlIGhpdCBvdXIgYWRkLCB0aGVuIHdlIGFyZSBkb25lXG5cdCAgICBpZiAobWF0Y2hbMF0gPT09ICcrJykge1xuXHQgICAgICBicmVhaztcblx0ICAgIH1cblxuXHQgICAgY29udGV4dENoYW5nZXMgPSBjb250ZXh0Q2hhbmdlcyB8fCBjaGFuZ2VbMF0gIT09ICcgJztcblxuXHQgICAgbWVyZ2VkLnB1c2gobWF0Y2gpO1xuXHQgICAgbWF0Y2hJbmRleCsrO1xuXG5cdCAgICAvLyBDb25zdW1lIGFueSBhZGRpdGlvbnMgaW4gdGhlIG90aGVyIGJsb2NrIGFzIGEgY29uZmxpY3QgdG8gYXR0ZW1wdFxuXHQgICAgLy8gdG8gcHVsbCBpbiB0aGUgcmVtYWluaW5nIGNvbnRleHQgYWZ0ZXIgdGhpc1xuXHQgICAgaWYgKGNoYW5nZVswXSA9PT0gJysnKSB7XG5cdCAgICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuXG5cdCAgICAgIHdoaWxlIChjaGFuZ2VbMF0gPT09ICcrJykge1xuXHQgICAgICAgIGNoYW5nZXMucHVzaChjaGFuZ2UpO1xuXHQgICAgICAgIGNoYW5nZSA9IHN0YXRlLmxpbmVzWysrc3RhdGUuaW5kZXhdO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGlmIChtYXRjaC5zdWJzdHIoMSkgPT09IGNoYW5nZS5zdWJzdHIoMSkpIHtcblx0ICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZSk7XG5cdCAgICAgIHN0YXRlLmluZGV4Kys7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBjb25mbGljdGVkID0gdHJ1ZTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBpZiAoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4XSB8fCAnJylbMF0gPT09ICcrJyAmJiBjb250ZXh0Q2hhbmdlcykge1xuXHQgICAgY29uZmxpY3RlZCA9IHRydWU7XG5cdCAgfVxuXG5cdCAgaWYgKGNvbmZsaWN0ZWQpIHtcblx0ICAgIHJldHVybiBjaGFuZ2VzO1xuXHQgIH1cblxuXHQgIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCkge1xuXHQgICAgbWVyZ2VkLnB1c2gobWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXgrK10pO1xuXHQgIH1cblxuXHQgIHJldHVybiB7XG5cdCAgICBtZXJnZWQ6IG1lcmdlZCxcblx0ICAgIGNoYW5nZXM6IGNoYW5nZXNcblx0ICB9O1xuXHR9XG5cblx0ZnVuY3Rpb24gYWxsUmVtb3ZlcyhjaGFuZ2VzKSB7XG5cdCAgcmV0dXJuIGNoYW5nZXMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjaGFuZ2UpIHtcblx0ICAgIHJldHVybiBwcmV2ICYmIGNoYW5nZVswXSA9PT0gJy0nO1xuXHQgIH0sIHRydWUpO1xuXHR9XG5cdGZ1bmN0aW9uIHNraXBSZW1vdmVTdXBlcnNldChzdGF0ZSwgcmVtb3ZlQ2hhbmdlcywgZGVsdGEpIHtcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHtcblx0ICAgIHZhciBjaGFuZ2VDb250ZW50ID0gcmVtb3ZlQ2hhbmdlc1tyZW1vdmVDaGFuZ2VzLmxlbmd0aCAtIGRlbHRhICsgaV0uc3Vic3RyKDEpO1xuXHQgICAgaWYgKHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4ICsgaV0gIT09ICcgJyArIGNoYW5nZUNvbnRlbnQpIHtcblx0ICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHN0YXRlLmluZGV4ICs9IGRlbHRhO1xuXHQgIHJldHVybiB0cnVlO1xuXHR9XG5cblx0ZnVuY3Rpb24gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lcykge1xuXHQgIHZhciBvbGRMaW5lcyA9IDA7XG5cdCAgdmFyIG5ld0xpbmVzID0gMDtcblxuXHQgIGxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcblx0ICAgIGlmICh0eXBlb2YgbGluZSAhPT0gJ3N0cmluZycpIHtcblx0ICAgICAgdmFyIG15Q291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUubWluZSk7XG5cdCAgICAgIHZhciB0aGVpckNvdW50ID0gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lLnRoZWlycyk7XG5cblx0ICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICBpZiAobXlDb3VudC5vbGRMaW5lcyA9PT0gdGhlaXJDb3VudC5vbGRMaW5lcykge1xuXHQgICAgICAgICAgb2xkTGluZXMgKz0gbXlDb3VudC5vbGRMaW5lcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgb2xkTGluZXMgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICBpZiAobXlDb3VudC5uZXdMaW5lcyA9PT0gdGhlaXJDb3VudC5uZXdMaW5lcykge1xuXHQgICAgICAgICAgbmV3TGluZXMgKz0gbXlDb3VudC5uZXdMaW5lcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgbmV3TGluZXMgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCAmJiAobGluZVswXSA9PT0gJysnIHx8IGxpbmVbMF0gPT09ICcgJykpIHtcblx0ICAgICAgICBuZXdMaW5lcysrO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChvbGRMaW5lcyAhPT0gdW5kZWZpbmVkICYmIChsaW5lWzBdID09PSAnLScgfHwgbGluZVswXSA9PT0gJyAnKSkge1xuXHQgICAgICAgIG9sZExpbmVzKys7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblxuXHQgIHJldHVybiB7IG9sZExpbmVzOiBvbGRMaW5lcywgbmV3TGluZXM6IG5ld0xpbmVzIH07XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5d1lYUmphQzl0WlhKblpTNXFjeUpkTENKdVlXMWxjeUk2V3lKallXeGpUR2x1WlVOdmRXNTBJaXdpYldWeVoyVWlMQ0pvZFc1cklpd2lZMkZzWTA5c1pFNWxkMHhwYm1WRGIzVnVkQ0lzSW14cGJtVnpJaXdpYjJ4a1RHbHVaWE1pTENKdVpYZE1hVzVsY3lJc0luVnVaR1ZtYVc1bFpDSXNJbTFwYm1VaUxDSjBhR1ZwY25NaUxDSmlZWE5sSWl3aWJHOWhaRkJoZEdOb0lpd2ljbVYwSWl3aWFXNWtaWGdpTENKdVpYZEdhV3hsVG1GdFpTSXNJbVpwYkdWT1lXMWxRMmhoYm1kbFpDSXNJbTlzWkVacGJHVk9ZVzFsSWl3aWIyeGtTR1ZoWkdWeUlpd2libVYzU0dWaFpHVnlJaXdpYzJWc1pXTjBSbWxsYkdRaUxDSm9kVzVyY3lJc0ltMXBibVZKYm1SbGVDSXNJblJvWldseWMwbHVaR1Y0SWl3aWJXbHVaVTltWm5ObGRDSXNJblJvWldseWMwOW1abk5sZENJc0lteGxibWQwYUNJc0ltMXBibVZEZFhKeVpXNTBJaXdpYjJ4a1UzUmhjblFpTENKSmJtWnBibWwwZVNJc0luUm9aV2x5YzBOMWNuSmxiblFpTENKb2RXNXJRbVZtYjNKbElpd2ljSFZ6YUNJc0ltTnNiMjVsU0hWdWF5SXNJbTFsY21kbFpFaDFibXNpTENKTllYUm9JaXdpYldsdUlpd2libVYzVTNSaGNuUWlMQ0p0WlhKblpVeHBibVZ6SWl3aWNHRnlZVzBpTENKMFpYTjBJaXdpUlhKeWIzSWlMQ0p3WVhSamFDSXNJbU52Ym1ac2FXTjBJaXdpWTJobFkyc2lMQ0p2Wm1aelpYUWlMQ0p0YVc1bFRHbHVaWE1pTENKMGFHVnBjazltWm5ObGRDSXNJblJvWldseVRHbHVaWE1pTENKMGFHVnBjaUlzSW1sdWMyVnlkRXhsWVdScGJtY2lMQ0owYUdWcGNrTjFjbkpsYm5RaUxDSnRkWFIxWVd4RGFHRnVaMlVpTENKamIyeHNaV04wUTJoaGJtZGxJaXdpY21WdGIzWmhiQ0lzSW1sdWMyVnlkRlJ5WVdsc2FXNW5JaXdpYlhsRGFHRnVaMlZ6SWl3aWRHaGxhWEpEYUdGdVoyVnpJaXdpWVd4c1VtVnRiM1psY3lJc0luTnJhWEJTWlcxdmRtVlRkWEJsY25ObGRDSXNJbk4zWVhBaUxDSmpiMnhzWldOMFEyOXVkR1Y0ZENJc0ltMWxjbWRsWkNJc0ltbHVjMlZ5ZENJc0lteHBibVVpTENKemRHRjBaU0lzSW05d1pYSmhkR2x2YmlJc0ltMWhkR05vUTJoaGJtZGxjeUlzSW1Ob1lXNW5aWE1pTENKdFlYUmphRWx1WkdWNElpd2lZMjl1ZEdWNGRFTm9ZVzVuWlhNaUxDSmpiMjVtYkdsamRHVmtJaXdpWTJoaGJtZGxJaXdpYldGMFkyZ2lMQ0p6ZFdKemRISWlMQ0p5WldSMVkyVWlMQ0p3Y21WMklpd2ljbVZ0YjNabFEyaGhibWRsY3lJc0ltUmxiSFJoSWl3aWFTSXNJbU5vWVc1blpVTnZiblJsYm5RaUxDSm1iM0pGWVdOb0lpd2liWGxEYjNWdWRDSXNJblJvWldseVEyOTFiblFpWFN3aWJXRndjR2x1WjNNaU9pSTdPenRuUTBGTFowSkJMR0VzUjBGQlFVRXNZVHQ1UkVGblFrRkRMRXNzUjBGQlFVRXNTenM3UVVGeVFtaENPenRCUVVOQk96dEJRVVZCT3pzN08zVkNRVVZQTEZOQlFWTkVMR0ZCUVZRc1EwRkJkVUpGTEVsQlFYWkNMRVZCUVRaQ08wRkJRVUVzTmtWQlEweERMRzlDUVVGdlFrUXNTMEZCUzBVc1MwRkJla0lzUTBGRVN6dEJRVUZCTEUxQlF6TkNReXhSUVVReVFpeDNRa0ZETTBKQkxGRkJSREpDTzBGQlFVRXNUVUZEYWtKRExGRkJSR2xDTEhkQ1FVTnFRa0VzVVVGRWFVSTdPMEZCUjJ4RExFMUJRVWxFTEdGQlFXRkZMRk5CUVdwQ0xFVkJRVFJDTzBGQlF6RkNUQ3hUUVVGTFJ5eFJRVUZNTEVkQlFXZENRU3hSUVVGb1FqdEJRVU5FTEVkQlJrUXNUVUZGVHp0QlFVTk1MRmRCUVU5SUxFdEJRVXRITEZGQlFWbzdRVUZEUkRzN1FVRkZSQ3hOUVVGSlF5eGhRVUZoUXl4VFFVRnFRaXhGUVVFMFFqdEJRVU14UWt3c1UwRkJTMGtzVVVGQlRDeEhRVUZuUWtFc1VVRkJhRUk3UVVGRFJDeEhRVVpFTEUxQlJVODdRVUZEVEN4WFFVRlBTaXhMUVVGTFNTeFJRVUZhTzBGQlEwUTdRVUZEUmpzN1FVRkZUU3hUUVVGVFRDeExRVUZVTEVOQlFXVlBMRWxCUVdZc1JVRkJjVUpETEUxQlFYSkNMRVZCUVRaQ1F5eEpRVUUzUWl4RlFVRnRRenRCUVVONFEwWXNVMEZCVDBjc1ZVRkJWVWdzU1VGQlZpeEZRVUZuUWtVc1NVRkJhRUlzUTBGQlVEdEJRVU5CUkN4WFFVRlRSU3hWUVVGVlJpeE5RVUZXTEVWQlFXdENReXhKUVVGc1FpeERRVUZVT3p0QlFVVkJMRTFCUVVsRkxFMUJRVTBzUlVGQlZqczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRU3hOUVVGSlNpeExRVUZMU3l4TFFVRk1MRWxCUVdOS0xFOUJRVTlKTEV0QlFYcENMRVZCUVdkRE8wRkJRemxDUkN4UlFVRkpReXhMUVVGS0xFZEJRVmxNTEV0QlFVdExMRXRCUVV3c1NVRkJZMG9zVDBGQlQwa3NTMEZCYWtNN1FVRkRSRHM3UVVGRlJDeE5RVUZKVEN4TFFVRkxUU3hYUVVGTUxFbEJRVzlDVEN4UFFVRlBTeXhYUVVFdlFpeEZRVUUwUXp0QlFVTXhReXhSUVVGSkxFTkJRVU5ETEdkQ1FVRm5RbEFzU1VGQmFFSXNRMEZCVEN4RlFVRTBRanRCUVVNeFFqdEJRVU5CU1N4VlFVRkpTU3hYUVVGS0xFZEJRV3RDVUN4UFFVRlBUeXhYUVVGUUxFbEJRWE5DVWl4TFFVRkxVU3hYUVVFM1F6dEJRVU5CU2l4VlFVRkpSU3hYUVVGS0xFZEJRV3RDVEN4UFFVRlBTeXhYUVVGUUxFbEJRWE5DVGl4TFFVRkxUU3hYUVVFM1F6dEJRVU5CUml4VlFVRkpTeXhUUVVGS0xFZEJRV2RDVWl4UFFVRlBVU3hUUVVGUUxFbEJRVzlDVkN4TFFVRkxVeXhUUVVGNlF6dEJRVU5CVEN4VlFVRkpUU3hUUVVGS0xFZEJRV2RDVkN4UFFVRlBVeXhUUVVGUUxFbEJRVzlDVml4TFFVRkxWU3hUUVVGNlF6dEJRVU5FTEV0QlRrUXNUVUZOVHl4SlFVRkpMRU5CUVVOSUxHZENRVUZuUWs0c1RVRkJhRUlzUTBGQlRDeEZRVUU0UWp0QlFVTnVRenRCUVVOQlJ5eFZRVUZKU1N4WFFVRktMRWRCUVd0Q1VpeExRVUZMVVN4WFFVRjJRanRCUVVOQlNpeFZRVUZKUlN4WFFVRktMRWRCUVd0Q1RpeExRVUZMVFN4WFFVRjJRanRCUVVOQlJpeFZRVUZKU3l4VFFVRktMRWRCUVdkQ1ZDeExRVUZMVXl4VFFVRnlRanRCUVVOQlRDeFZRVUZKVFN4VFFVRktMRWRCUVdkQ1ZpeExRVUZMVlN4VFFVRnlRanRCUVVORUxFdEJUazBzVFVGTlFUdEJRVU5NTzBGQlEwRk9MRlZCUVVsSkxGZEJRVW9zUjBGQmEwSkhMRmxCUVZsUUxFZEJRVm9zUlVGQmFVSktMRXRCUVV0UkxGZEJRWFJDTEVWQlFXMURVQ3hQUVVGUFR5eFhRVUV4UXl4RFFVRnNRanRCUVVOQlNpeFZRVUZKUlN4WFFVRktMRWRCUVd0Q1N5eFpRVUZaVUN4SFFVRmFMRVZCUVdsQ1NpeExRVUZMVFN4WFFVRjBRaXhGUVVGdFEwd3NUMEZCVDBzc1YwRkJNVU1zUTBGQmJFSTdRVUZEUVVZc1ZVRkJTVXNzVTBGQlNpeEhRVUZuUWtVc1dVRkJXVkFzUjBGQldpeEZRVUZwUWtvc1MwRkJTMU1zVTBGQmRFSXNSVUZCYVVOU0xFOUJRVTlSTEZOQlFYaERMRU5CUVdoQ08wRkJRMEZNTEZWQlFVbE5MRk5CUVVvc1IwRkJaMEpETEZsQlFWbFFMRWRCUVZvc1JVRkJhVUpLTEV0QlFVdFZMRk5CUVhSQ0xFVkJRV2xEVkN4UFFVRlBVeXhUUVVGNFF5eERRVUZvUWp0QlFVTkVPMEZCUTBZN08wRkJSVVJPTEUxQlFVbFJMRXRCUVVvc1IwRkJXU3hGUVVGYU96dEJRVVZCTEUxQlFVbERMRmxCUVZrc1EwRkJhRUk3UVVGQlFTeE5RVU5KUXl4alFVRmpMRU5CUkd4Q08wRkJRVUVzVFVGRlNVTXNZVUZCWVN4RFFVWnFRanRCUVVGQkxFMUJSMGxETEdWQlFXVXNRMEZJYmtJN08wRkJTMEVzVTBGQlQwZ3NXVUZCV1dJc1MwRkJTMWtzUzBGQlRDeERRVUZYU3l4TlFVRjJRaXhKUVVGcFEwZ3NZMEZCWTJJc1QwRkJUMWNzUzBGQlVDeERRVUZoU3l4TlFVRnVSU3hGUVVFeVJUdEJRVU42UlN4UlFVRkpReXhqUVVGamJFSXNTMEZCUzFrc1MwRkJUQ3hEUVVGWFF5eFRRVUZZTEV0QlFYbENMRVZCUVVOTkxGVkJRVlZETEZGQlFWZ3NSVUZCTTBNN1FVRkJRU3hSUVVOSlF5eG5Ra0ZCWjBKd1FpeFBRVUZQVnl4TFFVRlFMRU5CUVdGRkxGZEJRV0lzUzBGQk5rSXNSVUZCUTBzc1ZVRkJWVU1zVVVGQldDeEZRVVJxUkRzN1FVRkhRU3hSUVVGSlJTeFhRVUZYU2l4WFFVRllMRVZCUVhkQ1J5eGhRVUY0UWl4RFFVRktMRVZCUVRSRE8wRkJRekZETzBGQlEwRnFRaXhWUVVGSlVTeExRVUZLTEVOQlFWVlhMRWxCUVZZc1EwRkJaVU1zVlVGQlZVNHNWMEZCVml4RlFVRjFRa2dzVlVGQmRrSXNRMEZCWmp0QlFVTkJSanRCUVVOQlJ5eHpRa0ZCWjBKRkxGbEJRVmx3UWl4UlFVRmFMRWRCUVhWQ2IwSXNXVUZCV1hKQ0xGRkJRVzVFTzBGQlEwUXNTMEZNUkN4TlFVdFBMRWxCUVVsNVFpeFhRVUZYUkN4aFFVRllMRVZCUVRCQ1NDeFhRVUV4UWl4RFFVRktMRVZCUVRSRE8wRkJRMnBFTzBGQlEwRmtMRlZCUVVsUkxFdEJRVW9zUTBGQlZWY3NTVUZCVml4RFFVRmxReXhWUVVGVlNDeGhRVUZXTEVWQlFYbENUQ3haUVVGNlFpeERRVUZtTzBGQlEwRkdPMEZCUTBGRExHOUNRVUZqVFN4alFVRmpka0lzVVVGQlpDeEhRVUY1UW5WQ0xHTkJRV040UWl4UlFVRnlSRHRCUVVORUxFdEJURTBzVFVGTFFUdEJRVU5NTzBGQlEwRXNWVUZCU1RSQ0xHRkJRV0U3UVVGRFprNHNhMEpCUVZWUExFdEJRVXRETEVkQlFVd3NRMEZCVTFRc1dVRkJXVU1zVVVGQmNrSXNSVUZCSzBKRkxHTkJRV05HTEZGQlFUZERMRU5CUkVzN1FVRkZablJDTEd0Q1FVRlZMRU5CUmtzN1FVRkhaaXRDTEd0Q1FVRlZSaXhMUVVGTFF5eEhRVUZNTEVOQlFWTlVMRmxCUVZsVkxGRkJRVm9zUjBGQmRVSmlMRlZCUVdoRExFVkJRVFJEVFN4alFVRmpSaXhSUVVGa0xFZEJRWGxDU0N4WlFVRnlSU3hEUVVoTE8wRkJTV1pzUWl4clFrRkJWU3hEUVVwTE8wRkJTMlpHTEdWQlFVODdRVUZNVVN4UFFVRnFRanRCUVU5QmFVTXNhVUpCUVZkS0xGVkJRVmdzUlVGQmRVSlFMRmxCUVZsRExGRkJRVzVETEVWQlFUWkRSQ3haUVVGWmRFSXNTMEZCZWtRc1JVRkJaMFY1UWl4alFVRmpSaXhSUVVFNVJTeEZRVUYzUmtVc1kwRkJZM3BDTEV0QlFYUkhPMEZCUTBGclFqdEJRVU5CUkRzN1FVRkZRVlFzVlVGQlNWRXNTMEZCU2l4RFFVRlZWeXhKUVVGV0xFTkJRV1ZGTEZWQlFXWTdRVUZEUkR0QlFVTkdPenRCUVVWRUxGTkJRVTl5UWl4SFFVRlFPMEZCUTBRN08wRkJSVVFzVTBGQlUwUXNVMEZCVkN4RFFVRnRRakpDTEV0QlFXNUNMRVZCUVRCQ05VSXNTVUZCTVVJc1JVRkJaME03UVVGRE9VSXNUVUZCU1N4UFFVRlBORUlzUzBGQlVDeExRVUZwUWl4UlFVRnlRaXhGUVVFclFqdEJRVU0zUWl4UlFVRkpMRTlCUVU5RExFbEJRVkFzUTBGQldVUXNTMEZCV2l4TFFVRjFRaXhYUVVGWFF5eEpRVUZZTEVOQlFXZENSQ3hMUVVGb1FpeERRVUV6UWl4RlFVRnZSRHRCUVVOc1JDeGhRVUZQTEhsRlFVRlhRU3hMUVVGWUxFVkJRV3RDTEVOQlFXeENPMEZCUVZBN1FVRkRSRHM3UVVGRlJDeFJRVUZKTEVOQlFVTTFRaXhKUVVGTUxFVkJRVmM3UVVGRFZDeFpRVUZOTEVsQlFVazRRaXhMUVVGS0xFTkJRVlVzYTBSQlFWWXNRMEZCVGp0QlFVTkVPMEZCUTBRc1YwRkJUeXdyUlVGQlowSnFReXhUUVVGb1FpeEZRVUV5UWtFc1UwRkJNMElzUlVGQmMwTkhMRWxCUVhSRExFVkJRVFJETkVJc1MwRkJOVU03UVVGQlVEdEJRVU5FT3p0QlFVVkVMRk5CUVU5QkxFdEJRVkE3UVVGRFJEczdRVUZGUkN4VFFVRlRka0lzWlVGQlZDeERRVUY1UWpCQ0xFdEJRWHBDTEVWQlFXZERPMEZCUXpsQ0xGTkJRVTlCTEUxQlFVMHpRaXhYUVVGT0xFbEJRWEZDTWtJc1RVRkJUVE5DTEZkQlFVNHNTMEZCYzBJeVFpeE5RVUZOZWtJc1YwRkJlRVE3UVVGRFJEczdRVUZGUkN4VFFVRlRSeXhYUVVGVUxFTkJRWEZDVGl4TFFVRnlRaXhGUVVFMFFrd3NTVUZCTlVJc1JVRkJhME5ETEUxQlFXeERMRVZCUVRCRE8wRkJRM2hETEUxQlFVbEVMRk5CUVZORExFMUJRV0lzUlVGQmNVSTdRVUZEYmtJc1YwRkJUMFFzU1VGQlVEdEJRVU5FTEVkQlJrUXNUVUZGVHp0QlFVTk1TeXhWUVVGTk5rSXNVVUZCVGl4SFFVRnBRaXhKUVVGcVFqdEJRVU5CTEZkQlFVOHNSVUZCUTJ4RExGVkJRVVFzUlVGQlQwTXNZMEZCVUN4RlFVRlFPMEZCUTBRN1FVRkRSanM3UVVGRlJDeFRRVUZUY1VJc1ZVRkJWQ3hEUVVGdlFsTXNTVUZCY0VJc1JVRkJNRUpKTEV0QlFURkNMRVZCUVdsRE8wRkJReTlDTEZOQlFVOUtMRXRCUVV0YUxGRkJRVXdzUjBGQlowSm5RaXhOUVVGTmFFSXNVVUZCZEVJc1NVRkRSRmtzUzBGQlMxb3NVVUZCVEN4SFFVRm5RbGtzUzBGQlMyeERMRkZCUVhSQ0xFZEJRV3REYzBNc1RVRkJUV2hDTEZGQlJEZERPMEZCUlVRN08wRkJSVVFzVTBGQlUwc3NVMEZCVkN4RFFVRnRRamxDTEVsQlFXNUNMRVZCUVhsQ01FTXNUVUZCZWtJc1JVRkJhVU03UVVGREwwSXNVMEZCVHp0QlFVTk1ha0lzWTBGQlZYcENMRXRCUVV0NVFpeFJRVVJXTEVWQlEyOUNkRUlzVlVGQlZVZ3NTMEZCUzBjc1VVRkVia003UVVGRlRDdENMR05CUVZWc1F5eExRVUZMYTBNc1VVRkJUQ3hIUVVGblFsRXNUVUZHY2tJc1JVRkZOa0owUXl4VlFVRlZTaXhMUVVGTFNTeFJRVVkxUXp0QlFVZE1SaXhYUVVGUFJpeExRVUZMUlR0QlFVaFFMRWRCUVZBN1FVRkxSRHM3UVVGRlJDeFRRVUZUYVVNc1ZVRkJWQ3hEUVVGdlFtNURMRWxCUVhCQ0xFVkJRVEJDY1VJc1ZVRkJNVUlzUlVGQmMwTnpRaXhUUVVGMFF5eEZRVUZwUkVNc1YwRkJha1FzUlVGQk9FUkRMRlZCUVRsRUxFVkJRVEJGTzBGQlEzaEZPMEZCUTBFN1FVRkRRU3hOUVVGSmRrTXNUMEZCVHl4RlFVRkRiME1zVVVGQlVYSkNMRlZCUVZRc1JVRkJjVUp1UWl4UFFVRlBlVU1zVTBGQk5VSXNSVUZCZFVOb1F5eFBRVUZQTEVOQlFUbERMRVZCUVZnN1FVRkJRU3hOUVVOSmJVTXNVVUZCVVN4RlFVRkRTaXhSUVVGUlJTeFhRVUZVTEVWQlFYTkNNVU1zVDBGQlR6SkRMRlZCUVRkQ0xFVkJRWGxEYkVNc1QwRkJUeXhEUVVGb1JDeEZRVVJhT3p0QlFVZEJPMEZCUTBGdlF5eG5Ra0ZCWXk5RExFbEJRV1FzUlVGQmIwSk5MRWxCUVhCQ0xFVkJRVEJDZDBNc1MwRkJNVUk3UVVGRFFVTXNaMEpCUVdNdlF5eEpRVUZrTEVWQlFXOUNPRU1zUzBGQmNFSXNSVUZCTWtKNFF5eEpRVUV6UWpzN1FVRkZRVHRCUVVOQkxGTkJRVTlCTEV0QlFVdExMRXRCUVV3c1IwRkJZVXdzUzBGQlMwb3NTMEZCVEN4RFFVRlhjVUlzVFVGQmVFSXNTVUZCYTBOMVFpeE5RVUZOYmtNc1MwRkJUaXhIUVVGamJVTXNUVUZCVFRWRExFdEJRVTRzUTBGQldYRkNMRTFCUVc1RkxFVkJRVEpGTzBGQlEzcEZMRkZCUVVsRExHTkJRV05zUWl4TFFVRkxTaXhMUVVGTUxFTkJRVmRKTEV0QlFVdExMRXRCUVdoQ0xFTkJRV3hDTzBGQlFVRXNVVUZEU1hGRExHVkJRV1ZHTEUxQlFVMDFReXhMUVVGT0xFTkJRVmswUXl4TlFVRk5ia01zUzBGQmJFSXNRMEZFYmtJN08wRkJSMEVzVVVGQlNTeERRVUZEWVN4WlFVRlpMRU5CUVZvc1RVRkJiVUlzUjBGQmJrSXNTVUZCTUVKQkxGbEJRVmtzUTBGQldpeE5RVUZ0UWl4SFFVRTVReXhOUVVOSmQwSXNZVUZCWVN4RFFVRmlMRTFCUVc5Q0xFZEJRWEJDTEVsQlFUSkNRU3hoUVVGaExFTkJRV0lzVFVGQmIwSXNSMEZFYmtRc1EwRkJTaXhGUVVNMlJEdEJRVU16UkR0QlFVTkJReXh0UWtGQllXcEVMRWxCUVdJc1JVRkJiVUpOTEVsQlFXNUNMRVZCUVhsQ2QwTXNTMEZCZWtJN1FVRkRSQ3hMUVVwRUxFMUJTVThzU1VGQlNYUkNMRmxCUVZrc1EwRkJXaXhOUVVGdFFpeEhRVUZ1UWl4SlFVRXdRbmRDTEdGQlFXRXNRMEZCWWl4TlFVRnZRaXhIUVVGc1JDeEZRVUYxUkR0QlFVRkJPenRCUVVGQkxEaENRVU0xUkR0QlFVTkJMREJGUVVGTE9VTXNTMEZCVEN4RlFVRlhNa0lzU1VGQldDdzBURUZCYjBKeFFpeGpRVUZqTlVNc1NVRkJaQ3hEUVVGd1FqdEJRVU5FTEV0QlNFMHNUVUZIUVN4SlFVRkpNRU1zWVVGQllTeERRVUZpTEUxQlFXOUNMRWRCUVhCQ0xFbEJRVEpDZUVJc1dVRkJXU3hEUVVGYUxFMUJRVzFDTEVkQlFXeEVMRVZCUVhWRU8wRkJRVUU3TzBGQlFVRXNPRUpCUXpWRU8wRkJRMEVzTWtWQlFVdDBRaXhMUVVGTUxFVkJRVmN5UWl4SlFVRllMRFpNUVVGdlFuRkNMR05CUVdOS0xFdEJRV1FzUTBGQmNFSTdRVUZEUkN4TFFVaE5MRTFCUjBFc1NVRkJTWFJDTEZsQlFWa3NRMEZCV2l4TlFVRnRRaXhIUVVGdVFpeEpRVUV3UW5kQ0xHRkJRV0VzUTBGQllpeE5RVUZ2UWl4SFFVRnNSQ3hGUVVGMVJEdEJRVU0xUkR0QlFVTkJSeXhqUVVGUmJrUXNTVUZCVWl4RlFVRmpUU3hKUVVGa0xFVkJRVzlDZDBNc1MwRkJjRUk3UVVGRFJDeExRVWhOTEUxQlIwRXNTVUZCU1VVc1lVRkJZU3hEUVVGaUxFMUJRVzlDTEVkQlFYQkNMRWxCUVRKQ2VFSXNXVUZCV1N4RFFVRmFMRTFCUVcxQ0xFZEJRV3hFTEVWQlFYVkVPMEZCUXpWRU8wRkJRMEV5UWl4alFVRlJia1FzU1VGQlVpeEZRVUZqT0VNc1MwRkJaQ3hGUVVGeFFuaERMRWxCUVhKQ0xFVkJRVEpDTEVsQlFUTkNPMEZCUTBRc1MwRklUU3hOUVVkQkxFbEJRVWxyUWl4blFrRkJaMEozUWl4WlFVRndRaXhGUVVGclF6dEJRVU4yUXp0QlFVTkJhRVFzVjBGQlMwVXNTMEZCVEN4RFFVRlhNa0lzU1VGQldDeERRVUZuUWt3c1YwRkJhRUk3UVVGRFFXeENMRmRCUVV0TExFdEJRVXc3UVVGRFFXMURMRmxCUVUxdVF5eExRVUZPTzBGQlEwUXNTMEZNVFN4TlFVdEJPMEZCUTB3N1FVRkRRVFpDTEdWQlFWTjRReXhKUVVGVUxFVkJRV1ZyUkN4alFVRmpOVU1zU1VGQlpDeERRVUZtTEVWQlFXOURORU1zWTBGQlkwb3NTMEZCWkN4RFFVRndRenRCUVVORU8wRkJRMFk3TzBGQlJVUTdRVUZEUVUwc2FVSkJRV1Z3UkN4SlFVRm1MRVZCUVhGQ1RTeEpRVUZ5UWp0QlFVTkJPRU1zYVVKQlFXVndSQ3hKUVVGbUxFVkJRWEZDT0VNc1MwRkJja0k3TzBGQlJVRm9SQ3huUWtGQlkwVXNTVUZCWkR0QlFVTkVPenRCUVVWRUxGTkJRVk5wUkN4WlFVRlVMRU5CUVhOQ2FrUXNTVUZCZEVJc1JVRkJORUpOTEVsQlFUVkNMRVZCUVd0RGQwTXNTMEZCYkVNc1JVRkJlVU03UVVGRGRrTXNUVUZCU1U4c1dVRkJXVWdzWTBGQll6VkRMRWxCUVdRc1EwRkJhRUk3UVVGQlFTeE5RVU5KWjBRc1pVRkJaVW9zWTBGQlkwb3NTMEZCWkN4RFFVUnVRanM3UVVGSFFTeE5RVUZKVXl4WFFVRlhSaXhUUVVGWUxFdEJRWGxDUlN4WFFVRlhSQ3haUVVGWUxFTkJRVGRDTEVWQlFYVkVPMEZCUTNKRU8wRkJRMEVzVVVGQlNTdzRSVUZCWjBKRUxGTkJRV2hDTEVWQlFUSkNReXhaUVVFelFpeExRVU5IUlN4dFFrRkJiVUpXTEV0QlFXNUNMRVZCUVRCQ1R5eFRRVUV4UWl4RlFVRnhRMEVzVlVGQlZUbENMRTFCUVZZc1IwRkJiVUlyUWl4aFFVRmhMMElzVFVGQmNrVXNRMEZFVUN4RlFVTnhSanRCUVVGQk96dEJRVUZCTERaQ1FVTnVSaXh6UlVGQlMzSkNMRXRCUVV3c1JVRkJWekpDTEVsQlFWZ3NOa3hCUVc5Q2QwSXNVMEZCY0VJN1FVRkRRVHRCUVVORUxFdEJTa1FzVFVGSlR5eEpRVUZKTERoRlFVRm5Ra01zV1VGQmFFSXNSVUZCT0VKRUxGTkJRVGxDTEV0QlEwcEhMRzFDUVVGdFFteEVMRWxCUVc1Q0xFVkJRWGxDWjBRc1dVRkJla0lzUlVGQmRVTkJMR0ZCUVdFdlFpeE5RVUZpTEVkQlFYTkNPRUlzVlVGQlZUbENMRTFCUVhaRkxFTkJSRUVzUlVGRFowWTdRVUZCUVRzN1FVRkJRU3cyUWtGRGNrWXNjMFZCUVV0eVFpeExRVUZNTEVWQlFWY3lRaXhKUVVGWUxEWk1RVUZ2UW5sQ0xGbEJRWEJDTzBGQlEwRTdRVUZEUkR0QlFVTkdMRWRCV0VRc1RVRlhUeXhKUVVGSkxIbEZRVUZYUkN4VFFVRllMRVZCUVhOQ1F5eFpRVUYwUWl4RFFVRktMRVZCUVhsRE8wRkJRVUU3TzBGQlFVRXNNa0pCUXpsRExITkZRVUZMY0VRc1MwRkJUQ3hGUVVGWE1rSXNTVUZCV0N3MlRFRkJiMEozUWl4VFFVRndRanRCUVVOQk8wRkJRMFE3TzBGQlJVUmlMRmRCUVZONFF5eEpRVUZVTEVWQlFXVnhSQ3hUUVVGbUxFVkJRVEJDUXl4WlFVRXhRanRCUVVORU96dEJRVVZFTEZOQlFWTklMRTlCUVZRc1EwRkJhVUp1UkN4SlFVRnFRaXhGUVVGMVFrMHNTVUZCZGtJc1JVRkJOa0ozUXl4TFFVRTNRaXhGUVVGdlExY3NTVUZCY0VNc1JVRkJNRU03UVVGRGVFTXNUVUZCU1Vvc1dVRkJXVWdzWTBGQll6VkRMRWxCUVdRc1EwRkJhRUk3UVVGQlFTeE5RVU5KWjBRc1pVRkJaVWtzWlVGQlpWb3NTMEZCWml4RlFVRnpRazhzVTBGQmRFSXNRMEZFYmtJN1FVRkZRU3hOUVVGSlF5eGhRVUZoU3l4TlFVRnFRaXhGUVVGNVFqdEJRVUZCT3p0QlFVRkJMREpDUVVOMlFpeHpSVUZCUzNwRUxFdEJRVXdzUlVGQlZ6SkNMRWxCUVZnc05reEJRVzlDZVVJc1lVRkJZVXNzVFVGQmFrTTdRVUZEUkN4SFFVWkVMRTFCUlU4N1FVRkRURzVDTEdGQlFWTjRReXhKUVVGVUxFVkJRV1Y1UkN4UFFVRlBTQ3haUVVGUUxFZEJRWE5DUkN4VFFVRnlReXhGUVVGblJFa3NUMEZCVDBvc1UwRkJVQ3hIUVVGdFFrTXNXVUZCYmtVN1FVRkRSRHRCUVVOR096dEJRVVZFTEZOQlFWTmtMRkZCUVZRc1EwRkJhMEo0UXl4SlFVRnNRaXhGUVVGM1FrMHNTVUZCZUVJc1JVRkJPRUozUXl4TFFVRTVRaXhGUVVGeFF6dEJRVU51UXpsRExFOUJRVXQzUXl4UlFVRk1MRWRCUVdkQ0xFbEJRV2hDTzBGQlEwRjRReXhQUVVGTFJTeExRVUZNTEVOQlFWY3lRaXhKUVVGWUxFTkJRV2RDTzBGQlEyUlhMR05CUVZVc1NVRkVTVHRCUVVWa2JFTXNWVUZCVFVFc1NVRkdVVHRCUVVka1F5eFpRVUZSZFVNN1FVRklUU3hIUVVGb1FqdEJRVXRFT3p0QlFVVkVMRk5CUVZORExHRkJRVlFzUTBGQmRVSXZReXhKUVVGMlFpeEZRVUUyUWpSRUxFMUJRVGRDTEVWQlFYRkRaQ3hMUVVGeVF5eEZRVUUwUXp0QlFVTXhReXhUUVVGUFl5eFBRVUZQYkVJc1RVRkJVQ3hIUVVGblFra3NUVUZCVFVvc1RVRkJkRUlzU1VGQlowTnJRaXhQUVVGUGFrUXNTMEZCVUN4SFFVRmxhVVFzVDBGQlR6RkVMRXRCUVZBc1EwRkJZWEZDTEUxQlFXNUZMRVZCUVRKRk8wRkJRM3BGTEZGQlFVbHpReXhQUVVGUFJDeFBRVUZQTVVRc1MwRkJVQ3hEUVVGaE1FUXNUMEZCVDJwRUxFdEJRVkFzUlVGQllpeERRVUZZTzBGQlEwRllMRk5CUVV0RkxFdEJRVXdzUTBGQlZ6SkNMRWxCUVZnc1EwRkJaMEpuUXl4SlFVRm9RanRCUVVOQlJDeFhRVUZQYkVJc1RVRkJVRHRCUVVORU8wRkJRMFk3UVVGRFJDeFRRVUZUVlN4alFVRlVMRU5CUVhkQ2NFUXNTVUZCZUVJc1JVRkJPRUkwUkN4TlFVRTVRaXhGUVVGelF6dEJRVU53UXl4VFFVRlBRU3hQUVVGUGFrUXNTMEZCVUN4SFFVRmxhVVFzVDBGQlR6RkVMRXRCUVZBc1EwRkJZWEZDTEUxQlFXNURMRVZCUVRKRE8wRkJRM3BETEZGQlFVbHpReXhQUVVGUFJDeFBRVUZQTVVRc1MwRkJVQ3hEUVVGaE1FUXNUMEZCVDJwRUxFdEJRVkFzUlVGQllpeERRVUZZTzBGQlEwRllMRk5CUVV0RkxFdEJRVXdzUTBGQlZ6SkNMRWxCUVZnc1EwRkJaMEpuUXl4SlFVRm9RanRCUVVORU8wRkJRMFk3TzBGQlJVUXNVMEZCVTFnc1lVRkJWQ3hEUVVGMVFsa3NTMEZCZGtJc1JVRkJPRUk3UVVGRE5VSXNUVUZCU1hCRUxFMUJRVTBzUlVGQlZqdEJRVUZCTEUxQlEwbHhSQ3haUVVGWlJDeE5RVUZOTlVRc1MwRkJUaXhEUVVGWk5FUXNUVUZCVFc1RUxFdEJRV3hDTEVWQlFYbENMRU5CUVhwQ0xFTkJSR2hDTzBGQlJVRXNVMEZCVDIxRUxFMUJRVTF1UkN4TFFVRk9MRWRCUVdOdFJDeE5RVUZOTlVRc1MwRkJUaXhEUVVGWmNVSXNUVUZCYWtNc1JVRkJlVU03UVVGRGRrTXNVVUZCU1hORExFOUJRVTlETEUxQlFVMDFSQ3hMUVVGT0xFTkJRVmswUkN4TlFVRk5ia1FzUzBGQmJFSXNRMEZCV0RzN1FVRkZRVHRCUVVOQkxGRkJRVWx2UkN4alFVRmpMRWRCUVdRc1NVRkJjVUpHTEV0QlFVc3NRMEZCVEN4TlFVRlpMRWRCUVhKRExFVkJRVEJETzBGQlEzaERSU3hyUWtGQldTeEhRVUZhTzBGQlEwUTdPMEZCUlVRc1VVRkJTVUVzWTBGQlkwWXNTMEZCU3l4RFFVRk1MRU5CUVd4Q0xFVkJRVEpDTzBGQlEzcENia1FzVlVGQlNXMUNMRWxCUVVvc1EwRkJVMmRETEVsQlFWUTdRVUZEUVVNc1dVRkJUVzVFTEV0QlFVNDdRVUZEUkN4TFFVaEVMRTFCUjA4N1FVRkRURHRCUVVORU8wRkJRMFk3TzBGQlJVUXNVMEZCVDBRc1IwRkJVRHRCUVVORU8wRkJRMFFzVTBGQlUyZEVMR05CUVZRc1EwRkJkMEpKTEV0QlFYaENMRVZCUVN0Q1JTeFpRVUV2UWl4RlFVRTJRenRCUVVNelF5eE5RVUZKUXl4VlFVRlZMRVZCUVdRN1FVRkJRU3hOUVVOSlRpeFRRVUZUTEVWQlJHSTdRVUZCUVN4TlFVVkpUeXhoUVVGaExFTkJSbXBDTzBGQlFVRXNUVUZIU1VNc2FVSkJRV2xDTEV0QlNISkNPMEZCUVVFc1RVRkpTVU1zWVVGQllTeExRVXBxUWp0QlFVdEJMRk5CUVU5R0xHRkJRV0ZHTEdGQlFXRjZReXhOUVVFeFFpeEpRVU5GZFVNc1RVRkJUVzVFTEV0QlFVNHNSMEZCWTIxRUxFMUJRVTAxUkN4TFFVRk9MRU5CUVZseFFpeE5RVVJ1UXl4RlFVTXlRenRCUVVONlF5eFJRVUZKT0VNc1UwRkJVMUFzVFVGQlRUVkVMRXRCUVU0c1EwRkJXVFJFTEUxQlFVMXVSQ3hMUVVGc1FpeERRVUZpTzBGQlFVRXNVVUZEU1RKRUxGRkJRVkZPTEdGQlFXRkZMRlZCUVdJc1EwRkVXanM3UVVGSFFUdEJRVU5CTEZGQlFVbEpMRTFCUVUwc1EwRkJUaXhOUVVGaExFZEJRV3BDTEVWQlFYTkNPMEZCUTNCQ08wRkJRMFE3TzBGQlJVUklMSEZDUVVGcFFrRXNhMEpCUVd0Q1JTeFBRVUZQTEVOQlFWQXNUVUZCWXl4SFFVRnFSRHM3UVVGRlFWWXNWMEZCVHpsQ0xFbEJRVkFzUTBGQldYbERMRXRCUVZvN1FVRkRRVW83TzBGQlJVRTdRVUZEUVR0QlFVTkJMRkZCUVVsSExFOUJRVThzUTBGQlVDeE5RVUZqTEVkQlFXeENMRVZCUVhWQ08wRkJRM0pDUkN4dFFrRkJZU3hKUVVGaU96dEJRVVZCTEdGQlFVOURMRTlCUVU4c1EwRkJVQ3hOUVVGakxFZEJRWEpDTEVWQlFUQkNPMEZCUTNoQ1NpeG5Ra0ZCVVhCRExFbEJRVklzUTBGQllYZERMRTFCUVdJN1FVRkRRVUVzYVVKQlFWTlFMRTFCUVUwMVJDeExRVUZPTEVOQlFWa3NSVUZCUlRSRUxFMUJRVTF1UkN4TFFVRndRaXhEUVVGVU8wRkJRMFE3UVVGRFJqczdRVUZGUkN4UlFVRkpNa1FzVFVGQlRVTXNUVUZCVGl4RFFVRmhMRU5CUVdJc1RVRkJiMEpHTEU5QlFVOUZMRTFCUVZBc1EwRkJZeXhEUVVGa0xFTkJRWGhDTEVWQlFUQkRPMEZCUTNoRFRpeGpRVUZSY0VNc1NVRkJVaXhEUVVGaGQwTXNUVUZCWWp0QlFVTkJVQ3haUVVGTmJrUXNTMEZCVGp0QlFVTkVMRXRCU0VRc1RVRkhUenRCUVVOTWVVUXNiVUpCUVdFc1NVRkJZanRCUVVORU8wRkJRMFk3TzBGQlJVUXNUVUZCU1N4RFFVRkRTaXhoUVVGaFJTeFZRVUZpTEV0QlFUUkNMRVZCUVRkQ0xFVkJRV2xETEVOQlFXcERMRTFCUVhkRExFZEJRWGhETEVsQlEwZERMR05CUkZBc1JVRkRkVUk3UVVGRGNrSkRMR2xDUVVGaExFbEJRV0k3UVVGRFJEczdRVUZGUkN4TlFVRkpRU3hWUVVGS0xFVkJRV2RDTzBGQlEyUXNWMEZCVDBnc1QwRkJVRHRCUVVORU96dEJRVVZFTEZOQlFVOURMR0ZCUVdGR0xHRkJRV0Y2UXl4TlFVRnFReXhGUVVGNVF6dEJRVU4yUTI5RExGZEJRVTg1UWl4SlFVRlFMRU5CUVZsdFF5eGhRVUZoUlN4WlFVRmlMRU5CUVZvN1FVRkRSRHM3UVVGRlJDeFRRVUZQTzBGQlEweFFMR3RDUVVSTE8wRkJSVXhOTzBGQlJrc3NSMEZCVUR0QlFVbEVPenRCUVVWRUxGTkJRVk5XTEZWQlFWUXNRMEZCYjBKVkxFOUJRWEJDTEVWQlFUWkNPMEZCUXpOQ0xGTkJRVTlCTEZGQlFWRlBMRTFCUVZJc1EwRkJaU3hWUVVGVFF5eEpRVUZVTEVWQlFXVktMRTFCUVdZc1JVRkJkVUk3UVVGRE0wTXNWMEZCVDBrc1VVRkJVVW9zVDBGQlR5eERRVUZRTEUxQlFXTXNSMEZCTjBJN1FVRkRSQ3hIUVVaTkxFVkJSVW9zU1VGR1NTeERRVUZRTzBGQlIwUTdRVUZEUkN4VFFVRlRZaXhyUWtGQlZDeERRVUUwUWswc1MwRkJOVUlzUlVGQmJVTlpMR0ZCUVc1RExFVkJRV3RFUXl4TFFVRnNSQ3hGUVVGNVJEdEJRVU4yUkN4UFFVRkxMRWxCUVVsRExFbEJRVWtzUTBGQllpeEZRVUZuUWtFc1NVRkJTVVFzUzBGQmNFSXNSVUZCTWtKRExFZEJRVE5DTEVWQlFXZERPMEZCUXpsQ0xGRkJRVWxETEdkQ1FVRm5Ra2dzWTBGQlkwRXNZMEZCWTI1RUxFMUJRV1FzUjBGQmRVSnZSQ3hMUVVGMlFpeEhRVUVyUWtNc1EwRkJOME1zUlVGQlowUk1MRTFCUVdoRUxFTkJRWFZFTEVOQlFYWkVMRU5CUVhCQ08wRkJRMEVzVVVGQlNWUXNUVUZCVFRWRUxFdEJRVTRzUTBGQldUUkVMRTFCUVUxdVJDeExRVUZPTEVkQlFXTnBSU3hEUVVFeFFpeE5RVUZwUXl4TlFVRk5ReXhoUVVFelF5eEZRVUV3UkR0QlFVTjRSQ3hoUVVGUExFdEJRVkE3UVVGRFJEdEJRVU5HT3p0QlFVVkVaaXhSUVVGTmJrUXNTMEZCVGl4SlFVRmxaMFVzUzBGQlpqdEJRVU5CTEZOQlFVOHNTVUZCVUR0QlFVTkVPenRCUVVWRUxGTkJRVk14UlN4dFFrRkJWQ3hEUVVFMlFrTXNTMEZCTjBJc1JVRkJiME03UVVGRGJFTXNUVUZCU1VNc1YwRkJWeXhEUVVGbU8wRkJRMEVzVFVGQlNVTXNWMEZCVnl4RFFVRm1PenRCUVVWQlJpeFJRVUZOTkVVc1QwRkJUaXhEUVVGakxGVkJRVk5xUWl4SlFVRlVMRVZCUVdVN1FVRkRNMElzVVVGQlNTeFBRVUZQUVN4SlFVRlFMRXRCUVdkQ0xGRkJRWEJDTEVWQlFUaENPMEZCUXpWQ0xGVkJRVWxyUWl4VlFVRlZPVVVzYjBKQlFXOUNORVFzUzBGQlMzWkVMRWxCUVhwQ0xFTkJRV1E3UVVGRFFTeFZRVUZKTUVVc1lVRkJZUzlGTEc5Q1FVRnZRalJFTEV0QlFVdDBSQ3hOUVVGNlFpeERRVUZxUWpzN1FVRkZRU3hWUVVGSlNpeGhRVUZoUlN4VFFVRnFRaXhGUVVFMFFqdEJRVU14UWl4WlFVRkpNRVVzVVVGQlVUVkZMRkZCUVZJc1MwRkJjVUkyUlN4WFFVRlhOMFVzVVVGQmNFTXNSVUZCT0VNN1FVRkROVU5CTEhOQ1FVRlpORVVzVVVGQlVUVkZMRkZCUVhCQ08wRkJRMFFzVTBGR1JDeE5RVVZQTzBGQlEweEJMSEZDUVVGWFJTeFRRVUZZTzBGQlEwUTdRVUZEUmpzN1FVRkZSQ3hWUVVGSlJDeGhRVUZoUXl4VFFVRnFRaXhGUVVFMFFqdEJRVU14UWl4WlFVRkpNRVVzVVVGQlVUTkZMRkZCUVZJc1MwRkJjVUkwUlN4WFFVRlhOVVVzVVVGQmNFTXNSVUZCT0VNN1FVRkROVU5CTEhOQ1FVRlpNa1VzVVVGQlVUTkZMRkZCUVhCQ08wRkJRMFFzVTBGR1JDeE5RVVZQTzBGQlEweEJMSEZDUVVGWFF5eFRRVUZZTzBGQlEwUTdRVUZEUmp0QlFVTkdMRXRCYmtKRUxFMUJiVUpQTzBGQlEwd3NWVUZCU1VRc1lVRkJZVU1zVTBGQllpeExRVUV5UW5kRUxFdEJRVXNzUTBGQlRDeE5RVUZaTEVkQlFWb3NTVUZCYlVKQkxFdEJRVXNzUTBGQlRDeE5RVUZaTEVkQlFURkVMRU5CUVVvc1JVRkJiMFU3UVVGRGJFVjZSRHRCUVVORU8wRkJRMFFzVlVGQlNVUXNZVUZCWVVVc1UwRkJZaXhMUVVFeVFuZEVMRXRCUVVzc1EwRkJUQ3hOUVVGWkxFZEJRVm9zU1VGQmJVSkJMRXRCUVVzc1EwRkJUQ3hOUVVGWkxFZEJRVEZFTEVOQlFVb3NSVUZCYjBVN1FVRkRiRVV4UkR0QlFVTkVPMEZCUTBZN1FVRkRSaXhIUVRWQ1JEczdRVUU0UWtFc1UwRkJUeXhGUVVGRFFTeHJRa0ZCUkN4RlFVRlhReXhyUWtGQldDeEZRVUZRTzBGQlEwUWlMQ0ptYVd4bElqb2liV1Z5WjJVdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlM04wY25WamRIVnlaV1JRWVhSamFIMGdabkp2YlNBbkxpOWpjbVZoZEdVbk8xeHVhVzF3YjNKMElIdHdZWEp6WlZCaGRHTm9mU0JtY205dElDY3VMM0JoY25ObEp6dGNibHh1YVcxd2IzSjBJSHRoY25KaGVVVnhkV0ZzTENCaGNuSmhlVk4wWVhKMGMxZHBkR2g5SUdaeWIyMGdKeTR1TDNWMGFXd3ZZWEp5WVhrbk8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZMkZzWTB4cGJtVkRiM1Z1ZENob2RXNXJLU0I3WEc0Z0lHTnZibk4wSUh0dmJHUk1hVzVsY3l3Z2JtVjNUR2x1WlhOOUlEMGdZMkZzWTA5c1pFNWxkMHhwYm1WRGIzVnVkQ2hvZFc1ckxteHBibVZ6S1R0Y2JseHVJQ0JwWmlBb2IyeGtUR2x1WlhNZ0lUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJR2gxYm1zdWIyeGtUR2x1WlhNZ1BTQnZiR1JNYVc1bGN6dGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQmtaV3hsZEdVZ2FIVnVheTV2YkdSTWFXNWxjenRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHVaWGRNYVc1bGN5QWhQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnYUhWdWF5NXVaWGRNYVc1bGN5QTlJRzVsZDB4cGJtVnpPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR1JsYkdWMFpTQm9kVzVyTG01bGQweHBibVZ6TzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdFpYSm5aU2h0YVc1bExDQjBhR1ZwY25Nc0lHSmhjMlVwSUh0Y2JpQWdiV2x1WlNBOUlHeHZZV1JRWVhSamFDaHRhVzVsTENCaVlYTmxLVHRjYmlBZ2RHaGxhWEp6SUQwZ2JHOWhaRkJoZEdOb0tIUm9aV2x5Y3l3Z1ltRnpaU2s3WEc1Y2JpQWdiR1YwSUhKbGRDQTlJSHQ5TzF4dVhHNGdJQzh2SUVadmNpQnBibVJsZUNCM1pTQnFkWE4wSUd4bGRDQnBkQ0J3WVhOeklIUm9jbTkxWjJnZ1lYTWdhWFFnWkc5bGMyNG5kQ0JvWVhabElHRnVlU0J1WldObGMzTmhjbmtnYldWaGJtbHVaeTVjYmlBZ0x5OGdUR1ZoZG1sdVp5QnpZVzVwZEhrZ1kyaGxZMnR6SUc5dUlIUm9hWE1nZEc4Z2RHaGxJRUZRU1NCamIyNXpkVzFsY2lCMGFHRjBJRzFoZVNCcmJtOTNJRzF2Y21VZ1lXSnZkWFFnZEdobFhHNGdJQzh2SUcxbFlXNXBibWNnYVc0Z2RHaGxhWElnYjNkdUlHTnZiblJsZUhRdVhHNGdJR2xtSUNodGFXNWxMbWx1WkdWNElIeDhJSFJvWldseWN5NXBibVJsZUNrZ2UxeHVJQ0FnSUhKbGRDNXBibVJsZUNBOUlHMXBibVV1YVc1a1pYZ2dmSHdnZEdobGFYSnpMbWx1WkdWNE8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0cxcGJtVXVibVYzUm1sc1pVNWhiV1VnZkh3Z2RHaGxhWEp6TG01bGQwWnBiR1ZPWVcxbEtTQjdYRzRnSUNBZ2FXWWdLQ0ZtYVd4bFRtRnRaVU5vWVc1blpXUW9iV2x1WlNrcElIdGNiaUFnSUNBZ0lDOHZJRTV2SUdobFlXUmxjaUJ2Y2lCdWJ5QmphR0Z1WjJVZ2FXNGdiM1Z5Y3l3Z2RYTmxJSFJvWldseWN5QW9ZVzVrSUc5MWNuTWdhV1lnZEdobGFYSnpJR1J2WlhNZ2JtOTBJR1Y0YVhOMEtWeHVJQ0FnSUNBZ2NtVjBMbTlzWkVacGJHVk9ZVzFsSUQwZ2RHaGxhWEp6TG05c1pFWnBiR1ZPWVcxbElIeDhJRzFwYm1VdWIyeGtSbWxzWlU1aGJXVTdYRzRnSUNBZ0lDQnlaWFF1Ym1WM1JtbHNaVTVoYldVZ1BTQjBhR1ZwY25NdWJtVjNSbWxzWlU1aGJXVWdmSHdnYldsdVpTNXVaWGRHYVd4bFRtRnRaVHRjYmlBZ0lDQWdJSEpsZEM1dmJHUklaV0ZrWlhJZ1BTQjBhR1ZwY25NdWIyeGtTR1ZoWkdWeUlIeDhJRzFwYm1VdWIyeGtTR1ZoWkdWeU8xeHVJQ0FnSUNBZ2NtVjBMbTVsZDBobFlXUmxjaUE5SUhSb1pXbHljeTV1WlhkSVpXRmtaWElnZkh3Z2JXbHVaUzV1WlhkSVpXRmtaWEk3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2doWm1sc1pVNWhiV1ZEYUdGdVoyVmtLSFJvWldseWN5a3BJSHRjYmlBZ0lDQWdJQzh2SUU1dklHaGxZV1JsY2lCdmNpQnVieUJqYUdGdVoyVWdhVzRnZEdobGFYSnpMQ0IxYzJVZ2IzVnljMXh1SUNBZ0lDQWdjbVYwTG05c1pFWnBiR1ZPWVcxbElEMGdiV2x1WlM1dmJHUkdhV3hsVG1GdFpUdGNiaUFnSUNBZ0lISmxkQzV1WlhkR2FXeGxUbUZ0WlNBOUlHMXBibVV1Ym1WM1JtbHNaVTVoYldVN1hHNGdJQ0FnSUNCeVpYUXViMnhrU0dWaFpHVnlJRDBnYldsdVpTNXZiR1JJWldGa1pYSTdYRzRnSUNBZ0lDQnlaWFF1Ym1WM1NHVmhaR1Z5SUQwZ2JXbHVaUzV1WlhkSVpXRmtaWEk3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDOHZJRUp2ZEdnZ1kyaGhibWRsWkM0dUxpQm1hV2QxY21VZ2FYUWdiM1YwWEc0Z0lDQWdJQ0J5WlhRdWIyeGtSbWxzWlU1aGJXVWdQU0J6Wld4bFkzUkdhV1ZzWkNoeVpYUXNJRzFwYm1VdWIyeGtSbWxzWlU1aGJXVXNJSFJvWldseWN5NXZiR1JHYVd4bFRtRnRaU2s3WEc0Z0lDQWdJQ0J5WlhRdWJtVjNSbWxzWlU1aGJXVWdQU0J6Wld4bFkzUkdhV1ZzWkNoeVpYUXNJRzFwYm1VdWJtVjNSbWxzWlU1aGJXVXNJSFJvWldseWN5NXVaWGRHYVd4bFRtRnRaU2s3WEc0Z0lDQWdJQ0J5WlhRdWIyeGtTR1ZoWkdWeUlEMGdjMlZzWldOMFJtbGxiR1FvY21WMExDQnRhVzVsTG05c1pFaGxZV1JsY2l3Z2RHaGxhWEp6TG05c1pFaGxZV1JsY2lrN1hHNGdJQ0FnSUNCeVpYUXVibVYzU0dWaFpHVnlJRDBnYzJWc1pXTjBSbWxsYkdRb2NtVjBMQ0J0YVc1bExtNWxkMGhsWVdSbGNpd2dkR2hsYVhKekxtNWxkMGhsWVdSbGNpazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjbVYwTG1oMWJtdHpJRDBnVzEwN1hHNWNiaUFnYkdWMElHMXBibVZKYm1SbGVDQTlJREFzWEc0Z0lDQWdJQ0IwYUdWcGNuTkpibVJsZUNBOUlEQXNYRzRnSUNBZ0lDQnRhVzVsVDJabWMyVjBJRDBnTUN4Y2JpQWdJQ0FnSUhSb1pXbHljMDltWm5ObGRDQTlJREE3WEc1Y2JpQWdkMmhwYkdVZ0tHMXBibVZKYm1SbGVDQThJRzFwYm1VdWFIVnVhM011YkdWdVozUm9JSHg4SUhSb1pXbHljMGx1WkdWNElEd2dkR2hsYVhKekxtaDFibXR6TG14bGJtZDBhQ2tnZTF4dUlDQWdJR3hsZENCdGFXNWxRM1Z5Y21WdWRDQTlJRzFwYm1VdWFIVnVhM05iYldsdVpVbHVaR1Y0WFNCOGZDQjdiMnhrVTNSaGNuUTZJRWx1Wm1sdWFYUjVmU3hjYmlBZ0lDQWdJQ0FnZEdobGFYSnpRM1Z5Y21WdWRDQTlJSFJvWldseWN5NW9kVzVyYzF0MGFHVnBjbk5KYm1SbGVGMGdmSHdnZTI5c1pGTjBZWEowT2lCSmJtWnBibWwwZVgwN1hHNWNiaUFnSUNCcFppQW9hSFZ1YTBKbFptOXlaU2h0YVc1bFEzVnljbVZ1ZEN3Z2RHaGxhWEp6UTNWeWNtVnVkQ2twSUh0Y2JpQWdJQ0FnSUM4dklGUm9hWE1nY0dGMFkyZ2daRzlsY3lCdWIzUWdiM1psY214aGNDQjNhWFJvSUdGdWVTQnZaaUIwYUdVZ2IzUm9aWEp6TENCNVlYa3VYRzRnSUNBZ0lDQnlaWFF1YUhWdWEzTXVjSFZ6YUNoamJHOXVaVWgxYm1zb2JXbHVaVU4xY25KbGJuUXNJRzFwYm1WUFptWnpaWFFwS1R0Y2JpQWdJQ0FnSUcxcGJtVkpibVJsZUNzck8xeHVJQ0FnSUNBZ2RHaGxhWEp6VDJabWMyVjBJQ3M5SUcxcGJtVkRkWEp5Wlc1MExtNWxkMHhwYm1WeklDMGdiV2x1WlVOMWNuSmxiblF1YjJ4a1RHbHVaWE03WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2hvZFc1clFtVm1iM0psS0hSb1pXbHljME4xY25KbGJuUXNJRzFwYm1WRGRYSnlaVzUwS1NrZ2UxeHVJQ0FnSUNBZ0x5OGdWR2hwY3lCd1lYUmphQ0JrYjJWeklHNXZkQ0J2ZG1WeWJHRndJSGRwZEdnZ1lXNTVJRzltSUhSb1pTQnZkR2hsY25Nc0lIbGhlUzVjYmlBZ0lDQWdJSEpsZEM1b2RXNXJjeTV3ZFhOb0tHTnNiMjVsU0hWdWF5aDBhR1ZwY25ORGRYSnlaVzUwTENCMGFHVnBjbk5QWm1aelpYUXBLVHRjYmlBZ0lDQWdJSFJvWldseWMwbHVaR1Y0S3lzN1hHNGdJQ0FnSUNCdGFXNWxUMlptYzJWMElDczlJSFJvWldseWMwTjFjbkpsYm5RdWJtVjNUR2x1WlhNZ0xTQjBhR1ZwY25ORGRYSnlaVzUwTG05c1pFeHBibVZ6TzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQXZMeUJQZG1WeWJHRndMQ0J0WlhKblpTQmhjeUJpWlhOMElIZGxJR05oYmx4dUlDQWdJQ0FnYkdWMElHMWxjbWRsWkVoMWJtc2dQU0I3WEc0Z0lDQWdJQ0FnSUc5c1pGTjBZWEowT2lCTllYUm9MbTFwYmlodGFXNWxRM1Z5Y21WdWRDNXZiR1JUZEdGeWRDd2dkR2hsYVhKelEzVnljbVZ1ZEM1dmJHUlRkR0Z5ZENrc1hHNGdJQ0FnSUNBZ0lHOXNaRXhwYm1Wek9pQXdMRnh1SUNBZ0lDQWdJQ0J1WlhkVGRHRnlkRG9nVFdGMGFDNXRhVzRvYldsdVpVTjFjbkpsYm5RdWJtVjNVM1JoY25RZ0t5QnRhVzVsVDJabWMyVjBMQ0IwYUdWcGNuTkRkWEp5Wlc1MExtOXNaRk4wWVhKMElDc2dkR2hsYVhKelQyWm1jMlYwS1N4Y2JpQWdJQ0FnSUNBZ2JtVjNUR2x1WlhNNklEQXNYRzRnSUNBZ0lDQWdJR3hwYm1Wek9pQmJYVnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQWdJRzFsY21kbFRHbHVaWE1vYldWeVoyVmtTSFZ1YXl3Z2JXbHVaVU4xY25KbGJuUXViMnhrVTNSaGNuUXNJRzFwYm1WRGRYSnlaVzUwTG14cGJtVnpMQ0IwYUdWcGNuTkRkWEp5Wlc1MExtOXNaRk4wWVhKMExDQjBhR1ZwY25ORGRYSnlaVzUwTG14cGJtVnpLVHRjYmlBZ0lDQWdJSFJvWldseWMwbHVaR1Y0S3lzN1hHNGdJQ0FnSUNCdGFXNWxTVzVrWlhnckt6dGNibHh1SUNBZ0lDQWdjbVYwTG1oMWJtdHpMbkIxYzJnb2JXVnlaMlZrU0hWdWF5azdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlISmxkRHRjYm4xY2JseHVablZ1WTNScGIyNGdiRzloWkZCaGRHTm9LSEJoY21GdExDQmlZWE5sS1NCN1hHNGdJR2xtSUNoMGVYQmxiMllnY0dGeVlXMGdQVDA5SUNkemRISnBibWNuS1NCN1hHNGdJQ0FnYVdZZ0tDOWVRRUF2YlM1MFpYTjBLSEJoY21GdEtTQjhmQ0FvTDE1SmJtUmxlRG92YlM1MFpYTjBLSEJoY21GdEtTa3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQndZWEp6WlZCaGRHTm9LSEJoY21GdEtWc3dYVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvSVdKaGMyVXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25UWFZ6ZENCd2NtOTJhV1JsSUdFZ1ltRnpaU0J5WldabGNtVnVZMlVnYjNJZ2NHRnpjeUJwYmlCaElIQmhkR05vSnlrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnpkSEoxWTNSMWNtVmtVR0YwWTJnb2RXNWtaV1pwYm1Wa0xDQjFibVJsWm1sdVpXUXNJR0poYzJVc0lIQmhjbUZ0S1R0Y2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCd1lYSmhiVHRjYm4xY2JseHVablZ1WTNScGIyNGdabWxzWlU1aGJXVkRhR0Z1WjJWa0tIQmhkR05vS1NCN1hHNGdJSEpsZEhWeWJpQndZWFJqYUM1dVpYZEdhV3hsVG1GdFpTQW1KaUJ3WVhSamFDNXVaWGRHYVd4bFRtRnRaU0FoUFQwZ2NHRjBZMmd1YjJ4a1JtbHNaVTVoYldVN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUhObGJHVmpkRVpwWld4a0tHbHVaR1Y0TENCdGFXNWxMQ0IwYUdWcGNuTXBJSHRjYmlBZ2FXWWdLRzFwYm1VZ1BUMDlJSFJvWldseWN5a2dlMXh1SUNBZ0lISmxkSFZ5YmlCdGFXNWxPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR2x1WkdWNExtTnZibVpzYVdOMElEMGdkSEoxWlR0Y2JpQWdJQ0J5WlhSMWNtNGdlMjFwYm1Vc0lIUm9aV2x5YzMwN1hHNGdJSDFjYm4xY2JseHVablZ1WTNScGIyNGdhSFZ1YTBKbFptOXlaU2gwWlhOMExDQmphR1ZqYXlrZ2UxeHVJQ0J5WlhSMWNtNGdkR1Z6ZEM1dmJHUlRkR0Z5ZENBOElHTm9aV05yTG05c1pGTjBZWEowWEc0Z0lDQWdKaVlnS0hSbGMzUXViMnhrVTNSaGNuUWdLeUIwWlhOMExtOXNaRXhwYm1WektTQThJR05vWldOckxtOXNaRk4wWVhKME8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCamJHOXVaVWgxYm1zb2FIVnVheXdnYjJabWMyVjBLU0I3WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnYjJ4a1UzUmhjblE2SUdoMWJtc3ViMnhrVTNSaGNuUXNJRzlzWkV4cGJtVnpPaUJvZFc1ckxtOXNaRXhwYm1WekxGeHVJQ0FnSUc1bGQxTjBZWEowT2lCb2RXNXJMbTVsZDFOMFlYSjBJQ3NnYjJabWMyVjBMQ0J1WlhkTWFXNWxjem9nYUhWdWF5NXVaWGRNYVc1bGN5eGNiaUFnSUNCc2FXNWxjem9nYUhWdWF5NXNhVzVsYzF4dUlDQjlPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnRaWEpuWlV4cGJtVnpLR2gxYm1zc0lHMXBibVZQWm1aelpYUXNJRzFwYm1WTWFXNWxjeXdnZEdobGFYSlBabVp6WlhRc0lIUm9aV2x5VEdsdVpYTXBJSHRjYmlBZ0x5OGdWR2hwY3lCM2FXeHNJR2RsYm1WeVlXeHNlU0J5WlhOMWJIUWdhVzRnWVNCamIyNW1iR2xqZEdWa0lHaDFibXNzSUdKMWRDQjBhR1Z5WlNCaGNtVWdZMkZ6WlhNZ2QyaGxjbVVnZEdobElHTnZiblJsZUhSY2JpQWdMeThnYVhNZ2RHaGxJRzl1YkhrZ2IzWmxjbXhoY0NCM2FHVnlaU0IzWlNCallXNGdjM1ZqWTJWemMyWjFiR3g1SUcxbGNtZGxJSFJvWlNCamIyNTBaVzUwSUdobGNtVXVYRzRnSUd4bGRDQnRhVzVsSUQwZ2UyOW1abk5sZERvZ2JXbHVaVTltWm5ObGRDd2diR2x1WlhNNklHMXBibVZNYVc1bGN5d2dhVzVrWlhnNklEQjlMRnh1SUNBZ0lDQWdkR2hsYVhJZ1BTQjdiMlptYzJWME9pQjBhR1ZwY2s5bVpuTmxkQ3dnYkdsdVpYTTZJSFJvWldseVRHbHVaWE1zSUdsdVpHVjRPaUF3ZlR0Y2JseHVJQ0F2THlCSVlXNWtiR1VnWVc1NUlHeGxZV1JwYm1jZ1kyOXVkR1Z1ZEZ4dUlDQnBibk5sY25STVpXRmthVzVuS0doMWJtc3NJRzFwYm1Vc0lIUm9aV2x5S1R0Y2JpQWdhVzV6WlhKMFRHVmhaR2x1Wnlob2RXNXJMQ0IwYUdWcGNpd2diV2x1WlNrN1hHNWNiaUFnTHk4Z1RtOTNJR2x1SUhSb1pTQnZkbVZ5YkdGd0lHTnZiblJsYm5RdUlGTmpZVzRnZEdoeWIzVm5hQ0JoYm1RZ2MyVnNaV04wSUhSb1pTQmlaWE4wSUdOb1lXNW5aWE1nWm5KdmJTQmxZV05vTGx4dUlDQjNhR2xzWlNBb2JXbHVaUzVwYm1SbGVDQThJRzFwYm1VdWJHbHVaWE11YkdWdVozUm9JQ1ltSUhSb1pXbHlMbWx1WkdWNElEd2dkR2hsYVhJdWJHbHVaWE11YkdWdVozUm9LU0I3WEc0Z0lDQWdiR1YwSUcxcGJtVkRkWEp5Wlc1MElEMGdiV2x1WlM1c2FXNWxjMXR0YVc1bExtbHVaR1Y0WFN4Y2JpQWdJQ0FnSUNBZ2RHaGxhWEpEZFhKeVpXNTBJRDBnZEdobGFYSXViR2x1WlhOYmRHaGxhWEl1YVc1a1pYaGRPMXh1WEc0Z0lDQWdhV1lnS0NodGFXNWxRM1Z5Y21WdWRGc3dYU0E5UFQwZ0p5MG5JSHg4SUcxcGJtVkRkWEp5Wlc1MFd6QmRJRDA5UFNBbkt5Y3BYRzRnSUNBZ0lDQWdJQ1ltSUNoMGFHVnBja04xY25KbGJuUmJNRjBnUFQwOUlDY3RKeUI4ZkNCMGFHVnBja04xY25KbGJuUmJNRjBnUFQwOUlDY3JKeWtwSUh0Y2JpQWdJQ0FnSUM4dklFSnZkR2dnYlc5a2FXWnBaV1FnTGk0dVhHNGdJQ0FnSUNCdGRYUjFZV3hEYUdGdVoyVW9hSFZ1YXl3Z2JXbHVaU3dnZEdobGFYSXBPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9iV2x1WlVOMWNuSmxiblJiTUYwZ1BUMDlJQ2NySnlBbUppQjBhR1ZwY2tOMWNuSmxiblJiTUYwZ1BUMDlJQ2NnSnlrZ2UxeHVJQ0FnSUNBZ0x5OGdUV2x1WlNCcGJuTmxjblJsWkZ4dUlDQWdJQ0FnYUhWdWF5NXNhVzVsY3k1d2RYTm9LQzR1TGlCamIyeHNaV04wUTJoaGJtZGxLRzFwYm1VcEtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUm9aV2x5UTNWeWNtVnVkRnN3WFNBOVBUMGdKeXNuSUNZbUlHMXBibVZEZFhKeVpXNTBXekJkSUQwOVBTQW5JQ2NwSUh0Y2JpQWdJQ0FnSUM4dklGUm9aV2x5Y3lCcGJuTmxjblJsWkZ4dUlDQWdJQ0FnYUhWdWF5NXNhVzVsY3k1d2RYTm9LQzR1TGlCamIyeHNaV04wUTJoaGJtZGxLSFJvWldseUtTazdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaHRhVzVsUTNWeWNtVnVkRnN3WFNBOVBUMGdKeTBuSUNZbUlIUm9aV2x5UTNWeWNtVnVkRnN3WFNBOVBUMGdKeUFuS1NCN1hHNGdJQ0FnSUNBdkx5Qk5hVzVsSUhKbGJXOTJaV1FnYjNJZ1pXUnBkR1ZrWEc0Z0lDQWdJQ0J5WlcxdmRtRnNLR2gxYm1zc0lHMXBibVVzSUhSb1pXbHlLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFJvWldseVEzVnljbVZ1ZEZzd1hTQTlQVDBnSnkwbklDWW1JRzFwYm1WRGRYSnlaVzUwV3pCZElEMDlQU0FuSUNjcElIdGNiaUFnSUNBZ0lDOHZJRlJvWldseUlISmxiVzkyWldRZ2IzSWdaV1JwZEdWa1hHNGdJQ0FnSUNCeVpXMXZkbUZzS0doMWJtc3NJSFJvWldseUxDQnRhVzVsTENCMGNuVmxLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzFwYm1WRGRYSnlaVzUwSUQwOVBTQjBhR1ZwY2tOMWNuSmxiblFwSUh0Y2JpQWdJQ0FnSUM4dklFTnZiblJsZUhRZ2FXUmxiblJwZEhsY2JpQWdJQ0FnSUdoMWJtc3ViR2x1WlhNdWNIVnphQ2h0YVc1bFEzVnljbVZ1ZENrN1hHNGdJQ0FnSUNCdGFXNWxMbWx1WkdWNEt5czdYRzRnSUNBZ0lDQjBhR1ZwY2k1cGJtUmxlQ3NyTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQXZMeUJEYjI1MFpYaDBJRzFwYzIxaGRHTm9YRzRnSUNBZ0lDQmpiMjVtYkdsamRDaG9kVzVyTENCamIyeHNaV04wUTJoaGJtZGxLRzFwYm1VcExDQmpiMnhzWldOMFEyaGhibWRsS0hSb1pXbHlLU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHk4Z1RtOTNJSEIxYzJnZ1lXNTVkR2hwYm1jZ2RHaGhkQ0J0WVhrZ1ltVWdjbVZ0WVdsdWFXNW5YRzRnSUdsdWMyVnlkRlJ5WVdsc2FXNW5LR2gxYm1zc0lHMXBibVVwTzF4dUlDQnBibk5sY25SVWNtRnBiR2x1Wnlob2RXNXJMQ0IwYUdWcGNpazdYRzVjYmlBZ1kyRnNZMHhwYm1WRGIzVnVkQ2hvZFc1cktUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2JYVjBkV0ZzUTJoaGJtZGxLR2gxYm1zc0lHMXBibVVzSUhSb1pXbHlLU0I3WEc0Z0lHeGxkQ0J0ZVVOb1lXNW5aWE1nUFNCamIyeHNaV04wUTJoaGJtZGxLRzFwYm1VcExGeHVJQ0FnSUNBZ2RHaGxhWEpEYUdGdVoyVnpJRDBnWTI5c2JHVmpkRU5vWVc1blpTaDBhR1ZwY2lrN1hHNWNiaUFnYVdZZ0tHRnNiRkpsYlc5MlpYTW9iWGxEYUdGdVoyVnpLU0FtSmlCaGJHeFNaVzF2ZG1WektIUm9aV2x5UTJoaGJtZGxjeWtwSUh0Y2JpQWdJQ0F2THlCVGNHVmphV0ZzSUdOaGMyVWdabTl5SUhKbGJXOTJaU0JqYUdGdVoyVnpJSFJvWVhRZ1lYSmxJSE4xY0dWeWMyVjBjeUJ2WmlCdmJtVWdZVzV2ZEdobGNseHVJQ0FnSUdsbUlDaGhjbkpoZVZOMFlYSjBjMWRwZEdnb2JYbERhR0Z1WjJWekxDQjBhR1ZwY2tOb1lXNW5aWE1wWEc0Z0lDQWdJQ0FnSUNZbUlITnJhWEJTWlcxdmRtVlRkWEJsY25ObGRDaDBhR1ZwY2l3Z2JYbERhR0Z1WjJWekxDQnRlVU5vWVc1blpYTXViR1Z1WjNSb0lDMGdkR2hsYVhKRGFHRnVaMlZ6TG14bGJtZDBhQ2twSUh0Y2JpQWdJQ0FnSUdoMWJtc3ViR2x1WlhNdWNIVnphQ2d1TGk0Z2JYbERhR0Z1WjJWektUdGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0dGeWNtRjVVM1JoY25SelYybDBhQ2gwYUdWcGNrTm9ZVzVuWlhNc0lHMTVRMmhoYm1kbGN5bGNiaUFnSUNBZ0lDQWdKaVlnYzJ0cGNGSmxiVzkyWlZOMWNHVnljMlYwS0cxcGJtVXNJSFJvWldseVEyaGhibWRsY3l3Z2RHaGxhWEpEYUdGdVoyVnpMbXhsYm1kMGFDQXRJRzE1UTJoaGJtZGxjeTVzWlc1bmRHZ3BLU0I3WEc0Z0lDQWdJQ0JvZFc1ckxteHBibVZ6TG5CMWMyZ29MaTR1SUhSb1pXbHlRMmhoYm1kbGN5azdYRzRnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnZlZ4dUlDQjlJR1ZzYzJVZ2FXWWdLR0Z5Y21GNVJYRjFZV3dvYlhsRGFHRnVaMlZ6TENCMGFHVnBja05vWVc1blpYTXBLU0I3WEc0Z0lDQWdhSFZ1YXk1c2FXNWxjeTV3ZFhOb0tDNHVMaUJ0ZVVOb1lXNW5aWE1wTzF4dUlDQWdJSEpsZEhWeWJqdGNiaUFnZlZ4dVhHNGdJR052Ym1ac2FXTjBLR2gxYm1zc0lHMTVRMmhoYm1kbGN5d2dkR2hsYVhKRGFHRnVaMlZ6S1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnY21WdGIzWmhiQ2hvZFc1ckxDQnRhVzVsTENCMGFHVnBjaXdnYzNkaGNDa2dlMXh1SUNCc1pYUWdiWGxEYUdGdVoyVnpJRDBnWTI5c2JHVmpkRU5vWVc1blpTaHRhVzVsS1N4Y2JpQWdJQ0FnSUhSb1pXbHlRMmhoYm1kbGN5QTlJR052Ykd4bFkzUkRiMjUwWlhoMEtIUm9aV2x5TENCdGVVTm9ZVzVuWlhNcE8xeHVJQ0JwWmlBb2RHaGxhWEpEYUdGdVoyVnpMbTFsY21kbFpDa2dlMXh1SUNBZ0lHaDFibXN1YkdsdVpYTXVjSFZ6YUNndUxpNGdkR2hsYVhKRGFHRnVaMlZ6TG0xbGNtZGxaQ2s3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnWTI5dVpteHBZM1FvYUhWdWF5d2djM2RoY0NBL0lIUm9aV2x5UTJoaGJtZGxjeUE2SUcxNVEyaGhibWRsY3l3Z2MzZGhjQ0EvSUcxNVEyaGhibWRsY3lBNklIUm9aV2x5UTJoaGJtZGxjeWs3WEc0Z0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z1kyOXVabXhwWTNRb2FIVnVheXdnYldsdVpTd2dkR2hsYVhJcElIdGNiaUFnYUhWdWF5NWpiMjVtYkdsamRDQTlJSFJ5ZFdVN1hHNGdJR2gxYm1zdWJHbHVaWE11Y0hWemFDaDdYRzRnSUNBZ1kyOXVabXhwWTNRNklIUnlkV1VzWEc0Z0lDQWdiV2x1WlRvZ2JXbHVaU3hjYmlBZ0lDQjBhR1ZwY25NNklIUm9aV2x5WEc0Z0lIMHBPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnBibk5sY25STVpXRmthVzVuS0doMWJtc3NJR2x1YzJWeWRDd2dkR2hsYVhJcElIdGNiaUFnZDJocGJHVWdLR2x1YzJWeWRDNXZabVp6WlhRZ1BDQjBhR1ZwY2k1dlptWnpaWFFnSmlZZ2FXNXpaWEowTG1sdVpHVjRJRHdnYVc1elpYSjBMbXhwYm1WekxteGxibWQwYUNrZ2UxeHVJQ0FnSUd4bGRDQnNhVzVsSUQwZ2FXNXpaWEowTG14cGJtVnpXMmx1YzJWeWRDNXBibVJsZUNzclhUdGNiaUFnSUNCb2RXNXJMbXhwYm1WekxuQjFjMmdvYkdsdVpTazdYRzRnSUNBZ2FXNXpaWEowTG05bVpuTmxkQ3NyTzF4dUlDQjlYRzU5WEc1bWRXNWpkR2x2YmlCcGJuTmxjblJVY21GcGJHbHVaeWhvZFc1ckxDQnBibk5sY25RcElIdGNiaUFnZDJocGJHVWdLR2x1YzJWeWRDNXBibVJsZUNBOElHbHVjMlZ5ZEM1c2FXNWxjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQnNaWFFnYkdsdVpTQTlJR2x1YzJWeWRDNXNhVzVsYzF0cGJuTmxjblF1YVc1a1pYZ3JLMTA3WEc0Z0lDQWdhSFZ1YXk1c2FXNWxjeTV3ZFhOb0tHeHBibVVwTzF4dUlDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlHTnZiR3hsWTNSRGFHRnVaMlVvYzNSaGRHVXBJSHRjYmlBZ2JHVjBJSEpsZENBOUlGdGRMRnh1SUNBZ0lDQWdiM0JsY21GMGFXOXVJRDBnYzNSaGRHVXViR2x1WlhOYmMzUmhkR1V1YVc1a1pYaGRXekJkTzF4dUlDQjNhR2xzWlNBb2MzUmhkR1V1YVc1a1pYZ2dQQ0J6ZEdGMFpTNXNhVzVsY3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0JzWlhRZ2JHbHVaU0E5SUhOMFlYUmxMbXhwYm1WelczTjBZWFJsTG1sdVpHVjRYVHRjYmx4dUlDQWdJQzh2SUVkeWIzVndJR0ZrWkdsMGFXOXVjeUIwYUdGMElHRnlaU0JwYlcxbFpHbGhkR1ZzZVNCaFpuUmxjaUJ6ZFdKMGNtRmpkR2x2Ym5NZ1lXNWtJSFJ5WldGMElIUm9aVzBnWVhNZ2IyNWxJRndpWVhSdmJXbGpYQ0lnYlc5a2FXWjVJR05vWVc1blpTNWNiaUFnSUNCcFppQW9iM0JsY21GMGFXOXVJRDA5UFNBbkxTY2dKaVlnYkdsdVpWc3dYU0E5UFQwZ0p5c25LU0I3WEc0Z0lDQWdJQ0J2Y0dWeVlYUnBiMjRnUFNBbkt5YzdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzl3WlhKaGRHbHZiaUE5UFQwZ2JHbHVaVnN3WFNrZ2UxeHVJQ0FnSUNBZ2NtVjBMbkIxYzJnb2JHbHVaU2s3WEc0Z0lDQWdJQ0J6ZEdGMFpTNXBibVJsZUNzck8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2NtVjBPMXh1ZlZ4dVpuVnVZM1JwYjI0Z1kyOXNiR1ZqZEVOdmJuUmxlSFFvYzNSaGRHVXNJRzFoZEdOb1EyaGhibWRsY3lrZ2UxeHVJQ0JzWlhRZ1kyaGhibWRsY3lBOUlGdGRMRnh1SUNBZ0lDQWdiV1Z5WjJWa0lEMGdXMTBzWEc0Z0lDQWdJQ0J0WVhSamFFbHVaR1Y0SUQwZ01DeGNiaUFnSUNBZ0lHTnZiblJsZUhSRGFHRnVaMlZ6SUQwZ1ptRnNjMlVzWEc0Z0lDQWdJQ0JqYjI1bWJHbGpkR1ZrSUQwZ1ptRnNjMlU3WEc0Z0lIZG9hV3hsSUNodFlYUmphRWx1WkdWNElEd2diV0YwWTJoRGFHRnVaMlZ6TG14bGJtZDBhRnh1SUNBZ0lDQWdJQ0FtSmlCemRHRjBaUzVwYm1SbGVDQThJSE4wWVhSbExteHBibVZ6TG14bGJtZDBhQ2tnZTF4dUlDQWdJR3hsZENCamFHRnVaMlVnUFNCemRHRjBaUzVzYVc1bGMxdHpkR0YwWlM1cGJtUmxlRjBzWEc0Z0lDQWdJQ0FnSUcxaGRHTm9JRDBnYldGMFkyaERhR0Z1WjJWelcyMWhkR05vU1c1a1pYaGRPMXh1WEc0Z0lDQWdMeThnVDI1alpTQjNaU2QyWlNCb2FYUWdiM1Z5SUdGa1pDd2dkR2hsYmlCM1pTQmhjbVVnWkc5dVpWeHVJQ0FnSUdsbUlDaHRZWFJqYUZzd1hTQTlQVDBnSnlzbktTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1MFpYaDBRMmhoYm1kbGN5QTlJR052Ym5SbGVIUkRhR0Z1WjJWeklIeDhJR05vWVc1blpWc3dYU0FoUFQwZ0p5QW5PMXh1WEc0Z0lDQWdiV1Z5WjJWa0xuQjFjMmdvYldGMFkyZ3BPMXh1SUNBZ0lHMWhkR05vU1c1a1pYZ3JLenRjYmx4dUlDQWdJQzh2SUVOdmJuTjFiV1VnWVc1NUlHRmtaR2wwYVc5dWN5QnBiaUIwYUdVZ2IzUm9aWElnWW14dlkyc2dZWE1nWVNCamIyNW1iR2xqZENCMGJ5QmhkSFJsYlhCMFhHNGdJQ0FnTHk4Z2RHOGdjSFZzYkNCcGJpQjBhR1VnY21WdFlXbHVhVzVuSUdOdmJuUmxlSFFnWVdaMFpYSWdkR2hwYzF4dUlDQWdJR2xtSUNoamFHRnVaMlZiTUYwZ1BUMDlJQ2NySnlrZ2UxeHVJQ0FnSUNBZ1kyOXVabXhwWTNSbFpDQTlJSFJ5ZFdVN1hHNWNiaUFnSUNBZ0lIZG9hV3hsSUNoamFHRnVaMlZiTUYwZ1BUMDlJQ2NySnlrZ2UxeHVJQ0FnSUNBZ0lDQmphR0Z1WjJWekxuQjFjMmdvWTJoaGJtZGxLVHRjYmlBZ0lDQWdJQ0FnWTJoaGJtZGxJRDBnYzNSaGRHVXViR2x1WlhOYkt5dHpkR0YwWlM1cGJtUmxlRjA3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0cxaGRHTm9Mbk4xWW5OMGNpZ3hLU0E5UFQwZ1kyaGhibWRsTG5OMVluTjBjaWd4S1NrZ2UxeHVJQ0FnSUNBZ1kyaGhibWRsY3k1d2RYTm9LR05vWVc1blpTazdYRzRnSUNBZ0lDQnpkR0YwWlM1cGJtUmxlQ3NyTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmpiMjVtYkdsamRHVmtJRDBnZEhKMVpUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnBaaUFvS0cxaGRHTm9RMmhoYm1kbGMxdHRZWFJqYUVsdVpHVjRYU0I4ZkNBbkp5bGJNRjBnUFQwOUlDY3JKMXh1SUNBZ0lDQWdKaVlnWTI5dWRHVjRkRU5vWVc1blpYTXBJSHRjYmlBZ0lDQmpiMjVtYkdsamRHVmtJRDBnZEhKMVpUdGNiaUFnZlZ4dVhHNGdJR2xtSUNoamIyNW1iR2xqZEdWa0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUdOb1lXNW5aWE03WEc0Z0lIMWNibHh1SUNCM2FHbHNaU0FvYldGMFkyaEpibVJsZUNBOElHMWhkR05vUTJoaGJtZGxjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQnRaWEpuWldRdWNIVnphQ2h0WVhSamFFTm9ZVzVuWlhOYmJXRjBZMmhKYm1SbGVDc3JYU2s3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnZTF4dUlDQWdJRzFsY21kbFpDeGNiaUFnSUNCamFHRnVaMlZ6WEc0Z0lIMDdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHRnNiRkpsYlc5MlpYTW9ZMmhoYm1kbGN5a2dlMXh1SUNCeVpYUjFjbTRnWTJoaGJtZGxjeTV5WldSMVkyVW9ablZ1WTNScGIyNG9jSEpsZGl3Z1kyaGhibWRsS1NCN1hHNGdJQ0FnY21WMGRYSnVJSEJ5WlhZZ0ppWWdZMmhoYm1kbFd6QmRJRDA5UFNBbkxTYzdYRzRnSUgwc0lIUnlkV1VwTzF4dWZWeHVablZ1WTNScGIyNGdjMnRwY0ZKbGJXOTJaVk4xY0dWeWMyVjBLSE4wWVhSbExDQnlaVzF2ZG1WRGFHRnVaMlZ6TENCa1pXeDBZU2tnZTF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JsYkhSaE95QnBLeXNwSUh0Y2JpQWdJQ0JzWlhRZ1kyaGhibWRsUTI5dWRHVnVkQ0E5SUhKbGJXOTJaVU5vWVc1blpYTmJjbVZ0YjNabFEyaGhibWRsY3k1c1pXNW5kR2dnTFNCa1pXeDBZU0FySUdsZExuTjFZbk4wY2lneEtUdGNiaUFnSUNCcFppQW9jM1JoZEdVdWJHbHVaWE5iYzNSaGRHVXVhVzVrWlhnZ0t5QnBYU0FoUFQwZ0p5QW5JQ3NnWTJoaGJtZGxRMjl1ZEdWdWRDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhOMFlYUmxMbWx1WkdWNElDczlJR1JsYkhSaE8xeHVJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnWTJGc1kwOXNaRTVsZDB4cGJtVkRiM1Z1ZENoc2FXNWxjeWtnZTF4dUlDQnNaWFFnYjJ4a1RHbHVaWE1nUFNBd08xeHVJQ0JzWlhRZ2JtVjNUR2x1WlhNZ1BTQXdPMXh1WEc0Z0lHeHBibVZ6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvYkdsdVpTa2dlMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdiR2x1WlNBaFBUMGdKM04wY21sdVp5Y3BJSHRjYmlBZ0lDQWdJR3hsZENCdGVVTnZkVzUwSUQwZ1kyRnNZMDlzWkU1bGQweHBibVZEYjNWdWRDaHNhVzVsTG0xcGJtVXBPMXh1SUNBZ0lDQWdiR1YwSUhSb1pXbHlRMjkxYm5RZ1BTQmpZV3hqVDJ4a1RtVjNUR2x1WlVOdmRXNTBLR3hwYm1VdWRHaGxhWEp6S1R0Y2JseHVJQ0FnSUNBZ2FXWWdLRzlzWkV4cGJtVnpJQ0U5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0cxNVEyOTFiblF1YjJ4a1RHbHVaWE1nUFQwOUlIUm9aV2x5UTI5MWJuUXViMnhrVEdsdVpYTXBJSHRjYmlBZ0lDQWdJQ0FnSUNCdmJHUk1hVzVsY3lBclBTQnRlVU52ZFc1MExtOXNaRXhwYm1Wek8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJRzlzWkV4cGJtVnpJRDBnZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHbG1JQ2h1WlhkTWFXNWxjeUFoUFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQWdJR2xtSUNodGVVTnZkVzUwTG01bGQweHBibVZ6SUQwOVBTQjBhR1ZwY2tOdmRXNTBMbTVsZDB4cGJtVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2JtVjNUR2x1WlhNZ0t6MGdiWGxEYjNWdWRDNXVaWGRNYVc1bGN6dGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0J1WlhkTWFXNWxjeUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JwWmlBb2JtVjNUR2x1WlhNZ0lUMDlJSFZ1WkdWbWFXNWxaQ0FtSmlBb2JHbHVaVnN3WFNBOVBUMGdKeXNuSUh4OElHeHBibVZiTUYwZ1BUMDlJQ2NnSnlrcElIdGNiaUFnSUNBZ0lDQWdibVYzVEdsdVpYTXJLenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNodmJHUk1hVzVsY3lBaFBUMGdkVzVrWldacGJtVmtJQ1ltSUNoc2FXNWxXekJkSUQwOVBTQW5MU2NnZkh3Z2JHbHVaVnN3WFNBOVBUMGdKeUFuS1NrZ2UxeHVJQ0FnSUNBZ0lDQnZiR1JNYVc1bGN5c3JPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlNrN1hHNWNiaUFnY21WMGRYSnVJSHR2YkdSTWFXNWxjeXdnYm1WM1RHbHVaWE45TzF4dWZWeHVJbDE5XG5cblxuLyoqKi8gfSksXG4vKiAxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9zdHJ1Y3R1cmVkUGF0Y2ggPSBzdHJ1Y3R1cmVkUGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NyZWF0ZVR3b0ZpbGVzUGF0Y2ggPSBjcmVhdGVUd29GaWxlc1BhdGNoO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jcmVhdGVQYXRjaCA9IGNyZWF0ZVBhdGNoO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2xpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2Z1bmN0aW9uIHN0cnVjdHVyZWRQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuXHQgIGlmICghb3B0aW9ucykge1xuXHQgICAgb3B0aW9ucyA9IHt9O1xuXHQgIH1cblx0ICBpZiAodHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0ICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG5cdCAgfVxuXG5cdCAgdmFyIGRpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9saW5lLmRpZmZMaW5lcykgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8ob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xuXHQgIGRpZmYucHVzaCh7IHZhbHVlOiAnJywgbGluZXM6IFtdIH0pOyAvLyBBcHBlbmQgYW4gZW1wdHkgdmFsdWUgdG8gbWFrZSBjbGVhbnVwIGVhc2llclxuXG5cdCAgZnVuY3Rpb24gY29udGV4dExpbmVzKGxpbmVzKSB7XG5cdCAgICByZXR1cm4gbGluZXMubWFwKGZ1bmN0aW9uIChlbnRyeSkge1xuXHQgICAgICByZXR1cm4gJyAnICsgZW50cnk7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICB2YXIgaHVua3MgPSBbXTtcblx0ICB2YXIgb2xkUmFuZ2VTdGFydCA9IDAsXG5cdCAgICAgIG5ld1JhbmdlU3RhcnQgPSAwLFxuXHQgICAgICBjdXJSYW5nZSA9IFtdLFxuXHQgICAgICBvbGRMaW5lID0gMSxcblx0ICAgICAgbmV3TGluZSA9IDE7XG5cblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovaSkge1xuXHQgICAgdmFyIGN1cnJlbnQgPSBkaWZmW2ldLFxuXHQgICAgICAgIGxpbmVzID0gY3VycmVudC5saW5lcyB8fCBjdXJyZW50LnZhbHVlLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuXHQgICAgY3VycmVudC5saW5lcyA9IGxpbmVzO1xuXG5cdCAgICBpZiAoY3VycmVudC5hZGRlZCB8fCBjdXJyZW50LnJlbW92ZWQpIHtcblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfY3VyUmFuZ2U7XG5cblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLy8gSWYgd2UgaGF2ZSBwcmV2aW91cyBjb250ZXh0LCBzdGFydCB3aXRoIHRoYXRcblx0ICAgICAgaWYgKCFvbGRSYW5nZVN0YXJ0KSB7XG5cdCAgICAgICAgdmFyIHByZXYgPSBkaWZmW2kgLSAxXTtcblx0ICAgICAgICBvbGRSYW5nZVN0YXJ0ID0gb2xkTGluZTtcblx0ICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gbmV3TGluZTtcblxuXHQgICAgICAgIGlmIChwcmV2KSB7XG5cdCAgICAgICAgICBjdXJSYW5nZSA9IG9wdGlvbnMuY29udGV4dCA+IDAgPyBjb250ZXh0TGluZXMocHJldi5saW5lcy5zbGljZSgtb3B0aW9ucy5jb250ZXh0KSkgOiBbXTtcblx0ICAgICAgICAgIG9sZFJhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuXHQgICAgICAgICAgbmV3UmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgLy8gT3V0cHV0IG91ciBjaGFuZ2VzXG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2N1clJhbmdlID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jdXJSYW5nZSkucHVzaC4gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2FwcGx5IC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2N1clJhbmdlIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3RvQ29uc3VtYWJsZUFycmF5KCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2xpbmVzLm1hcChmdW5jdGlvbiAoZW50cnkpIHtcblx0ICAgICAgICByZXR1cm4gKGN1cnJlbnQuYWRkZWQgPyAnKycgOiAnLScpICsgZW50cnk7XG5cdCAgICAgIH0pKSk7XG5cblx0ICAgICAgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuXHQgICAgICBpZiAoY3VycmVudC5hZGRlZCkge1xuXHQgICAgICAgIG5ld0xpbmUgKz0gbGluZXMubGVuZ3RoO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuXHQgICAgICB9XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICAvLyBJZGVudGljYWwgY29udGV4dCBsaW5lcy4gVHJhY2sgbGluZSBjaGFuZ2VzXG5cdCAgICAgIGlmIChvbGRSYW5nZVN0YXJ0KSB7XG5cdCAgICAgICAgLy8gQ2xvc2Ugb3V0IGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG91dHB1dCAob3Igam9pbiBvdmVybGFwcGluZylcblx0ICAgICAgICBpZiAobGluZXMubGVuZ3RoIDw9IG9wdGlvbnMuY29udGV4dCAqIDIgJiYgaSA8IGRpZmYubGVuZ3RoIC0gMikge1xuXHQgICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfY3VyUmFuZ2UyO1xuXG5cdCAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvLyBPdmVybGFwcGluZ1xuXHQgICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfY3VyUmFuZ2UyID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jdXJSYW5nZSkucHVzaC4gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2FwcGx5IC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2N1clJhbmdlMiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jb250ZXh0TGluZXMobGluZXMpKSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2N1clJhbmdlMztcblxuXHQgICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLy8gZW5kIHRoZSByYW5nZSBhbmQgb3V0cHV0XG5cdCAgICAgICAgICB2YXIgY29udGV4dFNpemUgPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIG9wdGlvbnMuY29udGV4dCk7XG5cdCAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9jdXJSYW5nZTMgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2N1clJhbmdlKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY3VyUmFuZ2UzIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3RvQ29uc3VtYWJsZUFycmF5KCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NvbnRleHRMaW5lcyhsaW5lcy5zbGljZSgwLCBjb250ZXh0U2l6ZSkpKSk7XG5cblx0ICAgICAgICAgIHZhciBodW5rID0ge1xuXHQgICAgICAgICAgICBvbGRTdGFydDogb2xkUmFuZ2VTdGFydCxcblx0ICAgICAgICAgICAgb2xkTGluZXM6IG9sZExpbmUgLSBvbGRSYW5nZVN0YXJ0ICsgY29udGV4dFNpemUsXG5cdCAgICAgICAgICAgIG5ld1N0YXJ0OiBuZXdSYW5nZVN0YXJ0LFxuXHQgICAgICAgICAgICBuZXdMaW5lczogbmV3TGluZSAtIG5ld1JhbmdlU3RhcnQgKyBjb250ZXh0U2l6ZSxcblx0ICAgICAgICAgICAgbGluZXM6IGN1clJhbmdlXG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgaWYgKGkgPj0gZGlmZi5sZW5ndGggLSAyICYmIGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQpIHtcblx0ICAgICAgICAgICAgLy8gRU9GIGlzIGluc2lkZSB0aGlzIGh1bmtcblx0ICAgICAgICAgICAgdmFyIG9sZEVPRk5ld2xpbmUgPSAvXFxuJC8udGVzdChvbGRTdHIpO1xuXHQgICAgICAgICAgICB2YXIgbmV3RU9GTmV3bGluZSA9IC9cXG4kLy50ZXN0KG5ld1N0cik7XG5cdCAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT0gMCAmJiAhb2xkRU9GTmV3bGluZSkge1xuXHQgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogb2xkIGhhcyBubyBlb2wgYW5kIG5vIHRyYWlsaW5nIGNvbnRleHQ7IG5vLW5sIGNhbiBlbmQgdXAgYmVmb3JlIGFkZHNcblx0ICAgICAgICAgICAgICBjdXJSYW5nZS5zcGxpY2UoaHVuay5vbGRMaW5lcywgMCwgJ1xcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZScpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKCFvbGRFT0ZOZXdsaW5lIHx8ICFuZXdFT0ZOZXdsaW5lKSB7XG5cdCAgICAgICAgICAgICAgY3VyUmFuZ2UucHVzaCgnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIGh1bmtzLnB1c2goaHVuayk7XG5cblx0ICAgICAgICAgIG9sZFJhbmdlU3RhcnQgPSAwO1xuXHQgICAgICAgICAgbmV3UmFuZ2VTdGFydCA9IDA7XG5cdCAgICAgICAgICBjdXJSYW5nZSA9IFtdO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcblx0ICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG5cdCAgICB9XG5cdCAgfTtcblxuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlmZi5sZW5ndGg7IGkrKykge1xuXHQgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19sb29wKCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2kpO1xuXHQgIH1cblxuXHQgIHJldHVybiB7XG5cdCAgICBvbGRGaWxlTmFtZTogb2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lOiBuZXdGaWxlTmFtZSxcblx0ICAgIG9sZEhlYWRlcjogb2xkSGVhZGVyLCBuZXdIZWFkZXI6IG5ld0hlYWRlcixcblx0ICAgIGh1bmtzOiBodW5rc1xuXHQgIH07XG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVUd29GaWxlc1BhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG5cdCAgdmFyIGRpZmYgPSBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpO1xuXG5cdCAgdmFyIHJldCA9IFtdO1xuXHQgIGlmIChvbGRGaWxlTmFtZSA9PSBuZXdGaWxlTmFtZSkge1xuXHQgICAgcmV0LnB1c2goJ0luZGV4OiAnICsgb2xkRmlsZU5hbWUpO1xuXHQgIH1cblx0ICByZXQucHVzaCgnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuXHQgIHJldC5wdXNoKCctLS0gJyArIGRpZmYub2xkRmlsZU5hbWUgKyAodHlwZW9mIGRpZmYub2xkSGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm9sZEhlYWRlcikpO1xuXHQgIHJldC5wdXNoKCcrKysgJyArIGRpZmYubmV3RmlsZU5hbWUgKyAodHlwZW9mIGRpZmYubmV3SGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm5ld0hlYWRlcikpO1xuXG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaWZmLmh1bmtzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICB2YXIgaHVuayA9IGRpZmYuaHVua3NbaV07XG5cdCAgICByZXQucHVzaCgnQEAgLScgKyBodW5rLm9sZFN0YXJ0ICsgJywnICsgaHVuay5vbGRMaW5lcyArICcgKycgKyBodW5rLm5ld1N0YXJ0ICsgJywnICsgaHVuay5uZXdMaW5lcyArICcgQEAnKTtcblx0ICAgIHJldC5wdXNoLmFwcGx5KHJldCwgaHVuay5saW5lcyk7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHJldC5qb2luKCdcXG4nKSArICdcXG4nO1xuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlUGF0Y2goZmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuXHQgIHJldHVybiBjcmVhdGVUd29GaWxlc1BhdGNoKGZpbGVOYW1lLCBmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTl3WVhSamFDOWpjbVZoZEdVdWFuTWlYU3dpYm1GdFpYTWlPbHNpYzNSeWRXTjBkWEpsWkZCaGRHTm9JaXdpWTNKbFlYUmxWSGR2Um1sc1pYTlFZWFJqYUNJc0ltTnlaV0YwWlZCaGRHTm9JaXdpYjJ4a1JtbHNaVTVoYldVaUxDSnVaWGRHYVd4bFRtRnRaU0lzSW05c1pGTjBjaUlzSW01bGQxTjBjaUlzSW05c1pFaGxZV1JsY2lJc0ltNWxkMGhsWVdSbGNpSXNJbTl3ZEdsdmJuTWlMQ0pqYjI1MFpYaDBJaXdpWkdsbVppSXNJbkIxYzJnaUxDSjJZV3gxWlNJc0lteHBibVZ6SWl3aVkyOXVkR1Y0ZEV4cGJtVnpJaXdpYldGd0lpd2laVzUwY25raUxDSm9kVzVyY3lJc0ltOXNaRkpoYm1kbFUzUmhjblFpTENKdVpYZFNZVzVuWlZOMFlYSjBJaXdpWTNWeVVtRnVaMlVpTENKdmJHUk1hVzVsSWl3aWJtVjNUR2x1WlNJc0lta2lMQ0pqZFhKeVpXNTBJaXdpY21Wd2JHRmpaU0lzSW5Od2JHbDBJaXdpWVdSa1pXUWlMQ0p5WlcxdmRtVmtJaXdpY0hKbGRpSXNJbk5zYVdObElpd2liR1Z1WjNSb0lpd2lZMjl1ZEdWNGRGTnBlbVVpTENKTllYUm9JaXdpYldsdUlpd2lhSFZ1YXlJc0ltOXNaRk4wWVhKMElpd2liMnhrVEdsdVpYTWlMQ0p1WlhkVGRHRnlkQ0lzSW01bGQweHBibVZ6SWl3aWIyeGtSVTlHVG1WM2JHbHVaU0lzSW5SbGMzUWlMQ0p1WlhkRlQwWk9aWGRzYVc1bElpd2ljM0JzYVdObElpd2ljbVYwSWl3aVlYQndiSGtpTENKcWIybHVJaXdpWm1sc1pVNWhiV1VpWFN3aWJXRndjR2x1WjNNaU9pSTdPenRuUTBGRlowSkJMR1VzUjBGQlFVRXNaVHQ1UkVGcFIwRkRMRzFDTEVkQlFVRkJMRzFDTzNsRVFYZENRVU1zVnl4SFFVRkJRU3hYT3p0QlFUTklhRUk3T3pzN2RVSkJSVThzVTBGQlUwWXNaVUZCVkN4RFFVRjVRa2NzVjBGQmVrSXNSVUZCYzBORExGZEJRWFJETEVWQlFXMUVReXhOUVVGdVJDeEZRVUV5UkVNc1RVRkJNMFFzUlVGQmJVVkRMRk5CUVc1RkxFVkJRVGhGUXl4VFFVRTVSU3hGUVVGNVJrTXNUMEZCZWtZc1JVRkJhMGM3UVVGRGRrY3NUVUZCU1N4RFFVRkRRU3hQUVVGTUxFVkJRV003UVVGRFdrRXNZMEZCVlN4RlFVRldPMEZCUTBRN1FVRkRSQ3hOUVVGSkxFOUJRVTlCTEZGQlFWRkRMRTlCUVdZc1MwRkJNa0lzVjBGQkwwSXNSVUZCTkVNN1FVRkRNVU5FTEZsQlFWRkRMRTlCUVZJc1IwRkJhMElzUTBGQmJFSTdRVUZEUkRzN1FVRkZSQ3hOUVVGTlF5eFBRVUZQTEhORlFVRlZUaXhOUVVGV0xFVkJRV3RDUXl4TlFVRnNRaXhGUVVFd1FrY3NUMEZCTVVJc1EwRkJZanRCUVVOQlJTeFBRVUZMUXl4SlFVRk1MRU5CUVZVc1JVRkJRME1zVDBGQlR5eEZRVUZTTEVWQlFWbERMRTlCUVU4c1JVRkJia0lzUlVGQlZpeEZRVlIxUnl4RFFWTnNSVHM3UVVGRmNrTXNWMEZCVTBNc1dVRkJWQ3hEUVVGelFrUXNTMEZCZEVJc1JVRkJOa0k3UVVGRE0wSXNWMEZCVDBFc1RVRkJUVVVzUjBGQlRpeERRVUZWTEZWQlFWTkRMRXRCUVZRc1JVRkJaMEk3UVVGQlJTeGhRVUZQTEUxQlFVMUJMRXRCUVdJN1FVRkJjVUlzUzBGQmFrUXNRMEZCVUR0QlFVTkVPenRCUVVWRUxFMUJRVWxETEZGQlFWRXNSVUZCV2p0QlFVTkJMRTFCUVVsRExHZENRVUZuUWl4RFFVRndRanRCUVVGQkxFMUJRWFZDUXl4blFrRkJaMElzUTBGQmRrTTdRVUZCUVN4TlFVRXdRME1zVjBGQlZ5eEZRVUZ5UkR0QlFVRkJMRTFCUTBsRExGVkJRVlVzUTBGRVpEdEJRVUZCTEUxQlEybENReXhWUVVGVkxFTkJSRE5DT3p0QlFXaENkVWNzT0VWQmEwSTVSa01zUTBGc1FqaEdPMEZCYlVKeVJ5eFJRVUZOUXl4VlFVRlZaQ3hMUVVGTFlTeERRVUZNTEVOQlFXaENPMEZCUVVFc1VVRkRUVllzVVVGQlVWY3NVVUZCVVZnc1MwRkJVaXhKUVVGcFFsY3NVVUZCVVZvc1MwRkJVaXhEUVVGallTeFBRVUZrTEVOQlFYTkNMRXRCUVhSQ0xFVkJRVFpDTEVWQlFUZENMRVZCUVdsRFF5eExRVUZxUXl4RFFVRjFReXhKUVVGMlF5eERRVVF2UWp0QlFVVkJSaXhaUVVGUldDeExRVUZTTEVkQlFXZENRU3hMUVVGb1FqczdRVUZGUVN4UlFVRkpWeXhSUVVGUlJ5eExRVUZTTEVsQlFXbENTQ3hSUVVGUlNTeFBRVUUzUWl4RlFVRnpRenRCUVVGQk96dEJRVUZCTERoQ1FVTndRenRCUVVOQkxGVkJRVWtzUTBGQlExWXNZVUZCVEN4RlFVRnZRanRCUVVOc1FpeFpRVUZOVnl4UFFVRlBia0lzUzBGQlMyRXNTVUZCU1N4RFFVRlVMRU5CUVdJN1FVRkRRVXdzZDBKQlFXZENSeXhQUVVGb1FqdEJRVU5CUml4M1FrRkJaMEpITEU5QlFXaENPenRCUVVWQkxGbEJRVWxQTEVsQlFVb3NSVUZCVlR0QlFVTlNWQ3h4UWtGQlYxb3NVVUZCVVVNc1QwRkJVaXhIUVVGclFpeERRVUZzUWl4SFFVRnpRa3NzWVVGQllXVXNTMEZCUzJoQ0xFdEJRVXdzUTBGQlYybENMRXRCUVZnc1EwRkJhVUlzUTBGQlEzUkNMRkZCUVZGRExFOUJRVEZDTEVOQlFXSXNRMEZCZEVJc1IwRkJlVVVzUlVGQmNFWTdRVUZEUVZNc01rSkJRV2xDUlN4VFFVRlRWeXhOUVVFeFFqdEJRVU5CV2l3eVFrRkJhVUpETEZOQlFWTlhMRTFCUVRGQ08wRkJRMFE3UVVGRFJqczdRVUZGUkR0QlFVTkJMRFpGUVVGVGNFSXNTVUZCVkN3d1RFRkJhMEpGTEUxQlFVMUZMRWRCUVU0c1EwRkJWU3hWUVVGVFF5eExRVUZVTEVWQlFXZENPMEZCUXpGRExHVkJRVThzUTBGQlExRXNVVUZCVVVjc1MwRkJVaXhIUVVGblFpeEhRVUZvUWl4SFFVRnpRaXhIUVVGMlFpeEpRVUU0UWxnc1MwRkJja003UVVGRFJDeFBRVVpwUWl4RFFVRnNRanM3UVVGSlFUdEJRVU5CTEZWQlFVbFJMRkZCUVZGSExFdEJRVm9zUlVGQmJVSTdRVUZEYWtKTUxHMUNRVUZYVkN4TlFVRk5hMElzVFVGQmFrSTdRVUZEUkN4UFFVWkVMRTFCUlU4N1FVRkRURllzYlVKQlFWZFNMRTFCUVUxclFpeE5RVUZxUWp0QlFVTkVPMEZCUTBZc1MwRjZRa1FzVFVGNVFrODdRVUZEVER0QlFVTkJMRlZCUVVsaUxHRkJRVW9zUlVGQmJVSTdRVUZEYWtJN1FVRkRRU3haUVVGSlRDeE5RVUZOYTBJc1RVRkJUaXhKUVVGblFuWkNMRkZCUVZGRExFOUJRVklzUjBGQmEwSXNRMEZCYkVNc1NVRkJkVU5qTEVsQlFVbGlMRXRCUVV0eFFpeE5RVUZNTEVkQlFXTXNRMEZCTjBRc1JVRkJaMFU3UVVGQlFUczdRVUZCUVN4clEwRkRPVVE3UVVGRFFTeHJSa0ZCVTNCQ0xFbEJRVlFzTWt4QlFXdENSeXhoUVVGaFJDeExRVUZpTEVOQlFXeENPMEZCUTBRc1UwRklSQ3hOUVVkUE8wRkJRVUU3TzBGQlFVRXNhME5CUTB3N1FVRkRRU3hqUVVGSmJVSXNZMEZCWTBNc1MwRkJTME1zUjBGQlRDeERRVUZUY2tJc1RVRkJUV3RDTEUxQlFXWXNSVUZCZFVKMlFpeFJRVUZSUXl4UFFVRXZRaXhEUVVGc1FqdEJRVU5CTEd0R1FVRlRSU3hKUVVGVUxESk1RVUZyUWtjc1lVRkJZVVFzVFVGQlRXbENMRXRCUVU0c1EwRkJXU3hEUVVGYUxFVkJRV1ZGTEZkQlFXWXNRMEZCWWl4RFFVRnNRanM3UVVGRlFTeGpRVUZKUnl4UFFVRlBPMEZCUTFSRExITkNRVUZWYkVJc1lVRkVSRHRCUVVWVWJVSXNjMEpCUVZkb1FpeFZRVUZWU0N4aFFVRldMRWRCUVRCQ1l5eFhRVVkxUWp0QlFVZFVUU3h6UWtGQlZXNUNMR0ZCU0VRN1FVRkpWRzlDTEhOQ1FVRlhha0lzVlVGQlZVZ3NZVUZCVml4SFFVRXdRbUVzVjBGS05VSTdRVUZMVkc1Q0xHMUNRVUZQVHp0QlFVeEZMRmRCUVZnN1FVRlBRU3hqUVVGSlJ5eExRVUZMWWl4TFFVRkxjVUlzVFVGQlRDeEhRVUZqTEVOQlFXNUNMRWxCUVhkQ2JFSXNUVUZCVFd0Q0xFMUJRVTRzU1VGQlowSjJRaXhSUVVGUlF5eFBRVUZ3UkN4RlFVRTJSRHRCUVVNelJEdEJRVU5CTEdkQ1FVRkpLMElzWjBKQlFXbENMRTFCUVUxRExFbEJRVTRzUTBGQlYzSkRMRTFCUVZnc1EwRkJja0k3UVVGRFFTeG5Ra0ZCU1hORExHZENRVUZwUWl4TlFVRk5SQ3hKUVVGT0xFTkJRVmR3UXl4TlFVRllMRU5CUVhKQ08wRkJRMEVzWjBKQlFVbFJMRTFCUVUxclFpeE5RVUZPTEVsQlFXZENMRU5CUVdoQ0xFbEJRWEZDTEVOQlFVTlRMR0ZCUVRGQ0xFVkJRWGxETzBGQlEzWkRPMEZCUTBGd1FpeDFRa0ZCVTNWQ0xFMUJRVlFzUTBGQlowSlNMRXRCUVV0RkxGRkJRWEpDTEVWQlFTdENMRU5CUVM5Q0xFVkJRV3RETERoQ1FVRnNRenRCUVVORUxHRkJTRVFzVFVGSFR5eEpRVUZKTEVOQlFVTkhMR0ZCUVVRc1NVRkJhMElzUTBGQlEwVXNZVUZCZGtJc1JVRkJjME03UVVGRE0wTjBRaXgxUWtGQlUxUXNTVUZCVkN4RFFVRmpMRGhDUVVGa08wRkJRMFE3UVVGRFJqdEJRVU5FVFN4blFrRkJUVTRzU1VGQlRpeERRVUZYZDBJc1NVRkJXRHM3UVVGRlFXcENMREJDUVVGblFpeERRVUZvUWp0QlFVTkJReXd3UWtGQlowSXNRMEZCYUVJN1FVRkRRVU1zY1VKQlFWY3NSVUZCV0R0QlFVTkVPMEZCUTBZN1FVRkRSRU1zYVVKQlFWZFNMRTFCUVUxclFpeE5RVUZxUWp0QlFVTkJWQ3hwUWtGQlYxUXNUVUZCVFd0Q0xFMUJRV3BDTzBGQlEwUTdRVUYyUm05SE96dEJRV3RDZGtjc1QwRkJTeXhKUVVGSlVpeEpRVUZKTEVOQlFXSXNSVUZCWjBKQkxFbEJRVWxpTEV0QlFVdHhRaXhOUVVGNlFpeEZRVUZwUTFJc1IwRkJha01zUlVGQmMwTTdRVUZCUVN3eVJFRkJOMEpCTEVOQlFUWkNPMEZCYzBWeVF6czdRVUZGUkN4VFFVRlBPMEZCUTB4eVFpeHBRa0ZCWVVFc1YwRkVVaXhGUVVOeFFrTXNZVUZCWVVFc1YwRkViRU03UVVGRlRFY3NaVUZCVjBFc1UwRkdUaXhGUVVWcFFrTXNWMEZCVjBFc1UwRkdOVUk3UVVGSFRGVXNWMEZCVDBFN1FVRklSaXhIUVVGUU8wRkJTMFE3TzBGQlJVMHNVMEZCVTJwQ0xHMUNRVUZVTEVOQlFUWkNSU3hYUVVFM1FpeEZRVUV3UTBNc1YwRkJNVU1zUlVGQmRVUkRMRTFCUVhaRUxFVkJRU3RFUXl4TlFVRXZSQ3hGUVVGMVJVTXNVMEZCZGtVc1JVRkJhMFpETEZOQlFXeEdMRVZCUVRaR1F5eFBRVUUzUml4RlFVRnpSenRCUVVNelJ5eE5RVUZOUlN4UFFVRlBXQ3huUWtGQlowSkhMRmRCUVdoQ0xFVkJRVFpDUXl4WFFVRTNRaXhGUVVFd1EwTXNUVUZCTVVNc1JVRkJhMFJETEUxQlFXeEVMRVZCUVRCRVF5eFRRVUV4UkN4RlFVRnhSVU1zVTBGQmNrVXNSVUZCWjBaRExFOUJRV2hHTEVOQlFXSTdPMEZCUlVFc1RVRkJUVzlETEUxQlFVMHNSVUZCV2p0QlFVTkJMRTFCUVVreFF5eGxRVUZsUXl4WFFVRnVRaXhGUVVGblF6dEJRVU01UW5sRExGRkJRVWxxUXl4SlFVRktMRU5CUVZNc1dVRkJXVlFzVjBGQmNrSTdRVUZEUkR0QlFVTkVNRU1zVFVGQlNXcERMRWxCUVVvc1EwRkJVeXh4UlVGQlZEdEJRVU5CYVVNc1RVRkJTV3BETEVsQlFVb3NRMEZCVXl4VFFVRlRSQ3hMUVVGTFVpeFhRVUZrTEVsQlFUWkNMRTlCUVU5UkxFdEJRVXRLTEZOQlFWb3NTMEZCTUVJc1YwRkJNVUlzUjBGQmQwTXNSVUZCZUVNc1IwRkJOa01zVDBGQlQwa3NTMEZCUzBvc1UwRkJkRVlzUTBGQlZEdEJRVU5CYzBNc1RVRkJTV3BETEVsQlFVb3NRMEZCVXl4VFFVRlRSQ3hMUVVGTFVDeFhRVUZrTEVsQlFUWkNMRTlCUVU5UExFdEJRVXRJTEZOQlFWb3NTMEZCTUVJc1YwRkJNVUlzUjBGQmQwTXNSVUZCZUVNc1IwRkJOa01zVDBGQlQwY3NTMEZCUzBnc1UwRkJkRVlzUTBGQlZEczdRVUZGUVN4UFFVRkxMRWxCUVVsblFpeEpRVUZKTEVOQlFXSXNSVUZCWjBKQkxFbEJRVWxpTEV0QlFVdFBMRXRCUVV3c1EwRkJWMk1zVFVGQkwwSXNSVUZCZFVOU0xFZEJRWFpETEVWQlFUUkRPMEZCUXpGRExGRkJRVTFaTEU5QlFVOTZRaXhMUVVGTFR5eExRVUZNTEVOQlFWZE5MRU5CUVZnc1EwRkJZanRCUVVOQmNVSXNVVUZCU1dwRExFbEJRVW9zUTBGRFJTeFRRVUZUZDBJc1MwRkJTME1zVVVGQlpDeEhRVUY1UWl4SFFVRjZRaXhIUVVFclFrUXNTMEZCUzBVc1VVRkJjRU1zUjBGRFJTeEpRVVJHTEVkQlExTkdMRXRCUVV0SExGRkJSR1FzUjBGRGVVSXNSMEZFZWtJc1IwRkRLMEpJTEV0QlFVdEpMRkZCUkhCRExFZEJSVVVzUzBGSVNqdEJRVXRCU3l4UlFVRkpha01zU1VGQlNpeERRVUZUYTBNc1MwRkJWQ3hEUVVGbFJDeEhRVUZtTEVWQlFXOUNWQ3hMUVVGTGRFSXNTMEZCZWtJN1FVRkRSRHM3UVVGRlJDeFRRVUZQSzBJc1NVRkJTVVVzU1VGQlNpeERRVUZUTEVsQlFWUXNTVUZCYVVJc1NVRkJlRUk3UVVGRFJEczdRVUZGVFN4VFFVRlROME1zVjBGQlZDeERRVUZ4UWpoRExGRkJRWEpDTEVWQlFTdENNME1zVFVGQkwwSXNSVUZCZFVORExFMUJRWFpETEVWQlFTdERReXhUUVVFdlF5eEZRVUV3UkVNc1UwRkJNVVFzUlVGQmNVVkRMRTlCUVhKRkxFVkJRVGhGTzBGQlEyNUdMRk5CUVU5U0xHOUNRVUZ2UWl0RExGRkJRWEJDTEVWQlFUaENRU3hSUVVFNVFpeEZRVUYzUXpORExFMUJRWGhETEVWQlFXZEVReXhOUVVGb1JDeEZRVUYzUkVNc1UwRkJlRVFzUlVGQmJVVkRMRk5CUVc1RkxFVkJRVGhGUXl4UFFVRTVSU3hEUVVGUU8wRkJRMFFpTENKbWFXeGxJam9pWTNKbFlYUmxMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUh0a2FXWm1UR2x1WlhOOUlHWnliMjBnSnk0dUwyUnBabVl2YkdsdVpTYzdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ6ZEhKMVkzUjFjbVZrVUdGMFkyZ29iMnhrUm1sc1pVNWhiV1VzSUc1bGQwWnBiR1ZPWVcxbExDQnZiR1JUZEhJc0lHNWxkMU4wY2l3Z2IyeGtTR1ZoWkdWeUxDQnVaWGRJWldGa1pYSXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ2FXWWdLQ0Z2Y0hScGIyNXpLU0I3WEc0Z0lDQWdiM0IwYVc5dWN5QTlJSHQ5TzF4dUlDQjlYRzRnSUdsbUlDaDBlWEJsYjJZZ2IzQjBhVzl1Y3k1amIyNTBaWGgwSUQwOVBTQW5kVzVrWldacGJtVmtKeWtnZTF4dUlDQWdJRzl3ZEdsdmJuTXVZMjl1ZEdWNGRDQTlJRFE3WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0JrYVdabUlEMGdaR2xtWmt4cGJtVnpLRzlzWkZOMGNpd2dibVYzVTNSeUxDQnZjSFJwYjI1ektUdGNiaUFnWkdsbVppNXdkWE5vS0h0MllXeDFaVG9nSnljc0lHeHBibVZ6T2lCYlhYMHBPeUFnSUM4dklFRndjR1Z1WkNCaGJpQmxiWEIwZVNCMllXeDFaU0IwYnlCdFlXdGxJR05zWldGdWRYQWdaV0Z6YVdWeVhHNWNiaUFnWm5WdVkzUnBiMjRnWTI5dWRHVjRkRXhwYm1WektHeHBibVZ6S1NCN1hHNGdJQ0FnY21WMGRYSnVJR3hwYm1WekxtMWhjQ2htZFc1amRHbHZiaWhsYm5SeWVTa2dleUJ5WlhSMWNtNGdKeUFuSUNzZ1pXNTBjbms3SUgwcE8xeHVJQ0I5WEc1Y2JpQWdiR1YwSUdoMWJtdHpJRDBnVzEwN1hHNGdJR3hsZENCdmJHUlNZVzVuWlZOMFlYSjBJRDBnTUN3Z2JtVjNVbUZ1WjJWVGRHRnlkQ0E5SURBc0lHTjFjbEpoYm1kbElEMGdXMTBzWEc0Z0lDQWdJQ0J2YkdSTWFXNWxJRDBnTVN3Z2JtVjNUR2x1WlNBOUlERTdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1pHbG1aaTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdOdmJuTjBJR04xY25KbGJuUWdQU0JrYVdabVcybGRMRnh1SUNBZ0lDQWdJQ0FnSUd4cGJtVnpJRDBnWTNWeWNtVnVkQzVzYVc1bGN5QjhmQ0JqZFhKeVpXNTBMblpoYkhWbExuSmxjR3hoWTJVb0wxeGNiaVF2TENBbkp5a3VjM0JzYVhRb0oxeGNiaWNwTzF4dUlDQWdJR04xY25KbGJuUXViR2x1WlhNZ1BTQnNhVzVsY3p0Y2JseHVJQ0FnSUdsbUlDaGpkWEp5Wlc1MExtRmtaR1ZrSUh4OElHTjFjbkpsYm5RdWNtVnRiM1psWkNrZ2UxeHVJQ0FnSUNBZ0x5OGdTV1lnZDJVZ2FHRjJaU0J3Y21WMmFXOTFjeUJqYjI1MFpYaDBMQ0J6ZEdGeWRDQjNhWFJvSUhSb1lYUmNiaUFnSUNBZ0lHbG1JQ2doYjJ4a1VtRnVaMlZUZEdGeWRDa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQndjbVYySUQwZ1pHbG1abHRwSUMwZ01WMDdYRzRnSUNBZ0lDQWdJRzlzWkZKaGJtZGxVM1JoY25RZ1BTQnZiR1JNYVc1bE8xeHVJQ0FnSUNBZ0lDQnVaWGRTWVc1blpWTjBZWEowSUQwZ2JtVjNUR2x1WlR0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvY0hKbGRpa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOMWNsSmhibWRsSUQwZ2IzQjBhVzl1Y3k1amIyNTBaWGgwSUQ0Z01DQS9JR052Ym5SbGVIUk1hVzVsY3lod2NtVjJMbXhwYm1WekxuTnNhV05sS0MxdmNIUnBiMjV6TG1OdmJuUmxlSFFwS1NBNklGdGRPMXh1SUNBZ0lDQWdJQ0FnSUc5c1pGSmhibWRsVTNSaGNuUWdMVDBnWTNWeVVtRnVaMlV1YkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0FnSUc1bGQxSmhibWRsVTNSaGNuUWdMVDBnWTNWeVVtRnVaMlV1YkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUM4dklFOTFkSEIxZENCdmRYSWdZMmhoYm1kbGMxeHVJQ0FnSUNBZ1kzVnlVbUZ1WjJVdWNIVnphQ2d1TGk0Z2JHbHVaWE11YldGd0tHWjFibU4wYVc5dUtHVnVkSEo1S1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlBb1kzVnljbVZ1ZEM1aFpHUmxaQ0EvSUNjckp5QTZJQ2N0SnlrZ0t5QmxiblJ5ZVR0Y2JpQWdJQ0FnSUgwcEtUdGNibHh1SUNBZ0lDQWdMeThnVkhKaFkyc2dkR2hsSUhWd1pHRjBaV1FnWm1sc1pTQndiM05wZEdsdmJseHVJQ0FnSUNBZ2FXWWdLR04xY25KbGJuUXVZV1JrWldRcElIdGNiaUFnSUNBZ0lDQWdibVYzVEdsdVpTQXJQU0JzYVc1bGN5NXNaVzVuZEdnN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCdmJHUk1hVzVsSUNzOUlHeHBibVZ6TG14bGJtZDBhRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0x5OGdTV1JsYm5ScFkyRnNJR052Ym5SbGVIUWdiR2x1WlhNdUlGUnlZV05ySUd4cGJtVWdZMmhoYm1kbGMxeHVJQ0FnSUNBZ2FXWWdLRzlzWkZKaGJtZGxVM1JoY25RcElIdGNiaUFnSUNBZ0lDQWdMeThnUTJ4dmMyVWdiM1YwSUdGdWVTQmphR0Z1WjJWeklIUm9ZWFFnYUdGMlpTQmlaV1Z1SUc5MWRIQjFkQ0FvYjNJZ2FtOXBiaUJ2ZG1WeWJHRndjR2x1WnlsY2JpQWdJQ0FnSUNBZ2FXWWdLR3hwYm1WekxteGxibWQwYUNBOFBTQnZjSFJwYjI1ekxtTnZiblJsZUhRZ0tpQXlJQ1ltSUdrZ1BDQmthV1ptTG14bGJtZDBhQ0F0SURJcElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCUGRtVnliR0Z3Y0dsdVoxeHVJQ0FnSUNBZ0lDQWdJR04xY2xKaGJtZGxMbkIxYzJnb0xpNHVJR052Ym5SbGVIUk1hVzVsY3loc2FXNWxjeWtwTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDOHZJR1Z1WkNCMGFHVWdjbUZ1WjJVZ1lXNWtJRzkxZEhCMWRGeHVJQ0FnSUNBZ0lDQWdJR3hsZENCamIyNTBaWGgwVTJsNlpTQTlJRTFoZEdndWJXbHVLR3hwYm1WekxteGxibWQwYUN3Z2IzQjBhVzl1Y3k1amIyNTBaWGgwS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpkWEpTWVc1blpTNXdkWE5vS0M0dUxpQmpiMjUwWlhoMFRHbHVaWE1vYkdsdVpYTXVjMnhwWTJVb01Dd2dZMjl1ZEdWNGRGTnBlbVVwS1NrN1hHNWNiaUFnSUNBZ0lDQWdJQ0JzWlhRZ2FIVnVheUE5SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzlzWkZOMFlYSjBPaUJ2YkdSU1lXNW5aVk4wWVhKMExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYjJ4a1RHbHVaWE02SUNodmJHUk1hVzVsSUMwZ2IyeGtVbUZ1WjJWVGRHRnlkQ0FySUdOdmJuUmxlSFJUYVhwbEtTeGNiaUFnSUNBZ0lDQWdJQ0FnSUc1bGQxTjBZWEowT2lCdVpYZFNZVzVuWlZOMFlYSjBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JtVjNUR2x1WlhNNklDaHVaWGRNYVc1bElDMGdibVYzVW1GdVoyVlRkR0Z5ZENBcklHTnZiblJsZUhSVGFYcGxLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHeHBibVZ6T2lCamRYSlNZVzVuWlZ4dUlDQWdJQ0FnSUNBZ0lIMDdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHa2dQajBnWkdsbVppNXNaVzVuZEdnZ0xTQXlJQ1ltSUd4cGJtVnpMbXhsYm1kMGFDQThQU0J2Y0hScGIyNXpMbU52Ym5SbGVIUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJRVZQUmlCcGN5QnBibk5wWkdVZ2RHaHBjeUJvZFc1clhHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2IyeGtSVTlHVG1WM2JHbHVaU0E5SUNndlhGeHVKQzh1ZEdWemRDaHZiR1JUZEhJcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnVaWGRGVDBaT1pYZHNhVzVsSUQwZ0tDOWNYRzRrTHk1MFpYTjBLRzVsZDFOMGNpa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR3hwYm1WekxteGxibWQwYUNBOVBTQXdJQ1ltSUNGdmJHUkZUMFpPWlhkc2FXNWxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUhOd1pXTnBZV3dnWTJGelpUb2diMnhrSUdoaGN5QnVieUJsYjJ3Z1lXNWtJRzV2SUhSeVlXbHNhVzVuSUdOdmJuUmxlSFE3SUc1dkxXNXNJR05oYmlCbGJtUWdkWEFnWW1WbWIzSmxJR0ZrWkhOY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTNWeVVtRnVaMlV1YzNCc2FXTmxLR2gxYm1zdWIyeGtUR2x1WlhNc0lEQXNJQ2RjWEZ4Y0lFNXZJRzVsZDJ4cGJtVWdZWFFnWlc1a0lHOW1JR1pwYkdVbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb0lXOXNaRVZQUms1bGQyeHBibVVnZkh3Z0lXNWxkMFZQUms1bGQyeHBibVVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTNWeVVtRnVaMlV1Y0hWemFDZ25YRnhjWENCT2J5QnVaWGRzYVc1bElHRjBJR1Z1WkNCdlppQm1hV3hsSnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJR2gxYm10ekxuQjFjMmdvYUhWdWF5azdYRzVjYmlBZ0lDQWdJQ0FnSUNCdmJHUlNZVzVuWlZOMFlYSjBJRDBnTUR0Y2JpQWdJQ0FnSUNBZ0lDQnVaWGRTWVc1blpWTjBZWEowSUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0JqZFhKU1lXNW5aU0E5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnZiR1JNYVc1bElDczlJR3hwYm1WekxteGxibWQwYUR0Y2JpQWdJQ0FnSUc1bGQweHBibVVnS3owZ2JHbHVaWE11YkdWdVozUm9PMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ2IyeGtSbWxzWlU1aGJXVTZJRzlzWkVacGJHVk9ZVzFsTENCdVpYZEdhV3hsVG1GdFpUb2dibVYzUm1sc1pVNWhiV1VzWEc0Z0lDQWdiMnhrU0dWaFpHVnlPaUJ2YkdSSVpXRmtaWElzSUc1bGQwaGxZV1JsY2pvZ2JtVjNTR1ZoWkdWeUxGeHVJQ0FnSUdoMWJtdHpPaUJvZFc1cmMxeHVJQ0I5TzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZM0psWVhSbFZIZHZSbWxzWlhOUVlYUmphQ2h2YkdSR2FXeGxUbUZ0WlN3Z2JtVjNSbWxzWlU1aGJXVXNJRzlzWkZOMGNpd2dibVYzVTNSeUxDQnZiR1JJWldGa1pYSXNJRzVsZDBobFlXUmxjaXdnYjNCMGFXOXVjeWtnZTF4dUlDQmpiMjV6ZENCa2FXWm1JRDBnYzNSeWRXTjBkWEpsWkZCaGRHTm9LRzlzWkVacGJHVk9ZVzFsTENCdVpYZEdhV3hsVG1GdFpTd2diMnhrVTNSeUxDQnVaWGRUZEhJc0lHOXNaRWhsWVdSbGNpd2dibVYzU0dWaFpHVnlMQ0J2Y0hScGIyNXpLVHRjYmx4dUlDQmpiMjV6ZENCeVpYUWdQU0JiWFR0Y2JpQWdhV1lnS0c5c1pFWnBiR1ZPWVcxbElEMDlJRzVsZDBacGJHVk9ZVzFsS1NCN1hHNGdJQ0FnY21WMExuQjFjMmdvSjBsdVpHVjRPaUFuSUNzZ2IyeGtSbWxzWlU1aGJXVXBPMXh1SUNCOVhHNGdJSEpsZEM1d2RYTm9LQ2M5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOUp5azdYRzRnSUhKbGRDNXdkWE5vS0NjdExTMGdKeUFySUdScFptWXViMnhrUm1sc1pVNWhiV1VnS3lBb2RIbHdaVzltSUdScFptWXViMnhrU0dWaFpHVnlJRDA5UFNBbmRXNWtaV1pwYm1Wa0p5QS9JQ2NuSURvZ0oxeGNkQ2NnS3lCa2FXWm1MbTlzWkVobFlXUmxjaWtwTzF4dUlDQnlaWFF1Y0hWemFDZ25LeXNySUNjZ0t5QmthV1ptTG01bGQwWnBiR1ZPWVcxbElDc2dLSFI1Y0dWdlppQmthV1ptTG01bGQwaGxZV1JsY2lBOVBUMGdKM1Z1WkdWbWFXNWxaQ2NnUHlBbkp5QTZJQ2RjWEhRbklDc2daR2xtWmk1dVpYZElaV0ZrWlhJcEtUdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHUnBabVl1YUhWdWEzTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0JqYjI1emRDQm9kVzVySUQwZ1pHbG1aaTVvZFc1cmMxdHBYVHRjYmlBZ0lDQnlaWFF1Y0hWemFDaGNiaUFnSUNBZ0lDZEFRQ0F0SnlBcklHaDFibXN1YjJ4a1UzUmhjblFnS3lBbkxDY2dLeUJvZFc1ckxtOXNaRXhwYm1WelhHNGdJQ0FnSUNBcklDY2dLeWNnS3lCb2RXNXJMbTVsZDFOMFlYSjBJQ3NnSnl3bklDc2dhSFZ1YXk1dVpYZE1hVzVsYzF4dUlDQWdJQ0FnS3lBbklFQkFKMXh1SUNBZ0lDazdYRzRnSUNBZ2NtVjBMbkIxYzJndVlYQndiSGtvY21WMExDQm9kVzVyTG14cGJtVnpLVHRjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJ5WlhRdWFtOXBiaWduWEZ4dUp5a2dLeUFuWEZ4dUp6dGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdOeVpXRjBaVkJoZEdOb0tHWnBiR1ZPWVcxbExDQnZiR1JUZEhJc0lHNWxkMU4wY2l3Z2IyeGtTR1ZoWkdWeUxDQnVaWGRJWldGa1pYSXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ2NtVjBkWEp1SUdOeVpXRjBaVlIzYjBacGJHVnpVR0YwWTJnb1ptbHNaVTVoYldVc0lHWnBiR1ZPWVcxbExDQnZiR1JUZEhJc0lHNWxkMU4wY2l3Z2IyeGtTR1ZoWkdWeUxDQnVaWGRJWldGa1pYSXNJRzl3ZEdsdmJuTXBPMXh1ZlZ4dUlsMTlcblxuXG4vKioqLyB9KSxcbi8qIDE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL1widXNlIHN0cmljdFwiO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovYXJyYXlFcXVhbCA9IGFycmF5RXF1YWw7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2FycmF5U3RhcnRzV2l0aCA9IGFycmF5U3RhcnRzV2l0aDtcblx0ZnVuY3Rpb24gYXJyYXlFcXVhbChhLCBiKSB7XG5cdCAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuXHQgICAgcmV0dXJuIGZhbHNlO1xuXHQgIH1cblxuXHQgIHJldHVybiBhcnJheVN0YXJ0c1dpdGgoYSwgYik7XG5cdH1cblxuXHRmdW5jdGlvbiBhcnJheVN0YXJ0c1dpdGgoYXJyYXksIHN0YXJ0KSB7XG5cdCAgaWYgKHN0YXJ0Lmxlbmd0aCA+IGFycmF5Lmxlbmd0aCkge1xuXHQgICAgcmV0dXJuIGZhbHNlO1xuXHQgIH1cblxuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhcnQubGVuZ3RoOyBpKyspIHtcblx0ICAgIGlmIChzdGFydFtpXSAhPT0gYXJyYXlbaV0pIHtcblx0ICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiB0cnVlO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OTFkR2xzTDJGeWNtRjVMbXB6SWwwc0ltNWhiV1Z6SWpwYkltRnljbUY1UlhGMVlXd2lMQ0poY25KaGVWTjBZWEowYzFkcGRHZ2lMQ0poSWl3aVlpSXNJbXhsYm1kMGFDSXNJbUZ5Y21GNUlpd2ljM1JoY25RaUxDSnBJbDBzSW0xaGNIQnBibWR6SWpvaU96czdaME5CUVdkQ1FTeFZMRWRCUVVGQkxGVTdlVVJCVVVGRExHVXNSMEZCUVVFc1pUdEJRVkpVTEZOQlFWTkVMRlZCUVZRc1EwRkJiMEpGTEVOQlFYQkNMRVZCUVhWQ1F5eERRVUYyUWl4RlFVRXdRanRCUVVNdlFpeE5RVUZKUkN4RlFVRkZSU3hOUVVGR0xFdEJRV0ZFTEVWQlFVVkRMRTFCUVc1Q0xFVkJRVEpDTzBGQlEzcENMRmRCUVU4c1MwRkJVRHRCUVVORU96dEJRVVZFTEZOQlFVOUlMR2RDUVVGblFrTXNRMEZCYUVJc1JVRkJiVUpETEVOQlFXNUNMRU5CUVZBN1FVRkRSRHM3UVVGRlRTeFRRVUZUUml4bFFVRlVMRU5CUVhsQ1NTeExRVUY2UWl4RlFVRm5RME1zUzBGQmFFTXNSVUZCZFVNN1FVRkROVU1zVFVGQlNVRXNUVUZCVFVZc1RVRkJUaXhIUVVGbFF5eE5RVUZOUkN4TlFVRjZRaXhGUVVGcFF6dEJRVU12UWl4WFFVRlBMRXRCUVZBN1FVRkRSRHM3UVVGRlJDeFBRVUZMTEVsQlFVbEhMRWxCUVVrc1EwRkJZaXhGUVVGblFrRXNTVUZCU1VRc1RVRkJUVVlzVFVGQk1VSXNSVUZCYTBOSExFZEJRV3hETEVWQlFYVkRPMEZCUTNKRExGRkJRVWxFTEUxQlFVMURMRU5CUVU0c1RVRkJZVVlzVFVGQlRVVXNRMEZCVGl4RFFVRnFRaXhGUVVFeVFqdEJRVU42UWl4aFFVRlBMRXRCUVZBN1FVRkRSRHRCUVVOR096dEJRVVZFTEZOQlFVOHNTVUZCVUR0QlFVTkVJaXdpWm1sc1pTSTZJbUZ5Y21GNUxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJR1oxYm1OMGFXOXVJR0Z5Y21GNVJYRjFZV3dvWVN3Z1lpa2dlMXh1SUNCcFppQW9ZUzVzWlc1bmRHZ2dJVDA5SUdJdWJHVnVaM1JvS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHRnljbUY1VTNSaGNuUnpWMmwwYUNoaExDQmlLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHRnljbUY1VTNSaGNuUnpWMmwwYUNoaGNuSmhlU3dnYzNSaGNuUXBJSHRjYmlBZ2FXWWdLSE4wWVhKMExteGxibWQwYUNBK0lHRnljbUY1TG14bGJtZDBhQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdmVnh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2djM1JoY25RdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQnBaaUFvYzNSaGNuUmJhVjBnSVQwOUlHRnljbUY1VzJsZEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJSFJ5ZFdVN1hHNTlYRzRpWFgwPVxuXG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovXCJ1c2Ugc3RyaWN0XCI7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jb252ZXJ0Q2hhbmdlc1RvRE1QID0gY29udmVydENoYW5nZXNUb0RNUDtcblx0Ly8gU2VlOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWRpZmYtbWF0Y2gtcGF0Y2gvd2lraS9BUElcblx0ZnVuY3Rpb24gY29udmVydENoYW5nZXNUb0RNUChjaGFuZ2VzKSB7XG5cdCAgdmFyIHJldCA9IFtdLFxuXHQgICAgICBjaGFuZ2UgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdm9pZCAwIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLFxuXHQgICAgICBvcGVyYXRpb24gPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdm9pZCAwIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgY2hhbmdlID0gY2hhbmdlc1tpXTtcblx0ICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcblx0ICAgICAgb3BlcmF0aW9uID0gMTtcblx0ICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcblx0ICAgICAgb3BlcmF0aW9uID0gLTE7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBvcGVyYXRpb24gPSAwO1xuXHQgICAgfVxuXG5cdCAgICByZXQucHVzaChbb3BlcmF0aW9uLCBjaGFuZ2UudmFsdWVdKTtcblx0ICB9XG5cdCAgcmV0dXJuIHJldDtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlqYjI1MlpYSjBMMlJ0Y0M1cWN5SmRMQ0p1WVcxbGN5STZXeUpqYjI1MlpYSjBRMmhoYm1kbGMxUnZSRTFRSWl3aVkyaGhibWRsY3lJc0luSmxkQ0lzSW1Ob1lXNW5aU0lzSW05d1pYSmhkR2x2YmlJc0lta2lMQ0pzWlc1bmRHZ2lMQ0poWkdSbFpDSXNJbkpsYlc5MlpXUWlMQ0p3ZFhOb0lpd2lkbUZzZFdVaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3p0blEwRkRaMEpCTEcxQ0xFZEJRVUZCTEcxQ08wRkJSR2hDTzBGQlEwOHNVMEZCVTBFc2JVSkJRVlFzUTBGQk5rSkRMRTlCUVRkQ0xFVkJRWE5ETzBGQlF6TkRMRTFCUVVsRExFMUJRVTBzUlVGQlZqdEJRVUZCTEUxQlEwbERMSGREUVVSS08wRkJRVUVzVFVGRlNVTXNNa05CUmtvN1FVRkhRU3hQUVVGTExFbEJRVWxETEVsQlFVa3NRMEZCWWl4RlFVRm5Ra0VzU1VGQlNVb3NVVUZCVVVzc1RVRkJOVUlzUlVGQmIwTkVMRWRCUVhCRExFVkJRWGxETzBGQlEzWkRSaXhoUVVGVFJpeFJRVUZSU1N4RFFVRlNMRU5CUVZRN1FVRkRRU3hSUVVGSlJpeFBRVUZQU1N4TFFVRllMRVZCUVd0Q08wRkJRMmhDU0N4clFrRkJXU3hEUVVGYU8wRkJRMFFzUzBGR1JDeE5RVVZQTEVsQlFVbEVMRTlCUVU5TExFOUJRVmdzUlVGQmIwSTdRVUZEZWtKS0xHdENRVUZaTEVOQlFVTXNRMEZCWWp0QlFVTkVMRXRCUmswc1RVRkZRVHRCUVVOTVFTeHJRa0ZCV1N4RFFVRmFPMEZCUTBRN08wRkJSVVJHTEZGQlFVbFBMRWxCUVVvc1EwRkJVeXhEUVVGRFRDeFRRVUZFTEVWQlFWbEVMRTlCUVU5UExFdEJRVzVDTEVOQlFWUTdRVUZEUkR0QlFVTkVMRk5CUVU5U0xFZEJRVkE3UVVGRFJDSXNJbVpwYkdVaU9pSmtiWEF1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZMeUJUWldVNklHaDBkSEE2THk5amIyUmxMbWR2YjJkc1pTNWpiMjB2Y0M5bmIyOW5iR1V0WkdsbVppMXRZWFJqYUMxd1lYUmphQzkzYVd0cEwwRlFTVnh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR052Ym5abGNuUkRhR0Z1WjJWelZHOUVUVkFvWTJoaGJtZGxjeWtnZTF4dUlDQnNaWFFnY21WMElEMGdXMTBzWEc0Z0lDQWdJQ0JqYUdGdVoyVXNYRzRnSUNBZ0lDQnZjR1Z5WVhScGIyNDdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1kyaGhibWRsY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHTm9ZVzVuWlNBOUlHTm9ZVzVuWlhOYmFWMDdYRzRnSUNBZ2FXWWdLR05vWVc1blpTNWhaR1JsWkNrZ2UxeHVJQ0FnSUNBZ2IzQmxjbUYwYVc5dUlEMGdNVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR05vWVc1blpTNXlaVzF2ZG1Wa0tTQjdYRzRnSUNBZ0lDQnZjR1Z5WVhScGIyNGdQU0F0TVR0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdiM0JsY21GMGFXOXVJRDBnTUR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhRdWNIVnphQ2hiYjNCbGNtRjBhVzl1TENCamFHRnVaMlV1ZG1Gc2RXVmRLVHRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdjbVYwTzF4dWZWeHVJbDE5XG5cblxuLyoqKi8gfSksXG4vKiAxNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jb252ZXJ0Q2hhbmdlc1RvWE1MID0gY29udmVydENoYW5nZXNUb1hNTDtcblx0ZnVuY3Rpb24gY29udmVydENoYW5nZXNUb1hNTChjaGFuZ2VzKSB7XG5cdCAgdmFyIHJldCA9IFtdO1xuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbaV07XG5cdCAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG5cdCAgICAgIHJldC5wdXNoKCc8aW5zPicpO1xuXHQgICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuXHQgICAgICByZXQucHVzaCgnPGRlbD4nKTtcblx0ICAgIH1cblxuXHQgICAgcmV0LnB1c2goZXNjYXBlSFRNTChjaGFuZ2UudmFsdWUpKTtcblxuXHQgICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuXHQgICAgICByZXQucHVzaCgnPC9pbnM+Jyk7XG5cdCAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG5cdCAgICAgIHJldC5wdXNoKCc8L2RlbD4nKTtcblx0ICAgIH1cblx0ICB9XG5cdCAgcmV0dXJuIHJldC5qb2luKCcnKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGVzY2FwZUhUTUwocykge1xuXHQgIHZhciBuID0gcztcblx0ICBuID0gbi5yZXBsYWNlKC8mL2csICcmYW1wOycpO1xuXHQgIG4gPSBuLnJlcGxhY2UoLzwvZywgJyZsdDsnKTtcblx0ICBuID0gbi5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG5cdCAgbiA9IG4ucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xuXG5cdCAgcmV0dXJuIG47XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5amIyNTJaWEowTDNodGJDNXFjeUpkTENKdVlXMWxjeUk2V3lKamIyNTJaWEowUTJoaGJtZGxjMVJ2V0UxTUlpd2lZMmhoYm1kbGN5SXNJbkpsZENJc0lta2lMQ0pzWlc1bmRHZ2lMQ0pqYUdGdVoyVWlMQ0poWkdSbFpDSXNJbkIxYzJnaUxDSnlaVzF2ZG1Wa0lpd2laWE5qWVhCbFNGUk5UQ0lzSW5aaGJIVmxJaXdpYW05cGJpSXNJbk1pTENKdUlpd2ljbVZ3YkdGalpTSmRMQ0p0WVhCd2FXNW5jeUk2SWpzN08yZERRVUZuUWtFc2JVSXNSMEZCUVVFc2JVSTdRVUZCVkN4VFFVRlRRU3h0UWtGQlZDeERRVUUyUWtNc1QwRkJOMElzUlVGQmMwTTdRVUZETTBNc1RVRkJTVU1zVFVGQlRTeEZRVUZXTzBGQlEwRXNUMEZCU3l4SlFVRkpReXhKUVVGSkxFTkJRV0lzUlVGQlowSkJMRWxCUVVsR0xGRkJRVkZITEUxQlFUVkNMRVZCUVc5RFJDeEhRVUZ3UXl4RlFVRjVRenRCUVVOMlF5eFJRVUZKUlN4VFFVRlRTaXhSUVVGUlJTeERRVUZTTEVOQlFXSTdRVUZEUVN4UlFVRkpSU3hQUVVGUFF5eExRVUZZTEVWQlFXdENPMEZCUTJoQ1NpeFZRVUZKU3l4SlFVRktMRU5CUVZNc1QwRkJWRHRCUVVORUxFdEJSa1FzVFVGRlR5eEpRVUZKUml4UFFVRlBSeXhQUVVGWUxFVkJRVzlDTzBGQlEzcENUaXhWUVVGSlN5eEpRVUZLTEVOQlFWTXNUMEZCVkR0QlFVTkVPenRCUVVWRVRDeFJRVUZKU3l4SlFVRktMRU5CUVZORkxGZEJRVmRLTEU5QlFVOUxMRXRCUVd4Q0xFTkJRVlE3TzBGQlJVRXNVVUZCU1V3c1QwRkJUME1zUzBGQldDeEZRVUZyUWp0QlFVTm9Ra29zVlVGQlNVc3NTVUZCU2l4RFFVRlRMRkZCUVZRN1FVRkRSQ3hMUVVaRUxFMUJSVThzU1VGQlNVWXNUMEZCVDBjc1QwRkJXQ3hGUVVGdlFqdEJRVU42UWs0c1ZVRkJTVXNzU1VGQlNpeERRVUZUTEZGQlFWUTdRVUZEUkR0QlFVTkdPMEZCUTBRc1UwRkJUMHdzU1VGQlNWTXNTVUZCU2l4RFFVRlRMRVZCUVZRc1EwRkJVRHRCUVVORU96dEJRVVZFTEZOQlFWTkdMRlZCUVZRc1EwRkJiMEpITEVOQlFYQkNMRVZCUVhWQ08wRkJRM0pDTEUxQlFVbERMRWxCUVVsRUxFTkJRVkk3UVVGRFFVTXNUVUZCU1VFc1JVRkJSVU1zVDBGQlJpeERRVUZWTEVsQlFWWXNSVUZCWjBJc1QwRkJhRUlzUTBGQlNqdEJRVU5CUkN4TlFVRkpRU3hGUVVGRlF5eFBRVUZHTEVOQlFWVXNTVUZCVml4RlFVRm5RaXhOUVVGb1FpeERRVUZLTzBGQlEwRkVMRTFCUVVsQkxFVkJRVVZETEU5QlFVWXNRMEZCVlN4SlFVRldMRVZCUVdkQ0xFMUJRV2hDTEVOQlFVbzdRVUZEUVVRc1RVRkJTVUVzUlVGQlJVTXNUMEZCUml4RFFVRlZMRWxCUVZZc1JVRkJaMElzVVVGQmFFSXNRMEZCU2pzN1FVRkZRU3hUUVVGUFJDeERRVUZRTzBGQlEwUWlMQ0ptYVd4bElqb2llRzFzTG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2laWGh3YjNKMElHWjFibU4wYVc5dUlHTnZiblpsY25SRGFHRnVaMlZ6Vkc5WVRVd29ZMmhoYm1kbGN5a2dlMXh1SUNCc1pYUWdjbVYwSUQwZ1cxMDdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1kyaGhibWRsY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHeGxkQ0JqYUdGdVoyVWdQU0JqYUdGdVoyVnpXMmxkTzF4dUlDQWdJR2xtSUNoamFHRnVaMlV1WVdSa1pXUXBJSHRjYmlBZ0lDQWdJSEpsZEM1d2RYTm9LQ2M4YVc1elBpY3BPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9ZMmhoYm1kbExuSmxiVzkyWldRcElIdGNiaUFnSUNBZ0lISmxkQzV3ZFhOb0tDYzhaR1ZzUGljcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRDNXdkWE5vS0dWelkyRndaVWhVVFV3b1kyaGhibWRsTG5aaGJIVmxLU2s3WEc1Y2JpQWdJQ0JwWmlBb1kyaGhibWRsTG1Ga1pHVmtLU0I3WEc0Z0lDQWdJQ0J5WlhRdWNIVnphQ2duUEM5cGJuTStKeWs3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2hqYUdGdVoyVXVjbVZ0YjNabFpDa2dlMXh1SUNBZ0lDQWdjbVYwTG5CMWMyZ29Kend2WkdWc1BpY3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2NtVjBMbXB2YVc0b0p5Y3BPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmxjMk5oY0dWSVZFMU1LSE1wSUh0Y2JpQWdiR1YwSUc0Z1BTQnpPMXh1SUNCdUlEMGdiaTV5WlhCc1lXTmxLQzhtTDJjc0lDY21ZVzF3T3ljcE8xeHVJQ0J1SUQwZ2JpNXlaWEJzWVdObEtDODhMMmNzSUNjbWJIUTdKeWs3WEc0Z0lHNGdQU0J1TG5KbGNHeGhZMlVvTHo0dlp5d2dKeVpuZERzbktUdGNiaUFnYmlBOUlHNHVjbVZ3YkdGalpTZ3ZYQ0l2Wnl3Z0p5WnhkVzkwT3ljcE8xeHVYRzRnSUhKbGRIVnliaUJ1TzF4dWZWeHVJbDE5XG5cblxuLyoqKi8gfSlcbi8qKioqKiovIF0pXG59KTtcbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9kaWZmL2Rpc3QvZGlmZi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvZGlmZi9kaXN0L2RpZmYuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHJlZ2lzdGVySW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBDYWxsYmFjayBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG5ldyBGdW5jdGlvbihcIlwiICsgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgLy8gQ29weSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgYW5kIHJlZ2lzdGVyIHRoZSB0YXNrXG4gICAgICB2YXIgdGFzayA9IHsgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzIH07XG4gICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gdGFzaztcbiAgICAgIHJlZ2lzdGVySW1tZWRpYXRlKG5leHRIYW5kbGUpO1xuICAgICAgcmV0dXJuIG5leHRIYW5kbGUrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odGFzaykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXNrLmNhbGxiYWNrO1xuICAgICAgICB2YXIgYXJncyA9IHRhc2suYXJncztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bih0YXNrKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBydW5JZlByZXNlbnQoaGFuZGxlKTsgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIFRoZSB0ZXN0IGFnYWluc3QgYGltcG9ydFNjcmlwdHNgIHByZXZlbnRzIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBiZWluZyBpbnN0YWxsZWQgaW5zaWRlIGEgd2ViIHdvcmtlcixcbiAgICAgICAgLy8gd2hlcmUgYGdsb2JhbC5wb3N0TWVzc2FnZWAgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZCBjYW4ndCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIGlmIChnbG9iYWwucG9zdE1lc3NhZ2UgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICB2YXIgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gZ2xvYmFsLm9ubWVzc2FnZTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKFwiXCIsIFwiKlwiKTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICAvLyBJbnN0YWxscyBhbiBldmVudCBoYW5kbGVyIG9uIGBnbG9iYWxgIGZvciB0aGUgYG1lc3NhZ2VgIGV2ZW50OiBzZWVcbiAgICAgICAgLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93LnBvc3RNZXNzYWdlXG4gICAgICAgIC8vICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbXMuaHRtbCNjcm9zc0RvY3VtZW50TWVzc2FnZXNcblxuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9IFwic2V0SW1tZWRpYXRlJFwiICsgTWF0aC5yYW5kb20oKSArIFwiJFwiO1xuICAgICAgICB2YXIgb25HbG9iYWxNZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KCtldmVudC5kYXRhLnNsaWNlKG1lc3NhZ2VQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHN1cHBvcnRlZCwgd2Ugc2hvdWxkIGF0dGFjaCB0byB0aGUgcHJvdG90eXBlIG9mIGdsb2JhbCwgc2luY2UgdGhhdCBpcyB3aGVyZSBzZXRUaW1lb3V0IGV0IGFsLiBsaXZlLlxuICAgIHZhciBhdHRhY2hUbyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTtcbiAgICBhdHRhY2hUbyA9IGF0dGFjaFRvICYmIGF0dGFjaFRvLnNldFRpbWVvdXQgPyBhdHRhY2hUbyA6IGdsb2JhbDtcblxuICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICBpZiAoe30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2VzcykgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiKSB7XG4gICAgICAgIC8vIEZvciBOb2RlLmpzIGJlZm9yZSAwLjlcbiAgICAgICAgaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAvLyBGb3Igbm9uLUlFMTAgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3Igd2ViIHdvcmtlcnMsIHdoZXJlIHN1cHBvcnRlZFxuICAgICAgICBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChkb2MgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xuICAgICAgICAvLyBGb3IgSUUgNuKAkzhcbiAgICAgICAgaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKTtcbiAgICB9XG5cbiAgICBhdHRhY2hUby5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG4gICAgYXR0YWNoVG8uY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcbn0odHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyB0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IGdsb2JhbCA6IHNlbGYpKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldEVsZW1lbnQgPSAoZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vID0ge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG5cdFx0aWYgKHR5cGVvZiBtZW1vW3NlbGVjdG9yXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dmFyIHN0eWxlVGFyZ2V0ID0gZm4uY2FsbCh0aGlzLCBzZWxlY3Rvcik7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcblx0XHRcdFx0XHQvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuXHRcdFx0XHRcdHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG5cdFx0XHRcdH0gY2F0Y2goZSkge1xuXHRcdFx0XHRcdHN0eWxlVGFyZ2V0ID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bWVtb1tzZWxlY3Rvcl0gPSBzdHlsZVRhcmdldDtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbW9bc2VsZWN0b3JdXG5cdH07XG59KShmdW5jdGlvbiAodGFyZ2V0KSB7XG5cdHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldClcbn0pO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbikgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgPGhlYWQ+IGVsZW1lbnRcblx0aWYgKCFvcHRpb25zLmluc2VydEludG8pIG9wdGlvbnMuaW5zZXJ0SW50byA9IFwiaGVhZFwiO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFyZ2V0XG5cdGlmICghb3B0aW9ucy5pbnNlcnRBdCkgb3B0aW9ucy5pbnNlcnRBdCA9IFwiYm90dG9tXCI7XG5cblx0dmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhsaXN0LCBvcHRpb25zKTtcblxuXHRhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcblx0XHR2YXIgbWF5UmVtb3ZlID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdFx0ZG9tU3R5bGUucmVmcy0tO1xuXHRcdFx0bWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpO1xuXHRcdH1cblxuXHRcdGlmKG5ld0xpc3QpIHtcblx0XHRcdHZhciBuZXdTdHlsZXMgPSBsaXN0VG9TdHlsZXMobmV3TGlzdCwgb3B0aW9ucyk7XG5cdFx0XHRhZGRTdHlsZXNUb0RvbShuZXdTdHlsZXMsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV07XG5cblx0XHRcdGlmKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykgZG9tU3R5bGUucGFydHNbal0oKTtcblxuXHRcdFx0XHRkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn07XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMsIG9wdGlvbnMpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdGlmKGRvbVN0eWxlKSB7XG5cdFx0XHRkb21TdHlsZS5yZWZzKys7XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBwYXJ0cyA9IFtdO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblxuXHRcdFx0c3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7aWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0c307XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAobGlzdCwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGVzID0gW107XG5cdHZhciBuZXdTdHlsZXMgPSB7fTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IGxpc3RbaV07XG5cdFx0dmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG5cdFx0dmFyIGNzcyA9IGl0ZW1bMV07XG5cdFx0dmFyIG1lZGlhID0gaXRlbVsyXTtcblx0XHR2YXIgc291cmNlTWFwID0gaXRlbVszXTtcblx0XHR2YXIgcGFydCA9IHtjc3M6IGNzcywgbWVkaWE6IG1lZGlhLCBzb3VyY2VNYXA6IHNvdXJjZU1hcH07XG5cblx0XHRpZighbmV3U3R5bGVzW2lkXSkgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHtpZDogaWQsIHBhcnRzOiBbcGFydF19KTtcblx0XHRlbHNlIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KTtcblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudCAob3B0aW9ucywgc3R5bGUpIHtcblx0dmFyIHRhcmdldCA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvKVxuXG5cdGlmICghdGFyZ2V0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnRJbnRvJyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG5cdH1cblxuXHR2YXIgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AgPSBzdHlsZXNJbnNlcnRlZEF0VG9wW3N0eWxlc0luc2VydGVkQXRUb3AubGVuZ3RoIC0gMV07XG5cblx0aWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwidG9wXCIpIHtcblx0XHRpZiAoIWxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCB0YXJnZXQuZmlyc3RDaGlsZCk7XG5cdFx0fSBlbHNlIGlmIChsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZykge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHRcdH1cblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnB1c2goc3R5bGUpO1xuXHR9IGVsc2UgaWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwiYm90dG9tXCIpIHtcblx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydEF0ID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKSB7XG5cdFx0dmFyIG5leHRTaWJsaW5nID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8gKyBcIiBcIiArIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKTtcblx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBuZXh0U2libGluZyk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiW1N0eWxlIExvYWRlcl1cXG5cXG4gSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICdpbnNlcnRBdCcgKCdvcHRpb25zLmluc2VydEF0JykgZm91bmQuXFxuIE11c3QgYmUgJ3RvcCcsICdib3R0b20nLCBvciBPYmplY3QuXFxuIChodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlciNpbnNlcnRhdClcXG5cIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50IChzdHlsZSkge1xuXHRpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlKTtcblxuXHR2YXIgaWR4ID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcC5pbmRleE9mKHN0eWxlKTtcblx0aWYoaWR4ID49IDApIHtcblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnNwbGljZShpZHgsIDEpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXG5cdGFkZEF0dHJzKHN0eWxlLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIHN0eWxlKTtcblxuXHRyZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGUsIHVwZGF0ZSwgcmVtb3ZlLCByZXN1bHQ7XG5cblx0Ly8gSWYgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gd2FzIGRlZmluZWQsIHJ1biBpdCBvbiB0aGUgY3NzXG5cdGlmIChvcHRpb25zLnRyYW5zZm9ybSAmJiBvYmouY3NzKSB7XG5cdCAgICByZXN1bHQgPSBvcHRpb25zLnRyYW5zZm9ybShvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcbi8qKlxuICogV2hlbiBzb3VyY2UgbWFwcyBhcmUgZW5hYmxlZCwgYHN0eWxlLWxvYWRlcmAgdXNlcyBhIGxpbmsgZWxlbWVudCB3aXRoIGEgZGF0YS11cmkgdG9cbiAqIGVtYmVkIHRoZSBjc3Mgb24gdGhlIHBhZ2UuIFRoaXMgYnJlYWtzIGFsbCByZWxhdGl2ZSB1cmxzIGJlY2F1c2Ugbm93IHRoZXkgYXJlIHJlbGF0aXZlIHRvIGFcbiAqIGJ1bmRsZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHBhZ2UuXG4gKlxuICogT25lIHNvbHV0aW9uIGlzIHRvIG9ubHkgdXNlIGZ1bGwgdXJscywgYnV0IHRoYXQgbWF5IGJlIGltcG9zc2libGUuXG4gKlxuICogSW5zdGVhZCwgdGhpcyBmdW5jdGlvbiBcImZpeGVzXCIgdGhlIHJlbGF0aXZlIHVybHMgdG8gYmUgYWJzb2x1dGUgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHBhZ2UgbG9jYXRpb24uXG4gKlxuICogQSBydWRpbWVudGFyeSB0ZXN0IHN1aXRlIGlzIGxvY2F0ZWQgYXQgYHRlc3QvZml4VXJscy5qc2AgYW5kIGNhbiBiZSBydW4gdmlhIHRoZSBgbnBtIHRlc3RgIGNvbW1hbmQuXG4gKlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzcykge1xuICAvLyBnZXQgY3VycmVudCBsb2NhdGlvblxuICB2YXIgbG9jYXRpb24gPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5sb2NhdGlvbjtcblxuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZml4VXJscyByZXF1aXJlcyB3aW5kb3cubG9jYXRpb25cIik7XG4gIH1cblxuXHQvLyBibGFuayBvciBudWxsP1xuXHRpZiAoIWNzcyB8fCB0eXBlb2YgY3NzICE9PSBcInN0cmluZ1wiKSB7XG5cdCAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHZhciBiYXNlVXJsID0gbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0O1xuICB2YXIgY3VycmVudERpciA9IGJhc2VVcmwgKyBsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cXC9bXlxcL10qJC8sIFwiL1wiKTtcblxuXHQvLyBjb252ZXJ0IGVhY2ggdXJsKC4uLilcblx0Lypcblx0VGhpcyByZWd1bGFyIGV4cHJlc3Npb24gaXMganVzdCBhIHdheSB0byByZWN1cnNpdmVseSBtYXRjaCBicmFja2V0cyB3aXRoaW5cblx0YSBzdHJpbmcuXG5cblx0IC91cmxcXHMqXFwoICA9IE1hdGNoIG9uIHRoZSB3b3JkIFwidXJsXCIgd2l0aCBhbnkgd2hpdGVzcGFjZSBhZnRlciBpdCBhbmQgdGhlbiBhIHBhcmVuc1xuXHQgICAoICA9IFN0YXJ0IGEgY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgKD86ICA9IFN0YXJ0IGEgbm9uLWNhcHR1cmluZyBncm91cFxuXHQgICAgICAgICBbXikoXSAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgfCAgPSBPUlxuXHQgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKD86ICA9IFN0YXJ0IGFub3RoZXIgbm9uLWNhcHR1cmluZyBncm91cHNcblx0ICAgICAgICAgICAgICAgICBbXikoXSsgID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgfCAgPSBPUlxuXHQgICAgICAgICAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgICAgIFteKShdKiAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICBcXCkgID0gTWF0Y2ggYSBlbmQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICkgID0gRW5kIEdyb3VwXG4gICAgICAgICAgICAgICpcXCkgPSBNYXRjaCBhbnl0aGluZyBhbmQgdGhlbiBhIGNsb3NlIHBhcmVuc1xuICAgICAgICAgICkgID0gQ2xvc2Ugbm9uLWNhcHR1cmluZyBncm91cFxuICAgICAgICAgICogID0gTWF0Y2ggYW55dGhpbmdcbiAgICAgICApICA9IENsb3NlIGNhcHR1cmluZyBncm91cFxuXHQgXFwpICA9IE1hdGNoIGEgY2xvc2UgcGFyZW5zXG5cblx0IC9naSAgPSBHZXQgYWxsIG1hdGNoZXMsIG5vdCB0aGUgZmlyc3QuICBCZSBjYXNlIGluc2Vuc2l0aXZlLlxuXHQgKi9cblx0dmFyIGZpeGVkQ3NzID0gY3NzLnJlcGxhY2UoL3VybFxccypcXCgoKD86W14pKF18XFwoKD86W14pKF0rfFxcKFteKShdKlxcKSkqXFwpKSopXFwpL2dpLCBmdW5jdGlvbihmdWxsTWF0Y2gsIG9yaWdVcmwpIHtcblx0XHQvLyBzdHJpcCBxdW90ZXMgKGlmIHRoZXkgZXhpc3QpXG5cdFx0dmFyIHVucXVvdGVkT3JpZ1VybCA9IG9yaWdVcmxcblx0XHRcdC50cmltKClcblx0XHRcdC5yZXBsYWNlKC9eXCIoLiopXCIkLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pXG5cdFx0XHQucmVwbGFjZSgvXicoLiopJyQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSk7XG5cblx0XHQvLyBhbHJlYWR5IGEgZnVsbCB1cmw/IG5vIGNoYW5nZVxuXHRcdGlmICgvXigjfGRhdGE6fGh0dHA6XFwvXFwvfGh0dHBzOlxcL1xcL3xmaWxlOlxcL1xcL1xcLykvaS50ZXN0KHVucXVvdGVkT3JpZ1VybCkpIHtcblx0XHQgIHJldHVybiBmdWxsTWF0Y2g7XG5cdFx0fVxuXG5cdFx0Ly8gY29udmVydCB0aGUgdXJsIHRvIGEgZnVsbCB1cmxcblx0XHR2YXIgbmV3VXJsO1xuXG5cdFx0aWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiLy9cIikgPT09IDApIHtcblx0XHQgIFx0Ly9UT0RPOiBzaG91bGQgd2UgYWRkIHByb3RvY29sP1xuXHRcdFx0bmV3VXJsID0gdW5xdW90ZWRPcmlnVXJsO1xuXHRcdH0gZWxzZSBpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgYmFzZSB1cmxcblx0XHRcdG5ld1VybCA9IGJhc2VVcmwgKyB1bnF1b3RlZE9yaWdVcmw7IC8vIGFscmVhZHkgc3RhcnRzIHdpdGggJy8nXG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgZGlyZWN0b3J5XG5cdFx0XHRuZXdVcmwgPSBjdXJyZW50RGlyICsgdW5xdW90ZWRPcmlnVXJsLnJlcGxhY2UoL15cXC5cXC8vLCBcIlwiKTsgLy8gU3RyaXAgbGVhZGluZyAnLi8nXG5cdFx0fVxuXG5cdFx0Ly8gc2VuZCBiYWNrIHRoZSBmaXhlZCB1cmwoLi4uKVxuXHRcdHJldHVybiBcInVybChcIiArIEpTT04uc3RyaW5naWZ5KG5ld1VybCkgKyBcIilcIjtcblx0fSk7XG5cblx0Ly8gc2VuZCBiYWNrIHRoZSBmaXhlZCBjc3Ncblx0cmV0dXJuIGZpeGVkQ3NzO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsInZhciBzY29wZSA9ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmKSB8fFxuICAgICAgICAgICAgd2luZG93O1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsb3NlKCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwoc2NvcGUsIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBzZXRpbW1lZGlhdGUgYXR0YWNoZXMgaXRzZWxmIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG5yZXF1aXJlKFwic2V0aW1tZWRpYXRlXCIpO1xuLy8gT24gc29tZSBleG90aWMgZW52aXJvbm1lbnRzLCBpdCdzIG5vdCBjbGVhciB3aGljaCBvYmplY3QgYHNldGltbWVkaWF0ZWAgd2FzXG4vLyBhYmxlIHRvIGluc3RhbGwgb250by4gIFNlYXJjaCBlYWNoIHBvc3NpYmlsaXR5IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZVxuLy8gYHNldGltbWVkaWF0ZWAgbGlicmFyeS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLnNldEltbWVkaWF0ZSk7XG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuY2xlYXJJbW1lZGlhdGUpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IHlbb3BbMF0gJiAyID8gXCJyZXR1cm5cIiA6IG9wWzBdID8gXCJ0aHJvd1wiIDogXCJuZXh0XCJdKSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFswLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgZXhwb3J0cykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAoIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIGV4cG9ydHNbcF0gPSBtW3BdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyAgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKG9bbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH07IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl07XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsZXZhbCkoXCJ0aGlzXCIpO1xufSBjYXRjaChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpXG5cdFx0ZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIm51bGxcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbWVudS1pdGVtL01lbnVJdGVtLnRzIiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kZWNvcmF0b3ItbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEwLTMhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2xpYi9pbmRleC5qcz8/cG9zdGNzcyEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL21lbnVJdGVtLm0uY3NzXCIpO1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG4vLyBQcmVwYXJlIGNzc1RyYW5zZm9ybWF0aW9uXG52YXIgdHJhbnNmb3JtO1xuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG5cdC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG5cdGlmKCFjb250ZW50LmxvY2Fscykge1xuXHRcdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZGVjb3JhdG9yLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0xMC0zIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9saWIvaW5kZXguanM/P3Bvc3Rjc3MhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXIvaW5kZXguanM/dHlwZT1jc3MhLi9tZW51SXRlbS5tLmNzc1wiLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTAtMyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzPz9wb3N0Y3NzIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyL2luZGV4LmpzP3R5cGU9Y3NzIS4vbWVudUl0ZW0ubS5jc3NcIik7XG5cdFx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblx0XHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0XHR9KTtcblx0fVxuXHQvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL21lbnUtaXRlbS9tZW51SXRlbS5tLmNzc1xuLy8gbW9kdWxlIGlkID0gLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIm51bGxcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbWVudS9NZW51LnRzIiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kZWNvcmF0b3ItbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEwLTMhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2xpYi9pbmRleC5qcz8/cG9zdGNzcyEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL21lbnUubS5jc3NcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbi8vIFByZXBhcmUgY3NzVHJhbnNmb3JtYXRpb25cbnZhciB0cmFuc2Zvcm07XG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcblx0Ly8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3Ncblx0aWYoIWNvbnRlbnQubG9jYWxzKSB7XG5cdFx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kZWNvcmF0b3ItbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEwLTMhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2xpYi9pbmRleC5qcz8/cG9zdGNzcyEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL21lbnUubS5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kZWNvcmF0b3ItbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEwLTMhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2xpYi9pbmRleC5qcz8/cG9zdGNzcyEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL21lbnUubS5jc3NcIik7XG5cdFx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblx0XHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0XHR9KTtcblx0fVxuXHQvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL21lbnUvbWVudS5tLmNzc1xuLy8gbW9kdWxlIGlkID0gLi9zcmMvbWVudS9tZW51Lm0uY3NzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsImltcG9ydCAnLi9tZW51LWl0ZW0vTWVudUl0ZW0nO1xuaW1wb3J0ICcuL21lbnUvTWVudSc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPXRzJmluc3RhbmNlTmFtZT0wX2N1c3RvbS1lbGVtZW50cyEuL3Rlc3RzL3VuaXQvYWxsLnRzIiwiY29uc3QgeyBkZXNjcmliZSwgaXQgfSA9IGludGVybi5nZXRJbnRlcmZhY2UoJ2JkZCcpO1xuaW1wb3J0IGhhcm5lc3MgZnJvbSAnQGRvam8vdGVzdC1leHRyYXMvaGFybmVzcyc7XG5cbmltcG9ydCB7IHYgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9kJztcblxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zcmMvbWVudS1pdGVtL01lbnVJdGVtJztcbmltcG9ydCAqIGFzIGNzcyBmcm9tICcuLi8uLi8uLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzJztcblxuZGVzY3JpYmUoJ01lbnVJdGVtJywgKCkgPT4ge1xuXHRpdCgnc2hvdWxkIHJlbmRlciB3aWRnZXQnLCAoKSA9PiB7XG5cdFx0Y29uc3QgdGVzdE1lbnVJdGVtID0gaGFybmVzcyhNZW51SXRlbSk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdGNvbnN0IHRpdGxlID0gJ01lbnUgSXRlbSc7XG5cdFx0dGVzdE1lbnVJdGVtLnNldFByb3BlcnRpZXMoeyBzZWxlY3RlZCwgdGl0bGUgfSk7XG5cdFx0dGVzdE1lbnVJdGVtLmV4cGVjdFJlbmRlcihcblx0XHRcdHYoJ2xpJywgeyBjbGFzc2VzOiBjc3Mucm9vdCB9LCBbXG5cdFx0XHRcdHYoXG5cdFx0XHRcdFx0J3NwYW4nLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtjc3MuaXRlbSwgY3NzLnNlbGVjdGVkXSxcblx0XHRcdFx0XHRcdG9uY2xpY2s6IHRlc3RNZW51SXRlbS5saXN0ZW5lclxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0W3RpdGxlXVxuXHRcdFx0XHQpXG5cdFx0XHRdKVxuXHRcdCk7XG5cdH0pO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPXRzJmluc3RhbmNlTmFtZT0wX2N1c3RvbS1lbGVtZW50cyEuL3Rlc3RzL3VuaXQvbWVudS1pdGVtL01lbnVJdGVtLnRzIiwiY29uc3QgeyBkZXNjcmliZSwgaXQgfSA9IGludGVybi5nZXRJbnRlcmZhY2UoJ2JkZCcpO1xuaW1wb3J0IGhhcm5lc3MgZnJvbSAnQGRvam8vdGVzdC1leHRyYXMvaGFybmVzcyc7XG5cbmltcG9ydCB7IHYgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9kJztcblxuaW1wb3J0IHsgTWVudSB9IGZyb20gJy4uLy4uLy4uL3NyYy9tZW51L01lbnUnO1xuaW1wb3J0ICogYXMgY3NzIGZyb20gJy4uLy4uLy4uL3NyYy9tZW51L21lbnUubS5jc3MnO1xuXG5kZXNjcmliZSgnTWVudScsICgpID0+IHtcblx0aXQoJ3Nob3VsZCByZW5kZXIgd2lkZ2V0JywgKCkgPT4ge1xuXHRcdGNvbnN0IHRlc3RNZW51ID0gaGFybmVzcyhNZW51KTtcblx0XHR0ZXN0TWVudS5leHBlY3RSZW5kZXIodignbmF2JywgeyBjbGFzc2VzOiBjc3Mucm9vdCB9LCBbdignb2wnLCB7IGNsYXNzZXM6IGNzcy5tZW51Q29udGFpbmVyIH0pXSkpO1xuXHR9KTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXI/dHlwZT10cyZpbnN0YW5jZU5hbWU9MF9jdXN0b20tZWxlbWVudHMhLi90ZXN0cy91bml0L21lbnUvTWVudS50cyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZWYzNTAzNjRjNjU4OTg4ZTRiMzMiLCJ3ZWJwYWNrOi8vL0Rlc3Ryb3lhYmxlLnRzIiwid2VicGFjazovLy9FdmVudGVkLnRzIiwid2VicGFjazovLy9sYW5nLnRzIiwid2VicGFjazovLy9oYXMudHMiLCJ3ZWJwYWNrOi8vL01hcC50cyIsIndlYnBhY2s6Ly8vUHJvbWlzZS50cyIsIndlYnBhY2s6Ly8vU2V0LnRzIiwid2VicGFjazovLy9TeW1ib2wudHMiLCJ3ZWJwYWNrOi8vL1dlYWtNYXAudHMiLCJ3ZWJwYWNrOi8vL2FycmF5LnRzIiwid2VicGFjazovLy9nbG9iYWwudHMiLCJ3ZWJwYWNrOi8vL2l0ZXJhdG9yLnRzIiwid2VicGFjazovLy9udW1iZXIudHMiLCJ3ZWJwYWNrOi8vL29iamVjdC50cyIsIndlYnBhY2s6Ly8vc3RyaW5nLnRzIiwid2VicGFjazovLy9xdWV1ZS50cyIsIndlYnBhY2s6Ly8vdXRpbC50cyIsIndlYnBhY2s6Ly8vaGFybmVzcy50cyIsIndlYnBhY2s6Ly8vYXNzZXJ0UmVuZGVyLnRzIiwid2VicGFjazovLy9zZWxlY3Rvci50cyIsIndlYnBhY2s6Ly8vSW5qZWN0b3IudHMiLCJ3ZWJwYWNrOi8vL05vZGVIYW5kbGVyLnRzIiwid2VicGFjazovLy9SZWdpc3RyeS50cyIsIndlYnBhY2s6Ly8vUmVnaXN0cnlIYW5kbGVyLnRzIiwid2VicGFjazovLy9XaWRnZXRCYXNlLnRzIiwid2VicGFjazovLy9jc3NUcmFuc2l0aW9ucy50cyIsIndlYnBhY2s6Ly8vZC50cyIsIndlYnBhY2s6Ly8vYWZ0ZXJSZW5kZXIudHMiLCJ3ZWJwYWNrOi8vL2Fsd2F5c1JlbmRlci50cyIsIndlYnBhY2s6Ly8vYmVmb3JlUHJvcGVydGllcy50cyIsIndlYnBhY2s6Ly8vY3VzdG9tRWxlbWVudC50cyIsIndlYnBhY2s6Ly8vZGlmZlByb3BlcnR5LnRzIiwid2VicGFjazovLy9oYW5kbGVEZWNvcmF0b3IudHMiLCJ3ZWJwYWNrOi8vL2luamVjdC50cyIsIndlYnBhY2s6Ly8vZGlmZi50cyIsIndlYnBhY2s6Ly8vUHJvamVjdG9yLnRzIiwid2VicGFjazovLy9UaGVtZWQudHMiLCJ3ZWJwYWNrOi8vL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC50cyIsIndlYnBhY2s6Ly8vdmRvbS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzPzJlNTYiLCJ3ZWJwYWNrOi8vLy4vc3JjL21lbnUvbWVudS5tLmNzcz80MWNiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdC11bWQvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGlmZi9kaXN0L2RpZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21lbnUtaXRlbS9NZW51SXRlbS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzIiwid2VicGFjazovLy8uL3NyYy9tZW51L01lbnUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21lbnUvbWVudS5tLmNzcyIsIndlYnBhY2s6Ly8vLi90ZXN0cy91bml0L2FsbC50cyIsIndlYnBhY2s6Ly8vLi90ZXN0cy91bml0L21lbnUtaXRlbS9NZW51SXRlbS50cyIsIndlYnBhY2s6Ly8vLi90ZXN0cy91bml0L21lbnUvTWVudS50cyJdLCJuYW1lcyI6WyJkXzEiLCJyZXF1aXJlIiwiY3VzdG9tRWxlbWVudF8xIiwiVGhlbWVkXzEiLCJXaWRnZXRCYXNlXzEiLCJjc3MiLCJNZW51SXRlbSIsIl9zdXBlciIsInRzbGliXzEiLCJfX2V4dGVuZHMiLCJwcm90b3R5cGUiLCJfb25DbGljayIsInByb3BlcnRpZXMiLCJvblNlbGVjdGVkIiwiZGF0YSIsInJlbmRlciIsIl9hIiwidGl0bGUiLCJzZWxlY3RlZCIsInYiLCJjbGFzc2VzIiwidGhlbWUiLCJyb290IiwiaXRlbSIsIm9uY2xpY2siLCJfX2RlY29yYXRlIiwiY3VzdG9tRWxlbWVudCIsInRhZyIsImF0dHJpYnV0ZXMiLCJldmVudHMiLCJUaGVtZWRNaXhpbiIsIldpZGdldEJhc2UiLCJleHBvcnRzIiwiZGVmYXVsdCIsIk1lbnUiLCJfb25TZWxlY3RlZCIsImlkIiwiX3NlbGVjdGVkSWQiLCJpbnZhbGlkYXRlIiwiX3RoaXMiLCJpdGVtcyIsImNoaWxkcmVuIiwibWFwIiwiY2hpbGQiLCJpbmRleCIsInVuZGVmaW5lZCIsIl9fYXNzaWduIiwibWVudUNvbnRhaW5lciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFB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O0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7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QTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQyxTQUFTO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRixDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBLDRCQUE0QixJQUFJO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFF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QUVBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLDRCQUE0QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTzs7QUFFcEI7QUFDQSxhQUFhLDJCQUEyQjtBQUN4QztBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxnQkFBZ0IsRUFBRSxZQUFZLGNBQWM7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsc0JBQXNCLEVBQUU7QUFDdEQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsZ0VBQWdFLEVBQUU7QUFDNUYseUJBQXlCLDZCQUE2QixFQUFFO0FBQ3hELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLENBQUM7QUFDRDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLG9DQUFvQyxFQUFFO0FBQ2hGOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFlBQVk7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFlBQVk7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsWUFBWTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLENBQUM7QUFDRDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRiwwQkFBMEIsZ0NBQWdDLEVBQUU7QUFDNUQsQ0FBQztBQUNEOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkJBQTJCLHFCQUFxQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNkNBQTZDLFFBQVE7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDJCQUEyQixxQkFBcUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsbUNBQW1DLFFBQVE7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsbUNBQW1DLFFBQVE7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxpQkFBaUIscUJBQXFCO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx5QkFBeUIsRUFBRTtBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDLGlCQUFpQjtBQUNuRCxrQ0FBa0Msa0JBQWtCO0FBQ3BEO0FBQ0EscURBQXFELGlCQUFpQjs7QUFFdEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxDQUFDLEU7Ozs7Ozs7QUNqeUlEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GO0FBQ3BGLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxvQ0FBb0M7QUFDcEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsZ0VBQWdFLHVDQUF1QyxrQkFBa0I7O0FBRXpIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGNBQWM7OztBQUcxRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsNkJBQTZCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix1REFBdUQ7QUFDNUU7O0FBRUE7QUFDQTtBQUNBLCtDQUErQyw0QkFBNEI7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUMsTUFBTTtBQUNOLHdCQUF3QiwyQ0FBMkM7QUFDbkU7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQyxxQkFBcUI7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0Esb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsNkJBQTZCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXO0FBQ1g7QUFDQSw0Q0FBNEMsY0FBYzs7O0FBRzFELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGtCQUFrQjs7QUFFaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsY0FBYzs7O0FBRzFELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGdFQUFnRSx1Q0FBdUMsa0JBQWtCOztBQUV6SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2Qix1QkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2Qix1QkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLHVCQUF1QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUdBQXFHLHlCQUF5QjtBQUM5SDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxjQUFjOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsY0FBYzs7O0FBRzFELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLGdFQUFnRSx1Q0FBdUMsa0JBQWtCOztBQUV6SDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQiw2QkFBNkI7QUFDL0M7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBHQUEwRyx5QkFBeUI7QUFDbkk7QUFDQTtBQUNBLDRDQUE0QyxjQUFjOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsa0JBQWtCOztBQUVoRztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsY0FBYzs7O0FBRzFELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGtCQUFrQjs7QUFFaEc7QUFDQTtBQUNBLDJCQUEyQixFQUFFO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxjQUFjOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxxR0FBcUcsbUJBQW1CLEVBQUUsbUJBQW1CLDhIQUE4SDs7QUFFM1E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxnRUFBZ0UsdUNBQXVDLGtCQUFrQjs7QUFFekg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGNBQWMsa0JBQWtCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGNBQWM7OztBQUcxRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxrQkFBa0I7O0FBRWhHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxjQUFjOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsa0JBQWtCOztBQUVoRztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0Isa0JBQWtCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0Isd0JBQXdCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHVCQUF1QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsY0FBYzs7O0FBRzFELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLG9CQUFvQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QyxjQUFjOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxjQUFjOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLDREQUE0RCwwQkFBMEIsMENBQTBDLGdCQUFnQixPQUFPLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxPQUFPLHdCQUF3QixFQUFFOztBQUUzTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlELHFCQUFxQjtBQUN0RSx1REFBdUQ7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlEQUFpRDtBQUNoRSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxrQkFBa0IsV0FBVztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSixXQUFXO0FBQ1g7QUFDQSw0Q0FBNEMsY0FBYzs7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7Ozs7Ozs7QUN2THRDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0IsRUFBRTtBQUNsRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7O0FDekxEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDOztBQUVBO0FBQ0EsbUJBQW1CLDJCQUEyQjs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQiwyQkFBMkI7QUFDNUM7QUFDQTs7QUFFQSxRQUFRLHVCQUF1QjtBQUMvQjtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLGlCQUFpQix1QkFBdUI7QUFDeEM7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkLGtEQUFrRCxzQkFBc0I7QUFDeEU7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7O0FBRUEsNkJBQTZCLG1CQUFtQjs7QUFFaEQ7O0FBRUE7O0FBRUE7QUFDQTs7Ozs7Ozs7O0FDNVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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IiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGVmMzUwMzY0YzY1ODk4OGU0YjMzIiwiaW1wb3J0IHsgSGFuZGxlIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNyZWF0ZUNvbXBvc2l0ZUhhbmRsZSB9IGZyb20gJy4vbGFuZyc7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuLi9zaGltL1Byb21pc2UnO1xuXG4vKipcbiAqIE5vIG9wZXJhdGlvbiBmdW5jdGlvbiB0byByZXBsYWNlIG93biBvbmNlIGluc3RhbmNlIGlzIGRlc3RvcnllZFxuICovXG5mdW5jdGlvbiBub29wKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbn1cblxuLyoqXG4gKiBObyBvcCBmdW5jdGlvbiB1c2VkIHRvIHJlcGxhY2Ugb3duLCBvbmNlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3RvcnllZFxuICovXG5mdW5jdGlvbiBkZXN0cm95ZWQoKTogbmV2ZXIge1xuXHR0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgbWFkZSB0byBkZXN0cm95ZWQgbWV0aG9kJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBEZXN0cm95YWJsZSB7XG5cdC8qKlxuXHQgKiByZWdpc3RlciBoYW5kbGVzIGZvciB0aGUgaW5zdGFuY2Vcblx0ICovXG5cdHByaXZhdGUgaGFuZGxlczogSGFuZGxlW107XG5cblx0LyoqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5oYW5kbGVzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXIgaGFuZGxlcyBmb3IgdGhlIGluc3RhbmNlIHRoYXQgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiBgdGhpcy5kZXN0cm95YCBpcyBjYWxsZWRcblx0ICpcblx0ICogQHBhcmFtIHtIYW5kbGV9IGhhbmRsZSBUaGUgaGFuZGxlIHRvIGFkZCBmb3IgdGhlIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIHtIYW5kbGV9IGEgaGFuZGxlIGZvciB0aGUgaGFuZGxlLCByZW1vdmVzIHRoZSBoYW5kbGUgZm9yIHRoZSBpbnN0YW5jZSBhbmQgY2FsbHMgZGVzdHJveVxuXHQgKi9cblx0b3duKGhhbmRsZXM6IEhhbmRsZSB8IEhhbmRsZVtdKTogSGFuZGxlIHtcblx0XHRjb25zdCBoYW5kbGUgPSBBcnJheS5pc0FycmF5KGhhbmRsZXMpID8gY3JlYXRlQ29tcG9zaXRlSGFuZGxlKC4uLmhhbmRsZXMpIDogaGFuZGxlcztcblx0XHRjb25zdCB7IGhhbmRsZXM6IF9oYW5kbGVzIH0gPSB0aGlzO1xuXHRcdF9oYW5kbGVzLnB1c2goaGFuZGxlKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGVzdHJveSgpIHtcblx0XHRcdFx0X2hhbmRsZXMuc3BsaWNlKF9oYW5kbGVzLmluZGV4T2YoaGFuZGxlKSk7XG5cdFx0XHRcdGhhbmRsZS5kZXN0cm95KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXN0cnB5cyBhbGwgaGFuZGVycyByZWdpc3RlcmVkIGZvciB0aGUgaW5zdGFuY2Vcblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2U8YW55fSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIGFsbCBoYW5kbGVzIGhhdmUgYmVlbiBkZXN0cm95ZWRcblx0ICovXG5cdGRlc3Ryb3koKTogUHJvbWlzZTxhbnk+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRoaXMuaGFuZGxlcy5mb3JFYWNoKChoYW5kbGUpID0+IHtcblx0XHRcdFx0aGFuZGxlICYmIGhhbmRsZS5kZXN0cm95ICYmIGhhbmRsZS5kZXN0cm95KCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuZGVzdHJveSA9IG5vb3A7XG5cdFx0XHR0aGlzLm93biA9IGRlc3Ryb3llZDtcblx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGVzdHJveWFibGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gRGVzdHJveWFibGUudHMiLCJpbXBvcnQgTWFwIGZyb20gJy4uL3NoaW0vTWFwJztcbmltcG9ydCB7IEhhbmRsZSwgRXZlbnRUeXBlLCBFdmVudE9iamVjdCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEZXN0cm95YWJsZSB9IGZyb20gJy4vRGVzdHJveWFibGUnO1xuXG4vKipcbiAqIE1hcCBvZiBjb21wdXRlZCByZWd1bGFyIGV4cHJlc3Npb25zLCBrZXllZCBieSBzdHJpbmdcbiAqL1xuY29uc3QgcmVnZXhNYXAgPSBuZXcgTWFwPHN0cmluZywgUmVnRXhwPigpO1xuXG4vKipcbiAqIERldGVybWluZXMgaXMgdGhlIGV2ZW50IHR5cGUgZ2xvYiBoYXMgYmVlbiBtYXRjaGVkXG4gKlxuICogQHJldHVybnMgYm9vbGVhbiB0aGF0IGluZGljYXRlcyBpZiB0aGUgZ2xvYiBpcyBtYXRjaGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dsb2JNYXRjaChnbG9iU3RyaW5nOiBzdHJpbmcgfCBzeW1ib2wsIHRhcmdldFN0cmluZzogc3RyaW5nIHwgc3ltYm9sKTogYm9vbGVhbiB7XG5cdGlmICh0eXBlb2YgdGFyZ2V0U3RyaW5nID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgZ2xvYlN0cmluZyA9PT0gJ3N0cmluZycgJiYgZ2xvYlN0cmluZy5pbmRleE9mKCcqJykgIT09IC0xKSB7XG5cdFx0bGV0IHJlZ2V4OiBSZWdFeHA7XG5cdFx0aWYgKHJlZ2V4TWFwLmhhcyhnbG9iU3RyaW5nKSkge1xuXHRcdFx0cmVnZXggPSByZWdleE1hcC5nZXQoZ2xvYlN0cmluZykhO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWdleCA9IG5ldyBSZWdFeHAoYF4ke2dsb2JTdHJpbmcucmVwbGFjZSgvXFwqL2csICcuKicpfSRgKTtcblx0XHRcdHJlZ2V4TWFwLnNldChnbG9iU3RyaW5nLCByZWdleCk7XG5cdFx0fVxuXHRcdHJldHVybiByZWdleC50ZXN0KHRhcmdldFN0cmluZyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGdsb2JTdHJpbmcgPT09IHRhcmdldFN0cmluZztcblx0fVxufVxuXG5leHBvcnQgdHlwZSBFdmVudGVkQ2FsbGJhY2s8VCA9IEV2ZW50VHlwZSwgRSBleHRlbmRzIEV2ZW50T2JqZWN0PFQ+ID0gRXZlbnRPYmplY3Q8VD4+ID0ge1xuXHQvKipcblx0ICogQSBjYWxsYmFjayB0aGF0IHRha2VzIGFuIGBldmVudGAgYXJndW1lbnRcblx0ICpcblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3Rcblx0ICovXG5cblx0KGV2ZW50OiBFKTogYm9vbGVhbiB8IHZvaWQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUV2ZW50VHlwZXM8VCBleHRlbmRzIEV2ZW50T2JqZWN0PGFueT4gPSBFdmVudE9iamVjdDxhbnk+PiB7XG5cdFtpbmRleDogc3RyaW5nXTogVDtcbn1cblxuLyoqXG4gKiBBIHR5cGUgd2hpY2ggaXMgZWl0aGVyIGEgdGFyZ2V0ZWQgZXZlbnQgbGlzdGVuZXIgb3IgYW4gYXJyYXkgb2YgbGlzdGVuZXJzXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0YXJnZXQgZm9yIHRoZSBldmVudHNcbiAqIEB0ZW1wbGF0ZSBFIFRoZSBldmVudCB0eXBlIGZvciB0aGUgZXZlbnRzXG4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50ZWRDYWxsYmFja09yQXJyYXk8VCA9IEV2ZW50VHlwZSwgRSBleHRlbmRzIEV2ZW50T2JqZWN0PFQ+ID0gRXZlbnRPYmplY3Q8VD4+ID1cblx0fCBFdmVudGVkQ2FsbGJhY2s8VCwgRT5cblx0fCBFdmVudGVkQ2FsbGJhY2s8VCwgRT5bXTtcblxuLyoqXG4gKiBFdmVudCBDbGFzc1xuICovXG5leHBvcnQgY2xhc3MgRXZlbnRlZDxcblx0TSBleHRlbmRzIEN1c3RvbUV2ZW50VHlwZXMgPSB7fSxcblx0VCA9IEV2ZW50VHlwZSxcblx0TyBleHRlbmRzIEV2ZW50T2JqZWN0PFQ+ID0gRXZlbnRPYmplY3Q8VD5cbj4gZXh0ZW5kcyBEZXN0cm95YWJsZSB7XG5cdC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIGlzIHB1cmVseSBzbyBUeXBlU2NyaXB0IHJlbWVtYmVycyB0aGUgdHlwZSBvZiBgTWAgd2hlbiBleHRlbmRpbmcgc29cblx0Ly8gdGhhdCB0aGUgdXRpbGl0aWVzIGluIGBvbi50c2Agd2lsbCB3b3JrIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjAzNDhcblx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG5cdHByb3RlY3RlZCBfX3R5cGVNYXBfXz86IE07XG5cdC8qKlxuXHQgKiBtYXAgb2YgbGlzdGVuZXJzIGtleWVkIGJ5IGV2ZW50IHR5cGVcblx0ICovXG5cdHByb3RlY3RlZCBsaXN0ZW5lcnNNYXA6IE1hcDxUIHwga2V5b2YgTSwgRXZlbnRlZENhbGxiYWNrPFQsIE8+W10+ID0gbmV3IE1hcCgpO1xuXG5cdC8qKlxuXHQgKiBFbWl0cyB0aGUgZXZlbnQgb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVkIHR5cGVcblx0ICpcblx0ICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0byBlbWl0XG5cdCAqL1xuXHRlbWl0PEsgZXh0ZW5kcyBrZXlvZiBNPihldmVudDogTVtLXSk6IHZvaWQ7XG5cdGVtaXQoZXZlbnQ6IE8pOiB2b2lkO1xuXHRlbWl0KGV2ZW50OiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLmxpc3RlbmVyc01hcC5mb3JFYWNoKChtZXRob2RzLCB0eXBlKSA9PiB7XG5cdFx0XHRpZiAoaXNHbG9iTWF0Y2godHlwZSBhcyBhbnksIGV2ZW50LnR5cGUpKSB7XG5cdFx0XHRcdFsuLi5tZXRob2RzXS5mb3JFYWNoKChtZXRob2QpID0+IHtcblx0XHRcdFx0XHRtZXRob2QuY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhdGNoIGFsbCBoYW5kbGVyIGZvciB2YXJpb3VzIGNhbGwgc2lnbmF0dXJlcy4gVGhlIHNpZ25hdHVyZXMgYXJlIGRlZmluZWQgaW5cblx0ICogYEJhc2VFdmVudGVkRXZlbnRzYC4gIFlvdSBjYW4gYWRkIHlvdXIgb3duIGV2ZW50IHR5cGUgLT4gaGFuZGxlciB0eXBlcyBieSBleHRlbmRpbmdcblx0ICogYEJhc2VFdmVudGVkRXZlbnRzYC4gIFNlZSBleGFtcGxlIGZvciBkZXRhaWxzLlxuXHQgKlxuXHQgKiBAcGFyYW0gYXJnc1xuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKlxuXHQgKiBpbnRlcmZhY2UgV2lkZ2V0QmFzZUV2ZW50cyBleHRlbmRzIEJhc2VFdmVudGVkRXZlbnRzIHtcblx0ICogICAgICh0eXBlOiAncHJvcGVydGllczpjaGFuZ2VkJywgaGFuZGxlcjogUHJvcGVydGllc0NoYW5nZWRIYW5kbGVyKTogSGFuZGxlO1xuXHQgKiB9XG5cdCAqIGNsYXNzIFdpZGdldEJhc2UgZXh0ZW5kcyBFdmVudGVkIHtcblx0ICogICAgb246IFdpZGdldEJhc2VFdmVudHM7XG5cdCAqIH1cblx0ICpcblx0ICogQHJldHVybiB7YW55fVxuXHQgKi9cblx0b248SyBleHRlbmRzIGtleW9mIE0+KHR5cGU6IEssIGxpc3RlbmVyOiBFdmVudGVkQ2FsbGJhY2tPckFycmF5PEssIE1bS10+KTogSGFuZGxlO1xuXHRvbih0eXBlOiBULCBsaXN0ZW5lcjogRXZlbnRlZENhbGxiYWNrT3JBcnJheTxULCBPPik6IEhhbmRsZTtcblx0b24odHlwZTogYW55LCBsaXN0ZW5lcjogRXZlbnRlZENhbGxiYWNrT3JBcnJheTxhbnksIGFueT4pOiBIYW5kbGUge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGxpc3RlbmVyKSkge1xuXHRcdFx0Y29uc3QgaGFuZGxlcyA9IGxpc3RlbmVyLm1hcCgobGlzdGVuZXIpID0+IHRoaXMuX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkZXN0cm95KCkge1xuXHRcdFx0XHRcdGhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlKSA9PiBoYW5kbGUuZGVzdHJveSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcblx0fVxuXG5cdHByaXZhdGUgX2FkZExpc3RlbmVyKHR5cGU6IFQgfCBrZXlvZiBNLCBsaXN0ZW5lcjogRXZlbnRlZENhbGxiYWNrPFQsIE8+KSB7XG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNNYXAuZ2V0KHR5cGUpIHx8IFtdO1xuXHRcdGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblx0XHR0aGlzLmxpc3RlbmVyc01hcC5zZXQodHlwZSwgbGlzdGVuZXJzKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGVzdHJveTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XG5cdFx0XHRcdGxpc3RlbmVycy5zcGxpY2UobGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpLCAxKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50ZWQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gRXZlbnRlZC50cyIsImltcG9ydCB7IEhhbmRsZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICcuLi9zaGltL29iamVjdCc7XG5cbmV4cG9ydCB7IGFzc2lnbiB9IGZyb20gJy4uL3NoaW0vb2JqZWN0JztcblxuY29uc3Qgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVHlwZSBndWFyZCB0aGF0IGVuc3VyZXMgdGhhdCB0aGUgdmFsdWUgY2FuIGJlIGNvZXJjZWQgdG8gT2JqZWN0XG4gKiB0byB3ZWVkIG91dCBob3N0IG9iamVjdHMgdGhhdCBkbyBub3QgZGVyaXZlIGZyb20gT2JqZWN0LlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGlmIHdlIHdhbnQgdG8gZGVlcCBjb3B5IGFuIG9iamVjdCBvciBub3QuXG4gKiBOb3RlOiBJbiBFUzYgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IGFuIG9iamVjdCdzIFN5bWJvbC50b1N0cmluZ1RhZyBwcm9wZXJ0eSwgd2hpY2ggd2lsbFxuICogY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBgdG9TdHJpbmdgLiBUaGlzIGlzIGEgcmFyZSBlZGdlIGNhc2UgdGhhdCBpcyBkaWZmaWN1bHQgdG8gaGFuZGxlLFxuICogc28gaXQgaXMgbm90IGhhbmRsZWQgaGVyZS5cbiAqIEBwYXJhbSAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJuICAgICAgIElmIHRoZSB2YWx1ZSBpcyBjb2VyY2libGUgaW50byBhbiBPYmplY3RcbiAqL1xuZnVuY3Rpb24gc2hvdWxkRGVlcENvcHlPYmplY3QodmFsdWU6IGFueSk6IHZhbHVlIGlzIE9iamVjdCB7XG5cdHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gY29weUFycmF5PFQ+KGFycmF5OiBUW10sIGluaGVyaXRlZDogYm9vbGVhbik6IFRbXSB7XG5cdHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24oaXRlbTogVCk6IFQge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG5cdFx0XHRyZXR1cm4gPGFueT5jb3B5QXJyYXkoPGFueT5pdGVtLCBpbmhlcml0ZWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiAhc2hvdWxkRGVlcENvcHlPYmplY3QoaXRlbSlcblx0XHRcdD8gaXRlbVxuXHRcdFx0OiBfbWl4aW4oe1xuXHRcdFx0XHRcdGRlZXA6IHRydWUsXG5cdFx0XHRcdFx0aW5oZXJpdGVkOiBpbmhlcml0ZWQsXG5cdFx0XHRcdFx0c291cmNlczogPEFycmF5PFQ+PltpdGVtXSxcblx0XHRcdFx0XHR0YXJnZXQ6IDxUPnt9XG5cdFx0XHRcdH0pO1xuXHR9KTtcbn1cblxuaW50ZXJmYWNlIE1peGluQXJnczxUIGV4dGVuZHMge30sIFUgZXh0ZW5kcyB7fT4ge1xuXHRkZWVwOiBib29sZWFuO1xuXHRpbmhlcml0ZWQ6IGJvb2xlYW47XG5cdHNvdXJjZXM6IChVIHwgbnVsbCB8IHVuZGVmaW5lZClbXTtcblx0dGFyZ2V0OiBUO1xuXHRjb3BpZWQ/OiBhbnlbXTtcbn1cblxuZnVuY3Rpb24gX21peGluPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9Pihrd0FyZ3M6IE1peGluQXJnczxULCBVPik6IFQgJiBVIHtcblx0Y29uc3QgZGVlcCA9IGt3QXJncy5kZWVwO1xuXHRjb25zdCBpbmhlcml0ZWQgPSBrd0FyZ3MuaW5oZXJpdGVkO1xuXHRjb25zdCB0YXJnZXQ6IGFueSA9IGt3QXJncy50YXJnZXQ7XG5cdGNvbnN0IGNvcGllZCA9IGt3QXJncy5jb3BpZWQgfHwgW107XG5cdGNvbnN0IGNvcGllZENsb25lID0gWy4uLmNvcGllZF07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrd0FyZ3Muc291cmNlcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGt3QXJncy5zb3VyY2VzW2ldO1xuXG5cdFx0aWYgKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGZvciAobGV0IGtleSBpbiBzb3VyY2UpIHtcblx0XHRcdGlmIChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcblx0XHRcdFx0bGV0IHZhbHVlOiBhbnkgPSBzb3VyY2Vba2V5XTtcblxuXHRcdFx0XHRpZiAoY29waWVkQ2xvbmUuaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGVlcCkge1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBjb3B5QXJyYXkodmFsdWUsIGluaGVyaXRlZCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzaG91bGREZWVwQ29weU9iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldFZhbHVlOiBhbnkgPSB0YXJnZXRba2V5XSB8fCB7fTtcblx0XHRcdFx0XHRcdGNvcGllZC5wdXNoKHNvdXJjZSk7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IF9taXhpbih7XG5cdFx0XHRcdFx0XHRcdGRlZXA6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluaGVyaXRlZDogaW5oZXJpdGVkLFxuXHRcdFx0XHRcdFx0XHRzb3VyY2VzOiBbdmFsdWVdLFxuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHRhcmdldFZhbHVlLFxuXHRcdFx0XHRcdFx0XHRjb3BpZWRcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0YXJnZXRba2V5XSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiA8VCAmIFU+dGFyZ2V0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgb2JqZWN0IGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSwgYW5kIGNvcGllcyBhbGwgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBvZiBvbmUgb3IgbW9yZVxuICogc291cmNlIG9iamVjdHMgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gcHJvdG90eXBlIFRoZSBwcm90b3R5cGUgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCBmcm9tXG4gKiBAcGFyYW0gbWl4aW5zIEFueSBudW1iZXIgb2Ygb2JqZWN0cyB3aG9zZSBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIHdpbGwgYmUgY29waWVkIHRvIHRoZSBjcmVhdGVkIG9iamVjdFxuICogQHJldHVybiBUaGUgbmV3IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlPFxuXHRUIGV4dGVuZHMge30sXG5cdFUgZXh0ZW5kcyB7fSxcblx0ViBleHRlbmRzIHt9LFxuXHRXIGV4dGVuZHMge30sXG5cdFggZXh0ZW5kcyB7fSxcblx0WSBleHRlbmRzIHt9LFxuXHRaIGV4dGVuZHMge31cbj4ocHJvdG90eXBlOiBULCBtaXhpbjE6IFUsIG1peGluMjogViwgbWl4aW4zOiBXLCBtaXhpbjQ6IFgsIG1peGluNTogWSwgbWl4aW42OiBaKTogVCAmIFUgJiBWICYgVyAmIFggJiBZICYgWjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30sIFkgZXh0ZW5kcyB7fT4oXG5cdHByb3RvdHlwZTogVCxcblx0bWl4aW4xOiBVLFxuXHRtaXhpbjI6IFYsXG5cdG1peGluMzogVyxcblx0bWl4aW40OiBYLFxuXHRtaXhpbjU6IFlcbik6IFQgJiBVICYgViAmIFcgJiBYICYgWTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30+KFxuXHRwcm90b3R5cGU6IFQsXG5cdG1peGluMTogVSxcblx0bWl4aW4yOiBWLFxuXHRtaXhpbjM6IFcsXG5cdG1peGluNDogWFxuKTogVCAmIFUgJiBWICYgVyAmIFg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30sIFcgZXh0ZW5kcyB7fT4oXG5cdHByb3RvdHlwZTogVCxcblx0bWl4aW4xOiBVLFxuXHRtaXhpbjI6IFYsXG5cdG1peGluMzogV1xuKTogVCAmIFUgJiBWICYgVztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fT4ocHJvdG90eXBlOiBULCBtaXhpbjE6IFUsIG1peGluMjogVik6IFQgJiBVICYgVjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30+KHByb3RvdHlwZTogVCwgbWl4aW46IFUpOiBUICYgVTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIHt9Pihwcm90b3R5cGU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGU6IGFueSwgLi4ubWl4aW5zOiBhbnlbXSk6IGFueSB7XG5cdGlmICghbWl4aW5zLmxlbmd0aCkge1xuXHRcdHRocm93IG5ldyBSYW5nZUVycm9yKCdsYW5nLmNyZWF0ZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWl4aW4gb2JqZWN0LicpO1xuXHR9XG5cblx0Y29uc3QgYXJncyA9IG1peGlucy5zbGljZSgpO1xuXHRhcmdzLnVuc2hpZnQoT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpKTtcblxuXHRyZXR1cm4gYXNzaWduLmFwcGx5KG51bGwsIGFyZ3MpO1xufVxuXG4vKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGFsbCBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIG9mIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIHRoZSB0YXJnZXQgb2JqZWN0LFxuICogcmVjdXJzaXZlbHkgY29weWluZyBhbGwgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cyBhcyB3ZWxsLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3QgdG8gcmVjZWl2ZSB2YWx1ZXMgZnJvbSBzb3VyY2Ugb2JqZWN0c1xuICogQHBhcmFtIHNvdXJjZXMgQW55IG51bWJlciBvZiBvYmplY3RzIHdob3NlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIHRhcmdldCBvYmplY3RcbiAqIEByZXR1cm4gVGhlIG1vZGlmaWVkIHRhcmdldCBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248XG5cdFQgZXh0ZW5kcyB7fSxcblx0VSBleHRlbmRzIHt9LFxuXHRWIGV4dGVuZHMge30sXG5cdFcgZXh0ZW5kcyB7fSxcblx0WCBleHRlbmRzIHt9LFxuXHRZIGV4dGVuZHMge30sXG5cdFogZXh0ZW5kcyB7fVxuPih0YXJnZXQ6IFQsIHNvdXJjZTE6IFUsIHNvdXJjZTI6IFYsIHNvdXJjZTM6IFcsIHNvdXJjZTQ6IFgsIHNvdXJjZTU6IFksIHNvdXJjZTY6IFopOiBUICYgVSAmIFYgJiBXICYgWCAmIFkgJiBaO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30sIFkgZXh0ZW5kcyB7fT4oXG5cdHRhcmdldDogVCxcblx0c291cmNlMTogVSxcblx0c291cmNlMjogVixcblx0c291cmNlMzogVyxcblx0c291cmNlNDogWCxcblx0c291cmNlNTogWVxuKTogVCAmIFUgJiBWICYgVyAmIFggJiBZO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30+KFxuXHR0YXJnZXQ6IFQsXG5cdHNvdXJjZTE6IFUsXG5cdHNvdXJjZTI6IFYsXG5cdHNvdXJjZTM6IFcsXG5cdHNvdXJjZTQ6IFhcbik6IFQgJiBVICYgViAmIFcgJiBYO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9Pihcblx0dGFyZ2V0OiBULFxuXHRzb3VyY2UxOiBVLFxuXHRzb3VyY2UyOiBWLFxuXHRzb3VyY2UzOiBXXG4pOiBUICYgVSAmIFYgJiBXO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fT4odGFyZ2V0OiBULCBzb3VyY2UxOiBVLCBzb3VyY2UyOiBWKTogVCAmIFUgJiBWO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ248VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30+KHRhcmdldDogVCwgc291cmNlOiBVKTogVCAmIFU7XG5leHBvcnQgZnVuY3Rpb24gZGVlcEFzc2lnbih0YXJnZXQ6IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnkge1xuXHRyZXR1cm4gX21peGluKHtcblx0XHRkZWVwOiB0cnVlLFxuXHRcdGluaGVyaXRlZDogZmFsc2UsXG5cdFx0c291cmNlczogc291cmNlcyxcblx0XHR0YXJnZXQ6IHRhcmdldFxuXHR9KTtcbn1cblxuLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBhbGwgZW51bWVyYWJsZSAob3duIG9yIGluaGVyaXRlZCkgcHJvcGVydGllcyBvZiBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAqIHRhcmdldCBvYmplY3QsIHJlY3Vyc2l2ZWx5IGNvcHlpbmcgYWxsIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMgYXMgd2VsbC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IHRvIHJlY2VpdmUgdmFsdWVzIGZyb20gc291cmNlIG9iamVjdHNcbiAqIEBwYXJhbSBzb3VyY2VzIEFueSBudW1iZXIgb2Ygb2JqZWN0cyB3aG9zZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIHRhcmdldCBvYmplY3RcbiAqIEByZXR1cm4gVGhlIG1vZGlmaWVkIHRhcmdldCBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNaXhpbjxcblx0VCBleHRlbmRzIHt9LFxuXHRVIGV4dGVuZHMge30sXG5cdFYgZXh0ZW5kcyB7fSxcblx0VyBleHRlbmRzIHt9LFxuXHRYIGV4dGVuZHMge30sXG5cdFkgZXh0ZW5kcyB7fSxcblx0WiBleHRlbmRzIHt9XG4+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogViwgc291cmNlMzogVywgc291cmNlNDogWCwgc291cmNlNTogWSwgc291cmNlNjogWik6IFQgJiBVICYgViAmIFcgJiBYICYgWSAmIFo7XG5leHBvcnQgZnVuY3Rpb24gZGVlcE1peGluPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30sIFcgZXh0ZW5kcyB7fSwgWCBleHRlbmRzIHt9LCBZIGV4dGVuZHMge30+KFxuXHR0YXJnZXQ6IFQsXG5cdHNvdXJjZTE6IFUsXG5cdHNvdXJjZTI6IFYsXG5cdHNvdXJjZTM6IFcsXG5cdHNvdXJjZTQ6IFgsXG5cdHNvdXJjZTU6IFlcbik6IFQgJiBVICYgViAmIFcgJiBYICYgWTtcbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWl4aW48VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30+KFxuXHR0YXJnZXQ6IFQsXG5cdHNvdXJjZTE6IFUsXG5cdHNvdXJjZTI6IFYsXG5cdHNvdXJjZTM6IFcsXG5cdHNvdXJjZTQ6IFhcbik6IFQgJiBVICYgViAmIFcgJiBYO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNaXhpbjxUIGV4dGVuZHMge30sIFUgZXh0ZW5kcyB7fSwgViBleHRlbmRzIHt9LCBXIGV4dGVuZHMge30+KFxuXHR0YXJnZXQ6IFQsXG5cdHNvdXJjZTE6IFUsXG5cdHNvdXJjZTI6IFYsXG5cdHNvdXJjZTM6IFdcbik6IFQgJiBVICYgViAmIFc7XG5leHBvcnQgZnVuY3Rpb24gZGVlcE1peGluPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogVik6IFQgJiBVICYgVjtcbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWl4aW48VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30+KHRhcmdldDogVCwgc291cmNlOiBVKTogVCAmIFU7XG5leHBvcnQgZnVuY3Rpb24gZGVlcE1peGluKHRhcmdldDogYW55LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFueSB7XG5cdHJldHVybiBfbWl4aW4oe1xuXHRcdGRlZXA6IHRydWUsXG5cdFx0aW5oZXJpdGVkOiB0cnVlLFxuXHRcdHNvdXJjZXM6IHNvdXJjZXMsXG5cdFx0dGFyZ2V0OiB0YXJnZXRcblx0fSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdXNpbmcgdGhlIHByb3ZpZGVkIHNvdXJjZSdzIHByb3RvdHlwZSBhcyB0aGUgcHJvdG90eXBlIGZvciB0aGUgbmV3IG9iamVjdCwgYW5kIHRoZW5cbiAqIGRlZXAgY29waWVzIHRoZSBwcm92aWRlZCBzb3VyY2UncyB2YWx1ZXMgaW50byB0aGUgbmV3IHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFRoZSBvYmplY3QgdG8gZHVwbGljYXRlXG4gKiBAcmV0dXJuIFRoZSBuZXcgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGU8VCBleHRlbmRzIHt9Pihzb3VyY2U6IFQpOiBUIHtcblx0Y29uc3QgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKSk7XG5cblx0cmV0dXJuIGRlZXBNaXhpbih0YXJnZXQsIHNvdXJjZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBhIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSBiIFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWU7IGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZGVudGljYWwoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRhID09PSBiIHx8XG5cdFx0LyogYm90aCB2YWx1ZXMgYXJlIE5hTiAqL1xuXHRcdChhICE9PSBhICYmIGIgIT09IGIpXG5cdCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYmluZHMgYSBtZXRob2QgdG8gdGhlIHNwZWNpZmllZCBvYmplY3QgYXQgcnVudGltZS4gVGhpcyBpcyBzaW1pbGFyIHRvXG4gKiBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgLCBidXQgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIGl0IHRha2VzIHRoZSBuYW1lIG9mIGEgbWV0aG9kIG9uIGFuIG9iamVjdC5cbiAqIEFzIGEgcmVzdWx0LCB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgYGxhdGVCaW5kYCB3aWxsIGFsd2F5cyBjYWxsIHRoZSBmdW5jdGlvbiBjdXJyZW50bHkgYXNzaWduZWQgdG9cbiAqIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgb24gdGhlIG9iamVjdCBhcyBvZiB0aGUgbW9tZW50IHRoZSBmdW5jdGlvbiBpdCByZXR1cm5zIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2UgVGhlIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gbWV0aG9kIFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgb24gdGhlIGNvbnRleHQgb2JqZWN0IHRvIGJpbmQgdG8gaXRzZWxmXG4gKiBAcGFyYW0gc3VwcGxpZWRBcmdzIEFuIG9wdGlvbmFsIGFycmF5IG9mIHZhbHVlcyB0byBwcmVwZW5kIHRvIHRoZSBgaW5zdGFuY2VbbWV0aG9kXWAgYXJndW1lbnRzIGxpc3RcbiAqIEByZXR1cm4gVGhlIGJvdW5kIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXRlQmluZChpbnN0YW5jZToge30sIG1ldGhvZDogc3RyaW5nLCAuLi5zdXBwbGllZEFyZ3M6IGFueVtdKTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkge1xuXHRyZXR1cm4gc3VwcGxpZWRBcmdzLmxlbmd0aFxuXHRcdD8gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNvbnN0IGFyZ3M6IGFueVtdID0gYXJndW1lbnRzLmxlbmd0aCA/IHN1cHBsaWVkQXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IHN1cHBsaWVkQXJncztcblxuXHRcdFx0XHQvLyBUUzcwMTdcblx0XHRcdFx0cmV0dXJuICg8YW55Pmluc3RhbmNlKVttZXRob2RdLmFwcGx5KGluc3RhbmNlLCBhcmdzKTtcblx0XHRcdH1cblx0XHQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBUUzcwMTdcblx0XHRcdFx0cmV0dXJuICg8YW55Pmluc3RhbmNlKVttZXRob2RdLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuXHRcdFx0fTtcbn1cblxuLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBhbGwgZW51bWVyYWJsZSAob3duIG9yIGluaGVyaXRlZCkgcHJvcGVydGllcyBvZiBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAqIHRhcmdldCBvYmplY3QuXG4gKlxuICogQHJldHVybiBUaGUgbW9kaWZpZWQgdGFyZ2V0IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWl4aW48VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9LCBYIGV4dGVuZHMge30sIFkgZXh0ZW5kcyB7fSwgWiBleHRlbmRzIHt9Pihcblx0dGFyZ2V0OiBULFxuXHRzb3VyY2UxOiBVLFxuXHRzb3VyY2UyOiBWLFxuXHRzb3VyY2UzOiBXLFxuXHRzb3VyY2U0OiBYLFxuXHRzb3VyY2U1OiBZLFxuXHRzb3VyY2U2OiBaXG4pOiBUICYgVSAmIFYgJiBXICYgWCAmIFkgJiBaO1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30sIFcgZXh0ZW5kcyB7fSwgWCBleHRlbmRzIHt9LCBZIGV4dGVuZHMge30+KFxuXHR0YXJnZXQ6IFQsXG5cdHNvdXJjZTE6IFUsXG5cdHNvdXJjZTI6IFYsXG5cdHNvdXJjZTM6IFcsXG5cdHNvdXJjZTQ6IFgsXG5cdHNvdXJjZTU6IFlcbik6IFQgJiBVICYgViAmIFcgJiBYICYgWTtcbmV4cG9ydCBmdW5jdGlvbiBtaXhpbjxUIGV4dGVuZHMge30sIFUgZXh0ZW5kcyB7fSwgViBleHRlbmRzIHt9LCBXIGV4dGVuZHMge30sIFggZXh0ZW5kcyB7fT4oXG5cdHRhcmdldDogVCxcblx0c291cmNlMTogVSxcblx0c291cmNlMjogVixcblx0c291cmNlMzogVyxcblx0c291cmNlNDogWFxuKTogVCAmIFUgJiBWICYgVyAmIFg7XG5leHBvcnQgZnVuY3Rpb24gbWl4aW48VCBleHRlbmRzIHt9LCBVIGV4dGVuZHMge30sIFYgZXh0ZW5kcyB7fSwgVyBleHRlbmRzIHt9Pihcblx0dGFyZ2V0OiBULFxuXHRzb3VyY2UxOiBVLFxuXHRzb3VyY2UyOiBWLFxuXHRzb3VyY2UzOiBXXG4pOiBUICYgVSAmIFYgJiBXO1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyB7fSwgVSBleHRlbmRzIHt9LCBWIGV4dGVuZHMge30+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogVik6IFQgJiBVICYgVjtcbmV4cG9ydCBmdW5jdGlvbiBtaXhpbjxUIGV4dGVuZHMge30sIFUgZXh0ZW5kcyB7fT4odGFyZ2V0OiBULCBzb3VyY2U6IFUpOiBUICYgVTtcbmV4cG9ydCBmdW5jdGlvbiBtaXhpbih0YXJnZXQ6IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnkge1xuXHRyZXR1cm4gX21peGluKHtcblx0XHRkZWVwOiBmYWxzZSxcblx0XHRpbmhlcml0ZWQ6IHRydWUsXG5cdFx0c291cmNlczogc291cmNlcyxcblx0XHR0YXJnZXQ6IHRhcmdldFxuXHR9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggaW52b2tlcyB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzIHByZXBlbmRlZCB0byBpdHMgYXJndW1lbnQgbGlzdC5cbiAqIExpa2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCwgYnV0IGRvZXMgbm90IGFsdGVyIGV4ZWN1dGlvbiBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXRGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBib3VuZFxuICogQHBhcmFtIHN1cHBsaWVkQXJncyBBbiBvcHRpb25hbCBhcnJheSBvZiBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aGUgYHRhcmdldEZ1bmN0aW9uYCBhcmd1bWVudHMgbGlzdFxuICogQHJldHVybiBUaGUgYm91bmQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWwodGFyZ2V0RnVuY3Rpb246ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCAuLi5zdXBwbGllZEFyZ3M6IGFueVtdKTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGhpczogYW55KSB7XG5cdFx0Y29uc3QgYXJnczogYW55W10gPSBhcmd1bWVudHMubGVuZ3RoID8gc3VwcGxpZWRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpIDogc3VwcGxpZWRBcmdzO1xuXG5cdFx0cmV0dXJuIHRhcmdldEZ1bmN0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBkZXN0cm95IG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgY2FsbHMgdGhlIHBhc3NlZC1pbiBkZXN0cnVjdG9yLlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGNyZWF0aW5nIFwicmVtb3ZlXCIgLyBcImRlc3Ryb3lcIiBoYW5kbGVycyBmb3JcbiAqIGV2ZW50IGxpc3RlbmVycywgdGltZXJzLCBldGMuXG4gKlxuICogQHBhcmFtIGRlc3RydWN0b3IgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGhhbmRsZSdzIGBkZXN0cm95YCBtZXRob2QgaXMgaW52b2tlZFxuICogQHJldHVybiBUaGUgaGFuZGxlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGFuZGxlKGRlc3RydWN0b3I6ICgpID0+IHZvaWQpOiBIYW5kbGUge1xuXHRsZXQgY2FsbGVkID0gZmFsc2U7XG5cdHJldHVybiB7XG5cdFx0ZGVzdHJveTogZnVuY3Rpb24odGhpczogSGFuZGxlKSB7XG5cdFx0XHRpZiAoIWNhbGxlZCkge1xuXHRcdFx0XHRjYWxsZWQgPSB0cnVlO1xuXHRcdFx0XHRkZXN0cnVjdG9yKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBzaW5nbGUgaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVzdHJveSBtdWx0aXBsZSBoYW5kbGVzIHNpbXVsdGFuZW91c2x5LlxuICpcbiAqIEBwYXJhbSBoYW5kbGVzIEFuIGFycmF5IG9mIGhhbmRsZXMgd2l0aCBgZGVzdHJveWAgbWV0aG9kc1xuICogQHJldHVybiBUaGUgaGFuZGxlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9zaXRlSGFuZGxlKC4uLmhhbmRsZXM6IEhhbmRsZVtdKTogSGFuZGxlIHtcblx0cmV0dXJuIGNyZWF0ZUhhbmRsZShmdW5jdGlvbigpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGhhbmRsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhbmRsZXNbaV0uZGVzdHJveSgpO1xuXHRcdH1cblx0fSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gbGFuZy50cyIsImltcG9ydCBoYXMsIHsgYWRkIH0gZnJvbSAnLi4vLi4vaGFzL2hhcyc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJy4uL2dsb2JhbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGhhcztcbmV4cG9ydCAqIGZyb20gJy4uLy4uL2hhcy9oYXMnO1xuXG4vKiBFQ01BU2NyaXB0IDYgYW5kIDcgRmVhdHVyZXMgKi9cblxuLyogQXJyYXkgKi9cbmFkZChcblx0J2VzNi1hcnJheScsXG5cdCgpID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0Wydmcm9tJywgJ29mJ10uZXZlcnkoKGtleSkgPT4ga2V5IGluIGdsb2JhbC5BcnJheSkgJiZcblx0XHRcdFsnZmluZEluZGV4JywgJ2ZpbmQnLCAnY29weVdpdGhpbiddLmV2ZXJ5KChrZXkpID0+IGtleSBpbiBnbG9iYWwuQXJyYXkucHJvdG90eXBlKVxuXHRcdCk7XG5cdH0sXG5cdHRydWVcbik7XG5cbmFkZChcblx0J2VzNi1hcnJheS1maWxsJyxcblx0KCkgPT4ge1xuXHRcdGlmICgnZmlsbCcgaW4gZ2xvYmFsLkFycmF5LnByb3RvdHlwZSkge1xuXHRcdFx0LyogU29tZSB2ZXJzaW9ucyBvZiBTYWZhcmkgZG8gbm90IHByb3Blcmx5IGltcGxlbWVudCB0aGlzICovXG5cdFx0XHRyZXR1cm4gKDxhbnk+WzFdKS5maWxsKDksIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSlbMF0gPT09IDE7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0dHJ1ZVxuKTtcblxuYWRkKCdlczctYXJyYXknLCAoKSA9PiAnaW5jbHVkZXMnIGluIGdsb2JhbC5BcnJheS5wcm90b3R5cGUsIHRydWUpO1xuXG4vKiBNYXAgKi9cbmFkZChcblx0J2VzNi1tYXAnLFxuXHQoKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBnbG9iYWwuTWFwID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvKlxuXHRcdElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgTWFwIGZ1bmN0aW9uYWxpdHlcblx0XHRXZSB3cmFwIHRoaXMgaW4gYSB0cnkvY2F0Y2ggYmVjYXVzZSBzb21ldGltZXMgdGhlIE1hcCBjb25zdHJ1Y3RvciBleGlzdHMsIGJ1dCBkb2VzIG5vdFxuXHRcdHRha2UgYXJndW1lbnRzIChpT1MgOC40KVxuXHRcdCAqL1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgbWFwID0gbmV3IGdsb2JhbC5NYXAoW1swLCAxXV0pO1xuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0bWFwLmhhcygwKSAmJlxuXHRcdFx0XHRcdHR5cGVvZiBtYXAua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdFx0XHRcdGhhcygnZXM2LXN5bWJvbCcpICYmXG5cdFx0XHRcdFx0dHlwZW9mIG1hcC52YWx1ZXMgPT09ICdmdW5jdGlvbicgJiZcblx0XHRcdFx0XHR0eXBlb2YgbWFwLmVudHJpZXMgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQ6IG5vdCB0ZXN0aW5nIG9uIGlPUyBhdCB0aGUgbW9tZW50ICovXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG4vKiBNYXRoICovXG5hZGQoXG5cdCdlczYtbWF0aCcsXG5cdCgpID0+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0J2NsejMyJyxcblx0XHRcdCdzaWduJyxcblx0XHRcdCdsb2cxMCcsXG5cdFx0XHQnbG9nMicsXG5cdFx0XHQnbG9nMXAnLFxuXHRcdFx0J2V4cG0xJyxcblx0XHRcdCdjb3NoJyxcblx0XHRcdCdzaW5oJyxcblx0XHRcdCd0YW5oJyxcblx0XHRcdCdhY29zaCcsXG5cdFx0XHQnYXNpbmgnLFxuXHRcdFx0J2F0YW5oJyxcblx0XHRcdCd0cnVuYycsXG5cdFx0XHQnZnJvdW5kJyxcblx0XHRcdCdjYnJ0Jyxcblx0XHRcdCdoeXBvdCdcblx0XHRdLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgZ2xvYmFsLk1hdGhbbmFtZV0gPT09ICdmdW5jdGlvbicpO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG5hZGQoXG5cdCdlczYtbWF0aC1pbXVsJyxcblx0KCkgPT4ge1xuXHRcdGlmICgnaW11bCcgaW4gZ2xvYmFsLk1hdGgpIHtcblx0XHRcdC8qIFNvbWUgdmVyc2lvbnMgb2YgU2FmYXJpIG9uIGlvcyBkbyBub3QgcHJvcGVybHkgaW1wbGVtZW50IHRoaXMgKi9cblx0XHRcdHJldHVybiAoPGFueT5NYXRoKS5pbXVsKDB4ZmZmZmZmZmYsIDUpID09PSAtNTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG4vKiBPYmplY3QgKi9cbmFkZChcblx0J2VzNi1vYmplY3QnLFxuXHQoKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdGhhcygnZXM2LXN5bWJvbCcpICYmXG5cdFx0XHRbJ2Fzc2lnbicsICdpcycsICdnZXRPd25Qcm9wZXJ0eVN5bWJvbHMnLCAnc2V0UHJvdG90eXBlT2YnXS5ldmVyeShcblx0XHRcdFx0KG5hbWUpID0+IHR5cGVvZiBnbG9iYWwuT2JqZWN0W25hbWVdID09PSAnZnVuY3Rpb24nXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblx0dHJ1ZVxuKTtcblxuYWRkKFxuXHQnZXMyMDE3LW9iamVjdCcsXG5cdCgpID0+IHtcblx0XHRyZXR1cm4gWyd2YWx1ZXMnLCAnZW50cmllcycsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzJ10uZXZlcnkoXG5cdFx0XHQobmFtZSkgPT4gdHlwZW9mIGdsb2JhbC5PYmplY3RbbmFtZV0gPT09ICdmdW5jdGlvbidcblx0XHQpO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG4vKiBPYnNlcnZhYmxlICovXG5hZGQoJ2VzLW9ic2VydmFibGUnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLk9ic2VydmFibGUgIT09ICd1bmRlZmluZWQnLCB0cnVlKTtcblxuLyogUHJvbWlzZSAqL1xuYWRkKCdlczYtcHJvbWlzZScsICgpID0+IHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaGFzKCdlczYtc3ltYm9sJyksIHRydWUpO1xuXG4vKiBTZXQgKi9cbmFkZChcblx0J2VzNi1zZXQnLFxuXHQoKSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBnbG9iYWwuU2V0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvKiBJRTExIGFuZCBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkgYXJlIG1pc3NpbmcgY3JpdGljYWwgRVM2IFNldCBmdW5jdGlvbmFsaXR5ICovXG5cdFx0XHRjb25zdCBzZXQgPSBuZXcgZ2xvYmFsLlNldChbMV0pO1xuXHRcdFx0cmV0dXJuIHNldC5oYXMoMSkgJiYgJ2tleXMnIGluIHNldCAmJiB0eXBlb2Ygc2V0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgaGFzKCdlczYtc3ltYm9sJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0dHJ1ZVxuKTtcblxuLyogU3RyaW5nICovXG5hZGQoXG5cdCdlczYtc3RyaW5nJyxcblx0KCkgPT4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHRbXG5cdFx0XHRcdC8qIHN0YXRpYyBtZXRob2RzICovXG5cdFx0XHRcdCdmcm9tQ29kZVBvaW50J1xuXHRcdFx0XS5ldmVyeSgoa2V5KSA9PiB0eXBlb2YgZ2xvYmFsLlN0cmluZ1trZXldID09PSAnZnVuY3Rpb24nKSAmJlxuXHRcdFx0W1xuXHRcdFx0XHQvKiBpbnN0YW5jZSBtZXRob2RzICovXG5cdFx0XHRcdCdjb2RlUG9pbnRBdCcsXG5cdFx0XHRcdCdub3JtYWxpemUnLFxuXHRcdFx0XHQncmVwZWF0Jyxcblx0XHRcdFx0J3N0YXJ0c1dpdGgnLFxuXHRcdFx0XHQnZW5kc1dpdGgnLFxuXHRcdFx0XHQnaW5jbHVkZXMnXG5cdFx0XHRdLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nLnByb3RvdHlwZVtrZXldID09PSAnZnVuY3Rpb24nKVxuXHRcdCk7XG5cdH0sXG5cdHRydWVcbik7XG5cbmFkZChcblx0J2VzNi1zdHJpbmctcmF3Jyxcblx0KCkgPT4ge1xuXHRcdGZ1bmN0aW9uIGdldENhbGxTaXRlKGNhbGxTaXRlOiBUZW1wbGF0ZVN0cmluZ3NBcnJheSwgLi4uc3Vic3RpdHV0aW9uczogYW55W10pIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFsuLi5jYWxsU2l0ZV07XG5cdFx0XHQocmVzdWx0IGFzIGFueSkucmF3ID0gY2FsbFNpdGUucmF3O1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRpZiAoJ3JhdycgaW4gZ2xvYmFsLlN0cmluZykge1xuXHRcdFx0bGV0IGIgPSAxO1xuXHRcdFx0bGV0IGNhbGxTaXRlID0gZ2V0Q2FsbFNpdGVgYVxcbiR7Yn1gO1xuXG5cdFx0XHQoY2FsbFNpdGUgYXMgYW55KS5yYXcgPSBbJ2FcXFxcbiddO1xuXHRcdFx0Y29uc3Qgc3VwcG9ydHNUcnVuYyA9IGdsb2JhbC5TdHJpbmcucmF3KGNhbGxTaXRlLCA0MikgPT09ICdhOlxcXFxuJztcblxuXHRcdFx0cmV0dXJuIHN1cHBvcnRzVHJ1bmM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG5hZGQoXG5cdCdlczIwMTctc3RyaW5nJyxcblx0KCkgPT4ge1xuXHRcdHJldHVybiBbJ3BhZFN0YXJ0JywgJ3BhZEVuZCddLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nLnByb3RvdHlwZVtrZXldID09PSAnZnVuY3Rpb24nKTtcblx0fSxcblx0dHJ1ZVxuKTtcblxuLyogU3ltYm9sICovXG5hZGQoJ2VzNi1zeW1ib2wnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLlN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbCgpID09PSAnc3ltYm9sJywgdHJ1ZSk7XG5cbi8qIFdlYWtNYXAgKi9cbmFkZChcblx0J2VzNi13ZWFrbWFwJyxcblx0KCkgPT4ge1xuXHRcdGlmICh0eXBlb2YgZ2xvYmFsLldlYWtNYXAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHQvKiBJRTExIGFuZCBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkgYXJlIG1pc3NpbmcgY3JpdGljYWwgRVM2IE1hcCBmdW5jdGlvbmFsaXR5ICovXG5cdFx0XHRjb25zdCBrZXkxID0ge307XG5cdFx0XHRjb25zdCBrZXkyID0ge307XG5cdFx0XHRjb25zdCBtYXAgPSBuZXcgZ2xvYmFsLldlYWtNYXAoW1trZXkxLCAxXV0pO1xuXHRcdFx0T2JqZWN0LmZyZWV6ZShrZXkxKTtcblx0XHRcdHJldHVybiBtYXAuZ2V0KGtleTEpID09PSAxICYmIG1hcC5zZXQoa2V5MiwgMikgPT09IG1hcCAmJiBoYXMoJ2VzNi1zeW1ib2wnKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHR0cnVlXG4pO1xuXG4vKiBNaXNjZWxsYW5lb3VzIGZlYXR1cmVzICovXG5hZGQoJ21pY3JvdGFza3MnLCAoKSA9PiBoYXMoJ2VzNi1wcm9taXNlJykgfHwgaGFzKCdob3N0LW5vZGUnKSB8fCBoYXMoJ2RvbS1tdXRhdGlvbm9ic2VydmVyJyksIHRydWUpO1xuYWRkKFxuXHQncG9zdG1lc3NhZ2UnLFxuXHQoKSA9PiB7XG5cdFx0Ly8gSWYgd2luZG93IGlzIHVuZGVmaW5lZCwgYW5kIHdlIGhhdmUgcG9zdE1lc3NhZ2UsIGl0IHByb2JhYmx5IG1lYW5zIHdlJ3JlIGluIGEgd2ViIHdvcmtlci4gV2ViIHdvcmtlcnMgaGF2ZVxuXHRcdC8vIHBvc3QgbWVzc2FnZSBidXQgaXQgZG9lc24ndCB3b3JrIGhvdyB3ZSBleHBlY3QgaXQgdG8sIHNvIGl0J3MgYmVzdCBqdXN0IHRvIHByZXRlbmQgaXQgZG9lc24ndCBleGlzdC5cblx0XHRyZXR1cm4gdHlwZW9mIGdsb2JhbC53aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBnbG9iYWwucG9zdE1lc3NhZ2UgPT09ICdmdW5jdGlvbic7XG5cdH0sXG5cdHRydWVcbik7XG5hZGQoJ3JhZicsICgpID0+IHR5cGVvZiBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nLCB0cnVlKTtcbmFkZCgnc2V0aW1tZWRpYXRlJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5zZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnLCB0cnVlKTtcblxuLyogRE9NIEZlYXR1cmVzICovXG5cbmFkZChcblx0J2RvbS1tdXRhdGlvbm9ic2VydmVyJyxcblx0KCkgPT4ge1xuXHRcdGlmIChoYXMoJ2hvc3QtYnJvd3NlcicpICYmIEJvb2xlYW4oZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpKSB7XG5cdFx0XHQvLyBJRTExIGhhcyBhbiB1bnJlbGlhYmxlIE11dGF0aW9uT2JzZXJ2ZXIgaW1wbGVtZW50YXRpb24gd2hlcmUgc2V0UHJvcGVydHkoKSBkb2VzIG5vdFxuXHRcdFx0Ly8gZ2VuZXJhdGUgYSBtdXRhdGlvbiBldmVudCwgb2JzZXJ2ZXJzIGNhbiBjcmFzaCwgYW5kIHRoZSBxdWV1ZSBkb2VzIG5vdCBkcmFpblxuXHRcdFx0Ly8gcmVsaWFibHkuIFRoZSBmb2xsb3dpbmcgZmVhdHVyZSB0ZXN0IHdhcyBhZGFwdGVkIGZyb21cblx0XHRcdC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3QxMGtvLzRhY2ViOGM3MTY4MWZkYjI3NWUzM2VmZTVlNTc2YjE0XG5cdFx0XHRjb25zdCBleGFtcGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHQvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSAqL1xuXHRcdFx0Y29uc3QgSG9zdE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcblx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IEhvc3RNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCkge30pO1xuXHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZShleGFtcGxlLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7XG5cblx0XHRcdGV4YW1wbGUuc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnYmxvY2snKTtcblxuXHRcdFx0cmV0dXJuIEJvb2xlYW4ob2JzZXJ2ZXIudGFrZVJlY29yZHMoKS5sZW5ndGgpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdHRydWVcbik7XG5cbmFkZChcblx0J2RvbS13ZWJhbmltYXRpb24nLFxuXHQoKSA9PiBoYXMoJ2hvc3QtYnJvd3NlcicpICYmIGdsb2JhbC5BbmltYXRpb24gIT09IHVuZGVmaW5lZCAmJiBnbG9iYWwuS2V5ZnJhbWVFZmZlY3QgIT09IHVuZGVmaW5lZCxcblx0dHJ1ZVxuKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBoYXMudHMiLCJpbXBvcnQgeyBpc0FycmF5TGlrZSwgSXRlcmFibGUsIEl0ZXJhYmxlSXRlcmF0b3IsIFNoaW1JdGVyYXRvciB9IGZyb20gJy4vaXRlcmF0b3InO1xuaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBpcyBhcyBvYmplY3RJcyB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgJy4vU3ltYm9sJztcblxuZXhwb3J0IGludGVyZmFjZSBNYXA8SywgVj4ge1xuXHQvKipcblx0ICogRGVsZXRlcyBhbGwga2V5cyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB2YWx1ZXMuXG5cdCAqL1xuXHRjbGVhcigpOiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGEgZ2l2ZW4ga2V5IGFuZCBpdHMgYXNzb2NpYXRlZCB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIGtleSBUaGUga2V5IHRvIGRlbGV0ZVxuXHQgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGtleSBleGlzdHMsIGZhbHNlIGlmIGl0IGRvZXMgbm90XG5cdCAqL1xuXHRkZWxldGUoa2V5OiBLKTogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBlYWNoIGtleS92YWx1ZSBwYWlyIGFzIGFuIGFycmF5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIGZvciBlYWNoIGtleS92YWx1ZSBwYWlyIGluIHRoZSBpbnN0YW5jZS5cblx0ICovXG5cdGVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbSywgVl0+O1xuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyBhIGdpdmVuIGZ1bmN0aW9uIGZvciBlYWNoIG1hcCBlbnRyeS4gVGhlIGZ1bmN0aW9uXG5cdCAqIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSBlbGVtZW50IHZhbHVlLCB0aGVcblx0ICogZWxlbWVudCBrZXksIGFuZCB0aGUgYXNzb2NpYXRlZCBNYXAgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBjYWxsYmFja2ZuIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGZvciBlYWNoIG1hcCBlbnRyeSxcblx0ICogQHBhcmFtIHRoaXNBcmcgVGhlIHZhbHVlIHRvIHVzZSBmb3IgYHRoaXNgIGZvciBlYWNoIGV4ZWN1dGlvbiBvZiB0aGUgY2FsYmFja1xuXHQgKi9cblx0Zm9yRWFjaChjYWxsYmFja2ZuOiAodmFsdWU6IFYsIGtleTogSywgbWFwOiBNYXA8SywgVj4pID0+IHZvaWQsIHRoaXNBcmc/OiBhbnkpOiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBrZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBsb29rIHVwXG5cdCAqIEByZXR1cm4gVGhlIHZhbHVlIGlmIG9uZSBleGlzdHMgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRnZXQoa2V5OiBLKTogViB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBlYWNoIGtleSBpbiB0aGUgbWFwLlxuXHQgKlxuXHQgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgdGhlIGluc3RhbmNlJ3Mga2V5cy5cblx0ICovXG5cdGtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxLPjtcblxuXHQvKipcblx0ICogQ2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSBnaXZlbiBrZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBjaGVjayBmb3Jcblx0ICogQHJldHVybiB0cnVlIGlmIHRoZSBrZXkgZXhpc3RzLCBmYWxzZSBpZiBpdCBkb2VzIG5vdFxuXHQgKi9cblx0aGFzKGtleTogSyk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGtleS5cblx0ICpcblx0ICogQHBhcmFtIGtleSBUaGUga2V5IHRvIGRlZmluZSBhIHZhbHVlIHRvXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduXG5cdCAqIEByZXR1cm4gVGhlIE1hcCBpbnN0YW5jZVxuXHQgKi9cblx0c2V0KGtleTogSywgdmFsdWU6IFYpOiB0aGlzO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yga2V5IC8gdmFsdWUgcGFpcnMgaW4gdGhlIE1hcC5cblx0ICovXG5cdHJlYWRvbmx5IHNpemU6IG51bWJlcjtcblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBlYWNoIHZhbHVlIGluIHRoZSBtYXAuXG5cdCAqXG5cdCAqIEByZXR1cm4gQW4gaXRlcmF0b3IgY29udGFpbmluZyB0aGUgaW5zdGFuY2UncyB2YWx1ZXMuXG5cdCAqL1xuXHR2YWx1ZXMoKTogSXRlcmFibGVJdGVyYXRvcjxWPjtcblxuXHQvKiogUmV0dXJucyBhbiBpdGVyYWJsZSBvZiBlbnRyaWVzIGluIHRoZSBtYXAuICovXG5cdFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0ssIFZdPjtcblxuXHRyZWFkb25seSBbU3ltYm9sLnRvU3RyaW5nVGFnXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcENvbnN0cnVjdG9yIHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgTWFwXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKi9cblx0bmV3ICgpOiBNYXA8YW55LCBhbnk+O1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IE1hcFxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICpcblx0ICogQHBhcmFtIGl0ZXJhdG9yXG5cdCAqIEFycmF5IG9yIGl0ZXJhdG9yIGNvbnRhaW5pbmcgdHdvLWl0ZW0gdHVwbGVzIHVzZWQgdG8gaW5pdGlhbGx5IHBvcHVsYXRlIHRoZSBtYXAuXG5cdCAqIFRoZSBmaXJzdCBpdGVtIGluIGVhY2ggdHVwbGUgY29ycmVzcG9uZHMgdG8gdGhlIGtleSBvZiB0aGUgbWFwIGVudHJ5LlxuXHQgKiBUaGUgc2Vjb25kIGl0ZW0gY29ycmVzcG9uZHMgdG8gdGhlIHZhbHVlIG9mIHRoZSBtYXAgZW50cnkuXG5cdCAqL1xuXHRuZXcgPEssIFY+KGl0ZXJhdG9yPzogW0ssIFZdW10pOiBNYXA8SywgVj47XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgTWFwXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcGFyYW0gaXRlcmF0b3Jcblx0ICogQXJyYXkgb3IgaXRlcmF0b3IgY29udGFpbmluZyB0d28taXRlbSB0dXBsZXMgdXNlZCB0byBpbml0aWFsbHkgcG9wdWxhdGUgdGhlIG1hcC5cblx0ICogVGhlIGZpcnN0IGl0ZW0gaW4gZWFjaCB0dXBsZSBjb3JyZXNwb25kcyB0byB0aGUga2V5IG9mIHRoZSBtYXAgZW50cnkuXG5cdCAqIFRoZSBzZWNvbmQgaXRlbSBjb3JyZXNwb25kcyB0byB0aGUgdmFsdWUgb2YgdGhlIG1hcCBlbnRyeS5cblx0ICovXG5cdG5ldyA8SywgVj4oaXRlcmF0b3I6IEl0ZXJhYmxlPFtLLCBWXT4pOiBNYXA8SywgVj47XG5cblx0cmVhZG9ubHkgcHJvdG90eXBlOiBNYXA8YW55LCBhbnk+O1xuXG5cdHJlYWRvbmx5IFtTeW1ib2wuc3BlY2llc106IE1hcENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgbGV0IE1hcDogTWFwQ29uc3RydWN0b3IgPSBnbG9iYWwuTWFwO1xuXG5pZiAoIWhhcygnZXM2LW1hcCcpKSB7XG5cdE1hcCA9IGNsYXNzIE1hcDxLLCBWPiB7XG5cdFx0cHJvdGVjdGVkIHJlYWRvbmx5IF9rZXlzOiBLW10gPSBbXTtcblx0XHRwcm90ZWN0ZWQgcmVhZG9ubHkgX3ZhbHVlczogVltdID0gW107XG5cblx0XHQvKipcblx0XHQgKiBBbiBhbHRlcm5hdGl2ZSB0byBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB1c2luZyBPYmplY3QuaXNcblx0XHQgKiB0byBjaGVjayBmb3IgZXF1YWxpdHkuIFNlZSBodHRwOi8vbXpsLmxhLzF6dUtPMlZcblx0XHQgKi9cblx0XHRwcm90ZWN0ZWQgX2luZGV4T2ZLZXkoa2V5czogS1tdLCBrZXk6IEspOiBudW1iZXIge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKG9iamVjdElzKGtleXNbaV0sIGtleSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblxuXHRcdHN0YXRpYyBbU3ltYm9sLnNwZWNpZXNdID0gTWFwO1xuXG5cdFx0Y29uc3RydWN0b3IoaXRlcmFibGU/OiBBcnJheUxpa2U8W0ssIFZdPiB8IEl0ZXJhYmxlPFtLLCBWXT4pIHtcblx0XHRcdGlmIChpdGVyYWJsZSkge1xuXHRcdFx0XHRpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpdGVyYWJsZVtpXTtcblx0XHRcdFx0XHRcdHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Z2V0IHNpemUoKTogbnVtYmVyIHtcblx0XHRcdHJldHVybiB0aGlzLl9rZXlzLmxlbmd0aDtcblx0XHR9XG5cblx0XHRjbGVhcigpOiB2b2lkIHtcblx0XHRcdHRoaXMuX2tleXMubGVuZ3RoID0gdGhpcy5fdmFsdWVzLmxlbmd0aCA9IDA7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlKGtleTogSyk6IGJvb2xlYW4ge1xuXHRcdFx0Y29uc3QgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XG5cdFx0XHRpZiAoaW5kZXggPCAwKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2tleXMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdHRoaXMuX3ZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0ZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtLLCBWXT4ge1xuXHRcdFx0Y29uc3QgdmFsdWVzID0gdGhpcy5fa2V5cy5tYXAoKGtleTogSywgaTogbnVtYmVyKTogW0ssIFZdID0+IHtcblx0XHRcdFx0cmV0dXJuIFtrZXksIHRoaXMuX3ZhbHVlc1tpXV07XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIG5ldyBTaGltSXRlcmF0b3IodmFsdWVzKTtcblx0XHR9XG5cblx0XHRmb3JFYWNoKGNhbGxiYWNrOiAodmFsdWU6IFYsIGtleTogSywgbWFwSW5zdGFuY2U6IE1hcDxLLCBWPikgPT4gYW55LCBjb250ZXh0Pzoge30pIHtcblx0XHRcdGNvbnN0IGtleXMgPSB0aGlzLl9rZXlzO1xuXHRcdFx0Y29uc3QgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y2FsbGJhY2suY2FsbChjb250ZXh0LCB2YWx1ZXNbaV0sIGtleXNbaV0sIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGdldChrZXk6IEspOiBWIHwgdW5kZWZpbmVkIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xuXHRcdFx0cmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IHRoaXMuX3ZhbHVlc1tpbmRleF07XG5cdFx0fVxuXG5cdFx0aGFzKGtleTogSyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KSA+IC0xO1xuXHRcdH1cblxuXHRcdGtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxLPiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih0aGlzLl9rZXlzKTtcblx0XHR9XG5cblx0XHRzZXQoa2V5OiBLLCB2YWx1ZTogVik6IE1hcDxLLCBWPiB7XG5cdFx0XHRsZXQgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XG5cdFx0XHRpbmRleCA9IGluZGV4IDwgMCA/IHRoaXMuX2tleXMubGVuZ3RoIDogaW5kZXg7XG5cdFx0XHR0aGlzLl9rZXlzW2luZGV4XSA9IGtleTtcblx0XHRcdHRoaXMuX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHZhbHVlcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFY+IHtcblx0XHRcdHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHRoaXMuX3ZhbHVlcyk7XG5cdFx0fVxuXG5cdFx0W1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSywgVl0+IHtcblx0XHRcdHJldHVybiB0aGlzLmVudHJpZXMoKTtcblx0XHR9XG5cblx0XHRbU3ltYm9sLnRvU3RyaW5nVGFnXTogJ01hcCcgPSAnTWFwJztcblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFwO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIE1hcC50cyIsImltcG9ydCB7IFRoZW5hYmxlIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgcXVldWVNaWNyb1Rhc2sgfSBmcm9tICcuL3N1cHBvcnQvcXVldWUnO1xuaW1wb3J0IHsgSXRlcmFibGUgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCAnLi9TeW1ib2wnO1xuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcblxuLyoqXG4gKiBFeGVjdXRvciBpcyB0aGUgaW50ZXJmYWNlIGZvciBmdW5jdGlvbnMgdXNlZCB0byBpbml0aWFsaXplIGEgUHJvbWlzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRvcjxUPiB7XG5cdC8qKlxuXHQgKiBUaGUgZXhlY3V0b3IgZm9yIHRoZSBwcm9taXNlXG5cdCAqXG5cdCAqIEBwYXJhbSByZXNvbHZlIFRoZSByZXNvbHZlciBjYWxsYmFjayBvZiB0aGUgcHJvbWlzZVxuXHQgKiBAcGFyYW0gcmVqZWN0IFRoZSByZWplY3RvciBjYWxsYmFjayBvZiB0aGUgcHJvbWlzZVxuXHQgKi9cblx0KHJlc29sdmU6ICh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKTogdm9pZDtcbn1cblxuZXhwb3J0IGxldCBTaGltUHJvbWlzZTogdHlwZW9mIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcblxuZXhwb3J0IGNvbnN0IGlzVGhlbmFibGUgPSBmdW5jdGlvbiBpc1RoZW5hYmxlPFQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQcm9taXNlTGlrZTxUPiB7XG5cdHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cbmlmICghaGFzKCdlczYtcHJvbWlzZScpKSB7XG5cdGNvbnN0IGVudW0gU3RhdGUge1xuXHRcdEZ1bGZpbGxlZCxcblx0XHRQZW5kaW5nLFxuXHRcdFJlamVjdGVkXG5cdH1cblxuXHRnbG9iYWwuUHJvbWlzZSA9IFNoaW1Qcm9taXNlID0gY2xhc3MgUHJvbWlzZTxUPiBpbXBsZW1lbnRzIFRoZW5hYmxlPFQ+IHtcblx0XHRzdGF0aWMgYWxsKGl0ZXJhYmxlOiBJdGVyYWJsZTxhbnkgfCBQcm9taXNlTGlrZTxhbnk+PiB8IChhbnkgfCBQcm9taXNlTGlrZTxhbnk+KVtdKTogUHJvbWlzZTxhbnk+IHtcblx0XHRcdHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWVzOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRsZXQgY29tcGxldGUgPSAwO1xuXHRcdFx0XHRsZXQgdG90YWwgPSAwO1xuXHRcdFx0XHRsZXQgcG9wdWxhdGluZyA9IHRydWU7XG5cblx0XHRcdFx0ZnVuY3Rpb24gZnVsZmlsbChpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XG5cdFx0XHRcdFx0dmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuXHRcdFx0XHRcdCsrY29tcGxldGU7XG5cdFx0XHRcdFx0ZmluaXNoKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmdW5jdGlvbiBmaW5pc2goKTogdm9pZCB7XG5cdFx0XHRcdFx0aWYgKHBvcHVsYXRpbmcgfHwgY29tcGxldGUgPCB0b3RhbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXNvbHZlKHZhbHVlcyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmdW5jdGlvbiBwcm9jZXNzSXRlbShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiB2b2lkIHtcblx0XHRcdFx0XHQrK3RvdGFsO1xuXHRcdFx0XHRcdGlmIChpc1RoZW5hYmxlKGl0ZW0pKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiBhbiBpdGVtIFByb21pc2UgcmVqZWN0cywgdGhpcyBQcm9taXNlIGlzIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggdGhlIGl0ZW1cblx0XHRcdFx0XHRcdC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXG5cdFx0XHRcdFx0XHRpdGVtLnRoZW4oZnVsZmlsbC5iaW5kKG51bGwsIGluZGV4KSwgcmVqZWN0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4oZnVsZmlsbC5iaW5kKG51bGwsIGluZGV4KSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGkgPSAwO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG5cdFx0XHRcdFx0cHJvY2Vzc0l0ZW0oaSwgdmFsdWUpO1xuXHRcdFx0XHRcdGkrKztcblx0XHRcdFx0fVxuXHRcdFx0XHRwb3B1bGF0aW5nID0gZmFsc2U7XG5cblx0XHRcdFx0ZmluaXNoKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRzdGF0aWMgcmFjZTxUPihpdGVyYWJsZTogSXRlcmFibGU8VCB8IFByb21pc2VMaWtlPFQ+PiB8IChUIHwgUHJvbWlzZUxpa2U8VD4pW10pOiBQcm9taXNlPFRbXT4ge1xuXHRcdFx0cmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uKHJlc29sdmU6ICh2YWx1ZT86IGFueSkgPT4gdm9pZCwgcmVqZWN0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBpdGVyYWJsZSkge1xuXHRcdFx0XHRcdGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgYSBQcm9taXNlIGl0ZW0gcmVqZWN0cywgdGhpcyBQcm9taXNlIGlzIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggdGhlIGl0ZW1cblx0XHRcdFx0XHRcdC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXG5cdFx0XHRcdFx0XHRpdGVtLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4ocmVzb2x2ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRzdGF0aWMgcmVqZWN0KHJlYXNvbj86IGFueSk6IFByb21pc2U8bmV2ZXI+IHtcblx0XHRcdHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdFx0cmVqZWN0KHJlYXNvbik7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRzdGF0aWMgcmVzb2x2ZSgpOiBQcm9taXNlPHZvaWQ+O1xuXHRcdHN0YXRpYyByZXNvbHZlPFQ+KHZhbHVlOiBUIHwgUHJvbWlzZUxpa2U8VD4pOiBQcm9taXNlPFQ+O1xuXHRcdHN0YXRpYyByZXNvbHZlPFQ+KHZhbHVlPzogYW55KTogUHJvbWlzZTxUPiB7XG5cdFx0XHRyZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKDxUPnZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHN0YXRpYyBbU3ltYm9sLnNwZWNpZXNdOiBQcm9taXNlQ29uc3RydWN0b3IgPSBTaGltUHJvbWlzZSBhcyBQcm9taXNlQ29uc3RydWN0b3I7XG5cblx0XHQvKipcblx0XHQgKiBDcmVhdGVzIGEgbmV3IFByb21pc2UuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBleGVjdXRvclxuXHRcdCAqIFRoZSBleGVjdXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgUHJvbWlzZSBpcyBpbnN0YW50aWF0ZWQuIEl0IGlzIHJlc3BvbnNpYmxlIGZvclxuXHRcdCAqIHN0YXJ0aW5nIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoZW4gaXQgaXMgaW52b2tlZC5cblx0XHQgKlxuXHRcdCAqIFRoZSBleGVjdXRvciBtdXN0IGNhbGwgZWl0aGVyIHRoZSBwYXNzZWQgYHJlc29sdmVgIGZ1bmN0aW9uIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZFxuXHRcdCAqIHN1Y2Nlc3NmdWxseSwgb3IgdGhlIGByZWplY3RgIGZ1bmN0aW9uIHdoZW4gdGhlIG9wZXJhdGlvbiBmYWlscy5cblx0XHQgKi9cblx0XHRjb25zdHJ1Y3RvcihleGVjdXRvcjogRXhlY3V0b3I8VD4pIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogSWYgdHJ1ZSwgdGhlIHJlc29sdXRpb24gb2YgdGhpcyBwcm9taXNlIGlzIGNoYWluZWQgKFwibG9ja2VkIGluXCIpIHRvIGFub3RoZXIgcHJvbWlzZS5cblx0XHRcdCAqL1xuXHRcdFx0bGV0IGlzQ2hhaW5lZCA9IGZhbHNlO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIFdoZXRoZXIgb3Igbm90IHRoaXMgcHJvbWlzZSBpcyBpbiBhIHJlc29sdmVkIHN0YXRlLlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBpc1Jlc29sdmVkID0gKCk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdGF0ZSAhPT0gU3RhdGUuUGVuZGluZyB8fCBpc0NoYWluZWQ7XG5cdFx0XHR9O1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIENhbGxiYWNrcyB0aGF0IHNob3VsZCBiZSBpbnZva2VkIG9uY2UgdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC5cblx0XHRcdCAqL1xuXHRcdFx0bGV0IGNhbGxiYWNrczogbnVsbCB8IChBcnJheTwoKSA9PiB2b2lkPikgPSBbXTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbml0aWFsbHkgcHVzaGVzIGNhbGxiYWNrcyBvbnRvIGEgcXVldWUgZm9yIGV4ZWN1dGlvbiBvbmNlIHRoaXMgcHJvbWlzZSBzZXR0bGVzLiBBZnRlciB0aGUgcHJvbWlzZSBzZXR0bGVzLFxuXHRcdFx0ICogZW5xdWV1ZXMgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgZXZlbnQgbG9vcCB0dXJuLlxuXHRcdFx0ICovXG5cdFx0XHRsZXQgd2hlbkZpbmlzaGVkID0gZnVuY3Rpb24oY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrcykge1xuXHRcdFx0XHRcdGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBTZXR0bGVzIHRoaXMgcHJvbWlzZS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXG5cdFx0XHQgKiBAcGFyYW0ge1R8YW55fSB2YWx1ZSBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgcHJvbWlzZS5cblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgc2V0dGxlID0gKG5ld1N0YXRlOiBTdGF0ZSwgdmFsdWU6IGFueSk6IHZvaWQgPT4ge1xuXHRcdFx0XHQvLyBBIHByb21pc2UgY2FuIG9ubHkgYmUgc2V0dGxlZCBvbmNlLlxuXHRcdFx0XHRpZiAodGhpcy5zdGF0ZSAhPT0gU3RhdGUuUGVuZGluZykge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcblx0XHRcdFx0dGhpcy5yZXNvbHZlZFZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdHdoZW5GaW5pc2hlZCA9IHF1ZXVlTWljcm9UYXNrO1xuXG5cdFx0XHRcdC8vIE9ubHkgZW5xdWV1ZSBhIGNhbGxiYWNrIHJ1bm5lciBpZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHNvIHRoYXQgaW5pdGlhbGx5IGZ1bGZpbGxlZCBQcm9taXNlcyBkb24ndCBoYXZlIHRvXG5cdFx0XHRcdC8vIHdhaXQgYW4gZXh0cmEgdHVybi5cblx0XHRcdFx0aWYgKGNhbGxiYWNrcyAmJiBjYWxsYmFja3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHF1ZXVlTWljcm9UYXNrKGZ1bmN0aW9uKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrcykge1xuXHRcdFx0XHRcdFx0XHRsZXQgY291bnQgPSBjYWxsYmFja3MubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcblx0XHRcdFx0XHRcdFx0XHRjYWxsYmFja3NbaV0uY2FsbChudWxsKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjYWxsYmFja3MgPSBudWxsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJlc29sdmVzIHRoaXMgcHJvbWlzZS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXG5cdFx0XHQgKiBAcGFyYW0ge1R8YW55fSB2YWx1ZSBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgcHJvbWlzZS5cblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgcmVzb2x2ZSA9IChuZXdTdGF0ZTogU3RhdGUsIHZhbHVlOiBhbnkpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKGlzUmVzb2x2ZWQoKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc1RoZW5hYmxlKHZhbHVlKSkge1xuXHRcdFx0XHRcdHZhbHVlLnRoZW4oc2V0dGxlLmJpbmQobnVsbCwgU3RhdGUuRnVsZmlsbGVkKSwgc2V0dGxlLmJpbmQobnVsbCwgU3RhdGUuUmVqZWN0ZWQpKTtcblx0XHRcdFx0XHRpc0NoYWluZWQgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNldHRsZShuZXdTdGF0ZSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLnRoZW4gPSA8VFJlc3VsdDEgPSBULCBUUmVzdWx0MiA9IG5ldmVyPihcblx0XHRcdFx0b25GdWxmaWxsZWQ/OiAoKHZhbHVlOiBUKSA9PiBUUmVzdWx0MSB8IFByb21pc2VMaWtlPFRSZXN1bHQxPikgfCB1bmRlZmluZWQgfCBudWxsLFxuXHRcdFx0XHRvblJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgdW5kZWZpbmVkIHwgbnVsbFxuXHRcdFx0KTogUHJvbWlzZTxUUmVzdWx0MSB8IFRSZXN1bHQyPiA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0Ly8gd2hlbkZpbmlzaGVkIGluaXRpYWxseSBxdWV1ZXMgdXAgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gYWZ0ZXIgdGhlIHByb21pc2UgaGFzIHNldHRsZWQuIE9uY2UgdGhlXG5cdFx0XHRcdFx0Ly8gcHJvbWlzZSBoYXMgc2V0dGxlZCwgd2hlbkZpbmlzaGVkIHdpbGwgc2NoZWR1bGUgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgdHVybiB0aHJvdWdoIHRoZVxuXHRcdFx0XHRcdC8vIGV2ZW50IGxvb3AuXG5cdFx0XHRcdFx0d2hlbkZpbmlzaGVkKCgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGNhbGxiYWNrOiAoKHZhbHVlPzogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkIHwgbnVsbCA9XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUgPT09IFN0YXRlLlJlamVjdGVkID8gb25SZWplY3RlZCA6IG9uRnVsZmlsbGVkO1xuXG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShjYWxsYmFjayh0aGlzLnJlc29sdmVkVmFsdWUpKTtcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IFN0YXRlLlJlamVjdGVkKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0aGlzLnJlc29sdmVkVmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0aGlzLnJlc29sdmVkVmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGV4ZWN1dG9yKHJlc29sdmUuYmluZChudWxsLCBTdGF0ZS5GdWxmaWxsZWQpLCByZXNvbHZlLmJpbmQobnVsbCwgU3RhdGUuUmVqZWN0ZWQpKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHNldHRsZShTdGF0ZS5SZWplY3RlZCwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNhdGNoPFRSZXN1bHQgPSBuZXZlcj4oXG5cdFx0XHRvblJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdCB8IFByb21pc2VMaWtlPFRSZXN1bHQ+KSB8IHVuZGVmaW5lZCB8IG51bGxcblx0XHQpOiBQcm9taXNlPFQgfCBUUmVzdWx0PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBwcm9taXNlLlxuXHRcdCAqL1xuXHRcdHByaXZhdGUgc3RhdGUgPSBTdGF0ZS5QZW5kaW5nO1xuXG5cdFx0LyoqXG5cdFx0ICogVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHByb21pc2UuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7VHxhbnl9XG5cdFx0ICovXG5cdFx0cHJpdmF0ZSByZXNvbHZlZFZhbHVlOiBhbnk7XG5cblx0XHR0aGVuOiA8VFJlc3VsdDEgPSBULCBUUmVzdWx0MiA9IG5ldmVyPihcblx0XHRcdG9uZnVsZmlsbGVkPzogKCh2YWx1ZTogVCkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgdW5kZWZpbmVkIHwgbnVsbCxcblx0XHRcdG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCB1bmRlZmluZWQgfCBudWxsXG5cdFx0KSA9PiBQcm9taXNlPFRSZXN1bHQxIHwgVFJlc3VsdDI+O1xuXG5cdFx0W1N5bWJvbC50b1N0cmluZ1RhZ106ICdQcm9taXNlJyA9ICdQcm9taXNlJztcblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2hpbVByb21pc2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gUHJvbWlzZS50cyIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgaXNBcnJheUxpa2UsIEl0ZXJhYmxlLCBJdGVyYWJsZUl0ZXJhdG9yLCBTaGltSXRlcmF0b3IgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgJy4vU3ltYm9sJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXQ8VD4ge1xuXHQvKipcblx0ICogQWRkcyBhIGB2YWx1ZWAgdG8gdGhlIGBTZXRgXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYWRkIHRvIHRoZSBzZXRcblx0ICogQHJldHVybnMgVGhlIGluc3RhbmNlIG9mIHRoZSBgU2V0YFxuXHQgKi9cblx0YWRkKHZhbHVlOiBUKTogdGhpcztcblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbGwgdGhlIHZhbHVlcyBmcm9tIHRoZSBgU2V0YC5cblx0ICovXG5cdGNsZWFyKCk6IHZvaWQ7XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBgdmFsdWVgIGZyb20gdGhlIHNldFxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHJlbW92ZWRcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSB3YXMgcmVtb3ZlZFxuXHQgKi9cblx0ZGVsZXRlKHZhbHVlOiBUKTogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBlYWNoIGVudHJ5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIEFuIGl0ZXJhdG9yIGZvciBlYWNoIGtleS92YWx1ZSBwYWlyIGluIHRoZSBpbnN0YW5jZS5cblx0ICovXG5cdGVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbVCwgVF0+O1xuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyBhIGdpdmVuIGZ1bmN0aW9uIGZvciBlYWNoIHNldCBlbnRyeS4gVGhlIGZ1bmN0aW9uXG5cdCAqIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSBlbGVtZW50IHZhbHVlLCB0aGVcblx0ICogZWxlbWVudCBrZXksIGFuZCB0aGUgYXNzb2NpYXRlZCBgU2V0YCBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIGNhbGxiYWNrZm4gVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZm9yIGVhY2ggbWFwIGVudHJ5LFxuXHQgKiBAcGFyYW0gdGhpc0FyZyBUaGUgdmFsdWUgdG8gdXNlIGZvciBgdGhpc2AgZm9yIGVhY2ggZXhlY3V0aW9uIG9mIHRoZSBjYWxiYWNrXG5cdCAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrZm46ICh2YWx1ZTogVCwgdmFsdWUyOiBULCBzZXQ6IFNldDxUPikgPT4gdm9pZCwgdGhpc0FyZz86IGFueSk6IHZvaWQ7XG5cblx0LyoqXG5cdCAqIElkZW50aWZpZXMgaWYgYSB2YWx1ZSBpcyBwYXJ0IG9mIHRoZSBzZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2tcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBwYXJ0IG9mIHRoZSBzZXQgb3RoZXJ3aXNlIGBmYWxzZWBcblx0ICovXG5cdGhhcyh2YWx1ZTogVCk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERlc3BpdGUgaXRzIG5hbWUsIHJldHVybnMgYW4gaXRlcmFibGUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgc2V0LFxuXHQgKi9cblx0a2V5cygpOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+O1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIGluIHRoZSBgU2V0YC5cblx0ICovXG5cdHJlYWRvbmx5IHNpemU6IG51bWJlcjtcblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBpdGVyYWJsZSBvZiB2YWx1ZXMgaW4gdGhlIHNldC5cblx0ICovXG5cdHZhbHVlcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+O1xuXG5cdC8qKiBJdGVyYXRlcyBvdmVyIHZhbHVlcyBpbiB0aGUgc2V0LiAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+O1xuXG5cdHJlYWRvbmx5IFtTeW1ib2wudG9TdHJpbmdUYWddOiAnU2V0Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXRDb25zdHJ1Y3RvciB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFNldFxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICovXG5cdG5ldyAoKTogU2V0PGFueT47XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgU2V0XG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcGFyYW0gaXRlcmF0b3IgVGhlIGl0ZXJhYmxlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplIHRoZSBzZXQgd2l0aFxuXHQgKi9cblx0bmV3IDxUPihpdGVyYXRvcj86IFRbXSk6IFNldDxUPjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBTZXRcblx0ICpcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqXG5cdCAqIEBwYXJhbSBpdGVyYXRvciBUaGUgaXRlcmFibGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUgdGhlIHNldCB3aXRoXG5cdCAqL1xuXHRuZXcgPFQ+KGl0ZXJhdG9yOiBJdGVyYWJsZTxUPik6IFNldDxUPjtcblxuXHRyZWFkb25seSBwcm90b3R5cGU6IFNldDxhbnk+O1xufVxuXG5leHBvcnQgbGV0IFNldDogU2V0Q29uc3RydWN0b3IgPSBnbG9iYWwuU2V0O1xuXG5pZiAoIWhhcygnZXM2LXNldCcpKSB7XG5cdFNldCA9IGNsYXNzIFNldDxUPiB7XG5cdFx0cHJpdmF0ZSByZWFkb25seSBfc2V0RGF0YTogVFtdID0gW107XG5cblx0XHRzdGF0aWMgW1N5bWJvbC5zcGVjaWVzXSA9IFNldDtcblxuXHRcdGNvbnN0cnVjdG9yKGl0ZXJhYmxlPzogQXJyYXlMaWtlPFQ+IHwgSXRlcmFibGU8VD4pIHtcblx0XHRcdGlmIChpdGVyYWJsZSkge1xuXHRcdFx0XHRpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0dGhpcy5hZGQoaXRlcmFibGVbaV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmFkZCh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YWRkKHZhbHVlOiBUKTogdGhpcyB7XG5cdFx0XHRpZiAodGhpcy5oYXModmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fc2V0RGF0YS5wdXNoKHZhbHVlKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNsZWFyKCk6IHZvaWQge1xuXHRcdFx0dGhpcy5fc2V0RGF0YS5sZW5ndGggPSAwO1xuXHRcdH1cblxuXHRcdGRlbGV0ZSh2YWx1ZTogVCk6IGJvb2xlYW4ge1xuXHRcdFx0Y29uc3QgaWR4ID0gdGhpcy5fc2V0RGF0YS5pbmRleE9mKHZhbHVlKTtcblx0XHRcdGlmIChpZHggPT09IC0xKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3NldERhdGEuc3BsaWNlKGlkeCwgMSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W1QsIFRdPiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNoaW1JdGVyYXRvcjxbYW55LCBhbnldPih0aGlzLl9zZXREYXRhLm1hcDxbYW55LCBhbnldPigodmFsdWUpID0+IFt2YWx1ZSwgdmFsdWVdKSk7XG5cdFx0fVxuXG5cdFx0Zm9yRWFjaChjYWxsYmFja2ZuOiAodmFsdWU6IFQsIGluZGV4OiBULCBzZXQ6IFNldDxUPikgPT4gdm9pZCwgdGhpc0FyZz86IGFueSk6IHZvaWQge1xuXHRcdFx0Y29uc3QgaXRlcmF0b3IgPSB0aGlzLnZhbHVlcygpO1xuXHRcdFx0bGV0IHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcblx0XHRcdHdoaWxlICghcmVzdWx0LmRvbmUpIHtcblx0XHRcdFx0Y2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsIHJlc3VsdC52YWx1ZSwgcmVzdWx0LnZhbHVlLCB0aGlzKTtcblx0XHRcdFx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhhcyh2YWx1ZTogVCk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3NldERhdGEuaW5kZXhPZih2YWx1ZSkgPiAtMTtcblx0XHR9XG5cblx0XHRrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8VD4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTaGltSXRlcmF0b3IodGhpcy5fc2V0RGF0YSk7XG5cdFx0fVxuXG5cdFx0Z2V0IHNpemUoKTogbnVtYmVyIHtcblx0XHRcdHJldHVybiB0aGlzLl9zZXREYXRhLmxlbmd0aDtcblx0XHR9XG5cblx0XHR2YWx1ZXMoKTogSXRlcmFibGVJdGVyYXRvcjxUPiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih0aGlzLl9zZXREYXRhKTtcblx0XHR9XG5cblx0XHRbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcblx0XHRcdHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHRoaXMuX3NldERhdGEpO1xuXHRcdH1cblxuXHRcdFtTeW1ib2wudG9TdHJpbmdUYWddOiAnU2V0JyA9ICdTZXQnO1xuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZXQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gU2V0LnRzIiwiaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHsgZ2V0VmFsdWVEZXNjcmlwdG9yIH0gZnJvbSAnLi9zdXBwb3J0L3V0aWwnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBTeW1ib2xDb25zdHJ1Y3RvciB7XG5cdFx0b2JzZXJ2YWJsZTogc3ltYm9sO1xuXHR9XG59XG5cbmV4cG9ydCBsZXQgU3ltYm9sOiBTeW1ib2xDb25zdHJ1Y3RvciA9IGdsb2JhbC5TeW1ib2w7XG5cbmlmICghaGFzKCdlczYtc3ltYm9sJykpIHtcblx0LyoqXG5cdCAqIFRocm93cyBpZiB0aGUgdmFsdWUgaXMgbm90IGEgc3ltYm9sLCB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBTaGltXG5cdCAqIEBwYXJhbSAge2FueX0gICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXG5cdCAqIEByZXR1cm4ge3N5bWJvbH0gICAgICAgUmV0dXJucyB0aGUgc3ltYm9sIG9yIHRocm93c1xuXHQgKi9cblx0Y29uc3QgdmFsaWRhdGVTeW1ib2wgPSBmdW5jdGlvbiB2YWxpZGF0ZVN5bWJvbCh2YWx1ZTogYW55KTogc3ltYm9sIHtcblx0XHRpZiAoIWlzU3ltYm9sKHZhbHVlKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcih2YWx1ZSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fTtcblxuXHRjb25zdCBkZWZpbmVQcm9wZXJ0aWVzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG5cdGNvbnN0IGRlZmluZVByb3BlcnR5OiAoXG5cdFx0bzogYW55LFxuXHRcdHA6IHN0cmluZyB8IHN5bWJvbCxcblx0XHRhdHRyaWJ1dGVzOiBQcm9wZXJ0eURlc2NyaXB0b3IgJiBUaGlzVHlwZTxhbnk+XG5cdCkgPT4gYW55ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5IGFzIGFueTtcblx0Y29uc3QgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuXHRjb25zdCBvYmpQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuXG5cdGNvbnN0IGdsb2JhbFN5bWJvbHM6IHsgW2tleTogc3RyaW5nXTogc3ltYm9sIH0gPSB7fTtcblxuXHRjb25zdCBnZXRTeW1ib2xOYW1lID0gKGZ1bmN0aW9uKCkge1xuXHRcdGNvbnN0IGNyZWF0ZWQgPSBjcmVhdGUobnVsbCk7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGRlc2M6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG5cdFx0XHRsZXQgcG9zdGZpeCA9IDA7XG5cdFx0XHRsZXQgbmFtZTogc3RyaW5nO1xuXHRcdFx0d2hpbGUgKGNyZWF0ZWRbU3RyaW5nKGRlc2MpICsgKHBvc3RmaXggfHwgJycpXSkge1xuXHRcdFx0XHQrK3Bvc3RmaXg7XG5cdFx0XHR9XG5cdFx0XHRkZXNjICs9IFN0cmluZyhwb3N0Zml4IHx8ICcnKTtcblx0XHRcdGNyZWF0ZWRbZGVzY10gPSB0cnVlO1xuXHRcdFx0bmFtZSA9ICdAQCcgKyBkZXNjO1xuXG5cdFx0XHQvLyBGSVhNRTogVGVtcG9yYXJ5IGd1YXJkIHVudGlsIHRoZSBkdXBsaWNhdGUgZXhlY3V0aW9uIHdoZW4gdGVzdGluZyBjYW4gYmVcblx0XHRcdC8vIHBpbm5lZCBkb3duLlxuXHRcdFx0aWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9ialByb3RvdHlwZSwgbmFtZSkpIHtcblx0XHRcdFx0ZGVmaW5lUHJvcGVydHkob2JqUHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRcdFx0c2V0OiBmdW5jdGlvbih0aGlzOiBTeW1ib2wsIHZhbHVlOiBhbnkpIHtcblx0XHRcdFx0XHRcdGRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIGdldFZhbHVlRGVzY3JpcHRvcih2YWx1ZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH07XG5cdH0pKCk7XG5cblx0Y29uc3QgSW50ZXJuYWxTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2wodGhpczogYW55LCBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bWJlcik6IHN5bWJvbCB7XG5cdFx0aWYgKHRoaXMgaW5zdGFuY2VvZiBJbnRlcm5hbFN5bWJvbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcblx0XHR9XG5cdFx0cmV0dXJuIFN5bWJvbChkZXNjcmlwdGlvbik7XG5cdH07XG5cblx0U3ltYm9sID0gZ2xvYmFsLlN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCh0aGlzOiBTeW1ib2wsIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVtYmVyKTogc3ltYm9sIHtcblx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIFN5bWJvbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcblx0XHR9XG5cdFx0Y29uc3Qgc3ltID0gT2JqZWN0LmNyZWF0ZShJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUpO1xuXHRcdGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKGRlc2NyaXB0aW9uKTtcblx0XHRyZXR1cm4gZGVmaW5lUHJvcGVydGllcyhzeW0sIHtcblx0XHRcdF9fZGVzY3JpcHRpb25fXzogZ2V0VmFsdWVEZXNjcmlwdG9yKGRlc2NyaXB0aW9uKSxcblx0XHRcdF9fbmFtZV9fOiBnZXRWYWx1ZURlc2NyaXB0b3IoZ2V0U3ltYm9sTmFtZShkZXNjcmlwdGlvbikpXG5cdFx0fSk7XG5cdH0gYXMgU3ltYm9sQ29uc3RydWN0b3I7XG5cblx0LyogRGVjb3JhdGUgdGhlIFN5bWJvbCBmdW5jdGlvbiB3aXRoIHRoZSBhcHByb3ByaWF0ZSBwcm9wZXJ0aWVzICovXG5cdGRlZmluZVByb3BlcnR5KFxuXHRcdFN5bWJvbCxcblx0XHQnZm9yJyxcblx0XHRnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24oa2V5OiBzdHJpbmcpOiBzeW1ib2wge1xuXHRcdFx0aWYgKGdsb2JhbFN5bWJvbHNba2V5XSkge1xuXHRcdFx0XHRyZXR1cm4gZ2xvYmFsU3ltYm9sc1trZXldO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIChnbG9iYWxTeW1ib2xzW2tleV0gPSBTeW1ib2woU3RyaW5nKGtleSkpKTtcblx0XHR9KVxuXHQpO1xuXHRkZWZpbmVQcm9wZXJ0aWVzKFN5bWJvbCwge1xuXHRcdGtleUZvcjogZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uKHN5bTogc3ltYm9sKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRcdGxldCBrZXk6IHN0cmluZztcblx0XHRcdHZhbGlkYXRlU3ltYm9sKHN5bSk7XG5cdFx0XHRmb3IgKGtleSBpbiBnbG9iYWxTeW1ib2xzKSB7XG5cdFx0XHRcdGlmIChnbG9iYWxTeW1ib2xzW2tleV0gPT09IHN5bSkge1xuXHRcdFx0XHRcdHJldHVybiBrZXk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSxcblx0XHRoYXNJbnN0YW5jZTogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ2hhc0luc3RhbmNlJyksIGZhbHNlLCBmYWxzZSksXG5cdFx0aXNDb25jYXRTcHJlYWRhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaXNDb25jYXRTcHJlYWRhYmxlJyksIGZhbHNlLCBmYWxzZSksXG5cdFx0aXRlcmF0b3I6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdpdGVyYXRvcicpLCBmYWxzZSwgZmFsc2UpLFxuXHRcdG1hdGNoOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignbWF0Y2gnKSwgZmFsc2UsIGZhbHNlKSxcblx0XHRvYnNlcnZhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignb2JzZXJ2YWJsZScpLCBmYWxzZSwgZmFsc2UpLFxuXHRcdHJlcGxhY2U6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdyZXBsYWNlJyksIGZhbHNlLCBmYWxzZSksXG5cdFx0c2VhcmNoOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignc2VhcmNoJyksIGZhbHNlLCBmYWxzZSksXG5cdFx0c3BlY2llczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwZWNpZXMnKSwgZmFsc2UsIGZhbHNlKSxcblx0XHRzcGxpdDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwbGl0JyksIGZhbHNlLCBmYWxzZSksXG5cdFx0dG9QcmltaXRpdmU6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCd0b1ByaW1pdGl2ZScpLCBmYWxzZSwgZmFsc2UpLFxuXHRcdHRvU3RyaW5nVGFnOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigndG9TdHJpbmdUYWcnKSwgZmFsc2UsIGZhbHNlKSxcblx0XHR1bnNjb3BhYmxlczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3Vuc2NvcGFibGVzJyksIGZhbHNlLCBmYWxzZSlcblx0fSk7XG5cblx0LyogRGVjb3JhdGUgdGhlIEludGVybmFsU3ltYm9sIG9iamVjdCAqL1xuXHRkZWZpbmVQcm9wZXJ0aWVzKEludGVybmFsU3ltYm9sLnByb3RvdHlwZSwge1xuXHRcdGNvbnN0cnVjdG9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sKSxcblx0XHR0b1N0cmluZzogZ2V0VmFsdWVEZXNjcmlwdG9yKFxuXHRcdFx0ZnVuY3Rpb24odGhpczogeyBfX25hbWVfXzogc3RyaW5nIH0pIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX19uYW1lX187XG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRmYWxzZVxuXHRcdClcblx0fSk7XG5cblx0LyogRGVjb3JhdGUgdGhlIFN5bWJvbC5wcm90b3R5cGUgKi9cblx0ZGVmaW5lUHJvcGVydGllcyhTeW1ib2wucHJvdG90eXBlLCB7XG5cdFx0dG9TdHJpbmc6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbih0aGlzOiBTeW1ib2wpIHtcblx0XHRcdHJldHVybiAnU3ltYm9sICgnICsgKDxhbnk+dmFsaWRhdGVTeW1ib2wodGhpcykpLl9fZGVzY3JpcHRpb25fXyArICcpJztcblx0XHR9KSxcblx0XHR2YWx1ZU9mOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24odGhpczogU3ltYm9sKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7XG5cdFx0fSlcblx0fSk7XG5cblx0ZGVmaW5lUHJvcGVydHkoXG5cdFx0U3ltYm9sLnByb3RvdHlwZSxcblx0XHRTeW1ib2wudG9QcmltaXRpdmUsXG5cdFx0Z2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uKHRoaXM6IFN5bWJvbCkge1xuXHRcdFx0cmV0dXJuIHZhbGlkYXRlU3ltYm9sKHRoaXMpO1xuXHRcdH0pXG5cdCk7XG5cdGRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZ2V0VmFsdWVEZXNjcmlwdG9yKCdTeW1ib2wnLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcblxuXHRkZWZpbmVQcm9wZXJ0eShcblx0XHRJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsXG5cdFx0U3ltYm9sLnRvUHJpbWl0aXZlLFxuXHRcdGdldFZhbHVlRGVzY3JpcHRvcigoPGFueT5TeW1ib2wpLnByb3RvdHlwZVtTeW1ib2wudG9QcmltaXRpdmVdLCBmYWxzZSwgZmFsc2UsIHRydWUpXG5cdCk7XG5cdGRlZmluZVByb3BlcnR5KFxuXHRcdEludGVybmFsU3ltYm9sLnByb3RvdHlwZSxcblx0XHRTeW1ib2wudG9TdHJpbmdUYWcsXG5cdFx0Z2V0VmFsdWVEZXNjcmlwdG9yKCg8YW55PlN5bWJvbCkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10sIGZhbHNlLCBmYWxzZSwgdHJ1ZSlcblx0KTtcbn1cblxuLyoqXG4gKiBBIGN1c3RvbSBndWFyZCBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgaWYgYW4gb2JqZWN0IGlzIGEgc3ltYm9sIG9yIG5vdFxuICogQHBhcmFtICB7YW55fSAgICAgICB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2sgdG8gc2VlIGlmIGl0IGlzIGEgc3ltYm9sIG9yIG5vdFxuICogQHJldHVybiB7aXMgc3ltYm9sfSAgICAgICBSZXR1cm5zIHRydWUgaWYgYSBzeW1ib2wgb3Igbm90IChhbmQgbmFycm93cyB0aGUgdHlwZSBndWFyZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBzeW1ib2wge1xuXHRyZXR1cm4gKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8IHZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSkgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogRmlsbCBhbnkgbWlzc2luZyB3ZWxsIGtub3duIHN5bWJvbHMgaWYgdGhlIG5hdGl2ZSBTeW1ib2wgaXMgbWlzc2luZyB0aGVtXG4gKi9cbltcblx0J2hhc0luc3RhbmNlJyxcblx0J2lzQ29uY2F0U3ByZWFkYWJsZScsXG5cdCdpdGVyYXRvcicsXG5cdCdzcGVjaWVzJyxcblx0J3JlcGxhY2UnLFxuXHQnc2VhcmNoJyxcblx0J3NwbGl0Jyxcblx0J21hdGNoJyxcblx0J3RvUHJpbWl0aXZlJyxcblx0J3RvU3RyaW5nVGFnJyxcblx0J3Vuc2NvcGFibGVzJyxcblx0J29ic2VydmFibGUnXG5dLmZvckVhY2goKHdlbGxLbm93bikgPT4ge1xuXHRpZiAoIShTeW1ib2wgYXMgYW55KVt3ZWxsS25vd25dKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFN5bWJvbCwgd2VsbEtub3duLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcih3ZWxsS25vd24pLCBmYWxzZSwgZmFsc2UpKTtcblx0fVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBTeW1ib2wudHMiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IGlzQXJyYXlMaWtlLCBJdGVyYWJsZSB9IGZyb20gJy4vaXRlcmF0b3InO1xuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcbmltcG9ydCAnLi9TeW1ib2wnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdlYWtNYXA8SyBleHRlbmRzIG9iamVjdCwgVj4ge1xuXHQvKipcblx0ICogUmVtb3ZlIGEgYGtleWAgZnJvbSB0aGUgbWFwXG5cdCAqXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmVcblx0ICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHZhbHVlIHdhcyByZW1vdmVkLCBvdGhlcndpc2UgYGZhbHNlYFxuXHQgKi9cblx0ZGVsZXRlKGtleTogSyk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSB2YWx1ZSwgYmFzZWQgb24gdGhlIHN1cHBsaWVkIGBrZXlgXG5cdCAqXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZXRyaWV2ZSB0aGUgYHZhbHVlYCBmb3Jcblx0ICogQHJldHVybiB0aGUgYHZhbHVlYCBiYXNlZCBvbiB0aGUgYGtleWAgaWYgZm91bmQsIG90aGVyd2lzZSBgZmFsc2VgXG5cdCAqL1xuXHRnZXQoa2V5OiBLKTogViB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiBhIGBrZXlgIGlzIHByZXNlbnQgaW4gdGhlIG1hcFxuXHQgKlxuXHQgKiBAcGFyYW0ga2V5IFRoZSBga2V5YCB0byBjaGVja1xuXHQgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUga2V5IGlzIHBhcnQgb2YgdGhlIG1hcCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG5cdCAqL1xuXHRoYXMoa2V5OiBLKTogYm9vbGVhbjtcblxuXHQvKipcblx0ICogU2V0IGEgYHZhbHVlYCBmb3IgYSBwYXJ0aWN1bGFyIGBrZXlgLlxuXHQgKlxuXHQgKiBAcGFyYW0ga2V5IFRoZSBga2V5YCB0byBzZXQgdGhlIGB2YWx1ZWAgZm9yXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgYHZhbHVlYCB0byBzZXRcblx0ICogQHJldHVybiB0aGUgaW5zdGFuY2VzXG5cdCAqL1xuXHRzZXQoa2V5OiBLLCB2YWx1ZTogVik6IHRoaXM7XG5cblx0cmVhZG9ubHkgW1N5bWJvbC50b1N0cmluZ1RhZ106ICdXZWFrTWFwJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWFrTWFwQ29uc3RydWN0b3Ige1xuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgYFdlYWtNYXBgXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKi9cblx0bmV3ICgpOiBXZWFrTWFwPG9iamVjdCwgYW55PjtcblxuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgYFdlYWtNYXBgXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcGFyYW0gaXRlcmFibGUgQW4gaXRlcmFibGUgdGhhdCBjb250YWlucyB5aWVsZHMgdXAga2V5L3ZhbHVlIHBhaXIgZW50cmllc1xuXHQgKi9cblx0bmV3IDxLIGV4dGVuZHMgb2JqZWN0LCBWPihpdGVyYWJsZT86IFtLLCBWXVtdKTogV2Vha01hcDxLLCBWPjtcblxuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgYFdlYWtNYXBgXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKlxuXHQgKiBAcGFyYW0gaXRlcmFibGUgQW4gaXRlcmFibGUgdGhhdCBjb250YWlucyB5aWVsZHMgdXAga2V5L3ZhbHVlIHBhaXIgZW50cmllc1xuXHQgKi9cblx0bmV3IDxLIGV4dGVuZHMgb2JqZWN0LCBWPihpdGVyYWJsZTogSXRlcmFibGU8W0ssIFZdPik6IFdlYWtNYXA8SywgVj47XG5cblx0cmVhZG9ubHkgcHJvdG90eXBlOiBXZWFrTWFwPG9iamVjdCwgYW55Pjtcbn1cblxuZXhwb3J0IGxldCBXZWFrTWFwOiBXZWFrTWFwQ29uc3RydWN0b3IgPSBnbG9iYWwuV2Vha01hcDtcblxuaW50ZXJmYWNlIEVudHJ5PEssIFY+IHtcblx0a2V5OiBLO1xuXHR2YWx1ZTogVjtcbn1cblxuaWYgKCFoYXMoJ2VzNi13ZWFrbWFwJykpIHtcblx0Y29uc3QgREVMRVRFRDogYW55ID0ge307XG5cblx0Y29uc3QgZ2V0VUlEID0gZnVuY3Rpb24gZ2V0VUlEKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCk7XG5cdH07XG5cblx0Y29uc3QgZ2VuZXJhdGVOYW1lID0gKGZ1bmN0aW9uKCkge1xuXHRcdGxldCBzdGFydElkID0gTWF0aC5mbG9vcihEYXRlLm5vdygpICUgMTAwMDAwMDAwKTtcblxuXHRcdHJldHVybiBmdW5jdGlvbiBnZW5lcmF0ZU5hbWUoKTogc3RyaW5nIHtcblx0XHRcdHJldHVybiAnX193bScgKyBnZXRVSUQoKSArIChzdGFydElkKysgKyAnX18nKTtcblx0XHR9O1xuXHR9KSgpO1xuXG5cdFdlYWtNYXAgPSBjbGFzcyBXZWFrTWFwPEssIFY+IHtcblx0XHRwcml2YXRlIHJlYWRvbmx5IF9uYW1lOiBzdHJpbmc7XG5cdFx0cHJpdmF0ZSByZWFkb25seSBfZnJvemVuRW50cmllczogRW50cnk8SywgVj5bXTtcblxuXHRcdGNvbnN0cnVjdG9yKGl0ZXJhYmxlPzogQXJyYXlMaWtlPFtLLCBWXT4gfCBJdGVyYWJsZTxbSywgVl0+KSB7XG5cdFx0XHR0aGlzLl9uYW1lID0gZ2VuZXJhdGVOYW1lKCk7XG5cblx0XHRcdHRoaXMuX2Zyb3plbkVudHJpZXMgPSBbXTtcblxuXHRcdFx0aWYgKGl0ZXJhYmxlKSB7XG5cdFx0XHRcdGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gaXRlcmFibGVbaV07XG5cdFx0XHRcdFx0XHR0aGlzLnNldChpdGVtWzBdLCBpdGVtWzFdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaXRlcmFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0KGtleSwgdmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHByaXZhdGUgX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5OiBhbnkpOiBudW1iZXIge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9mcm96ZW5FbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9mcm96ZW5FbnRyaWVzW2ldLmtleSA9PT0ga2V5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblxuXHRcdGRlbGV0ZShrZXk6IGFueSk6IGJvb2xlYW4ge1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGVudHJ5OiBFbnRyeTxLLCBWPiA9IGtleVt0aGlzLl9uYW1lXTtcblx0XHRcdGlmIChlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkge1xuXHRcdFx0XHRlbnRyeS52YWx1ZSA9IERFTEVURUQ7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcblx0XHRcdGlmIChmcm96ZW5JbmRleCA+PSAwKSB7XG5cdFx0XHRcdHRoaXMuX2Zyb3plbkVudHJpZXMuc3BsaWNlKGZyb3plbkluZGV4LCAxKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRnZXQoa2V5OiBhbnkpOiBWIHwgdW5kZWZpbmVkIHtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZW50cnk6IEVudHJ5PEssIFY+ID0ga2V5W3RoaXMuX25hbWVdO1xuXHRcdFx0aWYgKGVudHJ5ICYmIGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSB7XG5cdFx0XHRcdHJldHVybiBlbnRyeS52YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZnJvemVuSW5kZXggPSB0aGlzLl9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSk7XG5cdFx0XHRpZiAoZnJvemVuSW5kZXggPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZnJvemVuRW50cmllc1tmcm96ZW5JbmRleF0udmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFzKGtleTogYW55KTogYm9vbGVhbiB7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZW50cnk6IEVudHJ5PEssIFY+ID0ga2V5W3RoaXMuX25hbWVdO1xuXHRcdFx0aWYgKEJvb2xlYW4oZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURUQpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcblx0XHRcdGlmIChmcm96ZW5JbmRleCA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0c2V0KGtleTogYW55LCB2YWx1ZT86IGFueSk6IHRoaXMge1xuXHRcdFx0aWYgKCFrZXkgfHwgKHR5cGVvZiBrZXkgIT09ICdvYmplY3QnICYmIHR5cGVvZiBrZXkgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdmFsdWUgdXNlZCBhcyB3ZWFrIG1hcCBrZXknKTtcblx0XHRcdH1cblx0XHRcdGxldCBlbnRyeTogRW50cnk8SywgVj4gPSBrZXlbdGhpcy5fbmFtZV07XG5cdFx0XHRpZiAoIWVudHJ5IHx8IGVudHJ5LmtleSAhPT0ga2V5KSB7XG5cdFx0XHRcdGVudHJ5ID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7XG5cdFx0XHRcdFx0a2V5OiB7IHZhbHVlOiBrZXkgfVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoT2JqZWN0LmlzRnJvemVuKGtleSkpIHtcblx0XHRcdFx0XHR0aGlzLl9mcm96ZW5FbnRyaWVzLnB1c2goZW50cnkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMuX25hbWUsIHtcblx0XHRcdFx0XHRcdHZhbHVlOiBlbnRyeVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbnRyeS52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0W1N5bWJvbC50b1N0cmluZ1RhZ106ICdXZWFrTWFwJyA9ICdXZWFrTWFwJztcblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgV2Vha01hcDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBXZWFrTWFwLnRzIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBpc0FycmF5TGlrZSwgaXNJdGVyYWJsZSwgSXRlcmFibGUgfSBmcm9tICcuL2l0ZXJhdG9yJztcbmltcG9ydCB7IE1BWF9TQUZFX0lOVEVHRVIgfSBmcm9tICcuL251bWJlcic7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0IHsgd3JhcE5hdGl2ZSB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBNYXBDYWxsYmFjazxULCBVPiB7XG5cdC8qKlxuXHQgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gbWFwcGluZ1xuXHQgKlxuXHQgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBtYXBwZWRcblx0ICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBlbGVtZW50XG5cdCAqL1xuXHQoZWxlbWVudDogVCwgaW5kZXg6IG51bWJlcik6IFU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmluZENhbGxiYWNrPFQ+IHtcblx0LyoqXG5cdCAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB1c2luZyBmaW5kXG5cdCAqXG5cdCAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRoYXQgaXMgY3VycmVudHkgYmVpbmcgYW5hbHlzZWRcblx0ICogQHBhcmFtIGluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBlbGVtZW50IHRoYXQgaXMgYmVpbmcgYW5hbHlzZWRcblx0ICogQHBhcmFtIGFycmF5IFRoZSBzb3VyY2UgYXJyYXlcblx0ICovXG5cdChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogQXJyYXlMaWtlPFQ+KTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFdyaXRhYmxlQXJyYXlMaWtlPFQ+IHtcblx0cmVhZG9ubHkgbGVuZ3RoOiBudW1iZXI7XG5cdFtuOiBudW1iZXJdOiBUO1xufVxuXG4vKiBFUzYgQXJyYXkgc3RhdGljIG1ldGhvZHMgKi9cblxuZXhwb3J0IGludGVyZmFjZSBGcm9tIHtcblx0LyoqXG5cdCAqIFRoZSBBcnJheS5mcm9tKCkgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgQXJyYXkgaW5zdGFuY2UgZnJvbSBhbiBhcnJheS1saWtlIG9yIGl0ZXJhYmxlIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHNvdXJjZSBBbiBhcnJheS1saWtlIG9yIGl0ZXJhYmxlIG9iamVjdCB0byBjb252ZXJ0IHRvIGFuIGFycmF5XG5cdCAqIEBwYXJhbSBtYXBGdW5jdGlvbiBBIG1hcCBmdW5jdGlvbiB0byBjYWxsIG9uIGVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXlcblx0ICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgbWFwIGZ1bmN0aW9uXG5cdCAqIEByZXR1cm4gVGhlIG5ldyBBcnJheVxuXHQgKi9cblx0PFQsIFU+KHNvdXJjZTogQXJyYXlMaWtlPFQ+IHwgSXRlcmFibGU8VD4sIG1hcEZ1bmN0aW9uOiBNYXBDYWxsYmFjazxULCBVPiwgdGhpc0FyZz86IGFueSk6IEFycmF5PFU+O1xuXG5cdC8qKlxuXHQgKiBUaGUgQXJyYXkuZnJvbSgpIG1ldGhvZCBjcmVhdGVzIGEgbmV3IEFycmF5IGluc3RhbmNlIGZyb20gYW4gYXJyYXktbGlrZSBvciBpdGVyYWJsZSBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBzb3VyY2UgQW4gYXJyYXktbGlrZSBvciBpdGVyYWJsZSBvYmplY3QgdG8gY29udmVydCB0byBhbiBhcnJheVxuXHQgKiBAcmV0dXJuIFRoZSBuZXcgQXJyYXlcblx0ICovXG5cdDxUPihzb3VyY2U6IEFycmF5TGlrZTxUPiB8IEl0ZXJhYmxlPFQ+KTogQXJyYXk8VD47XG59XG5cbmV4cG9ydCBsZXQgZnJvbTogRnJvbTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGFycmF5IGZyb20gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIGFyZ3VtZW50cyBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgdGhlIGFycmF5XG4gKiBAcmV0dXJuIEFuIGFycmF5IGZyb20gdGhlIGdpdmVuIGFyZ3VtZW50c1xuICovXG5leHBvcnQgbGV0IG9mOiA8VD4oLi4uaXRlbXM6IFRbXSkgPT4gQXJyYXk8VD47XG5cbi8qIEVTNiBBcnJheSBpbnN0YW5jZSBtZXRob2RzICovXG5cbi8qKlxuICogQ29waWVzIGRhdGEgaW50ZXJuYWxseSB3aXRoaW4gYW4gYXJyYXkgb3IgYXJyYXktbGlrZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGFycmF5LWxpa2Ugb2JqZWN0XG4gKiBAcGFyYW0gb2Zmc2V0IFRoZSBpbmRleCB0byBzdGFydCBjb3B5aW5nIHZhbHVlcyB0bzsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcbiAqIEBwYXJhbSBzdGFydCBUaGUgZmlyc3QgKGluY2x1c2l2ZSkgaW5kZXggdG8gY29weTsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcbiAqIEBwYXJhbSBlbmQgVGhlIGxhc3QgKGV4Y2x1c2l2ZSkgaW5kZXggdG8gY29weTsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcbiAqIEByZXR1cm4gVGhlIHRhcmdldFxuICovXG5leHBvcnQgbGV0IGNvcHlXaXRoaW46IDxUPih0YXJnZXQ6IEFycmF5TGlrZTxUPiwgb2Zmc2V0OiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcikgPT4gQXJyYXlMaWtlPFQ+O1xuXG4vKipcbiAqIEZpbGxzIGVsZW1lbnRzIG9mIGFuIGFycmF5LWxpa2Ugb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgdG8gZmlsbFxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGVhY2ggZWxlbWVudCBvZiB0aGUgdGFyZ2V0IHdpdGhcbiAqIEBwYXJhbSBzdGFydCBUaGUgZmlyc3QgaW5kZXggdG8gZmlsbFxuICogQHBhcmFtIGVuZCBUaGUgKGV4Y2x1c2l2ZSkgaW5kZXggYXQgd2hpY2ggdG8gc3RvcCBmaWxsaW5nXG4gKiBAcmV0dXJuIFRoZSBmaWxsZWQgdGFyZ2V0XG4gKi9cbmV4cG9ydCBsZXQgZmlsbDogPFQ+KHRhcmdldDogQXJyYXlMaWtlPFQ+LCB2YWx1ZTogVCwgc3RhcnQ/OiBudW1iZXIsIGVuZD86IG51bWJlcikgPT4gQXJyYXlMaWtlPFQ+O1xuXG4vKipcbiAqIEZpbmRzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBpbnN0YW5jZSBtYXRjaGluZyB0aGUgY2FsbGJhY2sgb3IgdW5kZWZpbmVkIGlmIG9uZSBpcyBub3QgZm91bmQuXG4gKlxuICogQHBhcmFtIHRhcmdldCBBbiBhcnJheS1saWtlIG9iamVjdFxuICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gcmV0dXJuaW5nIGlmIHRoZSBjdXJyZW50IHZhbHVlIG1hdGNoZXMgYSBjcml0ZXJpYVxuICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgZmluZCBmdW5jdGlvblxuICogQHJldHVybiBUaGUgZmlyc3QgZWxlbWVudCBtYXRjaGluZyB0aGUgY2FsbGJhY2ssIG9yIHVuZGVmaW5lZCBpZiBvbmUgZG9lcyBub3QgZXhpc3RcbiAqL1xuZXhwb3J0IGxldCBmaW5kOiA8VD4odGFyZ2V0OiBBcnJheUxpa2U8VD4sIGNhbGxiYWNrOiBGaW5kQ2FsbGJhY2s8VD4sIHRoaXNBcmc/OiB7fSkgPT4gVCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBzZWFyY2ggYW5kIHJldHVybnMgdGhlIGZpcnN0IGluZGV4IHdob3NlIHZhbHVlIHNhdGlzZmllcyB0aGUgcGFzc2VkIGNhbGxiYWNrLFxuICogb3IgLTEgaWYgbm8gdmFsdWVzIHNhdGlzZnkgaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCBBbiBhcnJheS1saWtlIG9iamVjdFxuICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgaWYgdGhlIGN1cnJlbnQgdmFsdWUgc2F0aXNmaWVzIGl0cyBjcml0ZXJpYVxuICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgZmluZCBmdW5jdGlvblxuICogQHJldHVybiBUaGUgZmlyc3QgaW5kZXggd2hvc2UgdmFsdWUgc2F0aXNmaWVzIHRoZSBwYXNzZWQgY2FsbGJhY2ssIG9yIC0xIGlmIG5vIHZhbHVlcyBzYXRpc2Z5IGl0XG4gKi9cbmV4cG9ydCBsZXQgZmluZEluZGV4OiA8VD4odGFyZ2V0OiBBcnJheUxpa2U8VD4sIGNhbGxiYWNrOiBGaW5kQ2FsbGJhY2s8VD4sIHRoaXNBcmc/OiB7fSkgPT4gbnVtYmVyO1xuXG4vKiBFUzcgQXJyYXkgaW5zdGFuY2UgbWV0aG9kcyAqL1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhbiBhcnJheSBpbmNsdWRlcyBhIGdpdmVuIHZhbHVlXG4gKlxuICogQHBhcmFtIHRhcmdldCB0aGUgdGFyZ2V0IGFycmF5LWxpa2Ugb2JqZWN0XG4gKiBAcGFyYW0gc2VhcmNoRWxlbWVudCB0aGUgaXRlbSB0byBzZWFyY2ggZm9yXG4gKiBAcGFyYW0gZnJvbUluZGV4IHRoZSBzdGFydGluZyBpbmRleCB0byBzZWFyY2ggZnJvbVxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGFycmF5IGluY2x1ZGVzIHRoZSBlbGVtZW50LCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG5leHBvcnQgbGV0IGluY2x1ZGVzOiA8VD4odGFyZ2V0OiBBcnJheUxpa2U8VD4sIHNlYXJjaEVsZW1lbnQ6IFQsIGZyb21JbmRleD86IG51bWJlcikgPT4gYm9vbGVhbjtcblxuaWYgKGhhcygnZXM2LWFycmF5JykgJiYgaGFzKCdlczYtYXJyYXktZmlsbCcpKSB7XG5cdGZyb20gPSBnbG9iYWwuQXJyYXkuZnJvbTtcblx0b2YgPSBnbG9iYWwuQXJyYXkub2Y7XG5cdGNvcHlXaXRoaW4gPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuY29weVdpdGhpbik7XG5cdGZpbGwgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZmlsbCk7XG5cdGZpbmQgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZmluZCk7XG5cdGZpbmRJbmRleCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgpO1xufSBlbHNlIHtcblx0Ly8gSXQgaXMgb25seSBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkvaU9TIHRoYXQgaGF2ZSBhIGJhZCBmaWxsIGltcGxlbWVudGF0aW9uIGFuZCBzbyBhcmVuJ3QgaW4gdGhlIHdpbGRcblx0Ly8gVG8gbWFrZSB0aGluZ3MgZWFzaWVyLCBpZiB0aGVyZSBpcyBhIGJhZCBmaWxsIGltcGxlbWVudGF0aW9uLCB0aGUgd2hvbGUgc2V0IG9mIGZ1bmN0aW9ucyB3aWxsIGJlIGZpbGxlZFxuXG5cdC8qKlxuXHQgKiBFbnN1cmVzIGEgbm9uLW5lZ2F0aXZlLCBub24taW5maW5pdGUsIHNhZmUgaW50ZWdlci5cblx0ICpcblx0ICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIHRvIHZhbGlkYXRlXG5cdCAqIEByZXR1cm4gQSBwcm9wZXIgbGVuZ3RoXG5cdCAqL1xuXHRjb25zdCB0b0xlbmd0aCA9IGZ1bmN0aW9uIHRvTGVuZ3RoKGxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRpZiAoaXNOYU4obGVuZ3RoKSkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0bGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7XG5cdFx0aWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcblx0XHRcdGxlbmd0aCA9IE1hdGguZmxvb3IobGVuZ3RoKTtcblx0XHR9XG5cdFx0Ly8gRW5zdXJlIGEgbm9uLW5lZ2F0aXZlLCByZWFsLCBzYWZlIGludGVnZXJcblx0XHRyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGVuZ3RoLCAwKSwgTUFYX1NBRkVfSU5URUdFUik7XG5cdH07XG5cblx0LyoqXG5cdCAqIEZyb20gRVM2IDcuMS40IFRvSW50ZWdlcigpXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIGNvbnZlcnRcblx0ICogQHJldHVybiBBbiBpbnRlZ2VyXG5cdCAqL1xuXHRjb25zdCB0b0ludGVnZXIgPSBmdW5jdGlvbiB0b0ludGVnZXIodmFsdWU6IGFueSk6IG51bWJlciB7XG5cdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdGlmIChpc05hTih2YWx1ZSkpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgPT09IDAgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdHJldHVybiAodmFsdWUgPiAwID8gMSA6IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcblx0fTtcblxuXHQvKipcblx0ICogTm9ybWFsaXplcyBhbiBvZmZzZXQgYWdhaW5zdCBhIGdpdmVuIGxlbmd0aCwgd3JhcHBpbmcgaXQgaWYgbmVnYXRpdmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgb3JpZ2luYWwgb2Zmc2V0XG5cdCAqIEBwYXJhbSBsZW5ndGggVGhlIHRvdGFsIGxlbmd0aCB0byBub3JtYWxpemUgYWdhaW5zdFxuXHQgKiBAcmV0dXJuIElmIG5lZ2F0aXZlLCBwcm92aWRlIGEgZGlzdGFuY2UgZnJvbSB0aGUgZW5kIChsZW5ndGgpOyBvdGhlcndpc2UgcHJvdmlkZSBhIGRpc3RhbmNlIGZyb20gMFxuXHQgKi9cblx0Y29uc3Qgbm9ybWFsaXplT2Zmc2V0ID0gZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0KHZhbHVlOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdmFsdWUgPCAwID8gTWF0aC5tYXgobGVuZ3RoICsgdmFsdWUsIDApIDogTWF0aC5taW4odmFsdWUsIGxlbmd0aCk7XG5cdH07XG5cblx0ZnJvbSA9IGZ1bmN0aW9uIGZyb20oXG5cdFx0dGhpczogQXJyYXlDb25zdHJ1Y3Rvcixcblx0XHRhcnJheUxpa2U6IEl0ZXJhYmxlPGFueT4gfCBBcnJheUxpa2U8YW55Pixcblx0XHRtYXBGdW5jdGlvbj86IE1hcENhbGxiYWNrPGFueSwgYW55Pixcblx0XHR0aGlzQXJnPzogYW55XG5cdCk6IEFycmF5PGFueT4ge1xuXHRcdGlmIChhcnJheUxpa2UgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignZnJvbTogcmVxdWlyZXMgYW4gYXJyYXktbGlrZSBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAobWFwRnVuY3Rpb24gJiYgdGhpc0FyZykge1xuXHRcdFx0bWFwRnVuY3Rpb24gPSBtYXBGdW5jdGlvbi5iaW5kKHRoaXNBcmcpO1xuXHRcdH1cblxuXHRcdC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXG5cdFx0Y29uc3QgQ29uc3RydWN0b3IgPSB0aGlzO1xuXHRcdGNvbnN0IGxlbmd0aDogbnVtYmVyID0gdG9MZW5ndGgoKDxhbnk+YXJyYXlMaWtlKS5sZW5ndGgpO1xuXG5cdFx0Ly8gU3VwcG9ydCBleHRlbnNpb25cblx0XHRjb25zdCBhcnJheTogYW55W10gPVxuXHRcdFx0dHlwZW9mIENvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nID8gPGFueVtdPk9iamVjdChuZXcgQ29uc3RydWN0b3IobGVuZ3RoKSkgOiBuZXcgQXJyYXkobGVuZ3RoKTtcblxuXHRcdGlmICghaXNBcnJheUxpa2UoYXJyYXlMaWtlKSAmJiAhaXNJdGVyYWJsZShhcnJheUxpa2UpKSB7XG5cdFx0XHRyZXR1cm4gYXJyYXk7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgdGhpcyBpcyBhbiBhcnJheSBhbmQgdGhlIG5vcm1hbGl6ZWQgbGVuZ3RoIGlzIDAsIGp1c3QgcmV0dXJuIGFuIGVtcHR5IGFycmF5LiB0aGlzIHByZXZlbnRzIGEgcHJvYmxlbVxuXHRcdC8vIHdpdGggdGhlIGl0ZXJhdGlvbiBvbiBJRSB3aGVuIHVzaW5nIGEgTmFOIGFycmF5IGxlbmd0aC5cblx0XHRpZiAoaXNBcnJheUxpa2UoYXJyYXlMaWtlKSkge1xuXHRcdFx0aWYgKGxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlMaWtlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGFycmF5W2ldID0gbWFwRnVuY3Rpb24gPyBtYXBGdW5jdGlvbihhcnJheUxpa2VbaV0sIGkpIDogYXJyYXlMaWtlW2ldO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgaSA9IDA7XG5cdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIGFycmF5TGlrZSkge1xuXHRcdFx0XHRhcnJheVtpXSA9IG1hcEZ1bmN0aW9uID8gbWFwRnVuY3Rpb24odmFsdWUsIGkpIDogdmFsdWU7XG5cdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoKDxhbnk+YXJyYXlMaWtlKS5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YXJyYXkubGVuZ3RoID0gbGVuZ3RoO1xuXHRcdH1cblxuXHRcdHJldHVybiBhcnJheTtcblx0fTtcblxuXHRvZiA9IGZ1bmN0aW9uIG9mPFQ+KC4uLml0ZW1zOiBUW10pOiBBcnJheTxUPiB7XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGl0ZW1zKTtcblx0fTtcblxuXHRjb3B5V2l0aGluID0gZnVuY3Rpb24gY29weVdpdGhpbjxUPihcblx0XHR0YXJnZXQ6IEFycmF5TGlrZTxUPixcblx0XHRvZmZzZXQ6IG51bWJlcixcblx0XHRzdGFydDogbnVtYmVyLFxuXHRcdGVuZD86IG51bWJlclxuXHQpOiBBcnJheUxpa2U8VD4ge1xuXHRcdGlmICh0YXJnZXQgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignY29weVdpdGhpbjogdGFyZ2V0IG11c3QgYmUgYW4gYXJyYXktbGlrZSBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRjb25zdCBsZW5ndGggPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcblx0XHRvZmZzZXQgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKG9mZnNldCksIGxlbmd0aCk7XG5cdFx0c3RhcnQgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKHN0YXJ0KSwgbGVuZ3RoKTtcblx0XHRlbmQgPSBub3JtYWxpemVPZmZzZXQoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXIoZW5kKSwgbGVuZ3RoKTtcblx0XHRsZXQgY291bnQgPSBNYXRoLm1pbihlbmQgLSBzdGFydCwgbGVuZ3RoIC0gb2Zmc2V0KTtcblxuXHRcdGxldCBkaXJlY3Rpb24gPSAxO1xuXHRcdGlmIChvZmZzZXQgPiBzdGFydCAmJiBvZmZzZXQgPCBzdGFydCArIGNvdW50KSB7XG5cdFx0XHRkaXJlY3Rpb24gPSAtMTtcblx0XHRcdHN0YXJ0ICs9IGNvdW50IC0gMTtcblx0XHRcdG9mZnNldCArPSBjb3VudCAtIDE7XG5cdFx0fVxuXG5cdFx0d2hpbGUgKGNvdW50ID4gMCkge1xuXHRcdFx0aWYgKHN0YXJ0IGluIHRhcmdldCkge1xuXHRcdFx0XHQodGFyZ2V0IGFzIFdyaXRhYmxlQXJyYXlMaWtlPFQ+KVtvZmZzZXRdID0gdGFyZ2V0W3N0YXJ0XTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSAodGFyZ2V0IGFzIFdyaXRhYmxlQXJyYXlMaWtlPFQ+KVtvZmZzZXRdO1xuXHRcdFx0fVxuXG5cdFx0XHRvZmZzZXQgKz0gZGlyZWN0aW9uO1xuXHRcdFx0c3RhcnQgKz0gZGlyZWN0aW9uO1xuXHRcdFx0Y291bnQtLTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9O1xuXG5cdGZpbGwgPSBmdW5jdGlvbiBmaWxsPFQ+KHRhcmdldDogQXJyYXlMaWtlPFQ+LCB2YWx1ZTogYW55LCBzdGFydD86IG51bWJlciwgZW5kPzogbnVtYmVyKTogQXJyYXlMaWtlPFQ+IHtcblx0XHRjb25zdCBsZW5ndGggPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcblx0XHRsZXQgaSA9IG5vcm1hbGl6ZU9mZnNldCh0b0ludGVnZXIoc3RhcnQpLCBsZW5ndGgpO1xuXHRcdGVuZCA9IG5vcm1hbGl6ZU9mZnNldChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpLCBsZW5ndGgpO1xuXG5cdFx0d2hpbGUgKGkgPCBlbmQpIHtcblx0XHRcdCh0YXJnZXQgYXMgV3JpdGFibGVBcnJheUxpa2U8VD4pW2krK10gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9O1xuXG5cdGZpbmQgPSBmdW5jdGlvbiBmaW5kPFQ+KHRhcmdldDogQXJyYXlMaWtlPFQ+LCBjYWxsYmFjazogRmluZENhbGxiYWNrPFQ+LCB0aGlzQXJnPzoge30pOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBpbmRleCA9IGZpbmRJbmRleDxUPih0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKTtcblx0XHRyZXR1cm4gaW5kZXggIT09IC0xID8gdGFyZ2V0W2luZGV4XSA6IHVuZGVmaW5lZDtcblx0fTtcblxuXHRmaW5kSW5kZXggPSBmdW5jdGlvbiBmaW5kSW5kZXg8VD4odGFyZ2V0OiBBcnJheUxpa2U8VD4sIGNhbGxiYWNrOiBGaW5kQ2FsbGJhY2s8VD4sIHRoaXNBcmc/OiB7fSk6IG51bWJlciB7XG5cdFx0Y29uc3QgbGVuZ3RoID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XG5cblx0XHRpZiAoIWNhbGxiYWNrKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdmaW5kOiBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXNBcmcpIHtcblx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzQXJnKTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2sodGFyZ2V0W2ldLCBpLCB0YXJnZXQpKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fTtcbn1cblxuaWYgKGhhcygnZXM3LWFycmF5JykpIHtcblx0aW5jbHVkZXMgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpO1xufSBlbHNlIHtcblx0LyoqXG5cdCAqIEVuc3VyZXMgYSBub24tbmVnYXRpdmUsIG5vbi1pbmZpbml0ZSwgc2FmZSBpbnRlZ2VyLlxuXHQgKlxuXHQgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgdG8gdmFsaWRhdGVcblx0ICogQHJldHVybiBBIHByb3BlciBsZW5ndGhcblx0ICovXG5cdGNvbnN0IHRvTGVuZ3RoID0gZnVuY3Rpb24gdG9MZW5ndGgobGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdGxlbmd0aCA9IE51bWJlcihsZW5ndGgpO1xuXHRcdGlmIChpc05hTihsZW5ndGgpKSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdFx0aWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcblx0XHRcdGxlbmd0aCA9IE1hdGguZmxvb3IobGVuZ3RoKTtcblx0XHR9XG5cdFx0Ly8gRW5zdXJlIGEgbm9uLW5lZ2F0aXZlLCByZWFsLCBzYWZlIGludGVnZXJcblx0XHRyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGVuZ3RoLCAwKSwgTUFYX1NBRkVfSU5URUdFUik7XG5cdH07XG5cblx0aW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlczxUPih0YXJnZXQ6IEFycmF5TGlrZTxUPiwgc2VhcmNoRWxlbWVudDogVCwgZnJvbUluZGV4OiBudW1iZXIgPSAwKTogYm9vbGVhbiB7XG5cdFx0bGV0IGxlbiA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IGZyb21JbmRleDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50RWxlbWVudCA9IHRhcmdldFtpXTtcblx0XHRcdGlmIChcblx0XHRcdFx0c2VhcmNoRWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnQgfHxcblx0XHRcdFx0KHNlYXJjaEVsZW1lbnQgIT09IHNlYXJjaEVsZW1lbnQgJiYgY3VycmVudEVsZW1lbnQgIT09IGN1cnJlbnRFbGVtZW50KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBhcnJheS50cyIsImNvbnN0IGdsb2JhbE9iamVjdDogYW55ID0gKGZ1bmN0aW9uKCk6IGFueSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuXHRcdC8vIGdsb2JhbCBzcGVjIGRlZmluZXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgY2FsbGVkICdnbG9iYWwnXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG5cdFx0Ly8gYGdsb2JhbGAgaXMgYWxzbyBkZWZpbmVkIGluIE5vZGVKU1xuXHRcdHJldHVybiBnbG9iYWw7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHQvLyB3aW5kb3cgaXMgZGVmaW5lZCBpbiBicm93c2Vyc1xuXHRcdHJldHVybiB3aW5kb3c7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0Ly8gc2VsZiBpcyBkZWZpbmVkIGluIFdlYldvcmtlcnNcblx0XHRyZXR1cm4gc2VsZjtcblx0fVxufSkoKTtcblxuZXhwb3J0IGRlZmF1bHQgZ2xvYmFsT2JqZWN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGdsb2JhbC50cyIsImltcG9ydCAnLi9TeW1ib2wnO1xuaW1wb3J0IHsgSElHSF9TVVJST0dBVEVfTUFYLCBISUdIX1NVUlJPR0FURV9NSU4gfSBmcm9tICcuL3N0cmluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlcmF0b3JSZXN1bHQ8VD4ge1xuXHRyZWFkb25seSBkb25lOiBib29sZWFuO1xuXHRyZWFkb25seSB2YWx1ZTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJdGVyYXRvcjxUPiB7XG5cdG5leHQodmFsdWU/OiBhbnkpOiBJdGVyYXRvclJlc3VsdDxUPjtcblxuXHRyZXR1cm4/KHZhbHVlPzogYW55KTogSXRlcmF0b3JSZXN1bHQ8VD47XG5cblx0dGhyb3c/KGU/OiBhbnkpOiBJdGVyYXRvclJlc3VsdDxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJdGVyYWJsZTxUPiB7XG5cdFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhdG9yPFQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZXJhYmxlSXRlcmF0b3I8VD4gZXh0ZW5kcyBJdGVyYXRvcjxUPiB7XG5cdFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8VD47XG59XG5cbmNvbnN0IHN0YXRpY0RvbmU6IEl0ZXJhdG9yUmVzdWx0PGFueT4gPSB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgX3NoaW1zXyBhbiBpdGVyYXRvciBpbnRlcmZhY2Ugb24gYXJyYXkgbGlrZSBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgU2hpbUl0ZXJhdG9yPFQ+IHtcblx0cHJpdmF0ZSBfbGlzdDogQXJyYXlMaWtlPFQ+IHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIF9uZXh0SW5kZXggPSAtMTtcblx0cHJpdmF0ZSBfbmF0aXZlSXRlcmF0b3I6IEl0ZXJhdG9yPFQ+IHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKGxpc3Q6IEFycmF5TGlrZTxUPiB8IEl0ZXJhYmxlPFQ+KSB7XG5cdFx0aWYgKGlzSXRlcmFibGUobGlzdCkpIHtcblx0XHRcdHRoaXMuX25hdGl2ZUl0ZXJhdG9yID0gbGlzdFtTeW1ib2wuaXRlcmF0b3JdKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2xpc3QgPSBsaXN0O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm4gdGhlIG5leHQgaXRlcmF0aW9uIHJlc3VsdCBmb3IgdGhlIEl0ZXJhdG9yXG5cdCAqL1xuXHRuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PFQ+IHtcblx0XHRpZiAodGhpcy5fbmF0aXZlSXRlcmF0b3IpIHtcblx0XHRcdHJldHVybiB0aGlzLl9uYXRpdmVJdGVyYXRvci5uZXh0KCk7XG5cdFx0fVxuXHRcdGlmICghdGhpcy5fbGlzdCkge1xuXHRcdFx0cmV0dXJuIHN0YXRpY0RvbmU7XG5cdFx0fVxuXHRcdGlmICgrK3RoaXMuX25leHRJbmRleCA8IHRoaXMuX2xpc3QubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkb25lOiBmYWxzZSxcblx0XHRcdFx0dmFsdWU6IHRoaXMuX2xpc3RbdGhpcy5fbmV4dEluZGV4XVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHN0YXRpY0RvbmU7XG5cdH1cblxuXHRbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEEgdHlwZSBndWFyZCBmb3IgY2hlY2tpbmcgaWYgc29tZXRoaW5nIGhhcyBhbiBJdGVyYWJsZSBpbnRlcmZhY2VcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgSXRlcmFibGU8YW55PiB7XG5cdHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBBIHR5cGUgZ3VhcmQgZm9yIGNoZWNraW5nIGlmIHNvbWV0aGluZyBpcyBBcnJheUxpa2VcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWU6IGFueSk6IHZhbHVlIGlzIEFycmF5TGlrZTxhbnk+IHtcblx0cmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIGZvciBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gaXRlcmFibGUgVGhlIGl0ZXJhYmxlIG9iamVjdCB0byByZXR1cm4gdGhlIGl0ZXJhdG9yIGZvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0PFQ+KGl0ZXJhYmxlOiBJdGVyYWJsZTxUPiB8IEFycmF5TGlrZTxUPik6IEl0ZXJhdG9yPFQ+IHwgdW5kZWZpbmVkIHtcblx0aWYgKGlzSXRlcmFibGUoaXRlcmFibGUpKSB7XG5cdFx0cmV0dXJuIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcblx0fSBlbHNlIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcblx0XHRyZXR1cm4gbmV3IFNoaW1JdGVyYXRvcihpdGVyYWJsZSk7XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JPZkNhbGxiYWNrPFQ+IHtcblx0LyoqXG5cdCAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGEgZm9yT2YoKSBpdGVyYXRpb25cblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIFRoZSBjdXJyZW50IHZhbHVlXG5cdCAqIEBwYXJhbSBvYmplY3QgVGhlIG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyXG5cdCAqIEBwYXJhbSBkb0JyZWFrIEEgZnVuY3Rpb24sIGlmIGNhbGxlZCwgd2lsbCBzdG9wIHRoZSBpdGVyYXRpb25cblx0ICovXG5cdCh2YWx1ZTogVCwgb2JqZWN0OiBJdGVyYWJsZTxUPiB8IEFycmF5TGlrZTxUPiB8IHN0cmluZywgZG9CcmVhazogKCkgPT4gdm9pZCk6IHZvaWQ7XG59XG5cbi8qKlxuICogU2hpbXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYGZvciAuLi4gb2ZgIGJsb2Nrc1xuICpcbiAqIEBwYXJhbSBpdGVyYWJsZSBUaGUgb2JqZWN0IHRoZSBwcm92aWRlcyBhbiBpbnRlcmF0b3IgaW50ZXJmYWNlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIGl0ZW0gb2YgdGhlIGl0ZXJhYmxlXG4gKiBAcGFyYW0gdGhpc0FyZyBPcHRpb25hbCBzY29wZSB0byBwYXNzIHRoZSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9yT2Y8VD4oXG5cdGl0ZXJhYmxlOiBJdGVyYWJsZTxUPiB8IEFycmF5TGlrZTxUPiB8IHN0cmluZyxcblx0Y2FsbGJhY2s6IEZvck9mQ2FsbGJhY2s8VD4sXG5cdHRoaXNBcmc/OiBhbnlcbik6IHZvaWQge1xuXHRsZXQgYnJva2VuID0gZmFsc2U7XG5cblx0ZnVuY3Rpb24gZG9CcmVhaygpIHtcblx0XHRicm9rZW4gPSB0cnVlO1xuXHR9XG5cblx0LyogV2UgbmVlZCB0byBoYW5kbGUgaXRlcmF0aW9uIG9mIGRvdWJsZSBieXRlIHN0cmluZ3MgcHJvcGVybHkgKi9cblx0aWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSAmJiB0eXBlb2YgaXRlcmFibGUgPT09ICdzdHJpbmcnKSB7XG5cdFx0Y29uc3QgbCA9IGl0ZXJhYmxlLmxlbmd0aDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGw7ICsraSkge1xuXHRcdFx0bGV0IGNoYXIgPSBpdGVyYWJsZVtpXTtcblx0XHRcdGlmIChpICsgMSA8IGwpIHtcblx0XHRcdFx0Y29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcblx0XHRcdFx0aWYgKGNvZGUgPj0gSElHSF9TVVJST0dBVEVfTUlOICYmIGNvZGUgPD0gSElHSF9TVVJST0dBVEVfTUFYKSB7XG5cdFx0XHRcdFx0Y2hhciArPSBpdGVyYWJsZVsrK2ldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjYWxsYmFjay5jYWxsKHRoaXNBcmcsIGNoYXIsIGl0ZXJhYmxlLCBkb0JyZWFrKTtcblx0XHRcdGlmIChicm9rZW4pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBpdGVyYXRvciA9IGdldChpdGVyYWJsZSk7XG5cdFx0aWYgKGl0ZXJhdG9yKSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuXG5cdFx0XHR3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwodGhpc0FyZywgcmVzdWx0LnZhbHVlLCBpdGVyYWJsZSwgZG9CcmVhayk7XG5cdFx0XHRcdGlmIChicm9rZW4pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGl0ZXJhdG9yLnRzIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5cbi8qKlxuICogVGhlIHNtYWxsZXN0IGludGVydmFsIGJldHdlZW4gdHdvIHJlcHJlc2VudGFibGUgbnVtYmVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVQU0lMT04gPSAxO1xuXG4vKipcbiAqIFRoZSBtYXhpbXVtIHNhZmUgaW50ZWdlciBpbiBKYXZhU2NyaXB0XG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcblxuLyoqXG4gKiBUaGUgbWluaW11bSBzYWZlIGludGVnZXIgaW4gSmF2YVNjcmlwdFxuICovXG5leHBvcnQgY29uc3QgTUlOX1NBRkVfSU5URUdFUiA9IC1NQVhfU0FGRV9JTlRFR0VSO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIE5hTiB3aXRob3V0IGNvZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBOYU4sIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOYU4odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBnbG9iYWwuaXNOYU4odmFsdWUpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGEgZmluaXRlIG51bWJlciB3aXRob3V0IGNvZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBmaW5pdGUsIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGaW5pdGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIG51bWJlciB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGdsb2JhbC5pc0Zpbml0ZSh2YWx1ZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWU6IGFueSk6IHZhbHVlIGlzIG51bWJlciB7XG5cdHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGFuIGludGVnZXIgdGhhdCBpcyAnc2FmZSwnIG1lYW5pbmc6XG4gKiAgIDEuIGl0IGNhbiBiZSBleHByZXNzZWQgYXMgYW4gSUVFRS03NTQgZG91YmxlIHByZWNpc2lvbiBudW1iZXJcbiAqICAgMi4gaXQgaGFzIGEgb25lLXRvLW9uZSBtYXBwaW5nIHRvIGEgbWF0aGVtYXRpY2FsIGludGVnZXIsIG1lYW5pbmcgaXRzXG4gKiAgICAgIElFRUUtNzU0IHJlcHJlc2VudGF0aW9uIGNhbm5vdCBiZSB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIGFueSBvdGhlclxuICogICAgICBpbnRlZ2VyIHRvIGZpdCB0aGUgSUVFRS03NTQgcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBudW1iZXIge1xuXHRyZXR1cm4gaXNJbnRlZ2VyKHZhbHVlKSAmJiBNYXRoLmFicyh2YWx1ZSkgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBudW1iZXIudHMiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XG5pbXBvcnQgeyBpc1N5bWJvbCB9IGZyb20gJy4vU3ltYm9sJztcblxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RBc3NpZ24ge1xuXHQvKipcblx0ICogQ29weSB0aGUgdmFsdWVzIG9mIGFsbCBvZiB0aGUgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGFcblx0ICogdGFyZ2V0IG9iamVjdC4gUmV0dXJucyB0aGUgdGFyZ2V0IG9iamVjdC5cblx0ICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxuXHQgKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGZyb20gd2hpY2ggdG8gY29weSBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0PFQsIFU+KHRhcmdldDogVCwgc291cmNlOiBVKTogVCAmIFU7XG5cblx0LyoqXG5cdCAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXG5cdCAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3QgdG8gY29weSB0by5cblx0ICogQHBhcmFtIHNvdXJjZTEgVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBzb3VyY2UyIFRoZSBzZWNvbmQgc291cmNlIG9iamVjdCBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllcy5cblx0ICovXG5cdDxULCBVLCBWPih0YXJnZXQ6IFQsIHNvdXJjZTE6IFUsIHNvdXJjZTI6IFYpOiBUICYgVSAmIFY7XG5cblx0LyoqXG5cdCAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXG5cdCAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3QgdG8gY29weSB0by5cblx0ICogQHBhcmFtIHNvdXJjZTEgVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBzb3VyY2UyIFRoZSBzZWNvbmQgc291cmNlIG9iamVjdCBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIHNvdXJjZTMgVGhlIHRoaXJkIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXG5cdCAqL1xuXHQ8VCwgVSwgViwgVz4odGFyZ2V0OiBULCBzb3VyY2UxOiBVLCBzb3VyY2UyOiBWLCBzb3VyY2UzOiBXKTogVCAmIFUgJiBWICYgVztcblxuXHQvKipcblx0ICogQ29weSB0aGUgdmFsdWVzIG9mIGFsbCBvZiB0aGUgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGFcblx0ICogdGFyZ2V0IG9iamVjdC4gUmV0dXJucyB0aGUgdGFyZ2V0IG9iamVjdC5cblx0ICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxuXHQgKiBAcGFyYW0gc291cmNlcyBPbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllc1xuXHQgKi9cblx0KHRhcmdldDogb2JqZWN0LCAuLi5zb3VyY2VzOiBhbnlbXSk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RFbnRlcmllcyB7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGtleS92YWx1ZXMgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBhbiBvYmplY3Rcblx0ICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuIFRoaXMgY2FuIGJlIGFuIG9iamVjdCB0aGF0IHlvdSBjcmVhdGVkIG9yIGFuIGV4aXN0aW5nIERvY3VtZW50IE9iamVjdCBNb2RlbCAoRE9NKSBvYmplY3QuXG5cdCAqL1xuXHQ8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0sIEsgZXh0ZW5kcyBrZXlvZiBUPihvOiBUKTogW2tleW9mIFQsIFRbS11dW107XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgb2Yga2V5L3ZhbHVlcyBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdFxuXHQgKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy4gVGhpcyBjYW4gYmUgYW4gb2JqZWN0IHRoYXQgeW91IGNyZWF0ZWQgb3IgYW4gZXhpc3RpbmcgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIG9iamVjdC5cblx0ICovXG5cdChvOiBvYmplY3QpOiBbc3RyaW5nLCBhbnldW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyB7XG5cdDxUPihvOiBUKTogeyBbSyBpbiBrZXlvZiBUXTogUHJvcGVydHlEZXNjcmlwdG9yIH07XG5cdChvOiBhbnkpOiB7IFtrZXk6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvciB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFZhbHVlcyB7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHZhbHVlcyBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdFxuXHQgKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy4gVGhpcyBjYW4gYmUgYW4gb2JqZWN0IHRoYXQgeW91IGNyZWF0ZWQgb3IgYW4gZXhpc3RpbmcgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIG9iamVjdC5cblx0ICovXG5cdDxUPihvOiB7IFtzOiBzdHJpbmddOiBUIH0pOiBUW107XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgb2YgdmFsdWVzIG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0XG5cdCAqIEBwYXJhbSBvIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLiBUaGlzIGNhbiBiZSBhbiBvYmplY3QgdGhhdCB5b3UgY3JlYXRlZCBvciBhbiBleGlzdGluZyBEb2N1bWVudCBPYmplY3QgTW9kZWwgKERPTSkgb2JqZWN0LlxuXHQgKi9cblx0KG86IG9iamVjdCk6IGFueVtdO1xufVxuXG5leHBvcnQgbGV0IGFzc2lnbjogT2JqZWN0QXNzaWduO1xuXG4vKipcbiAqIEdldHMgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0LlxuICogQW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgaXMgb25lIHRoYXQgaXMgZGVmaW5lZCBkaXJlY3RseSBvbiB0aGUgb2JqZWN0IGFuZCBpcyBub3RcbiAqIGluaGVyaXRlZCBmcm9tIHRoZSBvYmplY3QncyBwcm90b3R5cGUuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydHkuXG4gKiBAcGFyYW0gcCBOYW1lIG9mIHRoZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IDxULCBLIGV4dGVuZHMga2V5b2YgVD4obzogVCwgcHJvcGVydHlLZXk6IEspID0+IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0LiBUaGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGFyZSB0aG9zZSB0aGF0IGFyZSBkZWZpbmVkIGRpcmVjdGx5XG4gKiBvbiB0aGF0IG9iamVjdCwgYW5kIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGhlIG9iamVjdCdzIHByb3RvdHlwZS4gVGhlIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGluY2x1ZGUgYm90aCBmaWVsZHMgKG9iamVjdHMpIGFuZCBmdW5jdGlvbnMuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgb3duIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlOYW1lczogKG86IGFueSkgPT4gc3RyaW5nW107XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3ltYm9sIHByb3BlcnRpZXMgZm91bmQgZGlyZWN0bHkgb24gb2JqZWN0IG8uXG4gKiBAcGFyYW0gbyBPYmplY3QgdG8gcmV0cmlldmUgdGhlIHN5bWJvbHMgZnJvbS5cbiAqL1xuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IChvOiBhbnkpID0+IHN5bWJvbFtdO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQHBhcmFtIHZhbHVlMSBUaGUgZmlyc3QgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWUyIFRoZSBzZWNvbmQgdmFsdWUuXG4gKi9cbmV4cG9ydCBsZXQgaXM6ICh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpID0+IGJvb2xlYW47XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBvZiBhbiBvYmplY3QuXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcy4gVGhpcyBjYW4gYmUgYW4gb2JqZWN0IHRoYXQgeW91IGNyZWF0ZWQgb3IgYW4gZXhpc3RpbmcgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIG9iamVjdC5cbiAqL1xuZXhwb3J0IGxldCBrZXlzOiAobzogb2JqZWN0KSA9PiBzdHJpbmdbXTtcblxuLyogRVM3IE9iamVjdCBzdGF0aWMgbWV0aG9kcyAqL1xuXG5leHBvcnQgbGV0IGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG5cbmV4cG9ydCBsZXQgZW50cmllczogT2JqZWN0RW50ZXJpZXM7XG5cbmV4cG9ydCBsZXQgdmFsdWVzOiBPYmplY3RWYWx1ZXM7XG5cbmlmIChoYXMoJ2VzNi1vYmplY3QnKSkge1xuXHRjb25zdCBnbG9iYWxPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuXHRhc3NpZ24gPSBnbG9iYWxPYmplY3QuYXNzaWduO1xuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXHRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG5cdGdldE93blByb3BlcnR5U3ltYm9scyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cdGlzID0gZ2xvYmFsT2JqZWN0LmlzO1xuXHRrZXlzID0gZ2xvYmFsT2JqZWN0LmtleXM7XG59IGVsc2Uge1xuXHRrZXlzID0gZnVuY3Rpb24gc3ltYm9sQXdhcmVLZXlzKG86IG9iamVjdCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMobykuZmlsdGVyKChrZXkpID0+ICFCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpO1xuXHR9O1xuXG5cdGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQ6IGFueSwgLi4uc291cmNlczogYW55W10pIHtcblx0XHRpZiAodGFyZ2V0ID09IG51bGwpIHtcblx0XHRcdC8vIFR5cGVFcnJvciBpZiB1bmRlZmluZWQgb3IgbnVsbFxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdG8gPSBPYmplY3QodGFyZ2V0KTtcblx0XHRzb3VyY2VzLmZvckVhY2goKG5leHRTb3VyY2UpID0+IHtcblx0XHRcdGlmIChuZXh0U291cmNlKSB7XG5cdFx0XHRcdC8vIFNraXAgb3ZlciBpZiB1bmRlZmluZWQgb3IgbnVsbFxuXHRcdFx0XHRrZXlzKG5leHRTb3VyY2UpLmZvckVhY2goKG5leHRLZXkpID0+IHtcblx0XHRcdFx0XHR0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRvO1xuXHR9O1xuXG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihcblx0XHRvOiBhbnksXG5cdFx0cHJvcDogc3RyaW5nIHwgc3ltYm9sXG5cdCk6IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGlzU3ltYm9sKHByb3ApKSB7XG5cdFx0XHRyZXR1cm4gKDxhbnk+T2JqZWN0KS5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApO1xuXHRcdH1cblx0fTtcblxuXHRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvOiBhbnkpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLmZpbHRlcigoa2V5KSA9PiAhQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKTtcblx0fTtcblxuXHRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMobzogYW55KTogc3ltYm9sW10ge1xuXHRcdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKVxuXHRcdFx0LmZpbHRlcigoa2V5KSA9PiBCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpXG5cdFx0XHQubWFwKChrZXkpID0+IFN5bWJvbC5mb3Ioa2V5LnN1YnN0cmluZygyKSkpO1xuXHR9O1xuXG5cdGlzID0gZnVuY3Rpb24gaXModmFsdWUxOiBhbnksIHZhbHVlMjogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYgKHZhbHVlMSA9PT0gdmFsdWUyKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUxICE9PSAwIHx8IDEgLyB2YWx1ZTEgPT09IDEgLyB2YWx1ZTI7IC8vIC0wXG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTEgIT09IHZhbHVlMSAmJiB2YWx1ZTIgIT09IHZhbHVlMjsgLy8gTmFOXG5cdH07XG59XG5cbmlmIChoYXMoJ2VzMjAxNy1vYmplY3QnKSkge1xuXHRjb25zdCBnbG9iYWxPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG5cdGVudHJpZXMgPSBnbG9iYWxPYmplY3QuZW50cmllcztcblx0dmFsdWVzID0gZ2xvYmFsT2JqZWN0LnZhbHVlcztcbn0gZWxzZSB7XG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG86IGFueSkge1xuXHRcdHJldHVybiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLnJlZHVjZShcblx0XHRcdChwcmV2aW91cywga2V5KSA9PiB7XG5cdFx0XHRcdHByZXZpb3VzW2tleV0gPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobywga2V5KSE7XG5cdFx0XHRcdHJldHVybiBwcmV2aW91cztcblx0XHRcdH0sXG5cdFx0XHR7fSBhcyB7IFtrZXk6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvciB9XG5cdFx0KTtcblx0fTtcblxuXHRlbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcyhvOiBhbnkpOiBbc3RyaW5nLCBhbnldW10ge1xuXHRcdHJldHVybiBrZXlzKG8pLm1hcCgoa2V5KSA9PiBba2V5LCBvW2tleV1dIGFzIFtzdHJpbmcsIGFueV0pO1xuXHR9O1xuXG5cdHZhbHVlcyA9IGZ1bmN0aW9uIHZhbHVlcyhvOiBhbnkpOiBhbnlbXSB7XG5cdFx0cmV0dXJuIGtleXMobykubWFwKChrZXkpID0+IG9ba2V5XSk7XG5cdH07XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gb2JqZWN0LnRzIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xuaW1wb3J0IHsgd3JhcE5hdGl2ZSB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdOb3JtYWxpemUge1xuXHQvKipcblx0ICogUmV0dXJucyB0aGUgU3RyaW5nIHZhbHVlIHJlc3VsdCBvZiBub3JtYWxpemluZyB0aGUgc3RyaW5nIGludG8gdGhlIG5vcm1hbGl6YXRpb24gZm9ybVxuXHQgKiBuYW1lZCBieSBmb3JtIGFzIHNwZWNpZmllZCBpbiBVbmljb2RlIFN0YW5kYXJkIEFubmV4ICMxNSwgVW5pY29kZSBOb3JtYWxpemF0aW9uIEZvcm1zLlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXG5cdCAqIEBwYXJhbSBmb3JtIEFwcGxpY2FibGUgdmFsdWVzOiBcIk5GQ1wiLCBcIk5GRFwiLCBcIk5GS0NcIiwgb3IgXCJORktEXCIsIElmIG5vdCBzcGVjaWZpZWQgZGVmYXVsdFxuXHQgKiBpcyBcIk5GQ1wiXG5cdCAqL1xuXHQodGFyZ2V0OiBzdHJpbmcsIGZvcm06ICdORkMnIHwgJ05GRCcgfCAnTkZLQycgfCAnTkZLRCcpOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIFN0cmluZyB2YWx1ZSByZXN1bHQgb2Ygbm9ybWFsaXppbmcgdGhlIHN0cmluZyBpbnRvIHRoZSBub3JtYWxpemF0aW9uIGZvcm1cblx0ICogbmFtZWQgYnkgZm9ybSBhcyBzcGVjaWZpZWQgaW4gVW5pY29kZSBTdGFuZGFyZCBBbm5leCAjMTUsIFVuaWNvZGUgTm9ybWFsaXphdGlvbiBGb3Jtcy5cblx0ICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xuXHQgKiBAcGFyYW0gZm9ybSBBcHBsaWNhYmxlIHZhbHVlczogXCJORkNcIiwgXCJORkRcIiwgXCJORktDXCIsIG9yIFwiTkZLRFwiLCBJZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRcblx0ICogaXMgXCJORkNcIlxuXHQgKi9cblx0KHRhcmdldDogc3RyaW5nLCBmb3JtPzogc3RyaW5nKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xuICovXG5leHBvcnQgY29uc3QgSElHSF9TVVJST0dBVEVfTUlOID0gMHhkODAwO1xuXG4vKipcbiAqIFRoZSBtYXhpbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xuICovXG5leHBvcnQgY29uc3QgSElHSF9TVVJST0dBVEVfTUFYID0gMHhkYmZmO1xuXG4vKipcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGxvdyBzdXJyb2dhdGVzXG4gKi9cbmV4cG9ydCBjb25zdCBMT1dfU1VSUk9HQVRFX01JTiA9IDB4ZGMwMDtcblxuLyoqXG4gKiBUaGUgbWF4aW11bSBsb2NhdGlvbiBvZiBsb3cgc3Vycm9nYXRlc1xuICovXG5leHBvcnQgY29uc3QgTE9XX1NVUlJPR0FURV9NQVggPSAweGRmZmY7XG5cbi8qIEVTNiBzdGF0aWMgbWV0aG9kcyAqL1xuXG4vKipcbiAqIFJldHVybiB0aGUgU3RyaW5nIHZhbHVlIHdob3NlIGVsZW1lbnRzIGFyZSwgaW4gb3JkZXIsIHRoZSBlbGVtZW50cyBpbiB0aGUgTGlzdCBlbGVtZW50cy5cbiAqIElmIGxlbmd0aCBpcyAwLCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLlxuICogQHBhcmFtIGNvZGVQb2ludHMgVGhlIGNvZGUgcG9pbnRzIHRvIGdlbmVyYXRlIHRoZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGxldCBmcm9tQ29kZVBvaW50OiAoLi4uY29kZVBvaW50czogbnVtYmVyW10pID0+IHN0cmluZztcblxuLyoqXG4gKiBgcmF3YCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgdGFnIGZ1bmN0aW9uIG9mIGEgVGFnZ2VkIFRlbXBsYXRlIFN0cmluZy4gV2hlbiBjYWxsZWRcbiAqIGFzIHN1Y2ggdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYSB3ZWxsIGZvcm1lZCB0ZW1wbGF0ZSBjYWxsIHNpdGUgb2JqZWN0IGFuZCB0aGUgcmVzdFxuICogcGFyYW1ldGVyIHdpbGwgY29udGFpbiB0aGUgc3Vic3RpdHV0aW9uIHZhbHVlcy5cbiAqIEBwYXJhbSB0ZW1wbGF0ZSBBIHdlbGwtZm9ybWVkIHRlbXBsYXRlIHN0cmluZyBjYWxsIHNpdGUgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0gc3Vic3RpdHV0aW9ucyBBIHNldCBvZiBzdWJzdGl0dXRpb24gdmFsdWVzLlxuICovXG5leHBvcnQgbGV0IHJhdzogKHRlbXBsYXRlOiBUZW1wbGF0ZVN0cmluZ3NBcnJheSwgLi4uc3Vic3RpdHV0aW9uczogYW55W10pID0+IHN0cmluZztcblxuLyogRVM2IGluc3RhbmNlIG1ldGhvZHMgKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgbm9ubmVnYXRpdmUgaW50ZWdlciBOdW1iZXIgbGVzcyB0aGFuIDExMTQxMTIgKDB4MTEwMDAwKSB0aGF0IGlzIHRoZSBjb2RlIHBvaW50XG4gKiB2YWx1ZSBvZiB0aGUgVVRGLTE2IGVuY29kZWQgY29kZSBwb2ludCBzdGFydGluZyBhdCB0aGUgc3RyaW5nIGVsZW1lbnQgYXQgcG9zaXRpb24gcG9zIGluXG4gKiB0aGUgU3RyaW5nIHJlc3VsdGluZyBmcm9tIGNvbnZlcnRpbmcgdGhpcyBvYmplY3QgdG8gYSBTdHJpbmcuXG4gKiBJZiB0aGVyZSBpcyBubyBlbGVtZW50IGF0IHRoYXQgcG9zaXRpb24sIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLlxuICogSWYgYSB2YWxpZCBVVEYtMTYgc3Vycm9nYXRlIHBhaXIgZG9lcyBub3QgYmVnaW4gYXQgcG9zLCB0aGUgcmVzdWx0IGlzIHRoZSBjb2RlIHVuaXQgYXQgcG9zLlxuICovXG5leHBvcnQgbGV0IGNvZGVQb2ludEF0OiAodGFyZ2V0OiBzdHJpbmcsIHBvcz86IG51bWJlcikgPT4gbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcbiAqIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhpcyBvYmplY3QgKGNvbnZlcnRlZCB0byBhIFN0cmluZykgc3RhcnRpbmcgYXRcbiAqIGVuZFBvc2l0aW9uIOKAkyBsZW5ndGgodGhpcykuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICovXG5leHBvcnQgbGV0IGVuZHNXaXRoOiAodGFyZ2V0OiBzdHJpbmcsIHNlYXJjaFN0cmluZzogc3RyaW5nLCBlbmRQb3NpdGlvbj86IG51bWJlcikgPT4gYm9vbGVhbjtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgc2VhcmNoU3RyaW5nIGFwcGVhcnMgYXMgYSBzdWJzdHJpbmcgb2YgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoaXNcbiAqIG9iamVjdCB0byBhIFN0cmluZywgYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIHRoYXQgYXJlXG4gKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gcG9zaXRpb247IG90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcbiAqIEBwYXJhbSBzZWFyY2hTdHJpbmcgc2VhcmNoIHN0cmluZ1xuICogQHBhcmFtIHBvc2l0aW9uIElmIHBvc2l0aW9uIGlzIHVuZGVmaW5lZCwgMCBpcyBhc3N1bWVkLCBzbyBhcyB0byBzZWFyY2ggYWxsIG9mIHRoZSBTdHJpbmcuXG4gKi9cbmV4cG9ydCBsZXQgaW5jbHVkZXM6ICh0YXJnZXQ6IHN0cmluZywgc2VhcmNoU3RyaW5nOiBzdHJpbmcsIHBvc2l0aW9uPzogbnVtYmVyKSA9PiBib29sZWFuO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIFN0cmluZyB2YWx1ZSByZXN1bHQgb2Ygbm9ybWFsaXppbmcgdGhlIHN0cmluZyBpbnRvIHRoZSBub3JtYWxpemF0aW9uIGZvcm1cbiAqIG5hbWVkIGJ5IGZvcm0gYXMgc3BlY2lmaWVkIGluIFVuaWNvZGUgU3RhbmRhcmQgQW5uZXggIzE1LCBVbmljb2RlIE5vcm1hbGl6YXRpb24gRm9ybXMuXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXG4gKiBAcGFyYW0gZm9ybSBBcHBsaWNhYmxlIHZhbHVlczogXCJORkNcIiwgXCJORkRcIiwgXCJORktDXCIsIG9yIFwiTkZLRFwiLCBJZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRcbiAqIGlzIFwiTkZDXCJcbiAqL1xuZXhwb3J0IGxldCBub3JtYWxpemU6IFN0cmluZ05vcm1hbGl6ZTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgU3RyaW5nIHZhbHVlIHRoYXQgaXMgbWFkZSBmcm9tIGNvdW50IGNvcGllcyBhcHBlbmRlZCB0b2dldGhlci4gSWYgY291bnQgaXMgMCxcbiAqIFQgaXMgdGhlIGVtcHR5IFN0cmluZyBpcyByZXR1cm5lZC5cbiAqIEBwYXJhbSBjb3VudCBudW1iZXIgb2YgY29waWVzIHRvIGFwcGVuZFxuICovXG5leHBvcnQgbGV0IHJlcGVhdDogKHRhcmdldDogc3RyaW5nLCBjb3VudD86IG51bWJlcikgPT4gc3RyaW5nO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcbiAqIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhpcyBvYmplY3QgKGNvbnZlcnRlZCB0byBhIFN0cmluZykgc3RhcnRpbmcgYXRcbiAqIHBvc2l0aW9uLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAqL1xuZXhwb3J0IGxldCBzdGFydHNXaXRoOiAodGFyZ2V0OiBzdHJpbmcsIHNlYXJjaFN0cmluZzogc3RyaW5nLCBwb3NpdGlvbj86IG51bWJlcikgPT4gYm9vbGVhbjtcblxuLyogRVM3IGluc3RhbmNlIG1ldGhvZHMgKi9cblxuLyoqXG4gKiBQYWRzIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoIGEgZ2l2ZW4gc3RyaW5nIChwb3NzaWJseSByZXBlYXRlZCkgc28gdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyByZWFjaGVzIGEgZ2l2ZW4gbGVuZ3RoLlxuICogVGhlIHBhZGRpbmcgaXMgYXBwbGllZCBmcm9tIHRoZSBlbmQgKHJpZ2h0KSBvZiB0aGUgY3VycmVudCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xuICogQHBhcmFtIG1heExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9uY2UgdGhlIGN1cnJlbnQgc3RyaW5nIGhhcyBiZWVuIHBhZGRlZC5cbiAqICAgICAgICBJZiB0aGlzIHBhcmFtZXRlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgc3RyaW5nJ3MgbGVuZ3RoLCB0aGUgY3VycmVudCBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZCBhcyBpdCBpcy5cbiAqXG4gKiBAcGFyYW0gZmlsbFN0cmluZyBUaGUgc3RyaW5nIHRvIHBhZCB0aGUgY3VycmVudCBzdHJpbmcgd2l0aC5cbiAqICAgICAgICBJZiB0aGlzIHN0cmluZyBpcyB0b28gbG9uZywgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYW5kIHRoZSBsZWZ0LW1vc3QgcGFydCB3aWxsIGJlIGFwcGxpZWQuXG4gKiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIFwiIFwiIChVKzAwMjApLlxuICovXG5leHBvcnQgbGV0IHBhZEVuZDogKHRhcmdldDogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlciwgZmlsbFN0cmluZz86IHN0cmluZykgPT4gc3RyaW5nO1xuXG4vKipcbiAqIFBhZHMgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGggYSBnaXZlbiBzdHJpbmcgKHBvc3NpYmx5IHJlcGVhdGVkKSBzbyB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIHJlYWNoZXMgYSBnaXZlbiBsZW5ndGguXG4gKiBUaGUgcGFkZGluZyBpcyBhcHBsaWVkIGZyb20gdGhlIHN0YXJ0IChsZWZ0KSBvZiB0aGUgY3VycmVudCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xuICogQHBhcmFtIG1heExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9uY2UgdGhlIGN1cnJlbnQgc3RyaW5nIGhhcyBiZWVuIHBhZGRlZC5cbiAqICAgICAgICBJZiB0aGlzIHBhcmFtZXRlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgc3RyaW5nJ3MgbGVuZ3RoLCB0aGUgY3VycmVudCBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZCBhcyBpdCBpcy5cbiAqXG4gKiBAcGFyYW0gZmlsbFN0cmluZyBUaGUgc3RyaW5nIHRvIHBhZCB0aGUgY3VycmVudCBzdHJpbmcgd2l0aC5cbiAqICAgICAgICBJZiB0aGlzIHN0cmluZyBpcyB0b28gbG9uZywgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYW5kIHRoZSBsZWZ0LW1vc3QgcGFydCB3aWxsIGJlIGFwcGxpZWQuXG4gKiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIFwiIFwiIChVKzAwMjApLlxuICovXG5leHBvcnQgbGV0IHBhZFN0YXJ0OiAodGFyZ2V0OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyLCBmaWxsU3RyaW5nPzogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbmlmIChoYXMoJ2VzNi1zdHJpbmcnKSAmJiBoYXMoJ2VzNi1zdHJpbmctcmF3JykpIHtcblx0ZnJvbUNvZGVQb2ludCA9IGdsb2JhbC5TdHJpbmcuZnJvbUNvZGVQb2ludDtcblx0cmF3ID0gZ2xvYmFsLlN0cmluZy5yYXc7XG5cblx0Y29kZVBvaW50QXQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KTtcblx0ZW5kc1dpdGggPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKTtcblx0aW5jbHVkZXMgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKTtcblx0bm9ybWFsaXplID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5ub3JtYWxpemUpO1xuXHRyZXBlYXQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnJlcGVhdCk7XG5cdHN0YXJ0c1dpdGggPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgpO1xufSBlbHNlIHtcblx0LyoqXG5cdCAqIFZhbGlkYXRlcyB0aGF0IHRleHQgaXMgZGVmaW5lZCwgYW5kIG5vcm1hbGl6ZXMgcG9zaXRpb24gKGJhc2VkIG9uIHRoZSBnaXZlbiBkZWZhdWx0IGlmIHRoZSBpbnB1dCBpcyBOYU4pLlxuXHQgKiBVc2VkIGJ5IHN0YXJ0c1dpdGgsIGluY2x1ZGVzLCBhbmQgZW5kc1dpdGguXG5cdCAqXG5cdCAqIEByZXR1cm4gTm9ybWFsaXplZCBwb3NpdGlvbi5cblx0ICovXG5cdGNvbnN0IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MgPSBmdW5jdGlvbihcblx0XHRuYW1lOiBzdHJpbmcsXG5cdFx0dGV4dDogc3RyaW5nLFxuXHRcdHNlYXJjaDogc3RyaW5nLFxuXHRcdHBvc2l0aW9uOiBudW1iZXIsXG5cdFx0aXNFbmQ6IGJvb2xlYW4gPSBmYWxzZVxuXHQpOiBbc3RyaW5nLCBzdHJpbmcsIG51bWJlcl0ge1xuXHRcdGlmICh0ZXh0ID09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy4nICsgbmFtZSArICcgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcgdG8gc2VhcmNoIGFnYWluc3QuJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XG5cdFx0cG9zaXRpb24gPSBwb3NpdGlvbiAhPT0gcG9zaXRpb24gPyAoaXNFbmQgPyBsZW5ndGggOiAwKSA6IHBvc2l0aW9uO1xuXHRcdHJldHVybiBbdGV4dCwgU3RyaW5nKHNlYXJjaCksIE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLCAwKSwgbGVuZ3RoKV07XG5cdH07XG5cblx0ZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50czogbnVtYmVyW10pOiBzdHJpbmcge1xuXHRcdC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcuZnJvbUNvZGVQb2ludFxuXHRcdGNvbnN0IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0aWYgKCFsZW5ndGgpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRjb25zdCBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXHRcdGNvbnN0IE1BWF9TSVpFID0gMHg0MDAwO1xuXHRcdGxldCBjb2RlVW5pdHM6IG51bWJlcltdID0gW107XG5cdFx0bGV0IGluZGV4ID0gLTE7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXG5cdFx0d2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcblx0XHRcdGxldCBjb2RlUG9pbnQgPSBOdW1iZXIoYXJndW1lbnRzW2luZGV4XSk7XG5cblx0XHRcdC8vIENvZGUgcG9pbnRzIG11c3QgYmUgZmluaXRlIGludGVnZXJzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2Vcblx0XHRcdGxldCBpc1ZhbGlkID1cblx0XHRcdFx0aXNGaW5pdGUoY29kZVBvaW50KSAmJiBNYXRoLmZsb29yKGNvZGVQb2ludCkgPT09IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPj0gMCAmJiBjb2RlUG9pbnQgPD0gMHgxMGZmZmY7XG5cdFx0XHRpZiAoIWlzVmFsaWQpIHtcblx0XHRcdFx0dGhyb3cgUmFuZ2VFcnJvcignc3RyaW5nLmZyb21Db2RlUG9pbnQ6IEludmFsaWQgY29kZSBwb2ludCAnICsgY29kZVBvaW50KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNvZGVQb2ludCA8PSAweGZmZmYpIHtcblx0XHRcdFx0Ly8gQk1QIGNvZGUgcG9pbnRcblx0XHRcdFx0Y29kZVVuaXRzLnB1c2goY29kZVBvaW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEFzdHJhbCBjb2RlIHBvaW50OyBzcGxpdCBpbiBzdXJyb2dhdGUgaGFsdmVzXG5cdFx0XHRcdC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuXHRcdFx0XHRjb2RlUG9pbnQgLT0gMHgxMDAwMDtcblx0XHRcdFx0bGV0IGhpZ2hTdXJyb2dhdGUgPSAoY29kZVBvaW50ID4+IDEwKSArIEhJR0hfU1VSUk9HQVRFX01JTjtcblx0XHRcdFx0bGV0IGxvd1N1cnJvZ2F0ZSA9IGNvZGVQb2ludCAlIDB4NDAwICsgTE9XX1NVUlJPR0FURV9NSU47XG5cdFx0XHRcdGNvZGVVbml0cy5wdXNoKGhpZ2hTdXJyb2dhdGUsIGxvd1N1cnJvZ2F0ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbmRleCArIDEgPT09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcblx0XHRcdFx0cmVzdWx0ICs9IGZyb21DaGFyQ29kZS5hcHBseShudWxsLCBjb2RlVW5pdHMpO1xuXHRcdFx0XHRjb2RlVW5pdHMubGVuZ3RoID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHRyYXcgPSBmdW5jdGlvbiByYXcoY2FsbFNpdGU6IFRlbXBsYXRlU3RyaW5nc0FycmF5LCAuLi5zdWJzdGl0dXRpb25zOiBhbnlbXSk6IHN0cmluZyB7XG5cdFx0bGV0IHJhd1N0cmluZ3MgPSBjYWxsU2l0ZS5yYXc7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdGxldCBudW1TdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9ucy5sZW5ndGg7XG5cblx0XHRpZiAoY2FsbFNpdGUgPT0gbnVsbCB8fCBjYWxsU2l0ZS5yYXcgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJhdyByZXF1aXJlcyBhIHZhbGlkIGNhbGxTaXRlIG9iamVjdCB3aXRoIGEgcmF3IHZhbHVlJyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IHJhd1N0cmluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdHJlc3VsdCArPSByYXdTdHJpbmdzW2ldICsgKGkgPCBudW1TdWJzdGl0dXRpb25zICYmIGkgPCBsZW5ndGggLSAxID8gc3Vic3RpdHV0aW9uc1tpXSA6ICcnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdGNvZGVQb2ludEF0ID0gZnVuY3Rpb24gY29kZVBvaW50QXQodGV4dDogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyID0gMCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRcblx0XHRpZiAodGV4dCA9PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcuY29kZVBvaW50QXQgcmVxdXJpZXMgYSB2YWxpZCBzdHJpbmcuJyk7XG5cdFx0fVxuXHRcdGNvbnN0IGxlbmd0aCA9IHRleHQubGVuZ3RoO1xuXG5cdFx0aWYgKHBvc2l0aW9uICE9PSBwb3NpdGlvbikge1xuXHRcdFx0cG9zaXRpb24gPSAwO1xuXHRcdH1cblx0XHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IGxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIGZpcnN0IGNvZGUgdW5pdFxuXHRcdGNvbnN0IGZpcnN0ID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcblx0XHRpZiAoZmlyc3QgPj0gSElHSF9TVVJST0dBVEVfTUlOICYmIGZpcnN0IDw9IEhJR0hfU1VSUk9HQVRFX01BWCAmJiBsZW5ndGggPiBwb3NpdGlvbiArIDEpIHtcblx0XHRcdC8vIFN0YXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIgKGhpZ2ggc3Vycm9nYXRlIGFuZCB0aGVyZSBpcyBhIG5leHQgY29kZSB1bml0KTsgY2hlY2sgZm9yIGxvdyBzdXJyb2dhdGVcblx0XHRcdC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuXHRcdFx0Y29uc3Qgc2Vjb25kID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSk7XG5cdFx0XHRpZiAoc2Vjb25kID49IExPV19TVVJST0dBVEVfTUlOICYmIHNlY29uZCA8PSBMT1dfU1VSUk9HQVRFX01BWCkge1xuXHRcdFx0XHRyZXR1cm4gKGZpcnN0IC0gSElHSF9TVVJST0dBVEVfTUlOKSAqIDB4NDAwICsgc2Vjb25kIC0gTE9XX1NVUlJPR0FURV9NSU4gKyAweDEwMDAwO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH07XG5cblx0ZW5kc1dpdGggPSBmdW5jdGlvbiBlbmRzV2l0aCh0ZXh0OiBzdHJpbmcsIHNlYXJjaDogc3RyaW5nLCBlbmRQb3NpdGlvbj86IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGlmIChlbmRQb3NpdGlvbiA9PSBudWxsKSB7XG5cdFx0XHRlbmRQb3NpdGlvbiA9IHRleHQubGVuZ3RoO1xuXHRcdH1cblxuXHRcdFt0ZXh0LCBzZWFyY2gsIGVuZFBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ2VuZHNXaXRoJywgdGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbiwgdHJ1ZSk7XG5cblx0XHRjb25zdCBzdGFydCA9IGVuZFBvc2l0aW9uIC0gc2VhcmNoLmxlbmd0aDtcblx0XHRpZiAoc3RhcnQgPCAwKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRleHQuc2xpY2Uoc3RhcnQsIGVuZFBvc2l0aW9uKSA9PT0gc2VhcmNoO1xuXHR9O1xuXG5cdGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXModGV4dDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZywgcG9zaXRpb246IG51bWJlciA9IDApOiBib29sZWFuIHtcblx0XHRbdGV4dCwgc2VhcmNoLCBwb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdpbmNsdWRlcycsIHRleHQsIHNlYXJjaCwgcG9zaXRpb24pO1xuXHRcdHJldHVybiB0ZXh0LmluZGV4T2Yoc2VhcmNoLCBwb3NpdGlvbikgIT09IC0xO1xuXHR9O1xuXG5cdHJlcGVhdCA9IGZ1bmN0aW9uIHJlcGVhdCh0ZXh0OiBzdHJpbmcsIGNvdW50OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcblx0XHQvLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcblx0XHRpZiAodGV4dCA9PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xuXHRcdH1cblx0XHRpZiAoY291bnQgIT09IGNvdW50KSB7XG5cdFx0XHRjb3VudCA9IDA7XG5cdFx0fVxuXHRcdGlmIChjb3VudCA8IDAgfHwgY291bnQgPT09IEluZmluaXR5KSB7XG5cdFx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XG5cdFx0fVxuXG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdHdoaWxlIChjb3VudCkge1xuXHRcdFx0aWYgKGNvdW50ICUgMikge1xuXHRcdFx0XHRyZXN1bHQgKz0gdGV4dDtcblx0XHRcdH1cblx0XHRcdGlmIChjb3VudCA+IDEpIHtcblx0XHRcdFx0dGV4dCArPSB0ZXh0O1xuXHRcdFx0fVxuXHRcdFx0Y291bnQgPj49IDE7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0c3RhcnRzV2l0aCA9IGZ1bmN0aW9uIHN0YXJ0c1dpdGgodGV4dDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZywgcG9zaXRpb246IG51bWJlciA9IDApOiBib29sZWFuIHtcblx0XHRzZWFyY2ggPSBTdHJpbmcoc2VhcmNoKTtcblx0XHRbdGV4dCwgc2VhcmNoLCBwb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdzdGFydHNXaXRoJywgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbik7XG5cblx0XHRjb25zdCBlbmQgPSBwb3NpdGlvbiArIHNlYXJjaC5sZW5ndGg7XG5cdFx0aWYgKGVuZCA+IHRleHQubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRleHQuc2xpY2UocG9zaXRpb24sIGVuZCkgPT09IHNlYXJjaDtcblx0fTtcbn1cblxuaWYgKGhhcygnZXMyMDE3LXN0cmluZycpKSB7XG5cdHBhZEVuZCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucGFkRW5kKTtcblx0cGFkU3RhcnQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KTtcbn0gZWxzZSB7XG5cdHBhZEVuZCA9IGZ1bmN0aW9uIHBhZEVuZCh0ZXh0OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyLCBmaWxsU3RyaW5nOiBzdHJpbmcgPSAnICcpOiBzdHJpbmcge1xuXHRcdGlmICh0ZXh0ID09PSBudWxsIHx8IHRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIHZhbGlkIHN0cmluZy4nKTtcblx0XHR9XG5cblx0XHRpZiAobWF4TGVuZ3RoID09PSBJbmZpbml0eSkge1xuXHRcdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5wYWRFbmQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xuXHRcdH1cblxuXHRcdGlmIChtYXhMZW5ndGggPT09IG51bGwgfHwgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbWF4TGVuZ3RoIDwgMCkge1xuXHRcdFx0bWF4TGVuZ3RoID0gMDtcblx0XHR9XG5cblx0XHRsZXQgc3RyVGV4dCA9IFN0cmluZyh0ZXh0KTtcblx0XHRjb25zdCBwYWRkaW5nID0gbWF4TGVuZ3RoIC0gc3RyVGV4dC5sZW5ndGg7XG5cblx0XHRpZiAocGFkZGluZyA+IDApIHtcblx0XHRcdHN0clRleHQgKz1cblx0XHRcdFx0cmVwZWF0KGZpbGxTdHJpbmcsIE1hdGguZmxvb3IocGFkZGluZyAvIGZpbGxTdHJpbmcubGVuZ3RoKSkgK1xuXHRcdFx0XHRmaWxsU3RyaW5nLnNsaWNlKDAsIHBhZGRpbmcgJSBmaWxsU3RyaW5nLmxlbmd0aCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN0clRleHQ7XG5cdH07XG5cblx0cGFkU3RhcnQgPSBmdW5jdGlvbiBwYWRTdGFydCh0ZXh0OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyLCBmaWxsU3RyaW5nOiBzdHJpbmcgPSAnICcpOiBzdHJpbmcge1xuXHRcdGlmICh0ZXh0ID09PSBudWxsIHx8IHRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIHZhbGlkIHN0cmluZy4nKTtcblx0XHR9XG5cblx0XHRpZiAobWF4TGVuZ3RoID09PSBJbmZpbml0eSkge1xuXHRcdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5wYWRTdGFydCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKG1heExlbmd0aCA9PT0gbnVsbCB8fCBtYXhMZW5ndGggPT09IHVuZGVmaW5lZCB8fCBtYXhMZW5ndGggPCAwKSB7XG5cdFx0XHRtYXhMZW5ndGggPSAwO1xuXHRcdH1cblxuXHRcdGxldCBzdHJUZXh0ID0gU3RyaW5nKHRleHQpO1xuXHRcdGNvbnN0IHBhZGRpbmcgPSBtYXhMZW5ndGggLSBzdHJUZXh0Lmxlbmd0aDtcblxuXHRcdGlmIChwYWRkaW5nID4gMCkge1xuXHRcdFx0c3RyVGV4dCA9XG5cdFx0XHRcdHJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcblx0XHRcdFx0ZmlsbFN0cmluZy5zbGljZSgwLCBwYWRkaW5nICUgZmlsbFN0cmluZy5sZW5ndGgpICtcblx0XHRcdFx0c3RyVGV4dDtcblx0XHR9XG5cblx0XHRyZXR1cm4gc3RyVGV4dDtcblx0fTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzdHJpbmcudHMiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4uL2dsb2JhbCc7XG5pbXBvcnQgaGFzIGZyb20gJy4vaGFzJztcbmltcG9ydCB7IEhhbmRsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5mdW5jdGlvbiBleGVjdXRlVGFzayhpdGVtOiBRdWV1ZUl0ZW0gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0aWYgKGl0ZW0gJiYgaXRlbS5pc0FjdGl2ZSAmJiBpdGVtLmNhbGxiYWNrKSB7XG5cdFx0aXRlbS5jYWxsYmFjaygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFF1ZXVlSGFuZGxlKGl0ZW06IFF1ZXVlSXRlbSwgZGVzdHJ1Y3Rvcj86ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogSGFuZGxlIHtcblx0cmV0dXJuIHtcblx0XHRkZXN0cm95OiBmdW5jdGlvbih0aGlzOiBIYW5kbGUpIHtcblx0XHRcdHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkge307XG5cdFx0XHRpdGVtLmlzQWN0aXZlID0gZmFsc2U7XG5cdFx0XHRpdGVtLmNhbGxiYWNrID0gbnVsbDtcblxuXHRcdFx0aWYgKGRlc3RydWN0b3IpIHtcblx0XHRcdFx0ZGVzdHJ1Y3RvcigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuaW50ZXJmYWNlIFBvc3RNZXNzYWdlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG5cdHNvdXJjZTogYW55O1xuXHRkYXRhOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVJdGVtIHtcblx0aXNBY3RpdmU6IGJvb2xlYW47XG5cdGNhbGxiYWNrOiBudWxsIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4gYW55KTtcbn1cblxubGV0IGNoZWNrTWljcm9UYXNrUXVldWU6ICgpID0+IHZvaWQ7XG5sZXQgbWljcm9UYXNrczogUXVldWVJdGVtW107XG5cbi8qKlxuICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gdGhlIG1hY3JvdGFzayBxdWV1ZS5cbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxuICovXG5leHBvcnQgY29uc3QgcXVldWVUYXNrID0gKGZ1bmN0aW9uKCkge1xuXHRsZXQgZGVzdHJ1Y3RvcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG5cdGxldCBlbnF1ZXVlOiAoaXRlbTogUXVldWVJdGVtKSA9PiB2b2lkO1xuXG5cdC8vIFNpbmNlIHRoZSBJRSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0SW1tZWRpYXRlYCBpcyBub3QgZmxhd2xlc3MsIHdlIHdpbGwgdGVzdCBmb3IgYHBvc3RNZXNzYWdlYCBmaXJzdC5cblx0aWYgKGhhcygncG9zdG1lc3NhZ2UnKSkge1xuXHRcdGNvbnN0IHF1ZXVlOiBRdWV1ZUl0ZW1bXSA9IFtdO1xuXG5cdFx0Z2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihldmVudDogUG9zdE1lc3NhZ2VFdmVudCk6IHZvaWQge1xuXHRcdFx0Ly8gQ29uZmlybSB0aGF0IHRoZSBldmVudCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgYnkgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLlxuXHRcdFx0aWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmIGV2ZW50LmRhdGEgPT09ICdkb2pvLXF1ZXVlLW1lc3NhZ2UnKSB7XG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0XHRcdGlmIChxdWV1ZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRleGVjdXRlVGFzayhxdWV1ZS5zaGlmdCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZW5xdWV1ZSA9IGZ1bmN0aW9uKGl0ZW06IFF1ZXVlSXRlbSk6IHZvaWQge1xuXHRcdFx0cXVldWUucHVzaChpdGVtKTtcblx0XHRcdGdsb2JhbC5wb3N0TWVzc2FnZSgnZG9qby1xdWV1ZS1tZXNzYWdlJywgJyonKTtcblx0XHR9O1xuXHR9IGVsc2UgaWYgKGhhcygnc2V0aW1tZWRpYXRlJykpIHtcblx0XHRkZXN0cnVjdG9yID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xuXHRcdGVucXVldWUgPSBmdW5jdGlvbihpdGVtOiBRdWV1ZUl0ZW0pOiBhbnkge1xuXHRcdFx0cmV0dXJuIHNldEltbWVkaWF0ZShleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGRlc3RydWN0b3IgPSBnbG9iYWwuY2xlYXJUaW1lb3V0O1xuXHRcdGVucXVldWUgPSBmdW5jdGlvbihpdGVtOiBRdWV1ZUl0ZW0pOiBhbnkge1xuXHRcdFx0cmV0dXJuIHNldFRpbWVvdXQoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSwgMCk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHF1ZXVlVGFzayhjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBIYW5kbGUge1xuXHRcdGNvbnN0IGl0ZW06IFF1ZXVlSXRlbSA9IHtcblx0XHRcdGlzQWN0aXZlOiB0cnVlLFxuXHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrXG5cdFx0fTtcblx0XHRjb25zdCBpZDogYW55ID0gZW5xdWV1ZShpdGVtKTtcblxuXHRcdHJldHVybiBnZXRRdWV1ZUhhbmRsZShcblx0XHRcdGl0ZW0sXG5cdFx0XHRkZXN0cnVjdG9yICYmXG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlc3RydWN0b3IoaWQpO1xuXHRcdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxuXHRyZXR1cm4gaGFzKCdtaWNyb3Rhc2tzJylcblx0XHQ/IHF1ZXVlVGFza1xuXHRcdDogZnVuY3Rpb24oY2FsbGJhY2s6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogSGFuZGxlIHtcblx0XHRcdFx0Y2hlY2tNaWNyb1Rhc2tRdWV1ZSgpO1xuXHRcdFx0XHRyZXR1cm4gcXVldWVUYXNrKGNhbGxiYWNrKTtcblx0XHRcdH07XG59KSgpO1xuXG4vLyBXaGVuIG5vIG1lY2hhbmlzbSBmb3IgcmVnaXN0ZXJpbmcgbWljcm90YXNrcyBpcyBleHBvc2VkIGJ5IHRoZSBlbnZpcm9ubWVudCwgbWljcm90YXNrcyB3aWxsXG4vLyBiZSBxdWV1ZWQgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYSBzaW5nbGUgbWFjcm90YXNrIGJlZm9yZSB0aGUgb3RoZXIgbWFjcm90YXNrcyBhcmUgZXhlY3V0ZWQuXG5pZiAoIWhhcygnbWljcm90YXNrcycpKSB7XG5cdGxldCBpc01pY3JvVGFza1F1ZXVlZCA9IGZhbHNlO1xuXG5cdG1pY3JvVGFza3MgPSBbXTtcblx0Y2hlY2tNaWNyb1Rhc2tRdWV1ZSA9IGZ1bmN0aW9uKCk6IHZvaWQge1xuXHRcdGlmICghaXNNaWNyb1Rhc2tRdWV1ZWQpIHtcblx0XHRcdGlzTWljcm9UYXNrUXVldWVkID0gdHJ1ZTtcblx0XHRcdHF1ZXVlVGFzayhmdW5jdGlvbigpIHtcblx0XHRcdFx0aXNNaWNyb1Rhc2tRdWV1ZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAobWljcm9UYXNrcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRsZXQgaXRlbTogUXVldWVJdGVtIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdHdoaWxlICgoaXRlbSA9IG1pY3JvVGFza3Muc2hpZnQoKSkpIHtcblx0XHRcdFx0XHRcdGV4ZWN1dGVUYXNrKGl0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIFNjaGVkdWxlcyBhbiBhbmltYXRpb24gdGFzayB3aXRoIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpZiBpdCBleGlzdHMsIG9yIHdpdGggYHF1ZXVlVGFza2Agb3RoZXJ3aXNlLlxuICpcbiAqIFNpbmNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSdzIGJlaGF2aW9yIGRvZXMgbm90IG1hdGNoIHRoYXQgZXhwZWN0ZWQgZnJvbSBgcXVldWVUYXNrYCwgaXQgaXMgbm90IHVzZWQgdGhlcmUuXG4gKiBIb3dldmVyLCBhdCB0aW1lcyBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGRlbGVnYXRlIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZTsgaGVuY2UgdGhlIGZvbGxvd2luZyBtZXRob2QuXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXVlQW5pbWF0aW9uVGFzayA9IChmdW5jdGlvbigpIHtcblx0aWYgKCFoYXMoJ3JhZicpKSB7XG5cdFx0cmV0dXJuIHF1ZXVlVGFzaztcblx0fVxuXG5cdGZ1bmN0aW9uIHF1ZXVlQW5pbWF0aW9uVGFzayhjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBIYW5kbGUge1xuXHRcdGNvbnN0IGl0ZW06IFF1ZXVlSXRlbSA9IHtcblx0XHRcdGlzQWN0aXZlOiB0cnVlLFxuXHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrXG5cdFx0fTtcblx0XHRjb25zdCByYWZJZDogbnVtYmVyID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSkpO1xuXG5cdFx0cmV0dXJuIGdldFF1ZXVlSGFuZGxlKGl0ZW0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gVE9ETzogVXNlIGFzcGVjdC5iZWZvcmUgd2hlbiBpdCBpcyBhdmFpbGFibGUuXG5cdHJldHVybiBoYXMoJ21pY3JvdGFza3MnKVxuXHRcdD8gcXVldWVBbmltYXRpb25UYXNrXG5cdFx0OiBmdW5jdGlvbihjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBIYW5kbGUge1xuXHRcdFx0XHRjaGVja01pY3JvVGFza1F1ZXVlKCk7XG5cdFx0XHRcdHJldHVybiBxdWV1ZUFuaW1hdGlvblRhc2soY2FsbGJhY2spO1xuXHRcdFx0fTtcbn0pKCk7XG5cbi8qKlxuICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gdGhlIG1pY3JvdGFzayBxdWV1ZS5cbiAqXG4gKiBBbnkgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBgcXVldWVNaWNyb1Rhc2tgIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBuZXh0IG1hY3JvdGFzay4gSWYgbm8gbmF0aXZlXG4gKiBtZWNoYW5pc20gZm9yIHNjaGVkdWxpbmcgbWFjcm90YXNrcyBpcyBleHBvc2VkLCB0aGVuIGFueSBjYWxsYmFja3Mgd2lsbCBiZSBmaXJlZCBiZWZvcmUgYW55IG1hY3JvdGFza1xuICogcmVnaXN0ZXJlZCB3aXRoIGBxdWV1ZVRhc2tgIG9yIGBxdWV1ZUFuaW1hdGlvblRhc2tgLlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayB0aGUgZnVuY3Rpb24gdG8gYmUgcXVldWVkIGFuZCBsYXRlciBleGVjdXRlZC5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGEgYGRlc3Ryb3lgIG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgcHJldmVudHMgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnJvbSBleGVjdXRpbmcuXG4gKi9cbmV4cG9ydCBsZXQgcXVldWVNaWNyb1Rhc2sgPSAoZnVuY3Rpb24oKSB7XG5cdGxldCBlbnF1ZXVlOiAoaXRlbTogUXVldWVJdGVtKSA9PiB2b2lkO1xuXG5cdGlmIChoYXMoJ2hvc3Qtbm9kZScpKSB7XG5cdFx0ZW5xdWV1ZSA9IGZ1bmN0aW9uKGl0ZW06IFF1ZXVlSXRlbSk6IHZvaWQge1xuXHRcdFx0Z2xvYmFsLnByb2Nlc3MubmV4dFRpY2soZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSk7XG5cdFx0fTtcblx0fSBlbHNlIGlmIChoYXMoJ2VzNi1wcm9taXNlJykpIHtcblx0XHRlbnF1ZXVlID0gZnVuY3Rpb24oaXRlbTogUXVldWVJdGVtKTogdm9pZCB7XG5cdFx0XHRnbG9iYWwuUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4oZXhlY3V0ZVRhc2spO1xuXHRcdH07XG5cdH0gZWxzZSBpZiAoaGFzKCdkb20tbXV0YXRpb25vYnNlcnZlcicpKSB7XG5cdFx0LyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cblx0XHRjb25zdCBIb3N0TXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuXHRcdGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRjb25zdCBxdWV1ZTogUXVldWVJdGVtW10gPSBbXTtcblx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBIb3N0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpOiB2b2lkIHtcblx0XHRcdHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmlzQWN0aXZlICYmIGl0ZW0uY2FsbGJhY2spIHtcblx0XHRcdFx0XHRpdGVtLmNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuXG5cdFx0ZW5xdWV1ZSA9IGZ1bmN0aW9uKGl0ZW06IFF1ZXVlSXRlbSk6IHZvaWQge1xuXHRcdFx0cXVldWUucHVzaChpdGVtKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdxdWV1ZVN0YXR1cycsICcxJyk7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRlbnF1ZXVlID0gZnVuY3Rpb24oaXRlbTogUXVldWVJdGVtKTogdm9pZCB7XG5cdFx0XHRjaGVja01pY3JvVGFza1F1ZXVlKCk7XG5cdFx0XHRtaWNyb1Rhc2tzLnB1c2goaXRlbSk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBmdW5jdGlvbihjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiBIYW5kbGUge1xuXHRcdGNvbnN0IGl0ZW06IFF1ZXVlSXRlbSA9IHtcblx0XHRcdGlzQWN0aXZlOiB0cnVlLFxuXHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrXG5cdFx0fTtcblxuXHRcdGVucXVldWUoaXRlbSk7XG5cblx0XHRyZXR1cm4gZ2V0UXVldWVIYW5kbGUoaXRlbSk7XG5cdH07XG59KSgpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHF1ZXVlLnRzIiwiLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSB2YWx1ZSBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gKlxuICogQHBhcmFtIHZhbHVlICAgICAgICBUaGUgdmFsdWUgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3Igc2hvdWxkIGJlIHNldCB0b1xuICogQHBhcmFtIGVudW1lcmFibGUgICBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGVudW1iZXJhYmxlLCBkZWZhdWx0cyB0byBmYWxzZVxuICogQHBhcmFtIHdyaXRhYmxlICAgICBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlLCBkZWZhdWx0cyB0byB0cnVlXG4gKiBAcGFyYW0gY29uZmlndXJhYmxlIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uZmlndXJhYmxlLCBkZWZhdWx0cyB0byB0cnVlXG4gKiBAcmV0dXJuICAgICAgICAgICAgIFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWVEZXNjcmlwdG9yPFQ+KFxuXHR2YWx1ZTogVCxcblx0ZW51bWVyYWJsZTogYm9vbGVhbiA9IGZhbHNlLFxuXHR3cml0YWJsZTogYm9vbGVhbiA9IHRydWUsXG5cdGNvbmZpZ3VyYWJsZTogYm9vbGVhbiA9IHRydWVcbik6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+IHtcblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZW51bWVyYWJsZTogZW51bWVyYWJsZSxcblx0XHR3cml0YWJsZTogd3JpdGFibGUsXG5cdFx0Y29uZmlndXJhYmxlOiBjb25maWd1cmFibGVcblx0fTtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciBmdW5jdGlvbiB3aGljaCB3cmFwcyBhIGZ1bmN0aW9uIHdoZXJlIHRoZSBmaXJzdCBhcmd1bWVudCBiZWNvbWVzIHRoZSBzY29wZVxuICogb2YgdGhlIGNhbGxcbiAqXG4gKiBAcGFyYW0gbmF0aXZlRnVuY3Rpb24gVGhlIHNvdXJjZSBmdW5jdGlvbiB0byBiZSB3cmFwcGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTmF0aXZlPFQsIFUsIFI+KG5hdGl2ZUZ1bmN0aW9uOiAoYXJnMTogVSkgPT4gUik6ICh0YXJnZXQ6IFQsIGFyZzE6IFUpID0+IFI7XG5leHBvcnQgZnVuY3Rpb24gd3JhcE5hdGl2ZTxULCBVLCBWLCBSPihuYXRpdmVGdW5jdGlvbjogKGFyZzE6IFUsIGFyZzI6IFYpID0+IFIpOiAodGFyZ2V0OiBULCBhcmcxOiBVLCBhcmcyOiBWKSA9PiBSO1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBOYXRpdmU8VCwgVSwgViwgVywgUj4oXG5cdG5hdGl2ZUZ1bmN0aW9uOiAoYXJnMTogVSwgYXJnMjogViwgYXJnMzogVykgPT4gUlxuKTogKHRhcmdldDogVCwgYXJnMTogVSwgYXJnMjogViwgYXJnMzogVykgPT4gUjtcbmV4cG9ydCBmdW5jdGlvbiB3cmFwTmF0aXZlPFQsIFUsIFYsIFcsIFgsIFI+KFxuXHRuYXRpdmVGdW5jdGlvbjogKGFyZzE6IFUsIGFyZzI6IFYsIGFyZzM6IFcpID0+IFJcbik6ICh0YXJnZXQ6IFQsIGFyZzE6IFUsIGFyZzI6IFYsIGFyZzM6IFcpID0+IFI7XG5leHBvcnQgZnVuY3Rpb24gd3JhcE5hdGl2ZTxULCBVLCBWLCBXLCBYLCBZLCBSPihcblx0bmF0aXZlRnVuY3Rpb246IChhcmcxOiBVLCBhcmcyOiBWLCBhcmczOiBXLCBhcmc0OiBZKSA9PiBSXG4pOiAodGFyZ2V0OiBULCBhcmcxOiBVLCBhcmcyOiBWLCBhcmczOiBXLCBhcmc0OiBZKSA9PiBSO1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBOYXRpdmUobmF0aXZlRnVuY3Rpb246ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogKHRhcmdldDogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueSB7XG5cdFx0cmV0dXJuIG5hdGl2ZUZ1bmN0aW9uLmFwcGx5KHRhcmdldCwgYXJncyk7XG5cdH07XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gdXRpbC50cyIsImltcG9ydCBhc3NlcnRSZW5kZXIgZnJvbSAnLi9zdXBwb3J0L2Fzc2VydFJlbmRlcic7XG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tICcuL3N1cHBvcnQvc2VsZWN0b3InO1xuaW1wb3J0IHsgV05vZGUsIEROb2RlLCBXaWRnZXRCYXNlSW50ZXJmYWNlLCBDb25zdHJ1Y3RvciwgVk5vZGUgfSBmcm9tICcuLi93aWRnZXQtY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFdpZGdldEJhc2UgfSBmcm9tICcuLi93aWRnZXQtY29yZS9XaWRnZXRCYXNlJztcbmltcG9ydCB7IGRlY29yYXRlLCBpc1ZOb2RlLCBpc1dOb2RlIH0gZnJvbSAnLi4vd2lkZ2V0LWNvcmUvZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tQ29tcGFyYXRvciB7XG5cdHNlbGVjdG9yOiBzdHJpbmc7XG5cdHByb3BlcnR5OiBzdHJpbmc7XG5cdGNvbXBhcmF0b3I6ICh2YWx1ZTogYW55KSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uYWxTZWxlY3RvciB7XG5cdChub2RlOiBWTm9kZSB8IFdOb2RlKTogdW5kZWZpbmVkIHwgRnVuY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb3JhdG9yUmVzdWx0PFQ+IHtcblx0aGFzRGVmZXJyZWRQcm9wZXJ0aWVzOiBib29sZWFuO1xuXHRub2RlczogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBlY3RlZFJlbmRlciB7XG5cdCgpOiBETm9kZSB8IEROb2RlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwZWN0IHtcblx0KGV4cGVjdGVkUmVuZGVyRnVuYzogRXhwZWN0ZWRSZW5kZXIpOiB2b2lkO1xuXHQoZXhwZWN0ZWRSZW5kZXJGdW5jOiBFeHBlY3RlZFJlbmRlciwgYWN0dWFsUmVuZGVyRnVuYz86IEV4cGVjdGVkUmVuZGVyKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBlY3RQYXJ0aWFsIHtcblx0KHNlbGVjdG9yOiBzdHJpbmcsIGV4cGVjdGVkUmVuZGVyRnVuYzogRXhwZWN0ZWRSZW5kZXIpOiB2b2lkO1xuXHQoc2VsZWN0b3I6IHN0cmluZywgZXhwZWN0ZWRSZW5kZXJGdW5jOiBFeHBlY3RlZFJlbmRlciwgYWN0dWFsUmVuZGVyRnVuYz86IEV4cGVjdGVkUmVuZGVyKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmlnZ2VyIHtcblx0KHNlbGVjdG9yOiBzdHJpbmcsIGZ1bmN0aW9uU2VsZWN0b3I6IEZ1bmN0aW9uYWxTZWxlY3RvciwgLi4uYXJnczogYW55W10pOiBhbnk7XG5cdChzZWxlY3Rvcjogc3RyaW5nLCBmdW5jdGlvblNlbGVjdG9yOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFJlbmRlciB7XG5cdChpbmRleD86IG51bWJlcik6IEROb2RlIHwgRE5vZGVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIYXJuZXNzQVBJIHtcblx0ZXhwZWN0OiBFeHBlY3Q7XG5cdGV4cGVjdFBhcnRpYWw6IEV4cGVjdFBhcnRpYWw7XG5cdHRyaWdnZXI6IFRyaWdnZXI7XG5cdGdldFJlbmRlcjogR2V0UmVuZGVyO1xufVxuXG5mdW5jdGlvbiBkZWNvcmF0ZU5vZGVzKGROb2RlOiBETm9kZVtdKTogRGVjb3JhdG9yUmVzdWx0PEROb2RlW10+O1xuZnVuY3Rpb24gZGVjb3JhdGVOb2RlcyhkTm9kZTogRE5vZGUpOiBEZWNvcmF0b3JSZXN1bHQ8RE5vZGU+O1xuZnVuY3Rpb24gZGVjb3JhdGVOb2RlcyhkTm9kZTogRE5vZGUgfCBETm9kZVtdKTogRGVjb3JhdG9yUmVzdWx0PEROb2RlIHwgRE5vZGVbXT47XG5mdW5jdGlvbiBkZWNvcmF0ZU5vZGVzKGROb2RlOiBhbnkpOiBEZWNvcmF0b3JSZXN1bHQ8RE5vZGUgfCBETm9kZVtdPiB7XG5cdGxldCBoYXNEZWZlcnJlZFByb3BlcnRpZXMgPSBmYWxzZTtcblx0ZnVuY3Rpb24gYWRkUGFyZW50KHBhcmVudDogV05vZGUgfCBWTm9kZSk6IHZvaWQge1xuXHRcdChwYXJlbnQuY2hpbGRyZW4gfHwgW10pLmZvckVhY2goKGNoaWxkKSA9PiB7XG5cdFx0XHRpZiAoaXNWTm9kZShjaGlsZCkgfHwgaXNXTm9kZShjaGlsZCkpIHtcblx0XHRcdFx0KGNoaWxkIGFzIGFueSkucGFyZW50ID0gcGFyZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChpc1ZOb2RlKHBhcmVudCkgJiYgdHlwZW9mIHBhcmVudC5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0aGFzRGVmZXJyZWRQcm9wZXJ0aWVzID0gdHJ1ZTtcblx0XHRcdHBhcmVudC5wcm9wZXJ0aWVzID0geyAuLi5wYXJlbnQucHJvcGVydGllcywgLi4ucGFyZW50LmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrKGZhbHNlKSB9O1xuXHRcdH1cblx0fVxuXHRjb25zdCBub2RlcyA9IGRlY29yYXRlKGROb2RlLCBhZGRQYXJlbnQsIChub2RlOiBETm9kZSk6IG5vZGUgaXMgV05vZGUgfCBWTm9kZSA9PiBpc1dOb2RlKG5vZGUpIHx8IGlzVk5vZGUobm9kZSkpO1xuXHRyZXR1cm4geyBoYXNEZWZlcnJlZFByb3BlcnRpZXMsIG5vZGVzIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXJuZXNzKFxuXHRyZW5kZXJGdW5jOiAoKSA9PiBXTm9kZTxXaWRnZXRCYXNlSW50ZXJmYWNlPixcblx0Y3VzdG9tQ29tcGFyYXRvcjogQ3VzdG9tQ29tcGFyYXRvcltdID0gW11cbik6IEhhcm5lc3NBUEkge1xuXHRsZXQgaW52YWxpZGF0ZWQgPSB0cnVlO1xuXHRsZXQgd05vZGUgPSByZW5kZXJGdW5jKCk7XG5cdGxldCB3aWRnZXQ6IFdpZGdldEJhc2U7XG5cdGNvbnN0IHJlbmRlclN0YWNrOiAoRE5vZGUgfCBETm9kZVtdKVtdID0gW107XG5cdGNvbnN0IHsgcHJvcGVydGllcywgY2hpbGRyZW4gfSA9IHdOb2RlO1xuXHRjb25zdCB3aWRnZXRDb25zdHJ1Y3RvciA9IHdOb2RlLndpZGdldENvbnN0cnVjdG9yIGFzIENvbnN0cnVjdG9yPFdpZGdldEJhc2U+O1xuXHRpZiAodHlwZW9mIHdpZGdldENvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0d2lkZ2V0ID0gbmV3IGNsYXNzIGV4dGVuZHMgd2lkZ2V0Q29uc3RydWN0b3Ige1xuXHRcdFx0aW52YWxpZGF0ZSgpIHtcblx0XHRcdFx0aW52YWxpZGF0ZWQgPSB0cnVlO1xuXHRcdFx0XHRzdXBlci5pbnZhbGlkYXRlKCk7XG5cdFx0XHR9XG5cdFx0fSgpO1xuXHRcdHdpZGdldC5fX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzKTtcblx0XHR3aWRnZXQuX19zZXRDaGlsZHJlbl9fKGNoaWxkcmVuKTtcblx0XHRfdHJ5UmVuZGVyKCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdIYXJuZXNzIGRvZXMgbm90IHN1cHBvcnQgcmVnaXN0cnkgaXRlbXMnKTtcblx0fVxuXG5cdGZ1bmN0aW9uIF9nZXRSZW5kZXIoY291bnQ/OiBudW1iZXIpOiBETm9kZSB8IEROb2RlW10ge1xuXHRcdHJldHVybiBjb3VudCA/IHJlbmRlclN0YWNrW2NvdW50XSA6IHJlbmRlclN0YWNrW3JlbmRlclN0YWNrLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0ZnVuY3Rpb24gX3J1bkNvbXBhcmVzKG5vZGVzOiBETm9kZSB8IEROb2RlW10sIGlzRXhwZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdGN1c3RvbUNvbXBhcmF0b3IuZm9yRWFjaCgoeyBzZWxlY3RvciwgcHJvcGVydHksIGNvbXBhcmF0b3IgfSkgPT4ge1xuXHRcdFx0Y29uc3QgaXRlbXMgPSBzZWxlY3Qoc2VsZWN0b3IsIG5vZGVzKTtcblx0XHRcdGl0ZW1zLmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBjb21wYXJhdG9yTmFtZSA9IGBjb21wYXJhdG9yKHNlbGVjdG9yPSR7c2VsZWN0b3J9LCAke3Byb3BlcnR5fSlgO1xuXHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLnByb3BlcnRpZXMgJiYgaXRlbS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29tcGFyYXRvclJlc3VsdCA9IGNvbXBhcmF0b3IoaXRlbS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSlcblx0XHRcdFx0XHRcdD8gY29tcGFyYXRvck5hbWVcblx0XHRcdFx0XHRcdDogYCR7Y29tcGFyYXRvck5hbWV9IEZBSUxFRGA7XG5cdFx0XHRcdFx0aXRlbS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IGlzRXhwZWN0ZWQgPyBjb21wYXJhdG9yTmFtZSA6IGNvbXBhcmF0b3JSZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gX3RyeVJlbmRlcigpIHtcblx0XHRjb25zdCB7IHByb3BlcnRpZXMsIGNoaWxkcmVuIH0gPSByZW5kZXJGdW5jKCk7XG5cdFx0d2lkZ2V0Ll9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xuXHRcdHdpZGdldC5fX3NldENoaWxkcmVuX18oY2hpbGRyZW4pO1xuXHRcdGlmIChpbnZhbGlkYXRlZCkge1xuXHRcdFx0Y29uc3QgcmVuZGVyID0gd2lkZ2V0Ll9fcmVuZGVyX18oKTtcblx0XHRcdGNvbnN0IHsgaGFzRGVmZXJyZWRQcm9wZXJ0aWVzLCBub2RlcyB9ID0gZGVjb3JhdGVOb2RlcyhyZW5kZXIpO1xuXHRcdFx0X3J1bkNvbXBhcmVzKG5vZGVzKTtcblx0XHRcdHJlbmRlclN0YWNrLnB1c2gobm9kZXMpO1xuXHRcdFx0aWYgKGhhc0RlZmVycmVkUHJvcGVydGllcykge1xuXHRcdFx0XHRjb25zdCB7IG5vZGVzOiBhZnRlckRlZmVycmVkUHJvcGVydGllc05vZGVzIH0gPSBkZWNvcmF0ZU5vZGVzKHJlbmRlcik7XG5cdFx0XHRcdF9ydW5Db21wYXJlcyhhZnRlckRlZmVycmVkUHJvcGVydGllc05vZGVzKTtcblx0XHRcdFx0cmVuZGVyU3RhY2sucHVzaChhZnRlckRlZmVycmVkUHJvcGVydGllc05vZGVzKTtcblx0XHRcdH1cblx0XHRcdGludmFsaWRhdGVkID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gX2V4cGVjdChleHBlY3RlZFJlbmRlckZ1bmM6IEV4cGVjdGVkUmVuZGVyLCBhY3R1YWxSZW5kZXJGdW5jPzogRXhwZWN0ZWRSZW5kZXIsIHNlbGVjdG9yPzogc3RyaW5nKSB7XG5cdFx0bGV0IHJlbmRlclJlc3VsdDogRE5vZGUgfCBETm9kZVtdO1xuXHRcdGlmIChhY3R1YWxSZW5kZXJGdW5jID09PSB1bmRlZmluZWQpIHtcblx0XHRcdF90cnlSZW5kZXIoKTtcblx0XHRcdHJlbmRlclJlc3VsdCA9IF9nZXRSZW5kZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVuZGVyUmVzdWx0ID0gYWN0dWFsUmVuZGVyRnVuYygpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHsgbm9kZXM6IGV4cGVjdGVkUmVuZGVyUmVzdWx0IH0gPSBkZWNvcmF0ZU5vZGVzKGV4cGVjdGVkUmVuZGVyRnVuYygpKTtcblx0XHRfcnVuQ29tcGFyZXMoZXhwZWN0ZWRSZW5kZXJSZXN1bHQsIHRydWUpO1xuXHRcdGlmIChzZWxlY3Rvcikge1xuXHRcdFx0Y29uc3QgW2ZpcnN0SXRlbV0gPSBzZWxlY3Qoc2VsZWN0b3IsIHJlbmRlclJlc3VsdCk7XG5cdFx0XHRhc3NlcnRSZW5kZXIoZmlyc3RJdGVtLCBleHBlY3RlZFJlbmRlclJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFzc2VydFJlbmRlcihyZW5kZXJSZXN1bHQsIGV4cGVjdGVkUmVuZGVyUmVzdWx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGV4cGVjdChleHBlY3RlZFJlbmRlckZ1bmM6IEV4cGVjdGVkUmVuZGVyLCBhY3R1YWxSZW5kZXJGdW5jPzogRXhwZWN0ZWRSZW5kZXIpIHtcblx0XHRcdHJldHVybiBfZXhwZWN0KGV4cGVjdGVkUmVuZGVyRnVuYywgYWN0dWFsUmVuZGVyRnVuYyk7XG5cdFx0fSxcblx0XHRleHBlY3RQYXJ0aWFsKHNlbGVjdG9yOiBzdHJpbmcsIGV4cGVjdGVkUmVuZGVyRnVuYzogRXhwZWN0ZWRSZW5kZXIsIGFjdHVhbFJlbmRlckZ1bmM/OiBFeHBlY3RlZFJlbmRlcikge1xuXHRcdFx0cmV0dXJuIF9leHBlY3QoZXhwZWN0ZWRSZW5kZXJGdW5jLCBhY3R1YWxSZW5kZXJGdW5jLCBzZWxlY3Rvcik7XG5cdFx0fSxcblx0XHR0cmlnZ2VyKHNlbGVjdG9yOiBzdHJpbmcsIGZ1bmN0aW9uU2VsZWN0b3I6IHN0cmluZyB8IEZ1bmN0aW9uYWxTZWxlY3RvciwgLi4uYXJnczogYW55W10pOiBhbnkge1xuXHRcdFx0X3RyeVJlbmRlcigpO1xuXHRcdFx0Y29uc3QgW2ZpcnN0SXRlbV0gPSBzZWxlY3Qoc2VsZWN0b3IsIF9nZXRSZW5kZXIoKSk7XG5cdFx0XHRpZiAoZmlyc3RJdGVtKSB7XG5cdFx0XHRcdGxldCB0cmlnZ2VyRnVuY3Rpb246IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAodHlwZW9mIGZ1bmN0aW9uU2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0dHJpZ2dlckZ1bmN0aW9uID0gKGZpcnN0SXRlbS5wcm9wZXJ0aWVzIGFzIGFueSlbZnVuY3Rpb25TZWxlY3Rvcl07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHJpZ2dlckZ1bmN0aW9uID0gZnVuY3Rpb25TZWxlY3RvcihmaXJzdEl0ZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0cmlnZ2VyRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJpZ2dlckZ1bmN0aW9uLmFwcGx5KHdpZGdldCwgYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGdldFJlbmRlcihpbmRleD86IG51bWJlcik6IEROb2RlIHwgRE5vZGVbXSB7XG5cdFx0XHRyZXR1cm4gX2dldFJlbmRlcihpbmRleCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXJuZXNzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGhhcm5lc3MudHMiLCJpbXBvcnQgeyBETm9kZSwgV05vZGUsIFZOb2RlLCBEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZSwgQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi93aWRnZXQtY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzV05vZGUgfSBmcm9tICcuLi8uLi93aWRnZXQtY29yZS9kJztcbmltcG9ydCAqIGFzIGRpZmYgZnJvbSAnZGlmZic7XG5pbXBvcnQgV2Vha01hcCBmcm9tICcuLi8uLi9zaGltL1dlYWtNYXAnO1xuaW1wb3J0IFNldCBmcm9tICcuLi8uLi9zaGltL1NldCc7XG5pbXBvcnQgTWFwIGZyb20gJy4uLy4uL3NoaW0vTWFwJztcbmltcG9ydCB7IGZyb20gYXMgYXJyYXlGcm9tIH0gZnJvbSAnLi4vLi4vc2hpbS9hcnJheSc7XG5cbmxldCB3aWRnZXRDbGFzc0NvdW50ZXIgPSAwO1xuY29uc3Qgd2lkZ2V0TWFwID0gbmV3IFdlYWtNYXA8Q29uc3RydWN0b3I8RGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2U+LCBudW1iZXI+KCk7XG5cbmZ1bmN0aW9uIHJlcGxhY2VyKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiAnZnVuY3Rpb24nO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gJ3VuZGVmaW5lZCc7XG5cdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQgfHwgdmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcblx0XHRyZXR1cm4gYXJyYXlGcm9tKHZhbHVlKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRETm9kZXMobm9kZXM6IEROb2RlIHwgRE5vZGVbXSwgZGVwdGg6IG51bWJlciA9IDApOiBzdHJpbmcge1xuXHRjb25zdCBpc0FycmF5RnJhZ21lbnQgPSBBcnJheS5pc0FycmF5KG5vZGVzKSAmJiBkZXB0aCA9PT0gMDtcblx0bGV0IGluaXRpYWwgPSBpc0FycmF5RnJhZ21lbnQgPyAnW1xcbicgOiAnJztcblx0bGV0IHRhYnMgPSAnJztcblx0ZGVwdGggPSBpc0FycmF5RnJhZ21lbnQgPyAxIDogZGVwdGg7XG5cdG5vZGVzID0gQXJyYXkuaXNBcnJheShub2RlcykgPyBub2RlcyA6IFtub2Rlc107XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7XG5cdFx0dGFicyA9IGAke3RhYnN9XFx0YDtcblx0fVxuXHRsZXQgZm9ybWF0dGVkTm9kZSA9IG5vZGVzLnJlZHVjZSgocmVzdWx0OiBzdHJpbmcsIG5vZGUsIGluZGV4KSA9PiB7XG5cdFx0aWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0XHRpZiAoaW5kZXggPiAwKSB7XG5cdFx0XHRyZXN1bHQgPSBgJHtyZXN1bHR9XFxuYDtcblx0XHR9XG5cdFx0cmVzdWx0ID0gYCR7cmVzdWx0fSR7dGFic31gO1xuXG5cdFx0aWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIGAke3Jlc3VsdH1cIiR7bm9kZX1cImA7XG5cdFx0fVxuXG5cdFx0cmVzdWx0ID0gYCR7cmVzdWx0fSR7Zm9ybWF0Tm9kZShub2RlLCB0YWJzKX1gO1xuXHRcdGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0cmVzdWx0ID0gYCR7cmVzdWx0fSwgW1xcbiR7Zm9ybWF0RE5vZGVzKG5vZGUuY2hpbGRyZW4sIGRlcHRoICsgMSl9XFxuJHt0YWJzfV1gO1xuXHRcdH1cblx0XHRyZXR1cm4gYCR7cmVzdWx0fSlgO1xuXHR9LCBpbml0aWFsKTtcblxuXHRyZXR1cm4gaXNBcnJheUZyYWdtZW50ID8gKGZvcm1hdHRlZE5vZGUgPSBgJHtmb3JtYXR0ZWROb2RlfVxcbl1gKSA6IGZvcm1hdHRlZE5vZGU7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFByb3BlcnRpZXMocHJvcGVydGllczogYW55LCB0YWJzOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcylcblx0XHQuc29ydCgpXG5cdFx0LnJlZHVjZSgocHJvcHM6IGFueSwga2V5KSA9PiB7XG5cdFx0XHRwcm9wc1trZXldID0gcHJvcGVydGllc1trZXldO1xuXHRcdFx0cmV0dXJuIHByb3BzO1xuXHRcdH0sIHt9KTtcblx0cHJvcGVydGllcyA9IEpTT04uc3RyaW5naWZ5KHByb3BlcnRpZXMsIHJlcGxhY2VyLCBgJHt0YWJzfVxcdGApLnNsaWNlKDAsIC0xKTtcblx0cmV0dXJuIGAke3Byb3BlcnRpZXN9JHt0YWJzfX1gO1xufVxuXG5mdW5jdGlvbiBnZXRXaWRnZXROYW1lKHdpZGdldENvbnN0cnVjdG9yOiBhbnkpOiBzdHJpbmcge1xuXHRsZXQgbmFtZTogc3RyaW5nO1xuXHRpZiAodHlwZW9mIHdpZGdldENvbnN0cnVjdG9yID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygd2lkZ2V0Q29uc3RydWN0b3IgPT09ICdzeW1ib2wnKSB7XG5cdFx0bmFtZSA9IHdpZGdldENvbnN0cnVjdG9yLnRvU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0bmFtZSA9IHdpZGdldENvbnN0cnVjdG9yLm5hbWU7XG5cdFx0aWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IGlkID0gd2lkZ2V0TWFwLmdldCh3aWRnZXRDb25zdHJ1Y3Rvcik7XG5cdFx0XHRpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZCA9ICsrd2lkZ2V0Q2xhc3NDb3VudGVyO1xuXHRcdFx0XHR3aWRnZXRNYXAuc2V0KHdpZGdldENvbnN0cnVjdG9yLCBpZCk7XG5cdFx0XHR9XG5cdFx0XHRuYW1lID0gYFdpZGdldC0ke2lkfWA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBuYW1lO1xufVxuXG5mdW5jdGlvbiBmb3JtYXROb2RlKG5vZGU6IFdOb2RlIHwgVk5vZGUsIHRhYnM6IGFueSk6IHN0cmluZyB7XG5cdGNvbnN0IHByb3BlcnR5S2V5Q291bnQgPSBPYmplY3Qua2V5cyhub2RlLnByb3BlcnRpZXMpLmxlbmd0aDtcblx0bGV0IHByb3BlcnRpZXMgPSBwcm9wZXJ0eUtleUNvdW50ID4gMCA/IGZvcm1hdFByb3BlcnRpZXMobm9kZS5wcm9wZXJ0aWVzLCB0YWJzKSA6ICd7fSc7XG5cdGlmIChpc1dOb2RlKG5vZGUpKSB7XG5cdFx0cmV0dXJuIGB3KCR7Z2V0V2lkZ2V0TmFtZShub2RlLndpZGdldENvbnN0cnVjdG9yKX0sICR7cHJvcGVydGllc31gO1xuXHR9XG5cdHJldHVybiBgdihcIiR7bm9kZS50YWd9XCIsICR7cHJvcGVydGllc31gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0UmVuZGVyKGFjdHVhbDogRE5vZGUgfCBETm9kZVtdLCBleHBlY3RlZDogRE5vZGUgfCBETm9kZVtdLCBtZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XG5cdGNvbnN0IHBhcnNlZEFjdHVhbCA9IGZvcm1hdEROb2RlcyhhY3R1YWwpO1xuXHRjb25zdCBwYXJzZWRFeHBlY3RlZCA9IGZvcm1hdEROb2RlcyhleHBlY3RlZCk7XG5cdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmLmRpZmZMaW5lcyhwYXJzZWRBY3R1YWwsIHBhcnNlZEV4cGVjdGVkKTtcblx0bGV0IGRpZmZGb3VuZCA9IGZhbHNlO1xuXHRjb25zdCBwYXJzZWREaWZmID0gZGlmZlJlc3VsdC5yZWR1Y2UoKHJlc3VsdDogc3RyaW5nLCBwYXJ0LCBpbmRleCkgPT4ge1xuXHRcdGlmIChwYXJ0LmFkZGVkKSB7XG5cdFx0XHRkaWZmRm91bmQgPSB0cnVlO1xuXHRcdFx0cmVzdWx0ID0gYCR7cmVzdWx0fShFKSR7cGFydC52YWx1ZS5yZXBsYWNlKC9cXG5cXHQvZywgJ1xcbihFKVxcdCcpfWA7XG5cdFx0fSBlbHNlIGlmIChwYXJ0LnJlbW92ZWQpIHtcblx0XHRcdGRpZmZGb3VuZCA9IHRydWU7XG5cdFx0XHRyZXN1bHQgPSBgJHtyZXN1bHR9KEEpJHtwYXJ0LnZhbHVlLnJlcGxhY2UoL1xcblxcdC9nLCAnXFxuKEEpXFx0Jyl9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gYCR7cmVzdWx0fSR7cGFydC52YWx1ZX1gO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LCAnXFxuJyk7XG5cblx0aWYgKGRpZmZGb3VuZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihwYXJzZWREaWZmKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRSZW5kZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gYXNzZXJ0UmVuZGVyLnRzIiwiaW1wb3J0IHsgRE5vZGUsIERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLCBXTm9kZSwgVk5vZGUgfSBmcm9tICcuLi8uLi93aWRnZXQtY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzVk5vZGUsIGlzV05vZGUgfSBmcm9tICcuLi8uLi93aWRnZXQtY29yZS9kJztcbmltcG9ydCAqIGFzIGNzc1NlbGVjdCBmcm9tICdjc3Mtc2VsZWN0LXVtZCc7XG5cbmV4cG9ydCB0eXBlIFRlc3RGdW5jdGlvbiA9IChlbGVtOiBETm9kZTxEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZT4pID0+IGJvb2xlYW47XG5cbmV4cG9ydCBjb25zdCBwYXJzZVNlbGVjdG9yID0gKHNlbGVjdG9yOiBzdHJpbmcpID0+IHtcblx0Y29uc3Qgc2VsZWN0b3JzID0gc2VsZWN0b3Iuc3BsaXQoJyAnKTtcblx0cmV0dXJuIHNlbGVjdG9yc1xuXHRcdC5tYXAoKHNlbGVjdG9yKSA9PiB7XG5cdFx0XHRjb25zdCBrZXlTaWdpbEluZGV4ID0gc2VsZWN0b3IuaW5kZXhPZignQCcpO1xuXHRcdFx0aWYgKGtleVNpZ2lsSW5kZXggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIGBba2V5PVwiJHtzZWxlY3Rvci5zdWJzdHIoMSl9XCJdYDtcblx0XHRcdH0gZWxzZSBpZiAoa2V5U2lnaWxJbmRleCA+IDApIHtcblx0XHRcdFx0Y29uc3Qga2V5ID0gc2VsZWN0b3Iuc3Vic3RyaW5nKGtleVNpZ2lsSW5kZXggKyAxKTtcblx0XHRcdFx0cmV0dXJuIGAke3NlbGVjdG9yLnNsaWNlKDAsIGtleVNpZ2lsSW5kZXgpfVtrZXk9XCIke2tleX1cIl1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNlbGVjdG9yO1xuXHRcdH0pXG5cdFx0LmpvaW4oJyAnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGFwdGVyOiBhbnkgPSB7XG5cdGlzVGFnKGVsZW06IEROb2RlKSB7XG5cdFx0cmV0dXJuIGlzVk5vZGUoZWxlbSk7XG5cdH0sXG5cdGdldFRleHQoZWxlbTogRE5vZGVbXSkge1xuXHRcdHJldHVybiAnJztcblx0fSxcblx0cmVtb3ZlU3Vic2V0cyhlbGVtZW50czogRE5vZGVbXSkge1xuXHRcdHJldHVybiBlbGVtZW50cztcblx0fSxcblx0Z2V0Q2hpbGRyZW4oZWxlbTogRE5vZGUpIHtcblx0XHRyZXR1cm4gaXNWTm9kZShlbGVtKSB8fCBpc1dOb2RlKGVsZW0pID8gZWxlbS5jaGlsZHJlbiA6IFtdO1xuXHR9LFxuXHRnZXRBdHRyaWJ1dGVWYWx1ZShlbGVtOiBETm9kZSwgbmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKGlzVk5vZGUoZWxlbSkgfHwgaXNXTm9kZShlbGVtKSkge1xuXHRcdFx0aWYgKG5hbWUgPT09ICdjbGFzcycpIHtcblx0XHRcdFx0Y29uc3QgY2xhc3NlcyA9IChlbGVtLnByb3BlcnRpZXMgYXMgYW55KS5jbGFzc2VzO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xuXHRcdFx0XHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY2xhc3Nlcztcblx0XHRcdH1cblx0XHRcdHJldHVybiAoZWxlbS5wcm9wZXJ0aWVzIGFzIGFueSlbbmFtZV07XG5cdFx0fVxuXHR9LFxuXHRoYXNBdHRyaWIoZWxlbTogRE5vZGUsIG5hbWU6IHN0cmluZykge1xuXHRcdGlmIChpc1ZOb2RlKGVsZW0pIHx8IGlzV05vZGUoZWxlbSkpIHtcblx0XHRcdHJldHVybiBuYW1lIGluIGVsZW0ucHJvcGVydGllcztcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHRleGlzdHNPbmUodGVzdDogVGVzdEZ1bmN0aW9uLCBlbGVtZW50czogRE5vZGVbXSkge1xuXHRcdHJldHVybiBlbGVtZW50cy5zb21lKChlbGVtOiBETm9kZSkgPT4gdGVzdChlbGVtKSk7XG5cdH0sXG5cdGdldE5hbWUoZWxlbTogRE5vZGUpIHtcblx0XHRpZiAoaXNWTm9kZShlbGVtKSkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGFnO1xuXHRcdH1cblx0fSxcblx0Z2V0UGFyZW50KGVsZW06IEROb2RlKSB7XG5cdFx0aWYgKGlzVk5vZGUoZWxlbSkgfHwgaXNXTm9kZShlbGVtKSkge1xuXHRcdFx0cmV0dXJuIChlbGVtIGFzIGFueSkucGFyZW50O1xuXHRcdH1cblx0fSxcblx0Z2V0U2libGluZ3MoZWxlbTogRE5vZGUpIHtcblx0XHRpZiAoaXNWTm9kZShlbGVtKSB8fCBpc1dOb2RlKGVsZW0pKSB7XG5cdFx0XHRpZiAoKGVsZW0gYXMgYW55KS5wYXJlbnQpIHtcblx0XHRcdFx0cmV0dXJuIChlbGVtIGFzIGFueSkucGFyZW50LmNoaWxkcmVuO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFtlbGVtXTtcblx0XHR9XG5cdH0sXG5cdGZpbmRPbmUodGVzdDogVGVzdEZ1bmN0aW9uLCBhcnI6IEROb2RlW10pOiBETm9kZSB7XG5cdFx0bGV0IGVsZW0gPSBudWxsO1xuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gYXJyLmxlbmd0aDsgaSA8IGwgJiYgIWVsZW07IGkrKykge1xuXHRcdFx0aWYgKHRlc3QoYXJyW2ldKSkge1xuXHRcdFx0XHRlbGVtID0gYXJyW2ldO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBhZGFwdGVyLmdldENoaWxkcmVuKGFycltpXSk7XG5cdFx0XHRcdGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGFkYXB0ZXIuZmluZE9uZSh0ZXN0LCBjaGlsZHJlbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH0sXG5cdGZpbmRBbGwodGVzdDogVGVzdEZ1bmN0aW9uLCBlbGVtZW50czogRE5vZGVbXSk6IEROb2RlW10ge1xuXHRcdGxldCByZXN1bHQ6IEROb2RlW10gPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMCwgaiA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0aWYgKHRlc3QoZWxlbWVudHNbaV0pKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVsZW1lbnRzW2ldKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gYWRhcHRlci5nZXRDaGlsZHJlbihlbGVtZW50c1tpXSk7XG5cdFx0XHRpZiAoY2hpbGRyZW4pIHtcblx0XHRcdFx0cmVzdWx0ID0gWy4uLnJlc3VsdCwgLi4uYWRhcHRlci5maW5kQWxsKHRlc3QsIGNoaWxkcmVuKV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3Qoc2VsZWN0b3I6IHN0cmluZywgbm9kZXM6IEROb2RlIHwgRE5vZGVbXSk6IChXTm9kZSB8IFZOb2RlKVtdIHtcblx0bm9kZXMgPSBBcnJheS5pc0FycmF5KG5vZGVzKSA/IG5vZGVzIDogW25vZGVzXTtcblx0c2VsZWN0b3IgPSBwYXJzZVNlbGVjdG9yKHNlbGVjdG9yKTtcblx0cmV0dXJuIGNzc1NlbGVjdChzZWxlY3Rvciwgbm9kZXMsIHsgYWRhcHRlciB9KSBhcyAoV05vZGUgfCBWTm9kZSlbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNlbGVjdG9yLnRzIiwiaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJy4uL2NvcmUvRXZlbnRlZCc7XG5pbXBvcnQgeyBFdmVudE9iamVjdCB9IGZyb20gJy4uL2NvcmUvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB0eXBlIEluamVjdG9yRXZlbnRNYXAgPSB7XG5cdGludmFsaWRhdGU6IEV2ZW50T2JqZWN0PCdpbnZhbGlkYXRlJz47XG59O1xuXG5leHBvcnQgY2xhc3MgSW5qZWN0b3I8VCA9IGFueT4gZXh0ZW5kcyBFdmVudGVkPEluamVjdG9yRXZlbnRNYXA+IHtcblx0cHJpdmF0ZSBfcGF5bG9hZDogVDtcblx0cHJpdmF0ZSBfaW52YWxpZGF0b3I6IHVuZGVmaW5lZCB8ICgoKSA9PiB2b2lkKTtcblxuXHRjb25zdHJ1Y3RvcihwYXlsb2FkOiBUKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcblx0fVxuXG5cdHB1YmxpYyBzZXRJbnZhbGlkYXRvcihpbnZhbGlkYXRvcjogKCkgPT4gdm9pZCkge1xuXHRcdHRoaXMuX2ludmFsaWRhdG9yID0gaW52YWxpZGF0b3I7XG5cdH1cblxuXHRwdWJsaWMgZ2V0KCk6IFQge1xuXHRcdHJldHVybiB0aGlzLl9wYXlsb2FkO1xuXHR9XG5cblx0cHVibGljIHNldChwYXlsb2FkOiBUKTogdm9pZCB7XG5cdFx0dGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XG5cdFx0aWYgKHRoaXMuX2ludmFsaWRhdG9yKSB7XG5cdFx0XHR0aGlzLl9pbnZhbGlkYXRvcigpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbmplY3RvcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBJbmplY3Rvci50cyIsImltcG9ydCB7IEV2ZW50ZWQgfSBmcm9tICcuLi9jb3JlL0V2ZW50ZWQnO1xuaW1wb3J0IHsgRXZlbnRPYmplY3QgfSBmcm9tICcuLi9jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IE1hcCBmcm9tICcuLi9zaGltL01hcCc7XG5pbXBvcnQgeyBOb2RlSGFuZGxlckludGVyZmFjZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogRW51bSB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiBldmVudC5cbiAqIExpc3RlbmluZyB0byAnUHJvamVjdG9yJyB3aWxsIG5vdGlmeSB3aGVuIHByb2plY3RvciBpcyBjcmVhdGVkIG9yIHVwZGF0ZWRcbiAqIExpc3RlbmluZyB0byAnV2lkZ2V0JyB3aWxsIG5vdGlmeSB3aGVuIHdpZGdldCByb290IGlzIGNyZWF0ZWQgb3IgdXBkYXRlZFxuICovXG5leHBvcnQgZW51bSBOb2RlRXZlbnRUeXBlIHtcblx0UHJvamVjdG9yID0gJ1Byb2plY3RvcicsXG5cdFdpZGdldCA9ICdXaWRnZXQnXG59XG5cbmV4cG9ydCB0eXBlIE5vZGVIYW5kbGVyRXZlbnRNYXAgPSB7XG5cdFByb2plY3RvcjogRXZlbnRPYmplY3Q8Tm9kZUV2ZW50VHlwZS5Qcm9qZWN0b3I+O1xuXHRXaWRnZXQ6IEV2ZW50T2JqZWN0PE5vZGVFdmVudFR5cGUuV2lkZ2V0Pjtcbn07XG5cbmV4cG9ydCBjbGFzcyBOb2RlSGFuZGxlciBleHRlbmRzIEV2ZW50ZWQ8Tm9kZUhhbmRsZXJFdmVudE1hcD4gaW1wbGVtZW50cyBOb2RlSGFuZGxlckludGVyZmFjZSB7XG5cdHByaXZhdGUgX25vZGVNYXAgPSBuZXcgTWFwPHN0cmluZywgRWxlbWVudD4oKTtcblxuXHRwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogRWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX25vZGVNYXAuZ2V0KGtleSk7XG5cdH1cblxuXHRwdWJsaWMgaGFzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX25vZGVNYXAuaGFzKGtleSk7XG5cdH1cblxuXHRwdWJsaWMgYWRkKGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5fbm9kZU1hcC5zZXQoa2V5LCBlbGVtZW50KTtcblx0XHR0aGlzLmVtaXQoeyB0eXBlOiBrZXkgfSk7XG5cdH1cblxuXHRwdWJsaWMgYWRkUm9vdCgpOiB2b2lkIHtcblx0XHR0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLldpZGdldCB9KTtcblx0fVxuXG5cdHB1YmxpYyBhZGRQcm9qZWN0b3IoKTogdm9pZCB7XG5cdFx0dGhpcy5lbWl0KHsgdHlwZTogTm9kZUV2ZW50VHlwZS5Qcm9qZWN0b3IgfSk7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG5cdFx0dGhpcy5fbm9kZU1hcC5jbGVhcigpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGVIYW5kbGVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIE5vZGVIYW5kbGVyLnRzIiwiaW1wb3J0IFByb21pc2UgZnJvbSAnLi4vc2hpbS9Qcm9taXNlJztcbmltcG9ydCBNYXAgZnJvbSAnLi4vc2hpbS9NYXAnO1xuaW1wb3J0IFN5bWJvbCBmcm9tICcuLi9zaGltL1N5bWJvbCc7XG5pbXBvcnQgeyBFdmVudE9iamVjdCB9IGZyb20gJy4uL2NvcmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnLi4vY29yZS9FdmVudGVkJztcbmltcG9ydCB7XG5cdENvbnN0cnVjdG9yLFxuXHRJbmplY3RvckZhY3RvcnksXG5cdEluamVjdG9ySXRlbSxcblx0UmVnaXN0cnlMYWJlbCxcblx0V2lkZ2V0QmFzZUNvbnN0cnVjdG9yLFxuXHRXaWRnZXRCYXNlSW50ZXJmYWNlXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB0eXBlIFdpZGdldEJhc2VDb25zdHJ1Y3RvckZ1bmN0aW9uID0gKCkgPT4gUHJvbWlzZTxXaWRnZXRCYXNlQ29uc3RydWN0b3I+O1xuXG5leHBvcnQgdHlwZSBFU01EZWZhdWx0V2lkZ2V0QmFzZUZ1bmN0aW9uID0gKCkgPT4gUHJvbWlzZTxFU01EZWZhdWx0V2lkZ2V0QmFzZTxXaWRnZXRCYXNlSW50ZXJmYWNlPj47XG5cbmV4cG9ydCB0eXBlIFJlZ2lzdHJ5SXRlbSA9XG5cdHwgV2lkZ2V0QmFzZUNvbnN0cnVjdG9yXG5cdHwgUHJvbWlzZTxXaWRnZXRCYXNlQ29uc3RydWN0b3I+XG5cdHwgV2lkZ2V0QmFzZUNvbnN0cnVjdG9yRnVuY3Rpb25cblx0fCBFU01EZWZhdWx0V2lkZ2V0QmFzZUZ1bmN0aW9uO1xuXG4vKipcbiAqIFdpZGdldCBiYXNlIHN5bWJvbCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBXSURHRVRfQkFTRV9UWVBFID0gU3ltYm9sKCdXaWRnZXQgQmFzZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJ5RXZlbnRPYmplY3QgZXh0ZW5kcyBFdmVudE9iamVjdDxSZWdpc3RyeUxhYmVsPiB7XG5cdGFjdGlvbjogc3RyaW5nO1xuXHRpdGVtOiBXaWRnZXRCYXNlQ29uc3RydWN0b3IgfCBJbmplY3RvckZhY3Rvcnk7XG59XG4vKipcbiAqIFdpZGdldCBSZWdpc3RyeSBJbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyeUludGVyZmFjZSB7XG5cdC8qKlxuXHQgKiBEZWZpbmUgYSBXaWRnZXRSZWdpc3RyeUl0ZW0gYWdhaW5zdCBhIGxhYmVsXG5cdCAqXG5cdCAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgb2YgdGhlIHdpZGdldCB0byByZWdpc3RlclxuXHQgKiBAcGFyYW0gcmVnaXN0cnlJdGVtIFRoZSByZWdpc3RyeSBpdGVtIHRvIGRlZmluZVxuXHQgKi9cblx0ZGVmaW5lKGxhYmVsOiBSZWdpc3RyeUxhYmVsLCByZWdpc3RyeUl0ZW06IFJlZ2lzdHJ5SXRlbSk6IHZvaWQ7XG5cblx0LyoqXG5cdCAqIFJldHVybiBhIFJlZ2lzdHJ5SXRlbSBmb3IgdGhlIGdpdmVuIGxhYmVsLCBudWxsIGlmIGFuIGVudHJ5IGRvZXNuJ3QgZXhpc3Rcblx0ICpcblx0ICogQHBhcmFtIHdpZGdldExhYmVsIFRoZSBsYWJlbCBvZiB0aGUgd2lkZ2V0IHRvIHJldHVyblxuXHQgKiBAcmV0dXJucyBUaGUgUmVnaXN0cnlJdGVtIGZvciB0aGUgd2lkZ2V0TGFiZWwsIGBudWxsYCBpZiBubyBlbnRyeSBleGlzdHNcblx0ICovXG5cdGdldDxUIGV4dGVuZHMgV2lkZ2V0QmFzZUludGVyZmFjZSA9IFdpZGdldEJhc2VJbnRlcmZhY2U+KGxhYmVsOiBSZWdpc3RyeUxhYmVsKTogQ29uc3RydWN0b3I8VD4gfCBudWxsO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgYm9vbGVhbiBpZiBhbiBlbnRyeSBmb3IgdGhlIGxhYmVsIGV4aXN0c1xuXHQgKlxuXHQgKiBAcGFyYW0gd2lkZ2V0TGFiZWwgVGhlIGxhYmVsIHRvIHNlYXJjaCBmb3Jcblx0ICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGEgd2lkZ2V0IHJlZ2lzdHJ5IGl0ZW0gZXhpc3RzXG5cdCAqL1xuXHRoYXMobGFiZWw6IFJlZ2lzdHJ5TGFiZWwpOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmUgYW4gSW5qZWN0b3IgYWdhaW5zdCBhIGxhYmVsXG5cdCAqXG5cdCAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGluamVjdG9yIHRvIHJlZ2lzdGVyXG5cdCAqIEBwYXJhbSByZWdpc3RyeUl0ZW0gVGhlIGluamVjdG9yIGZhY3Rvcnlcblx0ICovXG5cdGRlZmluZUluamVjdG9yKGxhYmVsOiBSZWdpc3RyeUxhYmVsLCBpbmplY3RvckZhY3Rvcnk6IEluamVjdG9yRmFjdG9yeSk6IHZvaWQ7XG5cblx0LyoqXG5cdCAqIFJldHVybiBhbiBJbmplY3RvciByZWdpc3RyeSBpdGVtIGZvciB0aGUgZ2l2ZW4gbGFiZWwsIG51bGwgaWYgYW4gZW50cnkgZG9lc24ndCBleGlzdFxuXHQgKlxuXHQgKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBpbmplY3RvciB0byByZXR1cm5cblx0ICogQHJldHVybnMgVGhlIFJlZ2lzdHJ5SXRlbSBmb3IgdGhlIHdpZGdldExhYmVsLCBgbnVsbGAgaWYgbm8gZW50cnkgZXhpc3RzXG5cdCAqL1xuXHRnZXRJbmplY3RvcjxUPihsYWJlbDogUmVnaXN0cnlMYWJlbCk6IEluamVjdG9ySXRlbTxUPiB8IG51bGw7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBib29sZWFuIGlmIGFuIGluamVjdG9yIGZvciB0aGUgbGFiZWwgZXhpc3RzXG5cdCAqXG5cdCAqIEBwYXJhbSB3aWRnZXRMYWJlbCBUaGUgbGFiZWwgdG8gc2VhcmNoIGZvclxuXHQgKiBAcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgYSBpbmplY3RvciByZWdpc3RyeSBpdGVtIGV4aXN0c1xuXHQgKi9cblx0aGFzSW5qZWN0b3IobGFiZWw6IFJlZ2lzdHJ5TGFiZWwpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIENoZWNrcyBpcyB0aGUgaXRlbSBpcyBhIHN1YmNsYXNzIG9mIFdpZGdldEJhc2UgKG9yIGEgV2lkZ2V0QmFzZSlcbiAqXG4gKiBAcGFyYW0gaXRlbSB0aGUgaXRlbSB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZS9mYWxzZSBpbmRpY2F0aW5nIGlmIHRoZSBpdGVtIGlzIGEgV2lkZ2V0QmFzZUNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcjxUIGV4dGVuZHMgV2lkZ2V0QmFzZUludGVyZmFjZT4oaXRlbTogYW55KTogaXRlbSBpcyBDb25zdHJ1Y3RvcjxUPiB7XG5cdHJldHVybiBCb29sZWFuKGl0ZW0gJiYgaXRlbS5fdHlwZSA9PT0gV0lER0VUX0JBU0VfVFlQRSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRVNNRGVmYXVsdFdpZGdldEJhc2U8VD4ge1xuXHRkZWZhdWx0OiBDb25zdHJ1Y3RvcjxUPjtcblx0X19lc01vZHVsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpZGdldENvbnN0cnVjdG9yRGVmYXVsdEV4cG9ydDxUPihpdGVtOiBhbnkpOiBpdGVtIGlzIEVTTURlZmF1bHRXaWRnZXRCYXNlPFQ+IHtcblx0cmV0dXJuIEJvb2xlYW4oXG5cdFx0aXRlbSAmJlxuXHRcdFx0aXRlbS5oYXNPd25Qcm9wZXJ0eSgnX19lc01vZHVsZScpICYmXG5cdFx0XHRpdGVtLmhhc093blByb3BlcnR5KCdkZWZhdWx0JykgJiZcblx0XHRcdGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0uZGVmYXVsdClcblx0KTtcbn1cblxuLyoqXG4gKiBUaGUgUmVnaXN0cnkgaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFJlZ2lzdHJ5IGV4dGVuZHMgRXZlbnRlZDx7fSwgUmVnaXN0cnlMYWJlbCwgUmVnaXN0cnlFdmVudE9iamVjdD4gaW1wbGVtZW50cyBSZWdpc3RyeUludGVyZmFjZSB7XG5cdC8qKlxuXHQgKiBpbnRlcm5hbCBtYXAgb2YgbGFiZWxzIGFuZCBSZWdpc3RyeUl0ZW1cblx0ICovXG5cdHByaXZhdGUgX3dpZGdldFJlZ2lzdHJ5OiBNYXA8UmVnaXN0cnlMYWJlbCwgUmVnaXN0cnlJdGVtPiB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIF9pbmplY3RvclJlZ2lzdHJ5OiBNYXA8UmVnaXN0cnlMYWJlbCwgSW5qZWN0b3JJdGVtPiB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogRW1pdCBsb2FkZWQgZXZlbnQgZm9yIHJlZ2lzdHJ5IGxhYmVsXG5cdCAqL1xuXHRwcml2YXRlIGVtaXRMb2FkZWRFdmVudCh3aWRnZXRMYWJlbDogUmVnaXN0cnlMYWJlbCwgaXRlbTogV2lkZ2V0QmFzZUNvbnN0cnVjdG9yIHwgSW5qZWN0b3JJdGVtKTogdm9pZCB7XG5cdFx0dGhpcy5lbWl0KHtcblx0XHRcdHR5cGU6IHdpZGdldExhYmVsLFxuXHRcdFx0YWN0aW9uOiAnbG9hZGVkJyxcblx0XHRcdGl0ZW1cblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBkZWZpbmUobGFiZWw6IFJlZ2lzdHJ5TGFiZWwsIGl0ZW06IFJlZ2lzdHJ5SXRlbSk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl93aWRnZXRSZWdpc3RyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLl93aWRnZXRSZWdpc3RyeSA9IG5ldyBNYXAoKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGB3aWRnZXQgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnJHtsYWJlbC50b1N0cmluZygpfSdgKTtcblx0XHR9XG5cblx0XHR0aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIGl0ZW0pO1xuXG5cdFx0aWYgKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRpdGVtLnRoZW4oXG5cdFx0XHRcdCh3aWRnZXRDdG9yKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fd2lkZ2V0UmVnaXN0cnkhLnNldChsYWJlbCwgd2lkZ2V0Q3Rvcik7XG5cdFx0XHRcdFx0dGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xuXHRcdFx0XHRcdHJldHVybiB3aWRnZXRDdG9yO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQoZXJyb3IpID0+IHtcblx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pKSB7XG5cdFx0XHR0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgaXRlbSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGRlZmluZUluamVjdG9yKGxhYmVsOiBSZWdpc3RyeUxhYmVsLCBpbmplY3RvckZhY3Rvcnk6IEluamVjdG9yRmFjdG9yeSk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuX2luamVjdG9yUmVnaXN0cnkgPSBuZXcgTWFwKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2luamVjdG9yUmVnaXN0cnkuaGFzKGxhYmVsKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBpbmplY3RvciBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgZm9yICcke2xhYmVsLnRvU3RyaW5nKCl9J2ApO1xuXHRcdH1cblxuXHRcdGNvbnN0IGludmFsaWRhdG9yID0gbmV3IEV2ZW50ZWQoKTtcblxuXHRcdGNvbnN0IGluamVjdG9ySXRlbTogSW5qZWN0b3JJdGVtID0ge1xuXHRcdFx0aW5qZWN0b3I6IGluamVjdG9yRmFjdG9yeSgoKSA9PiBpbnZhbGlkYXRvci5lbWl0KHsgdHlwZTogJ2ludmFsaWRhdGUnIH0pKSxcblx0XHRcdGludmFsaWRhdG9yXG5cdFx0fTtcblxuXHRcdHRoaXMuX2luamVjdG9yUmVnaXN0cnkuc2V0KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xuXHRcdHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xuXHR9XG5cblx0cHVibGljIGdldDxUIGV4dGVuZHMgV2lkZ2V0QmFzZUludGVyZmFjZSA9IFdpZGdldEJhc2VJbnRlcmZhY2U+KGxhYmVsOiBSZWdpc3RyeUxhYmVsKTogQ29uc3RydWN0b3I8VD4gfCBudWxsIHtcblx0XHRpZiAoIXRoaXMuX3dpZGdldFJlZ2lzdHJ5IHx8ICF0aGlzLmhhcyhsYWJlbCkpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGl0ZW0gPSB0aGlzLl93aWRnZXRSZWdpc3RyeS5nZXQobGFiZWwpO1xuXG5cdFx0aWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yPFQ+KGl0ZW0pKSB7XG5cdFx0XHRyZXR1cm4gaXRlbTtcblx0XHR9XG5cblx0XHRpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb21pc2UgPSAoPFdpZGdldEJhc2VDb25zdHJ1Y3RvckZ1bmN0aW9uPml0ZW0pKCk7XG5cdFx0dGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCBwcm9taXNlKTtcblxuXHRcdHByb21pc2UudGhlbihcblx0XHRcdCh3aWRnZXRDdG9yKSA9PiB7XG5cdFx0XHRcdGlmIChpc1dpZGdldENvbnN0cnVjdG9yRGVmYXVsdEV4cG9ydDxUPih3aWRnZXRDdG9yKSkge1xuXHRcdFx0XHRcdHdpZGdldEN0b3IgPSB3aWRnZXRDdG9yLmRlZmF1bHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl93aWRnZXRSZWdpc3RyeSEuc2V0KGxhYmVsLCB3aWRnZXRDdG9yKTtcblx0XHRcdFx0dGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xuXHRcdFx0XHRyZXR1cm4gd2lkZ2V0Q3Rvcjtcblx0XHRcdH0sXG5cdFx0XHQoZXJyb3IpID0+IHtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHVibGljIGdldEluamVjdG9yPFQ+KGxhYmVsOiBSZWdpc3RyeUxhYmVsKTogSW5qZWN0b3JJdGVtPFQ+IHwgbnVsbCB7XG5cdFx0aWYgKCF0aGlzLl9pbmplY3RvclJlZ2lzdHJ5IHx8ICF0aGlzLmhhc0luamVjdG9yKGxhYmVsKSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2luamVjdG9yUmVnaXN0cnkuZ2V0KGxhYmVsKSE7XG5cdH1cblxuXHRwdWJsaWMgaGFzKGxhYmVsOiBSZWdpc3RyeUxhYmVsKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIEJvb2xlYW4odGhpcy5fd2lkZ2V0UmVnaXN0cnkgJiYgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSk7XG5cdH1cblxuXHRwdWJsaWMgaGFzSW5qZWN0b3IobGFiZWw6IFJlZ2lzdHJ5TGFiZWwpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gQm9vbGVhbih0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ICYmIHRoaXMuX2luamVjdG9yUmVnaXN0cnkuaGFzKGxhYmVsKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVnaXN0cnk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gUmVnaXN0cnkudHMiLCJpbXBvcnQgeyBNYXAgfSBmcm9tICcuLi9zaGltL01hcCc7XG5pbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnLi4vY29yZS9FdmVudGVkJztcbmltcG9ydCB7IEV2ZW50T2JqZWN0IH0gZnJvbSAnLi4vY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBJbmplY3RvckZhY3RvcnksIEluamVjdG9ySXRlbSwgUmVnaXN0cnlMYWJlbCwgV2lkZ2V0QmFzZUludGVyZmFjZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZWdpc3RyeSwgUmVnaXN0cnlFdmVudE9iamVjdCwgUmVnaXN0cnlJdGVtIH0gZnJvbSAnLi9SZWdpc3RyeSc7XG5cbmV4cG9ydCB0eXBlIFJlZ2lzdHJ5SGFuZGxlckV2ZW50TWFwID0ge1xuXHRpbnZhbGlkYXRlOiBFdmVudE9iamVjdDwnaW52YWxpZGF0ZSc+O1xufTtcblxuZXhwb3J0IGNsYXNzIFJlZ2lzdHJ5SGFuZGxlciBleHRlbmRzIEV2ZW50ZWQ8UmVnaXN0cnlIYW5kbGVyRXZlbnRNYXA+IHtcblx0cHJpdmF0ZSBfcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTtcblx0cHJpdmF0ZSBfcmVnaXN0cnlXaWRnZXRMYWJlbE1hcDogTWFwPFJlZ2lzdHJ5LCBSZWdpc3RyeUxhYmVsW10+ID0gbmV3IE1hcCgpO1xuXHRwcml2YXRlIF9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXA6IE1hcDxSZWdpc3RyeSwgUmVnaXN0cnlMYWJlbFtdPiA9IG5ldyBNYXAoKTtcblx0cHJvdGVjdGVkIGJhc2VSZWdpc3RyeT86IFJlZ2lzdHJ5O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vd24odGhpcy5fcmVnaXN0cnkpO1xuXHRcdGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5iYXNlUmVnaXN0cnkpIHtcblx0XHRcdFx0dGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xuXHRcdFx0XHR0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcblx0XHRcdFx0dGhpcy5iYXNlUmVnaXN0cnkgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLm93bih7IGRlc3Ryb3kgfSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGJhc2UoYmFzZVJlZ2lzdHJ5OiBSZWdpc3RyeSkge1xuXHRcdGlmICh0aGlzLmJhc2VSZWdpc3RyeSkge1xuXHRcdFx0dGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xuXHRcdFx0dGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XG5cdFx0fVxuXHRcdHRoaXMuYmFzZVJlZ2lzdHJ5ID0gYmFzZVJlZ2lzdHJ5O1xuXHR9XG5cblx0cHVibGljIGRlZmluZShsYWJlbDogUmVnaXN0cnlMYWJlbCwgd2lkZ2V0OiBSZWdpc3RyeUl0ZW0pOiB2b2lkIHtcblx0XHR0aGlzLl9yZWdpc3RyeS5kZWZpbmUobGFiZWwsIHdpZGdldCk7XG5cdH1cblxuXHRwdWJsaWMgZGVmaW5lSW5qZWN0b3IobGFiZWw6IFJlZ2lzdHJ5TGFiZWwsIGluamVjdG9yOiBJbmplY3RvckZhY3RvcnkpOiB2b2lkIHtcblx0XHR0aGlzLl9yZWdpc3RyeS5kZWZpbmVJbmplY3RvcihsYWJlbCwgaW5qZWN0b3IpO1xuXHR9XG5cblx0cHVibGljIGhhcyhsYWJlbDogUmVnaXN0cnlMYWJlbCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9yZWdpc3RyeS5oYXMobGFiZWwpIHx8IEJvb2xlYW4odGhpcy5iYXNlUmVnaXN0cnkgJiYgdGhpcy5iYXNlUmVnaXN0cnkuaGFzKGxhYmVsKSk7XG5cdH1cblxuXHRwdWJsaWMgaGFzSW5qZWN0b3IobGFiZWw6IFJlZ2lzdHJ5TGFiZWwpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpIHx8IEJvb2xlYW4odGhpcy5iYXNlUmVnaXN0cnkgJiYgdGhpcy5iYXNlUmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQ8VCBleHRlbmRzIFdpZGdldEJhc2VJbnRlcmZhY2UgPSBXaWRnZXRCYXNlSW50ZXJmYWNlPihcblx0XHRsYWJlbDogUmVnaXN0cnlMYWJlbCxcblx0XHRnbG9iYWxQcmVjZWRlbmNlOiBib29sZWFuID0gZmFsc2Vcblx0KTogQ29uc3RydWN0b3I8VD4gfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCAnZ2V0JywgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0SW5qZWN0b3I8VD4obGFiZWw6IFJlZ2lzdHJ5TGFiZWwsIGdsb2JhbFByZWNlZGVuY2U6IGJvb2xlYW4gPSBmYWxzZSk6IEluamVjdG9ySXRlbTxUPiB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLl9nZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsICdnZXRJbmplY3RvcicsIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcCk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXQoXG5cdFx0bGFiZWw6IFJlZ2lzdHJ5TGFiZWwsXG5cdFx0Z2xvYmFsUHJlY2VkZW5jZTogYm9vbGVhbixcblx0XHRnZXRGdW5jdGlvbk5hbWU6ICdnZXRJbmplY3RvcicgfCAnZ2V0Jyxcblx0XHRsYWJlbE1hcDogTWFwPFJlZ2lzdHJ5LCBSZWdpc3RyeUxhYmVsW10+XG5cdCk6IGFueSB7XG5cdFx0Y29uc3QgcmVnaXN0cmllcyA9IGdsb2JhbFByZWNlZGVuY2UgPyBbdGhpcy5iYXNlUmVnaXN0cnksIHRoaXMuX3JlZ2lzdHJ5XSA6IFt0aGlzLl9yZWdpc3RyeSwgdGhpcy5iYXNlUmVnaXN0cnldO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVnaXN0cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgcmVnaXN0cnk6IGFueSA9IHJlZ2lzdHJpZXNbaV07XG5cdFx0XHRpZiAoIXJlZ2lzdHJ5KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaXRlbSA9IHJlZ2lzdHJ5W2dldEZ1bmN0aW9uTmFtZV0obGFiZWwpO1xuXHRcdFx0Y29uc3QgcmVnaXN0ZXJlZExhYmVscyA9IGxhYmVsTWFwLmdldChyZWdpc3RyeSkgfHwgW107XG5cdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH0gZWxzZSBpZiAocmVnaXN0ZXJlZExhYmVscy5pbmRleE9mKGxhYmVsKSA9PT0gLTEpIHtcblx0XHRcdFx0Y29uc3QgaGFuZGxlID0gcmVnaXN0cnkub24obGFiZWwsIChldmVudDogUmVnaXN0cnlFdmVudE9iamVjdCkgPT4ge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGV2ZW50LmFjdGlvbiA9PT0gJ2xvYWRlZCcgJiZcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSlbZ2V0RnVuY3Rpb25OYW1lXShsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSkgPT09IGV2ZW50Lml0ZW1cblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRoaXMuZW1pdCh7IHR5cGU6ICdpbnZhbGlkYXRlJyB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLm93bihoYW5kbGUpO1xuXHRcdFx0XHRsYWJlbE1hcC5zZXQocmVnaXN0cnksIFsuLi5yZWdpc3RlcmVkTGFiZWxzLCBsYWJlbF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZWdpc3RyeUhhbmRsZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gUmVnaXN0cnlIYW5kbGVyLnRzIiwiaW1wb3J0IE1hcCBmcm9tICcuLi9zaGltL01hcCc7XG5pbXBvcnQgV2Vha01hcCBmcm9tICcuLi9zaGltL1dlYWtNYXAnO1xuaW1wb3J0IFN5bWJvbCBmcm9tICcuLi9zaGltL1N5bWJvbCc7XG5pbXBvcnQgeyBIYW5kbGUgfSBmcm9tICcuLi9jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdiB9IGZyb20gJy4vZCc7XG5pbXBvcnQgeyBhdXRvIH0gZnJvbSAnLi9kaWZmJztcbmltcG9ydCB7XG5cdEFmdGVyUmVuZGVyLFxuXHRCZWZvcmVQcm9wZXJ0aWVzLFxuXHRCZWZvcmVSZW5kZXIsXG5cdENvcmVQcm9wZXJ0aWVzLFxuXHREaWZmUHJvcGVydHlSZWFjdGlvbixcblx0RE5vZGUsXG5cdFJlbmRlcixcblx0V2lkZ2V0TWV0YUJhc2UsXG5cdFdpZGdldE1ldGFDb25zdHJ1Y3Rvcixcblx0V2lkZ2V0QmFzZUludGVyZmFjZSxcblx0V2lkZ2V0UHJvcGVydGllc1xufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IFJlZ2lzdHJ5SGFuZGxlciBmcm9tICcuL1JlZ2lzdHJ5SGFuZGxlcic7XG5pbXBvcnQgTm9kZUhhbmRsZXIgZnJvbSAnLi9Ob2RlSGFuZGxlcic7XG5pbXBvcnQgeyB3aWRnZXRJbnN0YW5jZU1hcCB9IGZyb20gJy4vdmRvbSc7XG5pbXBvcnQgeyBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvciwgV0lER0VUX0JBU0VfVFlQRSB9IGZyb20gJy4vUmVnaXN0cnknO1xuXG5pbnRlcmZhY2UgUmVhY3Rpb25GdW5jdGlvbkNvbmZpZyB7XG5cdHByb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRyZWFjdGlvbjogRGlmZlByb3BlcnR5UmVhY3Rpb247XG59XG5cbmV4cG9ydCB0eXBlIEJvdW5kRnVuY3Rpb25EYXRhID0geyBib3VuZEZ1bmM6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55OyBzY29wZTogYW55IH07XG5cbmNvbnN0IGRlY29yYXRvck1hcCA9IG5ldyBNYXA8RnVuY3Rpb24sIE1hcDxzdHJpbmcsIGFueVtdPj4oKTtcbmNvbnN0IGJvdW5kQXV0byA9IGF1dG8uYmluZChudWxsKTtcblxuZXhwb3J0IGNvbnN0IG5vQmluZCA9IFN5bWJvbC5mb3IoJ2Rvam9Ob0JpbmQnKTtcblxuLyoqXG4gKiBNYWluIHdpZGdldCBiYXNlIGZvciBhbGwgd2lkZ2V0cyB0byBleHRlbmRcbiAqL1xuZXhwb3J0IGNsYXNzIFdpZGdldEJhc2U8UCA9IFdpZGdldFByb3BlcnRpZXMsIEMgZXh0ZW5kcyBETm9kZSA9IEROb2RlPiBpbXBsZW1lbnRzIFdpZGdldEJhc2VJbnRlcmZhY2U8UCwgQz4ge1xuXHQvKipcblx0ICogc3RhdGljIGlkZW50aWZpZXJcblx0ICovXG5cdHN0YXRpYyBfdHlwZTogc3ltYm9sID0gV0lER0VUX0JBU0VfVFlQRTtcblxuXHQvKipcblx0ICogY2hpbGRyZW4gYXJyYXlcblx0ICovXG5cdHByaXZhdGUgX2NoaWxkcmVuOiAoQyB8IG51bGwpW107XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyBpZiBpdCBpcyB0aGUgaW5pdGlhbCBzZXQgcHJvcGVydGllcyBjeWNsZVxuXHQgKi9cblx0cHJpdmF0ZSBfaW5pdGlhbFByb3BlcnRpZXMgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBpbnRlcm5hbCB3aWRnZXQgcHJvcGVydGllc1xuXHQgKi9cblx0cHJpdmF0ZSBfcHJvcGVydGllczogUCAmIFdpZGdldFByb3BlcnRpZXMgJiB7IFtpbmRleDogc3RyaW5nXTogYW55IH07XG5cblx0LyoqXG5cdCAqIEFycmF5IG9mIHByb3BlcnR5IGtleXMgY29uc2lkZXJlZCBjaGFuZ2VkIGZyb20gdGhlIHByZXZpb3VzIHNldCBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRwcml2YXRlIF9jaGFuZ2VkUHJvcGVydHlLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBtYXAgb2YgZGVjb3JhdG9ycyB0aGF0IGFyZSBhcHBsaWVkIHRvIHRoaXMgd2lkZ2V0XG5cdCAqL1xuXHRwcml2YXRlIF9kZWNvcmF0b3JDYWNoZTogTWFwPHN0cmluZywgYW55W10+O1xuXG5cdHByaXZhdGUgX3JlZ2lzdHJ5OiBSZWdpc3RyeUhhbmRsZXIgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIE1hcCBvZiBmdW5jdGlvbnMgcHJvcGVydGllcyBmb3IgdGhlIGJvdW5kIGZ1bmN0aW9uXG5cdCAqL1xuXHRwcml2YXRlIF9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcDogV2Vha01hcDwoLi4uYXJnczogYW55W10pID0+IGFueSwgQm91bmRGdW5jdGlvbkRhdGE+IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgX21ldGFNYXA6IE1hcDxXaWRnZXRNZXRhQ29uc3RydWN0b3I8YW55PiwgV2lkZ2V0TWV0YUJhc2U+IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgX2JvdW5kUmVuZGVyRnVuYzogUmVuZGVyO1xuXG5cdHByaXZhdGUgX2JvdW5kSW52YWxpZGF0ZTogKCkgPT4gdm9pZDtcblxuXHRwcml2YXRlIF9ub2RlSGFuZGxlcjogTm9kZUhhbmRsZXIgPSBuZXcgTm9kZUhhbmRsZXIoKTtcblxuXHRwcml2YXRlIF9oYW5kbGVzOiBIYW5kbGVbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuX2NoaWxkcmVuID0gW107XG5cdFx0dGhpcy5fZGVjb3JhdG9yQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XG5cdFx0dGhpcy5fcHJvcGVydGllcyA9IDxQPnt9O1xuXHRcdHRoaXMuX2JvdW5kUmVuZGVyRnVuYyA9IHRoaXMucmVuZGVyLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5fYm91bmRJbnZhbGlkYXRlID0gdGhpcy5pbnZhbGlkYXRlLmJpbmQodGhpcyk7XG5cblx0XHR3aWRnZXRJbnN0YW5jZU1hcC5zZXQodGhpcywge1xuXHRcdFx0ZGlydHk6IHRydWUsXG5cdFx0XHRvbkF0dGFjaDogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLm9uQXR0YWNoKCk7XG5cdFx0XHR9LFxuXHRcdFx0b25EZXRhY2g6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy5vbkRldGFjaCgpO1xuXHRcdFx0XHR0aGlzLmRlc3Ryb3koKTtcblx0XHRcdH0sXG5cdFx0XHRub2RlSGFuZGxlcjogdGhpcy5fbm9kZUhhbmRsZXIsXG5cdFx0XHRyZWdpc3RyeTogKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZWdpc3RyeTtcblx0XHRcdH0sXG5cdFx0XHRjb3JlUHJvcGVydGllczoge30gYXMgQ29yZVByb3BlcnRpZXMsXG5cdFx0XHRyZW5kZXJpbmc6IGZhbHNlLFxuXHRcdFx0aW5wdXRQcm9wZXJ0aWVzOiB7fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5fcnVuQWZ0ZXJDb25zdHJ1Y3RvcnMoKTtcblx0fVxuXG5cdHByb3RlY3RlZCBtZXRhPFQgZXh0ZW5kcyBXaWRnZXRNZXRhQmFzZT4oTWV0YVR5cGU6IFdpZGdldE1ldGFDb25zdHJ1Y3RvcjxUPik6IFQge1xuXHRcdGlmICh0aGlzLl9tZXRhTWFwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuX21ldGFNYXAgPSBuZXcgTWFwPFdpZGdldE1ldGFDb25zdHJ1Y3Rvcjxhbnk+LCBXaWRnZXRNZXRhQmFzZT4oKTtcblx0XHR9XG5cdFx0bGV0IGNhY2hlZCA9IHRoaXMuX21ldGFNYXAuZ2V0KE1ldGFUeXBlKTtcblx0XHRpZiAoIWNhY2hlZCkge1xuXHRcdFx0Y2FjaGVkID0gbmV3IE1ldGFUeXBlKHtcblx0XHRcdFx0aW52YWxpZGF0ZTogdGhpcy5fYm91bmRJbnZhbGlkYXRlLFxuXHRcdFx0XHRub2RlSGFuZGxlcjogdGhpcy5fbm9kZUhhbmRsZXIsXG5cdFx0XHRcdGJpbmQ6IHRoaXNcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5vd24oY2FjaGVkKTtcblx0XHRcdHRoaXMuX21ldGFNYXAuc2V0KE1ldGFUeXBlLCBjYWNoZWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZWQgYXMgVDtcblx0fVxuXG5cdHByb3RlY3RlZCBvbkF0dGFjaCgpOiB2b2lkIHtcblx0XHQvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXG5cdH1cblxuXHRwcm90ZWN0ZWQgb25EZXRhY2goKTogdm9pZCB7XG5cdFx0Ly8gRG8gbm90aGluZyBieSBkZWZhdWx0LlxuXHR9XG5cblx0cHVibGljIGdldCBwcm9wZXJ0aWVzKCk6IFJlYWRvbmx5PFA+ICYgUmVhZG9ubHk8V2lkZ2V0UHJvcGVydGllcz4ge1xuXHRcdHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzO1xuXHR9XG5cblx0cHVibGljIGdldCBjaGFuZ2VkUHJvcGVydHlLZXlzKCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXNdO1xuXHR9XG5cblx0cHVibGljIF9fc2V0Q29yZVByb3BlcnRpZXNfXyhjb3JlUHJvcGVydGllczogQ29yZVByb3BlcnRpZXMpOiB2b2lkIHtcblx0XHRjb25zdCB7IGJhc2VSZWdpc3RyeSB9ID0gY29yZVByb3BlcnRpZXM7XG5cdFx0Y29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpITtcblxuXHRcdGlmIChpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMuYmFzZVJlZ2lzdHJ5ICE9PSBiYXNlUmVnaXN0cnkpIHtcblx0XHRcdGlmICh0aGlzLl9yZWdpc3RyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuX3JlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5SGFuZGxlcigpO1xuXHRcdFx0XHR0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG5cdFx0XHRcdHRoaXMub3duKHRoaXMuX3JlZ2lzdHJ5Lm9uKCdpbnZhbGlkYXRlJywgdGhpcy5fYm91bmRJbnZhbGlkYXRlKSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9yZWdpc3RyeS5iYXNlID0gYmFzZVJlZ2lzdHJ5O1xuXHRcdFx0dGhpcy5pbnZhbGlkYXRlKCk7XG5cdFx0fVxuXHRcdGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcyA9IGNvcmVQcm9wZXJ0aWVzO1xuXHR9XG5cblx0cHVibGljIF9fc2V0UHJvcGVydGllc19fKG9yaWdpbmFsUHJvcGVydGllczogdGhpc1sncHJvcGVydGllcyddKTogdm9pZCB7XG5cdFx0Y29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpITtcblx0XHRpbnN0YW5jZURhdGEuaW5wdXRQcm9wZXJ0aWVzID0gb3JpZ2luYWxQcm9wZXJ0aWVzO1xuXHRcdGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9ydW5CZWZvcmVQcm9wZXJ0aWVzKG9yaWdpbmFsUHJvcGVydGllcyk7XG5cdFx0Y29uc3QgcmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ3JlZ2lzdGVyZWREaWZmUHJvcGVydHknKTtcblx0XHRjb25zdCBjaGFuZ2VkUHJvcGVydHlLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcblxuXHRcdGlmICh0aGlzLl9pbml0aWFsUHJvcGVydGllcyA9PT0gZmFsc2UgfHwgcmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0Y29uc3QgYWxsUHJvcGVydGllcyA9IFsuLi5wcm9wZXJ0eU5hbWVzLCAuLi5PYmplY3Qua2V5cyh0aGlzLl9wcm9wZXJ0aWVzKV07XG5cdFx0XHRjb25zdCBjaGVja2VkUHJvcGVydGllczogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xuXHRcdFx0Y29uc3QgZGlmZlByb3BlcnR5UmVzdWx0czogYW55ID0ge307XG5cdFx0XHRsZXQgcnVuUmVhY3Rpb25zID0gZmFsc2U7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYWxsUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0aWVzW2ldO1xuXHRcdFx0XHRpZiAoY2hlY2tlZFByb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNoZWNrZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNQcm9wZXJ0eSA9IHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdFx0Y29uc3QgbmV3UHJvcGVydHkgPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0sXG5cdFx0XHRcdFx0aW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJpbmRcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHJlZ2lzdGVyZWREaWZmUHJvcGVydHlOYW1lcy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xKSB7XG5cdFx0XHRcdFx0cnVuUmVhY3Rpb25zID0gdHJ1ZTtcblx0XHRcdFx0XHRjb25zdCBkaWZmRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoYGRpZmZQcm9wZXJ0eToke3Byb3BlcnR5TmFtZX1gKTtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRpZmZGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGRpZmZGdW5jdGlvbnNbaV0ocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0aWYgKHJlc3VsdC5jaGFuZ2VkICYmIGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjaGFuZ2VkUHJvcGVydHlLZXlzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuXHRcdFx0XHRcdFx0XHRkaWZmUHJvcGVydHlSZXN1bHRzW3Byb3BlcnR5TmFtZV0gPSByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGJvdW5kQXV0byhwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdC5jaGFuZ2VkICYmIGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpID09PSAtMSkge1xuXHRcdFx0XHRcdFx0Y2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuXHRcdFx0XHRcdFx0ZGlmZlByb3BlcnR5UmVzdWx0c1twcm9wZXJ0eU5hbWVdID0gcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAocnVuUmVhY3Rpb25zKSB7XG5cdFx0XHRcdGNvbnN0IHJlYWN0aW9uRnVuY3Rpb25zOiBSZWFjdGlvbkZ1bmN0aW9uQ29uZmlnW10gPSB0aGlzLmdldERlY29yYXRvcignZGlmZlJlYWN0aW9uJyk7XG5cdFx0XHRcdGNvbnN0IGV4ZWN1dGVkUmVhY3Rpb25zOiBGdW5jdGlvbltdID0gW107XG5cdFx0XHRcdHJlYWN0aW9uRnVuY3Rpb25zLmZvckVhY2goKHsgcmVhY3Rpb24sIHByb3BlcnR5TmFtZSB9KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlDaGFuZ2VkID0gY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xO1xuXHRcdFx0XHRcdGNvbnN0IHJlYWN0aW9uUnVuID0gZXhlY3V0ZWRSZWFjdGlvbnMuaW5kZXhPZihyZWFjdGlvbikgIT09IC0xO1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eUNoYW5nZWQgJiYgIXJlYWN0aW9uUnVuKSB7XG5cdFx0XHRcdFx0XHRyZWFjdGlvbi5jYWxsKHRoaXMsIHRoaXMuX3Byb3BlcnRpZXMsIGRpZmZQcm9wZXJ0eVJlc3VsdHMpO1xuXHRcdFx0XHRcdFx0ZXhlY3V0ZWRSZWFjdGlvbnMucHVzaChyZWFjdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3Byb3BlcnRpZXMgPSBkaWZmUHJvcGVydHlSZXN1bHRzO1xuXHRcdFx0dGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cyA9IGNoYW5nZWRQcm9wZXJ0eUtleXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID0gZmFsc2U7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTtcblx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShcblx0XHRcdFx0XHRcdHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSxcblx0XHRcdFx0XHRcdGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iaW5kXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjaGFuZ2VkUHJvcGVydHlLZXlzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cyA9IGNoYW5nZWRQcm9wZXJ0eUtleXM7XG5cdFx0XHR0aGlzLl9wcm9wZXJ0aWVzID0geyAuLi5wcm9wZXJ0aWVzIH07XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5pbnZhbGlkYXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldCBjaGlsZHJlbigpOiAoQyB8IG51bGwpW10ge1xuXHRcdHJldHVybiB0aGlzLl9jaGlsZHJlbjtcblx0fVxuXG5cdHB1YmxpYyBfX3NldENoaWxkcmVuX18oY2hpbGRyZW46IChDIHwgbnVsbClbXSk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9jaGlsZHJlbi5sZW5ndGggPiAwIHx8IGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuX2NoaWxkcmVuID0gY2hpbGRyZW47XG5cdFx0XHR0aGlzLmludmFsaWRhdGUoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgX19yZW5kZXJfXygpOiBETm9kZSB8IEROb2RlW10ge1xuXHRcdGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKSE7XG5cdFx0aW5zdGFuY2VEYXRhLmRpcnR5ID0gZmFsc2U7XG5cdFx0Y29uc3QgcmVuZGVyID0gdGhpcy5fcnVuQmVmb3JlUmVuZGVycygpO1xuXHRcdGxldCBkTm9kZSA9IHJlbmRlcigpO1xuXHRcdGROb2RlID0gdGhpcy5ydW5BZnRlclJlbmRlcnMoZE5vZGUpO1xuXHRcdHRoaXMuX25vZGVIYW5kbGVyLmNsZWFyKCk7XG5cdFx0cmV0dXJuIGROb2RlO1xuXHR9XG5cblx0cHVibGljIGludmFsaWRhdGUoKTogdm9pZCB7XG5cdFx0Y29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpITtcblx0XHRpZiAoaW5zdGFuY2VEYXRhLmludmFsaWRhdGUpIHtcblx0XHRcdGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIHJlbmRlcigpOiBETm9kZSB8IEROb2RlW10ge1xuXHRcdHJldHVybiB2KCdkaXYnLCB7fSwgdGhpcy5jaGlsZHJlbik7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gYWRkIGRlY29yYXRvcnMgdG8gV2lkZ2V0QmFzZVxuXHQgKlxuXHQgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBkZWNvcmF0b3Jcblx0ICovXG5cdHByb3RlY3RlZCBhZGREZWNvcmF0b3IoZGVjb3JhdG9yS2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcblx0XHR2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuXHRcdGlmICh0aGlzLmhhc093blByb3BlcnR5KCdjb25zdHJ1Y3RvcicpKSB7XG5cdFx0XHRsZXQgZGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvck1hcC5nZXQodGhpcy5jb25zdHJ1Y3Rvcik7XG5cdFx0XHRpZiAoIWRlY29yYXRvckxpc3QpIHtcblx0XHRcdFx0ZGVjb3JhdG9yTGlzdCA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcblx0XHRcdFx0ZGVjb3JhdG9yTWFwLnNldCh0aGlzLmNvbnN0cnVjdG9yLCBkZWNvcmF0b3JMaXN0KTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHNwZWNpZmljRGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvckxpc3QuZ2V0KGRlY29yYXRvcktleSk7XG5cdFx0XHRpZiAoIXNwZWNpZmljRGVjb3JhdG9yTGlzdCkge1xuXHRcdFx0XHRzcGVjaWZpY0RlY29yYXRvckxpc3QgPSBbXTtcblx0XHRcdFx0ZGVjb3JhdG9yTGlzdC5zZXQoZGVjb3JhdG9yS2V5LCBzcGVjaWZpY0RlY29yYXRvckxpc3QpO1xuXHRcdFx0fVxuXHRcdFx0c3BlY2lmaWNEZWNvcmF0b3JMaXN0LnB1c2goLi4udmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBkZWNvcmF0b3JzID0gdGhpcy5nZXREZWNvcmF0b3IoZGVjb3JhdG9yS2V5KTtcblx0XHRcdHRoaXMuX2RlY29yYXRvckNhY2hlLnNldChkZWNvcmF0b3JLZXksIFsuLi5kZWNvcmF0b3JzLCAuLi52YWx1ZV0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBidWlsZCB0aGUgbGlzdCBvZiBkZWNvcmF0b3JzIGZyb20gdGhlIGdsb2JhbCBkZWNvcmF0b3IgbWFwLlxuXHQgKlxuXHQgKiBAcGFyYW0gZGVjb3JhdG9yS2V5ICBUaGUga2V5IG9mIHRoZSBkZWNvcmF0b3Jcblx0ICogQHJldHVybiBBbiBhcnJheSBvZiBkZWNvcmF0b3IgdmFsdWVzXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIF9idWlsZERlY29yYXRvckxpc3QoZGVjb3JhdG9yS2V5OiBzdHJpbmcpOiBhbnlbXSB7XG5cdFx0Y29uc3QgYWxsRGVjb3JhdG9ycyA9IFtdO1xuXG5cdFx0bGV0IGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuXHRcdHdoaWxlIChjb25zdHJ1Y3Rvcikge1xuXHRcdFx0Y29uc3QgaW5zdGFuY2VNYXAgPSBkZWNvcmF0b3JNYXAuZ2V0KGNvbnN0cnVjdG9yKTtcblx0XHRcdGlmIChpbnN0YW5jZU1hcCkge1xuXHRcdFx0XHRjb25zdCBkZWNvcmF0b3JzID0gaW5zdGFuY2VNYXAuZ2V0KGRlY29yYXRvcktleSk7XG5cblx0XHRcdFx0aWYgKGRlY29yYXRvcnMpIHtcblx0XHRcdFx0XHRhbGxEZWNvcmF0b3JzLnVuc2hpZnQoLi4uZGVjb3JhdG9ycyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29uc3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY29uc3RydWN0b3IpO1xuXHRcdH1cblxuXHRcdHJldHVybiBhbGxEZWNvcmF0b3JzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRvIHJldHJpZXZlIGRlY29yYXRvciB2YWx1ZXNcblx0ICpcblx0ICogQHBhcmFtIGRlY29yYXRvcktleSBUaGUga2V5IG9mIHRoZSBkZWNvcmF0b3Jcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgZGVjb3JhdG9yIHZhbHVlc1xuXHQgKi9cblx0cHJvdGVjdGVkIGdldERlY29yYXRvcihkZWNvcmF0b3JLZXk6IHN0cmluZyk6IGFueVtdIHtcblx0XHRsZXQgYWxsRGVjb3JhdG9ycyA9IHRoaXMuX2RlY29yYXRvckNhY2hlLmdldChkZWNvcmF0b3JLZXkpO1xuXG5cdFx0aWYgKGFsbERlY29yYXRvcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGFsbERlY29yYXRvcnM7XG5cdFx0fVxuXG5cdFx0YWxsRGVjb3JhdG9ycyA9IHRoaXMuX2J1aWxkRGVjb3JhdG9yTGlzdChkZWNvcmF0b3JLZXkpO1xuXG5cdFx0dGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgYWxsRGVjb3JhdG9ycyk7XG5cdFx0cmV0dXJuIGFsbERlY29yYXRvcnM7XG5cdH1cblxuXHQvKipcblx0ICogQmluZHMgdW5ib3VuZCBwcm9wZXJ0eSBmdW5jdGlvbnMgdG8gdGhlIHNwZWNpZmllZCBgYmluZGAgcHJvcGVydHlcblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnRpZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgZnVuY3Rpb25zXG5cdCAqL1xuXHRwcml2YXRlIF9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShwcm9wZXJ0eTogYW55LCBiaW5kOiBhbnkpOiBhbnkge1xuXHRcdGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIXByb3BlcnR5W25vQmluZF0gJiYgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IocHJvcGVydHkpID09PSBmYWxzZSkge1xuXHRcdFx0aWYgKHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAgPSBuZXcgV2Vha01hcDxcblx0XHRcdFx0XHQoLi4uYXJnczogYW55W10pID0+IGFueSxcblx0XHRcdFx0XHR7IGJvdW5kRnVuYzogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7IHNjb3BlOiBhbnkgfVxuXHRcdFx0XHQ+KCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBiaW5kSW5mbzogUGFydGlhbDxCb3VuZEZ1bmN0aW9uRGF0YT4gPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcC5nZXQocHJvcGVydHkpIHx8IHt9O1xuXHRcdFx0bGV0IHsgYm91bmRGdW5jLCBzY29wZSB9ID0gYmluZEluZm87XG5cblx0XHRcdGlmIChib3VuZEZ1bmMgPT09IHVuZGVmaW5lZCB8fCBzY29wZSAhPT0gYmluZCkge1xuXHRcdFx0XHRib3VuZEZ1bmMgPSBwcm9wZXJ0eS5iaW5kKGJpbmQpIGFzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuXHRcdFx0XHR0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcC5zZXQocHJvcGVydHksIHsgYm91bmRGdW5jLCBzY29wZTogYmluZCB9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBib3VuZEZ1bmM7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcmVnaXN0cnkoKTogUmVnaXN0cnlIYW5kbGVyIHtcblx0XHRpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyKCk7XG5cdFx0XHR0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG5cdFx0XHR0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fcmVnaXN0cnk7XG5cdH1cblxuXHRwcml2YXRlIF9ydW5CZWZvcmVQcm9wZXJ0aWVzKHByb3BlcnRpZXM6IGFueSkge1xuXHRcdGNvbnN0IGJlZm9yZVByb3BlcnRpZXM6IEJlZm9yZVByb3BlcnRpZXNbXSA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiZWZvcmVQcm9wZXJ0aWVzJyk7XG5cdFx0aWYgKGJlZm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGJlZm9yZVByb3BlcnRpZXMucmVkdWNlKFxuXHRcdFx0XHQocHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4ucHJvcGVydGllcywgLi4uYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uLmNhbGwodGhpcywgcHJvcGVydGllcykgfTtcblx0XHRcdFx0fSxcblx0XHRcdFx0eyAuLi5wcm9wZXJ0aWVzIH1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1biBhbGwgcmVnaXN0ZXJlZCBiZWZvcmUgcmVuZGVycyBhbmQgcmV0dXJuIHRoZSB1cGRhdGVkIHJlbmRlciBtZXRob2Rcblx0ICovXG5cdHByaXZhdGUgX3J1bkJlZm9yZVJlbmRlcnMoKTogUmVuZGVyIHtcblx0XHRjb25zdCBiZWZvcmVSZW5kZXJzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2JlZm9yZVJlbmRlcicpO1xuXG5cdFx0aWYgKGJlZm9yZVJlbmRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGJlZm9yZVJlbmRlcnMucmVkdWNlKChyZW5kZXI6IFJlbmRlciwgYmVmb3JlUmVuZGVyRnVuY3Rpb246IEJlZm9yZVJlbmRlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1cGRhdGVkUmVuZGVyID0gYmVmb3JlUmVuZGVyRnVuY3Rpb24uY2FsbCh0aGlzLCByZW5kZXIsIHRoaXMuX3Byb3BlcnRpZXMsIHRoaXMuX2NoaWxkcmVuKTtcblx0XHRcdFx0aWYgKCF1cGRhdGVkUmVuZGVyKSB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdSZW5kZXIgZnVuY3Rpb24gbm90IHJldHVybmVkIGZyb20gYmVmb3JlUmVuZGVyLCB1c2luZyBwcmV2aW91cyByZW5kZXInKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVuZGVyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1cGRhdGVkUmVuZGVyO1xuXHRcdFx0fSwgdGhpcy5fYm91bmRSZW5kZXJGdW5jKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2JvdW5kUmVuZGVyRnVuYztcblx0fVxuXG5cdC8qKlxuXHQgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYWZ0ZXIgcmVuZGVycyBhbmQgcmV0dXJuIHRoZSBkZWNvcmF0ZWQgRE5vZGVzXG5cdCAqXG5cdCAqIEBwYXJhbSBkTm9kZSBUaGUgRE5vZGVzIHRvIHJ1biB0aHJvdWdoIHRoZSBhZnRlciByZW5kZXJzXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcnVuQWZ0ZXJSZW5kZXJzKGROb2RlOiBETm9kZSB8IEROb2RlW10pOiBETm9kZSB8IEROb2RlW10ge1xuXHRcdGNvbnN0IGFmdGVyUmVuZGVycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdhZnRlclJlbmRlcicpO1xuXG5cdFx0aWYgKGFmdGVyUmVuZGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRkTm9kZSA9IGFmdGVyUmVuZGVycy5yZWR1Y2UoKGROb2RlOiBETm9kZSB8IEROb2RlW10sIGFmdGVyUmVuZGVyRnVuY3Rpb246IEFmdGVyUmVuZGVyKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhZnRlclJlbmRlckZ1bmN0aW9uLmNhbGwodGhpcywgZE5vZGUpO1xuXHRcdFx0fSwgZE5vZGUpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9tZXRhTWFwICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuX21ldGFNYXAuZm9yRWFjaCgobWV0YSkgPT4ge1xuXHRcdFx0XHRtZXRhLmFmdGVyUmVuZGVyKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZE5vZGU7XG5cdH1cblxuXHRwcml2YXRlIF9ydW5BZnRlckNvbnN0cnVjdG9ycygpOiB2b2lkIHtcblx0XHRjb25zdCBhZnRlckNvbnN0cnVjdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdhZnRlckNvbnN0cnVjdG9yJyk7XG5cblx0XHRpZiAoYWZ0ZXJDb25zdHJ1Y3RvcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YWZ0ZXJDb25zdHJ1Y3RvcnMuZm9yRWFjaCgoYWZ0ZXJDb25zdHJ1Y3RvcikgPT4gYWZ0ZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgb3duKGhhbmRsZTogSGFuZGxlKTogdm9pZCB7XG5cdFx0dGhpcy5faGFuZGxlcy5wdXNoKGhhbmRsZSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZGVzdHJveSgpIHtcblx0XHR3aGlsZSAodGhpcy5faGFuZGxlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBoYW5kbGUgPSB0aGlzLl9oYW5kbGVzLnBvcCgpO1xuXHRcdFx0aWYgKGhhbmRsZSkge1xuXHRcdFx0XHRoYW5kbGUuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBXaWRnZXRCYXNlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIFdpZGdldEJhc2UudHMiLCJpbXBvcnQgeyBWTm9kZVByb3BlcnRpZXMgfSBmcm9tICcuLy4uL2ludGVyZmFjZXMnO1xuXG5sZXQgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICcnO1xubGV0IGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9ICcnO1xuXG5mdW5jdGlvbiBkZXRlcm1pbmVCcm93c2VyU3R5bGVOYW1lcyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuXHRpZiAoJ1dlYmtpdFRyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUpIHtcblx0XHRicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuXHRcdGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xuXHR9IGVsc2UgaWYgKCd0cmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlIHx8ICdNb3pUcmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlKSB7XG5cdFx0YnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICd0cmFuc2l0aW9uZW5kJztcblx0XHRicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnYW5pbWF0aW9uZW5kJztcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1lvdXIgYnJvd3NlciBpcyBub3Qgc3VwcG9ydGVkJyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZShlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuXHRpZiAoYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID09PSAnJykge1xuXHRcdGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJ1bkFuZENsZWFuVXAoZWxlbWVudDogSFRNTEVsZW1lbnQsIHN0YXJ0QW5pbWF0aW9uOiAoKSA9PiB2b2lkLCBmaW5pc2hBbmltYXRpb246ICgpID0+IHZvaWQpIHtcblx0aW5pdGlhbGl6ZShlbGVtZW50KTtcblxuXHRsZXQgZmluaXNoZWQgPSBmYWxzZTtcblxuXHRsZXQgdHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICghZmluaXNoZWQpIHtcblx0XHRcdGZpbmlzaGVkID0gdHJ1ZTtcblx0XHRcdGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcblx0XHRcdGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xuXG5cdFx0XHRmaW5pc2hBbmltYXRpb24oKTtcblx0XHR9XG5cdH07XG5cblx0c3RhcnRBbmltYXRpb24oKTtcblxuXHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcblx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xufVxuXG5mdW5jdGlvbiBleGl0KG5vZGU6IEhUTUxFbGVtZW50LCBwcm9wZXJ0aWVzOiBWTm9kZVByb3BlcnRpZXMsIGV4aXRBbmltYXRpb246IHN0cmluZywgcmVtb3ZlTm9kZTogKCkgPT4gdm9pZCkge1xuXHRjb25zdCBhY3RpdmVDbGFzcyA9IHByb3BlcnRpZXMuZXhpdEFuaW1hdGlvbkFjdGl2ZSB8fCBgJHtleGl0QW5pbWF0aW9ufS1hY3RpdmVgO1xuXG5cdHJ1bkFuZENsZWFuVXAoXG5cdFx0bm9kZSxcblx0XHQoKSA9PiB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5hZGQoZXhpdEFuaW1hdGlvbik7XG5cblx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpIHtcblx0XHRcdFx0bm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0KCkgPT4ge1xuXHRcdFx0cmVtb3ZlTm9kZSgpO1xuXHRcdH1cblx0KTtcbn1cblxuZnVuY3Rpb24gZW50ZXIobm9kZTogSFRNTEVsZW1lbnQsIHByb3BlcnRpZXM6IFZOb2RlUHJvcGVydGllcywgZW50ZXJBbmltYXRpb246IHN0cmluZykge1xuXHRjb25zdCBhY3RpdmVDbGFzcyA9IHByb3BlcnRpZXMuZW50ZXJBbmltYXRpb25BY3RpdmUgfHwgYCR7ZW50ZXJBbmltYXRpb259LWFjdGl2ZWA7XG5cblx0cnVuQW5kQ2xlYW5VcChcblx0XHRub2RlLFxuXHRcdCgpID0+IHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LmFkZChlbnRlckFuaW1hdGlvbik7XG5cblx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpIHtcblx0XHRcdFx0bm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0KCkgPT4ge1xuXHRcdFx0bm9kZS5jbGFzc0xpc3QucmVtb3ZlKGVudGVyQW5pbWF0aW9uKTtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LnJlbW92ZShhY3RpdmVDbGFzcyk7XG5cdFx0fVxuXHQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG5cdGVudGVyLFxuXHRleGl0XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGNzc1RyYW5zaXRpb25zLnRzIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuLi9zaGltL1N5bWJvbCc7XG5pbXBvcnQge1xuXHRDb25zdHJ1Y3Rvcixcblx0RGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2UsXG5cdERlZmVycmVkVmlydHVhbFByb3BlcnRpZXMsXG5cdEROb2RlLFxuXHRWTm9kZSxcblx0UmVnaXN0cnlMYWJlbCxcblx0Vk5vZGVQcm9wZXJ0aWVzLFxuXHRXaWRnZXRCYXNlSW50ZXJmYWNlLFxuXHRXTm9kZSxcblx0RG9tT3B0aW9uc1xufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSW50ZXJuYWxWTm9kZSwgUmVuZGVyUmVzdWx0IH0gZnJvbSAnLi92ZG9tJztcblxuLyoqXG4gKiBUaGUgc3ltYm9sIGlkZW50aWZpZXIgZm9yIGEgV05vZGUgdHlwZVxuICovXG5leHBvcnQgY29uc3QgV05PREUgPSBTeW1ib2woJ0lkZW50aWZpZXIgZm9yIGEgV05vZGUuJyk7XG5cbi8qKlxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFZOb2RlIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IFZOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFZOb2RlLicpO1xuXG4vKipcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBWTm9kZSB0eXBlIGNyZWF0ZWQgdXNpbmcgZG9tKClcbiAqL1xuZXhwb3J0IGNvbnN0IERPTVZOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFZOb2RlIGNyZWF0ZWQgdXNpbmcgZXhpc3RpbmcgZG9tLicpO1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgYEROb2RlYCBpcyBhIGBXTm9kZWAgdXNpbmcgdGhlIGB0eXBlYCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXTm9kZTxXIGV4dGVuZHMgV2lkZ2V0QmFzZUludGVyZmFjZSA9IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlPihcblx0Y2hpbGQ6IEROb2RlPFc+XG4pOiBjaGlsZCBpcyBXTm9kZTxXPiB7XG5cdHJldHVybiBCb29sZWFuKGNoaWxkICYmIHR5cGVvZiBjaGlsZCAhPT0gJ3N0cmluZycgJiYgY2hpbGQudHlwZSA9PT0gV05PREUpO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgYEROb2RlYCBpcyBhIGBWTm9kZWAgdXNpbmcgdGhlIGB0eXBlYCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWTm9kZShjaGlsZDogRE5vZGUpOiBjaGlsZCBpcyBWTm9kZSB7XG5cdHJldHVybiBCb29sZWFuKGNoaWxkICYmIHR5cGVvZiBjaGlsZCAhPT0gJ3N0cmluZycgJiYgKGNoaWxkLnR5cGUgPT09IFZOT0RFIHx8IGNoaWxkLnR5cGUgPT09IERPTVZOT0RFKSk7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFZOb2RlYCBjcmVhdGVkIHdpdGggYGRvbSgpYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RvbVZOb2RlKGNoaWxkOiBETm9kZSk6IGNoaWxkIGlzIFZOb2RlIHtcblx0cmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiBjaGlsZC50eXBlID09PSBET01WTk9ERSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnROb2RlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBFbGVtZW50IHtcblx0cmV0dXJuICEhdmFsdWUudGFnTmFtZTtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHRoZSBkZWNvcmF0ZSBtb2RpZmllclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGlmaWVyPFQgZXh0ZW5kcyBETm9kZT4ge1xuXHQoZE5vZGU6IFQsIGJyZWFrZXI6ICgpID0+IHZvaWQpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gZm9yIGRlY29yYXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlZGljYXRlPFQgZXh0ZW5kcyBETm9kZT4ge1xuXHQoZE5vZGU6IEROb2RlKTogZE5vZGUgaXMgVDtcbn1cblxuLyoqXG4gKiBEZWNvcmF0b3Igb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERlY29yYXRlT3B0aW9uczxUIGV4dGVuZHMgRE5vZGU+IHtcblx0bW9kaWZpZXI6IE1vZGlmaWVyPFQ+O1xuXHRwcmVkaWNhdGU/OiBQcmVkaWNhdGU8VD47XG5cdHNoYWxsb3c/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEdlbmVyaWMgZGVjb3JhdGUgZnVuY3Rpb24gZm9yIEROb2Rlcy4gVGhlIG5vZGVzIGFyZSBtb2RpZmllZCBpbiBwbGFjZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcHJlZGljYXRlXG4gKiBhbmQgbW9kaWZpZXIgZnVuY3Rpb25zLlxuICpcbiAqIFRoZSBjaGlsZHJlbiBvZiBlYWNoIG5vZGUgYXJlIGZsYXR0ZW5lZCBhbmQgYWRkZWQgdG8gdGhlIGFycmF5IGZvciBkZWNvcmF0aW9uLlxuICpcbiAqIElmIG5vIHByZWRpY2F0ZSBpcyBzdXBwbGllZCB0aGVuIHRoZSBtb2RpZmllciB3aWxsIGJlIGV4ZWN1dGVkIG9uIGFsbCBub2Rlcy4gQSBgYnJlYWtlcmAgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIHRoZVxuICogbW9kaWZpZXIgd2hpY2ggd2lsbCBkcmFpbiB0aGUgbm9kZXMgYXJyYXkgYW5kIGV4aXQgdGhlIGRlY29yYXRpb24uXG4gKlxuICogV2hlbiB0aGUgYHNoYWxsb3dgIG9wdGlvbnMgaXMgc2V0IHRvIGB0cnVlYCB0aGUgb25seSB0aGUgdG9wIG5vZGUgb3Igbm9kZXMgd2lsbCBiZSBkZWNvcmF0ZWQgKG9ubHkgc3VwcG9ydGVkIHVzaW5nXG4gKiBgRGVjb3JhdGVPcHRpb25zYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZTxUIGV4dGVuZHMgRE5vZGU+KGROb2RlczogRE5vZGUsIG9wdGlvbnM6IERlY29yYXRlT3B0aW9uczxUPik6IEROb2RlO1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlPFQgZXh0ZW5kcyBETm9kZT4oZE5vZGVzOiBETm9kZVtdLCBvcHRpb25zOiBEZWNvcmF0ZU9wdGlvbnM8VD4pOiBETm9kZVtdO1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlPFQgZXh0ZW5kcyBETm9kZT4oZE5vZGVzOiBETm9kZSB8IEROb2RlW10sIG9wdGlvbnM6IERlY29yYXRlT3B0aW9uczxUPik6IEROb2RlIHwgRE5vZGVbXTtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZTxUIGV4dGVuZHMgRE5vZGU+KGROb2RlczogRE5vZGUsIG1vZGlmaWVyOiBNb2RpZmllcjxUPiwgcHJlZGljYXRlOiBQcmVkaWNhdGU8VD4pOiBETm9kZTtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZTxUIGV4dGVuZHMgRE5vZGU+KGROb2RlczogRE5vZGVbXSwgbW9kaWZpZXI6IE1vZGlmaWVyPFQ+LCBwcmVkaWNhdGU6IFByZWRpY2F0ZTxUPik6IEROb2RlW107XG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGU8VCBleHRlbmRzIEROb2RlPihcblx0ZE5vZGVzOiBSZW5kZXJSZXN1bHQsXG5cdG1vZGlmaWVyOiBNb2RpZmllcjxUPixcblx0cHJlZGljYXRlOiBQcmVkaWNhdGU8VD5cbik6IFJlbmRlclJlc3VsdDtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZShkTm9kZXM6IEROb2RlLCBtb2RpZmllcjogTW9kaWZpZXI8RE5vZGU+KTogRE5vZGU7XG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGUoZE5vZGVzOiBETm9kZVtdLCBtb2RpZmllcjogTW9kaWZpZXI8RE5vZGU+KTogRE5vZGVbXTtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZShkTm9kZXM6IFJlbmRlclJlc3VsdCwgbW9kaWZpZXI6IE1vZGlmaWVyPEROb2RlPik6IFJlbmRlclJlc3VsdDtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZShcblx0ZE5vZGVzOiBETm9kZSB8IEROb2RlW10sXG5cdG9wdGlvbnNPck1vZGlmaWVyOiBNb2RpZmllcjxETm9kZT4gfCBEZWNvcmF0ZU9wdGlvbnM8RE5vZGU+LFxuXHRwcmVkaWNhdGU/OiBQcmVkaWNhdGU8RE5vZGU+XG4pOiBETm9kZSB8IEROb2RlW10ge1xuXHRsZXQgc2hhbGxvdyA9IGZhbHNlO1xuXHRsZXQgbW9kaWZpZXI7XG5cdGlmICh0eXBlb2Ygb3B0aW9uc09yTW9kaWZpZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRtb2RpZmllciA9IG9wdGlvbnNPck1vZGlmaWVyO1xuXHR9IGVsc2Uge1xuXHRcdG1vZGlmaWVyID0gb3B0aW9uc09yTW9kaWZpZXIubW9kaWZpZXI7XG5cdFx0cHJlZGljYXRlID0gb3B0aW9uc09yTW9kaWZpZXIucHJlZGljYXRlO1xuXHRcdHNoYWxsb3cgPSBvcHRpb25zT3JNb2RpZmllci5zaGFsbG93IHx8IGZhbHNlO1xuXHR9XG5cblx0bGV0IG5vZGVzID0gQXJyYXkuaXNBcnJheShkTm9kZXMpID8gWy4uLmROb2Rlc10gOiBbZE5vZGVzXTtcblx0ZnVuY3Rpb24gYnJlYWtlcigpIHtcblx0XHRub2RlcyA9IFtdO1xuXHR9XG5cdHdoaWxlIChub2Rlcy5sZW5ndGgpIHtcblx0XHRjb25zdCBub2RlID0gbm9kZXMuc2hpZnQoKTtcblx0XHRpZiAobm9kZSkge1xuXHRcdFx0aWYgKCFzaGFsbG93ICYmIChpc1dOb2RlKG5vZGUpIHx8IGlzVk5vZGUobm9kZSkpICYmIG5vZGUuY2hpbGRyZW4pIHtcblx0XHRcdFx0bm9kZXMgPSBbLi4ubm9kZXMsIC4uLm5vZGUuY2hpbGRyZW5dO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKG5vZGUpKSB7XG5cdFx0XHRcdG1vZGlmaWVyKG5vZGUsIGJyZWFrZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZE5vZGVzO1xufVxuXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIGNhbGxzIHRvIGNyZWF0ZSBhIHdpZGdldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHc8VyBleHRlbmRzIFdpZGdldEJhc2VJbnRlcmZhY2U+KFxuXHR3aWRnZXRDb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8Vz4gfCBSZWdpc3RyeUxhYmVsLFxuXHRwcm9wZXJ0aWVzOiBXWydwcm9wZXJ0aWVzJ10sXG5cdGNoaWxkcmVuOiBXWydjaGlsZHJlbiddID0gW11cbik6IFdOb2RlPFc+IHtcblx0cmV0dXJuIHtcblx0XHRjaGlsZHJlbixcblx0XHR3aWRnZXRDb25zdHJ1Y3Rvcixcblx0XHRwcm9wZXJ0aWVzLFxuXHRcdHR5cGU6IFdOT0RFXG5cdH07XG59XG5cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgY2FsbHMgdG8gY3JlYXRlIFZOb2Rlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHYodGFnOiBzdHJpbmcsIGNoaWxkcmVuOiB1bmRlZmluZWQgfCBETm9kZVtdKTogVk5vZGU7XG5leHBvcnQgZnVuY3Rpb24gdih0YWc6IHN0cmluZywgcHJvcGVydGllczogRGVmZXJyZWRWaXJ0dWFsUHJvcGVydGllcyB8IFZOb2RlUHJvcGVydGllcywgY2hpbGRyZW4/OiBETm9kZVtdKTogVk5vZGU7XG5leHBvcnQgZnVuY3Rpb24gdih0YWc6IHN0cmluZyk6IFZOb2RlO1xuZXhwb3J0IGZ1bmN0aW9uIHYoXG5cdHRhZzogc3RyaW5nLFxuXHRwcm9wZXJ0aWVzT3JDaGlsZHJlbjogVk5vZGVQcm9wZXJ0aWVzIHwgRGVmZXJyZWRWaXJ0dWFsUHJvcGVydGllcyB8IEROb2RlW10gPSB7fSxcblx0Y2hpbGRyZW46IHVuZGVmaW5lZCB8IEROb2RlW10gPSB1bmRlZmluZWRcbik6IFZOb2RlIHtcblx0bGV0IHByb3BlcnRpZXM6IFZOb2RlUHJvcGVydGllcyB8IERlZmVycmVkVmlydHVhbFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzT3JDaGlsZHJlbjtcblx0bGV0IGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrO1xuXG5cdGlmIChBcnJheS5pc0FycmF5KHByb3BlcnRpZXNPckNoaWxkcmVuKSkge1xuXHRcdGNoaWxkcmVuID0gcHJvcGVydGllc09yQ2hpbGRyZW47XG5cdFx0cHJvcGVydGllcyA9IHt9O1xuXHR9XG5cblx0aWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0ZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2sgPSBwcm9wZXJ0aWVzO1xuXHRcdHByb3BlcnRpZXMgPSB7fTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dGFnLFxuXHRcdGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrLFxuXHRcdGNoaWxkcmVuLFxuXHRcdHByb3BlcnRpZXMsXG5cdFx0dHlwZTogVk5PREVcblx0fTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBWTm9kZSBmb3IgYW4gZXhpc3RpbmcgRE9NIE5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb20oXG5cdHsgbm9kZSwgYXR0cnMgPSB7fSwgcHJvcHMgPSB7fSwgb24gPSB7fSwgZGlmZlR5cGUgPSAnbm9uZScgfTogRG9tT3B0aW9ucyxcblx0Y2hpbGRyZW4/OiBETm9kZVtdXG4pOiBWTm9kZSB7XG5cdHJldHVybiB7XG5cdFx0dGFnOiBpc0VsZW1lbnROb2RlKG5vZGUpID8gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgOiAnJyxcblx0XHRwcm9wZXJ0aWVzOiBwcm9wcyxcblx0XHRhdHRyaWJ1dGVzOiBhdHRycyxcblx0XHRldmVudHM6IG9uLFxuXHRcdGNoaWxkcmVuLFxuXHRcdHR5cGU6IERPTVZOT0RFLFxuXHRcdGRvbU5vZGU6IG5vZGUsXG5cdFx0dGV4dDogaXNFbGVtZW50Tm9kZShub2RlKSA/IHVuZGVmaW5lZCA6IG5vZGUuZGF0YSxcblx0XHRkaWZmVHlwZVxuXHR9IGFzIEludGVybmFsVk5vZGU7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gZC50cyIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcblxuLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZWdpc3RlciBhIGZ1bmN0aW9uIHRvIHJ1biBhcyBhbiBhc3BlY3QgdG8gYHJlbmRlcmBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyUmVuZGVyKG1ldGhvZDogRnVuY3Rpb24pOiAodGFyZ2V0OiBhbnkpID0+IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXJSZW5kZXIoKTogKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyUmVuZGVyKG1ldGhvZD86IEZ1bmN0aW9uKSB7XG5cdHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcblx0XHR0YXJnZXQuYWRkRGVjb3JhdG9yKCdhZnRlclJlbmRlcicsIHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IG1ldGhvZCk7XG5cdH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhZnRlclJlbmRlcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBhZnRlclJlbmRlci50cyIsImltcG9ydCB7IFdpZGdldEJhc2UgfSBmcm9tICcuLy4uL1dpZGdldEJhc2UnO1xuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuaW1wb3J0IHsgYmVmb3JlUHJvcGVydGllcyB9IGZyb20gJy4vYmVmb3JlUHJvcGVydGllcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHdheXNSZW5kZXIoKSB7XG5cdHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcblx0XHRiZWZvcmVQcm9wZXJ0aWVzKGZ1bmN0aW9uKHRoaXM6IFdpZGdldEJhc2UpIHtcblx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xuXHRcdH0pKHRhcmdldCk7XG5cdH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhbHdheXNSZW5kZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gYWx3YXlzUmVuZGVyLnRzIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuaW1wb3J0IHsgQmVmb3JlUHJvcGVydGllcyB9IGZyb20gJy4vLi4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogRGVjb3JhdG9yIHRoYXQgYWRkcyB0aGUgZnVuY3Rpb24gcGFzc2VkIG9mIHRhcmdldCBtZXRob2QgdG8gYmUgcnVuXG4gKiBpbiB0aGUgYGJlZm9yZVByb3BlcnRpZXNgIGxpZmVjeWNsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZVByb3BlcnRpZXMobWV0aG9kOiBCZWZvcmVQcm9wZXJ0aWVzKTogKHRhcmdldDogYW55KSA9PiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZVByb3BlcnRpZXMoKTogKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZVByb3BlcnRpZXMobWV0aG9kPzogQmVmb3JlUHJvcGVydGllcykge1xuXHRyZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG5cdFx0dGFyZ2V0LmFkZERlY29yYXRvcignYmVmb3JlUHJvcGVydGllcycsIHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IG1ldGhvZCk7XG5cdH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiZWZvcmVQcm9wZXJ0aWVzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGJlZm9yZVByb3BlcnRpZXMudHMiLCJpbXBvcnQgeyBDb25zdHJ1Y3RvciwgV2lkZ2V0UHJvcGVydGllcyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudENoaWxkVHlwZSB9IGZyb20gJy4uL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCc7XG5pbXBvcnQgUmVnaXN0cnkgZnJvbSAnLi4vUmVnaXN0cnknO1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50UHJvcGVydHlOYW1lczxQIGV4dGVuZHMgb2JqZWN0PiA9ICgoa2V5b2YgUCkgfCAoa2V5b2YgV2lkZ2V0UHJvcGVydGllcykpW107XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgY3VzdG9tIGVsZW1lbnQgY29uZmlndXJhdGlvbiB1c2VkIGJ5IHRoZSBjdXN0b21FbGVtZW50IGRlY29yYXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUVsZW1lbnRDb25maWc8UCBleHRlbmRzIG9iamVjdCA9IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfT4ge1xuXHQvKipcblx0ICogVGhlIHRhZyBvZiB0aGUgY3VzdG9tIGVsZW1lbnRcblx0ICovXG5cdHRhZzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBMaXN0IG9mIHdpZGdldCBwcm9wZXJ0aWVzIHRvIGV4cG9zZSBhcyBwcm9wZXJ0aWVzIG9uIHRoZSBjdXN0b20gZWxlbWVudFxuXHQgKi9cblx0cHJvcGVydGllcz86IEN1c3RvbUVsZW1lbnRQcm9wZXJ0eU5hbWVzPFA+O1xuXG5cdC8qKlxuXHQgKiBMaXN0IG9mIGF0dHJpYnV0ZXMgb24gdGhlIGN1c3RvbSBlbGVtZW50IHRvIG1hcCB0byB3aWRnZXQgcHJvcGVydGllc1xuXHQgKi9cblx0YXR0cmlidXRlcz86IEN1c3RvbUVsZW1lbnRQcm9wZXJ0eU5hbWVzPFA+O1xuXG5cdC8qKlxuXHQgKiBMaXN0IG9mIGV2ZW50cyB0byBleHBvc2Vcblx0ICovXG5cdGV2ZW50cz86IEN1c3RvbUVsZW1lbnRQcm9wZXJ0eU5hbWVzPFA+O1xuXG5cdGNoaWxkVHlwZT86IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGU7XG5cblx0cmVnaXN0cnlGYWN0b3J5PzogKCkgPT4gUmVnaXN0cnk7XG59XG5cbi8qKlxuICogVGhpcyBEZWNvcmF0b3IgaXMgcHJvdmlkZWQgcHJvcGVydGllcyB0aGF0IGRlZmluZSB0aGUgYmVoYXZpb3Igb2YgYSBjdXN0b20gZWxlbWVudCwgYW5kXG4gKiByZWdpc3RlcnMgdGhhdCBjdXN0b20gZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfT4oe1xuXHR0YWcsXG5cdHByb3BlcnRpZXMgPSBbXSxcblx0YXR0cmlidXRlcyA9IFtdLFxuXHRldmVudHMgPSBbXSxcblx0Y2hpbGRUeXBlID0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPLFxuXHRyZWdpc3RyeUZhY3RvcnkgPSAoKSA9PiBuZXcgUmVnaXN0cnkoKVxufTogQ3VzdG9tRWxlbWVudENvbmZpZzxQPikge1xuXHRyZXR1cm4gZnVuY3Rpb248VCBleHRlbmRzIENvbnN0cnVjdG9yPGFueT4+KHRhcmdldDogVCkge1xuXHRcdHRhcmdldC5wcm90b3R5cGUuX19jdXN0b21FbGVtZW50RGVzY3JpcHRvciA9IHtcblx0XHRcdHRhZ05hbWU6IHRhZyxcblx0XHRcdGF0dHJpYnV0ZXMsXG5cdFx0XHRwcm9wZXJ0aWVzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0Y2hpbGRUeXBlLFxuXHRcdFx0cmVnaXN0cnlGYWN0b3J5XG5cdFx0fTtcblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3VzdG9tRWxlbWVudDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBjdXN0b21FbGVtZW50LnRzIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuaW1wb3J0IHsgRGlmZlByb3BlcnR5RnVuY3Rpb24gfSBmcm9tICcuLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYXV0byB9IGZyb20gJy4vLi4vZGlmZic7XG5cbi8qKlxuICogRGVjb3JhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgYSBmdW5jdGlvbiBhcyBhIHNwZWNpZmljIHByb3BlcnR5IGRpZmZcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lICBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgb2Ygd2hpY2ggdGhlIGRpZmYgZnVuY3Rpb24gaXMgYXBwbGllZFxuICogQHBhcmFtIGRpZmZUeXBlICAgICAgVGhlIGRpZmYgdHlwZSwgZGVmYXVsdCBpcyBEaWZmVHlwZS5BVVRPLlxuICogQHBhcmFtIGRpZmZGdW5jdGlvbiAgQSBkaWZmIGZ1bmN0aW9uIHRvIHJ1biBpZiBkaWZmVHlwZSBpZiBEaWZmVHlwZS5DVVNUT01cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZQcm9wZXJ0eShcblx0cHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdGRpZmZGdW5jdGlvbjogRGlmZlByb3BlcnR5RnVuY3Rpb24gPSBhdXRvLFxuXHRyZWFjdGlvbkZ1bmN0aW9uPzogRnVuY3Rpb25cbikge1xuXHRyZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG5cdFx0dGFyZ2V0LmFkZERlY29yYXRvcihgZGlmZlByb3BlcnR5OiR7cHJvcGVydHlOYW1lfWAsIGRpZmZGdW5jdGlvbi5iaW5kKG51bGwpKTtcblx0XHR0YXJnZXQuYWRkRGVjb3JhdG9yKCdyZWdpc3RlcmVkRGlmZlByb3BlcnR5JywgcHJvcGVydHlOYW1lKTtcblx0XHRpZiAocmVhY3Rpb25GdW5jdGlvbiB8fCBwcm9wZXJ0eUtleSkge1xuXHRcdFx0dGFyZ2V0LmFkZERlY29yYXRvcignZGlmZlJlYWN0aW9uJywge1xuXHRcdFx0XHRwcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdHJlYWN0aW9uOiBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiByZWFjdGlvbkZ1bmN0aW9uXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkaWZmUHJvcGVydHk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gZGlmZlByb3BlcnR5LnRzIiwiZXhwb3J0IHR5cGUgRGVjb3JhdG9ySGFuZGxlciA9ICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8qKlxuICogR2VuZXJpYyBkZWNvcmF0b3IgaGFuZGxlciB0byB0YWtlIGNhcmUgb2Ygd2hldGhlciBvciBub3QgdGhlIGRlY29yYXRvciB3YXMgY2FsbGVkIGF0IHRoZSBjbGFzcyBsZXZlbFxuICogb3IgdGhlIG1ldGhvZCBsZXZlbC5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdG9yKGhhbmRsZXI6IERlY29yYXRvckhhbmRsZXIpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleT86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikge1xuXHRcdGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRoYW5kbGVyKHRhcmdldC5wcm90b3R5cGUsIHVuZGVmaW5lZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhhbmRsZXIodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVEZWNvcmF0b3I7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gaGFuZGxlRGVjb3JhdG9yLnRzIiwiaW1wb3J0IFdlYWtNYXAgZnJvbSAnLi4vLi4vc2hpbS9XZWFrTWFwJztcbmltcG9ydCB7IFdpZGdldEJhc2UgfSBmcm9tICcuLy4uL1dpZGdldEJhc2UnO1xuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuaW1wb3J0IHsgYmVmb3JlUHJvcGVydGllcyB9IGZyb20gJy4vYmVmb3JlUHJvcGVydGllcyc7XG5pbXBvcnQgeyBJbmplY3Rvckl0ZW0sIFJlZ2lzdHJ5TGFiZWwgfSBmcm9tICcuLy4uL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqIE1hcCBvZiBpbnN0YW5jZXMgYWdhaW5zdCByZWdpc3RlcmVkIGluamVjdG9ycy5cbiAqL1xuY29uc3QgcmVnaXN0ZXJlZEluamVjdG9yc01hcDogV2Vha01hcDxXaWRnZXRCYXNlLCBJbmplY3Rvckl0ZW1bXT4gPSBuZXcgV2Vha01hcCgpO1xuXG4vKipcbiAqIERlZmluZXMgdGhlIGNvbnRyYWN0IHJlcXVpcmVzIGZvciB0aGUgZ2V0IHByb3BlcnRpZXMgZnVuY3Rpb25cbiAqIHVzZWQgdG8gbWFwIHRoZSBpbmplY3RlZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldFByb3BlcnRpZXM8VCA9IGFueT4ge1xuXHQocGF5bG9hZDogYW55LCBwcm9wZXJ0aWVzOiBUKTogVDtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBpbmplY3QgY29uZmlndXJhdGlvbiByZXF1aXJlZCBmb3IgdXNlIG9mIHRoZSBgaW5qZWN0YCBkZWNvcmF0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmplY3RDb25maWcge1xuXHQvKipcblx0ICogVGhlIGxhYmVsIG9mIHRoZSByZWdpc3RyeSBpbmplY3RvclxuXHQgKi9cblx0bmFtZTogUmVnaXN0cnlMYWJlbDtcblxuXHQvKipcblx0ICogRnVuY3Rpb24gdGhhdCByZXR1cm5zIHByb3BlcnR1ZXMgdG8gaW5qZWN0IHVzaW5nIHRoZSBwYXNzZWQgcHJvcGVydGllc1xuXHQgKiBhbmQgdGhlIGluamVjdGVkIHBheWxvYWQuXG5cdCAqL1xuXHRnZXRQcm9wZXJ0aWVzOiBHZXRQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIERlY29yYXRvciByZXRyaWV2ZXMgYW4gaW5qZWN0b3IgZnJvbSBhbiBhdmFpbGFibGUgcmVnaXN0cnkgdXNpbmcgdGhlIG5hbWUgYW5kXG4gKiBjYWxscyB0aGUgYGdldFByb3BlcnRpZXNgIGZ1bmN0aW9uIHdpdGggdGhlIHBheWxvYWQgZnJvbSB0aGUgaW5qZWN0b3JcbiAqIGFuZCBjdXJyZW50IHByb3BlcnRpZXMgd2l0aCB0aGUgdGhlIGluamVjdGVkIHByb3BlcnRpZXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIEluamVjdENvbmZpZyB0aGUgaW5qZWN0IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdCh7IG5hbWUsIGdldFByb3BlcnRpZXMgfTogSW5qZWN0Q29uZmlnKSB7XG5cdHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcblx0XHRiZWZvcmVQcm9wZXJ0aWVzKGZ1bmN0aW9uKHRoaXM6IFdpZGdldEJhc2UgJiB7IG93bjogRnVuY3Rpb24gfSwgcHJvcGVydGllczogYW55KSB7XG5cdFx0XHRjb25zdCBpbmplY3Rvckl0ZW0gPSB0aGlzLnJlZ2lzdHJ5LmdldEluamVjdG9yKG5hbWUpO1xuXHRcdFx0aWYgKGluamVjdG9ySXRlbSkge1xuXHRcdFx0XHRjb25zdCB7IGluamVjdG9yLCBpbnZhbGlkYXRvciB9ID0gaW5qZWN0b3JJdGVtO1xuXHRcdFx0XHRjb25zdCByZWdpc3RlcmVkSW5qZWN0b3JzID0gcmVnaXN0ZXJlZEluamVjdG9yc01hcC5nZXQodGhpcykgfHwgW107XG5cdFx0XHRcdGlmIChyZWdpc3RlcmVkSW5qZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAuc2V0KHRoaXMsIHJlZ2lzdGVyZWRJbmplY3RvcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWdpc3RlcmVkSW5qZWN0b3JzLmluZGV4T2YoaW5qZWN0b3JJdGVtKSA9PT0gLTEpIHtcblx0XHRcdFx0XHR0aGlzLm93bihcblx0XHRcdFx0XHRcdGludmFsaWRhdG9yLm9uKCdpbnZhbGlkYXRlJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmludmFsaWRhdGUoKTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZWdpc3RlcmVkSW5qZWN0b3JzLnB1c2goaW5qZWN0b3JJdGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZ2V0UHJvcGVydGllcyhpbmplY3RvcigpLCBwcm9wZXJ0aWVzKTtcblx0XHRcdH1cblx0XHR9KSh0YXJnZXQpO1xuXHR9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5qZWN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGluamVjdC50cyIsImltcG9ydCB7IFByb3BlcnR5Q2hhbmdlUmVjb3JkIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFdJREdFVF9CQVNFX1RZUEUgfSBmcm9tICcuL1JlZ2lzdHJ5JztcblxuZnVuY3Rpb24gaXNPYmplY3RPckFycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWx3YXlzKHByZXZpb3VzUHJvcGVydHk6IGFueSwgbmV3UHJvcGVydHk6IGFueSk6IFByb3BlcnR5Q2hhbmdlUmVjb3JkIHtcblx0cmV0dXJuIHtcblx0XHRjaGFuZ2VkOiB0cnVlLFxuXHRcdHZhbHVlOiBuZXdQcm9wZXJ0eVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlKHByZXZpb3VzUHJvcGVydHk6IGFueSwgbmV3UHJvcGVydHk6IGFueSk6IFByb3BlcnR5Q2hhbmdlUmVjb3JkIHtcblx0cmV0dXJuIHtcblx0XHRjaGFuZ2VkOiBmYWxzZSxcblx0XHR2YWx1ZTogbmV3UHJvcGVydHlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5OiBhbnksIG5ld1Byb3BlcnR5OiBhbnkpOiBQcm9wZXJ0eUNoYW5nZVJlY29yZCB7XG5cdHJldHVybiB7XG5cdFx0Y2hhbmdlZDogcHJldmlvdXNQcm9wZXJ0eSAhPT0gbmV3UHJvcGVydHksXG5cdFx0dmFsdWU6IG5ld1Byb3BlcnR5XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93KHByZXZpb3VzUHJvcGVydHk6IGFueSwgbmV3UHJvcGVydHk6IGFueSk6IFByb3BlcnR5Q2hhbmdlUmVjb3JkIHtcblx0bGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuXHRjb25zdCB2YWxpZE9sZFByb3BlcnR5ID0gcHJldmlvdXNQcm9wZXJ0eSAmJiBpc09iamVjdE9yQXJyYXkocHJldmlvdXNQcm9wZXJ0eSk7XG5cdGNvbnN0IHZhbGlkTmV3UHJvcGVydHkgPSBuZXdQcm9wZXJ0eSAmJiBpc09iamVjdE9yQXJyYXkobmV3UHJvcGVydHkpO1xuXG5cdGlmICghdmFsaWRPbGRQcm9wZXJ0eSB8fCAhdmFsaWROZXdQcm9wZXJ0eSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjaGFuZ2VkOiB0cnVlLFxuXHRcdFx0dmFsdWU6IG5ld1Byb3BlcnR5XG5cdFx0fTtcblx0fVxuXG5cdGNvbnN0IHByZXZpb3VzS2V5cyA9IE9iamVjdC5rZXlzKHByZXZpb3VzUHJvcGVydHkpO1xuXHRjb25zdCBuZXdLZXlzID0gT2JqZWN0LmtleXMobmV3UHJvcGVydHkpO1xuXG5cdGlmIChwcmV2aW91c0tleXMubGVuZ3RoICE9PSBuZXdLZXlzLmxlbmd0aCkge1xuXHRcdGNoYW5nZWQgPSB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdGNoYW5nZWQgPSBuZXdLZXlzLnNvbWUoKGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ld1Byb3BlcnR5W2tleV0gIT09IHByZXZpb3VzUHJvcGVydHlba2V5XTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGNoYW5nZWQsXG5cdFx0dmFsdWU6IG5ld1Byb3BlcnR5XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdXRvKHByZXZpb3VzUHJvcGVydHk6IGFueSwgbmV3UHJvcGVydHk6IGFueSk6IFByb3BlcnR5Q2hhbmdlUmVjb3JkIHtcblx0bGV0IHJlc3VsdDtcblx0aWYgKHR5cGVvZiBuZXdQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdGlmIChuZXdQcm9wZXJ0eS5fdHlwZSA9PT0gV0lER0VUX0JBU0VfVFlQRSkge1xuXHRcdFx0cmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0ID0gaWdub3JlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNPYmplY3RPckFycmF5KG5ld1Byb3BlcnR5KSkge1xuXHRcdHJlc3VsdCA9IHNoYWxsb3cocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuXHR9IGVsc2Uge1xuXHRcdHJlc3VsdCA9IHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBkaWZmLnRzIiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnLi4vLi4vY29yZS9sYW5nJztcbmltcG9ydCB7IEhhbmRsZSB9IGZyb20gJy4uLy4uL2NvcmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQgY3NzVHJhbnNpdGlvbnMgZnJvbSAnLi4vYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgRE5vZGUsIFByb2plY3Rpb24sIFByb2plY3Rpb25PcHRpb25zIH0gZnJvbSAnLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFdpZGdldEJhc2UgfSBmcm9tICcuLy4uL1dpZGdldEJhc2UnO1xuaW1wb3J0IHsgYWZ0ZXJSZW5kZXIgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXInO1xuaW1wb3J0IHsgdiB9IGZyb20gJy4vLi4vZCc7XG5pbXBvcnQgeyBSZWdpc3RyeSB9IGZyb20gJy4vLi4vUmVnaXN0cnknO1xuaW1wb3J0IHsgZG9tIH0gZnJvbSAnLi8uLi92ZG9tJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBhdHRhY2ggc3RhdGUgb2YgdGhlIHByb2plY3RvclxuICovXG5leHBvcnQgZW51bSBQcm9qZWN0b3JBdHRhY2hTdGF0ZSB7XG5cdEF0dGFjaGVkID0gMSxcblx0RGV0YWNoZWRcbn1cblxuLyoqXG4gKiBBdHRhY2ggdHlwZSBmb3IgdGhlIHByb2plY3RvclxuICovXG5leHBvcnQgZW51bSBBdHRhY2hUeXBlIHtcblx0QXBwZW5kID0gMSxcblx0TWVyZ2UgPSAyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBJZiBgJ2FwcGVuZCdgIGl0IHdpbGwgYXBwZW5kZWQgdG8gdGhlIHJvb3QuIElmIGAnbWVyZ2UnYCBpdCB3aWxsIG1lcmdlZCB3aXRoIHRoZSByb290LiBJZiBgJ3JlcGxhY2UnYCBpdCB3aWxsXG5cdCAqIHJlcGxhY2UgdGhlIHJvb3QuXG5cdCAqL1xuXHR0eXBlOiBBdHRhY2hUeXBlO1xuXG5cdC8qKlxuXHQgKiBFbGVtZW50IHRvIGF0dGFjaCB0aGUgcHJvamVjdG9yLlxuXHQgKi9cblx0cm9vdD86IEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdG9yUHJvcGVydGllcyB7XG5cdHJlZ2lzdHJ5PzogUmVnaXN0cnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdG9yTWl4aW48UD4ge1xuXHRyZWFkb25seSBwcm9wZXJ0aWVzOiBSZWFkb25seTxQPiAmIFJlYWRvbmx5PFByb2plY3RvclByb3BlcnRpZXM+O1xuXG5cdC8qKlxuXHQgKiBBcHBlbmQgdGhlIHByb2plY3RvciB0byB0aGUgcm9vdC5cblx0ICovXG5cdGFwcGVuZChyb290PzogRWxlbWVudCk6IEhhbmRsZTtcblxuXHQvKipcblx0ICogTWVyZ2UgdGhlIHByb2plY3RvciBvbnRvIHRoZSByb290LlxuXHQgKlxuXHQgKiBUaGUgYHJvb3RgIGFuZCBhbnkgb2YgaXRzIGBjaGlsZHJlbmAgd2lsbCBiZSByZS11c2VkLiAgQW55IGV4Y2VzcyBET00gbm9kZXMgd2lsbCBiZSBpZ25vcmVkIGFuZCBhbnkgbWlzc2luZyBET00gbm9kZXNcblx0ICogd2lsbCBiZSBjcmVhdGVkLlxuXHQgKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCBlbGVtZW50IHRoYXQgdGhlIHJvb3QgdmlydHVhbCBET00gbm9kZSB3aWxsIGJlIG1lcmdlZCB3aXRoLiAgRGVmYXVsdHMgdG8gYGRvY3VtZW50LmJvZHlgLlxuXHQgKi9cblx0bWVyZ2Uocm9vdD86IEVsZW1lbnQpOiBIYW5kbGU7XG5cblx0LyoqXG5cdCAqIEF0dGFjaCB0aGUgcHJvamVjdCB0byBhIF9zYW5kYm94ZWRfIGRvY3VtZW50IGZyYWdtZW50IHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIERPTS5cblx0ICpcblx0ICogV2hlbiBzYW5kYm94ZWQsIHRoZSBgUHJvamVjdG9yYCB3aWxsIHJ1biBpbiBhIHN5bmMgbWFubmVyLCB3aGVyZSByZW5kZXJzIGFyZSBjb21wbGV0ZWQgd2l0aGluIHRoZSBzYW1lIHR1cm4uXG5cdCAqIFRoZSBgUHJvamVjdG9yYCBjcmVhdGVzIGEgYERvY3VtZW50RnJhZ21lbnRgIHdoaWNoIHJlcGxhY2VzIGFueSBvdGhlciBgcm9vdGAgdGhhdCBoYXMgYmVlbiBzZXQuXG5cdCAqIEBwYXJhbSBkb2MgVGhlIGBEb2N1bWVudGAgdG8gdXNlLCB3aGljaCBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsIGBkb2N1bWVudGAuXG5cdCAqL1xuXHRzYW5kYm94KGRvYz86IERvY3VtZW50KTogdm9pZDtcblxuXHQvKipcblx0ICogU2V0cyB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHdpZGdldC4gUmVzcG9uc2libGUgZm9yIGNhbGxpbmcgdGhlIGRpZmZpbmcgZnVuY3Rpb25zIGZvciB0aGUgcHJvcGVydGllcyBhZ2FpbnN0IHRoZVxuXHQgKiBwcmV2aW91cyBwcm9wZXJ0aWVzLiBSdW5zIHRob3VnaCBhbnkgcmVnaXN0ZXJlZCBzcGVjaWZpYyBwcm9wZXJ0eSBkaWZmIGZ1bmN0aW9ucyBjb2xsZWN0aW5nIHRoZSByZXN1bHRzIGFuZCB0aGVuXG5cdCAqIHJ1bnMgdGhlIHJlbWFpbmRlciB0aHJvdWdoIHRoZSBjYXRjaCBhbGwgZGlmZiBmdW5jdGlvbi4gVGhlIGFnZ3JlZ2F0ZSBvZiB0aGUgdHdvIHNldHMgb2YgdGhlIHJlc3VsdHMgaXMgdGhlblxuXHQgKiBzZXQgYXMgdGhlIHdpZGdldCdzIHByb3BlcnRpZXNcblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnRpZXMgVGhlIG5ldyB3aWRnZXQgcHJvcGVydGllc1xuXHQgKi9cblx0c2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzOiB0aGlzWydwcm9wZXJ0aWVzJ10pOiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB3aWRnZXQncyBjaGlsZHJlblxuXHQgKi9cblx0c2V0Q2hpbGRyZW4oY2hpbGRyZW46IEROb2RlW10pOiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm4gYSBgc3RyaW5nYCB0aGF0IHJlcHJlc2VudHMgdGhlIEhUTUwgb2YgdGhlIGN1cnJlbnQgcHJvamVjdGlvbi4gIFRoZSBwcm9qZWN0b3IgbmVlZHMgdG8gYmUgYXR0YWNoZWQuXG5cdCAqL1xuXHR0b0h0bWwoKTogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgaWYgdGhlIHByb2plY3RvcnMgaXMgaW4gYXN5bmMgbW9kZSwgY29uZmlndXJlZCB0byBgdHJ1ZWAgYnkgZGVmYXVsdHMuXG5cdCAqL1xuXHRhc3luYzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUm9vdCBlbGVtZW50IHRvIGF0dGFjaCB0aGUgcHJvamVjdG9yXG5cdCAqL1xuXHRyb290OiBFbGVtZW50O1xuXG5cdC8qKlxuXHQgKiBUaGUgc3RhdHVzIG9mIHRoZSBwcm9qZWN0b3Jcblx0ICovXG5cdHJlYWRvbmx5IHByb2plY3RvclN0YXRlOiBQcm9qZWN0b3JBdHRhY2hTdGF0ZTtcblxuXHQvKipcblx0ICogUnVucyByZWdpc3RlcmVkIGRlc3Ryb3kgaGFuZGxlc1xuXHQgKi9cblx0ZGVzdHJveSgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdG9yTWl4aW48UCwgVCBleHRlbmRzIENvbnN0cnVjdG9yPFdpZGdldEJhc2U8UD4+PihCYXNlOiBUKTogVCAmIENvbnN0cnVjdG9yPFByb2plY3Rvck1peGluPFA+PiB7XG5cdGFic3RyYWN0IGNsYXNzIFByb2plY3RvciBleHRlbmRzIEJhc2Uge1xuXHRcdHB1YmxpYyBwcm9qZWN0b3JTdGF0ZTogUHJvamVjdG9yQXR0YWNoU3RhdGU7XG5cblx0XHRwcml2YXRlIF9yb290OiBFbGVtZW50ID0gZG9jdW1lbnQuYm9keTtcblx0XHRwcml2YXRlIF9hc3luYyA9IHRydWU7XG5cdFx0cHJpdmF0ZSBfYXR0YWNoSGFuZGxlOiBIYW5kbGUgfCB1bmRlZmluZWQ7XG5cdFx0cHJpdmF0ZSBfcHJvamVjdGlvbk9wdGlvbnM6IFBhcnRpYWw8UHJvamVjdGlvbk9wdGlvbnM+O1xuXHRcdHByaXZhdGUgX3Byb2plY3Rpb246IFByb2plY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0cHJpdmF0ZSBfcHJvamVjdG9yUHJvcGVydGllczogdGhpc1sncHJvcGVydGllcyddID0ge30gYXMgdGhpc1sncHJvcGVydGllcyddO1xuXHRcdHB1YmxpYyBhYnN0cmFjdCBwcm9wZXJ0aWVzOiBSZWFkb25seTxQPiAmIFJlYWRvbmx5PFByb2plY3RvclByb3BlcnRpZXM+O1xuXG5cdFx0Y29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcblx0XHRcdHN1cGVyKC4uLmFyZ3MpO1xuXG5cdFx0XHR0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyA9IHtcblx0XHRcdFx0dHJhbnNpdGlvbnM6IGNzc1RyYW5zaXRpb25zXG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLnJvb3QgPSBkb2N1bWVudC5ib2R5O1xuXHRcdFx0dGhpcy5wcm9qZWN0b3JTdGF0ZSA9IFByb2plY3RvckF0dGFjaFN0YXRlLkRldGFjaGVkO1xuXHRcdH1cblxuXHRcdHB1YmxpYyBhcHBlbmQocm9vdD86IEVsZW1lbnQpOiBIYW5kbGUge1xuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHtcblx0XHRcdFx0dHlwZTogQXR0YWNoVHlwZS5BcHBlbmQsXG5cdFx0XHRcdHJvb3Rcblx0XHRcdH07XG5cblx0XHRcdHJldHVybiB0aGlzLl9hdHRhY2gob3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0cHVibGljIG1lcmdlKHJvb3Q/OiBFbGVtZW50KTogSGFuZGxlIHtcblx0XHRcdGNvbnN0IG9wdGlvbnMgPSB7XG5cdFx0XHRcdHR5cGU6IEF0dGFjaFR5cGUuTWVyZ2UsXG5cdFx0XHRcdHJvb3Rcblx0XHRcdH07XG5cblx0XHRcdHJldHVybiB0aGlzLl9hdHRhY2gob3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0cHVibGljIHNldCByb290KHJvb3Q6IEVsZW1lbnQpIHtcblx0XHRcdGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBhbHJlYWR5IGF0dGFjaGVkLCBjYW5ub3QgY2hhbmdlIHJvb3QgZWxlbWVudCcpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fcm9vdCA9IHJvb3Q7XG5cdFx0fVxuXG5cdFx0cHVibGljIGdldCByb290KCk6IEVsZW1lbnQge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3Jvb3Q7XG5cdFx0fVxuXG5cdFx0cHVibGljIGdldCBhc3luYygpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiB0aGlzLl9hc3luYztcblx0XHR9XG5cblx0XHRwdWJsaWMgc2V0IGFzeW5jKGFzeW5jOiBib29sZWFuKSB7XG5cdFx0XHRpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNoYW5nZSBhc3luYyBtb2RlJyk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9hc3luYyA9IGFzeW5jO1xuXHRcdH1cblxuXHRcdHB1YmxpYyBzYW5kYm94KGRvYzogRG9jdW1lbnQgPSBkb2N1bWVudCk6IHZvaWQge1xuXHRcdFx0aWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjcmVhdGUgc2FuZGJveCcpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fYXN5bmMgPSBmYWxzZTtcblx0XHRcdGNvbnN0IHByZXZpb3VzUm9vdCA9IHRoaXMucm9vdDtcblxuXHRcdFx0LyogZnJlZSB1cCB0aGUgZG9jdW1lbnQgZnJhZ21lbnQgZm9yIEdDICovXG5cdFx0XHR0aGlzLm93bih7XG5cdFx0XHRcdGRlc3Ryb3k6ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl9yb290ID0gcHJldmlvdXNSb290O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5fYXR0YWNoKHtcblx0XHRcdFx0LyogRG9jdW1lbnRGcmFnbWVudCBpcyBub3QgYXNzaWduYWJsZSB0byBFbGVtZW50LCBidXQgcHJvdmlkZXMgZXZlcnl0aGluZyBuZWVkZWQgdG8gd29yayAqL1xuXHRcdFx0XHRyb290OiBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIGFzIGFueSxcblx0XHRcdFx0dHlwZTogQXR0YWNoVHlwZS5BcHBlbmRcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHB1YmxpYyBzZXRDaGlsZHJlbihjaGlsZHJlbjogRE5vZGVbXSk6IHZvaWQge1xuXHRcdFx0dGhpcy5fX3NldENoaWxkcmVuX18oY2hpbGRyZW4pO1xuXHRcdH1cblxuXHRcdHB1YmxpYyBzZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXM6IHRoaXNbJ3Byb3BlcnRpZXMnXSk6IHZvaWQge1xuXHRcdFx0dGhpcy5fX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzKTtcblx0XHR9XG5cblx0XHRwdWJsaWMgX19zZXRQcm9wZXJ0aWVzX18ocHJvcGVydGllczogdGhpc1sncHJvcGVydGllcyddKTogdm9pZCB7XG5cdFx0XHRpZiAodGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyAmJiB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5ICE9PSBwcm9wZXJ0aWVzLnJlZ2lzdHJ5KSB7XG5cdFx0XHRcdGlmICh0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5KSB7XG5cdFx0XHRcdFx0dGhpcy5fcHJvamVjdG9yUHJvcGVydGllcy5yZWdpc3RyeS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMgPSBhc3NpZ24oe30sIHByb3BlcnRpZXMpO1xuXHRcdFx0c3VwZXIuX19zZXRDb3JlUHJvcGVydGllc19fKHsgYmluZDogdGhpcywgYmFzZVJlZ2lzdHJ5OiBwcm9wZXJ0aWVzLnJlZ2lzdHJ5IH0pO1xuXHRcdFx0c3VwZXIuX19zZXRQcm9wZXJ0aWVzX18ocHJvcGVydGllcyk7XG5cdFx0fVxuXG5cdFx0cHVibGljIHRvSHRtbCgpOiBzdHJpbmcge1xuXHRcdFx0aWYgKHRoaXMucHJvamVjdG9yU3RhdGUgIT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkIHx8ICF0aGlzLl9wcm9qZWN0aW9uKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGlzIG5vdCBhdHRhY2hlZCwgY2Fubm90IHJldHVybiBhbiBIVE1MIHN0cmluZyBvZiBwcm9qZWN0aW9uLicpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuICh0aGlzLl9wcm9qZWN0aW9uLmRvbU5vZGUuY2hpbGROb2Rlc1swXSBhcyBFbGVtZW50KS5vdXRlckhUTUw7XG5cdFx0fVxuXG5cdFx0QGFmdGVyUmVuZGVyKClcblx0XHRwdWJsaWMgYWZ0ZXJSZW5kZXIocmVzdWx0OiBETm9kZSkge1xuXHRcdFx0bGV0IG5vZGUgPSByZXN1bHQ7XG5cdFx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgfHwgcmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG5vZGUgPSB2KCdzcGFuJywge30sIFtyZXN1bHRdKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0fVxuXG5cdFx0cHVibGljIGRlc3Ryb3koKSB7XG5cdFx0XHRzdXBlci5kZXN0cm95KCk7XG5cdFx0fVxuXG5cdFx0cHJpdmF0ZSBfYXR0YWNoKHsgdHlwZSwgcm9vdCB9OiBBdHRhY2hPcHRpb25zKTogSGFuZGxlIHtcblx0XHRcdGlmIChyb290KSB7XG5cdFx0XHRcdHRoaXMucm9vdCA9IHJvb3Q7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9hdHRhY2hIYW5kbGUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2F0dGFjaEhhbmRsZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5wcm9qZWN0b3JTdGF0ZSA9IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkO1xuXG5cdFx0XHRjb25zdCBoYW5kbGUgPSB7XG5cdFx0XHRcdGRlc3Ryb3k6ICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3Byb2plY3Rpb24gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuRGV0YWNoZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLm93bihoYW5kbGUpO1xuXHRcdFx0dGhpcy5fYXR0YWNoSGFuZGxlID0gaGFuZGxlO1xuXG5cdFx0XHR0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyA9IHsgLi4udGhpcy5fcHJvamVjdGlvbk9wdGlvbnMsIC4uLnsgc3luYzogIXRoaXMuX2FzeW5jIH0gfTtcblxuXHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdGNhc2UgQXR0YWNoVHlwZS5BcHBlbmQ6XG5cdFx0XHRcdFx0dGhpcy5fcHJvamVjdGlvbiA9IGRvbS5hcHBlbmQodGhpcy5yb290LCB0aGlzLCB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgQXR0YWNoVHlwZS5NZXJnZTpcblx0XHRcdFx0XHR0aGlzLl9wcm9qZWN0aW9uID0gZG9tLm1lcmdlKHRoaXMucm9vdCwgdGhpcywgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5fYXR0YWNoSGFuZGxlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBQcm9qZWN0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFByb2plY3Rvck1peGluO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIFByb2plY3Rvci50cyIsImltcG9ydCB7IENvbnN0cnVjdG9yLCBXaWRnZXRQcm9wZXJ0aWVzLCBTdXBwb3J0ZWRDbGFzc05hbWUgfSBmcm9tICcuLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmVnaXN0cnkgfSBmcm9tICcuLy4uL1JlZ2lzdHJ5JztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnLi8uLi9JbmplY3Rvcic7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvaW5qZWN0JztcbmltcG9ydCB7IFdpZGdldEJhc2UgfSBmcm9tICcuLy4uL1dpZGdldEJhc2UnO1xuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi8uLi9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBkaWZmUHJvcGVydHkgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5JztcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICcuLy4uL2RpZmYnO1xuXG4vKipcbiAqIEEgbG9va3VwIG9iamVjdCBmb3IgYXZhaWxhYmxlIGNsYXNzIG5hbWVzXG4gKi9cbmV4cG9ydCB0eXBlIENsYXNzTmFtZXMgPSB7XG5cdFtrZXk6IHN0cmluZ106IHN0cmluZztcbn07XG5cbi8qKlxuICogQSBsb29rdXAgb2JqZWN0IGZvciBhdmFpbGFibGUgd2lkZ2V0IGNsYXNzZXMgbmFtZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZSB7XG5cdFtrZXk6IHN0cmluZ106IG9iamVjdDtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciB0aGUgVGhlbWVkIG1peGluXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVkUHJvcGVydGllczxUID0gQ2xhc3NOYW1lcz4gZXh0ZW5kcyBXaWRnZXRQcm9wZXJ0aWVzIHtcblx0aW5qZWN0ZWRUaGVtZT86IGFueTtcblx0dGhlbWU/OiBUaGVtZTtcblx0ZXh0cmFDbGFzc2VzPzogeyBbUCBpbiBrZXlvZiBUXT86IHN0cmluZyB9O1xufVxuXG5jb25zdCBUSEVNRV9LRVkgPSAnIF9rZXknO1xuXG5leHBvcnQgY29uc3QgSU5KRUNURURfVEhFTUVfS0VZID0gU3ltYm9sKCd0aGVtZScpO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgdGhlIFRoZW1lZE1peGluXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVkTWl4aW48VCA9IENsYXNzTmFtZXM+IHtcblx0dGhlbWUoY2xhc3NlczogU3VwcG9ydGVkQ2xhc3NOYW1lKTogU3VwcG9ydGVkQ2xhc3NOYW1lO1xuXHR0aGVtZShjbGFzc2VzOiBTdXBwb3J0ZWRDbGFzc05hbWVbXSk6IFN1cHBvcnRlZENsYXNzTmFtZVtdO1xuXHRwcm9wZXJ0aWVzOiBUaGVtZWRQcm9wZXJ0aWVzPFQ+O1xufVxuXG4vKipcbiAqIERlY29yYXRvciBmb3IgYmFzZSBjc3MgY2xhc3Nlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWUodGhlbWU6IHt9KSB7XG5cdHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCkgPT4ge1xuXHRcdHRhcmdldC5hZGREZWNvcmF0b3IoJ2Jhc2VUaGVtZUNsYXNzZXMnLCB0aGVtZSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByZXZlcnNlIGxvb2t1cCBmb3IgdGhlIGNsYXNzZXMgcGFzc2VkIGluIHZpYSB0aGUgYHRoZW1lYCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gY2xhc3NlcyBUaGUgYmFzZUNsYXNzZXMgb2JqZWN0XG4gKiBAcmVxdWlyZXNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGhlbWVDbGFzc2VzTG9va3VwKGNsYXNzZXM6IENsYXNzTmFtZXNbXSk6IENsYXNzTmFtZXMge1xuXHRyZXR1cm4gY2xhc3Nlcy5yZWR1Y2UoXG5cdFx0KGN1cnJlbnRDbGFzc05hbWVzLCBiYXNlQ2xhc3MpID0+IHtcblx0XHRcdE9iamVjdC5rZXlzKGJhc2VDbGFzcykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y3VycmVudENsYXNzTmFtZXNbYmFzZUNsYXNzW2tleV1dID0ga2V5O1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gY3VycmVudENsYXNzTmFtZXM7XG5cdFx0fSxcblx0XHQ8Q2xhc3NOYW1lcz57fVxuXHQpO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgaXMgZ2l2ZW4gYSB0aGVtZSBhbmQgYW4gb3B0aW9uYWwgcmVnaXN0cnksIHRoZSB0aGVtZVxuICogaW5qZWN0b3IgaXMgZGVmaW5lZCBhZ2FpbnN0IHRoZSByZWdpc3RyeSwgcmV0dXJuaW5nIHRoZSB0aGVtZS5cbiAqXG4gKiBAcGFyYW0gdGhlbWUgdGhlIHRoZW1lIHRvIHNldFxuICogQHBhcmFtIHRoZW1lUmVnaXN0cnkgcmVnaXN0cnkgdG8gZGVmaW5lIHRoZSB0aGVtZSBpbmplY3RvciBhZ2FpbnN0LiBEZWZhdWx0c1xuICogdG8gdGhlIGdsb2JhbCByZWdpc3RyeVxuICpcbiAqIEByZXR1cm5zIHRoZSB0aGVtZSBpbmplY3RvciB1c2VkIHRvIHNldCB0aGUgdGhlbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVGhlbWVJbmplY3Rvcih0aGVtZTogYW55LCB0aGVtZVJlZ2lzdHJ5OiBSZWdpc3RyeSk6IEluamVjdG9yIHtcblx0Y29uc3QgdGhlbWVJbmplY3RvciA9IG5ldyBJbmplY3Rvcih0aGVtZSk7XG5cdHRoZW1lUmVnaXN0cnkuZGVmaW5lSW5qZWN0b3IoSU5KRUNURURfVEhFTUVfS0VZLCAoaW52YWxpZGF0b3IpID0+IHtcblx0XHR0aGVtZUluamVjdG9yLnNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKTtcblx0XHRyZXR1cm4gKCkgPT4gdGhlbWVJbmplY3Rvci5nZXQoKTtcblx0fSk7XG5cdHJldHVybiB0aGVtZUluamVjdG9yO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYXNzIGRlY29yYXRlZCB3aXRoIHdpdGggVGhlbWVkIGZ1bmN0aW9uYWxpdHlcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gVGhlbWVkTWl4aW48RSwgVCBleHRlbmRzIENvbnN0cnVjdG9yPFdpZGdldEJhc2U8VGhlbWVkUHJvcGVydGllczxFPj4+Pihcblx0QmFzZTogVFxuKTogQ29uc3RydWN0b3I8VGhlbWVkTWl4aW48RT4+ICYgVCB7XG5cdEBpbmplY3Qoe1xuXHRcdG5hbWU6IElOSkVDVEVEX1RIRU1FX0tFWSxcblx0XHRnZXRQcm9wZXJ0aWVzOiAodGhlbWU6IFRoZW1lLCBwcm9wZXJ0aWVzOiBUaGVtZWRQcm9wZXJ0aWVzKTogVGhlbWVkUHJvcGVydGllcyA9PiB7XG5cdFx0XHRpZiAoIXByb3BlcnRpZXMudGhlbWUpIHtcblx0XHRcdFx0cmV0dXJuIHsgdGhlbWUgfTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdH0pXG5cdGFic3RyYWN0IGNsYXNzIFRoZW1lZCBleHRlbmRzIEJhc2Uge1xuXHRcdHB1YmxpYyBhYnN0cmFjdCBwcm9wZXJ0aWVzOiBUaGVtZWRQcm9wZXJ0aWVzPEU+O1xuXG5cdFx0LyoqXG5cdFx0ICogVGhlIFRoZW1lZCBiYXNlQ2xhc3Nlc1xuXHRcdCAqL1xuXHRcdHByaXZhdGUgX3JlZ2lzdGVyZWRCYXNlVGhlbWU6IENsYXNzTmFtZXMgfCB1bmRlZmluZWQ7XG5cblx0XHQvKipcblx0XHQgKiBSZWdpc3RlcmVkIGJhc2UgdGhlbWUga2V5c1xuXHRcdCAqL1xuXHRcdHByaXZhdGUgX3JlZ2lzdGVyZWRCYXNlVGhlbWVLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0LyoqXG5cdFx0ICogUmV2ZXJzZSBsb29rdXAgb2YgdGhlIHRoZW1lIGNsYXNzZXNcblx0XHQgKi9cblx0XHRwcml2YXRlIF9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cDogQ2xhc3NOYW1lcyB8IHVuZGVmaW5lZDtcblxuXHRcdC8qKlxuXHRcdCAqIEluZGljYXRlcyBpZiBjbGFzc2VzIG1ldGEgZGF0YSBuZWVkIHRvIGJlIGNhbGN1bGF0ZWQuXG5cdFx0ICovXG5cdFx0cHJpdmF0ZSBfcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcblxuXHRcdC8qKlxuXHRcdCAqIExvYWRlZCB0aGVtZVxuXHRcdCAqL1xuXHRcdHByaXZhdGUgX3RoZW1lOiBDbGFzc05hbWVzID0ge307XG5cblx0XHRwdWJsaWMgdGhlbWUoY2xhc3NlczogU3VwcG9ydGVkQ2xhc3NOYW1lKTogU3VwcG9ydGVkQ2xhc3NOYW1lO1xuXHRcdHB1YmxpYyB0aGVtZShjbGFzc2VzOiBTdXBwb3J0ZWRDbGFzc05hbWVbXSk6IFN1cHBvcnRlZENsYXNzTmFtZVtdO1xuXHRcdHB1YmxpYyB0aGVtZShjbGFzc2VzOiBTdXBwb3J0ZWRDbGFzc05hbWUgfCBTdXBwb3J0ZWRDbGFzc05hbWVbXSk6IFN1cHBvcnRlZENsYXNzTmFtZSB8IFN1cHBvcnRlZENsYXNzTmFtZVtdIHtcblx0XHRcdGlmICh0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMpIHtcblx0XHRcdFx0dGhpcy5fcmVjYWxjdWxhdGVUaGVtZUNsYXNzZXMoKTtcblx0XHRcdH1cblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNsYXNzZXMpKSB7XG5cdFx0XHRcdHJldHVybiBjbGFzc2VzLm1hcCgoY2xhc3NOYW1lKSA9PiB0aGlzLl9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuX2dldFRoZW1lQ2xhc3MoY2xhc3Nlcyk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogRnVuY3Rpb24gZmlyZWQgd2hlbiBgdGhlbWVgIG9yIGBleHRyYUNsYXNzZXNgIGFyZSBjaGFuZ2VkLlxuXHRcdCAqL1xuXHRcdEBkaWZmUHJvcGVydHkoJ3RoZW1lJywgc2hhbGxvdylcblx0XHRAZGlmZlByb3BlcnR5KCdleHRyYUNsYXNzZXMnLCBzaGFsbG93KVxuXHRcdHByb3RlY3RlZCBvblByb3BlcnRpZXNDaGFuZ2VkKCkge1xuXHRcdFx0dGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRwcml2YXRlIF9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZTogU3VwcG9ydGVkQ2xhc3NOYW1lKTogU3VwcG9ydGVkQ2xhc3NOYW1lIHtcblx0XHRcdGlmIChjbGFzc05hbWUgPT09IHVuZGVmaW5lZCB8fCBjbGFzc05hbWUgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGNsYXNzTmFtZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZXh0cmFDbGFzc2VzID0gdGhpcy5wcm9wZXJ0aWVzLmV4dHJhQ2xhc3NlcyB8fCAoe30gYXMgYW55KTtcblx0XHRcdGNvbnN0IHRoZW1lQ2xhc3NOYW1lID0gdGhpcy5fYmFzZVRoZW1lQ2xhc3Nlc1JldmVyc2VMb29rdXAhW2NsYXNzTmFtZV07XG5cdFx0XHRsZXQgcmVzdWx0Q2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGlmICghdGhlbWVDbGFzc05hbWUpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKGBDbGFzcyBuYW1lOiAnJHtjbGFzc05hbWV9JyBub3QgZm91bmQgaW4gdGhlbWVgKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChleHRyYUNsYXNzZXNbdGhlbWVDbGFzc05hbWVdKSB7XG5cdFx0XHRcdHJlc3VsdENsYXNzTmFtZXMucHVzaChleHRyYUNsYXNzZXNbdGhlbWVDbGFzc05hbWVdKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX3RoZW1lW3RoZW1lQ2xhc3NOYW1lXSkge1xuXHRcdFx0XHRyZXN1bHRDbGFzc05hbWVzLnB1c2godGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdENsYXNzTmFtZXMucHVzaCh0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lIVt0aGVtZUNsYXNzTmFtZV0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdENsYXNzTmFtZXMuam9pbignICcpO1xuXHRcdH1cblxuXHRcdHByaXZhdGUgX3JlY2FsY3VsYXRlVGhlbWVDbGFzc2VzKCkge1xuXHRcdFx0Y29uc3QgeyB0aGVtZSA9IHt9IH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cdFx0XHRjb25zdCBiYXNlVGhlbWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2Jhc2VUaGVtZUNsYXNzZXMnKTtcblx0XHRcdGlmICghdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZSkge1xuXHRcdFx0XHR0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lID0gYmFzZVRoZW1lcy5yZWR1Y2UoKGZpbmFsQmFzZVRoZW1lLCBiYXNlVGhlbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCB7IFtUSEVNRV9LRVldOiBrZXksIC4uLmNsYXNzZXMgfSA9IGJhc2VUaGVtZTtcblx0XHRcdFx0XHR0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZmluYWxCYXNlVGhlbWUsIC4uLmNsYXNzZXMgfTtcblx0XHRcdFx0fSwge30pO1xuXHRcdFx0XHR0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cCA9IGNyZWF0ZVRoZW1lQ2xhc3Nlc0xvb2t1cChiYXNlVGhlbWVzKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fdGhlbWUgPSB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5yZWR1Y2UoKGJhc2VUaGVtZSwgdGhlbWVLZXkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHsgLi4uYmFzZVRoZW1lLCAuLi50aGVtZVt0aGVtZUtleV0gfTtcblx0XHRcdH0sIHt9KTtcblxuXHRcdFx0dGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFRoZW1lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGhlbWVkTWl4aW47XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gVGhlbWVkLnRzIiwiaW1wb3J0IHsgV2lkZ2V0QmFzZSwgbm9CaW5kIH0gZnJvbSAnLi9XaWRnZXRCYXNlJztcbmltcG9ydCB7IFByb2plY3Rvck1peGluIH0gZnJvbSAnLi9taXhpbnMvUHJvamVjdG9yJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuLi9zaGltL2FycmF5JztcbmltcG9ydCB7IHcsIGRvbSB9IGZyb20gJy4vZCc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJy4uL3NoaW0vZ2xvYmFsJztcbmltcG9ydCB7IHJlZ2lzdGVyVGhlbWVJbmplY3RvciB9IGZyb20gJy4vbWl4aW5zL1RoZW1lZCc7XG5pbXBvcnQgeyBhbHdheXNSZW5kZXIgfSBmcm9tICcuL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyJztcblxuZXhwb3J0IGVudW0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZSB7XG5cdERPSk8gPSAnRE9KTycsXG5cdE5PREUgPSAnTk9ERScsXG5cdFRFWFQgPSAnVEVYVCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERvbVRvV2lkZ2V0V3JhcHBlcihkb21Ob2RlOiBIVE1MRWxlbWVudCk6IGFueSB7XG5cdEBhbHdheXNSZW5kZXIoKVxuXHRjbGFzcyBEb21Ub1dpZGdldFdyYXBwZXIgZXh0ZW5kcyBXaWRnZXRCYXNlPGFueT4ge1xuXHRcdHByb3RlY3RlZCByZW5kZXIoKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5yZWR1Y2UoXG5cdFx0XHRcdChwcm9wcywga2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucHJvcGVydGllc1trZXldO1xuXHRcdFx0XHRcdGlmIChrZXkuaW5kZXhPZignb24nKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0a2V5ID0gYF9fJHtrZXl9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cHJvcHNba2V5XSA9IHZhbHVlO1xuXHRcdFx0XHRcdHJldHVybiBwcm9wcztcblx0XHRcdFx0fSxcblx0XHRcdFx0e30gYXMgYW55XG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGRvbSh7IG5vZGU6IGRvbU5vZGUsIHByb3BzOiBwcm9wZXJ0aWVzLCBkaWZmVHlwZTogJ2RvbScgfSk7XG5cdFx0fVxuXG5cdFx0c3RhdGljIGdldCBkb21Ob2RlKCkge1xuXHRcdFx0cmV0dXJuIGRvbU5vZGU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIERvbVRvV2lkZ2V0V3JhcHBlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShkZXNjcmlwdG9yOiBhbnksIFdpZGdldENvbnN0cnVjdG9yOiBhbnkpOiBhbnkge1xuXHRjb25zdCB7IGF0dHJpYnV0ZXMsIGNoaWxkVHlwZSwgcmVnaXN0cnlGYWN0b3J5IH0gPSBkZXNjcmlwdG9yO1xuXHRjb25zdCBhdHRyaWJ1dGVNYXA6IGFueSA9IHt9O1xuXG5cdGF0dHJpYnV0ZXMuZm9yRWFjaCgocHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0YXR0cmlidXRlTWFwW2F0dHJpYnV0ZU5hbWVdID0gcHJvcGVydHlOYW1lO1xuXHR9KTtcblxuXHRyZXR1cm4gY2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG5cdFx0cHJpdmF0ZSBfcHJvamVjdG9yOiBhbnk7XG5cdFx0cHJpdmF0ZSBfcHJvcGVydGllczogYW55ID0ge307XG5cdFx0cHJpdmF0ZSBfY2hpbGRyZW46IGFueVtdID0gW107XG5cdFx0cHJpdmF0ZSBfZXZlbnRQcm9wZXJ0aWVzOiBhbnkgPSB7fTtcblx0XHRwcml2YXRlIF9pbml0aWFsaXNlZCA9IGZhbHNlO1xuXG5cdFx0cHVibGljIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdFx0aWYgKHRoaXMuX2luaXRpYWxpc2VkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZG9tUHJvcGVydGllczogYW55ID0ge307XG5cdFx0XHRjb25zdCB7IGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGV2ZW50cyB9ID0gZGVzY3JpcHRvcjtcblxuXHRcdFx0dGhpcy5fcHJvcGVydGllcyA9IHsgLi4udGhpcy5fcHJvcGVydGllcywgLi4udGhpcy5fYXR0cmlidXRlc1RvUHJvcGVydGllcyhhdHRyaWJ1dGVzKSB9O1xuXG5cdFx0XHRbLi4uYXR0cmlidXRlcywgLi4ucHJvcGVydGllc10uZm9yRWFjaCgocHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSAodGhpcyBhcyBhbnkpW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRcdGNvbnN0IGZpbHRlcmVkUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnJlcGxhY2UoL15vbi8sICdfXycpO1xuXHRcdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpbHRlcmVkUHJvcGVydHlOYW1lICE9PSBwcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0XHRkb21Qcm9wZXJ0aWVzW2ZpbHRlcmVkUHJvcGVydHlOYW1lXSA9IHtcblx0XHRcdFx0XHRcdGdldDogKCkgPT4gdGhpcy5fZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSxcblx0XHRcdFx0XHRcdHNldDogKHZhbHVlOiBhbnkpID0+IHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRvbVByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHtcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHRoaXMuX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG5cdFx0XHRcdFx0c2V0OiAodmFsdWU6IGFueSkgPT4gdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSlcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXG5cdFx0XHRldmVudHMuZm9yRWFjaCgocHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnROYW1lID0gcHJvcGVydHlOYW1lLnJlcGxhY2UoL15vbi8sICcnKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnX19vbicpO1xuXG5cdFx0XHRcdGRvbVByb3BlcnRpZXNbZmlsdGVyZWRQcm9wZXJ0eU5hbWVdID0ge1xuXHRcdFx0XHRcdGdldDogKCkgPT4gdGhpcy5fZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpLFxuXHRcdFx0XHRcdHNldDogKHZhbHVlOiBhbnkpID0+IHRoaXMuX3NldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSlcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0dGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZXZlbnRDYWxsYmFjayA9IHRoaXMuX2dldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lKTtcblx0XHRcdFx0XHRpZiAodHlwZW9mIGV2ZW50Q2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdGV2ZW50Q2FsbGJhY2soLi4uYXJncyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuZGlzcGF0Y2hFdmVudChcblx0XHRcdFx0XHRcdG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcblx0XHRcdFx0XHRcdFx0YnViYmxlczogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGRldGFpbDogYXJnc1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIGRvbVByb3BlcnRpZXMpO1xuXG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5URVhUID8gdGhpcy5jaGlsZE5vZGVzIDogdGhpcy5jaGlsZHJlbjtcblxuXHRcdFx0ZnJvbShjaGlsZHJlbikuZm9yRWFjaCgoY2hpbGROb2RlOiBOb2RlKSA9PiB7XG5cdFx0XHRcdGlmIChjaGlsZFR5cGUgPT09IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUuRE9KTykge1xuXHRcdFx0XHRcdGNoaWxkTm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLXJlbmRlcicsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcblx0XHRcdFx0XHRjaGlsZE5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1jb25uZWN0ZWQnLCAoKSA9PiB0aGlzLl9yZW5kZXIoKSk7XG5cdFx0XHRcdFx0dGhpcy5fY2hpbGRyZW4ucHVzaChEb21Ub1dpZGdldFdyYXBwZXIoY2hpbGROb2RlIGFzIEhUTUxFbGVtZW50KSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fY2hpbGRyZW4ucHVzaChkb20oeyBub2RlOiBjaGlsZE5vZGUgYXMgSFRNTEVsZW1lbnQsIGRpZmZUeXBlOiAnZG9tJyB9KSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtY29ubmVjdGVkJywgKGU6IGFueSkgPT4gdGhpcy5fY2hpbGRDb25uZWN0ZWQoZSkpO1xuXG5cdFx0XHRjb25zdCB3aWRnZXRQcm9wZXJ0aWVzID0gdGhpcy5fcHJvcGVydGllcztcblx0XHRcdGNvbnN0IHJlbmRlckNoaWxkcmVuID0gKCkgPT4gdGhpcy5fX2NoaWxkcmVuX18oKTtcblx0XHRcdGNvbnN0IFdyYXBwZXIgPSBjbGFzcyBleHRlbmRzIFdpZGdldEJhc2Uge1xuXHRcdFx0XHRyZW5kZXIoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHcoV2lkZ2V0Q29uc3RydWN0b3IsIHdpZGdldFByb3BlcnRpZXMsIHJlbmRlckNoaWxkcmVuKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgcmVnaXN0cnkgPSByZWdpc3RyeUZhY3RvcnkoKTtcblx0XHRcdGNvbnN0IHRoZW1lQ29udGV4dCA9IHJlZ2lzdGVyVGhlbWVJbmplY3Rvcih0aGlzLl9nZXRUaGVtZSgpLCByZWdpc3RyeSk7XG5cdFx0XHRnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignZG9qby10aGVtZS1zZXQnLCAoKSA9PiB0aGVtZUNvbnRleHQuc2V0KHRoaXMuX2dldFRoZW1lKCkpKTtcblx0XHRcdGNvbnN0IFByb2plY3RvciA9IFByb2plY3Rvck1peGluKFdyYXBwZXIpO1xuXHRcdFx0dGhpcy5fcHJvamVjdG9yID0gbmV3IFByb2plY3RvcigpO1xuXHRcdFx0dGhpcy5fcHJvamVjdG9yLnNldFByb3BlcnRpZXMoeyByZWdpc3RyeSB9KTtcblx0XHRcdHRoaXMuX3Byb2plY3Rvci5hcHBlbmQodGhpcyk7XG5cblx0XHRcdHRoaXMuX2luaXRpYWxpc2VkID0gdHJ1ZTtcblx0XHRcdHRoaXMuZGlzcGF0Y2hFdmVudChcblx0XHRcdFx0bmV3IEN1c3RvbUV2ZW50KCdkb2pvLWNlLWNvbm5lY3RlZCcsIHtcblx0XHRcdFx0XHRidWJibGVzOiB0cnVlLFxuXHRcdFx0XHRcdGRldGFpbDogdGhpc1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRwcml2YXRlIF9nZXRUaGVtZSgpIHtcblx0XHRcdGlmIChnbG9iYWwgJiYgZ2xvYmFsLmRvam9jZSAmJiBnbG9iYWwuZG9qb2NlLnRoZW1lKSB7XG5cdFx0XHRcdHJldHVybiBnbG9iYWwuZG9qb2NlLnRoZW1lc1tnbG9iYWwuZG9qb2NlLnRoZW1lXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwcml2YXRlIF9jaGlsZENvbm5lY3RlZChlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG5vZGUgPSBlLmRldGFpbDtcblx0XHRcdGlmIChub2RlLnBhcmVudE5vZGUgPT09IHRoaXMpIHtcblx0XHRcdFx0Y29uc3QgZXhpc3RzID0gdGhpcy5fY2hpbGRyZW4uc29tZSgoY2hpbGQpID0+IGNoaWxkLmRvbU5vZGUgPT09IG5vZGUpO1xuXHRcdFx0XHRpZiAoIWV4aXN0cykge1xuXHRcdFx0XHRcdG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1yZW5kZXInLCAoKSA9PiB0aGlzLl9yZW5kZXIoKSk7XG5cdFx0XHRcdFx0dGhpcy5fY2hpbGRyZW4ucHVzaChEb21Ub1dpZGdldFdyYXBwZXIobm9kZSkpO1xuXHRcdFx0XHRcdHRoaXMuX3JlbmRlcigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cHJpdmF0ZSBfcmVuZGVyKCkge1xuXHRcdFx0aWYgKHRoaXMuX3Byb2plY3Rvcikge1xuXHRcdFx0XHR0aGlzLl9wcm9qZWN0b3IuaW52YWxpZGF0ZSgpO1xuXHRcdFx0XHR0aGlzLmRpc3BhdGNoRXZlbnQoXG5cdFx0XHRcdFx0bmV3IEN1c3RvbUV2ZW50KCdkb2pvLWNlLXJlbmRlcicsIHtcblx0XHRcdFx0XHRcdGJ1YmJsZXM6IGZhbHNlLFxuXHRcdFx0XHRcdFx0ZGV0YWlsOiB0aGlzXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwdWJsaWMgX19wcm9wZXJ0aWVzX18oKSB7XG5cdFx0XHRyZXR1cm4geyAuLi50aGlzLl9wcm9wZXJ0aWVzLCAuLi50aGlzLl9ldmVudFByb3BlcnRpZXMgfTtcblx0XHR9XG5cblx0XHRwdWJsaWMgX19jaGlsZHJlbl9fKCkge1xuXHRcdFx0aWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9jaGlsZHJlbi5maWx0ZXIoKENoaWxkKSA9PiBDaGlsZC5kb21Ob2RlLmlzV2lkZ2V0KS5tYXAoKENoaWxkOiBhbnkpID0+IHtcblx0XHRcdFx0XHRjb25zdCB7IGRvbU5vZGUgfSA9IENoaWxkO1xuXHRcdFx0XHRcdHJldHVybiB3KENoaWxkLCB7IC4uLmRvbU5vZGUuX19wcm9wZXJ0aWVzX18oKSB9LCBbLi4uZG9tTm9kZS5fX2NoaWxkcmVuX18oKV0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9jaGlsZHJlbjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwdWJsaWMgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWU6IHN0cmluZywgb2xkVmFsdWU6IHN0cmluZyB8IG51bGwsIHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBhdHRyaWJ1dGVNYXBbbmFtZV07XG5cdFx0XHR0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcblx0XHR9XG5cblx0XHRwcml2YXRlIF9zZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cdFx0XHR0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdHByaXZhdGUgX2dldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiB0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHR9XG5cblx0XHRwcml2YXRlIF9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR2YWx1ZVtub0JpbmRdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuXHRcdFx0dGhpcy5fcmVuZGVyKCk7XG5cdFx0fVxuXG5cdFx0cHJpdmF0ZSBfZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0fVxuXG5cdFx0cHJpdmF0ZSBfYXR0cmlidXRlc1RvUHJvcGVydGllcyhhdHRyaWJ1dGVzOiBzdHJpbmdbXSkge1xuXHRcdFx0cmV0dXJuIGF0dHJpYnV0ZXMucmVkdWNlKChwcm9wZXJ0aWVzOiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblx0XHRcdFx0aWYgKHZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdFx0XHR9LCB7fSk7XG5cdFx0fVxuXG5cdFx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwKTtcblx0XHR9XG5cblx0XHRwdWJsaWMgZ2V0IGlzV2lkZ2V0KCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIoV2lkZ2V0Q29uc3RydWN0b3I6IGFueSk6IHZvaWQge1xuXHRjb25zdCBkZXNjcmlwdG9yID0gV2lkZ2V0Q29uc3RydWN0b3IucHJvdG90eXBlICYmIFdpZGdldENvbnN0cnVjdG9yLnByb3RvdHlwZS5fX2N1c3RvbUVsZW1lbnREZXNjcmlwdG9yO1xuXG5cdGlmICghZGVzY3JpcHRvcikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCdDYW5ub3QgZ2V0IGRlc2NyaXB0b3IgZm9yIEN1c3RvbSBFbGVtZW50LCBoYXZlIHlvdSBhZGRlZCB0aGUgQGN1c3RvbUVsZW1lbnQgZGVjb3JhdG9yIHRvIHlvdXIgV2lkZ2V0Pydcblx0XHQpO1xuXHR9XG5cblx0Z2xvYmFsLmN1c3RvbUVsZW1lbnRzLmRlZmluZShkZXNjcmlwdG9yLnRhZ05hbWUsIGNyZWF0ZShkZXNjcmlwdG9yLCBXaWRnZXRDb25zdHJ1Y3RvcikpO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZWdpc3RlcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyByZWdpc3RlckN1c3RvbUVsZW1lbnQudHMiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4uL3NoaW0vZ2xvYmFsJztcbmltcG9ydCB7XG5cdENvcmVQcm9wZXJ0aWVzLFxuXHREZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZSxcblx0RE5vZGUsXG5cdFZOb2RlLFxuXHRXTm9kZSxcblx0UHJvamVjdGlvbk9wdGlvbnMsXG5cdFByb2plY3Rpb24sXG5cdFN1cHBvcnRlZENsYXNzTmFtZSxcblx0VHJhbnNpdGlvblN0cmF0ZWd5LFxuXHRWTm9kZVByb3BlcnRpZXNcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGZyb20gYXMgYXJyYXlGcm9tIH0gZnJvbSAnLi4vc2hpbS9hcnJheSc7XG5pbXBvcnQgeyBpc1dOb2RlLCBpc1ZOb2RlLCBpc0RvbVZOb2RlLCBWTk9ERSwgV05PREUgfSBmcm9tICcuL2QnO1xuaW1wb3J0IHsgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IgfSBmcm9tICcuL1JlZ2lzdHJ5JztcbmltcG9ydCBXZWFrTWFwIGZyb20gJy4uL3NoaW0vV2Vha01hcCc7XG5pbXBvcnQgTm9kZUhhbmRsZXIgZnJvbSAnLi9Ob2RlSGFuZGxlcic7XG5pbXBvcnQgUmVnaXN0cnlIYW5kbGVyIGZyb20gJy4vUmVnaXN0cnlIYW5kbGVyJztcblxuY29uc3QgTkFNRVNQQUNFX1czID0gJ2h0dHA6Ly93d3cudzMub3JnLyc7XG5jb25zdCBOQU1FU1BBQ0VfU1ZHID0gTkFNRVNQQUNFX1czICsgJzIwMDAvc3ZnJztcbmNvbnN0IE5BTUVTUEFDRV9YTElOSyA9IE5BTUVTUEFDRV9XMyArICcxOTk5L3hsaW5rJztcblxuY29uc3QgZW1wdHlBcnJheTogKEludGVybmFsV05vZGUgfCBJbnRlcm5hbFZOb2RlKVtdID0gW107XG5cbmNvbnN0IG5vZGVPcGVyYXRpb25zID0gWydmb2N1cycsICdibHVyJywgJ3Njcm9sbEludG9WaWV3JywgJ2NsaWNrJ107XG5cbmV4cG9ydCB0eXBlIFJlbmRlclJlc3VsdCA9IEROb2RlPGFueT4gfCBETm9kZTxhbnk+W107XG5cbmludGVyZmFjZSBJbnN0YW5jZU1hcERhdGEge1xuXHRwYXJlbnRWTm9kZTogSW50ZXJuYWxWTm9kZTtcblx0ZG5vZGU6IEludGVybmFsV05vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuYWxXTm9kZSBleHRlbmRzIFdOb2RlPERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlPiB7XG5cdC8qKlxuXHQgKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHdpZGdldFxuXHQgKi9cblx0aW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlO1xuXG5cdC8qKlxuXHQgKiBUaGUgcmVuZGVyZWQgRE5vZGVzIGZyb20gdGhlIGluc3RhbmNlXG5cdCAqL1xuXHRyZW5kZXJlZDogSW50ZXJuYWxETm9kZVtdO1xuXG5cdC8qKlxuXHQgKiBDb3JlIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgd2lkZ2V0IGNvcmUgc3lzdGVtXG5cdCAqL1xuXHRjb3JlUHJvcGVydGllczogQ29yZVByb3BlcnRpZXM7XG5cblx0LyoqXG5cdCAqIENoaWxkcmVuIGZvciB0aGUgV05vZGVcblx0ICovXG5cdGNoaWxkcmVuOiBJbnRlcm5hbEROb2RlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuYWxWTm9kZSBleHRlbmRzIFZOb2RlIHtcblx0LyoqXG5cdCAqIENoaWxkcmVuIGZvciB0aGUgVk5vZGVcblx0ICovXG5cdGNoaWxkcmVuPzogSW50ZXJuYWxETm9kZVtdO1xuXG5cdGluc2VydGVkPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQmFnIHVzZWQgdG8gc3RpbGwgZGVjb3JhdGUgcHJvcGVydGllcyBvbiBhIGRlZmVycmVkIHByb3BlcnRpZXMgY2FsbGJhY2tcblx0ICovXG5cdGRlY29yYXRlZERlZmVycmVkUHJvcGVydGllcz86IFZOb2RlUHJvcGVydGllcztcblxuXHQvKipcblx0ICogRE9NIGVsZW1lbnRcblx0ICovXG5cdGRvbU5vZGU/OiBFbGVtZW50IHwgVGV4dDtcbn1cblxuZXhwb3J0IHR5cGUgSW50ZXJuYWxETm9kZSA9IEludGVybmFsVk5vZGUgfCBJbnRlcm5hbFdOb2RlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclF1ZXVlIHtcblx0aW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlO1xuXHRkZXB0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpZGdldERhdGEge1xuXHRvbkRldGFjaDogKCkgPT4gdm9pZDtcblx0b25BdHRhY2g6ICgpID0+IHZvaWQ7XG5cdGRpcnR5OiBib29sZWFuO1xuXHRyZWdpc3RyeTogKCkgPT4gUmVnaXN0cnlIYW5kbGVyO1xuXHRub2RlSGFuZGxlcjogTm9kZUhhbmRsZXI7XG5cdGNvcmVQcm9wZXJ0aWVzOiBDb3JlUHJvcGVydGllcztcblx0aW52YWxpZGF0ZT86IEZ1bmN0aW9uO1xuXHRyZW5kZXJpbmc6IGJvb2xlYW47XG5cdGlucHV0UHJvcGVydGllczogYW55O1xufVxuXG5pbnRlcmZhY2UgUHJvamVjdG9yU3RhdGUge1xuXHRkZWZlcnJlZFJlbmRlckNhbGxiYWNrczogRnVuY3Rpb25bXTtcblx0YWZ0ZXJSZW5kZXJDYWxsYmFja3M6IEZ1bmN0aW9uW107XG5cdG5vZGVNYXA6IFdlYWtNYXA8Tm9kZSwgV2Vha01hcDxGdW5jdGlvbiwgRXZlbnRMaXN0ZW5lcj4+O1xuXHRyZW5kZXJTY2hlZHVsZWQ/OiBudW1iZXI7XG5cdHJlbmRlclF1ZXVlOiBSZW5kZXJRdWV1ZVtdO1xuXHRtZXJnZTogYm9vbGVhbjtcblx0bWVyZ2VFbGVtZW50PzogTm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IHdpZGdldEluc3RhbmNlTWFwID0gbmV3IFdlYWtNYXA8YW55LCBXaWRnZXREYXRhPigpO1xuXG5jb25zdCBpbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwPERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLCBJbnN0YW5jZU1hcERhdGE+KCk7XG5jb25zdCBuZXh0U2libGluZ01hcCA9IG5ldyBXZWFrTWFwPERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLCBJbnRlcm5hbEROb2RlW10+KCk7XG5jb25zdCBwcm9qZWN0b3JTdGF0ZU1hcCA9IG5ldyBXZWFrTWFwPERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLCBQcm9qZWN0b3JTdGF0ZT4oKTtcblxuZnVuY3Rpb24gc2FtZShkbm9kZTE6IEludGVybmFsRE5vZGUsIGRub2RlMjogSW50ZXJuYWxETm9kZSkge1xuXHRpZiAoaXNWTm9kZShkbm9kZTEpICYmIGlzVk5vZGUoZG5vZGUyKSkge1xuXHRcdGlmIChpc0RvbVZOb2RlKGRub2RlMSkgfHwgaXNEb21WTm9kZShkbm9kZTIpKSB7XG5cdFx0XHRpZiAoZG5vZGUxLmRvbU5vZGUgIT09IGRub2RlMi5kb21Ob2RlKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGRub2RlMS50YWcgIT09IGRub2RlMi50YWcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGRub2RlMS5wcm9wZXJ0aWVzLmtleSAhPT0gZG5vZGUyLnByb3BlcnRpZXMua2V5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKGlzV05vZGUoZG5vZGUxKSAmJiBpc1dOb2RlKGRub2RlMikpIHtcblx0XHRpZiAoZG5vZGUxLmluc3RhbmNlID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIGRub2RlMi53aWRnZXRDb25zdHJ1Y3RvciA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGRub2RlMS53aWRnZXRDb25zdHJ1Y3RvciAhPT0gZG5vZGUyLndpZGdldENvbnN0cnVjdG9yKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChkbm9kZTEucHJvcGVydGllcy5rZXkgIT09IGRub2RlMi5wcm9wZXJ0aWVzLmtleSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmNvbnN0IG1pc3NpbmdUcmFuc2l0aW9uID0gZnVuY3Rpb24oKSB7XG5cdHRocm93IG5ldyBFcnJvcignUHJvdmlkZSBhIHRyYW5zaXRpb25zIG9iamVjdCB0byB0aGUgcHJvamVjdGlvbk9wdGlvbnMgdG8gZG8gYW5pbWF0aW9ucycpO1xufTtcblxuZnVuY3Rpb24gZ2V0UHJvamVjdGlvbk9wdGlvbnMoXG5cdHByb2plY3Rvck9wdGlvbnM6IFBhcnRpYWw8UHJvamVjdGlvbk9wdGlvbnM+LFxuXHRwcm9qZWN0b3JJbnN0YW5jZTogRGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2Vcbik6IFByb2plY3Rpb25PcHRpb25zIHtcblx0Y29uc3QgZGVmYXVsdHM6IFBhcnRpYWw8UHJvamVjdGlvbk9wdGlvbnM+ID0ge1xuXHRcdG5hbWVzcGFjZTogdW5kZWZpbmVkLFxuXHRcdHN0eWxlQXBwbHllcjogZnVuY3Rpb24oZG9tTm9kZTogSFRNTEVsZW1lbnQsIHN0eWxlTmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG5cdFx0XHQoZG9tTm9kZS5zdHlsZSBhcyBhbnkpW3N0eWxlTmFtZV0gPSB2YWx1ZTtcblx0XHR9LFxuXHRcdHRyYW5zaXRpb25zOiB7XG5cdFx0XHRlbnRlcjogbWlzc2luZ1RyYW5zaXRpb24sXG5cdFx0XHRleGl0OiBtaXNzaW5nVHJhbnNpdGlvblxuXHRcdH0sXG5cdFx0ZGVwdGg6IDAsXG5cdFx0bWVyZ2U6IGZhbHNlLFxuXHRcdHN5bmM6IGZhbHNlLFxuXHRcdHByb2plY3Rvckluc3RhbmNlXG5cdH07XG5cdHJldHVybiB7IC4uLmRlZmF1bHRzLCAuLi5wcm9qZWN0b3JPcHRpb25zIH0gYXMgUHJvamVjdGlvbk9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrU3R5bGVWYWx1ZShzdHlsZVZhbHVlOiBPYmplY3QpIHtcblx0aWYgKHR5cGVvZiBzdHlsZVZhbHVlICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBFcnJvcignU3R5bGUgdmFsdWVzIG11c3QgYmUgc3RyaW5ncycpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUV2ZW50KFxuXHRkb21Ob2RlOiBOb2RlLFxuXHRldmVudE5hbWU6IHN0cmluZyxcblx0Y3VycmVudFZhbHVlOiBGdW5jdGlvbixcblx0cHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zLFxuXHRiaW5kOiBhbnksXG5cdHByZXZpb3VzVmFsdWU/OiBGdW5jdGlvblxuKSB7XG5cdGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKSE7XG5cdGNvbnN0IGV2ZW50TWFwID0gcHJvamVjdG9yU3RhdGUubm9kZU1hcC5nZXQoZG9tTm9kZSkgfHwgbmV3IFdlYWtNYXAoKTtcblxuXHRpZiAocHJldmlvdXNWYWx1ZSkge1xuXHRcdGNvbnN0IHByZXZpb3VzRXZlbnQgPSBldmVudE1hcC5nZXQocHJldmlvdXNWYWx1ZSk7XG5cdFx0ZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgcHJldmlvdXNFdmVudCk7XG5cdH1cblxuXHRsZXQgY2FsbGJhY2sgPSBjdXJyZW50VmFsdWUuYmluZChiaW5kKTtcblxuXHRpZiAoZXZlbnROYW1lID09PSAnaW5wdXQnKSB7XG5cdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbih0aGlzOiBhbnksIGV2dDogRXZlbnQpIHtcblx0XHRcdGN1cnJlbnRWYWx1ZS5jYWxsKHRoaXMsIGV2dCk7XG5cdFx0XHQoZXZ0LnRhcmdldCBhcyBhbnkpWydvbmlucHV0LXZhbHVlJ10gPSAoZXZ0LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblx0XHR9LmJpbmQoYmluZCk7XG5cdH1cblxuXHRkb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjayk7XG5cdGV2ZW50TWFwLnNldChjdXJyZW50VmFsdWUsIGNhbGxiYWNrKTtcblx0cHJvamVjdG9yU3RhdGUubm9kZU1hcC5zZXQoZG9tTm9kZSwgZXZlbnRNYXApO1xufVxuXG5mdW5jdGlvbiBhZGRDbGFzc2VzKGRvbU5vZGU6IEVsZW1lbnQsIGNsYXNzZXM6IFN1cHBvcnRlZENsYXNzTmFtZSkge1xuXHRpZiAoY2xhc3Nlcykge1xuXHRcdGNvbnN0IGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRkb21Ob2RlLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lc1tpXSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMoZG9tTm9kZTogRWxlbWVudCwgY2xhc3NlczogU3VwcG9ydGVkQ2xhc3NOYW1lKSB7XG5cdGlmIChjbGFzc2VzKSB7XG5cdFx0Y29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGRvbU5vZGUuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzW2ldKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYnVpbGRQcmV2aW91c1Byb3BlcnRpZXMoZG9tTm9kZTogYW55LCBwcmV2aW91czogSW50ZXJuYWxWTm9kZSwgY3VycmVudDogSW50ZXJuYWxWTm9kZSkge1xuXHRjb25zdCB7IGRpZmZUeXBlLCBwcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzIH0gPSBjdXJyZW50O1xuXHRpZiAoIWRpZmZUeXBlIHx8IGRpZmZUeXBlID09PSAndmRvbScpIHtcblx0XHRyZXR1cm4geyBwcm9wZXJ0aWVzOiBwcmV2aW91cy5wcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzOiBwcmV2aW91cy5hdHRyaWJ1dGVzLCBldmVudHM6IHByZXZpb3VzLmV2ZW50cyB9O1xuXHR9IGVsc2UgaWYgKGRpZmZUeXBlID09PSAnbm9uZScpIHtcblx0XHRyZXR1cm4geyBwcm9wZXJ0aWVzOiB7fSwgYXR0cmlidXRlczogcHJldmlvdXMuYXR0cmlidXRlcyA/IHt9IDogdW5kZWZpbmVkLCBldmVudHM6IHByZXZpb3VzLmV2ZW50cyB9O1xuXHR9XG5cdGxldCBuZXdQcm9wZXJ0aWVzOiBhbnkgPSB7XG5cdFx0cHJvcGVydGllczoge31cblx0fTtcblx0aWYgKGF0dHJpYnV0ZXMpIHtcblx0XHRuZXdQcm9wZXJ0aWVzLmF0dHJpYnV0ZXMgPSB7fTtcblx0XHRuZXdQcm9wZXJ0aWVzLmV2ZW50cyA9IHByZXZpb3VzLmV2ZW50cztcblx0XHRPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0bmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzW3Byb3BOYW1lXSA9IGRvbU5vZGVbcHJvcE5hbWVdO1xuXHRcdH0pO1xuXHRcdE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGF0dHJOYW1lKSA9PiB7XG5cdFx0XHRuZXdQcm9wZXJ0aWVzLmF0dHJpYnV0ZXNbYXR0ck5hbWVdID0gZG9tTm9kZS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBuZXdQcm9wZXJ0aWVzO1xuXHR9XG5cdG5ld1Byb3BlcnRpZXMucHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLnJlZHVjZShcblx0XHQocHJvcHMsIHByb3BlcnR5KSA9PiB7XG5cdFx0XHRwcm9wc1twcm9wZXJ0eV0gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZShwcm9wZXJ0eSkgfHwgZG9tTm9kZVtwcm9wZXJ0eV07XG5cdFx0XHRyZXR1cm4gcHJvcHM7XG5cdFx0fSxcblx0XHR7fSBhcyBhbnlcblx0KTtcblx0cmV0dXJuIG5ld1Byb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIG5vZGVPcGVyYXRpb24oXG5cdHByb3BOYW1lOiBzdHJpbmcsXG5cdHByb3BWYWx1ZTogYW55LFxuXHRwcmV2aW91c1ZhbHVlOiBhbnksXG5cdGRvbU5vZGU6IEVsZW1lbnQsXG5cdHByb2plY3Rpb25PcHRpb25zOiBQcm9qZWN0aW9uT3B0aW9uc1xuKTogdm9pZCB7XG5cdGxldCByZXN1bHQ7XG5cdGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmVzdWx0ID0gcHJvcFZhbHVlKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmVzdWx0ID0gcHJvcFZhbHVlICYmICFwcmV2aW91c1ZhbHVlO1xuXHR9XG5cdGlmIChyZXN1bHQgPT09IHRydWUpIHtcblx0XHRjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSkhO1xuXHRcdHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuXHRcdFx0KGRvbU5vZGUgYXMgYW55KVtwcm9wTmFtZV0oKTtcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVPcnBoYW5lZEV2ZW50cyhcblx0ZG9tTm9kZTogRWxlbWVudCxcblx0cHJldmlvdXNQcm9wZXJ0aWVzOiBWTm9kZVByb3BlcnRpZXMsXG5cdHByb3BlcnRpZXM6IFZOb2RlUHJvcGVydGllcyxcblx0cHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zLFxuXHRvbmx5RXZlbnRzOiBib29sZWFuID0gZmFsc2Vcbikge1xuXHRjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSkhO1xuXHRjb25zdCBldmVudE1hcCA9IHByb2plY3RvclN0YXRlLm5vZGVNYXAuZ2V0KGRvbU5vZGUpO1xuXHRpZiAoZXZlbnRNYXApIHtcblx0XHRPYmplY3Qua2V5cyhwcmV2aW91c1Byb3BlcnRpZXMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBpc0V2ZW50ID0gcHJvcE5hbWUuc3Vic3RyKDAsIDIpID09PSAnb24nIHx8IG9ubHlFdmVudHM7XG5cdFx0XHRjb25zdCBldmVudE5hbWUgPSBvbmx5RXZlbnRzID8gcHJvcE5hbWUgOiBwcm9wTmFtZS5zdWJzdHIoMik7XG5cdFx0XHRpZiAoaXNFdmVudCAmJiAhcHJvcGVydGllc1twcm9wTmFtZV0pIHtcblx0XHRcdFx0Y29uc3QgZXZlbnRDYWxsYmFjayA9IGV2ZW50TWFwLmdldChwcmV2aW91c1Byb3BlcnRpZXNbcHJvcE5hbWVdKTtcblx0XHRcdFx0aWYgKGV2ZW50Q2FsbGJhY2spIHtcblx0XHRcdFx0XHRkb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudENhbGxiYWNrKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZShkb21Ob2RlOiBFbGVtZW50LCBhdHRyTmFtZTogc3RyaW5nLCBhdHRyVmFsdWU6IHN0cmluZywgcHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zKSB7XG5cdGlmIChwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UgPT09IE5BTUVTUEFDRV9TVkcgJiYgYXR0ck5hbWUgPT09ICdocmVmJykge1xuXHRcdGRvbU5vZGUuc2V0QXR0cmlidXRlTlMoTkFNRVNQQUNFX1hMSU5LLCBhdHRyTmFtZSwgYXR0clZhbHVlKTtcblx0fSBlbHNlIGlmICgoYXR0ck5hbWUgPT09ICdyb2xlJyAmJiBhdHRyVmFsdWUgPT09ICcnKSB8fCBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdGRvbU5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcblx0fSBlbHNlIHtcblx0XHRkb21Ob2RlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0clZhbHVlKTtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGVzKFxuXHRkb21Ob2RlOiBFbGVtZW50LFxuXHRwcmV2aW91c0F0dHJpYnV0ZXM6IHsgW2luZGV4OiBzdHJpbmddOiBzdHJpbmcgfSxcblx0YXR0cmlidXRlczogeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB9LFxuXHRwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnNcbikge1xuXHRjb25zdCBhdHRyTmFtZXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKTtcblx0Y29uc3QgYXR0ckNvdW50ID0gYXR0ck5hbWVzLmxlbmd0aDtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyQ291bnQ7IGkrKykge1xuXHRcdGNvbnN0IGF0dHJOYW1lID0gYXR0ck5hbWVzW2ldO1xuXHRcdGNvbnN0IGF0dHJWYWx1ZSA9IGF0dHJpYnV0ZXNbYXR0ck5hbWVdO1xuXHRcdGNvbnN0IHByZXZpb3VzQXR0clZhbHVlID0gcHJldmlvdXNBdHRyaWJ1dGVzW2F0dHJOYW1lXTtcblx0XHRpZiAoYXR0clZhbHVlICE9PSBwcmV2aW91c0F0dHJWYWx1ZSkge1xuXHRcdFx0dXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIGF0dHJOYW1lLCBhdHRyVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhcblx0ZG9tTm9kZTogRWxlbWVudCxcblx0cHJldmlvdXNQcm9wZXJ0aWVzOiBWTm9kZVByb3BlcnRpZXMsXG5cdHByb3BlcnRpZXM6IFZOb2RlUHJvcGVydGllcyxcblx0cHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zLFxuXHRpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMgPSB0cnVlXG4pIHtcblx0bGV0IHByb3BlcnRpZXNVcGRhdGVkID0gZmFsc2U7XG5cdGNvbnN0IHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpO1xuXHRjb25zdCBwcm9wQ291bnQgPSBwcm9wTmFtZXMubGVuZ3RoO1xuXHRpZiAocHJvcE5hbWVzLmluZGV4T2YoJ2NsYXNzZXMnKSA9PT0gLTEgJiYgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3NlcykpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlc1tpXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpO1xuXHRcdH1cblx0fVxuXG5cdGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcyAmJiByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMsIHByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHByb3BDb3VudDsgaSsrKSB7XG5cdFx0Y29uc3QgcHJvcE5hbWUgPSBwcm9wTmFtZXNbaV07XG5cdFx0bGV0IHByb3BWYWx1ZSA9IHByb3BlcnRpZXNbcHJvcE5hbWVdO1xuXHRcdGNvbnN0IHByZXZpb3VzVmFsdWUgPSBwcmV2aW91c1Byb3BlcnRpZXMhW3Byb3BOYW1lXTtcblx0XHRpZiAocHJvcE5hbWUgPT09ICdjbGFzc2VzJykge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNDbGFzc2VzID0gQXJyYXkuaXNBcnJheShwcmV2aW91c1ZhbHVlKSA/IHByZXZpb3VzVmFsdWUgOiBbcHJldmlvdXNWYWx1ZV07XG5cdFx0XHRjb25zdCBjdXJyZW50Q2xhc3NlcyA9IEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSA/IHByb3BWYWx1ZSA6IFtwcm9wVmFsdWVdO1xuXHRcdFx0aWYgKHByZXZpb3VzQ2xhc3NlcyAmJiBwcmV2aW91c0NsYXNzZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpZiAoIXByb3BWYWx1ZSB8fCBwcm9wVmFsdWUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c0NsYXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNDbGFzc2VzW2ldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgbmV3Q2xhc3NlczogKG51bGwgfCB1bmRlZmluZWQgfCBzdHJpbmcpW10gPSBbLi4uY3VycmVudENsYXNzZXNdO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJldmlvdXNDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwcmV2aW91c0NsYXNzTmFtZSA9IHByZXZpb3VzQ2xhc3Nlc1tpXTtcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91c0NsYXNzTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjbGFzc0luZGV4ID0gbmV3Q2xhc3Nlcy5pbmRleE9mKHByZXZpb3VzQ2xhc3NOYW1lKTtcblx0XHRcdFx0XHRcdFx0aWYgKGNsYXNzSW5kZXggPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c0NsYXNzTmFtZSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV3Q2xhc3Nlcy5zcGxpY2UoY2xhc3NJbmRleCwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuZXdDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRhZGRDbGFzc2VzKGRvbU5vZGUsIG5ld0NsYXNzZXNbaV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50Q2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGFkZENsYXNzZXMoZG9tTm9kZSwgY3VycmVudENsYXNzZXNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChub2RlT3BlcmF0aW9ucy5pbmRleE9mKHByb3BOYW1lKSAhPT0gLTEpIHtcblx0XHRcdG5vZGVPcGVyYXRpb24ocHJvcE5hbWUsIHByb3BWYWx1ZSwgcHJldmlvdXNWYWx1ZSwgZG9tTm9kZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xuXHRcdH0gZWxzZSBpZiAocHJvcE5hbWUgPT09ICdzdHlsZXMnKSB7XG5cdFx0XHRjb25zdCBzdHlsZU5hbWVzID0gT2JqZWN0LmtleXMocHJvcFZhbHVlKTtcblx0XHRcdGNvbnN0IHN0eWxlQ291bnQgPSBzdHlsZU5hbWVzLmxlbmd0aDtcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgc3R5bGVDb3VudDsgaisrKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlTmFtZSA9IHN0eWxlTmFtZXNbal07XG5cdFx0XHRcdGNvbnN0IG5ld1N0eWxlVmFsdWUgPSBwcm9wVmFsdWVbc3R5bGVOYW1lXTtcblx0XHRcdFx0Y29uc3Qgb2xkU3R5bGVWYWx1ZSA9IHByZXZpb3VzVmFsdWUgJiYgcHJldmlvdXNWYWx1ZVtzdHlsZU5hbWVdO1xuXHRcdFx0XHRpZiAobmV3U3R5bGVWYWx1ZSA9PT0gb2xkU3R5bGVWYWx1ZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3BlcnRpZXNVcGRhdGVkID0gdHJ1ZTtcblx0XHRcdFx0aWYgKG5ld1N0eWxlVmFsdWUpIHtcblx0XHRcdFx0XHRjaGVja1N0eWxlVmFsdWUobmV3U3R5bGVWYWx1ZSk7XG5cdFx0XHRcdFx0cHJvamVjdGlvbk9wdGlvbnMuc3R5bGVBcHBseWVyIShkb21Ob2RlIGFzIEhUTUxFbGVtZW50LCBzdHlsZU5hbWUsIG5ld1N0eWxlVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHByb2plY3Rpb25PcHRpb25zLnN0eWxlQXBwbHllciEoZG9tTm9kZSBhcyBIVE1MRWxlbWVudCwgc3R5bGVOYW1lLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCFwcm9wVmFsdWUgJiYgdHlwZW9mIHByZXZpb3VzVmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHByb3BWYWx1ZSA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BOYW1lID09PSAndmFsdWUnKSB7XG5cdFx0XHRcdGNvbnN0IGRvbVZhbHVlID0gKGRvbU5vZGUgYXMgYW55KVtwcm9wTmFtZV07XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRkb21WYWx1ZSAhPT0gcHJvcFZhbHVlICYmXG5cdFx0XHRcdFx0KChkb21Ob2RlIGFzIGFueSlbJ29uaW5wdXQtdmFsdWUnXVxuXHRcdFx0XHRcdFx0PyBkb21WYWx1ZSA9PT0gKGRvbU5vZGUgYXMgYW55KVsnb25pbnB1dC12YWx1ZSddXG5cdFx0XHRcdFx0XHQ6IHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0KGRvbU5vZGUgYXMgYW55KVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XG5cdFx0XHRcdFx0KGRvbU5vZGUgYXMgYW55KVsnb25pbnB1dC12YWx1ZSddID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm9wVmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocHJvcE5hbWUgIT09ICdrZXknICYmIHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkge1xuXHRcdFx0XHRjb25zdCB0eXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcblx0XHRcdFx0aWYgKHR5cGUgPT09ICdmdW5jdGlvbicgJiYgcHJvcE5hbWUubGFzdEluZGV4T2YoJ29uJywgMCkgPT09IDAgJiYgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdFx0dXBkYXRlRXZlbnQoXG5cdFx0XHRcdFx0XHRkb21Ob2RlLFxuXHRcdFx0XHRcdFx0cHJvcE5hbWUuc3Vic3RyKDIpLFxuXHRcdFx0XHRcdFx0cHJvcFZhbHVlLFxuXHRcdFx0XHRcdFx0cHJvamVjdGlvbk9wdGlvbnMsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzLmJpbmQsXG5cdFx0XHRcdFx0XHRwcmV2aW91c1ZhbHVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiBwcm9wTmFtZSAhPT0gJ2lubmVySFRNTCcgJiYgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdFx0dXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIHByb3BOYW1lLCBwcm9wVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKTtcblx0XHRcdFx0fSBlbHNlIGlmIChwcm9wTmFtZSA9PT0gJ3Njcm9sbExlZnQnIHx8IHByb3BOYW1lID09PSAnc2Nyb2xsVG9wJykge1xuXHRcdFx0XHRcdGlmICgoZG9tTm9kZSBhcyBhbnkpW3Byb3BOYW1lXSAhPT0gcHJvcFZhbHVlKSB7XG5cdFx0XHRcdFx0XHQoZG9tTm9kZSBhcyBhbnkpW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KGRvbU5vZGUgYXMgYW55KVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cHJvcGVydGllc1VwZGF0ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJvcGVydGllc1VwZGF0ZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleE9mQ2hpbGQoY2hpbGRyZW46IEludGVybmFsRE5vZGVbXSwgc2FtZUFzOiBJbnRlcm5hbEROb2RlLCBzdGFydDogbnVtYmVyKSB7XG5cdGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHNhbWUoY2hpbGRyZW5baV0sIHNhbWVBcykpIHtcblx0XHRcdHJldHVybiBpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1BhcmVudFZOb2RlKGRvbU5vZGU6IEVsZW1lbnQpOiBJbnRlcm5hbFZOb2RlIHtcblx0cmV0dXJuIHtcblx0XHR0YWc6ICcnLFxuXHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdGNoaWxkcmVuOiB1bmRlZmluZWQsXG5cdFx0ZG9tTm9kZSxcblx0XHR0eXBlOiBWTk9ERVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9UZXh0Vk5vZGUoZGF0YTogYW55KTogSW50ZXJuYWxWTm9kZSB7XG5cdHJldHVybiB7XG5cdFx0dGFnOiAnJyxcblx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRjaGlsZHJlbjogdW5kZWZpbmVkLFxuXHRcdHRleHQ6IGAke2RhdGF9YCxcblx0XHRkb21Ob2RlOiB1bmRlZmluZWQsXG5cdFx0dHlwZTogVk5PREVcblx0fTtcbn1cblxuZnVuY3Rpb24gdG9JbnRlcm5hbFdOb2RlKGluc3RhbmNlOiBEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZSwgaW5zdGFuY2VEYXRhOiBXaWRnZXREYXRhKTogSW50ZXJuYWxXTm9kZSB7XG5cdHJldHVybiB7XG5cdFx0aW5zdGFuY2UsXG5cdFx0cmVuZGVyZWQ6IFtdLFxuXHRcdGNvcmVQcm9wZXJ0aWVzOiBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMsXG5cdFx0Y2hpbGRyZW46IGluc3RhbmNlLmNoaWxkcmVuIGFzIGFueSxcblx0XHR3aWRnZXRDb25zdHJ1Y3RvcjogaW5zdGFuY2UuY29uc3RydWN0b3IgYXMgYW55LFxuXHRcdHByb3BlcnRpZXM6IGluc3RhbmNlRGF0YS5pbnB1dFByb3BlcnRpZXMsXG5cdFx0dHlwZTogV05PREVcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oXG5cdGNoaWxkcmVuOiB1bmRlZmluZWQgfCBETm9kZSB8IEROb2RlW10sXG5cdGluc3RhbmNlOiBEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZVxuKTogSW50ZXJuYWxETm9kZVtdIHtcblx0aWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gZW1wdHlBcnJheTtcblx0fVxuXHRjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4gOiBbY2hpbGRyZW5dO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyApIHtcblx0XHRjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldIGFzIEludGVybmFsRE5vZGU7XG5cdFx0aWYgKGNoaWxkID09PSB1bmRlZmluZWQgfHwgY2hpbGQgPT09IG51bGwpIHtcblx0XHRcdGNoaWxkcmVuLnNwbGljZShpLCAxKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xuXHRcdFx0Y2hpbGRyZW5baV0gPSB0b1RleHRWTm9kZShjaGlsZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChpc1ZOb2RlKGNoaWxkKSkge1xuXHRcdFx0XHRpZiAoY2hpbGQucHJvcGVydGllcy5iaW5kID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQoY2hpbGQucHJvcGVydGllcyBhcyBhbnkpLmJpbmQgPSBpbnN0YW5jZTtcblx0XHRcdFx0XHRpZiAoY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0ZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgaW5zdGFuY2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCFjaGlsZC5jb3JlUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSkhO1xuXHRcdFx0XHRcdGNoaWxkLmNvcmVQcm9wZXJ0aWVzID0ge1xuXHRcdFx0XHRcdFx0YmluZDogaW5zdGFuY2UsXG5cdFx0XHRcdFx0XHRiYXNlUmVnaXN0cnk6IGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iYXNlUmVnaXN0cnlcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0ZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgaW5zdGFuY2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGkrKztcblx0fVxuXHRyZXR1cm4gY2hpbGRyZW4gYXMgSW50ZXJuYWxETm9kZVtdO1xufVxuXG5mdW5jdGlvbiBub2RlQWRkZWQoZG5vZGU6IEludGVybmFsRE5vZGUsIHRyYW5zaXRpb25zOiBUcmFuc2l0aW9uU3RyYXRlZ3kpIHtcblx0aWYgKGlzVk5vZGUoZG5vZGUpICYmIGRub2RlLnByb3BlcnRpZXMpIHtcblx0XHRjb25zdCBlbnRlckFuaW1hdGlvbiA9IGRub2RlLnByb3BlcnRpZXMuZW50ZXJBbmltYXRpb247XG5cdFx0aWYgKGVudGVyQW5pbWF0aW9uKSB7XG5cdFx0XHRpZiAodHlwZW9mIGVudGVyQW5pbWF0aW9uID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGVudGVyQW5pbWF0aW9uKGRub2RlLmRvbU5vZGUgYXMgRWxlbWVudCwgZG5vZGUucHJvcGVydGllcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cmFuc2l0aW9ucy5lbnRlcihkbm9kZS5kb21Ob2RlIGFzIEVsZW1lbnQsIGRub2RlLnByb3BlcnRpZXMsIGVudGVyQW5pbWF0aW9uIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIG5vZGVUb1JlbW92ZShkbm9kZTogSW50ZXJuYWxETm9kZSwgdHJhbnNpdGlvbnM6IFRyYW5zaXRpb25TdHJhdGVneSwgcHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zKSB7XG5cdGlmIChpc1dOb2RlKGRub2RlKSkge1xuXHRcdGNvbnN0IGl0ZW0gPSBpbnN0YW5jZU1hcC5nZXQoZG5vZGUuaW5zdGFuY2UpO1xuXHRcdGNvbnN0IHJlbmRlcmVkID0gKGl0ZW0gPyBpdGVtLmRub2RlLnJlbmRlcmVkIDogZG5vZGUucmVuZGVyZWQpIHx8IGVtcHR5QXJyYXk7XG5cdFx0aWYgKGRub2RlLmluc3RhbmNlKSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoZG5vZGUuaW5zdGFuY2UpITtcblx0XHRcdGluc3RhbmNlRGF0YS5vbkRldGFjaCgpO1xuXHRcdFx0aW5zdGFuY2VNYXAuZGVsZXRlKGRub2RlLmluc3RhbmNlKTtcblx0XHR9XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJlZC5sZW5ndGg7IGkrKykge1xuXHRcdFx0bm9kZVRvUmVtb3ZlKHJlbmRlcmVkW2ldLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZTtcblx0XHRjb25zdCBwcm9wZXJ0aWVzID0gZG5vZGUucHJvcGVydGllcztcblx0XHRpZiAoZG5vZGUuY2hpbGRyZW4gJiYgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRub2RlVG9SZW1vdmUoZG5vZGUuY2hpbGRyZW5baV0sIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGV4aXRBbmltYXRpb24gPSBwcm9wZXJ0aWVzLmV4aXRBbmltYXRpb247XG5cdFx0aWYgKHByb3BlcnRpZXMgJiYgZXhpdEFuaW1hdGlvbikge1xuXHRcdFx0KGRvbU5vZGUgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG5cdFx0XHRjb25zdCByZW1vdmVEb21Ob2RlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRvbU5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlKTtcblx0XHRcdFx0ZG5vZGUuZG9tTm9kZSA9IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0XHRpZiAodHlwZW9mIGV4aXRBbmltYXRpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0ZXhpdEFuaW1hdGlvbihkb21Ob2RlIGFzIEVsZW1lbnQsIHJlbW92ZURvbU5vZGUsIHByb3BlcnRpZXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cmFuc2l0aW9ucy5leGl0KGRub2RlLmRvbU5vZGUgYXMgRWxlbWVudCwgcHJvcGVydGllcywgZXhpdEFuaW1hdGlvbiBhcyBzdHJpbmcsIHJlbW92ZURvbU5vZGUpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvbU5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlKTtcblx0XHRkbm9kZS5kb21Ob2RlID0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKFxuXHRjaGlsZE5vZGVzOiBJbnRlcm5hbEROb2RlW10sXG5cdGluZGV4VG9DaGVjazogbnVtYmVyLFxuXHRwYXJlbnRJbnN0YW5jZTogRGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2Vcbikge1xuXHRjb25zdCBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2luZGV4VG9DaGVja107XG5cdGlmIChpc1ZOb2RlKGNoaWxkTm9kZSkgJiYgIWNoaWxkTm9kZS50YWcpIHtcblx0XHRyZXR1cm47IC8vIFRleHQgbm9kZXMgbmVlZCBub3QgYmUgZGlzdGluZ3Vpc2hhYmxlXG5cdH1cblx0Y29uc3QgeyBrZXkgfSA9IGNoaWxkTm9kZS5wcm9wZXJ0aWVzO1xuXG5cdGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChpICE9PSBpbmRleFRvQ2hlY2spIHtcblx0XHRcdFx0Y29uc3Qgbm9kZSA9IGNoaWxkTm9kZXNbaV07XG5cdFx0XHRcdGlmIChzYW1lKG5vZGUsIGNoaWxkTm9kZSkpIHtcblx0XHRcdFx0XHRsZXQgbm9kZUlkZW50aWZpZXI6IHN0cmluZztcblx0XHRcdFx0XHRjb25zdCBwYXJlbnROYW1lID0gKHBhcmVudEluc3RhbmNlIGFzIGFueSkuY29uc3RydWN0b3IubmFtZSB8fCAndW5rbm93bic7XG5cdFx0XHRcdFx0aWYgKGlzV05vZGUoY2hpbGROb2RlKSkge1xuXHRcdFx0XHRcdFx0bm9kZUlkZW50aWZpZXIgPSAoY2hpbGROb2RlLndpZGdldENvbnN0cnVjdG9yIGFzIGFueSkubmFtZSB8fCAndW5rbm93bic7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG5vZGVJZGVudGlmaWVyID0gY2hpbGROb2RlLnRhZztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdFx0XHRgQSB3aWRnZXQgKCR7cGFyZW50TmFtZX0pIGhhcyBoYWQgYSBjaGlsZCBhZGRkZWQgb3IgcmVtb3ZlZCwgYnV0IHRoZXkgd2VyZSBub3QgYWJsZSB0byB1bmlxdWVseSBpZGVudGlmaWVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byBwcm92aWRlIGEgdW5pcXVlICdrZXknIHByb3BlcnR5IHdoZW4gdXNpbmcgdGhlIHNhbWUgd2lkZ2V0IG9yIGVsZW1lbnQgKCR7bm9kZUlkZW50aWZpZXJ9KSBtdWx0aXBsZSB0aW1lcyBhcyBzaWJsaW5nc2Bcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuKFxuXHRwYXJlbnRWTm9kZTogSW50ZXJuYWxWTm9kZSxcblx0c2libGluZ3M6IEludGVybmFsRE5vZGVbXSxcblx0b2xkQ2hpbGRyZW46IEludGVybmFsRE5vZGVbXSxcblx0bmV3Q2hpbGRyZW46IEludGVybmFsRE5vZGVbXSxcblx0cGFyZW50SW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLFxuXHRwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnNcbikge1xuXHRvbGRDaGlsZHJlbiA9IG9sZENoaWxkcmVuIHx8IGVtcHR5QXJyYXk7XG5cdG5ld0NoaWxkcmVuID0gbmV3Q2hpbGRyZW47XG5cdGNvbnN0IG9sZENoaWxkcmVuTGVuZ3RoID0gb2xkQ2hpbGRyZW4ubGVuZ3RoO1xuXHRjb25zdCBuZXdDaGlsZHJlbkxlbmd0aCA9IG5ld0NoaWxkcmVuLmxlbmd0aDtcblx0Y29uc3QgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucyE7XG5cdGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKSE7XG5cdHByb2plY3Rpb25PcHRpb25zID0geyAuLi5wcm9qZWN0aW9uT3B0aW9ucywgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoICsgMSB9O1xuXHRsZXQgb2xkSW5kZXggPSAwO1xuXHRsZXQgbmV3SW5kZXggPSAwO1xuXHRsZXQgaTogbnVtYmVyO1xuXHRsZXQgdGV4dFVwZGF0ZWQgPSBmYWxzZTtcblx0d2hpbGUgKG5ld0luZGV4IDwgbmV3Q2hpbGRyZW5MZW5ndGgpIHtcblx0XHRsZXQgb2xkQ2hpbGQgPSBvbGRJbmRleCA8IG9sZENoaWxkcmVuTGVuZ3RoID8gb2xkQ2hpbGRyZW5bb2xkSW5kZXhdIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG5ld0NoaWxkID0gbmV3Q2hpbGRyZW5bbmV3SW5kZXhdO1xuXHRcdGlmIChpc1ZOb2RlKG5ld0NoaWxkKSAmJiB0eXBlb2YgbmV3Q2hpbGQuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdG5ld0NoaWxkLmluc2VydGVkID0gaXNWTm9kZShvbGRDaGlsZCkgJiYgb2xkQ2hpbGQuaW5zZXJ0ZWQ7XG5cdFx0XHRhZGREZWZlcnJlZFByb3BlcnRpZXMobmV3Q2hpbGQsIHByb2plY3Rpb25PcHRpb25zKTtcblx0XHR9XG5cdFx0aWYgKG9sZENoaWxkICE9PSB1bmRlZmluZWQgJiYgc2FtZShvbGRDaGlsZCwgbmV3Q2hpbGQpKSB7XG5cdFx0XHRvbGRJbmRleCsrO1xuXHRcdFx0bmV3SW5kZXgrKztcblx0XHRcdHRleHRVcGRhdGVkID1cblx0XHRcdFx0dXBkYXRlRG9tKFxuXHRcdFx0XHRcdG9sZENoaWxkLFxuXHRcdFx0XHRcdG5ld0NoaWxkLFxuXHRcdFx0XHRcdHByb2plY3Rpb25PcHRpb25zLFxuXHRcdFx0XHRcdHBhcmVudFZOb2RlLFxuXHRcdFx0XHRcdHBhcmVudEluc3RhbmNlLFxuXHRcdFx0XHRcdG9sZENoaWxkcmVuLnNsaWNlKG9sZEluZGV4KSxcblx0XHRcdFx0XHRuZXdDaGlsZHJlbi5zbGljZShuZXdJbmRleClcblx0XHRcdFx0KSB8fCB0ZXh0VXBkYXRlZDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZpbmRPbGRJbmRleCA9IGZpbmRJbmRleE9mQ2hpbGQob2xkQ2hpbGRyZW4sIG5ld0NoaWxkLCBvbGRJbmRleCArIDEpO1xuXHRcdGNvbnN0IGFkZENoaWxkID0gKCkgPT4ge1xuXHRcdFx0bGV0IGluc2VydEJlZm9yZURvbU5vZGU6IE5vZGUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgY2hpbGRyZW5BcnJheSA9IG9sZENoaWxkcmVuO1xuXHRcdFx0bGV0IG5leHRJbmRleCA9IG9sZEluZGV4ICsgMTtcblx0XHRcdGxldCBjaGlsZDogSW50ZXJuYWxETm9kZSA9IG9sZENoaWxkcmVuW29sZEluZGV4XTtcblx0XHRcdGlmICghY2hpbGQpIHtcblx0XHRcdFx0Y2hpbGQgPSBzaWJsaW5nc1swXTtcblx0XHRcdFx0bmV4dEluZGV4ID0gMTtcblx0XHRcdFx0Y2hpbGRyZW5BcnJheSA9IHNpYmxpbmdzO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNoaWxkKSB7XG5cdFx0XHRcdGxldCBpbnNlcnRCZWZvcmVDaGlsZHJlbiA9IFtjaGlsZF07XG5cdFx0XHRcdHdoaWxlIChpbnNlcnRCZWZvcmVDaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb25zdCBpbnNlcnRCZWZvcmUgPSBpbnNlcnRCZWZvcmVDaGlsZHJlbi5zaGlmdCgpITtcblx0XHRcdFx0XHRpZiAoaXNXTm9kZShpbnNlcnRCZWZvcmUpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gaW5zdGFuY2VNYXAuZ2V0KGluc2VydEJlZm9yZS5pbnN0YW5jZSk7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmRub2RlLnJlbmRlcmVkKSB7XG5cdFx0XHRcdFx0XHRcdGluc2VydEJlZm9yZUNoaWxkcmVuLnB1c2goLi4uaXRlbS5kbm9kZS5yZW5kZXJlZCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChpbnNlcnRCZWZvcmUuZG9tTm9kZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoaW5zZXJ0QmVmb3JlLmRvbU5vZGUucGFyZW50RWxlbWVudCAhPT0gcGFyZW50Vk5vZGUuZG9tTm9kZSkge1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGluc2VydEJlZm9yZURvbU5vZGUgPSBpbnNlcnRCZWZvcmUuZG9tTm9kZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChpbnNlcnRCZWZvcmVDaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgY2hpbGRyZW5BcnJheVtuZXh0SW5kZXhdKSB7XG5cdFx0XHRcdFx0XHRpbnNlcnRCZWZvcmVDaGlsZHJlbi5wdXNoKGNoaWxkcmVuQXJyYXlbbmV4dEluZGV4XSk7XG5cdFx0XHRcdFx0XHRuZXh0SW5kZXgrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y3JlYXRlRG9tKFxuXHRcdFx0XHRuZXdDaGlsZCxcblx0XHRcdFx0cGFyZW50Vk5vZGUsXG5cdFx0XHRcdG5ld0NoaWxkcmVuLnNsaWNlKG5ld0luZGV4ICsgMSksXG5cdFx0XHRcdGluc2VydEJlZm9yZURvbU5vZGUsXG5cdFx0XHRcdHByb2plY3Rpb25PcHRpb25zLFxuXHRcdFx0XHRwYXJlbnRJbnN0YW5jZVxuXHRcdFx0KTtcblx0XHRcdG5vZGVBZGRlZChuZXdDaGlsZCwgdHJhbnNpdGlvbnMpO1xuXHRcdFx0Y29uc3QgaW5kZXhUb0NoZWNrID0gbmV3SW5kZXg7XG5cdFx0XHRwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcblx0XHRcdFx0Y2hlY2tEaXN0aW5ndWlzaGFibGUobmV3Q2hpbGRyZW4sIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdGlmICghb2xkQ2hpbGQgfHwgZmluZE9sZEluZGV4ID09PSAtMSkge1xuXHRcdFx0YWRkQ2hpbGQoKTtcblx0XHRcdG5ld0luZGV4Kys7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCByZW1vdmVDaGlsZCA9ICgpID0+IHtcblx0XHRcdGNvbnN0IGluZGV4VG9DaGVjayA9IG9sZEluZGV4O1xuXHRcdFx0cHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG5cdFx0XHRcdGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGlzV05vZGUob2xkQ2hpbGQpKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSBpbnN0YW5jZU1hcC5nZXQob2xkQ2hpbGQuaW5zdGFuY2UpO1xuXHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdG9sZENoaWxkID0gaXRlbS5kbm9kZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bm9kZVRvUmVtb3ZlKG9sZENoaWxkISwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcblx0XHR9O1xuXHRcdGNvbnN0IGZpbmROZXdJbmRleCA9IGZpbmRJbmRleE9mQ2hpbGQobmV3Q2hpbGRyZW4sIG9sZENoaWxkLCBuZXdJbmRleCArIDEpO1xuXG5cdFx0aWYgKGZpbmROZXdJbmRleCA9PT0gLTEpIHtcblx0XHRcdHJlbW92ZUNoaWxkKCk7XG5cdFx0XHRvbGRJbmRleCsrO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YWRkQ2hpbGQoKTtcblx0XHRyZW1vdmVDaGlsZCgpO1xuXHRcdG9sZEluZGV4Kys7XG5cdFx0bmV3SW5kZXgrKztcblx0fVxuXHRpZiAob2xkQ2hpbGRyZW5MZW5ndGggPiBvbGRJbmRleCkge1xuXHRcdC8vIFJlbW92ZSBjaGlsZCBmcmFnbWVudHNcblx0XHRmb3IgKGkgPSBvbGRJbmRleDsgaSA8IG9sZENoaWxkcmVuTGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGluZGV4VG9DaGVjayA9IGk7XG5cdFx0XHRwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcblx0XHRcdFx0Y2hlY2tEaXN0aW5ndWlzaGFibGUob2xkQ2hpbGRyZW4sIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpO1xuXHRcdFx0fSk7XG5cdFx0XHRsZXQgY2hpbGRUb1JlbW92ZSA9IG9sZENoaWxkcmVuW2ldO1xuXHRcdFx0aWYgKGlzV05vZGUoY2hpbGRUb1JlbW92ZSkpIHtcblx0XHRcdFx0Y29uc3QgaXRlbSA9IGluc3RhbmNlTWFwLmdldChjaGlsZFRvUmVtb3ZlLmluc3RhbmNlKTtcblx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRjaGlsZFRvUmVtb3ZlID0gaXRlbS5kbm9kZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bm9kZVRvUmVtb3ZlKGNoaWxkVG9SZW1vdmUsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0ZXh0VXBkYXRlZDtcbn1cblxuZnVuY3Rpb24gYWRkQ2hpbGRyZW4oXG5cdHBhcmVudFZOb2RlOiBJbnRlcm5hbFZOb2RlLFxuXHRjaGlsZHJlbjogSW50ZXJuYWxETm9kZVtdIHwgdW5kZWZpbmVkLFxuXHRwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnMsXG5cdHBhcmVudEluc3RhbmNlOiBEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZSxcblx0aW5zZXJ0QmVmb3JlOiBOb2RlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuXHRjaGlsZE5vZGVzPzogKEVsZW1lbnQgfCBUZXh0KVtdXG4pIHtcblx0aWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSkhO1xuXHRpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hpbGROb2RlcyA9IGFycmF5RnJvbShwYXJlbnRWTm9kZS5kb21Ob2RlIS5jaGlsZE5vZGVzKSBhcyAoRWxlbWVudCB8IFRleHQpW107XG5cdH1cblx0Y29uc3QgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucyE7XG5cdHByb2plY3Rpb25PcHRpb25zID0geyAuLi5wcm9qZWN0aW9uT3B0aW9ucywgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoICsgMSB9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuXHRcdGNvbnN0IG5leHRTaWJsaW5ncyA9IGNoaWxkcmVuLnNsaWNlKGkgKyAxKTtcblxuXHRcdGlmIChpc1ZOb2RlKGNoaWxkKSkge1xuXHRcdFx0aWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIGNoaWxkTm9kZXMpIHtcblx0XHRcdFx0bGV0IGRvbUVsZW1lbnQ6IEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHdoaWxlIChjaGlsZC5kb21Ob2RlID09PSB1bmRlZmluZWQgJiYgY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0ZG9tRWxlbWVudCA9IGNoaWxkTm9kZXMuc2hpZnQoKSBhcyBFbGVtZW50O1xuXHRcdFx0XHRcdGlmIChkb21FbGVtZW50ICYmIGRvbUVsZW1lbnQudGFnTmFtZSA9PT0gKGNoaWxkLnRhZy50b1VwcGVyQ2FzZSgpIHx8IHVuZGVmaW5lZCkpIHtcblx0XHRcdFx0XHRcdGNoaWxkLmRvbU5vZGUgPSBkb21FbGVtZW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y3JlYXRlRG9tKGNoaWxkLCBwYXJlbnRWTm9kZSwgbmV4dFNpYmxpbmdzLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNyZWF0ZURvbShjaGlsZCwgcGFyZW50Vk5vZGUsIG5leHRTaWJsaW5ncywgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGNoaWxkTm9kZXMpO1xuXHRcdH1cblx0XHRub2RlQWRkZWQoY2hpbGQsIHRyYW5zaXRpb25zKTtcblx0fVxufVxuXG5mdW5jdGlvbiBpbml0UHJvcGVydGllc0FuZENoaWxkcmVuKFxuXHRkb21Ob2RlOiBFbGVtZW50LFxuXHRkbm9kZTogSW50ZXJuYWxWTm9kZSxcblx0cGFyZW50SW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLFxuXHRwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnNcbikge1xuXHRhZGRDaGlsZHJlbihkbm9kZSwgZG5vZGUuY2hpbGRyZW4sIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgdW5kZWZpbmVkKTtcblx0aWYgKHR5cGVvZiBkbm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyAmJiBkbm9kZS5pbnNlcnRlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0YWRkRGVmZXJyZWRQcm9wZXJ0aWVzKGRub2RlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdH1cblxuXHRpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcblx0XHR1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGUsIHt9LCBkbm9kZS5hdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0dXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCB7fSwgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIGZhbHNlKTtcblx0XHRyZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCB7fSwgZG5vZGUuZXZlbnRzLCBwcm9qZWN0aW9uT3B0aW9ucywgdHJ1ZSk7XG5cdFx0Y29uc3QgZXZlbnRzID0gZG5vZGUuZXZlbnRzO1xuXHRcdE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnQpID0+IHtcblx0XHRcdHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50LCBldmVudHNbZXZlbnRdLCBwcm9qZWN0aW9uT3B0aW9ucywgZG5vZGUucHJvcGVydGllcy5iaW5kKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdH1cblx0aWYgKGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSBudWxsICYmIGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpITtcblx0XHRpbnN0YW5jZURhdGEubm9kZUhhbmRsZXIuYWRkKGRvbU5vZGUgYXMgSFRNTEVsZW1lbnQsIGAke2Rub2RlLnByb3BlcnRpZXMua2V5fWApO1xuXHR9XG5cdGRub2RlLmluc2VydGVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRG9tKFxuXHRkbm9kZTogSW50ZXJuYWxETm9kZSxcblx0cGFyZW50Vk5vZGU6IEludGVybmFsVk5vZGUsXG5cdG5leHRTaWJsaW5nczogSW50ZXJuYWxETm9kZVtdLFxuXHRpbnNlcnRCZWZvcmU6IE5vZGUgfCB1bmRlZmluZWQsXG5cdHByb2plY3Rpb25PcHRpb25zOiBQcm9qZWN0aW9uT3B0aW9ucyxcblx0cGFyZW50SW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLFxuXHRjaGlsZE5vZGVzPzogKEVsZW1lbnQgfCBUZXh0KVtdXG4pIHtcblx0bGV0IGRvbU5vZGU6IEVsZW1lbnQgfCBUZXh0IHwgdW5kZWZpbmVkO1xuXHRjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSkhO1xuXHRpZiAoaXNXTm9kZShkbm9kZSkpIHtcblx0XHRsZXQgeyB3aWRnZXRDb25zdHJ1Y3RvciB9ID0gZG5vZGU7XG5cdFx0Y29uc3QgcGFyZW50SW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKSE7XG5cdFx0aWYgKCFpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcjxEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZT4od2lkZ2V0Q29uc3RydWN0b3IpKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gcGFyZW50SW5zdGFuY2VEYXRhLnJlZ2lzdHJ5KCkuZ2V0PERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlPih3aWRnZXRDb25zdHJ1Y3Rvcik7XG5cdFx0XHRpZiAoaXRlbSA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR3aWRnZXRDb25zdHJ1Y3RvciA9IGl0ZW07XG5cdFx0fVxuXHRcdGNvbnN0IGluc3RhbmNlID0gbmV3IHdpZGdldENvbnN0cnVjdG9yKCk7XG5cdFx0ZG5vZGUuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblx0XHRuZXh0U2libGluZ01hcC5zZXQoaW5zdGFuY2UsIG5leHRTaWJsaW5ncyk7XG5cdFx0Y29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKSE7XG5cdFx0aW5zdGFuY2VEYXRhLmludmFsaWRhdGUgPSAoKSA9PiB7XG5cdFx0XHRpbnN0YW5jZURhdGEuZGlydHkgPSB0cnVlO1xuXHRcdFx0aWYgKGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlLnB1c2goeyBpbnN0YW5jZSwgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoIH0pO1xuXHRcdFx0XHRzY2hlZHVsZVJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gdHJ1ZTtcblx0XHRpbnN0YW5jZS5fX3NldENvcmVQcm9wZXJ0aWVzX18oZG5vZGUuY29yZVByb3BlcnRpZXMpO1xuXHRcdGluc3RhbmNlLl9fc2V0Q2hpbGRyZW5fXyhkbm9kZS5jaGlsZHJlbik7XG5cdFx0aW5zdGFuY2UuX19zZXRQcm9wZXJ0aWVzX18oZG5vZGUucHJvcGVydGllcyk7XG5cdFx0Y29uc3QgcmVuZGVyZWQgPSBpbnN0YW5jZS5fX3JlbmRlcl9fKCk7XG5cdFx0aW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xuXHRcdGlmIChyZW5kZXJlZCkge1xuXHRcdFx0Y29uc3QgZmlsdGVyZWRSZW5kZXJlZCA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4ocmVuZGVyZWQsIGluc3RhbmNlKTtcblx0XHRcdGRub2RlLnJlbmRlcmVkID0gZmlsdGVyZWRSZW5kZXJlZDtcblx0XHRcdGFkZENoaWxkcmVuKHBhcmVudFZOb2RlLCBmaWx0ZXJlZFJlbmRlcmVkLCBwcm9qZWN0aW9uT3B0aW9ucywgaW5zdGFuY2UsIGluc2VydEJlZm9yZSwgY2hpbGROb2Rlcyk7XG5cdFx0fVxuXHRcdGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZSwgcGFyZW50Vk5vZGUgfSk7XG5cdFx0aW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZFJvb3QoKTtcblx0XHRwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcblx0XHRcdGluc3RhbmNlRGF0YS5vbkF0dGFjaCgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChwcm9qZWN0b3JTdGF0ZS5tZXJnZSAmJiBwcm9qZWN0b3JTdGF0ZS5tZXJnZUVsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnQ7XG5cdFx0XHRwcm9qZWN0b3JTdGF0ZS5tZXJnZUVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cdFx0XHRpbml0UHJvcGVydGllc0FuZENoaWxkcmVuKGRvbU5vZGUhLCBkbm9kZSwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZG9jID0gcGFyZW50Vk5vZGUuZG9tTm9kZSEub3duZXJEb2N1bWVudDtcblx0XHRpZiAoIWRub2RlLnRhZyAmJiB0eXBlb2YgZG5vZGUudGV4dCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGlmIChkbm9kZS5kb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgcGFyZW50Vk5vZGUuZG9tTm9kZSkge1xuXHRcdFx0XHRjb25zdCBuZXdEb21Ob2RlID0gZG5vZGUuZG9tTm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRub2RlLnRleHQhKTtcblx0XHRcdFx0aWYgKHBhcmVudFZOb2RlLmRvbU5vZGUgPT09IGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZSkge1xuXHRcdFx0XHRcdHBhcmVudFZOb2RlLmRvbU5vZGUucmVwbGFjZUNoaWxkKG5ld0RvbU5vZGUsIGRub2RlLmRvbU5vZGUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQobmV3RG9tTm9kZSk7XG5cdFx0XHRcdFx0ZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlICYmIGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkbm9kZS5kb21Ob2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkbm9kZS5kb21Ob2RlID0gbmV3RG9tTm9kZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKGRub2RlLnRleHQhKTtcblx0XHRcdFx0aWYgKGluc2VydEJlZm9yZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cGFyZW50Vk5vZGUuZG9tTm9kZSEuaW5zZXJ0QmVmb3JlKGRvbU5vZGUsIGluc2VydEJlZm9yZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFyZW50Vk5vZGUuZG9tTm9kZSEuYXBwZW5kQ2hpbGQoZG9tTm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGRub2RlLmRvbU5vZGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAoZG5vZGUudGFnID09PSAnc3ZnJykge1xuXHRcdFx0XHRcdHByb2plY3Rpb25PcHRpb25zID0geyAuLi5wcm9qZWN0aW9uT3B0aW9ucywgLi4ueyBuYW1lc3BhY2U6IE5BTUVTUEFDRV9TVkcgfSB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UsIGRub2RlLnRhZyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlIHx8IGRvYy5jcmVhdGVFbGVtZW50KGRub2RlLnRhZyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlO1xuXHRcdFx0fVxuXHRcdFx0aW5pdFByb3BlcnRpZXNBbmRDaGlsZHJlbihkb21Ob2RlISBhcyBFbGVtZW50LCBkbm9kZSwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcblx0XHRcdGlmIChpbnNlcnRCZWZvcmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJlbnRWTm9kZS5kb21Ob2RlIS5pbnNlcnRCZWZvcmUoZG9tTm9kZSwgaW5zZXJ0QmVmb3JlKTtcblx0XHRcdH0gZWxzZSBpZiAoZG9tTm9kZSEucGFyZW50Tm9kZSAhPT0gcGFyZW50Vk5vZGUuZG9tTm9kZSEpIHtcblx0XHRcdFx0cGFyZW50Vk5vZGUuZG9tTm9kZSEuYXBwZW5kQ2hpbGQoZG9tTm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURvbShcblx0cHJldmlvdXM6IGFueSxcblx0ZG5vZGU6IEludGVybmFsRE5vZGUsXG5cdHByb2plY3Rpb25PcHRpb25zOiBQcm9qZWN0aW9uT3B0aW9ucyxcblx0cGFyZW50Vk5vZGU6IEludGVybmFsVk5vZGUsXG5cdHBhcmVudEluc3RhbmNlOiBEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZSxcblx0b2xkTmV4dFNpYmxpbmdzOiBJbnRlcm5hbEROb2RlW10sXG5cdG5leHRTaWJsaW5nczogSW50ZXJuYWxETm9kZVtdXG4pIHtcblx0aWYgKGlzV05vZGUoZG5vZGUpKSB7XG5cdFx0Y29uc3QgeyBpbnN0YW5jZSB9ID0gcHJldmlvdXM7XG5cdFx0Y29uc3QgeyBwYXJlbnRWTm9kZSwgZG5vZGU6IG5vZGUgfSA9IGluc3RhbmNlTWFwLmdldChpbnN0YW5jZSkhO1xuXHRcdGNvbnN0IHByZXZpb3VzUmVuZGVyZWQgPSBub2RlID8gbm9kZS5yZW5kZXJlZCA6IHByZXZpb3VzLnJlbmRlcmVkO1xuXHRcdGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSkhO1xuXHRcdGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSB0cnVlO1xuXHRcdGluc3RhbmNlLl9fc2V0Q29yZVByb3BlcnRpZXNfXyhkbm9kZS5jb3JlUHJvcGVydGllcyk7XG5cdFx0aW5zdGFuY2UuX19zZXRDaGlsZHJlbl9fKGRub2RlLmNoaWxkcmVuKTtcblx0XHRpbnN0YW5jZS5fX3NldFByb3BlcnRpZXNfXyhkbm9kZS5wcm9wZXJ0aWVzKTtcblx0XHRuZXh0U2libGluZ01hcC5zZXQoaW5zdGFuY2UsIG5leHRTaWJsaW5ncyk7XG5cdFx0ZG5vZGUuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblx0XHRpZiAoaW5zdGFuY2VEYXRhLmRpcnR5ID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCByZW5kZXJlZCA9IGluc3RhbmNlLl9fcmVuZGVyX18oKTtcblx0XHRcdGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcblx0XHRcdGRub2RlLnJlbmRlcmVkID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihyZW5kZXJlZCwgaW5zdGFuY2UpO1xuXHRcdFx0dXBkYXRlQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIG9sZE5leHRTaWJsaW5ncywgcHJldmlvdXNSZW5kZXJlZCwgZG5vZGUucmVuZGVyZWQsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcblx0XHRcdGRub2RlLnJlbmRlcmVkID0gcHJldmlvdXNSZW5kZXJlZDtcblx0XHR9XG5cdFx0aW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlLCBwYXJlbnRWTm9kZSB9KTtcblx0XHRpbnN0YW5jZURhdGEubm9kZUhhbmRsZXIuYWRkUm9vdCgpO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChwcmV2aW91cyA9PT0gZG5vZGUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgZG9tTm9kZSA9IChkbm9kZS5kb21Ob2RlID0gcHJldmlvdXMuZG9tTm9kZSk7XG5cdFx0bGV0IHRleHRVcGRhdGVkID0gZmFsc2U7XG5cdFx0bGV0IHVwZGF0ZWQgPSBmYWxzZTtcblx0XHRpZiAoIWRub2RlLnRhZyAmJiB0eXBlb2YgZG5vZGUudGV4dCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGlmIChkbm9kZS50ZXh0ICE9PSBwcmV2aW91cy50ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG5ld0RvbU5vZGUgPSBkb21Ob2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCEpO1xuXHRcdFx0XHRkb21Ob2RlLnBhcmVudE5vZGUhLnJlcGxhY2VDaGlsZChuZXdEb21Ob2RlLCBkb21Ob2RlKTtcblx0XHRcdFx0ZG5vZGUuZG9tTm9kZSA9IG5ld0RvbU5vZGU7XG5cdFx0XHRcdHRleHRVcGRhdGVkID0gdHJ1ZTtcblx0XHRcdFx0cmV0dXJuIHRleHRVcGRhdGVkO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoZG5vZGUudGFnICYmIGRub2RlLnRhZy5sYXN0SW5kZXhPZignc3ZnJywgMCkgPT09IDApIHtcblx0XHRcdFx0cHJvamVjdGlvbk9wdGlvbnMgPSB7IC4uLnByb2plY3Rpb25PcHRpb25zLCAuLi57IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9IH07XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJldmlvdXMuY2hpbGRyZW4gIT09IGRub2RlLmNoaWxkcmVuKSB7XG5cdFx0XHRcdGNvbnN0IGNoaWxkcmVuID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihkbm9kZS5jaGlsZHJlbiwgcGFyZW50SW5zdGFuY2UpO1xuXHRcdFx0XHRkbm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuXHRcdFx0XHR1cGRhdGVkID1cblx0XHRcdFx0XHR1cGRhdGVDaGlsZHJlbihcblx0XHRcdFx0XHRcdGRub2RlLFxuXHRcdFx0XHRcdFx0b2xkTmV4dFNpYmxpbmdzLFxuXHRcdFx0XHRcdFx0cHJldmlvdXMuY2hpbGRyZW4sXG5cdFx0XHRcdFx0XHRjaGlsZHJlbixcblx0XHRcdFx0XHRcdHBhcmVudEluc3RhbmNlLFxuXHRcdFx0XHRcdFx0cHJvamVjdGlvbk9wdGlvbnNcblx0XHRcdFx0XHQpIHx8IHVwZGF0ZWQ7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHByZXZpb3VzUHJvcGVydGllcyA9IGJ1aWxkUHJldmlvdXNQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzLCBkbm9kZSk7XG5cdFx0XHRpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcblx0XHRcdFx0dXBkYXRlQXR0cmlidXRlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuYXR0cmlidXRlcywgZG5vZGUuYXR0cmlidXRlcywgcHJvamVjdGlvbk9wdGlvbnMpO1xuXHRcdFx0XHR1cGRhdGVkID1cblx0XHRcdFx0XHR1cGRhdGVQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdFx0ZG9tTm9kZSxcblx0XHRcdFx0XHRcdHByZXZpb3VzUHJvcGVydGllcy5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0ZG5vZGUucHJvcGVydGllcyxcblx0XHRcdFx0XHRcdHByb2plY3Rpb25PcHRpb25zLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpIHx8IHVwZGF0ZWQ7XG5cdFx0XHRcdHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5ldmVudHMsIGRub2RlLmV2ZW50cywgcHJvamVjdGlvbk9wdGlvbnMsIHRydWUpO1xuXHRcdFx0XHRjb25zdCBldmVudHMgPSBkbm9kZS5ldmVudHM7XG5cdFx0XHRcdE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHR1cGRhdGVFdmVudChcblx0XHRcdFx0XHRcdGRvbU5vZGUsXG5cdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdGV2ZW50c1tldmVudF0sXG5cdFx0XHRcdFx0XHRwcm9qZWN0aW9uT3B0aW9ucyxcblx0XHRcdFx0XHRcdGRub2RlLnByb3BlcnRpZXMuYmluZCxcblx0XHRcdFx0XHRcdHByZXZpb3VzUHJvcGVydGllcy5ldmVudHNbZXZlbnRdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR1cGRhdGVkID1cblx0XHRcdFx0XHR1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5wcm9wZXJ0aWVzLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucykgfHxcblx0XHRcdFx0XHR1cGRhdGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZG5vZGUucHJvcGVydGllcy5rZXkgIT09IG51bGwgJiYgZG5vZGUucHJvcGVydGllcy5rZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpITtcblx0XHRcdFx0aW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZChkb21Ob2RlLCBgJHtkbm9kZS5wcm9wZXJ0aWVzLmtleX1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHVwZGF0ZWQgJiYgZG5vZGUucHJvcGVydGllcyAmJiBkbm9kZS5wcm9wZXJ0aWVzLnVwZGF0ZUFuaW1hdGlvbikge1xuXHRcdFx0ZG5vZGUucHJvcGVydGllcy51cGRhdGVBbmltYXRpb24oZG9tTm9kZSBhcyBFbGVtZW50LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcmV2aW91cy5wcm9wZXJ0aWVzKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKHZub2RlOiBJbnRlcm5hbFZOb2RlLCBwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnMpIHtcblx0Ly8gdHJhbnNmZXIgYW55IHByb3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkIC0gYXMgdGhlc2UgbXVzdCBiZSBkZWNvcmF0ZWQgcHJvcGVydGllc1xuXHR2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMgPSB2bm9kZS5wcm9wZXJ0aWVzO1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gdm5vZGUuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2shKCEhdm5vZGUuaW5zZXJ0ZWQpO1xuXHRjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSkhO1xuXHR2bm9kZS5wcm9wZXJ0aWVzID0geyAuLi5wcm9wZXJ0aWVzLCAuLi52bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMgfTtcblx0cHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydGllcyA9IHtcblx0XHRcdC4uLnZub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrISghIXZub2RlLmluc2VydGVkKSxcblx0XHRcdC4uLnZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllc1xuXHRcdH07XG5cdFx0dXBkYXRlUHJvcGVydGllcyh2bm9kZS5kb21Ob2RlISBhcyBFbGVtZW50LCB2bm9kZS5wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XG5cdFx0dm5vZGUucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9uczogUHJvamVjdGlvbk9wdGlvbnMpIHtcblx0Y29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpITtcblx0aWYgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuXHRcdGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XG5cdFx0XHR3aGlsZSAocHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcblx0XHRcdFx0Y2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Z2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XG5cdFx0XHRcdFx0Y2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zOiBQcm9qZWN0aW9uT3B0aW9ucykge1xuXHRjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSkhO1xuXHRpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xuXHRcdHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcblx0XHRcdGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChnbG9iYWwucmVxdWVzdElkbGVDYWxsYmFjaykge1xuXHRcdFx0Z2xvYmFsLnJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdFx0XHR3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xuXHRcdFx0XHRcdGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0d2hpbGUgKHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcblx0XHRcdFx0XHRjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVSZW5kZXIocHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zKSB7XG5cdGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKSE7XG5cdGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XG5cdFx0cmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcblx0fSBlbHNlIGlmIChwcm9qZWN0b3JTdGF0ZS5yZW5kZXJTY2hlZHVsZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0cmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXIocHJvamVjdGlvbk9wdGlvbnM6IFByb2plY3Rpb25PcHRpb25zKSB7XG5cdGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKSE7XG5cdHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IHVuZGVmaW5lZDtcblx0Y29uc3QgcmVuZGVyUXVldWUgPSBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZTtcblx0Y29uc3QgcmVuZGVycyA9IFsuLi5yZW5kZXJRdWV1ZV07XG5cdHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlID0gW107XG5cdHJlbmRlcnMuc29ydCgoYSwgYikgPT4gYS5kZXB0aCAtIGIuZGVwdGgpO1xuXHRjb25zdCBwcmV2aW91c2x5UmVuZGVyZWQgPSBbXTtcblx0d2hpbGUgKHJlbmRlcnMubGVuZ3RoKSB7XG5cdFx0Y29uc3QgeyBpbnN0YW5jZSB9ID0gcmVuZGVycy5zaGlmdCgpITtcblx0XHRpZiAoaW5zdGFuY2VNYXAuaGFzKGluc3RhbmNlKSAmJiBwcmV2aW91c2x5UmVuZGVyZWQuaW5kZXhPZihpbnN0YW5jZSkgPT09IC0xKSB7XG5cdFx0XHRwcmV2aW91c2x5UmVuZGVyZWQucHVzaChpbnN0YW5jZSk7XG5cdFx0XHRjb25zdCB7IHBhcmVudFZOb2RlLCBkbm9kZSB9ID0gaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKSE7XG5cdFx0XHRjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpITtcblx0XHRcdGNvbnN0IG5leHRTaWJsaW5ncyA9IG5leHRTaWJsaW5nTWFwLmdldChpbnN0YW5jZSkhO1xuXHRcdFx0dXBkYXRlRG9tKFxuXHRcdFx0XHRkbm9kZSxcblx0XHRcdFx0dG9JbnRlcm5hbFdOb2RlKGluc3RhbmNlLCBpbnN0YW5jZURhdGEpLFxuXHRcdFx0XHRwcm9qZWN0aW9uT3B0aW9ucyxcblx0XHRcdFx0cGFyZW50Vk5vZGUsXG5cdFx0XHRcdGluc3RhbmNlLFxuXHRcdFx0XHRuZXh0U2libGluZ3MsXG5cdFx0XHRcdG5leHRTaWJsaW5nc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpO1xuXHRydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucyk7XG59XG5cbmV4cG9ydCBjb25zdCBkb20gPSB7XG5cdGFwcGVuZDogZnVuY3Rpb24oXG5cdFx0cGFyZW50Tm9kZTogRWxlbWVudCxcblx0XHRpbnN0YW5jZTogRGVmYXVsdFdpZGdldEJhc2VJbnRlcmZhY2UsXG5cdFx0cHJvamVjdGlvbk9wdGlvbnM6IFBhcnRpYWw8UHJvamVjdGlvbk9wdGlvbnM+ID0ge31cblx0KTogUHJvamVjdGlvbiB7XG5cdFx0Y29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKSE7XG5cdFx0Y29uc3QgZmluYWxQcm9qZWN0b3JPcHRpb25zID0gZ2V0UHJvamVjdGlvbk9wdGlvbnMocHJvamVjdGlvbk9wdGlvbnMsIGluc3RhbmNlKTtcblx0XHRjb25zdCBwcm9qZWN0b3JTdGF0ZTogUHJvamVjdG9yU3RhdGUgPSB7XG5cdFx0XHRhZnRlclJlbmRlckNhbGxiYWNrczogW10sXG5cdFx0XHRkZWZlcnJlZFJlbmRlckNhbGxiYWNrczogW10sXG5cdFx0XHRub2RlTWFwOiBuZXcgV2Vha01hcCgpLFxuXHRcdFx0cmVuZGVyU2NoZWR1bGVkOiB1bmRlZmluZWQsXG5cdFx0XHRyZW5kZXJRdWV1ZTogW10sXG5cdFx0XHRtZXJnZTogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgfHwgZmFsc2UsXG5cdFx0XHRtZXJnZUVsZW1lbnQ6IHByb2plY3Rpb25PcHRpb25zLm1lcmdlRWxlbWVudFxuXHRcdH07XG5cdFx0cHJvamVjdG9yU3RhdGVNYXAuc2V0KGluc3RhbmNlLCBwcm9qZWN0b3JTdGF0ZSk7XG5cblx0XHRmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUgPSBwYXJlbnROb2RlO1xuXHRcdGNvbnN0IHBhcmVudFZOb2RlID0gdG9QYXJlbnRWTm9kZShmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUpO1xuXHRcdGNvbnN0IG5vZGUgPSB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSk7XG5cdFx0aW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlOiBub2RlLCBwYXJlbnRWTm9kZSB9KTtcblx0XHRpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9ICgpID0+IHtcblx0XHRcdGluc3RhbmNlRGF0YS5kaXJ0eSA9IHRydWU7XG5cdFx0XHRpZiAoaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWUucHVzaCh7IGluc3RhbmNlLCBkZXB0aDogZmluYWxQcm9qZWN0b3JPcHRpb25zLmRlcHRoIH0pO1xuXHRcdFx0XHRzY2hlZHVsZVJlbmRlcihmaW5hbFByb2plY3Rvck9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dXBkYXRlRG9tKG5vZGUsIG5vZGUsIGZpbmFsUHJvamVjdG9yT3B0aW9ucywgcGFyZW50Vk5vZGUsIGluc3RhbmNlLCBbXSwgW10pO1xuXHRcdHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuXHRcdFx0aW5zdGFuY2VEYXRhLm9uQXR0YWNoKCk7XG5cdFx0fSk7XG5cdFx0cnVuRGVmZXJyZWRSZW5kZXJDYWxsYmFja3MoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcblx0XHRydW5BZnRlclJlbmRlckNhbGxiYWNrcyhmaW5hbFByb2plY3Rvck9wdGlvbnMpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRkb21Ob2RlOiBmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGVcblx0XHR9O1xuXHR9LFxuXHRjcmVhdGU6IGZ1bmN0aW9uKGluc3RhbmNlOiBEZWZhdWx0V2lkZ2V0QmFzZUludGVyZmFjZSwgcHJvamVjdGlvbk9wdGlvbnM/OiBQYXJ0aWFsPFByb2plY3Rpb25PcHRpb25zPik6IFByb2plY3Rpb24ge1xuXHRcdHJldHVybiB0aGlzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcblx0fSxcblx0bWVyZ2U6IGZ1bmN0aW9uKFxuXHRcdGVsZW1lbnQ6IEVsZW1lbnQsXG5cdFx0aW5zdGFuY2U6IERlZmF1bHRXaWRnZXRCYXNlSW50ZXJmYWNlLFxuXHRcdHByb2plY3Rpb25PcHRpb25zOiBQYXJ0aWFsPFByb2plY3Rpb25PcHRpb25zPiA9IHt9XG5cdCk6IFByb2plY3Rpb24ge1xuXHRcdHByb2plY3Rpb25PcHRpb25zLm1lcmdlID0gdHJ1ZTtcblx0XHRwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnQgPSBlbGVtZW50O1xuXHRcdGNvbnN0IHByb2plY3Rpb24gPSB0aGlzLmFwcGVuZChlbGVtZW50LnBhcmVudE5vZGUgYXMgRWxlbWVudCwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcblx0XHRjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChpbnN0YW5jZSkhO1xuXHRcdHByb2plY3RvclN0YXRlLm1lcmdlID0gZmFsc2U7XG5cdFx0cmV0dXJuIHByb2plY3Rpb247XG5cdH1cbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gdmRvbS50cyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikodHJ1ZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuc1VtVWk0U2gge1xcblxcdGhlaWdodDogMTAwJTtcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5fMk1rNlJkcWEge1xcblxcdGNvbG9yOiAjZmZmO1xcblxcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG5cXHRtYXJnaW46IDAgNi40cHg7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdGRpc3BsYXk6IC13ZWJraXQtYm94O1xcblxcdGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcblxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0LXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcXG5cXHQtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcXG5cXHQgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuXFx0ICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcblxcdC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcXG5cXHQgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcblxcdCAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXFx0aGVpZ2h0OiA0OHB4O1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLl8yTWs2UmRxYTo6YWZ0ZXIge1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdGNvbnRlbnQ6IFxcXCJcXFwiO1xcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxuXFx0aGVpZ2h0OiAycHg7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGJvdHRvbTogMDtcXG5cXHQtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXG5cXHR0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxuXFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxuXFx0LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTtcXG5cXHQgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgzcHgpO1xcbn1cXG5cXG4uXzEtZjNJdE9oOjphZnRlciB7XFxuXFx0LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxuXFx0ICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxufVxcblwiLCBcIlwiLCB7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCIvVXNlcnMvYnJ5YW4vUHJvamVjdHMvZG9qbzIvY2xpLWJ1aWxkLXdpZGdldC90ZXN0LWFwcC9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0NBQ0MsYUFBYTtDQUNiLHNCQUFzQjtDQUN0Qjs7QUFFRDtDQUNDLFlBQVk7Q0FDWixzQkFBc0I7Q0FDdEIsZ0JBQWdCO0NBQ2hCLG1CQUFtQjtDQUNuQixxQkFBcUI7Q0FDckIscUJBQXFCO0NBQ3JCLGNBQWM7Q0FDZCw2QkFBNkI7Q0FDN0IsOEJBQThCO0tBQzFCLDJCQUEyQjtTQUN2Qix1QkFBdUI7Q0FDL0IseUJBQXlCO0tBQ3JCLHNCQUFzQjtTQUNsQix3QkFBd0I7Q0FDaEMsYUFBYTtDQUNiLGdCQUFnQjtDQUNoQjs7QUFFRDtDQUNDLGVBQWU7Q0FDZixZQUFZO0NBQ1osaUJBQWlCO0NBQ2pCLFlBQVk7Q0FDWixtQkFBbUI7Q0FDbkIsWUFBWTtDQUNaLFVBQVU7Q0FDVixtREFBbUQ7Q0FDbkQsMkNBQTJDO0NBQzNDLG1DQUFtQztDQUNuQyxtRUFBbUU7Q0FDbkUsbUNBQW1DO1NBQzNCLDJCQUEyQjtDQUNuQzs7QUFFRDtDQUNDLGlDQUFpQztTQUN6Qix5QkFBeUI7Q0FDakNcIixcImZpbGVcIjpcIm1lbnVJdGVtLm0uY3NzXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5yb290IHtcXG5cXHRoZWlnaHQ6IDEwMCU7XFxuXFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG5cXG4uaXRlbSB7XFxuXFx0Y29sb3I6ICNmZmY7XFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcblxcdG1hcmdpbjogMCA2LjRweDtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFx0ZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuXFx0ZGlzcGxheTogLW1zLWZsZXhib3g7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHQtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xcblxcdC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xcblxcdCAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG5cXHQgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuXFx0LXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xcblxcdCAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuXFx0ICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG5cXHRoZWlnaHQ6IDQ4cHg7XFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uaXRlbTo6YWZ0ZXIge1xcblxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdGNvbnRlbnQ6IFxcXCJcXFwiO1xcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxuXFx0aGVpZ2h0OiAycHg7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGJvdHRvbTogMDtcXG5cXHQtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXG5cXHR0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxuXFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxuXFx0LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTtcXG5cXHQgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgzcHgpO1xcbn1cXG5cXG4uc2VsZWN0ZWQ6OmFmdGVyIHtcXG5cXHQtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG5cXHQgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG5cbi8vIGV4cG9ydHNcbmV4cG9ydHMubG9jYWxzID0ge1wiIF9rZXlcIjogXCJ0ZXN0LWFwcC9tZW51SXRlbVwiLFxuXHRcInJvb3RcIjogXCJzVW1VaTRTaFwiLFxuXHRcIml0ZW1cIjogXCJfMk1rNlJkcWFcIixcblx0XCJzZWxlY3RlZFwiOiBcIl8xLWYzSXRPaFwiXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlcj97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPWNzcyEuL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3Ncbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKSh0cnVlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5fM2JBNmpkU24ge1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdHRvcDogMDtcXG5cXHRoZWlnaHQ6IDQ4cHg7XFxuXFx0ei1pbmRleDogMTAwO1xcblxcdGJhY2tncm91bmQtY29sb3I6ICMxZDFmMjA7XFxufVxcblxcbi5fMWVvR2Zxa3Uge1xcblxcdGhlaWdodDogMTAwJTtcXG5cXHRtYXJnaW46IDAgYXV0bztcXG59XFxuXCIsIFwiXCIsIHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIi9Vc2Vycy9icnlhbi9Qcm9qZWN0cy9kb2pvMi9jbGktYnVpbGQtd2lkZ2V0L3Rlc3QtYXBwL3NyYy9tZW51L21lbnUubS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7Q0FDQyxZQUFZO0NBQ1osT0FBTztDQUNQLGFBQWE7Q0FDYixhQUFhO0NBQ2IsMEJBQTBCO0NBQzFCOztBQUVEO0NBQ0MsYUFBYTtDQUNiLGVBQWU7Q0FDZlwiLFwiZmlsZVwiOlwibWVudS5tLmNzc1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCIucm9vdCB7XFxuXFx0d2lkdGg6IDEwMCU7XFxuXFx0dG9wOiAwO1xcblxcdGhlaWdodDogNDhweDtcXG5cXHR6LWluZGV4OiAxMDA7XFxuXFx0YmFja2dyb3VuZC1jb2xvcjogIzFkMWYyMDtcXG59XFxuXFxuLm1lbnVDb250YWluZXIge1xcblxcdGhlaWdodDogMTAwJTtcXG5cXHRtYXJnaW46IDAgYXV0bztcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG5cbi8vIGV4cG9ydHNcbmV4cG9ydHMubG9jYWxzID0ge1wiIF9rZXlcIjogXCJ0ZXN0LWFwcC9tZW51XCIsXG5cdFwicm9vdFwiOiBcIl8zYkE2amRTblwiLFxuXHRcIm1lbnVDb250YWluZXJcIjogXCJfMWVvR2Zxa3VcIlxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kZWNvcmF0b3ItbG9hZGVyIS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXI/e1wibW9kdWxlc1wiOnRydWUsXCJzb3VyY2VNYXBcIjp0cnVlLFwiaW1wb3J0TG9hZGVyc1wiOjEsXCJsb2NhbElkZW50TmFtZVwiOlwiW2hhc2g6YmFzZTY0OjhdXCJ9IS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2xpYj97XCJpZGVudFwiOlwicG9zdGNzc1wiLFwicGx1Z2luc1wiOltudWxsLHtcInZlcnNpb25cIjpcIjYuMC4yM1wiLFwicGx1Z2luc1wiOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxcInBvc3Rjc3NQbHVnaW5cIjpcInBvc3Rjc3MtY3NzbmV4dFwiLFwicG9zdGNzc1ZlcnNpb25cIjpcIjYuMC4yM1wifV19IS4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXI/dHlwZT1jc3MhLi9zcmMvbWVudS9tZW51Lm0uY3NzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kZWNvcmF0b3ItbG9hZGVyL2luZGV4LmpzIS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/e1wibW9kdWxlc1wiOnRydWUsXCJzb3VyY2VNYXBcIjp0cnVlLFwiaW1wb3J0TG9hZGVyc1wiOjEsXCJsb2NhbElkZW50TmFtZVwiOlwiW2hhc2g6YmFzZTY0OjhdXCJ9IS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2xpYi9pbmRleC5qcz97XCJpZGVudFwiOlwicG9zdGNzc1wiLFwicGx1Z2luc1wiOltudWxsLHtcInZlcnNpb25cIjpcIjYuMC4yM1wiLFwicGx1Z2luc1wiOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxcInBvc3Rjc3NQbHVnaW5cIjpcInBvc3Rjc3MtY3NzbmV4dFwiLFwicG9zdGNzc1ZlcnNpb25cIjpcIjYuMC4yM1wifV19IS4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXIvaW5kZXguanM/dHlwZT1jc3MhLi9zcmMvbWVudS9tZW51Lm0uY3NzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih1c2VTb3VyY2VNYXApIHtcblx0dmFyIGxpc3QgPSBbXTtcblxuXHQvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cdGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXHRcdFx0aWYoaXRlbVsyXSkge1xuXHRcdFx0XHRyZXR1cm4gXCJAbWVkaWEgXCIgKyBpdGVtWzJdICsgXCJ7XCIgKyBjb250ZW50ICsgXCJ9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHRcdH1cblx0XHR9KS5qb2luKFwiXCIpO1xuXHR9O1xuXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcblx0XHRpZih0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIilcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxuXHRcdFx0XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG5cdFx0fVxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gbW9kdWxlc1tpXTtcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxuXHRcdFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG5cdFx0XHRcdGlmKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gXCIoXCIgKyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIpXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7XG5cdHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblx0aWYgKCFjc3NNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdH1cblxuXHRpZiAodXNlU291cmNlTWFwICYmIHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIHNvdXJjZU1hcHBpbmcgPSB0b0NvbW1lbnQoY3NzTWFwcGluZyk7XG5cdFx0dmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0XHRcdHJldHVybiAnLyojIHNvdXJjZVVSTD0nICsgY3NzTWFwcGluZy5zb3VyY2VSb290ICsgc291cmNlICsgJyAqLydcblx0XHR9KTtcblxuXHRcdHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuXHR9XG5cblx0cmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn1cblxuLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuZnVuY3Rpb24gdG9Db21tZW50KHNvdXJjZU1hcCkge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblx0dmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSk7XG5cdHZhciBkYXRhID0gJ3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCcgKyBiYXNlNjQ7XG5cblx0cmV0dXJuICcvKiMgJyArIGRhdGEgKyAnICovJztcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJjc3NTZWxlY3RcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiY3NzU2VsZWN0XCJdID0gZmFjdG9yeSgpO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyNCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpc1ZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0aWYgKCFpc1ZhbHVlKHZhbHVlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgbnVsbCBvciB1bmRlZmluZWRcIik7XG5cdHJldHVybiB2YWx1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG5cdGlmICh0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuXHRyZXR1cm4gZm47XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNjYpKCkgPyBTeW1ib2wgOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDY3KTtcblxuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGFzc2lnbiAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuICAsIG5vcm1hbGl6ZU9wdHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKVxuICAsIGlzQ2FsbGFibGUgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYyKVxuICAsIGNvbnRhaW5zICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuXG4gICwgZDtcblxuZCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRzY3IsIHZhbHVlLyosIG9wdGlvbnMqLykge1xuXHR2YXIgYywgZSwgdywgb3B0aW9ucywgZGVzYztcblx0aWYgKChhcmd1bWVudHMubGVuZ3RoIDwgMikgfHwgKHR5cGVvZiBkc2NyICE9PSAnc3RyaW5nJykpIHtcblx0XHRvcHRpb25zID0gdmFsdWU7XG5cdFx0dmFsdWUgPSBkc2NyO1xuXHRcdGRzY3IgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbMl07XG5cdH1cblx0aWYgKGRzY3IgPT0gbnVsbCkge1xuXHRcdGMgPSB3ID0gdHJ1ZTtcblx0XHRlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0YyA9IGNvbnRhaW5zLmNhbGwoZHNjciwgJ2MnKTtcblx0XHRlID0gY29udGFpbnMuY2FsbChkc2NyLCAnZScpO1xuXHRcdHcgPSBjb250YWlucy5jYWxsKGRzY3IsICd3Jyk7XG5cdH1cblxuXHRkZXNjID0geyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogYywgZW51bWVyYWJsZTogZSwgd3JpdGFibGU6IHcgfTtcblx0cmV0dXJuICFvcHRpb25zID8gZGVzYyA6IGFzc2lnbihub3JtYWxpemVPcHRzKG9wdGlvbnMpLCBkZXNjKTtcbn07XG5cbmQuZ3MgPSBmdW5jdGlvbiAoZHNjciwgZ2V0LCBzZXQvKiwgb3B0aW9ucyovKSB7XG5cdHZhciBjLCBlLCBvcHRpb25zLCBkZXNjO1xuXHRpZiAodHlwZW9mIGRzY3IgIT09ICdzdHJpbmcnKSB7XG5cdFx0b3B0aW9ucyA9IHNldDtcblx0XHRzZXQgPSBnZXQ7XG5cdFx0Z2V0ID0gZHNjcjtcblx0XHRkc2NyID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHRvcHRpb25zID0gYXJndW1lbnRzWzNdO1xuXHR9XG5cdGlmIChnZXQgPT0gbnVsbCkge1xuXHRcdGdldCA9IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmICghaXNDYWxsYWJsZShnZXQpKSB7XG5cdFx0b3B0aW9ucyA9IGdldDtcblx0XHRnZXQgPSBzZXQgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoc2V0ID09IG51bGwpIHtcblx0XHRzZXQgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoc2V0KSkge1xuXHRcdG9wdGlvbnMgPSBzZXQ7XG5cdFx0c2V0ID0gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChkc2NyID09IG51bGwpIHtcblx0XHRjID0gdHJ1ZTtcblx0XHRlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0YyA9IGNvbnRhaW5zLmNhbGwoZHNjciwgJ2MnKTtcblx0XHRlID0gY29udGFpbnMuY2FsbChkc2NyLCAnZScpO1xuXHR9XG5cblx0ZGVzYyA9IHsgZ2V0OiBnZXQsIHNldDogc2V0LCBjb25maWd1cmFibGU6IGMsIGVudW1lcmFibGU6IGUgfTtcblx0cmV0dXJuICFvcHRpb25zID8gZGVzYyA6IGFzc2lnbihub3JtYWxpemVPcHRzKG9wdGlvbnMpLCBkZXNjKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBfdW5kZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNykoKTsgLy8gU3VwcG9ydCBFUzMgZW5naW5lc1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWwpIHtcbiByZXR1cm4gKHZhbCAhPT0gX3VuZGVmaW5lZCkgJiYgKHZhbCAhPT0gbnVsbCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0dHJ1ZUZ1bmM6IGZ1bmN0aW9uIHRydWVGdW5jKCl7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cdGZhbHNlRnVuYzogZnVuY3Rpb24gZmFsc2VGdW5jKCl7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KSgpXG5cdD8gT2JqZWN0LnNldFByb3RvdHlwZU9mXG5cdDogX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5cblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBvYmpUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbiAgLCBpZCA9IG9ialRvU3RyaW5nLmNhbGwoXG5cdChmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50cztcblx0fSkoKVxuKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09PSBpZDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBvYmpUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsIGlkID0gb2JqVG9TdHJpbmcuY2FsbChcIlwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIChcblx0XHR0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHxcblx0XHQodmFsdWUgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0KHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nIHx8IG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09PSBpZCkpIHx8XG5cdFx0ZmFsc2Vcblx0KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vVHlwZXMgb2YgZWxlbWVudHMgZm91bmQgaW4gdGhlIERPTVxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdFRleHQ6IFwidGV4dFwiLCAvL1RleHRcblx0RGlyZWN0aXZlOiBcImRpcmVjdGl2ZVwiLCAvLzw/IC4uLiA/PlxuXHRDb21tZW50OiBcImNvbW1lbnRcIiwgLy88IS0tIC4uLiAtLT5cblx0U2NyaXB0OiBcInNjcmlwdFwiLCAvLzxzY3JpcHQ+IHRhZ3Ncblx0U3R5bGU6IFwic3R5bGVcIiwgLy88c3R5bGU+IHRhZ3Ncblx0VGFnOiBcInRhZ1wiLCAvL0FueSB0YWdcblx0Q0RBVEE6IFwiY2RhdGFcIiwgLy88IVtDREFUQVsgLi4uIF1dPlxuXHREb2N0eXBlOiBcImRvY3R5cGVcIixcblxuXHRpc1RhZzogZnVuY3Rpb24oZWxlbSl7XG5cdFx0cmV0dXJuIGVsZW0udHlwZSA9PT0gXCJ0YWdcIiB8fCBlbGVtLnR5cGUgPT09IFwic2NyaXB0XCIgfHwgZWxlbS50eXBlID09PSBcInN0eWxlXCI7XG5cdH1cbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNTcpKClcblx0PyBPYmplY3QuYXNzaWduXG5cdDogX193ZWJwYWNrX3JlcXVpcmVfXyg1OCk7XG5cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpKClcblx0PyBTdHJpbmcucHJvdG90eXBlLmNvbnRhaW5zXG5cdDogX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XG5cblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgY2xlYXIgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KVxuICAsIGFzc2lnbiAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcbiAgLCBjYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcbiAgLCB2YWx1ZSAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMClcbiAgLCBkICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMylcbiAgLCBhdXRvQmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oNzQpXG4gICwgU3ltYm9sICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHksIGRlZmluZVByb3BlcnRpZXMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcywgSXRlcmF0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gSXRlcmF0b3IgPSBmdW5jdGlvbiAobGlzdCwgY29udGV4dCkge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgSXRlcmF0b3IpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldydcIik7XG5cdGRlZmluZVByb3BlcnRpZXModGhpcywge1xuXHRcdF9fbGlzdF9fOiBkKFwid1wiLCB2YWx1ZShsaXN0KSksXG5cdFx0X19jb250ZXh0X186IGQoXCJ3XCIsIGNvbnRleHQpLFxuXHRcdF9fbmV4dEluZGV4X186IGQoXCJ3XCIsIDApXG5cdH0pO1xuXHRpZiAoIWNvbnRleHQpIHJldHVybjtcblx0Y2FsbGFibGUoY29udGV4dC5vbik7XG5cdGNvbnRleHQub24oXCJfYWRkXCIsIHRoaXMuX29uQWRkKTtcblx0Y29udGV4dC5vbihcIl9kZWxldGVcIiwgdGhpcy5fb25EZWxldGUpO1xuXHRjb250ZXh0Lm9uKFwiX2NsZWFyXCIsIHRoaXMuX29uQ2xlYXIpO1xufTtcblxuLy8gSW50ZXJuYWwgJUl0ZXJhdG9yUHJvdG90eXBlJSBkb2Vzbid0IGV4cG9zZSBpdHMgY29uc3RydWN0b3JcbmRlbGV0ZSBJdGVyYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cbmRlZmluZVByb3BlcnRpZXMoXG5cdEl0ZXJhdG9yLnByb3RvdHlwZSxcblx0YXNzaWduKFxuXHRcdHtcblx0XHRcdF9uZXh0OiBkKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dmFyIGk7XG5cdFx0XHRcdGlmICghdGhpcy5fX2xpc3RfXykgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKHRoaXMuX19yZWRvX18pIHtcblx0XHRcdFx0XHRpID0gdGhpcy5fX3JlZG9fXy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmIChpICE9PSB1bmRlZmluZWQpIHJldHVybiBpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl9fbmV4dEluZGV4X18gPCB0aGlzLl9fbGlzdF9fLmxlbmd0aCkgcmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXysrO1xuXHRcdFx0XHR0aGlzLl91bkJpbmQoKTtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0pLFxuXHRcdFx0bmV4dDogZChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9jcmVhdGVSZXN1bHQodGhpcy5fbmV4dCgpKTtcblx0XHRcdH0pLFxuXHRcdFx0X2NyZWF0ZVJlc3VsdDogZChmdW5jdGlvbiAoaSkge1xuXHRcdFx0XHRpZiAoaSA9PT0gdW5kZWZpbmVkKSByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG5cdFx0XHRcdHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogdGhpcy5fcmVzb2x2ZShpKSB9O1xuXHRcdFx0fSksXG5cdFx0XHRfcmVzb2x2ZTogZChmdW5jdGlvbiAoaSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fX2xpc3RfX1tpXTtcblx0XHRcdH0pLFxuXHRcdFx0X3VuQmluZDogZChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHRoaXMuX19saXN0X18gPSBudWxsO1xuXHRcdFx0XHRkZWxldGUgdGhpcy5fX3JlZG9fXztcblx0XHRcdFx0aWYgKCF0aGlzLl9fY29udGV4dF9fKSByZXR1cm47XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18ub2ZmKFwiX2FkZFwiLCB0aGlzLl9vbkFkZCk7XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18ub2ZmKFwiX2RlbGV0ZVwiLCB0aGlzLl9vbkRlbGV0ZSk7XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18ub2ZmKFwiX2NsZWFyXCIsIHRoaXMuX29uQ2xlYXIpO1xuXHRcdFx0XHR0aGlzLl9fY29udGV4dF9fID0gbnVsbDtcblx0XHRcdH0pLFxuXHRcdFx0dG9TdHJpbmc6IGQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gXCJbb2JqZWN0IFwiICsgKHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCBcIk9iamVjdFwiKSArIFwiXVwiO1xuXHRcdFx0fSlcblx0XHR9LFxuXHRcdGF1dG9CaW5kKHtcblx0XHRcdF9vbkFkZDogZChmdW5jdGlvbiAoaW5kZXgpIHtcblx0XHRcdFx0aWYgKGluZGV4ID49IHRoaXMuX19uZXh0SW5kZXhfXykgcmV0dXJuO1xuXHRcdFx0XHQrK3RoaXMuX19uZXh0SW5kZXhfXztcblx0XHRcdFx0aWYgKCF0aGlzLl9fcmVkb19fKSB7XG5cdFx0XHRcdFx0ZGVmaW5lUHJvcGVydHkodGhpcywgXCJfX3JlZG9fX1wiLCBkKFwiY1wiLCBbaW5kZXhdKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX19yZWRvX18uZm9yRWFjaChmdW5jdGlvbiAocmVkbywgaSkge1xuXHRcdFx0XHRcdGlmIChyZWRvID49IGluZGV4KSB0aGlzLl9fcmVkb19fW2ldID0gKytyZWRvO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5fX3JlZG9fXy5wdXNoKGluZGV4KTtcblx0XHRcdH0pLFxuXHRcdFx0X29uRGVsZXRlOiBkKGZ1bmN0aW9uIChpbmRleCkge1xuXHRcdFx0XHR2YXIgaTtcblx0XHRcdFx0aWYgKGluZGV4ID49IHRoaXMuX19uZXh0SW5kZXhfXykgcmV0dXJuO1xuXHRcdFx0XHQtLXRoaXMuX19uZXh0SW5kZXhfXztcblx0XHRcdFx0aWYgKCF0aGlzLl9fcmVkb19fKSByZXR1cm47XG5cdFx0XHRcdGkgPSB0aGlzLl9fcmVkb19fLmluZGV4T2YoaW5kZXgpO1xuXHRcdFx0XHRpZiAoaSAhPT0gLTEpIHRoaXMuX19yZWRvX18uc3BsaWNlKGksIDEpO1xuXHRcdFx0XHR0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24gKHJlZG8sIGopIHtcblx0XHRcdFx0XHRpZiAocmVkbyA+IGluZGV4KSB0aGlzLl9fcmVkb19fW2pdID0gLS1yZWRvO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdH0pLFxuXHRcdFx0X29uQ2xlYXI6IGQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAodGhpcy5fX3JlZG9fXykgY2xlYXIuY2FsbCh0aGlzLl9fcmVkb19fKTtcblx0XHRcdFx0dGhpcy5fX25leHRJbmRleF9fID0gMDtcblx0XHRcdH0pXG5cdFx0fSlcblx0KVxuKTtcblxuZGVmaW5lUHJvcGVydHkoXG5cdEl0ZXJhdG9yLnByb3RvdHlwZSxcblx0U3ltYm9sLml0ZXJhdG9yLFxuXHRkKGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fSlcbik7XG5cblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcImFtcFwiOlwiJlwiLFwiYXBvc1wiOlwiJ1wiLFwiZ3RcIjpcIj5cIixcImx0XCI6XCI8XCIsXCJxdW90XCI6XCJcXFwiXCJ9XG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7XCJBYWN1dGVcIjpcIsOBXCIsXCJhYWN1dGVcIjpcIsOhXCIsXCJBYnJldmVcIjpcIsSCXCIsXCJhYnJldmVcIjpcIsSDXCIsXCJhY1wiOlwi4oi+XCIsXCJhY2RcIjpcIuKIv1wiLFwiYWNFXCI6XCLiiL7Ms1wiLFwiQWNpcmNcIjpcIsOCXCIsXCJhY2lyY1wiOlwiw6JcIixcImFjdXRlXCI6XCLCtFwiLFwiQWN5XCI6XCLQkFwiLFwiYWN5XCI6XCLQsFwiLFwiQUVsaWdcIjpcIsOGXCIsXCJhZWxpZ1wiOlwiw6ZcIixcImFmXCI6XCLigaFcIixcIkFmclwiOlwi8J2UhFwiLFwiYWZyXCI6XCLwnZSeXCIsXCJBZ3JhdmVcIjpcIsOAXCIsXCJhZ3JhdmVcIjpcIsOgXCIsXCJhbGVmc3ltXCI6XCLihLVcIixcImFsZXBoXCI6XCLihLVcIixcIkFscGhhXCI6XCLOkVwiLFwiYWxwaGFcIjpcIs6xXCIsXCJBbWFjclwiOlwixIBcIixcImFtYWNyXCI6XCLEgVwiLFwiYW1hbGdcIjpcIuKov1wiLFwiYW1wXCI6XCImXCIsXCJBTVBcIjpcIiZcIixcImFuZGFuZFwiOlwi4qmVXCIsXCJBbmRcIjpcIuKpk1wiLFwiYW5kXCI6XCLiiKdcIixcImFuZGRcIjpcIuKpnFwiLFwiYW5kc2xvcGVcIjpcIuKpmFwiLFwiYW5kdlwiOlwi4qmaXCIsXCJhbmdcIjpcIuKIoFwiLFwiYW5nZVwiOlwi4qakXCIsXCJhbmdsZVwiOlwi4oigXCIsXCJhbmdtc2RhYVwiOlwi4qaoXCIsXCJhbmdtc2RhYlwiOlwi4qapXCIsXCJhbmdtc2RhY1wiOlwi4qaqXCIsXCJhbmdtc2RhZFwiOlwi4qarXCIsXCJhbmdtc2RhZVwiOlwi4qasXCIsXCJhbmdtc2RhZlwiOlwi4qatXCIsXCJhbmdtc2RhZ1wiOlwi4qauXCIsXCJhbmdtc2RhaFwiOlwi4qavXCIsXCJhbmdtc2RcIjpcIuKIoVwiLFwiYW5ncnRcIjpcIuKIn1wiLFwiYW5ncnR2YlwiOlwi4oq+XCIsXCJhbmdydHZiZFwiOlwi4qadXCIsXCJhbmdzcGhcIjpcIuKIolwiLFwiYW5nc3RcIjpcIsOFXCIsXCJhbmd6YXJyXCI6XCLijbxcIixcIkFvZ29uXCI6XCLEhFwiLFwiYW9nb25cIjpcIsSFXCIsXCJBb3BmXCI6XCLwnZS4XCIsXCJhb3BmXCI6XCLwnZWSXCIsXCJhcGFjaXJcIjpcIuKpr1wiLFwiYXBcIjpcIuKJiFwiLFwiYXBFXCI6XCLiqbBcIixcImFwZVwiOlwi4omKXCIsXCJhcGlkXCI6XCLiiYtcIixcImFwb3NcIjpcIidcIixcIkFwcGx5RnVuY3Rpb25cIjpcIuKBoVwiLFwiYXBwcm94XCI6XCLiiYhcIixcImFwcHJveGVxXCI6XCLiiYpcIixcIkFyaW5nXCI6XCLDhVwiLFwiYXJpbmdcIjpcIsOlXCIsXCJBc2NyXCI6XCLwnZKcXCIsXCJhc2NyXCI6XCLwnZK2XCIsXCJBc3NpZ25cIjpcIuKJlFwiLFwiYXN0XCI6XCIqXCIsXCJhc3ltcFwiOlwi4omIXCIsXCJhc3ltcGVxXCI6XCLiiY1cIixcIkF0aWxkZVwiOlwiw4NcIixcImF0aWxkZVwiOlwiw6NcIixcIkF1bWxcIjpcIsOEXCIsXCJhdW1sXCI6XCLDpFwiLFwiYXdjb25pbnRcIjpcIuKIs1wiLFwiYXdpbnRcIjpcIuKokVwiLFwiYmFja2NvbmdcIjpcIuKJjFwiLFwiYmFja2Vwc2lsb25cIjpcIs+2XCIsXCJiYWNrcHJpbWVcIjpcIuKAtVwiLFwiYmFja3NpbVwiOlwi4oi9XCIsXCJiYWNrc2ltZXFcIjpcIuKLjVwiLFwiQmFja3NsYXNoXCI6XCLiiJZcIixcIkJhcnZcIjpcIuKrp1wiLFwiYmFydmVlXCI6XCLiir1cIixcImJhcndlZFwiOlwi4oyFXCIsXCJCYXJ3ZWRcIjpcIuKMhlwiLFwiYmFyd2VkZ2VcIjpcIuKMhVwiLFwiYmJya1wiOlwi4o61XCIsXCJiYnJrdGJya1wiOlwi4o62XCIsXCJiY29uZ1wiOlwi4omMXCIsXCJCY3lcIjpcItCRXCIsXCJiY3lcIjpcItCxXCIsXCJiZHF1b1wiOlwi4oCeXCIsXCJiZWNhdXNcIjpcIuKItVwiLFwiYmVjYXVzZVwiOlwi4oi1XCIsXCJCZWNhdXNlXCI6XCLiiLVcIixcImJlbXB0eXZcIjpcIuKmsFwiLFwiYmVwc2lcIjpcIs+2XCIsXCJiZXJub3VcIjpcIuKErFwiLFwiQmVybm91bGxpc1wiOlwi4oSsXCIsXCJCZXRhXCI6XCLOklwiLFwiYmV0YVwiOlwizrJcIixcImJldGhcIjpcIuKEtlwiLFwiYmV0d2VlblwiOlwi4omsXCIsXCJCZnJcIjpcIvCdlIVcIixcImJmclwiOlwi8J2Un1wiLFwiYmlnY2FwXCI6XCLii4JcIixcImJpZ2NpcmNcIjpcIuKXr1wiLFwiYmlnY3VwXCI6XCLii4NcIixcImJpZ29kb3RcIjpcIuKogFwiLFwiYmlnb3BsdXNcIjpcIuKogVwiLFwiYmlnb3RpbWVzXCI6XCLiqIJcIixcImJpZ3NxY3VwXCI6XCLiqIZcIixcImJpZ3N0YXJcIjpcIuKYhVwiLFwiYmlndHJpYW5nbGVkb3duXCI6XCLilr1cIixcImJpZ3RyaWFuZ2xldXBcIjpcIuKWs1wiLFwiYmlndXBsdXNcIjpcIuKohFwiLFwiYmlndmVlXCI6XCLii4FcIixcImJpZ3dlZGdlXCI6XCLii4BcIixcImJrYXJvd1wiOlwi4qSNXCIsXCJibGFja2xvemVuZ2VcIjpcIuKnq1wiLFwiYmxhY2tzcXVhcmVcIjpcIuKWqlwiLFwiYmxhY2t0cmlhbmdsZVwiOlwi4pa0XCIsXCJibGFja3RyaWFuZ2xlZG93blwiOlwi4pa+XCIsXCJibGFja3RyaWFuZ2xlbGVmdFwiOlwi4peCXCIsXCJibGFja3RyaWFuZ2xlcmlnaHRcIjpcIuKWuFwiLFwiYmxhbmtcIjpcIuKQo1wiLFwiYmxrMTJcIjpcIuKWklwiLFwiYmxrMTRcIjpcIuKWkVwiLFwiYmxrMzRcIjpcIuKWk1wiLFwiYmxvY2tcIjpcIuKWiFwiLFwiYm5lXCI6XCI94oOlXCIsXCJibmVxdWl2XCI6XCLiiaHig6VcIixcImJOb3RcIjpcIuKrrVwiLFwiYm5vdFwiOlwi4oyQXCIsXCJCb3BmXCI6XCLwnZS5XCIsXCJib3BmXCI6XCLwnZWTXCIsXCJib3RcIjpcIuKKpVwiLFwiYm90dG9tXCI6XCLiiqVcIixcImJvd3RpZVwiOlwi4ouIXCIsXCJib3hib3hcIjpcIuKniVwiLFwiYm94ZGxcIjpcIuKUkFwiLFwiYm94ZExcIjpcIuKVlVwiLFwiYm94RGxcIjpcIuKVllwiLFwiYm94RExcIjpcIuKVl1wiLFwiYm94ZHJcIjpcIuKUjFwiLFwiYm94ZFJcIjpcIuKVklwiLFwiYm94RHJcIjpcIuKVk1wiLFwiYm94RFJcIjpcIuKVlFwiLFwiYm94aFwiOlwi4pSAXCIsXCJib3hIXCI6XCLilZBcIixcImJveGhkXCI6XCLilKxcIixcImJveEhkXCI6XCLilaRcIixcImJveGhEXCI6XCLilaVcIixcImJveEhEXCI6XCLilaZcIixcImJveGh1XCI6XCLilLRcIixcImJveEh1XCI6XCLiladcIixcImJveGhVXCI6XCLilahcIixcImJveEhVXCI6XCLilalcIixcImJveG1pbnVzXCI6XCLiip9cIixcImJveHBsdXNcIjpcIuKKnlwiLFwiYm94dGltZXNcIjpcIuKKoFwiLFwiYm94dWxcIjpcIuKUmFwiLFwiYm94dUxcIjpcIuKVm1wiLFwiYm94VWxcIjpcIuKVnFwiLFwiYm94VUxcIjpcIuKVnVwiLFwiYm94dXJcIjpcIuKUlFwiLFwiYm94dVJcIjpcIuKVmFwiLFwiYm94VXJcIjpcIuKVmVwiLFwiYm94VVJcIjpcIuKVmlwiLFwiYm94dlwiOlwi4pSCXCIsXCJib3hWXCI6XCLilZFcIixcImJveHZoXCI6XCLilLxcIixcImJveHZIXCI6XCLilapcIixcImJveFZoXCI6XCLilatcIixcImJveFZIXCI6XCLilaxcIixcImJveHZsXCI6XCLilKRcIixcImJveHZMXCI6XCLilaFcIixcImJveFZsXCI6XCLilaJcIixcImJveFZMXCI6XCLilaNcIixcImJveHZyXCI6XCLilJxcIixcImJveHZSXCI6XCLilZ5cIixcImJveFZyXCI6XCLilZ9cIixcImJveFZSXCI6XCLilaBcIixcImJwcmltZVwiOlwi4oC1XCIsXCJicmV2ZVwiOlwiy5hcIixcIkJyZXZlXCI6XCLLmFwiLFwiYnJ2YmFyXCI6XCLCplwiLFwiYnNjclwiOlwi8J2St1wiLFwiQnNjclwiOlwi4oSsXCIsXCJic2VtaVwiOlwi4oGPXCIsXCJic2ltXCI6XCLiiL1cIixcImJzaW1lXCI6XCLii41cIixcImJzb2xiXCI6XCLip4VcIixcImJzb2xcIjpcIlxcXFxcIixcImJzb2xoc3ViXCI6XCLin4hcIixcImJ1bGxcIjpcIuKAolwiLFwiYnVsbGV0XCI6XCLigKJcIixcImJ1bXBcIjpcIuKJjlwiLFwiYnVtcEVcIjpcIuKqrlwiLFwiYnVtcGVcIjpcIuKJj1wiLFwiQnVtcGVxXCI6XCLiiY5cIixcImJ1bXBlcVwiOlwi4omPXCIsXCJDYWN1dGVcIjpcIsSGXCIsXCJjYWN1dGVcIjpcIsSHXCIsXCJjYXBhbmRcIjpcIuKphFwiLFwiY2FwYnJjdXBcIjpcIuKpiVwiLFwiY2FwY2FwXCI6XCLiqYtcIixcImNhcFwiOlwi4oipXCIsXCJDYXBcIjpcIuKLklwiLFwiY2FwY3VwXCI6XCLiqYdcIixcImNhcGRvdFwiOlwi4qmAXCIsXCJDYXBpdGFsRGlmZmVyZW50aWFsRFwiOlwi4oWFXCIsXCJjYXBzXCI6XCLiiKnvuIBcIixcImNhcmV0XCI6XCLigYFcIixcImNhcm9uXCI6XCLLh1wiLFwiQ2F5bGV5c1wiOlwi4oStXCIsXCJjY2Fwc1wiOlwi4qmNXCIsXCJDY2Fyb25cIjpcIsSMXCIsXCJjY2Fyb25cIjpcIsSNXCIsXCJDY2VkaWxcIjpcIsOHXCIsXCJjY2VkaWxcIjpcIsOnXCIsXCJDY2lyY1wiOlwixIhcIixcImNjaXJjXCI6XCLEiVwiLFwiQ2NvbmludFwiOlwi4oiwXCIsXCJjY3Vwc1wiOlwi4qmMXCIsXCJjY3Vwc3NtXCI6XCLiqZBcIixcIkNkb3RcIjpcIsSKXCIsXCJjZG90XCI6XCLEi1wiLFwiY2VkaWxcIjpcIsK4XCIsXCJDZWRpbGxhXCI6XCLCuFwiLFwiY2VtcHR5dlwiOlwi4qayXCIsXCJjZW50XCI6XCLColwiLFwiY2VudGVyZG90XCI6XCLCt1wiLFwiQ2VudGVyRG90XCI6XCLCt1wiLFwiY2ZyXCI6XCLwnZSgXCIsXCJDZnJcIjpcIuKErVwiLFwiQ0hjeVwiOlwi0KdcIixcImNoY3lcIjpcItGHXCIsXCJjaGVja1wiOlwi4pyTXCIsXCJjaGVja21hcmtcIjpcIuKck1wiLFwiQ2hpXCI6XCLOp1wiLFwiY2hpXCI6XCLPh1wiLFwiY2lyY1wiOlwiy4ZcIixcImNpcmNlcVwiOlwi4omXXCIsXCJjaXJjbGVhcnJvd2xlZnRcIjpcIuKGulwiLFwiY2lyY2xlYXJyb3dyaWdodFwiOlwi4oa7XCIsXCJjaXJjbGVkYXN0XCI6XCLiiptcIixcImNpcmNsZWRjaXJjXCI6XCLiippcIixcImNpcmNsZWRkYXNoXCI6XCLiip1cIixcIkNpcmNsZURvdFwiOlwi4oqZXCIsXCJjaXJjbGVkUlwiOlwiwq5cIixcImNpcmNsZWRTXCI6XCLik4hcIixcIkNpcmNsZU1pbnVzXCI6XCLiipZcIixcIkNpcmNsZVBsdXNcIjpcIuKKlVwiLFwiQ2lyY2xlVGltZXNcIjpcIuKKl1wiLFwiY2lyXCI6XCLil4tcIixcImNpckVcIjpcIuKng1wiLFwiY2lyZVwiOlwi4omXXCIsXCJjaXJmbmludFwiOlwi4qiQXCIsXCJjaXJtaWRcIjpcIuKrr1wiLFwiY2lyc2NpclwiOlwi4qeCXCIsXCJDbG9ja3dpc2VDb250b3VySW50ZWdyYWxcIjpcIuKIslwiLFwiQ2xvc2VDdXJseURvdWJsZVF1b3RlXCI6XCLigJ1cIixcIkNsb3NlQ3VybHlRdW90ZVwiOlwi4oCZXCIsXCJjbHVic1wiOlwi4pmjXCIsXCJjbHVic3VpdFwiOlwi4pmjXCIsXCJjb2xvblwiOlwiOlwiLFwiQ29sb25cIjpcIuKIt1wiLFwiQ29sb25lXCI6XCLiqbRcIixcImNvbG9uZVwiOlwi4omUXCIsXCJjb2xvbmVxXCI6XCLiiZRcIixcImNvbW1hXCI6XCIsXCIsXCJjb21tYXRcIjpcIkBcIixcImNvbXBcIjpcIuKIgVwiLFwiY29tcGZuXCI6XCLiiJhcIixcImNvbXBsZW1lbnRcIjpcIuKIgVwiLFwiY29tcGxleGVzXCI6XCLihIJcIixcImNvbmdcIjpcIuKJhVwiLFwiY29uZ2RvdFwiOlwi4qmtXCIsXCJDb25ncnVlbnRcIjpcIuKJoVwiLFwiY29uaW50XCI6XCLiiK5cIixcIkNvbmludFwiOlwi4oivXCIsXCJDb250b3VySW50ZWdyYWxcIjpcIuKIrlwiLFwiY29wZlwiOlwi8J2VlFwiLFwiQ29wZlwiOlwi4oSCXCIsXCJjb3Byb2RcIjpcIuKIkFwiLFwiQ29wcm9kdWN0XCI6XCLiiJBcIixcImNvcHlcIjpcIsKpXCIsXCJDT1BZXCI6XCLCqVwiLFwiY29weXNyXCI6XCLihJdcIixcIkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWxcIjpcIuKIs1wiLFwiY3JhcnJcIjpcIuKGtVwiLFwiY3Jvc3NcIjpcIuKcl1wiLFwiQ3Jvc3NcIjpcIuKor1wiLFwiQ3NjclwiOlwi8J2SnlwiLFwiY3NjclwiOlwi8J2SuFwiLFwiY3N1YlwiOlwi4quPXCIsXCJjc3ViZVwiOlwi4quRXCIsXCJjc3VwXCI6XCLiq5BcIixcImNzdXBlXCI6XCLiq5JcIixcImN0ZG90XCI6XCLii69cIixcImN1ZGFycmxcIjpcIuKkuFwiLFwiY3VkYXJyclwiOlwi4qS1XCIsXCJjdWVwclwiOlwi4oueXCIsXCJjdWVzY1wiOlwi4oufXCIsXCJjdWxhcnJcIjpcIuKGtlwiLFwiY3VsYXJycFwiOlwi4qS9XCIsXCJjdXBicmNhcFwiOlwi4qmIXCIsXCJjdXBjYXBcIjpcIuKphlwiLFwiQ3VwQ2FwXCI6XCLiiY1cIixcImN1cFwiOlwi4oiqXCIsXCJDdXBcIjpcIuKLk1wiLFwiY3VwY3VwXCI6XCLiqYpcIixcImN1cGRvdFwiOlwi4oqNXCIsXCJjdXBvclwiOlwi4qmFXCIsXCJjdXBzXCI6XCLiiKrvuIBcIixcImN1cmFyclwiOlwi4oa3XCIsXCJjdXJhcnJtXCI6XCLipLxcIixcImN1cmx5ZXFwcmVjXCI6XCLii55cIixcImN1cmx5ZXFzdWNjXCI6XCLii59cIixcImN1cmx5dmVlXCI6XCLii45cIixcImN1cmx5d2VkZ2VcIjpcIuKLj1wiLFwiY3VycmVuXCI6XCLCpFwiLFwiY3VydmVhcnJvd2xlZnRcIjpcIuKGtlwiLFwiY3VydmVhcnJvd3JpZ2h0XCI6XCLihrdcIixcImN1dmVlXCI6XCLii45cIixcImN1d2VkXCI6XCLii49cIixcImN3Y29uaW50XCI6XCLiiLJcIixcImN3aW50XCI6XCLiiLFcIixcImN5bGN0eVwiOlwi4oytXCIsXCJkYWdnZXJcIjpcIuKAoFwiLFwiRGFnZ2VyXCI6XCLigKFcIixcImRhbGV0aFwiOlwi4oS4XCIsXCJkYXJyXCI6XCLihpNcIixcIkRhcnJcIjpcIuKGoVwiLFwiZEFyclwiOlwi4oeTXCIsXCJkYXNoXCI6XCLigJBcIixcIkRhc2h2XCI6XCLiq6RcIixcImRhc2h2XCI6XCLiiqNcIixcImRia2Fyb3dcIjpcIuKkj1wiLFwiZGJsYWNcIjpcIsudXCIsXCJEY2Fyb25cIjpcIsSOXCIsXCJkY2Fyb25cIjpcIsSPXCIsXCJEY3lcIjpcItCUXCIsXCJkY3lcIjpcItC0XCIsXCJkZGFnZ2VyXCI6XCLigKFcIixcImRkYXJyXCI6XCLih4pcIixcIkREXCI6XCLihYVcIixcImRkXCI6XCLihYZcIixcIkREb3RyYWhkXCI6XCLipJFcIixcImRkb3RzZXFcIjpcIuKpt1wiLFwiZGVnXCI6XCLCsFwiLFwiRGVsXCI6XCLiiIdcIixcIkRlbHRhXCI6XCLOlFwiLFwiZGVsdGFcIjpcIs60XCIsXCJkZW1wdHl2XCI6XCLiprFcIixcImRmaXNodFwiOlwi4qW/XCIsXCJEZnJcIjpcIvCdlIdcIixcImRmclwiOlwi8J2UoVwiLFwiZEhhclwiOlwi4qWlXCIsXCJkaGFybFwiOlwi4oeDXCIsXCJkaGFyclwiOlwi4oeCXCIsXCJEaWFjcml0aWNhbEFjdXRlXCI6XCLCtFwiLFwiRGlhY3JpdGljYWxEb3RcIjpcIsuZXCIsXCJEaWFjcml0aWNhbERvdWJsZUFjdXRlXCI6XCLLnVwiLFwiRGlhY3JpdGljYWxHcmF2ZVwiOlwiYFwiLFwiRGlhY3JpdGljYWxUaWxkZVwiOlwiy5xcIixcImRpYW1cIjpcIuKLhFwiLFwiZGlhbW9uZFwiOlwi4ouEXCIsXCJEaWFtb25kXCI6XCLii4RcIixcImRpYW1vbmRzdWl0XCI6XCLimaZcIixcImRpYW1zXCI6XCLimaZcIixcImRpZVwiOlwiwqhcIixcIkRpZmZlcmVudGlhbERcIjpcIuKFhlwiLFwiZGlnYW1tYVwiOlwiz51cIixcImRpc2luXCI6XCLii7JcIixcImRpdlwiOlwiw7dcIixcImRpdmlkZVwiOlwiw7dcIixcImRpdmlkZW9udGltZXNcIjpcIuKLh1wiLFwiZGl2b254XCI6XCLii4dcIixcIkRKY3lcIjpcItCCXCIsXCJkamN5XCI6XCLRklwiLFwiZGxjb3JuXCI6XCLijJ5cIixcImRsY3JvcFwiOlwi4oyNXCIsXCJkb2xsYXJcIjpcIiRcIixcIkRvcGZcIjpcIvCdlLtcIixcImRvcGZcIjpcIvCdlZVcIixcIkRvdFwiOlwiwqhcIixcImRvdFwiOlwiy5lcIixcIkRvdERvdFwiOlwi4oOcXCIsXCJkb3RlcVwiOlwi4omQXCIsXCJkb3RlcWRvdFwiOlwi4omRXCIsXCJEb3RFcXVhbFwiOlwi4omQXCIsXCJkb3RtaW51c1wiOlwi4oi4XCIsXCJkb3RwbHVzXCI6XCLiiJRcIixcImRvdHNxdWFyZVwiOlwi4oqhXCIsXCJkb3VibGViYXJ3ZWRnZVwiOlwi4oyGXCIsXCJEb3VibGVDb250b3VySW50ZWdyYWxcIjpcIuKIr1wiLFwiRG91YmxlRG90XCI6XCLCqFwiLFwiRG91YmxlRG93bkFycm93XCI6XCLih5NcIixcIkRvdWJsZUxlZnRBcnJvd1wiOlwi4oeQXCIsXCJEb3VibGVMZWZ0UmlnaHRBcnJvd1wiOlwi4oeUXCIsXCJEb3VibGVMZWZ0VGVlXCI6XCLiq6RcIixcIkRvdWJsZUxvbmdMZWZ0QXJyb3dcIjpcIuKfuFwiLFwiRG91YmxlTG9uZ0xlZnRSaWdodEFycm93XCI6XCLin7pcIixcIkRvdWJsZUxvbmdSaWdodEFycm93XCI6XCLin7lcIixcIkRvdWJsZVJpZ2h0QXJyb3dcIjpcIuKHklwiLFwiRG91YmxlUmlnaHRUZWVcIjpcIuKKqFwiLFwiRG91YmxlVXBBcnJvd1wiOlwi4oeRXCIsXCJEb3VibGVVcERvd25BcnJvd1wiOlwi4oeVXCIsXCJEb3VibGVWZXJ0aWNhbEJhclwiOlwi4oilXCIsXCJEb3duQXJyb3dCYXJcIjpcIuKkk1wiLFwiZG93bmFycm93XCI6XCLihpNcIixcIkRvd25BcnJvd1wiOlwi4oaTXCIsXCJEb3duYXJyb3dcIjpcIuKHk1wiLFwiRG93bkFycm93VXBBcnJvd1wiOlwi4oe1XCIsXCJEb3duQnJldmVcIjpcIsyRXCIsXCJkb3duZG93bmFycm93c1wiOlwi4oeKXCIsXCJkb3duaGFycG9vbmxlZnRcIjpcIuKHg1wiLFwiZG93bmhhcnBvb25yaWdodFwiOlwi4oeCXCIsXCJEb3duTGVmdFJpZ2h0VmVjdG9yXCI6XCLipZBcIixcIkRvd25MZWZ0VGVlVmVjdG9yXCI6XCLipZ5cIixcIkRvd25MZWZ0VmVjdG9yQmFyXCI6XCLipZZcIixcIkRvd25MZWZ0VmVjdG9yXCI6XCLihr1cIixcIkRvd25SaWdodFRlZVZlY3RvclwiOlwi4qWfXCIsXCJEb3duUmlnaHRWZWN0b3JCYXJcIjpcIuKll1wiLFwiRG93blJpZ2h0VmVjdG9yXCI6XCLih4FcIixcIkRvd25UZWVBcnJvd1wiOlwi4oanXCIsXCJEb3duVGVlXCI6XCLiiqRcIixcImRyYmthcm93XCI6XCLipJBcIixcImRyY29yblwiOlwi4oyfXCIsXCJkcmNyb3BcIjpcIuKMjFwiLFwiRHNjclwiOlwi8J2Sn1wiLFwiZHNjclwiOlwi8J2SuVwiLFwiRFNjeVwiOlwi0IVcIixcImRzY3lcIjpcItGVXCIsXCJkc29sXCI6XCLip7ZcIixcIkRzdHJva1wiOlwixJBcIixcImRzdHJva1wiOlwixJFcIixcImR0ZG90XCI6XCLii7FcIixcImR0cmlcIjpcIuKWv1wiLFwiZHRyaWZcIjpcIuKWvlwiLFwiZHVhcnJcIjpcIuKHtVwiLFwiZHVoYXJcIjpcIuKlr1wiLFwiZHdhbmdsZVwiOlwi4qamXCIsXCJEWmN5XCI6XCLQj1wiLFwiZHpjeVwiOlwi0Z9cIixcImR6aWdyYXJyXCI6XCLin79cIixcIkVhY3V0ZVwiOlwiw4lcIixcImVhY3V0ZVwiOlwiw6lcIixcImVhc3RlclwiOlwi4qmuXCIsXCJFY2Fyb25cIjpcIsSaXCIsXCJlY2Fyb25cIjpcIsSbXCIsXCJFY2lyY1wiOlwiw4pcIixcImVjaXJjXCI6XCLDqlwiLFwiZWNpclwiOlwi4omWXCIsXCJlY29sb25cIjpcIuKJlVwiLFwiRWN5XCI6XCLQrVwiLFwiZWN5XCI6XCLRjVwiLFwiZUREb3RcIjpcIuKpt1wiLFwiRWRvdFwiOlwixJZcIixcImVkb3RcIjpcIsSXXCIsXCJlRG90XCI6XCLiiZFcIixcImVlXCI6XCLihYdcIixcImVmRG90XCI6XCLiiZJcIixcIkVmclwiOlwi8J2UiFwiLFwiZWZyXCI6XCLwnZSiXCIsXCJlZ1wiOlwi4qqaXCIsXCJFZ3JhdmVcIjpcIsOIXCIsXCJlZ3JhdmVcIjpcIsOoXCIsXCJlZ3NcIjpcIuKqllwiLFwiZWdzZG90XCI6XCLiqphcIixcImVsXCI6XCLiqplcIixcIkVsZW1lbnRcIjpcIuKIiFwiLFwiZWxpbnRlcnNcIjpcIuKPp1wiLFwiZWxsXCI6XCLihJNcIixcImVsc1wiOlwi4qqVXCIsXCJlbHNkb3RcIjpcIuKql1wiLFwiRW1hY3JcIjpcIsSSXCIsXCJlbWFjclwiOlwixJNcIixcImVtcHR5XCI6XCLiiIVcIixcImVtcHR5c2V0XCI6XCLiiIVcIixcIkVtcHR5U21hbGxTcXVhcmVcIjpcIuKXu1wiLFwiZW1wdHl2XCI6XCLiiIVcIixcIkVtcHR5VmVyeVNtYWxsU3F1YXJlXCI6XCLilqtcIixcImVtc3AxM1wiOlwi4oCEXCIsXCJlbXNwMTRcIjpcIuKAhVwiLFwiZW1zcFwiOlwi4oCDXCIsXCJFTkdcIjpcIsWKXCIsXCJlbmdcIjpcIsWLXCIsXCJlbnNwXCI6XCLigIJcIixcIkVvZ29uXCI6XCLEmFwiLFwiZW9nb25cIjpcIsSZXCIsXCJFb3BmXCI6XCLwnZS8XCIsXCJlb3BmXCI6XCLwnZWWXCIsXCJlcGFyXCI6XCLii5VcIixcImVwYXJzbFwiOlwi4qejXCIsXCJlcGx1c1wiOlwi4qmxXCIsXCJlcHNpXCI6XCLOtVwiLFwiRXBzaWxvblwiOlwizpVcIixcImVwc2lsb25cIjpcIs61XCIsXCJlcHNpdlwiOlwiz7VcIixcImVxY2lyY1wiOlwi4omWXCIsXCJlcWNvbG9uXCI6XCLiiZVcIixcImVxc2ltXCI6XCLiiYJcIixcImVxc2xhbnRndHJcIjpcIuKqllwiLFwiZXFzbGFudGxlc3NcIjpcIuKqlVwiLFwiRXF1YWxcIjpcIuKptVwiLFwiZXF1YWxzXCI6XCI9XCIsXCJFcXVhbFRpbGRlXCI6XCLiiYJcIixcImVxdWVzdFwiOlwi4omfXCIsXCJFcXVpbGlicml1bVwiOlwi4oeMXCIsXCJlcXVpdlwiOlwi4omhXCIsXCJlcXVpdkREXCI6XCLiqbhcIixcImVxdnBhcnNsXCI6XCLip6VcIixcImVyYXJyXCI6XCLipbFcIixcImVyRG90XCI6XCLiiZNcIixcImVzY3JcIjpcIuKEr1wiLFwiRXNjclwiOlwi4oSwXCIsXCJlc2RvdFwiOlwi4omQXCIsXCJFc2ltXCI6XCLiqbNcIixcImVzaW1cIjpcIuKJglwiLFwiRXRhXCI6XCLOl1wiLFwiZXRhXCI6XCLOt1wiLFwiRVRIXCI6XCLDkFwiLFwiZXRoXCI6XCLDsFwiLFwiRXVtbFwiOlwiw4tcIixcImV1bWxcIjpcIsOrXCIsXCJldXJvXCI6XCLigqxcIixcImV4Y2xcIjpcIiFcIixcImV4aXN0XCI6XCLiiINcIixcIkV4aXN0c1wiOlwi4oiDXCIsXCJleHBlY3RhdGlvblwiOlwi4oSwXCIsXCJleHBvbmVudGlhbGVcIjpcIuKFh1wiLFwiRXhwb25lbnRpYWxFXCI6XCLihYdcIixcImZhbGxpbmdkb3RzZXFcIjpcIuKJklwiLFwiRmN5XCI6XCLQpFwiLFwiZmN5XCI6XCLRhFwiLFwiZmVtYWxlXCI6XCLimYBcIixcImZmaWxpZ1wiOlwi76yDXCIsXCJmZmxpZ1wiOlwi76yAXCIsXCJmZmxsaWdcIjpcIu+shFwiLFwiRmZyXCI6XCLwnZSJXCIsXCJmZnJcIjpcIvCdlKNcIixcImZpbGlnXCI6XCLvrIFcIixcIkZpbGxlZFNtYWxsU3F1YXJlXCI6XCLil7xcIixcIkZpbGxlZFZlcnlTbWFsbFNxdWFyZVwiOlwi4paqXCIsXCJmamxpZ1wiOlwiZmpcIixcImZsYXRcIjpcIuKZrVwiLFwiZmxsaWdcIjpcIu+sglwiLFwiZmx0bnNcIjpcIuKWsVwiLFwiZm5vZlwiOlwixpJcIixcIkZvcGZcIjpcIvCdlL1cIixcImZvcGZcIjpcIvCdlZdcIixcImZvcmFsbFwiOlwi4oiAXCIsXCJGb3JBbGxcIjpcIuKIgFwiLFwiZm9ya1wiOlwi4ouUXCIsXCJmb3JrdlwiOlwi4quZXCIsXCJGb3VyaWVydHJmXCI6XCLihLFcIixcImZwYXJ0aW50XCI6XCLiqI1cIixcImZyYWMxMlwiOlwiwr1cIixcImZyYWMxM1wiOlwi4oWTXCIsXCJmcmFjMTRcIjpcIsK8XCIsXCJmcmFjMTVcIjpcIuKFlVwiLFwiZnJhYzE2XCI6XCLihZlcIixcImZyYWMxOFwiOlwi4oWbXCIsXCJmcmFjMjNcIjpcIuKFlFwiLFwiZnJhYzI1XCI6XCLihZZcIixcImZyYWMzNFwiOlwiwr5cIixcImZyYWMzNVwiOlwi4oWXXCIsXCJmcmFjMzhcIjpcIuKFnFwiLFwiZnJhYzQ1XCI6XCLihZhcIixcImZyYWM1NlwiOlwi4oWaXCIsXCJmcmFjNThcIjpcIuKFnVwiLFwiZnJhYzc4XCI6XCLihZ5cIixcImZyYXNsXCI6XCLigYRcIixcImZyb3duXCI6XCLijKJcIixcImZzY3JcIjpcIvCdkrtcIixcIkZzY3JcIjpcIuKEsVwiLFwiZ2FjdXRlXCI6XCLHtVwiLFwiR2FtbWFcIjpcIs6TXCIsXCJnYW1tYVwiOlwizrNcIixcIkdhbW1hZFwiOlwiz5xcIixcImdhbW1hZFwiOlwiz51cIixcImdhcFwiOlwi4qqGXCIsXCJHYnJldmVcIjpcIsSeXCIsXCJnYnJldmVcIjpcIsSfXCIsXCJHY2VkaWxcIjpcIsSiXCIsXCJHY2lyY1wiOlwixJxcIixcImdjaXJjXCI6XCLEnVwiLFwiR2N5XCI6XCLQk1wiLFwiZ2N5XCI6XCLQs1wiLFwiR2RvdFwiOlwixKBcIixcImdkb3RcIjpcIsShXCIsXCJnZVwiOlwi4omlXCIsXCJnRVwiOlwi4omnXCIsXCJnRWxcIjpcIuKqjFwiLFwiZ2VsXCI6XCLii5tcIixcImdlcVwiOlwi4omlXCIsXCJnZXFxXCI6XCLiiadcIixcImdlcXNsYW50XCI6XCLiqb5cIixcImdlc2NjXCI6XCLiqqlcIixcImdlc1wiOlwi4qm+XCIsXCJnZXNkb3RcIjpcIuKqgFwiLFwiZ2VzZG90b1wiOlwi4qqCXCIsXCJnZXNkb3RvbFwiOlwi4qqEXCIsXCJnZXNsXCI6XCLii5vvuIBcIixcImdlc2xlc1wiOlwi4qqUXCIsXCJHZnJcIjpcIvCdlIpcIixcImdmclwiOlwi8J2UpFwiLFwiZ2dcIjpcIuKJq1wiLFwiR2dcIjpcIuKLmVwiLFwiZ2dnXCI6XCLii5lcIixcImdpbWVsXCI6XCLihLdcIixcIkdKY3lcIjpcItCDXCIsXCJnamN5XCI6XCLRk1wiLFwiZ2xhXCI6XCLiqqVcIixcImdsXCI6XCLiibdcIixcImdsRVwiOlwi4qqSXCIsXCJnbGpcIjpcIuKqpFwiLFwiZ25hcFwiOlwi4qqKXCIsXCJnbmFwcHJveFwiOlwi4qqKXCIsXCJnbmVcIjpcIuKqiFwiLFwiZ25FXCI6XCLiialcIixcImduZXFcIjpcIuKqiFwiLFwiZ25lcXFcIjpcIuKJqVwiLFwiZ25zaW1cIjpcIuKLp1wiLFwiR29wZlwiOlwi8J2UvlwiLFwiZ29wZlwiOlwi8J2VmFwiLFwiZ3JhdmVcIjpcImBcIixcIkdyZWF0ZXJFcXVhbFwiOlwi4omlXCIsXCJHcmVhdGVyRXF1YWxMZXNzXCI6XCLii5tcIixcIkdyZWF0ZXJGdWxsRXF1YWxcIjpcIuKJp1wiLFwiR3JlYXRlckdyZWF0ZXJcIjpcIuKqolwiLFwiR3JlYXRlckxlc3NcIjpcIuKJt1wiLFwiR3JlYXRlclNsYW50RXF1YWxcIjpcIuKpvlwiLFwiR3JlYXRlclRpbGRlXCI6XCLiibNcIixcIkdzY3JcIjpcIvCdkqJcIixcImdzY3JcIjpcIuKEilwiLFwiZ3NpbVwiOlwi4omzXCIsXCJnc2ltZVwiOlwi4qqOXCIsXCJnc2ltbFwiOlwi4qqQXCIsXCJndGNjXCI6XCLiqqdcIixcImd0Y2lyXCI6XCLiqbpcIixcImd0XCI6XCI+XCIsXCJHVFwiOlwiPlwiLFwiR3RcIjpcIuKJq1wiLFwiZ3Rkb3RcIjpcIuKLl1wiLFwiZ3RsUGFyXCI6XCLippVcIixcImd0cXVlc3RcIjpcIuKpvFwiLFwiZ3RyYXBwcm94XCI6XCLiqoZcIixcImd0cmFyclwiOlwi4qW4XCIsXCJndHJkb3RcIjpcIuKLl1wiLFwiZ3RyZXFsZXNzXCI6XCLii5tcIixcImd0cmVxcWxlc3NcIjpcIuKqjFwiLFwiZ3RybGVzc1wiOlwi4om3XCIsXCJndHJzaW1cIjpcIuKJs1wiLFwiZ3ZlcnRuZXFxXCI6XCLiianvuIBcIixcImd2bkVcIjpcIuKJqe+4gFwiLFwiSGFjZWtcIjpcIsuHXCIsXCJoYWlyc3BcIjpcIuKAilwiLFwiaGFsZlwiOlwiwr1cIixcImhhbWlsdFwiOlwi4oSLXCIsXCJIQVJEY3lcIjpcItCqXCIsXCJoYXJkY3lcIjpcItGKXCIsXCJoYXJyY2lyXCI6XCLipYhcIixcImhhcnJcIjpcIuKGlFwiLFwiaEFyclwiOlwi4oeUXCIsXCJoYXJyd1wiOlwi4oatXCIsXCJIYXRcIjpcIl5cIixcImhiYXJcIjpcIuKEj1wiLFwiSGNpcmNcIjpcIsSkXCIsXCJoY2lyY1wiOlwixKVcIixcImhlYXJ0c1wiOlwi4pmlXCIsXCJoZWFydHN1aXRcIjpcIuKZpVwiLFwiaGVsbGlwXCI6XCLigKZcIixcImhlcmNvblwiOlwi4oq5XCIsXCJoZnJcIjpcIvCdlKVcIixcIkhmclwiOlwi4oSMXCIsXCJIaWxiZXJ0U3BhY2VcIjpcIuKEi1wiLFwiaGtzZWFyb3dcIjpcIuKkpVwiLFwiaGtzd2Fyb3dcIjpcIuKkplwiLFwiaG9hcnJcIjpcIuKHv1wiLFwiaG9tdGh0XCI6XCLiiLtcIixcImhvb2tsZWZ0YXJyb3dcIjpcIuKGqVwiLFwiaG9va3JpZ2h0YXJyb3dcIjpcIuKGqlwiLFwiaG9wZlwiOlwi8J2VmVwiLFwiSG9wZlwiOlwi4oSNXCIsXCJob3JiYXJcIjpcIuKAlVwiLFwiSG9yaXpvbnRhbExpbmVcIjpcIuKUgFwiLFwiaHNjclwiOlwi8J2SvVwiLFwiSHNjclwiOlwi4oSLXCIsXCJoc2xhc2hcIjpcIuKEj1wiLFwiSHN0cm9rXCI6XCLEplwiLFwiaHN0cm9rXCI6XCLEp1wiLFwiSHVtcERvd25IdW1wXCI6XCLiiY5cIixcIkh1bXBFcXVhbFwiOlwi4omPXCIsXCJoeWJ1bGxcIjpcIuKBg1wiLFwiaHlwaGVuXCI6XCLigJBcIixcIklhY3V0ZVwiOlwiw41cIixcImlhY3V0ZVwiOlwiw61cIixcImljXCI6XCLigaNcIixcIkljaXJjXCI6XCLDjlwiLFwiaWNpcmNcIjpcIsOuXCIsXCJJY3lcIjpcItCYXCIsXCJpY3lcIjpcItC4XCIsXCJJZG90XCI6XCLEsFwiLFwiSUVjeVwiOlwi0JVcIixcImllY3lcIjpcItC1XCIsXCJpZXhjbFwiOlwiwqFcIixcImlmZlwiOlwi4oeUXCIsXCJpZnJcIjpcIvCdlKZcIixcIklmclwiOlwi4oSRXCIsXCJJZ3JhdmVcIjpcIsOMXCIsXCJpZ3JhdmVcIjpcIsOsXCIsXCJpaVwiOlwi4oWIXCIsXCJpaWlpbnRcIjpcIuKojFwiLFwiaWlpbnRcIjpcIuKIrVwiLFwiaWluZmluXCI6XCLip5xcIixcImlpb3RhXCI6XCLihKlcIixcIklKbGlnXCI6XCLEslwiLFwiaWpsaWdcIjpcIsSzXCIsXCJJbWFjclwiOlwixKpcIixcImltYWNyXCI6XCLEq1wiLFwiaW1hZ2VcIjpcIuKEkVwiLFwiSW1hZ2luYXJ5SVwiOlwi4oWIXCIsXCJpbWFnbGluZVwiOlwi4oSQXCIsXCJpbWFncGFydFwiOlwi4oSRXCIsXCJpbWF0aFwiOlwixLFcIixcIkltXCI6XCLihJFcIixcImltb2ZcIjpcIuKKt1wiLFwiaW1wZWRcIjpcIsa1XCIsXCJJbXBsaWVzXCI6XCLih5JcIixcImluY2FyZVwiOlwi4oSFXCIsXCJpblwiOlwi4oiIXCIsXCJpbmZpblwiOlwi4oieXCIsXCJpbmZpbnRpZVwiOlwi4qedXCIsXCJpbm9kb3RcIjpcIsSxXCIsXCJpbnRjYWxcIjpcIuKKulwiLFwiaW50XCI6XCLiiKtcIixcIkludFwiOlwi4oisXCIsXCJpbnRlZ2Vyc1wiOlwi4oSkXCIsXCJJbnRlZ3JhbFwiOlwi4oirXCIsXCJpbnRlcmNhbFwiOlwi4oq6XCIsXCJJbnRlcnNlY3Rpb25cIjpcIuKLglwiLFwiaW50bGFyaGtcIjpcIuKol1wiLFwiaW50cHJvZFwiOlwi4qi8XCIsXCJJbnZpc2libGVDb21tYVwiOlwi4oGjXCIsXCJJbnZpc2libGVUaW1lc1wiOlwi4oGiXCIsXCJJT2N5XCI6XCLQgVwiLFwiaW9jeVwiOlwi0ZFcIixcIklvZ29uXCI6XCLErlwiLFwiaW9nb25cIjpcIsSvXCIsXCJJb3BmXCI6XCLwnZWAXCIsXCJpb3BmXCI6XCLwnZWaXCIsXCJJb3RhXCI6XCLOmVwiLFwiaW90YVwiOlwizrlcIixcImlwcm9kXCI6XCLiqLxcIixcImlxdWVzdFwiOlwiwr9cIixcImlzY3JcIjpcIvCdkr5cIixcIklzY3JcIjpcIuKEkFwiLFwiaXNpblwiOlwi4oiIXCIsXCJpc2luZG90XCI6XCLii7VcIixcImlzaW5FXCI6XCLii7lcIixcImlzaW5zXCI6XCLii7RcIixcImlzaW5zdlwiOlwi4ouzXCIsXCJpc2ludlwiOlwi4oiIXCIsXCJpdFwiOlwi4oGiXCIsXCJJdGlsZGVcIjpcIsSoXCIsXCJpdGlsZGVcIjpcIsSpXCIsXCJJdWtjeVwiOlwi0IZcIixcIml1a2N5XCI6XCLRllwiLFwiSXVtbFwiOlwiw49cIixcIml1bWxcIjpcIsOvXCIsXCJKY2lyY1wiOlwixLRcIixcImpjaXJjXCI6XCLEtVwiLFwiSmN5XCI6XCLQmVwiLFwiamN5XCI6XCLQuVwiLFwiSmZyXCI6XCLwnZSNXCIsXCJqZnJcIjpcIvCdlKdcIixcImptYXRoXCI6XCLIt1wiLFwiSm9wZlwiOlwi8J2VgVwiLFwiam9wZlwiOlwi8J2Vm1wiLFwiSnNjclwiOlwi8J2SpVwiLFwianNjclwiOlwi8J2Sv1wiLFwiSnNlcmN5XCI6XCLQiFwiLFwianNlcmN5XCI6XCLRmFwiLFwiSnVrY3lcIjpcItCEXCIsXCJqdWtjeVwiOlwi0ZRcIixcIkthcHBhXCI6XCLOmlwiLFwia2FwcGFcIjpcIs66XCIsXCJrYXBwYXZcIjpcIs+wXCIsXCJLY2VkaWxcIjpcIsS2XCIsXCJrY2VkaWxcIjpcIsS3XCIsXCJLY3lcIjpcItCaXCIsXCJrY3lcIjpcItC6XCIsXCJLZnJcIjpcIvCdlI5cIixcImtmclwiOlwi8J2UqFwiLFwia2dyZWVuXCI6XCLEuFwiLFwiS0hjeVwiOlwi0KVcIixcImtoY3lcIjpcItGFXCIsXCJLSmN5XCI6XCLQjFwiLFwia2pjeVwiOlwi0ZxcIixcIktvcGZcIjpcIvCdlYJcIixcImtvcGZcIjpcIvCdlZxcIixcIktzY3JcIjpcIvCdkqZcIixcImtzY3JcIjpcIvCdk4BcIixcImxBYXJyXCI6XCLih5pcIixcIkxhY3V0ZVwiOlwixLlcIixcImxhY3V0ZVwiOlwixLpcIixcImxhZW1wdHl2XCI6XCLiprRcIixcImxhZ3JhblwiOlwi4oSSXCIsXCJMYW1iZGFcIjpcIs6bXCIsXCJsYW1iZGFcIjpcIs67XCIsXCJsYW5nXCI6XCLin6hcIixcIkxhbmdcIjpcIuKfqlwiLFwibGFuZ2RcIjpcIuKmkVwiLFwibGFuZ2xlXCI6XCLin6hcIixcImxhcFwiOlwi4qqFXCIsXCJMYXBsYWNldHJmXCI6XCLihJJcIixcImxhcXVvXCI6XCLCq1wiLFwibGFycmJcIjpcIuKHpFwiLFwibGFycmJmc1wiOlwi4qSfXCIsXCJsYXJyXCI6XCLihpBcIixcIkxhcnJcIjpcIuKGnlwiLFwibEFyclwiOlwi4oeQXCIsXCJsYXJyZnNcIjpcIuKknVwiLFwibGFycmhrXCI6XCLihqlcIixcImxhcnJscFwiOlwi4oarXCIsXCJsYXJycGxcIjpcIuKkuVwiLFwibGFycnNpbVwiOlwi4qWzXCIsXCJsYXJydGxcIjpcIuKGolwiLFwibGF0YWlsXCI6XCLipJlcIixcImxBdGFpbFwiOlwi4qSbXCIsXCJsYXRcIjpcIuKqq1wiLFwibGF0ZVwiOlwi4qqtXCIsXCJsYXRlc1wiOlwi4qqt77iAXCIsXCJsYmFyclwiOlwi4qSMXCIsXCJsQmFyclwiOlwi4qSOXCIsXCJsYmJya1wiOlwi4p2yXCIsXCJsYnJhY2VcIjpcIntcIixcImxicmFja1wiOlwiW1wiLFwibGJya2VcIjpcIuKmi1wiLFwibGJya3NsZFwiOlwi4qaPXCIsXCJsYnJrc2x1XCI6XCLipo1cIixcIkxjYXJvblwiOlwixL1cIixcImxjYXJvblwiOlwixL5cIixcIkxjZWRpbFwiOlwixLtcIixcImxjZWRpbFwiOlwixLxcIixcImxjZWlsXCI6XCLijIhcIixcImxjdWJcIjpcIntcIixcIkxjeVwiOlwi0JtcIixcImxjeVwiOlwi0LtcIixcImxkY2FcIjpcIuKktlwiLFwibGRxdW9cIjpcIuKAnFwiLFwibGRxdW9yXCI6XCLigJ5cIixcImxkcmRoYXJcIjpcIuKlp1wiLFwibGRydXNoYXJcIjpcIuKli1wiLFwibGRzaFwiOlwi4oayXCIsXCJsZVwiOlwi4omkXCIsXCJsRVwiOlwi4ommXCIsXCJMZWZ0QW5nbGVCcmFja2V0XCI6XCLin6hcIixcIkxlZnRBcnJvd0JhclwiOlwi4oekXCIsXCJsZWZ0YXJyb3dcIjpcIuKGkFwiLFwiTGVmdEFycm93XCI6XCLihpBcIixcIkxlZnRhcnJvd1wiOlwi4oeQXCIsXCJMZWZ0QXJyb3dSaWdodEFycm93XCI6XCLih4ZcIixcImxlZnRhcnJvd3RhaWxcIjpcIuKGolwiLFwiTGVmdENlaWxpbmdcIjpcIuKMiFwiLFwiTGVmdERvdWJsZUJyYWNrZXRcIjpcIuKfplwiLFwiTGVmdERvd25UZWVWZWN0b3JcIjpcIuKloVwiLFwiTGVmdERvd25WZWN0b3JCYXJcIjpcIuKlmVwiLFwiTGVmdERvd25WZWN0b3JcIjpcIuKHg1wiLFwiTGVmdEZsb29yXCI6XCLijIpcIixcImxlZnRoYXJwb29uZG93blwiOlwi4oa9XCIsXCJsZWZ0aGFycG9vbnVwXCI6XCLihrxcIixcImxlZnRsZWZ0YXJyb3dzXCI6XCLih4dcIixcImxlZnRyaWdodGFycm93XCI6XCLihpRcIixcIkxlZnRSaWdodEFycm93XCI6XCLihpRcIixcIkxlZnRyaWdodGFycm93XCI6XCLih5RcIixcImxlZnRyaWdodGFycm93c1wiOlwi4oeGXCIsXCJsZWZ0cmlnaHRoYXJwb29uc1wiOlwi4oeLXCIsXCJsZWZ0cmlnaHRzcXVpZ2Fycm93XCI6XCLihq1cIixcIkxlZnRSaWdodFZlY3RvclwiOlwi4qWOXCIsXCJMZWZ0VGVlQXJyb3dcIjpcIuKGpFwiLFwiTGVmdFRlZVwiOlwi4oqjXCIsXCJMZWZ0VGVlVmVjdG9yXCI6XCLipZpcIixcImxlZnR0aHJlZXRpbWVzXCI6XCLii4tcIixcIkxlZnRUcmlhbmdsZUJhclwiOlwi4qePXCIsXCJMZWZ0VHJpYW5nbGVcIjpcIuKKslwiLFwiTGVmdFRyaWFuZ2xlRXF1YWxcIjpcIuKKtFwiLFwiTGVmdFVwRG93blZlY3RvclwiOlwi4qWRXCIsXCJMZWZ0VXBUZWVWZWN0b3JcIjpcIuKloFwiLFwiTGVmdFVwVmVjdG9yQmFyXCI6XCLipZhcIixcIkxlZnRVcFZlY3RvclwiOlwi4oa/XCIsXCJMZWZ0VmVjdG9yQmFyXCI6XCLipZJcIixcIkxlZnRWZWN0b3JcIjpcIuKGvFwiLFwibEVnXCI6XCLiqotcIixcImxlZ1wiOlwi4ouaXCIsXCJsZXFcIjpcIuKJpFwiLFwibGVxcVwiOlwi4ommXCIsXCJsZXFzbGFudFwiOlwi4qm9XCIsXCJsZXNjY1wiOlwi4qqoXCIsXCJsZXNcIjpcIuKpvVwiLFwibGVzZG90XCI6XCLiqb9cIixcImxlc2RvdG9cIjpcIuKqgVwiLFwibGVzZG90b3JcIjpcIuKqg1wiLFwibGVzZ1wiOlwi4oua77iAXCIsXCJsZXNnZXNcIjpcIuKqk1wiLFwibGVzc2FwcHJveFwiOlwi4qqFXCIsXCJsZXNzZG90XCI6XCLii5ZcIixcImxlc3NlcWd0clwiOlwi4ouaXCIsXCJsZXNzZXFxZ3RyXCI6XCLiqotcIixcIkxlc3NFcXVhbEdyZWF0ZXJcIjpcIuKLmlwiLFwiTGVzc0Z1bGxFcXVhbFwiOlwi4ommXCIsXCJMZXNzR3JlYXRlclwiOlwi4om2XCIsXCJsZXNzZ3RyXCI6XCLiibZcIixcIkxlc3NMZXNzXCI6XCLiqqFcIixcImxlc3NzaW1cIjpcIuKJslwiLFwiTGVzc1NsYW50RXF1YWxcIjpcIuKpvVwiLFwiTGVzc1RpbGRlXCI6XCLiibJcIixcImxmaXNodFwiOlwi4qW8XCIsXCJsZmxvb3JcIjpcIuKMilwiLFwiTGZyXCI6XCLwnZSPXCIsXCJsZnJcIjpcIvCdlKlcIixcImxnXCI6XCLiibZcIixcImxnRVwiOlwi4qqRXCIsXCJsSGFyXCI6XCLipaJcIixcImxoYXJkXCI6XCLihr1cIixcImxoYXJ1XCI6XCLihrxcIixcImxoYXJ1bFwiOlwi4qWqXCIsXCJsaGJsa1wiOlwi4paEXCIsXCJMSmN5XCI6XCLQiVwiLFwibGpjeVwiOlwi0ZlcIixcImxsYXJyXCI6XCLih4dcIixcImxsXCI6XCLiiapcIixcIkxsXCI6XCLii5hcIixcImxsY29ybmVyXCI6XCLijJ5cIixcIkxsZWZ0YXJyb3dcIjpcIuKHmlwiLFwibGxoYXJkXCI6XCLipatcIixcImxsdHJpXCI6XCLil7pcIixcIkxtaWRvdFwiOlwixL9cIixcImxtaWRvdFwiOlwixYBcIixcImxtb3VzdGFjaGVcIjpcIuKOsFwiLFwibG1vdXN0XCI6XCLijrBcIixcImxuYXBcIjpcIuKqiVwiLFwibG5hcHByb3hcIjpcIuKqiVwiLFwibG5lXCI6XCLiqodcIixcImxuRVwiOlwi4omoXCIsXCJsbmVxXCI6XCLiqodcIixcImxuZXFxXCI6XCLiiahcIixcImxuc2ltXCI6XCLii6ZcIixcImxvYW5nXCI6XCLin6xcIixcImxvYXJyXCI6XCLih71cIixcImxvYnJrXCI6XCLin6ZcIixcImxvbmdsZWZ0YXJyb3dcIjpcIuKftVwiLFwiTG9uZ0xlZnRBcnJvd1wiOlwi4p+1XCIsXCJMb25nbGVmdGFycm93XCI6XCLin7hcIixcImxvbmdsZWZ0cmlnaHRhcnJvd1wiOlwi4p+3XCIsXCJMb25nTGVmdFJpZ2h0QXJyb3dcIjpcIuKft1wiLFwiTG9uZ2xlZnRyaWdodGFycm93XCI6XCLin7pcIixcImxvbmdtYXBzdG9cIjpcIuKfvFwiLFwibG9uZ3JpZ2h0YXJyb3dcIjpcIuKftlwiLFwiTG9uZ1JpZ2h0QXJyb3dcIjpcIuKftlwiLFwiTG9uZ3JpZ2h0YXJyb3dcIjpcIuKfuVwiLFwibG9vcGFycm93bGVmdFwiOlwi4oarXCIsXCJsb29wYXJyb3dyaWdodFwiOlwi4oasXCIsXCJsb3BhclwiOlwi4qaFXCIsXCJMb3BmXCI6XCLwnZWDXCIsXCJsb3BmXCI6XCLwnZWdXCIsXCJsb3BsdXNcIjpcIuKorVwiLFwibG90aW1lc1wiOlwi4qi0XCIsXCJsb3dhc3RcIjpcIuKIl1wiLFwibG93YmFyXCI6XCJfXCIsXCJMb3dlckxlZnRBcnJvd1wiOlwi4oaZXCIsXCJMb3dlclJpZ2h0QXJyb3dcIjpcIuKGmFwiLFwibG96XCI6XCLil4pcIixcImxvemVuZ2VcIjpcIuKXilwiLFwibG96ZlwiOlwi4qerXCIsXCJscGFyXCI6XCIoXCIsXCJscGFybHRcIjpcIuKmk1wiLFwibHJhcnJcIjpcIuKHhlwiLFwibHJjb3JuZXJcIjpcIuKMn1wiLFwibHJoYXJcIjpcIuKHi1wiLFwibHJoYXJkXCI6XCLipa1cIixcImxybVwiOlwi4oCOXCIsXCJscnRyaVwiOlwi4oq/XCIsXCJsc2FxdW9cIjpcIuKAuVwiLFwibHNjclwiOlwi8J2TgVwiLFwiTHNjclwiOlwi4oSSXCIsXCJsc2hcIjpcIuKGsFwiLFwiTHNoXCI6XCLihrBcIixcImxzaW1cIjpcIuKJslwiLFwibHNpbWVcIjpcIuKqjVwiLFwibHNpbWdcIjpcIuKqj1wiLFwibHNxYlwiOlwiW1wiLFwibHNxdW9cIjpcIuKAmFwiLFwibHNxdW9yXCI6XCLigJpcIixcIkxzdHJva1wiOlwixYFcIixcImxzdHJva1wiOlwixYJcIixcImx0Y2NcIjpcIuKqplwiLFwibHRjaXJcIjpcIuKpuVwiLFwibHRcIjpcIjxcIixcIkxUXCI6XCI8XCIsXCJMdFwiOlwi4omqXCIsXCJsdGRvdFwiOlwi4ouWXCIsXCJsdGhyZWVcIjpcIuKLi1wiLFwibHRpbWVzXCI6XCLii4lcIixcImx0bGFyclwiOlwi4qW2XCIsXCJsdHF1ZXN0XCI6XCLiqbtcIixcImx0cmlcIjpcIuKXg1wiLFwibHRyaWVcIjpcIuKKtFwiLFwibHRyaWZcIjpcIuKXglwiLFwibHRyUGFyXCI6XCLippZcIixcImx1cmRzaGFyXCI6XCLipYpcIixcImx1cnVoYXJcIjpcIuKlplwiLFwibHZlcnRuZXFxXCI6XCLiiajvuIBcIixcImx2bkVcIjpcIuKJqO+4gFwiLFwibWFjclwiOlwiwq9cIixcIm1hbGVcIjpcIuKZglwiLFwibWFsdFwiOlwi4pygXCIsXCJtYWx0ZXNlXCI6XCLinKBcIixcIk1hcFwiOlwi4qSFXCIsXCJtYXBcIjpcIuKGplwiLFwibWFwc3RvXCI6XCLihqZcIixcIm1hcHN0b2Rvd25cIjpcIuKGp1wiLFwibWFwc3RvbGVmdFwiOlwi4oakXCIsXCJtYXBzdG91cFwiOlwi4oalXCIsXCJtYXJrZXJcIjpcIuKWrlwiLFwibWNvbW1hXCI6XCLiqKlcIixcIk1jeVwiOlwi0JxcIixcIm1jeVwiOlwi0LxcIixcIm1kYXNoXCI6XCLigJRcIixcIm1ERG90XCI6XCLiiLpcIixcIm1lYXN1cmVkYW5nbGVcIjpcIuKIoVwiLFwiTWVkaXVtU3BhY2VcIjpcIuKBn1wiLFwiTWVsbGludHJmXCI6XCLihLNcIixcIk1mclwiOlwi8J2UkFwiLFwibWZyXCI6XCLwnZSqXCIsXCJtaG9cIjpcIuKEp1wiLFwibWljcm9cIjpcIsK1XCIsXCJtaWRhc3RcIjpcIipcIixcIm1pZGNpclwiOlwi4quwXCIsXCJtaWRcIjpcIuKIo1wiLFwibWlkZG90XCI6XCLCt1wiLFwibWludXNiXCI6XCLiip9cIixcIm1pbnVzXCI6XCLiiJJcIixcIm1pbnVzZFwiOlwi4oi4XCIsXCJtaW51c2R1XCI6XCLiqKpcIixcIk1pbnVzUGx1c1wiOlwi4oiTXCIsXCJtbGNwXCI6XCLiq5tcIixcIm1sZHJcIjpcIuKAplwiLFwibW5wbHVzXCI6XCLiiJNcIixcIm1vZGVsc1wiOlwi4oqnXCIsXCJNb3BmXCI6XCLwnZWEXCIsXCJtb3BmXCI6XCLwnZWeXCIsXCJtcFwiOlwi4oiTXCIsXCJtc2NyXCI6XCLwnZOCXCIsXCJNc2NyXCI6XCLihLNcIixcIm1zdHBvc1wiOlwi4oi+XCIsXCJNdVwiOlwizpxcIixcIm11XCI6XCLOvFwiLFwibXVsdGltYXBcIjpcIuKKuFwiLFwibXVtYXBcIjpcIuKKuFwiLFwibmFibGFcIjpcIuKIh1wiLFwiTmFjdXRlXCI6XCLFg1wiLFwibmFjdXRlXCI6XCLFhFwiLFwibmFuZ1wiOlwi4oig4oOSXCIsXCJuYXBcIjpcIuKJiVwiLFwibmFwRVwiOlwi4qmwzLhcIixcIm5hcGlkXCI6XCLiiYvMuFwiLFwibmFwb3NcIjpcIsWJXCIsXCJuYXBwcm94XCI6XCLiiYlcIixcIm5hdHVyYWxcIjpcIuKZrlwiLFwibmF0dXJhbHNcIjpcIuKElVwiLFwibmF0dXJcIjpcIuKZrlwiLFwibmJzcFwiOlwiwqBcIixcIm5idW1wXCI6XCLiiY7MuFwiLFwibmJ1bXBlXCI6XCLiiY/MuFwiLFwibmNhcFwiOlwi4qmDXCIsXCJOY2Fyb25cIjpcIsWHXCIsXCJuY2Fyb25cIjpcIsWIXCIsXCJOY2VkaWxcIjpcIsWFXCIsXCJuY2VkaWxcIjpcIsWGXCIsXCJuY29uZ1wiOlwi4omHXCIsXCJuY29uZ2RvdFwiOlwi4qmtzLhcIixcIm5jdXBcIjpcIuKpglwiLFwiTmN5XCI6XCLQnVwiLFwibmN5XCI6XCLQvVwiLFwibmRhc2hcIjpcIuKAk1wiLFwibmVhcmhrXCI6XCLipKRcIixcIm5lYXJyXCI6XCLihpdcIixcIm5lQXJyXCI6XCLih5dcIixcIm5lYXJyb3dcIjpcIuKGl1wiLFwibmVcIjpcIuKJoFwiLFwibmVkb3RcIjpcIuKJkMy4XCIsXCJOZWdhdGl2ZU1lZGl1bVNwYWNlXCI6XCLigItcIixcIk5lZ2F0aXZlVGhpY2tTcGFjZVwiOlwi4oCLXCIsXCJOZWdhdGl2ZVRoaW5TcGFjZVwiOlwi4oCLXCIsXCJOZWdhdGl2ZVZlcnlUaGluU3BhY2VcIjpcIuKAi1wiLFwibmVxdWl2XCI6XCLiiaJcIixcIm5lc2VhclwiOlwi4qSoXCIsXCJuZXNpbVwiOlwi4omCzLhcIixcIk5lc3RlZEdyZWF0ZXJHcmVhdGVyXCI6XCLiiatcIixcIk5lc3RlZExlc3NMZXNzXCI6XCLiiapcIixcIk5ld0xpbmVcIjpcIlxcblwiLFwibmV4aXN0XCI6XCLiiIRcIixcIm5leGlzdHNcIjpcIuKIhFwiLFwiTmZyXCI6XCLwnZSRXCIsXCJuZnJcIjpcIvCdlKtcIixcIm5nRVwiOlwi4omnzLhcIixcIm5nZVwiOlwi4omxXCIsXCJuZ2VxXCI6XCLiibFcIixcIm5nZXFxXCI6XCLiiafMuFwiLFwibmdlcXNsYW50XCI6XCLiqb7MuFwiLFwibmdlc1wiOlwi4qm+zLhcIixcIm5HZ1wiOlwi4ouZzLhcIixcIm5nc2ltXCI6XCLiibVcIixcIm5HdFwiOlwi4omr4oOSXCIsXCJuZ3RcIjpcIuKJr1wiLFwibmd0clwiOlwi4omvXCIsXCJuR3R2XCI6XCLiiavMuFwiLFwibmhhcnJcIjpcIuKGrlwiLFwibmhBcnJcIjpcIuKHjlwiLFwibmhwYXJcIjpcIuKrslwiLFwibmlcIjpcIuKIi1wiLFwibmlzXCI6XCLii7xcIixcIm5pc2RcIjpcIuKLulwiLFwibml2XCI6XCLiiItcIixcIk5KY3lcIjpcItCKXCIsXCJuamN5XCI6XCLRmlwiLFwibmxhcnJcIjpcIuKGmlwiLFwibmxBcnJcIjpcIuKHjVwiLFwibmxkclwiOlwi4oClXCIsXCJubEVcIjpcIuKJpsy4XCIsXCJubGVcIjpcIuKJsFwiLFwibmxlZnRhcnJvd1wiOlwi4oaaXCIsXCJuTGVmdGFycm93XCI6XCLih41cIixcIm5sZWZ0cmlnaHRhcnJvd1wiOlwi4oauXCIsXCJuTGVmdHJpZ2h0YXJyb3dcIjpcIuKHjlwiLFwibmxlcVwiOlwi4omwXCIsXCJubGVxcVwiOlwi4ommzLhcIixcIm5sZXFzbGFudFwiOlwi4qm9zLhcIixcIm5sZXNcIjpcIuKpvcy4XCIsXCJubGVzc1wiOlwi4omuXCIsXCJuTGxcIjpcIuKLmMy4XCIsXCJubHNpbVwiOlwi4om0XCIsXCJuTHRcIjpcIuKJquKDklwiLFwibmx0XCI6XCLiia5cIixcIm5sdHJpXCI6XCLii6pcIixcIm5sdHJpZVwiOlwi4ousXCIsXCJuTHR2XCI6XCLiiarMuFwiLFwibm1pZFwiOlwi4oikXCIsXCJOb0JyZWFrXCI6XCLigaBcIixcIk5vbkJyZWFraW5nU3BhY2VcIjpcIsKgXCIsXCJub3BmXCI6XCLwnZWfXCIsXCJOb3BmXCI6XCLihJVcIixcIk5vdFwiOlwi4qusXCIsXCJub3RcIjpcIsKsXCIsXCJOb3RDb25ncnVlbnRcIjpcIuKJolwiLFwiTm90Q3VwQ2FwXCI6XCLiia1cIixcIk5vdERvdWJsZVZlcnRpY2FsQmFyXCI6XCLiiKZcIixcIk5vdEVsZW1lbnRcIjpcIuKIiVwiLFwiTm90RXF1YWxcIjpcIuKJoFwiLFwiTm90RXF1YWxUaWxkZVwiOlwi4omCzLhcIixcIk5vdEV4aXN0c1wiOlwi4oiEXCIsXCJOb3RHcmVhdGVyXCI6XCLiia9cIixcIk5vdEdyZWF0ZXJFcXVhbFwiOlwi4omxXCIsXCJOb3RHcmVhdGVyRnVsbEVxdWFsXCI6XCLiiafMuFwiLFwiTm90R3JlYXRlckdyZWF0ZXJcIjpcIuKJq8y4XCIsXCJOb3RHcmVhdGVyTGVzc1wiOlwi4om5XCIsXCJOb3RHcmVhdGVyU2xhbnRFcXVhbFwiOlwi4qm+zLhcIixcIk5vdEdyZWF0ZXJUaWxkZVwiOlwi4om1XCIsXCJOb3RIdW1wRG93bkh1bXBcIjpcIuKJjsy4XCIsXCJOb3RIdW1wRXF1YWxcIjpcIuKJj8y4XCIsXCJub3RpblwiOlwi4oiJXCIsXCJub3RpbmRvdFwiOlwi4ou1zLhcIixcIm5vdGluRVwiOlwi4ou5zLhcIixcIm5vdGludmFcIjpcIuKIiVwiLFwibm90aW52YlwiOlwi4ou3XCIsXCJub3RpbnZjXCI6XCLii7ZcIixcIk5vdExlZnRUcmlhbmdsZUJhclwiOlwi4qePzLhcIixcIk5vdExlZnRUcmlhbmdsZVwiOlwi4ouqXCIsXCJOb3RMZWZ0VHJpYW5nbGVFcXVhbFwiOlwi4ousXCIsXCJOb3RMZXNzXCI6XCLiia5cIixcIk5vdExlc3NFcXVhbFwiOlwi4omwXCIsXCJOb3RMZXNzR3JlYXRlclwiOlwi4om4XCIsXCJOb3RMZXNzTGVzc1wiOlwi4omqzLhcIixcIk5vdExlc3NTbGFudEVxdWFsXCI6XCLiqb3MuFwiLFwiTm90TGVzc1RpbGRlXCI6XCLiibRcIixcIk5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyXCI6XCLiqqLMuFwiLFwiTm90TmVzdGVkTGVzc0xlc3NcIjpcIuKqocy4XCIsXCJub3RuaVwiOlwi4oiMXCIsXCJub3RuaXZhXCI6XCLiiIxcIixcIm5vdG5pdmJcIjpcIuKLvlwiLFwibm90bml2Y1wiOlwi4ou9XCIsXCJOb3RQcmVjZWRlc1wiOlwi4oqAXCIsXCJOb3RQcmVjZWRlc0VxdWFsXCI6XCLiqq/MuFwiLFwiTm90UHJlY2VkZXNTbGFudEVxdWFsXCI6XCLii6BcIixcIk5vdFJldmVyc2VFbGVtZW50XCI6XCLiiIxcIixcIk5vdFJpZ2h0VHJpYW5nbGVCYXJcIjpcIuKnkMy4XCIsXCJOb3RSaWdodFRyaWFuZ2xlXCI6XCLii6tcIixcIk5vdFJpZ2h0VHJpYW5nbGVFcXVhbFwiOlwi4outXCIsXCJOb3RTcXVhcmVTdWJzZXRcIjpcIuKKj8y4XCIsXCJOb3RTcXVhcmVTdWJzZXRFcXVhbFwiOlwi4ouiXCIsXCJOb3RTcXVhcmVTdXBlcnNldFwiOlwi4oqQzLhcIixcIk5vdFNxdWFyZVN1cGVyc2V0RXF1YWxcIjpcIuKLo1wiLFwiTm90U3Vic2V0XCI6XCLiioLig5JcIixcIk5vdFN1YnNldEVxdWFsXCI6XCLiiohcIixcIk5vdFN1Y2NlZWRzXCI6XCLiioFcIixcIk5vdFN1Y2NlZWRzRXF1YWxcIjpcIuKqsMy4XCIsXCJOb3RTdWNjZWVkc1NsYW50RXF1YWxcIjpcIuKLoVwiLFwiTm90U3VjY2VlZHNUaWxkZVwiOlwi4om/zLhcIixcIk5vdFN1cGVyc2V0XCI6XCLiioPig5JcIixcIk5vdFN1cGVyc2V0RXF1YWxcIjpcIuKKiVwiLFwiTm90VGlsZGVcIjpcIuKJgVwiLFwiTm90VGlsZGVFcXVhbFwiOlwi4omEXCIsXCJOb3RUaWxkZUZ1bGxFcXVhbFwiOlwi4omHXCIsXCJOb3RUaWxkZVRpbGRlXCI6XCLiiYlcIixcIk5vdFZlcnRpY2FsQmFyXCI6XCLiiKRcIixcIm5wYXJhbGxlbFwiOlwi4oimXCIsXCJucGFyXCI6XCLiiKZcIixcIm5wYXJzbFwiOlwi4qu94oOlXCIsXCJucGFydFwiOlwi4oiCzLhcIixcIm5wb2xpbnRcIjpcIuKolFwiLFwibnByXCI6XCLiioBcIixcIm5wcmN1ZVwiOlwi4ougXCIsXCJucHJlY1wiOlwi4oqAXCIsXCJucHJlY2VxXCI6XCLiqq/MuFwiLFwibnByZVwiOlwi4qqvzLhcIixcIm5yYXJyY1wiOlwi4qSzzLhcIixcIm5yYXJyXCI6XCLihptcIixcIm5yQXJyXCI6XCLih49cIixcIm5yYXJyd1wiOlwi4oadzLhcIixcIm5yaWdodGFycm93XCI6XCLihptcIixcIm5SaWdodGFycm93XCI6XCLih49cIixcIm5ydHJpXCI6XCLii6tcIixcIm5ydHJpZVwiOlwi4outXCIsXCJuc2NcIjpcIuKKgVwiLFwibnNjY3VlXCI6XCLii6FcIixcIm5zY2VcIjpcIuKqsMy4XCIsXCJOc2NyXCI6XCLwnZKpXCIsXCJuc2NyXCI6XCLwnZODXCIsXCJuc2hvcnRtaWRcIjpcIuKIpFwiLFwibnNob3J0cGFyYWxsZWxcIjpcIuKIplwiLFwibnNpbVwiOlwi4omBXCIsXCJuc2ltZVwiOlwi4omEXCIsXCJuc2ltZXFcIjpcIuKJhFwiLFwibnNtaWRcIjpcIuKIpFwiLFwibnNwYXJcIjpcIuKIplwiLFwibnNxc3ViZVwiOlwi4ouiXCIsXCJuc3FzdXBlXCI6XCLii6NcIixcIm5zdWJcIjpcIuKKhFwiLFwibnN1YkVcIjpcIuKrhcy4XCIsXCJuc3ViZVwiOlwi4oqIXCIsXCJuc3Vic2V0XCI6XCLiioLig5JcIixcIm5zdWJzZXRlcVwiOlwi4oqIXCIsXCJuc3Vic2V0ZXFxXCI6XCLiq4XMuFwiLFwibnN1Y2NcIjpcIuKKgVwiLFwibnN1Y2NlcVwiOlwi4qqwzLhcIixcIm5zdXBcIjpcIuKKhVwiLFwibnN1cEVcIjpcIuKrhsy4XCIsXCJuc3VwZVwiOlwi4oqJXCIsXCJuc3Vwc2V0XCI6XCLiioPig5JcIixcIm5zdXBzZXRlcVwiOlwi4oqJXCIsXCJuc3Vwc2V0ZXFxXCI6XCLiq4bMuFwiLFwibnRnbFwiOlwi4om5XCIsXCJOdGlsZGVcIjpcIsORXCIsXCJudGlsZGVcIjpcIsOxXCIsXCJudGxnXCI6XCLiibhcIixcIm50cmlhbmdsZWxlZnRcIjpcIuKLqlwiLFwibnRyaWFuZ2xlbGVmdGVxXCI6XCLii6xcIixcIm50cmlhbmdsZXJpZ2h0XCI6XCLii6tcIixcIm50cmlhbmdsZXJpZ2h0ZXFcIjpcIuKLrVwiLFwiTnVcIjpcIs6dXCIsXCJudVwiOlwizr1cIixcIm51bVwiOlwiI1wiLFwibnVtZXJvXCI6XCLihJZcIixcIm51bXNwXCI6XCLigIdcIixcIm52YXBcIjpcIuKJjeKDklwiLFwibnZkYXNoXCI6XCLiiqxcIixcIm52RGFzaFwiOlwi4oqtXCIsXCJuVmRhc2hcIjpcIuKKrlwiLFwiblZEYXNoXCI6XCLiiq9cIixcIm52Z2VcIjpcIuKJpeKDklwiLFwibnZndFwiOlwiPuKDklwiLFwibnZIYXJyXCI6XCLipIRcIixcIm52aW5maW5cIjpcIuKnnlwiLFwibnZsQXJyXCI6XCLipIJcIixcIm52bGVcIjpcIuKJpOKDklwiLFwibnZsdFwiOlwiPOKDklwiLFwibnZsdHJpZVwiOlwi4oq04oOSXCIsXCJudnJBcnJcIjpcIuKkg1wiLFwibnZydHJpZVwiOlwi4oq14oOSXCIsXCJudnNpbVwiOlwi4oi84oOSXCIsXCJud2FyaGtcIjpcIuKko1wiLFwibndhcnJcIjpcIuKGllwiLFwibndBcnJcIjpcIuKHllwiLFwibndhcnJvd1wiOlwi4oaWXCIsXCJud25lYXJcIjpcIuKkp1wiLFwiT2FjdXRlXCI6XCLDk1wiLFwib2FjdXRlXCI6XCLDs1wiLFwib2FzdFwiOlwi4oqbXCIsXCJPY2lyY1wiOlwiw5RcIixcIm9jaXJjXCI6XCLDtFwiLFwib2NpclwiOlwi4oqaXCIsXCJPY3lcIjpcItCeXCIsXCJvY3lcIjpcItC+XCIsXCJvZGFzaFwiOlwi4oqdXCIsXCJPZGJsYWNcIjpcIsWQXCIsXCJvZGJsYWNcIjpcIsWRXCIsXCJvZGl2XCI6XCLiqLhcIixcIm9kb3RcIjpcIuKKmVwiLFwib2Rzb2xkXCI6XCLiprxcIixcIk9FbGlnXCI6XCLFklwiLFwib2VsaWdcIjpcIsWTXCIsXCJvZmNpclwiOlwi4qa/XCIsXCJPZnJcIjpcIvCdlJJcIixcIm9mclwiOlwi8J2UrFwiLFwib2dvblwiOlwiy5tcIixcIk9ncmF2ZVwiOlwiw5JcIixcIm9ncmF2ZVwiOlwiw7JcIixcIm9ndFwiOlwi4qeBXCIsXCJvaGJhclwiOlwi4qa1XCIsXCJvaG1cIjpcIs6pXCIsXCJvaW50XCI6XCLiiK5cIixcIm9sYXJyXCI6XCLihrpcIixcIm9sY2lyXCI6XCLipr5cIixcIm9sY3Jvc3NcIjpcIuKmu1wiLFwib2xpbmVcIjpcIuKAvlwiLFwib2x0XCI6XCLip4BcIixcIk9tYWNyXCI6XCLFjFwiLFwib21hY3JcIjpcIsWNXCIsXCJPbWVnYVwiOlwizqlcIixcIm9tZWdhXCI6XCLPiVwiLFwiT21pY3JvblwiOlwizp9cIixcIm9taWNyb25cIjpcIs6/XCIsXCJvbWlkXCI6XCLiprZcIixcIm9taW51c1wiOlwi4oqWXCIsXCJPb3BmXCI6XCLwnZWGXCIsXCJvb3BmXCI6XCLwnZWgXCIsXCJvcGFyXCI6XCLiprdcIixcIk9wZW5DdXJseURvdWJsZVF1b3RlXCI6XCLigJxcIixcIk9wZW5DdXJseVF1b3RlXCI6XCLigJhcIixcIm9wZXJwXCI6XCLiprlcIixcIm9wbHVzXCI6XCLiipVcIixcIm9yYXJyXCI6XCLihrtcIixcIk9yXCI6XCLiqZRcIixcIm9yXCI6XCLiiKhcIixcIm9yZFwiOlwi4qmdXCIsXCJvcmRlclwiOlwi4oS0XCIsXCJvcmRlcm9mXCI6XCLihLRcIixcIm9yZGZcIjpcIsKqXCIsXCJvcmRtXCI6XCLCulwiLFwib3JpZ29mXCI6XCLiirZcIixcIm9yb3JcIjpcIuKpllwiLFwib3JzbG9wZVwiOlwi4qmXXCIsXCJvcnZcIjpcIuKpm1wiLFwib1NcIjpcIuKTiFwiLFwiT3NjclwiOlwi8J2SqlwiLFwib3NjclwiOlwi4oS0XCIsXCJPc2xhc2hcIjpcIsOYXCIsXCJvc2xhc2hcIjpcIsO4XCIsXCJvc29sXCI6XCLiiphcIixcIk90aWxkZVwiOlwiw5VcIixcIm90aWxkZVwiOlwiw7VcIixcIm90aW1lc2FzXCI6XCLiqLZcIixcIk90aW1lc1wiOlwi4qi3XCIsXCJvdGltZXNcIjpcIuKKl1wiLFwiT3VtbFwiOlwiw5ZcIixcIm91bWxcIjpcIsO2XCIsXCJvdmJhclwiOlwi4oy9XCIsXCJPdmVyQmFyXCI6XCLigL5cIixcIk92ZXJCcmFjZVwiOlwi4o+eXCIsXCJPdmVyQnJhY2tldFwiOlwi4o60XCIsXCJPdmVyUGFyZW50aGVzaXNcIjpcIuKPnFwiLFwicGFyYVwiOlwiwrZcIixcInBhcmFsbGVsXCI6XCLiiKVcIixcInBhclwiOlwi4oilXCIsXCJwYXJzaW1cIjpcIuKrs1wiLFwicGFyc2xcIjpcIuKrvVwiLFwicGFydFwiOlwi4oiCXCIsXCJQYXJ0aWFsRFwiOlwi4oiCXCIsXCJQY3lcIjpcItCfXCIsXCJwY3lcIjpcItC/XCIsXCJwZXJjbnRcIjpcIiVcIixcInBlcmlvZFwiOlwiLlwiLFwicGVybWlsXCI6XCLigLBcIixcInBlcnBcIjpcIuKKpVwiLFwicGVydGVua1wiOlwi4oCxXCIsXCJQZnJcIjpcIvCdlJNcIixcInBmclwiOlwi8J2UrVwiLFwiUGhpXCI6XCLOplwiLFwicGhpXCI6XCLPhlwiLFwicGhpdlwiOlwiz5VcIixcInBobW1hdFwiOlwi4oSzXCIsXCJwaG9uZVwiOlwi4piOXCIsXCJQaVwiOlwizqBcIixcInBpXCI6XCLPgFwiLFwicGl0Y2hmb3JrXCI6XCLii5RcIixcInBpdlwiOlwiz5ZcIixcInBsYW5ja1wiOlwi4oSPXCIsXCJwbGFuY2toXCI6XCLihI5cIixcInBsYW5rdlwiOlwi4oSPXCIsXCJwbHVzYWNpclwiOlwi4qijXCIsXCJwbHVzYlwiOlwi4oqeXCIsXCJwbHVzY2lyXCI6XCLiqKJcIixcInBsdXNcIjpcIitcIixcInBsdXNkb1wiOlwi4oiUXCIsXCJwbHVzZHVcIjpcIuKopVwiLFwicGx1c2VcIjpcIuKpslwiLFwiUGx1c01pbnVzXCI6XCLCsVwiLFwicGx1c21uXCI6XCLCsVwiLFwicGx1c3NpbVwiOlwi4qimXCIsXCJwbHVzdHdvXCI6XCLiqKdcIixcInBtXCI6XCLCsVwiLFwiUG9pbmNhcmVwbGFuZVwiOlwi4oSMXCIsXCJwb2ludGludFwiOlwi4qiVXCIsXCJwb3BmXCI6XCLwnZWhXCIsXCJQb3BmXCI6XCLihJlcIixcInBvdW5kXCI6XCLCo1wiLFwicHJhcFwiOlwi4qq3XCIsXCJQclwiOlwi4qq7XCIsXCJwclwiOlwi4om6XCIsXCJwcmN1ZVwiOlwi4om8XCIsXCJwcmVjYXBwcm94XCI6XCLiqrdcIixcInByZWNcIjpcIuKJulwiLFwicHJlY2N1cmx5ZXFcIjpcIuKJvFwiLFwiUHJlY2VkZXNcIjpcIuKJulwiLFwiUHJlY2VkZXNFcXVhbFwiOlwi4qqvXCIsXCJQcmVjZWRlc1NsYW50RXF1YWxcIjpcIuKJvFwiLFwiUHJlY2VkZXNUaWxkZVwiOlwi4om+XCIsXCJwcmVjZXFcIjpcIuKqr1wiLFwicHJlY25hcHByb3hcIjpcIuKquVwiLFwicHJlY25lcXFcIjpcIuKqtVwiLFwicHJlY25zaW1cIjpcIuKLqFwiLFwicHJlXCI6XCLiqq9cIixcInByRVwiOlwi4qqzXCIsXCJwcmVjc2ltXCI6XCLiib5cIixcInByaW1lXCI6XCLigLJcIixcIlByaW1lXCI6XCLigLNcIixcInByaW1lc1wiOlwi4oSZXCIsXCJwcm5hcFwiOlwi4qq5XCIsXCJwcm5FXCI6XCLiqrVcIixcInBybnNpbVwiOlwi4ouoXCIsXCJwcm9kXCI6XCLiiI9cIixcIlByb2R1Y3RcIjpcIuKIj1wiLFwicHJvZmFsYXJcIjpcIuKMrlwiLFwicHJvZmxpbmVcIjpcIuKMklwiLFwicHJvZnN1cmZcIjpcIuKMk1wiLFwicHJvcFwiOlwi4oidXCIsXCJQcm9wb3J0aW9uYWxcIjpcIuKInVwiLFwiUHJvcG9ydGlvblwiOlwi4oi3XCIsXCJwcm9wdG9cIjpcIuKInVwiLFwicHJzaW1cIjpcIuKJvlwiLFwicHJ1cmVsXCI6XCLiirBcIixcIlBzY3JcIjpcIvCdkqtcIixcInBzY3JcIjpcIvCdk4VcIixcIlBzaVwiOlwizqhcIixcInBzaVwiOlwiz4hcIixcInB1bmNzcFwiOlwi4oCIXCIsXCJRZnJcIjpcIvCdlJRcIixcInFmclwiOlwi8J2UrlwiLFwicWludFwiOlwi4qiMXCIsXCJxb3BmXCI6XCLwnZWiXCIsXCJRb3BmXCI6XCLihJpcIixcInFwcmltZVwiOlwi4oGXXCIsXCJRc2NyXCI6XCLwnZKsXCIsXCJxc2NyXCI6XCLwnZOGXCIsXCJxdWF0ZXJuaW9uc1wiOlwi4oSNXCIsXCJxdWF0aW50XCI6XCLiqJZcIixcInF1ZXN0XCI6XCI/XCIsXCJxdWVzdGVxXCI6XCLiiZ9cIixcInF1b3RcIjpcIlxcXCJcIixcIlFVT1RcIjpcIlxcXCJcIixcInJBYXJyXCI6XCLih5tcIixcInJhY2VcIjpcIuKIvcyxXCIsXCJSYWN1dGVcIjpcIsWUXCIsXCJyYWN1dGVcIjpcIsWVXCIsXCJyYWRpY1wiOlwi4oiaXCIsXCJyYWVtcHR5dlwiOlwi4qazXCIsXCJyYW5nXCI6XCLin6lcIixcIlJhbmdcIjpcIuKfq1wiLFwicmFuZ2RcIjpcIuKmklwiLFwicmFuZ2VcIjpcIuKmpVwiLFwicmFuZ2xlXCI6XCLin6lcIixcInJhcXVvXCI6XCLCu1wiLFwicmFycmFwXCI6XCLipbVcIixcInJhcnJiXCI6XCLih6VcIixcInJhcnJiZnNcIjpcIuKkoFwiLFwicmFycmNcIjpcIuKks1wiLFwicmFyclwiOlwi4oaSXCIsXCJSYXJyXCI6XCLihqBcIixcInJBcnJcIjpcIuKHklwiLFwicmFycmZzXCI6XCLipJ5cIixcInJhcnJoa1wiOlwi4oaqXCIsXCJyYXJybHBcIjpcIuKGrFwiLFwicmFycnBsXCI6XCLipYVcIixcInJhcnJzaW1cIjpcIuKltFwiLFwiUmFycnRsXCI6XCLipJZcIixcInJhcnJ0bFwiOlwi4oajXCIsXCJyYXJyd1wiOlwi4oadXCIsXCJyYXRhaWxcIjpcIuKkmlwiLFwickF0YWlsXCI6XCLipJxcIixcInJhdGlvXCI6XCLiiLZcIixcInJhdGlvbmFsc1wiOlwi4oSaXCIsXCJyYmFyclwiOlwi4qSNXCIsXCJyQmFyclwiOlwi4qSPXCIsXCJSQmFyclwiOlwi4qSQXCIsXCJyYmJya1wiOlwi4p2zXCIsXCJyYnJhY2VcIjpcIn1cIixcInJicmFja1wiOlwiXVwiLFwicmJya2VcIjpcIuKmjFwiLFwicmJya3NsZFwiOlwi4qaOXCIsXCJyYnJrc2x1XCI6XCLippBcIixcIlJjYXJvblwiOlwixZhcIixcInJjYXJvblwiOlwixZlcIixcIlJjZWRpbFwiOlwixZZcIixcInJjZWRpbFwiOlwixZdcIixcInJjZWlsXCI6XCLijIlcIixcInJjdWJcIjpcIn1cIixcIlJjeVwiOlwi0KBcIixcInJjeVwiOlwi0YBcIixcInJkY2FcIjpcIuKkt1wiLFwicmRsZGhhclwiOlwi4qWpXCIsXCJyZHF1b1wiOlwi4oCdXCIsXCJyZHF1b3JcIjpcIuKAnVwiLFwicmRzaFwiOlwi4oazXCIsXCJyZWFsXCI6XCLihJxcIixcInJlYWxpbmVcIjpcIuKEm1wiLFwicmVhbHBhcnRcIjpcIuKEnFwiLFwicmVhbHNcIjpcIuKEnVwiLFwiUmVcIjpcIuKEnFwiLFwicmVjdFwiOlwi4patXCIsXCJyZWdcIjpcIsKuXCIsXCJSRUdcIjpcIsKuXCIsXCJSZXZlcnNlRWxlbWVudFwiOlwi4oiLXCIsXCJSZXZlcnNlRXF1aWxpYnJpdW1cIjpcIuKHi1wiLFwiUmV2ZXJzZVVwRXF1aWxpYnJpdW1cIjpcIuKlr1wiLFwicmZpc2h0XCI6XCLipb1cIixcInJmbG9vclwiOlwi4oyLXCIsXCJyZnJcIjpcIvCdlK9cIixcIlJmclwiOlwi4oScXCIsXCJySGFyXCI6XCLipaRcIixcInJoYXJkXCI6XCLih4FcIixcInJoYXJ1XCI6XCLih4BcIixcInJoYXJ1bFwiOlwi4qWsXCIsXCJSaG9cIjpcIs6hXCIsXCJyaG9cIjpcIs+BXCIsXCJyaG92XCI6XCLPsVwiLFwiUmlnaHRBbmdsZUJyYWNrZXRcIjpcIuKfqVwiLFwiUmlnaHRBcnJvd0JhclwiOlwi4oelXCIsXCJyaWdodGFycm93XCI6XCLihpJcIixcIlJpZ2h0QXJyb3dcIjpcIuKGklwiLFwiUmlnaHRhcnJvd1wiOlwi4oeSXCIsXCJSaWdodEFycm93TGVmdEFycm93XCI6XCLih4RcIixcInJpZ2h0YXJyb3d0YWlsXCI6XCLihqNcIixcIlJpZ2h0Q2VpbGluZ1wiOlwi4oyJXCIsXCJSaWdodERvdWJsZUJyYWNrZXRcIjpcIuKfp1wiLFwiUmlnaHREb3duVGVlVmVjdG9yXCI6XCLipZ1cIixcIlJpZ2h0RG93blZlY3RvckJhclwiOlwi4qWVXCIsXCJSaWdodERvd25WZWN0b3JcIjpcIuKHglwiLFwiUmlnaHRGbG9vclwiOlwi4oyLXCIsXCJyaWdodGhhcnBvb25kb3duXCI6XCLih4FcIixcInJpZ2h0aGFycG9vbnVwXCI6XCLih4BcIixcInJpZ2h0bGVmdGFycm93c1wiOlwi4oeEXCIsXCJyaWdodGxlZnRoYXJwb29uc1wiOlwi4oeMXCIsXCJyaWdodHJpZ2h0YXJyb3dzXCI6XCLih4lcIixcInJpZ2h0c3F1aWdhcnJvd1wiOlwi4oadXCIsXCJSaWdodFRlZUFycm93XCI6XCLihqZcIixcIlJpZ2h0VGVlXCI6XCLiiqJcIixcIlJpZ2h0VGVlVmVjdG9yXCI6XCLipZtcIixcInJpZ2h0dGhyZWV0aW1lc1wiOlwi4ouMXCIsXCJSaWdodFRyaWFuZ2xlQmFyXCI6XCLip5BcIixcIlJpZ2h0VHJpYW5nbGVcIjpcIuKKs1wiLFwiUmlnaHRUcmlhbmdsZUVxdWFsXCI6XCLiirVcIixcIlJpZ2h0VXBEb3duVmVjdG9yXCI6XCLipY9cIixcIlJpZ2h0VXBUZWVWZWN0b3JcIjpcIuKlnFwiLFwiUmlnaHRVcFZlY3RvckJhclwiOlwi4qWUXCIsXCJSaWdodFVwVmVjdG9yXCI6XCLihr5cIixcIlJpZ2h0VmVjdG9yQmFyXCI6XCLipZNcIixcIlJpZ2h0VmVjdG9yXCI6XCLih4BcIixcInJpbmdcIjpcIsuaXCIsXCJyaXNpbmdkb3RzZXFcIjpcIuKJk1wiLFwicmxhcnJcIjpcIuKHhFwiLFwicmxoYXJcIjpcIuKHjFwiLFwicmxtXCI6XCLigI9cIixcInJtb3VzdGFjaGVcIjpcIuKOsVwiLFwicm1vdXN0XCI6XCLijrFcIixcInJubWlkXCI6XCLiq65cIixcInJvYW5nXCI6XCLin61cIixcInJvYXJyXCI6XCLih75cIixcInJvYnJrXCI6XCLin6dcIixcInJvcGFyXCI6XCLipoZcIixcInJvcGZcIjpcIvCdlaNcIixcIlJvcGZcIjpcIuKEnVwiLFwicm9wbHVzXCI6XCLiqK5cIixcInJvdGltZXNcIjpcIuKotVwiLFwiUm91bmRJbXBsaWVzXCI6XCLipbBcIixcInJwYXJcIjpcIilcIixcInJwYXJndFwiOlwi4qaUXCIsXCJycHBvbGludFwiOlwi4qiSXCIsXCJycmFyclwiOlwi4oeJXCIsXCJScmlnaHRhcnJvd1wiOlwi4oebXCIsXCJyc2FxdW9cIjpcIuKAulwiLFwicnNjclwiOlwi8J2Th1wiLFwiUnNjclwiOlwi4oSbXCIsXCJyc2hcIjpcIuKGsVwiLFwiUnNoXCI6XCLihrFcIixcInJzcWJcIjpcIl1cIixcInJzcXVvXCI6XCLigJlcIixcInJzcXVvclwiOlwi4oCZXCIsXCJydGhyZWVcIjpcIuKLjFwiLFwicnRpbWVzXCI6XCLii4pcIixcInJ0cmlcIjpcIuKWuVwiLFwicnRyaWVcIjpcIuKKtVwiLFwicnRyaWZcIjpcIuKWuFwiLFwicnRyaWx0cmlcIjpcIuKnjlwiLFwiUnVsZURlbGF5ZWRcIjpcIuKntFwiLFwicnVsdWhhclwiOlwi4qWoXCIsXCJyeFwiOlwi4oSeXCIsXCJTYWN1dGVcIjpcIsWaXCIsXCJzYWN1dGVcIjpcIsWbXCIsXCJzYnF1b1wiOlwi4oCaXCIsXCJzY2FwXCI6XCLiqrhcIixcIlNjYXJvblwiOlwixaBcIixcInNjYXJvblwiOlwixaFcIixcIlNjXCI6XCLiqrxcIixcInNjXCI6XCLiibtcIixcInNjY3VlXCI6XCLiib1cIixcInNjZVwiOlwi4qqwXCIsXCJzY0VcIjpcIuKqtFwiLFwiU2NlZGlsXCI6XCLFnlwiLFwic2NlZGlsXCI6XCLFn1wiLFwiU2NpcmNcIjpcIsWcXCIsXCJzY2lyY1wiOlwixZ1cIixcInNjbmFwXCI6XCLiqrpcIixcInNjbkVcIjpcIuKqtlwiLFwic2Nuc2ltXCI6XCLii6lcIixcInNjcG9saW50XCI6XCLiqJNcIixcInNjc2ltXCI6XCLiib9cIixcIlNjeVwiOlwi0KFcIixcInNjeVwiOlwi0YFcIixcInNkb3RiXCI6XCLiiqFcIixcInNkb3RcIjpcIuKLhVwiLFwic2RvdGVcIjpcIuKpplwiLFwic2VhcmhrXCI6XCLipKVcIixcInNlYXJyXCI6XCLihphcIixcInNlQXJyXCI6XCLih5hcIixcInNlYXJyb3dcIjpcIuKGmFwiLFwic2VjdFwiOlwiwqdcIixcInNlbWlcIjpcIjtcIixcInNlc3dhclwiOlwi4qSpXCIsXCJzZXRtaW51c1wiOlwi4oiWXCIsXCJzZXRtblwiOlwi4oiWXCIsXCJzZXh0XCI6XCLinLZcIixcIlNmclwiOlwi8J2UllwiLFwic2ZyXCI6XCLwnZSwXCIsXCJzZnJvd25cIjpcIuKMolwiLFwic2hhcnBcIjpcIuKZr1wiLFwiU0hDSGN5XCI6XCLQqVwiLFwic2hjaGN5XCI6XCLRiVwiLFwiU0hjeVwiOlwi0KhcIixcInNoY3lcIjpcItGIXCIsXCJTaG9ydERvd25BcnJvd1wiOlwi4oaTXCIsXCJTaG9ydExlZnRBcnJvd1wiOlwi4oaQXCIsXCJzaG9ydG1pZFwiOlwi4oijXCIsXCJzaG9ydHBhcmFsbGVsXCI6XCLiiKVcIixcIlNob3J0UmlnaHRBcnJvd1wiOlwi4oaSXCIsXCJTaG9ydFVwQXJyb3dcIjpcIuKGkVwiLFwic2h5XCI6XCLCrVwiLFwiU2lnbWFcIjpcIs6jXCIsXCJzaWdtYVwiOlwiz4NcIixcInNpZ21hZlwiOlwiz4JcIixcInNpZ21hdlwiOlwiz4JcIixcInNpbVwiOlwi4oi8XCIsXCJzaW1kb3RcIjpcIuKpqlwiLFwic2ltZVwiOlwi4omDXCIsXCJzaW1lcVwiOlwi4omDXCIsXCJzaW1nXCI6XCLiqp5cIixcInNpbWdFXCI6XCLiqqBcIixcInNpbWxcIjpcIuKqnVwiLFwic2ltbEVcIjpcIuKqn1wiLFwic2ltbmVcIjpcIuKJhlwiLFwic2ltcGx1c1wiOlwi4qikXCIsXCJzaW1yYXJyXCI6XCLipbJcIixcInNsYXJyXCI6XCLihpBcIixcIlNtYWxsQ2lyY2xlXCI6XCLiiJhcIixcInNtYWxsc2V0bWludXNcIjpcIuKIllwiLFwic21hc2hwXCI6XCLiqLNcIixcInNtZXBhcnNsXCI6XCLip6RcIixcInNtaWRcIjpcIuKIo1wiLFwic21pbGVcIjpcIuKMo1wiLFwic210XCI6XCLiqqpcIixcInNtdGVcIjpcIuKqrFwiLFwic210ZXNcIjpcIuKqrO+4gFwiLFwiU09GVGN5XCI6XCLQrFwiLFwic29mdGN5XCI6XCLRjFwiLFwic29sYmFyXCI6XCLijL9cIixcInNvbGJcIjpcIuKnhFwiLFwic29sXCI6XCIvXCIsXCJTb3BmXCI6XCLwnZWKXCIsXCJzb3BmXCI6XCLwnZWkXCIsXCJzcGFkZXNcIjpcIuKZoFwiLFwic3BhZGVzdWl0XCI6XCLimaBcIixcInNwYXJcIjpcIuKIpVwiLFwic3FjYXBcIjpcIuKKk1wiLFwic3FjYXBzXCI6XCLiipPvuIBcIixcInNxY3VwXCI6XCLiipRcIixcInNxY3Vwc1wiOlwi4oqU77iAXCIsXCJTcXJ0XCI6XCLiiJpcIixcInNxc3ViXCI6XCLiio9cIixcInNxc3ViZVwiOlwi4oqRXCIsXCJzcXN1YnNldFwiOlwi4oqPXCIsXCJzcXN1YnNldGVxXCI6XCLiipFcIixcInNxc3VwXCI6XCLiipBcIixcInNxc3VwZVwiOlwi4oqSXCIsXCJzcXN1cHNldFwiOlwi4oqQXCIsXCJzcXN1cHNldGVxXCI6XCLiipJcIixcInNxdWFyZVwiOlwi4pahXCIsXCJTcXVhcmVcIjpcIuKWoVwiLFwiU3F1YXJlSW50ZXJzZWN0aW9uXCI6XCLiipNcIixcIlNxdWFyZVN1YnNldFwiOlwi4oqPXCIsXCJTcXVhcmVTdWJzZXRFcXVhbFwiOlwi4oqRXCIsXCJTcXVhcmVTdXBlcnNldFwiOlwi4oqQXCIsXCJTcXVhcmVTdXBlcnNldEVxdWFsXCI6XCLiipJcIixcIlNxdWFyZVVuaW9uXCI6XCLiipRcIixcInNxdWFyZlwiOlwi4paqXCIsXCJzcXVcIjpcIuKWoVwiLFwic3F1ZlwiOlwi4paqXCIsXCJzcmFyclwiOlwi4oaSXCIsXCJTc2NyXCI6XCLwnZKuXCIsXCJzc2NyXCI6XCLwnZOIXCIsXCJzc2V0bW5cIjpcIuKIllwiLFwic3NtaWxlXCI6XCLijKNcIixcInNzdGFyZlwiOlwi4ouGXCIsXCJTdGFyXCI6XCLii4ZcIixcInN0YXJcIjpcIuKYhlwiLFwic3RhcmZcIjpcIuKYhVwiLFwic3RyYWlnaHRlcHNpbG9uXCI6XCLPtVwiLFwic3RyYWlnaHRwaGlcIjpcIs+VXCIsXCJzdHJuc1wiOlwiwq9cIixcInN1YlwiOlwi4oqCXCIsXCJTdWJcIjpcIuKLkFwiLFwic3ViZG90XCI6XCLiqr1cIixcInN1YkVcIjpcIuKrhVwiLFwic3ViZVwiOlwi4oqGXCIsXCJzdWJlZG90XCI6XCLiq4NcIixcInN1Ym11bHRcIjpcIuKrgVwiLFwic3VibkVcIjpcIuKri1wiLFwic3VibmVcIjpcIuKKilwiLFwic3VicGx1c1wiOlwi4qq/XCIsXCJzdWJyYXJyXCI6XCLipblcIixcInN1YnNldFwiOlwi4oqCXCIsXCJTdWJzZXRcIjpcIuKLkFwiLFwic3Vic2V0ZXFcIjpcIuKKhlwiLFwic3Vic2V0ZXFxXCI6XCLiq4VcIixcIlN1YnNldEVxdWFsXCI6XCLiioZcIixcInN1YnNldG5lcVwiOlwi4oqKXCIsXCJzdWJzZXRuZXFxXCI6XCLiq4tcIixcInN1YnNpbVwiOlwi4quHXCIsXCJzdWJzdWJcIjpcIuKrlVwiLFwic3Vic3VwXCI6XCLiq5NcIixcInN1Y2NhcHByb3hcIjpcIuKquFwiLFwic3VjY1wiOlwi4om7XCIsXCJzdWNjY3VybHllcVwiOlwi4om9XCIsXCJTdWNjZWVkc1wiOlwi4om7XCIsXCJTdWNjZWVkc0VxdWFsXCI6XCLiqrBcIixcIlN1Y2NlZWRzU2xhbnRFcXVhbFwiOlwi4om9XCIsXCJTdWNjZWVkc1RpbGRlXCI6XCLiib9cIixcInN1Y2NlcVwiOlwi4qqwXCIsXCJzdWNjbmFwcHJveFwiOlwi4qq6XCIsXCJzdWNjbmVxcVwiOlwi4qq2XCIsXCJzdWNjbnNpbVwiOlwi4oupXCIsXCJzdWNjc2ltXCI6XCLiib9cIixcIlN1Y2hUaGF0XCI6XCLiiItcIixcInN1bVwiOlwi4oiRXCIsXCJTdW1cIjpcIuKIkVwiLFwic3VuZ1wiOlwi4pmqXCIsXCJzdXAxXCI6XCLCuVwiLFwic3VwMlwiOlwiwrJcIixcInN1cDNcIjpcIsKzXCIsXCJzdXBcIjpcIuKKg1wiLFwiU3VwXCI6XCLii5FcIixcInN1cGRvdFwiOlwi4qq+XCIsXCJzdXBkc3ViXCI6XCLiq5hcIixcInN1cEVcIjpcIuKrhlwiLFwic3VwZVwiOlwi4oqHXCIsXCJzdXBlZG90XCI6XCLiq4RcIixcIlN1cGVyc2V0XCI6XCLiioNcIixcIlN1cGVyc2V0RXF1YWxcIjpcIuKKh1wiLFwic3VwaHNvbFwiOlwi4p+JXCIsXCJzdXBoc3ViXCI6XCLiq5dcIixcInN1cGxhcnJcIjpcIuKlu1wiLFwic3VwbXVsdFwiOlwi4quCXCIsXCJzdXBuRVwiOlwi4quMXCIsXCJzdXBuZVwiOlwi4oqLXCIsXCJzdXBwbHVzXCI6XCLiq4BcIixcInN1cHNldFwiOlwi4oqDXCIsXCJTdXBzZXRcIjpcIuKLkVwiLFwic3Vwc2V0ZXFcIjpcIuKKh1wiLFwic3Vwc2V0ZXFxXCI6XCLiq4ZcIixcInN1cHNldG5lcVwiOlwi4oqLXCIsXCJzdXBzZXRuZXFxXCI6XCLiq4xcIixcInN1cHNpbVwiOlwi4quIXCIsXCJzdXBzdWJcIjpcIuKrlFwiLFwic3Vwc3VwXCI6XCLiq5ZcIixcInN3YXJoa1wiOlwi4qSmXCIsXCJzd2FyclwiOlwi4oaZXCIsXCJzd0FyclwiOlwi4oeZXCIsXCJzd2Fycm93XCI6XCLihplcIixcInN3bndhclwiOlwi4qSqXCIsXCJzemxpZ1wiOlwiw59cIixcIlRhYlwiOlwiXFx0XCIsXCJ0YXJnZXRcIjpcIuKMllwiLFwiVGF1XCI6XCLOpFwiLFwidGF1XCI6XCLPhFwiLFwidGJya1wiOlwi4o60XCIsXCJUY2Fyb25cIjpcIsWkXCIsXCJ0Y2Fyb25cIjpcIsWlXCIsXCJUY2VkaWxcIjpcIsWiXCIsXCJ0Y2VkaWxcIjpcIsWjXCIsXCJUY3lcIjpcItCiXCIsXCJ0Y3lcIjpcItGCXCIsXCJ0ZG90XCI6XCLig5tcIixcInRlbHJlY1wiOlwi4oyVXCIsXCJUZnJcIjpcIvCdlJdcIixcInRmclwiOlwi8J2UsVwiLFwidGhlcmU0XCI6XCLiiLRcIixcInRoZXJlZm9yZVwiOlwi4oi0XCIsXCJUaGVyZWZvcmVcIjpcIuKItFwiLFwiVGhldGFcIjpcIs6YXCIsXCJ0aGV0YVwiOlwizrhcIixcInRoZXRhc3ltXCI6XCLPkVwiLFwidGhldGF2XCI6XCLPkVwiLFwidGhpY2thcHByb3hcIjpcIuKJiFwiLFwidGhpY2tzaW1cIjpcIuKIvFwiLFwiVGhpY2tTcGFjZVwiOlwi4oGf4oCKXCIsXCJUaGluU3BhY2VcIjpcIuKAiVwiLFwidGhpbnNwXCI6XCLigIlcIixcInRoa2FwXCI6XCLiiYhcIixcInRoa3NpbVwiOlwi4oi8XCIsXCJUSE9STlwiOlwiw55cIixcInRob3JuXCI6XCLDvlwiLFwidGlsZGVcIjpcIsucXCIsXCJUaWxkZVwiOlwi4oi8XCIsXCJUaWxkZUVxdWFsXCI6XCLiiYNcIixcIlRpbGRlRnVsbEVxdWFsXCI6XCLiiYVcIixcIlRpbGRlVGlsZGVcIjpcIuKJiFwiLFwidGltZXNiYXJcIjpcIuKosVwiLFwidGltZXNiXCI6XCLiiqBcIixcInRpbWVzXCI6XCLDl1wiLFwidGltZXNkXCI6XCLiqLBcIixcInRpbnRcIjpcIuKIrVwiLFwidG9lYVwiOlwi4qSoXCIsXCJ0b3Bib3RcIjpcIuKMtlwiLFwidG9wY2lyXCI6XCLiq7FcIixcInRvcFwiOlwi4oqkXCIsXCJUb3BmXCI6XCLwnZWLXCIsXCJ0b3BmXCI6XCLwnZWlXCIsXCJ0b3Bmb3JrXCI6XCLiq5pcIixcInRvc2FcIjpcIuKkqVwiLFwidHByaW1lXCI6XCLigLRcIixcInRyYWRlXCI6XCLihKJcIixcIlRSQURFXCI6XCLihKJcIixcInRyaWFuZ2xlXCI6XCLilrVcIixcInRyaWFuZ2xlZG93blwiOlwi4pa/XCIsXCJ0cmlhbmdsZWxlZnRcIjpcIuKXg1wiLFwidHJpYW5nbGVsZWZ0ZXFcIjpcIuKKtFwiLFwidHJpYW5nbGVxXCI6XCLiiZxcIixcInRyaWFuZ2xlcmlnaHRcIjpcIuKWuVwiLFwidHJpYW5nbGVyaWdodGVxXCI6XCLiirVcIixcInRyaWRvdFwiOlwi4pesXCIsXCJ0cmllXCI6XCLiiZxcIixcInRyaW1pbnVzXCI6XCLiqLpcIixcIlRyaXBsZURvdFwiOlwi4oObXCIsXCJ0cmlwbHVzXCI6XCLiqLlcIixcInRyaXNiXCI6XCLip41cIixcInRyaXRpbWVcIjpcIuKou1wiLFwidHJwZXppdW1cIjpcIuKPolwiLFwiVHNjclwiOlwi8J2Sr1wiLFwidHNjclwiOlwi8J2TiVwiLFwiVFNjeVwiOlwi0KZcIixcInRzY3lcIjpcItGGXCIsXCJUU0hjeVwiOlwi0ItcIixcInRzaGN5XCI6XCLRm1wiLFwiVHN0cm9rXCI6XCLFplwiLFwidHN0cm9rXCI6XCLFp1wiLFwidHdpeHRcIjpcIuKJrFwiLFwidHdvaGVhZGxlZnRhcnJvd1wiOlwi4oaeXCIsXCJ0d29oZWFkcmlnaHRhcnJvd1wiOlwi4oagXCIsXCJVYWN1dGVcIjpcIsOaXCIsXCJ1YWN1dGVcIjpcIsO6XCIsXCJ1YXJyXCI6XCLihpFcIixcIlVhcnJcIjpcIuKGn1wiLFwidUFyclwiOlwi4oeRXCIsXCJVYXJyb2NpclwiOlwi4qWJXCIsXCJVYnJjeVwiOlwi0I5cIixcInVicmN5XCI6XCLRnlwiLFwiVWJyZXZlXCI6XCLFrFwiLFwidWJyZXZlXCI6XCLFrVwiLFwiVWNpcmNcIjpcIsObXCIsXCJ1Y2lyY1wiOlwiw7tcIixcIlVjeVwiOlwi0KNcIixcInVjeVwiOlwi0YNcIixcInVkYXJyXCI6XCLih4VcIixcIlVkYmxhY1wiOlwixbBcIixcInVkYmxhY1wiOlwixbFcIixcInVkaGFyXCI6XCLipa5cIixcInVmaXNodFwiOlwi4qW+XCIsXCJVZnJcIjpcIvCdlJhcIixcInVmclwiOlwi8J2UslwiLFwiVWdyYXZlXCI6XCLDmVwiLFwidWdyYXZlXCI6XCLDuVwiLFwidUhhclwiOlwi4qWjXCIsXCJ1aGFybFwiOlwi4oa/XCIsXCJ1aGFyclwiOlwi4oa+XCIsXCJ1aGJsa1wiOlwi4paAXCIsXCJ1bGNvcm5cIjpcIuKMnFwiLFwidWxjb3JuZXJcIjpcIuKMnFwiLFwidWxjcm9wXCI6XCLijI9cIixcInVsdHJpXCI6XCLil7hcIixcIlVtYWNyXCI6XCLFqlwiLFwidW1hY3JcIjpcIsWrXCIsXCJ1bWxcIjpcIsKoXCIsXCJVbmRlckJhclwiOlwiX1wiLFwiVW5kZXJCcmFjZVwiOlwi4o+fXCIsXCJVbmRlckJyYWNrZXRcIjpcIuKOtVwiLFwiVW5kZXJQYXJlbnRoZXNpc1wiOlwi4o+dXCIsXCJVbmlvblwiOlwi4ouDXCIsXCJVbmlvblBsdXNcIjpcIuKKjlwiLFwiVW9nb25cIjpcIsWyXCIsXCJ1b2dvblwiOlwixbNcIixcIlVvcGZcIjpcIvCdlYxcIixcInVvcGZcIjpcIvCdlaZcIixcIlVwQXJyb3dCYXJcIjpcIuKkklwiLFwidXBhcnJvd1wiOlwi4oaRXCIsXCJVcEFycm93XCI6XCLihpFcIixcIlVwYXJyb3dcIjpcIuKHkVwiLFwiVXBBcnJvd0Rvd25BcnJvd1wiOlwi4oeFXCIsXCJ1cGRvd25hcnJvd1wiOlwi4oaVXCIsXCJVcERvd25BcnJvd1wiOlwi4oaVXCIsXCJVcGRvd25hcnJvd1wiOlwi4oeVXCIsXCJVcEVxdWlsaWJyaXVtXCI6XCLipa5cIixcInVwaGFycG9vbmxlZnRcIjpcIuKGv1wiLFwidXBoYXJwb29ucmlnaHRcIjpcIuKGvlwiLFwidXBsdXNcIjpcIuKKjlwiLFwiVXBwZXJMZWZ0QXJyb3dcIjpcIuKGllwiLFwiVXBwZXJSaWdodEFycm93XCI6XCLihpdcIixcInVwc2lcIjpcIs+FXCIsXCJVcHNpXCI6XCLPklwiLFwidXBzaWhcIjpcIs+SXCIsXCJVcHNpbG9uXCI6XCLOpVwiLFwidXBzaWxvblwiOlwiz4VcIixcIlVwVGVlQXJyb3dcIjpcIuKGpVwiLFwiVXBUZWVcIjpcIuKKpVwiLFwidXB1cGFycm93c1wiOlwi4oeIXCIsXCJ1cmNvcm5cIjpcIuKMnVwiLFwidXJjb3JuZXJcIjpcIuKMnVwiLFwidXJjcm9wXCI6XCLijI5cIixcIlVyaW5nXCI6XCLFrlwiLFwidXJpbmdcIjpcIsWvXCIsXCJ1cnRyaVwiOlwi4pe5XCIsXCJVc2NyXCI6XCLwnZKwXCIsXCJ1c2NyXCI6XCLwnZOKXCIsXCJ1dGRvdFwiOlwi4ouwXCIsXCJVdGlsZGVcIjpcIsWoXCIsXCJ1dGlsZGVcIjpcIsWpXCIsXCJ1dHJpXCI6XCLilrVcIixcInV0cmlmXCI6XCLilrRcIixcInV1YXJyXCI6XCLih4hcIixcIlV1bWxcIjpcIsOcXCIsXCJ1dW1sXCI6XCLDvFwiLFwidXdhbmdsZVwiOlwi4qanXCIsXCJ2YW5ncnRcIjpcIuKmnFwiLFwidmFyZXBzaWxvblwiOlwiz7VcIixcInZhcmthcHBhXCI6XCLPsFwiLFwidmFybm90aGluZ1wiOlwi4oiFXCIsXCJ2YXJwaGlcIjpcIs+VXCIsXCJ2YXJwaVwiOlwiz5ZcIixcInZhcnByb3B0b1wiOlwi4oidXCIsXCJ2YXJyXCI6XCLihpVcIixcInZBcnJcIjpcIuKHlVwiLFwidmFycmhvXCI6XCLPsVwiLFwidmFyc2lnbWFcIjpcIs+CXCIsXCJ2YXJzdWJzZXRuZXFcIjpcIuKKiu+4gFwiLFwidmFyc3Vic2V0bmVxcVwiOlwi4quL77iAXCIsXCJ2YXJzdXBzZXRuZXFcIjpcIuKKi++4gFwiLFwidmFyc3Vwc2V0bmVxcVwiOlwi4quM77iAXCIsXCJ2YXJ0aGV0YVwiOlwiz5FcIixcInZhcnRyaWFuZ2xlbGVmdFwiOlwi4oqyXCIsXCJ2YXJ0cmlhbmdsZXJpZ2h0XCI6XCLiirNcIixcInZCYXJcIjpcIuKrqFwiLFwiVmJhclwiOlwi4qurXCIsXCJ2QmFydlwiOlwi4qupXCIsXCJWY3lcIjpcItCSXCIsXCJ2Y3lcIjpcItCyXCIsXCJ2ZGFzaFwiOlwi4oqiXCIsXCJ2RGFzaFwiOlwi4oqoXCIsXCJWZGFzaFwiOlwi4oqpXCIsXCJWRGFzaFwiOlwi4oqrXCIsXCJWZGFzaGxcIjpcIuKrplwiLFwidmVlYmFyXCI6XCLiirtcIixcInZlZVwiOlwi4oioXCIsXCJWZWVcIjpcIuKLgVwiLFwidmVlZXFcIjpcIuKJmlwiLFwidmVsbGlwXCI6XCLii65cIixcInZlcmJhclwiOlwifFwiLFwiVmVyYmFyXCI6XCLigJZcIixcInZlcnRcIjpcInxcIixcIlZlcnRcIjpcIuKAllwiLFwiVmVydGljYWxCYXJcIjpcIuKIo1wiLFwiVmVydGljYWxMaW5lXCI6XCJ8XCIsXCJWZXJ0aWNhbFNlcGFyYXRvclwiOlwi4p2YXCIsXCJWZXJ0aWNhbFRpbGRlXCI6XCLiiYBcIixcIlZlcnlUaGluU3BhY2VcIjpcIuKAilwiLFwiVmZyXCI6XCLwnZSZXCIsXCJ2ZnJcIjpcIvCdlLNcIixcInZsdHJpXCI6XCLiirJcIixcInZuc3ViXCI6XCLiioLig5JcIixcInZuc3VwXCI6XCLiioPig5JcIixcIlZvcGZcIjpcIvCdlY1cIixcInZvcGZcIjpcIvCdladcIixcInZwcm9wXCI6XCLiiJ1cIixcInZydHJpXCI6XCLiirNcIixcIlZzY3JcIjpcIvCdkrFcIixcInZzY3JcIjpcIvCdk4tcIixcInZzdWJuRVwiOlwi4quL77iAXCIsXCJ2c3VibmVcIjpcIuKKiu+4gFwiLFwidnN1cG5FXCI6XCLiq4zvuIBcIixcInZzdXBuZVwiOlwi4oqL77iAXCIsXCJWdmRhc2hcIjpcIuKKqlwiLFwidnppZ3phZ1wiOlwi4qaaXCIsXCJXY2lyY1wiOlwixbRcIixcIndjaXJjXCI6XCLFtVwiLFwid2VkYmFyXCI6XCLiqZ9cIixcIndlZGdlXCI6XCLiiKdcIixcIldlZGdlXCI6XCLii4BcIixcIndlZGdlcVwiOlwi4omZXCIsXCJ3ZWllcnBcIjpcIuKEmFwiLFwiV2ZyXCI6XCLwnZSaXCIsXCJ3ZnJcIjpcIvCdlLRcIixcIldvcGZcIjpcIvCdlY5cIixcIndvcGZcIjpcIvCdlahcIixcIndwXCI6XCLihJhcIixcIndyXCI6XCLiiYBcIixcIndyZWF0aFwiOlwi4omAXCIsXCJXc2NyXCI6XCLwnZKyXCIsXCJ3c2NyXCI6XCLwnZOMXCIsXCJ4Y2FwXCI6XCLii4JcIixcInhjaXJjXCI6XCLil69cIixcInhjdXBcIjpcIuKLg1wiLFwieGR0cmlcIjpcIuKWvVwiLFwiWGZyXCI6XCLwnZSbXCIsXCJ4ZnJcIjpcIvCdlLVcIixcInhoYXJyXCI6XCLin7dcIixcInhoQXJyXCI6XCLin7pcIixcIlhpXCI6XCLOnlwiLFwieGlcIjpcIs6+XCIsXCJ4bGFyclwiOlwi4p+1XCIsXCJ4bEFyclwiOlwi4p+4XCIsXCJ4bWFwXCI6XCLin7xcIixcInhuaXNcIjpcIuKLu1wiLFwieG9kb3RcIjpcIuKogFwiLFwiWG9wZlwiOlwi8J2Vj1wiLFwieG9wZlwiOlwi8J2VqVwiLFwieG9wbHVzXCI6XCLiqIFcIixcInhvdGltZVwiOlwi4qiCXCIsXCJ4cmFyclwiOlwi4p+2XCIsXCJ4ckFyclwiOlwi4p+5XCIsXCJYc2NyXCI6XCLwnZKzXCIsXCJ4c2NyXCI6XCLwnZONXCIsXCJ4c3FjdXBcIjpcIuKohlwiLFwieHVwbHVzXCI6XCLiqIRcIixcInh1dHJpXCI6XCLilrNcIixcInh2ZWVcIjpcIuKLgVwiLFwieHdlZGdlXCI6XCLii4BcIixcIllhY3V0ZVwiOlwiw51cIixcInlhY3V0ZVwiOlwiw71cIixcIllBY3lcIjpcItCvXCIsXCJ5YWN5XCI6XCLRj1wiLFwiWWNpcmNcIjpcIsW2XCIsXCJ5Y2lyY1wiOlwixbdcIixcIlljeVwiOlwi0KtcIixcInljeVwiOlwi0YtcIixcInllblwiOlwiwqVcIixcIllmclwiOlwi8J2UnFwiLFwieWZyXCI6XCLwnZS2XCIsXCJZSWN5XCI6XCLQh1wiLFwieWljeVwiOlwi0ZdcIixcIllvcGZcIjpcIvCdlZBcIixcInlvcGZcIjpcIvCdlapcIixcIllzY3JcIjpcIvCdkrRcIixcInlzY3JcIjpcIvCdk45cIixcIllVY3lcIjpcItCuXCIsXCJ5dWN5XCI6XCLRjlwiLFwieXVtbFwiOlwiw79cIixcIll1bWxcIjpcIsW4XCIsXCJaYWN1dGVcIjpcIsW5XCIsXCJ6YWN1dGVcIjpcIsW6XCIsXCJaY2Fyb25cIjpcIsW9XCIsXCJ6Y2Fyb25cIjpcIsW+XCIsXCJaY3lcIjpcItCXXCIsXCJ6Y3lcIjpcItC3XCIsXCJaZG90XCI6XCLFu1wiLFwiemRvdFwiOlwixbxcIixcInplZXRyZlwiOlwi4oSoXCIsXCJaZXJvV2lkdGhTcGFjZVwiOlwi4oCLXCIsXCJaZXRhXCI6XCLOllwiLFwiemV0YVwiOlwizrZcIixcInpmclwiOlwi8J2Ut1wiLFwiWmZyXCI6XCLihKhcIixcIlpIY3lcIjpcItCWXCIsXCJ6aGN5XCI6XCLQtlwiLFwiemlncmFyclwiOlwi4oedXCIsXCJ6b3BmXCI6XCLwnZWrXCIsXCJab3BmXCI6XCLihKRcIixcIlpzY3JcIjpcIvCdkrVcIixcInpzY3JcIjpcIvCdk49cIixcInp3alwiOlwi4oCNXCIsXCJ6d25qXCI6XCLigIxcIn1cblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcInVuaXZlcnNhbFwiOjUwLFwidGFnXCI6MzAsXCJhdHRyaWJ1dGVcIjoxLFwicHNldWRvXCI6MCxcImRlc2NlbmRhbnRcIjotMSxcImNoaWxkXCI6LTEsXCJwYXJlbnRcIjotMSxcInNpYmxpbmdcIjotMSxcImFkamFjZW50XCI6LTF9XG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBJbnNwaXJlZCBieSBHb29nbGUgQ2xvc3VyZTpcbi8vIGh0dHA6Ly9jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vc3ZuL2RvY3MvXG4vLyBjbG9zdXJlX2dvb2dfYXJyYXlfYXJyYXkuanMuaHRtbCNnb29nLmFycmF5LmNsZWFyXG5cblxuXG52YXIgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0dmFsdWUodGhpcykubGVuZ3RoID0gMDtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHt9O1xuXG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIHRvSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpXG5cbiAgLCBtYXggPSBNYXRoLm1heDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiByZXR1cm4gbWF4KDAsIHRvSW50ZWdlcih2YWx1ZSkpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlLCBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiwgcGxhaW5PYmplY3QgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoLyogQ3VzdG9tQ3JlYXRlKi8pIHtcblx0dmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mLCBjdXN0b21DcmVhdGUgPSBhcmd1bWVudHNbMF0gfHwgY3JlYXRlO1xuXHRpZiAodHlwZW9mIHNldFByb3RvdHlwZU9mICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIGdldFByb3RvdHlwZU9mKHNldFByb3RvdHlwZU9mKGN1c3RvbUNyZWF0ZShudWxsKSwgcGxhaW5PYmplY3QpKSA9PT0gcGxhaW5PYmplY3Q7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQgbm8tcHJvdG86IFwib2ZmXCIgKi9cblxuLy8gQmlnIHRoYW5rcyB0byBAV2ViUmVmbGVjdGlvbiBmb3Igc29ydGluZyB0aGlzIG91dFxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi81NTkzNTU0XG5cblxuXG52YXIgaXNPYmplY3QgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSlcbiAgLCB2YWx1ZSAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApXG4gICwgb2JqSXNQcm90b3R5cGVPZiA9IE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZlxuICAsIGRlZmluZVByb3BlcnR5ICA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICAsIG51bGxEZXNjICAgICAgICA9IHtcblx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0d3JpdGFibGU6IHRydWUsXG5cdHZhbHVlOiB1bmRlZmluZWRcbn1cbiAgLCB2YWxpZGF0ZTtcblxudmFsaWRhdGUgPSBmdW5jdGlvbiAob2JqLCBwcm90b3R5cGUpIHtcblx0dmFsdWUob2JqKTtcblx0aWYgKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBpc09iamVjdChwcm90b3R5cGUpKSByZXR1cm4gb2JqO1xuXHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdG90eXBlIG11c3QgYmUgbnVsbCBvciBhbiBvYmplY3RcIik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoc3RhdHVzKSB7XG5cdHZhciBmbiwgc2V0O1xuXHRpZiAoIXN0YXR1cykgcmV0dXJuIG51bGw7XG5cdGlmIChzdGF0dXMubGV2ZWwgPT09IDIpIHtcblx0XHRpZiAoc3RhdHVzLnNldCkge1xuXHRcdFx0c2V0ID0gc3RhdHVzLnNldDtcblx0XHRcdGZuID0gZnVuY3Rpb24gKG9iaiwgcHJvdG90eXBlKSB7XG5cdFx0XHRcdHNldC5jYWxsKHZhbGlkYXRlKG9iaiwgcHJvdG90eXBlKSwgcHJvdG90eXBlKTtcblx0XHRcdFx0cmV0dXJuIG9iajtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZuID0gZnVuY3Rpb24gKG9iaiwgcHJvdG90eXBlKSB7XG5cdFx0XHRcdHZhbGlkYXRlKG9iaiwgcHJvdG90eXBlKS5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG5cdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmbiA9IGZ1bmN0aW9uIHNlbGYob2JqLCBwcm90b3R5cGUpIHtcblx0XHRcdHZhciBpc051bGxCYXNlO1xuXHRcdFx0dmFsaWRhdGUob2JqLCBwcm90b3R5cGUpO1xuXHRcdFx0aXNOdWxsQmFzZSA9IG9iaklzUHJvdG90eXBlT2YuY2FsbChzZWxmLm51bGxQb2x5ZmlsbCwgb2JqKTtcblx0XHRcdGlmIChpc051bGxCYXNlKSBkZWxldGUgc2VsZi5udWxsUG9seWZpbGwuX19wcm90b19fO1xuXHRcdFx0aWYgKHByb3RvdHlwZSA9PT0gbnVsbCkgcHJvdG90eXBlID0gc2VsZi5udWxsUG9seWZpbGw7XG5cdFx0XHRvYmouX19wcm90b19fID0gcHJvdG90eXBlO1xuXHRcdFx0aWYgKGlzTnVsbEJhc2UpIGRlZmluZVByb3BlcnR5KHNlbGYubnVsbFBvbHlmaWxsLCBcIl9fcHJvdG9fX1wiLCBudWxsRGVzYyk7XG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgXCJsZXZlbFwiLCB7XG5cdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR3cml0YWJsZTogZmFsc2UsXG5cdFx0dmFsdWU6IHN0YXR1cy5sZXZlbFxuXHR9KTtcbn0oXG5cdChmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIHRtcE9iajEgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cdFx0ICAsIHRtcE9iajIgPSB7fVxuXHRcdCAgLCBzZXRcblx0XHQgICwgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwgXCJfX3Byb3RvX19cIik7XG5cblx0XHRpZiAoZGVzYykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c2V0ID0gZGVzYy5zZXQ7IC8vIE9wZXJhIGNyYXNoZXMgYXQgdGhpcyBwb2ludFxuXHRcdFx0XHRzZXQuY2FsbCh0bXBPYmoxLCB0bXBPYmoyKTtcblx0XHRcdH0gY2F0Y2ggKGlnbm9yZSkge31cblx0XHRcdGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodG1wT2JqMSkgPT09IHRtcE9iajIpIHJldHVybiB7IHNldDogc2V0LCBsZXZlbDogMiB9O1xuXHRcdH1cblxuXHRcdHRtcE9iajEuX19wcm90b19fID0gdG1wT2JqMjtcblx0XHRpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRtcE9iajEpID09PSB0bXBPYmoyKSByZXR1cm4geyBsZXZlbDogMiB9O1xuXG5cdFx0dG1wT2JqMSA9IHt9O1xuXHRcdHRtcE9iajEuX19wcm90b19fID0gdG1wT2JqMjtcblx0XHRpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRtcE9iajEpID09PSB0bXBPYmoyKSByZXR1cm4geyBsZXZlbDogMSB9O1xuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSgpXG4pKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XG5cblxuLyoqKi8gfSksXG4vKiAyMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNWYWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbnZhciBmb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2gsIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbnZhciBwcm9jZXNzID0gZnVuY3Rpb24gKHNyYywgb2JqKSB7XG5cdHZhciBrZXk7XG5cdGZvciAoa2V5IGluIHNyYykgb2JqW2tleV0gPSBzcmNba2V5XTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0czEgLyosIOKApm9wdGlvbnMqLykge1xuXHR2YXIgcmVzdWx0ID0gY3JlYXRlKG51bGwpO1xuXHRmb3JFYWNoLmNhbGwoYXJndW1lbnRzLCBmdW5jdGlvbiAob3B0aW9ucykge1xuXHRcdGlmICghaXNWYWx1ZShvcHRpb25zKSkgcmV0dXJuO1xuXHRcdHByb2Nlc3MoT2JqZWN0KG9wdGlvbnMpLCByZXN1bHQpO1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNJdGVyYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRpZiAoIWlzSXRlcmFibGUodmFsdWUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgXCIgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGZhbHNlRnVuYyA9IF9fd2VicGFja19yZXF1aXJlX18oNSkuZmFsc2VGdW5jO1xuXG4vL2h0dHBzOi8vZ2l0aHViLmNvbS9zbGV2aXRoYW4vWFJlZ0V4cC9ibG9iL21hc3Rlci9zcmMveHJlZ2V4cC5qcyNMNDY5XG52YXIgcmVDaGFycyA9IC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZztcblxuZnVuY3Rpb24gZmFjdG9yeShhZGFwdGVyKXtcblx0Lypcblx0XHRhdHRyaWJ1dGUgc2VsZWN0b3JzXG5cdCovXG5cdHZhciBhdHRyaWJ1dGVSdWxlcyA9IHtcblx0XHRfX3Byb3RvX186IG51bGwsXG5cdFx0ZXF1YWxzOiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lICA9IGRhdGEubmFtZSxcblx0XHRcdFx0dmFsdWUgPSBkYXRhLnZhbHVlO1xuXG5cdFx0XHRpZihkYXRhLmlnbm9yZUNhc2Upe1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGVxdWFsc0lDKGVsZW0pe1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGVxdWFscyhlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSkgPT09IHZhbHVlICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0aHlwaGVuOiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lICA9IGRhdGEubmFtZSxcblx0XHRcdFx0dmFsdWUgPSBkYXRhLnZhbHVlLFxuXHRcdFx0XHRsZW4gPSB2YWx1ZS5sZW5ndGg7XG5cblx0XHRcdGlmKGRhdGEuaWdub3JlQ2FzZSl7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gaHlwaGVuSUMoZWxlbSl7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiZcblx0XHRcdFx0XHRcdFx0KGF0dHIubGVuZ3RoID09PSBsZW4gfHwgYXR0ci5jaGFyQXQobGVuKSA9PT0gXCItXCIpICYmXG5cdFx0XHRcdFx0XHRcdGF0dHIuc3Vic3RyKDAsIGxlbikudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0bmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGh5cGhlbihlbGVtKXtcblx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmXG5cdFx0XHRcdFx0XHRhdHRyLnN1YnN0cigwLCBsZW4pID09PSB2YWx1ZSAmJlxuXHRcdFx0XHRcdFx0KGF0dHIubGVuZ3RoID09PSBsZW4gfHwgYXR0ci5jaGFyQXQobGVuKSA9PT0gXCItXCIpICYmXG5cdFx0XHRcdFx0XHRuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGVsZW1lbnQ6IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgPSBkYXRhLm5hbWUsXG5cdFx0XHRcdHZhbHVlID0gZGF0YS52YWx1ZTtcblxuXHRcdFx0aWYoL1xccy8udGVzdCh2YWx1ZSkpe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2VGdW5jO1xuXHRcdFx0fVxuXG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmVDaGFycywgXCJcXFxcJCZcIik7XG5cblx0XHRcdHZhciBwYXR0ZXJuID0gXCIoPzpefFxcXFxzKVwiICsgdmFsdWUgKyBcIig/OiR8XFxcXHMpXCIsXG5cdFx0XHRcdGZsYWdzID0gZGF0YS5pZ25vcmVDYXNlID8gXCJpXCIgOiBcIlwiLFxuXHRcdFx0XHRyZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZWxlbWVudChlbGVtKXtcblx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIHJlZ2V4LnRlc3QoYXR0cikgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRleGlzdHM6IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgPSBkYXRhLm5hbWU7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZXhpc3RzKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gYWRhcHRlci5oYXNBdHRyaWIoZWxlbSwgbmFtZSkgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRzdGFydDogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSAgPSBkYXRhLm5hbWUsXG5cdFx0XHRcdHZhbHVlID0gZGF0YS52YWx1ZSxcblx0XHRcdFx0bGVuID0gdmFsdWUubGVuZ3RoO1xuXG5cdFx0XHRpZihsZW4gPT09IDApe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2VGdW5jO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihkYXRhLmlnbm9yZUNhc2Upe1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIHN0YXJ0SUMoZWxlbSl7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiYgYXR0ci5zdWJzdHIoMCwgbGVuKS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gc3RhcnQoZWxlbSl7XG5cdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiBhdHRyLnN1YnN0cigwLCBsZW4pID09PSB2YWx1ZSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSAgPSBkYXRhLm5hbWUsXG5cdFx0XHRcdHZhbHVlID0gZGF0YS52YWx1ZSxcblx0XHRcdFx0bGVuICAgPSAtdmFsdWUubGVuZ3RoO1xuXG5cdFx0XHRpZihsZW4gPT09IDApe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2VGdW5jO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihkYXRhLmlnbm9yZUNhc2Upe1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGVuZElDKGVsZW0pe1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIGF0dHIuc3Vic3RyKGxlbikudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGVuZChlbGVtKXtcblx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIGF0dHIuc3Vic3RyKGxlbikgPT09IHZhbHVlICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YW55OiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lICA9IGRhdGEubmFtZSxcblx0XHRcdFx0dmFsdWUgPSBkYXRhLnZhbHVlO1xuXG5cdFx0XHRpZih2YWx1ZSA9PT0gXCJcIil7XG5cdFx0XHRcdHJldHVybiBmYWxzZUZ1bmM7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGRhdGEuaWdub3JlQ2FzZSl7XG5cdFx0XHRcdHZhciByZWdleCA9IG5ldyBSZWdFeHAodmFsdWUucmVwbGFjZShyZUNoYXJzLCBcIlxcXFwkJlwiKSwgXCJpXCIpO1xuXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiBhbnlJQyhlbGVtKXtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiByZWdleC50ZXN0KGF0dHIpICYmIG5leHQoZWxlbSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBhbnkoZWxlbSl7XG5cdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiBhdHRyLmluZGV4T2YodmFsdWUpID49IDAgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRub3Q6IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgID0gZGF0YS5uYW1lLFxuXHRcdFx0XHR2YWx1ZSA9IGRhdGEudmFsdWU7XG5cblx0XHRcdGlmKHZhbHVlID09PSBcIlwiKXtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIG5vdEVtcHR5KGVsZW0pe1xuXHRcdFx0XHRcdHJldHVybiAhIWFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSkgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZihkYXRhLmlnbm9yZUNhc2Upe1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIG5vdElDKGVsZW0pe1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIGF0dHIudG9Mb3dlckNhc2UoKSAhPT0gdmFsdWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIG5vdChlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSkgIT09IHZhbHVlICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGNvbXBpbGU6IGZ1bmN0aW9uKG5leHQsIGRhdGEsIG9wdGlvbnMpe1xuXHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLnN0cmljdCAmJiAoXG5cdFx0XHRcdGRhdGEuaWdub3JlQ2FzZSB8fCBkYXRhLmFjdGlvbiA9PT0gXCJub3RcIlxuXHRcdFx0KSkgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYXR0cmlidXRlIHNlbGVjdG9yXCIpO1xuXHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVJ1bGVzW2RhdGEuYWN0aW9uXShuZXh0LCBkYXRhKTtcblx0XHR9LFxuXHRcdHJ1bGVzOiBhdHRyaWJ1dGVSdWxlc1xuXHR9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3Rvcnk7XG5cblxuLyoqKi8gfSksXG4vKiAyNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IENTU3NlbGVjdDtcblxudmFyIERvbVV0aWxzICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSksXG5cdGZhbHNlRnVuYyAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KS5mYWxzZUZ1bmMsXG5cdGNvbXBpbGVGYWN0b3J5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCksXG5cdGRlZmF1bHRDb21waWxlID0gY29tcGlsZUZhY3RvcnkoRG9tVXRpbHMpO1xuXG5mdW5jdGlvbiBhZGFwdGVyQ29tcGlsZShhZGFwdGVyKXtcblx0cmV0dXJuIGFkYXB0ZXIgPT09IERvbVV0aWxzID8gZGVmYXVsdENvbXBpbGUgOiBjb21waWxlRmFjdG9yeShhZGFwdGVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0b3JGdW5jKHNlYXJjaEZ1bmMpe1xuXHRyZXR1cm4gZnVuY3Rpb24gc2VsZWN0KHF1ZXJ5LCBlbGVtcywgb3B0aW9ucyl7XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblx0XHRvcHRpb25zLmFkYXB0ZXIgPSBvcHRpb25zLmFkYXB0ZXIgfHwgRG9tVXRpbHM7XG5cdFx0dmFyIGNvbXBpbGUgPSBhZGFwdGVyQ29tcGlsZShvcHRpb25zLmFkYXB0ZXIpO1xuXG5cdFx0aWYodHlwZW9mIHF1ZXJ5ICE9PSBcImZ1bmN0aW9uXCIpIHF1ZXJ5ID0gY29tcGlsZS5jb21waWxlVW5zYWZlKHF1ZXJ5LCBvcHRpb25zLCBlbGVtcyk7XG5cdFx0aWYocXVlcnkuc2hvdWxkVGVzdE5leHRTaWJsaW5ncykgZWxlbXMgPSBhcHBlbmROZXh0U2libGluZ3MoKG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0KSB8fCBlbGVtcywgb3B0aW9ucy5hZGFwdGVyKTtcblx0XHRpZighQXJyYXkuaXNBcnJheShlbGVtcykpIGVsZW1zID0gb3B0aW9ucy5hZGFwdGVyLmdldENoaWxkcmVuKGVsZW1zKTtcblx0XHRlbHNlIGVsZW1zID0gb3B0aW9ucy5hZGFwdGVyLnJlbW92ZVN1YnNldHMoZWxlbXMpO1xuXHRcdHJldHVybiBzZWFyY2hGdW5jKHF1ZXJ5LCBlbGVtcywgb3B0aW9ucyk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldE5leHRTaWJsaW5ncyhlbGVtLCBhZGFwdGVyKXtcblx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblx0aWYoIUFycmF5LmlzQXJyYXkoc2libGluZ3MpKSByZXR1cm4gW107XG5cdHNpYmxpbmdzID0gc2libGluZ3Muc2xpY2UoMCk7XG5cdHdoaWxlKHNpYmxpbmdzLnNoaWZ0KCkgIT09IGVsZW0pO1xuXHRyZXR1cm4gc2libGluZ3M7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZE5leHRTaWJsaW5ncyhlbGVtcywgYWRhcHRlcil7XG5cdC8vIE9yZGVyIG1hdHRlcnMgYmVjYXVzZSBqUXVlcnkgc2VlbXMgdG8gY2hlY2sgdGhlIGNoaWxkcmVuIGJlZm9yZSB0aGUgc2libGluZ3Ncblx0aWYoIUFycmF5LmlzQXJyYXkoZWxlbXMpKSBlbGVtcyA9IFtlbGVtc107XG5cdHZhciBuZXdFbGVtcyA9IGVsZW1zLnNsaWNlKDApO1xuXG5cdGZvcih2YXIgaSA9IDAsIGxlbiA9IGVsZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXtcblx0XHR2YXIgbmV4dFNpYmxpbmdzID0gZ2V0TmV4dFNpYmxpbmdzKG5ld0VsZW1zW2ldLCBhZGFwdGVyKTtcblx0XHRuZXdFbGVtcy5wdXNoLmFwcGx5KG5ld0VsZW1zLCBuZXh0U2libGluZ3MpO1xuXHR9XG5cdHJldHVybiBuZXdFbGVtcztcbn1cblxudmFyIHNlbGVjdEFsbCA9IGdldFNlbGVjdG9yRnVuYyhmdW5jdGlvbiBzZWxlY3RBbGwocXVlcnksIGVsZW1zLCBvcHRpb25zKXtcblx0cmV0dXJuIChxdWVyeSA9PT0gZmFsc2VGdW5jIHx8ICFlbGVtcyB8fCBlbGVtcy5sZW5ndGggPT09IDApID8gW10gOiBvcHRpb25zLmFkYXB0ZXIuZmluZEFsbChxdWVyeSwgZWxlbXMpO1xufSk7XG5cbnZhciBzZWxlY3RPbmUgPSBnZXRTZWxlY3RvckZ1bmMoZnVuY3Rpb24gc2VsZWN0T25lKHF1ZXJ5LCBlbGVtcywgb3B0aW9ucyl7XG5cdHJldHVybiAocXVlcnkgPT09IGZhbHNlRnVuYyB8fCAhZWxlbXMgfHwgZWxlbXMubGVuZ3RoID09PSAwKSA/IG51bGwgOiBvcHRpb25zLmFkYXB0ZXIuZmluZE9uZShxdWVyeSwgZWxlbXMpO1xufSk7XG5cbmZ1bmN0aW9uIGlzKGVsZW0sIHF1ZXJ5LCBvcHRpb25zKXtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblx0b3B0aW9ucy5hZGFwdGVyID0gb3B0aW9ucy5hZGFwdGVyIHx8IERvbVV0aWxzO1xuXHR2YXIgY29tcGlsZSA9IGFkYXB0ZXJDb21waWxlKG9wdGlvbnMuYWRhcHRlcik7XG5cdHJldHVybiAodHlwZW9mIHF1ZXJ5ID09PSBcImZ1bmN0aW9uXCIgPyBxdWVyeSA6IGNvbXBpbGUocXVlcnksIG9wdGlvbnMpKShlbGVtKTtcbn1cblxuLypcblx0dGhlIGV4cG9ydGVkIGludGVyZmFjZVxuKi9cbmZ1bmN0aW9uIENTU3NlbGVjdChxdWVyeSwgZWxlbXMsIG9wdGlvbnMpe1xuXHRyZXR1cm4gc2VsZWN0QWxsKHF1ZXJ5LCBlbGVtcywgb3B0aW9ucyk7XG59XG5cbkNTU3NlbGVjdC5jb21waWxlID0gZGVmYXVsdENvbXBpbGU7XG5DU1NzZWxlY3QuZmlsdGVycyA9IGRlZmF1bHRDb21waWxlLlBzZXVkb3MuZmlsdGVycztcbkNTU3NlbGVjdC5wc2V1ZG9zID0gZGVmYXVsdENvbXBpbGUuUHNldWRvcy5wc2V1ZG9zO1xuXG5DU1NzZWxlY3Quc2VsZWN0QWxsID0gc2VsZWN0QWxsO1xuQ1NTc2VsZWN0LnNlbGVjdE9uZSA9IHNlbGVjdE9uZTtcblxuQ1NTc2VsZWN0LmlzID0gaXM7XG5cbi8vbGVnYWN5IG1ldGhvZHMgKG1pZ2h0IGJlIHJlbW92ZWQpXG5DU1NzZWxlY3QucGFyc2UgPSBkZWZhdWx0Q29tcGlsZTtcbkNTU3NlbGVjdC5pdGVyYXRlID0gc2VsZWN0QWxsO1xuXG4vL2hvb2tzXG5DU1NzZWxlY3QuX2NvbXBpbGVVbnNhZmUgPSBkZWZhdWx0Q29tcGlsZS5jb21waWxlVW5zYWZlO1xuQ1NTc2VsZWN0Ll9jb21waWxlVG9rZW4gPSBkZWZhdWx0Q29tcGlsZS5jb21waWxlVG9rZW47XG5cblxuLyoqKi8gfSksXG4vKiAyNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgRG9tVXRpbHMgPSBtb2R1bGUuZXhwb3J0cztcblxuW1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KSxcblx0X193ZWJwYWNrX3JlcXVpcmVfXygzNSksXG5cdF9fd2VicGFja19yZXF1aXJlX18oMzYpLFxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KSxcblx0X193ZWJwYWNrX3JlcXVpcmVfXygzOCksXG5cdF9fd2VicGFja19yZXF1aXJlX18oMzkpXG5dLmZvckVhY2goZnVuY3Rpb24oZXh0KXtcblx0T2JqZWN0LmtleXMoZXh0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7XG5cdFx0RG9tVXRpbHNba2V5XSA9IGV4dFtrZXldLmJpbmQoRG9tVXRpbHMpO1xuXHR9KTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIEVsZW1lbnRUeXBlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KSxcbiAgICBnZXRPdXRlckhUTUwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KSxcbiAgICBpc1RhZyA9IEVsZW1lbnRUeXBlLmlzVGFnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0Z2V0SW5uZXJIVE1MOiBnZXRJbm5lckhUTUwsXG5cdGdldE91dGVySFRNTDogZ2V0T3V0ZXJIVE1MLFxuXHRnZXRUZXh0OiBnZXRUZXh0XG59O1xuXG5mdW5jdGlvbiBnZXRJbm5lckhUTUwoZWxlbSwgb3B0cyl7XG5cdHJldHVybiBlbGVtLmNoaWxkcmVuID8gZWxlbS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oZWxlbSl7XG5cdFx0cmV0dXJuIGdldE91dGVySFRNTChlbGVtLCBvcHRzKTtcblx0fSkuam9pbihcIlwiKSA6IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldFRleHQoZWxlbSl7XG5cdGlmKEFycmF5LmlzQXJyYXkoZWxlbSkpIHJldHVybiBlbGVtLm1hcChnZXRUZXh0KS5qb2luKFwiXCIpO1xuXHRpZihpc1RhZyhlbGVtKSB8fCBlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLkNEQVRBKSByZXR1cm4gZ2V0VGV4dChlbGVtLmNoaWxkcmVuKTtcblx0aWYoZWxlbS50eXBlID09PSBFbGVtZW50VHlwZS5UZXh0KSByZXR1cm4gZWxlbS5kYXRhO1xuXHRyZXR1cm4gXCJcIjtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDI3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qXG4gIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiovXG52YXIgRWxlbWVudFR5cGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTtcbnZhciBlbnRpdGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuXG4vKlxuICBCb29sZWFuIEF0dHJpYnV0ZXNcbiovXG52YXIgYm9vbGVhbkF0dHJpYnV0ZXMgPSB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgYWxsb3dmdWxsc2NyZWVuOiB0cnVlLFxuICBhc3luYzogdHJ1ZSxcbiAgYXV0b2ZvY3VzOiB0cnVlLFxuICBhdXRvcGxheTogdHJ1ZSxcbiAgY2hlY2tlZDogdHJ1ZSxcbiAgY29udHJvbHM6IHRydWUsXG4gIGRlZmF1bHQ6IHRydWUsXG4gIGRlZmVyOiB0cnVlLFxuICBkaXNhYmxlZDogdHJ1ZSxcbiAgaGlkZGVuOiB0cnVlLFxuICBpc21hcDogdHJ1ZSxcbiAgbG9vcDogdHJ1ZSxcbiAgbXVsdGlwbGU6IHRydWUsXG4gIG11dGVkOiB0cnVlLFxuICBvcGVuOiB0cnVlLFxuICByZWFkb25seTogdHJ1ZSxcbiAgcmVxdWlyZWQ6IHRydWUsXG4gIHJldmVyc2VkOiB0cnVlLFxuICBzY29wZWQ6IHRydWUsXG4gIHNlYW1sZXNzOiB0cnVlLFxuICBzZWxlY3RlZDogdHJ1ZSxcbiAgdHlwZW11c3RtYXRjaDogdHJ1ZVxufTtcblxudmFyIHVuZW5jb2RlZEVsZW1lbnRzID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIHN0eWxlOiB0cnVlLFxuICBzY3JpcHQ6IHRydWUsXG4gIHhtcDogdHJ1ZSxcbiAgaWZyYW1lOiB0cnVlLFxuICBub2VtYmVkOiB0cnVlLFxuICBub2ZyYW1lczogdHJ1ZSxcbiAgcGxhaW50ZXh0OiB0cnVlLFxuICBub3NjcmlwdDogdHJ1ZVxufTtcblxuLypcbiAgRm9ybWF0IGF0dHJpYnV0ZXNcbiovXG5mdW5jdGlvbiBmb3JtYXRBdHRycyhhdHRyaWJ1dGVzLCBvcHRzKSB7XG4gIGlmICghYXR0cmlidXRlcykgcmV0dXJuO1xuXG4gIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgIHZhbHVlO1xuXG4gIC8vIExvb3AgdGhyb3VnaCB0aGUgYXR0cmlidXRlc1xuICBmb3IgKHZhciBrZXkgaW4gYXR0cmlidXRlcykge1xuICAgIHZhbHVlID0gYXR0cmlidXRlc1trZXldO1xuICAgIGlmIChvdXRwdXQpIHtcbiAgICAgIG91dHB1dCArPSAnICc7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSAmJiBib29sZWFuQXR0cmlidXRlc1trZXldKSB7XG4gICAgICBvdXRwdXQgKz0ga2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQgKz0ga2V5ICsgJz1cIicgKyAob3B0cy5kZWNvZGVFbnRpdGllcyA/IGVudGl0aWVzLmVuY29kZVhNTCh2YWx1ZSkgOiB2YWx1ZSkgKyAnXCInO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qXG4gIFNlbGYtZW5jbG9zaW5nIHRhZ3MgKHN0b2xlbiBmcm9tIG5vZGUtaHRtbHBhcnNlcilcbiovXG52YXIgc2luZ2xlVGFnID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIGFyZWE6IHRydWUsXG4gIGJhc2U6IHRydWUsXG4gIGJhc2Vmb250OiB0cnVlLFxuICBicjogdHJ1ZSxcbiAgY29sOiB0cnVlLFxuICBjb21tYW5kOiB0cnVlLFxuICBlbWJlZDogdHJ1ZSxcbiAgZnJhbWU6IHRydWUsXG4gIGhyOiB0cnVlLFxuICBpbWc6IHRydWUsXG4gIGlucHV0OiB0cnVlLFxuICBpc2luZGV4OiB0cnVlLFxuICBrZXlnZW46IHRydWUsXG4gIGxpbms6IHRydWUsXG4gIG1ldGE6IHRydWUsXG4gIHBhcmFtOiB0cnVlLFxuICBzb3VyY2U6IHRydWUsXG4gIHRyYWNrOiB0cnVlLFxuICB3YnI6IHRydWUsXG59O1xuXG5cbnZhciByZW5kZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRvbSwgb3B0cykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZG9tKSAmJiAhZG9tLmNoZWVyaW8pIGRvbSA9IFtkb21dO1xuICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICB2YXIgb3V0cHV0ID0gJyc7XG5cbiAgZm9yKHZhciBpID0gMDsgaSA8IGRvbS5sZW5ndGg7IGkrKyl7XG4gICAgdmFyIGVsZW0gPSBkb21baV07XG5cbiAgICBpZiAoZWxlbS50eXBlID09PSAncm9vdCcpXG4gICAgICBvdXRwdXQgKz0gcmVuZGVyKGVsZW0uY2hpbGRyZW4sIG9wdHMpO1xuICAgIGVsc2UgaWYgKEVsZW1lbnRUeXBlLmlzVGFnKGVsZW0pKVxuICAgICAgb3V0cHV0ICs9IHJlbmRlclRhZyhlbGVtLCBvcHRzKTtcbiAgICBlbHNlIGlmIChlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLkRpcmVjdGl2ZSlcbiAgICAgIG91dHB1dCArPSByZW5kZXJEaXJlY3RpdmUoZWxlbSk7XG4gICAgZWxzZSBpZiAoZWxlbS50eXBlID09PSBFbGVtZW50VHlwZS5Db21tZW50KVxuICAgICAgb3V0cHV0ICs9IHJlbmRlckNvbW1lbnQoZWxlbSk7XG4gICAgZWxzZSBpZiAoZWxlbS50eXBlID09PSBFbGVtZW50VHlwZS5DREFUQSlcbiAgICAgIG91dHB1dCArPSByZW5kZXJDZGF0YShlbGVtKTtcbiAgICBlbHNlXG4gICAgICBvdXRwdXQgKz0gcmVuZGVyVGV4dChlbGVtLCBvcHRzKTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5mdW5jdGlvbiByZW5kZXJUYWcoZWxlbSwgb3B0cykge1xuICAvLyBIYW5kbGUgU1ZHXG4gIGlmIChlbGVtLm5hbWUgPT09IFwic3ZnXCIpIG9wdHMgPSB7ZGVjb2RlRW50aXRpZXM6IG9wdHMuZGVjb2RlRW50aXRpZXMsIHhtbE1vZGU6IHRydWV9O1xuXG4gIHZhciB0YWcgPSAnPCcgKyBlbGVtLm5hbWUsXG4gICAgICBhdHRyaWJzID0gZm9ybWF0QXR0cnMoZWxlbS5hdHRyaWJzLCBvcHRzKTtcblxuICBpZiAoYXR0cmlicykge1xuICAgIHRhZyArPSAnICcgKyBhdHRyaWJzO1xuICB9XG5cbiAgaWYgKFxuICAgIG9wdHMueG1sTW9kZVxuICAgICYmICghZWxlbS5jaGlsZHJlbiB8fCBlbGVtLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgKSB7XG4gICAgdGFnICs9ICcvPic7XG4gIH0gZWxzZSB7XG4gICAgdGFnICs9ICc+JztcbiAgICBpZiAoZWxlbS5jaGlsZHJlbikge1xuICAgICAgdGFnICs9IHJlbmRlcihlbGVtLmNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG5cbiAgICBpZiAoIXNpbmdsZVRhZ1tlbGVtLm5hbWVdIHx8IG9wdHMueG1sTW9kZSkge1xuICAgICAgdGFnICs9ICc8LycgKyBlbGVtLm5hbWUgKyAnPic7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhZztcbn1cblxuZnVuY3Rpb24gcmVuZGVyRGlyZWN0aXZlKGVsZW0pIHtcbiAgcmV0dXJuICc8JyArIGVsZW0uZGF0YSArICc+Jztcbn1cblxuZnVuY3Rpb24gcmVuZGVyVGV4dChlbGVtLCBvcHRzKSB7XG4gIHZhciBkYXRhID0gZWxlbS5kYXRhIHx8ICcnO1xuXG4gIC8vIGlmIGVudGl0aWVzIHdlcmVuJ3QgZGVjb2RlZCwgbm8gbmVlZCB0byBlbmNvZGUgdGhlbSBiYWNrXG4gIGlmIChvcHRzLmRlY29kZUVudGl0aWVzICYmICEoZWxlbS5wYXJlbnQgJiYgZWxlbS5wYXJlbnQubmFtZSBpbiB1bmVuY29kZWRFbGVtZW50cykpIHtcbiAgICBkYXRhID0gZW50aXRpZXMuZW5jb2RlWE1MKGRhdGEpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNkYXRhKGVsZW0pIHtcbiAgcmV0dXJuICc8IVtDREFUQVsnICsgZWxlbS5jaGlsZHJlblswXS5kYXRhICsgJ11dPic7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvbW1lbnQoZWxlbSkge1xuICByZXR1cm4gJzwhLS0nICsgZWxlbS5kYXRhICsgJy0tPic7XG59XG5cblxuLyoqKi8gfSksXG4vKiAyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vL1R5cGVzIG9mIGVsZW1lbnRzIGZvdW5kIGluIHRoZSBET01cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRUZXh0OiBcInRleHRcIiwgLy9UZXh0XG5cdERpcmVjdGl2ZTogXCJkaXJlY3RpdmVcIiwgLy88PyAuLi4gPz5cblx0Q29tbWVudDogXCJjb21tZW50XCIsIC8vPCEtLSAuLi4gLS0+XG5cdFNjcmlwdDogXCJzY3JpcHRcIiwgLy88c2NyaXB0PiB0YWdzXG5cdFN0eWxlOiBcInN0eWxlXCIsIC8vPHN0eWxlPiB0YWdzXG5cdFRhZzogXCJ0YWdcIiwgLy9BbnkgdGFnXG5cdENEQVRBOiBcImNkYXRhXCIsIC8vPCFbQ0RBVEFbIC4uLiBdXT5cblxuXHRpc1RhZzogZnVuY3Rpb24oZWxlbSl7XG5cdFx0cmV0dXJuIGVsZW0udHlwZSA9PT0gXCJ0YWdcIiB8fCBlbGVtLnR5cGUgPT09IFwic2NyaXB0XCIgfHwgZWxlbS50eXBlID09PSBcInN0eWxlXCI7XG5cdH1cbn07XG5cbi8qKiovIH0pLFxuLyogMjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGVuY29kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzApLFxuICAgIGRlY29kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xuXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uKGRhdGEsIGxldmVsKXtcblx0cmV0dXJuICghbGV2ZWwgfHwgbGV2ZWwgPD0gMCA/IGRlY29kZS5YTUwgOiBkZWNvZGUuSFRNTCkoZGF0YSk7XG59O1xuXG5leHBvcnRzLmRlY29kZVN0cmljdCA9IGZ1bmN0aW9uKGRhdGEsIGxldmVsKXtcblx0cmV0dXJuICghbGV2ZWwgfHwgbGV2ZWwgPD0gMCA/IGRlY29kZS5YTUwgOiBkZWNvZGUuSFRNTFN0cmljdCkoZGF0YSk7XG59O1xuXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uKGRhdGEsIGxldmVsKXtcblx0cmV0dXJuICghbGV2ZWwgfHwgbGV2ZWwgPD0gMCA/IGVuY29kZS5YTUwgOiBlbmNvZGUuSFRNTCkoZGF0YSk7XG59O1xuXG5leHBvcnRzLmVuY29kZVhNTCA9IGVuY29kZS5YTUw7XG5cbmV4cG9ydHMuZW5jb2RlSFRNTDQgPVxuZXhwb3J0cy5lbmNvZGVIVE1MNSA9XG5leHBvcnRzLmVuY29kZUhUTUwgID0gZW5jb2RlLkhUTUw7XG5cbmV4cG9ydHMuZGVjb2RlWE1MID1cbmV4cG9ydHMuZGVjb2RlWE1MU3RyaWN0ID0gZGVjb2RlLlhNTDtcblxuZXhwb3J0cy5kZWNvZGVIVE1MNCA9XG5leHBvcnRzLmRlY29kZUhUTUw1ID1cbmV4cG9ydHMuZGVjb2RlSFRNTCA9IGRlY29kZS5IVE1MO1xuXG5leHBvcnRzLmRlY29kZUhUTUw0U3RyaWN0ID1cbmV4cG9ydHMuZGVjb2RlSFRNTDVTdHJpY3QgPVxuZXhwb3J0cy5kZWNvZGVIVE1MU3RyaWN0ID0gZGVjb2RlLkhUTUxTdHJpY3Q7XG5cbmV4cG9ydHMuZXNjYXBlID0gZW5jb2RlLmVzY2FwZTtcblxuXG4vKioqLyB9KSxcbi8qIDMwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpbnZlcnNlWE1MID0gZ2V0SW52ZXJzZU9iaihfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKSksXG4gICAgeG1sUmVwbGFjZXIgPSBnZXRJbnZlcnNlUmVwbGFjZXIoaW52ZXJzZVhNTCk7XG5cbmV4cG9ydHMuWE1MID0gZ2V0SW52ZXJzZShpbnZlcnNlWE1MLCB4bWxSZXBsYWNlcik7XG5cbnZhciBpbnZlcnNlSFRNTCA9IGdldEludmVyc2VPYmooX193ZWJwYWNrX3JlcXVpcmVfXygxNCkpLFxuICAgIGh0bWxSZXBsYWNlciA9IGdldEludmVyc2VSZXBsYWNlcihpbnZlcnNlSFRNTCk7XG5cbmV4cG9ydHMuSFRNTCA9IGdldEludmVyc2UoaW52ZXJzZUhUTUwsIGh0bWxSZXBsYWNlcik7XG5cbmZ1bmN0aW9uIGdldEludmVyc2VPYmoob2JqKXtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG9iaikuc29ydCgpLnJlZHVjZShmdW5jdGlvbihpbnZlcnNlLCBuYW1lKXtcblx0XHRpbnZlcnNlW29ialtuYW1lXV0gPSBcIiZcIiArIG5hbWUgKyBcIjtcIjtcblx0XHRyZXR1cm4gaW52ZXJzZTtcblx0fSwge30pO1xufVxuXG5mdW5jdGlvbiBnZXRJbnZlcnNlUmVwbGFjZXIoaW52ZXJzZSl7XG5cdHZhciBzaW5nbGUgPSBbXSxcblx0ICAgIG11bHRpcGxlID0gW107XG5cblx0T2JqZWN0LmtleXMoaW52ZXJzZSkuZm9yRWFjaChmdW5jdGlvbihrKXtcblx0XHRpZihrLmxlbmd0aCA9PT0gMSl7XG5cdFx0XHRzaW5nbGUucHVzaChcIlxcXFxcIiArIGspO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtdWx0aXBsZS5wdXNoKGspO1xuXHRcdH1cblx0fSk7XG5cblx0Ly9UT0RPIGFkZCByYW5nZXNcblx0bXVsdGlwbGUudW5zaGlmdChcIltcIiArIHNpbmdsZS5qb2luKFwiXCIpICsgXCJdXCIpO1xuXG5cdHJldHVybiBuZXcgUmVnRXhwKG11bHRpcGxlLmpvaW4oXCJ8XCIpLCBcImdcIik7XG59XG5cbnZhciByZV9ub25BU0NJSSA9IC9bXlxcMC1cXHg3Rl0vZyxcbiAgICByZV9hc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcblxuZnVuY3Rpb24gc2luZ2xlQ2hhclJlcGxhY2VyKGMpe1xuXHRyZXR1cm4gXCImI3hcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiO1wiO1xufVxuXG5mdW5jdGlvbiBhc3RyYWxSZXBsYWNlcihjKXtcblx0Ly8gaHR0cDovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcblx0dmFyIGhpZ2ggPSBjLmNoYXJDb2RlQXQoMCk7XG5cdHZhciBsb3cgID0gYy5jaGFyQ29kZUF0KDEpO1xuXHR2YXIgY29kZVBvaW50ID0gKGhpZ2ggLSAweEQ4MDApICogMHg0MDAgKyBsb3cgLSAweERDMDAgKyAweDEwMDAwO1xuXHRyZXR1cm4gXCImI3hcIiArIGNvZGVQb2ludC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiO1wiO1xufVxuXG5mdW5jdGlvbiBnZXRJbnZlcnNlKGludmVyc2UsIHJlKXtcblx0ZnVuY3Rpb24gZnVuYyhuYW1lKXtcblx0XHRyZXR1cm4gaW52ZXJzZVtuYW1lXTtcblx0fVxuXG5cdHJldHVybiBmdW5jdGlvbihkYXRhKXtcblx0XHRyZXR1cm4gZGF0YVxuXHRcdFx0XHQucmVwbGFjZShyZSwgZnVuYylcblx0XHRcdFx0LnJlcGxhY2UocmVfYXN0cmFsU3ltYm9scywgYXN0cmFsUmVwbGFjZXIpXG5cdFx0XHRcdC5yZXBsYWNlKHJlX25vbkFTQ0lJLCBzaW5nbGVDaGFyUmVwbGFjZXIpO1xuXHR9O1xufVxuXG52YXIgcmVfeG1sQ2hhcnMgPSBnZXRJbnZlcnNlUmVwbGFjZXIoaW52ZXJzZVhNTCk7XG5cbmZ1bmN0aW9uIGVzY2FwZVhNTChkYXRhKXtcblx0cmV0dXJuIGRhdGFcblx0XHRcdC5yZXBsYWNlKHJlX3htbENoYXJzLCBzaW5nbGVDaGFyUmVwbGFjZXIpXG5cdFx0XHQucmVwbGFjZShyZV9hc3RyYWxTeW1ib2xzLCBhc3RyYWxSZXBsYWNlcilcblx0XHRcdC5yZXBsYWNlKHJlX25vbkFTQ0lJLCBzaW5nbGVDaGFyUmVwbGFjZXIpO1xufVxuXG5leHBvcnRzLmVzY2FwZSA9IGVzY2FwZVhNTDtcblxuXG4vKioqLyB9KSxcbi8qIDMxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBlbnRpdHlNYXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSxcbiAgICBsZWdhY3lNYXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKSxcbiAgICB4bWxNYXAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKSxcbiAgICBkZWNvZGVDb2RlUG9pbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcblxudmFyIGRlY29kZVhNTFN0cmljdCAgPSBnZXRTdHJpY3REZWNvZGVyKHhtbE1hcCksXG4gICAgZGVjb2RlSFRNTFN0cmljdCA9IGdldFN0cmljdERlY29kZXIoZW50aXR5TWFwKTtcblxuZnVuY3Rpb24gZ2V0U3RyaWN0RGVjb2RlcihtYXApe1xuXHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG1hcCkuam9pbihcInxcIiksXG5cdCAgICByZXBsYWNlID0gZ2V0UmVwbGFjZXIobWFwKTtcblxuXHRrZXlzICs9IFwifCNbeFhdW1xcXFxkYS1mQS1GXSt8I1xcXFxkK1wiO1xuXG5cdHZhciByZSA9IG5ldyBSZWdFeHAoXCImKD86XCIgKyBrZXlzICsgXCIpO1wiLCBcImdcIik7XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHN0cil7XG5cdFx0cmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UocmUsIHJlcGxhY2UpO1xuXHR9O1xufVxuXG52YXIgZGVjb2RlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgbGVnYWN5ID0gT2JqZWN0LmtleXMobGVnYWN5TWFwKVxuXHRcdC5zb3J0KHNvcnRlcik7XG5cblx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHlNYXApXG5cdFx0LnNvcnQoc29ydGVyKTtcblxuXHRmb3IodmFyIGkgPSAwLCBqID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdGlmKGxlZ2FjeVtqXSA9PT0ga2V5c1tpXSl7XG5cdFx0XHRrZXlzW2ldICs9IFwiOz9cIjtcblx0XHRcdGorKztcblx0XHR9IGVsc2Uge1xuXHRcdFx0a2V5c1tpXSArPSBcIjtcIjtcblx0XHR9XG5cdH1cblxuXHR2YXIgcmUgPSBuZXcgUmVnRXhwKFwiJig/OlwiICsga2V5cy5qb2luKFwifFwiKSArIFwifCNbeFhdW1xcXFxkYS1mQS1GXSs7P3wjXFxcXGQrOz8pXCIsIFwiZ1wiKSxcblx0ICAgIHJlcGxhY2UgPSBnZXRSZXBsYWNlcihlbnRpdHlNYXApO1xuXG5cdGZ1bmN0aW9uIHJlcGxhY2VyKHN0cil7XG5cdFx0aWYoc3RyLnN1YnN0cigtMSkgIT09IFwiO1wiKSBzdHIgKz0gXCI7XCI7XG5cdFx0cmV0dXJuIHJlcGxhY2Uoc3RyKTtcblx0fVxuXG5cdC8vVE9ETyBjb25zaWRlciBjcmVhdGluZyBhIG1lcmdlZCBtYXBcblx0cmV0dXJuIGZ1bmN0aW9uKHN0cil7XG5cdFx0cmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UocmUsIHJlcGxhY2VyKTtcblx0fTtcbn0oKSk7XG5cbmZ1bmN0aW9uIHNvcnRlcihhLCBiKXtcblx0cmV0dXJuIGEgPCBiID8gMSA6IC0xO1xufVxuXG5mdW5jdGlvbiBnZXRSZXBsYWNlcihtYXApe1xuXHRyZXR1cm4gZnVuY3Rpb24gcmVwbGFjZShzdHIpe1xuXHRcdGlmKHN0ci5jaGFyQXQoMSkgPT09IFwiI1wiKXtcblx0XHRcdGlmKHN0ci5jaGFyQXQoMikgPT09IFwiWFwiIHx8IHN0ci5jaGFyQXQoMikgPT09IFwieFwiKXtcblx0XHRcdFx0cmV0dXJuIGRlY29kZUNvZGVQb2ludChwYXJzZUludChzdHIuc3Vic3RyKDMpLCAxNikpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRlY29kZUNvZGVQb2ludChwYXJzZUludChzdHIuc3Vic3RyKDIpLCAxMCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gbWFwW3N0ci5zbGljZSgxLCAtMSldO1xuXHR9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0WE1MOiBkZWNvZGVYTUxTdHJpY3QsXG5cdEhUTUw6IGRlY29kZUhUTUwsXG5cdEhUTUxTdHJpY3Q6IGRlY29kZUhUTUxTdHJpY3Rcbn07XG5cbi8qKiovIH0pLFxuLyogMzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7XCJBYWN1dGVcIjpcIsOBXCIsXCJhYWN1dGVcIjpcIsOhXCIsXCJBY2lyY1wiOlwiw4JcIixcImFjaXJjXCI6XCLDolwiLFwiYWN1dGVcIjpcIsK0XCIsXCJBRWxpZ1wiOlwiw4ZcIixcImFlbGlnXCI6XCLDplwiLFwiQWdyYXZlXCI6XCLDgFwiLFwiYWdyYXZlXCI6XCLDoFwiLFwiYW1wXCI6XCImXCIsXCJBTVBcIjpcIiZcIixcIkFyaW5nXCI6XCLDhVwiLFwiYXJpbmdcIjpcIsOlXCIsXCJBdGlsZGVcIjpcIsODXCIsXCJhdGlsZGVcIjpcIsOjXCIsXCJBdW1sXCI6XCLDhFwiLFwiYXVtbFwiOlwiw6RcIixcImJydmJhclwiOlwiwqZcIixcIkNjZWRpbFwiOlwiw4dcIixcImNjZWRpbFwiOlwiw6dcIixcImNlZGlsXCI6XCLCuFwiLFwiY2VudFwiOlwiwqJcIixcImNvcHlcIjpcIsKpXCIsXCJDT1BZXCI6XCLCqVwiLFwiY3VycmVuXCI6XCLCpFwiLFwiZGVnXCI6XCLCsFwiLFwiZGl2aWRlXCI6XCLDt1wiLFwiRWFjdXRlXCI6XCLDiVwiLFwiZWFjdXRlXCI6XCLDqVwiLFwiRWNpcmNcIjpcIsOKXCIsXCJlY2lyY1wiOlwiw6pcIixcIkVncmF2ZVwiOlwiw4hcIixcImVncmF2ZVwiOlwiw6hcIixcIkVUSFwiOlwiw5BcIixcImV0aFwiOlwiw7BcIixcIkV1bWxcIjpcIsOLXCIsXCJldW1sXCI6XCLDq1wiLFwiZnJhYzEyXCI6XCLCvVwiLFwiZnJhYzE0XCI6XCLCvFwiLFwiZnJhYzM0XCI6XCLCvlwiLFwiZ3RcIjpcIj5cIixcIkdUXCI6XCI+XCIsXCJJYWN1dGVcIjpcIsONXCIsXCJpYWN1dGVcIjpcIsOtXCIsXCJJY2lyY1wiOlwiw45cIixcImljaXJjXCI6XCLDrlwiLFwiaWV4Y2xcIjpcIsKhXCIsXCJJZ3JhdmVcIjpcIsOMXCIsXCJpZ3JhdmVcIjpcIsOsXCIsXCJpcXVlc3RcIjpcIsK/XCIsXCJJdW1sXCI6XCLDj1wiLFwiaXVtbFwiOlwiw69cIixcImxhcXVvXCI6XCLCq1wiLFwibHRcIjpcIjxcIixcIkxUXCI6XCI8XCIsXCJtYWNyXCI6XCLCr1wiLFwibWljcm9cIjpcIsK1XCIsXCJtaWRkb3RcIjpcIsK3XCIsXCJuYnNwXCI6XCLCoFwiLFwibm90XCI6XCLCrFwiLFwiTnRpbGRlXCI6XCLDkVwiLFwibnRpbGRlXCI6XCLDsVwiLFwiT2FjdXRlXCI6XCLDk1wiLFwib2FjdXRlXCI6XCLDs1wiLFwiT2NpcmNcIjpcIsOUXCIsXCJvY2lyY1wiOlwiw7RcIixcIk9ncmF2ZVwiOlwiw5JcIixcIm9ncmF2ZVwiOlwiw7JcIixcIm9yZGZcIjpcIsKqXCIsXCJvcmRtXCI6XCLCulwiLFwiT3NsYXNoXCI6XCLDmFwiLFwib3NsYXNoXCI6XCLDuFwiLFwiT3RpbGRlXCI6XCLDlVwiLFwib3RpbGRlXCI6XCLDtVwiLFwiT3VtbFwiOlwiw5ZcIixcIm91bWxcIjpcIsO2XCIsXCJwYXJhXCI6XCLCtlwiLFwicGx1c21uXCI6XCLCsVwiLFwicG91bmRcIjpcIsKjXCIsXCJxdW90XCI6XCJcXFwiXCIsXCJRVU9UXCI6XCJcXFwiXCIsXCJyYXF1b1wiOlwiwrtcIixcInJlZ1wiOlwiwq5cIixcIlJFR1wiOlwiwq5cIixcInNlY3RcIjpcIsKnXCIsXCJzaHlcIjpcIsKtXCIsXCJzdXAxXCI6XCLCuVwiLFwic3VwMlwiOlwiwrJcIixcInN1cDNcIjpcIsKzXCIsXCJzemxpZ1wiOlwiw59cIixcIlRIT1JOXCI6XCLDnlwiLFwidGhvcm5cIjpcIsO+XCIsXCJ0aW1lc1wiOlwiw5dcIixcIlVhY3V0ZVwiOlwiw5pcIixcInVhY3V0ZVwiOlwiw7pcIixcIlVjaXJjXCI6XCLDm1wiLFwidWNpcmNcIjpcIsO7XCIsXCJVZ3JhdmVcIjpcIsOZXCIsXCJ1Z3JhdmVcIjpcIsO5XCIsXCJ1bWxcIjpcIsKoXCIsXCJVdW1sXCI6XCLDnFwiLFwidXVtbFwiOlwiw7xcIixcIllhY3V0ZVwiOlwiw51cIixcInlhY3V0ZVwiOlwiw71cIixcInllblwiOlwiwqVcIixcInl1bWxcIjpcIsO/XCJ9XG5cbi8qKiovIH0pLFxuLyogMzMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGRlY29kZU1hcCA9IF9fd2VicGFja19yZXF1aXJlX18oMzQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZUNvZGVQb2ludDtcblxuLy8gbW9kaWZpZWQgdmVyc2lvbiBvZiBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9oZS9ibG9iL21hc3Rlci9zcmMvaGUuanMjTDk0LUwxMTlcbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludChjb2RlUG9pbnQpe1xuXG5cdGlmKChjb2RlUG9pbnQgPj0gMHhEODAwICYmIGNvZGVQb2ludCA8PSAweERGRkYpIHx8IGNvZGVQb2ludCA+IDB4MTBGRkZGKXtcblx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdH1cblxuXHRpZihjb2RlUG9pbnQgaW4gZGVjb2RlTWFwKXtcblx0XHRjb2RlUG9pbnQgPSBkZWNvZGVNYXBbY29kZVBvaW50XTtcblx0fVxuXG5cdHZhciBvdXRwdXQgPSBcIlwiO1xuXG5cdGlmKGNvZGVQb2ludCA+IDB4RkZGRil7XG5cdFx0Y29kZVBvaW50IC09IDB4MTAwMDA7XG5cdFx0b3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRjtcblx0fVxuXG5cdG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCk7XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cblxuLyoqKi8gfSksXG4vKiAzNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcIjBcIjo2NTUzMyxcIjEyOFwiOjgzNjQsXCIxMzBcIjo4MjE4LFwiMTMxXCI6NDAyLFwiMTMyXCI6ODIyMixcIjEzM1wiOjgyMzAsXCIxMzRcIjo4MjI0LFwiMTM1XCI6ODIyNSxcIjEzNlwiOjcxMCxcIjEzN1wiOjgyNDAsXCIxMzhcIjozNTIsXCIxMzlcIjo4MjQ5LFwiMTQwXCI6MzM4LFwiMTQyXCI6MzgxLFwiMTQ1XCI6ODIxNixcIjE0NlwiOjgyMTcsXCIxNDdcIjo4MjIwLFwiMTQ4XCI6ODIyMSxcIjE0OVwiOjgyMjYsXCIxNTBcIjo4MjExLFwiMTUxXCI6ODIxMixcIjE1MlwiOjczMixcIjE1M1wiOjg0ODIsXCIxNTRcIjozNTMsXCIxNTVcIjo4MjUwLFwiMTU2XCI6MzM5LFwiMTU4XCI6MzgyLFwiMTU5XCI6Mzc2fVxuXG4vKioqLyB9KSxcbi8qIDM1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbnZhciBnZXRDaGlsZHJlbiA9IGV4cG9ydHMuZ2V0Q2hpbGRyZW4gPSBmdW5jdGlvbihlbGVtKXtcblx0cmV0dXJuIGVsZW0uY2hpbGRyZW47XG59O1xuXG52YXIgZ2V0UGFyZW50ID0gZXhwb3J0cy5nZXRQYXJlbnQgPSBmdW5jdGlvbihlbGVtKXtcblx0cmV0dXJuIGVsZW0ucGFyZW50O1xufTtcblxuZXhwb3J0cy5nZXRTaWJsaW5ncyA9IGZ1bmN0aW9uKGVsZW0pe1xuXHR2YXIgcGFyZW50ID0gZ2V0UGFyZW50KGVsZW0pO1xuXHRyZXR1cm4gcGFyZW50ID8gZ2V0Q2hpbGRyZW4ocGFyZW50KSA6IFtlbGVtXTtcbn07XG5cbmV4cG9ydHMuZ2V0QXR0cmlidXRlVmFsdWUgPSBmdW5jdGlvbihlbGVtLCBuYW1lKXtcblx0cmV0dXJuIGVsZW0uYXR0cmlicyAmJiBlbGVtLmF0dHJpYnNbbmFtZV07XG59O1xuXG5leHBvcnRzLmhhc0F0dHJpYiA9IGZ1bmN0aW9uKGVsZW0sIG5hbWUpe1xuXHRyZXR1cm4gISFlbGVtLmF0dHJpYnMgJiYgaGFzT3duUHJvcGVydHkuY2FsbChlbGVtLmF0dHJpYnMsIG5hbWUpO1xufTtcblxuZXhwb3J0cy5nZXROYW1lID0gZnVuY3Rpb24oZWxlbSl7XG5cdHJldHVybiBlbGVtLm5hbWU7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMzYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuZXhwb3J0cy5yZW1vdmVFbGVtZW50ID0gZnVuY3Rpb24oZWxlbSl7XG5cdGlmKGVsZW0ucHJldikgZWxlbS5wcmV2Lm5leHQgPSBlbGVtLm5leHQ7XG5cdGlmKGVsZW0ubmV4dCkgZWxlbS5uZXh0LnByZXYgPSBlbGVtLnByZXY7XG5cblx0aWYoZWxlbS5wYXJlbnQpe1xuXHRcdHZhciBjaGlsZHMgPSBlbGVtLnBhcmVudC5jaGlsZHJlbjtcblx0XHRjaGlsZHMuc3BsaWNlKGNoaWxkcy5sYXN0SW5kZXhPZihlbGVtKSwgMSk7XG5cdH1cbn07XG5cbmV4cG9ydHMucmVwbGFjZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtLCByZXBsYWNlbWVudCl7XG5cdHZhciBwcmV2ID0gcmVwbGFjZW1lbnQucHJldiA9IGVsZW0ucHJldjtcblx0aWYocHJldil7XG5cdFx0cHJldi5uZXh0ID0gcmVwbGFjZW1lbnQ7XG5cdH1cblxuXHR2YXIgbmV4dCA9IHJlcGxhY2VtZW50Lm5leHQgPSBlbGVtLm5leHQ7XG5cdGlmKG5leHQpe1xuXHRcdG5leHQucHJldiA9IHJlcGxhY2VtZW50O1xuXHR9XG5cblx0dmFyIHBhcmVudCA9IHJlcGxhY2VtZW50LnBhcmVudCA9IGVsZW0ucGFyZW50O1xuXHRpZihwYXJlbnQpe1xuXHRcdHZhciBjaGlsZHMgPSBwYXJlbnQuY2hpbGRyZW47XG5cdFx0Y2hpbGRzW2NoaWxkcy5sYXN0SW5kZXhPZihlbGVtKV0gPSByZXBsYWNlbWVudDtcblx0fVxufTtcblxuZXhwb3J0cy5hcHBlbmRDaGlsZCA9IGZ1bmN0aW9uKGVsZW0sIGNoaWxkKXtcblx0Y2hpbGQucGFyZW50ID0gZWxlbTtcblxuXHRpZihlbGVtLmNoaWxkcmVuLnB1c2goY2hpbGQpICE9PSAxKXtcblx0XHR2YXIgc2libGluZyA9IGVsZW0uY2hpbGRyZW5bZWxlbS5jaGlsZHJlbi5sZW5ndGggLSAyXTtcblx0XHRzaWJsaW5nLm5leHQgPSBjaGlsZDtcblx0XHRjaGlsZC5wcmV2ID0gc2libGluZztcblx0XHRjaGlsZC5uZXh0ID0gbnVsbDtcblx0fVxufTtcblxuZXhwb3J0cy5hcHBlbmQgPSBmdW5jdGlvbihlbGVtLCBuZXh0KXtcblx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50LFxuXHRcdGN1cnJOZXh0ID0gZWxlbS5uZXh0O1xuXG5cdG5leHQubmV4dCA9IGN1cnJOZXh0O1xuXHRuZXh0LnByZXYgPSBlbGVtO1xuXHRlbGVtLm5leHQgPSBuZXh0O1xuXHRuZXh0LnBhcmVudCA9IHBhcmVudDtcblxuXHRpZihjdXJyTmV4dCl7XG5cdFx0Y3Vyck5leHQucHJldiA9IG5leHQ7XG5cdFx0aWYocGFyZW50KXtcblx0XHRcdHZhciBjaGlsZHMgPSBwYXJlbnQuY2hpbGRyZW47XG5cdFx0XHRjaGlsZHMuc3BsaWNlKGNoaWxkcy5sYXN0SW5kZXhPZihjdXJyTmV4dCksIDAsIG5leHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmKHBhcmVudCl7XG5cdFx0cGFyZW50LmNoaWxkcmVuLnB1c2gobmV4dCk7XG5cdH1cbn07XG5cbmV4cG9ydHMucHJlcGVuZCA9IGZ1bmN0aW9uKGVsZW0sIHByZXYpe1xuXHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnQ7XG5cdGlmKHBhcmVudCl7XG5cdFx0dmFyIGNoaWxkcyA9IHBhcmVudC5jaGlsZHJlbjtcblx0XHRjaGlsZHMuc3BsaWNlKGNoaWxkcy5sYXN0SW5kZXhPZihlbGVtKSwgMCwgcHJldik7XG5cdH1cblxuXHRpZihlbGVtLnByZXYpe1xuXHRcdGVsZW0ucHJldi5uZXh0ID0gcHJldjtcblx0fVxuXHRcblx0cHJldi5wYXJlbnQgPSBwYXJlbnQ7XG5cdHByZXYucHJldiA9IGVsZW0ucHJldjtcblx0cHJldi5uZXh0ID0gZWxlbTtcblx0ZWxlbS5wcmV2ID0gcHJldjtcbn07XG5cblxuXG5cbi8qKiovIH0pLFxuLyogMzcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGlzVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KS5pc1RhZztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdGZpbHRlcjogZmlsdGVyLFxuXHRmaW5kOiBmaW5kLFxuXHRmaW5kT25lQ2hpbGQ6IGZpbmRPbmVDaGlsZCxcblx0ZmluZE9uZTogZmluZE9uZSxcblx0ZXhpc3RzT25lOiBleGlzdHNPbmUsXG5cdGZpbmRBbGw6IGZpbmRBbGxcbn07XG5cbmZ1bmN0aW9uIGZpbHRlcih0ZXN0LCBlbGVtZW50LCByZWN1cnNlLCBsaW1pdCl7XG5cdGlmKCFBcnJheS5pc0FycmF5KGVsZW1lbnQpKSBlbGVtZW50ID0gW2VsZW1lbnRdO1xuXG5cdGlmKHR5cGVvZiBsaW1pdCAhPT0gXCJudW1iZXJcIiB8fCAhaXNGaW5pdGUobGltaXQpKXtcblx0XHRsaW1pdCA9IEluZmluaXR5O1xuXHR9XG5cdHJldHVybiBmaW5kKHRlc3QsIGVsZW1lbnQsIHJlY3Vyc2UgIT09IGZhbHNlLCBsaW1pdCk7XG59XG5cbmZ1bmN0aW9uIGZpbmQodGVzdCwgZWxlbXMsIHJlY3Vyc2UsIGxpbWl0KXtcblx0dmFyIHJlc3VsdCA9IFtdLCBjaGlsZHM7XG5cblx0Zm9yKHZhciBpID0gMCwgaiA9IGVsZW1zLmxlbmd0aDsgaSA8IGo7IGkrKyl7XG5cdFx0aWYodGVzdChlbGVtc1tpXSkpe1xuXHRcdFx0cmVzdWx0LnB1c2goZWxlbXNbaV0pO1xuXHRcdFx0aWYoLS1saW1pdCA8PSAwKSBicmVhaztcblx0XHR9XG5cblx0XHRjaGlsZHMgPSBlbGVtc1tpXS5jaGlsZHJlbjtcblx0XHRpZihyZWN1cnNlICYmIGNoaWxkcyAmJiBjaGlsZHMubGVuZ3RoID4gMCl7XG5cdFx0XHRjaGlsZHMgPSBmaW5kKHRlc3QsIGNoaWxkcywgcmVjdXJzZSwgbGltaXQpO1xuXHRcdFx0cmVzdWx0ID0gcmVzdWx0LmNvbmNhdChjaGlsZHMpO1xuXHRcdFx0bGltaXQgLT0gY2hpbGRzLmxlbmd0aDtcblx0XHRcdGlmKGxpbWl0IDw9IDApIGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRPbmVDaGlsZCh0ZXN0LCBlbGVtcyl7XG5cdGZvcih2YXIgaSA9IDAsIGwgPSBlbGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdGlmKHRlc3QoZWxlbXNbaV0pKSByZXR1cm4gZWxlbXNbaV07XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluZE9uZSh0ZXN0LCBlbGVtcyl7XG5cdHZhciBlbGVtID0gbnVsbDtcblxuXHRmb3IodmFyIGkgPSAwLCBsID0gZWxlbXMubGVuZ3RoOyBpIDwgbCAmJiAhZWxlbTsgaSsrKXtcblx0XHRpZighaXNUYWcoZWxlbXNbaV0pKXtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH0gZWxzZSBpZih0ZXN0KGVsZW1zW2ldKSl7XG5cdFx0XHRlbGVtID0gZWxlbXNbaV07XG5cdFx0fSBlbHNlIGlmKGVsZW1zW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0ZWxlbSA9IGZpbmRPbmUodGVzdCwgZWxlbXNbaV0uY2hpbGRyZW4pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBleGlzdHNPbmUodGVzdCwgZWxlbXMpe1xuXHRmb3IodmFyIGkgPSAwLCBsID0gZWxlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRpZihcblx0XHRcdGlzVGFnKGVsZW1zW2ldKSAmJiAoXG5cdFx0XHRcdHRlc3QoZWxlbXNbaV0pIHx8IChcblx0XHRcdFx0XHRlbGVtc1tpXS5jaGlsZHJlbi5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0ZXhpc3RzT25lKHRlc3QsIGVsZW1zW2ldLmNoaWxkcmVuKVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0KXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZmluZEFsbCh0ZXN0LCBlbGVtcyl7XG5cdHZhciByZXN1bHQgPSBbXTtcblx0Zm9yKHZhciBpID0gMCwgaiA9IGVsZW1zLmxlbmd0aDsgaSA8IGo7IGkrKyl7XG5cdFx0aWYoIWlzVGFnKGVsZW1zW2ldKSkgY29udGludWU7XG5cdFx0aWYodGVzdChlbGVtc1tpXSkpIHJlc3VsdC5wdXNoKGVsZW1zW2ldKTtcblxuXHRcdGlmKGVsZW1zW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0cmVzdWx0ID0gcmVzdWx0LmNvbmNhdChmaW5kQWxsKHRlc3QsIGVsZW1zW2ldLmNoaWxkcmVuKSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG5cblxuLyoqKi8gfSksXG4vKiAzOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgRWxlbWVudFR5cGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGlzVGFnID0gZXhwb3J0cy5pc1RhZyA9IEVsZW1lbnRUeXBlLmlzVGFnO1xuXG5leHBvcnRzLnRlc3RFbGVtZW50ID0gZnVuY3Rpb24ob3B0aW9ucywgZWxlbWVudCl7XG5cdGZvcih2YXIga2V5IGluIG9wdGlvbnMpe1xuXHRcdGlmKCFvcHRpb25zLmhhc093blByb3BlcnR5KGtleSkpO1xuXHRcdGVsc2UgaWYoa2V5ID09PSBcInRhZ19uYW1lXCIpe1xuXHRcdFx0aWYoIWlzVGFnKGVsZW1lbnQpIHx8ICFvcHRpb25zLnRhZ19uYW1lKGVsZW1lbnQubmFtZSkpe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmKGtleSA9PT0gXCJ0YWdfdHlwZVwiKXtcblx0XHRcdGlmKCFvcHRpb25zLnRhZ190eXBlKGVsZW1lbnQudHlwZSkpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2UgaWYoa2V5ID09PSBcInRhZ19jb250YWluc1wiKXtcblx0XHRcdGlmKGlzVGFnKGVsZW1lbnQpIHx8ICFvcHRpb25zLnRhZ19jb250YWlucyhlbGVtZW50LmRhdGEpKXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZighZWxlbWVudC5hdHRyaWJzIHx8ICFvcHRpb25zW2tleV0oZWxlbWVudC5hdHRyaWJzW2tleV0pKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG52YXIgQ2hlY2tzID0ge1xuXHR0YWdfbmFtZTogZnVuY3Rpb24obmFtZSl7XG5cdFx0aWYodHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIil7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7IHJldHVybiBpc1RhZyhlbGVtKSAmJiBuYW1lKGVsZW0ubmFtZSk7IH07XG5cdFx0fSBlbHNlIGlmKG5hbWUgPT09IFwiKlwiKXtcblx0XHRcdHJldHVybiBpc1RhZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gaXNUYWcoZWxlbSkgJiYgZWxlbS5uYW1lID09PSBuYW1lOyB9O1xuXHRcdH1cblx0fSxcblx0dGFnX3R5cGU6IGZ1bmN0aW9uKHR5cGUpe1xuXHRcdGlmKHR5cGVvZiB0eXBlID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gdHlwZShlbGVtLnR5cGUpOyB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7IHJldHVybiBlbGVtLnR5cGUgPT09IHR5cGU7IH07XG5cdFx0fVxuXHR9LFxuXHR0YWdfY29udGFpbnM6IGZ1bmN0aW9uKGRhdGEpe1xuXHRcdGlmKHR5cGVvZiBkYXRhID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gIWlzVGFnKGVsZW0pICYmIGRhdGEoZWxlbS5kYXRhKTsgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gIWlzVGFnKGVsZW0pICYmIGVsZW0uZGF0YSA9PT0gZGF0YTsgfTtcblx0XHR9XG5cdH1cbn07XG5cbmZ1bmN0aW9uIGdldEF0dHJpYkNoZWNrKGF0dHJpYiwgdmFsdWUpe1xuXHRpZih0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIil7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gZWxlbS5hdHRyaWJzICYmIHZhbHVlKGVsZW0uYXR0cmlic1thdHRyaWJdKTsgfTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7IHJldHVybiBlbGVtLmF0dHJpYnMgJiYgZWxlbS5hdHRyaWJzW2F0dHJpYl0gPT09IHZhbHVlOyB9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVGdW5jcyhhLCBiKXtcblx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe1xuXHRcdHJldHVybiBhKGVsZW0pIHx8IGIoZWxlbSk7XG5cdH07XG59XG5cbmV4cG9ydHMuZ2V0RWxlbWVudHMgPSBmdW5jdGlvbihvcHRpb25zLCBlbGVtZW50LCByZWN1cnNlLCBsaW1pdCl7XG5cdHZhciBmdW5jcyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpLm1hcChmdW5jdGlvbihrZXkpe1xuXHRcdHZhciB2YWx1ZSA9IG9wdGlvbnNba2V5XTtcblx0XHRyZXR1cm4ga2V5IGluIENoZWNrcyA/IENoZWNrc1trZXldKHZhbHVlKSA6IGdldEF0dHJpYkNoZWNrKGtleSwgdmFsdWUpO1xuXHR9KTtcblxuXHRyZXR1cm4gZnVuY3MubGVuZ3RoID09PSAwID8gW10gOiB0aGlzLmZpbHRlcihcblx0XHRmdW5jcy5yZWR1Y2UoY29tYmluZUZ1bmNzKSxcblx0XHRlbGVtZW50LCByZWN1cnNlLCBsaW1pdFxuXHQpO1xufTtcblxuZXhwb3J0cy5nZXRFbGVtZW50QnlJZCA9IGZ1bmN0aW9uKGlkLCBlbGVtZW50LCByZWN1cnNlKXtcblx0aWYoIUFycmF5LmlzQXJyYXkoZWxlbWVudCkpIGVsZW1lbnQgPSBbZWxlbWVudF07XG5cdHJldHVybiB0aGlzLmZpbmRPbmUoZ2V0QXR0cmliQ2hlY2soXCJpZFwiLCBpZCksIGVsZW1lbnQsIHJlY3Vyc2UgIT09IGZhbHNlKTtcbn07XG5cbmV4cG9ydHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBmdW5jdGlvbihuYW1lLCBlbGVtZW50LCByZWN1cnNlLCBsaW1pdCl7XG5cdHJldHVybiB0aGlzLmZpbHRlcihDaGVja3MudGFnX25hbWUobmFtZSksIGVsZW1lbnQsIHJlY3Vyc2UsIGxpbWl0KTtcbn07XG5cbmV4cG9ydHMuZ2V0RWxlbWVudHNCeVRhZ1R5cGUgPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCByZWN1cnNlLCBsaW1pdCl7XG5cdHJldHVybiB0aGlzLmZpbHRlcihDaGVja3MudGFnX3R5cGUodHlwZSksIGVsZW1lbnQsIHJlY3Vyc2UsIGxpbWl0KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyByZW1vdmVTdWJzZXRzXG4vLyBHaXZlbiBhbiBhcnJheSBvZiBub2RlcywgcmVtb3ZlIGFueSBtZW1iZXIgdGhhdCBpcyBjb250YWluZWQgYnkgYW5vdGhlci5cbmV4cG9ydHMucmVtb3ZlU3Vic2V0cyA9IGZ1bmN0aW9uKG5vZGVzKSB7XG5cdHZhciBpZHggPSBub2Rlcy5sZW5ndGgsIG5vZGUsIGFuY2VzdG9yLCByZXBsYWNlO1xuXG5cdC8vIENoZWNrIGlmIGVhY2ggbm9kZSAob3Igb25lIG9mIGl0cyBhbmNlc3RvcnMpIGlzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZVxuXHQvLyBhcnJheS5cblx0d2hpbGUgKC0taWR4ID4gLTEpIHtcblx0XHRub2RlID0gYW5jZXN0b3IgPSBub2Rlc1tpZHhdO1xuXG5cdFx0Ly8gVGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBub2RlIHVuZGVyIGNvbnNpZGVyYXRpb25cblx0XHRub2Rlc1tpZHhdID0gbnVsbDtcblx0XHRyZXBsYWNlID0gdHJ1ZTtcblxuXHRcdHdoaWxlIChhbmNlc3Rvcikge1xuXHRcdFx0aWYgKG5vZGVzLmluZGV4T2YoYW5jZXN0b3IpID4gLTEpIHtcblx0XHRcdFx0cmVwbGFjZSA9IGZhbHNlO1xuXHRcdFx0XHRub2Rlcy5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbm9kZSBoYXMgYmVlbiBmb3VuZCB0byBiZSB1bmlxdWUsIHJlLWluc2VydCBpdC5cblx0XHRpZiAocmVwbGFjZSkge1xuXHRcdFx0bm9kZXNbaWR4XSA9IG5vZGU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5vZGVzO1xufTtcblxuLy8gU291cmNlOiBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLW5vZGUtY29tcGFyZWRvY3VtZW50cG9zaXRpb25cbnZhciBQT1NJVElPTiA9IHtcblx0RElTQ09OTkVDVEVEOiAxLFxuXHRQUkVDRURJTkc6IDIsXG5cdEZPTExPV0lORzogNCxcblx0Q09OVEFJTlM6IDgsXG5cdENPTlRBSU5FRF9CWTogMTZcbn07XG5cbi8vIENvbXBhcmUgdGhlIHBvc2l0aW9uIG9mIG9uZSBub2RlIGFnYWluc3QgYW5vdGhlciBub2RlIGluIGFueSBvdGhlciBkb2N1bWVudC5cbi8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBiaXRtYXNrIHdpdGggdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4vL1xuLy8gZG9jdW1lbnQgb3JkZXI6XG4vLyA+IFRoZXJlIGlzIGFuIG9yZGVyaW5nLCBkb2N1bWVudCBvcmRlciwgZGVmaW5lZCBvbiBhbGwgdGhlIG5vZGVzIGluIHRoZVxuLy8gPiBkb2N1bWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuLy8gPiBYTUwgcmVwcmVzZW50YXRpb24gb2YgZWFjaCBub2RlIG9jY3VycyBpbiB0aGUgWE1MIHJlcHJlc2VudGF0aW9uIG9mIHRoZVxuLy8gPiBkb2N1bWVudCBhZnRlciBleHBhbnNpb24gb2YgZ2VuZXJhbCBlbnRpdGllcy4gVGh1cywgdGhlIGRvY3VtZW50IGVsZW1lbnRcbi8vID4gbm9kZSB3aWxsIGJlIHRoZSBmaXJzdCBub2RlLiBFbGVtZW50IG5vZGVzIG9jY3VyIGJlZm9yZSB0aGVpciBjaGlsZHJlbi5cbi8vID4gVGh1cywgZG9jdW1lbnQgb3JkZXIgb3JkZXJzIGVsZW1lbnQgbm9kZXMgaW4gb3JkZXIgb2YgdGhlIG9jY3VycmVuY2Ugb2Zcbi8vID4gdGhlaXIgc3RhcnQtdGFnIGluIHRoZSBYTUwgKGFmdGVyIGV4cGFuc2lvbiBvZiBlbnRpdGllcykuIFRoZSBhdHRyaWJ1dGVcbi8vID4gbm9kZXMgb2YgYW4gZWxlbWVudCBvY2N1ciBhZnRlciB0aGUgZWxlbWVudCBhbmQgYmVmb3JlIGl0cyBjaGlsZHJlbi4gVGhlXG4vLyA+IHJlbGF0aXZlIG9yZGVyIG9mIGF0dHJpYnV0ZSBub2RlcyBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuL1xuLy8gU291cmNlOlxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtQ29yZS9nbG9zc2FyeS5odG1sI2R0LWRvY3VtZW50LW9yZGVyXG4vL1xuLy8gQGFyZ3VtZW50IHtOb2RlfSBub2RhQSBUaGUgZmlyc3Qgbm9kZSB0byB1c2UgaW4gdGhlIGNvbXBhcmlzb25cbi8vIEBhcmd1bWVudCB7Tm9kZX0gbm9kZUIgVGhlIHNlY29uZCBub2RlIHRvIHVzZSBpbiB0aGUgY29tcGFyaXNvblxuLy9cbi8vIEByZXR1cm4ge051bWJlcn0gQSBiaXRtYXNrIGRlc2NyaWJpbmcgdGhlIGlucHV0IG5vZGVzJyByZWxhdGl2ZSBwb3NpdGlvbi5cbi8vICAgICAgICAgU2VlIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tbm9kZS1jb21wYXJlZG9jdW1lbnRwb3NpdGlvbiBmb3Jcbi8vICAgICAgICAgYSBkZXNjcmlwdGlvbiBvZiB0aGVzZSB2YWx1ZXMuXG52YXIgY29tcGFyZVBvcyA9IGV4cG9ydHMuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPSBmdW5jdGlvbihub2RlQSwgbm9kZUIpIHtcblx0dmFyIGFQYXJlbnRzID0gW107XG5cdHZhciBiUGFyZW50cyA9IFtdO1xuXHR2YXIgY3VycmVudCwgc2hhcmVkUGFyZW50LCBzaWJsaW5ncywgYVNpYmxpbmcsIGJTaWJsaW5nLCBpZHg7XG5cblx0aWYgKG5vZGVBID09PSBub2RlQikge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y3VycmVudCA9IG5vZGVBO1xuXHR3aGlsZSAoY3VycmVudCkge1xuXHRcdGFQYXJlbnRzLnVuc2hpZnQoY3VycmVudCk7XG5cdFx0Y3VycmVudCA9IGN1cnJlbnQucGFyZW50O1xuXHR9XG5cdGN1cnJlbnQgPSBub2RlQjtcblx0d2hpbGUgKGN1cnJlbnQpIHtcblx0XHRiUGFyZW50cy51bnNoaWZ0KGN1cnJlbnQpO1xuXHRcdGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcblx0fVxuXG5cdGlkeCA9IDA7XG5cdHdoaWxlIChhUGFyZW50c1tpZHhdID09PSBiUGFyZW50c1tpZHhdKSB7XG5cdFx0aWR4Kys7XG5cdH1cblxuXHRpZiAoaWR4ID09PSAwKSB7XG5cdFx0cmV0dXJuIFBPU0lUSU9OLkRJU0NPTk5FQ1RFRDtcblx0fVxuXG5cdHNoYXJlZFBhcmVudCA9IGFQYXJlbnRzW2lkeCAtIDFdO1xuXHRzaWJsaW5ncyA9IHNoYXJlZFBhcmVudC5jaGlsZHJlbjtcblx0YVNpYmxpbmcgPSBhUGFyZW50c1tpZHhdO1xuXHRiU2libGluZyA9IGJQYXJlbnRzW2lkeF07XG5cblx0aWYgKHNpYmxpbmdzLmluZGV4T2YoYVNpYmxpbmcpID4gc2libGluZ3MuaW5kZXhPZihiU2libGluZykpIHtcblx0XHRpZiAoc2hhcmVkUGFyZW50ID09PSBub2RlQikge1xuXHRcdFx0cmV0dXJuIFBPU0lUSU9OLkZPTExPV0lORyB8IFBPU0lUSU9OLkNPTlRBSU5FRF9CWTtcblx0XHR9XG5cdFx0cmV0dXJuIFBPU0lUSU9OLkZPTExPV0lORztcblx0fSBlbHNlIHtcblx0XHRpZiAoc2hhcmVkUGFyZW50ID09PSBub2RlQSkge1xuXHRcdFx0cmV0dXJuIFBPU0lUSU9OLlBSRUNFRElORyB8IFBPU0lUSU9OLkNPTlRBSU5TO1xuXHRcdH1cblx0XHRyZXR1cm4gUE9TSVRJT04uUFJFQ0VESU5HO1xuXHR9XG59O1xuXG4vLyBTb3J0IGFuIGFycmF5IG9mIG5vZGVzIGJhc2VkIG9uIHRoZWlyIHJlbGF0aXZlIHBvc2l0aW9uIGluIHRoZSBkb2N1bWVudCBhbmRcbi8vIHJlbW92ZSBhbnkgZHVwbGljYXRlIG5vZGVzLiBJZiB0aGUgYXJyYXkgY29udGFpbnMgbm9kZXMgdGhhdCBkbyBub3QgYmVsb25nXG4vLyB0byB0aGUgc2FtZSBkb2N1bWVudCwgc29ydCBvcmRlciBpcyB1bnNwZWNpZmllZC5cbi8vXG4vLyBAYXJndW1lbnQge0FycmF5fSBub2RlcyBBcnJheSBvZiBET00gbm9kZXNcbi8vXG4vLyBAcmV0dXJucyB7QXJyYXl9IGNvbGxlY3Rpb24gb2YgdW5pcXVlIG5vZGVzLCBzb3J0ZWQgaW4gZG9jdW1lbnQgb3JkZXJcbmV4cG9ydHMudW5pcXVlU29ydCA9IGZ1bmN0aW9uKG5vZGVzKSB7XG5cdHZhciBpZHggPSBub2Rlcy5sZW5ndGgsIG5vZGUsIHBvc2l0aW9uO1xuXG5cdG5vZGVzID0gbm9kZXMuc2xpY2UoKTtcblxuXHR3aGlsZSAoLS1pZHggPiAtMSkge1xuXHRcdG5vZGUgPSBub2Rlc1tpZHhdO1xuXHRcdHBvc2l0aW9uID0gbm9kZXMuaW5kZXhPZihub2RlKTtcblx0XHRpZiAocG9zaXRpb24gPiAtMSAmJiBwb3NpdGlvbiA8IGlkeCkge1xuXHRcdFx0bm9kZXMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0fVxuXHR9XG5cdG5vZGVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuXHRcdHZhciByZWxhdGl2ZSA9IGNvbXBhcmVQb3MoYSwgYik7XG5cdFx0aWYgKHJlbGF0aXZlICYgUE9TSVRJT04uUFJFQ0VESU5HKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fSBlbHNlIGlmIChyZWxhdGl2ZSAmIFBPU0lUSU9OLkZPTExPV0lORykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9KTtcblxuXHRyZXR1cm4gbm9kZXM7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLypcblx0Y29tcGlsZXMgYSBzZWxlY3RvciB0byBhbiBleGVjdXRhYmxlIGZ1bmN0aW9uXG4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBpbGVGYWN0b3J5O1xuXG52YXIgcGFyc2UgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKSxcblx0QmFzZUZ1bmNzICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLFxuXHRzb3J0UnVsZXMgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpLFxuXHRwcm9jZWR1cmUgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpLFxuXHRydWxlc0ZhY3RvcnkgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpLFxuXHRwc2V1ZG9zRmFjdG9yeSA9IF9fd2VicGFja19yZXF1aXJlX18oODYpLFxuXHR0cnVlRnVuYyAgICAgICA9IEJhc2VGdW5jcy50cnVlRnVuYyxcblx0ZmFsc2VGdW5jICAgICAgPSBCYXNlRnVuY3MuZmFsc2VGdW5jO1xuXG5mdW5jdGlvbiBjb21waWxlRmFjdG9yeShhZGFwdGVyKXtcblx0dmFyIFBzZXVkb3MgICAgID0gcHNldWRvc0ZhY3RvcnkoYWRhcHRlciksXG5cdFx0ZmlsdGVycyAgICAgPSBQc2V1ZG9zLmZpbHRlcnMsXG5cdFx0UnVsZXMgXHRcdFx0PSBydWxlc0ZhY3RvcnkoYWRhcHRlciwgUHNldWRvcyk7XG5cblx0ZnVuY3Rpb24gY29tcGlsZShzZWxlY3Rvciwgb3B0aW9ucywgY29udGV4dCl7XG5cdFx0dmFyIG5leHQgPSBjb21waWxlVW5zYWZlKHNlbGVjdG9yLCBvcHRpb25zLCBjb250ZXh0KTtcblx0XHRyZXR1cm4gd3JhcChuZXh0KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHdyYXAobmV4dCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGJhc2UoZWxlbSl7XG5cdFx0XHRyZXR1cm4gYWRhcHRlci5pc1RhZyhlbGVtKSAmJiBuZXh0KGVsZW0pO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBjb21waWxlVW5zYWZlKHNlbGVjdG9yLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHR2YXIgdG9rZW4gPSBwYXJzZShzZWxlY3Rvciwgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIGNvbXBpbGVUb2tlbih0b2tlbiwgb3B0aW9ucywgY29udGV4dCk7XG5cdH1cblxuXHRmdW5jdGlvbiBpbmNsdWRlc1Njb3BlUHNldWRvKHQpe1xuXHRcdHJldHVybiB0LnR5cGUgPT09IFwicHNldWRvXCIgJiYgKFxuXHRcdFx0dC5uYW1lID09PSBcInNjb3BlXCIgfHwgKFxuXHRcdFx0XHRBcnJheS5pc0FycmF5KHQuZGF0YSkgJiZcblx0XHRcdFx0dC5kYXRhLnNvbWUoZnVuY3Rpb24oZGF0YSl7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGEuc29tZShpbmNsdWRlc1Njb3BlUHNldWRvKTtcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0dmFyIERFU0NFTkRBTlRfVE9LRU4gPSB7dHlwZTogXCJkZXNjZW5kYW50XCJ9LFxuXHRcdEZMRVhJQkxFX0RFU0NFTkRBTlRfVE9LRU4gPSB7dHlwZTogXCJfZmxleGlibGVEZXNjZW5kYW50XCJ9LFxuXHRcdFNDT1BFX1RPS0VOID0ge3R5cGU6IFwicHNldWRvXCIsIG5hbWU6IFwic2NvcGVcIn0sXG5cdFx0UExBQ0VIT0xERVJfRUxFTUVOVCA9IHt9O1xuXG5cdC8vQ1NTIDQgU3BlYyAoRHJhZnQpOiAzLjMuMS4gQWJzb2x1dGl6aW5nIGEgU2NvcGUtcmVsYXRpdmUgU2VsZWN0b3Jcblx0Ly9odHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnM0LyNhYnNvbHV0aXppbmdcblx0ZnVuY3Rpb24gYWJzb2x1dGl6ZSh0b2tlbiwgY29udGV4dCl7XG5cdFx0Ly9UT0RPIGJldHRlciBjaGVjayBpZiBjb250ZXh0IGlzIGRvY3VtZW50XG5cdFx0dmFyIGhhc0NvbnRleHQgPSAhIWNvbnRleHQgJiYgISFjb250ZXh0Lmxlbmd0aCAmJiBjb250ZXh0LmV2ZXJ5KGZ1bmN0aW9uKGUpe1xuXHRcdFx0cmV0dXJuIGUgPT09IFBMQUNFSE9MREVSX0VMRU1FTlQgfHwgISFhZGFwdGVyLmdldFBhcmVudChlKTtcblx0XHR9KTtcblxuXG5cdFx0dG9rZW4uZm9yRWFjaChmdW5jdGlvbih0KXtcblx0XHRcdGlmKHQubGVuZ3RoID4gMCAmJiBpc1RyYXZlcnNhbCh0WzBdKSAmJiB0WzBdLnR5cGUgIT09IFwiZGVzY2VuZGFudFwiKXtcblx0XHRcdFx0Ly9kb24ndCByZXR1cm4gaW4gZWxzZSBicmFuY2hcblx0XHRcdH0gZWxzZSBpZihoYXNDb250ZXh0ICYmICFpbmNsdWRlc1Njb3BlUHNldWRvKHQpKXtcblx0XHRcdFx0dC51bnNoaWZ0KERFU0NFTkRBTlRfVE9LRU4pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0LnVuc2hpZnQoU0NPUEVfVE9LRU4pO1xuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29tcGlsZVRva2VuKHRva2VuLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHR0b2tlbiA9IHRva2VuLmZpbHRlcihmdW5jdGlvbih0KXsgcmV0dXJuIHQubGVuZ3RoID4gMDsgfSk7XG5cblx0XHR0b2tlbi5mb3JFYWNoKHNvcnRSdWxlcyk7XG5cblx0XHR2YXIgaXNBcnJheUNvbnRleHQgPSBBcnJheS5pc0FycmF5KGNvbnRleHQpO1xuXG5cdFx0Y29udGV4dCA9IChvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dCkgfHwgY29udGV4dDtcblxuXHRcdGlmKGNvbnRleHQgJiYgIWlzQXJyYXlDb250ZXh0KSBjb250ZXh0ID0gW2NvbnRleHRdO1xuXG5cdFx0YWJzb2x1dGl6ZSh0b2tlbiwgY29udGV4dCk7XG5cblx0XHR2YXIgc2hvdWxkVGVzdE5leHRTaWJsaW5ncyA9IGZhbHNlO1xuXG5cdFx0dmFyIHF1ZXJ5ID0gdG9rZW5cblx0XHRcdC5tYXAoZnVuY3Rpb24ocnVsZXMpe1xuXHRcdFx0XHRpZihydWxlc1swXSAmJiBydWxlc1sxXSAmJiBydWxlc1swXS5uYW1lID09PSBcInNjb3BlXCIpe1xuXHRcdFx0XHRcdHZhciBydWxlVHlwZSA9IHJ1bGVzWzFdLnR5cGU7XG5cdFx0XHRcdFx0aWYoaXNBcnJheUNvbnRleHQgJiYgcnVsZVR5cGUgPT09IFwiZGVzY2VuZGFudFwiKSBydWxlc1sxXSA9IEZMRVhJQkxFX0RFU0NFTkRBTlRfVE9LRU47XG5cdFx0XHRcdFx0ZWxzZSBpZihydWxlVHlwZSA9PT0gXCJhZGphY2VudFwiIHx8IHJ1bGVUeXBlID09PSBcInNpYmxpbmdcIikgc2hvdWxkVGVzdE5leHRTaWJsaW5ncyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVSdWxlcyhydWxlcywgb3B0aW9ucywgY29udGV4dCk7XG5cdFx0XHR9KVxuXHRcdFx0LnJlZHVjZShyZWR1Y2VSdWxlcywgZmFsc2VGdW5jKTtcblxuXHRcdHF1ZXJ5LnNob3VsZFRlc3ROZXh0U2libGluZ3MgPSBzaG91bGRUZXN0TmV4dFNpYmxpbmdzO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5O1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNUcmF2ZXJzYWwodCl7XG5cdFx0cmV0dXJuIHByb2NlZHVyZVt0LnR5cGVdIDwgMDtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvbXBpbGVSdWxlcyhydWxlcywgb3B0aW9ucywgY29udGV4dCl7XG5cdFx0cmV0dXJuIHJ1bGVzLnJlZHVjZShmdW5jdGlvbihmdW5jLCBydWxlKXtcblx0XHRcdGlmKGZ1bmMgPT09IGZhbHNlRnVuYykgcmV0dXJuIGZ1bmM7XG5cdFx0XHRyZXR1cm4gUnVsZXNbcnVsZS50eXBlXShmdW5jLCBydWxlLCBvcHRpb25zLCBjb250ZXh0KTtcblx0XHR9LCBvcHRpb25zICYmIG9wdGlvbnMucm9vdEZ1bmMgfHwgdHJ1ZUZ1bmMpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVkdWNlUnVsZXMoYSwgYil7XG5cdFx0aWYoYiA9PT0gZmFsc2VGdW5jIHx8IGEgPT09IHRydWVGdW5jKXtcblx0XHRcdHJldHVybiBhO1xuXHRcdH1cblx0XHRpZihhID09PSBmYWxzZUZ1bmMgfHwgYiA9PT0gdHJ1ZUZ1bmMpe1xuXHRcdFx0cmV0dXJuIGI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmUoZWxlbSl7XG5cdFx0XHRyZXR1cm4gYShlbGVtKSB8fCBiKGVsZW0pO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBjb250YWluc1RyYXZlcnNhbCh0KXtcblx0XHRyZXR1cm4gdC5zb21lKGlzVHJhdmVyc2FsKTtcblx0fVxuXG5cdC8vOm5vdCwgOmhhcyBhbmQgOm1hdGNoZXMgaGF2ZSB0byBjb21waWxlIHNlbGVjdG9yc1xuXHQvL2RvaW5nIHRoaXMgaW4gbGliL3BzZXVkb3MuanMgd291bGQgbGVhZCB0byBjaXJjdWxhciBkZXBlbmRlbmNpZXMsXG5cdC8vc28gd2UgYWRkIHRoZW0gaGVyZVxuXHRmaWx0ZXJzLm5vdCA9IGZ1bmN0aW9uKG5leHQsIHRva2VuLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHR2YXIgb3B0cyA9IHtcblx0XHRcdHhtbE1vZGU6ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy54bWxNb2RlKSxcblx0XHRcdHN0cmljdDogISEob3B0aW9ucyAmJiBvcHRpb25zLnN0cmljdClcblx0XHR9O1xuXG5cdFx0aWYob3B0cy5zdHJpY3Qpe1xuXHRcdFx0aWYodG9rZW4ubGVuZ3RoID4gMSB8fCB0b2tlbi5zb21lKGNvbnRhaW5zVHJhdmVyc2FsKSl7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImNvbXBsZXggc2VsZWN0b3JzIGluIDpub3QgYXJlbid0IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGVcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGZ1bmMgPSBjb21waWxlVG9rZW4odG9rZW4sIG9wdHMsIGNvbnRleHQpO1xuXG5cdFx0aWYoZnVuYyA9PT0gZmFsc2VGdW5jKSByZXR1cm4gbmV4dDtcblx0XHRpZihmdW5jID09PSB0cnVlRnVuYykgIHJldHVybiBmYWxzZUZ1bmM7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gIWZ1bmMoZWxlbSkgJiYgbmV4dChlbGVtKTtcblx0XHR9O1xuXHR9O1xuXG5cdGZpbHRlcnMuaGFzID0gZnVuY3Rpb24obmV4dCwgdG9rZW4sIG9wdGlvbnMpe1xuXHRcdHZhciBvcHRzID0ge1xuXHRcdFx0eG1sTW9kZTogISEob3B0aW9ucyAmJiBvcHRpb25zLnhtbE1vZGUpLFxuXHRcdFx0c3RyaWN0OiAhIShvcHRpb25zICYmIG9wdGlvbnMuc3RyaWN0KVxuXHRcdH07XG5cblx0XHQvL0ZJWE1FOiBVc2VzIGFuIGFycmF5IGFzIGEgcG9pbnRlciB0byB0aGUgY3VycmVudCBlbGVtZW50IChzaWRlIGVmZmVjdHMpXG5cdFx0dmFyIGNvbnRleHQgPSB0b2tlbi5zb21lKGNvbnRhaW5zVHJhdmVyc2FsKSA/IFtQTEFDRUhPTERFUl9FTEVNRU5UXSA6IG51bGw7XG5cblx0XHR2YXIgZnVuYyA9IGNvbXBpbGVUb2tlbih0b2tlbiwgb3B0cywgY29udGV4dCk7XG5cblx0XHRpZihmdW5jID09PSBmYWxzZUZ1bmMpIHJldHVybiBmYWxzZUZ1bmM7XG5cdFx0aWYoZnVuYyA9PT0gdHJ1ZUZ1bmMpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gYWRhcHRlci5nZXRDaGlsZHJlbihlbGVtKS5zb21lKGFkYXB0ZXIuaXNUYWcpICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGZ1bmMgPSB3cmFwKGZ1bmMpO1xuXG5cdFx0aWYoY29udGV4dCl7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gaGFzKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gbmV4dChlbGVtKSAmJiAoXG5cdFx0XHRcdFx0KGNvbnRleHRbMF0gPSBlbGVtKSwgYWRhcHRlci5leGlzdHNPbmUoZnVuYywgYWRhcHRlci5nZXRDaGlsZHJlbihlbGVtKSlcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGhhcyhlbGVtKXtcblx0XHRcdHJldHVybiBuZXh0KGVsZW0pICYmIGFkYXB0ZXIuZXhpc3RzT25lKGZ1bmMsIGFkYXB0ZXIuZ2V0Q2hpbGRyZW4oZWxlbSkpO1xuXHRcdH07XG5cdH07XG5cblx0ZmlsdGVycy5tYXRjaGVzID0gZnVuY3Rpb24obmV4dCwgdG9rZW4sIG9wdGlvbnMsIGNvbnRleHQpe1xuXHRcdHZhciBvcHRzID0ge1xuXHRcdFx0eG1sTW9kZTogISEob3B0aW9ucyAmJiBvcHRpb25zLnhtbE1vZGUpLFxuXHRcdFx0c3RyaWN0OiAhIShvcHRpb25zICYmIG9wdGlvbnMuc3RyaWN0KSxcblx0XHRcdHJvb3RGdW5jOiBuZXh0XG5cdFx0fTtcblxuXHRcdHJldHVybiBjb21waWxlVG9rZW4odG9rZW4sIG9wdHMsIGNvbnRleHQpO1xuXHR9O1xuXG5cdGNvbXBpbGUuY29tcGlsZVRva2VuID0gY29tcGlsZVRva2VuO1xuXHRjb21waWxlLmNvbXBpbGVVbnNhZmUgPSBjb21waWxlVW5zYWZlO1xuXHRjb21waWxlLlBzZXVkb3MgPSBQc2V1ZG9zO1xuXG5cdHJldHVybiBjb21waWxlO1xufVxuXG5cbi8qKiovIH0pLFxuLyogNDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcblxudmFyIHJlX25hbWUgPSAvXig/OlxcXFwufFtcXHdcXC1cXHUwMGMwLVxcdUZGRkZdKSsvLFxuICAgIHJlX2VzY2FwZSA9IC9cXFxcKFtcXGRhLWZdezEsNn1cXHM/fChcXHMpfC4pL2lnLFxuICAgIC8vbW9kaWZpZWQgdmVyc2lvbiBvZiBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9ibG9iL21hc3Rlci9zcmMvc2l6emxlLmpzI0w4N1xuICAgIHJlX2F0dHIgPSAvXlxccyooKD86XFxcXC58W1xcd1xcdTAwYzAtXFx1RkZGRlxcLV0pKylcXHMqKD86KFxcUz8pPVxccyooPzooWydcIl0pKC4qPylcXDN8KCM/KD86XFxcXC58W1xcd1xcdTAwYzAtXFx1RkZGRlxcLV0pKil8KXwpXFxzKihpKT9cXF0vO1xuXG52YXIgYWN0aW9uVHlwZXMgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0XCJ1bmRlZmluZWRcIjogXCJleGlzdHNcIixcblx0XCJcIjogIFwiZXF1YWxzXCIsXG5cdFwiflwiOiBcImVsZW1lbnRcIixcblx0XCJeXCI6IFwic3RhcnRcIixcblx0XCIkXCI6IFwiZW5kXCIsXG5cdFwiKlwiOiBcImFueVwiLFxuXHRcIiFcIjogXCJub3RcIixcblx0XCJ8XCI6IFwiaHlwaGVuXCJcbn07XG5cbnZhciBzaW1wbGVTZWxlY3RvcnMgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0XCI+XCI6IFwiY2hpbGRcIixcblx0XCI8XCI6IFwicGFyZW50XCIsXG5cdFwiflwiOiBcInNpYmxpbmdcIixcblx0XCIrXCI6IFwiYWRqYWNlbnRcIlxufTtcblxudmFyIGF0dHJpYlNlbGVjdG9ycyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRcIiNcIjogW1wiaWRcIiwgXCJlcXVhbHNcIl0sXG5cdFwiLlwiOiBbXCJjbGFzc1wiLCBcImVsZW1lbnRcIl1cbn07XG5cbi8vcHNldWRvcywgd2hvc2UgZGF0YS1wcm9wZXJ0eSBpcyBwYXJzZWQgYXMgd2VsbFxudmFyIHVucGFja1BzZXVkb3MgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0XCJoYXNcIjogdHJ1ZSxcblx0XCJub3RcIjogdHJ1ZSxcblx0XCJtYXRjaGVzXCI6IHRydWVcbn07XG5cbnZhciBzdHJpcFF1b3Rlc0Zyb21Qc2V1ZG9zID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdFwiY29udGFpbnNcIjogdHJ1ZSxcblx0XCJpY29udGFpbnNcIjogdHJ1ZVxufTtcblxudmFyIHF1b3RlcyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRcIlxcXCJcIjogdHJ1ZSxcblx0XCInXCI6IHRydWVcbn07XG5cbi8vdW5lc2NhcGUgZnVuY3Rpb24gdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9ibG9iL21hc3Rlci9zcmMvc2l6emxlLmpzI0wxMzlcbmZ1bmN0aW9uIGZ1bmVzY2FwZSggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XG5cdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlZCAtIDB4MTAwMDA7XG5cdC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50XG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3hcblx0Ly8gV29ya2Fyb3VuZCBlcnJvbmVvdXMgbnVtZXJpYyBpbnRlcnByZXRhdGlvbiBvZiArXCIweFwiXG5cdHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID9cblx0XHRlc2NhcGVkIDpcblx0XHQvLyBCTVAgY29kZXBvaW50XG5cdFx0aGlnaCA8IDAgP1xuXHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHQvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFpcilcblx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xufVxuXG5mdW5jdGlvbiB1bmVzY2FwZUNTUyhzdHIpe1xuXHRyZXR1cm4gc3RyLnJlcGxhY2UocmVfZXNjYXBlLCBmdW5lc2NhcGUpO1xufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UoYyl7XG5cdHJldHVybiBjID09PSBcIiBcIiB8fCBjID09PSBcIlxcblwiIHx8IGMgPT09IFwiXFx0XCIgfHwgYyA9PT0gXCJcXGZcIiB8fCBjID09PSBcIlxcclwiO1xufVxuXG5mdW5jdGlvbiBwYXJzZShzZWxlY3Rvciwgb3B0aW9ucyl7XG5cdHZhciBzdWJzZWxlY3RzID0gW107XG5cblx0c2VsZWN0b3IgPSBwYXJzZVNlbGVjdG9yKHN1YnNlbGVjdHMsIHNlbGVjdG9yICsgXCJcIiwgb3B0aW9ucyk7XG5cblx0aWYoc2VsZWN0b3IgIT09IFwiXCIpe1xuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVubWF0Y2hlZCBzZWxlY3RvcjogXCIgKyBzZWxlY3Rvcik7XG5cdH1cblxuXHRyZXR1cm4gc3Vic2VsZWN0cztcbn1cblxuZnVuY3Rpb24gcGFyc2VTZWxlY3RvcihzdWJzZWxlY3RzLCBzZWxlY3Rvciwgb3B0aW9ucyl7XG5cdHZhciB0b2tlbnMgPSBbXSxcblx0XHRzYXdXUyA9IGZhbHNlLFxuXHRcdGRhdGEsIGZpcnN0Q2hhciwgbmFtZSwgcXVvdDtcblxuXHRmdW5jdGlvbiBnZXROYW1lKCl7XG5cdFx0dmFyIHN1YiA9IHNlbGVjdG9yLm1hdGNoKHJlX25hbWUpWzBdO1xuXHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKHN1Yi5sZW5ndGgpO1xuXHRcdHJldHVybiB1bmVzY2FwZUNTUyhzdWIpO1xuXHR9XG5cblx0ZnVuY3Rpb24gc3RyaXBXaGl0ZXNwYWNlKHN0YXJ0KXtcblx0XHR3aGlsZShpc1doaXRlc3BhY2Uoc2VsZWN0b3IuY2hhckF0KHN0YXJ0KSkpIHN0YXJ0Kys7XG5cdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoc3RhcnQpO1xuXHR9XG5cblx0c3RyaXBXaGl0ZXNwYWNlKDApO1xuXG5cdHdoaWxlKHNlbGVjdG9yICE9PSBcIlwiKXtcblx0XHRmaXJzdENoYXIgPSBzZWxlY3Rvci5jaGFyQXQoMCk7XG5cblx0XHRpZihpc1doaXRlc3BhY2UoZmlyc3RDaGFyKSl7XG5cdFx0XHRzYXdXUyA9IHRydWU7XG5cdFx0XHRzdHJpcFdoaXRlc3BhY2UoMSk7XG5cdFx0fSBlbHNlIGlmKGZpcnN0Q2hhciBpbiBzaW1wbGVTZWxlY3RvcnMpe1xuXHRcdFx0dG9rZW5zLnB1c2goe3R5cGU6IHNpbXBsZVNlbGVjdG9yc1tmaXJzdENoYXJdfSk7XG5cdFx0XHRzYXdXUyA9IGZhbHNlO1xuXG5cdFx0XHRzdHJpcFdoaXRlc3BhY2UoMSk7XG5cdFx0fSBlbHNlIGlmKGZpcnN0Q2hhciA9PT0gXCIsXCIpe1xuXHRcdFx0aWYodG9rZW5zLmxlbmd0aCA9PT0gMCl7XG5cdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcImVtcHR5IHN1Yi1zZWxlY3RvclwiKTtcblx0XHRcdH1cblx0XHRcdHN1YnNlbGVjdHMucHVzaCh0b2tlbnMpO1xuXHRcdFx0dG9rZW5zID0gW107XG5cdFx0XHRzYXdXUyA9IGZhbHNlO1xuXHRcdFx0c3RyaXBXaGl0ZXNwYWNlKDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZihzYXdXUyl7XG5cdFx0XHRcdGlmKHRva2Vucy5sZW5ndGggPiAwKXtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7dHlwZTogXCJkZXNjZW5kYW50XCJ9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzYXdXUyA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihmaXJzdENoYXIgPT09IFwiKlwiKXtcblx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoMSk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKHt0eXBlOiBcInVuaXZlcnNhbFwifSk7XG5cdFx0XHR9IGVsc2UgaWYoZmlyc3RDaGFyIGluIGF0dHJpYlNlbGVjdG9ycyl7XG5cdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKDEpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogXCJhdHRyaWJ1dGVcIixcblx0XHRcdFx0XHRuYW1lOiBhdHRyaWJTZWxlY3RvcnNbZmlyc3RDaGFyXVswXSxcblx0XHRcdFx0XHRhY3Rpb246IGF0dHJpYlNlbGVjdG9yc1tmaXJzdENoYXJdWzFdLFxuXHRcdFx0XHRcdHZhbHVlOiBnZXROYW1lKCksXG5cdFx0XHRcdFx0aWdub3JlQ2FzZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYoZmlyc3RDaGFyID09PSBcIltcIil7XG5cdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKDEpO1xuXHRcdFx0XHRkYXRhID0gc2VsZWN0b3IubWF0Y2gocmVfYXR0cik7XG5cdFx0XHRcdGlmKCFkYXRhKXtcblx0XHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJNYWxmb3JtZWQgYXR0cmlidXRlIHNlbGVjdG9yOiBcIiArIHNlbGVjdG9yKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cihkYXRhWzBdLmxlbmd0aCk7XG5cdFx0XHRcdG5hbWUgPSB1bmVzY2FwZUNTUyhkYXRhWzFdKTtcblxuXHRcdFx0XHRpZihcblx0XHRcdFx0XHQhb3B0aW9ucyB8fCAoXG5cdFx0XHRcdFx0XHRcImxvd2VyQ2FzZUF0dHJpYnV0ZU5hbWVzXCIgaW4gb3B0aW9ucyA/XG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMubG93ZXJDYXNlQXR0cmlidXRlTmFtZXMgOlxuXHRcdFx0XHRcdFx0XHQhb3B0aW9ucy54bWxNb2RlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpe1xuXHRcdFx0XHRcdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogXCJhdHRyaWJ1dGVcIixcblx0XHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRcdGFjdGlvbjogYWN0aW9uVHlwZXNbZGF0YVsyXV0sXG5cdFx0XHRcdFx0dmFsdWU6IHVuZXNjYXBlQ1NTKGRhdGFbNF0gfHwgZGF0YVs1XSB8fCBcIlwiKSxcblx0XHRcdFx0XHRpZ25vcmVDYXNlOiAhIWRhdGFbNl1cblx0XHRcdFx0fSk7XG5cblx0XHRcdH0gZWxzZSBpZihmaXJzdENoYXIgPT09IFwiOlwiKXtcblx0XHRcdFx0aWYoc2VsZWN0b3IuY2hhckF0KDEpID09PSBcIjpcIil7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoMik7XG5cdFx0XHRcdFx0dG9rZW5zLnB1c2goe3R5cGU6IFwicHNldWRvLWVsZW1lbnRcIiwgbmFtZTogZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCl9KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKDEpO1xuXG5cdFx0XHRcdG5hbWUgPSBnZXROYW1lKCkudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0ZGF0YSA9IG51bGw7XG5cblx0XHRcdFx0aWYoc2VsZWN0b3IuY2hhckF0KDApID09PSBcIihcIil7XG5cdFx0XHRcdFx0aWYobmFtZSBpbiB1bnBhY2tQc2V1ZG9zKXtcblx0XHRcdFx0XHRcdHF1b3QgPSBzZWxlY3Rvci5jaGFyQXQoMSk7XG5cdFx0XHRcdFx0XHR2YXIgcXVvdGVkID0gcXVvdCBpbiBxdW90ZXM7XG5cblx0XHRcdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKHF1b3RlZCArIDEpO1xuXG5cdFx0XHRcdFx0XHRkYXRhID0gW107XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9IHBhcnNlU2VsZWN0b3IoZGF0YSwgc2VsZWN0b3IsIG9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0XHRpZihxdW90ZWQpe1xuXHRcdFx0XHRcdFx0XHRpZihzZWxlY3Rvci5jaGFyQXQoMCkgIT09IHF1b3Qpe1xuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInVubWF0Y2hlZCBxdW90ZXMgaW4gOlwiICsgbmFtZSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoc2VsZWN0b3IuY2hhckF0KDApICE9PSBcIilcIil7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcIm1pc3NpbmcgY2xvc2luZyBwYXJlbnRoZXNpcyBpbiA6XCIgKyBuYW1lICsgXCIgXCIgKyBzZWxlY3Rvcik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKDEpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR2YXIgcG9zID0gMSwgY291bnRlciA9IDE7XG5cblx0XHRcdFx0XHRcdGZvcig7IGNvdW50ZXIgPiAwICYmIHBvcyA8IHNlbGVjdG9yLmxlbmd0aDsgcG9zKyspe1xuXHRcdFx0XHRcdFx0XHRpZihzZWxlY3Rvci5jaGFyQXQocG9zKSA9PT0gXCIoXCIpIGNvdW50ZXIrKztcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZihzZWxlY3Rvci5jaGFyQXQocG9zKSA9PT0gXCIpXCIpIGNvdW50ZXItLTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoY291bnRlcil7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInBhcmVudGhlc2lzIG5vdCBtYXRjaGVkXCIpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRkYXRhID0gc2VsZWN0b3Iuc3Vic3RyKDEsIHBvcyAtIDIpO1xuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIocG9zKTtcblxuXHRcdFx0XHRcdFx0aWYobmFtZSBpbiBzdHJpcFF1b3Rlc0Zyb21Qc2V1ZG9zKXtcblx0XHRcdFx0XHRcdFx0cXVvdCA9IGRhdGEuY2hhckF0KDApO1xuXG5cdFx0XHRcdFx0XHRcdGlmKHF1b3QgPT09IGRhdGEuc2xpY2UoLTEpICYmIHF1b3QgaW4gcXVvdGVzKXtcblx0XHRcdFx0XHRcdFx0XHRkYXRhID0gZGF0YS5zbGljZSgxLCAtMSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRkYXRhID0gdW5lc2NhcGVDU1MoZGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9rZW5zLnB1c2goe3R5cGU6IFwicHNldWRvXCIsIG5hbWU6IG5hbWUsIGRhdGE6IGRhdGF9KTtcblx0XHRcdH0gZWxzZSBpZihyZV9uYW1lLnRlc3Qoc2VsZWN0b3IpKXtcblx0XHRcdFx0bmFtZSA9IGdldE5hbWUoKTtcblxuXHRcdFx0XHRpZighb3B0aW9ucyB8fCAoXCJsb3dlckNhc2VUYWdzXCIgaW4gb3B0aW9ucyA/IG9wdGlvbnMubG93ZXJDYXNlVGFncyA6ICFvcHRpb25zLnhtbE1vZGUpKXtcblx0XHRcdFx0XHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9rZW5zLnB1c2goe3R5cGU6IFwidGFnXCIsIG5hbWU6IG5hbWV9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS50eXBlID09PSBcImRlc2NlbmRhbnRcIil7XG5cdFx0XHRcdFx0dG9rZW5zLnBvcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFkZFRva2VuKHN1YnNlbGVjdHMsIHRva2Vucyk7XG5cdFx0XHRcdHJldHVybiBzZWxlY3Rvcjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhZGRUb2tlbihzdWJzZWxlY3RzLCB0b2tlbnMpO1xuXG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkVG9rZW4oc3Vic2VsZWN0cywgdG9rZW5zKXtcblx0aWYoc3Vic2VsZWN0cy5sZW5ndGggPiAwICYmIHRva2Vucy5sZW5ndGggPT09IDApe1xuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcImVtcHR5IHN1Yi1zZWxlY3RvclwiKTtcblx0fVxuXG5cdHN1YnNlbGVjdHMucHVzaCh0b2tlbnMpO1xufVxuXG5cbi8qKiovIH0pLFxuLyogNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxubW9kdWxlLmV4cG9ydHMgPSBzb3J0QnlQcm9jZWR1cmU7XG5cbi8qXG5cdHNvcnQgdGhlIHBhcnRzIG9mIHRoZSBwYXNzZWQgc2VsZWN0b3IsXG5cdGFzIHRoZXJlIGlzIHBvdGVudGlhbCBmb3Igb3B0aW1pemF0aW9uXG5cdChzb21lIHR5cGVzIG9mIHNlbGVjdG9ycyBhcmUgZmFzdGVyIHRoYW4gb3RoZXJzKVxuKi9cblxudmFyIHByb2NlZHVyZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXG52YXIgYXR0cmlidXRlcyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRleGlzdHM6IDEwLFxuXHRlcXVhbHM6IDgsXG5cdG5vdDogNyxcblx0c3RhcnQ6IDYsXG5cdGVuZDogNixcblx0YW55OiA1LFxuXHRoeXBoZW46IDQsXG5cdGVsZW1lbnQ6IDRcbn07XG5cbmZ1bmN0aW9uIHNvcnRCeVByb2NlZHVyZShhcnIpe1xuXHR2YXIgcHJvY3MgPSBhcnIubWFwKGdldFByb2NlZHVyZSk7XG5cdGZvcih2YXIgaSA9IDE7IGkgPCBhcnIubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBwcm9jTmV3ID0gcHJvY3NbaV07XG5cblx0XHRpZihwcm9jTmV3IDwgMCkgY29udGludWU7XG5cblx0XHRmb3IodmFyIGogPSBpIC0gMTsgaiA+PSAwICYmIHByb2NOZXcgPCBwcm9jc1tqXTsgai0tKXtcblx0XHRcdHZhciB0b2tlbiA9IGFycltqICsgMV07XG5cdFx0XHRhcnJbaiArIDFdID0gYXJyW2pdO1xuXHRcdFx0YXJyW2pdID0gdG9rZW47XG5cdFx0XHRwcm9jc1tqICsgMV0gPSBwcm9jc1tqXTtcblx0XHRcdHByb2NzW2pdID0gcHJvY05ldztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0UHJvY2VkdXJlKHRva2VuKXtcblx0dmFyIHByb2MgPSBwcm9jZWR1cmVbdG9rZW4udHlwZV07XG5cblx0aWYocHJvYyA9PT0gcHJvY2VkdXJlLmF0dHJpYnV0ZSl7XG5cdFx0cHJvYyA9IGF0dHJpYnV0ZXNbdG9rZW4uYWN0aW9uXTtcblxuXHRcdGlmKHByb2MgPT09IGF0dHJpYnV0ZXMuZXF1YWxzICYmIHRva2VuLm5hbWUgPT09IFwiaWRcIil7XG5cdFx0XHQvL3ByZWZlciBJRCBzZWxlY3RvcnMgKGVnLiAjSUQpXG5cdFx0XHRwcm9jID0gOTtcblx0XHR9XG5cblx0XHRpZih0b2tlbi5pZ25vcmVDYXNlKXtcblx0XHRcdC8vaWdub3JlQ2FzZSBhZGRzIHNvbWUgb3ZlcmhlYWQsIHByZWZlciBcIm5vcm1hbFwiIHRva2VuXG5cdFx0XHQvL3RoaXMgaXMgYSBiaW5hcnkgb3BlcmF0aW9uLCB0byBlbnN1cmUgaXQncyBzdGlsbCBhbiBpbnRcblx0XHRcdHByb2MgPj49IDE7XG5cdFx0fVxuXHR9IGVsc2UgaWYocHJvYyA9PT0gcHJvY2VkdXJlLnBzZXVkbyl7XG5cdFx0aWYoIXRva2VuLmRhdGEpe1xuXHRcdFx0cHJvYyA9IDM7XG5cdFx0fSBlbHNlIGlmKHRva2VuLm5hbWUgPT09IFwiaGFzXCIgfHwgdG9rZW4ubmFtZSA9PT0gXCJjb250YWluc1wiKXtcblx0XHRcdHByb2MgPSAwOyAvL2V4cGVuc2l2ZSBpbiBhbnkgY2FzZVxuXHRcdH0gZWxzZSBpZih0b2tlbi5uYW1lID09PSBcIm1hdGNoZXNcIiB8fCB0b2tlbi5uYW1lID09PSBcIm5vdFwiKXtcblx0XHRcdHByb2MgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRva2VuLmRhdGEubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHQvL1RPRE8gYmV0dGVyIGhhbmRsaW5nIG9mIGNvbXBsZXggc2VsZWN0b3JzXG5cdFx0XHRcdGlmKHRva2VuLmRhdGFbaV0ubGVuZ3RoICE9PSAxKSBjb250aW51ZTtcblx0XHRcdFx0dmFyIGN1ciA9IGdldFByb2NlZHVyZSh0b2tlbi5kYXRhW2ldWzBdKTtcblx0XHRcdFx0Ly9hdm9pZCBleGVjdXRpbmcgOmhhcyBvciA6Y29udGFpbnNcblx0XHRcdFx0aWYoY3VyID09PSAwKXtcblx0XHRcdFx0XHRwcm9jID0gMDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihjdXIgPiBwcm9jKSBwcm9jID0gY3VyO1xuXHRcdFx0fVxuXHRcdFx0aWYodG9rZW4uZGF0YS5sZW5ndGggPiAxICYmIHByb2MgPiAwKSBwcm9jIC09IDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb2MgPSAxO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJvYztcbn1cblxuXG4vKioqLyB9KSxcbi8qIDQzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBTZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcbnZhciBhdHRyaWJ1dGVGYWN0b3J5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG5cbmZ1bmN0aW9uIGdlbmVyYWxGYWN0b3J5KGFkYXB0ZXIsIFBzZXVkb3Mpe1xuXHQvKlxuXHRcdGFsbCBhdmFpbGFibGUgcnVsZXNcblx0Ki9cblx0cmV0dXJuIHtcblx0XHRfX3Byb3RvX186IG51bGwsXG5cblx0XHRhdHRyaWJ1dGU6IGF0dHJpYnV0ZUZhY3RvcnkoYWRhcHRlcikuY29tcGlsZSxcblx0XHRwc2V1ZG86IFBzZXVkb3MuY29tcGlsZSxcblxuXHRcdC8vdGFnc1xuXHRcdHRhZzogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSA9IGRhdGEubmFtZTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiB0YWcoZWxlbSl7XG5cdFx0XHRcdHJldHVybiBhZGFwdGVyLmdldE5hbWUoZWxlbSkgPT09IG5hbWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdC8vdHJhdmVyc2FsXG5cdFx0ZGVzY2VuZGFudDogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHR2YXIgaXNGYWxzZUNhY2hlID0gbmV3IFNldCgpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZGVzY2VuZGFudChlbGVtKXtcblx0XHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XG5cblx0XHRcdFx0d2hpbGUoIWZvdW5kICYmIChlbGVtID0gYWRhcHRlci5nZXRQYXJlbnQoZWxlbSkpKXtcblx0XHRcdFx0XHRpZighaXNGYWxzZUNhY2hlLmhhcyhlbGVtKSl7XG5cdFx0XHRcdFx0XHRmb3VuZCA9IG5leHQoZWxlbSk7XG5cdFx0XHRcdFx0XHRpZighZm91bmQpe1xuXHRcdFx0XHRcdFx0XHRpc0ZhbHNlQ2FjaGUuYWRkKGVsZW0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmb3VuZDtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRfZmxleGlibGVEZXNjZW5kYW50OiBmdW5jdGlvbihuZXh0KXtcblx0XHRcdC8vIEluY2x1ZGUgZWxlbWVudCBpdHNlbGYsIG9ubHkgdXNlZCB3aGlsZSBxdWVyeWluZyBhbiBhcnJheVxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGRlc2NlbmRhbnQoZWxlbSl7XG5cblx0XHRcdFx0dmFyIGZvdW5kID0gbmV4dChlbGVtKTtcblxuXHRcdFx0XHR3aGlsZSghZm91bmQgJiYgKGVsZW0gPSBhZGFwdGVyLmdldFBhcmVudChlbGVtKSkpe1xuXHRcdFx0XHRcdGZvdW5kID0gbmV4dChlbGVtKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmb3VuZDtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRwYXJlbnQ6IGZ1bmN0aW9uKG5leHQsIGRhdGEsIG9wdGlvbnMpe1xuXHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLnN0cmljdCkgdGhyb3cgbmV3IEVycm9yKFwiUGFyZW50IHNlbGVjdG9yIGlzbid0IHBhcnQgb2YgQ1NTM1wiKTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIHBhcmVudChlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuZ2V0Q2hpbGRyZW4oZWxlbSkuc29tZSh0ZXN0KTtcblx0XHRcdH07XG5cblx0XHRcdGZ1bmN0aW9uIHRlc3QoZWxlbSl7XG5cdFx0XHRcdHJldHVybiBhZGFwdGVyLmlzVGFnKGVsZW0pICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRjaGlsZDogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gY2hpbGQoZWxlbSl7XG5cdFx0XHRcdHZhciBwYXJlbnQgPSBhZGFwdGVyLmdldFBhcmVudChlbGVtKTtcblx0XHRcdFx0cmV0dXJuICEhcGFyZW50ICYmIG5leHQocGFyZW50KTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRzaWJsaW5nOiBmdW5jdGlvbihuZXh0KXtcblx0XHRcdHJldHVybiBmdW5jdGlvbiBzaWJsaW5nKGVsZW0pe1xuXHRcdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIGJyZWFrO1xuXHRcdFx0XHRcdFx0aWYobmV4dChzaWJsaW5nc1tpXSkpIHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhZGphY2VudDogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gYWRqYWNlbnQoZWxlbSl7XG5cdFx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSksXG5cdFx0XHRcdFx0bGFzdEVsZW1lbnQ7XG5cblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudCA9IHNpYmxpbmdzW2ldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAhIWxhc3RFbGVtZW50ICYmIG5leHQobGFzdEVsZW1lbnQpO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdHVuaXZlcnNhbDogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHRyZXR1cm4gbmV4dDtcblx0XHR9XG5cdH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhbEZhY3Rvcnk7XG5cblxuLyoqKi8gfSksXG4vKiA0NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpKCkgPyBTZXQgOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcblxuXG4vKioqLyB9KSxcbi8qIDQ1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgc2V0LCBpdGVyYXRvciwgcmVzdWx0O1xuXHRpZiAodHlwZW9mIFNldCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRzZXQgPSBuZXcgU2V0KFsncmF6JywgJ2R3YScsICd0cnp5J10pO1xuXHRpZiAoU3RyaW5nKHNldCkgIT09ICdbb2JqZWN0IFNldF0nKSByZXR1cm4gZmFsc2U7XG5cdGlmIChzZXQuc2l6ZSAhPT0gMykgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHNldC5hZGQgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQuY2xlYXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQuZGVsZXRlICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2Ygc2V0LmVudHJpZXMgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHNldC5oYXMgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQua2V5cyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHNldC52YWx1ZXMgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblxuXHRpdGVyYXRvciA9IHNldC52YWx1ZXMoKTtcblx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuXHRpZiAocmVzdWx0LmRvbmUgIT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cdGlmIChyZXN1bHQudmFsdWUgIT09ICdyYXonKSByZXR1cm4gZmFsc2U7XG5cblx0cmV0dXJuIHRydWU7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGNsZWFyICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNilcbiAgLCBlSW5kZXhPZiAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpXG4gICwgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpXG4gICwgY2FsbGFibGUgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgZCAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG4gICwgZWUgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KVxuICAsIFN5bWJvbCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKVxuICAsIGl0ZXJhdG9yICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMilcbiAgLCBmb3JPZiAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpXG4gICwgSXRlcmF0b3IgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0KVxuICAsIGlzTmF0aXZlICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NSlcblxuICAsIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbFxuICAsIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LCBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZlxuICAsIFNldFBvbHksIGdldFZhbHVlcywgTmF0aXZlU2V0O1xuXG5pZiAoaXNOYXRpdmUpIE5hdGl2ZVNldCA9IFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRQb2x5ID0gZnVuY3Rpb24gU2V0KC8qaXRlcmFibGUqLykge1xuXHR2YXIgaXRlcmFibGUgPSBhcmd1bWVudHNbMF0sIHNlbGY7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBTZXRQb2x5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29uc3RydWN0b3IgcmVxdWlyZXMgXFwnbmV3XFwnJyk7XG5cdGlmIChpc05hdGl2ZSAmJiBzZXRQcm90b3R5cGVPZikgc2VsZiA9IHNldFByb3RvdHlwZU9mKG5ldyBOYXRpdmVTZXQoKSwgZ2V0UHJvdG90eXBlT2YodGhpcykpO1xuXHRlbHNlIHNlbGYgPSB0aGlzO1xuXHRpZiAoaXRlcmFibGUgIT0gbnVsbCkgaXRlcmF0b3IoaXRlcmFibGUpO1xuXHRkZWZpbmVQcm9wZXJ0eShzZWxmLCAnX19zZXREYXRhX18nLCBkKCdjJywgW10pKTtcblx0aWYgKCFpdGVyYWJsZSkgcmV0dXJuIHNlbGY7XG5cdGZvck9mKGl0ZXJhYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRpZiAoZUluZGV4T2YuY2FsbCh0aGlzLCB2YWx1ZSkgIT09IC0xKSByZXR1cm47XG5cdFx0dGhpcy5wdXNoKHZhbHVlKTtcblx0fSwgc2VsZi5fX3NldERhdGFfXyk7XG5cdHJldHVybiBzZWxmO1xufTtcblxuaWYgKGlzTmF0aXZlKSB7XG5cdGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoU2V0UG9seSwgTmF0aXZlU2V0KTtcblx0U2V0UG9seS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE5hdGl2ZVNldC5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IGQoU2V0UG9seSkgfSk7XG59XG5cbmVlKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNldFBvbHkucHJvdG90eXBlLCB7XG5cdGFkZDogZChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRpZiAodGhpcy5oYXModmFsdWUpKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLmVtaXQoJ19hZGQnLCB0aGlzLl9fc2V0RGF0YV9fLnB1c2godmFsdWUpIC0gMSwgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9KSxcblx0Y2xlYXI6IGQoZnVuY3Rpb24gKCkge1xuXHRcdGlmICghdGhpcy5fX3NldERhdGFfXy5sZW5ndGgpIHJldHVybjtcblx0XHRjbGVhci5jYWxsKHRoaXMuX19zZXREYXRhX18pO1xuXHRcdHRoaXMuZW1pdCgnX2NsZWFyJyk7XG5cdH0pLFxuXHRkZWxldGU6IGQoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0dmFyIGluZGV4ID0gZUluZGV4T2YuY2FsbCh0aGlzLl9fc2V0RGF0YV9fLCB2YWx1ZSk7XG5cdFx0aWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHRoaXMuX19zZXREYXRhX18uc3BsaWNlKGluZGV4LCAxKTtcblx0XHR0aGlzLmVtaXQoJ19kZWxldGUnLCBpbmRleCwgdmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9KSxcblx0ZW50cmllczogZChmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3IodGhpcywgJ2tleSt2YWx1ZScpOyB9KSxcblx0Zm9yRWFjaDogZChmdW5jdGlvbiAoY2IvKiwgdGhpc0FyZyovKSB7XG5cdFx0dmFyIHRoaXNBcmcgPSBhcmd1bWVudHNbMV0sIGl0ZXJhdG9yLCByZXN1bHQsIHZhbHVlO1xuXHRcdGNhbGxhYmxlKGNiKTtcblx0XHRpdGVyYXRvciA9IHRoaXMudmFsdWVzKCk7XG5cdFx0cmVzdWx0ID0gaXRlcmF0b3IuX25leHQoKTtcblx0XHR3aGlsZSAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0gaXRlcmF0b3IuX3Jlc29sdmUocmVzdWx0KTtcblx0XHRcdGNhbGwuY2FsbChjYiwgdGhpc0FyZywgdmFsdWUsIHZhbHVlLCB0aGlzKTtcblx0XHRcdHJlc3VsdCA9IGl0ZXJhdG9yLl9uZXh0KCk7XG5cdFx0fVxuXHR9KSxcblx0aGFzOiBkKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdHJldHVybiAoZUluZGV4T2YuY2FsbCh0aGlzLl9fc2V0RGF0YV9fLCB2YWx1ZSkgIT09IC0xKTtcblx0fSksXG5cdGtleXM6IGQoZ2V0VmFsdWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy52YWx1ZXMoKTsgfSksXG5cdHNpemU6IGQuZ3MoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fX3NldERhdGFfXy5sZW5ndGg7IH0pLFxuXHR2YWx1ZXM6IGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yKHRoaXMpOyB9KSxcblx0dG9TdHJpbmc6IGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gJ1tvYmplY3QgU2V0XSc7IH0pXG59KSk7XG5kZWZpbmVQcm9wZXJ0eShTZXRQb2x5LnByb3RvdHlwZSwgU3ltYm9sLml0ZXJhdG9yLCBkKGdldFZhbHVlcykpO1xuZGVmaW5lUHJvcGVydHkoU2V0UG9seS5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZCgnYycsICdTZXQnKSk7XG5cblxuLyoqKi8gfSksXG4vKiA0NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgbnVtYmVySXNOYU4gICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KVxuICAsIHRvUG9zSW50ICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOClcbiAgLCB2YWx1ZSAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMClcbiAgLCBpbmRleE9mICAgICAgICAgICA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mXG4gICwgb2JqSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgYWJzICAgICAgICAgICAgICAgPSBNYXRoLmFic1xuICAsIGZsb29yICAgICAgICAgICAgID0gTWF0aC5mbG9vcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2VhcmNoRWxlbWVudCAvKiwgZnJvbUluZGV4Ki8pIHtcblx0dmFyIGksIGxlbmd0aCwgZnJvbUluZGV4LCB2YWw7XG5cdGlmICghbnVtYmVySXNOYU4oc2VhcmNoRWxlbWVudCkpIHJldHVybiBpbmRleE9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cblx0bGVuZ3RoID0gdG9Qb3NJbnQodmFsdWUodGhpcykubGVuZ3RoKTtcblx0ZnJvbUluZGV4ID0gYXJndW1lbnRzWzFdO1xuXHRpZiAoaXNOYU4oZnJvbUluZGV4KSkgZnJvbUluZGV4ID0gMDtcblx0ZWxzZSBpZiAoZnJvbUluZGV4ID49IDApIGZyb21JbmRleCA9IGZsb29yKGZyb21JbmRleCk7XG5cdGVsc2UgZnJvbUluZGV4ID0gdG9Qb3NJbnQodGhpcy5sZW5ndGgpIC0gZmxvb3IoYWJzKGZyb21JbmRleCkpO1xuXG5cdGZvciAoaSA9IGZyb21JbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0aWYgKG9iakhhc093blByb3BlcnR5LmNhbGwodGhpcywgaSkpIHtcblx0XHRcdHZhbCA9IHRoaXNbaV07XG5cdFx0XHRpZiAobnVtYmVySXNOYU4odmFsKSkgcmV0dXJuIGk7IC8vIEpzbGludDogaWdub3JlXG5cdFx0fVxuXHR9XG5cdHJldHVybiAtMTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA0OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpKClcblx0PyBOdW1iZXIuaXNOYU5cblx0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcblxuXG4vKioqLyB9KSxcbi8qIDQ5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgbnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU47XG5cdGlmICh0eXBlb2YgbnVtYmVySXNOYU4gIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gIW51bWJlcklzTmFOKHt9KSAmJiBudW1iZXJJc05hTihOYU4pICYmICFudW1iZXJJc05hTigzNCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuXHRyZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDUxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MilcblxuICAsIGFicyA9IE1hdGguYWJzLCBmbG9vciA9IE1hdGguZmxvb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdGlmIChpc05hTih2YWx1ZSkpIHJldHVybiAwO1xuXHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdGlmICgodmFsdWUgPT09IDApIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcblx0cmV0dXJuIHNpZ24odmFsdWUpICogZmxvb3IoYWJzKHZhbHVlKSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKSgpXG5cdD8gTWF0aC5zaWduXG5cdDogX193ZWJwYWNrX3JlcXVpcmVfXyg1NCk7XG5cblxuLyoqKi8gfSksXG4vKiA1MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHNpZ24gPSBNYXRoLnNpZ247XG5cdGlmICh0eXBlb2Ygc2lnbiAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAoc2lnbigxMCkgPT09IDEpICYmIChzaWduKC0yMCkgPT09IC0xKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdGlmIChpc05hTih2YWx1ZSkgfHwgKHZhbHVlID09PSAwKSkgcmV0dXJuIHZhbHVlO1xuXHRyZXR1cm4gdmFsdWUgPiAwID8gMSA6IC0xO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDU1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpc1ZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxudmFyIG1hcCA9IHsgZnVuY3Rpb246IHRydWUsIG9iamVjdDogdHJ1ZSB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gKGlzVmFsdWUodmFsdWUpICYmIG1hcFt0eXBlb2YgdmFsdWVdKSB8fCBmYWxzZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIFdvcmthcm91bmQgZm9yIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTI4MDRcblxuXG5cbnZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlLCBzaGltO1xuXG5pZiAoIV9fd2VicGFja19yZXF1aXJlX18oMTkpKCkpIHtcblx0c2hpbSA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciBudWxsT2JqZWN0LCBwb2x5UHJvcHMsIGRlc2M7XG5cdGlmICghc2hpbSkgcmV0dXJuIGNyZWF0ZTtcblx0aWYgKHNoaW0ubGV2ZWwgIT09IDEpIHJldHVybiBjcmVhdGU7XG5cblx0bnVsbE9iamVjdCA9IHt9O1xuXHRwb2x5UHJvcHMgPSB7fTtcblx0ZGVzYyA9IHtcblx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdHZhbHVlOiB1bmRlZmluZWRcblx0fTtcblx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuXHRcdGlmIChuYW1lID09PSBcIl9fcHJvdG9fX1wiKSB7XG5cdFx0XHRwb2x5UHJvcHNbbmFtZV0gPSB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwb2x5UHJvcHNbbmFtZV0gPSBkZXNjO1xuXHR9KTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobnVsbE9iamVjdCwgcG9seVByb3BzKTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc2hpbSwgXCJudWxsUG9seWZpbGxcIiwge1xuXHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0d3JpdGFibGU6IGZhbHNlLFxuXHRcdHZhbHVlOiBudWxsT2JqZWN0XG5cdH0pO1xuXG5cdHJldHVybiBmdW5jdGlvbiAocHJvdG90eXBlLCBwcm9wcykge1xuXHRcdHJldHVybiBjcmVhdGUocHJvdG90eXBlID09PSBudWxsID8gbnVsbE9iamVjdCA6IHByb3RvdHlwZSwgcHJvcHMpO1xuXHR9O1xufSgpKTtcblxuXG4vKioqLyB9KSxcbi8qIDU3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbiwgb2JqO1xuXHRpZiAodHlwZW9mIGFzc2lnbiAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cdG9iaiA9IHsgZm9vOiBcInJhelwiIH07XG5cdGFzc2lnbihvYmosIHsgYmFyOiBcImR3YVwiIH0sIHsgdHJ6eTogXCJ0cnp5XCIgfSk7XG5cdHJldHVybiAob2JqLmZvbyArIG9iai5iYXIgKyBvYmoudHJ6eSkgPT09IFwicmF6ZHdhdHJ6eVwiO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDU4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBrZXlzICA9IF9fd2VicGFja19yZXF1aXJlX18oNTkpXG4gICwgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApXG4gICwgbWF4ICAgPSBNYXRoLm1heDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGVzdCwgc3JjIC8qLCDigKZzcmNuKi8pIHtcblx0dmFyIGVycm9yLCBpLCBsZW5ndGggPSBtYXgoYXJndW1lbnRzLmxlbmd0aCwgMiksIGFzc2lnbjtcblx0ZGVzdCA9IE9iamVjdCh2YWx1ZShkZXN0KSk7XG5cdGFzc2lnbiA9IGZ1bmN0aW9uIChrZXkpIHtcblx0XHR0cnkge1xuXHRcdFx0ZGVzdFtrZXldID0gc3JjW2tleV07XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlO1xuXHRcdH1cblx0fTtcblx0Zm9yIChpID0gMTsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0c3JjID0gYXJndW1lbnRzW2ldO1xuXHRcdGtleXMoc3JjKS5mb3JFYWNoKGFzc2lnbik7XG5cdH1cblx0aWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHRocm93IGVycm9yO1xuXHRyZXR1cm4gZGVzdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNjApKClcblx0PyBPYmplY3Qua2V5c1xuXHQ6IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xuXG5cbi8qKiovIH0pLFxuLyogNjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHRyeSB7XG5cdFx0T2JqZWN0LmtleXMoXCJwcmltaXRpdmVcIik7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcbiByZXR1cm4gZmFsc2U7XG59XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzVmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG52YXIga2V5cyA9IE9iamVjdC5rZXlzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcblx0cmV0dXJuIGtleXMoaXNWYWx1ZShvYmplY3QpID8gT2JqZWN0KG9iamVjdCkgOiBvYmplY3QpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDYyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRGVwcmVjYXRlZFxuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gcmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIjtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA2MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgc3RyID0gXCJyYXpkd2F0cnp5XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHRpZiAodHlwZW9mIHN0ci5jb250YWlucyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAoc3RyLmNvbnRhaW5zKFwiZHdhXCIpID09PSB0cnVlKSAmJiAoc3RyLmNvbnRhaW5zKFwiZm9vXCIpID09PSBmYWxzZSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGluZGV4T2YgPSBTdHJpbmcucHJvdG90eXBlLmluZGV4T2Y7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNlYXJjaFN0cmluZy8qLCBwb3NpdGlvbiovKSB7XG5cdHJldHVybiBpbmRleE9mLmNhbGwodGhpcywgc2VhcmNoU3RyaW5nLCBhcmd1bWVudHNbMV0pID4gLTE7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGQgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuICAsIGNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuXG4gICwgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHksIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbFxuICAsIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gICwgZGVmaW5lUHJvcGVydGllcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzXG4gICwgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgZGVzY3JpcHRvciA9IHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUgfVxuXG4gICwgb24sIG9uY2UsIG9mZiwgZW1pdCwgbWV0aG9kcywgZGVzY3JpcHRvcnMsIGJhc2U7XG5cbm9uID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyKSB7XG5cdHZhciBkYXRhO1xuXG5cdGNhbGxhYmxlKGxpc3RlbmVyKTtcblxuXHRpZiAoIWhhc093blByb3BlcnR5LmNhbGwodGhpcywgJ19fZWVfXycpKSB7XG5cdFx0ZGF0YSA9IGRlc2NyaXB0b3IudmFsdWUgPSBjcmVhdGUobnVsbCk7XG5cdFx0ZGVmaW5lUHJvcGVydHkodGhpcywgJ19fZWVfXycsIGRlc2NyaXB0b3IpO1xuXHRcdGRlc2NyaXB0b3IudmFsdWUgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdGRhdGEgPSB0aGlzLl9fZWVfXztcblx0fVxuXHRpZiAoIWRhdGFbdHlwZV0pIGRhdGFbdHlwZV0gPSBsaXN0ZW5lcjtcblx0ZWxzZSBpZiAodHlwZW9mIGRhdGFbdHlwZV0gPT09ICdvYmplY3QnKSBkYXRhW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuXHRlbHNlIGRhdGFbdHlwZV0gPSBbZGF0YVt0eXBlXSwgbGlzdGVuZXJdO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxub25jZSA9IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xuXHR2YXIgb25jZSwgc2VsZjtcblxuXHRjYWxsYWJsZShsaXN0ZW5lcik7XG5cdHNlbGYgPSB0aGlzO1xuXHRvbi5jYWxsKHRoaXMsIHR5cGUsIG9uY2UgPSBmdW5jdGlvbiAoKSB7XG5cdFx0b2ZmLmNhbGwoc2VsZiwgdHlwZSwgb25jZSk7XG5cdFx0YXBwbHkuY2FsbChsaXN0ZW5lciwgdGhpcywgYXJndW1lbnRzKTtcblx0fSk7XG5cblx0b25jZS5fX2VlT25jZUxpc3RlbmVyX18gPSBsaXN0ZW5lcjtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5vZmYgPSBmdW5jdGlvbiAodHlwZSwgbGlzdGVuZXIpIHtcblx0dmFyIGRhdGEsIGxpc3RlbmVycywgY2FuZGlkYXRlLCBpO1xuXG5cdGNhbGxhYmxlKGxpc3RlbmVyKTtcblxuXHRpZiAoIWhhc093blByb3BlcnR5LmNhbGwodGhpcywgJ19fZWVfXycpKSByZXR1cm4gdGhpcztcblx0ZGF0YSA9IHRoaXMuX19lZV9fO1xuXHRpZiAoIWRhdGFbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRsaXN0ZW5lcnMgPSBkYXRhW3R5cGVdO1xuXG5cdGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnb2JqZWN0Jykge1xuXHRcdGZvciAoaSA9IDA7IChjYW5kaWRhdGUgPSBsaXN0ZW5lcnNbaV0pOyArK2kpIHtcblx0XHRcdGlmICgoY2FuZGlkYXRlID09PSBsaXN0ZW5lcikgfHxcblx0XHRcdFx0XHQoY2FuZGlkYXRlLl9fZWVPbmNlTGlzdGVuZXJfXyA9PT0gbGlzdGVuZXIpKSB7XG5cdFx0XHRcdGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAyKSBkYXRhW3R5cGVdID0gbGlzdGVuZXJzW2kgPyAwIDogMV07XG5cdFx0XHRcdGVsc2UgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKChsaXN0ZW5lcnMgPT09IGxpc3RlbmVyKSB8fFxuXHRcdFx0XHQobGlzdGVuZXJzLl9fZWVPbmNlTGlzdGVuZXJfXyA9PT0gbGlzdGVuZXIpKSB7XG5cdFx0XHRkZWxldGUgZGF0YVt0eXBlXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmVtaXQgPSBmdW5jdGlvbiAodHlwZSkge1xuXHR2YXIgaSwgbCwgbGlzdGVuZXIsIGxpc3RlbmVycywgYXJncztcblxuXHRpZiAoIWhhc093blByb3BlcnR5LmNhbGwodGhpcywgJ19fZWVfXycpKSByZXR1cm47XG5cdGxpc3RlbmVycyA9IHRoaXMuX19lZV9fW3R5cGVdO1xuXHRpZiAoIWxpc3RlbmVycykgcmV0dXJuO1xuXG5cdGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnb2JqZWN0Jykge1xuXHRcdGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdGFyZ3MgPSBuZXcgQXJyYXkobCAtIDEpO1xuXHRcdGZvciAoaSA9IDE7IGkgPCBsOyArK2kpIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuXG5cdFx0bGlzdGVuZXJzID0gbGlzdGVuZXJzLnNsaWNlKCk7XG5cdFx0Zm9yIChpID0gMDsgKGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldKTsgKytpKSB7XG5cdFx0XHRhcHBseS5jYWxsKGxpc3RlbmVyLCB0aGlzLCBhcmdzKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0Y2FzZSAxOlxuXHRcdFx0Y2FsbC5jYWxsKGxpc3RlbmVycywgdGhpcyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIDI6XG5cdFx0XHRjYWxsLmNhbGwobGlzdGVuZXJzLCB0aGlzLCBhcmd1bWVudHNbMV0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAzOlxuXHRcdFx0Y2FsbC5jYWxsKGxpc3RlbmVycywgdGhpcywgYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0YXJncyA9IG5ldyBBcnJheShsIC0gMSk7XG5cdFx0XHRmb3IgKGkgPSAxOyBpIDwgbDsgKytpKSB7XG5cdFx0XHRcdGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0fVxuXHRcdFx0YXBwbHkuY2FsbChsaXN0ZW5lcnMsIHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fVxufTtcblxubWV0aG9kcyA9IHtcblx0b246IG9uLFxuXHRvbmNlOiBvbmNlLFxuXHRvZmY6IG9mZixcblx0ZW1pdDogZW1pdFxufTtcblxuZGVzY3JpcHRvcnMgPSB7XG5cdG9uOiBkKG9uKSxcblx0b25jZTogZChvbmNlKSxcblx0b2ZmOiBkKG9mZiksXG5cdGVtaXQ6IGQoZW1pdClcbn07XG5cbmJhc2UgPSBkZWZpbmVQcm9wZXJ0aWVzKHt9LCBkZXNjcmlwdG9ycyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZ1bmN0aW9uIChvKSB7XG5cdHJldHVybiAobyA9PSBudWxsKSA/IGNyZWF0ZShiYXNlKSA6IGRlZmluZVByb3BlcnRpZXMoT2JqZWN0KG8pLCBkZXNjcmlwdG9ycyk7XG59O1xuZXhwb3J0cy5tZXRob2RzID0gbWV0aG9kcztcblxuXG4vKioqLyB9KSxcbi8qIDY2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciB2YWxpZFR5cGVzID0geyBvYmplY3Q6IHRydWUsIHN5bWJvbDogdHJ1ZSB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHN5bWJvbDtcblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0c3ltYm9sID0gU3ltYm9sKCd0ZXN0IHN5bWJvbCcpO1xuXHR0cnkgeyBTdHJpbmcoc3ltYm9sKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBSZXR1cm4gJ3RydWUnIGFsc28gZm9yIHBvbHlmaWxsc1xuXHRpZiAoIXZhbGlkVHlwZXNbdHlwZW9mIFN5bWJvbC5pdGVyYXRvcl0pIHJldHVybiBmYWxzZTtcblx0aWYgKCF2YWxpZFR5cGVzW3R5cGVvZiBTeW1ib2wudG9QcmltaXRpdmVdKSByZXR1cm4gZmFsc2U7XG5cdGlmICghdmFsaWRUeXBlc1t0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnXSkgcmV0dXJuIGZhbHNlO1xuXG5cdHJldHVybiB0cnVlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDY3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVMyMDE1IFN5bWJvbCBwb2x5ZmlsbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IChvciBwYXJ0aWFsbHkpIHN1cHBvcnQgaXRcblxuXG5cbnZhciBkICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMylcbiAgLCB2YWxpZGF0ZVN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpXG5cbiAgLCBjcmVhdGUgPSBPYmplY3QuY3JlYXRlLCBkZWZpbmVQcm9wZXJ0aWVzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXNcbiAgLCBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgb2JqUHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZVxuICAsIE5hdGl2ZVN5bWJvbCwgU3ltYm9sUG9seWZpbGwsIEhpZGRlblN5bWJvbCwgZ2xvYmFsU3ltYm9scyA9IGNyZWF0ZShudWxsKVxuICAsIGlzTmF0aXZlU2FmZTtcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicpIHtcblx0TmF0aXZlU3ltYm9sID0gU3ltYm9sO1xuXHR0cnkge1xuXHRcdFN0cmluZyhOYXRpdmVTeW1ib2woKSk7XG5cdFx0aXNOYXRpdmVTYWZlID0gdHJ1ZTtcblx0fSBjYXRjaCAoaWdub3JlKSB7fVxufVxuXG52YXIgZ2VuZXJhdGVOYW1lID0gKGZ1bmN0aW9uICgpIHtcblx0dmFyIGNyZWF0ZWQgPSBjcmVhdGUobnVsbCk7XG5cdHJldHVybiBmdW5jdGlvbiAoZGVzYykge1xuXHRcdHZhciBwb3N0Zml4ID0gMCwgbmFtZSwgaWUxMUJ1Z1dvcmthcm91bmQ7XG5cdFx0d2hpbGUgKGNyZWF0ZWRbZGVzYyArIChwb3N0Zml4IHx8ICcnKV0pICsrcG9zdGZpeDtcblx0XHRkZXNjICs9IChwb3N0Zml4IHx8ICcnKTtcblx0XHRjcmVhdGVkW2Rlc2NdID0gdHJ1ZTtcblx0XHRuYW1lID0gJ0BAJyArIGRlc2M7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqUHJvdG90eXBlLCBuYW1lLCBkLmdzKG51bGwsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Ly8gRm9yIElFMTEgaXNzdWUgc2VlOlxuXHRcdFx0Ly8gaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2tkZXRhaWwvdmlldy8xOTI4NTA4L1xuXHRcdFx0Ly8gICAgaWUxMS1icm9rZW4tZ2V0dGVycy1vbi1kb20tb2JqZWN0c1xuXHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL21lZGlrb28vZXM2LXN5bWJvbC9pc3N1ZXMvMTJcblx0XHRcdGlmIChpZTExQnVnV29ya2Fyb3VuZCkgcmV0dXJuO1xuXHRcdFx0aWUxMUJ1Z1dvcmthcm91bmQgPSB0cnVlO1xuXHRcdFx0ZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwgZCh2YWx1ZSkpO1xuXHRcdFx0aWUxMUJ1Z1dvcmthcm91bmQgPSBmYWxzZTtcblx0XHR9KSk7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH07XG59KCkpO1xuXG4vLyBJbnRlcm5hbCBjb25zdHJ1Y3RvciAobm90IG9uZSBleHBvc2VkKSBmb3IgY3JlYXRpbmcgU3ltYm9sIGluc3RhbmNlcy5cbi8vIFRoaXMgb25lIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgYHNvbWVTeW1ib2wgaW5zdGFuY2VvZiBTeW1ib2xgIGFsd2F5cyByZXR1cm4gZmFsc2VcbkhpZGRlblN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xuXHRpZiAodGhpcyBpbnN0YW5jZW9mIEhpZGRlblN5bWJvbCkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG5cdHJldHVybiBTeW1ib2xQb2x5ZmlsbChkZXNjcmlwdGlvbik7XG59O1xuXG4vLyBFeHBvc2VkIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyAocmV0dXJucyBpbnN0YW5jZXMgb2YgSGlkZGVuU3ltYm9sKVxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2xQb2x5ZmlsbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xuXHR2YXIgc3ltYm9sO1xuXHRpZiAodGhpcyBpbnN0YW5jZW9mIFN5bWJvbCkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG5cdGlmIChpc05hdGl2ZVNhZmUpIHJldHVybiBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pO1xuXHRzeW1ib2wgPSBjcmVhdGUoSGlkZGVuU3ltYm9sLnByb3RvdHlwZSk7XG5cdGRlc2NyaXB0aW9uID0gKGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyhkZXNjcmlwdGlvbikpO1xuXHRyZXR1cm4gZGVmaW5lUHJvcGVydGllcyhzeW1ib2wsIHtcblx0XHRfX2Rlc2NyaXB0aW9uX186IGQoJycsIGRlc2NyaXB0aW9uKSxcblx0XHRfX25hbWVfXzogZCgnJywgZ2VuZXJhdGVOYW1lKGRlc2NyaXB0aW9uKSlcblx0fSk7XG59O1xuZGVmaW5lUHJvcGVydGllcyhTeW1ib2xQb2x5ZmlsbCwge1xuXHRmb3I6IGQoZnVuY3Rpb24gKGtleSkge1xuXHRcdGlmIChnbG9iYWxTeW1ib2xzW2tleV0pIHJldHVybiBnbG9iYWxTeW1ib2xzW2tleV07XG5cdFx0cmV0dXJuIChnbG9iYWxTeW1ib2xzW2tleV0gPSBTeW1ib2xQb2x5ZmlsbChTdHJpbmcoa2V5KSkpO1xuXHR9KSxcblx0a2V5Rm9yOiBkKGZ1bmN0aW9uIChzKSB7XG5cdFx0dmFyIGtleTtcblx0XHR2YWxpZGF0ZVN5bWJvbChzKTtcblx0XHRmb3IgKGtleSBpbiBnbG9iYWxTeW1ib2xzKSBpZiAoZ2xvYmFsU3ltYm9sc1trZXldID09PSBzKSByZXR1cm4ga2V5O1xuXHR9KSxcblxuXHQvLyBUbyBlbnN1cmUgcHJvcGVyIGludGVyb3BlcmFiaWxpdHkgd2l0aCBvdGhlciBuYXRpdmUgZnVuY3Rpb25zIChlLmcuIEFycmF5LmZyb20pXG5cdC8vIGZhbGxiYWNrIHRvIGV2ZW50dWFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBnaXZlbiBzeW1ib2xcblx0aGFzSW5zdGFuY2U6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLmhhc0luc3RhbmNlKSB8fCBTeW1ib2xQb2x5ZmlsbCgnaGFzSW5zdGFuY2UnKSksXG5cdGlzQ29uY2F0U3ByZWFkYWJsZTogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlKSB8fFxuXHRcdFN5bWJvbFBvbHlmaWxsKCdpc0NvbmNhdFNwcmVhZGFibGUnKSksXG5cdGl0ZXJhdG9yOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5pdGVyYXRvcikgfHwgU3ltYm9sUG9seWZpbGwoJ2l0ZXJhdG9yJykpLFxuXHRtYXRjaDogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wubWF0Y2gpIHx8IFN5bWJvbFBvbHlmaWxsKCdtYXRjaCcpKSxcblx0cmVwbGFjZTogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wucmVwbGFjZSkgfHwgU3ltYm9sUG9seWZpbGwoJ3JlcGxhY2UnKSksXG5cdHNlYXJjaDogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wuc2VhcmNoKSB8fCBTeW1ib2xQb2x5ZmlsbCgnc2VhcmNoJykpLFxuXHRzcGVjaWVzOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5zcGVjaWVzKSB8fCBTeW1ib2xQb2x5ZmlsbCgnc3BlY2llcycpKSxcblx0c3BsaXQ6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnNwbGl0KSB8fCBTeW1ib2xQb2x5ZmlsbCgnc3BsaXQnKSksXG5cdHRvUHJpbWl0aXZlOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC50b1ByaW1pdGl2ZSkgfHwgU3ltYm9sUG9seWZpbGwoJ3RvUHJpbWl0aXZlJykpLFxuXHR0b1N0cmluZ1RhZzogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wudG9TdHJpbmdUYWcpIHx8IFN5bWJvbFBvbHlmaWxsKCd0b1N0cmluZ1RhZycpKSxcblx0dW5zY29wYWJsZXM6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnVuc2NvcGFibGVzKSB8fCBTeW1ib2xQb2x5ZmlsbCgndW5zY29wYWJsZXMnKSlcbn0pO1xuXG4vLyBJbnRlcm5hbCB0d2Vha3MgZm9yIHJlYWwgc3ltYm9sIHByb2R1Y2VyXG5kZWZpbmVQcm9wZXJ0aWVzKEhpZGRlblN5bWJvbC5wcm90b3R5cGUsIHtcblx0Y29uc3RydWN0b3I6IGQoU3ltYm9sUG9seWZpbGwpLFxuXHR0b1N0cmluZzogZCgnJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fX25hbWVfXzsgfSlcbn0pO1xuXG4vLyBQcm9wZXIgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBleHBvc2VkIG9uIFN5bWJvbC5wcm90b3R5cGVcbi8vIFRoZXkgd29uJ3QgYmUgYWNjZXNzaWJsZSBvbiBwcm9kdWNlZCBzeW1ib2wgaW5zdGFuY2VzIGFzIHRoZXkgZGVyaXZlIGZyb20gSGlkZGVuU3ltYm9sLnByb3RvdHlwZVxuZGVmaW5lUHJvcGVydGllcyhTeW1ib2xQb2x5ZmlsbC5wcm90b3R5cGUsIHtcblx0dG9TdHJpbmc6IGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gJ1N5bWJvbCAoJyArIHZhbGlkYXRlU3ltYm9sKHRoaXMpLl9fZGVzY3JpcHRpb25fXyArICcpJzsgfSksXG5cdHZhbHVlT2Y6IGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7IH0pXG59KTtcbmRlZmluZVByb3BlcnR5KFN5bWJvbFBvbHlmaWxsLnByb3RvdHlwZSwgU3ltYm9sUG9seWZpbGwudG9QcmltaXRpdmUsIGQoJycsIGZ1bmN0aW9uICgpIHtcblx0dmFyIHN5bWJvbCA9IHZhbGlkYXRlU3ltYm9sKHRoaXMpO1xuXHRpZiAodHlwZW9mIHN5bWJvbCA9PT0gJ3N5bWJvbCcpIHJldHVybiBzeW1ib2w7XG5cdHJldHVybiBzeW1ib2wudG9TdHJpbmcoKTtcbn0pKTtcbmRlZmluZVByb3BlcnR5KFN5bWJvbFBvbHlmaWxsLnByb3RvdHlwZSwgU3ltYm9sUG9seWZpbGwudG9TdHJpbmdUYWcsIGQoJ2MnLCAnU3ltYm9sJykpO1xuXG4vLyBQcm9wZXIgaW1wbGVtZW50YXRvbiBvZiB0b1ByaW1pdGl2ZSBhbmQgdG9TdHJpbmdUYWcgZm9yIHJldHVybmVkIHN5bWJvbCBpbnN0YW5jZXNcbmRlZmluZVByb3BlcnR5KEhpZGRlblN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnLFxuXHRkKCdjJywgU3ltYm9sUG9seWZpbGwucHJvdG90eXBlW1N5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnXSkpO1xuXG4vLyBOb3RlOiBJdCdzIGltcG9ydGFudCB0byBkZWZpbmUgYHRvUHJpbWl0aXZlYCBhcyBsYXN0IG9uZSwgYXMgc29tZSBpbXBsZW1lbnRhdGlvbnNcbi8vIGltcGxlbWVudCBgdG9QcmltaXRpdmVgIG5hdGl2ZWx5IHdpdGhvdXQgaW1wbGVtZW50aW5nIGB0b1N0cmluZ1RhZ2AgKG9yIG90aGVyIHNwZWNpZmllZCBzeW1ib2xzKVxuLy8gQW5kIHRoYXQgbWF5IGludm9rZSBlcnJvciBpbiBkZWZpbml0aW9uIGZsb3c6XG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpa29vL2VzNi1zeW1ib2wvaXNzdWVzLzEzI2lzc3VlY29tbWVudC0xNjQxNDYxNDlcbmRlZmluZVByb3BlcnR5KEhpZGRlblN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbFBvbHlmaWxsLnRvUHJpbWl0aXZlLFxuXHRkKCdjJywgU3ltYm9sUG9seWZpbGwucHJvdG90eXBlW1N5bWJvbFBvbHlmaWxsLnRvUHJpbWl0aXZlXSkpO1xuXG5cbi8qKiovIH0pLFxuLyogNjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdGlmICghaXNTeW1ib2wodmFsdWUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgXCIgaXMgbm90IGEgc3ltYm9sXCIpO1xuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoeCkge1xuXHRpZiAoIXgpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiB4ID09PSAnc3ltYm9sJykgcmV0dXJuIHRydWU7XG5cdGlmICgheC5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xuXHRpZiAoeC5jb25zdHJ1Y3Rvci5uYW1lICE9PSAnU3ltYm9sJykgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gKHhbeC5jb25zdHJ1Y3Rvci50b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNBcmd1bWVudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpXG4gICwgaXNWYWx1ZSAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpXG4gICwgaXNTdHJpbmcgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuXG52YXIgaXRlcmF0b3JTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLml0ZXJhdG9yXG4gICwgaXNBcnJheSAgICAgICAgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRpZiAoIWlzVmFsdWUodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmIChpc0FycmF5KHZhbHVlKSkgcmV0dXJuIHRydWU7XG5cdGlmIChpc1N0cmluZyh2YWx1ZSkpIHJldHVybiB0cnVlO1xuXHRpZiAoaXNBcmd1bWVudHModmFsdWUpKSByZXR1cm4gdHJ1ZTtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZVtpdGVyYXRvclN5bWJvbF0gPT09IFwiZnVuY3Rpb25cIjtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNBcmd1bWVudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpXG4gICwgY2FsbGFibGUgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgaXNTdHJpbmcgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpXG4gICwgZ2V0ICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5LCBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGNiIC8qLCB0aGlzQXJnKi8pIHtcblx0dmFyIG1vZGUsIHRoaXNBcmcgPSBhcmd1bWVudHNbMl0sIHJlc3VsdCwgZG9CcmVhaywgYnJva2VuLCBpLCBsZW5ndGgsIGNoYXIsIGNvZGU7XG5cdGlmIChpc0FycmF5KGl0ZXJhYmxlKSB8fCBpc0FyZ3VtZW50cyhpdGVyYWJsZSkpIG1vZGUgPSBcImFycmF5XCI7XG5cdGVsc2UgaWYgKGlzU3RyaW5nKGl0ZXJhYmxlKSkgbW9kZSA9IFwic3RyaW5nXCI7XG5cdGVsc2UgaXRlcmFibGUgPSBnZXQoaXRlcmFibGUpO1xuXG5cdGNhbGxhYmxlKGNiKTtcblx0ZG9CcmVhayA9IGZ1bmN0aW9uICgpIHtcblx0XHRicm9rZW4gPSB0cnVlO1xuXHR9O1xuXHRpZiAobW9kZSA9PT0gXCJhcnJheVwiKSB7XG5cdFx0c29tZS5jYWxsKGl0ZXJhYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNhbGwuY2FsbChjYiwgdGhpc0FyZywgdmFsdWUsIGRvQnJlYWspO1xuXHRcdFx0cmV0dXJuIGJyb2tlbjtcblx0XHR9KTtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKG1vZGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRsZW5ndGggPSBpdGVyYWJsZS5sZW5ndGg7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0XHRjaGFyID0gaXRlcmFibGVbaV07XG5cdFx0XHRpZiAoaSArIDEgPCBsZW5ndGgpIHtcblx0XHRcdFx0Y29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcblx0XHRcdFx0aWYgKGNvZGUgPj0gMHhkODAwICYmIGNvZGUgPD0gMHhkYmZmKSBjaGFyICs9IGl0ZXJhYmxlWysraV07XG5cdFx0XHR9XG5cdFx0XHRjYWxsLmNhbGwoY2IsIHRoaXNBcmcsIGNoYXIsIGRvQnJlYWspO1xuXHRcdFx0aWYgKGJyb2tlbikgYnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXHRyZXN1bHQgPSBpdGVyYWJsZS5uZXh0KCk7XG5cblx0d2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuXHRcdGNhbGwuY2FsbChjYiwgdGhpc0FyZywgcmVzdWx0LnZhbHVlLCBkb0JyZWFrKTtcblx0XHRpZiAoYnJva2VuKSByZXR1cm47XG5cdFx0cmVzdWx0ID0gaXRlcmFibGUubmV4dCgpO1xuXHR9XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzQXJndW1lbnRzICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KVxuICAsIGlzU3RyaW5nICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KVxuICAsIEFycmF5SXRlcmF0b3IgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MylcbiAgLCBTdHJpbmdJdGVyYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oODMpXG4gICwgaXRlcmFibGUgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKVxuICAsIGl0ZXJhdG9yU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5pdGVyYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG5cdGlmICh0eXBlb2YgaXRlcmFibGUob2JqKVtpdGVyYXRvclN5bWJvbF0gPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG9ialtpdGVyYXRvclN5bWJvbF0oKTtcblx0aWYgKGlzQXJndW1lbnRzKG9iaikpIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcihvYmopO1xuXHRpZiAoaXNTdHJpbmcob2JqKSkgcmV0dXJuIG5ldyBTdHJpbmdJdGVyYXRvcihvYmopO1xuXHRyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3Iob2JqKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpXG4gICwgY29udGFpbnMgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuICAsIGQgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuICAsIFN5bWJvbCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKVxuICAsIEl0ZXJhdG9yICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgQXJyYXlJdGVyYXRvcjtcblxuQXJyYXlJdGVyYXRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyciwga2luZCkge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJyYXlJdGVyYXRvcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3J1wiKTtcblx0SXRlcmF0b3IuY2FsbCh0aGlzLCBhcnIpO1xuXHRpZiAoIWtpbmQpIGtpbmQgPSBcInZhbHVlXCI7XG5cdGVsc2UgaWYgKGNvbnRhaW5zLmNhbGwoa2luZCwgXCJrZXkrdmFsdWVcIikpIGtpbmQgPSBcImtleSt2YWx1ZVwiO1xuXHRlbHNlIGlmIChjb250YWlucy5jYWxsKGtpbmQsIFwia2V5XCIpKSBraW5kID0gXCJrZXlcIjtcblx0ZWxzZSBraW5kID0gXCJ2YWx1ZVwiO1xuXHRkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9fa2luZF9fXCIsIGQoXCJcIiwga2luZCkpO1xufTtcbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoQXJyYXlJdGVyYXRvciwgSXRlcmF0b3IpO1xuXG4vLyBJbnRlcm5hbCAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUgZG9lc24ndCBleHBvc2UgaXRzIGNvbnN0cnVjdG9yXG5kZWxldGUgQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cbkFycmF5SXRlcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvci5wcm90b3R5cGUsIHtcblx0X3Jlc29sdmU6IGQoZnVuY3Rpb24gKGkpIHtcblx0XHRpZiAodGhpcy5fX2tpbmRfXyA9PT0gXCJ2YWx1ZVwiKSByZXR1cm4gdGhpcy5fX2xpc3RfX1tpXTtcblx0XHRpZiAodGhpcy5fX2tpbmRfXyA9PT0gXCJrZXkrdmFsdWVcIikgcmV0dXJuIFtpLCB0aGlzLl9fbGlzdF9fW2ldXTtcblx0XHRyZXR1cm4gaTtcblx0fSlcbn0pO1xuZGVmaW5lUHJvcGVydHkoQXJyYXlJdGVyYXRvci5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZChcImNcIiwgXCJBcnJheSBJdGVyYXRvclwiKSk7XG5cblxuLyoqKi8gfSksXG4vKiA3NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgY29weSAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzUpXG4gICwgbm9ybWFsaXplT3B0aW9ucyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpXG4gICwgZW5zdXJlQ2FsbGFibGUgICA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcbiAgLCBtYXAgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MClcbiAgLCBjYWxsYWJsZSAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuICAsIHZhbGlkVmFsdWUgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApXG5cbiAgLCBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gICwgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgZGVmaW5lO1xuXG5kZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgZGVzYywgb3B0aW9ucykge1xuXHR2YXIgdmFsdWUgPSB2YWxpZFZhbHVlKGRlc2MpICYmIGNhbGxhYmxlKGRlc2MudmFsdWUpLCBkZ3M7XG5cdGRncyA9IGNvcHkoZGVzYyk7XG5cdGRlbGV0ZSBkZ3Mud3JpdGFibGU7XG5cdGRlbGV0ZSBkZ3MudmFsdWU7XG5cdGRncy5nZXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKCFvcHRpb25zLm92ZXJ3cml0ZURlZmluaXRpb24gJiYgaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCBuYW1lKSkgcmV0dXJuIHZhbHVlO1xuXHRcdGRlc2MudmFsdWUgPSBiaW5kLmNhbGwodmFsdWUsIG9wdGlvbnMucmVzb2x2ZUNvbnRleHQgPyBvcHRpb25zLnJlc29sdmVDb250ZXh0KHRoaXMpIDogdGhpcyk7XG5cdFx0ZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwgZGVzYyk7XG5cdFx0cmV0dXJuIHRoaXNbbmFtZV07XG5cdH07XG5cdHJldHVybiBkZ3M7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwcm9wcy8qLCBvcHRpb25zKi8pIHtcblx0dmFyIG9wdGlvbnMgPSBub3JtYWxpemVPcHRpb25zKGFyZ3VtZW50c1sxXSk7XG5cdGlmIChvcHRpb25zLnJlc29sdmVDb250ZXh0ICE9IG51bGwpIGVuc3VyZUNhbGxhYmxlKG9wdGlvbnMucmVzb2x2ZUNvbnRleHQpO1xuXHRyZXR1cm4gbWFwKHByb3BzLCBmdW5jdGlvbiAoZGVzYywgbmFtZSkgeyByZXR1cm4gZGVmaW5lKG5hbWUsIGRlc2MsIG9wdGlvbnMpOyB9KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgYUZyb20gID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NilcbiAgLCBhc3NpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuICAsIHZhbHVlICA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iai8qLCBwcm9wZXJ0eU5hbWVzLCBvcHRpb25zKi8pIHtcblx0dmFyIGNvcHkgPSBPYmplY3QodmFsdWUob2JqKSksIHByb3BlcnR5TmFtZXMgPSBhcmd1bWVudHNbMV0sIG9wdGlvbnMgPSBPYmplY3QoYXJndW1lbnRzWzJdKTtcblx0aWYgKGNvcHkgIT09IG9iaiAmJiAhcHJvcGVydHlOYW1lcykgcmV0dXJuIGNvcHk7XG5cdHZhciByZXN1bHQgPSB7fTtcblx0aWYgKHByb3BlcnR5TmFtZXMpIHtcblx0XHRhRnJvbShwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG5cdFx0XHRpZiAob3B0aW9ucy5lbnN1cmUgfHwgcHJvcGVydHlOYW1lIGluIG9iaikgcmVzdWx0W3Byb3BlcnR5TmFtZV0gPSBvYmpbcHJvcGVydHlOYW1lXTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRhc3NpZ24ocmVzdWx0LCBvYmopO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KSgpXG5cdD8gQXJyYXkuZnJvbVxuXHQ6IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xuXG5cbi8qKiovIH0pLFxuLyogNzcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBmcm9tID0gQXJyYXkuZnJvbSwgYXJyLCByZXN1bHQ7XG5cdGlmICh0eXBlb2YgZnJvbSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cdGFyciA9IFtcInJhelwiLCBcImR3YVwiXTtcblx0cmVzdWx0ID0gZnJvbShhcnIpO1xuXHRyZXR1cm4gQm9vbGVhbihyZXN1bHQgJiYgKHJlc3VsdCAhPT0gYXJyKSAmJiAocmVzdWx0WzFdID09PSBcImR3YVwiKSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGl0ZXJhdG9yU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5pdGVyYXRvclxuICAsIGlzQXJndW1lbnRzICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KVxuICAsIGlzRnVuY3Rpb24gICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSlcbiAgLCB0b1Bvc0ludCAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpXG4gICwgY2FsbGFibGUgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgdmFsaWRWYWx1ZSAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApXG4gICwgaXNWYWx1ZSAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpXG4gICwgaXNTdHJpbmcgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpXG4gICwgaXNBcnJheSAgICAgICAgPSBBcnJheS5pc0FycmF5XG4gICwgY2FsbCAgICAgICAgICAgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbFxuICAsIGRlc2MgICAgICAgICAgID0geyBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogbnVsbCB9XG4gICwgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcnJheUxpa2UgLyosIG1hcEZuLCB0aGlzQXJnKi8pIHtcblx0dmFyIG1hcEZuID0gYXJndW1lbnRzWzFdXG5cdCAgLCB0aGlzQXJnID0gYXJndW1lbnRzWzJdXG5cdCAgLCBDb250ZXh0XG5cdCAgLCBpXG5cdCAgLCBqXG5cdCAgLCBhcnJcblx0ICAsIGxlbmd0aFxuXHQgICwgY29kZVxuXHQgICwgaXRlcmF0b3Jcblx0ICAsIHJlc3VsdFxuXHQgICwgZ2V0SXRlcmF0b3Jcblx0ICAsIHZhbHVlO1xuXG5cdGFycmF5TGlrZSA9IE9iamVjdCh2YWxpZFZhbHVlKGFycmF5TGlrZSkpO1xuXG5cdGlmIChpc1ZhbHVlKG1hcEZuKSkgY2FsbGFibGUobWFwRm4pO1xuXHRpZiAoIXRoaXMgfHwgdGhpcyA9PT0gQXJyYXkgfHwgIWlzRnVuY3Rpb24odGhpcykpIHtcblx0XHQvLyBSZXN1bHQ6IFBsYWluIGFycmF5XG5cdFx0aWYgKCFtYXBGbikge1xuXHRcdFx0aWYgKGlzQXJndW1lbnRzKGFycmF5TGlrZSkpIHtcblx0XHRcdFx0Ly8gU291cmNlOiBBcmd1bWVudHNcblx0XHRcdFx0bGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aDtcblx0XHRcdFx0aWYgKGxlbmd0aCAhPT0gMSkgcmV0dXJuIEFycmF5LmFwcGx5KG51bGwsIGFycmF5TGlrZSk7XG5cdFx0XHRcdGFyciA9IG5ldyBBcnJheSgxKTtcblx0XHRcdFx0YXJyWzBdID0gYXJyYXlMaWtlWzBdO1xuXHRcdFx0XHRyZXR1cm4gYXJyO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzQXJyYXkoYXJyYXlMaWtlKSkge1xuXHRcdFx0XHQvLyBTb3VyY2U6IEFycmF5XG5cdFx0XHRcdGFyciA9IG5ldyBBcnJheShsZW5ndGggPSBhcnJheUxpa2UubGVuZ3RoKTtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSBhcnJbaV0gPSBhcnJheUxpa2VbaV07XG5cdFx0XHRcdHJldHVybiBhcnI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFyciA9IFtdO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFJlc3VsdDogTm9uIHBsYWluIGFycmF5XG5cdFx0Q29udGV4dCA9IHRoaXM7XG5cdH1cblxuXHRpZiAoIWlzQXJyYXkoYXJyYXlMaWtlKSkge1xuXHRcdGlmICgoZ2V0SXRlcmF0b3IgPSBhcnJheUxpa2VbaXRlcmF0b3JTeW1ib2xdKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBTb3VyY2U6IEl0ZXJhdG9yXG5cdFx0XHRpdGVyYXRvciA9IGNhbGxhYmxlKGdldEl0ZXJhdG9yKS5jYWxsKGFycmF5TGlrZSk7XG5cdFx0XHRpZiAoQ29udGV4dCkgYXJyID0gbmV3IENvbnRleHQoKTtcblx0XHRcdHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcblx0XHRcdGkgPSAwO1xuXHRcdFx0d2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuXHRcdFx0XHR2YWx1ZSA9IG1hcEZuID8gY2FsbC5jYWxsKG1hcEZuLCB0aGlzQXJnLCByZXN1bHQudmFsdWUsIGkpIDogcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRpZiAoQ29udGV4dCkge1xuXHRcdFx0XHRcdGRlc2MudmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRkZWZpbmVQcm9wZXJ0eShhcnIsIGksIGRlc2MpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFycltpXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcblx0XHRcdFx0KytpO1xuXHRcdFx0fVxuXHRcdFx0bGVuZ3RoID0gaTtcblx0XHR9IGVsc2UgaWYgKGlzU3RyaW5nKGFycmF5TGlrZSkpIHtcblx0XHRcdC8vIFNvdXJjZTogU3RyaW5nXG5cdFx0XHRsZW5ndGggPSBhcnJheUxpa2UubGVuZ3RoO1xuXHRcdFx0aWYgKENvbnRleHQpIGFyciA9IG5ldyBDb250ZXh0KCk7XG5cdFx0XHRmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdHZhbHVlID0gYXJyYXlMaWtlW2ldO1xuXHRcdFx0XHRpZiAoaSArIDEgPCBsZW5ndGgpIHtcblx0XHRcdFx0XHRjb2RlID0gdmFsdWUuY2hhckNvZGVBdCgwKTtcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWRlcHRoXG5cdFx0XHRcdFx0aWYgKGNvZGUgPj0gMHhkODAwICYmIGNvZGUgPD0gMHhkYmZmKSB2YWx1ZSArPSBhcnJheUxpa2VbKytpXTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YWx1ZSA9IG1hcEZuID8gY2FsbC5jYWxsKG1hcEZuLCB0aGlzQXJnLCB2YWx1ZSwgaikgOiB2YWx1ZTtcblx0XHRcdFx0aWYgKENvbnRleHQpIHtcblx0XHRcdFx0XHRkZXNjLnZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdFx0ZGVmaW5lUHJvcGVydHkoYXJyLCBqLCBkZXNjKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhcnJbal0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQrK2o7XG5cdFx0XHR9XG5cdFx0XHRsZW5ndGggPSBqO1xuXHRcdH1cblx0fVxuXHRpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBTb3VyY2U6IGFycmF5IG9yIGFycmF5LWxpa2Vcblx0XHRsZW5ndGggPSB0b1Bvc0ludChhcnJheUxpa2UubGVuZ3RoKTtcblx0XHRpZiAoQ29udGV4dCkgYXJyID0gbmV3IENvbnRleHQobGVuZ3RoKTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcblx0XHRcdHZhbHVlID0gbWFwRm4gPyBjYWxsLmNhbGwobWFwRm4sIHRoaXNBcmcsIGFycmF5TGlrZVtpXSwgaSkgOiBhcnJheUxpa2VbaV07XG5cdFx0XHRpZiAoQ29udGV4dCkge1xuXHRcdFx0XHRkZXNjLnZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdGRlZmluZVByb3BlcnR5KGFyciwgaSwgZGVzYyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhcnJbaV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKENvbnRleHQpIHtcblx0XHRkZXNjLnZhbHVlID0gbnVsbDtcblx0XHRhcnIubGVuZ3RoID0gbGVuZ3RoO1xuXHR9XG5cdHJldHVybiBhcnI7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIG9ialRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywgaWQgPSBvYmpUb1N0cmluZy5jYWxsKF9fd2VicGFja19yZXF1aXJlX18oMTcpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09PSBpZDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgY2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgZm9yRWFjaCAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxKVxuICAsIGNhbGwgICAgID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaiwgY2IgLyosIHRoaXNBcmcqLykge1xuXHR2YXIgcmVzdWx0ID0ge30sIHRoaXNBcmcgPSBhcmd1bWVudHNbMl07XG5cdGNhbGxhYmxlKGNiKTtcblx0Zm9yRWFjaChvYmosIGZ1bmN0aW9uICh2YWx1ZSwga2V5LCB0YXJnZXRPYmosIGluZGV4KSB7XG5cdFx0cmVzdWx0W2tleV0gPSBjYWxsLmNhbGwoY2IsIHRoaXNBcmcsIHZhbHVlLCBrZXksIHRhcmdldE9iaiwgaW5kZXgpO1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpKFwiZm9yRWFjaFwiKTtcblxuXG4vKioqLyB9KSxcbi8qIDgyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gSW50ZXJuYWwgbWV0aG9kLCB1c2VkIGJ5IGl0ZXJhdGlvbiBmdW5jdGlvbnMuXG4vLyBDYWxscyBhIGZ1bmN0aW9uIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyIGZvdW5kIGluIG9iamVjdFxuLy8gT3B0aW9uYWxseSB0YWtlcyBjb21wYXJlRm4gdG8gaXRlcmF0ZSBvYmplY3QgaW4gc3BlY2lmaWMgb3JkZXJcblxuXG5cbnZhciBjYWxsYWJsZSAgICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcbiAgLCB2YWx1ZSAgICAgICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMClcbiAgLCBiaW5kICAgICAgICAgICAgICAgICAgICA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gICwgY2FsbCAgICAgICAgICAgICAgICAgICAgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbFxuICAsIGtleXMgICAgICAgICAgICAgICAgICAgID0gT2JqZWN0LmtleXNcbiAgLCBvYmpQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgZGVmVmFsKSB7XG5cdHJldHVybiBmdW5jdGlvbiAob2JqLCBjYiAvKiwgdGhpc0FyZywgY29tcGFyZUZuKi8pIHtcblx0XHR2YXIgbGlzdCwgdGhpc0FyZyA9IGFyZ3VtZW50c1syXSwgY29tcGFyZUZuID0gYXJndW1lbnRzWzNdO1xuXHRcdG9iaiA9IE9iamVjdCh2YWx1ZShvYmopKTtcblx0XHRjYWxsYWJsZShjYik7XG5cblx0XHRsaXN0ID0ga2V5cyhvYmopO1xuXHRcdGlmIChjb21wYXJlRm4pIHtcblx0XHRcdGxpc3Quc29ydCh0eXBlb2YgY29tcGFyZUZuID09PSBcImZ1bmN0aW9uXCIgPyBiaW5kLmNhbGwoY29tcGFyZUZuLCBvYmopIDogdW5kZWZpbmVkKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikgbWV0aG9kID0gbGlzdFttZXRob2RdO1xuXHRcdHJldHVybiBjYWxsLmNhbGwobWV0aG9kLCBsaXN0LCBmdW5jdGlvbiAoa2V5LCBpbmRleCkge1xuXHRcdFx0aWYgKCFvYmpQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iaiwga2V5KSkgcmV0dXJuIGRlZlZhbDtcblx0XHRcdHJldHVybiBjYWxsLmNhbGwoY2IsIHRoaXNBcmcsIG9ialtrZXldLCBrZXksIG9iaiwgaW5kZXgpO1xuXHRcdH0pO1xuXHR9O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDgzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gVGhhbmtzIEBtYXRoaWFzYnluZW5zXG4vLyBodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUjaXRlcmF0aW5nLW92ZXItc3ltYm9sc1xuXG5cblxudmFyIHNldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KVxuICAsIGQgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuICAsIFN5bWJvbCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKVxuICAsIEl0ZXJhdG9yICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgU3RyaW5nSXRlcmF0b3I7XG5cblN0cmluZ0l0ZXJhdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdHJpbmdJdGVyYXRvcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3J1wiKTtcblx0c3RyID0gU3RyaW5nKHN0cik7XG5cdEl0ZXJhdG9yLmNhbGwodGhpcywgc3RyKTtcblx0ZGVmaW5lUHJvcGVydHkodGhpcywgXCJfX2xlbmd0aF9fXCIsIGQoXCJcIiwgc3RyLmxlbmd0aCkpO1xufTtcbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoU3RyaW5nSXRlcmF0b3IsIEl0ZXJhdG9yKTtcblxuLy8gSW50ZXJuYWwgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIGRvZXNuJ3QgZXhwb3NlIGl0cyBjb25zdHJ1Y3RvclxuZGVsZXRlIFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcblxuU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvci5wcm90b3R5cGUsIHtcblx0X25leHQ6IGQoZnVuY3Rpb24gKCkge1xuXHRcdGlmICghdGhpcy5fX2xpc3RfXykgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRpZiAodGhpcy5fX25leHRJbmRleF9fIDwgdGhpcy5fX2xlbmd0aF9fKSByZXR1cm4gdGhpcy5fX25leHRJbmRleF9fKys7XG5cdFx0dGhpcy5fdW5CaW5kKCk7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSksXG5cdF9yZXNvbHZlOiBkKGZ1bmN0aW9uIChpKSB7XG5cdFx0dmFyIGNoYXIgPSB0aGlzLl9fbGlzdF9fW2ldLCBjb2RlO1xuXHRcdGlmICh0aGlzLl9fbmV4dEluZGV4X18gPT09IHRoaXMuX19sZW5ndGhfXykgcmV0dXJuIGNoYXI7XG5cdFx0Y29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcblx0XHRpZiAoY29kZSA+PSAweGQ4MDAgJiYgY29kZSA8PSAweGRiZmYpIHJldHVybiBjaGFyICsgdGhpcy5fX2xpc3RfX1t0aGlzLl9fbmV4dEluZGV4X18rK107XG5cdFx0cmV0dXJuIGNoYXI7XG5cdH0pXG59KTtcbmRlZmluZVByb3BlcnR5KFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCBkKFwiY1wiLCBcIlN0cmluZyBJdGVyYXRvclwiKSk7XG5cblxuLyoqKi8gfSksXG4vKiA4NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgc2V0UHJvdG90eXBlT2YgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpXG4gICwgY29udGFpbnMgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuICAsIGQgICAgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuICAsIEl0ZXJhdG9yICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMilcbiAgLCB0b1N0cmluZ1RhZ1N5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMikudG9TdHJpbmdUYWdcblxuICAsIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gICwgU2V0SXRlcmF0b3I7XG5cblNldEl0ZXJhdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0LCBraW5kKSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBTZXRJdGVyYXRvcikpIHJldHVybiBuZXcgU2V0SXRlcmF0b3Ioc2V0LCBraW5kKTtcblx0SXRlcmF0b3IuY2FsbCh0aGlzLCBzZXQuX19zZXREYXRhX18sIHNldCk7XG5cdGlmICgha2luZCkga2luZCA9ICd2YWx1ZSc7XG5cdGVsc2UgaWYgKGNvbnRhaW5zLmNhbGwoa2luZCwgJ2tleSt2YWx1ZScpKSBraW5kID0gJ2tleSt2YWx1ZSc7XG5cdGVsc2Uga2luZCA9ICd2YWx1ZSc7XG5cdGRlZmluZVByb3BlcnR5KHRoaXMsICdfX2tpbmRfXycsIGQoJycsIGtpbmQpKTtcbn07XG5pZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFNldEl0ZXJhdG9yLCBJdGVyYXRvcik7XG5cblNldEl0ZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3IucHJvdG90eXBlLCB7XG5cdGNvbnN0cnVjdG9yOiBkKFNldEl0ZXJhdG9yKSxcblx0X3Jlc29sdmU6IGQoZnVuY3Rpb24gKGkpIHtcblx0XHRpZiAodGhpcy5fX2tpbmRfXyA9PT0gJ3ZhbHVlJykgcmV0dXJuIHRoaXMuX19saXN0X19baV07XG5cdFx0cmV0dXJuIFt0aGlzLl9fbGlzdF9fW2ldLCB0aGlzLl9fbGlzdF9fW2ldXTtcblx0fSksXG5cdHRvU3RyaW5nOiBkKGZ1bmN0aW9uICgpIHsgcmV0dXJuICdbb2JqZWN0IFNldCBJdGVyYXRvcl0nOyB9KVxufSk7XG5kZWZpbmVQcm9wZXJ0eShTZXRJdGVyYXRvci5wcm90b3R5cGUsIHRvU3RyaW5nVGFnU3ltYm9sLCBkKCdjJywgJ1NldCBJdGVyYXRvcicpKTtcblxuXG4vKioqLyB9KSxcbi8qIDg1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRXhwb3J0cyB0cnVlIGlmIGVudmlyb25tZW50IHByb3ZpZGVzIG5hdGl2ZSBgU2V0YCBpbXBsZW1lbnRhdGlvbixcbi8vIHdoYXRldmVyIHRoYXQgaXMuXG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG5cdGlmICh0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTZXQucHJvdG90eXBlKSA9PT0gJ1tvYmplY3QgU2V0XScpO1xufSgpKTtcblxuXG4vKioqLyB9KSxcbi8qIDg2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qXG5cdHBzZXVkbyBzZWxlY3RvcnNcblxuXHQtLS1cblxuXHR0aGV5IGFyZSBhdmFpbGFibGUgaW4gdHdvIGZvcm1zOlxuXHQqIGZpbHRlcnMgY2FsbGVkIHdoZW4gdGhlIHNlbGVjdG9yXG5cdCAgaXMgY29tcGlsZWQgYW5kIHJldHVybiBhIGZ1bmN0aW9uXG5cdCAgdGhhdCBuZWVkcyB0byByZXR1cm4gbmV4dCgpXG5cdCogcHNldWRvcyBnZXQgY2FsbGVkIG9uIGV4ZWN1dGlvblxuXHQgIHRoZXkgbmVlZCB0byByZXR1cm4gYSBib29sZWFuXG4qL1xuXG52YXIgZ2V0TkNoZWNrICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3KSxcblx0QmFzZUZ1bmNzICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLFxuXHRhdHRyaWJ1dGVzRmFjdG9yeSA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpLFxuXHR0cnVlRnVuYyAgICAgICAgICA9IEJhc2VGdW5jcy50cnVlRnVuYyxcblx0ZmFsc2VGdW5jICAgICAgICAgPSBCYXNlRnVuY3MuZmFsc2VGdW5jO1xuXG5mdW5jdGlvbiBmaWx0ZXJzRmFjdG9yeShhZGFwdGVyKXtcblx0dmFyIGF0dHJpYnV0ZXMgID0gYXR0cmlidXRlc0ZhY3RvcnkoYWRhcHRlciksXG5cdFx0Y2hlY2tBdHRyaWIgPSBhdHRyaWJ1dGVzLnJ1bGVzLmVxdWFscztcblxuXHQvL2hlbHBlciBtZXRob2RzXG5cdGZ1bmN0aW9uIGVxdWFscyhhLCBiKXtcblx0XHRpZih0eXBlb2YgYWRhcHRlci5lcXVhbHMgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGFkYXB0ZXIuZXF1YWxzKGEsIGIpO1xuXG5cdFx0cmV0dXJuIGEgPT09IGI7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRBdHRyaWJGdW5jKG5hbWUsIHZhbHVlKXtcblx0XHR2YXIgZGF0YSA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9O1xuXHRcdHJldHVybiBmdW5jdGlvbiBhdHRyaWJGdW5jKG5leHQpe1xuXHRcdFx0cmV0dXJuIGNoZWNrQXR0cmliKG5leHQsIGRhdGEpO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDaGlsZEZ1bmMobmV4dCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuICEhYWRhcHRlci5nZXRQYXJlbnQoZWxlbSkgJiYgbmV4dChlbGVtKTtcblx0XHR9O1xuXHR9XG5cblx0dmFyIGZpbHRlcnMgPSB7XG5cdFx0Y29udGFpbnM6IGZ1bmN0aW9uKG5leHQsIHRleHQpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGNvbnRhaW5zKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gbmV4dChlbGVtKSAmJiBhZGFwdGVyLmdldFRleHQoZWxlbSkuaW5kZXhPZih0ZXh0KSA+PSAwO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGljb250YWluczogZnVuY3Rpb24obmV4dCwgdGV4dCl7XG5cdFx0XHR2YXIgaXRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gaWNvbnRhaW5zKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gbmV4dChlbGVtKSAmJlxuXHRcdFx0XHRcdGFkYXB0ZXIuZ2V0VGV4dChlbGVtKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoaXRleHQpID49IDA7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHQvL2xvY2F0aW9uIHNwZWNpZmljIG1ldGhvZHNcblx0XHRcIm50aC1jaGlsZFwiOiBmdW5jdGlvbihuZXh0LCBydWxlKXtcblx0XHRcdHZhciBmdW5jID0gZ2V0TkNoZWNrKHJ1bGUpO1xuXG5cdFx0XHRpZihmdW5jID09PSBmYWxzZUZ1bmMpIHJldHVybiBmdW5jO1xuXHRcdFx0aWYoZnVuYyA9PT0gdHJ1ZUZ1bmMpICByZXR1cm4gZ2V0Q2hpbGRGdW5jKG5leHQpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gbnRoQ2hpbGQoZWxlbSl7XG5cdFx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdFx0Zm9yKHZhciBpID0gMCwgcG9zID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRlbHNlIHBvcysrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmdW5jKHBvcykgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRcIm50aC1sYXN0LWNoaWxkXCI6IGZ1bmN0aW9uKG5leHQsIHJ1bGUpe1xuXHRcdFx0dmFyIGZ1bmMgPSBnZXROQ2hlY2socnVsZSk7XG5cblx0XHRcdGlmKGZ1bmMgPT09IGZhbHNlRnVuYykgcmV0dXJuIGZ1bmM7XG5cdFx0XHRpZihmdW5jID09PSB0cnVlRnVuYykgIHJldHVybiBnZXRDaGlsZEZ1bmMobmV4dCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBudGhMYXN0Q2hpbGQoZWxlbSl7XG5cdFx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdFx0Zm9yKHZhciBwb3MgPSAwLCBpID0gc2libGluZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xuXHRcdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSBicmVhaztcblx0XHRcdFx0XHRcdGVsc2UgcG9zKys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmMocG9zKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdFwibnRoLW9mLXR5cGVcIjogZnVuY3Rpb24obmV4dCwgcnVsZSl7XG5cdFx0XHR2YXIgZnVuYyA9IGdldE5DaGVjayhydWxlKTtcblxuXHRcdFx0aWYoZnVuYyA9PT0gZmFsc2VGdW5jKSByZXR1cm4gZnVuYztcblx0XHRcdGlmKGZ1bmMgPT09IHRydWVGdW5jKSAgcmV0dXJuIGdldENoaWxkRnVuYyhuZXh0KTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIG50aE9mVHlwZShlbGVtKXtcblx0XHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0XHRmb3IodmFyIHBvcyA9IDAsIGkgPSAwOyBpIDwgc2libGluZ3MubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSBicmVhaztcblx0XHRcdFx0XHRcdGlmKGFkYXB0ZXIuZ2V0TmFtZShzaWJsaW5nc1tpXSkgPT09IGFkYXB0ZXIuZ2V0TmFtZShlbGVtKSkgcG9zKys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmMocG9zKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdFwibnRoLWxhc3Qtb2YtdHlwZVwiOiBmdW5jdGlvbihuZXh0LCBydWxlKXtcblx0XHRcdHZhciBmdW5jID0gZ2V0TkNoZWNrKHJ1bGUpO1xuXG5cdFx0XHRpZihmdW5jID09PSBmYWxzZUZ1bmMpIHJldHVybiBmdW5jO1xuXHRcdFx0aWYoZnVuYyA9PT0gdHJ1ZUZ1bmMpICByZXR1cm4gZ2V0Q2hpbGRGdW5jKG5leHQpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gbnRoTGFzdE9mVHlwZShlbGVtKXtcblx0XHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0XHRmb3IodmFyIHBvcyA9IDAsIGkgPSBzaWJsaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIGJyZWFrO1xuXHRcdFx0XHRcdFx0aWYoYWRhcHRlci5nZXROYW1lKHNpYmxpbmdzW2ldKSA9PT0gYWRhcHRlci5nZXROYW1lKGVsZW0pKSBwb3MrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZnVuYyhwb3MpICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHQvL1RPRE8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgcm9vdCBlbGVtZW50XG5cdFx0cm9vdDogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRcdHJldHVybiAhYWRhcHRlci5nZXRQYXJlbnQoZWxlbSkgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdHNjb3BlOiBmdW5jdGlvbihuZXh0LCBydWxlLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHRcdGlmKCFjb250ZXh0IHx8IGNvbnRleHQubGVuZ3RoID09PSAwKXtcblx0XHRcdFx0Ly9lcXVpdmFsZW50IHRvIDpyb290XG5cdFx0XHRcdHJldHVybiBmaWx0ZXJzLnJvb3QobmV4dCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGNvbnRleHQubGVuZ3RoID09PSAxKXtcblx0XHRcdFx0Ly9OT1RFOiBjYW4ndCBiZSB1bnBhY2tlZCwgYXMgOmhhcyB1c2VzIHRoaXMgZm9yIHNpZGUtZWZmZWN0c1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRcdFx0cmV0dXJuIGVxdWFscyhjb250ZXh0WzBdLCBlbGVtKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmluZGV4T2YoZWxlbSkgPj0gMCAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0Ly9qUXVlcnkgZXh0ZW5zaW9ucyAob3RoZXJzIGZvbGxvdyBhcyBwc2V1ZG9zKVxuXHRcdGNoZWNrYm94OiBnZXRBdHRyaWJGdW5jKFwidHlwZVwiLCBcImNoZWNrYm94XCIpLFxuXHRcdGZpbGU6IGdldEF0dHJpYkZ1bmMoXCJ0eXBlXCIsIFwiZmlsZVwiKSxcblx0XHRwYXNzd29yZDogZ2V0QXR0cmliRnVuYyhcInR5cGVcIiwgXCJwYXNzd29yZFwiKSxcblx0XHRyYWRpbzogZ2V0QXR0cmliRnVuYyhcInR5cGVcIiwgXCJyYWRpb1wiKSxcblx0XHRyZXNldDogZ2V0QXR0cmliRnVuYyhcInR5cGVcIiwgXCJyZXNldFwiKSxcblx0XHRpbWFnZTogZ2V0QXR0cmliRnVuYyhcInR5cGVcIiwgXCJpbWFnZVwiKSxcblx0XHRzdWJtaXQ6IGdldEF0dHJpYkZ1bmMoXCJ0eXBlXCIsIFwic3VibWl0XCIpXG5cdH07XG5cdHJldHVybiBmaWx0ZXJzO1xufVxuXG5mdW5jdGlvbiBwc2V1ZG9zRmFjdG9yeShhZGFwdGVyKXtcblx0Ly9oZWxwZXIgbWV0aG9kc1xuXHRmdW5jdGlvbiBnZXRGaXJzdEVsZW1lbnQoZWxlbXMpe1xuXHRcdGZvcih2YXIgaSA9IDA7IGVsZW1zICYmIGkgPCBlbGVtcy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRpZihhZGFwdGVyLmlzVGFnKGVsZW1zW2ldKSkgcmV0dXJuIGVsZW1zW2ldO1xuXHRcdH1cblx0fVxuXG5cdC8vd2hpbGUgZmlsdGVycyBhcmUgcHJlY29tcGlsZWQsIHBzZXVkb3MgZ2V0IGNhbGxlZCB3aGVuIHRoZXkgYXJlIG5lZWRlZFxuXHR2YXIgcHNldWRvcyA9IHtcblx0XHRlbXB0eTogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gIWFkYXB0ZXIuZ2V0Q2hpbGRyZW4oZWxlbSkuc29tZShmdW5jdGlvbihlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuaXNUYWcoZWxlbSkgfHwgZWxlbS50eXBlID09PSBcInRleHRcIjtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRcImZpcnN0LWNoaWxkXCI6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGdldEZpcnN0RWxlbWVudChhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pKSA9PT0gZWxlbTtcblx0XHR9LFxuXHRcdFwibGFzdC1jaGlsZFwiOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdGZvcih2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcblx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIHJldHVybiB0cnVlO1xuXHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSkgYnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdFwiZmlyc3Qtb2YtdHlwZVwiOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgcmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5nZXROYW1lKHNpYmxpbmdzW2ldKSA9PT0gYWRhcHRlci5nZXROYW1lKGVsZW0pKSBicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRcImxhc3Qtb2YtdHlwZVwiOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdGZvcih2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcblx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSByZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmdldE5hbWUoc2libGluZ3NbaV0pID09PSBhZGFwdGVyLmdldE5hbWUoZWxlbSkpIGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdFwib25seS1vZi10eXBlXCI6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0Zm9yKHZhciBpID0gMCwgaiA9IHNpYmxpbmdzLmxlbmd0aDsgaSA8IGo7IGkrKyl7XG5cdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgY29udGludWU7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5nZXROYW1lKHNpYmxpbmdzW2ldKSA9PT0gYWRhcHRlci5nZXROYW1lKGVsZW0pKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblx0XHRcIm9ubHktY2hpbGRcIjogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc2libGluZ3MubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSAmJiBzaWJsaW5nc1tpXSAhPT0gZWxlbSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly86bWF0Y2hlcyhhLCBhcmVhLCBsaW5rKVtocmVmXVxuXHRcdGxpbms6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwiaHJlZlwiKTtcblx0XHR9LFxuXHRcdHZpc2l0ZWQ6IGZhbHNlRnVuYywgLy9zZWVtcyB0byBiZSBhIHZhbGlkIGltcGxlbWVudGF0aW9uXG5cdFx0Ly9UT0RPOiA6YW55LWxpbmsgb25jZSB0aGUgbmFtZSBpcyBmaW5hbGl6ZWQgKGFzIGFuIGFsaWFzIG9mIDpsaW5rKVxuXG5cdFx0Ly9mb3Jtc1xuXHRcdC8vdG8gY29uc2lkZXI6IDp0YXJnZXRcblxuXHRcdC8vOm1hdGNoZXMoW3NlbGVjdGVkXSwgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoPiBvcHRpb25bc2VsZWN0ZWRdKSA+IG9wdGlvbjpmaXJzdC1vZi10eXBlKVxuXHRcdHNlbGVjdGVkOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdGlmKGFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwic2VsZWN0ZWRcIikpIHJldHVybiB0cnVlO1xuXHRcdFx0ZWxzZSBpZihhZGFwdGVyLmdldE5hbWUoZWxlbSkgIT09IFwib3B0aW9uXCIpIHJldHVybiBmYWxzZTtcblxuXHRcdFx0Ly90aGUgZmlyc3QgPG9wdGlvbj4gaW4gYSA8c2VsZWN0PiBpcyBhbHNvIHNlbGVjdGVkXG5cdFx0XHR2YXIgcGFyZW50ID0gYWRhcHRlci5nZXRQYXJlbnQoZWxlbSk7XG5cblx0XHRcdGlmKFxuXHRcdFx0XHQhcGFyZW50IHx8XG5cdFx0XHRcdGFkYXB0ZXIuZ2V0TmFtZShwYXJlbnQpICE9PSBcInNlbGVjdFwiIHx8XG5cdFx0XHRcdGFkYXB0ZXIuaGFzQXR0cmliKHBhcmVudCwgXCJtdWx0aXBsZVwiKVxuXHRcdFx0KSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0Q2hpbGRyZW4ocGFyZW50KSxcblx0XHRcdFx0c2F3RWxlbSAgPSBmYWxzZTtcblxuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKXtcblx0XHRcdFx0XHRcdHNhd0VsZW0gPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZighc2F3RWxlbSl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fSBlbHNlIGlmKGFkYXB0ZXIuaGFzQXR0cmliKHNpYmxpbmdzW2ldLCBcInNlbGVjdGVkXCIpKXtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNhd0VsZW07XG5cdFx0fSxcblx0XHQvL2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2Rpc2FibGVkLWVsZW1lbnRzXG5cdFx0Ly86bWF0Y2hlcyhcblx0XHQvLyAgOm1hdGNoZXMoYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgbWVudWl0ZW0sIG9wdGdyb3VwLCBvcHRpb24pW2Rpc2FibGVkXSxcblx0XHQvLyAgb3B0Z3JvdXBbZGlzYWJsZWRdID4gb3B0aW9uKSxcblx0XHQvLyBmaWVsZHNldFtkaXNhYmxlZF0gKiAvL1RPRE8gbm90IGNoaWxkIG9mIGZpcnN0IDxsZWdlbmQ+XG5cdFx0Ly8pXG5cdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwiZGlzYWJsZWRcIik7XG5cdFx0fSxcblx0XHRlbmFibGVkOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiAhYWRhcHRlci5oYXNBdHRyaWIoZWxlbSwgXCJkaXNhYmxlZFwiKTtcblx0XHR9LFxuXHRcdC8vOm1hdGNoZXMoOm1hdGNoZXMoOnJhZGlvLCA6Y2hlY2tib3gpW2NoZWNrZWRdLCA6c2VsZWN0ZWQpIChUT0RPIG1lbnVpdGVtKVxuXHRcdGNoZWNrZWQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwiY2hlY2tlZFwiKSB8fCBwc2V1ZG9zLnNlbGVjdGVkKGVsZW0pO1xuXHRcdH0sXG5cdFx0Ly86bWF0Y2hlcyhpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSlbcmVxdWlyZWRdXG5cdFx0cmVxdWlyZWQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwicmVxdWlyZWRcIik7XG5cdFx0fSxcblx0XHQvLzptYXRjaGVzKGlucHV0LCBzZWxlY3QsIHRleHRhcmVhKTpub3QoW3JlcXVpcmVkXSlcblx0XHRvcHRpb25hbDogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gIWFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwicmVxdWlyZWRcIik7XG5cdFx0fSxcblxuXHRcdC8valF1ZXJ5IGV4dGVuc2lvbnNcblxuXHRcdC8vOm5vdCg6ZW1wdHkpXG5cdFx0cGFyZW50OiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiAhcHNldWRvcy5lbXB0eShlbGVtKTtcblx0XHR9LFxuXHRcdC8vOm1hdGNoZXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNilcblx0XHRoZWFkZXI6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIG5hbWUgPSBhZGFwdGVyLmdldE5hbWUoZWxlbSk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJoMVwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJoMlwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJoM1wiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJoNFwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJoNVwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJoNlwiO1xuXHRcdH0sXG5cblx0XHQvLzptYXRjaGVzKGJ1dHRvbiwgaW5wdXRbdHlwZT1idXR0b25dKVxuXHRcdGJ1dHRvbjogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHR2YXIgbmFtZSA9IGFkYXB0ZXIuZ2V0TmFtZShlbGVtKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImJ1dHRvblwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdFx0YWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBcInR5cGVcIikgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblx0XHQvLzptYXRjaGVzKGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBidXR0b24pXG5cdFx0aW5wdXQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIG5hbWUgPSBhZGFwdGVyLmdldE5hbWUoZWxlbSk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJ0ZXh0YXJlYVwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJzZWxlY3RcIiB8fFxuXHRcdFx0XHRcdG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblx0XHQvL2lucHV0Om1hdGNoZXMoOm5vdChbdHlwZSE9JyddKSwgW3R5cGU9J3RleHQnIGldKVxuXHRcdHRleHQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gYWRhcHRlci5nZXROYW1lKGVsZW0pID09PSBcImlucHV0XCIgJiYgKFxuXHRcdFx0XHQhKGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIFwidHlwZVwiKSkgfHxcblx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIlxuXHRcdFx0KTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIHBzZXVkb3M7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFyZ3MoZnVuYywgbmFtZSwgc3Vic2VsZWN0KXtcblx0aWYoc3Vic2VsZWN0ID09PSBudWxsKXtcblx0XHRpZihmdW5jLmxlbmd0aCA+IDEgJiYgbmFtZSAhPT0gXCJzY29wZVwiKXtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInBzZXVkby1zZWxlY3RvciA6XCIgKyBuYW1lICsgXCIgcmVxdWlyZXMgYW4gYXJndW1lbnRcIik7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmKGZ1bmMubGVuZ3RoID09PSAxKXtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInBzZXVkby1zZWxlY3RvciA6XCIgKyBuYW1lICsgXCIgZG9lc24ndCBoYXZlIGFueSBhcmd1bWVudHNcIik7XG5cdFx0fVxuXHR9XG59XG5cbi8vRklYTUUgdGhpcyBmZWVscyBoYWNreVxudmFyIHJlX0NTUzMgPSAvXig/Oig/Om50aHxsYXN0fGZpcnN0fG9ubHkpLSg/OmNoaWxkfG9mLXR5cGUpfHJvb3R8ZW1wdHl8KD86ZW58ZGlzKWFibGVkfGNoZWNrZWR8bm90KSQvO1xuXG5mdW5jdGlvbiBmYWN0b3J5KGFkYXB0ZXIpe1xuXHR2YXIgcHNldWRvcyA9IHBzZXVkb3NGYWN0b3J5KGFkYXB0ZXIpO1xuXHR2YXIgZmlsdGVycyA9IGZpbHRlcnNGYWN0b3J5KGFkYXB0ZXIpO1xuXG5cdHJldHVybiB7XG5cdFx0Y29tcGlsZTogZnVuY3Rpb24obmV4dCwgZGF0YSwgb3B0aW9ucywgY29udGV4dCl7XG5cdFx0XHR2YXIgbmFtZSA9IGRhdGEubmFtZSxcblx0XHRcdFx0c3Vic2VsZWN0ID0gZGF0YS5kYXRhO1xuXG5cdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMuc3RyaWN0ICYmICFyZV9DU1MzLnRlc3QobmFtZSkpe1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCI6XCIgKyBuYW1lICsgXCIgaXNuJ3QgcGFydCBvZiBDU1MzXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZih0eXBlb2YgZmlsdGVyc1tuYW1lXSA9PT0gXCJmdW5jdGlvblwiKXtcblx0XHRcdFx0dmVyaWZ5QXJncyhmaWx0ZXJzW25hbWVdLCBuYW1lLCAgc3Vic2VsZWN0KTtcblx0XHRcdFx0cmV0dXJuIGZpbHRlcnNbbmFtZV0obmV4dCwgc3Vic2VsZWN0LCBvcHRpb25zLCBjb250ZXh0KTtcblx0XHRcdH0gZWxzZSBpZih0eXBlb2YgcHNldWRvc1tuYW1lXSA9PT0gXCJmdW5jdGlvblwiKXtcblx0XHRcdFx0dmFyIGZ1bmMgPSBwc2V1ZG9zW25hbWVdO1xuXHRcdFx0XHR2ZXJpZnlBcmdzKGZ1bmMsIG5hbWUsIHN1YnNlbGVjdCk7XG5cblx0XHRcdFx0aWYobmV4dCA9PT0gdHJ1ZUZ1bmMpIHJldHVybiBmdW5jO1xuXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiBwc2V1ZG9BcmdzKGVsZW0pe1xuXHRcdFx0XHRcdHJldHVybiBmdW5jKGVsZW0sIHN1YnNlbGVjdCkgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInVubWF0Y2hlZCBwc2V1ZG8tY2xhc3MgOlwiICsgbmFtZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRmaWx0ZXJzOiBmaWx0ZXJzLFxuXHRcdHBzZXVkb3M6IHBzZXVkb3Ncblx0fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5O1xuXG5cbi8qKiovIH0pLFxuLyogODcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHBhcnNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCksXG4gICAgY29tcGlsZSA9IF9fd2VicGFja19yZXF1aXJlX18oODkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG50aENoZWNrKGZvcm11bGEpe1xuXHRyZXR1cm4gY29tcGlsZShwYXJzZShmb3JtdWxhKSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xubW9kdWxlLmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGU7XG5cbi8qKiovIH0pLFxuLyogODggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcblxuLy9mb2xsb3dpbmcgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI250aC1jaGlsZC1wc2V1ZG9cblxuLy9bIFsnLSd8JysnXT8gSU5URUdFUj8ge059IFsgUyogWyctJ3wnKyddIFMqIElOVEVHRVIgXT9cbnZhciByZV9udGhFbGVtZW50ID0gL14oWytcXC1dP1xcZCpuKT9cXHMqKD86KFsrXFwtXT8pXFxzKihcXGQrKSk/JC87XG5cbi8qXG5cdHBhcnNlcyBhIG50aC1jaGVjayBmb3JtdWxhLCByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBudW1iZXJzXG4qL1xuZnVuY3Rpb24gcGFyc2UoZm9ybXVsYSl7XG5cdGZvcm11bGEgPSBmb3JtdWxhLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG5cdGlmKGZvcm11bGEgPT09IFwiZXZlblwiKXtcblx0XHRyZXR1cm4gWzIsIDBdO1xuXHR9IGVsc2UgaWYoZm9ybXVsYSA9PT0gXCJvZGRcIil7XG5cdFx0cmV0dXJuIFsyLCAxXTtcblx0fSBlbHNlIHtcblx0XHR2YXIgcGFyc2VkID0gZm9ybXVsYS5tYXRjaChyZV9udGhFbGVtZW50KTtcblxuXHRcdGlmKCFwYXJzZWQpe1xuXHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwibi10aCBydWxlIGNvdWxkbid0IGJlIHBhcnNlZCAoJ1wiICsgZm9ybXVsYSArIFwiJylcIik7XG5cdFx0fVxuXG5cdFx0dmFyIGE7XG5cblx0XHRpZihwYXJzZWRbMV0pe1xuXHRcdFx0YSA9IHBhcnNlSW50KHBhcnNlZFsxXSwgMTApO1xuXHRcdFx0aWYoaXNOYU4oYSkpe1xuXHRcdFx0XHRpZihwYXJzZWRbMV0uY2hhckF0KDApID09PSBcIi1cIikgYSA9IC0xO1xuXHRcdFx0XHRlbHNlIGEgPSAxO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBhID0gMDtcblxuXHRcdHJldHVybiBbXG5cdFx0XHRhLFxuXHRcdFx0cGFyc2VkWzNdID8gcGFyc2VJbnQoKHBhcnNlZFsyXSB8fCBcIlwiKSArIHBhcnNlZFszXSwgMTApIDogMFxuXHRcdF07XG5cdH1cbn1cblxuXG4vKioqLyB9KSxcbi8qIDg5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZTtcblxudmFyIEJhc2VGdW5jcyA9IF9fd2VicGFja19yZXF1aXJlX18oNSksXG4gICAgdHJ1ZUZ1bmMgID0gQmFzZUZ1bmNzLnRydWVGdW5jLFxuICAgIGZhbHNlRnVuYyA9IEJhc2VGdW5jcy5mYWxzZUZ1bmM7XG5cbi8qXG5cdHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhbiBlbGVtZW50cyBpbmRleCBtYXRjaGVzIHRoZSBnaXZlbiBydWxlXG5cdGhpZ2hseSBvcHRpbWl6ZWQgdG8gcmV0dXJuIHRoZSBmYXN0ZXN0IHNvbHV0aW9uXG4qL1xuZnVuY3Rpb24gY29tcGlsZShwYXJzZWQpe1xuXHR2YXIgYSA9IHBhcnNlZFswXSxcblx0ICAgIGIgPSBwYXJzZWRbMV0gLSAxO1xuXG5cdC8vd2hlbiBiIDw9IDAsIGEqbiB3b24ndCBiZSBwb3NzaWJsZSBmb3IgYW55IG1hdGNoZXMgd2hlbiBhIDwgMFxuXHQvL2Jlc2lkZXMsIHRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBubyBlbGVtZW50IGlzIG1hdGNoZWQgd2hlbiBhIGFuZCBiIGFyZSAwXG5cdGlmKGIgPCAwICYmIGEgPD0gMCkgcmV0dXJuIGZhbHNlRnVuYztcblxuXHQvL3doZW4gYSBpcyBpbiB0aGUgcmFuZ2UgLTEuLjEsIGl0IG1hdGNoZXMgYW55IGVsZW1lbnQgKHNvIG9ubHkgYiBpcyBjaGVja2VkKVxuXHRpZihhID09PS0xKSByZXR1cm4gZnVuY3Rpb24ocG9zKXsgcmV0dXJuIHBvcyA8PSBiOyB9O1xuXHRpZihhID09PSAwKSByZXR1cm4gZnVuY3Rpb24ocG9zKXsgcmV0dXJuIHBvcyA9PT0gYjsgfTtcblx0Ly93aGVuIGIgPD0gMCBhbmQgYSA9PT0gMSwgdGhleSBtYXRjaCBhbnkgZWxlbWVudFxuXHRpZihhID09PSAxKSByZXR1cm4gYiA8IDAgPyB0cnVlRnVuYyA6IGZ1bmN0aW9uKHBvcyl7IHJldHVybiBwb3MgPj0gYjsgfTtcblxuXHQvL3doZW4gYSA+IDAsIG1vZHVsbyBjYW4gYmUgdXNlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhIG1hdGNoXG5cdHZhciBiTW9kID0gYiAlIGE7XG5cdGlmKGJNb2QgPCAwKSBiTW9kICs9IGE7XG5cblx0aWYoYSA+IDEpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIHBvcyA+PSBiICYmIHBvcyAlIGEgPT09IGJNb2Q7XG5cdFx0fTtcblx0fVxuXG5cdGEgKj0gLTE7IC8vbWFrZSBgYWAgcG9zaXRpdmVcblxuXHRyZXR1cm4gZnVuY3Rpb24ocG9zKXtcblx0XHRyZXR1cm4gcG9zIDw9IGIgJiYgcG9zICUgYSA9PT0gYk1vZDtcblx0fTtcbn1cblxuLyoqKi8gfSlcbi8qKioqKiovIF0pO1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdC11bWQvZGlzdC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdC11bWQvZGlzdC9pbmRleC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCIvKiFcblxuIGRpZmYgdjMuNC4wXG5cblNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50IChCU0QgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDA5LTIwMTUsIEtldmluIERlY2tlciA8a3BkZWNrZXJAZ21haWwuY29tPlxuXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZVxuICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlXG4gIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4qIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZVxuICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXJcbiAgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEtldmluIERlY2tlciBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzXG4gIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3JcbiAgd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1JcbklNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1JcbkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUxcbkRBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSXG5JTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUXG5PRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5AbGljZW5zZVxuKi9cbihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkpzRGlmZlwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJKc0RpZmZcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5jYW5vbmljYWxpemUgPSBleHBvcnRzLmNvbnZlcnRDaGFuZ2VzVG9YTUwgPSBleHBvcnRzLmNvbnZlcnRDaGFuZ2VzVG9ETVAgPSBleHBvcnRzLm1lcmdlID0gZXhwb3J0cy5wYXJzZVBhdGNoID0gZXhwb3J0cy5hcHBseVBhdGNoZXMgPSBleHBvcnRzLmFwcGx5UGF0Y2ggPSBleHBvcnRzLmNyZWF0ZVBhdGNoID0gZXhwb3J0cy5jcmVhdGVUd29GaWxlc1BhdGNoID0gZXhwb3J0cy5zdHJ1Y3R1cmVkUGF0Y2ggPSBleHBvcnRzLmRpZmZBcnJheXMgPSBleHBvcnRzLmRpZmZKc29uID0gZXhwb3J0cy5kaWZmQ3NzID0gZXhwb3J0cy5kaWZmU2VudGVuY2VzID0gZXhwb3J0cy5kaWZmVHJpbW1lZExpbmVzID0gZXhwb3J0cy5kaWZmTGluZXMgPSBleHBvcnRzLmRpZmZXb3Jkc1dpdGhTcGFjZSA9IGV4cG9ydHMuZGlmZldvcmRzID0gZXhwb3J0cy5kaWZmQ2hhcnMgPSBleHBvcnRzLkRpZmYgPSB1bmRlZmluZWQ7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY2hhcmFjdGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL193b3JkID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19saW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19zZW50ZW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNikgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY3NzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19qc29uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19hcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oOSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYXBwbHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19wYXJzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX21lcmdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMykgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fZG1wID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNikgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9feG1sID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNykgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2Z1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKiBTZWUgTElDRU5TRSBmaWxlIGZvciB0ZXJtcyBvZiB1c2UgKi9cblxuXHQvKlxuXHQgKiBUZXh0IGRpZmYgaW1wbGVtZW50YXRpb24uXG5cdCAqXG5cdCAqIFRoaXMgbGlicmFyeSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIEFQSVM6XG5cdCAqIEpzRGlmZi5kaWZmQ2hhcnM6IENoYXJhY3RlciBieSBjaGFyYWN0ZXIgZGlmZlxuXHQgKiBKc0RpZmYuZGlmZldvcmRzOiBXb3JkIChhcyBkZWZpbmVkIGJ5IFxcYiByZWdleCkgZGlmZiB3aGljaCBpZ25vcmVzIHdoaXRlc3BhY2Vcblx0ICogSnNEaWZmLmRpZmZMaW5lczogTGluZSBiYXNlZCBkaWZmXG5cdCAqXG5cdCAqIEpzRGlmZi5kaWZmQ3NzOiBEaWZmIHRhcmdldGVkIGF0IENTUyBjb250ZW50XG5cdCAqXG5cdCAqIFRoZXNlIG1ldGhvZHMgYXJlIGJhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBwcm9wb3NlZCBpblxuXHQgKiBcIkFuIE8oTkQpIERpZmZlcmVuY2UgQWxnb3JpdGhtIGFuZCBpdHMgVmFyaWF0aW9uc1wiIChNeWVycywgMTk4NikuXG5cdCAqIGh0dHA6Ly9jaXRlc2VlcnguaXN0LnBzdS5lZHUvdmlld2RvYy9zdW1tYXJ5P2RvaT0xMC4xLjEuNC42OTI3XG5cdCAqL1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL0RpZmYgPSBfYmFzZTJbJ2RlZmF1bHQnXTtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkNoYXJzID0gX2NoYXJhY3Rlci5kaWZmQ2hhcnM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZXb3JkcyA9IF93b3JkLmRpZmZXb3Jkcztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZldvcmRzV2l0aFNwYWNlID0gX3dvcmQuZGlmZldvcmRzV2l0aFNwYWNlO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmTGluZXMgPSBfbGluZS5kaWZmTGluZXM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZUcmltbWVkTGluZXMgPSBfbGluZS5kaWZmVHJpbW1lZExpbmVzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmU2VudGVuY2VzID0gX3NlbnRlbmNlLmRpZmZTZW50ZW5jZXM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZDc3MgPSBfY3NzLmRpZmZDc3M7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZKc29uID0gX2pzb24uZGlmZkpzb247XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZBcnJheXMgPSBfYXJyYXkuZGlmZkFycmF5cztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovc3RydWN0dXJlZFBhdGNoID0gX2NyZWF0ZS5zdHJ1Y3R1cmVkUGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NyZWF0ZVR3b0ZpbGVzUGF0Y2ggPSBfY3JlYXRlLmNyZWF0ZVR3b0ZpbGVzUGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NyZWF0ZVBhdGNoID0gX2NyZWF0ZS5jcmVhdGVQYXRjaDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovYXBwbHlQYXRjaCA9IF9hcHBseS5hcHBseVBhdGNoO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9hcHBseVBhdGNoZXMgPSBfYXBwbHkuYXBwbHlQYXRjaGVzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9wYXJzZVBhdGNoID0gX3BhcnNlLnBhcnNlUGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL21lcmdlID0gX21lcmdlLm1lcmdlO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jb252ZXJ0Q2hhbmdlc1RvRE1QID0gX2RtcC5jb252ZXJ0Q2hhbmdlc1RvRE1QO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jb252ZXJ0Q2hhbmdlc1RvWE1MID0gX3htbC5jb252ZXJ0Q2hhbmdlc1RvWE1MO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jYW5vbmljYWxpemUgPSBfanNvbi5jYW5vbmljYWxpemU7XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5cGJtUmxlQzVxY3lKZExDSnVZVzFsY3lJNld5SkVhV1ptSWl3aVpHbG1aa05vWVhKeklpd2laR2xtWmxkdmNtUnpJaXdpWkdsbVpsZHZjbVJ6VjJsMGFGTndZV05sSWl3aVpHbG1aa3hwYm1Weklpd2laR2xtWmxSeWFXMXRaV1JNYVc1bGN5SXNJbVJwWm1aVFpXNTBaVzVqWlhNaUxDSmthV1ptUTNOeklpd2laR2xtWmtwemIyNGlMQ0prYVdabVFYSnlZWGx6SWl3aWMzUnlkV04wZFhKbFpGQmhkR05vSWl3aVkzSmxZWFJsVkhkdlJtbHNaWE5RWVhSamFDSXNJbU55WldGMFpWQmhkR05vSWl3aVlYQndiSGxRWVhSamFDSXNJbUZ3Y0d4NVVHRjBZMmhsY3lJc0luQmhjbk5sVUdGMFkyZ2lMQ0p0WlhKblpTSXNJbU52Ym5abGNuUkRhR0Z1WjJWelZHOUVUVkFpTENKamIyNTJaWEowUTJoaGJtZGxjMVJ2V0UxTUlpd2lZMkZ1YjI1cFkyRnNhWHBsSWwwc0ltMWhjSEJwYm1keklqb2lPenM3T3p0MVFrRm5Ra0U3T3pzN2RVSkJRMEU3TzBGQlEwRTdPMEZCUTBFN08wRkJRMEU3TzBGQlJVRTdPMEZCUTBFN08wRkJSVUU3TzBGQlJVRTdPMEZCUTBFN08wRkJRMEU3TzBGQlEwRTdPMEZCUlVFN08wRkJRMEU3T3pzN1FVRnFRMEU3TzBGQlJVRTdPenM3T3pzN096czdPenM3TzJkRFFXdERSVUVzU1R0NVJFRkZRVU1zVXp0NVJFRkRRVU1zVXp0NVJFRkRRVU1zYTBJN2VVUkJRMEZETEZNN2VVUkJRMEZETEdkQ08zbEVRVU5CUXl4aE8zbEVRVVZCUXl4UE8zbEVRVU5CUXl4Uk8zbEVRVVZCUXl4Vk8zbEVRVVZCUXl4bE8zbEVRVU5CUXl4dFFqdDVSRUZEUVVNc1Z6dDVSRUZEUVVNc1ZUdDVSRUZEUVVNc1dUdDVSRUZEUVVNc1ZUdDVSRUZEUVVNc1N6dDVSRUZEUVVNc2JVSTdlVVJCUTBGRExHMUNPM2xFUVVOQlF5eFpJaXdpWm1sc1pTSTZJbWx1WkdWNExtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvZ1UyVmxJRXhKUTBWT1UwVWdabWxzWlNCbWIzSWdkR1Z5YlhNZ2IyWWdkWE5sSUNvdlhHNWNiaThxWEc0Z0tpQlVaWGgwSUdScFptWWdhVzF3YkdWdFpXNTBZWFJwYjI0dVhHNGdLbHh1SUNvZ1ZHaHBjeUJzYVdKeVlYSjVJSE4xY0hCdmNuUnpJSFJvWlNCbWIyeHNiM2RwYm1jZ1FWQkpVenBjYmlBcUlFcHpSR2xtWmk1a2FXWm1RMmhoY25NNklFTm9ZWEpoWTNSbGNpQmllU0JqYUdGeVlXTjBaWElnWkdsbVpseHVJQ29nU25ORWFXWm1MbVJwWm1aWGIzSmtjem9nVjI5eVpDQW9ZWE1nWkdWbWFXNWxaQ0JpZVNCY1hHSWdjbVZuWlhncElHUnBabVlnZDJocFkyZ2dhV2R1YjNKbGN5QjNhR2wwWlhOd1lXTmxYRzRnS2lCS2MwUnBabVl1WkdsbVpreHBibVZ6T2lCTWFXNWxJR0poYzJWa0lHUnBabVpjYmlBcVhHNGdLaUJLYzBScFptWXVaR2xtWmtOemN6b2dSR2xtWmlCMFlYSm5aWFJsWkNCaGRDQkRVMU1nWTI5dWRHVnVkRnh1SUNwY2JpQXFJRlJvWlhObElHMWxkR2h2WkhNZ1lYSmxJR0poYzJWa0lHOXVJSFJvWlNCcGJYQnNaVzFsYm5SaGRHbHZiaUJ3Y205d2IzTmxaQ0JwYmx4dUlDb2dYQ0pCYmlCUEtFNUVLU0JFYVdabVpYSmxibU5sSUVGc1oyOXlhWFJvYlNCaGJtUWdhWFJ6SUZaaGNtbGhkR2x2Ym5OY0lpQW9UWGxsY25Nc0lERTVPRFlwTGx4dUlDb2dhSFIwY0RvdkwyTnBkR1Z6WldWeWVDNXBjM1F1Y0hOMUxtVmtkUzkyYVdWM1pHOWpMM04xYlcxaGNuay9aRzlwUFRFd0xqRXVNUzQwTGpZNU1qZGNiaUFxTDF4dWFXMXdiM0owSUVScFptWWdabkp2YlNBbkxpOWthV1ptTDJKaGMyVW5PMXh1YVcxd2IzSjBJSHRrYVdabVEyaGhjbk45SUdaeWIyMGdKeTR2WkdsbVppOWphR0Z5WVdOMFpYSW5PMXh1YVcxd2IzSjBJSHRrYVdabVYyOXlaSE1zSUdScFptWlhiM0prYzFkcGRHaFRjR0ZqWlgwZ1puSnZiU0FuTGk5a2FXWm1MM2R2Y21Rbk8xeHVhVzF3YjNKMElIdGthV1ptVEdsdVpYTXNJR1JwWm1aVWNtbHRiV1ZrVEdsdVpYTjlJR1p5YjIwZ0p5NHZaR2xtWmk5c2FXNWxKenRjYm1sdGNHOXlkQ0I3WkdsbVpsTmxiblJsYm1ObGMzMGdabkp2YlNBbkxpOWthV1ptTDNObGJuUmxibU5sSnp0Y2JseHVhVzF3YjNKMElIdGthV1ptUTNOemZTQm1jbTl0SUNjdUwyUnBabVl2WTNOekp6dGNibWx0Y0c5eWRDQjdaR2xtWmtwemIyNHNJR05oYm05dWFXTmhiR2w2WlgwZ1puSnZiU0FuTGk5a2FXWm1MMnB6YjI0bk8xeHVYRzVwYlhCdmNuUWdlMlJwWm1aQmNuSmhlWE45SUdaeWIyMGdKeTR2WkdsbVppOWhjbkpoZVNjN1hHNWNibWx0Y0c5eWRDQjdZWEJ3YkhsUVlYUmphQ3dnWVhCd2JIbFFZWFJqYUdWemZTQm1jbTl0SUNjdUwzQmhkR05vTDJGd2NHeDVKenRjYm1sdGNHOXlkQ0I3Y0dGeWMyVlFZWFJqYUgwZ1puSnZiU0FuTGk5d1lYUmphQzl3WVhKelpTYzdYRzVwYlhCdmNuUWdlMjFsY21kbGZTQm1jbTl0SUNjdUwzQmhkR05vTDIxbGNtZGxKenRjYm1sdGNHOXlkQ0I3YzNSeWRXTjBkWEpsWkZCaGRHTm9MQ0JqY21WaGRHVlVkMjlHYVd4bGMxQmhkR05vTENCamNtVmhkR1ZRWVhSamFIMGdabkp2YlNBbkxpOXdZWFJqYUM5amNtVmhkR1VuTzF4dVhHNXBiWEJ2Y25RZ2UyTnZiblpsY25SRGFHRnVaMlZ6Vkc5RVRWQjlJR1p5YjIwZ0p5NHZZMjl1ZG1WeWRDOWtiWEFuTzF4dWFXMXdiM0owSUh0amIyNTJaWEowUTJoaGJtZGxjMVJ2V0UxTWZTQm1jbTl0SUNjdUwyTnZiblpsY25RdmVHMXNKenRjYmx4dVpYaHdiM0owSUh0Y2JpQWdSR2xtWml4Y2JseHVJQ0JrYVdabVEyaGhjbk1zWEc0Z0lHUnBabVpYYjNKa2N5eGNiaUFnWkdsbVpsZHZjbVJ6VjJsMGFGTndZV05sTEZ4dUlDQmthV1ptVEdsdVpYTXNYRzRnSUdScFptWlVjbWx0YldWa1RHbHVaWE1zWEc0Z0lHUnBabVpUWlc1MFpXNWpaWE1zWEc1Y2JpQWdaR2xtWmtOemN5eGNiaUFnWkdsbVprcHpiMjRzWEc1Y2JpQWdaR2xtWmtGeWNtRjVjeXhjYmx4dUlDQnpkSEoxWTNSMWNtVmtVR0YwWTJnc1hHNGdJR055WldGMFpWUjNiMFpwYkdWelVHRjBZMmdzWEc0Z0lHTnlaV0YwWlZCaGRHTm9MRnh1SUNCaGNIQnNlVkJoZEdOb0xGeHVJQ0JoY0hCc2VWQmhkR05vWlhNc1hHNGdJSEJoY25ObFVHRjBZMmdzWEc0Z0lHMWxjbWRsTEZ4dUlDQmpiMjUyWlhKMFEyaGhibWRsYzFSdlJFMVFMRnh1SUNCamIyNTJaWEowUTJoaGJtZGxjMVJ2V0UxTUxGeHVJQ0JqWVc1dmJtbGpZV3hwZW1WY2JuMDdYRzRpWFgwPVxuXG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0c1snZGVmYXVsdCddID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9EaWZmO1xuXHRmdW5jdGlvbiBEaWZmKCkge31cblxuXHREaWZmLnByb3RvdHlwZSA9IHtcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZjogZnVuY3Rpb24gZGlmZihvbGRTdHJpbmcsIG5ld1N0cmluZykge1xuXHQgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL29wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG5cdCAgICB2YXIgY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcblx0ICAgICAgb3B0aW9ucyA9IHt9O1xuXHQgICAgfVxuXHQgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuXHQgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG5cdCAgICBmdW5jdGlvbiBkb25lKHZhbHVlKSB7XG5cdCAgICAgIGlmIChjYWxsYmFjaykge1xuXHQgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCB2YWx1ZSk7XG5cdCAgICAgICAgfSwgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIC8vIEFsbG93IHN1YmNsYXNzZXMgdG8gbWFzc2FnZSB0aGUgaW5wdXQgcHJpb3IgdG8gcnVubmluZ1xuXHQgICAgb2xkU3RyaW5nID0gdGhpcy5jYXN0SW5wdXQob2xkU3RyaW5nKTtcblx0ICAgIG5ld1N0cmluZyA9IHRoaXMuY2FzdElucHV0KG5ld1N0cmluZyk7XG5cblx0ICAgIG9sZFN0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShvbGRTdHJpbmcpKTtcblx0ICAgIG5ld1N0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShuZXdTdHJpbmcpKTtcblxuXHQgICAgdmFyIG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG5cdCAgICAgICAgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aDtcblx0ICAgIHZhciBlZGl0TGVuZ3RoID0gMTtcblx0ICAgIHZhciBtYXhFZGl0TGVuZ3RoID0gbmV3TGVuICsgb2xkTGVuO1xuXHQgICAgdmFyIGJlc3RQYXRoID0gW3sgbmV3UG9zOiAtMSwgY29tcG9uZW50czogW10gfV07XG5cblx0ICAgIC8vIFNlZWQgZWRpdExlbmd0aCA9IDAsIGkuZS4gdGhlIGNvbnRlbnQgc3RhcnRzIHdpdGggdGhlIHNhbWUgdmFsdWVzXG5cdCAgICB2YXIgb2xkUG9zID0gdGhpcy5leHRyYWN0Q29tbW9uKGJlc3RQYXRoWzBdLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgMCk7XG5cdCAgICBpZiAoYmVzdFBhdGhbMF0ubmV3UG9zICsgMSA+PSBuZXdMZW4gJiYgb2xkUG9zICsgMSA+PSBvbGRMZW4pIHtcblx0ICAgICAgLy8gSWRlbnRpdHkgcGVyIHRoZSBlcXVhbGl0eSBhbmQgdG9rZW5pemVyXG5cdCAgICAgIHJldHVybiBkb25lKFt7IHZhbHVlOiB0aGlzLmpvaW4obmV3U3RyaW5nKSwgY291bnQ6IG5ld1N0cmluZy5sZW5ndGggfV0pO1xuXHQgICAgfVxuXG5cdCAgICAvLyBNYWluIHdvcmtlciBtZXRob2QuIGNoZWNrcyBhbGwgcGVybXV0YXRpb25zIG9mIGEgZ2l2ZW4gZWRpdCBsZW5ndGggZm9yIGFjY2VwdGFuY2UuXG5cdCAgICBmdW5jdGlvbiBleGVjRWRpdExlbmd0aCgpIHtcblx0ICAgICAgZm9yICh2YXIgZGlhZ29uYWxQYXRoID0gLTEgKiBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggPD0gZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoICs9IDIpIHtcblx0ICAgICAgICB2YXIgYmFzZVBhdGggPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdm9pZCAwIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXHQgICAgICAgIHZhciBhZGRQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0sXG5cdCAgICAgICAgICAgIHJlbW92ZVBhdGggPSBiZXN0UGF0aFtkaWFnb25hbFBhdGggKyAxXSxcblx0ICAgICAgICAgICAgX29sZFBvcyA9IChyZW1vdmVQYXRoID8gcmVtb3ZlUGF0aC5uZXdQb3MgOiAwKSAtIGRpYWdvbmFsUGF0aDtcblx0ICAgICAgICBpZiAoYWRkUGF0aCkge1xuXHQgICAgICAgICAgLy8gTm8gb25lIGVsc2UgaXMgZ29pbmcgdG8gYXR0ZW1wdCB0byB1c2UgdGhpcyB2YWx1ZSwgY2xlYXIgaXRcblx0ICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBjYW5BZGQgPSBhZGRQYXRoICYmIGFkZFBhdGgubmV3UG9zICsgMSA8IG5ld0xlbixcblx0ICAgICAgICAgICAgY2FuUmVtb3ZlID0gcmVtb3ZlUGF0aCAmJiAwIDw9IF9vbGRQb3MgJiYgX29sZFBvcyA8IG9sZExlbjtcblx0ICAgICAgICBpZiAoIWNhbkFkZCAmJiAhY2FuUmVtb3ZlKSB7XG5cdCAgICAgICAgICAvLyBJZiB0aGlzIHBhdGggaXMgYSB0ZXJtaW5hbCB0aGVuIHBydW5lXG5cdCAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgY29udGludWU7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gU2VsZWN0IHRoZSBkaWFnb25hbCB0aGF0IHdlIHdhbnQgdG8gYnJhbmNoIGZyb20uIFdlIHNlbGVjdCB0aGUgcHJpb3Jcblx0ICAgICAgICAvLyBwYXRoIHdob3NlIHBvc2l0aW9uIGluIHRoZSBuZXcgc3RyaW5nIGlzIHRoZSBmYXJ0aGVzdCBmcm9tIHRoZSBvcmlnaW5cblx0ICAgICAgICAvLyBhbmQgZG9lcyBub3QgcGFzcyB0aGUgYm91bmRzIG9mIHRoZSBkaWZmIGdyYXBoXG5cdCAgICAgICAgaWYgKCFjYW5BZGQgfHwgY2FuUmVtb3ZlICYmIGFkZFBhdGgubmV3UG9zIDwgcmVtb3ZlUGF0aC5uZXdQb3MpIHtcblx0ICAgICAgICAgIGJhc2VQYXRoID0gY2xvbmVQYXRoKHJlbW92ZVBhdGgpO1xuXHQgICAgICAgICAgc2VsZi5wdXNoQ29tcG9uZW50KGJhc2VQYXRoLmNvbXBvbmVudHMsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIGJhc2VQYXRoID0gYWRkUGF0aDsgLy8gTm8gbmVlZCB0byBjbG9uZSwgd2UndmUgcHVsbGVkIGl0IGZyb20gdGhlIGxpc3Rcblx0ICAgICAgICAgIGJhc2VQYXRoLm5ld1BvcysrO1xuXHQgICAgICAgICAgc2VsZi5wdXNoQ29tcG9uZW50KGJhc2VQYXRoLmNvbXBvbmVudHMsIHRydWUsIHVuZGVmaW5lZCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgX29sZFBvcyA9IHNlbGYuZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCk7XG5cblx0ICAgICAgICAvLyBJZiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIGJvdGggc3RyaW5ncywgdGhlbiB3ZSBhcmUgZG9uZVxuXHQgICAgICAgIGlmIChiYXNlUGF0aC5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBfb2xkUG9zICsgMSA+PSBvbGRMZW4pIHtcblx0ICAgICAgICAgIHJldHVybiBkb25lKGJ1aWxkVmFsdWVzKHNlbGYsIGJhc2VQYXRoLmNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBzZWxmLnVzZUxvbmdlc3RUb2tlbikpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAvLyBPdGhlcndpc2UgdHJhY2sgdGhpcyBwYXRoIGFzIGEgcG90ZW50aWFsIGNhbmRpZGF0ZSBhbmQgY29udGludWUuXG5cdCAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gYmFzZVBhdGg7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgZWRpdExlbmd0aCsrO1xuXHQgICAgfVxuXG5cdCAgICAvLyBQZXJmb3JtcyB0aGUgbGVuZ3RoIG9mIGVkaXQgaXRlcmF0aW9uLiBJcyBhIGJpdCBmdWdseSBhcyB0aGlzIGhhcyB0byBzdXBwb3J0IHRoZVxuXHQgICAgLy8gc3luYyBhbmQgYXN5bmMgbW9kZSB3aGljaCBpcyBuZXZlciBmdW4uIExvb3BzIG92ZXIgZXhlY0VkaXRMZW5ndGggdW50aWwgYSB2YWx1ZVxuXHQgICAgLy8gaXMgcHJvZHVjZWQuXG5cdCAgICBpZiAoY2FsbGJhY2spIHtcblx0ICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG5cdCAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgd2Ugd2FudCB0byBiZSBzYWZlLlxuXHQgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0ICAgICAgICAgIGlmIChlZGl0TGVuZ3RoID4gbWF4RWRpdExlbmd0aCkge1xuXHQgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcblx0ICAgICAgICAgIH1cblxuXHQgICAgICAgICAgaWYgKCFleGVjRWRpdExlbmd0aCgpKSB7XG5cdCAgICAgICAgICAgIGV4ZWMoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9LCAwKTtcblx0ICAgICAgfSkoKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHdoaWxlIChlZGl0TGVuZ3RoIDw9IG1heEVkaXRMZW5ndGgpIHtcblx0ICAgICAgICB2YXIgcmV0ID0gZXhlY0VkaXRMZW5ndGgoKTtcblx0ICAgICAgICBpZiAocmV0KSB7XG5cdCAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3B1c2hDb21wb25lbnQ6IGZ1bmN0aW9uIHB1c2hDb21wb25lbnQoY29tcG9uZW50cywgYWRkZWQsIHJlbW92ZWQpIHtcblx0ICAgIHZhciBsYXN0ID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuXHQgICAgaWYgKGxhc3QgJiYgbGFzdC5hZGRlZCA9PT0gYWRkZWQgJiYgbGFzdC5yZW1vdmVkID09PSByZW1vdmVkKSB7XG5cdCAgICAgIC8vIFdlIG5lZWQgdG8gY2xvbmUgaGVyZSBhcyB0aGUgY29tcG9uZW50IGNsb25lIG9wZXJhdGlvbiBpcyBqdXN0XG5cdCAgICAgIC8vIGFzIHNoYWxsb3cgYXJyYXkgY2xvbmVcblx0ICAgICAgY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdID0geyBjb3VudDogbGFzdC5jb3VudCArIDEsIGFkZGVkOiBhZGRlZCwgcmVtb3ZlZDogcmVtb3ZlZCB9O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgY29tcG9uZW50cy5wdXNoKHsgY291bnQ6IDEsIGFkZGVkOiBhZGRlZCwgcmVtb3ZlZDogcmVtb3ZlZCB9KTtcblx0ICAgIH1cblx0ICB9LFxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9leHRyYWN0Q29tbW9uOiBmdW5jdGlvbiBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKSB7XG5cdCAgICB2YXIgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCxcblx0ICAgICAgICBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoLFxuXHQgICAgICAgIG5ld1BvcyA9IGJhc2VQYXRoLm5ld1Bvcyxcblx0ICAgICAgICBvbGRQb3MgPSBuZXdQb3MgLSBkaWFnb25hbFBhdGgsXG5cdCAgICAgICAgY29tbW9uQ291bnQgPSAwO1xuXHQgICAgd2hpbGUgKG5ld1BvcyArIDEgPCBuZXdMZW4gJiYgb2xkUG9zICsgMSA8IG9sZExlbiAmJiB0aGlzLmVxdWFscyhuZXdTdHJpbmdbbmV3UG9zICsgMV0sIG9sZFN0cmluZ1tvbGRQb3MgKyAxXSkpIHtcblx0ICAgICAgbmV3UG9zKys7XG5cdCAgICAgIG9sZFBvcysrO1xuXHQgICAgICBjb21tb25Db3VudCsrO1xuXHQgICAgfVxuXG5cdCAgICBpZiAoY29tbW9uQ291bnQpIHtcblx0ICAgICAgYmFzZVBhdGguY29tcG9uZW50cy5wdXNoKHsgY291bnQ6IGNvbW1vbkNvdW50IH0pO1xuXHQgICAgfVxuXG5cdCAgICBiYXNlUGF0aC5uZXdQb3MgPSBuZXdQb3M7XG5cdCAgICByZXR1cm4gb2xkUG9zO1xuXHQgIH0sXG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2VxdWFsczogZnVuY3Rpb24gZXF1YWxzKGxlZnQsIHJpZ2h0KSB7XG5cdCAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhcmF0b3IpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKGxlZnQsIHJpZ2h0KTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBsZWZ0ID09PSByaWdodCB8fCB0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSAmJiBsZWZ0LnRvTG93ZXJDYXNlKCkgPT09IHJpZ2h0LnRvTG93ZXJDYXNlKCk7XG5cdCAgICB9XG5cdCAgfSxcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovIC8qaXN0YW5idWwgaWdub3JlIGVuZCovcmVtb3ZlRW1wdHk6IGZ1bmN0aW9uIHJlbW92ZUVtcHR5KGFycmF5KSB7XG5cdCAgICB2YXIgcmV0ID0gW107XG5cdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgIGlmIChhcnJheVtpXSkge1xuXHQgICAgICAgIHJldC5wdXNoKGFycmF5W2ldKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJldDtcblx0ICB9LFxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jYXN0SW5wdXQ6IGZ1bmN0aW9uIGNhc3RJbnB1dCh2YWx1ZSkge1xuXHQgICAgcmV0dXJuIHZhbHVlO1xuXHQgIH0sXG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3Rva2VuaXplOiBmdW5jdGlvbiB0b2tlbml6ZSh2YWx1ZSkge1xuXHQgICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcnKTtcblx0ICB9LFxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9qb2luOiBmdW5jdGlvbiBqb2luKGNoYXJzKSB7XG5cdCAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG5cdCAgfVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGJ1aWxkVmFsdWVzKGRpZmYsIGNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCB1c2VMb25nZXN0VG9rZW4pIHtcblx0ICB2YXIgY29tcG9uZW50UG9zID0gMCxcblx0ICAgICAgY29tcG9uZW50TGVuID0gY29tcG9uZW50cy5sZW5ndGgsXG5cdCAgICAgIG5ld1BvcyA9IDAsXG5cdCAgICAgIG9sZFBvcyA9IDA7XG5cblx0ICBmb3IgKDsgY29tcG9uZW50UG9zIDwgY29tcG9uZW50TGVuOyBjb21wb25lbnRQb3MrKykge1xuXHQgICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcblx0ICAgIGlmICghY29tcG9uZW50LnJlbW92ZWQpIHtcblx0ICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQgJiYgdXNlTG9uZ2VzdFRva2VuKSB7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gbmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KTtcblx0ICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChmdW5jdGlvbiAodmFsdWUsIGkpIHtcblx0ICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IG9sZFN0cmluZ1tvbGRQb3MgKyBpXTtcblx0ICAgICAgICAgIHJldHVybiBvbGRWYWx1ZS5sZW5ndGggPiB2YWx1ZS5sZW5ndGggPyBvbGRWYWx1ZSA6IHZhbHVlO1xuXHQgICAgICAgIH0pO1xuXG5cdCAgICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKHZhbHVlKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4obmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KSk7XG5cdCAgICAgIH1cblx0ICAgICAgbmV3UG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuXHQgICAgICAvLyBDb21tb24gY2FzZVxuXHQgICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCkge1xuXHQgICAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7XG5cdCAgICAgIH1cblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbihvbGRTdHJpbmcuc2xpY2Uob2xkUG9zLCBvbGRQb3MgKyBjb21wb25lbnQuY291bnQpKTtcblx0ICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuXHQgICAgICAvLyBSZXZlcnNlIGFkZCBhbmQgcmVtb3ZlIHNvIHJlbW92ZXMgYXJlIG91dHB1dCBmaXJzdCB0byBtYXRjaCBjb21tb24gY29udmVudGlvblxuXHQgICAgICAvLyBUaGUgZGlmZmluZyBhbGdvcml0aG0gaXMgdGllZCB0byBhZGQgdGhlbiByZW1vdmUgb3V0cHV0IGFuZCB0aGlzIGlzIHRoZSBzaW1wbGVzdFxuXHQgICAgICAvLyByb3V0ZSB0byBnZXQgdGhlIGRlc2lyZWQgb3V0cHV0IHdpdGggbWluaW1hbCBvdmVyaGVhZC5cblx0ICAgICAgaWYgKGNvbXBvbmVudFBvcyAmJiBjb21wb25lbnRzW2NvbXBvbmVudFBvcyAtIDFdLmFkZGVkKSB7XG5cdCAgICAgICAgdmFyIHRtcCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV07XG5cdCAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXSA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcblx0ICAgICAgICBjb21wb25lbnRzW2NvbXBvbmVudFBvc10gPSB0bXA7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICAvLyBTcGVjaWFsIGNhc2UgaGFuZGxlIGZvciB3aGVuIG9uZSB0ZXJtaW5hbCBpcyBpZ25vcmVkIChpLmUuIHdoaXRlc3BhY2UpLlxuXHQgIC8vIEZvciB0aGlzIGNhc2Ugd2UgbWVyZ2UgdGhlIHRlcm1pbmFsIGludG8gdGhlIHByaW9yIHN0cmluZyBhbmQgZHJvcCB0aGUgY2hhbmdlLlxuXHQgIC8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIHN0cmluZyBtb2RlLlxuXHQgIHZhciBsYXN0Q29tcG9uZW50ID0gY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAxXTtcblx0ICBpZiAoY29tcG9uZW50TGVuID4gMSAmJiB0eXBlb2YgbGFzdENvbXBvbmVudC52YWx1ZSA9PT0gJ3N0cmluZycgJiYgKGxhc3RDb21wb25lbnQuYWRkZWQgfHwgbGFzdENvbXBvbmVudC5yZW1vdmVkKSAmJiBkaWZmLmVxdWFscygnJywgbGFzdENvbXBvbmVudC52YWx1ZSkpIHtcblx0ICAgIGNvbXBvbmVudHNbY29tcG9uZW50TGVuIC0gMl0udmFsdWUgKz0gbGFzdENvbXBvbmVudC52YWx1ZTtcblx0ICAgIGNvbXBvbmVudHMucG9wKCk7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIGNvbXBvbmVudHM7XG5cdH1cblxuXHRmdW5jdGlvbiBjbG9uZVBhdGgocGF0aCkge1xuXHQgIHJldHVybiB7IG5ld1BvczogcGF0aC5uZXdQb3MsIGNvbXBvbmVudHM6IHBhdGguY29tcG9uZW50cy5zbGljZSgwKSB9O1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDJKaGMyVXVhbk1pWFN3aWJtRnRaWE1pT2xzaVJHbG1aaUlzSW5CeWIzUnZkSGx3WlNJc0ltUnBabVlpTENKdmJHUlRkSEpwYm1jaUxDSnVaWGRUZEhKcGJtY2lMQ0p2Y0hScGIyNXpJaXdpWTJGc2JHSmhZMnNpTENKelpXeG1JaXdpWkc5dVpTSXNJblpoYkhWbElpd2ljMlYwVkdsdFpXOTFkQ0lzSW5WdVpHVm1hVzVsWkNJc0ltTmhjM1JKYm5CMWRDSXNJbkpsYlc5MlpVVnRjSFI1SWl3aWRHOXJaVzVwZW1VaUxDSnVaWGRNWlc0aUxDSnNaVzVuZEdnaUxDSnZiR1JNWlc0aUxDSmxaR2wwVEdWdVozUm9JaXdpYldGNFJXUnBkRXhsYm1kMGFDSXNJbUpsYzNSUVlYUm9JaXdpYm1WM1VHOXpJaXdpWTI5dGNHOXVaVzUwY3lJc0ltOXNaRkJ2Y3lJc0ltVjRkSEpoWTNSRGIyMXRiMjRpTENKcWIybHVJaXdpWTI5MWJuUWlMQ0psZUdWalJXUnBkRXhsYm1kMGFDSXNJbVJwWVdkdmJtRnNVR0YwYUNJc0ltSmhjMlZRWVhSb0lpd2lZV1JrVUdGMGFDSXNJbkpsYlc5MlpWQmhkR2dpTENKallXNUJaR1FpTENKallXNVNaVzF2ZG1VaUxDSmpiRzl1WlZCaGRHZ2lMQ0p3ZFhOb1EyOXRjRzl1Wlc1MElpd2lZblZwYkdSV1lXeDFaWE1pTENKMWMyVk1iMjVuWlhOMFZHOXJaVzRpTENKbGVHVmpJaXdpY21WMElpd2lZV1JrWldRaUxDSnlaVzF2ZG1Wa0lpd2liR0Z6ZENJc0luQjFjMmdpTENKamIyMXRiMjVEYjNWdWRDSXNJbVZ4ZFdGc2N5SXNJbXhsWm5RaUxDSnlhV2RvZENJc0ltTnZiWEJoY21GMGIzSWlMQ0pwWjI1dmNtVkRZWE5sSWl3aWRHOU1iM2RsY2tOaGMyVWlMQ0poY25KaGVTSXNJbWtpTENKemNHeHBkQ0lzSW1Ob1lYSnpJaXdpWTI5dGNHOXVaVzUwVUc5eklpd2lZMjl0Y0c5dVpXNTBUR1Z1SWl3aVkyOXRjRzl1Wlc1MElpd2ljMnhwWTJVaUxDSnRZWEFpTENKdmJHUldZV3gxWlNJc0luUnRjQ0lzSW14aGMzUkRiMjF3YjI1bGJuUWlMQ0p3YjNBaUxDSndZWFJvSWwwc0ltMWhjSEJwYm1keklqb2lPenM3TkVOQlFYZENRU3hKTzBGQlFWUXNVMEZCVTBFc1NVRkJWQ3hIUVVGblFpeERRVUZGT3p0QlFVVnFRMEVzUzBGQlMwTXNVMEZCVEN4SFFVRnBRanRCUVVGQkxHMUVRVU5tUXl4SlFVUmxMR2RDUVVOV1F5eFRRVVJWTEVWQlEwTkRMRk5CUkVRc1JVRkRNRUk3UVVGQlFTeDNSRUZCWkVNc1QwRkJZeXgxUlVGQlNpeEZRVUZKT3p0QlFVTjJReXhSUVVGSlF5eFhRVUZYUkN4UlFVRlJReXhSUVVGMlFqdEJRVU5CTEZGQlFVa3NUMEZCVDBRc1QwRkJVQ3hMUVVGdFFpeFZRVUYyUWl4RlFVRnRRenRCUVVOcVEwTXNhVUpCUVZkRUxFOUJRVmc3UVVGRFFVRXNaMEpCUVZVc1JVRkJWanRCUVVORU8wRkJRMFFzVTBGQlMwRXNUMEZCVEN4SFFVRmxRU3hQUVVGbU96dEJRVVZCTEZGQlFVbEZMRTlCUVU4c1NVRkJXRHM3UVVGRlFTeGhRVUZUUXl4SlFVRlVMRU5CUVdORExFdEJRV1FzUlVGQmNVSTdRVUZEYmtJc1ZVRkJTVWdzVVVGQlNpeEZRVUZqTzBGQlExcEpMRzFDUVVGWExGbEJRVmM3UVVGQlJVb3NiVUpCUVZOTExGTkJRVlFzUlVGQmIwSkdMRXRCUVhCQ08wRkJRVFpDTEZOQlFYSkVMRVZCUVhWRUxFTkJRWFpFTzBGQlEwRXNaVUZCVHl4SlFVRlFPMEZCUTBRc1QwRklSQ3hOUVVkUE8wRkJRMHdzWlVGQlQwRXNTMEZCVUR0QlFVTkVPMEZCUTBZN08wRkJSVVE3UVVGRFFVNHNaMEpCUVZrc1MwRkJTMU1zVTBGQlRDeERRVUZsVkN4VFFVRm1MRU5CUVZvN1FVRkRRVU1zWjBKQlFWa3NTMEZCUzFFc1UwRkJUQ3hEUVVGbFVpeFRRVUZtTEVOQlFWbzdPMEZCUlVGRUxHZENRVUZaTEV0QlFVdFZMRmRCUVV3c1EwRkJhVUlzUzBGQlMwTXNVVUZCVEN4RFFVRmpXQ3hUUVVGa0xFTkJRV3BDTEVOQlFWbzdRVUZEUVVNc1owSkJRVmtzUzBGQlMxTXNWMEZCVEN4RFFVRnBRaXhMUVVGTFF5eFJRVUZNTEVOQlFXTldMRk5CUVdRc1EwRkJha0lzUTBGQldqczdRVUZGUVN4UlFVRkpWeXhUUVVGVFdDeFZRVUZWV1N4TlFVRjJRanRCUVVGQkxGRkJRU3RDUXl4VFFVRlRaQ3hWUVVGVllTeE5RVUZzUkR0QlFVTkJMRkZCUVVsRkxHRkJRV0VzUTBGQmFrSTdRVUZEUVN4UlFVRkpReXhuUWtGQlowSktMRk5CUVZORkxFMUJRVGRDTzBGQlEwRXNVVUZCU1Vjc1YwRkJWeXhEUVVGRExFVkJRVVZETEZGQlFWRXNRMEZCUXl4RFFVRllMRVZCUVdORExGbEJRVmtzUlVGQk1VSXNSVUZCUkN4RFFVRm1PenRCUVVWQk8wRkJRMEVzVVVGQlNVTXNVMEZCVXl4TFFVRkxReXhoUVVGTUxFTkJRVzFDU2l4VFFVRlRMRU5CUVZRc1EwRkJia0lzUlVGQlowTm9RaXhUUVVGb1F5eEZRVUV5UTBRc1UwRkJNME1zUlVGQmMwUXNRMEZCZEVRc1EwRkJZanRCUVVOQkxGRkJRVWxwUWl4VFFVRlRMRU5CUVZRc1JVRkJXVU1zVFVGQldpeEhRVUZ4UWl4RFFVRnlRaXhKUVVFd1FrNHNUVUZCTVVJc1NVRkJiME5STEZOQlFWTXNRMEZCVkN4SlFVRmpUaXhOUVVGMFJDeEZRVUU0UkR0QlFVTTFSRHRCUVVOQkxHRkJRVTlVTEV0QlFVc3NRMEZCUXl4RlFVRkRReXhQUVVGUExFdEJRVXRuUWl4SlFVRk1MRU5CUVZWeVFpeFRRVUZXTEVOQlFWSXNSVUZCT0VKelFpeFBRVUZQZEVJc1ZVRkJWVmtzVFVGQkwwTXNSVUZCUkN4RFFVRk1MRU5CUVZBN1FVRkRSRHM3UVVGRlJEdEJRVU5CTEdGQlFWTlhMR05CUVZRc1IwRkJNRUk3UVVGRGVFSXNWMEZCU3l4SlFVRkpReXhsUVVGbExFTkJRVU1zUTBGQlJDeEhRVUZMVml4VlFVRTNRaXhGUVVGNVExVXNaMEpCUVdkQ1ZpeFZRVUY2UkN4RlFVRnhSVlVzWjBKQlFXZENMRU5CUVhKR0xFVkJRWGRHTzBGQlEzUkdMRmxCUVVsRExEQkRRVUZLTzBGQlEwRXNXVUZCU1VNc1ZVRkJWVllzVTBGQlUxRXNaVUZCWlN4RFFVRjRRaXhEUVVGa08wRkJRVUVzV1VGRFNVY3NZVUZCWVZnc1UwRkJVMUVzWlVGQlpTeERRVUY0UWl4RFFVUnFRanRCUVVGQkxGbEJSVWxNTEZWQlFWTXNRMEZCUTFFc1lVRkJZVUVzVjBGQlYxWXNUVUZCZUVJc1IwRkJhVU1zUTBGQmJFTXNTVUZCZFVOUExGbEJSbkJFTzBGQlIwRXNXVUZCU1VVc1QwRkJTaXhGUVVGaE8wRkJRMWc3UVVGRFFWWXNiVUpCUVZOUkxHVkJRV1VzUTBGQmVFSXNTVUZCTmtKcVFpeFRRVUUzUWp0QlFVTkVPenRCUVVWRUxGbEJRVWx4UWl4VFFVRlRSaXhYUVVGWFFTeFJRVUZSVkN4TlFVRlNMRWRCUVdsQ0xFTkJRV3BDTEVkQlFYRkNUaXhOUVVFM1F6dEJRVUZCTEZsQlEwbHJRaXhaUVVGWlJpeGpRVUZqTEV0QlFVdFNMRTlCUVc1Q0xFbEJRVFpDUVN4VlFVRlRUaXhOUVVSMFJEdEJRVVZCTEZsQlFVa3NRMEZCUTJVc1RVRkJSQ3hKUVVGWExFTkJRVU5ETEZOQlFXaENMRVZCUVRKQ08wRkJRM3BDTzBGQlEwRmlMRzFDUVVGVFVTeFpRVUZVTEVsQlFYbENha0lzVTBGQmVrSTdRVUZEUVR0QlFVTkVPenRCUVVWRU8wRkJRMEU3UVVGRFFUdEJRVU5CTEZsQlFVa3NRMEZCUTNGQ0xFMUJRVVFzU1VGQldVTXNZVUZCWVVnc1VVRkJVVlFzVFVGQlVpeEhRVUZwUWxVc1YwRkJWMVlzVFVGQmVrUXNSVUZCYTBVN1FVRkRhRVZSTEhGQ1FVRlhTeXhWUVVGVlNDeFZRVUZXTEVOQlFWZzdRVUZEUVhoQ0xHVkJRVXMwUWl4aFFVRk1MRU5CUVcxQ1RpeFRRVUZUVUN4VlFVRTFRaXhGUVVGM1ExZ3NVMEZCZUVNc1JVRkJiVVFzU1VGQmJrUTdRVUZEUkN4VFFVaEVMRTFCUjA4N1FVRkRUR3RDTEhGQ1FVRlhReXhQUVVGWUxFTkJSRXNzUTBGRGFVSTdRVUZEZEVKRUxHMUNRVUZUVWl4TlFVRlVPMEZCUTBGa0xHVkJRVXMwUWl4aFFVRk1MRU5CUVcxQ1RpeFRRVUZUVUN4VlFVRTFRaXhGUVVGM1F5eEpRVUY0UXl4RlFVRTRRMWdzVTBGQk9VTTdRVUZEUkRzN1FVRkZSRmtzYTBKQlFWTm9RaXhMUVVGTGFVSXNZVUZCVEN4RFFVRnRRa3NzVVVGQmJrSXNSVUZCTmtKNlFpeFRRVUUzUWl4RlFVRjNRMFFzVTBGQmVFTXNSVUZCYlVSNVFpeFpRVUZ1UkN4RFFVRlVPenRCUVVWQk8wRkJRMEVzV1VGQlNVTXNVMEZCVTFJc1RVRkJWQ3hIUVVGclFpeERRVUZzUWl4SlFVRjFRazRzVFVGQmRrSXNTVUZCYVVOUkxGVkJRVk1zUTBGQlZDeEpRVUZqVGl4TlFVRnVSQ3hGUVVFeVJEdEJRVU42UkN4cFFrRkJUMVFzUzBGQlN6UkNMRmxCUVZrM1FpeEpRVUZhTEVWQlFXdENjMElzVTBGQlUxQXNWVUZCTTBJc1JVRkJkVU5zUWl4VFFVRjJReXhGUVVGclJFUXNVMEZCYkVRc1JVRkJOa1JKTEV0QlFVczRRaXhsUVVGc1JTeERRVUZNTEVOQlFWQTdRVUZEUkN4VFFVWkVMRTFCUlU4N1FVRkRURHRCUVVOQmFrSXNiVUpCUVZOUkxGbEJRVlFzU1VGQmVVSkRMRkZCUVhwQ08wRkJRMFE3UVVGRFJqczdRVUZGUkZnN1FVRkRSRHM3UVVGRlJEdEJRVU5CTzBGQlEwRTdRVUZEUVN4UlFVRkpXaXhSUVVGS0xFVkJRV003UVVGRFdDeG5Ra0ZCVTJkRExFbEJRVlFzUjBGQlowSTdRVUZEWmpWQ0xHMUNRVUZYTEZsQlFWYzdRVUZEY0VJN1FVRkRRVHRCUVVOQkxHTkJRVWxSTEdGQlFXRkRMR0ZCUVdwQ0xFVkJRV2RETzBGQlF6bENMRzFDUVVGUFlpeFZRVUZRTzBGQlEwUTdPMEZCUlVRc1kwRkJTU3hEUVVGRGNVSXNaMEpCUVV3c1JVRkJkVUk3UVVGRGNrSlhPMEZCUTBRN1FVRkRSaXhUUVZaRUxFVkJWVWNzUTBGV1NEdEJRVmRFTEU5QldrRXNSMEZCUkR0QlFXRkVMRXRCWkVRc1RVRmpUenRCUVVOTUxHRkJRVTl3UWl4alFVRmpReXhoUVVGeVFpeEZRVUZ2UXp0QlFVTnNReXhaUVVGSmIwSXNUVUZCVFZvc1owSkJRVlk3UVVGRFFTeFpRVUZKV1N4SFFVRktMRVZCUVZNN1FVRkRVQ3hwUWtGQlQwRXNSMEZCVUR0QlFVTkVPMEZCUTBZN1FVRkRSanRCUVVOR0xFZEJPVWRqTzBGQlFVRXNiVVJCWjBobVNpeGhRV2hJWlN4NVFrRm5TRVJpTEZWQmFFaERMRVZCWjBoWGEwSXNTMEZvU0Znc1JVRm5TR3RDUXl4UFFXaEliRUlzUlVGblNESkNPMEZCUTNoRExGRkJRVWxETEU5QlFVOXdRaXhYUVVGWFFTeFhRVUZYVGl4TlFVRllMRWRCUVc5Q0xFTkJRUzlDTEVOQlFWZzdRVUZEUVN4UlFVRkpNRUlzVVVGQlVVRXNTMEZCUzBZc1MwRkJUQ3hMUVVGbFFTeExRVUYyUWl4SlFVRm5RMFVzUzBGQlMwUXNUMEZCVEN4TFFVRnBRa0VzVDBGQmNrUXNSVUZCT0VRN1FVRkROVVE3UVVGRFFUdEJRVU5CYmtJc2FVSkJRVmRCTEZkQlFWZE9MRTFCUVZnc1IwRkJiMElzUTBGQkwwSXNTVUZCYjBNc1JVRkJRMVVzVDBGQlQyZENMRXRCUVV0b1FpeExRVUZNTEVkQlFXRXNRMEZCY2tJc1JVRkJkMEpqTEU5QlFVOUJMRXRCUVM5Q0xFVkJRWE5EUXl4VFFVRlRRU3hQUVVFdlF5eEZRVUZ3UXp0QlFVTkVMRXRCU2tRc1RVRkpUenRCUVVOTWJrSXNhVUpCUVZkeFFpeEpRVUZZTEVOQlFXZENMRVZCUVVOcVFpeFBRVUZQTEVOQlFWSXNSVUZCVjJNc1QwRkJUMEVzUzBGQmJFSXNSVUZCZVVKRExGTkJRVk5CTEU5QlFXeERMRVZCUVdoQ08wRkJRMFE3UVVGRFJpeEhRWHBJWXp0QlFVRkJMRzFFUVRCSVptcENMR0ZCTVVobExIbENRVEJJUkVzc1VVRXhTRU1zUlVFd1NGTjZRaXhUUVRGSVZDeEZRVEJJYjBKRUxGTkJNVWh3UWl4RlFUQklLMEo1UWl4WlFURklMMElzUlVFd1NEWkRPMEZCUXpGRUxGRkJRVWxpTEZOQlFWTllMRlZCUVZWWkxFMUJRWFpDTzBGQlFVRXNVVUZEU1VNc1UwRkJVMlFzVlVGQlZXRXNUVUZFZGtJN1FVRkJRU3hSUVVWSlN5eFRRVUZUVVN4VFFVRlRVaXhOUVVaMFFqdEJRVUZCTEZGQlIwbEZMRk5CUVZOR0xGTkJRVk5QTEZsQlNIUkNPMEZCUVVFc1VVRkxTV2RDTEdOQlFXTXNRMEZNYkVJN1FVRk5RU3hYUVVGUGRrSXNVMEZCVXl4RFFVRlVMRWRCUVdGT0xFMUJRV0lzU1VGQmRVSlJMRk5CUVZNc1EwRkJWQ3hIUVVGaFRpeE5RVUZ3UXl4SlFVRTRReXhMUVVGTE5FSXNUVUZCVEN4RFFVRlpla01zVlVGQlZXbENMRk5CUVZNc1EwRkJia0lzUTBGQldpeEZRVUZ0UTJ4Q0xGVkJRVlZ2UWl4VFFVRlRMRU5CUVc1Q0xFTkJRVzVETEVOQlFYSkVMRVZCUVdkSU8wRkJRemxIUmp0QlFVTkJSVHRCUVVOQmNVSTdRVUZEUkRzN1FVRkZSQ3hSUVVGSlFTeFhRVUZLTEVWQlFXbENPMEZCUTJabUxHVkJRVk5RTEZWQlFWUXNRMEZCYjBKeFFpeEpRVUZ3UWl4RFFVRjVRaXhGUVVGRGFrSXNUMEZCVDJ0Q0xGZEJRVklzUlVGQmVrSTdRVUZEUkRzN1FVRkZSR1lzWVVGQlUxSXNUVUZCVkN4SFFVRnJRa0VzVFVGQmJFSTdRVUZEUVN4WFFVRlBSU3hOUVVGUU8wRkJRMFFzUjBFM1NXTTdRVUZCUVN4dFJFRXJTV1p6UWl4TlFTOUpaU3hyUWtFclNWSkRMRWxCTDBsUkxFVkJLMGxHUXl4TFFTOUpSU3hGUVN0SlN6dEJRVU5zUWl4UlFVRkpMRXRCUVVzeFF5eFBRVUZNTEVOQlFXRXlReXhWUVVGcVFpeEZRVUUyUWp0QlFVTXpRaXhoUVVGUExFdEJRVXN6UXl4UFFVRk1MRU5CUVdFeVF5eFZRVUZpTEVOQlFYZENSaXhKUVVGNFFpeEZRVUU0UWtNc1MwRkJPVUlzUTBGQlVEdEJRVU5FTEV0QlJrUXNUVUZGVHp0QlFVTk1MR0ZCUVU5RUxGTkJRVk5ETEV0QlFWUXNTVUZEUkN4TFFVRkxNVU1zVDBGQlRDeERRVUZoTkVNc1ZVRkJZaXhKUVVFeVFrZ3NTMEZCUzBrc1YwRkJUQ3hQUVVGMVFrZ3NUVUZCVFVjc1YwRkJUaXhGUVVSNFJEdEJRVVZFTzBGQlEwWXNSMEYwU21NN1FVRkJRU3h0UkVGMVNtWnlReXhYUVhaS1pTeDFRa0YxU2toelF5eExRWFpLUnl4RlFYVktTVHRCUVVOcVFpeFJRVUZKV2l4TlFVRk5MRVZCUVZZN1FVRkRRU3hUUVVGTExFbEJRVWxoTEVsQlFVa3NRMEZCWWl4RlFVRm5Ra0VzU1VGQlNVUXNUVUZCVFc1RExFMUJRVEZDTEVWQlFXdERiME1zUjBGQmJFTXNSVUZCZFVNN1FVRkRja01zVlVGQlNVUXNUVUZCVFVNc1EwRkJUaXhEUVVGS0xFVkJRV003UVVGRFdtSXNXVUZCU1Vrc1NVRkJTaXhEUVVGVFVTeE5RVUZOUXl4RFFVRk9MRU5CUVZRN1FVRkRSRHRCUVVOR08wRkJRMFFzVjBGQlQySXNSMEZCVUR0QlFVTkVMRWRCTDBwak8wRkJRVUVzYlVSQlowdG1NMElzVTBGb1MyVXNjVUpCWjB0TVNDeExRV2hMU3l4RlFXZExSVHRCUVVObUxGZEJRVTlCTEV0QlFWQTdRVUZEUkN4SFFXeExZenRCUVVGQkxHMUVRVzFMWmtzc1VVRnVTMlVzYjBKQmJVdE9UQ3hMUVc1TFRTeEZRVzFMUXp0QlFVTmtMRmRCUVU5QkxFMUJRVTAwUXl4TFFVRk9MRU5CUVZrc1JVRkJXaXhEUVVGUU8wRkJRMFFzUjBGeVMyTTdRVUZCUVN4dFJFRnpTMlkxUWl4SlFYUkxaU3huUWtGelMxWTJRaXhMUVhSTFZTeEZRWE5MU0R0QlFVTldMRmRCUVU5QkxFMUJRVTAzUWl4SlFVRk9MRU5CUVZjc1JVRkJXQ3hEUVVGUU8wRkJRMFE3UVVGNFMyTXNRMEZCYWtJN08wRkJNa3RCTEZOQlFWTlhMRmRCUVZRc1EwRkJjVUpzUXl4SlFVRnlRaXhGUVVFeVFtOUNMRlZCUVROQ0xFVkJRWFZEYkVJc1UwRkJka01zUlVGQmEwUkVMRk5CUVd4RUxFVkJRVFpFYTBNc1pVRkJOMFFzUlVGQk9FVTdRVUZETlVVc1RVRkJTV3RDTEdWQlFXVXNRMEZCYmtJN1FVRkJRU3hOUVVOSlF5eGxRVUZsYkVNc1YwRkJWMDRzVFVGRU9VSTdRVUZCUVN4TlFVVkpTeXhUUVVGVExFTkJSbUk3UVVGQlFTeE5RVWRKUlN4VFFVRlRMRU5CU0dJN08wRkJTMEVzVTBGQlQyZERMR1ZCUVdWRExGbEJRWFJDTEVWQlFXOURSQ3hqUVVGd1F5eEZRVUZ2UkR0QlFVTnNSQ3hSUVVGSlJTeFpRVUZaYmtNc1YwRkJWMmxETEZsQlFWZ3NRMEZCYUVJN1FVRkRRU3hSUVVGSkxFTkJRVU5GTEZWQlFWVm9RaXhQUVVGbUxFVkJRWGRDTzBGQlEzUkNMRlZCUVVrc1EwRkJRMmRDTEZWQlFWVnFRaXhMUVVGWUxFbEJRVzlDU0N4bFFVRjRRaXhGUVVGNVF6dEJRVU4yUXl4WlFVRkpOVUlzVVVGQlVVd3NWVUZCVlhORUxFdEJRVllzUTBGQlowSnlReXhOUVVGb1FpeEZRVUYzUWtFc1UwRkJVMjlETEZWQlFWVXZRaXhMUVVFelF5eERRVUZhTzBGQlEwRnFRaXhuUWtGQlVVRXNUVUZCVFd0RUxFZEJRVTRzUTBGQlZTeFZRVUZUYkVRc1MwRkJWQ3hGUVVGblFqSkRMRU5CUVdoQ0xFVkJRVzFDTzBGQlEyNURMR05CUVVsUkxGZEJRVmQ2UkN4VlFVRlZiMElzVTBGQlV6WkNMRU5CUVc1Q0xFTkJRV1k3UVVGRFFTeHBRa0ZCVDFFc1UwRkJVelZETEUxQlFWUXNSMEZCYTBKUUxFMUJRVTFQTEUxQlFYaENMRWRCUVdsRE5FTXNVVUZCYWtNc1IwRkJORU51UkN4TFFVRnVSRHRCUVVORUxGTkJTRThzUTBGQlVqczdRVUZMUVdkRUxHdENRVUZWYUVRc1MwRkJWaXhIUVVGclFsQXNTMEZCUzNWQ0xFbEJRVXdzUTBGQlZXaENMRXRCUVZZc1EwRkJiRUk3UVVGRFJDeFBRVkpFTEUxQlVVODdRVUZEVEdkRUxHdENRVUZWYUVRc1MwRkJWaXhIUVVGclFsQXNTMEZCUzNWQ0xFbEJRVXdzUTBGQlZYSkNMRlZCUVZWelJDeExRVUZXTEVOQlFXZENja01zVFVGQmFFSXNSVUZCZDBKQkxGTkJRVk52UXl4VlFVRlZMMElzUzBGQk0wTXNRMEZCVml4RFFVRnNRanRCUVVORU8wRkJRMFJNTEdkQ1FVRlZiME1zVlVGQlZTOUNMRXRCUVhCQ096dEJRVVZCTzBGQlEwRXNWVUZCU1N4RFFVRkRLMElzVlVGQlZXcENMRXRCUVdZc1JVRkJjMEk3UVVGRGNFSnFRaXhyUWtGQlZXdERMRlZCUVZVdlFpeExRVUZ3UWp0QlFVTkVPMEZCUTBZc1MwRnNRa1FzVFVGclFrODdRVUZEVEN0Q0xHZENRVUZWYUVRc1MwRkJWaXhIUVVGclFsQXNTMEZCUzNWQ0xFbEJRVXdzUTBGQlZYUkNMRlZCUVZWMVJDeExRVUZXTEVOQlFXZENia01zVFVGQmFFSXNSVUZCZDBKQkxGTkJRVk5yUXl4VlFVRlZMMElzUzBGQk0wTXNRMEZCVml4RFFVRnNRanRCUVVOQlNDeG5Ra0ZCVld0RExGVkJRVlV2UWl4TFFVRndRanM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVN4VlFVRkpOa0lzWjBKQlFXZENha01zVjBGQlYybERMR1ZCUVdVc1EwRkJNVUlzUlVGQk5rSm1MRXRCUVdwRUxFVkJRWGRFTzBGQlEzUkVMRmxCUVVseFFpeE5RVUZOZGtNc1YwRkJWMmxETEdWQlFXVXNRMEZCTVVJc1EwRkJWanRCUVVOQmFrTXNiVUpCUVZkcFF5eGxRVUZsTEVOQlFURkNMRWxCUVN0Q2FrTXNWMEZCVjJsRExGbEJRVmdzUTBGQkwwSTdRVUZEUVdwRExHMUNRVUZYYVVNc1dVRkJXQ3hKUVVFeVFrMHNSMEZCTTBJN1FVRkRSRHRCUVVOR08wRkJRMFk3TzBGQlJVUTdRVUZEUVR0QlFVTkJPMEZCUTBFc1RVRkJTVU1zWjBKQlFXZENlRU1zVjBGQlYydERMR1ZCUVdVc1EwRkJNVUlzUTBGQmNFSTdRVUZEUVN4TlFVRkpRU3hsUVVGbExFTkJRV1lzU1VGRFJ5eFBRVUZQVFN4alFVRmpja1FzUzBGQmNrSXNTMEZCSzBJc1VVRkViRU1zUzBGRlNYRkVMR05CUVdOMFFpeExRVUZrTEVsQlFYVkNjMElzWTBGQlkzSkNMRTlCUm5wRExFdEJSMGQyUXl4TFFVRkxNa01zVFVGQlRDeERRVUZaTEVWQlFWb3NSVUZCWjBKcFFpeGpRVUZqY2tRc1MwRkJPVUlzUTBGSVVDeEZRVWMyUXp0QlFVTXpRMkVzWlVGQlYydERMR1ZCUVdVc1EwRkJNVUlzUlVGQk5rSXZReXhMUVVFM1FpeEpRVUZ6UTNGRUxHTkJRV055UkN4TFFVRndSRHRCUVVOQllTeGxRVUZYZVVNc1IwRkJXRHRCUVVORU96dEJRVVZFTEZOQlFVOTZReXhWUVVGUU8wRkJRMFE3TzBGQlJVUXNVMEZCVTFrc1UwRkJWQ3hEUVVGdFFqaENMRWxCUVc1Q0xFVkJRWGxDTzBGQlEzWkNMRk5CUVU4c1JVRkJSVE5ETEZGQlFWRXlReXhMUVVGTE0wTXNUVUZCWml4RlFVRjFRa01zV1VGQldUQkRMRXRCUVVzeFF5eFZRVUZNTEVOQlFXZENiME1zUzBGQmFFSXNRMEZCYzBJc1EwRkJkRUlzUTBGQmJrTXNSVUZCVUR0QlFVTkVJaXdpWm1sc1pTSTZJbUpoYzJVdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQm1kVzVqZEdsdmJpQkVhV1ptS0NrZ2UzMWNibHh1UkdsbVppNXdjbTkwYjNSNWNHVWdQU0I3WEc0Z0lHUnBabVlvYjJ4a1UzUnlhVzVuTENCdVpYZFRkSEpwYm1jc0lHOXdkR2x2Ym5NZ1BTQjdmU2tnZTF4dUlDQWdJR3hsZENCallXeHNZbUZqYXlBOUlHOXdkR2x2Ym5NdVkyRnNiR0poWTJzN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdmNIUnBiMjV6SUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0JqWVd4c1ltRmpheUE5SUc5d2RHbHZibk03WEc0Z0lDQWdJQ0J2Y0hScGIyNXpJRDBnZTMwN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWIzQjBhVzl1Y3lBOUlHOXdkR2x2Ym5NN1hHNWNiaUFnSUNCc1pYUWdjMlZzWmlBOUlIUm9hWE03WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJrYjI1bEtIWmhiSFZsS1NCN1hHNGdJQ0FnSUNCcFppQW9ZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQWdJQ0FnYzJWMFZHbHRaVzkxZENobWRXNWpkR2x2YmlncElIc2dZMkZzYkdKaFkyc29kVzVrWldacGJtVmtMQ0IyWVd4MVpTazdJSDBzSURBcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RISjFaVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjJZV3gxWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCQmJHeHZkeUJ6ZFdKamJHRnpjMlZ6SUhSdklHMWhjM05oWjJVZ2RHaGxJR2x1Y0hWMElIQnlhVzl5SUhSdklISjFibTVwYm1kY2JpQWdJQ0J2YkdSVGRISnBibWNnUFNCMGFHbHpMbU5oYzNSSmJuQjFkQ2h2YkdSVGRISnBibWNwTzF4dUlDQWdJRzVsZDFOMGNtbHVaeUE5SUhSb2FYTXVZMkZ6ZEVsdWNIVjBLRzVsZDFOMGNtbHVaeWs3WEc1Y2JpQWdJQ0J2YkdSVGRISnBibWNnUFNCMGFHbHpMbkpsYlc5MlpVVnRjSFI1S0hSb2FYTXVkRzlyWlc1cGVtVW9iMnhrVTNSeWFXNW5LU2s3WEc0Z0lDQWdibVYzVTNSeWFXNW5JRDBnZEdocGN5NXlaVzF2ZG1WRmJYQjBlU2gwYUdsekxuUnZhMlZ1YVhwbEtHNWxkMU4wY21sdVp5a3BPMXh1WEc0Z0lDQWdiR1YwSUc1bGQweGxiaUE5SUc1bGQxTjBjbWx1Wnk1c1pXNW5kR2dzSUc5c1pFeGxiaUE5SUc5c1pGTjBjbWx1Wnk1c1pXNW5kR2c3WEc0Z0lDQWdiR1YwSUdWa2FYUk1aVzVuZEdnZ1BTQXhPMXh1SUNBZ0lHeGxkQ0J0WVhoRlpHbDBUR1Z1WjNSb0lEMGdibVYzVEdWdUlDc2diMnhrVEdWdU8xeHVJQ0FnSUd4bGRDQmlaWE4wVUdGMGFDQTlJRnQ3SUc1bGQxQnZjem9nTFRFc0lHTnZiWEJ2Ym1WdWRITTZJRnRkSUgxZE8xeHVYRzRnSUNBZ0x5OGdVMlZsWkNCbFpHbDBUR1Z1WjNSb0lEMGdNQ3dnYVM1bExpQjBhR1VnWTI5dWRHVnVkQ0J6ZEdGeWRITWdkMmwwYUNCMGFHVWdjMkZ0WlNCMllXeDFaWE5jYmlBZ0lDQnNaWFFnYjJ4a1VHOXpJRDBnZEdocGN5NWxlSFJ5WVdOMFEyOXRiVzl1S0dKbGMzUlFZWFJvV3pCZExDQnVaWGRUZEhKcGJtY3NJRzlzWkZOMGNtbHVaeXdnTUNrN1hHNGdJQ0FnYVdZZ0tHSmxjM1JRWVhSb1d6QmRMbTVsZDFCdmN5QXJJREVnUGowZ2JtVjNUR1Z1SUNZbUlHOXNaRkJ2Y3lBcklERWdQajBnYjJ4a1RHVnVLU0I3WEc0Z0lDQWdJQ0F2THlCSlpHVnVkR2wwZVNCd1pYSWdkR2hsSUdWeGRXRnNhWFI1SUdGdVpDQjBiMnRsYm1sNlpYSmNiaUFnSUNBZ0lISmxkSFZ5YmlCa2IyNWxLRnQ3ZG1Gc2RXVTZJSFJvYVhNdWFtOXBiaWh1WlhkVGRISnBibWNwTENCamIzVnVkRG9nYm1WM1UzUnlhVzVuTG14bGJtZDBhSDFkS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCTllXbHVJSGR2Y210bGNpQnRaWFJvYjJRdUlHTm9aV05yY3lCaGJHd2djR1Z5YlhWMFlYUnBiMjV6SUc5bUlHRWdaMmwyWlc0Z1pXUnBkQ0JzWlc1bmRHZ2dabTl5SUdGalkyVndkR0Z1WTJVdVhHNGdJQ0FnWm5WdVkzUnBiMjRnWlhobFkwVmthWFJNWlc1bmRHZ29LU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JrYVdGbmIyNWhiRkJoZEdnZ1BTQXRNU0FxSUdWa2FYUk1aVzVuZEdnN0lHUnBZV2R2Ym1Gc1VHRjBhQ0E4UFNCbFpHbDBUR1Z1WjNSb095QmthV0ZuYjI1aGJGQmhkR2dnS3owZ01pa2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ1ltRnpaVkJoZEdnN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JoWkdSUVlYUm9JRDBnWW1WemRGQmhkR2hiWkdsaFoyOXVZV3hRWVhSb0lDMGdNVjBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaVzF2ZG1WUVlYUm9JRDBnWW1WemRGQmhkR2hiWkdsaFoyOXVZV3hRWVhSb0lDc2dNVjBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnZiR1JRYjNNZ1BTQW9jbVZ0YjNabFVHRjBhQ0EvSUhKbGJXOTJaVkJoZEdndWJtVjNVRzl6SURvZ01Da2dMU0JrYVdGbmIyNWhiRkJoZEdnN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hoWkdSUVlYUm9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdUbThnYjI1bElHVnNjMlVnYVhNZ1oyOXBibWNnZEc4Z1lYUjBaVzF3ZENCMGJ5QjFjMlVnZEdocGN5QjJZV3gxWlN3Z1kyeGxZWElnYVhSY2JpQWdJQ0FnSUNBZ0lDQmlaWE4wVUdGMGFGdGthV0ZuYjI1aGJGQmhkR2dnTFNBeFhTQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHeGxkQ0JqWVc1QlpHUWdQU0JoWkdSUVlYUm9JQ1ltSUdGa1pGQmhkR2d1Ym1WM1VHOXpJQ3NnTVNBOElHNWxkMHhsYml4Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYmxKbGJXOTJaU0E5SUhKbGJXOTJaVkJoZEdnZ0ppWWdNQ0E4UFNCdmJHUlFiM01nSmlZZ2IyeGtVRzl6SUR3Z2IyeGtUR1Z1TzF4dUlDQWdJQ0FnSUNCcFppQW9JV05oYmtGa1pDQW1KaUFoWTJGdVVtVnRiM1psS1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnU1dZZ2RHaHBjeUJ3WVhSb0lHbHpJR0VnZEdWeWJXbHVZV3dnZEdobGJpQndjblZ1WlZ4dUlDQWdJQ0FnSUNBZ0lHSmxjM1JRWVhSb1cyUnBZV2R2Ym1Gc1VHRjBhRjBnUFNCMWJtUmxabWx1WldRN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBdkx5QlRaV3hsWTNRZ2RHaGxJR1JwWVdkdmJtRnNJSFJvWVhRZ2QyVWdkMkZ1ZENCMGJ5QmljbUZ1WTJnZ1puSnZiUzRnVjJVZ2MyVnNaV04wSUhSb1pTQndjbWx2Y2x4dUlDQWdJQ0FnSUNBdkx5QndZWFJvSUhkb2IzTmxJSEJ2YzJsMGFXOXVJR2x1SUhSb1pTQnVaWGNnYzNSeWFXNW5JR2x6SUhSb1pTQm1ZWEowYUdWemRDQm1jbTl0SUhSb1pTQnZjbWxuYVc1Y2JpQWdJQ0FnSUNBZ0x5OGdZVzVrSUdSdlpYTWdibTkwSUhCaGMzTWdkR2hsSUdKdmRXNWtjeUJ2WmlCMGFHVWdaR2xtWmlCbmNtRndhRnh1SUNBZ0lDQWdJQ0JwWmlBb0lXTmhia0ZrWkNCOGZDQW9ZMkZ1VW1WdGIzWmxJQ1ltSUdGa1pGQmhkR2d1Ym1WM1VHOXpJRHdnY21WdGIzWmxVR0YwYUM1dVpYZFFiM01wS1NCN1hHNGdJQ0FnSUNBZ0lDQWdZbUZ6WlZCaGRHZ2dQU0JqYkc5dVpWQmhkR2dvY21WdGIzWmxVR0YwYUNrN1hHNGdJQ0FnSUNBZ0lDQWdjMlZzWmk1d2RYTm9RMjl0Y0c5dVpXNTBLR0poYzJWUVlYUm9MbU52YlhCdmJtVnVkSE1zSUhWdVpHVm1hVzVsWkN3Z2RISjFaU2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ1ltRnpaVkJoZEdnZ1BTQmhaR1JRWVhSb095QWdJQzh2SUU1dklHNWxaV1FnZEc4Z1kyeHZibVVzSUhkbEozWmxJSEIxYkd4bFpDQnBkQ0JtY205dElIUm9aU0JzYVhOMFhHNGdJQ0FnSUNBZ0lDQWdZbUZ6WlZCaGRHZ3VibVYzVUc5ekt5czdYRzRnSUNBZ0lDQWdJQ0FnYzJWc1ppNXdkWE5vUTI5dGNHOXVaVzUwS0dKaGMyVlFZWFJvTG1OdmJYQnZibVZ1ZEhNc0lIUnlkV1VzSUhWdVpHVm1hVzVsWkNrN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J2YkdSUWIzTWdQU0J6Wld4bUxtVjRkSEpoWTNSRGIyMXRiMjRvWW1GelpWQmhkR2dzSUc1bGQxTjBjbWx1Wnl3Z2IyeGtVM1J5YVc1bkxDQmthV0ZuYjI1aGJGQmhkR2dwTzF4dVhHNGdJQ0FnSUNBZ0lDOHZJRWxtSUhkbElHaGhkbVVnYUdsMElIUm9aU0JsYm1RZ2IyWWdZbTkwYUNCemRISnBibWR6TENCMGFHVnVJSGRsSUdGeVpTQmtiMjVsWEc0Z0lDQWdJQ0FnSUdsbUlDaGlZWE5sVUdGMGFDNXVaWGRRYjNNZ0t5QXhJRDQ5SUc1bGQweGxiaUFtSmlCdmJHUlFiM01nS3lBeElENDlJRzlzWkV4bGJpa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJrYjI1bEtHSjFhV3hrVm1Gc2RXVnpLSE5sYkdZc0lHSmhjMlZRWVhSb0xtTnZiWEJ2Ym1WdWRITXNJRzVsZDFOMGNtbHVaeXdnYjJ4a1UzUnlhVzVuTENCelpXeG1MblZ6WlV4dmJtZGxjM1JVYjJ0bGJpa3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUM4dklFOTBhR1Z5ZDJselpTQjBjbUZqYXlCMGFHbHpJSEJoZEdnZ1lYTWdZU0J3YjNSbGJuUnBZV3dnWTJGdVpHbGtZWFJsSUdGdVpDQmpiMjUwYVc1MVpTNWNiaUFnSUNBZ0lDQWdJQ0JpWlhOMFVHRjBhRnRrYVdGbmIyNWhiRkJoZEdoZElEMGdZbUZ6WlZCaGRHZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWldScGRFeGxibWQwYUNzck8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklGQmxjbVp2Y20xeklIUm9aU0JzWlc1bmRHZ2diMllnWldScGRDQnBkR1Z5WVhScGIyNHVJRWx6SUdFZ1ltbDBJR1oxWjJ4NUlHRnpJSFJvYVhNZ2FHRnpJSFJ2SUhOMWNIQnZjblFnZEdobFhHNGdJQ0FnTHk4Z2MzbHVZeUJoYm1RZ1lYTjVibU1nYlc5a1pTQjNhR2xqYUNCcGN5QnVaWFpsY2lCbWRXNHVJRXh2YjNCeklHOTJaWElnWlhobFkwVmthWFJNWlc1bmRHZ2dkVzUwYVd3Z1lTQjJZV3gxWlZ4dUlDQWdJQzh2SUdseklIQnliMlIxWTJWa0xseHVJQ0FnSUdsbUlDaGpZV3hzWW1GamF5a2dlMXh1SUNBZ0lDQWdLR1oxYm1OMGFXOXVJR1Y0WldNb0tTQjdYRzRnSUNBZ0lDQWdJSE5sZEZScGJXVnZkWFFvWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVkdocGN5QnphRzkxYkdRZ2JtOTBJR2hoY0hCbGJpd2dZblYwSUhkbElIZGhiblFnZEc4Z1ltVWdjMkZtWlM1Y2JpQWdJQ0FnSUNBZ0lDQXZLaUJwYzNSaGJtSjFiQ0JwWjI1dmNtVWdibVY0ZENBcUwxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNobFpHbDBUR1Z1WjNSb0lENGdiV0Y0UldScGRFeGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR05oYkd4aVlXTnJLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tDRmxlR1ZqUldScGRFeGxibWQwYUNncEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGVHVmpLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlMQ0F3S1R0Y2JpQWdJQ0FnSUgwb0tTazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhkb2FXeGxJQ2hsWkdsMFRHVnVaM1JvSUR3OUlHMWhlRVZrYVhSTVpXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJSEpsZENBOUlHVjRaV05GWkdsMFRHVnVaM1JvS0NrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WlhRcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVYwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lIQjFjMmhEYjIxd2IyNWxiblFvWTI5dGNHOXVaVzUwY3l3Z1lXUmtaV1FzSUhKbGJXOTJaV1FwSUh0Y2JpQWdJQ0JzWlhRZ2JHRnpkQ0E5SUdOdmJYQnZibVZ1ZEhOYlkyOXRjRzl1Wlc1MGN5NXNaVzVuZEdnZ0xTQXhYVHRjYmlBZ0lDQnBaaUFvYkdGemRDQW1KaUJzWVhOMExtRmtaR1ZrSUQwOVBTQmhaR1JsWkNBbUppQnNZWE4wTG5KbGJXOTJaV1FnUFQwOUlISmxiVzkyWldRcElIdGNiaUFnSUNBZ0lDOHZJRmRsSUc1bFpXUWdkRzhnWTJ4dmJtVWdhR1Z5WlNCaGN5QjBhR1VnWTI5dGNHOXVaVzUwSUdOc2IyNWxJRzl3WlhKaGRHbHZiaUJwY3lCcWRYTjBYRzRnSUNBZ0lDQXZMeUJoY3lCemFHRnNiRzkzSUdGeWNtRjVJR05zYjI1bFhHNGdJQ0FnSUNCamIyMXdiMjVsYm5SelcyTnZiWEJ2Ym1WdWRITXViR1Z1WjNSb0lDMGdNVjBnUFNCN1kyOTFiblE2SUd4aGMzUXVZMjkxYm5RZ0t5QXhMQ0JoWkdSbFpEb2dZV1JrWldRc0lISmxiVzkyWldRNklISmxiVzkyWldRZ2ZUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnWTI5dGNHOXVaVzUwY3k1d2RYTm9LSHRqYjNWdWREb2dNU3dnWVdSa1pXUTZJR0ZrWkdWa0xDQnlaVzF2ZG1Wa09pQnlaVzF2ZG1Wa0lIMHBPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JpQWdaWGgwY21GamRFTnZiVzF2YmloaVlYTmxVR0YwYUN3Z2JtVjNVM1J5YVc1bkxDQnZiR1JUZEhKcGJtY3NJR1JwWVdkdmJtRnNVR0YwYUNrZ2UxeHVJQ0FnSUd4bGRDQnVaWGRNWlc0Z1BTQnVaWGRUZEhKcGJtY3ViR1Z1WjNSb0xGeHVJQ0FnSUNBZ0lDQnZiR1JNWlc0Z1BTQnZiR1JUZEhKcGJtY3ViR1Z1WjNSb0xGeHVJQ0FnSUNBZ0lDQnVaWGRRYjNNZ1BTQmlZWE5sVUdGMGFDNXVaWGRRYjNNc1hHNGdJQ0FnSUNBZ0lHOXNaRkJ2Y3lBOUlHNWxkMUJ2Y3lBdElHUnBZV2R2Ym1Gc1VHRjBhQ3hjYmx4dUlDQWdJQ0FnSUNCamIyMXRiMjVEYjNWdWRDQTlJREE3WEc0Z0lDQWdkMmhwYkdVZ0tHNWxkMUJ2Y3lBcklERWdQQ0J1WlhkTVpXNGdKaVlnYjJ4a1VHOXpJQ3NnTVNBOElHOXNaRXhsYmlBbUppQjBhR2x6TG1WeGRXRnNjeWh1WlhkVGRISnBibWRiYm1WM1VHOXpJQ3NnTVYwc0lHOXNaRk4wY21sdVoxdHZiR1JRYjNNZ0t5QXhYU2twSUh0Y2JpQWdJQ0FnSUc1bGQxQnZjeXNyTzF4dUlDQWdJQ0FnYjJ4a1VHOXpLeXM3WEc0Z0lDQWdJQ0JqYjIxdGIyNURiM1Z1ZENzck8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaGpiMjF0YjI1RGIzVnVkQ2tnZTF4dUlDQWdJQ0FnWW1GelpWQmhkR2d1WTI5dGNHOXVaVzUwY3k1d2RYTm9LSHRqYjNWdWREb2dZMjl0Ylc5dVEyOTFiblI5S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JpWVhObFVHRjBhQzV1WlhkUWIzTWdQU0J1WlhkUWIzTTdYRzRnSUNBZ2NtVjBkWEp1SUc5c1pGQnZjenRjYmlBZ2ZTeGNibHh1SUNCbGNYVmhiSE1vYkdWbWRDd2djbWxuYUhRcElIdGNiaUFnSUNCcFppQW9kR2hwY3k1dmNIUnBiMjV6TG1OdmJYQmhjbUYwYjNJcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbTl3ZEdsdmJuTXVZMjl0Y0dGeVlYUnZjaWhzWldaMExDQnlhV2RvZENrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnNaV1owSUQwOVBTQnlhV2RvZEZ4dUlDQWdJQ0FnSUNCOGZDQW9kR2hwY3k1dmNIUnBiMjV6TG1sbmJtOXlaVU5oYzJVZ0ppWWdiR1ZtZEM1MGIweHZkMlZ5UTJGelpTZ3BJRDA5UFNCeWFXZG9kQzUwYjB4dmQyVnlRMkZ6WlNncEtUdGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lISmxiVzkyWlVWdGNIUjVLR0Z5Y21GNUtTQjdYRzRnSUNBZ2JHVjBJSEpsZENBOUlGdGRPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dZWEp5WVhrdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJR2xtSUNoaGNuSmhlVnRwWFNrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFF1Y0hWemFDaGhjbkpoZVZ0cFhTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJSDBzWEc0Z0lHTmhjM1JKYm5CMWRDaDJZV3gxWlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIyWVd4MVpUdGNiaUFnZlN4Y2JpQWdkRzlyWlc1cGVtVW9kbUZzZFdVcElIdGNiaUFnSUNCeVpYUjFjbTRnZG1Gc2RXVXVjM0JzYVhRb0p5Y3BPMXh1SUNCOUxGeHVJQ0JxYjJsdUtHTm9ZWEp6S1NCN1hHNGdJQ0FnY21WMGRYSnVJR05vWVhKekxtcHZhVzRvSnljcE8xeHVJQ0I5WEc1OU8xeHVYRzVtZFc1amRHbHZiaUJpZFdsc1pGWmhiSFZsY3loa2FXWm1MQ0JqYjIxd2IyNWxiblJ6TENCdVpYZFRkSEpwYm1jc0lHOXNaRk4wY21sdVp5d2dkWE5sVEc5dVoyVnpkRlJ2YTJWdUtTQjdYRzRnSUd4bGRDQmpiMjF3YjI1bGJuUlFiM01nUFNBd0xGeHVJQ0FnSUNBZ1kyOXRjRzl1Wlc1MFRHVnVJRDBnWTI5dGNHOXVaVzUwY3k1c1pXNW5kR2dzWEc0Z0lDQWdJQ0J1WlhkUWIzTWdQU0F3TEZ4dUlDQWdJQ0FnYjJ4a1VHOXpJRDBnTUR0Y2JseHVJQ0JtYjNJZ0tEc2dZMjl0Y0c5dVpXNTBVRzl6SUR3Z1kyOXRjRzl1Wlc1MFRHVnVPeUJqYjIxd2IyNWxiblJRYjNNckt5a2dlMXh1SUNBZ0lHeGxkQ0JqYjIxd2IyNWxiblFnUFNCamIyMXdiMjVsYm5SelcyTnZiWEJ2Ym1WdWRGQnZjMTA3WEc0Z0lDQWdhV1lnS0NGamIyMXdiMjVsYm5RdWNtVnRiM1psWkNrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0ZqYjIxd2IyNWxiblF1WVdSa1pXUWdKaVlnZFhObFRHOXVaMlZ6ZEZSdmEyVnVLU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQjJZV3gxWlNBOUlHNWxkMU4wY21sdVp5NXpiR2xqWlNodVpYZFFiM01zSUc1bGQxQnZjeUFySUdOdmJYQnZibVZ1ZEM1amIzVnVkQ2s3WEc0Z0lDQWdJQ0FnSUhaaGJIVmxJRDBnZG1Gc2RXVXViV0Z3S0daMWJtTjBhVzl1S0haaGJIVmxMQ0JwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUc5c1pGWmhiSFZsSUQwZ2IyeGtVM1J5YVc1blcyOXNaRkJ2Y3lBcklHbGRPMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ2YkdSV1lXeDFaUzVzWlc1bmRHZ2dQaUIyWVd4MVpTNXNaVzVuZEdnZ1B5QnZiR1JXWVd4MVpTQTZJSFpoYkhWbE8xeHVJQ0FnSUNBZ0lDQjlLVHRjYmx4dUlDQWdJQ0FnSUNCamIyMXdiMjVsYm5RdWRtRnNkV1VnUFNCa2FXWm1MbXB2YVc0b2RtRnNkV1VwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnWTI5dGNHOXVaVzUwTG5aaGJIVmxJRDBnWkdsbVppNXFiMmx1S0c1bGQxTjBjbWx1Wnk1emJHbGpaU2h1WlhkUWIzTXNJRzVsZDFCdmN5QXJJR052YlhCdmJtVnVkQzVqYjNWdWRDa3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdibVYzVUc5eklDczlJR052YlhCdmJtVnVkQzVqYjNWdWREdGNibHh1SUNBZ0lDQWdMeThnUTI5dGJXOXVJR05oYzJWY2JpQWdJQ0FnSUdsbUlDZ2hZMjl0Y0c5dVpXNTBMbUZrWkdWa0tTQjdYRzRnSUNBZ0lDQWdJRzlzWkZCdmN5QXJQU0JqYjIxd2IyNWxiblF1WTI5MWJuUTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdOdmJYQnZibVZ1ZEM1MllXeDFaU0E5SUdScFptWXVhbTlwYmlodmJHUlRkSEpwYm1jdWMyeHBZMlVvYjJ4a1VHOXpMQ0J2YkdSUWIzTWdLeUJqYjIxd2IyNWxiblF1WTI5MWJuUXBLVHRjYmlBZ0lDQWdJRzlzWkZCdmN5QXJQU0JqYjIxd2IyNWxiblF1WTI5MWJuUTdYRzVjYmlBZ0lDQWdJQzh2SUZKbGRtVnljMlVnWVdSa0lHRnVaQ0J5WlcxdmRtVWdjMjhnY21WdGIzWmxjeUJoY21VZ2IzVjBjSFYwSUdacGNuTjBJSFJ2SUcxaGRHTm9JR052YlcxdmJpQmpiMjUyWlc1MGFXOXVYRzRnSUNBZ0lDQXZMeUJVYUdVZ1pHbG1abWx1WnlCaGJHZHZjbWwwYUcwZ2FYTWdkR2xsWkNCMGJ5QmhaR1FnZEdobGJpQnlaVzF2ZG1VZ2IzVjBjSFYwSUdGdVpDQjBhR2x6SUdseklIUm9aU0J6YVcxd2JHVnpkRnh1SUNBZ0lDQWdMeThnY205MWRHVWdkRzhnWjJWMElIUm9aU0JrWlhOcGNtVmtJRzkxZEhCMWRDQjNhWFJvSUcxcGJtbHRZV3dnYjNabGNtaGxZV1F1WEc0Z0lDQWdJQ0JwWmlBb1kyOXRjRzl1Wlc1MFVHOXpJQ1ltSUdOdmJYQnZibVZ1ZEhOYlkyOXRjRzl1Wlc1MFVHOXpJQzBnTVYwdVlXUmtaV1FwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJSFJ0Y0NBOUlHTnZiWEJ2Ym1WdWRITmJZMjl0Y0c5dVpXNTBVRzl6SUMwZ01WMDdYRzRnSUNBZ0lDQWdJR052YlhCdmJtVnVkSE5iWTI5dGNHOXVaVzUwVUc5eklDMGdNVjBnUFNCamIyMXdiMjVsYm5SelcyTnZiWEJ2Ym1WdWRGQnZjMTA3WEc0Z0lDQWdJQ0FnSUdOdmJYQnZibVZ1ZEhOYlkyOXRjRzl1Wlc1MFVHOXpYU0E5SUhSdGNEdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZMeUJUY0dWamFXRnNJR05oYzJVZ2FHRnVaR3hsSUdadmNpQjNhR1Z1SUc5dVpTQjBaWEp0YVc1aGJDQnBjeUJwWjI1dmNtVmtJQ2hwTG1VdUlIZG9hWFJsYzNCaFkyVXBMbHh1SUNBdkx5QkdiM0lnZEdocGN5QmpZWE5sSUhkbElHMWxjbWRsSUhSb1pTQjBaWEp0YVc1aGJDQnBiblJ2SUhSb1pTQndjbWx2Y2lCemRISnBibWNnWVc1a0lHUnliM0FnZEdobElHTm9ZVzVuWlM1Y2JpQWdMeThnVkdocGN5QnBjeUJ2Ym14NUlHRjJZV2xzWVdKc1pTQm1iM0lnYzNSeWFXNW5JRzF2WkdVdVhHNGdJR3hsZENCc1lYTjBRMjl0Y0c5dVpXNTBJRDBnWTI5dGNHOXVaVzUwYzF0amIyMXdiMjVsYm5STVpXNGdMU0F4WFR0Y2JpQWdhV1lnS0dOdmJYQnZibVZ1ZEV4bGJpQStJREZjYmlBZ0lDQWdJQ1ltSUhSNWNHVnZaaUJzWVhOMFEyOXRjRzl1Wlc1MExuWmhiSFZsSUQwOVBTQW5jM1J5YVc1bkoxeHVJQ0FnSUNBZ0ppWWdLR3hoYzNSRGIyMXdiMjVsYm5RdVlXUmtaV1FnZkh3Z2JHRnpkRU52YlhCdmJtVnVkQzV5WlcxdmRtVmtLVnh1SUNBZ0lDQWdKaVlnWkdsbVppNWxjWFZoYkhNb0p5Y3NJR3hoYzNSRGIyMXdiMjVsYm5RdWRtRnNkV1VwS1NCN1hHNGdJQ0FnWTI5dGNHOXVaVzUwYzF0amIyMXdiMjVsYm5STVpXNGdMU0F5WFM1MllXeDFaU0FyUFNCc1lYTjBRMjl0Y0c5dVpXNTBMblpoYkhWbE8xeHVJQ0FnSUdOdmJYQnZibVZ1ZEhNdWNHOXdLQ2s3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnWTI5dGNHOXVaVzUwY3p0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnWTJ4dmJtVlFZWFJvS0hCaGRHZ3BJSHRjYmlBZ2NtVjBkWEp1SUhzZ2JtVjNVRzl6T2lCd1lYUm9MbTVsZDFCdmN5d2dZMjl0Y0c5dVpXNTBjem9nY0dGMGFDNWpiMjF3YjI1bGJuUnpMbk5zYVdObEtEQXBJSDA3WEc1OVhHNGlYWDA9XG5cblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmNoYXJhY3RlckRpZmYgPSB1bmRlZmluZWQ7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkNoYXJzID0gZGlmZkNoYXJzO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Jhc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIGNoYXJhY3RlckRpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jaGFyYWN0ZXJEaWZmID0gbmV3IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZTJbJ2RlZmF1bHQnXSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLygpO1xuXHRmdW5jdGlvbiBkaWZmQ2hhcnMob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcblx0ICByZXR1cm4gY2hhcmFjdGVyRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlrYVdabUwyTm9ZWEpoWTNSbGNpNXFjeUpkTENKdVlXMWxjeUk2V3lKa2FXWm1RMmhoY25NaUxDSmphR0Z5WVdOMFpYSkVhV1ptSWl3aWIyeGtVM1J5SWl3aWJtVjNVM1J5SWl3aWIzQjBhVzl1Y3lJc0ltUnBabVlpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3WjBOQlIyZENRU3hUTEVkQlFVRkJMRk03TzBGQlNHaENPenM3T3pzN2RVSkJSVThzU1VGQlRVTXNlVVpCUVdkQ0xIZEZRVUYwUWp0QlFVTkJMRk5CUVZORUxGTkJRVlFzUTBGQmJVSkZMRTFCUVc1Q0xFVkJRVEpDUXl4TlFVRXpRaXhGUVVGdFEwTXNUMEZCYmtNc1JVRkJORU03UVVGQlJTeFRRVUZQU0N4alFVRmpTU3hKUVVGa0xFTkJRVzFDU0N4TlFVRnVRaXhGUVVFeVFrTXNUVUZCTTBJc1JVRkJiVU5ETEU5QlFXNURMRU5CUVZBN1FVRkJjVVFpTENKbWFXeGxJam9pWTJoaGNtRmpkR1Z5TG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElFUnBabVlnWm5KdmJTQW5MaTlpWVhObEp6dGNibHh1Wlhod2IzSjBJR052Ym5OMElHTm9ZWEpoWTNSbGNrUnBabVlnUFNCdVpYY2dSR2xtWmlncE8xeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUnBabVpEYUdGeWN5aHZiR1JUZEhJc0lHNWxkMU4wY2l3Z2IzQjBhVzl1Y3lrZ2V5QnlaWFIxY200Z1kyaGhjbUZqZEdWeVJHbG1aaTVrYVdabUtHOXNaRk4wY2l3Z2JtVjNVM1J5TENCdmNIUnBiMjV6S1RzZ2ZWeHVJbDE5XG5cblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLndvcmREaWZmID0gdW5kZWZpbmVkO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZXb3JkcyA9IGRpZmZXb3Jkcztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZldvcmRzV2l0aFNwYWNlID0gZGlmZldvcmRzV2l0aFNwYWNlO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Jhc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZSk7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19wYXJhbXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLy8gQmFzZWQgb24gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW5fc2NyaXB0X2luX1VuaWNvZGVcblx0Ly9cblx0Ly8gUmFuZ2VzIGFuZCBleGNlcHRpb25zOlxuXHQvLyBMYXRpbi0xIFN1cHBsZW1lbnQsIDAwODDigJMwMEZGXG5cdC8vICAtIFUrMDBENyAgw5cgTXVsdGlwbGljYXRpb24gc2lnblxuXHQvLyAgLSBVKzAwRjcgIMO3IERpdmlzaW9uIHNpZ25cblx0Ly8gTGF0aW4gRXh0ZW5kZWQtQSwgMDEwMOKAkzAxN0Zcblx0Ly8gTGF0aW4gRXh0ZW5kZWQtQiwgMDE4MOKAkzAyNEZcblx0Ly8gSVBBIEV4dGVuc2lvbnMsIDAyNTDigJMwMkFGXG5cdC8vIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycywgMDJCMOKAkzAyRkZcblx0Ly8gIC0gVSswMkM3ICDLhyAmIzcxMTsgIENhcm9uXG5cdC8vICAtIFUrMDJEOCAgy5ggJiM3Mjg7ICBCcmV2ZVxuXHQvLyAgLSBVKzAyRDkgIMuZICYjNzI5OyAgRG90IEFib3ZlXG5cdC8vICAtIFUrMDJEQSAgy5ogJiM3MzA7ICBSaW5nIEFib3ZlXG5cdC8vICAtIFUrMDJEQiAgy5sgJiM3MzE7ICBPZ29uZWtcblx0Ly8gIC0gVSswMkRDICDLnCAmIzczMjsgIFNtYWxsIFRpbGRlXG5cdC8vICAtIFUrMDJERCAgy50gJiM3MzM7ICBEb3VibGUgQWN1dGUgQWNjZW50XG5cdC8vIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwsIDFFMDDigJMxRUZGXG5cdHZhciBleHRlbmRlZFdvcmRDaGFycyA9IC9eW0EtWmEtelxceEMwLVxcdTAyQzZcXHUwMkM4LVxcdTAyRDdcXHUwMkRFLVxcdTAyRkZcXHUxRTAwLVxcdTFFRkZdKyQvO1xuXG5cdHZhciByZVdoaXRlc3BhY2UgPSAvXFxTLztcblxuXHR2YXIgd29yZERpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi93b3JkRGlmZiA9IG5ldyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UyWydkZWZhdWx0J10gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oKTtcblx0d29yZERpZmYuZXF1YWxzID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG5cdCAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVDYXNlKSB7XG5cdCAgICBsZWZ0ID0gbGVmdC50b0xvd2VyQ2FzZSgpO1xuXHQgICAgcmlnaHQgPSByaWdodC50b0xvd2VyQ2FzZSgpO1xuXHQgIH1cblx0ICByZXR1cm4gbGVmdCA9PT0gcmlnaHQgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UgJiYgIXJlV2hpdGVzcGFjZS50ZXN0KGxlZnQpICYmICFyZVdoaXRlc3BhY2UudGVzdChyaWdodCk7XG5cdH07XG5cdHdvcmREaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgdmFyIHRva2VucyA9IHZhbHVlLnNwbGl0KC8oXFxzK3xcXGIpLyk7XG5cblx0ICAvLyBKb2luIHRoZSBib3VuZGFyeSBzcGxpdHMgdGhhdCB3ZSBkbyBub3QgY29uc2lkZXIgdG8gYmUgYm91bmRhcmllcy4gVGhpcyBpcyBwcmltYXJpbHkgdGhlIGV4dGVuZGVkIExhdGluIGNoYXJhY3RlciBzZXQuXG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdCAgICAvLyBJZiB3ZSBoYXZlIGFuIGVtcHR5IHN0cmluZyBpbiB0aGUgbmV4dCBmaWVsZCBhbmQgd2UgaGF2ZSBvbmx5IHdvcmQgY2hhcnMgYmVmb3JlIGFuZCBhZnRlciwgbWVyZ2Vcblx0ICAgIGlmICghdG9rZW5zW2kgKyAxXSAmJiB0b2tlbnNbaSArIDJdICYmIGV4dGVuZGVkV29yZENoYXJzLnRlc3QodG9rZW5zW2ldKSAmJiBleHRlbmRlZFdvcmRDaGFycy50ZXN0KHRva2Vuc1tpICsgMl0pKSB7XG5cdCAgICAgIHRva2Vuc1tpXSArPSB0b2tlbnNbaSArIDJdO1xuXHQgICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAyKTtcblx0ICAgICAgaS0tO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiB0b2tlbnM7XG5cdH07XG5cblx0ZnVuY3Rpb24gZGlmZldvcmRzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKSB7XG5cdCAgb3B0aW9ucyA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX3BhcmFtcy5nZW5lcmF0ZU9wdGlvbnMpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKG9wdGlvbnMsIHsgaWdub3JlV2hpdGVzcGFjZTogdHJ1ZSB9KTtcblx0ICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG5cdH1cblxuXHRmdW5jdGlvbiBkaWZmV29yZHNXaXRoU3BhY2Uob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcblx0ICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5a2FXWm1MM2R2Y21RdWFuTWlYU3dpYm1GdFpYTWlPbHNpWkdsbVpsZHZjbVJ6SWl3aVpHbG1abGR2Y21SelYybDBhRk53WVdObElpd2laWGgwWlc1a1pXUlhiM0prUTJoaGNuTWlMQ0p5WlZkb2FYUmxjM0JoWTJVaUxDSjNiM0prUkdsbVppSXNJbVZ4ZFdGc2N5SXNJbXhsWm5RaUxDSnlhV2RvZENJc0ltOXdkR2x2Ym5NaUxDSnBaMjV2Y21WRFlYTmxJaXdpZEc5TWIzZGxja05oYzJVaUxDSnBaMjV2Y21WWGFHbDBaWE53WVdObElpd2lkR1Z6ZENJc0luUnZhMlZ1YVhwbElpd2lkbUZzZFdVaUxDSjBiMnRsYm5NaUxDSnpjR3hwZENJc0lta2lMQ0pzWlc1bmRHZ2lMQ0p6Y0d4cFkyVWlMQ0p2YkdSVGRISWlMQ0p1WlhkVGRISWlMQ0prYVdabUlsMHNJbTFoY0hCcGJtZHpJam9pT3pzN08yZERRVzFFWjBKQkxGTXNSMEZCUVVFc1V6dDVSRUZMUVVNc2EwSXNSMEZCUVVFc2EwSTdPMEZCZUVSb1FqczdPenQxUWtGRFFUczdPenQzUWtGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeEpRVUZOUXl4dlFrRkJiMElzSzBSQlFURkNPenRCUVVWQkxFbEJRVTFETEdWQlFXVXNTVUZCY2tJN08wRkJSVThzU1VGQlRVTXNLMFZCUVZjc2QwVkJRV3BDTzBGQlExQkJMRk5CUVZORExFMUJRVlFzUjBGQmEwSXNWVUZCVTBNc1NVRkJWQ3hGUVVGbFF5eExRVUZtTEVWQlFYTkNPMEZCUTNSRExFMUJRVWtzUzBGQlMwTXNUMEZCVEN4RFFVRmhReXhWUVVGcVFpeEZRVUUyUWp0QlFVTXpRa2dzVjBGQlQwRXNTMEZCUzBrc1YwRkJUQ3hGUVVGUU8wRkJRMEZJTEZsQlFWRkJMRTFCUVUxSExGZEJRVTRzUlVGQlVqdEJRVU5FTzBGQlEwUXNVMEZCVDBvc1UwRkJVME1zUzBGQlZDeEpRVUZ0UWl4TFFVRkxReXhQUVVGTUxFTkJRV0ZITEdkQ1FVRmlMRWxCUVdsRExFTkJRVU5TTEdGQlFXRlRMRWxCUVdJc1EwRkJhMEpPTEVsQlFXeENMRU5CUVd4RExFbEJRVFpFTEVOQlFVTklMR0ZCUVdGVExFbEJRV0lzUTBGQmEwSk1MRXRCUVd4Q0xFTkJRWGhHTzBGQlEwUXNRMEZPUkR0QlFVOUJTQ3hUUVVGVFV5eFJRVUZVTEVkQlFXOUNMRlZCUVZORExFdEJRVlFzUlVGQlowSTdRVUZEYkVNc1RVRkJTVU1zVTBGQlUwUXNUVUZCVFVVc1MwRkJUaXhEUVVGWkxGVkJRVm9zUTBGQllqczdRVUZGUVR0QlFVTkJMRTlCUVVzc1NVRkJTVU1zU1VGQlNTeERRVUZpTEVWQlFXZENRU3hKUVVGSlJpeFBRVUZQUnl4TlFVRlFMRWRCUVdkQ0xFTkJRWEJETEVWQlFYVkRSQ3hIUVVGMlF5eEZRVUUwUXp0QlFVTXhRenRCUVVOQkxGRkJRVWtzUTBGQlEwWXNUMEZCVDBVc1NVRkJTU3hEUVVGWUxFTkJRVVFzU1VGQmEwSkdMRTlCUVU5RkxFbEJRVWtzUTBGQldDeERRVUZzUWl4SlFVTkxaaXhyUWtGQmEwSlZMRWxCUVd4Q0xFTkJRWFZDUnl4UFFVRlBSU3hEUVVGUUxFTkJRWFpDTEVOQlJFd3NTVUZGUzJZc2EwSkJRV3RDVlN4SlFVRnNRaXhEUVVGMVFrY3NUMEZCVDBVc1NVRkJTU3hEUVVGWUxFTkJRWFpDTEVOQlJsUXNSVUZGWjBRN1FVRkRPVU5HTEdGQlFVOUZMRU5CUVZBc1MwRkJZVVlzVDBGQlQwVXNTVUZCU1N4RFFVRllMRU5CUVdJN1FVRkRRVVlzWVVGQlQwa3NUVUZCVUN4RFFVRmpSaXhKUVVGSkxFTkJRV3hDTEVWQlFYRkNMRU5CUVhKQ08wRkJRMEZCTzBGQlEwUTdRVUZEUmpzN1FVRkZSQ3hUUVVGUFJpeE5RVUZRTzBGQlEwUXNRMEZvUWtRN08wRkJhMEpQTEZOQlFWTm1MRk5CUVZRc1EwRkJiVUp2UWl4TlFVRnVRaXhGUVVFeVFrTXNUVUZCTTBJc1JVRkJiVU5pTEU5QlFXNURMRVZCUVRSRE8wRkJRMnBFUVN4WlFVRlZMRGhGUVVGblFrRXNUMEZCYUVJc1JVRkJlVUlzUlVGQlEwY3NhMEpCUVd0Q0xFbEJRVzVDTEVWQlFYcENMRU5CUVZZN1FVRkRRU3hUUVVGUFVDeFRRVUZUYTBJc1NVRkJWQ3hEUVVGalJpeE5RVUZrTEVWQlFYTkNReXhOUVVGMFFpeEZRVUU0UW1Jc1QwRkJPVUlzUTBGQlVEdEJRVU5FT3p0QlFVVk5MRk5CUVZOUUxHdENRVUZVTEVOQlFUUkNiVUlzVFVGQk5VSXNSVUZCYjBORExFMUJRWEJETEVWQlFUUkRZaXhQUVVFMVF5eEZRVUZ4UkR0QlFVTXhSQ3hUUVVGUFNpeFRRVUZUYTBJc1NVRkJWQ3hEUVVGalJpeE5RVUZrTEVWQlFYTkNReXhOUVVGMFFpeEZRVUU0UW1Jc1QwRkJPVUlzUTBGQlVEdEJRVU5FSWl3aVptbHNaU0k2SW5kdmNtUXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnUkdsbVppQm1jbTl0SUNjdUwySmhjMlVuTzF4dWFXMXdiM0owSUh0blpXNWxjbUYwWlU5d2RHbHZibk45SUdaeWIyMGdKeTR1TDNWMGFXd3ZjR0Z5WVcxekp6dGNibHh1THk4Z1FtRnpaV1FnYjI0Z2FIUjBjSE02THk5bGJpNTNhV3RwY0dWa2FXRXViM0puTDNkcGEya3ZUR0YwYVc1ZmMyTnlhWEIwWDJsdVgxVnVhV052WkdWY2JpOHZYRzR2THlCU1lXNW5aWE1nWVc1a0lHVjRZMlZ3ZEdsdmJuTTZYRzR2THlCTVlYUnBiaTB4SUZOMWNIQnNaVzFsYm5Rc0lEQXdPRERpZ0pNd01FWkdYRzR2THlBZ0xTQlZLekF3UkRjZ0lNT1hJRTExYkhScGNHeHBZMkYwYVc5dUlITnBaMjVjYmk4dklDQXRJRlVyTURCR055QWd3N2NnUkdsMmFYTnBiMjRnYzJsbmJseHVMeThnVEdGMGFXNGdSWGgwWlc1a1pXUXRRU3dnTURFd01PS0FrekF4TjBaY2JpOHZJRXhoZEdsdUlFVjRkR1Z1WkdWa0xVSXNJREF4T0REaWdKTXdNalJHWEc0dkx5QkpVRUVnUlhoMFpXNXphVzl1Y3l3Z01ESTFNT0tBa3pBeVFVWmNiaTh2SUZOd1lXTnBibWNnVFc5a2FXWnBaWElnVEdWMGRHVnljeXdnTURKQ01PS0FrekF5UmtaY2JpOHZJQ0F0SUZVck1ESkROeUFneTRjZ0ppTTNNVEU3SUNCRFlYSnZibHh1THk4Z0lDMGdWU3N3TWtRNElDRExtQ0FtSXpjeU9Ec2dJRUp5WlhabFhHNHZMeUFnTFNCVkt6QXlSRGtnSU11WklDWWpOekk1T3lBZ1JHOTBJRUZpYjNabFhHNHZMeUFnTFNCVkt6QXlSRUVnSU11YUlDWWpOek13T3lBZ1VtbHVaeUJCWW05MlpWeHVMeThnSUMwZ1ZTc3dNa1JDSUNETG15QW1JemN6TVRzZ0lFOW5iMjVsYTF4dUx5OGdJQzBnVlNzd01rUkRJQ0RMbkNBbUl6Y3pNanNnSUZOdFlXeHNJRlJwYkdSbFhHNHZMeUFnTFNCVkt6QXlSRVFnSU11ZElDWWpOek16T3lBZ1JHOTFZbXhsSUVGamRYUmxJRUZqWTJWdWRGeHVMeThnVEdGMGFXNGdSWGgwWlc1a1pXUWdRV1JrYVhScGIyNWhiQ3dnTVVVd01PS0FrekZGUmtaY2JtTnZibk4wSUdWNGRHVnVaR1ZrVjI5eVpFTm9ZWEp6SUQwZ0wxNWJZUzE2UVMxYVhGeDFlME13ZlMxY1hIVjdSa1o5WEZ4MWUwUTRmUzFjWEhWN1JqWjlYRngxZTBZNGZTMWNYSFY3TWtNMmZWeGNkWHN5UXpoOUxWeGNkWHN5UkRkOVhGeDFlekpFUlgwdFhGeDFlekpHUm4xY1hIVjdNVVV3TUgwdFhGeDFlekZGUmtaOVhTc2tMM1U3WEc1Y2JtTnZibk4wSUhKbFYyaHBkR1Z6Y0dGalpTQTlJQzljWEZNdk8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2QyOXlaRVJwWm1ZZ1BTQnVaWGNnUkdsbVppZ3BPMXh1ZDI5eVpFUnBabVl1WlhGMVlXeHpJRDBnWm5WdVkzUnBiMjRvYkdWbWRDd2djbWxuYUhRcElIdGNiaUFnYVdZZ0tIUm9hWE11YjNCMGFXOXVjeTVwWjI1dmNtVkRZWE5sS1NCN1hHNGdJQ0FnYkdWbWRDQTlJR3hsWm5RdWRHOU1iM2RsY2tOaGMyVW9LVHRjYmlBZ0lDQnlhV2RvZENBOUlISnBaMmgwTG5SdlRHOTNaWEpEWVhObEtDazdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHeGxablFnUFQwOUlISnBaMmgwSUh4OElDaDBhR2x6TG05d2RHbHZibk11YVdkdWIzSmxWMmhwZEdWemNHRmpaU0FtSmlBaGNtVlhhR2wwWlhOd1lXTmxMblJsYzNRb2JHVm1kQ2tnSmlZZ0lYSmxWMmhwZEdWemNHRmpaUzUwWlhOMEtISnBaMmgwS1NrN1hHNTlPMXh1ZDI5eVpFUnBabVl1ZEc5clpXNXBlbVVnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnNaWFFnZEc5clpXNXpJRDBnZG1Gc2RXVXVjM0JzYVhRb0x5aGNYSE1yZkZ4Y1lpa3ZLVHRjYmx4dUlDQXZMeUJLYjJsdUlIUm9aU0JpYjNWdVpHRnllU0J6Y0d4cGRITWdkR2hoZENCM1pTQmtieUJ1YjNRZ1kyOXVjMmxrWlhJZ2RHOGdZbVVnWW05MWJtUmhjbWxsY3k0Z1ZHaHBjeUJwY3lCd2NtbHRZWEpwYkhrZ2RHaGxJR1Y0ZEdWdVpHVmtJRXhoZEdsdUlHTm9ZWEpoWTNSbGNpQnpaWFF1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkRzlyWlc1ekxteGxibWQwYUNBdElERTdJR2tyS3lrZ2UxeHVJQ0FnSUM4dklFbG1JSGRsSUdoaGRtVWdZVzRnWlcxd2RIa2djM1J5YVc1bklHbHVJSFJvWlNCdVpYaDBJR1pwWld4a0lHRnVaQ0IzWlNCb1lYWmxJRzl1YkhrZ2QyOXlaQ0JqYUdGeWN5QmlaV1p2Y21VZ1lXNWtJR0ZtZEdWeUxDQnRaWEpuWlZ4dUlDQWdJR2xtSUNnaGRHOXJaVzV6VzJrZ0t5QXhYU0FtSmlCMGIydGxibk5iYVNBcklESmRYRzRnSUNBZ0lDQWdJQ0FnSmlZZ1pYaDBaVzVrWldSWGIzSmtRMmhoY25NdWRHVnpkQ2gwYjJ0bGJuTmJhVjBwWEc0Z0lDQWdJQ0FnSUNBZ0ppWWdaWGgwWlc1a1pXUlhiM0prUTJoaGNuTXVkR1Z6ZENoMGIydGxibk5iYVNBcklESmRLU2tnZTF4dUlDQWdJQ0FnZEc5clpXNXpXMmxkSUNzOUlIUnZhMlZ1YzF0cElDc2dNbDA3WEc0Z0lDQWdJQ0IwYjJ0bGJuTXVjM0JzYVdObEtHa2dLeUF4TENBeUtUdGNiaUFnSUNBZ0lHa3RMVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdkRzlyWlc1ek8xeHVmVHRjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdScFptWlhiM0prY3lodmJHUlRkSElzSUc1bGQxTjBjaXdnYjNCMGFXOXVjeWtnZTF4dUlDQnZjSFJwYjI1eklEMGdaMlZ1WlhKaGRHVlBjSFJwYjI1ektHOXdkR2x2Ym5Nc0lIdHBaMjV2Y21WWGFHbDBaWE53WVdObE9pQjBjblZsZlNrN1hHNGdJSEpsZEhWeWJpQjNiM0prUkdsbVppNWthV1ptS0c5c1pGTjBjaXdnYm1WM1UzUnlMQ0J2Y0hScGIyNXpLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUnBabVpYYjNKa2MxZHBkR2hUY0dGalpTaHZiR1JUZEhJc0lHNWxkMU4wY2l3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0J5WlhSMWNtNGdkMjl5WkVScFptWXVaR2xtWmlodmJHUlRkSElzSUc1bGQxTjBjaXdnYjNCMGFXOXVjeWs3WEc1OVhHNGlYWDA9XG5cblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2dlbmVyYXRlT3B0aW9ucyA9IGdlbmVyYXRlT3B0aW9ucztcblx0ZnVuY3Rpb24gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG5cdCAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICBkZWZhdWx0cy5jYWxsYmFjayA9IG9wdGlvbnM7XG5cdCAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG5cdCAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMpIHtcblx0ICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0ICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcblx0ICAgICAgICBkZWZhdWx0c1tuYW1lXSA9IG9wdGlvbnNbbmFtZV07XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdCAgcmV0dXJuIGRlZmF1bHRzO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OTFkR2xzTDNCaGNtRnRjeTVxY3lKZExDSnVZVzFsY3lJNld5Sm5aVzVsY21GMFpVOXdkR2x2Ym5NaUxDSnZjSFJwYjI1eklpd2laR1ZtWVhWc2RITWlMQ0pqWVd4c1ltRmpheUlzSW01aGJXVWlMQ0pvWVhOUGQyNVFjbTl3WlhKMGVTSmRMQ0p0WVhCd2FXNW5jeUk2SWpzN08yZERRVUZuUWtFc1pTeEhRVUZCUVN4bE8wRkJRVlFzVTBGQlUwRXNaVUZCVkN4RFFVRjVRa01zVDBGQmVrSXNSVUZCYTBORExGRkJRV3hETEVWQlFUUkRPMEZCUTJwRUxFMUJRVWtzVDBGQlQwUXNUMEZCVUN4TFFVRnRRaXhWUVVGMlFpeEZRVUZ0UXp0QlFVTnFRME1zWVVGQlUwTXNVVUZCVkN4SFFVRnZRa1lzVDBGQmNFSTdRVUZEUkN4SFFVWkVMRTFCUlU4c1NVRkJTVUVzVDBGQlNpeEZRVUZoTzBGQlEyeENMRk5CUVVzc1NVRkJTVWNzU1VGQlZDeEpRVUZwUWtnc1QwRkJha0lzUlVGQk1FSTdRVUZEZUVJN1FVRkRRU3hWUVVGSlFTeFJRVUZSU1N4alFVRlNMRU5CUVhWQ1JDeEpRVUYyUWl4RFFVRktMRVZCUVd0RE8wRkJRMmhEUml4cFFrRkJVMFVzU1VGQlZDeEpRVUZwUWtnc1VVRkJVVWNzU1VGQlVpeERRVUZxUWp0QlFVTkVPMEZCUTBZN1FVRkRSanRCUVVORUxGTkJRVTlHTEZGQlFWQTdRVUZEUkNJc0ltWnBiR1VpT2lKd1lYSmhiWE11YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1oyVnVaWEpoZEdWUGNIUnBiMjV6S0c5d2RHbHZibk1zSUdSbFptRjFiSFJ6S1NCN1hHNGdJR2xtSUNoMGVYQmxiMllnYjNCMGFXOXVjeUE5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lHUmxabUYxYkhSekxtTmhiR3hpWVdOcklEMGdiM0IwYVc5dWN6dGNiaUFnZlNCbGJITmxJR2xtSUNodmNIUnBiMjV6S1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYm1GdFpTQnBiaUJ2Y0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0F2S2lCcGMzUmhibUoxYkNCcFoyNXZjbVVnWld4elpTQXFMMXh1SUNBZ0lDQWdhV1lnS0c5d2RHbHZibk11YUdGelQzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdaR1ZtWVhWc2RITmJibUZ0WlYwZ1BTQnZjSFJwYjI1elcyNWhiV1ZkTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdaR1ZtWVhWc2RITTdYRzU5WEc0aVhYMD1cblxuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMubGluZURpZmYgPSB1bmRlZmluZWQ7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkxpbmVzID0gZGlmZkxpbmVzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmVHJpbW1lZExpbmVzID0gZGlmZlRyaW1tZWRMaW5lcztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fcGFyYW1zID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIGxpbmVEaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovbGluZURpZmYgPSBuZXcgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCk7XG5cdGxpbmVEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgdmFyIHJldExpbmVzID0gW10sXG5cdCAgICAgIGxpbmVzQW5kTmV3bGluZXMgPSB2YWx1ZS5zcGxpdCgvKFxcbnxcXHJcXG4pLyk7XG5cblx0ICAvLyBJZ25vcmUgdGhlIGZpbmFsIGVtcHR5IHRva2VuIHRoYXQgb2NjdXJzIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGEgbmV3IGxpbmVcblx0ICBpZiAoIWxpbmVzQW5kTmV3bGluZXNbbGluZXNBbmROZXdsaW5lcy5sZW5ndGggLSAxXSkge1xuXHQgICAgbGluZXNBbmROZXdsaW5lcy5wb3AoKTtcblx0ICB9XG5cblx0ICAvLyBNZXJnZSB0aGUgY29udGVudCBhbmQgbGluZSBzZXBhcmF0b3JzIGludG8gc2luZ2xlIHRva2Vuc1xuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXNBbmROZXdsaW5lcy5sZW5ndGg7IGkrKykge1xuXHQgICAgdmFyIGxpbmUgPSBsaW5lc0FuZE5ld2xpbmVzW2ldO1xuXG5cdCAgICBpZiAoaSAlIDIgJiYgIXRoaXMub3B0aW9ucy5uZXdsaW5lSXNUb2tlbikge1xuXHQgICAgICByZXRMaW5lc1tyZXRMaW5lcy5sZW5ndGggLSAxXSArPSBsaW5lO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVXaGl0ZXNwYWNlKSB7XG5cdCAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldExpbmVzLnB1c2gobGluZSk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHJldExpbmVzO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGRpZmZMaW5lcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcblx0ICByZXR1cm4gbGluZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xuXHR9XG5cdGZ1bmN0aW9uIGRpZmZUcmltbWVkTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG5cdCAgdmFyIG9wdGlvbnMgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9wYXJhbXMuZ2VuZXJhdGVPcHRpb25zKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyhjYWxsYmFjaywgeyBpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlIH0pO1xuXHQgIHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlrYVdabUwyeHBibVV1YW5NaVhTd2libUZ0WlhNaU9sc2laR2xtWmt4cGJtVnpJaXdpWkdsbVpsUnlhVzF0WldSTWFXNWxjeUlzSW14cGJtVkVhV1ptSWl3aWRHOXJaVzVwZW1VaUxDSjJZV3gxWlNJc0luSmxkRXhwYm1Weklpd2liR2x1WlhOQmJtUk9aWGRzYVc1bGN5SXNJbk53YkdsMElpd2liR1Z1WjNSb0lpd2ljRzl3SWl3aWFTSXNJbXhwYm1VaUxDSnZjSFJwYjI1eklpd2libVYzYkdsdVpVbHpWRzlyWlc0aUxDSnBaMjV2Y21WWGFHbDBaWE53WVdObElpd2lkSEpwYlNJc0luQjFjMmdpTENKdmJHUlRkSElpTENKdVpYZFRkSElpTENKallXeHNZbUZqYXlJc0ltUnBabVlpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3WjBOQk9FSm5Ra0VzVXl4SFFVRkJRU3hUTzNsRVFVTkJReXhuUWl4SFFVRkJRU3huUWpzN1FVRXZRbWhDT3pzN08zVkNRVU5CT3pzN08zVkNRVVZQTEVsQlFVMURMQ3RGUVVGWExIZEZRVUZxUWp0QlFVTlFRU3hUUVVGVFF5eFJRVUZVTEVkQlFXOUNMRlZCUVZORExFdEJRVlFzUlVGQlowSTdRVUZEYkVNc1RVRkJTVU1zVjBGQlZ5eEZRVUZtTzBGQlFVRXNUVUZEU1VNc2JVSkJRVzFDUml4TlFVRk5SeXhMUVVGT0xFTkJRVmtzVjBGQldpeERRVVIyUWpzN1FVRkhRVHRCUVVOQkxFMUJRVWtzUTBGQlEwUXNhVUpCUVdsQ1FTeHBRa0ZCYVVKRkxFMUJRV3BDTEVkQlFUQkNMRU5CUVRORExFTkJRVXdzUlVGQmIwUTdRVUZEYkVSR0xIRkNRVUZwUWtjc1IwRkJha0k3UVVGRFJEczdRVUZGUkR0QlFVTkJMRTlCUVVzc1NVRkJTVU1zU1VGQlNTeERRVUZpTEVWQlFXZENRU3hKUVVGSlNpeHBRa0ZCYVVKRkxFMUJRWEpETEVWQlFUWkRSU3hIUVVFM1F5eEZRVUZyUkR0QlFVTm9SQ3hSUVVGSlF5eFBRVUZQVEN4cFFrRkJhVUpKTEVOQlFXcENMRU5CUVZnN08wRkJSVUVzVVVGQlNVRXNTVUZCU1N4RFFVRktMRWxCUVZNc1EwRkJReXhMUVVGTFJTeFBRVUZNTEVOQlFXRkRMR05CUVROQ0xFVkJRVEpETzBGQlEzcERVaXhsUVVGVFFTeFRRVUZUUnl4TlFVRlVMRWRCUVd0Q0xFTkJRVE5DTEV0QlFXbERSeXhKUVVGcVF6dEJRVU5FTEV0QlJrUXNUVUZGVHp0QlFVTk1MRlZCUVVrc1MwRkJTME1zVDBGQlRDeERRVUZoUlN4blFrRkJha0lzUlVGQmJVTTdRVUZEYWtOSUxHVkJRVTlCTEV0QlFVdEpMRWxCUVV3c1JVRkJVRHRCUVVORU8wRkJRMFJXTEdWQlFWTlhMRWxCUVZRc1EwRkJZMHdzU1VGQlpEdEJRVU5FTzBGQlEwWTdPMEZCUlVRc1UwRkJUMDRzVVVGQlVEdEJRVU5FTEVOQmVFSkVPenRCUVRCQ1R5eFRRVUZUVEN4VFFVRlVMRU5CUVcxQ2FVSXNUVUZCYmtJc1JVRkJNa0pETEUxQlFUTkNMRVZCUVcxRFF5eFJRVUZ1UXl4RlFVRTJRenRCUVVGRkxGTkJRVTlxUWl4VFFVRlRhMElzU1VGQlZDeERRVUZqU0N4TlFVRmtMRVZCUVhOQ1F5eE5RVUYwUWl4RlFVRTRRa01zVVVGQk9VSXNRMEZCVUR0QlFVRnBSRHRCUVVOb1J5eFRRVUZUYkVJc1owSkJRVlFzUTBGQk1FSm5RaXhOUVVFeFFpeEZRVUZyUTBNc1RVRkJiRU1zUlVGQk1FTkRMRkZCUVRGRExFVkJRVzlFTzBGQlEzcEVMRTFCUVVsUUxGVkJRVlVzT0VWQlFXZENUeXhSUVVGb1FpeEZRVUV3UWl4RlFVRkRUQ3hyUWtGQmEwSXNTVUZCYmtJc1JVRkJNVUlzUTBGQlpEdEJRVU5CTEZOQlFVOWFMRk5CUVZOclFpeEpRVUZVTEVOQlFXTklMRTFCUVdRc1JVRkJjMEpETEUxQlFYUkNMRVZCUVRoQ1RpeFBRVUU1UWl4RFFVRlFPMEZCUTBRaUxDSm1hV3hsSWpvaWJHbHVaUzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCRWFXWm1JR1p5YjIwZ0p5NHZZbUZ6WlNjN1hHNXBiWEJ2Y25RZ2UyZGxibVZ5WVhSbFQzQjBhVzl1YzMwZ1puSnZiU0FuTGk0dmRYUnBiQzl3WVhKaGJYTW5PMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdiR2x1WlVScFptWWdQU0J1WlhjZ1JHbG1aaWdwTzF4dWJHbHVaVVJwWm1ZdWRHOXJaVzVwZW1VZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0JzWlhRZ2NtVjBUR2x1WlhNZ1BTQmJYU3hjYmlBZ0lDQWdJR3hwYm1WelFXNWtUbVYzYkdsdVpYTWdQU0IyWVd4MVpTNXpjR3hwZENndktGeGNibnhjWEhKY1hHNHBMeWs3WEc1Y2JpQWdMeThnU1dkdWIzSmxJSFJvWlNCbWFXNWhiQ0JsYlhCMGVTQjBiMnRsYmlCMGFHRjBJRzlqWTNWeWN5QnBaaUIwYUdVZ2MzUnlhVzVuSUdWdVpITWdkMmwwYUNCaElHNWxkeUJzYVc1bFhHNGdJR2xtSUNnaGJHbHVaWE5CYm1ST1pYZHNhVzVsYzF0c2FXNWxjMEZ1WkU1bGQyeHBibVZ6TG14bGJtZDBhQ0F0SURGZEtTQjdYRzRnSUNBZ2JHbHVaWE5CYm1ST1pYZHNhVzVsY3k1d2IzQW9LVHRjYmlBZ2ZWeHVYRzRnSUM4dklFMWxjbWRsSUhSb1pTQmpiMjUwWlc1MElHRnVaQ0JzYVc1bElITmxjR0Z5WVhSdmNuTWdhVzUwYnlCemFXNW5iR1VnZEc5clpXNXpYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JHbHVaWE5CYm1ST1pYZHNhVzVsY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHeGxkQ0JzYVc1bElEMGdiR2x1WlhOQmJtUk9aWGRzYVc1bGMxdHBYVHRjYmx4dUlDQWdJR2xtSUNocElDVWdNaUFtSmlBaGRHaHBjeTV2Y0hScGIyNXpMbTVsZDJ4cGJtVkpjMVJ2YTJWdUtTQjdYRzRnSUNBZ0lDQnlaWFJNYVc1bGMxdHlaWFJNYVc1bGN5NXNaVzVuZEdnZ0xTQXhYU0FyUFNCc2FXNWxPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1dmNIUnBiMjV6TG1sbmJtOXlaVmRvYVhSbGMzQmhZMlVwSUh0Y2JpQWdJQ0FnSUNBZ2JHbHVaU0E5SUd4cGJtVXVkSEpwYlNncE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2NtVjBUR2x1WlhNdWNIVnphQ2hzYVc1bEtUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2NtVjBUR2x1WlhNN1hHNTlPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWkdsbVpreHBibVZ6S0c5c1pGTjBjaXdnYm1WM1UzUnlMQ0JqWVd4c1ltRmpheWtnZXlCeVpYUjFjbTRnYkdsdVpVUnBabVl1WkdsbVppaHZiR1JUZEhJc0lHNWxkMU4wY2l3Z1kyRnNiR0poWTJzcE95QjlYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaR2xtWmxSeWFXMXRaV1JNYVc1bGN5aHZiR1JUZEhJc0lHNWxkMU4wY2l3Z1kyRnNiR0poWTJzcElIdGNiaUFnYkdWMElHOXdkR2x2Ym5NZ1BTQm5aVzVsY21GMFpVOXdkR2x2Ym5Nb1kyRnNiR0poWTJzc0lIdHBaMjV2Y21WWGFHbDBaWE53WVdObE9pQjBjblZsZlNrN1hHNGdJSEpsZEhWeWJpQnNhVzVsUkdsbVppNWthV1ptS0c5c1pGTjBjaXdnYm1WM1UzUnlMQ0J2Y0hScGIyNXpLVHRjYm4xY2JpSmRmUT09XG5cblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLnNlbnRlbmNlRGlmZiA9IHVuZGVmaW5lZDtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmU2VudGVuY2VzID0gZGlmZlNlbnRlbmNlcztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciBzZW50ZW5jZURpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9zZW50ZW5jZURpZmYgPSBuZXcgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCk7XG5cdHNlbnRlbmNlRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgIHJldHVybiB2YWx1ZS5zcGxpdCgvKFxcUy4rP1suIT9dKSg/PVxccyt8JCkvKTtcblx0fTtcblxuXHRmdW5jdGlvbiBkaWZmU2VudGVuY2VzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuXHQgIHJldHVybiBzZW50ZW5jZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDNObGJuUmxibU5sTG1weklsMHNJbTVoYldWeklqcGJJbVJwWm1aVFpXNTBaVzVqWlhNaUxDSnpaVzUwWlc1alpVUnBabVlpTENKMGIydGxibWw2WlNJc0luWmhiSFZsSWl3aWMzQnNhWFFpTENKdmJHUlRkSElpTENKdVpYZFRkSElpTENKallXeHNZbUZqYXlJc0ltUnBabVlpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3WjBOQlVXZENRU3hoTEVkQlFVRkJMR0U3TzBGQlVtaENPenM3T3pzN2RVSkJSMDhzU1VGQlRVTXNkVVpCUVdVc2QwVkJRWEpDTzBGQlExQkJMR0ZCUVdGRExGRkJRV0lzUjBGQmQwSXNWVUZCVTBNc1MwRkJWQ3hGUVVGblFqdEJRVU4wUXl4VFFVRlBRU3hOUVVGTlF5eExRVUZPTEVOQlFWa3NkVUpCUVZvc1EwRkJVRHRCUVVORUxFTkJSa1E3TzBGQlNVOHNVMEZCVTBvc1lVRkJWQ3hEUVVGMVFrc3NUVUZCZGtJc1JVRkJLMEpETEUxQlFTOUNMRVZCUVhWRFF5eFJRVUYyUXl4RlFVRnBSRHRCUVVGRkxGTkJRVTlPTEdGQlFXRlBMRWxCUVdJc1EwRkJhMEpJTEUxQlFXeENMRVZCUVRCQ1F5eE5RVUV4UWl4RlFVRnJRME1zVVVGQmJFTXNRMEZCVUR0QlFVRnhSQ0lzSW1acGJHVWlPaUp6Wlc1MFpXNWpaUzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCRWFXWm1JR1p5YjIwZ0p5NHZZbUZ6WlNjN1hHNWNibHh1Wlhod2IzSjBJR052Ym5OMElITmxiblJsYm1ObFJHbG1aaUE5SUc1bGR5QkVhV1ptS0NrN1hHNXpaVzUwWlc1alpVUnBabVl1ZEc5clpXNXBlbVVnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2RtRnNkV1V1YzNCc2FYUW9MeWhjWEZNdUt6OWJMaUUvWFNrb1B6MWNYSE1yZkNRcEx5azdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pHbG1abE5sYm5SbGJtTmxjeWh2YkdSVGRISXNJRzVsZDFOMGNpd2dZMkZzYkdKaFkyc3BJSHNnY21WMGRYSnVJSE5sYm5SbGJtTmxSR2xtWmk1a2FXWm1LRzlzWkZOMGNpd2dibVYzVTNSeUxDQmpZV3hzWW1GamF5azdJSDFjYmlKZGZRPT1cblxuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuY3NzRGlmZiA9IHVuZGVmaW5lZDtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmQ3NzID0gZGlmZkNzcztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciBjc3NEaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY3NzRGlmZiA9IG5ldyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UyWydkZWZhdWx0J10gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oKTtcblx0Y3NzRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgIHJldHVybiB2YWx1ZS5zcGxpdCgvKFt7fTo7LF18XFxzKykvKTtcblx0fTtcblxuXHRmdW5jdGlvbiBkaWZmQ3NzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuXHQgIHJldHVybiBjc3NEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlrYVdabUwyTnpjeTVxY3lKZExDSnVZVzFsY3lJNld5SmthV1ptUTNOeklpd2lZM056UkdsbVppSXNJblJ2YTJWdWFYcGxJaXdpZG1Gc2RXVWlMQ0p6Y0d4cGRDSXNJbTlzWkZOMGNpSXNJbTVsZDFOMGNpSXNJbU5oYkd4aVlXTnJJaXdpWkdsbVppSmRMQ0p0WVhCd2FXNW5jeUk2SWpzN096dG5RMEZQWjBKQkxFOHNSMEZCUVVFc1R6czdRVUZRYUVJN096czdPenQxUWtGRlR5eEpRVUZOUXl3MlJVRkJWU3gzUlVGQmFFSTdRVUZEVUVFc1VVRkJVVU1zVVVGQlVpeEhRVUZ0UWl4VlFVRlRReXhMUVVGVUxFVkJRV2RDTzBGQlEycERMRk5CUVU5QkxFMUJRVTFETEV0QlFVNHNRMEZCV1N4bFFVRmFMRU5CUVZBN1FVRkRSQ3hEUVVaRU96dEJRVWxQTEZOQlFWTktMRTlCUVZRc1EwRkJhVUpMTEUxQlFXcENMRVZCUVhsQ1F5eE5RVUY2UWl4RlFVRnBRME1zVVVGQmFrTXNSVUZCTWtNN1FVRkJSU3hUUVVGUFRpeFJRVUZSVHl4SlFVRlNMRU5CUVdGSUxFMUJRV0lzUlVGQmNVSkRMRTFCUVhKQ0xFVkJRVFpDUXl4UlFVRTNRaXhEUVVGUU8wRkJRV2RFSWl3aVptbHNaU0k2SW1OemN5NXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JFYVdabUlHWnliMjBnSnk0dlltRnpaU2M3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JqYzNORWFXWm1JRDBnYm1WM0lFUnBabVlvS1R0Y2JtTnpjMFJwWm1ZdWRHOXJaVzVwZW1VZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdkbUZzZFdVdWMzQnNhWFFvTHloYmUzMDZPeXhkZkZ4Y2N5c3BMeWs3WEc1OU8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaR2xtWmtOemN5aHZiR1JUZEhJc0lHNWxkMU4wY2l3Z1kyRnNiR0poWTJzcElIc2djbVYwZFhKdUlHTnpjMFJwWm1ZdVpHbG1aaWh2YkdSVGRISXNJRzVsZDFOMGNpd2dZMkZzYkdKaFkyc3BPeUI5WEc0aVhYMD1cblxuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuanNvbkRpZmYgPSB1bmRlZmluZWQ7XG5cblx0dmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkpzb24gPSBkaWZmSnNvbjtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY2Fub25pY2FsaXplID0gY2Fub25pY2FsaXplO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Jhc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZSk7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19saW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIG9iamVjdFByb3RvdHlwZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuXHR2YXIganNvbkRpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9qc29uRGlmZiA9IG5ldyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UyWydkZWZhdWx0J10gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oKTtcblx0Ly8gRGlzY3JpbWluYXRlIGJldHdlZW4gdHdvIGxpbmVzIG9mIHByZXR0eS1wcmludGVkLCBzZXJpYWxpemVkIEpTT04gd2hlcmUgb25lIG9mIHRoZW0gaGFzIGFcblx0Ly8gZGFuZ2xpbmcgY29tbWEgYW5kIHRoZSBvdGhlciBkb2Vzbid0LiBUdXJucyBvdXQgaW5jbHVkaW5nIHRoZSBkYW5nbGluZyBjb21tYSB5aWVsZHMgdGhlIG5pY2VzdCBvdXRwdXQ6XG5cdGpzb25EaWZmLnVzZUxvbmdlc3RUb2tlbiA9IHRydWU7XG5cblx0anNvbkRpZmYudG9rZW5pemUgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2xpbmUubGluZURpZmYgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8udG9rZW5pemU7XG5cdGpzb25EaWZmLmNhc3RJbnB1dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi91bmRlZmluZWRSZXBsYWNlbWVudCA9IHRoaXMub3B0aW9ucy51bmRlZmluZWRSZXBsYWNlbWVudDtcblxuXG5cdCAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KGNhbm9uaWNhbGl6ZSh2YWx1ZSksIGZ1bmN0aW9uIChrLCB2KSB7XG5cdCAgICBpZiAodHlwZW9mIHYgPT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICAgIHJldHVybiB1bmRlZmluZWRSZXBsYWNlbWVudDtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHY7XG5cdCAgfSwgJyAgJyk7XG5cdH07XG5cdGpzb25EaWZmLmVxdWFscyA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuXHQgIHJldHVybiAoLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLnByb3RvdHlwZS5lcXVhbHMuY2FsbChqc29uRGlmZiwgbGVmdC5yZXBsYWNlKC8sKFtcXHJcXG5dKS9nLCAnJDEnKSwgcmlnaHQucmVwbGFjZSgvLChbXFxyXFxuXSkvZywgJyQxJykpXG5cdCAgKTtcblx0fTtcblxuXHRmdW5jdGlvbiBkaWZmSnNvbihvbGRPYmosIG5ld09iaiwgb3B0aW9ucykge1xuXHQgIHJldHVybiBqc29uRGlmZi5kaWZmKG9sZE9iaiwgbmV3T2JqLCBvcHRpb25zKTtcblx0fVxuXG5cdC8vIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcHJlc2VuY2Ugb2YgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBiYWlsaW5nIG91dCB3aGVuIGVuY291bnRlcmluZyBhblxuXHQvLyBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBcInN0YWNrXCIgb2YgaXRlbXMgYmVpbmcgcHJvY2Vzc2VkLlxuXHRmdW5jdGlvbiBjYW5vbmljYWxpemUob2JqLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaykge1xuXHQgIHN0YWNrID0gc3RhY2sgfHwgW107XG5cdCAgcmVwbGFjZW1lbnRTdGFjayA9IHJlcGxhY2VtZW50U3RhY2sgfHwgW107XG5cblx0ICB2YXIgaSA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0ICBmb3IgKGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpICs9IDEpIHtcblx0ICAgIGlmIChzdGFja1tpXSA9PT0gb2JqKSB7XG5cdCAgICAgIHJldHVybiByZXBsYWNlbWVudFN0YWNrW2ldO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHZhciBjYW5vbmljYWxpemVkT2JqID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZvaWQgMCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQgIGlmICgnW29iamVjdCBBcnJheV0nID09PSBvYmplY3RQcm90b3R5cGVUb1N0cmluZy5jYWxsKG9iaikpIHtcblx0ICAgIHN0YWNrLnB1c2gob2JqKTtcblx0ICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBuZXcgQXJyYXkob2JqLmxlbmd0aCk7XG5cdCAgICByZXBsYWNlbWVudFN0YWNrLnB1c2goY2Fub25pY2FsaXplZE9iaik7XG5cdCAgICBmb3IgKGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSArPSAxKSB7XG5cdCAgICAgIGNhbm9uaWNhbGl6ZWRPYmpbaV0gPSBjYW5vbmljYWxpemUob2JqW2ldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjayk7XG5cdCAgICB9XG5cdCAgICBzdGFjay5wb3AoKTtcblx0ICAgIHJlcGxhY2VtZW50U3RhY2sucG9wKCk7XG5cdCAgICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcblx0ICB9XG5cblx0ICBpZiAob2JqICYmIG9iai50b0pTT04pIHtcblx0ICAgIG9iaiA9IG9iai50b0pTT04oKTtcblx0ICB9XG5cblx0ICBpZiAoIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8odHlwZW9mIC8qaXN0YW5idWwgaWdub3JlIGVuZCovb2JqID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvYmopKSA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSB7XG5cdCAgICBzdGFjay5wdXNoKG9iaik7XG5cdCAgICBjYW5vbmljYWxpemVkT2JqID0ge307XG5cdCAgICByZXBsYWNlbWVudFN0YWNrLnB1c2goY2Fub25pY2FsaXplZE9iaik7XG5cdCAgICB2YXIgc29ydGVkS2V5cyA9IFtdLFxuXHQgICAgICAgIGtleSA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cdCAgICBmb3IgKGtleSBpbiBvYmopIHtcblx0ICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0ICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdCAgICAgICAgc29ydGVkS2V5cy5wdXNoKGtleSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHNvcnRlZEtleXMuc29ydCgpO1xuXHQgICAgZm9yIChpID0gMDsgaSA8IHNvcnRlZEtleXMubGVuZ3RoOyBpICs9IDEpIHtcblx0ICAgICAga2V5ID0gc29ydGVkS2V5c1tpXTtcblx0ICAgICAgY2Fub25pY2FsaXplZE9ialtrZXldID0gY2Fub25pY2FsaXplKG9ialtrZXldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjayk7XG5cdCAgICB9XG5cdCAgICBzdGFjay5wb3AoKTtcblx0ICAgIHJlcGxhY2VtZW50U3RhY2sucG9wKCk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBvYmo7XG5cdCAgfVxuXHQgIHJldHVybiBjYW5vbmljYWxpemVkT2JqO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDJwemIyNHVhbk1pWFN3aWJtRnRaWE1pT2xzaVpHbG1aa3B6YjI0aUxDSmpZVzV2Ym1sallXeHBlbVVpTENKdlltcGxZM1JRY205MGIzUjVjR1ZVYjFOMGNtbHVaeUlzSWs5aWFtVmpkQ0lzSW5CeWIzUnZkSGx3WlNJc0luUnZVM1J5YVc1bklpd2lhbk52YmtScFptWWlMQ0oxYzJWTWIyNW5aWE4wVkc5clpXNGlMQ0owYjJ0bGJtbDZaU0lzSW1OaGMzUkpibkIxZENJc0luWmhiSFZsSWl3aWRXNWtaV1pwYm1Wa1VtVndiR0ZqWlcxbGJuUWlMQ0p2Y0hScGIyNXpJaXdpU2xOUFRpSXNJbk4wY21sdVoybG1lU0lzSW1zaUxDSjJJaXdpWlhGMVlXeHpJaXdpYkdWbWRDSXNJbkpwWjJoMElpd2lZMkZzYkNJc0luSmxjR3hoWTJVaUxDSnZiR1JQWW1vaUxDSnVaWGRQWW1vaUxDSmthV1ptSWl3aWIySnFJaXdpYzNSaFkyc2lMQ0p5WlhCc1lXTmxiV1Z1ZEZOMFlXTnJJaXdpYVNJc0lteGxibWQwYUNJc0ltTmhibTl1YVdOaGJHbDZaV1JQWW1vaUxDSndkWE5vSWl3aVFYSnlZWGtpTENKd2IzQWlMQ0owYjBwVFQwNGlMQ0p6YjNKMFpXUkxaWGx6SWl3aWEyVjVJaXdpYUdGelQzZHVVSEp2Y0dWeWRIa2lMQ0p6YjNKMElsMHNJbTFoY0hCcGJtZHpJam9pT3pzN096czdPMmREUVRKQ1owSkJMRkVzUjBGQlFVRXNVVHQ1UkVGSlFVTXNXU3hIUVVGQlFTeFpPenRCUVM5Q2FFSTdPenM3ZFVKQlEwRTdPenM3ZFVKQlJVRXNTVUZCVFVNc01FSkJRVEJDUXl4UFFVRlBReXhUUVVGUUxFTkJRV2xDUXl4UlFVRnFSRHM3UVVGSFR5eEpRVUZOUXl3clJVRkJWeXgzUlVGQmFrSTdRVUZEVUR0QlFVTkJPMEZCUTBGQkxGTkJRVk5ETEdWQlFWUXNSMEZCTWtJc1NVRkJNMEk3TzBGQlJVRkVMRk5CUVZORkxGRkJRVlFzUjBGQmIwSXNaMFZCUVZOQkxGRkJRVGRDTzBGQlEwRkdMRk5CUVZOSExGTkJRVlFzUjBGQmNVSXNWVUZCVTBNc1MwRkJWQ3hGUVVGblFqdEJRVUZCTEhORVFVTTFRa01zYjBKQlJEUkNMRWRCUTBvc1MwRkJTME1zVDBGRVJDeERRVU0xUWtRc2IwSkJSRFJDT3pzN1FVRkhia01zVTBGQlR5eFBRVUZQUkN4TFFVRlFMRXRCUVdsQ0xGRkJRV3BDTEVkQlFUUkNRU3hMUVVFMVFpeEhRVUZ2UTBjc1MwRkJTME1zVTBGQlRDeERRVUZsWWl4aFFVRmhVeXhMUVVGaUxFTkJRV1lzUlVGQmIwTXNWVUZCVTBzc1EwRkJWQ3hGUVVGWlF5eERRVUZhTEVWQlFXVTdRVUZETlVZc1VVRkJTU3hQUVVGUFFTeERRVUZRTEV0QlFXRXNWMEZCYWtJc1JVRkJPRUk3UVVGRE5VSXNZVUZCVDB3c2IwSkJRVkE3UVVGRFJEczdRVUZGUkN4WFFVRlBTeXhEUVVGUU8wRkJRMFFzUjBGT01FTXNSVUZOZUVNc1NVRk9kME1zUTBGQk0wTTdRVUZQUkN4RFFWWkVPMEZCVjBGV0xGTkJRVk5YTEUxQlFWUXNSMEZCYTBJc1ZVRkJVME1zU1VGQlZDeEZRVUZsUXl4TFFVRm1MRVZCUVhOQ08wRkJRM1JETEZOQlFVOHNiMFZCUVV0bUxGTkJRVXdzUTBGQlpXRXNUVUZCWml4RFFVRnpRa2NzU1VGQmRFSXNRMEZCTWtKa0xGRkJRVE5DTEVWQlFYRkRXU3hMUVVGTFJ5eFBRVUZNTEVOQlFXRXNXVUZCWWl4RlFVRXlRaXhKUVVFelFpeERRVUZ5UXl4RlFVRjFSVVlzVFVGQlRVVXNUMEZCVGl4RFFVRmpMRmxCUVdRc1JVRkJORUlzU1VGQk5VSXNRMEZCZGtVN1FVRkJVRHRCUVVORUxFTkJSa1E3TzBGQlNVOHNVMEZCVTNKQ0xGRkJRVlFzUTBGQmEwSnpRaXhOUVVGc1FpeEZRVUV3UWtNc1RVRkJNVUlzUlVGQmEwTllMRTlCUVd4RExFVkJRVEpETzBGQlFVVXNVMEZCVDA0c1UwRkJVMnRDTEVsQlFWUXNRMEZCWTBZc1RVRkJaQ3hGUVVGelFrTXNUVUZCZEVJc1JVRkJPRUpZTEU5QlFUbENMRU5CUVZBN1FVRkJaMFE3TzBGQlJYQkhPMEZCUTBFN1FVRkRUeXhUUVVGVFdDeFpRVUZVTEVOQlFYTkNkMElzUjBGQmRFSXNSVUZCTWtKRExFdEJRVE5DTEVWQlFXdERReXhuUWtGQmJFTXNSVUZCYjBRN1FVRkRla1JFTEZWQlFWRkJMRk5CUVZNc1JVRkJha0k3UVVGRFFVTXNjVUpCUVcxQ1FTeHZRa0ZCYjBJc1JVRkJka003TzBGQlJVRXNUVUZCU1VNc2JVTkJRVW83TzBGQlJVRXNUMEZCUzBFc1NVRkJTU3hEUVVGVUxFVkJRVmxCTEVsQlFVbEdMRTFCUVUxSExFMUJRWFJDTEVWQlFUaENSQ3hMUVVGTExFTkJRVzVETEVWQlFYTkRPMEZCUTNCRExGRkJRVWxHTEUxQlFVMUZMRU5CUVU0c1RVRkJZVWdzUjBGQmFrSXNSVUZCYzBJN1FVRkRjRUlzWVVGQlQwVXNhVUpCUVdsQ1F5eERRVUZxUWl4RFFVRlFPMEZCUTBRN1FVRkRSanM3UVVGRlJDeE5RVUZKUlN4clJFRkJTanM3UVVGRlFTeE5RVUZKTEhGQ1FVRnhRalZDTEhkQ1FVRjNRbXRDTEVsQlFYaENMRU5CUVRaQ1N5eEhRVUUzUWl4RFFVRjZRaXhGUVVFMFJEdEJRVU14UkVNc1ZVRkJUVXNzU1VGQlRpeERRVUZYVGl4SFFVRllPMEZCUTBGTExIVkNRVUZ0UWl4SlFVRkpSU3hMUVVGS0xFTkJRVlZRTEVsQlFVbEpMRTFCUVdRc1EwRkJia0k3UVVGRFFVWXNjVUpCUVdsQ1NTeEpRVUZxUWl4RFFVRnpRa1FzWjBKQlFYUkNPMEZCUTBFc1UwRkJTMFlzU1VGQlNTeERRVUZVTEVWQlFWbEJMRWxCUVVsSUxFbEJRVWxKTEUxQlFYQkNMRVZCUVRSQ1JDeExRVUZMTEVOQlFXcERMRVZCUVc5RE8wRkJRMnhEUlN4MVFrRkJhVUpHTEVOQlFXcENMRWxCUVhOQ00wSXNZVUZCWVhkQ0xFbEJRVWxITEVOQlFVb3NRMEZCWWl4RlFVRnhRa1lzUzBGQmNrSXNSVUZCTkVKRExHZENRVUUxUWl4RFFVRjBRanRCUVVORU8wRkJRMFJFTEZWQlFVMVBMRWRCUVU0N1FVRkRRVTRzY1VKQlFXbENUU3hIUVVGcVFqdEJRVU5CTEZkQlFVOUlMR2RDUVVGUU8wRkJRMFE3TzBGQlJVUXNUVUZCU1V3c1QwRkJUMEVzU1VGQlNWTXNUVUZCWml4RlFVRjFRanRCUVVOeVFsUXNWVUZCVFVFc1NVRkJTVk1zVFVGQlNpeEZRVUZPTzBGQlEwUTdPMEZCUlVRc1RVRkJTU3g1UkVGQlQxUXNSMEZCVUN4NVEwRkJUMEVzUjBGQlVDeFBRVUZsTEZGQlFXWXNTVUZCTWtKQkxGRkJRVkVzU1VGQmRrTXNSVUZCTmtNN1FVRkRNME5ETEZWQlFVMUxMRWxCUVU0c1EwRkJWMDRzUjBGQldEdEJRVU5CU3l4MVFrRkJiVUlzUlVGQmJrSTdRVUZEUVVnc2NVSkJRV2xDU1N4SlFVRnFRaXhEUVVGelFrUXNaMEpCUVhSQ08wRkJRMEVzVVVGQlNVc3NZVUZCWVN4RlFVRnFRanRCUVVGQkxGRkJRMGxETEhGRFFVUktPMEZCUlVFc1UwRkJTMEVzUjBGQlRDeEpRVUZaV0N4SFFVRmFMRVZCUVdsQ08wRkJRMlk3UVVGRFFTeFZRVUZKUVN4SlFVRkpXU3hqUVVGS0xFTkJRVzFDUkN4SFFVRnVRaXhEUVVGS0xFVkJRVFpDTzBGQlF6TkNSQ3h0UWtGQlYwb3NTVUZCV0N4RFFVRm5Ra3NzUjBGQmFFSTdRVUZEUkR0QlFVTkdPMEZCUTBSRUxHVkJRVmRITEVsQlFWZzdRVUZEUVN4VFFVRkxWaXhKUVVGSkxFTkJRVlFzUlVGQldVRXNTVUZCU1U4c1YwRkJWMDRzVFVGQk0wSXNSVUZCYlVORUxFdEJRVXNzUTBGQmVFTXNSVUZCTWtNN1FVRkRla05STEZsQlFVMUVMRmRCUVZkUUxFTkJRVmdzUTBGQlRqdEJRVU5CUlN4MVFrRkJhVUpOTEVkQlFXcENMRWxCUVhkQ2JrTXNZVUZCWVhkQ0xFbEJRVWxYTEVkQlFVb3NRMEZCWWl4RlFVRjFRbFlzUzBGQmRrSXNSVUZCT0VKRExHZENRVUU1UWl4RFFVRjRRanRCUVVORU8wRkJRMFJFTEZWQlFVMVBMRWRCUVU0N1FVRkRRVTRzY1VKQlFXbENUU3hIUVVGcVFqdEJRVU5FTEVkQmJrSkVMRTFCYlVKUE8wRkJRMHhJTEhWQ1FVRnRRa3dzUjBGQmJrSTdRVUZEUkR0QlFVTkVMRk5CUVU5TExHZENRVUZRTzBGQlEwUWlMQ0ptYVd4bElqb2lhbk52Ymk1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQkVhV1ptSUdaeWIyMGdKeTR2WW1GelpTYzdYRzVwYlhCdmNuUWdlMnhwYm1WRWFXWm1mU0JtY205dElDY3VMMnhwYm1Vbk8xeHVYRzVqYjI1emRDQnZZbXBsWTNSUWNtOTBiM1I1Y0dWVWIxTjBjbWx1WnlBOUlFOWlhbVZqZEM1d2NtOTBiM1I1Y0dVdWRHOVRkSEpwYm1jN1hHNWNibHh1Wlhod2IzSjBJR052Ym5OMElHcHpiMjVFYVdabUlEMGdibVYzSUVScFptWW9LVHRjYmk4dklFUnBjMk55YVcxcGJtRjBaU0JpWlhSM1pXVnVJSFIzYnlCc2FXNWxjeUJ2WmlCd2NtVjBkSGt0Y0hKcGJuUmxaQ3dnYzJWeWFXRnNhWHBsWkNCS1UwOU9JSGRvWlhKbElHOXVaU0J2WmlCMGFHVnRJR2hoY3lCaFhHNHZMeUJrWVc1bmJHbHVaeUJqYjIxdFlTQmhibVFnZEdobElHOTBhR1Z5SUdSdlpYTnVKM1F1SUZSMWNtNXpJRzkxZENCcGJtTnNkV1JwYm1jZ2RHaGxJR1JoYm1kc2FXNW5JR052YlcxaElIbHBaV3hrY3lCMGFHVWdibWxqWlhOMElHOTFkSEIxZERwY2JtcHpiMjVFYVdabUxuVnpaVXh2Ym1kbGMzUlViMnRsYmlBOUlIUnlkV1U3WEc1Y2JtcHpiMjVFYVdabUxuUnZhMlZ1YVhwbElEMGdiR2x1WlVScFptWXVkRzlyWlc1cGVtVTdYRzVxYzI5dVJHbG1aaTVqWVhOMFNXNXdkWFFnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQmpiMjV6ZENCN2RXNWtaV1pwYm1Wa1VtVndiR0ZqWlcxbGJuUjlJRDBnZEdocGN5NXZjSFJwYjI1ek8xeHVYRzRnSUhKbGRIVnliaUIwZVhCbGIyWWdkbUZzZFdVZ1BUMDlJQ2R6ZEhKcGJtY25JRDhnZG1Gc2RXVWdPaUJLVTA5T0xuTjBjbWx1WjJsbWVTaGpZVzV2Ym1sallXeHBlbVVvZG1Gc2RXVXBMQ0JtZFc1amRHbHZiaWhyTENCMktTQjdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQjJJRDA5UFNBbmRXNWtaV1pwYm1Wa0p5a2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlIVnVaR1ZtYVc1bFpGSmxjR3hoWTJWdFpXNTBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCMk8xeHVJQ0I5TENBbklDQW5LVHRjYm4wN1hHNXFjMjl1UkdsbVppNWxjWFZoYkhNZ1BTQm1kVzVqZEdsdmJpaHNaV1owTENCeWFXZG9kQ2tnZTF4dUlDQnlaWFIxY200Z1JHbG1aaTV3Y205MGIzUjVjR1V1WlhGMVlXeHpMbU5oYkd3b2FuTnZia1JwWm1Zc0lHeGxablF1Y21Wd2JHRmpaU2d2TENoYlhGeHlYRnh1WFNrdlp5d2dKeVF4Snlrc0lISnBaMmgwTG5KbGNHeGhZMlVvTHl3b1cxeGNjbHhjYmwwcEwyY3NJQ2NrTVNjcEtUdGNibjA3WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCa2FXWm1Tbk52YmlodmJHUlBZbW9zSUc1bGQwOWlhaXdnYjNCMGFXOXVjeWtnZXlCeVpYUjFjbTRnYW5OdmJrUnBabVl1WkdsbVppaHZiR1JQWW1vc0lHNWxkMDlpYWl3Z2IzQjBhVzl1Y3lrN0lIMWNibHh1THk4Z1ZHaHBjeUJtZFc1amRHbHZiaUJvWVc1a2JHVnpJSFJvWlNCd2NtVnpaVzVqWlNCdlppQmphWEpqZFd4aGNpQnlaV1psY21WdVkyVnpJR0o1SUdKaGFXeHBibWNnYjNWMElIZG9aVzRnWlc1amIzVnVkR1Z5YVc1bklHRnVYRzR2THlCdlltcGxZM1FnZEdoaGRDQnBjeUJoYkhKbFlXUjVJRzl1SUhSb1pTQmNJbk4wWVdOclhDSWdiMllnYVhSbGJYTWdZbVZwYm1jZ2NISnZZMlZ6YzJWa0xseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTmhibTl1YVdOaGJHbDZaU2h2WW1vc0lITjBZV05yTENCeVpYQnNZV05sYldWdWRGTjBZV05yS1NCN1hHNGdJSE4wWVdOcklEMGdjM1JoWTJzZ2ZId2dXMTA3WEc0Z0lISmxjR3hoWTJWdFpXNTBVM1JoWTJzZ1BTQnlaWEJzWVdObGJXVnVkRk4wWVdOcklIeDhJRnRkTzF4dVhHNGdJR3hsZENCcE8xeHVYRzRnSUdadmNpQW9hU0E5SURBN0lHa2dQQ0J6ZEdGamF5NXNaVzVuZEdnN0lHa2dLejBnTVNrZ2UxeHVJQ0FnSUdsbUlDaHpkR0ZqYTF0cFhTQTlQVDBnYjJKcUtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2NtVndiR0ZqWlcxbGJuUlRkR0ZqYTF0cFhUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnNaWFFnWTJGdWIyNXBZMkZzYVhwbFpFOWlhanRjYmx4dUlDQnBaaUFvSjF0dlltcGxZM1FnUVhKeVlYbGRKeUE5UFQwZ2IySnFaV04wVUhKdmRHOTBlWEJsVkc5VGRISnBibWN1WTJGc2JDaHZZbW9wS1NCN1hHNGdJQ0FnYzNSaFkyc3VjSFZ6YUNodlltb3BPMXh1SUNBZ0lHTmhibTl1YVdOaGJHbDZaV1JQWW1vZ1BTQnVaWGNnUVhKeVlYa29iMkpxTG14bGJtZDBhQ2s3WEc0Z0lDQWdjbVZ3YkdGalpXMWxiblJUZEdGamF5NXdkWE5vS0dOaGJtOXVhV05oYkdsNlpXUlBZbW9wTzF4dUlDQWdJR1p2Y2lBb2FTQTlJREE3SUdrZ1BDQnZZbW91YkdWdVozUm9PeUJwSUNzOUlERXBJSHRjYmlBZ0lDQWdJR05oYm05dWFXTmhiR2w2WldSUFltcGJhVjBnUFNCallXNXZibWxqWVd4cGVtVW9iMkpxVzJsZExDQnpkR0ZqYXl3Z2NtVndiR0ZqWlcxbGJuUlRkR0ZqYXlrN1hHNGdJQ0FnZlZ4dUlDQWdJSE4wWVdOckxuQnZjQ2dwTzF4dUlDQWdJSEpsY0d4aFkyVnRaVzUwVTNSaFkyc3VjRzl3S0NrN1hHNGdJQ0FnY21WMGRYSnVJR05oYm05dWFXTmhiR2w2WldSUFltbzdYRzRnSUgxY2JseHVJQ0JwWmlBb2IySnFJQ1ltSUc5aWFpNTBiMHBUVDA0cElIdGNiaUFnSUNCdlltb2dQU0J2WW1vdWRHOUtVMDlPS0NrN1hHNGdJSDFjYmx4dUlDQnBaaUFvZEhsd1pXOW1JRzlpYWlBOVBUMGdKMjlpYW1WamRDY2dKaVlnYjJKcUlDRTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ2MzUmhZMnN1Y0hWemFDaHZZbW9wTzF4dUlDQWdJR05oYm05dWFXTmhiR2w2WldSUFltb2dQU0I3ZlR0Y2JpQWdJQ0J5WlhCc1lXTmxiV1Z1ZEZOMFlXTnJMbkIxYzJnb1kyRnViMjVwWTJGc2FYcGxaRTlpYWlrN1hHNGdJQ0FnYkdWMElITnZjblJsWkV0bGVYTWdQU0JiWFN4Y2JpQWdJQ0FnSUNBZ2EyVjVPMXh1SUNBZ0lHWnZjaUFvYTJWNUlHbHVJRzlpYWlrZ2UxeHVJQ0FnSUNBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHVnNjMlVnS2k5Y2JpQWdJQ0FnSUdsbUlDaHZZbW91YUdGelQzZHVVSEp2Y0dWeWRIa29hMlY1S1NrZ2UxeHVJQ0FnSUNBZ0lDQnpiM0owWldSTFpYbHpMbkIxYzJnb2EyVjVLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2MyOXlkR1ZrUzJWNWN5NXpiM0owS0NrN1hHNGdJQ0FnWm05eUlDaHBJRDBnTURzZ2FTQThJSE52Y25SbFpFdGxlWE11YkdWdVozUm9PeUJwSUNzOUlERXBJSHRjYmlBZ0lDQWdJR3RsZVNBOUlITnZjblJsWkV0bGVYTmJhVjA3WEc0Z0lDQWdJQ0JqWVc1dmJtbGpZV3hwZW1Wa1QySnFXMnRsZVYwZ1BTQmpZVzV2Ym1sallXeHBlbVVvYjJKcVcydGxlVjBzSUhOMFlXTnJMQ0J5WlhCc1lXTmxiV1Z1ZEZOMFlXTnJLVHRjYmlBZ0lDQjlYRzRnSUNBZ2MzUmhZMnN1Y0c5d0tDazdYRzRnSUNBZ2NtVndiR0ZqWlcxbGJuUlRkR0ZqYXk1d2IzQW9LVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0JqWVc1dmJtbGpZV3hwZW1Wa1QySnFJRDBnYjJKcU8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCallXNXZibWxqWVd4cGVtVmtUMkpxTzF4dWZWeHVJbDE5XG5cblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmFycmF5RGlmZiA9IHVuZGVmaW5lZDtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmQXJyYXlzID0gZGlmZkFycmF5cztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciBhcnJheURpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9hcnJheURpZmYgPSBuZXcgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCk7XG5cdGFycmF5RGlmZi50b2tlbml6ZSA9IGFycmF5RGlmZi5qb2luID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgcmV0dXJuIHZhbHVlLnNsaWNlKCk7XG5cdH07XG5cdGFycmF5RGlmZi5yZW1vdmVFbXB0eSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgIHJldHVybiB2YWx1ZTtcblx0fTtcblxuXHRmdW5jdGlvbiBkaWZmQXJyYXlzKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjaykge1xuXHQgIHJldHVybiBhcnJheURpZmYuZGlmZihvbGRBcnIsIG5ld0FyciwgY2FsbGJhY2spO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDJGeWNtRjVMbXB6SWwwc0ltNWhiV1Z6SWpwYkltUnBabVpCY25KaGVYTWlMQ0poY25KaGVVUnBabVlpTENKMGIydGxibWw2WlNJc0ltcHZhVzRpTENKMllXeDFaU0lzSW5Oc2FXTmxJaXdpY21WdGIzWmxSVzF3ZEhraUxDSnZiR1JCY25JaUxDSnVaWGRCY25JaUxDSmpZV3hzWW1GamF5SXNJbVJwWm1ZaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN1owTkJWV2RDUVN4VkxFZEJRVUZCTEZVN08wRkJWbWhDT3pzN096czdkVUpCUlU4c1NVRkJUVU1zYVVaQlFWa3NkMFZCUVd4Q08wRkJRMUJCTEZWQlFWVkRMRkZCUVZZc1IwRkJjVUpFTEZWQlFWVkZMRWxCUVZZc1IwRkJhVUlzVlVGQlUwTXNTMEZCVkN4RlFVRm5RanRCUVVOd1JDeFRRVUZQUVN4TlFVRk5ReXhMUVVGT0xFVkJRVkE3UVVGRFJDeERRVVpFTzBGQlIwRktMRlZCUVZWTExGZEJRVllzUjBGQmQwSXNWVUZCVTBZc1MwRkJWQ3hGUVVGblFqdEJRVU4wUXl4VFFVRlBRU3hMUVVGUU8wRkJRMFFzUTBGR1JEczdRVUZKVHl4VFFVRlRTaXhWUVVGVUxFTkJRVzlDVHl4TlFVRndRaXhGUVVFMFFrTXNUVUZCTlVJc1JVRkJiME5ETEZGQlFYQkRMRVZCUVRoRE8wRkJRVVVzVTBGQlQxSXNWVUZCVlZNc1NVRkJWaXhEUVVGbFNDeE5RVUZtTEVWQlFYVkNReXhOUVVGMlFpeEZRVUVyUWtNc1VVRkJMMElzUTBGQlVEdEJRVUZyUkNJc0ltWnBiR1VpT2lKaGNuSmhlUzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCRWFXWm1JR1p5YjIwZ0p5NHZZbUZ6WlNjN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCaGNuSmhlVVJwWm1ZZ1BTQnVaWGNnUkdsbVppZ3BPMXh1WVhKeVlYbEVhV1ptTG5SdmEyVnVhWHBsSUQwZ1lYSnlZWGxFYVdabUxtcHZhVzRnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2RtRnNkV1V1YzJ4cFkyVW9LVHRjYm4wN1hHNWhjbkpoZVVScFptWXVjbVZ0YjNabFJXMXdkSGtnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2RtRnNkV1U3WEc1OU8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaR2xtWmtGeWNtRjVjeWh2YkdSQmNuSXNJRzVsZDBGeWNpd2dZMkZzYkdKaFkyc3BJSHNnY21WMGRYSnVJR0Z5Y21GNVJHbG1aaTVrYVdabUtHOXNaRUZ5Y2l3Z2JtVjNRWEp5TENCallXeHNZbUZqYXlrN0lIMWNiaUpkZlE9PVxuXG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovYXBwbHlQYXRjaCA9IGFwcGx5UGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2FwcGx5UGF0Y2hlcyA9IGFwcGx5UGF0Y2hlcztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19wYXJzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Rpc3RhbmNlSXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9kaXN0YW5jZUl0ZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Rpc3RhbmNlSXRlcmF0b3IpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2Z1bmN0aW9uIGFwcGx5UGF0Y2goc291cmNlLCB1bmlEaWZmKSB7XG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL29wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG5cdCAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuXHQgICAgdW5pRGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX3BhcnNlLnBhcnNlUGF0Y2gpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKHVuaURpZmYpO1xuXHQgIH1cblxuXHQgIGlmIChBcnJheS5pc0FycmF5KHVuaURpZmYpKSB7XG5cdCAgICBpZiAodW5pRGlmZi5sZW5ndGggPiAxKSB7XG5cdCAgICAgIHRocm93IG5ldyBFcnJvcignYXBwbHlQYXRjaCBvbmx5IHdvcmtzIHdpdGggYSBzaW5nbGUgaW5wdXQuJyk7XG5cdCAgICB9XG5cblx0ICAgIHVuaURpZmYgPSB1bmlEaWZmWzBdO1xuXHQgIH1cblxuXHQgIC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBpbnB1dFxuXHQgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcblx0ICAgICAgZGVsaW1pdGVycyA9IHNvdXJjZS5tYXRjaCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vZykgfHwgW10sXG5cdCAgICAgIGh1bmtzID0gdW5pRGlmZi5odW5rcyxcblx0ICAgICAgY29tcGFyZUxpbmUgPSBvcHRpb25zLmNvbXBhcmVMaW5lIHx8IGZ1bmN0aW9uIChsaW5lTnVtYmVyLCBsaW5lLCBvcGVyYXRpb24sIHBhdGNoQ29udGVudCkgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3tcblx0ICAgIHJldHVybiAoLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9saW5lID09PSBwYXRjaENvbnRlbnRcblx0ICAgICk7XG5cdCAgfSxcblx0ICAgICAgZXJyb3JDb3VudCA9IDAsXG5cdCAgICAgIGZ1enpGYWN0b3IgPSBvcHRpb25zLmZ1enpGYWN0b3IgfHwgMCxcblx0ICAgICAgbWluTGluZSA9IDAsXG5cdCAgICAgIG9mZnNldCA9IDAsXG5cdCAgICAgIHJlbW92ZUVPRk5MID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZvaWQgMCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyxcblx0ICAgICAgYWRkRU9GTkwgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdm9pZCAwIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdCAgLyoqXG5cdCAgICogQ2hlY2tzIGlmIHRoZSBodW5rIGV4YWN0bHkgZml0cyBvbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cblx0ICAgKi9cblx0ICBmdW5jdGlvbiBodW5rRml0cyhodW5rLCB0b1Bvcykge1xuXHQgICAgZm9yICh2YXIgaiA9IDA7IGogPCBodW5rLmxpbmVzLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgIHZhciBsaW5lID0gaHVuay5saW5lc1tqXSxcblx0ICAgICAgICAgIG9wZXJhdGlvbiA9IGxpbmVbMF0sXG5cdCAgICAgICAgICBjb250ZW50ID0gbGluZS5zdWJzdHIoMSk7XG5cblx0ICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnIHx8IG9wZXJhdGlvbiA9PT0gJy0nKSB7XG5cdCAgICAgICAgLy8gQ29udGV4dCBzYW5pdHkgY2hlY2tcblx0ICAgICAgICBpZiAoIWNvbXBhcmVMaW5lKHRvUG9zICsgMSwgbGluZXNbdG9Qb3NdLCBvcGVyYXRpb24sIGNvbnRlbnQpKSB7XG5cdCAgICAgICAgICBlcnJvckNvdW50Kys7XG5cblx0ICAgICAgICAgIGlmIChlcnJvckNvdW50ID4gZnV6ekZhY3Rvcikge1xuXHQgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRvUG9zKys7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHRydWU7XG5cdCAgfVxuXG5cdCAgLy8gU2VhcmNoIGJlc3QgZml0IG9mZnNldHMgZm9yIGVhY2ggaHVuayBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lc1xuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgaHVua3MubGVuZ3RoOyBpKyspIHtcblx0ICAgIHZhciBodW5rID0gaHVua3NbaV0sXG5cdCAgICAgICAgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMsXG5cdCAgICAgICAgbG9jYWxPZmZzZXQgPSAwLFxuXHQgICAgICAgIHRvUG9zID0gb2Zmc2V0ICsgaHVuay5vbGRTdGFydCAtIDE7XG5cblx0ICAgIHZhciBpdGVyYXRvciA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX2Rpc3RhbmNlSXRlcmF0b3IyWydkZWZhdWx0J10pIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKHRvUG9zLCBtaW5MaW5lLCBtYXhMaW5lKTtcblxuXHQgICAgZm9yICg7IGxvY2FsT2Zmc2V0ICE9PSB1bmRlZmluZWQ7IGxvY2FsT2Zmc2V0ID0gaXRlcmF0b3IoKSkge1xuXHQgICAgICBpZiAoaHVua0ZpdHMoaHVuaywgdG9Qb3MgKyBsb2NhbE9mZnNldCkpIHtcblx0ICAgICAgICBodW5rLm9mZnNldCA9IG9mZnNldCArPSBsb2NhbE9mZnNldDtcblx0ICAgICAgICBicmVhaztcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBpZiAobG9jYWxPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9XG5cblx0ICAgIC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG5cdCAgICAvLyB0byBmaXQgb3ZlciBhbHJlYWR5IHBhdGNoZWQgdGV4dFxuXHQgICAgbWluTGluZSA9IGh1bmsub2Zmc2V0ICsgaHVuay5vbGRTdGFydCArIGh1bmsub2xkTGluZXM7XG5cdCAgfVxuXG5cdCAgLy8gQXBwbHkgcGF0Y2ggaHVua3Ncblx0ICB2YXIgZGlmZk9mZnNldCA9IDA7XG5cdCAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGh1bmtzLmxlbmd0aDsgX2krKykge1xuXHQgICAgdmFyIF9odW5rID0gaHVua3NbX2ldLFxuXHQgICAgICAgIF90b1BvcyA9IF9odW5rLm9sZFN0YXJ0ICsgX2h1bmsub2Zmc2V0ICsgZGlmZk9mZnNldCAtIDE7XG5cdCAgICBkaWZmT2Zmc2V0ICs9IF9odW5rLm5ld0xpbmVzIC0gX2h1bmsub2xkTGluZXM7XG5cblx0ICAgIGlmIChfdG9Qb3MgPCAwKSB7XG5cdCAgICAgIC8vIENyZWF0aW5nIGEgbmV3IGZpbGVcblx0ICAgICAgX3RvUG9zID0gMDtcblx0ICAgIH1cblxuXHQgICAgZm9yICh2YXIgaiA9IDA7IGogPCBfaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuXHQgICAgICB2YXIgbGluZSA9IF9odW5rLmxpbmVzW2pdLFxuXHQgICAgICAgICAgb3BlcmF0aW9uID0gbGluZVswXSxcblx0ICAgICAgICAgIGNvbnRlbnQgPSBsaW5lLnN1YnN0cigxKSxcblx0ICAgICAgICAgIGRlbGltaXRlciA9IF9odW5rLmxpbmVkZWxpbWl0ZXJzW2pdO1xuXG5cdCAgICAgIGlmIChvcGVyYXRpb24gPT09ICcgJykge1xuXHQgICAgICAgIF90b1BvcysrO1xuXHQgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG5cdCAgICAgICAgbGluZXMuc3BsaWNlKF90b1BvcywgMSk7XG5cdCAgICAgICAgZGVsaW1pdGVycy5zcGxpY2UoX3RvUG9zLCAxKTtcblx0ICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHQgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG5cdCAgICAgICAgbGluZXMuc3BsaWNlKF90b1BvcywgMCwgY29udGVudCk7XG5cdCAgICAgICAgZGVsaW1pdGVycy5zcGxpY2UoX3RvUG9zLCAwLCBkZWxpbWl0ZXIpO1xuXHQgICAgICAgIF90b1BvcysrO1xuXHQgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJ1xcXFwnKSB7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzT3BlcmF0aW9uID0gX2h1bmsubGluZXNbaiAtIDFdID8gX2h1bmsubGluZXNbaiAtIDFdWzBdIDogbnVsbDtcblx0ICAgICAgICBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICcrJykge1xuXHQgICAgICAgICAgcmVtb3ZlRU9GTkwgPSB0cnVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICctJykge1xuXHQgICAgICAgICAgYWRkRU9GTkwgPSB0cnVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIC8vIEhhbmRsZSBFT0ZOTCBpbnNlcnRpb24vcmVtb3ZhbFxuXHQgIGlmIChyZW1vdmVFT0ZOTCkge1xuXHQgICAgd2hpbGUgKCFsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSkge1xuXHQgICAgICBsaW5lcy5wb3AoKTtcblx0ICAgICAgZGVsaW1pdGVycy5wb3AoKTtcblx0ICAgIH1cblx0ICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG5cdCAgICBsaW5lcy5wdXNoKCcnKTtcblx0ICAgIGRlbGltaXRlcnMucHVzaCgnXFxuJyk7XG5cdCAgfVxuXHQgIGZvciAodmFyIF9rID0gMDsgX2sgPCBsaW5lcy5sZW5ndGggLSAxOyBfaysrKSB7XG5cdCAgICBsaW5lc1tfa10gPSBsaW5lc1tfa10gKyBkZWxpbWl0ZXJzW19rXTtcblx0ICB9XG5cdCAgcmV0dXJuIGxpbmVzLmpvaW4oJycpO1xuXHR9XG5cblx0Ly8gV3JhcHBlciB0aGF0IHN1cHBvcnRzIG11bHRpcGxlIGZpbGUgcGF0Y2hlcyB2aWEgY2FsbGJhY2tzLlxuXHRmdW5jdGlvbiBhcHBseVBhdGNoZXModW5pRGlmZiwgb3B0aW9ucykge1xuXHQgIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcblx0ICAgIHVuaURpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9wYXJzZS5wYXJzZVBhdGNoKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyh1bmlEaWZmKTtcblx0ICB9XG5cblx0ICB2YXIgY3VycmVudEluZGV4ID0gMDtcblx0ICBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoKSB7XG5cdCAgICB2YXIgaW5kZXggPSB1bmlEaWZmW2N1cnJlbnRJbmRleCsrXTtcblx0ICAgIGlmICghaW5kZXgpIHtcblx0ICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcblx0ICAgIH1cblxuXHQgICAgb3B0aW9ucy5sb2FkRmlsZShpbmRleCwgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuXHQgICAgICBpZiAoZXJyKSB7XG5cdCAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHZhciB1cGRhdGVkQ29udGVudCA9IGFwcGx5UGF0Y2goZGF0YSwgaW5kZXgsIG9wdGlvbnMpO1xuXHQgICAgICBvcHRpb25zLnBhdGNoZWQoaW5kZXgsIHVwZGF0ZWRDb250ZW50LCBmdW5jdGlvbiAoZXJyKSB7XG5cdCAgICAgICAgaWYgKGVycikge1xuXHQgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBwcm9jZXNzSW5kZXgoKTtcblx0ICAgICAgfSk7XG5cdCAgICB9KTtcblx0ICB9XG5cdCAgcHJvY2Vzc0luZGV4KCk7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5d1lYUmphQzloY0hCc2VTNXFjeUpkTENKdVlXMWxjeUk2V3lKaGNIQnNlVkJoZEdOb0lpd2lZWEJ3YkhsUVlYUmphR1Z6SWl3aWMyOTFjbU5sSWl3aWRXNXBSR2xtWmlJc0ltOXdkR2x2Ym5NaUxDSkJjbkpoZVNJc0ltbHpRWEp5WVhraUxDSnNaVzVuZEdnaUxDSkZjbkp2Y2lJc0lteHBibVZ6SWl3aWMzQnNhWFFpTENKa1pXeHBiV2wwWlhKeklpd2liV0YwWTJnaUxDSm9kVzVyY3lJc0ltTnZiWEJoY21WTWFXNWxJaXdpYkdsdVpVNTFiV0psY2lJc0lteHBibVVpTENKdmNHVnlZWFJwYjI0aUxDSndZWFJqYUVOdmJuUmxiblFpTENKbGNuSnZja052ZFc1MElpd2lablY2ZWtaaFkzUnZjaUlzSW0xcGJreHBibVVpTENKdlptWnpaWFFpTENKeVpXMXZkbVZGVDBaT1RDSXNJbUZrWkVWUFJrNU1JaXdpYUhWdWEwWnBkSE1pTENKb2RXNXJJaXdpZEc5UWIzTWlMQ0pxSWl3aVkyOXVkR1Z1ZENJc0luTjFZbk4wY2lJc0lta2lMQ0p0WVhoTWFXNWxJaXdpYjJ4a1RHbHVaWE1pTENKc2IyTmhiRTltWm5ObGRDSXNJbTlzWkZOMFlYSjBJaXdpYVhSbGNtRjBiM0lpTENKMWJtUmxabWx1WldRaUxDSmthV1ptVDJabWMyVjBJaXdpYm1WM1RHbHVaWE1pTENKa1pXeHBiV2wwWlhJaUxDSnNhVzVsWkdWc2FXMXBkR1Z5Y3lJc0luTndiR2xqWlNJc0luQnlaWFpwYjNWelQzQmxjbUYwYVc5dUlpd2ljRzl3SWl3aWNIVnphQ0lzSWw5cklpd2lhbTlwYmlJc0ltTjFjbkpsYm5SSmJtUmxlQ0lzSW5CeWIyTmxjM05KYm1SbGVDSXNJbWx1WkdWNElpd2lZMjl0Y0d4bGRHVWlMQ0pzYjJGa1JtbHNaU0lzSW1WeWNpSXNJbVJoZEdFaUxDSjFjR1JoZEdWa1EyOXVkR1Z1ZENJc0luQmhkR05vWldRaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3p0blEwRkhaMEpCTEZVc1IwRkJRVUVzVlR0NVJFRnZTVUZETEZrc1IwRkJRVUVzV1RzN1FVRjJTV2hDT3p0QlFVTkJPenM3T3pzN2RVSkJSVThzVTBGQlUwUXNWVUZCVkN4RFFVRnZRa1VzVFVGQmNFSXNSVUZCTkVKRExFOUJRVFZDTEVWQlFXMUVPMEZCUVVFc2MwUkJRV1JETEU5QlFXTXNkVVZCUVVvc1JVRkJTVHM3UVVGRGVFUXNUVUZCU1N4UFFVRlBSQ3hQUVVGUUxFdEJRVzFDTEZGQlFYWkNMRVZCUVdsRE8wRkJReTlDUVN4alFVRlZMSGRGUVVGWFFTeFBRVUZZTEVOQlFWWTdRVUZEUkRzN1FVRkZSQ3hOUVVGSlJTeE5RVUZOUXl4UFFVRk9MRU5CUVdOSUxFOUJRV1FzUTBGQlNpeEZRVUUwUWp0QlFVTXhRaXhSUVVGSlFTeFJRVUZSU1N4TlFVRlNMRWRCUVdsQ0xFTkJRWEpDTEVWQlFYZENPMEZCUTNSQ0xGbEJRVTBzU1VGQlNVTXNTMEZCU2l4RFFVRlZMRFJEUVVGV0xFTkJRVTQ3UVVGRFJEczdRVUZGUkV3c1kwRkJWVUVzVVVGQlVTeERRVUZTTEVOQlFWWTdRVUZEUkRzN1FVRkZSRHRCUVVOQkxFMUJRVWxOTEZGQlFWRlFMRTlCUVU5UkxFdEJRVkFzUTBGQllTeHhRa0ZCWWl4RFFVRmFPMEZCUVVFc1RVRkRTVU1zWVVGQllWUXNUMEZCVDFVc1MwRkJVQ3hEUVVGaExITkNRVUZpTEV0QlFYZERMRVZCUkhwRU8wRkJRVUVzVFVGRlNVTXNVVUZCVVZZc1VVRkJVVlVzUzBGR2NFSTdRVUZCUVN4TlFVbEpReXhqUVVGalZpeFJRVUZSVlN4WFFVRlNMRWxCUVhkQ0xGVkJRVU5ETEZWQlFVUXNSVUZCWVVNc1NVRkJZaXhGUVVGdFFrTXNVMEZCYmtJc1JVRkJPRUpETEZsQlFUbENPMEZCUVVFc2JVTkJRU3REUml4VFFVRlRSVHRCUVVGNFJEdEJRVUZCTEVkQlNqRkRPMEZCUVVFc1RVRkxTVU1zWVVGQllTeERRVXhxUWp0QlFVRkJMRTFCVFVsRExHRkJRV0ZvUWl4UlFVRlJaMElzVlVGQlVpeEpRVUZ6UWl4RFFVNTJRenRCUVVGQkxFMUJUMGxETEZWQlFWVXNRMEZRWkR0QlFVRkJMRTFCVVVsRExGTkJRVk1zUTBGU1lqdEJRVUZCTEUxQlZVbERMRFpEUVZaS08wRkJRVUVzVFVGWFNVTXNNRU5CV0VvN08wRkJZVUU3T3p0QlFVZEJMRmRCUVZORExGRkJRVlFzUTBGQmEwSkRMRWxCUVd4Q0xFVkJRWGRDUXl4TFFVRjRRaXhGUVVFclFqdEJRVU0zUWl4VFFVRkxMRWxCUVVsRExFbEJRVWtzUTBGQllpeEZRVUZuUWtFc1NVRkJTVVlzUzBGQlMycENMRXRCUVV3c1EwRkJWMFlzVFVGQkwwSXNSVUZCZFVOeFFpeEhRVUYyUXl4RlFVRTBRenRCUVVNeFF5eFZRVUZKV2l4UFFVRlBWU3hMUVVGTGFrSXNTMEZCVEN4RFFVRlhiVUlzUTBGQldDeERRVUZZTzBGQlFVRXNWVUZEU1Znc1dVRkJXVVFzUzBGQlN5eERRVUZNTEVOQlJHaENPMEZCUVVFc1ZVRkZTV0VzVlVGQlZXSXNTMEZCUzJNc1RVRkJUQ3hEUVVGWkxFTkJRVm9zUTBGR1pEczdRVUZKUVN4VlFVRkpZaXhqUVVGakxFZEJRV1FzU1VGQmNVSkJMR05CUVdNc1IwRkJka01zUlVGQk5FTTdRVUZETVVNN1FVRkRRU3haUVVGSkxFTkJRVU5JTEZsQlFWbGhMRkZCUVZFc1EwRkJjRUlzUlVGQmRVSnNRaXhOUVVGTmEwSXNTMEZCVGl4RFFVRjJRaXhGUVVGeFExWXNVMEZCY2tNc1JVRkJaMFJaTEU5QlFXaEVMRU5CUVV3c1JVRkJLMFE3UVVGRE4wUldPenRCUVVWQkxHTkJRVWxCTEdGQlFXRkRMRlZCUVdwQ0xFVkJRVFpDTzBGQlF6TkNMRzFDUVVGUExFdEJRVkE3UVVGRFJEdEJRVU5HTzBGQlEwUlBPMEZCUTBRN1FVRkRSanM3UVVGRlJDeFhRVUZQTEVsQlFWQTdRVUZEUkRzN1FVRkZSRHRCUVVOQkxFOUJRVXNzU1VGQlNVa3NTVUZCU1N4RFFVRmlMRVZCUVdkQ1FTeEpRVUZKYkVJc1RVRkJUVTRzVFVGQk1VSXNSVUZCYTBOM1FpeEhRVUZzUXl4RlFVRjFRenRCUVVOeVF5eFJRVUZKVEN4UFFVRlBZaXhOUVVGTmEwSXNRMEZCVGl4RFFVRllPMEZCUVVFc1VVRkRTVU1zVlVGQlZYWkNMRTFCUVUxR0xFMUJRVTRzUjBGQlpXMUNMRXRCUVV0UExGRkJSR3hETzBGQlFVRXNVVUZGU1VNc1kwRkJZeXhEUVVac1FqdEJRVUZCTEZGQlIwbFFMRkZCUVZGTUxGTkJRVk5KTEV0QlFVdFRMRkZCUVdRc1IwRkJlVUlzUTBGSWNrTTdPMEZCUzBFc1VVRkJTVU1zVjBGQlZ5eHZSa0ZCYVVKVUxFdEJRV3BDTEVWQlFYZENUaXhQUVVGNFFpeEZRVUZwUTFjc1QwRkJha01zUTBGQlpqczdRVUZGUVN4WFFVRlBSU3huUWtGQlowSkhMRk5CUVhaQ0xFVkJRV3REU0N4alFVRmpSU3hWUVVGb1JDeEZRVUUwUkR0QlFVTXhSQ3hWUVVGSldDeFRRVUZUUXl4SlFVRlVMRVZCUVdWRExGRkJRVkZQTEZkQlFYWkNMRU5CUVVvc1JVRkJlVU03UVVGRGRrTlNMR0ZCUVV0S0xFMUJRVXdzUjBGQlkwRXNWVUZCVlZrc1YwRkJlRUk3UVVGRFFUdEJRVU5FTzBGQlEwWTdPMEZCUlVRc1VVRkJTVUVzWjBKQlFXZENSeXhUUVVGd1FpeEZRVUVyUWp0QlFVTTNRaXhoUVVGUExFdEJRVkE3UVVGRFJEczdRVUZGUkR0QlFVTkJPMEZCUTBGb1FpeGpRVUZWU3l4TFFVRkxTaXhOUVVGTUxFZEJRV05KTEV0QlFVdFRMRkZCUVc1Q0xFZEJRVGhDVkN4TFFVRkxUeXhSUVVFM1F6dEJRVU5FT3p0QlFVVkVPMEZCUTBFc1RVRkJTVXNzWVVGQllTeERRVUZxUWp0QlFVTkJMRTlCUVVzc1NVRkJTVkFzUzBGQlNTeERRVUZpTEVWQlFXZENRU3hMUVVGSmJFSXNUVUZCVFU0c1RVRkJNVUlzUlVGQmEwTjNRaXhKUVVGc1F5eEZRVUYxUXp0QlFVTnlReXhSUVVGSlRDeFJRVUZQWWl4TlFVRk5hMElzUlVGQlRpeERRVUZZTzBGQlFVRXNVVUZEU1Vvc1UwRkJVVVFzVFVGQlMxTXNVVUZCVEN4SFFVRm5RbFFzVFVGQlMwb3NUVUZCY2tJc1IwRkJPRUpuUWl4VlFVRTVRaXhIUVVFeVF5eERRVVIyUkR0QlFVVkJRU3hyUWtGQlkxb3NUVUZCUzJFc1VVRkJUQ3hIUVVGblFtSXNUVUZCUzA4c1VVRkJia003TzBGQlJVRXNVVUZCU1U0c1UwRkJVU3hEUVVGYUxFVkJRV1U3UVVGQlJUdEJRVU5tUVN4bFFVRlJMRU5CUVZJN1FVRkRSRHM3UVVGRlJDeFRRVUZMTEVsQlFVbERMRWxCUVVrc1EwRkJZaXhGUVVGblFrRXNTVUZCU1VZc1RVRkJTMnBDTEV0QlFVd3NRMEZCVjBZc1RVRkJMMElzUlVGQmRVTnhRaXhIUVVGMlF5eEZRVUUwUXp0QlFVTXhReXhWUVVGSldpeFBRVUZQVlN4TlFVRkxha0lzUzBGQlRDeERRVUZYYlVJc1EwRkJXQ3hEUVVGWU8wRkJRVUVzVlVGRFNWZ3NXVUZCV1VRc1MwRkJTeXhEUVVGTUxFTkJSR2hDTzBGQlFVRXNWVUZGU1dFc1ZVRkJWV0lzUzBGQlMyTXNUVUZCVEN4RFFVRlpMRU5CUVZvc1EwRkdaRHRCUVVGQkxGVkJSMGxWTEZsQlFWbGtMRTFCUVV0bExHTkJRVXdzUTBGQmIwSmlMRU5CUVhCQ0xFTkJTR2hDT3p0QlFVdEJMRlZCUVVsWUxHTkJRV01zUjBGQmJFSXNSVUZCZFVJN1FVRkRja0pWTzBGQlEwUXNUMEZHUkN4TlFVVlBMRWxCUVVsV0xHTkJRV01zUjBGQmJFSXNSVUZCZFVJN1FVRkROVUpTTEdOQlFVMXBReXhOUVVGT0xFTkJRV0ZtTEUxQlFXSXNSVUZCYjBJc1EwRkJjRUk3UVVGRFFXaENMRzFDUVVGWEswSXNUVUZCV0N4RFFVRnJRbVlzVFVGQmJFSXNSVUZCZVVJc1EwRkJla0k3UVVGRFJqdEJRVU5ETEU5QlNrMHNUVUZKUVN4SlFVRkpWaXhqUVVGakxFZEJRV3hDTEVWQlFYVkNPMEZCUXpWQ1VpeGpRVUZOYVVNc1RVRkJUaXhEUVVGaFppeE5RVUZpTEVWQlFXOUNMRU5CUVhCQ0xFVkJRWFZDUlN4UFFVRjJRanRCUVVOQmJFSXNiVUpCUVZjclFpeE5RVUZZTEVOQlFXdENaaXhOUVVGc1FpeEZRVUY1UWl4RFFVRjZRaXhGUVVFMFFtRXNVMEZCTlVJN1FVRkRRV0k3UVVGRFJDeFBRVXBOTEUxQlNVRXNTVUZCU1ZZc1kwRkJZeXhKUVVGc1FpeEZRVUYzUWp0QlFVTTNRaXhaUVVGSk1FSXNiMEpCUVc5Q2FrSXNUVUZCUzJwQ0xFdEJRVXdzUTBGQlYyMUNMRWxCUVVrc1EwRkJaaXhKUVVGdlFrWXNUVUZCUzJwQ0xFdEJRVXdzUTBGQlYyMUNMRWxCUVVrc1EwRkJaaXhGUVVGclFpeERRVUZzUWl4RFFVRndRaXhIUVVFeVF5eEpRVUZ1UlR0QlFVTkJMRmxCUVVsbExITkNRVUZ6UWl4SFFVRXhRaXhGUVVFclFqdEJRVU0zUW5CQ0xIZENRVUZqTEVsQlFXUTdRVUZEUkN4VFFVWkVMRTFCUlU4c1NVRkJTVzlDTEhOQ1FVRnpRaXhIUVVFeFFpeEZRVUVyUWp0QlFVTndRMjVDTEhGQ1FVRlhMRWxCUVZnN1FVRkRSRHRCUVVOR08wRkJRMFk3UVVGRFJqczdRVUZGUkR0QlFVTkJMRTFCUVVsRUxGZEJRVW9zUlVGQmFVSTdRVUZEWml4WFFVRlBMRU5CUVVOa0xFMUJRVTFCTEUxQlFVMUdMRTFCUVU0c1IwRkJaU3hEUVVGeVFpeERRVUZTTEVWQlFXbERPMEZCUXk5Q1JTeFpRVUZOYlVNc1IwRkJUanRCUVVOQmFrTXNhVUpCUVZkcFF5eEhRVUZZTzBGQlEwUTdRVUZEUml4SFFVeEVMRTFCUzA4c1NVRkJTWEJDTEZGQlFVb3NSVUZCWXp0QlFVTnVRbVlzVlVGQlRXOURMRWxCUVU0c1EwRkJWeXhGUVVGWU8wRkJRMEZzUXl4bFFVRlhhME1zU1VGQldDeERRVUZuUWl4SlFVRm9RanRCUVVORU8wRkJRMFFzVDBGQlN5eEpRVUZKUXl4TFFVRkxMRU5CUVdRc1JVRkJhVUpCTEV0QlFVdHlReXhOUVVGTlJpeE5RVUZPTEVkQlFXVXNRMEZCY2tNc1JVRkJkME4xUXl4SlFVRjRReXhGUVVFNFF6dEJRVU0xUTNKRExGVkJRVTF4UXl4RlFVRk9MRWxCUVZseVF5eE5RVUZOY1VNc1JVRkJUaXhKUVVGWmJrTXNWMEZCVjIxRExFVkJRVmdzUTBGQmVFSTdRVUZEUkR0QlFVTkVMRk5CUVU5eVF5eE5RVUZOYzBNc1NVRkJUaXhEUVVGWExFVkJRVmdzUTBGQlVEdEJRVU5FT3p0QlFVVkVPMEZCUTA4c1UwRkJVemxETEZsQlFWUXNRMEZCYzBKRkxFOUJRWFJDTEVWQlFTdENReXhQUVVFdlFpeEZRVUYzUXp0QlFVTTNReXhOUVVGSkxFOUJRVTlFTEU5QlFWQXNTMEZCYlVJc1VVRkJka0lzUlVGQmFVTTdRVUZETDBKQkxHTkJRVlVzZDBWQlFWZEJMRTlCUVZnc1EwRkJWanRCUVVORU96dEJRVVZFTEUxQlFVazJReXhsUVVGbExFTkJRVzVDTzBGQlEwRXNWMEZCVTBNc1dVRkJWQ3hIUVVGM1FqdEJRVU4wUWl4UlFVRkpReXhSUVVGUkwwTXNVVUZCVVRaRExHTkJRVklzUTBGQldqdEJRVU5CTEZGQlFVa3NRMEZCUTBVc1MwRkJUQ3hGUVVGWk8wRkJRMVlzWVVGQlR6bERMRkZCUVZFclF5eFJRVUZTTEVWQlFWQTdRVUZEUkRzN1FVRkZSQzlETEZsQlFWRm5SQ3hSUVVGU0xFTkJRV2xDUml4TFFVRnFRaXhGUVVGM1FpeFZRVUZUUnl4SFFVRlVMRVZCUVdORExFbEJRV1FzUlVGQmIwSTdRVUZETVVNc1ZVRkJTVVFzUjBGQlNpeEZRVUZUTzBGQlExQXNaVUZCVDJwRUxGRkJRVkVyUXl4UlFVRlNMRU5CUVdsQ1JTeEhRVUZxUWl4RFFVRlFPMEZCUTBRN08wRkJSVVFzVlVGQlNVVXNhVUpCUVdsQ2RrUXNWMEZCVjNORUxFbEJRVmdzUlVGQmFVSktMRXRCUVdwQ0xFVkJRWGRDT1VNc1QwRkJlRUlzUTBGQmNrSTdRVUZEUVVFc1kwRkJVVzlFTEU5QlFWSXNRMEZCWjBKT0xFdEJRV2hDTEVWQlFYVkNTeXhqUVVGMlFpeEZRVUYxUXl4VlFVRlRSaXhIUVVGVUxFVkJRV003UVVGRGJrUXNXVUZCU1VFc1IwRkJTaXhGUVVGVE8wRkJRMUFzYVVKQlFVOXFSQ3hSUVVGUkswTXNVVUZCVWl4RFFVRnBRa1VzUjBGQmFrSXNRMEZCVUR0QlFVTkVPenRCUVVWRVNqdEJRVU5FTEU5QlRrUTdRVUZQUkN4TFFXSkVPMEZCWTBRN1FVRkRSRUU3UVVGRFJDSXNJbVpwYkdVaU9pSmhjSEJzZVM1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdjR0Z5YzJWUVlYUmphSDBnWm5KdmJTQW5MaTl3WVhKelpTYzdYRzVwYlhCdmNuUWdaR2x6ZEdGdVkyVkpkR1Z5WVhSdmNpQm1jbTl0SUNjdUxpOTFkR2xzTDJScGMzUmhibU5sTFdsMFpYSmhkRzl5Snp0Y2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHRndjR3g1VUdGMFkyZ29jMjkxY21ObExDQjFibWxFYVdabUxDQnZjSFJwYjI1eklEMGdlMzBwSUh0Y2JpQWdhV1lnS0hSNWNHVnZaaUIxYm1sRWFXWm1JRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUhWdWFVUnBabVlnUFNCd1lYSnpaVkJoZEdOb0tIVnVhVVJwWm1ZcE8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0VGeWNtRjVMbWx6UVhKeVlYa29kVzVwUkdsbVppa3BJSHRjYmlBZ0lDQnBaaUFvZFc1cFJHbG1aaTVzWlc1bmRHZ2dQaUF4S1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjJGd2NHeDVVR0YwWTJnZ2IyNXNlU0IzYjNKcmN5QjNhWFJvSUdFZ2MybHVaMnhsSUdsdWNIVjBMaWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFZ1YVVScFptWWdQU0IxYm1sRWFXWm1XekJkTzF4dUlDQjlYRzVjYmlBZ0x5OGdRWEJ3YkhrZ2RHaGxJR1JwWm1ZZ2RHOGdkR2hsSUdsdWNIVjBYRzRnSUd4bGRDQnNhVzVsY3lBOUlITnZkWEpqWlM1emNHeHBkQ2d2WEZ4eVhGeHVmRnRjWEc1Y1hIWmNYR1pjWEhKY1hIZzROVjB2S1N4Y2JpQWdJQ0FnSUdSbGJHbHRhWFJsY25NZ1BTQnpiM1Z5WTJVdWJXRjBZMmdvTDF4Y2NseGNibnhiWEZ4dVhGeDJYRnhtWEZ4eVhGeDRPRFZkTDJjcElIeDhJRnRkTEZ4dUlDQWdJQ0FnYUhWdWEzTWdQU0IxYm1sRWFXWm1MbWgxYm10ekxGeHVYRzRnSUNBZ0lDQmpiMjF3WVhKbFRHbHVaU0E5SUc5d2RHbHZibk11WTI5dGNHRnlaVXhwYm1VZ2ZId2dLQ2hzYVc1bFRuVnRZbVZ5TENCc2FXNWxMQ0J2Y0dWeVlYUnBiMjRzSUhCaGRHTm9RMjl1ZEdWdWRDa2dQVDRnYkdsdVpTQTlQVDBnY0dGMFkyaERiMjUwWlc1MEtTeGNiaUFnSUNBZ0lHVnljbTl5UTI5MWJuUWdQU0F3TEZ4dUlDQWdJQ0FnWm5WNmVrWmhZM1J2Y2lBOUlHOXdkR2x2Ym5NdVpuVjZla1poWTNSdmNpQjhmQ0F3TEZ4dUlDQWdJQ0FnYldsdVRHbHVaU0E5SURBc1hHNGdJQ0FnSUNCdlptWnpaWFFnUFNBd0xGeHVYRzRnSUNBZ0lDQnlaVzF2ZG1WRlQwWk9UQ3hjYmlBZ0lDQWdJR0ZrWkVWUFJrNU1PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRhR1ZqYTNNZ2FXWWdkR2hsSUdoMWJtc2daWGhoWTNSc2VTQm1hWFJ6SUc5dUlIUm9aU0J3Y205MmFXUmxaQ0JzYjJOaGRHbHZibHh1SUNBZ0tpOWNiaUFnWm5WdVkzUnBiMjRnYUhWdWEwWnBkSE1vYUhWdWF5d2dkRzlRYjNNcElIdGNiaUFnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBOElHaDFibXN1YkdsdVpYTXViR1Z1WjNSb095QnFLeXNwSUh0Y2JpQWdJQ0FnSUd4bGRDQnNhVzVsSUQwZ2FIVnVheTVzYVc1bGMxdHFYU3hjYmlBZ0lDQWdJQ0FnSUNCdmNHVnlZWFJwYjI0Z1BTQnNhVzVsV3pCZExGeHVJQ0FnSUNBZ0lDQWdJR052Ym5SbGJuUWdQU0JzYVc1bExuTjFZbk4wY2lneEtUdGNibHh1SUNBZ0lDQWdhV1lnS0c5d1pYSmhkR2x2YmlBOVBUMGdKeUFuSUh4OElHOXdaWEpoZEdsdmJpQTlQVDBnSnkwbktTQjdYRzRnSUNBZ0lDQWdJQzh2SUVOdmJuUmxlSFFnYzJGdWFYUjVJR05vWldOclhHNGdJQ0FnSUNBZ0lHbG1JQ2doWTI5dGNHRnlaVXhwYm1Vb2RHOVFiM01nS3lBeExDQnNhVzVsYzF0MGIxQnZjMTBzSUc5d1pYSmhkR2x2Yml3Z1kyOXVkR1Z1ZENrcElIdGNiaUFnSUNBZ0lDQWdJQ0JsY25KdmNrTnZkVzUwS3lzN1hHNWNiaUFnSUNBZ0lDQWdJQ0JwWmlBb1pYSnliM0pEYjNWdWRDQStJR1oxZW5wR1lXTjBiM0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZEc5UWIzTXJLenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2RISjFaVHRjYmlBZ2ZWeHVYRzRnSUM4dklGTmxZWEpqYUNCaVpYTjBJR1pwZENCdlptWnpaWFJ6SUdadmNpQmxZV05vSUdoMWJtc2dZbUZ6WldRZ2IyNGdkR2hsSUhCeVpYWnBiM1Z6SUc5dVpYTmNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCb2RXNXJjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUd4bGRDQm9kVzVySUQwZ2FIVnVhM05iYVYwc1hHNGdJQ0FnSUNBZ0lHMWhlRXhwYm1VZ1BTQnNhVzVsY3k1c1pXNW5kR2dnTFNCb2RXNXJMbTlzWkV4cGJtVnpMRnh1SUNBZ0lDQWdJQ0JzYjJOaGJFOW1abk5sZENBOUlEQXNYRzRnSUNBZ0lDQWdJSFJ2VUc5eklEMGdiMlptYzJWMElDc2dhSFZ1YXk1dmJHUlRkR0Z5ZENBdElERTdYRzVjYmlBZ0lDQnNaWFFnYVhSbGNtRjBiM0lnUFNCa2FYTjBZVzVqWlVsMFpYSmhkRzl5S0hSdlVHOXpMQ0J0YVc1TWFXNWxMQ0J0WVhoTWFXNWxLVHRjYmx4dUlDQWdJR1p2Y2lBb095QnNiMk5oYkU5bVpuTmxkQ0FoUFQwZ2RXNWtaV1pwYm1Wa095QnNiMk5oYkU5bVpuTmxkQ0E5SUdsMFpYSmhkRzl5S0NrcElIdGNiaUFnSUNBZ0lHbG1JQ2hvZFc1clJtbDBjeWhvZFc1ckxDQjBiMUJ2Y3lBcklHeHZZMkZzVDJabWMyVjBLU2tnZTF4dUlDQWdJQ0FnSUNCb2RXNXJMbTltWm5ObGRDQTlJRzltWm5ObGRDQXJQU0JzYjJOaGJFOW1abk5sZER0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0d4dlkyRnNUMlptYzJWMElEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QlRaWFFnYkc5M1pYSWdkR1Y0ZENCc2FXMXBkQ0IwYnlCbGJtUWdiMllnZEdobElHTjFjbkpsYm5RZ2FIVnVheXdnYzI4Z2JtVjRkQ0J2Ym1WeklHUnZiaWQwSUhSeWVWeHVJQ0FnSUM4dklIUnZJR1pwZENCdmRtVnlJR0ZzY21WaFpIa2djR0YwWTJobFpDQjBaWGgwWEc0Z0lDQWdiV2x1VEdsdVpTQTlJR2gxYm1zdWIyWm1jMlYwSUNzZ2FIVnVheTV2YkdSVGRHRnlkQ0FySUdoMWJtc3ViMnhrVEdsdVpYTTdYRzRnSUgxY2JseHVJQ0F2THlCQmNIQnNlU0J3WVhSamFDQm9kVzVyYzF4dUlDQnNaWFFnWkdsbVprOW1abk5sZENBOUlEQTdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2FIVnVhM011YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNCc1pYUWdhSFZ1YXlBOUlHaDFibXR6VzJsZExGeHVJQ0FnSUNBZ0lDQjBiMUJ2Y3lBOUlHaDFibXN1YjJ4a1UzUmhjblFnS3lCb2RXNXJMbTltWm5ObGRDQXJJR1JwWm1aUFptWnpaWFFnTFNBeE8xeHVJQ0FnSUdScFptWlBabVp6WlhRZ0t6MGdhSFZ1YXk1dVpYZE1hVzVsY3lBdElHaDFibXN1YjJ4a1RHbHVaWE03WEc1Y2JpQWdJQ0JwWmlBb2RHOVFiM01nUENBd0tTQjdJQzh2SUVOeVpXRjBhVzVuSUdFZ2JtVjNJR1pwYkdWY2JpQWdJQ0FnSUhSdlVHOXpJRDBnTUR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ01Ec2dhaUE4SUdoMWJtc3ViR2x1WlhNdWJHVnVaM1JvT3lCcUt5c3BJSHRjYmlBZ0lDQWdJR3hsZENCc2FXNWxJRDBnYUhWdWF5NXNhVzVsYzF0cVhTeGNiaUFnSUNBZ0lDQWdJQ0J2Y0dWeVlYUnBiMjRnUFNCc2FXNWxXekJkTEZ4dUlDQWdJQ0FnSUNBZ0lHTnZiblJsYm5RZ1BTQnNhVzVsTG5OMVluTjBjaWd4S1N4Y2JpQWdJQ0FnSUNBZ0lDQmtaV3hwYldsMFpYSWdQU0JvZFc1ckxteHBibVZrWld4cGJXbDBaWEp6VzJwZE8xeHVYRzRnSUNBZ0lDQnBaaUFvYjNCbGNtRjBhVzl1SUQwOVBTQW5JQ2NwSUh0Y2JpQWdJQ0FnSUNBZ2RHOVFiM01yS3p0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2IzQmxjbUYwYVc5dUlEMDlQU0FuTFNjcElIdGNiaUFnSUNBZ0lDQWdiR2x1WlhNdWMzQnNhV05sS0hSdlVHOXpMQ0F4S1R0Y2JpQWdJQ0FnSUNBZ1pHVnNhVzFwZEdWeWN5NXpjR3hwWTJVb2RHOVFiM01zSURFcE8xeHVJQ0FnSUNBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHVnNjMlVnS2k5Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2IzQmxjbUYwYVc5dUlEMDlQU0FuS3ljcElIdGNiaUFnSUNBZ0lDQWdiR2x1WlhNdWMzQnNhV05sS0hSdlVHOXpMQ0F3TENCamIyNTBaVzUwS1R0Y2JpQWdJQ0FnSUNBZ1pHVnNhVzFwZEdWeWN5NXpjR3hwWTJVb2RHOVFiM01zSURBc0lHUmxiR2x0YVhSbGNpazdYRzRnSUNBZ0lDQWdJSFJ2VUc5ekt5czdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzl3WlhKaGRHbHZiaUE5UFQwZ0oxeGNYRnduS1NCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J3Y21WMmFXOTFjMDl3WlhKaGRHbHZiaUE5SUdoMWJtc3ViR2x1WlhOYmFpQXRJREZkSUQ4Z2FIVnVheTVzYVc1bGMxdHFJQzBnTVYxYk1GMGdPaUJ1ZFd4c08xeHVJQ0FnSUNBZ0lDQnBaaUFvY0hKbGRtbHZkWE5QY0dWeVlYUnBiMjRnUFQwOUlDY3JKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxiVzkyWlVWUFJrNU1JRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h3Y21WMmFXOTFjMDl3WlhKaGRHbHZiaUE5UFQwZ0p5MG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ1lXUmtSVTlHVGt3Z1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5OGdTR0Z1Wkd4bElFVlBSazVNSUdsdWMyVnlkR2x2Ymk5eVpXMXZkbUZzWEc0Z0lHbG1JQ2h5WlcxdmRtVkZUMFpPVENrZ2UxeHVJQ0FnSUhkb2FXeGxJQ2doYkdsdVpYTmJiR2x1WlhNdWJHVnVaM1JvSUMwZ01WMHBJSHRjYmlBZ0lDQWdJR3hwYm1WekxuQnZjQ2dwTzF4dUlDQWdJQ0FnWkdWc2FXMXBkR1Z5Y3k1d2IzQW9LVHRjYmlBZ0lDQjlYRzRnSUgwZ1pXeHpaU0JwWmlBb1lXUmtSVTlHVGt3cElIdGNiaUFnSUNCc2FXNWxjeTV3ZFhOb0tDY25LVHRjYmlBZ0lDQmtaV3hwYldsMFpYSnpMbkIxYzJnb0oxeGNiaWNwTzF4dUlDQjlYRzRnSUdadmNpQW9iR1YwSUY5cklEMGdNRHNnWDJzZ1BDQnNhVzVsY3k1c1pXNW5kR2dnTFNBeE95QmZheXNyS1NCN1hHNGdJQ0FnYkdsdVpYTmJYMnRkSUQwZ2JHbHVaWE5iWDJ0ZElDc2daR1ZzYVcxcGRHVnljMXRmYTEwN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUd4cGJtVnpMbXB2YVc0b0p5Y3BPMXh1ZlZ4dVhHNHZMeUJYY21Gd2NHVnlJSFJvWVhRZ2MzVndjRzl5ZEhNZ2JYVnNkR2x3YkdVZ1ptbHNaU0J3WVhSamFHVnpJSFpwWVNCallXeHNZbUZqYTNNdVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1lYQndiSGxRWVhSamFHVnpLSFZ1YVVScFptWXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ2FXWWdLSFI1Y0dWdlppQjFibWxFYVdabUlEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJSFZ1YVVScFptWWdQU0J3WVhKelpWQmhkR05vS0hWdWFVUnBabVlwTzF4dUlDQjlYRzVjYmlBZ2JHVjBJR04xY25KbGJuUkpibVJsZUNBOUlEQTdYRzRnSUdaMWJtTjBhVzl1SUhCeWIyTmxjM05KYm1SbGVDZ3BJSHRjYmlBZ0lDQnNaWFFnYVc1a1pYZ2dQU0IxYm1sRWFXWm1XMk4xY25KbGJuUkpibVJsZUNzclhUdGNiaUFnSUNCcFppQW9JV2x1WkdWNEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2IzQjBhVzl1Y3k1amIyMXdiR1YwWlNncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUc5d2RHbHZibk11Ykc5aFpFWnBiR1VvYVc1a1pYZ3NJR1oxYm1OMGFXOXVLR1Z5Y2l3Z1pHRjBZU2tnZTF4dUlDQWdJQ0FnYVdZZ0tHVnljaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYjNCMGFXOXVjeTVqYjIxd2JHVjBaU2hsY25JcE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnNaWFFnZFhCa1lYUmxaRU52Ym5SbGJuUWdQU0JoY0hCc2VWQmhkR05vS0dSaGRHRXNJR2x1WkdWNExDQnZjSFJwYjI1ektUdGNiaUFnSUNBZ0lHOXdkR2x2Ym5NdWNHRjBZMmhsWkNocGJtUmxlQ3dnZFhCa1lYUmxaRU52Ym5SbGJuUXNJR1oxYm1OMGFXOXVLR1Z5Y2lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWlhKeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRzl3ZEdsdmJuTXVZMjl0Y0d4bGRHVW9aWEp5S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJSEJ5YjJObGMzTkpibVJsZUNncE8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZTazdYRzRnSUgxY2JpQWdjSEp2WTJWemMwbHVaR1Y0S0NrN1hHNTlYRzRpWFgwPVxuXG5cbi8qKiovIH0pLFxuLyogMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovcGFyc2VQYXRjaCA9IHBhcnNlUGF0Y2g7XG5cdGZ1bmN0aW9uIHBhcnNlUGF0Y2godW5pRGlmZikge1xuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9vcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuXHQgIHZhciBkaWZmc3RyID0gdW5pRGlmZi5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcblx0ICAgICAgZGVsaW1pdGVycyA9IHVuaURpZmYubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuXHQgICAgICBsaXN0ID0gW10sXG5cdCAgICAgIGkgPSAwO1xuXG5cdCAgZnVuY3Rpb24gcGFyc2VJbmRleCgpIHtcblx0ICAgIHZhciBpbmRleCA9IHt9O1xuXHQgICAgbGlzdC5wdXNoKGluZGV4KTtcblxuXHQgICAgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuXHQgICAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuXHQgICAgICB2YXIgbGluZSA9IGRpZmZzdHJbaV07XG5cblx0ICAgICAgLy8gRmlsZSBoZWFkZXIgZm91bmQsIGVuZCBwYXJzaW5nIGRpZmYgbWV0YWRhdGFcblx0ICAgICAgaWYgKC9eKFxcLVxcLVxcLXxcXCtcXCtcXCt8QEApXFxzLy50ZXN0KGxpbmUpKSB7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIH1cblxuXHQgICAgICAvLyBEaWZmIGluZGV4XG5cdCAgICAgIHZhciBoZWFkZXIgPSAvXig/OkluZGV4OnxkaWZmKD86IC1yIFxcdyspKylcXHMrKC4rPylcXHMqJC8uZXhlYyhsaW5lKTtcblx0ICAgICAgaWYgKGhlYWRlcikge1xuXHQgICAgICAgIGluZGV4LmluZGV4ID0gaGVhZGVyWzFdO1xuXHQgICAgICB9XG5cblx0ICAgICAgaSsrO1xuXHQgICAgfVxuXG5cdCAgICAvLyBQYXJzZSBmaWxlIGhlYWRlcnMgaWYgdGhleSBhcmUgZGVmaW5lZC4gVW5pZmllZCBkaWZmIHJlcXVpcmVzIHRoZW0sIGJ1dFxuXHQgICAgLy8gdGhlcmUncyBubyB0ZWNobmljYWwgaXNzdWVzIHRvIGhhdmUgYW4gaXNvbGF0ZWQgaHVuayB3aXRob3V0IGZpbGUgaGVhZGVyXG5cdCAgICBwYXJzZUZpbGVIZWFkZXIoaW5kZXgpO1xuXHQgICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTtcblxuXHQgICAgLy8gUGFyc2UgaHVua3Ncblx0ICAgIGluZGV4Lmh1bmtzID0gW107XG5cblx0ICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcblx0ICAgICAgdmFyIF9saW5lID0gZGlmZnN0cltpXTtcblxuXHQgICAgICBpZiAoL14oSW5kZXg6fGRpZmZ8XFwtXFwtXFwtfFxcK1xcK1xcKylcXHMvLnRlc3QoX2xpbmUpKSB7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIH0gZWxzZSBpZiAoL15AQC8udGVzdChfbGluZSkpIHtcblx0ICAgICAgICBpbmRleC5odW5rcy5wdXNoKHBhcnNlSHVuaygpKTtcblx0ICAgICAgfSBlbHNlIGlmIChfbGluZSAmJiBvcHRpb25zLnN0cmljdCkge1xuXHQgICAgICAgIC8vIElnbm9yZSB1bmV4cGVjdGVkIGNvbnRlbnQgdW5sZXNzIGluIHN0cmljdCBtb2RlXG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxpbmUgJyArIChpICsgMSkgKyAnICcgKyBKU09OLnN0cmluZ2lmeShfbGluZSkpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIGkrKztcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIC8vIFBhcnNlcyB0aGUgLS0tIGFuZCArKysgaGVhZGVycywgaWYgbm9uZSBhcmUgZm91bmQsIG5vIGxpbmVzXG5cdCAgLy8gYXJlIGNvbnN1bWVkLlxuXHQgIGZ1bmN0aW9uIHBhcnNlRmlsZUhlYWRlcihpbmRleCkge1xuXHQgICAgdmFyIGhlYWRlclBhdHRlcm4gPSAvXigtLS18XFwrXFwrXFwrKVxccysoW1xcUyBdKikoPzpcXHQoLio/KVxccyopPyQvO1xuXHQgICAgdmFyIGZpbGVIZWFkZXIgPSBoZWFkZXJQYXR0ZXJuLmV4ZWMoZGlmZnN0cltpXSk7XG5cdCAgICBpZiAoZmlsZUhlYWRlcikge1xuXHQgICAgICB2YXIga2V5UHJlZml4ID0gZmlsZUhlYWRlclsxXSA9PT0gJy0tLScgPyAnb2xkJyA6ICduZXcnO1xuXHQgICAgICB2YXIgZmlsZU5hbWUgPSBmaWxlSGVhZGVyWzJdLnJlcGxhY2UoL1xcXFxcXFxcL2csICdcXFxcJyk7XG5cdCAgICAgIGlmICgvXlwiLipcIiQvLnRlc3QoZmlsZU5hbWUpKSB7XG5cdCAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdWJzdHIoMSwgZmlsZU5hbWUubGVuZ3RoIC0gMik7XG5cdCAgICAgIH1cblx0ICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0ZpbGVOYW1lJ10gPSBmaWxlTmFtZTtcblx0ICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0hlYWRlciddID0gZmlsZUhlYWRlclszXTtcblxuXHQgICAgICBpKys7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgLy8gUGFyc2VzIGEgaHVua1xuXHQgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBodW5rLlxuXHQgIGZ1bmN0aW9uIHBhcnNlSHVuaygpIHtcblx0ICAgIHZhciBjaHVua0hlYWRlckluZGV4ID0gaSxcblx0ICAgICAgICBjaHVua0hlYWRlckxpbmUgPSBkaWZmc3RyW2krK10sXG5cdCAgICAgICAgY2h1bmtIZWFkZXIgPSBjaHVua0hlYWRlckxpbmUuc3BsaXQoL0BAIC0oXFxkKykoPzosKFxcZCspKT8gXFwrKFxcZCspKD86LChcXGQrKSk/IEBALyk7XG5cblx0ICAgIHZhciBodW5rID0ge1xuXHQgICAgICBvbGRTdGFydDogK2NodW5rSGVhZGVyWzFdLFxuXHQgICAgICBvbGRMaW5lczogK2NodW5rSGVhZGVyWzJdIHx8IDEsXG5cdCAgICAgIG5ld1N0YXJ0OiArY2h1bmtIZWFkZXJbM10sXG5cdCAgICAgIG5ld0xpbmVzOiArY2h1bmtIZWFkZXJbNF0gfHwgMSxcblx0ICAgICAgbGluZXM6IFtdLFxuXHQgICAgICBsaW5lZGVsaW1pdGVyczogW11cblx0ICAgIH07XG5cblx0ICAgIHZhciBhZGRDb3VudCA9IDAsXG5cdCAgICAgICAgcmVtb3ZlQ291bnQgPSAwO1xuXHQgICAgZm9yICg7IGkgPCBkaWZmc3RyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgIC8vIExpbmVzIHN0YXJ0aW5nIHdpdGggJy0tLScgY291bGQgYmUgbWlzdGFrZW4gZm9yIHRoZSBcInJlbW92ZSBsaW5lXCIgb3BlcmF0aW9uXG5cdCAgICAgIC8vIEJ1dCB0aGV5IGNvdWxkIGJlIHRoZSBoZWFkZXIgZm9yIHRoZSBuZXh0IGZpbGUuIFRoZXJlZm9yZSBwcnVuZSBzdWNoIGNhc2VzIG91dC5cblx0ICAgICAgaWYgKGRpZmZzdHJbaV0uaW5kZXhPZignLS0tICcpID09PSAwICYmIGkgKyAyIDwgZGlmZnN0ci5sZW5ndGggJiYgZGlmZnN0cltpICsgMV0uaW5kZXhPZignKysrICcpID09PSAwICYmIGRpZmZzdHJbaSArIDJdLmluZGV4T2YoJ0BAJykgPT09IDApIHtcblx0ICAgICAgICBicmVhaztcblx0ICAgICAgfVxuXHQgICAgICB2YXIgb3BlcmF0aW9uID0gZGlmZnN0cltpXVswXTtcblxuXHQgICAgICBpZiAob3BlcmF0aW9uID09PSAnKycgfHwgb3BlcmF0aW9uID09PSAnLScgfHwgb3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnXFxcXCcpIHtcblx0ICAgICAgICBodW5rLmxpbmVzLnB1c2goZGlmZnN0cltpXSk7XG5cdCAgICAgICAgaHVuay5saW5lZGVsaW1pdGVycy5wdXNoKGRlbGltaXRlcnNbaV0gfHwgJ1xcbicpO1xuXG5cdCAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG5cdCAgICAgICAgICBhZGRDb3VudCsrO1xuXHQgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcblx0ICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG5cdCAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICcgJykge1xuXHQgICAgICAgICAgYWRkQ291bnQrKztcblx0ICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIGJyZWFrO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIC8vIEhhbmRsZSB0aGUgZW1wdHkgYmxvY2sgY291bnQgY2FzZVxuXHQgICAgaWYgKCFhZGRDb3VudCAmJiBodW5rLm5ld0xpbmVzID09PSAxKSB7XG5cdCAgICAgIGh1bmsubmV3TGluZXMgPSAwO1xuXHQgICAgfVxuXHQgICAgaWYgKCFyZW1vdmVDb3VudCAmJiBodW5rLm9sZExpbmVzID09PSAxKSB7XG5cdCAgICAgIGh1bmsub2xkTGluZXMgPSAwO1xuXHQgICAgfVxuXG5cdCAgICAvLyBQZXJmb3JtIG9wdGlvbmFsIHNhbml0eSBjaGVja2luZ1xuXHQgICAgaWYgKG9wdGlvbnMuc3RyaWN0KSB7XG5cdCAgICAgIGlmIChhZGRDb3VudCAhPT0gaHVuay5uZXdMaW5lcykge1xuXHQgICAgICAgIHRocm93IG5ldyBFcnJvcignQWRkZWQgbGluZSBjb3VudCBkaWQgbm90IG1hdGNoIGZvciBodW5rIGF0IGxpbmUgJyArIChjaHVua0hlYWRlckluZGV4ICsgMSkpO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChyZW1vdmVDb3VudCAhPT0gaHVuay5vbGRMaW5lcykge1xuXHQgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVtb3ZlZCBsaW5lIGNvdW50IGRpZCBub3QgbWF0Y2ggZm9yIGh1bmsgYXQgbGluZSAnICsgKGNodW5rSGVhZGVySW5kZXggKyAxKSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIGh1bms7XG5cdCAgfVxuXG5cdCAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuXHQgICAgcGFyc2VJbmRleCgpO1xuXHQgIH1cblxuXHQgIHJldHVybiBsaXN0O1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWFJqYUM5d1lYSnpaUzVxY3lKZExDSnVZVzFsY3lJNld5SndZWEp6WlZCaGRHTm9JaXdpZFc1cFJHbG1aaUlzSW05d2RHbHZibk1pTENKa2FXWm1jM1J5SWl3aWMzQnNhWFFpTENKa1pXeHBiV2wwWlhKeklpd2liV0YwWTJnaUxDSnNhWE4wSWl3aWFTSXNJbkJoY25ObFNXNWtaWGdpTENKcGJtUmxlQ0lzSW5CMWMyZ2lMQ0pzWlc1bmRHZ2lMQ0pzYVc1bElpd2lkR1Z6ZENJc0ltaGxZV1JsY2lJc0ltVjRaV01pTENKd1lYSnpaVVpwYkdWSVpXRmtaWElpTENKb2RXNXJjeUlzSW5CaGNuTmxTSFZ1YXlJc0luTjBjbWxqZENJc0lrVnljbTl5SWl3aVNsTlBUaUlzSW5OMGNtbHVaMmxtZVNJc0ltaGxZV1JsY2xCaGRIUmxjbTRpTENKbWFXeGxTR1ZoWkdWeUlpd2lhMlY1VUhKbFptbDRJaXdpWm1sc1pVNWhiV1VpTENKeVpYQnNZV05sSWl3aWMzVmljM1J5SWl3aVkyaDFibXRJWldGa1pYSkpibVJsZUNJc0ltTm9kVzVyU0dWaFpHVnlUR2x1WlNJc0ltTm9kVzVyU0dWaFpHVnlJaXdpYUhWdWF5SXNJbTlzWkZOMFlYSjBJaXdpYjJ4a1RHbHVaWE1pTENKdVpYZFRkR0Z5ZENJc0ltNWxkMHhwYm1Weklpd2liR2x1WlhNaUxDSnNhVzVsWkdWc2FXMXBkR1Z5Y3lJc0ltRmtaRU52ZFc1MElpd2ljbVZ0YjNabFEyOTFiblFpTENKcGJtUmxlRTltSWl3aWIzQmxjbUYwYVc5dUlsMHNJbTFoY0hCcGJtZHpJam9pT3pzN1owTkJRV2RDUVN4VkxFZEJRVUZCTEZVN1FVRkJWQ3hUUVVGVFFTeFZRVUZVTEVOQlFXOUNReXhQUVVGd1FpeEZRVUV5UXp0QlFVRkJMSE5FUVVGa1F5eFBRVUZqTEhWRlFVRktMRVZCUVVrN08wRkJRMmhFTEUxQlFVbERMRlZCUVZWR0xGRkJRVkZITEV0QlFWSXNRMEZCWXl4eFFrRkJaQ3hEUVVGa08wRkJRVUVzVFVGRFNVTXNZVUZCWVVvc1VVRkJVVXNzUzBGQlVpeERRVUZqTEhOQ1FVRmtMRXRCUVhsRExFVkJSREZFTzBGQlFVRXNUVUZGU1VNc1QwRkJUeXhGUVVaWU8wRkJRVUVzVFVGSFNVTXNTVUZCU1N4RFFVaFNPenRCUVV0QkxGZEJRVk5ETEZWQlFWUXNSMEZCYzBJN1FVRkRjRUlzVVVGQlNVTXNVVUZCVVN4RlFVRmFPMEZCUTBGSUxGTkJRVXRKTEVsQlFVd3NRMEZCVlVRc1MwRkJWanM3UVVGRlFUdEJRVU5CTEZkQlFVOUdMRWxCUVVsTUxGRkJRVkZUTEUxQlFXNUNMRVZCUVRKQ08wRkJRM3BDTEZWQlFVbERMRTlCUVU5V0xGRkJRVkZMTEVOQlFWSXNRMEZCV0RzN1FVRkZRVHRCUVVOQkxGVkJRVWtzZDBKQlFYZENUU3hKUVVGNFFpeERRVUUyUWtRc1NVRkJOMElzUTBGQlNpeEZRVUYzUXp0QlFVTjBRenRCUVVORU96dEJRVVZFTzBGQlEwRXNWVUZCU1VVc1UwRkJWU3d3UTBGQlJDeERRVUUyUTBNc1NVRkJOME1zUTBGQmEwUklMRWxCUVd4RUxFTkJRV0k3UVVGRFFTeFZRVUZKUlN4TlFVRktMRVZCUVZrN1FVRkRWa3dzWTBGQlRVRXNTMEZCVGl4SFFVRmpTeXhQUVVGUExFTkJRVkFzUTBGQlpEdEJRVU5FT3p0QlFVVkVVRHRCUVVORU96dEJRVVZFTzBGQlEwRTdRVUZEUVZNc2IwSkJRV2RDVUN4TFFVRm9RanRCUVVOQlR5eHZRa0ZCWjBKUUxFdEJRV2hDT3p0QlFVVkJPMEZCUTBGQkxGVkJRVTFSTEV0QlFVNHNSMEZCWXl4RlFVRmtPenRCUVVWQkxGZEJRVTlXTEVsQlFVbE1MRkZCUVZGVExFMUJRVzVDTEVWQlFUSkNPMEZCUTNwQ0xGVkJRVWxETEZGQlFVOVdMRkZCUVZGTExFTkJRVklzUTBGQldEczdRVUZGUVN4VlFVRkpMR2xEUVVGcFEwMHNTVUZCYWtNc1EwRkJjME5FTEV0QlFYUkRMRU5CUVVvc1JVRkJhVVE3UVVGREwwTTdRVUZEUkN4UFFVWkVMRTFCUlU4c1NVRkJTU3hOUVVGTlF5eEpRVUZPTEVOQlFWZEVMRXRCUVZnc1EwRkJTaXhGUVVGelFqdEJRVU16UWtnc1kwRkJUVkVzUzBGQlRpeERRVUZaVUN4SlFVRmFMRU5CUVdsQ1VTeFhRVUZxUWp0QlFVTkVMRTlCUmswc1RVRkZRU3hKUVVGSlRpeFRRVUZSV0N4UlFVRlJhMElzVFVGQmNFSXNSVUZCTkVJN1FVRkRha003UVVGRFFTeGpRVUZOTEVsQlFVbERMRXRCUVVvc1EwRkJWU3h0UWtGQmJVSmlMRWxCUVVrc1EwRkJka0lzU1VGQk5FSXNSMEZCTlVJc1IwRkJhME5qTEV0QlFVdERMRk5CUVV3c1EwRkJaVllzUzBGQlppeERRVUUxUXl4RFFVRk9PMEZCUTBRc1QwRklUU3hOUVVkQk8wRkJRMHhNTzBGQlEwUTdRVUZEUmp0QlFVTkdPenRCUVVWRU8wRkJRMEU3UVVGRFFTeFhRVUZUVXl4bFFVRlVMRU5CUVhsQ1VDeExRVUY2UWl4RlFVRm5RenRCUVVNNVFpeFJRVUZOWXl4blFrRkJaMElzTUVOQlFYUkNPMEZCUTBFc1VVRkJUVU1zWVVGQllVUXNZMEZCWTFJc1NVRkJaQ3hEUVVGdFFtSXNVVUZCVVVzc1EwRkJVaXhEUVVGdVFpeERRVUZ1UWp0QlFVTkJMRkZCUVVscFFpeFZRVUZLTEVWQlFXZENPMEZCUTJRc1ZVRkJTVU1zV1VGQldVUXNWMEZCVnl4RFFVRllMRTFCUVd0Q0xFdEJRV3hDTEVkQlFUQkNMRXRCUVRGQ0xFZEJRV3RETEV0QlFXeEVPMEZCUTBFc1ZVRkJTVVVzVjBGQlYwWXNWMEZCVnl4RFFVRllMRVZCUVdOSExFOUJRV1FzUTBGQmMwSXNUMEZCZEVJc1JVRkJLMElzU1VGQkwwSXNRMEZCWmp0QlFVTkJMRlZCUVVrc1UwRkJVMlFzU1VGQlZDeERRVUZqWVN4UlFVRmtMRU5CUVVvc1JVRkJOa0k3UVVGRE0wSkJMRzFDUVVGWFFTeFRRVUZUUlN4TlFVRlVMRU5CUVdkQ0xFTkJRV2hDTEVWQlFXMUNSaXhUUVVGVFppeE5RVUZVTEVkQlFXdENMRU5CUVhKRExFTkJRVmc3UVVGRFJEdEJRVU5FUml4WlFVRk5aMElzV1VGQldTeFZRVUZzUWl4SlFVRm5RME1zVVVGQmFFTTdRVUZEUVdwQ0xGbEJRVTFuUWl4WlFVRlpMRkZCUVd4Q0xFbEJRVGhDUkN4WFFVRlhMRU5CUVZnc1EwRkJPVUk3TzBGQlJVRnFRanRCUVVORU8wRkJRMFk3TzBGQlJVUTdRVUZEUVR0QlFVTkJMRmRCUVZOWExGTkJRVlFzUjBGQmNVSTdRVUZEYmtJc1VVRkJTVmNzYlVKQlFXMUNkRUlzUTBGQmRrSTdRVUZCUVN4UlFVTkpkVUlzYTBKQlFXdENOVUlzVVVGQlVVc3NSMEZCVWl4RFFVUjBRanRCUVVGQkxGRkJSVWwzUWl4alFVRmpSQ3huUWtGQlowSXpRaXhMUVVGb1FpeERRVUZ6UWl3MFEwRkJkRUlzUTBGR2JFSTdPMEZCU1VFc1VVRkJTVFpDTEU5QlFVODdRVUZEVkVNc1owSkJRVlVzUTBGQlEwWXNXVUZCV1N4RFFVRmFMRU5CUkVZN1FVRkZWRWNzWjBKQlFWVXNRMEZCUTBnc1dVRkJXU3hEUVVGYUxFTkJRVVFzU1VGQmJVSXNRMEZHY0VJN1FVRkhWRWtzWjBKQlFWVXNRMEZCUTBvc1dVRkJXU3hEUVVGYUxFTkJTRVk3UVVGSlZFc3NaMEpCUVZVc1EwRkJRMHdzV1VGQldTeERRVUZhTEVOQlFVUXNTVUZCYlVJc1EwRktjRUk3UVVGTFZFMHNZVUZCVHl4RlFVeEZPMEZCVFZSRExITkNRVUZuUWp0QlFVNVFMRXRCUVZnN08wRkJVMEVzVVVGQlNVTXNWMEZCVnl4RFFVRm1PMEZCUVVFc1VVRkRTVU1zWTBGQll5eERRVVJzUWp0QlFVVkJMRmRCUVU5cVF5eEpRVUZKVEN4UlFVRlJVeXhOUVVGdVFpeEZRVUV5UWtvc1IwRkJNMElzUlVGQlowTTdRVUZET1VJN1FVRkRRVHRCUVVOQkxGVkJRVWxNTEZGQlFWRkxMRU5CUVZJc1JVRkJWMnRETEU5QlFWZ3NRMEZCYlVJc1RVRkJia0lzVFVGQkswSXNRMEZCTDBJc1NVRkRUV3hETEVsQlFVa3NRMEZCU2l4SFFVRlJUQ3hSUVVGUlV5eE5RVVIwUWl4SlFVVkxWQ3hSUVVGUlN5eEpRVUZKTEVOQlFWb3NSVUZCWld0RExFOUJRV1lzUTBGQmRVSXNUVUZCZGtJc1RVRkJiVU1zUTBGR2VFTXNTVUZIUzNaRExGRkJRVkZMTEVsQlFVa3NRMEZCV2l4RlFVRmxhME1zVDBGQlppeERRVUYxUWl4SlFVRjJRaXhOUVVGcFF5eERRVWd4UXl4RlFVYzJRenRCUVVONlF6dEJRVU5JTzBGQlEwUXNWVUZCU1VNc1dVRkJXWGhETEZGQlFWRkxMRU5CUVZJc1JVRkJWeXhEUVVGWUxFTkJRV2hDT3p0QlFVVkJMRlZCUVVsdFF5eGpRVUZqTEVkQlFXUXNTVUZCY1VKQkxHTkJRV01zUjBGQmJrTXNTVUZCTUVOQkxHTkJRV01zUjBGQmVFUXNTVUZCSzBSQkxHTkJRV01zU1VGQmFrWXNSVUZCZFVZN1FVRkRja1pXTEdGQlFVdExMRXRCUVV3c1EwRkJWek5DTEVsQlFWZ3NRMEZCWjBKU0xGRkJRVkZMTEVOQlFWSXNRMEZCYUVJN1FVRkRRWGxDTEdGQlFVdE5MR05CUVV3c1EwRkJiMEkxUWl4SlFVRndRaXhEUVVGNVFrNHNWMEZCVjBjc1EwRkJXQ3hMUVVGcFFpeEpRVUV4UXpzN1FVRkZRU3haUVVGSmJVTXNZMEZCWXl4SFFVRnNRaXhGUVVGMVFqdEJRVU55UWtnN1FVRkRSQ3hUUVVaRUxFMUJSVThzU1VGQlNVY3NZMEZCWXl4SFFVRnNRaXhGUVVGMVFqdEJRVU0xUWtZN1FVRkRSQ3hUUVVaTkxFMUJSVUVzU1VGQlNVVXNZMEZCWXl4SFFVRnNRaXhGUVVGMVFqdEJRVU0xUWtnN1FVRkRRVU03UVVGRFJEdEJRVU5HTEU5QldrUXNUVUZaVHp0QlFVTk1PMEZCUTBRN1FVRkRSanM3UVVGRlJEdEJRVU5CTEZGQlFVa3NRMEZCUTBRc1VVRkJSQ3hKUVVGaFVDeExRVUZMU1N4UlFVRk1MRXRCUVd0Q0xFTkJRVzVETEVWQlFYTkRPMEZCUTNCRFNpeFhRVUZMU1N4UlFVRk1MRWRCUVdkQ0xFTkJRV2hDTzBGQlEwUTdRVUZEUkN4UlFVRkpMRU5CUVVOSkxGZEJRVVFzU1VGQlowSlNMRXRCUVV0RkxGRkJRVXdzUzBGQmEwSXNRMEZCZEVNc1JVRkJlVU03UVVGRGRrTkdMRmRCUVV0RkxGRkJRVXdzUjBGQlowSXNRMEZCYUVJN1FVRkRSRHM3UVVGRlJEdEJRVU5CTEZGQlFVbHFReXhSUVVGUmEwSXNUVUZCV2l4RlFVRnZRanRCUVVOc1FpeFZRVUZKYjBJc1lVRkJZVkFzUzBGQlMwa3NVVUZCZEVJc1JVRkJaME03UVVGRE9VSXNZMEZCVFN4SlFVRkphRUlzUzBGQlNpeERRVUZWTEhORVFVRnpSRk1zYlVKQlFXMUNMRU5CUVhwRkxFTkJRVllzUTBGQlRqdEJRVU5FTzBGQlEwUXNWVUZCU1Zjc1owSkJRV2RDVWl4TFFVRkxSU3hSUVVGNlFpeEZRVUZ0UXp0QlFVTnFReXhqUVVGTkxFbEJRVWxrTEV0QlFVb3NRMEZCVlN4M1JFRkJkMFJUTEcxQ1FVRnRRaXhEUVVFelJTeERRVUZXTEVOQlFVNDdRVUZEUkR0QlFVTkdPenRCUVVWRUxGZEJRVTlITEVsQlFWQTdRVUZEUkRzN1FVRkZSQ3hUUVVGUGVrSXNTVUZCU1V3c1VVRkJVVk1zVFVGQmJrSXNSVUZCTWtJN1FVRkRla0pJTzBGQlEwUTdPMEZCUlVRc1UwRkJUMFlzU1VGQlVEdEJRVU5FSWl3aVptbHNaU0k2SW5CaGNuTmxMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpYaHdiM0owSUdaMWJtTjBhVzl1SUhCaGNuTmxVR0YwWTJnb2RXNXBSR2xtWml3Z2IzQjBhVzl1Y3lBOUlIdDlLU0I3WEc0Z0lHeGxkQ0JrYVdabWMzUnlJRDBnZFc1cFJHbG1aaTV6Y0d4cGRDZ3ZYRnh5WEZ4dWZGdGNYRzVjWEhaY1hHWmNYSEpjWEhnNE5WMHZLU3hjYmlBZ0lDQWdJR1JsYkdsdGFYUmxjbk1nUFNCMWJtbEVhV1ptTG0xaGRHTm9LQzljWEhKY1hHNThXMXhjYmx4Y2RseGNabHhjY2x4Y2VEZzFYUzluS1NCOGZDQmJYU3hjYmlBZ0lDQWdJR3hwYzNRZ1BTQmJYU3hjYmlBZ0lDQWdJR2tnUFNBd08xeHVYRzRnSUdaMWJtTjBhVzl1SUhCaGNuTmxTVzVrWlhnb0tTQjdYRzRnSUNBZ2JHVjBJR2x1WkdWNElEMGdlMzA3WEc0Z0lDQWdiR2x6ZEM1d2RYTm9LR2x1WkdWNEtUdGNibHh1SUNBZ0lDOHZJRkJoY25ObElHUnBabVlnYldWMFlXUmhkR0ZjYmlBZ0lDQjNhR2xzWlNBb2FTQThJR1JwWm1aemRISXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQnNaWFFnYkdsdVpTQTlJR1JwWm1aemRISmJhVjA3WEc1Y2JpQWdJQ0FnSUM4dklFWnBiR1VnYUdWaFpHVnlJR1p2ZFc1a0xDQmxibVFnY0dGeWMybHVaeUJrYVdabUlHMWxkR0ZrWVhSaFhHNGdJQ0FnSUNCcFppQW9MMTRvWEZ3dFhGd3RYRnd0ZkZ4Y0sxeGNLMXhjSzN4QVFDbGNYSE12TG5SbGMzUW9iR2x1WlNrcElIdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJRVJwWm1ZZ2FXNWtaWGhjYmlBZ0lDQWdJR3hsZENCb1pXRmtaWElnUFNBb0wxNG9QenBKYm1SbGVEcDhaR2xtWmlnL09pQXRjaUJjWEhjcktTc3BYRnh6S3lndUt6OHBYRnh6S2lRdktTNWxlR1ZqS0d4cGJtVXBPMXh1SUNBZ0lDQWdhV1lnS0dobFlXUmxjaWtnZTF4dUlDQWdJQ0FnSUNCcGJtUmxlQzVwYm1SbGVDQTlJR2hsWVdSbGNsc3hYVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVNzck8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklGQmhjbk5sSUdacGJHVWdhR1ZoWkdWeWN5QnBaaUIwYUdWNUlHRnlaU0JrWldacGJtVmtMaUJWYm1sbWFXVmtJR1JwWm1ZZ2NtVnhkV2x5WlhNZ2RHaGxiU3dnWW5WMFhHNGdJQ0FnTHk4Z2RHaGxjbVVuY3lCdWJ5QjBaV05vYm1sallXd2dhWE56ZFdWeklIUnZJR2hoZG1VZ1lXNGdhWE52YkdGMFpXUWdhSFZ1YXlCM2FYUm9iM1YwSUdacGJHVWdhR1ZoWkdWeVhHNGdJQ0FnY0dGeWMyVkdhV3hsU0dWaFpHVnlLR2x1WkdWNEtUdGNiaUFnSUNCd1lYSnpaVVpwYkdWSVpXRmtaWElvYVc1a1pYZ3BPMXh1WEc0Z0lDQWdMeThnVUdGeWMyVWdhSFZ1YTNOY2JpQWdJQ0JwYm1SbGVDNW9kVzVyY3lBOUlGdGRPMXh1WEc0Z0lDQWdkMmhwYkdVZ0tHa2dQQ0JrYVdabWMzUnlMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdiR1YwSUd4cGJtVWdQU0JrYVdabWMzUnlXMmxkTzF4dVhHNGdJQ0FnSUNCcFppQW9MMTRvU1c1a1pYZzZmR1JwWm1aOFhGd3RYRnd0WEZ3dGZGeGNLMXhjSzF4Y0t5bGNYSE12TG5SbGMzUW9iR2x1WlNrcElIdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tDOWVRRUF2TG5SbGMzUW9iR2x1WlNrcElIdGNiaUFnSUNBZ0lDQWdhVzVrWlhndWFIVnVhM011Y0hWemFDaHdZWEp6WlVoMWJtc29LU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0d4cGJtVWdKaVlnYjNCMGFXOXVjeTV6ZEhKcFkzUXBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z1NXZHViM0psSUhWdVpYaHdaV04wWldRZ1kyOXVkR1Z1ZENCMWJteGxjM01nYVc0Z2MzUnlhV04wSUcxdlpHVmNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZFZibXR1YjNkdUlHeHBibVVnSnlBcklDaHBJQ3NnTVNrZ0t5QW5JQ2NnS3lCS1UwOU9Mbk4wY21sdVoybG1lU2hzYVc1bEtTazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnBLeXM3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHk4Z1VHRnljMlZ6SUhSb1pTQXRMUzBnWVc1a0lDc3JLeUJvWldGa1pYSnpMQ0JwWmlCdWIyNWxJR0Z5WlNCbWIzVnVaQ3dnYm04Z2JHbHVaWE5jYmlBZ0x5OGdZWEpsSUdOdmJuTjFiV1ZrTGx4dUlDQm1kVzVqZEdsdmJpQndZWEp6WlVacGJHVklaV0ZrWlhJb2FXNWtaWGdwSUh0Y2JpQWdJQ0JqYjI1emRDQm9aV0ZrWlhKUVlYUjBaWEp1SUQwZ0wxNG9MUzB0ZkZ4Y0sxeGNLMXhjS3lsY1hITXJLRnRjWEZNZ1hTb3BLRDg2WEZ4MEtDNHFQeWxjWEhNcUtUOGtMenRjYmlBZ0lDQmpiMjV6ZENCbWFXeGxTR1ZoWkdWeUlEMGdhR1ZoWkdWeVVHRjBkR1Z5Ymk1bGVHVmpLR1JwWm1aemRISmJhVjBwTzF4dUlDQWdJR2xtSUNobWFXeGxTR1ZoWkdWeUtTQjdYRzRnSUNBZ0lDQnNaWFFnYTJWNVVISmxabWw0SUQwZ1ptbHNaVWhsWVdSbGNsc3hYU0E5UFQwZ0p5MHRMU2NnUHlBbmIyeGtKeUE2SUNkdVpYY25PMXh1SUNBZ0lDQWdiR1YwSUdacGJHVk9ZVzFsSUQwZ1ptbHNaVWhsWVdSbGNsc3lYUzV5WlhCc1lXTmxLQzljWEZ4Y1hGeGNYQzluTENBblhGeGNYQ2NwTzF4dUlDQWdJQ0FnYVdZZ0tDOWVYQ0l1S2x3aUpDOHVkR1Z6ZENobWFXeGxUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdabWxzWlU1aGJXVWdQU0JtYVd4bFRtRnRaUzV6ZFdKemRISW9NU3dnWm1sc1pVNWhiV1V1YkdWdVozUm9JQzBnTWlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcGJtUmxlRnRyWlhsUWNtVm1hWGdnS3lBblJtbHNaVTVoYldVblhTQTlJR1pwYkdWT1lXMWxPMXh1SUNBZ0lDQWdhVzVrWlhoYmEyVjVVSEpsWm1sNElDc2dKMGhsWVdSbGNpZGRJRDBnWm1sc1pVaGxZV1JsY2xzelhUdGNibHh1SUNBZ0lDQWdhU3NyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4dklGQmhjbk5sY3lCaElHaDFibXRjYmlBZ0x5OGdWR2hwY3lCaGMzTjFiV1Z6SUhSb1lYUWdkMlVnWVhKbElHRjBJSFJvWlNCemRHRnlkQ0J2WmlCaElHaDFibXN1WEc0Z0lHWjFibU4wYVc5dUlIQmhjbk5sU0hWdWF5Z3BJSHRjYmlBZ0lDQnNaWFFnWTJoMWJtdElaV0ZrWlhKSmJtUmxlQ0E5SUdrc1hHNGdJQ0FnSUNBZ0lHTm9kVzVyU0dWaFpHVnlUR2x1WlNBOUlHUnBabVp6ZEhKYmFTc3JYU3hjYmlBZ0lDQWdJQ0FnWTJoMWJtdElaV0ZrWlhJZ1BTQmphSFZ1YTBobFlXUmxja3hwYm1VdWMzQnNhWFFvTDBCQUlDMG9YRnhrS3lrb1B6b3NLRnhjWkNzcEtUOGdYRndyS0Z4Y1pDc3BLRDg2TENoY1hHUXJLU2svSUVCQUx5azdYRzVjYmlBZ0lDQnNaWFFnYUhWdWF5QTlJSHRjYmlBZ0lDQWdJRzlzWkZOMFlYSjBPaUFyWTJoMWJtdElaV0ZrWlhKYk1WMHNYRzRnSUNBZ0lDQnZiR1JNYVc1bGN6b2dLMk5vZFc1clNHVmhaR1Z5V3pKZElIeDhJREVzWEc0Z0lDQWdJQ0J1WlhkVGRHRnlkRG9nSzJOb2RXNXJTR1ZoWkdWeVd6TmRMRnh1SUNBZ0lDQWdibVYzVEdsdVpYTTZJQ3RqYUhWdWEwaGxZV1JsY2xzMFhTQjhmQ0F4TEZ4dUlDQWdJQ0FnYkdsdVpYTTZJRnRkTEZ4dUlDQWdJQ0FnYkdsdVpXUmxiR2x0YVhSbGNuTTZJRnRkWEc0Z0lDQWdmVHRjYmx4dUlDQWdJR3hsZENCaFpHUkRiM1Z1ZENBOUlEQXNYRzRnSUNBZ0lDQWdJSEpsYlc5MlpVTnZkVzUwSUQwZ01EdGNiaUFnSUNCbWIzSWdLRHNnYVNBOElHUnBabVp6ZEhJdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQzh2SUV4cGJtVnpJSE4wWVhKMGFXNW5JSGRwZEdnZ0p5MHRMU2NnWTI5MWJHUWdZbVVnYldsemRHRnJaVzRnWm05eUlIUm9aU0JjSW5KbGJXOTJaU0JzYVc1bFhDSWdiM0JsY21GMGFXOXVYRzRnSUNBZ0lDQXZMeUJDZFhRZ2RHaGxlU0JqYjNWc1pDQmlaU0IwYUdVZ2FHVmhaR1Z5SUdadmNpQjBhR1VnYm1WNGRDQm1hV3hsTGlCVWFHVnlaV1p2Y21VZ2NISjFibVVnYzNWamFDQmpZWE5sY3lCdmRYUXVYRzRnSUNBZ0lDQnBaaUFvWkdsbVpuTjBjbHRwWFM1cGJtUmxlRTltS0NjdExTMGdKeWtnUFQwOUlEQmNiaUFnSUNBZ0lDQWdJQ0FnSUNZbUlDaHBJQ3NnTWlBOElHUnBabVp6ZEhJdWJHVnVaM1JvS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdKaVlnWkdsbVpuTjBjbHRwSUNzZ01WMHVhVzVrWlhoUFppZ25LeXNySUNjcElEMDlQU0F3WEc0Z0lDQWdJQ0FnSUNBZ0lDQW1KaUJrYVdabWMzUnlXMmtnS3lBeVhTNXBibVJsZUU5bUtDZEFRQ2NwSUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JzWlhRZ2IzQmxjbUYwYVc5dUlEMGdaR2xtWm5OMGNsdHBYVnN3WFR0Y2JseHVJQ0FnSUNBZ2FXWWdLRzl3WlhKaGRHbHZiaUE5UFQwZ0p5c25JSHg4SUc5d1pYSmhkR2x2YmlBOVBUMGdKeTBuSUh4OElHOXdaWEpoZEdsdmJpQTlQVDBnSnlBbklIeDhJRzl3WlhKaGRHbHZiaUE5UFQwZ0oxeGNYRnduS1NCN1hHNGdJQ0FnSUNBZ0lHaDFibXN1YkdsdVpYTXVjSFZ6YUNoa2FXWm1jM1J5VzJsZEtUdGNiaUFnSUNBZ0lDQWdhSFZ1YXk1c2FXNWxaR1ZzYVcxcGRHVnljeTV3ZFhOb0tHUmxiR2x0YVhSbGNuTmJhVjBnZkh3Z0oxeGNiaWNwTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2h2Y0dWeVlYUnBiMjRnUFQwOUlDY3JKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHRmtaRU52ZFc1MEt5czdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvYjNCbGNtRjBhVzl1SUQwOVBTQW5MU2NwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlaVzF2ZG1WRGIzVnVkQ3NyTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHOXdaWEpoZEdsdmJpQTlQVDBnSnlBbktTQjdYRzRnSUNBZ0lDQWdJQ0FnWVdSa1EyOTFiblFyS3p0Y2JpQWdJQ0FnSUNBZ0lDQnlaVzF2ZG1WRGIzVnVkQ3NyTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJJWVc1a2JHVWdkR2hsSUdWdGNIUjVJR0pzYjJOcklHTnZkVzUwSUdOaGMyVmNiaUFnSUNCcFppQW9JV0ZrWkVOdmRXNTBJQ1ltSUdoMWJtc3VibVYzVEdsdVpYTWdQVDA5SURFcElIdGNiaUFnSUNBZ0lHaDFibXN1Ym1WM1RHbHVaWE1nUFNBd08xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb0lYSmxiVzkyWlVOdmRXNTBJQ1ltSUdoMWJtc3ViMnhrVEdsdVpYTWdQVDA5SURFcElIdGNiaUFnSUNBZ0lHaDFibXN1YjJ4a1RHbHVaWE1nUFNBd08xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklGQmxjbVp2Y20wZ2IzQjBhVzl1WVd3Z2MyRnVhWFI1SUdOb1pXTnJhVzVuWEc0Z0lDQWdhV1lnS0c5d2RHbHZibk11YzNSeWFXTjBLU0I3WEc0Z0lDQWdJQ0JwWmlBb1lXUmtRMjkxYm5RZ0lUMDlJR2gxYm1zdWJtVjNUR2x1WlhNcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEJaR1JsWkNCc2FXNWxJR052ZFc1MElHUnBaQ0J1YjNRZ2JXRjBZMmdnWm05eUlHaDFibXNnWVhRZ2JHbHVaU0FuSUNzZ0tHTm9kVzVyU0dWaFpHVnlTVzVrWlhnZ0t5QXhLU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb2NtVnRiM1psUTI5MWJuUWdJVDA5SUdoMWJtc3ViMnhrVEdsdVpYTXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RTWlcxdmRtVmtJR3hwYm1VZ1kyOTFiblFnWkdsa0lHNXZkQ0J0WVhSamFDQm1iM0lnYUhWdWF5QmhkQ0JzYVc1bElDY2dLeUFvWTJoMWJtdElaV0ZrWlhKSmJtUmxlQ0FySURFcEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnYUhWdWF6dGNiaUFnZlZ4dVhHNGdJSGRvYVd4bElDaHBJRHdnWkdsbVpuTjBjaTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQndZWEp6WlVsdVpHVjRLQ2s3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnYkdsemREdGNibjFjYmlKZGZRPT1cblxuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL1widXNlIHN0cmljdFwiO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0ZXhwb3J0c1tcImRlZmF1bHRcIl0gPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2Z1bmN0aW9uIChzdGFydCwgbWluTGluZSwgbWF4TGluZSkge1xuXHQgIHZhciB3YW50Rm9yd2FyZCA9IHRydWUsXG5cdCAgICAgIGJhY2t3YXJkRXhoYXVzdGVkID0gZmFsc2UsXG5cdCAgICAgIGZvcndhcmRFeGhhdXN0ZWQgPSBmYWxzZSxcblx0ICAgICAgbG9jYWxPZmZzZXQgPSAxO1xuXG5cdCAgcmV0dXJuIGZ1bmN0aW9uIGl0ZXJhdG9yKCkge1xuXHQgICAgaWYgKHdhbnRGb3J3YXJkICYmICFmb3J3YXJkRXhoYXVzdGVkKSB7XG5cdCAgICAgIGlmIChiYWNrd2FyZEV4aGF1c3RlZCkge1xuXHQgICAgICAgIGxvY2FsT2Zmc2V0Kys7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgd2FudEZvcndhcmQgPSBmYWxzZTtcblx0ICAgICAgfVxuXG5cdCAgICAgIC8vIENoZWNrIGlmIHRyeWluZyB0byBmaXQgYmV5b25kIHRleHQgbGVuZ3RoLCBhbmQgaWYgbm90LCBjaGVjayBpdCBmaXRzXG5cdCAgICAgIC8vIGFmdGVyIG9mZnNldCBsb2NhdGlvbiAob3IgZGVzaXJlZCBsb2NhdGlvbiBvbiBmaXJzdCBpdGVyYXRpb24pXG5cdCAgICAgIGlmIChzdGFydCArIGxvY2FsT2Zmc2V0IDw9IG1heExpbmUpIHtcblx0ICAgICAgICByZXR1cm4gbG9jYWxPZmZzZXQ7XG5cdCAgICAgIH1cblxuXHQgICAgICBmb3J3YXJkRXhoYXVzdGVkID0gdHJ1ZTtcblx0ICAgIH1cblxuXHQgICAgaWYgKCFiYWNrd2FyZEV4aGF1c3RlZCkge1xuXHQgICAgICBpZiAoIWZvcndhcmRFeGhhdXN0ZWQpIHtcblx0ICAgICAgICB3YW50Rm9yd2FyZCA9IHRydWU7XG5cdCAgICAgIH1cblxuXHQgICAgICAvLyBDaGVjayBpZiB0cnlpbmcgdG8gZml0IGJlZm9yZSB0ZXh0IGJlZ2lubmluZywgYW5kIGlmIG5vdCwgY2hlY2sgaXQgZml0c1xuXHQgICAgICAvLyBiZWZvcmUgb2Zmc2V0IGxvY2F0aW9uXG5cdCAgICAgIGlmIChtaW5MaW5lIDw9IHN0YXJ0IC0gbG9jYWxPZmZzZXQpIHtcblx0ICAgICAgICByZXR1cm4gLWxvY2FsT2Zmc2V0Kys7XG5cdCAgICAgIH1cblxuXHQgICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IHRydWU7XG5cdCAgICAgIHJldHVybiBpdGVyYXRvcigpO1xuXHQgICAgfVxuXG5cdCAgICAvLyBXZSB0cmllZCB0byBmaXQgaHVuayBiZWZvcmUgdGV4dCBiZWdpbm5pbmcgYW5kIGJleW9uZCB0ZXh0IGxlbmd0aCwgdGhlblxuXHQgICAgLy8gaHVuayBjYW4ndCBmaXQgb24gdGhlIHRleHQuIFJldHVybiB1bmRlZmluZWRcblx0ICB9O1xuXHR9O1xuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkxZEdsc0wyUnBjM1JoYm1ObExXbDBaWEpoZEc5eUxtcHpJbDBzSW01aGJXVnpJanBiSW5OMFlYSjBJaXdpYldsdVRHbHVaU0lzSW0xaGVFeHBibVVpTENKM1lXNTBSbTl5ZDJGeVpDSXNJbUpoWTJ0M1lYSmtSWGhvWVhWemRHVmtJaXdpWm05eWQyRnlaRVY0YUdGMWMzUmxaQ0lzSW14dlkyRnNUMlptYzJWMElpd2lhWFJsY21GMGIzSWlYU3dpYldGd2NHbHVaM01pT2lJN096czdORU5CUjJVc1ZVRkJVMEVzUzBGQlZDeEZRVUZuUWtNc1QwRkJhRUlzUlVGQmVVSkRMRTlCUVhwQ0xFVkJRV3RETzBGQlF5OURMRTFCUVVsRExHTkJRV01zU1VGQmJFSTdRVUZCUVN4TlFVTkpReXh2UWtGQmIwSXNTMEZFZUVJN1FVRkJRU3hOUVVWSlF5eHRRa0ZCYlVJc1MwRkdka0k3UVVGQlFTeE5RVWRKUXl4alFVRmpMRU5CU0d4Q096dEJRVXRCTEZOQlFVOHNVMEZCVTBNc1VVRkJWQ3hIUVVGdlFqdEJRVU42UWl4UlFVRkpTaXhsUVVGbExFTkJRVU5GTEdkQ1FVRndRaXhGUVVGelF6dEJRVU53UXl4VlFVRkpSQ3hwUWtGQlNpeEZRVUYxUWp0QlFVTnlRa1U3UVVGRFJDeFBRVVpFTEUxQlJVODdRVUZEVEVnc2MwSkJRV01zUzBGQlpEdEJRVU5FT3p0QlFVVkVPMEZCUTBFN1FVRkRRU3hWUVVGSlNDeFJRVUZSVFN4WFFVRlNMRWxCUVhWQ1NpeFBRVUV6UWl4RlFVRnZRenRCUVVOc1F5eGxRVUZQU1N4WFFVRlFPMEZCUTBRN08wRkJSVVJFTEhsQ1FVRnRRaXhKUVVGdVFqdEJRVU5FT3p0QlFVVkVMRkZCUVVrc1EwRkJRMFFzYVVKQlFVd3NSVUZCZDBJN1FVRkRkRUlzVlVGQlNTeERRVUZEUXl4blFrRkJUQ3hGUVVGMVFqdEJRVU55UWtZc2MwSkJRV01zU1VGQlpEdEJRVU5FT3p0QlFVVkVPMEZCUTBFN1FVRkRRU3hWUVVGSlJpeFhRVUZYUkN4UlFVRlJUU3hYUVVGMlFpeEZRVUZ2UXp0QlFVTnNReXhsUVVGUExFTkJRVU5CTEdGQlFWSTdRVUZEUkRzN1FVRkZSRVlzTUVKQlFXOUNMRWxCUVhCQ08wRkJRMEVzWVVGQlQwY3NWVUZCVUR0QlFVTkVPenRCUVVWRU8wRkJRMEU3UVVGRFJDeEhRV3hEUkR0QlFXMURSQ3hESWl3aVptbHNaU0k2SW1ScGMzUmhibU5sTFdsMFpYSmhkRzl5TG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeThnU1hSbGNtRjBiM0lnZEdoaGRDQjBjbUYyWlhKelpYTWdhVzRnZEdobElISmhibWRsSUc5bUlGdHRhVzRzSUcxaGVGMHNJSE4wWlhCd2FXNW5YRzR2THlCaWVTQmthWE4wWVc1alpTQm1jbTl0SUdFZ1oybDJaVzRnYzNSaGNuUWdjRzl6YVhScGIyNHVJRWt1WlM0Z1ptOXlJRnN3TENBMFhTd2dkMmwwYUZ4dUx5OGdjM1JoY25RZ2IyWWdNaXdnZEdocGN5QjNhV3hzSUdsMFpYSmhkR1VnTWl3Z015d2dNU3dnTkN3Z01DNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHWjFibU4wYVc5dUtITjBZWEowTENCdGFXNU1hVzVsTENCdFlYaE1hVzVsS1NCN1hHNGdJR3hsZENCM1lXNTBSbTl5ZDJGeVpDQTlJSFJ5ZFdVc1hHNGdJQ0FnSUNCaVlXTnJkMkZ5WkVWNGFHRjFjM1JsWkNBOUlHWmhiSE5sTEZ4dUlDQWdJQ0FnWm05eWQyRnlaRVY0YUdGMWMzUmxaQ0E5SUdaaGJITmxMRnh1SUNBZ0lDQWdiRzlqWVd4UFptWnpaWFFnUFNBeE8xeHVYRzRnSUhKbGRIVnliaUJtZFc1amRHbHZiaUJwZEdWeVlYUnZjaWdwSUh0Y2JpQWdJQ0JwWmlBb2QyRnVkRVp2Y25kaGNtUWdKaVlnSVdadmNuZGhjbVJGZUdoaGRYTjBaV1FwSUh0Y2JpQWdJQ0FnSUdsbUlDaGlZV05yZDJGeVpFVjRhR0YxYzNSbFpDa2dlMXh1SUNBZ0lDQWdJQ0JzYjJOaGJFOW1abk5sZENzck8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2QyRnVkRVp2Y25kaGNtUWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnUTJobFkyc2dhV1lnZEhKNWFXNW5JSFJ2SUdacGRDQmlaWGx2Ym1RZ2RHVjRkQ0JzWlc1bmRHZ3NJR0Z1WkNCcFppQnViM1FzSUdOb1pXTnJJR2wwSUdacGRITmNiaUFnSUNBZ0lDOHZJR0ZtZEdWeUlHOW1abk5sZENCc2IyTmhkR2x2YmlBb2IzSWdaR1Z6YVhKbFpDQnNiMk5oZEdsdmJpQnZiaUJtYVhKemRDQnBkR1Z5WVhScGIyNHBYRzRnSUNBZ0lDQnBaaUFvYzNSaGNuUWdLeUJzYjJOaGJFOW1abk5sZENBOFBTQnRZWGhNYVc1bEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnNiMk5oYkU5bVpuTmxkRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWm05eWQyRnlaRVY0YUdGMWMzUmxaQ0E5SUhSeWRXVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLQ0ZpWVdOcmQyRnlaRVY0YUdGMWMzUmxaQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tDRm1iM0ozWVhKa1JYaG9ZWFZ6ZEdWa0tTQjdYRzRnSUNBZ0lDQWdJSGRoYm5SR2IzSjNZWEprSUQwZ2RISjFaVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnTHk4Z1EyaGxZMnNnYVdZZ2RISjVhVzVuSUhSdklHWnBkQ0JpWldadmNtVWdkR1Y0ZENCaVpXZHBibTVwYm1jc0lHRnVaQ0JwWmlCdWIzUXNJR05vWldOcklHbDBJR1pwZEhOY2JpQWdJQ0FnSUM4dklHSmxabTl5WlNCdlptWnpaWFFnYkc5allYUnBiMjVjYmlBZ0lDQWdJR2xtSUNodGFXNU1hVzVsSUR3OUlITjBZWEowSUMwZ2JHOWpZV3hQWm1aelpYUXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJQzFzYjJOaGJFOW1abk5sZENzck8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQmlZV05yZDJGeVpFVjRhR0YxYzNSbFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYVhSbGNtRjBiM0lvS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCWFpTQjBjbWxsWkNCMGJ5Qm1hWFFnYUhWdWF5QmlaV1p2Y21VZ2RHVjRkQ0JpWldkcGJtNXBibWNnWVc1a0lHSmxlVzl1WkNCMFpYaDBJR3hsYm1kMGFDd2dkR2hsYmx4dUlDQWdJQzh2SUdoMWJtc2dZMkZ1SjNRZ1ptbDBJRzl1SUhSb1pTQjBaWGgwTGlCU1pYUjFjbTRnZFc1a1pXWnBibVZrWEc0Z0lIMDdYRzU5WEc0aVhYMD1cblxuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NhbGNMaW5lQ291bnQgPSBjYWxjTGluZUNvdW50O1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9tZXJnZSA9IG1lcmdlO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2NyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3BhcnNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9mdW5jdGlvbiBjYWxjTGluZUNvdW50KGh1bmspIHtcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9jYWxjT2xkTmV3TGluZUNvdW50ID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jYWxjT2xkTmV3TGluZUNvdW50KGh1bmsubGluZXMpLFxuXHQgICAgICBvbGRMaW5lcyA9IF9jYWxjT2xkTmV3TGluZUNvdW50Lm9sZExpbmVzLFxuXHQgICAgICBuZXdMaW5lcyA9IF9jYWxjT2xkTmV3TGluZUNvdW50Lm5ld0xpbmVzO1xuXG5cdCAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcblx0ICAgIGh1bmsub2xkTGluZXMgPSBvbGRMaW5lcztcblx0ICB9IGVsc2Uge1xuXHQgICAgZGVsZXRlIGh1bmsub2xkTGluZXM7XG5cdCAgfVxuXG5cdCAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcblx0ICAgIGh1bmsubmV3TGluZXMgPSBuZXdMaW5lcztcblx0ICB9IGVsc2Uge1xuXHQgICAgZGVsZXRlIGh1bmsubmV3TGluZXM7XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gbWVyZ2UobWluZSwgdGhlaXJzLCBiYXNlKSB7XG5cdCAgbWluZSA9IGxvYWRQYXRjaChtaW5lLCBiYXNlKTtcblx0ICB0aGVpcnMgPSBsb2FkUGF0Y2godGhlaXJzLCBiYXNlKTtcblxuXHQgIHZhciByZXQgPSB7fTtcblxuXHQgIC8vIEZvciBpbmRleCB3ZSBqdXN0IGxldCBpdCBwYXNzIHRocm91Z2ggYXMgaXQgZG9lc24ndCBoYXZlIGFueSBuZWNlc3NhcnkgbWVhbmluZy5cblx0ICAvLyBMZWF2aW5nIHNhbml0eSBjaGVja3Mgb24gdGhpcyB0byB0aGUgQVBJIGNvbnN1bWVyIHRoYXQgbWF5IGtub3cgbW9yZSBhYm91dCB0aGVcblx0ICAvLyBtZWFuaW5nIGluIHRoZWlyIG93biBjb250ZXh0LlxuXHQgIGlmIChtaW5lLmluZGV4IHx8IHRoZWlycy5pbmRleCkge1xuXHQgICAgcmV0LmluZGV4ID0gbWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXg7XG5cdCAgfVxuXG5cdCAgaWYgKG1pbmUubmV3RmlsZU5hbWUgfHwgdGhlaXJzLm5ld0ZpbGVOYW1lKSB7XG5cdCAgICBpZiAoIWZpbGVOYW1lQ2hhbmdlZChtaW5lKSkge1xuXHQgICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIG91cnMsIHVzZSB0aGVpcnMgKGFuZCBvdXJzIGlmIHRoZWlycyBkb2VzIG5vdCBleGlzdClcblx0ICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gdGhlaXJzLm9sZEZpbGVOYW1lIHx8IG1pbmUub2xkRmlsZU5hbWU7XG5cdCAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHRoZWlycy5uZXdGaWxlTmFtZSB8fCBtaW5lLm5ld0ZpbGVOYW1lO1xuXHQgICAgICByZXQub2xkSGVhZGVyID0gdGhlaXJzLm9sZEhlYWRlciB8fCBtaW5lLm9sZEhlYWRlcjtcblx0ICAgICAgcmV0Lm5ld0hlYWRlciA9IHRoZWlycy5uZXdIZWFkZXIgfHwgbWluZS5uZXdIZWFkZXI7XG5cdCAgICB9IGVsc2UgaWYgKCFmaWxlTmFtZUNoYW5nZWQodGhlaXJzKSkge1xuXHQgICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIHRoZWlycywgdXNlIG91cnNcblx0ICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gbWluZS5vbGRGaWxlTmFtZTtcblx0ICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gbWluZS5uZXdGaWxlTmFtZTtcblx0ICAgICAgcmV0Lm9sZEhlYWRlciA9IG1pbmUub2xkSGVhZGVyO1xuXHQgICAgICByZXQubmV3SGVhZGVyID0gbWluZS5uZXdIZWFkZXI7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICAvLyBCb3RoIGNoYW5nZWQuLi4gZmlndXJlIGl0IG91dFxuXHQgICAgICByZXQub2xkRmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUub2xkRmlsZU5hbWUsIHRoZWlycy5vbGRGaWxlTmFtZSk7XG5cdCAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5uZXdGaWxlTmFtZSwgdGhlaXJzLm5ld0ZpbGVOYW1lKTtcblx0ICAgICAgcmV0Lm9sZEhlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5vbGRIZWFkZXIsIHRoZWlycy5vbGRIZWFkZXIpO1xuXHQgICAgICByZXQubmV3SGVhZGVyID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm5ld0hlYWRlciwgdGhlaXJzLm5ld0hlYWRlcik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0Lmh1bmtzID0gW107XG5cblx0ICB2YXIgbWluZUluZGV4ID0gMCxcblx0ICAgICAgdGhlaXJzSW5kZXggPSAwLFxuXHQgICAgICBtaW5lT2Zmc2V0ID0gMCxcblx0ICAgICAgdGhlaXJzT2Zmc2V0ID0gMDtcblxuXHQgIHdoaWxlIChtaW5lSW5kZXggPCBtaW5lLmh1bmtzLmxlbmd0aCB8fCB0aGVpcnNJbmRleCA8IHRoZWlycy5odW5rcy5sZW5ndGgpIHtcblx0ICAgIHZhciBtaW5lQ3VycmVudCA9IG1pbmUuaHVua3NbbWluZUluZGV4XSB8fCB7IG9sZFN0YXJ0OiBJbmZpbml0eSB9LFxuXHQgICAgICAgIHRoZWlyc0N1cnJlbnQgPSB0aGVpcnMuaHVua3NbdGhlaXJzSW5kZXhdIHx8IHsgb2xkU3RhcnQ6IEluZmluaXR5IH07XG5cblx0ICAgIGlmIChodW5rQmVmb3JlKG1pbmVDdXJyZW50LCB0aGVpcnNDdXJyZW50KSkge1xuXHQgICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuXHQgICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsobWluZUN1cnJlbnQsIG1pbmVPZmZzZXQpKTtcblx0ICAgICAgbWluZUluZGV4Kys7XG5cdCAgICAgIHRoZWlyc09mZnNldCArPSBtaW5lQ3VycmVudC5uZXdMaW5lcyAtIG1pbmVDdXJyZW50Lm9sZExpbmVzO1xuXHQgICAgfSBlbHNlIGlmIChodW5rQmVmb3JlKHRoZWlyc0N1cnJlbnQsIG1pbmVDdXJyZW50KSkge1xuXHQgICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuXHQgICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsodGhlaXJzQ3VycmVudCwgdGhlaXJzT2Zmc2V0KSk7XG5cdCAgICAgIHRoZWlyc0luZGV4Kys7XG5cdCAgICAgIG1pbmVPZmZzZXQgKz0gdGhlaXJzQ3VycmVudC5uZXdMaW5lcyAtIHRoZWlyc0N1cnJlbnQub2xkTGluZXM7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICAvLyBPdmVybGFwLCBtZXJnZSBhcyBiZXN0IHdlIGNhblxuXHQgICAgICB2YXIgbWVyZ2VkSHVuayA9IHtcblx0ICAgICAgICBvbGRTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQpLFxuXHQgICAgICAgIG9sZExpbmVzOiAwLFxuXHQgICAgICAgIG5ld1N0YXJ0OiBNYXRoLm1pbihtaW5lQ3VycmVudC5uZXdTdGFydCArIG1pbmVPZmZzZXQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQgKyB0aGVpcnNPZmZzZXQpLFxuXHQgICAgICAgIG5ld0xpbmVzOiAwLFxuXHQgICAgICAgIGxpbmVzOiBbXVxuXHQgICAgICB9O1xuXHQgICAgICBtZXJnZUxpbmVzKG1lcmdlZEh1bmssIG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCBtaW5lQ3VycmVudC5saW5lcywgdGhlaXJzQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5saW5lcyk7XG5cdCAgICAgIHRoZWlyc0luZGV4Kys7XG5cdCAgICAgIG1pbmVJbmRleCsrO1xuXG5cdCAgICAgIHJldC5odW5rcy5wdXNoKG1lcmdlZEh1bmspO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiByZXQ7XG5cdH1cblxuXHRmdW5jdGlvbiBsb2FkUGF0Y2gocGFyYW0sIGJhc2UpIHtcblx0ICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xuXHQgICAgaWYgKC9eQEAvbS50ZXN0KHBhcmFtKSB8fCAvXkluZGV4Oi9tLnRlc3QocGFyYW0pKSB7XG5cdCAgICAgIHJldHVybiAoLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfcGFyc2UucGFyc2VQYXRjaCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8ocGFyYW0pWzBdXG5cdCAgICAgICk7XG5cdCAgICB9XG5cblx0ICAgIGlmICghYmFzZSkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgcHJvdmlkZSBhIGJhc2UgcmVmZXJlbmNlIG9yIHBhc3MgaW4gYSBwYXRjaCcpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuICgvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9jcmVhdGUuc3RydWN0dXJlZFBhdGNoKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmFzZSwgcGFyYW0pXG5cdCAgICApO1xuXHQgIH1cblxuXHQgIHJldHVybiBwYXJhbTtcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbGVOYW1lQ2hhbmdlZChwYXRjaCkge1xuXHQgIHJldHVybiBwYXRjaC5uZXdGaWxlTmFtZSAmJiBwYXRjaC5uZXdGaWxlTmFtZSAhPT0gcGF0Y2gub2xkRmlsZU5hbWU7XG5cdH1cblxuXHRmdW5jdGlvbiBzZWxlY3RGaWVsZChpbmRleCwgbWluZSwgdGhlaXJzKSB7XG5cdCAgaWYgKG1pbmUgPT09IHRoZWlycykge1xuXHQgICAgcmV0dXJuIG1pbmU7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGluZGV4LmNvbmZsaWN0ID0gdHJ1ZTtcblx0ICAgIHJldHVybiB7IG1pbmU6IG1pbmUsIHRoZWlyczogdGhlaXJzIH07XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gaHVua0JlZm9yZSh0ZXN0LCBjaGVjaykge1xuXHQgIHJldHVybiB0ZXN0Lm9sZFN0YXJ0IDwgY2hlY2sub2xkU3RhcnQgJiYgdGVzdC5vbGRTdGFydCArIHRlc3Qub2xkTGluZXMgPCBjaGVjay5vbGRTdGFydDtcblx0fVxuXG5cdGZ1bmN0aW9uIGNsb25lSHVuayhodW5rLCBvZmZzZXQpIHtcblx0ICByZXR1cm4ge1xuXHQgICAgb2xkU3RhcnQ6IGh1bmsub2xkU3RhcnQsIG9sZExpbmVzOiBodW5rLm9sZExpbmVzLFxuXHQgICAgbmV3U3RhcnQ6IGh1bmsubmV3U3RhcnQgKyBvZmZzZXQsIG5ld0xpbmVzOiBodW5rLm5ld0xpbmVzLFxuXHQgICAgbGluZXM6IGh1bmsubGluZXNcblx0ICB9O1xuXHR9XG5cblx0ZnVuY3Rpb24gbWVyZ2VMaW5lcyhodW5rLCBtaW5lT2Zmc2V0LCBtaW5lTGluZXMsIHRoZWlyT2Zmc2V0LCB0aGVpckxpbmVzKSB7XG5cdCAgLy8gVGhpcyB3aWxsIGdlbmVyYWxseSByZXN1bHQgaW4gYSBjb25mbGljdGVkIGh1bmssIGJ1dCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIGNvbnRleHRcblx0ICAvLyBpcyB0aGUgb25seSBvdmVybGFwIHdoZXJlIHdlIGNhbiBzdWNjZXNzZnVsbHkgbWVyZ2UgdGhlIGNvbnRlbnQgaGVyZS5cblx0ICB2YXIgbWluZSA9IHsgb2Zmc2V0OiBtaW5lT2Zmc2V0LCBsaW5lczogbWluZUxpbmVzLCBpbmRleDogMCB9LFxuXHQgICAgICB0aGVpciA9IHsgb2Zmc2V0OiB0aGVpck9mZnNldCwgbGluZXM6IHRoZWlyTGluZXMsIGluZGV4OiAwIH07XG5cblx0ICAvLyBIYW5kbGUgYW55IGxlYWRpbmcgY29udGVudFxuXHQgIGluc2VydExlYWRpbmcoaHVuaywgbWluZSwgdGhlaXIpO1xuXHQgIGluc2VydExlYWRpbmcoaHVuaywgdGhlaXIsIG1pbmUpO1xuXG5cdCAgLy8gTm93IGluIHRoZSBvdmVybGFwIGNvbnRlbnQuIFNjYW4gdGhyb3VnaCBhbmQgc2VsZWN0IHRoZSBiZXN0IGNoYW5nZXMgZnJvbSBlYWNoLlxuXHQgIHdoaWxlIChtaW5lLmluZGV4IDwgbWluZS5saW5lcy5sZW5ndGggJiYgdGhlaXIuaW5kZXggPCB0aGVpci5saW5lcy5sZW5ndGgpIHtcblx0ICAgIHZhciBtaW5lQ3VycmVudCA9IG1pbmUubGluZXNbbWluZS5pbmRleF0sXG5cdCAgICAgICAgdGhlaXJDdXJyZW50ID0gdGhlaXIubGluZXNbdGhlaXIuaW5kZXhdO1xuXG5cdCAgICBpZiAoKG1pbmVDdXJyZW50WzBdID09PSAnLScgfHwgbWluZUN1cnJlbnRbMF0gPT09ICcrJykgJiYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nIHx8IHRoZWlyQ3VycmVudFswXSA9PT0gJysnKSkge1xuXHQgICAgICAvLyBCb3RoIG1vZGlmaWVkIC4uLlxuXHQgICAgICBtdXR1YWxDaGFuZ2UoaHVuaywgbWluZSwgdGhlaXIpO1xuXHQgICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJysnICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2h1bmskbGluZXM7XG5cblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLy8gTWluZSBpbnNlcnRlZFxuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9odW5rJGxpbmVzID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9odW5rLmxpbmVzKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9faHVuayRsaW5lcyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jb2xsZWN0Q2hhbmdlKG1pbmUpKSk7XG5cdCAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJysnICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfaHVuayRsaW5lczI7XG5cblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLy8gVGhlaXJzIGluc2VydGVkXG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2h1bmskbGluZXMyID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9odW5rLmxpbmVzKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9faHVuayRsaW5lczIgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY29sbGVjdENoYW5nZSh0aGVpcikpKTtcblx0ICAgIH0gZWxzZSBpZiAobWluZUN1cnJlbnRbMF0gPT09ICctJyAmJiB0aGVpckN1cnJlbnRbMF0gPT09ICcgJykge1xuXHQgICAgICAvLyBNaW5lIHJlbW92ZWQgb3IgZWRpdGVkXG5cdCAgICAgIHJlbW92YWwoaHVuaywgbWluZSwgdGhlaXIpO1xuXHQgICAgfSBlbHNlIGlmICh0aGVpckN1cnJlbnRbMF0gPT09ICctJyAmJiBtaW5lQ3VycmVudFswXSA9PT0gJyAnKSB7XG5cdCAgICAgIC8vIFRoZWlyIHJlbW92ZWQgb3IgZWRpdGVkXG5cdCAgICAgIHJlbW92YWwoaHVuaywgdGhlaXIsIG1pbmUsIHRydWUpO1xuXHQgICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudCA9PT0gdGhlaXJDdXJyZW50KSB7XG5cdCAgICAgIC8vIENvbnRleHQgaWRlbnRpdHlcblx0ICAgICAgaHVuay5saW5lcy5wdXNoKG1pbmVDdXJyZW50KTtcblx0ICAgICAgbWluZS5pbmRleCsrO1xuXHQgICAgICB0aGVpci5pbmRleCsrO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgLy8gQ29udGV4dCBtaXNtYXRjaFxuXHQgICAgICBjb25mbGljdChodW5rLCBjb2xsZWN0Q2hhbmdlKG1pbmUpLCBjb2xsZWN0Q2hhbmdlKHRoZWlyKSk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgLy8gTm93IHB1c2ggYW55dGhpbmcgdGhhdCBtYXkgYmUgcmVtYWluaW5nXG5cdCAgaW5zZXJ0VHJhaWxpbmcoaHVuaywgbWluZSk7XG5cdCAgaW5zZXJ0VHJhaWxpbmcoaHVuaywgdGhlaXIpO1xuXG5cdCAgY2FsY0xpbmVDb3VudChodW5rKTtcblx0fVxuXG5cdGZ1bmN0aW9uIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcikge1xuXHQgIHZhciBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuXHQgICAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKHRoZWlyKTtcblxuXHQgIGlmIChhbGxSZW1vdmVzKG15Q2hhbmdlcykgJiYgYWxsUmVtb3Zlcyh0aGVpckNoYW5nZXMpKSB7XG5cdCAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHJlbW92ZSBjaGFuZ2VzIHRoYXQgYXJlIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlclxuXHQgICAgaWYgKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9hcnJheS5hcnJheVN0YXJ0c1dpdGgpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKG15Q2hhbmdlcywgdGhlaXJDaGFuZ2VzKSAmJiBza2lwUmVtb3ZlU3VwZXJzZXQodGhlaXIsIG15Q2hhbmdlcywgbXlDaGFuZ2VzLmxlbmd0aCAtIHRoZWlyQ2hhbmdlcy5sZW5ndGgpKSB7XG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2h1bmskbGluZXMzO1xuXG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2h1bmskbGluZXMzID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9odW5rLmxpbmVzKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9faHVuayRsaW5lczMgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovbXlDaGFuZ2VzKSk7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH0gZWxzZSBpZiAoIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX2FycmF5LmFycmF5U3RhcnRzV2l0aCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8odGhlaXJDaGFuZ2VzLCBteUNoYW5nZXMpICYmIHNraXBSZW1vdmVTdXBlcnNldChtaW5lLCB0aGVpckNoYW5nZXMsIHRoZWlyQ2hhbmdlcy5sZW5ndGggLSBteUNoYW5nZXMubGVuZ3RoKSkge1xuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9odW5rJGxpbmVzNDtcblxuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9odW5rJGxpbmVzNCA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovaHVuay5saW5lcykucHVzaC4gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2FwcGx5IC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2h1bmskbGluZXM0IC8qaXN0YW5idWwgaWdub3JlIGVuZCovLCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3RvQ29uc3VtYWJsZUFycmF5KCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3RoZWlyQ2hhbmdlcykpO1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cdCAgfSBlbHNlIGlmICggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfYXJyYXkuYXJyYXlFcXVhbCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8obXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpKSB7XG5cdCAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9odW5rJGxpbmVzNTtcblxuXHQgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfaHVuayRsaW5lczUgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2h1bmsubGluZXMpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19odW5rJGxpbmVzNSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9teUNoYW5nZXMpKTtcblx0ICAgIHJldHVybjtcblx0ICB9XG5cblx0ICBjb25mbGljdChodW5rLCBteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcyk7XG5cdH1cblxuXHRmdW5jdGlvbiByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyLCBzd2FwKSB7XG5cdCAgdmFyIG15Q2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UobWluZSksXG5cdCAgICAgIHRoZWlyQ2hhbmdlcyA9IGNvbGxlY3RDb250ZXh0KHRoZWlyLCBteUNoYW5nZXMpO1xuXHQgIGlmICh0aGVpckNoYW5nZXMubWVyZ2VkKSB7XG5cdCAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9odW5rJGxpbmVzNjtcblxuXHQgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfaHVuayRsaW5lczYgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2h1bmsubGluZXMpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19odW5rJGxpbmVzNiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi90aGVpckNoYW5nZXMubWVyZ2VkKSk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGNvbmZsaWN0KGh1bmssIHN3YXAgPyB0aGVpckNoYW5nZXMgOiBteUNoYW5nZXMsIHN3YXAgPyBteUNoYW5nZXMgOiB0aGVpckNoYW5nZXMpO1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGNvbmZsaWN0KGh1bmssIG1pbmUsIHRoZWlyKSB7XG5cdCAgaHVuay5jb25mbGljdCA9IHRydWU7XG5cdCAgaHVuay5saW5lcy5wdXNoKHtcblx0ICAgIGNvbmZsaWN0OiB0cnVlLFxuXHQgICAgbWluZTogbWluZSxcblx0ICAgIHRoZWlyczogdGhlaXJcblx0ICB9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGluc2VydExlYWRpbmcoaHVuaywgaW5zZXJ0LCB0aGVpcikge1xuXHQgIHdoaWxlIChpbnNlcnQub2Zmc2V0IDwgdGhlaXIub2Zmc2V0ICYmIGluc2VydC5pbmRleCA8IGluc2VydC5saW5lcy5sZW5ndGgpIHtcblx0ICAgIHZhciBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcblx0ICAgIGh1bmsubGluZXMucHVzaChsaW5lKTtcblx0ICAgIGluc2VydC5vZmZzZXQrKztcblx0ICB9XG5cdH1cblx0ZnVuY3Rpb24gaW5zZXJ0VHJhaWxpbmcoaHVuaywgaW5zZXJ0KSB7XG5cdCAgd2hpbGUgKGluc2VydC5pbmRleCA8IGluc2VydC5saW5lcy5sZW5ndGgpIHtcblx0ICAgIHZhciBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcblx0ICAgIGh1bmsubGluZXMucHVzaChsaW5lKTtcblx0ICB9XG5cdH1cblxuXHRmdW5jdGlvbiBjb2xsZWN0Q2hhbmdlKHN0YXRlKSB7XG5cdCAgdmFyIHJldCA9IFtdLFxuXHQgICAgICBvcGVyYXRpb24gPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF1bMF07XG5cdCAgd2hpbGUgKHN0YXRlLmluZGV4IDwgc3RhdGUubGluZXMubGVuZ3RoKSB7XG5cdCAgICB2YXIgbGluZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XTtcblxuXHQgICAgLy8gR3JvdXAgYWRkaXRpb25zIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGFmdGVyIHN1YnRyYWN0aW9ucyBhbmQgdHJlYXQgdGhlbSBhcyBvbmUgXCJhdG9taWNcIiBtb2RpZnkgY2hhbmdlLlxuXHQgICAgaWYgKG9wZXJhdGlvbiA9PT0gJy0nICYmIGxpbmVbMF0gPT09ICcrJykge1xuXHQgICAgICBvcGVyYXRpb24gPSAnKyc7XG5cdCAgICB9XG5cblx0ICAgIGlmIChvcGVyYXRpb24gPT09IGxpbmVbMF0pIHtcblx0ICAgICAgcmV0LnB1c2gobGluZSk7XG5cdCAgICAgIHN0YXRlLmluZGV4Kys7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBicmVhaztcblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXR1cm4gcmV0O1xuXHR9XG5cdGZ1bmN0aW9uIGNvbGxlY3RDb250ZXh0KHN0YXRlLCBtYXRjaENoYW5nZXMpIHtcblx0ICB2YXIgY2hhbmdlcyA9IFtdLFxuXHQgICAgICBtZXJnZWQgPSBbXSxcblx0ICAgICAgbWF0Y2hJbmRleCA9IDAsXG5cdCAgICAgIGNvbnRleHRDaGFuZ2VzID0gZmFsc2UsXG5cdCAgICAgIGNvbmZsaWN0ZWQgPSBmYWxzZTtcblx0ICB3aGlsZSAobWF0Y2hJbmRleCA8IG1hdGNoQ2hhbmdlcy5sZW5ndGggJiYgc3RhdGUuaW5kZXggPCBzdGF0ZS5saW5lcy5sZW5ndGgpIHtcblx0ICAgIHZhciBjaGFuZ2UgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF0sXG5cdCAgICAgICAgbWF0Y2ggPSBtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF07XG5cblx0ICAgIC8vIE9uY2Ugd2UndmUgaGl0IG91ciBhZGQsIHRoZW4gd2UgYXJlIGRvbmVcblx0ICAgIGlmIChtYXRjaFswXSA9PT0gJysnKSB7XG5cdCAgICAgIGJyZWFrO1xuXHQgICAgfVxuXG5cdCAgICBjb250ZXh0Q2hhbmdlcyA9IGNvbnRleHRDaGFuZ2VzIHx8IGNoYW5nZVswXSAhPT0gJyAnO1xuXG5cdCAgICBtZXJnZWQucHVzaChtYXRjaCk7XG5cdCAgICBtYXRjaEluZGV4Kys7XG5cblx0ICAgIC8vIENvbnN1bWUgYW55IGFkZGl0aW9ucyBpbiB0aGUgb3RoZXIgYmxvY2sgYXMgYSBjb25mbGljdCB0byBhdHRlbXB0XG5cdCAgICAvLyB0byBwdWxsIGluIHRoZSByZW1haW5pbmcgY29udGV4dCBhZnRlciB0aGlzXG5cdCAgICBpZiAoY2hhbmdlWzBdID09PSAnKycpIHtcblx0ICAgICAgY29uZmxpY3RlZCA9IHRydWU7XG5cblx0ICAgICAgd2hpbGUgKGNoYW5nZVswXSA9PT0gJysnKSB7XG5cdCAgICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZSk7XG5cdCAgICAgICAgY2hhbmdlID0gc3RhdGUubGluZXNbKytzdGF0ZS5pbmRleF07XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgaWYgKG1hdGNoLnN1YnN0cigxKSA9PT0gY2hhbmdlLnN1YnN0cigxKSkge1xuXHQgICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcblx0ICAgICAgc3RhdGUuaW5kZXgrKztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGlmICgobWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXhdIHx8ICcnKVswXSA9PT0gJysnICYmIGNvbnRleHRDaGFuZ2VzKSB7XG5cdCAgICBjb25mbGljdGVkID0gdHJ1ZTtcblx0ICB9XG5cblx0ICBpZiAoY29uZmxpY3RlZCkge1xuXHQgICAgcmV0dXJuIGNoYW5nZXM7XG5cdCAgfVxuXG5cdCAgd2hpbGUgKG1hdGNoSW5kZXggPCBtYXRjaENoYW5nZXMubGVuZ3RoKSB7XG5cdCAgICBtZXJnZWQucHVzaChtYXRjaENoYW5nZXNbbWF0Y2hJbmRleCsrXSk7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHtcblx0ICAgIG1lcmdlZDogbWVyZ2VkLFxuXHQgICAgY2hhbmdlczogY2hhbmdlc1xuXHQgIH07XG5cdH1cblxuXHRmdW5jdGlvbiBhbGxSZW1vdmVzKGNoYW5nZXMpIHtcblx0ICByZXR1cm4gY2hhbmdlcy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGNoYW5nZSkge1xuXHQgICAgcmV0dXJuIHByZXYgJiYgY2hhbmdlWzBdID09PSAnLSc7XG5cdCAgfSwgdHJ1ZSk7XG5cdH1cblx0ZnVuY3Rpb24gc2tpcFJlbW92ZVN1cGVyc2V0KHN0YXRlLCByZW1vdmVDaGFuZ2VzLCBkZWx0YSkge1xuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGE7IGkrKykge1xuXHQgICAgdmFyIGNoYW5nZUNvbnRlbnQgPSByZW1vdmVDaGFuZ2VzW3JlbW92ZUNoYW5nZXMubGVuZ3RoIC0gZGVsdGEgKyBpXS5zdWJzdHIoMSk7XG5cdCAgICBpZiAoc3RhdGUubGluZXNbc3RhdGUuaW5kZXggKyBpXSAhPT0gJyAnICsgY2hhbmdlQ29udGVudCkge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgc3RhdGUuaW5kZXggKz0gZGVsdGE7XG5cdCAgcmV0dXJuIHRydWU7XG5cdH1cblxuXHRmdW5jdGlvbiBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmVzKSB7XG5cdCAgdmFyIG9sZExpbmVzID0gMDtcblx0ICB2YXIgbmV3TGluZXMgPSAwO1xuXG5cdCAgbGluZXMuZm9yRWFjaChmdW5jdGlvbiAobGluZSkge1xuXHQgICAgaWYgKHR5cGVvZiBsaW5lICE9PSAnc3RyaW5nJykge1xuXHQgICAgICB2YXIgbXlDb3VudCA9IGNhbGNPbGROZXdMaW5lQ291bnQobGluZS5taW5lKTtcblx0ICAgICAgdmFyIHRoZWlyQ291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUudGhlaXJzKTtcblxuXHQgICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgIGlmIChteUNvdW50Lm9sZExpbmVzID09PSB0aGVpckNvdW50Lm9sZExpbmVzKSB7XG5cdCAgICAgICAgICBvbGRMaW5lcyArPSBteUNvdW50Lm9sZExpbmVzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBvbGRMaW5lcyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgIGlmIChteUNvdW50Lm5ld0xpbmVzID09PSB0aGVpckNvdW50Lm5ld0xpbmVzKSB7XG5cdCAgICAgICAgICBuZXdMaW5lcyArPSBteUNvdW50Lm5ld0xpbmVzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBuZXdMaW5lcyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkICYmIChsaW5lWzBdID09PSAnKycgfHwgbGluZVswXSA9PT0gJyAnKSkge1xuXHQgICAgICAgIG5ld0xpbmVzKys7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQgJiYgKGxpbmVbMF0gPT09ICctJyB8fCBsaW5lWzBdID09PSAnICcpKSB7XG5cdCAgICAgICAgb2xkTGluZXMrKztcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXG5cdCAgcmV0dXJuIHsgb2xkTGluZXM6IG9sZExpbmVzLCBuZXdMaW5lczogbmV3TGluZXMgfTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTl3WVhSamFDOXRaWEpuWlM1cWN5SmRMQ0p1WVcxbGN5STZXeUpqWVd4alRHbHVaVU52ZFc1MElpd2liV1Z5WjJVaUxDSm9kVzVySWl3aVkyRnNZMDlzWkU1bGQweHBibVZEYjNWdWRDSXNJbXhwYm1Weklpd2liMnhrVEdsdVpYTWlMQ0p1WlhkTWFXNWxjeUlzSW5WdVpHVm1hVzVsWkNJc0ltMXBibVVpTENKMGFHVnBjbk1pTENKaVlYTmxJaXdpYkc5aFpGQmhkR05vSWl3aWNtVjBJaXdpYVc1a1pYZ2lMQ0p1WlhkR2FXeGxUbUZ0WlNJc0ltWnBiR1ZPWVcxbFEyaGhibWRsWkNJc0ltOXNaRVpwYkdWT1lXMWxJaXdpYjJ4a1NHVmhaR1Z5SWl3aWJtVjNTR1ZoWkdWeUlpd2ljMlZzWldOMFJtbGxiR1FpTENKb2RXNXJjeUlzSW0xcGJtVkpibVJsZUNJc0luUm9aV2x5YzBsdVpHVjRJaXdpYldsdVpVOW1abk5sZENJc0luUm9aV2x5YzA5bVpuTmxkQ0lzSW14bGJtZDBhQ0lzSW0xcGJtVkRkWEp5Wlc1MElpd2liMnhrVTNSaGNuUWlMQ0pKYm1acGJtbDBlU0lzSW5Sb1pXbHljME4xY25KbGJuUWlMQ0pvZFc1clFtVm1iM0psSWl3aWNIVnphQ0lzSW1Oc2IyNWxTSFZ1YXlJc0ltMWxjbWRsWkVoMWJtc2lMQ0pOWVhSb0lpd2liV2x1SWl3aWJtVjNVM1JoY25RaUxDSnRaWEpuWlV4cGJtVnpJaXdpY0dGeVlXMGlMQ0owWlhOMElpd2lSWEp5YjNJaUxDSndZWFJqYUNJc0ltTnZibVpzYVdOMElpd2lZMmhsWTJzaUxDSnZabVp6WlhRaUxDSnRhVzVsVEdsdVpYTWlMQ0owYUdWcGNrOW1abk5sZENJc0luUm9aV2x5VEdsdVpYTWlMQ0owYUdWcGNpSXNJbWx1YzJWeWRFeGxZV1JwYm1jaUxDSjBhR1ZwY2tOMWNuSmxiblFpTENKdGRYUjFZV3hEYUdGdVoyVWlMQ0pqYjJ4c1pXTjBRMmhoYm1kbElpd2ljbVZ0YjNaaGJDSXNJbWx1YzJWeWRGUnlZV2xzYVc1bklpd2liWGxEYUdGdVoyVnpJaXdpZEdobGFYSkRhR0Z1WjJWeklpd2lZV3hzVW1WdGIzWmxjeUlzSW5OcmFYQlNaVzF2ZG1WVGRYQmxjbk5sZENJc0luTjNZWEFpTENKamIyeHNaV04wUTI5dWRHVjRkQ0lzSW0xbGNtZGxaQ0lzSW1sdWMyVnlkQ0lzSW14cGJtVWlMQ0p6ZEdGMFpTSXNJbTl3WlhKaGRHbHZiaUlzSW0xaGRHTm9RMmhoYm1kbGN5SXNJbU5vWVc1blpYTWlMQ0p0WVhSamFFbHVaR1Y0SWl3aVkyOXVkR1Y0ZEVOb1lXNW5aWE1pTENKamIyNW1iR2xqZEdWa0lpd2lZMmhoYm1kbElpd2liV0YwWTJnaUxDSnpkV0p6ZEhJaUxDSnlaV1IxWTJVaUxDSndjbVYySWl3aWNtVnRiM1psUTJoaGJtZGxjeUlzSW1SbGJIUmhJaXdpYVNJc0ltTm9ZVzVuWlVOdmJuUmxiblFpTENKbWIzSkZZV05vSWl3aWJYbERiM1Z1ZENJc0luUm9aV2x5UTI5MWJuUWlYU3dpYldGd2NHbHVaM01pT2lJN096dG5RMEZMWjBKQkxHRXNSMEZCUVVFc1lUdDVSRUZuUWtGRExFc3NSMEZCUVVFc1N6czdRVUZ5UW1oQ096dEJRVU5CT3p0QlFVVkJPenM3TzNWQ1FVVlBMRk5CUVZORUxHRkJRVlFzUTBGQmRVSkZMRWxCUVhaQ0xFVkJRVFpDTzBGQlFVRXNOa1ZCUTB4RExHOUNRVUZ2UWtRc1MwRkJTMFVzUzBGQmVrSXNRMEZFU3p0QlFVRkJMRTFCUXpOQ1F5eFJRVVF5UWl4M1FrRkRNMEpCTEZGQlJESkNPMEZCUVVFc1RVRkRha0pETEZGQlJHbENMSGRDUVVOcVFrRXNVVUZFYVVJN08wRkJSMnhETEUxQlFVbEVMR0ZCUVdGRkxGTkJRV3BDTEVWQlFUUkNPMEZCUXpGQ1RDeFRRVUZMUnl4UlFVRk1MRWRCUVdkQ1FTeFJRVUZvUWp0QlFVTkVMRWRCUmtRc1RVRkZUenRCUVVOTUxGZEJRVTlJTEV0QlFVdEhMRkZCUVZvN1FVRkRSRHM3UVVGRlJDeE5RVUZKUXl4aFFVRmhReXhUUVVGcVFpeEZRVUUwUWp0QlFVTXhRa3dzVTBGQlMwa3NVVUZCVEN4SFFVRm5Ra0VzVVVGQmFFSTdRVUZEUkN4SFFVWkVMRTFCUlU4N1FVRkRUQ3hYUVVGUFNpeExRVUZMU1N4UlFVRmFPMEZCUTBRN1FVRkRSanM3UVVGRlRTeFRRVUZUVEN4TFFVRlVMRU5CUVdWUExFbEJRV1lzUlVGQmNVSkRMRTFCUVhKQ0xFVkJRVFpDUXl4SlFVRTNRaXhGUVVGdFF6dEJRVU40UTBZc1UwRkJUMGNzVlVGQlZVZ3NTVUZCVml4RlFVRm5Ra1VzU1VGQmFFSXNRMEZCVUR0QlFVTkJSQ3hYUVVGVFJTeFZRVUZWUml4TlFVRldMRVZCUVd0Q1F5eEpRVUZzUWl4RFFVRlVPenRCUVVWQkxFMUJRVWxGTEUxQlFVMHNSVUZCVmpzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeE5RVUZKU2l4TFFVRkxTeXhMUVVGTUxFbEJRV05LTEU5QlFVOUpMRXRCUVhwQ0xFVkJRV2RETzBGQlF6bENSQ3hSUVVGSlF5eExRVUZLTEVkQlFWbE1MRXRCUVV0TExFdEJRVXdzU1VGQlkwb3NUMEZCVDBrc1MwRkJha003UVVGRFJEczdRVUZGUkN4TlFVRkpUQ3hMUVVGTFRTeFhRVUZNTEVsQlFXOUNUQ3hQUVVGUFN5eFhRVUV2UWl4RlFVRTBRenRCUVVNeFF5eFJRVUZKTEVOQlFVTkRMR2RDUVVGblFsQXNTVUZCYUVJc1EwRkJUQ3hGUVVFMFFqdEJRVU14UWp0QlFVTkJTU3hWUVVGSlNTeFhRVUZLTEVkQlFXdENVQ3hQUVVGUFR5eFhRVUZRTEVsQlFYTkNVaXhMUVVGTFVTeFhRVUUzUXp0QlFVTkJTaXhWUVVGSlJTeFhRVUZLTEVkQlFXdENUQ3hQUVVGUFN5eFhRVUZRTEVsQlFYTkNUaXhMUVVGTFRTeFhRVUUzUXp0QlFVTkJSaXhWUVVGSlN5eFRRVUZLTEVkQlFXZENVaXhQUVVGUFVTeFRRVUZRTEVsQlFXOUNWQ3hMUVVGTFV5eFRRVUY2UXp0QlFVTkJUQ3hWUVVGSlRTeFRRVUZLTEVkQlFXZENWQ3hQUVVGUFV5eFRRVUZRTEVsQlFXOUNWaXhMUVVGTFZTeFRRVUY2UXp0QlFVTkVMRXRCVGtRc1RVRk5UeXhKUVVGSkxFTkJRVU5JTEdkQ1FVRm5RazRzVFVGQmFFSXNRMEZCVEN4RlFVRTRRanRCUVVOdVF6dEJRVU5CUnl4VlFVRkpTU3hYUVVGS0xFZEJRV3RDVWl4TFFVRkxVU3hYUVVGMlFqdEJRVU5CU2l4VlFVRkpSU3hYUVVGS0xFZEJRV3RDVGl4TFFVRkxUU3hYUVVGMlFqdEJRVU5CUml4VlFVRkpTeXhUUVVGS0xFZEJRV2RDVkN4TFFVRkxVeXhUUVVGeVFqdEJRVU5CVEN4VlFVRkpUU3hUUVVGS0xFZEJRV2RDVml4TFFVRkxWU3hUUVVGeVFqdEJRVU5FTEV0QlRrMHNUVUZOUVR0QlFVTk1PMEZCUTBGT0xGVkJRVWxKTEZkQlFVb3NSMEZCYTBKSExGbEJRVmxRTEVkQlFWb3NSVUZCYVVKS0xFdEJRVXRSTEZkQlFYUkNMRVZCUVcxRFVDeFBRVUZQVHl4WFFVRXhReXhEUVVGc1FqdEJRVU5CU2l4VlFVRkpSU3hYUVVGS0xFZEJRV3RDU3l4WlFVRlpVQ3hIUVVGYUxFVkJRV2xDU2l4TFFVRkxUU3hYUVVGMFFpeEZRVUZ0UTB3c1QwRkJUMHNzVjBGQk1VTXNRMEZCYkVJN1FVRkRRVVlzVlVGQlNVc3NVMEZCU2l4SFFVRm5Ra1VzV1VGQldWQXNSMEZCV2l4RlFVRnBRa29zUzBGQlMxTXNVMEZCZEVJc1JVRkJhVU5TTEU5QlFVOVJMRk5CUVhoRExFTkJRV2hDTzBGQlEwRk1MRlZCUVVsTkxGTkJRVW9zUjBGQlowSkRMRmxCUVZsUUxFZEJRVm9zUlVGQmFVSktMRXRCUVV0VkxGTkJRWFJDTEVWQlFXbERWQ3hQUVVGUFV5eFRRVUY0UXl4RFFVRm9RanRCUVVORU8wRkJRMFk3TzBGQlJVUk9MRTFCUVVsUkxFdEJRVW9zUjBGQldTeEZRVUZhT3p0QlFVVkJMRTFCUVVsRExGbEJRVmtzUTBGQmFFSTdRVUZCUVN4TlFVTkpReXhqUVVGakxFTkJSR3hDTzBGQlFVRXNUVUZGU1VNc1lVRkJZU3hEUVVacVFqdEJRVUZCTEUxQlIwbERMR1ZCUVdVc1EwRklia0k3TzBGQlMwRXNVMEZCVDBnc1dVRkJXV0lzUzBGQlMxa3NTMEZCVEN4RFFVRlhTeXhOUVVGMlFpeEpRVUZwUTBnc1kwRkJZMklzVDBGQlQxY3NTMEZCVUN4RFFVRmhTeXhOUVVGdVJTeEZRVUV5UlR0QlFVTjZSU3hSUVVGSlF5eGpRVUZqYkVJc1MwRkJTMWtzUzBGQlRDeERRVUZYUXl4VFFVRllMRXRCUVhsQ0xFVkJRVU5OTEZWQlFWVkRMRkZCUVZnc1JVRkJNME03UVVGQlFTeFJRVU5KUXl4blFrRkJaMEp3UWl4UFFVRlBWeXhMUVVGUUxFTkJRV0ZGTEZkQlFXSXNTMEZCTmtJc1JVRkJRMHNzVlVGQlZVTXNVVUZCV0N4RlFVUnFSRHM3UVVGSFFTeFJRVUZKUlN4WFFVRlhTaXhYUVVGWUxFVkJRWGRDUnl4aFFVRjRRaXhEUVVGS0xFVkJRVFJETzBGQlF6RkRPMEZCUTBGcVFpeFZRVUZKVVN4TFFVRktMRU5CUVZWWExFbEJRVllzUTBGQlpVTXNWVUZCVlU0c1YwRkJWaXhGUVVGMVFrZ3NWVUZCZGtJc1EwRkJaanRCUVVOQlJqdEJRVU5CUnl4elFrRkJaMEpGTEZsQlFWbHdRaXhSUVVGYUxFZEJRWFZDYjBJc1dVRkJXWEpDTEZGQlFXNUVPMEZCUTBRc1MwRk1SQ3hOUVV0UExFbEJRVWw1UWl4WFFVRlhSQ3hoUVVGWUxFVkJRVEJDU0N4WFFVRXhRaXhEUVVGS0xFVkJRVFJETzBGQlEycEVPMEZCUTBGa0xGVkJRVWxSTEV0QlFVb3NRMEZCVlZjc1NVRkJWaXhEUVVGbFF5eFZRVUZWU0N4aFFVRldMRVZCUVhsQ1RDeFpRVUY2UWl4RFFVRm1PMEZCUTBGR08wRkJRMEZETEc5Q1FVRmpUU3hqUVVGamRrSXNVVUZCWkN4SFFVRjVRblZDTEdOQlFXTjRRaXhSUVVGeVJEdEJRVU5FTEV0QlRFMHNUVUZMUVR0QlFVTk1PMEZCUTBFc1ZVRkJTVFJDTEdGQlFXRTdRVUZEWms0c2EwSkJRVlZQTEV0QlFVdERMRWRCUVV3c1EwRkJVMVFzV1VGQldVTXNVVUZCY2tJc1JVRkJLMEpGTEdOQlFXTkdMRkZCUVRkRExFTkJSRXM3UVVGRlpuUkNMR3RDUVVGVkxFTkJSa3M3UVVGSFppdENMR3RDUVVGVlJpeExRVUZMUXl4SFFVRk1MRU5CUVZOVUxGbEJRVmxWTEZGQlFWb3NSMEZCZFVKaUxGVkJRV2hETEVWQlFUUkRUU3hqUVVGalJpeFJRVUZrTEVkQlFYbENTQ3haUVVGeVJTeERRVWhMTzBGQlNXWnNRaXhyUWtGQlZTeERRVXBMTzBGQlMyWkdMR1ZCUVU4N1FVRk1VU3hQUVVGcVFqdEJRVTlCYVVNc2FVSkJRVmRLTEZWQlFWZ3NSVUZCZFVKUUxGbEJRVmxETEZGQlFXNURMRVZCUVRaRFJDeFpRVUZaZEVJc1MwRkJla1FzUlVGQlowVjVRaXhqUVVGalJpeFJRVUU1UlN4RlFVRjNSa1VzWTBGQlkzcENMRXRCUVhSSE8wRkJRMEZyUWp0QlFVTkJSRHM3UVVGRlFWUXNWVUZCU1ZFc1MwRkJTaXhEUVVGVlZ5eEpRVUZXTEVOQlFXVkZMRlZCUVdZN1FVRkRSRHRCUVVOR096dEJRVVZFTEZOQlFVOXlRaXhIUVVGUU8wRkJRMFE3TzBGQlJVUXNVMEZCVTBRc1UwRkJWQ3hEUVVGdFFqSkNMRXRCUVc1Q0xFVkJRVEJDTlVJc1NVRkJNVUlzUlVGQlowTTdRVUZET1VJc1RVRkJTU3hQUVVGUE5FSXNTMEZCVUN4TFFVRnBRaXhSUVVGeVFpeEZRVUVyUWp0QlFVTTNRaXhSUVVGSkxFOUJRVTlETEVsQlFWQXNRMEZCV1VRc1MwRkJXaXhMUVVGMVFpeFhRVUZYUXl4SlFVRllMRU5CUVdkQ1JDeExRVUZvUWl4RFFVRXpRaXhGUVVGdlJEdEJRVU5zUkN4aFFVRlBMSGxGUVVGWFFTeExRVUZZTEVWQlFXdENMRU5CUVd4Q08wRkJRVkE3UVVGRFJEczdRVUZGUkN4UlFVRkpMRU5CUVVNMVFpeEpRVUZNTEVWQlFWYzdRVUZEVkN4WlFVRk5MRWxCUVVrNFFpeExRVUZLTEVOQlFWVXNhMFJCUVZZc1EwRkJUanRCUVVORU8wRkJRMFFzVjBGQlR5d3JSVUZCWjBKcVF5eFRRVUZvUWl4RlFVRXlRa0VzVTBGQk0wSXNSVUZCYzBOSExFbEJRWFJETEVWQlFUUkRORUlzUzBGQk5VTTdRVUZCVUR0QlFVTkVPenRCUVVWRUxGTkJRVTlCTEV0QlFWQTdRVUZEUkRzN1FVRkZSQ3hUUVVGVGRrSXNaVUZCVkN4RFFVRjVRakJDTEV0QlFYcENMRVZCUVdkRE8wRkJRemxDTEZOQlFVOUJMRTFCUVUwelFpeFhRVUZPTEVsQlFYRkNNa0lzVFVGQlRUTkNMRmRCUVU0c1MwRkJjMEl5UWl4TlFVRk5la0lzVjBGQmVFUTdRVUZEUkRzN1FVRkZSQ3hUUVVGVFJ5eFhRVUZVTEVOQlFYRkNUaXhMUVVGeVFpeEZRVUUwUWt3c1NVRkJOVUlzUlVGQmEwTkRMRTFCUVd4RExFVkJRVEJETzBGQlEzaERMRTFCUVVsRUxGTkJRVk5ETEUxQlFXSXNSVUZCY1VJN1FVRkRia0lzVjBGQlQwUXNTVUZCVUR0QlFVTkVMRWRCUmtRc1RVRkZUenRCUVVOTVN5eFZRVUZOTmtJc1VVRkJUaXhIUVVGcFFpeEpRVUZxUWp0QlFVTkJMRmRCUVU4c1JVRkJRMnhETEZWQlFVUXNSVUZCVDBNc1kwRkJVQ3hGUVVGUU8wRkJRMFE3UVVGRFJqczdRVUZGUkN4VFFVRlRjVUlzVlVGQlZDeERRVUZ2UWxNc1NVRkJjRUlzUlVGQk1FSkpMRXRCUVRGQ0xFVkJRV2xETzBGQlF5OUNMRk5CUVU5S0xFdEJRVXRhTEZGQlFVd3NSMEZCWjBKblFpeE5RVUZOYUVJc1VVRkJkRUlzU1VGRFJGa3NTMEZCUzFvc1VVRkJUQ3hIUVVGblFsa3NTMEZCUzJ4RExGRkJRWFJDTEVkQlFXdERjME1zVFVGQlRXaENMRkZCUkRkRE8wRkJSVVE3TzBGQlJVUXNVMEZCVTBzc1UwRkJWQ3hEUVVGdFFqbENMRWxCUVc1Q0xFVkJRWGxDTUVNc1RVRkJla0lzUlVGQmFVTTdRVUZETDBJc1UwRkJUenRCUVVOTWFrSXNZMEZCVlhwQ0xFdEJRVXQ1UWl4UlFVUldMRVZCUTI5Q2RFSXNWVUZCVlVnc1MwRkJTMGNzVVVGRWJrTTdRVUZGVEN0Q0xHTkJRVlZzUXl4TFFVRkxhME1zVVVGQlRDeEhRVUZuUWxFc1RVRkdja0lzUlVGRk5rSjBReXhWUVVGVlNpeExRVUZMU1N4UlFVWTFRenRCUVVkTVJpeFhRVUZQUml4TFFVRkxSVHRCUVVoUUxFZEJRVkE3UVVGTFJEczdRVUZGUkN4VFFVRlRhVU1zVlVGQlZDeERRVUZ2UW01RExFbEJRWEJDTEVWQlFUQkNjVUlzVlVGQk1VSXNSVUZCYzBOelFpeFRRVUYwUXl4RlFVRnBSRU1zVjBGQmFrUXNSVUZCT0VSRExGVkJRVGxFTEVWQlFUQkZPMEZCUTNoRk8wRkJRMEU3UVVGRFFTeE5RVUZKZGtNc1QwRkJUeXhGUVVGRGIwTXNVVUZCVVhKQ0xGVkJRVlFzUlVGQmNVSnVRaXhQUVVGUGVVTXNVMEZCTlVJc1JVRkJkVU5vUXl4UFFVRlBMRU5CUVRsRExFVkJRVmc3UVVGQlFTeE5RVU5KYlVNc1VVRkJVU3hGUVVGRFNpeFJRVUZSUlN4WFFVRlVMRVZCUVhOQ01VTXNUMEZCVHpKRExGVkJRVGRDTEVWQlFYbERiRU1zVDBGQlR5eERRVUZvUkN4RlFVUmFPenRCUVVkQk8wRkJRMEZ2UXl4blFrRkJZeTlETEVsQlFXUXNSVUZCYjBKTkxFbEJRWEJDTEVWQlFUQkNkME1zUzBGQk1VSTdRVUZEUVVNc1owSkJRV012UXl4SlFVRmtMRVZCUVc5Q09FTXNTMEZCY0VJc1JVRkJNa0o0UXl4SlFVRXpRanM3UVVGRlFUdEJRVU5CTEZOQlFVOUJMRXRCUVV0TExFdEJRVXdzUjBGQllVd3NTMEZCUzBvc1MwRkJUQ3hEUVVGWGNVSXNUVUZCZUVJc1NVRkJhME4xUWl4TlFVRk5ia01zUzBGQlRpeEhRVUZqYlVNc1RVRkJUVFZETEV0QlFVNHNRMEZCV1hGQ0xFMUJRVzVGTEVWQlFUSkZPMEZCUTNwRkxGRkJRVWxETEdOQlFXTnNRaXhMUVVGTFNpeExRVUZNTEVOQlFWZEpMRXRCUVV0TExFdEJRV2hDTEVOQlFXeENPMEZCUVVFc1VVRkRTWEZETEdWQlFXVkdMRTFCUVUwMVF5eExRVUZPTEVOQlFWazBReXhOUVVGTmJrTXNTMEZCYkVJc1EwRkVia0k3TzBGQlIwRXNVVUZCU1N4RFFVRkRZU3haUVVGWkxFTkJRVm9zVFVGQmJVSXNSMEZCYmtJc1NVRkJNRUpCTEZsQlFWa3NRMEZCV2l4TlFVRnRRaXhIUVVFNVF5eE5RVU5KZDBJc1lVRkJZU3hEUVVGaUxFMUJRVzlDTEVkQlFYQkNMRWxCUVRKQ1FTeGhRVUZoTEVOQlFXSXNUVUZCYjBJc1IwRkVia1FzUTBGQlNpeEZRVU0yUkR0QlFVTXpSRHRCUVVOQlF5eHRRa0ZCWVdwRUxFbEJRV0lzUlVGQmJVSk5MRWxCUVc1Q0xFVkJRWGxDZDBNc1MwRkJla0k3UVVGRFJDeExRVXBFTEUxQlNVOHNTVUZCU1hSQ0xGbEJRVmtzUTBGQldpeE5RVUZ0UWl4SFFVRnVRaXhKUVVFd1FuZENMR0ZCUVdFc1EwRkJZaXhOUVVGdlFpeEhRVUZzUkN4RlFVRjFSRHRCUVVGQk96dEJRVUZCTERoQ1FVTTFSRHRCUVVOQkxEQkZRVUZMT1VNc1MwRkJUQ3hGUVVGWE1rSXNTVUZCV0N3MFRFRkJiMEp4UWl4alFVRmpOVU1zU1VGQlpDeERRVUZ3UWp0QlFVTkVMRXRCU0Uwc1RVRkhRU3hKUVVGSk1FTXNZVUZCWVN4RFFVRmlMRTFCUVc5Q0xFZEJRWEJDTEVsQlFUSkNlRUlzV1VGQldTeERRVUZhTEUxQlFXMUNMRWRCUVd4RUxFVkJRWFZFTzBGQlFVRTdPMEZCUVVFc09FSkJRelZFTzBGQlEwRXNNa1ZCUVV0MFFpeExRVUZNTEVWQlFWY3lRaXhKUVVGWUxEWk1RVUZ2UW5GQ0xHTkJRV05LTEV0QlFXUXNRMEZCY0VJN1FVRkRSQ3hMUVVoTkxFMUJSMEVzU1VGQlNYUkNMRmxCUVZrc1EwRkJXaXhOUVVGdFFpeEhRVUZ1UWl4SlFVRXdRbmRDTEdGQlFXRXNRMEZCWWl4TlFVRnZRaXhIUVVGc1JDeEZRVUYxUkR0QlFVTTFSRHRCUVVOQlJ5eGpRVUZSYmtRc1NVRkJVaXhGUVVGalRTeEpRVUZrTEVWQlFXOUNkME1zUzBGQmNFSTdRVUZEUkN4TFFVaE5MRTFCUjBFc1NVRkJTVVVzWVVGQllTeERRVUZpTEUxQlFXOUNMRWRCUVhCQ0xFbEJRVEpDZUVJc1dVRkJXU3hEUVVGYUxFMUJRVzFDTEVkQlFXeEVMRVZCUVhWRU8wRkJRelZFTzBGQlEwRXlRaXhqUVVGUmJrUXNTVUZCVWl4RlFVRmpPRU1zUzBGQlpDeEZRVUZ4UW5oRExFbEJRWEpDTEVWQlFUSkNMRWxCUVROQ08wRkJRMFFzUzBGSVRTeE5RVWRCTEVsQlFVbHJRaXhuUWtGQlowSjNRaXhaUVVGd1FpeEZRVUZyUXp0QlFVTjJRenRCUVVOQmFFUXNWMEZCUzBVc1MwRkJUQ3hEUVVGWE1rSXNTVUZCV0N4RFFVRm5Ra3dzVjBGQmFFSTdRVUZEUVd4Q0xGZEJRVXRMTEV0QlFVdzdRVUZEUVcxRExGbEJRVTF1UXl4TFFVRk9PMEZCUTBRc1MwRk1UU3hOUVV0Qk8wRkJRMHc3UVVGRFFUWkNMR1ZCUVZONFF5eEpRVUZVTEVWQlFXVnJSQ3hqUVVGak5VTXNTVUZCWkN4RFFVRm1MRVZCUVc5RE5FTXNZMEZCWTBvc1MwRkJaQ3hEUVVGd1F6dEJRVU5FTzBGQlEwWTdPMEZCUlVRN1FVRkRRVTBzYVVKQlFXVndSQ3hKUVVGbUxFVkJRWEZDVFN4SlFVRnlRanRCUVVOQk9FTXNhVUpCUVdWd1JDeEpRVUZtTEVWQlFYRkNPRU1zUzBGQmNrSTdPMEZCUlVGb1JDeG5Ra0ZCWTBVc1NVRkJaRHRCUVVORU96dEJRVVZFTEZOQlFWTnBSQ3haUVVGVUxFTkJRWE5DYWtRc1NVRkJkRUlzUlVGQk5FSk5MRWxCUVRWQ0xFVkJRV3REZDBNc1MwRkJiRU1zUlVGQmVVTTdRVUZEZGtNc1RVRkJTVThzV1VGQldVZ3NZMEZCWXpWRExFbEJRV1FzUTBGQmFFSTdRVUZCUVN4TlFVTkpaMFFzWlVGQlpVb3NZMEZCWTBvc1MwRkJaQ3hEUVVSdVFqczdRVUZIUVN4TlFVRkpVeXhYUVVGWFJpeFRRVUZZTEV0QlFYbENSU3hYUVVGWFJDeFpRVUZZTEVOQlFUZENMRVZCUVhWRU8wRkJRM0pFTzBGQlEwRXNVVUZCU1N3NFJVRkJaMEpFTEZOQlFXaENMRVZCUVRKQ1F5eFpRVUV6UWl4TFFVTkhSU3h0UWtGQmJVSldMRXRCUVc1Q0xFVkJRVEJDVHl4VFFVRXhRaXhGUVVGeFEwRXNWVUZCVlRsQ0xFMUJRVllzUjBGQmJVSXJRaXhoUVVGaEwwSXNUVUZCY2tVc1EwRkVVQ3hGUVVOeFJqdEJRVUZCT3p0QlFVRkJMRFpDUVVOdVJpeHpSVUZCUzNKQ0xFdEJRVXdzUlVGQlZ6SkNMRWxCUVZnc05reEJRVzlDZDBJc1UwRkJjRUk3UVVGRFFUdEJRVU5FTEV0QlNrUXNUVUZKVHl4SlFVRkpMRGhGUVVGblFrTXNXVUZCYUVJc1JVRkJPRUpFTEZOQlFUbENMRXRCUTBwSExHMUNRVUZ0UW14RUxFbEJRVzVDTEVWQlFYbENaMFFzV1VGQmVrSXNSVUZCZFVOQkxHRkJRV0V2UWl4TlFVRmlMRWRCUVhOQ09FSXNWVUZCVlRsQ0xFMUJRWFpGTEVOQlJFRXNSVUZEWjBZN1FVRkJRVHM3UVVGQlFTdzJRa0ZEY2tZc2MwVkJRVXR5UWl4TFFVRk1MRVZCUVZjeVFpeEpRVUZZTERaTVFVRnZRbmxDTEZsQlFYQkNPMEZCUTBFN1FVRkRSRHRCUVVOR0xFZEJXRVFzVFVGWFR5eEpRVUZKTEhsRlFVRlhSQ3hUUVVGWUxFVkJRWE5DUXl4WlFVRjBRaXhEUVVGS0xFVkJRWGxETzBGQlFVRTdPMEZCUVVFc01rSkJRemxETEhORlFVRkxjRVFzUzBGQlRDeEZRVUZYTWtJc1NVRkJXQ3cyVEVGQmIwSjNRaXhUUVVGd1FqdEJRVU5CTzBGQlEwUTdPMEZCUlVSaUxGZEJRVk40UXl4SlFVRlVMRVZCUVdWeFJDeFRRVUZtTEVWQlFUQkNReXhaUVVFeFFqdEJRVU5FT3p0QlFVVkVMRk5CUVZOSUxFOUJRVlFzUTBGQmFVSnVSQ3hKUVVGcVFpeEZRVUYxUWswc1NVRkJka0lzUlVGQk5rSjNReXhMUVVFM1FpeEZRVUZ2UTFjc1NVRkJjRU1zUlVGQk1FTTdRVUZEZUVNc1RVRkJTVW9zV1VGQldVZ3NZMEZCWXpWRExFbEJRV1FzUTBGQmFFSTdRVUZCUVN4TlFVTkpaMFFzWlVGQlpVa3NaVUZCWlZvc1MwRkJaaXhGUVVGelFrOHNVMEZCZEVJc1EwRkVia0k3UVVGRlFTeE5RVUZKUXl4aFFVRmhTeXhOUVVGcVFpeEZRVUY1UWp0QlFVRkJPenRCUVVGQkxESkNRVU4yUWl4elJVRkJTM3BFTEV0QlFVd3NSVUZCVnpKQ0xFbEJRVmdzTmt4QlFXOUNlVUlzWVVGQllVc3NUVUZCYWtNN1FVRkRSQ3hIUVVaRUxFMUJSVTg3UVVGRFRHNUNMR0ZCUVZONFF5eEpRVUZVTEVWQlFXVjVSQ3hQUVVGUFNDeFpRVUZRTEVkQlFYTkNSQ3hUUVVGeVF5eEZRVUZuUkVrc1QwRkJUMG9zVTBGQlVDeEhRVUZ0UWtNc1dVRkJia1U3UVVGRFJEdEJRVU5HT3p0QlFVVkVMRk5CUVZOa0xGRkJRVlFzUTBGQmEwSjRReXhKUVVGc1FpeEZRVUYzUWswc1NVRkJlRUlzUlVGQk9FSjNReXhMUVVFNVFpeEZRVUZ4UXp0QlFVTnVRemxETEU5QlFVdDNReXhSUVVGTUxFZEJRV2RDTEVsQlFXaENPMEZCUTBGNFF5eFBRVUZMUlN4TFFVRk1MRU5CUVZjeVFpeEpRVUZZTEVOQlFXZENPMEZCUTJSWExHTkJRVlVzU1VGRVNUdEJRVVZrYkVNc1ZVRkJUVUVzU1VGR1VUdEJRVWRrUXl4WlFVRlJkVU03UVVGSVRTeEhRVUZvUWp0QlFVdEVPenRCUVVWRUxGTkJRVk5ETEdGQlFWUXNRMEZCZFVJdlF5eEpRVUYyUWl4RlFVRTJRalJFTEUxQlFUZENMRVZCUVhGRFpDeExRVUZ5UXl4RlFVRTBRenRCUVVNeFF5eFRRVUZQWXl4UFFVRlBiRUlzVFVGQlVDeEhRVUZuUWtrc1RVRkJUVW9zVFVGQmRFSXNTVUZCWjBOclFpeFBRVUZQYWtRc1MwRkJVQ3hIUVVGbGFVUXNUMEZCVHpGRUxFdEJRVkFzUTBGQllYRkNMRTFCUVc1RkxFVkJRVEpGTzBGQlEzcEZMRkZCUVVselF5eFBRVUZQUkN4UFFVRlBNVVFzUzBGQlVDeERRVUZoTUVRc1QwRkJUMnBFTEV0QlFWQXNSVUZCWWl4RFFVRllPMEZCUTBGWUxGTkJRVXRGTEV0QlFVd3NRMEZCVnpKQ0xFbEJRVmdzUTBGQlowSm5ReXhKUVVGb1FqdEJRVU5CUkN4WFFVRlBiRUlzVFVGQlVEdEJRVU5FTzBGQlEwWTdRVUZEUkN4VFFVRlRWU3hqUVVGVUxFTkJRWGRDY0VRc1NVRkJlRUlzUlVGQk9FSTBSQ3hOUVVFNVFpeEZRVUZ6UXp0QlFVTndReXhUUVVGUFFTeFBRVUZQYWtRc1MwRkJVQ3hIUVVGbGFVUXNUMEZCVHpGRUxFdEJRVkFzUTBGQllYRkNMRTFCUVc1RExFVkJRVEpETzBGQlEzcERMRkZCUVVselF5eFBRVUZQUkN4UFFVRlBNVVFzUzBGQlVDeERRVUZoTUVRc1QwRkJUMnBFTEV0QlFWQXNSVUZCWWl4RFFVRllPMEZCUTBGWUxGTkJRVXRGTEV0QlFVd3NRMEZCVnpKQ0xFbEJRVmdzUTBGQlowSm5ReXhKUVVGb1FqdEJRVU5FTzBGQlEwWTdPMEZCUlVRc1UwRkJVMWdzWVVGQlZDeERRVUYxUWxrc1MwRkJka0lzUlVGQk9FSTdRVUZETlVJc1RVRkJTWEJFTEUxQlFVMHNSVUZCVmp0QlFVRkJMRTFCUTBseFJDeFpRVUZaUkN4TlFVRk5OVVFzUzBGQlRpeERRVUZaTkVRc1RVRkJUVzVFTEV0QlFXeENMRVZCUVhsQ0xFTkJRWHBDTEVOQlJHaENPMEZCUlVFc1UwRkJUMjFFTEUxQlFVMXVSQ3hMUVVGT0xFZEJRV050UkN4TlFVRk5OVVFzUzBGQlRpeERRVUZaY1VJc1RVRkJha01zUlVGQmVVTTdRVUZEZGtNc1VVRkJTWE5ETEU5QlFVOURMRTFCUVUwMVJDeExRVUZPTEVOQlFWazBSQ3hOUVVGTmJrUXNTMEZCYkVJc1EwRkJXRHM3UVVGRlFUdEJRVU5CTEZGQlFVbHZSQ3hqUVVGakxFZEJRV1FzU1VGQmNVSkdMRXRCUVVzc1EwRkJUQ3hOUVVGWkxFZEJRWEpETEVWQlFUQkRPMEZCUTNoRFJTeHJRa0ZCV1N4SFFVRmFPMEZCUTBRN08wRkJSVVFzVVVGQlNVRXNZMEZCWTBZc1MwRkJTeXhEUVVGTUxFTkJRV3hDTEVWQlFUSkNPMEZCUTNwQ2JrUXNWVUZCU1cxQ0xFbEJRVW9zUTBGQlUyZERMRWxCUVZRN1FVRkRRVU1zV1VGQlRXNUVMRXRCUVU0N1FVRkRSQ3hMUVVoRUxFMUJSMDg3UVVGRFREdEJRVU5FTzBGQlEwWTdPMEZCUlVRc1UwRkJUMFFzUjBGQlVEdEJRVU5FTzBGQlEwUXNVMEZCVTJkRUxHTkJRVlFzUTBGQmQwSkpMRXRCUVhoQ0xFVkJRU3RDUlN4WlFVRXZRaXhGUVVFMlF6dEJRVU16UXl4TlFVRkpReXhWUVVGVkxFVkJRV1E3UVVGQlFTeE5RVU5KVGl4VFFVRlRMRVZCUkdJN1FVRkJRU3hOUVVWSlR5eGhRVUZoTEVOQlJtcENPMEZCUVVFc1RVRkhTVU1zYVVKQlFXbENMRXRCU0hKQ08wRkJRVUVzVFVGSlNVTXNZVUZCWVN4TFFVcHFRanRCUVV0QkxGTkJRVTlHTEdGQlFXRkdMR0ZCUVdGNlF5eE5RVUV4UWl4SlFVTkZkVU1zVFVGQlRXNUVMRXRCUVU0c1IwRkJZMjFFTEUxQlFVMDFSQ3hMUVVGT0xFTkJRVmx4UWl4TlFVUnVReXhGUVVNeVF6dEJRVU42UXl4UlFVRkpPRU1zVTBGQlUxQXNUVUZCVFRWRUxFdEJRVTRzUTBGQldUUkVMRTFCUVUxdVJDeExRVUZzUWl4RFFVRmlPMEZCUVVFc1VVRkRTVEpFTEZGQlFWRk9MR0ZCUVdGRkxGVkJRV0lzUTBGRVdqczdRVUZIUVR0QlFVTkJMRkZCUVVsSkxFMUJRVTBzUTBGQlRpeE5RVUZoTEVkQlFXcENMRVZCUVhOQ08wRkJRM0JDTzBGQlEwUTdPMEZCUlVSSUxIRkNRVUZwUWtFc2EwSkJRV3RDUlN4UFFVRlBMRU5CUVZBc1RVRkJZeXhIUVVGcVJEczdRVUZGUVZZc1YwRkJUemxDTEVsQlFWQXNRMEZCV1hsRExFdEJRVm83UVVGRFFVbzdPMEZCUlVFN1FVRkRRVHRCUVVOQkxGRkJRVWxITEU5QlFVOHNRMEZCVUN4TlFVRmpMRWRCUVd4Q0xFVkJRWFZDTzBGQlEzSkNSQ3h0UWtGQllTeEpRVUZpT3p0QlFVVkJMR0ZCUVU5RExFOUJRVThzUTBGQlVDeE5RVUZqTEVkQlFYSkNMRVZCUVRCQ08wRkJRM2hDU2l4blFrRkJVWEJETEVsQlFWSXNRMEZCWVhkRExFMUJRV0k3UVVGRFFVRXNhVUpCUVZOUUxFMUJRVTAxUkN4TFFVRk9MRU5CUVZrc1JVRkJSVFJFTEUxQlFVMXVSQ3hMUVVGd1FpeERRVUZVTzBGQlEwUTdRVUZEUmpzN1FVRkZSQ3hSUVVGSk1rUXNUVUZCVFVNc1RVRkJUaXhEUVVGaExFTkJRV0lzVFVGQmIwSkdMRTlCUVU5RkxFMUJRVkFzUTBGQll5eERRVUZrTEVOQlFYaENMRVZCUVRCRE8wRkJRM2hEVGl4alFVRlJjRU1zU1VGQlVpeERRVUZoZDBNc1RVRkJZanRCUVVOQlVDeFpRVUZOYmtRc1MwRkJUanRCUVVORUxFdEJTRVFzVFVGSFR6dEJRVU5NZVVRc2JVSkJRV0VzU1VGQllqdEJRVU5FTzBGQlEwWTdPMEZCUlVRc1RVRkJTU3hEUVVGRFNpeGhRVUZoUlN4VlFVRmlMRXRCUVRSQ0xFVkJRVGRDTEVWQlFXbERMRU5CUVdwRExFMUJRWGRETEVkQlFYaERMRWxCUTBkRExHTkJSRkFzUlVGRGRVSTdRVUZEY2tKRExHbENRVUZoTEVsQlFXSTdRVUZEUkRzN1FVRkZSQ3hOUVVGSlFTeFZRVUZLTEVWQlFXZENPMEZCUTJRc1YwRkJUMGdzVDBGQlVEdEJRVU5FT3p0QlFVVkVMRk5CUVU5RExHRkJRV0ZHTEdGQlFXRjZReXhOUVVGcVF5eEZRVUY1UXp0QlFVTjJRMjlETEZkQlFVODVRaXhKUVVGUUxFTkJRVmx0UXl4aFFVRmhSU3haUVVGaUxFTkJRVm83UVVGRFJEczdRVUZGUkN4VFFVRlBPMEZCUTB4UUxHdENRVVJMTzBGQlJVeE5PMEZCUmtzc1IwRkJVRHRCUVVsRU96dEJRVVZFTEZOQlFWTldMRlZCUVZRc1EwRkJiMEpWTEU5QlFYQkNMRVZCUVRaQ08wRkJRek5DTEZOQlFVOUJMRkZCUVZGUExFMUJRVklzUTBGQlpTeFZRVUZUUXl4SlFVRlVMRVZCUVdWS0xFMUJRV1lzUlVGQmRVSTdRVUZETTBNc1YwRkJUMGtzVVVGQlVVb3NUMEZCVHl4RFFVRlFMRTFCUVdNc1IwRkJOMEk3UVVGRFJDeEhRVVpOTEVWQlJVb3NTVUZHU1N4RFFVRlFPMEZCUjBRN1FVRkRSQ3hUUVVGVFlpeHJRa0ZCVkN4RFFVRTBRazBzUzBGQk5VSXNSVUZCYlVOWkxHRkJRVzVETEVWQlFXdEVReXhMUVVGc1JDeEZRVUY1UkR0QlFVTjJSQ3hQUVVGTExFbEJRVWxETEVsQlFVa3NRMEZCWWl4RlFVRm5Ra0VzU1VGQlNVUXNTMEZCY0VJc1JVRkJNa0pETEVkQlFUTkNMRVZCUVdkRE8wRkJRemxDTEZGQlFVbERMR2RDUVVGblFrZ3NZMEZCWTBFc1kwRkJZMjVFTEUxQlFXUXNSMEZCZFVKdlJDeExRVUYyUWl4SFFVRXJRa01zUTBGQk4wTXNSVUZCWjBSTUxFMUJRV2hFTEVOQlFYVkVMRU5CUVhaRUxFTkJRWEJDTzBGQlEwRXNVVUZCU1ZRc1RVRkJUVFZFTEV0QlFVNHNRMEZCV1RSRUxFMUJRVTF1UkN4TFFVRk9MRWRCUVdOcFJTeERRVUV4UWl4TlFVRnBReXhOUVVGTlF5eGhRVUV6UXl4RlFVRXdSRHRCUVVONFJDeGhRVUZQTEV0QlFWQTdRVUZEUkR0QlFVTkdPenRCUVVWRVppeFJRVUZOYmtRc1MwRkJUaXhKUVVGbFowVXNTMEZCWmp0QlFVTkJMRk5CUVU4c1NVRkJVRHRCUVVORU96dEJRVVZFTEZOQlFWTXhSU3h0UWtGQlZDeERRVUUyUWtNc1MwRkJOMElzUlVGQmIwTTdRVUZEYkVNc1RVRkJTVU1zVjBGQlZ5eERRVUZtTzBGQlEwRXNUVUZCU1VNc1YwRkJWeXhEUVVGbU96dEJRVVZCUml4UlFVRk5ORVVzVDBGQlRpeERRVUZqTEZWQlFWTnFRaXhKUVVGVUxFVkJRV1U3UVVGRE0wSXNVVUZCU1N4UFFVRlBRU3hKUVVGUUxFdEJRV2RDTEZGQlFYQkNMRVZCUVRoQ08wRkJRelZDTEZWQlFVbHJRaXhWUVVGVk9VVXNiMEpCUVc5Q05FUXNTMEZCUzNaRUxFbEJRWHBDTEVOQlFXUTdRVUZEUVN4VlFVRkpNRVVzWVVGQllTOUZMRzlDUVVGdlFqUkVMRXRCUVV0MFJDeE5RVUY2UWl4RFFVRnFRanM3UVVGRlFTeFZRVUZKU2l4aFFVRmhSU3hUUVVGcVFpeEZRVUUwUWp0QlFVTXhRaXhaUVVGSk1FVXNVVUZCVVRWRkxGRkJRVklzUzBGQmNVSTJSU3hYUVVGWE4wVXNVVUZCY0VNc1JVRkJPRU03UVVGRE5VTkJMSE5DUVVGWk5FVXNVVUZCVVRWRkxGRkJRWEJDTzBGQlEwUXNVMEZHUkN4TlFVVlBPMEZCUTB4QkxIRkNRVUZYUlN4VFFVRllPMEZCUTBRN1FVRkRSanM3UVVGRlJDeFZRVUZKUkN4aFFVRmhReXhUUVVGcVFpeEZRVUUwUWp0QlFVTXhRaXhaUVVGSk1FVXNVVUZCVVRORkxGRkJRVklzUzBGQmNVSTBSU3hYUVVGWE5VVXNVVUZCY0VNc1JVRkJPRU03UVVGRE5VTkJMSE5DUVVGWk1rVXNVVUZCVVRORkxGRkJRWEJDTzBGQlEwUXNVMEZHUkN4TlFVVlBPMEZCUTB4QkxIRkNRVUZYUXl4VFFVRllPMEZCUTBRN1FVRkRSanRCUVVOR0xFdEJia0pFTEUxQmJVSlBPMEZCUTB3c1ZVRkJTVVFzWVVGQllVTXNVMEZCWWl4TFFVRXlRbmRFTEV0QlFVc3NRMEZCVEN4TlFVRlpMRWRCUVZvc1NVRkJiVUpCTEV0QlFVc3NRMEZCVEN4TlFVRlpMRWRCUVRGRUxFTkJRVW9zUlVGQmIwVTdRVUZEYkVWNlJEdEJRVU5FTzBGQlEwUXNWVUZCU1VRc1lVRkJZVVVzVTBGQllpeExRVUV5UW5kRUxFdEJRVXNzUTBGQlRDeE5RVUZaTEVkQlFWb3NTVUZCYlVKQkxFdEJRVXNzUTBGQlRDeE5RVUZaTEVkQlFURkVMRU5CUVVvc1JVRkJiMFU3UVVGRGJFVXhSRHRCUVVORU8wRkJRMFk3UVVGRFJpeEhRVFZDUkRzN1FVRTRRa0VzVTBGQlR5eEZRVUZEUVN4clFrRkJSQ3hGUVVGWFF5eHJRa0ZCV0N4RlFVRlFPMEZCUTBRaUxDSm1hV3hsSWpvaWJXVnlaMlV1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2UzTjBjblZqZEhWeVpXUlFZWFJqYUgwZ1puSnZiU0FuTGk5amNtVmhkR1VuTzF4dWFXMXdiM0owSUh0d1lYSnpaVkJoZEdOb2ZTQm1jbTl0SUNjdUwzQmhjbk5sSnp0Y2JseHVhVzF3YjNKMElIdGhjbkpoZVVWeGRXRnNMQ0JoY25KaGVWTjBZWEowYzFkcGRHaDlJR1p5YjIwZ0p5NHVMM1YwYVd3dllYSnlZWGtuTzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyRnNZMHhwYm1WRGIzVnVkQ2hvZFc1cktTQjdYRzRnSUdOdmJuTjBJSHR2YkdSTWFXNWxjeXdnYm1WM1RHbHVaWE45SUQwZ1kyRnNZMDlzWkU1bGQweHBibVZEYjNWdWRDaG9kVzVyTG14cGJtVnpLVHRjYmx4dUlDQnBaaUFvYjJ4a1RHbHVaWE1nSVQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lHaDFibXN1YjJ4a1RHbHVaWE1nUFNCdmJHUk1hVzVsY3p0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNCa1pXeGxkR1VnYUhWdWF5NXZiR1JNYVc1bGN6dGNiaUFnZlZ4dVhHNGdJR2xtSUNodVpYZE1hVzVsY3lBaFBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdhSFZ1YXk1dVpYZE1hVzVsY3lBOUlHNWxkMHhwYm1Wek8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lHUmxiR1YwWlNCb2RXNXJMbTVsZDB4cGJtVnpPMXh1SUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ0WlhKblpTaHRhVzVsTENCMGFHVnBjbk1zSUdKaGMyVXBJSHRjYmlBZ2JXbHVaU0E5SUd4dllXUlFZWFJqYUNodGFXNWxMQ0JpWVhObEtUdGNiaUFnZEdobGFYSnpJRDBnYkc5aFpGQmhkR05vS0hSb1pXbHljeXdnWW1GelpTazdYRzVjYmlBZ2JHVjBJSEpsZENBOUlIdDlPMXh1WEc0Z0lDOHZJRVp2Y2lCcGJtUmxlQ0IzWlNCcWRYTjBJR3hsZENCcGRDQndZWE56SUhSb2NtOTFaMmdnWVhNZ2FYUWdaRzlsYzI0bmRDQm9ZWFpsSUdGdWVTQnVaV05sYzNOaGNua2diV1ZoYm1sdVp5NWNiaUFnTHk4Z1RHVmhkbWx1WnlCellXNXBkSGtnWTJobFkydHpJRzl1SUhSb2FYTWdkRzhnZEdobElFRlFTU0JqYjI1emRXMWxjaUIwYUdGMElHMWhlU0JyYm05M0lHMXZjbVVnWVdKdmRYUWdkR2hsWEc0Z0lDOHZJRzFsWVc1cGJtY2dhVzRnZEdobGFYSWdiM2R1SUdOdmJuUmxlSFF1WEc0Z0lHbG1JQ2h0YVc1bExtbHVaR1Y0SUh4OElIUm9aV2x5Y3k1cGJtUmxlQ2tnZTF4dUlDQWdJSEpsZEM1cGJtUmxlQ0E5SUcxcGJtVXVhVzVrWlhnZ2ZId2dkR2hsYVhKekxtbHVaR1Y0TzF4dUlDQjlYRzVjYmlBZ2FXWWdLRzFwYm1VdWJtVjNSbWxzWlU1aGJXVWdmSHdnZEdobGFYSnpMbTVsZDBacGJHVk9ZVzFsS1NCN1hHNGdJQ0FnYVdZZ0tDRm1hV3hsVG1GdFpVTm9ZVzVuWldRb2JXbHVaU2twSUh0Y2JpQWdJQ0FnSUM4dklFNXZJR2hsWVdSbGNpQnZjaUJ1YnlCamFHRnVaMlVnYVc0Z2IzVnljeXdnZFhObElIUm9aV2x5Y3lBb1lXNWtJRzkxY25NZ2FXWWdkR2hsYVhKeklHUnZaWE1nYm05MElHVjRhWE4wS1Z4dUlDQWdJQ0FnY21WMExtOXNaRVpwYkdWT1lXMWxJRDBnZEdobGFYSnpMbTlzWkVacGJHVk9ZVzFsSUh4OElHMXBibVV1YjJ4a1JtbHNaVTVoYldVN1hHNGdJQ0FnSUNCeVpYUXVibVYzUm1sc1pVNWhiV1VnUFNCMGFHVnBjbk11Ym1WM1JtbHNaVTVoYldVZ2ZId2diV2x1WlM1dVpYZEdhV3hsVG1GdFpUdGNiaUFnSUNBZ0lISmxkQzV2YkdSSVpXRmtaWElnUFNCMGFHVnBjbk11YjJ4a1NHVmhaR1Z5SUh4OElHMXBibVV1YjJ4a1NHVmhaR1Z5TzF4dUlDQWdJQ0FnY21WMExtNWxkMGhsWVdSbGNpQTlJSFJvWldseWN5NXVaWGRJWldGa1pYSWdmSHdnYldsdVpTNXVaWGRJWldGa1pYSTdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDZ2habWxzWlU1aGJXVkRhR0Z1WjJWa0tIUm9aV2x5Y3lrcElIdGNiaUFnSUNBZ0lDOHZJRTV2SUdobFlXUmxjaUJ2Y2lCdWJ5QmphR0Z1WjJVZ2FXNGdkR2hsYVhKekxDQjFjMlVnYjNWeWMxeHVJQ0FnSUNBZ2NtVjBMbTlzWkVacGJHVk9ZVzFsSUQwZ2JXbHVaUzV2YkdSR2FXeGxUbUZ0WlR0Y2JpQWdJQ0FnSUhKbGRDNXVaWGRHYVd4bFRtRnRaU0E5SUcxcGJtVXVibVYzUm1sc1pVNWhiV1U3WEc0Z0lDQWdJQ0J5WlhRdWIyeGtTR1ZoWkdWeUlEMGdiV2x1WlM1dmJHUklaV0ZrWlhJN1hHNGdJQ0FnSUNCeVpYUXVibVYzU0dWaFpHVnlJRDBnYldsdVpTNXVaWGRJWldGa1pYSTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUM4dklFSnZkR2dnWTJoaGJtZGxaQzR1TGlCbWFXZDFjbVVnYVhRZ2IzVjBYRzRnSUNBZ0lDQnlaWFF1YjJ4a1JtbHNaVTVoYldVZ1BTQnpaV3hsWTNSR2FXVnNaQ2h5WlhRc0lHMXBibVV1YjJ4a1JtbHNaVTVoYldVc0lIUm9aV2x5Y3k1dmJHUkdhV3hsVG1GdFpTazdYRzRnSUNBZ0lDQnlaWFF1Ym1WM1JtbHNaVTVoYldVZ1BTQnpaV3hsWTNSR2FXVnNaQ2h5WlhRc0lHMXBibVV1Ym1WM1JtbHNaVTVoYldVc0lIUm9aV2x5Y3k1dVpYZEdhV3hsVG1GdFpTazdYRzRnSUNBZ0lDQnlaWFF1YjJ4a1NHVmhaR1Z5SUQwZ2MyVnNaV04wUm1sbGJHUW9jbVYwTENCdGFXNWxMbTlzWkVobFlXUmxjaXdnZEdobGFYSnpMbTlzWkVobFlXUmxjaWs3WEc0Z0lDQWdJQ0J5WlhRdWJtVjNTR1ZoWkdWeUlEMGdjMlZzWldOMFJtbGxiR1FvY21WMExDQnRhVzVsTG01bGQwaGxZV1JsY2l3Z2RHaGxhWEp6TG01bGQwaGxZV1JsY2lrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NtVjBMbWgxYm10eklEMGdXMTA3WEc1Y2JpQWdiR1YwSUcxcGJtVkpibVJsZUNBOUlEQXNYRzRnSUNBZ0lDQjBhR1ZwY25OSmJtUmxlQ0E5SURBc1hHNGdJQ0FnSUNCdGFXNWxUMlptYzJWMElEMGdNQ3hjYmlBZ0lDQWdJSFJvWldseWMwOW1abk5sZENBOUlEQTdYRzVjYmlBZ2QyaHBiR1VnS0cxcGJtVkpibVJsZUNBOElHMXBibVV1YUhWdWEzTXViR1Z1WjNSb0lIeDhJSFJvWldseWMwbHVaR1Y0SUR3Z2RHaGxhWEp6TG1oMWJtdHpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lHeGxkQ0J0YVc1bFEzVnljbVZ1ZENBOUlHMXBibVV1YUhWdWEzTmJiV2x1WlVsdVpHVjRYU0I4ZkNCN2IyeGtVM1JoY25RNklFbHVabWx1YVhSNWZTeGNiaUFnSUNBZ0lDQWdkR2hsYVhKelEzVnljbVZ1ZENBOUlIUm9aV2x5Y3k1b2RXNXJjMXQwYUdWcGNuTkpibVJsZUYwZ2ZId2dlMjlzWkZOMFlYSjBPaUJKYm1acGJtbDBlWDA3WEc1Y2JpQWdJQ0JwWmlBb2FIVnVhMEpsWm05eVpTaHRhVzVsUTNWeWNtVnVkQ3dnZEdobGFYSnpRM1Z5Y21WdWRDa3BJSHRjYmlBZ0lDQWdJQzh2SUZSb2FYTWdjR0YwWTJnZ1pHOWxjeUJ1YjNRZ2IzWmxjbXhoY0NCM2FYUm9JR0Z1ZVNCdlppQjBhR1VnYjNSb1pYSnpMQ0I1WVhrdVhHNGdJQ0FnSUNCeVpYUXVhSFZ1YTNNdWNIVnphQ2hqYkc5dVpVaDFibXNvYldsdVpVTjFjbkpsYm5Rc0lHMXBibVZQWm1aelpYUXBLVHRjYmlBZ0lDQWdJRzFwYm1WSmJtUmxlQ3NyTzF4dUlDQWdJQ0FnZEdobGFYSnpUMlptYzJWMElDczlJRzFwYm1WRGRYSnlaVzUwTG01bGQweHBibVZ6SUMwZ2JXbHVaVU4xY25KbGJuUXViMnhrVEdsdVpYTTdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaG9kVzVyUW1WbWIzSmxLSFJvWldseWMwTjFjbkpsYm5Rc0lHMXBibVZEZFhKeVpXNTBLU2tnZTF4dUlDQWdJQ0FnTHk4Z1ZHaHBjeUJ3WVhSamFDQmtiMlZ6SUc1dmRDQnZkbVZ5YkdGd0lIZHBkR2dnWVc1NUlHOW1JSFJvWlNCdmRHaGxjbk1zSUhsaGVTNWNiaUFnSUNBZ0lISmxkQzVvZFc1cmN5NXdkWE5vS0dOc2IyNWxTSFZ1YXloMGFHVnBjbk5EZFhKeVpXNTBMQ0IwYUdWcGNuTlBabVp6WlhRcEtUdGNiaUFnSUNBZ0lIUm9aV2x5YzBsdVpHVjRLeXM3WEc0Z0lDQWdJQ0J0YVc1bFQyWm1jMlYwSUNzOUlIUm9aV2x5YzBOMWNuSmxiblF1Ym1WM1RHbHVaWE1nTFNCMGFHVnBjbk5EZFhKeVpXNTBMbTlzWkV4cGJtVnpPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBdkx5QlBkbVZ5YkdGd0xDQnRaWEpuWlNCaGN5QmlaWE4wSUhkbElHTmhibHh1SUNBZ0lDQWdiR1YwSUcxbGNtZGxaRWgxYm1zZ1BTQjdYRzRnSUNBZ0lDQWdJRzlzWkZOMFlYSjBPaUJOWVhSb0xtMXBiaWh0YVc1bFEzVnljbVZ1ZEM1dmJHUlRkR0Z5ZEN3Z2RHaGxhWEp6UTNWeWNtVnVkQzV2YkdSVGRHRnlkQ2tzWEc0Z0lDQWdJQ0FnSUc5c1pFeHBibVZ6T2lBd0xGeHVJQ0FnSUNBZ0lDQnVaWGRUZEdGeWREb2dUV0YwYUM1dGFXNG9iV2x1WlVOMWNuSmxiblF1Ym1WM1UzUmhjblFnS3lCdGFXNWxUMlptYzJWMExDQjBhR1ZwY25ORGRYSnlaVzUwTG05c1pGTjBZWEowSUNzZ2RHaGxhWEp6VDJabWMyVjBLU3hjYmlBZ0lDQWdJQ0FnYm1WM1RHbHVaWE02SURBc1hHNGdJQ0FnSUNBZ0lHeHBibVZ6T2lCYlhWeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lHMWxjbWRsVEdsdVpYTW9iV1Z5WjJWa1NIVnVheXdnYldsdVpVTjFjbkpsYm5RdWIyeGtVM1JoY25Rc0lHMXBibVZEZFhKeVpXNTBMbXhwYm1WekxDQjBhR1ZwY25ORGRYSnlaVzUwTG05c1pGTjBZWEowTENCMGFHVnBjbk5EZFhKeVpXNTBMbXhwYm1WektUdGNiaUFnSUNBZ0lIUm9aV2x5YzBsdVpHVjRLeXM3WEc0Z0lDQWdJQ0J0YVc1bFNXNWtaWGdyS3p0Y2JseHVJQ0FnSUNBZ2NtVjBMbWgxYm10ekxuQjFjMmdvYldWeVoyVmtTSFZ1YXlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUhKbGREdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2JHOWhaRkJoZEdOb0tIQmhjbUZ0TENCaVlYTmxLU0I3WEc0Z0lHbG1JQ2gwZVhCbGIyWWdjR0Z5WVcwZ1BUMDlJQ2R6ZEhKcGJtY25LU0I3WEc0Z0lDQWdhV1lnS0M5ZVFFQXZiUzUwWlhOMEtIQmhjbUZ0S1NCOGZDQW9MMTVKYm1SbGVEb3ZiUzUwWlhOMEtIQmhjbUZ0S1NrcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCd1lYSnpaVkJoZEdOb0tIQmhjbUZ0S1Zzd1hUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9JV0poYzJVcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblRYVnpkQ0J3Y205MmFXUmxJR0VnWW1GelpTQnlaV1psY21WdVkyVWdiM0lnY0dGemN5QnBiaUJoSUhCaGRHTm9KeWs3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCemRISjFZM1IxY21Wa1VHRjBZMmdvZFc1a1pXWnBibVZrTENCMWJtUmxabWx1WldRc0lHSmhjMlVzSUhCaGNtRnRLVHRjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJ3WVhKaGJUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1ptbHNaVTVoYldWRGFHRnVaMlZrS0hCaGRHTm9LU0I3WEc0Z0lISmxkSFZ5YmlCd1lYUmphQzV1WlhkR2FXeGxUbUZ0WlNBbUppQndZWFJqYUM1dVpYZEdhV3hsVG1GdFpTQWhQVDBnY0dGMFkyZ3ViMnhrUm1sc1pVNWhiV1U3WEc1OVhHNWNibVoxYm1OMGFXOXVJSE5sYkdWamRFWnBaV3hrS0dsdVpHVjRMQ0J0YVc1bExDQjBhR1ZwY25NcElIdGNiaUFnYVdZZ0tHMXBibVVnUFQwOUlIUm9aV2x5Y3lrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ0YVc1bE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lHbHVaR1Y0TG1OdmJtWnNhV04wSUQwZ2RISjFaVHRjYmlBZ0lDQnlaWFIxY200Z2UyMXBibVVzSUhSb1pXbHljMzA3WEc0Z0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z2FIVnVhMEpsWm05eVpTaDBaWE4wTENCamFHVmpheWtnZTF4dUlDQnlaWFIxY200Z2RHVnpkQzV2YkdSVGRHRnlkQ0E4SUdOb1pXTnJMbTlzWkZOMFlYSjBYRzRnSUNBZ0ppWWdLSFJsYzNRdWIyeGtVM1JoY25RZ0t5QjBaWE4wTG05c1pFeHBibVZ6S1NBOElHTm9aV05yTG05c1pGTjBZWEowTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJqYkc5dVpVaDFibXNvYUhWdWF5d2diMlptYzJWMEtTQjdYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdiMnhrVTNSaGNuUTZJR2gxYm1zdWIyeGtVM1JoY25Rc0lHOXNaRXhwYm1Wek9pQm9kVzVyTG05c1pFeHBibVZ6TEZ4dUlDQWdJRzVsZDFOMFlYSjBPaUJvZFc1ckxtNWxkMU4wWVhKMElDc2diMlptYzJWMExDQnVaWGRNYVc1bGN6b2dhSFZ1YXk1dVpYZE1hVzVsY3l4Y2JpQWdJQ0JzYVc1bGN6b2dhSFZ1YXk1c2FXNWxjMXh1SUNCOU8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCdFpYSm5aVXhwYm1WektHaDFibXNzSUcxcGJtVlBabVp6WlhRc0lHMXBibVZNYVc1bGN5d2dkR2hsYVhKUFptWnpaWFFzSUhSb1pXbHlUR2x1WlhNcElIdGNiaUFnTHk4Z1ZHaHBjeUIzYVd4c0lHZGxibVZ5WVd4c2VTQnlaWE4xYkhRZ2FXNGdZU0JqYjI1bWJHbGpkR1ZrSUdoMWJtc3NJR0oxZENCMGFHVnlaU0JoY21VZ1kyRnpaWE1nZDJobGNtVWdkR2hsSUdOdmJuUmxlSFJjYmlBZ0x5OGdhWE1nZEdobElHOXViSGtnYjNabGNteGhjQ0IzYUdWeVpTQjNaU0JqWVc0Z2MzVmpZMlZ6YzJaMWJHeDVJRzFsY21kbElIUm9aU0JqYjI1MFpXNTBJR2hsY21VdVhHNGdJR3hsZENCdGFXNWxJRDBnZTI5bVpuTmxkRG9nYldsdVpVOW1abk5sZEN3Z2JHbHVaWE02SUcxcGJtVk1hVzVsY3l3Z2FXNWtaWGc2SURCOUxGeHVJQ0FnSUNBZ2RHaGxhWElnUFNCN2IyWm1jMlYwT2lCMGFHVnBjazltWm5ObGRDd2diR2x1WlhNNklIUm9aV2x5VEdsdVpYTXNJR2x1WkdWNE9pQXdmVHRjYmx4dUlDQXZMeUJJWVc1a2JHVWdZVzU1SUd4bFlXUnBibWNnWTI5dWRHVnVkRnh1SUNCcGJuTmxjblJNWldGa2FXNW5LR2gxYm1zc0lHMXBibVVzSUhSb1pXbHlLVHRjYmlBZ2FXNXpaWEowVEdWaFpHbHVaeWhvZFc1ckxDQjBhR1ZwY2l3Z2JXbHVaU2s3WEc1Y2JpQWdMeThnVG05M0lHbHVJSFJvWlNCdmRtVnliR0Z3SUdOdmJuUmxiblF1SUZOallXNGdkR2h5YjNWbmFDQmhibVFnYzJWc1pXTjBJSFJvWlNCaVpYTjBJR05vWVc1blpYTWdabkp2YlNCbFlXTm9MbHh1SUNCM2FHbHNaU0FvYldsdVpTNXBibVJsZUNBOElHMXBibVV1YkdsdVpYTXViR1Z1WjNSb0lDWW1JSFJvWldseUxtbHVaR1Y0SUR3Z2RHaGxhWEl1YkdsdVpYTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ2JHVjBJRzFwYm1WRGRYSnlaVzUwSUQwZ2JXbHVaUzVzYVc1bGMxdHRhVzVsTG1sdVpHVjRYU3hjYmlBZ0lDQWdJQ0FnZEdobGFYSkRkWEp5Wlc1MElEMGdkR2hsYVhJdWJHbHVaWE5iZEdobGFYSXVhVzVrWlhoZE8xeHVYRzRnSUNBZ2FXWWdLQ2h0YVc1bFEzVnljbVZ1ZEZzd1hTQTlQVDBnSnkwbklIeDhJRzFwYm1WRGRYSnlaVzUwV3pCZElEMDlQU0FuS3ljcFhHNGdJQ0FnSUNBZ0lDWW1JQ2gwYUdWcGNrTjFjbkpsYm5SYk1GMGdQVDA5SUNjdEp5QjhmQ0IwYUdWcGNrTjFjbkpsYm5SYk1GMGdQVDA5SUNjckp5a3BJSHRjYmlBZ0lDQWdJQzh2SUVKdmRHZ2diVzlrYVdacFpXUWdMaTR1WEc0Z0lDQWdJQ0J0ZFhSMVlXeERhR0Z1WjJVb2FIVnVheXdnYldsdVpTd2dkR2hsYVhJcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2JXbHVaVU4xY25KbGJuUmJNRjBnUFQwOUlDY3JKeUFtSmlCMGFHVnBja04xY25KbGJuUmJNRjBnUFQwOUlDY2dKeWtnZTF4dUlDQWdJQ0FnTHk4Z1RXbHVaU0JwYm5ObGNuUmxaRnh1SUNBZ0lDQWdhSFZ1YXk1c2FXNWxjeTV3ZFhOb0tDNHVMaUJqYjJ4c1pXTjBRMmhoYm1kbEtHMXBibVVwS1R0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0hSb1pXbHlRM1Z5Y21WdWRGc3dYU0E5UFQwZ0p5c25JQ1ltSUcxcGJtVkRkWEp5Wlc1MFd6QmRJRDA5UFNBbklDY3BJSHRjYmlBZ0lDQWdJQzh2SUZSb1pXbHljeUJwYm5ObGNuUmxaRnh1SUNBZ0lDQWdhSFZ1YXk1c2FXNWxjeTV3ZFhOb0tDNHVMaUJqYjJ4c1pXTjBRMmhoYm1kbEtIUm9aV2x5S1NrN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNodGFXNWxRM1Z5Y21WdWRGc3dYU0E5UFQwZ0p5MG5JQ1ltSUhSb1pXbHlRM1Z5Y21WdWRGc3dYU0E5UFQwZ0p5QW5LU0I3WEc0Z0lDQWdJQ0F2THlCTmFXNWxJSEpsYlc5MlpXUWdiM0lnWldScGRHVmtYRzRnSUNBZ0lDQnlaVzF2ZG1Gc0tHaDFibXNzSUcxcGJtVXNJSFJvWldseUtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUm9aV2x5UTNWeWNtVnVkRnN3WFNBOVBUMGdKeTBuSUNZbUlHMXBibVZEZFhKeVpXNTBXekJkSUQwOVBTQW5JQ2NwSUh0Y2JpQWdJQ0FnSUM4dklGUm9aV2x5SUhKbGJXOTJaV1FnYjNJZ1pXUnBkR1ZrWEc0Z0lDQWdJQ0J5WlcxdmRtRnNLR2gxYm1zc0lIUm9aV2x5TENCdGFXNWxMQ0IwY25WbEtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHMXBibVZEZFhKeVpXNTBJRDA5UFNCMGFHVnBja04xY25KbGJuUXBJSHRjYmlBZ0lDQWdJQzh2SUVOdmJuUmxlSFFnYVdSbGJuUnBkSGxjYmlBZ0lDQWdJR2gxYm1zdWJHbHVaWE11Y0hWemFDaHRhVzVsUTNWeWNtVnVkQ2s3WEc0Z0lDQWdJQ0J0YVc1bExtbHVaR1Y0S3lzN1hHNGdJQ0FnSUNCMGFHVnBjaTVwYm1SbGVDc3JPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBdkx5QkRiMjUwWlhoMElHMXBjMjFoZEdOb1hHNGdJQ0FnSUNCamIyNW1iR2xqZENob2RXNXJMQ0JqYjJ4c1pXTjBRMmhoYm1kbEtHMXBibVVwTENCamIyeHNaV04wUTJoaGJtZGxLSFJvWldseUtTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdMeThnVG05M0lIQjFjMmdnWVc1NWRHaHBibWNnZEdoaGRDQnRZWGtnWW1VZ2NtVnRZV2x1YVc1blhHNGdJR2x1YzJWeWRGUnlZV2xzYVc1bktHaDFibXNzSUcxcGJtVXBPMXh1SUNCcGJuTmxjblJVY21GcGJHbHVaeWhvZFc1ckxDQjBhR1ZwY2lrN1hHNWNiaUFnWTJGc1kweHBibVZEYjNWdWRDaG9kVzVyS1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYlhWMGRXRnNRMmhoYm1kbEtHaDFibXNzSUcxcGJtVXNJSFJvWldseUtTQjdYRzRnSUd4bGRDQnRlVU5vWVc1blpYTWdQU0JqYjJ4c1pXTjBRMmhoYm1kbEtHMXBibVVwTEZ4dUlDQWdJQ0FnZEdobGFYSkRhR0Z1WjJWeklEMGdZMjlzYkdWamRFTm9ZVzVuWlNoMGFHVnBjaWs3WEc1Y2JpQWdhV1lnS0dGc2JGSmxiVzkyWlhNb2JYbERhR0Z1WjJWektTQW1KaUJoYkd4U1pXMXZkbVZ6S0hSb1pXbHlRMmhoYm1kbGN5a3BJSHRjYmlBZ0lDQXZMeUJUY0dWamFXRnNJR05oYzJVZ1ptOXlJSEpsYlc5MlpTQmphR0Z1WjJWeklIUm9ZWFFnWVhKbElITjFjR1Z5YzJWMGN5QnZaaUJ2Ym1VZ1lXNXZkR2hsY2x4dUlDQWdJR2xtSUNoaGNuSmhlVk4wWVhKMGMxZHBkR2dvYlhsRGFHRnVaMlZ6TENCMGFHVnBja05vWVc1blpYTXBYRzRnSUNBZ0lDQWdJQ1ltSUhOcmFYQlNaVzF2ZG1WVGRYQmxjbk5sZENoMGFHVnBjaXdnYlhsRGFHRnVaMlZ6TENCdGVVTm9ZVzVuWlhNdWJHVnVaM1JvSUMwZ2RHaGxhWEpEYUdGdVoyVnpMbXhsYm1kMGFDa3BJSHRjYmlBZ0lDQWdJR2gxYm1zdWJHbHVaWE11Y0hWemFDZ3VMaTRnYlhsRGFHRnVaMlZ6S1R0Y2JpQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR0Z5Y21GNVUzUmhjblJ6VjJsMGFDaDBhR1ZwY2tOb1lXNW5aWE1zSUcxNVEyaGhibWRsY3lsY2JpQWdJQ0FnSUNBZ0ppWWdjMnRwY0ZKbGJXOTJaVk4xY0dWeWMyVjBLRzFwYm1Vc0lIUm9aV2x5UTJoaGJtZGxjeXdnZEdobGFYSkRhR0Z1WjJWekxteGxibWQwYUNBdElHMTVRMmhoYm1kbGN5NXNaVzVuZEdncEtTQjdYRzRnSUNBZ0lDQm9kVzVyTG14cGJtVnpMbkIxYzJnb0xpNHVJSFJvWldseVEyaGhibWRsY3lrN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1SUNCOUlHVnNjMlVnYVdZZ0tHRnljbUY1UlhGMVlXd29iWGxEYUdGdVoyVnpMQ0IwYUdWcGNrTm9ZVzVuWlhNcEtTQjdYRzRnSUNBZ2FIVnVheTVzYVc1bGN5NXdkWE5vS0M0dUxpQnRlVU5vWVc1blpYTXBPMXh1SUNBZ0lISmxkSFZ5Ymp0Y2JpQWdmVnh1WEc0Z0lHTnZibVpzYVdOMEtHaDFibXNzSUcxNVEyaGhibWRsY3l3Z2RHaGxhWEpEYUdGdVoyVnpLVHRjYm4xY2JseHVablZ1WTNScGIyNGdjbVZ0YjNaaGJDaG9kVzVyTENCdGFXNWxMQ0IwYUdWcGNpd2djM2RoY0NrZ2UxeHVJQ0JzWlhRZ2JYbERhR0Z1WjJWeklEMGdZMjlzYkdWamRFTm9ZVzVuWlNodGFXNWxLU3hjYmlBZ0lDQWdJSFJvWldseVEyaGhibWRsY3lBOUlHTnZiR3hsWTNSRGIyNTBaWGgwS0hSb1pXbHlMQ0J0ZVVOb1lXNW5aWE1wTzF4dUlDQnBaaUFvZEdobGFYSkRhR0Z1WjJWekxtMWxjbWRsWkNrZ2UxeHVJQ0FnSUdoMWJtc3ViR2x1WlhNdWNIVnphQ2d1TGk0Z2RHaGxhWEpEYUdGdVoyVnpMbTFsY21kbFpDazdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdZMjl1Wm14cFkzUW9hSFZ1YXl3Z2MzZGhjQ0EvSUhSb1pXbHlRMmhoYm1kbGN5QTZJRzE1UTJoaGJtZGxjeXdnYzNkaGNDQS9JRzE1UTJoaGJtZGxjeUE2SUhSb1pXbHlRMmhoYm1kbGN5azdYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnWTI5dVpteHBZM1FvYUhWdWF5d2diV2x1WlN3Z2RHaGxhWElwSUh0Y2JpQWdhSFZ1YXk1amIyNW1iR2xqZENBOUlIUnlkV1U3WEc0Z0lHaDFibXN1YkdsdVpYTXVjSFZ6YUNoN1hHNGdJQ0FnWTI5dVpteHBZM1E2SUhSeWRXVXNYRzRnSUNBZ2JXbHVaVG9nYldsdVpTeGNiaUFnSUNCMGFHVnBjbk02SUhSb1pXbHlYRzRnSUgwcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCcGJuTmxjblJNWldGa2FXNW5LR2gxYm1zc0lHbHVjMlZ5ZEN3Z2RHaGxhWElwSUh0Y2JpQWdkMmhwYkdVZ0tHbHVjMlZ5ZEM1dlptWnpaWFFnUENCMGFHVnBjaTV2Wm1aelpYUWdKaVlnYVc1elpYSjBMbWx1WkdWNElEd2dhVzV6WlhKMExteHBibVZ6TG14bGJtZDBhQ2tnZTF4dUlDQWdJR3hsZENCc2FXNWxJRDBnYVc1elpYSjBMbXhwYm1WelcybHVjMlZ5ZEM1cGJtUmxlQ3NyWFR0Y2JpQWdJQ0JvZFc1ckxteHBibVZ6TG5CMWMyZ29iR2x1WlNrN1hHNGdJQ0FnYVc1elpYSjBMbTltWm5ObGRDc3JPMXh1SUNCOVhHNTlYRzVtZFc1amRHbHZiaUJwYm5ObGNuUlVjbUZwYkdsdVp5aG9kVzVyTENCcGJuTmxjblFwSUh0Y2JpQWdkMmhwYkdVZ0tHbHVjMlZ5ZEM1cGJtUmxlQ0E4SUdsdWMyVnlkQzVzYVc1bGN5NXNaVzVuZEdncElIdGNiaUFnSUNCc1pYUWdiR2x1WlNBOUlHbHVjMlZ5ZEM1c2FXNWxjMXRwYm5ObGNuUXVhVzVrWlhncksxMDdYRzRnSUNBZ2FIVnVheTVzYVc1bGN5NXdkWE5vS0d4cGJtVXBPMXh1SUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUdOdmJHeGxZM1JEYUdGdVoyVW9jM1JoZEdVcElIdGNiaUFnYkdWMElISmxkQ0E5SUZ0ZExGeHVJQ0FnSUNBZ2IzQmxjbUYwYVc5dUlEMGdjM1JoZEdVdWJHbHVaWE5iYzNSaGRHVXVhVzVrWlhoZFd6QmRPMXh1SUNCM2FHbHNaU0FvYzNSaGRHVXVhVzVrWlhnZ1BDQnpkR0YwWlM1c2FXNWxjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQnNaWFFnYkdsdVpTQTlJSE4wWVhSbExteHBibVZ6VzNOMFlYUmxMbWx1WkdWNFhUdGNibHh1SUNBZ0lDOHZJRWR5YjNWd0lHRmtaR2wwYVc5dWN5QjBhR0YwSUdGeVpTQnBiVzFsWkdsaGRHVnNlU0JoWm5SbGNpQnpkV0owY21GamRHbHZibk1nWVc1a0lIUnlaV0YwSUhSb1pXMGdZWE1nYjI1bElGd2lZWFJ2YldsalhDSWdiVzlrYVdaNUlHTm9ZVzVuWlM1Y2JpQWdJQ0JwWmlBb2IzQmxjbUYwYVc5dUlEMDlQU0FuTFNjZ0ppWWdiR2x1WlZzd1hTQTlQVDBnSnlzbktTQjdYRzRnSUNBZ0lDQnZjR1Z5WVhScGIyNGdQU0FuS3ljN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHOXdaWEpoZEdsdmJpQTlQVDBnYkdsdVpWc3dYU2tnZTF4dUlDQWdJQ0FnY21WMExuQjFjMmdvYkdsdVpTazdYRzRnSUNBZ0lDQnpkR0YwWlM1cGJtUmxlQ3NyTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnY21WME8xeHVmVnh1Wm5WdVkzUnBiMjRnWTI5c2JHVmpkRU52Ym5SbGVIUW9jM1JoZEdVc0lHMWhkR05vUTJoaGJtZGxjeWtnZTF4dUlDQnNaWFFnWTJoaGJtZGxjeUE5SUZ0ZExGeHVJQ0FnSUNBZ2JXVnlaMlZrSUQwZ1cxMHNYRzRnSUNBZ0lDQnRZWFJqYUVsdVpHVjRJRDBnTUN4Y2JpQWdJQ0FnSUdOdmJuUmxlSFJEYUdGdVoyVnpJRDBnWm1Gc2MyVXNYRzRnSUNBZ0lDQmpiMjVtYkdsamRHVmtJRDBnWm1Gc2MyVTdYRzRnSUhkb2FXeGxJQ2h0WVhSamFFbHVaR1Y0SUR3Z2JXRjBZMmhEYUdGdVoyVnpMbXhsYm1kMGFGeHVJQ0FnSUNBZ0lDQW1KaUJ6ZEdGMFpTNXBibVJsZUNBOElITjBZWFJsTG14cGJtVnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lHeGxkQ0JqYUdGdVoyVWdQU0J6ZEdGMFpTNXNhVzVsYzF0emRHRjBaUzVwYm1SbGVGMHNYRzRnSUNBZ0lDQWdJRzFoZEdOb0lEMGdiV0YwWTJoRGFHRnVaMlZ6VzIxaGRHTm9TVzVrWlhoZE8xeHVYRzRnSUNBZ0x5OGdUMjVqWlNCM1pTZDJaU0JvYVhRZ2IzVnlJR0ZrWkN3Z2RHaGxiaUIzWlNCaGNtVWdaRzl1WlZ4dUlDQWdJR2xtSUNodFlYUmphRnN3WFNBOVBUMGdKeXNuS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjUwWlhoMFEyaGhibWRsY3lBOUlHTnZiblJsZUhSRGFHRnVaMlZ6SUh4OElHTm9ZVzVuWlZzd1hTQWhQVDBnSnlBbk8xeHVYRzRnSUNBZ2JXVnlaMlZrTG5CMWMyZ29iV0YwWTJncE8xeHVJQ0FnSUcxaGRHTm9TVzVrWlhnckt6dGNibHh1SUNBZ0lDOHZJRU52Ym5OMWJXVWdZVzU1SUdGa1pHbDBhVzl1Y3lCcGJpQjBhR1VnYjNSb1pYSWdZbXh2WTJzZ1lYTWdZU0JqYjI1bWJHbGpkQ0IwYnlCaGRIUmxiWEIwWEc0Z0lDQWdMeThnZEc4Z2NIVnNiQ0JwYmlCMGFHVWdjbVZ0WVdsdWFXNW5JR052Ym5SbGVIUWdZV1owWlhJZ2RHaHBjMXh1SUNBZ0lHbG1JQ2hqYUdGdVoyVmJNRjBnUFQwOUlDY3JKeWtnZTF4dUlDQWdJQ0FnWTI5dVpteHBZM1JsWkNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0FnSUhkb2FXeGxJQ2hqYUdGdVoyVmJNRjBnUFQwOUlDY3JKeWtnZTF4dUlDQWdJQ0FnSUNCamFHRnVaMlZ6TG5CMWMyZ29ZMmhoYm1kbEtUdGNiaUFnSUNBZ0lDQWdZMmhoYm1kbElEMGdjM1JoZEdVdWJHbHVaWE5iS3l0emRHRjBaUzVwYm1SbGVGMDdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzFoZEdOb0xuTjFZbk4wY2lneEtTQTlQVDBnWTJoaGJtZGxMbk4xWW5OMGNpZ3hLU2tnZTF4dUlDQWdJQ0FnWTJoaGJtZGxjeTV3ZFhOb0tHTm9ZVzVuWlNrN1hHNGdJQ0FnSUNCemRHRjBaUzVwYm1SbGVDc3JPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCamIyNW1iR2xqZEdWa0lEMGdkSEoxWlR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCcFppQW9LRzFoZEdOb1EyaGhibWRsYzF0dFlYUmphRWx1WkdWNFhTQjhmQ0FuSnlsYk1GMGdQVDA5SUNjckoxeHVJQ0FnSUNBZ0ppWWdZMjl1ZEdWNGRFTm9ZVzVuWlhNcElIdGNiaUFnSUNCamIyNW1iR2xqZEdWa0lEMGdkSEoxWlR0Y2JpQWdmVnh1WEc0Z0lHbG1JQ2hqYjI1bWJHbGpkR1ZrS1NCN1hHNGdJQ0FnY21WMGRYSnVJR05vWVc1blpYTTdYRzRnSUgxY2JseHVJQ0IzYUdsc1pTQW9iV0YwWTJoSmJtUmxlQ0E4SUcxaGRHTm9RMmhoYm1kbGN5NXNaVzVuZEdncElIdGNiaUFnSUNCdFpYSm5aV1F1Y0hWemFDaHRZWFJqYUVOb1lXNW5aWE5iYldGMFkyaEpibVJsZUNzclhTazdYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lHMWxjbWRsWkN4Y2JpQWdJQ0JqYUdGdVoyVnpYRzRnSUgwN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdGc2JGSmxiVzkyWlhNb1kyaGhibWRsY3lrZ2UxeHVJQ0J5WlhSMWNtNGdZMmhoYm1kbGN5NXlaV1IxWTJVb1puVnVZM1JwYjI0b2NISmxkaXdnWTJoaGJtZGxLU0I3WEc0Z0lDQWdjbVYwZFhKdUlIQnlaWFlnSmlZZ1kyaGhibWRsV3pCZElEMDlQU0FuTFNjN1hHNGdJSDBzSUhSeWRXVXBPMXh1ZlZ4dVpuVnVZM1JwYjI0Z2MydHBjRkpsYlc5MlpWTjFjR1Z5YzJWMEtITjBZWFJsTENCeVpXMXZkbVZEYUdGdVoyVnpMQ0JrWld4MFlTa2dlMXh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHUmxiSFJoT3lCcEt5c3BJSHRjYmlBZ0lDQnNaWFFnWTJoaGJtZGxRMjl1ZEdWdWRDQTlJSEpsYlc5MlpVTm9ZVzVuWlhOYmNtVnRiM1psUTJoaGJtZGxjeTVzWlc1bmRHZ2dMU0JrWld4MFlTQXJJR2xkTG5OMVluTjBjaWd4S1R0Y2JpQWdJQ0JwWmlBb2MzUmhkR1V1YkdsdVpYTmJjM1JoZEdVdWFXNWtaWGdnS3lCcFhTQWhQVDBnSnlBbklDc2dZMmhoYm1kbFEyOXVkR1Z1ZENrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSE4wWVhSbExtbHVaR1Y0SUNzOUlHUmxiSFJoTzF4dUlDQnlaWFIxY200Z2RISjFaVHRjYm4xY2JseHVablZ1WTNScGIyNGdZMkZzWTA5c1pFNWxkMHhwYm1WRGIzVnVkQ2hzYVc1bGN5a2dlMXh1SUNCc1pYUWdiMnhrVEdsdVpYTWdQU0F3TzF4dUlDQnNaWFFnYm1WM1RHbHVaWE1nUFNBd08xeHVYRzRnSUd4cGJtVnpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9iR2x1WlNrZ2UxeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2JHbHVaU0FoUFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lHeGxkQ0J0ZVVOdmRXNTBJRDBnWTJGc1kwOXNaRTVsZDB4cGJtVkRiM1Z1ZENoc2FXNWxMbTFwYm1VcE8xeHVJQ0FnSUNBZ2JHVjBJSFJvWldseVEyOTFiblFnUFNCallXeGpUMnhrVG1WM1RHbHVaVU52ZFc1MEtHeHBibVV1ZEdobGFYSnpLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHOXNaRXhwYm1WeklDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLRzE1UTI5MWJuUXViMnhrVEdsdVpYTWdQVDA5SUhSb1pXbHlRMjkxYm5RdWIyeGtUR2x1WlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0J2YkdSTWFXNWxjeUFyUFNCdGVVTnZkVzUwTG05c1pFeHBibVZ6TzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lHOXNaRXhwYm1WeklEMGdkVzVrWldacGJtVmtPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdsbUlDaHVaWGRNYVc1bGN5QWhQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h0ZVVOdmRXNTBMbTVsZDB4cGJtVnpJRDA5UFNCMGFHVnBja052ZFc1MExtNWxkMHhwYm1WektTQjdYRzRnSUNBZ0lDQWdJQ0FnYm1WM1RHbHVaWE1nS3owZ2JYbERiM1Z1ZEM1dVpYZE1hVzVsY3p0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQnVaWGRNYVc1bGN5QTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnBaaUFvYm1WM1RHbHVaWE1nSVQwOUlIVnVaR1ZtYVc1bFpDQW1KaUFvYkdsdVpWc3dYU0E5UFQwZ0p5c25JSHg4SUd4cGJtVmJNRjBnUFQwOUlDY2dKeWtwSUh0Y2JpQWdJQ0FnSUNBZ2JtVjNUR2x1WlhNckt6dGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2h2YkdSTWFXNWxjeUFoUFQwZ2RXNWtaV1pwYm1Wa0lDWW1JQ2hzYVc1bFd6QmRJRDA5UFNBbkxTY2dmSHdnYkdsdVpWc3dYU0E5UFQwZ0p5QW5LU2tnZTF4dUlDQWdJQ0FnSUNCdmJHUk1hVzVsY3lzck8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmU2s3WEc1Y2JpQWdjbVYwZFhKdUlIdHZiR1JNYVc1bGN5d2dibVYzVEdsdVpYTjlPMXh1ZlZ4dUlsMTlcblxuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3N0cnVjdHVyZWRQYXRjaCA9IHN0cnVjdHVyZWRQYXRjaDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY3JlYXRlVHdvRmlsZXNQYXRjaCA9IGNyZWF0ZVR3b0ZpbGVzUGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NyZWF0ZVBhdGNoID0gY3JlYXRlUGF0Y2g7XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fbGluZSA9IF9fd2VicGFja19yZXF1aXJlX18oNSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2Z1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovZnVuY3Rpb24gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG5cdCAgaWYgKCFvcHRpb25zKSB7XG5cdCAgICBvcHRpb25zID0ge307XG5cdCAgfVxuXHQgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuXHQgICAgb3B0aW9ucy5jb250ZXh0ID0gNDtcblx0ICB9XG5cblx0ICB2YXIgZGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX2xpbmUuZGlmZkxpbmVzKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG5cdCAgZGlmZi5wdXNoKHsgdmFsdWU6ICcnLCBsaW5lczogW10gfSk7IC8vIEFwcGVuZCBhbiBlbXB0eSB2YWx1ZSB0byBtYWtlIGNsZWFudXAgZWFzaWVyXG5cblx0ICBmdW5jdGlvbiBjb250ZXh0TGluZXMobGluZXMpIHtcblx0ICAgIHJldHVybiBsaW5lcy5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7XG5cdCAgICAgIHJldHVybiAnICcgKyBlbnRyeTtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIHZhciBodW5rcyA9IFtdO1xuXHQgIHZhciBvbGRSYW5nZVN0YXJ0ID0gMCxcblx0ICAgICAgbmV3UmFuZ2VTdGFydCA9IDAsXG5cdCAgICAgIGN1clJhbmdlID0gW10sXG5cdCAgICAgIG9sZExpbmUgPSAxLFxuXHQgICAgICBuZXdMaW5lID0gMTtcblxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9pKSB7XG5cdCAgICB2YXIgY3VycmVudCA9IGRpZmZbaV0sXG5cdCAgICAgICAgbGluZXMgPSBjdXJyZW50LmxpbmVzIHx8IGN1cnJlbnQudmFsdWUucmVwbGFjZSgvXFxuJC8sICcnKS5zcGxpdCgnXFxuJyk7XG5cdCAgICBjdXJyZW50LmxpbmVzID0gbGluZXM7XG5cblx0ICAgIGlmIChjdXJyZW50LmFkZGVkIHx8IGN1cnJlbnQucmVtb3ZlZCkge1xuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9jdXJSYW5nZTtcblxuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvLyBJZiB3ZSBoYXZlIHByZXZpb3VzIGNvbnRleHQsIHN0YXJ0IHdpdGggdGhhdFxuXHQgICAgICBpZiAoIW9sZFJhbmdlU3RhcnQpIHtcblx0ICAgICAgICB2YXIgcHJldiA9IGRpZmZbaSAtIDFdO1xuXHQgICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuXHQgICAgICAgIG5ld1JhbmdlU3RhcnQgPSBuZXdMaW5lO1xuXG5cdCAgICAgICAgaWYgKHByZXYpIHtcblx0ICAgICAgICAgIGN1clJhbmdlID0gb3B0aW9ucy5jb250ZXh0ID4gMCA/IGNvbnRleHRMaW5lcyhwcmV2LmxpbmVzLnNsaWNlKC1vcHRpb25zLmNvbnRleHQpKSA6IFtdO1xuXHQgICAgICAgICAgb2xkUmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG5cdCAgICAgICAgICBuZXdSYW5nZVN0YXJ0IC09IGN1clJhbmdlLmxlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICAvLyBPdXRwdXQgb3VyIGNoYW5nZXNcblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfY3VyUmFuZ2UgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2N1clJhbmdlKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY3VyUmFuZ2UgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovbGluZXMubWFwKGZ1bmN0aW9uIChlbnRyeSkge1xuXHQgICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcblx0ICAgICAgfSkpKTtcblxuXHQgICAgICAvLyBUcmFjayB0aGUgdXBkYXRlZCBmaWxlIHBvc2l0aW9uXG5cdCAgICAgIGlmIChjdXJyZW50LmFkZGVkKSB7XG5cdCAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG5cdCAgICAgIH1cblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIC8vIElkZW50aWNhbCBjb250ZXh0IGxpbmVzLiBUcmFjayBsaW5lIGNoYW5nZXNcblx0ICAgICAgaWYgKG9sZFJhbmdlU3RhcnQpIHtcblx0ICAgICAgICAvLyBDbG9zZSBvdXQgYW55IGNoYW5nZXMgdGhhdCBoYXZlIGJlZW4gb3V0cHV0IChvciBqb2luIG92ZXJsYXBwaW5nKVxuXHQgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPD0gb3B0aW9ucy5jb250ZXh0ICogMiAmJiBpIDwgZGlmZi5sZW5ndGggLSAyKSB7XG5cdCAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9jdXJSYW5nZTI7XG5cblx0ICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8vIE92ZXJsYXBwaW5nXG5cdCAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9jdXJSYW5nZTIgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2N1clJhbmdlKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY3VyUmFuZ2UyIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3RvQ29uc3VtYWJsZUFycmF5KCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NvbnRleHRMaW5lcyhsaW5lcykpKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfY3VyUmFuZ2UzO1xuXG5cdCAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvLyBlbmQgdGhlIHJhbmdlIGFuZCBvdXRwdXRcblx0ICAgICAgICAgIHZhciBjb250ZXh0U2l6ZSA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgb3B0aW9ucy5jb250ZXh0KTtcblx0ICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2N1clJhbmdlMyA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovY3VyUmFuZ2UpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19jdXJSYW5nZTMgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY29udGV4dExpbmVzKGxpbmVzLnNsaWNlKDAsIGNvbnRleHRTaXplKSkpKTtcblxuXHQgICAgICAgICAgdmFyIGh1bmsgPSB7XG5cdCAgICAgICAgICAgIG9sZFN0YXJ0OiBvbGRSYW5nZVN0YXJ0LFxuXHQgICAgICAgICAgICBvbGRMaW5lczogb2xkTGluZSAtIG9sZFJhbmdlU3RhcnQgKyBjb250ZXh0U2l6ZSxcblx0ICAgICAgICAgICAgbmV3U3RhcnQ6IG5ld1JhbmdlU3RhcnQsXG5cdCAgICAgICAgICAgIG5ld0xpbmVzOiBuZXdMaW5lIC0gbmV3UmFuZ2VTdGFydCArIGNvbnRleHRTaXplLFxuXHQgICAgICAgICAgICBsaW5lczogY3VyUmFuZ2Vcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgICBpZiAoaSA+PSBkaWZmLmxlbmd0aCAtIDIgJiYgbGluZXMubGVuZ3RoIDw9IG9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICAvLyBFT0YgaXMgaW5zaWRlIHRoaXMgaHVua1xuXHQgICAgICAgICAgICB2YXIgb2xkRU9GTmV3bGluZSA9IC9cXG4kLy50ZXN0KG9sZFN0cik7XG5cdCAgICAgICAgICAgIHZhciBuZXdFT0ZOZXdsaW5lID0gL1xcbiQvLnRlc3QobmV3U3RyKTtcblx0ICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PSAwICYmICFvbGRFT0ZOZXdsaW5lKSB7XG5cdCAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBvbGQgaGFzIG5vIGVvbCBhbmQgbm8gdHJhaWxpbmcgY29udGV4dDsgbm8tbmwgY2FuIGVuZCB1cCBiZWZvcmUgYWRkc1xuXHQgICAgICAgICAgICAgIGN1clJhbmdlLnNwbGljZShodW5rLm9sZExpbmVzLCAwLCAnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9sZEVPRk5ld2xpbmUgfHwgIW5ld0VPRk5ld2xpbmUpIHtcblx0ICAgICAgICAgICAgICBjdXJSYW5nZS5wdXNoKCdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgaHVua3MucHVzaChodW5rKTtcblxuXHQgICAgICAgICAgb2xkUmFuZ2VTdGFydCA9IDA7XG5cdCAgICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gMDtcblx0ICAgICAgICAgIGN1clJhbmdlID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuXHQgICAgICBuZXdMaW5lICs9IGxpbmVzLmxlbmd0aDtcblx0ICAgIH1cblx0ICB9O1xuXG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaWZmLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2xvb3AoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovaSk7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHtcblx0ICAgIG9sZEZpbGVOYW1lOiBvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWU6IG5ld0ZpbGVOYW1lLFxuXHQgICAgb2xkSGVhZGVyOiBvbGRIZWFkZXIsIG5ld0hlYWRlcjogbmV3SGVhZGVyLFxuXHQgICAgaHVua3M6IGh1bmtzXG5cdCAgfTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcblx0ICB2YXIgZGlmZiA9IHN0cnVjdHVyZWRQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucyk7XG5cblx0ICB2YXIgcmV0ID0gW107XG5cdCAgaWYgKG9sZEZpbGVOYW1lID09IG5ld0ZpbGVOYW1lKSB7XG5cdCAgICByZXQucHVzaCgnSW5kZXg6ICcgKyBvbGRGaWxlTmFtZSk7XG5cdCAgfVxuXHQgIHJldC5wdXNoKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG5cdCAgcmV0LnB1c2goJy0tLSAnICsgZGlmZi5vbGRGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5vbGRIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYub2xkSGVhZGVyKSk7XG5cdCAgcmV0LnB1c2goJysrKyAnICsgZGlmZi5uZXdGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5uZXdIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYubmV3SGVhZGVyKSk7XG5cblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmYuaHVua3MubGVuZ3RoOyBpKyspIHtcblx0ICAgIHZhciBodW5rID0gZGlmZi5odW5rc1tpXTtcblx0ICAgIHJldC5wdXNoKCdAQCAtJyArIGh1bmsub2xkU3RhcnQgKyAnLCcgKyBodW5rLm9sZExpbmVzICsgJyArJyArIGh1bmsubmV3U3RhcnQgKyAnLCcgKyBodW5rLm5ld0xpbmVzICsgJyBAQCcpO1xuXHQgICAgcmV0LnB1c2guYXBwbHkocmV0LCBodW5rLmxpbmVzKTtcblx0ICB9XG5cblx0ICByZXR1cm4gcmV0LmpvaW4oJ1xcbicpICsgJ1xcbic7XG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVQYXRjaChmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG5cdCAgcmV0dXJuIGNyZWF0ZVR3b0ZpbGVzUGF0Y2goZmlsZU5hbWUsIGZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWFJqYUM5amNtVmhkR1V1YW5NaVhTd2libUZ0WlhNaU9sc2ljM1J5ZFdOMGRYSmxaRkJoZEdOb0lpd2lZM0psWVhSbFZIZHZSbWxzWlhOUVlYUmphQ0lzSW1OeVpXRjBaVkJoZEdOb0lpd2liMnhrUm1sc1pVNWhiV1VpTENKdVpYZEdhV3hsVG1GdFpTSXNJbTlzWkZOMGNpSXNJbTVsZDFOMGNpSXNJbTlzWkVobFlXUmxjaUlzSW01bGQwaGxZV1JsY2lJc0ltOXdkR2x2Ym5NaUxDSmpiMjUwWlhoMElpd2laR2xtWmlJc0luQjFjMmdpTENKMllXeDFaU0lzSW14cGJtVnpJaXdpWTI5dWRHVjRkRXhwYm1Weklpd2liV0Z3SWl3aVpXNTBjbmtpTENKb2RXNXJjeUlzSW05c1pGSmhibWRsVTNSaGNuUWlMQ0p1WlhkU1lXNW5aVk4wWVhKMElpd2lZM1Z5VW1GdVoyVWlMQ0p2YkdSTWFXNWxJaXdpYm1WM1RHbHVaU0lzSW1raUxDSmpkWEp5Wlc1MElpd2ljbVZ3YkdGalpTSXNJbk53YkdsMElpd2lZV1JrWldRaUxDSnlaVzF2ZG1Wa0lpd2ljSEpsZGlJc0luTnNhV05sSWl3aWJHVnVaM1JvSWl3aVkyOXVkR1Y0ZEZOcGVtVWlMQ0pOWVhSb0lpd2liV2x1SWl3aWFIVnVheUlzSW05c1pGTjBZWEowSWl3aWIyeGtUR2x1WlhNaUxDSnVaWGRUZEdGeWRDSXNJbTVsZDB4cGJtVnpJaXdpYjJ4a1JVOUdUbVYzYkdsdVpTSXNJblJsYzNRaUxDSnVaWGRGVDBaT1pYZHNhVzVsSWl3aWMzQnNhV05sSWl3aWNtVjBJaXdpWVhCd2JIa2lMQ0pxYjJsdUlpd2labWxzWlU1aGJXVWlYU3dpYldGd2NHbHVaM01pT2lJN096dG5RMEZGWjBKQkxHVXNSMEZCUVVFc1pUdDVSRUZwUjBGRExHMUNMRWRCUVVGQkxHMUNPM2xFUVhkQ1FVTXNWeXhIUVVGQlFTeFhPenRCUVROSWFFSTdPenM3ZFVKQlJVOHNVMEZCVTBZc1pVRkJWQ3hEUVVGNVFrY3NWMEZCZWtJc1JVRkJjME5ETEZkQlFYUkRMRVZCUVcxRVF5eE5RVUZ1UkN4RlFVRXlSRU1zVFVGQk0wUXNSVUZCYlVWRExGTkJRVzVGTEVWQlFUaEZReXhUUVVFNVJTeEZRVUY1UmtNc1QwRkJla1lzUlVGQmEwYzdRVUZEZGtjc1RVRkJTU3hEUVVGRFFTeFBRVUZNTEVWQlFXTTdRVUZEV2tFc1kwRkJWU3hGUVVGV08wRkJRMFE3UVVGRFJDeE5RVUZKTEU5QlFVOUJMRkZCUVZGRExFOUJRV1lzUzBGQk1rSXNWMEZCTDBJc1JVRkJORU03UVVGRE1VTkVMRmxCUVZGRExFOUJRVklzUjBGQmEwSXNRMEZCYkVJN1FVRkRSRHM3UVVGRlJDeE5RVUZOUXl4UFFVRlBMSE5GUVVGVlRpeE5RVUZXTEVWQlFXdENReXhOUVVGc1FpeEZRVUV3UWtjc1QwRkJNVUlzUTBGQllqdEJRVU5CUlN4UFFVRkxReXhKUVVGTUxFTkJRVlVzUlVGQlEwTXNUMEZCVHl4RlFVRlNMRVZCUVZsRExFOUJRVThzUlVGQmJrSXNSVUZCVml4RlFWUjFSeXhEUVZOc1JUczdRVUZGY2tNc1YwRkJVME1zV1VGQlZDeERRVUZ6UWtRc1MwRkJkRUlzUlVGQk5rSTdRVUZETTBJc1YwRkJUMEVzVFVGQlRVVXNSMEZCVGl4RFFVRlZMRlZCUVZORExFdEJRVlFzUlVGQlowSTdRVUZCUlN4aFFVRlBMRTFCUVUxQkxFdEJRV0k3UVVGQmNVSXNTMEZCYWtRc1EwRkJVRHRCUVVORU96dEJRVVZFTEUxQlFVbERMRkZCUVZFc1JVRkJXanRCUVVOQkxFMUJRVWxETEdkQ1FVRm5RaXhEUVVGd1FqdEJRVUZCTEUxQlFYVkNReXhuUWtGQlowSXNRMEZCZGtNN1FVRkJRU3hOUVVFd1EwTXNWMEZCVnl4RlFVRnlSRHRCUVVGQkxFMUJRMGxETEZWQlFWVXNRMEZFWkR0QlFVRkJMRTFCUTJsQ1F5eFZRVUZWTEVOQlJETkNPenRCUVdoQ2RVY3NPRVZCYTBJNVJrTXNRMEZzUWpoR08wRkJiVUp5Unl4UlFVRk5ReXhWUVVGVlpDeExRVUZMWVN4RFFVRk1MRU5CUVdoQ08wRkJRVUVzVVVGRFRWWXNVVUZCVVZjc1VVRkJVVmdzUzBGQlVpeEpRVUZwUWxjc1VVRkJVVm9zUzBGQlVpeERRVUZqWVN4UFFVRmtMRU5CUVhOQ0xFdEJRWFJDTEVWQlFUWkNMRVZCUVRkQ0xFVkJRV2xEUXl4TFFVRnFReXhEUVVGMVF5eEpRVUYyUXl4RFFVUXZRanRCUVVWQlJpeFpRVUZSV0N4TFFVRlNMRWRCUVdkQ1FTeExRVUZvUWpzN1FVRkZRU3hSUVVGSlZ5eFJRVUZSUnl4TFFVRlNMRWxCUVdsQ1NDeFJRVUZSU1N4UFFVRTNRaXhGUVVGelF6dEJRVUZCT3p0QlFVRkJMRGhDUVVOd1F6dEJRVU5CTEZWQlFVa3NRMEZCUTFZc1lVRkJUQ3hGUVVGdlFqdEJRVU5zUWl4WlFVRk5WeXhQUVVGUGJrSXNTMEZCUzJFc1NVRkJTU3hEUVVGVUxFTkJRV0k3UVVGRFFVd3NkMEpCUVdkQ1J5eFBRVUZvUWp0QlFVTkJSaXgzUWtGQlowSkhMRTlCUVdoQ096dEJRVVZCTEZsQlFVbFBMRWxCUVVvc1JVRkJWVHRCUVVOU1ZDeHhRa0ZCVjFvc1VVRkJVVU1zVDBGQlVpeEhRVUZyUWl4RFFVRnNRaXhIUVVGelFrc3NZVUZCWVdVc1MwRkJTMmhDTEV0QlFVd3NRMEZCVjJsQ0xFdEJRVmdzUTBGQmFVSXNRMEZCUTNSQ0xGRkJRVkZETEU5QlFURkNMRU5CUVdJc1EwRkJkRUlzUjBGQmVVVXNSVUZCY0VZN1FVRkRRVk1zTWtKQlFXbENSU3hUUVVGVFZ5eE5RVUV4UWp0QlFVTkJXaXd5UWtGQmFVSkRMRk5CUVZOWExFMUJRVEZDTzBGQlEwUTdRVUZEUmpzN1FVRkZSRHRCUVVOQkxEWkZRVUZUY0VJc1NVRkJWQ3d3VEVGQmEwSkZMRTFCUVUxRkxFZEJRVTRzUTBGQlZTeFZRVUZUUXl4TFFVRlVMRVZCUVdkQ08wRkJRekZETEdWQlFVOHNRMEZCUTFFc1VVRkJVVWNzUzBGQlVpeEhRVUZuUWl4SFFVRm9RaXhIUVVGelFpeEhRVUYyUWl4SlFVRTRRbGdzUzBGQmNrTTdRVUZEUkN4UFFVWnBRaXhEUVVGc1FqczdRVUZKUVR0QlFVTkJMRlZCUVVsUkxGRkJRVkZITEV0QlFWb3NSVUZCYlVJN1FVRkRha0pNTEcxQ1FVRlhWQ3hOUVVGTmEwSXNUVUZCYWtJN1FVRkRSQ3hQUVVaRUxFMUJSVTg3UVVGRFRGWXNiVUpCUVZkU0xFMUJRVTFyUWl4TlFVRnFRanRCUVVORU8wRkJRMFlzUzBGNlFrUXNUVUY1UWs4N1FVRkRURHRCUVVOQkxGVkJRVWxpTEdGQlFVb3NSVUZCYlVJN1FVRkRha0k3UVVGRFFTeFpRVUZKVEN4TlFVRk5hMElzVFVGQlRpeEpRVUZuUW5aQ0xGRkJRVkZETEU5QlFWSXNSMEZCYTBJc1EwRkJiRU1zU1VGQmRVTmpMRWxCUVVsaUxFdEJRVXR4UWl4TlFVRk1MRWRCUVdNc1EwRkJOMFFzUlVGQlowVTdRVUZCUVRzN1FVRkJRU3hyUTBGRE9VUTdRVUZEUVN4clJrRkJVM0JDTEVsQlFWUXNNa3hCUVd0Q1J5eGhRVUZoUkN4TFFVRmlMRU5CUVd4Q08wRkJRMFFzVTBGSVJDeE5RVWRQTzBGQlFVRTdPMEZCUVVFc2EwTkJRMHc3UVVGRFFTeGpRVUZKYlVJc1kwRkJZME1zUzBGQlMwTXNSMEZCVEN4RFFVRlRja0lzVFVGQlRXdENMRTFCUVdZc1JVRkJkVUoyUWl4UlFVRlJReXhQUVVFdlFpeERRVUZzUWp0QlFVTkJMR3RHUVVGVFJTeEpRVUZVTERKTVFVRnJRa2NzWVVGQllVUXNUVUZCVFdsQ0xFdEJRVTRzUTBGQldTeERRVUZhTEVWQlFXVkZMRmRCUVdZc1EwRkJZaXhEUVVGc1FqczdRVUZGUVN4alFVRkpSeXhQUVVGUE8wRkJRMVJETEhOQ1FVRlZiRUlzWVVGRVJEdEJRVVZVYlVJc2MwSkJRVmRvUWl4VlFVRlZTQ3hoUVVGV0xFZEJRVEJDWXl4WFFVWTFRanRCUVVkVVRTeHpRa0ZCVlc1Q0xHRkJTRVE3UVVGSlZHOUNMSE5DUVVGWGFrSXNWVUZCVlVnc1lVRkJWaXhIUVVFd1FtRXNWMEZLTlVJN1FVRkxWRzVDTEcxQ1FVRlBUenRCUVV4RkxGZEJRVmc3UVVGUFFTeGpRVUZKUnl4TFFVRkxZaXhMUVVGTGNVSXNUVUZCVEN4SFFVRmpMRU5CUVc1Q0xFbEJRWGRDYkVJc1RVRkJUV3RDTEUxQlFVNHNTVUZCWjBKMlFpeFJRVUZSUXl4UFFVRndSQ3hGUVVFMlJEdEJRVU16UkR0QlFVTkJMR2RDUVVGSkswSXNaMEpCUVdsQ0xFMUJRVTFETEVsQlFVNHNRMEZCVjNKRExFMUJRVmdzUTBGQmNrSTdRVUZEUVN4blFrRkJTWE5ETEdkQ1FVRnBRaXhOUVVGTlJDeEpRVUZPTEVOQlFWZHdReXhOUVVGWUxFTkJRWEpDTzBGQlEwRXNaMEpCUVVsUkxFMUJRVTFyUWl4TlFVRk9MRWxCUVdkQ0xFTkJRV2hDTEVsQlFYRkNMRU5CUVVOVExHRkJRVEZDTEVWQlFYbERPMEZCUTNaRE8wRkJRMEZ3UWl4MVFrRkJVM1ZDTEUxQlFWUXNRMEZCWjBKU0xFdEJRVXRGTEZGQlFYSkNMRVZCUVN0Q0xFTkJRUzlDTEVWQlFXdERMRGhDUVVGc1F6dEJRVU5FTEdGQlNFUXNUVUZIVHl4SlFVRkpMRU5CUVVOSExHRkJRVVFzU1VGQmEwSXNRMEZCUTBVc1lVRkJka0lzUlVGQmMwTTdRVUZETTBOMFFpeDFRa0ZCVTFRc1NVRkJWQ3hEUVVGakxEaENRVUZrTzBGQlEwUTdRVUZEUmp0QlFVTkVUU3huUWtGQlRVNHNTVUZCVGl4RFFVRlhkMElzU1VGQldEczdRVUZGUVdwQ0xEQkNRVUZuUWl4RFFVRm9RanRCUVVOQlF5d3dRa0ZCWjBJc1EwRkJhRUk3UVVGRFFVTXNjVUpCUVZjc1JVRkJXRHRCUVVORU8wRkJRMFk3UVVGRFJFTXNhVUpCUVZkU0xFMUJRVTFyUWl4TlFVRnFRanRCUVVOQlZDeHBRa0ZCVjFRc1RVRkJUV3RDTEUxQlFXcENPMEZCUTBRN1FVRjJSbTlIT3p0QlFXdENka2NzVDBGQlN5eEpRVUZKVWl4SlFVRkpMRU5CUVdJc1JVRkJaMEpCTEVsQlFVbGlMRXRCUVV0eFFpeE5RVUY2UWl4RlFVRnBRMUlzUjBGQmFrTXNSVUZCYzBNN1FVRkJRU3d5UkVGQk4wSkJMRU5CUVRaQ08wRkJjMFZ5UXpzN1FVRkZSQ3hUUVVGUE8wRkJRMHh5UWl4cFFrRkJZVUVzVjBGRVVpeEZRVU54UWtNc1lVRkJZVUVzVjBGRWJFTTdRVUZGVEVjc1pVRkJWMEVzVTBGR1RpeEZRVVZwUWtNc1YwRkJWMEVzVTBGR05VSTdRVUZIVEZVc1YwRkJUMEU3UVVGSVJpeEhRVUZRTzBGQlMwUTdPMEZCUlUwc1UwRkJVMnBDTEcxQ1FVRlVMRU5CUVRaQ1JTeFhRVUUzUWl4RlFVRXdRME1zVjBGQk1VTXNSVUZCZFVSRExFMUJRWFpFTEVWQlFTdEVReXhOUVVFdlJDeEZRVUYxUlVNc1UwRkJka1VzUlVGQmEwWkRMRk5CUVd4R0xFVkJRVFpHUXl4UFFVRTNSaXhGUVVGelJ6dEJRVU16Unl4TlFVRk5SU3hQUVVGUFdDeG5Ra0ZCWjBKSExGZEJRV2hDTEVWQlFUWkNReXhYUVVFM1FpeEZRVUV3UTBNc1RVRkJNVU1zUlVGQmEwUkRMRTFCUVd4RUxFVkJRVEJFUXl4VFFVRXhSQ3hGUVVGeFJVTXNVMEZCY2tVc1JVRkJaMFpETEU5QlFXaEdMRU5CUVdJN08wRkJSVUVzVFVGQlRXOURMRTFCUVUwc1JVRkJXanRCUVVOQkxFMUJRVWt4UXl4bFFVRmxReXhYUVVGdVFpeEZRVUZuUXp0QlFVTTVRbmxETEZGQlFVbHFReXhKUVVGS0xFTkJRVk1zV1VGQldWUXNWMEZCY2tJN1FVRkRSRHRCUVVORU1FTXNUVUZCU1dwRExFbEJRVW9zUTBGQlV5eHhSVUZCVkR0QlFVTkJhVU1zVFVGQlNXcERMRWxCUVVvc1EwRkJVeXhUUVVGVFJDeExRVUZMVWl4WFFVRmtMRWxCUVRaQ0xFOUJRVTlSTEV0QlFVdEtMRk5CUVZvc1MwRkJNRUlzVjBGQk1VSXNSMEZCZDBNc1JVRkJlRU1zUjBGQk5rTXNUMEZCVDBrc1MwRkJTMG9zVTBGQmRFWXNRMEZCVkR0QlFVTkJjME1zVFVGQlNXcERMRWxCUVVvc1EwRkJVeXhUUVVGVFJDeExRVUZMVUN4WFFVRmtMRWxCUVRaQ0xFOUJRVTlQTEV0QlFVdElMRk5CUVZvc1MwRkJNRUlzVjBGQk1VSXNSMEZCZDBNc1JVRkJlRU1zUjBGQk5rTXNUMEZCVDBjc1MwRkJTMGdzVTBGQmRFWXNRMEZCVkRzN1FVRkZRU3hQUVVGTExFbEJRVWxuUWl4SlFVRkpMRU5CUVdJc1JVRkJaMEpCTEVsQlFVbGlMRXRCUVV0UExFdEJRVXdzUTBGQlYyTXNUVUZCTDBJc1JVRkJkVU5TTEVkQlFYWkRMRVZCUVRSRE8wRkJRekZETEZGQlFVMVpMRTlCUVU5NlFpeExRVUZMVHl4TFFVRk1MRU5CUVZkTkxFTkJRVmdzUTBGQllqdEJRVU5CY1VJc1VVRkJTV3BETEVsQlFVb3NRMEZEUlN4VFFVRlRkMElzUzBGQlMwTXNVVUZCWkN4SFFVRjVRaXhIUVVGNlFpeEhRVUVyUWtRc1MwRkJTMFVzVVVGQmNFTXNSMEZEUlN4SlFVUkdMRWRCUTFOR0xFdEJRVXRITEZGQlJHUXNSMEZEZVVJc1IwRkVla0lzUjBGREswSklMRXRCUVV0SkxGRkJSSEJETEVkQlJVVXNTMEZJU2p0QlFVdEJTeXhSUVVGSmFrTXNTVUZCU2l4RFFVRlRhME1zUzBGQlZDeERRVUZsUkN4SFFVRm1MRVZCUVc5Q1ZDeExRVUZMZEVJc1MwRkJla0k3UVVGRFJEczdRVUZGUkN4VFFVRlBLMElzU1VGQlNVVXNTVUZCU2l4RFFVRlRMRWxCUVZRc1NVRkJhVUlzU1VGQmVFSTdRVUZEUkRzN1FVRkZUU3hUUVVGVE4wTXNWMEZCVkN4RFFVRnhRamhETEZGQlFYSkNMRVZCUVN0Q00wTXNUVUZCTDBJc1JVRkJkVU5ETEUxQlFYWkRMRVZCUVN0RFF5eFRRVUV2UXl4RlFVRXdSRU1zVTBGQk1VUXNSVUZCY1VWRExFOUJRWEpGTEVWQlFUaEZPMEZCUTI1R0xGTkJRVTlTTEc5Q1FVRnZRaXRETEZGQlFYQkNMRVZCUVRoQ1FTeFJRVUU1UWl4RlFVRjNRek5ETEUxQlFYaERMRVZCUVdkRVF5eE5RVUZvUkN4RlFVRjNSRU1zVTBGQmVFUXNSVUZCYlVWRExGTkJRVzVGTEVWQlFUaEZReXhQUVVFNVJTeERRVUZRTzBGQlEwUWlMQ0ptYVd4bElqb2lZM0psWVhSbExtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHRrYVdabVRHbHVaWE45SUdaeWIyMGdKeTR1TDJScFptWXZiR2x1WlNjN1hHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnpkSEoxWTNSMWNtVmtVR0YwWTJnb2IyeGtSbWxzWlU1aGJXVXNJRzVsZDBacGJHVk9ZVzFsTENCdmJHUlRkSElzSUc1bGQxTjBjaXdnYjJ4a1NHVmhaR1Z5TENCdVpYZElaV0ZrWlhJc0lHOXdkR2x2Ym5NcElIdGNiaUFnYVdZZ0tDRnZjSFJwYjI1ektTQjdYRzRnSUNBZ2IzQjBhVzl1Y3lBOUlIdDlPMXh1SUNCOVhHNGdJR2xtSUNoMGVYQmxiMllnYjNCMGFXOXVjeTVqYjI1MFpYaDBJRDA5UFNBbmRXNWtaV1pwYm1Wa0p5a2dlMXh1SUNBZ0lHOXdkR2x2Ym5NdVkyOXVkR1Y0ZENBOUlEUTdYRzRnSUgxY2JseHVJQ0JqYjI1emRDQmthV1ptSUQwZ1pHbG1aa3hwYm1WektHOXNaRk4wY2l3Z2JtVjNVM1J5TENCdmNIUnBiMjV6S1R0Y2JpQWdaR2xtWmk1d2RYTm9LSHQyWVd4MVpUb2dKeWNzSUd4cGJtVnpPaUJiWFgwcE95QWdJQzh2SUVGd2NHVnVaQ0JoYmlCbGJYQjBlU0IyWVd4MVpTQjBieUJ0WVd0bElHTnNaV0Z1ZFhBZ1pXRnphV1Z5WEc1Y2JpQWdablZ1WTNScGIyNGdZMjl1ZEdWNGRFeHBibVZ6S0d4cGJtVnpLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHeHBibVZ6TG0xaGNDaG1kVzVqZEdsdmJpaGxiblJ5ZVNrZ2V5QnlaWFIxY200Z0p5QW5JQ3NnWlc1MGNuazdJSDBwTzF4dUlDQjlYRzVjYmlBZ2JHVjBJR2gxYm10eklEMGdXMTA3WEc0Z0lHeGxkQ0J2YkdSU1lXNW5aVk4wWVhKMElEMGdNQ3dnYm1WM1VtRnVaMlZUZEdGeWRDQTlJREFzSUdOMWNsSmhibWRsSUQwZ1cxMHNYRzRnSUNBZ0lDQnZiR1JNYVc1bElEMGdNU3dnYm1WM1RHbHVaU0E5SURFN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWkdsbVppNXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR052Ym5OMElHTjFjbkpsYm5RZ1BTQmthV1ptVzJsZExGeHVJQ0FnSUNBZ0lDQWdJR3hwYm1WeklEMGdZM1Z5Y21WdWRDNXNhVzVsY3lCOGZDQmpkWEp5Wlc1MExuWmhiSFZsTG5KbGNHeGhZMlVvTDF4Y2JpUXZMQ0FuSnlrdWMzQnNhWFFvSjF4Y2JpY3BPMXh1SUNBZ0lHTjFjbkpsYm5RdWJHbHVaWE1nUFNCc2FXNWxjenRjYmx4dUlDQWdJR2xtSUNoamRYSnlaVzUwTG1Ga1pHVmtJSHg4SUdOMWNuSmxiblF1Y21WdGIzWmxaQ2tnZTF4dUlDQWdJQ0FnTHk4Z1NXWWdkMlVnYUdGMlpTQndjbVYyYVc5MWN5QmpiMjUwWlhoMExDQnpkR0Z5ZENCM2FYUm9JSFJvWVhSY2JpQWdJQ0FnSUdsbUlDZ2hiMnhrVW1GdVoyVlRkR0Z5ZENrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd2NtVjJJRDBnWkdsbVpsdHBJQzBnTVYwN1hHNGdJQ0FnSUNBZ0lHOXNaRkpoYm1kbFUzUmhjblFnUFNCdmJHUk1hVzVsTzF4dUlDQWdJQ0FnSUNCdVpYZFNZVzVuWlZOMFlYSjBJRDBnYm1WM1RHbHVaVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9jSEpsZGlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR04xY2xKaGJtZGxJRDBnYjNCMGFXOXVjeTVqYjI1MFpYaDBJRDRnTUNBL0lHTnZiblJsZUhSTWFXNWxjeWh3Y21WMkxteHBibVZ6TG5Oc2FXTmxLQzF2Y0hScGIyNXpMbU52Ym5SbGVIUXBLU0E2SUZ0ZE8xeHVJQ0FnSUNBZ0lDQWdJRzlzWkZKaGJtZGxVM1JoY25RZ0xUMGdZM1Z5VW1GdVoyVXViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQWdJRzVsZDFKaGJtZGxVM1JoY25RZ0xUMGdZM1Z5VW1GdVoyVXViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQzh2SUU5MWRIQjFkQ0J2ZFhJZ1kyaGhibWRsYzF4dUlDQWdJQ0FnWTNWeVVtRnVaMlV1Y0hWemFDZ3VMaTRnYkdsdVpYTXViV0Z3S0daMWJtTjBhVzl1S0dWdWRISjVLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUFvWTNWeWNtVnVkQzVoWkdSbFpDQS9JQ2NySnlBNklDY3RKeWtnS3lCbGJuUnllVHRjYmlBZ0lDQWdJSDBwS1R0Y2JseHVJQ0FnSUNBZ0x5OGdWSEpoWTJzZ2RHaGxJSFZ3WkdGMFpXUWdabWxzWlNCd2IzTnBkR2x2Ymx4dUlDQWdJQ0FnYVdZZ0tHTjFjbkpsYm5RdVlXUmtaV1FwSUh0Y2JpQWdJQ0FnSUNBZ2JtVjNUR2x1WlNBclBTQnNhVzVsY3k1c1pXNW5kR2c3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0J2YkdSTWFXNWxJQ3M5SUd4cGJtVnpMbXhsYm1kMGFEdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnTHk4Z1NXUmxiblJwWTJGc0lHTnZiblJsZUhRZ2JHbHVaWE11SUZSeVlXTnJJR3hwYm1VZ1kyaGhibWRsYzF4dUlDQWdJQ0FnYVdZZ0tHOXNaRkpoYm1kbFUzUmhjblFwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdRMnh2YzJVZ2IzVjBJR0Z1ZVNCamFHRnVaMlZ6SUhSb1lYUWdhR0YyWlNCaVpXVnVJRzkxZEhCMWRDQW9iM0lnYW05cGJpQnZkbVZ5YkdGd2NHbHVaeWxjYmlBZ0lDQWdJQ0FnYVdZZ0tHeHBibVZ6TG14bGJtZDBhQ0E4UFNCdmNIUnBiMjV6TG1OdmJuUmxlSFFnS2lBeUlDWW1JR2tnUENCa2FXWm1MbXhsYm1kMGFDQXRJRElwSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJQZG1WeWJHRndjR2x1WjF4dUlDQWdJQ0FnSUNBZ0lHTjFjbEpoYm1kbExuQjFjMmdvTGk0dUlHTnZiblJsZUhSTWFXNWxjeWhzYVc1bGN5a3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUM4dklHVnVaQ0IwYUdVZ2NtRnVaMlVnWVc1a0lHOTFkSEIxZEZ4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0JqYjI1MFpYaDBVMmw2WlNBOUlFMWhkR2d1YldsdUtHeHBibVZ6TG14bGJtZDBhQ3dnYjNCMGFXOXVjeTVqYjI1MFpYaDBLVHRjYmlBZ0lDQWdJQ0FnSUNCamRYSlNZVzVuWlM1d2RYTm9LQzR1TGlCamIyNTBaWGgwVEdsdVpYTW9iR2x1WlhNdWMyeHBZMlVvTUN3Z1kyOXVkR1Y0ZEZOcGVtVXBLU2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQnNaWFFnYUhWdWF5QTlJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHOXNaRk4wWVhKME9pQnZiR1JTWVc1blpWTjBZWEowTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdiMnhrVEdsdVpYTTZJQ2h2YkdSTWFXNWxJQzBnYjJ4a1VtRnVaMlZUZEdGeWRDQXJJR052Ym5SbGVIUlRhWHBsS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVsZDFOMFlYSjBPaUJ1WlhkU1lXNW5aVk4wWVhKMExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYm1WM1RHbHVaWE02SUNodVpYZE1hVzVsSUMwZ2JtVjNVbUZ1WjJWVGRHRnlkQ0FySUdOdmJuUmxlSFJUYVhwbEtTeGNiaUFnSUNBZ0lDQWdJQ0FnSUd4cGJtVnpPaUJqZFhKU1lXNW5aVnh1SUNBZ0lDQWdJQ0FnSUgwN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0drZ1BqMGdaR2xtWmk1c1pXNW5kR2dnTFNBeUlDWW1JR3hwYm1WekxteGxibWQwYUNBOFBTQnZjSFJwYjI1ekxtTnZiblJsZUhRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklFVlBSaUJwY3lCcGJuTnBaR1VnZEdocGN5Qm9kVzVyWEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYjJ4a1JVOUdUbVYzYkdsdVpTQTlJQ2d2WEZ4dUpDOHVkR1Z6ZENodmJHUlRkSElwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCdVpYZEZUMFpPWlhkc2FXNWxJRDBnS0M5Y1hHNGtMeTUwWlhOMEtHNWxkMU4wY2lrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHeHBibVZ6TG14bGJtZDBhQ0E5UFNBd0lDWW1JQ0Z2YkdSRlQwWk9aWGRzYVc1bEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJSE53WldOcFlXd2dZMkZ6WlRvZ2IyeGtJR2hoY3lCdWJ5QmxiMndnWVc1a0lHNXZJSFJ5WVdsc2FXNW5JR052Ym5SbGVIUTdJRzV2TFc1c0lHTmhiaUJsYm1RZ2RYQWdZbVZtYjNKbElHRmtaSE5jYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZM1Z5VW1GdVoyVXVjM0JzYVdObEtHaDFibXN1YjJ4a1RHbHVaWE1zSURBc0lDZGNYRnhjSUU1dklHNWxkMnhwYm1VZ1lYUWdaVzVrSUc5bUlHWnBiR1VuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvSVc5c1pFVlBSazVsZDJ4cGJtVWdmSHdnSVc1bGQwVlBSazVsZDJ4cGJtVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZM1Z5VW1GdVoyVXVjSFZ6YUNnblhGeGNYQ0JPYnlCdVpYZHNhVzVsSUdGMElHVnVaQ0J2WmlCbWFXeGxKeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lHaDFibXR6TG5CMWMyZ29hSFZ1YXlrN1hHNWNiaUFnSUNBZ0lDQWdJQ0J2YkdSU1lXNW5aVk4wWVhKMElEMGdNRHRjYmlBZ0lDQWdJQ0FnSUNCdVpYZFNZVzVuWlZOMFlYSjBJRDBnTUR0Y2JpQWdJQ0FnSUNBZ0lDQmpkWEpTWVc1blpTQTlJRnRkTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCdmJHUk1hVzVsSUNzOUlHeHBibVZ6TG14bGJtZDBhRHRjYmlBZ0lDQWdJRzVsZDB4cGJtVWdLejBnYkdsdVpYTXViR1Z1WjNSb08xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnYjJ4a1JtbHNaVTVoYldVNklHOXNaRVpwYkdWT1lXMWxMQ0J1WlhkR2FXeGxUbUZ0WlRvZ2JtVjNSbWxzWlU1aGJXVXNYRzRnSUNBZ2IyeGtTR1ZoWkdWeU9pQnZiR1JJWldGa1pYSXNJRzVsZDBobFlXUmxjam9nYm1WM1NHVmhaR1Z5TEZ4dUlDQWdJR2gxYm10ek9pQm9kVzVyYzF4dUlDQjlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kzSmxZWFJsVkhkdlJtbHNaWE5RWVhSamFDaHZiR1JHYVd4bFRtRnRaU3dnYm1WM1JtbHNaVTVoYldVc0lHOXNaRk4wY2l3Z2JtVjNVM1J5TENCdmJHUklaV0ZrWlhJc0lHNWxkMGhsWVdSbGNpd2diM0IwYVc5dWN5a2dlMXh1SUNCamIyNXpkQ0JrYVdabUlEMGdjM1J5ZFdOMGRYSmxaRkJoZEdOb0tHOXNaRVpwYkdWT1lXMWxMQ0J1WlhkR2FXeGxUbUZ0WlN3Z2IyeGtVM1J5TENCdVpYZFRkSElzSUc5c1pFaGxZV1JsY2l3Z2JtVjNTR1ZoWkdWeUxDQnZjSFJwYjI1ektUdGNibHh1SUNCamIyNXpkQ0J5WlhRZ1BTQmJYVHRjYmlBZ2FXWWdLRzlzWkVacGJHVk9ZVzFsSUQwOUlHNWxkMFpwYkdWT1lXMWxLU0I3WEc0Z0lDQWdjbVYwTG5CMWMyZ29KMGx1WkdWNE9pQW5JQ3NnYjJ4a1JtbHNaVTVoYldVcE8xeHVJQ0I5WEc0Z0lISmxkQzV3ZFhOb0tDYzlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5SnlrN1hHNGdJSEpsZEM1d2RYTm9LQ2N0TFMwZ0p5QXJJR1JwWm1ZdWIyeGtSbWxzWlU1aGJXVWdLeUFvZEhsd1pXOW1JR1JwWm1ZdWIyeGtTR1ZoWkdWeUlEMDlQU0FuZFc1a1pXWnBibVZrSnlBL0lDY25JRG9nSjF4Y2RDY2dLeUJrYVdabUxtOXNaRWhsWVdSbGNpa3BPMXh1SUNCeVpYUXVjSFZ6YUNnbkt5c3JJQ2NnS3lCa2FXWm1MbTVsZDBacGJHVk9ZVzFsSUNzZ0tIUjVjR1Z2WmlCa2FXWm1MbTVsZDBobFlXUmxjaUE5UFQwZ0ozVnVaR1ZtYVc1bFpDY2dQeUFuSnlBNklDZGNYSFFuSUNzZ1pHbG1aaTV1WlhkSVpXRmtaWElwS1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdScFptWXVhSFZ1YTNNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQmpiMjV6ZENCb2RXNXJJRDBnWkdsbVppNW9kVzVyYzF0cFhUdGNiaUFnSUNCeVpYUXVjSFZ6YUNoY2JpQWdJQ0FnSUNkQVFDQXRKeUFySUdoMWJtc3ViMnhrVTNSaGNuUWdLeUFuTENjZ0t5Qm9kVzVyTG05c1pFeHBibVZ6WEc0Z0lDQWdJQ0FySUNjZ0t5Y2dLeUJvZFc1ckxtNWxkMU4wWVhKMElDc2dKeXduSUNzZ2FIVnVheTV1WlhkTWFXNWxjMXh1SUNBZ0lDQWdLeUFuSUVCQUoxeHVJQ0FnSUNrN1hHNGdJQ0FnY21WMExuQjFjMmd1WVhCd2JIa29jbVYwTENCb2RXNXJMbXhwYm1WektUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQnlaWFF1YW05cGJpZ25YRnh1SnlrZ0t5QW5YRnh1Snp0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR055WldGMFpWQmhkR05vS0dacGJHVk9ZVzFsTENCdmJHUlRkSElzSUc1bGQxTjBjaXdnYjJ4a1NHVmhaR1Z5TENCdVpYZElaV0ZrWlhJc0lHOXdkR2x2Ym5NcElIdGNiaUFnY21WMGRYSnVJR055WldGMFpWUjNiMFpwYkdWelVHRjBZMmdvWm1sc1pVNWhiV1VzSUdacGJHVk9ZVzFsTENCdmJHUlRkSElzSUc1bGQxTjBjaXdnYjJ4a1NHVmhaR1Z5TENCdVpYZElaV0ZrWlhJc0lHOXdkR2x2Ym5NcE8xeHVmVnh1SWwxOVxuXG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovXCJ1c2Ugc3RyaWN0XCI7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9hcnJheUVxdWFsID0gYXJyYXlFcXVhbDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovYXJyYXlTdGFydHNXaXRoID0gYXJyYXlTdGFydHNXaXRoO1xuXHRmdW5jdGlvbiBhcnJheUVxdWFsKGEsIGIpIHtcblx0ICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG5cdCAgICByZXR1cm4gZmFsc2U7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIGFycmF5U3RhcnRzV2l0aChhLCBiKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFycmF5U3RhcnRzV2l0aChhcnJheSwgc3RhcnQpIHtcblx0ICBpZiAoc3RhcnQubGVuZ3RoID4gYXJyYXkubGVuZ3RoKSB7XG5cdCAgICByZXR1cm4gZmFsc2U7XG5cdCAgfVxuXG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydC5sZW5ndGg7IGkrKykge1xuXHQgICAgaWYgKHN0YXJ0W2ldICE9PSBhcnJheVtpXSkge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHRydWU7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MWRHbHNMMkZ5Y21GNUxtcHpJbDBzSW01aGJXVnpJanBiSW1GeWNtRjVSWEYxWVd3aUxDSmhjbkpoZVZOMFlYSjBjMWRwZEdnaUxDSmhJaXdpWWlJc0lteGxibWQwYUNJc0ltRnljbUY1SWl3aWMzUmhjblFpTENKcElsMHNJbTFoY0hCcGJtZHpJam9pT3pzN1owTkJRV2RDUVN4VkxFZEJRVUZCTEZVN2VVUkJVVUZETEdVc1IwRkJRVUVzWlR0QlFWSlVMRk5CUVZORUxGVkJRVlFzUTBGQmIwSkZMRU5CUVhCQ0xFVkJRWFZDUXl4RFFVRjJRaXhGUVVFd1FqdEJRVU12UWl4TlFVRkpSQ3hGUVVGRlJTeE5RVUZHTEV0QlFXRkVMRVZCUVVWRExFMUJRVzVDTEVWQlFUSkNPMEZCUTNwQ0xGZEJRVThzUzBGQlVEdEJRVU5FT3p0QlFVVkVMRk5CUVU5SUxHZENRVUZuUWtNc1EwRkJhRUlzUlVGQmJVSkRMRU5CUVc1Q0xFTkJRVkE3UVVGRFJEczdRVUZGVFN4VFFVRlRSaXhsUVVGVUxFTkJRWGxDU1N4TFFVRjZRaXhGUVVGblEwTXNTMEZCYUVNc1JVRkJkVU03UVVGRE5VTXNUVUZCU1VFc1RVRkJUVVlzVFVGQlRpeEhRVUZsUXl4TlFVRk5SQ3hOUVVGNlFpeEZRVUZwUXp0QlFVTXZRaXhYUVVGUExFdEJRVkE3UVVGRFJEczdRVUZGUkN4UFFVRkxMRWxCUVVsSExFbEJRVWtzUTBGQllpeEZRVUZuUWtFc1NVRkJTVVFzVFVGQlRVWXNUVUZCTVVJc1JVRkJhME5ITEVkQlFXeERMRVZCUVhWRE8wRkJRM0pETEZGQlFVbEVMRTFCUVUxRExFTkJRVTRzVFVGQllVWXNUVUZCVFVVc1EwRkJUaXhEUVVGcVFpeEZRVUV5UWp0QlFVTjZRaXhoUVVGUExFdEJRVkE3UVVGRFJEdEJRVU5HT3p0QlFVVkVMRk5CUVU4c1NVRkJVRHRCUVVORUlpd2labWxzWlNJNkltRnljbUY1TG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2laWGh3YjNKMElHWjFibU4wYVc5dUlHRnljbUY1UlhGMVlXd29ZU3dnWWlrZ2UxeHVJQ0JwWmlBb1lTNXNaVzVuZEdnZ0lUMDlJR0l1YkdWdVozUm9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUdGeWNtRjVVM1JoY25SelYybDBhQ2hoTENCaUtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGeWNtRjVVM1JoY25SelYybDBhQ2hoY25KaGVTd2djM1JoY25RcElIdGNiaUFnYVdZZ0tITjBZWEowTG14bGJtZDBhQ0ErSUdGeWNtRjVMbXhsYm1kMGFDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ2ZWeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2MzUmhjblF1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNCcFppQW9jM1JoY25SYmFWMGdJVDA5SUdGeWNtRjVXMmxkS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlIUnlkV1U3WEc1OVhHNGlYWDA9XG5cblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9cInVzZSBzdHJpY3RcIjtcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NvbnZlcnRDaGFuZ2VzVG9ETVAgPSBjb252ZXJ0Q2hhbmdlc1RvRE1QO1xuXHQvLyBTZWU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtZGlmZi1tYXRjaC1wYXRjaC93aWtpL0FQSVxuXHRmdW5jdGlvbiBjb252ZXJ0Q2hhbmdlc1RvRE1QKGNoYW5nZXMpIHtcblx0ICB2YXIgcmV0ID0gW10sXG5cdCAgICAgIGNoYW5nZSA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sXG5cdCAgICAgIG9wZXJhdGlvbiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuXHQgICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuXHQgICAgICBvcGVyYXRpb24gPSAxO1xuXHQgICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuXHQgICAgICBvcGVyYXRpb24gPSAtMTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIG9wZXJhdGlvbiA9IDA7XG5cdCAgICB9XG5cblx0ICAgIHJldC5wdXNoKFtvcGVyYXRpb24sIGNoYW5nZS52YWx1ZV0pO1xuXHQgIH1cblx0ICByZXR1cm4gcmV0O1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWpiMjUyWlhKMEwyUnRjQzVxY3lKZExDSnVZVzFsY3lJNld5SmpiMjUyWlhKMFEyaGhibWRsYzFSdlJFMVFJaXdpWTJoaGJtZGxjeUlzSW5KbGRDSXNJbU5vWVc1blpTSXNJbTl3WlhKaGRHbHZiaUlzSW1raUxDSnNaVzVuZEdnaUxDSmhaR1JsWkNJc0luSmxiVzkyWldRaUxDSndkWE5vSWl3aWRtRnNkV1VpWFN3aWJXRndjR2x1WjNNaU9pSTdPenRuUTBGRFowSkJMRzFDTEVkQlFVRkJMRzFDTzBGQlJHaENPMEZCUTA4c1UwRkJVMEVzYlVKQlFWUXNRMEZCTmtKRExFOUJRVGRDTEVWQlFYTkRPMEZCUXpORExFMUJRVWxETEUxQlFVMHNSVUZCVmp0QlFVRkJMRTFCUTBsRExIZERRVVJLTzBGQlFVRXNUVUZGU1VNc01rTkJSa283UVVGSFFTeFBRVUZMTEVsQlFVbERMRWxCUVVrc1EwRkJZaXhGUVVGblFrRXNTVUZCU1Vvc1VVRkJVVXNzVFVGQk5VSXNSVUZCYjBORUxFZEJRWEJETEVWQlFYbERPMEZCUTNaRFJpeGhRVUZUUml4UlFVRlJTU3hEUVVGU0xFTkJRVlE3UVVGRFFTeFJRVUZKUml4UFFVRlBTU3hMUVVGWUxFVkJRV3RDTzBGQlEyaENTQ3hyUWtGQldTeERRVUZhTzBGQlEwUXNTMEZHUkN4TlFVVlBMRWxCUVVsRUxFOUJRVTlMTEU5QlFWZ3NSVUZCYjBJN1FVRkRla0pLTEd0Q1FVRlpMRU5CUVVNc1EwRkJZanRCUVVORUxFdEJSazBzVFVGRlFUdEJRVU5NUVN4clFrRkJXU3hEUVVGYU8wRkJRMFE3TzBGQlJVUkdMRkZCUVVsUExFbEJRVW9zUTBGQlV5eERRVUZEVEN4VFFVRkVMRVZCUVZsRUxFOUJRVTlQTEV0QlFXNUNMRU5CUVZRN1FVRkRSRHRCUVVORUxGTkJRVTlTTEVkQlFWQTdRVUZEUkNJc0ltWnBiR1VpT2lKa2JYQXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdkx5QlRaV1U2SUdoMGRIQTZMeTlqYjJSbExtZHZiMmRzWlM1amIyMHZjQzluYjI5bmJHVXRaR2xtWmkxdFlYUmphQzF3WVhSamFDOTNhV3RwTDBGUVNWeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTnZiblpsY25SRGFHRnVaMlZ6Vkc5RVRWQW9ZMmhoYm1kbGN5a2dlMXh1SUNCc1pYUWdjbVYwSUQwZ1cxMHNYRzRnSUNBZ0lDQmphR0Z1WjJVc1hHNGdJQ0FnSUNCdmNHVnlZWFJwYjI0N1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWTJoaGJtZGxjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdOb1lXNW5aU0E5SUdOb1lXNW5aWE5iYVYwN1hHNGdJQ0FnYVdZZ0tHTm9ZVzVuWlM1aFpHUmxaQ2tnZTF4dUlDQWdJQ0FnYjNCbGNtRjBhVzl1SUQwZ01UdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHTm9ZVzVuWlM1eVpXMXZkbVZrS1NCN1hHNGdJQ0FnSUNCdmNHVnlZWFJwYjI0Z1BTQXRNVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2IzQmxjbUYwYVc5dUlEMGdNRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFF1Y0hWemFDaGJiM0JsY21GMGFXOXVMQ0JqYUdGdVoyVXVkbUZzZFdWZEtUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2NtVjBPMXh1ZlZ4dUlsMTlcblxuXG4vKioqLyB9KSxcbi8qIDE3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NvbnZlcnRDaGFuZ2VzVG9YTUwgPSBjb252ZXJ0Q2hhbmdlc1RvWE1MO1xuXHRmdW5jdGlvbiBjb252ZXJ0Q2hhbmdlc1RvWE1MKGNoYW5nZXMpIHtcblx0ICB2YXIgcmV0ID0gW107XG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXTtcblx0ICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcblx0ICAgICAgcmV0LnB1c2goJzxpbnM+Jyk7XG5cdCAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG5cdCAgICAgIHJldC5wdXNoKCc8ZGVsPicpO1xuXHQgICAgfVxuXG5cdCAgICByZXQucHVzaChlc2NhcGVIVE1MKGNoYW5nZS52YWx1ZSkpO1xuXG5cdCAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG5cdCAgICAgIHJldC5wdXNoKCc8L2lucz4nKTtcblx0ICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcblx0ICAgICAgcmV0LnB1c2goJzwvZGVsPicpO1xuXHQgICAgfVxuXHQgIH1cblx0ICByZXR1cm4gcmV0LmpvaW4oJycpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXNjYXBlSFRNTChzKSB7XG5cdCAgdmFyIG4gPSBzO1xuXHQgIG4gPSBuLnJlcGxhY2UoLyYvZywgJyZhbXA7Jyk7XG5cdCAgbiA9IG4ucmVwbGFjZSgvPC9nLCAnJmx0OycpO1xuXHQgIG4gPSBuLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcblx0ICBuID0gbi5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG5cblx0ICByZXR1cm4gbjtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlqYjI1MlpYSjBMM2h0YkM1cWN5SmRMQ0p1WVcxbGN5STZXeUpqYjI1MlpYSjBRMmhoYm1kbGMxUnZXRTFNSWl3aVkyaGhibWRsY3lJc0luSmxkQ0lzSW1raUxDSnNaVzVuZEdnaUxDSmphR0Z1WjJVaUxDSmhaR1JsWkNJc0luQjFjMmdpTENKeVpXMXZkbVZrSWl3aVpYTmpZWEJsU0ZSTlRDSXNJblpoYkhWbElpd2lhbTlwYmlJc0luTWlMQ0p1SWl3aWNtVndiR0ZqWlNKZExDSnRZWEJ3YVc1bmN5STZJanM3TzJkRFFVRm5Ra0VzYlVJc1IwRkJRVUVzYlVJN1FVRkJWQ3hUUVVGVFFTeHRRa0ZCVkN4RFFVRTJRa01zVDBGQk4wSXNSVUZCYzBNN1FVRkRNME1zVFVGQlNVTXNUVUZCVFN4RlFVRldPMEZCUTBFc1QwRkJTeXhKUVVGSlF5eEpRVUZKTEVOQlFXSXNSVUZCWjBKQkxFbEJRVWxHTEZGQlFWRkhMRTFCUVRWQ0xFVkJRVzlEUkN4SFFVRndReXhGUVVGNVF6dEJRVU4yUXl4UlFVRkpSU3hUUVVGVFNpeFJRVUZSUlN4RFFVRlNMRU5CUVdJN1FVRkRRU3hSUVVGSlJTeFBRVUZQUXl4TFFVRllMRVZCUVd0Q08wRkJRMmhDU2l4VlFVRkpTeXhKUVVGS0xFTkJRVk1zVDBGQlZEdEJRVU5FTEV0QlJrUXNUVUZGVHl4SlFVRkpSaXhQUVVGUFJ5eFBRVUZZTEVWQlFXOUNPMEZCUTNwQ1RpeFZRVUZKU3l4SlFVRktMRU5CUVZNc1QwRkJWRHRCUVVORU96dEJRVVZFVEN4UlFVRkpTeXhKUVVGS0xFTkJRVk5GTEZkQlFWZEtMRTlCUVU5TExFdEJRV3hDTEVOQlFWUTdPMEZCUlVFc1VVRkJTVXdzVDBGQlQwTXNTMEZCV0N4RlFVRnJRanRCUVVOb1Frb3NWVUZCU1Vzc1NVRkJTaXhEUVVGVExGRkJRVlE3UVVGRFJDeExRVVpFTEUxQlJVOHNTVUZCU1VZc1QwRkJUMGNzVDBGQldDeEZRVUZ2UWp0QlFVTjZRazRzVlVGQlNVc3NTVUZCU2l4RFFVRlRMRkZCUVZRN1FVRkRSRHRCUVVOR08wRkJRMFFzVTBGQlQwd3NTVUZCU1ZNc1NVRkJTaXhEUVVGVExFVkJRVlFzUTBGQlVEdEJRVU5FT3p0QlFVVkVMRk5CUVZOR0xGVkJRVlFzUTBGQmIwSkhMRU5CUVhCQ0xFVkJRWFZDTzBGQlEzSkNMRTFCUVVsRExFbEJRVWxFTEVOQlFWSTdRVUZEUVVNc1RVRkJTVUVzUlVGQlJVTXNUMEZCUml4RFFVRlZMRWxCUVZZc1JVRkJaMElzVDBGQmFFSXNRMEZCU2p0QlFVTkJSQ3hOUVVGSlFTeEZRVUZGUXl4UFFVRkdMRU5CUVZVc1NVRkJWaXhGUVVGblFpeE5RVUZvUWl4RFFVRktPMEZCUTBGRUxFMUJRVWxCTEVWQlFVVkRMRTlCUVVZc1EwRkJWU3hKUVVGV0xFVkJRV2RDTEUxQlFXaENMRU5CUVVvN1FVRkRRVVFzVFVGQlNVRXNSVUZCUlVNc1QwRkJSaXhEUVVGVkxFbEJRVllzUlVGQlowSXNVVUZCYUVJc1EwRkJTanM3UVVGRlFTeFRRVUZQUkN4RFFVRlFPMEZCUTBRaUxDSm1hV3hsSWpvaWVHMXNMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpYaHdiM0owSUdaMWJtTjBhVzl1SUdOdmJuWmxjblJEYUdGdVoyVnpWRzlZVFV3b1kyaGhibWRsY3lrZ2UxeHVJQ0JzWlhRZ2NtVjBJRDBnVzEwN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWTJoaGJtZGxjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUd4bGRDQmphR0Z1WjJVZ1BTQmphR0Z1WjJWelcybGRPMXh1SUNBZ0lHbG1JQ2hqYUdGdVoyVXVZV1JrWldRcElIdGNiaUFnSUNBZ0lISmxkQzV3ZFhOb0tDYzhhVzV6UGljcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb1kyaGhibWRsTG5KbGJXOTJaV1FwSUh0Y2JpQWdJQ0FnSUhKbGRDNXdkWE5vS0NjOFpHVnNQaWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEM1d2RYTm9LR1Z6WTJGd1pVaFVUVXdvWTJoaGJtZGxMblpoYkhWbEtTazdYRzVjYmlBZ0lDQnBaaUFvWTJoaGJtZGxMbUZrWkdWa0tTQjdYRzRnSUNBZ0lDQnlaWFF1Y0hWemFDZ25QQzlwYm5NK0p5azdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaGphR0Z1WjJVdWNtVnRiM1psWkNrZ2UxeHVJQ0FnSUNBZ2NtVjBMbkIxYzJnb0p6d3ZaR1ZzUGljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnY21WMExtcHZhVzRvSnljcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCbGMyTmhjR1ZJVkUxTUtITXBJSHRjYmlBZ2JHVjBJRzRnUFNCek8xeHVJQ0J1SUQwZ2JpNXlaWEJzWVdObEtDOG1MMmNzSUNjbVlXMXdPeWNwTzF4dUlDQnVJRDBnYmk1eVpYQnNZV05sS0M4OEwyY3NJQ2NtYkhRN0p5azdYRzRnSUc0Z1BTQnVMbkpsY0d4aFkyVW9MejR2Wnl3Z0p5Wm5kRHNuS1R0Y2JpQWdiaUE5SUc0dWNtVndiR0ZqWlNndlhDSXZaeXdnSnlaeGRXOTBPeWNwTzF4dVhHNGdJSEpsZEhWeWJpQnVPMXh1ZlZ4dUlsMTlcblxuXG4vKioqLyB9KVxuLyoqKioqKi8gXSlcbn0pO1xuO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2RpZmYvZGlzdC9kaWZmLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9kaWZmL2Rpc3QvZGlmZi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCIvKlxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7fTtcblxudmFyXHRtZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKHR5cGVvZiBtZW1vID09PSBcInVuZGVmaW5lZFwiKSBtZW1vID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRyZXR1cm4gbWVtbztcblx0fTtcbn07XG5cbnZhciBpc09sZElFID0gbWVtb2l6ZShmdW5jdGlvbiAoKSB7XG5cdC8vIFRlc3QgZm9yIElFIDw9IDkgYXMgcHJvcG9zZWQgYnkgQnJvd3NlcmhhY2tzXG5cdC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcblx0Ly8gVGVzdHMgZm9yIGV4aXN0ZW5jZSBvZiBzdGFuZGFyZCBnbG9iYWxzIGlzIHRvIGFsbG93IHN0eWxlLWxvYWRlclxuXHQvLyB0byBvcGVyYXRlIGNvcnJlY3RseSBpbnRvIG5vbi1zdGFuZGFyZCBlbnZpcm9ubWVudHNcblx0Ly8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG5cdHJldHVybiB3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYjtcbn0pO1xuXG52YXIgZ2V0RWxlbWVudCA9IChmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW8gPSB7fTtcblxuXHRyZXR1cm4gZnVuY3Rpb24oc2VsZWN0b3IpIHtcblx0XHRpZiAodHlwZW9mIG1lbW9bc2VsZWN0b3JdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBmbi5jYWxsKHRoaXMsIHNlbGVjdG9yKTtcblx0XHRcdC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cdFx0XHRpZiAoc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuXHRcdFx0XHRcdC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcblx0XHRcdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZW1vW3NlbGVjdG9yXSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1tzZWxlY3Rvcl1cblx0fTtcbn0pKGZ1bmN0aW9uICh0YXJnZXQpIHtcblx0cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KVxufSk7XG5cbnZhciBzaW5nbGV0b24gPSBudWxsO1xudmFyXHRzaW5nbGV0b25Db3VudGVyID0gMDtcbnZhclx0c3R5bGVzSW5zZXJ0ZWRBdFRvcCA9IFtdO1xuXG52YXJcdGZpeFVybHMgPSByZXF1aXJlKFwiLi91cmxzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxpc3QsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiBERUJVRyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBERUJVRykge1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBFcnJvcihcIlRoZSBzdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdG9wdGlvbnMuYXR0cnMgPSB0eXBlb2Ygb3B0aW9ucy5hdHRycyA9PT0gXCJvYmplY3RcIiA/IG9wdGlvbnMuYXR0cnMgOiB7fTtcblxuXHQvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cblx0Ly8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXHRpZiAoIW9wdGlvbnMuc2luZ2xldG9uKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuXHRpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0SW50byArIFwiIFwiICsgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdG9wdGlvbnMuYXR0cnMucmVsID0gXCJzdHlsZXNoZWV0XCI7XG5cblx0YWRkQXR0cnMobGluaywgb3B0aW9ucy5hdHRycyk7XG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBsaW5rKTtcblxuXHRyZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gYWRkQXR0cnMgKGVsLCBhdHRycykge1xuXHRPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0ZWwuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqLCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZSwgdXBkYXRlLCByZW1vdmUsIHJlc3VsdDtcblxuXHQvLyBJZiBhIHRyYW5zZm9ybSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgcnVuIGl0IG9uIHRoZSBjc3Ncblx0aWYgKG9wdGlvbnMudHJhbnNmb3JtICYmIG9iai5jc3MpIHtcblx0ICAgIHJlc3VsdCA9IG9wdGlvbnMudHJhbnNmb3JtKG9iai5jc3MpO1xuXG5cdCAgICBpZiAocmVzdWx0KSB7XG5cdCAgICBcdC8vIElmIHRyYW5zZm9ybSByZXR1cm5zIGEgdmFsdWUsIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgcnVubmluZyBydW50aW1lIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgY3NzLlxuXHQgICAgXHRvYmouY3NzID0gcmVzdWx0O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0Ly8gSWYgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiByZXR1cm5zIGEgZmFsc3kgdmFsdWUsIGRvbid0IGFkZCB0aGlzIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgY29uZGl0aW9uYWwgbG9hZGluZyBvZiBjc3Ncblx0ICAgIFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgXHRcdC8vIG5vb3Bcblx0ICAgIFx0fTtcblx0ICAgIH1cblx0fVxuXG5cdGlmIChvcHRpb25zLnNpbmdsZXRvbikge1xuXHRcdHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrO1xuXG5cdFx0c3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSk7XG5cblx0XHR1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcblx0XHRyZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuXG5cdH0gZWxzZSBpZiAoXG5cdFx0b2JqLnNvdXJjZU1hcCAmJlxuXHRcdHR5cGVvZiBVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwuY3JlYXRlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLnJldm9rZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIEJsb2IgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVMaW5rRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSB1cGRhdGVMaW5rLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cblx0XHRcdGlmKHN0eWxlLmhyZWYpIFVSTC5yZXZva2VPYmplY3RVUkwoc3R5bGUuaHJlZik7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRzdHlsZSA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cdFx0fTtcblx0fVxuXG5cdHVwZGF0ZShvYmopO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqKSB7XG5cdFx0aWYgKG5ld09iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG5cdFx0XHRcdG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG5cdFx0XHRcdG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXBcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHVwZGF0ZShvYmogPSBuZXdPYmopO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW1vdmUoKTtcblx0XHR9XG5cdH07XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciB0ZXh0U3RvcmUgPSBbXTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuXHRcdHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudDtcblxuXHRcdHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuXHR9O1xufSkoKTtcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuXHR2YXIgY3NzID0gcmVtb3ZlID8gXCJcIiA6IG9iai5jc3M7XG5cblx0aWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcyk7XG5cdFx0dmFyIGNoaWxkTm9kZXMgPSBzdHlsZS5jaGlsZE5vZGVzO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZS5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSk7XG5cblx0XHRpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0XHRcdHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZSwgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgbWVkaWEgPSBvYmoubWVkaWE7XG5cblx0aWYobWVkaWEpIHtcblx0XHRzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBtZWRpYSlcblx0fVxuXG5cdGlmKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG5cdH0gZWxzZSB7XG5cdFx0d2hpbGUoc3R5bGUuZmlyc3RDaGlsZCkge1xuXHRcdFx0c3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG5cdFx0fVxuXG5cdFx0c3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTGluayAobGluaywgb3B0aW9ucywgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuXHQvKlxuXHRcdElmIGNvbnZlcnRUb0Fic29sdXRlVXJscyBpc24ndCBkZWZpbmVkLCBidXQgc291cmNlbWFwcyBhcmUgZW5hYmxlZFxuXHRcdGFuZCB0aGVyZSBpcyBubyBwdWJsaWNQYXRoIGRlZmluZWQgdGhlbiBsZXRzIHR1cm4gY29udmVydFRvQWJzb2x1dGVVcmxzXG5cdFx0b24gYnkgZGVmYXVsdC4gIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgb3B0aW9uXG5cdFx0ZGlyZWN0bHlcblx0Ki9cblx0dmFyIGF1dG9GaXhVcmxzID0gb3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgPT09IHVuZGVmaW5lZCAmJiBzb3VyY2VNYXA7XG5cblx0aWYgKG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzIHx8IGF1dG9GaXhVcmxzKSB7XG5cdFx0Y3NzID0gZml4VXJscyhjc3MpO1xuXHR9XG5cblx0aWYgKHNvdXJjZU1hcCkge1xuXHRcdC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG5cdFx0Y3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIiArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyBcIiAqL1wiO1xuXHR9XG5cblx0dmFyIGJsb2IgPSBuZXcgQmxvYihbY3NzXSwgeyB0eXBlOiBcInRleHQvY3NzXCIgfSk7XG5cblx0dmFyIG9sZFNyYyA9IGxpbmsuaHJlZjtcblxuXHRsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG5cdGlmKG9sZFNyYykgVVJMLnJldm9rZU9iamVjdFVSTChvbGRTcmMpO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlxuLyoqXG4gKiBXaGVuIHNvdXJjZSBtYXBzIGFyZSBlbmFibGVkLCBgc3R5bGUtbG9hZGVyYCB1c2VzIGEgbGluayBlbGVtZW50IHdpdGggYSBkYXRhLXVyaSB0b1xuICogZW1iZWQgdGhlIGNzcyBvbiB0aGUgcGFnZS4gVGhpcyBicmVha3MgYWxsIHJlbGF0aXZlIHVybHMgYmVjYXVzZSBub3cgdGhleSBhcmUgcmVsYXRpdmUgdG8gYVxuICogYnVuZGxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cbiAqXG4gKiBPbmUgc29sdXRpb24gaXMgdG8gb25seSB1c2UgZnVsbCB1cmxzLCBidXQgdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAqXG4gKiBJbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIFwiZml4ZXNcIiB0aGUgcmVsYXRpdmUgdXJscyB0byBiZSBhYnNvbHV0ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSBsb2NhdGlvbi5cbiAqXG4gKiBBIHJ1ZGltZW50YXJ5IHRlc3Qgc3VpdGUgaXMgbG9jYXRlZCBhdCBgdGVzdC9maXhVcmxzLmpzYCBhbmQgY2FuIGJlIHJ1biB2aWEgdGhlIGBucG0gdGVzdGAgY29tbWFuZC5cbiAqXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIC8vIGdldCBjdXJyZW50IGxvY2F0aW9uXG4gIHZhciBsb2NhdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvblwiKTtcbiAgfVxuXG5cdC8vIGJsYW5rIG9yIG51bGw/XG5cdGlmICghY3NzIHx8IHR5cGVvZiBjc3MgIT09IFwic3RyaW5nXCIpIHtcblx0ICByZXR1cm4gY3NzO1xuICB9XG5cbiAgdmFyIGJhc2VVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gIHZhciBjdXJyZW50RGlyID0gYmFzZVVybCArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1xcL1teXFwvXSokLywgXCIvXCIpO1xuXG5cdC8vIGNvbnZlcnQgZWFjaCB1cmwoLi4uKVxuXHQvKlxuXHRUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBqdXN0IGEgd2F5IHRvIHJlY3Vyc2l2ZWx5IG1hdGNoIGJyYWNrZXRzIHdpdGhpblxuXHRhIHN0cmluZy5cblxuXHQgL3VybFxccypcXCggID0gTWF0Y2ggb24gdGhlIHdvcmQgXCJ1cmxcIiB3aXRoIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0IGFuZCB0aGVuIGEgcGFyZW5zXG5cdCAgICggID0gU3RhcnQgYSBjYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAoPzogID0gU3RhcnQgYSBub24tY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgICAgIFteKShdICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAoPzogID0gU3RhcnQgYW5vdGhlciBub24tY2FwdHVyaW5nIGdyb3Vwc1xuXHQgICAgICAgICAgICAgICAgIFteKShdKyAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICAgICAgW14pKF0qICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIFxcKSAgPSBNYXRjaCBhIGVuZCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKSAgPSBFbmQgR3JvdXBcbiAgICAgICAgICAgICAgKlxcKSA9IE1hdGNoIGFueXRoaW5nIGFuZCB0aGVuIGEgY2xvc2UgcGFyZW5zXG4gICAgICAgICAgKSAgPSBDbG9zZSBub24tY2FwdHVyaW5nIGdyb3VwXG4gICAgICAgICAgKiAgPSBNYXRjaCBhbnl0aGluZ1xuICAgICAgICkgID0gQ2xvc2UgY2FwdHVyaW5nIGdyb3VwXG5cdCBcXCkgID0gTWF0Y2ggYSBjbG9zZSBwYXJlbnNcblxuXHQgL2dpICA9IEdldCBhbGwgbWF0Y2hlcywgbm90IHRoZSBmaXJzdC4gIEJlIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqL1xuXHR2YXIgZml4ZWRDc3MgPSBjc3MucmVwbGFjZSgvdXJsXFxzKlxcKCgoPzpbXikoXXxcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKilcXCkvZ2ksIGZ1bmN0aW9uKGZ1bGxNYXRjaCwgb3JpZ1VybCkge1xuXHRcdC8vIHN0cmlwIHF1b3RlcyAoaWYgdGhleSBleGlzdClcblx0XHR2YXIgdW5xdW90ZWRPcmlnVXJsID0gb3JpZ1VybFxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15cIiguKilcIiQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSlcblx0XHRcdC5yZXBsYWNlKC9eJyguKiknJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KTtcblxuXHRcdC8vIGFscmVhZHkgYSBmdWxsIHVybD8gbm8gY2hhbmdlXG5cdFx0aWYgKC9eKCN8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfGZpbGU6XFwvXFwvXFwvKS9pLnRlc3QodW5xdW90ZWRPcmlnVXJsKSkge1xuXHRcdCAgcmV0dXJuIGZ1bGxNYXRjaDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IHRoZSB1cmwgdG8gYSBmdWxsIHVybFxuXHRcdHZhciBuZXdVcmw7XG5cblx0XHRpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvL1wiKSA9PT0gMCkge1xuXHRcdCAgXHQvL1RPRE86IHNob3VsZCB3ZSBhZGQgcHJvdG9jb2w/XG5cdFx0XHRuZXdVcmwgPSB1bnF1b3RlZE9yaWdVcmw7XG5cdFx0fSBlbHNlIGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHVybFxuXHRcdFx0bmV3VXJsID0gYmFzZVVybCArIHVucXVvdGVkT3JpZ1VybDsgLy8gYWxyZWFkeSBzdGFydHMgd2l0aCAnLydcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3Rvcnlcblx0XHRcdG5ld1VybCA9IGN1cnJlbnREaXIgKyB1bnF1b3RlZE9yaWdVcmwucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpOyAvLyBTdHJpcCBsZWFkaW5nICcuLydcblx0XHR9XG5cblx0XHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIHVybCguLi4pXG5cdFx0cmV0dXJuIFwidXJsKFwiICsgSlNPTi5zdHJpbmdpZnkobmV3VXJsKSArIFwiKVwiO1xuXHR9KTtcblxuXHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIGNzc1xuXHRyZXR1cm4gZml4ZWRDc3M7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL3VybHMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwidmFyIHNjb3BlID0gKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYpIHx8XG4gICAgICAgICAgICB3aW5kb3c7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbChzY29wZSwgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBPbiBzb21lIGV4b3RpYyBlbnZpcm9ubWVudHMsIGl0J3Mgbm90IGNsZWFyIHdoaWNoIG9iamVjdCBgc2V0aW1tZWRpYXRlYCB3YXNcbi8vIGFibGUgdG8gaW5zdGFsbCBvbnRvLiAgU2VhcmNoIGVhY2ggcG9zc2liaWxpdHkgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4vLyBgc2V0aW1tZWRpYXRlYCBsaWJyYXJ5LlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuc2V0SW1tZWRpYXRlKTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5jbGVhckltbWVkaWF0ZSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0geVtvcFswXSAmIDIgPyBcInJldHVyblwiIDogb3BbMF0gPyBcInRocm93XCIgOiBcIm5leHRcIl0pICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gWzAsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7ICB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAob1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XG59IGNhdGNoKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcblx0XHRnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwibnVsbFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9tZW51LWl0ZW0vTWVudUl0ZW0udHMiLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTAtMyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzPz9wb3N0Y3NzIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyL2luZGV4LmpzP3R5cGU9Y3NzIS4vbWVudUl0ZW0ubS5jc3NcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbi8vIFByZXBhcmUgY3NzVHJhbnNmb3JtYXRpb25cbnZhciB0cmFuc2Zvcm07XG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcblx0Ly8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3Ncblx0aWYoIWNvbnRlbnQubG9jYWxzKSB7XG5cdFx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kZWNvcmF0b3ItbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEwLTMhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2xpYi9pbmRleC5qcz8/cG9zdGNzcyEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL21lbnVJdGVtLm0uY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZGVjb3JhdG9yLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0xMC0zIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9saWIvaW5kZXguanM/P3Bvc3Rjc3MhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXIvaW5kZXguanM/dHlwZT1jc3MhLi9tZW51SXRlbS5tLmNzc1wiKTtcblx0XHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXHRcdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHRcdH0pO1xuXHR9XG5cdC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3Ncblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzXG4vLyBtb2R1bGUgaWQgPSAuL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwibnVsbFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9tZW51L01lbnUudHMiLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTAtMyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzPz9wb3N0Y3NzIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyL2luZGV4LmpzP3R5cGU9Y3NzIS4vbWVudS5tLmNzc1wiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuLy8gUHJlcGFyZSBjc3NUcmFuc2Zvcm1hdGlvblxudmFyIHRyYW5zZm9ybTtcblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuXHQvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuXHRpZighY29udGVudC5sb2NhbHMpIHtcblx0XHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTAtMyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzPz9wb3N0Y3NzIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyL2luZGV4LmpzP3R5cGU9Y3NzIS4vbWVudS5tLmNzc1wiLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTAtMyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzPz9wb3N0Y3NzIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyL2luZGV4LmpzP3R5cGU9Y3NzIS4vbWVudS5tLmNzc1wiKTtcblx0XHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXHRcdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHRcdH0pO1xuXHR9XG5cdC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3Ncblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWVudS9tZW51Lm0uY3NzXG4vLyBtb2R1bGUgaWQgPSAuL3NyYy9tZW51L21lbnUubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiaW1wb3J0ICcuL21lbnUtaXRlbS9NZW51SXRlbSc7XG5pbXBvcnQgJy4vbWVudS9NZW51JztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9dHMmaW5zdGFuY2VOYW1lPTBfY3VzdG9tLWVsZW1lbnRzIS4vdGVzdHMvdW5pdC9hbGwudHMiLCJjb25zdCB7IGRlc2NyaWJlLCBpdCB9ID0gaW50ZXJuLmdldEludGVyZmFjZSgnYmRkJyk7XG5pbXBvcnQgaGFybmVzcyBmcm9tICdAZG9qby9mcmFtZXdvcmsvdGVzdGluZy9oYXJuZXNzJztcblxuaW1wb3J0IHsgdiB9IGZyb20gJ0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kJztcblxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zcmMvbWVudS1pdGVtL01lbnVJdGVtJztcbmltcG9ydCAqIGFzIGNzcyBmcm9tICcuLi8uLi8uLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzJztcblxuZGVzY3JpYmUoJ01lbnVJdGVtJywgKCkgPT4ge1xuXHRpdCgnc2hvdWxkIHJlbmRlciB3aWRnZXQnLCAoKSA9PiB7XG5cdFx0Y29uc3QgdGVzdE1lbnVJdGVtID0gaGFybmVzcyhNZW51SXRlbSk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdGNvbnN0IHRpdGxlID0gJ01lbnUgSXRlbSc7XG5cdFx0dGVzdE1lbnVJdGVtLnNldFByb3BlcnRpZXMoeyBzZWxlY3RlZCwgdGl0bGUgfSk7XG5cdFx0dGVzdE1lbnVJdGVtLmV4cGVjdFJlbmRlcihcblx0XHRcdHYoJ2xpJywgeyBjbGFzc2VzOiBjc3Mucm9vdCB9LCBbXG5cdFx0XHRcdHYoXG5cdFx0XHRcdFx0J3NwYW4nLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtjc3MuaXRlbSwgY3NzLnNlbGVjdGVkXSxcblx0XHRcdFx0XHRcdG9uY2xpY2s6IHRlc3RNZW51SXRlbS5saXN0ZW5lclxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0W3RpdGxlXVxuXHRcdFx0XHQpXG5cdFx0XHRdKVxuXHRcdCk7XG5cdH0pO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPXRzJmluc3RhbmNlTmFtZT0wX2N1c3RvbS1lbGVtZW50cyEuL3Rlc3RzL3VuaXQvbWVudS1pdGVtL01lbnVJdGVtLnRzIiwiY29uc3QgeyBkZXNjcmliZSwgaXQgfSA9IGludGVybi5nZXRJbnRlcmZhY2UoJ2JkZCcpO1xuaW1wb3J0IGhhcm5lc3MgZnJvbSAnQGRvam8vZnJhbWV3b3JrL3Rlc3RpbmcvaGFybmVzcyc7XG5cbmltcG9ydCB7IHYgfSBmcm9tICdAZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZCc7XG5cbmltcG9ydCB7IE1lbnUgfSBmcm9tICcuLi8uLi8uLi9zcmMvbWVudS9NZW51JztcbmltcG9ydCAqIGFzIGNzcyBmcm9tICcuLi8uLi8uLi9zcmMvbWVudS9tZW51Lm0uY3NzJztcblxuZGVzY3JpYmUoJ01lbnUnLCAoKSA9PiB7XG5cdGl0KCdzaG91bGQgcmVuZGVyIHdpZGdldCcsICgpID0+IHtcblx0XHRjb25zdCB0ZXN0TWVudSA9IGhhcm5lc3MoTWVudSk7XG5cdFx0dGVzdE1lbnUuZXhwZWN0UmVuZGVyKHYoJ25hdicsIHsgY2xhc3NlczogY3NzLnJvb3QgfSwgW3YoJ29sJywgeyBjbGFzc2VzOiBjc3MubWVudUNvbnRhaW5lciB9KV0pKTtcblx0fSk7XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9dHMmaW5zdGFuY2VOYW1lPTBfY3VzdG9tLWVsZW1lbnRzIS4vdGVzdHMvdW5pdC9tZW51L01lbnUudHMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/test-app/npm-shrinkwrap.json b/test-app/npm-shrinkwrap.json deleted file mode 100644 index 8dea7b8..0000000 --- a/test-app/npm-shrinkwrap.json +++ /dev/null @@ -1,3721 +0,0 @@ -{ - "name": "test-app", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@dojo/cli": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@dojo/cli/-/cli-2.0.0.tgz", - "integrity": "sha512-MIJDEZOE9rQuch31NF24QvpvewzB9h6pj2qrXcjaj2/PYmIHBGlcAOCRZ/JBesPjbYTwasU4pqygTsf2mQt0zA==", - "requires": { - "chalk": "2.4.1", - "cliui": "4.1.0", - "configstore": "3.1.2", - "cross-spawn": "5.1.0", - "detect-indent": "5.0.0", - "ejs": "2.5.7", - "execa": "0.8.0", - "fs-extra": "5.0.0", - "globby": "6.1.0", - "inquirer": "4.0.2", - "pkg-dir": "2.0.0", - "slice-ansi": "1.0.0", - "string-width": "2.1.1", - "tslib": "1.8.1", - "typings-core": "2.3.3", - "update-notifier": "2.5.0", - "yargs": "10.1.2" - }, - "dependencies": { - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "requires": { - "string-width": "2.1.1" - } - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.4.1", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.0" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "requires": { - "restore-cursor": "2.0.0" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" - } - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.2.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "requires": { - "is-obj": "1.0.1" - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.21", - "tmp": "0.0.33" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "2.0.0" - } - }, - "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "iconv-lite": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", - "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "inquirer": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-4.0.2.tgz", - "integrity": "sha512-+f3qDNeZpkhFJ61NBA9jXDrGGhoQuqfEum9A681c9oHoIbGgVqjogKynjB/vNVP+nVu9w3FbFQ35c0ibU0MaIQ==", - "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.5", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "4.1.11" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "requires": { - "package-json": "4.0.1" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "1.2.0" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - }, - "dependencies": { - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - } - } - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0", - "semver": "5.5.0" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "requires": { - "find-up": "2.1.0" - } - }, - "popsicle": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-9.2.0.tgz", - "integrity": "sha512-petRj39w05GvH1WKuGFmzxR9+k+R9E7zX5XWTFee7P/qf88hMuLT7aAO/RsmldpQMtJsWQISkTQlfMRECKlxhw==", - "requires": { - "concat-stream": "1.6.0", - "form-data": "2.3.2", - "make-error-cause": "1.2.2", - "tough-cookie": "2.3.4" - } - }, - "promise-finally": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/promise-finally/-/promise-finally-3.0.0.tgz", - "integrity": "sha1-3dXQ+JVDKxIGzrjaEnUGTRjnqiM=" - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "3.0.0" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=" - }, - "typings-core": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/typings-core/-/typings-core-2.3.3.tgz", - "integrity": "sha1-CexUzVsR3V8e8vwKsx03ACyita0=", - "requires": { - "array-uniq": "1.0.3", - "configstore": "3.1.2", - "debug": "2.6.9", - "detect-indent": "5.0.0", - "graceful-fs": "4.1.11", - "has": "1.0.1", - "invariant": "2.2.3", - "is-absolute": "0.2.6", - "jspm-config": "0.3.4", - "listify": "1.0.0", - "lockfile": "1.0.3", - "make-error-cause": "1.2.2", - "mkdirp": "0.5.1", - "object.pick": "1.3.0", - "parse-json": "2.2.0", - "popsicle": "9.2.0", - "popsicle-proxy-agent": "3.0.0", - "popsicle-retry": "3.2.1", - "popsicle-rewrite": "1.0.0", - "popsicle-status": "2.0.1", - "promise-finally": "3.0.0", - "rc": "1.2.5", - "rimraf": "2.6.2", - "sort-keys": "1.1.2", - "string-template": "1.0.0", - "strip-bom": "3.0.0", - "thenify": "3.3.0", - "throat": "3.2.0", - "touch": "1.0.0", - "typescript": "2.6.2", - "xtend": "4.0.1", - "zip-object": "0.1.0" - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "requires": { - "boxen": "1.3.0", - "chalk": "2.4.1", - "configstore": "3.1.2", - "import-lazy": "2.1.0", - "is-ci": "1.1.0", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "widest-line": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", - "requires": { - "string-width": "2.1.1" - } - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" - }, - "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", - "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "8.1.0" - } - }, - "yargs-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", - "requires": { - "camelcase": "4.1.0" - } - } - } - }, - "@dojo/core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@dojo/core/-/core-2.0.0.tgz", - "integrity": "sha512-iojqMIn49L/bwv/Ryy2v7qKeioHxjHQqJNLhEXBJ+zJoQ47IeG92Y5tmdGsZ6SKZk6sFuWHl7gL9Wbw0qVySHw==", - "requires": { - "tslib": "1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=" - } - } - }, - "@dojo/has": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@dojo/has/-/has-0.1.2.tgz", - "integrity": "sha512-122xXU9xHjG/EayITIAiIdKVphZTZ2wM9IEBArarkBQzXZP1shGAbTJq7NHWUoTemw48tvTxr+OOi7wVCm7IXg==", - "dev": true - }, - "@dojo/i18n": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@dojo/i18n/-/i18n-2.0.0.tgz", - "integrity": "sha512-N7waSXe8ER602TW6WzEaqxMgbjGkFeu6B6xgRFQHoT08MuuwnnFAvjpBG3k3JVq1Kn6hBZqOYP2Fi2xqtdlasA==", - "requires": { - "globalize": "1.3.0", - "tslib": "1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=" - } - } - }, - "@dojo/interfaces": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@dojo/interfaces/-/interfaces-0.2.1.tgz", - "integrity": "sha512-/bIJJb9q02MxSlfA9G3n6AMTlD80fDx7qDRss/8HxeJ26ix/F/tCnX521c3XrWm/HOBEWp7GiRX5E0hQdIuCNw==", - "dev": true, - "requires": { - "@types/yargs": "8.0.3" - } - }, - "@dojo/shim": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@dojo/shim/-/shim-2.0.0.tgz", - "integrity": "sha512-v/zD80U+8ajNrfxwKH6yy//l6ATQ/LzeYVXcqmBkGQ0NA4vDujLS3ceF3Wt0XL55JXLUYaVSQACMqy0H9DPD3A==", - "requires": { - "intersection-observer": "0.4.2", - "pepjs": "0.4.2", - "tslib": "1.8.0", - "web-animations-js": "2.3.1" - } - }, - "@dojo/test-extras": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@dojo/test-extras/-/test-extras-2.0.0.tgz", - "integrity": "sha512-+jyiGgAtYTgz5FLeQiFp3MFBwT5ZrSUc/Ol96acDv//0IeOD11SDw90f4g7D69LGbbevnX2HuyCQ4n/GNrJ7Hg==", - "dev": true, - "requires": { - "css-select-umd": "1.3.0-rc0", - "diff": "3.4.0", - "tslib": "1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", - "dev": true - } - } - }, - "@dojo/widget-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@dojo/widget-core/-/widget-core-2.0.0.tgz", - "integrity": "sha512-D58yrDvAvlTmOySHA4gminwKU3zJfs8UwQ6MWauI35rwCo+ssFkWWEly2j7YJa3L8e1dHxe6YoFKhK5bc4ZIFA==", - "requires": { - "@types/web-animations-js": "2.2.5", - "tslib": "1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=" - } - } - }, - "@theintern/digdug": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@theintern/digdug/-/digdug-2.0.4.tgz", - "integrity": "sha512-BTcYNMxOnGlTEaOYqab9WygE2sLz9ZRWRsuTwUttceewzEDn/Ok/4lWdIgwwX+bb3MybvFPU1wBkq8Co+Bfqyw==", - "dev": true, - "requires": { - "@dojo/core": "0.3.1", - "@dojo/has": "0.1.2", - "@dojo/interfaces": "0.2.1", - "decompress": "4.2.0", - "semver": "5.4.1", - "tslib": "1.8.0" - }, - "dependencies": { - "@dojo/core": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@dojo/core/-/core-0.3.1.tgz", - "integrity": "sha512-PEwqxpsuTTG0b2wwy0TLHEFf/R6ZBE4zizo4EXzGUVRc5O44w5Hbn+NN48v/o8hwQRKxmX3ywLI0Z1CMZ6NM6w==", - "dev": true, - "requires": { - "tslib": "1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", - "dev": true - } - } - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - } - } - }, - "@theintern/leadfoot": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@theintern/leadfoot/-/leadfoot-2.0.3.tgz", - "integrity": "sha512-J9wLAMjAU+Wyv5jGmHdVN4xnuyaD24kK7mAoLUPBLRNxflkJoTo9Ph5g4BKUHp+xpKd/IMU00ulgMMf++Xqm4A==", - "dev": true, - "requires": { - "@dojo/core": "0.3.1", - "@dojo/has": "0.1.2", - "@dojo/interfaces": "0.2.1", - "@types/jszip": "0.0.33", - "jszip": "3.1.5", - "tslib": "1.8.0" - }, - "dependencies": { - "@dojo/core": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@dojo/core/-/core-0.3.1.tgz", - "integrity": "sha512-PEwqxpsuTTG0b2wwy0TLHEFf/R6ZBE4zizo4EXzGUVRc5O44w5Hbn+NN48v/o8hwQRKxmX3ywLI0Z1CMZ6NM6w==", - "dev": true, - "requires": { - "tslib": "1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", - "dev": true - } - } - } - } - }, - "@types/babel-types": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.1.tgz", - "integrity": "sha512-EkcOk09rjhivbovP8WreGRbXW20YRfe/qdgXOGq3it3u3aAOWDRNsQhL/XPAWFF7zhZZ+uR+nT+3b+TCkIap1w==", - "dev": true - }, - "@types/benchmark": { - "version": "1.0.31", - "resolved": "https://registry.npmjs.org/@types/benchmark/-/benchmark-1.0.31.tgz", - "integrity": "sha512-F6fVNOkGEkSdo/19yWYOwVKGvzbTeWkR/XQYBKtGBQ9oGRjBN9f/L4aJI4sDcVPJO58Y1CJZN8va9V2BhrZapA==", - "dev": true - }, - "@types/body-parser": { - "version": "1.16.8", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.16.8.tgz", - "integrity": "sha512-BdN2PXxOFnTXFcyONPW6t0fHjz2fvRZHVMFpaS0wYr+Y8fWEaNOs4V8LEu/fpzQlMx+ahdndgTaGTwPC+J/EeA==", - "dev": true, - "requires": { - "@types/express": "4.0.39", - "@types/node": "9.4.6" - } - }, - "@types/chai": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.0.10.tgz", - "integrity": "sha512-Ejh1AXTY8lm+x91X/yar3G2z4x9RyKwdTVdyyu7Xj3dNB35fMNCnEWqTO9FgS3zjzlRNqk1MruYhgb8yhRN9rA==", - "dev": true - }, - "@types/charm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/charm/-/charm-1.0.1.tgz", - "integrity": "sha512-F9OalGhk60p/DnACfa1SWtmVTMni0+w9t/qfb5Bu7CsurkEjZFN7Z+ii/VGmYpaViPz7o3tBahRQae9O7skFlQ==", - "dev": true, - "requires": { - "@types/node": "9.4.6" - } - }, - "@types/diff": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@types/diff/-/diff-3.2.2.tgz", - "integrity": "sha512-q3zfJvaTroV5BjAAR+peTHEGAAhGrPX0z2EzCzpt2mwFA+qzUn2nigJLqSekXRtdULKmT8am7zjvTMZSapIgHw==", - "dev": true - }, - "@types/events": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", - "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", - "dev": true - }, - "@types/express": { - "version": "4.0.39", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.0.39.tgz", - "integrity": "sha512-dBUam7jEjyuEofigUXCtublUHknRZvcRgITlGsTbFgPvnTwtQUt2NgLakbsf+PsGo/Nupqr3IXCYsOpBpofyrA==", - "dev": true, - "requires": { - "@types/body-parser": "1.16.8", - "@types/express-serve-static-core": "4.11.1", - "@types/serve-static": "1.13.1" - } - }, - "@types/express-serve-static-core": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.11.1.tgz", - "integrity": "sha512-EehCl3tpuqiM8RUb+0255M8PhhSwTtLfmO7zBBdv0ay/VTd/zmrqDfQdZFsa5z/PVMbH2yCMZPXsnrImpATyIw==", - "dev": true, - "requires": { - "@types/events": "1.2.0", - "@types/node": "9.4.6" - } - }, - "@types/http-errors": { - "version": "1.5.34", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.5.34.tgz", - "integrity": "sha1-1qVvJde5XdBwR2gL+CVjLil5aBU=", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz", - "integrity": "sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ==", - "dev": true - }, - "@types/istanbul-lib-hook": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0.tgz", - "integrity": "sha512-+kdaJ8hO/auIGcqPuSbd3cnTSzgM8ZW0zfYFZLP67vCmWkZV4LdC1XOXpMWnlONup+PChJMK8Q/+Qrh7WoxnUQ==", - "dev": true - }, - "@types/istanbul-lib-instrument": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz", - "integrity": "sha512-Ll2qAzv7NItqVliZZ8OMAgAvGstddK2995/7X5YPU84lD3CFnqDfP4sTu5Q1GKReh5Ttw3shKR2e3Fe6Xo0C7A==", - "dev": true, - "requires": { - "@types/babel-types": "7.0.1", - "@types/istanbul-lib-coverage": "1.1.0", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@types/istanbul-lib-report": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz", - "integrity": "sha512-nW5QuzmMhr7fHPijtaGOemFFI8Ctrxb/dIXgouSlKmWT16RxWlGLEX/nGghIBOReKe9hPFZXoNh338nFQk2xcA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "1.1.0" - } - }, - "@types/istanbul-lib-source-maps": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", - "integrity": "sha512-K0IvmTFbI2GjLG0O4AOLPV2hFItE5Bg/TY41IBZIThhLhYthJc3VjpZpM8/sIaIVtnQcX8b2k3muPDvsvhk+Fg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "1.1.0", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@types/istanbul-reports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.0.tgz", - "integrity": "sha512-wrJUtE1+HuaRz0Le7fc5l1nMTermRh6wlEvOdQPilseNScyYgQK8MdgDP2cf/X8+6e1dtsX/zP4W4kH/jyHvFw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "1.1.0", - "@types/istanbul-lib-report": "1.1.0" - } - }, - "@types/jszip": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/jszip/-/jszip-0.0.33.tgz", - "integrity": "sha512-zAbqAUQmXP9/ryVysJO6XkogdIdtVIYYGmV7BzhKuagaS+75QZ6muJjeSaG5M8rdE5jQ8gyhkZ23r6l4ICmxyQ==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.104", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.104.tgz", - "integrity": "sha512-ufQcVg4daO8xQ5kopxRHanqFdL4AI7ondQkV+2f+7mz3gvp0LkBx2zBRC6hfs3T87mzQFmf5Fck7Fi145Ul6NQ==", - "dev": true - }, - "@types/mime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", - "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==", - "dev": true - }, - "@types/mime-types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz", - "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=", - "dev": true - }, - "@types/node": { - "version": "9.4.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz", - "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==", - "dev": true - }, - "@types/platform": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/platform/-/platform-1.3.1.tgz", - "integrity": "sha512-XI6JKLFNBmkADRd2FtUYtEuq5LDKTNXwUIodV3ZfTNkA+g4yo+rXXXdZL3fTE24S92BjpiEVaL3f64Fxm2JOgg==", - "dev": true - }, - "@types/resolve": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.4.tgz", - "integrity": "sha1-m1htZalH3qiMS8JNoLkF/pUgoNU=", - "dev": true, - "requires": { - "@types/node": "9.4.6" - } - }, - "@types/serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-jDMH+3BQPtvqZVIcsH700Dfi8Q3MIcEx16g/VdxjoqiGR/NntekB10xdBpirMKnPe9z2C5cBmL0vte0YttOr3Q==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "4.11.1", - "@types/mime": "2.0.0" - } - }, - "@types/shell-quote": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@types/shell-quote/-/shell-quote-1.6.0.tgz", - "integrity": "sha512-BFonQx849sYB2YOJZBUEfbWdaJcqRb6+ASvgUBtcmg2JRTjBaV2Wgn0SD0gWNIZ+rd7KPysPCjLUOUXnBDUlBg==", - "dev": true - }, - "@types/source-map": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/@types/source-map/-/source-map-0.1.29.tgz", - "integrity": "sha1-1wSKYBgLCfiqbVO9oxHGtRy9cBg=", - "dev": true - }, - "@types/statuses": { - "version": "1.2.28", - "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-1.2.28.tgz", - "integrity": "sha1-zF8Z0haUFtVWzcoFtZsp5F+kl+I=", - "dev": true - }, - "@types/web-animations-js": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@types/web-animations-js/-/web-animations-js-2.2.5.tgz", - "integrity": "sha512-3kjO6yvLt1e673wtcKEz0lgLKqPkBiuwxQj0DQ1jj+48HB03emIlTQYcqKAvB9UwOXq09QrWy/Dm6ZU8xMZVTw==" - }, - "@types/ws": { - "version": "0.0.42", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-0.0.42.tgz", - "integrity": "sha512-+30f9gcx24GZRD9EqqiQM+I5pRf/MJiJoEqp2X62QRwfEjdqyn9mPmjxZAEXBUVunWotE5qkadIPqf2MMcDYNw==", - "dev": true, - "requires": { - "@types/node": "9.4.6" - } - }, - "@types/yargs": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-8.0.3.tgz", - "integrity": "sha512-YdxO7zGQf2qJeMgR0fNO8QTlj88L2zCP5GOddovoTyetgLiNDOUXcWzhWKb4EdZZlOjLQUA0JM8lW7VcKQL+9w==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true, - "requires": { - "mime-types": "2.1.18", - "negotiator": "0.6.1" - } - }, - "agent-base": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", - "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", - "requires": { - "extend": "3.0.1", - "semver": "5.0.3" - }, - "dependencies": { - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=" - } - } - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", - "dev": true, - "requires": { - "default-require-extensions": "1.0.0" - } - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.5", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - } - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" - }, - "dependencies": { - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", - "dev": true - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.5" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.3", - "lodash": "4.17.5" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.5", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", - "dev": true - }, - "benchmark": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", - "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", - "dev": true, - "requires": { - "lodash": "4.17.5", - "platform": "1.3.5" - } - }, - "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", - "dev": true, - "requires": { - "readable-stream": "2.3.4" - } - }, - "body-parser": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", - "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", - "dev": true, - "requires": { - "bytes": "2.4.0", - "content-type": "1.0.4", - "debug": "2.6.7", - "depd": "1.1.2", - "http-errors": "1.6.2", - "iconv-lite": "0.4.15", - "on-finished": "2.3.0", - "qs": "6.4.0", - "raw-body": "2.2.0", - "type-is": "1.6.16" - }, - "dependencies": { - "debug": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", - "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", - "dev": true, - "requires": { - "base64-js": "0.0.8", - "ieee754": "1.1.8", - "isarray": "1.0.0" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", - "dev": true, - "requires": { - "assertion-error": "1.1.0", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.8" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" - }, - "charm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", - "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "ci-info": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", - "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==" - }, - "cldrjs": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.4.8.tgz", - "integrity": "sha1-O5lMRk0qMrWsp8XeF6YKh+RdxPk=" - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.4", - "typedarray": "0.0.6" - } - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "core-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", - "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "requires": { - "capture-stack-trace": "1.0.0" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" - }, - "css-select-umd": { - "version": "1.3.0-rc0", - "resolved": "https://registry.npmjs.org/css-select-umd/-/css-select-umd-1.3.0-rc0.tgz", - "integrity": "sha512-ggouX0yWeql8nZobF5jscijHx/WIDkEuy7Iq6fU2X6ogQyIPpJ/aGn4ZYM0jpfI0LbvDaQustkj0az/hN1BqwA==", - "dev": true, - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", - "domutils": "1.5.1", - "es6-set": "0.1.5", - "nth-check": "1.0.1" - } - }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.39" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "dev": true, - "requires": { - "decompress-tar": "4.1.1", - "decompress-tarbz2": "4.1.1", - "decompress-targz": "4.1.1", - "decompress-unzip": "4.0.1", - "graceful-fs": "4.1.11", - "make-dir": "1.2.0", - "pify": "2.3.0", - "strip-dirs": "2.1.0" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, - "requires": { - "file-type": "5.2.0", - "is-stream": "1.1.0", - "tar-stream": "1.5.5" - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, - "requires": { - "decompress-tar": "4.1.1", - "file-type": "6.2.0", - "is-stream": "1.1.0", - "seek-bzip": "1.0.5", - "unbzip2-stream": "1.2.5" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, - "requires": { - "decompress-tar": "4.1.1", - "file-type": "5.2.0", - "is-stream": "1.1.0" - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dev": true, - "requires": { - "file-type": "3.9.0", - "get-stream": "2.3.1", - "pify": "2.3.0", - "yauzl": "2.9.1" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - } - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" - }, - "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", - "dev": true, - "requires": { - "strip-bom": "2.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=" - }, - "diff": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", - "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", - "dev": true - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", - "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es5-ext": { - "version": "0.10.39", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.39.tgz", - "integrity": "sha512-AlaXZhPHl0po/uxMx1tyrlt1O86M6D5iVaDH8UgLfgek4kXTX6vzsRfJQWC2Ku+aG8pkw1XWzh9eTkwfVrsD5g==", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.39", - "es6-symbol": "3.1.1" - } - }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", - "dev": true - }, - "es6-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", - "dev": true - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.39", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.39" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.39" - } - }, - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - } - } - }, - "express": { - "version": "4.15.5", - "resolved": "https://registry.npmjs.org/express/-/express-4.15.5.tgz", - "integrity": "sha1-ZwI1ypWYiQpa6BcLg9tyK4Qu2Sc=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.0.6", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "1.1.5", - "qs": "6.5.0", - "range-parser": "1.2.0", - "send": "0.15.6", - "serve-static": "1.12.6", - "setprototypeof": "1.0.3", - "statuses": "1.3.1", - "type-is": "1.6.16", - "utils-merge": "1.0.0", - "vary": "1.1.2" - }, - "dependencies": { - "qs": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", - "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "1.2.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - }, - "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "requires": { - "ini": "1.3.5" - } - }, - "globalize": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.3.0.tgz", - "integrity": "sha1-xWUkuKz9LOONDJfd/c6zj2RLM5I=", - "requires": { - "cldrjs": "0.4.8" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "dev": true, - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - } - } - }, - "http-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz", - "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", - "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" - } - }, - "https-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", - "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" - } - }, - "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", - "dev": true - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", - "dev": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "intern": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/intern/-/intern-4.1.5.tgz", - "integrity": "sha512-wY3xxstQ2zHpOU/ktjMcyvzmzazyjvlcipD79RqDGm+kyMdJcyI+00qfHvPlzrwhGwX+XVs2+tqwJCiSMKzYUg==", - "dev": true, - "requires": { - "@dojo/core": "0.3.1", - "@dojo/has": "0.1.2", - "@dojo/interfaces": "0.2.1", - "@theintern/digdug": "2.0.4", - "@theintern/leadfoot": "2.0.3", - "@types/benchmark": "1.0.31", - "@types/chai": "4.0.10", - "@types/charm": "1.0.1", - "@types/diff": "3.2.2", - "@types/express": "4.0.39", - "@types/http-errors": "1.5.34", - "@types/istanbul-lib-coverage": "1.1.0", - "@types/istanbul-lib-hook": "1.0.0", - "@types/istanbul-lib-instrument": "1.7.1", - "@types/istanbul-lib-report": "1.1.0", - "@types/istanbul-lib-source-maps": "1.2.1", - "@types/istanbul-reports": "1.1.0", - "@types/lodash": "4.14.104", - "@types/mime-types": "2.1.0", - "@types/platform": "1.3.1", - "@types/resolve": "0.0.4", - "@types/shell-quote": "1.6.0", - "@types/source-map": "0.1.29", - "@types/statuses": "1.2.28", - "@types/ws": "0.0.42", - "benchmark": "2.1.4", - "body-parser": "1.17.2", - "chai": "4.1.2", - "charm": "1.0.2", - "diff": "3.2.0", - "express": "4.15.5", - "glob": "7.1.2", - "http-errors": "1.6.2", - "istanbul-lib-coverage": "1.1.2", - "istanbul-lib-hook": "1.0.7", - "istanbul-lib-instrument": "1.7.5", - "istanbul-lib-report": "1.1.3", - "istanbul-lib-source-maps": "1.2.3", - "istanbul-reports": "1.1.4", - "lodash": "4.17.5", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "platform": "1.3.5", - "resolve": "1.4.0", - "shell-quote": "1.6.1", - "source-map": "0.5.7", - "statuses": "1.3.1", - "tslib": "1.8.0", - "ws": "2.3.1" - }, - "dependencies": { - "@dojo/core": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@dojo/core/-/core-0.3.1.tgz", - "integrity": "sha512-PEwqxpsuTTG0b2wwy0TLHEFf/R6ZBE4zizo4EXzGUVRc5O44w5Hbn+NN48v/o8hwQRKxmX3ywLI0Z1CMZ6NM6w==", - "dev": true, - "requires": { - "tslib": "1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", - "dev": true - } - } - }, - "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", - "dev": true - } - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "intersection-observer": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.4.2.tgz", - "integrity": "sha512-SFGCL4d6A7J+aXNHTx94zV7ydngTKraDBvoJjn5iGgsXYhXgAXIYj8i3ewJoO80BRB7qtBB3sBlrdGNwTktzLg==" - }, - "invariant": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", - "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", - "requires": { - "loose-envify": "1.3.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "ipaddr.js": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", - "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=", - "dev": true - }, - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "requires": { - "is-relative": "0.2.1", - "is-windows": "0.2.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-ci": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", - "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", - "requires": { - "ci-info": "1.1.3" - } - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" - } - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" - }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "requires": { - "is-unc-path": "0.1.2" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "requires": { - "unc-path-regex": "0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "istanbul-lib-coverage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz", - "integrity": "sha512-tZYA0v5A7qBSsOzcebJJ/z3lk3oSzH62puG78DbBA1+zupipX2CakDyiPV3pOb8He+jBwVimuwB0dTnh38hX0w==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", - "integrity": "sha512-3U2HB9y1ZV9UmFlE12Fx+nPtFqIymzrqCksrXujm3NVbAZIJg/RfYgO1XiIa0mbmxTjWpVEVlkIZJ25xVIAfkQ==", - "dev": true, - "requires": { - "append-transform": "0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.5.tgz", - "integrity": "sha1-rbWW+PDLi5XnOSBjUaOKWGryGx4=", - "dev": true, - "requires": { - "babel-generator": "6.26.1", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.2", - "semver": "5.5.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz", - "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "1.1.2", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", - "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", - "dev": true, - "requires": { - "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.2", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "istanbul-reports": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.4.tgz", - "integrity": "sha512-DfSTVOTkuO+kRmbO8Gk650Wqm1WRGr6lrdi2EwDK1vxpS71vdlLd613EpzOKdIFioB5f/scJTjeWBnvd1FWejg==", - "dev": true, - "requires": { - "handlebars": "4.0.11" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jspm-config": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/jspm-config/-/jspm-config-0.3.4.tgz", - "integrity": "sha1-RMJpAuSujs4jZs7cn/FrEKXzkcY=", - "requires": { - "any-promise": "1.3.0", - "graceful-fs": "4.1.11", - "make-error-cause": "1.2.2", - "object.pick": "1.3.0", - "parse-json": "2.2.0", - "strip-bom": "3.0.0", - "thenify": "3.3.0", - "throat": "3.2.0", - "xtend": "4.0.1" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } - } - }, - "jszip": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", - "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", - "dev": true, - "requires": { - "core-js": "2.3.0", - "es6-promise": "3.0.2", - "lie": "3.1.1", - "pako": "1.0.6", - "readable-stream": "2.0.6" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "1.0.0" - } - }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "dev": true, - "requires": { - "immediate": "3.0.6" - } - }, - "listify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/listify/-/listify-1.0.0.tgz", - "integrity": "sha1-A8p7otFQ1CZ3c/dOV1WNEFPSvuM=" - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "lockfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.3.tgz", - "integrity": "sha1-Jjj8OaAzHpysGgS3F5mTHJxQ33k=" - }, - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "requires": { - "js-tokens": "3.0.2" - } - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "make-dir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", - "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", - "requires": { - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "make-error": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", - "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==" - }, - "make-error-cause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", - "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", - "requires": { - "make-error": "1.3.4" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "requires": { - "mimic-fn": "1.2.0" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", - "dev": true - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "1.33.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "requires": { - "abbrev": "1.1.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "2.0.1" - } - }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, - "requires": { - "boolbase": "1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", - "requires": { - "p-try": "1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "1.2.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.1" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "pepjs": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/pepjs/-/pepjs-0.4.2.tgz", - "integrity": "sha1-EyZO6olJhP9CPIPkDS+k4d7Byfo=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - } - }, - "platform": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", - "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==", - "dev": true - }, - "popsicle-proxy-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/popsicle-proxy-agent/-/popsicle-proxy-agent-3.0.0.tgz", - "integrity": "sha1-uRM8VdlFdZq37mG3cRNkYg066tw=", - "requires": { - "http-proxy-agent": "1.0.0", - "https-proxy-agent": "1.0.0" - } - }, - "popsicle-retry": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/popsicle-retry/-/popsicle-retry-3.2.1.tgz", - "integrity": "sha1-4G6GZTO0KnoSPrMwy+Y6fOvLoQw=", - "requires": { - "any-promise": "1.3.0", - "xtend": "4.0.1" - } - }, - "popsicle-rewrite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/popsicle-rewrite/-/popsicle-rewrite-1.0.0.tgz", - "integrity": "sha1-HdTo6pwxgjUfuCD4eTTZkvf7kAc=" - }, - "popsicle-status": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/popsicle-status/-/popsicle-status-2.0.1.tgz", - "integrity": "sha1-jdcMT+fGlBCa3XhP/oDqysHnso0=" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "proxy-addr": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", - "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", - "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.4.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", - "dev": true, - "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.15", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.5.tgz", - "integrity": "sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0=", - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - } - }, - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "requires": { - "rc": "1.2.5", - "safe-buffer": "5.1.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "requires": { - "rc": "1.2.5" - } - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "resolve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", - "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "7.1.2" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "requires": { - "is-promise": "2.1.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "requires": { - "rx-lite": "4.0.8" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "dev": true, - "requires": { - "commander": "2.8.1" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "requires": { - "semver": "5.5.0" - } - }, - "send": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/send/-/send-0.15.6.tgz", - "integrity": "sha1-IPI6nJJbdiq4JwX+L52yUqzkfjQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.2", - "mime": "1.3.4", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" - } - }, - "serve-static": { - "version": "1.12.6", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.6.tgz", - "integrity": "sha1-uXN3P2NEmTTaVOW+ul4x2fQhFXc=", - "dev": true, - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.15.6" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" - } - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true, - "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" - } - }, - "shx": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.2.2.tgz", - "integrity": "sha1-CjBNAgsO3xMGrYFXDoDwNG31ijk=", - "dev": true, - "requires": { - "es6-object-assign": "1.1.0", - "minimist": "1.2.0", - "shelljs": "0.7.8" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "requires": { - "is-fullwidth-code-point": "2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "requires": { - "is-plain-obj": "1.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "string-template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", - "integrity": "sha1-np8iM9wA8hhxjsN5oopWc+zKi5Y=" - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "requires": { - "is-natural-number": "4.0.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tar-stream": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", - "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", - "dev": true, - "requires": { - "bl": "1.2.1", - "end-of-stream": "1.4.1", - "readable-stream": "2.3.4", - "xtend": "4.0.1" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "requires": { - "execa": "0.7.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - } - } - }, - "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "requires": { - "any-promise": "1.3.0" - } - }, - "throat": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", - "integrity": "sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "touch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", - "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", - "requires": { - "nopt": "1.0.10" - } - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "requires": { - "punycode": "1.4.1" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "tslib": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.0.tgz", - "integrity": "sha512-ymKWWZJST0/CkgduC2qkzjMOWr4bouhuURNXCn/inEX0L57BnRG6FhX76o7FOnsjHazCjfU2LKeSrlS2sIKQJg==" - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.18" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typescript": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", - "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=" - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "unbzip2-stream": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", - "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", - "dev": true, - "requires": { - "buffer": "3.6.0", - "through": "2.3.8" - } - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "requires": { - "crypto-random-string": "1.0.0" - } - }, - "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "1.0.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "web-animations-js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/web-animations-js/-/web-animations-js-2.3.1.tgz", - "integrity": "sha1-Om2bwVGWN3qQ+OKAP6UmIWWwRRA=" - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "requires": { - "isexe": "2.0.0" - } - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-2.3.1.tgz", - "integrity": "sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA=", - "dev": true, - "requires": { - "safe-buffer": "5.0.1", - "ultron": "1.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", - "dev": true - } - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", - "dev": true, - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" - } - }, - "zip-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/zip-object/-/zip-object-0.1.0.tgz", - "integrity": "sha1-waDaBMiMg3dW4khoCgP/kC7D9To=" - } - } -} diff --git a/test-app/package-lock.json b/test-app/package-lock.json new file mode 100644 index 0000000..2a8b78b --- /dev/null +++ b/test-app/package-lock.json @@ -0,0 +1,2968 @@ +{ + "name": "test-app", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@dojo/core": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@dojo/core/-/core-0.5.0.tgz", + "integrity": "sha512-kEyKjH/HRMf7rXxFiOvM0Lco8fPcoGtECZx8kr2tskgrIBPN8F3aaRTT8GZ9duUjoIp953RK8ggbMzBt7+ap+Q==", + "dev": true, + "requires": { + "tslib": "~1.8.1" + } + }, + "@dojo/framework": { + "version": "file:../tarballs/dojo-framework-3.0.0-pre.tgz", + "integrity": "sha512-zcWObi/OcAyPbbOvCO181xitVaYW7v1CsvV9GVQ5Yiw6SYqCq5QDE+P0trhqFWDw9pUbbdRPfJM0QOUn+12J+A==", + "requires": { + "@types/cldrjs": "~0.4.20", + "@types/globalize": "0.0.34", + "@types/web-animations-js": "2.2.5", + "@webcomponents/webcomponentsjs": "1.1.0", + "cldr-data": "~32.0.0", + "css-select-umd": "1.3.0-rc0", + "diff": "3.4.0", + "globalize": "1.3.0", + "intersection-observer": "0.4.2", + "pepjs": "0.4.2", + "tslib": "~1.8.0", + "web-animations-js": "2.3.1" + } + }, + "@dojo/has": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@dojo/has/-/has-0.1.2.tgz", + "integrity": "sha512-122xXU9xHjG/EayITIAiIdKVphZTZ2wM9IEBArarkBQzXZP1shGAbTJq7NHWUoTemw48tvTxr+OOi7wVCm7IXg==", + "dev": true + }, + "@dojo/interfaces": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@dojo/interfaces/-/interfaces-0.2.1.tgz", + "integrity": "sha512-/bIJJb9q02MxSlfA9G3n6AMTlD80fDx7qDRss/8HxeJ26ix/F/tCnX521c3XrWm/HOBEWp7GiRX5E0hQdIuCNw==", + "dev": true, + "requires": { + "@types/yargs": "^8.0.2" + } + }, + "@dojo/shim": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@dojo/shim/-/shim-0.2.7.tgz", + "integrity": "sha512-3R/n4a1/17acl9S5Wtay/0rcKzUqtVVJkCLPrGZq4NmRzWop09Unryqg/GV0Y1V7SbcILHKBL7bOTEfrpVX63g==", + "dev": true, + "requires": { + "intersection-observer": "0.4.2", + "pepjs": "0.4.2", + "tslib": "~1.8.0", + "web-animations-js": "2.3.1" + } + }, + "@theintern/digdug": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@theintern/digdug/-/digdug-2.1.2.tgz", + "integrity": "sha512-r1QjsLCeBk6UiK2nA6g3P+nc5V/drSU6w8zmvEWIsCl397xog1h6yEovu8V9KVjISL2LbyyOLEGGnNDSlEpcVQ==", + "dev": true, + "requires": { + "@dojo/core": "~2.0.0", + "@dojo/has": "~2.0.0", + "@dojo/interfaces": "~0.2.0", + "@dojo/shim": "~2.0.0", + "command-exists": "~1.2.6", + "decompress": "~4.2.0", + "semver": "~5.5.0", + "tslib": "~1.9.0" + }, + "dependencies": { + "@dojo/core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@dojo/core/-/core-2.0.0.tgz", + "integrity": "sha512-iojqMIn49L/bwv/Ryy2v7qKeioHxjHQqJNLhEXBJ+zJoQ47IeG92Y5tmdGsZ6SKZk6sFuWHl7gL9Wbw0qVySHw==", + "dev": true, + "requires": { + "tslib": "~1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", + "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", + "dev": true + } + } + }, + "@dojo/has": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@dojo/has/-/has-2.0.0.tgz", + "integrity": "sha512-WFdsD2jVqsLvOTtEs8Q9TlJF7f0VgO8NXRccuOPKjw9tXKvB6XrnZjGgh+zkLxOUrm8m3rExMu8MHGM8ZHLPPQ==", + "dev": true + }, + "@dojo/shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@dojo/shim/-/shim-2.0.0.tgz", + "integrity": "sha512-v/zD80U+8ajNrfxwKH6yy//l6ATQ/LzeYVXcqmBkGQ0NA4vDujLS3ceF3Wt0XL55JXLUYaVSQACMqy0H9DPD3A==", + "dev": true, + "requires": { + "intersection-observer": "0.4.2", + "pepjs": "0.4.2", + "tslib": "~1.8.0", + "web-animations-js": "2.3.1" + }, + "dependencies": { + "tslib": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", + "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", + "dev": true + } + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + } + } + }, + "@theintern/leadfoot": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@theintern/leadfoot/-/leadfoot-2.1.0.tgz", + "integrity": "sha512-GRl2RUMVOBDFAPHzMTH5vI+MvZNfhmMeb0vh640q4BMVZqoxXmIbRtW5bcJ3M580u56CcrMDCauLAYqQ5NUjFw==", + "dev": true, + "requires": { + "@dojo/core": "~0.5.0", + "@dojo/has": "~0.1.2", + "@dojo/interfaces": "~0.2.1", + "@dojo/shim": "~0.2.7", + "@types/jszip": "~3.1.3", + "jszip": "~3.1.3", + "tslib": "~1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + } + } + }, + "@types/babel-types": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.4.tgz", + "integrity": "sha512-WiZhq3SVJHFRgRYLXvpf65XnV6ipVHhnNaNvE8yCimejrGglkg38kEj0JcizqwSHxmPSjcTlig/6JouxLGEhGw==", + "dev": true + }, + "@types/benchmark": { + "version": "1.0.31", + "resolved": "https://registry.npmjs.org/@types/benchmark/-/benchmark-1.0.31.tgz", + "integrity": "sha512-F6fVNOkGEkSdo/19yWYOwVKGvzbTeWkR/XQYBKtGBQ9oGRjBN9f/L4aJI4sDcVPJO58Y1CJZN8va9V2BhrZapA==", + "dev": true + }, + "@types/body-parser": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", + "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/chai": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.4.tgz", + "integrity": "sha512-h6+VEw2Vr3ORiFCyyJmcho2zALnUq9cvdB/IO8Xs9itrJVCenC7o26A6+m7D0ihTTr65eS259H5/Ghl/VjYs6g==", + "dev": true + }, + "@types/charm": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/charm/-/charm-1.0.1.tgz", + "integrity": "sha512-F9OalGhk60p/DnACfa1SWtmVTMni0+w9t/qfb5Bu7CsurkEjZFN7Z+ii/VGmYpaViPz7o3tBahRQae9O7skFlQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cldrjs": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/@types/cldrjs/-/cldrjs-0.4.20.tgz", + "integrity": "sha512-vQe6BQF9QCHSLUlNjRa/1zicRCnQnTRwhW/FqgVv26A85COY1jfkkO6JjogDv22U3LRhu9pY4uPQOlxGnsuJPA==" + }, + "@types/connect": { + "version": "3.4.32", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", + "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/diff": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@types/diff/-/diff-3.5.1.tgz", + "integrity": "sha512-nkT7bd/YM6QRDQjww8PYf0kOj1MvwxQ/WaCinj2Hm1HlL+JqGTm4cDoQeROfiWX/B3SNI1nyLLhLAQpp5sE3hw==", + "dev": true + }, + "@types/events": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", + "dev": true + }, + "@types/express": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.11.1.tgz", + "integrity": "sha512-ttWle8cnPA5rAelauSWeWJimtY2RsUf2aspYZs7xPHiWgOlPn6nnUfBMtrkcnjFJuIHJF4gNOdVvpLK2Zmvh6g==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz", + "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/node": "*", + "@types/range-parser": "*" + } + }, + "@types/globalize": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/globalize/-/globalize-0.0.34.tgz", + "integrity": "sha512-FQTLuqZxqf+T1Ao6RzaIP7HcTcNvgDf0YQfK90YGYt1N6KeU5GE0M/hsxdQlpqvuztxjEwEQqIO3paSO/tZ4Pw==", + "requires": { + "@types/cldrjs": "*" + } + }, + "@types/http-errors": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.6.1.tgz", + "integrity": "sha512-s+RHKSGc3r0m3YEE2UXomJYrpQaY9cDmNDLU2XvG1/LAZsQ7y8emYkTLfcw/ByDtcsTyRQKwr76Bj4PkN2hfWg==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz", + "integrity": "sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ==", + "dev": true + }, + "@types/istanbul-lib-hook": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0.tgz", + "integrity": "sha512-+kdaJ8hO/auIGcqPuSbd3cnTSzgM8ZW0zfYFZLP67vCmWkZV4LdC1XOXpMWnlONup+PChJMK8Q/+Qrh7WoxnUQ==", + "dev": true + }, + "@types/istanbul-lib-instrument": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz", + "integrity": "sha512-SWIpdKneXqThfrKIokt9dXSPeslS2NWcxhtr+/a2+N81aLyOMAsVTMmwaKuCoEahcI0FfhY3/79AR6Vilk9i8A==", + "dev": true, + "requires": { + "@types/babel-types": "*", + "@types/istanbul-lib-coverage": "*", + "source-map": "^0.6.1" + } + }, + "@types/istanbul-lib-report": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz", + "integrity": "sha512-nW5QuzmMhr7fHPijtaGOemFFI8Ctrxb/dIXgouSlKmWT16RxWlGLEX/nGghIBOReKe9hPFZXoNh338nFQk2xcA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-lib-source-maps": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", + "integrity": "sha512-K0IvmTFbI2GjLG0O4AOLPV2hFItE5Bg/TY41IBZIThhLhYthJc3VjpZpM8/sIaIVtnQcX8b2k3muPDvsvhk+Fg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "source-map": "^0.6.1" + } + }, + "@types/istanbul-reports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.0.tgz", + "integrity": "sha512-wrJUtE1+HuaRz0Le7fc5l1nMTermRh6wlEvOdQPilseNScyYgQK8MdgDP2cf/X8+6e1dtsX/zP4W4kH/jyHvFw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/jszip": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/jszip/-/jszip-3.1.4.tgz", + "integrity": "sha512-UaVbz4buRlBEolZYrxqkrGDOypugYlbqGNrUFB4qBaexrLypTH0jyvaF5jolNy5D+5C4kKV1WJ3Yx9cn/JH8oA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/lodash": { + "version": "4.14.112", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.112.tgz", + "integrity": "sha512-jDD7sendv3V7iwyRXSlECOR8HCtMN2faVA9ngLdHHihSVIwY7nbfsKl2kA6fimUDU1i5l/zgpG3aevwWnN3zCQ==", + "dev": true + }, + "@types/mime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", + "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==", + "dev": true + }, + "@types/mime-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz", + "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=", + "dev": true + }, + "@types/node": { + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.2.tgz", + "integrity": "sha512-m9zXmifkZsMHZBOyxZWilMwmTlpC8x5Ty360JKTiXvlXZfBWYpsg9ZZvP/Ye+iZUh+Q+MxDLjItVTWIsfwz+8Q==", + "dev": true + }, + "@types/platform": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/platform/-/platform-1.3.1.tgz", + "integrity": "sha512-XI6JKLFNBmkADRd2FtUYtEuq5LDKTNXwUIodV3ZfTNkA+g4yo+rXXXdZL3fTE24S92BjpiEVaL3f64Fxm2JOgg==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz", + "integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.7.tgz", + "integrity": "sha512-GPewdjkb0Q76o459qgp6pBLzJj/bD3oveS2kfLhIkZ9U3t3AFKtl5DlFB6lGTw0iZmcmxoGC8lpLW3NNJKrN9A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "@types/shell-quote": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@types/shell-quote/-/shell-quote-1.6.0.tgz", + "integrity": "sha512-BFonQx849sYB2YOJZBUEfbWdaJcqRb6+ASvgUBtcmg2JRTjBaV2Wgn0SD0gWNIZ+rd7KPysPCjLUOUXnBDUlBg==", + "dev": true + }, + "@types/statuses": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-1.3.0.tgz", + "integrity": "sha512-E0QjLIX1q+ThpQ7HLh5SjMtUtPl0tQjxoLMPwJtFDFtH7C0qdXmCgNcBplZ9m24+sOoQBpc0PT/aMW4jlm3K6g==", + "dev": true + }, + "@types/web-animations-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@types/web-animations-js/-/web-animations-js-2.2.5.tgz", + "integrity": "sha512-3kjO6yvLt1e673wtcKEz0lgLKqPkBiuwxQj0DQ1jj+48HB03emIlTQYcqKAvB9UwOXq09QrWy/Dm6ZU8xMZVTw==" + }, + "@types/ws": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-4.0.2.tgz", + "integrity": "sha512-tlDVFHCcJdNqYgjGNDPDCo4tNqhFMymIAdJCcykFbdhYr4X6vD7IlMxY0t3/k6Pfup68YNkMTpRfLKTRuKDmnQ==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-8.0.3.tgz", + "integrity": "sha512-YdxO7zGQf2qJeMgR0fNO8QTlj88L2zCP5GOddovoTyetgLiNDOUXcWzhWKb4EdZZlOjLQUA0JM8lW7VcKQL+9w==", + "dev": true + }, + "@webcomponents/webcomponentsjs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.1.0.tgz", + "integrity": "sha512-7toNyVlrl7vJnY3PU0eXIK1KWq8phfnEe1IwOdCMxkIl/BfUkUB2aaVs45R0LSx1qxHRnkqj0vlGtskUvKkNkA==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "adm-zip": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", + "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==" + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "^1.0.0" + } + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "dev": true + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "benchmark": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", + "dev": true, + "requires": { + "lodash": "^4.17.4", + "platform": "^1.3.3" + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.x.x" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", + "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", + "dev": true, + "requires": { + "base64-js": "0.0.8", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "charm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", + "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", + "dev": true, + "requires": { + "inherits": "^2.0.1" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "cldr-data": { + "version": "32.0.1", + "resolved": "https://registry.npmjs.org/cldr-data/-/cldr-data-32.0.1.tgz", + "integrity": "sha1-eWCDKDbgpkp0voi1XuEF8pgKDyo=", + "requires": { + "cldr-data-downloader": "0.3.x", + "glob": "5.x.x" + } + }, + "cldr-data-downloader": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/cldr-data-downloader/-/cldr-data-downloader-0.3.4.tgz", + "integrity": "sha1-SiWXAiHvg5vh7LWKFnEdo/Pk1sA=", + "requires": { + "adm-zip": "0.4.11", + "mkdirp": "0.5.0", + "nopt": "3.0.x", + "progress": "1.1.8", + "q": "1.0.1", + "request": "~2.83.0", + "request-progress": "0.3.1" + } + }, + "cldrjs": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.4.8.tgz", + "integrity": "sha1-O5lMRk0qMrWsp8XeF6YKh+RdxPk=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.7.tgz", + "integrity": "sha512-doWDvhXCcW5LK0cIUWrOQ8oMFXJv3lEQCkJpGVjM8v9SV0uhqYXB943538tEA2CiaWqSyuYUGAm5ezDwEx9xlw==", + "dev": true + }, + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "core-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "requires": { + "boom": "5.x.x" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.x.x" + } + } + } + }, + "css-select-umd": { + "version": "1.3.0-rc0", + "resolved": "https://registry.npmjs.org/css-select-umd/-/css-select-umd-1.3.0-rc0.tgz", + "integrity": "sha512-ggouX0yWeql8nZobF5jscijHx/WIDkEuy7Iq6fU2X6ogQyIPpJ/aGn4ZYM0jpfI0LbvDaQustkj0az/hN1BqwA==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "es6-set": "^0.1.5", + "nth-check": "^1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "^0.10.9" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "optional": true + }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "dev": true, + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + } + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "^2.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "diff": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", + "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==" + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, + "es5-ext": { + "version": "0.10.45", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", + "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", + "dev": true + }, + "es6-promise": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", + "dev": true + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.3", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globalize": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.3.0.tgz", + "integrity": "sha1-xWUkuKz9LOONDJfd/c6zj2RLM5I=", + "requires": { + "cldrjs": "^0.4.6" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "requires": { + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "intern": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/intern/-/intern-4.2.2.tgz", + "integrity": "sha512-yVe+IsWXAdZaj2LX9PiZ9KUQzru67zuCcIf28ulxh9bp7dvLvmyeEH1d+DpF78+zvl7ebAOEvX3NDQSc/PEdOQ==", + "dev": true, + "requires": { + "@dojo/core": "~0.5.0", + "@dojo/has": "~0.1.2", + "@dojo/interfaces": "~0.2.1", + "@dojo/shim": "~0.2.7", + "@theintern/digdug": "~2.1.0", + "@theintern/leadfoot": "~2.1.0", + "@types/benchmark": "~1.0.30", + "@types/chai": "~4.1.2", + "@types/charm": "~1.0.0", + "@types/diff": "~3.5.1", + "@types/express": "~4.11.1", + "@types/http-errors": "~1.6.1", + "@types/istanbul-lib-coverage": "~1.1.0", + "@types/istanbul-lib-hook": "~1.0.0", + "@types/istanbul-lib-instrument": "~1.7.1", + "@types/istanbul-lib-report": "~1.1.0", + "@types/istanbul-lib-source-maps": "~1.2.1", + "@types/istanbul-reports": "~1.1.0", + "@types/lodash": "~4.14.107", + "@types/mime-types": "~2.1.0", + "@types/platform": "~1.3.0", + "@types/resolve": "0.0.7", + "@types/shell-quote": "~1.6.0", + "@types/statuses": "~1.3.0", + "@types/ws": "~4.0.2", + "benchmark": "~2.1.4", + "body-parser": "~1.18.2", + "chai": "~4.1.2", + "charm": "~1.0.2", + "diff": "~3.5.0", + "express": "~4.16.3", + "glob": "~7.1.1", + "http-errors": "~1.6.3", + "istanbul-lib-coverage": "~1.2.0", + "istanbul-lib-hook": "~1.1.0", + "istanbul-lib-instrument": "~1.10.0", + "istanbul-lib-report": "~1.1.3", + "istanbul-lib-source-maps": "~1.2.4", + "istanbul-reports": "~1.3.0", + "lodash": "~4.17.5", + "mime-types": "~2.1.18", + "minimatch": "~3.0.4", + "platform": "~1.3.5", + "resolve": "~1.7.1", + "shell-quote": "~1.6.1", + "source-map": "~0.6.1", + "statuses": "~1.5.0", + "tslib": "~1.9.0", + "ws": "~5.1.1" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + } + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "intersection-observer": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.4.2.tgz", + "integrity": "sha512-SFGCL4d6A7J+aXNHTx94zV7ydngTKraDBvoJjn5iGgsXYhXgAXIYj8i3ewJoO80BRB7qtBB3sBlrdGNwTktzLg==" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul-lib-coverage": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", + "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", + "dev": true, + "requires": { + "append-transform": "^0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.0", + "semver": "^5.3.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz", + "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz", + "integrity": "sha512-8O2T/3VhrQHn0XcJbP1/GN7kXMiRAlPi+fj3uEHrjBD8Oz7Py0prSC25C09NuAZS6bgW1NNKAvCSHZXB0irSGA==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", + "dev": true, + "requires": { + "handlebars": "^4.0.3" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", + "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", + "dev": true, + "requires": { + "core-js": "~2.3.0", + "es6-promise": "~3.0.2", + "lie": "~3.1.0", + "pako": "~1.0.2", + "readable-stream": "~2.0.6" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "~1.33.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "requires": { + "boolbase": "~1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "pepjs": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/pepjs/-/pepjs-0.4.2.tgz", + "integrity": "sha1-EyZO6olJhP9CPIPkDS+k4d7Byfo=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "platform": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", + "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "q": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.0.1.tgz", + "integrity": "sha1-EYcq7t7okmgRCxCnGESP+xARKhQ=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "request-progress": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", + "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", + "requires": { + "throttleit": "~0.0.2" + } + }, + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "dev": true, + "requires": { + "commander": "~2.8.1" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "shx": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.2.2.tgz", + "integrity": "sha1-CjBNAgsO3xMGrYFXDoDwNG31ijk=", + "dev": true, + "requires": { + "es6-object-assign": "^1.0.3", + "minimist": "^1.2.0", + "shelljs": "^0.7.3" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "requires": { + "hoek": "4.x.x" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "requires": { + "is-natural-number": "^4.0.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tar-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", + "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.1.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.0", + "xtend": "^4.0.0" + } + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "^1.4.1" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tslib": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", + "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "typescript": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", + "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=" + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "unbzip2-stream": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", + "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", + "dev": true, + "requires": { + "buffer": "^3.0.1", + "through": "^2.3.6" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "web-animations-js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/web-animations-js/-/web-animations-js-2.3.1.tgz", + "integrity": "sha1-Om2bwVGWN3qQ+OKAP6UmIWWwRRA=" + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.1.1.tgz", + "integrity": "sha512-bOusvpCb09TOBLbpMKszd45WKC2KPtxiyiHanv+H2DE3Az+1db5a/L7sVJZVDPUC1Br8f0SKRr1KjLpD1U/IAw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/test-app/package.json b/test-app/package.json index e02bf82..304d951 100644 --- a/test-app/package.json +++ b/test-app/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "scripts": { "clean-dts": "shx rm -rf src/menu/menu.m.css.d.ts src/menu-item/menuItem.m.css.d.ts", - "install-build-widget": "npm install --no-save ../dist/dojo-cli-build-widget.tgz", + "install-build-widget": "npm install --no-save ../tarballs/dojo-webpack-contrib-3.0.0-alpha.1.tgz ../dist/dojo-cli-build-widget.tgz", "generate-fixtures": "shx rm -rf output & npm run clean-dts & dojo build && npm run clean-dts && dojo build --mode dev && npm run clean-dts && dojo build --mode test", "generate-unix-fixtures": "npm run generate-fixtures && shx cp -r output/* fixtures/unix/", "generate-windows-fixtures": "npm run generate-fixtures && shx cp -r output/* fixtures/windows/", @@ -12,17 +12,12 @@ "build-test": "dojo build --mode test" }, "dependencies": { - "@dojo/cli": "2.0.0", - "@dojo/shim": "2.0.0", - "@dojo/core": "2.0.0", - "@dojo/i18n": "2.0.0", - "@dojo/widget-core": "2.0.0", - "tslib": "1.8.0", + "@dojo/framework": "file:../tarballs/dojo-framework-3.0.0-pre.tgz", + "tslib": "~1.8.0", "typescript": "2.6.2" }, "devDependencies": { - "@dojo/test-extras": "2.0.0", "shx": "0.2.2", - "intern": "4.1.5" + "intern": "4.2.2" } } diff --git a/test-app/src/menu-item/MenuItem.ts b/test-app/src/menu-item/MenuItem.ts index c16f7ed..49a05b7 100644 --- a/test-app/src/menu-item/MenuItem.ts +++ b/test-app/src/menu-item/MenuItem.ts @@ -1,8 +1,8 @@ -import { v } from '@dojo/widget-core/d'; -import { customElement } from '@dojo/widget-core/decorators/customElement'; -import { WidgetProperties } from '@dojo/widget-core/interfaces'; -import { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed'; -import { WidgetBase } from '@dojo/widget-core/WidgetBase'; +import { v } from '@dojo/framework/widget-core/d'; +import { customElement } from '@dojo/framework/widget-core/decorators/customElement'; +import { WidgetProperties } from '@dojo/framework/widget-core/interfaces'; +import { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed'; +import { WidgetBase } from '@dojo/framework/widget-core/WidgetBase'; import * as css from './menuItem.m.css'; diff --git a/test-app/src/menu/Menu.ts b/test-app/src/menu/Menu.ts index ae92b68..5e396d2 100644 --- a/test-app/src/menu/Menu.ts +++ b/test-app/src/menu/Menu.ts @@ -1,8 +1,8 @@ -import { v } from '@dojo/widget-core/d'; -import { customElement } from '@dojo/widget-core/decorators/customElement'; -import { WidgetProperties, WNode } from '@dojo/widget-core/interfaces'; -import { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed'; -import { WidgetBase } from '@dojo/widget-core/WidgetBase'; +import { v } from '@dojo/framework/widget-core/d'; +import { customElement } from '@dojo/framework/widget-core/decorators/customElement'; +import { WidgetProperties, WNode } from '@dojo/framework/widget-core/interfaces'; +import { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed'; +import { WidgetBase } from '@dojo/framework/widget-core/WidgetBase'; import { MenuItem, MenuItemProperties } from '../menu-item/MenuItem'; import * as css from './menu.m.css'; diff --git a/test-app/tests/unit/menu-item/MenuItem.ts b/test-app/tests/unit/menu-item/MenuItem.ts index 99ca084..d79d056 100644 --- a/test-app/tests/unit/menu-item/MenuItem.ts +++ b/test-app/tests/unit/menu-item/MenuItem.ts @@ -1,7 +1,7 @@ const { describe, it } = intern.getInterface('bdd'); -import harness from '@dojo/test-extras/harness'; +import harness from '@dojo/framework/testing/harness'; -import { v } from '@dojo/widget-core/d'; +import { v } from '@dojo/framework/widget-core/d'; import { MenuItem } from '../../../src/menu-item/MenuItem'; import * as css from '../../../src/menu-item/menuItem.m.css'; diff --git a/test-app/tests/unit/menu/Menu.ts b/test-app/tests/unit/menu/Menu.ts index 95d1198..6664aa6 100644 --- a/test-app/tests/unit/menu/Menu.ts +++ b/test-app/tests/unit/menu/Menu.ts @@ -1,7 +1,7 @@ const { describe, it } = intern.getInterface('bdd'); -import harness from '@dojo/test-extras/harness'; +import harness from '@dojo/framework/testing/harness'; -import { v } from '@dojo/widget-core/d'; +import { v } from '@dojo/framework/widget-core/d'; import { Menu } from '../../../src/menu/Menu'; import * as css from '../../../src/menu/menu.m.css'; diff --git a/tsconfig.json b/tsconfig.json index d0149cf..fb8d8a0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,27 +2,15 @@ "compilerOptions": { "declaration": false, "module": "commonjs", - "strict": true, + "moduleResolution": "node", + "noUnusedLocals": true, "outDir": "_build/", "removeComments": false, "sourceMap": true, - "target": "es5", - "noUnusedLocals": true, - "moduleResolution": "node", + "strict": true, + "target": "es2016", "importHelpers": true, - "downlevelIteration": true, - "types": [ "intern" ], - "lib": [ - "dom", - "es5", - "es2015.core", - "es2015.promise", - "es2015.collection", - "es2015.iterable", - "es2015.promise", - "es2015.symbol", - "es2015.symbol.wellknown" - ] + "types": [ "intern" ] }, "include": [ "./src/**/*.ts", From 8bd3762bd54027b2b9a72d8a0cdc4bff3dfd2fc3 Mon Sep 17 00:00:00 2001 From: Bryan Forbes Date: Tue, 17 Jul 2018 16:18:52 -0700 Subject: [PATCH 2/5] Update Windows fixtures --- .../windows/dev/menu-item/menu-item-1.0.0.js | 529 ++- .../fixtures/windows/dev/menu/menu-1.0.0.js | 529 ++- .../windows/dist/menu-item/menu-item-1.0.0.js | 4 +- .../dist/menu-item/menu-item-1.0.0.js.map | 2 +- .../fixtures/windows/dist/menu/menu-1.0.0.js | 4 +- .../windows/dist/menu/menu-1.0.0.js.map | 2 +- .../windows/info/menu-item/report.html | 2 +- .../windows/info/menu-item/stats.json | 2984 +++++++++-------- .../fixtures/windows/info/menu/report.html | 2 +- .../fixtures/windows/info/menu/stats.json | 2968 ++++++++-------- test-app/fixtures/windows/test/functional.js | 2 +- test-app/fixtures/windows/test/unit.js | 500 ++- 12 files changed, 3778 insertions(+), 3750 deletions(-) diff --git a/test-app/fixtures/windows/dev/menu-item/menu-item-1.0.0.js b/test-app/fixtures/windows/dev/menu-item/menu-item-1.0.0.js index 996b186..9f75ff6 100644 --- a/test-app/fixtures/windows/dev/menu-item/menu-item-1.0.0.js +++ b/test-app/fixtures/windows/dev/menu-item/menu-item-1.0.0.js @@ -73,19 +73,19 @@ /************************************************************************/ /******/ ({ -/***/ "./node_modules/@dojo/core/Destroyable.mjs": +/***/ "./node_modules/@dojo/framework/core/Destroyable.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lang__ = __webpack_require__("./node_modules/@dojo/core/lang.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Promise__ = __webpack_require__("./node_modules/@dojo/shim/Promise.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lang__ = __webpack_require__("./node_modules/@dojo/framework/core/lang.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_Promise__ = __webpack_require__("./node_modules/@dojo/framework/shim/Promise.mjs"); /** * No operation function to replace own once instance is destoryed */ function noop() { - return __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Promise__["a" /* default */].resolve(false); + return __WEBPACK_IMPORTED_MODULE_1__shim_Promise__["a" /* default */].resolve(false); } /** * No op function used to replace own, once instance has been destoryed @@ -123,7 +123,7 @@ class Destroyable { * @returns {Promise { + return new __WEBPACK_IMPORTED_MODULE_1__shim_Promise__["a" /* default */]((resolve) => { this.handles.forEach((handle) => { handle && handle.destroy && handle.destroy(); }); @@ -140,19 +140,19 @@ class Destroyable { /***/ }), -/***/ "./node_modules/@dojo/core/Evented.mjs": +/***/ "./node_modules/@dojo/framework/core/Evented.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export isGlobMatch */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Destroyable__ = __webpack_require__("./node_modules/@dojo/core/Destroyable.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Destroyable__ = __webpack_require__("./node_modules/@dojo/framework/core/Destroyable.mjs"); /** * Map of computed regular expressions, keyed by string */ -const regexMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); +const regexMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); /** * Determines is the event type glob has been matched * @@ -183,12 +183,12 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /** * map of listeners keyed by event type */ - this.listenersMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this.listenersMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); } emit(event) { this.listenersMap.forEach((methods, type) => { if (isGlobMatch(type, event.type)) { - methods.forEach((method) => { + [...methods].forEach((method) => { method.call(this, event); }); } @@ -224,7 +224,7 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /***/ }), -/***/ "./node_modules/@dojo/core/lang.mjs": +/***/ "./node_modules/@dojo/framework/core/lang.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -238,8 +238,8 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /* unused harmony export partial */ /* unused harmony export createHandle */ /* harmony export (immutable) */ __webpack_exports__["b"] = createCompositeHandle; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__ = __webpack_require__("./node_modules/@dojo/shim/object.mjs"); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_object__ = __webpack_require__("./node_modules/@dojo/framework/shim/object.mjs"); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__shim_object__["a"]; }); const slice = Array.prototype.slice; @@ -317,7 +317,7 @@ function create(prototype, ...mixins) { } const args = mixins.slice(); args.unshift(Object.create(prototype)); - return __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__["a" /* assign */].apply(null, args); + return __WEBPACK_IMPORTED_MODULE_0__shim_object__["a" /* assign */].apply(null, args); } function deepAssign(target, ...sources) { return _mixin({ @@ -439,7 +439,7 @@ function createCompositeHandle(...handles) { /***/ }), -/***/ "./node_modules/@dojo/has/has.mjs": +/***/ "./node_modules/@dojo/framework/has/has.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -652,16 +652,16 @@ add('host-node', function () { /***/ }), -/***/ "./node_modules/@dojo/shim/Map.mjs": +/***/ "./node_modules/@dojo/framework/shim/Map.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Map; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__object__ = __webpack_require__("./node_modules/@dojo/shim/object.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__object__ = __webpack_require__("./node_modules/@dojo/framework/shim/object.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -761,15 +761,15 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Promise.mjs": +/***/ "./node_modules/@dojo/framework/shim/Promise.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export ShimPromise */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_queue__ = __webpack_require__("./node_modules/@dojo/shim/support/queue.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_queue__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/queue.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); @@ -974,15 +974,15 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Symbol.mjs": +/***/ "./node_modules/@dojo/framework/shim/Symbol.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export Symbol */ /* unused harmony export isSymbol */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -1131,15 +1131,15 @@ function isSymbol(value) { /***/ }), -/***/ "./node_modules/@dojo/shim/WeakMap.mjs": +/***/ "./node_modules/@dojo/framework/shim/WeakMap.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export WeakMap */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -1254,7 +1254,7 @@ if (false) { /***/ }), -/***/ "./node_modules/@dojo/shim/array.mjs": +/***/ "./node_modules/@dojo/framework/shim/array.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1265,11 +1265,11 @@ if (false) { /* unused harmony export find */ /* unused harmony export findIndex */ /* unused harmony export includes */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__number__ = __webpack_require__("./node_modules/@dojo/shim/number.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__number__ = __webpack_require__("./node_modules/@dojo/framework/shim/number.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -1521,7 +1521,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/global.mjs": +/***/ "./node_modules/@dojo/framework/shim/global.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1547,7 +1547,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/iterator.mjs": +/***/ "./node_modules/@dojo/framework/shim/iterator.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1555,8 +1555,8 @@ else { /* unused harmony export isArrayLike */ /* unused harmony export get */ /* unused harmony export forOf */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__string__ = __webpack_require__("./node_modules/@dojo/shim/string.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__string__ = __webpack_require__("./node_modules/@dojo/framework/shim/string.mjs"); const staticDone = { done: true, value: undefined }; @@ -1673,7 +1673,7 @@ function forOf(iterable, callback, thisArg) { /***/ }), -/***/ "./node_modules/@dojo/shim/number.mjs": +/***/ "./node_modules/@dojo/framework/shim/number.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1681,7 +1681,7 @@ function forOf(iterable, callback, thisArg) { /* unused harmony export isFinite */ /* unused harmony export isInteger */ /* unused harmony export isSafeInteger */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); /** * The smallest interval between two representable numbers. @@ -1745,7 +1745,7 @@ function isSafeInteger(value) { /***/ }), -/***/ "./node_modules/@dojo/shim/object.mjs": +/***/ "./node_modules/@dojo/framework/shim/object.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1758,9 +1758,9 @@ function isSafeInteger(value) { /* unused harmony export getOwnPropertyDescriptors */ /* unused harmony export entries */ /* unused harmony export values */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -1875,7 +1875,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/string.mjs": +/***/ "./node_modules/@dojo/framework/shim/string.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1889,9 +1889,9 @@ else { /* unused harmony export startsWith */ /* unused harmony export padEnd */ /* unused harmony export padStart */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -2200,33 +2200,33 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/support/has.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/has.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_has_has__ = __webpack_require__("./node_modules/@dojo/has/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__has_has__ = __webpack_require__("./node_modules/@dojo/framework/has/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); /* unused harmony reexport namespace */ -/* unused harmony default export */ var _unused_webpack_default_export = (__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["b" /* default */]); +/* unused harmony default export */ var _unused_webpack_default_export = (__WEBPACK_IMPORTED_MODULE_0__has_has__["b" /* default */]); /* ECMAScript 6 and 7 Features */ /* Array */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-array', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-array', () => { return (['from', 'of'].every((key) => key in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array) && ['findIndex', 'find', 'copyWithin'].every((key) => key in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype)); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-array-fill', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-array-fill', () => { if ('fill' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype) { /* Some versions of Safari do not properly implement this */ return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1; } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es7-array', () => 'includes' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es7-array', () => 'includes' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype, true); /* Map */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-map', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-map', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Map === 'function') { /* IE11 and older versions of Safari are missing critical ES6 Map functionality @@ -2249,7 +2249,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-map', () return false; }, true); /* Math */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-math', () => { return [ 'clz32', 'sign', @@ -2269,7 +2269,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math', ( 'hypot' ].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Math[name] === 'function'); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math-imul', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-math-imul', () => { if ('imul' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Math) { /* Some versions of Safari on ios do not properly implement this */ return Math.imul(0xffffffff, 5) === -5; @@ -2277,19 +2277,19 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math-imu return false; }, true); /* Object */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-object', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-object', () => { return true && ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Object[name] === 'function'); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es2017-object', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es2017-object', () => { return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Object[name] === 'function'); }, true); /* Observable */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es-observable', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Observable !== 'undefined', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es-observable', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Observable !== 'undefined', true); /* Promise */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-promise', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Promise !== 'undefined' && true, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-promise', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Promise !== 'undefined' && true, true); /* Set */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-set', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-set', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Set === 'function') { /* IE11 and older versions of Safari are missing critical ES6 Set functionality */ const set = new __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Set([1]); @@ -2298,7 +2298,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-set', () return false; }, true); /* String */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-string', () => { return ([ /* static methods */ 'fromCodePoint' @@ -2313,7 +2313,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string', 'includes' ].every((key) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].String.prototype[key] === 'function')); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string-raw', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-string-raw', () => { function getCallSite(callSite, ...substitutions) { const result = [...callSite]; result.raw = callSite.raw; @@ -2328,13 +2328,13 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string-r } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es2017-string', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es2017-string', () => { return ['padStart', 'padEnd'].every((key) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].String.prototype[key] === 'function'); }, true); /* Symbol */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-symbol', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Symbol !== 'undefined' && typeof Symbol() === 'symbol', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-symbol', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Symbol !== 'undefined' && typeof Symbol() === 'symbol', true); /* WeakMap */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-weakmap', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-weakmap', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].WeakMap !== 'undefined') { /* IE11 and older versions of Safari are missing critical ES6 Map functionality */ const key1 = {}; @@ -2346,16 +2346,16 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-weakmap' return false; }, true); /* Miscellaneous features */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('microtasks', () => true || false || true, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('postmessage', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('microtasks', () => true || false || true, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('postmessage', () => { // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist. return typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].window !== 'undefined' && typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].postMessage === 'function'; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('raf', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].requestAnimationFrame === 'function', true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('setimmediate', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].setImmediate !== 'undefined', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('raf', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].requestAnimationFrame === 'function', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('setimmediate', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].setImmediate !== 'undefined', true); /* DOM Features */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-mutationobserver', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('dom-mutationobserver', () => { if (true && Boolean(__WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].MutationObserver || __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].WebKitMutationObserver)) { // IE11 has an unreliable MutationObserver implementation where setProperty() does not // generate a mutation event, observers can crash, and the queue does not drain @@ -2371,18 +2371,18 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-mutation } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-webanimation', () => true && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Animation !== undefined && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].KeyframeEffect !== undefined, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('dom-webanimation', () => true && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Animation !== undefined && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].KeyframeEffect !== undefined, true); //# sourceMappingURL=has.mjs.map /***/ }), -/***/ "./node_modules/@dojo/shim/support/queue.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/queue.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export queueMicroTask */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); function executeTask(item) { @@ -2576,7 +2576,7 @@ let queueMicroTask = (function () { /***/ }), -/***/ "./node_modules/@dojo/shim/support/util.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/util.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -2608,13 +2608,13 @@ function wrapNative(nativeFunction) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/Injector.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/Injector.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); -class Injector extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* Evented */] { +class Injector extends __WEBPACK_IMPORTED_MODULE_0__core_Evented__["a" /* Evented */] { constructor(payload) { super(); this._payload = payload; @@ -2639,13 +2639,13 @@ class Injector extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* E /***/ }), -/***/ "./node_modules/@dojo/widget-core/NodeHandler.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export NodeEventType */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); /** @@ -2658,10 +2658,10 @@ var NodeEventType; NodeEventType["Projector"] = "Projector"; NodeEventType["Widget"] = "Widget"; })(NodeEventType || (NodeEventType = {})); -class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* Evented */] { +class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__core_Evented__["a" /* Evented */] { constructor() { super(...arguments); - this._nodeMap = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._nodeMap = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } get(key) { return this._nodeMap.get(key); @@ -2690,16 +2690,16 @@ class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" / /***/ }), -/***/ "./node_modules/@dojo/widget-core/Registry.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/Registry.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["d"] = isWidgetBaseConstructor; /* unused harmony export isWidgetConstructorDefaultExport */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__ = __webpack_require__("./node_modules/@dojo/shim/Promise.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Promise__ = __webpack_require__("./node_modules/@dojo/framework/shim/Promise.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); @@ -2707,7 +2707,7 @@ class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" / /** * Widget base symbol type */ -const WIDGET_BASE_TYPE = Object(__WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__["a" /* default */])('Widget Base'); +const WIDGET_BASE_TYPE = Object(__WEBPACK_IMPORTED_MODULE_2__shim_Symbol__["a" /* default */])('Widget Base'); /* harmony export (immutable) */ __webpack_exports__["b"] = WIDGET_BASE_TYPE; /** @@ -2728,7 +2728,7 @@ function isWidgetConstructorDefaultExport(item) { /** * The Registry implementation */ -class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* Evented */] { +class Registry extends __WEBPACK_IMPORTED_MODULE_3__core_Evented__["a" /* Evented */] { /** * Emit loaded event for registry label */ @@ -2741,13 +2741,13 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E } define(label, item) { if (this._widgetRegistry === undefined) { - this._widgetRegistry = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._widgetRegistry = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } if (this._widgetRegistry.has(label)) { throw new Error(`widget has already been registered for '${label.toString()}'`); } this._widgetRegistry.set(label, item); - if (item instanceof __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__["a" /* default */]) { + if (item instanceof __WEBPACK_IMPORTED_MODULE_0__shim_Promise__["a" /* default */]) { item.then((widgetCtor) => { this._widgetRegistry.set(label, widgetCtor); this.emitLoadedEvent(label, widgetCtor); @@ -2762,12 +2762,12 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E } defineInjector(label, injectorFactory) { if (this._injectorRegistry === undefined) { - this._injectorRegistry = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._injectorRegistry = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } if (this._injectorRegistry.has(label)) { throw new Error(`injector has already been registered for '${label.toString()}'`); } - const invalidator = new __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* Evented */](); + const invalidator = new __WEBPACK_IMPORTED_MODULE_3__core_Evented__["a" /* Evented */](); const injectorItem = { injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })), invalidator @@ -2783,7 +2783,7 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E if (isWidgetBaseConstructor(item)) { return item; } - if (item instanceof __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__["a" /* default */]) { + if (item instanceof __WEBPACK_IMPORTED_MODULE_0__shim_Promise__["a" /* default */]) { return null; } const promise = item(); @@ -2820,22 +2820,22 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E /***/ }), -/***/ "./node_modules/@dojo/widget-core/RegistryHandler.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); -class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__["a" /* Evented */] { +class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__core_Evented__["a" /* Evented */] { constructor() { super(); this._registry = new __WEBPACK_IMPORTED_MODULE_2__Registry__["a" /* Registry */](); - this._registryWidgetLabelMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["a" /* Map */](); - this._registryInjectorLabelMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["a" /* Map */](); + this._registryWidgetLabelMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["a" /* Map */](); + this._registryInjectorLabelMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["a" /* Map */](); this.own(this._registry); const destroy = () => { if (this.baseRegistry) { @@ -2904,19 +2904,19 @@ class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__[" /***/ }), -/***/ "./node_modules/@dojo/widget-core/WidgetBase.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__diff__ = __webpack_require__("./node_modules/@dojo/widget-core/diff.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__RegistryHandler__ = __webpack_require__("./node_modules/@dojo/widget-core/RegistryHandler.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__NodeHandler__ = __webpack_require__("./node_modules/@dojo/widget-core/NodeHandler.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__vdom__ = __webpack_require__("./node_modules/@dojo/widget-core/vdom.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__RegistryHandler__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__NodeHandler__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/NodeHandler.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__vdom__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); @@ -2926,9 +2926,9 @@ class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__[" -const decoratorMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); +const decoratorMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); const boundAuto = __WEBPACK_IMPORTED_MODULE_4__diff__["a" /* auto */].bind(null); -const noBind = __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__["a" /* default */].for('dojoNoBind'); +const noBind = __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__["a" /* default */].for('dojoNoBind'); /* harmony export (immutable) */ __webpack_exports__["b"] = noBind; /** @@ -2950,7 +2950,7 @@ class WidgetBase { this._nodeHandler = new __WEBPACK_IMPORTED_MODULE_6__NodeHandler__["a" /* default */](); this._handles = []; this._children = []; - this._decoratorCache = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this._decoratorCache = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); this._properties = {}; this._boundRenderFunc = this.render.bind(this); this._boundInvalidate = this.invalidate.bind(this); @@ -2975,7 +2975,7 @@ class WidgetBase { } meta(MetaType) { if (this._metaMap === undefined) { - this._metaMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this._metaMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); } let cached = this._metaMap.get(MetaType); if (!cached) { @@ -3059,9 +3059,14 @@ class WidgetBase { } } if (runReactions) { - this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => { - if (args.changed) { - reaction.call(this, args.previousProperties, args.newProperties); + const reactionFunctions = this.getDecorator('diffReaction'); + const executedReactions = []; + reactionFunctions.forEach(({ reaction, propertyName }) => { + const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1; + const reactionRun = executedReactions.indexOf(reaction) !== -1; + if (propertyChanged && !reactionRun) { + reaction.call(this, this._properties, diffPropertyResults); + executedReactions.push(reaction); } }); } @@ -3124,7 +3129,7 @@ class WidgetBase { if (this.hasOwnProperty('constructor')) { let decoratorList = decoratorMap.get(this.constructor); if (!decoratorList) { - decoratorList = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + decoratorList = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); decoratorMap.set(this.constructor, decoratorList); } let specificDecoratorList = decoratorList.get(decoratorKey); @@ -3176,26 +3181,6 @@ class WidgetBase { this._decoratorCache.set(decoratorKey, allDecorators); return allDecorators; } - _mapDiffPropertyReactions(newProperties, changedPropertyKeys) { - const reactionFunctions = this.getDecorator('diffReaction'); - return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => { - let reactionArguments = reactionPropertyMap.get(reaction); - if (reactionArguments === undefined) { - reactionArguments = { - previousProperties: {}, - newProperties: {}, - changed: false - }; - } - reactionArguments.previousProperties[propertyName] = this._properties[propertyName]; - reactionArguments.newProperties[propertyName] = newProperties[propertyName]; - if (changedPropertyKeys.indexOf(propertyName) !== -1) { - reactionArguments.changed = true; - } - reactionPropertyMap.set(reaction, reactionArguments); - return reactionPropertyMap; - }, new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */]()); - } /** * Binds unbound property functions to the specified `bind` property * @@ -3204,7 +3189,7 @@ class WidgetBase { _bindFunctionProperty(property, bind) { if (typeof property === 'function' && !property[noBind] && Object(__WEBPACK_IMPORTED_MODULE_8__Registry__["d" /* isWidgetBaseConstructor */])(property) === false) { if (this._bindFunctionPropertyMap === undefined) { - this._bindFunctionPropertyMap = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__["a" /* default */](); + this._bindFunctionPropertyMap = new __WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__["a" /* default */](); } const bindInfo = this._bindFunctionPropertyMap.get(property) || {}; let { boundFunc, scope } = bindInfo; @@ -3258,7 +3243,7 @@ class WidgetBase { runAfterRenders(dNode) { const afterRenders = this.getDecorator('afterRender'); if (afterRenders.length > 0) { - return afterRenders.reduce((dNode, afterRenderFunction) => { + dNode = afterRenders.reduce((dNode, afterRenderFunction) => { return afterRenderFunction.call(this, dNode); }, dNode); } @@ -3298,7 +3283,7 @@ WidgetBase._type = __WEBPACK_IMPORTED_MODULE_8__Registry__["b" /* WIDGET_BASE_TY /***/ }), -/***/ "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3368,7 +3353,7 @@ function enter(node, properties, enterAnimation) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/d.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/d.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3380,24 +3365,24 @@ function enter(node, properties, enterAnimation) { /* harmony export (immutable) */ __webpack_exports__["h"] = w; /* harmony export (immutable) */ __webpack_exports__["g"] = v; /* harmony export (immutable) */ __webpack_exports__["c"] = dom; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); /** * The symbol identifier for a WNode type */ -const WNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a WNode.'); +const WNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a WNode.'); /* harmony export (immutable) */ __webpack_exports__["b"] = WNODE; /** * The symbol identifier for a VNode type */ -const VNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a VNode.'); +const VNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a VNode.'); /* harmony export (immutable) */ __webpack_exports__["a"] = VNODE; /** * The symbol identifier for a VNode type created using dom() */ -const DOMVNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a VNode created using existing dom.'); +const DOMVNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a VNode created using existing dom.'); /* unused harmony export DOMVNODE */ /** @@ -3499,12 +3484,12 @@ function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, child /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/afterRender.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = afterRender; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); function afterRender(method) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { @@ -3516,13 +3501,13 @@ function afterRender(method) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = alwaysRender; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__beforeProperties__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__beforeProperties__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs"); function alwaysRender() { @@ -3537,12 +3522,12 @@ function alwaysRender() { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = beforeProperties; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); function beforeProperties(method) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { @@ -3554,13 +3539,13 @@ function beforeProperties(method) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/customElement.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = customElement; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__registerCustomElement__ = __webpack_require__("./node_modules/@dojo/widget-core/registerCustomElement.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__registerCustomElement__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); /** @@ -3584,12 +3569,14 @@ function customElement({ tag, properties = [], attributes = [], events = [], chi /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = diffProperty; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); + /** * Decorator that can be used to register a function as a specific property diff @@ -3598,7 +3585,7 @@ function customElement({ tag, properties = [], attributes = [], events = [], chi * @param diffType The diff type, default is DiffType.AUTO. * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM */ -function diffProperty(propertyName, diffFunction, reactionFunction) { +function diffProperty(propertyName, diffFunction = __WEBPACK_IMPORTED_MODULE_1__diff__["a" /* auto */], reactionFunction) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null)); target.addDecorator('registeredDiffProperty', propertyName); @@ -3615,7 +3602,7 @@ function diffProperty(propertyName, diffFunction, reactionFunction) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3641,21 +3628,21 @@ function handleDecorator(handler) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/inject.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = inject; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__beforeProperties__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__beforeProperties__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs"); /** * Map of instances against registered injectors. */ -const registeredInjectorsMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__["a" /* default */](); +const registeredInjectorsMap = new __WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__["a" /* default */](); /** * Decorator retrieves an injector from an available registry using the name and * calls the `getProperties` function with the payload from the injector @@ -3689,7 +3676,7 @@ function inject({ name, getProperties }) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/diff.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/diff.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3698,7 +3685,7 @@ function inject({ name, getProperties }) { /* unused harmony export reference */ /* harmony export (immutable) */ __webpack_exports__["b"] = shallow; /* harmony export (immutable) */ __webpack_exports__["a"] = auto; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); function isObjectOrArray(value) { return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value); @@ -3768,7 +3755,7 @@ function auto(previousProperty, newProperty) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Projector.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3776,11 +3763,11 @@ function auto(previousProperty, newProperty) { /* unused harmony export AttachType */ /* harmony export (immutable) */ __webpack_exports__["a"] = ProjectorMixin; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__ = __webpack_require__("./node_modules/@dojo/core/lang.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__ = __webpack_require__("./node_modules/@dojo/widget-core/animations/cssTransitions.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/afterRender.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__vdom__ = __webpack_require__("./node_modules/@dojo/widget-core/vdom.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_lang__ = __webpack_require__("./node_modules/@dojo/framework/core/lang.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__vdom__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.mjs"); @@ -3878,7 +3865,7 @@ function ProjectorMixin(Base) { this._projectorProperties.registry.destroy(); } } - this._projectorProperties = Object(__WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__["a" /* assign */])({}, properties); + this._projectorProperties = Object(__WEBPACK_IMPORTED_MODULE_1__core_lang__["a" /* assign */])({}, properties); super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry }); super.__setProperties__(properties); } @@ -3929,10 +3916,7 @@ function ProjectorMixin(Base) { } } __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ - Object(__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__["a" /* afterRender */])(), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:type", Function), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:paramtypes", [Object]), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:returntype", void 0) + Object(__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__["a" /* afterRender */])() ], Projector.prototype, "afterRender", null); return Projector; } @@ -3941,7 +3925,7 @@ function ProjectorMixin(Base) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Themed.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3949,11 +3933,11 @@ function ProjectorMixin(Base) { /* harmony export (immutable) */ __webpack_exports__["b"] = registerThemeInjector; /* harmony export (immutable) */ __webpack_exports__["a"] = ThemedMixin; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Injector__ = __webpack_require__("./node_modules/@dojo/widget-core/Injector.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__decorators_inject__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/inject.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/diffProperty.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__diff__ = __webpack_require__("./node_modules/@dojo/widget-core/diff.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Injector__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Injector.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__decorators_inject__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/inject.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); @@ -4066,7 +4050,7 @@ function ThemedMixin(Base) { const baseThemes = this.getDecorator('baseThemeClasses'); if (!this._registeredBaseTheme) { this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => { - const _a = THEME_KEY, key = baseTheme[_a], classes = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __rest */](baseTheme, [typeof _a === "symbol" ? _a : _a + ""]); + const _a = THEME_KEY, key = baseTheme[_a], classes = __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __rest */](baseTheme, [typeof _a === "symbol" ? _a : _a + ""]); this._registeredBaseThemeKeys.push(key); return Object.assign({}, finalBaseTheme, classes); }, {}); @@ -4080,10 +4064,7 @@ function ThemedMixin(Base) { }; __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('theme', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]), - Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('extraClasses', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:type", Function), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:paramtypes", []), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:returntype", void 0) + Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('extraClasses', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]) ], Themed.prototype, "onPropertiesChanged", null); Themed = __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ Object(__WEBPACK_IMPORTED_MODULE_2__decorators_inject__["a" /* inject */])({ @@ -4103,7 +4084,7 @@ function ThemedMixin(Base) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/registerCustomElement.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -4113,13 +4094,13 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony export (immutable) */ __webpack_exports__["create"] = create; /* harmony export (immutable) */ __webpack_exports__["register"] = register; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__WidgetBase__ = __webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__mixins_Projector__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Projector.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__ = __webpack_require__("./node_modules/@dojo/shim/array.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__mixins_Themed__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__WidgetBase__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__mixins_Projector__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__shim_array__ = __webpack_require__("./node_modules/@dojo/framework/shim/array.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__shim_global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__mixins_Themed__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs"); @@ -4216,7 +4197,7 @@ function create(descriptor, WidgetConstructor) { }); Object.defineProperties(this, domProperties); const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children; - Object(__WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__["a" /* from */])(children).forEach((childNode) => { + Object(__WEBPACK_IMPORTED_MODULE_3__shim_array__["a" /* from */])(children).forEach((childNode) => { if (childType === CustomElementChildType.DOJO) { childNode.addEventListener('dojo-ce-render', () => this._render()); childNode.addEventListener('dojo-ce-connected', () => this._render()); @@ -4236,7 +4217,7 @@ function create(descriptor, WidgetConstructor) { }; const registry = registryFactory(); const themeContext = Object(__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__["b" /* registerThemeInjector */])(this._getTheme(), registry); - __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme())); + __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme())); const Projector = Object(__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__["a" /* ProjectorMixin */])(Wrapper); this._projector = new Projector(); this._projector.setProperties({ registry }); @@ -4248,8 +4229,8 @@ function create(descriptor, WidgetConstructor) { })); } _getTheme() { - if (__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */] && __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce && __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.theme) { - return __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.themes[__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.theme]; + if (__WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */] && __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce && __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.theme) { + return __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.themes[__WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.theme]; } } _childConnected(e) { @@ -4329,25 +4310,25 @@ function register(WidgetConstructor) { if (!descriptor) { throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?'); } - __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor)); + __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor)); } /* harmony default export */ __webpack_exports__["default"] = (register); //# sourceMappingURL=registerCustomElement.mjs.map /***/ }), -/***/ "./node_modules/@dojo/widget-core/vdom.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/vdom.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export toParentVNode */ /* unused harmony export toTextVNode */ /* unused harmony export filterAndDecorateChildren */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__ = __webpack_require__("./node_modules/@dojo/shim/array.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_array__ = __webpack_require__("./node_modules/@dojo/framework/shim/array.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); @@ -4357,11 +4338,13 @@ const NAMESPACE_W3 = 'http://www.w3.org/'; const NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg'; const NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink'; const emptyArray = []; -const widgetInstanceMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); +const nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click']; +const widgetInstanceMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); /* harmony export (immutable) */ __webpack_exports__["b"] = widgetInstanceMap; -const instanceMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); -const projectorStateMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); +const instanceMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); +const nextSiblingMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); +const projectorStateMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); function same(dnode1, dnode2) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(dnode1) && Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(dnode2)) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["d" /* isDomVNode */])(dnode1) || Object(__WEBPACK_IMPORTED_MODULE_2__d__["d" /* isDomVNode */])(dnode2)) { @@ -4418,7 +4401,7 @@ function checkStyleValue(styleValue) { } function updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) { const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); - const eventMap = projectorState.nodeMap.get(domNode) || new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); + const eventMap = projectorState.nodeMap.get(domNode) || new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); if (previousValue) { const previousEvent = eventMap.get(previousValue); domNode.removeEventListener(eventName, previousEvent); @@ -4478,7 +4461,7 @@ function buildPreviousProperties(domNode, previous, current) { }, {}); return newProperties; } -function focusNode(propValue, previousValue, domNode, projectionOptions) { +function nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) { let result; if (typeof propValue === 'function') { result = propValue(); @@ -4489,7 +4472,7 @@ function focusNode(propValue, previousValue, domNode, projectionOptions) { if (result === true) { const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); projectorState.deferredRenderCallbacks.push(() => { - domNode.focus(); + domNode[propName](); }); } } @@ -4585,8 +4568,8 @@ function updateProperties(domNode, previousProperties, properties, projectionOpt } } } - else if (propName === 'focus') { - focusNode(propValue, previousValue, domNode, projectionOptions); + else if (nodeOperations.indexOf(propName) !== -1) { + nodeOperation(propName, propValue, previousValue, domNode, projectionOptions); } else if (propName === 'styles') { const styleNames = Object.keys(propValue); @@ -4740,7 +4723,8 @@ function nodeAdded(dnode, transitions) { } function nodeToRemove(dnode, transitions, projectionOptions) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { - const rendered = dnode.rendered || emptyArray; + const item = instanceMap.get(dnode.instance); + const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray; if (dnode.instance) { const instanceData = widgetInstanceMap.get(dnode.instance); instanceData.onDetach(); @@ -4804,7 +4788,7 @@ function checkDistinguishable(childNodes, indexToCheck, parentInstance) { } } } -function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) { +function updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) { oldChildren = oldChildren || emptyArray; newChildren = newChildren; const oldChildrenLength = oldChildren.length; @@ -4824,38 +4808,49 @@ function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, p addDeferredProperties(newChild, projectionOptions); } if (oldChild !== undefined && same(oldChild, newChild)) { - textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated; oldIndex++; newIndex++; + textUpdated = + updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated; continue; } const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1); const addChild = () => { let insertBeforeDomNode = undefined; + let childrenArray = oldChildren; + let nextIndex = oldIndex + 1; let child = oldChildren[oldIndex]; + if (!child) { + child = siblings[0]; + nextIndex = 1; + childrenArray = siblings; + } if (child) { - let nextIndex = oldIndex + 1; let insertBeforeChildren = [child]; while (insertBeforeChildren.length) { const insertBefore = insertBeforeChildren.shift(); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(insertBefore)) { - if (insertBefore.rendered) { - insertBeforeChildren.push(...insertBefore.rendered); + const item = instanceMap.get(insertBefore.instance); + if (item && item.dnode.rendered) { + insertBeforeChildren.push(...item.dnode.rendered); } } else { if (insertBefore.domNode) { + if (insertBefore.domNode.parentElement !== parentVNode.domNode) { + break; + } insertBeforeDomNode = insertBefore.domNode; break; } } - if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) { - insertBeforeChildren.push(oldChildren[nextIndex]); + if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) { + insertBeforeChildren.push(childrenArray[nextIndex]); nextIndex++; } } } - createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance); + createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance); nodeAdded(newChild, transitions); const indexToCheck = newIndex; projectorState.afterRenderCallbacks.push(() => { @@ -4916,12 +4911,13 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i } const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); if (projectorState.merge && childNodes === undefined) { - childNodes = Object(__WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__["a" /* from */])(parentVNode.domNode.childNodes); + childNodes = Object(__WEBPACK_IMPORTED_MODULE_1__shim_array__["a" /* from */])(parentVNode.domNode.childNodes); } const transitions = projectionOptions.transitions; projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 }); for (let i = 0; i < children.length; i++) { const child = children[i]; + const nextSiblings = children.slice(i + 1); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(child)) { if (projectorState.merge && childNodes) { let domElement = undefined; @@ -4932,10 +4928,10 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i } } } - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance); } else { - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes); } nodeAdded(child, transitions); } @@ -4963,7 +4959,7 @@ function initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOpt } dnode.inserted = true; } -function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) { +function createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) { let domNode; const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { @@ -4978,6 +4974,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } const instance = new widgetConstructor(); dnode.instance = instance; + nextSiblingMap.set(instance, nextSiblings); const instanceData = widgetInstanceMap.get(instance); instanceData.invalidate = () => { instanceData.dirty = true; @@ -5058,7 +5055,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } } } -function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) { +function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { const { instance } = previous; const { parentVNode, dnode: node } = instanceMap.get(instance); @@ -5068,12 +5065,13 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan instance.__setCoreProperties__(dnode.coreProperties); instance.__setChildren__(dnode.children); instance.__setProperties__(dnode.properties); + nextSiblingMap.set(instance, nextSiblings); dnode.instance = instance; if (instanceData.dirty === true) { const rendered = instance.__render__(); instanceData.rendering = false; dnode.rendered = filterAndDecorateChildren(rendered, instance); - updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions); + updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions); } else { instanceData.rendering = false; @@ -5106,7 +5104,7 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan const children = filterAndDecorateChildren(dnode.children, parentInstance); dnode.children = children; updated = - updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated; + updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated; } const previousProperties = buildPreviousProperties(domNode, previous, dnode); if (dnode.attributes && dnode.events) { @@ -5156,7 +5154,7 @@ function runDeferredRenderCallbacks(projectionOptions) { } } else { - __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestAnimationFrame(() => { + __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestAnimationFrame(() => { while (projectorState.deferredRenderCallbacks.length) { const callback = projectorState.deferredRenderCallbacks.shift(); callback && callback(); @@ -5174,8 +5172,8 @@ function runAfterRenderCallbacks(projectionOptions) { } } else { - if (__WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestIdleCallback) { - __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestIdleCallback(() => { + if (__WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestIdleCallback) { + __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestIdleCallback(() => { while (projectorState.afterRenderCallbacks.length) { const callback = projectorState.afterRenderCallbacks.shift(); callback && callback(); @@ -5198,7 +5196,7 @@ function scheduleRender(projectionOptions) { render(projectionOptions); } else if (projectorState.renderScheduled === undefined) { - projectorState.renderScheduled = __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestAnimationFrame(() => { + projectorState.renderScheduled = __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestAnimationFrame(() => { render(projectionOptions); }); } @@ -5217,7 +5215,8 @@ function render(projectionOptions) { previouslyRendered.push(instance); const { parentVNode, dnode } = instanceMap.get(instance); const instanceData = widgetInstanceMap.get(instance); - updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance); + const nextSiblings = nextSiblingMap.get(instance); + updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings); } } runAfterRenderCallbacks(projectionOptions); @@ -5230,7 +5229,7 @@ const dom = { const projectorState = { afterRenderCallbacks: [], deferredRenderCallbacks: [], - nodeMap: new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](), + nodeMap: new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](), renderScheduled: undefined, renderQueue: [], merge: projectionOptions.merge || false, @@ -5248,7 +5247,7 @@ const dom = { scheduleRender(finalProjectorOptions); } }; - updateDom(node, node, finalProjectorOptions, parentVNode, instance); + updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []); projectorState.afterRenderCallbacks.push(() => { instanceData.onAttach(); }); @@ -5282,7 +5281,7 @@ const dom = { /*** IMPORTS FROM imports-loader ***/ var widgetFactory = __webpack_require__("./src/menu-item/MenuItem.ts"); -var registerCustomElement = __webpack_require__("./node_modules/@dojo/widget-core/registerCustomElement.mjs").default; +var registerCustomElement = __webpack_require__("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs").default; var defaultExport = widgetFactory.default; defaultExport && registerCustomElement(defaultExport); @@ -5488,10 +5487,10 @@ process.umask = function() { return 0; }; "use strict"; /* unused harmony export __extends */ /* unused harmony export __assign */ -/* harmony export (immutable) */ __webpack_exports__["c"] = __rest; +/* harmony export (immutable) */ __webpack_exports__["b"] = __rest; /* harmony export (immutable) */ __webpack_exports__["a"] = __decorate; /* unused harmony export __param */ -/* harmony export (immutable) */ __webpack_exports__["b"] = __metadata; +/* unused harmony export __metadata */ /* unused harmony export __awaiter */ /* unused harmony export __generator */ /* unused harmony export __exportStar */ @@ -5708,10 +5707,10 @@ module.exports = g; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MenuItem", function() { return MenuItem; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/customElement.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__ = __webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__ = __webpack_require__("./src/menu-item/menuItem.m.css"); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__menuItem_m_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__); @@ -5720,14 +5719,14 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -let MenuItem = class MenuItem extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__["a" /* ThemedMixin */])(__WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__["a" /* WidgetBase */]) { +let MenuItem = class MenuItem extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__["a" /* ThemedMixin */])(__WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__["a" /* WidgetBase */]) { _onClick() { this.properties.onSelected && this.properties.onSelected(this.properties.data); } render() { const { title, selected } = this.properties; - return Object(__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__["g" /* v */])('li', { classes: this.theme(__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__["root"]) }, [ - Object(__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__["g" /* v */])('span', { + return Object(__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__["g" /* v */])('li', { classes: this.theme(__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__["root"]) }, [ + Object(__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__["g" /* v */])('span', { classes: this.theme([__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__["item"], selected ? __WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__["selected"] : null]), onclick: this._onClick }, [title]) @@ -5735,13 +5734,13 @@ let MenuItem = class MenuItem extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_w } }; MenuItem = __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ - Object(__WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__["a" /* customElement */])({ + Object(__WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__["a" /* customElement */])({ tag: 'demo-menu-item', attributes: ['title', 'selected'], events: ['onSelected'], properties: ['data', 'selected'] }), - Object(__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__["c" /* theme */])(__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__) + Object(__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__["c" /* theme */])(__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__) ], MenuItem); /* harmony default export */ __webpack_exports__["default"] = (MenuItem); @@ -5766,4 +5765,4 @@ module.exports = __webpack_require__("./node_modules/imports-loader/index.js?wid /***/ }) /******/ }));; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgYjc5NDY0NmU4ZDE5YjUwOTczZGYiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRGVzdHJveWFibGUubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0V2ZW50ZWQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL2xhbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9oYXMvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9NYXAubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1Byb21pc2UubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1N5bWJvbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vV2Vha01hcC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vYXJyYXkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2dsb2JhbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vaXRlcmF0b3IubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL251bWJlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vb2JqZWN0Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdHJpbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N1cHBvcnQvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3F1ZXVlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3V0aWwubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9JbmplY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL05vZGVIYW5kbGVyLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvUmVnaXN0cnkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9XaWRnZXRCYXNlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hbHdheXNSZW5kZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2JlZm9yZVByb3BlcnRpZXMubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9pbmplY3QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kaWZmLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS92ZG9tLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS1pdGVtL01lbnVJdGVtLnRzIiwid2VicGFjazovLy8uL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3M/NmE5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7QUM3RGdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSx3Qzs7Ozs7Ozs7Ozs7QUN2REE7QUFDc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0NBQWdDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2RWlCO0FBQ0E7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsaUM7Ozs7Ozs7Ozs7OztBQ25NQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8saUJBQWlCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkUsUUFBUTtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnQzs7Ozs7Ozs7Ozs7Ozs7O0FDbk1vQztBQUNwQztBQUN5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLHFCQUFxQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxZQUFZO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFlBQVk7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0M7Ozs7Ozs7Ozs7Ozs7QUMvRkE7QUFDeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsV0FBVztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7O0FDdE1BO0FBQ0E7QUFDNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxtQzs7Ozs7Ozs7Ozs7OztBQ2hKQTtBQUNzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxxQkFBcUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGdDQUFnQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNrQztBQUNQO0FBQzNCO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3RELG9EQUFvRDtBQUNwRCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFlBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVM7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0M7Ozs7Ozs7O0FDdlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLG1DOzs7Ozs7Ozs7Ozs7Ozs7QUNqQkE7QUFDaUQ7QUFDakQsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDOzs7Ozs7Ozs7Ozs7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREE7QUFDQTtBQUNtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNBO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFlBQVk7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0Y7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DOzs7Ozs7Ozs7OztBQ3hTbUI7QUFDbkI7MEVBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsRUFBRTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxFQUFFO0FBQ2pFLG1DQUFtQyxtQkFBbUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxnQzs7Ozs7Ozs7Ozs7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Qzs7Ozs7Ozs7QUNyWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELGNBQWM7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSw4REFBOEQsZUFBZTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxpQkFBaUIsS0FBSztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMkJBQTJCO0FBQ3REO0FBQ0E7QUFD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RUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLHlEQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvRCxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDdEIsRUFDRCxDQUFDLEtBQUssQ0FBQyxDQUNQO1NBQ0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNEO0FBbkJZLFFBQVE7SUFQcEIseUdBQWEsQ0FBcUI7UUFDbEMsR0FBRyxFQUFFLGdCQUFnQjtRQUNyQixVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO1FBQ2pDLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQztRQUN0QixVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDO0tBQ2hDLENBQUM7SUFDRCxzRkFBSyxDQUFDLDZDQUFHLENBQUM7R0FDRSxRQUFRLENBbUJwQjtBQW5Cb0I7QUFxQnJCLCtEQUFlLFFBQVEsRUFBQzs7Ozs7Ozs7QUMzQ3hCO0FBQ0Esa0JBQWtCLHdJIiwiZmlsZSI6Im1lbnUtaXRlbS0xLjAuMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGI3OTQ2NDZlOGQxOWI1MDk3M2RmIiwiaW1wb3J0IHsgY3JlYXRlQ29tcG9zaXRlSGFuZGxlIH0gZnJvbSAnLi9sYW5nJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ0Bkb2pvL3NoaW0vUHJvbWlzZSc7XG4vKipcbiAqIE5vIG9wZXJhdGlvbiBmdW5jdGlvbiB0byByZXBsYWNlIG93biBvbmNlIGluc3RhbmNlIGlzIGRlc3RvcnllZFxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xufVxuLyoqXG4gKiBObyBvcCBmdW5jdGlvbiB1c2VkIHRvIHJlcGxhY2Ugb3duLCBvbmNlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3RvcnllZFxuICovXG5mdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIG1hZGUgdG8gZGVzdHJveWVkIG1ldGhvZCcpO1xufVxuZXhwb3J0IGNsYXNzIERlc3Ryb3lhYmxlIHtcbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVzID0gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGhhbmRsZXMgZm9yIHRoZSBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gYHRoaXMuZGVzdHJveWAgaXMgY2FsbGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0hhbmRsZX0gaGFuZGxlIFRoZSBoYW5kbGUgdG8gYWRkIGZvciB0aGUgaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyB7SGFuZGxlfSBhIGhhbmRsZSBmb3IgdGhlIGhhbmRsZSwgcmVtb3ZlcyB0aGUgaGFuZGxlIGZvciB0aGUgaW5zdGFuY2UgYW5kIGNhbGxzIGRlc3Ryb3lcbiAgICAgKi9cbiAgICBvd24oaGFuZGxlcykge1xuICAgICAgICBjb25zdCBoYW5kbGUgPSBBcnJheS5pc0FycmF5KGhhbmRsZXMpID8gY3JlYXRlQ29tcG9zaXRlSGFuZGxlKC4uLmhhbmRsZXMpIDogaGFuZGxlcztcbiAgICAgICAgY29uc3QgeyBoYW5kbGVzOiBfaGFuZGxlcyB9ID0gdGhpcztcbiAgICAgICAgX2hhbmRsZXMucHVzaChoYW5kbGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICBfaGFuZGxlcy5zcGxpY2UoX2hhbmRsZXMuaW5kZXhPZihoYW5kbGUpKTtcbiAgICAgICAgICAgICAgICBoYW5kbGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXN0cnB5cyBhbGwgaGFuZGVycyByZWdpc3RlcmVkIGZvciB0aGUgaW5zdGFuY2VcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPGFueX0gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSBhbGwgaGFuZGxlcyBoYXZlIGJlZW4gZGVzdHJveWVkXG4gICAgICovXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlICYmIGhhbmRsZS5kZXN0cm95ICYmIGhhbmRsZS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm93biA9IGRlc3Ryb3llZDtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IERlc3Ryb3lhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RGVzdHJveWFibGUubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRGVzdHJveWFibGUubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0Rlc3Ryb3lhYmxlLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBNYXAgZnJvbSAnQGRvam8vc2hpbS9NYXAnO1xyXG5pbXBvcnQgeyBEZXN0cm95YWJsZSB9IGZyb20gJy4vRGVzdHJveWFibGUnO1xyXG4vKipcclxuICogTWFwIG9mIGNvbXB1dGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGtleWVkIGJ5IHN0cmluZ1xyXG4gKi9cclxuY29uc3QgcmVnZXhNYXAgPSBuZXcgTWFwKCk7XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIGlzIHRoZSBldmVudCB0eXBlIGdsb2IgaGFzIGJlZW4gbWF0Y2hlZFxyXG4gKlxyXG4gKiBAcmV0dXJucyBib29sZWFuIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBnbG9iIGlzIG1hdGNoZWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dsb2JNYXRjaChnbG9iU3RyaW5nLCB0YXJnZXRTdHJpbmcpIHtcclxuICAgIGlmICh0eXBlb2YgdGFyZ2V0U3RyaW5nID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgZ2xvYlN0cmluZyA9PT0gJ3N0cmluZycgJiYgZ2xvYlN0cmluZy5pbmRleE9mKCcqJykgIT09IC0xKSB7XHJcbiAgICAgICAgbGV0IHJlZ2V4O1xyXG4gICAgICAgIGlmIChyZWdleE1hcC5oYXMoZ2xvYlN0cmluZykpIHtcclxuICAgICAgICAgICAgcmVnZXggPSByZWdleE1hcC5nZXQoZ2xvYlN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAoYF4ke2dsb2JTdHJpbmcucmVwbGFjZSgvXFwqL2csICcuKicpfSRgKTtcclxuICAgICAgICAgICAgcmVnZXhNYXAuc2V0KGdsb2JTdHJpbmcsIHJlZ2V4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodGFyZ2V0U3RyaW5nKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBnbG9iU3RyaW5nID09PSB0YXJnZXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEV2ZW50IENsYXNzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRXZlbnRlZCBleHRlbmRzIERlc3Ryb3lhYmxlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogbWFwIG9mIGxpc3RlbmVycyBrZXllZCBieSBldmVudCB0eXBlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5saXN0ZW5lcnNNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcbiAgICBlbWl0KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lcnNNYXAuZm9yRWFjaCgobWV0aG9kcywgdHlwZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNHbG9iTWF0Y2godHlwZSwgZXZlbnQudHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZHMuZm9yRWFjaCgobWV0aG9kKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmNhbGwodGhpcywgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG9uKHR5cGUsIGxpc3RlbmVyKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdGVuZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXMgPSBsaXN0ZW5lci5tYXAoKGxpc3RlbmVyKSA9PiB0aGlzLl9hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZGVzdHJveSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVzLmZvckVhY2goKGhhbmRsZSkgPT4gaGFuZGxlLmRlc3Ryb3koKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XHJcbiAgICB9XHJcbiAgICBfYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XHJcbiAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwLnNldCh0eXBlLCBsaXN0ZW5lcnMpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzTWFwLmdldCh0eXBlKSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UobGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgRXZlbnRlZDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXZlbnRlZC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vY29yZS9FdmVudGVkLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vY29yZS9FdmVudGVkLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ0Bkb2pvL3NoaW0vb2JqZWN0JztcbmV4cG9ydCB7IGFzc2lnbiB9IGZyb20gJ0Bkb2pvL3NoaW0vb2JqZWN0JztcbmNvbnN0IHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuLyoqXG4gKiBUeXBlIGd1YXJkIHRoYXQgZW5zdXJlcyB0aGF0IHRoZSB2YWx1ZSBjYW4gYmUgY29lcmNlZCB0byBPYmplY3RcbiAqIHRvIHdlZWQgb3V0IGhvc3Qgb2JqZWN0cyB0aGF0IGRvIG5vdCBkZXJpdmUgZnJvbSBPYmplY3QuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgaWYgd2Ugd2FudCB0byBkZWVwIGNvcHkgYW4gb2JqZWN0IG9yIG5vdC5cbiAqIE5vdGU6IEluIEVTNiBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgYW4gb2JqZWN0J3MgU3ltYm9sLnRvU3RyaW5nVGFnIHByb3BlcnR5LCB3aGljaCB3aWxsXG4gKiBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGB0b1N0cmluZ2AuIFRoaXMgaXMgYSByYXJlIGVkZ2UgY2FzZSB0aGF0IGlzIGRpZmZpY3VsdCB0byBoYW5kbGUsXG4gKiBzbyBpdCBpcyBub3QgaGFuZGxlZCBoZXJlLlxuICogQHBhcmFtICB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm4gICAgICAgSWYgdGhlIHZhbHVlIGlzIGNvZXJjaWJsZSBpbnRvIGFuIE9iamVjdFxuICovXG5mdW5jdGlvbiBzaG91bGREZWVwQ29weU9iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cbmZ1bmN0aW9uIGNvcHlBcnJheShhcnJheSwgaW5oZXJpdGVkKSB7XG4gICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcHlBcnJheShpdGVtLCBpbmhlcml0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhc2hvdWxkRGVlcENvcHlPYmplY3QoaXRlbSlcbiAgICAgICAgICAgID8gaXRlbVxuICAgICAgICAgICAgOiBfbWl4aW4oe1xuICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgICAgICAgICAgaW5oZXJpdGVkOiBpbmhlcml0ZWQsXG4gICAgICAgICAgICAgICAgc291cmNlczogW2l0ZW1dLFxuICAgICAgICAgICAgICAgIHRhcmdldDoge31cbiAgICAgICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gX21peGluKGt3QXJncykge1xuICAgIGNvbnN0IGRlZXAgPSBrd0FyZ3MuZGVlcDtcbiAgICBjb25zdCBpbmhlcml0ZWQgPSBrd0FyZ3MuaW5oZXJpdGVkO1xuICAgIGNvbnN0IHRhcmdldCA9IGt3QXJncy50YXJnZXQ7XG4gICAgY29uc3QgY29waWVkID0ga3dBcmdzLmNvcGllZCB8fCBbXTtcbiAgICBjb25zdCBjb3BpZWRDbG9uZSA9IFsuLi5jb3BpZWRdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga3dBcmdzLnNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0ga3dBcmdzLnNvdXJjZXNbaV07XG4gICAgICAgIGlmIChzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoY29waWVkQ2xvbmUuaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGVlcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY29weUFycmF5KHZhbHVlLCBpbmhlcml0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZERlZXBDb3B5T2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5XSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZC5wdXNoKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9taXhpbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0ZWQ6IGluaGVyaXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzOiBbdmFsdWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgLi4ubWl4aW5zKSB7XG4gICAgaWYgKCFtaXhpbnMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsYW5nLmNyZWF0ZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWl4aW4gb2JqZWN0LicpO1xuICAgIH1cbiAgICBjb25zdCBhcmdzID0gbWl4aW5zLnNsaWNlKCk7XG4gICAgYXJncy51bnNoaWZ0KE9iamVjdC5jcmVhdGUocHJvdG90eXBlKSk7XG4gICAgcmV0dXJuIGFzc2lnbi5hcHBseShudWxsLCBhcmdzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQXNzaWduKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgIHJldHVybiBfbWl4aW4oe1xuICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICBpbmhlcml0ZWQ6IGZhbHNlLFxuICAgICAgICBzb3VyY2VzOiBzb3VyY2VzLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNaXhpbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICByZXR1cm4gX21peGluKHtcbiAgICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgICAgaW5oZXJpdGVkOiB0cnVlLFxuICAgICAgICBzb3VyY2VzOiBzb3VyY2VzLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB1c2luZyB0aGUgcHJvdmlkZWQgc291cmNlJ3MgcHJvdG90eXBlIGFzIHRoZSBwcm90b3R5cGUgZm9yIHRoZSBuZXcgb2JqZWN0LCBhbmQgdGhlblxuICogZGVlcCBjb3BpZXMgdGhlIHByb3ZpZGVkIHNvdXJjZSdzIHZhbHVlcyBpbnRvIHRoZSBuZXcgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIG9iamVjdCB0byBkdXBsaWNhdGVcbiAqIEByZXR1cm4gVGhlIG5ldyBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGR1cGxpY2F0ZShzb3VyY2UpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpKTtcbiAgICByZXR1cm4gZGVlcE1peGluKHRhcmdldCwgc291cmNlKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBhIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSBiIFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWU7IGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZGVudGljYWwoYSwgYikge1xuICAgIHJldHVybiAoYSA9PT0gYiB8fFxuICAgICAgICAvKiBib3RoIHZhbHVlcyBhcmUgTmFOICovXG4gICAgICAgIChhICE9PSBhICYmIGIgIT09IGIpKTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYmluZHMgYSBtZXRob2QgdG8gdGhlIHNwZWNpZmllZCBvYmplY3QgYXQgcnVudGltZS4gVGhpcyBpcyBzaW1pbGFyIHRvXG4gKiBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgLCBidXQgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIGl0IHRha2VzIHRoZSBuYW1lIG9mIGEgbWV0aG9kIG9uIGFuIG9iamVjdC5cbiAqIEFzIGEgcmVzdWx0LCB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgYGxhdGVCaW5kYCB3aWxsIGFsd2F5cyBjYWxsIHRoZSBmdW5jdGlvbiBjdXJyZW50bHkgYXNzaWduZWQgdG9cbiAqIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgb24gdGhlIG9iamVjdCBhcyBvZiB0aGUgbW9tZW50IHRoZSBmdW5jdGlvbiBpdCByZXR1cm5zIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2UgVGhlIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gbWV0aG9kIFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgb24gdGhlIGNvbnRleHQgb2JqZWN0IHRvIGJpbmQgdG8gaXRzZWxmXG4gKiBAcGFyYW0gc3VwcGxpZWRBcmdzIEFuIG9wdGlvbmFsIGFycmF5IG9mIHZhbHVlcyB0byBwcmVwZW5kIHRvIHRoZSBgaW5zdGFuY2VbbWV0aG9kXWAgYXJndW1lbnRzIGxpc3RcbiAqIEByZXR1cm4gVGhlIGJvdW5kIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXRlQmluZChpbnN0YW5jZSwgbWV0aG9kLCAuLi5zdXBwbGllZEFyZ3MpIHtcbiAgICByZXR1cm4gc3VwcGxpZWRBcmdzLmxlbmd0aFxuICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID8gc3VwcGxpZWRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpIDogc3VwcGxpZWRBcmdzO1xuICAgICAgICAgICAgLy8gVFM3MDE3XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VbbWV0aG9kXS5hcHBseShpbnN0YW5jZSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBUUzcwMTdcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZVttZXRob2RdLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1peGluKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgIHJldHVybiBfbWl4aW4oe1xuICAgICAgICBkZWVwOiBmYWxzZSxcbiAgICAgICAgaW5oZXJpdGVkOiB0cnVlLFxuICAgICAgICBzb3VyY2VzOiBzb3VyY2VzLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgIH0pO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggaW52b2tlcyB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzIHByZXBlbmRlZCB0byBpdHMgYXJndW1lbnQgbGlzdC5cbiAqIExpa2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCwgYnV0IGRvZXMgbm90IGFsdGVyIGV4ZWN1dGlvbiBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXRGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBib3VuZFxuICogQHBhcmFtIHN1cHBsaWVkQXJncyBBbiBvcHRpb25hbCBhcnJheSBvZiBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aGUgYHRhcmdldEZ1bmN0aW9uYCBhcmd1bWVudHMgbGlzdFxuICogQHJldHVybiBUaGUgYm91bmQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWwodGFyZ2V0RnVuY3Rpb24sIC4uLnN1cHBsaWVkQXJncykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID8gc3VwcGxpZWRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpIDogc3VwcGxpZWRBcmdzO1xuICAgICAgICByZXR1cm4gdGFyZ2V0RnVuY3Rpb24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbn1cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhIGRlc3Ryb3kgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBjYWxscyB0aGUgcGFzc2VkLWluIGRlc3RydWN0b3IuXG4gKiBUaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgXCJyZW1vdmVcIiAvIFwiZGVzdHJveVwiIGhhbmRsZXJzIGZvclxuICogZXZlbnQgbGlzdGVuZXJzLCB0aW1lcnMsIGV0Yy5cbiAqXG4gKiBAcGFyYW0gZGVzdHJ1Y3RvciBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgaGFuZGxlJ3MgYGRlc3Ryb3lgIG1ldGhvZCBpcyBpbnZva2VkXG4gKiBAcmV0dXJuIFRoZSBoYW5kbGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIYW5kbGUoZGVzdHJ1Y3Rvcikge1xuICAgIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbi8qKlxuICogUmV0dXJucyBhIHNpbmdsZSBoYW5kbGUgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXN0cm95IG11bHRpcGxlIGhhbmRsZXMgc2ltdWx0YW5lb3VzbHkuXG4gKlxuICogQHBhcmFtIGhhbmRsZXMgQW4gYXJyYXkgb2YgaGFuZGxlcyB3aXRoIGBkZXN0cm95YCBtZXRob2RzXG4gKiBAcmV0dXJuIFRoZSBoYW5kbGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21wb3NpdGVIYW5kbGUoLi4uaGFuZGxlcykge1xuICAgIHJldHVybiBjcmVhdGVIYW5kbGUoZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhbmRsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGhhbmRsZXNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYW5nLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL2xhbmcubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL2xhbmcubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiZnVuY3Rpb24gaXNGZWF0dXJlVGVzdFRoZW5hYmxlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUudGhlbjtcclxufVxyXG4vKipcclxuICogQSBjYWNoZSBvZiByZXN1bHRzIG9mIGZlYXR1cmUgdGVzdHNcclxuICovXHJcbmV4cG9ydCBjb25zdCB0ZXN0Q2FjaGUgPSB7fTtcclxuLyoqXHJcbiAqIEEgY2FjaGUgb2YgdGhlIHVuLXJlc29sdmVkIGZlYXR1cmUgdGVzdHNcclxuICovXHJcbmV4cG9ydCBjb25zdCB0ZXN0RnVuY3Rpb25zID0ge307XHJcbi8qKlxyXG4gKiBBIGNhY2hlIG9mIHVucmVzb2x2ZWQgdGhlbmFibGVzIChwcm9iYWJseSBwcm9taXNlcylcclxuICogQHR5cGUge3t9fVxyXG4gKi9cclxuY29uc3QgdGVzdFRoZW5hYmxlcyA9IHt9O1xyXG4vKipcclxuICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBzY29wZSAoYHdpbmRvd2AgaW4gYSBicm93c2VyLCBgZ2xvYmFsYCBpbiBOb2RlSlMpXHJcbiAqL1xyXG5jb25zdCBnbG9iYWxTY29wZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gQnJvd3NlcnNcclxuICAgICAgICByZXR1cm4gd2luZG93O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyBOb2RlXHJcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIFdlYiB3b3JrZXJzXHJcbiAgICAgICAgcmV0dXJuIHNlbGY7XHJcbiAgICB9XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgcmV0dXJuIHt9O1xyXG59KSgpO1xyXG4vKiBHcmFiIHRoZSBzdGF0aWNGZWF0dXJlcyBpZiB0aGVyZSBhcmUgYXZhaWxhYmxlICovXHJcbmNvbnN0IHsgc3RhdGljRmVhdHVyZXMgfSA9IGdsb2JhbFNjb3BlLkRvam9IYXNFbnZpcm9ubWVudCB8fCB7fTtcclxuLyogQ2xlYW5pbmcgdXAgdGhlIERvam9IYXNFbnZpb3JubWVudCAqL1xyXG5pZiAoJ0Rvam9IYXNFbnZpcm9ubWVudCcgaW4gZ2xvYmFsU2NvcGUpIHtcclxuICAgIGRlbGV0ZSBnbG9iYWxTY29wZS5Eb2pvSGFzRW52aXJvbm1lbnQ7XHJcbn1cclxuLyoqXHJcbiAqIEN1c3RvbSB0eXBlIGd1YXJkIHRvIG5hcnJvdyB0aGUgYHN0YXRpY0ZlYXR1cmVzYCB0byBlaXRoZXIgYSBtYXAgb3IgYSBmdW5jdGlvbiB0aGF0XHJcbiAqIHJldHVybnMgYSBtYXAuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZ3VhcmQgZm9yXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcclxufVxyXG4vKipcclxuICogVGhlIGNhY2hlIG9mIGFzc2VydGVkIGZlYXR1cmVzIHRoYXQgd2VyZSBhdmFpbGFibGUgaW4gdGhlIGdsb2JhbCBzY29wZSB3aGVuIHRoZVxyXG4gKiBtb2R1bGUgbG9hZGVkXHJcbiAqL1xyXG5jb25zdCBzdGF0aWNDYWNoZSA9IHN0YXRpY0ZlYXR1cmVzXHJcbiAgICA/IGlzU3RhdGljRmVhdHVyZUZ1bmN0aW9uKHN0YXRpY0ZlYXR1cmVzKSA/IHN0YXRpY0ZlYXR1cmVzLmFwcGx5KGdsb2JhbFNjb3BlKSA6IHN0YXRpY0ZlYXR1cmVzXHJcbiAgICA6IHt9OyAvKiBQcm92aWRpbmcgYW4gZW1wdHkgY2FjaGUsIGlmIG5vbmUgd2FzIGluIHRoZSBlbnZpcm9ubWVudFxyXG5cclxuLyoqXHJcbiogQU1EIHBsdWdpbiBmdW5jdGlvbi5cclxuKlxyXG4qIENvbmRpdGlvbmFsIGxvYWRzIG1vZHVsZXMgYmFzZWQgb24gYSBoYXMgZmVhdHVyZSB0ZXN0IHZhbHVlLlxyXG4qXHJcbiogQHBhcmFtIHJlc291cmNlSWQgR2l2ZXMgdGhlIHJlc29sdmVkIG1vZHVsZSBpZCB0byBsb2FkLlxyXG4qIEBwYXJhbSByZXF1aXJlIFRoZSBsb2FkZXIgcmVxdWlyZSBmdW5jdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIG1vZHVsZSB0aGF0IGNvbnRhaW5lZCB0aGUgcGx1Z2luIHJlc291cmNlIGluIGl0c1xyXG4qICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgbGlzdC5cclxuKiBAcGFyYW0gbG9hZCBDYWxsYmFjayB0byBsb2FkZXIgdGhhdCBjb25zdW1lcyByZXN1bHQgb2YgcGx1Z2luIGRlbWFuZC5cclxuKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQocmVzb3VyY2VJZCwgcmVxdWlyZSwgbG9hZCwgY29uZmlnKSB7XHJcbiAgICByZXNvdXJjZUlkID8gcmVxdWlyZShbcmVzb3VyY2VJZF0sIGxvYWQpIDogbG9hZCgpO1xyXG59XHJcbi8qKlxyXG4gKiBBTUQgcGx1Z2luIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBSZXNvbHZlcyByZXNvdXJjZUlkIGludG8gYSBtb2R1bGUgaWQgYmFzZWQgb24gcG9zc2libHktbmVzdGVkIHRlbmFyeSBleHByZXNzaW9uIHRoYXQgYnJhbmNoZXMgb24gaGFzIGZlYXR1cmUgdGVzdFxyXG4gKiB2YWx1ZShzKS5cclxuICpcclxuICogQHBhcmFtIHJlc291cmNlSWQgVGhlIGlkIG9mIHRoZSBtb2R1bGVcclxuICogQHBhcmFtIG5vcm1hbGl6ZSBSZXNvbHZlcyBhIHJlbGF0aXZlIG1vZHVsZSBpZCBpbnRvIGFuIGFic29sdXRlIG1vZHVsZSBpZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShyZXNvdXJjZUlkLCBub3JtYWxpemUpIHtcclxuICAgIGNvbnN0IHRva2VucyA9IHJlc291cmNlSWQubWF0Y2goL1tcXD86XXxbXjpcXD9dKi9nKSB8fCBbXTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGZ1bmN0aW9uIGdldChza2lwKSB7XHJcbiAgICAgICAgY29uc3QgdGVybSA9IHRva2Vuc1tpKytdO1xyXG4gICAgICAgIGlmICh0ZXJtID09PSAnOicpIHtcclxuICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nIG1vZHVsZSBuYW1lLCByZXNvbHZlcyB0byBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gcG9zdGZpeGVkIHdpdGggYSA/IG1lYW5zIGl0IGlzIGEgZmVhdHVyZSB0byBicmFuY2ggb24sIHRoZSB0ZXJtIGlzIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXHJcbiAgICAgICAgICAgIGlmICh0b2tlbnNbaSsrXSA9PT0gJz8nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNraXAgJiYgaGFzKHRlcm0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hlZCB0aGUgZmVhdHVyZSwgZ2V0IHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSBvcHRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlkIG5vdCBtYXRjaCwgZ2V0IHRoZSBzZWNvbmQgdmFsdWUsIHBhc3Npbmcgb3ZlciB0aGUgZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICBnZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldChza2lwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBhIG1vZHVsZVxyXG4gICAgICAgICAgICByZXR1cm4gdGVybTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBpZCA9IGdldCgpO1xyXG4gICAgcmV0dXJuIGlkICYmIG5vcm1hbGl6ZShpZCk7XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrIGlmIGEgZmVhdHVyZSBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWRcclxuICpcclxuICogQHBhcmFtIGZlYXR1cmUgdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBleGlzdHMoZmVhdHVyZSkge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZEZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gQm9vbGVhbihub3JtYWxpemVkRmVhdHVyZSBpbiBzdGF0aWNDYWNoZSB8fCBub3JtYWxpemVkRmVhdHVyZSBpbiB0ZXN0Q2FjaGUgfHwgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0pO1xyXG59XHJcbi8qKlxyXG4gKiBSZWdpc3RlciBhIG5ldyB0ZXN0IGZvciBhIG5hbWVkIGZlYXR1cmUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGhhcy5hZGQoJ2RvbS1hZGRldmVudGxpc3RlbmVyJywgISFkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKTtcclxuICpcclxuICogQGV4YW1wbGVcclxuICogaGFzLmFkZCgndG91Y2gtZXZlbnRzJywgZnVuY3Rpb24gKCkge1xyXG4gKiAgICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnRcclxuICogfSk7XHJcbiAqXHJcbiAqIEBwYXJhbSBmZWF0dXJlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXHJcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgcmVwb3J0ZWQgb2YgdGhlIGZlYXR1cmUsIG9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIG9uY2Ugb24gZmlyc3QgdGVzdFxyXG4gKiBAcGFyYW0gb3ZlcndyaXRlIGlmIGFuIGV4aXN0aW5nIHZhbHVlIHNob3VsZCBiZSBvdmVyd3JpdHRlbi4gRGVmYXVsdHMgdG8gZmFsc2UuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYWRkKGZlYXR1cmUsIHZhbHVlLCBvdmVyd3JpdGUgPSBmYWxzZSkge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZEZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpZiAoZXhpc3RzKG5vcm1hbGl6ZWRGZWF0dXJlKSAmJiAhb3ZlcndyaXRlICYmICEobm9ybWFsaXplZEZlYXR1cmUgaW4gc3RhdGljQ2FjaGUpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmVhdHVyZSBcIiR7ZmVhdHVyZX1cIiBleGlzdHMgYW5kIG92ZXJ3cml0ZSBub3QgdHJ1ZS5gKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNGZWF0dXJlVGVzdFRoZW5hYmxlKHZhbHVlKSkge1xyXG4gICAgICAgIHRlc3RUaGVuYWJsZXNbZmVhdHVyZV0gPSB2YWx1ZS50aGVuKChyZXNvbHZlZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRlc3RDYWNoZVtmZWF0dXJlXSA9IHJlc29sdmVkVmFsdWU7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIHRlc3RUaGVuYWJsZXNbZmVhdHVyZV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdID0gdmFsdWU7XHJcbiAgICAgICAgZGVsZXRlIHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBuYW1lZCBmZWF0dXJlLlxyXG4gKlxyXG4gKiBAcGFyYW0gZmVhdHVyZSBUaGUgbmFtZSAoaWYgYSBzdHJpbmcpIG9yIGlkZW50aWZpZXIgKGlmIGFuIGludGVnZXIpIG9mIHRoZSBmZWF0dXJlIHRvIHRlc3QuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXMoZmVhdHVyZSkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gc3RhdGljQ2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0pIHtcclxuICAgICAgICByZXN1bHQgPSB0ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdID0gdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0uY2FsbChudWxsKTtcclxuICAgICAgICBkZWxldGUgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChub3JtYWxpemVkRmVhdHVyZSBpbiB0ZXN0Q2FjaGUpIHtcclxuICAgICAgICByZXN1bHQgPSB0ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmVhdHVyZSBpbiB0ZXN0VGhlbmFibGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQXR0ZW1wdCB0byBkZXRlY3QgdW5yZWdpc3RlcmVkIGhhcyBmZWF0dXJlIFwiJHtmZWF0dXJlfVwiYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbi8qXHJcbiAqIE91dCBvZiB0aGUgYm94IGZlYXR1cmUgdGVzdHNcclxuICovXHJcbi8qIEVudmlyb25tZW50cyAqL1xyXG4vKiBVc2VkIGFzIGEgdmFsdWUgdG8gcHJvdmlkZSBhIGRlYnVnIG9ubHkgY29kZSBwYXRoICovXHJcbmFkZCgnZGVidWcnLCB0cnVlKTtcclxuLyogRGV0ZWN0cyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgXCJicm93c2VyIGxpa2VcIiAqL1xyXG5hZGQoJ2hvc3QtYnJvd3NlcicsIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyk7XHJcbi8qIERldGVjdHMgaWYgdGhlIGVudmlyb25tZW50IGFwcGVhcnMgdG8gYmUgTm9kZUpTICovXHJcbmFkZCgnaG9zdC1ub2RlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSkge1xyXG4gICAgICAgIHJldHVybiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XHJcbiAgICB9XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2hhcy9oYXMubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9oYXMvaGFzLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IGlzQXJyYXlMaWtlLCBTaGltSXRlcmF0b3IgfSBmcm9tICcuL2l0ZXJhdG9yJztcclxuaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XHJcbmltcG9ydCB7IGlzIGFzIG9iamVjdElzIH0gZnJvbSAnLi9vYmplY3QnO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xyXG5pbXBvcnQgJy4vU3ltYm9sJztcclxuZXhwb3J0IGxldCBNYXAgPSBnbG9iYWwuTWFwO1xyXG5pZiAoIXRydWUpIHtcclxuICAgIE1hcCA9IChfYSA9IGNsYXNzIE1hcCB7XHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdNYXAnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZXJhYmxlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodmFsdWVbMF0sIHZhbHVlWzFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodmFsdWVbMF0sIHZhbHVlWzFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gQXJyYXkucHJvdG90eXBlLmluZGV4T2YgdXNpbmcgT2JqZWN0LmlzXHJcbiAgICAgICAgICAgICAqIHRvIGNoZWNrIGZvciBlcXVhbGl0eS4gU2VlIGh0dHA6Ly9temwubGEvMXp1S08yVlxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgX2luZGV4T2ZLZXkoa2V5cywga2V5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3RJcyhrZXlzW2ldLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnZXQgc2l6ZSgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGVhcigpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMubGVuZ3RoID0gdGhpcy5fdmFsdWVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVsZXRlKGtleSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbnRyaWVzKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5fa2V5cy5tYXAoKGtleSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBba2V5LCB0aGlzLl92YWx1ZXNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih2YWx1ZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvckVhY2goY2FsbGJhY2ssIGNvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSB0aGlzLl9rZXlzO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHZhbHVlc1tpXSwga2V5c1tpXSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2V0KGtleSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogdGhpcy5fdmFsdWVzW2luZGV4XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBoYXMoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpID4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAga2V5cygpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHRoaXMuX2tleXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XHJcbiAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IHRoaXMuX2tleXMubGVuZ3RoIDogaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzW2luZGV4XSA9IGtleTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhbHVlcygpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHRoaXMuX3ZhbHVlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIF9hW1N5bWJvbC5zcGVjaWVzXSA9IF9hLFxyXG4gICAgICAgIF9hKTtcclxufVxyXG5leHBvcnQgZGVmYXVsdCBNYXA7XHJcbnZhciBfYTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWFwLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL01hcC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vTWFwLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgeyBxdWV1ZU1pY3JvVGFzayB9IGZyb20gJy4vc3VwcG9ydC9xdWV1ZSc7XHJcbmltcG9ydCAnLi9TeW1ib2wnO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xyXG5leHBvcnQgbGV0IFNoaW1Qcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XHJcbmV4cG9ydCBjb25zdCBpc1RoZW5hYmxlID0gZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nO1xyXG59O1xyXG5pZiAoIXRydWUpIHtcclxuICAgIGdsb2JhbC5Qcm9taXNlID0gU2hpbVByb21pc2UgPSAoX2EgPSBjbGFzcyBQcm9taXNlIHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgUHJvbWlzZS5cclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIEBwYXJhbSBleGVjdXRvclxyXG4gICAgICAgICAgICAgKiBUaGUgZXhlY3V0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIFByb21pc2UgaXMgaW5zdGFudGlhdGVkLiBJdCBpcyByZXNwb25zaWJsZSBmb3JcclxuICAgICAgICAgICAgICogc3RhcnRpbmcgdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hlbiBpdCBpcyBpbnZva2VkLlxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBUaGUgZXhlY3V0b3IgbXVzdCBjYWxsIGVpdGhlciB0aGUgcGFzc2VkIGByZXNvbHZlYCBmdW5jdGlvbiB3aGVuIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWRcclxuICAgICAgICAgICAgICogc3VjY2Vzc2Z1bGx5LCBvciB0aGUgYHJlamVjdGAgZnVuY3Rpb24gd2hlbiB0aGUgb3BlcmF0aW9uIGZhaWxzLlxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMSAvKiBQZW5kaW5nICovO1xyXG4gICAgICAgICAgICAgICAgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ1Byb21pc2UnO1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBJZiB0cnVlLCB0aGUgcmVzb2x1dGlvbiBvZiB0aGlzIHByb21pc2UgaXMgY2hhaW5lZCAoXCJsb2NrZWQgaW5cIikgdG8gYW5vdGhlciBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBsZXQgaXNDaGFpbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgcHJvbWlzZSBpcyBpbiBhIHJlc29sdmVkIHN0YXRlLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1Jlc29sdmVkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlICE9PSAxIC8qIFBlbmRpbmcgKi8gfHwgaXNDaGFpbmVkO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogQ2FsbGJhY2tzIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgb25jZSB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBsZXQgY2FsbGJhY2tzID0gW107XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIEluaXRpYWxseSBwdXNoZXMgY2FsbGJhY2tzIG9udG8gYSBxdWV1ZSBmb3IgZXhlY3V0aW9uIG9uY2UgdGhpcyBwcm9taXNlIHNldHRsZXMuIEFmdGVyIHRoZSBwcm9taXNlIHNldHRsZXMsXHJcbiAgICAgICAgICAgICAgICAgKiBlbnF1ZXVlcyBjYWxsYmFja3MgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCBldmVudCBsb29wIHR1cm4uXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCB3aGVuRmluaXNoZWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBTZXR0bGVzIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge1R8YW55fSB2YWx1ZSBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGxlID0gKG5ld1N0YXRlLCB2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEEgcHJvbWlzZSBjYW4gb25seSBiZSBzZXR0bGVkIG9uY2UuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IDEgLyogUGVuZGluZyAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVkVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB3aGVuRmluaXNoZWQgPSBxdWV1ZU1pY3JvVGFzaztcclxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGVucXVldWUgYSBjYWxsYmFjayBydW5uZXIgaWYgdGhlcmUgYXJlIGNhbGxiYWNrcyBzbyB0aGF0IGluaXRpYWxseSBmdWxmaWxsZWQgUHJvbWlzZXMgZG9uJ3QgaGF2ZSB0b1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgYW4gZXh0cmEgdHVybi5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzICYmIGNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlTWljcm9UYXNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY291bnQgPSBjYWxsYmFja3MubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3NbaV0uY2FsbChudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogUmVzb2x2ZXMgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSBuZXdTdGF0ZSBUaGUgcmVzb2x2ZWQgc3RhdGUgZm9yIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7VHxhbnl9IHZhbHVlIFRoZSByZXNvbHZlZCB2YWx1ZSBmb3IgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlID0gKG5ld1N0YXRlLCB2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Jlc29sdmVkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaGVuYWJsZSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudGhlbihzZXR0bGUuYmluZChudWxsLCAwIC8qIEZ1bGZpbGxlZCAqLyksIHNldHRsZS5iaW5kKG51bGwsIDIgLyogUmVqZWN0ZWQgKi8pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGFpbmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRsZShuZXdTdGF0ZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRoZW4gPSAob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuRmluaXNoZWQgaW5pdGlhbGx5IHF1ZXVlcyB1cCBjYWxsYmFja3MgZm9yIGV4ZWN1dGlvbiBhZnRlciB0aGUgcHJvbWlzZSBoYXMgc2V0dGxlZC4gT25jZSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvbWlzZSBoYXMgc2V0dGxlZCwgd2hlbkZpbmlzaGVkIHdpbGwgc2NoZWR1bGUgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgdHVybiB0aHJvdWdoIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBldmVudCBsb29wLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVuRmluaXNoZWQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLnN0YXRlID09PSAyIC8qIFJlamVjdGVkICovID8gb25SZWplY3RlZCA6IG9uRnVsZmlsbGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2FsbGJhY2sodGhpcy5yZXNvbHZlZFZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IDIgLyogUmVqZWN0ZWQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QodGhpcy5yZXNvbHZlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5yZXNvbHZlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBleGVjdXRvcihyZXNvbHZlLmJpbmQobnVsbCwgMCAvKiBGdWxmaWxsZWQgKi8pLCByZXNvbHZlLmJpbmQobnVsbCwgMiAvKiBSZWplY3RlZCAqLykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGxlKDIgLyogUmVqZWN0ZWQgKi8sIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGF0aWMgYWxsKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21wbGV0ZSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9wdWxhdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZnVsZmlsbChpbmRleCwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICArK2NvbXBsZXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluaXNoKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9wdWxhdGluZyB8fCBjb21wbGV0ZSA8IHRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzSXRlbShpbmRleCwgaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICArK3RvdGFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaGVuYWJsZShpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYW4gaXRlbSBQcm9taXNlIHJlamVjdHMsIHRoaXMgUHJvbWlzZSBpcyBpbW1lZGlhdGVseSByZWplY3RlZCB3aXRoIHRoZSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9taXNlJ3MgcmVqZWN0aW9uIGVycm9yLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50aGVuKGZ1bGZpbGwuYmluZChudWxsLCBpbmRleCksIHJlamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoaXRlbSkudGhlbihmdWxmaWxsLmJpbmQobnVsbCwgaW5kZXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSXRlbShpLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RhdGljIHJhY2UoaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBQcm9taXNlIGl0ZW0gcmVqZWN0cywgdGhpcyBQcm9taXNlIGlzIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggdGhlIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShpdGVtKS50aGVuKHJlc29sdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RhdGljIHJlamVjdChyZWFzb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaChvblJlamVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIF9hW1N5bWJvbC5zcGVjaWVzXSA9IFNoaW1Qcm9taXNlLFxyXG4gICAgICAgIF9hKTtcclxufVxyXG5leHBvcnQgZGVmYXVsdCBTaGltUHJvbWlzZTtcclxudmFyIF9hO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Qcm9taXNlLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1Byb21pc2UubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1Byb21pc2UubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcclxuaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XHJcbmltcG9ydCB7IGdldFZhbHVlRGVzY3JpcHRvciB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcclxuZXhwb3J0IGxldCBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xyXG5pZiAoIXRydWUpIHtcclxuICAgIC8qKlxyXG4gICAgICogVGhyb3dzIGlmIHRoZSB2YWx1ZSBpcyBub3QgYSBzeW1ib2wsIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIFNoaW1cclxuICAgICAqIEBwYXJhbSAge2FueX0gICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJuIHtzeW1ib2x9ICAgICAgIFJldHVybnMgdGhlIHN5bWJvbCBvciB0aHJvd3NcclxuICAgICAqL1xyXG4gICAgY29uc3QgdmFsaWRhdGVTeW1ib2wgPSBmdW5jdGlvbiB2YWxpZGF0ZVN5bWJvbCh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IodmFsdWUgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGVmaW5lUHJvcGVydGllcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xyXG4gICAgY29uc3QgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbiAgICBjb25zdCBjcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xyXG4gICAgY29uc3Qgb2JqUHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcclxuICAgIGNvbnN0IGdsb2JhbFN5bWJvbHMgPSB7fTtcclxuICAgIGNvbnN0IGdldFN5bWJvbE5hbWUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBjcmVhdGUobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkZXNjKSB7XHJcbiAgICAgICAgICAgIGxldCBwb3N0Zml4ID0gMDtcclxuICAgICAgICAgICAgbGV0IG5hbWU7XHJcbiAgICAgICAgICAgIHdoaWxlIChjcmVhdGVkW1N0cmluZyhkZXNjKSArIChwb3N0Zml4IHx8ICcnKV0pIHtcclxuICAgICAgICAgICAgICAgICsrcG9zdGZpeDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZXNjICs9IFN0cmluZyhwb3N0Zml4IHx8ICcnKTtcclxuICAgICAgICAgICAgY3JlYXRlZFtkZXNjXSA9IHRydWU7XHJcbiAgICAgICAgICAgIG5hbWUgPSAnQEAnICsgZGVzYztcclxuICAgICAgICAgICAgLy8gRklYTUU6IFRlbXBvcmFyeSBndWFyZCB1bnRpbCB0aGUgZHVwbGljYXRlIGV4ZWN1dGlvbiB3aGVuIHRlc3RpbmcgY2FuIGJlXHJcbiAgICAgICAgICAgIC8vIHBpbm5lZCBkb3duLlxyXG4gICAgICAgICAgICBpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqUHJvdG90eXBlLCBuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkob2JqUHJvdG90eXBlLCBuYW1lLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKHZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCk7XHJcbiAgICBjb25zdCBJbnRlcm5hbFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgSW50ZXJuYWxTeW1ib2wpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFN5bWJvbChkZXNjcmlwdGlvbik7XHJcbiAgICB9O1xyXG4gICAgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgU3ltYm9sKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1R5cGVFcnJvcjogU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN5bSA9IE9iamVjdC5jcmVhdGUoSW50ZXJuYWxTeW1ib2wucHJvdG90eXBlKTtcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyhkZXNjcmlwdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnRpZXMoc3ltLCB7XHJcbiAgICAgICAgICAgIF9fZGVzY3JpcHRpb25fXzogZ2V0VmFsdWVEZXNjcmlwdG9yKGRlc2NyaXB0aW9uKSxcclxuICAgICAgICAgICAgX19uYW1lX186IGdldFZhbHVlRGVzY3JpcHRvcihnZXRTeW1ib2xOYW1lKGRlc2NyaXB0aW9uKSlcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKiBEZWNvcmF0ZSB0aGUgU3ltYm9sIGZ1bmN0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlIHByb3BlcnRpZXMgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgJ2ZvcicsIGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgaWYgKGdsb2JhbFN5bWJvbHNba2V5XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsU3ltYm9sc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGdsb2JhbFN5bWJvbHNba2V5XSA9IFN5bWJvbChTdHJpbmcoa2V5KSkpO1xyXG4gICAgfSkpO1xyXG4gICAgZGVmaW5lUHJvcGVydGllcyhTeW1ib2wsIHtcclxuICAgICAgICBrZXlGb3I6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoc3ltKSB7XHJcbiAgICAgICAgICAgIGxldCBrZXk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRlU3ltYm9sKHN5bSk7XHJcbiAgICAgICAgICAgIGZvciAoa2V5IGluIGdsb2JhbFN5bWJvbHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxTeW1ib2xzW2tleV0gPT09IHN5bSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBoYXNJbnN0YW5jZTogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ2hhc0luc3RhbmNlJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgaXNDb25jYXRTcHJlYWRhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaXNDb25jYXRTcHJlYWRhYmxlJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgaXRlcmF0b3I6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdpdGVyYXRvcicpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIG1hdGNoOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignbWF0Y2gnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBvYnNlcnZhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignb2JzZXJ2YWJsZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHJlcGxhY2U6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdyZXBsYWNlJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgc2VhcmNoOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignc2VhcmNoJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgc3BlY2llczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwZWNpZXMnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBzcGxpdDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwbGl0JyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgdG9QcmltaXRpdmU6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCd0b1ByaW1pdGl2ZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHRvU3RyaW5nVGFnOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigndG9TdHJpbmdUYWcnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICB1bnNjb3BhYmxlczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3Vuc2NvcGFibGVzJyksIGZhbHNlLCBmYWxzZSlcclxuICAgIH0pO1xyXG4gICAgLyogRGVjb3JhdGUgdGhlIEludGVybmFsU3ltYm9sIG9iamVjdCAqL1xyXG4gICAgZGVmaW5lUHJvcGVydGllcyhJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcjogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbCksXHJcbiAgICAgICAgdG9TdHJpbmc6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fbmFtZV9fO1xyXG4gICAgICAgIH0sIGZhbHNlLCBmYWxzZSlcclxuICAgIH0pO1xyXG4gICAgLyogRGVjb3JhdGUgdGhlIFN5bWJvbC5wcm90b3R5cGUgKi9cclxuICAgIGRlZmluZVByb3BlcnRpZXMoU3ltYm9sLnByb3RvdHlwZSwge1xyXG4gICAgICAgIHRvU3RyaW5nOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ1N5bWJvbCAoJyArIHZhbGlkYXRlU3ltYm9sKHRoaXMpLl9fZGVzY3JpcHRpb25fXyArICcpJztcclxuICAgICAgICB9KSxcclxuICAgICAgICB2YWx1ZU9mOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7XHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgZGVmaW5lUHJvcGVydHkoU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sLnRvUHJpbWl0aXZlLCBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZVN5bWJvbCh0aGlzKTtcclxuICAgIH0pKTtcclxuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZ2V0VmFsdWVEZXNjcmlwdG9yKCdTeW1ib2wnLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcclxuICAgIGRlZmluZVByb3BlcnR5KEludGVybmFsU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sLnRvUHJpbWl0aXZlLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLnByb3RvdHlwZVtTeW1ib2wudG9QcmltaXRpdmVdLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcclxuICAgIGRlZmluZVByb3BlcnR5KEludGVybmFsU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcclxufVxyXG4vKipcclxuICogQSBjdXN0b20gZ3VhcmQgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGlmIGFuIG9iamVjdCBpcyBhIHN5bWJvbCBvciBub3RcclxuICogQHBhcmFtICB7YW55fSAgICAgICB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2sgdG8gc2VlIGlmIGl0IGlzIGEgc3ltYm9sIG9yIG5vdFxyXG4gKiBAcmV0dXJuIHtpcyBzeW1ib2x9ICAgICAgIFJldHVybnMgdHJ1ZSBpZiBhIHN5bWJvbCBvciBub3QgKGFuZCBuYXJyb3dzIHRoZSB0eXBlIGd1YXJkKVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8IHZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSkgfHwgZmFsc2U7XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW55IG1pc3Npbmcgd2VsbCBrbm93biBzeW1ib2xzIGlmIHRoZSBuYXRpdmUgU3ltYm9sIGlzIG1pc3NpbmcgdGhlbVxyXG4gKi9cclxuW1xyXG4gICAgJ2hhc0luc3RhbmNlJyxcclxuICAgICdpc0NvbmNhdFNwcmVhZGFibGUnLFxyXG4gICAgJ2l0ZXJhdG9yJyxcclxuICAgICdzcGVjaWVzJyxcclxuICAgICdyZXBsYWNlJyxcclxuICAgICdzZWFyY2gnLFxyXG4gICAgJ3NwbGl0JyxcclxuICAgICdtYXRjaCcsXHJcbiAgICAndG9QcmltaXRpdmUnLFxyXG4gICAgJ3RvU3RyaW5nVGFnJyxcclxuICAgICd1bnNjb3BhYmxlcycsXHJcbiAgICAnb2JzZXJ2YWJsZSdcclxuXS5mb3JFYWNoKCh3ZWxsS25vd24pID0+IHtcclxuICAgIGlmICghU3ltYm9sW3dlbGxLbm93bl0pIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ltYm9sLCB3ZWxsS25vd24sIGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKHdlbGxLbm93biksIGZhbHNlLCBmYWxzZSkpO1xyXG4gICAgfVxyXG59KTtcclxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TeW1ib2wubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vU3ltYm9sLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9TeW1ib2wubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XHJcbmltcG9ydCB7IGlzQXJyYXlMaWtlIH0gZnJvbSAnLi9pdGVyYXRvcic7XHJcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XHJcbmltcG9ydCAnLi9TeW1ib2wnO1xyXG5leHBvcnQgbGV0IFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcclxuaWYgKCF0cnVlKSB7XHJcbiAgICBjb25zdCBERUxFVEVEID0ge307XHJcbiAgICBjb25zdCBnZXRVSUQgPSBmdW5jdGlvbiBnZXRVSUQoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZ2VuZXJhdGVOYW1lID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgc3RhcnRJZCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAlIDEwMDAwMDAwMCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdlbmVyYXRlTmFtZSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdfX3dtJyArIGdldFVJRCgpICsgKHN0YXJ0SWQrKyArICdfXycpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpO1xyXG4gICAgV2Vha01hcCA9IGNsYXNzIFdlYWtNYXAge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdXZWFrTWFwJztcclxuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IGdlbmVyYXRlTmFtZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcm96ZW5FbnRyaWVzID0gW107XHJcbiAgICAgICAgICAgIGlmIChpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZXJhYmxlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChpdGVtWzBdLCBpdGVtWzFdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZnJvemVuRW50cmllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Zyb3plbkVudHJpZXNbaV0ua2V5ID09PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZShrZXkpIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURUQpIHtcclxuICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gREVMRVRFRDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcy5zcGxpY2UoZnJvemVuSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBnZXQoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBrZXlbdGhpcy5fbmFtZV07XHJcbiAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zyb3plbkVudHJpZXNbZnJvemVuSW5kZXhdLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhhcyhrZXkpIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoQm9vbGVhbihlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXQoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWtleSB8fCAodHlwZW9mIGtleSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGtleSAhPT0gJ2Z1bmN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdmFsdWUgdXNlZCBhcyB3ZWFrIG1hcCBrZXknKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZW50cnkgPSBrZXlbdGhpcy5fbmFtZV07XHJcbiAgICAgICAgICAgIGlmICghZW50cnkgfHwgZW50cnkua2V5ICE9PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgIGVudHJ5ID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiB7IHZhbHVlOiBrZXkgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuKGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcm96ZW5FbnRyaWVzLnB1c2goZW50cnkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtleSwgdGhpcy5fbmFtZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZW50cnlcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFdlYWtNYXA7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdlYWtNYXAubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vV2Vha01hcC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vV2Vha01hcC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcclxuaW1wb3J0IHsgaXNBcnJheUxpa2UsIGlzSXRlcmFibGUgfSBmcm9tICcuL2l0ZXJhdG9yJztcclxuaW1wb3J0IHsgTUFYX1NBRkVfSU5URUdFUiB9IGZyb20gJy4vbnVtYmVyJztcclxuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcclxuaW1wb3J0IHsgd3JhcE5hdGl2ZSB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcclxuZXhwb3J0IGxldCBmcm9tO1xyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBhcnJheSBmcm9tIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJndW1lbnRzIEFueSBudW1iZXIgb2YgYXJndW1lbnRzIGZvciB0aGUgYXJyYXlcclxuICogQHJldHVybiBBbiBhcnJheSBmcm9tIHRoZSBnaXZlbiBhcmd1bWVudHNcclxuICovXHJcbmV4cG9ydCBsZXQgb2Y7XHJcbi8qIEVTNiBBcnJheSBpbnN0YW5jZSBtZXRob2RzICovXHJcbi8qKlxyXG4gKiBDb3BpZXMgZGF0YSBpbnRlcm5hbGx5IHdpdGhpbiBhbiBhcnJheSBvciBhcnJheS1saWtlIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGFycmF5LWxpa2Ugb2JqZWN0XHJcbiAqIEBwYXJhbSBvZmZzZXQgVGhlIGluZGV4IHRvIHN0YXJ0IGNvcHlpbmcgdmFsdWVzIHRvOyBpZiBuZWdhdGl2ZSwgaXQgY291bnRzIGJhY2t3YXJkcyBmcm9tIGxlbmd0aFxyXG4gKiBAcGFyYW0gc3RhcnQgVGhlIGZpcnN0IChpbmNsdXNpdmUpIGluZGV4IHRvIGNvcHk7IGlmIG5lZ2F0aXZlLCBpdCBjb3VudHMgYmFja3dhcmRzIGZyb20gbGVuZ3RoXHJcbiAqIEBwYXJhbSBlbmQgVGhlIGxhc3QgKGV4Y2x1c2l2ZSkgaW5kZXggdG8gY29weTsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcclxuICogQHJldHVybiBUaGUgdGFyZ2V0XHJcbiAqL1xyXG5leHBvcnQgbGV0IGNvcHlXaXRoaW47XHJcbi8qKlxyXG4gKiBGaWxscyBlbGVtZW50cyBvZiBhbiBhcnJheS1saWtlIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCB0byBmaWxsXHJcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBlYWNoIGVsZW1lbnQgb2YgdGhlIHRhcmdldCB3aXRoXHJcbiAqIEBwYXJhbSBzdGFydCBUaGUgZmlyc3QgaW5kZXggdG8gZmlsbFxyXG4gKiBAcGFyYW0gZW5kIFRoZSAoZXhjbHVzaXZlKSBpbmRleCBhdCB3aGljaCB0byBzdG9wIGZpbGxpbmdcclxuICogQHJldHVybiBUaGUgZmlsbGVkIHRhcmdldFxyXG4gKi9cclxuZXhwb3J0IGxldCBmaWxsO1xyXG4vKipcclxuICogRmluZHMgYW5kIHJldHVybnMgdGhlIGZpcnN0IGluc3RhbmNlIG1hdGNoaW5nIHRoZSBjYWxsYmFjayBvciB1bmRlZmluZWQgaWYgb25lIGlzIG5vdCBmb3VuZC5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCBBbiBhcnJheS1saWtlIG9iamVjdFxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiByZXR1cm5pbmcgaWYgdGhlIGN1cnJlbnQgdmFsdWUgbWF0Y2hlcyBhIGNyaXRlcmlhXHJcbiAqIEBwYXJhbSB0aGlzQXJnIFRoZSBleGVjdXRpb24gY29udGV4dCBmb3IgdGhlIGZpbmQgZnVuY3Rpb25cclxuICogQHJldHVybiBUaGUgZmlyc3QgZWxlbWVudCBtYXRjaGluZyB0aGUgY2FsbGJhY2ssIG9yIHVuZGVmaW5lZCBpZiBvbmUgZG9lcyBub3QgZXhpc3RcclxuICovXHJcbmV4cG9ydCBsZXQgZmluZDtcclxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIHNlYXJjaCBhbmQgcmV0dXJucyB0aGUgZmlyc3QgaW5kZXggd2hvc2UgdmFsdWUgc2F0aXNmaWVzIHRoZSBwYXNzZWQgY2FsbGJhY2ssXHJcbiAqIG9yIC0xIGlmIG5vIHZhbHVlcyBzYXRpc2Z5IGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IEFuIGFycmF5LWxpa2Ugb2JqZWN0XHJcbiAqIEBwYXJhbSBjYWxsYmFjayBBIGZ1bmN0aW9uIHJldHVybmluZyB0cnVlIGlmIHRoZSBjdXJyZW50IHZhbHVlIHNhdGlzZmllcyBpdHMgY3JpdGVyaWFcclxuICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgZmluZCBmdW5jdGlvblxyXG4gKiBAcmV0dXJuIFRoZSBmaXJzdCBpbmRleCB3aG9zZSB2YWx1ZSBzYXRpc2ZpZXMgdGhlIHBhc3NlZCBjYWxsYmFjaywgb3IgLTEgaWYgbm8gdmFsdWVzIHNhdGlzZnkgaXRcclxuICovXHJcbmV4cG9ydCBsZXQgZmluZEluZGV4O1xyXG4vKiBFUzcgQXJyYXkgaW5zdGFuY2UgbWV0aG9kcyAqL1xyXG4vKipcclxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGFycmF5IGluY2x1ZGVzIGEgZ2l2ZW4gdmFsdWVcclxuICpcclxuICogQHBhcmFtIHRhcmdldCB0aGUgdGFyZ2V0IGFycmF5LWxpa2Ugb2JqZWN0XHJcbiAqIEBwYXJhbSBzZWFyY2hFbGVtZW50IHRoZSBpdGVtIHRvIHNlYXJjaCBmb3JcclxuICogQHBhcmFtIGZyb21JbmRleCB0aGUgc3RhcnRpbmcgaW5kZXggdG8gc2VhcmNoIGZyb21cclxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGFycmF5IGluY2x1ZGVzIHRoZSBlbGVtZW50LCBvdGhlcndpc2UgYGZhbHNlYFxyXG4gKi9cclxuZXhwb3J0IGxldCBpbmNsdWRlcztcclxuaWYgKHRydWUgJiYgdHJ1ZSkge1xyXG4gICAgZnJvbSA9IGdsb2JhbC5BcnJheS5mcm9tO1xyXG4gICAgb2YgPSBnbG9iYWwuQXJyYXkub2Y7XHJcbiAgICBjb3B5V2l0aGluID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4pO1xyXG4gICAgZmlsbCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maWxsKTtcclxuICAgIGZpbmQgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZmluZCk7XHJcbiAgICBmaW5kSW5kZXggPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZmluZEluZGV4KTtcclxufVxyXG5lbHNlIHtcclxuICAgIC8vIEl0IGlzIG9ubHkgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpL2lPUyB0aGF0IGhhdmUgYSBiYWQgZmlsbCBpbXBsZW1lbnRhdGlvbiBhbmQgc28gYXJlbid0IGluIHRoZSB3aWxkXHJcbiAgICAvLyBUbyBtYWtlIHRoaW5ncyBlYXNpZXIsIGlmIHRoZXJlIGlzIGEgYmFkIGZpbGwgaW1wbGVtZW50YXRpb24sIHRoZSB3aG9sZSBzZXQgb2YgZnVuY3Rpb25zIHdpbGwgYmUgZmlsbGVkXHJcbiAgICAvKipcclxuICAgICAqIEVuc3VyZXMgYSBub24tbmVnYXRpdmUsIG5vbi1pbmZpbml0ZSwgc2FmZSBpbnRlZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciB0byB2YWxpZGF0ZVxyXG4gICAgICogQHJldHVybiBBIHByb3BlciBsZW5ndGhcclxuICAgICAqL1xyXG4gICAgY29uc3QgdG9MZW5ndGggPSBmdW5jdGlvbiB0b0xlbmd0aChsZW5ndGgpIHtcclxuICAgICAgICBpZiAoaXNOYU4obGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7XHJcbiAgICAgICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcclxuICAgICAgICAgICAgbGVuZ3RoID0gTWF0aC5mbG9vcihsZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBFbnN1cmUgYSBub24tbmVnYXRpdmUsIHJlYWwsIHNhZmUgaW50ZWdlclxyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChsZW5ndGgsIDApLCBNQVhfU0FGRV9JTlRFR0VSKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZyb20gRVM2IDcuMS40IFRvSW50ZWdlcigpXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gY29udmVydFxyXG4gICAgICogQHJldHVybiBBbiBpbnRlZ2VyXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHRvSW50ZWdlciA9IGZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcclxuICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgPT09IDAgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAodmFsdWUgPiAwID8gMSA6IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZXMgYW4gb2Zmc2V0IGFnYWluc3QgYSBnaXZlbiBsZW5ndGgsIHdyYXBwaW5nIGl0IGlmIG5lZ2F0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgb3JpZ2luYWwgb2Zmc2V0XHJcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSB0b3RhbCBsZW5ndGggdG8gbm9ybWFsaXplIGFnYWluc3RcclxuICAgICAqIEByZXR1cm4gSWYgbmVnYXRpdmUsIHByb3ZpZGUgYSBkaXN0YW5jZSBmcm9tIHRoZSBlbmQgKGxlbmd0aCk7IG90aGVyd2lzZSBwcm92aWRlIGEgZGlzdGFuY2UgZnJvbSAwXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG5vcm1hbGl6ZU9mZnNldCA9IGZ1bmN0aW9uIG5vcm1hbGl6ZU9mZnNldCh2YWx1ZSwgbGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgMCA/IE1hdGgubWF4KGxlbmd0aCArIHZhbHVlLCAwKSA6IE1hdGgubWluKHZhbHVlLCBsZW5ndGgpO1xyXG4gICAgfTtcclxuICAgIGZyb20gPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSwgbWFwRnVuY3Rpb24sIHRoaXNBcmcpIHtcclxuICAgICAgICBpZiAoYXJyYXlMaWtlID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZnJvbTogcmVxdWlyZXMgYW4gYXJyYXktbGlrZSBvYmplY3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hcEZ1bmN0aW9uICYmIHRoaXNBcmcpIHtcclxuICAgICAgICAgICAgbWFwRnVuY3Rpb24gPSBtYXBGdW5jdGlvbi5iaW5kKHRoaXNBcmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSAqL1xyXG4gICAgICAgIGNvbnN0IENvbnN0cnVjdG9yID0gdGhpcztcclxuICAgICAgICBjb25zdCBsZW5ndGggPSB0b0xlbmd0aChhcnJheUxpa2UubGVuZ3RoKTtcclxuICAgICAgICAvLyBTdXBwb3J0IGV4dGVuc2lvblxyXG4gICAgICAgIGNvbnN0IGFycmF5ID0gdHlwZW9mIENvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KG5ldyBDb25zdHJ1Y3RvcihsZW5ndGgpKSA6IG5ldyBBcnJheShsZW5ndGgpO1xyXG4gICAgICAgIGlmICghaXNBcnJheUxpa2UoYXJyYXlMaWtlKSAmJiAhaXNJdGVyYWJsZShhcnJheUxpa2UpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBhbmQgdGhlIG5vcm1hbGl6ZWQgbGVuZ3RoIGlzIDAsIGp1c3QgcmV0dXJuIGFuIGVtcHR5IGFycmF5LiB0aGlzIHByZXZlbnRzIGEgcHJvYmxlbVxyXG4gICAgICAgIC8vIHdpdGggdGhlIGl0ZXJhdGlvbiBvbiBJRSB3aGVuIHVzaW5nIGEgTmFOIGFycmF5IGxlbmd0aC5cclxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoYXJyYXlMaWtlKSkge1xyXG4gICAgICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheUxpa2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gbWFwRnVuY3Rpb24gPyBtYXBGdW5jdGlvbihhcnJheUxpa2VbaV0sIGkpIDogYXJyYXlMaWtlW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgaSA9IDA7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXJyYXlMaWtlKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IG1hcEZ1bmN0aW9uID8gbWFwRnVuY3Rpb24odmFsdWUsIGkpIDogdmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFycmF5TGlrZS5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBhcnJheS5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnJheTtcclxuICAgIH07XHJcbiAgICBvZiA9IGZ1bmN0aW9uIG9mKC4uLml0ZW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGl0ZW1zKTtcclxuICAgIH07XHJcbiAgICBjb3B5V2l0aGluID0gZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQsIG9mZnNldCwgc3RhcnQsIGVuZCkge1xyXG4gICAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb3B5V2l0aGluOiB0YXJnZXQgbXVzdCBiZSBhbiBhcnJheS1saWtlIG9iamVjdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsZW5ndGggPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcclxuICAgICAgICBvZmZzZXQgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKG9mZnNldCksIGxlbmd0aCk7XHJcbiAgICAgICAgc3RhcnQgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKHN0YXJ0KSwgbGVuZ3RoKTtcclxuICAgICAgICBlbmQgPSBub3JtYWxpemVPZmZzZXQoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXIoZW5kKSwgbGVuZ3RoKTtcclxuICAgICAgICBsZXQgY291bnQgPSBNYXRoLm1pbihlbmQgLSBzdGFydCwgbGVuZ3RoIC0gb2Zmc2V0KTtcclxuICAgICAgICBsZXQgZGlyZWN0aW9uID0gMTtcclxuICAgICAgICBpZiAob2Zmc2V0ID4gc3RhcnQgJiYgb2Zmc2V0IDwgc3RhcnQgKyBjb3VudCkge1xyXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSAtMTtcclxuICAgICAgICAgICAgc3RhcnQgKz0gY291bnQgLSAxO1xyXG4gICAgICAgICAgICBvZmZzZXQgKz0gY291bnQgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCBpbiB0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFtvZmZzZXRdID0gdGFyZ2V0W3N0YXJ0XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXRbb2Zmc2V0XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvZmZzZXQgKz0gZGlyZWN0aW9uO1xyXG4gICAgICAgICAgICBzdGFydCArPSBkaXJlY3Rpb247XHJcbiAgICAgICAgICAgIGNvdW50LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9O1xyXG4gICAgZmlsbCA9IGZ1bmN0aW9uIGZpbGwodGFyZ2V0LCB2YWx1ZSwgc3RhcnQsIGVuZCkge1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xyXG4gICAgICAgIGxldCBpID0gbm9ybWFsaXplT2Zmc2V0KHRvSW50ZWdlcihzdGFydCksIGxlbmd0aCk7XHJcbiAgICAgICAgZW5kID0gbm9ybWFsaXplT2Zmc2V0KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCksIGxlbmd0aCk7XHJcbiAgICAgICAgd2hpbGUgKGkgPCBlbmQpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W2krK10gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH07XHJcbiAgICBmaW5kID0gZnVuY3Rpb24gZmluZCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBmaW5kSW5kZXgodGFyZ2V0LCBjYWxsYmFjaywgdGhpc0FyZyk7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IHRhcmdldFtpbmRleF0gOiB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG4gICAgZmluZEluZGV4ID0gZnVuY3Rpb24gZmluZEluZGV4KHRhcmdldCwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcclxuICAgICAgICBjb25zdCBsZW5ndGggPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ZpbmQ6IHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXNBcmcpIHtcclxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjay5iaW5kKHRoaXNBcmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayh0YXJnZXRbaV0sIGksIHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH07XHJcbn1cclxuaWYgKHRydWUpIHtcclxuICAgIGluY2x1ZGVzID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKTtcclxufVxyXG5lbHNlIHtcclxuICAgIC8qKlxyXG4gICAgICogRW5zdXJlcyBhIG5vbi1uZWdhdGl2ZSwgbm9uLWluZmluaXRlLCBzYWZlIGludGVnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIHRvIHZhbGlkYXRlXHJcbiAgICAgKiBAcmV0dXJuIEEgcHJvcGVyIGxlbmd0aFxyXG4gICAgICovXHJcbiAgICBjb25zdCB0b0xlbmd0aCA9IGZ1bmN0aW9uIHRvTGVuZ3RoKGxlbmd0aCkge1xyXG4gICAgICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpO1xyXG4gICAgICAgIGlmIChpc05hTihsZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xyXG4gICAgICAgICAgICBsZW5ndGggPSBNYXRoLmZsb29yKGxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSBhIG5vbi1uZWdhdGl2ZSwgcmVhbCwgc2FmZSBpbnRlZ2VyXHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KGxlbmd0aCwgMCksIE1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgfTtcclxuICAgIGluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXModGFyZ2V0LCBzZWFyY2hFbGVtZW50LCBmcm9tSW5kZXggPSAwKSB7XHJcbiAgICAgICAgbGV0IGxlbiA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBmcm9tSW5kZXg7IGkgPCBsZW47ICsraSkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IHRhcmdldFtpXTtcclxuICAgICAgICAgICAgaWYgKHNlYXJjaEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50IHx8XHJcbiAgICAgICAgICAgICAgICAoc2VhcmNoRWxlbWVudCAhPT0gc2VhcmNoRWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gY3VycmVudEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFycmF5Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2FycmF5Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9hcnJheS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJjb25zdCBnbG9iYWxPYmplY3QgPSAoZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBnbG9iYWwgc3BlYyBkZWZpbmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IGNhbGxlZCAnZ2xvYmFsJ1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbiAgICAgICAgLy8gYGdsb2JhbGAgaXMgYWxzbyBkZWZpbmVkIGluIE5vZGVKU1xuICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyB3aW5kb3cgaXMgZGVmaW5lZCBpbiBicm93c2Vyc1xuICAgICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gc2VsZiBpcyBkZWZpbmVkIGluIFdlYldvcmtlcnNcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxufSkoKTtcbmV4cG9ydCBkZWZhdWx0IGdsb2JhbE9iamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdsb2JhbC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9nbG9iYWwubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2dsb2JhbC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgJy4vU3ltYm9sJztcbmltcG9ydCB7IEhJR0hfU1VSUk9HQVRFX01BWCwgSElHSF9TVVJST0dBVEVfTUlOIH0gZnJvbSAnLi9zdHJpbmcnO1xuY29uc3Qgc3RhdGljRG9uZSA9IHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuLyoqXG4gKiBBIGNsYXNzIHRoYXQgX3NoaW1zXyBhbiBpdGVyYXRvciBpbnRlcmZhY2Ugb24gYXJyYXkgbGlrZSBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgU2hpbUl0ZXJhdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihsaXN0KSB7XG4gICAgICAgIHRoaXMuX25leHRJbmRleCA9IC0xO1xuICAgICAgICBpZiAoaXNJdGVyYWJsZShsaXN0KSkge1xuICAgICAgICAgICAgdGhpcy5fbmF0aXZlSXRlcmF0b3IgPSBsaXN0W1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3QgPSBsaXN0O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbmV4dCBpdGVyYXRpb24gcmVzdWx0IGZvciB0aGUgSXRlcmF0b3JcbiAgICAgKi9cbiAgICBuZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5fbmF0aXZlSXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9uYXRpdmVJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9saXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGljRG9uZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKyt0aGlzLl9uZXh0SW5kZXggPCB0aGlzLl9saXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fbGlzdFt0aGlzLl9uZXh0SW5kZXhdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0aWNEb25lO1xuICAgIH1cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuLyoqXG4gKiBBIHR5cGUgZ3VhcmQgZm9yIGNoZWNraW5nIGlmIHNvbWV0aGluZyBoYXMgYW4gSXRlcmFibGUgaW50ZXJmYWNlXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0eXBlIGd1YXJkIGFnYWluc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSXRlcmFibGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG59XG4vKipcbiAqIEEgdHlwZSBndWFyZCBmb3IgY2hlY2tpbmcgaWYgc29tZXRoaW5nIGlzIEFycmF5TGlrZVxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHlwZSBndWFyZCBhZ2FpbnN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJztcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaXRlcmF0b3IgZm9yIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBpdGVyYWJsZSBUaGUgaXRlcmFibGUgb2JqZWN0IHRvIHJldHVybiB0aGUgaXRlcmF0b3IgZm9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXQoaXRlcmFibGUpIHtcbiAgICBpZiAoaXNJdGVyYWJsZShpdGVyYWJsZSkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKGl0ZXJhYmxlKTtcbiAgICB9XG59XG4vKipcbiAqIFNoaW1zIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGBmb3IgLi4uIG9mYCBibG9ja3NcbiAqXG4gKiBAcGFyYW0gaXRlcmFibGUgVGhlIG9iamVjdCB0aGUgcHJvdmlkZXMgYW4gaW50ZXJhdG9yIGludGVyZmFjZVxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBpdGVtIG9mIHRoZSBpdGVyYWJsZVxuICogQHBhcmFtIHRoaXNBcmcgT3B0aW9uYWwgc2NvcGUgdG8gcGFzcyB0aGUgY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvck9mKGl0ZXJhYmxlLCBjYWxsYmFjaywgdGhpc0FyZykge1xuICAgIGxldCBicm9rZW4gPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBkb0JyZWFrKCkge1xuICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgIH1cbiAgICAvKiBXZSBuZWVkIHRvIGhhbmRsZSBpdGVyYXRpb24gb2YgZG91YmxlIGJ5dGUgc3RyaW5ncyBwcm9wZXJseSAqL1xuICAgIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkgJiYgdHlwZW9mIGl0ZXJhYmxlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBsID0gaXRlcmFibGUubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbGV0IGNoYXIgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgIGlmIChpICsgMSA8IGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgICAgIGlmIChjb2RlID49IEhJR0hfU1VSUk9HQVRFX01JTiAmJiBjb2RlIDw9IEhJR0hfU1VSUk9HQVRFX01BWCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyICs9IGl0ZXJhYmxlWysraV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCBjaGFyLCBpdGVyYWJsZSwgZG9CcmVhayk7XG4gICAgICAgICAgICBpZiAoYnJva2VuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGdldChpdGVyYWJsZSk7XG4gICAgICAgIGlmIChpdGVyYXRvcikge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHJlc3VsdC52YWx1ZSwgaXRlcmFibGUsIGRvQnJlYWspO1xuICAgICAgICAgICAgICAgIGlmIChicm9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVyYXRvci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9pdGVyYXRvci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vaXRlcmF0b3IubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG4vKipcbiAqIFRoZSBzbWFsbGVzdCBpbnRlcnZhbCBiZXR3ZWVuIHR3byByZXByZXNlbnRhYmxlIG51bWJlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBFUFNJTE9OID0gMTtcbi8qKlxuICogVGhlIG1heGltdW0gc2FmZSBpbnRlZ2VyIGluIEphdmFTY3JpcHRcbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9TQUZFX0lOVEVHRVIgPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuLyoqXG4gKiBUaGUgbWluaW11bSBzYWZlIGludGVnZXIgaW4gSmF2YVNjcmlwdFxuICovXG5leHBvcnQgY29uc3QgTUlOX1NBRkVfSU5URUdFUiA9IC1NQVhfU0FGRV9JTlRFR0VSO1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBOYU4gd2l0aG91dCBjb2Vyc2lvbi5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgTmFOLCBmYWxzZSBpZiBpdCBpcyBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgZ2xvYmFsLmlzTmFOKHZhbHVlKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgYSBmaW5pdGUgbnVtYmVyIHdpdGhvdXQgY29lcnNpb24uXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIGZpbml0ZSwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zpbml0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGdsb2JhbC5pc0Zpbml0ZSh2YWx1ZSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGFuIGludGVnZXIuXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIsIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGFuIGludGVnZXIgdGhhdCBpcyAnc2FmZSwnIG1lYW5pbmc6XG4gKiAgIDEuIGl0IGNhbiBiZSBleHByZXNzZWQgYXMgYW4gSUVFRS03NTQgZG91YmxlIHByZWNpc2lvbiBudW1iZXJcbiAqICAgMi4gaXQgaGFzIGEgb25lLXRvLW9uZSBtYXBwaW5nIHRvIGEgbWF0aGVtYXRpY2FsIGludGVnZXIsIG1lYW5pbmcgaXRzXG4gKiAgICAgIElFRUUtNzU0IHJlcHJlc2VudGF0aW9uIGNhbm5vdCBiZSB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIGFueSBvdGhlclxuICogICAgICBpbnRlZ2VyIHRvIGZpdCB0aGUgSUVFRS03NTQgcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcih2YWx1ZSkgJiYgTWF0aC5hYnModmFsdWUpIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1udW1iZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vbnVtYmVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9udW1iZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XHJcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XHJcbmltcG9ydCB7IGlzU3ltYm9sIH0gZnJvbSAnLi9TeW1ib2wnO1xyXG5leHBvcnQgbGV0IGFzc2lnbjtcclxuLyoqXHJcbiAqIEdldHMgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0LlxyXG4gKiBBbiBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBpcyBvbmUgdGhhdCBpcyBkZWZpbmVkIGRpcmVjdGx5IG9uIHRoZSBvYmplY3QgYW5kIGlzIG5vdFxyXG4gKiBpbmhlcml0ZWQgZnJvbSB0aGUgb2JqZWN0J3MgcHJvdG90eXBlLlxyXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSBwIE5hbWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gKi9cclxuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0LiBUaGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGFyZSB0aG9zZSB0aGF0IGFyZSBkZWZpbmVkIGRpcmVjdGx5XHJcbiAqIG9uIHRoYXQgb2JqZWN0LCBhbmQgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSB0aGUgb2JqZWN0J3MgcHJvdG90eXBlLiBUaGUgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgaW5jbHVkZSBib3RoIGZpZWxkcyAob2JqZWN0cykgYW5kIGZ1bmN0aW9ucy5cclxuICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIG93biBwcm9wZXJ0aWVzLlxyXG4gKi9cclxuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eU5hbWVzO1xyXG4vKipcclxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3ltYm9sIHByb3BlcnRpZXMgZm91bmQgZGlyZWN0bHkgb24gb2JqZWN0IG8uXHJcbiAqIEBwYXJhbSBvIE9iamVjdCB0byByZXRyaWV2ZSB0aGUgc3ltYm9scyBmcm9tLlxyXG4gKi9cclxuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWUgdmFsdWUsIGZhbHNlIG90aGVyd2lzZS5cclxuICogQHBhcmFtIHZhbHVlMSBUaGUgZmlyc3QgdmFsdWUuXHJcbiAqIEBwYXJhbSB2YWx1ZTIgVGhlIHNlY29uZCB2YWx1ZS5cclxuICovXHJcbmV4cG9ydCBsZXQgaXM7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIG9mIGFuIG9iamVjdC5cclxuICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuIFRoaXMgY2FuIGJlIGFuIG9iamVjdCB0aGF0IHlvdSBjcmVhdGVkIG9yIGFuIGV4aXN0aW5nIERvY3VtZW50IE9iamVjdCBNb2RlbCAoRE9NKSBvYmplY3QuXHJcbiAqL1xyXG5leHBvcnQgbGV0IGtleXM7XHJcbi8qIEVTNyBPYmplY3Qgc3RhdGljIG1ldGhvZHMgKi9cclxuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xyXG5leHBvcnQgbGV0IGVudHJpZXM7XHJcbmV4cG9ydCBsZXQgdmFsdWVzO1xyXG5pZiAodHJ1ZSkge1xyXG4gICAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gZ2xvYmFsLk9iamVjdDtcclxuICAgIGFzc2lnbiA9IGdsb2JhbE9iamVjdC5hc3NpZ247XHJcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xyXG4gICAgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xyXG4gICAgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcclxuICAgIGlzID0gZ2xvYmFsT2JqZWN0LmlzO1xyXG4gICAga2V5cyA9IGdsb2JhbE9iamVjdC5rZXlzO1xyXG59XHJcbmVsc2Uge1xyXG4gICAga2V5cyA9IGZ1bmN0aW9uIHN5bWJvbEF3YXJlS2V5cyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG8pLmZpbHRlcigoa2V5KSA9PiAhQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKTtcclxuICAgIH07XHJcbiAgICBhc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFR5cGVFcnJvciBpZiB1bmRlZmluZWQgb3IgbnVsbFxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdG8gPSBPYmplY3QodGFyZ2V0KTtcclxuICAgICAgICBzb3VyY2VzLmZvckVhY2goKG5leHRTb3VyY2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5leHRTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciBpZiB1bmRlZmluZWQgb3IgbnVsbFxyXG4gICAgICAgICAgICAgICAga2V5cyhuZXh0U291cmNlKS5mb3JFYWNoKChuZXh0S2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdG87XHJcbiAgICB9O1xyXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApIHtcclxuICAgICAgICBpZiAoaXNTeW1ib2wocHJvcCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBwcm9wKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMobykge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5maWx0ZXIoKGtleSkgPT4gIUJvb2xlYW4oa2V5Lm1hdGNoKC9eQEAuKy8pKSk7XHJcbiAgICB9O1xyXG4gICAgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKG8pIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobylcclxuICAgICAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpXHJcbiAgICAgICAgICAgIC5tYXAoKGtleSkgPT4gU3ltYm9sLmZvcihrZXkuc3Vic3RyaW5nKDIpKSk7XHJcbiAgICB9O1xyXG4gICAgaXMgPSBmdW5jdGlvbiBpcyh2YWx1ZTEsIHZhbHVlMikge1xyXG4gICAgICAgIGlmICh2YWx1ZTEgPT09IHZhbHVlMikge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUxICE9PSAwIHx8IDEgLyB2YWx1ZTEgPT09IDEgLyB2YWx1ZTI7IC8vIC0wXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTEgIT09IHZhbHVlMSAmJiB2YWx1ZTIgIT09IHZhbHVlMjsgLy8gTmFOXHJcbiAgICB9O1xyXG59XHJcbmlmICh0cnVlKSB7XHJcbiAgICBjb25zdCBnbG9iYWxPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xyXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xyXG4gICAgZW50cmllcyA9IGdsb2JhbE9iamVjdC5lbnRyaWVzO1xyXG4gICAgdmFsdWVzID0gZ2xvYmFsT2JqZWN0LnZhbHVlcztcclxufVxyXG5lbHNlIHtcclxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG8pIHtcclxuICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5yZWR1Y2UoKHByZXZpb3VzLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgcHJldmlvdXNba2V5XSA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBrZXkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgfTtcclxuICAgIGVudHJpZXMgPSBmdW5jdGlvbiBlbnRyaWVzKG8pIHtcclxuICAgICAgICByZXR1cm4ga2V5cyhvKS5tYXAoKGtleSkgPT4gW2tleSwgb1trZXldXSk7XHJcbiAgICB9O1xyXG4gICAgdmFsdWVzID0gZnVuY3Rpb24gdmFsdWVzKG8pIHtcclxuICAgICAgICByZXR1cm4ga2V5cyhvKS5tYXAoKGtleSkgPT4gb1trZXldKTtcclxuICAgIH07XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL29iamVjdC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xyXG5pbXBvcnQgeyB3cmFwTmF0aXZlIH0gZnJvbSAnLi9zdXBwb3J0L3V0aWwnO1xyXG4vKipcclxuICogVGhlIG1pbmltdW0gbG9jYXRpb24gb2YgaGlnaCBzdXJyb2dhdGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgSElHSF9TVVJST0dBVEVfTUlOID0gMHhkODAwO1xyXG4vKipcclxuICogVGhlIG1heGltdW0gbG9jYXRpb24gb2YgaGlnaCBzdXJyb2dhdGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgSElHSF9TVVJST0dBVEVfTUFYID0gMHhkYmZmO1xyXG4vKipcclxuICogVGhlIG1pbmltdW0gbG9jYXRpb24gb2YgbG93IHN1cnJvZ2F0ZXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBMT1dfU1VSUk9HQVRFX01JTiA9IDB4ZGMwMDtcclxuLyoqXHJcbiAqIFRoZSBtYXhpbXVtIGxvY2F0aW9uIG9mIGxvdyBzdXJyb2dhdGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgTE9XX1NVUlJPR0FURV9NQVggPSAweGRmZmY7XHJcbi8qIEVTNiBzdGF0aWMgbWV0aG9kcyAqL1xyXG4vKipcclxuICogUmV0dXJuIHRoZSBTdHJpbmcgdmFsdWUgd2hvc2UgZWxlbWVudHMgYXJlLCBpbiBvcmRlciwgdGhlIGVsZW1lbnRzIGluIHRoZSBMaXN0IGVsZW1lbnRzLlxyXG4gKiBJZiBsZW5ndGggaXMgMCwgdGhlIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC5cclxuICogQHBhcmFtIGNvZGVQb2ludHMgVGhlIGNvZGUgcG9pbnRzIHRvIGdlbmVyYXRlIHRoZSBzdHJpbmdcclxuICovXHJcbmV4cG9ydCBsZXQgZnJvbUNvZGVQb2ludDtcclxuLyoqXHJcbiAqIGByYXdgIGlzIGludGVuZGVkIGZvciB1c2UgYXMgYSB0YWcgZnVuY3Rpb24gb2YgYSBUYWdnZWQgVGVtcGxhdGUgU3RyaW5nLiBXaGVuIGNhbGxlZFxyXG4gKiBhcyBzdWNoIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGEgd2VsbCBmb3JtZWQgdGVtcGxhdGUgY2FsbCBzaXRlIG9iamVjdCBhbmQgdGhlIHJlc3RcclxuICogcGFyYW1ldGVyIHdpbGwgY29udGFpbiB0aGUgc3Vic3RpdHV0aW9uIHZhbHVlcy5cclxuICogQHBhcmFtIHRlbXBsYXRlIEEgd2VsbC1mb3JtZWQgdGVtcGxhdGUgc3RyaW5nIGNhbGwgc2l0ZSByZXByZXNlbnRhdGlvbi5cclxuICogQHBhcmFtIHN1YnN0aXR1dGlvbnMgQSBzZXQgb2Ygc3Vic3RpdHV0aW9uIHZhbHVlcy5cclxuICovXHJcbmV4cG9ydCBsZXQgcmF3O1xyXG4vKiBFUzYgaW5zdGFuY2UgbWV0aG9kcyAqL1xyXG4vKipcclxuICogUmV0dXJucyBhIG5vbm5lZ2F0aXZlIGludGVnZXIgTnVtYmVyIGxlc3MgdGhhbiAxMTE0MTEyICgweDExMDAwMCkgdGhhdCBpcyB0aGUgY29kZSBwb2ludFxyXG4gKiB2YWx1ZSBvZiB0aGUgVVRGLTE2IGVuY29kZWQgY29kZSBwb2ludCBzdGFydGluZyBhdCB0aGUgc3RyaW5nIGVsZW1lbnQgYXQgcG9zaXRpb24gcG9zIGluXHJcbiAqIHRoZSBTdHJpbmcgcmVzdWx0aW5nIGZyb20gY29udmVydGluZyB0aGlzIG9iamVjdCB0byBhIFN0cmluZy5cclxuICogSWYgdGhlcmUgaXMgbm8gZWxlbWVudCBhdCB0aGF0IHBvc2l0aW9uLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC5cclxuICogSWYgYSB2YWxpZCBVVEYtMTYgc3Vycm9nYXRlIHBhaXIgZG9lcyBub3QgYmVnaW4gYXQgcG9zLCB0aGUgcmVzdWx0IGlzIHRoZSBjb2RlIHVuaXQgYXQgcG9zLlxyXG4gKi9cclxuZXhwb3J0IGxldCBjb2RlUG9pbnRBdDtcclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcclxuICogc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0aGlzIG9iamVjdCAoY29udmVydGVkIHRvIGEgU3RyaW5nKSBzdGFydGluZyBhdFxyXG4gKiBlbmRQb3NpdGlvbiDigJMgbGVuZ3RoKHRoaXMpLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cclxuICovXHJcbmV4cG9ydCBsZXQgZW5kc1dpdGg7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgc2VhcmNoU3RyaW5nIGFwcGVhcnMgYXMgYSBzdWJzdHJpbmcgb2YgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoaXNcclxuICogb2JqZWN0IHRvIGEgU3RyaW5nLCBhdCBvbmUgb3IgbW9yZSBwb3NpdGlvbnMgdGhhdCBhcmVcclxuICogZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHBvc2l0aW9uOyBvdGhlcndpc2UsIHJldHVybnMgZmFsc2UuXHJcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcclxuICogQHBhcmFtIHNlYXJjaFN0cmluZyBzZWFyY2ggc3RyaW5nXHJcbiAqIEBwYXJhbSBwb3NpdGlvbiBJZiBwb3NpdGlvbiBpcyB1bmRlZmluZWQsIDAgaXMgYXNzdW1lZCwgc28gYXMgdG8gc2VhcmNoIGFsbCBvZiB0aGUgU3RyaW5nLlxyXG4gKi9cclxuZXhwb3J0IGxldCBpbmNsdWRlcztcclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIFN0cmluZyB2YWx1ZSByZXN1bHQgb2Ygbm9ybWFsaXppbmcgdGhlIHN0cmluZyBpbnRvIHRoZSBub3JtYWxpemF0aW9uIGZvcm1cclxuICogbmFtZWQgYnkgZm9ybSBhcyBzcGVjaWZpZWQgaW4gVW5pY29kZSBTdGFuZGFyZCBBbm5leCAjMTUsIFVuaWNvZGUgTm9ybWFsaXphdGlvbiBGb3Jtcy5cclxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xyXG4gKiBAcGFyYW0gZm9ybSBBcHBsaWNhYmxlIHZhbHVlczogXCJORkNcIiwgXCJORkRcIiwgXCJORktDXCIsIG9yIFwiTkZLRFwiLCBJZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRcclxuICogaXMgXCJORkNcIlxyXG4gKi9cclxuZXhwb3J0IGxldCBub3JtYWxpemU7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgU3RyaW5nIHZhbHVlIHRoYXQgaXMgbWFkZSBmcm9tIGNvdW50IGNvcGllcyBhcHBlbmRlZCB0b2dldGhlci4gSWYgY291bnQgaXMgMCxcclxuICogVCBpcyB0aGUgZW1wdHkgU3RyaW5nIGlzIHJldHVybmVkLlxyXG4gKiBAcGFyYW0gY291bnQgbnVtYmVyIG9mIGNvcGllcyB0byBhcHBlbmRcclxuICovXHJcbmV4cG9ydCBsZXQgcmVwZWF0O1xyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBvZiBzZWFyY2hTdHJpbmcgY29udmVydGVkIHRvIGEgU3RyaW5nIGlzIHRoZVxyXG4gKiBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHRoaXMgb2JqZWN0IChjb252ZXJ0ZWQgdG8gYSBTdHJpbmcpIHN0YXJ0aW5nIGF0XHJcbiAqIHBvc2l0aW9uLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cclxuICovXHJcbmV4cG9ydCBsZXQgc3RhcnRzV2l0aDtcclxuLyogRVM3IGluc3RhbmNlIG1ldGhvZHMgKi9cclxuLyoqXHJcbiAqIFBhZHMgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGggYSBnaXZlbiBzdHJpbmcgKHBvc3NpYmx5IHJlcGVhdGVkKSBzbyB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIHJlYWNoZXMgYSBnaXZlbiBsZW5ndGguXHJcbiAqIFRoZSBwYWRkaW5nIGlzIGFwcGxpZWQgZnJvbSB0aGUgZW5kIChyaWdodCkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXHJcbiAqIEBwYXJhbSBtYXhMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBvbmNlIHRoZSBjdXJyZW50IHN0cmluZyBoYXMgYmVlbiBwYWRkZWQuXHJcbiAqICAgICAgICBJZiB0aGlzIHBhcmFtZXRlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgc3RyaW5nJ3MgbGVuZ3RoLCB0aGUgY3VycmVudCBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZCBhcyBpdCBpcy5cclxuICpcclxuICogQHBhcmFtIGZpbGxTdHJpbmcgVGhlIHN0cmluZyB0byBwYWQgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGguXHJcbiAqICAgICAgICBJZiB0aGlzIHN0cmluZyBpcyB0b28gbG9uZywgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYW5kIHRoZSBsZWZ0LW1vc3QgcGFydCB3aWxsIGJlIGFwcGxpZWQuXHJcbiAqICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgXCIgXCIgKFUrMDAyMCkuXHJcbiAqL1xyXG5leHBvcnQgbGV0IHBhZEVuZDtcclxuLyoqXHJcbiAqIFBhZHMgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGggYSBnaXZlbiBzdHJpbmcgKHBvc3NpYmx5IHJlcGVhdGVkKSBzbyB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIHJlYWNoZXMgYSBnaXZlbiBsZW5ndGguXHJcbiAqIFRoZSBwYWRkaW5nIGlzIGFwcGxpZWQgZnJvbSB0aGUgc3RhcnQgKGxlZnQpIG9mIHRoZSBjdXJyZW50IHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xyXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcgb25jZSB0aGUgY3VycmVudCBzdHJpbmcgaGFzIGJlZW4gcGFkZGVkLlxyXG4gKiAgICAgICAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHN0cmluZydzIGxlbmd0aCwgdGhlIGN1cnJlbnQgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQgYXMgaXQgaXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWxsU3RyaW5nIFRoZSBzdHJpbmcgdG8gcGFkIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoLlxyXG4gKiAgICAgICAgSWYgdGhpcyBzdHJpbmcgaXMgdG9vIGxvbmcsIGl0IHdpbGwgYmUgdHJ1bmNhdGVkIGFuZCB0aGUgbGVmdC1tb3N0IHBhcnQgd2lsbCBiZSBhcHBsaWVkLlxyXG4gKiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIFwiIFwiIChVKzAwMjApLlxyXG4gKi9cclxuZXhwb3J0IGxldCBwYWRTdGFydDtcclxuaWYgKHRydWUgJiYgdHJ1ZSkge1xyXG4gICAgZnJvbUNvZGVQb2ludCA9IGdsb2JhbC5TdHJpbmcuZnJvbUNvZGVQb2ludDtcclxuICAgIHJhdyA9IGdsb2JhbC5TdHJpbmcucmF3O1xyXG4gICAgY29kZVBvaW50QXQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KTtcclxuICAgIGVuZHNXaXRoID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aCk7XHJcbiAgICBpbmNsdWRlcyA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMpO1xyXG4gICAgbm9ybWFsaXplID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5ub3JtYWxpemUpO1xyXG4gICAgcmVwZWF0ID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5yZXBlYXQpO1xyXG4gICAgc3RhcnRzV2l0aCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCk7XHJcbn1cclxuZWxzZSB7XHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRlcyB0aGF0IHRleHQgaXMgZGVmaW5lZCwgYW5kIG5vcm1hbGl6ZXMgcG9zaXRpb24gKGJhc2VkIG9uIHRoZSBnaXZlbiBkZWZhdWx0IGlmIHRoZSBpbnB1dCBpcyBOYU4pLlxyXG4gICAgICogVXNlZCBieSBzdGFydHNXaXRoLCBpbmNsdWRlcywgYW5kIGVuZHNXaXRoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gTm9ybWFsaXplZCBwb3NpdGlvbi5cclxuICAgICAqL1xyXG4gICAgY29uc3Qgbm9ybWFsaXplU3Vic3RyaW5nQXJncyA9IGZ1bmN0aW9uIChuYW1lLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uLCBpc0VuZCA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcuJyArIG5hbWUgKyAnIHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nIHRvIHNlYXJjaCBhZ2FpbnN0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcclxuICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICE9PSBwb3NpdGlvbiA/IChpc0VuZCA/IGxlbmd0aCA6IDApIDogcG9zaXRpb247XHJcbiAgICAgICAgcmV0dXJuIFt0ZXh0LCBTdHJpbmcoc2VhcmNoKSwgTWF0aC5taW4oTWF0aC5tYXgocG9zaXRpb24sIDApLCBsZW5ndGgpXTtcclxuICAgIH07XHJcbiAgICBmcm9tQ29kZVBvaW50ID0gZnVuY3Rpb24gZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5mcm9tQ29kZVBvaW50XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcclxuICAgICAgICBpZiAoIWxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XHJcbiAgICAgICAgY29uc3QgTUFYX1NJWkUgPSAweDQwMDA7XHJcbiAgICAgICAgbGV0IGNvZGVVbml0cyA9IFtdO1xyXG4gICAgICAgIGxldCBpbmRleCA9IC0xO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pO1xyXG4gICAgICAgICAgICAvLyBDb2RlIHBvaW50cyBtdXN0IGJlIGZpbml0ZSBpbnRlZ2VycyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlXHJcbiAgICAgICAgICAgIGxldCBpc1ZhbGlkID0gaXNGaW5pdGUoY29kZVBvaW50KSAmJiBNYXRoLmZsb29yKGNvZGVQb2ludCkgPT09IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPj0gMCAmJiBjb2RlUG9pbnQgPD0gMHgxMGZmZmY7XHJcbiAgICAgICAgICAgIGlmICghaXNWYWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcignc3RyaW5nLmZyb21Db2RlUG9pbnQ6IEludmFsaWQgY29kZSBwb2ludCAnICsgY29kZVBvaW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29kZVBvaW50IDw9IDB4ZmZmZikge1xyXG4gICAgICAgICAgICAgICAgLy8gQk1QIGNvZGUgcG9pbnRcclxuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW4gc3Vycm9nYXRlIGhhbHZlc1xyXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXHJcbiAgICAgICAgICAgICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMDtcclxuICAgICAgICAgICAgICAgIGxldCBoaWdoU3Vycm9nYXRlID0gKGNvZGVQb2ludCA+PiAxMCkgKyBISUdIX1NVUlJPR0FURV9NSU47XHJcbiAgICAgICAgICAgICAgICBsZXQgbG93U3Vycm9nYXRlID0gY29kZVBvaW50ICUgMHg0MDAgKyBMT1dfU1VSUk9HQVRFX01JTjtcclxuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGhpZ2hTdXJyb2dhdGUsIGxvd1N1cnJvZ2F0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gbGVuZ3RoIHx8IGNvZGVVbml0cy5sZW5ndGggPiBNQVhfU0laRSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZyb21DaGFyQ29kZS5hcHBseShudWxsLCBjb2RlVW5pdHMpO1xyXG4gICAgICAgICAgICAgICAgY29kZVVuaXRzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICByYXcgPSBmdW5jdGlvbiByYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpIHtcclxuICAgICAgICBsZXQgcmF3U3RyaW5ncyA9IGNhbGxTaXRlLnJhdztcclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgbGV0IG51bVN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zLmxlbmd0aDtcclxuICAgICAgICBpZiAoY2FsbFNpdGUgPT0gbnVsbCB8fCBjYWxsU2l0ZS5yYXcgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmF3IHJlcXVpcmVzIGEgdmFsaWQgY2FsbFNpdGUgb2JqZWN0IHdpdGggYSByYXcgdmFsdWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IHJhd1N0cmluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IHJhd1N0cmluZ3NbaV0gKyAoaSA8IG51bVN1YnN0aXR1dGlvbnMgJiYgaSA8IGxlbmd0aCAtIDEgPyBzdWJzdGl0dXRpb25zW2ldIDogJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIGNvZGVQb2ludEF0ID0gZnVuY3Rpb24gY29kZVBvaW50QXQodGV4dCwgcG9zaXRpb24gPSAwKSB7XHJcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRcclxuICAgICAgICBpZiAodGV4dCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5jb2RlUG9pbnRBdCByZXF1cmllcyBhIHZhbGlkIHN0cmluZy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uICE9PSBwb3NpdGlvbikge1xyXG4gICAgICAgICAgICBwb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEdldCB0aGUgZmlyc3QgY29kZSB1bml0XHJcbiAgICAgICAgY29uc3QgZmlyc3QgPSB0ZXh0LmNoYXJDb2RlQXQocG9zaXRpb24pO1xyXG4gICAgICAgIGlmIChmaXJzdCA+PSBISUdIX1NVUlJPR0FURV9NSU4gJiYgZmlyc3QgPD0gSElHSF9TVVJST0dBVEVfTUFYICYmIGxlbmd0aCA+IHBvc2l0aW9uICsgMSkge1xyXG4gICAgICAgICAgICAvLyBTdGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyIChoaWdoIHN1cnJvZ2F0ZSBhbmQgdGhlcmUgaXMgYSBuZXh0IGNvZGUgdW5pdCk7IGNoZWNrIGZvciBsb3cgc3Vycm9nYXRlXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSB0ZXh0LmNoYXJDb2RlQXQocG9zaXRpb24gKyAxKTtcclxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSBMT1dfU1VSUk9HQVRFX01JTiAmJiBzZWNvbmQgPD0gTE9XX1NVUlJPR0FURV9NQVgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoZmlyc3QgLSBISUdIX1NVUlJPR0FURV9NSU4pICogMHg0MDAgKyBzZWNvbmQgLSBMT1dfU1VSUk9HQVRFX01JTiArIDB4MTAwMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpcnN0O1xyXG4gICAgfTtcclxuICAgIGVuZHNXaXRoID0gZnVuY3Rpb24gZW5kc1dpdGgodGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbikge1xyXG4gICAgICAgIGlmIChlbmRQb3NpdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFt0ZXh0LCBzZWFyY2gsIGVuZFBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ2VuZHNXaXRoJywgdGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbiwgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbmRQb3NpdGlvbiAtIHNlYXJjaC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmRQb3NpdGlvbikgPT09IHNlYXJjaDtcclxuICAgIH07XHJcbiAgICBpbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzKHRleHQsIHNlYXJjaCwgcG9zaXRpb24gPSAwKSB7XHJcbiAgICAgICAgW3RleHQsIHNlYXJjaCwgcG9zaXRpb25dID0gbm9ybWFsaXplU3Vic3RyaW5nQXJncygnaW5jbHVkZXMnLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uKTtcclxuICAgICAgICByZXR1cm4gdGV4dC5pbmRleE9mKHNlYXJjaCwgcG9zaXRpb24pICE9PSAtMTtcclxuICAgIH07XHJcbiAgICByZXBlYXQgPSBmdW5jdGlvbiByZXBlYXQodGV4dCwgY291bnQgPSAwKSB7XHJcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUucmVwZWF0XHJcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY291bnQgIT09IGNvdW50KSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgd2hpbGUgKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCAlIDIpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB0ZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHRleHQgKz0gdGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb3VudCA+Pj0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICBzdGFydHNXaXRoID0gZnVuY3Rpb24gc3RhcnRzV2l0aCh0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uID0gMCkge1xyXG4gICAgICAgIHNlYXJjaCA9IFN0cmluZyhzZWFyY2gpO1xyXG4gICAgICAgIFt0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ3N0YXJ0c1dpdGgnLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uKTtcclxuICAgICAgICBjb25zdCBlbmQgPSBwb3NpdGlvbiArIHNlYXJjaC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGVuZCA+IHRleHQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UocG9zaXRpb24sIGVuZCkgPT09IHNlYXJjaDtcclxuICAgIH07XHJcbn1cclxuaWYgKHRydWUpIHtcclxuICAgIHBhZEVuZCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucGFkRW5kKTtcclxuICAgIHBhZFN0YXJ0ID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCk7XHJcbn1cclxuZWxzZSB7XHJcbiAgICBwYWRFbmQgPSBmdW5jdGlvbiBwYWRFbmQodGV4dCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nID0gJyAnKSB7XHJcbiAgICAgICAgaWYgKHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdHJpbmcucGFkRW5kIHJlcXVpcmVzIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSBjb3VudC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gbnVsbCB8fCBtYXhMZW5ndGggPT09IHVuZGVmaW5lZCB8fCBtYXhMZW5ndGggPCAwKSB7XHJcbiAgICAgICAgICAgIG1heExlbmd0aCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdHJUZXh0ID0gU3RyaW5nKHRleHQpO1xyXG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBtYXhMZW5ndGggLSBzdHJUZXh0Lmxlbmd0aDtcclxuICAgICAgICBpZiAocGFkZGluZyA+IDApIHtcclxuICAgICAgICAgICAgc3RyVGV4dCArPVxyXG4gICAgICAgICAgICAgICAgcmVwZWF0KGZpbGxTdHJpbmcsIE1hdGguZmxvb3IocGFkZGluZyAvIGZpbGxTdHJpbmcubGVuZ3RoKSkgK1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHJpbmcuc2xpY2UoMCwgcGFkZGluZyAlIGZpbGxTdHJpbmcubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0clRleHQ7XHJcbiAgICB9O1xyXG4gICAgcGFkU3RhcnQgPSBmdW5jdGlvbiBwYWRTdGFydCh0ZXh0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcgPSAnICcpIHtcclxuICAgICAgICBpZiAodGV4dCA9PT0gbnVsbCB8fCB0ZXh0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIHZhbGlkIHN0cmluZy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5wYWRTdGFydCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IG51bGwgfHwgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbWF4TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgICAgICBtYXhMZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RyVGV4dCA9IFN0cmluZyh0ZXh0KTtcclxuICAgICAgICBjb25zdCBwYWRkaW5nID0gbWF4TGVuZ3RoIC0gc3RyVGV4dC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHBhZGRpbmcgPiAwKSB7XHJcbiAgICAgICAgICAgIHN0clRleHQgPVxyXG4gICAgICAgICAgICAgICAgcmVwZWF0KGZpbGxTdHJpbmcsIE1hdGguZmxvb3IocGFkZGluZyAvIGZpbGxTdHJpbmcubGVuZ3RoKSkgK1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHJpbmcuc2xpY2UoMCwgcGFkZGluZyAlIGZpbGxTdHJpbmcubGVuZ3RoKSArXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyVGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0clRleHQ7XHJcbiAgICB9O1xyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmluZy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdHJpbmcubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N0cmluZy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgaGFzLCB7IGFkZCB9IGZyb20gJ0Bkb2pvL2hhcy9oYXMnO1xyXG5pbXBvcnQgZ2xvYmFsIGZyb20gJy4uL2dsb2JhbCc7XHJcbmV4cG9ydCBkZWZhdWx0IGhhcztcclxuZXhwb3J0ICogZnJvbSAnQGRvam8vaGFzL2hhcyc7XHJcbi8qIEVDTUFTY3JpcHQgNiBhbmQgNyBGZWF0dXJlcyAqL1xyXG4vKiBBcnJheSAqL1xyXG5hZGQoJ2VzNi1hcnJheScsICgpID0+IHtcclxuICAgIHJldHVybiAoWydmcm9tJywgJ29mJ10uZXZlcnkoKGtleSkgPT4ga2V5IGluIGdsb2JhbC5BcnJheSkgJiZcclxuICAgICAgICBbJ2ZpbmRJbmRleCcsICdmaW5kJywgJ2NvcHlXaXRoaW4nXS5ldmVyeSgoa2V5KSA9PiBrZXkgaW4gZ2xvYmFsLkFycmF5LnByb3RvdHlwZSkpO1xyXG59LCB0cnVlKTtcclxuYWRkKCdlczYtYXJyYXktZmlsbCcsICgpID0+IHtcclxuICAgIGlmICgnZmlsbCcgaW4gZ2xvYmFsLkFycmF5LnByb3RvdHlwZSkge1xyXG4gICAgICAgIC8qIFNvbWUgdmVyc2lvbnMgb2YgU2FmYXJpIGRvIG5vdCBwcm9wZXJseSBpbXBsZW1lbnQgdGhpcyAqL1xyXG4gICAgICAgIHJldHVybiBbMV0uZmlsbCg5LCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpWzBdID09PSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuYWRkKCdlczctYXJyYXknLCAoKSA9PiAnaW5jbHVkZXMnIGluIGdsb2JhbC5BcnJheS5wcm90b3R5cGUsIHRydWUpO1xyXG4vKiBNYXAgKi9cclxuYWRkKCdlczYtbWFwJywgKCkgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuTWFwID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgLypcclxuICAgIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgTWFwIGZ1bmN0aW9uYWxpdHlcclxuICAgIFdlIHdyYXAgdGhpcyBpbiBhIHRyeS9jYXRjaCBiZWNhdXNlIHNvbWV0aW1lcyB0aGUgTWFwIGNvbnN0cnVjdG9yIGV4aXN0cywgYnV0IGRvZXMgbm90XHJcbiAgICB0YWtlIGFyZ3VtZW50cyAoaU9TIDguNClcclxuICAgICAqL1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hcCA9IG5ldyBnbG9iYWwuTWFwKFtbMCwgMV1dKTtcclxuICAgICAgICAgICAgcmV0dXJuIG1hcC5oYXMoMCkgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXAua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgdHJ1ZSAmJlxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hcC52YWx1ZXMgPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXAuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IG5vdCB0ZXN0aW5nIG9uIGlPUyBhdCB0aGUgbW9tZW50ICovXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG4vKiBNYXRoICovXHJcbmFkZCgnZXM2LW1hdGgnLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgICdjbHozMicsXHJcbiAgICAgICAgJ3NpZ24nLFxyXG4gICAgICAgICdsb2cxMCcsXHJcbiAgICAgICAgJ2xvZzInLFxyXG4gICAgICAgICdsb2cxcCcsXHJcbiAgICAgICAgJ2V4cG0xJyxcclxuICAgICAgICAnY29zaCcsXHJcbiAgICAgICAgJ3NpbmgnLFxyXG4gICAgICAgICd0YW5oJyxcclxuICAgICAgICAnYWNvc2gnLFxyXG4gICAgICAgICdhc2luaCcsXHJcbiAgICAgICAgJ2F0YW5oJyxcclxuICAgICAgICAndHJ1bmMnLFxyXG4gICAgICAgICdmcm91bmQnLFxyXG4gICAgICAgICdjYnJ0JyxcclxuICAgICAgICAnaHlwb3QnXHJcbiAgICBdLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgZ2xvYmFsLk1hdGhbbmFtZV0gPT09ICdmdW5jdGlvbicpO1xyXG59LCB0cnVlKTtcclxuYWRkKCdlczYtbWF0aC1pbXVsJywgKCkgPT4ge1xyXG4gICAgaWYgKCdpbXVsJyBpbiBnbG9iYWwuTWF0aCkge1xyXG4gICAgICAgIC8qIFNvbWUgdmVyc2lvbnMgb2YgU2FmYXJpIG9uIGlvcyBkbyBub3QgcHJvcGVybHkgaW1wbGVtZW50IHRoaXMgKi9cclxuICAgICAgICByZXR1cm4gTWF0aC5pbXVsKDB4ZmZmZmZmZmYsIDUpID09PSAtNTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbi8qIE9iamVjdCAqL1xyXG5hZGQoJ2VzNi1vYmplY3QnLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gdHJ1ZSAmJlxyXG4gICAgICAgIFsnYXNzaWduJywgJ2lzJywgJ2dldE93blByb3BlcnR5U3ltYm9scycsICdzZXRQcm90b3R5cGVPZiddLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgZ2xvYmFsLk9iamVjdFtuYW1lXSA9PT0gJ2Z1bmN0aW9uJyk7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ2VzMjAxNy1vYmplY3QnLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gWyd2YWx1ZXMnLCAnZW50cmllcycsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzJ10uZXZlcnkoKG5hbWUpID0+IHR5cGVvZiBnbG9iYWwuT2JqZWN0W25hbWVdID09PSAnZnVuY3Rpb24nKTtcclxufSwgdHJ1ZSk7XHJcbi8qIE9ic2VydmFibGUgKi9cclxuYWRkKCdlcy1vYnNlcnZhYmxlJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5PYnNlcnZhYmxlICE9PSAndW5kZWZpbmVkJywgdHJ1ZSk7XHJcbi8qIFByb21pc2UgKi9cclxuYWRkKCdlczYtcHJvbWlzZScsICgpID0+IHR5cGVvZiBnbG9iYWwuUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHJ1ZSwgdHJ1ZSk7XHJcbi8qIFNldCAqL1xyXG5hZGQoJ2VzNi1zZXQnLCAoKSA9PiB7XHJcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5TZXQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAvKiBJRTExIGFuZCBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkgYXJlIG1pc3NpbmcgY3JpdGljYWwgRVM2IFNldCBmdW5jdGlvbmFsaXR5ICovXHJcbiAgICAgICAgY29uc3Qgc2V0ID0gbmV3IGdsb2JhbC5TZXQoWzFdKTtcclxuICAgICAgICByZXR1cm4gc2V0LmhhcygxKSAmJiAna2V5cycgaW4gc2V0ICYmIHR5cGVvZiBzZXQua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuLyogU3RyaW5nICovXHJcbmFkZCgnZXM2LXN0cmluZycsICgpID0+IHtcclxuICAgIHJldHVybiAoW1xyXG4gICAgICAgIC8qIHN0YXRpYyBtZXRob2RzICovXHJcbiAgICAgICAgJ2Zyb21Db2RlUG9pbnQnXHJcbiAgICBdLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nW2tleV0gPT09ICdmdW5jdGlvbicpICYmXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgICAvKiBpbnN0YW5jZSBtZXRob2RzICovXHJcbiAgICAgICAgICAgICdjb2RlUG9pbnRBdCcsXHJcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxyXG4gICAgICAgICAgICAncmVwZWF0JyxcclxuICAgICAgICAgICAgJ3N0YXJ0c1dpdGgnLFxyXG4gICAgICAgICAgICAnZW5kc1dpdGgnLFxyXG4gICAgICAgICAgICAnaW5jbHVkZXMnXHJcbiAgICAgICAgXS5ldmVyeSgoa2V5KSA9PiB0eXBlb2YgZ2xvYmFsLlN0cmluZy5wcm90b3R5cGVba2V5XSA9PT0gJ2Z1bmN0aW9uJykpO1xyXG59LCB0cnVlKTtcclxuYWRkKCdlczYtc3RyaW5nLXJhdycsICgpID0+IHtcclxuICAgIGZ1bmN0aW9uIGdldENhbGxTaXRlKGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gWy4uLmNhbGxTaXRlXTtcclxuICAgICAgICByZXN1bHQucmF3ID0gY2FsbFNpdGUucmF3O1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBpZiAoJ3JhdycgaW4gZ2xvYmFsLlN0cmluZykge1xyXG4gICAgICAgIGxldCBiID0gMTtcclxuICAgICAgICBsZXQgY2FsbFNpdGUgPSBnZXRDYWxsU2l0ZSBgYVxcbiR7Yn1gO1xyXG4gICAgICAgIGNhbGxTaXRlLnJhdyA9IFsnYVxcXFxuJ107XHJcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNUcnVuYyA9IGdsb2JhbC5TdHJpbmcucmF3KGNhbGxTaXRlLCA0MikgPT09ICdhOlxcXFxuJztcclxuICAgICAgICByZXR1cm4gc3VwcG9ydHNUcnVuYztcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbmFkZCgnZXMyMDE3LXN0cmluZycsICgpID0+IHtcclxuICAgIHJldHVybiBbJ3BhZFN0YXJ0JywgJ3BhZEVuZCddLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nLnByb3RvdHlwZVtrZXldID09PSAnZnVuY3Rpb24nKTtcclxufSwgdHJ1ZSk7XHJcbi8qIFN5bWJvbCAqL1xyXG5hZGQoJ2VzNi1zeW1ib2wnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLlN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbCgpID09PSAnc3ltYm9sJywgdHJ1ZSk7XHJcbi8qIFdlYWtNYXAgKi9cclxuYWRkKCdlczYtd2Vha21hcCcsICgpID0+IHtcclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLldlYWtNYXAgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLyogSUUxMSBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIGFyZSBtaXNzaW5nIGNyaXRpY2FsIEVTNiBNYXAgZnVuY3Rpb25hbGl0eSAqL1xyXG4gICAgICAgIGNvbnN0IGtleTEgPSB7fTtcclxuICAgICAgICBjb25zdCBrZXkyID0ge307XHJcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IGdsb2JhbC5XZWFrTWFwKFtba2V5MSwgMV1dKTtcclxuICAgICAgICBPYmplY3QuZnJlZXplKGtleTEpO1xyXG4gICAgICAgIHJldHVybiBtYXAuZ2V0KGtleTEpID09PSAxICYmIG1hcC5zZXQoa2V5MiwgMikgPT09IG1hcCAmJiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuLyogTWlzY2VsbGFuZW91cyBmZWF0dXJlcyAqL1xyXG5hZGQoJ21pY3JvdGFza3MnLCAoKSA9PiB0cnVlIHx8IGZhbHNlIHx8IHRydWUsIHRydWUpO1xyXG5hZGQoJ3Bvc3RtZXNzYWdlJywgKCkgPT4ge1xyXG4gICAgLy8gSWYgd2luZG93IGlzIHVuZGVmaW5lZCwgYW5kIHdlIGhhdmUgcG9zdE1lc3NhZ2UsIGl0IHByb2JhYmx5IG1lYW5zIHdlJ3JlIGluIGEgd2ViIHdvcmtlci4gV2ViIHdvcmtlcnMgaGF2ZVxyXG4gICAgLy8gcG9zdCBtZXNzYWdlIGJ1dCBpdCBkb2Vzbid0IHdvcmsgaG93IHdlIGV4cGVjdCBpdCB0bywgc28gaXQncyBiZXN0IGp1c3QgdG8gcHJldGVuZCBpdCBkb2Vzbid0IGV4aXN0LlxyXG4gICAgcmV0dXJuIHR5cGVvZiBnbG9iYWwud2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZ2xvYmFsLnBvc3RNZXNzYWdlID09PSAnZnVuY3Rpb24nO1xyXG59LCB0cnVlKTtcclxuYWRkKCdyYWYnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJywgdHJ1ZSk7XHJcbmFkZCgnc2V0aW1tZWRpYXRlJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5zZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnLCB0cnVlKTtcclxuLyogRE9NIEZlYXR1cmVzICovXHJcbmFkZCgnZG9tLW11dGF0aW9ub2JzZXJ2ZXInLCAoKSA9PiB7XHJcbiAgICBpZiAodHJ1ZSAmJiBCb29sZWFuKGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyKSkge1xyXG4gICAgICAgIC8vIElFMTEgaGFzIGFuIHVucmVsaWFibGUgTXV0YXRpb25PYnNlcnZlciBpbXBsZW1lbnRhdGlvbiB3aGVyZSBzZXRQcm9wZXJ0eSgpIGRvZXMgbm90XHJcbiAgICAgICAgLy8gZ2VuZXJhdGUgYSBtdXRhdGlvbiBldmVudCwgb2JzZXJ2ZXJzIGNhbiBjcmFzaCwgYW5kIHRoZSBxdWV1ZSBkb2VzIG5vdCBkcmFpblxyXG4gICAgICAgIC8vIHJlbGlhYmx5LiBUaGUgZm9sbG93aW5nIGZlYXR1cmUgdGVzdCB3YXMgYWRhcHRlZCBmcm9tXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdDEwa28vNGFjZWI4YzcxNjgxZmRiMjc1ZTMzZWZlNWU1NzZiMTRcclxuICAgICAgICBjb25zdCBleGFtcGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cclxuICAgICAgICBjb25zdCBIb3N0TXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEhvc3RNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHsgfSk7XHJcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShleGFtcGxlLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7XHJcbiAgICAgICAgZXhhbXBsZS5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgICAgIHJldHVybiBCb29sZWFuKG9ic2VydmVyLnRha2VSZWNvcmRzKCkubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbmFkZCgnZG9tLXdlYmFuaW1hdGlvbicsICgpID0+IHRydWUgJiYgZ2xvYmFsLkFuaW1hdGlvbiAhPT0gdW5kZWZpbmVkICYmIGdsb2JhbC5LZXlmcmFtZUVmZmVjdCAhPT0gdW5kZWZpbmVkLCB0cnVlKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N1cHBvcnQvaGFzLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L2hhcy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4uL2dsb2JhbCc7XHJcbmltcG9ydCBoYXMgZnJvbSAnLi9oYXMnO1xyXG5mdW5jdGlvbiBleGVjdXRlVGFzayhpdGVtKSB7XHJcbiAgICBpZiAoaXRlbSAmJiBpdGVtLmlzQWN0aXZlICYmIGl0ZW0uY2FsbGJhY2spIHtcclxuICAgICAgICBpdGVtLmNhbGxiYWNrKCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2V0UXVldWVIYW5kbGUoaXRlbSwgZGVzdHJ1Y3Rvcikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsgfTtcclxuICAgICAgICAgICAgaXRlbS5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpdGVtLmNhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGRlc3RydWN0b3IpIHtcclxuICAgICAgICAgICAgICAgIGRlc3RydWN0b3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxubGV0IGNoZWNrTWljcm9UYXNrUXVldWU7XHJcbmxldCBtaWNyb1Rhc2tzO1xyXG4vKipcclxuICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gdGhlIG1hY3JvdGFzayBxdWV1ZS5cclxuICpcclxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxyXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHF1ZXVlVGFzayA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBsZXQgZGVzdHJ1Y3RvcjtcclxuICAgIGxldCBlbnF1ZXVlO1xyXG4gICAgLy8gU2luY2UgdGhlIElFIGltcGxlbWVudGF0aW9uIG9mIGBzZXRJbW1lZGlhdGVgIGlzIG5vdCBmbGF3bGVzcywgd2Ugd2lsbCB0ZXN0IGZvciBgcG9zdE1lc3NhZ2VgIGZpcnN0LlxyXG4gICAgaWYgKHRydWUpIHtcclxuICAgICAgICBjb25zdCBxdWV1ZSA9IFtdO1xyXG4gICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIENvbmZpcm0gdGhhdCB0aGUgZXZlbnQgd2FzIHRyaWdnZXJlZCBieSB0aGUgY3VycmVudCB3aW5kb3cgYW5kIGJ5IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi5cclxuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmIGV2ZW50LmRhdGEgPT09ICdkb2pvLXF1ZXVlLW1lc3NhZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBleGVjdXRlVGFzayhxdWV1ZS5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBxdWV1ZS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoJ2Rvam8tcXVldWUtbWVzc2FnZScsICcqJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZhbHNlKSB7XHJcbiAgICAgICAgZGVzdHJ1Y3RvciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcclxuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNldEltbWVkaWF0ZShleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZGVzdHJ1Y3RvciA9IGdsb2JhbC5jbGVhclRpbWVvdXQ7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSksIDApO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBxdWV1ZVRhc2soY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBpdGVtID0ge1xyXG4gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBpZCA9IGVucXVldWUoaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIGdldFF1ZXVlSGFuZGxlKGl0ZW0sIGRlc3RydWN0b3IgJiZcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RvcihpZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETzogVXNlIGFzcGVjdC5iZWZvcmUgd2hlbiBpdCBpcyBhdmFpbGFibGUuXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgID8gcXVldWVUYXNrXHJcbiAgICAgICAgOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY2hlY2tNaWNyb1Rhc2tRdWV1ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcXVldWVUYXNrKGNhbGxiYWNrKTtcclxuICAgICAgICB9O1xyXG59KSgpO1xyXG4vLyBXaGVuIG5vIG1lY2hhbmlzbSBmb3IgcmVnaXN0ZXJpbmcgbWljcm90YXNrcyBpcyBleHBvc2VkIGJ5IHRoZSBlbnZpcm9ubWVudCwgbWljcm90YXNrcyB3aWxsXHJcbi8vIGJlIHF1ZXVlZCBhbmQgdGhlbiBleGVjdXRlZCBpbiBhIHNpbmdsZSBtYWNyb3Rhc2sgYmVmb3JlIHRoZSBvdGhlciBtYWNyb3Rhc2tzIGFyZSBleGVjdXRlZC5cclxuaWYgKCF0cnVlKSB7XHJcbiAgICBsZXQgaXNNaWNyb1Rhc2tRdWV1ZWQgPSBmYWxzZTtcclxuICAgIG1pY3JvVGFza3MgPSBbXTtcclxuICAgIGNoZWNrTWljcm9UYXNrUXVldWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCFpc01pY3JvVGFza1F1ZXVlZCkge1xyXG4gICAgICAgICAgICBpc01pY3JvVGFza1F1ZXVlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHF1ZXVlVGFzayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpc01pY3JvVGFza1F1ZXVlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1pY3JvVGFza3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChpdGVtID0gbWljcm9UYXNrcy5zaGlmdCgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlVGFzayhpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIFNjaGVkdWxlcyBhbiBhbmltYXRpb24gdGFzayB3aXRoIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpZiBpdCBleGlzdHMsIG9yIHdpdGggYHF1ZXVlVGFza2Agb3RoZXJ3aXNlLlxyXG4gKlxyXG4gKiBTaW5jZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUncyBiZWhhdmlvciBkb2VzIG5vdCBtYXRjaCB0aGF0IGV4cGVjdGVkIGZyb20gYHF1ZXVlVGFza2AsIGl0IGlzIG5vdCB1c2VkIHRoZXJlLlxyXG4gKiBIb3dldmVyLCBhdCB0aW1lcyBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGRlbGVnYXRlIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZTsgaGVuY2UgdGhlIGZvbGxvd2luZyBtZXRob2QuXHJcbiAqXHJcbiAqIEBwYXJhbSBjYWxsYmFjayB0aGUgZnVuY3Rpb24gdG8gYmUgcXVldWVkIGFuZCBsYXRlciBleGVjdXRlZC5cclxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBxdWV1ZUFuaW1hdGlvblRhc2sgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCF0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXVlVGFzaztcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHF1ZXVlQW5pbWF0aW9uVGFzayhjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB7XHJcbiAgICAgICAgICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSkpO1xyXG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxyXG4gICAgcmV0dXJuIHRydWVcclxuICAgICAgICA/IHF1ZXVlQW5pbWF0aW9uVGFza1xyXG4gICAgICAgIDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHF1ZXVlQW5pbWF0aW9uVGFzayhjYWxsYmFjayk7XHJcbiAgICAgICAgfTtcclxufSkoKTtcclxuLyoqXHJcbiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIHRoZSBtaWNyb3Rhc2sgcXVldWUuXHJcbiAqXHJcbiAqIEFueSBjYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIGBxdWV1ZU1pY3JvVGFza2Agd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIG5leHQgbWFjcm90YXNrLiBJZiBubyBuYXRpdmVcclxuICogbWVjaGFuaXNtIGZvciBzY2hlZHVsaW5nIG1hY3JvdGFza3MgaXMgZXhwb3NlZCwgdGhlbiBhbnkgY2FsbGJhY2tzIHdpbGwgYmUgZmlyZWQgYmVmb3JlIGFueSBtYWNyb3Rhc2tcclxuICogcmVnaXN0ZXJlZCB3aXRoIGBxdWV1ZVRhc2tgIG9yIGBxdWV1ZUFuaW1hdGlvblRhc2tgLlxyXG4gKlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXHJcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGEgYGRlc3Ryb3lgIG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgcHJldmVudHMgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnJvbSBleGVjdXRpbmcuXHJcbiAqL1xyXG5leHBvcnQgbGV0IHF1ZXVlTWljcm9UYXNrID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBlbnF1ZXVlO1xyXG4gICAgaWYgKGZhbHNlKSB7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5wcm9jZXNzLm5leHRUaWNrKGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0cnVlKSB7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5Qcm9taXNlLnJlc29sdmUoaXRlbSkudGhlbihleGVjdXRlVGFzayk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRydWUpIHtcclxuICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSAqL1xyXG4gICAgICAgIGNvbnN0IEhvc3RNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXVlID0gW107XHJcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSG9zdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHF1ZXVlLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmlzQWN0aXZlICYmIGl0ZW0uY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgcXVldWUucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3F1ZXVlU3RhdHVzJywgJzEnKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcclxuICAgICAgICAgICAgbWljcm9UYXNrcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHtcclxuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZW5xdWV1ZShpdGVtKTtcclxuICAgICAgICByZXR1cm4gZ2V0UXVldWVIYW5kbGUoaXRlbSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1xdWV1ZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3F1ZXVlLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3F1ZXVlLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsIi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgdmFsdWUgcHJvcGVydHkgZGVzY3JpcHRvclxuICpcbiAqIEBwYXJhbSB2YWx1ZSAgICAgICAgVGhlIHZhbHVlIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHNob3VsZCBiZSBzZXQgdG9cbiAqIEBwYXJhbSBlbnVtZXJhYmxlICAgSWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBlbnVtYmVyYWJsZSwgZGVmYXVsdHMgdG8gZmFsc2VcbiAqIEBwYXJhbSB3cml0YWJsZSAgICAgSWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSB3cml0YWJsZSwgZGVmYXVsdHMgdG8gdHJ1ZVxuICogQHBhcmFtIGNvbmZpZ3VyYWJsZSBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSwgZGVmYXVsdHMgdG8gdHJ1ZVxuICogQHJldHVybiAgICAgICAgICAgICBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlRGVzY3JpcHRvcih2YWx1ZSwgZW51bWVyYWJsZSA9IGZhbHNlLCB3cml0YWJsZSA9IHRydWUsIGNvbmZpZ3VyYWJsZSA9IHRydWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVudW1lcmFibGU6IGVudW1lcmFibGUsXG4gICAgICAgIHdyaXRhYmxlOiB3cml0YWJsZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBjb25maWd1cmFibGVcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBOYXRpdmUobmF0aXZlRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmF0aXZlRnVuY3Rpb24uYXBwbHkodGFyZ2V0LCBhcmdzKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3V0aWwubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N1cHBvcnQvdXRpbC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnQGRvam8vY29yZS9FdmVudGVkJztcbmV4cG9ydCBjbGFzcyBJbmplY3RvciBleHRlbmRzIEV2ZW50ZWQge1xuICAgIGNvbnN0cnVjdG9yKHBheWxvYWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgfVxuICAgIHNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKSB7XG4gICAgICAgIHRoaXMuX2ludmFsaWRhdG9yID0gaW52YWxpZGF0b3I7XG4gICAgfVxuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BheWxvYWQ7XG4gICAgfVxuICAgIHNldChwYXlsb2FkKSB7XG4gICAgICAgIHRoaXMuX3BheWxvYWQgPSBwYXlsb2FkO1xuICAgICAgICBpZiAodGhpcy5faW52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2ludmFsaWRhdG9yKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBJbmplY3Rvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUluamVjdG9yLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9JbmplY3Rvci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL0luamVjdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IEV2ZW50ZWQgfSBmcm9tICdAZG9qby9jb3JlL0V2ZW50ZWQnO1xyXG5pbXBvcnQgTWFwIGZyb20gJ0Bkb2pvL3NoaW0vTWFwJztcclxuLyoqXHJcbiAqIEVudW0gdG8gaWRlbnRpZnkgdGhlIHR5cGUgb2YgZXZlbnQuXHJcbiAqIExpc3RlbmluZyB0byAnUHJvamVjdG9yJyB3aWxsIG5vdGlmeSB3aGVuIHByb2plY3RvciBpcyBjcmVhdGVkIG9yIHVwZGF0ZWRcclxuICogTGlzdGVuaW5nIHRvICdXaWRnZXQnIHdpbGwgbm90aWZ5IHdoZW4gd2lkZ2V0IHJvb3QgaXMgY3JlYXRlZCBvciB1cGRhdGVkXHJcbiAqL1xyXG5leHBvcnQgdmFyIE5vZGVFdmVudFR5cGU7XHJcbihmdW5jdGlvbiAoTm9kZUV2ZW50VHlwZSkge1xyXG4gICAgTm9kZUV2ZW50VHlwZVtcIlByb2plY3RvclwiXSA9IFwiUHJvamVjdG9yXCI7XHJcbiAgICBOb2RlRXZlbnRUeXBlW1wiV2lkZ2V0XCJdID0gXCJXaWRnZXRcIjtcclxufSkoTm9kZUV2ZW50VHlwZSB8fCAoTm9kZUV2ZW50VHlwZSA9IHt9KSk7XHJcbmV4cG9ydCBjbGFzcyBOb2RlSGFuZGxlciBleHRlbmRzIEV2ZW50ZWQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICB0aGlzLl9ub2RlTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG4gICAgZ2V0KGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlTWFwLmdldChrZXkpO1xyXG4gICAgfVxyXG4gICAgaGFzKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlTWFwLmhhcyhrZXkpO1xyXG4gICAgfVxyXG4gICAgYWRkKGVsZW1lbnQsIGtleSkge1xyXG4gICAgICAgIHRoaXMuX25vZGVNYXAuc2V0KGtleSwgZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZToga2V5IH0pO1xyXG4gICAgfVxyXG4gICAgYWRkUm9vdCgpIHtcclxuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLldpZGdldCB9KTtcclxuICAgIH1cclxuICAgIGFkZFByb2plY3RvcigpIHtcclxuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLlByb2plY3RvciB9KTtcclxuICAgIH1cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuX25vZGVNYXAuY2xlYXIoKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBOb2RlSGFuZGxlcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm9kZUhhbmRsZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL05vZGVIYW5kbGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IFByb21pc2UgZnJvbSAnQGRvam8vc2hpbS9Qcm9taXNlJztcclxuaW1wb3J0IE1hcCBmcm9tICdAZG9qby9zaGltL01hcCc7XHJcbmltcG9ydCBTeW1ib2wgZnJvbSAnQGRvam8vc2hpbS9TeW1ib2wnO1xyXG5pbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnQGRvam8vY29yZS9FdmVudGVkJztcclxuLyoqXHJcbiAqIFdpZGdldCBiYXNlIHN5bWJvbCB0eXBlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgV0lER0VUX0JBU0VfVFlQRSA9IFN5bWJvbCgnV2lkZ2V0IEJhc2UnKTtcclxuLyoqXHJcbiAqIENoZWNrcyBpcyB0aGUgaXRlbSBpcyBhIHN1YmNsYXNzIG9mIFdpZGdldEJhc2UgKG9yIGEgV2lkZ2V0QmFzZSlcclxuICpcclxuICogQHBhcmFtIGl0ZW0gdGhlIGl0ZW0gdG8gY2hlY2tcclxuICogQHJldHVybnMgdHJ1ZS9mYWxzZSBpbmRpY2F0aW5nIGlmIHRoZSBpdGVtIGlzIGEgV2lkZ2V0QmFzZUNvbnN0cnVjdG9yXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkge1xyXG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJiBpdGVtLl90eXBlID09PSBXSURHRVRfQkFTRV9UWVBFKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQoaXRlbSkge1xyXG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJlxyXG4gICAgICAgIGl0ZW0uaGFzT3duUHJvcGVydHkoJ19fZXNNb2R1bGUnKSAmJlxyXG4gICAgICAgIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSAmJlxyXG4gICAgICAgIGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0uZGVmYXVsdCkpO1xyXG59XHJcbi8qKlxyXG4gKiBUaGUgUmVnaXN0cnkgaW1wbGVtZW50YXRpb25cclxuICovXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3RyeSBleHRlbmRzIEV2ZW50ZWQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0IGxvYWRlZCBldmVudCBmb3IgcmVnaXN0cnkgbGFiZWxcclxuICAgICAqL1xyXG4gICAgZW1pdExvYWRlZEV2ZW50KHdpZGdldExhYmVsLCBpdGVtKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KHtcclxuICAgICAgICAgICAgdHlwZTogd2lkZ2V0TGFiZWwsXHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xvYWRlZCcsXHJcbiAgICAgICAgICAgIGl0ZW1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGRlZmluZShsYWJlbCwgaXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLl93aWRnZXRSZWdpc3RyeSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdpZGdldCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgZm9yICcke2xhYmVsLnRvU3RyaW5nKCl9J2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIGl0ZW0pO1xyXG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICBpdGVtLnRoZW4oKHdpZGdldEN0b3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgd2lkZ2V0Q3Rvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgd2lkZ2V0Q3Rvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gd2lkZ2V0Q3RvcjtcclxuICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCBpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkZWZpbmVJbmplY3RvcihsYWJlbCwgaW5qZWN0b3JGYWN0b3J5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luamVjdG9yUmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5faW5qZWN0b3JSZWdpc3RyeS5oYXMobGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5qZWN0b3IgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnJHtsYWJlbC50b1N0cmluZygpfSdgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW52YWxpZGF0b3IgPSBuZXcgRXZlbnRlZCgpO1xyXG4gICAgICAgIGNvbnN0IGluamVjdG9ySXRlbSA9IHtcclxuICAgICAgICAgICAgaW5qZWN0b3I6IGluamVjdG9yRmFjdG9yeSgoKSA9PiBpbnZhbGlkYXRvci5lbWl0KHsgdHlwZTogJ2ludmFsaWRhdGUnIH0pKSxcclxuICAgICAgICAgICAgaW52YWxpZGF0b3JcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX2luamVjdG9yUmVnaXN0cnkuc2V0KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xyXG4gICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xyXG4gICAgfVxyXG4gICAgZ2V0KGxhYmVsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl93aWRnZXRSZWdpc3RyeSB8fCAhdGhpcy5oYXMobGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fd2lkZ2V0UmVnaXN0cnkuZ2V0KGxhYmVsKTtcclxuICAgICAgICBpZiAoaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IGl0ZW0oKTtcclxuICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIHByb21pc2UpO1xyXG4gICAgICAgIHByb21pc2UudGhlbigod2lkZ2V0Q3RvcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQod2lkZ2V0Q3RvcikpIHtcclxuICAgICAgICAgICAgICAgIHdpZGdldEN0b3IgPSB3aWRnZXRDdG9yLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCB3aWRnZXRDdG9yKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gd2lkZ2V0Q3RvcjtcclxuICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBnZXRJbmplY3RvcihsYWJlbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5faW5qZWN0b3JSZWdpc3RyeSB8fCAhdGhpcy5oYXNJbmplY3RvcihsYWJlbCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmdldChsYWJlbCk7XHJcbiAgICB9XHJcbiAgICBoYXMobGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLl93aWRnZXRSZWdpc3RyeSAmJiB0aGlzLl93aWRnZXRSZWdpc3RyeS5oYXMobGFiZWwpKTtcclxuICAgIH1cclxuICAgIGhhc0luamVjdG9yKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5faW5qZWN0b3JSZWdpc3RyeSAmJiB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmhhcyhsYWJlbCkpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFJlZ2lzdHJ5O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWdpc3RyeS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvUmVnaXN0cnkubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9SZWdpc3RyeS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgeyBNYXAgfSBmcm9tICdAZG9qby9zaGltL01hcCc7XHJcbmltcG9ydCB7IEV2ZW50ZWQgfSBmcm9tICdAZG9qby9jb3JlL0V2ZW50ZWQnO1xyXG5pbXBvcnQgeyBSZWdpc3RyeSB9IGZyb20gJy4vUmVnaXN0cnknO1xyXG5leHBvcnQgY2xhc3MgUmVnaXN0cnlIYW5kbGVyIGV4dGVuZHMgRXZlbnRlZCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KCk7XHJcbiAgICAgICAgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5vd24odGhpcy5fcmVnaXN0cnkpO1xyXG4gICAgICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VSZWdpc3RyeSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VSZWdpc3RyeSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vd24oeyBkZXN0cm95IH0pO1xyXG4gICAgfVxyXG4gICAgc2V0IGJhc2UoYmFzZVJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYmFzZVJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcclxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYmFzZVJlZ2lzdHJ5ID0gYmFzZVJlZ2lzdHJ5O1xyXG4gICAgfVxyXG4gICAgZGVmaW5lKGxhYmVsLCB3aWRnZXQpIHtcclxuICAgICAgICB0aGlzLl9yZWdpc3RyeS5kZWZpbmUobGFiZWwsIHdpZGdldCk7XHJcbiAgICB9XHJcbiAgICBkZWZpbmVJbmplY3RvcihsYWJlbCwgaW5qZWN0b3IpIHtcclxuICAgICAgICB0aGlzLl9yZWdpc3RyeS5kZWZpbmVJbmplY3RvcihsYWJlbCwgaW5qZWN0b3IpO1xyXG4gICAgfVxyXG4gICAgaGFzKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmhhcyhsYWJlbCkgfHwgQm9vbGVhbih0aGlzLmJhc2VSZWdpc3RyeSAmJiB0aGlzLmJhc2VSZWdpc3RyeS5oYXMobGFiZWwpKTtcclxuICAgIH1cclxuICAgIGhhc0luamVjdG9yKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJ5Lmhhc0luamVjdG9yKGxhYmVsKSB8fCBCb29sZWFuKHRoaXMuYmFzZVJlZ2lzdHJ5ICYmIHRoaXMuYmFzZVJlZ2lzdHJ5Lmhhc0luamVjdG9yKGxhYmVsKSk7XHJcbiAgICB9XHJcbiAgICBnZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UgPSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsICdnZXQnLCB0aGlzLl9yZWdpc3RyeVdpZGdldExhYmVsTWFwKTtcclxuICAgIH1cclxuICAgIGdldEluamVjdG9yKGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlID0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCAnZ2V0SW5qZWN0b3InLCB0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXApO1xyXG4gICAgfVxyXG4gICAgX2dldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSwgZ2V0RnVuY3Rpb25OYW1lLCBsYWJlbE1hcCkge1xyXG4gICAgICAgIGNvbnN0IHJlZ2lzdHJpZXMgPSBnbG9iYWxQcmVjZWRlbmNlID8gW3RoaXMuYmFzZVJlZ2lzdHJ5LCB0aGlzLl9yZWdpc3RyeV0gOiBbdGhpcy5fcmVnaXN0cnksIHRoaXMuYmFzZVJlZ2lzdHJ5XTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZ2lzdHJpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcmVnaXN0cnkgPSByZWdpc3RyaWVzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIXJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcmVnaXN0cnlbZ2V0RnVuY3Rpb25OYW1lXShsYWJlbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lzdGVyZWRMYWJlbHMgPSBsYWJlbE1hcC5nZXQocmVnaXN0cnkpIHx8IFtdO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocmVnaXN0ZXJlZExhYmVscy5pbmRleE9mKGxhYmVsKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IHJlZ2lzdHJ5Lm9uKGxhYmVsLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbG9hZGVkJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2dldEZ1bmN0aW9uTmFtZV0obGFiZWwsIGdsb2JhbFByZWNlZGVuY2UpID09PSBldmVudC5pdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6ICdpbnZhbGlkYXRlJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3duKGhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICBsYWJlbE1hcC5zZXQocmVnaXN0cnksIFsuLi5yZWdpc3RlcmVkTGFiZWxzLCBsYWJlbF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFJlZ2lzdHJ5SGFuZGxlcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVnaXN0cnlIYW5kbGVyLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IE1hcCBmcm9tICdAZG9qby9zaGltL01hcCc7XG5pbXBvcnQgV2Vha01hcCBmcm9tICdAZG9qby9zaGltL1dlYWtNYXAnO1xuaW1wb3J0IFN5bWJvbCBmcm9tICdAZG9qby9zaGltL1N5bWJvbCc7XG5pbXBvcnQgeyB2IH0gZnJvbSAnLi9kJztcbmltcG9ydCB7IGF1dG8gfSBmcm9tICcuL2RpZmYnO1xuaW1wb3J0IFJlZ2lzdHJ5SGFuZGxlciBmcm9tICcuL1JlZ2lzdHJ5SGFuZGxlcic7XG5pbXBvcnQgTm9kZUhhbmRsZXIgZnJvbSAnLi9Ob2RlSGFuZGxlcic7XG5pbXBvcnQgeyB3aWRnZXRJbnN0YW5jZU1hcCB9IGZyb20gJy4vdmRvbSc7XG5pbXBvcnQgeyBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvciwgV0lER0VUX0JBU0VfVFlQRSB9IGZyb20gJy4vUmVnaXN0cnknO1xuY29uc3QgZGVjb3JhdG9yTWFwID0gbmV3IE1hcCgpO1xuY29uc3QgYm91bmRBdXRvID0gYXV0by5iaW5kKG51bGwpO1xuZXhwb3J0IGNvbnN0IG5vQmluZCA9IFN5bWJvbC5mb3IoJ2Rvam9Ob0JpbmQnKTtcbi8qKlxuICogTWFpbiB3aWRnZXQgYmFzZSBmb3IgYWxsIHdpZGdldHMgdG8gZXh0ZW5kXG4gKi9cbmV4cG9ydCBjbGFzcyBXaWRnZXRCYXNlIHtcbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyBpZiBpdCBpcyB0aGUgaW5pdGlhbCBzZXQgcHJvcGVydGllcyBjeWNsZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5faW5pdGlhbFByb3BlcnRpZXMgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQXJyYXkgb2YgcHJvcGVydHkga2V5cyBjb25zaWRlcmVkIGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgc2V0IHByb3BlcnRpZXNcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5fbm9kZUhhbmRsZXIgPSBuZXcgTm9kZUhhbmRsZXIoKTtcbiAgICAgICAgdGhpcy5faGFuZGxlcyA9IFtdO1xuICAgICAgICB0aGlzLl9jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLl9kZWNvcmF0b3JDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHt9O1xuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlckZ1bmMgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9ib3VuZEludmFsaWRhdGUgPSB0aGlzLmludmFsaWRhdGUuYmluZCh0aGlzKTtcbiAgICAgICAgd2lkZ2V0SW5zdGFuY2VNYXAuc2V0KHRoaXMsIHtcbiAgICAgICAgICAgIGRpcnR5OiB0cnVlLFxuICAgICAgICAgICAgb25BdHRhY2g6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXR0YWNoKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25EZXRhY2g6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGV0YWNoKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9kZUhhbmRsZXI6IHRoaXMuX25vZGVIYW5kbGVyLFxuICAgICAgICAgICAgcmVnaXN0cnk6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3JlUHJvcGVydGllczoge30sXG4gICAgICAgICAgICByZW5kZXJpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaW5wdXRQcm9wZXJ0aWVzOiB7fVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcnVuQWZ0ZXJDb25zdHJ1Y3RvcnMoKTtcbiAgICB9XG4gICAgbWV0YShNZXRhVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5fbWV0YU1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9tZXRhTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjYWNoZWQgPSB0aGlzLl9tZXRhTWFwLmdldChNZXRhVHlwZSk7XG4gICAgICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgICAgICBjYWNoZWQgPSBuZXcgTWV0YVR5cGUoe1xuICAgICAgICAgICAgICAgIGludmFsaWRhdGU6IHRoaXMuX2JvdW5kSW52YWxpZGF0ZSxcbiAgICAgICAgICAgICAgICBub2RlSGFuZGxlcjogdGhpcy5fbm9kZUhhbmRsZXIsXG4gICAgICAgICAgICAgICAgYmluZDogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm93bihjYWNoZWQpO1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcC5zZXQoTWV0YVR5cGUsIGNhY2hlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgb25BdHRhY2goKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgYnkgZGVmYXVsdC5cbiAgICB9XG4gICAgb25EZXRhY2goKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgYnkgZGVmYXVsdC5cbiAgICB9XG4gICAgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBnZXQgY2hhbmdlZFByb3BlcnR5S2V5cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzXTtcbiAgICB9XG4gICAgX19zZXRDb3JlUHJvcGVydGllc19fKGNvcmVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvbnN0IHsgYmFzZVJlZ2lzdHJ5IH0gPSBjb3JlUHJvcGVydGllcztcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJhc2VSZWdpc3RyeSAhPT0gYmFzZVJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5SGFuZGxlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMub3duKHRoaXMuX3JlZ2lzdHJ5KTtcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkuYmFzZSA9IGJhc2VSZWdpc3RyeTtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcyA9IGNvcmVQcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBfX3NldFByb3BlcnRpZXNfXyhvcmlnaW5hbFByb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpbnN0YW5jZURhdGEuaW5wdXRQcm9wZXJ0aWVzID0gb3JpZ2luYWxQcm9wZXJ0aWVzO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5fcnVuQmVmb3JlUHJvcGVydGllcyhvcmlnaW5hbFByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCByZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMgPSB0aGlzLmdldERlY29yYXRvcigncmVnaXN0ZXJlZERpZmZQcm9wZXJ0eScpO1xuICAgICAgICBjb25zdCBjaGFuZ2VkUHJvcGVydHlLZXlzID0gW107XG4gICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID09PSBmYWxzZSB8fCByZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxQcm9wZXJ0aWVzID0gWy4uLnByb3BlcnR5TmFtZXMsIC4uLk9iamVjdC5rZXlzKHRoaXMuX3Byb3BlcnRpZXMpXTtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRQcm9wZXJ0aWVzID0gW107XG4gICAgICAgICAgICBjb25zdCBkaWZmUHJvcGVydHlSZXN1bHRzID0ge307XG4gICAgICAgICAgICBsZXQgcnVuUmVhY3Rpb25zID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja2VkUHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGVja2VkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9wZXJ0eSA9IHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQcm9wZXJ0eSA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSwgaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJpbmQpO1xuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBydW5SZWFjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWZmRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoYGRpZmZQcm9wZXJ0eToke3Byb3BlcnR5TmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkaWZmRnVuY3Rpb25zW2ldKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlZCAmJiBjaGFuZ2VkUHJvcGVydHlLZXlzLmluZGV4T2YocHJvcGVydHlOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkUHJvcGVydHlLZXlzLnB1c2gocHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZQcm9wZXJ0eVJlc3VsdHNbcHJvcGVydHlOYW1lXSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYm91bmRBdXRvKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VkICYmIGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWZmUHJvcGVydHlSZXN1bHRzW3Byb3BlcnR5TmFtZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVuUmVhY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwRGlmZlByb3BlcnR5UmVhY3Rpb25zKHByb3BlcnRpZXMsIGNoYW5nZWRQcm9wZXJ0eUtleXMpLmZvckVhY2goKGFyZ3MsIHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmNhbGwodGhpcywgYXJncy5wcmV2aW91c1Byb3BlcnRpZXMsIGFyZ3MubmV3UHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBkaWZmUHJvcGVydHlSZXN1bHRzO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cyA9IGNoYW5nZWRQcm9wZXJ0eUtleXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsUHJvcGVydGllcyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0sIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iaW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0eUtleXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMgPSBjaGFuZ2VkUHJvcGVydHlLZXlzO1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuICAgIH1cbiAgICBfX3NldENoaWxkcmVuX18oY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA+IDAgfHwgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9fcmVuZGVyX18oKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IHRoaXMuX3J1bkJlZm9yZVJlbmRlcnMoKTtcbiAgICAgICAgbGV0IGROb2RlID0gcmVuZGVyKCk7XG4gICAgICAgIGROb2RlID0gdGhpcy5ydW5BZnRlclJlbmRlcnMoZE5vZGUpO1xuICAgICAgICB0aGlzLl9ub2RlSGFuZGxlci5jbGVhcigpO1xuICAgICAgICByZXR1cm4gZE5vZGU7XG4gICAgfVxuICAgIGludmFsaWRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlKSB7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHYoJ2RpdicsIHt9LCB0aGlzLmNoaWxkcmVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gYWRkIGRlY29yYXRvcnMgdG8gV2lkZ2V0QmFzZVxuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSBUaGUga2V5IG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKi9cbiAgICBhZGREZWNvcmF0b3IoZGVjb3JhdG9yS2V5LCB2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eSgnY29uc3RydWN0b3InKSkge1xuICAgICAgICAgICAgbGV0IGRlY29yYXRvckxpc3QgPSBkZWNvcmF0b3JNYXAuZ2V0KHRoaXMuY29uc3RydWN0b3IpO1xuICAgICAgICAgICAgaWYgKCFkZWNvcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yTGlzdCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JNYXAuc2V0KHRoaXMuY29uc3RydWN0b3IsIGRlY29yYXRvckxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNwZWNpZmljRGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvckxpc3QuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICBpZiAoIXNwZWNpZmljRGVjb3JhdG9yTGlzdCkge1xuICAgICAgICAgICAgICAgIHNwZWNpZmljRGVjb3JhdG9yTGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIGRlY29yYXRvckxpc3Quc2V0KGRlY29yYXRvcktleSwgc3BlY2lmaWNEZWNvcmF0b3JMaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwZWNpZmljRGVjb3JhdG9yTGlzdC5wdXNoKC4uLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSB0aGlzLmdldERlY29yYXRvcihkZWNvcmF0b3JLZXkpO1xuICAgICAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgWy4uLmRlY29yYXRvcnMsIC4uLnZhbHVlXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gYnVpbGQgdGhlIGxpc3Qgb2YgZGVjb3JhdG9ycyBmcm9tIHRoZSBnbG9iYWwgZGVjb3JhdG9yIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWNvcmF0b3JLZXkgIFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgZGVjb3JhdG9yIHZhbHVlc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2J1aWxkRGVjb3JhdG9yTGlzdChkZWNvcmF0b3JLZXkpIHtcbiAgICAgICAgY29uc3QgYWxsRGVjb3JhdG9ycyA9IFtdO1xuICAgICAgICBsZXQgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICB3aGlsZSAoY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZGVjb3JhdG9yTWFwLmdldChjb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VNYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNvcmF0b3JzID0gaW5zdGFuY2VNYXAuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICAgICAgaWYgKGRlY29yYXRvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsRGVjb3JhdG9ycy51bnNoaWZ0KC4uLmRlY29yYXRvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNvbnN0cnVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gcmV0cmlldmUgZGVjb3JhdG9yIHZhbHVlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSBUaGUga2V5IG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICovXG4gICAgZ2V0RGVjb3JhdG9yKGRlY29yYXRvcktleSkge1xuICAgICAgICBsZXQgYWxsRGVjb3JhdG9ycyA9IHRoaXMuX2RlY29yYXRvckNhY2hlLmdldChkZWNvcmF0b3JLZXkpO1xuICAgICAgICBpZiAoYWxsRGVjb3JhdG9ycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICAgICAgfVxuICAgICAgICBhbGxEZWNvcmF0b3JzID0gdGhpcy5fYnVpbGREZWNvcmF0b3JMaXN0KGRlY29yYXRvcktleSk7XG4gICAgICAgIHRoaXMuX2RlY29yYXRvckNhY2hlLnNldChkZWNvcmF0b3JLZXksIGFsbERlY29yYXRvcnMpO1xuICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICB9XG4gICAgX21hcERpZmZQcm9wZXJ0eVJlYWN0aW9ucyhuZXdQcm9wZXJ0aWVzLCBjaGFuZ2VkUHJvcGVydHlLZXlzKSB7XG4gICAgICAgIGNvbnN0IHJlYWN0aW9uRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicpO1xuICAgICAgICByZXR1cm4gcmVhY3Rpb25GdW5jdGlvbnMucmVkdWNlKChyZWFjdGlvblByb3BlcnR5TWFwLCB7IHJlYWN0aW9uLCBwcm9wZXJ0eU5hbWUgfSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlYWN0aW9uQXJndW1lbnRzID0gcmVhY3Rpb25Qcm9wZXJ0eU1hcC5nZXQocmVhY3Rpb24pO1xuICAgICAgICAgICAgaWYgKHJlYWN0aW9uQXJndW1lbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZWFjdGlvbkFyZ3VtZW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQcm9wZXJ0aWVzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgbmV3UHJvcGVydGllczoge30sXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWN0aW9uQXJndW1lbnRzLnByZXZpb3VzUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgcmVhY3Rpb25Bcmd1bWVudHMubmV3UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gbmV3UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlYWN0aW9uQXJndW1lbnRzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVhY3Rpb25Qcm9wZXJ0eU1hcC5zZXQocmVhY3Rpb24sIHJlYWN0aW9uQXJndW1lbnRzKTtcbiAgICAgICAgICAgIHJldHVybiByZWFjdGlvblByb3BlcnR5TWFwO1xuICAgICAgICB9LCBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCaW5kcyB1bmJvdW5kIHByb3BlcnR5IGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBiaW5kYCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgZnVuY3Rpb25zXG4gICAgICovXG4gICAgX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnR5LCBiaW5kKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIXByb3BlcnR5W25vQmluZF0gJiYgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IocHJvcGVydHkpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiaW5kSW5mbyA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwLmdldChwcm9wZXJ0eSkgfHwge307XG4gICAgICAgICAgICBsZXQgeyBib3VuZEZ1bmMsIHNjb3BlIH0gPSBiaW5kSW5mbztcbiAgICAgICAgICAgIGlmIChib3VuZEZ1bmMgPT09IHVuZGVmaW5lZCB8fCBzY29wZSAhPT0gYmluZCkge1xuICAgICAgICAgICAgICAgIGJvdW5kRnVuYyA9IHByb3BlcnR5LmJpbmQoYmluZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAuc2V0KHByb3BlcnR5LCB7IGJvdW5kRnVuYywgc2NvcGU6IGJpbmQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm91bmRGdW5jO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gICAgZ2V0IHJlZ2lzdHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyKCk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeTtcbiAgICB9XG4gICAgX3J1bkJlZm9yZVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBiZWZvcmVQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnKTtcbiAgICAgICAgaWYgKGJlZm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJlZm9yZVByb3BlcnRpZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBiZWZvcmVQcm9wZXJ0aWVzRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uLmNhbGwodGhpcywgcHJvcGVydGllcykpO1xuICAgICAgICAgICAgfSwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYmVmb3JlIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgdXBkYXRlZCByZW5kZXIgbWV0aG9kXG4gICAgICovXG4gICAgX3J1bkJlZm9yZVJlbmRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZVJlbmRlcnMgPSB0aGlzLmdldERlY29yYXRvcignYmVmb3JlUmVuZGVyJyk7XG4gICAgICAgIGlmIChiZWZvcmVSZW5kZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmVSZW5kZXJzLnJlZHVjZSgocmVuZGVyLCBiZWZvcmVSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZW5kZXIgPSBiZWZvcmVSZW5kZXJGdW5jdGlvbi5jYWxsKHRoaXMsIHJlbmRlciwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlciBmdW5jdGlvbiBub3QgcmV0dXJuZWQgZnJvbSBiZWZvcmVSZW5kZXIsIHVzaW5nIHByZXZpb3VzIHJlbmRlcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZFJlbmRlcjtcbiAgICAgICAgICAgIH0sIHRoaXMuX2JvdW5kUmVuZGVyRnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kUmVuZGVyRnVuYztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGFsbCByZWdpc3RlcmVkIGFmdGVyIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgZGVjb3JhdGVkIEROb2Rlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGROb2RlIFRoZSBETm9kZXMgdG8gcnVuIHRocm91Z2ggdGhlIGFmdGVyIHJlbmRlcnNcbiAgICAgKi9cbiAgICBydW5BZnRlclJlbmRlcnMoZE5vZGUpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJSZW5kZXJzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJyk7XG4gICAgICAgIGlmIChhZnRlclJlbmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGFmdGVyUmVuZGVycy5yZWR1Y2UoKGROb2RlLCBhZnRlclJlbmRlckZ1bmN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFmdGVyUmVuZGVyRnVuY3Rpb24uY2FsbCh0aGlzLCBkTm9kZSk7XG4gICAgICAgICAgICB9LCBkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21ldGFNYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcC5mb3JFYWNoKChtZXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgbWV0YS5hZnRlclJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGROb2RlO1xuICAgIH1cbiAgICBfcnVuQWZ0ZXJDb25zdHJ1Y3RvcnMoKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyQ29uc3RydWN0b3JzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyQ29uc3RydWN0b3InKTtcbiAgICAgICAgaWYgKGFmdGVyQ29uc3RydWN0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFmdGVyQ29uc3RydWN0b3JzLmZvckVhY2goKGFmdGVyQ29uc3RydWN0b3IpID0+IGFmdGVyQ29uc3RydWN0b3IuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb3duKGhhbmRsZSkge1xuICAgICAgICB0aGlzLl9oYW5kbGVzLnB1c2goaGFuZGxlKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2hhbmRsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gdGhpcy5faGFuZGxlcy5wb3AoKTtcbiAgICAgICAgICAgIGlmIChoYW5kbGUpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBzdGF0aWMgaWRlbnRpZmllclxuICovXG5XaWRnZXRCYXNlLl90eXBlID0gV0lER0VUX0JBU0VfVFlQRTtcbmV4cG9ydCBkZWZhdWx0IFdpZGdldEJhc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaWRnZXRCYXNlLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9XaWRnZXRCYXNlLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJsZXQgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICcnO1xubGV0IGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9ICcnO1xuZnVuY3Rpb24gZGV0ZXJtaW5lQnJvd3NlclN0eWxlTmFtZXMoZWxlbWVudCkge1xuICAgIGlmICgnV2Via2l0VHJhbnNpdGlvbicgaW4gZWxlbWVudC5zdHlsZSkge1xuICAgICAgICBicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICAgICAgICBicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnd2Via2l0QW5pbWF0aW9uRW5kJztcbiAgICB9XG4gICAgZWxzZSBpZiAoJ3RyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUgfHwgJ01velRyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUpIHtcbiAgICAgICAgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICd0cmFuc2l0aW9uZW5kJztcbiAgICAgICAgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJ2FuaW1hdGlvbmVuZCc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdXIgYnJvd3NlciBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZShlbGVtZW50KSB7XG4gICAgaWYgKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9PT0gJycpIHtcbiAgICAgICAgZGV0ZXJtaW5lQnJvd3NlclN0eWxlTmFtZXMoZWxlbWVudCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcnVuQW5kQ2xlYW5VcChlbGVtZW50LCBzdGFydEFuaW1hdGlvbiwgZmluaXNoQW5pbWF0aW9uKSB7XG4gICAgaW5pdGlhbGl6ZShlbGVtZW50KTtcbiAgICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcbiAgICBsZXQgdHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICBmaW5pc2hBbmltYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc3RhcnRBbmltYXRpb24oKTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG59XG5mdW5jdGlvbiBleGl0KG5vZGUsIHByb3BlcnRpZXMsIGV4aXRBbmltYXRpb24sIHJlbW92ZU5vZGUpIHtcbiAgICBjb25zdCBhY3RpdmVDbGFzcyA9IHByb3BlcnRpZXMuZXhpdEFuaW1hdGlvbkFjdGl2ZSB8fCBgJHtleGl0QW5pbWF0aW9ufS1hY3RpdmVgO1xuICAgIHJ1bkFuZENsZWFuVXAobm9kZSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoZXhpdEFuaW1hdGlvbik7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoYWN0aXZlQ2xhc3MpO1xuICAgICAgICB9KTtcbiAgICB9LCAoKSA9PiB7XG4gICAgICAgIHJlbW92ZU5vZGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGVudGVyKG5vZGUsIHByb3BlcnRpZXMsIGVudGVyQW5pbWF0aW9uKSB7XG4gICAgY29uc3QgYWN0aXZlQ2xhc3MgPSBwcm9wZXJ0aWVzLmVudGVyQW5pbWF0aW9uQWN0aXZlIHx8IGAke2VudGVyQW5pbWF0aW9ufS1hY3RpdmVgO1xuICAgIHJ1bkFuZENsZWFuVXAobm9kZSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoZW50ZXJBbmltYXRpb24pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoZW50ZXJBbmltYXRpb24pO1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoYWN0aXZlQ2xhc3MpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGVudGVyLFxuICAgIGV4aXRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jc3NUcmFuc2l0aW9ucy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IFN5bWJvbCBmcm9tICdAZG9qby9zaGltL1N5bWJvbCc7XG4vKipcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBXTm9kZSB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBXTk9ERSA9IFN5bWJvbCgnSWRlbnRpZmllciBmb3IgYSBXTm9kZS4nKTtcbi8qKlxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFZOb2RlIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IFZOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFZOb2RlLicpO1xuLyoqXG4gKiBUaGUgc3ltYm9sIGlkZW50aWZpZXIgZm9yIGEgVk5vZGUgdHlwZSBjcmVhdGVkIHVzaW5nIGRvbSgpXG4gKi9cbmV4cG9ydCBjb25zdCBET01WTk9ERSA9IFN5bWJvbCgnSWRlbnRpZmllciBmb3IgYSBWTm9kZSBjcmVhdGVkIHVzaW5nIGV4aXN0aW5nIGRvbS4nKTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFdOb2RlYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dOb2RlKGNoaWxkKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiBjaGlsZC50eXBlID09PSBXTk9ERSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgYEROb2RlYCBpcyBhIGBWTm9kZWAgdXNpbmcgdGhlIGB0eXBlYCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWTm9kZShjaGlsZCkge1xuICAgIHJldHVybiBCb29sZWFuKGNoaWxkICYmIHR5cGVvZiBjaGlsZCAhPT0gJ3N0cmluZycgJiYgKGNoaWxkLnR5cGUgPT09IFZOT0RFIHx8IGNoaWxkLnR5cGUgPT09IERPTVZOT0RFKSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgYEROb2RlYCBpcyBhIGBWTm9kZWAgY3JlYXRlZCB3aXRoIGBkb20oKWAgdXNpbmcgdGhlIGB0eXBlYCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEb21WTm9kZShjaGlsZCkge1xuICAgIHJldHVybiBCb29sZWFuKGNoaWxkICYmIHR5cGVvZiBjaGlsZCAhPT0gJ3N0cmluZycgJiYgY2hpbGQudHlwZSA9PT0gRE9NVk5PREUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudE5vZGUodmFsdWUpIHtcbiAgICByZXR1cm4gISF2YWx1ZS50YWdOYW1lO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlKGROb2Rlcywgb3B0aW9uc09yTW9kaWZpZXIsIHByZWRpY2F0ZSkge1xuICAgIGxldCBzaGFsbG93ID0gZmFsc2U7XG4gICAgbGV0IG1vZGlmaWVyO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yTW9kaWZpZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbW9kaWZpZXIgPSBvcHRpb25zT3JNb2RpZmllcjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG1vZGlmaWVyID0gb3B0aW9uc09yTW9kaWZpZXIubW9kaWZpZXI7XG4gICAgICAgIHByZWRpY2F0ZSA9IG9wdGlvbnNPck1vZGlmaWVyLnByZWRpY2F0ZTtcbiAgICAgICAgc2hhbGxvdyA9IG9wdGlvbnNPck1vZGlmaWVyLnNoYWxsb3cgfHwgZmFsc2U7XG4gICAgfVxuICAgIGxldCBub2RlcyA9IEFycmF5LmlzQXJyYXkoZE5vZGVzKSA/IFsuLi5kTm9kZXNdIDogW2ROb2Rlc107XG4gICAgZnVuY3Rpb24gYnJlYWtlcigpIHtcbiAgICAgICAgbm9kZXMgPSBbXTtcbiAgICB9XG4gICAgd2hpbGUgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBub2RlID0gbm9kZXMuc2hpZnQoKTtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICghc2hhbGxvdyAmJiAoaXNXTm9kZShub2RlKSB8fCBpc1ZOb2RlKG5vZGUpKSAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgbm9kZXMgPSBbLi4ubm9kZXMsIC4uLm5vZGUuY2hpbGRyZW5dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXIobm9kZSwgYnJlYWtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGROb2Rlcztcbn1cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgY2FsbHMgdG8gY3JlYXRlIGEgd2lkZ2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdyh3aWRnZXRDb25zdHJ1Y3RvciwgcHJvcGVydGllcywgY2hpbGRyZW4gPSBbXSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB3aWRnZXRDb25zdHJ1Y3RvcixcbiAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgdHlwZTogV05PREVcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHYodGFnLCBwcm9wZXJ0aWVzT3JDaGlsZHJlbiA9IHt9LCBjaGlsZHJlbiA9IHVuZGVmaW5lZCkge1xuICAgIGxldCBwcm9wZXJ0aWVzID0gcHJvcGVydGllc09yQ2hpbGRyZW47XG4gICAgbGV0IGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnRpZXNPckNoaWxkcmVuKSkge1xuICAgICAgICBjaGlsZHJlbiA9IHByb3BlcnRpZXNPckNoaWxkcmVuO1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBkZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9IHByb3BlcnRpZXM7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGFnLFxuICAgICAgICBkZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIHR5cGU6IFZOT0RFXG4gICAgfTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgVk5vZGUgZm9yIGFuIGV4aXN0aW5nIERPTSBOb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZG9tKHsgbm9kZSwgYXR0cnMgPSB7fSwgcHJvcHMgPSB7fSwgb24gPSB7fSwgZGlmZlR5cGUgPSAnbm9uZScgfSwgY2hpbGRyZW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0YWc6IGlzRWxlbWVudE5vZGUobm9kZSkgPyBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA6ICcnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wcyxcbiAgICAgICAgYXR0cmlidXRlczogYXR0cnMsXG4gICAgICAgIGV2ZW50czogb24sXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB0eXBlOiBET01WTk9ERSxcbiAgICAgICAgZG9tTm9kZTogbm9kZSxcbiAgICAgICAgdGV4dDogaXNFbGVtZW50Tm9kZShub2RlKSA/IHVuZGVmaW5lZCA6IG5vZGUuZGF0YSxcbiAgICAgICAgZGlmZlR5cGVcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2QubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyUmVuZGVyKG1ldGhvZCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYWZ0ZXJSZW5kZXInLCBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiBtZXRob2QpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgYWZ0ZXJSZW5kZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZnRlclJlbmRlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hZnRlclJlbmRlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuaW1wb3J0IHsgYmVmb3JlUHJvcGVydGllcyB9IGZyb20gJy4vYmVmb3JlUHJvcGVydGllcyc7XG5leHBvcnQgZnVuY3Rpb24gYWx3YXlzUmVuZGVyKCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgYmVmb3JlUHJvcGVydGllcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICAgICAgfSkodGFyZ2V0KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGFsd2F5c1JlbmRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFsd2F5c1JlbmRlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hbHdheXNSZW5kZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgeyBoYW5kbGVEZWNvcmF0b3IgfSBmcm9tICcuL2hhbmRsZURlY29yYXRvcic7XG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlUHJvcGVydGllcyhtZXRob2QpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnLCBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiBtZXRob2QpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgYmVmb3JlUHJvcGVydGllcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJlZm9yZVByb3BlcnRpZXMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYmVmb3JlUHJvcGVydGllcy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYmVmb3JlUHJvcGVydGllcy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgeyBDdXN0b21FbGVtZW50Q2hpbGRUeXBlIH0gZnJvbSAnLi4vcmVnaXN0ZXJDdXN0b21FbGVtZW50JztcbmltcG9ydCBSZWdpc3RyeSBmcm9tICcuLi9SZWdpc3RyeSc7XG4vKipcbiAqIFRoaXMgRGVjb3JhdG9yIGlzIHByb3ZpZGVkIHByb3BlcnRpZXMgdGhhdCBkZWZpbmUgdGhlIGJlaGF2aW9yIG9mIGEgY3VzdG9tIGVsZW1lbnQsIGFuZFxuICogcmVnaXN0ZXJzIHRoYXQgY3VzdG9tIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b21FbGVtZW50KHsgdGFnLCBwcm9wZXJ0aWVzID0gW10sIGF0dHJpYnV0ZXMgPSBbXSwgZXZlbnRzID0gW10sIGNoaWxkVHlwZSA9IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUuRE9KTywgcmVnaXN0cnlGYWN0b3J5ID0gKCkgPT4gbmV3IFJlZ2lzdHJ5KCkgfSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC5wcm90b3R5cGUuX19jdXN0b21FbGVtZW50RGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgIHRhZ05hbWU6IHRhZyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgICAgZXZlbnRzLFxuICAgICAgICAgICAgY2hpbGRUeXBlLFxuICAgICAgICAgICAgcmVnaXN0cnlGYWN0b3J5XG4gICAgICAgIH07XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbUVsZW1lbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jdXN0b21FbGVtZW50Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZWdpc3RlciBhIGZ1bmN0aW9uIGFzIGEgc3BlY2lmaWMgcHJvcGVydHkgZGlmZlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvZiB3aGljaCB0aGUgZGlmZiBmdW5jdGlvbiBpcyBhcHBsaWVkXG4gKiBAcGFyYW0gZGlmZlR5cGUgICAgICBUaGUgZGlmZiB0eXBlLCBkZWZhdWx0IGlzIERpZmZUeXBlLkFVVE8uXG4gKiBAcGFyYW0gZGlmZkZ1bmN0aW9uICBBIGRpZmYgZnVuY3Rpb24gdG8gcnVuIGlmIGRpZmZUeXBlIGlmIERpZmZUeXBlLkNVU1RPTVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZlByb3BlcnR5KHByb3BlcnR5TmFtZSwgZGlmZkZ1bmN0aW9uLCByZWFjdGlvbkZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKGBkaWZmUHJvcGVydHk6JHtwcm9wZXJ0eU5hbWV9YCwgZGlmZkZ1bmN0aW9uLmJpbmQobnVsbCkpO1xuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdyZWdpc3RlcmVkRGlmZlByb3BlcnR5JywgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKHJlYWN0aW9uRnVuY3Rpb24gfHwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicsIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgICAgcmVhY3Rpb246IHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IHJlYWN0aW9uRnVuY3Rpb25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBkaWZmUHJvcGVydHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaWZmUHJvcGVydHkubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9kaWZmUHJvcGVydHkubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiLyoqXG4gKiBHZW5lcmljIGRlY29yYXRvciBoYW5kbGVyIHRvIHRha2UgY2FyZSBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgZGVjb3JhdG9yIHdhcyBjYWxsZWQgYXQgdGhlIGNsYXNzIGxldmVsXG4gKiBvciB0aGUgbWV0aG9kIGxldmVsLlxuICpcbiAqIEBwYXJhbSBoYW5kbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVEZWNvcmF0b3IoaGFuZGxlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaGFuZGxlcih0YXJnZXQucHJvdG90eXBlLCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlcih0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnQgZGVmYXVsdCBoYW5kbGVEZWNvcmF0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW5kbGVEZWNvcmF0b3IubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9oYW5kbGVEZWNvcmF0b3IubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IFdlYWtNYXAgZnJvbSAnQGRvam8vc2hpbS9XZWFrTWFwJztcbmltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmltcG9ydCB7IGJlZm9yZVByb3BlcnRpZXMgfSBmcm9tICcuL2JlZm9yZVByb3BlcnRpZXMnO1xuLyoqXG4gKiBNYXAgb2YgaW5zdGFuY2VzIGFnYWluc3QgcmVnaXN0ZXJlZCBpbmplY3RvcnMuXG4gKi9cbmNvbnN0IHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBEZWNvcmF0b3IgcmV0cmlldmVzIGFuIGluamVjdG9yIGZyb20gYW4gYXZhaWxhYmxlIHJlZ2lzdHJ5IHVzaW5nIHRoZSBuYW1lIGFuZFxuICogY2FsbHMgdGhlIGBnZXRQcm9wZXJ0aWVzYCBmdW5jdGlvbiB3aXRoIHRoZSBwYXlsb2FkIGZyb20gdGhlIGluamVjdG9yXG4gKiBhbmQgY3VycmVudCBwcm9wZXJ0aWVzIHdpdGggdGhlIHRoZSBpbmplY3RlZCBwcm9wZXJ0aWVzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBJbmplY3RDb25maWcgdGhlIGluamVjdCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoeyBuYW1lLCBnZXRQcm9wZXJ0aWVzIH0pIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIGJlZm9yZVByb3BlcnRpZXMoZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluamVjdG9ySXRlbSA9IHRoaXMucmVnaXN0cnkuZ2V0SW5qZWN0b3IobmFtZSk7XG4gICAgICAgICAgICBpZiAoaW5qZWN0b3JJdGVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpbmplY3RvciwgaW52YWxpZGF0b3IgfSA9IGluamVjdG9ySXRlbTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RlcmVkSW5qZWN0b3JzID0gcmVnaXN0ZXJlZEluamVjdG9yc01hcC5nZXQodGhpcykgfHwgW107XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVyZWRJbmplY3RvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAuc2V0KHRoaXMsIHJlZ2lzdGVyZWRJbmplY3RvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZEluamVjdG9ycy5pbmRleE9mKGluamVjdG9ySXRlbSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3duKGludmFsaWRhdG9yLm9uKCdpbnZhbGlkYXRlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEluamVjdG9ycy5wdXNoKGluamVjdG9ySXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzKGluamVjdG9yKCksIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSh0YXJnZXQpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgaW5qZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5qZWN0Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2luamVjdC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IFdJREdFVF9CQVNFX1RZUEUgfSBmcm9tICcuL1JlZ2lzdHJ5JztcbmZ1bmN0aW9uIGlzT2JqZWN0T3JBcnJheSh2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhbHdheXMocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5nZWQ6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5nZWQ6IHByZXZpb3VzUHJvcGVydHkgIT09IG5ld1Byb3BlcnR5LFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3cocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHZhbGlkT2xkUHJvcGVydHkgPSBwcmV2aW91c1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShwcmV2aW91c1Byb3BlcnR5KTtcbiAgICBjb25zdCB2YWxpZE5ld1Byb3BlcnR5ID0gbmV3UHJvcGVydHkgJiYgaXNPYmplY3RPckFycmF5KG5ld1Byb3BlcnR5KTtcbiAgICBpZiAoIXZhbGlkT2xkUHJvcGVydHkgfHwgIXZhbGlkTmV3UHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoYW5nZWQ6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNLZXlzID0gT2JqZWN0LmtleXMocHJldmlvdXNQcm9wZXJ0eSk7XG4gICAgY29uc3QgbmV3S2V5cyA9IE9iamVjdC5rZXlzKG5ld1Byb3BlcnR5KTtcbiAgICBpZiAocHJldmlvdXNLZXlzLmxlbmd0aCAhPT0gbmV3S2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjaGFuZ2VkID0gbmV3S2V5cy5zb21lKChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXdQcm9wZXJ0eVtrZXldICE9PSBwcmV2aW91c1Byb3BlcnR5W2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGF1dG8ocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0eXBlb2YgbmV3UHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKG5ld1Byb3BlcnR5Ll90eXBlID09PSBXSURHRVRfQkFTRV9UWVBFKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZWZlcmVuY2UocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gaWdub3JlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdE9yQXJyYXkobmV3UHJvcGVydHkpKSB7XG4gICAgICAgIHJlc3VsdCA9IHNoYWxsb3cocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpZmYubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RpZmYubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kaWZmLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdAZG9qby9jb3JlL2xhbmcnO1xuaW1wb3J0IGNzc1RyYW5zaXRpb25zIGZyb20gJy4uL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMnO1xuaW1wb3J0IHsgYWZ0ZXJSZW5kZXIgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXInO1xuaW1wb3J0IHsgdiB9IGZyb20gJy4vLi4vZCc7XG5pbXBvcnQgeyBkb20gfSBmcm9tICcuLy4uL3Zkb20nO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBhdHRhY2ggc3RhdGUgb2YgdGhlIHByb2plY3RvclxuICovXG5leHBvcnQgdmFyIFByb2plY3RvckF0dGFjaFN0YXRlO1xuKGZ1bmN0aW9uIChQcm9qZWN0b3JBdHRhY2hTdGF0ZSkge1xuICAgIFByb2plY3RvckF0dGFjaFN0YXRlW1Byb2plY3RvckF0dGFjaFN0YXRlW1wiQXR0YWNoZWRcIl0gPSAxXSA9IFwiQXR0YWNoZWRcIjtcbiAgICBQcm9qZWN0b3JBdHRhY2hTdGF0ZVtQcm9qZWN0b3JBdHRhY2hTdGF0ZVtcIkRldGFjaGVkXCJdID0gMl0gPSBcIkRldGFjaGVkXCI7XG59KShQcm9qZWN0b3JBdHRhY2hTdGF0ZSB8fCAoUHJvamVjdG9yQXR0YWNoU3RhdGUgPSB7fSkpO1xuLyoqXG4gKiBBdHRhY2ggdHlwZSBmb3IgdGhlIHByb2plY3RvclxuICovXG5leHBvcnQgdmFyIEF0dGFjaFR5cGU7XG4oZnVuY3Rpb24gKEF0dGFjaFR5cGUpIHtcbiAgICBBdHRhY2hUeXBlW0F0dGFjaFR5cGVbXCJBcHBlbmRcIl0gPSAxXSA9IFwiQXBwZW5kXCI7XG4gICAgQXR0YWNoVHlwZVtBdHRhY2hUeXBlW1wiTWVyZ2VcIl0gPSAyXSA9IFwiTWVyZ2VcIjtcbn0pKEF0dGFjaFR5cGUgfHwgKEF0dGFjaFR5cGUgPSB7fSkpO1xuZXhwb3J0IGZ1bmN0aW9uIFByb2plY3Rvck1peGluKEJhc2UpIHtcbiAgICBjbGFzcyBQcm9qZWN0b3IgZXh0ZW5kcyBCYXNlIHtcbiAgICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgICAgICB0aGlzLl9yb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgIHRoaXMuX2FzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zOiBjc3NUcmFuc2l0aW9uc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICB0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuRGV0YWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgYXBwZW5kKHJvb3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogQXR0YWNoVHlwZS5BcHBlbmQsXG4gICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2gob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgbWVyZ2Uocm9vdCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBBdHRhY2hUeXBlLk1lcmdlLFxuICAgICAgICAgICAgICAgIHJvb3RcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHNldCByb290KHJvb3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjaGFuZ2Ugcm9vdCBlbGVtZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9yb290ID0gcm9vdDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcm9vdCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb290O1xuICAgICAgICB9XG4gICAgICAgIGdldCBhc3luYygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hc3luYztcbiAgICAgICAgfVxuICAgICAgICBzZXQgYXN5bmMoYXN5bmMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjaGFuZ2UgYXN5bmMgbW9kZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYXN5bmMgPSBhc3luYztcbiAgICAgICAgfVxuICAgICAgICBzYW5kYm94KGRvYyA9IGRvY3VtZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBhbHJlYWR5IGF0dGFjaGVkLCBjYW5ub3QgY3JlYXRlIHNhbmRib3gnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2FzeW5jID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c1Jvb3QgPSB0aGlzLnJvb3Q7XG4gICAgICAgICAgICAvKiBmcmVlIHVwIHRoZSBkb2N1bWVudCBmcmFnbWVudCBmb3IgR0MgKi9cbiAgICAgICAgICAgIHRoaXMub3duKHtcbiAgICAgICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBwcmV2aW91c1Jvb3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9hdHRhY2goe1xuICAgICAgICAgICAgICAgIC8qIERvY3VtZW50RnJhZ21lbnQgaXMgbm90IGFzc2lnbmFibGUgdG8gRWxlbWVudCwgYnV0IHByb3ZpZGVzIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHdvcmsgKi9cbiAgICAgICAgICAgICAgICByb290OiBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEF0dGFjaFR5cGUuQXBwZW5kXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRDaGlsZHJlbihjaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5fX3NldENoaWxkcmVuX18oY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHNldFByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgICAgICAgICAgdGhpcy5fX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICBfX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyAmJiB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5ICE9PSBwcm9wZXJ0aWVzLnJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcy5yZWdpc3RyeS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyA9IGFzc2lnbih7fSwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICBzdXBlci5fX3NldENvcmVQcm9wZXJ0aWVzX18oeyBiaW5kOiB0aGlzLCBiYXNlUmVnaXN0cnk6IHByb3BlcnRpZXMucmVnaXN0cnkgfSk7XG4gICAgICAgICAgICBzdXBlci5fX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICB0b0h0bWwoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSAhPT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQgfHwgIXRoaXMuX3Byb2plY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBpcyBub3QgYXR0YWNoZWQsIGNhbm5vdCByZXR1cm4gYW4gSFRNTCBzdHJpbmcgb2YgcHJvamVjdGlvbi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9qZWN0aW9uLmRvbU5vZGUuY2hpbGROb2Rlc1swXS5vdXRlckhUTUw7XG4gICAgICAgIH1cbiAgICAgICAgYWZ0ZXJSZW5kZXIocmVzdWx0KSB7XG4gICAgICAgICAgICBsZXQgbm9kZSA9IHJlc3VsdDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyB8fCByZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBub2RlID0gdignc3BhbicsIHt9LCBbcmVzdWx0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIF9hdHRhY2goeyB0eXBlLCByb290IH0pIHtcbiAgICAgICAgICAgIGlmIChyb290KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9hdHRhY2hIYW5kbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoSGFuZGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcm9qZWN0b3JTdGF0ZSA9IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0ge1xuICAgICAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0b3JTdGF0ZSA9IFByb2plY3RvckF0dGFjaFN0YXRlLkRldGFjaGVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMub3duKGhhbmRsZSk7XG4gICAgICAgICAgICB0aGlzLl9hdHRhY2hIYW5kbGUgPSBoYW5kbGU7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zLCB7IHN5bmM6ICF0aGlzLl9hc3luYyB9KTtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQXR0YWNoVHlwZS5BcHBlbmQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb24gPSBkb20uYXBwZW5kKHRoaXMucm9vdCwgdGhpcywgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEF0dGFjaFR5cGUuTWVyZ2U6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb24gPSBkb20ubWVyZ2UodGhpcy5yb290LCB0aGlzLCB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaEhhbmRsZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0c2xpYl8xLl9fZGVjb3JhdGUoW1xuICAgICAgICBhZnRlclJlbmRlcigpLFxuICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKSxcbiAgICAgICAgdHNsaWJfMS5fX21ldGFkYXRhKFwiZGVzaWduOnJldHVybnR5cGVcIiwgdm9pZCAwKVxuICAgIF0sIFByb2plY3Rvci5wcm90b3R5cGUsIFwiYWZ0ZXJSZW5kZXJcIiwgbnVsbCk7XG4gICAgcmV0dXJuIFByb2plY3Rvcjtcbn1cbmV4cG9ydCBkZWZhdWx0IFByb2plY3Rvck1peGluO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvamVjdG9yLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9taXhpbnMvUHJvamVjdG9yLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICcuLy4uL0luamVjdG9yJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9pbmplY3QnO1xuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi8uLi9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBkaWZmUHJvcGVydHkgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5JztcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICcuLy4uL2RpZmYnO1xuY29uc3QgVEhFTUVfS0VZID0gJyBfa2V5JztcbmV4cG9ydCBjb25zdCBJTkpFQ1RFRF9USEVNRV9LRVkgPSBTeW1ib2woJ3RoZW1lJyk7XG4vKipcbiAqIERlY29yYXRvciBmb3IgYmFzZSBjc3MgY2xhc3Nlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWUodGhlbWUpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycsIHRoZW1lKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHJldmVyc2UgbG9va3VwIGZvciB0aGUgY2xhc3NlcyBwYXNzZWQgaW4gdmlhIHRoZSBgdGhlbWVgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBjbGFzc2VzIFRoZSBiYXNlQ2xhc3NlcyBvYmplY3RcbiAqIEByZXF1aXJlc1xuICovXG5mdW5jdGlvbiBjcmVhdGVUaGVtZUNsYXNzZXNMb29rdXAoY2xhc3Nlcykge1xuICAgIHJldHVybiBjbGFzc2VzLnJlZHVjZSgoY3VycmVudENsYXNzTmFtZXMsIGJhc2VDbGFzcykgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhiYXNlQ2xhc3MpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY3VycmVudENsYXNzTmFtZXNbYmFzZUNsYXNzW2tleV1dID0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDbGFzc05hbWVzO1xuICAgIH0sIHt9KTtcbn1cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBpcyBnaXZlbiBhIHRoZW1lIGFuZCBhbiBvcHRpb25hbCByZWdpc3RyeSwgdGhlIHRoZW1lXG4gKiBpbmplY3RvciBpcyBkZWZpbmVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIHRoZW1lLlxuICpcbiAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gc2V0XG4gKiBAcGFyYW0gdGhlbWVSZWdpc3RyeSByZWdpc3RyeSB0byBkZWZpbmUgdGhlIHRoZW1lIGluamVjdG9yIGFnYWluc3QuIERlZmF1bHRzXG4gKiB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XG4gKlxuICogQHJldHVybnMgdGhlIHRoZW1lIGluamVjdG9yIHVzZWQgdG8gc2V0IHRoZSB0aGVtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoZW1lLCB0aGVtZVJlZ2lzdHJ5KSB7XG4gICAgY29uc3QgdGhlbWVJbmplY3RvciA9IG5ldyBJbmplY3Rvcih0aGVtZSk7XG4gICAgdGhlbWVSZWdpc3RyeS5kZWZpbmVJbmplY3RvcihJTkpFQ1RFRF9USEVNRV9LRVksIChpbnZhbGlkYXRvcikgPT4ge1xuICAgICAgICB0aGVtZUluamVjdG9yLnNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHRoZW1lSW5qZWN0b3IuZ2V0KCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoZW1lSW5qZWN0b3I7XG59XG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYXNzIGRlY29yYXRlZCB3aXRoIHdpdGggVGhlbWVkIGZ1bmN0aW9uYWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lZE1peGluKEJhc2UpIHtcbiAgICBsZXQgVGhlbWVkID0gY2xhc3MgVGhlbWVkIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVnaXN0ZXJlZCBiYXNlIHRoZW1lIGtleXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZUtleXMgPSBbXTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW5kaWNhdGVzIGlmIGNsYXNzZXMgbWV0YSBkYXRhIG5lZWQgdG8gYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTG9hZGVkIHRoZW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX3RoZW1lID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhlbWUoY2xhc3Nlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlY2FsY3VsYXRlQ2xhc3Nlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlY2FsY3VsYXRlVGhlbWVDbGFzc2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLm1hcCgoY2xhc3NOYW1lKSA9PiB0aGlzLl9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRoZW1lQ2xhc3MoY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9uIGZpcmVkIHdoZW4gYHRoZW1lYCBvciBgZXh0cmFDbGFzc2VzYCBhcmUgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIG9uUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkIHx8IGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHRyYUNsYXNzZXMgPSB0aGlzLnByb3BlcnRpZXMuZXh0cmFDbGFzc2VzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDbGFzc05hbWUgPSB0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cFtjbGFzc05hbWVdO1xuICAgICAgICAgICAgbGV0IHJlc3VsdENsYXNzTmFtZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhlbWVDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENsYXNzIG5hbWU6ICcke2NsYXNzTmFtZX0nIG5vdCBmb3VuZCBpbiB0aGVtZWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2goZXh0cmFDbGFzc2VzW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2xhc3NOYW1lcy5wdXNoKHRoaXMuX3RoZW1lW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2godGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZVt0aGVtZUNsYXNzTmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdENsYXNzTmFtZXMuam9pbignICcpO1xuICAgICAgICB9XG4gICAgICAgIF9yZWNhbGN1bGF0ZVRoZW1lQ2xhc3NlcygpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdGhlbWUgPSB7fSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgYmFzZVRoZW1lcyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiYXNlVGhlbWVDbGFzc2VzJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lID0gYmFzZVRoZW1lcy5yZWR1Y2UoKGZpbmFsQmFzZVRoZW1lLCBiYXNlVGhlbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2EgPSBUSEVNRV9LRVksIGtleSA9IGJhc2VUaGVtZVtfYV0sIGNsYXNzZXMgPSB0c2xpYl8xLl9fcmVzdChiYXNlVGhlbWUsIFt0eXBlb2YgX2EgPT09IFwic3ltYm9sXCIgPyBfYSA6IF9hICsgXCJcIl0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaW5hbEJhc2VUaGVtZSwgY2xhc3Nlcyk7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2VUaGVtZUNsYXNzZXNSZXZlcnNlTG9va3VwID0gY3JlYXRlVGhlbWVDbGFzc2VzTG9va3VwKGJhc2VUaGVtZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5yZWR1Y2UoKGJhc2VUaGVtZSwgdGhlbWVLZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVRoZW1lLCB0aGVtZVt0aGVtZUtleV0pO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGRpZmZQcm9wZXJ0eSgndGhlbWUnLCBzaGFsbG93KSxcbiAgICAgICAgZGlmZlByb3BlcnR5KCdleHRyYUNsYXNzZXMnLCBzaGFsbG93KSxcbiAgICAgICAgdHNsaWJfMS5fX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxuICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSksXG4gICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIHZvaWQgMClcbiAgICBdLCBUaGVtZWQucHJvdG90eXBlLCBcIm9uUHJvcGVydGllc0NoYW5nZWRcIiwgbnVsbCk7XG4gICAgVGhlbWVkID0gdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAgICAgICAgaW5qZWN0KHtcbiAgICAgICAgICAgIG5hbWU6IElOSkVDVEVEX1RIRU1FX0tFWSxcbiAgICAgICAgICAgIGdldFByb3BlcnRpZXM6ICh0aGVtZSwgcHJvcGVydGllcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydGllcy50aGVtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB0aGVtZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgVGhlbWVkKTtcbiAgICByZXR1cm4gVGhlbWVkO1xufVxuZXhwb3J0IGRlZmF1bHQgVGhlbWVkTWl4aW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UaGVtZWQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBXaWRnZXRCYXNlLCBub0JpbmQgfSBmcm9tICcuL1dpZGdldEJhc2UnO1xuaW1wb3J0IHsgUHJvamVjdG9yTWl4aW4gfSBmcm9tICcuL21peGlucy9Qcm9qZWN0b3InO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJ0Bkb2pvL3NoaW0vYXJyYXknO1xuaW1wb3J0IHsgdywgZG9tIH0gZnJvbSAnLi9kJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnQGRvam8vc2hpbS9nbG9iYWwnO1xuaW1wb3J0IHsgcmVnaXN0ZXJUaGVtZUluamVjdG9yIH0gZnJvbSAnLi9taXhpbnMvVGhlbWVkJztcbmltcG9ydCB7IGFsd2F5c1JlbmRlciB9IGZyb20gJy4vZGVjb3JhdG9ycy9hbHdheXNSZW5kZXInO1xuZXhwb3J0IHZhciBDdXN0b21FbGVtZW50Q2hpbGRUeXBlO1xuKGZ1bmN0aW9uIChDdXN0b21FbGVtZW50Q2hpbGRUeXBlKSB7XG4gICAgQ3VzdG9tRWxlbWVudENoaWxkVHlwZVtcIkRPSk9cIl0gPSBcIkRPSk9cIjtcbiAgICBDdXN0b21FbGVtZW50Q2hpbGRUeXBlW1wiTk9ERVwiXSA9IFwiTk9ERVwiO1xuICAgIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGVbXCJURVhUXCJdID0gXCJURVhUXCI7XG59KShDdXN0b21FbGVtZW50Q2hpbGRUeXBlIHx8IChDdXN0b21FbGVtZW50Q2hpbGRUeXBlID0ge30pKTtcbmV4cG9ydCBmdW5jdGlvbiBEb21Ub1dpZGdldFdyYXBwZXIoZG9tTm9kZSkge1xuICAgIGxldCBEb21Ub1dpZGdldFdyYXBwZXIgPSBjbGFzcyBEb21Ub1dpZGdldFdyYXBwZXIgZXh0ZW5kcyBXaWRnZXRCYXNlIHtcbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykucmVkdWNlKChwcm9wcywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ29uJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gYF9fJHtrZXl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvcHNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIHJldHVybiBkb20oeyBub2RlOiBkb21Ob2RlLCBwcm9wczogcHJvcGVydGllcywgZGlmZlR5cGU6ICdkb20nIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXQgZG9tTm9kZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb21Ob2RlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEb21Ub1dpZGdldFdyYXBwZXIgPSB0c2xpYl8xLl9fZGVjb3JhdGUoW1xuICAgICAgICBhbHdheXNSZW5kZXIoKVxuICAgIF0sIERvbVRvV2lkZ2V0V3JhcHBlcik7XG4gICAgcmV0dXJuIERvbVRvV2lkZ2V0V3JhcHBlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoZGVzY3JpcHRvciwgV2lkZ2V0Q29uc3RydWN0b3IpIHtcbiAgICBjb25zdCB7IGF0dHJpYnV0ZXMsIGNoaWxkVHlwZSwgcmVnaXN0cnlGYWN0b3J5IH0gPSBkZXNjcmlwdG9yO1xuICAgIGNvbnN0IGF0dHJpYnV0ZU1hcCA9IHt9O1xuICAgIGF0dHJpYnV0ZXMuZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYXR0cmlidXRlTWFwW2F0dHJpYnV0ZU5hbWVdID0gcHJvcGVydHlOYW1lO1xuICAgIH0pO1xuICAgIHJldHVybiBjbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50UHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGlzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pbml0aWFsaXNlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRvbVByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHsgYXR0cmlidXRlcywgcHJvcGVydGllcywgZXZlbnRzIH0gPSBkZXNjcmlwdG9yO1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Byb3BlcnRpZXMsIHRoaXMuX2F0dHJpYnV0ZXNUb1Byb3BlcnRpZXMoYXR0cmlidXRlcykpO1xuICAgICAgICAgICAgWy4uLmF0dHJpYnV0ZXMsIC4uLnByb3BlcnRpZXNdLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnJlcGxhY2UoL15vbi8sICdfXycpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRQcm9wZXJ0eU5hbWUgIT09IHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW2ZpbHRlcmVkUHJvcGVydHlOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5fZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogKHZhbHVlKSA9PiB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5fZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiAodmFsdWUpID0+IHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZXZlbnRzLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnX19vbicpO1xuICAgICAgICAgICAgICAgIGRvbVByb3BlcnRpZXNbZmlsdGVyZWRQcm9wZXJ0eU5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuX2dldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiAodmFsdWUpID0+IHRoaXMuX3NldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50Q2FsbGJhY2sgPSB0aGlzLl9nZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXZlbnRDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDYWxsYmFjayguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IGFyZ3NcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIGRvbVByb3BlcnRpZXMpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZFR5cGUgPT09IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUuVEVYVCA/IHRoaXMuY2hpbGROb2RlcyA6IHRoaXMuY2hpbGRyZW47XG4gICAgICAgICAgICBmcm9tKGNoaWxkcmVuKS5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8pIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtcmVuZGVyJywgKCkgPT4gdGhpcy5fcmVuZGVyKCkpO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1jb25uZWN0ZWQnLCAoKSA9PiB0aGlzLl9yZW5kZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goRG9tVG9XaWRnZXRXcmFwcGVyKGNoaWxkTm9kZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChkb20oeyBub2RlOiBjaGlsZE5vZGUsIGRpZmZUeXBlOiAnZG9tJyB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtY29ubmVjdGVkJywgKGUpID0+IHRoaXMuX2NoaWxkQ29ubmVjdGVkKGUpKTtcbiAgICAgICAgICAgIGNvbnN0IHdpZGdldFByb3BlcnRpZXMgPSB0aGlzLl9wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyQ2hpbGRyZW4gPSAoKSA9PiB0aGlzLl9fY2hpbGRyZW5fXygpO1xuICAgICAgICAgICAgY29uc3QgV3JhcHBlciA9IGNsYXNzIGV4dGVuZHMgV2lkZ2V0QmFzZSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdyhXaWRnZXRDb25zdHJ1Y3Rvciwgd2lkZ2V0UHJvcGVydGllcywgcmVuZGVyQ2hpbGRyZW4oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcmVnaXN0cnlGYWN0b3J5KCk7XG4gICAgICAgICAgICBjb25zdCB0aGVtZUNvbnRleHQgPSByZWdpc3RlclRoZW1lSW5qZWN0b3IodGhpcy5fZ2V0VGhlbWUoKSwgcmVnaXN0cnkpO1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tdGhlbWUtc2V0JywgKCkgPT4gdGhlbWVDb250ZXh0LnNldCh0aGlzLl9nZXRUaGVtZSgpKSk7XG4gICAgICAgICAgICBjb25zdCBQcm9qZWN0b3IgPSBQcm9qZWN0b3JNaXhpbihXcmFwcGVyKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvciA9IG5ldyBQcm9qZWN0b3IoKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rvci5zZXRQcm9wZXJ0aWVzKHsgcmVnaXN0cnkgfSk7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3IuYXBwZW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGlzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9qby1jZS1jb25uZWN0ZWQnLCB7XG4gICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXNcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0VGhlbWUoKSB7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsICYmIGdsb2JhbC5kb2pvY2UgJiYgZ2xvYmFsLmRvam9jZS50aGVtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWwuZG9qb2NlLnRoZW1lc1tnbG9iYWwuZG9qb2NlLnRoZW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfY2hpbGRDb25uZWN0ZWQoZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGUuZGV0YWlsO1xuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuX2NoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5kb21Ob2RlID09PSBub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtcmVuZGVyJywgKCkgPT4gdGhpcy5fcmVuZGVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihub2RlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfcmVuZGVyKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Byb2plY3Rvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rvci5pbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9qby1jZS1yZW5kZXInLCB7XG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXNcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX19wcm9wZXJ0aWVzX18oKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NoaWxkcmVuX18oKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW4uZmlsdGVyKChDaGlsZCkgPT4gQ2hpbGQuZG9tTm9kZS5pc1dpZGdldCkubWFwKChDaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRvbU5vZGUgfSA9IENoaWxkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdyhDaGlsZCwgT2JqZWN0LmFzc2lnbih7fSwgZG9tTm9kZS5fX3Byb3BlcnRpZXNfXygpKSwgWy4uLmRvbU5vZGUuX19jaGlsZHJlbl9fKCldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkVmFsdWUsIHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBhdHRyaWJ1dGVNYXBbbmFtZV07XG4gICAgICAgICAgICB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBfc2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIF9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVbbm9CaW5kXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgX2F0dHJpYnV0ZXNUb1Byb3BlcnRpZXMoYXR0cmlidXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzV2lkZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKFdpZGdldENvbnN0cnVjdG9yKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IFdpZGdldENvbnN0cnVjdG9yLnByb3RvdHlwZSAmJiBXaWRnZXRDb25zdHJ1Y3Rvci5wcm90b3R5cGUuX19jdXN0b21FbGVtZW50RGVzY3JpcHRvcjtcbiAgICBpZiAoIWRlc2NyaXB0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IGRlc2NyaXB0b3IgZm9yIEN1c3RvbSBFbGVtZW50LCBoYXZlIHlvdSBhZGRlZCB0aGUgQGN1c3RvbUVsZW1lbnQgZGVjb3JhdG9yIHRvIHlvdXIgV2lkZ2V0PycpO1xuICAgIH1cbiAgICBnbG9iYWwuY3VzdG9tRWxlbWVudHMuZGVmaW5lKGRlc2NyaXB0b3IudGFnTmFtZSwgY3JlYXRlKGRlc2NyaXB0b3IsIFdpZGdldENvbnN0cnVjdG9yKSk7XG59XG5leHBvcnQgZGVmYXVsdCByZWdpc3Rlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvcmVnaXN0ZXJDdXN0b21FbGVtZW50Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvcmVnaXN0ZXJDdXN0b21FbGVtZW50Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnQGRvam8vc2hpbS9nbG9iYWwnO1xyXG5pbXBvcnQgeyBmcm9tIGFzIGFycmF5RnJvbSB9IGZyb20gJ0Bkb2pvL3NoaW0vYXJyYXknO1xyXG5pbXBvcnQgeyBpc1dOb2RlLCBpc1ZOb2RlLCBpc0RvbVZOb2RlLCBWTk9ERSwgV05PREUgfSBmcm9tICcuL2QnO1xyXG5pbXBvcnQgeyBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvciB9IGZyb20gJy4vUmVnaXN0cnknO1xyXG5pbXBvcnQgV2Vha01hcCBmcm9tICdAZG9qby9zaGltL1dlYWtNYXAnO1xyXG5jb25zdCBOQU1FU1BBQ0VfVzMgPSAnaHR0cDovL3d3dy53My5vcmcvJztcclxuY29uc3QgTkFNRVNQQUNFX1NWRyA9IE5BTUVTUEFDRV9XMyArICcyMDAwL3N2Zyc7XHJcbmNvbnN0IE5BTUVTUEFDRV9YTElOSyA9IE5BTUVTUEFDRV9XMyArICcxOTk5L3hsaW5rJztcclxuY29uc3QgZW1wdHlBcnJheSA9IFtdO1xyXG5leHBvcnQgY29uc3Qgd2lkZ2V0SW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcCgpO1xyXG5jb25zdCBpbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwKCk7XHJcbmNvbnN0IHByb2plY3RvclN0YXRlTWFwID0gbmV3IFdlYWtNYXAoKTtcclxuZnVuY3Rpb24gc2FtZShkbm9kZTEsIGRub2RlMikge1xyXG4gICAgaWYgKGlzVk5vZGUoZG5vZGUxKSAmJiBpc1ZOb2RlKGRub2RlMikpIHtcclxuICAgICAgICBpZiAoaXNEb21WTm9kZShkbm9kZTEpIHx8IGlzRG9tVk5vZGUoZG5vZGUyKSkge1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUxLmRvbU5vZGUgIT09IGRub2RlMi5kb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRub2RlMS50YWcgIT09IGRub2RlMi50YWcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZG5vZGUxLnByb3BlcnRpZXMua2V5ICE9PSBkbm9kZTIucHJvcGVydGllcy5rZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzV05vZGUoZG5vZGUxKSAmJiBpc1dOb2RlKGRub2RlMikpIHtcclxuICAgICAgICBpZiAoZG5vZGUxLmluc3RhbmNlID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIGRub2RlMi53aWRnZXRDb25zdHJ1Y3RvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZG5vZGUxLndpZGdldENvbnN0cnVjdG9yICE9PSBkbm9kZTIud2lkZ2V0Q29uc3RydWN0b3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZG5vZGUxLnByb3BlcnRpZXMua2V5ICE9PSBkbm9kZTIucHJvcGVydGllcy5rZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5jb25zdCBtaXNzaW5nVHJhbnNpdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZSBhIHRyYW5zaXRpb25zIG9iamVjdCB0byB0aGUgcHJvamVjdGlvbk9wdGlvbnMgdG8gZG8gYW5pbWF0aW9ucycpO1xyXG59O1xyXG5mdW5jdGlvbiBnZXRQcm9qZWN0aW9uT3B0aW9ucyhwcm9qZWN0b3JPcHRpb25zLCBwcm9qZWN0b3JJbnN0YW5jZSkge1xyXG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgbmFtZXNwYWNlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgc3R5bGVBcHBseWVyOiBmdW5jdGlvbiAoZG9tTm9kZSwgc3R5bGVOYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBkb21Ob2RlLnN0eWxlW3N0eWxlTmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zaXRpb25zOiB7XHJcbiAgICAgICAgICAgIGVudGVyOiBtaXNzaW5nVHJhbnNpdGlvbixcclxuICAgICAgICAgICAgZXhpdDogbWlzc2luZ1RyYW5zaXRpb25cclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlcHRoOiAwLFxyXG4gICAgICAgIG1lcmdlOiBmYWxzZSxcclxuICAgICAgICBzeW5jOiBmYWxzZSxcclxuICAgICAgICBwcm9qZWN0b3JJbnN0YW5jZVxyXG4gICAgfTtcclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgcHJvamVjdG9yT3B0aW9ucyk7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tTdHlsZVZhbHVlKHN0eWxlVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2Ygc3R5bGVWYWx1ZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0eWxlIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MnKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB1cGRhdGVFdmVudChkb21Ob2RlLCBldmVudE5hbWUsIGN1cnJlbnRWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMsIGJpbmQsIHByZXZpb3VzVmFsdWUpIHtcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGNvbnN0IGV2ZW50TWFwID0gcHJvamVjdG9yU3RhdGUubm9kZU1hcC5nZXQoZG9tTm9kZSkgfHwgbmV3IFdlYWtNYXAoKTtcclxuICAgIGlmIChwcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNFdmVudCA9IGV2ZW50TWFwLmdldChwcmV2aW91c1ZhbHVlKTtcclxuICAgICAgICBkb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBwcmV2aW91c0V2ZW50KTtcclxuICAgIH1cclxuICAgIGxldCBjYWxsYmFjayA9IGN1cnJlbnRWYWx1ZS5iaW5kKGJpbmQpO1xyXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2lucHV0Jykge1xyXG4gICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGV2dCkge1xyXG4gICAgICAgICAgICBjdXJyZW50VmFsdWUuY2FsbCh0aGlzLCBldnQpO1xyXG4gICAgICAgICAgICBldnQudGFyZ2V0WydvbmlucHV0LXZhbHVlJ10gPSBldnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIH0uYmluZChiaW5kKTtcclxuICAgIH1cclxuICAgIGRvbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKTtcclxuICAgIGV2ZW50TWFwLnNldChjdXJyZW50VmFsdWUsIGNhbGxiYWNrKTtcclxuICAgIHByb2plY3RvclN0YXRlLm5vZGVNYXAuc2V0KGRvbU5vZGUsIGV2ZW50TWFwKTtcclxufVxyXG5mdW5jdGlvbiBhZGRDbGFzc2VzKGRvbU5vZGUsIGNsYXNzZXMpIHtcclxuICAgIGlmIChjbGFzc2VzKSB7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZG9tTm9kZS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZXNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIGNsYXNzZXMpIHtcclxuICAgIGlmIChjbGFzc2VzKSB7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZG9tTm9kZS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZXNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBidWlsZFByZXZpb3VzUHJvcGVydGllcyhkb21Ob2RlLCBwcmV2aW91cywgY3VycmVudCkge1xyXG4gICAgY29uc3QgeyBkaWZmVHlwZSwgcHJvcGVydGllcywgYXR0cmlidXRlcyB9ID0gY3VycmVudDtcclxuICAgIGlmICghZGlmZlR5cGUgfHwgZGlmZlR5cGUgPT09ICd2ZG9tJykge1xyXG4gICAgICAgIHJldHVybiB7IHByb3BlcnRpZXM6IHByZXZpb3VzLnByb3BlcnRpZXMsIGF0dHJpYnV0ZXM6IHByZXZpb3VzLmF0dHJpYnV0ZXMsIGV2ZW50czogcHJldmlvdXMuZXZlbnRzIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChkaWZmVHlwZSA9PT0gJ25vbmUnKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgcHJvcGVydGllczoge30sIGF0dHJpYnV0ZXM6IHByZXZpb3VzLmF0dHJpYnV0ZXMgPyB7fSA6IHVuZGVmaW5lZCwgZXZlbnRzOiBwcmV2aW91cy5ldmVudHMgfTtcclxuICAgIH1cclxuICAgIGxldCBuZXdQcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgIHByb3BlcnRpZXM6IHt9XHJcbiAgICB9O1xyXG4gICAgaWYgKGF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBuZXdQcm9wZXJ0aWVzLmF0dHJpYnV0ZXMgPSB7fTtcclxuICAgICAgICBuZXdQcm9wZXJ0aWVzLmV2ZW50cyA9IHByZXZpb3VzLmV2ZW50cztcclxuICAgICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXNbcHJvcE5hbWVdID0gZG9tTm9kZVtwcm9wTmFtZV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaCgoYXR0ck5hbWUpID0+IHtcclxuICAgICAgICAgICAgbmV3UHJvcGVydGllcy5hdHRyaWJ1dGVzW2F0dHJOYW1lXSA9IGRvbU5vZGUuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbmV3UHJvcGVydGllcztcclxuICAgIH1cclxuICAgIG5ld1Byb3BlcnRpZXMucHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLnJlZHVjZSgocHJvcHMsIHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgcHJvcHNbcHJvcGVydHldID0gZG9tTm9kZS5nZXRBdHRyaWJ1dGUocHJvcGVydHkpIHx8IGRvbU5vZGVbcHJvcGVydHldO1xyXG4gICAgICAgIHJldHVybiBwcm9wcztcclxuICAgIH0sIHt9KTtcclxuICAgIHJldHVybiBuZXdQcm9wZXJ0aWVzO1xyXG59XHJcbmZ1bmN0aW9uIGZvY3VzTm9kZShwcm9wVmFsdWUsIHByZXZpb3VzVmFsdWUsIGRvbU5vZGUsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBsZXQgcmVzdWx0O1xyXG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXN1bHQgPSBwcm9wVmFsdWUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IHByb3BWYWx1ZSAmJiAhcHJldmlvdXNWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcclxuICAgICAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMsIHByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zLCBvbmx5RXZlbnRzID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGNvbnN0IGV2ZW50TWFwID0gcHJvamVjdG9yU3RhdGUubm9kZU1hcC5nZXQoZG9tTm9kZSk7XHJcbiAgICBpZiAoZXZlbnRNYXApIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhwcmV2aW91c1Byb3BlcnRpZXMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzRXZlbnQgPSBwcm9wTmFtZS5zdWJzdHIoMCwgMikgPT09ICdvbicgfHwgb25seUV2ZW50cztcclxuICAgICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gb25seUV2ZW50cyA/IHByb3BOYW1lIDogcHJvcE5hbWUuc3Vic3RyKDIpO1xyXG4gICAgICAgICAgICBpZiAoaXNFdmVudCAmJiAhcHJvcGVydGllc1twcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50Q2FsbGJhY2sgPSBldmVudE1hcC5nZXQocHJldmlvdXNQcm9wZXJ0aWVzW3Byb3BOYW1lXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIGF0dHJOYW1lLCBhdHRyVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMubmFtZXNwYWNlID09PSBOQU1FU1BBQ0VfU1ZHICYmIGF0dHJOYW1lID09PSAnaHJlZicpIHtcclxuICAgICAgICBkb21Ob2RlLnNldEF0dHJpYnV0ZU5TKE5BTUVTUEFDRV9YTElOSywgYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgoYXR0ck5hbWUgPT09ICdyb2xlJyAmJiBhdHRyVmFsdWUgPT09ICcnKSB8fCBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGRvbU5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGRvbU5vZGUuc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZSwgcHJldmlvdXNBdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgY29uc3QgYXR0ck5hbWVzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlcyk7XHJcbiAgICBjb25zdCBhdHRyQ291bnQgPSBhdHRyTmFtZXMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyQ291bnQ7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGF0dHJOYW1lID0gYXR0ck5hbWVzW2ldO1xyXG4gICAgICAgIGNvbnN0IGF0dHJWYWx1ZSA9IGF0dHJpYnV0ZXNbYXR0ck5hbWVdO1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzQXR0clZhbHVlID0gcHJldmlvdXNBdHRyaWJ1dGVzW2F0dHJOYW1lXTtcclxuICAgICAgICBpZiAoYXR0clZhbHVlICE9PSBwcmV2aW91c0F0dHJWYWx1ZSkge1xyXG4gICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGUoZG9tTm9kZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcyA9IHRydWUpIHtcclxuICAgIGxldCBwcm9wZXJ0aWVzVXBkYXRlZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgcHJvcE5hbWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyk7XHJcbiAgICBjb25zdCBwcm9wQ291bnQgPSBwcm9wTmFtZXMubGVuZ3RoO1xyXG4gICAgaWYgKHByb3BOYW1lcy5pbmRleE9mKCdjbGFzc2VzJykgPT09IC0xICYmIHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMgJiYgcmVtb3ZlT3JwaGFuZWRFdmVudHMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBwcm9wTmFtZXNbaV07XHJcbiAgICAgICAgbGV0IHByb3BWYWx1ZSA9IHByb3BlcnRpZXNbcHJvcE5hbWVdO1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBwcmV2aW91c1Byb3BlcnRpZXNbcHJvcE5hbWVdO1xyXG4gICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2NsYXNzZXMnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQ2xhc3NlcyA9IEFycmF5LmlzQXJyYXkocHJldmlvdXNWYWx1ZSkgPyBwcmV2aW91c1ZhbHVlIDogW3ByZXZpb3VzVmFsdWVdO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q2xhc3NlcyA9IEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSA/IHByb3BWYWx1ZSA6IFtwcm9wVmFsdWVdO1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNDbGFzc2VzICYmIHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BWYWx1ZSB8fCBwcm9wVmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c0NsYXNzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c0NsYXNzZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NsYXNzZXMgPSBbLi4uY3VycmVudENsYXNzZXNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldmlvdXNDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQ2xhc3NOYW1lID0gcHJldmlvdXNDbGFzc2VzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNDbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzSW5kZXggPSBuZXdDbGFzc2VzLmluZGV4T2YocHJldmlvdXNDbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzSW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c0NsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDbGFzc2VzLnNwbGljZShjbGFzc0luZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0NsYXNzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3Nlcyhkb21Ob2RlLCBuZXdDbGFzc2VzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3Nlcyhkb21Ob2RlLCBjdXJyZW50Q2xhc3Nlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgPT09ICdmb2N1cycpIHtcclxuICAgICAgICAgICAgZm9jdXNOb2RlKHByb3BWYWx1ZSwgcHJldmlvdXNWYWx1ZSwgZG9tTm9kZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcm9wTmFtZSA9PT0gJ3N0eWxlcycpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3R5bGVOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BWYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlQ291bnQgPSBzdHlsZU5hbWVzLmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzdHlsZUNvdW50OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlTmFtZSA9IHN0eWxlTmFtZXNbal07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdHlsZVZhbHVlID0gcHJvcFZhbHVlW3N0eWxlTmFtZV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRTdHlsZVZhbHVlID0gcHJldmlvdXNWYWx1ZSAmJiBwcmV2aW91c1ZhbHVlW3N0eWxlTmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3U3R5bGVWYWx1ZSA9PT0gb2xkU3R5bGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1VwZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld1N0eWxlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja1N0eWxlVmFsdWUobmV3U3R5bGVWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMuc3R5bGVBcHBseWVyKGRvbU5vZGUsIHN0eWxlTmFtZSwgbmV3U3R5bGVWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5zdHlsZUFwcGx5ZXIoZG9tTm9kZSwgc3R5bGVOYW1lLCAnJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghcHJvcFZhbHVlICYmIHR5cGVvZiBwcmV2aW91c1ZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByb3BOYW1lID09PSAndmFsdWUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb21WYWx1ZSA9IGRvbU5vZGVbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvbVZhbHVlICE9PSBwcm9wVmFsdWUgJiZcclxuICAgICAgICAgICAgICAgICAgICAoZG9tTm9kZVsnb25pbnB1dC12YWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZG9tVmFsdWUgPT09IGRvbU5vZGVbJ29uaW5wdXQtdmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlWydvbmlucHV0LXZhbHVlJ10gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1VwZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3BOYW1lICE9PSAna2V5JyAmJiBwcm9wVmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbicgJiYgcHJvcE5hbWUubGFzdEluZGV4T2YoJ29uJywgMCkgPT09IDAgJiYgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlRXZlbnQoZG9tTm9kZSwgcHJvcE5hbWUuc3Vic3RyKDIpLCBwcm9wVmFsdWUsIHByb2plY3Rpb25PcHRpb25zLCBwcm9wZXJ0aWVzLmJpbmQsIHByZXZpb3VzVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgcHJvcE5hbWUgIT09ICdpbm5lckhUTUwnICYmIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZShkb21Ob2RlLCBwcm9wTmFtZSwgcHJvcFZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wTmFtZSA9PT0gJ3Njcm9sbExlZnQnIHx8IHByb3BOYW1lID09PSAnc2Nyb2xsVG9wJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb21Ob2RlW3Byb3BOYW1lXSAhPT0gcHJvcFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1VwZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3BlcnRpZXNVcGRhdGVkO1xyXG59XHJcbmZ1bmN0aW9uIGZpbmRJbmRleE9mQ2hpbGQoY2hpbGRyZW4sIHNhbWVBcywgc3RhcnQpIHtcclxuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHNhbWUoY2hpbGRyZW5baV0sIHNhbWVBcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiB0b1BhcmVudFZOb2RlKGRvbU5vZGUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdGFnOiAnJyxcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7fSxcclxuICAgICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxyXG4gICAgICAgIGRvbU5vZGUsXHJcbiAgICAgICAgdHlwZTogVk5PREVcclxuICAgIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHRvVGV4dFZOb2RlKGRhdGEpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdGFnOiAnJyxcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7fSxcclxuICAgICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRleHQ6IGAke2RhdGF9YCxcclxuICAgICAgICBkb21Ob2RlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdHlwZTogVk5PREVcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gdG9JbnRlcm5hbFdOb2RlKGluc3RhbmNlLCBpbnN0YW5jZURhdGEpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgaW5zdGFuY2UsXHJcbiAgICAgICAgcmVuZGVyZWQ6IFtdLFxyXG4gICAgICAgIGNvcmVQcm9wZXJ0aWVzOiBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMsXHJcbiAgICAgICAgY2hpbGRyZW46IGluc3RhbmNlLmNoaWxkcmVuLFxyXG4gICAgICAgIHdpZGdldENvbnN0cnVjdG9yOiBpbnN0YW5jZS5jb25zdHJ1Y3RvcixcclxuICAgICAgICBwcm9wZXJ0aWVzOiBpbnN0YW5jZURhdGEuaW5wdXRQcm9wZXJ0aWVzLFxyXG4gICAgICAgIHR5cGU6IFdOT0RFXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkcmVuLCBpbnN0YW5jZSkge1xyXG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gZW1wdHlBcnJheTtcclxuICAgIH1cclxuICAgIGNoaWxkcmVuID0gQXJyYXkuaXNBcnJheShjaGlsZHJlbikgPyBjaGlsZHJlbiA6IFtjaGlsZHJlbl07XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDspIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkIHx8IGNoaWxkID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5baV0gPSB0b1RleHRWTm9kZShjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNWTm9kZShjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5wcm9wZXJ0aWVzLmJpbmQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnByb3BlcnRpZXMuYmluZCA9IGluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4sIGluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLmNvcmVQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5jb3JlUHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmluZDogaW5zdGFuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VSZWdpc3RyeTogaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJhc2VSZWdpc3RyeVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4sIGluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hpbGRyZW47XHJcbn1cclxuZnVuY3Rpb24gbm9kZUFkZGVkKGRub2RlLCB0cmFuc2l0aW9ucykge1xyXG4gICAgaWYgKGlzVk5vZGUoZG5vZGUpICYmIGRub2RlLnByb3BlcnRpZXMpIHtcclxuICAgICAgICBjb25zdCBlbnRlckFuaW1hdGlvbiA9IGRub2RlLnByb3BlcnRpZXMuZW50ZXJBbmltYXRpb247XHJcbiAgICAgICAgaWYgKGVudGVyQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZW50ZXJBbmltYXRpb24gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGVudGVyQW5pbWF0aW9uKGRub2RlLmRvbU5vZGUsIGRub2RlLnByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuZW50ZXIoZG5vZGUuZG9tTm9kZSwgZG5vZGUucHJvcGVydGllcywgZW50ZXJBbmltYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIG5vZGVUb1JlbW92ZShkbm9kZSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBpZiAoaXNXTm9kZShkbm9kZSkpIHtcclxuICAgICAgICBjb25zdCByZW5kZXJlZCA9IGRub2RlLnJlbmRlcmVkIHx8IGVtcHR5QXJyYXk7XHJcbiAgICAgICAgaWYgKGRub2RlLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChkbm9kZS5pbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5vbkRldGFjaCgpO1xyXG4gICAgICAgICAgICBpbnN0YW5jZU1hcC5kZWxldGUoZG5vZGUuaW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlcmVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShyZW5kZXJlZFtpXSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZTtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gZG5vZGUucHJvcGVydGllcztcclxuICAgICAgICBpZiAoZG5vZGUuY2hpbGRyZW4gJiYgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUoZG5vZGUuY2hpbGRyZW5baV0sIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZXhpdEFuaW1hdGlvbiA9IHByb3BlcnRpZXMuZXhpdEFuaW1hdGlvbjtcclxuICAgICAgICBpZiAocHJvcGVydGllcyAmJiBleGl0QW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICAgICAgY29uc3QgcmVtb3ZlRG9tTm9kZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGRvbU5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhpdEFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZXhpdEFuaW1hdGlvbihkb21Ob2RlLCByZW1vdmVEb21Ob2RlLCBwcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmV4aXQoZG5vZGUuZG9tTm9kZSwgcHJvcGVydGllcywgZXhpdEFuaW1hdGlvbiwgcmVtb3ZlRG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZG9tTm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbU5vZGUpO1xyXG4gICAgICAgIGRub2RlLmRvbU5vZGUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tEaXN0aW5ndWlzaGFibGUoY2hpbGROb2RlcywgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSkge1xyXG4gICAgY29uc3QgY2hpbGROb2RlID0gY2hpbGROb2Rlc1tpbmRleFRvQ2hlY2tdO1xyXG4gICAgaWYgKGlzVk5vZGUoY2hpbGROb2RlKSAmJiAhY2hpbGROb2RlLnRhZykge1xyXG4gICAgICAgIHJldHVybjsgLy8gVGV4dCBub2RlcyBuZWVkIG5vdCBiZSBkaXN0aW5ndWlzaGFibGVcclxuICAgIH1cclxuICAgIGNvbnN0IHsga2V5IH0gPSBjaGlsZE5vZGUucHJvcGVydGllcztcclxuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGkgIT09IGluZGV4VG9DaGVjaykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoc2FtZShub2RlLCBjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVJZGVudGlmaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5hbWUgPSBwYXJlbnRJbnN0YW5jZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICd1bmtub3duJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNXTm9kZShjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJZGVudGlmaWVyID0gY2hpbGROb2RlLndpZGdldENvbnN0cnVjdG9yLm5hbWUgfHwgJ3Vua25vd24nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlkZW50aWZpZXIgPSBjaGlsZE5vZGUudGFnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEEgd2lkZ2V0ICgke3BhcmVudE5hbWV9KSBoYXMgaGFkIGEgY2hpbGQgYWRkZGVkIG9yIHJlbW92ZWQsIGJ1dCB0aGV5IHdlcmUgbm90IGFibGUgdG8gdW5pcXVlbHkgaWRlbnRpZmllZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gcHJvdmlkZSBhIHVuaXF1ZSAna2V5JyBwcm9wZXJ0eSB3aGVuIHVzaW5nIHRoZSBzYW1lIHdpZGdldCBvciBlbGVtZW50ICgke25vZGVJZGVudGlmaWVyfSkgbXVsdGlwbGUgdGltZXMgYXMgc2libGluZ3NgKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB1cGRhdGVDaGlsZHJlbihwYXJlbnRWTm9kZSwgb2xkQ2hpbGRyZW4sIG5ld0NoaWxkcmVuLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIG9sZENoaWxkcmVuID0gb2xkQ2hpbGRyZW4gfHwgZW1wdHlBcnJheTtcclxuICAgIG5ld0NoaWxkcmVuID0gbmV3Q2hpbGRyZW47XHJcbiAgICBjb25zdCBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZENoaWxkcmVuLmxlbmd0aDtcclxuICAgIGNvbnN0IG5ld0NoaWxkcmVuTGVuZ3RoID0gbmV3Q2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgY29uc3QgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucztcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIHByb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoICsgMSB9KTtcclxuICAgIGxldCBvbGRJbmRleCA9IDA7XHJcbiAgICBsZXQgbmV3SW5kZXggPSAwO1xyXG4gICAgbGV0IGk7XHJcbiAgICBsZXQgdGV4dFVwZGF0ZWQgPSBmYWxzZTtcclxuICAgIHdoaWxlIChuZXdJbmRleCA8IG5ld0NoaWxkcmVuTGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IG9sZENoaWxkID0gb2xkSW5kZXggPCBvbGRDaGlsZHJlbkxlbmd0aCA/IG9sZENoaWxkcmVuW29sZEluZGV4XSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBuZXdDaGlsZCA9IG5ld0NoaWxkcmVuW25ld0luZGV4XTtcclxuICAgICAgICBpZiAoaXNWTm9kZShuZXdDaGlsZCkgJiYgdHlwZW9mIG5ld0NoaWxkLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG5ld0NoaWxkLmluc2VydGVkID0gaXNWTm9kZShvbGRDaGlsZCkgJiYgb2xkQ2hpbGQuaW5zZXJ0ZWQ7XHJcbiAgICAgICAgICAgIGFkZERlZmVycmVkUHJvcGVydGllcyhuZXdDaGlsZCwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2xkQ2hpbGQgIT09IHVuZGVmaW5lZCAmJiBzYW1lKG9sZENoaWxkLCBuZXdDaGlsZCkpIHtcclxuICAgICAgICAgICAgdGV4dFVwZGF0ZWQgPSB1cGRhdGVEb20ob2xkQ2hpbGQsIG5ld0NoaWxkLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50Vk5vZGUsIHBhcmVudEluc3RhbmNlKSB8fCB0ZXh0VXBkYXRlZDtcclxuICAgICAgICAgICAgb2xkSW5kZXgrKztcclxuICAgICAgICAgICAgbmV3SW5kZXgrKztcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpbmRPbGRJbmRleCA9IGZpbmRJbmRleE9mQ2hpbGQob2xkQ2hpbGRyZW4sIG5ld0NoaWxkLCBvbGRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IGFkZENoaWxkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaW5zZXJ0QmVmb3JlRG9tTm9kZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgbGV0IGNoaWxkID0gb2xkQ2hpbGRyZW5bb2xkSW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBuZXh0SW5kZXggPSBvbGRJbmRleCArIDE7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW5zZXJ0QmVmb3JlQ2hpbGRyZW4gPSBbY2hpbGRdO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGluc2VydEJlZm9yZUNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZUNoaWxkcmVuLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzV05vZGUoaW5zZXJ0QmVmb3JlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlLnJlbmRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDaGlsZHJlbi5wdXNoKC4uLmluc2VydEJlZm9yZS5yZW5kZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUuZG9tTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlRG9tTm9kZSA9IGluc2VydEJlZm9yZS5kb21Ob2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZUNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiBvbGRDaGlsZHJlbltuZXh0SW5kZXhdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEJlZm9yZUNoaWxkcmVuLnB1c2gob2xkQ2hpbGRyZW5bbmV4dEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjcmVhdGVEb20obmV3Q2hpbGQsIHBhcmVudFZOb2RlLCBpbnNlcnRCZWZvcmVEb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICBub2RlQWRkZWQobmV3Q2hpbGQsIHRyYW5zaXRpb25zKTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXhUb0NoZWNrID0gbmV3SW5kZXg7XHJcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2hlY2tEaXN0aW5ndWlzaGFibGUobmV3Q2hpbGRyZW4sIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghb2xkQ2hpbGQgfHwgZmluZE9sZEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICBhZGRDaGlsZCgpO1xyXG4gICAgICAgICAgICBuZXdJbmRleCsrO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlQ2hpbGQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4VG9DaGVjayA9IG9sZEluZGV4O1xyXG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpc1dOb2RlKG9sZENoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGluc3RhbmNlTWFwLmdldChvbGRDaGlsZC5pbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9sZENoaWxkID0gaXRlbS5kbm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub2RlVG9SZW1vdmUob2xkQ2hpbGQsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBmaW5kTmV3SW5kZXggPSBmaW5kSW5kZXhPZkNoaWxkKG5ld0NoaWxkcmVuLCBvbGRDaGlsZCwgbmV3SW5kZXggKyAxKTtcclxuICAgICAgICBpZiAoZmluZE5ld0luZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICByZW1vdmVDaGlsZCgpO1xyXG4gICAgICAgICAgICBvbGRJbmRleCsrO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWRkQ2hpbGQoKTtcclxuICAgICAgICByZW1vdmVDaGlsZCgpO1xyXG4gICAgICAgIG9sZEluZGV4Kys7XHJcbiAgICAgICAgbmV3SW5kZXgrKztcclxuICAgIH1cclxuICAgIGlmIChvbGRDaGlsZHJlbkxlbmd0aCA+IG9sZEluZGV4KSB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIGNoaWxkIGZyYWdtZW50c1xyXG4gICAgICAgIGZvciAoaSA9IG9sZEluZGV4OyBpIDwgb2xkQ2hpbGRyZW5MZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleFRvQ2hlY2sgPSBpO1xyXG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxldCBjaGlsZFRvUmVtb3ZlID0gb2xkQ2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChpc1dOb2RlKGNoaWxkVG9SZW1vdmUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gaW5zdGFuY2VNYXAuZ2V0KGNoaWxkVG9SZW1vdmUuaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRvUmVtb3ZlID0gaXRlbS5kbm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub2RlVG9SZW1vdmUoY2hpbGRUb1JlbW92ZSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dFVwZGF0ZWQ7XHJcbn1cclxuZnVuY3Rpb24gYWRkQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIGNoaWxkcmVuLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGluc2VydEJlZm9yZSA9IHVuZGVmaW5lZCwgY2hpbGROb2Rlcykge1xyXG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY2hpbGROb2RlcyA9IGFycmF5RnJvbShwYXJlbnRWTm9kZS5kb21Ob2RlLmNoaWxkTm9kZXMpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucztcclxuICAgIHByb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoICsgMSB9KTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgIGlmIChpc1ZOb2RlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICBpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgY2hpbGROb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRvbUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGQuZG9tTm9kZSA9PT0gdW5kZWZpbmVkICYmIGNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQgPSBjaGlsZE5vZGVzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbUVsZW1lbnQgJiYgZG9tRWxlbWVudC50YWdOYW1lID09PSAoY2hpbGQudGFnLnRvVXBwZXJDYXNlKCkgfHwgdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5kb21Ob2RlID0gZG9tRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3JlYXRlRG9tKGNoaWxkLCBwYXJlbnRWTm9kZSwgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY3JlYXRlRG9tKGNoaWxkLCBwYXJlbnRWTm9kZSwgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGNoaWxkTm9kZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBub2RlQWRkZWQoY2hpbGQsIHRyYW5zaXRpb25zKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpbml0UHJvcGVydGllc0FuZENoaWxkcmVuKGRvbU5vZGUsIGRub2RlLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGFkZENoaWxkcmVuKGRub2RlLCBkbm9kZS5jaGlsZHJlbiwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlLCB1bmRlZmluZWQpO1xyXG4gICAgaWYgKHR5cGVvZiBkbm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyAmJiBkbm9kZS5pbnNlcnRlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKGRub2RlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcclxuICAgICAgICB1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGUsIHt9LCBkbm9kZS5hdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCB7fSwgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIGZhbHNlKTtcclxuICAgICAgICByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCB7fSwgZG5vZGUuZXZlbnRzLCBwcm9qZWN0aW9uT3B0aW9ucywgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRzID0gZG5vZGUuZXZlbnRzO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdXBkYXRlRXZlbnQoZG9tTm9kZSwgZXZlbnQsIGV2ZW50c1tldmVudF0sIHByb2plY3Rpb25PcHRpb25zLCBkbm9kZS5wcm9wZXJ0aWVzLmJpbmQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCB7fSwgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSBudWxsICYmIGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGQoZG9tTm9kZSwgYCR7ZG5vZGUucHJvcGVydGllcy5rZXl9YCk7XHJcbiAgICB9XHJcbiAgICBkbm9kZS5pbnNlcnRlZCA9IHRydWU7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlRG9tKGRub2RlLCBwYXJlbnRWTm9kZSwgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGNoaWxkTm9kZXMpIHtcclxuICAgIGxldCBkb21Ob2RlO1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgaWYgKGlzV05vZGUoZG5vZGUpKSB7XHJcbiAgICAgICAgbGV0IHsgd2lkZ2V0Q29uc3RydWN0b3IgfSA9IGRub2RlO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgaWYgKCFpc1dpZGdldEJhc2VDb25zdHJ1Y3Rvcih3aWRnZXRDb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHBhcmVudEluc3RhbmNlRGF0YS5yZWdpc3RyeSgpLmdldCh3aWRnZXRDb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2lkZ2V0Q29uc3RydWN0b3IgPSBpdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB3aWRnZXRDb25zdHJ1Y3RvcigpO1xyXG4gICAgICAgIGRub2RlLmluc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZS5wdXNoKHsgaW5zdGFuY2UsIGRlcHRoOiBwcm9qZWN0aW9uT3B0aW9ucy5kZXB0aCB9KTtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlUmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDb3JlUHJvcGVydGllc19fKGRub2RlLmNvcmVQcm9wZXJ0aWVzKTtcclxuICAgICAgICBpbnN0YW5jZS5fX3NldENoaWxkcmVuX18oZG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICAgIGluc3RhbmNlLl9fc2V0UHJvcGVydGllc19fKGRub2RlLnByb3BlcnRpZXMpO1xyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gaW5zdGFuY2UuX19yZW5kZXJfXygpO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVuZGVyZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSZW5kZXJlZCA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4ocmVuZGVyZWQsIGluc3RhbmNlKTtcclxuICAgICAgICAgICAgZG5vZGUucmVuZGVyZWQgPSBmaWx0ZXJlZFJlbmRlcmVkO1xyXG4gICAgICAgICAgICBhZGRDaGlsZHJlbihwYXJlbnRWTm9kZSwgZmlsdGVyZWRSZW5kZXJlZCwgcHJvamVjdGlvbk9wdGlvbnMsIGluc3RhbmNlLCBpbnNlcnRCZWZvcmUsIGNoaWxkTm9kZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2UsIHsgZG5vZGUsIHBhcmVudFZOb2RlIH0pO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGRSb290KCk7XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5vbkF0dGFjaCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gcHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50O1xyXG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5tZXJnZUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZG9jID0gcGFyZW50Vk5vZGUuZG9tTm9kZS5vd25lckRvY3VtZW50O1xyXG4gICAgICAgIGlmICghZG5vZGUudGFnICYmIHR5cGVvZiBkbm9kZS50ZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUuZG9tTm9kZSAhPT0gdW5kZWZpbmVkICYmIHBhcmVudFZOb2RlLmRvbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RvbU5vZGUgPSBkbm9kZS5kb21Ob2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Vk5vZGUuZG9tTm9kZSA9PT0gZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5yZXBsYWNlQ2hpbGQobmV3RG9tTm9kZSwgZG5vZGUuZG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmFwcGVuZENoaWxkKG5ld0RvbU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZSAmJiBkbm9kZS5kb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG5vZGUuZG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkbm9kZS5kb21Ob2RlID0gbmV3RG9tTm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKGRub2RlLnRleHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5pbnNlcnRCZWZvcmUoZG9tTm9kZSwgaW5zZXJ0QmVmb3JlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQoZG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChkbm9kZS5kb21Ob2RlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkbm9kZS50YWcgPT09ICdzdmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBuYW1lc3BhY2U6IE5BTUVTUEFDRV9TVkcgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMubmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50TlMocHJvamVjdGlvbk9wdGlvbnMubmFtZXNwYWNlLCBkbm9kZS50YWcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlIHx8IGRvYy5jcmVhdGVFbGVtZW50KGRub2RlLnRhZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbml0UHJvcGVydGllc0FuZENoaWxkcmVuKGRvbU5vZGUsIGRub2RlLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuaW5zZXJ0QmVmb3JlKGRvbU5vZGUsIGluc2VydEJlZm9yZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZG9tTm9kZS5wYXJlbnROb2RlICE9PSBwYXJlbnRWTm9kZS5kb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmFwcGVuZENoaWxkKGRvbU5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZURvbShwcmV2aW91cywgZG5vZGUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgcGFyZW50SW5zdGFuY2UpIHtcclxuICAgIGlmIChpc1dOb2RlKGRub2RlKSkge1xyXG4gICAgICAgIGNvbnN0IHsgaW5zdGFuY2UgfSA9IHByZXZpb3VzO1xyXG4gICAgICAgIGNvbnN0IHsgcGFyZW50Vk5vZGUsIGRub2RlOiBub2RlIH0gPSBpbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzUmVuZGVyZWQgPSBub2RlID8gbm9kZS5yZW5kZXJlZCA6IHByZXZpb3VzLnJlbmRlcmVkO1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDb3JlUHJvcGVydGllc19fKGRub2RlLmNvcmVQcm9wZXJ0aWVzKTtcclxuICAgICAgICBpbnN0YW5jZS5fX3NldENoaWxkcmVuX18oZG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICAgIGluc3RhbmNlLl9fc2V0UHJvcGVydGllc19fKGRub2RlLnByb3BlcnRpZXMpO1xyXG4gICAgICAgIGRub2RlLmluc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5kaXJ0eSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCByZW5kZXJlZCA9IGluc3RhbmNlLl9fcmVuZGVyX18oKTtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4ocmVuZGVyZWQsIGluc3RhbmNlKTtcclxuICAgICAgICAgICAgdXBkYXRlQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIHByZXZpb3VzUmVuZGVyZWQsIGRub2RlLnJlbmRlcmVkLCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IHByZXZpb3VzUmVuZGVyZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZSwgcGFyZW50Vk5vZGUgfSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZFJvb3QoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChwcmV2aW91cyA9PT0gZG5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkb21Ob2RlID0gKGRub2RlLmRvbU5vZGUgPSBwcmV2aW91cy5kb21Ob2RlKTtcclxuICAgICAgICBsZXQgdGV4dFVwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgdXBkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghZG5vZGUudGFnICYmIHR5cGVvZiBkbm9kZS50ZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUudGV4dCAhPT0gcHJldmlvdXMudGV4dCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RG9tTm9kZSA9IGRvbU5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkbm9kZS50ZXh0KTtcclxuICAgICAgICAgICAgICAgIGRvbU5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3RG9tTm9kZSwgZG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBkbm9kZS5kb21Ob2RlID0gbmV3RG9tTm9kZTtcclxuICAgICAgICAgICAgICAgIHRleHRVcGRhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0VXBkYXRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRub2RlLnRhZyAmJiBkbm9kZS50YWcubGFzdEluZGV4T2YoJ3N2ZycsIDApID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJldmlvdXMuY2hpbGRyZW4gIT09IGRub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oZG5vZGUuY2hpbGRyZW4sIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGRub2RlLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkID1cclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVDaGlsZHJlbihkbm9kZSwgcHJldmlvdXMuY2hpbGRyZW4sIGNoaWxkcmVuLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHx8IHVwZGF0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9wZXJ0aWVzID0gYnVpbGRQcmV2aW91c1Byb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXMsIGRub2RlKTtcclxuICAgICAgICAgICAgaWYgKGRub2RlLmF0dHJpYnV0ZXMgJiYgZG5vZGUuZXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5hdHRyaWJ1dGVzLCBkbm9kZS5hdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkID1cclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5wcm9wZXJ0aWVzLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgZmFsc2UpIHx8IHVwZGF0ZWQ7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuZXZlbnRzLCBkbm9kZS5ldmVudHMsIHByb2plY3Rpb25PcHRpb25zLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGRub2RlLmV2ZW50cztcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVFdmVudChkb21Ob2RlLCBldmVudCwgZXZlbnRzW2V2ZW50XSwgcHJvamVjdGlvbk9wdGlvbnMsIGRub2RlLnByb3BlcnRpZXMuYmluZCwgcHJldmlvdXNQcm9wZXJ0aWVzLmV2ZW50c1tldmVudF0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkID1cclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5wcm9wZXJ0aWVzLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZG5vZGUucHJvcGVydGllcy5rZXkgIT09IG51bGwgJiYgZG5vZGUucHJvcGVydGllcy5rZXkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGQoZG9tTm9kZSwgYCR7ZG5vZGUucHJvcGVydGllcy5rZXl9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVwZGF0ZWQgJiYgZG5vZGUucHJvcGVydGllcyAmJiBkbm9kZS5wcm9wZXJ0aWVzLnVwZGF0ZUFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICBkbm9kZS5wcm9wZXJ0aWVzLnVwZGF0ZUFuaW1hdGlvbihkb21Ob2RlLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcmV2aW91cy5wcm9wZXJ0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKHZub2RlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgLy8gdHJhbnNmZXIgYW55IHByb3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkIC0gYXMgdGhlc2UgbXVzdCBiZSBkZWNvcmF0ZWQgcHJvcGVydGllc1xyXG4gICAgdm5vZGUuZGVjb3JhdGVkRGVmZXJyZWRQcm9wZXJ0aWVzID0gdm5vZGUucHJvcGVydGllcztcclxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB2bm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayghIXZub2RlLmluc2VydGVkKTtcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIHZub2RlLnByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0aWVzLCB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMpO1xyXG4gICAgcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHZub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrKCEhdm5vZGUuaW5zZXJ0ZWQpLCB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMpO1xyXG4gICAgICAgIHVwZGF0ZVByb3BlcnRpZXModm5vZGUuZG9tTm9kZSwgdm5vZGUucHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIHZub2RlLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gcnVuRGVmZXJyZWRSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xyXG4gICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xyXG4gICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChnbG9iYWwucmVxdWVzdElkbGVDYWxsYmFjaykge1xyXG4gICAgICAgICAgICBnbG9iYWwucmVxdWVzdElkbGVDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBzY2hlZHVsZVJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgaWYgKHByb2plY3Rpb25PcHRpb25zLnN5bmMpIHtcclxuICAgICAgICByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocHJvamVjdG9yU3RhdGUucmVuZGVyU2NoZWR1bGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJTY2hlZHVsZWQgPSBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgcmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IHJlbmRlclF1ZXVlID0gcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWU7XHJcbiAgICBjb25zdCByZW5kZXJzID0gWy4uLnJlbmRlclF1ZXVlXTtcclxuICAgIHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlID0gW107XHJcbiAgICByZW5kZXJzLnNvcnQoKGEsIGIpID0+IGEuZGVwdGggLSBiLmRlcHRoKTtcclxuICAgIGNvbnN0IHByZXZpb3VzbHlSZW5kZXJlZCA9IFtdO1xyXG4gICAgd2hpbGUgKHJlbmRlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gcmVuZGVycy5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChpbnN0YW5jZU1hcC5oYXMoaW5zdGFuY2UpICYmIHByZXZpb3VzbHlSZW5kZXJlZC5pbmRleE9mKGluc3RhbmNlKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNseVJlbmRlcmVkLnB1c2goaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICBjb25zdCB7IHBhcmVudFZOb2RlLCBkbm9kZSB9ID0gaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICAgICAgdXBkYXRlRG9tKGRub2RlLCB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSksIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgaW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIHJ1bkRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKTtcclxufVxyXG5leHBvcnQgY29uc3QgZG9tID0ge1xyXG4gICAgYXBwZW5kOiBmdW5jdGlvbiAocGFyZW50Tm9kZSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgIGNvbnN0IGZpbmFsUHJvamVjdG9yT3B0aW9ucyA9IGdldFByb2plY3Rpb25PcHRpb25zKHByb2plY3Rpb25PcHRpb25zLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGFmdGVyUmVuZGVyQ2FsbGJhY2tzOiBbXSxcclxuICAgICAgICAgICAgZGVmZXJyZWRSZW5kZXJDYWxsYmFja3M6IFtdLFxyXG4gICAgICAgICAgICBub2RlTWFwOiBuZXcgV2Vha01hcCgpLFxyXG4gICAgICAgICAgICByZW5kZXJTY2hlZHVsZWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgcmVuZGVyUXVldWU6IFtdLFxyXG4gICAgICAgICAgICBtZXJnZTogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgIG1lcmdlRWxlbWVudDogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50XHJcbiAgICAgICAgfTtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZU1hcC5zZXQoaW5zdGFuY2UsIHByb2plY3RvclN0YXRlKTtcclxuICAgICAgICBmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFZOb2RlID0gdG9QYXJlbnRWTm9kZShmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUpO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSk7XHJcbiAgICAgICAgaW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlOiBub2RlLCBwYXJlbnRWTm9kZSB9KTtcclxuICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZS5wdXNoKHsgaW5zdGFuY2UsIGRlcHRoOiBmaW5hbFByb2plY3Rvck9wdGlvbnMuZGVwdGggfSk7XHJcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVJlbmRlcihmaW5hbFByb2plY3Rvck9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB1cGRhdGVEb20obm9kZSwgbm9kZSwgZmluYWxQcm9qZWN0b3JPcHRpb25zLCBwYXJlbnRWTm9kZSwgaW5zdGFuY2UpO1xyXG4gICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGEub25BdHRhY2goKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhmaW5hbFByb2plY3Rvck9wdGlvbnMpO1xyXG4gICAgICAgIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZG9tTm9kZTogZmluYWxQcm9qZWN0b3JPcHRpb25zLnJvb3ROb2RlXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICB9LFxyXG4gICAgbWVyZ2U6IGZ1bmN0aW9uIChlbGVtZW50LCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIHByb2plY3Rpb25PcHRpb25zLm1lcmdlID0gdHJ1ZTtcclxuICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24gPSB0aGlzLmFwcGVuZChlbGVtZW50LnBhcmVudE5vZGUsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgIHByb2plY3RvclN0YXRlLm1lcmdlID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHByb2plY3Rpb247XHJcbiAgICB9XHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZkb20ubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL3Zkb20ubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS92ZG9tLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciB3aWRnZXRGYWN0b3J5ID0gcmVxdWlyZShcInNyYy9tZW51LWl0ZW0vTWVudUl0ZW1cIik7XG5cbnZhciByZWdpc3RlckN1c3RvbUVsZW1lbnQgPSByZXF1aXJlKCdAZG9qby93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQnKS5kZWZhdWx0O1xyXG5cclxudmFyIGRlZmF1bHRFeHBvcnQgPSB3aWRnZXRGYWN0b3J5LmRlZmF1bHQ7XHJcbmRlZmF1bHRFeHBvcnQgJiYgcmVnaXN0ZXJDdXN0b21FbGVtZW50KGRlZmF1bHRFeHBvcnQpO1xyXG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ltcG9ydHMtbG9hZGVyP3dpZGdldEZhY3Rvcnk9c3JjL21lbnUtaXRlbS9NZW51SXRlbSEuL25vZGVfbW9kdWxlcy9AZG9qby9jbGktYnVpbGQtd2lkZ2V0L3RlbXBsYXRlL2N1c3RvbS1lbGVtZW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9pbXBvcnRzLWxvYWRlci9pbmRleC5qcz93aWRnZXRGYWN0b3J5PXNyYy9tZW51LWl0ZW0vTWVudUl0ZW0hLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0geVtvcFswXSAmIDIgPyBcInJldHVyblwiIDogb3BbMF0gPyBcInRocm93XCIgOiBcIm5leHRcIl0pICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gWzAsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7ICB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAob1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2goZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxuXHRcdGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IHYgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9kJztcclxuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvY3VzdG9tRWxlbWVudCc7XHJcbmltcG9ydCB7IFdpZGdldFByb3BlcnRpZXMgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgdGhlbWUsIFRoZW1lZE1peGluIH0gZnJvbSAnQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1RoZW1lZCc7XHJcbmltcG9ydCB7IFdpZGdldEJhc2UgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9XaWRnZXRCYXNlJztcclxuXHJcbmltcG9ydCAqIGFzIGNzcyBmcm9tICcuL21lbnVJdGVtLm0uY3NzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW1Qcm9wZXJ0aWVzIGV4dGVuZHMgV2lkZ2V0UHJvcGVydGllcyB7XHJcblx0dGl0bGU6IHN0cmluZztcclxuXHRzZWxlY3RlZD86IGJvb2xlYW47XHJcblx0ZGF0YT86IGFueTtcclxuXHRvblNlbGVjdGVkPzogKGRhdGE6IGFueSkgPT4gdm9pZDtcclxufVxyXG5cclxuQGN1c3RvbUVsZW1lbnQ8TWVudUl0ZW1Qcm9wZXJ0aWVzPih7XHJcblx0dGFnOiAnZGVtby1tZW51LWl0ZW0nLFxyXG5cdGF0dHJpYnV0ZXM6IFsndGl0bGUnLCAnc2VsZWN0ZWQnXSxcclxuXHRldmVudHM6IFsnb25TZWxlY3RlZCddLFxyXG5cdHByb3BlcnRpZXM6IFsnZGF0YScsICdzZWxlY3RlZCddXHJcbn0pXHJcbkB0aGVtZShjc3MpXHJcbmV4cG9ydCBjbGFzcyBNZW51SXRlbSBleHRlbmRzIFRoZW1lZE1peGluKFdpZGdldEJhc2UpPE1lbnVJdGVtUHJvcGVydGllcz4ge1xyXG5cdHByaXZhdGUgX29uQ2xpY2soKSB7XHJcblx0XHR0aGlzLnByb3BlcnRpZXMub25TZWxlY3RlZCAmJiB0aGlzLnByb3BlcnRpZXMub25TZWxlY3RlZCh0aGlzLnByb3BlcnRpZXMuZGF0YSk7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgcmVuZGVyKCkge1xyXG5cdFx0Y29uc3QgeyB0aXRsZSwgc2VsZWN0ZWQgfSA9IHRoaXMucHJvcGVydGllcztcclxuXHJcblx0XHRyZXR1cm4gdignbGknLCB7IGNsYXNzZXM6IHRoaXMudGhlbWUoY3NzLnJvb3QpIH0sIFtcclxuXHRcdFx0dihcclxuXHRcdFx0XHQnc3BhbicsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0Y2xhc3NlczogdGhpcy50aGVtZShbY3NzLml0ZW0sIHNlbGVjdGVkID8gY3NzLnNlbGVjdGVkIDogbnVsbF0pLFxyXG5cdFx0XHRcdFx0b25jbGljazogdGhpcy5fb25DbGlja1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0W3RpdGxlXVxyXG5cdFx0XHQpXHJcblx0XHRdKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPXRzJmluc3RhbmNlTmFtZT0wX21lbnUtaXRlbSEuL3NyYy9tZW51LWl0ZW0vTWVudUl0ZW0udHMiLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCIgX2tleVwiOlwidGVzdC1hcHAvbWVudUl0ZW1cIixcInJvb3RcIjpcIm1lbnVJdGVtLW1fX3Jvb3RfX3NVbVVpXCIsXCJpdGVtXCI6XCJtZW51SXRlbS1tX19pdGVtX18yTWs2UlwiLFwic2VsZWN0ZWRcIjpcIm1lbnVJdGVtLW1fX3NlbGVjdGVkX18xLWYzSVwifTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3Ncbi8vIG1vZHVsZSBpZCA9IC4vc3JjL21lbnUtaXRlbS9tZW51SXRlbS5tLmNzc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgNTgxYzA3YWNjZGZjNTAwY2U0MzgiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL0Rlc3Ryb3lhYmxlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRXZlbnRlZC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL2xhbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvaGFzL2hhcy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL01hcC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL1Byb21pc2UubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9TeW1ib2wubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9XZWFrTWFwLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vYXJyYXkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9nbG9iYWwubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9pdGVyYXRvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL251bWJlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL29iamVjdC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N0cmluZy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC9xdWV1ZS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvdXRpbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9JbmplY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9Ob2RlSGFuZGxlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hZnRlclJlbmRlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2JlZm9yZVByb3BlcnRpZXMubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9jdXN0b21FbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RpZmYubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS92ZG9tLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS1pdGVtL01lbnVJdGVtLnRzIiwid2VicGFjazovLy8uL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3M/NmE5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7QUM3RGdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSx3Qzs7Ozs7Ozs7Ozs7QUN2REE7QUFDc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0NBQWdDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2RWlCO0FBQ0E7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsaUM7Ozs7Ozs7Ozs7OztBQ25NQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8saUJBQWlCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7O0FDdE1BO0FBQ0E7QUFDNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxtQzs7Ozs7Ozs7Ozs7OztBQ2hKQTtBQUNzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxxQkFBcUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGdDQUFnQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNrQztBQUNQO0FBQzNCO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3RELG9EQUFvRDtBQUNwRCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFlBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVM7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0M7Ozs7Ozs7O0FDdlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLG1DOzs7Ozs7Ozs7Ozs7Ozs7QUNqQkE7QUFDaUQ7QUFDakQsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDOzs7Ozs7Ozs7Ozs7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREE7QUFDQTtBQUNtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNBO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFlBQVk7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0Y7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DOzs7Ozs7Ozs7OztBQ3hTbUI7QUFDbkI7MEVBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsRUFBRTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxFQUFFO0FBQ2pFLG1DQUFtQyxtQkFBbUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxnQzs7Ozs7Ozs7Ozs7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsZ0NBQWdDLG1CQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxrQzs7Ozs7Ozs7O0FDekxBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQzs7Ozs7Ozs7O0FDdEJrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxxQzs7Ozs7Ozs7Ozs7QUNwQmtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNB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QUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2THRDO0FBQUE7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFB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LENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVTLE1BQU07UUFDZixNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFNUMsTUFBTSxDQUFDLGdGQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMscURBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDakQsZ0ZBQUMsQ0FDQSxNQUFNLEVBQ047Z0JBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxxREFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMseURBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTthQUN0QixFQUNELENBQUMsS0FBSyxDQUFDLENBQ1A7U0FDRCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Q7QUFuQlksUUFBUTtJQVBwQixtSEFBYSxDQUFxQjtRQUNsQyxHQUFHLEVBQUUsZ0JBQWdCO1FBQ3JCLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7UUFDakMsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDO1FBQ3RCLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUM7S0FDaEMsQ0FBQztJQUNELGdHQUFLLENBQUMsNkNBQUcsQ0FBQztHQUNFLFFBQVEsQ0FtQnBCO0FBbkJvQjtBQXFCckIsK0RBQWUsUUFBUSxFQUFDOzs7Ozs7OztBQzNDeEI7QUFDQSxrQkFBa0Isd0kiLCJmaWxlIjoibWVudS1pdGVtLTEuMC4wLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgNTgxYzA3YWNjZGZjNTAwY2U0MzgiLCJpbXBvcnQgeyBjcmVhdGVDb21wb3NpdGVIYW5kbGUgfSBmcm9tICcuL2xhbmcnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi4vc2hpbS9Qcm9taXNlJztcbi8qKlxuICogTm8gb3BlcmF0aW9uIGZ1bmN0aW9uIHRvIHJlcGxhY2Ugb3duIG9uY2UgaW5zdGFuY2UgaXMgZGVzdG9yeWVkXG4gKi9cbmZ1bmN0aW9uIG5vb3AoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG59XG4vKipcbiAqIE5vIG9wIGZ1bmN0aW9uIHVzZWQgdG8gcmVwbGFjZSBvd24sIG9uY2UgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdG9yeWVkXG4gKi9cbmZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgbWFkZSB0byBkZXN0cm95ZWQgbWV0aG9kJyk7XG59XG5leHBvcnQgY2xhc3MgRGVzdHJveWFibGUge1xuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmhhbmRsZXMgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgaGFuZGxlcyBmb3IgdGhlIGluc3RhbmNlIHRoYXQgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiBgdGhpcy5kZXN0cm95YCBpcyBjYWxsZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SGFuZGxlfSBoYW5kbGUgVGhlIGhhbmRsZSB0byBhZGQgZm9yIHRoZSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtIYW5kbGV9IGEgaGFuZGxlIGZvciB0aGUgaGFuZGxlLCByZW1vdmVzIHRoZSBoYW5kbGUgZm9yIHRoZSBpbnN0YW5jZSBhbmQgY2FsbHMgZGVzdHJveVxuICAgICAqL1xuICAgIG93bihoYW5kbGVzKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZSA9IEFycmF5LmlzQXJyYXkoaGFuZGxlcykgPyBjcmVhdGVDb21wb3NpdGVIYW5kbGUoLi4uaGFuZGxlcykgOiBoYW5kbGVzO1xuICAgICAgICBjb25zdCB7IGhhbmRsZXM6IF9oYW5kbGVzIH0gPSB0aGlzO1xuICAgICAgICBfaGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgIF9oYW5kbGVzLnNwbGljZShfaGFuZGxlcy5pbmRleE9mKGhhbmRsZSkpO1xuICAgICAgICAgICAgICAgIGhhbmRsZS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlc3RycHlzIGFsbCBoYW5kZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8YW55fSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIGFsbCBoYW5kbGVzIGhhdmUgYmVlbiBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcy5mb3JFYWNoKChoYW5kbGUpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGUgJiYgaGFuZGxlLmRlc3Ryb3kgJiYgaGFuZGxlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gbm9vcDtcbiAgICAgICAgICAgIHRoaXMub3duID0gZGVzdHJveWVkO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgRGVzdHJveWFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1EZXN0cm95YWJsZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRGVzdHJveWFibGUubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9EZXN0cm95YWJsZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgTWFwIGZyb20gJy4uL3NoaW0vTWFwJztcclxuaW1wb3J0IHsgRGVzdHJveWFibGUgfSBmcm9tICcuL0Rlc3Ryb3lhYmxlJztcclxuLyoqXHJcbiAqIE1hcCBvZiBjb21wdXRlZCByZWd1bGFyIGV4cHJlc3Npb25zLCBrZXllZCBieSBzdHJpbmdcclxuICovXHJcbmNvbnN0IHJlZ2V4TWFwID0gbmV3IE1hcCgpO1xyXG4vKipcclxuICogRGV0ZXJtaW5lcyBpcyB0aGUgZXZlbnQgdHlwZSBnbG9iIGhhcyBiZWVuIG1hdGNoZWRcclxuICpcclxuICogQHJldHVybnMgYm9vbGVhbiB0aGF0IGluZGljYXRlcyBpZiB0aGUgZ2xvYiBpcyBtYXRjaGVkXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNHbG9iTWF0Y2goZ2xvYlN0cmluZywgdGFyZ2V0U3RyaW5nKSB7XHJcbiAgICBpZiAodHlwZW9mIHRhcmdldFN0cmluZyA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGdsb2JTdHJpbmcgPT09ICdzdHJpbmcnICYmIGdsb2JTdHJpbmcuaW5kZXhPZignKicpICE9PSAtMSkge1xyXG4gICAgICAgIGxldCByZWdleDtcclxuICAgICAgICBpZiAocmVnZXhNYXAuaGFzKGdsb2JTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgIHJlZ2V4ID0gcmVnZXhNYXAuZ2V0KGdsb2JTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtnbG9iU3RyaW5nLnJlcGxhY2UoL1xcKi9nLCAnLionKX0kYCk7XHJcbiAgICAgICAgICAgIHJlZ2V4TWFwLnNldChnbG9iU3RyaW5nLCByZWdleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KHRhcmdldFN0cmluZyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZ2xvYlN0cmluZyA9PT0gdGFyZ2V0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBFdmVudCBDbGFzc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEV2ZW50ZWQgZXh0ZW5kcyBEZXN0cm95YWJsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIG1hcCBvZiBsaXN0ZW5lcnMga2V5ZWQgYnkgZXZlbnQgdHlwZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG4gICAgZW1pdChldmVudCkge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwLmZvckVhY2goKG1ldGhvZHMsIHR5cGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzR2xvYk1hdGNoKHR5cGUsIGV2ZW50LnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBbLi4ubWV0aG9kc10uZm9yRWFjaCgobWV0aG9kKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmNhbGwodGhpcywgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG9uKHR5cGUsIGxpc3RlbmVyKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdGVuZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXMgPSBsaXN0ZW5lci5tYXAoKGxpc3RlbmVyKSA9PiB0aGlzLl9hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZGVzdHJveSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVzLmZvckVhY2goKGhhbmRsZSkgPT4gaGFuZGxlLmRlc3Ryb3koKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XHJcbiAgICB9XHJcbiAgICBfYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XHJcbiAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwLnNldCh0eXBlLCBsaXN0ZW5lcnMpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzTWFwLmdldCh0eXBlKSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UobGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgRXZlbnRlZDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXZlbnRlZC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRXZlbnRlZC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL0V2ZW50ZWQubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnLi4vc2hpbS9vYmplY3QnO1xuZXhwb3J0IHsgYXNzaWduIH0gZnJvbSAnLi4vc2hpbS9vYmplY3QnO1xuY29uc3Qgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4vKipcbiAqIFR5cGUgZ3VhcmQgdGhhdCBlbnN1cmVzIHRoYXQgdGhlIHZhbHVlIGNhbiBiZSBjb2VyY2VkIHRvIE9iamVjdFxuICogdG8gd2VlZCBvdXQgaG9zdCBvYmplY3RzIHRoYXQgZG8gbm90IGRlcml2ZSBmcm9tIE9iamVjdC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBpZiB3ZSB3YW50IHRvIGRlZXAgY29weSBhbiBvYmplY3Qgb3Igbm90LlxuICogTm90ZTogSW4gRVM2IGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSBhbiBvYmplY3QncyBTeW1ib2wudG9TdHJpbmdUYWcgcHJvcGVydHksIHdoaWNoIHdpbGxcbiAqIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYHRvU3RyaW5nYC4gVGhpcyBpcyBhIHJhcmUgZWRnZSBjYXNlIHRoYXQgaXMgZGlmZmljdWx0IHRvIGhhbmRsZSxcbiAqIHNvIGl0IGlzIG5vdCBoYW5kbGVkIGhlcmUuXG4gKiBAcGFyYW0gIHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybiAgICAgICBJZiB0aGUgdmFsdWUgaXMgY29lcmNpYmxlIGludG8gYW4gT2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHNob3VsZERlZXBDb3B5T2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuZnVuY3Rpb24gY29weUFycmF5KGFycmF5LCBpbmhlcml0ZWQpIHtcbiAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gY29weUFycmF5KGl0ZW0sIGluaGVyaXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFzaG91bGREZWVwQ29weU9iamVjdChpdGVtKVxuICAgICAgICAgICAgPyBpdGVtXG4gICAgICAgICAgICA6IF9taXhpbih7XG4gICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbmhlcml0ZWQ6IGluaGVyaXRlZCxcbiAgICAgICAgICAgICAgICBzb3VyY2VzOiBbaXRlbV0sXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7fVxuICAgICAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBfbWl4aW4oa3dBcmdzKSB7XG4gICAgY29uc3QgZGVlcCA9IGt3QXJncy5kZWVwO1xuICAgIGNvbnN0IGluaGVyaXRlZCA9IGt3QXJncy5pbmhlcml0ZWQ7XG4gICAgY29uc3QgdGFyZ2V0ID0ga3dBcmdzLnRhcmdldDtcbiAgICBjb25zdCBjb3BpZWQgPSBrd0FyZ3MuY29waWVkIHx8IFtdO1xuICAgIGNvbnN0IGNvcGllZENsb25lID0gWy4uLmNvcGllZF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrd0FyZ3Muc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBrd0FyZ3Muc291cmNlc1tpXTtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChjb3BpZWRDbG9uZS5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjb3B5QXJyYXkodmFsdWUsIGluaGVyaXRlZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkRGVlcENvcHlPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtrZXldIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkLnB1c2goc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gX21peGluKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRlZDogaW5oZXJpdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXM6IFt2YWx1ZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCAuLi5taXhpbnMpIHtcbiAgICBpZiAoIW1peGlucy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xhbmcuY3JlYXRlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBtaXhpbiBvYmplY3QuJyk7XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBtaXhpbnMuc2xpY2UoKTtcbiAgICBhcmdzLnVuc2hpZnQoT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpKTtcbiAgICByZXR1cm4gYXNzaWduLmFwcGx5KG51bGwsIGFyZ3MpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ24odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgcmV0dXJuIF9taXhpbih7XG4gICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgIGluaGVyaXRlZDogZmFsc2UsXG4gICAgICAgIHNvdXJjZXM6IHNvdXJjZXMsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVlcE1peGluKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgIHJldHVybiBfbWl4aW4oe1xuICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICBpbmhlcml0ZWQ6IHRydWUsXG4gICAgICAgIHNvdXJjZXM6IHNvdXJjZXMsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgb2JqZWN0IHVzaW5nIHRoZSBwcm92aWRlZCBzb3VyY2UncyBwcm90b3R5cGUgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhlIG5ldyBvYmplY3QsIGFuZCB0aGVuXG4gKiBkZWVwIGNvcGllcyB0aGUgcHJvdmlkZWQgc291cmNlJ3MgdmFsdWVzIGludG8gdGhlIG5ldyB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBUaGUgb2JqZWN0IHRvIGR1cGxpY2F0ZVxuICogQHJldHVybiBUaGUgbmV3IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZHVwbGljYXRlKHNvdXJjZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSkpO1xuICAgIHJldHVybiBkZWVwTWl4aW4odGFyZ2V0LCBzb3VyY2UpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgdGhlIHNhbWUgdmFsdWUuXG4gKlxuICogQHBhcmFtIGEgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIGIgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZTsgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0lkZW50aWNhbChhLCBiKSB7XG4gICAgcmV0dXJuIChhID09PSBiIHx8XG4gICAgICAgIC8qIGJvdGggdmFsdWVzIGFyZSBOYU4gKi9cbiAgICAgICAgKGEgIT09IGEgJiYgYiAhPT0gYikpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBiaW5kcyBhIG1ldGhvZCB0byB0aGUgc3BlY2lmaWVkIG9iamVjdCBhdCBydW50aW1lLiBUaGlzIGlzIHNpbWlsYXIgdG9cbiAqIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAsIGJ1dCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gaXQgdGFrZXMgdGhlIG5hbWUgb2YgYSBtZXRob2Qgb24gYW4gb2JqZWN0LlxuICogQXMgYSByZXN1bHQsIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBgbGF0ZUJpbmRgIHdpbGwgYWx3YXlzIGNhbGwgdGhlIGZ1bmN0aW9uIGN1cnJlbnRseSBhc3NpZ25lZCB0b1xuICogdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0IGFzIG9mIHRoZSBtb21lbnQgdGhlIGZ1bmN0aW9uIGl0IHJldHVybnMgaXMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgY29udGV4dCBvYmplY3RcbiAqIEBwYXJhbSBtZXRob2QgVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCBvbiB0aGUgY29udGV4dCBvYmplY3QgdG8gYmluZCB0byBpdHNlbGZcbiAqIEBwYXJhbSBzdXBwbGllZEFyZ3MgQW4gb3B0aW9uYWwgYXJyYXkgb2YgdmFsdWVzIHRvIHByZXBlbmQgdG8gdGhlIGBpbnN0YW5jZVttZXRob2RdYCBhcmd1bWVudHMgbGlzdFxuICogQHJldHVybiBUaGUgYm91bmQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhdGVCaW5kKGluc3RhbmNlLCBtZXRob2QsIC4uLnN1cHBsaWVkQXJncykge1xuICAgIHJldHVybiBzdXBwbGllZEFyZ3MubGVuZ3RoXG4gICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPyBzdXBwbGllZEFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkgOiBzdXBwbGllZEFyZ3M7XG4gICAgICAgICAgICAvLyBUUzcwMTdcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZVttZXRob2RdLmFwcGx5KGluc3RhbmNlLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFRTNzAxN1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlW21ldGhvZF0uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgcmV0dXJuIF9taXhpbih7XG4gICAgICAgIGRlZXA6IGZhbHNlLFxuICAgICAgICBpbmhlcml0ZWQ6IHRydWUsXG4gICAgICAgIHNvdXJjZXM6IHNvdXJjZXMsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBpbnZva2VzIHRoZSBnaXZlbiBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMgcHJlcGVuZGVkIHRvIGl0cyBhcmd1bWVudCBsaXN0LlxuICogTGlrZSBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgLCBidXQgZG9lcyBub3QgYWx0ZXIgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRhcmdldEZ1bmN0aW9uIFRoZSBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGJvdW5kXG4gKiBAcGFyYW0gc3VwcGxpZWRBcmdzIEFuIG9wdGlvbmFsIGFycmF5IG9mIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRoZSBgdGFyZ2V0RnVuY3Rpb25gIGFyZ3VtZW50cyBsaXN0XG4gKiBAcmV0dXJuIFRoZSBib3VuZCBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbCh0YXJnZXRGdW5jdGlvbiwgLi4uc3VwcGxpZWRBcmdzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPyBzdXBwbGllZEFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkgOiBzdXBwbGllZEFyZ3M7XG4gICAgICAgIHJldHVybiB0YXJnZXRGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xufVxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgZGVzdHJveSBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIGNhbGxzIHRoZSBwYXNzZWQtaW4gZGVzdHJ1Y3Rvci5cbiAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIHVuaWZpZWQgaW50ZXJmYWNlIGZvciBjcmVhdGluZyBcInJlbW92ZVwiIC8gXCJkZXN0cm95XCIgaGFuZGxlcnMgZm9yXG4gKiBldmVudCBsaXN0ZW5lcnMsIHRpbWVycywgZXRjLlxuICpcbiAqIEBwYXJhbSBkZXN0cnVjdG9yIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBoYW5kbGUncyBgZGVzdHJveWAgbWV0aG9kIGlzIGludm9rZWRcbiAqIEByZXR1cm4gVGhlIGhhbmRsZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhhbmRsZShkZXN0cnVjdG9yKSB7XG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkZXN0cnVjdG9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgc2luZ2xlIGhhbmRsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlc3Ryb3kgbXVsdGlwbGUgaGFuZGxlcyBzaW11bHRhbmVvdXNseS5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlcyBBbiBhcnJheSBvZiBoYW5kbGVzIHdpdGggYGRlc3Ryb3lgIG1ldGhvZHNcbiAqIEByZXR1cm4gVGhlIGhhbmRsZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBvc2l0ZUhhbmRsZSguLi5oYW5kbGVzKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhbmRsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaGFuZGxlc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxhbmcubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL2xhbmcubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9sYW5nLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImZ1bmN0aW9uIGlzRmVhdHVyZVRlc3RUaGVuYWJsZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLnRoZW47XHJcbn1cclxuLyoqXHJcbiAqIEEgY2FjaGUgb2YgcmVzdWx0cyBvZiBmZWF0dXJlIHRlc3RzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdGVzdENhY2hlID0ge307XHJcbi8qKlxyXG4gKiBBIGNhY2hlIG9mIHRoZSB1bi1yZXNvbHZlZCBmZWF0dXJlIHRlc3RzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdGVzdEZ1bmN0aW9ucyA9IHt9O1xyXG4vKipcclxuICogQSBjYWNoZSBvZiB1bnJlc29sdmVkIHRoZW5hYmxlcyAocHJvYmFibHkgcHJvbWlzZXMpXHJcbiAqIEB0eXBlIHt7fX1cclxuICovXHJcbmNvbnN0IHRlc3RUaGVuYWJsZXMgPSB7fTtcclxuLyoqXHJcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgc2NvcGUgKGB3aW5kb3dgIGluIGEgYnJvd3NlciwgYGdsb2JhbGAgaW4gTm9kZUpTKVxyXG4gKi9cclxuY29uc3QgZ2xvYmFsU2NvcGUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIEJyb3dzZXJzXHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gTm9kZVxyXG4gICAgICAgIHJldHVybiBnbG9iYWw7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyBXZWIgd29ya2Vyc1xyXG4gICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfVxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgIHJldHVybiB7fTtcclxufSkoKTtcclxuLyogR3JhYiB0aGUgc3RhdGljRmVhdHVyZXMgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSAqL1xyXG5jb25zdCB7IHN0YXRpY0ZlYXR1cmVzIH0gPSBnbG9iYWxTY29wZS5Eb2pvSGFzRW52aXJvbm1lbnQgfHwge307XHJcbi8qIENsZWFuaW5nIHVwIHRoZSBEb2pvSGFzRW52aW9ybm1lbnQgKi9cclxuaWYgKCdEb2pvSGFzRW52aXJvbm1lbnQnIGluIGdsb2JhbFNjb3BlKSB7XHJcbiAgICBkZWxldGUgZ2xvYmFsU2NvcGUuRG9qb0hhc0Vudmlyb25tZW50O1xyXG59XHJcbi8qKlxyXG4gKiBDdXN0b20gdHlwZSBndWFyZCB0byBuYXJyb3cgdGhlIGBzdGF0aWNGZWF0dXJlc2AgdG8gZWl0aGVyIGEgbWFwIG9yIGEgZnVuY3Rpb24gdGhhdFxyXG4gKiByZXR1cm5zIGEgbWFwLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGd1YXJkIGZvclxyXG4gKi9cclxuZnVuY3Rpb24gaXNTdGF0aWNGZWF0dXJlRnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBjYWNoZSBvZiBhc3NlcnRlZCBmZWF0dXJlcyB0aGF0IHdlcmUgYXZhaWxhYmxlIGluIHRoZSBnbG9iYWwgc2NvcGUgd2hlbiB0aGVcclxuICogbW9kdWxlIGxvYWRlZFxyXG4gKi9cclxuY29uc3Qgc3RhdGljQ2FjaGUgPSBzdGF0aWNGZWF0dXJlc1xyXG4gICAgPyBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbihzdGF0aWNGZWF0dXJlcykgPyBzdGF0aWNGZWF0dXJlcy5hcHBseShnbG9iYWxTY29wZSkgOiBzdGF0aWNGZWF0dXJlc1xyXG4gICAgOiB7fTsgLyogUHJvdmlkaW5nIGFuIGVtcHR5IGNhY2hlLCBpZiBub25lIHdhcyBpbiB0aGUgZW52aXJvbm1lbnRcclxuXHJcbi8qKlxyXG4qIEFNRCBwbHVnaW4gZnVuY3Rpb24uXHJcbipcclxuKiBDb25kaXRpb25hbCBsb2FkcyBtb2R1bGVzIGJhc2VkIG9uIGEgaGFzIGZlYXR1cmUgdGVzdCB2YWx1ZS5cclxuKlxyXG4qIEBwYXJhbSByZXNvdXJjZUlkIEdpdmVzIHRoZSByZXNvbHZlZCBtb2R1bGUgaWQgdG8gbG9hZC5cclxuKiBAcGFyYW0gcmVxdWlyZSBUaGUgbG9hZGVyIHJlcXVpcmUgZnVuY3Rpb24gd2l0aCByZXNwZWN0IHRvIHRoZSBtb2R1bGUgdGhhdCBjb250YWluZWQgdGhlIHBsdWdpbiByZXNvdXJjZSBpbiBpdHNcclxuKiAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IGxpc3QuXHJcbiogQHBhcmFtIGxvYWQgQ2FsbGJhY2sgdG8gbG9hZGVyIHRoYXQgY29uc3VtZXMgcmVzdWx0IG9mIHBsdWdpbiBkZW1hbmQuXHJcbiovXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkKHJlc291cmNlSWQsIHJlcXVpcmUsIGxvYWQsIGNvbmZpZykge1xyXG4gICAgcmVzb3VyY2VJZCA/IHJlcXVpcmUoW3Jlc291cmNlSWRdLCBsb2FkKSA6IGxvYWQoKTtcclxufVxyXG4vKipcclxuICogQU1EIHBsdWdpbiBmdW5jdGlvbi5cclxuICpcclxuICogUmVzb2x2ZXMgcmVzb3VyY2VJZCBpbnRvIGEgbW9kdWxlIGlkIGJhc2VkIG9uIHBvc3NpYmx5LW5lc3RlZCB0ZW5hcnkgZXhwcmVzc2lvbiB0aGF0IGJyYW5jaGVzIG9uIGhhcyBmZWF0dXJlIHRlc3RcclxuICogdmFsdWUocykuXHJcbiAqXHJcbiAqIEBwYXJhbSByZXNvdXJjZUlkIFRoZSBpZCBvZiB0aGUgbW9kdWxlXHJcbiAqIEBwYXJhbSBub3JtYWxpemUgUmVzb2x2ZXMgYSByZWxhdGl2ZSBtb2R1bGUgaWQgaW50byBhbiBhYnNvbHV0ZSBtb2R1bGUgaWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocmVzb3VyY2VJZCwgbm9ybWFsaXplKSB7XHJcbiAgICBjb25zdCB0b2tlbnMgPSByZXNvdXJjZUlkLm1hdGNoKC9bXFw/Ol18W146XFw/XSovZykgfHwgW107XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBmdW5jdGlvbiBnZXQoc2tpcCkge1xyXG4gICAgICAgIGNvbnN0IHRlcm0gPSB0b2tlbnNbaSsrXTtcclxuICAgICAgICBpZiAodGVybSA9PT0gJzonKSB7XHJcbiAgICAgICAgICAgIC8vIGVtcHR5IHN0cmluZyBtb2R1bGUgbmFtZSwgcmVzb2x2ZXMgdG8gbnVsbFxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHBvc3RmaXhlZCB3aXRoIGEgPyBtZWFucyBpdCBpcyBhIGZlYXR1cmUgdG8gYnJhbmNoIG9uLCB0aGUgdGVybSBpcyB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxyXG4gICAgICAgICAgICBpZiAodG9rZW5zW2krK10gPT09ICc/Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFza2lwICYmIGhhcyh0ZXJtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoZWQgdGhlIGZlYXR1cmUsIGdldCB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgb3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRpZCBub3QgbWF0Y2gsIGdldCB0aGUgc2Vjb25kIHZhbHVlLCBwYXNzaW5nIG92ZXIgdGhlIGZpcnN0XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQoc2tpcCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYSBtb2R1bGVcclxuICAgICAgICAgICAgcmV0dXJuIHRlcm07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgaWQgPSBnZXQoKTtcclxuICAgIHJldHVybiBpZCAmJiBub3JtYWxpemUoaWQpO1xyXG59XHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhIGZlYXR1cmUgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkXHJcbiAqXHJcbiAqIEBwYXJhbSBmZWF0dXJlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZXhpc3RzKGZlYXR1cmUpIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIEJvb2xlYW4obm9ybWFsaXplZEZlYXR1cmUgaW4gc3RhdGljQ2FjaGUgfHwgbm9ybWFsaXplZEZlYXR1cmUgaW4gdGVzdENhY2hlIHx8IHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdKTtcclxufVxyXG4vKipcclxuICogUmVnaXN0ZXIgYSBuZXcgdGVzdCBmb3IgYSBuYW1lZCBmZWF0dXJlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBoYXMuYWRkKCdkb20tYWRkZXZlbnRsaXN0ZW5lcicsICEhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcik7XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGhhcy5hZGQoJ3RvdWNoLWV2ZW50cycsIGZ1bmN0aW9uICgpIHtcclxuICogICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50XHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBAcGFyYW0gZmVhdHVyZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxyXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHJlcG9ydGVkIG9mIHRoZSBmZWF0dXJlLCBvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBvbmNlIG9uIGZpcnN0IHRlc3RcclxuICogQHBhcmFtIG92ZXJ3cml0ZSBpZiBhbiBleGlzdGluZyB2YWx1ZSBzaG91bGQgYmUgb3ZlcndyaXR0ZW4uIERlZmF1bHRzIHRvIGZhbHNlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFkZChmZWF0dXJlLCB2YWx1ZSwgb3ZlcndyaXRlID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKGV4aXN0cyhub3JtYWxpemVkRmVhdHVyZSkgJiYgIW92ZXJ3cml0ZSAmJiAhKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEZlYXR1cmUgXCIke2ZlYXR1cmV9XCIgZXhpc3RzIGFuZCBvdmVyd3JpdGUgbm90IHRydWUuYCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzRmVhdHVyZVRlc3RUaGVuYWJsZSh2YWx1ZSkpIHtcclxuICAgICAgICB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdID0gdmFsdWUudGhlbigocmVzb2x2ZWRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0ZXN0Q2FjaGVbZmVhdHVyZV0gPSByZXNvbHZlZFZhbHVlO1xyXG4gICAgICAgICAgICBkZWxldGUgdGVzdFRoZW5hYmxlc1tmZWF0dXJlXTtcclxuICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXSA9IHZhbHVlO1xyXG4gICAgICAgIGRlbGV0ZSB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgbmFtZWQgZmVhdHVyZS5cclxuICpcclxuICogQHBhcmFtIGZlYXR1cmUgVGhlIG5hbWUgKGlmIGEgc3RyaW5nKSBvciBpZGVudGlmaWVyIChpZiBhbiBpbnRlZ2VyKSBvZiB0aGUgZmVhdHVyZSB0byB0ZXN0LlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzKGZlYXR1cmUpIHtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBjb25zdCBub3JtYWxpemVkRmVhdHVyZSA9IGZlYXR1cmUudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChub3JtYWxpemVkRmVhdHVyZSBpbiBzdGF0aWNDYWNoZSkge1xyXG4gICAgICAgIHJlc3VsdCA9IHN0YXRpY0NhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXSA9IHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdLmNhbGwobnVsbCk7XHJcbiAgICAgICAgZGVsZXRlIHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9ybWFsaXplZEZlYXR1cmUgaW4gdGVzdENhY2hlKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZlYXR1cmUgaW4gdGVzdFRoZW5hYmxlcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEF0dGVtcHQgdG8gZGV0ZWN0IHVucmVnaXN0ZXJlZCBoYXMgZmVhdHVyZSBcIiR7ZmVhdHVyZX1cImApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG4vKlxyXG4gKiBPdXQgb2YgdGhlIGJveCBmZWF0dXJlIHRlc3RzXHJcbiAqL1xyXG4vKiBFbnZpcm9ubWVudHMgKi9cclxuLyogVXNlZCBhcyBhIHZhbHVlIHRvIHByb3ZpZGUgYSBkZWJ1ZyBvbmx5IGNvZGUgcGF0aCAqL1xyXG5hZGQoJ2RlYnVnJywgdHJ1ZSk7XHJcbi8qIERldGVjdHMgaWYgdGhlIGVudmlyb25tZW50IGlzIFwiYnJvd3NlciBsaWtlXCIgKi9cclxuYWRkKCdob3N0LWJyb3dzZXInLCB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpO1xyXG4vKiBEZXRlY3RzIGlmIHRoZSBlbnZpcm9ubWVudCBhcHBlYXJzIHRvIGJlIE5vZGVKUyAqL1xyXG5hZGQoJ2hvc3Qtbm9kZScsIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpIHtcclxuICAgICAgICByZXR1cm4gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO1xyXG4gICAgfVxyXG59KTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvaGFzL2hhcy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9oYXMvaGFzLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IGlzQXJyYXlMaWtlLCBTaGltSXRlcmF0b3IgfSBmcm9tICcuL2l0ZXJhdG9yJztcclxuaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XHJcbmltcG9ydCB7IGlzIGFzIG9iamVjdElzIH0gZnJvbSAnLi9vYmplY3QnO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xyXG5pbXBvcnQgJy4vU3ltYm9sJztcclxuZXhwb3J0IGxldCBNYXAgPSBnbG9iYWwuTWFwO1xyXG5pZiAoIXRydWUpIHtcclxuICAgIE1hcCA9IChfYSA9IGNsYXNzIE1hcCB7XHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdNYXAnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZXJhYmxlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodmFsdWVbMF0sIHZhbHVlWzFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodmFsdWVbMF0sIHZhbHVlWzFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gQXJyYXkucHJvdG90eXBlLmluZGV4T2YgdXNpbmcgT2JqZWN0LmlzXHJcbiAgICAgICAgICAgICAqIHRvIGNoZWNrIGZvciBlcXVhbGl0eS4gU2VlIGh0dHA6Ly9temwubGEvMXp1S08yVlxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgX2luZGV4T2ZLZXkoa2V5cywga2V5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3RJcyhrZXlzW2ldLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnZXQgc2l6ZSgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGVhcigpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMubGVuZ3RoID0gdGhpcy5fdmFsdWVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVsZXRlKGtleSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbnRyaWVzKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5fa2V5cy5tYXAoKGtleSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBba2V5LCB0aGlzLl92YWx1ZXNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih2YWx1ZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvckVhY2goY2FsbGJhY2ssIGNvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSB0aGlzLl9rZXlzO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHZhbHVlc1tpXSwga2V5c1tpXSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2V0KGtleSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogdGhpcy5fdmFsdWVzW2luZGV4XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBoYXMoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpID4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAga2V5cygpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHRoaXMuX2tleXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XHJcbiAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IHRoaXMuX2tleXMubGVuZ3RoIDogaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzW2luZGV4XSA9IGtleTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhbHVlcygpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKHRoaXMuX3ZhbHVlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIF9hW1N5bWJvbC5zcGVjaWVzXSA9IF9hLFxyXG4gICAgICAgIF9hKTtcclxufVxyXG5leHBvcnQgZGVmYXVsdCBNYXA7XHJcbnZhciBfYTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWFwLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9NYXAubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9NYXAubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XHJcbmltcG9ydCB7IHF1ZXVlTWljcm9UYXNrIH0gZnJvbSAnLi9zdXBwb3J0L3F1ZXVlJztcclxuaW1wb3J0ICcuL1N5bWJvbCc7XHJcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XHJcbmV4cG9ydCBsZXQgU2hpbVByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcclxuZXhwb3J0IGNvbnN0IGlzVGhlbmFibGUgPSBmdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbic7XHJcbn07XHJcbmlmICghdHJ1ZSkge1xyXG4gICAgZ2xvYmFsLlByb21pc2UgPSBTaGltUHJvbWlzZSA9IChfYSA9IGNsYXNzIFByb21pc2Uge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBQcm9taXNlLlxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogQHBhcmFtIGV4ZWN1dG9yXHJcbiAgICAgICAgICAgICAqIFRoZSBleGVjdXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgUHJvbWlzZSBpcyBpbnN0YW50aWF0ZWQuIEl0IGlzIHJlc3BvbnNpYmxlIGZvclxyXG4gICAgICAgICAgICAgKiBzdGFydGluZyB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGVuIGl0IGlzIGludm9rZWQuXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIFRoZSBleGVjdXRvciBtdXN0IGNhbGwgZWl0aGVyIHRoZSBwYXNzZWQgYHJlc29sdmVgIGZ1bmN0aW9uIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZFxyXG4gICAgICAgICAgICAgKiBzdWNjZXNzZnVsbHksIG9yIHRoZSBgcmVqZWN0YCBmdW5jdGlvbiB3aGVuIHRoZSBvcGVyYXRpb24gZmFpbHMuXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxIC8qIFBlbmRpbmcgKi87XHJcbiAgICAgICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnUHJvbWlzZSc7XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIElmIHRydWUsIHRoZSByZXNvbHV0aW9uIG9mIHRoaXMgcHJvbWlzZSBpcyBjaGFpbmVkIChcImxvY2tlZCBpblwiKSB0byBhbm90aGVyIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBpc0NoYWluZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogV2hldGhlciBvciBub3QgdGhpcyBwcm9taXNlIGlzIGluIGEgcmVzb2x2ZWQgc3RhdGUuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVzb2x2ZWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgIT09IDEgLyogUGVuZGluZyAqLyB8fCBpc0NoYWluZWQ7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBDYWxsYmFja3MgdGhhdCBzaG91bGQgYmUgaW52b2tlZCBvbmNlIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBjYWxsYmFja3MgPSBbXTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogSW5pdGlhbGx5IHB1c2hlcyBjYWxsYmFja3Mgb250byBhIHF1ZXVlIGZvciBleGVjdXRpb24gb25jZSB0aGlzIHByb21pc2Ugc2V0dGxlcy4gQWZ0ZXIgdGhlIHByb21pc2Ugc2V0dGxlcyxcclxuICAgICAgICAgICAgICAgICAqIGVucXVldWVzIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IGV2ZW50IGxvb3AgdHVybi5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgbGV0IHdoZW5GaW5pc2hlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFNldHRsZXMgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSBuZXdTdGF0ZSBUaGUgcmVzb2x2ZWQgc3RhdGUgZm9yIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7VHxhbnl9IHZhbHVlIFRoZSByZXNvbHZlZCB2YWx1ZSBmb3IgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXR0bGUgPSAobmV3U3RhdGUsIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBwcm9taXNlIGNhbiBvbmx5IGJlIHNldHRsZWQgb25jZS5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gMSAvKiBQZW5kaW5nICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZWRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZW5GaW5pc2hlZCA9IHF1ZXVlTWljcm9UYXNrO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZW5xdWV1ZSBhIGNhbGxiYWNrIHJ1bm5lciBpZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHNvIHRoYXQgaW5pdGlhbGx5IGZ1bGZpbGxlZCBQcm9taXNlcyBkb24ndCBoYXZlIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCBhbiBleHRyYSB0dXJuLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MgJiYgY2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVNaWNyb1Rhc2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IGNhbGxiYWNrcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBSZXNvbHZlcyB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIG5ld1N0YXRlIFRoZSByZXNvbHZlZCBzdGF0ZSBmb3IgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIHtUfGFueX0gdmFsdWUgVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmUgPSAobmV3U3RhdGUsIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVzb2x2ZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS50aGVuKHNldHRsZS5iaW5kKG51bGwsIDAgLyogRnVsZmlsbGVkICovKSwgc2V0dGxlLmJpbmQobnVsbCwgMiAvKiBSZWplY3RlZCAqLykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NoYWluZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGxlKG5ld1N0YXRlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGhlbiA9IChvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW5GaW5pc2hlZCBpbml0aWFsbHkgcXVldWVzIHVwIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIGFmdGVyIHRoZSBwcm9taXNlIGhhcyBzZXR0bGVkLiBPbmNlIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9taXNlIGhhcyBzZXR0bGVkLCB3aGVuRmluaXNoZWQgd2lsbCBzY2hlZHVsZSBjYWxsYmFja3MgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCB0dXJuIHRocm91Z2ggdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGxvb3AuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW5GaW5pc2hlZCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuc3RhdGUgPT09IDIgLyogUmVqZWN0ZWQgKi8gPyBvblJlamVjdGVkIDogb25GdWxmaWxsZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjYWxsYmFjayh0aGlzLnJlc29sdmVkVmFsdWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gMiAvKiBSZWplY3RlZCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh0aGlzLnJlc29sdmVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc29sdmVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dG9yKHJlc29sdmUuYmluZChudWxsLCAwIC8qIEZ1bGZpbGxlZCAqLyksIHJlc29sdmUuYmluZChudWxsLCAyIC8qIFJlamVjdGVkICovKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0bGUoMiAvKiBSZWplY3RlZCAqLywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN0YXRpYyBhbGwoaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXBsZXRlID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3B1bGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsKGluZGV4LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsrY29tcGxldGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmaW5pc2goKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3B1bGF0aW5nIHx8IGNvbXBsZXRlIDwgdG90YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NJdGVtKGluZGV4LCBpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsrdG90YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbiBpdGVtIFByb21pc2UgcmVqZWN0cywgdGhpcyBQcm9taXNlIGlzIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggdGhlIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRoZW4oZnVsZmlsbC5iaW5kKG51bGwsIGluZGV4KSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShpdGVtKS50aGVuKGZ1bGZpbGwuYmluZChudWxsLCBpbmRleCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJdGVtKGksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwb3B1bGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGF0aWMgcmFjZShpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIFByb21pc2UgaXRlbSByZWplY3RzLCB0aGlzIFByb21pc2UgaXMgaW1tZWRpYXRlbHkgcmVqZWN0ZWQgd2l0aCB0aGUgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvbWlzZSdzIHJlamVjdGlvbiBlcnJvci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4ocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGF0aWMgcmVqZWN0KHJlYXNvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QocmVhc29uKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN0YXRpYyByZXNvbHZlKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoKG9uUmVqZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX2FbU3ltYm9sLnNwZWNpZXNdID0gU2hpbVByb21pc2UsXHJcbiAgICAgICAgX2EpO1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFNoaW1Qcm9taXNlO1xyXG52YXIgX2E7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVByb21pc2UubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL1Byb21pc2UubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9Qcm9taXNlLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XHJcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgeyBnZXRWYWx1ZURlc2NyaXB0b3IgfSBmcm9tICcuL3N1cHBvcnQvdXRpbCc7XHJcbmV4cG9ydCBsZXQgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcclxuaWYgKCF0cnVlKSB7XHJcbiAgICAvKipcclxuICAgICAqIFRocm93cyBpZiB0aGUgdmFsdWUgaXMgbm90IGEgc3ltYm9sLCB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBTaGltXHJcbiAgICAgKiBAcGFyYW0gIHthbnl9ICAgIHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybiB7c3ltYm9sfSAgICAgICBSZXR1cm5zIHRoZSBzeW1ib2wgb3IgdGhyb3dzXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHZhbGlkYXRlU3ltYm9sID0gZnVuY3Rpb24gdmFsaWRhdGVTeW1ib2wodmFsdWUpIHtcclxuICAgICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGRlZmluZVByb3BlcnRpZXMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcclxuICAgIGNvbnN0IGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG4gICAgY29uc3QgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcclxuICAgIGNvbnN0IG9ialByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XHJcbiAgICBjb25zdCBnbG9iYWxTeW1ib2xzID0ge307XHJcbiAgICBjb25zdCBnZXRTeW1ib2xOYW1lID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjcmVhdGVkID0gY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGVzYykge1xyXG4gICAgICAgICAgICBsZXQgcG9zdGZpeCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBuYW1lO1xyXG4gICAgICAgICAgICB3aGlsZSAoY3JlYXRlZFtTdHJpbmcoZGVzYykgKyAocG9zdGZpeCB8fCAnJyldKSB7XHJcbiAgICAgICAgICAgICAgICArK3Bvc3RmaXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVzYyArPSBTdHJpbmcocG9zdGZpeCB8fCAnJyk7XHJcbiAgICAgICAgICAgIGNyZWF0ZWRbZGVzY10gPSB0cnVlO1xyXG4gICAgICAgICAgICBuYW1lID0gJ0BAJyArIGRlc2M7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkgZ3VhcmQgdW50aWwgdGhlIGR1cGxpY2F0ZSBleGVjdXRpb24gd2hlbiB0ZXN0aW5nIGNhbiBiZVxyXG4gICAgICAgICAgICAvLyBwaW5uZWQgZG93bi5cclxuICAgICAgICAgICAgaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9ialByb3RvdHlwZSwgbmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KG9ialByb3RvdHlwZSwgbmFtZSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIGdldFZhbHVlRGVzY3JpcHRvcih2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpO1xyXG4gICAgY29uc3QgSW50ZXJuYWxTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEludGVybmFsU3ltYm9sKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1R5cGVFcnJvcjogU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTeW1ib2woZGVzY3JpcHRpb24pO1xyXG4gICAgfTtcclxuICAgIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFN5bWJvbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUeXBlRXJyb3I6IFN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzeW0gPSBPYmplY3QuY3JlYXRlKEludGVybmFsU3ltYm9sLnByb3RvdHlwZSk7XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcoZGVzY3JpcHRpb24pO1xyXG4gICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0aWVzKHN5bSwge1xyXG4gICAgICAgICAgICBfX2Rlc2NyaXB0aW9uX186IGdldFZhbHVlRGVzY3JpcHRvcihkZXNjcmlwdGlvbiksXHJcbiAgICAgICAgICAgIF9fbmFtZV9fOiBnZXRWYWx1ZURlc2NyaXB0b3IoZ2V0U3ltYm9sTmFtZShkZXNjcmlwdGlvbikpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyogRGVjb3JhdGUgdGhlIFN5bWJvbCBmdW5jdGlvbiB3aXRoIHRoZSBhcHByb3ByaWF0ZSBwcm9wZXJ0aWVzICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsICdmb3InLCBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIGlmIChnbG9iYWxTeW1ib2xzW2tleV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFN5bWJvbHNba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChnbG9iYWxTeW1ib2xzW2tleV0gPSBTeW1ib2woU3RyaW5nKGtleSkpKTtcclxuICAgIH0pKTtcclxuICAgIGRlZmluZVByb3BlcnRpZXMoU3ltYm9sLCB7XHJcbiAgICAgICAga2V5Rm9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKHN5bSkge1xyXG4gICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICB2YWxpZGF0ZVN5bWJvbChzeW0pO1xyXG4gICAgICAgICAgICBmb3IgKGtleSBpbiBnbG9iYWxTeW1ib2xzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU3ltYm9sc1trZXldID09PSBzeW0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgaGFzSW5zdGFuY2U6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdoYXNJbnN0YW5jZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIGlzQ29uY2F0U3ByZWFkYWJsZTogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ2lzQ29uY2F0U3ByZWFkYWJsZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIGl0ZXJhdG9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaXRlcmF0b3InKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBtYXRjaDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ21hdGNoJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgb2JzZXJ2YWJsZTogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ29ic2VydmFibGUnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICByZXBsYWNlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigncmVwbGFjZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHNlYXJjaDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NlYXJjaCcpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHNwZWNpZXM6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdzcGVjaWVzJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgc3BsaXQ6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdzcGxpdCcpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHRvUHJpbWl0aXZlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigndG9QcmltaXRpdmUnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICB0b1N0cmluZ1RhZzogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3RvU3RyaW5nVGFnJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgdW5zY29wYWJsZXM6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCd1bnNjb3BhYmxlcycpLCBmYWxzZSwgZmFsc2UpXHJcbiAgICB9KTtcclxuICAgIC8qIERlY29yYXRlIHRoZSBJbnRlcm5hbFN5bWJvbCBvYmplY3QgKi9cclxuICAgIGRlZmluZVByb3BlcnRpZXMoSW50ZXJuYWxTeW1ib2wucHJvdG90eXBlLCB7XHJcbiAgICAgICAgY29uc3RydWN0b3I6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wpLFxyXG4gICAgICAgIHRvU3RyaW5nOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX25hbWVfXztcclxuICAgICAgICB9LCBmYWxzZSwgZmFsc2UpXHJcbiAgICB9KTtcclxuICAgIC8qIERlY29yYXRlIHRoZSBTeW1ib2wucHJvdG90eXBlICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0aWVzKFN5bWJvbC5wcm90b3R5cGUsIHtcclxuICAgICAgICB0b1N0cmluZzogZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdTeW1ib2wgKCcgKyB2YWxpZGF0ZVN5bWJvbCh0aGlzKS5fX2Rlc2NyaXB0aW9uX18gKyAnKSc7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdmFsdWVPZjogZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlU3ltYm9sKHRoaXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1ByaW1pdGl2ZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7XHJcbiAgICB9KSk7XHJcbiAgICBkZWZpbmVQcm9wZXJ0eShTeW1ib2wucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIGdldFZhbHVlRGVzY3JpcHRvcignU3ltYm9sJywgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XHJcbiAgICBkZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1ByaW1pdGl2ZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSwgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XHJcbiAgICBkZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSwgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XHJcbn1cclxuLyoqXHJcbiAqIEEgY3VzdG9tIGd1YXJkIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgaXMgYSBzeW1ib2wgb3Igbm90XHJcbiAqIEBwYXJhbSAge2FueX0gICAgICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyBhIHN5bWJvbCBvciBub3RcclxuICogQHJldHVybiB7aXMgc3ltYm9sfSAgICAgICBSZXR1cm5zIHRydWUgaWYgYSBzeW1ib2wgb3Igbm90IChhbmQgbmFycm93cyB0aGUgdHlwZSBndWFyZClcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fCB2YWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykpIHx8IGZhbHNlO1xyXG59XHJcbi8qKlxyXG4gKiBGaWxsIGFueSBtaXNzaW5nIHdlbGwga25vd24gc3ltYm9scyBpZiB0aGUgbmF0aXZlIFN5bWJvbCBpcyBtaXNzaW5nIHRoZW1cclxuICovXHJcbltcclxuICAgICdoYXNJbnN0YW5jZScsXHJcbiAgICAnaXNDb25jYXRTcHJlYWRhYmxlJyxcclxuICAgICdpdGVyYXRvcicsXHJcbiAgICAnc3BlY2llcycsXHJcbiAgICAncmVwbGFjZScsXHJcbiAgICAnc2VhcmNoJyxcclxuICAgICdzcGxpdCcsXHJcbiAgICAnbWF0Y2gnLFxyXG4gICAgJ3RvUHJpbWl0aXZlJyxcclxuICAgICd0b1N0cmluZ1RhZycsXHJcbiAgICAndW5zY29wYWJsZXMnLFxyXG4gICAgJ29ic2VydmFibGUnXHJcbl0uZm9yRWFjaCgod2VsbEtub3duKSA9PiB7XHJcbiAgICBpZiAoIVN5bWJvbFt3ZWxsS25vd25dKSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN5bWJvbCwgd2VsbEtub3duLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcih3ZWxsS25vd24pLCBmYWxzZSwgZmFsc2UpKTtcclxuICAgIH1cclxufSk7XHJcbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3ltYm9sLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9TeW1ib2wubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9TeW1ib2wubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XHJcbmltcG9ydCB7IGlzQXJyYXlMaWtlIH0gZnJvbSAnLi9pdGVyYXRvcic7XHJcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XHJcbmltcG9ydCAnLi9TeW1ib2wnO1xyXG5leHBvcnQgbGV0IFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcclxuaWYgKCF0cnVlKSB7XHJcbiAgICBjb25zdCBERUxFVEVEID0ge307XHJcbiAgICBjb25zdCBnZXRVSUQgPSBmdW5jdGlvbiBnZXRVSUQoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZ2VuZXJhdGVOYW1lID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgc3RhcnRJZCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAlIDEwMDAwMDAwMCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdlbmVyYXRlTmFtZSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdfX3dtJyArIGdldFVJRCgpICsgKHN0YXJ0SWQrKyArICdfXycpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpO1xyXG4gICAgV2Vha01hcCA9IGNsYXNzIFdlYWtNYXAge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdXZWFrTWFwJztcclxuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IGdlbmVyYXRlTmFtZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcm96ZW5FbnRyaWVzID0gW107XHJcbiAgICAgICAgICAgIGlmIChpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZXJhYmxlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChpdGVtWzBdLCBpdGVtWzFdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZnJvemVuRW50cmllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Zyb3plbkVudHJpZXNbaV0ua2V5ID09PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZShrZXkpIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURUQpIHtcclxuICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gREVMRVRFRDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcy5zcGxpY2UoZnJvemVuSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBnZXQoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBrZXlbdGhpcy5fbmFtZV07XHJcbiAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zyb3plbkVudHJpZXNbZnJvemVuSW5kZXhdLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhhcyhrZXkpIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoQm9vbGVhbihlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXQoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWtleSB8fCAodHlwZW9mIGtleSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGtleSAhPT0gJ2Z1bmN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdmFsdWUgdXNlZCBhcyB3ZWFrIG1hcCBrZXknKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZW50cnkgPSBrZXlbdGhpcy5fbmFtZV07XHJcbiAgICAgICAgICAgIGlmICghZW50cnkgfHwgZW50cnkua2V5ICE9PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgIGVudHJ5ID0gT2JqZWN0LmNyZWF0ZShudWxsLCB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiB7IHZhbHVlOiBrZXkgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuKGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcm96ZW5FbnRyaWVzLnB1c2goZW50cnkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtleSwgdGhpcy5fbmFtZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZW50cnlcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFdlYWtNYXA7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVdlYWtNYXAubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL1dlYWtNYXAubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9XZWFrTWFwLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgeyBpc0FycmF5TGlrZSwgaXNJdGVyYWJsZSB9IGZyb20gJy4vaXRlcmF0b3InO1xyXG5pbXBvcnQgeyBNQVhfU0FGRV9JTlRFR0VSIH0gZnJvbSAnLi9udW1iZXInO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xyXG5pbXBvcnQgeyB3cmFwTmF0aXZlIH0gZnJvbSAnLi9zdXBwb3J0L3V0aWwnO1xyXG5leHBvcnQgbGV0IGZyb207XHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGFycmF5IGZyb20gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcmd1bWVudHMgQW55IG51bWJlciBvZiBhcmd1bWVudHMgZm9yIHRoZSBhcnJheVxyXG4gKiBAcmV0dXJuIEFuIGFycmF5IGZyb20gdGhlIGdpdmVuIGFyZ3VtZW50c1xyXG4gKi9cclxuZXhwb3J0IGxldCBvZjtcclxuLyogRVM2IEFycmF5IGluc3RhbmNlIG1ldGhvZHMgKi9cclxuLyoqXHJcbiAqIENvcGllcyBkYXRhIGludGVybmFsbHkgd2l0aGluIGFuIGFycmF5IG9yIGFycmF5LWxpa2Ugb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgYXJyYXktbGlrZSBvYmplY3RcclxuICogQHBhcmFtIG9mZnNldCBUaGUgaW5kZXggdG8gc3RhcnQgY29weWluZyB2YWx1ZXMgdG87IGlmIG5lZ2F0aXZlLCBpdCBjb3VudHMgYmFja3dhcmRzIGZyb20gbGVuZ3RoXHJcbiAqIEBwYXJhbSBzdGFydCBUaGUgZmlyc3QgKGluY2x1c2l2ZSkgaW5kZXggdG8gY29weTsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcclxuICogQHBhcmFtIGVuZCBUaGUgbGFzdCAoZXhjbHVzaXZlKSBpbmRleCB0byBjb3B5OyBpZiBuZWdhdGl2ZSwgaXQgY291bnRzIGJhY2t3YXJkcyBmcm9tIGxlbmd0aFxyXG4gKiBAcmV0dXJuIFRoZSB0YXJnZXRcclxuICovXHJcbmV4cG9ydCBsZXQgY29weVdpdGhpbjtcclxuLyoqXHJcbiAqIEZpbGxzIGVsZW1lbnRzIG9mIGFuIGFycmF5LWxpa2Ugb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHRvIGZpbGxcclxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGVhY2ggZWxlbWVudCBvZiB0aGUgdGFyZ2V0IHdpdGhcclxuICogQHBhcmFtIHN0YXJ0IFRoZSBmaXJzdCBpbmRleCB0byBmaWxsXHJcbiAqIEBwYXJhbSBlbmQgVGhlIChleGNsdXNpdmUpIGluZGV4IGF0IHdoaWNoIHRvIHN0b3AgZmlsbGluZ1xyXG4gKiBAcmV0dXJuIFRoZSBmaWxsZWQgdGFyZ2V0XHJcbiAqL1xyXG5leHBvcnQgbGV0IGZpbGw7XHJcbi8qKlxyXG4gKiBGaW5kcyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgaW5zdGFuY2UgbWF0Y2hpbmcgdGhlIGNhbGxiYWNrIG9yIHVuZGVmaW5lZCBpZiBvbmUgaXMgbm90IGZvdW5kLlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IEFuIGFycmF5LWxpa2Ugb2JqZWN0XHJcbiAqIEBwYXJhbSBjYWxsYmFjayBBIGZ1bmN0aW9uIHJldHVybmluZyBpZiB0aGUgY3VycmVudCB2YWx1ZSBtYXRjaGVzIGEgY3JpdGVyaWFcclxuICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgZmluZCBmdW5jdGlvblxyXG4gKiBAcmV0dXJuIFRoZSBmaXJzdCBlbGVtZW50IG1hdGNoaW5nIHRoZSBjYWxsYmFjaywgb3IgdW5kZWZpbmVkIGlmIG9uZSBkb2VzIG5vdCBleGlzdFxyXG4gKi9cclxuZXhwb3J0IGxldCBmaW5kO1xyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgc2VhcmNoIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBpbmRleCB3aG9zZSB2YWx1ZSBzYXRpc2ZpZXMgdGhlIHBhc3NlZCBjYWxsYmFjayxcclxuICogb3IgLTEgaWYgbm8gdmFsdWVzIHNhdGlzZnkgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgQW4gYXJyYXktbGlrZSBvYmplY3RcclxuICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgaWYgdGhlIGN1cnJlbnQgdmFsdWUgc2F0aXNmaWVzIGl0cyBjcml0ZXJpYVxyXG4gKiBAcGFyYW0gdGhpc0FyZyBUaGUgZXhlY3V0aW9uIGNvbnRleHQgZm9yIHRoZSBmaW5kIGZ1bmN0aW9uXHJcbiAqIEByZXR1cm4gVGhlIGZpcnN0IGluZGV4IHdob3NlIHZhbHVlIHNhdGlzZmllcyB0aGUgcGFzc2VkIGNhbGxiYWNrLCBvciAtMSBpZiBubyB2YWx1ZXMgc2F0aXNmeSBpdFxyXG4gKi9cclxuZXhwb3J0IGxldCBmaW5kSW5kZXg7XHJcbi8qIEVTNyBBcnJheSBpbnN0YW5jZSBtZXRob2RzICovXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gYXJyYXkgaW5jbHVkZXMgYSBnaXZlbiB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJnZXQgYXJyYXktbGlrZSBvYmplY3RcclxuICogQHBhcmFtIHNlYXJjaEVsZW1lbnQgdGhlIGl0ZW0gdG8gc2VhcmNoIGZvclxyXG4gKiBAcGFyYW0gZnJvbUluZGV4IHRoZSBzdGFydGluZyBpbmRleCB0byBzZWFyY2ggZnJvbVxyXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgYXJyYXkgaW5jbHVkZXMgdGhlIGVsZW1lbnQsIG90aGVyd2lzZSBgZmFsc2VgXHJcbiAqL1xyXG5leHBvcnQgbGV0IGluY2x1ZGVzO1xyXG5pZiAodHJ1ZSAmJiB0cnVlKSB7XHJcbiAgICBmcm9tID0gZ2xvYmFsLkFycmF5LmZyb207XHJcbiAgICBvZiA9IGdsb2JhbC5BcnJheS5vZjtcclxuICAgIGNvcHlXaXRoaW4gPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuY29weVdpdGhpbik7XHJcbiAgICBmaWxsID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmZpbGwpO1xyXG4gICAgZmluZCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maW5kKTtcclxuICAgIGZpbmRJbmRleCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgpO1xyXG59XHJcbmVsc2Uge1xyXG4gICAgLy8gSXQgaXMgb25seSBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkvaU9TIHRoYXQgaGF2ZSBhIGJhZCBmaWxsIGltcGxlbWVudGF0aW9uIGFuZCBzbyBhcmVuJ3QgaW4gdGhlIHdpbGRcclxuICAgIC8vIFRvIG1ha2UgdGhpbmdzIGVhc2llciwgaWYgdGhlcmUgaXMgYSBiYWQgZmlsbCBpbXBsZW1lbnRhdGlvbiwgdGhlIHdob2xlIHNldCBvZiBmdW5jdGlvbnMgd2lsbCBiZSBmaWxsZWRcclxuICAgIC8qKlxyXG4gICAgICogRW5zdXJlcyBhIG5vbi1uZWdhdGl2ZSwgbm9uLWluZmluaXRlLCBzYWZlIGludGVnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIHRvIHZhbGlkYXRlXHJcbiAgICAgKiBAcmV0dXJuIEEgcHJvcGVyIGxlbmd0aFxyXG4gICAgICovXHJcbiAgICBjb25zdCB0b0xlbmd0aCA9IGZ1bmN0aW9uIHRvTGVuZ3RoKGxlbmd0aCkge1xyXG4gICAgICAgIGlmIChpc05hTihsZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKTtcclxuICAgICAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xyXG4gICAgICAgICAgICBsZW5ndGggPSBNYXRoLmZsb29yKGxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSBhIG5vbi1uZWdhdGl2ZSwgcmVhbCwgc2FmZSBpbnRlZ2VyXHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KGxlbmd0aCwgMCksIE1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRnJvbSBFUzYgNy4xLjQgVG9JbnRlZ2VyKClcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBjb252ZXJ0XHJcbiAgICAgKiBAcmV0dXJuIEFuIGludGVnZXJcclxuICAgICAqL1xyXG4gICAgY29uc3QgdG9JbnRlZ2VyID0gZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XHJcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMCB8fCAhaXNGaW5pdGUodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICh2YWx1ZSA+IDAgPyAxIDogLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyh2YWx1ZSkpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplcyBhbiBvZmZzZXQgYWdhaW5zdCBhIGdpdmVuIGxlbmd0aCwgd3JhcHBpbmcgaXQgaWYgbmVnYXRpdmUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBvcmlnaW5hbCBvZmZzZXRcclxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIHRvdGFsIGxlbmd0aCB0byBub3JtYWxpemUgYWdhaW5zdFxyXG4gICAgICogQHJldHVybiBJZiBuZWdhdGl2ZSwgcHJvdmlkZSBhIGRpc3RhbmNlIGZyb20gdGhlIGVuZCAobGVuZ3RoKTsgb3RoZXJ3aXNlIHByb3ZpZGUgYSBkaXN0YW5jZSBmcm9tIDBcclxuICAgICAqL1xyXG4gICAgY29uc3Qgbm9ybWFsaXplT2Zmc2V0ID0gZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0KHZhbHVlLCBsZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPCAwID8gTWF0aC5tYXgobGVuZ3RoICsgdmFsdWUsIDApIDogTWF0aC5taW4odmFsdWUsIGxlbmd0aCk7XHJcbiAgICB9O1xyXG4gICAgZnJvbSA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLCBtYXBGdW5jdGlvbiwgdGhpc0FyZykge1xyXG4gICAgICAgIGlmIChhcnJheUxpa2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmcm9tOiByZXF1aXJlcyBhbiBhcnJheS1saWtlIG9iamVjdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWFwRnVuY3Rpb24gJiYgdGhpc0FyZykge1xyXG4gICAgICAgICAgICBtYXBGdW5jdGlvbiA9IG1hcEZ1bmN0aW9uLmJpbmQodGhpc0FyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXHJcbiAgICAgICAgY29uc3QgQ29uc3RydWN0b3IgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKGFycmF5TGlrZS5sZW5ndGgpO1xyXG4gICAgICAgIC8vIFN1cHBvcnQgZXh0ZW5zaW9uXHJcbiAgICAgICAgY29uc3QgYXJyYXkgPSB0eXBlb2YgQ29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicgPyBPYmplY3QobmV3IENvbnN0cnVjdG9yKGxlbmd0aCkpIDogbmV3IEFycmF5KGxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFpc0FycmF5TGlrZShhcnJheUxpa2UpICYmICFpc0l0ZXJhYmxlKGFycmF5TGlrZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IGFuZCB0aGUgbm9ybWFsaXplZCBsZW5ndGggaXMgMCwganVzdCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuIHRoaXMgcHJldmVudHMgYSBwcm9ibGVtXHJcbiAgICAgICAgLy8gd2l0aCB0aGUgaXRlcmF0aW9uIG9uIElFIHdoZW4gdXNpbmcgYSBOYU4gYXJyYXkgbGVuZ3RoLlxyXG4gICAgICAgIGlmIChpc0FycmF5TGlrZShhcnJheUxpa2UpKSB7XHJcbiAgICAgICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5TGlrZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBtYXBGdW5jdGlvbiA/IG1hcEZ1bmN0aW9uKGFycmF5TGlrZVtpXSwgaSkgOiBhcnJheUxpa2VbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhcnJheUxpa2UpIHtcclxuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gbWFwRnVuY3Rpb24gPyBtYXBGdW5jdGlvbih2YWx1ZSwgaSkgOiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXJyYXlMaWtlLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGFycmF5Lmxlbmd0aCA9IGxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgfTtcclxuICAgIG9mID0gZnVuY3Rpb24gb2YoLi4uaXRlbXMpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaXRlbXMpO1xyXG4gICAgfTtcclxuICAgIGNvcHlXaXRoaW4gPSBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgb2Zmc2V0LCBzdGFydCwgZW5kKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvcHlXaXRoaW46IHRhcmdldCBtdXN0IGJlIGFuIGFycmF5LWxpa2Ugb2JqZWN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xyXG4gICAgICAgIG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldCh0b0ludGVnZXIob2Zmc2V0KSwgbGVuZ3RoKTtcclxuICAgICAgICBzdGFydCA9IG5vcm1hbGl6ZU9mZnNldCh0b0ludGVnZXIoc3RhcnQpLCBsZW5ndGgpO1xyXG4gICAgICAgIGVuZCA9IG5vcm1hbGl6ZU9mZnNldChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpLCBsZW5ndGgpO1xyXG4gICAgICAgIGxldCBjb3VudCA9IE1hdGgubWluKGVuZCAtIHN0YXJ0LCBsZW5ndGggLSBvZmZzZXQpO1xyXG4gICAgICAgIGxldCBkaXJlY3Rpb24gPSAxO1xyXG4gICAgICAgIGlmIChvZmZzZXQgPiBzdGFydCAmJiBvZmZzZXQgPCBzdGFydCArIGNvdW50KSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xO1xyXG4gICAgICAgICAgICBzdGFydCArPSBjb3VudCAtIDE7XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBjb3VudCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChjb3VudCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0IGluIHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W29mZnNldF0gPSB0YXJnZXRbc3RhcnRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRhcmdldFtvZmZzZXRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBkaXJlY3Rpb247XHJcbiAgICAgICAgICAgIHN0YXJ0ICs9IGRpcmVjdGlvbjtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH07XHJcbiAgICBmaWxsID0gZnVuY3Rpb24gZmlsbCh0YXJnZXQsIHZhbHVlLCBzdGFydCwgZW5kKSB7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XHJcbiAgICAgICAgbGV0IGkgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKHN0YXJ0KSwgbGVuZ3RoKTtcclxuICAgICAgICBlbmQgPSBub3JtYWxpemVPZmZzZXQoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXIoZW5kKSwgbGVuZ3RoKTtcclxuICAgICAgICB3aGlsZSAoaSA8IGVuZCkge1xyXG4gICAgICAgICAgICB0YXJnZXRbaSsrXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfTtcclxuICAgIGZpbmQgPSBmdW5jdGlvbiBmaW5kKHRhcmdldCwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKTtcclxuICAgICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gdGFyZ2V0W2luZGV4XSA6IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBmaW5kSW5kZXggPSBmdW5jdGlvbiBmaW5kSW5kZXgodGFyZ2V0LCBjYWxsYmFjaywgdGhpc0FyZykge1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZmluZDogc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpc0FyZykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpc0FyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHRhcmdldFtpXSwgaSwgdGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfTtcclxufVxyXG5pZiAodHJ1ZSkge1xyXG4gICAgaW5jbHVkZXMgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpO1xyXG59XHJcbmVsc2Uge1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbnN1cmVzIGEgbm9uLW5lZ2F0aXZlLCBub24taW5maW5pdGUsIHNhZmUgaW50ZWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgdG8gdmFsaWRhdGVcclxuICAgICAqIEByZXR1cm4gQSBwcm9wZXIgbGVuZ3RoXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHRvTGVuZ3RoID0gZnVuY3Rpb24gdG9MZW5ndGgobGVuZ3RoKSB7XHJcbiAgICAgICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7XHJcbiAgICAgICAgaWYgKGlzTmFOKGxlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIGxlbmd0aCA9IE1hdGguZmxvb3IobGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIGEgbm9uLW5lZ2F0aXZlLCByZWFsLCBzYWZlIGludGVnZXJcclxuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGVuZ3RoLCAwKSwgTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgICB9O1xyXG4gICAgaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh0YXJnZXQsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCA9IDApIHtcclxuICAgICAgICBsZXQgbGVuID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGZyb21JbmRleDsgaSA8IGxlbjsgKytpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0W2ldO1xyXG4gICAgICAgICAgICBpZiAoc2VhcmNoRWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnQgfHxcclxuICAgICAgICAgICAgICAgIChzZWFyY2hFbGVtZW50ICE9PSBzZWFyY2hFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBjdXJyZW50RWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH07XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJyYXkubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2FycmF5Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vYXJyYXkubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiY29uc3QgZ2xvYmFsT2JqZWN0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gZ2xvYmFsIHNwZWMgZGVmaW5lcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdCBjYWxsZWQgJ2dsb2JhbCdcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG4gICAgICAgIC8vIGBnbG9iYWxgIGlzIGFsc28gZGVmaW5lZCBpbiBOb2RlSlNcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gd2luZG93IGlzIGRlZmluZWQgaW4gYnJvd3NlcnNcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIHNlbGYgaXMgZGVmaW5lZCBpbiBXZWJXb3JrZXJzXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbn0pKCk7XG5leHBvcnQgZGVmYXVsdCBnbG9iYWxPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iYWwubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2dsb2JhbC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2dsb2JhbC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgJy4vU3ltYm9sJztcbmltcG9ydCB7IEhJR0hfU1VSUk9HQVRFX01BWCwgSElHSF9TVVJST0dBVEVfTUlOIH0gZnJvbSAnLi9zdHJpbmcnO1xuY29uc3Qgc3RhdGljRG9uZSA9IHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuLyoqXG4gKiBBIGNsYXNzIHRoYXQgX3NoaW1zXyBhbiBpdGVyYXRvciBpbnRlcmZhY2Ugb24gYXJyYXkgbGlrZSBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgU2hpbUl0ZXJhdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihsaXN0KSB7XG4gICAgICAgIHRoaXMuX25leHRJbmRleCA9IC0xO1xuICAgICAgICBpZiAoaXNJdGVyYWJsZShsaXN0KSkge1xuICAgICAgICAgICAgdGhpcy5fbmF0aXZlSXRlcmF0b3IgPSBsaXN0W1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3QgPSBsaXN0O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbmV4dCBpdGVyYXRpb24gcmVzdWx0IGZvciB0aGUgSXRlcmF0b3JcbiAgICAgKi9cbiAgICBuZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5fbmF0aXZlSXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9uYXRpdmVJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9saXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGljRG9uZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKyt0aGlzLl9uZXh0SW5kZXggPCB0aGlzLl9saXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fbGlzdFt0aGlzLl9uZXh0SW5kZXhdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0aWNEb25lO1xuICAgIH1cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuLyoqXG4gKiBBIHR5cGUgZ3VhcmQgZm9yIGNoZWNraW5nIGlmIHNvbWV0aGluZyBoYXMgYW4gSXRlcmFibGUgaW50ZXJmYWNlXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0eXBlIGd1YXJkIGFnYWluc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSXRlcmFibGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG59XG4vKipcbiAqIEEgdHlwZSBndWFyZCBmb3IgY2hlY2tpbmcgaWYgc29tZXRoaW5nIGlzIEFycmF5TGlrZVxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHlwZSBndWFyZCBhZ2FpbnN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJztcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaXRlcmF0b3IgZm9yIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBpdGVyYWJsZSBUaGUgaXRlcmFibGUgb2JqZWN0IHRvIHJldHVybiB0aGUgaXRlcmF0b3IgZm9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXQoaXRlcmFibGUpIHtcbiAgICBpZiAoaXNJdGVyYWJsZShpdGVyYWJsZSkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2hpbUl0ZXJhdG9yKGl0ZXJhYmxlKTtcbiAgICB9XG59XG4vKipcbiAqIFNoaW1zIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGBmb3IgLi4uIG9mYCBibG9ja3NcbiAqXG4gKiBAcGFyYW0gaXRlcmFibGUgVGhlIG9iamVjdCB0aGUgcHJvdmlkZXMgYW4gaW50ZXJhdG9yIGludGVyZmFjZVxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBpdGVtIG9mIHRoZSBpdGVyYWJsZVxuICogQHBhcmFtIHRoaXNBcmcgT3B0aW9uYWwgc2NvcGUgdG8gcGFzcyB0aGUgY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvck9mKGl0ZXJhYmxlLCBjYWxsYmFjaywgdGhpc0FyZykge1xuICAgIGxldCBicm9rZW4gPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBkb0JyZWFrKCkge1xuICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgIH1cbiAgICAvKiBXZSBuZWVkIHRvIGhhbmRsZSBpdGVyYXRpb24gb2YgZG91YmxlIGJ5dGUgc3RyaW5ncyBwcm9wZXJseSAqL1xuICAgIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkgJiYgdHlwZW9mIGl0ZXJhYmxlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBsID0gaXRlcmFibGUubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbGV0IGNoYXIgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgIGlmIChpICsgMSA8IGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgICAgIGlmIChjb2RlID49IEhJR0hfU1VSUk9HQVRFX01JTiAmJiBjb2RlIDw9IEhJR0hfU1VSUk9HQVRFX01BWCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyICs9IGl0ZXJhYmxlWysraV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCBjaGFyLCBpdGVyYWJsZSwgZG9CcmVhayk7XG4gICAgICAgICAgICBpZiAoYnJva2VuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGdldChpdGVyYWJsZSk7XG4gICAgICAgIGlmIChpdGVyYXRvcikge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHJlc3VsdC52YWx1ZSwgaXRlcmFibGUsIGRvQnJlYWspO1xuICAgICAgICAgICAgICAgIGlmIChicm9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVyYXRvci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vaXRlcmF0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9pdGVyYXRvci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbi8qKlxuICogVGhlIHNtYWxsZXN0IGludGVydmFsIGJldHdlZW4gdHdvIHJlcHJlc2VudGFibGUgbnVtYmVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVQU0lMT04gPSAxO1xuLyoqXG4gKiBUaGUgbWF4aW11bSBzYWZlIGludGVnZXIgaW4gSmF2YVNjcmlwdFxuICovXG5leHBvcnQgY29uc3QgTUFYX1NBRkVfSU5URUdFUiA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4vKipcbiAqIFRoZSBtaW5pbXVtIHNhZmUgaW50ZWdlciBpbiBKYXZhU2NyaXB0XG4gKi9cbmV4cG9ydCBjb25zdCBNSU5fU0FGRV9JTlRFR0VSID0gLU1BWF9TQUZFX0lOVEVHRVI7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIE5hTiB3aXRob3V0IGNvZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBOYU4sIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBnbG9iYWwuaXNOYU4odmFsdWUpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhIGZpbml0ZSBudW1iZXIgd2l0aG91dCBjb2Vyc2lvbi5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgZmluaXRlLCBmYWxzZSBpZiBpdCBpcyBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgZ2xvYmFsLmlzRmluaXRlKHZhbHVlKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgYW4gaW50ZWdlciB0aGF0IGlzICdzYWZlLCcgbWVhbmluZzpcbiAqICAgMS4gaXQgY2FuIGJlIGV4cHJlc3NlZCBhcyBhbiBJRUVFLTc1NCBkb3VibGUgcHJlY2lzaW9uIG51bWJlclxuICogICAyLiBpdCBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgdG8gYSBtYXRoZW1hdGljYWwgaW50ZWdlciwgbWVhbmluZyBpdHNcbiAqICAgICAgSUVFRS03NTQgcmVwcmVzZW50YXRpb24gY2Fubm90IGJlIHRoZSByZXN1bHQgb2Ygcm91bmRpbmcgYW55IG90aGVyXG4gKiAgICAgIGludGVnZXIgdG8gZml0IHRoZSBJRUVFLTc1NCByZXByZXNlbnRhdGlvblxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLCBmYWxzZSBpZiBpdCBpcyBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIodmFsdWUpIHtcbiAgICByZXR1cm4gaXNJbnRlZ2VyKHZhbHVlKSAmJiBNYXRoLmFicyh2YWx1ZSkgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW51bWJlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vbnVtYmVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vbnVtYmVyLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xyXG5pbXBvcnQgeyBpc1N5bWJvbCB9IGZyb20gJy4vU3ltYm9sJztcclxuZXhwb3J0IGxldCBhc3NpZ247XHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdC5cclxuICogQW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgaXMgb25lIHRoYXQgaXMgZGVmaW5lZCBkaXJlY3RseSBvbiB0aGUgb2JqZWN0IGFuZCBpcyBub3RcclxuICogaW5oZXJpdGVkIGZyb20gdGhlIG9iamVjdCdzIHByb3RvdHlwZS5cclxuICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0gcCBOYW1lIG9mIHRoZSBwcm9wZXJ0eS5cclxuICovXHJcbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xyXG4vKipcclxuICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIG93biBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdC4gVGhlIG93biBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBhcmUgdGhvc2UgdGhhdCBhcmUgZGVmaW5lZCBkaXJlY3RseVxyXG4gKiBvbiB0aGF0IG9iamVjdCwgYW5kIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGhlIG9iamVjdCdzIHByb3RvdHlwZS4gVGhlIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGluY2x1ZGUgYm90aCBmaWVsZHMgKG9iamVjdHMpIGFuZCBmdW5jdGlvbnMuXHJcbiAqIEBwYXJhbSBvIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBvd24gcHJvcGVydGllcy5cclxuICovXHJcbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlOYW1lcztcclxuLyoqXHJcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHN5bWJvbCBwcm9wZXJ0aWVzIGZvdW5kIGRpcmVjdGx5IG9uIG9iamVjdCBvLlxyXG4gKiBAcGFyYW0gbyBPYmplY3QgdG8gcmV0cmlldmUgdGhlIHN5bWJvbHMgZnJvbS5cclxuICovXHJcbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqIEBwYXJhbSB2YWx1ZTEgVGhlIGZpcnN0IHZhbHVlLlxyXG4gKiBAcGFyYW0gdmFsdWUyIFRoZSBzZWNvbmQgdmFsdWUuXHJcbiAqL1xyXG5leHBvcnQgbGV0IGlzO1xyXG4vKipcclxuICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBvZiBhbiBvYmplY3QuXHJcbiAqIEBwYXJhbSBvIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLiBUaGlzIGNhbiBiZSBhbiBvYmplY3QgdGhhdCB5b3UgY3JlYXRlZCBvciBhbiBleGlzdGluZyBEb2N1bWVudCBPYmplY3QgTW9kZWwgKERPTSkgb2JqZWN0LlxyXG4gKi9cclxuZXhwb3J0IGxldCBrZXlzO1xyXG4vKiBFUzcgT2JqZWN0IHN0YXRpYyBtZXRob2RzICovXHJcbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcclxuZXhwb3J0IGxldCBlbnRyaWVzO1xyXG5leHBvcnQgbGV0IHZhbHVlcztcclxuaWYgKHRydWUpIHtcclxuICAgIGNvbnN0IGdsb2JhbE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XHJcbiAgICBhc3NpZ24gPSBnbG9iYWxPYmplY3QuYXNzaWduO1xyXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcclxuICAgIGdldE93blByb3BlcnR5TmFtZXMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcclxuICAgIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XHJcbiAgICBpcyA9IGdsb2JhbE9iamVjdC5pcztcclxuICAgIGtleXMgPSBnbG9iYWxPYmplY3Qua2V5cztcclxufVxyXG5lbHNlIHtcclxuICAgIGtleXMgPSBmdW5jdGlvbiBzeW1ib2xBd2FyZUtleXMobykge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvKS5maWx0ZXIoKGtleSkgPT4gIUJvb2xlYW4oa2V5Lm1hdGNoKC9eQEAuKy8pKSk7XHJcbiAgICB9O1xyXG4gICAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgLi4uc291cmNlcykge1xyXG4gICAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBUeXBlRXJyb3IgaWYgdW5kZWZpbmVkIG9yIG51bGxcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRvID0gT2JqZWN0KHRhcmdldCk7XHJcbiAgICAgICAgc291cmNlcy5mb3JFYWNoKChuZXh0U291cmNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuZXh0U291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTa2lwIG92ZXIgaWYgdW5kZWZpbmVkIG9yIG51bGxcclxuICAgICAgICAgICAgICAgIGtleXMobmV4dFNvdXJjZSkuZm9yRWFjaCgobmV4dEtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgfTtcclxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBwcm9wKSB7XHJcbiAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG8pIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobykuZmlsdGVyKChrZXkpID0+ICFCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpO1xyXG4gICAgfTtcclxuICAgIGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKVxyXG4gICAgICAgICAgICAubWFwKChrZXkpID0+IFN5bWJvbC5mb3Ioa2V5LnN1YnN0cmluZygyKSkpO1xyXG4gICAgfTtcclxuICAgIGlzID0gZnVuY3Rpb24gaXModmFsdWUxLCB2YWx1ZTIpIHtcclxuICAgICAgICBpZiAodmFsdWUxID09PSB2YWx1ZTIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlMSAhPT0gMCB8fCAxIC8gdmFsdWUxID09PSAxIC8gdmFsdWUyOyAvLyAtMFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWUxICE9PSB2YWx1ZTEgJiYgdmFsdWUyICE9PSB2YWx1ZTI7IC8vIE5hTlxyXG4gICAgfTtcclxufVxyXG5pZiAodHJ1ZSkge1xyXG4gICAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gZ2xvYmFsLk9iamVjdDtcclxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcclxuICAgIGVudHJpZXMgPSBnbG9iYWxPYmplY3QuZW50cmllcztcclxuICAgIHZhbHVlcyA9IGdsb2JhbE9iamVjdC52YWx1ZXM7XHJcbn1cclxuZWxzZSB7XHJcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5TmFtZXMobykucmVkdWNlKChwcmV2aW91cywga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzW2tleV0gPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobywga2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgICAgIH0sIHt9KTtcclxuICAgIH07XHJcbiAgICBlbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIGtleXMobykubWFwKChrZXkpID0+IFtrZXksIG9ba2V5XV0pO1xyXG4gICAgfTtcclxuICAgIHZhbHVlcyA9IGZ1bmN0aW9uIHZhbHVlcyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIGtleXMobykubWFwKChrZXkpID0+IG9ba2V5XSk7XHJcbiAgICB9O1xyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9iamVjdC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xyXG5pbXBvcnQgeyB3cmFwTmF0aXZlIH0gZnJvbSAnLi9zdXBwb3J0L3V0aWwnO1xyXG4vKipcclxuICogVGhlIG1pbmltdW0gbG9jYXRpb24gb2YgaGlnaCBzdXJyb2dhdGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgSElHSF9TVVJST0dBVEVfTUlOID0gMHhkODAwO1xyXG4vKipcclxuICogVGhlIG1heGltdW0gbG9jYXRpb24gb2YgaGlnaCBzdXJyb2dhdGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgSElHSF9TVVJST0dBVEVfTUFYID0gMHhkYmZmO1xyXG4vKipcclxuICogVGhlIG1pbmltdW0gbG9jYXRpb24gb2YgbG93IHN1cnJvZ2F0ZXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBMT1dfU1VSUk9HQVRFX01JTiA9IDB4ZGMwMDtcclxuLyoqXHJcbiAqIFRoZSBtYXhpbXVtIGxvY2F0aW9uIG9mIGxvdyBzdXJyb2dhdGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgTE9XX1NVUlJPR0FURV9NQVggPSAweGRmZmY7XHJcbi8qIEVTNiBzdGF0aWMgbWV0aG9kcyAqL1xyXG4vKipcclxuICogUmV0dXJuIHRoZSBTdHJpbmcgdmFsdWUgd2hvc2UgZWxlbWVudHMgYXJlLCBpbiBvcmRlciwgdGhlIGVsZW1lbnRzIGluIHRoZSBMaXN0IGVsZW1lbnRzLlxyXG4gKiBJZiBsZW5ndGggaXMgMCwgdGhlIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC5cclxuICogQHBhcmFtIGNvZGVQb2ludHMgVGhlIGNvZGUgcG9pbnRzIHRvIGdlbmVyYXRlIHRoZSBzdHJpbmdcclxuICovXHJcbmV4cG9ydCBsZXQgZnJvbUNvZGVQb2ludDtcclxuLyoqXHJcbiAqIGByYXdgIGlzIGludGVuZGVkIGZvciB1c2UgYXMgYSB0YWcgZnVuY3Rpb24gb2YgYSBUYWdnZWQgVGVtcGxhdGUgU3RyaW5nLiBXaGVuIGNhbGxlZFxyXG4gKiBhcyBzdWNoIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGEgd2VsbCBmb3JtZWQgdGVtcGxhdGUgY2FsbCBzaXRlIG9iamVjdCBhbmQgdGhlIHJlc3RcclxuICogcGFyYW1ldGVyIHdpbGwgY29udGFpbiB0aGUgc3Vic3RpdHV0aW9uIHZhbHVlcy5cclxuICogQHBhcmFtIHRlbXBsYXRlIEEgd2VsbC1mb3JtZWQgdGVtcGxhdGUgc3RyaW5nIGNhbGwgc2l0ZSByZXByZXNlbnRhdGlvbi5cclxuICogQHBhcmFtIHN1YnN0aXR1dGlvbnMgQSBzZXQgb2Ygc3Vic3RpdHV0aW9uIHZhbHVlcy5cclxuICovXHJcbmV4cG9ydCBsZXQgcmF3O1xyXG4vKiBFUzYgaW5zdGFuY2UgbWV0aG9kcyAqL1xyXG4vKipcclxuICogUmV0dXJucyBhIG5vbm5lZ2F0aXZlIGludGVnZXIgTnVtYmVyIGxlc3MgdGhhbiAxMTE0MTEyICgweDExMDAwMCkgdGhhdCBpcyB0aGUgY29kZSBwb2ludFxyXG4gKiB2YWx1ZSBvZiB0aGUgVVRGLTE2IGVuY29kZWQgY29kZSBwb2ludCBzdGFydGluZyBhdCB0aGUgc3RyaW5nIGVsZW1lbnQgYXQgcG9zaXRpb24gcG9zIGluXHJcbiAqIHRoZSBTdHJpbmcgcmVzdWx0aW5nIGZyb20gY29udmVydGluZyB0aGlzIG9iamVjdCB0byBhIFN0cmluZy5cclxuICogSWYgdGhlcmUgaXMgbm8gZWxlbWVudCBhdCB0aGF0IHBvc2l0aW9uLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC5cclxuICogSWYgYSB2YWxpZCBVVEYtMTYgc3Vycm9nYXRlIHBhaXIgZG9lcyBub3QgYmVnaW4gYXQgcG9zLCB0aGUgcmVzdWx0IGlzIHRoZSBjb2RlIHVuaXQgYXQgcG9zLlxyXG4gKi9cclxuZXhwb3J0IGxldCBjb2RlUG9pbnRBdDtcclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcclxuICogc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0aGlzIG9iamVjdCAoY29udmVydGVkIHRvIGEgU3RyaW5nKSBzdGFydGluZyBhdFxyXG4gKiBlbmRQb3NpdGlvbiDigJMgbGVuZ3RoKHRoaXMpLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cclxuICovXHJcbmV4cG9ydCBsZXQgZW5kc1dpdGg7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgc2VhcmNoU3RyaW5nIGFwcGVhcnMgYXMgYSBzdWJzdHJpbmcgb2YgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoaXNcclxuICogb2JqZWN0IHRvIGEgU3RyaW5nLCBhdCBvbmUgb3IgbW9yZSBwb3NpdGlvbnMgdGhhdCBhcmVcclxuICogZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHBvc2l0aW9uOyBvdGhlcndpc2UsIHJldHVybnMgZmFsc2UuXHJcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcclxuICogQHBhcmFtIHNlYXJjaFN0cmluZyBzZWFyY2ggc3RyaW5nXHJcbiAqIEBwYXJhbSBwb3NpdGlvbiBJZiBwb3NpdGlvbiBpcyB1bmRlZmluZWQsIDAgaXMgYXNzdW1lZCwgc28gYXMgdG8gc2VhcmNoIGFsbCBvZiB0aGUgU3RyaW5nLlxyXG4gKi9cclxuZXhwb3J0IGxldCBpbmNsdWRlcztcclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIFN0cmluZyB2YWx1ZSByZXN1bHQgb2Ygbm9ybWFsaXppbmcgdGhlIHN0cmluZyBpbnRvIHRoZSBub3JtYWxpemF0aW9uIGZvcm1cclxuICogbmFtZWQgYnkgZm9ybSBhcyBzcGVjaWZpZWQgaW4gVW5pY29kZSBTdGFuZGFyZCBBbm5leCAjMTUsIFVuaWNvZGUgTm9ybWFsaXphdGlvbiBGb3Jtcy5cclxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xyXG4gKiBAcGFyYW0gZm9ybSBBcHBsaWNhYmxlIHZhbHVlczogXCJORkNcIiwgXCJORkRcIiwgXCJORktDXCIsIG9yIFwiTkZLRFwiLCBJZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRcclxuICogaXMgXCJORkNcIlxyXG4gKi9cclxuZXhwb3J0IGxldCBub3JtYWxpemU7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgU3RyaW5nIHZhbHVlIHRoYXQgaXMgbWFkZSBmcm9tIGNvdW50IGNvcGllcyBhcHBlbmRlZCB0b2dldGhlci4gSWYgY291bnQgaXMgMCxcclxuICogVCBpcyB0aGUgZW1wdHkgU3RyaW5nIGlzIHJldHVybmVkLlxyXG4gKiBAcGFyYW0gY291bnQgbnVtYmVyIG9mIGNvcGllcyB0byBhcHBlbmRcclxuICovXHJcbmV4cG9ydCBsZXQgcmVwZWF0O1xyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBvZiBzZWFyY2hTdHJpbmcgY29udmVydGVkIHRvIGEgU3RyaW5nIGlzIHRoZVxyXG4gKiBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHRoaXMgb2JqZWN0IChjb252ZXJ0ZWQgdG8gYSBTdHJpbmcpIHN0YXJ0aW5nIGF0XHJcbiAqIHBvc2l0aW9uLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cclxuICovXHJcbmV4cG9ydCBsZXQgc3RhcnRzV2l0aDtcclxuLyogRVM3IGluc3RhbmNlIG1ldGhvZHMgKi9cclxuLyoqXHJcbiAqIFBhZHMgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGggYSBnaXZlbiBzdHJpbmcgKHBvc3NpYmx5IHJlcGVhdGVkKSBzbyB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIHJlYWNoZXMgYSBnaXZlbiBsZW5ndGguXHJcbiAqIFRoZSBwYWRkaW5nIGlzIGFwcGxpZWQgZnJvbSB0aGUgZW5kIChyaWdodCkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXHJcbiAqIEBwYXJhbSBtYXhMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBvbmNlIHRoZSBjdXJyZW50IHN0cmluZyBoYXMgYmVlbiBwYWRkZWQuXHJcbiAqICAgICAgICBJZiB0aGlzIHBhcmFtZXRlciBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgc3RyaW5nJ3MgbGVuZ3RoLCB0aGUgY3VycmVudCBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZCBhcyBpdCBpcy5cclxuICpcclxuICogQHBhcmFtIGZpbGxTdHJpbmcgVGhlIHN0cmluZyB0byBwYWQgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGguXHJcbiAqICAgICAgICBJZiB0aGlzIHN0cmluZyBpcyB0b28gbG9uZywgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgYW5kIHRoZSBsZWZ0LW1vc3QgcGFydCB3aWxsIGJlIGFwcGxpZWQuXHJcbiAqICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgXCIgXCIgKFUrMDAyMCkuXHJcbiAqL1xyXG5leHBvcnQgbGV0IHBhZEVuZDtcclxuLyoqXHJcbiAqIFBhZHMgdGhlIGN1cnJlbnQgc3RyaW5nIHdpdGggYSBnaXZlbiBzdHJpbmcgKHBvc3NpYmx5IHJlcGVhdGVkKSBzbyB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIHJlYWNoZXMgYSBnaXZlbiBsZW5ndGguXHJcbiAqIFRoZSBwYWRkaW5nIGlzIGFwcGxpZWQgZnJvbSB0aGUgc3RhcnQgKGxlZnQpIG9mIHRoZSBjdXJyZW50IHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xyXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcgb25jZSB0aGUgY3VycmVudCBzdHJpbmcgaGFzIGJlZW4gcGFkZGVkLlxyXG4gKiAgICAgICAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHN0cmluZydzIGxlbmd0aCwgdGhlIGN1cnJlbnQgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQgYXMgaXQgaXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWxsU3RyaW5nIFRoZSBzdHJpbmcgdG8gcGFkIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoLlxyXG4gKiAgICAgICAgSWYgdGhpcyBzdHJpbmcgaXMgdG9vIGxvbmcsIGl0IHdpbGwgYmUgdHJ1bmNhdGVkIGFuZCB0aGUgbGVmdC1tb3N0IHBhcnQgd2lsbCBiZSBhcHBsaWVkLlxyXG4gKiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIFwiIFwiIChVKzAwMjApLlxyXG4gKi9cclxuZXhwb3J0IGxldCBwYWRTdGFydDtcclxuaWYgKHRydWUgJiYgdHJ1ZSkge1xyXG4gICAgZnJvbUNvZGVQb2ludCA9IGdsb2JhbC5TdHJpbmcuZnJvbUNvZGVQb2ludDtcclxuICAgIHJhdyA9IGdsb2JhbC5TdHJpbmcucmF3O1xyXG4gICAgY29kZVBvaW50QXQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KTtcclxuICAgIGVuZHNXaXRoID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aCk7XHJcbiAgICBpbmNsdWRlcyA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMpO1xyXG4gICAgbm9ybWFsaXplID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5ub3JtYWxpemUpO1xyXG4gICAgcmVwZWF0ID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5yZXBlYXQpO1xyXG4gICAgc3RhcnRzV2l0aCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCk7XHJcbn1cclxuZWxzZSB7XHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRlcyB0aGF0IHRleHQgaXMgZGVmaW5lZCwgYW5kIG5vcm1hbGl6ZXMgcG9zaXRpb24gKGJhc2VkIG9uIHRoZSBnaXZlbiBkZWZhdWx0IGlmIHRoZSBpbnB1dCBpcyBOYU4pLlxyXG4gICAgICogVXNlZCBieSBzdGFydHNXaXRoLCBpbmNsdWRlcywgYW5kIGVuZHNXaXRoLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gTm9ybWFsaXplZCBwb3NpdGlvbi5cclxuICAgICAqL1xyXG4gICAgY29uc3Qgbm9ybWFsaXplU3Vic3RyaW5nQXJncyA9IGZ1bmN0aW9uIChuYW1lLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uLCBpc0VuZCA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcuJyArIG5hbWUgKyAnIHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nIHRvIHNlYXJjaCBhZ2FpbnN0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcclxuICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICE9PSBwb3NpdGlvbiA/IChpc0VuZCA/IGxlbmd0aCA6IDApIDogcG9zaXRpb247XHJcbiAgICAgICAgcmV0dXJuIFt0ZXh0LCBTdHJpbmcoc2VhcmNoKSwgTWF0aC5taW4oTWF0aC5tYXgocG9zaXRpb24sIDApLCBsZW5ndGgpXTtcclxuICAgIH07XHJcbiAgICBmcm9tQ29kZVBvaW50ID0gZnVuY3Rpb24gZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5mcm9tQ29kZVBvaW50XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcclxuICAgICAgICBpZiAoIWxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XHJcbiAgICAgICAgY29uc3QgTUFYX1NJWkUgPSAweDQwMDA7XHJcbiAgICAgICAgbGV0IGNvZGVVbml0cyA9IFtdO1xyXG4gICAgICAgIGxldCBpbmRleCA9IC0xO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pO1xyXG4gICAgICAgICAgICAvLyBDb2RlIHBvaW50cyBtdXN0IGJlIGZpbml0ZSBpbnRlZ2VycyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlXHJcbiAgICAgICAgICAgIGxldCBpc1ZhbGlkID0gaXNGaW5pdGUoY29kZVBvaW50KSAmJiBNYXRoLmZsb29yKGNvZGVQb2ludCkgPT09IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPj0gMCAmJiBjb2RlUG9pbnQgPD0gMHgxMGZmZmY7XHJcbiAgICAgICAgICAgIGlmICghaXNWYWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcignc3RyaW5nLmZyb21Db2RlUG9pbnQ6IEludmFsaWQgY29kZSBwb2ludCAnICsgY29kZVBvaW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29kZVBvaW50IDw9IDB4ZmZmZikge1xyXG4gICAgICAgICAgICAgICAgLy8gQk1QIGNvZGUgcG9pbnRcclxuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW4gc3Vycm9nYXRlIGhhbHZlc1xyXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXHJcbiAgICAgICAgICAgICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMDtcclxuICAgICAgICAgICAgICAgIGxldCBoaWdoU3Vycm9nYXRlID0gKGNvZGVQb2ludCA+PiAxMCkgKyBISUdIX1NVUlJPR0FURV9NSU47XHJcbiAgICAgICAgICAgICAgICBsZXQgbG93U3Vycm9nYXRlID0gY29kZVBvaW50ICUgMHg0MDAgKyBMT1dfU1VSUk9HQVRFX01JTjtcclxuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGhpZ2hTdXJyb2dhdGUsIGxvd1N1cnJvZ2F0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gbGVuZ3RoIHx8IGNvZGVVbml0cy5sZW5ndGggPiBNQVhfU0laRSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZyb21DaGFyQ29kZS5hcHBseShudWxsLCBjb2RlVW5pdHMpO1xyXG4gICAgICAgICAgICAgICAgY29kZVVuaXRzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICByYXcgPSBmdW5jdGlvbiByYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpIHtcclxuICAgICAgICBsZXQgcmF3U3RyaW5ncyA9IGNhbGxTaXRlLnJhdztcclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgbGV0IG51bVN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zLmxlbmd0aDtcclxuICAgICAgICBpZiAoY2FsbFNpdGUgPT0gbnVsbCB8fCBjYWxsU2l0ZS5yYXcgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmF3IHJlcXVpcmVzIGEgdmFsaWQgY2FsbFNpdGUgb2JqZWN0IHdpdGggYSByYXcgdmFsdWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IHJhd1N0cmluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IHJhd1N0cmluZ3NbaV0gKyAoaSA8IG51bVN1YnN0aXR1dGlvbnMgJiYgaSA8IGxlbmd0aCAtIDEgPyBzdWJzdGl0dXRpb25zW2ldIDogJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIGNvZGVQb2ludEF0ID0gZnVuY3Rpb24gY29kZVBvaW50QXQodGV4dCwgcG9zaXRpb24gPSAwKSB7XHJcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRcclxuICAgICAgICBpZiAodGV4dCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5jb2RlUG9pbnRBdCByZXF1cmllcyBhIHZhbGlkIHN0cmluZy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uICE9PSBwb3NpdGlvbikge1xyXG4gICAgICAgICAgICBwb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEdldCB0aGUgZmlyc3QgY29kZSB1bml0XHJcbiAgICAgICAgY29uc3QgZmlyc3QgPSB0ZXh0LmNoYXJDb2RlQXQocG9zaXRpb24pO1xyXG4gICAgICAgIGlmIChmaXJzdCA+PSBISUdIX1NVUlJPR0FURV9NSU4gJiYgZmlyc3QgPD0gSElHSF9TVVJST0dBVEVfTUFYICYmIGxlbmd0aCA+IHBvc2l0aW9uICsgMSkge1xyXG4gICAgICAgICAgICAvLyBTdGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyIChoaWdoIHN1cnJvZ2F0ZSBhbmQgdGhlcmUgaXMgYSBuZXh0IGNvZGUgdW5pdCk7IGNoZWNrIGZvciBsb3cgc3Vycm9nYXRlXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSB0ZXh0LmNoYXJDb2RlQXQocG9zaXRpb24gKyAxKTtcclxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSBMT1dfU1VSUk9HQVRFX01JTiAmJiBzZWNvbmQgPD0gTE9XX1NVUlJPR0FURV9NQVgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoZmlyc3QgLSBISUdIX1NVUlJPR0FURV9NSU4pICogMHg0MDAgKyBzZWNvbmQgLSBMT1dfU1VSUk9HQVRFX01JTiArIDB4MTAwMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpcnN0O1xyXG4gICAgfTtcclxuICAgIGVuZHNXaXRoID0gZnVuY3Rpb24gZW5kc1dpdGgodGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbikge1xyXG4gICAgICAgIGlmIChlbmRQb3NpdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFt0ZXh0LCBzZWFyY2gsIGVuZFBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ2VuZHNXaXRoJywgdGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbiwgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbmRQb3NpdGlvbiAtIHNlYXJjaC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmRQb3NpdGlvbikgPT09IHNlYXJjaDtcclxuICAgIH07XHJcbiAgICBpbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzKHRleHQsIHNlYXJjaCwgcG9zaXRpb24gPSAwKSB7XHJcbiAgICAgICAgW3RleHQsIHNlYXJjaCwgcG9zaXRpb25dID0gbm9ybWFsaXplU3Vic3RyaW5nQXJncygnaW5jbHVkZXMnLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uKTtcclxuICAgICAgICByZXR1cm4gdGV4dC5pbmRleE9mKHNlYXJjaCwgcG9zaXRpb24pICE9PSAtMTtcclxuICAgIH07XHJcbiAgICByZXBlYXQgPSBmdW5jdGlvbiByZXBlYXQodGV4dCwgY291bnQgPSAwKSB7XHJcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUucmVwZWF0XHJcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY291bnQgIT09IGNvdW50KSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgd2hpbGUgKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCAlIDIpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB0ZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHRleHQgKz0gdGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb3VudCA+Pj0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICBzdGFydHNXaXRoID0gZnVuY3Rpb24gc3RhcnRzV2l0aCh0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uID0gMCkge1xyXG4gICAgICAgIHNlYXJjaCA9IFN0cmluZyhzZWFyY2gpO1xyXG4gICAgICAgIFt0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ3N0YXJ0c1dpdGgnLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uKTtcclxuICAgICAgICBjb25zdCBlbmQgPSBwb3NpdGlvbiArIHNlYXJjaC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGVuZCA+IHRleHQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UocG9zaXRpb24sIGVuZCkgPT09IHNlYXJjaDtcclxuICAgIH07XHJcbn1cclxuaWYgKHRydWUpIHtcclxuICAgIHBhZEVuZCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucGFkRW5kKTtcclxuICAgIHBhZFN0YXJ0ID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCk7XHJcbn1cclxuZWxzZSB7XHJcbiAgICBwYWRFbmQgPSBmdW5jdGlvbiBwYWRFbmQodGV4dCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nID0gJyAnKSB7XHJcbiAgICAgICAgaWYgKHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdHJpbmcucGFkRW5kIHJlcXVpcmVzIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSBjb3VudC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gbnVsbCB8fCBtYXhMZW5ndGggPT09IHVuZGVmaW5lZCB8fCBtYXhMZW5ndGggPCAwKSB7XHJcbiAgICAgICAgICAgIG1heExlbmd0aCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdHJUZXh0ID0gU3RyaW5nKHRleHQpO1xyXG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBtYXhMZW5ndGggLSBzdHJUZXh0Lmxlbmd0aDtcclxuICAgICAgICBpZiAocGFkZGluZyA+IDApIHtcclxuICAgICAgICAgICAgc3RyVGV4dCArPVxyXG4gICAgICAgICAgICAgICAgcmVwZWF0KGZpbGxTdHJpbmcsIE1hdGguZmxvb3IocGFkZGluZyAvIGZpbGxTdHJpbmcubGVuZ3RoKSkgK1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHJpbmcuc2xpY2UoMCwgcGFkZGluZyAlIGZpbGxTdHJpbmcubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0clRleHQ7XHJcbiAgICB9O1xyXG4gICAgcGFkU3RhcnQgPSBmdW5jdGlvbiBwYWRTdGFydCh0ZXh0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcgPSAnICcpIHtcclxuICAgICAgICBpZiAodGV4dCA9PT0gbnVsbCB8fCB0ZXh0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIHZhbGlkIHN0cmluZy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5wYWRTdGFydCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IG51bGwgfHwgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbWF4TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgICAgICBtYXhMZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RyVGV4dCA9IFN0cmluZyh0ZXh0KTtcclxuICAgICAgICBjb25zdCBwYWRkaW5nID0gbWF4TGVuZ3RoIC0gc3RyVGV4dC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHBhZGRpbmcgPiAwKSB7XHJcbiAgICAgICAgICAgIHN0clRleHQgPVxyXG4gICAgICAgICAgICAgICAgcmVwZWF0KGZpbGxTdHJpbmcsIE1hdGguZmxvb3IocGFkZGluZyAvIGZpbGxTdHJpbmcubGVuZ3RoKSkgK1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHJpbmcuc2xpY2UoMCwgcGFkZGluZyAlIGZpbGxTdHJpbmcubGVuZ3RoKSArXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyVGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0clRleHQ7XHJcbiAgICB9O1xyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmluZy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3RyaW5nLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3RyaW5nLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBoYXMsIHsgYWRkIH0gZnJvbSAnLi4vLi4vaGFzL2hhcyc7XHJcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi4vZ2xvYmFsJztcclxuZXhwb3J0IGRlZmF1bHQgaGFzO1xyXG5leHBvcnQgKiBmcm9tICcuLi8uLi9oYXMvaGFzJztcclxuLyogRUNNQVNjcmlwdCA2IGFuZCA3IEZlYXR1cmVzICovXHJcbi8qIEFycmF5ICovXHJcbmFkZCgnZXM2LWFycmF5JywgKCkgPT4ge1xyXG4gICAgcmV0dXJuIChbJ2Zyb20nLCAnb2YnXS5ldmVyeSgoa2V5KSA9PiBrZXkgaW4gZ2xvYmFsLkFycmF5KSAmJlxyXG4gICAgICAgIFsnZmluZEluZGV4JywgJ2ZpbmQnLCAnY29weVdpdGhpbiddLmV2ZXJ5KChrZXkpID0+IGtleSBpbiBnbG9iYWwuQXJyYXkucHJvdG90eXBlKSk7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ2VzNi1hcnJheS1maWxsJywgKCkgPT4ge1xyXG4gICAgaWYgKCdmaWxsJyBpbiBnbG9iYWwuQXJyYXkucHJvdG90eXBlKSB7XHJcbiAgICAgICAgLyogU29tZSB2ZXJzaW9ucyBvZiBTYWZhcmkgZG8gbm90IHByb3Blcmx5IGltcGxlbWVudCB0aGlzICovXHJcbiAgICAgICAgcmV0dXJuIFsxXS5maWxsKDksIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSlbMF0gPT09IDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ2VzNy1hcnJheScsICgpID0+ICdpbmNsdWRlcycgaW4gZ2xvYmFsLkFycmF5LnByb3RvdHlwZSwgdHJ1ZSk7XHJcbi8qIE1hcCAqL1xyXG5hZGQoJ2VzNi1tYXAnLCAoKSA9PiB7XHJcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5NYXAgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAvKlxyXG4gICAgSUUxMSBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIGFyZSBtaXNzaW5nIGNyaXRpY2FsIEVTNiBNYXAgZnVuY3Rpb25hbGl0eVxyXG4gICAgV2Ugd3JhcCB0aGlzIGluIGEgdHJ5L2NhdGNoIGJlY2F1c2Ugc29tZXRpbWVzIHRoZSBNYXAgY29uc3RydWN0b3IgZXhpc3RzLCBidXQgZG9lcyBub3RcclxuICAgIHRha2UgYXJndW1lbnRzIChpT1MgOC40KVxyXG4gICAgICovXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgbWFwID0gbmV3IGdsb2JhbC5NYXAoW1swLCAxXV0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbWFwLmhhcygwKSAmJlxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hcC5rZXlzID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICAgICAgICAgICB0cnVlICYmXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWFwLnZhbHVlcyA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hcC5lbnRyaWVzID09PSAnZnVuY3Rpb24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogbm90IHRlc3Rpbmcgb24gaU9TIGF0IHRoZSBtb21lbnQgKi9cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbi8qIE1hdGggKi9cclxuYWRkKCdlczYtbWF0aCcsICgpID0+IHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgJ2NsejMyJyxcclxuICAgICAgICAnc2lnbicsXHJcbiAgICAgICAgJ2xvZzEwJyxcclxuICAgICAgICAnbG9nMicsXHJcbiAgICAgICAgJ2xvZzFwJyxcclxuICAgICAgICAnZXhwbTEnLFxyXG4gICAgICAgICdjb3NoJyxcclxuICAgICAgICAnc2luaCcsXHJcbiAgICAgICAgJ3RhbmgnLFxyXG4gICAgICAgICdhY29zaCcsXHJcbiAgICAgICAgJ2FzaW5oJyxcclxuICAgICAgICAnYXRhbmgnLFxyXG4gICAgICAgICd0cnVuYycsXHJcbiAgICAgICAgJ2Zyb3VuZCcsXHJcbiAgICAgICAgJ2NicnQnLFxyXG4gICAgICAgICdoeXBvdCdcclxuICAgIF0uZXZlcnkoKG5hbWUpID0+IHR5cGVvZiBnbG9iYWwuTWF0aFtuYW1lXSA9PT0gJ2Z1bmN0aW9uJyk7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ2VzNi1tYXRoLWltdWwnLCAoKSA9PiB7XHJcbiAgICBpZiAoJ2ltdWwnIGluIGdsb2JhbC5NYXRoKSB7XHJcbiAgICAgICAgLyogU29tZSB2ZXJzaW9ucyBvZiBTYWZhcmkgb24gaW9zIGRvIG5vdCBwcm9wZXJseSBpbXBsZW1lbnQgdGhpcyAqL1xyXG4gICAgICAgIHJldHVybiBNYXRoLmltdWwoMHhmZmZmZmZmZiwgNSkgPT09IC01O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuLyogT2JqZWN0ICovXHJcbmFkZCgnZXM2LW9iamVjdCcsICgpID0+IHtcclxuICAgIHJldHVybiB0cnVlICYmXHJcbiAgICAgICAgWydhc3NpZ24nLCAnaXMnLCAnZ2V0T3duUHJvcGVydHlTeW1ib2xzJywgJ3NldFByb3RvdHlwZU9mJ10uZXZlcnkoKG5hbWUpID0+IHR5cGVvZiBnbG9iYWwuT2JqZWN0W25hbWVdID09PSAnZnVuY3Rpb24nKTtcclxufSwgdHJ1ZSk7XHJcbmFkZCgnZXMyMDE3LW9iamVjdCcsICgpID0+IHtcclxuICAgIHJldHVybiBbJ3ZhbHVlcycsICdlbnRyaWVzJywgJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMnXS5ldmVyeSgobmFtZSkgPT4gdHlwZW9mIGdsb2JhbC5PYmplY3RbbmFtZV0gPT09ICdmdW5jdGlvbicpO1xyXG59LCB0cnVlKTtcclxuLyogT2JzZXJ2YWJsZSAqL1xyXG5hZGQoJ2VzLW9ic2VydmFibGUnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLk9ic2VydmFibGUgIT09ICd1bmRlZmluZWQnLCB0cnVlKTtcclxuLyogUHJvbWlzZSAqL1xyXG5hZGQoJ2VzNi1wcm9taXNlJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5Qcm9taXNlICE9PSAndW5kZWZpbmVkJyAmJiB0cnVlLCB0cnVlKTtcclxuLyogU2V0ICovXHJcbmFkZCgnZXM2LXNldCcsICgpID0+IHtcclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLlNldCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8qIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgU2V0IGZ1bmN0aW9uYWxpdHkgKi9cclxuICAgICAgICBjb25zdCBzZXQgPSBuZXcgZ2xvYmFsLlNldChbMV0pO1xyXG4gICAgICAgIHJldHVybiBzZXQuaGFzKDEpICYmICdrZXlzJyBpbiBzZXQgJiYgdHlwZW9mIHNldC5rZXlzID09PSAnZnVuY3Rpb24nICYmIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG4vKiBTdHJpbmcgKi9cclxuYWRkKCdlczYtc3RyaW5nJywgKCkgPT4ge1xyXG4gICAgcmV0dXJuIChbXHJcbiAgICAgICAgLyogc3RhdGljIG1ldGhvZHMgKi9cclxuICAgICAgICAnZnJvbUNvZGVQb2ludCdcclxuICAgIF0uZXZlcnkoKGtleSkgPT4gdHlwZW9mIGdsb2JhbC5TdHJpbmdba2V5XSA9PT0gJ2Z1bmN0aW9uJykgJiZcclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIC8qIGluc3RhbmNlIG1ldGhvZHMgKi9cclxuICAgICAgICAgICAgJ2NvZGVQb2ludEF0JyxcclxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXHJcbiAgICAgICAgICAgICdyZXBlYXQnLFxyXG4gICAgICAgICAgICAnc3RhcnRzV2l0aCcsXHJcbiAgICAgICAgICAgICdlbmRzV2l0aCcsXHJcbiAgICAgICAgICAgICdpbmNsdWRlcydcclxuICAgICAgICBdLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nLnByb3RvdHlwZVtrZXldID09PSAnZnVuY3Rpb24nKSk7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ2VzNi1zdHJpbmctcmF3JywgKCkgPT4ge1xyXG4gICAgZnVuY3Rpb24gZ2V0Q2FsbFNpdGUoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uY2FsbFNpdGVdO1xyXG4gICAgICAgIHJlc3VsdC5yYXcgPSBjYWxsU2l0ZS5yYXc7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGlmICgncmF3JyBpbiBnbG9iYWwuU3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGIgPSAxO1xyXG4gICAgICAgIGxldCBjYWxsU2l0ZSA9IGdldENhbGxTaXRlIGBhXFxuJHtifWA7XHJcbiAgICAgICAgY2FsbFNpdGUucmF3ID0gWydhXFxcXG4nXTtcclxuICAgICAgICBjb25zdCBzdXBwb3J0c1RydW5jID0gZ2xvYmFsLlN0cmluZy5yYXcoY2FsbFNpdGUsIDQyKSA9PT0gJ2E6XFxcXG4nO1xyXG4gICAgICAgIHJldHVybiBzdXBwb3J0c1RydW5jO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuYWRkKCdlczIwMTctc3RyaW5nJywgKCkgPT4ge1xyXG4gICAgcmV0dXJuIFsncGFkU3RhcnQnLCAncGFkRW5kJ10uZXZlcnkoKGtleSkgPT4gdHlwZW9mIGdsb2JhbC5TdHJpbmcucHJvdG90eXBlW2tleV0gPT09ICdmdW5jdGlvbicpO1xyXG59LCB0cnVlKTtcclxuLyogU3ltYm9sICovXHJcbmFkZCgnZXM2LXN5bWJvbCcsICgpID0+IHR5cGVvZiBnbG9iYWwuU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgU3ltYm9sKCkgPT09ICdzeW1ib2wnLCB0cnVlKTtcclxuLyogV2Vha01hcCAqL1xyXG5hZGQoJ2VzNi13ZWFrbWFwJywgKCkgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuV2Vha01hcCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvKiBJRTExIGFuZCBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkgYXJlIG1pc3NpbmcgY3JpdGljYWwgRVM2IE1hcCBmdW5jdGlvbmFsaXR5ICovXHJcbiAgICAgICAgY29uc3Qga2V5MSA9IHt9O1xyXG4gICAgICAgIGNvbnN0IGtleTIgPSB7fTtcclxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgZ2xvYmFsLldlYWtNYXAoW1trZXkxLCAxXV0pO1xyXG4gICAgICAgIE9iamVjdC5mcmVlemUoa2V5MSk7XHJcbiAgICAgICAgcmV0dXJuIG1hcC5nZXQoa2V5MSkgPT09IDEgJiYgbWFwLnNldChrZXkyLCAyKSA9PT0gbWFwICYmIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG4vKiBNaXNjZWxsYW5lb3VzIGZlYXR1cmVzICovXHJcbmFkZCgnbWljcm90YXNrcycsICgpID0+IHRydWUgfHwgZmFsc2UgfHwgdHJ1ZSwgdHJ1ZSk7XHJcbmFkZCgncG9zdG1lc3NhZ2UnLCAoKSA9PiB7XHJcbiAgICAvLyBJZiB3aW5kb3cgaXMgdW5kZWZpbmVkLCBhbmQgd2UgaGF2ZSBwb3N0TWVzc2FnZSwgaXQgcHJvYmFibHkgbWVhbnMgd2UncmUgaW4gYSB3ZWIgd29ya2VyLiBXZWIgd29ya2VycyBoYXZlXHJcbiAgICAvLyBwb3N0IG1lc3NhZ2UgYnV0IGl0IGRvZXNuJ3Qgd29yayBob3cgd2UgZXhwZWN0IGl0IHRvLCBzbyBpdCdzIGJlc3QganVzdCB0byBwcmV0ZW5kIGl0IGRvZXNuJ3QgZXhpc3QuXHJcbiAgICByZXR1cm4gdHlwZW9mIGdsb2JhbC53aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBnbG9iYWwucG9zdE1lc3NhZ2UgPT09ICdmdW5jdGlvbic7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ3JhZicsICgpID0+IHR5cGVvZiBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nLCB0cnVlKTtcclxuYWRkKCdzZXRpbW1lZGlhdGUnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLnNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcsIHRydWUpO1xyXG4vKiBET00gRmVhdHVyZXMgKi9cclxuYWRkKCdkb20tbXV0YXRpb25vYnNlcnZlcicsICgpID0+IHtcclxuICAgIGlmICh0cnVlICYmIEJvb2xlYW4oZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpKSB7XHJcbiAgICAgICAgLy8gSUUxMSBoYXMgYW4gdW5yZWxpYWJsZSBNdXRhdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uIHdoZXJlIHNldFByb3BlcnR5KCkgZG9lcyBub3RcclxuICAgICAgICAvLyBnZW5lcmF0ZSBhIG11dGF0aW9uIGV2ZW50LCBvYnNlcnZlcnMgY2FuIGNyYXNoLCBhbmQgdGhlIHF1ZXVlIGRvZXMgbm90IGRyYWluXHJcbiAgICAgICAgLy8gcmVsaWFibHkuIFRoZSBmb2xsb3dpbmcgZmVhdHVyZSB0ZXN0IHdhcyBhZGFwdGVkIGZyb21cclxuICAgICAgICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90MTBrby80YWNlYjhjNzE2ODFmZGIyNzVlMzNlZmU1ZTU3NmIxNFxyXG4gICAgICAgIGNvbnN0IGV4YW1wbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSAqL1xyXG4gICAgICAgIGNvbnN0IEhvc3RNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XHJcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSG9zdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgeyB9KTtcclxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGV4YW1wbGUsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTtcclxuICAgICAgICBleGFtcGxlLnN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob2JzZXJ2ZXIudGFrZVJlY29yZHMoKS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuYWRkKCdkb20td2ViYW5pbWF0aW9uJywgKCkgPT4gdHJ1ZSAmJiBnbG9iYWwuQW5pbWF0aW9uICE9PSB1bmRlZmluZWQgJiYgZ2xvYmFsLktleWZyYW1lRWZmZWN0ICE9PSB1bmRlZmluZWQsIHRydWUpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvaGFzLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC9oYXMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuLi9nbG9iYWwnO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vaGFzJztcclxuZnVuY3Rpb24gZXhlY3V0ZVRhc2soaXRlbSkge1xyXG4gICAgaWYgKGl0ZW0gJiYgaXRlbS5pc0FjdGl2ZSAmJiBpdGVtLmNhbGxiYWNrKSB7XHJcbiAgICAgICAgaXRlbS5jYWxsYmFjaygpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldFF1ZXVlSGFuZGxlKGl0ZW0sIGRlc3RydWN0b3IpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7IH07XHJcbiAgICAgICAgICAgIGl0ZW0uaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaXRlbS5jYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChkZXN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBkZXN0cnVjdG9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbmxldCBjaGVja01pY3JvVGFza1F1ZXVlO1xyXG5sZXQgbWljcm9UYXNrcztcclxuLyoqXHJcbiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIHRoZSBtYWNyb3Rhc2sgcXVldWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBjYWxsYmFjayB0aGUgZnVuY3Rpb24gdG8gYmUgcXVldWVkIGFuZCBsYXRlciBleGVjdXRlZC5cclxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBxdWV1ZVRhc2sgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGRlc3RydWN0b3I7XHJcbiAgICBsZXQgZW5xdWV1ZTtcclxuICAgIC8vIFNpbmNlIHRoZSBJRSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0SW1tZWRpYXRlYCBpcyBub3QgZmxhd2xlc3MsIHdlIHdpbGwgdGVzdCBmb3IgYHBvc3RNZXNzYWdlYCBmaXJzdC5cclxuICAgIGlmICh0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgcXVldWUgPSBbXTtcclxuICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAvLyBDb25maXJtIHRoYXQgdGhlIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGN1cnJlbnQgd2luZG93IGFuZCBieSB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uXHJcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJiBldmVudC5kYXRhID09PSAnZG9qby1xdWV1ZS1tZXNzYWdlJykge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVldWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVRhc2socXVldWUuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgcXVldWUucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKCdkb2pvLXF1ZXVlLW1lc3NhZ2UnLCAnKicpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmYWxzZSkge1xyXG4gICAgICAgIGRlc3RydWN0b3IgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXRJbW1lZGlhdGUoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGRlc3RydWN0b3IgPSBnbG9iYWwuY2xlYXJUaW1lb3V0O1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pLCAwKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcXVldWVUYXNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHtcclxuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgaWQgPSBlbnF1ZXVlKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtLCBkZXN0cnVjdG9yICYmXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGRlc3RydWN0b3IoaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxyXG4gICAgcmV0dXJuIHRydWVcclxuICAgICAgICA/IHF1ZXVlVGFza1xyXG4gICAgICAgIDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHF1ZXVlVGFzayhjYWxsYmFjayk7XHJcbiAgICAgICAgfTtcclxufSkoKTtcclxuLy8gV2hlbiBubyBtZWNoYW5pc20gZm9yIHJlZ2lzdGVyaW5nIG1pY3JvdGFza3MgaXMgZXhwb3NlZCBieSB0aGUgZW52aXJvbm1lbnQsIG1pY3JvdGFza3Mgd2lsbFxyXG4vLyBiZSBxdWV1ZWQgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYSBzaW5nbGUgbWFjcm90YXNrIGJlZm9yZSB0aGUgb3RoZXIgbWFjcm90YXNrcyBhcmUgZXhlY3V0ZWQuXHJcbmlmICghdHJ1ZSkge1xyXG4gICAgbGV0IGlzTWljcm9UYXNrUXVldWVkID0gZmFsc2U7XHJcbiAgICBtaWNyb1Rhc2tzID0gW107XHJcbiAgICBjaGVja01pY3JvVGFza1F1ZXVlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghaXNNaWNyb1Rhc2tRdWV1ZWQpIHtcclxuICAgICAgICAgICAgaXNNaWNyb1Rhc2tRdWV1ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBxdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaXNNaWNyb1Rhc2tRdWV1ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChtaWNyb1Rhc2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoaXRlbSA9IG1pY3JvVGFza3Muc2hpZnQoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVRhc2soaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBTY2hlZHVsZXMgYW4gYW5pbWF0aW9uIHRhc2sgd2l0aCBgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZWAgaWYgaXQgZXhpc3RzLCBvciB3aXRoIGBxdWV1ZVRhc2tgIG90aGVyd2lzZS5cclxuICpcclxuICogU2luY2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJ3MgYmVoYXZpb3IgZG9lcyBub3QgbWF0Y2ggdGhhdCBleHBlY3RlZCBmcm9tIGBxdWV1ZVRhc2tgLCBpdCBpcyBub3QgdXNlZCB0aGVyZS5cclxuICogSG93ZXZlciwgYXQgdGltZXMgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBkZWxlZ2F0ZSB0byByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7IGhlbmNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kLlxyXG4gKlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXHJcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGEgYGRlc3Ryb3lgIG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgcHJldmVudHMgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnJvbSBleGVjdXRpbmcuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcXVldWVBbmltYXRpb25UYXNrID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiBxdWV1ZVRhc2s7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBxdWV1ZUFuaW1hdGlvblRhc2soY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBpdGVtID0ge1xyXG4gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcclxuICAgICAgICByZXR1cm4gZ2V0UXVldWVIYW5kbGUoaXRlbSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPOiBVc2UgYXNwZWN0LmJlZm9yZSB3aGVuIGl0IGlzIGF2YWlsYWJsZS5cclxuICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgPyBxdWV1ZUFuaW1hdGlvblRhc2tcclxuICAgICAgICA6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICBjaGVja01pY3JvVGFza1F1ZXVlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBxdWV1ZUFuaW1hdGlvblRhc2soY2FsbGJhY2spO1xyXG4gICAgICAgIH07XHJcbn0pKCk7XHJcbi8qKlxyXG4gKiBTY2hlZHVsZXMgYSBjYWxsYmFjayB0byB0aGUgbWljcm90YXNrIHF1ZXVlLlxyXG4gKlxyXG4gKiBBbnkgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBgcXVldWVNaWNyb1Rhc2tgIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBuZXh0IG1hY3JvdGFzay4gSWYgbm8gbmF0aXZlXHJcbiAqIG1lY2hhbmlzbSBmb3Igc2NoZWR1bGluZyBtYWNyb3Rhc2tzIGlzIGV4cG9zZWQsIHRoZW4gYW55IGNhbGxiYWNrcyB3aWxsIGJlIGZpcmVkIGJlZm9yZSBhbnkgbWFjcm90YXNrXHJcbiAqIHJlZ2lzdGVyZWQgd2l0aCBgcXVldWVUYXNrYCBvciBgcXVldWVBbmltYXRpb25UYXNrYC5cclxuICpcclxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxyXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxyXG4gKi9cclxuZXhwb3J0IGxldCBxdWV1ZU1pY3JvVGFzayA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBsZXQgZW5xdWV1ZTtcclxuICAgIGlmIChmYWxzZSkge1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBnbG9iYWwucHJvY2Vzcy5uZXh0VGljayhleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHJ1ZSkge1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBnbG9iYWwuUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4oZXhlY3V0ZVRhc2spO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0cnVlKSB7XHJcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cclxuICAgICAgICBjb25zdCBIb3N0TXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBjb25zdCBxdWV1ZSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEhvc3RNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5pc0FjdGl2ZSAmJiBpdGVtLmNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdxdWV1ZVN0YXR1cycsICcxJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBjaGVja01pY3JvVGFza1F1ZXVlKCk7XHJcbiAgICAgICAgICAgIG1pY3JvVGFza3MucHVzaChpdGVtKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB7XHJcbiAgICAgICAgICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcclxuICAgICAgICB9O1xyXG4gICAgICAgIGVucXVldWUoaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIGdldFF1ZXVlSGFuZGxlKGl0ZW0pO1xyXG4gICAgfTtcclxufSkoKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVldWUubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvcXVldWUubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L3F1ZXVlLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsIi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgdmFsdWUgcHJvcGVydHkgZGVzY3JpcHRvclxuICpcbiAqIEBwYXJhbSB2YWx1ZSAgICAgICAgVGhlIHZhbHVlIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHNob3VsZCBiZSBzZXQgdG9cbiAqIEBwYXJhbSBlbnVtZXJhYmxlICAgSWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBlbnVtYmVyYWJsZSwgZGVmYXVsdHMgdG8gZmFsc2VcbiAqIEBwYXJhbSB3cml0YWJsZSAgICAgSWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSB3cml0YWJsZSwgZGVmYXVsdHMgdG8gdHJ1ZVxuICogQHBhcmFtIGNvbmZpZ3VyYWJsZSBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSwgZGVmYXVsdHMgdG8gdHJ1ZVxuICogQHJldHVybiAgICAgICAgICAgICBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlRGVzY3JpcHRvcih2YWx1ZSwgZW51bWVyYWJsZSA9IGZhbHNlLCB3cml0YWJsZSA9IHRydWUsIGNvbmZpZ3VyYWJsZSA9IHRydWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVudW1lcmFibGU6IGVudW1lcmFibGUsXG4gICAgICAgIHdyaXRhYmxlOiB3cml0YWJsZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBjb25maWd1cmFibGVcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBOYXRpdmUobmF0aXZlRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmF0aXZlRnVuY3Rpb24uYXBwbHkodGFyZ2V0LCBhcmdzKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC91dGlsLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC91dGlsLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IEV2ZW50ZWQgfSBmcm9tICcuLi9jb3JlL0V2ZW50ZWQnO1xuZXhwb3J0IGNsYXNzIEluamVjdG9yIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgY29uc3RydWN0b3IocGF5bG9hZCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcbiAgICB9XG4gICAgc2V0SW52YWxpZGF0b3IoaW52YWxpZGF0b3IpIHtcbiAgICAgICAgdGhpcy5faW52YWxpZGF0b3IgPSBpbnZhbGlkYXRvcjtcbiAgICB9XG4gICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGF5bG9hZDtcbiAgICB9XG4gICAgc2V0KHBheWxvYWQpIHtcbiAgICAgICAgdGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgICAgIGlmICh0aGlzLl9pbnZhbGlkYXRvcikge1xuICAgICAgICAgICAgdGhpcy5faW52YWxpZGF0b3IoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEluamVjdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW5qZWN0b3IubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9JbmplY3Rvci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9JbmplY3Rvci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnLi4vY29yZS9FdmVudGVkJztcclxuaW1wb3J0IE1hcCBmcm9tICcuLi9zaGltL01hcCc7XHJcbi8qKlxyXG4gKiBFbnVtIHRvIGlkZW50aWZ5IHRoZSB0eXBlIG9mIGV2ZW50LlxyXG4gKiBMaXN0ZW5pbmcgdG8gJ1Byb2plY3Rvcicgd2lsbCBub3RpZnkgd2hlbiBwcm9qZWN0b3IgaXMgY3JlYXRlZCBvciB1cGRhdGVkXHJcbiAqIExpc3RlbmluZyB0byAnV2lkZ2V0JyB3aWxsIG5vdGlmeSB3aGVuIHdpZGdldCByb290IGlzIGNyZWF0ZWQgb3IgdXBkYXRlZFxyXG4gKi9cclxuZXhwb3J0IHZhciBOb2RlRXZlbnRUeXBlO1xyXG4oZnVuY3Rpb24gKE5vZGVFdmVudFR5cGUpIHtcclxuICAgIE5vZGVFdmVudFR5cGVbXCJQcm9qZWN0b3JcIl0gPSBcIlByb2plY3RvclwiO1xyXG4gICAgTm9kZUV2ZW50VHlwZVtcIldpZGdldFwiXSA9IFwiV2lkZ2V0XCI7XHJcbn0pKE5vZGVFdmVudFR5cGUgfHwgKE5vZGVFdmVudFR5cGUgPSB7fSkpO1xyXG5leHBvcnQgY2xhc3MgTm9kZUhhbmRsZXIgZXh0ZW5kcyBFdmVudGVkIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgdGhpcy5fbm9kZU1hcCA9IG5ldyBNYXAoKTtcclxuICAgIH1cclxuICAgIGdldChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZU1hcC5nZXQoa2V5KTtcclxuICAgIH1cclxuICAgIGhhcyhrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZU1hcC5oYXMoa2V5KTtcclxuICAgIH1cclxuICAgIGFkZChlbGVtZW50LCBrZXkpIHtcclxuICAgICAgICB0aGlzLl9ub2RlTWFwLnNldChrZXksIGVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6IGtleSB9KTtcclxuICAgIH1cclxuICAgIGFkZFJvb3QoKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZTogTm9kZUV2ZW50VHlwZS5XaWRnZXQgfSk7XHJcbiAgICB9XHJcbiAgICBhZGRQcm9qZWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZTogTm9kZUV2ZW50VHlwZS5Qcm9qZWN0b3IgfSk7XHJcbiAgICB9XHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLl9ub2RlTWFwLmNsZWFyKCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgTm9kZUhhbmRsZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vZGVIYW5kbGVyLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IFByb21pc2UgZnJvbSAnLi4vc2hpbS9Qcm9taXNlJztcclxuaW1wb3J0IE1hcCBmcm9tICcuLi9zaGltL01hcCc7XHJcbmltcG9ydCBTeW1ib2wgZnJvbSAnLi4vc2hpbS9TeW1ib2wnO1xyXG5pbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnLi4vY29yZS9FdmVudGVkJztcclxuLyoqXHJcbiAqIFdpZGdldCBiYXNlIHN5bWJvbCB0eXBlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgV0lER0VUX0JBU0VfVFlQRSA9IFN5bWJvbCgnV2lkZ2V0IEJhc2UnKTtcclxuLyoqXHJcbiAqIENoZWNrcyBpcyB0aGUgaXRlbSBpcyBhIHN1YmNsYXNzIG9mIFdpZGdldEJhc2UgKG9yIGEgV2lkZ2V0QmFzZSlcclxuICpcclxuICogQHBhcmFtIGl0ZW0gdGhlIGl0ZW0gdG8gY2hlY2tcclxuICogQHJldHVybnMgdHJ1ZS9mYWxzZSBpbmRpY2F0aW5nIGlmIHRoZSBpdGVtIGlzIGEgV2lkZ2V0QmFzZUNvbnN0cnVjdG9yXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkge1xyXG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJiBpdGVtLl90eXBlID09PSBXSURHRVRfQkFTRV9UWVBFKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQoaXRlbSkge1xyXG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJlxyXG4gICAgICAgIGl0ZW0uaGFzT3duUHJvcGVydHkoJ19fZXNNb2R1bGUnKSAmJlxyXG4gICAgICAgIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSAmJlxyXG4gICAgICAgIGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0uZGVmYXVsdCkpO1xyXG59XHJcbi8qKlxyXG4gKiBUaGUgUmVnaXN0cnkgaW1wbGVtZW50YXRpb25cclxuICovXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3RyeSBleHRlbmRzIEV2ZW50ZWQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0IGxvYWRlZCBldmVudCBmb3IgcmVnaXN0cnkgbGFiZWxcclxuICAgICAqL1xyXG4gICAgZW1pdExvYWRlZEV2ZW50KHdpZGdldExhYmVsLCBpdGVtKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KHtcclxuICAgICAgICAgICAgdHlwZTogd2lkZ2V0TGFiZWwsXHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xvYWRlZCcsXHJcbiAgICAgICAgICAgIGl0ZW1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGRlZmluZShsYWJlbCwgaXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLl93aWRnZXRSZWdpc3RyeSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdpZGdldCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgZm9yICcke2xhYmVsLnRvU3RyaW5nKCl9J2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIGl0ZW0pO1xyXG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICBpdGVtLnRoZW4oKHdpZGdldEN0b3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgd2lkZ2V0Q3Rvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgd2lkZ2V0Q3Rvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gd2lkZ2V0Q3RvcjtcclxuICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCBpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkZWZpbmVJbmplY3RvcihsYWJlbCwgaW5qZWN0b3JGYWN0b3J5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luamVjdG9yUmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5faW5qZWN0b3JSZWdpc3RyeS5oYXMobGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5qZWN0b3IgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnJHtsYWJlbC50b1N0cmluZygpfSdgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW52YWxpZGF0b3IgPSBuZXcgRXZlbnRlZCgpO1xyXG4gICAgICAgIGNvbnN0IGluamVjdG9ySXRlbSA9IHtcclxuICAgICAgICAgICAgaW5qZWN0b3I6IGluamVjdG9yRmFjdG9yeSgoKSA9PiBpbnZhbGlkYXRvci5lbWl0KHsgdHlwZTogJ2ludmFsaWRhdGUnIH0pKSxcclxuICAgICAgICAgICAgaW52YWxpZGF0b3JcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX2luamVjdG9yUmVnaXN0cnkuc2V0KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xyXG4gICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xyXG4gICAgfVxyXG4gICAgZ2V0KGxhYmVsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl93aWRnZXRSZWdpc3RyeSB8fCAhdGhpcy5oYXMobGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fd2lkZ2V0UmVnaXN0cnkuZ2V0KGxhYmVsKTtcclxuICAgICAgICBpZiAoaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IGl0ZW0oKTtcclxuICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIHByb21pc2UpO1xyXG4gICAgICAgIHByb21pc2UudGhlbigod2lkZ2V0Q3RvcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQod2lkZ2V0Q3RvcikpIHtcclxuICAgICAgICAgICAgICAgIHdpZGdldEN0b3IgPSB3aWRnZXRDdG9yLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCB3aWRnZXRDdG9yKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gd2lkZ2V0Q3RvcjtcclxuICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBnZXRJbmplY3RvcihsYWJlbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5faW5qZWN0b3JSZWdpc3RyeSB8fCAhdGhpcy5oYXNJbmplY3RvcihsYWJlbCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmdldChsYWJlbCk7XHJcbiAgICB9XHJcbiAgICBoYXMobGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLl93aWRnZXRSZWdpc3RyeSAmJiB0aGlzLl93aWRnZXRSZWdpc3RyeS5oYXMobGFiZWwpKTtcclxuICAgIH1cclxuICAgIGhhc0luamVjdG9yKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5faW5qZWN0b3JSZWdpc3RyeSAmJiB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmhhcyhsYWJlbCkpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFJlZ2lzdHJ5O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWdpc3RyeS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1JlZ2lzdHJ5Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1JlZ2lzdHJ5Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IE1hcCB9IGZyb20gJy4uL3NoaW0vTWFwJztcclxuaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJy4uL2NvcmUvRXZlbnRlZCc7XHJcbmltcG9ydCB7IFJlZ2lzdHJ5IH0gZnJvbSAnLi9SZWdpc3RyeSc7XHJcbmV4cG9ydCBjbGFzcyBSZWdpc3RyeUhhbmRsZXIgZXh0ZW5kcyBFdmVudGVkIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTtcclxuICAgICAgICB0aGlzLl9yZWdpc3RyeVdpZGdldExhYmVsTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XHJcbiAgICAgICAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeVdpZGdldExhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZVJlZ2lzdHJ5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm93bih7IGRlc3Ryb3kgfSk7XHJcbiAgICB9XHJcbiAgICBzZXQgYmFzZShiYXNlUmVnaXN0cnkpIHtcclxuICAgICAgICBpZiAodGhpcy5iYXNlUmVnaXN0cnkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5iYXNlUmVnaXN0cnkgPSBiYXNlUmVnaXN0cnk7XHJcbiAgICB9XHJcbiAgICBkZWZpbmUobGFiZWwsIHdpZGdldCkge1xyXG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmRlZmluZShsYWJlbCwgd2lkZ2V0KTtcclxuICAgIH1cclxuICAgIGRlZmluZUluamVjdG9yKGxhYmVsLCBpbmplY3Rvcikge1xyXG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmRlZmluZUluamVjdG9yKGxhYmVsLCBpbmplY3Rvcik7XHJcbiAgICB9XHJcbiAgICBoYXMobGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVnaXN0cnkuaGFzKGxhYmVsKSB8fCBCb29sZWFuKHRoaXMuYmFzZVJlZ2lzdHJ5ICYmIHRoaXMuYmFzZVJlZ2lzdHJ5LmhhcyhsYWJlbCkpO1xyXG4gICAgfVxyXG4gICAgaGFzSW5qZWN0b3IobGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpIHx8IEJvb2xlYW4odGhpcy5iYXNlUmVnaXN0cnkgJiYgdGhpcy5iYXNlUmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpKTtcclxuICAgIH1cclxuICAgIGdldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSwgJ2dldCcsIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXApO1xyXG4gICAgfVxyXG4gICAgZ2V0SW5qZWN0b3IobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UgPSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsICdnZXRJbmplY3RvcicsIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcCk7XHJcbiAgICB9XHJcbiAgICBfZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCBnZXRGdW5jdGlvbk5hbWUsIGxhYmVsTWFwKSB7XHJcbiAgICAgICAgY29uc3QgcmVnaXN0cmllcyA9IGdsb2JhbFByZWNlZGVuY2UgPyBbdGhpcy5iYXNlUmVnaXN0cnksIHRoaXMuX3JlZ2lzdHJ5XSA6IFt0aGlzLl9yZWdpc3RyeSwgdGhpcy5iYXNlUmVnaXN0cnldO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVnaXN0cmllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IHJlZ2lzdHJpZXNbaV07XHJcbiAgICAgICAgICAgIGlmICghcmVnaXN0cnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZWdpc3RyeVtnZXRGdW5jdGlvbk5hbWVdKGxhYmVsKTtcclxuICAgICAgICAgICAgY29uc3QgcmVnaXN0ZXJlZExhYmVscyA9IGxhYmVsTWFwLmdldChyZWdpc3RyeSkgfHwgW107XHJcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyZWdpc3RlcmVkTGFiZWxzLmluZGV4T2YobGFiZWwpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gcmVnaXN0cnkub24obGFiZWwsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdsb2FkZWQnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbZ2V0RnVuY3Rpb25OYW1lXShsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSkgPT09IGV2ZW50Lml0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KHsgdHlwZTogJ2ludmFsaWRhdGUnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vd24oaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgIGxhYmVsTWFwLnNldChyZWdpc3RyeSwgWy4uLnJlZ2lzdGVyZWRMYWJlbHMsIGxhYmVsXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgUmVnaXN0cnlIYW5kbGVyO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWdpc3RyeUhhbmRsZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvUmVnaXN0cnlIYW5kbGVyLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBNYXAgZnJvbSAnLi4vc2hpbS9NYXAnO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnLi4vc2hpbS9XZWFrTWFwJztcbmltcG9ydCBTeW1ib2wgZnJvbSAnLi4vc2hpbS9TeW1ib2wnO1xuaW1wb3J0IHsgdiB9IGZyb20gJy4vZCc7XG5pbXBvcnQgeyBhdXRvIH0gZnJvbSAnLi9kaWZmJztcbmltcG9ydCBSZWdpc3RyeUhhbmRsZXIgZnJvbSAnLi9SZWdpc3RyeUhhbmRsZXInO1xuaW1wb3J0IE5vZGVIYW5kbGVyIGZyb20gJy4vTm9kZUhhbmRsZXInO1xuaW1wb3J0IHsgd2lkZ2V0SW5zdGFuY2VNYXAgfSBmcm9tICcuL3Zkb20nO1xuaW1wb3J0IHsgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IsIFdJREdFVF9CQVNFX1RZUEUgfSBmcm9tICcuL1JlZ2lzdHJ5JztcbmNvbnN0IGRlY29yYXRvck1hcCA9IG5ldyBNYXAoKTtcbmNvbnN0IGJvdW5kQXV0byA9IGF1dG8uYmluZChudWxsKTtcbmV4cG9ydCBjb25zdCBub0JpbmQgPSBTeW1ib2wuZm9yKCdkb2pvTm9CaW5kJyk7XG4vKipcbiAqIE1haW4gd2lkZ2V0IGJhc2UgZm9yIGFsbCB3aWRnZXRzIHRvIGV4dGVuZFxuICovXG5leHBvcnQgY2xhc3MgV2lkZ2V0QmFzZSB7XG4gICAgLyoqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgaWYgaXQgaXMgdGhlIGluaXRpYWwgc2V0IHByb3BlcnRpZXMgY3ljbGVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFycmF5IG9mIHByb3BlcnR5IGtleXMgY29uc2lkZXJlZCBjaGFuZ2VkIGZyb20gdGhlIHByZXZpb3VzIHNldCBwcm9wZXJ0aWVzXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gW107XG4gICAgICAgIHRoaXMuX25vZGVIYW5kbGVyID0gbmV3IE5vZGVIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJGdW5jID0gdGhpcy5yZW5kZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYm91bmRJbnZhbGlkYXRlID0gdGhpcy5pbnZhbGlkYXRlLmJpbmQodGhpcyk7XG4gICAgICAgIHdpZGdldEluc3RhbmNlTWFwLnNldCh0aGlzLCB7XG4gICAgICAgICAgICBkaXJ0eTogdHJ1ZSxcbiAgICAgICAgICAgIG9uQXR0YWNoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkF0dGFjaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRGV0YWNoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRldGFjaCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vZGVIYW5kbGVyOiB0aGlzLl9ub2RlSGFuZGxlcixcbiAgICAgICAgICAgIHJlZ2lzdHJ5OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29yZVByb3BlcnRpZXM6IHt9LFxuICAgICAgICAgICAgcmVuZGVyaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlucHV0UHJvcGVydGllczoge31cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3J1bkFmdGVyQ29uc3RydWN0b3JzKCk7XG4gICAgfVxuICAgIG1ldGEoTWV0YVR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX21ldGFNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FjaGVkID0gdGhpcy5fbWV0YU1hcC5nZXQoTWV0YVR5cGUpO1xuICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgY2FjaGVkID0gbmV3IE1ldGFUeXBlKHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlOiB0aGlzLl9ib3VuZEludmFsaWRhdGUsXG4gICAgICAgICAgICAgICAgbm9kZUhhbmRsZXI6IHRoaXMuX25vZGVIYW5kbGVyLFxuICAgICAgICAgICAgICAgIGJpbmQ6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vd24oY2FjaGVkKTtcbiAgICAgICAgICAgIHRoaXMuX21ldGFNYXAuc2V0KE1ldGFUeXBlLCBjYWNoZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIG9uQXR0YWNoKCkge1xuICAgICAgICAvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4gICAgfVxuICAgIG9uRGV0YWNoKCkge1xuICAgICAgICAvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4gICAgfVxuICAgIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllcztcbiAgICB9XG4gICAgZ2V0IGNoYW5nZWRQcm9wZXJ0eUtleXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5c107XG4gICAgfVxuICAgIF9fc2V0Q29yZVByb3BlcnRpZXNfXyhjb3JlUHJvcGVydGllcykge1xuICAgICAgICBjb25zdCB7IGJhc2VSZWdpc3RyeSB9ID0gY29yZVByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iYXNlUmVnaXN0cnkgIT09IGJhc2VSZWdpc3RyeSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vd24odGhpcy5fcmVnaXN0cnkub24oJ2ludmFsaWRhdGUnLCB0aGlzLl9ib3VuZEludmFsaWRhdGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmJhc2UgPSBiYXNlUmVnaXN0cnk7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMgPSBjb3JlUHJvcGVydGllcztcbiAgICB9XG4gICAgX19zZXRQcm9wZXJ0aWVzX18ob3JpZ2luYWxQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLmlucHV0UHJvcGVydGllcyA9IG9yaWdpbmFsUHJvcGVydGllcztcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX3J1bkJlZm9yZVByb3BlcnRpZXMob3JpZ2luYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ3JlZ2lzdGVyZWREaWZmUHJvcGVydHknKTtcbiAgICAgICAgY29uc3QgY2hhbmdlZFByb3BlcnR5S2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyk7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWFsUHJvcGVydGllcyA9PT0gZmFsc2UgfHwgcmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgYWxsUHJvcGVydGllcyA9IFsuLi5wcm9wZXJ0eU5hbWVzLCAuLi5PYmplY3Qua2V5cyh0aGlzLl9wcm9wZXJ0aWVzKV07XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkUHJvcGVydGllcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZGlmZlByb3BlcnR5UmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgbGV0IHJ1blJlYWN0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZFByb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hlY2tlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUHJvcGVydHkgPSB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UHJvcGVydHkgPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0sIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iaW5kKTtcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuUmVhY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZkZ1bmN0aW9ucyA9IHRoaXMuZ2V0RGVjb3JhdG9yKGBkaWZmUHJvcGVydHk6JHtwcm9wZXJ0eU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZkZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGlmZkZ1bmN0aW9uc1tpXShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNoYW5nZWQgJiYgY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lIGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmUHJvcGVydHlSZXN1bHRzW3Byb3BlcnR5TmFtZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGJvdW5kQXV0byhwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlZCAmJiBjaGFuZ2VkUHJvcGVydHlLZXlzLmluZGV4T2YocHJvcGVydHlOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0eUtleXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlmZlByb3BlcnR5UmVzdWx0c1twcm9wZXJ0eU5hbWVdID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1blJlYWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWN0aW9uRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkUmVhY3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgcmVhY3Rpb25GdW5jdGlvbnMuZm9yRWFjaCgoeyByZWFjdGlvbiwgcHJvcGVydHlOYW1lIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlDaGFuZ2VkID0gY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFjdGlvblJ1biA9IGV4ZWN1dGVkUmVhY3Rpb25zLmluZGV4T2YocmVhY3Rpb24pICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5Q2hhbmdlZCAmJiAhcmVhY3Rpb25SdW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmNhbGwodGhpcywgdGhpcy5fcHJvcGVydGllcywgZGlmZlByb3BlcnR5UmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZFJlYWN0aW9ucy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IGRpZmZQcm9wZXJ0eVJlc3VsdHM7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gY2hhbmdlZFByb3BlcnR5S2V5cztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWVzW2ldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSwgaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJpbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cyA9IGNoYW5nZWRQcm9wZXJ0eUtleXM7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gICAgfVxuICAgIF9fc2V0Q2hpbGRyZW5fXyhjaGlsZHJlbikge1xuICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW4ubGVuZ3RoID4gMCB8fCBjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX19yZW5kZXJfXygpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpbnN0YW5jZURhdGEuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gdGhpcy5fcnVuQmVmb3JlUmVuZGVycygpO1xuICAgICAgICBsZXQgZE5vZGUgPSByZW5kZXIoKTtcbiAgICAgICAgZE5vZGUgPSB0aGlzLnJ1bkFmdGVyUmVuZGVycyhkTm9kZSk7XG4gICAgICAgIHRoaXMuX25vZGVIYW5kbGVyLmNsZWFyKCk7XG4gICAgICAgIHJldHVybiBkTm9kZTtcbiAgICB9XG4gICAgaW52YWxpZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmludmFsaWRhdGUpIHtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdignZGl2Jywge30sIHRoaXMuY2hpbGRyZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBhZGQgZGVjb3JhdG9ycyB0byBXaWRnZXRCYXNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGRlY29yYXRvclxuICAgICAqL1xuICAgIGFkZERlY29yYXRvcihkZWNvcmF0b3JLZXksIHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KCdjb25zdHJ1Y3RvcicpKSB7XG4gICAgICAgICAgICBsZXQgZGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvck1hcC5nZXQodGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICBpZiAoIWRlY29yYXRvckxpc3QpIHtcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JMaXN0ID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgICAgIGRlY29yYXRvck1hcC5zZXQodGhpcy5jb25zdHJ1Y3RvciwgZGVjb3JhdG9yTGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc3BlY2lmaWNEZWNvcmF0b3JMaXN0ID0gZGVjb3JhdG9yTGlzdC5nZXQoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgICAgIGlmICghc3BlY2lmaWNEZWNvcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgc3BlY2lmaWNEZWNvcmF0b3JMaXN0ID0gW107XG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yTGlzdC5zZXQoZGVjb3JhdG9yS2V5LCBzcGVjaWZpY0RlY29yYXRvckxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3BlY2lmaWNEZWNvcmF0b3JMaXN0LnB1c2goLi4udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICB0aGlzLl9kZWNvcmF0b3JDYWNoZS5zZXQoZGVjb3JhdG9yS2V5LCBbLi4uZGVjb3JhdG9ycywgLi4udmFsdWVdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBidWlsZCB0aGUgbGlzdCBvZiBkZWNvcmF0b3JzIGZyb20gdGhlIGdsb2JhbCBkZWNvcmF0b3IgbWFwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSAgVGhlIGtleSBvZiB0aGUgZGVjb3JhdG9yXG4gICAgICogQHJldHVybiBBbiBhcnJheSBvZiBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYnVpbGREZWNvcmF0b3JMaXN0KGRlY29yYXRvcktleSkge1xuICAgICAgICBjb25zdCBhbGxEZWNvcmF0b3JzID0gW107XG4gICAgICAgIGxldCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgIHdoaWxlIChjb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VNYXAgPSBkZWNvcmF0b3JNYXAuZ2V0KGNvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU1hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBpbnN0YW5jZU1hcC5nZXQoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdG9ycykge1xuICAgICAgICAgICAgICAgICAgICBhbGxEZWNvcmF0b3JzLnVuc2hpZnQoLi4uZGVjb3JhdG9ycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY29uc3RydWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byByZXRyaWV2ZSBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGRlY29yYXRvciB2YWx1ZXNcbiAgICAgKi9cbiAgICBnZXREZWNvcmF0b3IoZGVjb3JhdG9yS2V5KSB7XG4gICAgICAgIGxldCBhbGxEZWNvcmF0b3JzID0gdGhpcy5fZGVjb3JhdG9yQ2FjaGUuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgIGlmIChhbGxEZWNvcmF0b3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgICAgICB9XG4gICAgICAgIGFsbERlY29yYXRvcnMgPSB0aGlzLl9idWlsZERlY29yYXRvckxpc3QoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgYWxsRGVjb3JhdG9ycyk7XG4gICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCaW5kcyB1bmJvdW5kIHByb3BlcnR5IGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBiaW5kYCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgZnVuY3Rpb25zXG4gICAgICovXG4gICAgX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnR5LCBiaW5kKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIXByb3BlcnR5W25vQmluZF0gJiYgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IocHJvcGVydHkpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiaW5kSW5mbyA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwLmdldChwcm9wZXJ0eSkgfHwge307XG4gICAgICAgICAgICBsZXQgeyBib3VuZEZ1bmMsIHNjb3BlIH0gPSBiaW5kSW5mbztcbiAgICAgICAgICAgIGlmIChib3VuZEZ1bmMgPT09IHVuZGVmaW5lZCB8fCBzY29wZSAhPT0gYmluZCkge1xuICAgICAgICAgICAgICAgIGJvdW5kRnVuYyA9IHByb3BlcnR5LmJpbmQoYmluZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAuc2V0KHByb3BlcnR5LCB7IGJvdW5kRnVuYywgc2NvcGU6IGJpbmQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm91bmRGdW5jO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gICAgZ2V0IHJlZ2lzdHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyKCk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeTtcbiAgICB9XG4gICAgX3J1bkJlZm9yZVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBiZWZvcmVQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnKTtcbiAgICAgICAgaWYgKGJlZm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJlZm9yZVByb3BlcnRpZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBiZWZvcmVQcm9wZXJ0aWVzRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uLmNhbGwodGhpcywgcHJvcGVydGllcykpO1xuICAgICAgICAgICAgfSwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYmVmb3JlIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgdXBkYXRlZCByZW5kZXIgbWV0aG9kXG4gICAgICovXG4gICAgX3J1bkJlZm9yZVJlbmRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZVJlbmRlcnMgPSB0aGlzLmdldERlY29yYXRvcignYmVmb3JlUmVuZGVyJyk7XG4gICAgICAgIGlmIChiZWZvcmVSZW5kZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmVSZW5kZXJzLnJlZHVjZSgocmVuZGVyLCBiZWZvcmVSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZW5kZXIgPSBiZWZvcmVSZW5kZXJGdW5jdGlvbi5jYWxsKHRoaXMsIHJlbmRlciwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlciBmdW5jdGlvbiBub3QgcmV0dXJuZWQgZnJvbSBiZWZvcmVSZW5kZXIsIHVzaW5nIHByZXZpb3VzIHJlbmRlcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZFJlbmRlcjtcbiAgICAgICAgICAgIH0sIHRoaXMuX2JvdW5kUmVuZGVyRnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kUmVuZGVyRnVuYztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGFsbCByZWdpc3RlcmVkIGFmdGVyIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgZGVjb3JhdGVkIEROb2Rlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGROb2RlIFRoZSBETm9kZXMgdG8gcnVuIHRocm91Z2ggdGhlIGFmdGVyIHJlbmRlcnNcbiAgICAgKi9cbiAgICBydW5BZnRlclJlbmRlcnMoZE5vZGUpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJSZW5kZXJzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJyk7XG4gICAgICAgIGlmIChhZnRlclJlbmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZE5vZGUgPSBhZnRlclJlbmRlcnMucmVkdWNlKChkTm9kZSwgYWZ0ZXJSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZnRlclJlbmRlckZ1bmN0aW9uLmNhbGwodGhpcywgZE5vZGUpO1xuICAgICAgICAgICAgfSwgZE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9tZXRhTWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX21ldGFNYXAuZm9yRWFjaCgobWV0YSkgPT4ge1xuICAgICAgICAgICAgICAgIG1ldGEuYWZ0ZXJSZW5kZXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkTm9kZTtcbiAgICB9XG4gICAgX3J1bkFmdGVyQ29uc3RydWN0b3JzKCkge1xuICAgICAgICBjb25zdCBhZnRlckNvbnN0cnVjdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdhZnRlckNvbnN0cnVjdG9yJyk7XG4gICAgICAgIGlmIChhZnRlckNvbnN0cnVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhZnRlckNvbnN0cnVjdG9ycy5mb3JFYWNoKChhZnRlckNvbnN0cnVjdG9yKSA9PiBhZnRlckNvbnN0cnVjdG9yLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG93bihoYW5kbGUpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLl9oYW5kbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IHRoaXMuX2hhbmRsZXMucG9wKCk7XG4gICAgICAgICAgICBpZiAoaGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogc3RhdGljIGlkZW50aWZpZXJcbiAqL1xuV2lkZ2V0QmFzZS5fdHlwZSA9IFdJREdFVF9CQVNFX1RZUEU7XG5leHBvcnQgZGVmYXVsdCBXaWRnZXRCYXNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2lkZ2V0QmFzZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1dpZGdldEJhc2UubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJsZXQgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICcnO1xubGV0IGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9ICcnO1xuZnVuY3Rpb24gZGV0ZXJtaW5lQnJvd3NlclN0eWxlTmFtZXMoZWxlbWVudCkge1xuICAgIGlmICgnV2Via2l0VHJhbnNpdGlvbicgaW4gZWxlbWVudC5zdHlsZSkge1xuICAgICAgICBicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICAgICAgICBicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnd2Via2l0QW5pbWF0aW9uRW5kJztcbiAgICB9XG4gICAgZWxzZSBpZiAoJ3RyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUgfHwgJ01velRyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUpIHtcbiAgICAgICAgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICd0cmFuc2l0aW9uZW5kJztcbiAgICAgICAgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJ2FuaW1hdGlvbmVuZCc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdXIgYnJvd3NlciBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZShlbGVtZW50KSB7XG4gICAgaWYgKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9PT0gJycpIHtcbiAgICAgICAgZGV0ZXJtaW5lQnJvd3NlclN0eWxlTmFtZXMoZWxlbWVudCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcnVuQW5kQ2xlYW5VcChlbGVtZW50LCBzdGFydEFuaW1hdGlvbiwgZmluaXNoQW5pbWF0aW9uKSB7XG4gICAgaW5pdGlhbGl6ZShlbGVtZW50KTtcbiAgICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcbiAgICBsZXQgdHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICBmaW5pc2hBbmltYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc3RhcnRBbmltYXRpb24oKTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG59XG5mdW5jdGlvbiBleGl0KG5vZGUsIHByb3BlcnRpZXMsIGV4aXRBbmltYXRpb24sIHJlbW92ZU5vZGUpIHtcbiAgICBjb25zdCBhY3RpdmVDbGFzcyA9IHByb3BlcnRpZXMuZXhpdEFuaW1hdGlvbkFjdGl2ZSB8fCBgJHtleGl0QW5pbWF0aW9ufS1hY3RpdmVgO1xuICAgIHJ1bkFuZENsZWFuVXAobm9kZSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoZXhpdEFuaW1hdGlvbik7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoYWN0aXZlQ2xhc3MpO1xuICAgICAgICB9KTtcbiAgICB9LCAoKSA9PiB7XG4gICAgICAgIHJlbW92ZU5vZGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGVudGVyKG5vZGUsIHByb3BlcnRpZXMsIGVudGVyQW5pbWF0aW9uKSB7XG4gICAgY29uc3QgYWN0aXZlQ2xhc3MgPSBwcm9wZXJ0aWVzLmVudGVyQW5pbWF0aW9uQWN0aXZlIHx8IGAke2VudGVyQW5pbWF0aW9ufS1hY3RpdmVgO1xuICAgIHJ1bkFuZENsZWFuVXAobm9kZSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoZW50ZXJBbmltYXRpb24pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoZW50ZXJBbmltYXRpb24pO1xuICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoYWN0aXZlQ2xhc3MpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGVudGVyLFxuICAgIGV4aXRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jc3NUcmFuc2l0aW9ucy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4uL3NoaW0vU3ltYm9sJztcbi8qKlxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFdOb2RlIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IFdOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFdOb2RlLicpO1xuLyoqXG4gKiBUaGUgc3ltYm9sIGlkZW50aWZpZXIgZm9yIGEgVk5vZGUgdHlwZVxuICovXG5leHBvcnQgY29uc3QgVk5PREUgPSBTeW1ib2woJ0lkZW50aWZpZXIgZm9yIGEgVk5vZGUuJyk7XG4vKipcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBWTm9kZSB0eXBlIGNyZWF0ZWQgdXNpbmcgZG9tKClcbiAqL1xuZXhwb3J0IGNvbnN0IERPTVZOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFZOb2RlIGNyZWF0ZWQgdXNpbmcgZXhpc3RpbmcgZG9tLicpO1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgV05vZGVgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV05vZGUoY2hpbGQpIHtcbiAgICByZXR1cm4gQm9vbGVhbihjaGlsZCAmJiB0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnICYmIGNoaWxkLnR5cGUgPT09IFdOT0RFKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFZOb2RlYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZOb2RlKGNoaWxkKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiAoY2hpbGQudHlwZSA9PT0gVk5PREUgfHwgY2hpbGQudHlwZSA9PT0gRE9NVk5PREUpKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFZOb2RlYCBjcmVhdGVkIHdpdGggYGRvbSgpYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RvbVZOb2RlKGNoaWxkKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiBjaGlsZC50eXBlID09PSBET01WTk9ERSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50Tm9kZSh2YWx1ZSkge1xuICAgIHJldHVybiAhIXZhbHVlLnRhZ05hbWU7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGUoZE5vZGVzLCBvcHRpb25zT3JNb2RpZmllciwgcHJlZGljYXRlKSB7XG4gICAgbGV0IHNoYWxsb3cgPSBmYWxzZTtcbiAgICBsZXQgbW9kaWZpZXI7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JNb2RpZmllciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBtb2RpZmllciA9IG9wdGlvbnNPck1vZGlmaWVyO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbW9kaWZpZXIgPSBvcHRpb25zT3JNb2RpZmllci5tb2RpZmllcjtcbiAgICAgICAgcHJlZGljYXRlID0gb3B0aW9uc09yTW9kaWZpZXIucHJlZGljYXRlO1xuICAgICAgICBzaGFsbG93ID0gb3B0aW9uc09yTW9kaWZpZXIuc2hhbGxvdyB8fCBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG5vZGVzID0gQXJyYXkuaXNBcnJheShkTm9kZXMpID8gWy4uLmROb2Rlc10gOiBbZE5vZGVzXTtcbiAgICBmdW5jdGlvbiBicmVha2VyKCkge1xuICAgICAgICBub2RlcyA9IFtdO1xuICAgIH1cbiAgICB3aGlsZSAobm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5zaGlmdCgpO1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKCFzaGFsbG93ICYmIChpc1dOb2RlKG5vZGUpIHx8IGlzVk5vZGUobm9kZSkpICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBub2RlcyA9IFsuLi5ub2RlcywgLi4ubm9kZS5jaGlsZHJlbl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllcihub2RlLCBicmVha2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZE5vZGVzO1xufVxuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciBjYWxscyB0byBjcmVhdGUgYSB3aWRnZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3KHdpZGdldENvbnN0cnVjdG9yLCBwcm9wZXJ0aWVzLCBjaGlsZHJlbiA9IFtdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHdpZGdldENvbnN0cnVjdG9yLFxuICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICB0eXBlOiBXTk9ERVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gdih0YWcsIHByb3BlcnRpZXNPckNoaWxkcmVuID0ge30sIGNoaWxkcmVuID0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzT3JDaGlsZHJlbjtcbiAgICBsZXQgZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2s7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydGllc09yQ2hpbGRyZW4pKSB7XG4gICAgICAgIGNoaWxkcmVuID0gcHJvcGVydGllc09yQ2hpbGRyZW47XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID0gcHJvcGVydGllcztcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0YWcsXG4gICAgICAgIGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgdHlwZTogVk5PREVcbiAgICB9O1xufVxuLyoqXG4gKiBDcmVhdGUgYSBWTm9kZSBmb3IgYW4gZXhpc3RpbmcgRE9NIE5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb20oeyBub2RlLCBhdHRycyA9IHt9LCBwcm9wcyA9IHt9LCBvbiA9IHt9LCBkaWZmVHlwZSA9ICdub25lJyB9LCBjaGlsZHJlbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogaXNFbGVtZW50Tm9kZShub2RlKSA/IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpIDogJycsXG4gICAgICAgIHByb3BlcnRpZXM6IHByb3BzLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRycyxcbiAgICAgICAgZXZlbnRzOiBvbixcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHR5cGU6IERPTVZOT0RFLFxuICAgICAgICBkb21Ob2RlOiBub2RlLFxuICAgICAgICB0ZXh0OiBpc0VsZW1lbnROb2RlKG5vZGUpID8gdW5kZWZpbmVkIDogbm9kZS5kYXRhLFxuICAgICAgICBkaWZmVHlwZVxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmV4cG9ydCBmdW5jdGlvbiBhZnRlclJlbmRlcihtZXRob2QpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJywgcHJvcGVydHlLZXkgPyB0YXJnZXRbcHJvcGVydHlLZXldIDogbWV0aG9kKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGFmdGVyUmVuZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWZ0ZXJSZW5kZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuaW1wb3J0IHsgYmVmb3JlUHJvcGVydGllcyB9IGZyb20gJy4vYmVmb3JlUHJvcGVydGllcyc7XG5leHBvcnQgZnVuY3Rpb24gYWx3YXlzUmVuZGVyKCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgYmVmb3JlUHJvcGVydGllcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICAgICAgfSkodGFyZ2V0KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGFsd2F5c1JlbmRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFsd2F5c1JlbmRlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmV4cG9ydCBmdW5jdGlvbiBiZWZvcmVQcm9wZXJ0aWVzKG1ldGhvZCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmVmb3JlUHJvcGVydGllcycsIHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IG1ldGhvZCk7XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBiZWZvcmVQcm9wZXJ0aWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmVmb3JlUHJvcGVydGllcy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYmVmb3JlUHJvcGVydGllcy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2JlZm9yZVByb3BlcnRpZXMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgQ3VzdG9tRWxlbWVudENoaWxkVHlwZSB9IGZyb20gJy4uL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCc7XG5pbXBvcnQgUmVnaXN0cnkgZnJvbSAnLi4vUmVnaXN0cnknO1xuLyoqXG4gKiBUaGlzIERlY29yYXRvciBpcyBwcm92aWRlZCBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIHRoZSBiZWhhdmlvciBvZiBhIGN1c3RvbSBlbGVtZW50LCBhbmRcbiAqIHJlZ2lzdGVycyB0aGF0IGN1c3RvbSBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tRWxlbWVudCh7IHRhZywgcHJvcGVydGllcyA9IFtdLCBhdHRyaWJ1dGVzID0gW10sIGV2ZW50cyA9IFtdLCBjaGlsZFR5cGUgPSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8sIHJlZ2lzdHJ5RmFjdG9yeSA9ICgpID0+IG5ldyBSZWdpc3RyeSgpIH0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICB0YXJnZXQucHJvdG90eXBlLl9fY3VzdG9tRWxlbWVudERlc2NyaXB0b3IgPSB7XG4gICAgICAgICAgICB0YWdOYW1lOiB0YWcsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICAgIGNoaWxkVHlwZSxcbiAgICAgICAgICAgIHJlZ2lzdHJ5RmFjdG9yeVxuICAgICAgICB9O1xuICAgIH07XG59XG5leHBvcnQgZGVmYXVsdCBjdXN0b21FbGVtZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3VzdG9tRWxlbWVudC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvY3VzdG9tRWxlbWVudC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuaW1wb3J0IHsgYXV0byB9IGZyb20gJy4vLi4vZGlmZic7XG4vKipcbiAqIERlY29yYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZ2lzdGVyIGEgZnVuY3Rpb24gYXMgYSBzcGVjaWZpYyBwcm9wZXJ0eSBkaWZmXG4gKlxuICogQHBhcmFtIHByb3BlcnR5TmFtZSAgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IG9mIHdoaWNoIHRoZSBkaWZmIGZ1bmN0aW9uIGlzIGFwcGxpZWRcbiAqIEBwYXJhbSBkaWZmVHlwZSAgICAgIFRoZSBkaWZmIHR5cGUsIGRlZmF1bHQgaXMgRGlmZlR5cGUuQVVUTy5cbiAqIEBwYXJhbSBkaWZmRnVuY3Rpb24gIEEgZGlmZiBmdW5jdGlvbiB0byBydW4gaWYgZGlmZlR5cGUgaWYgRGlmZlR5cGUuQ1VTVE9NXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmUHJvcGVydHkocHJvcGVydHlOYW1lLCBkaWZmRnVuY3Rpb24gPSBhdXRvLCByZWFjdGlvbkZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKGBkaWZmUHJvcGVydHk6JHtwcm9wZXJ0eU5hbWV9YCwgZGlmZkZ1bmN0aW9uLmJpbmQobnVsbCkpO1xuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdyZWdpc3RlcmVkRGlmZlByb3BlcnR5JywgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKHJlYWN0aW9uRnVuY3Rpb24gfHwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicsIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgICAgcmVhY3Rpb246IHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IHJlYWN0aW9uRnVuY3Rpb25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBkaWZmUHJvcGVydHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaWZmUHJvcGVydHkubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCIvKipcbiAqIEdlbmVyaWMgZGVjb3JhdG9yIGhhbmRsZXIgdG8gdGFrZSBjYXJlIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBkZWNvcmF0b3Igd2FzIGNhbGxlZCBhdCB0aGUgY2xhc3MgbGV2ZWxcbiAqIG9yIHRoZSBtZXRob2QgbGV2ZWwuXG4gKlxuICogQHBhcmFtIGhhbmRsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRvcihoYW5kbGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBoYW5kbGVyKHRhcmdldC5wcm90b3R5cGUsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVyKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZURlY29yYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbmRsZURlY29yYXRvci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBXZWFrTWFwIGZyb20gJy4uLy4uL3NoaW0vV2Vha01hcCc7XG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0b3IgfSBmcm9tICcuL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBiZWZvcmVQcm9wZXJ0aWVzIH0gZnJvbSAnLi9iZWZvcmVQcm9wZXJ0aWVzJztcbi8qKlxuICogTWFwIG9mIGluc3RhbmNlcyBhZ2FpbnN0IHJlZ2lzdGVyZWQgaW5qZWN0b3JzLlxuICovXG5jb25zdCByZWdpc3RlcmVkSW5qZWN0b3JzTWFwID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogRGVjb3JhdG9yIHJldHJpZXZlcyBhbiBpbmplY3RvciBmcm9tIGFuIGF2YWlsYWJsZSByZWdpc3RyeSB1c2luZyB0aGUgbmFtZSBhbmRcbiAqIGNhbGxzIHRoZSBgZ2V0UHJvcGVydGllc2AgZnVuY3Rpb24gd2l0aCB0aGUgcGF5bG9hZCBmcm9tIHRoZSBpbmplY3RvclxuICogYW5kIGN1cnJlbnQgcHJvcGVydGllcyB3aXRoIHRoZSB0aGUgaW5qZWN0ZWQgcHJvcGVydGllcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gSW5qZWN0Q29uZmlnIHRoZSBpbmplY3QgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KHsgbmFtZSwgZ2V0UHJvcGVydGllcyB9KSB7XG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgICAgICBiZWZvcmVQcm9wZXJ0aWVzKGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBpbmplY3Rvckl0ZW0gPSB0aGlzLnJlZ2lzdHJ5LmdldEluamVjdG9yKG5hbWUpO1xuICAgICAgICAgICAgaWYgKGluamVjdG9ySXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaW5qZWN0b3IsIGludmFsaWRhdG9yIH0gPSBpbmplY3Rvckl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnaXN0ZXJlZEluamVjdG9ycyA9IHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAuZ2V0KHRoaXMpIHx8IFtdO1xuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RlcmVkSW5qZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkSW5qZWN0b3JzTWFwLnNldCh0aGlzLCByZWdpc3RlcmVkSW5qZWN0b3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVyZWRJbmplY3RvcnMuaW5kZXhPZihpbmplY3Rvckl0ZW0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm93bihpbnZhbGlkYXRvci5vbignaW52YWxpZGF0ZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRJbmplY3RvcnMucHVzaChpbmplY3Rvckl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydGllcyhpbmplY3RvcigpLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkodGFyZ2V0KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGluamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluamVjdC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IFdJREdFVF9CQVNFX1RZUEUgfSBmcm9tICcuL1JlZ2lzdHJ5JztcbmZ1bmN0aW9uIGlzT2JqZWN0T3JBcnJheSh2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhbHdheXMocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5nZWQ6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5nZWQ6IHByZXZpb3VzUHJvcGVydHkgIT09IG5ld1Byb3BlcnR5LFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3cocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHZhbGlkT2xkUHJvcGVydHkgPSBwcmV2aW91c1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShwcmV2aW91c1Byb3BlcnR5KTtcbiAgICBjb25zdCB2YWxpZE5ld1Byb3BlcnR5ID0gbmV3UHJvcGVydHkgJiYgaXNPYmplY3RPckFycmF5KG5ld1Byb3BlcnR5KTtcbiAgICBpZiAoIXZhbGlkT2xkUHJvcGVydHkgfHwgIXZhbGlkTmV3UHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoYW5nZWQ6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNLZXlzID0gT2JqZWN0LmtleXMocHJldmlvdXNQcm9wZXJ0eSk7XG4gICAgY29uc3QgbmV3S2V5cyA9IE9iamVjdC5rZXlzKG5ld1Byb3BlcnR5KTtcbiAgICBpZiAocHJldmlvdXNLZXlzLmxlbmd0aCAhPT0gbmV3S2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjaGFuZ2VkID0gbmV3S2V5cy5zb21lKChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXdQcm9wZXJ0eVtrZXldICE9PSBwcmV2aW91c1Byb3BlcnR5W2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkLFxuICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGF1dG8ocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0eXBlb2YgbmV3UHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKG5ld1Byb3BlcnR5Ll90eXBlID09PSBXSURHRVRfQkFTRV9UWVBFKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZWZlcmVuY2UocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gaWdub3JlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdE9yQXJyYXkobmV3UHJvcGVydHkpKSB7XG4gICAgICAgIHJlc3VsdCA9IHNoYWxsb3cocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpZmYubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kaWZmLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RpZmYubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4uLy4uL2NvcmUvbGFuZyc7XG5pbXBvcnQgY3NzVHJhbnNpdGlvbnMgZnJvbSAnLi4vYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucyc7XG5pbXBvcnQgeyBhZnRlclJlbmRlciB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9hZnRlclJlbmRlcic7XG5pbXBvcnQgeyB2IH0gZnJvbSAnLi8uLi9kJztcbmltcG9ydCB7IGRvbSB9IGZyb20gJy4vLi4vdmRvbSc7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGF0dGFjaCBzdGF0ZSBvZiB0aGUgcHJvamVjdG9yXG4gKi9cbmV4cG9ydCB2YXIgUHJvamVjdG9yQXR0YWNoU3RhdGU7XG4oZnVuY3Rpb24gKFByb2plY3RvckF0dGFjaFN0YXRlKSB7XG4gICAgUHJvamVjdG9yQXR0YWNoU3RhdGVbUHJvamVjdG9yQXR0YWNoU3RhdGVbXCJBdHRhY2hlZFwiXSA9IDFdID0gXCJBdHRhY2hlZFwiO1xuICAgIFByb2plY3RvckF0dGFjaFN0YXRlW1Byb2plY3RvckF0dGFjaFN0YXRlW1wiRGV0YWNoZWRcIl0gPSAyXSA9IFwiRGV0YWNoZWRcIjtcbn0pKFByb2plY3RvckF0dGFjaFN0YXRlIHx8IChQcm9qZWN0b3JBdHRhY2hTdGF0ZSA9IHt9KSk7XG4vKipcbiAqIEF0dGFjaCB0eXBlIGZvciB0aGUgcHJvamVjdG9yXG4gKi9cbmV4cG9ydCB2YXIgQXR0YWNoVHlwZTtcbihmdW5jdGlvbiAoQXR0YWNoVHlwZSkge1xuICAgIEF0dGFjaFR5cGVbQXR0YWNoVHlwZVtcIkFwcGVuZFwiXSA9IDFdID0gXCJBcHBlbmRcIjtcbiAgICBBdHRhY2hUeXBlW0F0dGFjaFR5cGVbXCJNZXJnZVwiXSA9IDJdID0gXCJNZXJnZVwiO1xufSkoQXR0YWNoVHlwZSB8fCAoQXR0YWNoVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdG9yTWl4aW4oQmFzZSkge1xuICAgIGNsYXNzIFByb2plY3RvciBleHRlbmRzIEJhc2Uge1xuICAgICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgdGhpcy5fYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnM6IGNzc1RyYW5zaXRpb25zXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdG9yU3RhdGUgPSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5EZXRhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBhcHBlbmQocm9vdCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBBdHRhY2hUeXBlLkFwcGVuZCxcbiAgICAgICAgICAgICAgICByb290XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBtZXJnZShyb290KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IEF0dGFjaFR5cGUuTWVyZ2UsXG4gICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2gob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHJvb3Qocm9vdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNoYW5nZSByb290IGVsZW1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSByb290O1xuICAgICAgICB9XG4gICAgICAgIGdldCByb290KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGFzeW5jKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FzeW5jO1xuICAgICAgICB9XG4gICAgICAgIHNldCBhc3luYyhhc3luYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNoYW5nZSBhc3luYyBtb2RlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9hc3luYyA9IGFzeW5jO1xuICAgICAgICB9XG4gICAgICAgIHNhbmRib3goZG9jID0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjcmVhdGUgc2FuZGJveCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUm9vdCA9IHRoaXMucm9vdDtcbiAgICAgICAgICAgIC8qIGZyZWUgdXAgdGhlIGRvY3VtZW50IGZyYWdtZW50IGZvciBHQyAqL1xuICAgICAgICAgICAgdGhpcy5vd24oe1xuICAgICAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHByZXZpb3VzUm9vdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaCh7XG4gICAgICAgICAgICAgICAgLyogRG9jdW1lbnRGcmFnbWVudCBpcyBub3QgYXNzaWduYWJsZSB0byBFbGVtZW50LCBidXQgcHJvdmlkZXMgZXZlcnl0aGluZyBuZWVkZWQgdG8gd29yayAqL1xuICAgICAgICAgICAgICAgIHJvb3Q6IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG4gICAgICAgICAgICAgICAgdHlwZTogQXR0YWNoVHlwZS5BcHBlbmRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICB0aGlzLl9fc2V0Q2hpbGRyZW5fXyhjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIF9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzICYmIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkgIT09IHByb3BlcnRpZXMucmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdG9yUHJvcGVydGllcy5yZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzID0gYXNzaWduKHt9LCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHN1cGVyLl9fc2V0Q29yZVByb3BlcnRpZXNfXyh7IGJpbmQ6IHRoaXMsIGJhc2VSZWdpc3RyeTogcHJvcGVydGllcy5yZWdpc3RyeSB9KTtcbiAgICAgICAgICAgIHN1cGVyLl9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRvSHRtbCgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlICE9PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCB8fCAhdGhpcy5fcHJvamVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGlzIG5vdCBhdHRhY2hlZCwgY2Fubm90IHJldHVybiBhbiBIVE1MIHN0cmluZyBvZiBwcm9qZWN0aW9uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb24uZG9tTm9kZS5jaGlsZE5vZGVzWzBdLm91dGVySFRNTDtcbiAgICAgICAgfVxuICAgICAgICBhZnRlclJlbmRlcihyZXN1bHQpIHtcbiAgICAgICAgICAgIGxldCBub2RlID0gcmVzdWx0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnIHx8IHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSB2KCdzcGFuJywge30sIFtyZXN1bHRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgX2F0dGFjaCh7IHR5cGUsIHJvb3QgfSkge1xuICAgICAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3QgPSByb290O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2F0dGFjaEhhbmRsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hIYW5kbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQ7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSB7XG4gICAgICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuRGV0YWNoZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vd24oaGFuZGxlKTtcbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaEhhbmRsZSA9IGhhbmRsZTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMsIHsgc3luYzogIXRoaXMuX2FzeW5jIH0pO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBdHRhY2hUeXBlLkFwcGVuZDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbiA9IGRvbS5hcHBlbmQodGhpcy5yb290LCB0aGlzLCB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQXR0YWNoVHlwZS5NZXJnZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbiA9IGRvbS5tZXJnZSh0aGlzLnJvb3QsIHRoaXMsIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoSGFuZGxlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGFmdGVyUmVuZGVyKClcbiAgICBdLCBQcm9qZWN0b3IucHJvdG90eXBlLCBcImFmdGVyUmVuZGVyXCIsIG51bGwpO1xuICAgIHJldHVybiBQcm9qZWN0b3I7XG59XG5leHBvcnQgZGVmYXVsdCBQcm9qZWN0b3JNaXhpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVByb2plY3Rvci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL21peGlucy9Qcm9qZWN0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICcuLy4uL0luamVjdG9yJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9pbmplY3QnO1xuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi8uLi9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBkaWZmUHJvcGVydHkgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5JztcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICcuLy4uL2RpZmYnO1xuY29uc3QgVEhFTUVfS0VZID0gJyBfa2V5JztcbmV4cG9ydCBjb25zdCBJTkpFQ1RFRF9USEVNRV9LRVkgPSBTeW1ib2woJ3RoZW1lJyk7XG4vKipcbiAqIERlY29yYXRvciBmb3IgYmFzZSBjc3MgY2xhc3Nlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWUodGhlbWUpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycsIHRoZW1lKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHJldmVyc2UgbG9va3VwIGZvciB0aGUgY2xhc3NlcyBwYXNzZWQgaW4gdmlhIHRoZSBgdGhlbWVgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBjbGFzc2VzIFRoZSBiYXNlQ2xhc3NlcyBvYmplY3RcbiAqIEByZXF1aXJlc1xuICovXG5mdW5jdGlvbiBjcmVhdGVUaGVtZUNsYXNzZXNMb29rdXAoY2xhc3Nlcykge1xuICAgIHJldHVybiBjbGFzc2VzLnJlZHVjZSgoY3VycmVudENsYXNzTmFtZXMsIGJhc2VDbGFzcykgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhiYXNlQ2xhc3MpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY3VycmVudENsYXNzTmFtZXNbYmFzZUNsYXNzW2tleV1dID0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDbGFzc05hbWVzO1xuICAgIH0sIHt9KTtcbn1cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBpcyBnaXZlbiBhIHRoZW1lIGFuZCBhbiBvcHRpb25hbCByZWdpc3RyeSwgdGhlIHRoZW1lXG4gKiBpbmplY3RvciBpcyBkZWZpbmVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIHRoZW1lLlxuICpcbiAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gc2V0XG4gKiBAcGFyYW0gdGhlbWVSZWdpc3RyeSByZWdpc3RyeSB0byBkZWZpbmUgdGhlIHRoZW1lIGluamVjdG9yIGFnYWluc3QuIERlZmF1bHRzXG4gKiB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XG4gKlxuICogQHJldHVybnMgdGhlIHRoZW1lIGluamVjdG9yIHVzZWQgdG8gc2V0IHRoZSB0aGVtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoZW1lLCB0aGVtZVJlZ2lzdHJ5KSB7XG4gICAgY29uc3QgdGhlbWVJbmplY3RvciA9IG5ldyBJbmplY3Rvcih0aGVtZSk7XG4gICAgdGhlbWVSZWdpc3RyeS5kZWZpbmVJbmplY3RvcihJTkpFQ1RFRF9USEVNRV9LRVksIChpbnZhbGlkYXRvcikgPT4ge1xuICAgICAgICB0aGVtZUluamVjdG9yLnNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHRoZW1lSW5qZWN0b3IuZ2V0KCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoZW1lSW5qZWN0b3I7XG59XG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYXNzIGRlY29yYXRlZCB3aXRoIHdpdGggVGhlbWVkIGZ1bmN0aW9uYWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lZE1peGluKEJhc2UpIHtcbiAgICBsZXQgVGhlbWVkID0gY2xhc3MgVGhlbWVkIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVnaXN0ZXJlZCBiYXNlIHRoZW1lIGtleXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZUtleXMgPSBbXTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW5kaWNhdGVzIGlmIGNsYXNzZXMgbWV0YSBkYXRhIG5lZWQgdG8gYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTG9hZGVkIHRoZW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX3RoZW1lID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhlbWUoY2xhc3Nlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlY2FsY3VsYXRlQ2xhc3Nlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlY2FsY3VsYXRlVGhlbWVDbGFzc2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLm1hcCgoY2xhc3NOYW1lKSA9PiB0aGlzLl9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRoZW1lQ2xhc3MoY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9uIGZpcmVkIHdoZW4gYHRoZW1lYCBvciBgZXh0cmFDbGFzc2VzYCBhcmUgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIG9uUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkIHx8IGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHRyYUNsYXNzZXMgPSB0aGlzLnByb3BlcnRpZXMuZXh0cmFDbGFzc2VzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDbGFzc05hbWUgPSB0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cFtjbGFzc05hbWVdO1xuICAgICAgICAgICAgbGV0IHJlc3VsdENsYXNzTmFtZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhlbWVDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENsYXNzIG5hbWU6ICcke2NsYXNzTmFtZX0nIG5vdCBmb3VuZCBpbiB0aGVtZWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2goZXh0cmFDbGFzc2VzW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2xhc3NOYW1lcy5wdXNoKHRoaXMuX3RoZW1lW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2godGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZVt0aGVtZUNsYXNzTmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdENsYXNzTmFtZXMuam9pbignICcpO1xuICAgICAgICB9XG4gICAgICAgIF9yZWNhbGN1bGF0ZVRoZW1lQ2xhc3NlcygpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdGhlbWUgPSB7fSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgYmFzZVRoZW1lcyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiYXNlVGhlbWVDbGFzc2VzJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lID0gYmFzZVRoZW1lcy5yZWR1Y2UoKGZpbmFsQmFzZVRoZW1lLCBiYXNlVGhlbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2EgPSBUSEVNRV9LRVksIGtleSA9IGJhc2VUaGVtZVtfYV0sIGNsYXNzZXMgPSB0c2xpYl8xLl9fcmVzdChiYXNlVGhlbWUsIFt0eXBlb2YgX2EgPT09IFwic3ltYm9sXCIgPyBfYSA6IF9hICsgXCJcIl0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaW5hbEJhc2VUaGVtZSwgY2xhc3Nlcyk7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2VUaGVtZUNsYXNzZXNSZXZlcnNlTG9va3VwID0gY3JlYXRlVGhlbWVDbGFzc2VzTG9va3VwKGJhc2VUaGVtZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5yZWR1Y2UoKGJhc2VUaGVtZSwgdGhlbWVLZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVRoZW1lLCB0aGVtZVt0aGVtZUtleV0pO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGRpZmZQcm9wZXJ0eSgndGhlbWUnLCBzaGFsbG93KSxcbiAgICAgICAgZGlmZlByb3BlcnR5KCdleHRyYUNsYXNzZXMnLCBzaGFsbG93KVxuICAgIF0sIFRoZW1lZC5wcm90b3R5cGUsIFwib25Qcm9wZXJ0aWVzQ2hhbmdlZFwiLCBudWxsKTtcbiAgICBUaGVtZWQgPSB0c2xpYl8xLl9fZGVjb3JhdGUoW1xuICAgICAgICBpbmplY3Qoe1xuICAgICAgICAgICAgbmFtZTogSU5KRUNURURfVEhFTUVfS0VZLFxuICAgICAgICAgICAgZ2V0UHJvcGVydGllczogKHRoZW1lLCBwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLnRoZW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHRoZW1lIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICBdLCBUaGVtZWQpO1xuICAgIHJldHVybiBUaGVtZWQ7XG59XG5leHBvcnQgZGVmYXVsdCBUaGVtZWRNaXhpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRoZW1lZC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1RoZW1lZC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51LWl0ZW0iLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgV2lkZ2V0QmFzZSwgbm9CaW5kIH0gZnJvbSAnLi9XaWRnZXRCYXNlJztcbmltcG9ydCB7IFByb2plY3Rvck1peGluIH0gZnJvbSAnLi9taXhpbnMvUHJvamVjdG9yJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuLi9zaGltL2FycmF5JztcbmltcG9ydCB7IHcsIGRvbSB9IGZyb20gJy4vZCc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJy4uL3NoaW0vZ2xvYmFsJztcbmltcG9ydCB7IHJlZ2lzdGVyVGhlbWVJbmplY3RvciB9IGZyb20gJy4vbWl4aW5zL1RoZW1lZCc7XG5pbXBvcnQgeyBhbHdheXNSZW5kZXIgfSBmcm9tICcuL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyJztcbmV4cG9ydCB2YXIgQ3VzdG9tRWxlbWVudENoaWxkVHlwZTtcbihmdW5jdGlvbiAoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSkge1xuICAgIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGVbXCJET0pPXCJdID0gXCJET0pPXCI7XG4gICAgQ3VzdG9tRWxlbWVudENoaWxkVHlwZVtcIk5PREVcIl0gPSBcIk5PREVcIjtcbiAgICBDdXN0b21FbGVtZW50Q2hpbGRUeXBlW1wiVEVYVFwiXSA9IFwiVEVYVFwiO1xufSkoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSB8fCAoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gRG9tVG9XaWRnZXRXcmFwcGVyKGRvbU5vZGUpIHtcbiAgICBsZXQgRG9tVG9XaWRnZXRXcmFwcGVyID0gY2xhc3MgRG9tVG9XaWRnZXRXcmFwcGVyIGV4dGVuZHMgV2lkZ2V0QmFzZSB7XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpLnJlZHVjZSgocHJvcHMsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKCdvbicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGBfXyR7a2V5fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb3BzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICByZXR1cm4gZG9tKHsgbm9kZTogZG9tTm9kZSwgcHJvcHM6IHByb3BlcnRpZXMsIGRpZmZUeXBlOiAnZG9tJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZ2V0IGRvbU5vZGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9tTm9kZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRG9tVG9XaWRnZXRXcmFwcGVyID0gdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAgICAgICAgYWx3YXlzUmVuZGVyKClcbiAgICBdLCBEb21Ub1dpZGdldFdyYXBwZXIpO1xuICAgIHJldHVybiBEb21Ub1dpZGdldFdyYXBwZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKGRlc2NyaXB0b3IsIFdpZGdldENvbnN0cnVjdG9yKSB7XG4gICAgY29uc3QgeyBhdHRyaWJ1dGVzLCBjaGlsZFR5cGUsIHJlZ2lzdHJ5RmFjdG9yeSB9ID0gZGVzY3JpcHRvcjtcbiAgICBjb25zdCBhdHRyaWJ1dGVNYXAgPSB7fTtcbiAgICBhdHRyaWJ1dGVzLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGF0dHJpYnV0ZU1hcFthdHRyaWJ1dGVOYW1lXSA9IHByb3BlcnR5TmFtZTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuID0gW107XG4gICAgICAgICAgICB0aGlzLl9ldmVudFByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faW5pdGlhbGlzZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkb21Qcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICBjb25zdCB7IGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGV2ZW50cyB9ID0gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wcm9wZXJ0aWVzLCB0aGlzLl9hdHRyaWJ1dGVzVG9Qcm9wZXJ0aWVzKGF0dHJpYnV0ZXMpKTtcbiAgICAgICAgICAgIFsuLi5hdHRyaWJ1dGVzLCAuLi5wcm9wZXJ0aWVzXS5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnX18nKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUHJvcGVydHlOYW1lICE9PSBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1tmaWx0ZXJlZFByb3BlcnR5TmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4gdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNldDogKHZhbHVlKSA9PiB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV2ZW50cy5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJ19fb24nKTtcbiAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW2ZpbHRlcmVkUHJvcGVydHlOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9nZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNldDogKHZhbHVlKSA9PiB0aGlzLl9zZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudENhbGxiYWNrID0gdGhpcy5fZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50Q2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Q2FsbGJhY2soLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBhcmdzXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCBkb21Qcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLlRFWFQgPyB0aGlzLmNoaWxkTm9kZXMgOiB0aGlzLmNoaWxkcmVuO1xuICAgICAgICAgICAgZnJvbShjaGlsZHJlbikuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLXJlbmRlcicsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtY29ubmVjdGVkJywgKCkgPT4gdGhpcy5fcmVuZGVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihjaGlsZE5vZGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goZG9tKHsgbm9kZTogY2hpbGROb2RlLCBkaWZmVHlwZTogJ2RvbScgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLWNvbm5lY3RlZCcsIChlKSA9PiB0aGlzLl9jaGlsZENvbm5lY3RlZChlKSk7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRQcm9wZXJ0aWVzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckNoaWxkcmVuID0gKCkgPT4gdGhpcy5fX2NoaWxkcmVuX18oKTtcbiAgICAgICAgICAgIGNvbnN0IFdyYXBwZXIgPSBjbGFzcyBleHRlbmRzIFdpZGdldEJhc2Uge1xuICAgICAgICAgICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHcoV2lkZ2V0Q29uc3RydWN0b3IsIHdpZGdldFByb3BlcnRpZXMsIHJlbmRlckNoaWxkcmVuKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IHJlZ2lzdHJ5RmFjdG9yeSgpO1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDb250ZXh0ID0gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoaXMuX2dldFRoZW1lKCksIHJlZ2lzdHJ5KTtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdkb2pvLXRoZW1lLXNldCcsICgpID0+IHRoZW1lQ29udGV4dC5zZXQodGhpcy5fZ2V0VGhlbWUoKSkpO1xuICAgICAgICAgICAgY29uc3QgUHJvamVjdG9yID0gUHJvamVjdG9yTWl4aW4oV3JhcHBlcik7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3IgPSBuZXcgUHJvamVjdG9yKCk7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3Iuc2V0UHJvcGVydGllcyh7IHJlZ2lzdHJ5IH0pO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yLmFwcGVuZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rvam8tY2UtY29ubmVjdGVkJywge1xuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgX2dldFRoZW1lKCkge1xuICAgICAgICAgICAgaWYgKGdsb2JhbCAmJiBnbG9iYWwuZG9qb2NlICYmIGdsb2JhbC5kb2pvY2UudGhlbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsLmRvam9jZS50aGVtZXNbZ2xvYmFsLmRvam9jZS50aGVtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2NoaWxkQ29ubmVjdGVkKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBlLmRldGFpbDtcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudE5vZGUgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLl9jaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gY2hpbGQuZG9tTm9kZSA9PT0gbm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLXJlbmRlcicsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChEb21Ub1dpZGdldFdyYXBwZXIobm9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3JlbmRlcigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3IuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rvam8tY2UtcmVuZGVyJywge1xuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9fcHJvcGVydGllc19fKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Byb3BlcnRpZXMsIHRoaXMuX2V2ZW50UHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgX19jaGlsZHJlbl9fKCkge1xuICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuLmZpbHRlcigoQ2hpbGQpID0+IENoaWxkLmRvbU5vZGUuaXNXaWRnZXQpLm1hcCgoQ2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkb21Ob2RlIH0gPSBDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHcoQ2hpbGQsIE9iamVjdC5hc3NpZ24oe30sIGRvbU5vZGUuX19wcm9wZXJ0aWVzX18oKSksIFsuLi5kb21Ob2RlLl9fY2hpbGRyZW5fXygpXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZFZhbHVlLCB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gYXR0cmlidXRlTWFwW25hbWVdO1xuICAgICAgICAgICAgdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgX3NldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBfc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHZhbHVlW25vQmluZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIF9hdHRyaWJ1dGVzVG9Qcm9wZXJ0aWVzKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlZHVjZSgocHJvcGVydGllcywgcHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYXApO1xuICAgICAgICB9XG4gICAgICAgIGdldCBpc1dpZGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcihXaWRnZXRDb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBXaWRnZXRDb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgV2lkZ2V0Q29uc3RydWN0b3IucHJvdG90eXBlLl9fY3VzdG9tRWxlbWVudERlc2NyaXB0b3I7XG4gICAgaWYgKCFkZXNjcmlwdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBkZXNjcmlwdG9yIGZvciBDdXN0b20gRWxlbWVudCwgaGF2ZSB5b3UgYWRkZWQgdGhlIEBjdXN0b21FbGVtZW50IGRlY29yYXRvciB0byB5b3VyIFdpZGdldD8nKTtcbiAgICB9XG4gICAgZ2xvYmFsLmN1c3RvbUVsZW1lbnRzLmRlZmluZShkZXNjcmlwdG9yLnRhZ05hbWUsIGNyZWF0ZShkZXNjcmlwdG9yLCBXaWRnZXRDb25zdHJ1Y3RvcikpO1xufVxuZXhwb3J0IGRlZmF1bHQgcmVnaXN0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdpc3RlckN1c3RvbUVsZW1lbnQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvcmVnaXN0ZXJDdXN0b21FbGVtZW50Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi4vc2hpbS9nbG9iYWwnO1xyXG5pbXBvcnQgeyBmcm9tIGFzIGFycmF5RnJvbSB9IGZyb20gJy4uL3NoaW0vYXJyYXknO1xyXG5pbXBvcnQgeyBpc1dOb2RlLCBpc1ZOb2RlLCBpc0RvbVZOb2RlLCBWTk9ERSwgV05PREUgfSBmcm9tICcuL2QnO1xyXG5pbXBvcnQgeyBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvciB9IGZyb20gJy4vUmVnaXN0cnknO1xyXG5pbXBvcnQgV2Vha01hcCBmcm9tICcuLi9zaGltL1dlYWtNYXAnO1xyXG5jb25zdCBOQU1FU1BBQ0VfVzMgPSAnaHR0cDovL3d3dy53My5vcmcvJztcclxuY29uc3QgTkFNRVNQQUNFX1NWRyA9IE5BTUVTUEFDRV9XMyArICcyMDAwL3N2Zyc7XHJcbmNvbnN0IE5BTUVTUEFDRV9YTElOSyA9IE5BTUVTUEFDRV9XMyArICcxOTk5L3hsaW5rJztcclxuY29uc3QgZW1wdHlBcnJheSA9IFtdO1xyXG5jb25zdCBub2RlT3BlcmF0aW9ucyA9IFsnZm9jdXMnLCAnYmx1cicsICdzY3JvbGxJbnRvVmlldycsICdjbGljayddO1xyXG5leHBvcnQgY29uc3Qgd2lkZ2V0SW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcCgpO1xyXG5jb25zdCBpbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwKCk7XHJcbmNvbnN0IG5leHRTaWJsaW5nTWFwID0gbmV3IFdlYWtNYXAoKTtcclxuY29uc3QgcHJvamVjdG9yU3RhdGVNYXAgPSBuZXcgV2Vha01hcCgpO1xyXG5mdW5jdGlvbiBzYW1lKGRub2RlMSwgZG5vZGUyKSB7XHJcbiAgICBpZiAoaXNWTm9kZShkbm9kZTEpICYmIGlzVk5vZGUoZG5vZGUyKSkge1xyXG4gICAgICAgIGlmIChpc0RvbVZOb2RlKGRub2RlMSkgfHwgaXNEb21WTm9kZShkbm9kZTIpKSB7XHJcbiAgICAgICAgICAgIGlmIChkbm9kZTEuZG9tTm9kZSAhPT0gZG5vZGUyLmRvbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZG5vZGUxLnRhZyAhPT0gZG5vZGUyLnRhZykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkbm9kZTEucHJvcGVydGllcy5rZXkgIT09IGRub2RlMi5wcm9wZXJ0aWVzLmtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNXTm9kZShkbm9kZTEpICYmIGlzV05vZGUoZG5vZGUyKSkge1xyXG4gICAgICAgIGlmIChkbm9kZTEuaW5zdGFuY2UgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZG5vZGUyLndpZGdldENvbnN0cnVjdG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkbm9kZTEud2lkZ2V0Q29uc3RydWN0b3IgIT09IGRub2RlMi53aWRnZXRDb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkbm9kZTEucHJvcGVydGllcy5rZXkgIT09IGRub2RlMi5wcm9wZXJ0aWVzLmtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmNvbnN0IG1pc3NpbmdUcmFuc2l0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlIGEgdHJhbnNpdGlvbnMgb2JqZWN0IHRvIHRoZSBwcm9qZWN0aW9uT3B0aW9ucyB0byBkbyBhbmltYXRpb25zJyk7XHJcbn07XHJcbmZ1bmN0aW9uIGdldFByb2plY3Rpb25PcHRpb25zKHByb2plY3Rvck9wdGlvbnMsIHByb2plY3Rvckluc3RhbmNlKSB7XHJcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcclxuICAgICAgICBuYW1lc3BhY2U6IHVuZGVmaW5lZCxcclxuICAgICAgICBzdHlsZUFwcGx5ZXI6IGZ1bmN0aW9uIChkb21Ob2RlLCBzdHlsZU5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUuc3R5bGVbc3R5bGVOYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHJhbnNpdGlvbnM6IHtcclxuICAgICAgICAgICAgZW50ZXI6IG1pc3NpbmdUcmFuc2l0aW9uLFxyXG4gICAgICAgICAgICBleGl0OiBtaXNzaW5nVHJhbnNpdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVwdGg6IDAsXHJcbiAgICAgICAgbWVyZ2U6IGZhbHNlLFxyXG4gICAgICAgIHN5bmM6IGZhbHNlLFxyXG4gICAgICAgIHByb2plY3Rvckluc3RhbmNlXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLCBwcm9qZWN0b3JPcHRpb25zKTtcclxufVxyXG5mdW5jdGlvbiBjaGVja1N0eWxlVmFsdWUoc3R5bGVWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBzdHlsZVZhbHVlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU3R5bGUgdmFsdWVzIG11c3QgYmUgc3RyaW5ncycpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50TmFtZSwgY3VycmVudFZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucywgYmluZCwgcHJldmlvdXNWYWx1ZSkge1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgY29uc3QgZXZlbnRNYXAgPSBwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLmdldChkb21Ob2RlKSB8fCBuZXcgV2Vha01hcCgpO1xyXG4gICAgaWYgKHByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0V2ZW50ID0gZXZlbnRNYXAuZ2V0KHByZXZpb3VzVmFsdWUpO1xyXG4gICAgICAgIGRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHByZXZpb3VzRXZlbnQpO1xyXG4gICAgfVxyXG4gICAgbGV0IGNhbGxiYWNrID0gY3VycmVudFZhbHVlLmJpbmQoYmluZCk7XHJcbiAgICBpZiAoZXZlbnROYW1lID09PSAnaW5wdXQnKSB7XHJcbiAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXZ0KSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5jYWxsKHRoaXMsIGV2dCk7XHJcbiAgICAgICAgICAgIGV2dC50YXJnZXRbJ29uaW5wdXQtdmFsdWUnXSA9IGV2dC50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgfS5iaW5kKGJpbmQpO1xyXG4gICAgfVxyXG4gICAgZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xyXG4gICAgZXZlbnRNYXAuc2V0KGN1cnJlbnRWYWx1ZSwgY2FsbGJhY2spO1xyXG4gICAgcHJvamVjdG9yU3RhdGUubm9kZU1hcC5zZXQoZG9tTm9kZSwgZXZlbnRNYXApO1xyXG59XHJcbmZ1bmN0aW9uIGFkZENsYXNzZXMoZG9tTm9kZSwgY2xhc3Nlcykge1xyXG4gICAgaWYgKGNsYXNzZXMpIHtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gY2xhc3Nlcy5zcGxpdCgnICcpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBkb21Ob2RlLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgY2xhc3Nlcykge1xyXG4gICAgaWYgKGNsYXNzZXMpIHtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gY2xhc3Nlcy5zcGxpdCgnICcpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBkb21Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGJ1aWxkUHJldmlvdXNQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzLCBjdXJyZW50KSB7XHJcbiAgICBjb25zdCB7IGRpZmZUeXBlLCBwcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzIH0gPSBjdXJyZW50O1xyXG4gICAgaWYgKCFkaWZmVHlwZSB8fCBkaWZmVHlwZSA9PT0gJ3Zkb20nKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgcHJvcGVydGllczogcHJldmlvdXMucHJvcGVydGllcywgYXR0cmlidXRlczogcHJldmlvdXMuYXR0cmlidXRlcywgZXZlbnRzOiBwcmV2aW91cy5ldmVudHMgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGRpZmZUeXBlID09PSAnbm9uZScpIHtcclxuICAgICAgICByZXR1cm4geyBwcm9wZXJ0aWVzOiB7fSwgYXR0cmlidXRlczogcHJldmlvdXMuYXR0cmlidXRlcyA/IHt9IDogdW5kZWZpbmVkLCBldmVudHM6IHByZXZpb3VzLmV2ZW50cyB9O1xyXG4gICAgfVxyXG4gICAgbGV0IG5ld1Byb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgcHJvcGVydGllczoge31cclxuICAgIH07XHJcbiAgICBpZiAoYXR0cmlidXRlcykge1xyXG4gICAgICAgIG5ld1Byb3BlcnRpZXMuYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIG5ld1Byb3BlcnRpZXMuZXZlbnRzID0gcHJldmlvdXMuZXZlbnRzO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMucHJvcGVydGllc1twcm9wTmFtZV0gPSBkb21Ob2RlW3Byb3BOYW1lXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChhdHRyTmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLmF0dHJpYnV0ZXNbYXR0ck5hbWVdID0gZG9tTm9kZS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBuZXdQcm9wZXJ0aWVzO1xyXG4gICAgfVxyXG4gICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykucmVkdWNlKChwcm9wcywgcHJvcGVydHkpID0+IHtcclxuICAgICAgICBwcm9wc1twcm9wZXJ0eV0gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZShwcm9wZXJ0eSkgfHwgZG9tTm9kZVtwcm9wZXJ0eV07XHJcbiAgICAgICAgcmV0dXJuIHByb3BzO1xyXG4gICAgfSwge30pO1xyXG4gICAgcmV0dXJuIG5ld1Byb3BlcnRpZXM7XHJcbn1cclxuZnVuY3Rpb24gbm9kZU9wZXJhdGlvbihwcm9wTmFtZSwgcHJvcFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBkb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcHJvcFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSBwcm9wVmFsdWUgJiYgIXByZXZpb3VzVmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgICAgIHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xyXG4gICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIG9ubHlFdmVudHMgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgY29uc3QgZXZlbnRNYXAgPSBwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLmdldChkb21Ob2RlKTtcclxuICAgIGlmIChldmVudE1hcCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHByZXZpb3VzUHJvcGVydGllcykuZm9yRWFjaCgocHJvcE5hbWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNFdmVudCA9IHByb3BOYW1lLnN1YnN0cigwLCAyKSA9PT0gJ29uJyB8fCBvbmx5RXZlbnRzO1xyXG4gICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBvbmx5RXZlbnRzID8gcHJvcE5hbWUgOiBwcm9wTmFtZS5zdWJzdHIoMik7XHJcbiAgICAgICAgICAgIGlmIChpc0V2ZW50ICYmICFwcm9wZXJ0aWVzW3Byb3BOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRDYWxsYmFjayA9IGV2ZW50TWFwLmdldChwcmV2aW91c1Byb3BlcnRpZXNbcHJvcE5hbWVdKTtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGUoZG9tTm9kZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UgPT09IE5BTUVTUEFDRV9TVkcgJiYgYXR0ck5hbWUgPT09ICdocmVmJykge1xyXG4gICAgICAgIGRvbU5vZGUuc2V0QXR0cmlidXRlTlMoTkFNRVNQQUNFX1hMSU5LLCBhdHRyTmFtZSwgYXR0clZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKChhdHRyTmFtZSA9PT0gJ3JvbGUnICYmIGF0dHJWYWx1ZSA9PT0gJycpIHx8IGF0dHJWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZG9tTm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZG9tTm9kZS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlcyhkb21Ob2RlLCBwcmV2aW91c0F0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBjb25zdCBhdHRyTmFtZXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKTtcclxuICAgIGNvbnN0IGF0dHJDb3VudCA9IGF0dHJOYW1lcy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyTmFtZXNbaV07XHJcbiAgICAgICAgY29uc3QgYXR0clZhbHVlID0gYXR0cmlidXRlc1thdHRyTmFtZV07XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNBdHRyVmFsdWUgPSBwcmV2aW91c0F0dHJpYnV0ZXNbYXR0ck5hbWVdO1xyXG4gICAgICAgIGlmIChhdHRyVmFsdWUgIT09IHByZXZpb3VzQXR0clZhbHVlKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZShkb21Ob2RlLCBhdHRyTmFtZSwgYXR0clZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzID0gdHJ1ZSkge1xyXG4gICAgbGV0IHByb3BlcnRpZXNVcGRhdGVkID0gZmFsc2U7XHJcbiAgICBjb25zdCBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcclxuICAgIGNvbnN0IHByb3BDb3VudCA9IHByb3BOYW1lcy5sZW5ndGg7XHJcbiAgICBpZiAocHJvcE5hbWVzLmluZGV4T2YoJ2NsYXNzZXMnKSA9PT0gLTEgJiYgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3NlcykpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcyAmJiByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMsIHByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcENvdW50OyBpKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHByb3BOYW1lc1tpXTtcclxuICAgICAgICBsZXQgcHJvcFZhbHVlID0gcHJvcGVydGllc1twcm9wTmFtZV07XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzUHJvcGVydGllc1twcm9wTmFtZV07XHJcbiAgICAgICAgaWYgKHByb3BOYW1lID09PSAnY2xhc3NlcycpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNDbGFzc2VzID0gQXJyYXkuaXNBcnJheShwcmV2aW91c1ZhbHVlKSA/IHByZXZpb3VzVmFsdWUgOiBbcHJldmlvdXNWYWx1ZV07XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDbGFzc2VzID0gQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpID8gcHJvcFZhbHVlIDogW3Byb3BWYWx1ZV07XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0NsYXNzZXMgJiYgcHJldmlvdXNDbGFzc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICghcHJvcFZhbHVlIHx8IHByb3BWYWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzQ2xhc3Nlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3NlcyA9IFsuLi5jdXJyZW50Q2xhc3Nlc107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c0NsYXNzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNDbGFzc05hbWUgPSBwcmV2aW91c0NsYXNzZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0NsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xhc3NJbmRleCA9IG5ld0NsYXNzZXMuaW5kZXhPZihwcmV2aW91c0NsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzQ2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NsYXNzZXMuc3BsaWNlKGNsYXNzSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3Q2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRDbGFzc2VzKGRvbU5vZGUsIG5ld0NsYXNzZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudENsYXNzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzc2VzKGRvbU5vZGUsIGN1cnJlbnRDbGFzc2VzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub2RlT3BlcmF0aW9ucy5pbmRleE9mKHByb3BOYW1lKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgbm9kZU9wZXJhdGlvbihwcm9wTmFtZSwgcHJvcFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBkb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSAnc3R5bGVzJykge1xyXG4gICAgICAgICAgICBjb25zdCBzdHlsZU5hbWVzID0gT2JqZWN0LmtleXMocHJvcFZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3Qgc3R5bGVDb3VudCA9IHN0eWxlTmFtZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0eWxlQ291bnQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVOYW1lID0gc3R5bGVOYW1lc1tqXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0eWxlVmFsdWUgPSBwcm9wVmFsdWVbc3R5bGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFN0eWxlVmFsdWUgPSBwcmV2aW91c1ZhbHVlICYmIHByZXZpb3VzVmFsdWVbc3R5bGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXdTdHlsZVZhbHVlID09PSBvbGRTdHlsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3U3R5bGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrU3R5bGVWYWx1ZShuZXdTdHlsZVZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5zdHlsZUFwcGx5ZXIoZG9tTm9kZSwgc3R5bGVOYW1lLCBuZXdTdHlsZVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zLnN0eWxlQXBwbHllcihkb21Ob2RlLCBzdHlsZU5hbWUsICcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFwcm9wVmFsdWUgJiYgdHlwZW9mIHByZXZpb3VzVmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcE5hbWUgPT09ICd2YWx1ZScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVZhbHVlID0gZG9tTm9kZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9tVmFsdWUgIT09IHByb3BWYWx1ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChkb21Ob2RlWydvbmlucHV0LXZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBkb21WYWx1ZSA9PT0gZG9tTm9kZVsnb25pbnB1dC12YWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcHJvcFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbJ29uaW5wdXQtdmFsdWUnXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwcm9wVmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgIT09ICdrZXknICYmIHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wTmFtZS5sYXN0SW5kZXhPZignb24nLCAwKSA9PT0gMCAmJiBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVFdmVudChkb21Ob2RlLCBwcm9wTmFtZS5zdWJzdHIoMiksIHByb3BWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMsIHByb3BlcnRpZXMuYmluZCwgcHJldmlvdXNWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiBwcm9wTmFtZSAhPT0gJ2lubmVySFRNTCcgJiYgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIHByb3BOYW1lLCBwcm9wVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSAnc2Nyb2xsTGVmdCcgfHwgcHJvcE5hbWUgPT09ICdzY3JvbGxUb3AnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbU5vZGVbcHJvcE5hbWVdICE9PSBwcm9wVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tTm9kZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcGVydGllc1VwZGF0ZWQ7XHJcbn1cclxuZnVuY3Rpb24gZmluZEluZGV4T2ZDaGlsZChjaGlsZHJlbiwgc2FtZUFzLCBzdGFydCkge1xyXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoc2FtZShjaGlsZHJlbltpXSwgc2FtZUFzKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHRvUGFyZW50Vk5vZGUoZG9tTm9kZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0YWc6ICcnLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxyXG4gICAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXHJcbiAgICAgICAgZG9tTm9kZSxcclxuICAgICAgICB0eXBlOiBWTk9ERVxyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gdG9UZXh0Vk5vZGUoZGF0YSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0YWc6ICcnLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxyXG4gICAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGV4dDogYCR7ZGF0YX1gLFxyXG4gICAgICAgIGRvbU5vZGU6IHVuZGVmaW5lZCxcclxuICAgICAgICB0eXBlOiBWTk9ERVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBpbnN0YW5jZSxcclxuICAgICAgICByZW5kZXJlZDogW10sXHJcbiAgICAgICAgY29yZVByb3BlcnRpZXM6IGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcyxcclxuICAgICAgICBjaGlsZHJlbjogaW5zdGFuY2UuY2hpbGRyZW4sXHJcbiAgICAgICAgd2lkZ2V0Q29uc3RydWN0b3I6IGluc3RhbmNlLmNvbnN0cnVjdG9yLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IGluc3RhbmNlRGF0YS5pbnB1dFByb3BlcnRpZXMsXHJcbiAgICAgICAgdHlwZTogV05PREVcclxuICAgIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oY2hpbGRyZW4sIGluc3RhbmNlKSB7XHJcbiAgICBpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBlbXB0eUFycmF5O1xyXG4gICAgfVxyXG4gICAgY2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogW2NoaWxkcmVuXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgaWYgKGNoaWxkID09PSB1bmRlZmluZWQgfHwgY2hpbGQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjaGlsZHJlbltpXSA9IHRvVGV4dFZOb2RlKGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc1ZOb2RlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLnByb3BlcnRpZXMuYmluZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQucHJvcGVydGllcy5iaW5kID0gaW5zdGFuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghY2hpbGQuY29yZVByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmNvcmVQcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kOiBpbnN0YW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJlZ2lzdHJ5OiBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMuYmFzZVJlZ2lzdHJ5XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGkrKztcclxuICAgIH1cclxuICAgIHJldHVybiBjaGlsZHJlbjtcclxufVxyXG5mdW5jdGlvbiBub2RlQWRkZWQoZG5vZGUsIHRyYW5zaXRpb25zKSB7XHJcbiAgICBpZiAoaXNWTm9kZShkbm9kZSkgJiYgZG5vZGUucHJvcGVydGllcykge1xyXG4gICAgICAgIGNvbnN0IGVudGVyQW5pbWF0aW9uID0gZG5vZGUucHJvcGVydGllcy5lbnRlckFuaW1hdGlvbjtcclxuICAgICAgICBpZiAoZW50ZXJBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRlckFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZW50ZXJBbmltYXRpb24oZG5vZGUuZG9tTm9kZSwgZG5vZGUucHJvcGVydGllcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5lbnRlcihkbm9kZS5kb21Ob2RlLCBkbm9kZS5wcm9wZXJ0aWVzLCBlbnRlckFuaW1hdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gbm9kZVRvUmVtb3ZlKGRub2RlLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGlmIChpc1dOb2RlKGRub2RlKSkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpbnN0YW5jZU1hcC5nZXQoZG5vZGUuaW5zdGFuY2UpO1xyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gKGl0ZW0gPyBpdGVtLmRub2RlLnJlbmRlcmVkIDogZG5vZGUucmVuZGVyZWQpIHx8IGVtcHR5QXJyYXk7XHJcbiAgICAgICAgaWYgKGRub2RlLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChkbm9kZS5pbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5vbkRldGFjaCgpO1xyXG4gICAgICAgICAgICBpbnN0YW5jZU1hcC5kZWxldGUoZG5vZGUuaW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlcmVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShyZW5kZXJlZFtpXSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZTtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gZG5vZGUucHJvcGVydGllcztcclxuICAgICAgICBpZiAoZG5vZGUuY2hpbGRyZW4gJiYgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUoZG5vZGUuY2hpbGRyZW5baV0sIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZXhpdEFuaW1hdGlvbiA9IHByb3BlcnRpZXMuZXhpdEFuaW1hdGlvbjtcclxuICAgICAgICBpZiAocHJvcGVydGllcyAmJiBleGl0QW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICAgICAgY29uc3QgcmVtb3ZlRG9tTm9kZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGRvbU5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhpdEFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZXhpdEFuaW1hdGlvbihkb21Ob2RlLCByZW1vdmVEb21Ob2RlLCBwcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmV4aXQoZG5vZGUuZG9tTm9kZSwgcHJvcGVydGllcywgZXhpdEFuaW1hdGlvbiwgcmVtb3ZlRG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZG9tTm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbU5vZGUpO1xyXG4gICAgICAgIGRub2RlLmRvbU5vZGUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tEaXN0aW5ndWlzaGFibGUoY2hpbGROb2RlcywgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSkge1xyXG4gICAgY29uc3QgY2hpbGROb2RlID0gY2hpbGROb2Rlc1tpbmRleFRvQ2hlY2tdO1xyXG4gICAgaWYgKGlzVk5vZGUoY2hpbGROb2RlKSAmJiAhY2hpbGROb2RlLnRhZykge1xyXG4gICAgICAgIHJldHVybjsgLy8gVGV4dCBub2RlcyBuZWVkIG5vdCBiZSBkaXN0aW5ndWlzaGFibGVcclxuICAgIH1cclxuICAgIGNvbnN0IHsga2V5IH0gPSBjaGlsZE5vZGUucHJvcGVydGllcztcclxuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGkgIT09IGluZGV4VG9DaGVjaykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoc2FtZShub2RlLCBjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVJZGVudGlmaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5hbWUgPSBwYXJlbnRJbnN0YW5jZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICd1bmtub3duJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNXTm9kZShjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJZGVudGlmaWVyID0gY2hpbGROb2RlLndpZGdldENvbnN0cnVjdG9yLm5hbWUgfHwgJ3Vua25vd24nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlkZW50aWZpZXIgPSBjaGlsZE5vZGUudGFnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEEgd2lkZ2V0ICgke3BhcmVudE5hbWV9KSBoYXMgaGFkIGEgY2hpbGQgYWRkZGVkIG9yIHJlbW92ZWQsIGJ1dCB0aGV5IHdlcmUgbm90IGFibGUgdG8gdW5pcXVlbHkgaWRlbnRpZmllZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gcHJvdmlkZSBhIHVuaXF1ZSAna2V5JyBwcm9wZXJ0eSB3aGVuIHVzaW5nIHRoZSBzYW1lIHdpZGdldCBvciBlbGVtZW50ICgke25vZGVJZGVudGlmaWVyfSkgbXVsdGlwbGUgdGltZXMgYXMgc2libGluZ3NgKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB1cGRhdGVDaGlsZHJlbihwYXJlbnRWTm9kZSwgc2libGluZ3MsIG9sZENoaWxkcmVuLCBuZXdDaGlsZHJlbiwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBvbGRDaGlsZHJlbiA9IG9sZENoaWxkcmVuIHx8IGVtcHR5QXJyYXk7XHJcbiAgICBuZXdDaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xyXG4gICAgY29uc3Qgb2xkQ2hpbGRyZW5MZW5ndGggPSBvbGRDaGlsZHJlbi5sZW5ndGg7XHJcbiAgICBjb25zdCBuZXdDaGlsZHJlbkxlbmd0aCA9IG5ld0NoaWxkcmVuLmxlbmd0aDtcclxuICAgIGNvbnN0IHRyYW5zaXRpb25zID0gcHJvamVjdGlvbk9wdGlvbnMudHJhbnNpdGlvbnM7XHJcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IGRlcHRoOiBwcm9qZWN0aW9uT3B0aW9ucy5kZXB0aCArIDEgfSk7XHJcbiAgICBsZXQgb2xkSW5kZXggPSAwO1xyXG4gICAgbGV0IG5ld0luZGV4ID0gMDtcclxuICAgIGxldCBpO1xyXG4gICAgbGV0IHRleHRVcGRhdGVkID0gZmFsc2U7XHJcbiAgICB3aGlsZSAobmV3SW5kZXggPCBuZXdDaGlsZHJlbkxlbmd0aCkge1xyXG4gICAgICAgIGxldCBvbGRDaGlsZCA9IG9sZEluZGV4IDwgb2xkQ2hpbGRyZW5MZW5ndGggPyBvbGRDaGlsZHJlbltvbGRJbmRleF0gOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3QgbmV3Q2hpbGQgPSBuZXdDaGlsZHJlbltuZXdJbmRleF07XHJcbiAgICAgICAgaWYgKGlzVk5vZGUobmV3Q2hpbGQpICYmIHR5cGVvZiBuZXdDaGlsZC5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBuZXdDaGlsZC5pbnNlcnRlZCA9IGlzVk5vZGUob2xkQ2hpbGQpICYmIG9sZENoaWxkLmluc2VydGVkO1xyXG4gICAgICAgICAgICBhZGREZWZlcnJlZFByb3BlcnRpZXMobmV3Q2hpbGQsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9sZENoaWxkICE9PSB1bmRlZmluZWQgJiYgc2FtZShvbGRDaGlsZCwgbmV3Q2hpbGQpKSB7XHJcbiAgICAgICAgICAgIG9sZEluZGV4Kys7XHJcbiAgICAgICAgICAgIG5ld0luZGV4Kys7XHJcbiAgICAgICAgICAgIHRleHRVcGRhdGVkID1cclxuICAgICAgICAgICAgICAgIHVwZGF0ZURvbShvbGRDaGlsZCwgbmV3Q2hpbGQsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgcGFyZW50SW5zdGFuY2UsIG9sZENoaWxkcmVuLnNsaWNlKG9sZEluZGV4KSwgbmV3Q2hpbGRyZW4uc2xpY2UobmV3SW5kZXgpKSB8fCB0ZXh0VXBkYXRlZDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpbmRPbGRJbmRleCA9IGZpbmRJbmRleE9mQ2hpbGQob2xkQ2hpbGRyZW4sIG5ld0NoaWxkLCBvbGRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IGFkZENoaWxkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaW5zZXJ0QmVmb3JlRG9tTm9kZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuQXJyYXkgPSBvbGRDaGlsZHJlbjtcclxuICAgICAgICAgICAgbGV0IG5leHRJbmRleCA9IG9sZEluZGV4ICsgMTtcclxuICAgICAgICAgICAgbGV0IGNoaWxkID0gb2xkQ2hpbGRyZW5bb2xkSW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoIWNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZCA9IHNpYmxpbmdzWzBdO1xyXG4gICAgICAgICAgICAgICAgbmV4dEluZGV4ID0gMTtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuQXJyYXkgPSBzaWJsaW5ncztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBpbnNlcnRCZWZvcmVDaGlsZHJlbiA9IFtjaGlsZF07XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0QmVmb3JlID0gaW5zZXJ0QmVmb3JlQ2hpbGRyZW4uc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNXTm9kZShpbnNlcnRCZWZvcmUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpbnN0YW5jZU1hcC5nZXQoaW5zZXJ0QmVmb3JlLmluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5kbm9kZS5yZW5kZXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ucHVzaCguLi5pdGVtLmRub2RlLnJlbmRlcmVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZS5kb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlLmRvbU5vZGUucGFyZW50RWxlbWVudCAhPT0gcGFyZW50Vk5vZGUuZG9tTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlRG9tTm9kZSA9IGluc2VydEJlZm9yZS5kb21Ob2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZUNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiBjaGlsZHJlbkFycmF5W25leHRJbmRleF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ucHVzaChjaGlsZHJlbkFycmF5W25leHRJbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0SW5kZXgrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3JlYXRlRG9tKG5ld0NoaWxkLCBwYXJlbnRWTm9kZSwgbmV3Q2hpbGRyZW4uc2xpY2UobmV3SW5kZXggKyAxKSwgaW5zZXJ0QmVmb3JlRG9tTm9kZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgbm9kZUFkZGVkKG5ld0NoaWxkLCB0cmFuc2l0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4VG9DaGVjayA9IG5ld0luZGV4O1xyXG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG5ld0NoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIW9sZENoaWxkIHx8IGZpbmRPbGRJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgYWRkQ2hpbGQoKTtcclxuICAgICAgICAgICAgbmV3SW5kZXgrKztcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlbW92ZUNoaWxkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleFRvQ2hlY2sgPSBvbGRJbmRleDtcclxuICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjaGVja0Rpc3Rpbmd1aXNoYWJsZShvbGRDaGlsZHJlbiwgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoaXNXTm9kZShvbGRDaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpbnN0YW5jZU1hcC5nZXQob2xkQ2hpbGQuaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBvbGRDaGlsZCA9IGl0ZW0uZG5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbm9kZVRvUmVtb3ZlKG9sZENoaWxkLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZmluZE5ld0luZGV4ID0gZmluZEluZGV4T2ZDaGlsZChuZXdDaGlsZHJlbiwgb2xkQ2hpbGQsIG5ld0luZGV4ICsgMSk7XHJcbiAgICAgICAgaWYgKGZpbmROZXdJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmVtb3ZlQ2hpbGQoKTtcclxuICAgICAgICAgICAgb2xkSW5kZXgrKztcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFkZENoaWxkKCk7XHJcbiAgICAgICAgcmVtb3ZlQ2hpbGQoKTtcclxuICAgICAgICBvbGRJbmRleCsrO1xyXG4gICAgICAgIG5ld0luZGV4Kys7XHJcbiAgICB9XHJcbiAgICBpZiAob2xkQ2hpbGRyZW5MZW5ndGggPiBvbGRJbmRleCkge1xyXG4gICAgICAgIC8vIFJlbW92ZSBjaGlsZCBmcmFnbWVudHNcclxuICAgICAgICBmb3IgKGkgPSBvbGRJbmRleDsgaSA8IG9sZENoaWxkcmVuTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXhUb0NoZWNrID0gaTtcclxuICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjaGVja0Rpc3Rpbmd1aXNoYWJsZShvbGRDaGlsZHJlbiwgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgY2hpbGRUb1JlbW92ZSA9IG9sZENoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBpZiAoaXNXTm9kZShjaGlsZFRvUmVtb3ZlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGluc3RhbmNlTWFwLmdldChjaGlsZFRvUmVtb3ZlLmluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUb1JlbW92ZSA9IGl0ZW0uZG5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbm9kZVRvUmVtb3ZlKGNoaWxkVG9SZW1vdmUsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHRVcGRhdGVkO1xyXG59XHJcbmZ1bmN0aW9uIGFkZENoaWxkcmVuKHBhcmVudFZOb2RlLCBjaGlsZHJlbiwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlLCBpbnNlcnRCZWZvcmUgPSB1bmRlZmluZWQsIGNoaWxkTm9kZXMpIHtcclxuICAgIGlmIChjaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgaWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNoaWxkTm9kZXMgPSBhcnJheUZyb20ocGFyZW50Vk5vZGUuZG9tTm9kZS5jaGlsZE5vZGVzKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRyYW5zaXRpb25zID0gcHJvamVjdGlvbk9wdGlvbnMudHJhbnNpdGlvbnM7XHJcbiAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IGRlcHRoOiBwcm9qZWN0aW9uT3B0aW9ucy5kZXB0aCArIDEgfSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICBjb25zdCBuZXh0U2libGluZ3MgPSBjaGlsZHJlbi5zbGljZShpICsgMSk7XHJcbiAgICAgICAgaWYgKGlzVk5vZGUoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5tZXJnZSAmJiBjaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZG9tRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZC5kb21Ob2RlID09PSB1bmRlZmluZWQgJiYgY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCA9IGNoaWxkTm9kZXMuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tRWxlbWVudCAmJiBkb21FbGVtZW50LnRhZ05hbWUgPT09IChjaGlsZC50YWcudG9VcHBlckNhc2UoKSB8fCB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmRvbU5vZGUgPSBkb21FbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjcmVhdGVEb20oY2hpbGQsIHBhcmVudFZOb2RlLCBuZXh0U2libGluZ3MsIGluc2VydEJlZm9yZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNyZWF0ZURvbShjaGlsZCwgcGFyZW50Vk5vZGUsIG5leHRTaWJsaW5ncywgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGNoaWxkTm9kZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBub2RlQWRkZWQoY2hpbGQsIHRyYW5zaXRpb25zKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpbml0UHJvcGVydGllc0FuZENoaWxkcmVuKGRvbU5vZGUsIGRub2RlLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGFkZENoaWxkcmVuKGRub2RlLCBkbm9kZS5jaGlsZHJlbiwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlLCB1bmRlZmluZWQpO1xyXG4gICAgaWYgKHR5cGVvZiBkbm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyAmJiBkbm9kZS5pbnNlcnRlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKGRub2RlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcclxuICAgICAgICB1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGUsIHt9LCBkbm9kZS5hdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCB7fSwgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIGZhbHNlKTtcclxuICAgICAgICByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCB7fSwgZG5vZGUuZXZlbnRzLCBwcm9qZWN0aW9uT3B0aW9ucywgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRzID0gZG5vZGUuZXZlbnRzO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdXBkYXRlRXZlbnQoZG9tTm9kZSwgZXZlbnQsIGV2ZW50c1tldmVudF0sIHByb2plY3Rpb25PcHRpb25zLCBkbm9kZS5wcm9wZXJ0aWVzLmJpbmQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCB7fSwgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSBudWxsICYmIGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGQoZG9tTm9kZSwgYCR7ZG5vZGUucHJvcGVydGllcy5rZXl9YCk7XHJcbiAgICB9XHJcbiAgICBkbm9kZS5pbnNlcnRlZCA9IHRydWU7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlRG9tKGRub2RlLCBwYXJlbnRWTm9kZSwgbmV4dFNpYmxpbmdzLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgY2hpbGROb2Rlcykge1xyXG4gICAgbGV0IGRvbU5vZGU7XHJcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBpZiAoaXNXTm9kZShkbm9kZSkpIHtcclxuICAgICAgICBsZXQgeyB3aWRnZXRDb25zdHJ1Y3RvciB9ID0gZG5vZGU7XHJcbiAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICBpZiAoIWlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKHdpZGdldENvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcGFyZW50SW5zdGFuY2VEYXRhLnJlZ2lzdHJ5KCkuZ2V0KHdpZGdldENvbnN0cnVjdG9yKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aWRnZXRDb25zdHJ1Y3RvciA9IGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IHdpZGdldENvbnN0cnVjdG9yKCk7XHJcbiAgICAgICAgZG5vZGUuaW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICAgICAgICBuZXh0U2libGluZ01hcC5zZXQoaW5zdGFuY2UsIG5leHRTaWJsaW5ncyk7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZS5wdXNoKHsgaW5zdGFuY2UsIGRlcHRoOiBwcm9qZWN0aW9uT3B0aW9ucy5kZXB0aCB9KTtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlUmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDb3JlUHJvcGVydGllc19fKGRub2RlLmNvcmVQcm9wZXJ0aWVzKTtcclxuICAgICAgICBpbnN0YW5jZS5fX3NldENoaWxkcmVuX18oZG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICAgIGluc3RhbmNlLl9fc2V0UHJvcGVydGllc19fKGRub2RlLnByb3BlcnRpZXMpO1xyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gaW5zdGFuY2UuX19yZW5kZXJfXygpO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVuZGVyZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSZW5kZXJlZCA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4ocmVuZGVyZWQsIGluc3RhbmNlKTtcclxuICAgICAgICAgICAgZG5vZGUucmVuZGVyZWQgPSBmaWx0ZXJlZFJlbmRlcmVkO1xyXG4gICAgICAgICAgICBhZGRDaGlsZHJlbihwYXJlbnRWTm9kZSwgZmlsdGVyZWRSZW5kZXJlZCwgcHJvamVjdGlvbk9wdGlvbnMsIGluc3RhbmNlLCBpbnNlcnRCZWZvcmUsIGNoaWxkTm9kZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2UsIHsgZG5vZGUsIHBhcmVudFZOb2RlIH0pO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGRSb290KCk7XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5vbkF0dGFjaCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gcHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50O1xyXG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5tZXJnZUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZG9jID0gcGFyZW50Vk5vZGUuZG9tTm9kZS5vd25lckRvY3VtZW50O1xyXG4gICAgICAgIGlmICghZG5vZGUudGFnICYmIHR5cGVvZiBkbm9kZS50ZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUuZG9tTm9kZSAhPT0gdW5kZWZpbmVkICYmIHBhcmVudFZOb2RlLmRvbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RvbU5vZGUgPSBkbm9kZS5kb21Ob2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Vk5vZGUuZG9tTm9kZSA9PT0gZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5yZXBsYWNlQ2hpbGQobmV3RG9tTm9kZSwgZG5vZGUuZG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmFwcGVuZENoaWxkKG5ld0RvbU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZSAmJiBkbm9kZS5kb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG5vZGUuZG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkbm9kZS5kb21Ob2RlID0gbmV3RG9tTm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKGRub2RlLnRleHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5pbnNlcnRCZWZvcmUoZG9tTm9kZSwgaW5zZXJ0QmVmb3JlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQoZG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChkbm9kZS5kb21Ob2RlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkbm9kZS50YWcgPT09ICdzdmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBuYW1lc3BhY2U6IE5BTUVTUEFDRV9TVkcgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMubmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50TlMocHJvamVjdGlvbk9wdGlvbnMubmFtZXNwYWNlLCBkbm9kZS50YWcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlIHx8IGRvYy5jcmVhdGVFbGVtZW50KGRub2RlLnRhZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbml0UHJvcGVydGllc0FuZENoaWxkcmVuKGRvbU5vZGUsIGRub2RlLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuaW5zZXJ0QmVmb3JlKGRvbU5vZGUsIGluc2VydEJlZm9yZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZG9tTm9kZS5wYXJlbnROb2RlICE9PSBwYXJlbnRWTm9kZS5kb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmFwcGVuZENoaWxkKGRvbU5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZURvbShwcmV2aW91cywgZG5vZGUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgcGFyZW50SW5zdGFuY2UsIG9sZE5leHRTaWJsaW5ncywgbmV4dFNpYmxpbmdzKSB7XHJcbiAgICBpZiAoaXNXTm9kZShkbm9kZSkpIHtcclxuICAgICAgICBjb25zdCB7IGluc3RhbmNlIH0gPSBwcmV2aW91cztcclxuICAgICAgICBjb25zdCB7IHBhcmVudFZOb2RlLCBkbm9kZTogbm9kZSB9ID0gaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICBjb25zdCBwcmV2aW91c1JlbmRlcmVkID0gbm9kZSA/IG5vZGUucmVuZGVyZWQgOiBwcmV2aW91cy5yZW5kZXJlZDtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSB0cnVlO1xyXG4gICAgICAgIGluc3RhbmNlLl9fc2V0Q29yZVByb3BlcnRpZXNfXyhkbm9kZS5jb3JlUHJvcGVydGllcyk7XHJcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDaGlsZHJlbl9fKGRub2RlLmNoaWxkcmVuKTtcclxuICAgICAgICBpbnN0YW5jZS5fX3NldFByb3BlcnRpZXNfXyhkbm9kZS5wcm9wZXJ0aWVzKTtcclxuICAgICAgICBuZXh0U2libGluZ01hcC5zZXQoaW5zdGFuY2UsIG5leHRTaWJsaW5ncyk7XHJcbiAgICAgICAgZG5vZGUuaW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmRpcnR5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVkID0gaW5zdGFuY2UuX19yZW5kZXJfXygpO1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGRub2RlLnJlbmRlcmVkID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihyZW5kZXJlZCwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB1cGRhdGVDaGlsZHJlbihwYXJlbnRWTm9kZSwgb2xkTmV4dFNpYmxpbmdzLCBwcmV2aW91c1JlbmRlcmVkLCBkbm9kZS5yZW5kZXJlZCwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgZG5vZGUucmVuZGVyZWQgPSBwcmV2aW91c1JlbmRlcmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2UsIHsgZG5vZGUsIHBhcmVudFZOb2RlIH0pO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGRSb290KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAocHJldmlvdXMgPT09IGRub2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZG9tTm9kZSA9IChkbm9kZS5kb21Ob2RlID0gcHJldmlvdXMuZG9tTm9kZSk7XHJcbiAgICAgICAgbGV0IHRleHRVcGRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHVwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIWRub2RlLnRhZyAmJiB0eXBlb2YgZG5vZGUudGV4dCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGRub2RlLnRleHQgIT09IHByZXZpb3VzLnRleHQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RvbU5vZGUgPSBkb21Ob2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCk7XHJcbiAgICAgICAgICAgICAgICBkb21Ob2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld0RvbU5vZGUsIGRvbU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZSA9IG5ld0RvbU5vZGU7XHJcbiAgICAgICAgICAgICAgICB0ZXh0VXBkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFVwZGF0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChkbm9kZS50YWcgJiYgZG5vZGUudGFnLmxhc3RJbmRleE9mKCdzdmcnLCAwKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBuYW1lc3BhY2U6IE5BTUVTUEFDRV9TVkcgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByZXZpb3VzLmNoaWxkcmVuICE9PSBkbm9kZS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGRub2RlLmNoaWxkcmVuLCBwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICBkbm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlZCA9XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ2hpbGRyZW4oZG5vZGUsIG9sZE5leHRTaWJsaW5ncywgcHJldmlvdXMuY2hpbGRyZW4sIGNoaWxkcmVuLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHx8IHVwZGF0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9wZXJ0aWVzID0gYnVpbGRQcmV2aW91c1Byb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXMsIGRub2RlKTtcclxuICAgICAgICAgICAgaWYgKGRub2RlLmF0dHJpYnV0ZXMgJiYgZG5vZGUuZXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5hdHRyaWJ1dGVzLCBkbm9kZS5hdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkID1cclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5wcm9wZXJ0aWVzLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgZmFsc2UpIHx8IHVwZGF0ZWQ7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuZXZlbnRzLCBkbm9kZS5ldmVudHMsIHByb2plY3Rpb25PcHRpb25zLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGRub2RlLmV2ZW50cztcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaCgoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVFdmVudChkb21Ob2RlLCBldmVudCwgZXZlbnRzW2V2ZW50XSwgcHJvamVjdGlvbk9wdGlvbnMsIGRub2RlLnByb3BlcnRpZXMuYmluZCwgcHJldmlvdXNQcm9wZXJ0aWVzLmV2ZW50c1tldmVudF0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkID1cclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5wcm9wZXJ0aWVzLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZG5vZGUucHJvcGVydGllcy5rZXkgIT09IG51bGwgJiYgZG5vZGUucHJvcGVydGllcy5rZXkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGQoZG9tTm9kZSwgYCR7ZG5vZGUucHJvcGVydGllcy5rZXl9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVwZGF0ZWQgJiYgZG5vZGUucHJvcGVydGllcyAmJiBkbm9kZS5wcm9wZXJ0aWVzLnVwZGF0ZUFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICBkbm9kZS5wcm9wZXJ0aWVzLnVwZGF0ZUFuaW1hdGlvbihkb21Ob2RlLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcmV2aW91cy5wcm9wZXJ0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKHZub2RlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgLy8gdHJhbnNmZXIgYW55IHByb3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkIC0gYXMgdGhlc2UgbXVzdCBiZSBkZWNvcmF0ZWQgcHJvcGVydGllc1xyXG4gICAgdm5vZGUuZGVjb3JhdGVkRGVmZXJyZWRQcm9wZXJ0aWVzID0gdm5vZGUucHJvcGVydGllcztcclxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB2bm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayghIXZub2RlLmluc2VydGVkKTtcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIHZub2RlLnByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0aWVzLCB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMpO1xyXG4gICAgcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHZub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrKCEhdm5vZGUuaW5zZXJ0ZWQpLCB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMpO1xyXG4gICAgICAgIHVwZGF0ZVByb3BlcnRpZXModm5vZGUuZG9tTm9kZSwgdm5vZGUucHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIHZub2RlLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gcnVuRGVmZXJyZWRSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xyXG4gICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xyXG4gICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChnbG9iYWwucmVxdWVzdElkbGVDYWxsYmFjaykge1xyXG4gICAgICAgICAgICBnbG9iYWwucmVxdWVzdElkbGVDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBzY2hlZHVsZVJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgaWYgKHByb2plY3Rpb25PcHRpb25zLnN5bmMpIHtcclxuICAgICAgICByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocHJvamVjdG9yU3RhdGUucmVuZGVyU2NoZWR1bGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJTY2hlZHVsZWQgPSBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgcmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IHJlbmRlclF1ZXVlID0gcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWU7XHJcbiAgICBjb25zdCByZW5kZXJzID0gWy4uLnJlbmRlclF1ZXVlXTtcclxuICAgIHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlID0gW107XHJcbiAgICByZW5kZXJzLnNvcnQoKGEsIGIpID0+IGEuZGVwdGggLSBiLmRlcHRoKTtcclxuICAgIGNvbnN0IHByZXZpb3VzbHlSZW5kZXJlZCA9IFtdO1xyXG4gICAgd2hpbGUgKHJlbmRlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gcmVuZGVycy5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChpbnN0YW5jZU1hcC5oYXMoaW5zdGFuY2UpICYmIHByZXZpb3VzbHlSZW5kZXJlZC5pbmRleE9mKGluc3RhbmNlKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNseVJlbmRlcmVkLnB1c2goaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICBjb25zdCB7IHBhcmVudFZOb2RlLCBkbm9kZSB9ID0gaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdzID0gbmV4dFNpYmxpbmdNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICAgICAgdXBkYXRlRG9tKGRub2RlLCB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSksIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgaW5zdGFuY2UsIG5leHRTaWJsaW5ncywgbmV4dFNpYmxpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBydW5BZnRlclJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbn1cclxuZXhwb3J0IGNvbnN0IGRvbSA9IHtcclxuICAgIGFwcGVuZDogZnVuY3Rpb24gKHBhcmVudE5vZGUsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICBjb25zdCBmaW5hbFByb2plY3Rvck9wdGlvbnMgPSBnZXRQcm9qZWN0aW9uT3B0aW9ucyhwcm9qZWN0aW9uT3B0aW9ucywgaW5zdGFuY2UpO1xyXG4gICAgICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0ge1xyXG4gICAgICAgICAgICBhZnRlclJlbmRlckNhbGxiYWNrczogW10sXHJcbiAgICAgICAgICAgIGRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzOiBbXSxcclxuICAgICAgICAgICAgbm9kZU1hcDogbmV3IFdlYWtNYXAoKSxcclxuICAgICAgICAgICAgcmVuZGVyU2NoZWR1bGVkOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHJlbmRlclF1ZXVlOiBbXSxcclxuICAgICAgICAgICAgbWVyZ2U6IHByb2plY3Rpb25PcHRpb25zLm1lcmdlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICBtZXJnZUVsZW1lbnQ6IHByb2plY3Rpb25PcHRpb25zLm1lcmdlRWxlbWVudFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGVNYXAuc2V0KGluc3RhbmNlLCBwcm9qZWN0b3JTdGF0ZSk7XHJcbiAgICAgICAgZmluYWxQcm9qZWN0b3JPcHRpb25zLnJvb3ROb2RlID0gcGFyZW50Tm9kZTtcclxuICAgICAgICBjb25zdCBwYXJlbnRWTm9kZSA9IHRvUGFyZW50Vk5vZGUoZmluYWxQcm9qZWN0b3JPcHRpb25zLnJvb3ROb2RlKTtcclxuICAgICAgICBjb25zdCBub2RlID0gdG9JbnRlcm5hbFdOb2RlKGluc3RhbmNlLCBpbnN0YW5jZURhdGEpO1xyXG4gICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZTogbm9kZSwgcGFyZW50Vk5vZGUgfSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLmludmFsaWRhdGUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZURhdGEucmVuZGVyaW5nID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWUucHVzaCh7IGluc3RhbmNlLCBkZXB0aDogZmluYWxQcm9qZWN0b3JPcHRpb25zLmRlcHRoIH0pO1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVSZW5kZXIoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdXBkYXRlRG9tKG5vZGUsIG5vZGUsIGZpbmFsUHJvamVjdG9yT3B0aW9ucywgcGFyZW50Vk5vZGUsIGluc3RhbmNlLCBbXSwgW10pO1xyXG4gICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGEub25BdHRhY2goKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhmaW5hbFByb2plY3Rvck9wdGlvbnMpO1xyXG4gICAgICAgIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZG9tTm9kZTogZmluYWxQcm9qZWN0b3JPcHRpb25zLnJvb3ROb2RlXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICB9LFxyXG4gICAgbWVyZ2U6IGZ1bmN0aW9uIChlbGVtZW50LCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIHByb2plY3Rpb25PcHRpb25zLm1lcmdlID0gdHJ1ZTtcclxuICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24gPSB0aGlzLmFwcGVuZChlbGVtZW50LnBhcmVudE5vZGUsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgIHByb2plY3RvclN0YXRlLm1lcmdlID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHByb2plY3Rpb247XHJcbiAgICB9XHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZkb20ubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS92ZG9tLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3Zkb20ubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIHdpZGdldEZhY3RvcnkgPSByZXF1aXJlKFwic3JjL21lbnUtaXRlbS9NZW51SXRlbVwiKTtcblxudmFyIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IHJlcXVpcmUoJ0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQnKS5kZWZhdWx0O1xyXG5cclxudmFyIGRlZmF1bHRFeHBvcnQgPSB3aWRnZXRGYWN0b3J5LmRlZmF1bHQ7XHJcbmRlZmF1bHRFeHBvcnQgJiYgcmVnaXN0ZXJDdXN0b21FbGVtZW50KGRlZmF1bHRFeHBvcnQpO1xyXG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ltcG9ydHMtbG9hZGVyP3dpZGdldEZhY3Rvcnk9c3JjL21lbnUtaXRlbS9NZW51SXRlbSEuL25vZGVfbW9kdWxlcy9AZG9qby9jbGktYnVpbGQtd2lkZ2V0L3RlbXBsYXRlL2N1c3RvbS1lbGVtZW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9pbXBvcnRzLWxvYWRlci9pbmRleC5qcz93aWRnZXRGYWN0b3J5PXNyYy9tZW51LWl0ZW0vTWVudUl0ZW0hLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0geVtvcFswXSAmIDIgPyBcInJldHVyblwiIDogb3BbMF0gPyBcInRocm93XCIgOiBcIm5leHRcIl0pICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gWzAsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7ICB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAob1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2goZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxuXHRcdGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUtaXRlbSIsImltcG9ydCB7IHYgfSBmcm9tICdAZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZCc7XHJcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdAZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9jdXN0b21FbGVtZW50JztcclxuaW1wb3J0IHsgV2lkZ2V0UHJvcGVydGllcyB9IGZyb20gJ0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgdGhlbWUsIFRoZW1lZE1peGluIH0gZnJvbSAnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQnO1xyXG5pbXBvcnQgeyBXaWRnZXRCYXNlIH0gZnJvbSAnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1dpZGdldEJhc2UnO1xyXG5cclxuaW1wb3J0ICogYXMgY3NzIGZyb20gJy4vbWVudUl0ZW0ubS5jc3MnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZW51SXRlbVByb3BlcnRpZXMgZXh0ZW5kcyBXaWRnZXRQcm9wZXJ0aWVzIHtcclxuXHR0aXRsZTogc3RyaW5nO1xyXG5cdHNlbGVjdGVkPzogYm9vbGVhbjtcclxuXHRkYXRhPzogYW55O1xyXG5cdG9uU2VsZWN0ZWQ/OiAoZGF0YTogYW55KSA9PiB2b2lkO1xyXG59XHJcblxyXG5AY3VzdG9tRWxlbWVudDxNZW51SXRlbVByb3BlcnRpZXM+KHtcclxuXHR0YWc6ICdkZW1vLW1lbnUtaXRlbScsXHJcblx0YXR0cmlidXRlczogWyd0aXRsZScsICdzZWxlY3RlZCddLFxyXG5cdGV2ZW50czogWydvblNlbGVjdGVkJ10sXHJcblx0cHJvcGVydGllczogWydkYXRhJywgJ3NlbGVjdGVkJ11cclxufSlcclxuQHRoZW1lKGNzcylcclxuZXhwb3J0IGNsYXNzIE1lbnVJdGVtIGV4dGVuZHMgVGhlbWVkTWl4aW4oV2lkZ2V0QmFzZSk8TWVudUl0ZW1Qcm9wZXJ0aWVzPiB7XHJcblx0cHJpdmF0ZSBfb25DbGljaygpIHtcclxuXHRcdHRoaXMucHJvcGVydGllcy5vblNlbGVjdGVkICYmIHRoaXMucHJvcGVydGllcy5vblNlbGVjdGVkKHRoaXMucHJvcGVydGllcy5kYXRhKTtcclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCByZW5kZXIoKSB7XHJcblx0XHRjb25zdCB7IHRpdGxlLCBzZWxlY3RlZCB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xyXG5cclxuXHRcdHJldHVybiB2KCdsaScsIHsgY2xhc3NlczogdGhpcy50aGVtZShjc3Mucm9vdCkgfSwgW1xyXG5cdFx0XHR2KFxyXG5cdFx0XHRcdCdzcGFuJyxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRjbGFzc2VzOiB0aGlzLnRoZW1lKFtjc3MuaXRlbSwgc2VsZWN0ZWQgPyBjc3Muc2VsZWN0ZWQgOiBudWxsXSksXHJcblx0XHRcdFx0XHRvbmNsaWNrOiB0aGlzLl9vbkNsaWNrXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRbdGl0bGVdXHJcblx0XHRcdClcclxuXHRcdF0pO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVudUl0ZW07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9dHMmaW5zdGFuY2VOYW1lPTBfbWVudS1pdGVtIS4vc3JjL21lbnUtaXRlbS9NZW51SXRlbS50cyIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcIiBfa2V5XCI6XCJ0ZXN0LWFwcC9tZW51SXRlbVwiLFwicm9vdFwiOlwibWVudUl0ZW0tbV9fcm9vdF9fc1VtVWlcIixcIml0ZW1cIjpcIm1lbnVJdGVtLW1fX2l0ZW1fXzJNazZSXCIsXCJzZWxlY3RlZFwiOlwibWVudUl0ZW0tbV9fc2VsZWN0ZWRfXzEtZjNJXCJ9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL21lbnUtaXRlbS9tZW51SXRlbS5tLmNzc1xuLy8gbW9kdWxlIGlkID0gLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudS1pdGVtIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/test-app/fixtures/windows/dev/menu/menu-1.0.0.js b/test-app/fixtures/windows/dev/menu/menu-1.0.0.js index b1a8f13..af4da3d 100644 --- a/test-app/fixtures/windows/dev/menu/menu-1.0.0.js +++ b/test-app/fixtures/windows/dev/menu/menu-1.0.0.js @@ -73,19 +73,19 @@ /************************************************************************/ /******/ ({ -/***/ "./node_modules/@dojo/core/Destroyable.mjs": +/***/ "./node_modules/@dojo/framework/core/Destroyable.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lang__ = __webpack_require__("./node_modules/@dojo/core/lang.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Promise__ = __webpack_require__("./node_modules/@dojo/shim/Promise.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lang__ = __webpack_require__("./node_modules/@dojo/framework/core/lang.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_Promise__ = __webpack_require__("./node_modules/@dojo/framework/shim/Promise.mjs"); /** * No operation function to replace own once instance is destoryed */ function noop() { - return __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Promise__["a" /* default */].resolve(false); + return __WEBPACK_IMPORTED_MODULE_1__shim_Promise__["a" /* default */].resolve(false); } /** * No op function used to replace own, once instance has been destoryed @@ -123,7 +123,7 @@ class Destroyable { * @returns {Promise { + return new __WEBPACK_IMPORTED_MODULE_1__shim_Promise__["a" /* default */]((resolve) => { this.handles.forEach((handle) => { handle && handle.destroy && handle.destroy(); }); @@ -140,19 +140,19 @@ class Destroyable { /***/ }), -/***/ "./node_modules/@dojo/core/Evented.mjs": +/***/ "./node_modules/@dojo/framework/core/Evented.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export isGlobMatch */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Destroyable__ = __webpack_require__("./node_modules/@dojo/core/Destroyable.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Destroyable__ = __webpack_require__("./node_modules/@dojo/framework/core/Destroyable.mjs"); /** * Map of computed regular expressions, keyed by string */ -const regexMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); +const regexMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); /** * Determines is the event type glob has been matched * @@ -183,12 +183,12 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /** * map of listeners keyed by event type */ - this.listenersMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this.listenersMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); } emit(event) { this.listenersMap.forEach((methods, type) => { if (isGlobMatch(type, event.type)) { - methods.forEach((method) => { + [...methods].forEach((method) => { method.call(this, event); }); } @@ -224,7 +224,7 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /***/ }), -/***/ "./node_modules/@dojo/core/lang.mjs": +/***/ "./node_modules/@dojo/framework/core/lang.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -238,8 +238,8 @@ class Evented extends __WEBPACK_IMPORTED_MODULE_1__Destroyable__["a" /* Destroya /* unused harmony export partial */ /* unused harmony export createHandle */ /* harmony export (immutable) */ __webpack_exports__["b"] = createCompositeHandle; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__ = __webpack_require__("./node_modules/@dojo/shim/object.mjs"); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_object__ = __webpack_require__("./node_modules/@dojo/framework/shim/object.mjs"); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__shim_object__["a"]; }); const slice = Array.prototype.slice; @@ -317,7 +317,7 @@ function create(prototype, ...mixins) { } const args = mixins.slice(); args.unshift(Object.create(prototype)); - return __WEBPACK_IMPORTED_MODULE_0__dojo_shim_object__["a" /* assign */].apply(null, args); + return __WEBPACK_IMPORTED_MODULE_0__shim_object__["a" /* assign */].apply(null, args); } function deepAssign(target, ...sources) { return _mixin({ @@ -439,7 +439,7 @@ function createCompositeHandle(...handles) { /***/ }), -/***/ "./node_modules/@dojo/has/has.mjs": +/***/ "./node_modules/@dojo/framework/has/has.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -652,16 +652,16 @@ add('host-node', function () { /***/ }), -/***/ "./node_modules/@dojo/shim/Map.mjs": +/***/ "./node_modules/@dojo/framework/shim/Map.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Map; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__object__ = __webpack_require__("./node_modules/@dojo/shim/object.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__object__ = __webpack_require__("./node_modules/@dojo/framework/shim/object.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -761,15 +761,15 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Promise.mjs": +/***/ "./node_modules/@dojo/framework/shim/Promise.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export ShimPromise */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_queue__ = __webpack_require__("./node_modules/@dojo/shim/support/queue.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_queue__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/queue.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); @@ -974,15 +974,15 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Symbol.mjs": +/***/ "./node_modules/@dojo/framework/shim/Symbol.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export Symbol */ /* unused harmony export isSymbol */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -1131,15 +1131,15 @@ function isSymbol(value) { /***/ }), -/***/ "./node_modules/@dojo/shim/WeakMap.mjs": +/***/ "./node_modules/@dojo/framework/shim/WeakMap.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export WeakMap */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -1254,7 +1254,7 @@ if (false) { /***/ }), -/***/ "./node_modules/@dojo/shim/array.mjs": +/***/ "./node_modules/@dojo/framework/shim/array.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1265,11 +1265,11 @@ if (false) { /* unused harmony export find */ /* unused harmony export findIndex */ /* unused harmony export includes */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/shim/iterator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__number__ = __webpack_require__("./node_modules/@dojo/shim/number.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__iterator__ = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__number__ = __webpack_require__("./node_modules/@dojo/framework/shim/number.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -1521,7 +1521,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/global.mjs": +/***/ "./node_modules/@dojo/framework/shim/global.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1547,7 +1547,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/iterator.mjs": +/***/ "./node_modules/@dojo/framework/shim/iterator.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1555,8 +1555,8 @@ else { /* unused harmony export isArrayLike */ /* unused harmony export get */ /* unused harmony export forOf */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__string__ = __webpack_require__("./node_modules/@dojo/shim/string.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__string__ = __webpack_require__("./node_modules/@dojo/framework/shim/string.mjs"); const staticDone = { done: true, value: undefined }; @@ -1673,7 +1673,7 @@ function forOf(iterable, callback, thisArg) { /***/ }), -/***/ "./node_modules/@dojo/shim/number.mjs": +/***/ "./node_modules/@dojo/framework/shim/number.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1681,7 +1681,7 @@ function forOf(iterable, callback, thisArg) { /* unused harmony export isFinite */ /* unused harmony export isInteger */ /* unused harmony export isSafeInteger */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); /** * The smallest interval between two representable numbers. @@ -1745,7 +1745,7 @@ function isSafeInteger(value) { /***/ }), -/***/ "./node_modules/@dojo/shim/object.mjs": +/***/ "./node_modules/@dojo/framework/shim/object.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1758,9 +1758,9 @@ function isSafeInteger(value) { /* unused harmony export getOwnPropertyDescriptors */ /* unused harmony export entries */ /* unused harmony export values */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); @@ -1875,7 +1875,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/string.mjs": +/***/ "./node_modules/@dojo/framework/shim/string.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1889,9 +1889,9 @@ else { /* unused harmony export startsWith */ /* unused harmony export padEnd */ /* unused harmony export padStart */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/shim/support/util.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__support_has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__support_util__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.mjs"); @@ -2200,33 +2200,33 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/support/has.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/has.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_has_has__ = __webpack_require__("./node_modules/@dojo/has/has.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__has_has__ = __webpack_require__("./node_modules/@dojo/framework/has/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); /* unused harmony reexport namespace */ -/* unused harmony default export */ var _unused_webpack_default_export = (__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["b" /* default */]); +/* unused harmony default export */ var _unused_webpack_default_export = (__WEBPACK_IMPORTED_MODULE_0__has_has__["b" /* default */]); /* ECMAScript 6 and 7 Features */ /* Array */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-array', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-array', () => { return (['from', 'of'].every((key) => key in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array) && ['findIndex', 'find', 'copyWithin'].every((key) => key in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype)); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-array-fill', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-array-fill', () => { if ('fill' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype) { /* Some versions of Safari do not properly implement this */ return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1; } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es7-array', () => 'includes' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es7-array', () => 'includes' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Array.prototype, true); /* Map */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-map', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-map', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Map === 'function') { /* IE11 and older versions of Safari are missing critical ES6 Map functionality @@ -2249,7 +2249,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-map', () return false; }, true); /* Math */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-math', () => { return [ 'clz32', 'sign', @@ -2269,7 +2269,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math', ( 'hypot' ].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Math[name] === 'function'); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math-imul', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-math-imul', () => { if ('imul' in __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Math) { /* Some versions of Safari on ios do not properly implement this */ return Math.imul(0xffffffff, 5) === -5; @@ -2277,19 +2277,19 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-math-imu return false; }, true); /* Object */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-object', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-object', () => { return true && ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Object[name] === 'function'); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es2017-object', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es2017-object', () => { return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Object[name] === 'function'); }, true); /* Observable */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es-observable', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Observable !== 'undefined', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es-observable', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Observable !== 'undefined', true); /* Promise */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-promise', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Promise !== 'undefined' && true, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-promise', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Promise !== 'undefined' && true, true); /* Set */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-set', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-set', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Set === 'function') { /* IE11 and older versions of Safari are missing critical ES6 Set functionality */ const set = new __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Set([1]); @@ -2298,7 +2298,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-set', () return false; }, true); /* String */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-string', () => { return ([ /* static methods */ 'fromCodePoint' @@ -2313,7 +2313,7 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string', 'includes' ].every((key) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].String.prototype[key] === 'function')); }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string-raw', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-string-raw', () => { function getCallSite(callSite, ...substitutions) { const result = [...callSite]; result.raw = callSite.raw; @@ -2328,13 +2328,13 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-string-r } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es2017-string', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es2017-string', () => { return ['padStart', 'padEnd'].every((key) => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].String.prototype[key] === 'function'); }, true); /* Symbol */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-symbol', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Symbol !== 'undefined' && typeof Symbol() === 'symbol', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-symbol', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Symbol !== 'undefined' && typeof Symbol() === 'symbol', true); /* WeakMap */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-weakmap', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('es6-weakmap', () => { if (typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].WeakMap !== 'undefined') { /* IE11 and older versions of Safari are missing critical ES6 Map functionality */ const key1 = {}; @@ -2346,16 +2346,16 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('es6-weakmap' return false; }, true); /* Miscellaneous features */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('microtasks', () => true || false || true, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('postmessage', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('microtasks', () => true || false || true, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('postmessage', () => { // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist. return typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].window !== 'undefined' && typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].postMessage === 'function'; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('raf', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].requestAnimationFrame === 'function', true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('setimmediate', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].setImmediate !== 'undefined', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('raf', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].requestAnimationFrame === 'function', true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('setimmediate', () => typeof __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].setImmediate !== 'undefined', true); /* DOM Features */ -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-mutationobserver', () => { +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('dom-mutationobserver', () => { if (true && Boolean(__WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].MutationObserver || __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].WebKitMutationObserver)) { // IE11 has an unreliable MutationObserver implementation where setProperty() does not // generate a mutation event, observers can crash, and the queue does not drain @@ -2371,18 +2371,18 @@ Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-mutation } return false; }, true); -Object(__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__["a" /* add */])('dom-webanimation', () => true && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Animation !== undefined && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].KeyframeEffect !== undefined, true); +Object(__WEBPACK_IMPORTED_MODULE_0__has_has__["a" /* add */])('dom-webanimation', () => true && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].Animation !== undefined && __WEBPACK_IMPORTED_MODULE_1__global__["a" /* default */].KeyframeEffect !== undefined, true); //# sourceMappingURL=has.mjs.map /***/ }), -/***/ "./node_modules/@dojo/shim/support/queue.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/queue.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export queueMicroTask */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__has__ = __webpack_require__("./node_modules/@dojo/shim/support/has.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__has__ = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.mjs"); function executeTask(item) { @@ -2576,7 +2576,7 @@ let queueMicroTask = (function () { /***/ }), -/***/ "./node_modules/@dojo/shim/support/util.mjs": +/***/ "./node_modules/@dojo/framework/shim/support/util.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -2608,13 +2608,13 @@ function wrapNative(nativeFunction) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/Injector.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/Injector.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); -class Injector extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* Evented */] { +class Injector extends __WEBPACK_IMPORTED_MODULE_0__core_Evented__["a" /* Evented */] { constructor(payload) { super(); this._payload = payload; @@ -2639,13 +2639,13 @@ class Injector extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* E /***/ }), -/***/ "./node_modules/@dojo/widget-core/NodeHandler.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export NodeEventType */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); /** @@ -2658,10 +2658,10 @@ var NodeEventType; NodeEventType["Projector"] = "Projector"; NodeEventType["Widget"] = "Widget"; })(NodeEventType || (NodeEventType = {})); -class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" /* Evented */] { +class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__core_Evented__["a" /* Evented */] { constructor() { super(...arguments); - this._nodeMap = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._nodeMap = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } get(key) { return this._nodeMap.get(key); @@ -2690,16 +2690,16 @@ class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" / /***/ }), -/***/ "./node_modules/@dojo/widget-core/Registry.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/Registry.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["d"] = isWidgetBaseConstructor; /* unused harmony export isWidgetConstructorDefaultExport */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__ = __webpack_require__("./node_modules/@dojo/shim/Promise.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Promise__ = __webpack_require__("./node_modules/@dojo/framework/shim/Promise.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); @@ -2707,7 +2707,7 @@ class NodeHandler extends __WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__["a" / /** * Widget base symbol type */ -const WIDGET_BASE_TYPE = Object(__WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__["a" /* default */])('Widget Base'); +const WIDGET_BASE_TYPE = Object(__WEBPACK_IMPORTED_MODULE_2__shim_Symbol__["a" /* default */])('Widget Base'); /* harmony export (immutable) */ __webpack_exports__["b"] = WIDGET_BASE_TYPE; /** @@ -2728,7 +2728,7 @@ function isWidgetConstructorDefaultExport(item) { /** * The Registry implementation */ -class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* Evented */] { +class Registry extends __WEBPACK_IMPORTED_MODULE_3__core_Evented__["a" /* Evented */] { /** * Emit loaded event for registry label */ @@ -2741,13 +2741,13 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E } define(label, item) { if (this._widgetRegistry === undefined) { - this._widgetRegistry = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._widgetRegistry = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } if (this._widgetRegistry.has(label)) { throw new Error(`widget has already been registered for '${label.toString()}'`); } this._widgetRegistry.set(label, item); - if (item instanceof __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__["a" /* default */]) { + if (item instanceof __WEBPACK_IMPORTED_MODULE_0__shim_Promise__["a" /* default */]) { item.then((widgetCtor) => { this._widgetRegistry.set(label, widgetCtor); this.emitLoadedEvent(label, widgetCtor); @@ -2762,12 +2762,12 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E } defineInjector(label, injectorFactory) { if (this._injectorRegistry === undefined) { - this._injectorRegistry = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__["b" /* default */](); + this._injectorRegistry = new __WEBPACK_IMPORTED_MODULE_1__shim_Map__["b" /* default */](); } if (this._injectorRegistry.has(label)) { throw new Error(`injector has already been registered for '${label.toString()}'`); } - const invalidator = new __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* Evented */](); + const invalidator = new __WEBPACK_IMPORTED_MODULE_3__core_Evented__["a" /* Evented */](); const injectorItem = { injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })), invalidator @@ -2783,7 +2783,7 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E if (isWidgetBaseConstructor(item)) { return item; } - if (item instanceof __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__["a" /* default */]) { + if (item instanceof __WEBPACK_IMPORTED_MODULE_0__shim_Promise__["a" /* default */]) { return null; } const promise = item(); @@ -2820,22 +2820,22 @@ class Registry extends __WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__["a" /* E /***/ }), -/***/ "./node_modules/@dojo/widget-core/RegistryHandler.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__ = __webpack_require__("./node_modules/@dojo/core/Evented.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_Evented__ = __webpack_require__("./node_modules/@dojo/framework/core/Evented.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); -class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__["a" /* Evented */] { +class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__core_Evented__["a" /* Evented */] { constructor() { super(); this._registry = new __WEBPACK_IMPORTED_MODULE_2__Registry__["a" /* Registry */](); - this._registryWidgetLabelMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["a" /* Map */](); - this._registryInjectorLabelMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["a" /* Map */](); + this._registryWidgetLabelMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["a" /* Map */](); + this._registryInjectorLabelMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["a" /* Map */](); this.own(this._registry); const destroy = () => { if (this.baseRegistry) { @@ -2904,19 +2904,19 @@ class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__[" /***/ }), -/***/ "./node_modules/@dojo/widget-core/WidgetBase.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__ = __webpack_require__("./node_modules/@dojo/shim/Map.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__diff__ = __webpack_require__("./node_modules/@dojo/widget-core/diff.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__RegistryHandler__ = __webpack_require__("./node_modules/@dojo/widget-core/RegistryHandler.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__NodeHandler__ = __webpack_require__("./node_modules/@dojo/widget-core/NodeHandler.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__vdom__ = __webpack_require__("./node_modules/@dojo/widget-core/vdom.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Map__ = __webpack_require__("./node_modules/@dojo/framework/shim/Map.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__RegistryHandler__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__NodeHandler__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/NodeHandler.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__vdom__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); @@ -2926,9 +2926,9 @@ class RegistryHandler extends __WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__[" -const decoratorMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); +const decoratorMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); const boundAuto = __WEBPACK_IMPORTED_MODULE_4__diff__["a" /* auto */].bind(null); -const noBind = __WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__["a" /* default */].for('dojoNoBind'); +const noBind = __WEBPACK_IMPORTED_MODULE_2__shim_Symbol__["a" /* default */].for('dojoNoBind'); /* harmony export (immutable) */ __webpack_exports__["b"] = noBind; /** @@ -2950,7 +2950,7 @@ class WidgetBase { this._nodeHandler = new __WEBPACK_IMPORTED_MODULE_6__NodeHandler__["a" /* default */](); this._handles = []; this._children = []; - this._decoratorCache = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this._decoratorCache = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); this._properties = {}; this._boundRenderFunc = this.render.bind(this); this._boundInvalidate = this.invalidate.bind(this); @@ -2975,7 +2975,7 @@ class WidgetBase { } meta(MetaType) { if (this._metaMap === undefined) { - this._metaMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + this._metaMap = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); } let cached = this._metaMap.get(MetaType); if (!cached) { @@ -3059,9 +3059,14 @@ class WidgetBase { } } if (runReactions) { - this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => { - if (args.changed) { - reaction.call(this, args.previousProperties, args.newProperties); + const reactionFunctions = this.getDecorator('diffReaction'); + const executedReactions = []; + reactionFunctions.forEach(({ reaction, propertyName }) => { + const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1; + const reactionRun = executedReactions.indexOf(reaction) !== -1; + if (propertyChanged && !reactionRun) { + reaction.call(this, this._properties, diffPropertyResults); + executedReactions.push(reaction); } }); } @@ -3124,7 +3129,7 @@ class WidgetBase { if (this.hasOwnProperty('constructor')) { let decoratorList = decoratorMap.get(this.constructor); if (!decoratorList) { - decoratorList = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */](); + decoratorList = new __WEBPACK_IMPORTED_MODULE_0__shim_Map__["b" /* default */](); decoratorMap.set(this.constructor, decoratorList); } let specificDecoratorList = decoratorList.get(decoratorKey); @@ -3176,26 +3181,6 @@ class WidgetBase { this._decoratorCache.set(decoratorKey, allDecorators); return allDecorators; } - _mapDiffPropertyReactions(newProperties, changedPropertyKeys) { - const reactionFunctions = this.getDecorator('diffReaction'); - return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => { - let reactionArguments = reactionPropertyMap.get(reaction); - if (reactionArguments === undefined) { - reactionArguments = { - previousProperties: {}, - newProperties: {}, - changed: false - }; - } - reactionArguments.previousProperties[propertyName] = this._properties[propertyName]; - reactionArguments.newProperties[propertyName] = newProperties[propertyName]; - if (changedPropertyKeys.indexOf(propertyName) !== -1) { - reactionArguments.changed = true; - } - reactionPropertyMap.set(reaction, reactionArguments); - return reactionPropertyMap; - }, new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__["b" /* default */]()); - } /** * Binds unbound property functions to the specified `bind` property * @@ -3204,7 +3189,7 @@ class WidgetBase { _bindFunctionProperty(property, bind) { if (typeof property === 'function' && !property[noBind] && Object(__WEBPACK_IMPORTED_MODULE_8__Registry__["d" /* isWidgetBaseConstructor */])(property) === false) { if (this._bindFunctionPropertyMap === undefined) { - this._bindFunctionPropertyMap = new __WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__["a" /* default */](); + this._bindFunctionPropertyMap = new __WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__["a" /* default */](); } const bindInfo = this._bindFunctionPropertyMap.get(property) || {}; let { boundFunc, scope } = bindInfo; @@ -3258,7 +3243,7 @@ class WidgetBase { runAfterRenders(dNode) { const afterRenders = this.getDecorator('afterRender'); if (afterRenders.length > 0) { - return afterRenders.reduce((dNode, afterRenderFunction) => { + dNode = afterRenders.reduce((dNode, afterRenderFunction) => { return afterRenderFunction.call(this, dNode); }, dNode); } @@ -3298,7 +3283,7 @@ WidgetBase._type = __WEBPACK_IMPORTED_MODULE_8__Registry__["b" /* WIDGET_BASE_TY /***/ }), -/***/ "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3368,7 +3353,7 @@ function enter(node, properties, enterAnimation) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/d.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/d.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3380,24 +3365,24 @@ function enter(node, properties, enterAnimation) { /* harmony export (immutable) */ __webpack_exports__["h"] = w; /* harmony export (immutable) */ __webpack_exports__["g"] = v; /* harmony export (immutable) */ __webpack_exports__["c"] = dom; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__ = __webpack_require__("./node_modules/@dojo/shim/Symbol.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_Symbol__ = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.mjs"); /** * The symbol identifier for a WNode type */ -const WNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a WNode.'); +const WNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a WNode.'); /* harmony export (immutable) */ __webpack_exports__["b"] = WNODE; /** * The symbol identifier for a VNode type */ -const VNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a VNode.'); +const VNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a VNode.'); /* harmony export (immutable) */ __webpack_exports__["a"] = VNODE; /** * The symbol identifier for a VNode type created using dom() */ -const DOMVNODE = Object(__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__["a" /* default */])('Identifier for a VNode created using existing dom.'); +const DOMVNODE = Object(__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__["a" /* default */])('Identifier for a VNode created using existing dom.'); /* unused harmony export DOMVNODE */ /** @@ -3499,12 +3484,12 @@ function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, child /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/afterRender.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = afterRender; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); function afterRender(method) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { @@ -3516,13 +3501,13 @@ function afterRender(method) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = alwaysRender; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__beforeProperties__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__beforeProperties__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs"); function alwaysRender() { @@ -3537,12 +3522,12 @@ function alwaysRender() { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = beforeProperties; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); function beforeProperties(method) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { @@ -3554,13 +3539,13 @@ function beforeProperties(method) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/customElement.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = customElement; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__registerCustomElement__ = __webpack_require__("./node_modules/@dojo/widget-core/registerCustomElement.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__registerCustomElement__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); /** @@ -3584,12 +3569,14 @@ function customElement({ tag, properties = [], attributes = [], events = [], chi /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = diffProperty; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); + /** * Decorator that can be used to register a function as a specific property diff @@ -3598,7 +3585,7 @@ function customElement({ tag, properties = [], attributes = [], events = [], chi * @param diffType The diff type, default is DiffType.AUTO. * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM */ -function diffProperty(propertyName, diffFunction, reactionFunction) { +function diffProperty(propertyName, diffFunction = __WEBPACK_IMPORTED_MODULE_1__diff__["a" /* auto */], reactionFunction) { return Object(__WEBPACK_IMPORTED_MODULE_0__handleDecorator__["a" /* handleDecorator */])((target, propertyKey) => { target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null)); target.addDecorator('registeredDiffProperty', propertyName); @@ -3615,7 +3602,7 @@ function diffProperty(propertyName, diffFunction, reactionFunction) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3641,21 +3628,21 @@ function handleDecorator(handler) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/inject.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = inject; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__beforeProperties__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__beforeProperties__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs"); /** * Map of instances against registered injectors. */ -const registeredInjectorsMap = new __WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__["a" /* default */](); +const registeredInjectorsMap = new __WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__["a" /* default */](); /** * Decorator retrieves an injector from an available registry using the name and * calls the `getProperties` function with the payload from the injector @@ -3689,7 +3676,7 @@ function inject({ name, getProperties }) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/diff.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/diff.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3698,7 +3685,7 @@ function inject({ name, getProperties }) { /* unused harmony export reference */ /* harmony export (immutable) */ __webpack_exports__["b"] = shallow; /* harmony export (immutable) */ __webpack_exports__["a"] = auto; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); function isObjectOrArray(value) { return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value); @@ -3768,7 +3755,7 @@ function auto(previousProperty, newProperty) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Projector.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3776,11 +3763,11 @@ function auto(previousProperty, newProperty) { /* unused harmony export AttachType */ /* harmony export (immutable) */ __webpack_exports__["a"] = ProjectorMixin; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__ = __webpack_require__("./node_modules/@dojo/core/lang.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__ = __webpack_require__("./node_modules/@dojo/widget-core/animations/cssTransitions.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/afterRender.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__vdom__ = __webpack_require__("./node_modules/@dojo/widget-core/vdom.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_lang__ = __webpack_require__("./node_modules/@dojo/framework/core/lang.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__vdom__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.mjs"); @@ -3878,7 +3865,7 @@ function ProjectorMixin(Base) { this._projectorProperties.registry.destroy(); } } - this._projectorProperties = Object(__WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__["a" /* assign */])({}, properties); + this._projectorProperties = Object(__WEBPACK_IMPORTED_MODULE_1__core_lang__["a" /* assign */])({}, properties); super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry }); super.__setProperties__(properties); } @@ -3929,10 +3916,7 @@ function ProjectorMixin(Base) { } } __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ - Object(__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__["a" /* afterRender */])(), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:type", Function), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:paramtypes", [Object]), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:returntype", void 0) + Object(__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__["a" /* afterRender */])() ], Projector.prototype, "afterRender", null); return Projector; } @@ -3941,7 +3925,7 @@ function ProjectorMixin(Base) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Themed.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -3949,11 +3933,11 @@ function ProjectorMixin(Base) { /* harmony export (immutable) */ __webpack_exports__["b"] = registerThemeInjector; /* harmony export (immutable) */ __webpack_exports__["a"] = ThemedMixin; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Injector__ = __webpack_require__("./node_modules/@dojo/widget-core/Injector.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__decorators_inject__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/inject.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/diffProperty.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__diff__ = __webpack_require__("./node_modules/@dojo/widget-core/diff.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Injector__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Injector.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__decorators_inject__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/inject.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__diff__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.mjs"); @@ -4066,7 +4050,7 @@ function ThemedMixin(Base) { const baseThemes = this.getDecorator('baseThemeClasses'); if (!this._registeredBaseTheme) { this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => { - const _a = THEME_KEY, key = baseTheme[_a], classes = __WEBPACK_IMPORTED_MODULE_0_tslib__["c" /* __rest */](baseTheme, [typeof _a === "symbol" ? _a : _a + ""]); + const _a = THEME_KEY, key = baseTheme[_a], classes = __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __rest */](baseTheme, [typeof _a === "symbol" ? _a : _a + ""]); this._registeredBaseThemeKeys.push(key); return Object.assign({}, finalBaseTheme, classes); }, {}); @@ -4080,10 +4064,7 @@ function ThemedMixin(Base) { }; __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('theme', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]), - Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('extraClasses', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:type", Function), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:paramtypes", []), - __WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __metadata */]("design:returntype", void 0) + Object(__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__["a" /* diffProperty */])('extraClasses', __WEBPACK_IMPORTED_MODULE_5__diff__["b" /* shallow */]) ], Themed.prototype, "onPropertiesChanged", null); Themed = __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ Object(__WEBPACK_IMPORTED_MODULE_2__decorators_inject__["a" /* inject */])({ @@ -4103,7 +4084,7 @@ function ThemedMixin(Base) { /***/ }), -/***/ "./node_modules/@dojo/widget-core/registerCustomElement.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -4113,13 +4094,13 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony export (immutable) */ __webpack_exports__["create"] = create; /* harmony export (immutable) */ __webpack_exports__["register"] = register; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__WidgetBase__ = __webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__mixins_Projector__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Projector.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__ = __webpack_require__("./node_modules/@dojo/shim/array.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__mixins_Themed__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__WidgetBase__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__mixins_Projector__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__shim_array__ = __webpack_require__("./node_modules/@dojo/framework/shim/array.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__shim_global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__mixins_Themed__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs"); @@ -4216,7 +4197,7 @@ function create(descriptor, WidgetConstructor) { }); Object.defineProperties(this, domProperties); const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children; - Object(__WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__["a" /* from */])(children).forEach((childNode) => { + Object(__WEBPACK_IMPORTED_MODULE_3__shim_array__["a" /* from */])(children).forEach((childNode) => { if (childType === CustomElementChildType.DOJO) { childNode.addEventListener('dojo-ce-render', () => this._render()); childNode.addEventListener('dojo-ce-connected', () => this._render()); @@ -4236,7 +4217,7 @@ function create(descriptor, WidgetConstructor) { }; const registry = registryFactory(); const themeContext = Object(__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__["b" /* registerThemeInjector */])(this._getTheme(), registry); - __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme())); + __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme())); const Projector = Object(__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__["a" /* ProjectorMixin */])(Wrapper); this._projector = new Projector(); this._projector.setProperties({ registry }); @@ -4248,8 +4229,8 @@ function create(descriptor, WidgetConstructor) { })); } _getTheme() { - if (__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */] && __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce && __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.theme) { - return __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.themes[__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].dojoce.theme]; + if (__WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */] && __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce && __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.theme) { + return __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.themes[__WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].dojoce.theme]; } } _childConnected(e) { @@ -4329,25 +4310,25 @@ function register(WidgetConstructor) { if (!descriptor) { throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?'); } - __WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__["a" /* default */].customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor)); + __WEBPACK_IMPORTED_MODULE_5__shim_global__["a" /* default */].customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor)); } /* harmony default export */ __webpack_exports__["default"] = (register); //# sourceMappingURL=registerCustomElement.mjs.map /***/ }), -/***/ "./node_modules/@dojo/widget-core/vdom.mjs": +/***/ "./node_modules/@dojo/framework/widget-core/vdom.mjs": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export toParentVNode */ /* unused harmony export toTextVNode */ /* unused harmony export filterAndDecorateChildren */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__ = __webpack_require__("./node_modules/@dojo/shim/global.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__ = __webpack_require__("./node_modules/@dojo/shim/array.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Registry__ = __webpack_require__("./node_modules/@dojo/widget-core/Registry.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/shim/WeakMap.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shim_global__ = __webpack_require__("./node_modules/@dojo/framework/shim/global.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shim_array__ = __webpack_require__("./node_modules/@dojo/framework/shim/array.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Registry__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__ = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.mjs"); @@ -4357,11 +4338,13 @@ const NAMESPACE_W3 = 'http://www.w3.org/'; const NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg'; const NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink'; const emptyArray = []; -const widgetInstanceMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); +const nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click']; +const widgetInstanceMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); /* harmony export (immutable) */ __webpack_exports__["b"] = widgetInstanceMap; -const instanceMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); -const projectorStateMap = new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); +const instanceMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); +const nextSiblingMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); +const projectorStateMap = new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); function same(dnode1, dnode2) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(dnode1) && Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(dnode2)) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["d" /* isDomVNode */])(dnode1) || Object(__WEBPACK_IMPORTED_MODULE_2__d__["d" /* isDomVNode */])(dnode2)) { @@ -4418,7 +4401,7 @@ function checkStyleValue(styleValue) { } function updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) { const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); - const eventMap = projectorState.nodeMap.get(domNode) || new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](); + const eventMap = projectorState.nodeMap.get(domNode) || new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](); if (previousValue) { const previousEvent = eventMap.get(previousValue); domNode.removeEventListener(eventName, previousEvent); @@ -4478,7 +4461,7 @@ function buildPreviousProperties(domNode, previous, current) { }, {}); return newProperties; } -function focusNode(propValue, previousValue, domNode, projectionOptions) { +function nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) { let result; if (typeof propValue === 'function') { result = propValue(); @@ -4489,7 +4472,7 @@ function focusNode(propValue, previousValue, domNode, projectionOptions) { if (result === true) { const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); projectorState.deferredRenderCallbacks.push(() => { - domNode.focus(); + domNode[propName](); }); } } @@ -4585,8 +4568,8 @@ function updateProperties(domNode, previousProperties, properties, projectionOpt } } } - else if (propName === 'focus') { - focusNode(propValue, previousValue, domNode, projectionOptions); + else if (nodeOperations.indexOf(propName) !== -1) { + nodeOperation(propName, propValue, previousValue, domNode, projectionOptions); } else if (propName === 'styles') { const styleNames = Object.keys(propValue); @@ -4740,7 +4723,8 @@ function nodeAdded(dnode, transitions) { } function nodeToRemove(dnode, transitions, projectionOptions) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { - const rendered = dnode.rendered || emptyArray; + const item = instanceMap.get(dnode.instance); + const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray; if (dnode.instance) { const instanceData = widgetInstanceMap.get(dnode.instance); instanceData.onDetach(); @@ -4804,7 +4788,7 @@ function checkDistinguishable(childNodes, indexToCheck, parentInstance) { } } } -function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) { +function updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) { oldChildren = oldChildren || emptyArray; newChildren = newChildren; const oldChildrenLength = oldChildren.length; @@ -4824,38 +4808,49 @@ function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, p addDeferredProperties(newChild, projectionOptions); } if (oldChild !== undefined && same(oldChild, newChild)) { - textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated; oldIndex++; newIndex++; + textUpdated = + updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated; continue; } const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1); const addChild = () => { let insertBeforeDomNode = undefined; + let childrenArray = oldChildren; + let nextIndex = oldIndex + 1; let child = oldChildren[oldIndex]; + if (!child) { + child = siblings[0]; + nextIndex = 1; + childrenArray = siblings; + } if (child) { - let nextIndex = oldIndex + 1; let insertBeforeChildren = [child]; while (insertBeforeChildren.length) { const insertBefore = insertBeforeChildren.shift(); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(insertBefore)) { - if (insertBefore.rendered) { - insertBeforeChildren.push(...insertBefore.rendered); + const item = instanceMap.get(insertBefore.instance); + if (item && item.dnode.rendered) { + insertBeforeChildren.push(...item.dnode.rendered); } } else { if (insertBefore.domNode) { + if (insertBefore.domNode.parentElement !== parentVNode.domNode) { + break; + } insertBeforeDomNode = insertBefore.domNode; break; } } - if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) { - insertBeforeChildren.push(oldChildren[nextIndex]); + if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) { + insertBeforeChildren.push(childrenArray[nextIndex]); nextIndex++; } } } - createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance); + createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance); nodeAdded(newChild, transitions); const indexToCheck = newIndex; projectorState.afterRenderCallbacks.push(() => { @@ -4916,12 +4911,13 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i } const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); if (projectorState.merge && childNodes === undefined) { - childNodes = Object(__WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__["a" /* from */])(parentVNode.domNode.childNodes); + childNodes = Object(__WEBPACK_IMPORTED_MODULE_1__shim_array__["a" /* from */])(parentVNode.domNode.childNodes); } const transitions = projectionOptions.transitions; projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 }); for (let i = 0; i < children.length; i++) { const child = children[i]; + const nextSiblings = children.slice(i + 1); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["e" /* isVNode */])(child)) { if (projectorState.merge && childNodes) { let domElement = undefined; @@ -4932,10 +4928,10 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i } } } - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance); } else { - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes); } nodeAdded(child, transitions); } @@ -4963,7 +4959,7 @@ function initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOpt } dnode.inserted = true; } -function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) { +function createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) { let domNode; const projectorState = projectorStateMap.get(projectionOptions.projectorInstance); if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { @@ -4978,6 +4974,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } const instance = new widgetConstructor(); dnode.instance = instance; + nextSiblingMap.set(instance, nextSiblings); const instanceData = widgetInstanceMap.get(instance); instanceData.invalidate = () => { instanceData.dirty = true; @@ -5058,7 +5055,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } } } -function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) { +function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) { if (Object(__WEBPACK_IMPORTED_MODULE_2__d__["f" /* isWNode */])(dnode)) { const { instance } = previous; const { parentVNode, dnode: node } = instanceMap.get(instance); @@ -5068,12 +5065,13 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan instance.__setCoreProperties__(dnode.coreProperties); instance.__setChildren__(dnode.children); instance.__setProperties__(dnode.properties); + nextSiblingMap.set(instance, nextSiblings); dnode.instance = instance; if (instanceData.dirty === true) { const rendered = instance.__render__(); instanceData.rendering = false; dnode.rendered = filterAndDecorateChildren(rendered, instance); - updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions); + updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions); } else { instanceData.rendering = false; @@ -5106,7 +5104,7 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan const children = filterAndDecorateChildren(dnode.children, parentInstance); dnode.children = children; updated = - updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated; + updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated; } const previousProperties = buildPreviousProperties(domNode, previous, dnode); if (dnode.attributes && dnode.events) { @@ -5156,7 +5154,7 @@ function runDeferredRenderCallbacks(projectionOptions) { } } else { - __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestAnimationFrame(() => { + __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestAnimationFrame(() => { while (projectorState.deferredRenderCallbacks.length) { const callback = projectorState.deferredRenderCallbacks.shift(); callback && callback(); @@ -5174,8 +5172,8 @@ function runAfterRenderCallbacks(projectionOptions) { } } else { - if (__WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestIdleCallback) { - __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestIdleCallback(() => { + if (__WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestIdleCallback) { + __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestIdleCallback(() => { while (projectorState.afterRenderCallbacks.length) { const callback = projectorState.afterRenderCallbacks.shift(); callback && callback(); @@ -5198,7 +5196,7 @@ function scheduleRender(projectionOptions) { render(projectionOptions); } else if (projectorState.renderScheduled === undefined) { - projectorState.renderScheduled = __WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__["a" /* default */].requestAnimationFrame(() => { + projectorState.renderScheduled = __WEBPACK_IMPORTED_MODULE_0__shim_global__["a" /* default */].requestAnimationFrame(() => { render(projectionOptions); }); } @@ -5217,7 +5215,8 @@ function render(projectionOptions) { previouslyRendered.push(instance); const { parentVNode, dnode } = instanceMap.get(instance); const instanceData = widgetInstanceMap.get(instance); - updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance); + const nextSiblings = nextSiblingMap.get(instance); + updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings); } } runAfterRenderCallbacks(projectionOptions); @@ -5230,7 +5229,7 @@ const dom = { const projectorState = { afterRenderCallbacks: [], deferredRenderCallbacks: [], - nodeMap: new __WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__["a" /* default */](), + nodeMap: new __WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__["a" /* default */](), renderScheduled: undefined, renderQueue: [], merge: projectionOptions.merge || false, @@ -5248,7 +5247,7 @@ const dom = { scheduleRender(finalProjectorOptions); } }; - updateDom(node, node, finalProjectorOptions, parentVNode, instance); + updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []); projectorState.afterRenderCallbacks.push(() => { instanceData.onAttach(); }); @@ -5282,7 +5281,7 @@ const dom = { /*** IMPORTS FROM imports-loader ***/ var widgetFactory = __webpack_require__("./src/menu/Menu.ts"); -var registerCustomElement = __webpack_require__("./node_modules/@dojo/widget-core/registerCustomElement.mjs").default; +var registerCustomElement = __webpack_require__("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs").default; var defaultExport = widgetFactory.default; defaultExport && registerCustomElement(defaultExport); @@ -5488,10 +5487,10 @@ process.umask = function() { return 0; }; "use strict"; /* unused harmony export __extends */ /* unused harmony export __assign */ -/* harmony export (immutable) */ __webpack_exports__["c"] = __rest; +/* harmony export (immutable) */ __webpack_exports__["b"] = __rest; /* harmony export (immutable) */ __webpack_exports__["a"] = __decorate; /* unused harmony export __param */ -/* harmony export (immutable) */ __webpack_exports__["b"] = __metadata; +/* unused harmony export __metadata */ /* unused harmony export __awaiter */ /* unused harmony export __generator */ /* unused harmony export __exportStar */ @@ -5708,10 +5707,10 @@ module.exports = g; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Menu", function() { return Menu; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__ = __webpack_require__("./node_modules/@dojo/widget-core/d.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__ = __webpack_require__("./node_modules/@dojo/widget-core/decorators/customElement.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__ = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.mjs"); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__ = __webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__ = __webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__menu_m_css__ = __webpack_require__("./src/menu/menu.m.css"); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__menu_m_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__); @@ -5720,7 +5719,7 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -let Menu = class Menu extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__["a" /* ThemedMixin */])(__WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__["a" /* WidgetBase */]) { +let Menu = class Menu extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__["a" /* ThemedMixin */])(__WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__["a" /* WidgetBase */]) { _onSelected(id, data) { this._selectedId = id; this.properties.onSelected(data); @@ -5741,19 +5740,19 @@ let Menu = class Menu extends Object(__WEBPACK_IMPORTED_MODULE_3__dojo_widget_co } return child; }); - return Object(__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__["g" /* v */])('nav', { classes: this.theme(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__["root"]) }, [ - Object(__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__["g" /* v */])('ol', { + return Object(__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__["g" /* v */])('nav', { classes: this.theme(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__["root"]) }, [ + Object(__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__["g" /* v */])('ol', { classes: this.theme(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__["menuContainer"]) }, items) ]); } }; Menu = __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __decorate */]([ - Object(__WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__["a" /* customElement */])({ + Object(__WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__["a" /* customElement */])({ tag: 'demo-menu', events: ['onSelected'] }), - Object(__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__["c" /* theme */])(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__) + Object(__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__["c" /* theme */])(__WEBPACK_IMPORTED_MODULE_5__menu_m_css__) ], Menu); /* harmony default export */ __webpack_exports__["default"] = (Menu); @@ -5778,4 +5777,4 @@ module.exports = __webpack_require__("./node_modules/imports-loader/index.js?wid /***/ }) /******/ }));; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgY2EzYzE4N2FlYjBkOTcyZDNhZmQiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRGVzdHJveWFibGUubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0V2ZW50ZWQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL2xhbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9oYXMvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9NYXAubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1Byb21pc2UubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1N5bWJvbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vV2Vha01hcC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vYXJyYXkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2dsb2JhbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vaXRlcmF0b3IubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL251bWJlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vb2JqZWN0Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdHJpbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N1cHBvcnQvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3F1ZXVlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3V0aWwubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9JbmplY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL05vZGVIYW5kbGVyLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvUmVnaXN0cnkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9XaWRnZXRCYXNlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hbHdheXNSZW5kZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2JlZm9yZVByb3BlcnRpZXMubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9pbmplY3QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kaWZmLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS92ZG9tLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS9NZW51LnRzIiwid2VicGFjazovLy8uL3NyYy9tZW51L21lbnUubS5jc3M/ZWMxMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7QUM3RGdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSx3Qzs7Ozs7Ozs7Ozs7QUN2REE7QUFDc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0NBQWdDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2RWlCO0FBQ0E7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsaUM7Ozs7Ozs7Ozs7OztBQ25NQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8saUJBQWlCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxRQUFRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkUsUUFBUTtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnQzs7Ozs7Ozs7Ozs7Ozs7O0FDbk1vQztBQUNwQztBQUN5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLHFCQUFxQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxZQUFZO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFlBQVk7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0M7Ozs7Ozs7Ozs7Ozs7QUMvRkE7QUFDeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsV0FBVztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7O0FDdE1BO0FBQ0E7QUFDNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxtQzs7Ozs7Ozs7Ozs7OztBQ2hKQTtBQUNzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxxQkFBcUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGdDQUFnQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNrQztBQUNQO0FBQzNCO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3RELG9EQUFvRDtBQUNwRCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFlBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVM7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0M7Ozs7Ozs7O0FDdlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLG1DOzs7Ozs7Ozs7Ozs7Ozs7QUNqQkE7QUFDaUQ7QUFDakQsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDOzs7Ozs7Ozs7Ozs7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREE7QUFDQTtBQUNtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNBO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFlBQVk7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0Y7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DOzs7Ozs7Ozs7OztBQ3hTbUI7QUFDbkI7MEVBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsRUFBRTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxFQUFFO0FBQ2pFLG1DQUFtQyxtQkFBbUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxnQzs7Ozs7Ozs7Ozs7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Qzs7Ozs7Ozs7QUNyWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELGNBQWM7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSw4REFBOEQsZUFBZTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQXFCLGlCQUFpQixZQUFZLFNBQVMscUJBQXFCO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCOzs7Ozs7Ozs7O0FDNUcwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHdDOzs7Ozs7Ozs7OztBQ1AwQjtBQUNDO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0EseUM7Ozs7Ozs7Ozs7QUNWMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSw2Qzs7Ozs7Ozs7Ozs7QUNQaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUErQixnUEFBc0k7QUFDcks7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEM7Ozs7Ozs7Ozs7QUNuQjBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxhQUFhO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHlDOzs7Ozs7OztBQ3JCQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Qzs7Ozs7Ozs7Ozs7O0FDakJBO0FBQzBCO0FBQ0M7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7O0FDcEMyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakVBO0FBQ2lCO0FBQ2pCO0FBQ3NCO0FBQ1Y7QUFDRTtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxvREFBb0Q7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGdDQUFnQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0hBQWlEO0FBQ2pELHlDQUF5QyxnREFBZ0Q7QUFDekY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVGQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsYUFBYTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELDRCQUE0QixxQkFBcUI7QUFDdkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzVKQTtBQUNtQjtBQUNGO0FBQ1M7QUFDSDtBQUNMO0FBQ2xCO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLLElBQUk7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsVUFBVTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFdBQVcsRUFBRTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDLGlCQUFpQixJQUFJO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QyxhQUFhLElBQUk7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvSUE7QUFDNkI7QUFDSjtBQUNWO0FBQ0U7QUFDakI7QUFDZ0M7QUFDVDtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyx3REFBd0Q7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLElBQUk7QUFDbkM7QUFDQTtBQUNBO0FBQ0EsYUFBYSxJQUFJO0FBQ2pCLDRFQUF3QixvREFBb0Q7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUNBQXlDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGlDQUFpQztBQUNwRCwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUdBQTZDLG1DQUFtQztBQUNoRjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxXQUFXO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsVUFBVTtBQUNyQyx3R0FBb0Q7QUFDcEQsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsSUFBSTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0Q7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwTkE7QUFDNEI7QUFDeUI7QUFDbkI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix1QkFBdUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdUJBQXVCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1DQUFtQztBQUM5QztBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsZ0JBQWdCLGVBQWUsc0NBQXNDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUk7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixlQUFlO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsdUNBQXVDO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZUFBZTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDRCQUE0QjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDRCQUE0QjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHVCQUF1QjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDJCQUEyQjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixnQkFBZ0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxpQkFBaUIsS0FBSztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMkJBQTJCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsMkJBQTJCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCwrQ0FBK0M7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCw4REFBOEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQSxpQzs7Ozs7OztBQ3g1QkE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7QUNOQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQy9CLENBQUM7aUJBQ0QsQ0FBQztnQkFDRixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ2xELENBQUM7Z0JBQ0QsS0FBSyxDQUFDLFVBQVUscUJBQVEsS0FBSyxDQUFDLFVBQVUsRUFBSyxVQUFVLENBQUUsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLHNFQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaURBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDbEQsc0VBQUMsQ0FDQSxJQUFJLEVBQ0o7Z0JBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsMERBQWlCLENBQUM7YUFDdEMsRUFDRCxLQUFLLENBQ0w7U0FDRCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Q7QUFuQ1ksSUFBSTtJQUxoQix5R0FBYSxDQUFpQjtRQUM5QixHQUFHLEVBQUUsV0FBVztRQUNoQixNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUM7S0FDdEIsQ0FBQztJQUNELHNGQUFLLENBQUMseUNBQUcsQ0FBQztHQUNFLElBQUksQ0FtQ2hCO0FBbkNnQjtBQXFDakIsK0RBQWUsSUFBSSxFQUFDOzs7Ozs7OztBQ3ZEcEI7QUFDQSxrQkFBa0IscUciLCJmaWxlIjoibWVudS0xLjAuMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGNhM2MxODdhZWIwZDk3MmQzYWZkIiwiaW1wb3J0IHsgY3JlYXRlQ29tcG9zaXRlSGFuZGxlIH0gZnJvbSAnLi9sYW5nJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ0Bkb2pvL3NoaW0vUHJvbWlzZSc7XG4vKipcbiAqIE5vIG9wZXJhdGlvbiBmdW5jdGlvbiB0byByZXBsYWNlIG93biBvbmNlIGluc3RhbmNlIGlzIGRlc3RvcnllZFxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xufVxuLyoqXG4gKiBObyBvcCBmdW5jdGlvbiB1c2VkIHRvIHJlcGxhY2Ugb3duLCBvbmNlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3RvcnllZFxuICovXG5mdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIG1hZGUgdG8gZGVzdHJveWVkIG1ldGhvZCcpO1xufVxuZXhwb3J0IGNsYXNzIERlc3Ryb3lhYmxlIHtcbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVzID0gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGhhbmRsZXMgZm9yIHRoZSBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gYHRoaXMuZGVzdHJveWAgaXMgY2FsbGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0hhbmRsZX0gaGFuZGxlIFRoZSBoYW5kbGUgdG8gYWRkIGZvciB0aGUgaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyB7SGFuZGxlfSBhIGhhbmRsZSBmb3IgdGhlIGhhbmRsZSwgcmVtb3ZlcyB0aGUgaGFuZGxlIGZvciB0aGUgaW5zdGFuY2UgYW5kIGNhbGxzIGRlc3Ryb3lcbiAgICAgKi9cbiAgICBvd24oaGFuZGxlcykge1xuICAgICAgICBjb25zdCBoYW5kbGUgPSBBcnJheS5pc0FycmF5KGhhbmRsZXMpID8gY3JlYXRlQ29tcG9zaXRlSGFuZGxlKC4uLmhhbmRsZXMpIDogaGFuZGxlcztcbiAgICAgICAgY29uc3QgeyBoYW5kbGVzOiBfaGFuZGxlcyB9ID0gdGhpcztcbiAgICAgICAgX2hhbmRsZXMucHVzaChoYW5kbGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICBfaGFuZGxlcy5zcGxpY2UoX2hhbmRsZXMuaW5kZXhPZihoYW5kbGUpKTtcbiAgICAgICAgICAgICAgICBoYW5kbGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXN0cnB5cyBhbGwgaGFuZGVycyByZWdpc3RlcmVkIGZvciB0aGUgaW5zdGFuY2VcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPGFueX0gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSBhbGwgaGFuZGxlcyBoYXZlIGJlZW4gZGVzdHJveWVkXG4gICAgICovXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlICYmIGhhbmRsZS5kZXN0cm95ICYmIGhhbmRsZS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm93biA9IGRlc3Ryb3llZDtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IERlc3Ryb3lhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RGVzdHJveWFibGUubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRGVzdHJveWFibGUubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0Rlc3Ryb3lhYmxlLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgTWFwIGZyb20gJ0Bkb2pvL3NoaW0vTWFwJztcclxuaW1wb3J0IHsgRGVzdHJveWFibGUgfSBmcm9tICcuL0Rlc3Ryb3lhYmxlJztcclxuLyoqXHJcbiAqIE1hcCBvZiBjb21wdXRlZCByZWd1bGFyIGV4cHJlc3Npb25zLCBrZXllZCBieSBzdHJpbmdcclxuICovXHJcbmNvbnN0IHJlZ2V4TWFwID0gbmV3IE1hcCgpO1xyXG4vKipcclxuICogRGV0ZXJtaW5lcyBpcyB0aGUgZXZlbnQgdHlwZSBnbG9iIGhhcyBiZWVuIG1hdGNoZWRcclxuICpcclxuICogQHJldHVybnMgYm9vbGVhbiB0aGF0IGluZGljYXRlcyBpZiB0aGUgZ2xvYiBpcyBtYXRjaGVkXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNHbG9iTWF0Y2goZ2xvYlN0cmluZywgdGFyZ2V0U3RyaW5nKSB7XHJcbiAgICBpZiAodHlwZW9mIHRhcmdldFN0cmluZyA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGdsb2JTdHJpbmcgPT09ICdzdHJpbmcnICYmIGdsb2JTdHJpbmcuaW5kZXhPZignKicpICE9PSAtMSkge1xyXG4gICAgICAgIGxldCByZWdleDtcclxuICAgICAgICBpZiAocmVnZXhNYXAuaGFzKGdsb2JTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgIHJlZ2V4ID0gcmVnZXhNYXAuZ2V0KGdsb2JTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtnbG9iU3RyaW5nLnJlcGxhY2UoL1xcKi9nLCAnLionKX0kYCk7XHJcbiAgICAgICAgICAgIHJlZ2V4TWFwLnNldChnbG9iU3RyaW5nLCByZWdleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KHRhcmdldFN0cmluZyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZ2xvYlN0cmluZyA9PT0gdGFyZ2V0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBFdmVudCBDbGFzc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEV2ZW50ZWQgZXh0ZW5kcyBEZXN0cm95YWJsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIG1hcCBvZiBsaXN0ZW5lcnMga2V5ZWQgYnkgZXZlbnQgdHlwZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG4gICAgZW1pdChldmVudCkge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwLmZvckVhY2goKG1ldGhvZHMsIHR5cGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzR2xvYk1hdGNoKHR5cGUsIGV2ZW50LnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2RzLmZvckVhY2goKG1ldGhvZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZC5jYWxsKHRoaXMsIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBvbih0eXBlLCBsaXN0ZW5lcikge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3RlbmVyKSkge1xyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gbGlzdGVuZXIubWFwKChsaXN0ZW5lcikgPT4gdGhpcy5fYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGRlc3Ryb3koKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcy5mb3JFYWNoKChoYW5kbGUpID0+IGhhbmRsZS5kZXN0cm95KCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpO1xyXG4gICAgfVxyXG4gICAgX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XHJcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNNYXAuZ2V0KHR5cGUpIHx8IFtdO1xyXG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyc01hcC5zZXQodHlwZSwgbGlzdGVuZXJzKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IEV2ZW50ZWQ7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUV2ZW50ZWQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRXZlbnRlZC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRXZlbnRlZC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnQGRvam8vc2hpbS9vYmplY3QnO1xuZXhwb3J0IHsgYXNzaWduIH0gZnJvbSAnQGRvam8vc2hpbS9vYmplY3QnO1xuY29uc3Qgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4vKipcbiAqIFR5cGUgZ3VhcmQgdGhhdCBlbnN1cmVzIHRoYXQgdGhlIHZhbHVlIGNhbiBiZSBjb2VyY2VkIHRvIE9iamVjdFxuICogdG8gd2VlZCBvdXQgaG9zdCBvYmplY3RzIHRoYXQgZG8gbm90IGRlcml2ZSBmcm9tIE9iamVjdC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBpZiB3ZSB3YW50IHRvIGRlZXAgY29weSBhbiBvYmplY3Qgb3Igbm90LlxuICogTm90ZTogSW4gRVM2IGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSBhbiBvYmplY3QncyBTeW1ib2wudG9TdHJpbmdUYWcgcHJvcGVydHksIHdoaWNoIHdpbGxcbiAqIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYHRvU3RyaW5nYC4gVGhpcyBpcyBhIHJhcmUgZWRnZSBjYXNlIHRoYXQgaXMgZGlmZmljdWx0IHRvIGhhbmRsZSxcbiAqIHNvIGl0IGlzIG5vdCBoYW5kbGVkIGhlcmUuXG4gKiBAcGFyYW0gIHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybiAgICAgICBJZiB0aGUgdmFsdWUgaXMgY29lcmNpYmxlIGludG8gYW4gT2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHNob3VsZERlZXBDb3B5T2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuZnVuY3Rpb24gY29weUFycmF5KGFycmF5LCBpbmhlcml0ZWQpIHtcbiAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gY29weUFycmF5KGl0ZW0sIGluaGVyaXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFzaG91bGREZWVwQ29weU9iamVjdChpdGVtKVxuICAgICAgICAgICAgPyBpdGVtXG4gICAgICAgICAgICA6IF9taXhpbih7XG4gICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbmhlcml0ZWQ6IGluaGVyaXRlZCxcbiAgICAgICAgICAgICAgICBzb3VyY2VzOiBbaXRlbV0sXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7fVxuICAgICAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBfbWl4aW4oa3dBcmdzKSB7XG4gICAgY29uc3QgZGVlcCA9IGt3QXJncy5kZWVwO1xuICAgIGNvbnN0IGluaGVyaXRlZCA9IGt3QXJncy5pbmhlcml0ZWQ7XG4gICAgY29uc3QgdGFyZ2V0ID0ga3dBcmdzLnRhcmdldDtcbiAgICBjb25zdCBjb3BpZWQgPSBrd0FyZ3MuY29waWVkIHx8IFtdO1xuICAgIGNvbnN0IGNvcGllZENsb25lID0gWy4uLmNvcGllZF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrd0FyZ3Muc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBrd0FyZ3Muc291cmNlc1tpXTtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChjb3BpZWRDbG9uZS5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjb3B5QXJyYXkodmFsdWUsIGluaGVyaXRlZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkRGVlcENvcHlPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtrZXldIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkLnB1c2goc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gX21peGluKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRlZDogaW5oZXJpdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXM6IFt2YWx1ZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCAuLi5taXhpbnMpIHtcbiAgICBpZiAoIW1peGlucy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xhbmcuY3JlYXRlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBtaXhpbiBvYmplY3QuJyk7XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBtaXhpbnMuc2xpY2UoKTtcbiAgICBhcmdzLnVuc2hpZnQoT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpKTtcbiAgICByZXR1cm4gYXNzaWduLmFwcGx5KG51bGwsIGFyZ3MpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBBc3NpZ24odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgcmV0dXJuIF9taXhpbih7XG4gICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgIGluaGVyaXRlZDogZmFsc2UsXG4gICAgICAgIHNvdXJjZXM6IHNvdXJjZXMsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVlcE1peGluKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgIHJldHVybiBfbWl4aW4oe1xuICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICBpbmhlcml0ZWQ6IHRydWUsXG4gICAgICAgIHNvdXJjZXM6IHNvdXJjZXMsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgb2JqZWN0IHVzaW5nIHRoZSBwcm92aWRlZCBzb3VyY2UncyBwcm90b3R5cGUgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhlIG5ldyBvYmplY3QsIGFuZCB0aGVuXG4gKiBkZWVwIGNvcGllcyB0aGUgcHJvdmlkZWQgc291cmNlJ3MgdmFsdWVzIGludG8gdGhlIG5ldyB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBUaGUgb2JqZWN0IHRvIGR1cGxpY2F0ZVxuICogQHJldHVybiBUaGUgbmV3IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZHVwbGljYXRlKHNvdXJjZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSkpO1xuICAgIHJldHVybiBkZWVwTWl4aW4odGFyZ2V0LCBzb3VyY2UpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgdGhlIHNhbWUgdmFsdWUuXG4gKlxuICogQHBhcmFtIGEgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIGIgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZTsgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0lkZW50aWNhbChhLCBiKSB7XG4gICAgcmV0dXJuIChhID09PSBiIHx8XG4gICAgICAgIC8qIGJvdGggdmFsdWVzIGFyZSBOYU4gKi9cbiAgICAgICAgKGEgIT09IGEgJiYgYiAhPT0gYikpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBiaW5kcyBhIG1ldGhvZCB0byB0aGUgc3BlY2lmaWVkIG9iamVjdCBhdCBydW50aW1lLiBUaGlzIGlzIHNpbWlsYXIgdG9cbiAqIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAsIGJ1dCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gaXQgdGFrZXMgdGhlIG5hbWUgb2YgYSBtZXRob2Qgb24gYW4gb2JqZWN0LlxuICogQXMgYSByZXN1bHQsIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBgbGF0ZUJpbmRgIHdpbGwgYWx3YXlzIGNhbGwgdGhlIGZ1bmN0aW9uIGN1cnJlbnRseSBhc3NpZ25lZCB0b1xuICogdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0IGFzIG9mIHRoZSBtb21lbnQgdGhlIGZ1bmN0aW9uIGl0IHJldHVybnMgaXMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgY29udGV4dCBvYmplY3RcbiAqIEBwYXJhbSBtZXRob2QgVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCBvbiB0aGUgY29udGV4dCBvYmplY3QgdG8gYmluZCB0byBpdHNlbGZcbiAqIEBwYXJhbSBzdXBwbGllZEFyZ3MgQW4gb3B0aW9uYWwgYXJyYXkgb2YgdmFsdWVzIHRvIHByZXBlbmQgdG8gdGhlIGBpbnN0YW5jZVttZXRob2RdYCBhcmd1bWVudHMgbGlzdFxuICogQHJldHVybiBUaGUgYm91bmQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhdGVCaW5kKGluc3RhbmNlLCBtZXRob2QsIC4uLnN1cHBsaWVkQXJncykge1xuICAgIHJldHVybiBzdXBwbGllZEFyZ3MubGVuZ3RoXG4gICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPyBzdXBwbGllZEFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkgOiBzdXBwbGllZEFyZ3M7XG4gICAgICAgICAgICAvLyBUUzcwMTdcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZVttZXRob2RdLmFwcGx5KGluc3RhbmNlLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFRTNzAxN1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlW21ldGhvZF0uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgcmV0dXJuIF9taXhpbih7XG4gICAgICAgIGRlZXA6IGZhbHNlLFxuICAgICAgICBpbmhlcml0ZWQ6IHRydWUsXG4gICAgICAgIHNvdXJjZXM6IHNvdXJjZXMsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBpbnZva2VzIHRoZSBnaXZlbiBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMgcHJlcGVuZGVkIHRvIGl0cyBhcmd1bWVudCBsaXN0LlxuICogTGlrZSBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgLCBidXQgZG9lcyBub3QgYWx0ZXIgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRhcmdldEZ1bmN0aW9uIFRoZSBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGJvdW5kXG4gKiBAcGFyYW0gc3VwcGxpZWRBcmdzIEFuIG9wdGlvbmFsIGFycmF5IG9mIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRoZSBgdGFyZ2V0RnVuY3Rpb25gIGFyZ3VtZW50cyBsaXN0XG4gKiBAcmV0dXJuIFRoZSBib3VuZCBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbCh0YXJnZXRGdW5jdGlvbiwgLi4uc3VwcGxpZWRBcmdzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPyBzdXBwbGllZEFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkgOiBzdXBwbGllZEFyZ3M7XG4gICAgICAgIHJldHVybiB0YXJnZXRGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xufVxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgZGVzdHJveSBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIGNhbGxzIHRoZSBwYXNzZWQtaW4gZGVzdHJ1Y3Rvci5cbiAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIHVuaWZpZWQgaW50ZXJmYWNlIGZvciBjcmVhdGluZyBcInJlbW92ZVwiIC8gXCJkZXN0cm95XCIgaGFuZGxlcnMgZm9yXG4gKiBldmVudCBsaXN0ZW5lcnMsIHRpbWVycywgZXRjLlxuICpcbiAqIEBwYXJhbSBkZXN0cnVjdG9yIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBoYW5kbGUncyBgZGVzdHJveWAgbWV0aG9kIGlzIGludm9rZWRcbiAqIEByZXR1cm4gVGhlIGhhbmRsZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhhbmRsZShkZXN0cnVjdG9yKSB7XG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkZXN0cnVjdG9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgc2luZ2xlIGhhbmRsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlc3Ryb3kgbXVsdGlwbGUgaGFuZGxlcyBzaW11bHRhbmVvdXNseS5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlcyBBbiBhcnJheSBvZiBoYW5kbGVzIHdpdGggYGRlc3Ryb3lgIG1ldGhvZHNcbiAqIEByZXR1cm4gVGhlIGhhbmRsZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBvc2l0ZUhhbmRsZSguLi5oYW5kbGVzKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhbmRsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaGFuZGxlc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxhbmcubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvbGFuZy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvbGFuZy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiZnVuY3Rpb24gaXNGZWF0dXJlVGVzdFRoZW5hYmxlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUudGhlbjtcclxufVxyXG4vKipcclxuICogQSBjYWNoZSBvZiByZXN1bHRzIG9mIGZlYXR1cmUgdGVzdHNcclxuICovXHJcbmV4cG9ydCBjb25zdCB0ZXN0Q2FjaGUgPSB7fTtcclxuLyoqXHJcbiAqIEEgY2FjaGUgb2YgdGhlIHVuLXJlc29sdmVkIGZlYXR1cmUgdGVzdHNcclxuICovXHJcbmV4cG9ydCBjb25zdCB0ZXN0RnVuY3Rpb25zID0ge307XHJcbi8qKlxyXG4gKiBBIGNhY2hlIG9mIHVucmVzb2x2ZWQgdGhlbmFibGVzIChwcm9iYWJseSBwcm9taXNlcylcclxuICogQHR5cGUge3t9fVxyXG4gKi9cclxuY29uc3QgdGVzdFRoZW5hYmxlcyA9IHt9O1xyXG4vKipcclxuICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBzY29wZSAoYHdpbmRvd2AgaW4gYSBicm93c2VyLCBgZ2xvYmFsYCBpbiBOb2RlSlMpXHJcbiAqL1xyXG5jb25zdCBnbG9iYWxTY29wZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gQnJvd3NlcnNcclxuICAgICAgICByZXR1cm4gd2luZG93O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyBOb2RlXHJcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIFdlYiB3b3JrZXJzXHJcbiAgICAgICAgcmV0dXJuIHNlbGY7XHJcbiAgICB9XHJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgcmV0dXJuIHt9O1xyXG59KSgpO1xyXG4vKiBHcmFiIHRoZSBzdGF0aWNGZWF0dXJlcyBpZiB0aGVyZSBhcmUgYXZhaWxhYmxlICovXHJcbmNvbnN0IHsgc3RhdGljRmVhdHVyZXMgfSA9IGdsb2JhbFNjb3BlLkRvam9IYXNFbnZpcm9ubWVudCB8fCB7fTtcclxuLyogQ2xlYW5pbmcgdXAgdGhlIERvam9IYXNFbnZpb3JubWVudCAqL1xyXG5pZiAoJ0Rvam9IYXNFbnZpcm9ubWVudCcgaW4gZ2xvYmFsU2NvcGUpIHtcclxuICAgIGRlbGV0ZSBnbG9iYWxTY29wZS5Eb2pvSGFzRW52aXJvbm1lbnQ7XHJcbn1cclxuLyoqXHJcbiAqIEN1c3RvbSB0eXBlIGd1YXJkIHRvIG5hcnJvdyB0aGUgYHN0YXRpY0ZlYXR1cmVzYCB0byBlaXRoZXIgYSBtYXAgb3IgYSBmdW5jdGlvbiB0aGF0XHJcbiAqIHJldHVybnMgYSBtYXAuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZ3VhcmQgZm9yXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcclxufVxyXG4vKipcclxuICogVGhlIGNhY2hlIG9mIGFzc2VydGVkIGZlYXR1cmVzIHRoYXQgd2VyZSBhdmFpbGFibGUgaW4gdGhlIGdsb2JhbCBzY29wZSB3aGVuIHRoZVxyXG4gKiBtb2R1bGUgbG9hZGVkXHJcbiAqL1xyXG5jb25zdCBzdGF0aWNDYWNoZSA9IHN0YXRpY0ZlYXR1cmVzXHJcbiAgICA/IGlzU3RhdGljRmVhdHVyZUZ1bmN0aW9uKHN0YXRpY0ZlYXR1cmVzKSA/IHN0YXRpY0ZlYXR1cmVzLmFwcGx5KGdsb2JhbFNjb3BlKSA6IHN0YXRpY0ZlYXR1cmVzXHJcbiAgICA6IHt9OyAvKiBQcm92aWRpbmcgYW4gZW1wdHkgY2FjaGUsIGlmIG5vbmUgd2FzIGluIHRoZSBlbnZpcm9ubWVudFxyXG5cclxuLyoqXHJcbiogQU1EIHBsdWdpbiBmdW5jdGlvbi5cclxuKlxyXG4qIENvbmRpdGlvbmFsIGxvYWRzIG1vZHVsZXMgYmFzZWQgb24gYSBoYXMgZmVhdHVyZSB0ZXN0IHZhbHVlLlxyXG4qXHJcbiogQHBhcmFtIHJlc291cmNlSWQgR2l2ZXMgdGhlIHJlc29sdmVkIG1vZHVsZSBpZCB0byBsb2FkLlxyXG4qIEBwYXJhbSByZXF1aXJlIFRoZSBsb2FkZXIgcmVxdWlyZSBmdW5jdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIG1vZHVsZSB0aGF0IGNvbnRhaW5lZCB0aGUgcGx1Z2luIHJlc291cmNlIGluIGl0c1xyXG4qICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgbGlzdC5cclxuKiBAcGFyYW0gbG9hZCBDYWxsYmFjayB0byBsb2FkZXIgdGhhdCBjb25zdW1lcyByZXN1bHQgb2YgcGx1Z2luIGRlbWFuZC5cclxuKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQocmVzb3VyY2VJZCwgcmVxdWlyZSwgbG9hZCwgY29uZmlnKSB7XHJcbiAgICByZXNvdXJjZUlkID8gcmVxdWlyZShbcmVzb3VyY2VJZF0sIGxvYWQpIDogbG9hZCgpO1xyXG59XHJcbi8qKlxyXG4gKiBBTUQgcGx1Z2luIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBSZXNvbHZlcyByZXNvdXJjZUlkIGludG8gYSBtb2R1bGUgaWQgYmFzZWQgb24gcG9zc2libHktbmVzdGVkIHRlbmFyeSBleHByZXNzaW9uIHRoYXQgYnJhbmNoZXMgb24gaGFzIGZlYXR1cmUgdGVzdFxyXG4gKiB2YWx1ZShzKS5cclxuICpcclxuICogQHBhcmFtIHJlc291cmNlSWQgVGhlIGlkIG9mIHRoZSBtb2R1bGVcclxuICogQHBhcmFtIG5vcm1hbGl6ZSBSZXNvbHZlcyBhIHJlbGF0aXZlIG1vZHVsZSBpZCBpbnRvIGFuIGFic29sdXRlIG1vZHVsZSBpZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShyZXNvdXJjZUlkLCBub3JtYWxpemUpIHtcclxuICAgIGNvbnN0IHRva2VucyA9IHJlc291cmNlSWQubWF0Y2goL1tcXD86XXxbXjpcXD9dKi9nKSB8fCBbXTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGZ1bmN0aW9uIGdldChza2lwKSB7XHJcbiAgICAgICAgY29uc3QgdGVybSA9IHRva2Vuc1tpKytdO1xyXG4gICAgICAgIGlmICh0ZXJtID09PSAnOicpIHtcclxuICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nIG1vZHVsZSBuYW1lLCByZXNvbHZlcyB0byBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gcG9zdGZpeGVkIHdpdGggYSA/IG1lYW5zIGl0IGlzIGEgZmVhdHVyZSB0byBicmFuY2ggb24sIHRoZSB0ZXJtIGlzIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXHJcbiAgICAgICAgICAgIGlmICh0b2tlbnNbaSsrXSA9PT0gJz8nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNraXAgJiYgaGFzKHRlcm0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hlZCB0aGUgZmVhdHVyZSwgZ2V0IHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSBvcHRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlkIG5vdCBtYXRjaCwgZ2V0IHRoZSBzZWNvbmQgdmFsdWUsIHBhc3Npbmcgb3ZlciB0aGUgZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICBnZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldChza2lwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBhIG1vZHVsZVxyXG4gICAgICAgICAgICByZXR1cm4gdGVybTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBpZCA9IGdldCgpO1xyXG4gICAgcmV0dXJuIGlkICYmIG5vcm1hbGl6ZShpZCk7XHJcbn1cclxuLyoqXHJcbiAqIENoZWNrIGlmIGEgZmVhdHVyZSBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWRcclxuICpcclxuICogQHBhcmFtIGZlYXR1cmUgdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBleGlzdHMoZmVhdHVyZSkge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZEZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gQm9vbGVhbihub3JtYWxpemVkRmVhdHVyZSBpbiBzdGF0aWNDYWNoZSB8fCBub3JtYWxpemVkRmVhdHVyZSBpbiB0ZXN0Q2FjaGUgfHwgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0pO1xyXG59XHJcbi8qKlxyXG4gKiBSZWdpc3RlciBhIG5ldyB0ZXN0IGZvciBhIG5hbWVkIGZlYXR1cmUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGhhcy5hZGQoJ2RvbS1hZGRldmVudGxpc3RlbmVyJywgISFkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKTtcclxuICpcclxuICogQGV4YW1wbGVcclxuICogaGFzLmFkZCgndG91Y2gtZXZlbnRzJywgZnVuY3Rpb24gKCkge1xyXG4gKiAgICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnRcclxuICogfSk7XHJcbiAqXHJcbiAqIEBwYXJhbSBmZWF0dXJlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXHJcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgcmVwb3J0ZWQgb2YgdGhlIGZlYXR1cmUsIG9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIG9uY2Ugb24gZmlyc3QgdGVzdFxyXG4gKiBAcGFyYW0gb3ZlcndyaXRlIGlmIGFuIGV4aXN0aW5nIHZhbHVlIHNob3VsZCBiZSBvdmVyd3JpdHRlbi4gRGVmYXVsdHMgdG8gZmFsc2UuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYWRkKGZlYXR1cmUsIHZhbHVlLCBvdmVyd3JpdGUgPSBmYWxzZSkge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZEZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpZiAoZXhpc3RzKG5vcm1hbGl6ZWRGZWF0dXJlKSAmJiAhb3ZlcndyaXRlICYmICEobm9ybWFsaXplZEZlYXR1cmUgaW4gc3RhdGljQ2FjaGUpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmVhdHVyZSBcIiR7ZmVhdHVyZX1cIiBleGlzdHMgYW5kIG92ZXJ3cml0ZSBub3QgdHJ1ZS5gKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNGZWF0dXJlVGVzdFRoZW5hYmxlKHZhbHVlKSkge1xyXG4gICAgICAgIHRlc3RUaGVuYWJsZXNbZmVhdHVyZV0gPSB2YWx1ZS50aGVuKChyZXNvbHZlZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRlc3RDYWNoZVtmZWF0dXJlXSA9IHJlc29sdmVkVmFsdWU7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIHRlc3RUaGVuYWJsZXNbZmVhdHVyZV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdID0gdmFsdWU7XHJcbiAgICAgICAgZGVsZXRlIHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBuYW1lZCBmZWF0dXJlLlxyXG4gKlxyXG4gKiBAcGFyYW0gZmVhdHVyZSBUaGUgbmFtZSAoaWYgYSBzdHJpbmcpIG9yIGlkZW50aWZpZXIgKGlmIGFuIGludGVnZXIpIG9mIHRoZSBmZWF0dXJlIHRvIHRlc3QuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXMoZmVhdHVyZSkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gc3RhdGljQ2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0pIHtcclxuICAgICAgICByZXN1bHQgPSB0ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdID0gdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0uY2FsbChudWxsKTtcclxuICAgICAgICBkZWxldGUgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChub3JtYWxpemVkRmVhdHVyZSBpbiB0ZXN0Q2FjaGUpIHtcclxuICAgICAgICByZXN1bHQgPSB0ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmVhdHVyZSBpbiB0ZXN0VGhlbmFibGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQXR0ZW1wdCB0byBkZXRlY3QgdW5yZWdpc3RlcmVkIGhhcyBmZWF0dXJlIFwiJHtmZWF0dXJlfVwiYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbi8qXHJcbiAqIE91dCBvZiB0aGUgYm94IGZlYXR1cmUgdGVzdHNcclxuICovXHJcbi8qIEVudmlyb25tZW50cyAqL1xyXG4vKiBVc2VkIGFzIGEgdmFsdWUgdG8gcHJvdmlkZSBhIGRlYnVnIG9ubHkgY29kZSBwYXRoICovXHJcbmFkZCgnZGVidWcnLCB0cnVlKTtcclxuLyogRGV0ZWN0cyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgXCJicm93c2VyIGxpa2VcIiAqL1xyXG5hZGQoJ2hvc3QtYnJvd3NlcicsIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyk7XHJcbi8qIERldGVjdHMgaWYgdGhlIGVudmlyb25tZW50IGFwcGVhcnMgdG8gYmUgTm9kZUpTICovXHJcbmFkZCgnaG9zdC1ub2RlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSkge1xyXG4gICAgICAgIHJldHVybiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XHJcbiAgICB9XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2hhcy9oYXMubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9oYXMvaGFzLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBpc0FycmF5TGlrZSwgU2hpbUl0ZXJhdG9yIH0gZnJvbSAnLi9pdGVyYXRvcic7XHJcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgeyBpcyBhcyBvYmplY3RJcyB9IGZyb20gJy4vb2JqZWN0JztcclxuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcclxuaW1wb3J0ICcuL1N5bWJvbCc7XHJcbmV4cG9ydCBsZXQgTWFwID0gZ2xvYmFsLk1hcDtcclxuaWYgKCF0cnVlKSB7XHJcbiAgICBNYXAgPSAoX2EgPSBjbGFzcyBNYXAge1xyXG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnTWFwJztcclxuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVyYWJsZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEFuIGFsdGVybmF0aXZlIHRvIEFycmF5LnByb3RvdHlwZS5pbmRleE9mIHVzaW5nIE9iamVjdC5pc1xyXG4gICAgICAgICAgICAgKiB0byBjaGVjayBmb3IgZXF1YWxpdHkuIFNlZSBodHRwOi8vbXpsLmxhLzF6dUtPMlZcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIF9pbmRleE9mS2V5KGtleXMsIGtleSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0SXMoa2V5c1tpXSwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2V0IHNpemUoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fa2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xlYXIoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzLmxlbmd0aCA9IHRoaXMuX3ZhbHVlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlbGV0ZShrZXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZW50cmllcygpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX2tleXMubWFwKChrZXksIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2tleSwgdGhpcy5fdmFsdWVzW2ldXTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaGltSXRlcmF0b3IodmFsdWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3JFYWNoKGNhbGxiYWNrLCBjb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gdGhpcy5fa2V5cztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX3ZhbHVlcztcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCB2YWx1ZXNbaV0sIGtleXNbaV0sIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdldChrZXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IHRoaXMuX3ZhbHVlc1tpbmRleF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaGFzKGtleSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KSA+IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGtleXMoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih0aGlzLl9rZXlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXQoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCA8IDAgPyB0aGlzLl9rZXlzLmxlbmd0aCA6IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5c1tpbmRleF0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXNbaW5kZXhdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YWx1ZXMoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih0aGlzLl92YWx1ZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfYVtTeW1ib2wuc3BlY2llc10gPSBfYSxcclxuICAgICAgICBfYSk7XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgTWFwO1xyXG52YXIgX2E7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1hcC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9NYXAubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL01hcC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XHJcbmltcG9ydCB7IHF1ZXVlTWljcm9UYXNrIH0gZnJvbSAnLi9zdXBwb3J0L3F1ZXVlJztcclxuaW1wb3J0ICcuL1N5bWJvbCc7XHJcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XHJcbmV4cG9ydCBsZXQgU2hpbVByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcclxuZXhwb3J0IGNvbnN0IGlzVGhlbmFibGUgPSBmdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbic7XHJcbn07XHJcbmlmICghdHJ1ZSkge1xyXG4gICAgZ2xvYmFsLlByb21pc2UgPSBTaGltUHJvbWlzZSA9IChfYSA9IGNsYXNzIFByb21pc2Uge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBQcm9taXNlLlxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogQHBhcmFtIGV4ZWN1dG9yXHJcbiAgICAgICAgICAgICAqIFRoZSBleGVjdXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgUHJvbWlzZSBpcyBpbnN0YW50aWF0ZWQuIEl0IGlzIHJlc3BvbnNpYmxlIGZvclxyXG4gICAgICAgICAgICAgKiBzdGFydGluZyB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aGVuIGl0IGlzIGludm9rZWQuXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIFRoZSBleGVjdXRvciBtdXN0IGNhbGwgZWl0aGVyIHRoZSBwYXNzZWQgYHJlc29sdmVgIGZ1bmN0aW9uIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZFxyXG4gICAgICAgICAgICAgKiBzdWNjZXNzZnVsbHksIG9yIHRoZSBgcmVqZWN0YCBmdW5jdGlvbiB3aGVuIHRoZSBvcGVyYXRpb24gZmFpbHMuXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxIC8qIFBlbmRpbmcgKi87XHJcbiAgICAgICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnUHJvbWlzZSc7XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIElmIHRydWUsIHRoZSByZXNvbHV0aW9uIG9mIHRoaXMgcHJvbWlzZSBpcyBjaGFpbmVkIChcImxvY2tlZCBpblwiKSB0byBhbm90aGVyIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBpc0NoYWluZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogV2hldGhlciBvciBub3QgdGhpcyBwcm9taXNlIGlzIGluIGEgcmVzb2x2ZWQgc3RhdGUuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVzb2x2ZWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgIT09IDEgLyogUGVuZGluZyAqLyB8fCBpc0NoYWluZWQ7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBDYWxsYmFja3MgdGhhdCBzaG91bGQgYmUgaW52b2tlZCBvbmNlIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBjYWxsYmFja3MgPSBbXTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogSW5pdGlhbGx5IHB1c2hlcyBjYWxsYmFja3Mgb250byBhIHF1ZXVlIGZvciBleGVjdXRpb24gb25jZSB0aGlzIHByb21pc2Ugc2V0dGxlcy4gQWZ0ZXIgdGhlIHByb21pc2Ugc2V0dGxlcyxcclxuICAgICAgICAgICAgICAgICAqIGVucXVldWVzIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IGV2ZW50IGxvb3AgdHVybi5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgbGV0IHdoZW5GaW5pc2hlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFNldHRsZXMgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSBuZXdTdGF0ZSBUaGUgcmVzb2x2ZWQgc3RhdGUgZm9yIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7VHxhbnl9IHZhbHVlIFRoZSByZXNvbHZlZCB2YWx1ZSBmb3IgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXR0bGUgPSAobmV3U3RhdGUsIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBwcm9taXNlIGNhbiBvbmx5IGJlIHNldHRsZWQgb25jZS5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gMSAvKiBQZW5kaW5nICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZWRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZW5GaW5pc2hlZCA9IHF1ZXVlTWljcm9UYXNrO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZW5xdWV1ZSBhIGNhbGxiYWNrIHJ1bm5lciBpZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHNvIHRoYXQgaW5pdGlhbGx5IGZ1bGZpbGxlZCBQcm9taXNlcyBkb24ndCBoYXZlIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCBhbiBleHRyYSB0dXJuLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MgJiYgY2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVNaWNyb1Rhc2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IGNhbGxiYWNrcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBSZXNvbHZlcyB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIG5ld1N0YXRlIFRoZSByZXNvbHZlZCBzdGF0ZSBmb3IgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIHtUfGFueX0gdmFsdWUgVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmUgPSAobmV3U3RhdGUsIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVzb2x2ZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS50aGVuKHNldHRsZS5iaW5kKG51bGwsIDAgLyogRnVsZmlsbGVkICovKSwgc2V0dGxlLmJpbmQobnVsbCwgMiAvKiBSZWplY3RlZCAqLykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NoYWluZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGxlKG5ld1N0YXRlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGhlbiA9IChvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW5GaW5pc2hlZCBpbml0aWFsbHkgcXVldWVzIHVwIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIGFmdGVyIHRoZSBwcm9taXNlIGhhcyBzZXR0bGVkLiBPbmNlIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9taXNlIGhhcyBzZXR0bGVkLCB3aGVuRmluaXNoZWQgd2lsbCBzY2hlZHVsZSBjYWxsYmFja3MgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCB0dXJuIHRocm91Z2ggdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGxvb3AuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW5GaW5pc2hlZCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuc3RhdGUgPT09IDIgLyogUmVqZWN0ZWQgKi8gPyBvblJlamVjdGVkIDogb25GdWxmaWxsZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjYWxsYmFjayh0aGlzLnJlc29sdmVkVmFsdWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gMiAvKiBSZWplY3RlZCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh0aGlzLnJlc29sdmVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc29sdmVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dG9yKHJlc29sdmUuYmluZChudWxsLCAwIC8qIEZ1bGZpbGxlZCAqLyksIHJlc29sdmUuYmluZChudWxsLCAyIC8qIFJlamVjdGVkICovKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0bGUoMiAvKiBSZWplY3RlZCAqLywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN0YXRpYyBhbGwoaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXBsZXRlID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3B1bGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsKGluZGV4LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsrY29tcGxldGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmaW5pc2goKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3B1bGF0aW5nIHx8IGNvbXBsZXRlIDwgdG90YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NJdGVtKGluZGV4LCBpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsrdG90YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbiBpdGVtIFByb21pc2UgcmVqZWN0cywgdGhpcyBQcm9taXNlIGlzIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggdGhlIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRoZW4oZnVsZmlsbC5iaW5kKG51bGwsIGluZGV4KSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShpdGVtKS50aGVuKGZ1bGZpbGwuYmluZChudWxsLCBpbmRleCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJdGVtKGksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwb3B1bGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGF0aWMgcmFjZShpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIFByb21pc2UgaXRlbSByZWplY3RzLCB0aGlzIFByb21pc2UgaXMgaW1tZWRpYXRlbHkgcmVqZWN0ZWQgd2l0aCB0aGUgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvbWlzZSdzIHJlamVjdGlvbiBlcnJvci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4ocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGF0aWMgcmVqZWN0KHJlYXNvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QocmVhc29uKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN0YXRpYyByZXNvbHZlKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoKG9uUmVqZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX2FbU3ltYm9sLnNwZWNpZXNdID0gU2hpbVByb21pc2UsXHJcbiAgICAgICAgX2EpO1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFNoaW1Qcm9taXNlO1xyXG52YXIgX2E7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVByb21pc2UubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vUHJvbWlzZS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vUHJvbWlzZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcclxuaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XHJcbmltcG9ydCB7IGdldFZhbHVlRGVzY3JpcHRvciB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcclxuZXhwb3J0IGxldCBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xyXG5pZiAoIXRydWUpIHtcclxuICAgIC8qKlxyXG4gICAgICogVGhyb3dzIGlmIHRoZSB2YWx1ZSBpcyBub3QgYSBzeW1ib2wsIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIFNoaW1cclxuICAgICAqIEBwYXJhbSAge2FueX0gICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJuIHtzeW1ib2x9ICAgICAgIFJldHVybnMgdGhlIHN5bWJvbCBvciB0aHJvd3NcclxuICAgICAqL1xyXG4gICAgY29uc3QgdmFsaWRhdGVTeW1ib2wgPSBmdW5jdGlvbiB2YWxpZGF0ZVN5bWJvbCh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IodmFsdWUgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGVmaW5lUHJvcGVydGllcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xyXG4gICAgY29uc3QgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbiAgICBjb25zdCBjcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xyXG4gICAgY29uc3Qgb2JqUHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcclxuICAgIGNvbnN0IGdsb2JhbFN5bWJvbHMgPSB7fTtcclxuICAgIGNvbnN0IGdldFN5bWJvbE5hbWUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBjcmVhdGUobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkZXNjKSB7XHJcbiAgICAgICAgICAgIGxldCBwb3N0Zml4ID0gMDtcclxuICAgICAgICAgICAgbGV0IG5hbWU7XHJcbiAgICAgICAgICAgIHdoaWxlIChjcmVhdGVkW1N0cmluZyhkZXNjKSArIChwb3N0Zml4IHx8ICcnKV0pIHtcclxuICAgICAgICAgICAgICAgICsrcG9zdGZpeDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZXNjICs9IFN0cmluZyhwb3N0Zml4IHx8ICcnKTtcclxuICAgICAgICAgICAgY3JlYXRlZFtkZXNjXSA9IHRydWU7XHJcbiAgICAgICAgICAgIG5hbWUgPSAnQEAnICsgZGVzYztcclxuICAgICAgICAgICAgLy8gRklYTUU6IFRlbXBvcmFyeSBndWFyZCB1bnRpbCB0aGUgZHVwbGljYXRlIGV4ZWN1dGlvbiB3aGVuIHRlc3RpbmcgY2FuIGJlXHJcbiAgICAgICAgICAgIC8vIHBpbm5lZCBkb3duLlxyXG4gICAgICAgICAgICBpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqUHJvdG90eXBlLCBuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkob2JqUHJvdG90eXBlLCBuYW1lLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKHZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCk7XHJcbiAgICBjb25zdCBJbnRlcm5hbFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgSW50ZXJuYWxTeW1ib2wpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFN5bWJvbChkZXNjcmlwdGlvbik7XHJcbiAgICB9O1xyXG4gICAgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgU3ltYm9sKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1R5cGVFcnJvcjogU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN5bSA9IE9iamVjdC5jcmVhdGUoSW50ZXJuYWxTeW1ib2wucHJvdG90eXBlKTtcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyhkZXNjcmlwdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnRpZXMoc3ltLCB7XHJcbiAgICAgICAgICAgIF9fZGVzY3JpcHRpb25fXzogZ2V0VmFsdWVEZXNjcmlwdG9yKGRlc2NyaXB0aW9uKSxcclxuICAgICAgICAgICAgX19uYW1lX186IGdldFZhbHVlRGVzY3JpcHRvcihnZXRTeW1ib2xOYW1lKGRlc2NyaXB0aW9uKSlcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKiBEZWNvcmF0ZSB0aGUgU3ltYm9sIGZ1bmN0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlIHByb3BlcnRpZXMgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgJ2ZvcicsIGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgaWYgKGdsb2JhbFN5bWJvbHNba2V5XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsU3ltYm9sc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGdsb2JhbFN5bWJvbHNba2V5XSA9IFN5bWJvbChTdHJpbmcoa2V5KSkpO1xyXG4gICAgfSkpO1xyXG4gICAgZGVmaW5lUHJvcGVydGllcyhTeW1ib2wsIHtcclxuICAgICAgICBrZXlGb3I6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoc3ltKSB7XHJcbiAgICAgICAgICAgIGxldCBrZXk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRlU3ltYm9sKHN5bSk7XHJcbiAgICAgICAgICAgIGZvciAoa2V5IGluIGdsb2JhbFN5bWJvbHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxTeW1ib2xzW2tleV0gPT09IHN5bSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBoYXNJbnN0YW5jZTogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ2hhc0luc3RhbmNlJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgaXNDb25jYXRTcHJlYWRhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaXNDb25jYXRTcHJlYWRhYmxlJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgaXRlcmF0b3I6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdpdGVyYXRvcicpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIG1hdGNoOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignbWF0Y2gnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBvYnNlcnZhYmxlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignb2JzZXJ2YWJsZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHJlcGxhY2U6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdyZXBsYWNlJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgc2VhcmNoOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignc2VhcmNoJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgc3BlY2llczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwZWNpZXMnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBzcGxpdDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NwbGl0JyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgdG9QcmltaXRpdmU6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCd0b1ByaW1pdGl2ZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHRvU3RyaW5nVGFnOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigndG9TdHJpbmdUYWcnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICB1bnNjb3BhYmxlczogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3Vuc2NvcGFibGVzJyksIGZhbHNlLCBmYWxzZSlcclxuICAgIH0pO1xyXG4gICAgLyogRGVjb3JhdGUgdGhlIEludGVybmFsU3ltYm9sIG9iamVjdCAqL1xyXG4gICAgZGVmaW5lUHJvcGVydGllcyhJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcjogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbCksXHJcbiAgICAgICAgdG9TdHJpbmc6IGdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fbmFtZV9fO1xyXG4gICAgICAgIH0sIGZhbHNlLCBmYWxzZSlcclxuICAgIH0pO1xyXG4gICAgLyogRGVjb3JhdGUgdGhlIFN5bWJvbC5wcm90b3R5cGUgKi9cclxuICAgIGRlZmluZVByb3BlcnRpZXMoU3ltYm9sLnByb3RvdHlwZSwge1xyXG4gICAgICAgIHRvU3RyaW5nOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ1N5bWJvbCAoJyArIHZhbGlkYXRlU3ltYm9sKHRoaXMpLl9fZGVzY3JpcHRpb25fXyArICcpJztcclxuICAgICAgICB9KSxcclxuICAgICAgICB2YWx1ZU9mOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7XHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgZGVmaW5lUHJvcGVydHkoU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sLnRvUHJpbWl0aXZlLCBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZVN5bWJvbCh0aGlzKTtcclxuICAgIH0pKTtcclxuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZ2V0VmFsdWVEZXNjcmlwdG9yKCdTeW1ib2wnLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcclxuICAgIGRlZmluZVByb3BlcnR5KEludGVybmFsU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sLnRvUHJpbWl0aXZlLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLnByb3RvdHlwZVtTeW1ib2wudG9QcmltaXRpdmVdLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcclxuICAgIGRlZmluZVByb3BlcnR5KEludGVybmFsU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcclxufVxyXG4vKipcclxuICogQSBjdXN0b20gZ3VhcmQgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGlmIGFuIG9iamVjdCBpcyBhIHN5bWJvbCBvciBub3RcclxuICogQHBhcmFtICB7YW55fSAgICAgICB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2sgdG8gc2VlIGlmIGl0IGlzIGEgc3ltYm9sIG9yIG5vdFxyXG4gKiBAcmV0dXJuIHtpcyBzeW1ib2x9ICAgICAgIFJldHVybnMgdHJ1ZSBpZiBhIHN5bWJvbCBvciBub3QgKGFuZCBuYXJyb3dzIHRoZSB0eXBlIGd1YXJkKVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8IHZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSkgfHwgZmFsc2U7XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW55IG1pc3Npbmcgd2VsbCBrbm93biBzeW1ib2xzIGlmIHRoZSBuYXRpdmUgU3ltYm9sIGlzIG1pc3NpbmcgdGhlbVxyXG4gKi9cclxuW1xyXG4gICAgJ2hhc0luc3RhbmNlJyxcclxuICAgICdpc0NvbmNhdFNwcmVhZGFibGUnLFxyXG4gICAgJ2l0ZXJhdG9yJyxcclxuICAgICdzcGVjaWVzJyxcclxuICAgICdyZXBsYWNlJyxcclxuICAgICdzZWFyY2gnLFxyXG4gICAgJ3NwbGl0JyxcclxuICAgICdtYXRjaCcsXHJcbiAgICAndG9QcmltaXRpdmUnLFxyXG4gICAgJ3RvU3RyaW5nVGFnJyxcclxuICAgICd1bnNjb3BhYmxlcycsXHJcbiAgICAnb2JzZXJ2YWJsZSdcclxuXS5mb3JFYWNoKCh3ZWxsS25vd24pID0+IHtcclxuICAgIGlmICghU3ltYm9sW3dlbGxLbm93bl0pIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ltYm9sLCB3ZWxsS25vd24sIGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKHdlbGxLbm93biksIGZhbHNlLCBmYWxzZSkpO1xyXG4gICAgfVxyXG59KTtcclxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TeW1ib2wubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vU3ltYm9sLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9TeW1ib2wubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgeyBpc0FycmF5TGlrZSB9IGZyb20gJy4vaXRlcmF0b3InO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xyXG5pbXBvcnQgJy4vU3ltYm9sJztcclxuZXhwb3J0IGxldCBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XHJcbmlmICghdHJ1ZSkge1xyXG4gICAgY29uc3QgREVMRVRFRCA9IHt9O1xyXG4gICAgY29uc3QgZ2V0VUlEID0gZnVuY3Rpb24gZ2V0VUlEKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGdlbmVyYXRlTmFtZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IHN0YXJ0SWQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgJSAxMDAwMDAwMDApO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBnZW5lcmF0ZU5hbWUoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnX193bScgKyBnZXRVSUQoKSArIChzdGFydElkKysgKyAnX18nKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKTtcclxuICAgIFdlYWtNYXAgPSBjbGFzcyBXZWFrTWFwIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnV2Vha01hcCc7XHJcbiAgICAgICAgICAgIHRoaXMuX25hbWUgPSBnZW5lcmF0ZU5hbWUoKTtcclxuICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVyYWJsZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoaXRlbVswXSwgaXRlbVsxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2Zyb3plbkVudHJpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mcm96ZW5FbnRyaWVzW2ldLmtleSA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWxldGUoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcclxuICAgICAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IERFTEVURUQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcclxuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Zyb3plbkVudHJpZXMuc3BsaWNlKGZyb3plbkluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2V0KGtleSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURUQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcclxuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcm96ZW5FbnRyaWVzW2Zyb3plbkluZGV4XS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBoYXMoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcclxuICAgICAgICAgICAgaWYgKEJvb2xlYW4oZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURUQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcclxuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0KGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKCFrZXkgfHwgKHR5cGVvZiBrZXkgIT09ICdvYmplY3QnICYmIHR5cGVvZiBrZXkgIT09ICdmdW5jdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHZhbHVlIHVzZWQgYXMgd2VhayBtYXAga2V5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LmtleSAhPT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICBlbnRyeSA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogeyB2YWx1ZToga2V5IH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbihrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcy5wdXNoKGVudHJ5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMuX25hbWUsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZGVmYXVsdCBXZWFrTWFwO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XZWFrTWFwLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1dlYWtNYXAubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1dlYWtNYXAubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgeyBpc0FycmF5TGlrZSwgaXNJdGVyYWJsZSB9IGZyb20gJy4vaXRlcmF0b3InO1xyXG5pbXBvcnQgeyBNQVhfU0FGRV9JTlRFR0VSIH0gZnJvbSAnLi9udW1iZXInO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xyXG5pbXBvcnQgeyB3cmFwTmF0aXZlIH0gZnJvbSAnLi9zdXBwb3J0L3V0aWwnO1xyXG5leHBvcnQgbGV0IGZyb207XHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGFycmF5IGZyb20gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcmd1bWVudHMgQW55IG51bWJlciBvZiBhcmd1bWVudHMgZm9yIHRoZSBhcnJheVxyXG4gKiBAcmV0dXJuIEFuIGFycmF5IGZyb20gdGhlIGdpdmVuIGFyZ3VtZW50c1xyXG4gKi9cclxuZXhwb3J0IGxldCBvZjtcclxuLyogRVM2IEFycmF5IGluc3RhbmNlIG1ldGhvZHMgKi9cclxuLyoqXHJcbiAqIENvcGllcyBkYXRhIGludGVybmFsbHkgd2l0aGluIGFuIGFycmF5IG9yIGFycmF5LWxpa2Ugb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgYXJyYXktbGlrZSBvYmplY3RcclxuICogQHBhcmFtIG9mZnNldCBUaGUgaW5kZXggdG8gc3RhcnQgY29weWluZyB2YWx1ZXMgdG87IGlmIG5lZ2F0aXZlLCBpdCBjb3VudHMgYmFja3dhcmRzIGZyb20gbGVuZ3RoXHJcbiAqIEBwYXJhbSBzdGFydCBUaGUgZmlyc3QgKGluY2x1c2l2ZSkgaW5kZXggdG8gY29weTsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcclxuICogQHBhcmFtIGVuZCBUaGUgbGFzdCAoZXhjbHVzaXZlKSBpbmRleCB0byBjb3B5OyBpZiBuZWdhdGl2ZSwgaXQgY291bnRzIGJhY2t3YXJkcyBmcm9tIGxlbmd0aFxyXG4gKiBAcmV0dXJuIFRoZSB0YXJnZXRcclxuICovXHJcbmV4cG9ydCBsZXQgY29weVdpdGhpbjtcclxuLyoqXHJcbiAqIEZpbGxzIGVsZW1lbnRzIG9mIGFuIGFycmF5LWxpa2Ugb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHRvIGZpbGxcclxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGVhY2ggZWxlbWVudCBvZiB0aGUgdGFyZ2V0IHdpdGhcclxuICogQHBhcmFtIHN0YXJ0IFRoZSBmaXJzdCBpbmRleCB0byBmaWxsXHJcbiAqIEBwYXJhbSBlbmQgVGhlIChleGNsdXNpdmUpIGluZGV4IGF0IHdoaWNoIHRvIHN0b3AgZmlsbGluZ1xyXG4gKiBAcmV0dXJuIFRoZSBmaWxsZWQgdGFyZ2V0XHJcbiAqL1xyXG5leHBvcnQgbGV0IGZpbGw7XHJcbi8qKlxyXG4gKiBGaW5kcyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgaW5zdGFuY2UgbWF0Y2hpbmcgdGhlIGNhbGxiYWNrIG9yIHVuZGVmaW5lZCBpZiBvbmUgaXMgbm90IGZvdW5kLlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IEFuIGFycmF5LWxpa2Ugb2JqZWN0XHJcbiAqIEBwYXJhbSBjYWxsYmFjayBBIGZ1bmN0aW9uIHJldHVybmluZyBpZiB0aGUgY3VycmVudCB2YWx1ZSBtYXRjaGVzIGEgY3JpdGVyaWFcclxuICogQHBhcmFtIHRoaXNBcmcgVGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgZmluZCBmdW5jdGlvblxyXG4gKiBAcmV0dXJuIFRoZSBmaXJzdCBlbGVtZW50IG1hdGNoaW5nIHRoZSBjYWxsYmFjaywgb3IgdW5kZWZpbmVkIGlmIG9uZSBkb2VzIG5vdCBleGlzdFxyXG4gKi9cclxuZXhwb3J0IGxldCBmaW5kO1xyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgc2VhcmNoIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBpbmRleCB3aG9zZSB2YWx1ZSBzYXRpc2ZpZXMgdGhlIHBhc3NlZCBjYWxsYmFjayxcclxuICogb3IgLTEgaWYgbm8gdmFsdWVzIHNhdGlzZnkgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgQW4gYXJyYXktbGlrZSBvYmplY3RcclxuICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgaWYgdGhlIGN1cnJlbnQgdmFsdWUgc2F0aXNmaWVzIGl0cyBjcml0ZXJpYVxyXG4gKiBAcGFyYW0gdGhpc0FyZyBUaGUgZXhlY3V0aW9uIGNvbnRleHQgZm9yIHRoZSBmaW5kIGZ1bmN0aW9uXHJcbiAqIEByZXR1cm4gVGhlIGZpcnN0IGluZGV4IHdob3NlIHZhbHVlIHNhdGlzZmllcyB0aGUgcGFzc2VkIGNhbGxiYWNrLCBvciAtMSBpZiBubyB2YWx1ZXMgc2F0aXNmeSBpdFxyXG4gKi9cclxuZXhwb3J0IGxldCBmaW5kSW5kZXg7XHJcbi8qIEVTNyBBcnJheSBpbnN0YW5jZSBtZXRob2RzICovXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gYXJyYXkgaW5jbHVkZXMgYSBnaXZlbiB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJnZXQgYXJyYXktbGlrZSBvYmplY3RcclxuICogQHBhcmFtIHNlYXJjaEVsZW1lbnQgdGhlIGl0ZW0gdG8gc2VhcmNoIGZvclxyXG4gKiBAcGFyYW0gZnJvbUluZGV4IHRoZSBzdGFydGluZyBpbmRleCB0byBzZWFyY2ggZnJvbVxyXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgYXJyYXkgaW5jbHVkZXMgdGhlIGVsZW1lbnQsIG90aGVyd2lzZSBgZmFsc2VgXHJcbiAqL1xyXG5leHBvcnQgbGV0IGluY2x1ZGVzO1xyXG5pZiAodHJ1ZSAmJiB0cnVlKSB7XHJcbiAgICBmcm9tID0gZ2xvYmFsLkFycmF5LmZyb207XHJcbiAgICBvZiA9IGdsb2JhbC5BcnJheS5vZjtcclxuICAgIGNvcHlXaXRoaW4gPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuY29weVdpdGhpbik7XHJcbiAgICBmaWxsID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmZpbGwpO1xyXG4gICAgZmluZCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maW5kKTtcclxuICAgIGZpbmRJbmRleCA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgpO1xyXG59XHJcbmVsc2Uge1xyXG4gICAgLy8gSXQgaXMgb25seSBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkvaU9TIHRoYXQgaGF2ZSBhIGJhZCBmaWxsIGltcGxlbWVudGF0aW9uIGFuZCBzbyBhcmVuJ3QgaW4gdGhlIHdpbGRcclxuICAgIC8vIFRvIG1ha2UgdGhpbmdzIGVhc2llciwgaWYgdGhlcmUgaXMgYSBiYWQgZmlsbCBpbXBsZW1lbnRhdGlvbiwgdGhlIHdob2xlIHNldCBvZiBmdW5jdGlvbnMgd2lsbCBiZSBmaWxsZWRcclxuICAgIC8qKlxyXG4gICAgICogRW5zdXJlcyBhIG5vbi1uZWdhdGl2ZSwgbm9uLWluZmluaXRlLCBzYWZlIGludGVnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIHRvIHZhbGlkYXRlXHJcbiAgICAgKiBAcmV0dXJuIEEgcHJvcGVyIGxlbmd0aFxyXG4gICAgICovXHJcbiAgICBjb25zdCB0b0xlbmd0aCA9IGZ1bmN0aW9uIHRvTGVuZ3RoKGxlbmd0aCkge1xyXG4gICAgICAgIGlmIChpc05hTihsZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKTtcclxuICAgICAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xyXG4gICAgICAgICAgICBsZW5ndGggPSBNYXRoLmZsb29yKGxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSBhIG5vbi1uZWdhdGl2ZSwgcmVhbCwgc2FmZSBpbnRlZ2VyXHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KGxlbmd0aCwgMCksIE1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRnJvbSBFUzYgNy4xLjQgVG9JbnRlZ2VyKClcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgQSB2YWx1ZSB0byBjb252ZXJ0XHJcbiAgICAgKiBAcmV0dXJuIEFuIGludGVnZXJcclxuICAgICAqL1xyXG4gICAgY29uc3QgdG9JbnRlZ2VyID0gZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XHJcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMCB8fCAhaXNGaW5pdGUodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICh2YWx1ZSA+IDAgPyAxIDogLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyh2YWx1ZSkpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplcyBhbiBvZmZzZXQgYWdhaW5zdCBhIGdpdmVuIGxlbmd0aCwgd3JhcHBpbmcgaXQgaWYgbmVnYXRpdmUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBvcmlnaW5hbCBvZmZzZXRcclxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIHRvdGFsIGxlbmd0aCB0byBub3JtYWxpemUgYWdhaW5zdFxyXG4gICAgICogQHJldHVybiBJZiBuZWdhdGl2ZSwgcHJvdmlkZSBhIGRpc3RhbmNlIGZyb20gdGhlIGVuZCAobGVuZ3RoKTsgb3RoZXJ3aXNlIHByb3ZpZGUgYSBkaXN0YW5jZSBmcm9tIDBcclxuICAgICAqL1xyXG4gICAgY29uc3Qgbm9ybWFsaXplT2Zmc2V0ID0gZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0KHZhbHVlLCBsZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPCAwID8gTWF0aC5tYXgobGVuZ3RoICsgdmFsdWUsIDApIDogTWF0aC5taW4odmFsdWUsIGxlbmd0aCk7XHJcbiAgICB9O1xyXG4gICAgZnJvbSA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLCBtYXBGdW5jdGlvbiwgdGhpc0FyZykge1xyXG4gICAgICAgIGlmIChhcnJheUxpa2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmcm9tOiByZXF1aXJlcyBhbiBhcnJheS1saWtlIG9iamVjdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWFwRnVuY3Rpb24gJiYgdGhpc0FyZykge1xyXG4gICAgICAgICAgICBtYXBGdW5jdGlvbiA9IG1hcEZ1bmN0aW9uLmJpbmQodGhpc0FyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXHJcbiAgICAgICAgY29uc3QgQ29uc3RydWN0b3IgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKGFycmF5TGlrZS5sZW5ndGgpO1xyXG4gICAgICAgIC8vIFN1cHBvcnQgZXh0ZW5zaW9uXHJcbiAgICAgICAgY29uc3QgYXJyYXkgPSB0eXBlb2YgQ29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicgPyBPYmplY3QobmV3IENvbnN0cnVjdG9yKGxlbmd0aCkpIDogbmV3IEFycmF5KGxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFpc0FycmF5TGlrZShhcnJheUxpa2UpICYmICFpc0l0ZXJhYmxlKGFycmF5TGlrZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IGFuZCB0aGUgbm9ybWFsaXplZCBsZW5ndGggaXMgMCwganVzdCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuIHRoaXMgcHJldmVudHMgYSBwcm9ibGVtXHJcbiAgICAgICAgLy8gd2l0aCB0aGUgaXRlcmF0aW9uIG9uIElFIHdoZW4gdXNpbmcgYSBOYU4gYXJyYXkgbGVuZ3RoLlxyXG4gICAgICAgIGlmIChpc0FycmF5TGlrZShhcnJheUxpa2UpKSB7XHJcbiAgICAgICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5TGlrZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBtYXBGdW5jdGlvbiA/IG1hcEZ1bmN0aW9uKGFycmF5TGlrZVtpXSwgaSkgOiBhcnJheUxpa2VbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhcnJheUxpa2UpIHtcclxuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gbWFwRnVuY3Rpb24gPyBtYXBGdW5jdGlvbih2YWx1ZSwgaSkgOiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXJyYXlMaWtlLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGFycmF5Lmxlbmd0aCA9IGxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgfTtcclxuICAgIG9mID0gZnVuY3Rpb24gb2YoLi4uaXRlbXMpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaXRlbXMpO1xyXG4gICAgfTtcclxuICAgIGNvcHlXaXRoaW4gPSBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgb2Zmc2V0LCBzdGFydCwgZW5kKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvcHlXaXRoaW46IHRhcmdldCBtdXN0IGJlIGFuIGFycmF5LWxpa2Ugb2JqZWN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xyXG4gICAgICAgIG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldCh0b0ludGVnZXIob2Zmc2V0KSwgbGVuZ3RoKTtcclxuICAgICAgICBzdGFydCA9IG5vcm1hbGl6ZU9mZnNldCh0b0ludGVnZXIoc3RhcnQpLCBsZW5ndGgpO1xyXG4gICAgICAgIGVuZCA9IG5vcm1hbGl6ZU9mZnNldChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpLCBsZW5ndGgpO1xyXG4gICAgICAgIGxldCBjb3VudCA9IE1hdGgubWluKGVuZCAtIHN0YXJ0LCBsZW5ndGggLSBvZmZzZXQpO1xyXG4gICAgICAgIGxldCBkaXJlY3Rpb24gPSAxO1xyXG4gICAgICAgIGlmIChvZmZzZXQgPiBzdGFydCAmJiBvZmZzZXQgPCBzdGFydCArIGNvdW50KSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xO1xyXG4gICAgICAgICAgICBzdGFydCArPSBjb3VudCAtIDE7XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBjb3VudCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChjb3VudCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0IGluIHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W29mZnNldF0gPSB0YXJnZXRbc3RhcnRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRhcmdldFtvZmZzZXRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBkaXJlY3Rpb247XHJcbiAgICAgICAgICAgIHN0YXJ0ICs9IGRpcmVjdGlvbjtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH07XHJcbiAgICBmaWxsID0gZnVuY3Rpb24gZmlsbCh0YXJnZXQsIHZhbHVlLCBzdGFydCwgZW5kKSB7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XHJcbiAgICAgICAgbGV0IGkgPSBub3JtYWxpemVPZmZzZXQodG9JbnRlZ2VyKHN0YXJ0KSwgbGVuZ3RoKTtcclxuICAgICAgICBlbmQgPSBub3JtYWxpemVPZmZzZXQoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXIoZW5kKSwgbGVuZ3RoKTtcclxuICAgICAgICB3aGlsZSAoaSA8IGVuZCkge1xyXG4gICAgICAgICAgICB0YXJnZXRbaSsrXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfTtcclxuICAgIGZpbmQgPSBmdW5jdGlvbiBmaW5kKHRhcmdldCwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKTtcclxuICAgICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gdGFyZ2V0W2luZGV4XSA6IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBmaW5kSW5kZXggPSBmdW5jdGlvbiBmaW5kSW5kZXgodGFyZ2V0LCBjYWxsYmFjaywgdGhpc0FyZykge1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRvTGVuZ3RoKHRhcmdldC5sZW5ndGgpO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZmluZDogc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpc0FyZykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpc0FyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHRhcmdldFtpXSwgaSwgdGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfTtcclxufVxyXG5pZiAodHJ1ZSkge1xyXG4gICAgaW5jbHVkZXMgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpO1xyXG59XHJcbmVsc2Uge1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbnN1cmVzIGEgbm9uLW5lZ2F0aXZlLCBub24taW5maW5pdGUsIHNhZmUgaW50ZWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgdG8gdmFsaWRhdGVcclxuICAgICAqIEByZXR1cm4gQSBwcm9wZXIgbGVuZ3RoXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHRvTGVuZ3RoID0gZnVuY3Rpb24gdG9MZW5ndGgobGVuZ3RoKSB7XHJcbiAgICAgICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7XHJcbiAgICAgICAgaWYgKGlzTmFOKGxlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIGxlbmd0aCA9IE1hdGguZmxvb3IobGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIGEgbm9uLW5lZ2F0aXZlLCByZWFsLCBzYWZlIGludGVnZXJcclxuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGVuZ3RoLCAwKSwgTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgICB9O1xyXG4gICAgaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh0YXJnZXQsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCA9IDApIHtcclxuICAgICAgICBsZXQgbGVuID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGZyb21JbmRleDsgaSA8IGxlbjsgKytpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0W2ldO1xyXG4gICAgICAgICAgICBpZiAoc2VhcmNoRWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnQgfHxcclxuICAgICAgICAgICAgICAgIChzZWFyY2hFbGVtZW50ICE9PSBzZWFyY2hFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBjdXJyZW50RWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH07XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJyYXkubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vYXJyYXkubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2FycmF5Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJjb25zdCBnbG9iYWxPYmplY3QgPSAoZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBnbG9iYWwgc3BlYyBkZWZpbmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IGNhbGxlZCAnZ2xvYmFsJ1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbiAgICAgICAgLy8gYGdsb2JhbGAgaXMgYWxzbyBkZWZpbmVkIGluIE5vZGVKU1xuICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyB3aW5kb3cgaXMgZGVmaW5lZCBpbiBicm93c2Vyc1xuICAgICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gc2VsZiBpcyBkZWZpbmVkIGluIFdlYldvcmtlcnNcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxufSkoKTtcbmV4cG9ydCBkZWZhdWx0IGdsb2JhbE9iamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdsb2JhbC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9nbG9iYWwubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2dsb2JhbC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0ICcuL1N5bWJvbCc7XG5pbXBvcnQgeyBISUdIX1NVUlJPR0FURV9NQVgsIEhJR0hfU1VSUk9HQVRFX01JTiB9IGZyb20gJy4vc3RyaW5nJztcbmNvbnN0IHN0YXRpY0RvbmUgPSB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbi8qKlxuICogQSBjbGFzcyB0aGF0IF9zaGltc18gYW4gaXRlcmF0b3IgaW50ZXJmYWNlIG9uIGFycmF5IGxpa2Ugb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNoaW1JdGVyYXRvciB7XG4gICAgY29uc3RydWN0b3IobGlzdCkge1xuICAgICAgICB0aGlzLl9uZXh0SW5kZXggPSAtMTtcbiAgICAgICAgaWYgKGlzSXRlcmFibGUobGlzdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX25hdGl2ZUl0ZXJhdG9yID0gbGlzdFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ID0gbGlzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIG5leHQgaXRlcmF0aW9uIHJlc3VsdCBmb3IgdGhlIEl0ZXJhdG9yXG4gICAgICovXG4gICAgbmV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX25hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmF0aXZlSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fbGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRpY0RvbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCsrdGhpcy5fbmV4dEluZGV4IDwgdGhpcy5fbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2xpc3RbdGhpcy5fbmV4dEluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGljRG9uZTtcbiAgICB9XG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbi8qKlxuICogQSB0eXBlIGd1YXJkIGZvciBjaGVja2luZyBpZiBzb21ldGhpbmcgaGFzIGFuIEl0ZXJhYmxlIGludGVyZmFjZVxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHlwZSBndWFyZCBhZ2FpbnN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0l0ZXJhYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xufVxuLyoqXG4gKiBBIHR5cGUgZ3VhcmQgZm9yIGNoZWNraW5nIGlmIHNvbWV0aGluZyBpcyBBcnJheUxpa2VcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcic7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIGZvciBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gaXRlcmFibGUgVGhlIGl0ZXJhYmxlIG9iamVjdCB0byByZXR1cm4gdGhlIGl0ZXJhdG9yIGZvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGl0ZXJhYmxlKSB7XG4gICAgaWYgKGlzSXRlcmFibGUoaXRlcmFibGUpKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xuICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcihpdGVyYWJsZSk7XG4gICAgfVxufVxuLyoqXG4gKiBTaGltcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgZm9yIC4uLiBvZmAgYmxvY2tzXG4gKlxuICogQHBhcmFtIGl0ZXJhYmxlIFRoZSBvYmplY3QgdGhlIHByb3ZpZGVzIGFuIGludGVyYXRvciBpbnRlcmZhY2VcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggaXRlbSBvZiB0aGUgaXRlcmFibGVcbiAqIEBwYXJhbSB0aGlzQXJnIE9wdGlvbmFsIHNjb3BlIHRvIHBhc3MgdGhlIGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JPZihpdGVyYWJsZSwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBsZXQgYnJva2VuID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZG9CcmVhaygpIHtcbiAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICB9XG4gICAgLyogV2UgbmVlZCB0byBoYW5kbGUgaXRlcmF0aW9uIG9mIGRvdWJsZSBieXRlIHN0cmluZ3MgcHJvcGVybHkgKi9cbiAgICBpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpICYmIHR5cGVvZiBpdGVyYWJsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbCA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBjaGFyID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICBpZiAoaSArIDEgPCBsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSA+PSBISUdIX1NVUlJPR0FURV9NSU4gJiYgY29kZSA8PSBISUdIX1NVUlJPR0FURV9NQVgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhciArPSBpdGVyYWJsZVsrK2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgY2hhciwgaXRlcmFibGUsIGRvQnJlYWspO1xuICAgICAgICAgICAgaWYgKGJyb2tlbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBnZXQoaXRlcmFibGUpO1xuICAgICAgICBpZiAoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIGl0ZXJhYmxlLCBkb0JyZWFrKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlcmF0b3IubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vaXRlcmF0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2l0ZXJhdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcbi8qKlxuICogVGhlIHNtYWxsZXN0IGludGVydmFsIGJldHdlZW4gdHdvIHJlcHJlc2VudGFibGUgbnVtYmVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVQU0lMT04gPSAxO1xuLyoqXG4gKiBUaGUgbWF4aW11bSBzYWZlIGludGVnZXIgaW4gSmF2YVNjcmlwdFxuICovXG5leHBvcnQgY29uc3QgTUFYX1NBRkVfSU5URUdFUiA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4vKipcbiAqIFRoZSBtaW5pbXVtIHNhZmUgaW50ZWdlciBpbiBKYXZhU2NyaXB0XG4gKi9cbmV4cG9ydCBjb25zdCBNSU5fU0FGRV9JTlRFR0VSID0gLU1BWF9TQUZFX0lOVEVHRVI7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIE5hTiB3aXRob3V0IGNvZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBOYU4sIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBnbG9iYWwuaXNOYU4odmFsdWUpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhIGZpbml0ZSBudW1iZXIgd2l0aG91dCBjb2Vyc2lvbi5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgZmluaXRlLCBmYWxzZSBpZiBpdCBpcyBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgZ2xvYmFsLmlzRmluaXRlKHZhbHVlKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgYW4gaW50ZWdlciB0aGF0IGlzICdzYWZlLCcgbWVhbmluZzpcbiAqICAgMS4gaXQgY2FuIGJlIGV4cHJlc3NlZCBhcyBhbiBJRUVFLTc1NCBkb3VibGUgcHJlY2lzaW9uIG51bWJlclxuICogICAyLiBpdCBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgdG8gYSBtYXRoZW1hdGljYWwgaW50ZWdlciwgbWVhbmluZyBpdHNcbiAqICAgICAgSUVFRS03NTQgcmVwcmVzZW50YXRpb24gY2Fubm90IGJlIHRoZSByZXN1bHQgb2Ygcm91bmRpbmcgYW55IG90aGVyXG4gKiAgICAgIGludGVnZXIgdG8gZml0IHRoZSBJRUVFLTc1NCByZXByZXNlbnRhdGlvblxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLCBmYWxzZSBpZiBpdCBpcyBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIodmFsdWUpIHtcbiAgICByZXR1cm4gaXNJbnRlZ2VyKHZhbHVlKSAmJiBNYXRoLmFicyh2YWx1ZSkgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW51bWJlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9udW1iZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL251bWJlci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XHJcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XHJcbmltcG9ydCB7IGlzU3ltYm9sIH0gZnJvbSAnLi9TeW1ib2wnO1xyXG5leHBvcnQgbGV0IGFzc2lnbjtcclxuLyoqXHJcbiAqIEdldHMgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0LlxyXG4gKiBBbiBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBpcyBvbmUgdGhhdCBpcyBkZWZpbmVkIGRpcmVjdGx5IG9uIHRoZSBvYmplY3QgYW5kIGlzIG5vdFxyXG4gKiBpbmhlcml0ZWQgZnJvbSB0aGUgb2JqZWN0J3MgcHJvdG90eXBlLlxyXG4gKiBAcGFyYW0gbyBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSBwIE5hbWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gKi9cclxuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0LiBUaGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGFyZSB0aG9zZSB0aGF0IGFyZSBkZWZpbmVkIGRpcmVjdGx5XHJcbiAqIG9uIHRoYXQgb2JqZWN0LCBhbmQgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSB0aGUgb2JqZWN0J3MgcHJvdG90eXBlLiBUaGUgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgaW5jbHVkZSBib3RoIGZpZWxkcyAob2JqZWN0cykgYW5kIGZ1bmN0aW9ucy5cclxuICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIG93biBwcm9wZXJ0aWVzLlxyXG4gKi9cclxuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eU5hbWVzO1xyXG4vKipcclxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3ltYm9sIHByb3BlcnRpZXMgZm91bmQgZGlyZWN0bHkgb24gb2JqZWN0IG8uXHJcbiAqIEBwYXJhbSBvIE9iamVjdCB0byByZXRyaWV2ZSB0aGUgc3ltYm9scyBmcm9tLlxyXG4gKi9cclxuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWUgdmFsdWUsIGZhbHNlIG90aGVyd2lzZS5cclxuICogQHBhcmFtIHZhbHVlMSBUaGUgZmlyc3QgdmFsdWUuXHJcbiAqIEBwYXJhbSB2YWx1ZTIgVGhlIHNlY29uZCB2YWx1ZS5cclxuICovXHJcbmV4cG9ydCBsZXQgaXM7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIG9mIGFuIG9iamVjdC5cclxuICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuIFRoaXMgY2FuIGJlIGFuIG9iamVjdCB0aGF0IHlvdSBjcmVhdGVkIG9yIGFuIGV4aXN0aW5nIERvY3VtZW50IE9iamVjdCBNb2RlbCAoRE9NKSBvYmplY3QuXHJcbiAqL1xyXG5leHBvcnQgbGV0IGtleXM7XHJcbi8qIEVTNyBPYmplY3Qgc3RhdGljIG1ldGhvZHMgKi9cclxuZXhwb3J0IGxldCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xyXG5leHBvcnQgbGV0IGVudHJpZXM7XHJcbmV4cG9ydCBsZXQgdmFsdWVzO1xyXG5pZiAodHJ1ZSkge1xyXG4gICAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gZ2xvYmFsLk9iamVjdDtcclxuICAgIGFzc2lnbiA9IGdsb2JhbE9iamVjdC5hc3NpZ247XHJcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xyXG4gICAgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xyXG4gICAgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcclxuICAgIGlzID0gZ2xvYmFsT2JqZWN0LmlzO1xyXG4gICAga2V5cyA9IGdsb2JhbE9iamVjdC5rZXlzO1xyXG59XHJcbmVsc2Uge1xyXG4gICAga2V5cyA9IGZ1bmN0aW9uIHN5bWJvbEF3YXJlS2V5cyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG8pLmZpbHRlcigoa2V5KSA9PiAhQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKTtcclxuICAgIH07XHJcbiAgICBhc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFR5cGVFcnJvciBpZiB1bmRlZmluZWQgb3IgbnVsbFxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdG8gPSBPYmplY3QodGFyZ2V0KTtcclxuICAgICAgICBzb3VyY2VzLmZvckVhY2goKG5leHRTb3VyY2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5leHRTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciBpZiB1bmRlZmluZWQgb3IgbnVsbFxyXG4gICAgICAgICAgICAgICAga2V5cyhuZXh0U291cmNlKS5mb3JFYWNoKChuZXh0S2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdG87XHJcbiAgICB9O1xyXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApIHtcclxuICAgICAgICBpZiAoaXNTeW1ib2wocHJvcCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBwcm9wKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMobykge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5maWx0ZXIoKGtleSkgPT4gIUJvb2xlYW4oa2V5Lm1hdGNoKC9eQEAuKy8pKSk7XHJcbiAgICB9O1xyXG4gICAgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKG8pIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobylcclxuICAgICAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpXHJcbiAgICAgICAgICAgIC5tYXAoKGtleSkgPT4gU3ltYm9sLmZvcihrZXkuc3Vic3RyaW5nKDIpKSk7XHJcbiAgICB9O1xyXG4gICAgaXMgPSBmdW5jdGlvbiBpcyh2YWx1ZTEsIHZhbHVlMikge1xyXG4gICAgICAgIGlmICh2YWx1ZTEgPT09IHZhbHVlMikge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUxICE9PSAwIHx8IDEgLyB2YWx1ZTEgPT09IDEgLyB2YWx1ZTI7IC8vIC0wXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTEgIT09IHZhbHVlMSAmJiB2YWx1ZTIgIT09IHZhbHVlMjsgLy8gTmFOXHJcbiAgICB9O1xyXG59XHJcbmlmICh0cnVlKSB7XHJcbiAgICBjb25zdCBnbG9iYWxPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xyXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xyXG4gICAgZW50cmllcyA9IGdsb2JhbE9iamVjdC5lbnRyaWVzO1xyXG4gICAgdmFsdWVzID0gZ2xvYmFsT2JqZWN0LnZhbHVlcztcclxufVxyXG5lbHNlIHtcclxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG8pIHtcclxuICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5yZWR1Y2UoKHByZXZpb3VzLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgcHJldmlvdXNba2V5XSA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBrZXkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgfTtcclxuICAgIGVudHJpZXMgPSBmdW5jdGlvbiBlbnRyaWVzKG8pIHtcclxuICAgICAgICByZXR1cm4ga2V5cyhvKS5tYXAoKGtleSkgPT4gW2tleSwgb1trZXldXSk7XHJcbiAgICB9O1xyXG4gICAgdmFsdWVzID0gZnVuY3Rpb24gdmFsdWVzKG8pIHtcclxuICAgICAgICByZXR1cm4ga2V5cyhvKS5tYXAoKGtleSkgPT4gb1trZXldKTtcclxuICAgIH07XHJcbn1cclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL29iamVjdC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcclxuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcclxuaW1wb3J0IHsgd3JhcE5hdGl2ZSB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcclxuLyoqXHJcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEhJR0hfU1VSUk9HQVRFX01JTiA9IDB4ZDgwMDtcclxuLyoqXHJcbiAqIFRoZSBtYXhpbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEhJR0hfU1VSUk9HQVRFX01BWCA9IDB4ZGJmZjtcclxuLyoqXHJcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGxvdyBzdXJyb2dhdGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgTE9XX1NVUlJPR0FURV9NSU4gPSAweGRjMDA7XHJcbi8qKlxyXG4gKiBUaGUgbWF4aW11bSBsb2NhdGlvbiBvZiBsb3cgc3Vycm9nYXRlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IExPV19TVVJST0dBVEVfTUFYID0gMHhkZmZmO1xyXG4vKiBFUzYgc3RhdGljIG1ldGhvZHMgKi9cclxuLyoqXHJcbiAqIFJldHVybiB0aGUgU3RyaW5nIHZhbHVlIHdob3NlIGVsZW1lbnRzIGFyZSwgaW4gb3JkZXIsIHRoZSBlbGVtZW50cyBpbiB0aGUgTGlzdCBlbGVtZW50cy5cclxuICogSWYgbGVuZ3RoIGlzIDAsIHRoZSBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuXHJcbiAqIEBwYXJhbSBjb2RlUG9pbnRzIFRoZSBjb2RlIHBvaW50cyB0byBnZW5lcmF0ZSB0aGUgc3RyaW5nXHJcbiAqL1xyXG5leHBvcnQgbGV0IGZyb21Db2RlUG9pbnQ7XHJcbi8qKlxyXG4gKiBgcmF3YCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgdGFnIGZ1bmN0aW9uIG9mIGEgVGFnZ2VkIFRlbXBsYXRlIFN0cmluZy4gV2hlbiBjYWxsZWRcclxuICogYXMgc3VjaCB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhIHdlbGwgZm9ybWVkIHRlbXBsYXRlIGNhbGwgc2l0ZSBvYmplY3QgYW5kIHRoZSByZXN0XHJcbiAqIHBhcmFtZXRlciB3aWxsIGNvbnRhaW4gdGhlIHN1YnN0aXR1dGlvbiB2YWx1ZXMuXHJcbiAqIEBwYXJhbSB0ZW1wbGF0ZSBBIHdlbGwtZm9ybWVkIHRlbXBsYXRlIHN0cmluZyBjYWxsIHNpdGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSBzdWJzdGl0dXRpb25zIEEgc2V0IG9mIHN1YnN0aXR1dGlvbiB2YWx1ZXMuXHJcbiAqL1xyXG5leHBvcnQgbGV0IHJhdztcclxuLyogRVM2IGluc3RhbmNlIG1ldGhvZHMgKi9cclxuLyoqXHJcbiAqIFJldHVybnMgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIE51bWJlciBsZXNzIHRoYW4gMTExNDExMiAoMHgxMTAwMDApIHRoYXQgaXMgdGhlIGNvZGUgcG9pbnRcclxuICogdmFsdWUgb2YgdGhlIFVURi0xNiBlbmNvZGVkIGNvZGUgcG9pbnQgc3RhcnRpbmcgYXQgdGhlIHN0cmluZyBlbGVtZW50IGF0IHBvc2l0aW9uIHBvcyBpblxyXG4gKiB0aGUgU3RyaW5nIHJlc3VsdGluZyBmcm9tIGNvbnZlcnRpbmcgdGhpcyBvYmplY3QgdG8gYSBTdHJpbmcuXHJcbiAqIElmIHRoZXJlIGlzIG5vIGVsZW1lbnQgYXQgdGhhdCBwb3NpdGlvbiwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuXHJcbiAqIElmIGEgdmFsaWQgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyIGRvZXMgbm90IGJlZ2luIGF0IHBvcywgdGhlIHJlc3VsdCBpcyB0aGUgY29kZSB1bml0IGF0IHBvcy5cclxuICovXHJcbmV4cG9ydCBsZXQgY29kZVBvaW50QXQ7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlcXVlbmNlIG9mIGVsZW1lbnRzIG9mIHNlYXJjaFN0cmluZyBjb252ZXJ0ZWQgdG8gYSBTdHJpbmcgaXMgdGhlXHJcbiAqIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhpcyBvYmplY3QgKGNvbnZlcnRlZCB0byBhIFN0cmluZykgc3RhcnRpbmcgYXRcclxuICogZW5kUG9zaXRpb24g4oCTIGxlbmd0aCh0aGlzKS4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXHJcbiAqL1xyXG5leHBvcnQgbGV0IGVuZHNXaXRoO1xyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHNlYXJjaFN0cmluZyBhcHBlYXJzIGFzIGEgc3Vic3RyaW5nIG9mIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGlzXHJcbiAqIG9iamVjdCB0byBhIFN0cmluZywgYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIHRoYXQgYXJlXHJcbiAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBwb3NpdGlvbjsgb3RoZXJ3aXNlLCByZXR1cm5zIGZhbHNlLlxyXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXHJcbiAqIEBwYXJhbSBzZWFyY2hTdHJpbmcgc2VhcmNoIHN0cmluZ1xyXG4gKiBAcGFyYW0gcG9zaXRpb24gSWYgcG9zaXRpb24gaXMgdW5kZWZpbmVkLCAwIGlzIGFzc3VtZWQsIHNvIGFzIHRvIHNlYXJjaCBhbGwgb2YgdGhlIFN0cmluZy5cclxuICovXHJcbmV4cG9ydCBsZXQgaW5jbHVkZXM7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBTdHJpbmcgdmFsdWUgcmVzdWx0IG9mIG5vcm1hbGl6aW5nIHRoZSBzdHJpbmcgaW50byB0aGUgbm9ybWFsaXphdGlvbiBmb3JtXHJcbiAqIG5hbWVkIGJ5IGZvcm0gYXMgc3BlY2lmaWVkIGluIFVuaWNvZGUgU3RhbmRhcmQgQW5uZXggIzE1LCBVbmljb2RlIE5vcm1hbGl6YXRpb24gRm9ybXMuXHJcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcclxuICogQHBhcmFtIGZvcm0gQXBwbGljYWJsZSB2YWx1ZXM6IFwiTkZDXCIsIFwiTkZEXCIsIFwiTkZLQ1wiLCBvciBcIk5GS0RcIiwgSWYgbm90IHNwZWNpZmllZCBkZWZhdWx0XHJcbiAqIGlzIFwiTkZDXCJcclxuICovXHJcbmV4cG9ydCBsZXQgbm9ybWFsaXplO1xyXG4vKipcclxuICogUmV0dXJucyBhIFN0cmluZyB2YWx1ZSB0aGF0IGlzIG1hZGUgZnJvbSBjb3VudCBjb3BpZXMgYXBwZW5kZWQgdG9nZXRoZXIuIElmIGNvdW50IGlzIDAsXHJcbiAqIFQgaXMgdGhlIGVtcHR5IFN0cmluZyBpcyByZXR1cm5lZC5cclxuICogQHBhcmFtIGNvdW50IG51bWJlciBvZiBjb3BpZXMgdG8gYXBwZW5kXHJcbiAqL1xyXG5leHBvcnQgbGV0IHJlcGVhdDtcclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcclxuICogc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0aGlzIG9iamVjdCAoY29udmVydGVkIHRvIGEgU3RyaW5nKSBzdGFydGluZyBhdFxyXG4gKiBwb3NpdGlvbi4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXHJcbiAqL1xyXG5leHBvcnQgbGV0IHN0YXJ0c1dpdGg7XHJcbi8qIEVTNyBpbnN0YW5jZSBtZXRob2RzICovXHJcbi8qKlxyXG4gKiBQYWRzIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoIGEgZ2l2ZW4gc3RyaW5nIChwb3NzaWJseSByZXBlYXRlZCkgc28gdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyByZWFjaGVzIGEgZ2l2ZW4gbGVuZ3RoLlxyXG4gKiBUaGUgcGFkZGluZyBpcyBhcHBsaWVkIGZyb20gdGhlIGVuZCAocmlnaHQpIG9mIHRoZSBjdXJyZW50IHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xyXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcgb25jZSB0aGUgY3VycmVudCBzdHJpbmcgaGFzIGJlZW4gcGFkZGVkLlxyXG4gKiAgICAgICAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHN0cmluZydzIGxlbmd0aCwgdGhlIGN1cnJlbnQgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQgYXMgaXQgaXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWxsU3RyaW5nIFRoZSBzdHJpbmcgdG8gcGFkIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoLlxyXG4gKiAgICAgICAgSWYgdGhpcyBzdHJpbmcgaXMgdG9vIGxvbmcsIGl0IHdpbGwgYmUgdHJ1bmNhdGVkIGFuZCB0aGUgbGVmdC1tb3N0IHBhcnQgd2lsbCBiZSBhcHBsaWVkLlxyXG4gKiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIFwiIFwiIChVKzAwMjApLlxyXG4gKi9cclxuZXhwb3J0IGxldCBwYWRFbmQ7XHJcbi8qKlxyXG4gKiBQYWRzIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoIGEgZ2l2ZW4gc3RyaW5nIChwb3NzaWJseSByZXBlYXRlZCkgc28gdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyByZWFjaGVzIGEgZ2l2ZW4gbGVuZ3RoLlxyXG4gKiBUaGUgcGFkZGluZyBpcyBhcHBsaWVkIGZyb20gdGhlIHN0YXJ0IChsZWZ0KSBvZiB0aGUgY3VycmVudCBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcclxuICogQHBhcmFtIG1heExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9uY2UgdGhlIGN1cnJlbnQgc3RyaW5nIGhhcyBiZWVuIHBhZGRlZC5cclxuICogICAgICAgIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBzdHJpbmcncyBsZW5ndGgsIHRoZSBjdXJyZW50IHN0cmluZyB3aWxsIGJlIHJldHVybmVkIGFzIGl0IGlzLlxyXG4gKlxyXG4gKiBAcGFyYW0gZmlsbFN0cmluZyBUaGUgc3RyaW5nIHRvIHBhZCB0aGUgY3VycmVudCBzdHJpbmcgd2l0aC5cclxuICogICAgICAgIElmIHRoaXMgc3RyaW5nIGlzIHRvbyBsb25nLCBpdCB3aWxsIGJlIHRydW5jYXRlZCBhbmQgdGhlIGxlZnQtbW9zdCBwYXJ0IHdpbGwgYmUgYXBwbGllZC5cclxuICogICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyBcIiBcIiAoVSswMDIwKS5cclxuICovXHJcbmV4cG9ydCBsZXQgcGFkU3RhcnQ7XHJcbmlmICh0cnVlICYmIHRydWUpIHtcclxuICAgIGZyb21Db2RlUG9pbnQgPSBnbG9iYWwuU3RyaW5nLmZyb21Db2RlUG9pbnQ7XHJcbiAgICByYXcgPSBnbG9iYWwuU3RyaW5nLnJhdztcclxuICAgIGNvZGVQb2ludEF0ID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdCk7XHJcbiAgICBlbmRzV2l0aCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgpO1xyXG4gICAgaW5jbHVkZXMgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKTtcclxuICAgIG5vcm1hbGl6ZSA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUubm9ybWFsaXplKTtcclxuICAgIHJlcGVhdCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucmVwZWF0KTtcclxuICAgIHN0YXJ0c1dpdGggPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgpO1xyXG59XHJcbmVsc2Uge1xyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZXMgdGhhdCB0ZXh0IGlzIGRlZmluZWQsIGFuZCBub3JtYWxpemVzIHBvc2l0aW9uIChiYXNlZCBvbiB0aGUgZ2l2ZW4gZGVmYXVsdCBpZiB0aGUgaW5wdXQgaXMgTmFOKS5cclxuICAgICAqIFVzZWQgYnkgc3RhcnRzV2l0aCwgaW5jbHVkZXMsIGFuZCBlbmRzV2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIE5vcm1hbGl6ZWQgcG9zaXRpb24uXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MgPSBmdW5jdGlvbiAobmFtZSwgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbiwgaXNFbmQgPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLicgKyBuYW1lICsgJyByZXF1aXJlcyBhIHZhbGlkIHN0cmluZyB0byBzZWFyY2ggYWdhaW5zdC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAhPT0gcG9zaXRpb24gPyAoaXNFbmQgPyBsZW5ndGggOiAwKSA6IHBvc2l0aW9uO1xyXG4gICAgICAgIHJldHVybiBbdGV4dCwgU3RyaW5nKHNlYXJjaCksIE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLCAwKSwgbGVuZ3RoKV07XHJcbiAgICB9O1xyXG4gICAgZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cykge1xyXG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcuZnJvbUNvZGVQb2ludFxyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xyXG4gICAgICAgIGNvbnN0IE1BWF9TSVpFID0gMHg0MDAwO1xyXG4gICAgICAgIGxldCBjb2RlVW5pdHMgPSBbXTtcclxuICAgICAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGNvZGVQb2ludCA9IE51bWJlcihhcmd1bWVudHNbaW5kZXhdKTtcclxuICAgICAgICAgICAgLy8gQ29kZSBwb2ludHMgbXVzdCBiZSBmaW5pdGUgaW50ZWdlcnMgd2l0aGluIHRoZSB2YWxpZCByYW5nZVxyXG4gICAgICAgICAgICBsZXQgaXNWYWxpZCA9IGlzRmluaXRlKGNvZGVQb2ludCkgJiYgTWF0aC5mbG9vcihjb2RlUG9pbnQpID09PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50ID49IDAgJiYgY29kZVBvaW50IDw9IDB4MTBmZmZmO1xyXG4gICAgICAgICAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoJ3N0cmluZy5mcm9tQ29kZVBvaW50OiBJbnZhbGlkIGNvZGUgcG9pbnQgJyArIGNvZGVQb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweGZmZmYpIHtcclxuICAgICAgICAgICAgICAgIC8vIEJNUCBjb2RlIHBvaW50XHJcbiAgICAgICAgICAgICAgICBjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQXN0cmFsIGNvZGUgcG9pbnQ7IHNwbGl0IGluIHN1cnJvZ2F0ZSBoYWx2ZXNcclxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxyXG4gICAgICAgICAgICAgICAgY29kZVBvaW50IC09IDB4MTAwMDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgSElHSF9TVVJST0dBVEVfTUlOO1xyXG4gICAgICAgICAgICAgICAgbGV0IGxvd1N1cnJvZ2F0ZSA9IGNvZGVQb2ludCAlIDB4NDAwICsgTE9XX1NVUlJPR0FURV9NSU47XHJcbiAgICAgICAgICAgICAgICBjb2RlVW5pdHMucHVzaChoaWdoU3Vycm9nYXRlLCBsb3dTdXJyb2dhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbmRleCArIDEgPT09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY29kZVVuaXRzKTtcclxuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgcmF3ID0gZnVuY3Rpb24gcmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKSB7XHJcbiAgICAgICAgbGV0IHJhd1N0cmluZ3MgPSBjYWxsU2l0ZS5yYXc7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgICAgIGxldCBudW1TdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGNhbGxTaXRlID09IG51bGwgfHwgY2FsbFNpdGUucmF3ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJhdyByZXF1aXJlcyBhIHZhbGlkIGNhbGxTaXRlIG9iamVjdCB3aXRoIGEgcmF3IHZhbHVlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSByYXdTdHJpbmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSByYXdTdHJpbmdzW2ldICsgKGkgPCBudW1TdWJzdGl0dXRpb25zICYmIGkgPCBsZW5ndGggLSAxID8gc3Vic3RpdHV0aW9uc1tpXSA6ICcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICBjb2RlUG9pbnRBdCA9IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHRleHQsIHBvc2l0aW9uID0gMCkge1xyXG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0XHJcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcuY29kZVBvaW50QXQgcmVxdXJpZXMgYSB2YWxpZCBzdHJpbmcuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRleHQubGVuZ3RoO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiAhPT0gcG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IGxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBHZXQgdGhlIGZpcnN0IGNvZGUgdW5pdFxyXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcclxuICAgICAgICBpZiAoZmlyc3QgPj0gSElHSF9TVVJST0dBVEVfTUlOICYmIGZpcnN0IDw9IEhJR0hfU1VSUk9HQVRFX01BWCAmJiBsZW5ndGggPiBwb3NpdGlvbiArIDEpIHtcclxuICAgICAgICAgICAgLy8gU3RhcnQgb2YgYSBzdXJyb2dhdGUgcGFpciAoaGlnaCBzdXJyb2dhdGUgYW5kIHRoZXJlIGlzIGEgbmV4dCBjb2RlIHVuaXQpOyBjaGVjayBmb3IgbG93IHN1cnJvZ2F0ZVxyXG4gICAgICAgICAgICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gTE9XX1NVUlJPR0FURV9NSU4gJiYgc2Vjb25kIDw9IExPV19TVVJST0dBVEVfTUFYKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGZpcnN0IC0gSElHSF9TVVJST0dBVEVfTUlOKSAqIDB4NDAwICsgc2Vjb25kIC0gTE9XX1NVUlJPR0FURV9NSU4gKyAweDEwMDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaXJzdDtcclxuICAgIH07XHJcbiAgICBlbmRzV2l0aCA9IGZ1bmN0aW9uIGVuZHNXaXRoKHRleHQsIHNlYXJjaCwgZW5kUG9zaXRpb24pIHtcclxuICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHRleHQubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBbdGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdlbmRzV2l0aCcsIHRleHQsIHNlYXJjaCwgZW5kUG9zaXRpb24sIHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZW5kUG9zaXRpb24gLSBzZWFyY2gubGVuZ3RoO1xyXG4gICAgICAgIGlmIChzdGFydCA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGV4dC5zbGljZShzdGFydCwgZW5kUG9zaXRpb24pID09PSBzZWFyY2g7XHJcbiAgICB9O1xyXG4gICAgaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uID0gMCkge1xyXG4gICAgICAgIFt0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ2luY2x1ZGVzJywgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIHRleHQuaW5kZXhPZihzZWFyY2gsIHBvc2l0aW9uKSAhPT0gLTE7XHJcbiAgICB9O1xyXG4gICAgcmVwZWF0ID0gZnVuY3Rpb24gcmVwZWF0KHRleHQsIGNvdW50ID0gMCkge1xyXG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLnJlcGVhdFxyXG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIHZhbGlkIHN0cmluZy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvdW50ICE9PSBjb3VudCkge1xyXG4gICAgICAgICAgICBjb3VudCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSBjb3VudC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgICAgIHdoaWxlIChjb3VudCkge1xyXG4gICAgICAgICAgICBpZiAoY291bnQgJSAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gdGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY291bnQgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ICs9IHRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY291bnQgPj49IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIHN0YXJ0c1dpdGgodGV4dCwgc2VhcmNoLCBwb3NpdGlvbiA9IDApIHtcclxuICAgICAgICBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoKTtcclxuICAgICAgICBbdGV4dCwgc2VhcmNoLCBwb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdzdGFydHNXaXRoJywgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbik7XHJcbiAgICAgICAgY29uc3QgZW5kID0gcG9zaXRpb24gKyBzZWFyY2gubGVuZ3RoO1xyXG4gICAgICAgIGlmIChlbmQgPiB0ZXh0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKHBvc2l0aW9uLCBlbmQpID09PSBzZWFyY2g7XHJcbiAgICB9O1xyXG59XHJcbmlmICh0cnVlKSB7XHJcbiAgICBwYWRFbmQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnBhZEVuZCk7XHJcbiAgICBwYWRTdGFydCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQpO1xyXG59XHJcbmVsc2Uge1xyXG4gICAgcGFkRW5kID0gZnVuY3Rpb24gcGFkRW5kKHRleHQsIG1heExlbmd0aCwgZmlsbFN0cmluZyA9ICcgJykge1xyXG4gICAgICAgIGlmICh0ZXh0ID09PSBudWxsIHx8IHRleHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSBJbmZpbml0eSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnBhZEVuZCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IG51bGwgfHwgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbWF4TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgICAgICBtYXhMZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RyVGV4dCA9IFN0cmluZyh0ZXh0KTtcclxuICAgICAgICBjb25zdCBwYWRkaW5nID0gbWF4TGVuZ3RoIC0gc3RyVGV4dC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHBhZGRpbmcgPiAwKSB7XHJcbiAgICAgICAgICAgIHN0clRleHQgKz1cclxuICAgICAgICAgICAgICAgIHJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsU3RyaW5nLnNsaWNlKDAsIHBhZGRpbmcgJSBmaWxsU3RyaW5nLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHJUZXh0O1xyXG4gICAgfTtcclxuICAgIHBhZFN0YXJ0ID0gZnVuY3Rpb24gcGFkU3RhcnQodGV4dCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nID0gJyAnKSB7XHJcbiAgICAgICAgaWYgKHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdHJpbmcucGFkU3RhcnQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSBudWxsIHx8IG1heExlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IG1heExlbmd0aCA8IDApIHtcclxuICAgICAgICAgICAgbWF4TGVuZ3RoID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0clRleHQgPSBTdHJpbmcodGV4dCk7XHJcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IG1heExlbmd0aCAtIHN0clRleHQubGVuZ3RoO1xyXG4gICAgICAgIGlmIChwYWRkaW5nID4gMCkge1xyXG4gICAgICAgICAgICBzdHJUZXh0ID1cclxuICAgICAgICAgICAgICAgIHJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsU3RyaW5nLnNsaWNlKDAsIHBhZGRpbmcgJSBmaWxsU3RyaW5nLmxlbmd0aCkgK1xyXG4gICAgICAgICAgICAgICAgICAgIHN0clRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHJUZXh0O1xyXG4gICAgfTtcclxufVxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJpbmcubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3RyaW5nLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdHJpbmcubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBoYXMsIHsgYWRkIH0gZnJvbSAnQGRvam8vaGFzL2hhcyc7XHJcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi4vZ2xvYmFsJztcclxuZXhwb3J0IGRlZmF1bHQgaGFzO1xyXG5leHBvcnQgKiBmcm9tICdAZG9qby9oYXMvaGFzJztcclxuLyogRUNNQVNjcmlwdCA2IGFuZCA3IEZlYXR1cmVzICovXHJcbi8qIEFycmF5ICovXHJcbmFkZCgnZXM2LWFycmF5JywgKCkgPT4ge1xyXG4gICAgcmV0dXJuIChbJ2Zyb20nLCAnb2YnXS5ldmVyeSgoa2V5KSA9PiBrZXkgaW4gZ2xvYmFsLkFycmF5KSAmJlxyXG4gICAgICAgIFsnZmluZEluZGV4JywgJ2ZpbmQnLCAnY29weVdpdGhpbiddLmV2ZXJ5KChrZXkpID0+IGtleSBpbiBnbG9iYWwuQXJyYXkucHJvdG90eXBlKSk7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ2VzNi1hcnJheS1maWxsJywgKCkgPT4ge1xyXG4gICAgaWYgKCdmaWxsJyBpbiBnbG9iYWwuQXJyYXkucHJvdG90eXBlKSB7XHJcbiAgICAgICAgLyogU29tZSB2ZXJzaW9ucyBvZiBTYWZhcmkgZG8gbm90IHByb3Blcmx5IGltcGxlbWVudCB0aGlzICovXHJcbiAgICAgICAgcmV0dXJuIFsxXS5maWxsKDksIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSlbMF0gPT09IDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ2VzNy1hcnJheScsICgpID0+ICdpbmNsdWRlcycgaW4gZ2xvYmFsLkFycmF5LnByb3RvdHlwZSwgdHJ1ZSk7XHJcbi8qIE1hcCAqL1xyXG5hZGQoJ2VzNi1tYXAnLCAoKSA9PiB7XHJcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5NYXAgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAvKlxyXG4gICAgSUUxMSBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIGFyZSBtaXNzaW5nIGNyaXRpY2FsIEVTNiBNYXAgZnVuY3Rpb25hbGl0eVxyXG4gICAgV2Ugd3JhcCB0aGlzIGluIGEgdHJ5L2NhdGNoIGJlY2F1c2Ugc29tZXRpbWVzIHRoZSBNYXAgY29uc3RydWN0b3IgZXhpc3RzLCBidXQgZG9lcyBub3RcclxuICAgIHRha2UgYXJndW1lbnRzIChpT1MgOC40KVxyXG4gICAgICovXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgbWFwID0gbmV3IGdsb2JhbC5NYXAoW1swLCAxXV0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbWFwLmhhcygwKSAmJlxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hcC5rZXlzID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICAgICAgICAgICB0cnVlICYmXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWFwLnZhbHVlcyA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hcC5lbnRyaWVzID09PSAnZnVuY3Rpb24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogbm90IHRlc3Rpbmcgb24gaU9TIGF0IHRoZSBtb21lbnQgKi9cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbi8qIE1hdGggKi9cclxuYWRkKCdlczYtbWF0aCcsICgpID0+IHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgJ2NsejMyJyxcclxuICAgICAgICAnc2lnbicsXHJcbiAgICAgICAgJ2xvZzEwJyxcclxuICAgICAgICAnbG9nMicsXHJcbiAgICAgICAgJ2xvZzFwJyxcclxuICAgICAgICAnZXhwbTEnLFxyXG4gICAgICAgICdjb3NoJyxcclxuICAgICAgICAnc2luaCcsXHJcbiAgICAgICAgJ3RhbmgnLFxyXG4gICAgICAgICdhY29zaCcsXHJcbiAgICAgICAgJ2FzaW5oJyxcclxuICAgICAgICAnYXRhbmgnLFxyXG4gICAgICAgICd0cnVuYycsXHJcbiAgICAgICAgJ2Zyb3VuZCcsXHJcbiAgICAgICAgJ2NicnQnLFxyXG4gICAgICAgICdoeXBvdCdcclxuICAgIF0uZXZlcnkoKG5hbWUpID0+IHR5cGVvZiBnbG9iYWwuTWF0aFtuYW1lXSA9PT0gJ2Z1bmN0aW9uJyk7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ2VzNi1tYXRoLWltdWwnLCAoKSA9PiB7XHJcbiAgICBpZiAoJ2ltdWwnIGluIGdsb2JhbC5NYXRoKSB7XHJcbiAgICAgICAgLyogU29tZSB2ZXJzaW9ucyBvZiBTYWZhcmkgb24gaW9zIGRvIG5vdCBwcm9wZXJseSBpbXBsZW1lbnQgdGhpcyAqL1xyXG4gICAgICAgIHJldHVybiBNYXRoLmltdWwoMHhmZmZmZmZmZiwgNSkgPT09IC01O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuLyogT2JqZWN0ICovXHJcbmFkZCgnZXM2LW9iamVjdCcsICgpID0+IHtcclxuICAgIHJldHVybiB0cnVlICYmXHJcbiAgICAgICAgWydhc3NpZ24nLCAnaXMnLCAnZ2V0T3duUHJvcGVydHlTeW1ib2xzJywgJ3NldFByb3RvdHlwZU9mJ10uZXZlcnkoKG5hbWUpID0+IHR5cGVvZiBnbG9iYWwuT2JqZWN0W25hbWVdID09PSAnZnVuY3Rpb24nKTtcclxufSwgdHJ1ZSk7XHJcbmFkZCgnZXMyMDE3LW9iamVjdCcsICgpID0+IHtcclxuICAgIHJldHVybiBbJ3ZhbHVlcycsICdlbnRyaWVzJywgJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMnXS5ldmVyeSgobmFtZSkgPT4gdHlwZW9mIGdsb2JhbC5PYmplY3RbbmFtZV0gPT09ICdmdW5jdGlvbicpO1xyXG59LCB0cnVlKTtcclxuLyogT2JzZXJ2YWJsZSAqL1xyXG5hZGQoJ2VzLW9ic2VydmFibGUnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLk9ic2VydmFibGUgIT09ICd1bmRlZmluZWQnLCB0cnVlKTtcclxuLyogUHJvbWlzZSAqL1xyXG5hZGQoJ2VzNi1wcm9taXNlJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5Qcm9taXNlICE9PSAndW5kZWZpbmVkJyAmJiB0cnVlLCB0cnVlKTtcclxuLyogU2V0ICovXHJcbmFkZCgnZXM2LXNldCcsICgpID0+IHtcclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLlNldCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8qIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgU2V0IGZ1bmN0aW9uYWxpdHkgKi9cclxuICAgICAgICBjb25zdCBzZXQgPSBuZXcgZ2xvYmFsLlNldChbMV0pO1xyXG4gICAgICAgIHJldHVybiBzZXQuaGFzKDEpICYmICdrZXlzJyBpbiBzZXQgJiYgdHlwZW9mIHNldC5rZXlzID09PSAnZnVuY3Rpb24nICYmIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG4vKiBTdHJpbmcgKi9cclxuYWRkKCdlczYtc3RyaW5nJywgKCkgPT4ge1xyXG4gICAgcmV0dXJuIChbXHJcbiAgICAgICAgLyogc3RhdGljIG1ldGhvZHMgKi9cclxuICAgICAgICAnZnJvbUNvZGVQb2ludCdcclxuICAgIF0uZXZlcnkoKGtleSkgPT4gdHlwZW9mIGdsb2JhbC5TdHJpbmdba2V5XSA9PT0gJ2Z1bmN0aW9uJykgJiZcclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIC8qIGluc3RhbmNlIG1ldGhvZHMgKi9cclxuICAgICAgICAgICAgJ2NvZGVQb2ludEF0JyxcclxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXHJcbiAgICAgICAgICAgICdyZXBlYXQnLFxyXG4gICAgICAgICAgICAnc3RhcnRzV2l0aCcsXHJcbiAgICAgICAgICAgICdlbmRzV2l0aCcsXHJcbiAgICAgICAgICAgICdpbmNsdWRlcydcclxuICAgICAgICBdLmV2ZXJ5KChrZXkpID0+IHR5cGVvZiBnbG9iYWwuU3RyaW5nLnByb3RvdHlwZVtrZXldID09PSAnZnVuY3Rpb24nKSk7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ2VzNi1zdHJpbmctcmF3JywgKCkgPT4ge1xyXG4gICAgZnVuY3Rpb24gZ2V0Q2FsbFNpdGUoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uY2FsbFNpdGVdO1xyXG4gICAgICAgIHJlc3VsdC5yYXcgPSBjYWxsU2l0ZS5yYXc7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGlmICgncmF3JyBpbiBnbG9iYWwuU3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGIgPSAxO1xyXG4gICAgICAgIGxldCBjYWxsU2l0ZSA9IGdldENhbGxTaXRlIGBhXFxuJHtifWA7XHJcbiAgICAgICAgY2FsbFNpdGUucmF3ID0gWydhXFxcXG4nXTtcclxuICAgICAgICBjb25zdCBzdXBwb3J0c1RydW5jID0gZ2xvYmFsLlN0cmluZy5yYXcoY2FsbFNpdGUsIDQyKSA9PT0gJ2E6XFxcXG4nO1xyXG4gICAgICAgIHJldHVybiBzdXBwb3J0c1RydW5jO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuYWRkKCdlczIwMTctc3RyaW5nJywgKCkgPT4ge1xyXG4gICAgcmV0dXJuIFsncGFkU3RhcnQnLCAncGFkRW5kJ10uZXZlcnkoKGtleSkgPT4gdHlwZW9mIGdsb2JhbC5TdHJpbmcucHJvdG90eXBlW2tleV0gPT09ICdmdW5jdGlvbicpO1xyXG59LCB0cnVlKTtcclxuLyogU3ltYm9sICovXHJcbmFkZCgnZXM2LXN5bWJvbCcsICgpID0+IHR5cGVvZiBnbG9iYWwuU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgU3ltYm9sKCkgPT09ICdzeW1ib2wnLCB0cnVlKTtcclxuLyogV2Vha01hcCAqL1xyXG5hZGQoJ2VzNi13ZWFrbWFwJywgKCkgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuV2Vha01hcCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvKiBJRTExIGFuZCBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkgYXJlIG1pc3NpbmcgY3JpdGljYWwgRVM2IE1hcCBmdW5jdGlvbmFsaXR5ICovXHJcbiAgICAgICAgY29uc3Qga2V5MSA9IHt9O1xyXG4gICAgICAgIGNvbnN0IGtleTIgPSB7fTtcclxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgZ2xvYmFsLldlYWtNYXAoW1trZXkxLCAxXV0pO1xyXG4gICAgICAgIE9iamVjdC5mcmVlemUoa2V5MSk7XHJcbiAgICAgICAgcmV0dXJuIG1hcC5nZXQoa2V5MSkgPT09IDEgJiYgbWFwLnNldChrZXkyLCAyKSA9PT0gbWFwICYmIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG4vKiBNaXNjZWxsYW5lb3VzIGZlYXR1cmVzICovXHJcbmFkZCgnbWljcm90YXNrcycsICgpID0+IHRydWUgfHwgZmFsc2UgfHwgdHJ1ZSwgdHJ1ZSk7XHJcbmFkZCgncG9zdG1lc3NhZ2UnLCAoKSA9PiB7XHJcbiAgICAvLyBJZiB3aW5kb3cgaXMgdW5kZWZpbmVkLCBhbmQgd2UgaGF2ZSBwb3N0TWVzc2FnZSwgaXQgcHJvYmFibHkgbWVhbnMgd2UncmUgaW4gYSB3ZWIgd29ya2VyLiBXZWIgd29ya2VycyBoYXZlXHJcbiAgICAvLyBwb3N0IG1lc3NhZ2UgYnV0IGl0IGRvZXNuJ3Qgd29yayBob3cgd2UgZXhwZWN0IGl0IHRvLCBzbyBpdCdzIGJlc3QganVzdCB0byBwcmV0ZW5kIGl0IGRvZXNuJ3QgZXhpc3QuXHJcbiAgICByZXR1cm4gdHlwZW9mIGdsb2JhbC53aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBnbG9iYWwucG9zdE1lc3NhZ2UgPT09ICdmdW5jdGlvbic7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ3JhZicsICgpID0+IHR5cGVvZiBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nLCB0cnVlKTtcclxuYWRkKCdzZXRpbW1lZGlhdGUnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLnNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcsIHRydWUpO1xyXG4vKiBET00gRmVhdHVyZXMgKi9cclxuYWRkKCdkb20tbXV0YXRpb25vYnNlcnZlcicsICgpID0+IHtcclxuICAgIGlmICh0cnVlICYmIEJvb2xlYW4oZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpKSB7XHJcbiAgICAgICAgLy8gSUUxMSBoYXMgYW4gdW5yZWxpYWJsZSBNdXRhdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uIHdoZXJlIHNldFByb3BlcnR5KCkgZG9lcyBub3RcclxuICAgICAgICAvLyBnZW5lcmF0ZSBhIG11dGF0aW9uIGV2ZW50LCBvYnNlcnZlcnMgY2FuIGNyYXNoLCBhbmQgdGhlIHF1ZXVlIGRvZXMgbm90IGRyYWluXHJcbiAgICAgICAgLy8gcmVsaWFibHkuIFRoZSBmb2xsb3dpbmcgZmVhdHVyZSB0ZXN0IHdhcyBhZGFwdGVkIGZyb21cclxuICAgICAgICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90MTBrby80YWNlYjhjNzE2ODFmZGIyNzVlMzNlZmU1ZTU3NmIxNFxyXG4gICAgICAgIGNvbnN0IGV4YW1wbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSAqL1xyXG4gICAgICAgIGNvbnN0IEhvc3RNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XHJcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSG9zdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgeyB9KTtcclxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGV4YW1wbGUsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTtcclxuICAgICAgICBleGFtcGxlLnN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob2JzZXJ2ZXIudGFrZVJlY29yZHMoKS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuYWRkKCdkb20td2ViYW5pbWF0aW9uJywgKCkgPT4gdHJ1ZSAmJiBnbG9iYWwuQW5pbWF0aW9uICE9PSB1bmRlZmluZWQgJiYgZ2xvYmFsLktleWZyYW1lRWZmZWN0ICE9PSB1bmRlZmluZWQsIHRydWUpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9oYXMubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N1cHBvcnQvaGFzLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4uL2dsb2JhbCc7XHJcbmltcG9ydCBoYXMgZnJvbSAnLi9oYXMnO1xyXG5mdW5jdGlvbiBleGVjdXRlVGFzayhpdGVtKSB7XHJcbiAgICBpZiAoaXRlbSAmJiBpdGVtLmlzQWN0aXZlICYmIGl0ZW0uY2FsbGJhY2spIHtcclxuICAgICAgICBpdGVtLmNhbGxiYWNrKCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2V0UXVldWVIYW5kbGUoaXRlbSwgZGVzdHJ1Y3Rvcikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsgfTtcclxuICAgICAgICAgICAgaXRlbS5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpdGVtLmNhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGRlc3RydWN0b3IpIHtcclxuICAgICAgICAgICAgICAgIGRlc3RydWN0b3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxubGV0IGNoZWNrTWljcm9UYXNrUXVldWU7XHJcbmxldCBtaWNyb1Rhc2tzO1xyXG4vKipcclxuICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gdGhlIG1hY3JvdGFzayBxdWV1ZS5cclxuICpcclxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxyXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHF1ZXVlVGFzayA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBsZXQgZGVzdHJ1Y3RvcjtcclxuICAgIGxldCBlbnF1ZXVlO1xyXG4gICAgLy8gU2luY2UgdGhlIElFIGltcGxlbWVudGF0aW9uIG9mIGBzZXRJbW1lZGlhdGVgIGlzIG5vdCBmbGF3bGVzcywgd2Ugd2lsbCB0ZXN0IGZvciBgcG9zdE1lc3NhZ2VgIGZpcnN0LlxyXG4gICAgaWYgKHRydWUpIHtcclxuICAgICAgICBjb25zdCBxdWV1ZSA9IFtdO1xyXG4gICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIENvbmZpcm0gdGhhdCB0aGUgZXZlbnQgd2FzIHRyaWdnZXJlZCBieSB0aGUgY3VycmVudCB3aW5kb3cgYW5kIGJ5IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi5cclxuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmIGV2ZW50LmRhdGEgPT09ICdkb2pvLXF1ZXVlLW1lc3NhZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBleGVjdXRlVGFzayhxdWV1ZS5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBxdWV1ZS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoJ2Rvam8tcXVldWUtbWVzc2FnZScsICcqJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZhbHNlKSB7XHJcbiAgICAgICAgZGVzdHJ1Y3RvciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcclxuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNldEltbWVkaWF0ZShleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZGVzdHJ1Y3RvciA9IGdsb2JhbC5jbGVhclRpbWVvdXQ7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSksIDApO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBxdWV1ZVRhc2soY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBpdGVtID0ge1xyXG4gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBpZCA9IGVucXVldWUoaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIGdldFF1ZXVlSGFuZGxlKGl0ZW0sIGRlc3RydWN0b3IgJiZcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RvcihpZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETzogVXNlIGFzcGVjdC5iZWZvcmUgd2hlbiBpdCBpcyBhdmFpbGFibGUuXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgID8gcXVldWVUYXNrXHJcbiAgICAgICAgOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY2hlY2tNaWNyb1Rhc2tRdWV1ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcXVldWVUYXNrKGNhbGxiYWNrKTtcclxuICAgICAgICB9O1xyXG59KSgpO1xyXG4vLyBXaGVuIG5vIG1lY2hhbmlzbSBmb3IgcmVnaXN0ZXJpbmcgbWljcm90YXNrcyBpcyBleHBvc2VkIGJ5IHRoZSBlbnZpcm9ubWVudCwgbWljcm90YXNrcyB3aWxsXHJcbi8vIGJlIHF1ZXVlZCBhbmQgdGhlbiBleGVjdXRlZCBpbiBhIHNpbmdsZSBtYWNyb3Rhc2sgYmVmb3JlIHRoZSBvdGhlciBtYWNyb3Rhc2tzIGFyZSBleGVjdXRlZC5cclxuaWYgKCF0cnVlKSB7XHJcbiAgICBsZXQgaXNNaWNyb1Rhc2tRdWV1ZWQgPSBmYWxzZTtcclxuICAgIG1pY3JvVGFza3MgPSBbXTtcclxuICAgIGNoZWNrTWljcm9UYXNrUXVldWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCFpc01pY3JvVGFza1F1ZXVlZCkge1xyXG4gICAgICAgICAgICBpc01pY3JvVGFza1F1ZXVlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHF1ZXVlVGFzayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpc01pY3JvVGFza1F1ZXVlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1pY3JvVGFza3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChpdGVtID0gbWljcm9UYXNrcy5zaGlmdCgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlVGFzayhpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIFNjaGVkdWxlcyBhbiBhbmltYXRpb24gdGFzayB3aXRoIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpZiBpdCBleGlzdHMsIG9yIHdpdGggYHF1ZXVlVGFza2Agb3RoZXJ3aXNlLlxyXG4gKlxyXG4gKiBTaW5jZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUncyBiZWhhdmlvciBkb2VzIG5vdCBtYXRjaCB0aGF0IGV4cGVjdGVkIGZyb20gYHF1ZXVlVGFza2AsIGl0IGlzIG5vdCB1c2VkIHRoZXJlLlxyXG4gKiBIb3dldmVyLCBhdCB0aW1lcyBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGRlbGVnYXRlIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZTsgaGVuY2UgdGhlIGZvbGxvd2luZyBtZXRob2QuXHJcbiAqXHJcbiAqIEBwYXJhbSBjYWxsYmFjayB0aGUgZnVuY3Rpb24gdG8gYmUgcXVldWVkIGFuZCBsYXRlciBleGVjdXRlZC5cclxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBxdWV1ZUFuaW1hdGlvblRhc2sgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCF0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXVlVGFzaztcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHF1ZXVlQW5pbWF0aW9uVGFzayhjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB7XHJcbiAgICAgICAgICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSkpO1xyXG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxyXG4gICAgcmV0dXJuIHRydWVcclxuICAgICAgICA/IHF1ZXVlQW5pbWF0aW9uVGFza1xyXG4gICAgICAgIDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHF1ZXVlQW5pbWF0aW9uVGFzayhjYWxsYmFjayk7XHJcbiAgICAgICAgfTtcclxufSkoKTtcclxuLyoqXHJcbiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIHRoZSBtaWNyb3Rhc2sgcXVldWUuXHJcbiAqXHJcbiAqIEFueSBjYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIGBxdWV1ZU1pY3JvVGFza2Agd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIG5leHQgbWFjcm90YXNrLiBJZiBubyBuYXRpdmVcclxuICogbWVjaGFuaXNtIGZvciBzY2hlZHVsaW5nIG1hY3JvdGFza3MgaXMgZXhwb3NlZCwgdGhlbiBhbnkgY2FsbGJhY2tzIHdpbGwgYmUgZmlyZWQgYmVmb3JlIGFueSBtYWNyb3Rhc2tcclxuICogcmVnaXN0ZXJlZCB3aXRoIGBxdWV1ZVRhc2tgIG9yIGBxdWV1ZUFuaW1hdGlvblRhc2tgLlxyXG4gKlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXHJcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGEgYGRlc3Ryb3lgIG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgcHJldmVudHMgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnJvbSBleGVjdXRpbmcuXHJcbiAqL1xyXG5leHBvcnQgbGV0IHF1ZXVlTWljcm9UYXNrID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBlbnF1ZXVlO1xyXG4gICAgaWYgKGZhbHNlKSB7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5wcm9jZXNzLm5leHRUaWNrKGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0cnVlKSB7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5Qcm9taXNlLnJlc29sdmUoaXRlbSkudGhlbihleGVjdXRlVGFzayk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRydWUpIHtcclxuICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSAqL1xyXG4gICAgICAgIGNvbnN0IEhvc3RNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXVlID0gW107XHJcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSG9zdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHF1ZXVlLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmlzQWN0aXZlICYmIGl0ZW0uY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgcXVldWUucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3F1ZXVlU3RhdHVzJywgJzEnKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcclxuICAgICAgICAgICAgbWljcm9UYXNrcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHtcclxuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZW5xdWV1ZShpdGVtKTtcclxuICAgICAgICByZXR1cm4gZ2V0UXVldWVIYW5kbGUoaXRlbSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1xdWV1ZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3F1ZXVlLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3F1ZXVlLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCIvKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHZhbHVlIHByb3BlcnR5IGRlc2NyaXB0b3JcbiAqXG4gKiBAcGFyYW0gdmFsdWUgICAgICAgIFRoZSB2YWx1ZSB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBzaG91bGQgYmUgc2V0IHRvXG4gKiBAcGFyYW0gZW51bWVyYWJsZSAgIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgZW51bWJlcmFibGUsIGRlZmF1bHRzIHRvIGZhbHNlXG4gKiBAcGFyYW0gd3JpdGFibGUgICAgIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgd3JpdGFibGUsIGRlZmF1bHRzIHRvIHRydWVcbiAqIEBwYXJhbSBjb25maWd1cmFibGUgSWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBjb25maWd1cmFibGUsIGRlZmF1bHRzIHRvIHRydWVcbiAqIEByZXR1cm4gICAgICAgICAgICAgVGhlIHByb3BlcnR5IGRlc2NyaXB0b3Igb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZURlc2NyaXB0b3IodmFsdWUsIGVudW1lcmFibGUgPSBmYWxzZSwgd3JpdGFibGUgPSB0cnVlLCBjb25maWd1cmFibGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiBlbnVtZXJhYmxlLFxuICAgICAgICB3cml0YWJsZTogd3JpdGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogY29uZmlndXJhYmxlXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTmF0aXZlKG5hdGl2ZUZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9uLmFwcGx5KHRhcmdldCwgYXJncyk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC91dGlsLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3V0aWwubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IEV2ZW50ZWQgfSBmcm9tICdAZG9qby9jb3JlL0V2ZW50ZWQnO1xuZXhwb3J0IGNsYXNzIEluamVjdG9yIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgY29uc3RydWN0b3IocGF5bG9hZCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcbiAgICB9XG4gICAgc2V0SW52YWxpZGF0b3IoaW52YWxpZGF0b3IpIHtcbiAgICAgICAgdGhpcy5faW52YWxpZGF0b3IgPSBpbnZhbGlkYXRvcjtcbiAgICB9XG4gICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGF5bG9hZDtcbiAgICB9XG4gICAgc2V0KHBheWxvYWQpIHtcbiAgICAgICAgdGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgICAgIGlmICh0aGlzLl9pbnZhbGlkYXRvcikge1xuICAgICAgICAgICAgdGhpcy5faW52YWxpZGF0b3IoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEluamVjdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW5qZWN0b3IubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL0luamVjdG9yLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvSW5qZWN0b3IubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IEV2ZW50ZWQgfSBmcm9tICdAZG9qby9jb3JlL0V2ZW50ZWQnO1xyXG5pbXBvcnQgTWFwIGZyb20gJ0Bkb2pvL3NoaW0vTWFwJztcclxuLyoqXHJcbiAqIEVudW0gdG8gaWRlbnRpZnkgdGhlIHR5cGUgb2YgZXZlbnQuXHJcbiAqIExpc3RlbmluZyB0byAnUHJvamVjdG9yJyB3aWxsIG5vdGlmeSB3aGVuIHByb2plY3RvciBpcyBjcmVhdGVkIG9yIHVwZGF0ZWRcclxuICogTGlzdGVuaW5nIHRvICdXaWRnZXQnIHdpbGwgbm90aWZ5IHdoZW4gd2lkZ2V0IHJvb3QgaXMgY3JlYXRlZCBvciB1cGRhdGVkXHJcbiAqL1xyXG5leHBvcnQgdmFyIE5vZGVFdmVudFR5cGU7XHJcbihmdW5jdGlvbiAoTm9kZUV2ZW50VHlwZSkge1xyXG4gICAgTm9kZUV2ZW50VHlwZVtcIlByb2plY3RvclwiXSA9IFwiUHJvamVjdG9yXCI7XHJcbiAgICBOb2RlRXZlbnRUeXBlW1wiV2lkZ2V0XCJdID0gXCJXaWRnZXRcIjtcclxufSkoTm9kZUV2ZW50VHlwZSB8fCAoTm9kZUV2ZW50VHlwZSA9IHt9KSk7XHJcbmV4cG9ydCBjbGFzcyBOb2RlSGFuZGxlciBleHRlbmRzIEV2ZW50ZWQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICB0aGlzLl9ub2RlTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG4gICAgZ2V0KGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlTWFwLmdldChrZXkpO1xyXG4gICAgfVxyXG4gICAgaGFzKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlTWFwLmhhcyhrZXkpO1xyXG4gICAgfVxyXG4gICAgYWRkKGVsZW1lbnQsIGtleSkge1xyXG4gICAgICAgIHRoaXMuX25vZGVNYXAuc2V0KGtleSwgZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZToga2V5IH0pO1xyXG4gICAgfVxyXG4gICAgYWRkUm9vdCgpIHtcclxuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLldpZGdldCB9KTtcclxuICAgIH1cclxuICAgIGFkZFByb2plY3RvcigpIHtcclxuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLlByb2plY3RvciB9KTtcclxuICAgIH1cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuX25vZGVNYXAuY2xlYXIoKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBOb2RlSGFuZGxlcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm9kZUhhbmRsZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL05vZGVIYW5kbGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBQcm9taXNlIGZyb20gJ0Bkb2pvL3NoaW0vUHJvbWlzZSc7XHJcbmltcG9ydCBNYXAgZnJvbSAnQGRvam8vc2hpbS9NYXAnO1xyXG5pbXBvcnQgU3ltYm9sIGZyb20gJ0Bkb2pvL3NoaW0vU3ltYm9sJztcclxuaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJ0Bkb2pvL2NvcmUvRXZlbnRlZCc7XHJcbi8qKlxyXG4gKiBXaWRnZXQgYmFzZSBzeW1ib2wgdHlwZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFdJREdFVF9CQVNFX1RZUEUgPSBTeW1ib2woJ1dpZGdldCBCYXNlJyk7XHJcbi8qKlxyXG4gKiBDaGVja3MgaXMgdGhlIGl0ZW0gaXMgYSBzdWJjbGFzcyBvZiBXaWRnZXRCYXNlIChvciBhIFdpZGdldEJhc2UpXHJcbiAqXHJcbiAqIEBwYXJhbSBpdGVtIHRoZSBpdGVtIHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zIHRydWUvZmFsc2UgaW5kaWNhdGluZyBpZiB0aGUgaXRlbSBpcyBhIFdpZGdldEJhc2VDb25zdHJ1Y3RvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pIHtcclxuICAgIHJldHVybiBCb29sZWFuKGl0ZW0gJiYgaXRlbS5fdHlwZSA9PT0gV0lER0VUX0JBU0VfVFlQRSk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lkZ2V0Q29uc3RydWN0b3JEZWZhdWx0RXhwb3J0KGl0ZW0pIHtcclxuICAgIHJldHVybiBCb29sZWFuKGl0ZW0gJiZcclxuICAgICAgICBpdGVtLmhhc093blByb3BlcnR5KCdfX2VzTW9kdWxlJykgJiZcclxuICAgICAgICBpdGVtLmhhc093blByb3BlcnR5KCdkZWZhdWx0JykgJiZcclxuICAgICAgICBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtLmRlZmF1bHQpKTtcclxufVxyXG4vKipcclxuICogVGhlIFJlZ2lzdHJ5IGltcGxlbWVudGF0aW9uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUmVnaXN0cnkgZXh0ZW5kcyBFdmVudGVkIHtcclxuICAgIC8qKlxyXG4gICAgICogRW1pdCBsb2FkZWQgZXZlbnQgZm9yIHJlZ2lzdHJ5IGxhYmVsXHJcbiAgICAgKi9cclxuICAgIGVtaXRMb2FkZWRFdmVudCh3aWRnZXRMYWJlbCwgaXRlbSkge1xyXG4gICAgICAgIHRoaXMuZW1pdCh7XHJcbiAgICAgICAgICAgIHR5cGU6IHdpZGdldExhYmVsLFxyXG4gICAgICAgICAgICBhY3Rpb246ICdsb2FkZWQnLFxyXG4gICAgICAgICAgICBpdGVtXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBkZWZpbmUobGFiZWwsIGl0ZW0pIHtcclxuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0UmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeSA9IG5ldyBNYXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX3dpZGdldFJlZ2lzdHJ5LmhhcyhsYWJlbCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB3aWRnZXQgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnJHtsYWJlbC50b1N0cmluZygpfSdgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCBpdGVtKTtcclxuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgaXRlbS50aGVuKCh3aWRnZXRDdG9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpZGdldEN0b3I7XHJcbiAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtKSkge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGVmaW5lSW5qZWN0b3IobGFiZWwsIGluamVjdG9yRmFjdG9yeSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JSZWdpc3RyeSA9IG5ldyBNYXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2luamVjdG9yUmVnaXN0cnkuaGFzKGxhYmVsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGluamVjdG9yIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBmb3IgJyR7bGFiZWwudG9TdHJpbmcoKX0nYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludmFsaWRhdG9yID0gbmV3IEV2ZW50ZWQoKTtcclxuICAgICAgICBjb25zdCBpbmplY3Rvckl0ZW0gPSB7XHJcbiAgICAgICAgICAgIGluamVjdG9yOiBpbmplY3RvckZhY3RvcnkoKCkgPT4gaW52YWxpZGF0b3IuZW1pdCh7IHR5cGU6ICdpbnZhbGlkYXRlJyB9KSksXHJcbiAgICAgICAgICAgIGludmFsaWRhdG9yXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LnNldChsYWJlbCwgaW5qZWN0b3JJdGVtKTtcclxuICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgaW5qZWN0b3JJdGVtKTtcclxuICAgIH1cclxuICAgIGdldChsYWJlbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fd2lkZ2V0UmVnaXN0cnkgfHwgIXRoaXMuaGFzKGxhYmVsKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3dpZGdldFJlZ2lzdHJ5LmdldChsYWJlbCk7XHJcbiAgICAgICAgaWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBpdGVtKCk7XHJcbiAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCBwcm9taXNlKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4oKHdpZGdldEN0b3IpID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzV2lkZ2V0Q29uc3RydWN0b3JEZWZhdWx0RXhwb3J0KHdpZGdldEN0b3IpKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXRDdG9yID0gd2lkZ2V0Q3Rvci5kZWZhdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgd2lkZ2V0Q3Rvcik7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCB3aWRnZXRDdG9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIHdpZGdldEN0b3I7XHJcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZ2V0SW5qZWN0b3IobGFiZWwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2luamVjdG9yUmVnaXN0cnkgfHwgIXRoaXMuaGFzSW5qZWN0b3IobGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0b3JSZWdpc3RyeS5nZXQobGFiZWwpO1xyXG4gICAgfVxyXG4gICAgaGFzKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fd2lkZ2V0UmVnaXN0cnkgJiYgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSk7XHJcbiAgICB9XHJcbiAgICBoYXNJbmplY3RvcihsYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2luamVjdG9yUmVnaXN0cnkgJiYgdGhpcy5faW5qZWN0b3JSZWdpc3RyeS5oYXMobGFiZWwpKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBSZWdpc3RyeTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVnaXN0cnkubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL1JlZ2lzdHJ5Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvUmVnaXN0cnkubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IE1hcCB9IGZyb20gJ0Bkb2pvL3NoaW0vTWFwJztcclxuaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJ0Bkb2pvL2NvcmUvRXZlbnRlZCc7XHJcbmltcG9ydCB7IFJlZ2lzdHJ5IH0gZnJvbSAnLi9SZWdpc3RyeSc7XHJcbmV4cG9ydCBjbGFzcyBSZWdpc3RyeUhhbmRsZXIgZXh0ZW5kcyBFdmVudGVkIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTtcclxuICAgICAgICB0aGlzLl9yZWdpc3RyeVdpZGdldExhYmVsTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XHJcbiAgICAgICAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeVdpZGdldExhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZVJlZ2lzdHJ5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm93bih7IGRlc3Ryb3kgfSk7XHJcbiAgICB9XHJcbiAgICBzZXQgYmFzZShiYXNlUmVnaXN0cnkpIHtcclxuICAgICAgICBpZiAodGhpcy5iYXNlUmVnaXN0cnkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5iYXNlUmVnaXN0cnkgPSBiYXNlUmVnaXN0cnk7XHJcbiAgICB9XHJcbiAgICBkZWZpbmUobGFiZWwsIHdpZGdldCkge1xyXG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmRlZmluZShsYWJlbCwgd2lkZ2V0KTtcclxuICAgIH1cclxuICAgIGRlZmluZUluamVjdG9yKGxhYmVsLCBpbmplY3Rvcikge1xyXG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmRlZmluZUluamVjdG9yKGxhYmVsLCBpbmplY3Rvcik7XHJcbiAgICB9XHJcbiAgICBoYXMobGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVnaXN0cnkuaGFzKGxhYmVsKSB8fCBCb29sZWFuKHRoaXMuYmFzZVJlZ2lzdHJ5ICYmIHRoaXMuYmFzZVJlZ2lzdHJ5LmhhcyhsYWJlbCkpO1xyXG4gICAgfVxyXG4gICAgaGFzSW5qZWN0b3IobGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpIHx8IEJvb2xlYW4odGhpcy5iYXNlUmVnaXN0cnkgJiYgdGhpcy5iYXNlUmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpKTtcclxuICAgIH1cclxuICAgIGdldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSwgJ2dldCcsIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXApO1xyXG4gICAgfVxyXG4gICAgZ2V0SW5qZWN0b3IobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UgPSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsICdnZXRJbmplY3RvcicsIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcCk7XHJcbiAgICB9XHJcbiAgICBfZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCBnZXRGdW5jdGlvbk5hbWUsIGxhYmVsTWFwKSB7XHJcbiAgICAgICAgY29uc3QgcmVnaXN0cmllcyA9IGdsb2JhbFByZWNlZGVuY2UgPyBbdGhpcy5iYXNlUmVnaXN0cnksIHRoaXMuX3JlZ2lzdHJ5XSA6IFt0aGlzLl9yZWdpc3RyeSwgdGhpcy5iYXNlUmVnaXN0cnldO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVnaXN0cmllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IHJlZ2lzdHJpZXNbaV07XHJcbiAgICAgICAgICAgIGlmICghcmVnaXN0cnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZWdpc3RyeVtnZXRGdW5jdGlvbk5hbWVdKGxhYmVsKTtcclxuICAgICAgICAgICAgY29uc3QgcmVnaXN0ZXJlZExhYmVscyA9IGxhYmVsTWFwLmdldChyZWdpc3RyeSkgfHwgW107XHJcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyZWdpc3RlcmVkTGFiZWxzLmluZGV4T2YobGFiZWwpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gcmVnaXN0cnkub24obGFiZWwsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdsb2FkZWQnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbZ2V0RnVuY3Rpb25OYW1lXShsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSkgPT09IGV2ZW50Lml0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KHsgdHlwZTogJ2ludmFsaWRhdGUnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vd24oaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgIGxhYmVsTWFwLnNldChyZWdpc3RyeSwgWy4uLnJlZ2lzdGVyZWRMYWJlbHMsIGxhYmVsXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgUmVnaXN0cnlIYW5kbGVyO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWdpc3RyeUhhbmRsZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL1JlZ2lzdHJ5SGFuZGxlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL1JlZ2lzdHJ5SGFuZGxlci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IE1hcCBmcm9tICdAZG9qby9zaGltL01hcCc7XG5pbXBvcnQgV2Vha01hcCBmcm9tICdAZG9qby9zaGltL1dlYWtNYXAnO1xuaW1wb3J0IFN5bWJvbCBmcm9tICdAZG9qby9zaGltL1N5bWJvbCc7XG5pbXBvcnQgeyB2IH0gZnJvbSAnLi9kJztcbmltcG9ydCB7IGF1dG8gfSBmcm9tICcuL2RpZmYnO1xuaW1wb3J0IFJlZ2lzdHJ5SGFuZGxlciBmcm9tICcuL1JlZ2lzdHJ5SGFuZGxlcic7XG5pbXBvcnQgTm9kZUhhbmRsZXIgZnJvbSAnLi9Ob2RlSGFuZGxlcic7XG5pbXBvcnQgeyB3aWRnZXRJbnN0YW5jZU1hcCB9IGZyb20gJy4vdmRvbSc7XG5pbXBvcnQgeyBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvciwgV0lER0VUX0JBU0VfVFlQRSB9IGZyb20gJy4vUmVnaXN0cnknO1xuY29uc3QgZGVjb3JhdG9yTWFwID0gbmV3IE1hcCgpO1xuY29uc3QgYm91bmRBdXRvID0gYXV0by5iaW5kKG51bGwpO1xuZXhwb3J0IGNvbnN0IG5vQmluZCA9IFN5bWJvbC5mb3IoJ2Rvam9Ob0JpbmQnKTtcbi8qKlxuICogTWFpbiB3aWRnZXQgYmFzZSBmb3IgYWxsIHdpZGdldHMgdG8gZXh0ZW5kXG4gKi9cbmV4cG9ydCBjbGFzcyBXaWRnZXRCYXNlIHtcbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyBpZiBpdCBpcyB0aGUgaW5pdGlhbCBzZXQgcHJvcGVydGllcyBjeWNsZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5faW5pdGlhbFByb3BlcnRpZXMgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQXJyYXkgb2YgcHJvcGVydHkga2V5cyBjb25zaWRlcmVkIGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgc2V0IHByb3BlcnRpZXNcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5fbm9kZUhhbmRsZXIgPSBuZXcgTm9kZUhhbmRsZXIoKTtcbiAgICAgICAgdGhpcy5faGFuZGxlcyA9IFtdO1xuICAgICAgICB0aGlzLl9jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLl9kZWNvcmF0b3JDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHt9O1xuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlckZ1bmMgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9ib3VuZEludmFsaWRhdGUgPSB0aGlzLmludmFsaWRhdGUuYmluZCh0aGlzKTtcbiAgICAgICAgd2lkZ2V0SW5zdGFuY2VNYXAuc2V0KHRoaXMsIHtcbiAgICAgICAgICAgIGRpcnR5OiB0cnVlLFxuICAgICAgICAgICAgb25BdHRhY2g6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXR0YWNoKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25EZXRhY2g6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGV0YWNoKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9kZUhhbmRsZXI6IHRoaXMuX25vZGVIYW5kbGVyLFxuICAgICAgICAgICAgcmVnaXN0cnk6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3JlUHJvcGVydGllczoge30sXG4gICAgICAgICAgICByZW5kZXJpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaW5wdXRQcm9wZXJ0aWVzOiB7fVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcnVuQWZ0ZXJDb25zdHJ1Y3RvcnMoKTtcbiAgICB9XG4gICAgbWV0YShNZXRhVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5fbWV0YU1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9tZXRhTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjYWNoZWQgPSB0aGlzLl9tZXRhTWFwLmdldChNZXRhVHlwZSk7XG4gICAgICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgICAgICBjYWNoZWQgPSBuZXcgTWV0YVR5cGUoe1xuICAgICAgICAgICAgICAgIGludmFsaWRhdGU6IHRoaXMuX2JvdW5kSW52YWxpZGF0ZSxcbiAgICAgICAgICAgICAgICBub2RlSGFuZGxlcjogdGhpcy5fbm9kZUhhbmRsZXIsXG4gICAgICAgICAgICAgICAgYmluZDogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm93bihjYWNoZWQpO1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcC5zZXQoTWV0YVR5cGUsIGNhY2hlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgb25BdHRhY2goKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgYnkgZGVmYXVsdC5cbiAgICB9XG4gICAgb25EZXRhY2goKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgYnkgZGVmYXVsdC5cbiAgICB9XG4gICAgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBnZXQgY2hhbmdlZFByb3BlcnR5S2V5cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzXTtcbiAgICB9XG4gICAgX19zZXRDb3JlUHJvcGVydGllc19fKGNvcmVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvbnN0IHsgYmFzZVJlZ2lzdHJ5IH0gPSBjb3JlUHJvcGVydGllcztcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJhc2VSZWdpc3RyeSAhPT0gYmFzZVJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5SGFuZGxlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMub3duKHRoaXMuX3JlZ2lzdHJ5KTtcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkuYmFzZSA9IGJhc2VSZWdpc3RyeTtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcyA9IGNvcmVQcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBfX3NldFByb3BlcnRpZXNfXyhvcmlnaW5hbFByb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpbnN0YW5jZURhdGEuaW5wdXRQcm9wZXJ0aWVzID0gb3JpZ2luYWxQcm9wZXJ0aWVzO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5fcnVuQmVmb3JlUHJvcGVydGllcyhvcmlnaW5hbFByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCByZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMgPSB0aGlzLmdldERlY29yYXRvcigncmVnaXN0ZXJlZERpZmZQcm9wZXJ0eScpO1xuICAgICAgICBjb25zdCBjaGFuZ2VkUHJvcGVydHlLZXlzID0gW107XG4gICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID09PSBmYWxzZSB8fCByZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxQcm9wZXJ0aWVzID0gWy4uLnByb3BlcnR5TmFtZXMsIC4uLk9iamVjdC5rZXlzKHRoaXMuX3Byb3BlcnRpZXMpXTtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRQcm9wZXJ0aWVzID0gW107XG4gICAgICAgICAgICBjb25zdCBkaWZmUHJvcGVydHlSZXN1bHRzID0ge307XG4gICAgICAgICAgICBsZXQgcnVuUmVhY3Rpb25zID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja2VkUHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGVja2VkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9wZXJ0eSA9IHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQcm9wZXJ0eSA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSwgaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJpbmQpO1xuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBydW5SZWFjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWZmRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoYGRpZmZQcm9wZXJ0eToke3Byb3BlcnR5TmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkaWZmRnVuY3Rpb25zW2ldKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlZCAmJiBjaGFuZ2VkUHJvcGVydHlLZXlzLmluZGV4T2YocHJvcGVydHlOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkUHJvcGVydHlLZXlzLnB1c2gocHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZQcm9wZXJ0eVJlc3VsdHNbcHJvcGVydHlOYW1lXSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYm91bmRBdXRvKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VkICYmIGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWZmUHJvcGVydHlSZXN1bHRzW3Byb3BlcnR5TmFtZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVuUmVhY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwRGlmZlByb3BlcnR5UmVhY3Rpb25zKHByb3BlcnRpZXMsIGNoYW5nZWRQcm9wZXJ0eUtleXMpLmZvckVhY2goKGFyZ3MsIHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmNhbGwodGhpcywgYXJncy5wcmV2aW91c1Byb3BlcnRpZXMsIGFyZ3MubmV3UHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBkaWZmUHJvcGVydHlSZXN1bHRzO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cyA9IGNoYW5nZWRQcm9wZXJ0eUtleXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsUHJvcGVydGllcyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0sIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iaW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0eUtleXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMgPSBjaGFuZ2VkUHJvcGVydHlLZXlzO1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuICAgIH1cbiAgICBfX3NldENoaWxkcmVuX18oY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA+IDAgfHwgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9fcmVuZGVyX18oKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IHRoaXMuX3J1bkJlZm9yZVJlbmRlcnMoKTtcbiAgICAgICAgbGV0IGROb2RlID0gcmVuZGVyKCk7XG4gICAgICAgIGROb2RlID0gdGhpcy5ydW5BZnRlclJlbmRlcnMoZE5vZGUpO1xuICAgICAgICB0aGlzLl9ub2RlSGFuZGxlci5jbGVhcigpO1xuICAgICAgICByZXR1cm4gZE5vZGU7XG4gICAgfVxuICAgIGludmFsaWRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlKSB7XG4gICAgICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHYoJ2RpdicsIHt9LCB0aGlzLmNoaWxkcmVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gYWRkIGRlY29yYXRvcnMgdG8gV2lkZ2V0QmFzZVxuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSBUaGUga2V5IG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKi9cbiAgICBhZGREZWNvcmF0b3IoZGVjb3JhdG9yS2V5LCB2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eSgnY29uc3RydWN0b3InKSkge1xuICAgICAgICAgICAgbGV0IGRlY29yYXRvckxpc3QgPSBkZWNvcmF0b3JNYXAuZ2V0KHRoaXMuY29uc3RydWN0b3IpO1xuICAgICAgICAgICAgaWYgKCFkZWNvcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yTGlzdCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JNYXAuc2V0KHRoaXMuY29uc3RydWN0b3IsIGRlY29yYXRvckxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNwZWNpZmljRGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvckxpc3QuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICBpZiAoIXNwZWNpZmljRGVjb3JhdG9yTGlzdCkge1xuICAgICAgICAgICAgICAgIHNwZWNpZmljRGVjb3JhdG9yTGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIGRlY29yYXRvckxpc3Quc2V0KGRlY29yYXRvcktleSwgc3BlY2lmaWNEZWNvcmF0b3JMaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwZWNpZmljRGVjb3JhdG9yTGlzdC5wdXNoKC4uLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSB0aGlzLmdldERlY29yYXRvcihkZWNvcmF0b3JLZXkpO1xuICAgICAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgWy4uLmRlY29yYXRvcnMsIC4uLnZhbHVlXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gYnVpbGQgdGhlIGxpc3Qgb2YgZGVjb3JhdG9ycyBmcm9tIHRoZSBnbG9iYWwgZGVjb3JhdG9yIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWNvcmF0b3JLZXkgIFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgZGVjb3JhdG9yIHZhbHVlc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2J1aWxkRGVjb3JhdG9yTGlzdChkZWNvcmF0b3JLZXkpIHtcbiAgICAgICAgY29uc3QgYWxsRGVjb3JhdG9ycyA9IFtdO1xuICAgICAgICBsZXQgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICB3aGlsZSAoY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZGVjb3JhdG9yTWFwLmdldChjb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VNYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNvcmF0b3JzID0gaW5zdGFuY2VNYXAuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICAgICAgaWYgKGRlY29yYXRvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsRGVjb3JhdG9ycy51bnNoaWZ0KC4uLmRlY29yYXRvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNvbnN0cnVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gcmV0cmlldmUgZGVjb3JhdG9yIHZhbHVlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSBUaGUga2V5IG9mIHRoZSBkZWNvcmF0b3JcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICovXG4gICAgZ2V0RGVjb3JhdG9yKGRlY29yYXRvcktleSkge1xuICAgICAgICBsZXQgYWxsRGVjb3JhdG9ycyA9IHRoaXMuX2RlY29yYXRvckNhY2hlLmdldChkZWNvcmF0b3JLZXkpO1xuICAgICAgICBpZiAoYWxsRGVjb3JhdG9ycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICAgICAgfVxuICAgICAgICBhbGxEZWNvcmF0b3JzID0gdGhpcy5fYnVpbGREZWNvcmF0b3JMaXN0KGRlY29yYXRvcktleSk7XG4gICAgICAgIHRoaXMuX2RlY29yYXRvckNhY2hlLnNldChkZWNvcmF0b3JLZXksIGFsbERlY29yYXRvcnMpO1xuICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcbiAgICB9XG4gICAgX21hcERpZmZQcm9wZXJ0eVJlYWN0aW9ucyhuZXdQcm9wZXJ0aWVzLCBjaGFuZ2VkUHJvcGVydHlLZXlzKSB7XG4gICAgICAgIGNvbnN0IHJlYWN0aW9uRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicpO1xuICAgICAgICByZXR1cm4gcmVhY3Rpb25GdW5jdGlvbnMucmVkdWNlKChyZWFjdGlvblByb3BlcnR5TWFwLCB7IHJlYWN0aW9uLCBwcm9wZXJ0eU5hbWUgfSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlYWN0aW9uQXJndW1lbnRzID0gcmVhY3Rpb25Qcm9wZXJ0eU1hcC5nZXQocmVhY3Rpb24pO1xuICAgICAgICAgICAgaWYgKHJlYWN0aW9uQXJndW1lbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZWFjdGlvbkFyZ3VtZW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQcm9wZXJ0aWVzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgbmV3UHJvcGVydGllczoge30sXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWN0aW9uQXJndW1lbnRzLnByZXZpb3VzUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgcmVhY3Rpb25Bcmd1bWVudHMubmV3UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gbmV3UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlYWN0aW9uQXJndW1lbnRzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVhY3Rpb25Qcm9wZXJ0eU1hcC5zZXQocmVhY3Rpb24sIHJlYWN0aW9uQXJndW1lbnRzKTtcbiAgICAgICAgICAgIHJldHVybiByZWFjdGlvblByb3BlcnR5TWFwO1xuICAgICAgICB9LCBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCaW5kcyB1bmJvdW5kIHByb3BlcnR5IGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBiaW5kYCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgZnVuY3Rpb25zXG4gICAgICovXG4gICAgX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnR5LCBiaW5kKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIXByb3BlcnR5W25vQmluZF0gJiYgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IocHJvcGVydHkpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiaW5kSW5mbyA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwLmdldChwcm9wZXJ0eSkgfHwge307XG4gICAgICAgICAgICBsZXQgeyBib3VuZEZ1bmMsIHNjb3BlIH0gPSBiaW5kSW5mbztcbiAgICAgICAgICAgIGlmIChib3VuZEZ1bmMgPT09IHVuZGVmaW5lZCB8fCBzY29wZSAhPT0gYmluZCkge1xuICAgICAgICAgICAgICAgIGJvdW5kRnVuYyA9IHByb3BlcnR5LmJpbmQoYmluZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAuc2V0KHByb3BlcnR5LCB7IGJvdW5kRnVuYywgc2NvcGU6IGJpbmQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm91bmRGdW5jO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gICAgZ2V0IHJlZ2lzdHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyKCk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeTtcbiAgICB9XG4gICAgX3J1bkJlZm9yZVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBiZWZvcmVQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnKTtcbiAgICAgICAgaWYgKGJlZm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJlZm9yZVByb3BlcnRpZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBiZWZvcmVQcm9wZXJ0aWVzRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uLmNhbGwodGhpcywgcHJvcGVydGllcykpO1xuICAgICAgICAgICAgfSwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYmVmb3JlIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgdXBkYXRlZCByZW5kZXIgbWV0aG9kXG4gICAgICovXG4gICAgX3J1bkJlZm9yZVJlbmRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZVJlbmRlcnMgPSB0aGlzLmdldERlY29yYXRvcignYmVmb3JlUmVuZGVyJyk7XG4gICAgICAgIGlmIChiZWZvcmVSZW5kZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmVSZW5kZXJzLnJlZHVjZSgocmVuZGVyLCBiZWZvcmVSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZW5kZXIgPSBiZWZvcmVSZW5kZXJGdW5jdGlvbi5jYWxsKHRoaXMsIHJlbmRlciwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlciBmdW5jdGlvbiBub3QgcmV0dXJuZWQgZnJvbSBiZWZvcmVSZW5kZXIsIHVzaW5nIHByZXZpb3VzIHJlbmRlcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZFJlbmRlcjtcbiAgICAgICAgICAgIH0sIHRoaXMuX2JvdW5kUmVuZGVyRnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kUmVuZGVyRnVuYztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGFsbCByZWdpc3RlcmVkIGFmdGVyIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgZGVjb3JhdGVkIEROb2Rlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGROb2RlIFRoZSBETm9kZXMgdG8gcnVuIHRocm91Z2ggdGhlIGFmdGVyIHJlbmRlcnNcbiAgICAgKi9cbiAgICBydW5BZnRlclJlbmRlcnMoZE5vZGUpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJSZW5kZXJzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJyk7XG4gICAgICAgIGlmIChhZnRlclJlbmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGFmdGVyUmVuZGVycy5yZWR1Y2UoKGROb2RlLCBhZnRlclJlbmRlckZ1bmN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFmdGVyUmVuZGVyRnVuY3Rpb24uY2FsbCh0aGlzLCBkTm9kZSk7XG4gICAgICAgICAgICB9LCBkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21ldGFNYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcC5mb3JFYWNoKChtZXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgbWV0YS5hZnRlclJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGROb2RlO1xuICAgIH1cbiAgICBfcnVuQWZ0ZXJDb25zdHJ1Y3RvcnMoKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyQ29uc3RydWN0b3JzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyQ29uc3RydWN0b3InKTtcbiAgICAgICAgaWYgKGFmdGVyQ29uc3RydWN0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFmdGVyQ29uc3RydWN0b3JzLmZvckVhY2goKGFmdGVyQ29uc3RydWN0b3IpID0+IGFmdGVyQ29uc3RydWN0b3IuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb3duKGhhbmRsZSkge1xuICAgICAgICB0aGlzLl9oYW5kbGVzLnB1c2goaGFuZGxlKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2hhbmRsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gdGhpcy5faGFuZGxlcy5wb3AoKTtcbiAgICAgICAgICAgIGlmIChoYW5kbGUpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBzdGF0aWMgaWRlbnRpZmllclxuICovXG5XaWRnZXRCYXNlLl90eXBlID0gV0lER0VUX0JBU0VfVFlQRTtcbmV4cG9ydCBkZWZhdWx0IFdpZGdldEJhc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaWRnZXRCYXNlLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9XaWRnZXRCYXNlLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwibGV0IGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUgPSAnJztcbmxldCBicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnJztcbmZ1bmN0aW9uIGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQpIHtcbiAgICBpZiAoJ1dlYmtpdFRyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUpIHtcbiAgICAgICAgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICd3ZWJraXRUcmFuc2l0aW9uRW5kJztcbiAgICAgICAgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKCd0cmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlIHx8ICdNb3pUcmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlKSB7XG4gICAgICAgIGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUgPSAndHJhbnNpdGlvbmVuZCc7XG4gICAgICAgIGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9ICdhbmltYXRpb25lbmQnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIGJyb3dzZXIgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRpYWxpemUoZWxlbWVudCkge1xuICAgIGlmIChicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPT09ICcnKSB7XG4gICAgICAgIGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJ1bkFuZENsZWFuVXAoZWxlbWVudCwgc3RhcnRBbmltYXRpb24sIGZpbmlzaEFuaW1hdGlvbikge1xuICAgIGluaXRpYWxpemUoZWxlbWVudCk7XG4gICAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gICAgbGV0IHRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgZmluaXNoQW5pbWF0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHN0YXJ0QW5pbWF0aW9uKCk7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xufVxuZnVuY3Rpb24gZXhpdChub2RlLCBwcm9wZXJ0aWVzLCBleGl0QW5pbWF0aW9uLCByZW1vdmVOb2RlKSB7XG4gICAgY29uc3QgYWN0aXZlQ2xhc3MgPSBwcm9wZXJ0aWVzLmV4aXRBbmltYXRpb25BY3RpdmUgfHwgYCR7ZXhpdEFuaW1hdGlvbn0tYWN0aXZlYDtcbiAgICBydW5BbmRDbGVhblVwKG5vZGUsICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGV4aXRBbmltYXRpb24pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgICByZW1vdmVOb2RlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBlbnRlcihub2RlLCBwcm9wZXJ0aWVzLCBlbnRlckFuaW1hdGlvbikge1xuICAgIGNvbnN0IGFjdGl2ZUNsYXNzID0gcHJvcGVydGllcy5lbnRlckFuaW1hdGlvbkFjdGl2ZSB8fCBgJHtlbnRlckFuaW1hdGlvbn0tYWN0aXZlYDtcbiAgICBydW5BbmRDbGVhblVwKG5vZGUsICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGVudGVyQW5pbWF0aW9uKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChhY3RpdmVDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgIH0sICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGVudGVyQW5pbWF0aW9uKTtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGFjdGl2ZUNsYXNzKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBlbnRlcixcbiAgICBleGl0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3NzVHJhbnNpdGlvbnMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgU3ltYm9sIGZyb20gJ0Bkb2pvL3NoaW0vU3ltYm9sJztcbi8qKlxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFdOb2RlIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IFdOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFdOb2RlLicpO1xuLyoqXG4gKiBUaGUgc3ltYm9sIGlkZW50aWZpZXIgZm9yIGEgVk5vZGUgdHlwZVxuICovXG5leHBvcnQgY29uc3QgVk5PREUgPSBTeW1ib2woJ0lkZW50aWZpZXIgZm9yIGEgVk5vZGUuJyk7XG4vKipcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBWTm9kZSB0eXBlIGNyZWF0ZWQgdXNpbmcgZG9tKClcbiAqL1xuZXhwb3J0IGNvbnN0IERPTVZOT0RFID0gU3ltYm9sKCdJZGVudGlmaWVyIGZvciBhIFZOb2RlIGNyZWF0ZWQgdXNpbmcgZXhpc3RpbmcgZG9tLicpO1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgV05vZGVgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV05vZGUoY2hpbGQpIHtcbiAgICByZXR1cm4gQm9vbGVhbihjaGlsZCAmJiB0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnICYmIGNoaWxkLnR5cGUgPT09IFdOT0RFKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFZOb2RlYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZOb2RlKGNoaWxkKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiAoY2hpbGQudHlwZSA9PT0gVk5PREUgfHwgY2hpbGQudHlwZSA9PT0gRE9NVk5PREUpKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFZOb2RlYCBjcmVhdGVkIHdpdGggYGRvbSgpYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RvbVZOb2RlKGNoaWxkKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiBjaGlsZC50eXBlID09PSBET01WTk9ERSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50Tm9kZSh2YWx1ZSkge1xuICAgIHJldHVybiAhIXZhbHVlLnRhZ05hbWU7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGUoZE5vZGVzLCBvcHRpb25zT3JNb2RpZmllciwgcHJlZGljYXRlKSB7XG4gICAgbGV0IHNoYWxsb3cgPSBmYWxzZTtcbiAgICBsZXQgbW9kaWZpZXI7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JNb2RpZmllciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBtb2RpZmllciA9IG9wdGlvbnNPck1vZGlmaWVyO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbW9kaWZpZXIgPSBvcHRpb25zT3JNb2RpZmllci5tb2RpZmllcjtcbiAgICAgICAgcHJlZGljYXRlID0gb3B0aW9uc09yTW9kaWZpZXIucHJlZGljYXRlO1xuICAgICAgICBzaGFsbG93ID0gb3B0aW9uc09yTW9kaWZpZXIuc2hhbGxvdyB8fCBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG5vZGVzID0gQXJyYXkuaXNBcnJheShkTm9kZXMpID8gWy4uLmROb2Rlc10gOiBbZE5vZGVzXTtcbiAgICBmdW5jdGlvbiBicmVha2VyKCkge1xuICAgICAgICBub2RlcyA9IFtdO1xuICAgIH1cbiAgICB3aGlsZSAobm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5zaGlmdCgpO1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKCFzaGFsbG93ICYmIChpc1dOb2RlKG5vZGUpIHx8IGlzVk5vZGUobm9kZSkpICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBub2RlcyA9IFsuLi5ub2RlcywgLi4ubm9kZS5jaGlsZHJlbl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllcihub2RlLCBicmVha2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZE5vZGVzO1xufVxuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciBjYWxscyB0byBjcmVhdGUgYSB3aWRnZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3KHdpZGdldENvbnN0cnVjdG9yLCBwcm9wZXJ0aWVzLCBjaGlsZHJlbiA9IFtdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHdpZGdldENvbnN0cnVjdG9yLFxuICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICB0eXBlOiBXTk9ERVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gdih0YWcsIHByb3BlcnRpZXNPckNoaWxkcmVuID0ge30sIGNoaWxkcmVuID0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzT3JDaGlsZHJlbjtcbiAgICBsZXQgZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2s7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydGllc09yQ2hpbGRyZW4pKSB7XG4gICAgICAgIGNoaWxkcmVuID0gcHJvcGVydGllc09yQ2hpbGRyZW47XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID0gcHJvcGVydGllcztcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0YWcsXG4gICAgICAgIGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgdHlwZTogVk5PREVcbiAgICB9O1xufVxuLyoqXG4gKiBDcmVhdGUgYSBWTm9kZSBmb3IgYW4gZXhpc3RpbmcgRE9NIE5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb20oeyBub2RlLCBhdHRycyA9IHt9LCBwcm9wcyA9IHt9LCBvbiA9IHt9LCBkaWZmVHlwZSA9ICdub25lJyB9LCBjaGlsZHJlbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRhZzogaXNFbGVtZW50Tm9kZShub2RlKSA/IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpIDogJycsXG4gICAgICAgIHByb3BlcnRpZXM6IHByb3BzLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRycyxcbiAgICAgICAgZXZlbnRzOiBvbixcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHR5cGU6IERPTVZOT0RFLFxuICAgICAgICBkb21Ob2RlOiBub2RlLFxuICAgICAgICB0ZXh0OiBpc0VsZW1lbnROb2RlKG5vZGUpID8gdW5kZWZpbmVkIDogbm9kZS5kYXRhLFxuICAgICAgICBkaWZmVHlwZVxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyUmVuZGVyKG1ldGhvZCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYWZ0ZXJSZW5kZXInLCBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiBtZXRob2QpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgYWZ0ZXJSZW5kZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZnRlclJlbmRlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hZnRlclJlbmRlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmltcG9ydCB7IGJlZm9yZVByb3BlcnRpZXMgfSBmcm9tICcuL2JlZm9yZVByb3BlcnRpZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGFsd2F5c1JlbmRlcigpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIGJlZm9yZVByb3BlcnRpZXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH0pKHRhcmdldCk7XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBhbHdheXNSZW5kZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbHdheXNSZW5kZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hbHdheXNSZW5kZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmV4cG9ydCBmdW5jdGlvbiBiZWZvcmVQcm9wZXJ0aWVzKG1ldGhvZCkge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmVmb3JlUHJvcGVydGllcycsIHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IG1ldGhvZCk7XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBiZWZvcmVQcm9wZXJ0aWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmVmb3JlUHJvcGVydGllcy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9iZWZvcmVQcm9wZXJ0aWVzLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9iZWZvcmVQcm9wZXJ0aWVzLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBDdXN0b21FbGVtZW50Q2hpbGRUeXBlIH0gZnJvbSAnLi4vcmVnaXN0ZXJDdXN0b21FbGVtZW50JztcbmltcG9ydCBSZWdpc3RyeSBmcm9tICcuLi9SZWdpc3RyeSc7XG4vKipcbiAqIFRoaXMgRGVjb3JhdG9yIGlzIHByb3ZpZGVkIHByb3BlcnRpZXMgdGhhdCBkZWZpbmUgdGhlIGJlaGF2aW9yIG9mIGEgY3VzdG9tIGVsZW1lbnQsIGFuZFxuICogcmVnaXN0ZXJzIHRoYXQgY3VzdG9tIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b21FbGVtZW50KHsgdGFnLCBwcm9wZXJ0aWVzID0gW10sIGF0dHJpYnV0ZXMgPSBbXSwgZXZlbnRzID0gW10sIGNoaWxkVHlwZSA9IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUuRE9KTywgcmVnaXN0cnlGYWN0b3J5ID0gKCkgPT4gbmV3IFJlZ2lzdHJ5KCkgfSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC5wcm90b3R5cGUuX19jdXN0b21FbGVtZW50RGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgIHRhZ05hbWU6IHRhZyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgICAgZXZlbnRzLFxuICAgICAgICAgICAgY2hpbGRUeXBlLFxuICAgICAgICAgICAgcmVnaXN0cnlGYWN0b3J5XG4gICAgICAgIH07XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbUVsZW1lbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jdXN0b21FbGVtZW50Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbi8qKlxuICogRGVjb3JhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgYSBmdW5jdGlvbiBhcyBhIHNwZWNpZmljIHByb3BlcnR5IGRpZmZcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lICBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgb2Ygd2hpY2ggdGhlIGRpZmYgZnVuY3Rpb24gaXMgYXBwbGllZFxuICogQHBhcmFtIGRpZmZUeXBlICAgICAgVGhlIGRpZmYgdHlwZSwgZGVmYXVsdCBpcyBEaWZmVHlwZS5BVVRPLlxuICogQHBhcmFtIGRpZmZGdW5jdGlvbiAgQSBkaWZmIGZ1bmN0aW9uIHRvIHJ1biBpZiBkaWZmVHlwZSBpZiBEaWZmVHlwZS5DVVNUT01cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGRpZmZGdW5jdGlvbiwgcmVhY3Rpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcihgZGlmZlByb3BlcnR5OiR7cHJvcGVydHlOYW1lfWAsIGRpZmZGdW5jdGlvbi5iaW5kKG51bGwpKTtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcigncmVnaXN0ZXJlZERpZmZQcm9wZXJ0eScsIHByb3BlcnR5TmFtZSk7XG4gICAgICAgIGlmIChyZWFjdGlvbkZ1bmN0aW9uIHx8IHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdkaWZmUmVhY3Rpb24nLCB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgICAgIHJlYWN0aW9uOiBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiByZWFjdGlvbkZ1bmN0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgZGlmZlByb3BlcnR5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlmZlByb3BlcnR5Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCIvKipcbiAqIEdlbmVyaWMgZGVjb3JhdG9yIGhhbmRsZXIgdG8gdGFrZSBjYXJlIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBkZWNvcmF0b3Igd2FzIGNhbGxlZCBhdCB0aGUgY2xhc3MgbGV2ZWxcbiAqIG9yIHRoZSBtZXRob2QgbGV2ZWwuXG4gKlxuICogQHBhcmFtIGhhbmRsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRvcihoYW5kbGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBoYW5kbGVyKHRhcmdldC5wcm90b3R5cGUsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVyKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZURlY29yYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbmRsZURlY29yYXRvci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9oYW5kbGVEZWNvcmF0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IFdlYWtNYXAgZnJvbSAnQGRvam8vc2hpbS9XZWFrTWFwJztcbmltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmltcG9ydCB7IGJlZm9yZVByb3BlcnRpZXMgfSBmcm9tICcuL2JlZm9yZVByb3BlcnRpZXMnO1xuLyoqXG4gKiBNYXAgb2YgaW5zdGFuY2VzIGFnYWluc3QgcmVnaXN0ZXJlZCBpbmplY3RvcnMuXG4gKi9cbmNvbnN0IHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBEZWNvcmF0b3IgcmV0cmlldmVzIGFuIGluamVjdG9yIGZyb20gYW4gYXZhaWxhYmxlIHJlZ2lzdHJ5IHVzaW5nIHRoZSBuYW1lIGFuZFxuICogY2FsbHMgdGhlIGBnZXRQcm9wZXJ0aWVzYCBmdW5jdGlvbiB3aXRoIHRoZSBwYXlsb2FkIGZyb20gdGhlIGluamVjdG9yXG4gKiBhbmQgY3VycmVudCBwcm9wZXJ0aWVzIHdpdGggdGhlIHRoZSBpbmplY3RlZCBwcm9wZXJ0aWVzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBJbmplY3RDb25maWcgdGhlIGluamVjdCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoeyBuYW1lLCBnZXRQcm9wZXJ0aWVzIH0pIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIGJlZm9yZVByb3BlcnRpZXMoZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluamVjdG9ySXRlbSA9IHRoaXMucmVnaXN0cnkuZ2V0SW5qZWN0b3IobmFtZSk7XG4gICAgICAgICAgICBpZiAoaW5qZWN0b3JJdGVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpbmplY3RvciwgaW52YWxpZGF0b3IgfSA9IGluamVjdG9ySXRlbTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RlcmVkSW5qZWN0b3JzID0gcmVnaXN0ZXJlZEluamVjdG9yc01hcC5nZXQodGhpcykgfHwgW107XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVyZWRJbmplY3RvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAuc2V0KHRoaXMsIHJlZ2lzdGVyZWRJbmplY3RvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZEluamVjdG9ycy5pbmRleE9mKGluamVjdG9ySXRlbSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3duKGludmFsaWRhdG9yLm9uKCdpbnZhbGlkYXRlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEluamVjdG9ycy5wdXNoKGluamVjdG9ySXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzKGluamVjdG9yKCksIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSh0YXJnZXQpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgaW5qZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5qZWN0Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2luamVjdC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBXSURHRVRfQkFTRV9UWVBFIH0gZnJvbSAnLi9SZWdpc3RyeSc7XG5mdW5jdGlvbiBpc09iamVjdE9yQXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYWx3YXlzKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbmdlZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmUocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2UocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiBwcmV2aW91c1Byb3BlcnR5ICE9PSBuZXdQcm9wZXJ0eSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93KHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBjb25zdCB2YWxpZE9sZFByb3BlcnR5ID0gcHJldmlvdXNQcm9wZXJ0eSAmJiBpc09iamVjdE9yQXJyYXkocHJldmlvdXNQcm9wZXJ0eSk7XG4gICAgY29uc3QgdmFsaWROZXdQcm9wZXJ0eSA9IG5ld1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShuZXdQcm9wZXJ0eSk7XG4gICAgaWYgKCF2YWxpZE9sZFByb3BlcnR5IHx8ICF2YWxpZE5ld1Byb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjaGFuZ2VkOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzS2V5cyA9IE9iamVjdC5rZXlzKHByZXZpb3VzUHJvcGVydHkpO1xuICAgIGNvbnN0IG5ld0tleXMgPSBPYmplY3Qua2V5cyhuZXdQcm9wZXJ0eSk7XG4gICAgaWYgKHByZXZpb3VzS2V5cy5sZW5ndGggIT09IG5ld0tleXMubGVuZ3RoKSB7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY2hhbmdlZCA9IG5ld0tleXMuc29tZSgoa2V5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3UHJvcGVydHlba2V5XSAhPT0gcHJldmlvdXNQcm9wZXJ0eVtrZXldO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbmdlZCxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhdXRvKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodHlwZW9mIG5ld1Byb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChuZXdQcm9wZXJ0eS5fdHlwZSA9PT0gV0lER0VUX0JBU0VfVFlQRSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGlnbm9yZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3RPckFycmF5KG5ld1Byb3BlcnR5KSkge1xuICAgICAgICByZXN1bHQgPSBzaGFsbG93KHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaWZmLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kaWZmLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGlmZi5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ0Bkb2pvL2NvcmUvbGFuZyc7XG5pbXBvcnQgY3NzVHJhbnNpdGlvbnMgZnJvbSAnLi4vYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucyc7XG5pbXBvcnQgeyBhZnRlclJlbmRlciB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9hZnRlclJlbmRlcic7XG5pbXBvcnQgeyB2IH0gZnJvbSAnLi8uLi9kJztcbmltcG9ydCB7IGRvbSB9IGZyb20gJy4vLi4vdmRvbSc7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGF0dGFjaCBzdGF0ZSBvZiB0aGUgcHJvamVjdG9yXG4gKi9cbmV4cG9ydCB2YXIgUHJvamVjdG9yQXR0YWNoU3RhdGU7XG4oZnVuY3Rpb24gKFByb2plY3RvckF0dGFjaFN0YXRlKSB7XG4gICAgUHJvamVjdG9yQXR0YWNoU3RhdGVbUHJvamVjdG9yQXR0YWNoU3RhdGVbXCJBdHRhY2hlZFwiXSA9IDFdID0gXCJBdHRhY2hlZFwiO1xuICAgIFByb2plY3RvckF0dGFjaFN0YXRlW1Byb2plY3RvckF0dGFjaFN0YXRlW1wiRGV0YWNoZWRcIl0gPSAyXSA9IFwiRGV0YWNoZWRcIjtcbn0pKFByb2plY3RvckF0dGFjaFN0YXRlIHx8IChQcm9qZWN0b3JBdHRhY2hTdGF0ZSA9IHt9KSk7XG4vKipcbiAqIEF0dGFjaCB0eXBlIGZvciB0aGUgcHJvamVjdG9yXG4gKi9cbmV4cG9ydCB2YXIgQXR0YWNoVHlwZTtcbihmdW5jdGlvbiAoQXR0YWNoVHlwZSkge1xuICAgIEF0dGFjaFR5cGVbQXR0YWNoVHlwZVtcIkFwcGVuZFwiXSA9IDFdID0gXCJBcHBlbmRcIjtcbiAgICBBdHRhY2hUeXBlW0F0dGFjaFR5cGVbXCJNZXJnZVwiXSA9IDJdID0gXCJNZXJnZVwiO1xufSkoQXR0YWNoVHlwZSB8fCAoQXR0YWNoVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdG9yTWl4aW4oQmFzZSkge1xuICAgIGNsYXNzIFByb2plY3RvciBleHRlbmRzIEJhc2Uge1xuICAgICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgdGhpcy5fYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnM6IGNzc1RyYW5zaXRpb25zXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdG9yU3RhdGUgPSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5EZXRhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBhcHBlbmQocm9vdCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBBdHRhY2hUeXBlLkFwcGVuZCxcbiAgICAgICAgICAgICAgICByb290XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBtZXJnZShyb290KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IEF0dGFjaFR5cGUuTWVyZ2UsXG4gICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2gob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHJvb3Qocm9vdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNoYW5nZSByb290IGVsZW1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSByb290O1xuICAgICAgICB9XG4gICAgICAgIGdldCByb290KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGFzeW5jKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FzeW5jO1xuICAgICAgICB9XG4gICAgICAgIHNldCBhc3luYyhhc3luYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNoYW5nZSBhc3luYyBtb2RlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9hc3luYyA9IGFzeW5jO1xuICAgICAgICB9XG4gICAgICAgIHNhbmRib3goZG9jID0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjcmVhdGUgc2FuZGJveCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUm9vdCA9IHRoaXMucm9vdDtcbiAgICAgICAgICAgIC8qIGZyZWUgdXAgdGhlIGRvY3VtZW50IGZyYWdtZW50IGZvciBHQyAqL1xuICAgICAgICAgICAgdGhpcy5vd24oe1xuICAgICAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHByZXZpb3VzUm9vdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaCh7XG4gICAgICAgICAgICAgICAgLyogRG9jdW1lbnRGcmFnbWVudCBpcyBub3QgYXNzaWduYWJsZSB0byBFbGVtZW50LCBidXQgcHJvdmlkZXMgZXZlcnl0aGluZyBuZWVkZWQgdG8gd29yayAqL1xuICAgICAgICAgICAgICAgIHJvb3Q6IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG4gICAgICAgICAgICAgICAgdHlwZTogQXR0YWNoVHlwZS5BcHBlbmRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICB0aGlzLl9fc2V0Q2hpbGRyZW5fXyhjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIF9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzICYmIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkgIT09IHByb3BlcnRpZXMucmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdG9yUHJvcGVydGllcy5yZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzID0gYXNzaWduKHt9LCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHN1cGVyLl9fc2V0Q29yZVByb3BlcnRpZXNfXyh7IGJpbmQ6IHRoaXMsIGJhc2VSZWdpc3RyeTogcHJvcGVydGllcy5yZWdpc3RyeSB9KTtcbiAgICAgICAgICAgIHN1cGVyLl9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRvSHRtbCgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlICE9PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCB8fCAhdGhpcy5fcHJvamVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGlzIG5vdCBhdHRhY2hlZCwgY2Fubm90IHJldHVybiBhbiBIVE1MIHN0cmluZyBvZiBwcm9qZWN0aW9uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb24uZG9tTm9kZS5jaGlsZE5vZGVzWzBdLm91dGVySFRNTDtcbiAgICAgICAgfVxuICAgICAgICBhZnRlclJlbmRlcihyZXN1bHQpIHtcbiAgICAgICAgICAgIGxldCBub2RlID0gcmVzdWx0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnIHx8IHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSB2KCdzcGFuJywge30sIFtyZXN1bHRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgX2F0dGFjaCh7IHR5cGUsIHJvb3QgfSkge1xuICAgICAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3QgPSByb290O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2F0dGFjaEhhbmRsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hIYW5kbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQ7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSB7XG4gICAgICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuRGV0YWNoZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vd24oaGFuZGxlKTtcbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaEhhbmRsZSA9IGhhbmRsZTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMsIHsgc3luYzogIXRoaXMuX2FzeW5jIH0pO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBdHRhY2hUeXBlLkFwcGVuZDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbiA9IGRvbS5hcHBlbmQodGhpcy5yb290LCB0aGlzLCB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQXR0YWNoVHlwZS5NZXJnZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbiA9IGRvbS5tZXJnZSh0aGlzLnJvb3QsIHRoaXMsIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoSGFuZGxlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGFmdGVyUmVuZGVyKCksXG4gICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICAgICAgdHNsaWJfMS5fX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pLFxuICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCB2b2lkIDApXG4gICAgXSwgUHJvamVjdG9yLnByb3RvdHlwZSwgXCJhZnRlclJlbmRlclwiLCBudWxsKTtcbiAgICByZXR1cm4gUHJvamVjdG9yO1xufVxuZXhwb3J0IGRlZmF1bHQgUHJvamVjdG9yTWl4aW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Qcm9qZWN0b3IubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL21peGlucy9Qcm9qZWN0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9taXhpbnMvUHJvamVjdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICcuLy4uL0luamVjdG9yJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9pbmplY3QnO1xuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi8uLi9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBkaWZmUHJvcGVydHkgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5JztcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICcuLy4uL2RpZmYnO1xuY29uc3QgVEhFTUVfS0VZID0gJyBfa2V5JztcbmV4cG9ydCBjb25zdCBJTkpFQ1RFRF9USEVNRV9LRVkgPSBTeW1ib2woJ3RoZW1lJyk7XG4vKipcbiAqIERlY29yYXRvciBmb3IgYmFzZSBjc3MgY2xhc3Nlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWUodGhlbWUpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycsIHRoZW1lKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHJldmVyc2UgbG9va3VwIGZvciB0aGUgY2xhc3NlcyBwYXNzZWQgaW4gdmlhIHRoZSBgdGhlbWVgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBjbGFzc2VzIFRoZSBiYXNlQ2xhc3NlcyBvYmplY3RcbiAqIEByZXF1aXJlc1xuICovXG5mdW5jdGlvbiBjcmVhdGVUaGVtZUNsYXNzZXNMb29rdXAoY2xhc3Nlcykge1xuICAgIHJldHVybiBjbGFzc2VzLnJlZHVjZSgoY3VycmVudENsYXNzTmFtZXMsIGJhc2VDbGFzcykgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhiYXNlQ2xhc3MpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY3VycmVudENsYXNzTmFtZXNbYmFzZUNsYXNzW2tleV1dID0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDbGFzc05hbWVzO1xuICAgIH0sIHt9KTtcbn1cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBpcyBnaXZlbiBhIHRoZW1lIGFuZCBhbiBvcHRpb25hbCByZWdpc3RyeSwgdGhlIHRoZW1lXG4gKiBpbmplY3RvciBpcyBkZWZpbmVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIHRoZW1lLlxuICpcbiAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gc2V0XG4gKiBAcGFyYW0gdGhlbWVSZWdpc3RyeSByZWdpc3RyeSB0byBkZWZpbmUgdGhlIHRoZW1lIGluamVjdG9yIGFnYWluc3QuIERlZmF1bHRzXG4gKiB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XG4gKlxuICogQHJldHVybnMgdGhlIHRoZW1lIGluamVjdG9yIHVzZWQgdG8gc2V0IHRoZSB0aGVtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoZW1lLCB0aGVtZVJlZ2lzdHJ5KSB7XG4gICAgY29uc3QgdGhlbWVJbmplY3RvciA9IG5ldyBJbmplY3Rvcih0aGVtZSk7XG4gICAgdGhlbWVSZWdpc3RyeS5kZWZpbmVJbmplY3RvcihJTkpFQ1RFRF9USEVNRV9LRVksIChpbnZhbGlkYXRvcikgPT4ge1xuICAgICAgICB0aGVtZUluamVjdG9yLnNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHRoZW1lSW5qZWN0b3IuZ2V0KCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoZW1lSW5qZWN0b3I7XG59XG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYXNzIGRlY29yYXRlZCB3aXRoIHdpdGggVGhlbWVkIGZ1bmN0aW9uYWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lZE1peGluKEJhc2UpIHtcbiAgICBsZXQgVGhlbWVkID0gY2xhc3MgVGhlbWVkIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVnaXN0ZXJlZCBiYXNlIHRoZW1lIGtleXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZUtleXMgPSBbXTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW5kaWNhdGVzIGlmIGNsYXNzZXMgbWV0YSBkYXRhIG5lZWQgdG8gYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTG9hZGVkIHRoZW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX3RoZW1lID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhlbWUoY2xhc3Nlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlY2FsY3VsYXRlQ2xhc3Nlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlY2FsY3VsYXRlVGhlbWVDbGFzc2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLm1hcCgoY2xhc3NOYW1lKSA9PiB0aGlzLl9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRoZW1lQ2xhc3MoY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9uIGZpcmVkIHdoZW4gYHRoZW1lYCBvciBgZXh0cmFDbGFzc2VzYCBhcmUgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIG9uUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkIHx8IGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHRyYUNsYXNzZXMgPSB0aGlzLnByb3BlcnRpZXMuZXh0cmFDbGFzc2VzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDbGFzc05hbWUgPSB0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cFtjbGFzc05hbWVdO1xuICAgICAgICAgICAgbGV0IHJlc3VsdENsYXNzTmFtZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhlbWVDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENsYXNzIG5hbWU6ICcke2NsYXNzTmFtZX0nIG5vdCBmb3VuZCBpbiB0aGVtZWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2goZXh0cmFDbGFzc2VzW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2xhc3NOYW1lcy5wdXNoKHRoaXMuX3RoZW1lW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2godGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZVt0aGVtZUNsYXNzTmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdENsYXNzTmFtZXMuam9pbignICcpO1xuICAgICAgICB9XG4gICAgICAgIF9yZWNhbGN1bGF0ZVRoZW1lQ2xhc3NlcygpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdGhlbWUgPSB7fSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgYmFzZVRoZW1lcyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiYXNlVGhlbWVDbGFzc2VzJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lID0gYmFzZVRoZW1lcy5yZWR1Y2UoKGZpbmFsQmFzZVRoZW1lLCBiYXNlVGhlbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2EgPSBUSEVNRV9LRVksIGtleSA9IGJhc2VUaGVtZVtfYV0sIGNsYXNzZXMgPSB0c2xpYl8xLl9fcmVzdChiYXNlVGhlbWUsIFt0eXBlb2YgX2EgPT09IFwic3ltYm9sXCIgPyBfYSA6IF9hICsgXCJcIl0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaW5hbEJhc2VUaGVtZSwgY2xhc3Nlcyk7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2VUaGVtZUNsYXNzZXNSZXZlcnNlTG9va3VwID0gY3JlYXRlVGhlbWVDbGFzc2VzTG9va3VwKGJhc2VUaGVtZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5yZWR1Y2UoKGJhc2VUaGVtZSwgdGhlbWVLZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVRoZW1lLCB0aGVtZVt0aGVtZUtleV0pO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGRpZmZQcm9wZXJ0eSgndGhlbWUnLCBzaGFsbG93KSxcbiAgICAgICAgZGlmZlByb3BlcnR5KCdleHRyYUNsYXNzZXMnLCBzaGFsbG93KSxcbiAgICAgICAgdHNsaWJfMS5fX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxuICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSksXG4gICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIHZvaWQgMClcbiAgICBdLCBUaGVtZWQucHJvdG90eXBlLCBcIm9uUHJvcGVydGllc0NoYW5nZWRcIiwgbnVsbCk7XG4gICAgVGhlbWVkID0gdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAgICAgICAgaW5qZWN0KHtcbiAgICAgICAgICAgIG5hbWU6IElOSkVDVEVEX1RIRU1FX0tFWSxcbiAgICAgICAgICAgIGdldFByb3BlcnRpZXM6ICh0aGVtZSwgcHJvcGVydGllcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydGllcy50aGVtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB0aGVtZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSwgVGhlbWVkKTtcbiAgICByZXR1cm4gVGhlbWVkO1xufVxuZXhwb3J0IGRlZmF1bHQgVGhlbWVkTWl4aW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UaGVtZWQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgV2lkZ2V0QmFzZSwgbm9CaW5kIH0gZnJvbSAnLi9XaWRnZXRCYXNlJztcbmltcG9ydCB7IFByb2plY3Rvck1peGluIH0gZnJvbSAnLi9taXhpbnMvUHJvamVjdG9yJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICdAZG9qby9zaGltL2FycmF5JztcbmltcG9ydCB7IHcsIGRvbSB9IGZyb20gJy4vZCc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJ0Bkb2pvL3NoaW0vZ2xvYmFsJztcbmltcG9ydCB7IHJlZ2lzdGVyVGhlbWVJbmplY3RvciB9IGZyb20gJy4vbWl4aW5zL1RoZW1lZCc7XG5pbXBvcnQgeyBhbHdheXNSZW5kZXIgfSBmcm9tICcuL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyJztcbmV4cG9ydCB2YXIgQ3VzdG9tRWxlbWVudENoaWxkVHlwZTtcbihmdW5jdGlvbiAoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSkge1xuICAgIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGVbXCJET0pPXCJdID0gXCJET0pPXCI7XG4gICAgQ3VzdG9tRWxlbWVudENoaWxkVHlwZVtcIk5PREVcIl0gPSBcIk5PREVcIjtcbiAgICBDdXN0b21FbGVtZW50Q2hpbGRUeXBlW1wiVEVYVFwiXSA9IFwiVEVYVFwiO1xufSkoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSB8fCAoQ3VzdG9tRWxlbWVudENoaWxkVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gRG9tVG9XaWRnZXRXcmFwcGVyKGRvbU5vZGUpIHtcbiAgICBsZXQgRG9tVG9XaWRnZXRXcmFwcGVyID0gY2xhc3MgRG9tVG9XaWRnZXRXcmFwcGVyIGV4dGVuZHMgV2lkZ2V0QmFzZSB7XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpLnJlZHVjZSgocHJvcHMsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKCdvbicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGBfXyR7a2V5fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb3BzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICByZXR1cm4gZG9tKHsgbm9kZTogZG9tTm9kZSwgcHJvcHM6IHByb3BlcnRpZXMsIGRpZmZUeXBlOiAnZG9tJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZ2V0IGRvbU5vZGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9tTm9kZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRG9tVG9XaWRnZXRXcmFwcGVyID0gdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAgICAgICAgYWx3YXlzUmVuZGVyKClcbiAgICBdLCBEb21Ub1dpZGdldFdyYXBwZXIpO1xuICAgIHJldHVybiBEb21Ub1dpZGdldFdyYXBwZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKGRlc2NyaXB0b3IsIFdpZGdldENvbnN0cnVjdG9yKSB7XG4gICAgY29uc3QgeyBhdHRyaWJ1dGVzLCBjaGlsZFR5cGUsIHJlZ2lzdHJ5RmFjdG9yeSB9ID0gZGVzY3JpcHRvcjtcbiAgICBjb25zdCBhdHRyaWJ1dGVNYXAgPSB7fTtcbiAgICBhdHRyaWJ1dGVzLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGF0dHJpYnV0ZU1hcFthdHRyaWJ1dGVOYW1lXSA9IHByb3BlcnR5TmFtZTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuID0gW107XG4gICAgICAgICAgICB0aGlzLl9ldmVudFByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faW5pdGlhbGlzZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkb21Qcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICBjb25zdCB7IGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMsIGV2ZW50cyB9ID0gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wcm9wZXJ0aWVzLCB0aGlzLl9hdHRyaWJ1dGVzVG9Qcm9wZXJ0aWVzKGF0dHJpYnV0ZXMpKTtcbiAgICAgICAgICAgIFsuLi5hdHRyaWJ1dGVzLCAuLi5wcm9wZXJ0aWVzXS5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnX18nKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUHJvcGVydHlOYW1lICE9PSBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1tmaWx0ZXJlZFByb3BlcnR5TmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4gdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNldDogKHZhbHVlKSA9PiB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV2ZW50cy5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJ19fb24nKTtcbiAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW2ZpbHRlcmVkUHJvcGVydHlOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9nZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNldDogKHZhbHVlKSA9PiB0aGlzLl9zZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudENhbGxiYWNrID0gdGhpcy5fZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50Q2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Q2FsbGJhY2soLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBhcmdzXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCBkb21Qcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLlRFWFQgPyB0aGlzLmNoaWxkTm9kZXMgOiB0aGlzLmNoaWxkcmVuO1xuICAgICAgICAgICAgZnJvbShjaGlsZHJlbikuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLXJlbmRlcicsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtY29ubmVjdGVkJywgKCkgPT4gdGhpcy5fcmVuZGVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihjaGlsZE5vZGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goZG9tKHsgbm9kZTogY2hpbGROb2RlLCBkaWZmVHlwZTogJ2RvbScgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLWNvbm5lY3RlZCcsIChlKSA9PiB0aGlzLl9jaGlsZENvbm5lY3RlZChlKSk7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRQcm9wZXJ0aWVzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckNoaWxkcmVuID0gKCkgPT4gdGhpcy5fX2NoaWxkcmVuX18oKTtcbiAgICAgICAgICAgIGNvbnN0IFdyYXBwZXIgPSBjbGFzcyBleHRlbmRzIFdpZGdldEJhc2Uge1xuICAgICAgICAgICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHcoV2lkZ2V0Q29uc3RydWN0b3IsIHdpZGdldFByb3BlcnRpZXMsIHJlbmRlckNoaWxkcmVuKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IHJlZ2lzdHJ5RmFjdG9yeSgpO1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDb250ZXh0ID0gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoaXMuX2dldFRoZW1lKCksIHJlZ2lzdHJ5KTtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdkb2pvLXRoZW1lLXNldCcsICgpID0+IHRoZW1lQ29udGV4dC5zZXQodGhpcy5fZ2V0VGhlbWUoKSkpO1xuICAgICAgICAgICAgY29uc3QgUHJvamVjdG9yID0gUHJvamVjdG9yTWl4aW4oV3JhcHBlcik7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3IgPSBuZXcgUHJvamVjdG9yKCk7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3Iuc2V0UHJvcGVydGllcyh7IHJlZ2lzdHJ5IH0pO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yLmFwcGVuZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rvam8tY2UtY29ubmVjdGVkJywge1xuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgX2dldFRoZW1lKCkge1xuICAgICAgICAgICAgaWYgKGdsb2JhbCAmJiBnbG9iYWwuZG9qb2NlICYmIGdsb2JhbC5kb2pvY2UudGhlbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsLmRvam9jZS50aGVtZXNbZ2xvYmFsLmRvam9jZS50aGVtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2NoaWxkQ29ubmVjdGVkKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBlLmRldGFpbDtcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudE5vZGUgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLl9jaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gY2hpbGQuZG9tTm9kZSA9PT0gbm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLXJlbmRlcicsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChEb21Ub1dpZGdldFdyYXBwZXIobm9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3JlbmRlcigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3IuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rvam8tY2UtcmVuZGVyJywge1xuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9fcHJvcGVydGllc19fKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Byb3BlcnRpZXMsIHRoaXMuX2V2ZW50UHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgX19jaGlsZHJlbl9fKCkge1xuICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuLmZpbHRlcigoQ2hpbGQpID0+IENoaWxkLmRvbU5vZGUuaXNXaWRnZXQpLm1hcCgoQ2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkb21Ob2RlIH0gPSBDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHcoQ2hpbGQsIE9iamVjdC5hc3NpZ24oe30sIGRvbU5vZGUuX19wcm9wZXJ0aWVzX18oKSksIFsuLi5kb21Ob2RlLl9fY2hpbGRyZW5fXygpXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZFZhbHVlLCB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gYXR0cmlidXRlTWFwW25hbWVdO1xuICAgICAgICAgICAgdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgX3NldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBfc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHZhbHVlW25vQmluZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIF9hdHRyaWJ1dGVzVG9Qcm9wZXJ0aWVzKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlZHVjZSgocHJvcGVydGllcywgcHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYXApO1xuICAgICAgICB9XG4gICAgICAgIGdldCBpc1dpZGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcihXaWRnZXRDb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBXaWRnZXRDb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgV2lkZ2V0Q29uc3RydWN0b3IucHJvdG90eXBlLl9fY3VzdG9tRWxlbWVudERlc2NyaXB0b3I7XG4gICAgaWYgKCFkZXNjcmlwdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBkZXNjcmlwdG9yIGZvciBDdXN0b20gRWxlbWVudCwgaGF2ZSB5b3UgYWRkZWQgdGhlIEBjdXN0b21FbGVtZW50IGRlY29yYXRvciB0byB5b3VyIFdpZGdldD8nKTtcbiAgICB9XG4gICAgZ2xvYmFsLmN1c3RvbUVsZW1lbnRzLmRlZmluZShkZXNjcmlwdG9yLnRhZ05hbWUsIGNyZWF0ZShkZXNjcmlwdG9yLCBXaWRnZXRDb25zdHJ1Y3RvcikpO1xufVxuZXhwb3J0IGRlZmF1bHQgcmVnaXN0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdpc3RlckN1c3RvbUVsZW1lbnQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGdsb2JhbCBmcm9tICdAZG9qby9zaGltL2dsb2JhbCc7XHJcbmltcG9ydCB7IGZyb20gYXMgYXJyYXlGcm9tIH0gZnJvbSAnQGRvam8vc2hpbS9hcnJheSc7XHJcbmltcG9ydCB7IGlzV05vZGUsIGlzVk5vZGUsIGlzRG9tVk5vZGUsIFZOT0RFLCBXTk9ERSB9IGZyb20gJy4vZCc7XHJcbmltcG9ydCB7IGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yIH0gZnJvbSAnLi9SZWdpc3RyeSc7XHJcbmltcG9ydCBXZWFrTWFwIGZyb20gJ0Bkb2pvL3NoaW0vV2Vha01hcCc7XHJcbmNvbnN0IE5BTUVTUEFDRV9XMyA9ICdodHRwOi8vd3d3LnczLm9yZy8nO1xyXG5jb25zdCBOQU1FU1BBQ0VfU1ZHID0gTkFNRVNQQUNFX1czICsgJzIwMDAvc3ZnJztcclxuY29uc3QgTkFNRVNQQUNFX1hMSU5LID0gTkFNRVNQQUNFX1czICsgJzE5OTkveGxpbmsnO1xyXG5jb25zdCBlbXB0eUFycmF5ID0gW107XHJcbmV4cG9ydCBjb25zdCB3aWRnZXRJbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwKCk7XHJcbmNvbnN0IGluc3RhbmNlTWFwID0gbmV3IFdlYWtNYXAoKTtcclxuY29uc3QgcHJvamVjdG9yU3RhdGVNYXAgPSBuZXcgV2Vha01hcCgpO1xyXG5mdW5jdGlvbiBzYW1lKGRub2RlMSwgZG5vZGUyKSB7XHJcbiAgICBpZiAoaXNWTm9kZShkbm9kZTEpICYmIGlzVk5vZGUoZG5vZGUyKSkge1xyXG4gICAgICAgIGlmIChpc0RvbVZOb2RlKGRub2RlMSkgfHwgaXNEb21WTm9kZShkbm9kZTIpKSB7XHJcbiAgICAgICAgICAgIGlmIChkbm9kZTEuZG9tTm9kZSAhPT0gZG5vZGUyLmRvbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZG5vZGUxLnRhZyAhPT0gZG5vZGUyLnRhZykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkbm9kZTEucHJvcGVydGllcy5rZXkgIT09IGRub2RlMi5wcm9wZXJ0aWVzLmtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNXTm9kZShkbm9kZTEpICYmIGlzV05vZGUoZG5vZGUyKSkge1xyXG4gICAgICAgIGlmIChkbm9kZTEuaW5zdGFuY2UgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZG5vZGUyLndpZGdldENvbnN0cnVjdG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkbm9kZTEud2lkZ2V0Q29uc3RydWN0b3IgIT09IGRub2RlMi53aWRnZXRDb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkbm9kZTEucHJvcGVydGllcy5rZXkgIT09IGRub2RlMi5wcm9wZXJ0aWVzLmtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmNvbnN0IG1pc3NpbmdUcmFuc2l0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlIGEgdHJhbnNpdGlvbnMgb2JqZWN0IHRvIHRoZSBwcm9qZWN0aW9uT3B0aW9ucyB0byBkbyBhbmltYXRpb25zJyk7XHJcbn07XHJcbmZ1bmN0aW9uIGdldFByb2plY3Rpb25PcHRpb25zKHByb2plY3Rvck9wdGlvbnMsIHByb2plY3Rvckluc3RhbmNlKSB7XHJcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcclxuICAgICAgICBuYW1lc3BhY2U6IHVuZGVmaW5lZCxcclxuICAgICAgICBzdHlsZUFwcGx5ZXI6IGZ1bmN0aW9uIChkb21Ob2RlLCBzdHlsZU5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUuc3R5bGVbc3R5bGVOYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHJhbnNpdGlvbnM6IHtcclxuICAgICAgICAgICAgZW50ZXI6IG1pc3NpbmdUcmFuc2l0aW9uLFxyXG4gICAgICAgICAgICBleGl0OiBtaXNzaW5nVHJhbnNpdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVwdGg6IDAsXHJcbiAgICAgICAgbWVyZ2U6IGZhbHNlLFxyXG4gICAgICAgIHN5bmM6IGZhbHNlLFxyXG4gICAgICAgIHByb2plY3Rvckluc3RhbmNlXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLCBwcm9qZWN0b3JPcHRpb25zKTtcclxufVxyXG5mdW5jdGlvbiBjaGVja1N0eWxlVmFsdWUoc3R5bGVWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBzdHlsZVZhbHVlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU3R5bGUgdmFsdWVzIG11c3QgYmUgc3RyaW5ncycpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50TmFtZSwgY3VycmVudFZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucywgYmluZCwgcHJldmlvdXNWYWx1ZSkge1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgY29uc3QgZXZlbnRNYXAgPSBwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLmdldChkb21Ob2RlKSB8fCBuZXcgV2Vha01hcCgpO1xyXG4gICAgaWYgKHByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0V2ZW50ID0gZXZlbnRNYXAuZ2V0KHByZXZpb3VzVmFsdWUpO1xyXG4gICAgICAgIGRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHByZXZpb3VzRXZlbnQpO1xyXG4gICAgfVxyXG4gICAgbGV0IGNhbGxiYWNrID0gY3VycmVudFZhbHVlLmJpbmQoYmluZCk7XHJcbiAgICBpZiAoZXZlbnROYW1lID09PSAnaW5wdXQnKSB7XHJcbiAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXZ0KSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5jYWxsKHRoaXMsIGV2dCk7XHJcbiAgICAgICAgICAgIGV2dC50YXJnZXRbJ29uaW5wdXQtdmFsdWUnXSA9IGV2dC50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgfS5iaW5kKGJpbmQpO1xyXG4gICAgfVxyXG4gICAgZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xyXG4gICAgZXZlbnRNYXAuc2V0KGN1cnJlbnRWYWx1ZSwgY2FsbGJhY2spO1xyXG4gICAgcHJvamVjdG9yU3RhdGUubm9kZU1hcC5zZXQoZG9tTm9kZSwgZXZlbnRNYXApO1xyXG59XHJcbmZ1bmN0aW9uIGFkZENsYXNzZXMoZG9tTm9kZSwgY2xhc3Nlcykge1xyXG4gICAgaWYgKGNsYXNzZXMpIHtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gY2xhc3Nlcy5zcGxpdCgnICcpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBkb21Ob2RlLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgY2xhc3Nlcykge1xyXG4gICAgaWYgKGNsYXNzZXMpIHtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gY2xhc3Nlcy5zcGxpdCgnICcpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBkb21Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGJ1aWxkUHJldmlvdXNQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzLCBjdXJyZW50KSB7XHJcbiAgICBjb25zdCB7IGRpZmZUeXBlLCBwcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzIH0gPSBjdXJyZW50O1xyXG4gICAgaWYgKCFkaWZmVHlwZSB8fCBkaWZmVHlwZSA9PT0gJ3Zkb20nKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgcHJvcGVydGllczogcHJldmlvdXMucHJvcGVydGllcywgYXR0cmlidXRlczogcHJldmlvdXMuYXR0cmlidXRlcywgZXZlbnRzOiBwcmV2aW91cy5ldmVudHMgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGRpZmZUeXBlID09PSAnbm9uZScpIHtcclxuICAgICAgICByZXR1cm4geyBwcm9wZXJ0aWVzOiB7fSwgYXR0cmlidXRlczogcHJldmlvdXMuYXR0cmlidXRlcyA/IHt9IDogdW5kZWZpbmVkLCBldmVudHM6IHByZXZpb3VzLmV2ZW50cyB9O1xyXG4gICAgfVxyXG4gICAgbGV0IG5ld1Byb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgcHJvcGVydGllczoge31cclxuICAgIH07XHJcbiAgICBpZiAoYXR0cmlidXRlcykge1xyXG4gICAgICAgIG5ld1Byb3BlcnRpZXMuYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIG5ld1Byb3BlcnRpZXMuZXZlbnRzID0gcHJldmlvdXMuZXZlbnRzO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMucHJvcGVydGllc1twcm9wTmFtZV0gPSBkb21Ob2RlW3Byb3BOYW1lXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChhdHRyTmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLmF0dHJpYnV0ZXNbYXR0ck5hbWVdID0gZG9tTm9kZS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBuZXdQcm9wZXJ0aWVzO1xyXG4gICAgfVxyXG4gICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykucmVkdWNlKChwcm9wcywgcHJvcGVydHkpID0+IHtcclxuICAgICAgICBwcm9wc1twcm9wZXJ0eV0gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZShwcm9wZXJ0eSkgfHwgZG9tTm9kZVtwcm9wZXJ0eV07XHJcbiAgICAgICAgcmV0dXJuIHByb3BzO1xyXG4gICAgfSwge30pO1xyXG4gICAgcmV0dXJuIG5ld1Byb3BlcnRpZXM7XHJcbn1cclxuZnVuY3Rpb24gZm9jdXNOb2RlKHByb3BWYWx1ZSwgcHJldmlvdXNWYWx1ZSwgZG9tTm9kZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJlc3VsdCA9IHByb3BWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcHJvcFZhbHVlICYmICFwcmV2aW91c1ZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcclxuICAgICAgICAgICAgZG9tTm9kZS5mb2N1cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIG9ubHlFdmVudHMgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgY29uc3QgZXZlbnRNYXAgPSBwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLmdldChkb21Ob2RlKTtcclxuICAgIGlmIChldmVudE1hcCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHByZXZpb3VzUHJvcGVydGllcykuZm9yRWFjaCgocHJvcE5hbWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNFdmVudCA9IHByb3BOYW1lLnN1YnN0cigwLCAyKSA9PT0gJ29uJyB8fCBvbmx5RXZlbnRzO1xyXG4gICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBvbmx5RXZlbnRzID8gcHJvcE5hbWUgOiBwcm9wTmFtZS5zdWJzdHIoMik7XHJcbiAgICAgICAgICAgIGlmIChpc0V2ZW50ICYmICFwcm9wZXJ0aWVzW3Byb3BOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRDYWxsYmFjayA9IGV2ZW50TWFwLmdldChwcmV2aW91c1Byb3BlcnRpZXNbcHJvcE5hbWVdKTtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGUoZG9tTm9kZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UgPT09IE5BTUVTUEFDRV9TVkcgJiYgYXR0ck5hbWUgPT09ICdocmVmJykge1xyXG4gICAgICAgIGRvbU5vZGUuc2V0QXR0cmlidXRlTlMoTkFNRVNQQUNFX1hMSU5LLCBhdHRyTmFtZSwgYXR0clZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKChhdHRyTmFtZSA9PT0gJ3JvbGUnICYmIGF0dHJWYWx1ZSA9PT0gJycpIHx8IGF0dHJWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZG9tTm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZG9tTm9kZS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlcyhkb21Ob2RlLCBwcmV2aW91c0F0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBjb25zdCBhdHRyTmFtZXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKTtcclxuICAgIGNvbnN0IGF0dHJDb3VudCA9IGF0dHJOYW1lcy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyTmFtZXNbaV07XHJcbiAgICAgICAgY29uc3QgYXR0clZhbHVlID0gYXR0cmlidXRlc1thdHRyTmFtZV07XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNBdHRyVmFsdWUgPSBwcmV2aW91c0F0dHJpYnV0ZXNbYXR0ck5hbWVdO1xyXG4gICAgICAgIGlmIChhdHRyVmFsdWUgIT09IHByZXZpb3VzQXR0clZhbHVlKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZShkb21Ob2RlLCBhdHRyTmFtZSwgYXR0clZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzID0gdHJ1ZSkge1xyXG4gICAgbGV0IHByb3BlcnRpZXNVcGRhdGVkID0gZmFsc2U7XHJcbiAgICBjb25zdCBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcclxuICAgIGNvbnN0IHByb3BDb3VudCA9IHByb3BOYW1lcy5sZW5ndGg7XHJcbiAgICBpZiAocHJvcE5hbWVzLmluZGV4T2YoJ2NsYXNzZXMnKSA9PT0gLTEgJiYgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3NlcykpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcyAmJiByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMsIHByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcENvdW50OyBpKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHByb3BOYW1lc1tpXTtcclxuICAgICAgICBsZXQgcHJvcFZhbHVlID0gcHJvcGVydGllc1twcm9wTmFtZV07XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzUHJvcGVydGllc1twcm9wTmFtZV07XHJcbiAgICAgICAgaWYgKHByb3BOYW1lID09PSAnY2xhc3NlcycpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNDbGFzc2VzID0gQXJyYXkuaXNBcnJheShwcmV2aW91c1ZhbHVlKSA/IHByZXZpb3VzVmFsdWUgOiBbcHJldmlvdXNWYWx1ZV07XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDbGFzc2VzID0gQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpID8gcHJvcFZhbHVlIDogW3Byb3BWYWx1ZV07XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0NsYXNzZXMgJiYgcHJldmlvdXNDbGFzc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICghcHJvcFZhbHVlIHx8IHByb3BWYWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzQ2xhc3Nlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3NlcyA9IFsuLi5jdXJyZW50Q2xhc3Nlc107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2aW91c0NsYXNzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNDbGFzc05hbWUgPSBwcmV2aW91c0NsYXNzZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0NsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xhc3NJbmRleCA9IG5ld0NsYXNzZXMuaW5kZXhPZihwcmV2aW91c0NsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzQ2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NsYXNzZXMuc3BsaWNlKGNsYXNzSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3Q2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRDbGFzc2VzKGRvbU5vZGUsIG5ld0NsYXNzZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudENsYXNzZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzc2VzKGRvbU5vZGUsIGN1cnJlbnRDbGFzc2VzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcm9wTmFtZSA9PT0gJ2ZvY3VzJykge1xyXG4gICAgICAgICAgICBmb2N1c05vZGUocHJvcFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBkb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSAnc3R5bGVzJykge1xyXG4gICAgICAgICAgICBjb25zdCBzdHlsZU5hbWVzID0gT2JqZWN0LmtleXMocHJvcFZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3Qgc3R5bGVDb3VudCA9IHN0eWxlTmFtZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0eWxlQ291bnQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVOYW1lID0gc3R5bGVOYW1lc1tqXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0eWxlVmFsdWUgPSBwcm9wVmFsdWVbc3R5bGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFN0eWxlVmFsdWUgPSBwcmV2aW91c1ZhbHVlICYmIHByZXZpb3VzVmFsdWVbc3R5bGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXdTdHlsZVZhbHVlID09PSBvbGRTdHlsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3U3R5bGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrU3R5bGVWYWx1ZShuZXdTdHlsZVZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5zdHlsZUFwcGx5ZXIoZG9tTm9kZSwgc3R5bGVOYW1lLCBuZXdTdHlsZVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zLnN0eWxlQXBwbHllcihkb21Ob2RlLCBzdHlsZU5hbWUsICcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFwcm9wVmFsdWUgJiYgdHlwZW9mIHByZXZpb3VzVmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcE5hbWUgPT09ICd2YWx1ZScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVZhbHVlID0gZG9tTm9kZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9tVmFsdWUgIT09IHByb3BWYWx1ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChkb21Ob2RlWydvbmlucHV0LXZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBkb21WYWx1ZSA9PT0gZG9tTm9kZVsnb25pbnB1dC12YWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcHJvcFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbJ29uaW5wdXQtdmFsdWUnXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwcm9wVmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgIT09ICdrZXknICYmIHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wTmFtZS5sYXN0SW5kZXhPZignb24nLCAwKSA9PT0gMCAmJiBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVFdmVudChkb21Ob2RlLCBwcm9wTmFtZS5zdWJzdHIoMiksIHByb3BWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMsIHByb3BlcnRpZXMuYmluZCwgcHJldmlvdXNWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiBwcm9wTmFtZSAhPT0gJ2lubmVySFRNTCcgJiYgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIHByb3BOYW1lLCBwcm9wVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSAnc2Nyb2xsTGVmdCcgfHwgcHJvcE5hbWUgPT09ICdzY3JvbGxUb3AnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbU5vZGVbcHJvcE5hbWVdICE9PSBwcm9wVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tTm9kZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcGVydGllc1VwZGF0ZWQ7XHJcbn1cclxuZnVuY3Rpb24gZmluZEluZGV4T2ZDaGlsZChjaGlsZHJlbiwgc2FtZUFzLCBzdGFydCkge1xyXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoc2FtZShjaGlsZHJlbltpXSwgc2FtZUFzKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHRvUGFyZW50Vk5vZGUoZG9tTm9kZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0YWc6ICcnLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxyXG4gICAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXHJcbiAgICAgICAgZG9tTm9kZSxcclxuICAgICAgICB0eXBlOiBWTk9ERVxyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gdG9UZXh0Vk5vZGUoZGF0YSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0YWc6ICcnLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxyXG4gICAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGV4dDogYCR7ZGF0YX1gLFxyXG4gICAgICAgIGRvbU5vZGU6IHVuZGVmaW5lZCxcclxuICAgICAgICB0eXBlOiBWTk9ERVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBpbnN0YW5jZSxcclxuICAgICAgICByZW5kZXJlZDogW10sXHJcbiAgICAgICAgY29yZVByb3BlcnRpZXM6IGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcyxcclxuICAgICAgICBjaGlsZHJlbjogaW5zdGFuY2UuY2hpbGRyZW4sXHJcbiAgICAgICAgd2lkZ2V0Q29uc3RydWN0b3I6IGluc3RhbmNlLmNvbnN0cnVjdG9yLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IGluc3RhbmNlRGF0YS5pbnB1dFByb3BlcnRpZXMsXHJcbiAgICAgICAgdHlwZTogV05PREVcclxuICAgIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oY2hpbGRyZW4sIGluc3RhbmNlKSB7XHJcbiAgICBpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBlbXB0eUFycmF5O1xyXG4gICAgfVxyXG4gICAgY2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogW2NoaWxkcmVuXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgaWYgKGNoaWxkID09PSB1bmRlZmluZWQgfHwgY2hpbGQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjaGlsZHJlbltpXSA9IHRvVGV4dFZOb2RlKGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc1ZOb2RlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLnByb3BlcnRpZXMuYmluZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQucHJvcGVydGllcy5iaW5kID0gaW5zdGFuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghY2hpbGQuY29yZVByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmNvcmVQcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kOiBpbnN0YW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJlZ2lzdHJ5OiBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMuYmFzZVJlZ2lzdHJ5XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGkrKztcclxuICAgIH1cclxuICAgIHJldHVybiBjaGlsZHJlbjtcclxufVxyXG5mdW5jdGlvbiBub2RlQWRkZWQoZG5vZGUsIHRyYW5zaXRpb25zKSB7XHJcbiAgICBpZiAoaXNWTm9kZShkbm9kZSkgJiYgZG5vZGUucHJvcGVydGllcykge1xyXG4gICAgICAgIGNvbnN0IGVudGVyQW5pbWF0aW9uID0gZG5vZGUucHJvcGVydGllcy5lbnRlckFuaW1hdGlvbjtcclxuICAgICAgICBpZiAoZW50ZXJBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRlckFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZW50ZXJBbmltYXRpb24oZG5vZGUuZG9tTm9kZSwgZG5vZGUucHJvcGVydGllcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5lbnRlcihkbm9kZS5kb21Ob2RlLCBkbm9kZS5wcm9wZXJ0aWVzLCBlbnRlckFuaW1hdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gbm9kZVRvUmVtb3ZlKGRub2RlLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGlmIChpc1dOb2RlKGRub2RlKSkge1xyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gZG5vZGUucmVuZGVyZWQgfHwgZW1wdHlBcnJheTtcclxuICAgICAgICBpZiAoZG5vZGUuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGRub2RlLmluc3RhbmNlKTtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm9uRGV0YWNoKCk7XHJcbiAgICAgICAgICAgIGluc3RhbmNlTWFwLmRlbGV0ZShkbm9kZS5pbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbm9kZVRvUmVtb3ZlKHJlbmRlcmVkW2ldLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlO1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBkbm9kZS5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIGlmIChkbm9kZS5jaGlsZHJlbiAmJiBkbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vZGVUb1JlbW92ZShkbm9kZS5jaGlsZHJlbltpXSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBleGl0QW5pbWF0aW9uID0gcHJvcGVydGllcy5leGl0QW5pbWF0aW9uO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzICYmIGV4aXRBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgZG9tTm9kZS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBjb25zdCByZW1vdmVEb21Ob2RlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgZG9tTm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleGl0QW5pbWF0aW9uID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0QW5pbWF0aW9uKGRvbU5vZGUsIHJlbW92ZURvbU5vZGUsIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuZXhpdChkbm9kZS5kb21Ob2RlLCBwcm9wZXJ0aWVzLCBleGl0QW5pbWF0aW9uLCByZW1vdmVEb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkb21Ob2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZSk7XHJcbiAgICAgICAgZG5vZGUuZG9tTm9kZSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjaGVja0Rpc3Rpbmd1aXNoYWJsZShjaGlsZE5vZGVzLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKSB7XHJcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2luZGV4VG9DaGVja107XHJcbiAgICBpZiAoaXNWTm9kZShjaGlsZE5vZGUpICYmICFjaGlsZE5vZGUudGFnKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBUZXh0IG5vZGVzIG5lZWQgbm90IGJlIGRpc3Rpbmd1aXNoYWJsZVxyXG4gICAgfVxyXG4gICAgY29uc3QgeyBrZXkgfSA9IGNoaWxkTm9kZS5wcm9wZXJ0aWVzO1xyXG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaSAhPT0gaW5kZXhUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChzYW1lKG5vZGUsIGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZUlkZW50aWZpZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TmFtZSA9IHBhcmVudEluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ3Vua25vd24nO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1dOb2RlKGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlkZW50aWZpZXIgPSBjaGlsZE5vZGUud2lkZ2V0Q29uc3RydWN0b3IubmFtZSB8fCAndW5rbm93bic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlSWRlbnRpZmllciA9IGNoaWxkTm9kZS50YWc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgQSB3aWRnZXQgKCR7cGFyZW50TmFtZX0pIGhhcyBoYWQgYSBjaGlsZCBhZGRkZWQgb3IgcmVtb3ZlZCwgYnV0IHRoZXkgd2VyZSBub3QgYWJsZSB0byB1bmlxdWVseSBpZGVudGlmaWVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byBwcm92aWRlIGEgdW5pcXVlICdrZXknIHByb3BlcnR5IHdoZW4gdXNpbmcgdGhlIHNhbWUgd2lkZ2V0IG9yIGVsZW1lbnQgKCR7bm9kZUlkZW50aWZpZXJ9KSBtdWx0aXBsZSB0aW1lcyBhcyBzaWJsaW5nc2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuKHBhcmVudFZOb2RlLCBvbGRDaGlsZHJlbiwgbmV3Q2hpbGRyZW4sIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgb2xkQ2hpbGRyZW4gPSBvbGRDaGlsZHJlbiB8fCBlbXB0eUFycmF5O1xyXG4gICAgbmV3Q2hpbGRyZW4gPSBuZXdDaGlsZHJlbjtcclxuICAgIGNvbnN0IG9sZENoaWxkcmVuTGVuZ3RoID0gb2xkQ2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgY29uc3QgbmV3Q2hpbGRyZW5MZW5ndGggPSBuZXdDaGlsZHJlbi5sZW5ndGg7XHJcbiAgICBjb25zdCB0cmFuc2l0aW9ucyA9IHByb2plY3Rpb25PcHRpb25zLnRyYW5zaXRpb25zO1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBkZXB0aDogcHJvamVjdGlvbk9wdGlvbnMuZGVwdGggKyAxIH0pO1xyXG4gICAgbGV0IG9sZEluZGV4ID0gMDtcclxuICAgIGxldCBuZXdJbmRleCA9IDA7XHJcbiAgICBsZXQgaTtcclxuICAgIGxldCB0ZXh0VXBkYXRlZCA9IGZhbHNlO1xyXG4gICAgd2hpbGUgKG5ld0luZGV4IDwgbmV3Q2hpbGRyZW5MZW5ndGgpIHtcclxuICAgICAgICBsZXQgb2xkQ2hpbGQgPSBvbGRJbmRleCA8IG9sZENoaWxkcmVuTGVuZ3RoID8gb2xkQ2hpbGRyZW5bb2xkSW5kZXhdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IG5ld0NoaWxkID0gbmV3Q2hpbGRyZW5bbmV3SW5kZXhdO1xyXG4gICAgICAgIGlmIChpc1ZOb2RlKG5ld0NoaWxkKSAmJiB0eXBlb2YgbmV3Q2hpbGQuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgbmV3Q2hpbGQuaW5zZXJ0ZWQgPSBpc1ZOb2RlKG9sZENoaWxkKSAmJiBvbGRDaGlsZC5pbnNlcnRlZDtcclxuICAgICAgICAgICAgYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKG5ld0NoaWxkLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvbGRDaGlsZCAhPT0gdW5kZWZpbmVkICYmIHNhbWUob2xkQ2hpbGQsIG5ld0NoaWxkKSkge1xyXG4gICAgICAgICAgICB0ZXh0VXBkYXRlZCA9IHVwZGF0ZURvbShvbGRDaGlsZCwgbmV3Q2hpbGQsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgcGFyZW50SW5zdGFuY2UpIHx8IHRleHRVcGRhdGVkO1xyXG4gICAgICAgICAgICBvbGRJbmRleCsrO1xyXG4gICAgICAgICAgICBuZXdJbmRleCsrO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZmluZE9sZEluZGV4ID0gZmluZEluZGV4T2ZDaGlsZChvbGRDaGlsZHJlbiwgbmV3Q2hpbGQsIG9sZEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3QgYWRkQ2hpbGQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpbnNlcnRCZWZvcmVEb21Ob2RlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBsZXQgY2hpbGQgPSBvbGRDaGlsZHJlbltvbGRJbmRleF07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5leHRJbmRleCA9IG9sZEluZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgIGxldCBpbnNlcnRCZWZvcmVDaGlsZHJlbiA9IFtjaGlsZF07XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0QmVmb3JlID0gaW5zZXJ0QmVmb3JlQ2hpbGRyZW4uc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNXTm9kZShpbnNlcnRCZWZvcmUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUucmVuZGVyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEJlZm9yZUNoaWxkcmVuLnB1c2goLi4uaW5zZXJ0QmVmb3JlLnJlbmRlcmVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZS5kb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVEb21Ob2RlID0gaW5zZXJ0QmVmb3JlLmRvbU5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ubGVuZ3RoID09PSAwICYmIG9sZENoaWxkcmVuW25leHRJbmRleF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ucHVzaChvbGRDaGlsZHJlbltuZXh0SW5kZXhdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNyZWF0ZURvbShuZXdDaGlsZCwgcGFyZW50Vk5vZGUsIGluc2VydEJlZm9yZURvbU5vZGUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIG5vZGVBZGRlZChuZXdDaGlsZCwgdHJhbnNpdGlvbnMpO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleFRvQ2hlY2sgPSBuZXdJbmRleDtcclxuICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjaGVja0Rpc3Rpbmd1aXNoYWJsZShuZXdDaGlsZHJlbiwgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCFvbGRDaGlsZCB8fCBmaW5kT2xkSW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGFkZENoaWxkKCk7XHJcbiAgICAgICAgICAgIG5ld0luZGV4Kys7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZW1vdmVDaGlsZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXhUb0NoZWNrID0gb2xkSW5kZXg7XHJcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2hlY2tEaXN0aW5ndWlzaGFibGUob2xkQ2hpbGRyZW4sIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGlzV05vZGUob2xkQ2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gaW5zdGFuY2VNYXAuZ2V0KG9sZENoaWxkLmluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2xkQ2hpbGQgPSBpdGVtLmRub2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShvbGRDaGlsZCwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGZpbmROZXdJbmRleCA9IGZpbmRJbmRleE9mQ2hpbGQobmV3Q2hpbGRyZW4sIG9sZENoaWxkLCBuZXdJbmRleCArIDEpO1xyXG4gICAgICAgIGlmIChmaW5kTmV3SW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZUNoaWxkKCk7XHJcbiAgICAgICAgICAgIG9sZEluZGV4Kys7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhZGRDaGlsZCgpO1xyXG4gICAgICAgIHJlbW92ZUNoaWxkKCk7XHJcbiAgICAgICAgb2xkSW5kZXgrKztcclxuICAgICAgICBuZXdJbmRleCsrO1xyXG4gICAgfVxyXG4gICAgaWYgKG9sZENoaWxkcmVuTGVuZ3RoID4gb2xkSW5kZXgpIHtcclxuICAgICAgICAvLyBSZW1vdmUgY2hpbGQgZnJhZ21lbnRzXHJcbiAgICAgICAgZm9yIChpID0gb2xkSW5kZXg7IGkgPCBvbGRDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4VG9DaGVjayA9IGk7XHJcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2hlY2tEaXN0aW5ndWlzaGFibGUob2xkQ2hpbGRyZW4sIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGV0IGNoaWxkVG9SZW1vdmUgPSBvbGRDaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGlzV05vZGUoY2hpbGRUb1JlbW92ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpbnN0YW5jZU1hcC5nZXQoY2hpbGRUb1JlbW92ZS5pbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVG9SZW1vdmUgPSBpdGVtLmRub2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShjaGlsZFRvUmVtb3ZlLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0ZXh0VXBkYXRlZDtcclxufVxyXG5mdW5jdGlvbiBhZGRDaGlsZHJlbihwYXJlbnRWTm9kZSwgY2hpbGRyZW4sIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgaW5zZXJ0QmVmb3JlID0gdW5kZWZpbmVkLCBjaGlsZE5vZGVzKSB7XHJcbiAgICBpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5tZXJnZSAmJiBjaGlsZE5vZGVzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjaGlsZE5vZGVzID0gYXJyYXlGcm9tKHBhcmVudFZOb2RlLmRvbU5vZGUuY2hpbGROb2Rlcyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0cmFuc2l0aW9ucyA9IHByb2plY3Rpb25PcHRpb25zLnRyYW5zaXRpb25zO1xyXG4gICAgcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBkZXB0aDogcHJvamVjdGlvbk9wdGlvbnMuZGVwdGggKyAxIH0pO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgaWYgKGlzVk5vZGUoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5tZXJnZSAmJiBjaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZG9tRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZC5kb21Ob2RlID09PSB1bmRlZmluZWQgJiYgY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCA9IGNoaWxkTm9kZXMuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tRWxlbWVudCAmJiBkb21FbGVtZW50LnRhZ05hbWUgPT09IChjaGlsZC50YWcudG9VcHBlckNhc2UoKSB8fCB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmRvbU5vZGUgPSBkb21FbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjcmVhdGVEb20oY2hpbGQsIHBhcmVudFZOb2RlLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjcmVhdGVEb20oY2hpbGQsIHBhcmVudFZOb2RlLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgY2hpbGROb2Rlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGVBZGRlZChjaGlsZCwgdHJhbnNpdGlvbnMpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgYWRkQ2hpbGRyZW4oZG5vZGUsIGRub2RlLmNoaWxkcmVuLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIHVuZGVmaW5lZCk7XHJcbiAgICBpZiAodHlwZW9mIGRub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID09PSAnZnVuY3Rpb24nICYmIGRub2RlLmluc2VydGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhZGREZWZlcnJlZFByb3BlcnRpZXMoZG5vZGUsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIH1cclxuICAgIGlmIChkbm9kZS5hdHRyaWJ1dGVzICYmIGRub2RlLmV2ZW50cykge1xyXG4gICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZSwge30sIGRub2RlLmF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgZmFsc2UpO1xyXG4gICAgICAgIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHt9LCBkbm9kZS5ldmVudHMsIHByb2plY3Rpb25PcHRpb25zLCB0cnVlKTtcclxuICAgICAgICBjb25zdCBldmVudHMgPSBkbm9kZS5ldmVudHM7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICB1cGRhdGVFdmVudChkb21Ob2RlLCBldmVudCwgZXZlbnRzW2V2ZW50XSwgcHJvamVjdGlvbk9wdGlvbnMsIGRub2RlLnByb3BlcnRpZXMuYmluZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBpZiAoZG5vZGUucHJvcGVydGllcy5rZXkgIT09IG51bGwgJiYgZG5vZGUucHJvcGVydGllcy5rZXkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZChkb21Ob2RlLCBgJHtkbm9kZS5wcm9wZXJ0aWVzLmtleX1gKTtcclxuICAgIH1cclxuICAgIGRub2RlLmluc2VydGVkID0gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVEb20oZG5vZGUsIHBhcmVudFZOb2RlLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgY2hpbGROb2Rlcykge1xyXG4gICAgbGV0IGRvbU5vZGU7XHJcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBpZiAoaXNXTm9kZShkbm9kZSkpIHtcclxuICAgICAgICBsZXQgeyB3aWRnZXRDb25zdHJ1Y3RvciB9ID0gZG5vZGU7XHJcbiAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICBpZiAoIWlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKHdpZGdldENvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcGFyZW50SW5zdGFuY2VEYXRhLnJlZ2lzdHJ5KCkuZ2V0KHdpZGdldENvbnN0cnVjdG9yKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aWRnZXRDb25zdHJ1Y3RvciA9IGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IHdpZGdldENvbnN0cnVjdG9yKCk7XHJcbiAgICAgICAgZG5vZGUuaW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGEuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlLnB1c2goeyBpbnN0YW5jZSwgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoIH0pO1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVSZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICBpbnN0YW5jZS5fX3NldENvcmVQcm9wZXJ0aWVzX18oZG5vZGUuY29yZVByb3BlcnRpZXMpO1xyXG4gICAgICAgIGluc3RhbmNlLl9fc2V0Q2hpbGRyZW5fXyhkbm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgaW5zdGFuY2UuX19zZXRQcm9wZXJ0aWVzX18oZG5vZGUucHJvcGVydGllcyk7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBpbnN0YW5jZS5fX3JlbmRlcl9fKCk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChyZW5kZXJlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJlbmRlcmVkID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihyZW5kZXJlZCwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IGZpbHRlcmVkUmVuZGVyZWQ7XHJcbiAgICAgICAgICAgIGFkZENoaWxkcmVuKHBhcmVudFZOb2RlLCBmaWx0ZXJlZFJlbmRlcmVkLCBwcm9qZWN0aW9uT3B0aW9ucywgaW5zdGFuY2UsIGluc2VydEJlZm9yZSwgY2hpbGROb2Rlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZSwgcGFyZW50Vk5vZGUgfSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZFJvb3QoKTtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm9uQXR0YWNoKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgcHJvamVjdG9yU3RhdGUubWVyZ2VFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaW5pdFByb3BlcnRpZXNBbmRDaGlsZHJlbihkb21Ob2RlLCBkbm9kZSwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkb2MgPSBwYXJlbnRWTm9kZS5kb21Ob2RlLm93bmVyRG9jdW1lbnQ7XHJcbiAgICAgICAgaWYgKCFkbm9kZS50YWcgJiYgdHlwZW9mIGRub2RlLnRleHQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChkbm9kZS5kb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgcGFyZW50Vk5vZGUuZG9tTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RG9tTm9kZSA9IGRub2RlLmRvbU5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkbm9kZS50ZXh0KTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRWTm9kZS5kb21Ob2RlID09PSBkbm9kZS5kb21Ob2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLnJlcGxhY2VDaGlsZChuZXdEb21Ob2RlLCBkbm9kZS5kb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQobmV3RG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlICYmIGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkbm9kZS5kb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSBuZXdEb21Ob2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmluc2VydEJlZm9yZShkb21Ob2RlLCBpbnNlcnRCZWZvcmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5hcHBlbmRDaGlsZChkb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRub2RlLmRvbU5vZGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRub2RlLnRhZyA9PT0gJ3N2ZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UsIGRub2RlLnRhZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgfHwgZG9jLmNyZWF0ZUVsZW1lbnQoZG5vZGUudGFnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5pbnNlcnRCZWZvcmUoZG9tTm9kZSwgaW5zZXJ0QmVmb3JlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkb21Ob2RlLnBhcmVudE5vZGUgIT09IHBhcmVudFZOb2RlLmRvbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQoZG9tTm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlRG9tKHByZXZpb3VzLCBkbm9kZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBwYXJlbnRJbnN0YW5jZSkge1xyXG4gICAgaWYgKGlzV05vZGUoZG5vZGUpKSB7XHJcbiAgICAgICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gcHJldmlvdXM7XHJcbiAgICAgICAgY29uc3QgeyBwYXJlbnRWTm9kZSwgZG5vZGU6IG5vZGUgfSA9IGluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNSZW5kZXJlZCA9IG5vZGUgPyBub2RlLnJlbmRlcmVkIDogcHJldmlvdXMucmVuZGVyZWQ7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICBpbnN0YW5jZS5fX3NldENvcmVQcm9wZXJ0aWVzX18oZG5vZGUuY29yZVByb3BlcnRpZXMpO1xyXG4gICAgICAgIGluc3RhbmNlLl9fc2V0Q2hpbGRyZW5fXyhkbm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgaW5zdGFuY2UuX19zZXRQcm9wZXJ0aWVzX18oZG5vZGUucHJvcGVydGllcyk7XHJcbiAgICAgICAgZG5vZGUuaW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmRpcnR5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVkID0gaW5zdGFuY2UuX19yZW5kZXJfXygpO1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGRub2RlLnJlbmRlcmVkID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihyZW5kZXJlZCwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB1cGRhdGVDaGlsZHJlbihwYXJlbnRWTm9kZSwgcHJldmlvdXNSZW5kZXJlZCwgZG5vZGUucmVuZGVyZWQsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGRub2RlLnJlbmRlcmVkID0gcHJldmlvdXNSZW5kZXJlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlLCBwYXJlbnRWTm9kZSB9KTtcclxuICAgICAgICBpbnN0YW5jZURhdGEubm9kZUhhbmRsZXIuYWRkUm9vdCgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHByZXZpb3VzID09PSBkbm9kZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRvbU5vZGUgPSAoZG5vZGUuZG9tTm9kZSA9IHByZXZpb3VzLmRvbU5vZGUpO1xyXG4gICAgICAgIGxldCB0ZXh0VXBkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCB1cGRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFkbm9kZS50YWcgJiYgdHlwZW9mIGRub2RlLnRleHQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChkbm9kZS50ZXh0ICE9PSBwcmV2aW91cy50ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdEb21Ob2RlID0gZG9tTm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRub2RlLnRleHQpO1xyXG4gICAgICAgICAgICAgICAgZG9tTm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdEb21Ob2RlLCBkb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSBuZXdEb21Ob2RlO1xyXG4gICAgICAgICAgICAgICAgdGV4dFVwZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHRVcGRhdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUudGFnICYmIGRub2RlLnRhZy5sYXN0SW5kZXhPZignc3ZnJywgMCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgbmFtZXNwYWNlOiBOQU1FU1BBQ0VfU1ZHIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91cy5jaGlsZHJlbiAhPT0gZG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihkbm9kZS5jaGlsZHJlbiwgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgZG5vZGUuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKGRub2RlLCBwcmV2aW91cy5jaGlsZHJlbiwgY2hpbGRyZW4sIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykgfHwgdXBkYXRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c1Byb3BlcnRpZXMgPSBidWlsZFByZXZpb3VzUHJvcGVydGllcyhkb21Ob2RlLCBwcmV2aW91cywgZG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmF0dHJpYnV0ZXMsIGRub2RlLmF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLnByb3BlcnRpZXMsIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zLCBmYWxzZSkgfHwgdXBkYXRlZDtcclxuICAgICAgICAgICAgICAgIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5ldmVudHMsIGRub2RlLmV2ZW50cywgcHJvamVjdGlvbk9wdGlvbnMsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gZG5vZGUuZXZlbnRzO1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50LCBldmVudHNbZXZlbnRdLCBwcm9qZWN0aW9uT3B0aW9ucywgZG5vZGUucHJvcGVydGllcy5iaW5kLCBwcmV2aW91c1Byb3BlcnRpZXMuZXZlbnRzW2V2ZW50XSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLnByb3BlcnRpZXMsIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gbnVsbCAmJiBkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZChkb21Ob2RlLCBgJHtkbm9kZS5wcm9wZXJ0aWVzLmtleX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodXBkYXRlZCAmJiBkbm9kZS5wcm9wZXJ0aWVzICYmIGRub2RlLnByb3BlcnRpZXMudXBkYXRlQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgIGRub2RlLnByb3BlcnRpZXMudXBkYXRlQW5pbWF0aW9uKGRvbU5vZGUsIGRub2RlLnByb3BlcnRpZXMsIHByZXZpb3VzLnByb3BlcnRpZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBhZGREZWZlcnJlZFByb3BlcnRpZXModm5vZGUsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICAvLyB0cmFuc2ZlciBhbnkgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgLSBhcyB0aGVzZSBtdXN0IGJlIGRlY29yYXRlZCBwcm9wZXJ0aWVzXHJcbiAgICB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMgPSB2bm9kZS5wcm9wZXJ0aWVzO1xyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHZub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrKCEhdm5vZGUuaW5zZXJ0ZWQpO1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgdm5vZGUucHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnRpZXMsIHZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllcyk7XHJcbiAgICBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdm5vZGUuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2soISF2bm9kZS5pbnNlcnRlZCksIHZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllcyk7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyh2bm9kZS5kb21Ob2RlLCB2bm9kZS5wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgdm5vZGUucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgaWYgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xyXG4gICAgICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XHJcbiAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGdsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHNjaGVkdWxlUmVuZGVyKHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xyXG4gICAgICAgIHJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9qZWN0b3JTdGF0ZS5yZW5kZXJTY2hlZHVsZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgcHJvamVjdG9yU3RhdGUucmVuZGVyU2NoZWR1bGVkID0gdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgcmVuZGVyUXVldWUgPSBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZTtcclxuICAgIGNvbnN0IHJlbmRlcnMgPSBbLi4ucmVuZGVyUXVldWVdO1xyXG4gICAgcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWUgPSBbXTtcclxuICAgIHJlbmRlcnMuc29ydCgoYSwgYikgPT4gYS5kZXB0aCAtIGIuZGVwdGgpO1xyXG4gICAgY29uc3QgcHJldmlvdXNseVJlbmRlcmVkID0gW107XHJcbiAgICB3aGlsZSAocmVuZGVycy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB7IGluc3RhbmNlIH0gPSByZW5kZXJzLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlTWFwLmhhcyhpbnN0YW5jZSkgJiYgcHJldmlvdXNseVJlbmRlcmVkLmluZGV4T2YoaW5zdGFuY2UpID09PSAtMSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c2x5UmVuZGVyZWQucHVzaChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcGFyZW50Vk5vZGUsIGRub2RlIH0gPSBpbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB1cGRhdGVEb20oZG5vZGUsIHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgcnVuRGVmZXJyZWRSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpO1xyXG59XHJcbmV4cG9ydCBjb25zdCBkb20gPSB7XHJcbiAgICBhcHBlbmQ6IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XHJcbiAgICAgICAgY29uc3QgZmluYWxQcm9qZWN0b3JPcHRpb25zID0gZ2V0UHJvamVjdGlvbk9wdGlvbnMocHJvamVjdGlvbk9wdGlvbnMsIGluc3RhbmNlKTtcclxuICAgICAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWZ0ZXJSZW5kZXJDYWxsYmFja3M6IFtdLFxyXG4gICAgICAgICAgICBkZWZlcnJlZFJlbmRlckNhbGxiYWNrczogW10sXHJcbiAgICAgICAgICAgIG5vZGVNYXA6IG5ldyBXZWFrTWFwKCksXHJcbiAgICAgICAgICAgIHJlbmRlclNjaGVkdWxlZDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICByZW5kZXJRdWV1ZTogW10sXHJcbiAgICAgICAgICAgIG1lcmdlOiBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZSB8fCBmYWxzZSxcclxuICAgICAgICAgICAgbWVyZ2VFbGVtZW50OiBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHByb2plY3RvclN0YXRlTWFwLnNldChpbnN0YW5jZSwgcHJvamVjdG9yU3RhdGUpO1xyXG4gICAgICAgIGZpbmFsUHJvamVjdG9yT3B0aW9ucy5yb290Tm9kZSA9IHBhcmVudE5vZGU7XHJcbiAgICAgICAgY29uc3QgcGFyZW50Vk5vZGUgPSB0b1BhcmVudFZOb2RlKGZpbmFsUHJvamVjdG9yT3B0aW9ucy5yb290Tm9kZSk7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKTtcclxuICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2UsIHsgZG5vZGU6IG5vZGUsIHBhcmVudFZOb2RlIH0pO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGEuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlLnB1c2goeyBpbnN0YW5jZSwgZGVwdGg6IGZpbmFsUHJvamVjdG9yT3B0aW9ucy5kZXB0aCB9KTtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlUmVuZGVyKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHVwZGF0ZURvbShub2RlLCBub2RlLCBmaW5hbFByb2plY3Rvck9wdGlvbnMsIHBhcmVudFZOb2RlLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5vbkF0dGFjaCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJ1bkRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XHJcbiAgICAgICAgcnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkb21Ob2RlOiBmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGVcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIH0sXHJcbiAgICBtZXJnZTogZnVuY3Rpb24gKGVsZW1lbnQsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgPSB0cnVlO1xyXG4gICAgICAgIHByb2plY3Rpb25PcHRpb25zLm1lcmdlRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHRoaXMuYXBwZW5kKGVsZW1lbnQucGFyZW50Tm9kZSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChpbnN0YW5jZSk7XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGUubWVyZ2UgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gcHJvamVjdGlvbjtcclxuICAgIH1cclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmRvbS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvdmRvbS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL3Zkb20ubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciB3aWRnZXRGYWN0b3J5ID0gcmVxdWlyZShcInNyYy9tZW51L01lbnVcIik7XG5cbnZhciByZWdpc3RlckN1c3RvbUVsZW1lbnQgPSByZXF1aXJlKCdAZG9qby93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQnKS5kZWZhdWx0O1xyXG5cclxudmFyIGRlZmF1bHRFeHBvcnQgPSB3aWRnZXRGYWN0b3J5LmRlZmF1bHQ7XHJcbmRlZmF1bHRFeHBvcnQgJiYgcmVnaXN0ZXJDdXN0b21FbGVtZW50KGRlZmF1bHRFeHBvcnQpO1xyXG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ltcG9ydHMtbG9hZGVyP3dpZGdldEZhY3Rvcnk9c3JjL21lbnUvTWVudSEuL25vZGVfbW9kdWxlcy9AZG9qby9jbGktYnVpbGQtd2lkZ2V0L3RlbXBsYXRlL2N1c3RvbS1lbGVtZW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9pbXBvcnRzLWxvYWRlci9pbmRleC5qcz93aWRnZXRGYWN0b3J5PXNyYy9tZW51L01lbnUhLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDApXHJcbiAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSB5W29wWzBdICYgMiA/IFwicmV0dXJuXCIgOiBvcFswXSA/IFwidGhyb3dcIiA6IFwibmV4dFwiXSkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbMCwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgIH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChvW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9OyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2goZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxuXHRcdGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyB2IH0gZnJvbSAnQGRvam8vd2lkZ2V0LWNvcmUvZCc7XHJcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQnO1xyXG5pbXBvcnQgeyBXaWRnZXRQcm9wZXJ0aWVzLCBXTm9kZSB9IGZyb20gJ0Bkb2pvL3dpZGdldC1jb3JlL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyB0aGVtZSwgVGhlbWVkTWl4aW4gfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkJztcclxuaW1wb3J0IHsgV2lkZ2V0QmFzZSB9IGZyb20gJ0Bkb2pvL3dpZGdldC1jb3JlL1dpZGdldEJhc2UnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSwgTWVudUl0ZW1Qcm9wZXJ0aWVzIH0gZnJvbSAnLi4vbWVudS1pdGVtL01lbnVJdGVtJztcclxuXHJcbmltcG9ydCAqIGFzIGNzcyBmcm9tICcuL21lbnUubS5jc3MnO1xyXG5cclxuaW50ZXJmYWNlIE1lbnVQcm9wZXJ0aWVzIGV4dGVuZHMgV2lkZ2V0UHJvcGVydGllcyB7XHJcblx0b25TZWxlY3RlZDogKGRhdGE6IGFueSkgPT4gdm9pZDtcclxufVxyXG5cclxuQGN1c3RvbUVsZW1lbnQ8TWVudVByb3BlcnRpZXM+KHtcclxuXHR0YWc6ICdkZW1vLW1lbnUnLFxyXG5cdGV2ZW50czogWydvblNlbGVjdGVkJ11cclxufSlcclxuQHRoZW1lKGNzcylcclxuZXhwb3J0IGNsYXNzIE1lbnUgZXh0ZW5kcyBUaGVtZWRNaXhpbihXaWRnZXRCYXNlKTxNZW51UHJvcGVydGllcywgV05vZGU8TWVudUl0ZW0+PiB7XHJcblx0cHJpdmF0ZSBfc2VsZWN0ZWRJZDogbnVtYmVyO1xyXG5cclxuXHRwcml2YXRlIF9vblNlbGVjdGVkKGlkOiBudW1iZXIsIGRhdGE6IGFueSkge1xyXG5cdFx0dGhpcy5fc2VsZWN0ZWRJZCA9IGlkO1xyXG5cdFx0dGhpcy5wcm9wZXJ0aWVzLm9uU2VsZWN0ZWQoZGF0YSk7XHJcblx0XHR0aGlzLmludmFsaWRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCByZW5kZXIoKSB7XHJcblx0XHRjb25zdCBpdGVtcyA9IHRoaXMuY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcclxuXHRcdFx0aWYgKGNoaWxkKSB7XHJcblx0XHRcdFx0Y29uc3QgcHJvcGVydGllczogUGFydGlhbDxNZW51SXRlbVByb3BlcnRpZXM+ID0ge1xyXG5cdFx0XHRcdFx0b25TZWxlY3RlZDogKGRhdGE6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLl9vblNlbGVjdGVkKGluZGV4LCBkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGlmICh0aGlzLl9zZWxlY3RlZElkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdHByb3BlcnRpZXMuc2VsZWN0ZWQgPSBpbmRleCA9PT0gdGhpcy5fc2VsZWN0ZWRJZDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y2hpbGQucHJvcGVydGllcyA9IHsgLi4uY2hpbGQucHJvcGVydGllcywgLi4ucHJvcGVydGllcyB9O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBjaGlsZDtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiB2KCduYXYnLCB7IGNsYXNzZXM6IHRoaXMudGhlbWUoY3NzLnJvb3QpIH0sIFtcclxuXHRcdFx0dihcclxuXHRcdFx0XHQnb2wnLFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGNsYXNzZXM6IHRoaXMudGhlbWUoY3NzLm1lbnVDb250YWluZXIpXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRpdGVtc1xyXG5cdFx0XHQpXHJcblx0XHRdKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lbnU7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9dHMmaW5zdGFuY2VOYW1lPTBfbWVudSEuL3NyYy9tZW51L01lbnUudHMiLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCIgX2tleVwiOlwidGVzdC1hcHAvbWVudVwiLFwicm9vdFwiOlwibWVudS1tX19yb290X18zYkE2alwiLFwibWVudUNvbnRhaW5lclwiOlwibWVudS1tX19tZW51Q29udGFpbmVyX18xZW9HZlwifTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9tZW51L21lbnUubS5jc3Ncbi8vIG1vZHVsZSBpZCA9IC4vc3JjL21lbnUvbWVudS5tLmNzc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMDkxNTUyNjI2M2M4Yjc1MTFjZjIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL0Rlc3Ryb3lhYmxlLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRXZlbnRlZC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL2xhbmcubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvaGFzL2hhcy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL01hcC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL1Byb21pc2UubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9TeW1ib2wubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9XZWFrTWFwLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vYXJyYXkubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9nbG9iYWwubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9pdGVyYXRvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL251bWJlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL29iamVjdC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N0cmluZy5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvaGFzLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC9xdWV1ZS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvdXRpbC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9JbmplY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9Ob2RlSGFuZGxlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2QubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hZnRlclJlbmRlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2JlZm9yZVByb3BlcnRpZXMubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9jdXN0b21FbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RpZmYubWpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS92ZG9tLm1qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS9NZW51LnRzIiwid2VicGFjazovLy8uL3NyYy9tZW51L21lbnUubS5jc3M/ZWMxMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7QUM3RGdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSx3Qzs7Ozs7Ozs7Ozs7QUN2REE7QUFDc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0NBQWdDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2RWlCO0FBQ0E7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsaUM7Ozs7Ozs7Ozs7OztBQ25NQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8saUJBQWlCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7O0FDdE1BO0FBQ0E7QUFDNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxtQzs7Ozs7Ozs7Ozs7OztBQ2hKQTtBQUNzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxxQkFBcUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGdDQUFnQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNrQztBQUNQO0FBQzNCO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3RELG9EQUFvRDtBQUNwRCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFlBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVM7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0M7Ozs7Ozs7O0FDdlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLG1DOzs7Ozs7Ozs7Ozs7Ozs7QUNqQkE7QUFDaUQ7QUFDakQsb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDOzs7Ozs7Ozs7Ozs7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREE7QUFDQTtBQUNtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlHQTtBQUNBO0FBQ3FCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFlBQVk7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0Y7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DOzs7Ozs7Ozs7OztBQ3hTbUI7QUFDbkI7MEVBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsRUFBRTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxFQUFFO0FBQ2pFLG1DQUFtQyxtQkFBbUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxnQzs7Ozs7Ozs7Ozs7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFBQTtBQUFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsZ0NBQWdDLG1CQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxrQzs7Ozs7Ozs7O0FDekxBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQzs7Ozs7Ozs7O0FDdEJrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQSxxQzs7Ozs7Ozs7Ozs7QUNwQmtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2THRDO0FBQUE7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxnQkFBZ0Isc0NBQXNDLGlC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QU0sRUFBRSxDQUFDLFlBQVksQ0FBQztLQUN0QixDQUFDO0lBQ0QsZ0dBQUssQ0FBQyx5Q0FBRyxDQUFDO0dBQ0UsSUFBSSxDQW1DaEI7QUFuQ2dCO0FBcUNqQiwrREFBZSxJQUFJLEVBQUM7Ozs7Ozs7O0FDdkRwQjtBQUNBLGtCQUFrQixxRyIsImZpbGUiOiJtZW51LTEuMC4wLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMDkxNTUyNjI2M2M4Yjc1MTFjZjIiLCJpbXBvcnQgeyBjcmVhdGVDb21wb3NpdGVIYW5kbGUgfSBmcm9tICcuL2xhbmcnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi4vc2hpbS9Qcm9taXNlJztcbi8qKlxuICogTm8gb3BlcmF0aW9uIGZ1bmN0aW9uIHRvIHJlcGxhY2Ugb3duIG9uY2UgaW5zdGFuY2UgaXMgZGVzdG9yeWVkXG4gKi9cbmZ1bmN0aW9uIG5vb3AoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG59XG4vKipcbiAqIE5vIG9wIGZ1bmN0aW9uIHVzZWQgdG8gcmVwbGFjZSBvd24sIG9uY2UgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdG9yeWVkXG4gKi9cbmZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgbWFkZSB0byBkZXN0cm95ZWQgbWV0aG9kJyk7XG59XG5leHBvcnQgY2xhc3MgRGVzdHJveWFibGUge1xuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmhhbmRsZXMgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgaGFuZGxlcyBmb3IgdGhlIGluc3RhbmNlIHRoYXQgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiBgdGhpcy5kZXN0cm95YCBpcyBjYWxsZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SGFuZGxlfSBoYW5kbGUgVGhlIGhhbmRsZSB0byBhZGQgZm9yIHRoZSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtIYW5kbGV9IGEgaGFuZGxlIGZvciB0aGUgaGFuZGxlLCByZW1vdmVzIHRoZSBoYW5kbGUgZm9yIHRoZSBpbnN0YW5jZSBhbmQgY2FsbHMgZGVzdHJveVxuICAgICAqL1xuICAgIG93bihoYW5kbGVzKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZSA9IEFycmF5LmlzQXJyYXkoaGFuZGxlcykgPyBjcmVhdGVDb21wb3NpdGVIYW5kbGUoLi4uaGFuZGxlcykgOiBoYW5kbGVzO1xuICAgICAgICBjb25zdCB7IGhhbmRsZXM6IF9oYW5kbGVzIH0gPSB0aGlzO1xuICAgICAgICBfaGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgIF9oYW5kbGVzLnNwbGljZShfaGFuZGxlcy5pbmRleE9mKGhhbmRsZSkpO1xuICAgICAgICAgICAgICAgIGhhbmRsZS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlc3RycHlzIGFsbCBoYW5kZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8YW55fSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIGFsbCBoYW5kbGVzIGhhdmUgYmVlbiBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcy5mb3JFYWNoKChoYW5kbGUpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGUgJiYgaGFuZGxlLmRlc3Ryb3kgJiYgaGFuZGxlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gbm9vcDtcbiAgICAgICAgICAgIHRoaXMub3duID0gZGVzdHJveWVkO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgRGVzdHJveWFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1EZXN0cm95YWJsZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRGVzdHJveWFibGUubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9EZXN0cm95YWJsZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IE1hcCBmcm9tICcuLi9zaGltL01hcCc7XHJcbmltcG9ydCB7IERlc3Ryb3lhYmxlIH0gZnJvbSAnLi9EZXN0cm95YWJsZSc7XHJcbi8qKlxyXG4gKiBNYXAgb2YgY29tcHV0ZWQgcmVndWxhciBleHByZXNzaW9ucywga2V5ZWQgYnkgc3RyaW5nXHJcbiAqL1xyXG5jb25zdCByZWdleE1hcCA9IG5ldyBNYXAoKTtcclxuLyoqXHJcbiAqIERldGVybWluZXMgaXMgdGhlIGV2ZW50IHR5cGUgZ2xvYiBoYXMgYmVlbiBtYXRjaGVkXHJcbiAqXHJcbiAqIEByZXR1cm5zIGJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGdsb2IgaXMgbWF0Y2hlZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzR2xvYk1hdGNoKGdsb2JTdHJpbmcsIHRhcmdldFN0cmluZykge1xyXG4gICAgaWYgKHR5cGVvZiB0YXJnZXRTdHJpbmcgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBnbG9iU3RyaW5nID09PSAnc3RyaW5nJyAmJiBnbG9iU3RyaW5nLmluZGV4T2YoJyonKSAhPT0gLTEpIHtcclxuICAgICAgICBsZXQgcmVnZXg7XHJcbiAgICAgICAgaWYgKHJlZ2V4TWFwLmhhcyhnbG9iU3RyaW5nKSkge1xyXG4gICAgICAgICAgICByZWdleCA9IHJlZ2V4TWFwLmdldChnbG9iU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7Z2xvYlN0cmluZy5yZXBsYWNlKC9cXCovZywgJy4qJyl9JGApO1xyXG4gICAgICAgICAgICByZWdleE1hcC5zZXQoZ2xvYlN0cmluZywgcmVnZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh0YXJnZXRTdHJpbmcpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGdsb2JTdHJpbmcgPT09IHRhcmdldFN0cmluZztcclxuICAgIH1cclxufVxyXG4vKipcclxuICogRXZlbnQgQ2xhc3NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFdmVudGVkIGV4dGVuZHMgRGVzdHJveWFibGUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBtYXAgb2YgbGlzdGVuZXJzIGtleWVkIGJ5IGV2ZW50IHR5cGVcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmxpc3RlbmVyc01hcCA9IG5ldyBNYXAoKTtcclxuICAgIH1cclxuICAgIGVtaXQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyc01hcC5mb3JFYWNoKChtZXRob2RzLCB0eXBlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpc0dsb2JNYXRjaCh0eXBlLCBldmVudC50eXBlKSkge1xyXG4gICAgICAgICAgICAgICAgWy4uLm1ldGhvZHNdLmZvckVhY2goKG1ldGhvZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZC5jYWxsKHRoaXMsIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBvbih0eXBlLCBsaXN0ZW5lcikge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3RlbmVyKSkge1xyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gbGlzdGVuZXIubWFwKChsaXN0ZW5lcikgPT4gdGhpcy5fYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGRlc3Ryb3koKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcy5mb3JFYWNoKChoYW5kbGUpID0+IGhhbmRsZS5kZXN0cm95KCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpO1xyXG4gICAgfVxyXG4gICAgX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XHJcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNNYXAuZ2V0KHR5cGUpIHx8IFtdO1xyXG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyc01hcC5zZXQodHlwZSwgbGlzdGVuZXJzKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IEV2ZW50ZWQ7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUV2ZW50ZWQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL0V2ZW50ZWQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9FdmVudGVkLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICcuLi9zaGltL29iamVjdCc7XG5leHBvcnQgeyBhc3NpZ24gfSBmcm9tICcuLi9zaGltL29iamVjdCc7XG5jb25zdCBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbmNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbi8qKlxuICogVHlwZSBndWFyZCB0aGF0IGVuc3VyZXMgdGhhdCB0aGUgdmFsdWUgY2FuIGJlIGNvZXJjZWQgdG8gT2JqZWN0XG4gKiB0byB3ZWVkIG91dCBob3N0IG9iamVjdHMgdGhhdCBkbyBub3QgZGVyaXZlIGZyb20gT2JqZWN0LlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGlmIHdlIHdhbnQgdG8gZGVlcCBjb3B5IGFuIG9iamVjdCBvciBub3QuXG4gKiBOb3RlOiBJbiBFUzYgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IGFuIG9iamVjdCdzIFN5bWJvbC50b1N0cmluZ1RhZyBwcm9wZXJ0eSwgd2hpY2ggd2lsbFxuICogY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBgdG9TdHJpbmdgLiBUaGlzIGlzIGEgcmFyZSBlZGdlIGNhc2UgdGhhdCBpcyBkaWZmaWN1bHQgdG8gaGFuZGxlLFxuICogc28gaXQgaXMgbm90IGhhbmRsZWQgaGVyZS5cbiAqIEBwYXJhbSAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJuICAgICAgIElmIHRoZSB2YWx1ZSBpcyBjb2VyY2libGUgaW50byBhbiBPYmplY3RcbiAqL1xuZnVuY3Rpb24gc2hvdWxkRGVlcENvcHlPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5mdW5jdGlvbiBjb3B5QXJyYXkoYXJyYXksIGluaGVyaXRlZCkge1xuICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3B5QXJyYXkoaXRlbSwgaW5oZXJpdGVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXNob3VsZERlZXBDb3B5T2JqZWN0KGl0ZW0pXG4gICAgICAgICAgICA/IGl0ZW1cbiAgICAgICAgICAgIDogX21peGluKHtcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluaGVyaXRlZDogaW5oZXJpdGVkLFxuICAgICAgICAgICAgICAgIHNvdXJjZXM6IFtpdGVtXSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHt9XG4gICAgICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIF9taXhpbihrd0FyZ3MpIHtcbiAgICBjb25zdCBkZWVwID0ga3dBcmdzLmRlZXA7XG4gICAgY29uc3QgaW5oZXJpdGVkID0ga3dBcmdzLmluaGVyaXRlZDtcbiAgICBjb25zdCB0YXJnZXQgPSBrd0FyZ3MudGFyZ2V0O1xuICAgIGNvbnN0IGNvcGllZCA9IGt3QXJncy5jb3BpZWQgfHwgW107XG4gICAgY29uc3QgY29waWVkQ2xvbmUgPSBbLi4uY29waWVkXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGt3QXJncy5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGt3QXJncy5zb3VyY2VzW2ldO1xuICAgICAgICBpZiAoc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gc291cmNlW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGNvcGllZENsb25lLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvcHlBcnJheSh2YWx1ZSwgaW5oZXJpdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzaG91bGREZWVwQ29weU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV0gfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWQucHVzaChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfbWl4aW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkOiBpbmhlcml0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlczogW3ZhbHVlXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIC4uLm1peGlucykge1xuICAgIGlmICghbWl4aW5zLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbGFuZy5jcmVhdGUgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG1peGluIG9iamVjdC4nKTtcbiAgICB9XG4gICAgY29uc3QgYXJncyA9IG1peGlucy5zbGljZSgpO1xuICAgIGFyZ3MudW5zaGlmdChPYmplY3QuY3JlYXRlKHByb3RvdHlwZSkpO1xuICAgIHJldHVybiBhc3NpZ24uYXBwbHkobnVsbCwgYXJncyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVlcEFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICByZXR1cm4gX21peGluKHtcbiAgICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgICAgaW5oZXJpdGVkOiBmYWxzZSxcbiAgICAgICAgc291cmNlczogc291cmNlcyxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWl4aW4odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgcmV0dXJuIF9taXhpbih7XG4gICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgIGluaGVyaXRlZDogdHJ1ZSxcbiAgICAgICAgc291cmNlczogc291cmNlcyxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdXNpbmcgdGhlIHByb3ZpZGVkIHNvdXJjZSdzIHByb3RvdHlwZSBhcyB0aGUgcHJvdG90eXBlIGZvciB0aGUgbmV3IG9iamVjdCwgYW5kIHRoZW5cbiAqIGRlZXAgY29waWVzIHRoZSBwcm92aWRlZCBzb3VyY2UncyB2YWx1ZXMgaW50byB0aGUgbmV3IHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFRoZSBvYmplY3QgdG8gZHVwbGljYXRlXG4gKiBAcmV0dXJuIFRoZSBuZXcgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkdXBsaWNhdGUoc291cmNlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKSk7XG4gICAgcmV0dXJuIGRlZXBNaXhpbih0YXJnZXQsIHNvdXJjZSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0d28gdmFsdWVzIGFyZSB0aGUgc2FtZSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gYSBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gKiBAcGFyYW0gYiBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lOyBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSWRlbnRpY2FsKGEsIGIpIHtcbiAgICByZXR1cm4gKGEgPT09IGIgfHxcbiAgICAgICAgLyogYm90aCB2YWx1ZXMgYXJlIE5hTiAqL1xuICAgICAgICAoYSAhPT0gYSAmJiBiICE9PSBiKSk7XG59XG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGJpbmRzIGEgbWV0aG9kIHRvIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGF0IHJ1bnRpbWUuIFRoaXMgaXMgc2ltaWxhciB0b1xuICogYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCwgYnV0IGluc3RlYWQgb2YgYSBmdW5jdGlvbiBpdCB0YWtlcyB0aGUgbmFtZSBvZiBhIG1ldGhvZCBvbiBhbiBvYmplY3QuXG4gKiBBcyBhIHJlc3VsdCwgdGhlIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGBsYXRlQmluZGAgd2lsbCBhbHdheXMgY2FsbCB0aGUgZnVuY3Rpb24gY3VycmVudGx5IGFzc2lnbmVkIHRvXG4gKiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG9uIHRoZSBvYmplY3QgYXMgb2YgdGhlIG1vbWVudCB0aGUgZnVuY3Rpb24gaXQgcmV0dXJucyBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIGluc3RhbmNlIFRoZSBjb250ZXh0IG9iamVjdFxuICogQHBhcmFtIG1ldGhvZCBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIG9uIHRoZSBjb250ZXh0IG9iamVjdCB0byBiaW5kIHRvIGl0c2VsZlxuICogQHBhcmFtIHN1cHBsaWVkQXJncyBBbiBvcHRpb25hbCBhcnJheSBvZiB2YWx1ZXMgdG8gcHJlcGVuZCB0byB0aGUgYGluc3RhbmNlW21ldGhvZF1gIGFyZ3VtZW50cyBsaXN0XG4gKiBAcmV0dXJuIFRoZSBib3VuZCBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF0ZUJpbmQoaW5zdGFuY2UsIG1ldGhvZCwgLi4uc3VwcGxpZWRBcmdzKSB7XG4gICAgcmV0dXJuIHN1cHBsaWVkQXJncy5sZW5ndGhcbiAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA/IHN1cHBsaWVkQXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IHN1cHBsaWVkQXJncztcbiAgICAgICAgICAgIC8vIFRTNzAxN1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlW21ldGhvZF0uYXBwbHkoaW5zdGFuY2UsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gVFM3MDE3XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VbbWV0aG9kXS5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICByZXR1cm4gX21peGluKHtcbiAgICAgICAgZGVlcDogZmFsc2UsXG4gICAgICAgIGluaGVyaXRlZDogdHJ1ZSxcbiAgICAgICAgc291cmNlczogc291cmNlcyxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMgdGhlIGdpdmVuIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cyBwcmVwZW5kZWQgdG8gaXRzIGFyZ3VtZW50IGxpc3QuXG4gKiBMaWtlIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAsIGJ1dCBkb2VzIG5vdCBhbHRlciBleGVjdXRpb24gY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0RnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYm91bmRcbiAqIEBwYXJhbSBzdXBwbGllZEFyZ3MgQW4gb3B0aW9uYWwgYXJyYXkgb2YgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhlIGB0YXJnZXRGdW5jdGlvbmAgYXJndW1lbnRzIGxpc3RcbiAqIEByZXR1cm4gVGhlIGJvdW5kIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsKHRhcmdldEZ1bmN0aW9uLCAuLi5zdXBwbGllZEFyZ3MpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA/IHN1cHBsaWVkQXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IHN1cHBsaWVkQXJncztcbiAgICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG59XG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBkZXN0cm95IG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgY2FsbHMgdGhlIHBhc3NlZC1pbiBkZXN0cnVjdG9yLlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGNyZWF0aW5nIFwicmVtb3ZlXCIgLyBcImRlc3Ryb3lcIiBoYW5kbGVycyBmb3JcbiAqIGV2ZW50IGxpc3RlbmVycywgdGltZXJzLCBldGMuXG4gKlxuICogQHBhcmFtIGRlc3RydWN0b3IgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGhhbmRsZSdzIGBkZXN0cm95YCBtZXRob2QgaXMgaW52b2tlZFxuICogQHJldHVybiBUaGUgaGFuZGxlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGFuZGxlKGRlc3RydWN0b3IpIHtcbiAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRlc3RydWN0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIFJldHVybnMgYSBzaW5nbGUgaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVzdHJveSBtdWx0aXBsZSBoYW5kbGVzIHNpbXVsdGFuZW91c2x5LlxuICpcbiAqIEBwYXJhbSBoYW5kbGVzIEFuIGFycmF5IG9mIGhhbmRsZXMgd2l0aCBgZGVzdHJveWAgbWV0aG9kc1xuICogQHJldHVybiBUaGUgaGFuZGxlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9zaXRlSGFuZGxlKC4uLmhhbmRsZXMpIHtcbiAgICByZXR1cm4gY3JlYXRlSGFuZGxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYW5kbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBoYW5kbGVzW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFuZy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvbGFuZy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL2xhbmcubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImZ1bmN0aW9uIGlzRmVhdHVyZVRlc3RUaGVuYWJsZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLnRoZW47XHJcbn1cclxuLyoqXHJcbiAqIEEgY2FjaGUgb2YgcmVzdWx0cyBvZiBmZWF0dXJlIHRlc3RzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdGVzdENhY2hlID0ge307XHJcbi8qKlxyXG4gKiBBIGNhY2hlIG9mIHRoZSB1bi1yZXNvbHZlZCBmZWF0dXJlIHRlc3RzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdGVzdEZ1bmN0aW9ucyA9IHt9O1xyXG4vKipcclxuICogQSBjYWNoZSBvZiB1bnJlc29sdmVkIHRoZW5hYmxlcyAocHJvYmFibHkgcHJvbWlzZXMpXHJcbiAqIEB0eXBlIHt7fX1cclxuICovXHJcbmNvbnN0IHRlc3RUaGVuYWJsZXMgPSB7fTtcclxuLyoqXHJcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgc2NvcGUgKGB3aW5kb3dgIGluIGEgYnJvd3NlciwgYGdsb2JhbGAgaW4gTm9kZUpTKVxyXG4gKi9cclxuY29uc3QgZ2xvYmFsU2NvcGUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIEJyb3dzZXJzXHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gTm9kZVxyXG4gICAgICAgIHJldHVybiBnbG9iYWw7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyBXZWIgd29ya2Vyc1xyXG4gICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfVxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgIHJldHVybiB7fTtcclxufSkoKTtcclxuLyogR3JhYiB0aGUgc3RhdGljRmVhdHVyZXMgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSAqL1xyXG5jb25zdCB7IHN0YXRpY0ZlYXR1cmVzIH0gPSBnbG9iYWxTY29wZS5Eb2pvSGFzRW52aXJvbm1lbnQgfHwge307XHJcbi8qIENsZWFuaW5nIHVwIHRoZSBEb2pvSGFzRW52aW9ybm1lbnQgKi9cclxuaWYgKCdEb2pvSGFzRW52aXJvbm1lbnQnIGluIGdsb2JhbFNjb3BlKSB7XHJcbiAgICBkZWxldGUgZ2xvYmFsU2NvcGUuRG9qb0hhc0Vudmlyb25tZW50O1xyXG59XHJcbi8qKlxyXG4gKiBDdXN0b20gdHlwZSBndWFyZCB0byBuYXJyb3cgdGhlIGBzdGF0aWNGZWF0dXJlc2AgdG8gZWl0aGVyIGEgbWFwIG9yIGEgZnVuY3Rpb24gdGhhdFxyXG4gKiByZXR1cm5zIGEgbWFwLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGd1YXJkIGZvclxyXG4gKi9cclxuZnVuY3Rpb24gaXNTdGF0aWNGZWF0dXJlRnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBjYWNoZSBvZiBhc3NlcnRlZCBmZWF0dXJlcyB0aGF0IHdlcmUgYXZhaWxhYmxlIGluIHRoZSBnbG9iYWwgc2NvcGUgd2hlbiB0aGVcclxuICogbW9kdWxlIGxvYWRlZFxyXG4gKi9cclxuY29uc3Qgc3RhdGljQ2FjaGUgPSBzdGF0aWNGZWF0dXJlc1xyXG4gICAgPyBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbihzdGF0aWNGZWF0dXJlcykgPyBzdGF0aWNGZWF0dXJlcy5hcHBseShnbG9iYWxTY29wZSkgOiBzdGF0aWNGZWF0dXJlc1xyXG4gICAgOiB7fTsgLyogUHJvdmlkaW5nIGFuIGVtcHR5IGNhY2hlLCBpZiBub25lIHdhcyBpbiB0aGUgZW52aXJvbm1lbnRcclxuXHJcbi8qKlxyXG4qIEFNRCBwbHVnaW4gZnVuY3Rpb24uXHJcbipcclxuKiBDb25kaXRpb25hbCBsb2FkcyBtb2R1bGVzIGJhc2VkIG9uIGEgaGFzIGZlYXR1cmUgdGVzdCB2YWx1ZS5cclxuKlxyXG4qIEBwYXJhbSByZXNvdXJjZUlkIEdpdmVzIHRoZSByZXNvbHZlZCBtb2R1bGUgaWQgdG8gbG9hZC5cclxuKiBAcGFyYW0gcmVxdWlyZSBUaGUgbG9hZGVyIHJlcXVpcmUgZnVuY3Rpb24gd2l0aCByZXNwZWN0IHRvIHRoZSBtb2R1bGUgdGhhdCBjb250YWluZWQgdGhlIHBsdWdpbiByZXNvdXJjZSBpbiBpdHNcclxuKiAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IGxpc3QuXHJcbiogQHBhcmFtIGxvYWQgQ2FsbGJhY2sgdG8gbG9hZGVyIHRoYXQgY29uc3VtZXMgcmVzdWx0IG9mIHBsdWdpbiBkZW1hbmQuXHJcbiovXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkKHJlc291cmNlSWQsIHJlcXVpcmUsIGxvYWQsIGNvbmZpZykge1xyXG4gICAgcmVzb3VyY2VJZCA/IHJlcXVpcmUoW3Jlc291cmNlSWRdLCBsb2FkKSA6IGxvYWQoKTtcclxufVxyXG4vKipcclxuICogQU1EIHBsdWdpbiBmdW5jdGlvbi5cclxuICpcclxuICogUmVzb2x2ZXMgcmVzb3VyY2VJZCBpbnRvIGEgbW9kdWxlIGlkIGJhc2VkIG9uIHBvc3NpYmx5LW5lc3RlZCB0ZW5hcnkgZXhwcmVzc2lvbiB0aGF0IGJyYW5jaGVzIG9uIGhhcyBmZWF0dXJlIHRlc3RcclxuICogdmFsdWUocykuXHJcbiAqXHJcbiAqIEBwYXJhbSByZXNvdXJjZUlkIFRoZSBpZCBvZiB0aGUgbW9kdWxlXHJcbiAqIEBwYXJhbSBub3JtYWxpemUgUmVzb2x2ZXMgYSByZWxhdGl2ZSBtb2R1bGUgaWQgaW50byBhbiBhYnNvbHV0ZSBtb2R1bGUgaWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocmVzb3VyY2VJZCwgbm9ybWFsaXplKSB7XHJcbiAgICBjb25zdCB0b2tlbnMgPSByZXNvdXJjZUlkLm1hdGNoKC9bXFw/Ol18W146XFw/XSovZykgfHwgW107XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBmdW5jdGlvbiBnZXQoc2tpcCkge1xyXG4gICAgICAgIGNvbnN0IHRlcm0gPSB0b2tlbnNbaSsrXTtcclxuICAgICAgICBpZiAodGVybSA9PT0gJzonKSB7XHJcbiAgICAgICAgICAgIC8vIGVtcHR5IHN0cmluZyBtb2R1bGUgbmFtZSwgcmVzb2x2ZXMgdG8gbnVsbFxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHBvc3RmaXhlZCB3aXRoIGEgPyBtZWFucyBpdCBpcyBhIGZlYXR1cmUgdG8gYnJhbmNoIG9uLCB0aGUgdGVybSBpcyB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxyXG4gICAgICAgICAgICBpZiAodG9rZW5zW2krK10gPT09ICc/Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFza2lwICYmIGhhcyh0ZXJtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoZWQgdGhlIGZlYXR1cmUsIGdldCB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgb3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRpZCBub3QgbWF0Y2gsIGdldCB0aGUgc2Vjb25kIHZhbHVlLCBwYXNzaW5nIG92ZXIgdGhlIGZpcnN0XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQoc2tpcCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYSBtb2R1bGVcclxuICAgICAgICAgICAgcmV0dXJuIHRlcm07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgaWQgPSBnZXQoKTtcclxuICAgIHJldHVybiBpZCAmJiBub3JtYWxpemUoaWQpO1xyXG59XHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhIGZlYXR1cmUgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkXHJcbiAqXHJcbiAqIEBwYXJhbSBmZWF0dXJlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZXhpc3RzKGZlYXR1cmUpIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIEJvb2xlYW4obm9ybWFsaXplZEZlYXR1cmUgaW4gc3RhdGljQ2FjaGUgfHwgbm9ybWFsaXplZEZlYXR1cmUgaW4gdGVzdENhY2hlIHx8IHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdKTtcclxufVxyXG4vKipcclxuICogUmVnaXN0ZXIgYSBuZXcgdGVzdCBmb3IgYSBuYW1lZCBmZWF0dXJlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBoYXMuYWRkKCdkb20tYWRkZXZlbnRsaXN0ZW5lcicsICEhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcik7XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGhhcy5hZGQoJ3RvdWNoLWV2ZW50cycsIGZ1bmN0aW9uICgpIHtcclxuICogICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50XHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBAcGFyYW0gZmVhdHVyZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxyXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHJlcG9ydGVkIG9mIHRoZSBmZWF0dXJlLCBvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBvbmNlIG9uIGZpcnN0IHRlc3RcclxuICogQHBhcmFtIG92ZXJ3cml0ZSBpZiBhbiBleGlzdGluZyB2YWx1ZSBzaG91bGQgYmUgb3ZlcndyaXR0ZW4uIERlZmF1bHRzIHRvIGZhbHNlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFkZChmZWF0dXJlLCB2YWx1ZSwgb3ZlcndyaXRlID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKGV4aXN0cyhub3JtYWxpemVkRmVhdHVyZSkgJiYgIW92ZXJ3cml0ZSAmJiAhKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEZlYXR1cmUgXCIke2ZlYXR1cmV9XCIgZXhpc3RzIGFuZCBvdmVyd3JpdGUgbm90IHRydWUuYCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzRmVhdHVyZVRlc3RUaGVuYWJsZSh2YWx1ZSkpIHtcclxuICAgICAgICB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdID0gdmFsdWUudGhlbigocmVzb2x2ZWRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0ZXN0Q2FjaGVbZmVhdHVyZV0gPSByZXNvbHZlZFZhbHVlO1xyXG4gICAgICAgICAgICBkZWxldGUgdGVzdFRoZW5hYmxlc1tmZWF0dXJlXTtcclxuICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXSA9IHZhbHVlO1xyXG4gICAgICAgIGRlbGV0ZSB0ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgbmFtZWQgZmVhdHVyZS5cclxuICpcclxuICogQHBhcmFtIGZlYXR1cmUgVGhlIG5hbWUgKGlmIGEgc3RyaW5nKSBvciBpZGVudGlmaWVyIChpZiBhbiBpbnRlZ2VyKSBvZiB0aGUgZmVhdHVyZSB0byB0ZXN0LlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzKGZlYXR1cmUpIHtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBjb25zdCBub3JtYWxpemVkRmVhdHVyZSA9IGZlYXR1cmUudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChub3JtYWxpemVkRmVhdHVyZSBpbiBzdGF0aWNDYWNoZSkge1xyXG4gICAgICAgIHJlc3VsdCA9IHN0YXRpY0NhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXSA9IHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdLmNhbGwobnVsbCk7XHJcbiAgICAgICAgZGVsZXRlIHRlc3RGdW5jdGlvbnNbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9ybWFsaXplZEZlYXR1cmUgaW4gdGVzdENhY2hlKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZlYXR1cmUgaW4gdGVzdFRoZW5hYmxlcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEF0dGVtcHQgdG8gZGV0ZWN0IHVucmVnaXN0ZXJlZCBoYXMgZmVhdHVyZSBcIiR7ZmVhdHVyZX1cImApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG4vKlxyXG4gKiBPdXQgb2YgdGhlIGJveCBmZWF0dXJlIHRlc3RzXHJcbiAqL1xyXG4vKiBFbnZpcm9ubWVudHMgKi9cclxuLyogVXNlZCBhcyBhIHZhbHVlIHRvIHByb3ZpZGUgYSBkZWJ1ZyBvbmx5IGNvZGUgcGF0aCAqL1xyXG5hZGQoJ2RlYnVnJywgdHJ1ZSk7XHJcbi8qIERldGVjdHMgaWYgdGhlIGVudmlyb25tZW50IGlzIFwiYnJvd3NlciBsaWtlXCIgKi9cclxuYWRkKCdob3N0LWJyb3dzZXInLCB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpO1xyXG4vKiBEZXRlY3RzIGlmIHRoZSBlbnZpcm9ubWVudCBhcHBlYXJzIHRvIGJlIE5vZGVKUyAqL1xyXG5hZGQoJ2hvc3Qtbm9kZScsIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpIHtcclxuICAgICAgICByZXR1cm4gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO1xyXG4gICAgfVxyXG59KTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvaGFzL2hhcy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9oYXMvaGFzLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBpc0FycmF5TGlrZSwgU2hpbUl0ZXJhdG9yIH0gZnJvbSAnLi9pdGVyYXRvcic7XHJcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgeyBpcyBhcyBvYmplY3RJcyB9IGZyb20gJy4vb2JqZWN0JztcclxuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcclxuaW1wb3J0ICcuL1N5bWJvbCc7XHJcbmV4cG9ydCBsZXQgTWFwID0gZ2xvYmFsLk1hcDtcclxuaWYgKCF0cnVlKSB7XHJcbiAgICBNYXAgPSAoX2EgPSBjbGFzcyBNYXAge1xyXG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnTWFwJztcclxuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVyYWJsZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEFuIGFsdGVybmF0aXZlIHRvIEFycmF5LnByb3RvdHlwZS5pbmRleE9mIHVzaW5nIE9iamVjdC5pc1xyXG4gICAgICAgICAgICAgKiB0byBjaGVjayBmb3IgZXF1YWxpdHkuIFNlZSBodHRwOi8vbXpsLmxhLzF6dUtPMlZcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIF9pbmRleE9mS2V5KGtleXMsIGtleSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0SXMoa2V5c1tpXSwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2V0IHNpemUoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fa2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xlYXIoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzLmxlbmd0aCA9IHRoaXMuX3ZhbHVlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlbGV0ZShrZXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2tleXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZW50cmllcygpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX2tleXMubWFwKChrZXksIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2tleSwgdGhpcy5fdmFsdWVzW2ldXTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaGltSXRlcmF0b3IodmFsdWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3JFYWNoKGNhbGxiYWNrLCBjb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gdGhpcy5fa2V5cztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX3ZhbHVlcztcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCB2YWx1ZXNbaV0sIGtleXNbaV0sIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdldChrZXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IHRoaXMuX3ZhbHVlc1tpbmRleF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaGFzKGtleSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KSA+IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGtleXMoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih0aGlzLl9rZXlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXQoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCA8IDAgPyB0aGlzLl9rZXlzLmxlbmd0aCA6IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5c1tpbmRleF0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXNbaW5kZXhdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YWx1ZXMoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcih0aGlzLl92YWx1ZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfYVtTeW1ib2wuc3BlY2llc10gPSBfYSxcclxuICAgICAgICBfYSk7XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgTWFwO1xyXG52YXIgX2E7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1hcC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vTWFwLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vTWFwLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcclxuaW1wb3J0IHsgcXVldWVNaWNyb1Rhc2sgfSBmcm9tICcuL3N1cHBvcnQvcXVldWUnO1xyXG5pbXBvcnQgJy4vU3ltYm9sJztcclxuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcclxuZXhwb3J0IGxldCBTaGltUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xyXG5leHBvcnQgY29uc3QgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJztcclxufTtcclxuaWYgKCF0cnVlKSB7XHJcbiAgICBnbG9iYWwuUHJvbWlzZSA9IFNoaW1Qcm9taXNlID0gKF9hID0gY2xhc3MgUHJvbWlzZSB7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFByb21pc2UuXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBAcGFyYW0gZXhlY3V0b3JcclxuICAgICAgICAgICAgICogVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBQcm9taXNlIGlzIGluc3RhbnRpYXRlZC4gSXQgaXMgcmVzcG9uc2libGUgZm9yXHJcbiAgICAgICAgICAgICAqIHN0YXJ0aW5nIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoZW4gaXQgaXMgaW52b2tlZC5cclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogVGhlIGV4ZWN1dG9yIG11c3QgY2FsbCBlaXRoZXIgdGhlIHBhc3NlZCBgcmVzb2x2ZWAgZnVuY3Rpb24gd2hlbiB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkXHJcbiAgICAgICAgICAgICAqIHN1Y2Nlc3NmdWxseSwgb3IgdGhlIGByZWplY3RgIGZ1bmN0aW9uIHdoZW4gdGhlIG9wZXJhdGlvbiBmYWlscy5cclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEgLyogUGVuZGluZyAqLztcclxuICAgICAgICAgICAgICAgIHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdQcm9taXNlJztcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogSWYgdHJ1ZSwgdGhlIHJlc29sdXRpb24gb2YgdGhpcyBwcm9taXNlIGlzIGNoYWluZWQgKFwibG9ja2VkIGluXCIpIHRvIGFub3RoZXIgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgbGV0IGlzQ2hhaW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHByb21pc2UgaXMgaW4gYSByZXNvbHZlZCBzdGF0ZS5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZXNvbHZlZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSAhPT0gMSAvKiBQZW5kaW5nICovIHx8IGlzQ2hhaW5lZDtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIENhbGxiYWNrcyB0aGF0IHNob3VsZCBiZSBpbnZva2VkIG9uY2UgdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgbGV0IGNhbGxiYWNrcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBJbml0aWFsbHkgcHVzaGVzIGNhbGxiYWNrcyBvbnRvIGEgcXVldWUgZm9yIGV4ZWN1dGlvbiBvbmNlIHRoaXMgcHJvbWlzZSBzZXR0bGVzLiBBZnRlciB0aGUgcHJvbWlzZSBzZXR0bGVzLFxyXG4gICAgICAgICAgICAgICAgICogZW5xdWV1ZXMgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gb24gdGhlIG5leHQgZXZlbnQgbG9vcCB0dXJuLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBsZXQgd2hlbkZpbmlzaGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogU2V0dGxlcyB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIG5ld1N0YXRlIFRoZSByZXNvbHZlZCBzdGF0ZSBmb3IgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIHtUfGFueX0gdmFsdWUgVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRsZSA9IChuZXdTdGF0ZSwgdmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBBIHByb21pc2UgY2FuIG9ubHkgYmUgc2V0dGxlZCBvbmNlLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSAxIC8qIFBlbmRpbmcgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlZFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlbkZpbmlzaGVkID0gcXVldWVNaWNyb1Rhc2s7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBlbnF1ZXVlIGEgY2FsbGJhY2sgcnVubmVyIGlmIHRoZXJlIGFyZSBjYWxsYmFja3Mgc28gdGhhdCBpbml0aWFsbHkgZnVsZmlsbGVkIFByb21pc2VzIGRvbid0IGhhdmUgdG9cclxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IGFuIGV4dHJhIHR1cm4uXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrcyAmJiBjYWxsYmFja3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvVGFzayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gY2FsbGJhY2tzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzW2ldLmNhbGwobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFJlc29sdmVzIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge1R8YW55fSB2YWx1ZSBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZSA9IChuZXdTdGF0ZSwgdmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXNvbHZlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGhlbmFibGUodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnRoZW4oc2V0dGxlLmJpbmQobnVsbCwgMCAvKiBGdWxmaWxsZWQgKi8pLCBzZXR0bGUuYmluZChudWxsLCAyIC8qIFJlamVjdGVkICovKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hhaW5lZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0bGUobmV3U3RhdGUsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aGVuID0gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbkZpbmlzaGVkIGluaXRpYWxseSBxdWV1ZXMgdXAgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gYWZ0ZXIgdGhlIHByb21pc2UgaGFzIHNldHRsZWQuIE9uY2UgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb21pc2UgaGFzIHNldHRsZWQsIHdoZW5GaW5pc2hlZCB3aWxsIHNjaGVkdWxlIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHR1cm4gdGhyb3VnaCB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZlbnQgbG9vcC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlbkZpbmlzaGVkKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5zdGF0ZSA9PT0gMiAvKiBSZWplY3RlZCAqLyA/IG9uUmVqZWN0ZWQgOiBvbkZ1bGZpbGxlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNhbGxiYWNrKHRoaXMucmVzb2x2ZWRWYWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXRlID09PSAyIC8qIFJlamVjdGVkICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHRoaXMucmVzb2x2ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzb2x2ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0b3IocmVzb2x2ZS5iaW5kKG51bGwsIDAgLyogRnVsZmlsbGVkICovKSwgcmVzb2x2ZS5iaW5kKG51bGwsIDIgLyogUmVqZWN0ZWQgKi8pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRsZSgyIC8qIFJlamVjdGVkICovLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RhdGljIGFsbChpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29tcGxldGUgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvcHVsYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGwoaW5kZXgsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKytjb21wbGV0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcHVsYXRpbmcgfHwgY29tcGxldGUgPCB0b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0l0ZW0oaW5kZXgsIGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyt0b3RhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGhlbmFibGUoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFuIGl0ZW0gUHJvbWlzZSByZWplY3RzLCB0aGlzIFByb21pc2UgaXMgaW1tZWRpYXRlbHkgcmVqZWN0ZWQgd2l0aCB0aGUgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvbWlzZSdzIHJlamVjdGlvbiBlcnJvci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGhlbihmdWxmaWxsLmJpbmQobnVsbCwgaW5kZXgpLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4oZnVsZmlsbC5iaW5kKG51bGwsIGluZGV4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0l0ZW0oaSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHBvcHVsYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBmaW5pc2goKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN0YXRpYyByYWNlKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgUHJvbWlzZSBpdGVtIHJlamVjdHMsIHRoaXMgUHJvbWlzZSBpcyBpbW1lZGlhdGVseSByZWplY3RlZCB3aXRoIHRoZSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9taXNlJ3MgcmVqZWN0aW9uIGVycm9yLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50aGVuKHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoaXRlbSkudGhlbihyZXNvbHZlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN0YXRpYyByZWplY3QocmVhc29uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RhdGljIHJlc29sdmUodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2gob25SZWplY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfYVtTeW1ib2wuc3BlY2llc10gPSBTaGltUHJvbWlzZSxcclxuICAgICAgICBfYSk7XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgU2hpbVByb21pc2U7XHJcbnZhciBfYTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvbWlzZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vUHJvbWlzZS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL1Byb21pc2UubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XHJcbmltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgeyBnZXRWYWx1ZURlc2NyaXB0b3IgfSBmcm9tICcuL3N1cHBvcnQvdXRpbCc7XHJcbmV4cG9ydCBsZXQgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcclxuaWYgKCF0cnVlKSB7XHJcbiAgICAvKipcclxuICAgICAqIFRocm93cyBpZiB0aGUgdmFsdWUgaXMgbm90IGEgc3ltYm9sLCB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBTaGltXHJcbiAgICAgKiBAcGFyYW0gIHthbnl9ICAgIHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybiB7c3ltYm9sfSAgICAgICBSZXR1cm5zIHRoZSBzeW1ib2wgb3IgdGhyb3dzXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHZhbGlkYXRlU3ltYm9sID0gZnVuY3Rpb24gdmFsaWRhdGVTeW1ib2wodmFsdWUpIHtcclxuICAgICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGRlZmluZVByb3BlcnRpZXMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcclxuICAgIGNvbnN0IGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG4gICAgY29uc3QgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcclxuICAgIGNvbnN0IG9ialByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XHJcbiAgICBjb25zdCBnbG9iYWxTeW1ib2xzID0ge307XHJcbiAgICBjb25zdCBnZXRTeW1ib2xOYW1lID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjcmVhdGVkID0gY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGVzYykge1xyXG4gICAgICAgICAgICBsZXQgcG9zdGZpeCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBuYW1lO1xyXG4gICAgICAgICAgICB3aGlsZSAoY3JlYXRlZFtTdHJpbmcoZGVzYykgKyAocG9zdGZpeCB8fCAnJyldKSB7XHJcbiAgICAgICAgICAgICAgICArK3Bvc3RmaXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVzYyArPSBTdHJpbmcocG9zdGZpeCB8fCAnJyk7XHJcbiAgICAgICAgICAgIGNyZWF0ZWRbZGVzY10gPSB0cnVlO1xyXG4gICAgICAgICAgICBuYW1lID0gJ0BAJyArIGRlc2M7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkgZ3VhcmQgdW50aWwgdGhlIGR1cGxpY2F0ZSBleGVjdXRpb24gd2hlbiB0ZXN0aW5nIGNhbiBiZVxyXG4gICAgICAgICAgICAvLyBwaW5uZWQgZG93bi5cclxuICAgICAgICAgICAgaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9ialByb3RvdHlwZSwgbmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KG9ialByb3RvdHlwZSwgbmFtZSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIGdldFZhbHVlRGVzY3JpcHRvcih2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpO1xyXG4gICAgY29uc3QgSW50ZXJuYWxTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEludGVybmFsU3ltYm9sKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1R5cGVFcnJvcjogU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTeW1ib2woZGVzY3JpcHRpb24pO1xyXG4gICAgfTtcclxuICAgIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFN5bWJvbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUeXBlRXJyb3I6IFN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzeW0gPSBPYmplY3QuY3JlYXRlKEludGVybmFsU3ltYm9sLnByb3RvdHlwZSk7XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcoZGVzY3JpcHRpb24pO1xyXG4gICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0aWVzKHN5bSwge1xyXG4gICAgICAgICAgICBfX2Rlc2NyaXB0aW9uX186IGdldFZhbHVlRGVzY3JpcHRvcihkZXNjcmlwdGlvbiksXHJcbiAgICAgICAgICAgIF9fbmFtZV9fOiBnZXRWYWx1ZURlc2NyaXB0b3IoZ2V0U3ltYm9sTmFtZShkZXNjcmlwdGlvbikpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyogRGVjb3JhdGUgdGhlIFN5bWJvbCBmdW5jdGlvbiB3aXRoIHRoZSBhcHByb3ByaWF0ZSBwcm9wZXJ0aWVzICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsICdmb3InLCBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIGlmIChnbG9iYWxTeW1ib2xzW2tleV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFN5bWJvbHNba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChnbG9iYWxTeW1ib2xzW2tleV0gPSBTeW1ib2woU3RyaW5nKGtleSkpKTtcclxuICAgIH0pKTtcclxuICAgIGRlZmluZVByb3BlcnRpZXMoU3ltYm9sLCB7XHJcbiAgICAgICAga2V5Rm9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKHN5bSkge1xyXG4gICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICB2YWxpZGF0ZVN5bWJvbChzeW0pO1xyXG4gICAgICAgICAgICBmb3IgKGtleSBpbiBnbG9iYWxTeW1ib2xzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU3ltYm9sc1trZXldID09PSBzeW0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgaGFzSW5zdGFuY2U6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdoYXNJbnN0YW5jZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIGlzQ29uY2F0U3ByZWFkYWJsZTogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ2lzQ29uY2F0U3ByZWFkYWJsZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIGl0ZXJhdG9yOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcignaXRlcmF0b3InKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBtYXRjaDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ21hdGNoJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgb2JzZXJ2YWJsZTogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ29ic2VydmFibGUnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICByZXBsYWNlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigncmVwbGFjZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHNlYXJjaDogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3NlYXJjaCcpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHNwZWNpZXM6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdzcGVjaWVzJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgc3BsaXQ6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCdzcGxpdCcpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHRvUHJpbWl0aXZlOiBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcigndG9QcmltaXRpdmUnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICB0b1N0cmluZ1RhZzogZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5mb3IoJ3RvU3RyaW5nVGFnJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgdW5zY29wYWJsZXM6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wuZm9yKCd1bnNjb3BhYmxlcycpLCBmYWxzZSwgZmFsc2UpXHJcbiAgICB9KTtcclxuICAgIC8qIERlY29yYXRlIHRoZSBJbnRlcm5hbFN5bWJvbCBvYmplY3QgKi9cclxuICAgIGRlZmluZVByb3BlcnRpZXMoSW50ZXJuYWxTeW1ib2wucHJvdG90eXBlLCB7XHJcbiAgICAgICAgY29uc3RydWN0b3I6IGdldFZhbHVlRGVzY3JpcHRvcihTeW1ib2wpLFxyXG4gICAgICAgIHRvU3RyaW5nOiBnZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX25hbWVfXztcclxuICAgICAgICB9LCBmYWxzZSwgZmFsc2UpXHJcbiAgICB9KTtcclxuICAgIC8qIERlY29yYXRlIHRoZSBTeW1ib2wucHJvdG90eXBlICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0aWVzKFN5bWJvbC5wcm90b3R5cGUsIHtcclxuICAgICAgICB0b1N0cmluZzogZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdTeW1ib2wgKCcgKyB2YWxpZGF0ZVN5bWJvbCh0aGlzKS5fX2Rlc2NyaXB0aW9uX18gKyAnKSc7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdmFsdWVPZjogZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlU3ltYm9sKHRoaXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxuICAgIGRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1ByaW1pdGl2ZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7XHJcbiAgICB9KSk7XHJcbiAgICBkZWZpbmVQcm9wZXJ0eShTeW1ib2wucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIGdldFZhbHVlRGVzY3JpcHRvcignU3ltYm9sJywgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XHJcbiAgICBkZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1ByaW1pdGl2ZSwgZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSwgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XHJcbiAgICBkZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZ2V0VmFsdWVEZXNjcmlwdG9yKFN5bWJvbC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSwgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XHJcbn1cclxuLyoqXHJcbiAqIEEgY3VzdG9tIGd1YXJkIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgaXMgYSBzeW1ib2wgb3Igbm90XHJcbiAqIEBwYXJhbSAge2FueX0gICAgICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyBhIHN5bWJvbCBvciBub3RcclxuICogQHJldHVybiB7aXMgc3ltYm9sfSAgICAgICBSZXR1cm5zIHRydWUgaWYgYSBzeW1ib2wgb3Igbm90IChhbmQgbmFycm93cyB0aGUgdHlwZSBndWFyZClcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fCB2YWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykpIHx8IGZhbHNlO1xyXG59XHJcbi8qKlxyXG4gKiBGaWxsIGFueSBtaXNzaW5nIHdlbGwga25vd24gc3ltYm9scyBpZiB0aGUgbmF0aXZlIFN5bWJvbCBpcyBtaXNzaW5nIHRoZW1cclxuICovXHJcbltcclxuICAgICdoYXNJbnN0YW5jZScsXHJcbiAgICAnaXNDb25jYXRTcHJlYWRhYmxlJyxcclxuICAgICdpdGVyYXRvcicsXHJcbiAgICAnc3BlY2llcycsXHJcbiAgICAncmVwbGFjZScsXHJcbiAgICAnc2VhcmNoJyxcclxuICAgICdzcGxpdCcsXHJcbiAgICAnbWF0Y2gnLFxyXG4gICAgJ3RvUHJpbWl0aXZlJyxcclxuICAgICd0b1N0cmluZ1RhZycsXHJcbiAgICAndW5zY29wYWJsZXMnLFxyXG4gICAgJ29ic2VydmFibGUnXHJcbl0uZm9yRWFjaCgod2VsbEtub3duKSA9PiB7XHJcbiAgICBpZiAoIVN5bWJvbFt3ZWxsS25vd25dKSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN5bWJvbCwgd2VsbEtub3duLCBnZXRWYWx1ZURlc2NyaXB0b3IoU3ltYm9sLmZvcih3ZWxsS25vd24pLCBmYWxzZSwgZmFsc2UpKTtcclxuICAgIH1cclxufSk7XHJcbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3ltYm9sLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9TeW1ib2wubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9TeW1ib2wubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgeyBpc0FycmF5TGlrZSB9IGZyb20gJy4vaXRlcmF0b3InO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xyXG5pbXBvcnQgJy4vU3ltYm9sJztcclxuZXhwb3J0IGxldCBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XHJcbmlmICghdHJ1ZSkge1xyXG4gICAgY29uc3QgREVMRVRFRCA9IHt9O1xyXG4gICAgY29uc3QgZ2V0VUlEID0gZnVuY3Rpb24gZ2V0VUlEKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGdlbmVyYXRlTmFtZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IHN0YXJ0SWQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgJSAxMDAwMDAwMDApO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBnZW5lcmF0ZU5hbWUoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnX193bScgKyBnZXRVSUQoKSArIChzdGFydElkKysgKyAnX18nKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKTtcclxuICAgIFdlYWtNYXAgPSBjbGFzcyBXZWFrTWFwIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnV2Vha01hcCc7XHJcbiAgICAgICAgICAgIHRoaXMuX25hbWUgPSBnZW5lcmF0ZU5hbWUoKTtcclxuICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVyYWJsZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoaXRlbVswXSwgaXRlbVsxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2Zyb3plbkVudHJpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mcm96ZW5FbnRyaWVzW2ldLmtleSA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWxldGUoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcclxuICAgICAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IERFTEVURUQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcclxuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Zyb3plbkVudHJpZXMuc3BsaWNlKGZyb3plbkluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2V0KGtleSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURUQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcclxuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcm96ZW5FbnRyaWVzW2Zyb3plbkluZGV4XS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBoYXMoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcclxuICAgICAgICAgICAgaWYgKEJvb2xlYW4oZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURUQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcclxuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0KGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKCFrZXkgfHwgKHR5cGVvZiBrZXkgIT09ICdvYmplY3QnICYmIHR5cGVvZiBrZXkgIT09ICdmdW5jdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHZhbHVlIHVzZWQgYXMgd2VhayBtYXAga2V5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LmtleSAhPT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICBlbnRyeSA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogeyB2YWx1ZToga2V5IH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbihrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcy5wdXNoKGVudHJ5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMuX25hbWUsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZGVmYXVsdCBXZWFrTWFwO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XZWFrTWFwLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9XZWFrTWFwLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vV2Vha01hcC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XHJcbmltcG9ydCB7IGlzQXJyYXlMaWtlLCBpc0l0ZXJhYmxlIH0gZnJvbSAnLi9pdGVyYXRvcic7XHJcbmltcG9ydCB7IE1BWF9TQUZFX0lOVEVHRVIgfSBmcm9tICcuL251bWJlcic7XHJcbmltcG9ydCBoYXMgZnJvbSAnLi9zdXBwb3J0L2hhcyc7XHJcbmltcG9ydCB7IHdyYXBOYXRpdmUgfSBmcm9tICcuL3N1cHBvcnQvdXRpbCc7XHJcbmV4cG9ydCBsZXQgZnJvbTtcclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgYXJyYXkgZnJvbSB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy5cclxuICpcclxuICogQHBhcmFtIGFyZ3VtZW50cyBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgdGhlIGFycmF5XHJcbiAqIEByZXR1cm4gQW4gYXJyYXkgZnJvbSB0aGUgZ2l2ZW4gYXJndW1lbnRzXHJcbiAqL1xyXG5leHBvcnQgbGV0IG9mO1xyXG4vKiBFUzYgQXJyYXkgaW5zdGFuY2UgbWV0aG9kcyAqL1xyXG4vKipcclxuICogQ29waWVzIGRhdGEgaW50ZXJuYWxseSB3aXRoaW4gYW4gYXJyYXkgb3IgYXJyYXktbGlrZSBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBhcnJheS1saWtlIG9iamVjdFxyXG4gKiBAcGFyYW0gb2Zmc2V0IFRoZSBpbmRleCB0byBzdGFydCBjb3B5aW5nIHZhbHVlcyB0bzsgaWYgbmVnYXRpdmUsIGl0IGNvdW50cyBiYWNrd2FyZHMgZnJvbSBsZW5ndGhcclxuICogQHBhcmFtIHN0YXJ0IFRoZSBmaXJzdCAoaW5jbHVzaXZlKSBpbmRleCB0byBjb3B5OyBpZiBuZWdhdGl2ZSwgaXQgY291bnRzIGJhY2t3YXJkcyBmcm9tIGxlbmd0aFxyXG4gKiBAcGFyYW0gZW5kIFRoZSBsYXN0IChleGNsdXNpdmUpIGluZGV4IHRvIGNvcHk7IGlmIG5lZ2F0aXZlLCBpdCBjb3VudHMgYmFja3dhcmRzIGZyb20gbGVuZ3RoXHJcbiAqIEByZXR1cm4gVGhlIHRhcmdldFxyXG4gKi9cclxuZXhwb3J0IGxldCBjb3B5V2l0aGluO1xyXG4vKipcclxuICogRmlsbHMgZWxlbWVudHMgb2YgYW4gYXJyYXktbGlrZSBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgdG8gZmlsbFxyXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgZWFjaCBlbGVtZW50IG9mIHRoZSB0YXJnZXQgd2l0aFxyXG4gKiBAcGFyYW0gc3RhcnQgVGhlIGZpcnN0IGluZGV4IHRvIGZpbGxcclxuICogQHBhcmFtIGVuZCBUaGUgKGV4Y2x1c2l2ZSkgaW5kZXggYXQgd2hpY2ggdG8gc3RvcCBmaWxsaW5nXHJcbiAqIEByZXR1cm4gVGhlIGZpbGxlZCB0YXJnZXRcclxuICovXHJcbmV4cG9ydCBsZXQgZmlsbDtcclxuLyoqXHJcbiAqIEZpbmRzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBpbnN0YW5jZSBtYXRjaGluZyB0aGUgY2FsbGJhY2sgb3IgdW5kZWZpbmVkIGlmIG9uZSBpcyBub3QgZm91bmQuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgQW4gYXJyYXktbGlrZSBvYmplY3RcclxuICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gcmV0dXJuaW5nIGlmIHRoZSBjdXJyZW50IHZhbHVlIG1hdGNoZXMgYSBjcml0ZXJpYVxyXG4gKiBAcGFyYW0gdGhpc0FyZyBUaGUgZXhlY3V0aW9uIGNvbnRleHQgZm9yIHRoZSBmaW5kIGZ1bmN0aW9uXHJcbiAqIEByZXR1cm4gVGhlIGZpcnN0IGVsZW1lbnQgbWF0Y2hpbmcgdGhlIGNhbGxiYWNrLCBvciB1bmRlZmluZWQgaWYgb25lIGRvZXMgbm90IGV4aXN0XHJcbiAqL1xyXG5leHBvcnQgbGV0IGZpbmQ7XHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBzZWFyY2ggYW5kIHJldHVybnMgdGhlIGZpcnN0IGluZGV4IHdob3NlIHZhbHVlIHNhdGlzZmllcyB0aGUgcGFzc2VkIGNhbGxiYWNrLFxyXG4gKiBvciAtMSBpZiBubyB2YWx1ZXMgc2F0aXNmeSBpdC5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCBBbiBhcnJheS1saWtlIG9iamVjdFxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiByZXR1cm5pbmcgdHJ1ZSBpZiB0aGUgY3VycmVudCB2YWx1ZSBzYXRpc2ZpZXMgaXRzIGNyaXRlcmlhXHJcbiAqIEBwYXJhbSB0aGlzQXJnIFRoZSBleGVjdXRpb24gY29udGV4dCBmb3IgdGhlIGZpbmQgZnVuY3Rpb25cclxuICogQHJldHVybiBUaGUgZmlyc3QgaW5kZXggd2hvc2UgdmFsdWUgc2F0aXNmaWVzIHRoZSBwYXNzZWQgY2FsbGJhY2ssIG9yIC0xIGlmIG5vIHZhbHVlcyBzYXRpc2Z5IGl0XHJcbiAqL1xyXG5leHBvcnQgbGV0IGZpbmRJbmRleDtcclxuLyogRVM3IEFycmF5IGluc3RhbmNlIG1ldGhvZHMgKi9cclxuLyoqXHJcbiAqIERldGVybWluZXMgd2hldGhlciBhbiBhcnJheSBpbmNsdWRlcyBhIGdpdmVuIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgdGhlIHRhcmdldCBhcnJheS1saWtlIG9iamVjdFxyXG4gKiBAcGFyYW0gc2VhcmNoRWxlbWVudCB0aGUgaXRlbSB0byBzZWFyY2ggZm9yXHJcbiAqIEBwYXJhbSBmcm9tSW5kZXggdGhlIHN0YXJ0aW5nIGluZGV4IHRvIHNlYXJjaCBmcm9tXHJcbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBhcnJheSBpbmNsdWRlcyB0aGUgZWxlbWVudCwgb3RoZXJ3aXNlIGBmYWxzZWBcclxuICovXHJcbmV4cG9ydCBsZXQgaW5jbHVkZXM7XHJcbmlmICh0cnVlICYmIHRydWUpIHtcclxuICAgIGZyb20gPSBnbG9iYWwuQXJyYXkuZnJvbTtcclxuICAgIG9mID0gZ2xvYmFsLkFycmF5Lm9mO1xyXG4gICAgY29weVdpdGhpbiA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKTtcclxuICAgIGZpbGwgPSB3cmFwTmF0aXZlKGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZmlsbCk7XHJcbiAgICBmaW5kID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmZpbmQpO1xyXG4gICAgZmluZEluZGV4ID0gd3JhcE5hdGl2ZShnbG9iYWwuQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCk7XHJcbn1cclxuZWxzZSB7XHJcbiAgICAvLyBJdCBpcyBvbmx5IG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaS9pT1MgdGhhdCBoYXZlIGEgYmFkIGZpbGwgaW1wbGVtZW50YXRpb24gYW5kIHNvIGFyZW4ndCBpbiB0aGUgd2lsZFxyXG4gICAgLy8gVG8gbWFrZSB0aGluZ3MgZWFzaWVyLCBpZiB0aGVyZSBpcyBhIGJhZCBmaWxsIGltcGxlbWVudGF0aW9uLCB0aGUgd2hvbGUgc2V0IG9mIGZ1bmN0aW9ucyB3aWxsIGJlIGZpbGxlZFxyXG4gICAgLyoqXHJcbiAgICAgKiBFbnN1cmVzIGEgbm9uLW5lZ2F0aXZlLCBub24taW5maW5pdGUsIHNhZmUgaW50ZWdlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgdG8gdmFsaWRhdGVcclxuICAgICAqIEByZXR1cm4gQSBwcm9wZXIgbGVuZ3RoXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHRvTGVuZ3RoID0gZnVuY3Rpb24gdG9MZW5ndGgobGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGlzTmFOKGxlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpO1xyXG4gICAgICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIGxlbmd0aCA9IE1hdGguZmxvb3IobGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIGEgbm9uLW5lZ2F0aXZlLCByZWFsLCBzYWZlIGludGVnZXJcclxuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGVuZ3RoLCAwKSwgTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBGcm9tIEVTNiA3LjEuNCBUb0ludGVnZXIoKVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIHZhbHVlIHRvIGNvbnZlcnRcclxuICAgICAqIEByZXR1cm4gQW4gaW50ZWdlclxyXG4gICAgICovXHJcbiAgICBjb25zdCB0b0ludGVnZXIgPSBmdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHtcclxuICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSAwIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKHZhbHVlID4gMCA/IDEgOiAtMSkgKiBNYXRoLmZsb29yKE1hdGguYWJzKHZhbHVlKSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemVzIGFuIG9mZnNldCBhZ2FpbnN0IGEgZ2l2ZW4gbGVuZ3RoLCB3cmFwcGluZyBpdCBpZiBuZWdhdGl2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIG9yaWdpbmFsIG9mZnNldFxyXG4gICAgICogQHBhcmFtIGxlbmd0aCBUaGUgdG90YWwgbGVuZ3RoIHRvIG5vcm1hbGl6ZSBhZ2FpbnN0XHJcbiAgICAgKiBAcmV0dXJuIElmIG5lZ2F0aXZlLCBwcm92aWRlIGEgZGlzdGFuY2UgZnJvbSB0aGUgZW5kIChsZW5ndGgpOyBvdGhlcndpc2UgcHJvdmlkZSBhIGRpc3RhbmNlIGZyb20gMFxyXG4gICAgICovXHJcbiAgICBjb25zdCBub3JtYWxpemVPZmZzZXQgPSBmdW5jdGlvbiBub3JtYWxpemVPZmZzZXQodmFsdWUsIGxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA8IDAgPyBNYXRoLm1heChsZW5ndGggKyB2YWx1ZSwgMCkgOiBNYXRoLm1pbih2YWx1ZSwgbGVuZ3RoKTtcclxuICAgIH07XHJcbiAgICBmcm9tID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UsIG1hcEZ1bmN0aW9uLCB0aGlzQXJnKSB7XHJcbiAgICAgICAgaWYgKGFycmF5TGlrZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Zyb206IHJlcXVpcmVzIGFuIGFycmF5LWxpa2Ugb2JqZWN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXBGdW5jdGlvbiAmJiB0aGlzQXJnKSB7XHJcbiAgICAgICAgICAgIG1hcEZ1bmN0aW9uID0gbWFwRnVuY3Rpb24uYmluZCh0aGlzQXJnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cclxuICAgICAgICBjb25zdCBDb25zdHJ1Y3RvciA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdG9MZW5ndGgoYXJyYXlMaWtlLmxlbmd0aCk7XHJcbiAgICAgICAgLy8gU3VwcG9ydCBleHRlbnNpb25cclxuICAgICAgICBjb25zdCBhcnJheSA9IHR5cGVvZiBDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdChuZXcgQ29uc3RydWN0b3IobGVuZ3RoKSkgOiBuZXcgQXJyYXkobGVuZ3RoKTtcclxuICAgICAgICBpZiAoIWlzQXJyYXlMaWtlKGFycmF5TGlrZSkgJiYgIWlzSXRlcmFibGUoYXJyYXlMaWtlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXkgYW5kIHRoZSBub3JtYWxpemVkIGxlbmd0aCBpcyAwLCBqdXN0IHJldHVybiBhbiBlbXB0eSBhcnJheS4gdGhpcyBwcmV2ZW50cyBhIHByb2JsZW1cclxuICAgICAgICAvLyB3aXRoIHRoZSBpdGVyYXRpb24gb24gSUUgd2hlbiB1c2luZyBhIE5hTiBhcnJheSBsZW5ndGguXHJcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGFycmF5TGlrZSkpIHtcclxuICAgICAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlMaWtlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IG1hcEZ1bmN0aW9uID8gbWFwRnVuY3Rpb24oYXJyYXlMaWtlW2ldLCBpKSA6IGFycmF5TGlrZVtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFycmF5TGlrZSkge1xyXG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBtYXBGdW5jdGlvbiA/IG1hcEZ1bmN0aW9uKHZhbHVlLCBpKSA6IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcnJheUxpa2UubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgYXJyYXkubGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJyYXk7XHJcbiAgICB9O1xyXG4gICAgb2YgPSBmdW5jdGlvbiBvZiguLi5pdGVtcykge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpdGVtcyk7XHJcbiAgICB9O1xyXG4gICAgY29weVdpdGhpbiA9IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBvZmZzZXQsIHN0YXJ0LCBlbmQpIHtcclxuICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29weVdpdGhpbjogdGFyZ2V0IG11c3QgYmUgYW4gYXJyYXktbGlrZSBvYmplY3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XHJcbiAgICAgICAgb2Zmc2V0ID0gbm9ybWFsaXplT2Zmc2V0KHRvSW50ZWdlcihvZmZzZXQpLCBsZW5ndGgpO1xyXG4gICAgICAgIHN0YXJ0ID0gbm9ybWFsaXplT2Zmc2V0KHRvSW50ZWdlcihzdGFydCksIGxlbmd0aCk7XHJcbiAgICAgICAgZW5kID0gbm9ybWFsaXplT2Zmc2V0KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCksIGxlbmd0aCk7XHJcbiAgICAgICAgbGV0IGNvdW50ID0gTWF0aC5taW4oZW5kIC0gc3RhcnQsIGxlbmd0aCAtIG9mZnNldCk7XHJcbiAgICAgICAgbGV0IGRpcmVjdGlvbiA9IDE7XHJcbiAgICAgICAgaWYgKG9mZnNldCA+IHN0YXJ0ICYmIG9mZnNldCA8IHN0YXJ0ICsgY291bnQpIHtcclxuICAgICAgICAgICAgZGlyZWN0aW9uID0gLTE7XHJcbiAgICAgICAgICAgIHN0YXJ0ICs9IGNvdW50IC0gMTtcclxuICAgICAgICAgICAgb2Zmc2V0ICs9IGNvdW50IC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2hpbGUgKGNvdW50ID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgaW4gdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbb2Zmc2V0XSA9IHRhcmdldFtzdGFydF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGFyZ2V0W29mZnNldF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb2Zmc2V0ICs9IGRpcmVjdGlvbjtcclxuICAgICAgICAgICAgc3RhcnQgKz0gZGlyZWN0aW9uO1xyXG4gICAgICAgICAgICBjb3VudC0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfTtcclxuICAgIGZpbGwgPSBmdW5jdGlvbiBmaWxsKHRhcmdldCwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcclxuICAgICAgICBjb25zdCBsZW5ndGggPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcclxuICAgICAgICBsZXQgaSA9IG5vcm1hbGl6ZU9mZnNldCh0b0ludGVnZXIoc3RhcnQpLCBsZW5ndGgpO1xyXG4gICAgICAgIGVuZCA9IG5vcm1hbGl6ZU9mZnNldChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpLCBsZW5ndGgpO1xyXG4gICAgICAgIHdoaWxlIChpIDwgZW5kKSB7XHJcbiAgICAgICAgICAgIHRhcmdldFtpKytdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9O1xyXG4gICAgZmluZCA9IGZ1bmN0aW9uIGZpbmQodGFyZ2V0LCBjYWxsYmFjaywgdGhpc0FyZykge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmluZEluZGV4KHRhcmdldCwgY2FsbGJhY2ssIHRoaXNBcmcpO1xyXG4gICAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyB0YXJnZXRbaW5kZXhdIDogdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGZpbmRJbmRleCA9IGZ1bmN0aW9uIGZpbmRJbmRleCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKSB7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdG9MZW5ndGgodGFyZ2V0Lmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmaW5kOiBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzQXJnKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzQXJnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sodGFyZ2V0W2ldLCBpLCB0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9O1xyXG59XHJcbmlmICh0cnVlKSB7XHJcbiAgICBpbmNsdWRlcyA9IHdyYXBOYXRpdmUoZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5pbmNsdWRlcyk7XHJcbn1cclxuZWxzZSB7XHJcbiAgICAvKipcclxuICAgICAqIEVuc3VyZXMgYSBub24tbmVnYXRpdmUsIG5vbi1pbmZpbml0ZSwgc2FmZSBpbnRlZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciB0byB2YWxpZGF0ZVxyXG4gICAgICogQHJldHVybiBBIHByb3BlciBsZW5ndGhcclxuICAgICAqL1xyXG4gICAgY29uc3QgdG9MZW5ndGggPSBmdW5jdGlvbiB0b0xlbmd0aChsZW5ndGgpIHtcclxuICAgICAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKTtcclxuICAgICAgICBpZiAoaXNOYU4obGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcclxuICAgICAgICAgICAgbGVuZ3RoID0gTWF0aC5mbG9vcihsZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBFbnN1cmUgYSBub24tbmVnYXRpdmUsIHJlYWwsIHNhZmUgaW50ZWdlclxyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChsZW5ndGgsIDApLCBNQVhfU0FGRV9JTlRFR0VSKTtcclxuICAgIH07XHJcbiAgICBpbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzKHRhcmdldCwgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4ID0gMCkge1xyXG4gICAgICAgIGxldCBsZW4gPSB0b0xlbmd0aCh0YXJnZXQubGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gZnJvbUluZGV4OyBpIDwgbGVuOyArK2kpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSB0YXJnZXRbaV07XHJcbiAgICAgICAgICAgIGlmIChzZWFyY2hFbGVtZW50ID09PSBjdXJyZW50RWxlbWVudCB8fFxyXG4gICAgICAgICAgICAgICAgKHNlYXJjaEVsZW1lbnQgIT09IHNlYXJjaEVsZW1lbnQgJiYgY3VycmVudEVsZW1lbnQgIT09IGN1cnJlbnRFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxufVxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnJheS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vYXJyYXkubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9hcnJheS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiY29uc3QgZ2xvYmFsT2JqZWN0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gZ2xvYmFsIHNwZWMgZGVmaW5lcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdCBjYWxsZWQgJ2dsb2JhbCdcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG4gICAgICAgIC8vIGBnbG9iYWxgIGlzIGFsc28gZGVmaW5lZCBpbiBOb2RlSlNcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gd2luZG93IGlzIGRlZmluZWQgaW4gYnJvd3NlcnNcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIHNlbGYgaXMgZGVmaW5lZCBpbiBXZWJXb3JrZXJzXG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbn0pKCk7XG5leHBvcnQgZGVmYXVsdCBnbG9iYWxPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iYWwubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2dsb2JhbC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2dsb2JhbC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0ICcuL1N5bWJvbCc7XG5pbXBvcnQgeyBISUdIX1NVUlJPR0FURV9NQVgsIEhJR0hfU1VSUk9HQVRFX01JTiB9IGZyb20gJy4vc3RyaW5nJztcbmNvbnN0IHN0YXRpY0RvbmUgPSB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbi8qKlxuICogQSBjbGFzcyB0aGF0IF9zaGltc18gYW4gaXRlcmF0b3IgaW50ZXJmYWNlIG9uIGFycmF5IGxpa2Ugb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNoaW1JdGVyYXRvciB7XG4gICAgY29uc3RydWN0b3IobGlzdCkge1xuICAgICAgICB0aGlzLl9uZXh0SW5kZXggPSAtMTtcbiAgICAgICAgaWYgKGlzSXRlcmFibGUobGlzdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX25hdGl2ZUl0ZXJhdG9yID0gbGlzdFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ID0gbGlzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIG5leHQgaXRlcmF0aW9uIHJlc3VsdCBmb3IgdGhlIEl0ZXJhdG9yXG4gICAgICovXG4gICAgbmV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX25hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmF0aXZlSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fbGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRpY0RvbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCsrdGhpcy5fbmV4dEluZGV4IDwgdGhpcy5fbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2xpc3RbdGhpcy5fbmV4dEluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGljRG9uZTtcbiAgICB9XG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbi8qKlxuICogQSB0eXBlIGd1YXJkIGZvciBjaGVja2luZyBpZiBzb21ldGhpbmcgaGFzIGFuIEl0ZXJhYmxlIGludGVyZmFjZVxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHlwZSBndWFyZCBhZ2FpbnN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0l0ZXJhYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xufVxuLyoqXG4gKiBBIHR5cGUgZ3VhcmQgZm9yIGNoZWNraW5nIGlmIHNvbWV0aGluZyBpcyBBcnJheUxpa2VcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcic7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIGZvciBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gaXRlcmFibGUgVGhlIGl0ZXJhYmxlIG9iamVjdCB0byByZXR1cm4gdGhlIGl0ZXJhdG9yIGZvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGl0ZXJhYmxlKSB7XG4gICAgaWYgKGlzSXRlcmFibGUoaXRlcmFibGUpKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xuICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcihpdGVyYWJsZSk7XG4gICAgfVxufVxuLyoqXG4gKiBTaGltcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgZm9yIC4uLiBvZmAgYmxvY2tzXG4gKlxuICogQHBhcmFtIGl0ZXJhYmxlIFRoZSBvYmplY3QgdGhlIHByb3ZpZGVzIGFuIGludGVyYXRvciBpbnRlcmZhY2VcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggaXRlbSBvZiB0aGUgaXRlcmFibGVcbiAqIEBwYXJhbSB0aGlzQXJnIE9wdGlvbmFsIHNjb3BlIHRvIHBhc3MgdGhlIGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JPZihpdGVyYWJsZSwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBsZXQgYnJva2VuID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZG9CcmVhaygpIHtcbiAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICB9XG4gICAgLyogV2UgbmVlZCB0byBoYW5kbGUgaXRlcmF0aW9uIG9mIGRvdWJsZSBieXRlIHN0cmluZ3MgcHJvcGVybHkgKi9cbiAgICBpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpICYmIHR5cGVvZiBpdGVyYWJsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbCA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBjaGFyID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICBpZiAoaSArIDEgPCBsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSA+PSBISUdIX1NVUlJPR0FURV9NSU4gJiYgY29kZSA8PSBISUdIX1NVUlJPR0FURV9NQVgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhciArPSBpdGVyYWJsZVsrK2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgY2hhciwgaXRlcmFibGUsIGRvQnJlYWspO1xuICAgICAgICAgICAgaWYgKGJyb2tlbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBnZXQoaXRlcmFibGUpO1xuICAgICAgICBpZiAoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIGl0ZXJhYmxlLCBkb0JyZWFrKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlcmF0b3IubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2l0ZXJhdG9yLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vaXRlcmF0b3IubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xuLyoqXG4gKiBUaGUgc21hbGxlc3QgaW50ZXJ2YWwgYmV0d2VlbiB0d28gcmVwcmVzZW50YWJsZSBudW1iZXJzLlxuICovXG5leHBvcnQgY29uc3QgRVBTSUxPTiA9IDE7XG4vKipcbiAqIFRoZSBtYXhpbXVtIHNhZmUgaW50ZWdlciBpbiBKYXZhU2NyaXB0XG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbi8qKlxuICogVGhlIG1pbmltdW0gc2FmZSBpbnRlZ2VyIGluIEphdmFTY3JpcHRcbiAqL1xuZXhwb3J0IGNvbnN0IE1JTl9TQUZFX0lOVEVHRVIgPSAtTUFYX1NBRkVfSU5URUdFUjtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWUgaXMgTmFOIHdpdGhvdXQgY29lcnNpb24uXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIE5hTiwgZmFsc2UgaWYgaXQgaXMgbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGdsb2JhbC5pc05hTih2YWx1ZSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlIGlzIGEgZmluaXRlIG51bWJlciB3aXRob3V0IGNvZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBmaW5pdGUsIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGaW5pdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBnbG9iYWwuaXNGaW5pdGUodmFsdWUpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLCBmYWxzZSBpZiBpdCBpcyBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyIHRoYXQgaXMgJ3NhZmUsJyBtZWFuaW5nOlxuICogICAxLiBpdCBjYW4gYmUgZXhwcmVzc2VkIGFzIGFuIElFRUUtNzU0IGRvdWJsZSBwcmVjaXNpb24gbnVtYmVyXG4gKiAgIDIuIGl0IGhhcyBhIG9uZS10by1vbmUgbWFwcGluZyB0byBhIG1hdGhlbWF0aWNhbCBpbnRlZ2VyLCBtZWFuaW5nIGl0c1xuICogICAgICBJRUVFLTc1NCByZXByZXNlbnRhdGlvbiBjYW5ub3QgYmUgdGhlIHJlc3VsdCBvZiByb3VuZGluZyBhbnkgb3RoZXJcbiAqICAgICAgaW50ZWdlciB0byBmaXQgdGhlIElFRUUtNzU0IHJlcHJlc2VudGF0aW9uXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIsIGZhbHNlIGlmIGl0IGlzIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTYWZlSW50ZWdlcih2YWx1ZSkge1xuICAgIHJldHVybiBpc0ludGVnZXIodmFsdWUpICYmIE1hdGguYWJzKHZhbHVlKSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bnVtYmVyLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9udW1iZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9udW1iZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBnbG9iYWwgZnJvbSAnLi9nbG9iYWwnO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vc3VwcG9ydC9oYXMnO1xyXG5pbXBvcnQgeyBpc1N5bWJvbCB9IGZyb20gJy4vU3ltYm9sJztcclxuZXhwb3J0IGxldCBhc3NpZ247XHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdC5cclxuICogQW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgaXMgb25lIHRoYXQgaXMgZGVmaW5lZCBkaXJlY3RseSBvbiB0aGUgb2JqZWN0IGFuZCBpcyBub3RcclxuICogaW5oZXJpdGVkIGZyb20gdGhlIG9iamVjdCdzIHByb3RvdHlwZS5cclxuICogQHBhcmFtIG8gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0gcCBOYW1lIG9mIHRoZSBwcm9wZXJ0eS5cclxuICovXHJcbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xyXG4vKipcclxuICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIG93biBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdC4gVGhlIG93biBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBhcmUgdGhvc2UgdGhhdCBhcmUgZGVmaW5lZCBkaXJlY3RseVxyXG4gKiBvbiB0aGF0IG9iamVjdCwgYW5kIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGhlIG9iamVjdCdzIHByb3RvdHlwZS4gVGhlIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGluY2x1ZGUgYm90aCBmaWVsZHMgKG9iamVjdHMpIGFuZCBmdW5jdGlvbnMuXHJcbiAqIEBwYXJhbSBvIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBvd24gcHJvcGVydGllcy5cclxuICovXHJcbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlOYW1lcztcclxuLyoqXHJcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHN5bWJvbCBwcm9wZXJ0aWVzIGZvdW5kIGRpcmVjdGx5IG9uIG9iamVjdCBvLlxyXG4gKiBAcGFyYW0gbyBPYmplY3QgdG8gcmV0cmlldmUgdGhlIHN5bWJvbHMgZnJvbS5cclxuICovXHJcbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqIEBwYXJhbSB2YWx1ZTEgVGhlIGZpcnN0IHZhbHVlLlxyXG4gKiBAcGFyYW0gdmFsdWUyIFRoZSBzZWNvbmQgdmFsdWUuXHJcbiAqL1xyXG5leHBvcnQgbGV0IGlzO1xyXG4vKipcclxuICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBvZiBhbiBvYmplY3QuXHJcbiAqIEBwYXJhbSBvIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLiBUaGlzIGNhbiBiZSBhbiBvYmplY3QgdGhhdCB5b3UgY3JlYXRlZCBvciBhbiBleGlzdGluZyBEb2N1bWVudCBPYmplY3QgTW9kZWwgKERPTSkgb2JqZWN0LlxyXG4gKi9cclxuZXhwb3J0IGxldCBrZXlzO1xyXG4vKiBFUzcgT2JqZWN0IHN0YXRpYyBtZXRob2RzICovXHJcbmV4cG9ydCBsZXQgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcclxuZXhwb3J0IGxldCBlbnRyaWVzO1xyXG5leHBvcnQgbGV0IHZhbHVlcztcclxuaWYgKHRydWUpIHtcclxuICAgIGNvbnN0IGdsb2JhbE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XHJcbiAgICBhc3NpZ24gPSBnbG9iYWxPYmplY3QuYXNzaWduO1xyXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcclxuICAgIGdldE93blByb3BlcnR5TmFtZXMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcclxuICAgIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XHJcbiAgICBpcyA9IGdsb2JhbE9iamVjdC5pcztcclxuICAgIGtleXMgPSBnbG9iYWxPYmplY3Qua2V5cztcclxufVxyXG5lbHNlIHtcclxuICAgIGtleXMgPSBmdW5jdGlvbiBzeW1ib2xBd2FyZUtleXMobykge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvKS5maWx0ZXIoKGtleSkgPT4gIUJvb2xlYW4oa2V5Lm1hdGNoKC9eQEAuKy8pKSk7XHJcbiAgICB9O1xyXG4gICAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgLi4uc291cmNlcykge1xyXG4gICAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBUeXBlRXJyb3IgaWYgdW5kZWZpbmVkIG9yIG51bGxcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRvID0gT2JqZWN0KHRhcmdldCk7XHJcbiAgICAgICAgc291cmNlcy5mb3JFYWNoKChuZXh0U291cmNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChuZXh0U291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTa2lwIG92ZXIgaWYgdW5kZWZpbmVkIG9yIG51bGxcclxuICAgICAgICAgICAgICAgIGtleXMobmV4dFNvdXJjZSkuZm9yRWFjaCgobmV4dEtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgfTtcclxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBwcm9wKSB7XHJcbiAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG8pIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobykuZmlsdGVyKChrZXkpID0+ICFCb29sZWFuKGtleS5tYXRjaCgvXkBALisvKSkpO1xyXG4gICAgfTtcclxuICAgIGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpKVxyXG4gICAgICAgICAgICAubWFwKChrZXkpID0+IFN5bWJvbC5mb3Ioa2V5LnN1YnN0cmluZygyKSkpO1xyXG4gICAgfTtcclxuICAgIGlzID0gZnVuY3Rpb24gaXModmFsdWUxLCB2YWx1ZTIpIHtcclxuICAgICAgICBpZiAodmFsdWUxID09PSB2YWx1ZTIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlMSAhPT0gMCB8fCAxIC8gdmFsdWUxID09PSAxIC8gdmFsdWUyOyAvLyAtMFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWUxICE9PSB2YWx1ZTEgJiYgdmFsdWUyICE9PSB2YWx1ZTI7IC8vIE5hTlxyXG4gICAgfTtcclxufVxyXG5pZiAodHJ1ZSkge1xyXG4gICAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gZ2xvYmFsLk9iamVjdDtcclxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcclxuICAgIGVudHJpZXMgPSBnbG9iYWxPYmplY3QuZW50cmllcztcclxuICAgIHZhbHVlcyA9IGdsb2JhbE9iamVjdC52YWx1ZXM7XHJcbn1cclxuZWxzZSB7XHJcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5TmFtZXMobykucmVkdWNlKChwcmV2aW91cywga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzW2tleV0gPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobywga2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgICAgIH0sIHt9KTtcclxuICAgIH07XHJcbiAgICBlbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIGtleXMobykubWFwKChrZXkpID0+IFtrZXksIG9ba2V5XV0pO1xyXG4gICAgfTtcclxuICAgIHZhbHVlcyA9IGZ1bmN0aW9uIHZhbHVlcyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIGtleXMobykubWFwKChrZXkpID0+IG9ba2V5XSk7XHJcbiAgICB9O1xyXG59XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9iamVjdC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vb2JqZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgZ2xvYmFsIGZyb20gJy4vZ2xvYmFsJztcclxuaW1wb3J0IGhhcyBmcm9tICcuL3N1cHBvcnQvaGFzJztcclxuaW1wb3J0IHsgd3JhcE5hdGl2ZSB9IGZyb20gJy4vc3VwcG9ydC91dGlsJztcclxuLyoqXHJcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEhJR0hfU1VSUk9HQVRFX01JTiA9IDB4ZDgwMDtcclxuLyoqXHJcbiAqIFRoZSBtYXhpbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEhJR0hfU1VSUk9HQVRFX01BWCA9IDB4ZGJmZjtcclxuLyoqXHJcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGxvdyBzdXJyb2dhdGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgTE9XX1NVUlJPR0FURV9NSU4gPSAweGRjMDA7XHJcbi8qKlxyXG4gKiBUaGUgbWF4aW11bSBsb2NhdGlvbiBvZiBsb3cgc3Vycm9nYXRlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IExPV19TVVJST0dBVEVfTUFYID0gMHhkZmZmO1xyXG4vKiBFUzYgc3RhdGljIG1ldGhvZHMgKi9cclxuLyoqXHJcbiAqIFJldHVybiB0aGUgU3RyaW5nIHZhbHVlIHdob3NlIGVsZW1lbnRzIGFyZSwgaW4gb3JkZXIsIHRoZSBlbGVtZW50cyBpbiB0aGUgTGlzdCBlbGVtZW50cy5cclxuICogSWYgbGVuZ3RoIGlzIDAsIHRoZSBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuXHJcbiAqIEBwYXJhbSBjb2RlUG9pbnRzIFRoZSBjb2RlIHBvaW50cyB0byBnZW5lcmF0ZSB0aGUgc3RyaW5nXHJcbiAqL1xyXG5leHBvcnQgbGV0IGZyb21Db2RlUG9pbnQ7XHJcbi8qKlxyXG4gKiBgcmF3YCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgdGFnIGZ1bmN0aW9uIG9mIGEgVGFnZ2VkIFRlbXBsYXRlIFN0cmluZy4gV2hlbiBjYWxsZWRcclxuICogYXMgc3VjaCB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhIHdlbGwgZm9ybWVkIHRlbXBsYXRlIGNhbGwgc2l0ZSBvYmplY3QgYW5kIHRoZSByZXN0XHJcbiAqIHBhcmFtZXRlciB3aWxsIGNvbnRhaW4gdGhlIHN1YnN0aXR1dGlvbiB2YWx1ZXMuXHJcbiAqIEBwYXJhbSB0ZW1wbGF0ZSBBIHdlbGwtZm9ybWVkIHRlbXBsYXRlIHN0cmluZyBjYWxsIHNpdGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSBzdWJzdGl0dXRpb25zIEEgc2V0IG9mIHN1YnN0aXR1dGlvbiB2YWx1ZXMuXHJcbiAqL1xyXG5leHBvcnQgbGV0IHJhdztcclxuLyogRVM2IGluc3RhbmNlIG1ldGhvZHMgKi9cclxuLyoqXHJcbiAqIFJldHVybnMgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIE51bWJlciBsZXNzIHRoYW4gMTExNDExMiAoMHgxMTAwMDApIHRoYXQgaXMgdGhlIGNvZGUgcG9pbnRcclxuICogdmFsdWUgb2YgdGhlIFVURi0xNiBlbmNvZGVkIGNvZGUgcG9pbnQgc3RhcnRpbmcgYXQgdGhlIHN0cmluZyBlbGVtZW50IGF0IHBvc2l0aW9uIHBvcyBpblxyXG4gKiB0aGUgU3RyaW5nIHJlc3VsdGluZyBmcm9tIGNvbnZlcnRpbmcgdGhpcyBvYmplY3QgdG8gYSBTdHJpbmcuXHJcbiAqIElmIHRoZXJlIGlzIG5vIGVsZW1lbnQgYXQgdGhhdCBwb3NpdGlvbiwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuXHJcbiAqIElmIGEgdmFsaWQgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyIGRvZXMgbm90IGJlZ2luIGF0IHBvcywgdGhlIHJlc3VsdCBpcyB0aGUgY29kZSB1bml0IGF0IHBvcy5cclxuICovXHJcbmV4cG9ydCBsZXQgY29kZVBvaW50QXQ7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlcXVlbmNlIG9mIGVsZW1lbnRzIG9mIHNlYXJjaFN0cmluZyBjb252ZXJ0ZWQgdG8gYSBTdHJpbmcgaXMgdGhlXHJcbiAqIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhpcyBvYmplY3QgKGNvbnZlcnRlZCB0byBhIFN0cmluZykgc3RhcnRpbmcgYXRcclxuICogZW5kUG9zaXRpb24g4oCTIGxlbmd0aCh0aGlzKS4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXHJcbiAqL1xyXG5leHBvcnQgbGV0IGVuZHNXaXRoO1xyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHNlYXJjaFN0cmluZyBhcHBlYXJzIGFzIGEgc3Vic3RyaW5nIG9mIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGlzXHJcbiAqIG9iamVjdCB0byBhIFN0cmluZywgYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIHRoYXQgYXJlXHJcbiAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBwb3NpdGlvbjsgb3RoZXJ3aXNlLCByZXR1cm5zIGZhbHNlLlxyXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgc3RyaW5nXHJcbiAqIEBwYXJhbSBzZWFyY2hTdHJpbmcgc2VhcmNoIHN0cmluZ1xyXG4gKiBAcGFyYW0gcG9zaXRpb24gSWYgcG9zaXRpb24gaXMgdW5kZWZpbmVkLCAwIGlzIGFzc3VtZWQsIHNvIGFzIHRvIHNlYXJjaCBhbGwgb2YgdGhlIFN0cmluZy5cclxuICovXHJcbmV4cG9ydCBsZXQgaW5jbHVkZXM7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBTdHJpbmcgdmFsdWUgcmVzdWx0IG9mIG5vcm1hbGl6aW5nIHRoZSBzdHJpbmcgaW50byB0aGUgbm9ybWFsaXphdGlvbiBmb3JtXHJcbiAqIG5hbWVkIGJ5IGZvcm0gYXMgc3BlY2lmaWVkIGluIFVuaWNvZGUgU3RhbmRhcmQgQW5uZXggIzE1LCBVbmljb2RlIE5vcm1hbGl6YXRpb24gRm9ybXMuXHJcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcclxuICogQHBhcmFtIGZvcm0gQXBwbGljYWJsZSB2YWx1ZXM6IFwiTkZDXCIsIFwiTkZEXCIsIFwiTkZLQ1wiLCBvciBcIk5GS0RcIiwgSWYgbm90IHNwZWNpZmllZCBkZWZhdWx0XHJcbiAqIGlzIFwiTkZDXCJcclxuICovXHJcbmV4cG9ydCBsZXQgbm9ybWFsaXplO1xyXG4vKipcclxuICogUmV0dXJucyBhIFN0cmluZyB2YWx1ZSB0aGF0IGlzIG1hZGUgZnJvbSBjb3VudCBjb3BpZXMgYXBwZW5kZWQgdG9nZXRoZXIuIElmIGNvdW50IGlzIDAsXHJcbiAqIFQgaXMgdGhlIGVtcHR5IFN0cmluZyBpcyByZXR1cm5lZC5cclxuICogQHBhcmFtIGNvdW50IG51bWJlciBvZiBjb3BpZXMgdG8gYXBwZW5kXHJcbiAqL1xyXG5leHBvcnQgbGV0IHJlcGVhdDtcclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgb2Ygc2VhcmNoU3RyaW5nIGNvbnZlcnRlZCB0byBhIFN0cmluZyBpcyB0aGVcclxuICogc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0aGlzIG9iamVjdCAoY29udmVydGVkIHRvIGEgU3RyaW5nKSBzdGFydGluZyBhdFxyXG4gKiBwb3NpdGlvbi4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXHJcbiAqL1xyXG5leHBvcnQgbGV0IHN0YXJ0c1dpdGg7XHJcbi8qIEVTNyBpbnN0YW5jZSBtZXRob2RzICovXHJcbi8qKlxyXG4gKiBQYWRzIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoIGEgZ2l2ZW4gc3RyaW5nIChwb3NzaWJseSByZXBlYXRlZCkgc28gdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyByZWFjaGVzIGEgZ2l2ZW4gbGVuZ3RoLlxyXG4gKiBUaGUgcGFkZGluZyBpcyBhcHBsaWVkIGZyb20gdGhlIGVuZCAocmlnaHQpIG9mIHRoZSBjdXJyZW50IHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHN0cmluZ1xyXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcgb25jZSB0aGUgY3VycmVudCBzdHJpbmcgaGFzIGJlZW4gcGFkZGVkLlxyXG4gKiAgICAgICAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHN0cmluZydzIGxlbmd0aCwgdGhlIGN1cnJlbnQgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQgYXMgaXQgaXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWxsU3RyaW5nIFRoZSBzdHJpbmcgdG8gcGFkIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoLlxyXG4gKiAgICAgICAgSWYgdGhpcyBzdHJpbmcgaXMgdG9vIGxvbmcsIGl0IHdpbGwgYmUgdHJ1bmNhdGVkIGFuZCB0aGUgbGVmdC1tb3N0IHBhcnQgd2lsbCBiZSBhcHBsaWVkLlxyXG4gKiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIFwiIFwiIChVKzAwMjApLlxyXG4gKi9cclxuZXhwb3J0IGxldCBwYWRFbmQ7XHJcbi8qKlxyXG4gKiBQYWRzIHRoZSBjdXJyZW50IHN0cmluZyB3aXRoIGEgZ2l2ZW4gc3RyaW5nIChwb3NzaWJseSByZXBlYXRlZCkgc28gdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmluZyByZWFjaGVzIGEgZ2l2ZW4gbGVuZ3RoLlxyXG4gKiBUaGUgcGFkZGluZyBpcyBhcHBsaWVkIGZyb20gdGhlIHN0YXJ0IChsZWZ0KSBvZiB0aGUgY3VycmVudCBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBzdHJpbmdcclxuICogQHBhcmFtIG1heExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9uY2UgdGhlIGN1cnJlbnQgc3RyaW5nIGhhcyBiZWVuIHBhZGRlZC5cclxuICogICAgICAgIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBzdHJpbmcncyBsZW5ndGgsIHRoZSBjdXJyZW50IHN0cmluZyB3aWxsIGJlIHJldHVybmVkIGFzIGl0IGlzLlxyXG4gKlxyXG4gKiBAcGFyYW0gZmlsbFN0cmluZyBUaGUgc3RyaW5nIHRvIHBhZCB0aGUgY3VycmVudCBzdHJpbmcgd2l0aC5cclxuICogICAgICAgIElmIHRoaXMgc3RyaW5nIGlzIHRvbyBsb25nLCBpdCB3aWxsIGJlIHRydW5jYXRlZCBhbmQgdGhlIGxlZnQtbW9zdCBwYXJ0IHdpbGwgYmUgYXBwbGllZC5cclxuICogICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyBcIiBcIiAoVSswMDIwKS5cclxuICovXHJcbmV4cG9ydCBsZXQgcGFkU3RhcnQ7XHJcbmlmICh0cnVlICYmIHRydWUpIHtcclxuICAgIGZyb21Db2RlUG9pbnQgPSBnbG9iYWwuU3RyaW5nLmZyb21Db2RlUG9pbnQ7XHJcbiAgICByYXcgPSBnbG9iYWwuU3RyaW5nLnJhdztcclxuICAgIGNvZGVQb2ludEF0ID0gd3JhcE5hdGl2ZShnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdCk7XHJcbiAgICBlbmRzV2l0aCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgpO1xyXG4gICAgaW5jbHVkZXMgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKTtcclxuICAgIG5vcm1hbGl6ZSA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUubm9ybWFsaXplKTtcclxuICAgIHJlcGVhdCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucmVwZWF0KTtcclxuICAgIHN0YXJ0c1dpdGggPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgpO1xyXG59XHJcbmVsc2Uge1xyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZXMgdGhhdCB0ZXh0IGlzIGRlZmluZWQsIGFuZCBub3JtYWxpemVzIHBvc2l0aW9uIChiYXNlZCBvbiB0aGUgZ2l2ZW4gZGVmYXVsdCBpZiB0aGUgaW5wdXQgaXMgTmFOKS5cclxuICAgICAqIFVzZWQgYnkgc3RhcnRzV2l0aCwgaW5jbHVkZXMsIGFuZCBlbmRzV2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIE5vcm1hbGl6ZWQgcG9zaXRpb24uXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MgPSBmdW5jdGlvbiAobmFtZSwgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbiwgaXNFbmQgPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLicgKyBuYW1lICsgJyByZXF1aXJlcyBhIHZhbGlkIHN0cmluZyB0byBzZWFyY2ggYWdhaW5zdC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAhPT0gcG9zaXRpb24gPyAoaXNFbmQgPyBsZW5ndGggOiAwKSA6IHBvc2l0aW9uO1xyXG4gICAgICAgIHJldHVybiBbdGV4dCwgU3RyaW5nKHNlYXJjaCksIE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLCAwKSwgbGVuZ3RoKV07XHJcbiAgICB9O1xyXG4gICAgZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cykge1xyXG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcuZnJvbUNvZGVQb2ludFxyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xyXG4gICAgICAgIGNvbnN0IE1BWF9TSVpFID0gMHg0MDAwO1xyXG4gICAgICAgIGxldCBjb2RlVW5pdHMgPSBbXTtcclxuICAgICAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGNvZGVQb2ludCA9IE51bWJlcihhcmd1bWVudHNbaW5kZXhdKTtcclxuICAgICAgICAgICAgLy8gQ29kZSBwb2ludHMgbXVzdCBiZSBmaW5pdGUgaW50ZWdlcnMgd2l0aGluIHRoZSB2YWxpZCByYW5nZVxyXG4gICAgICAgICAgICBsZXQgaXNWYWxpZCA9IGlzRmluaXRlKGNvZGVQb2ludCkgJiYgTWF0aC5mbG9vcihjb2RlUG9pbnQpID09PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50ID49IDAgJiYgY29kZVBvaW50IDw9IDB4MTBmZmZmO1xyXG4gICAgICAgICAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoJ3N0cmluZy5mcm9tQ29kZVBvaW50OiBJbnZhbGlkIGNvZGUgcG9pbnQgJyArIGNvZGVQb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweGZmZmYpIHtcclxuICAgICAgICAgICAgICAgIC8vIEJNUCBjb2RlIHBvaW50XHJcbiAgICAgICAgICAgICAgICBjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQXN0cmFsIGNvZGUgcG9pbnQ7IHNwbGl0IGluIHN1cnJvZ2F0ZSBoYWx2ZXNcclxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxyXG4gICAgICAgICAgICAgICAgY29kZVBvaW50IC09IDB4MTAwMDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgSElHSF9TVVJST0dBVEVfTUlOO1xyXG4gICAgICAgICAgICAgICAgbGV0IGxvd1N1cnJvZ2F0ZSA9IGNvZGVQb2ludCAlIDB4NDAwICsgTE9XX1NVUlJPR0FURV9NSU47XHJcbiAgICAgICAgICAgICAgICBjb2RlVW5pdHMucHVzaChoaWdoU3Vycm9nYXRlLCBsb3dTdXJyb2dhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbmRleCArIDEgPT09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY29kZVVuaXRzKTtcclxuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgcmF3ID0gZnVuY3Rpb24gcmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKSB7XHJcbiAgICAgICAgbGV0IHJhd1N0cmluZ3MgPSBjYWxsU2l0ZS5yYXc7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgICAgIGxldCBudW1TdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGNhbGxTaXRlID09IG51bGwgfHwgY2FsbFNpdGUucmF3ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJhdyByZXF1aXJlcyBhIHZhbGlkIGNhbGxTaXRlIG9iamVjdCB3aXRoIGEgcmF3IHZhbHVlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSByYXdTdHJpbmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSByYXdTdHJpbmdzW2ldICsgKGkgPCBudW1TdWJzdGl0dXRpb25zICYmIGkgPCBsZW5ndGggLSAxID8gc3Vic3RpdHV0aW9uc1tpXSA6ICcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICBjb2RlUG9pbnRBdCA9IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHRleHQsIHBvc2l0aW9uID0gMCkge1xyXG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0XHJcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcuY29kZVBvaW50QXQgcmVxdXJpZXMgYSB2YWxpZCBzdHJpbmcuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRleHQubGVuZ3RoO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiAhPT0gcG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IGxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBHZXQgdGhlIGZpcnN0IGNvZGUgdW5pdFxyXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcclxuICAgICAgICBpZiAoZmlyc3QgPj0gSElHSF9TVVJST0dBVEVfTUlOICYmIGZpcnN0IDw9IEhJR0hfU1VSUk9HQVRFX01BWCAmJiBsZW5ndGggPiBwb3NpdGlvbiArIDEpIHtcclxuICAgICAgICAgICAgLy8gU3RhcnQgb2YgYSBzdXJyb2dhdGUgcGFpciAoaGlnaCBzdXJyb2dhdGUgYW5kIHRoZXJlIGlzIGEgbmV4dCBjb2RlIHVuaXQpOyBjaGVjayBmb3IgbG93IHN1cnJvZ2F0ZVxyXG4gICAgICAgICAgICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gTE9XX1NVUlJPR0FURV9NSU4gJiYgc2Vjb25kIDw9IExPV19TVVJST0dBVEVfTUFYKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGZpcnN0IC0gSElHSF9TVVJST0dBVEVfTUlOKSAqIDB4NDAwICsgc2Vjb25kIC0gTE9XX1NVUlJPR0FURV9NSU4gKyAweDEwMDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaXJzdDtcclxuICAgIH07XHJcbiAgICBlbmRzV2l0aCA9IGZ1bmN0aW9uIGVuZHNXaXRoKHRleHQsIHNlYXJjaCwgZW5kUG9zaXRpb24pIHtcclxuICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHRleHQubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBbdGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdlbmRzV2l0aCcsIHRleHQsIHNlYXJjaCwgZW5kUG9zaXRpb24sIHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZW5kUG9zaXRpb24gLSBzZWFyY2gubGVuZ3RoO1xyXG4gICAgICAgIGlmIChzdGFydCA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGV4dC5zbGljZShzdGFydCwgZW5kUG9zaXRpb24pID09PSBzZWFyY2g7XHJcbiAgICB9O1xyXG4gICAgaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uID0gMCkge1xyXG4gICAgICAgIFt0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uXSA9IG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3MoJ2luY2x1ZGVzJywgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIHRleHQuaW5kZXhPZihzZWFyY2gsIHBvc2l0aW9uKSAhPT0gLTE7XHJcbiAgICB9O1xyXG4gICAgcmVwZWF0ID0gZnVuY3Rpb24gcmVwZWF0KHRleHQsIGNvdW50ID0gMCkge1xyXG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLnJlcGVhdFxyXG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIHZhbGlkIHN0cmluZy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvdW50ICE9PSBjb3VudCkge1xyXG4gICAgICAgICAgICBjb3VudCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSBjb3VudC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgICAgIHdoaWxlIChjb3VudCkge1xyXG4gICAgICAgICAgICBpZiAoY291bnQgJSAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gdGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY291bnQgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ICs9IHRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY291bnQgPj49IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIHN0YXJ0c1dpdGgodGV4dCwgc2VhcmNoLCBwb3NpdGlvbiA9IDApIHtcclxuICAgICAgICBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoKTtcclxuICAgICAgICBbdGV4dCwgc2VhcmNoLCBwb3NpdGlvbl0gPSBub3JtYWxpemVTdWJzdHJpbmdBcmdzKCdzdGFydHNXaXRoJywgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbik7XHJcbiAgICAgICAgY29uc3QgZW5kID0gcG9zaXRpb24gKyBzZWFyY2gubGVuZ3RoO1xyXG4gICAgICAgIGlmIChlbmQgPiB0ZXh0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKHBvc2l0aW9uLCBlbmQpID09PSBzZWFyY2g7XHJcbiAgICB9O1xyXG59XHJcbmlmICh0cnVlKSB7XHJcbiAgICBwYWRFbmQgPSB3cmFwTmF0aXZlKGdsb2JhbC5TdHJpbmcucHJvdG90eXBlLnBhZEVuZCk7XHJcbiAgICBwYWRTdGFydCA9IHdyYXBOYXRpdmUoZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQpO1xyXG59XHJcbmVsc2Uge1xyXG4gICAgcGFkRW5kID0gZnVuY3Rpb24gcGFkRW5kKHRleHQsIG1heExlbmd0aCwgZmlsbFN0cmluZyA9ICcgJykge1xyXG4gICAgICAgIGlmICh0ZXh0ID09PSBudWxsIHx8IHRleHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSBJbmZpbml0eSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnBhZEVuZCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IG51bGwgfHwgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbWF4TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgICAgICBtYXhMZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RyVGV4dCA9IFN0cmluZyh0ZXh0KTtcclxuICAgICAgICBjb25zdCBwYWRkaW5nID0gbWF4TGVuZ3RoIC0gc3RyVGV4dC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHBhZGRpbmcgPiAwKSB7XHJcbiAgICAgICAgICAgIHN0clRleHQgKz1cclxuICAgICAgICAgICAgICAgIHJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsU3RyaW5nLnNsaWNlKDAsIHBhZGRpbmcgJSBmaWxsU3RyaW5nLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHJUZXh0O1xyXG4gICAgfTtcclxuICAgIHBhZFN0YXJ0ID0gZnVuY3Rpb24gcGFkU3RhcnQodGV4dCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nID0gJyAnKSB7XHJcbiAgICAgICAgaWYgKHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdHJpbmcucGFkU3RhcnQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSBudWxsIHx8IG1heExlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IG1heExlbmd0aCA8IDApIHtcclxuICAgICAgICAgICAgbWF4TGVuZ3RoID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0clRleHQgPSBTdHJpbmcodGV4dCk7XHJcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IG1heExlbmd0aCAtIHN0clRleHQubGVuZ3RoO1xyXG4gICAgICAgIGlmIChwYWRkaW5nID4gMCkge1xyXG4gICAgICAgICAgICBzdHJUZXh0ID1cclxuICAgICAgICAgICAgICAgIHJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsU3RyaW5nLnNsaWNlKDAsIHBhZGRpbmcgJSBmaWxsU3RyaW5nLmxlbmd0aCkgK1xyXG4gICAgICAgICAgICAgICAgICAgIHN0clRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHJUZXh0O1xyXG4gICAgfTtcclxufVxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJpbmcubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N0cmluZy5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N0cmluZy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGhhcywgeyBhZGQgfSBmcm9tICcuLi8uLi9oYXMvaGFzJztcclxuaW1wb3J0IGdsb2JhbCBmcm9tICcuLi9nbG9iYWwnO1xyXG5leHBvcnQgZGVmYXVsdCBoYXM7XHJcbmV4cG9ydCAqIGZyb20gJy4uLy4uL2hhcy9oYXMnO1xyXG4vKiBFQ01BU2NyaXB0IDYgYW5kIDcgRmVhdHVyZXMgKi9cclxuLyogQXJyYXkgKi9cclxuYWRkKCdlczYtYXJyYXknLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gKFsnZnJvbScsICdvZiddLmV2ZXJ5KChrZXkpID0+IGtleSBpbiBnbG9iYWwuQXJyYXkpICYmXHJcbiAgICAgICAgWydmaW5kSW5kZXgnLCAnZmluZCcsICdjb3B5V2l0aGluJ10uZXZlcnkoKGtleSkgPT4ga2V5IGluIGdsb2JhbC5BcnJheS5wcm90b3R5cGUpKTtcclxufSwgdHJ1ZSk7XHJcbmFkZCgnZXM2LWFycmF5LWZpbGwnLCAoKSA9PiB7XHJcbiAgICBpZiAoJ2ZpbGwnIGluIGdsb2JhbC5BcnJheS5wcm90b3R5cGUpIHtcclxuICAgICAgICAvKiBTb21lIHZlcnNpb25zIG9mIFNhZmFyaSBkbyBub3QgcHJvcGVybHkgaW1wbGVtZW50IHRoaXMgKi9cclxuICAgICAgICByZXR1cm4gWzFdLmZpbGwoOSwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKVswXSA9PT0gMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbmFkZCgnZXM3LWFycmF5JywgKCkgPT4gJ2luY2x1ZGVzJyBpbiBnbG9iYWwuQXJyYXkucHJvdG90eXBlLCB0cnVlKTtcclxuLyogTWFwICovXHJcbmFkZCgnZXM2LW1hcCcsICgpID0+IHtcclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLk1hcCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8qXHJcbiAgICBJRTExIGFuZCBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkgYXJlIG1pc3NpbmcgY3JpdGljYWwgRVM2IE1hcCBmdW5jdGlvbmFsaXR5XHJcbiAgICBXZSB3cmFwIHRoaXMgaW4gYSB0cnkvY2F0Y2ggYmVjYXVzZSBzb21ldGltZXMgdGhlIE1hcCBjb25zdHJ1Y3RvciBleGlzdHMsIGJ1dCBkb2VzIG5vdFxyXG4gICAgdGFrZSBhcmd1bWVudHMgKGlPUyA4LjQpXHJcbiAgICAgKi9cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBtYXAgPSBuZXcgZ2xvYmFsLk1hcChbWzAsIDFdXSk7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXAuaGFzKDApICYmXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWFwLmtleXMgPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgICAgICAgICAgIHRydWUgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXAudmFsdWVzID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWFwLmVudHJpZXMgPT09ICdmdW5jdGlvbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBub3QgdGVzdGluZyBvbiBpT1MgYXQgdGhlIG1vbWVudCAqL1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuLyogTWF0aCAqL1xyXG5hZGQoJ2VzNi1tYXRoJywgKCkgPT4ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICAnY2x6MzInLFxyXG4gICAgICAgICdzaWduJyxcclxuICAgICAgICAnbG9nMTAnLFxyXG4gICAgICAgICdsb2cyJyxcclxuICAgICAgICAnbG9nMXAnLFxyXG4gICAgICAgICdleHBtMScsXHJcbiAgICAgICAgJ2Nvc2gnLFxyXG4gICAgICAgICdzaW5oJyxcclxuICAgICAgICAndGFuaCcsXHJcbiAgICAgICAgJ2Fjb3NoJyxcclxuICAgICAgICAnYXNpbmgnLFxyXG4gICAgICAgICdhdGFuaCcsXHJcbiAgICAgICAgJ3RydW5jJyxcclxuICAgICAgICAnZnJvdW5kJyxcclxuICAgICAgICAnY2JydCcsXHJcbiAgICAgICAgJ2h5cG90J1xyXG4gICAgXS5ldmVyeSgobmFtZSkgPT4gdHlwZW9mIGdsb2JhbC5NYXRoW25hbWVdID09PSAnZnVuY3Rpb24nKTtcclxufSwgdHJ1ZSk7XHJcbmFkZCgnZXM2LW1hdGgtaW11bCcsICgpID0+IHtcclxuICAgIGlmICgnaW11bCcgaW4gZ2xvYmFsLk1hdGgpIHtcclxuICAgICAgICAvKiBTb21lIHZlcnNpb25zIG9mIFNhZmFyaSBvbiBpb3MgZG8gbm90IHByb3Blcmx5IGltcGxlbWVudCB0aGlzICovXHJcbiAgICAgICAgcmV0dXJuIE1hdGguaW11bCgweGZmZmZmZmZmLCA1KSA9PT0gLTU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG4vKiBPYmplY3QgKi9cclxuYWRkKCdlczYtb2JqZWN0JywgKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRydWUgJiZcclxuICAgICAgICBbJ2Fzc2lnbicsICdpcycsICdnZXRPd25Qcm9wZXJ0eVN5bWJvbHMnLCAnc2V0UHJvdG90eXBlT2YnXS5ldmVyeSgobmFtZSkgPT4gdHlwZW9mIGdsb2JhbC5PYmplY3RbbmFtZV0gPT09ICdmdW5jdGlvbicpO1xyXG59LCB0cnVlKTtcclxuYWRkKCdlczIwMTctb2JqZWN0JywgKCkgPT4ge1xyXG4gICAgcmV0dXJuIFsndmFsdWVzJywgJ2VudHJpZXMnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyddLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgZ2xvYmFsLk9iamVjdFtuYW1lXSA9PT0gJ2Z1bmN0aW9uJyk7XHJcbn0sIHRydWUpO1xyXG4vKiBPYnNlcnZhYmxlICovXHJcbmFkZCgnZXMtb2JzZXJ2YWJsZScsICgpID0+IHR5cGVvZiBnbG9iYWwuT2JzZXJ2YWJsZSAhPT0gJ3VuZGVmaW5lZCcsIHRydWUpO1xyXG4vKiBQcm9taXNlICovXHJcbmFkZCgnZXM2LXByb21pc2UnLCAoKSA9PiB0eXBlb2YgZ2xvYmFsLlByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIHRydWUsIHRydWUpO1xyXG4vKiBTZXQgKi9cclxuYWRkKCdlczYtc2V0JywgKCkgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuU2V0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgLyogSUUxMSBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIGFyZSBtaXNzaW5nIGNyaXRpY2FsIEVTNiBTZXQgZnVuY3Rpb25hbGl0eSAqL1xyXG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBnbG9iYWwuU2V0KFsxXSk7XHJcbiAgICAgICAgcmV0dXJuIHNldC5oYXMoMSkgJiYgJ2tleXMnIGluIHNldCAmJiB0eXBlb2Ygc2V0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbi8qIFN0cmluZyAqL1xyXG5hZGQoJ2VzNi1zdHJpbmcnLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gKFtcclxuICAgICAgICAvKiBzdGF0aWMgbWV0aG9kcyAqL1xyXG4gICAgICAgICdmcm9tQ29kZVBvaW50J1xyXG4gICAgXS5ldmVyeSgoa2V5KSA9PiB0eXBlb2YgZ2xvYmFsLlN0cmluZ1trZXldID09PSAnZnVuY3Rpb24nKSAmJlxyXG4gICAgICAgIFtcclxuICAgICAgICAgICAgLyogaW5zdGFuY2UgbWV0aG9kcyAqL1xyXG4gICAgICAgICAgICAnY29kZVBvaW50QXQnLFxyXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcclxuICAgICAgICAgICAgJ3JlcGVhdCcsXHJcbiAgICAgICAgICAgICdzdGFydHNXaXRoJyxcclxuICAgICAgICAgICAgJ2VuZHNXaXRoJyxcclxuICAgICAgICAgICAgJ2luY2x1ZGVzJ1xyXG4gICAgICAgIF0uZXZlcnkoKGtleSkgPT4gdHlwZW9mIGdsb2JhbC5TdHJpbmcucHJvdG90eXBlW2tleV0gPT09ICdmdW5jdGlvbicpKTtcclxufSwgdHJ1ZSk7XHJcbmFkZCgnZXM2LXN0cmluZy1yYXcnLCAoKSA9PiB7XHJcbiAgICBmdW5jdGlvbiBnZXRDYWxsU2l0ZShjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5jYWxsU2l0ZV07XHJcbiAgICAgICAgcmVzdWx0LnJhdyA9IGNhbGxTaXRlLnJhdztcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgaWYgKCdyYXcnIGluIGdsb2JhbC5TdHJpbmcpIHtcclxuICAgICAgICBsZXQgYiA9IDE7XHJcbiAgICAgICAgbGV0IGNhbGxTaXRlID0gZ2V0Q2FsbFNpdGUgYGFcXG4ke2J9YDtcclxuICAgICAgICBjYWxsU2l0ZS5yYXcgPSBbJ2FcXFxcbiddO1xyXG4gICAgICAgIGNvbnN0IHN1cHBvcnRzVHJ1bmMgPSBnbG9iYWwuU3RyaW5nLnJhdyhjYWxsU2l0ZSwgNDIpID09PSAnYTpcXFxcbic7XHJcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzVHJ1bmM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ2VzMjAxNy1zdHJpbmcnLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gWydwYWRTdGFydCcsICdwYWRFbmQnXS5ldmVyeSgoa2V5KSA9PiB0eXBlb2YgZ2xvYmFsLlN0cmluZy5wcm90b3R5cGVba2V5XSA9PT0gJ2Z1bmN0aW9uJyk7XHJcbn0sIHRydWUpO1xyXG4vKiBTeW1ib2wgKi9cclxuYWRkKCdlczYtc3ltYm9sJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5TeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBTeW1ib2woKSA9PT0gJ3N5bWJvbCcsIHRydWUpO1xyXG4vKiBXZWFrTWFwICovXHJcbmFkZCgnZXM2LXdlYWttYXAnLCAoKSA9PiB7XHJcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5XZWFrTWFwICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgTWFwIGZ1bmN0aW9uYWxpdHkgKi9cclxuICAgICAgICBjb25zdCBrZXkxID0ge307XHJcbiAgICAgICAgY29uc3Qga2V5MiA9IHt9O1xyXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBnbG9iYWwuV2Vha01hcChbW2tleTEsIDFdXSk7XHJcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShrZXkxKTtcclxuICAgICAgICByZXR1cm4gbWFwLmdldChrZXkxKSA9PT0gMSAmJiBtYXAuc2V0KGtleTIsIDIpID09PSBtYXAgJiYgdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbi8qIE1pc2NlbGxhbmVvdXMgZmVhdHVyZXMgKi9cclxuYWRkKCdtaWNyb3Rhc2tzJywgKCkgPT4gdHJ1ZSB8fCBmYWxzZSB8fCB0cnVlLCB0cnVlKTtcclxuYWRkKCdwb3N0bWVzc2FnZScsICgpID0+IHtcclxuICAgIC8vIElmIHdpbmRvdyBpcyB1bmRlZmluZWQsIGFuZCB3ZSBoYXZlIHBvc3RNZXNzYWdlLCBpdCBwcm9iYWJseSBtZWFucyB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIuIFdlYiB3b3JrZXJzIGhhdmVcclxuICAgIC8vIHBvc3QgbWVzc2FnZSBidXQgaXQgZG9lc24ndCB3b3JrIGhvdyB3ZSBleHBlY3QgaXQgdG8sIHNvIGl0J3MgYmVzdCBqdXN0IHRvIHByZXRlbmQgaXQgZG9lc24ndCBleGlzdC5cclxuICAgIHJldHVybiB0eXBlb2YgZ2xvYmFsLndpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGdsb2JhbC5wb3N0TWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJztcclxufSwgdHJ1ZSk7XHJcbmFkZCgncmFmJywgKCkgPT4gdHlwZW9mIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicsIHRydWUpO1xyXG5hZGQoJ3NldGltbWVkaWF0ZScsICgpID0+IHR5cGVvZiBnbG9iYWwuc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJywgdHJ1ZSk7XHJcbi8qIERPTSBGZWF0dXJlcyAqL1xyXG5hZGQoJ2RvbS1tdXRhdGlvbm9ic2VydmVyJywgKCkgPT4ge1xyXG4gICAgaWYgKHRydWUgJiYgQm9vbGVhbihnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcikpIHtcclxuICAgICAgICAvLyBJRTExIGhhcyBhbiB1bnJlbGlhYmxlIE11dGF0aW9uT2JzZXJ2ZXIgaW1wbGVtZW50YXRpb24gd2hlcmUgc2V0UHJvcGVydHkoKSBkb2VzIG5vdFxyXG4gICAgICAgIC8vIGdlbmVyYXRlIGEgbXV0YXRpb24gZXZlbnQsIG9ic2VydmVycyBjYW4gY3Jhc2gsIGFuZCB0aGUgcXVldWUgZG9lcyBub3QgZHJhaW5cclxuICAgICAgICAvLyByZWxpYWJseS4gVGhlIGZvbGxvd2luZyBmZWF0dXJlIHRlc3Qgd2FzIGFkYXB0ZWQgZnJvbVxyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3QxMGtvLzRhY2ViOGM3MTY4MWZkYjI3NWUzM2VmZTVlNTc2YjE0XHJcbiAgICAgICAgY29uc3QgZXhhbXBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXHJcbiAgICAgICAgY29uc3QgSG9zdE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcclxuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBIb3N0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7IH0pO1xyXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZXhhbXBsZSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xyXG4gICAgICAgIGV4YW1wbGUuc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnYmxvY2snKTtcclxuICAgICAgICByZXR1cm4gQm9vbGVhbihvYnNlcnZlci50YWtlUmVjb3JkcygpLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG5hZGQoJ2RvbS13ZWJhbmltYXRpb24nLCAoKSA9PiB0cnVlICYmIGdsb2JhbC5BbmltYXRpb24gIT09IHVuZGVmaW5lZCAmJiBnbG9iYWwuS2V5ZnJhbWVFZmZlY3QgIT09IHVuZGVmaW5lZCwgdHJ1ZSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhcy5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC9oYXMubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L2hhcy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuLi9nbG9iYWwnO1xyXG5pbXBvcnQgaGFzIGZyb20gJy4vaGFzJztcclxuZnVuY3Rpb24gZXhlY3V0ZVRhc2soaXRlbSkge1xyXG4gICAgaWYgKGl0ZW0gJiYgaXRlbS5pc0FjdGl2ZSAmJiBpdGVtLmNhbGxiYWNrKSB7XHJcbiAgICAgICAgaXRlbS5jYWxsYmFjaygpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGdldFF1ZXVlSGFuZGxlKGl0ZW0sIGRlc3RydWN0b3IpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7IH07XHJcbiAgICAgICAgICAgIGl0ZW0uaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaXRlbS5jYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChkZXN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBkZXN0cnVjdG9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbmxldCBjaGVja01pY3JvVGFza1F1ZXVlO1xyXG5sZXQgbWljcm9UYXNrcztcclxuLyoqXHJcbiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIHRoZSBtYWNyb3Rhc2sgcXVldWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBjYWxsYmFjayB0aGUgZnVuY3Rpb24gdG8gYmUgcXVldWVkIGFuZCBsYXRlciBleGVjdXRlZC5cclxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBxdWV1ZVRhc2sgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGRlc3RydWN0b3I7XHJcbiAgICBsZXQgZW5xdWV1ZTtcclxuICAgIC8vIFNpbmNlIHRoZSBJRSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0SW1tZWRpYXRlYCBpcyBub3QgZmxhd2xlc3MsIHdlIHdpbGwgdGVzdCBmb3IgYHBvc3RNZXNzYWdlYCBmaXJzdC5cclxuICAgIGlmICh0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgcXVldWUgPSBbXTtcclxuICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAvLyBDb25maXJtIHRoYXQgdGhlIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGN1cnJlbnQgd2luZG93IGFuZCBieSB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uXHJcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJiBldmVudC5kYXRhID09PSAnZG9qby1xdWV1ZS1tZXNzYWdlJykge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVldWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVRhc2socXVldWUuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgcXVldWUucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKCdkb2pvLXF1ZXVlLW1lc3NhZ2UnLCAnKicpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmYWxzZSkge1xyXG4gICAgICAgIGRlc3RydWN0b3IgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXRJbW1lZGlhdGUoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGRlc3RydWN0b3IgPSBnbG9iYWwuY2xlYXJUaW1lb3V0O1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pLCAwKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcXVldWVUYXNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHtcclxuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgaWQgPSBlbnF1ZXVlKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtLCBkZXN0cnVjdG9yICYmXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGRlc3RydWN0b3IoaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxyXG4gICAgcmV0dXJuIHRydWVcclxuICAgICAgICA/IHF1ZXVlVGFza1xyXG4gICAgICAgIDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHF1ZXVlVGFzayhjYWxsYmFjayk7XHJcbiAgICAgICAgfTtcclxufSkoKTtcclxuLy8gV2hlbiBubyBtZWNoYW5pc20gZm9yIHJlZ2lzdGVyaW5nIG1pY3JvdGFza3MgaXMgZXhwb3NlZCBieSB0aGUgZW52aXJvbm1lbnQsIG1pY3JvdGFza3Mgd2lsbFxyXG4vLyBiZSBxdWV1ZWQgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYSBzaW5nbGUgbWFjcm90YXNrIGJlZm9yZSB0aGUgb3RoZXIgbWFjcm90YXNrcyBhcmUgZXhlY3V0ZWQuXHJcbmlmICghdHJ1ZSkge1xyXG4gICAgbGV0IGlzTWljcm9UYXNrUXVldWVkID0gZmFsc2U7XHJcbiAgICBtaWNyb1Rhc2tzID0gW107XHJcbiAgICBjaGVja01pY3JvVGFza1F1ZXVlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghaXNNaWNyb1Rhc2tRdWV1ZWQpIHtcclxuICAgICAgICAgICAgaXNNaWNyb1Rhc2tRdWV1ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBxdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaXNNaWNyb1Rhc2tRdWV1ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChtaWNyb1Rhc2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoaXRlbSA9IG1pY3JvVGFza3Muc2hpZnQoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVRhc2soaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBTY2hlZHVsZXMgYW4gYW5pbWF0aW9uIHRhc2sgd2l0aCBgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZWAgaWYgaXQgZXhpc3RzLCBvciB3aXRoIGBxdWV1ZVRhc2tgIG90aGVyd2lzZS5cclxuICpcclxuICogU2luY2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJ3MgYmVoYXZpb3IgZG9lcyBub3QgbWF0Y2ggdGhhdCBleHBlY3RlZCBmcm9tIGBxdWV1ZVRhc2tgLCBpdCBpcyBub3QgdXNlZCB0aGVyZS5cclxuICogSG93ZXZlciwgYXQgdGltZXMgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBkZWxlZ2F0ZSB0byByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7IGhlbmNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kLlxyXG4gKlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXHJcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGEgYGRlc3Ryb3lgIG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgcHJldmVudHMgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnJvbSBleGVjdXRpbmcuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcXVldWVBbmltYXRpb25UYXNrID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiBxdWV1ZVRhc2s7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBxdWV1ZUFuaW1hdGlvblRhc2soY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBpdGVtID0ge1xyXG4gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcclxuICAgICAgICByZXR1cm4gZ2V0UXVldWVIYW5kbGUoaXRlbSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPOiBVc2UgYXNwZWN0LmJlZm9yZSB3aGVuIGl0IGlzIGF2YWlsYWJsZS5cclxuICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgPyBxdWV1ZUFuaW1hdGlvblRhc2tcclxuICAgICAgICA6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICBjaGVja01pY3JvVGFza1F1ZXVlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBxdWV1ZUFuaW1hdGlvblRhc2soY2FsbGJhY2spO1xyXG4gICAgICAgIH07XHJcbn0pKCk7XHJcbi8qKlxyXG4gKiBTY2hlZHVsZXMgYSBjYWxsYmFjayB0byB0aGUgbWljcm90YXNrIHF1ZXVlLlxyXG4gKlxyXG4gKiBBbnkgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBgcXVldWVNaWNyb1Rhc2tgIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBuZXh0IG1hY3JvdGFzay4gSWYgbm8gbmF0aXZlXHJcbiAqIG1lY2hhbmlzbSBmb3Igc2NoZWR1bGluZyBtYWNyb3Rhc2tzIGlzIGV4cG9zZWQsIHRoZW4gYW55IGNhbGxiYWNrcyB3aWxsIGJlIGZpcmVkIGJlZm9yZSBhbnkgbWFjcm90YXNrXHJcbiAqIHJlZ2lzdGVyZWQgd2l0aCBgcXVldWVUYXNrYCBvciBgcXVldWVBbmltYXRpb25UYXNrYC5cclxuICpcclxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxyXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxyXG4gKi9cclxuZXhwb3J0IGxldCBxdWV1ZU1pY3JvVGFzayA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBsZXQgZW5xdWV1ZTtcclxuICAgIGlmIChmYWxzZSkge1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBnbG9iYWwucHJvY2Vzcy5uZXh0VGljayhleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHJ1ZSkge1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBnbG9iYWwuUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4oZXhlY3V0ZVRhc2spO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0cnVlKSB7XHJcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cclxuICAgICAgICBjb25zdCBIb3N0TXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBjb25zdCBxdWV1ZSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEhvc3RNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5pc0FjdGl2ZSAmJiBpdGVtLmNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdxdWV1ZVN0YXR1cycsICcxJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBjaGVja01pY3JvVGFza1F1ZXVlKCk7XHJcbiAgICAgICAgICAgIG1pY3JvVGFza3MucHVzaChpdGVtKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB7XHJcbiAgICAgICAgICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcclxuICAgICAgICB9O1xyXG4gICAgICAgIGVucXVldWUoaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIGdldFF1ZXVlSGFuZGxlKGl0ZW0pO1xyXG4gICAgfTtcclxufSkoKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVldWUubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvcXVldWUubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L3F1ZXVlLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCIvKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHZhbHVlIHByb3BlcnR5IGRlc2NyaXB0b3JcbiAqXG4gKiBAcGFyYW0gdmFsdWUgICAgICAgIFRoZSB2YWx1ZSB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBzaG91bGQgYmUgc2V0IHRvXG4gKiBAcGFyYW0gZW51bWVyYWJsZSAgIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgZW51bWJlcmFibGUsIGRlZmF1bHRzIHRvIGZhbHNlXG4gKiBAcGFyYW0gd3JpdGFibGUgICAgIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgd3JpdGFibGUsIGRlZmF1bHRzIHRvIHRydWVcbiAqIEBwYXJhbSBjb25maWd1cmFibGUgSWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBjb25maWd1cmFibGUsIGRlZmF1bHRzIHRvIHRydWVcbiAqIEByZXR1cm4gICAgICAgICAgICAgVGhlIHByb3BlcnR5IGRlc2NyaXB0b3Igb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZURlc2NyaXB0b3IodmFsdWUsIGVudW1lcmFibGUgPSBmYWxzZSwgd3JpdGFibGUgPSB0cnVlLCBjb25maWd1cmFibGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiBlbnVtZXJhYmxlLFxuICAgICAgICB3cml0YWJsZTogd3JpdGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogY29uZmlndXJhYmxlXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTmF0aXZlKG5hdGl2ZUZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9uLmFwcGx5KHRhcmdldCwgYXJncyk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvdXRpbC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvdXRpbC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJy4uL2NvcmUvRXZlbnRlZCc7XG5leHBvcnQgY2xhc3MgSW5qZWN0b3IgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBjb25zdHJ1Y3RvcihwYXlsb2FkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3BheWxvYWQgPSBwYXlsb2FkO1xuICAgIH1cbiAgICBzZXRJbnZhbGlkYXRvcihpbnZhbGlkYXRvcikge1xuICAgICAgICB0aGlzLl9pbnZhbGlkYXRvciA9IGludmFsaWRhdG9yO1xuICAgIH1cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkO1xuICAgIH1cbiAgICBzZXQocGF5bG9hZCkge1xuICAgICAgICB0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcbiAgICAgICAgaWYgKHRoaXMuX2ludmFsaWRhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRvcigpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgSW5qZWN0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JbmplY3Rvci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL0luamVjdG9yLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL0luamVjdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnLi4vY29yZS9FdmVudGVkJztcclxuaW1wb3J0IE1hcCBmcm9tICcuLi9zaGltL01hcCc7XHJcbi8qKlxyXG4gKiBFbnVtIHRvIGlkZW50aWZ5IHRoZSB0eXBlIG9mIGV2ZW50LlxyXG4gKiBMaXN0ZW5pbmcgdG8gJ1Byb2plY3Rvcicgd2lsbCBub3RpZnkgd2hlbiBwcm9qZWN0b3IgaXMgY3JlYXRlZCBvciB1cGRhdGVkXHJcbiAqIExpc3RlbmluZyB0byAnV2lkZ2V0JyB3aWxsIG5vdGlmeSB3aGVuIHdpZGdldCByb290IGlzIGNyZWF0ZWQgb3IgdXBkYXRlZFxyXG4gKi9cclxuZXhwb3J0IHZhciBOb2RlRXZlbnRUeXBlO1xyXG4oZnVuY3Rpb24gKE5vZGVFdmVudFR5cGUpIHtcclxuICAgIE5vZGVFdmVudFR5cGVbXCJQcm9qZWN0b3JcIl0gPSBcIlByb2plY3RvclwiO1xyXG4gICAgTm9kZUV2ZW50VHlwZVtcIldpZGdldFwiXSA9IFwiV2lkZ2V0XCI7XHJcbn0pKE5vZGVFdmVudFR5cGUgfHwgKE5vZGVFdmVudFR5cGUgPSB7fSkpO1xyXG5leHBvcnQgY2xhc3MgTm9kZUhhbmRsZXIgZXh0ZW5kcyBFdmVudGVkIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgdGhpcy5fbm9kZU1hcCA9IG5ldyBNYXAoKTtcclxuICAgIH1cclxuICAgIGdldChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZU1hcC5nZXQoa2V5KTtcclxuICAgIH1cclxuICAgIGhhcyhrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZU1hcC5oYXMoa2V5KTtcclxuICAgIH1cclxuICAgIGFkZChlbGVtZW50LCBrZXkpIHtcclxuICAgICAgICB0aGlzLl9ub2RlTWFwLnNldChrZXksIGVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6IGtleSB9KTtcclxuICAgIH1cclxuICAgIGFkZFJvb3QoKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZTogTm9kZUV2ZW50VHlwZS5XaWRnZXQgfSk7XHJcbiAgICB9XHJcbiAgICBhZGRQcm9qZWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZTogTm9kZUV2ZW50VHlwZS5Qcm9qZWN0b3IgfSk7XHJcbiAgICB9XHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLl9ub2RlTWFwLmNsZWFyKCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgTm9kZUhhbmRsZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vZGVIYW5kbGVyLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBQcm9taXNlIGZyb20gJy4uL3NoaW0vUHJvbWlzZSc7XHJcbmltcG9ydCBNYXAgZnJvbSAnLi4vc2hpbS9NYXAnO1xyXG5pbXBvcnQgU3ltYm9sIGZyb20gJy4uL3NoaW0vU3ltYm9sJztcclxuaW1wb3J0IHsgRXZlbnRlZCB9IGZyb20gJy4uL2NvcmUvRXZlbnRlZCc7XHJcbi8qKlxyXG4gKiBXaWRnZXQgYmFzZSBzeW1ib2wgdHlwZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFdJREdFVF9CQVNFX1RZUEUgPSBTeW1ib2woJ1dpZGdldCBCYXNlJyk7XHJcbi8qKlxyXG4gKiBDaGVja3MgaXMgdGhlIGl0ZW0gaXMgYSBzdWJjbGFzcyBvZiBXaWRnZXRCYXNlIChvciBhIFdpZGdldEJhc2UpXHJcbiAqXHJcbiAqIEBwYXJhbSBpdGVtIHRoZSBpdGVtIHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zIHRydWUvZmFsc2UgaW5kaWNhdGluZyBpZiB0aGUgaXRlbSBpcyBhIFdpZGdldEJhc2VDb25zdHJ1Y3RvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pIHtcclxuICAgIHJldHVybiBCb29sZWFuKGl0ZW0gJiYgaXRlbS5fdHlwZSA9PT0gV0lER0VUX0JBU0VfVFlQRSk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lkZ2V0Q29uc3RydWN0b3JEZWZhdWx0RXhwb3J0KGl0ZW0pIHtcclxuICAgIHJldHVybiBCb29sZWFuKGl0ZW0gJiZcclxuICAgICAgICBpdGVtLmhhc093blByb3BlcnR5KCdfX2VzTW9kdWxlJykgJiZcclxuICAgICAgICBpdGVtLmhhc093blByb3BlcnR5KCdkZWZhdWx0JykgJiZcclxuICAgICAgICBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtLmRlZmF1bHQpKTtcclxufVxyXG4vKipcclxuICogVGhlIFJlZ2lzdHJ5IGltcGxlbWVudGF0aW9uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUmVnaXN0cnkgZXh0ZW5kcyBFdmVudGVkIHtcclxuICAgIC8qKlxyXG4gICAgICogRW1pdCBsb2FkZWQgZXZlbnQgZm9yIHJlZ2lzdHJ5IGxhYmVsXHJcbiAgICAgKi9cclxuICAgIGVtaXRMb2FkZWRFdmVudCh3aWRnZXRMYWJlbCwgaXRlbSkge1xyXG4gICAgICAgIHRoaXMuZW1pdCh7XHJcbiAgICAgICAgICAgIHR5cGU6IHdpZGdldExhYmVsLFxyXG4gICAgICAgICAgICBhY3Rpb246ICdsb2FkZWQnLFxyXG4gICAgICAgICAgICBpdGVtXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBkZWZpbmUobGFiZWwsIGl0ZW0pIHtcclxuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0UmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeSA9IG5ldyBNYXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX3dpZGdldFJlZ2lzdHJ5LmhhcyhsYWJlbCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB3aWRnZXQgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnJHtsYWJlbC50b1N0cmluZygpfSdgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCBpdGVtKTtcclxuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgaXRlbS50aGVuKCh3aWRnZXRDdG9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpZGdldEN0b3I7XHJcbiAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtKSkge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGVmaW5lSW5qZWN0b3IobGFiZWwsIGluamVjdG9yRmFjdG9yeSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JSZWdpc3RyeSA9IG5ldyBNYXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2luamVjdG9yUmVnaXN0cnkuaGFzKGxhYmVsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGluamVjdG9yIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBmb3IgJyR7bGFiZWwudG9TdHJpbmcoKX0nYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludmFsaWRhdG9yID0gbmV3IEV2ZW50ZWQoKTtcclxuICAgICAgICBjb25zdCBpbmplY3Rvckl0ZW0gPSB7XHJcbiAgICAgICAgICAgIGluamVjdG9yOiBpbmplY3RvckZhY3RvcnkoKCkgPT4gaW52YWxpZGF0b3IuZW1pdCh7IHR5cGU6ICdpbnZhbGlkYXRlJyB9KSksXHJcbiAgICAgICAgICAgIGludmFsaWRhdG9yXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LnNldChsYWJlbCwgaW5qZWN0b3JJdGVtKTtcclxuICAgICAgICB0aGlzLmVtaXRMb2FkZWRFdmVudChsYWJlbCwgaW5qZWN0b3JJdGVtKTtcclxuICAgIH1cclxuICAgIGdldChsYWJlbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fd2lkZ2V0UmVnaXN0cnkgfHwgIXRoaXMuaGFzKGxhYmVsKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3dpZGdldFJlZ2lzdHJ5LmdldChsYWJlbCk7XHJcbiAgICAgICAgaWYgKGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBpdGVtKCk7XHJcbiAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCBwcm9taXNlKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4oKHdpZGdldEN0b3IpID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzV2lkZ2V0Q29uc3RydWN0b3JEZWZhdWx0RXhwb3J0KHdpZGdldEN0b3IpKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXRDdG9yID0gd2lkZ2V0Q3Rvci5kZWZhdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgd2lkZ2V0Q3Rvcik7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCB3aWRnZXRDdG9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIHdpZGdldEN0b3I7XHJcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZ2V0SW5qZWN0b3IobGFiZWwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2luamVjdG9yUmVnaXN0cnkgfHwgIXRoaXMuaGFzSW5qZWN0b3IobGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0b3JSZWdpc3RyeS5nZXQobGFiZWwpO1xyXG4gICAgfVxyXG4gICAgaGFzKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fd2lkZ2V0UmVnaXN0cnkgJiYgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSk7XHJcbiAgICB9XHJcbiAgICBoYXNJbmplY3RvcihsYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2luamVjdG9yUmVnaXN0cnkgJiYgdGhpcy5faW5qZWN0b3JSZWdpc3RyeS5oYXMobGFiZWwpKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBSZWdpc3RyeTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVnaXN0cnkubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeS5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IHsgTWFwIH0gZnJvbSAnLi4vc2hpbS9NYXAnO1xyXG5pbXBvcnQgeyBFdmVudGVkIH0gZnJvbSAnLi4vY29yZS9FdmVudGVkJztcclxuaW1wb3J0IHsgUmVnaXN0cnkgfSBmcm9tICcuL1JlZ2lzdHJ5JztcclxuZXhwb3J0IGNsYXNzIFJlZ2lzdHJ5SGFuZGxlciBleHRlbmRzIEV2ZW50ZWQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeSgpO1xyXG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMub3duKHRoaXMuX3JlZ2lzdHJ5KTtcclxuICAgICAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlUmVnaXN0cnkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlUmVnaXN0cnkgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub3duKHsgZGVzdHJveSB9KTtcclxuICAgIH1cclxuICAgIHNldCBiYXNlKGJhc2VSZWdpc3RyeSkge1xyXG4gICAgICAgIGlmICh0aGlzLmJhc2VSZWdpc3RyeSkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZWdpc3RyeVdpZGdldExhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJhc2VSZWdpc3RyeSA9IGJhc2VSZWdpc3RyeTtcclxuICAgIH1cclxuICAgIGRlZmluZShsYWJlbCwgd2lkZ2V0KSB7XHJcbiAgICAgICAgdGhpcy5fcmVnaXN0cnkuZGVmaW5lKGxhYmVsLCB3aWRnZXQpO1xyXG4gICAgfVxyXG4gICAgZGVmaW5lSW5qZWN0b3IobGFiZWwsIGluamVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5fcmVnaXN0cnkuZGVmaW5lSW5qZWN0b3IobGFiZWwsIGluamVjdG9yKTtcclxuICAgIH1cclxuICAgIGhhcyhsYWJlbCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeS5oYXMobGFiZWwpIHx8IEJvb2xlYW4odGhpcy5iYXNlUmVnaXN0cnkgJiYgdGhpcy5iYXNlUmVnaXN0cnkuaGFzKGxhYmVsKSk7XHJcbiAgICB9XHJcbiAgICBoYXNJbmplY3RvcihsYWJlbCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeS5oYXNJbmplY3RvcihsYWJlbCkgfHwgQm9vbGVhbih0aGlzLmJhc2VSZWdpc3RyeSAmJiB0aGlzLmJhc2VSZWdpc3RyeS5oYXNJbmplY3RvcihsYWJlbCkpO1xyXG4gICAgfVxyXG4gICAgZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlID0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCAnZ2V0JywgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcCk7XHJcbiAgICB9XHJcbiAgICBnZXRJbmplY3RvcihsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSwgJ2dldEluamVjdG9yJywgdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwKTtcclxuICAgIH1cclxuICAgIF9nZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsIGdldEZ1bmN0aW9uTmFtZSwgbGFiZWxNYXApIHtcclxuICAgICAgICBjb25zdCByZWdpc3RyaWVzID0gZ2xvYmFsUHJlY2VkZW5jZSA/IFt0aGlzLmJhc2VSZWdpc3RyeSwgdGhpcy5fcmVnaXN0cnldIDogW3RoaXMuX3JlZ2lzdHJ5LCB0aGlzLmJhc2VSZWdpc3RyeV07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWdpc3RyaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcmVnaXN0cmllc1tpXTtcclxuICAgICAgICAgICAgaWYgKCFyZWdpc3RyeSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlZ2lzdHJ5W2dldEZ1bmN0aW9uTmFtZV0obGFiZWwpO1xyXG4gICAgICAgICAgICBjb25zdCByZWdpc3RlcmVkTGFiZWxzID0gbGFiZWxNYXAuZ2V0KHJlZ2lzdHJ5KSB8fCBbXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyZWRMYWJlbHMuaW5kZXhPZihsYWJlbCkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGUgPSByZWdpc3RyeS5vbihsYWJlbCwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ2xvYWRlZCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tnZXRGdW5jdGlvbk5hbWVdKGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlKSA9PT0gZXZlbnQuaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiAnaW52YWxpZGF0ZScgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm93bihoYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgbGFiZWxNYXAuc2V0KHJlZ2lzdHJ5LCBbLi4ucmVnaXN0ZXJlZExhYmVscywgbGFiZWxdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBSZWdpc3RyeUhhbmRsZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlZ2lzdHJ5SGFuZGxlci5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1JlZ2lzdHJ5SGFuZGxlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeUhhbmRsZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBNYXAgZnJvbSAnLi4vc2hpbS9NYXAnO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnLi4vc2hpbS9XZWFrTWFwJztcbmltcG9ydCBTeW1ib2wgZnJvbSAnLi4vc2hpbS9TeW1ib2wnO1xuaW1wb3J0IHsgdiB9IGZyb20gJy4vZCc7XG5pbXBvcnQgeyBhdXRvIH0gZnJvbSAnLi9kaWZmJztcbmltcG9ydCBSZWdpc3RyeUhhbmRsZXIgZnJvbSAnLi9SZWdpc3RyeUhhbmRsZXInO1xuaW1wb3J0IE5vZGVIYW5kbGVyIGZyb20gJy4vTm9kZUhhbmRsZXInO1xuaW1wb3J0IHsgd2lkZ2V0SW5zdGFuY2VNYXAgfSBmcm9tICcuL3Zkb20nO1xuaW1wb3J0IHsgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IsIFdJREdFVF9CQVNFX1RZUEUgfSBmcm9tICcuL1JlZ2lzdHJ5JztcbmNvbnN0IGRlY29yYXRvck1hcCA9IG5ldyBNYXAoKTtcbmNvbnN0IGJvdW5kQXV0byA9IGF1dG8uYmluZChudWxsKTtcbmV4cG9ydCBjb25zdCBub0JpbmQgPSBTeW1ib2wuZm9yKCdkb2pvTm9CaW5kJyk7XG4vKipcbiAqIE1haW4gd2lkZ2V0IGJhc2UgZm9yIGFsbCB3aWRnZXRzIHRvIGV4dGVuZFxuICovXG5leHBvcnQgY2xhc3MgV2lkZ2V0QmFzZSB7XG4gICAgLyoqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgaWYgaXQgaXMgdGhlIGluaXRpYWwgc2V0IHByb3BlcnRpZXMgY3ljbGVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFycmF5IG9mIHByb3BlcnR5IGtleXMgY29uc2lkZXJlZCBjaGFuZ2VkIGZyb20gdGhlIHByZXZpb3VzIHNldCBwcm9wZXJ0aWVzXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gW107XG4gICAgICAgIHRoaXMuX25vZGVIYW5kbGVyID0gbmV3IE5vZGVIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJGdW5jID0gdGhpcy5yZW5kZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYm91bmRJbnZhbGlkYXRlID0gdGhpcy5pbnZhbGlkYXRlLmJpbmQodGhpcyk7XG4gICAgICAgIHdpZGdldEluc3RhbmNlTWFwLnNldCh0aGlzLCB7XG4gICAgICAgICAgICBkaXJ0eTogdHJ1ZSxcbiAgICAgICAgICAgIG9uQXR0YWNoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkF0dGFjaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRGV0YWNoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRldGFjaCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vZGVIYW5kbGVyOiB0aGlzLl9ub2RlSGFuZGxlcixcbiAgICAgICAgICAgIHJlZ2lzdHJ5OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29yZVByb3BlcnRpZXM6IHt9LFxuICAgICAgICAgICAgcmVuZGVyaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlucHV0UHJvcGVydGllczoge31cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3J1bkFmdGVyQ29uc3RydWN0b3JzKCk7XG4gICAgfVxuICAgIG1ldGEoTWV0YVR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX21ldGFNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FjaGVkID0gdGhpcy5fbWV0YU1hcC5nZXQoTWV0YVR5cGUpO1xuICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgY2FjaGVkID0gbmV3IE1ldGFUeXBlKHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlOiB0aGlzLl9ib3VuZEludmFsaWRhdGUsXG4gICAgICAgICAgICAgICAgbm9kZUhhbmRsZXI6IHRoaXMuX25vZGVIYW5kbGVyLFxuICAgICAgICAgICAgICAgIGJpbmQ6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vd24oY2FjaGVkKTtcbiAgICAgICAgICAgIHRoaXMuX21ldGFNYXAuc2V0KE1ldGFUeXBlLCBjYWNoZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIG9uQXR0YWNoKCkge1xuICAgICAgICAvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4gICAgfVxuICAgIG9uRGV0YWNoKCkge1xuICAgICAgICAvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4gICAgfVxuICAgIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllcztcbiAgICB9XG4gICAgZ2V0IGNoYW5nZWRQcm9wZXJ0eUtleXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5c107XG4gICAgfVxuICAgIF9fc2V0Q29yZVByb3BlcnRpZXNfXyhjb3JlUHJvcGVydGllcykge1xuICAgICAgICBjb25zdCB7IGJhc2VSZWdpc3RyeSB9ID0gY29yZVByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iYXNlUmVnaXN0cnkgIT09IGJhc2VSZWdpc3RyeSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vd24odGhpcy5fcmVnaXN0cnkub24oJ2ludmFsaWRhdGUnLCB0aGlzLl9ib3VuZEludmFsaWRhdGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmJhc2UgPSBiYXNlUmVnaXN0cnk7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMgPSBjb3JlUHJvcGVydGllcztcbiAgICB9XG4gICAgX19zZXRQcm9wZXJ0aWVzX18ob3JpZ2luYWxQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgaW5zdGFuY2VEYXRhLmlucHV0UHJvcGVydGllcyA9IG9yaWdpbmFsUHJvcGVydGllcztcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX3J1bkJlZm9yZVByb3BlcnRpZXMob3JpZ2luYWxQcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ3JlZ2lzdGVyZWREaWZmUHJvcGVydHknKTtcbiAgICAgICAgY29uc3QgY2hhbmdlZFByb3BlcnR5S2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyk7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWFsUHJvcGVydGllcyA9PT0gZmFsc2UgfHwgcmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgYWxsUHJvcGVydGllcyA9IFsuLi5wcm9wZXJ0eU5hbWVzLCAuLi5PYmplY3Qua2V5cyh0aGlzLl9wcm9wZXJ0aWVzKV07XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkUHJvcGVydGllcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZGlmZlByb3BlcnR5UmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgbGV0IHJ1blJlYWN0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZFByb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hlY2tlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUHJvcGVydHkgPSB0aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UHJvcGVydHkgPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eShwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0sIGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iaW5kKTtcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuUmVhY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZkZ1bmN0aW9ucyA9IHRoaXMuZ2V0RGVjb3JhdG9yKGBkaWZmUHJvcGVydHk6JHtwcm9wZXJ0eU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZkZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGlmZkZ1bmN0aW9uc1tpXShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNoYW5nZWQgJiYgY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lIGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmUHJvcGVydHlSZXN1bHRzW3Byb3BlcnR5TmFtZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGJvdW5kQXV0byhwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlZCAmJiBjaGFuZ2VkUHJvcGVydHlLZXlzLmluZGV4T2YocHJvcGVydHlOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0eUtleXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlmZlByb3BlcnR5UmVzdWx0c1twcm9wZXJ0eU5hbWVdID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1blJlYWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWN0aW9uRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkUmVhY3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgcmVhY3Rpb25GdW5jdGlvbnMuZm9yRWFjaCgoeyByZWFjdGlvbiwgcHJvcGVydHlOYW1lIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlDaGFuZ2VkID0gY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFjdGlvblJ1biA9IGV4ZWN1dGVkUmVhY3Rpb25zLmluZGV4T2YocmVhY3Rpb24pICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5Q2hhbmdlZCAmJiAhcmVhY3Rpb25SdW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmNhbGwodGhpcywgdGhpcy5fcHJvcGVydGllcywgZGlmZlByb3BlcnR5UmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZFJlYWN0aW9ucy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IGRpZmZQcm9wZXJ0eVJlc3VsdHM7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gY2hhbmdlZFByb3BlcnR5S2V5cztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWVzW2ldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSwgaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJpbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cyA9IGNoYW5nZWRQcm9wZXJ0eUtleXM7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gICAgfVxuICAgIF9fc2V0Q2hpbGRyZW5fXyhjaGlsZHJlbikge1xuICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW4ubGVuZ3RoID4gMCB8fCBjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX19yZW5kZXJfXygpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpbnN0YW5jZURhdGEuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gdGhpcy5fcnVuQmVmb3JlUmVuZGVycygpO1xuICAgICAgICBsZXQgZE5vZGUgPSByZW5kZXIoKTtcbiAgICAgICAgZE5vZGUgPSB0aGlzLnJ1bkFmdGVyUmVuZGVycyhkTm9kZSk7XG4gICAgICAgIHRoaXMuX25vZGVIYW5kbGVyLmNsZWFyKCk7XG4gICAgICAgIHJldHVybiBkTm9kZTtcbiAgICB9XG4gICAgaW52YWxpZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmludmFsaWRhdGUpIHtcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdignZGl2Jywge30sIHRoaXMuY2hpbGRyZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBhZGQgZGVjb3JhdG9ycyB0byBXaWRnZXRCYXNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGRlY29yYXRvclxuICAgICAqL1xuICAgIGFkZERlY29yYXRvcihkZWNvcmF0b3JLZXksIHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KCdjb25zdHJ1Y3RvcicpKSB7XG4gICAgICAgICAgICBsZXQgZGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvck1hcC5nZXQodGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICBpZiAoIWRlY29yYXRvckxpc3QpIHtcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JMaXN0ID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgICAgIGRlY29yYXRvck1hcC5zZXQodGhpcy5jb25zdHJ1Y3RvciwgZGVjb3JhdG9yTGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc3BlY2lmaWNEZWNvcmF0b3JMaXN0ID0gZGVjb3JhdG9yTGlzdC5nZXQoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgICAgIGlmICghc3BlY2lmaWNEZWNvcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgc3BlY2lmaWNEZWNvcmF0b3JMaXN0ID0gW107XG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yTGlzdC5zZXQoZGVjb3JhdG9yS2V5LCBzcGVjaWZpY0RlY29yYXRvckxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3BlY2lmaWNEZWNvcmF0b3JMaXN0LnB1c2goLi4udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKGRlY29yYXRvcktleSk7XG4gICAgICAgICAgICB0aGlzLl9kZWNvcmF0b3JDYWNoZS5zZXQoZGVjb3JhdG9yS2V5LCBbLi4uZGVjb3JhdG9ycywgLi4udmFsdWVdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBidWlsZCB0aGUgbGlzdCBvZiBkZWNvcmF0b3JzIGZyb20gdGhlIGdsb2JhbCBkZWNvcmF0b3IgbWFwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSAgVGhlIGtleSBvZiB0aGUgZGVjb3JhdG9yXG4gICAgICogQHJldHVybiBBbiBhcnJheSBvZiBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYnVpbGREZWNvcmF0b3JMaXN0KGRlY29yYXRvcktleSkge1xuICAgICAgICBjb25zdCBhbGxEZWNvcmF0b3JzID0gW107XG4gICAgICAgIGxldCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgIHdoaWxlIChjb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VNYXAgPSBkZWNvcmF0b3JNYXAuZ2V0KGNvbnN0cnVjdG9yKTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU1hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBpbnN0YW5jZU1hcC5nZXQoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoZGVjb3JhdG9ycykge1xuICAgICAgICAgICAgICAgICAgICBhbGxEZWNvcmF0b3JzLnVuc2hpZnQoLi4uZGVjb3JhdG9ycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY29uc3RydWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byByZXRyaWV2ZSBkZWNvcmF0b3IgdmFsdWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGRlY29yYXRvciB2YWx1ZXNcbiAgICAgKi9cbiAgICBnZXREZWNvcmF0b3IoZGVjb3JhdG9yS2V5KSB7XG4gICAgICAgIGxldCBhbGxEZWNvcmF0b3JzID0gdGhpcy5fZGVjb3JhdG9yQ2FjaGUuZ2V0KGRlY29yYXRvcktleSk7XG4gICAgICAgIGlmIChhbGxEZWNvcmF0b3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgICAgICB9XG4gICAgICAgIGFsbERlY29yYXRvcnMgPSB0aGlzLl9idWlsZERlY29yYXRvckxpc3QoZGVjb3JhdG9yS2V5KTtcbiAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgYWxsRGVjb3JhdG9ycyk7XG4gICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCaW5kcyB1bmJvdW5kIHByb3BlcnR5IGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBiaW5kYCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgZnVuY3Rpb25zXG4gICAgICovXG4gICAgX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnR5LCBiaW5kKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIXByb3BlcnR5W25vQmluZF0gJiYgaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IocHJvcGVydHkpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiaW5kSW5mbyA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwLmdldChwcm9wZXJ0eSkgfHwge307XG4gICAgICAgICAgICBsZXQgeyBib3VuZEZ1bmMsIHNjb3BlIH0gPSBiaW5kSW5mbztcbiAgICAgICAgICAgIGlmIChib3VuZEZ1bmMgPT09IHVuZGVmaW5lZCB8fCBzY29wZSAhPT0gYmluZCkge1xuICAgICAgICAgICAgICAgIGJvdW5kRnVuYyA9IHByb3BlcnR5LmJpbmQoYmluZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAuc2V0KHByb3BlcnR5LCB7IGJvdW5kRnVuYywgc2NvcGU6IGJpbmQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm91bmRGdW5jO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gICAgZ2V0IHJlZ2lzdHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyKCk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeTtcbiAgICB9XG4gICAgX3J1bkJlZm9yZVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBiZWZvcmVQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnKTtcbiAgICAgICAgaWYgKGJlZm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJlZm9yZVByb3BlcnRpZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBiZWZvcmVQcm9wZXJ0aWVzRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uLmNhbGwodGhpcywgcHJvcGVydGllcykpO1xuICAgICAgICAgICAgfSwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydGllcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYmVmb3JlIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgdXBkYXRlZCByZW5kZXIgbWV0aG9kXG4gICAgICovXG4gICAgX3J1bkJlZm9yZVJlbmRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZVJlbmRlcnMgPSB0aGlzLmdldERlY29yYXRvcignYmVmb3JlUmVuZGVyJyk7XG4gICAgICAgIGlmIChiZWZvcmVSZW5kZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmVSZW5kZXJzLnJlZHVjZSgocmVuZGVyLCBiZWZvcmVSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZW5kZXIgPSBiZWZvcmVSZW5kZXJGdW5jdGlvbi5jYWxsKHRoaXMsIHJlbmRlciwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlciBmdW5jdGlvbiBub3QgcmV0dXJuZWQgZnJvbSBiZWZvcmVSZW5kZXIsIHVzaW5nIHByZXZpb3VzIHJlbmRlcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZFJlbmRlcjtcbiAgICAgICAgICAgIH0sIHRoaXMuX2JvdW5kUmVuZGVyRnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2JvdW5kUmVuZGVyRnVuYztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGFsbCByZWdpc3RlcmVkIGFmdGVyIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgZGVjb3JhdGVkIEROb2Rlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGROb2RlIFRoZSBETm9kZXMgdG8gcnVuIHRocm91Z2ggdGhlIGFmdGVyIHJlbmRlcnNcbiAgICAgKi9cbiAgICBydW5BZnRlclJlbmRlcnMoZE5vZGUpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJSZW5kZXJzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJyk7XG4gICAgICAgIGlmIChhZnRlclJlbmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZE5vZGUgPSBhZnRlclJlbmRlcnMucmVkdWNlKChkTm9kZSwgYWZ0ZXJSZW5kZXJGdW5jdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZnRlclJlbmRlckZ1bmN0aW9uLmNhbGwodGhpcywgZE5vZGUpO1xuICAgICAgICAgICAgfSwgZE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9tZXRhTWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX21ldGFNYXAuZm9yRWFjaCgobWV0YSkgPT4ge1xuICAgICAgICAgICAgICAgIG1ldGEuYWZ0ZXJSZW5kZXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkTm9kZTtcbiAgICB9XG4gICAgX3J1bkFmdGVyQ29uc3RydWN0b3JzKCkge1xuICAgICAgICBjb25zdCBhZnRlckNvbnN0cnVjdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdhZnRlckNvbnN0cnVjdG9yJyk7XG4gICAgICAgIGlmIChhZnRlckNvbnN0cnVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhZnRlckNvbnN0cnVjdG9ycy5mb3JFYWNoKChhZnRlckNvbnN0cnVjdG9yKSA9PiBhZnRlckNvbnN0cnVjdG9yLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG93bihoYW5kbGUpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLl9oYW5kbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IHRoaXMuX2hhbmRsZXMucG9wKCk7XG4gICAgICAgICAgICBpZiAoaGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogc3RhdGljIGlkZW50aWZpZXJcbiAqL1xuV2lkZ2V0QmFzZS5fdHlwZSA9IFdJREdFVF9CQVNFX1RZUEU7XG5leHBvcnQgZGVmYXVsdCBXaWRnZXRCYXNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2lkZ2V0QmFzZS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1dpZGdldEJhc2UubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwibGV0IGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUgPSAnJztcbmxldCBicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnJztcbmZ1bmN0aW9uIGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQpIHtcbiAgICBpZiAoJ1dlYmtpdFRyYW5zaXRpb24nIGluIGVsZW1lbnQuc3R5bGUpIHtcbiAgICAgICAgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICd3ZWJraXRUcmFuc2l0aW9uRW5kJztcbiAgICAgICAgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKCd0cmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlIHx8ICdNb3pUcmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlKSB7XG4gICAgICAgIGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUgPSAndHJhbnNpdGlvbmVuZCc7XG4gICAgICAgIGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSA9ICdhbmltYXRpb25lbmQnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIGJyb3dzZXIgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRpYWxpemUoZWxlbWVudCkge1xuICAgIGlmIChicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPT09ICcnKSB7XG4gICAgICAgIGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJ1bkFuZENsZWFuVXAoZWxlbWVudCwgc3RhcnRBbmltYXRpb24sIGZpbmlzaEFuaW1hdGlvbikge1xuICAgIGluaXRpYWxpemUoZWxlbWVudCk7XG4gICAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gICAgbGV0IHRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgZmluaXNoQW5pbWF0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHN0YXJ0QW5pbWF0aW9uKCk7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xufVxuZnVuY3Rpb24gZXhpdChub2RlLCBwcm9wZXJ0aWVzLCBleGl0QW5pbWF0aW9uLCByZW1vdmVOb2RlKSB7XG4gICAgY29uc3QgYWN0aXZlQ2xhc3MgPSBwcm9wZXJ0aWVzLmV4aXRBbmltYXRpb25BY3RpdmUgfHwgYCR7ZXhpdEFuaW1hdGlvbn0tYWN0aXZlYDtcbiAgICBydW5BbmRDbGVhblVwKG5vZGUsICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGV4aXRBbmltYXRpb24pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgICByZW1vdmVOb2RlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBlbnRlcihub2RlLCBwcm9wZXJ0aWVzLCBlbnRlckFuaW1hdGlvbikge1xuICAgIGNvbnN0IGFjdGl2ZUNsYXNzID0gcHJvcGVydGllcy5lbnRlckFuaW1hdGlvbkFjdGl2ZSB8fCBgJHtlbnRlckFuaW1hdGlvbn0tYWN0aXZlYDtcbiAgICBydW5BbmRDbGVhblVwKG5vZGUsICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGVudGVyQW5pbWF0aW9uKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChhY3RpdmVDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgIH0sICgpID0+IHtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGVudGVyQW5pbWF0aW9uKTtcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGFjdGl2ZUNsYXNzKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBlbnRlcixcbiAgICBleGl0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3NzVHJhbnNpdGlvbnMubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi4vc2hpbS9TeW1ib2wnO1xuLyoqXG4gKiBUaGUgc3ltYm9sIGlkZW50aWZpZXIgZm9yIGEgV05vZGUgdHlwZVxuICovXG5leHBvcnQgY29uc3QgV05PREUgPSBTeW1ib2woJ0lkZW50aWZpZXIgZm9yIGEgV05vZGUuJyk7XG4vKipcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBWTm9kZSB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBWTk9ERSA9IFN5bWJvbCgnSWRlbnRpZmllciBmb3IgYSBWTm9kZS4nKTtcbi8qKlxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFZOb2RlIHR5cGUgY3JlYXRlZCB1c2luZyBkb20oKVxuICovXG5leHBvcnQgY29uc3QgRE9NVk5PREUgPSBTeW1ib2woJ0lkZW50aWZpZXIgZm9yIGEgVk5vZGUgY3JlYXRlZCB1c2luZyBleGlzdGluZyBkb20uJyk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgYEROb2RlYCBpcyBhIGBXTm9kZWAgdXNpbmcgdGhlIGB0eXBlYCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXTm9kZShjaGlsZCkge1xuICAgIHJldHVybiBCb29sZWFuKGNoaWxkICYmIHR5cGVvZiBjaGlsZCAhPT0gJ3N0cmluZycgJiYgY2hpbGQudHlwZSA9PT0gV05PREUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgVk5vZGVgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVk5vZGUoY2hpbGQpIHtcbiAgICByZXR1cm4gQm9vbGVhbihjaGlsZCAmJiB0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnICYmIChjaGlsZC50eXBlID09PSBWTk9ERSB8fCBjaGlsZC50eXBlID09PSBET01WTk9ERSkpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgVk5vZGVgIGNyZWF0ZWQgd2l0aCBgZG9tKClgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRG9tVk5vZGUoY2hpbGQpIHtcbiAgICByZXR1cm4gQm9vbGVhbihjaGlsZCAmJiB0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnICYmIGNoaWxkLnR5cGUgPT09IERPTVZOT0RFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnROb2RlKHZhbHVlKSB7XG4gICAgcmV0dXJuICEhdmFsdWUudGFnTmFtZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZShkTm9kZXMsIG9wdGlvbnNPck1vZGlmaWVyLCBwcmVkaWNhdGUpIHtcbiAgICBsZXQgc2hhbGxvdyA9IGZhbHNlO1xuICAgIGxldCBtb2RpZmllcjtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNPck1vZGlmaWVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG1vZGlmaWVyID0gb3B0aW9uc09yTW9kaWZpZXI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBtb2RpZmllciA9IG9wdGlvbnNPck1vZGlmaWVyLm1vZGlmaWVyO1xuICAgICAgICBwcmVkaWNhdGUgPSBvcHRpb25zT3JNb2RpZmllci5wcmVkaWNhdGU7XG4gICAgICAgIHNoYWxsb3cgPSBvcHRpb25zT3JNb2RpZmllci5zaGFsbG93IHx8IGZhbHNlO1xuICAgIH1cbiAgICBsZXQgbm9kZXMgPSBBcnJheS5pc0FycmF5KGROb2RlcykgPyBbLi4uZE5vZGVzXSA6IFtkTm9kZXNdO1xuICAgIGZ1bmN0aW9uIGJyZWFrZXIoKSB7XG4gICAgICAgIG5vZGVzID0gW107XG4gICAgfVxuICAgIHdoaWxlIChub2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnNoaWZ0KCk7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoIXNoYWxsb3cgJiYgKGlzV05vZGUobm9kZSkgfHwgaXNWTm9kZShub2RlKSkgJiYgbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIG5vZGVzID0gWy4uLm5vZGVzLCAuLi5ub2RlLmNoaWxkcmVuXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZShub2RlKSkge1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyKG5vZGUsIGJyZWFrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkTm9kZXM7XG59XG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIGNhbGxzIHRvIGNyZWF0ZSBhIHdpZGdldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHcod2lkZ2V0Q29uc3RydWN0b3IsIHByb3BlcnRpZXMsIGNoaWxkcmVuID0gW10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgd2lkZ2V0Q29uc3RydWN0b3IsXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIHR5cGU6IFdOT0RFXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB2KHRhZywgcHJvcGVydGllc09yQ2hpbGRyZW4gPSB7fSwgY2hpbGRyZW4gPSB1bmRlZmluZWQpIHtcbiAgICBsZXQgcHJvcGVydGllcyA9IHByb3BlcnRpZXNPckNoaWxkcmVuO1xuICAgIGxldCBkZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjaztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzT3JDaGlsZHJlbikpIHtcbiAgICAgICAgY2hpbGRyZW4gPSBwcm9wZXJ0aWVzT3JDaGlsZHJlbjtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2sgPSBwcm9wZXJ0aWVzO1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRhZyxcbiAgICAgICAgZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2ssXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICB0eXBlOiBWTk9ERVxuICAgIH07XG59XG4vKipcbiAqIENyZWF0ZSBhIFZOb2RlIGZvciBhbiBleGlzdGluZyBET00gTm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvbSh7IG5vZGUsIGF0dHJzID0ge30sIHByb3BzID0ge30sIG9uID0ge30sIGRpZmZUeXBlID0gJ25vbmUnIH0sIGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGFnOiBpc0VsZW1lbnROb2RlKG5vZGUpID8gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgOiAnJyxcbiAgICAgICAgcHJvcGVydGllczogcHJvcHMsXG4gICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJzLFxuICAgICAgICBldmVudHM6IG9uLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdHlwZTogRE9NVk5PREUsXG4gICAgICAgIGRvbU5vZGU6IG5vZGUsXG4gICAgICAgIHRleHQ6IGlzRWxlbWVudE5vZGUobm9kZSkgPyB1bmRlZmluZWQgOiBub2RlLmRhdGEsXG4gICAgICAgIGRpZmZUeXBlXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWQubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2QubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmV4cG9ydCBmdW5jdGlvbiBhZnRlclJlbmRlcihtZXRob2QpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJywgcHJvcGVydHlLZXkgPyB0YXJnZXRbcHJvcGVydHlLZXldIDogbWV0aG9kKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGFmdGVyUmVuZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWZ0ZXJSZW5kZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXIubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmltcG9ydCB7IGJlZm9yZVByb3BlcnRpZXMgfSBmcm9tICcuL2JlZm9yZVByb3BlcnRpZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGFsd2F5c1JlbmRlcigpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgIGJlZm9yZVByb3BlcnRpZXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH0pKHRhcmdldCk7XG4gICAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBhbHdheXNSZW5kZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbHdheXNSZW5kZXIubWpzLm1hcFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlci5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi9oYW5kbGVEZWNvcmF0b3InO1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZVByb3BlcnRpZXMobWV0aG9kKSB7XG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdiZWZvcmVQcm9wZXJ0aWVzJywgcHJvcGVydHlLZXkgPyB0YXJnZXRbcHJvcGVydHlLZXldIDogbWV0aG9kKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGJlZm9yZVByb3BlcnRpZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iZWZvcmVQcm9wZXJ0aWVzLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9iZWZvcmVQcm9wZXJ0aWVzLm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYmVmb3JlUHJvcGVydGllcy5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IHsgQ3VzdG9tRWxlbWVudENoaWxkVHlwZSB9IGZyb20gJy4uL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCc7XG5pbXBvcnQgUmVnaXN0cnkgZnJvbSAnLi4vUmVnaXN0cnknO1xuLyoqXG4gKiBUaGlzIERlY29yYXRvciBpcyBwcm92aWRlZCBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIHRoZSBiZWhhdmlvciBvZiBhIGN1c3RvbSBlbGVtZW50LCBhbmRcbiAqIHJlZ2lzdGVycyB0aGF0IGN1c3RvbSBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tRWxlbWVudCh7IHRhZywgcHJvcGVydGllcyA9IFtdLCBhdHRyaWJ1dGVzID0gW10sIGV2ZW50cyA9IFtdLCBjaGlsZFR5cGUgPSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8sIHJlZ2lzdHJ5RmFjdG9yeSA9ICgpID0+IG5ldyBSZWdpc3RyeSgpIH0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICB0YXJnZXQucHJvdG90eXBlLl9fY3VzdG9tRWxlbWVudERlc2NyaXB0b3IgPSB7XG4gICAgICAgICAgICB0YWdOYW1lOiB0YWcsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICAgIGNoaWxkVHlwZSxcbiAgICAgICAgICAgIHJlZ2lzdHJ5RmFjdG9yeVxuICAgICAgICB9O1xuICAgIH07XG59XG5leHBvcnQgZGVmYXVsdCBjdXN0b21FbGVtZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3VzdG9tRWxlbWVudC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvY3VzdG9tRWxlbWVudC5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCB7IGhhbmRsZURlY29yYXRvciB9IGZyb20gJy4vaGFuZGxlRGVjb3JhdG9yJztcbmltcG9ydCB7IGF1dG8gfSBmcm9tICcuLy4uL2RpZmYnO1xuLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZWdpc3RlciBhIGZ1bmN0aW9uIGFzIGEgc3BlY2lmaWMgcHJvcGVydHkgZGlmZlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvZiB3aGljaCB0aGUgZGlmZiBmdW5jdGlvbiBpcyBhcHBsaWVkXG4gKiBAcGFyYW0gZGlmZlR5cGUgICAgICBUaGUgZGlmZiB0eXBlLCBkZWZhdWx0IGlzIERpZmZUeXBlLkFVVE8uXG4gKiBAcGFyYW0gZGlmZkZ1bmN0aW9uICBBIGRpZmYgZnVuY3Rpb24gdG8gcnVuIGlmIGRpZmZUeXBlIGlmIERpZmZUeXBlLkNVU1RPTVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZlByb3BlcnR5KHByb3BlcnR5TmFtZSwgZGlmZkZ1bmN0aW9uID0gYXV0bywgcmVhY3Rpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3IoKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcihgZGlmZlByb3BlcnR5OiR7cHJvcGVydHlOYW1lfWAsIGRpZmZGdW5jdGlvbi5iaW5kKG51bGwpKTtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcigncmVnaXN0ZXJlZERpZmZQcm9wZXJ0eScsIHByb3BlcnR5TmFtZSk7XG4gICAgICAgIGlmIChyZWFjdGlvbkZ1bmN0aW9uIHx8IHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdkaWZmUmVhY3Rpb24nLCB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgICAgIHJlYWN0aW9uOiBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiByZWFjdGlvbkZ1bmN0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgZGlmZlByb3BlcnR5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlmZlByb3BlcnR5Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9kaWZmUHJvcGVydHkubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9kaWZmUHJvcGVydHkubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsIi8qKlxuICogR2VuZXJpYyBkZWNvcmF0b3IgaGFuZGxlciB0byB0YWtlIGNhcmUgb2Ygd2hldGhlciBvciBub3QgdGhlIGRlY29yYXRvciB3YXMgY2FsbGVkIGF0IHRoZSBjbGFzcyBsZXZlbFxuICogb3IgdGhlIG1ldGhvZCBsZXZlbC5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdG9yKGhhbmRsZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGhhbmRsZXIodGFyZ2V0LnByb3RvdHlwZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZXIodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlRGVjb3JhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFuZGxlRGVjb3JhdG9yLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9oYW5kbGVEZWNvcmF0b3IubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9oYW5kbGVEZWNvcmF0b3IubWpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsImltcG9ydCBXZWFrTWFwIGZyb20gJy4uLy4uL3NoaW0vV2Vha01hcCc7XG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0b3IgfSBmcm9tICcuL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBiZWZvcmVQcm9wZXJ0aWVzIH0gZnJvbSAnLi9iZWZvcmVQcm9wZXJ0aWVzJztcbi8qKlxuICogTWFwIG9mIGluc3RhbmNlcyBhZ2FpbnN0IHJlZ2lzdGVyZWQgaW5qZWN0b3JzLlxuICovXG5jb25zdCByZWdpc3RlcmVkSW5qZWN0b3JzTWFwID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogRGVjb3JhdG9yIHJldHJpZXZlcyBhbiBpbmplY3RvciBmcm9tIGFuIGF2YWlsYWJsZSByZWdpc3RyeSB1c2luZyB0aGUgbmFtZSBhbmRcbiAqIGNhbGxzIHRoZSBgZ2V0UHJvcGVydGllc2AgZnVuY3Rpb24gd2l0aCB0aGUgcGF5bG9hZCBmcm9tIHRoZSBpbmplY3RvclxuICogYW5kIGN1cnJlbnQgcHJvcGVydGllcyB3aXRoIHRoZSB0aGUgaW5qZWN0ZWQgcHJvcGVydGllcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gSW5qZWN0Q29uZmlnIHRoZSBpbmplY3QgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KHsgbmFtZSwgZ2V0UHJvcGVydGllcyB9KSB7XG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcigodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgICAgICBiZWZvcmVQcm9wZXJ0aWVzKGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBpbmplY3Rvckl0ZW0gPSB0aGlzLnJlZ2lzdHJ5LmdldEluamVjdG9yKG5hbWUpO1xuICAgICAgICAgICAgaWYgKGluamVjdG9ySXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaW5qZWN0b3IsIGludmFsaWRhdG9yIH0gPSBpbmplY3Rvckl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnaXN0ZXJlZEluamVjdG9ycyA9IHJlZ2lzdGVyZWRJbmplY3RvcnNNYXAuZ2V0KHRoaXMpIHx8IFtdO1xuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RlcmVkSW5qZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkSW5qZWN0b3JzTWFwLnNldCh0aGlzLCByZWdpc3RlcmVkSW5qZWN0b3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVyZWRJbmplY3RvcnMuaW5kZXhPZihpbmplY3Rvckl0ZW0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm93bihpbnZhbGlkYXRvci5vbignaW52YWxpZGF0ZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRJbmplY3RvcnMucHVzaChpbmplY3Rvckl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydGllcyhpbmplY3RvcigpLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkodGFyZ2V0KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGluamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluamVjdC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0Lm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyBXSURHRVRfQkFTRV9UWVBFIH0gZnJvbSAnLi9SZWdpc3RyeSc7XG5mdW5jdGlvbiBpc09iamVjdE9yQXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYWx3YXlzKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbmdlZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmUocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2UocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2VkOiBwcmV2aW91c1Byb3BlcnR5ICE9PSBuZXdQcm9wZXJ0eSxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93KHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBjb25zdCB2YWxpZE9sZFByb3BlcnR5ID0gcHJldmlvdXNQcm9wZXJ0eSAmJiBpc09iamVjdE9yQXJyYXkocHJldmlvdXNQcm9wZXJ0eSk7XG4gICAgY29uc3QgdmFsaWROZXdQcm9wZXJ0eSA9IG5ld1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShuZXdQcm9wZXJ0eSk7XG4gICAgaWYgKCF2YWxpZE9sZFByb3BlcnR5IHx8ICF2YWxpZE5ld1Byb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjaGFuZ2VkOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzS2V5cyA9IE9iamVjdC5rZXlzKHByZXZpb3VzUHJvcGVydHkpO1xuICAgIGNvbnN0IG5ld0tleXMgPSBPYmplY3Qua2V5cyhuZXdQcm9wZXJ0eSk7XG4gICAgaWYgKHByZXZpb3VzS2V5cy5sZW5ndGggIT09IG5ld0tleXMubGVuZ3RoKSB7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY2hhbmdlZCA9IG5ld0tleXMuc29tZSgoa2V5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3UHJvcGVydHlba2V5XSAhPT0gcHJldmlvdXNQcm9wZXJ0eVtrZXldO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbmdlZCxcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhdXRvKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodHlwZW9mIG5ld1Byb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChuZXdQcm9wZXJ0eS5fdHlwZSA9PT0gV0lER0VUX0JBU0VfVFlQRSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGlnbm9yZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3RPckFycmF5KG5ld1Byb3BlcnR5KSkge1xuICAgICAgICByZXN1bHQgPSBzaGFsbG93KHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaWZmLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGlmZi5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kaWZmLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnLi4vLi4vY29yZS9sYW5nJztcbmltcG9ydCBjc3NUcmFuc2l0aW9ucyBmcm9tICcuLi9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zJztcbmltcG9ydCB7IGFmdGVyUmVuZGVyIH0gZnJvbSAnLi8uLi9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyJztcbmltcG9ydCB7IHYgfSBmcm9tICcuLy4uL2QnO1xuaW1wb3J0IHsgZG9tIH0gZnJvbSAnLi8uLi92ZG9tJztcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYXR0YWNoIHN0YXRlIG9mIHRoZSBwcm9qZWN0b3JcbiAqL1xuZXhwb3J0IHZhciBQcm9qZWN0b3JBdHRhY2hTdGF0ZTtcbihmdW5jdGlvbiAoUHJvamVjdG9yQXR0YWNoU3RhdGUpIHtcbiAgICBQcm9qZWN0b3JBdHRhY2hTdGF0ZVtQcm9qZWN0b3JBdHRhY2hTdGF0ZVtcIkF0dGFjaGVkXCJdID0gMV0gPSBcIkF0dGFjaGVkXCI7XG4gICAgUHJvamVjdG9yQXR0YWNoU3RhdGVbUHJvamVjdG9yQXR0YWNoU3RhdGVbXCJEZXRhY2hlZFwiXSA9IDJdID0gXCJEZXRhY2hlZFwiO1xufSkoUHJvamVjdG9yQXR0YWNoU3RhdGUgfHwgKFByb2plY3RvckF0dGFjaFN0YXRlID0ge30pKTtcbi8qKlxuICogQXR0YWNoIHR5cGUgZm9yIHRoZSBwcm9qZWN0b3JcbiAqL1xuZXhwb3J0IHZhciBBdHRhY2hUeXBlO1xuKGZ1bmN0aW9uIChBdHRhY2hUeXBlKSB7XG4gICAgQXR0YWNoVHlwZVtBdHRhY2hUeXBlW1wiQXBwZW5kXCJdID0gMV0gPSBcIkFwcGVuZFwiO1xuICAgIEF0dGFjaFR5cGVbQXR0YWNoVHlwZVtcIk1lcmdlXCJdID0gMl0gPSBcIk1lcmdlXCI7XG59KShBdHRhY2hUeXBlIHx8IChBdHRhY2hUeXBlID0ge30pKTtcbmV4cG9ydCBmdW5jdGlvbiBQcm9qZWN0b3JNaXhpbihCYXNlKSB7XG4gICAgY2xhc3MgUHJvamVjdG9yIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICB0aGlzLl9hc3luYyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uczogY3NzVHJhbnNpdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnJvb3QgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0b3JTdGF0ZSA9IFByb2plY3RvckF0dGFjaFN0YXRlLkRldGFjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZChyb290KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IEF0dGFjaFR5cGUuQXBwZW5kLFxuICAgICAgICAgICAgICAgIHJvb3RcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIG1lcmdlKHJvb3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogQXR0YWNoVHlwZS5NZXJnZSxcbiAgICAgICAgICAgICAgICByb290XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgcm9vdChyb290KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBhbHJlYWR5IGF0dGFjaGVkLCBjYW5ub3QgY2hhbmdlIHJvb3QgZWxlbWVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcm9vdCA9IHJvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHJvb3QoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9vdDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgYXN5bmMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXN5bmM7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGFzeW5jKGFzeW5jKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBhbHJlYWR5IGF0dGFjaGVkLCBjYW5ub3QgY2hhbmdlIGFzeW5jIG1vZGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2FzeW5jID0gYXN5bmM7XG4gICAgICAgIH1cbiAgICAgICAgc2FuZGJveChkb2MgPSBkb2N1bWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNyZWF0ZSBzYW5kYm94Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9hc3luYyA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNSb290ID0gdGhpcy5yb290O1xuICAgICAgICAgICAgLyogZnJlZSB1cCB0aGUgZG9jdW1lbnQgZnJhZ21lbnQgZm9yIEdDICovXG4gICAgICAgICAgICB0aGlzLm93bih7XG4gICAgICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb290ID0gcHJldmlvdXNSb290O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fYXR0YWNoKHtcbiAgICAgICAgICAgICAgICAvKiBEb2N1bWVudEZyYWdtZW50IGlzIG5vdCBhc3NpZ25hYmxlIHRvIEVsZW1lbnQsIGJ1dCBwcm92aWRlcyBldmVyeXRoaW5nIG5lZWRlZCB0byB3b3JrICovXG4gICAgICAgICAgICAgICAgcm9vdDogZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBBdHRhY2hUeXBlLkFwcGVuZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX19zZXRDaGlsZHJlbl9fKGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX19zZXRQcm9wZXJ0aWVzX18ocHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgX19zZXRQcm9wZXJ0aWVzX18ocHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMgJiYgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcy5yZWdpc3RyeSAhPT0gcHJvcGVydGllcy5yZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMgPSBhc3NpZ24oe30sIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgc3VwZXIuX19zZXRDb3JlUHJvcGVydGllc19fKHsgYmluZDogdGhpcywgYmFzZVJlZ2lzdHJ5OiBwcm9wZXJ0aWVzLnJlZ2lzdHJ5IH0pO1xuICAgICAgICAgICAgc3VwZXIuX19zZXRQcm9wZXJ0aWVzX18ocHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgdG9IdG1sKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgIT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkIHx8ICF0aGlzLl9wcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgaXMgbm90IGF0dGFjaGVkLCBjYW5ub3QgcmV0dXJuIGFuIEhUTUwgc3RyaW5nIG9mIHByb2plY3Rpb24uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbi5kb21Ob2RlLmNoaWxkTm9kZXNbMF0ub3V0ZXJIVE1MO1xuICAgICAgICB9XG4gICAgICAgIGFmdGVyUmVuZGVyKHJlc3VsdCkge1xuICAgICAgICAgICAgbGV0IG5vZGUgPSByZXN1bHQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgfHwgcmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbm9kZSA9IHYoJ3NwYW4nLCB7fSwgW3Jlc3VsdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBfYXR0YWNoKHsgdHlwZSwgcm9vdCB9KSB7XG4gICAgICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fYXR0YWNoSGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaEhhbmRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvamVjdG9yU3RhdGUgPSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZDtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IHtcbiAgICAgICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdG9yU3RhdGUgPSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5EZXRhY2hlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm93bihoYW5kbGUpO1xuICAgICAgICAgICAgdGhpcy5fYXR0YWNoSGFuZGxlID0gaGFuZGxlO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucywgeyBzeW5jOiAhdGhpcy5fYXN5bmMgfSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEF0dGFjaFR5cGUuQXBwZW5kOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uID0gZG9tLmFwcGVuZCh0aGlzLnJvb3QsIHRoaXMsIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBdHRhY2hUeXBlLk1lcmdlOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uID0gZG9tLm1lcmdlKHRoaXMucm9vdCwgdGhpcywgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hIYW5kbGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAgICAgICAgYWZ0ZXJSZW5kZXIoKVxuICAgIF0sIFByb2plY3Rvci5wcm90b3R5cGUsIFwiYWZ0ZXJSZW5kZXJcIiwgbnVsbCk7XG4gICAgcmV0dXJuIFByb2plY3Rvcjtcbn1cbmV4cG9ydCBkZWZhdWx0IFByb2plY3Rvck1peGluO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvamVjdG9yLm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5tanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9taXhpbnMvUHJvamVjdG9yLm1qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICcuLy4uL0luamVjdG9yJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJy4vLi4vZGVjb3JhdG9ycy9pbmplY3QnO1xuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdG9yIH0gZnJvbSAnLi8uLi9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvcic7XG5pbXBvcnQgeyBkaWZmUHJvcGVydHkgfSBmcm9tICcuLy4uL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5JztcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICcuLy4uL2RpZmYnO1xuY29uc3QgVEhFTUVfS0VZID0gJyBfa2V5JztcbmV4cG9ydCBjb25zdCBJTkpFQ1RFRF9USEVNRV9LRVkgPSBTeW1ib2woJ3RoZW1lJyk7XG4vKipcbiAqIERlY29yYXRvciBmb3IgYmFzZSBjc3MgY2xhc3Nlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWUodGhlbWUpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycsIHRoZW1lKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHJldmVyc2UgbG9va3VwIGZvciB0aGUgY2xhc3NlcyBwYXNzZWQgaW4gdmlhIHRoZSBgdGhlbWVgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBjbGFzc2VzIFRoZSBiYXNlQ2xhc3NlcyBvYmplY3RcbiAqIEByZXF1aXJlc1xuICovXG5mdW5jdGlvbiBjcmVhdGVUaGVtZUNsYXNzZXNMb29rdXAoY2xhc3Nlcykge1xuICAgIHJldHVybiBjbGFzc2VzLnJlZHVjZSgoY3VycmVudENsYXNzTmFtZXMsIGJhc2VDbGFzcykgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhiYXNlQ2xhc3MpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY3VycmVudENsYXNzTmFtZXNbYmFzZUNsYXNzW2tleV1dID0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDbGFzc05hbWVzO1xuICAgIH0sIHt9KTtcbn1cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBpcyBnaXZlbiBhIHRoZW1lIGFuZCBhbiBvcHRpb25hbCByZWdpc3RyeSwgdGhlIHRoZW1lXG4gKiBpbmplY3RvciBpcyBkZWZpbmVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5LCByZXR1cm5pbmcgdGhlIHRoZW1lLlxuICpcbiAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gc2V0XG4gKiBAcGFyYW0gdGhlbWVSZWdpc3RyeSByZWdpc3RyeSB0byBkZWZpbmUgdGhlIHRoZW1lIGluamVjdG9yIGFnYWluc3QuIERlZmF1bHRzXG4gKiB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XG4gKlxuICogQHJldHVybnMgdGhlIHRoZW1lIGluamVjdG9yIHVzZWQgdG8gc2V0IHRoZSB0aGVtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUaGVtZUluamVjdG9yKHRoZW1lLCB0aGVtZVJlZ2lzdHJ5KSB7XG4gICAgY29uc3QgdGhlbWVJbmplY3RvciA9IG5ldyBJbmplY3Rvcih0aGVtZSk7XG4gICAgdGhlbWVSZWdpc3RyeS5kZWZpbmVJbmplY3RvcihJTkpFQ1RFRF9USEVNRV9LRVksIChpbnZhbGlkYXRvcikgPT4ge1xuICAgICAgICB0aGVtZUluamVjdG9yLnNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHRoZW1lSW5qZWN0b3IuZ2V0KCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoZW1lSW5qZWN0b3I7XG59XG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYXNzIGRlY29yYXRlZCB3aXRoIHdpdGggVGhlbWVkIGZ1bmN0aW9uYWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lZE1peGluKEJhc2UpIHtcbiAgICBsZXQgVGhlbWVkID0gY2xhc3MgVGhlbWVkIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVnaXN0ZXJlZCBiYXNlIHRoZW1lIGtleXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZUtleXMgPSBbXTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW5kaWNhdGVzIGlmIGNsYXNzZXMgbWV0YSBkYXRhIG5lZWQgdG8gYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTG9hZGVkIHRoZW1lXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX3RoZW1lID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhlbWUoY2xhc3Nlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlY2FsY3VsYXRlQ2xhc3Nlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlY2FsY3VsYXRlVGhlbWVDbGFzc2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLm1hcCgoY2xhc3NOYW1lKSA9PiB0aGlzLl9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRoZW1lQ2xhc3MoY2xhc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9uIGZpcmVkIHdoZW4gYHRoZW1lYCBvciBgZXh0cmFDbGFzc2VzYCBhcmUgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIG9uUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkIHx8IGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHRyYUNsYXNzZXMgPSB0aGlzLnByb3BlcnRpZXMuZXh0cmFDbGFzc2VzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgdGhlbWVDbGFzc05hbWUgPSB0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cFtjbGFzc05hbWVdO1xuICAgICAgICAgICAgbGV0IHJlc3VsdENsYXNzTmFtZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhlbWVDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENsYXNzIG5hbWU6ICcke2NsYXNzTmFtZX0nIG5vdCBmb3VuZCBpbiB0aGVtZWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2goZXh0cmFDbGFzc2VzW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2xhc3NOYW1lcy5wdXNoKHRoaXMuX3RoZW1lW3RoZW1lQ2xhc3NOYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2godGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZVt0aGVtZUNsYXNzTmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdENsYXNzTmFtZXMuam9pbignICcpO1xuICAgICAgICB9XG4gICAgICAgIF9yZWNhbGN1bGF0ZVRoZW1lQ2xhc3NlcygpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdGhlbWUgPSB7fSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgY29uc3QgYmFzZVRoZW1lcyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiYXNlVGhlbWVDbGFzc2VzJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lID0gYmFzZVRoZW1lcy5yZWR1Y2UoKGZpbmFsQmFzZVRoZW1lLCBiYXNlVGhlbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2EgPSBUSEVNRV9LRVksIGtleSA9IGJhc2VUaGVtZVtfYV0sIGNsYXNzZXMgPSB0c2xpYl8xLl9fcmVzdChiYXNlVGhlbWUsIFt0eXBlb2YgX2EgPT09IFwic3ltYm9sXCIgPyBfYSA6IF9hICsgXCJcIl0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBmaW5hbEJhc2VUaGVtZSwgY2xhc3Nlcyk7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2VUaGVtZUNsYXNzZXNSZXZlcnNlTG9va3VwID0gY3JlYXRlVGhlbWVDbGFzc2VzTG9va3VwKGJhc2VUaGVtZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5yZWR1Y2UoKGJhc2VUaGVtZSwgdGhlbWVLZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVRoZW1lLCB0aGVtZVt0aGVtZUtleV0pO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGRpZmZQcm9wZXJ0eSgndGhlbWUnLCBzaGFsbG93KSxcbiAgICAgICAgZGlmZlByb3BlcnR5KCdleHRyYUNsYXNzZXMnLCBzaGFsbG93KVxuICAgIF0sIFRoZW1lZC5wcm90b3R5cGUsIFwib25Qcm9wZXJ0aWVzQ2hhbmdlZFwiLCBudWxsKTtcbiAgICBUaGVtZWQgPSB0c2xpYl8xLl9fZGVjb3JhdGUoW1xuICAgICAgICBpbmplY3Qoe1xuICAgICAgICAgICAgbmFtZTogSU5KRUNURURfVEhFTUVfS0VZLFxuICAgICAgICAgICAgZ2V0UHJvcGVydGllczogKHRoZW1lLCBwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLnRoZW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHRoZW1lIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICBdLCBUaGVtZWQpO1xuICAgIHJldHVybiBUaGVtZWQ7XG59XG5leHBvcnQgZGVmYXVsdCBUaGVtZWRNaXhpbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRoZW1lZC5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL21peGlucy9UaGVtZWQubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1RoZW1lZC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFdpZGdldEJhc2UsIG5vQmluZCB9IGZyb20gJy4vV2lkZ2V0QmFzZSc7XG5pbXBvcnQgeyBQcm9qZWN0b3JNaXhpbiB9IGZyb20gJy4vbWl4aW5zL1Byb2plY3Rvcic7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi4vc2hpbS9hcnJheSc7XG5pbXBvcnQgeyB3LCBkb20gfSBmcm9tICcuL2QnO1xuaW1wb3J0IGdsb2JhbCBmcm9tICcuLi9zaGltL2dsb2JhbCc7XG5pbXBvcnQgeyByZWdpc3RlclRoZW1lSW5qZWN0b3IgfSBmcm9tICcuL21peGlucy9UaGVtZWQnO1xuaW1wb3J0IHsgYWx3YXlzUmVuZGVyIH0gZnJvbSAnLi9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlcic7XG5leHBvcnQgdmFyIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGU7XG4oZnVuY3Rpb24gKEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUpIHtcbiAgICBDdXN0b21FbGVtZW50Q2hpbGRUeXBlW1wiRE9KT1wiXSA9IFwiRE9KT1wiO1xuICAgIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGVbXCJOT0RFXCJdID0gXCJOT0RFXCI7XG4gICAgQ3VzdG9tRWxlbWVudENoaWxkVHlwZVtcIlRFWFRcIl0gPSBcIlRFWFRcIjtcbn0pKEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUgfHwgKEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUgPSB7fSkpO1xuZXhwb3J0IGZ1bmN0aW9uIERvbVRvV2lkZ2V0V3JhcHBlcihkb21Ob2RlKSB7XG4gICAgbGV0IERvbVRvV2lkZ2V0V3JhcHBlciA9IGNsYXNzIERvbVRvV2lkZ2V0V3JhcHBlciBleHRlbmRzIFdpZGdldEJhc2Uge1xuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5yZWR1Y2UoKHByb3BzLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignb24nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBgX18ke2tleX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9wc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgcmV0dXJuIGRvbSh7IG5vZGU6IGRvbU5vZGUsIHByb3BzOiBwcm9wZXJ0aWVzLCBkaWZmVHlwZTogJ2RvbScgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGdldCBkb21Ob2RlKCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERvbVRvV2lkZ2V0V3JhcHBlciA9IHRzbGliXzEuX19kZWNvcmF0ZShbXG4gICAgICAgIGFsd2F5c1JlbmRlcigpXG4gICAgXSwgRG9tVG9XaWRnZXRXcmFwcGVyKTtcbiAgICByZXR1cm4gRG9tVG9XaWRnZXRXcmFwcGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShkZXNjcmlwdG9yLCBXaWRnZXRDb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IHsgYXR0cmlidXRlcywgY2hpbGRUeXBlLCByZWdpc3RyeUZhY3RvcnkgfSA9IGRlc2NyaXB0b3I7XG4gICAgY29uc3QgYXR0cmlidXRlTWFwID0ge307XG4gICAgYXR0cmlidXRlcy5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBhdHRyaWJ1dGVNYXBbYXR0cmlidXRlTmFtZV0gPSBwcm9wZXJ0eU5hbWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICB0aGlzLl9jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxpc2VkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZG9tUHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgeyBhdHRyaWJ1dGVzLCBwcm9wZXJ0aWVzLCBldmVudHMgfSA9IGRlc2NyaXB0b3I7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcHJvcGVydGllcywgdGhpcy5fYXR0cmlidXRlc1RvUHJvcGVydGllcyhhdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgICBbLi4uYXR0cmlidXRlcywgLi4ucHJvcGVydGllc10uZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUucmVwbGFjZSgvXm9uLywgJ19fJyk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZFByb3BlcnR5TmFtZSAhPT0gcHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbVByb3BlcnRpZXNbZmlsdGVyZWRQcm9wZXJ0eU5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAodmFsdWUpID0+IHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbVByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4gdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBldmVudHMuZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gcHJvcGVydHlOYW1lLnJlcGxhY2UoL15vbi8sICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnJlcGxhY2UoL15vbi8sICdfX29uJyk7XG4gICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1tmaWx0ZXJlZFByb3BlcnR5TmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5fZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4gdGhpcy5fc2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnRDYWxsYmFjayA9IHRoaXMuX2dldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudENhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudENhbGxiYWNrKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogYXJnc1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywgZG9tUHJvcGVydGllcyk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5URVhUID8gdGhpcy5jaGlsZE5vZGVzIDogdGhpcy5jaGlsZHJlbjtcbiAgICAgICAgICAgIGZyb20oY2hpbGRyZW4pLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZFR5cGUgPT09IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUuRE9KTykge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1yZW5kZXInLCAoKSA9PiB0aGlzLl9yZW5kZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5hZGRFdmVudExpc3RlbmVyKCdkb2pvLWNlLWNvbm5lY3RlZCcsICgpID0+IHRoaXMuX3JlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChEb21Ub1dpZGdldFdyYXBwZXIoY2hpbGROb2RlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGRvbSh7IG5vZGU6IGNoaWxkTm9kZSwgZGlmZlR5cGU6ICdkb20nIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1jb25uZWN0ZWQnLCAoZSkgPT4gdGhpcy5fY2hpbGRDb25uZWN0ZWQoZSkpO1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0UHJvcGVydGllcyA9IHRoaXMuX3Byb3BlcnRpZXM7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJDaGlsZHJlbiA9ICgpID0+IHRoaXMuX19jaGlsZHJlbl9fKCk7XG4gICAgICAgICAgICBjb25zdCBXcmFwcGVyID0gY2xhc3MgZXh0ZW5kcyBXaWRnZXRCYXNlIHtcbiAgICAgICAgICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3KFdpZGdldENvbnN0cnVjdG9yLCB3aWRnZXRQcm9wZXJ0aWVzLCByZW5kZXJDaGlsZHJlbigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcmVnaXN0cnkgPSByZWdpc3RyeUZhY3RvcnkoKTtcbiAgICAgICAgICAgIGNvbnN0IHRoZW1lQ29udGV4dCA9IHJlZ2lzdGVyVGhlbWVJbmplY3Rvcih0aGlzLl9nZXRUaGVtZSgpLCByZWdpc3RyeSk7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignZG9qby10aGVtZS1zZXQnLCAoKSA9PiB0aGVtZUNvbnRleHQuc2V0KHRoaXMuX2dldFRoZW1lKCkpKTtcbiAgICAgICAgICAgIGNvbnN0IFByb2plY3RvciA9IFByb2plY3Rvck1peGluKFdyYXBwZXIpO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yID0gbmV3IFByb2plY3RvcigpO1xuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yLnNldFByb3BlcnRpZXMoeyByZWdpc3RyeSB9KTtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rvci5hcHBlbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb2pvLWNlLWNvbm5lY3RlZCcsIHtcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRldGFpbDogdGhpc1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIF9nZXRUaGVtZSgpIHtcbiAgICAgICAgICAgIGlmIChnbG9iYWwgJiYgZ2xvYmFsLmRvam9jZSAmJiBnbG9iYWwuZG9qb2NlLnRoZW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbC5kb2pvY2UudGhlbWVzW2dsb2JhbC5kb2pvY2UudGhlbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9jaGlsZENvbm5lY3RlZChlKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gZS5kZXRhaWw7XG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5fY2hpbGRyZW4uc29tZSgoY2hpbGQpID0+IGNoaWxkLmRvbU5vZGUgPT09IG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1yZW5kZXInLCAoKSA9PiB0aGlzLl9yZW5kZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuLnB1c2goRG9tVG9XaWRnZXRXcmFwcGVyKG5vZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9yZW5kZXIoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yLmludmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb2pvLWNlLXJlbmRlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgYnViYmxlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbDogdGhpc1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfX3Byb3BlcnRpZXNfXygpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wcm9wZXJ0aWVzLCB0aGlzLl9ldmVudFByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIF9fY2hpbGRyZW5fXygpIHtcbiAgICAgICAgICAgIGlmIChjaGlsZFR5cGUgPT09IEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUuRE9KTykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbi5maWx0ZXIoKENoaWxkKSA9PiBDaGlsZC5kb21Ob2RlLmlzV2lkZ2V0KS5tYXAoKENoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZG9tTm9kZSB9ID0gQ2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3KENoaWxkLCBPYmplY3QuYXNzaWduKHt9LCBkb21Ob2RlLl9fcHJvcGVydGllc19fKCkpLCBbLi4uZG9tTm9kZS5fX2NoaWxkcmVuX18oKV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGRWYWx1ZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGF0dHJpYnV0ZU1hcFtuYW1lXTtcbiAgICAgICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIF9zZXRFdmVudFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgX2dldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVtub0JpbmRdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBfYXR0cmlidXRlc1RvUHJvcGVydGllcyhhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5yZWR1Y2UoKHByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXNXaWRnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIoV2lkZ2V0Q29uc3RydWN0b3IpIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gV2lkZ2V0Q29uc3RydWN0b3IucHJvdG90eXBlICYmIFdpZGdldENvbnN0cnVjdG9yLnByb3RvdHlwZS5fX2N1c3RvbUVsZW1lbnREZXNjcmlwdG9yO1xuICAgIGlmICghZGVzY3JpcHRvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgZGVzY3JpcHRvciBmb3IgQ3VzdG9tIEVsZW1lbnQsIGhhdmUgeW91IGFkZGVkIHRoZSBAY3VzdG9tRWxlbWVudCBkZWNvcmF0b3IgdG8geW91ciBXaWRnZXQ/Jyk7XG4gICAgfVxuICAgIGdsb2JhbC5jdXN0b21FbGVtZW50cy5kZWZpbmUoZGVzY3JpcHRvci50YWdOYW1lLCBjcmVhdGUoZGVzY3JpcHRvciwgV2lkZ2V0Q29uc3RydWN0b3IpKTtcbn1cbmV4cG9ydCBkZWZhdWx0IHJlZ2lzdGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVnaXN0ZXJDdXN0b21FbGVtZW50Lm1qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvcmVnaXN0ZXJDdXN0b21FbGVtZW50Lm1qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiaW1wb3J0IGdsb2JhbCBmcm9tICcuLi9zaGltL2dsb2JhbCc7XHJcbmltcG9ydCB7IGZyb20gYXMgYXJyYXlGcm9tIH0gZnJvbSAnLi4vc2hpbS9hcnJheSc7XHJcbmltcG9ydCB7IGlzV05vZGUsIGlzVk5vZGUsIGlzRG9tVk5vZGUsIFZOT0RFLCBXTk9ERSB9IGZyb20gJy4vZCc7XHJcbmltcG9ydCB7IGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yIH0gZnJvbSAnLi9SZWdpc3RyeSc7XHJcbmltcG9ydCBXZWFrTWFwIGZyb20gJy4uL3NoaW0vV2Vha01hcCc7XHJcbmNvbnN0IE5BTUVTUEFDRV9XMyA9ICdodHRwOi8vd3d3LnczLm9yZy8nO1xyXG5jb25zdCBOQU1FU1BBQ0VfU1ZHID0gTkFNRVNQQUNFX1czICsgJzIwMDAvc3ZnJztcclxuY29uc3QgTkFNRVNQQUNFX1hMSU5LID0gTkFNRVNQQUNFX1czICsgJzE5OTkveGxpbmsnO1xyXG5jb25zdCBlbXB0eUFycmF5ID0gW107XHJcbmNvbnN0IG5vZGVPcGVyYXRpb25zID0gWydmb2N1cycsICdibHVyJywgJ3Njcm9sbEludG9WaWV3JywgJ2NsaWNrJ107XHJcbmV4cG9ydCBjb25zdCB3aWRnZXRJbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwKCk7XHJcbmNvbnN0IGluc3RhbmNlTWFwID0gbmV3IFdlYWtNYXAoKTtcclxuY29uc3QgbmV4dFNpYmxpbmdNYXAgPSBuZXcgV2Vha01hcCgpO1xyXG5jb25zdCBwcm9qZWN0b3JTdGF0ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XHJcbmZ1bmN0aW9uIHNhbWUoZG5vZGUxLCBkbm9kZTIpIHtcclxuICAgIGlmIChpc1ZOb2RlKGRub2RlMSkgJiYgaXNWTm9kZShkbm9kZTIpKSB7XHJcbiAgICAgICAgaWYgKGlzRG9tVk5vZGUoZG5vZGUxKSB8fCBpc0RvbVZOb2RlKGRub2RlMikpIHtcclxuICAgICAgICAgICAgaWYgKGRub2RlMS5kb21Ob2RlICE9PSBkbm9kZTIuZG9tTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkbm9kZTEudGFnICE9PSBkbm9kZTIudGFnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRub2RlMS5wcm9wZXJ0aWVzLmtleSAhPT0gZG5vZGUyLnByb3BlcnRpZXMua2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1dOb2RlKGRub2RlMSkgJiYgaXNXTm9kZShkbm9kZTIpKSB7XHJcbiAgICAgICAgaWYgKGRub2RlMS5pbnN0YW5jZSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBkbm9kZTIud2lkZ2V0Q29uc3RydWN0b3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRub2RlMS53aWRnZXRDb25zdHJ1Y3RvciAhPT0gZG5vZGUyLndpZGdldENvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRub2RlMS5wcm9wZXJ0aWVzLmtleSAhPT0gZG5vZGUyLnByb3BlcnRpZXMua2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3QgbWlzc2luZ1RyYW5zaXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGUgYSB0cmFuc2l0aW9ucyBvYmplY3QgdG8gdGhlIHByb2plY3Rpb25PcHRpb25zIHRvIGRvIGFuaW1hdGlvbnMnKTtcclxufTtcclxuZnVuY3Rpb24gZ2V0UHJvamVjdGlvbk9wdGlvbnMocHJvamVjdG9yT3B0aW9ucywgcHJvamVjdG9ySW5zdGFuY2UpIHtcclxuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xyXG4gICAgICAgIG5hbWVzcGFjZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIHN0eWxlQXBwbHllcjogZnVuY3Rpb24gKGRvbU5vZGUsIHN0eWxlTmFtZSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgZG9tTm9kZS5zdHlsZVtzdHlsZU5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cmFuc2l0aW9uczoge1xyXG4gICAgICAgICAgICBlbnRlcjogbWlzc2luZ1RyYW5zaXRpb24sXHJcbiAgICAgICAgICAgIGV4aXQ6IG1pc3NpbmdUcmFuc2l0aW9uXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZXB0aDogMCxcclxuICAgICAgICBtZXJnZTogZmFsc2UsXHJcbiAgICAgICAgc3luYzogZmFsc2UsXHJcbiAgICAgICAgcHJvamVjdG9ySW5zdGFuY2VcclxuICAgIH07XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIHByb2plY3Rvck9wdGlvbnMpO1xyXG59XHJcbmZ1bmN0aW9uIGNoZWNrU3R5bGVWYWx1ZShzdHlsZVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHN0eWxlVmFsdWUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHlsZSB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzJyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlRXZlbnQoZG9tTm9kZSwgZXZlbnROYW1lLCBjdXJyZW50VmFsdWUsIHByb2plY3Rpb25PcHRpb25zLCBiaW5kLCBwcmV2aW91c1ZhbHVlKSB7XHJcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBjb25zdCBldmVudE1hcCA9IHByb2plY3RvclN0YXRlLm5vZGVNYXAuZ2V0KGRvbU5vZGUpIHx8IG5ldyBXZWFrTWFwKCk7XHJcbiAgICBpZiAocHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzRXZlbnQgPSBldmVudE1hcC5nZXQocHJldmlvdXNWYWx1ZSk7XHJcbiAgICAgICAgZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgcHJldmlvdXNFdmVudCk7XHJcbiAgICB9XHJcbiAgICBsZXQgY2FsbGJhY2sgPSBjdXJyZW50VmFsdWUuYmluZChiaW5kKTtcclxuICAgIGlmIChldmVudE5hbWUgPT09ICdpbnB1dCcpIHtcclxuICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChldnQpIHtcclxuICAgICAgICAgICAgY3VycmVudFZhbHVlLmNhbGwodGhpcywgZXZ0KTtcclxuICAgICAgICAgICAgZXZ0LnRhcmdldFsnb25pbnB1dC12YWx1ZSddID0gZXZ0LnRhcmdldC52YWx1ZTtcclxuICAgICAgICB9LmJpbmQoYmluZCk7XHJcbiAgICB9XHJcbiAgICBkb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjayk7XHJcbiAgICBldmVudE1hcC5zZXQoY3VycmVudFZhbHVlLCBjYWxsYmFjayk7XHJcbiAgICBwcm9qZWN0b3JTdGF0ZS5ub2RlTWFwLnNldChkb21Ob2RlLCBldmVudE1hcCk7XHJcbn1cclxuZnVuY3Rpb24gYWRkQ2xhc3Nlcyhkb21Ob2RlLCBjbGFzc2VzKSB7XHJcbiAgICBpZiAoY2xhc3Nlcykge1xyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUuY2xhc3NMaXN0LmFkZChjbGFzc05hbWVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBjbGFzc2VzKSB7XHJcbiAgICBpZiAoY2xhc3Nlcykge1xyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gYnVpbGRQcmV2aW91c1Byb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXMsIGN1cnJlbnQpIHtcclxuICAgIGNvbnN0IHsgZGlmZlR5cGUsIHByb3BlcnRpZXMsIGF0dHJpYnV0ZXMgfSA9IGN1cnJlbnQ7XHJcbiAgICBpZiAoIWRpZmZUeXBlIHx8IGRpZmZUeXBlID09PSAndmRvbScpIHtcclxuICAgICAgICByZXR1cm4geyBwcm9wZXJ0aWVzOiBwcmV2aW91cy5wcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzOiBwcmV2aW91cy5hdHRyaWJ1dGVzLCBldmVudHM6IHByZXZpb3VzLmV2ZW50cyB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZGlmZlR5cGUgPT09ICdub25lJykge1xyXG4gICAgICAgIHJldHVybiB7IHByb3BlcnRpZXM6IHt9LCBhdHRyaWJ1dGVzOiBwcmV2aW91cy5hdHRyaWJ1dGVzID8ge30gOiB1bmRlZmluZWQsIGV2ZW50czogcHJldmlvdXMuZXZlbnRzIH07XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3UHJvcGVydGllcyA9IHtcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7fVxyXG4gICAgfTtcclxuICAgIGlmIChhdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgbmV3UHJvcGVydGllcy5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgbmV3UHJvcGVydGllcy5ldmVudHMgPSBwcmV2aW91cy5ldmVudHM7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocHJvcGVydGllcykuZm9yRWFjaCgocHJvcE5hbWUpID0+IHtcclxuICAgICAgICAgICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzW3Byb3BOYW1lXSA9IGRvbU5vZGVbcHJvcE5hbWVdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGF0dHJOYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMuYXR0cmlidXRlc1thdHRyTmFtZV0gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZShhdHRyTmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld1Byb3BlcnRpZXM7XHJcbiAgICB9XHJcbiAgICBuZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5yZWR1Y2UoKHByb3BzLCBwcm9wZXJ0eSkgPT4ge1xyXG4gICAgICAgIHByb3BzW3Byb3BlcnR5XSA9IGRvbU5vZGUuZ2V0QXR0cmlidXRlKHByb3BlcnR5KSB8fCBkb21Ob2RlW3Byb3BlcnR5XTtcclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9LCB7fSk7XHJcbiAgICByZXR1cm4gbmV3UHJvcGVydGllcztcclxufVxyXG5mdW5jdGlvbiBub2RlT3BlcmF0aW9uKHByb3BOYW1lLCBwcm9wVmFsdWUsIHByZXZpb3VzVmFsdWUsIGRvbU5vZGUsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBsZXQgcmVzdWx0O1xyXG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXN1bHQgPSBwcm9wVmFsdWUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IHByb3BWYWx1ZSAmJiAhcHJldmlvdXNWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcclxuICAgICAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcmVtb3ZlT3JwaGFuZWRFdmVudHMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgb25seUV2ZW50cyA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBjb25zdCBldmVudE1hcCA9IHByb2plY3RvclN0YXRlLm5vZGVNYXAuZ2V0KGRvbU5vZGUpO1xyXG4gICAgaWYgKGV2ZW50TWFwKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocHJldmlvdXNQcm9wZXJ0aWVzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc0V2ZW50ID0gcHJvcE5hbWUuc3Vic3RyKDAsIDIpID09PSAnb24nIHx8IG9ubHlFdmVudHM7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IG9ubHlFdmVudHMgPyBwcm9wTmFtZSA6IHByb3BOYW1lLnN1YnN0cigyKTtcclxuICAgICAgICAgICAgaWYgKGlzRXZlbnQgJiYgIXByb3BlcnRpZXNbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudENhbGxiYWNrID0gZXZlbnRNYXAuZ2V0KHByZXZpb3VzUHJvcGVydGllc1twcm9wTmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Q2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudENhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZShkb21Ob2RlLCBhdHRyTmFtZSwgYXR0clZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgaWYgKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSA9PT0gTkFNRVNQQUNFX1NWRyAmJiBhdHRyTmFtZSA9PT0gJ2hyZWYnKSB7XHJcbiAgICAgICAgZG9tTm9kZS5zZXRBdHRyaWJ1dGVOUyhOQU1FU1BBQ0VfWExJTkssIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKGF0dHJOYW1lID09PSAncm9sZScgJiYgYXR0clZhbHVlID09PSAnJykgfHwgYXR0clZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBkb21Ob2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyTmFtZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBkb21Ob2RlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0clZhbHVlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGUsIHByZXZpb3VzQXR0cmlidXRlcywgYXR0cmlidXRlcywgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGF0dHJOYW1lcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpO1xyXG4gICAgY29uc3QgYXR0ckNvdW50ID0gYXR0ck5hbWVzLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0ckNvdW50OyBpKyspIHtcclxuICAgICAgICBjb25zdCBhdHRyTmFtZSA9IGF0dHJOYW1lc1tpXTtcclxuICAgICAgICBjb25zdCBhdHRyVmFsdWUgPSBhdHRyaWJ1dGVzW2F0dHJOYW1lXTtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0F0dHJWYWx1ZSA9IHByZXZpb3VzQXR0cmlidXRlc1thdHRyTmFtZV07XHJcbiAgICAgICAgaWYgKGF0dHJWYWx1ZSAhPT0gcHJldmlvdXNBdHRyVmFsdWUpIHtcclxuICAgICAgICAgICAgdXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIGF0dHJOYW1lLCBhdHRyVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMsIHByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zLCBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMgPSB0cnVlKSB7XHJcbiAgICBsZXQgcHJvcGVydGllc1VwZGF0ZWQgPSBmYWxzZTtcclxuICAgIGNvbnN0IHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpO1xyXG4gICAgY29uc3QgcHJvcENvdW50ID0gcHJvcE5hbWVzLmxlbmd0aDtcclxuICAgIGlmIChwcm9wTmFtZXMuaW5kZXhPZignY2xhc3NlcycpID09PSAtMSAmJiBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcykge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzKSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzICYmIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wQ291bnQ7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHByb3BOYW1lID0gcHJvcE5hbWVzW2ldO1xyXG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSBwcm9wZXJ0aWVzW3Byb3BOYW1lXTtcclxuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gcHJldmlvdXNQcm9wZXJ0aWVzW3Byb3BOYW1lXTtcclxuICAgICAgICBpZiAocHJvcE5hbWUgPT09ICdjbGFzc2VzJykge1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0NsYXNzZXMgPSBBcnJheS5pc0FycmF5KHByZXZpb3VzVmFsdWUpID8gcHJldmlvdXNWYWx1ZSA6IFtwcmV2aW91c1ZhbHVlXTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENsYXNzZXMgPSBBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkgPyBwcm9wVmFsdWUgOiBbcHJvcFZhbHVlXTtcclxuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2xhc3NlcyAmJiBwcmV2aW91c0NsYXNzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wVmFsdWUgfHwgcHJvcFZhbHVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldmlvdXNDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNDbGFzc2VzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDbGFzc2VzID0gWy4uLmN1cnJlbnRDbGFzc2VzXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0NsYXNzTmFtZSA9IHByZXZpb3VzQ2xhc3Nlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGFzc0luZGV4ID0gbmV3Q2xhc3Nlcy5pbmRleE9mKHByZXZpb3VzQ2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc0luZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNDbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2xhc3Nlcy5zcGxpY2UoY2xhc3NJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZENsYXNzZXMoZG9tTm9kZSwgbmV3Q2xhc3Nlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50Q2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkZENsYXNzZXMoZG9tTm9kZSwgY3VycmVudENsYXNzZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vZGVPcGVyYXRpb25zLmluZGV4T2YocHJvcE5hbWUpICE9PSAtMSkge1xyXG4gICAgICAgICAgICBub2RlT3BlcmF0aW9uKHByb3BOYW1lLCBwcm9wVmFsdWUsIHByZXZpb3VzVmFsdWUsIGRvbU5vZGUsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgPT09ICdzdHlsZXMnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlTmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wVmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCBzdHlsZUNvdW50ID0gc3R5bGVOYW1lcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc3R5bGVDb3VudDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZU5hbWUgPSBzdHlsZU5hbWVzW2pdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3R5bGVWYWx1ZSA9IHByb3BWYWx1ZVtzdHlsZU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkU3R5bGVWYWx1ZSA9IHByZXZpb3VzVmFsdWUgJiYgcHJldmlvdXNWYWx1ZVtzdHlsZU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld1N0eWxlVmFsdWUgPT09IG9sZFN0eWxlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNVcGRhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXdTdHlsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tTdHlsZVZhbHVlKG5ld1N0eWxlVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zLnN0eWxlQXBwbHllcihkb21Ob2RlLCBzdHlsZU5hbWUsIG5ld1N0eWxlVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMuc3R5bGVBcHBseWVyKGRvbU5vZGUsIHN0eWxlTmFtZSwgJycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXByb3BWYWx1ZSAmJiB0eXBlb2YgcHJldmlvdXNWYWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHByb3BWYWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ3ZhbHVlJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG9tVmFsdWUgPSBkb21Ob2RlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChkb21WYWx1ZSAhPT0gcHJvcFZhbHVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKGRvbU5vZGVbJ29uaW5wdXQtdmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRvbVZhbHVlID09PSBkb21Ob2RlWydvbmlucHV0LXZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwcm9wVmFsdWUgIT09IHByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZVsnb25pbnB1dC12YWx1ZSddID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNVcGRhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChwcm9wTmFtZSAhPT0gJ2tleScgJiYgcHJvcFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb24nICYmIHByb3BOYW1lLmxhc3RJbmRleE9mKCdvbicsIDApID09PSAwICYmIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIHByb3BOYW1lLnN1YnN0cigyKSwgcHJvcFZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucywgcHJvcGVydGllcy5iaW5kLCBwcmV2aW91c1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHByb3BOYW1lICE9PSAnaW5uZXJIVE1MJyAmJiBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGUoZG9tTm9kZSwgcHJvcE5hbWUsIHByb3BWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgPT09ICdzY3JvbGxMZWZ0JyB8fCBwcm9wTmFtZSA9PT0gJ3Njcm9sbFRvcCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tTm9kZVtwcm9wTmFtZV0gIT09IHByb3BWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNVcGRhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wZXJ0aWVzVXBkYXRlZDtcclxufVxyXG5mdW5jdGlvbiBmaW5kSW5kZXhPZkNoaWxkKGNoaWxkcmVuLCBzYW1lQXMsIHN0YXJ0KSB7XHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChzYW1lKGNoaWxkcmVuW2ldLCBzYW1lQXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gdG9QYXJlbnRWTm9kZShkb21Ob2RlKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHRhZzogJycsXHJcbiAgICAgICAgcHJvcGVydGllczoge30sXHJcbiAgICAgICAgY2hpbGRyZW46IHVuZGVmaW5lZCxcclxuICAgICAgICBkb21Ob2RlLFxyXG4gICAgICAgIHR5cGU6IFZOT0RFXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiB0b1RleHRWTm9kZShkYXRhKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHRhZzogJycsXHJcbiAgICAgICAgcHJvcGVydGllczoge30sXHJcbiAgICAgICAgY2hpbGRyZW46IHVuZGVmaW5lZCxcclxuICAgICAgICB0ZXh0OiBgJHtkYXRhfWAsXHJcbiAgICAgICAgZG9tTm9kZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIHR5cGU6IFZOT0RFXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGluc3RhbmNlLFxyXG4gICAgICAgIHJlbmRlcmVkOiBbXSxcclxuICAgICAgICBjb3JlUHJvcGVydGllczogaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLFxyXG4gICAgICAgIGNoaWxkcmVuOiBpbnN0YW5jZS5jaGlsZHJlbixcclxuICAgICAgICB3aWRnZXRDb25zdHJ1Y3RvcjogaW5zdGFuY2UuY29uc3RydWN0b3IsXHJcbiAgICAgICAgcHJvcGVydGllczogaW5zdGFuY2VEYXRhLmlucHV0UHJvcGVydGllcyxcclxuICAgICAgICB0eXBlOiBXTk9ERVxyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZHJlbiwgaW5zdGFuY2UpIHtcclxuICAgIGlmIChjaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGVtcHR5QXJyYXk7XHJcbiAgICB9XHJcbiAgICBjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4gOiBbY2hpbGRyZW5dO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7KSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCB8fCBjaGlsZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gdG9UZXh0Vk5vZGUoY2hpbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGlzVk5vZGUoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQucHJvcGVydGllcy5iaW5kID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm9wZXJ0aWVzLmJpbmQgPSBpbnN0YW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5jb3JlUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuY29yZVByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmQ6IGluc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlUmVnaXN0cnk6IGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iYXNlUmVnaXN0cnlcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaSsrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xyXG59XHJcbmZ1bmN0aW9uIG5vZGVBZGRlZChkbm9kZSwgdHJhbnNpdGlvbnMpIHtcclxuICAgIGlmIChpc1ZOb2RlKGRub2RlKSAmJiBkbm9kZS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgY29uc3QgZW50ZXJBbmltYXRpb24gPSBkbm9kZS5wcm9wZXJ0aWVzLmVudGVyQW5pbWF0aW9uO1xyXG4gICAgICAgIGlmIChlbnRlckFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudGVyQW5pbWF0aW9uID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRlckFuaW1hdGlvbihkbm9kZS5kb21Ob2RlLCBkbm9kZS5wcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmVudGVyKGRub2RlLmRvbU5vZGUsIGRub2RlLnByb3BlcnRpZXMsIGVudGVyQW5pbWF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBub2RlVG9SZW1vdmUoZG5vZGUsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgaWYgKGlzV05vZGUoZG5vZGUpKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IGluc3RhbmNlTWFwLmdldChkbm9kZS5pbnN0YW5jZSk7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSAoaXRlbSA/IGl0ZW0uZG5vZGUucmVuZGVyZWQgOiBkbm9kZS5yZW5kZXJlZCkgfHwgZW1wdHlBcnJheTtcclxuICAgICAgICBpZiAoZG5vZGUuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VEYXRhID0gd2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGRub2RlLmluc3RhbmNlKTtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm9uRGV0YWNoKCk7XHJcbiAgICAgICAgICAgIGluc3RhbmNlTWFwLmRlbGV0ZShkbm9kZS5pbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbm9kZVRvUmVtb3ZlKHJlbmRlcmVkW2ldLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlO1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBkbm9kZS5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIGlmIChkbm9kZS5jaGlsZHJlbiAmJiBkbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vZGVUb1JlbW92ZShkbm9kZS5jaGlsZHJlbltpXSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBleGl0QW5pbWF0aW9uID0gcHJvcGVydGllcy5leGl0QW5pbWF0aW9uO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzICYmIGV4aXRBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgZG9tTm9kZS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBjb25zdCByZW1vdmVEb21Ob2RlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgZG9tTm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUgJiYgZG9tTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleGl0QW5pbWF0aW9uID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0QW5pbWF0aW9uKGRvbU5vZGUsIHJlbW92ZURvbU5vZGUsIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuZXhpdChkbm9kZS5kb21Ob2RlLCBwcm9wZXJ0aWVzLCBleGl0QW5pbWF0aW9uLCByZW1vdmVEb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkb21Ob2RlICYmIGRvbU5vZGUucGFyZW50Tm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZSk7XHJcbiAgICAgICAgZG5vZGUuZG9tTm9kZSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjaGVja0Rpc3Rpbmd1aXNoYWJsZShjaGlsZE5vZGVzLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKSB7XHJcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2luZGV4VG9DaGVja107XHJcbiAgICBpZiAoaXNWTm9kZShjaGlsZE5vZGUpICYmICFjaGlsZE5vZGUudGFnKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBUZXh0IG5vZGVzIG5lZWQgbm90IGJlIGRpc3Rpbmd1aXNoYWJsZVxyXG4gICAgfVxyXG4gICAgY29uc3QgeyBrZXkgfSA9IGNoaWxkTm9kZS5wcm9wZXJ0aWVzO1xyXG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaSAhPT0gaW5kZXhUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChzYW1lKG5vZGUsIGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZUlkZW50aWZpZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TmFtZSA9IHBhcmVudEluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ3Vua25vd24nO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1dOb2RlKGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlkZW50aWZpZXIgPSBjaGlsZE5vZGUud2lkZ2V0Q29uc3RydWN0b3IubmFtZSB8fCAndW5rbm93bic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlSWRlbnRpZmllciA9IGNoaWxkTm9kZS50YWc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgQSB3aWRnZXQgKCR7cGFyZW50TmFtZX0pIGhhcyBoYWQgYSBjaGlsZCBhZGRkZWQgb3IgcmVtb3ZlZCwgYnV0IHRoZXkgd2VyZSBub3QgYWJsZSB0byB1bmlxdWVseSBpZGVudGlmaWVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byBwcm92aWRlIGEgdW5pcXVlICdrZXknIHByb3BlcnR5IHdoZW4gdXNpbmcgdGhlIHNhbWUgd2lkZ2V0IG9yIGVsZW1lbnQgKCR7bm9kZUlkZW50aWZpZXJ9KSBtdWx0aXBsZSB0aW1lcyBhcyBzaWJsaW5nc2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuKHBhcmVudFZOb2RlLCBzaWJsaW5ncywgb2xkQ2hpbGRyZW4sIG5ld0NoaWxkcmVuLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIG9sZENoaWxkcmVuID0gb2xkQ2hpbGRyZW4gfHwgZW1wdHlBcnJheTtcclxuICAgIG5ld0NoaWxkcmVuID0gbmV3Q2hpbGRyZW47XHJcbiAgICBjb25zdCBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZENoaWxkcmVuLmxlbmd0aDtcclxuICAgIGNvbnN0IG5ld0NoaWxkcmVuTGVuZ3RoID0gbmV3Q2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgY29uc3QgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucztcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIHByb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoICsgMSB9KTtcclxuICAgIGxldCBvbGRJbmRleCA9IDA7XHJcbiAgICBsZXQgbmV3SW5kZXggPSAwO1xyXG4gICAgbGV0IGk7XHJcbiAgICBsZXQgdGV4dFVwZGF0ZWQgPSBmYWxzZTtcclxuICAgIHdoaWxlIChuZXdJbmRleCA8IG5ld0NoaWxkcmVuTGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IG9sZENoaWxkID0gb2xkSW5kZXggPCBvbGRDaGlsZHJlbkxlbmd0aCA/IG9sZENoaWxkcmVuW29sZEluZGV4XSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBuZXdDaGlsZCA9IG5ld0NoaWxkcmVuW25ld0luZGV4XTtcclxuICAgICAgICBpZiAoaXNWTm9kZShuZXdDaGlsZCkgJiYgdHlwZW9mIG5ld0NoaWxkLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG5ld0NoaWxkLmluc2VydGVkID0gaXNWTm9kZShvbGRDaGlsZCkgJiYgb2xkQ2hpbGQuaW5zZXJ0ZWQ7XHJcbiAgICAgICAgICAgIGFkZERlZmVycmVkUHJvcGVydGllcyhuZXdDaGlsZCwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2xkQ2hpbGQgIT09IHVuZGVmaW5lZCAmJiBzYW1lKG9sZENoaWxkLCBuZXdDaGlsZCkpIHtcclxuICAgICAgICAgICAgb2xkSW5kZXgrKztcclxuICAgICAgICAgICAgbmV3SW5kZXgrKztcclxuICAgICAgICAgICAgdGV4dFVwZGF0ZWQgPVxyXG4gICAgICAgICAgICAgICAgdXBkYXRlRG9tKG9sZENoaWxkLCBuZXdDaGlsZCwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBwYXJlbnRJbnN0YW5jZSwgb2xkQ2hpbGRyZW4uc2xpY2Uob2xkSW5kZXgpLCBuZXdDaGlsZHJlbi5zbGljZShuZXdJbmRleCkpIHx8IHRleHRVcGRhdGVkO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZmluZE9sZEluZGV4ID0gZmluZEluZGV4T2ZDaGlsZChvbGRDaGlsZHJlbiwgbmV3Q2hpbGQsIG9sZEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3QgYWRkQ2hpbGQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpbnNlcnRCZWZvcmVEb21Ob2RlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBsZXQgY2hpbGRyZW5BcnJheSA9IG9sZENoaWxkcmVuO1xyXG4gICAgICAgICAgICBsZXQgbmV4dEluZGV4ID0gb2xkSW5kZXggKyAxO1xyXG4gICAgICAgICAgICBsZXQgY2hpbGQgPSBvbGRDaGlsZHJlbltvbGRJbmRleF07XHJcbiAgICAgICAgICAgIGlmICghY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkID0gc2libGluZ3NbMF07XHJcbiAgICAgICAgICAgICAgICBuZXh0SW5kZXggPSAxO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5BcnJheSA9IHNpYmxpbmdzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGluc2VydEJlZm9yZUNoaWxkcmVuID0gW2NoaWxkXTtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChpbnNlcnRCZWZvcmVDaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRCZWZvcmUgPSBpbnNlcnRCZWZvcmVDaGlsZHJlbi5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1dOb2RlKGluc2VydEJlZm9yZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGluc3RhbmNlTWFwLmdldChpbnNlcnRCZWZvcmUuaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmRub2RlLnJlbmRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDaGlsZHJlbi5wdXNoKC4uLml0ZW0uZG5vZGUucmVuZGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlLmRvbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUuZG9tTm9kZS5wYXJlbnRFbGVtZW50ICE9PSBwYXJlbnRWTm9kZS5kb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVEb21Ob2RlID0gaW5zZXJ0QmVmb3JlLmRvbU5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ubGVuZ3RoID09PSAwICYmIGNoaWxkcmVuQXJyYXlbbmV4dEluZGV4XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDaGlsZHJlbi5wdXNoKGNoaWxkcmVuQXJyYXlbbmV4dEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjcmVhdGVEb20obmV3Q2hpbGQsIHBhcmVudFZOb2RlLCBuZXdDaGlsZHJlbi5zbGljZShuZXdJbmRleCArIDEpLCBpbnNlcnRCZWZvcmVEb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICBub2RlQWRkZWQobmV3Q2hpbGQsIHRyYW5zaXRpb25zKTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXhUb0NoZWNrID0gbmV3SW5kZXg7XHJcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2hlY2tEaXN0aW5ndWlzaGFibGUobmV3Q2hpbGRyZW4sIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghb2xkQ2hpbGQgfHwgZmluZE9sZEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICBhZGRDaGlsZCgpO1xyXG4gICAgICAgICAgICBuZXdJbmRleCsrO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlQ2hpbGQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4VG9DaGVjayA9IG9sZEluZGV4O1xyXG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpc1dOb2RlKG9sZENoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGluc3RhbmNlTWFwLmdldChvbGRDaGlsZC5pbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9sZENoaWxkID0gaXRlbS5kbm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub2RlVG9SZW1vdmUob2xkQ2hpbGQsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBmaW5kTmV3SW5kZXggPSBmaW5kSW5kZXhPZkNoaWxkKG5ld0NoaWxkcmVuLCBvbGRDaGlsZCwgbmV3SW5kZXggKyAxKTtcclxuICAgICAgICBpZiAoZmluZE5ld0luZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICByZW1vdmVDaGlsZCgpO1xyXG4gICAgICAgICAgICBvbGRJbmRleCsrO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWRkQ2hpbGQoKTtcclxuICAgICAgICByZW1vdmVDaGlsZCgpO1xyXG4gICAgICAgIG9sZEluZGV4Kys7XHJcbiAgICAgICAgbmV3SW5kZXgrKztcclxuICAgIH1cclxuICAgIGlmIChvbGRDaGlsZHJlbkxlbmd0aCA+IG9sZEluZGV4KSB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIGNoaWxkIGZyYWdtZW50c1xyXG4gICAgICAgIGZvciAoaSA9IG9sZEluZGV4OyBpIDwgb2xkQ2hpbGRyZW5MZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleFRvQ2hlY2sgPSBpO1xyXG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxldCBjaGlsZFRvUmVtb3ZlID0gb2xkQ2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChpc1dOb2RlKGNoaWxkVG9SZW1vdmUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gaW5zdGFuY2VNYXAuZ2V0KGNoaWxkVG9SZW1vdmUuaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRvUmVtb3ZlID0gaXRlbS5kbm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub2RlVG9SZW1vdmUoY2hpbGRUb1JlbW92ZSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dFVwZGF0ZWQ7XHJcbn1cclxuZnVuY3Rpb24gYWRkQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIGNoaWxkcmVuLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGluc2VydEJlZm9yZSA9IHVuZGVmaW5lZCwgY2hpbGROb2Rlcykge1xyXG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY2hpbGROb2RlcyA9IGFycmF5RnJvbShwYXJlbnRWTm9kZS5kb21Ob2RlLmNoaWxkTm9kZXMpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucztcclxuICAgIHByb2plY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoICsgMSB9KTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgIGNvbnN0IG5leHRTaWJsaW5ncyA9IGNoaWxkcmVuLnNsaWNlKGkgKyAxKTtcclxuICAgICAgICBpZiAoaXNWTm9kZShjaGlsZCkpIHtcclxuICAgICAgICAgICAgaWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIGNoaWxkTm9kZXMpIHtcclxuICAgICAgICAgICAgICAgIGxldCBkb21FbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoaWxkLmRvbU5vZGUgPT09IHVuZGVmaW5lZCAmJiBjaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50ID0gY2hpbGROb2Rlcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb21FbGVtZW50ICYmIGRvbUVsZW1lbnQudGFnTmFtZSA9PT0gKGNoaWxkLnRhZy50b1VwcGVyQ2FzZSgpIHx8IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuZG9tTm9kZSA9IGRvbUVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNyZWF0ZURvbShjaGlsZCwgcGFyZW50Vk5vZGUsIG5leHRTaWJsaW5ncywgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY3JlYXRlRG9tKGNoaWxkLCBwYXJlbnRWTm9kZSwgbmV4dFNpYmxpbmdzLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgY2hpbGROb2Rlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGVBZGRlZChjaGlsZCwgdHJhbnNpdGlvbnMpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgYWRkQ2hpbGRyZW4oZG5vZGUsIGRub2RlLmNoaWxkcmVuLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIHVuZGVmaW5lZCk7XHJcbiAgICBpZiAodHlwZW9mIGRub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID09PSAnZnVuY3Rpb24nICYmIGRub2RlLmluc2VydGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhZGREZWZlcnJlZFByb3BlcnRpZXMoZG5vZGUsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIH1cclxuICAgIGlmIChkbm9kZS5hdHRyaWJ1dGVzICYmIGRub2RlLmV2ZW50cykge1xyXG4gICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZSwge30sIGRub2RlLmF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgZmFsc2UpO1xyXG4gICAgICAgIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHt9LCBkbm9kZS5ldmVudHMsIHByb2plY3Rpb25PcHRpb25zLCB0cnVlKTtcclxuICAgICAgICBjb25zdCBldmVudHMgPSBkbm9kZS5ldmVudHM7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICB1cGRhdGVFdmVudChkb21Ob2RlLCBldmVudCwgZXZlbnRzW2V2ZW50XSwgcHJvamVjdGlvbk9wdGlvbnMsIGRub2RlLnByb3BlcnRpZXMuYmluZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBpZiAoZG5vZGUucHJvcGVydGllcy5rZXkgIT09IG51bGwgJiYgZG5vZGUucHJvcGVydGllcy5rZXkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZChkb21Ob2RlLCBgJHtkbm9kZS5wcm9wZXJ0aWVzLmtleX1gKTtcclxuICAgIH1cclxuICAgIGRub2RlLmluc2VydGVkID0gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVEb20oZG5vZGUsIHBhcmVudFZOb2RlLCBuZXh0U2libGluZ3MsIGluc2VydEJlZm9yZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlLCBjaGlsZE5vZGVzKSB7XHJcbiAgICBsZXQgZG9tTm9kZTtcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGlmIChpc1dOb2RlKGRub2RlKSkge1xyXG4gICAgICAgIGxldCB7IHdpZGdldENvbnN0cnVjdG9yIH0gPSBkbm9kZTtcclxuICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgIGlmICghaXNXaWRnZXRCYXNlQ29uc3RydWN0b3Iod2lkZ2V0Q29uc3RydWN0b3IpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwYXJlbnRJbnN0YW5jZURhdGEucmVnaXN0cnkoKS5nZXQod2lkZ2V0Q29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpZGdldENvbnN0cnVjdG9yID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgd2lkZ2V0Q29uc3RydWN0b3IoKTtcclxuICAgICAgICBkbm9kZS5pbnN0YW5jZSA9IGluc3RhbmNlO1xyXG4gICAgICAgIG5leHRTaWJsaW5nTWFwLnNldChpbnN0YW5jZSwgbmV4dFNpYmxpbmdzKTtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGEuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlLnB1c2goeyBpbnN0YW5jZSwgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoIH0pO1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVSZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICBpbnN0YW5jZS5fX3NldENvcmVQcm9wZXJ0aWVzX18oZG5vZGUuY29yZVByb3BlcnRpZXMpO1xyXG4gICAgICAgIGluc3RhbmNlLl9fc2V0Q2hpbGRyZW5fXyhkbm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgaW5zdGFuY2UuX19zZXRQcm9wZXJ0aWVzX18oZG5vZGUucHJvcGVydGllcyk7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBpbnN0YW5jZS5fX3JlbmRlcl9fKCk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChyZW5kZXJlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJlbmRlcmVkID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihyZW5kZXJlZCwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IGZpbHRlcmVkUmVuZGVyZWQ7XHJcbiAgICAgICAgICAgIGFkZENoaWxkcmVuKHBhcmVudFZOb2RlLCBmaWx0ZXJlZFJlbmRlcmVkLCBwcm9qZWN0aW9uT3B0aW9ucywgaW5zdGFuY2UsIGluc2VydEJlZm9yZSwgY2hpbGROb2Rlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZSwgcGFyZW50Vk5vZGUgfSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZFJvb3QoKTtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm9uQXR0YWNoKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgcHJvamVjdG9yU3RhdGUubWVyZ2VFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaW5pdFByb3BlcnRpZXNBbmRDaGlsZHJlbihkb21Ob2RlLCBkbm9kZSwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkb2MgPSBwYXJlbnRWTm9kZS5kb21Ob2RlLm93bmVyRG9jdW1lbnQ7XHJcbiAgICAgICAgaWYgKCFkbm9kZS50YWcgJiYgdHlwZW9mIGRub2RlLnRleHQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChkbm9kZS5kb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgcGFyZW50Vk5vZGUuZG9tTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RG9tTm9kZSA9IGRub2RlLmRvbU5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkbm9kZS50ZXh0KTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRWTm9kZS5kb21Ob2RlID09PSBkbm9kZS5kb21Ob2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLnJlcGxhY2VDaGlsZChuZXdEb21Ob2RlLCBkbm9kZS5kb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQobmV3RG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlICYmIGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkbm9kZS5kb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSBuZXdEb21Ob2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmluc2VydEJlZm9yZShkb21Ob2RlLCBpbnNlcnRCZWZvcmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5hcHBlbmRDaGlsZChkb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRub2RlLmRvbU5vZGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRub2RlLnRhZyA9PT0gJ3N2ZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UsIGRub2RlLnRhZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgfHwgZG9jLmNyZWF0ZUVsZW1lbnQoZG5vZGUudGFnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5pbnNlcnRCZWZvcmUoZG9tTm9kZSwgaW5zZXJ0QmVmb3JlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkb21Ob2RlLnBhcmVudE5vZGUgIT09IHBhcmVudFZOb2RlLmRvbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQoZG9tTm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlRG9tKHByZXZpb3VzLCBkbm9kZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBwYXJlbnRJbnN0YW5jZSwgb2xkTmV4dFNpYmxpbmdzLCBuZXh0U2libGluZ3MpIHtcclxuICAgIGlmIChpc1dOb2RlKGRub2RlKSkge1xyXG4gICAgICAgIGNvbnN0IHsgaW5zdGFuY2UgfSA9IHByZXZpb3VzO1xyXG4gICAgICAgIGNvbnN0IHsgcGFyZW50Vk5vZGUsIGRub2RlOiBub2RlIH0gPSBpbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzUmVuZGVyZWQgPSBub2RlID8gbm9kZS5yZW5kZXJlZCA6IHByZXZpb3VzLnJlbmRlcmVkO1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGF0YSA9IHdpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDb3JlUHJvcGVydGllc19fKGRub2RlLmNvcmVQcm9wZXJ0aWVzKTtcclxuICAgICAgICBpbnN0YW5jZS5fX3NldENoaWxkcmVuX18oZG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICAgIGluc3RhbmNlLl9fc2V0UHJvcGVydGllc19fKGRub2RlLnByb3BlcnRpZXMpO1xyXG4gICAgICAgIG5leHRTaWJsaW5nTWFwLnNldChpbnN0YW5jZSwgbmV4dFNpYmxpbmdzKTtcclxuICAgICAgICBkbm9kZS5pbnN0YW5jZSA9IGluc3RhbmNlO1xyXG4gICAgICAgIGlmIChpbnN0YW5jZURhdGEuZGlydHkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBpbnN0YW5jZS5fX3JlbmRlcl9fKCk7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgZG5vZGUucmVuZGVyZWQgPSBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKHJlbmRlcmVkLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKHBhcmVudFZOb2RlLCBvbGROZXh0U2libGluZ3MsIHByZXZpb3VzUmVuZGVyZWQsIGRub2RlLnJlbmRlcmVkLCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IHByZXZpb3VzUmVuZGVyZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZSwgcGFyZW50Vk5vZGUgfSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZFJvb3QoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChwcmV2aW91cyA9PT0gZG5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkb21Ob2RlID0gKGRub2RlLmRvbU5vZGUgPSBwcmV2aW91cy5kb21Ob2RlKTtcclxuICAgICAgICBsZXQgdGV4dFVwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgdXBkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghZG5vZGUudGFnICYmIHR5cGVvZiBkbm9kZS50ZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUudGV4dCAhPT0gcHJldmlvdXMudGV4dCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RG9tTm9kZSA9IGRvbU5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkbm9kZS50ZXh0KTtcclxuICAgICAgICAgICAgICAgIGRvbU5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3RG9tTm9kZSwgZG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBkbm9kZS5kb21Ob2RlID0gbmV3RG9tTm9kZTtcclxuICAgICAgICAgICAgICAgIHRleHRVcGRhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0VXBkYXRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRub2RlLnRhZyAmJiBkbm9kZS50YWcubGFzdEluZGV4T2YoJ3N2ZycsIDApID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJldmlvdXMuY2hpbGRyZW4gIT09IGRub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oZG5vZGUuY2hpbGRyZW4sIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGRub2RlLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkID1cclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVDaGlsZHJlbihkbm9kZSwgb2xkTmV4dFNpYmxpbmdzLCBwcmV2aW91cy5jaGlsZHJlbiwgY2hpbGRyZW4sIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykgfHwgdXBkYXRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c1Byb3BlcnRpZXMgPSBidWlsZFByZXZpb3VzUHJvcGVydGllcyhkb21Ob2RlLCBwcmV2aW91cywgZG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmF0dHJpYnV0ZXMsIGRub2RlLmF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLnByb3BlcnRpZXMsIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zLCBmYWxzZSkgfHwgdXBkYXRlZDtcclxuICAgICAgICAgICAgICAgIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5ldmVudHMsIGRub2RlLmV2ZW50cywgcHJvamVjdGlvbk9wdGlvbnMsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gZG5vZGUuZXZlbnRzO1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzKS5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50LCBldmVudHNbZXZlbnRdLCBwcm9qZWN0aW9uT3B0aW9ucywgZG5vZGUucHJvcGVydGllcy5iaW5kLCBwcmV2aW91c1Byb3BlcnRpZXMuZXZlbnRzW2V2ZW50XSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLnByb3BlcnRpZXMsIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gbnVsbCAmJiBkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZChkb21Ob2RlLCBgJHtkbm9kZS5wcm9wZXJ0aWVzLmtleX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodXBkYXRlZCAmJiBkbm9kZS5wcm9wZXJ0aWVzICYmIGRub2RlLnByb3BlcnRpZXMudXBkYXRlQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgIGRub2RlLnByb3BlcnRpZXMudXBkYXRlQW5pbWF0aW9uKGRvbU5vZGUsIGRub2RlLnByb3BlcnRpZXMsIHByZXZpb3VzLnByb3BlcnRpZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBhZGREZWZlcnJlZFByb3BlcnRpZXModm5vZGUsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICAvLyB0cmFuc2ZlciBhbnkgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgLSBhcyB0aGVzZSBtdXN0IGJlIGRlY29yYXRlZCBwcm9wZXJ0aWVzXHJcbiAgICB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMgPSB2bm9kZS5wcm9wZXJ0aWVzO1xyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHZub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrKCEhdm5vZGUuaW5zZXJ0ZWQpO1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgdm5vZGUucHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnRpZXMsIHZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllcyk7XHJcbiAgICBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdm5vZGUuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2soISF2bm9kZS5pbnNlcnRlZCksIHZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllcyk7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyh2bm9kZS5kb21Ob2RlLCB2bm9kZS5wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgdm5vZGUucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgaWYgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xyXG4gICAgICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XHJcbiAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGdsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHNjaGVkdWxlUmVuZGVyKHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xyXG4gICAgICAgIHJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9qZWN0b3JTdGF0ZS5yZW5kZXJTY2hlZHVsZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgcHJvamVjdG9yU3RhdGUucmVuZGVyU2NoZWR1bGVkID0gdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgcmVuZGVyUXVldWUgPSBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZTtcclxuICAgIGNvbnN0IHJlbmRlcnMgPSBbLi4ucmVuZGVyUXVldWVdO1xyXG4gICAgcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWUgPSBbXTtcclxuICAgIHJlbmRlcnMuc29ydCgoYSwgYikgPT4gYS5kZXB0aCAtIGIuZGVwdGgpO1xyXG4gICAgY29uc3QgcHJldmlvdXNseVJlbmRlcmVkID0gW107XHJcbiAgICB3aGlsZSAocmVuZGVycy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB7IGluc3RhbmNlIH0gPSByZW5kZXJzLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlTWFwLmhhcyhpbnN0YW5jZSkgJiYgcHJldmlvdXNseVJlbmRlcmVkLmluZGV4T2YoaW5zdGFuY2UpID09PSAtMSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c2x5UmVuZGVyZWQucHVzaChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcGFyZW50Vk5vZGUsIGRub2RlIH0gPSBpbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0U2libGluZ3MgPSBuZXh0U2libGluZ01hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB1cGRhdGVEb20oZG5vZGUsIHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBpbnN0YW5jZSwgbmV4dFNpYmxpbmdzLCBuZXh0U2libGluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIHJ1bkRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKTtcclxufVxyXG5leHBvcnQgY29uc3QgZG9tID0ge1xyXG4gICAgYXBwZW5kOiBmdW5jdGlvbiAocGFyZW50Tm9kZSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZURhdGEgPSB3aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgIGNvbnN0IGZpbmFsUHJvamVjdG9yT3B0aW9ucyA9IGdldFByb2plY3Rpb25PcHRpb25zKHByb2plY3Rpb25PcHRpb25zLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgY29uc3QgcHJvamVjdG9yU3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGFmdGVyUmVuZGVyQ2FsbGJhY2tzOiBbXSxcclxuICAgICAgICAgICAgZGVmZXJyZWRSZW5kZXJDYWxsYmFja3M6IFtdLFxyXG4gICAgICAgICAgICBub2RlTWFwOiBuZXcgV2Vha01hcCgpLFxyXG4gICAgICAgICAgICByZW5kZXJTY2hlZHVsZWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgcmVuZGVyUXVldWU6IFtdLFxyXG4gICAgICAgICAgICBtZXJnZTogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgIG1lcmdlRWxlbWVudDogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50XHJcbiAgICAgICAgfTtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZU1hcC5zZXQoaW5zdGFuY2UsIHByb2plY3RvclN0YXRlKTtcclxuICAgICAgICBmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFZOb2RlID0gdG9QYXJlbnRWTm9kZShmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUpO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSk7XHJcbiAgICAgICAgaW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlOiBub2RlLCBwYXJlbnRWTm9kZSB9KTtcclxuICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZS5wdXNoKHsgaW5zdGFuY2UsIGRlcHRoOiBmaW5hbFByb2plY3Rvck9wdGlvbnMuZGVwdGggfSk7XHJcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVJlbmRlcihmaW5hbFByb2plY3Rvck9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB1cGRhdGVEb20obm9kZSwgbm9kZSwgZmluYWxQcm9qZWN0b3JPcHRpb25zLCBwYXJlbnRWTm9kZSwgaW5zdGFuY2UsIFtdLCBbXSk7XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5vbkF0dGFjaCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJ1bkRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XHJcbiAgICAgICAgcnVuQWZ0ZXJSZW5kZXJDYWxsYmFja3MoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkb21Ob2RlOiBmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGVcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIH0sXHJcbiAgICBtZXJnZTogZnVuY3Rpb24gKGVsZW1lbnQsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgPSB0cnVlO1xyXG4gICAgICAgIHByb2plY3Rpb25PcHRpb25zLm1lcmdlRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHRoaXMuYXBwZW5kKGVsZW1lbnQucGFyZW50Tm9kZSwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICBjb25zdCBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChpbnN0YW5jZSk7XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGUubWVyZ2UgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gcHJvamVjdGlvbjtcclxuICAgIH1cclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmRvbS5tanMubWFwXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3Zkb20ubWpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvdmRvbS5tanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIHdpZGdldEZhY3RvcnkgPSByZXF1aXJlKFwic3JjL21lbnUvTWVudVwiKTtcblxudmFyIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IHJlcXVpcmUoJ0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQnKS5kZWZhdWx0O1xyXG5cclxudmFyIGRlZmF1bHRFeHBvcnQgPSB3aWRnZXRGYWN0b3J5LmRlZmF1bHQ7XHJcbmRlZmF1bHRFeHBvcnQgJiYgcmVnaXN0ZXJDdXN0b21FbGVtZW50KGRlZmF1bHRFeHBvcnQpO1xyXG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2ltcG9ydHMtbG9hZGVyP3dpZGdldEZhY3Rvcnk9c3JjL21lbnUvTWVudSEuL25vZGVfbW9kdWxlcy9AZG9qby9jbGktYnVpbGQtd2lkZ2V0L3RlbXBsYXRlL2N1c3RvbS1lbGVtZW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9pbXBvcnRzLWxvYWRlci9pbmRleC5qcz93aWRnZXRGYWN0b3J5PXNyYy9tZW51L01lbnUhLi9ub2RlX21vZHVsZXMvQGRvam8vY2xpLWJ1aWxkLXdpZGdldC90ZW1wbGF0ZS9jdXN0b20tZWxlbWVudC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSBtZW51IiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDApXHJcbiAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSB5W29wWzBdICYgMiA/IFwicmV0dXJuXCIgOiBvcFswXSA/IFwidGhyb3dcIiA6IFwibmV4dFwiXSkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbMCwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgIH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChvW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9OyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2goZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxuXHRcdGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IG1lbnUiLCJpbXBvcnQgeyB2IH0gZnJvbSAnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2QnO1xyXG5pbXBvcnQgeyBjdXN0b21FbGVtZW50IH0gZnJvbSAnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvY3VzdG9tRWxlbWVudCc7XHJcbmltcG9ydCB7IFdpZGdldFByb3BlcnRpZXMsIFdOb2RlIH0gZnJvbSAnQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyB0aGVtZSwgVGhlbWVkTWl4aW4gfSBmcm9tICdAZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1RoZW1lZCc7XHJcbmltcG9ydCB7IFdpZGdldEJhc2UgfSBmcm9tICdAZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBNZW51SXRlbVByb3BlcnRpZXMgfSBmcm9tICcuLi9tZW51LWl0ZW0vTWVudUl0ZW0nO1xyXG5cclxuaW1wb3J0ICogYXMgY3NzIGZyb20gJy4vbWVudS5tLmNzcyc7XHJcblxyXG5pbnRlcmZhY2UgTWVudVByb3BlcnRpZXMgZXh0ZW5kcyBXaWRnZXRQcm9wZXJ0aWVzIHtcclxuXHRvblNlbGVjdGVkOiAoZGF0YTogYW55KSA9PiB2b2lkO1xyXG59XHJcblxyXG5AY3VzdG9tRWxlbWVudDxNZW51UHJvcGVydGllcz4oe1xyXG5cdHRhZzogJ2RlbW8tbWVudScsXHJcblx0ZXZlbnRzOiBbJ29uU2VsZWN0ZWQnXVxyXG59KVxyXG5AdGhlbWUoY3NzKVxyXG5leHBvcnQgY2xhc3MgTWVudSBleHRlbmRzIFRoZW1lZE1peGluKFdpZGdldEJhc2UpPE1lbnVQcm9wZXJ0aWVzLCBXTm9kZTxNZW51SXRlbT4+IHtcclxuXHRwcml2YXRlIF9zZWxlY3RlZElkOiBudW1iZXI7XHJcblxyXG5cdHByaXZhdGUgX29uU2VsZWN0ZWQoaWQ6IG51bWJlciwgZGF0YTogYW55KSB7XHJcblx0XHR0aGlzLl9zZWxlY3RlZElkID0gaWQ7XHJcblx0XHR0aGlzLnByb3BlcnRpZXMub25TZWxlY3RlZChkYXRhKTtcclxuXHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIHJlbmRlcigpIHtcclxuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5jaGlsZHJlbi5tYXAoKGNoaWxkLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRpZiAoY2hpbGQpIHtcclxuXHRcdFx0XHRjb25zdCBwcm9wZXJ0aWVzOiBQYXJ0aWFsPE1lbnVJdGVtUHJvcGVydGllcz4gPSB7XHJcblx0XHRcdFx0XHRvblNlbGVjdGVkOiAoZGF0YTogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuX29uU2VsZWN0ZWQoaW5kZXgsIGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0aWYgKHRoaXMuX3NlbGVjdGVkSWQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0cHJvcGVydGllcy5zZWxlY3RlZCA9IGluZGV4ID09PSB0aGlzLl9zZWxlY3RlZElkO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjaGlsZC5wcm9wZXJ0aWVzID0geyAuLi5jaGlsZC5wcm9wZXJ0aWVzLCAuLi5wcm9wZXJ0aWVzIH07XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGNoaWxkO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIHYoJ25hdicsIHsgY2xhc3NlczogdGhpcy50aGVtZShjc3Mucm9vdCkgfSwgW1xyXG5cdFx0XHR2KFxyXG5cdFx0XHRcdCdvbCcsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0Y2xhc3NlczogdGhpcy50aGVtZShjc3MubWVudUNvbnRhaW5lcilcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGl0ZW1zXHJcblx0XHRcdClcclxuXHRcdF0pO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVudTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXI/dHlwZT10cyZpbnN0YW5jZU5hbWU9MF9tZW51IS4vc3JjL21lbnUvTWVudS50cyIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcIiBfa2V5XCI6XCJ0ZXN0LWFwcC9tZW51XCIsXCJyb290XCI6XCJtZW51LW1fX3Jvb3RfXzNiQTZqXCIsXCJtZW51Q29udGFpbmVyXCI6XCJtZW51LW1fX21lbnVDb250YWluZXJfXzFlb0dmXCJ9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL21lbnUvbWVudS5tLmNzc1xuLy8gbW9kdWxlIGlkID0gLi9zcmMvbWVudS9tZW51Lm0uY3NzXG4vLyBtb2R1bGUgY2h1bmtzID0gbWVudSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/test-app/fixtures/windows/dist/menu-item/menu-item-1.0.0.js b/test-app/fixtures/windows/dist/menu-item/menu-item-1.0.0.js index f805ed0..3e1453e 100644 --- a/test-app/fixtures/windows/dist/menu-item/menu-item-1.0.0.js +++ b/test-app/fixtures/windows/dist/menu-item/menu-item-1.0.0.js @@ -6,7 +6,7 @@ * All rights reserved * */ -!function(e){var t={};function o(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,o),s.l=!0,s.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}({"./node_modules/@dojo/core/Destroyable.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/core/lang.mjs"),s=o("./node_modules/@dojo/shim/Promise.mjs");function n(){return s.a.resolve(!1)}function i(){throw new Error("Call made to destroyed method")}class d{constructor(){this.handles=[]}own(e){const t=Array.isArray(e)?Object(r.b)(...e):e,{handles:o}=this;return o.push(t),{destroy(){o.splice(o.indexOf(t)),t.destroy()}}}destroy(){return new s.a(e=>{this.handles.forEach(e=>{e&&e.destroy&&e.destroy()}),this.destroy=n,this.own=i,e(!0)})}}t.a=d},"./node_modules/@dojo/core/Evented.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/core/Destroyable.mjs");const n=new r.b;class i extends s.a{constructor(){super(...arguments),this.listenersMap=new r.b}emit(e){this.listenersMap.forEach((t,o)=>{(function(e,t){if("string"==typeof t&&"string"==typeof e&&-1!==e.indexOf("*")){let o;return n.has(e)?o=n.get(e):(o=new RegExp(`^${e.replace(/\*/g,".*")}$`),n.set(e,o)),o.test(t)}return e===t})(o,e.type)&&t.forEach(t=>{t.call(this,e)})})}on(e,t){if(Array.isArray(t)){const o=t.map(t=>this._addListener(e,t));return{destroy(){o.forEach(e=>e.destroy())}}}return this._addListener(e,t)}_addListener(e,t){const o=this.listenersMap.get(e)||[];return o.push(t),this.listenersMap.set(e,o),{destroy:()=>{const o=this.listenersMap.get(e)||[];o.splice(o.indexOf(t),1)}}}}t.a=i},"./node_modules/@dojo/core/lang.mjs":function(e,t,o){"use strict";t.b=function(...e){return function(e){let t=!1;return{destroy:function(){t||(t=!0,e())}}}(function(){for(let t=0;t{r[e]=t,delete n[e]},()=>{delete n[e]})}function l(e){let t;const o=e.toLowerCase();if(o in a)t=a[o];else if(s[o])t=r[o]=s[o].call(null),delete s[o];else{if(!(o in r)){if(e in n)return!1;throw new TypeError(`Attempt to detect unregistered has feature "${e}"`)}t=r[o]}return t}c("debug",!0),c("host-browser","undefined"!=typeof document&&"undefined"!=typeof location),c("host-node",function(){if("object"==typeof o&&o.versions&&o.versions.node)return o.versions.node})}).call(t,o("./node_modules/webpack/buildin/global.js"),o("./node_modules/process/browser.js"))},"./node_modules/@dojo/shim/Map.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});o("./node_modules/@dojo/shim/iterator.mjs");var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/object.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s=r.a.Map;t.b=s},"./node_modules/@dojo/shim/Promise.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/queue.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs"),o("./node_modules/@dojo/shim/support/has.mjs");let s=r.a.Promise;t.a=s},"./node_modules/@dojo/shim/Symbol.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/support/has.mjs");var r=o("./node_modules/@dojo/shim/global.mjs"),s=o("./node_modules/@dojo/shim/support/util.mjs");let n=r.a.Symbol;["hasInstance","isConcatSpreadable","iterator","species","replace","search","split","match","toPrimitive","toStringTag","unscopables","observable"].forEach(e=>{n[e]||Object.defineProperty(n,e,Object(s.a)(n.for(e),!1,!1))}),t.a=n},"./node_modules/@dojo/shim/WeakMap.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/iterator.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s=r.a.WeakMap;t.a=s},"./node_modules/@dojo/shim/array.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return n});var r=o("./node_modules/@dojo/shim/global.mjs"),s=(o("./node_modules/@dojo/shim/iterator.mjs"),o("./node_modules/@dojo/shim/number.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/support/util.mjs"));let n,i,d,a,c,l,u;n=r.a.Array.from,i=r.a.Array.of,d=Object(s.b)(r.a.Array.prototype.copyWithin),a=Object(s.b)(r.a.Array.prototype.fill),c=Object(s.b)(r.a.Array.prototype.find),l=Object(s.b)(r.a.Array.prototype.findIndex),u=Object(s.b)(r.a.Array.prototype.includes)},"./node_modules/@dojo/shim/global.mjs":function(e,t,o){"use strict";(function(e){const o=void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0;t.a=o}).call(t,o("./node_modules/webpack/buildin/global.js"))},"./node_modules/@dojo/shim/iterator.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/Symbol.mjs"),o("./node_modules/@dojo/shim/string.mjs")},"./node_modules/@dojo/shim/number.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/global.mjs");Math.pow(2,53)},"./node_modules/@dojo/shim/object.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s,n,i,d,a,c,l,u,h;{const e=r.a.Object;s=e.assign,n=e.getOwnPropertyDescriptor,i=e.getOwnPropertyNames,d=e.getOwnPropertySymbols,a=e.is,c=e.keys}{const e=r.a.Object;l=e.getOwnPropertyDescriptors,u=e.entries,h=e.values}},"./node_modules/@dojo/shim/string.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs"),s=(o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/support/util.mjs"));t.b=55296;t.a=56319;let n,i,d,a,c,l,u,h,p,m;n=r.a.String.fromCodePoint,i=r.a.String.raw,d=Object(s.b)(r.a.String.prototype.codePointAt),a=Object(s.b)(r.a.String.prototype.endsWith),c=Object(s.b)(r.a.String.prototype.includes),l=Object(s.b)(r.a.String.prototype.normalize),u=Object(s.b)(r.a.String.prototype.repeat),h=Object(s.b)(r.a.String.prototype.startsWith),p=Object(s.b)(r.a.String.prototype.padEnd),m=Object(s.b)(r.a.String.prototype.padStart)},"./node_modules/@dojo/shim/support/has.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/has/has.mjs"),s=o("./node_modules/@dojo/shim/global.mjs");r.b;Object(r.a)("es6-array",()=>["from","of"].every(e=>e in s.a.Array)&&["findIndex","find","copyWithin"].every(e=>e in s.a.Array.prototype),!0),Object(r.a)("es6-array-fill",()=>"fill"in s.a.Array.prototype&&1===[1].fill(9,Number.POSITIVE_INFINITY)[0],!0),Object(r.a)("es7-array",()=>"includes"in s.a.Array.prototype,!0),Object(r.a)("es6-map",()=>{if("function"==typeof s.a.Map)try{const e=new s.a.Map([[0,1]]);return e.has(0)&&"function"==typeof e.keys&&"function"==typeof e.values&&"function"==typeof e.entries}catch(e){return!1}return!1},!0),Object(r.a)("es6-math",()=>["clz32","sign","log10","log2","log1p","expm1","cosh","sinh","tanh","acosh","asinh","atanh","trunc","fround","cbrt","hypot"].every(e=>"function"==typeof s.a.Math[e]),!0),Object(r.a)("es6-math-imul",()=>"imul"in s.a.Math&&-5===Math.imul(4294967295,5),!0),Object(r.a)("es6-object",()=>["assign","is","getOwnPropertySymbols","setPrototypeOf"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es2017-object",()=>["values","entries","getOwnPropertyDescriptors"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es-observable",()=>void 0!==s.a.Observable,!0),Object(r.a)("es6-promise",()=>void 0!==s.a.Promise&&!0,!0),Object(r.a)("es6-set",()=>{if("function"==typeof s.a.Set){const e=new s.a.Set([1]);return e.has(1)&&"keys"in e&&"function"==typeof e.keys&&!0}return!1},!0),Object(r.a)("es6-string",()=>["fromCodePoint"].every(e=>"function"==typeof s.a.String[e])&&["codePointAt","normalize","repeat","startsWith","endsWith","includes"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-string-raw",()=>{function e(e,...t){const o=[...e];return o.raw=e.raw,o}if("raw"in s.a.String){let t=e`a\n${1}`;return t.raw=["a\\n"],"a:\\n"===s.a.String.raw(t,42)}return!1},!0),Object(r.a)("es2017-string",()=>["padStart","padEnd"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-symbol",()=>void 0!==s.a.Symbol&&"symbol"==typeof Symbol(),!0),Object(r.a)("es6-weakmap",()=>{if(void 0!==s.a.WeakMap){const e={},t={},o=new s.a.WeakMap([[e,1]]);return Object.freeze(e),1===o.get(e)&&o.set(t,2)===o&&!0}return!1},!0),Object(r.a)("microtasks",()=>!0,!0),Object(r.a)("postmessage",()=>void 0!==s.a.window&&"function"==typeof s.a.postMessage,!0),Object(r.a)("raf",()=>"function"==typeof s.a.requestAnimationFrame,!0),Object(r.a)("setimmediate",()=>void 0!==s.a.setImmediate,!0),Object(r.a)("dom-mutationobserver",()=>{if(Boolean(s.a.MutationObserver||s.a.WebKitMutationObserver)){const e=document.createElement("div"),t=new(s.a.MutationObserver||s.a.WebKitMutationObserver)(function(){});return t.observe(e,{attributes:!0}),e.style.setProperty("display","block"),Boolean(t.takeRecords().length)}return!1},!0),Object(r.a)("dom-webanimation",()=>void 0!==s.a.Animation&&void 0!==s.a.KeyframeEffect,!0)},"./node_modules/@dojo/shim/support/queue.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/has.mjs");function s(e){e&&e.isActive&&e.callback&&e.callback()}function n(e,t){return{destroy:function(){this.destroy=function(){},e.isActive=!1,e.callback=null,t&&t()}}}!function(){let e,t;{const e=[];r.a.addEventListener("message",function(t){t.source===r.a&&"dojo-queue-message"===t.data&&(t.stopPropagation(),e.length&&s(e.shift()))}),t=function(t){e.push(t),r.a.postMessage("dojo-queue-message","*")}}function o(o){const r={isActive:!0,callback:o},s=t(r);return n(r,e&&function(){e(s)})}}();!function(){function e(e){const t={isActive:!0,callback:e},o=requestAnimationFrame(s.bind(null,t));return n(t,function(){cancelAnimationFrame(o)})}}();!function(){let e;e=function(e){r.a.Promise.resolve(e).then(s)}}()},"./node_modules/@dojo/shim/support/util.mjs":function(e,t,o){"use strict";t.a=function(e,t=!1,o=!0,r=!0){return{value:e,enumerable:t,writable:o,configurable:r}},t.b=function(e){return function(t,...o){return e.apply(t,o)}}},"./node_modules/@dojo/widget-core/Injector.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/core/Evented.mjs");class s extends r.a{constructor(e){super(),this._payload=e}setInvalidator(e){this._invalidator=e}get(){return this._payload}set(e){this._payload=e,this._invalidator&&this._invalidator()}}t.a=s},"./node_modules/@dojo/widget-core/NodeHandler.mjs":function(e,t,o){"use strict";var r,s=o("./node_modules/@dojo/core/Evented.mjs"),n=o("./node_modules/@dojo/shim/Map.mjs");!function(e){e.Projector="Projector",e.Widget="Widget"}(r||(r={}));t.a=class extends s.a{constructor(){super(...arguments),this._nodeMap=new n.b}get(e){return this._nodeMap.get(e)}has(e){return this._nodeMap.has(e)}add(e,t){this._nodeMap.set(t,e),this.emit({type:t})}addRoot(){this.emit({type:r.Widget})}addProjector(){this.emit({type:r.Projector})}clear(){this._nodeMap.clear()}}},"./node_modules/@dojo/widget-core/Registry.mjs":function(e,t,o){"use strict";t.d=a;var r=o("./node_modules/@dojo/shim/Promise.mjs"),s=o("./node_modules/@dojo/shim/Map.mjs"),n=o("./node_modules/@dojo/shim/Symbol.mjs"),i=o("./node_modules/@dojo/core/Evented.mjs");const d=Object(n.a)("Widget Base");function a(e){return Boolean(e&&e._type===d)}t.b=d;class c extends i.a{emitLoadedEvent(e,t){this.emit({type:e,action:"loaded",item:t})}define(e,t){if(void 0===this._widgetRegistry&&(this._widgetRegistry=new s.b),this._widgetRegistry.has(e))throw new Error(`widget has already been registered for '${e.toString()}'`);this._widgetRegistry.set(e,t),t instanceof r.a?t.then(t=>(this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}):a(t)&&this.emitLoadedEvent(e,t)}defineInjector(e,t){if(void 0===this._injectorRegistry&&(this._injectorRegistry=new s.b),this._injectorRegistry.has(e))throw new Error(`injector has already been registered for '${e.toString()}'`);const o=new i.a,r={injector:t(()=>o.emit({type:"invalidate"})),invalidator:o};this._injectorRegistry.set(e,r),this.emitLoadedEvent(e,r)}get(e){if(!this._widgetRegistry||!this.has(e))return null;const t=this._widgetRegistry.get(e);if(a(t))return t;if(t instanceof r.a)return null;const o=t();return this._widgetRegistry.set(e,o),o.then(t=>((function(e){return Boolean(e&&e.hasOwnProperty("__esModule")&&e.hasOwnProperty("default")&&a(e.default))})(t)&&(t=t.default),this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}),null}getInjector(e){return this._injectorRegistry&&this.hasInjector(e)?this._injectorRegistry.get(e):null}has(e){return Boolean(this._widgetRegistry&&this._widgetRegistry.has(e))}hasInjector(e){return Boolean(this._injectorRegistry&&this._injectorRegistry.has(e))}}t.a=c,t.c=c},"./node_modules/@dojo/widget-core/RegistryHandler.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/core/Evented.mjs"),n=o("./node_modules/@dojo/widget-core/Registry.mjs");t.a=class extends s.a{constructor(){super(),this._registry=new n.a,this._registryWidgetLabelMap=new r.a,this._registryInjectorLabelMap=new r.a,this.own(this._registry),this.own({destroy:()=>{this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry),this.baseRegistry=void 0)}})}set base(e){this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry)),this.baseRegistry=e}define(e,t){this._registry.define(e,t)}defineInjector(e,t){this._registry.defineInjector(e,t)}has(e){return this._registry.has(e)||Boolean(this.baseRegistry&&this.baseRegistry.has(e))}hasInjector(e){return this._registry.hasInjector(e)||Boolean(this.baseRegistry&&this.baseRegistry.hasInjector(e))}get(e,t=!1){return this._get(e,t,"get",this._registryWidgetLabelMap)}getInjector(e,t=!1){return this._get(e,t,"getInjector",this._registryInjectorLabelMap)}_get(e,t,o,r){const s=t?[this.baseRegistry,this._registry]:[this._registry,this.baseRegistry];for(let n=0;n{"loaded"===r.action&&this[o](e,t)===r.item&&this.emit({type:"invalidate"})});this.own(s),r.set(i,[...a,e])}}return null}}},"./node_modules/@dojo/widget-core/WidgetBase.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/shim/WeakMap.mjs"),n=o("./node_modules/@dojo/shim/Symbol.mjs"),i=o("./node_modules/@dojo/widget-core/d.mjs"),d=o("./node_modules/@dojo/widget-core/diff.mjs"),a=o("./node_modules/@dojo/widget-core/RegistryHandler.mjs"),c=o("./node_modules/@dojo/widget-core/NodeHandler.mjs"),l=o("./node_modules/@dojo/widget-core/vdom.mjs"),u=o("./node_modules/@dojo/widget-core/Registry.mjs");const h=new r.b,p=d.a.bind(null),m=n.a.for("dojoNoBind");t.b=m;class f{constructor(){this._initialProperties=!0,this._changedPropertyKeys=[],this._nodeHandler=new c.a,this._handles=[],this._children=[],this._decoratorCache=new r.b,this._properties={},this._boundRenderFunc=this.render.bind(this),this._boundInvalidate=this.invalidate.bind(this),l.b.set(this,{dirty:!0,onAttach:()=>{this.onAttach()},onDetach:()=>{this.onDetach(),this.destroy()},nodeHandler:this._nodeHandler,registry:()=>this.registry,coreProperties:{},rendering:!1,inputProperties:{}}),this._runAfterConstructors()}meta(e){void 0===this._metaMap&&(this._metaMap=new r.b);let t=this._metaMap.get(e);return t||(t=new e({invalidate:this._boundInvalidate,nodeHandler:this._nodeHandler,bind:this}),this.own(t),this._metaMap.set(e,t)),t}onAttach(){}onDetach(){}get properties(){return this._properties}get changedPropertyKeys(){return[...this._changedPropertyKeys]}__setCoreProperties__(e){const{baseRegistry:t}=e,o=l.b.get(this);o.coreProperties.baseRegistry!==t&&(void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry.base=t,this.invalidate()),o.coreProperties=e}__setProperties__(e){const t=l.b.get(this);t.inputProperties=e;const o=this._runBeforeProperties(e),r=this.getDecorator("registeredDiffProperty"),s=[],n=Object.keys(o);if(!1===this._initialProperties||0!==r.length){const e=[...n,...Object.keys(this._properties)],i=[],d={};let a=!1;for(let n=0;n{e.changed&&t.call(this,e.previousProperties,e.newProperties)}),this._properties=d,this._changedPropertyKeys=s}else{this._initialProperties=!1;for(let e=0;e0&&this.invalidate()}get children(){return this._children}__setChildren__(e){(this._children.length>0||e.length>0)&&(this._children=e,this.invalidate())}__render__(){l.b.get(this).dirty=!1;let e=this._runBeforeRenders()();return e=this.runAfterRenders(e),this._nodeHandler.clear(),e}invalidate(){const e=l.b.get(this);e.invalidate&&e.invalidate()}render(){return Object(i.g)("div",{},this.children)}addDecorator(e,t){if(t=Array.isArray(t)?t:[t],this.hasOwnProperty("constructor")){let o=h.get(this.constructor);o||(o=new r.b,h.set(this.constructor,o));let s=o.get(e);s||(s=[],o.set(e,s)),s.push(...t)}else{const o=this.getDecorator(e);this._decoratorCache.set(e,[...o,...t])}}_buildDecoratorList(e){const t=[];let o=this.constructor;for(;o;){const r=h.get(o);if(r){const o=r.get(e);o&&t.unshift(...o)}o=Object.getPrototypeOf(o)}return t}getDecorator(e){let t=this._decoratorCache.get(e);return void 0!==t?t:(t=this._buildDecoratorList(e),this._decoratorCache.set(e,t),t)}_mapDiffPropertyReactions(e,t){return this.getDecorator("diffReaction").reduce((o,{reaction:r,propertyName:s})=>{let n=o.get(r);return void 0===n&&(n={previousProperties:{},newProperties:{},changed:!1}),n.previousProperties[s]=this._properties[s],n.newProperties[s]=e[s],-1!==t.indexOf(s)&&(n.changed=!0),o.set(r,n),o},new r.b)}_bindFunctionProperty(e,t){if("function"==typeof e&&!e[m]&&!1===Object(u.d)(e)){void 0===this._bindFunctionPropertyMap&&(this._bindFunctionPropertyMap=new s.a);const o=this._bindFunctionPropertyMap.get(e)||{};let{boundFunc:r,scope:n}=o;return void 0!==r&&n===t||(r=e.bind(t),this._bindFunctionPropertyMap.set(e,{boundFunc:r,scope:t})),r}return e}get registry(){return void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry}_runBeforeProperties(e){const t=this.getDecorator("beforeProperties");return t.length>0?t.reduce((e,t)=>Object.assign({},e,t.call(this,e)),Object.assign({},e)):e}_runBeforeRenders(){const e=this.getDecorator("beforeRender");return e.length>0?e.reduce((e,t)=>{const o=t.call(this,e,this._properties,this._children);return o||(console.warn("Render function not returned from beforeRender, using previous render"),e)},this._boundRenderFunc):this._boundRenderFunc}runAfterRenders(e){const t=this.getDecorator("afterRender");return t.length>0?t.reduce((e,t)=>t.call(this,e),e):(void 0!==this._metaMap&&this._metaMap.forEach(e=>{e.afterRender()}),e)}_runAfterConstructors(){const e=this.getDecorator("afterConstructor");e.length>0&&e.forEach(e=>e.call(this))}own(e){this._handles.push(e)}destroy(){for(;this._handles.length>0;){const e=this._handles.pop();e&&e.destroy()}}}t.a=f,f._type=u.b},"./node_modules/@dojo/widget-core/animations/cssTransitions.mjs":function(e,t,o){"use strict";let r="",s="";function n(e){""===s&&function(e){if("WebkitTransition"in e.style)r="webkitTransitionEnd",s="webkitAnimationEnd";else{if(!("transition"in e.style||"MozTransition"in e.style))throw new Error("Your browser is not supported");r="transitionend",s="animationend"}}(e)}function i(e,t,o){n(e);let i=!1,d=function(){i||(i=!0,e.removeEventListener(r,d),e.removeEventListener(s,d),o())};t(),e.addEventListener(s,d),e.addEventListener(r,d)}t.a={enter:function(e,t,o){const r=t.enterAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(r)})},()=>{e.classList.remove(o),e.classList.remove(r)})},exit:function(e,t,o,r){const s=t.exitAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(s)})},()=>{r()})}}},"./node_modules/@dojo/widget-core/d.mjs":function(e,t,o){"use strict";t.f=d,t.e=a,t.d=function(e){return Boolean(e&&"string"!=typeof e&&e.type===i)},t.h=function(e,t,o=[]){return{children:o,widgetConstructor:e,properties:t,type:s}},t.g=function(e,t={},o){let r,s=t;Array.isArray(t)&&(o=t,s={});"function"==typeof s&&(r=s,s={});return{tag:e,deferredPropertiesCallback:r,children:o,properties:s,type:n}},t.c=function({node:e,attrs:t={},props:o={},on:r={},diffType:s="none"},n){return{tag:c(e)?e.tagName.toLowerCase():"",properties:o,attributes:t,events:r,children:n,type:i,domNode:e,text:c(e)?void 0:e.data,diffType:s}};var r=o("./node_modules/@dojo/shim/Symbol.mjs");const s=Object(r.a)("Identifier for a WNode.");t.b=s;const n=Object(r.a)("Identifier for a VNode.");t.a=n;const i=Object(r.a)("Identifier for a VNode created using existing dom.");function d(e){return Boolean(e&&"string"!=typeof e&&e.type===s)}function a(e){return Boolean(e&&"string"!=typeof e&&(e.type===n||e.type===i))}function c(e){return!!e.tagName}},"./node_modules/@dojo/widget-core/decorators/afterRender.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("afterRender",o?t[o]:e)})}},"./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs");function n(){return Object(r.a)((e,t)=>{Object(s.a)(function(){this.invalidate()})(e)})}},"./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("beforeProperties",o?t[o]:e)})}},"./node_modules/@dojo/widget-core/decorators/customElement.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/widget-core/registerCustomElement.mjs"),s=o("./node_modules/@dojo/widget-core/Registry.mjs");function n({tag:e,properties:t=[],attributes:o=[],events:n=[],childType:i=r.CustomElementChildType.DOJO,registryFactory:d=(()=>new s.c)}){return function(r){r.prototype.__customElementDescriptor={tagName:e,attributes:o,properties:t,events:n,childType:i,registryFactory:d}}}},"./node_modules/@dojo/widget-core/decorators/diffProperty.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e,t,o){return Object(r.a)((r,s)=>{r.addDecorator(`diffProperty:${e}`,t.bind(null)),r.addDecorator("registeredDiffProperty",e),(o||s)&&r.addDecorator("diffReaction",{propertyName:e,reaction:s?r[s]:o})})}},"./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs":function(e,t,o){"use strict";function r(e){return function(t,o,r){"function"==typeof t?e(t.prototype,void 0):e(t,o)}}t.a=r},"./node_modules/@dojo/widget-core/decorators/inject.mjs":function(e,t,o){"use strict";t.a=d;var r=o("./node_modules/@dojo/shim/WeakMap.mjs"),s=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs");const i=new r.a;function d({name:e,getProperties:t}){return Object(s.a)((o,r)=>{Object(n.a)(function(o){const r=this.registry.getInjector(e);if(r){const{injector:e,invalidator:s}=r,n=i.get(this)||[];return 0===n.length&&i.set(this,n),-1===n.indexOf(r)&&(this.own(s.on("invalidate",()=>{this.invalidate()})),n.push(r)),t(e(),o)}})(o)})}},"./node_modules/@dojo/widget-core/diff.mjs":function(e,t,o){"use strict";t.b=i,t.a=function(e,t){let o;o="function"==typeof t?t._type===r.b?n(e,t):function(e,t){return{changed:!1,value:t}}(0,t):s(t)?i(e,t):n(e,t);return o};var r=o("./node_modules/@dojo/widget-core/Registry.mjs");function s(e){return"[object Object]"===Object.prototype.toString.call(e)||Array.isArray(e)}function n(e,t){return{changed:e!==t,value:t}}function i(e,t){let o=!1;const r=e&&s(e),n=t&&s(t);if(!r||!n)return{changed:!0,value:t};const i=Object.keys(e),d=Object.keys(t);return{changed:o=i.length!==d.length||d.some(o=>t[o]!==e[o]),value:t}}},"./node_modules/@dojo/widget-core/mixins/Projector.mjs":function(e,t,o){"use strict";t.a=u;var r,s,n=o("./node_modules/tslib/tslib.es6.js"),i=o("./node_modules/@dojo/core/lang.mjs"),d=o("./node_modules/@dojo/widget-core/animations/cssTransitions.mjs"),a=o("./node_modules/@dojo/widget-core/decorators/afterRender.mjs"),c=o("./node_modules/@dojo/widget-core/d.mjs"),l=o("./node_modules/@dojo/widget-core/vdom.mjs");function u(e){class t extends e{constructor(...e){super(...e),this._root=document.body,this._async=!0,this._projectorProperties={},this._projectionOptions={transitions:d.a},this.root=document.body,this.projectorState=r.Detached}append(e){const t={type:s.Append,root:e};return this._attach(t)}merge(e){const t={type:s.Merge,root:e};return this._attach(t)}set root(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change root element");this._root=e}get root(){return this._root}get async(){return this._async}set async(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change async mode");this._async=e}sandbox(e=document){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot create sandbox");this._async=!1;const t=this.root;this.own({destroy:()=>{this._root=t}}),this._attach({root:e.createDocumentFragment(),type:s.Append})}setChildren(e){this.__setChildren__(e)}setProperties(e){this.__setProperties__(e)}__setProperties__(e){this._projectorProperties&&this._projectorProperties.registry!==e.registry&&this._projectorProperties.registry&&this._projectorProperties.registry.destroy(),this._projectorProperties=Object(i.a)({},e),super.__setCoreProperties__({bind:this,baseRegistry:e.registry}),super.__setProperties__(e)}toHtml(){if(this.projectorState!==r.Attached||!this._projection)throw new Error("Projector is not attached, cannot return an HTML string of projection.");return this._projection.domNode.childNodes[0].outerHTML}afterRender(e){let t=e;return"string"!=typeof e&&null!==e&&void 0!==e||(t=Object(c.g)("span",{},[e])),t}destroy(){super.destroy()}_attach({type:e,root:t}){if(t&&(this.root=t),this._attachHandle)return this._attachHandle;this.projectorState=r.Attached;const o={destroy:()=>{this.projectorState===r.Attached&&(this._projection=void 0,this.projectorState=r.Detached)}};switch(this.own(o),this._attachHandle=o,this._projectionOptions=Object.assign({},this._projectionOptions,{sync:!this._async}),e){case s.Append:this._projection=l.a.append(this.root,this,this._projectionOptions);break;case s.Merge:this._projection=l.a.merge(this.root,this,this._projectionOptions)}return this._attachHandle}}return n.a([Object(a.a)(),n.b("design:type",Function),n.b("design:paramtypes",[Object]),n.b("design:returntype",void 0)],t.prototype,"afterRender",null),t}!function(e){e[e.Attached=1]="Attached",e[e.Detached=2]="Detached"}(r||(r={})),function(e){e[e.Append=1]="Append",e[e.Merge=2]="Merge"}(s||(s={}))},"./node_modules/@dojo/widget-core/mixins/Themed.mjs":function(e,t,o){"use strict";t.c=function(e){return Object(i.a)(t=>{t.addDecorator("baseThemeClasses",e)})},t.b=function(e,t){const o=new s.a(e);return t.defineInjector(l,e=>(o.setInvalidator(e),()=>o.get())),o},t.a=u;var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/widget-core/Injector.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/inject.mjs"),i=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),d=o("./node_modules/@dojo/widget-core/decorators/diffProperty.mjs"),a=o("./node_modules/@dojo/widget-core/diff.mjs");const c=" _key",l=Symbol("theme");function u(e){let t=class extends e{constructor(){super(...arguments),this._registeredBaseThemeKeys=[],this._recalculateClasses=!0,this._theme={}}theme(e){return this._recalculateClasses&&this._recalculateThemeClasses(),Array.isArray(e)?e.map(e=>this._getThemeClass(e)):this._getThemeClass(e)}onPropertiesChanged(){this._recalculateClasses=!0}_getThemeClass(e){if(void 0===e||null===e)return e;const t=this.properties.extraClasses||{},o=this._baseThemeClassesReverseLookup[e];let r=[];return o?(t[o]&&r.push(t[o]),this._theme[o]?r.push(this._theme[o]):r.push(this._registeredBaseTheme[o]),r.join(" ")):(console.warn(`Class name: '${e}' not found in theme`),null)}_recalculateThemeClasses(){const{theme:e={}}=this.properties,t=this.getDecorator("baseThemeClasses");this._registeredBaseTheme||(this._registeredBaseTheme=t.reduce((e,t)=>{const o=c,s=t[o],n=r.c(t,["symbol"==typeof o?o:o+""]);return this._registeredBaseThemeKeys.push(s),Object.assign({},e,n)},{}),this._baseThemeClassesReverseLookup=t.reduce((e,t)=>(Object.keys(t).forEach(o=>{e[t[o]]=o}),e),{})),this._theme=this._registeredBaseThemeKeys.reduce((t,o)=>Object.assign({},t,e[o]),{}),this._recalculateClasses=!1}};return r.a([Object(d.a)("theme",a.b),Object(d.a)("extraClasses",a.b),r.b("design:type",Function),r.b("design:paramtypes",[]),r.b("design:returntype",void 0)],t.prototype,"onPropertiesChanged",null),t=r.a([Object(n.a)({name:l,getProperties:(e,t)=>t.theme?{}:{theme:e}})],t)}},"./node_modules/@dojo/widget-core/registerCustomElement.mjs":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"CustomElementChildType",function(){return r}),t.DomToWidgetWrapper=h,t.create=p,t.register=m;var r,s=o("./node_modules/tslib/tslib.es6.js"),n=o("./node_modules/@dojo/widget-core/WidgetBase.mjs"),i=o("./node_modules/@dojo/widget-core/mixins/Projector.mjs"),d=o("./node_modules/@dojo/shim/array.mjs"),a=o("./node_modules/@dojo/widget-core/d.mjs"),c=o("./node_modules/@dojo/shim/global.mjs"),l=o("./node_modules/@dojo/widget-core/mixins/Themed.mjs"),u=o("./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs");function h(e){let t=class extends n.a{render(){const t=Object.keys(this.properties).reduce((e,t)=>{const o=this.properties[t];return 0===t.indexOf("on")&&(t=`__${t}`),e[t]=o,e},{});return Object(a.c)({node:e,props:t,diffType:"dom"})}static get domNode(){return e}};return t=s.a([Object(u.a)()],t)}function p(e,t){const{attributes:o,childType:s,registryFactory:u}=e,p={};return o.forEach(e=>{const t=e.toLowerCase();p[t]=e}),class extends HTMLElement{constructor(){super(...arguments),this._properties={},this._children=[],this._eventProperties={},this._initialised=!1}connectedCallback(){if(this._initialised)return;const o={},{attributes:p,properties:m,events:f}=e;this._properties=Object.assign({},this._properties,this._attributesToProperties(p)),[...p,...m].forEach(e=>{const t=this[e],r=e.replace(/^on/,"__");void 0!==t&&(this._properties[e]=t),r!==e&&(o[r]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}),o[e]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}}),f.forEach(e=>{const t=e.replace(/^on/,"").toLowerCase(),r=e.replace(/^on/,"__on");o[r]={get:()=>this._getEventProperty(e),set:t=>this._setEventProperty(e,t)},this._eventProperties[e]=void 0,this._properties[e]=((...o)=>{const r=this._getEventProperty(e);"function"==typeof r&&r(...o),this.dispatchEvent(new CustomEvent(t,{bubbles:!1,detail:o}))})}),Object.defineProperties(this,o);const g=s===r.TEXT?this.childNodes:this.children;Object(d.a)(g).forEach(e=>{s===r.DOJO?(e.addEventListener("dojo-ce-render",()=>this._render()),e.addEventListener("dojo-ce-connected",()=>this._render()),this._children.push(h(e))):this._children.push(Object(a.c)({node:e,diffType:"dom"}))}),this.addEventListener("dojo-ce-connected",e=>this._childConnected(e));const j=this._properties,_=()=>this.__children__(),y=u(),b=Object(l.b)(this._getTheme(),y);c.a.addEventListener("dojo-theme-set",()=>b.set(this._getTheme()));const v=Object(i.a)(class extends n.a{render(){return Object(a.h)(t,j,_())}});this._projector=new v,this._projector.setProperties({registry:y}),this._projector.append(this),this._initialised=!0,this.dispatchEvent(new CustomEvent("dojo-ce-connected",{bubbles:!0,detail:this}))}_getTheme(){if(c.a&&c.a.dojoce&&c.a.dojoce.theme)return c.a.dojoce.themes[c.a.dojoce.theme]}_childConnected(e){const t=e.detail;if(t.parentNode===this){this._children.some(e=>e.domNode===t)||(t.addEventListener("dojo-ce-render",()=>this._render()),this._children.push(h(t)),this._render())}}_render(){this._projector&&(this._projector.invalidate(),this.dispatchEvent(new CustomEvent("dojo-ce-render",{bubbles:!1,detail:this})))}__properties__(){return Object.assign({},this._properties,this._eventProperties)}__children__(){return s===r.DOJO?this._children.filter(e=>e.domNode.isWidget).map(e=>{const{domNode:t}=e;return Object(a.h)(e,Object.assign({},t.__properties__()),[...t.__children__()])}):this._children}attributeChangedCallback(e,t,o){const r=p[e];this._setProperty(r,o)}_setEventProperty(e,t){this._eventProperties[e]=t}_getEventProperty(e){return this._eventProperties[e]}_setProperty(e,t){"function"==typeof t&&(t[n.b]=!0),this._properties[e]=t,this._render()}_getProperty(e){return this._properties[e]}_attributesToProperties(e){return e.reduce((e,t)=>{const o=t.toLowerCase(),r=this.getAttribute(o);return null!==r&&(e[t]=r),e},{})}static get observedAttributes(){return Object.keys(p)}get isWidget(){return!0}}}function m(e){const t=e.prototype&&e.prototype.__customElementDescriptor;if(!t)throw new Error("Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?");c.a.customElements.define(t.tagName,p(t,e))}!function(e){e.DOJO="DOJO",e.NODE="NODE",e.TEXT="TEXT"}(r||(r={})),t.default=m},"./node_modules/@dojo/widget-core/vdom.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs"),s=o("./node_modules/@dojo/shim/array.mjs"),n=o("./node_modules/@dojo/widget-core/d.mjs"),i=o("./node_modules/@dojo/widget-core/Registry.mjs"),d=o("./node_modules/@dojo/shim/WeakMap.mjs");const a="http://www.w3.org/2000/svg",c="http://www.w3.org/1999/xlink",l=[],u=new d.a;t.b=u;const h=new d.a,p=new d.a;function m(e,t){return Object(n.e)(e)&&Object(n.e)(t)?(!Object(n.d)(e)&&!Object(n.d)(t)||e.domNode===t.domNode)&&(e.tag===t.tag&&e.properties.key===t.properties.key):!(!Object(n.f)(e)||!Object(n.f)(t))&&((void 0!==e.instance||"string"!=typeof t.widgetConstructor)&&(e.widgetConstructor===t.widgetConstructor&&e.properties.key===t.properties.key))}const f=function(){throw new Error("Provide a transitions object to the projectionOptions to do animations")};function g(e){if("string"!=typeof e)throw new Error("Style values must be strings")}function j(e,t,o,r,s,n){const i=p.get(r.projectorInstance),a=i.nodeMap.get(e)||new d.a;if(n){const o=a.get(n);e.removeEventListener(t,o)}let c=o.bind(s);"input"===t&&(c=function(e){o.call(this,e),e.target["oninput-value"]=e.target.value}.bind(s)),e.addEventListener(t,c),a.set(o,c),i.nodeMap.set(e,a)}function _(e,t){if(t){const o=t.split(" ");for(let t=0;t{o.focus()})}}function v(e,t,o,r,s=!1){const n=p.get(r.projectorInstance).nodeMap.get(e);n&&Object.keys(t).forEach(r=>{const i="on"===r.substr(0,2)||s,d=s?r:r.substr(2);if(i&&!o[r]){const o=n.get(t[r]);o&&e.removeEventListener(d,o)}})}function w(e,t,o,r){r.namespace===a&&"href"===t?e.setAttributeNS(c,t,o):"role"===t&&""===o||void 0===o?e.removeAttribute(t):e.setAttribute(t,o)}function O(e,t,o,r){const s=Object.keys(o),n=s.length;for(let i=0;i0)if(c&&0!==c.length){const r=[...o];for(let o=0;o0&&R(r.children,t));else{if(!r.coreProperties){const e=u.get(t);r.coreProperties={bind:t,baseRegistry:e.coreProperties.baseRegistry}}r.children&&r.children.length>0&&R(r.children,t)}o++}else e.splice(o,1)}return e}function k(e,t){if(Object(n.e)(e)&&e.properties){const o=e.properties.enterAnimation;o&&("function"==typeof o?o(e.domNode,e.properties):t.enter(e.domNode,e.properties,o))}}function N(e,t,o){if(Object(n.f)(e)){const r=e.rendered||l;if(e.instance){u.get(e.instance).onDetach(),h.delete(e.instance)}for(let e=0;e0)for(let r=0;r{let i=void 0,d=t[f];if(d){let e=f+1,o=[d];for(;o.length;){const r=o.shift();if(Object(n.f)(r))r.rendered&&o.push(...r.rendered);else if(r.domNode){i=r.domNode;break}0===o.length&&t[e]&&(o.push(t[e]),e++)}}D(l,e,i,s,r),k(l,a);const u=g;c.afterRenderCallbacks.push(()=>{A(o,u,r)})};if(!d||-1===u){p(),g++;continue}const _=()=>{const e=f;if(c.afterRenderCallbacks.push(()=>{A(t,e,r)}),Object(n.f)(d)){const e=h.get(d.instance);e&&(d=e.dnode)}N(d,a,s)};-1!==E(o,d,g+1)?(p(),_(),f++,g++):(_(),f++)}if(i>f)for(u=f;u{A(t,e,r)});let o=t[u];if(Object(n.f)(o)){const e=h.get(o.instance);e&&(o=e.dnode)}N(o,a,s)}return j}function T(e,t,o,r,i,d){if(void 0===t)return;const a=p.get(o.projectorInstance);a.merge&&void 0===d&&(d=Object(s.a)(e.domNode.childNodes));const c=o.transitions;o=Object.assign({},o,{depth:o.depth+1});for(let s=0;s0;)(e=d.shift())&&e.tagName===(l.tag.toUpperCase()||void 0)&&(l.domNode=e)}D(l,e,i,o,r)}else D(l,e,i,o,r,d);k(l,c)}}function x(e,t,o,r){if(T(t,t.children,r,o,void 0),"function"==typeof t.deferredPropertiesCallback&&void 0===t.inserted&&S(t,r),t.attributes&&t.events){O(e,{},t.attributes,r),P(e,{},t.properties,r,!1),v(e,{},t.events,r,!0);const o=t.events;Object.keys(o).forEach(s=>{j(e,s,o[s],r,t.properties.bind)})}else P(e,{},t.properties,r);if(null!==t.properties.key&&void 0!==t.properties.key){u.get(o).nodeHandler.add(e,`${t.properties.key}`)}t.inserted=!0}function D(e,t,o,r,s,d){let c;const l=p.get(r.projectorInstance);if(Object(n.f)(e)){let{widgetConstructor:n}=e;const a=u.get(s);if(!Object(i.d)(n)){const e=a.registry().get(n);if(null===e)return;n=e}const c=new n;e.instance=c;const p=u.get(c);p.invalidate=(()=>{p.dirty=!0,!1===p.rendering&&(l.renderQueue.push({instance:c,depth:r.depth}),F(r))}),p.rendering=!0,c.__setCoreProperties__(e.coreProperties),c.__setChildren__(e.children),c.__setProperties__(e.properties);const m=c.__render__();if(p.rendering=!1,m){const s=R(m,c);e.rendered=s,T(t,s,r,c,o,d)}h.set(c,{dnode:e,parentVNode:t}),p.nodeHandler.addRoot(),l.afterRenderCallbacks.push(()=>{p.onAttach()})}else{if(l.merge&&void 0!==l.mergeElement)return c=e.domNode=r.mergeElement,l.mergeElement=void 0,void x(c,e,s,r);const n=t.domNode.ownerDocument;if(e.tag||"string"!=typeof e.text)void 0===e.domNode?("svg"===e.tag&&(r=Object.assign({},r,{namespace:a})),c=void 0!==r.namespace?e.domNode=n.createElementNS(r.namespace,e.tag):e.domNode=e.domNode||n.createElement(e.tag)):c=e.domNode,x(c,e,s,r),void 0!==o?t.domNode.insertBefore(c,o):c.parentNode!==t.domNode&&t.domNode.appendChild(c);else if(void 0!==e.domNode&&t.domNode){const o=e.domNode.ownerDocument.createTextNode(e.text);t.domNode===e.domNode.parentNode?t.domNode.replaceChild(o,e.domNode):(t.domNode.appendChild(o),e.domNode.parentNode&&e.domNode.parentNode.removeChild(e.domNode)),e.domNode=o}else c=e.domNode=n.createTextNode(e.text),void 0!==o?t.domNode.insertBefore(c,o):t.domNode.appendChild(c)}}function I(e,t,o,r,s){if(Object(n.f)(t)){const{instance:r}=e,{parentVNode:s,dnode:n}=h.get(r),i=n?n.rendered:e.rendered,d=u.get(r);if(d.rendering=!0,r.__setCoreProperties__(t.coreProperties),r.__setChildren__(t.children),r.__setProperties__(t.properties),t.instance=r,!0===d.dirty){const e=r.__render__();d.rendering=!1,t.rendered=R(e,r),M(s,i,t.rendered,r,o)}else d.rendering=!1,t.rendered=i;h.set(r,{dnode:t,parentVNode:s}),d.nodeHandler.addRoot()}else{if(e===t)return!1;const r=t.domNode=e.domNode;let n=!1,i=!1;if(t.tag||"string"!=typeof t.text){if(t.tag&&0===t.tag.lastIndexOf("svg",0)&&(o=Object.assign({},o,{namespace:a})),e.children!==t.children){const r=R(t.children,s);t.children=r,i=M(t,e.children,r,s,o)||i}const n=function(e,t,o){const{diffType:r,properties:s,attributes:n}=o;if(!r||"vdom"===r)return{properties:t.properties,attributes:t.attributes,events:t.events};if("none"===r)return{properties:{},attributes:t.attributes?{}:void 0,events:t.events};let i={properties:{}};return n?(i.attributes={},i.events=t.events,Object.keys(s).forEach(t=>{i.properties[t]=e[t]}),Object.keys(n).forEach(t=>{i.attributes[t]=e.getAttribute(t)}),i):(i.properties=Object.keys(s).reduce((t,o)=>(t[o]=e.getAttribute(o)||e[o],t),{}),i)}(r,e,t);if(t.attributes&&t.events){O(r,n.attributes,t.attributes,o),i=P(r,n.properties,t.properties,o,!1)||i,v(r,n.events,t.events,o,!0);const e=t.events;Object.keys(e).forEach(s=>{j(r,s,e[s],o,t.properties.bind,n.events[s])})}else i=P(r,n.properties,t.properties,o)||i;if(null!==t.properties.key&&void 0!==t.properties.key){u.get(s).nodeHandler.add(r,`${t.properties.key}`)}}else if(t.text!==e.text){const e=r.ownerDocument.createTextNode(t.text);return r.parentNode.replaceChild(e,r),t.domNode=e,n=!0}i&&t.properties&&t.properties.updateAnimation&&t.properties.updateAnimation(r,t.properties,e.properties)}}function S(e,t){e.decoratedDeferredProperties=e.properties;const o=e.deferredPropertiesCallback(!!e.inserted),r=p.get(t.projectorInstance);e.properties=Object.assign({},o,e.decoratedDeferredProperties),r.deferredRenderCallbacks.push(()=>{const o=Object.assign({},e.deferredPropertiesCallback(!!e.inserted),e.decoratedDeferredProperties);P(e.domNode,e.properties,o,t),e.properties=o})}function L(e){const t=p.get(e.projectorInstance);if(t.deferredRenderCallbacks.length)if(e.sync)for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}else r.a.requestAnimationFrame(()=>{for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}})}function W(e){const t=p.get(e.projectorInstance);if(e.sync)for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}else r.a.requestIdleCallback?r.a.requestIdleCallback(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}}):setTimeout(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}})}function F(e){const t=p.get(e.projectorInstance);e.sync?B(e):void 0===t.renderScheduled&&(t.renderScheduled=r.a.requestAnimationFrame(()=>{B(e)}))}function B(e){const t=p.get(e.projectorInstance);t.renderScheduled=void 0;const o=[...t.renderQueue];t.renderQueue=[],o.sort((e,t)=>e.depth-t.depth);const r=[];for(;o.length;){const{instance:t}=o.shift();if(h.has(t)&&-1===r.indexOf(t)){r.push(t);const{parentVNode:o,dnode:s}=h.get(t);I(s,C(t,u.get(t)),e,0,t)}}W(e),L(e)}const H={append:function(e,t,o={}){const r=u.get(t),s=function(e,t){const o={namespace:void 0,styleApplyer:function(e,t,o){e.style[t]=o},transitions:{enter:f,exit:f},depth:0,merge:!1,sync:!1,projectorInstance:t};return Object.assign({},o,e)}(o,t),i={afterRenderCallbacks:[],deferredRenderCallbacks:[],nodeMap:new d.a,renderScheduled:void 0,renderQueue:[],merge:o.merge||!1,mergeElement:o.mergeElement};p.set(t,i),s.rootNode=e;const a={tag:"",properties:{},children:void 0,domNode:s.rootNode,type:n.a};const c=C(t,r);return h.set(t,{dnode:c,parentVNode:a}),r.invalidate=(()=>{r.dirty=!0,!1===r.rendering&&(i.renderQueue.push({instance:t,depth:s.depth}),F(s))}),I(c,c,s,0,t),i.afterRenderCallbacks.push(()=>{r.onAttach()}),L(s),W(s),{domNode:s.rootNode}},create:function(e,t){return this.append(document.createElement("div"),e,t)},merge:function(e,t,o={}){o.merge=!0,o.mergeElement=e;const r=this.append(e.parentNode,t,o);return p.get(t).merge=!1,r}};t.a=H},"./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js":function(e,t,o){var r=o("./src/menu-item/MenuItem.ts"),s=o("./node_modules/@dojo/widget-core/registerCustomElement.mjs").default,n=r.default;n&&s(n)},"./node_modules/process/browser.js":function(e,t){var o,r,s=e.exports={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function d(e){if(o===setTimeout)return setTimeout(e,0);if((o===n||!o)&&setTimeout)return o=setTimeout,setTimeout(e,0);try{return o(e,0)}catch(t){try{return o.call(null,e,0)}catch(t){return o.call(this,e,0)}}}!function(){try{o="function"==typeof setTimeout?setTimeout:n}catch(e){o=n}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var a,c=[],l=!1,u=-1;function h(){l&&a&&(l=!1,a.length?c=a.concat(c):u=-1,c.length&&p())}function p(){if(!l){var e=d(h);l=!0;for(var t=c.length;t;){for(a=c,c=[];++u1)for(var o=1;o=0;d--)(s=e[d])&&(i=(n<3?s(i):n>3?s(t,o,i):s(t,o))||i);return n>3&&i&&Object.defineProperty(t,o,i),i},t.b=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}; +!function(e){var t={};function o(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,o),s.l=!0,s.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}({"./node_modules/@dojo/framework/core/Destroyable.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/core/lang.mjs"),s=o("./node_modules/@dojo/framework/shim/Promise.mjs");function n(){return s.a.resolve(!1)}function i(){throw new Error("Call made to destroyed method")}class d{constructor(){this.handles=[]}own(e){const t=Array.isArray(e)?Object(r.b)(...e):e,{handles:o}=this;return o.push(t),{destroy(){o.splice(o.indexOf(t)),t.destroy()}}}destroy(){return new s.a(e=>{this.handles.forEach(e=>{e&&e.destroy&&e.destroy()}),this.destroy=n,this.own=i,e(!0)})}}t.a=d},"./node_modules/@dojo/framework/core/Evented.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/core/Destroyable.mjs");const n=new r.b;class i extends s.a{constructor(){super(...arguments),this.listenersMap=new r.b}emit(e){this.listenersMap.forEach((t,o)=>{(function(e,t){if("string"==typeof t&&"string"==typeof e&&-1!==e.indexOf("*")){let o;return n.has(e)?o=n.get(e):(o=new RegExp(`^${e.replace(/\*/g,".*")}$`),n.set(e,o)),o.test(t)}return e===t})(o,e.type)&&[...t].forEach(t=>{t.call(this,e)})})}on(e,t){if(Array.isArray(t)){const o=t.map(t=>this._addListener(e,t));return{destroy(){o.forEach(e=>e.destroy())}}}return this._addListener(e,t)}_addListener(e,t){const o=this.listenersMap.get(e)||[];return o.push(t),this.listenersMap.set(e,o),{destroy:()=>{const o=this.listenersMap.get(e)||[];o.splice(o.indexOf(t),1)}}}}t.a=i},"./node_modules/@dojo/framework/core/lang.mjs":function(e,t,o){"use strict";t.b=function(...e){return function(e){let t=!1;return{destroy:function(){t||(t=!0,e())}}}(function(){for(let t=0;t{r[e]=t,delete n[e]},()=>{delete n[e]})}function l(e){let t;const o=e.toLowerCase();if(o in a)t=a[o];else if(s[o])t=r[o]=s[o].call(null),delete s[o];else{if(!(o in r)){if(e in n)return!1;throw new TypeError(`Attempt to detect unregistered has feature "${e}"`)}t=r[o]}return t}c("debug",!0),c("host-browser","undefined"!=typeof document&&"undefined"!=typeof location),c("host-node",function(){if("object"==typeof o&&o.versions&&o.versions.node)return o.versions.node})}).call(t,o("./node_modules/webpack/buildin/global.js"),o("./node_modules/process/browser.js"))},"./node_modules/@dojo/framework/shim/Map.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});o("./node_modules/@dojo/framework/shim/iterator.mjs");var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/object.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s=r.a.Map;t.b=s},"./node_modules/@dojo/framework/shim/Promise.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/queue.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs");let s=r.a.Promise;t.a=s},"./node_modules/@dojo/framework/shim/Symbol.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/support/has.mjs");var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=o("./node_modules/@dojo/framework/shim/support/util.mjs");let n=r.a.Symbol;["hasInstance","isConcatSpreadable","iterator","species","replace","search","split","match","toPrimitive","toStringTag","unscopables","observable"].forEach(e=>{n[e]||Object.defineProperty(n,e,Object(s.a)(n.for(e),!1,!1))}),t.a=n},"./node_modules/@dojo/framework/shim/WeakMap.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/iterator.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s=r.a.WeakMap;t.a=s},"./node_modules/@dojo/framework/shim/array.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return n});var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=(o("./node_modules/@dojo/framework/shim/iterator.mjs"),o("./node_modules/@dojo/framework/shim/number.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/support/util.mjs"));let n,i,d,a,c,l,u;n=r.a.Array.from,i=r.a.Array.of,d=Object(s.b)(r.a.Array.prototype.copyWithin),a=Object(s.b)(r.a.Array.prototype.fill),c=Object(s.b)(r.a.Array.prototype.find),l=Object(s.b)(r.a.Array.prototype.findIndex),u=Object(s.b)(r.a.Array.prototype.includes)},"./node_modules/@dojo/framework/shim/global.mjs":function(e,t,o){"use strict";(function(e){const o=void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0;t.a=o}).call(t,o("./node_modules/webpack/buildin/global.js"))},"./node_modules/@dojo/framework/shim/iterator.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/Symbol.mjs"),o("./node_modules/@dojo/framework/shim/string.mjs")},"./node_modules/@dojo/framework/shim/number.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/global.mjs");Math.pow(2,53)},"./node_modules/@dojo/framework/shim/object.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s,n,i,d,a,c,l,u,m;{const e=r.a.Object;s=e.assign,n=e.getOwnPropertyDescriptor,i=e.getOwnPropertyNames,d=e.getOwnPropertySymbols,a=e.is,c=e.keys}{const e=r.a.Object;l=e.getOwnPropertyDescriptors,u=e.entries,m=e.values}},"./node_modules/@dojo/framework/shim/string.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=(o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/support/util.mjs"));t.b=55296;t.a=56319;let n,i,d,a,c,l,u,m,h,p;n=r.a.String.fromCodePoint,i=r.a.String.raw,d=Object(s.b)(r.a.String.prototype.codePointAt),a=Object(s.b)(r.a.String.prototype.endsWith),c=Object(s.b)(r.a.String.prototype.includes),l=Object(s.b)(r.a.String.prototype.normalize),u=Object(s.b)(r.a.String.prototype.repeat),m=Object(s.b)(r.a.String.prototype.startsWith),h=Object(s.b)(r.a.String.prototype.padEnd),p=Object(s.b)(r.a.String.prototype.padStart)},"./node_modules/@dojo/framework/shim/support/has.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/has/has.mjs"),s=o("./node_modules/@dojo/framework/shim/global.mjs");r.b;Object(r.a)("es6-array",()=>["from","of"].every(e=>e in s.a.Array)&&["findIndex","find","copyWithin"].every(e=>e in s.a.Array.prototype),!0),Object(r.a)("es6-array-fill",()=>"fill"in s.a.Array.prototype&&1===[1].fill(9,Number.POSITIVE_INFINITY)[0],!0),Object(r.a)("es7-array",()=>"includes"in s.a.Array.prototype,!0),Object(r.a)("es6-map",()=>{if("function"==typeof s.a.Map)try{const e=new s.a.Map([[0,1]]);return e.has(0)&&"function"==typeof e.keys&&"function"==typeof e.values&&"function"==typeof e.entries}catch(e){return!1}return!1},!0),Object(r.a)("es6-math",()=>["clz32","sign","log10","log2","log1p","expm1","cosh","sinh","tanh","acosh","asinh","atanh","trunc","fround","cbrt","hypot"].every(e=>"function"==typeof s.a.Math[e]),!0),Object(r.a)("es6-math-imul",()=>"imul"in s.a.Math&&-5===Math.imul(4294967295,5),!0),Object(r.a)("es6-object",()=>["assign","is","getOwnPropertySymbols","setPrototypeOf"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es2017-object",()=>["values","entries","getOwnPropertyDescriptors"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es-observable",()=>void 0!==s.a.Observable,!0),Object(r.a)("es6-promise",()=>void 0!==s.a.Promise&&!0,!0),Object(r.a)("es6-set",()=>{if("function"==typeof s.a.Set){const e=new s.a.Set([1]);return e.has(1)&&"keys"in e&&"function"==typeof e.keys&&!0}return!1},!0),Object(r.a)("es6-string",()=>["fromCodePoint"].every(e=>"function"==typeof s.a.String[e])&&["codePointAt","normalize","repeat","startsWith","endsWith","includes"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-string-raw",()=>{function e(e,...t){const o=[...e];return o.raw=e.raw,o}if("raw"in s.a.String){let t=e`a\n${1}`;return t.raw=["a\\n"],"a:\\n"===s.a.String.raw(t,42)}return!1},!0),Object(r.a)("es2017-string",()=>["padStart","padEnd"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-symbol",()=>void 0!==s.a.Symbol&&"symbol"==typeof Symbol(),!0),Object(r.a)("es6-weakmap",()=>{if(void 0!==s.a.WeakMap){const e={},t={},o=new s.a.WeakMap([[e,1]]);return Object.freeze(e),1===o.get(e)&&o.set(t,2)===o&&!0}return!1},!0),Object(r.a)("microtasks",()=>!0,!0),Object(r.a)("postmessage",()=>void 0!==s.a.window&&"function"==typeof s.a.postMessage,!0),Object(r.a)("raf",()=>"function"==typeof s.a.requestAnimationFrame,!0),Object(r.a)("setimmediate",()=>void 0!==s.a.setImmediate,!0),Object(r.a)("dom-mutationobserver",()=>{if(Boolean(s.a.MutationObserver||s.a.WebKitMutationObserver)){const e=document.createElement("div"),t=new(s.a.MutationObserver||s.a.WebKitMutationObserver)(function(){});return t.observe(e,{attributes:!0}),e.style.setProperty("display","block"),Boolean(t.takeRecords().length)}return!1},!0),Object(r.a)("dom-webanimation",()=>void 0!==s.a.Animation&&void 0!==s.a.KeyframeEffect,!0)},"./node_modules/@dojo/framework/shim/support/queue.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/has.mjs");function s(e){e&&e.isActive&&e.callback&&e.callback()}function n(e,t){return{destroy:function(){this.destroy=function(){},e.isActive=!1,e.callback=null,t&&t()}}}!function(){let e,t;{const e=[];r.a.addEventListener("message",function(t){t.source===r.a&&"dojo-queue-message"===t.data&&(t.stopPropagation(),e.length&&s(e.shift()))}),t=function(t){e.push(t),r.a.postMessage("dojo-queue-message","*")}}function o(o){const r={isActive:!0,callback:o},s=t(r);return n(r,e&&function(){e(s)})}}();!function(){function e(e){const t={isActive:!0,callback:e},o=requestAnimationFrame(s.bind(null,t));return n(t,function(){cancelAnimationFrame(o)})}}();!function(){let e;e=function(e){r.a.Promise.resolve(e).then(s)}}()},"./node_modules/@dojo/framework/shim/support/util.mjs":function(e,t,o){"use strict";t.a=function(e,t=!1,o=!0,r=!0){return{value:e,enumerable:t,writable:o,configurable:r}},t.b=function(e){return function(t,...o){return e.apply(t,o)}}},"./node_modules/@dojo/framework/widget-core/Injector.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/core/Evented.mjs");class s extends r.a{constructor(e){super(),this._payload=e}setInvalidator(e){this._invalidator=e}get(){return this._payload}set(e){this._payload=e,this._invalidator&&this._invalidator()}}t.a=s},"./node_modules/@dojo/framework/widget-core/NodeHandler.mjs":function(e,t,o){"use strict";var r,s=o("./node_modules/@dojo/framework/core/Evented.mjs"),n=o("./node_modules/@dojo/framework/shim/Map.mjs");!function(e){e.Projector="Projector",e.Widget="Widget"}(r||(r={}));t.a=class extends s.a{constructor(){super(...arguments),this._nodeMap=new n.b}get(e){return this._nodeMap.get(e)}has(e){return this._nodeMap.has(e)}add(e,t){this._nodeMap.set(t,e),this.emit({type:t})}addRoot(){this.emit({type:r.Widget})}addProjector(){this.emit({type:r.Projector})}clear(){this._nodeMap.clear()}}},"./node_modules/@dojo/framework/widget-core/Registry.mjs":function(e,t,o){"use strict";t.d=a;var r=o("./node_modules/@dojo/framework/shim/Promise.mjs"),s=o("./node_modules/@dojo/framework/shim/Map.mjs"),n=o("./node_modules/@dojo/framework/shim/Symbol.mjs"),i=o("./node_modules/@dojo/framework/core/Evented.mjs");const d=Object(n.a)("Widget Base");function a(e){return Boolean(e&&e._type===d)}t.b=d;class c extends i.a{emitLoadedEvent(e,t){this.emit({type:e,action:"loaded",item:t})}define(e,t){if(void 0===this._widgetRegistry&&(this._widgetRegistry=new s.b),this._widgetRegistry.has(e))throw new Error(`widget has already been registered for '${e.toString()}'`);this._widgetRegistry.set(e,t),t instanceof r.a?t.then(t=>(this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}):a(t)&&this.emitLoadedEvent(e,t)}defineInjector(e,t){if(void 0===this._injectorRegistry&&(this._injectorRegistry=new s.b),this._injectorRegistry.has(e))throw new Error(`injector has already been registered for '${e.toString()}'`);const o=new i.a,r={injector:t(()=>o.emit({type:"invalidate"})),invalidator:o};this._injectorRegistry.set(e,r),this.emitLoadedEvent(e,r)}get(e){if(!this._widgetRegistry||!this.has(e))return null;const t=this._widgetRegistry.get(e);if(a(t))return t;if(t instanceof r.a)return null;const o=t();return this._widgetRegistry.set(e,o),o.then(t=>((function(e){return Boolean(e&&e.hasOwnProperty("__esModule")&&e.hasOwnProperty("default")&&a(e.default))})(t)&&(t=t.default),this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}),null}getInjector(e){return this._injectorRegistry&&this.hasInjector(e)?this._injectorRegistry.get(e):null}has(e){return Boolean(this._widgetRegistry&&this._widgetRegistry.has(e))}hasInjector(e){return Boolean(this._injectorRegistry&&this._injectorRegistry.has(e))}}t.a=c,t.c=c},"./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/core/Evented.mjs"),n=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");t.a=class extends s.a{constructor(){super(),this._registry=new n.a,this._registryWidgetLabelMap=new r.a,this._registryInjectorLabelMap=new r.a,this.own(this._registry),this.own({destroy:()=>{this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry),this.baseRegistry=void 0)}})}set base(e){this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry)),this.baseRegistry=e}define(e,t){this._registry.define(e,t)}defineInjector(e,t){this._registry.defineInjector(e,t)}has(e){return this._registry.has(e)||Boolean(this.baseRegistry&&this.baseRegistry.has(e))}hasInjector(e){return this._registry.hasInjector(e)||Boolean(this.baseRegistry&&this.baseRegistry.hasInjector(e))}get(e,t=!1){return this._get(e,t,"get",this._registryWidgetLabelMap)}getInjector(e,t=!1){return this._get(e,t,"getInjector",this._registryInjectorLabelMap)}_get(e,t,o,r){const s=t?[this.baseRegistry,this._registry]:[this._registry,this.baseRegistry];for(let n=0;n{"loaded"===r.action&&this[o](e,t)===r.item&&this.emit({type:"invalidate"})});this.own(s),r.set(i,[...a,e])}}return null}}},"./node_modules/@dojo/framework/widget-core/WidgetBase.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/shim/WeakMap.mjs"),n=o("./node_modules/@dojo/framework/shim/Symbol.mjs"),i=o("./node_modules/@dojo/framework/widget-core/d.mjs"),d=o("./node_modules/@dojo/framework/widget-core/diff.mjs"),a=o("./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs"),c=o("./node_modules/@dojo/framework/widget-core/NodeHandler.mjs"),l=o("./node_modules/@dojo/framework/widget-core/vdom.mjs"),u=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");const m=new r.b,h=d.a.bind(null),p=n.a.for("dojoNoBind");t.b=p;class f{constructor(){this._initialProperties=!0,this._changedPropertyKeys=[],this._nodeHandler=new c.a,this._handles=[],this._children=[],this._decoratorCache=new r.b,this._properties={},this._boundRenderFunc=this.render.bind(this),this._boundInvalidate=this.invalidate.bind(this),l.b.set(this,{dirty:!0,onAttach:()=>{this.onAttach()},onDetach:()=>{this.onDetach(),this.destroy()},nodeHandler:this._nodeHandler,registry:()=>this.registry,coreProperties:{},rendering:!1,inputProperties:{}}),this._runAfterConstructors()}meta(e){void 0===this._metaMap&&(this._metaMap=new r.b);let t=this._metaMap.get(e);return t||(t=new e({invalidate:this._boundInvalidate,nodeHandler:this._nodeHandler,bind:this}),this.own(t),this._metaMap.set(e,t)),t}onAttach(){}onDetach(){}get properties(){return this._properties}get changedPropertyKeys(){return[...this._changedPropertyKeys]}__setCoreProperties__(e){const{baseRegistry:t}=e,o=l.b.get(this);o.coreProperties.baseRegistry!==t&&(void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry.base=t,this.invalidate()),o.coreProperties=e}__setProperties__(e){const t=l.b.get(this);t.inputProperties=e;const o=this._runBeforeProperties(e),r=this.getDecorator("registeredDiffProperty"),s=[],n=Object.keys(o);if(!1===this._initialProperties||0!==r.length){const e=[...n,...Object.keys(this._properties)],i=[],d={};let a=!1;for(let n=0;n{const r=-1!==s.indexOf(o),n=-1!==e.indexOf(t);r&&!n&&(t.call(this,this._properties,d),e.push(t))})}this._properties=d,this._changedPropertyKeys=s}else{this._initialProperties=!1;for(let e=0;e0&&this.invalidate()}get children(){return this._children}__setChildren__(e){(this._children.length>0||e.length>0)&&(this._children=e,this.invalidate())}__render__(){l.b.get(this).dirty=!1;let e=this._runBeforeRenders()();return e=this.runAfterRenders(e),this._nodeHandler.clear(),e}invalidate(){const e=l.b.get(this);e.invalidate&&e.invalidate()}render(){return Object(i.g)("div",{},this.children)}addDecorator(e,t){if(t=Array.isArray(t)?t:[t],this.hasOwnProperty("constructor")){let o=m.get(this.constructor);o||(o=new r.b,m.set(this.constructor,o));let s=o.get(e);s||(s=[],o.set(e,s)),s.push(...t)}else{const o=this.getDecorator(e);this._decoratorCache.set(e,[...o,...t])}}_buildDecoratorList(e){const t=[];let o=this.constructor;for(;o;){const r=m.get(o);if(r){const o=r.get(e);o&&t.unshift(...o)}o=Object.getPrototypeOf(o)}return t}getDecorator(e){let t=this._decoratorCache.get(e);return void 0!==t?t:(t=this._buildDecoratorList(e),this._decoratorCache.set(e,t),t)}_bindFunctionProperty(e,t){if("function"==typeof e&&!e[p]&&!1===Object(u.d)(e)){void 0===this._bindFunctionPropertyMap&&(this._bindFunctionPropertyMap=new s.a);const o=this._bindFunctionPropertyMap.get(e)||{};let{boundFunc:r,scope:n}=o;return void 0!==r&&n===t||(r=e.bind(t),this._bindFunctionPropertyMap.set(e,{boundFunc:r,scope:t})),r}return e}get registry(){return void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry}_runBeforeProperties(e){const t=this.getDecorator("beforeProperties");return t.length>0?t.reduce((e,t)=>Object.assign({},e,t.call(this,e)),Object.assign({},e)):e}_runBeforeRenders(){const e=this.getDecorator("beforeRender");return e.length>0?e.reduce((e,t)=>{const o=t.call(this,e,this._properties,this._children);return o||(console.warn("Render function not returned from beforeRender, using previous render"),e)},this._boundRenderFunc):this._boundRenderFunc}runAfterRenders(e){const t=this.getDecorator("afterRender");return t.length>0&&(e=t.reduce((e,t)=>t.call(this,e),e)),void 0!==this._metaMap&&this._metaMap.forEach(e=>{e.afterRender()}),e}_runAfterConstructors(){const e=this.getDecorator("afterConstructor");e.length>0&&e.forEach(e=>e.call(this))}own(e){this._handles.push(e)}destroy(){for(;this._handles.length>0;){const e=this._handles.pop();e&&e.destroy()}}}t.a=f,f._type=u.b},"./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs":function(e,t,o){"use strict";let r="",s="";function n(e){""===s&&function(e){if("WebkitTransition"in e.style)r="webkitTransitionEnd",s="webkitAnimationEnd";else{if(!("transition"in e.style||"MozTransition"in e.style))throw new Error("Your browser is not supported");r="transitionend",s="animationend"}}(e)}function i(e,t,o){n(e);let i=!1,d=function(){i||(i=!0,e.removeEventListener(r,d),e.removeEventListener(s,d),o())};t(),e.addEventListener(s,d),e.addEventListener(r,d)}t.a={enter:function(e,t,o){const r=t.enterAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(r)})},()=>{e.classList.remove(o),e.classList.remove(r)})},exit:function(e,t,o,r){const s=t.exitAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(s)})},()=>{r()})}}},"./node_modules/@dojo/framework/widget-core/d.mjs":function(e,t,o){"use strict";t.f=d,t.e=a,t.d=function(e){return Boolean(e&&"string"!=typeof e&&e.type===i)},t.h=function(e,t,o=[]){return{children:o,widgetConstructor:e,properties:t,type:s}},t.g=function(e,t={},o){let r,s=t;Array.isArray(t)&&(o=t,s={});"function"==typeof s&&(r=s,s={});return{tag:e,deferredPropertiesCallback:r,children:o,properties:s,type:n}},t.c=function({node:e,attrs:t={},props:o={},on:r={},diffType:s="none"},n){return{tag:c(e)?e.tagName.toLowerCase():"",properties:o,attributes:t,events:r,children:n,type:i,domNode:e,text:c(e)?void 0:e.data,diffType:s}};var r=o("./node_modules/@dojo/framework/shim/Symbol.mjs");const s=Object(r.a)("Identifier for a WNode.");t.b=s;const n=Object(r.a)("Identifier for a VNode.");t.a=n;const i=Object(r.a)("Identifier for a VNode created using existing dom.");function d(e){return Boolean(e&&"string"!=typeof e&&e.type===s)}function a(e){return Boolean(e&&"string"!=typeof e&&(e.type===n||e.type===i))}function c(e){return!!e.tagName}},"./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("afterRender",o?t[o]:e)})}},"./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs");function n(){return Object(r.a)((e,t)=>{Object(s.a)(function(){this.invalidate()})(e)})}},"./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("beforeProperties",o?t[o]:e)})}},"./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs"),s=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");function n({tag:e,properties:t=[],attributes:o=[],events:n=[],childType:i=r.CustomElementChildType.DOJO,registryFactory:d=(()=>new s.c)}){return function(r){r.prototype.__customElementDescriptor={tagName:e,attributes:o,properties:t,events:n,childType:i,registryFactory:d}}}},"./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/framework/widget-core/diff.mjs");function n(e,t=s.a,o){return Object(r.a)((r,s)=>{r.addDecorator(`diffProperty:${e}`,t.bind(null)),r.addDecorator("registeredDiffProperty",e),(o||s)&&r.addDecorator("diffReaction",{propertyName:e,reaction:s?r[s]:o})})}},"./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs":function(e,t,o){"use strict";function r(e){return function(t,o,r){"function"==typeof t?e(t.prototype,void 0):e(t,o)}}t.a=r},"./node_modules/@dojo/framework/widget-core/decorators/inject.mjs":function(e,t,o){"use strict";t.a=d;var r=o("./node_modules/@dojo/framework/shim/WeakMap.mjs"),s=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs");const i=new r.a;function d({name:e,getProperties:t}){return Object(s.a)((o,r)=>{Object(n.a)(function(o){const r=this.registry.getInjector(e);if(r){const{injector:e,invalidator:s}=r,n=i.get(this)||[];return 0===n.length&&i.set(this,n),-1===n.indexOf(r)&&(this.own(s.on("invalidate",()=>{this.invalidate()})),n.push(r)),t(e(),o)}})(o)})}},"./node_modules/@dojo/framework/widget-core/diff.mjs":function(e,t,o){"use strict";t.b=i,t.a=function(e,t){let o;o="function"==typeof t?t._type===r.b?n(e,t):function(e,t){return{changed:!1,value:t}}(0,t):s(t)?i(e,t):n(e,t);return o};var r=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");function s(e){return"[object Object]"===Object.prototype.toString.call(e)||Array.isArray(e)}function n(e,t){return{changed:e!==t,value:t}}function i(e,t){let o=!1;const r=e&&s(e),n=t&&s(t);if(!r||!n)return{changed:!0,value:t};const i=Object.keys(e),d=Object.keys(t);return{changed:o=i.length!==d.length||d.some(o=>t[o]!==e[o]),value:t}}},"./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs":function(e,t,o){"use strict";t.a=u;var r,s,n=o("./node_modules/tslib/tslib.es6.js"),i=o("./node_modules/@dojo/framework/core/lang.mjs"),d=o("./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs"),a=o("./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs"),c=o("./node_modules/@dojo/framework/widget-core/d.mjs"),l=o("./node_modules/@dojo/framework/widget-core/vdom.mjs");function u(e){class t extends e{constructor(...e){super(...e),this._root=document.body,this._async=!0,this._projectorProperties={},this._projectionOptions={transitions:d.a},this.root=document.body,this.projectorState=r.Detached}append(e){const t={type:s.Append,root:e};return this._attach(t)}merge(e){const t={type:s.Merge,root:e};return this._attach(t)}set root(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change root element");this._root=e}get root(){return this._root}get async(){return this._async}set async(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change async mode");this._async=e}sandbox(e=document){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot create sandbox");this._async=!1;const t=this.root;this.own({destroy:()=>{this._root=t}}),this._attach({root:e.createDocumentFragment(),type:s.Append})}setChildren(e){this.__setChildren__(e)}setProperties(e){this.__setProperties__(e)}__setProperties__(e){this._projectorProperties&&this._projectorProperties.registry!==e.registry&&this._projectorProperties.registry&&this._projectorProperties.registry.destroy(),this._projectorProperties=Object(i.a)({},e),super.__setCoreProperties__({bind:this,baseRegistry:e.registry}),super.__setProperties__(e)}toHtml(){if(this.projectorState!==r.Attached||!this._projection)throw new Error("Projector is not attached, cannot return an HTML string of projection.");return this._projection.domNode.childNodes[0].outerHTML}afterRender(e){let t=e;return"string"!=typeof e&&null!==e&&void 0!==e||(t=Object(c.g)("span",{},[e])),t}destroy(){super.destroy()}_attach({type:e,root:t}){if(t&&(this.root=t),this._attachHandle)return this._attachHandle;this.projectorState=r.Attached;const o={destroy:()=>{this.projectorState===r.Attached&&(this._projection=void 0,this.projectorState=r.Detached)}};switch(this.own(o),this._attachHandle=o,this._projectionOptions=Object.assign({},this._projectionOptions,{sync:!this._async}),e){case s.Append:this._projection=l.a.append(this.root,this,this._projectionOptions);break;case s.Merge:this._projection=l.a.merge(this.root,this,this._projectionOptions)}return this._attachHandle}}return n.a([Object(a.a)()],t.prototype,"afterRender",null),t}!function(e){e[e.Attached=1]="Attached",e[e.Detached=2]="Detached"}(r||(r={})),function(e){e[e.Append=1]="Append",e[e.Merge=2]="Merge"}(s||(s={}))},"./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs":function(e,t,o){"use strict";t.c=function(e){return Object(i.a)(t=>{t.addDecorator("baseThemeClasses",e)})},t.b=function(e,t){const o=new s.a(e);return t.defineInjector(l,e=>(o.setInvalidator(e),()=>o.get())),o},t.a=u;var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/framework/widget-core/Injector.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/inject.mjs"),i=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),d=o("./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs"),a=o("./node_modules/@dojo/framework/widget-core/diff.mjs");const c=" _key",l=Symbol("theme");function u(e){let t=class extends e{constructor(){super(...arguments),this._registeredBaseThemeKeys=[],this._recalculateClasses=!0,this._theme={}}theme(e){return this._recalculateClasses&&this._recalculateThemeClasses(),Array.isArray(e)?e.map(e=>this._getThemeClass(e)):this._getThemeClass(e)}onPropertiesChanged(){this._recalculateClasses=!0}_getThemeClass(e){if(void 0===e||null===e)return e;const t=this.properties.extraClasses||{},o=this._baseThemeClassesReverseLookup[e];let r=[];return o?(t[o]&&r.push(t[o]),this._theme[o]?r.push(this._theme[o]):r.push(this._registeredBaseTheme[o]),r.join(" ")):(console.warn(`Class name: '${e}' not found in theme`),null)}_recalculateThemeClasses(){const{theme:e={}}=this.properties,t=this.getDecorator("baseThemeClasses");this._registeredBaseTheme||(this._registeredBaseTheme=t.reduce((e,t)=>{const o=c,s=t[o],n=r.b(t,["symbol"==typeof o?o:o+""]);return this._registeredBaseThemeKeys.push(s),Object.assign({},e,n)},{}),this._baseThemeClassesReverseLookup=t.reduce((e,t)=>(Object.keys(t).forEach(o=>{e[t[o]]=o}),e),{})),this._theme=this._registeredBaseThemeKeys.reduce((t,o)=>Object.assign({},t,e[o]),{}),this._recalculateClasses=!1}};return r.a([Object(d.a)("theme",a.b),Object(d.a)("extraClasses",a.b)],t.prototype,"onPropertiesChanged",null),t=r.a([Object(n.a)({name:l,getProperties:(e,t)=>t.theme?{}:{theme:e}})],t)}},"./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"CustomElementChildType",function(){return r}),t.DomToWidgetWrapper=m,t.create=h,t.register=p;var r,s=o("./node_modules/tslib/tslib.es6.js"),n=o("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"),i=o("./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs"),d=o("./node_modules/@dojo/framework/shim/array.mjs"),a=o("./node_modules/@dojo/framework/widget-core/d.mjs"),c=o("./node_modules/@dojo/framework/shim/global.mjs"),l=o("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"),u=o("./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs");function m(e){let t=class extends n.a{render(){const t=Object.keys(this.properties).reduce((e,t)=>{const o=this.properties[t];return 0===t.indexOf("on")&&(t=`__${t}`),e[t]=o,e},{});return Object(a.c)({node:e,props:t,diffType:"dom"})}static get domNode(){return e}};return t=s.a([Object(u.a)()],t)}function h(e,t){const{attributes:o,childType:s,registryFactory:u}=e,h={};return o.forEach(e=>{const t=e.toLowerCase();h[t]=e}),class extends HTMLElement{constructor(){super(...arguments),this._properties={},this._children=[],this._eventProperties={},this._initialised=!1}connectedCallback(){if(this._initialised)return;const o={},{attributes:h,properties:p,events:f}=e;this._properties=Object.assign({},this._properties,this._attributesToProperties(h)),[...h,...p].forEach(e=>{const t=this[e],r=e.replace(/^on/,"__");void 0!==t&&(this._properties[e]=t),r!==e&&(o[r]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}),o[e]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}}),f.forEach(e=>{const t=e.replace(/^on/,"").toLowerCase(),r=e.replace(/^on/,"__on");o[r]={get:()=>this._getEventProperty(e),set:t=>this._setEventProperty(e,t)},this._eventProperties[e]=void 0,this._properties[e]=((...o)=>{const r=this._getEventProperty(e);"function"==typeof r&&r(...o),this.dispatchEvent(new CustomEvent(t,{bubbles:!1,detail:o}))})}),Object.defineProperties(this,o);const g=s===r.TEXT?this.childNodes:this.children;Object(d.a)(g).forEach(e=>{s===r.DOJO?(e.addEventListener("dojo-ce-render",()=>this._render()),e.addEventListener("dojo-ce-connected",()=>this._render()),this._children.push(m(e))):this._children.push(Object(a.c)({node:e,diffType:"dom"}))}),this.addEventListener("dojo-ce-connected",e=>this._childConnected(e));const j=this._properties,_=()=>this.__children__(),y=u(),b=Object(l.b)(this._getTheme(),y);c.a.addEventListener("dojo-theme-set",()=>b.set(this._getTheme()));const w=Object(i.a)(class extends n.a{render(){return Object(a.h)(t,j,_())}});this._projector=new w,this._projector.setProperties({registry:y}),this._projector.append(this),this._initialised=!0,this.dispatchEvent(new CustomEvent("dojo-ce-connected",{bubbles:!0,detail:this}))}_getTheme(){if(c.a&&c.a.dojoce&&c.a.dojoce.theme)return c.a.dojoce.themes[c.a.dojoce.theme]}_childConnected(e){const t=e.detail;if(t.parentNode===this){this._children.some(e=>e.domNode===t)||(t.addEventListener("dojo-ce-render",()=>this._render()),this._children.push(m(t)),this._render())}}_render(){this._projector&&(this._projector.invalidate(),this.dispatchEvent(new CustomEvent("dojo-ce-render",{bubbles:!1,detail:this})))}__properties__(){return Object.assign({},this._properties,this._eventProperties)}__children__(){return s===r.DOJO?this._children.filter(e=>e.domNode.isWidget).map(e=>{const{domNode:t}=e;return Object(a.h)(e,Object.assign({},t.__properties__()),[...t.__children__()])}):this._children}attributeChangedCallback(e,t,o){const r=h[e];this._setProperty(r,o)}_setEventProperty(e,t){this._eventProperties[e]=t}_getEventProperty(e){return this._eventProperties[e]}_setProperty(e,t){"function"==typeof t&&(t[n.b]=!0),this._properties[e]=t,this._render()}_getProperty(e){return this._properties[e]}_attributesToProperties(e){return e.reduce((e,t)=>{const o=t.toLowerCase(),r=this.getAttribute(o);return null!==r&&(e[t]=r),e},{})}static get observedAttributes(){return Object.keys(h)}get isWidget(){return!0}}}function p(e){const t=e.prototype&&e.prototype.__customElementDescriptor;if(!t)throw new Error("Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?");c.a.customElements.define(t.tagName,h(t,e))}!function(e){e.DOJO="DOJO",e.NODE="NODE",e.TEXT="TEXT"}(r||(r={})),t.default=p},"./node_modules/@dojo/framework/widget-core/vdom.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=o("./node_modules/@dojo/framework/shim/array.mjs"),n=o("./node_modules/@dojo/framework/widget-core/d.mjs"),i=o("./node_modules/@dojo/framework/widget-core/Registry.mjs"),d=o("./node_modules/@dojo/framework/shim/WeakMap.mjs");const a="http://www.w3.org/2000/svg",c="http://www.w3.org/1999/xlink",l=[],u=["focus","blur","scrollIntoView","click"],m=new d.a;t.b=m;const h=new d.a,p=new d.a,f=new d.a;function g(e,t){return Object(n.e)(e)&&Object(n.e)(t)?(!Object(n.d)(e)&&!Object(n.d)(t)||e.domNode===t.domNode)&&(e.tag===t.tag&&e.properties.key===t.properties.key):!(!Object(n.f)(e)||!Object(n.f)(t))&&((void 0!==e.instance||"string"!=typeof t.widgetConstructor)&&(e.widgetConstructor===t.widgetConstructor&&e.properties.key===t.properties.key))}const j=function(){throw new Error("Provide a transitions object to the projectionOptions to do animations")};function _(e){if("string"!=typeof e)throw new Error("Style values must be strings")}function y(e,t,o,r,s,n){const i=f.get(r.projectorInstance),a=i.nodeMap.get(e)||new d.a;if(n){const o=a.get(n);e.removeEventListener(t,o)}let c=o.bind(s);"input"===t&&(c=function(e){o.call(this,e),e.target["oninput-value"]=e.target.value}.bind(s)),e.addEventListener(t,c),a.set(o,c),i.nodeMap.set(e,a)}function b(e,t){if(t){const o=t.split(" ");for(let t=0;t{r[e]()})}}function k(e,t,o,r,s=!1){const n=f.get(r.projectorInstance).nodeMap.get(e);n&&Object.keys(t).forEach(r=>{const i="on"===r.substr(0,2)||s,d=s?r:r.substr(2);if(i&&!o[r]){const o=n.get(t[r]);o&&e.removeEventListener(d,o)}})}function O(e,t,o,r){r.namespace===a&&"href"===t?e.setAttributeNS(c,t,o):"role"===t&&""===o||void 0===o?e.removeAttribute(t):e.setAttribute(t,o)}function P(e,t,o,r){const s=Object.keys(o),n=s.length;for(let i=0;i0)if(c&&0!==c.length){const r=[...o];for(let o=0;o0&&R(r.children,t));else{if(!r.coreProperties){const e=m.get(t);r.coreProperties={bind:t,baseRegistry:e.coreProperties.baseRegistry}}r.children&&r.children.length>0&&R(r.children,t)}o++}else e.splice(o,1)}return e}function A(e,t){if(Object(n.e)(e)&&e.properties){const o=e.properties.enterAnimation;o&&("function"==typeof o?o(e.domNode,e.properties):t.enter(e.domNode,e.properties,o))}}function M(e,t,o){if(Object(n.f)(e)){const r=h.get(e.instance),s=(r?r.dnode.rendered:e.rendered)||l;if(e.instance){m.get(e.instance).onDetach(),h.delete(e.instance)}for(let e=0;e0)for(let r=0;r{let d=void 0,a=o,m=p+1,f=o[p];if(f||(f=t[0],m=1,a=t),f){let t=[f];for(;t.length;){const o=t.shift();if(Object(n.f)(o)){const e=h.get(o.instance);e&&e.dnode.rendered&&t.push(...e.dnode.rendered)}else if(o.domNode){if(o.domNode.parentElement!==e.domNode)break;d=o.domNode;break}0===t.length&&a[m]&&(t.push(a[m]),m++)}}S(l,e,r.slice(j+1),d,i,s),A(l,c);const g=j;u.afterRenderCallbacks.push(()=>{x(r,g,s)})};if(!a||-1===m){f(),j++;continue}const y=()=>{const e=p;if(u.afterRenderCallbacks.push(()=>{x(o,e,s)}),Object(n.f)(a)){const e=h.get(a.instance);e&&(a=e.dnode)}M(a,c,i)};-1!==C(r,a,j+1)?(f(),y(),p++,j++):(y(),p++)}if(d>p)for(m=p;m{x(o,e,s)});let t=o[m];if(Object(n.f)(t)){const e=h.get(t.instance);e&&(t=e.dnode)}M(t,c,i)}return _}function I(e,t,o,r,i,d){if(void 0===t)return;const a=f.get(o.projectorInstance);a.merge&&void 0===d&&(d=Object(s.a)(e.domNode.childNodes));const c=o.transitions;o=Object.assign({},o,{depth:o.depth+1});for(let s=0;s0;)(e=d.shift())&&e.tagName===(l.tag.toUpperCase()||void 0)&&(l.domNode=e)}S(l,e,u,i,o,r)}else S(l,e,u,i,o,r,d);A(l,c)}}function D(e,t,o,r){if(I(t,t.children,r,o,void 0),"function"==typeof t.deferredPropertiesCallback&&void 0===t.inserted&&W(t,r),t.attributes&&t.events){P(e,{},t.attributes,r),E(e,{},t.properties,r,!1),k(e,{},t.events,r,!0);const o=t.events;Object.keys(o).forEach(s=>{y(e,s,o[s],r,t.properties.bind)})}else E(e,{},t.properties,r);if(null!==t.properties.key&&void 0!==t.properties.key){m.get(o).nodeHandler.add(e,`${t.properties.key}`)}t.inserted=!0}function S(e,t,o,r,s,d,c){let l;const u=f.get(s.projectorInstance);if(Object(n.f)(e)){let{widgetConstructor:n}=e;const a=m.get(d);if(!Object(i.d)(n)){const e=a.registry().get(n);if(null===e)return;n=e}const l=new n;e.instance=l,p.set(l,o);const f=m.get(l);f.invalidate=(()=>{f.dirty=!0,!1===f.rendering&&(u.renderQueue.push({instance:l,depth:s.depth}),H(s))}),f.rendering=!0,l.__setCoreProperties__(e.coreProperties),l.__setChildren__(e.children),l.__setProperties__(e.properties);const g=l.__render__();if(f.rendering=!1,g){const o=R(g,l);e.rendered=o,I(t,o,s,l,r,c)}h.set(l,{dnode:e,parentVNode:t}),f.nodeHandler.addRoot(),u.afterRenderCallbacks.push(()=>{f.onAttach()})}else{if(u.merge&&void 0!==u.mergeElement)return l=e.domNode=s.mergeElement,u.mergeElement=void 0,void D(l,e,d,s);const o=t.domNode.ownerDocument;if(e.tag||"string"!=typeof e.text)void 0===e.domNode?("svg"===e.tag&&(s=Object.assign({},s,{namespace:a})),l=void 0!==s.namespace?e.domNode=o.createElementNS(s.namespace,e.tag):e.domNode=e.domNode||o.createElement(e.tag)):l=e.domNode,D(l,e,d,s),void 0!==r?t.domNode.insertBefore(l,r):l.parentNode!==t.domNode&&t.domNode.appendChild(l);else if(void 0!==e.domNode&&t.domNode){const o=e.domNode.ownerDocument.createTextNode(e.text);t.domNode===e.domNode.parentNode?t.domNode.replaceChild(o,e.domNode):(t.domNode.appendChild(o),e.domNode.parentNode&&e.domNode.parentNode.removeChild(e.domNode)),e.domNode=o}else l=e.domNode=o.createTextNode(e.text),void 0!==r?t.domNode.insertBefore(l,r):t.domNode.appendChild(l)}}function L(e,t,o,r,s,i,d){if(Object(n.f)(t)){const{instance:r}=e,{parentVNode:s,dnode:n}=h.get(r),a=n?n.rendered:e.rendered,c=m.get(r);if(c.rendering=!0,r.__setCoreProperties__(t.coreProperties),r.__setChildren__(t.children),r.__setProperties__(t.properties),p.set(r,d),t.instance=r,!0===c.dirty){const e=r.__render__();c.rendering=!1,t.rendered=R(e,r),T(s,i,a,t.rendered,r,o)}else c.rendering=!1,t.rendered=a;h.set(r,{dnode:t,parentVNode:s}),c.nodeHandler.addRoot()}else{if(e===t)return!1;const r=t.domNode=e.domNode;let n=!1,d=!1;if(t.tag||"string"!=typeof t.text){if(t.tag&&0===t.tag.lastIndexOf("svg",0)&&(o=Object.assign({},o,{namespace:a})),e.children!==t.children){const r=R(t.children,s);t.children=r,d=T(t,i,e.children,r,s,o)||d}const n=function(e,t,o){const{diffType:r,properties:s,attributes:n}=o;if(!r||"vdom"===r)return{properties:t.properties,attributes:t.attributes,events:t.events};if("none"===r)return{properties:{},attributes:t.attributes?{}:void 0,events:t.events};let i={properties:{}};return n?(i.attributes={},i.events=t.events,Object.keys(s).forEach(t=>{i.properties[t]=e[t]}),Object.keys(n).forEach(t=>{i.attributes[t]=e.getAttribute(t)}),i):(i.properties=Object.keys(s).reduce((t,o)=>(t[o]=e.getAttribute(o)||e[o],t),{}),i)}(r,e,t);if(t.attributes&&t.events){P(r,n.attributes,t.attributes,o),d=E(r,n.properties,t.properties,o,!1)||d,k(r,n.events,t.events,o,!0);const e=t.events;Object.keys(e).forEach(s=>{y(r,s,e[s],o,t.properties.bind,n.events[s])})}else d=E(r,n.properties,t.properties,o)||d;if(null!==t.properties.key&&void 0!==t.properties.key){m.get(s).nodeHandler.add(r,`${t.properties.key}`)}}else if(t.text!==e.text){const e=r.ownerDocument.createTextNode(t.text);return r.parentNode.replaceChild(e,r),t.domNode=e,n=!0}d&&t.properties&&t.properties.updateAnimation&&t.properties.updateAnimation(r,t.properties,e.properties)}}function W(e,t){e.decoratedDeferredProperties=e.properties;const o=e.deferredPropertiesCallback(!!e.inserted),r=f.get(t.projectorInstance);e.properties=Object.assign({},o,e.decoratedDeferredProperties),r.deferredRenderCallbacks.push(()=>{const o=Object.assign({},e.deferredPropertiesCallback(!!e.inserted),e.decoratedDeferredProperties);E(e.domNode,e.properties,o,t),e.properties=o})}function B(e){const t=f.get(e.projectorInstance);if(t.deferredRenderCallbacks.length)if(e.sync)for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}else r.a.requestAnimationFrame(()=>{for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}})}function F(e){const t=f.get(e.projectorInstance);if(e.sync)for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}else r.a.requestIdleCallback?r.a.requestIdleCallback(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}}):setTimeout(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}})}function H(e){const t=f.get(e.projectorInstance);e.sync?$(e):void 0===t.renderScheduled&&(t.renderScheduled=r.a.requestAnimationFrame(()=>{$(e)}))}function $(e){const t=f.get(e.projectorInstance);t.renderScheduled=void 0;const o=[...t.renderQueue];t.renderQueue=[],o.sort((e,t)=>e.depth-t.depth);const r=[];for(;o.length;){const{instance:t}=o.shift();if(h.has(t)&&-1===r.indexOf(t)){r.push(t);const{parentVNode:o,dnode:s}=h.get(t),n=m.get(t),i=p.get(t);L(s,N(t,n),e,0,t,i,i)}}F(e),B(e)}const q={append:function(e,t,o={}){const r=m.get(t),s=function(e,t){const o={namespace:void 0,styleApplyer:function(e,t,o){e.style[t]=o},transitions:{enter:j,exit:j},depth:0,merge:!1,sync:!1,projectorInstance:t};return Object.assign({},o,e)}(o,t),i={afterRenderCallbacks:[],deferredRenderCallbacks:[],nodeMap:new d.a,renderScheduled:void 0,renderQueue:[],merge:o.merge||!1,mergeElement:o.mergeElement};f.set(t,i),s.rootNode=e;const a={tag:"",properties:{},children:void 0,domNode:s.rootNode,type:n.a};const c=N(t,r);return h.set(t,{dnode:c,parentVNode:a}),r.invalidate=(()=>{r.dirty=!0,!1===r.rendering&&(i.renderQueue.push({instance:t,depth:s.depth}),H(s))}),L(c,c,s,0,t,[],[]),i.afterRenderCallbacks.push(()=>{r.onAttach()}),B(s),F(s),{domNode:s.rootNode}},create:function(e,t){return this.append(document.createElement("div"),e,t)},merge:function(e,t,o={}){o.merge=!0,o.mergeElement=e;const r=this.append(e.parentNode,t,o);return f.get(t).merge=!1,r}};t.a=q},"./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js":function(e,t,o){var r=o("./src/menu-item/MenuItem.ts"),s=o("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs").default,n=r.default;n&&s(n)},"./node_modules/process/browser.js":function(e,t){var o,r,s=e.exports={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function d(e){if(o===setTimeout)return setTimeout(e,0);if((o===n||!o)&&setTimeout)return o=setTimeout,setTimeout(e,0);try{return o(e,0)}catch(t){try{return o.call(null,e,0)}catch(t){return o.call(this,e,0)}}}!function(){try{o="function"==typeof setTimeout?setTimeout:n}catch(e){o=n}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var a,c=[],l=!1,u=-1;function m(){l&&a&&(l=!1,a.length?c=a.concat(c):u=-1,c.length&&h())}function h(){if(!l){var e=d(m);l=!0;for(var t=c.length;t;){for(a=c,c=[];++u1)for(var o=1;o=0;d--)(s=e[d])&&(i=(n<3?s(i):n>3?s(t,o,i):s(t,o))||i);return n>3&&i&&Object.defineProperty(t,o,i),i}; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use @@ -21,5 +21,5 @@ MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ -Object.setPrototypeOf||Array;Object.assign},"./node_modules/webpack/buildin/global.js":function(e,t){var o;o=function(){return this}();try{o=o||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(o=window)}e.exports=o},"./src/menu-item/MenuItem.ts":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"MenuItem",function(){return c});var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/widget-core/d.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/customElement.mjs"),i=o("./node_modules/@dojo/widget-core/mixins/Themed.mjs"),d=o("./node_modules/@dojo/widget-core/WidgetBase.mjs"),a=o("./src/menu-item/menuItem.m.css");o.n(a);let c=class extends(Object(i.a)(d.a)){_onClick(){this.properties.onSelected&&this.properties.onSelected(this.properties.data)}render(){const{title:e,selected:t}=this.properties;return Object(s.g)("li",{classes:this.theme(a.root)},[Object(s.g)("span",{classes:this.theme([a.item,t?a.selected:null]),onclick:this._onClick},[e])])}};c=r.a([Object(n.a)({tag:"demo-menu-item",attributes:["title","selected"],events:["onSelected"],properties:["data","selected"]}),Object(i.c)(a)],c),t.default=c},"./src/menu-item/menuItem.m.css":function(e,t){e.exports={" _key":"test-app/menuItem",root:"sUmUi4Sh",item:"_2Mk6Rdqa",selected:"_1-f3ItOh"}},0:function(e,t,o){e.exports=o("./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js")}}); +Object.setPrototypeOf||Array;Object.assign},"./node_modules/webpack/buildin/global.js":function(e,t){var o;o=function(){return this}();try{o=o||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(o=window)}e.exports=o},"./src/menu-item/MenuItem.ts":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"MenuItem",function(){return c});var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/framework/widget-core/d.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs"),i=o("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"),d=o("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"),a=o("./src/menu-item/menuItem.m.css");o.n(a);let c=class extends(Object(i.a)(d.a)){_onClick(){this.properties.onSelected&&this.properties.onSelected(this.properties.data)}render(){const{title:e,selected:t}=this.properties;return Object(s.g)("li",{classes:this.theme(a.root)},[Object(s.g)("span",{classes:this.theme([a.item,t?a.selected:null]),onclick:this._onClick},[e])])}};c=r.a([Object(n.a)({tag:"demo-menu-item",attributes:["title","selected"],events:["onSelected"],properties:["data","selected"]}),Object(i.c)(a)],c),t.default=c},"./src/menu-item/menuItem.m.css":function(e,t){e.exports={" _key":"test-app/menuItem",root:"sUmUi4Sh",item:"_2Mk6Rdqa",selected:"_1-f3ItOh"}},0:function(e,t,o){e.exports=o("./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js")}}); //# sourceMappingURL=menu-item-1.0.0.js.map \ No newline at end of file diff --git a/test-app/fixtures/windows/dist/menu-item/menu-item-1.0.0.js.map b/test-app/fixtures/windows/dist/menu-item/menu-item-1.0.0.js.map index 3f50624..b171fd9 100644 --- a/test-app/fixtures/windows/dist/menu-item/menu-item-1.0.0.js.map +++ b/test-app/fixtures/windows/dist/menu-item/menu-item-1.0.0.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 569730b4d721e461702a","webpack:///./node_modules/@dojo/core/Destroyable.mjs","webpack:///./node_modules/@dojo/core/Evented.mjs","webpack:///./node_modules/@dojo/core/lang.mjs","webpack:///./node_modules/@dojo/has/has.mjs","webpack:///./node_modules/@dojo/shim/Map.mjs","webpack:///./node_modules/@dojo/shim/Promise.mjs","webpack:///./node_modules/@dojo/shim/Symbol.mjs","webpack:///./node_modules/@dojo/shim/WeakMap.mjs","webpack:///./node_modules/@dojo/shim/array.mjs","webpack:///./node_modules/@dojo/shim/global.mjs","webpack:///./node_modules/@dojo/shim/number.mjs","webpack:///./node_modules/@dojo/shim/object.mjs","webpack:///./node_modules/@dojo/shim/string.mjs","webpack:///./node_modules/@dojo/shim/support/has.mjs","webpack:///./node_modules/@dojo/shim/support/queue.mjs","webpack:///./node_modules/@dojo/shim/support/util.mjs","webpack:///./node_modules/@dojo/widget-core/Injector.mjs","webpack:///./node_modules/@dojo/widget-core/NodeHandler.mjs","webpack:///./node_modules/@dojo/widget-core/Registry.mjs","webpack:///./node_modules/@dojo/widget-core/RegistryHandler.mjs","webpack:///./node_modules/@dojo/widget-core/WidgetBase.mjs","webpack:///./node_modules/@dojo/widget-core/animations/cssTransitions.mjs","webpack:///./node_modules/@dojo/widget-core/d.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/afterRender.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/customElement.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/diffProperty.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/inject.mjs","webpack:///./node_modules/@dojo/widget-core/diff.mjs","webpack:///./node_modules/@dojo/widget-core/mixins/Projector.mjs","webpack:///./node_modules/@dojo/widget-core/mixins/Themed.mjs","webpack:///./node_modules/@dojo/widget-core/registerCustomElement.mjs","webpack:///./node_modules/@dojo/widget-core/vdom.mjs","webpack:///./node_modules/@dojo/cli-build-widget/template/custom-element.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/menu-item/MenuItem.ts","webpack:///./src/menu-item/menuItem.m.css?6a95"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","noop","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_Promise__","resolve","destroyed","Error","Destroyable","[object Object]","this","handles","handle","Array","isArray","__WEBPACK_IMPORTED_MODULE_0__lang__","_handles","push","splice","indexOf","destroy","forEach","own","__webpack_exports__","regexMap","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__","Evented","__WEBPACK_IMPORTED_MODULE_1__Destroyable__","super","arguments","listenersMap","event","methods","type","globString","targetString","regex","has","RegExp","replace","set","test","isGlobMatch","method","listener","map","_addListener","listeners","destructor","called","createHandle","length","slice","testCache","testFunctions","testThenables","globalScope","window","global","self","staticFeatures","DojoHasEnvironment","staticCache","apply","add","feature","value","overwrite","normalizedFeature","toLowerCase","Boolean","exists","TypeError","then","isFeatureTestThenable","resolvedValue","result","document","location","process","versions","node","Map","__WEBPACK_IMPORTED_MODULE_1__global__","ShimPromise","__WEBPACK_IMPORTED_MODULE_0__global__","Promise","Symbol","wellKnown","__WEBPACK_IMPORTED_MODULE_2__support_util__","for","WeakMap","from","of","copyWithin","fill","find","findIndex","includes","__WEBPACK_IMPORTED_MODULE_4__support_util__","globalObject","Math","pow","assign","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","is","keys","getOwnPropertyDescriptors","entries","values","fromCodePoint","raw","codePointAt","endsWith","normalize","repeat","startsWith","padEnd","padStart","String","__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__","every","key","Number","POSITIVE_INFINITY","e","imul","Observable","Set","getCallSite","callSite","substitutions","key1","key2","freeze","postMessage","requestAnimationFrame","setImmediate","MutationObserver","WebKitMutationObserver","example","createElement","observer","observe","attributes","style","setProperty","takeRecords","undefined","Animation","KeyframeEffect","executeTask","item","isActive","callback","getQueueHandle","enqueue","queue","addEventListener","source","data","stopPropagation","shift","queueTask","id","queueAnimationTask","rafId","bind","cancelAnimationFrame","writable","nativeFunction","target","args","Injector","__WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__","payload","_payload","invalidator","_invalidator","NodeEventType","_nodeMap","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__","element","emit","Widget","Projector","clear","WIDGET_BASE_TYPE","__WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__","isWidgetBaseConstructor","_type","Registry","__WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__","widgetLabel","action","label","_widgetRegistry","toString","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__","widgetCtor","emitLoadedEvent","error","injectorFactory","_injectorRegistry","injectorItem","injector","promise","default","isWidgetConstructorDefaultExport","hasInjector","__WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__","_registry","__WEBPACK_IMPORTED_MODULE_2__Registry__","_registryWidgetLabelMap","_registryInjectorLabelMap","baseRegistry","delete","base","widget","define","defineInjector","globalPrecedence","_get","getFunctionName","labelMap","registries","registry","registeredLabels","on","decoratorMap","boundAuto","__WEBPACK_IMPORTED_MODULE_4__diff__","noBind","WidgetBase","_initialProperties","_changedPropertyKeys","_nodeHandler","__WEBPACK_IMPORTED_MODULE_6__NodeHandler__","_children","_decoratorCache","_properties","_boundRenderFunc","render","_boundInvalidate","invalidate","__WEBPACK_IMPORTED_MODULE_7__vdom__","dirty","onAttach","onDetach","nodeHandler","coreProperties","rendering","inputProperties","_runAfterConstructors","MetaType","_metaMap","cached","properties","changedPropertyKeys","instanceData","__WEBPACK_IMPORTED_MODULE_5__RegistryHandler__","originalProperties","_runBeforeProperties","registeredDiffPropertyNames","getDecorator","propertyNames","allProperties","checkedProperties","diffPropertyResults","runReactions","propertyName","previousProperty","newProperty","_bindFunctionProperty","diffFunctions","changed","_mapDiffPropertyReactions","reaction","previousProperties","newProperties","children","dNode","_runBeforeRenders","runAfterRenders","__WEBPACK_IMPORTED_MODULE_3__d__","decoratorKey","decoratorList","constructor","specificDecoratorList","decorators","allDecorators","instanceMap","unshift","getPrototypeOf","_buildDecoratorList","reduce","reactionPropertyMap","reactionArguments","__WEBPACK_IMPORTED_MODULE_8__Registry__","_bindFunctionPropertyMap","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__","bindInfo","boundFunc","scope","beforeProperties","beforePropertiesFunction","beforeRenders","beforeRenderFunction","updatedRender","console","warn","afterRenders","afterRenderFunction","meta","afterRender","afterConstructors","afterConstructor","pop","browserSpecificTransitionEndEventName","browserSpecificAnimationEndEventName","initialize","determineBrowserStyleNames","runAndCleanUp","startAnimation","finishAnimation","finished","transitionEnd","removeEventListener","enter","enterAnimation","activeClass","enterAnimationActive","classList","remove","exit","exitAnimation","removeNode","exitAnimationActive","child","DOMVNODE","widgetConstructor","WNODE","tag","propertiesOrChildren","deferredPropertiesCallback","VNODE","attrs","props","diffType","isElementNode","tagName","events","domNode","text","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__","isWNode","isVNode","__WEBPACK_IMPORTED_MODULE_0__handleDecorator__","propertyKey","addDecorator","alwaysRender","__WEBPACK_IMPORTED_MODULE_1__beforeProperties__","customElement","childType","__WEBPACK_IMPORTED_MODULE_0__registerCustomElement__","DOJO","registryFactory","__WEBPACK_IMPORTED_MODULE_1__Registry__","__customElementDescriptor","diffProperty","diffFunction","reactionFunction","handleDecorator","handler","descriptor","registeredInjectorsMap","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__","inject","getProperties","__WEBPACK_IMPORTED_MODULE_1__handleDecorator__","__WEBPACK_IMPORTED_MODULE_2__beforeProperties__","getInjector","registeredInjectors","__WEBPACK_IMPORTED_MODULE_0__Registry__","reference","ignore","isObjectOrArray","shallow","validOldProperty","validNewProperty","previousKeys","newKeys","some","ProjectorAttachState","AttachType","ProjectorMixin","Base","_root","body","_async","_projectorProperties","_projectionOptions","transitions","__WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__","root","projectorState","Detached","options","Append","_attach","Merge","Attached","async","doc","previousRoot","createDocumentFragment","__setChildren__","__setProperties__","__WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__","__setCoreProperties__","_projection","childNodes","outerHTML","__WEBPACK_IMPORTED_MODULE_4__d__","_attachHandle","sync","__WEBPACK_IMPORTED_MODULE_5__vdom__","append","merge","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__","Function","theme","__WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__","themeRegistry","themeInjector","__WEBPACK_IMPORTED_MODULE_1__Injector__","INJECTED_THEME_KEY","setInvalidator","THEME_KEY","ThemedMixin","Themed","_registeredBaseThemeKeys","_recalculateClasses","_theme","classes","_recalculateThemeClasses","className","_getThemeClass","extraClasses","themeClassName","_baseThemeClassesReverseLookup","resultClassNames","_registeredBaseTheme","join","baseThemes","finalBaseTheme","baseTheme","_a","currentClassNames","baseClass","themeKey","__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__","__WEBPACK_IMPORTED_MODULE_5__diff__","__WEBPACK_IMPORTED_MODULE_2__decorators_inject__","CustomElementChildType","DomToWidgetWrapper","__WEBPACK_IMPORTED_MODULE_1__WidgetBase__","__WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__","create","WidgetConstructor","attributeMap","attributeName","HTMLElement","_eventProperties","_initialised","domProperties","_attributesToProperties","filteredPropertyName","_getProperty","_setProperty","eventName","_getEventProperty","_setEventProperty","eventCallback","dispatchEvent","CustomEvent","bubbles","detail","defineProperties","TEXT","__WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__","childNode","_render","_childConnected","widgetProperties","renderChildren","__children__","themeContext","__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__","_getTheme","__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__","__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__","_projector","setProperties","dojoce","themes","parentNode","filter","Child","isWidget","__properties__","oldValue","getAttribute","observedAttributes","register","customElements","NAMESPACE_SVG","NAMESPACE_W3","NAMESPACE_XLINK","emptyArray","widgetInstanceMap","__WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__","projectorStateMap","same","dnode1","dnode2","__WEBPACK_IMPORTED_MODULE_2__d__","instance","missingTransition","checkStyleValue","styleValue","updateEvent","currentValue","projectionOptions","previousValue","projectorInstance","eventMap","nodeMap","previousEvent","evt","addClasses","classNames","split","removeClasses","focusNode","propValue","deferredRenderCallbacks","focus","removeOrphanedEvents","onlyEvents","propName","isEvent","substr","updateAttribute","attrName","attrValue","namespace","setAttributeNS","removeAttribute","setAttribute","updateAttributes","previousAttributes","attrNames","attrCount","updateProperties","includesEventsAndAttributes","propertiesUpdated","propNames","propCount","previousClasses","currentClasses","newClasses","previousClassName","classIndex","styleNames","styleCount","j","styleName","newStyleValue","styleApplyer","domValue","lastIndexOf","findIndexOfChild","sameAs","start","toInternalWNode","rendered","filterAndDecorateChildren","nodeAdded","dnode","nodeToRemove","pointerEvents","removeDomNode","removeChild","checkDistinguishable","indexToCheck","parentInstance","nodeIdentifier","parentName","updateChildren","parentVNode","oldChildren","newChildren","oldChildrenLength","newChildrenLength","depth","oldIndex","newIndex","textUpdated","oldChild","newChild","inserted","addDeferredProperties","updateDom","findOldIndex","addChild","insertBeforeDomNode","nextIndex","insertBeforeChildren","insertBefore","createDom","afterRenderCallbacks","childToRemove","addChildren","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__","domElement","toUpperCase","initPropertiesAndChildren","parentInstanceData","__WEBPACK_IMPORTED_MODULE_3__Registry__","renderQueue","scheduleRender","__render__","filteredRendered","addRoot","mergeElement","ownerDocument","createElementNS","appendChild","newDomNode","createTextNode","replaceChild","previous","previousRendered","updated","current","buildPreviousProperties","updateAnimation","vnode","decoratedDeferredProperties","runDeferredRenderCallbacks","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__","runAfterRenderCallbacks","requestIdleCallback","setTimeout","renderScheduled","renders","sort","a","b","previouslyRendered","dom","finalProjectorOptions","projectorOptions","defaults","getProjectionOptions","rootNode","projection","widgetFactory","registerCustomElement","defaultExport","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","nextTick","title","browser","env","argv","version","addListener","once","off","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","t","desc","r","Reflect","decorate","metadataKey","metadataValue","metadata","setPrototypeOf","g","eval","MenuItem","__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__","__WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__","onSelected","selected","__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__","__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__","onclick","_onClick","__WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__"," _key"],"mappings":"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","file":"menu-item-1.0.0.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 569730b4d721e461702a","import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/Destroyable.mjs\n// module id = ./node_modules/@dojo/core/Destroyable.mjs\n// module chunks = menu-item","import Map from '@dojo/shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n methods.forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/Evented.mjs\n// module id = ./node_modules/@dojo/core/Evented.mjs\n// module chunks = menu-item","import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/lang.mjs\n// module id = ./node_modules/@dojo/core/lang.mjs\n// module chunks = menu-item","function isFeatureTestThenable(value) {\r\n return value && value.then;\r\n}\r\n/**\r\n * A cache of results of feature tests\r\n */\r\nexport const testCache = {};\r\n/**\r\n * A cache of the un-resolved feature tests\r\n */\r\nexport const testFunctions = {};\r\n/**\r\n * A cache of unresolved thenables (probably promises)\r\n * @type {{}}\r\n */\r\nconst testThenables = {};\r\n/**\r\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\r\n */\r\nconst globalScope = (function () {\r\n /* istanbul ignore else */\r\n if (typeof window !== 'undefined') {\r\n // Browsers\r\n return window;\r\n }\r\n else if (typeof global !== 'undefined') {\r\n // Node\r\n return global;\r\n }\r\n else if (typeof self !== 'undefined') {\r\n // Web workers\r\n return self;\r\n }\r\n /* istanbul ignore next */\r\n return {};\r\n})();\r\n/* Grab the staticFeatures if there are available */\r\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\r\n/* Cleaning up the DojoHasEnviornment */\r\nif ('DojoHasEnvironment' in globalScope) {\r\n delete globalScope.DojoHasEnvironment;\r\n}\r\n/**\r\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\r\n * returns a map.\r\n *\r\n * @param value The value to guard for\r\n */\r\nfunction isStaticFeatureFunction(value) {\r\n return typeof value === 'function';\r\n}\r\n/**\r\n * The cache of asserted features that were available in the global scope when the\r\n * module loaded\r\n */\r\nconst staticCache = staticFeatures\r\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\r\n : {}; /* Providing an empty cache, if none was in the environment\r\n\r\n/**\r\n* AMD plugin function.\r\n*\r\n* Conditional loads modules based on a has feature test value.\r\n*\r\n* @param resourceId Gives the resolved module id to load.\r\n* @param require The loader require function with respect to the module that contained the plugin resource in its\r\n* dependency list.\r\n* @param load Callback to loader that consumes result of plugin demand.\r\n*/\r\nexport function load(resourceId, require, load, config) {\r\n resourceId ? require([resourceId], load) : load();\r\n}\r\n/**\r\n * AMD plugin function.\r\n *\r\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\r\n * value(s).\r\n *\r\n * @param resourceId The id of the module\r\n * @param normalize Resolves a relative module id into an absolute module id\r\n */\r\nexport function normalize(resourceId, normalize) {\r\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\r\n let i = 0;\r\n function get(skip) {\r\n const term = tokens[i++];\r\n if (term === ':') {\r\n // empty string module name, resolves to null\r\n return null;\r\n }\r\n else {\r\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\r\n if (tokens[i++] === '?') {\r\n if (!skip && has(term)) {\r\n // matched the feature, get the first value from the options\r\n return get();\r\n }\r\n else {\r\n // did not match, get the second value, passing over the first\r\n get(true);\r\n return get(skip);\r\n }\r\n }\r\n // a module\r\n return term;\r\n }\r\n }\r\n const id = get();\r\n return id && normalize(id);\r\n}\r\n/**\r\n * Check if a feature has already been registered\r\n *\r\n * @param feature the name of the feature\r\n */\r\nexport function exists(feature) {\r\n const normalizedFeature = feature.toLowerCase();\r\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\r\n}\r\n/**\r\n * Register a new test for a named feature.\r\n *\r\n * @example\r\n * has.add('dom-addeventlistener', !!document.addEventListener);\r\n *\r\n * @example\r\n * has.add('touch-events', function () {\r\n * return 'ontouchstart' in document\r\n * });\r\n *\r\n * @param feature the name of the feature\r\n * @param value the value reported of the feature, or a function that will be executed once on first test\r\n * @param overwrite if an existing value should be overwritten. Defaults to false.\r\n */\r\nexport function add(feature, value, overwrite = false) {\r\n const normalizedFeature = feature.toLowerCase();\r\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\r\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\r\n }\r\n if (typeof value === 'function') {\r\n testFunctions[normalizedFeature] = value;\r\n }\r\n else if (isFeatureTestThenable(value)) {\r\n testThenables[feature] = value.then((resolvedValue) => {\r\n testCache[feature] = resolvedValue;\r\n delete testThenables[feature];\r\n }, () => {\r\n delete testThenables[feature];\r\n });\r\n }\r\n else {\r\n testCache[normalizedFeature] = value;\r\n delete testFunctions[normalizedFeature];\r\n }\r\n}\r\n/**\r\n * Return the current value of a named feature.\r\n *\r\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\r\n */\r\nexport default function has(feature) {\r\n let result;\r\n const normalizedFeature = feature.toLowerCase();\r\n if (normalizedFeature in staticCache) {\r\n result = staticCache[normalizedFeature];\r\n }\r\n else if (testFunctions[normalizedFeature]) {\r\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\r\n delete testFunctions[normalizedFeature];\r\n }\r\n else if (normalizedFeature in testCache) {\r\n result = testCache[normalizedFeature];\r\n }\r\n else if (feature in testThenables) {\r\n return false;\r\n }\r\n else {\r\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\r\n }\r\n return result;\r\n}\r\n/*\r\n * Out of the box feature tests\r\n */\r\n/* Environments */\r\n/* Used as a value to provide a debug only code path */\r\nadd('debug', true);\r\n/* Detects if the environment is \"browser like\" */\r\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\r\n/* Detects if the environment appears to be NodeJS */\r\nadd('host-node', function () {\r\n if (typeof process === 'object' && process.versions && process.versions.node) {\r\n return process.versions.node;\r\n }\r\n});\r\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/has/has.mjs\n// module id = ./node_modules/@dojo/has/has.mjs\n// module chunks = menu-item","import { isArrayLike, ShimIterator } from './iterator';\r\nimport global from './global';\r\nimport { is as objectIs } from './object';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let Map = global.Map;\r\nif (!true) {\r\n Map = (_a = class Map {\r\n constructor(iterable) {\r\n this._keys = [];\r\n this._values = [];\r\n this[Symbol.toStringTag] = 'Map';\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const value = iterable[i];\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n else {\r\n for (const value of iterable) {\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * An alternative to Array.prototype.indexOf using Object.is\r\n * to check for equality. See http://mzl.la/1zuKO2V\r\n */\r\n _indexOfKey(keys, key) {\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n if (objectIs(keys[i], key)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n get size() {\r\n return this._keys.length;\r\n }\r\n clear() {\r\n this._keys.length = this._values.length = 0;\r\n }\r\n delete(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._keys.splice(index, 1);\r\n this._values.splice(index, 1);\r\n return true;\r\n }\r\n entries() {\r\n const values = this._keys.map((key, i) => {\r\n return [key, this._values[i]];\r\n });\r\n return new ShimIterator(values);\r\n }\r\n forEach(callback, context) {\r\n const keys = this._keys;\r\n const values = this._values;\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n callback.call(context, values[i], keys[i], this);\r\n }\r\n }\r\n get(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n return index < 0 ? undefined : this._values[index];\r\n }\r\n has(key) {\r\n return this._indexOfKey(this._keys, key) > -1;\r\n }\r\n keys() {\r\n return new ShimIterator(this._keys);\r\n }\r\n set(key, value) {\r\n let index = this._indexOfKey(this._keys, key);\r\n index = index < 0 ? this._keys.length : index;\r\n this._keys[index] = key;\r\n this._values[index] = value;\r\n return this;\r\n }\r\n values() {\r\n return new ShimIterator(this._values);\r\n }\r\n [Symbol.iterator]() {\r\n return this.entries();\r\n }\r\n },\r\n _a[Symbol.species] = _a,\r\n _a);\r\n}\r\nexport default Map;\r\nvar _a;\r\n//# sourceMappingURL=Map.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Map.mjs\n// module id = ./node_modules/@dojo/shim/Map.mjs\n// module chunks = menu-item","import global from './global';\r\nimport { queueMicroTask } from './support/queue';\r\nimport './Symbol';\r\nimport has from './support/has';\r\nexport let ShimPromise = global.Promise;\r\nexport const isThenable = function isThenable(value) {\r\n return value && typeof value.then === 'function';\r\n};\r\nif (!true) {\r\n global.Promise = ShimPromise = (_a = class Promise {\r\n /**\r\n * Creates a new Promise.\r\n *\r\n * @constructor\r\n *\r\n * @param executor\r\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\r\n * starting the asynchronous operation when it is invoked.\r\n *\r\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\r\n * successfully, or the `reject` function when the operation fails.\r\n */\r\n constructor(executor) {\r\n /**\r\n * The current state of this promise.\r\n */\r\n this.state = 1 /* Pending */;\r\n this[Symbol.toStringTag] = 'Promise';\r\n /**\r\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\r\n */\r\n let isChained = false;\r\n /**\r\n * Whether or not this promise is in a resolved state.\r\n */\r\n const isResolved = () => {\r\n return this.state !== 1 /* Pending */ || isChained;\r\n };\r\n /**\r\n * Callbacks that should be invoked once the asynchronous operation has completed.\r\n */\r\n let callbacks = [];\r\n /**\r\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\r\n * enqueues callbacks for execution on the next event loop turn.\r\n */\r\n let whenFinished = function (callback) {\r\n if (callbacks) {\r\n callbacks.push(callback);\r\n }\r\n };\r\n /**\r\n * Settles this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const settle = (newState, value) => {\r\n // A promise can only be settled once.\r\n if (this.state !== 1 /* Pending */) {\r\n return;\r\n }\r\n this.state = newState;\r\n this.resolvedValue = value;\r\n whenFinished = queueMicroTask;\r\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\r\n // wait an extra turn.\r\n if (callbacks && callbacks.length > 0) {\r\n queueMicroTask(function () {\r\n if (callbacks) {\r\n let count = callbacks.length;\r\n for (let i = 0; i < count; ++i) {\r\n callbacks[i].call(null);\r\n }\r\n callbacks = null;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Resolves this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const resolve = (newState, value) => {\r\n if (isResolved()) {\r\n return;\r\n }\r\n if (isThenable(value)) {\r\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\r\n isChained = true;\r\n }\r\n else {\r\n settle(newState, value);\r\n }\r\n };\r\n this.then = (onFulfilled, onRejected) => {\r\n return new Promise((resolve, reject) => {\r\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\r\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\r\n // event loop.\r\n whenFinished(() => {\r\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\r\n if (typeof callback === 'function') {\r\n try {\r\n resolve(callback(this.resolvedValue));\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n else if (this.state === 2 /* Rejected */) {\r\n reject(this.resolvedValue);\r\n }\r\n else {\r\n resolve(this.resolvedValue);\r\n }\r\n });\r\n });\r\n };\r\n try {\r\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\r\n }\r\n catch (error) {\r\n settle(2 /* Rejected */, error);\r\n }\r\n }\r\n static all(iterable) {\r\n return new this(function (resolve, reject) {\r\n const values = [];\r\n let complete = 0;\r\n let total = 0;\r\n let populating = true;\r\n function fulfill(index, value) {\r\n values[index] = value;\r\n ++complete;\r\n finish();\r\n }\r\n function finish() {\r\n if (populating || complete < total) {\r\n return;\r\n }\r\n resolve(values);\r\n }\r\n function processItem(index, item) {\r\n ++total;\r\n if (isThenable(item)) {\r\n // If an item Promise rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(fulfill.bind(null, index), reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(fulfill.bind(null, index));\r\n }\r\n }\r\n let i = 0;\r\n for (const value of iterable) {\r\n processItem(i, value);\r\n i++;\r\n }\r\n populating = false;\r\n finish();\r\n });\r\n }\r\n static race(iterable) {\r\n return new this(function (resolve, reject) {\r\n for (const item of iterable) {\r\n if (item instanceof Promise) {\r\n // If a Promise item rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(resolve, reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(resolve);\r\n }\r\n }\r\n });\r\n }\r\n static reject(reason) {\r\n return new this(function (resolve, reject) {\r\n reject(reason);\r\n });\r\n }\r\n static resolve(value) {\r\n return new this(function (resolve) {\r\n resolve(value);\r\n });\r\n }\r\n catch(onRejected) {\r\n return this.then(undefined, onRejected);\r\n }\r\n },\r\n _a[Symbol.species] = ShimPromise,\r\n _a);\r\n}\r\nexport default ShimPromise;\r\nvar _a;\r\n//# sourceMappingURL=Promise.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Promise.mjs\n// module id = ./node_modules/@dojo/shim/Promise.mjs\n// module chunks = menu-item","import has from './support/has';\r\nimport global from './global';\r\nimport { getValueDescriptor } from './support/util';\r\nexport let Symbol = global.Symbol;\r\nif (!true) {\r\n /**\r\n * Throws if the value is not a symbol, used internally within the Shim\r\n * @param {any} value The value to check\r\n * @return {symbol} Returns the symbol or throws\r\n */\r\n const validateSymbol = function validateSymbol(value) {\r\n if (!isSymbol(value)) {\r\n throw new TypeError(value + ' is not a symbol');\r\n }\r\n return value;\r\n };\r\n const defineProperties = Object.defineProperties;\r\n const defineProperty = Object.defineProperty;\r\n const create = Object.create;\r\n const objPrototype = Object.prototype;\r\n const globalSymbols = {};\r\n const getSymbolName = (function () {\r\n const created = create(null);\r\n return function (desc) {\r\n let postfix = 0;\r\n let name;\r\n while (created[String(desc) + (postfix || '')]) {\r\n ++postfix;\r\n }\r\n desc += String(postfix || '');\r\n created[desc] = true;\r\n name = '@@' + desc;\r\n // FIXME: Temporary guard until the duplicate execution when testing can be\r\n // pinned down.\r\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\r\n defineProperty(objPrototype, name, {\r\n set: function (value) {\r\n defineProperty(this, name, getValueDescriptor(value));\r\n }\r\n });\r\n }\r\n return name;\r\n };\r\n })();\r\n const InternalSymbol = function Symbol(description) {\r\n if (this instanceof InternalSymbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n return Symbol(description);\r\n };\r\n Symbol = global.Symbol = function Symbol(description) {\r\n if (this instanceof Symbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n const sym = Object.create(InternalSymbol.prototype);\r\n description = description === undefined ? '' : String(description);\r\n return defineProperties(sym, {\r\n __description__: getValueDescriptor(description),\r\n __name__: getValueDescriptor(getSymbolName(description))\r\n });\r\n };\r\n /* Decorate the Symbol function with the appropriate properties */\r\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\r\n if (globalSymbols[key]) {\r\n return globalSymbols[key];\r\n }\r\n return (globalSymbols[key] = Symbol(String(key)));\r\n }));\r\n defineProperties(Symbol, {\r\n keyFor: getValueDescriptor(function (sym) {\r\n let key;\r\n validateSymbol(sym);\r\n for (key in globalSymbols) {\r\n if (globalSymbols[key] === sym) {\r\n return key;\r\n }\r\n }\r\n }),\r\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\r\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\r\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\r\n match: getValueDescriptor(Symbol.for('match'), false, false),\r\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\r\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\r\n search: getValueDescriptor(Symbol.for('search'), false, false),\r\n species: getValueDescriptor(Symbol.for('species'), false, false),\r\n split: getValueDescriptor(Symbol.for('split'), false, false),\r\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\r\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\r\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\r\n });\r\n /* Decorate the InternalSymbol object */\r\n defineProperties(InternalSymbol.prototype, {\r\n constructor: getValueDescriptor(Symbol),\r\n toString: getValueDescriptor(function () {\r\n return this.__name__;\r\n }, false, false)\r\n });\r\n /* Decorate the Symbol.prototype */\r\n defineProperties(Symbol.prototype, {\r\n toString: getValueDescriptor(function () {\r\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\r\n }),\r\n valueOf: getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n })\r\n });\r\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n }));\r\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\r\n}\r\n/**\r\n * A custom guard function that determines if an object is a symbol or not\r\n * @param {any} value The value to check to see if it is a symbol or not\r\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\r\n */\r\nexport function isSymbol(value) {\r\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\r\n}\r\n/**\r\n * Fill any missing well known symbols if the native Symbol is missing them\r\n */\r\n[\r\n 'hasInstance',\r\n 'isConcatSpreadable',\r\n 'iterator',\r\n 'species',\r\n 'replace',\r\n 'search',\r\n 'split',\r\n 'match',\r\n 'toPrimitive',\r\n 'toStringTag',\r\n 'unscopables',\r\n 'observable'\r\n].forEach((wellKnown) => {\r\n if (!Symbol[wellKnown]) {\r\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\r\n }\r\n});\r\nexport default Symbol;\r\n//# sourceMappingURL=Symbol.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Symbol.mjs\n// module id = ./node_modules/@dojo/shim/Symbol.mjs\n// module chunks = menu-item","import global from './global';\r\nimport { isArrayLike } from './iterator';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let WeakMap = global.WeakMap;\r\nif (!true) {\r\n const DELETED = {};\r\n const getUID = function getUID() {\r\n return Math.floor(Math.random() * 100000000);\r\n };\r\n const generateName = (function () {\r\n let startId = Math.floor(Date.now() % 100000000);\r\n return function generateName() {\r\n return '__wm' + getUID() + (startId++ + '__');\r\n };\r\n })();\r\n WeakMap = class WeakMap {\r\n constructor(iterable) {\r\n this[Symbol.toStringTag] = 'WeakMap';\r\n this._name = generateName();\r\n this._frozenEntries = [];\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const item = iterable[i];\r\n this.set(item[0], item[1]);\r\n }\r\n }\r\n else {\r\n for (const [key, value] of iterable) {\r\n this.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n _getFrozenEntryIndex(key) {\r\n for (let i = 0; i < this._frozenEntries.length; i++) {\r\n if (this._frozenEntries[i].key === key) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n delete(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n entry.value = DELETED;\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n this._frozenEntries.splice(frozenIndex, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n get(key) {\r\n if (key === undefined || key === null) {\r\n return undefined;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n return entry.value;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return this._frozenEntries[frozenIndex].value;\r\n }\r\n }\r\n has(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n set(key, value) {\r\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\r\n throw new TypeError('Invalid value used as weak map key');\r\n }\r\n let entry = key[this._name];\r\n if (!entry || entry.key !== key) {\r\n entry = Object.create(null, {\r\n key: { value: key }\r\n });\r\n if (Object.isFrozen(key)) {\r\n this._frozenEntries.push(entry);\r\n }\r\n else {\r\n Object.defineProperty(key, this._name, {\r\n value: entry\r\n });\r\n }\r\n }\r\n entry.value = value;\r\n return this;\r\n }\r\n };\r\n}\r\nexport default WeakMap;\r\n//# sourceMappingURL=WeakMap.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/WeakMap.mjs\n// module id = ./node_modules/@dojo/shim/WeakMap.mjs\n// module chunks = menu-item","import global from './global';\r\nimport { isArrayLike, isIterable } from './iterator';\r\nimport { MAX_SAFE_INTEGER } from './number';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\nexport let from;\r\n/**\r\n * Creates a new array from the function parameters.\r\n *\r\n * @param arguments Any number of arguments for the array\r\n * @return An array from the given arguments\r\n */\r\nexport let of;\r\n/* ES6 Array instance methods */\r\n/**\r\n * Copies data internally within an array or array-like object.\r\n *\r\n * @param target The target array-like object\r\n * @param offset The index to start copying values to; if negative, it counts backwards from length\r\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\r\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\r\n * @return The target\r\n */\r\nexport let copyWithin;\r\n/**\r\n * Fills elements of an array-like object with the specified value.\r\n *\r\n * @param target The target to fill\r\n * @param value The value to fill each element of the target with\r\n * @param start The first index to fill\r\n * @param end The (exclusive) index at which to stop filling\r\n * @return The filled target\r\n */\r\nexport let fill;\r\n/**\r\n * Finds and returns the first instance matching the callback or undefined if one is not found.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning if the current value matches a criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first element matching the callback, or undefined if one does not exist\r\n */\r\nexport let find;\r\n/**\r\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\r\n * or -1 if no values satisfy it.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning true if the current value satisfies its criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\r\n */\r\nexport let findIndex;\r\n/* ES7 Array instance methods */\r\n/**\r\n * Determines whether an array includes a given value\r\n *\r\n * @param target the target array-like object\r\n * @param searchElement the item to search for\r\n * @param fromIndex the starting index to search from\r\n * @return `true` if the array includes the element, otherwise `false`\r\n */\r\nexport let includes;\r\nif (true && true) {\r\n from = global.Array.from;\r\n of = global.Array.of;\r\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\r\n fill = wrapNative(global.Array.prototype.fill);\r\n find = wrapNative(global.Array.prototype.find);\r\n findIndex = wrapNative(global.Array.prototype.findIndex);\r\n}\r\nelse {\r\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\r\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n length = Number(length);\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n /**\r\n * From ES6 7.1.4 ToInteger()\r\n *\r\n * @param value A value to convert\r\n * @return An integer\r\n */\r\n const toInteger = function toInteger(value) {\r\n value = Number(value);\r\n if (isNaN(value)) {\r\n return 0;\r\n }\r\n if (value === 0 || !isFinite(value)) {\r\n return value;\r\n }\r\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\r\n };\r\n /**\r\n * Normalizes an offset against a given length, wrapping it if negative.\r\n *\r\n * @param value The original offset\r\n * @param length The total length to normalize against\r\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\r\n */\r\n const normalizeOffset = function normalizeOffset(value, length) {\r\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\r\n };\r\n from = function from(arrayLike, mapFunction, thisArg) {\r\n if (arrayLike == null) {\r\n throw new TypeError('from: requires an array-like object');\r\n }\r\n if (mapFunction && thisArg) {\r\n mapFunction = mapFunction.bind(thisArg);\r\n }\r\n /* tslint:disable-next-line:variable-name */\r\n const Constructor = this;\r\n const length = toLength(arrayLike.length);\r\n // Support extension\r\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\r\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\r\n return array;\r\n }\r\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\r\n // with the iteration on IE when using a NaN array length.\r\n if (isArrayLike(arrayLike)) {\r\n if (length === 0) {\r\n return [];\r\n }\r\n for (let i = 0; i < arrayLike.length; i++) {\r\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\r\n }\r\n }\r\n else {\r\n let i = 0;\r\n for (const value of arrayLike) {\r\n array[i] = mapFunction ? mapFunction(value, i) : value;\r\n i++;\r\n }\r\n }\r\n if (arrayLike.length !== undefined) {\r\n array.length = length;\r\n }\r\n return array;\r\n };\r\n of = function of(...items) {\r\n return Array.prototype.slice.call(items);\r\n };\r\n copyWithin = function copyWithin(target, offset, start, end) {\r\n if (target == null) {\r\n throw new TypeError('copyWithin: target must be an array-like object');\r\n }\r\n const length = toLength(target.length);\r\n offset = normalizeOffset(toInteger(offset), length);\r\n start = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n let count = Math.min(end - start, length - offset);\r\n let direction = 1;\r\n if (offset > start && offset < start + count) {\r\n direction = -1;\r\n start += count - 1;\r\n offset += count - 1;\r\n }\r\n while (count > 0) {\r\n if (start in target) {\r\n target[offset] = target[start];\r\n }\r\n else {\r\n delete target[offset];\r\n }\r\n offset += direction;\r\n start += direction;\r\n count--;\r\n }\r\n return target;\r\n };\r\n fill = function fill(target, value, start, end) {\r\n const length = toLength(target.length);\r\n let i = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n while (i < end) {\r\n target[i++] = value;\r\n }\r\n return target;\r\n };\r\n find = function find(target, callback, thisArg) {\r\n const index = findIndex(target, callback, thisArg);\r\n return index !== -1 ? target[index] : undefined;\r\n };\r\n findIndex = function findIndex(target, callback, thisArg) {\r\n const length = toLength(target.length);\r\n if (!callback) {\r\n throw new TypeError('find: second argument must be a function');\r\n }\r\n if (thisArg) {\r\n callback = callback.bind(thisArg);\r\n }\r\n for (let i = 0; i < length; i++) {\r\n if (callback(target[i], i, target)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\nif (true) {\r\n includes = wrapNative(global.Array.prototype.includes);\r\n}\r\nelse {\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n length = Number(length);\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n includes = function includes(target, searchElement, fromIndex = 0) {\r\n let len = toLength(target.length);\r\n for (let i = fromIndex; i < len; ++i) {\r\n const currentElement = target[i];\r\n if (searchElement === currentElement ||\r\n (searchElement !== searchElement && currentElement !== currentElement)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n//# sourceMappingURL=array.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/array.mjs\n// module id = ./node_modules/@dojo/shim/array.mjs\n// module chunks = menu-item","const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/global.mjs\n// module id = ./node_modules/@dojo/shim/global.mjs\n// module chunks = menu-item","import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/number.mjs\n// module id = ./node_modules/@dojo/shim/number.mjs\n// module chunks = menu-item","import global from './global';\r\nimport has from './support/has';\r\nimport { isSymbol } from './Symbol';\r\nexport let assign;\r\n/**\r\n * Gets the own property descriptor of the specified object.\r\n * An own property descriptor is one that is defined directly on the object and is not\r\n * inherited from the object's prototype.\r\n * @param o Object that contains the property.\r\n * @param p Name of the property.\r\n */\r\nexport let getOwnPropertyDescriptor;\r\n/**\r\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\r\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\r\n * @param o Object that contains the own properties.\r\n */\r\nexport let getOwnPropertyNames;\r\n/**\r\n * Returns an array of all symbol properties found directly on object o.\r\n * @param o Object to retrieve the symbols from.\r\n */\r\nexport let getOwnPropertySymbols;\r\n/**\r\n * Returns true if the values are the same value, false otherwise.\r\n * @param value1 The first value.\r\n * @param value2 The second value.\r\n */\r\nexport let is;\r\n/**\r\n * Returns the names of the enumerable properties and methods of an object.\r\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\r\n */\r\nexport let keys;\r\n/* ES7 Object static methods */\r\nexport let getOwnPropertyDescriptors;\r\nexport let entries;\r\nexport let values;\r\nif (true) {\r\n const globalObject = global.Object;\r\n assign = globalObject.assign;\r\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\r\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\r\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\r\n is = globalObject.is;\r\n keys = globalObject.keys;\r\n}\r\nelse {\r\n keys = function symbolAwareKeys(o) {\r\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n assign = function assign(target, ...sources) {\r\n if (target == null) {\r\n // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n const to = Object(target);\r\n sources.forEach((nextSource) => {\r\n if (nextSource) {\r\n // Skip over if undefined or null\r\n keys(nextSource).forEach((nextKey) => {\r\n to[nextKey] = nextSource[nextKey];\r\n });\r\n }\r\n });\r\n return to;\r\n };\r\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\r\n if (isSymbol(prop)) {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n else {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n };\r\n getOwnPropertyNames = function getOwnPropertyNames(o) {\r\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\r\n return Object.getOwnPropertyNames(o)\r\n .filter((key) => Boolean(key.match(/^@@.+/)))\r\n .map((key) => Symbol.for(key.substring(2)));\r\n };\r\n is = function is(value1, value2) {\r\n if (value1 === value2) {\r\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\r\n }\r\n return value1 !== value1 && value2 !== value2; // NaN\r\n };\r\n}\r\nif (true) {\r\n const globalObject = global.Object;\r\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\r\n entries = globalObject.entries;\r\n values = globalObject.values;\r\n}\r\nelse {\r\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\r\n return getOwnPropertyNames(o).reduce((previous, key) => {\r\n previous[key] = getOwnPropertyDescriptor(o, key);\r\n return previous;\r\n }, {});\r\n };\r\n entries = function entries(o) {\r\n return keys(o).map((key) => [key, o[key]]);\r\n };\r\n values = function values(o) {\r\n return keys(o).map((key) => o[key]);\r\n };\r\n}\r\n//# sourceMappingURL=object.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/object.mjs\n// module id = ./node_modules/@dojo/shim/object.mjs\n// module chunks = menu-item","import global from './global';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\n/**\r\n * The minimum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MIN = 0xd800;\r\n/**\r\n * The maximum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MAX = 0xdbff;\r\n/**\r\n * The minimum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MIN = 0xdc00;\r\n/**\r\n * The maximum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MAX = 0xdfff;\r\n/* ES6 static methods */\r\n/**\r\n * Return the String value whose elements are, in order, the elements in the List elements.\r\n * If length is 0, the empty string is returned.\r\n * @param codePoints The code points to generate the string\r\n */\r\nexport let fromCodePoint;\r\n/**\r\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\r\n * as such the first argument will be a well formed template call site object and the rest\r\n * parameter will contain the substitution values.\r\n * @param template A well-formed template string call site representation.\r\n * @param substitutions A set of substitution values.\r\n */\r\nexport let raw;\r\n/* ES6 instance methods */\r\n/**\r\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\r\n * value of the UTF-16 encoded code point starting at the string element at position pos in\r\n * the String resulting from converting this object to a String.\r\n * If there is no element at that position, the result is undefined.\r\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\r\n */\r\nexport let codePointAt;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * endPosition – length(this). Otherwise returns false.\r\n */\r\nexport let endsWith;\r\n/**\r\n * Returns true if searchString appears as a substring of the result of converting this\r\n * object to a String, at one or more positions that are\r\n * greater than or equal to position; otherwise, returns false.\r\n * @param target The target string\r\n * @param searchString search string\r\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\r\n */\r\nexport let includes;\r\n/**\r\n * Returns the String value result of normalizing the string into the normalization form\r\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\r\n * @param target The target string\r\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\r\n * is \"NFC\"\r\n */\r\nexport let normalize;\r\n/**\r\n * Returns a String value that is made from count copies appended together. If count is 0,\r\n * T is the empty String is returned.\r\n * @param count number of copies to append\r\n */\r\nexport let repeat;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * position. Otherwise returns false.\r\n */\r\nexport let startsWith;\r\n/* ES7 instance methods */\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the end (right) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padEnd;\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the start (left) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padStart;\r\nif (true && true) {\r\n fromCodePoint = global.String.fromCodePoint;\r\n raw = global.String.raw;\r\n codePointAt = wrapNative(global.String.prototype.codePointAt);\r\n endsWith = wrapNative(global.String.prototype.endsWith);\r\n includes = wrapNative(global.String.prototype.includes);\r\n normalize = wrapNative(global.String.prototype.normalize);\r\n repeat = wrapNative(global.String.prototype.repeat);\r\n startsWith = wrapNative(global.String.prototype.startsWith);\r\n}\r\nelse {\r\n /**\r\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\r\n * Used by startsWith, includes, and endsWith.\r\n *\r\n * @return Normalized position.\r\n */\r\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\r\n if (text == null) {\r\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\r\n }\r\n const length = text.length;\r\n position = position !== position ? (isEnd ? length : 0) : position;\r\n return [text, String(search), Math.min(Math.max(position, 0), length)];\r\n };\r\n fromCodePoint = function fromCodePoint(...codePoints) {\r\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\r\n const length = arguments.length;\r\n if (!length) {\r\n return '';\r\n }\r\n const fromCharCode = String.fromCharCode;\r\n const MAX_SIZE = 0x4000;\r\n let codeUnits = [];\r\n let index = -1;\r\n let result = '';\r\n while (++index < length) {\r\n let codePoint = Number(arguments[index]);\r\n // Code points must be finite integers within the valid range\r\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\r\n if (!isValid) {\r\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\r\n }\r\n if (codePoint <= 0xffff) {\r\n // BMP code point\r\n codeUnits.push(codePoint);\r\n }\r\n else {\r\n // Astral code point; split in surrogate halves\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n codePoint -= 0x10000;\r\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\r\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\r\n codeUnits.push(highSurrogate, lowSurrogate);\r\n }\r\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\r\n result += fromCharCode.apply(null, codeUnits);\r\n codeUnits.length = 0;\r\n }\r\n }\r\n return result;\r\n };\r\n raw = function raw(callSite, ...substitutions) {\r\n let rawStrings = callSite.raw;\r\n let result = '';\r\n let numSubstitutions = substitutions.length;\r\n if (callSite == null || callSite.raw == null) {\r\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\r\n }\r\n for (let i = 0, length = rawStrings.length; i < length; i++) {\r\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\r\n }\r\n return result;\r\n };\r\n codePointAt = function codePointAt(text, position = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\r\n if (text == null) {\r\n throw new TypeError('string.codePointAt requries a valid string.');\r\n }\r\n const length = text.length;\r\n if (position !== position) {\r\n position = 0;\r\n }\r\n if (position < 0 || position >= length) {\r\n return undefined;\r\n }\r\n // Get the first code unit\r\n const first = text.charCodeAt(position);\r\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\r\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n const second = text.charCodeAt(position + 1);\r\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\r\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\r\n }\r\n }\r\n return first;\r\n };\r\n endsWith = function endsWith(text, search, endPosition) {\r\n if (endPosition == null) {\r\n endPosition = text.length;\r\n }\r\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\r\n const start = endPosition - search.length;\r\n if (start < 0) {\r\n return false;\r\n }\r\n return text.slice(start, endPosition) === search;\r\n };\r\n includes = function includes(text, search, position = 0) {\r\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\r\n return text.indexOf(search, position) !== -1;\r\n };\r\n repeat = function repeat(text, count = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\r\n if (text == null) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (count !== count) {\r\n count = 0;\r\n }\r\n if (count < 0 || count === Infinity) {\r\n throw new RangeError('string.repeat requires a non-negative finite count.');\r\n }\r\n let result = '';\r\n while (count) {\r\n if (count % 2) {\r\n result += text;\r\n }\r\n if (count > 1) {\r\n text += text;\r\n }\r\n count >>= 1;\r\n }\r\n return result;\r\n };\r\n startsWith = function startsWith(text, search, position = 0) {\r\n search = String(search);\r\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\r\n const end = position + search.length;\r\n if (end > text.length) {\r\n return false;\r\n }\r\n return text.slice(position, end) === search;\r\n };\r\n}\r\nif (true) {\r\n padEnd = wrapNative(global.String.prototype.padEnd);\r\n padStart = wrapNative(global.String.prototype.padStart);\r\n}\r\nelse {\r\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padEnd requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText +=\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length);\r\n }\r\n return strText;\r\n };\r\n padStart = function padStart(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padStart requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText =\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length) +\r\n strText;\r\n }\r\n return strText;\r\n };\r\n}\r\n//# sourceMappingURL=string.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/string.mjs\n// module id = ./node_modules/@dojo/shim/string.mjs\n// module chunks = menu-item","import has, { add } from '@dojo/has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '@dojo/has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/has.mjs\n// module id = ./node_modules/@dojo/shim/support/has.mjs\n// module chunks = menu-item","import global from '../global';\r\nimport has from './has';\r\nfunction executeTask(item) {\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n}\r\nfunction getQueueHandle(item, destructor) {\r\n return {\r\n destroy: function () {\r\n this.destroy = function () { };\r\n item.isActive = false;\r\n item.callback = null;\r\n if (destructor) {\r\n destructor();\r\n }\r\n }\r\n };\r\n}\r\nlet checkMicroTaskQueue;\r\nlet microTasks;\r\n/**\r\n * Schedules a callback to the macrotask queue.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueTask = (function () {\r\n let destructor;\r\n let enqueue;\r\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\r\n if (true) {\r\n const queue = [];\r\n global.addEventListener('message', function (event) {\r\n // Confirm that the event was triggered by the current window and by this particular implementation.\r\n if (event.source === global && event.data === 'dojo-queue-message') {\r\n event.stopPropagation();\r\n if (queue.length) {\r\n executeTask(queue.shift());\r\n }\r\n }\r\n });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n global.postMessage('dojo-queue-message', '*');\r\n };\r\n }\r\n else if (false) {\r\n destructor = global.clearImmediate;\r\n enqueue = function (item) {\r\n return setImmediate(executeTask.bind(null, item));\r\n };\r\n }\r\n else {\r\n destructor = global.clearTimeout;\r\n enqueue = function (item) {\r\n return setTimeout(executeTask.bind(null, item), 0);\r\n };\r\n }\r\n function queueTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const id = enqueue(item);\r\n return getQueueHandle(item, destructor &&\r\n function () {\r\n destructor(id);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueTask(callback);\r\n };\r\n})();\r\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\r\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\r\nif (!true) {\r\n let isMicroTaskQueued = false;\r\n microTasks = [];\r\n checkMicroTaskQueue = function () {\r\n if (!isMicroTaskQueued) {\r\n isMicroTaskQueued = true;\r\n queueTask(function () {\r\n isMicroTaskQueued = false;\r\n if (microTasks.length) {\r\n let item;\r\n while ((item = microTasks.shift())) {\r\n executeTask(item);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n}\r\n/**\r\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\r\n *\r\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\r\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueAnimationTask = (function () {\r\n if (!true) {\r\n return queueTask;\r\n }\r\n function queueAnimationTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\r\n return getQueueHandle(item, function () {\r\n cancelAnimationFrame(rafId);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueAnimationTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueAnimationTask(callback);\r\n };\r\n})();\r\n/**\r\n * Schedules a callback to the microtask queue.\r\n *\r\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\r\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\r\n * registered with `queueTask` or `queueAnimationTask`.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport let queueMicroTask = (function () {\r\n let enqueue;\r\n if (false) {\r\n enqueue = function (item) {\r\n global.process.nextTick(executeTask.bind(null, item));\r\n };\r\n }\r\n else if (true) {\r\n enqueue = function (item) {\r\n global.Promise.resolve(item).then(executeTask);\r\n };\r\n }\r\n else if (true) {\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const node = document.createElement('div');\r\n const queue = [];\r\n const observer = new HostMutationObserver(function () {\r\n while (queue.length > 0) {\r\n const item = queue.shift();\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n }\r\n });\r\n observer.observe(node, { attributes: true });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n node.setAttribute('queueStatus', '1');\r\n };\r\n }\r\n else {\r\n enqueue = function (item) {\r\n checkMicroTaskQueue();\r\n microTasks.push(item);\r\n };\r\n }\r\n return function (callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n enqueue(item);\r\n return getQueueHandle(item);\r\n };\r\n})();\r\n//# sourceMappingURL=queue.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/queue.mjs\n// module id = ./node_modules/@dojo/shim/support/queue.mjs\n// module chunks = menu-item","/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/util.mjs\n// module id = ./node_modules/@dojo/shim/support/util.mjs\n// module chunks = menu-item","import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/Injector.mjs\n// module id = ./node_modules/@dojo/widget-core/Injector.mjs\n// module chunks = menu-item","import { Evented } from '@dojo/core/Evented';\r\nimport Map from '@dojo/shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/NodeHandler.mjs\n// module id = ./node_modules/@dojo/widget-core/NodeHandler.mjs\n// module chunks = menu-item","import Promise from '@dojo/shim/Promise';\r\nimport Map from '@dojo/shim/Map';\r\nimport Symbol from '@dojo/shim/Symbol';\r\nimport { Evented } from '@dojo/core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/Registry.mjs\n// module id = ./node_modules/@dojo/widget-core/Registry.mjs\n// module chunks = menu-item","import { Map } from '@dojo/shim/Map';\r\nimport { Evented } from '@dojo/core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/RegistryHandler.mjs\n// module id = ./node_modules/@dojo/widget-core/RegistryHandler.mjs\n// module chunks = menu-item","import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/WidgetBase.mjs\n// module id = ./node_modules/@dojo/widget-core/WidgetBase.mjs\n// module chunks = menu-item","let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/animations/cssTransitions.mjs\n// module id = ./node_modules/@dojo/widget-core/animations/cssTransitions.mjs\n// module chunks = menu-item","import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/d.mjs\n// module id = ./node_modules/@dojo/widget-core/d.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/afterRender.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/afterRender.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs\n// module chunks = menu-item","import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/customElement.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/customElement.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/diffProperty.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/diffProperty.mjs\n// module chunks = menu-item","/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs\n// module chunks = menu-item","import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/inject.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/inject.mjs\n// module chunks = menu-item","import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/diff.mjs\n// module id = ./node_modules/@dojo/widget-core/diff.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/mixins/Projector.mjs\n// module id = ./node_modules/@dojo/widget-core/mixins/Projector.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/mixins/Themed.mjs\n// module id = ./node_modules/@dojo/widget-core/mixins/Themed.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/registerCustomElement.mjs\n// module id = ./node_modules/@dojo/widget-core/registerCustomElement.mjs\n// module chunks = menu-item","import global from '@dojo/shim/global';\r\nimport { from as arrayFrom } from '@dojo/shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '@dojo/shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode.focus();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (propName === 'focus') {\r\n focusNode(propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const rendered = dnode.rendered || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\r\n oldIndex++;\r\n newIndex++;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let child = oldChildren[oldIndex];\r\n if (child) {\r\n let nextIndex = oldIndex + 1;\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n if (insertBefore.rendered) {\r\n insertBeforeChildren.push(...insertBefore.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\r\n insertBeforeChildren.push(oldChildren[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/vdom.mjs\n// module id = ./node_modules/@dojo/widget-core/vdom.mjs\n// module chunks = menu-item","/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module id = ./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module chunks = menu-item","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = ./node_modules/process/browser.js\n// module chunks = menu-item","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator];\r\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/tslib/tslib.es6.js\n// module id = ./node_modules/tslib/tslib.es6.js\n// module chunks = menu-item","var 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 || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = 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// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = ./node_modules/webpack/buildin/global.js\n// module chunks = menu-item","import { v } from '@dojo/widget-core/d';\r\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\r\nimport { WidgetProperties } from '@dojo/widget-core/interfaces';\r\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\r\n\r\nimport * as css from './menuItem.m.css';\r\n\r\nexport interface MenuItemProperties extends WidgetProperties {\r\n\ttitle: string;\r\n\tselected?: boolean;\r\n\tdata?: any;\r\n\tonSelected?: (data: any) => void;\r\n}\r\n\r\n@customElement({\r\n\ttag: 'demo-menu-item',\r\n\tattributes: ['title', 'selected'],\r\n\tevents: ['onSelected'],\r\n\tproperties: ['data', 'selected']\r\n})\r\n@theme(css)\r\nexport class MenuItem extends ThemedMixin(WidgetBase) {\r\n\tprivate _onClick() {\r\n\t\tthis.properties.onSelected && this.properties.onSelected(this.properties.data);\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\tconst { title, selected } = this.properties;\r\n\r\n\t\treturn v('li', { classes: this.theme(css.root) }, [\r\n\t\t\tv(\r\n\t\t\t\t'span',\r\n\t\t\t\t{\r\n\t\t\t\t\tclasses: this.theme([css.item, selected ? css.selected : null]),\r\n\t\t\t\t\tonclick: this._onClick\r\n\t\t\t\t},\r\n\t\t\t\t[title]\r\n\t\t\t)\r\n\t\t]);\r\n\t}\r\n}\r\n\r\nexport default MenuItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@dojo/webpack-contrib/css-module-dts-loader?type=ts&instanceName=0_menu-item!./src/menu-item/MenuItem.ts","// removed by extract-text-webpack-plugin\nmodule.exports = {\" _key\":\"test-app/menuItem\",\"root\":\"sUmUi4Sh\",\"item\":\"_2Mk6Rdqa\",\"selected\":\"_1-f3ItOh\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/menu-item/menuItem.m.css\n// module id = ./src/menu-item/menuItem.m.css\n// module chunks = menu-item"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap 0f998ebbc6b593fa2700","webpack:///./node_modules/@dojo/framework/core/Destroyable.mjs","webpack:///./node_modules/@dojo/framework/core/Evented.mjs","webpack:///./node_modules/@dojo/framework/core/lang.mjs","webpack:///./node_modules/@dojo/framework/has/has.mjs","webpack:///./node_modules/@dojo/framework/shim/Map.mjs","webpack:///./node_modules/@dojo/framework/shim/Promise.mjs","webpack:///./node_modules/@dojo/framework/shim/Symbol.mjs","webpack:///./node_modules/@dojo/framework/shim/WeakMap.mjs","webpack:///./node_modules/@dojo/framework/shim/array.mjs","webpack:///./node_modules/@dojo/framework/shim/global.mjs","webpack:///./node_modules/@dojo/framework/shim/number.mjs","webpack:///./node_modules/@dojo/framework/shim/object.mjs","webpack:///./node_modules/@dojo/framework/shim/string.mjs","webpack:///./node_modules/@dojo/framework/shim/support/has.mjs","webpack:///./node_modules/@dojo/framework/shim/support/queue.mjs","webpack:///./node_modules/@dojo/framework/shim/support/util.mjs","webpack:///./node_modules/@dojo/framework/widget-core/Injector.mjs","webpack:///./node_modules/@dojo/framework/widget-core/NodeHandler.mjs","webpack:///./node_modules/@dojo/framework/widget-core/Registry.mjs","webpack:///./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs","webpack:///./node_modules/@dojo/framework/widget-core/WidgetBase.mjs","webpack:///./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs","webpack:///./node_modules/@dojo/framework/widget-core/d.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/inject.mjs","webpack:///./node_modules/@dojo/framework/widget-core/diff.mjs","webpack:///./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs","webpack:///./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs","webpack:///./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs","webpack:///./node_modules/@dojo/framework/widget-core/vdom.mjs","webpack:///./node_modules/@dojo/cli-build-widget/template/custom-element.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/menu-item/MenuItem.ts","webpack:///./src/menu-item/menuItem.m.css?6a95"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","noop","__WEBPACK_IMPORTED_MODULE_1__shim_Promise__","resolve","destroyed","Error","Destroyable","[object Object]","this","handles","handle","Array","isArray","__WEBPACK_IMPORTED_MODULE_0__lang__","_handles","push","splice","indexOf","destroy","forEach","own","__webpack_exports__","regexMap","__WEBPACK_IMPORTED_MODULE_0__shim_Map__","Evented","__WEBPACK_IMPORTED_MODULE_1__Destroyable__","super","arguments","listenersMap","event","methods","type","globString","targetString","regex","has","RegExp","replace","set","test","isGlobMatch","method","listener","map","_addListener","listeners","destructor","called","createHandle","length","slice","testCache","testFunctions","testThenables","globalScope","window","global","self","staticFeatures","DojoHasEnvironment","staticCache","apply","add","feature","value","overwrite","normalizedFeature","toLowerCase","Boolean","exists","TypeError","then","isFeatureTestThenable","resolvedValue","result","document","location","process","versions","node","Map","__WEBPACK_IMPORTED_MODULE_1__global__","ShimPromise","__WEBPACK_IMPORTED_MODULE_0__global__","Promise","Symbol","wellKnown","__WEBPACK_IMPORTED_MODULE_2__support_util__","for","WeakMap","from","of","copyWithin","fill","find","findIndex","includes","__WEBPACK_IMPORTED_MODULE_4__support_util__","globalObject","Math","pow","assign","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","is","keys","getOwnPropertyDescriptors","entries","values","fromCodePoint","raw","codePointAt","endsWith","normalize","repeat","startsWith","padEnd","padStart","String","__WEBPACK_IMPORTED_MODULE_0__has_has__","every","key","Number","POSITIVE_INFINITY","e","imul","Observable","Set","getCallSite","callSite","substitutions","key1","key2","freeze","postMessage","requestAnimationFrame","setImmediate","MutationObserver","WebKitMutationObserver","example","createElement","observer","observe","attributes","style","setProperty","takeRecords","undefined","Animation","KeyframeEffect","executeTask","item","isActive","callback","getQueueHandle","enqueue","queue","addEventListener","source","data","stopPropagation","shift","queueTask","id","queueAnimationTask","rafId","bind","cancelAnimationFrame","writable","nativeFunction","target","args","Injector","__WEBPACK_IMPORTED_MODULE_0__core_Evented__","payload","_payload","invalidator","_invalidator","NodeEventType","_nodeMap","__WEBPACK_IMPORTED_MODULE_1__shim_Map__","element","emit","Widget","Projector","clear","WIDGET_BASE_TYPE","__WEBPACK_IMPORTED_MODULE_2__shim_Symbol__","isWidgetBaseConstructor","_type","Registry","__WEBPACK_IMPORTED_MODULE_3__core_Evented__","widgetLabel","action","label","_widgetRegistry","toString","__WEBPACK_IMPORTED_MODULE_0__shim_Promise__","widgetCtor","emitLoadedEvent","error","injectorFactory","_injectorRegistry","injectorItem","injector","promise","default","isWidgetConstructorDefaultExport","hasInjector","__WEBPACK_IMPORTED_MODULE_1__core_Evented__","_registry","__WEBPACK_IMPORTED_MODULE_2__Registry__","_registryWidgetLabelMap","_registryInjectorLabelMap","baseRegistry","delete","base","widget","define","defineInjector","globalPrecedence","_get","getFunctionName","labelMap","registries","registry","registeredLabels","on","decoratorMap","boundAuto","__WEBPACK_IMPORTED_MODULE_4__diff__","noBind","WidgetBase","_initialProperties","_changedPropertyKeys","_nodeHandler","__WEBPACK_IMPORTED_MODULE_6__NodeHandler__","_children","_decoratorCache","_properties","_boundRenderFunc","render","_boundInvalidate","invalidate","__WEBPACK_IMPORTED_MODULE_7__vdom__","dirty","onAttach","onDetach","nodeHandler","coreProperties","rendering","inputProperties","_runAfterConstructors","MetaType","_metaMap","cached","properties","changedPropertyKeys","instanceData","__WEBPACK_IMPORTED_MODULE_5__RegistryHandler__","originalProperties","_runBeforeProperties","registeredDiffPropertyNames","getDecorator","propertyNames","allProperties","checkedProperties","diffPropertyResults","runReactions","propertyName","previousProperty","newProperty","_bindFunctionProperty","diffFunctions","changed","executedReactions","reaction","propertyChanged","reactionRun","children","dNode","_runBeforeRenders","runAfterRenders","__WEBPACK_IMPORTED_MODULE_3__d__","decoratorKey","decoratorList","constructor","specificDecoratorList","decorators","allDecorators","instanceMap","unshift","getPrototypeOf","_buildDecoratorList","__WEBPACK_IMPORTED_MODULE_8__Registry__","_bindFunctionPropertyMap","__WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__","bindInfo","boundFunc","scope","beforeProperties","reduce","beforePropertiesFunction","beforeRenders","beforeRenderFunction","updatedRender","console","warn","afterRenders","afterRenderFunction","meta","afterRender","afterConstructors","afterConstructor","pop","browserSpecificTransitionEndEventName","browserSpecificAnimationEndEventName","initialize","determineBrowserStyleNames","runAndCleanUp","startAnimation","finishAnimation","finished","transitionEnd","removeEventListener","enter","enterAnimation","activeClass","enterAnimationActive","classList","remove","exit","exitAnimation","removeNode","exitAnimationActive","child","DOMVNODE","widgetConstructor","WNODE","tag","propertiesOrChildren","deferredPropertiesCallback","VNODE","attrs","props","diffType","isElementNode","tagName","events","domNode","text","__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__","isWNode","isVNode","__WEBPACK_IMPORTED_MODULE_0__handleDecorator__","propertyKey","addDecorator","alwaysRender","__WEBPACK_IMPORTED_MODULE_1__beforeProperties__","customElement","childType","__WEBPACK_IMPORTED_MODULE_0__registerCustomElement__","DOJO","registryFactory","__WEBPACK_IMPORTED_MODULE_1__Registry__","__customElementDescriptor","diffProperty","diffFunction","__WEBPACK_IMPORTED_MODULE_1__diff__","reactionFunction","handleDecorator","handler","descriptor","registeredInjectorsMap","__WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__","inject","getProperties","__WEBPACK_IMPORTED_MODULE_1__handleDecorator__","__WEBPACK_IMPORTED_MODULE_2__beforeProperties__","getInjector","registeredInjectors","__WEBPACK_IMPORTED_MODULE_0__Registry__","reference","ignore","isObjectOrArray","shallow","validOldProperty","validNewProperty","previousKeys","newKeys","some","ProjectorAttachState","AttachType","ProjectorMixin","Base","_root","body","_async","_projectorProperties","_projectionOptions","transitions","__WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__","root","projectorState","Detached","options","Append","_attach","Merge","Attached","async","doc","previousRoot","createDocumentFragment","__setChildren__","__setProperties__","__WEBPACK_IMPORTED_MODULE_1__core_lang__","__setCoreProperties__","_projection","childNodes","outerHTML","__WEBPACK_IMPORTED_MODULE_4__d__","_attachHandle","sync","__WEBPACK_IMPORTED_MODULE_5__vdom__","append","merge","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__","theme","__WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__","themeRegistry","themeInjector","__WEBPACK_IMPORTED_MODULE_1__Injector__","INJECTED_THEME_KEY","setInvalidator","THEME_KEY","ThemedMixin","Themed","_registeredBaseThemeKeys","_recalculateClasses","_theme","classes","_recalculateThemeClasses","className","_getThemeClass","extraClasses","themeClassName","_baseThemeClassesReverseLookup","resultClassNames","_registeredBaseTheme","join","baseThemes","finalBaseTheme","baseTheme","_a","currentClassNames","baseClass","themeKey","__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__","__WEBPACK_IMPORTED_MODULE_5__diff__","__WEBPACK_IMPORTED_MODULE_2__decorators_inject__","CustomElementChildType","DomToWidgetWrapper","__WEBPACK_IMPORTED_MODULE_1__WidgetBase__","__WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__","create","WidgetConstructor","attributeMap","attributeName","HTMLElement","_eventProperties","_initialised","domProperties","_attributesToProperties","filteredPropertyName","_getProperty","_setProperty","eventName","_getEventProperty","_setEventProperty","eventCallback","dispatchEvent","CustomEvent","bubbles","detail","defineProperties","TEXT","__WEBPACK_IMPORTED_MODULE_3__shim_array__","childNode","_render","_childConnected","widgetProperties","renderChildren","__children__","themeContext","__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__","_getTheme","__WEBPACK_IMPORTED_MODULE_5__shim_global__","__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__","_projector","setProperties","dojoce","themes","parentNode","filter","Child","isWidget","__properties__","oldValue","getAttribute","observedAttributes","register","customElements","NAMESPACE_SVG","NAMESPACE_W3","NAMESPACE_XLINK","emptyArray","nodeOperations","widgetInstanceMap","__WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__","nextSiblingMap","projectorStateMap","same","dnode1","dnode2","__WEBPACK_IMPORTED_MODULE_2__d__","instance","missingTransition","checkStyleValue","styleValue","updateEvent","currentValue","projectionOptions","previousValue","projectorInstance","eventMap","nodeMap","previousEvent","evt","addClasses","classNames","split","removeClasses","nodeOperation","propName","propValue","deferredRenderCallbacks","removeOrphanedEvents","previousProperties","onlyEvents","isEvent","substr","updateAttribute","attrName","attrValue","namespace","setAttributeNS","removeAttribute","setAttribute","updateAttributes","previousAttributes","attrNames","attrCount","updateProperties","includesEventsAndAttributes","propertiesUpdated","propNames","propCount","previousClasses","currentClasses","newClasses","previousClassName","classIndex","styleNames","styleCount","j","styleName","newStyleValue","styleApplyer","domValue","lastIndexOf","findIndexOfChild","sameAs","start","toInternalWNode","rendered","filterAndDecorateChildren","nodeAdded","dnode","nodeToRemove","pointerEvents","removeDomNode","removeChild","checkDistinguishable","indexToCheck","parentInstance","nodeIdentifier","parentName","updateChildren","parentVNode","siblings","oldChildren","newChildren","oldChildrenLength","newChildrenLength","depth","oldIndex","newIndex","textUpdated","oldChild","newChild","inserted","addDeferredProperties","updateDom","findOldIndex","addChild","insertBeforeDomNode","childrenArray","nextIndex","insertBeforeChildren","insertBefore","parentElement","createDom","afterRenderCallbacks","childToRemove","addChildren","__WEBPACK_IMPORTED_MODULE_1__shim_array__","nextSiblings","domElement","toUpperCase","initPropertiesAndChildren","parentInstanceData","__WEBPACK_IMPORTED_MODULE_3__Registry__","renderQueue","scheduleRender","__render__","filteredRendered","addRoot","mergeElement","ownerDocument","createElementNS","appendChild","newDomNode","createTextNode","replaceChild","previous","oldNextSiblings","previousRendered","updated","current","newProperties","buildPreviousProperties","updateAnimation","vnode","decoratedDeferredProperties","runDeferredRenderCallbacks","__WEBPACK_IMPORTED_MODULE_0__shim_global__","runAfterRenderCallbacks","requestIdleCallback","setTimeout","renderScheduled","renders","sort","a","b","previouslyRendered","dom","finalProjectorOptions","projectorOptions","defaults","getProjectionOptions","rootNode","projection","widgetFactory","registerCustomElement","defaultExport","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","nextTick","title","browser","env","argv","version","addListener","once","off","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","t","desc","r","Reflect","decorate","setPrototypeOf","g","Function","eval","MenuItem","__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__","__WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__","onSelected","selected","__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__","__WEBPACK_IMPORTED_MODULE_5__menuItem_m_css__","onclick","_onClick","__WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__"," _key"],"mappings":"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","file":"menu-item-1.0.0.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0f998ebbc6b593fa2700","import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/Destroyable.mjs\n// module id = ./node_modules/@dojo/framework/core/Destroyable.mjs\n// module chunks = menu-item","import Map from '../shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n [...methods].forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/Evented.mjs\n// module id = ./node_modules/@dojo/framework/core/Evented.mjs\n// module chunks = menu-item","import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/lang.mjs\n// module id = ./node_modules/@dojo/framework/core/lang.mjs\n// module chunks = menu-item","function isFeatureTestThenable(value) {\r\n return value && value.then;\r\n}\r\n/**\r\n * A cache of results of feature tests\r\n */\r\nexport const testCache = {};\r\n/**\r\n * A cache of the un-resolved feature tests\r\n */\r\nexport const testFunctions = {};\r\n/**\r\n * A cache of unresolved thenables (probably promises)\r\n * @type {{}}\r\n */\r\nconst testThenables = {};\r\n/**\r\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\r\n */\r\nconst globalScope = (function () {\r\n /* istanbul ignore else */\r\n if (typeof window !== 'undefined') {\r\n // Browsers\r\n return window;\r\n }\r\n else if (typeof global !== 'undefined') {\r\n // Node\r\n return global;\r\n }\r\n else if (typeof self !== 'undefined') {\r\n // Web workers\r\n return self;\r\n }\r\n /* istanbul ignore next */\r\n return {};\r\n})();\r\n/* Grab the staticFeatures if there are available */\r\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\r\n/* Cleaning up the DojoHasEnviornment */\r\nif ('DojoHasEnvironment' in globalScope) {\r\n delete globalScope.DojoHasEnvironment;\r\n}\r\n/**\r\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\r\n * returns a map.\r\n *\r\n * @param value The value to guard for\r\n */\r\nfunction isStaticFeatureFunction(value) {\r\n return typeof value === 'function';\r\n}\r\n/**\r\n * The cache of asserted features that were available in the global scope when the\r\n * module loaded\r\n */\r\nconst staticCache = staticFeatures\r\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\r\n : {}; /* Providing an empty cache, if none was in the environment\r\n\r\n/**\r\n* AMD plugin function.\r\n*\r\n* Conditional loads modules based on a has feature test value.\r\n*\r\n* @param resourceId Gives the resolved module id to load.\r\n* @param require The loader require function with respect to the module that contained the plugin resource in its\r\n* dependency list.\r\n* @param load Callback to loader that consumes result of plugin demand.\r\n*/\r\nexport function load(resourceId, require, load, config) {\r\n resourceId ? require([resourceId], load) : load();\r\n}\r\n/**\r\n * AMD plugin function.\r\n *\r\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\r\n * value(s).\r\n *\r\n * @param resourceId The id of the module\r\n * @param normalize Resolves a relative module id into an absolute module id\r\n */\r\nexport function normalize(resourceId, normalize) {\r\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\r\n let i = 0;\r\n function get(skip) {\r\n const term = tokens[i++];\r\n if (term === ':') {\r\n // empty string module name, resolves to null\r\n return null;\r\n }\r\n else {\r\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\r\n if (tokens[i++] === '?') {\r\n if (!skip && has(term)) {\r\n // matched the feature, get the first value from the options\r\n return get();\r\n }\r\n else {\r\n // did not match, get the second value, passing over the first\r\n get(true);\r\n return get(skip);\r\n }\r\n }\r\n // a module\r\n return term;\r\n }\r\n }\r\n const id = get();\r\n return id && normalize(id);\r\n}\r\n/**\r\n * Check if a feature has already been registered\r\n *\r\n * @param feature the name of the feature\r\n */\r\nexport function exists(feature) {\r\n const normalizedFeature = feature.toLowerCase();\r\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\r\n}\r\n/**\r\n * Register a new test for a named feature.\r\n *\r\n * @example\r\n * has.add('dom-addeventlistener', !!document.addEventListener);\r\n *\r\n * @example\r\n * has.add('touch-events', function () {\r\n * return 'ontouchstart' in document\r\n * });\r\n *\r\n * @param feature the name of the feature\r\n * @param value the value reported of the feature, or a function that will be executed once on first test\r\n * @param overwrite if an existing value should be overwritten. Defaults to false.\r\n */\r\nexport function add(feature, value, overwrite = false) {\r\n const normalizedFeature = feature.toLowerCase();\r\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\r\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\r\n }\r\n if (typeof value === 'function') {\r\n testFunctions[normalizedFeature] = value;\r\n }\r\n else if (isFeatureTestThenable(value)) {\r\n testThenables[feature] = value.then((resolvedValue) => {\r\n testCache[feature] = resolvedValue;\r\n delete testThenables[feature];\r\n }, () => {\r\n delete testThenables[feature];\r\n });\r\n }\r\n else {\r\n testCache[normalizedFeature] = value;\r\n delete testFunctions[normalizedFeature];\r\n }\r\n}\r\n/**\r\n * Return the current value of a named feature.\r\n *\r\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\r\n */\r\nexport default function has(feature) {\r\n let result;\r\n const normalizedFeature = feature.toLowerCase();\r\n if (normalizedFeature in staticCache) {\r\n result = staticCache[normalizedFeature];\r\n }\r\n else if (testFunctions[normalizedFeature]) {\r\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\r\n delete testFunctions[normalizedFeature];\r\n }\r\n else if (normalizedFeature in testCache) {\r\n result = testCache[normalizedFeature];\r\n }\r\n else if (feature in testThenables) {\r\n return false;\r\n }\r\n else {\r\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\r\n }\r\n return result;\r\n}\r\n/*\r\n * Out of the box feature tests\r\n */\r\n/* Environments */\r\n/* Used as a value to provide a debug only code path */\r\nadd('debug', true);\r\n/* Detects if the environment is \"browser like\" */\r\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\r\n/* Detects if the environment appears to be NodeJS */\r\nadd('host-node', function () {\r\n if (typeof process === 'object' && process.versions && process.versions.node) {\r\n return process.versions.node;\r\n }\r\n});\r\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/has/has.mjs\n// module id = ./node_modules/@dojo/framework/has/has.mjs\n// module chunks = menu-item","import { isArrayLike, ShimIterator } from './iterator';\r\nimport global from './global';\r\nimport { is as objectIs } from './object';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let Map = global.Map;\r\nif (!true) {\r\n Map = (_a = class Map {\r\n constructor(iterable) {\r\n this._keys = [];\r\n this._values = [];\r\n this[Symbol.toStringTag] = 'Map';\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const value = iterable[i];\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n else {\r\n for (const value of iterable) {\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * An alternative to Array.prototype.indexOf using Object.is\r\n * to check for equality. See http://mzl.la/1zuKO2V\r\n */\r\n _indexOfKey(keys, key) {\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n if (objectIs(keys[i], key)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n get size() {\r\n return this._keys.length;\r\n }\r\n clear() {\r\n this._keys.length = this._values.length = 0;\r\n }\r\n delete(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._keys.splice(index, 1);\r\n this._values.splice(index, 1);\r\n return true;\r\n }\r\n entries() {\r\n const values = this._keys.map((key, i) => {\r\n return [key, this._values[i]];\r\n });\r\n return new ShimIterator(values);\r\n }\r\n forEach(callback, context) {\r\n const keys = this._keys;\r\n const values = this._values;\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n callback.call(context, values[i], keys[i], this);\r\n }\r\n }\r\n get(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n return index < 0 ? undefined : this._values[index];\r\n }\r\n has(key) {\r\n return this._indexOfKey(this._keys, key) > -1;\r\n }\r\n keys() {\r\n return new ShimIterator(this._keys);\r\n }\r\n set(key, value) {\r\n let index = this._indexOfKey(this._keys, key);\r\n index = index < 0 ? this._keys.length : index;\r\n this._keys[index] = key;\r\n this._values[index] = value;\r\n return this;\r\n }\r\n values() {\r\n return new ShimIterator(this._values);\r\n }\r\n [Symbol.iterator]() {\r\n return this.entries();\r\n }\r\n },\r\n _a[Symbol.species] = _a,\r\n _a);\r\n}\r\nexport default Map;\r\nvar _a;\r\n//# sourceMappingURL=Map.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Map.mjs\n// module id = ./node_modules/@dojo/framework/shim/Map.mjs\n// module chunks = menu-item","import global from './global';\r\nimport { queueMicroTask } from './support/queue';\r\nimport './Symbol';\r\nimport has from './support/has';\r\nexport let ShimPromise = global.Promise;\r\nexport const isThenable = function isThenable(value) {\r\n return value && typeof value.then === 'function';\r\n};\r\nif (!true) {\r\n global.Promise = ShimPromise = (_a = class Promise {\r\n /**\r\n * Creates a new Promise.\r\n *\r\n * @constructor\r\n *\r\n * @param executor\r\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\r\n * starting the asynchronous operation when it is invoked.\r\n *\r\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\r\n * successfully, or the `reject` function when the operation fails.\r\n */\r\n constructor(executor) {\r\n /**\r\n * The current state of this promise.\r\n */\r\n this.state = 1 /* Pending */;\r\n this[Symbol.toStringTag] = 'Promise';\r\n /**\r\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\r\n */\r\n let isChained = false;\r\n /**\r\n * Whether or not this promise is in a resolved state.\r\n */\r\n const isResolved = () => {\r\n return this.state !== 1 /* Pending */ || isChained;\r\n };\r\n /**\r\n * Callbacks that should be invoked once the asynchronous operation has completed.\r\n */\r\n let callbacks = [];\r\n /**\r\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\r\n * enqueues callbacks for execution on the next event loop turn.\r\n */\r\n let whenFinished = function (callback) {\r\n if (callbacks) {\r\n callbacks.push(callback);\r\n }\r\n };\r\n /**\r\n * Settles this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const settle = (newState, value) => {\r\n // A promise can only be settled once.\r\n if (this.state !== 1 /* Pending */) {\r\n return;\r\n }\r\n this.state = newState;\r\n this.resolvedValue = value;\r\n whenFinished = queueMicroTask;\r\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\r\n // wait an extra turn.\r\n if (callbacks && callbacks.length > 0) {\r\n queueMicroTask(function () {\r\n if (callbacks) {\r\n let count = callbacks.length;\r\n for (let i = 0; i < count; ++i) {\r\n callbacks[i].call(null);\r\n }\r\n callbacks = null;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Resolves this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const resolve = (newState, value) => {\r\n if (isResolved()) {\r\n return;\r\n }\r\n if (isThenable(value)) {\r\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\r\n isChained = true;\r\n }\r\n else {\r\n settle(newState, value);\r\n }\r\n };\r\n this.then = (onFulfilled, onRejected) => {\r\n return new Promise((resolve, reject) => {\r\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\r\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\r\n // event loop.\r\n whenFinished(() => {\r\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\r\n if (typeof callback === 'function') {\r\n try {\r\n resolve(callback(this.resolvedValue));\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n else if (this.state === 2 /* Rejected */) {\r\n reject(this.resolvedValue);\r\n }\r\n else {\r\n resolve(this.resolvedValue);\r\n }\r\n });\r\n });\r\n };\r\n try {\r\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\r\n }\r\n catch (error) {\r\n settle(2 /* Rejected */, error);\r\n }\r\n }\r\n static all(iterable) {\r\n return new this(function (resolve, reject) {\r\n const values = [];\r\n let complete = 0;\r\n let total = 0;\r\n let populating = true;\r\n function fulfill(index, value) {\r\n values[index] = value;\r\n ++complete;\r\n finish();\r\n }\r\n function finish() {\r\n if (populating || complete < total) {\r\n return;\r\n }\r\n resolve(values);\r\n }\r\n function processItem(index, item) {\r\n ++total;\r\n if (isThenable(item)) {\r\n // If an item Promise rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(fulfill.bind(null, index), reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(fulfill.bind(null, index));\r\n }\r\n }\r\n let i = 0;\r\n for (const value of iterable) {\r\n processItem(i, value);\r\n i++;\r\n }\r\n populating = false;\r\n finish();\r\n });\r\n }\r\n static race(iterable) {\r\n return new this(function (resolve, reject) {\r\n for (const item of iterable) {\r\n if (item instanceof Promise) {\r\n // If a Promise item rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(resolve, reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(resolve);\r\n }\r\n }\r\n });\r\n }\r\n static reject(reason) {\r\n return new this(function (resolve, reject) {\r\n reject(reason);\r\n });\r\n }\r\n static resolve(value) {\r\n return new this(function (resolve) {\r\n resolve(value);\r\n });\r\n }\r\n catch(onRejected) {\r\n return this.then(undefined, onRejected);\r\n }\r\n },\r\n _a[Symbol.species] = ShimPromise,\r\n _a);\r\n}\r\nexport default ShimPromise;\r\nvar _a;\r\n//# sourceMappingURL=Promise.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Promise.mjs\n// module id = ./node_modules/@dojo/framework/shim/Promise.mjs\n// module chunks = menu-item","import has from './support/has';\r\nimport global from './global';\r\nimport { getValueDescriptor } from './support/util';\r\nexport let Symbol = global.Symbol;\r\nif (!true) {\r\n /**\r\n * Throws if the value is not a symbol, used internally within the Shim\r\n * @param {any} value The value to check\r\n * @return {symbol} Returns the symbol or throws\r\n */\r\n const validateSymbol = function validateSymbol(value) {\r\n if (!isSymbol(value)) {\r\n throw new TypeError(value + ' is not a symbol');\r\n }\r\n return value;\r\n };\r\n const defineProperties = Object.defineProperties;\r\n const defineProperty = Object.defineProperty;\r\n const create = Object.create;\r\n const objPrototype = Object.prototype;\r\n const globalSymbols = {};\r\n const getSymbolName = (function () {\r\n const created = create(null);\r\n return function (desc) {\r\n let postfix = 0;\r\n let name;\r\n while (created[String(desc) + (postfix || '')]) {\r\n ++postfix;\r\n }\r\n desc += String(postfix || '');\r\n created[desc] = true;\r\n name = '@@' + desc;\r\n // FIXME: Temporary guard until the duplicate execution when testing can be\r\n // pinned down.\r\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\r\n defineProperty(objPrototype, name, {\r\n set: function (value) {\r\n defineProperty(this, name, getValueDescriptor(value));\r\n }\r\n });\r\n }\r\n return name;\r\n };\r\n })();\r\n const InternalSymbol = function Symbol(description) {\r\n if (this instanceof InternalSymbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n return Symbol(description);\r\n };\r\n Symbol = global.Symbol = function Symbol(description) {\r\n if (this instanceof Symbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n const sym = Object.create(InternalSymbol.prototype);\r\n description = description === undefined ? '' : String(description);\r\n return defineProperties(sym, {\r\n __description__: getValueDescriptor(description),\r\n __name__: getValueDescriptor(getSymbolName(description))\r\n });\r\n };\r\n /* Decorate the Symbol function with the appropriate properties */\r\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\r\n if (globalSymbols[key]) {\r\n return globalSymbols[key];\r\n }\r\n return (globalSymbols[key] = Symbol(String(key)));\r\n }));\r\n defineProperties(Symbol, {\r\n keyFor: getValueDescriptor(function (sym) {\r\n let key;\r\n validateSymbol(sym);\r\n for (key in globalSymbols) {\r\n if (globalSymbols[key] === sym) {\r\n return key;\r\n }\r\n }\r\n }),\r\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\r\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\r\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\r\n match: getValueDescriptor(Symbol.for('match'), false, false),\r\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\r\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\r\n search: getValueDescriptor(Symbol.for('search'), false, false),\r\n species: getValueDescriptor(Symbol.for('species'), false, false),\r\n split: getValueDescriptor(Symbol.for('split'), false, false),\r\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\r\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\r\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\r\n });\r\n /* Decorate the InternalSymbol object */\r\n defineProperties(InternalSymbol.prototype, {\r\n constructor: getValueDescriptor(Symbol),\r\n toString: getValueDescriptor(function () {\r\n return this.__name__;\r\n }, false, false)\r\n });\r\n /* Decorate the Symbol.prototype */\r\n defineProperties(Symbol.prototype, {\r\n toString: getValueDescriptor(function () {\r\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\r\n }),\r\n valueOf: getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n })\r\n });\r\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n }));\r\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\r\n}\r\n/**\r\n * A custom guard function that determines if an object is a symbol or not\r\n * @param {any} value The value to check to see if it is a symbol or not\r\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\r\n */\r\nexport function isSymbol(value) {\r\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\r\n}\r\n/**\r\n * Fill any missing well known symbols if the native Symbol is missing them\r\n */\r\n[\r\n 'hasInstance',\r\n 'isConcatSpreadable',\r\n 'iterator',\r\n 'species',\r\n 'replace',\r\n 'search',\r\n 'split',\r\n 'match',\r\n 'toPrimitive',\r\n 'toStringTag',\r\n 'unscopables',\r\n 'observable'\r\n].forEach((wellKnown) => {\r\n if (!Symbol[wellKnown]) {\r\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\r\n }\r\n});\r\nexport default Symbol;\r\n//# sourceMappingURL=Symbol.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Symbol.mjs\n// module id = ./node_modules/@dojo/framework/shim/Symbol.mjs\n// module chunks = menu-item","import global from './global';\r\nimport { isArrayLike } from './iterator';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let WeakMap = global.WeakMap;\r\nif (!true) {\r\n const DELETED = {};\r\n const getUID = function getUID() {\r\n return Math.floor(Math.random() * 100000000);\r\n };\r\n const generateName = (function () {\r\n let startId = Math.floor(Date.now() % 100000000);\r\n return function generateName() {\r\n return '__wm' + getUID() + (startId++ + '__');\r\n };\r\n })();\r\n WeakMap = class WeakMap {\r\n constructor(iterable) {\r\n this[Symbol.toStringTag] = 'WeakMap';\r\n this._name = generateName();\r\n this._frozenEntries = [];\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const item = iterable[i];\r\n this.set(item[0], item[1]);\r\n }\r\n }\r\n else {\r\n for (const [key, value] of iterable) {\r\n this.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n _getFrozenEntryIndex(key) {\r\n for (let i = 0; i < this._frozenEntries.length; i++) {\r\n if (this._frozenEntries[i].key === key) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n delete(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n entry.value = DELETED;\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n this._frozenEntries.splice(frozenIndex, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n get(key) {\r\n if (key === undefined || key === null) {\r\n return undefined;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n return entry.value;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return this._frozenEntries[frozenIndex].value;\r\n }\r\n }\r\n has(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n set(key, value) {\r\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\r\n throw new TypeError('Invalid value used as weak map key');\r\n }\r\n let entry = key[this._name];\r\n if (!entry || entry.key !== key) {\r\n entry = Object.create(null, {\r\n key: { value: key }\r\n });\r\n if (Object.isFrozen(key)) {\r\n this._frozenEntries.push(entry);\r\n }\r\n else {\r\n Object.defineProperty(key, this._name, {\r\n value: entry\r\n });\r\n }\r\n }\r\n entry.value = value;\r\n return this;\r\n }\r\n };\r\n}\r\nexport default WeakMap;\r\n//# sourceMappingURL=WeakMap.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/WeakMap.mjs\n// module id = ./node_modules/@dojo/framework/shim/WeakMap.mjs\n// module chunks = menu-item","import global from './global';\r\nimport { isArrayLike, isIterable } from './iterator';\r\nimport { MAX_SAFE_INTEGER } from './number';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\nexport let from;\r\n/**\r\n * Creates a new array from the function parameters.\r\n *\r\n * @param arguments Any number of arguments for the array\r\n * @return An array from the given arguments\r\n */\r\nexport let of;\r\n/* ES6 Array instance methods */\r\n/**\r\n * Copies data internally within an array or array-like object.\r\n *\r\n * @param target The target array-like object\r\n * @param offset The index to start copying values to; if negative, it counts backwards from length\r\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\r\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\r\n * @return The target\r\n */\r\nexport let copyWithin;\r\n/**\r\n * Fills elements of an array-like object with the specified value.\r\n *\r\n * @param target The target to fill\r\n * @param value The value to fill each element of the target with\r\n * @param start The first index to fill\r\n * @param end The (exclusive) index at which to stop filling\r\n * @return The filled target\r\n */\r\nexport let fill;\r\n/**\r\n * Finds and returns the first instance matching the callback or undefined if one is not found.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning if the current value matches a criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first element matching the callback, or undefined if one does not exist\r\n */\r\nexport let find;\r\n/**\r\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\r\n * or -1 if no values satisfy it.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning true if the current value satisfies its criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\r\n */\r\nexport let findIndex;\r\n/* ES7 Array instance methods */\r\n/**\r\n * Determines whether an array includes a given value\r\n *\r\n * @param target the target array-like object\r\n * @param searchElement the item to search for\r\n * @param fromIndex the starting index to search from\r\n * @return `true` if the array includes the element, otherwise `false`\r\n */\r\nexport let includes;\r\nif (true && true) {\r\n from = global.Array.from;\r\n of = global.Array.of;\r\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\r\n fill = wrapNative(global.Array.prototype.fill);\r\n find = wrapNative(global.Array.prototype.find);\r\n findIndex = wrapNative(global.Array.prototype.findIndex);\r\n}\r\nelse {\r\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\r\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n length = Number(length);\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n /**\r\n * From ES6 7.1.4 ToInteger()\r\n *\r\n * @param value A value to convert\r\n * @return An integer\r\n */\r\n const toInteger = function toInteger(value) {\r\n value = Number(value);\r\n if (isNaN(value)) {\r\n return 0;\r\n }\r\n if (value === 0 || !isFinite(value)) {\r\n return value;\r\n }\r\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\r\n };\r\n /**\r\n * Normalizes an offset against a given length, wrapping it if negative.\r\n *\r\n * @param value The original offset\r\n * @param length The total length to normalize against\r\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\r\n */\r\n const normalizeOffset = function normalizeOffset(value, length) {\r\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\r\n };\r\n from = function from(arrayLike, mapFunction, thisArg) {\r\n if (arrayLike == null) {\r\n throw new TypeError('from: requires an array-like object');\r\n }\r\n if (mapFunction && thisArg) {\r\n mapFunction = mapFunction.bind(thisArg);\r\n }\r\n /* tslint:disable-next-line:variable-name */\r\n const Constructor = this;\r\n const length = toLength(arrayLike.length);\r\n // Support extension\r\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\r\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\r\n return array;\r\n }\r\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\r\n // with the iteration on IE when using a NaN array length.\r\n if (isArrayLike(arrayLike)) {\r\n if (length === 0) {\r\n return [];\r\n }\r\n for (let i = 0; i < arrayLike.length; i++) {\r\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\r\n }\r\n }\r\n else {\r\n let i = 0;\r\n for (const value of arrayLike) {\r\n array[i] = mapFunction ? mapFunction(value, i) : value;\r\n i++;\r\n }\r\n }\r\n if (arrayLike.length !== undefined) {\r\n array.length = length;\r\n }\r\n return array;\r\n };\r\n of = function of(...items) {\r\n return Array.prototype.slice.call(items);\r\n };\r\n copyWithin = function copyWithin(target, offset, start, end) {\r\n if (target == null) {\r\n throw new TypeError('copyWithin: target must be an array-like object');\r\n }\r\n const length = toLength(target.length);\r\n offset = normalizeOffset(toInteger(offset), length);\r\n start = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n let count = Math.min(end - start, length - offset);\r\n let direction = 1;\r\n if (offset > start && offset < start + count) {\r\n direction = -1;\r\n start += count - 1;\r\n offset += count - 1;\r\n }\r\n while (count > 0) {\r\n if (start in target) {\r\n target[offset] = target[start];\r\n }\r\n else {\r\n delete target[offset];\r\n }\r\n offset += direction;\r\n start += direction;\r\n count--;\r\n }\r\n return target;\r\n };\r\n fill = function fill(target, value, start, end) {\r\n const length = toLength(target.length);\r\n let i = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n while (i < end) {\r\n target[i++] = value;\r\n }\r\n return target;\r\n };\r\n find = function find(target, callback, thisArg) {\r\n const index = findIndex(target, callback, thisArg);\r\n return index !== -1 ? target[index] : undefined;\r\n };\r\n findIndex = function findIndex(target, callback, thisArg) {\r\n const length = toLength(target.length);\r\n if (!callback) {\r\n throw new TypeError('find: second argument must be a function');\r\n }\r\n if (thisArg) {\r\n callback = callback.bind(thisArg);\r\n }\r\n for (let i = 0; i < length; i++) {\r\n if (callback(target[i], i, target)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\nif (true) {\r\n includes = wrapNative(global.Array.prototype.includes);\r\n}\r\nelse {\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n length = Number(length);\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n includes = function includes(target, searchElement, fromIndex = 0) {\r\n let len = toLength(target.length);\r\n for (let i = fromIndex; i < len; ++i) {\r\n const currentElement = target[i];\r\n if (searchElement === currentElement ||\r\n (searchElement !== searchElement && currentElement !== currentElement)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n//# sourceMappingURL=array.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/array.mjs\n// module id = ./node_modules/@dojo/framework/shim/array.mjs\n// module chunks = menu-item","const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/global.mjs\n// module id = ./node_modules/@dojo/framework/shim/global.mjs\n// module chunks = menu-item","import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/number.mjs\n// module id = ./node_modules/@dojo/framework/shim/number.mjs\n// module chunks = menu-item","import global from './global';\r\nimport has from './support/has';\r\nimport { isSymbol } from './Symbol';\r\nexport let assign;\r\n/**\r\n * Gets the own property descriptor of the specified object.\r\n * An own property descriptor is one that is defined directly on the object and is not\r\n * inherited from the object's prototype.\r\n * @param o Object that contains the property.\r\n * @param p Name of the property.\r\n */\r\nexport let getOwnPropertyDescriptor;\r\n/**\r\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\r\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\r\n * @param o Object that contains the own properties.\r\n */\r\nexport let getOwnPropertyNames;\r\n/**\r\n * Returns an array of all symbol properties found directly on object o.\r\n * @param o Object to retrieve the symbols from.\r\n */\r\nexport let getOwnPropertySymbols;\r\n/**\r\n * Returns true if the values are the same value, false otherwise.\r\n * @param value1 The first value.\r\n * @param value2 The second value.\r\n */\r\nexport let is;\r\n/**\r\n * Returns the names of the enumerable properties and methods of an object.\r\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\r\n */\r\nexport let keys;\r\n/* ES7 Object static methods */\r\nexport let getOwnPropertyDescriptors;\r\nexport let entries;\r\nexport let values;\r\nif (true) {\r\n const globalObject = global.Object;\r\n assign = globalObject.assign;\r\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\r\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\r\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\r\n is = globalObject.is;\r\n keys = globalObject.keys;\r\n}\r\nelse {\r\n keys = function symbolAwareKeys(o) {\r\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n assign = function assign(target, ...sources) {\r\n if (target == null) {\r\n // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n const to = Object(target);\r\n sources.forEach((nextSource) => {\r\n if (nextSource) {\r\n // Skip over if undefined or null\r\n keys(nextSource).forEach((nextKey) => {\r\n to[nextKey] = nextSource[nextKey];\r\n });\r\n }\r\n });\r\n return to;\r\n };\r\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\r\n if (isSymbol(prop)) {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n else {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n };\r\n getOwnPropertyNames = function getOwnPropertyNames(o) {\r\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\r\n return Object.getOwnPropertyNames(o)\r\n .filter((key) => Boolean(key.match(/^@@.+/)))\r\n .map((key) => Symbol.for(key.substring(2)));\r\n };\r\n is = function is(value1, value2) {\r\n if (value1 === value2) {\r\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\r\n }\r\n return value1 !== value1 && value2 !== value2; // NaN\r\n };\r\n}\r\nif (true) {\r\n const globalObject = global.Object;\r\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\r\n entries = globalObject.entries;\r\n values = globalObject.values;\r\n}\r\nelse {\r\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\r\n return getOwnPropertyNames(o).reduce((previous, key) => {\r\n previous[key] = getOwnPropertyDescriptor(o, key);\r\n return previous;\r\n }, {});\r\n };\r\n entries = function entries(o) {\r\n return keys(o).map((key) => [key, o[key]]);\r\n };\r\n values = function values(o) {\r\n return keys(o).map((key) => o[key]);\r\n };\r\n}\r\n//# sourceMappingURL=object.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/object.mjs\n// module id = ./node_modules/@dojo/framework/shim/object.mjs\n// module chunks = menu-item","import global from './global';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\n/**\r\n * The minimum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MIN = 0xd800;\r\n/**\r\n * The maximum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MAX = 0xdbff;\r\n/**\r\n * The minimum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MIN = 0xdc00;\r\n/**\r\n * The maximum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MAX = 0xdfff;\r\n/* ES6 static methods */\r\n/**\r\n * Return the String value whose elements are, in order, the elements in the List elements.\r\n * If length is 0, the empty string is returned.\r\n * @param codePoints The code points to generate the string\r\n */\r\nexport let fromCodePoint;\r\n/**\r\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\r\n * as such the first argument will be a well formed template call site object and the rest\r\n * parameter will contain the substitution values.\r\n * @param template A well-formed template string call site representation.\r\n * @param substitutions A set of substitution values.\r\n */\r\nexport let raw;\r\n/* ES6 instance methods */\r\n/**\r\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\r\n * value of the UTF-16 encoded code point starting at the string element at position pos in\r\n * the String resulting from converting this object to a String.\r\n * If there is no element at that position, the result is undefined.\r\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\r\n */\r\nexport let codePointAt;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * endPosition – length(this). Otherwise returns false.\r\n */\r\nexport let endsWith;\r\n/**\r\n * Returns true if searchString appears as a substring of the result of converting this\r\n * object to a String, at one or more positions that are\r\n * greater than or equal to position; otherwise, returns false.\r\n * @param target The target string\r\n * @param searchString search string\r\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\r\n */\r\nexport let includes;\r\n/**\r\n * Returns the String value result of normalizing the string into the normalization form\r\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\r\n * @param target The target string\r\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\r\n * is \"NFC\"\r\n */\r\nexport let normalize;\r\n/**\r\n * Returns a String value that is made from count copies appended together. If count is 0,\r\n * T is the empty String is returned.\r\n * @param count number of copies to append\r\n */\r\nexport let repeat;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * position. Otherwise returns false.\r\n */\r\nexport let startsWith;\r\n/* ES7 instance methods */\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the end (right) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padEnd;\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the start (left) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padStart;\r\nif (true && true) {\r\n fromCodePoint = global.String.fromCodePoint;\r\n raw = global.String.raw;\r\n codePointAt = wrapNative(global.String.prototype.codePointAt);\r\n endsWith = wrapNative(global.String.prototype.endsWith);\r\n includes = wrapNative(global.String.prototype.includes);\r\n normalize = wrapNative(global.String.prototype.normalize);\r\n repeat = wrapNative(global.String.prototype.repeat);\r\n startsWith = wrapNative(global.String.prototype.startsWith);\r\n}\r\nelse {\r\n /**\r\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\r\n * Used by startsWith, includes, and endsWith.\r\n *\r\n * @return Normalized position.\r\n */\r\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\r\n if (text == null) {\r\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\r\n }\r\n const length = text.length;\r\n position = position !== position ? (isEnd ? length : 0) : position;\r\n return [text, String(search), Math.min(Math.max(position, 0), length)];\r\n };\r\n fromCodePoint = function fromCodePoint(...codePoints) {\r\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\r\n const length = arguments.length;\r\n if (!length) {\r\n return '';\r\n }\r\n const fromCharCode = String.fromCharCode;\r\n const MAX_SIZE = 0x4000;\r\n let codeUnits = [];\r\n let index = -1;\r\n let result = '';\r\n while (++index < length) {\r\n let codePoint = Number(arguments[index]);\r\n // Code points must be finite integers within the valid range\r\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\r\n if (!isValid) {\r\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\r\n }\r\n if (codePoint <= 0xffff) {\r\n // BMP code point\r\n codeUnits.push(codePoint);\r\n }\r\n else {\r\n // Astral code point; split in surrogate halves\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n codePoint -= 0x10000;\r\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\r\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\r\n codeUnits.push(highSurrogate, lowSurrogate);\r\n }\r\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\r\n result += fromCharCode.apply(null, codeUnits);\r\n codeUnits.length = 0;\r\n }\r\n }\r\n return result;\r\n };\r\n raw = function raw(callSite, ...substitutions) {\r\n let rawStrings = callSite.raw;\r\n let result = '';\r\n let numSubstitutions = substitutions.length;\r\n if (callSite == null || callSite.raw == null) {\r\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\r\n }\r\n for (let i = 0, length = rawStrings.length; i < length; i++) {\r\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\r\n }\r\n return result;\r\n };\r\n codePointAt = function codePointAt(text, position = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\r\n if (text == null) {\r\n throw new TypeError('string.codePointAt requries a valid string.');\r\n }\r\n const length = text.length;\r\n if (position !== position) {\r\n position = 0;\r\n }\r\n if (position < 0 || position >= length) {\r\n return undefined;\r\n }\r\n // Get the first code unit\r\n const first = text.charCodeAt(position);\r\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\r\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n const second = text.charCodeAt(position + 1);\r\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\r\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\r\n }\r\n }\r\n return first;\r\n };\r\n endsWith = function endsWith(text, search, endPosition) {\r\n if (endPosition == null) {\r\n endPosition = text.length;\r\n }\r\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\r\n const start = endPosition - search.length;\r\n if (start < 0) {\r\n return false;\r\n }\r\n return text.slice(start, endPosition) === search;\r\n };\r\n includes = function includes(text, search, position = 0) {\r\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\r\n return text.indexOf(search, position) !== -1;\r\n };\r\n repeat = function repeat(text, count = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\r\n if (text == null) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (count !== count) {\r\n count = 0;\r\n }\r\n if (count < 0 || count === Infinity) {\r\n throw new RangeError('string.repeat requires a non-negative finite count.');\r\n }\r\n let result = '';\r\n while (count) {\r\n if (count % 2) {\r\n result += text;\r\n }\r\n if (count > 1) {\r\n text += text;\r\n }\r\n count >>= 1;\r\n }\r\n return result;\r\n };\r\n startsWith = function startsWith(text, search, position = 0) {\r\n search = String(search);\r\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\r\n const end = position + search.length;\r\n if (end > text.length) {\r\n return false;\r\n }\r\n return text.slice(position, end) === search;\r\n };\r\n}\r\nif (true) {\r\n padEnd = wrapNative(global.String.prototype.padEnd);\r\n padStart = wrapNative(global.String.prototype.padStart);\r\n}\r\nelse {\r\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padEnd requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText +=\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length);\r\n }\r\n return strText;\r\n };\r\n padStart = function padStart(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padStart requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText =\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length) +\r\n strText;\r\n }\r\n return strText;\r\n };\r\n}\r\n//# sourceMappingURL=string.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/string.mjs\n// module id = ./node_modules/@dojo/framework/shim/string.mjs\n// module chunks = menu-item","import has, { add } from '../../has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '../../has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/has.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/has.mjs\n// module chunks = menu-item","import global from '../global';\r\nimport has from './has';\r\nfunction executeTask(item) {\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n}\r\nfunction getQueueHandle(item, destructor) {\r\n return {\r\n destroy: function () {\r\n this.destroy = function () { };\r\n item.isActive = false;\r\n item.callback = null;\r\n if (destructor) {\r\n destructor();\r\n }\r\n }\r\n };\r\n}\r\nlet checkMicroTaskQueue;\r\nlet microTasks;\r\n/**\r\n * Schedules a callback to the macrotask queue.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueTask = (function () {\r\n let destructor;\r\n let enqueue;\r\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\r\n if (true) {\r\n const queue = [];\r\n global.addEventListener('message', function (event) {\r\n // Confirm that the event was triggered by the current window and by this particular implementation.\r\n if (event.source === global && event.data === 'dojo-queue-message') {\r\n event.stopPropagation();\r\n if (queue.length) {\r\n executeTask(queue.shift());\r\n }\r\n }\r\n });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n global.postMessage('dojo-queue-message', '*');\r\n };\r\n }\r\n else if (false) {\r\n destructor = global.clearImmediate;\r\n enqueue = function (item) {\r\n return setImmediate(executeTask.bind(null, item));\r\n };\r\n }\r\n else {\r\n destructor = global.clearTimeout;\r\n enqueue = function (item) {\r\n return setTimeout(executeTask.bind(null, item), 0);\r\n };\r\n }\r\n function queueTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const id = enqueue(item);\r\n return getQueueHandle(item, destructor &&\r\n function () {\r\n destructor(id);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueTask(callback);\r\n };\r\n})();\r\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\r\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\r\nif (!true) {\r\n let isMicroTaskQueued = false;\r\n microTasks = [];\r\n checkMicroTaskQueue = function () {\r\n if (!isMicroTaskQueued) {\r\n isMicroTaskQueued = true;\r\n queueTask(function () {\r\n isMicroTaskQueued = false;\r\n if (microTasks.length) {\r\n let item;\r\n while ((item = microTasks.shift())) {\r\n executeTask(item);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n}\r\n/**\r\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\r\n *\r\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\r\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueAnimationTask = (function () {\r\n if (!true) {\r\n return queueTask;\r\n }\r\n function queueAnimationTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\r\n return getQueueHandle(item, function () {\r\n cancelAnimationFrame(rafId);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueAnimationTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueAnimationTask(callback);\r\n };\r\n})();\r\n/**\r\n * Schedules a callback to the microtask queue.\r\n *\r\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\r\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\r\n * registered with `queueTask` or `queueAnimationTask`.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport let queueMicroTask = (function () {\r\n let enqueue;\r\n if (false) {\r\n enqueue = function (item) {\r\n global.process.nextTick(executeTask.bind(null, item));\r\n };\r\n }\r\n else if (true) {\r\n enqueue = function (item) {\r\n global.Promise.resolve(item).then(executeTask);\r\n };\r\n }\r\n else if (true) {\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const node = document.createElement('div');\r\n const queue = [];\r\n const observer = new HostMutationObserver(function () {\r\n while (queue.length > 0) {\r\n const item = queue.shift();\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n }\r\n });\r\n observer.observe(node, { attributes: true });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n node.setAttribute('queueStatus', '1');\r\n };\r\n }\r\n else {\r\n enqueue = function (item) {\r\n checkMicroTaskQueue();\r\n microTasks.push(item);\r\n };\r\n }\r\n return function (callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n enqueue(item);\r\n return getQueueHandle(item);\r\n };\r\n})();\r\n//# sourceMappingURL=queue.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/queue.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/queue.mjs\n// module chunks = menu-item","/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/util.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/util.mjs\n// module chunks = menu-item","import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/Injector.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/Injector.mjs\n// module chunks = menu-item","import { Evented } from '../core/Evented';\r\nimport Map from '../shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/NodeHandler.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/NodeHandler.mjs\n// module chunks = menu-item","import Promise from '../shim/Promise';\r\nimport Map from '../shim/Map';\r\nimport Symbol from '../shim/Symbol';\r\nimport { Evented } from '../core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/Registry.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/Registry.mjs\n// module chunks = menu-item","import { Map } from '../shim/Map';\r\nimport { Evented } from '../core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs\n// module chunks = menu-item","import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/WidgetBase.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/WidgetBase.mjs\n// module chunks = menu-item","let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs\n// module chunks = menu-item","import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/d.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/d.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs\n// module chunks = menu-item","import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs\n// module chunks = menu-item","import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs\n// module chunks = menu-item","/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs\n// module chunks = menu-item","import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/inject.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/inject.mjs\n// module chunks = menu-item","import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/diff.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/diff.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs\n// module chunks = menu-item","import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs\n// module chunks = menu-item","import global from '../shim/global';\r\nimport { from as arrayFrom } from '../shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '../shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst nextSiblingMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode[propName]();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (nodeOperations.indexOf(propName) !== -1) {\r\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const item = instanceMap.get(dnode.instance);\r\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n oldIndex++;\r\n newIndex++;\r\n textUpdated =\r\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let childrenArray = oldChildren;\r\n let nextIndex = oldIndex + 1;\r\n let child = oldChildren[oldIndex];\r\n if (!child) {\r\n child = siblings[0];\r\n nextIndex = 1;\r\n childrenArray = siblings;\r\n }\r\n if (child) {\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n const item = instanceMap.get(insertBefore.instance);\r\n if (item && item.dnode.rendered) {\r\n insertBeforeChildren.push(...item.dnode.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\r\n break;\r\n }\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\r\n insertBeforeChildren.push(childrenArray[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n const nextSiblings = children.slice(i + 1);\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n nextSiblingMap.set(instance, nextSiblings);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n nextSiblingMap.set(instance, nextSiblings);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const nextSiblings = nextSiblingMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/vdom.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/vdom.mjs\n// module chunks = menu-item","/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module id = ./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module chunks = menu-item","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = ./node_modules/process/browser.js\n// module chunks = menu-item","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator];\r\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/tslib/tslib.es6.js\n// module id = ./node_modules/tslib/tslib.es6.js\n// module chunks = menu-item","var 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 || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = 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// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = ./node_modules/webpack/buildin/global.js\n// module chunks = menu-item","import { v } from '@dojo/framework/widget-core/d';\r\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\r\nimport { WidgetProperties } from '@dojo/framework/widget-core/interfaces';\r\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\r\n\r\nimport * as css from './menuItem.m.css';\r\n\r\nexport interface MenuItemProperties extends WidgetProperties {\r\n\ttitle: string;\r\n\tselected?: boolean;\r\n\tdata?: any;\r\n\tonSelected?: (data: any) => void;\r\n}\r\n\r\n@customElement({\r\n\ttag: 'demo-menu-item',\r\n\tattributes: ['title', 'selected'],\r\n\tevents: ['onSelected'],\r\n\tproperties: ['data', 'selected']\r\n})\r\n@theme(css)\r\nexport class MenuItem extends ThemedMixin(WidgetBase) {\r\n\tprivate _onClick() {\r\n\t\tthis.properties.onSelected && this.properties.onSelected(this.properties.data);\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\tconst { title, selected } = this.properties;\r\n\r\n\t\treturn v('li', { classes: this.theme(css.root) }, [\r\n\t\t\tv(\r\n\t\t\t\t'span',\r\n\t\t\t\t{\r\n\t\t\t\t\tclasses: this.theme([css.item, selected ? css.selected : null]),\r\n\t\t\t\t\tonclick: this._onClick\r\n\t\t\t\t},\r\n\t\t\t\t[title]\r\n\t\t\t)\r\n\t\t]);\r\n\t}\r\n}\r\n\r\nexport default MenuItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@dojo/webpack-contrib/css-module-dts-loader?type=ts&instanceName=0_menu-item!./src/menu-item/MenuItem.ts","// removed by extract-text-webpack-plugin\nmodule.exports = {\" _key\":\"test-app/menuItem\",\"root\":\"sUmUi4Sh\",\"item\":\"_2Mk6Rdqa\",\"selected\":\"_1-f3ItOh\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/menu-item/menuItem.m.css\n// module id = ./src/menu-item/menuItem.m.css\n// module chunks = menu-item"],"sourceRoot":""} \ No newline at end of file diff --git a/test-app/fixtures/windows/dist/menu/menu-1.0.0.js b/test-app/fixtures/windows/dist/menu/menu-1.0.0.js index 7d7e6dc..56bbb6d 100644 --- a/test-app/fixtures/windows/dist/menu/menu-1.0.0.js +++ b/test-app/fixtures/windows/dist/menu/menu-1.0.0.js @@ -6,7 +6,7 @@ * All rights reserved * */ -!function(e){var t={};function o(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,o),s.l=!0,s.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}({"./node_modules/@dojo/core/Destroyable.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/core/lang.mjs"),s=o("./node_modules/@dojo/shim/Promise.mjs");function n(){return s.a.resolve(!1)}function i(){throw new Error("Call made to destroyed method")}class d{constructor(){this.handles=[]}own(e){const t=Array.isArray(e)?Object(r.b)(...e):e,{handles:o}=this;return o.push(t),{destroy(){o.splice(o.indexOf(t)),t.destroy()}}}destroy(){return new s.a(e=>{this.handles.forEach(e=>{e&&e.destroy&&e.destroy()}),this.destroy=n,this.own=i,e(!0)})}}t.a=d},"./node_modules/@dojo/core/Evented.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/core/Destroyable.mjs");const n=new r.b;class i extends s.a{constructor(){super(...arguments),this.listenersMap=new r.b}emit(e){this.listenersMap.forEach((t,o)=>{(function(e,t){if("string"==typeof t&&"string"==typeof e&&-1!==e.indexOf("*")){let o;return n.has(e)?o=n.get(e):(o=new RegExp(`^${e.replace(/\*/g,".*")}$`),n.set(e,o)),o.test(t)}return e===t})(o,e.type)&&t.forEach(t=>{t.call(this,e)})})}on(e,t){if(Array.isArray(t)){const o=t.map(t=>this._addListener(e,t));return{destroy(){o.forEach(e=>e.destroy())}}}return this._addListener(e,t)}_addListener(e,t){const o=this.listenersMap.get(e)||[];return o.push(t),this.listenersMap.set(e,o),{destroy:()=>{const o=this.listenersMap.get(e)||[];o.splice(o.indexOf(t),1)}}}}t.a=i},"./node_modules/@dojo/core/lang.mjs":function(e,t,o){"use strict";t.b=function(...e){return function(e){let t=!1;return{destroy:function(){t||(t=!0,e())}}}(function(){for(let t=0;t{r[e]=t,delete n[e]},()=>{delete n[e]})}function u(e){let t;const o=e.toLowerCase();if(o in a)t=a[o];else if(s[o])t=r[o]=s[o].call(null),delete s[o];else{if(!(o in r)){if(e in n)return!1;throw new TypeError(`Attempt to detect unregistered has feature "${e}"`)}t=r[o]}return t}c("debug",!0),c("host-browser","undefined"!=typeof document&&"undefined"!=typeof location),c("host-node",function(){if("object"==typeof o&&o.versions&&o.versions.node)return o.versions.node})}).call(t,o("./node_modules/webpack/buildin/global.js"),o("./node_modules/process/browser.js"))},"./node_modules/@dojo/shim/Map.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});o("./node_modules/@dojo/shim/iterator.mjs");var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/object.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s=r.a.Map;t.b=s},"./node_modules/@dojo/shim/Promise.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/queue.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs"),o("./node_modules/@dojo/shim/support/has.mjs");let s=r.a.Promise;t.a=s},"./node_modules/@dojo/shim/Symbol.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/support/has.mjs");var r=o("./node_modules/@dojo/shim/global.mjs"),s=o("./node_modules/@dojo/shim/support/util.mjs");let n=r.a.Symbol;["hasInstance","isConcatSpreadable","iterator","species","replace","search","split","match","toPrimitive","toStringTag","unscopables","observable"].forEach(e=>{n[e]||Object.defineProperty(n,e,Object(s.a)(n.for(e),!1,!1))}),t.a=n},"./node_modules/@dojo/shim/WeakMap.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/iterator.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s=r.a.WeakMap;t.a=s},"./node_modules/@dojo/shim/array.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return n});var r=o("./node_modules/@dojo/shim/global.mjs"),s=(o("./node_modules/@dojo/shim/iterator.mjs"),o("./node_modules/@dojo/shim/number.mjs"),o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/support/util.mjs"));let n,i,d,a,c,u,l;n=r.a.Array.from,i=r.a.Array.of,d=Object(s.b)(r.a.Array.prototype.copyWithin),a=Object(s.b)(r.a.Array.prototype.fill),c=Object(s.b)(r.a.Array.prototype.find),u=Object(s.b)(r.a.Array.prototype.findIndex),l=Object(s.b)(r.a.Array.prototype.includes)},"./node_modules/@dojo/shim/global.mjs":function(e,t,o){"use strict";(function(e){const o=void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0;t.a=o}).call(t,o("./node_modules/webpack/buildin/global.js"))},"./node_modules/@dojo/shim/iterator.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/Symbol.mjs"),o("./node_modules/@dojo/shim/string.mjs")},"./node_modules/@dojo/shim/number.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/shim/global.mjs");Math.pow(2,53)},"./node_modules/@dojo/shim/object.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/Symbol.mjs");let s,n,i,d,a,c,u,l,h;{const e=r.a.Object;s=e.assign,n=e.getOwnPropertyDescriptor,i=e.getOwnPropertyNames,d=e.getOwnPropertySymbols,a=e.is,c=e.keys}{const e=r.a.Object;u=e.getOwnPropertyDescriptors,l=e.entries,h=e.values}},"./node_modules/@dojo/shim/string.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs"),s=(o("./node_modules/@dojo/shim/support/has.mjs"),o("./node_modules/@dojo/shim/support/util.mjs"));t.b=55296;t.a=56319;let n,i,d,a,c,u,l,h,p,m;n=r.a.String.fromCodePoint,i=r.a.String.raw,d=Object(s.b)(r.a.String.prototype.codePointAt),a=Object(s.b)(r.a.String.prototype.endsWith),c=Object(s.b)(r.a.String.prototype.includes),u=Object(s.b)(r.a.String.prototype.normalize),l=Object(s.b)(r.a.String.prototype.repeat),h=Object(s.b)(r.a.String.prototype.startsWith),p=Object(s.b)(r.a.String.prototype.padEnd),m=Object(s.b)(r.a.String.prototype.padStart)},"./node_modules/@dojo/shim/support/has.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/has/has.mjs"),s=o("./node_modules/@dojo/shim/global.mjs");r.b;Object(r.a)("es6-array",()=>["from","of"].every(e=>e in s.a.Array)&&["findIndex","find","copyWithin"].every(e=>e in s.a.Array.prototype),!0),Object(r.a)("es6-array-fill",()=>"fill"in s.a.Array.prototype&&1===[1].fill(9,Number.POSITIVE_INFINITY)[0],!0),Object(r.a)("es7-array",()=>"includes"in s.a.Array.prototype,!0),Object(r.a)("es6-map",()=>{if("function"==typeof s.a.Map)try{const e=new s.a.Map([[0,1]]);return e.has(0)&&"function"==typeof e.keys&&"function"==typeof e.values&&"function"==typeof e.entries}catch(e){return!1}return!1},!0),Object(r.a)("es6-math",()=>["clz32","sign","log10","log2","log1p","expm1","cosh","sinh","tanh","acosh","asinh","atanh","trunc","fround","cbrt","hypot"].every(e=>"function"==typeof s.a.Math[e]),!0),Object(r.a)("es6-math-imul",()=>"imul"in s.a.Math&&-5===Math.imul(4294967295,5),!0),Object(r.a)("es6-object",()=>["assign","is","getOwnPropertySymbols","setPrototypeOf"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es2017-object",()=>["values","entries","getOwnPropertyDescriptors"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es-observable",()=>void 0!==s.a.Observable,!0),Object(r.a)("es6-promise",()=>void 0!==s.a.Promise&&!0,!0),Object(r.a)("es6-set",()=>{if("function"==typeof s.a.Set){const e=new s.a.Set([1]);return e.has(1)&&"keys"in e&&"function"==typeof e.keys&&!0}return!1},!0),Object(r.a)("es6-string",()=>["fromCodePoint"].every(e=>"function"==typeof s.a.String[e])&&["codePointAt","normalize","repeat","startsWith","endsWith","includes"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-string-raw",()=>{function e(e,...t){const o=[...e];return o.raw=e.raw,o}if("raw"in s.a.String){let t=e`a\n${1}`;return t.raw=["a\\n"],"a:\\n"===s.a.String.raw(t,42)}return!1},!0),Object(r.a)("es2017-string",()=>["padStart","padEnd"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-symbol",()=>void 0!==s.a.Symbol&&"symbol"==typeof Symbol(),!0),Object(r.a)("es6-weakmap",()=>{if(void 0!==s.a.WeakMap){const e={},t={},o=new s.a.WeakMap([[e,1]]);return Object.freeze(e),1===o.get(e)&&o.set(t,2)===o&&!0}return!1},!0),Object(r.a)("microtasks",()=>!0,!0),Object(r.a)("postmessage",()=>void 0!==s.a.window&&"function"==typeof s.a.postMessage,!0),Object(r.a)("raf",()=>"function"==typeof s.a.requestAnimationFrame,!0),Object(r.a)("setimmediate",()=>void 0!==s.a.setImmediate,!0),Object(r.a)("dom-mutationobserver",()=>{if(Boolean(s.a.MutationObserver||s.a.WebKitMutationObserver)){const e=document.createElement("div"),t=new(s.a.MutationObserver||s.a.WebKitMutationObserver)(function(){});return t.observe(e,{attributes:!0}),e.style.setProperty("display","block"),Boolean(t.takeRecords().length)}return!1},!0),Object(r.a)("dom-webanimation",()=>void 0!==s.a.Animation&&void 0!==s.a.KeyframeEffect,!0)},"./node_modules/@dojo/shim/support/queue.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs");o("./node_modules/@dojo/shim/support/has.mjs");function s(e){e&&e.isActive&&e.callback&&e.callback()}function n(e,t){return{destroy:function(){this.destroy=function(){},e.isActive=!1,e.callback=null,t&&t()}}}!function(){let e,t;{const e=[];r.a.addEventListener("message",function(t){t.source===r.a&&"dojo-queue-message"===t.data&&(t.stopPropagation(),e.length&&s(e.shift()))}),t=function(t){e.push(t),r.a.postMessage("dojo-queue-message","*")}}function o(o){const r={isActive:!0,callback:o},s=t(r);return n(r,e&&function(){e(s)})}}();!function(){function e(e){const t={isActive:!0,callback:e},o=requestAnimationFrame(s.bind(null,t));return n(t,function(){cancelAnimationFrame(o)})}}();!function(){let e;e=function(e){r.a.Promise.resolve(e).then(s)}}()},"./node_modules/@dojo/shim/support/util.mjs":function(e,t,o){"use strict";t.a=function(e,t=!1,o=!0,r=!0){return{value:e,enumerable:t,writable:o,configurable:r}},t.b=function(e){return function(t,...o){return e.apply(t,o)}}},"./node_modules/@dojo/widget-core/Injector.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/core/Evented.mjs");class s extends r.a{constructor(e){super(),this._payload=e}setInvalidator(e){this._invalidator=e}get(){return this._payload}set(e){this._payload=e,this._invalidator&&this._invalidator()}}t.a=s},"./node_modules/@dojo/widget-core/NodeHandler.mjs":function(e,t,o){"use strict";var r,s=o("./node_modules/@dojo/core/Evented.mjs"),n=o("./node_modules/@dojo/shim/Map.mjs");!function(e){e.Projector="Projector",e.Widget="Widget"}(r||(r={}));t.a=class extends s.a{constructor(){super(...arguments),this._nodeMap=new n.b}get(e){return this._nodeMap.get(e)}has(e){return this._nodeMap.has(e)}add(e,t){this._nodeMap.set(t,e),this.emit({type:t})}addRoot(){this.emit({type:r.Widget})}addProjector(){this.emit({type:r.Projector})}clear(){this._nodeMap.clear()}}},"./node_modules/@dojo/widget-core/Registry.mjs":function(e,t,o){"use strict";t.d=a;var r=o("./node_modules/@dojo/shim/Promise.mjs"),s=o("./node_modules/@dojo/shim/Map.mjs"),n=o("./node_modules/@dojo/shim/Symbol.mjs"),i=o("./node_modules/@dojo/core/Evented.mjs");const d=Object(n.a)("Widget Base");function a(e){return Boolean(e&&e._type===d)}t.b=d;class c extends i.a{emitLoadedEvent(e,t){this.emit({type:e,action:"loaded",item:t})}define(e,t){if(void 0===this._widgetRegistry&&(this._widgetRegistry=new s.b),this._widgetRegistry.has(e))throw new Error(`widget has already been registered for '${e.toString()}'`);this._widgetRegistry.set(e,t),t instanceof r.a?t.then(t=>(this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}):a(t)&&this.emitLoadedEvent(e,t)}defineInjector(e,t){if(void 0===this._injectorRegistry&&(this._injectorRegistry=new s.b),this._injectorRegistry.has(e))throw new Error(`injector has already been registered for '${e.toString()}'`);const o=new i.a,r={injector:t(()=>o.emit({type:"invalidate"})),invalidator:o};this._injectorRegistry.set(e,r),this.emitLoadedEvent(e,r)}get(e){if(!this._widgetRegistry||!this.has(e))return null;const t=this._widgetRegistry.get(e);if(a(t))return t;if(t instanceof r.a)return null;const o=t();return this._widgetRegistry.set(e,o),o.then(t=>((function(e){return Boolean(e&&e.hasOwnProperty("__esModule")&&e.hasOwnProperty("default")&&a(e.default))})(t)&&(t=t.default),this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}),null}getInjector(e){return this._injectorRegistry&&this.hasInjector(e)?this._injectorRegistry.get(e):null}has(e){return Boolean(this._widgetRegistry&&this._widgetRegistry.has(e))}hasInjector(e){return Boolean(this._injectorRegistry&&this._injectorRegistry.has(e))}}t.a=c,t.c=c},"./node_modules/@dojo/widget-core/RegistryHandler.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/core/Evented.mjs"),n=o("./node_modules/@dojo/widget-core/Registry.mjs");t.a=class extends s.a{constructor(){super(),this._registry=new n.a,this._registryWidgetLabelMap=new r.a,this._registryInjectorLabelMap=new r.a,this.own(this._registry),this.own({destroy:()=>{this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry),this.baseRegistry=void 0)}})}set base(e){this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry)),this.baseRegistry=e}define(e,t){this._registry.define(e,t)}defineInjector(e,t){this._registry.defineInjector(e,t)}has(e){return this._registry.has(e)||Boolean(this.baseRegistry&&this.baseRegistry.has(e))}hasInjector(e){return this._registry.hasInjector(e)||Boolean(this.baseRegistry&&this.baseRegistry.hasInjector(e))}get(e,t=!1){return this._get(e,t,"get",this._registryWidgetLabelMap)}getInjector(e,t=!1){return this._get(e,t,"getInjector",this._registryInjectorLabelMap)}_get(e,t,o,r){const s=t?[this.baseRegistry,this._registry]:[this._registry,this.baseRegistry];for(let n=0;n{"loaded"===r.action&&this[o](e,t)===r.item&&this.emit({type:"invalidate"})});this.own(s),r.set(i,[...a,e])}}return null}}},"./node_modules/@dojo/widget-core/WidgetBase.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/Map.mjs"),s=o("./node_modules/@dojo/shim/WeakMap.mjs"),n=o("./node_modules/@dojo/shim/Symbol.mjs"),i=o("./node_modules/@dojo/widget-core/d.mjs"),d=o("./node_modules/@dojo/widget-core/diff.mjs"),a=o("./node_modules/@dojo/widget-core/RegistryHandler.mjs"),c=o("./node_modules/@dojo/widget-core/NodeHandler.mjs"),u=o("./node_modules/@dojo/widget-core/vdom.mjs"),l=o("./node_modules/@dojo/widget-core/Registry.mjs");const h=new r.b,p=d.a.bind(null),m=n.a.for("dojoNoBind");t.b=m;class f{constructor(){this._initialProperties=!0,this._changedPropertyKeys=[],this._nodeHandler=new c.a,this._handles=[],this._children=[],this._decoratorCache=new r.b,this._properties={},this._boundRenderFunc=this.render.bind(this),this._boundInvalidate=this.invalidate.bind(this),u.b.set(this,{dirty:!0,onAttach:()=>{this.onAttach()},onDetach:()=>{this.onDetach(),this.destroy()},nodeHandler:this._nodeHandler,registry:()=>this.registry,coreProperties:{},rendering:!1,inputProperties:{}}),this._runAfterConstructors()}meta(e){void 0===this._metaMap&&(this._metaMap=new r.b);let t=this._metaMap.get(e);return t||(t=new e({invalidate:this._boundInvalidate,nodeHandler:this._nodeHandler,bind:this}),this.own(t),this._metaMap.set(e,t)),t}onAttach(){}onDetach(){}get properties(){return this._properties}get changedPropertyKeys(){return[...this._changedPropertyKeys]}__setCoreProperties__(e){const{baseRegistry:t}=e,o=u.b.get(this);o.coreProperties.baseRegistry!==t&&(void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry.base=t,this.invalidate()),o.coreProperties=e}__setProperties__(e){const t=u.b.get(this);t.inputProperties=e;const o=this._runBeforeProperties(e),r=this.getDecorator("registeredDiffProperty"),s=[],n=Object.keys(o);if(!1===this._initialProperties||0!==r.length){const e=[...n,...Object.keys(this._properties)],i=[],d={};let a=!1;for(let n=0;n{e.changed&&t.call(this,e.previousProperties,e.newProperties)}),this._properties=d,this._changedPropertyKeys=s}else{this._initialProperties=!1;for(let e=0;e0&&this.invalidate()}get children(){return this._children}__setChildren__(e){(this._children.length>0||e.length>0)&&(this._children=e,this.invalidate())}__render__(){u.b.get(this).dirty=!1;let e=this._runBeforeRenders()();return e=this.runAfterRenders(e),this._nodeHandler.clear(),e}invalidate(){const e=u.b.get(this);e.invalidate&&e.invalidate()}render(){return Object(i.g)("div",{},this.children)}addDecorator(e,t){if(t=Array.isArray(t)?t:[t],this.hasOwnProperty("constructor")){let o=h.get(this.constructor);o||(o=new r.b,h.set(this.constructor,o));let s=o.get(e);s||(s=[],o.set(e,s)),s.push(...t)}else{const o=this.getDecorator(e);this._decoratorCache.set(e,[...o,...t])}}_buildDecoratorList(e){const t=[];let o=this.constructor;for(;o;){const r=h.get(o);if(r){const o=r.get(e);o&&t.unshift(...o)}o=Object.getPrototypeOf(o)}return t}getDecorator(e){let t=this._decoratorCache.get(e);return void 0!==t?t:(t=this._buildDecoratorList(e),this._decoratorCache.set(e,t),t)}_mapDiffPropertyReactions(e,t){return this.getDecorator("diffReaction").reduce((o,{reaction:r,propertyName:s})=>{let n=o.get(r);return void 0===n&&(n={previousProperties:{},newProperties:{},changed:!1}),n.previousProperties[s]=this._properties[s],n.newProperties[s]=e[s],-1!==t.indexOf(s)&&(n.changed=!0),o.set(r,n),o},new r.b)}_bindFunctionProperty(e,t){if("function"==typeof e&&!e[m]&&!1===Object(l.d)(e)){void 0===this._bindFunctionPropertyMap&&(this._bindFunctionPropertyMap=new s.a);const o=this._bindFunctionPropertyMap.get(e)||{};let{boundFunc:r,scope:n}=o;return void 0!==r&&n===t||(r=e.bind(t),this._bindFunctionPropertyMap.set(e,{boundFunc:r,scope:t})),r}return e}get registry(){return void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry}_runBeforeProperties(e){const t=this.getDecorator("beforeProperties");return t.length>0?t.reduce((e,t)=>Object.assign({},e,t.call(this,e)),Object.assign({},e)):e}_runBeforeRenders(){const e=this.getDecorator("beforeRender");return e.length>0?e.reduce((e,t)=>{const o=t.call(this,e,this._properties,this._children);return o||(console.warn("Render function not returned from beforeRender, using previous render"),e)},this._boundRenderFunc):this._boundRenderFunc}runAfterRenders(e){const t=this.getDecorator("afterRender");return t.length>0?t.reduce((e,t)=>t.call(this,e),e):(void 0!==this._metaMap&&this._metaMap.forEach(e=>{e.afterRender()}),e)}_runAfterConstructors(){const e=this.getDecorator("afterConstructor");e.length>0&&e.forEach(e=>e.call(this))}own(e){this._handles.push(e)}destroy(){for(;this._handles.length>0;){const e=this._handles.pop();e&&e.destroy()}}}t.a=f,f._type=l.b},"./node_modules/@dojo/widget-core/animations/cssTransitions.mjs":function(e,t,o){"use strict";let r="",s="";function n(e){""===s&&function(e){if("WebkitTransition"in e.style)r="webkitTransitionEnd",s="webkitAnimationEnd";else{if(!("transition"in e.style||"MozTransition"in e.style))throw new Error("Your browser is not supported");r="transitionend",s="animationend"}}(e)}function i(e,t,o){n(e);let i=!1,d=function(){i||(i=!0,e.removeEventListener(r,d),e.removeEventListener(s,d),o())};t(),e.addEventListener(s,d),e.addEventListener(r,d)}t.a={enter:function(e,t,o){const r=t.enterAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(r)})},()=>{e.classList.remove(o),e.classList.remove(r)})},exit:function(e,t,o,r){const s=t.exitAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(s)})},()=>{r()})}}},"./node_modules/@dojo/widget-core/d.mjs":function(e,t,o){"use strict";t.f=d,t.e=a,t.d=function(e){return Boolean(e&&"string"!=typeof e&&e.type===i)},t.h=function(e,t,o=[]){return{children:o,widgetConstructor:e,properties:t,type:s}},t.g=function(e,t={},o){let r,s=t;Array.isArray(t)&&(o=t,s={});"function"==typeof s&&(r=s,s={});return{tag:e,deferredPropertiesCallback:r,children:o,properties:s,type:n}},t.c=function({node:e,attrs:t={},props:o={},on:r={},diffType:s="none"},n){return{tag:c(e)?e.tagName.toLowerCase():"",properties:o,attributes:t,events:r,children:n,type:i,domNode:e,text:c(e)?void 0:e.data,diffType:s}};var r=o("./node_modules/@dojo/shim/Symbol.mjs");const s=Object(r.a)("Identifier for a WNode.");t.b=s;const n=Object(r.a)("Identifier for a VNode.");t.a=n;const i=Object(r.a)("Identifier for a VNode created using existing dom.");function d(e){return Boolean(e&&"string"!=typeof e&&e.type===s)}function a(e){return Boolean(e&&"string"!=typeof e&&(e.type===n||e.type===i))}function c(e){return!!e.tagName}},"./node_modules/@dojo/widget-core/decorators/afterRender.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("afterRender",o?t[o]:e)})}},"./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs");function n(){return Object(r.a)((e,t)=>{Object(s.a)(function(){this.invalidate()})(e)})}},"./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("beforeProperties",o?t[o]:e)})}},"./node_modules/@dojo/widget-core/decorators/customElement.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/widget-core/registerCustomElement.mjs"),s=o("./node_modules/@dojo/widget-core/Registry.mjs");function n({tag:e,properties:t=[],attributes:o=[],events:n=[],childType:i=r.CustomElementChildType.DOJO,registryFactory:d=(()=>new s.c)}){return function(r){r.prototype.__customElementDescriptor={tagName:e,attributes:o,properties:t,events:n,childType:i,registryFactory:d}}}},"./node_modules/@dojo/widget-core/decorators/diffProperty.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs");function s(e,t,o){return Object(r.a)((r,s)=>{r.addDecorator(`diffProperty:${e}`,t.bind(null)),r.addDecorator("registeredDiffProperty",e),(o||s)&&r.addDecorator("diffReaction",{propertyName:e,reaction:s?r[s]:o})})}},"./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs":function(e,t,o){"use strict";function r(e){return function(t,o,r){"function"==typeof t?e(t.prototype,void 0):e(t,o)}}t.a=r},"./node_modules/@dojo/widget-core/decorators/inject.mjs":function(e,t,o){"use strict";t.a=d;var r=o("./node_modules/@dojo/shim/WeakMap.mjs"),s=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs");const i=new r.a;function d({name:e,getProperties:t}){return Object(s.a)((o,r)=>{Object(n.a)(function(o){const r=this.registry.getInjector(e);if(r){const{injector:e,invalidator:s}=r,n=i.get(this)||[];return 0===n.length&&i.set(this,n),-1===n.indexOf(r)&&(this.own(s.on("invalidate",()=>{this.invalidate()})),n.push(r)),t(e(),o)}})(o)})}},"./node_modules/@dojo/widget-core/diff.mjs":function(e,t,o){"use strict";t.b=i,t.a=function(e,t){let o;o="function"==typeof t?t._type===r.b?n(e,t):function(e,t){return{changed:!1,value:t}}(0,t):s(t)?i(e,t):n(e,t);return o};var r=o("./node_modules/@dojo/widget-core/Registry.mjs");function s(e){return"[object Object]"===Object.prototype.toString.call(e)||Array.isArray(e)}function n(e,t){return{changed:e!==t,value:t}}function i(e,t){let o=!1;const r=e&&s(e),n=t&&s(t);if(!r||!n)return{changed:!0,value:t};const i=Object.keys(e),d=Object.keys(t);return{changed:o=i.length!==d.length||d.some(o=>t[o]!==e[o]),value:t}}},"./node_modules/@dojo/widget-core/mixins/Projector.mjs":function(e,t,o){"use strict";t.a=l;var r,s,n=o("./node_modules/tslib/tslib.es6.js"),i=o("./node_modules/@dojo/core/lang.mjs"),d=o("./node_modules/@dojo/widget-core/animations/cssTransitions.mjs"),a=o("./node_modules/@dojo/widget-core/decorators/afterRender.mjs"),c=o("./node_modules/@dojo/widget-core/d.mjs"),u=o("./node_modules/@dojo/widget-core/vdom.mjs");function l(e){class t extends e{constructor(...e){super(...e),this._root=document.body,this._async=!0,this._projectorProperties={},this._projectionOptions={transitions:d.a},this.root=document.body,this.projectorState=r.Detached}append(e){const t={type:s.Append,root:e};return this._attach(t)}merge(e){const t={type:s.Merge,root:e};return this._attach(t)}set root(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change root element");this._root=e}get root(){return this._root}get async(){return this._async}set async(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change async mode");this._async=e}sandbox(e=document){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot create sandbox");this._async=!1;const t=this.root;this.own({destroy:()=>{this._root=t}}),this._attach({root:e.createDocumentFragment(),type:s.Append})}setChildren(e){this.__setChildren__(e)}setProperties(e){this.__setProperties__(e)}__setProperties__(e){this._projectorProperties&&this._projectorProperties.registry!==e.registry&&this._projectorProperties.registry&&this._projectorProperties.registry.destroy(),this._projectorProperties=Object(i.a)({},e),super.__setCoreProperties__({bind:this,baseRegistry:e.registry}),super.__setProperties__(e)}toHtml(){if(this.projectorState!==r.Attached||!this._projection)throw new Error("Projector is not attached, cannot return an HTML string of projection.");return this._projection.domNode.childNodes[0].outerHTML}afterRender(e){let t=e;return"string"!=typeof e&&null!==e&&void 0!==e||(t=Object(c.g)("span",{},[e])),t}destroy(){super.destroy()}_attach({type:e,root:t}){if(t&&(this.root=t),this._attachHandle)return this._attachHandle;this.projectorState=r.Attached;const o={destroy:()=>{this.projectorState===r.Attached&&(this._projection=void 0,this.projectorState=r.Detached)}};switch(this.own(o),this._attachHandle=o,this._projectionOptions=Object.assign({},this._projectionOptions,{sync:!this._async}),e){case s.Append:this._projection=u.a.append(this.root,this,this._projectionOptions);break;case s.Merge:this._projection=u.a.merge(this.root,this,this._projectionOptions)}return this._attachHandle}}return n.a([Object(a.a)(),n.b("design:type",Function),n.b("design:paramtypes",[Object]),n.b("design:returntype",void 0)],t.prototype,"afterRender",null),t}!function(e){e[e.Attached=1]="Attached",e[e.Detached=2]="Detached"}(r||(r={})),function(e){e[e.Append=1]="Append",e[e.Merge=2]="Merge"}(s||(s={}))},"./node_modules/@dojo/widget-core/mixins/Themed.mjs":function(e,t,o){"use strict";t.c=function(e){return Object(i.a)(t=>{t.addDecorator("baseThemeClasses",e)})},t.b=function(e,t){const o=new s.a(e);return t.defineInjector(u,e=>(o.setInvalidator(e),()=>o.get())),o},t.a=l;var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/widget-core/Injector.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/inject.mjs"),i=o("./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs"),d=o("./node_modules/@dojo/widget-core/decorators/diffProperty.mjs"),a=o("./node_modules/@dojo/widget-core/diff.mjs");const c=" _key",u=Symbol("theme");function l(e){let t=class extends e{constructor(){super(...arguments),this._registeredBaseThemeKeys=[],this._recalculateClasses=!0,this._theme={}}theme(e){return this._recalculateClasses&&this._recalculateThemeClasses(),Array.isArray(e)?e.map(e=>this._getThemeClass(e)):this._getThemeClass(e)}onPropertiesChanged(){this._recalculateClasses=!0}_getThemeClass(e){if(void 0===e||null===e)return e;const t=this.properties.extraClasses||{},o=this._baseThemeClassesReverseLookup[e];let r=[];return o?(t[o]&&r.push(t[o]),this._theme[o]?r.push(this._theme[o]):r.push(this._registeredBaseTheme[o]),r.join(" ")):(console.warn(`Class name: '${e}' not found in theme`),null)}_recalculateThemeClasses(){const{theme:e={}}=this.properties,t=this.getDecorator("baseThemeClasses");this._registeredBaseTheme||(this._registeredBaseTheme=t.reduce((e,t)=>{const o=c,s=t[o],n=r.c(t,["symbol"==typeof o?o:o+""]);return this._registeredBaseThemeKeys.push(s),Object.assign({},e,n)},{}),this._baseThemeClassesReverseLookup=t.reduce((e,t)=>(Object.keys(t).forEach(o=>{e[t[o]]=o}),e),{})),this._theme=this._registeredBaseThemeKeys.reduce((t,o)=>Object.assign({},t,e[o]),{}),this._recalculateClasses=!1}};return r.a([Object(d.a)("theme",a.b),Object(d.a)("extraClasses",a.b),r.b("design:type",Function),r.b("design:paramtypes",[]),r.b("design:returntype",void 0)],t.prototype,"onPropertiesChanged",null),t=r.a([Object(n.a)({name:u,getProperties:(e,t)=>t.theme?{}:{theme:e}})],t)}},"./node_modules/@dojo/widget-core/registerCustomElement.mjs":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"CustomElementChildType",function(){return r}),t.DomToWidgetWrapper=h,t.create=p,t.register=m;var r,s=o("./node_modules/tslib/tslib.es6.js"),n=o("./node_modules/@dojo/widget-core/WidgetBase.mjs"),i=o("./node_modules/@dojo/widget-core/mixins/Projector.mjs"),d=o("./node_modules/@dojo/shim/array.mjs"),a=o("./node_modules/@dojo/widget-core/d.mjs"),c=o("./node_modules/@dojo/shim/global.mjs"),u=o("./node_modules/@dojo/widget-core/mixins/Themed.mjs"),l=o("./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs");function h(e){let t=class extends n.a{render(){const t=Object.keys(this.properties).reduce((e,t)=>{const o=this.properties[t];return 0===t.indexOf("on")&&(t=`__${t}`),e[t]=o,e},{});return Object(a.c)({node:e,props:t,diffType:"dom"})}static get domNode(){return e}};return t=s.a([Object(l.a)()],t)}function p(e,t){const{attributes:o,childType:s,registryFactory:l}=e,p={};return o.forEach(e=>{const t=e.toLowerCase();p[t]=e}),class extends HTMLElement{constructor(){super(...arguments),this._properties={},this._children=[],this._eventProperties={},this._initialised=!1}connectedCallback(){if(this._initialised)return;const o={},{attributes:p,properties:m,events:f}=e;this._properties=Object.assign({},this._properties,this._attributesToProperties(p)),[...p,...m].forEach(e=>{const t=this[e],r=e.replace(/^on/,"__");void 0!==t&&(this._properties[e]=t),r!==e&&(o[r]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}),o[e]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}}),f.forEach(e=>{const t=e.replace(/^on/,"").toLowerCase(),r=e.replace(/^on/,"__on");o[r]={get:()=>this._getEventProperty(e),set:t=>this._setEventProperty(e,t)},this._eventProperties[e]=void 0,this._properties[e]=((...o)=>{const r=this._getEventProperty(e);"function"==typeof r&&r(...o),this.dispatchEvent(new CustomEvent(t,{bubbles:!1,detail:o}))})}),Object.defineProperties(this,o);const g=s===r.TEXT?this.childNodes:this.children;Object(d.a)(g).forEach(e=>{s===r.DOJO?(e.addEventListener("dojo-ce-render",()=>this._render()),e.addEventListener("dojo-ce-connected",()=>this._render()),this._children.push(h(e))):this._children.push(Object(a.c)({node:e,diffType:"dom"}))}),this.addEventListener("dojo-ce-connected",e=>this._childConnected(e));const j=this._properties,_=()=>this.__children__(),y=l(),b=Object(u.b)(this._getTheme(),y);c.a.addEventListener("dojo-theme-set",()=>b.set(this._getTheme()));const v=Object(i.a)(class extends n.a{render(){return Object(a.h)(t,j,_())}});this._projector=new v,this._projector.setProperties({registry:y}),this._projector.append(this),this._initialised=!0,this.dispatchEvent(new CustomEvent("dojo-ce-connected",{bubbles:!0,detail:this}))}_getTheme(){if(c.a&&c.a.dojoce&&c.a.dojoce.theme)return c.a.dojoce.themes[c.a.dojoce.theme]}_childConnected(e){const t=e.detail;if(t.parentNode===this){this._children.some(e=>e.domNode===t)||(t.addEventListener("dojo-ce-render",()=>this._render()),this._children.push(h(t)),this._render())}}_render(){this._projector&&(this._projector.invalidate(),this.dispatchEvent(new CustomEvent("dojo-ce-render",{bubbles:!1,detail:this})))}__properties__(){return Object.assign({},this._properties,this._eventProperties)}__children__(){return s===r.DOJO?this._children.filter(e=>e.domNode.isWidget).map(e=>{const{domNode:t}=e;return Object(a.h)(e,Object.assign({},t.__properties__()),[...t.__children__()])}):this._children}attributeChangedCallback(e,t,o){const r=p[e];this._setProperty(r,o)}_setEventProperty(e,t){this._eventProperties[e]=t}_getEventProperty(e){return this._eventProperties[e]}_setProperty(e,t){"function"==typeof t&&(t[n.b]=!0),this._properties[e]=t,this._render()}_getProperty(e){return this._properties[e]}_attributesToProperties(e){return e.reduce((e,t)=>{const o=t.toLowerCase(),r=this.getAttribute(o);return null!==r&&(e[t]=r),e},{})}static get observedAttributes(){return Object.keys(p)}get isWidget(){return!0}}}function m(e){const t=e.prototype&&e.prototype.__customElementDescriptor;if(!t)throw new Error("Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?");c.a.customElements.define(t.tagName,p(t,e))}!function(e){e.DOJO="DOJO",e.NODE="NODE",e.TEXT="TEXT"}(r||(r={})),t.default=m},"./node_modules/@dojo/widget-core/vdom.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/shim/global.mjs"),s=o("./node_modules/@dojo/shim/array.mjs"),n=o("./node_modules/@dojo/widget-core/d.mjs"),i=o("./node_modules/@dojo/widget-core/Registry.mjs"),d=o("./node_modules/@dojo/shim/WeakMap.mjs");const a="http://www.w3.org/2000/svg",c="http://www.w3.org/1999/xlink",u=[],l=new d.a;t.b=l;const h=new d.a,p=new d.a;function m(e,t){return Object(n.e)(e)&&Object(n.e)(t)?(!Object(n.d)(e)&&!Object(n.d)(t)||e.domNode===t.domNode)&&(e.tag===t.tag&&e.properties.key===t.properties.key):!(!Object(n.f)(e)||!Object(n.f)(t))&&((void 0!==e.instance||"string"!=typeof t.widgetConstructor)&&(e.widgetConstructor===t.widgetConstructor&&e.properties.key===t.properties.key))}const f=function(){throw new Error("Provide a transitions object to the projectionOptions to do animations")};function g(e){if("string"!=typeof e)throw new Error("Style values must be strings")}function j(e,t,o,r,s,n){const i=p.get(r.projectorInstance),a=i.nodeMap.get(e)||new d.a;if(n){const o=a.get(n);e.removeEventListener(t,o)}let c=o.bind(s);"input"===t&&(c=function(e){o.call(this,e),e.target["oninput-value"]=e.target.value}.bind(s)),e.addEventListener(t,c),a.set(o,c),i.nodeMap.set(e,a)}function _(e,t){if(t){const o=t.split(" ");for(let t=0;t{o.focus()})}}function v(e,t,o,r,s=!1){const n=p.get(r.projectorInstance).nodeMap.get(e);n&&Object.keys(t).forEach(r=>{const i="on"===r.substr(0,2)||s,d=s?r:r.substr(2);if(i&&!o[r]){const o=n.get(t[r]);o&&e.removeEventListener(d,o)}})}function w(e,t,o,r){r.namespace===a&&"href"===t?e.setAttributeNS(c,t,o):"role"===t&&""===o||void 0===o?e.removeAttribute(t):e.setAttribute(t,o)}function O(e,t,o,r){const s=Object.keys(o),n=s.length;for(let i=0;i0)if(c&&0!==c.length){const r=[...o];for(let o=0;o0&&R(r.children,t));else{if(!r.coreProperties){const e=l.get(t);r.coreProperties={bind:t,baseRegistry:e.coreProperties.baseRegistry}}r.children&&r.children.length>0&&R(r.children,t)}o++}else e.splice(o,1)}return e}function k(e,t){if(Object(n.e)(e)&&e.properties){const o=e.properties.enterAnimation;o&&("function"==typeof o?o(e.domNode,e.properties):t.enter(e.domNode,e.properties,o))}}function N(e,t,o){if(Object(n.f)(e)){const r=e.rendered||u;if(e.instance){l.get(e.instance).onDetach(),h.delete(e.instance)}for(let e=0;e0)for(let r=0;r{let i=void 0,d=t[f];if(d){let e=f+1,o=[d];for(;o.length;){const r=o.shift();if(Object(n.f)(r))r.rendered&&o.push(...r.rendered);else if(r.domNode){i=r.domNode;break}0===o.length&&t[e]&&(o.push(t[e]),e++)}}D(u,e,i,s,r),k(u,a);const l=g;c.afterRenderCallbacks.push(()=>{A(o,l,r)})};if(!d||-1===l){p(),g++;continue}const _=()=>{const e=f;if(c.afterRenderCallbacks.push(()=>{A(t,e,r)}),Object(n.f)(d)){const e=h.get(d.instance);e&&(d=e.dnode)}N(d,a,s)};-1!==E(o,d,g+1)?(p(),_(),f++,g++):(_(),f++)}if(i>f)for(l=f;l{A(t,e,r)});let o=t[l];if(Object(n.f)(o)){const e=h.get(o.instance);e&&(o=e.dnode)}N(o,a,s)}return j}function T(e,t,o,r,i,d){if(void 0===t)return;const a=p.get(o.projectorInstance);a.merge&&void 0===d&&(d=Object(s.a)(e.domNode.childNodes));const c=o.transitions;o=Object.assign({},o,{depth:o.depth+1});for(let s=0;s0;)(e=d.shift())&&e.tagName===(u.tag.toUpperCase()||void 0)&&(u.domNode=e)}D(u,e,i,o,r)}else D(u,e,i,o,r,d);k(u,c)}}function x(e,t,o,r){if(T(t,t.children,r,o,void 0),"function"==typeof t.deferredPropertiesCallback&&void 0===t.inserted&&L(t,r),t.attributes&&t.events){O(e,{},t.attributes,r),P(e,{},t.properties,r,!1),v(e,{},t.events,r,!0);const o=t.events;Object.keys(o).forEach(s=>{j(e,s,o[s],r,t.properties.bind)})}else P(e,{},t.properties,r);if(null!==t.properties.key&&void 0!==t.properties.key){l.get(o).nodeHandler.add(e,`${t.properties.key}`)}t.inserted=!0}function D(e,t,o,r,s,d){let c;const u=p.get(r.projectorInstance);if(Object(n.f)(e)){let{widgetConstructor:n}=e;const a=l.get(s);if(!Object(i.d)(n)){const e=a.registry().get(n);if(null===e)return;n=e}const c=new n;e.instance=c;const p=l.get(c);p.invalidate=(()=>{p.dirty=!0,!1===p.rendering&&(u.renderQueue.push({instance:c,depth:r.depth}),F(r))}),p.rendering=!0,c.__setCoreProperties__(e.coreProperties),c.__setChildren__(e.children),c.__setProperties__(e.properties);const m=c.__render__();if(p.rendering=!1,m){const s=R(m,c);e.rendered=s,T(t,s,r,c,o,d)}h.set(c,{dnode:e,parentVNode:t}),p.nodeHandler.addRoot(),u.afterRenderCallbacks.push(()=>{p.onAttach()})}else{if(u.merge&&void 0!==u.mergeElement)return c=e.domNode=r.mergeElement,u.mergeElement=void 0,void x(c,e,s,r);const n=t.domNode.ownerDocument;if(e.tag||"string"!=typeof e.text)void 0===e.domNode?("svg"===e.tag&&(r=Object.assign({},r,{namespace:a})),c=void 0!==r.namespace?e.domNode=n.createElementNS(r.namespace,e.tag):e.domNode=e.domNode||n.createElement(e.tag)):c=e.domNode,x(c,e,s,r),void 0!==o?t.domNode.insertBefore(c,o):c.parentNode!==t.domNode&&t.domNode.appendChild(c);else if(void 0!==e.domNode&&t.domNode){const o=e.domNode.ownerDocument.createTextNode(e.text);t.domNode===e.domNode.parentNode?t.domNode.replaceChild(o,e.domNode):(t.domNode.appendChild(o),e.domNode.parentNode&&e.domNode.parentNode.removeChild(e.domNode)),e.domNode=o}else c=e.domNode=n.createTextNode(e.text),void 0!==o?t.domNode.insertBefore(c,o):t.domNode.appendChild(c)}}function S(e,t,o,r,s){if(Object(n.f)(t)){const{instance:r}=e,{parentVNode:s,dnode:n}=h.get(r),i=n?n.rendered:e.rendered,d=l.get(r);if(d.rendering=!0,r.__setCoreProperties__(t.coreProperties),r.__setChildren__(t.children),r.__setProperties__(t.properties),t.instance=r,!0===d.dirty){const e=r.__render__();d.rendering=!1,t.rendered=R(e,r),M(s,i,t.rendered,r,o)}else d.rendering=!1,t.rendered=i;h.set(r,{dnode:t,parentVNode:s}),d.nodeHandler.addRoot()}else{if(e===t)return!1;const r=t.domNode=e.domNode;let n=!1,i=!1;if(t.tag||"string"!=typeof t.text){if(t.tag&&0===t.tag.lastIndexOf("svg",0)&&(o=Object.assign({},o,{namespace:a})),e.children!==t.children){const r=R(t.children,s);t.children=r,i=M(t,e.children,r,s,o)||i}const n=function(e,t,o){const{diffType:r,properties:s,attributes:n}=o;if(!r||"vdom"===r)return{properties:t.properties,attributes:t.attributes,events:t.events};if("none"===r)return{properties:{},attributes:t.attributes?{}:void 0,events:t.events};let i={properties:{}};return n?(i.attributes={},i.events=t.events,Object.keys(s).forEach(t=>{i.properties[t]=e[t]}),Object.keys(n).forEach(t=>{i.attributes[t]=e.getAttribute(t)}),i):(i.properties=Object.keys(s).reduce((t,o)=>(t[o]=e.getAttribute(o)||e[o],t),{}),i)}(r,e,t);if(t.attributes&&t.events){O(r,n.attributes,t.attributes,o),i=P(r,n.properties,t.properties,o,!1)||i,v(r,n.events,t.events,o,!0);const e=t.events;Object.keys(e).forEach(s=>{j(r,s,e[s],o,t.properties.bind,n.events[s])})}else i=P(r,n.properties,t.properties,o)||i;if(null!==t.properties.key&&void 0!==t.properties.key){l.get(s).nodeHandler.add(r,`${t.properties.key}`)}}else if(t.text!==e.text){const e=r.ownerDocument.createTextNode(t.text);return r.parentNode.replaceChild(e,r),t.domNode=e,n=!0}i&&t.properties&&t.properties.updateAnimation&&t.properties.updateAnimation(r,t.properties,e.properties)}}function L(e,t){e.decoratedDeferredProperties=e.properties;const o=e.deferredPropertiesCallback(!!e.inserted),r=p.get(t.projectorInstance);e.properties=Object.assign({},o,e.decoratedDeferredProperties),r.deferredRenderCallbacks.push(()=>{const o=Object.assign({},e.deferredPropertiesCallback(!!e.inserted),e.decoratedDeferredProperties);P(e.domNode,e.properties,o,t),e.properties=o})}function I(e){const t=p.get(e.projectorInstance);if(t.deferredRenderCallbacks.length)if(e.sync)for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}else r.a.requestAnimationFrame(()=>{for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}})}function W(e){const t=p.get(e.projectorInstance);if(e.sync)for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}else r.a.requestIdleCallback?r.a.requestIdleCallback(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}}):setTimeout(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}})}function F(e){const t=p.get(e.projectorInstance);e.sync?B(e):void 0===t.renderScheduled&&(t.renderScheduled=r.a.requestAnimationFrame(()=>{B(e)}))}function B(e){const t=p.get(e.projectorInstance);t.renderScheduled=void 0;const o=[...t.renderQueue];t.renderQueue=[],o.sort((e,t)=>e.depth-t.depth);const r=[];for(;o.length;){const{instance:t}=o.shift();if(h.has(t)&&-1===r.indexOf(t)){r.push(t);const{parentVNode:o,dnode:s}=h.get(t);S(s,C(t,l.get(t)),e,0,t)}}W(e),I(e)}const H={append:function(e,t,o={}){const r=l.get(t),s=function(e,t){const o={namespace:void 0,styleApplyer:function(e,t,o){e.style[t]=o},transitions:{enter:f,exit:f},depth:0,merge:!1,sync:!1,projectorInstance:t};return Object.assign({},o,e)}(o,t),i={afterRenderCallbacks:[],deferredRenderCallbacks:[],nodeMap:new d.a,renderScheduled:void 0,renderQueue:[],merge:o.merge||!1,mergeElement:o.mergeElement};p.set(t,i),s.rootNode=e;const a={tag:"",properties:{},children:void 0,domNode:s.rootNode,type:n.a};const c=C(t,r);return h.set(t,{dnode:c,parentVNode:a}),r.invalidate=(()=>{r.dirty=!0,!1===r.rendering&&(i.renderQueue.push({instance:t,depth:s.depth}),F(s))}),S(c,c,s,0,t),i.afterRenderCallbacks.push(()=>{r.onAttach()}),I(s),W(s),{domNode:s.rootNode}},create:function(e,t){return this.append(document.createElement("div"),e,t)},merge:function(e,t,o={}){o.merge=!0,o.mergeElement=e;const r=this.append(e.parentNode,t,o);return p.get(t).merge=!1,r}};t.a=H},"./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js":function(e,t,o){var r=o("./src/menu/Menu.ts"),s=o("./node_modules/@dojo/widget-core/registerCustomElement.mjs").default,n=r.default;n&&s(n)},"./node_modules/process/browser.js":function(e,t){var o,r,s=e.exports={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function d(e){if(o===setTimeout)return setTimeout(e,0);if((o===n||!o)&&setTimeout)return o=setTimeout,setTimeout(e,0);try{return o(e,0)}catch(t){try{return o.call(null,e,0)}catch(t){return o.call(this,e,0)}}}!function(){try{o="function"==typeof setTimeout?setTimeout:n}catch(e){o=n}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var a,c=[],u=!1,l=-1;function h(){u&&a&&(u=!1,a.length?c=a.concat(c):l=-1,c.length&&p())}function p(){if(!u){var e=d(h);u=!0;for(var t=c.length;t;){for(a=c,c=[];++l1)for(var o=1;o=0;d--)(s=e[d])&&(i=(n<3?s(i):n>3?s(t,o,i):s(t,o))||i);return n>3&&i&&Object.defineProperty(t,o,i),i},t.b=function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}; +!function(e){var t={};function o(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,o),s.l=!0,s.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}({"./node_modules/@dojo/framework/core/Destroyable.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/core/lang.mjs"),s=o("./node_modules/@dojo/framework/shim/Promise.mjs");function n(){return s.a.resolve(!1)}function i(){throw new Error("Call made to destroyed method")}class d{constructor(){this.handles=[]}own(e){const t=Array.isArray(e)?Object(r.b)(...e):e,{handles:o}=this;return o.push(t),{destroy(){o.splice(o.indexOf(t)),t.destroy()}}}destroy(){return new s.a(e=>{this.handles.forEach(e=>{e&&e.destroy&&e.destroy()}),this.destroy=n,this.own=i,e(!0)})}}t.a=d},"./node_modules/@dojo/framework/core/Evented.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/core/Destroyable.mjs");const n=new r.b;class i extends s.a{constructor(){super(...arguments),this.listenersMap=new r.b}emit(e){this.listenersMap.forEach((t,o)=>{(function(e,t){if("string"==typeof t&&"string"==typeof e&&-1!==e.indexOf("*")){let o;return n.has(e)?o=n.get(e):(o=new RegExp(`^${e.replace(/\*/g,".*")}$`),n.set(e,o)),o.test(t)}return e===t})(o,e.type)&&[...t].forEach(t=>{t.call(this,e)})})}on(e,t){if(Array.isArray(t)){const o=t.map(t=>this._addListener(e,t));return{destroy(){o.forEach(e=>e.destroy())}}}return this._addListener(e,t)}_addListener(e,t){const o=this.listenersMap.get(e)||[];return o.push(t),this.listenersMap.set(e,o),{destroy:()=>{const o=this.listenersMap.get(e)||[];o.splice(o.indexOf(t),1)}}}}t.a=i},"./node_modules/@dojo/framework/core/lang.mjs":function(e,t,o){"use strict";t.b=function(...e){return function(e){let t=!1;return{destroy:function(){t||(t=!0,e())}}}(function(){for(let t=0;t{r[e]=t,delete n[e]},()=>{delete n[e]})}function l(e){let t;const o=e.toLowerCase();if(o in a)t=a[o];else if(s[o])t=r[o]=s[o].call(null),delete s[o];else{if(!(o in r)){if(e in n)return!1;throw new TypeError(`Attempt to detect unregistered has feature "${e}"`)}t=r[o]}return t}c("debug",!0),c("host-browser","undefined"!=typeof document&&"undefined"!=typeof location),c("host-node",function(){if("object"==typeof o&&o.versions&&o.versions.node)return o.versions.node})}).call(t,o("./node_modules/webpack/buildin/global.js"),o("./node_modules/process/browser.js"))},"./node_modules/@dojo/framework/shim/Map.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});o("./node_modules/@dojo/framework/shim/iterator.mjs");var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/object.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s=r.a.Map;t.b=s},"./node_modules/@dojo/framework/shim/Promise.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/queue.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs");let s=r.a.Promise;t.a=s},"./node_modules/@dojo/framework/shim/Symbol.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/support/has.mjs");var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=o("./node_modules/@dojo/framework/shim/support/util.mjs");let n=r.a.Symbol;["hasInstance","isConcatSpreadable","iterator","species","replace","search","split","match","toPrimitive","toStringTag","unscopables","observable"].forEach(e=>{n[e]||Object.defineProperty(n,e,Object(s.a)(n.for(e),!1,!1))}),t.a=n},"./node_modules/@dojo/framework/shim/WeakMap.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/iterator.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s=r.a.WeakMap;t.a=s},"./node_modules/@dojo/framework/shim/array.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return n});var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=(o("./node_modules/@dojo/framework/shim/iterator.mjs"),o("./node_modules/@dojo/framework/shim/number.mjs"),o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/support/util.mjs"));let n,i,d,a,c,l,u;n=r.a.Array.from,i=r.a.Array.of,d=Object(s.b)(r.a.Array.prototype.copyWithin),a=Object(s.b)(r.a.Array.prototype.fill),c=Object(s.b)(r.a.Array.prototype.find),l=Object(s.b)(r.a.Array.prototype.findIndex),u=Object(s.b)(r.a.Array.prototype.includes)},"./node_modules/@dojo/framework/shim/global.mjs":function(e,t,o){"use strict";(function(e){const o=void 0!==e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0;t.a=o}).call(t,o("./node_modules/webpack/buildin/global.js"))},"./node_modules/@dojo/framework/shim/iterator.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/Symbol.mjs"),o("./node_modules/@dojo/framework/shim/string.mjs")},"./node_modules/@dojo/framework/shim/number.mjs":function(e,t,o){"use strict";o("./node_modules/@dojo/framework/shim/global.mjs");Math.pow(2,53)},"./node_modules/@dojo/framework/shim/object.mjs":function(e,t,o){"use strict";o.d(t,"a",function(){return s});var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/Symbol.mjs");let s,n,i,d,a,c,l,u,m;{const e=r.a.Object;s=e.assign,n=e.getOwnPropertyDescriptor,i=e.getOwnPropertyNames,d=e.getOwnPropertySymbols,a=e.is,c=e.keys}{const e=r.a.Object;l=e.getOwnPropertyDescriptors,u=e.entries,m=e.values}},"./node_modules/@dojo/framework/shim/string.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=(o("./node_modules/@dojo/framework/shim/support/has.mjs"),o("./node_modules/@dojo/framework/shim/support/util.mjs"));t.b=55296;t.a=56319;let n,i,d,a,c,l,u,m,h,f;n=r.a.String.fromCodePoint,i=r.a.String.raw,d=Object(s.b)(r.a.String.prototype.codePointAt),a=Object(s.b)(r.a.String.prototype.endsWith),c=Object(s.b)(r.a.String.prototype.includes),l=Object(s.b)(r.a.String.prototype.normalize),u=Object(s.b)(r.a.String.prototype.repeat),m=Object(s.b)(r.a.String.prototype.startsWith),h=Object(s.b)(r.a.String.prototype.padEnd),f=Object(s.b)(r.a.String.prototype.padStart)},"./node_modules/@dojo/framework/shim/support/has.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/has/has.mjs"),s=o("./node_modules/@dojo/framework/shim/global.mjs");r.b;Object(r.a)("es6-array",()=>["from","of"].every(e=>e in s.a.Array)&&["findIndex","find","copyWithin"].every(e=>e in s.a.Array.prototype),!0),Object(r.a)("es6-array-fill",()=>"fill"in s.a.Array.prototype&&1===[1].fill(9,Number.POSITIVE_INFINITY)[0],!0),Object(r.a)("es7-array",()=>"includes"in s.a.Array.prototype,!0),Object(r.a)("es6-map",()=>{if("function"==typeof s.a.Map)try{const e=new s.a.Map([[0,1]]);return e.has(0)&&"function"==typeof e.keys&&"function"==typeof e.values&&"function"==typeof e.entries}catch(e){return!1}return!1},!0),Object(r.a)("es6-math",()=>["clz32","sign","log10","log2","log1p","expm1","cosh","sinh","tanh","acosh","asinh","atanh","trunc","fround","cbrt","hypot"].every(e=>"function"==typeof s.a.Math[e]),!0),Object(r.a)("es6-math-imul",()=>"imul"in s.a.Math&&-5===Math.imul(4294967295,5),!0),Object(r.a)("es6-object",()=>["assign","is","getOwnPropertySymbols","setPrototypeOf"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es2017-object",()=>["values","entries","getOwnPropertyDescriptors"].every(e=>"function"==typeof s.a.Object[e]),!0),Object(r.a)("es-observable",()=>void 0!==s.a.Observable,!0),Object(r.a)("es6-promise",()=>void 0!==s.a.Promise&&!0,!0),Object(r.a)("es6-set",()=>{if("function"==typeof s.a.Set){const e=new s.a.Set([1]);return e.has(1)&&"keys"in e&&"function"==typeof e.keys&&!0}return!1},!0),Object(r.a)("es6-string",()=>["fromCodePoint"].every(e=>"function"==typeof s.a.String[e])&&["codePointAt","normalize","repeat","startsWith","endsWith","includes"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-string-raw",()=>{function e(e,...t){const o=[...e];return o.raw=e.raw,o}if("raw"in s.a.String){let t=e`a\n${1}`;return t.raw=["a\\n"],"a:\\n"===s.a.String.raw(t,42)}return!1},!0),Object(r.a)("es2017-string",()=>["padStart","padEnd"].every(e=>"function"==typeof s.a.String.prototype[e]),!0),Object(r.a)("es6-symbol",()=>void 0!==s.a.Symbol&&"symbol"==typeof Symbol(),!0),Object(r.a)("es6-weakmap",()=>{if(void 0!==s.a.WeakMap){const e={},t={},o=new s.a.WeakMap([[e,1]]);return Object.freeze(e),1===o.get(e)&&o.set(t,2)===o&&!0}return!1},!0),Object(r.a)("microtasks",()=>!0,!0),Object(r.a)("postmessage",()=>void 0!==s.a.window&&"function"==typeof s.a.postMessage,!0),Object(r.a)("raf",()=>"function"==typeof s.a.requestAnimationFrame,!0),Object(r.a)("setimmediate",()=>void 0!==s.a.setImmediate,!0),Object(r.a)("dom-mutationobserver",()=>{if(Boolean(s.a.MutationObserver||s.a.WebKitMutationObserver)){const e=document.createElement("div"),t=new(s.a.MutationObserver||s.a.WebKitMutationObserver)(function(){});return t.observe(e,{attributes:!0}),e.style.setProperty("display","block"),Boolean(t.takeRecords().length)}return!1},!0),Object(r.a)("dom-webanimation",()=>void 0!==s.a.Animation&&void 0!==s.a.KeyframeEffect,!0)},"./node_modules/@dojo/framework/shim/support/queue.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs");o("./node_modules/@dojo/framework/shim/support/has.mjs");function s(e){e&&e.isActive&&e.callback&&e.callback()}function n(e,t){return{destroy:function(){this.destroy=function(){},e.isActive=!1,e.callback=null,t&&t()}}}!function(){let e,t;{const e=[];r.a.addEventListener("message",function(t){t.source===r.a&&"dojo-queue-message"===t.data&&(t.stopPropagation(),e.length&&s(e.shift()))}),t=function(t){e.push(t),r.a.postMessage("dojo-queue-message","*")}}function o(o){const r={isActive:!0,callback:o},s=t(r);return n(r,e&&function(){e(s)})}}();!function(){function e(e){const t={isActive:!0,callback:e},o=requestAnimationFrame(s.bind(null,t));return n(t,function(){cancelAnimationFrame(o)})}}();!function(){let e;e=function(e){r.a.Promise.resolve(e).then(s)}}()},"./node_modules/@dojo/framework/shim/support/util.mjs":function(e,t,o){"use strict";t.a=function(e,t=!1,o=!0,r=!0){return{value:e,enumerable:t,writable:o,configurable:r}},t.b=function(e){return function(t,...o){return e.apply(t,o)}}},"./node_modules/@dojo/framework/widget-core/Injector.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/core/Evented.mjs");class s extends r.a{constructor(e){super(),this._payload=e}setInvalidator(e){this._invalidator=e}get(){return this._payload}set(e){this._payload=e,this._invalidator&&this._invalidator()}}t.a=s},"./node_modules/@dojo/framework/widget-core/NodeHandler.mjs":function(e,t,o){"use strict";var r,s=o("./node_modules/@dojo/framework/core/Evented.mjs"),n=o("./node_modules/@dojo/framework/shim/Map.mjs");!function(e){e.Projector="Projector",e.Widget="Widget"}(r||(r={}));t.a=class extends s.a{constructor(){super(...arguments),this._nodeMap=new n.b}get(e){return this._nodeMap.get(e)}has(e){return this._nodeMap.has(e)}add(e,t){this._nodeMap.set(t,e),this.emit({type:t})}addRoot(){this.emit({type:r.Widget})}addProjector(){this.emit({type:r.Projector})}clear(){this._nodeMap.clear()}}},"./node_modules/@dojo/framework/widget-core/Registry.mjs":function(e,t,o){"use strict";t.d=a;var r=o("./node_modules/@dojo/framework/shim/Promise.mjs"),s=o("./node_modules/@dojo/framework/shim/Map.mjs"),n=o("./node_modules/@dojo/framework/shim/Symbol.mjs"),i=o("./node_modules/@dojo/framework/core/Evented.mjs");const d=Object(n.a)("Widget Base");function a(e){return Boolean(e&&e._type===d)}t.b=d;class c extends i.a{emitLoadedEvent(e,t){this.emit({type:e,action:"loaded",item:t})}define(e,t){if(void 0===this._widgetRegistry&&(this._widgetRegistry=new s.b),this._widgetRegistry.has(e))throw new Error(`widget has already been registered for '${e.toString()}'`);this._widgetRegistry.set(e,t),t instanceof r.a?t.then(t=>(this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}):a(t)&&this.emitLoadedEvent(e,t)}defineInjector(e,t){if(void 0===this._injectorRegistry&&(this._injectorRegistry=new s.b),this._injectorRegistry.has(e))throw new Error(`injector has already been registered for '${e.toString()}'`);const o=new i.a,r={injector:t(()=>o.emit({type:"invalidate"})),invalidator:o};this._injectorRegistry.set(e,r),this.emitLoadedEvent(e,r)}get(e){if(!this._widgetRegistry||!this.has(e))return null;const t=this._widgetRegistry.get(e);if(a(t))return t;if(t instanceof r.a)return null;const o=t();return this._widgetRegistry.set(e,o),o.then(t=>((function(e){return Boolean(e&&e.hasOwnProperty("__esModule")&&e.hasOwnProperty("default")&&a(e.default))})(t)&&(t=t.default),this._widgetRegistry.set(e,t),this.emitLoadedEvent(e,t),t),e=>{throw e}),null}getInjector(e){return this._injectorRegistry&&this.hasInjector(e)?this._injectorRegistry.get(e):null}has(e){return Boolean(this._widgetRegistry&&this._widgetRegistry.has(e))}hasInjector(e){return Boolean(this._injectorRegistry&&this._injectorRegistry.has(e))}}t.a=c,t.c=c},"./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/core/Evented.mjs"),n=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");t.a=class extends s.a{constructor(){super(),this._registry=new n.a,this._registryWidgetLabelMap=new r.a,this._registryInjectorLabelMap=new r.a,this.own(this._registry),this.own({destroy:()=>{this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry),this.baseRegistry=void 0)}})}set base(e){this.baseRegistry&&(this._registryWidgetLabelMap.delete(this.baseRegistry),this._registryInjectorLabelMap.delete(this.baseRegistry)),this.baseRegistry=e}define(e,t){this._registry.define(e,t)}defineInjector(e,t){this._registry.defineInjector(e,t)}has(e){return this._registry.has(e)||Boolean(this.baseRegistry&&this.baseRegistry.has(e))}hasInjector(e){return this._registry.hasInjector(e)||Boolean(this.baseRegistry&&this.baseRegistry.hasInjector(e))}get(e,t=!1){return this._get(e,t,"get",this._registryWidgetLabelMap)}getInjector(e,t=!1){return this._get(e,t,"getInjector",this._registryInjectorLabelMap)}_get(e,t,o,r){const s=t?[this.baseRegistry,this._registry]:[this._registry,this.baseRegistry];for(let n=0;n{"loaded"===r.action&&this[o](e,t)===r.item&&this.emit({type:"invalidate"})});this.own(s),r.set(i,[...a,e])}}return null}}},"./node_modules/@dojo/framework/widget-core/WidgetBase.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/Map.mjs"),s=o("./node_modules/@dojo/framework/shim/WeakMap.mjs"),n=o("./node_modules/@dojo/framework/shim/Symbol.mjs"),i=o("./node_modules/@dojo/framework/widget-core/d.mjs"),d=o("./node_modules/@dojo/framework/widget-core/diff.mjs"),a=o("./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs"),c=o("./node_modules/@dojo/framework/widget-core/NodeHandler.mjs"),l=o("./node_modules/@dojo/framework/widget-core/vdom.mjs"),u=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");const m=new r.b,h=d.a.bind(null),f=n.a.for("dojoNoBind");t.b=f;class p{constructor(){this._initialProperties=!0,this._changedPropertyKeys=[],this._nodeHandler=new c.a,this._handles=[],this._children=[],this._decoratorCache=new r.b,this._properties={},this._boundRenderFunc=this.render.bind(this),this._boundInvalidate=this.invalidate.bind(this),l.b.set(this,{dirty:!0,onAttach:()=>{this.onAttach()},onDetach:()=>{this.onDetach(),this.destroy()},nodeHandler:this._nodeHandler,registry:()=>this.registry,coreProperties:{},rendering:!1,inputProperties:{}}),this._runAfterConstructors()}meta(e){void 0===this._metaMap&&(this._metaMap=new r.b);let t=this._metaMap.get(e);return t||(t=new e({invalidate:this._boundInvalidate,nodeHandler:this._nodeHandler,bind:this}),this.own(t),this._metaMap.set(e,t)),t}onAttach(){}onDetach(){}get properties(){return this._properties}get changedPropertyKeys(){return[...this._changedPropertyKeys]}__setCoreProperties__(e){const{baseRegistry:t}=e,o=l.b.get(this);o.coreProperties.baseRegistry!==t&&(void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry.base=t,this.invalidate()),o.coreProperties=e}__setProperties__(e){const t=l.b.get(this);t.inputProperties=e;const o=this._runBeforeProperties(e),r=this.getDecorator("registeredDiffProperty"),s=[],n=Object.keys(o);if(!1===this._initialProperties||0!==r.length){const e=[...n,...Object.keys(this._properties)],i=[],d={};let a=!1;for(let n=0;n{const r=-1!==s.indexOf(o),n=-1!==e.indexOf(t);r&&!n&&(t.call(this,this._properties,d),e.push(t))})}this._properties=d,this._changedPropertyKeys=s}else{this._initialProperties=!1;for(let e=0;e0&&this.invalidate()}get children(){return this._children}__setChildren__(e){(this._children.length>0||e.length>0)&&(this._children=e,this.invalidate())}__render__(){l.b.get(this).dirty=!1;let e=this._runBeforeRenders()();return e=this.runAfterRenders(e),this._nodeHandler.clear(),e}invalidate(){const e=l.b.get(this);e.invalidate&&e.invalidate()}render(){return Object(i.g)("div",{},this.children)}addDecorator(e,t){if(t=Array.isArray(t)?t:[t],this.hasOwnProperty("constructor")){let o=m.get(this.constructor);o||(o=new r.b,m.set(this.constructor,o));let s=o.get(e);s||(s=[],o.set(e,s)),s.push(...t)}else{const o=this.getDecorator(e);this._decoratorCache.set(e,[...o,...t])}}_buildDecoratorList(e){const t=[];let o=this.constructor;for(;o;){const r=m.get(o);if(r){const o=r.get(e);o&&t.unshift(...o)}o=Object.getPrototypeOf(o)}return t}getDecorator(e){let t=this._decoratorCache.get(e);return void 0!==t?t:(t=this._buildDecoratorList(e),this._decoratorCache.set(e,t),t)}_bindFunctionProperty(e,t){if("function"==typeof e&&!e[f]&&!1===Object(u.d)(e)){void 0===this._bindFunctionPropertyMap&&(this._bindFunctionPropertyMap=new s.a);const o=this._bindFunctionPropertyMap.get(e)||{};let{boundFunc:r,scope:n}=o;return void 0!==r&&n===t||(r=e.bind(t),this._bindFunctionPropertyMap.set(e,{boundFunc:r,scope:t})),r}return e}get registry(){return void 0===this._registry&&(this._registry=new a.a,this.own(this._registry),this.own(this._registry.on("invalidate",this._boundInvalidate))),this._registry}_runBeforeProperties(e){const t=this.getDecorator("beforeProperties");return t.length>0?t.reduce((e,t)=>Object.assign({},e,t.call(this,e)),Object.assign({},e)):e}_runBeforeRenders(){const e=this.getDecorator("beforeRender");return e.length>0?e.reduce((e,t)=>{const o=t.call(this,e,this._properties,this._children);return o||(console.warn("Render function not returned from beforeRender, using previous render"),e)},this._boundRenderFunc):this._boundRenderFunc}runAfterRenders(e){const t=this.getDecorator("afterRender");return t.length>0&&(e=t.reduce((e,t)=>t.call(this,e),e)),void 0!==this._metaMap&&this._metaMap.forEach(e=>{e.afterRender()}),e}_runAfterConstructors(){const e=this.getDecorator("afterConstructor");e.length>0&&e.forEach(e=>e.call(this))}own(e){this._handles.push(e)}destroy(){for(;this._handles.length>0;){const e=this._handles.pop();e&&e.destroy()}}}t.a=p,p._type=u.b},"./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs":function(e,t,o){"use strict";let r="",s="";function n(e){""===s&&function(e){if("WebkitTransition"in e.style)r="webkitTransitionEnd",s="webkitAnimationEnd";else{if(!("transition"in e.style||"MozTransition"in e.style))throw new Error("Your browser is not supported");r="transitionend",s="animationend"}}(e)}function i(e,t,o){n(e);let i=!1,d=function(){i||(i=!0,e.removeEventListener(r,d),e.removeEventListener(s,d),o())};t(),e.addEventListener(s,d),e.addEventListener(r,d)}t.a={enter:function(e,t,o){const r=t.enterAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(r)})},()=>{e.classList.remove(o),e.classList.remove(r)})},exit:function(e,t,o,r){const s=t.exitAnimationActive||`${o}-active`;i(e,()=>{e.classList.add(o),requestAnimationFrame(function(){e.classList.add(s)})},()=>{r()})}}},"./node_modules/@dojo/framework/widget-core/d.mjs":function(e,t,o){"use strict";t.f=d,t.e=a,t.d=function(e){return Boolean(e&&"string"!=typeof e&&e.type===i)},t.h=function(e,t,o=[]){return{children:o,widgetConstructor:e,properties:t,type:s}},t.g=function(e,t={},o){let r,s=t;Array.isArray(t)&&(o=t,s={});"function"==typeof s&&(r=s,s={});return{tag:e,deferredPropertiesCallback:r,children:o,properties:s,type:n}},t.c=function({node:e,attrs:t={},props:o={},on:r={},diffType:s="none"},n){return{tag:c(e)?e.tagName.toLowerCase():"",properties:o,attributes:t,events:r,children:n,type:i,domNode:e,text:c(e)?void 0:e.data,diffType:s}};var r=o("./node_modules/@dojo/framework/shim/Symbol.mjs");const s=Object(r.a)("Identifier for a WNode.");t.b=s;const n=Object(r.a)("Identifier for a VNode.");t.a=n;const i=Object(r.a)("Identifier for a VNode created using existing dom.");function d(e){return Boolean(e&&"string"!=typeof e&&e.type===s)}function a(e){return Boolean(e&&"string"!=typeof e&&(e.type===n||e.type===i))}function c(e){return!!e.tagName}},"./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("afterRender",o?t[o]:e)})}},"./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs");function n(){return Object(r.a)((e,t)=>{Object(s.a)(function(){this.invalidate()})(e)})}},"./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs":function(e,t,o){"use strict";t.a=s;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs");function s(e){return Object(r.a)((t,o)=>{t.addDecorator("beforeProperties",o?t[o]:e)})}},"./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs"),s=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");function n({tag:e,properties:t=[],attributes:o=[],events:n=[],childType:i=r.CustomElementChildType.DOJO,registryFactory:d=(()=>new s.c)}){return function(r){r.prototype.__customElementDescriptor={tagName:e,attributes:o,properties:t,events:n,childType:i,registryFactory:d}}}},"./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs":function(e,t,o){"use strict";t.a=n;var r=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),s=o("./node_modules/@dojo/framework/widget-core/diff.mjs");function n(e,t=s.a,o){return Object(r.a)((r,s)=>{r.addDecorator(`diffProperty:${e}`,t.bind(null)),r.addDecorator("registeredDiffProperty",e),(o||s)&&r.addDecorator("diffReaction",{propertyName:e,reaction:s?r[s]:o})})}},"./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs":function(e,t,o){"use strict";function r(e){return function(t,o,r){"function"==typeof t?e(t.prototype,void 0):e(t,o)}}t.a=r},"./node_modules/@dojo/framework/widget-core/decorators/inject.mjs":function(e,t,o){"use strict";t.a=d;var r=o("./node_modules/@dojo/framework/shim/WeakMap.mjs"),s=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs");const i=new r.a;function d({name:e,getProperties:t}){return Object(s.a)((o,r)=>{Object(n.a)(function(o){const r=this.registry.getInjector(e);if(r){const{injector:e,invalidator:s}=r,n=i.get(this)||[];return 0===n.length&&i.set(this,n),-1===n.indexOf(r)&&(this.own(s.on("invalidate",()=>{this.invalidate()})),n.push(r)),t(e(),o)}})(o)})}},"./node_modules/@dojo/framework/widget-core/diff.mjs":function(e,t,o){"use strict";t.b=i,t.a=function(e,t){let o;o="function"==typeof t?t._type===r.b?n(e,t):function(e,t){return{changed:!1,value:t}}(0,t):s(t)?i(e,t):n(e,t);return o};var r=o("./node_modules/@dojo/framework/widget-core/Registry.mjs");function s(e){return"[object Object]"===Object.prototype.toString.call(e)||Array.isArray(e)}function n(e,t){return{changed:e!==t,value:t}}function i(e,t){let o=!1;const r=e&&s(e),n=t&&s(t);if(!r||!n)return{changed:!0,value:t};const i=Object.keys(e),d=Object.keys(t);return{changed:o=i.length!==d.length||d.some(o=>t[o]!==e[o]),value:t}}},"./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs":function(e,t,o){"use strict";t.a=u;var r,s,n=o("./node_modules/tslib/tslib.es6.js"),i=o("./node_modules/@dojo/framework/core/lang.mjs"),d=o("./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs"),a=o("./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs"),c=o("./node_modules/@dojo/framework/widget-core/d.mjs"),l=o("./node_modules/@dojo/framework/widget-core/vdom.mjs");function u(e){class t extends e{constructor(...e){super(...e),this._root=document.body,this._async=!0,this._projectorProperties={},this._projectionOptions={transitions:d.a},this.root=document.body,this.projectorState=r.Detached}append(e){const t={type:s.Append,root:e};return this._attach(t)}merge(e){const t={type:s.Merge,root:e};return this._attach(t)}set root(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change root element");this._root=e}get root(){return this._root}get async(){return this._async}set async(e){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot change async mode");this._async=e}sandbox(e=document){if(this.projectorState===r.Attached)throw new Error("Projector already attached, cannot create sandbox");this._async=!1;const t=this.root;this.own({destroy:()=>{this._root=t}}),this._attach({root:e.createDocumentFragment(),type:s.Append})}setChildren(e){this.__setChildren__(e)}setProperties(e){this.__setProperties__(e)}__setProperties__(e){this._projectorProperties&&this._projectorProperties.registry!==e.registry&&this._projectorProperties.registry&&this._projectorProperties.registry.destroy(),this._projectorProperties=Object(i.a)({},e),super.__setCoreProperties__({bind:this,baseRegistry:e.registry}),super.__setProperties__(e)}toHtml(){if(this.projectorState!==r.Attached||!this._projection)throw new Error("Projector is not attached, cannot return an HTML string of projection.");return this._projection.domNode.childNodes[0].outerHTML}afterRender(e){let t=e;return"string"!=typeof e&&null!==e&&void 0!==e||(t=Object(c.g)("span",{},[e])),t}destroy(){super.destroy()}_attach({type:e,root:t}){if(t&&(this.root=t),this._attachHandle)return this._attachHandle;this.projectorState=r.Attached;const o={destroy:()=>{this.projectorState===r.Attached&&(this._projection=void 0,this.projectorState=r.Detached)}};switch(this.own(o),this._attachHandle=o,this._projectionOptions=Object.assign({},this._projectionOptions,{sync:!this._async}),e){case s.Append:this._projection=l.a.append(this.root,this,this._projectionOptions);break;case s.Merge:this._projection=l.a.merge(this.root,this,this._projectionOptions)}return this._attachHandle}}return n.a([Object(a.a)()],t.prototype,"afterRender",null),t}!function(e){e[e.Attached=1]="Attached",e[e.Detached=2]="Detached"}(r||(r={})),function(e){e[e.Append=1]="Append",e[e.Merge=2]="Merge"}(s||(s={}))},"./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs":function(e,t,o){"use strict";t.c=function(e){return Object(i.a)(t=>{t.addDecorator("baseThemeClasses",e)})},t.b=function(e,t){const o=new s.a(e);return t.defineInjector(l,e=>(o.setInvalidator(e),()=>o.get())),o},t.a=u;var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/framework/widget-core/Injector.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/inject.mjs"),i=o("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs"),d=o("./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs"),a=o("./node_modules/@dojo/framework/widget-core/diff.mjs");const c=" _key",l=Symbol("theme");function u(e){let t=class extends e{constructor(){super(...arguments),this._registeredBaseThemeKeys=[],this._recalculateClasses=!0,this._theme={}}theme(e){return this._recalculateClasses&&this._recalculateThemeClasses(),Array.isArray(e)?e.map(e=>this._getThemeClass(e)):this._getThemeClass(e)}onPropertiesChanged(){this._recalculateClasses=!0}_getThemeClass(e){if(void 0===e||null===e)return e;const t=this.properties.extraClasses||{},o=this._baseThemeClassesReverseLookup[e];let r=[];return o?(t[o]&&r.push(t[o]),this._theme[o]?r.push(this._theme[o]):r.push(this._registeredBaseTheme[o]),r.join(" ")):(console.warn(`Class name: '${e}' not found in theme`),null)}_recalculateThemeClasses(){const{theme:e={}}=this.properties,t=this.getDecorator("baseThemeClasses");this._registeredBaseTheme||(this._registeredBaseTheme=t.reduce((e,t)=>{const o=c,s=t[o],n=r.b(t,["symbol"==typeof o?o:o+""]);return this._registeredBaseThemeKeys.push(s),Object.assign({},e,n)},{}),this._baseThemeClassesReverseLookup=t.reduce((e,t)=>(Object.keys(t).forEach(o=>{e[t[o]]=o}),e),{})),this._theme=this._registeredBaseThemeKeys.reduce((t,o)=>Object.assign({},t,e[o]),{}),this._recalculateClasses=!1}};return r.a([Object(d.a)("theme",a.b),Object(d.a)("extraClasses",a.b)],t.prototype,"onPropertiesChanged",null),t=r.a([Object(n.a)({name:l,getProperties:(e,t)=>t.theme?{}:{theme:e}})],t)}},"./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"CustomElementChildType",function(){return r}),t.DomToWidgetWrapper=m,t.create=h,t.register=f;var r,s=o("./node_modules/tslib/tslib.es6.js"),n=o("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"),i=o("./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs"),d=o("./node_modules/@dojo/framework/shim/array.mjs"),a=o("./node_modules/@dojo/framework/widget-core/d.mjs"),c=o("./node_modules/@dojo/framework/shim/global.mjs"),l=o("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"),u=o("./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs");function m(e){let t=class extends n.a{render(){const t=Object.keys(this.properties).reduce((e,t)=>{const o=this.properties[t];return 0===t.indexOf("on")&&(t=`__${t}`),e[t]=o,e},{});return Object(a.c)({node:e,props:t,diffType:"dom"})}static get domNode(){return e}};return t=s.a([Object(u.a)()],t)}function h(e,t){const{attributes:o,childType:s,registryFactory:u}=e,h={};return o.forEach(e=>{const t=e.toLowerCase();h[t]=e}),class extends HTMLElement{constructor(){super(...arguments),this._properties={},this._children=[],this._eventProperties={},this._initialised=!1}connectedCallback(){if(this._initialised)return;const o={},{attributes:h,properties:f,events:p}=e;this._properties=Object.assign({},this._properties,this._attributesToProperties(h)),[...h,...f].forEach(e=>{const t=this[e],r=e.replace(/^on/,"__");void 0!==t&&(this._properties[e]=t),r!==e&&(o[r]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}),o[e]={get:()=>this._getProperty(e),set:t=>this._setProperty(e,t)}}),p.forEach(e=>{const t=e.replace(/^on/,"").toLowerCase(),r=e.replace(/^on/,"__on");o[r]={get:()=>this._getEventProperty(e),set:t=>this._setEventProperty(e,t)},this._eventProperties[e]=void 0,this._properties[e]=((...o)=>{const r=this._getEventProperty(e);"function"==typeof r&&r(...o),this.dispatchEvent(new CustomEvent(t,{bubbles:!1,detail:o}))})}),Object.defineProperties(this,o);const g=s===r.TEXT?this.childNodes:this.children;Object(d.a)(g).forEach(e=>{s===r.DOJO?(e.addEventListener("dojo-ce-render",()=>this._render()),e.addEventListener("dojo-ce-connected",()=>this._render()),this._children.push(m(e))):this._children.push(Object(a.c)({node:e,diffType:"dom"}))}),this.addEventListener("dojo-ce-connected",e=>this._childConnected(e));const j=this._properties,_=()=>this.__children__(),y=u(),b=Object(l.b)(this._getTheme(),y);c.a.addEventListener("dojo-theme-set",()=>b.set(this._getTheme()));const w=Object(i.a)(class extends n.a{render(){return Object(a.h)(t,j,_())}});this._projector=new w,this._projector.setProperties({registry:y}),this._projector.append(this),this._initialised=!0,this.dispatchEvent(new CustomEvent("dojo-ce-connected",{bubbles:!0,detail:this}))}_getTheme(){if(c.a&&c.a.dojoce&&c.a.dojoce.theme)return c.a.dojoce.themes[c.a.dojoce.theme]}_childConnected(e){const t=e.detail;if(t.parentNode===this){this._children.some(e=>e.domNode===t)||(t.addEventListener("dojo-ce-render",()=>this._render()),this._children.push(m(t)),this._render())}}_render(){this._projector&&(this._projector.invalidate(),this.dispatchEvent(new CustomEvent("dojo-ce-render",{bubbles:!1,detail:this})))}__properties__(){return Object.assign({},this._properties,this._eventProperties)}__children__(){return s===r.DOJO?this._children.filter(e=>e.domNode.isWidget).map(e=>{const{domNode:t}=e;return Object(a.h)(e,Object.assign({},t.__properties__()),[...t.__children__()])}):this._children}attributeChangedCallback(e,t,o){const r=h[e];this._setProperty(r,o)}_setEventProperty(e,t){this._eventProperties[e]=t}_getEventProperty(e){return this._eventProperties[e]}_setProperty(e,t){"function"==typeof t&&(t[n.b]=!0),this._properties[e]=t,this._render()}_getProperty(e){return this._properties[e]}_attributesToProperties(e){return e.reduce((e,t)=>{const o=t.toLowerCase(),r=this.getAttribute(o);return null!==r&&(e[t]=r),e},{})}static get observedAttributes(){return Object.keys(h)}get isWidget(){return!0}}}function f(e){const t=e.prototype&&e.prototype.__customElementDescriptor;if(!t)throw new Error("Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?");c.a.customElements.define(t.tagName,h(t,e))}!function(e){e.DOJO="DOJO",e.NODE="NODE",e.TEXT="TEXT"}(r||(r={})),t.default=f},"./node_modules/@dojo/framework/widget-core/vdom.mjs":function(e,t,o){"use strict";var r=o("./node_modules/@dojo/framework/shim/global.mjs"),s=o("./node_modules/@dojo/framework/shim/array.mjs"),n=o("./node_modules/@dojo/framework/widget-core/d.mjs"),i=o("./node_modules/@dojo/framework/widget-core/Registry.mjs"),d=o("./node_modules/@dojo/framework/shim/WeakMap.mjs");const a="http://www.w3.org/2000/svg",c="http://www.w3.org/1999/xlink",l=[],u=["focus","blur","scrollIntoView","click"],m=new d.a;t.b=m;const h=new d.a,f=new d.a,p=new d.a;function g(e,t){return Object(n.e)(e)&&Object(n.e)(t)?(!Object(n.d)(e)&&!Object(n.d)(t)||e.domNode===t.domNode)&&(e.tag===t.tag&&e.properties.key===t.properties.key):!(!Object(n.f)(e)||!Object(n.f)(t))&&((void 0!==e.instance||"string"!=typeof t.widgetConstructor)&&(e.widgetConstructor===t.widgetConstructor&&e.properties.key===t.properties.key))}const j=function(){throw new Error("Provide a transitions object to the projectionOptions to do animations")};function _(e){if("string"!=typeof e)throw new Error("Style values must be strings")}function y(e,t,o,r,s,n){const i=p.get(r.projectorInstance),a=i.nodeMap.get(e)||new d.a;if(n){const o=a.get(n);e.removeEventListener(t,o)}let c=o.bind(s);"input"===t&&(c=function(e){o.call(this,e),e.target["oninput-value"]=e.target.value}.bind(s)),e.addEventListener(t,c),a.set(o,c),i.nodeMap.set(e,a)}function b(e,t){if(t){const o=t.split(" ");for(let t=0;t{r[e]()})}}function k(e,t,o,r,s=!1){const n=p.get(r.projectorInstance).nodeMap.get(e);n&&Object.keys(t).forEach(r=>{const i="on"===r.substr(0,2)||s,d=s?r:r.substr(2);if(i&&!o[r]){const o=n.get(t[r]);o&&e.removeEventListener(d,o)}})}function O(e,t,o,r){r.namespace===a&&"href"===t?e.setAttributeNS(c,t,o):"role"===t&&""===o||void 0===o?e.removeAttribute(t):e.setAttribute(t,o)}function P(e,t,o,r){const s=Object.keys(o),n=s.length;for(let i=0;i0)if(c&&0!==c.length){const r=[...o];for(let o=0;o0&&R(r.children,t));else{if(!r.coreProperties){const e=m.get(t);r.coreProperties={bind:t,baseRegistry:e.coreProperties.baseRegistry}}r.children&&r.children.length>0&&R(r.children,t)}o++}else e.splice(o,1)}return e}function A(e,t){if(Object(n.e)(e)&&e.properties){const o=e.properties.enterAnimation;o&&("function"==typeof o?o(e.domNode,e.properties):t.enter(e.domNode,e.properties,o))}}function x(e,t,o){if(Object(n.f)(e)){const r=h.get(e.instance),s=(r?r.dnode.rendered:e.rendered)||l;if(e.instance){m.get(e.instance).onDetach(),h.delete(e.instance)}for(let e=0;e0)for(let r=0;r{let d=void 0,a=o,m=f+1,p=o[f];if(p||(p=t[0],m=1,a=t),p){let t=[p];for(;t.length;){const o=t.shift();if(Object(n.f)(o)){const e=h.get(o.instance);e&&e.dnode.rendered&&t.push(...e.dnode.rendered)}else if(o.domNode){if(o.domNode.parentElement!==e.domNode)break;d=o.domNode;break}0===t.length&&a[m]&&(t.push(a[m]),m++)}}I(l,e,r.slice(j+1),d,i,s),A(l,c);const g=j;u.afterRenderCallbacks.push(()=>{M(r,g,s)})};if(!a||-1===m){p(),j++;continue}const y=()=>{const e=f;if(u.afterRenderCallbacks.push(()=>{M(o,e,s)}),Object(n.f)(a)){const e=h.get(a.instance);e&&(a=e.dnode)}x(a,c,i)};-1!==C(r,a,j+1)?(p(),y(),f++,j++):(y(),f++)}if(d>f)for(m=f;m{M(o,e,s)});let t=o[m];if(Object(n.f)(t)){const e=h.get(t.instance);e&&(t=e.dnode)}x(t,c,i)}return _}function S(e,t,o,r,i,d){if(void 0===t)return;const a=p.get(o.projectorInstance);a.merge&&void 0===d&&(d=Object(s.a)(e.domNode.childNodes));const c=o.transitions;o=Object.assign({},o,{depth:o.depth+1});for(let s=0;s0;)(e=d.shift())&&e.tagName===(l.tag.toUpperCase()||void 0)&&(l.domNode=e)}I(l,e,u,i,o,r)}else I(l,e,u,i,o,r,d);A(l,c)}}function D(e,t,o,r){if(S(t,t.children,r,o,void 0),"function"==typeof t.deferredPropertiesCallback&&void 0===t.inserted&&W(t,r),t.attributes&&t.events){P(e,{},t.attributes,r),E(e,{},t.properties,r,!1),k(e,{},t.events,r,!0);const o=t.events;Object.keys(o).forEach(s=>{y(e,s,o[s],r,t.properties.bind)})}else E(e,{},t.properties,r);if(null!==t.properties.key&&void 0!==t.properties.key){m.get(o).nodeHandler.add(e,`${t.properties.key}`)}t.inserted=!0}function I(e,t,o,r,s,d,c){let l;const u=p.get(s.projectorInstance);if(Object(n.f)(e)){let{widgetConstructor:n}=e;const a=m.get(d);if(!Object(i.d)(n)){const e=a.registry().get(n);if(null===e)return;n=e}const l=new n;e.instance=l,f.set(l,o);const p=m.get(l);p.invalidate=(()=>{p.dirty=!0,!1===p.rendering&&(u.renderQueue.push({instance:l,depth:s.depth}),H(s))}),p.rendering=!0,l.__setCoreProperties__(e.coreProperties),l.__setChildren__(e.children),l.__setProperties__(e.properties);const g=l.__render__();if(p.rendering=!1,g){const o=R(g,l);e.rendered=o,S(t,o,s,l,r,c)}h.set(l,{dnode:e,parentVNode:t}),p.nodeHandler.addRoot(),u.afterRenderCallbacks.push(()=>{p.onAttach()})}else{if(u.merge&&void 0!==u.mergeElement)return l=e.domNode=s.mergeElement,u.mergeElement=void 0,void D(l,e,d,s);const o=t.domNode.ownerDocument;if(e.tag||"string"!=typeof e.text)void 0===e.domNode?("svg"===e.tag&&(s=Object.assign({},s,{namespace:a})),l=void 0!==s.namespace?e.domNode=o.createElementNS(s.namespace,e.tag):e.domNode=e.domNode||o.createElement(e.tag)):l=e.domNode,D(l,e,d,s),void 0!==r?t.domNode.insertBefore(l,r):l.parentNode!==t.domNode&&t.domNode.appendChild(l);else if(void 0!==e.domNode&&t.domNode){const o=e.domNode.ownerDocument.createTextNode(e.text);t.domNode===e.domNode.parentNode?t.domNode.replaceChild(o,e.domNode):(t.domNode.appendChild(o),e.domNode.parentNode&&e.domNode.parentNode.removeChild(e.domNode)),e.domNode=o}else l=e.domNode=o.createTextNode(e.text),void 0!==r?t.domNode.insertBefore(l,r):t.domNode.appendChild(l)}}function L(e,t,o,r,s,i,d){if(Object(n.f)(t)){const{instance:r}=e,{parentVNode:s,dnode:n}=h.get(r),a=n?n.rendered:e.rendered,c=m.get(r);if(c.rendering=!0,r.__setCoreProperties__(t.coreProperties),r.__setChildren__(t.children),r.__setProperties__(t.properties),f.set(r,d),t.instance=r,!0===c.dirty){const e=r.__render__();c.rendering=!1,t.rendered=R(e,r),T(s,i,a,t.rendered,r,o)}else c.rendering=!1,t.rendered=a;h.set(r,{dnode:t,parentVNode:s}),c.nodeHandler.addRoot()}else{if(e===t)return!1;const r=t.domNode=e.domNode;let n=!1,d=!1;if(t.tag||"string"!=typeof t.text){if(t.tag&&0===t.tag.lastIndexOf("svg",0)&&(o=Object.assign({},o,{namespace:a})),e.children!==t.children){const r=R(t.children,s);t.children=r,d=T(t,i,e.children,r,s,o)||d}const n=function(e,t,o){const{diffType:r,properties:s,attributes:n}=o;if(!r||"vdom"===r)return{properties:t.properties,attributes:t.attributes,events:t.events};if("none"===r)return{properties:{},attributes:t.attributes?{}:void 0,events:t.events};let i={properties:{}};return n?(i.attributes={},i.events=t.events,Object.keys(s).forEach(t=>{i.properties[t]=e[t]}),Object.keys(n).forEach(t=>{i.attributes[t]=e.getAttribute(t)}),i):(i.properties=Object.keys(s).reduce((t,o)=>(t[o]=e.getAttribute(o)||e[o],t),{}),i)}(r,e,t);if(t.attributes&&t.events){P(r,n.attributes,t.attributes,o),d=E(r,n.properties,t.properties,o,!1)||d,k(r,n.events,t.events,o,!0);const e=t.events;Object.keys(e).forEach(s=>{y(r,s,e[s],o,t.properties.bind,n.events[s])})}else d=E(r,n.properties,t.properties,o)||d;if(null!==t.properties.key&&void 0!==t.properties.key){m.get(s).nodeHandler.add(r,`${t.properties.key}`)}}else if(t.text!==e.text){const e=r.ownerDocument.createTextNode(t.text);return r.parentNode.replaceChild(e,r),t.domNode=e,n=!0}d&&t.properties&&t.properties.updateAnimation&&t.properties.updateAnimation(r,t.properties,e.properties)}}function W(e,t){e.decoratedDeferredProperties=e.properties;const o=e.deferredPropertiesCallback(!!e.inserted),r=p.get(t.projectorInstance);e.properties=Object.assign({},o,e.decoratedDeferredProperties),r.deferredRenderCallbacks.push(()=>{const o=Object.assign({},e.deferredPropertiesCallback(!!e.inserted),e.decoratedDeferredProperties);E(e.domNode,e.properties,o,t),e.properties=o})}function B(e){const t=p.get(e.projectorInstance);if(t.deferredRenderCallbacks.length)if(e.sync)for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}else r.a.requestAnimationFrame(()=>{for(;t.deferredRenderCallbacks.length;){const e=t.deferredRenderCallbacks.shift();e&&e()}})}function F(e){const t=p.get(e.projectorInstance);if(e.sync)for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}else r.a.requestIdleCallback?r.a.requestIdleCallback(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}}):setTimeout(()=>{for(;t.afterRenderCallbacks.length;){const e=t.afterRenderCallbacks.shift();e&&e()}})}function H(e){const t=p.get(e.projectorInstance);e.sync?$(e):void 0===t.renderScheduled&&(t.renderScheduled=r.a.requestAnimationFrame(()=>{$(e)}))}function $(e){const t=p.get(e.projectorInstance);t.renderScheduled=void 0;const o=[...t.renderQueue];t.renderQueue=[],o.sort((e,t)=>e.depth-t.depth);const r=[];for(;o.length;){const{instance:t}=o.shift();if(h.has(t)&&-1===r.indexOf(t)){r.push(t);const{parentVNode:o,dnode:s}=h.get(t),n=m.get(t),i=f.get(t);L(s,N(t,n),e,0,t,i,i)}}F(e),B(e)}const q={append:function(e,t,o={}){const r=m.get(t),s=function(e,t){const o={namespace:void 0,styleApplyer:function(e,t,o){e.style[t]=o},transitions:{enter:j,exit:j},depth:0,merge:!1,sync:!1,projectorInstance:t};return Object.assign({},o,e)}(o,t),i={afterRenderCallbacks:[],deferredRenderCallbacks:[],nodeMap:new d.a,renderScheduled:void 0,renderQueue:[],merge:o.merge||!1,mergeElement:o.mergeElement};p.set(t,i),s.rootNode=e;const a={tag:"",properties:{},children:void 0,domNode:s.rootNode,type:n.a};const c=N(t,r);return h.set(t,{dnode:c,parentVNode:a}),r.invalidate=(()=>{r.dirty=!0,!1===r.rendering&&(i.renderQueue.push({instance:t,depth:s.depth}),H(s))}),L(c,c,s,0,t,[],[]),i.afterRenderCallbacks.push(()=>{r.onAttach()}),B(s),F(s),{domNode:s.rootNode}},create:function(e,t){return this.append(document.createElement("div"),e,t)},merge:function(e,t,o={}){o.merge=!0,o.mergeElement=e;const r=this.append(e.parentNode,t,o);return p.get(t).merge=!1,r}};t.a=q},"./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js":function(e,t,o){var r=o("./src/menu/Menu.ts"),s=o("./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs").default,n=r.default;n&&s(n)},"./node_modules/process/browser.js":function(e,t){var o,r,s=e.exports={};function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function d(e){if(o===setTimeout)return setTimeout(e,0);if((o===n||!o)&&setTimeout)return o=setTimeout,setTimeout(e,0);try{return o(e,0)}catch(t){try{return o.call(null,e,0)}catch(t){return o.call(this,e,0)}}}!function(){try{o="function"==typeof setTimeout?setTimeout:n}catch(e){o=n}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var a,c=[],l=!1,u=-1;function m(){l&&a&&(l=!1,a.length?c=a.concat(c):u=-1,c.length&&h())}function h(){if(!l){var e=d(m);l=!0;for(var t=c.length;t;){for(a=c,c=[];++u1)for(var o=1;o=0;d--)(s=e[d])&&(i=(n<3?s(i):n>3?s(t,o,i):s(t,o))||i);return n>3&&i&&Object.defineProperty(t,o,i),i}; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use @@ -21,5 +21,5 @@ MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ -Object.setPrototypeOf||Array;Object.assign},"./node_modules/webpack/buildin/global.js":function(e,t){var o;o=function(){return this}();try{o=o||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(o=window)}e.exports=o},"./src/menu/Menu.ts":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"Menu",function(){return c});var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/widget-core/d.mjs"),n=o("./node_modules/@dojo/widget-core/decorators/customElement.mjs"),i=o("./node_modules/@dojo/widget-core/mixins/Themed.mjs"),d=o("./node_modules/@dojo/widget-core/WidgetBase.mjs"),a=o("./src/menu/menu.m.css");o.n(a);let c=class extends(Object(i.a)(d.a)){_onSelected(e,t){this._selectedId=e,this.properties.onSelected(t),this.invalidate()}render(){const e=this.children.map((e,t)=>{if(e){const o={onSelected:e=>{this._onSelected(t,e)}};void 0!==this._selectedId&&(o.selected=t===this._selectedId),e.properties=Object.assign({},e.properties,o)}return e});return Object(s.g)("nav",{classes:this.theme(a.root)},[Object(s.g)("ol",{classes:this.theme(a.menuContainer)},e)])}};c=r.a([Object(n.a)({tag:"demo-menu",events:["onSelected"]}),Object(i.c)(a)],c),t.default=c},"./src/menu/menu.m.css":function(e,t){e.exports={" _key":"test-app/menu",root:"_3bA6jdSn",menuContainer:"_1eoGfqku"}},0:function(e,t,o){e.exports=o("./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js")}}); +Object.setPrototypeOf||Array;Object.assign},"./node_modules/webpack/buildin/global.js":function(e,t){var o;o=function(){return this}();try{o=o||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(o=window)}e.exports=o},"./src/menu/Menu.ts":function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"Menu",function(){return c});var r=o("./node_modules/tslib/tslib.es6.js"),s=o("./node_modules/@dojo/framework/widget-core/d.mjs"),n=o("./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs"),i=o("./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs"),d=o("./node_modules/@dojo/framework/widget-core/WidgetBase.mjs"),a=o("./src/menu/menu.m.css");o.n(a);let c=class extends(Object(i.a)(d.a)){_onSelected(e,t){this._selectedId=e,this.properties.onSelected(t),this.invalidate()}render(){const e=this.children.map((e,t)=>{if(e){const o={onSelected:e=>{this._onSelected(t,e)}};void 0!==this._selectedId&&(o.selected=t===this._selectedId),e.properties=Object.assign({},e.properties,o)}return e});return Object(s.g)("nav",{classes:this.theme(a.root)},[Object(s.g)("ol",{classes:this.theme(a.menuContainer)},e)])}};c=r.a([Object(n.a)({tag:"demo-menu",events:["onSelected"]}),Object(i.c)(a)],c),t.default=c},"./src/menu/menu.m.css":function(e,t){e.exports={" _key":"test-app/menu",root:"_3bA6jdSn",menuContainer:"_1eoGfqku"}},0:function(e,t,o){e.exports=o("./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js")}}); //# sourceMappingURL=menu-1.0.0.js.map \ No newline at end of file diff --git a/test-app/fixtures/windows/dist/menu/menu-1.0.0.js.map b/test-app/fixtures/windows/dist/menu/menu-1.0.0.js.map index 6765c9b..ee6d512 100644 --- a/test-app/fixtures/windows/dist/menu/menu-1.0.0.js.map +++ b/test-app/fixtures/windows/dist/menu/menu-1.0.0.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 3e984433321e15a3bb9b","webpack:///./node_modules/@dojo/core/Destroyable.mjs","webpack:///./node_modules/@dojo/core/Evented.mjs","webpack:///./node_modules/@dojo/core/lang.mjs","webpack:///./node_modules/@dojo/has/has.mjs","webpack:///./node_modules/@dojo/shim/Map.mjs","webpack:///./node_modules/@dojo/shim/Promise.mjs","webpack:///./node_modules/@dojo/shim/Symbol.mjs","webpack:///./node_modules/@dojo/shim/WeakMap.mjs","webpack:///./node_modules/@dojo/shim/array.mjs","webpack:///./node_modules/@dojo/shim/global.mjs","webpack:///./node_modules/@dojo/shim/number.mjs","webpack:///./node_modules/@dojo/shim/object.mjs","webpack:///./node_modules/@dojo/shim/string.mjs","webpack:///./node_modules/@dojo/shim/support/has.mjs","webpack:///./node_modules/@dojo/shim/support/queue.mjs","webpack:///./node_modules/@dojo/shim/support/util.mjs","webpack:///./node_modules/@dojo/widget-core/Injector.mjs","webpack:///./node_modules/@dojo/widget-core/NodeHandler.mjs","webpack:///./node_modules/@dojo/widget-core/Registry.mjs","webpack:///./node_modules/@dojo/widget-core/RegistryHandler.mjs","webpack:///./node_modules/@dojo/widget-core/WidgetBase.mjs","webpack:///./node_modules/@dojo/widget-core/animations/cssTransitions.mjs","webpack:///./node_modules/@dojo/widget-core/d.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/afterRender.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/customElement.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/diffProperty.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs","webpack:///./node_modules/@dojo/widget-core/decorators/inject.mjs","webpack:///./node_modules/@dojo/widget-core/diff.mjs","webpack:///./node_modules/@dojo/widget-core/mixins/Projector.mjs","webpack:///./node_modules/@dojo/widget-core/mixins/Themed.mjs","webpack:///./node_modules/@dojo/widget-core/registerCustomElement.mjs","webpack:///./node_modules/@dojo/widget-core/vdom.mjs","webpack:///./node_modules/@dojo/cli-build-widget/template/custom-element.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/menu/Menu.ts","webpack:///./src/menu/menu.m.css?ec11"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","noop","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_Promise__","resolve","destroyed","Error","Destroyable","[object Object]","this","handles","handle","Array","isArray","__WEBPACK_IMPORTED_MODULE_0__lang__","_handles","push","splice","indexOf","destroy","forEach","own","__webpack_exports__","regexMap","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Map__","Evented","__WEBPACK_IMPORTED_MODULE_1__Destroyable__","super","arguments","listenersMap","event","methods","type","globString","targetString","regex","has","RegExp","replace","set","test","isGlobMatch","method","listener","map","_addListener","listeners","destructor","called","createHandle","length","slice","testCache","testFunctions","testThenables","globalScope","window","global","self","staticFeatures","DojoHasEnvironment","staticCache","apply","add","feature","value","overwrite","normalizedFeature","toLowerCase","Boolean","exists","TypeError","then","isFeatureTestThenable","resolvedValue","result","document","location","process","versions","node","Map","__WEBPACK_IMPORTED_MODULE_1__global__","ShimPromise","__WEBPACK_IMPORTED_MODULE_0__global__","Promise","Symbol","wellKnown","__WEBPACK_IMPORTED_MODULE_2__support_util__","for","WeakMap","from","of","copyWithin","fill","find","findIndex","includes","__WEBPACK_IMPORTED_MODULE_4__support_util__","globalObject","Math","pow","assign","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","is","keys","getOwnPropertyDescriptors","entries","values","fromCodePoint","raw","codePointAt","endsWith","normalize","repeat","startsWith","padEnd","padStart","String","__WEBPACK_IMPORTED_MODULE_0__dojo_has_has__","every","key","Number","POSITIVE_INFINITY","e","imul","Observable","Set","getCallSite","callSite","substitutions","key1","key2","freeze","postMessage","requestAnimationFrame","setImmediate","MutationObserver","WebKitMutationObserver","example","createElement","observer","observe","attributes","style","setProperty","takeRecords","undefined","Animation","KeyframeEffect","executeTask","item","isActive","callback","getQueueHandle","enqueue","queue","addEventListener","source","data","stopPropagation","shift","queueTask","id","queueAnimationTask","rafId","bind","cancelAnimationFrame","writable","nativeFunction","target","args","Injector","__WEBPACK_IMPORTED_MODULE_0__dojo_core_Evented__","payload","_payload","invalidator","_invalidator","NodeEventType","_nodeMap","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_Map__","element","emit","Widget","Projector","clear","WIDGET_BASE_TYPE","__WEBPACK_IMPORTED_MODULE_2__dojo_shim_Symbol__","isWidgetBaseConstructor","_type","Registry","__WEBPACK_IMPORTED_MODULE_3__dojo_core_Evented__","widgetLabel","action","label","_widgetRegistry","toString","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Promise__","widgetCtor","emitLoadedEvent","error","injectorFactory","_injectorRegistry","injectorItem","injector","promise","default","isWidgetConstructorDefaultExport","hasInjector","__WEBPACK_IMPORTED_MODULE_1__dojo_core_Evented__","_registry","__WEBPACK_IMPORTED_MODULE_2__Registry__","_registryWidgetLabelMap","_registryInjectorLabelMap","baseRegistry","delete","base","widget","define","defineInjector","globalPrecedence","_get","getFunctionName","labelMap","registries","registry","registeredLabels","on","decoratorMap","boundAuto","__WEBPACK_IMPORTED_MODULE_4__diff__","noBind","WidgetBase","_initialProperties","_changedPropertyKeys","_nodeHandler","__WEBPACK_IMPORTED_MODULE_6__NodeHandler__","_children","_decoratorCache","_properties","_boundRenderFunc","render","_boundInvalidate","invalidate","__WEBPACK_IMPORTED_MODULE_7__vdom__","dirty","onAttach","onDetach","nodeHandler","coreProperties","rendering","inputProperties","_runAfterConstructors","MetaType","_metaMap","cached","properties","changedPropertyKeys","instanceData","__WEBPACK_IMPORTED_MODULE_5__RegistryHandler__","originalProperties","_runBeforeProperties","registeredDiffPropertyNames","getDecorator","propertyNames","allProperties","checkedProperties","diffPropertyResults","runReactions","propertyName","previousProperty","newProperty","_bindFunctionProperty","diffFunctions","changed","_mapDiffPropertyReactions","reaction","previousProperties","newProperties","children","dNode","_runBeforeRenders","runAfterRenders","__WEBPACK_IMPORTED_MODULE_3__d__","decoratorKey","decoratorList","constructor","specificDecoratorList","decorators","allDecorators","instanceMap","unshift","getPrototypeOf","_buildDecoratorList","reduce","reactionPropertyMap","reactionArguments","__WEBPACK_IMPORTED_MODULE_8__Registry__","_bindFunctionPropertyMap","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_WeakMap__","bindInfo","boundFunc","scope","beforeProperties","beforePropertiesFunction","beforeRenders","beforeRenderFunction","updatedRender","console","warn","afterRenders","afterRenderFunction","meta","afterRender","afterConstructors","afterConstructor","pop","browserSpecificTransitionEndEventName","browserSpecificAnimationEndEventName","initialize","determineBrowserStyleNames","runAndCleanUp","startAnimation","finishAnimation","finished","transitionEnd","removeEventListener","enter","enterAnimation","activeClass","enterAnimationActive","classList","remove","exit","exitAnimation","removeNode","exitAnimationActive","child","DOMVNODE","widgetConstructor","WNODE","tag","propertiesOrChildren","deferredPropertiesCallback","VNODE","attrs","props","diffType","isElementNode","tagName","events","domNode","text","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_Symbol__","isWNode","isVNode","__WEBPACK_IMPORTED_MODULE_0__handleDecorator__","propertyKey","addDecorator","alwaysRender","__WEBPACK_IMPORTED_MODULE_1__beforeProperties__","customElement","childType","__WEBPACK_IMPORTED_MODULE_0__registerCustomElement__","DOJO","registryFactory","__WEBPACK_IMPORTED_MODULE_1__Registry__","__customElementDescriptor","diffProperty","diffFunction","reactionFunction","handleDecorator","handler","descriptor","registeredInjectorsMap","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_WeakMap__","inject","getProperties","__WEBPACK_IMPORTED_MODULE_1__handleDecorator__","__WEBPACK_IMPORTED_MODULE_2__beforeProperties__","getInjector","registeredInjectors","__WEBPACK_IMPORTED_MODULE_0__Registry__","reference","ignore","isObjectOrArray","shallow","validOldProperty","validNewProperty","previousKeys","newKeys","some","ProjectorAttachState","AttachType","ProjectorMixin","Base","_root","body","_async","_projectorProperties","_projectionOptions","transitions","__WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__","root","projectorState","Detached","options","Append","_attach","Merge","Attached","async","doc","previousRoot","createDocumentFragment","__setChildren__","__setProperties__","__WEBPACK_IMPORTED_MODULE_1__dojo_core_lang__","__setCoreProperties__","_projection","childNodes","outerHTML","__WEBPACK_IMPORTED_MODULE_4__d__","_attachHandle","sync","__WEBPACK_IMPORTED_MODULE_5__vdom__","append","merge","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__","Function","theme","__WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__","themeRegistry","themeInjector","__WEBPACK_IMPORTED_MODULE_1__Injector__","INJECTED_THEME_KEY","setInvalidator","THEME_KEY","ThemedMixin","Themed","_registeredBaseThemeKeys","_recalculateClasses","_theme","classes","_recalculateThemeClasses","className","_getThemeClass","extraClasses","themeClassName","_baseThemeClassesReverseLookup","resultClassNames","_registeredBaseTheme","join","baseThemes","finalBaseTheme","baseTheme","_a","currentClassNames","baseClass","themeKey","__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__","__WEBPACK_IMPORTED_MODULE_5__diff__","__WEBPACK_IMPORTED_MODULE_2__decorators_inject__","CustomElementChildType","DomToWidgetWrapper","__WEBPACK_IMPORTED_MODULE_1__WidgetBase__","__WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__","create","WidgetConstructor","attributeMap","attributeName","HTMLElement","_eventProperties","_initialised","domProperties","_attributesToProperties","filteredPropertyName","_getProperty","_setProperty","eventName","_getEventProperty","_setEventProperty","eventCallback","dispatchEvent","CustomEvent","bubbles","detail","defineProperties","TEXT","__WEBPACK_IMPORTED_MODULE_3__dojo_shim_array__","childNode","_render","_childConnected","widgetProperties","renderChildren","__children__","themeContext","__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__","_getTheme","__WEBPACK_IMPORTED_MODULE_5__dojo_shim_global__","__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__","_projector","setProperties","dojoce","themes","parentNode","filter","Child","isWidget","__properties__","oldValue","getAttribute","observedAttributes","register","customElements","NAMESPACE_SVG","NAMESPACE_W3","NAMESPACE_XLINK","emptyArray","widgetInstanceMap","__WEBPACK_IMPORTED_MODULE_4__dojo_shim_WeakMap__","projectorStateMap","same","dnode1","dnode2","__WEBPACK_IMPORTED_MODULE_2__d__","instance","missingTransition","checkStyleValue","styleValue","updateEvent","currentValue","projectionOptions","previousValue","projectorInstance","eventMap","nodeMap","previousEvent","evt","addClasses","classNames","split","removeClasses","focusNode","propValue","deferredRenderCallbacks","focus","removeOrphanedEvents","onlyEvents","propName","isEvent","substr","updateAttribute","attrName","attrValue","namespace","setAttributeNS","removeAttribute","setAttribute","updateAttributes","previousAttributes","attrNames","attrCount","updateProperties","includesEventsAndAttributes","propertiesUpdated","propNames","propCount","previousClasses","currentClasses","newClasses","previousClassName","classIndex","styleNames","styleCount","j","styleName","newStyleValue","styleApplyer","domValue","lastIndexOf","findIndexOfChild","sameAs","start","toInternalWNode","rendered","filterAndDecorateChildren","nodeAdded","dnode","nodeToRemove","pointerEvents","removeDomNode","removeChild","checkDistinguishable","indexToCheck","parentInstance","nodeIdentifier","parentName","updateChildren","parentVNode","oldChildren","newChildren","oldChildrenLength","newChildrenLength","depth","oldIndex","newIndex","textUpdated","oldChild","newChild","inserted","addDeferredProperties","updateDom","findOldIndex","addChild","insertBeforeDomNode","nextIndex","insertBeforeChildren","insertBefore","createDom","afterRenderCallbacks","childToRemove","addChildren","__WEBPACK_IMPORTED_MODULE_1__dojo_shim_array__","domElement","toUpperCase","initPropertiesAndChildren","parentInstanceData","__WEBPACK_IMPORTED_MODULE_3__Registry__","renderQueue","scheduleRender","__render__","filteredRendered","addRoot","mergeElement","ownerDocument","createElementNS","appendChild","newDomNode","createTextNode","replaceChild","previous","previousRendered","updated","current","buildPreviousProperties","updateAnimation","vnode","decoratedDeferredProperties","runDeferredRenderCallbacks","__WEBPACK_IMPORTED_MODULE_0__dojo_shim_global__","runAfterRenderCallbacks","requestIdleCallback","setTimeout","renderScheduled","renders","sort","a","b","previouslyRendered","dom","finalProjectorOptions","projectorOptions","defaults","getProjectionOptions","rootNode","projection","widgetFactory","registerCustomElement","defaultExport","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","nextTick","title","browser","env","argv","version","addListener","once","off","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","t","desc","r","Reflect","decorate","metadataKey","metadataValue","metadata","setPrototypeOf","g","eval","Menu","__WEBPACK_IMPORTED_MODULE_3__dojo_widget_core_mixins_Themed__","__WEBPACK_IMPORTED_MODULE_4__dojo_widget_core_WidgetBase__","_selectedId","onSelected","items","index","_onSelected","selected","__WEBPACK_IMPORTED_MODULE_1__dojo_widget_core_d__","__WEBPACK_IMPORTED_MODULE_5__menu_m_css__","__WEBPACK_IMPORTED_MODULE_2__dojo_widget_core_decorators_customElement__"," _key","menuContainer"],"mappings":"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","file":"menu-1.0.0.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 3e984433321e15a3bb9b","import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/Destroyable.mjs\n// module id = ./node_modules/@dojo/core/Destroyable.mjs\n// module chunks = menu","import Map from '@dojo/shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n methods.forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/Evented.mjs\n// module id = ./node_modules/@dojo/core/Evented.mjs\n// module chunks = menu","import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/core/lang.mjs\n// module id = ./node_modules/@dojo/core/lang.mjs\n// module chunks = menu","function isFeatureTestThenable(value) {\r\n return value && value.then;\r\n}\r\n/**\r\n * A cache of results of feature tests\r\n */\r\nexport const testCache = {};\r\n/**\r\n * A cache of the un-resolved feature tests\r\n */\r\nexport const testFunctions = {};\r\n/**\r\n * A cache of unresolved thenables (probably promises)\r\n * @type {{}}\r\n */\r\nconst testThenables = {};\r\n/**\r\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\r\n */\r\nconst globalScope = (function () {\r\n /* istanbul ignore else */\r\n if (typeof window !== 'undefined') {\r\n // Browsers\r\n return window;\r\n }\r\n else if (typeof global !== 'undefined') {\r\n // Node\r\n return global;\r\n }\r\n else if (typeof self !== 'undefined') {\r\n // Web workers\r\n return self;\r\n }\r\n /* istanbul ignore next */\r\n return {};\r\n})();\r\n/* Grab the staticFeatures if there are available */\r\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\r\n/* Cleaning up the DojoHasEnviornment */\r\nif ('DojoHasEnvironment' in globalScope) {\r\n delete globalScope.DojoHasEnvironment;\r\n}\r\n/**\r\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\r\n * returns a map.\r\n *\r\n * @param value The value to guard for\r\n */\r\nfunction isStaticFeatureFunction(value) {\r\n return typeof value === 'function';\r\n}\r\n/**\r\n * The cache of asserted features that were available in the global scope when the\r\n * module loaded\r\n */\r\nconst staticCache = staticFeatures\r\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\r\n : {}; /* Providing an empty cache, if none was in the environment\r\n\r\n/**\r\n* AMD plugin function.\r\n*\r\n* Conditional loads modules based on a has feature test value.\r\n*\r\n* @param resourceId Gives the resolved module id to load.\r\n* @param require The loader require function with respect to the module that contained the plugin resource in its\r\n* dependency list.\r\n* @param load Callback to loader that consumes result of plugin demand.\r\n*/\r\nexport function load(resourceId, require, load, config) {\r\n resourceId ? require([resourceId], load) : load();\r\n}\r\n/**\r\n * AMD plugin function.\r\n *\r\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\r\n * value(s).\r\n *\r\n * @param resourceId The id of the module\r\n * @param normalize Resolves a relative module id into an absolute module id\r\n */\r\nexport function normalize(resourceId, normalize) {\r\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\r\n let i = 0;\r\n function get(skip) {\r\n const term = tokens[i++];\r\n if (term === ':') {\r\n // empty string module name, resolves to null\r\n return null;\r\n }\r\n else {\r\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\r\n if (tokens[i++] === '?') {\r\n if (!skip && has(term)) {\r\n // matched the feature, get the first value from the options\r\n return get();\r\n }\r\n else {\r\n // did not match, get the second value, passing over the first\r\n get(true);\r\n return get(skip);\r\n }\r\n }\r\n // a module\r\n return term;\r\n }\r\n }\r\n const id = get();\r\n return id && normalize(id);\r\n}\r\n/**\r\n * Check if a feature has already been registered\r\n *\r\n * @param feature the name of the feature\r\n */\r\nexport function exists(feature) {\r\n const normalizedFeature = feature.toLowerCase();\r\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\r\n}\r\n/**\r\n * Register a new test for a named feature.\r\n *\r\n * @example\r\n * has.add('dom-addeventlistener', !!document.addEventListener);\r\n *\r\n * @example\r\n * has.add('touch-events', function () {\r\n * return 'ontouchstart' in document\r\n * });\r\n *\r\n * @param feature the name of the feature\r\n * @param value the value reported of the feature, or a function that will be executed once on first test\r\n * @param overwrite if an existing value should be overwritten. Defaults to false.\r\n */\r\nexport function add(feature, value, overwrite = false) {\r\n const normalizedFeature = feature.toLowerCase();\r\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\r\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\r\n }\r\n if (typeof value === 'function') {\r\n testFunctions[normalizedFeature] = value;\r\n }\r\n else if (isFeatureTestThenable(value)) {\r\n testThenables[feature] = value.then((resolvedValue) => {\r\n testCache[feature] = resolvedValue;\r\n delete testThenables[feature];\r\n }, () => {\r\n delete testThenables[feature];\r\n });\r\n }\r\n else {\r\n testCache[normalizedFeature] = value;\r\n delete testFunctions[normalizedFeature];\r\n }\r\n}\r\n/**\r\n * Return the current value of a named feature.\r\n *\r\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\r\n */\r\nexport default function has(feature) {\r\n let result;\r\n const normalizedFeature = feature.toLowerCase();\r\n if (normalizedFeature in staticCache) {\r\n result = staticCache[normalizedFeature];\r\n }\r\n else if (testFunctions[normalizedFeature]) {\r\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\r\n delete testFunctions[normalizedFeature];\r\n }\r\n else if (normalizedFeature in testCache) {\r\n result = testCache[normalizedFeature];\r\n }\r\n else if (feature in testThenables) {\r\n return false;\r\n }\r\n else {\r\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\r\n }\r\n return result;\r\n}\r\n/*\r\n * Out of the box feature tests\r\n */\r\n/* Environments */\r\n/* Used as a value to provide a debug only code path */\r\nadd('debug', true);\r\n/* Detects if the environment is \"browser like\" */\r\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\r\n/* Detects if the environment appears to be NodeJS */\r\nadd('host-node', function () {\r\n if (typeof process === 'object' && process.versions && process.versions.node) {\r\n return process.versions.node;\r\n }\r\n});\r\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/has/has.mjs\n// module id = ./node_modules/@dojo/has/has.mjs\n// module chunks = menu","import { isArrayLike, ShimIterator } from './iterator';\r\nimport global from './global';\r\nimport { is as objectIs } from './object';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let Map = global.Map;\r\nif (!true) {\r\n Map = (_a = class Map {\r\n constructor(iterable) {\r\n this._keys = [];\r\n this._values = [];\r\n this[Symbol.toStringTag] = 'Map';\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const value = iterable[i];\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n else {\r\n for (const value of iterable) {\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * An alternative to Array.prototype.indexOf using Object.is\r\n * to check for equality. See http://mzl.la/1zuKO2V\r\n */\r\n _indexOfKey(keys, key) {\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n if (objectIs(keys[i], key)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n get size() {\r\n return this._keys.length;\r\n }\r\n clear() {\r\n this._keys.length = this._values.length = 0;\r\n }\r\n delete(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._keys.splice(index, 1);\r\n this._values.splice(index, 1);\r\n return true;\r\n }\r\n entries() {\r\n const values = this._keys.map((key, i) => {\r\n return [key, this._values[i]];\r\n });\r\n return new ShimIterator(values);\r\n }\r\n forEach(callback, context) {\r\n const keys = this._keys;\r\n const values = this._values;\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n callback.call(context, values[i], keys[i], this);\r\n }\r\n }\r\n get(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n return index < 0 ? undefined : this._values[index];\r\n }\r\n has(key) {\r\n return this._indexOfKey(this._keys, key) > -1;\r\n }\r\n keys() {\r\n return new ShimIterator(this._keys);\r\n }\r\n set(key, value) {\r\n let index = this._indexOfKey(this._keys, key);\r\n index = index < 0 ? this._keys.length : index;\r\n this._keys[index] = key;\r\n this._values[index] = value;\r\n return this;\r\n }\r\n values() {\r\n return new ShimIterator(this._values);\r\n }\r\n [Symbol.iterator]() {\r\n return this.entries();\r\n }\r\n },\r\n _a[Symbol.species] = _a,\r\n _a);\r\n}\r\nexport default Map;\r\nvar _a;\r\n//# sourceMappingURL=Map.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Map.mjs\n// module id = ./node_modules/@dojo/shim/Map.mjs\n// module chunks = menu","import global from './global';\r\nimport { queueMicroTask } from './support/queue';\r\nimport './Symbol';\r\nimport has from './support/has';\r\nexport let ShimPromise = global.Promise;\r\nexport const isThenable = function isThenable(value) {\r\n return value && typeof value.then === 'function';\r\n};\r\nif (!true) {\r\n global.Promise = ShimPromise = (_a = class Promise {\r\n /**\r\n * Creates a new Promise.\r\n *\r\n * @constructor\r\n *\r\n * @param executor\r\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\r\n * starting the asynchronous operation when it is invoked.\r\n *\r\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\r\n * successfully, or the `reject` function when the operation fails.\r\n */\r\n constructor(executor) {\r\n /**\r\n * The current state of this promise.\r\n */\r\n this.state = 1 /* Pending */;\r\n this[Symbol.toStringTag] = 'Promise';\r\n /**\r\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\r\n */\r\n let isChained = false;\r\n /**\r\n * Whether or not this promise is in a resolved state.\r\n */\r\n const isResolved = () => {\r\n return this.state !== 1 /* Pending */ || isChained;\r\n };\r\n /**\r\n * Callbacks that should be invoked once the asynchronous operation has completed.\r\n */\r\n let callbacks = [];\r\n /**\r\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\r\n * enqueues callbacks for execution on the next event loop turn.\r\n */\r\n let whenFinished = function (callback) {\r\n if (callbacks) {\r\n callbacks.push(callback);\r\n }\r\n };\r\n /**\r\n * Settles this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const settle = (newState, value) => {\r\n // A promise can only be settled once.\r\n if (this.state !== 1 /* Pending */) {\r\n return;\r\n }\r\n this.state = newState;\r\n this.resolvedValue = value;\r\n whenFinished = queueMicroTask;\r\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\r\n // wait an extra turn.\r\n if (callbacks && callbacks.length > 0) {\r\n queueMicroTask(function () {\r\n if (callbacks) {\r\n let count = callbacks.length;\r\n for (let i = 0; i < count; ++i) {\r\n callbacks[i].call(null);\r\n }\r\n callbacks = null;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Resolves this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const resolve = (newState, value) => {\r\n if (isResolved()) {\r\n return;\r\n }\r\n if (isThenable(value)) {\r\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\r\n isChained = true;\r\n }\r\n else {\r\n settle(newState, value);\r\n }\r\n };\r\n this.then = (onFulfilled, onRejected) => {\r\n return new Promise((resolve, reject) => {\r\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\r\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\r\n // event loop.\r\n whenFinished(() => {\r\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\r\n if (typeof callback === 'function') {\r\n try {\r\n resolve(callback(this.resolvedValue));\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n else if (this.state === 2 /* Rejected */) {\r\n reject(this.resolvedValue);\r\n }\r\n else {\r\n resolve(this.resolvedValue);\r\n }\r\n });\r\n });\r\n };\r\n try {\r\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\r\n }\r\n catch (error) {\r\n settle(2 /* Rejected */, error);\r\n }\r\n }\r\n static all(iterable) {\r\n return new this(function (resolve, reject) {\r\n const values = [];\r\n let complete = 0;\r\n let total = 0;\r\n let populating = true;\r\n function fulfill(index, value) {\r\n values[index] = value;\r\n ++complete;\r\n finish();\r\n }\r\n function finish() {\r\n if (populating || complete < total) {\r\n return;\r\n }\r\n resolve(values);\r\n }\r\n function processItem(index, item) {\r\n ++total;\r\n if (isThenable(item)) {\r\n // If an item Promise rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(fulfill.bind(null, index), reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(fulfill.bind(null, index));\r\n }\r\n }\r\n let i = 0;\r\n for (const value of iterable) {\r\n processItem(i, value);\r\n i++;\r\n }\r\n populating = false;\r\n finish();\r\n });\r\n }\r\n static race(iterable) {\r\n return new this(function (resolve, reject) {\r\n for (const item of iterable) {\r\n if (item instanceof Promise) {\r\n // If a Promise item rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(resolve, reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(resolve);\r\n }\r\n }\r\n });\r\n }\r\n static reject(reason) {\r\n return new this(function (resolve, reject) {\r\n reject(reason);\r\n });\r\n }\r\n static resolve(value) {\r\n return new this(function (resolve) {\r\n resolve(value);\r\n });\r\n }\r\n catch(onRejected) {\r\n return this.then(undefined, onRejected);\r\n }\r\n },\r\n _a[Symbol.species] = ShimPromise,\r\n _a);\r\n}\r\nexport default ShimPromise;\r\nvar _a;\r\n//# sourceMappingURL=Promise.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Promise.mjs\n// module id = ./node_modules/@dojo/shim/Promise.mjs\n// module chunks = menu","import has from './support/has';\r\nimport global from './global';\r\nimport { getValueDescriptor } from './support/util';\r\nexport let Symbol = global.Symbol;\r\nif (!true) {\r\n /**\r\n * Throws if the value is not a symbol, used internally within the Shim\r\n * @param {any} value The value to check\r\n * @return {symbol} Returns the symbol or throws\r\n */\r\n const validateSymbol = function validateSymbol(value) {\r\n if (!isSymbol(value)) {\r\n throw new TypeError(value + ' is not a symbol');\r\n }\r\n return value;\r\n };\r\n const defineProperties = Object.defineProperties;\r\n const defineProperty = Object.defineProperty;\r\n const create = Object.create;\r\n const objPrototype = Object.prototype;\r\n const globalSymbols = {};\r\n const getSymbolName = (function () {\r\n const created = create(null);\r\n return function (desc) {\r\n let postfix = 0;\r\n let name;\r\n while (created[String(desc) + (postfix || '')]) {\r\n ++postfix;\r\n }\r\n desc += String(postfix || '');\r\n created[desc] = true;\r\n name = '@@' + desc;\r\n // FIXME: Temporary guard until the duplicate execution when testing can be\r\n // pinned down.\r\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\r\n defineProperty(objPrototype, name, {\r\n set: function (value) {\r\n defineProperty(this, name, getValueDescriptor(value));\r\n }\r\n });\r\n }\r\n return name;\r\n };\r\n })();\r\n const InternalSymbol = function Symbol(description) {\r\n if (this instanceof InternalSymbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n return Symbol(description);\r\n };\r\n Symbol = global.Symbol = function Symbol(description) {\r\n if (this instanceof Symbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n const sym = Object.create(InternalSymbol.prototype);\r\n description = description === undefined ? '' : String(description);\r\n return defineProperties(sym, {\r\n __description__: getValueDescriptor(description),\r\n __name__: getValueDescriptor(getSymbolName(description))\r\n });\r\n };\r\n /* Decorate the Symbol function with the appropriate properties */\r\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\r\n if (globalSymbols[key]) {\r\n return globalSymbols[key];\r\n }\r\n return (globalSymbols[key] = Symbol(String(key)));\r\n }));\r\n defineProperties(Symbol, {\r\n keyFor: getValueDescriptor(function (sym) {\r\n let key;\r\n validateSymbol(sym);\r\n for (key in globalSymbols) {\r\n if (globalSymbols[key] === sym) {\r\n return key;\r\n }\r\n }\r\n }),\r\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\r\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\r\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\r\n match: getValueDescriptor(Symbol.for('match'), false, false),\r\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\r\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\r\n search: getValueDescriptor(Symbol.for('search'), false, false),\r\n species: getValueDescriptor(Symbol.for('species'), false, false),\r\n split: getValueDescriptor(Symbol.for('split'), false, false),\r\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\r\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\r\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\r\n });\r\n /* Decorate the InternalSymbol object */\r\n defineProperties(InternalSymbol.prototype, {\r\n constructor: getValueDescriptor(Symbol),\r\n toString: getValueDescriptor(function () {\r\n return this.__name__;\r\n }, false, false)\r\n });\r\n /* Decorate the Symbol.prototype */\r\n defineProperties(Symbol.prototype, {\r\n toString: getValueDescriptor(function () {\r\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\r\n }),\r\n valueOf: getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n })\r\n });\r\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n }));\r\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\r\n}\r\n/**\r\n * A custom guard function that determines if an object is a symbol or not\r\n * @param {any} value The value to check to see if it is a symbol or not\r\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\r\n */\r\nexport function isSymbol(value) {\r\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\r\n}\r\n/**\r\n * Fill any missing well known symbols if the native Symbol is missing them\r\n */\r\n[\r\n 'hasInstance',\r\n 'isConcatSpreadable',\r\n 'iterator',\r\n 'species',\r\n 'replace',\r\n 'search',\r\n 'split',\r\n 'match',\r\n 'toPrimitive',\r\n 'toStringTag',\r\n 'unscopables',\r\n 'observable'\r\n].forEach((wellKnown) => {\r\n if (!Symbol[wellKnown]) {\r\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\r\n }\r\n});\r\nexport default Symbol;\r\n//# sourceMappingURL=Symbol.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/Symbol.mjs\n// module id = ./node_modules/@dojo/shim/Symbol.mjs\n// module chunks = menu","import global from './global';\r\nimport { isArrayLike } from './iterator';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let WeakMap = global.WeakMap;\r\nif (!true) {\r\n const DELETED = {};\r\n const getUID = function getUID() {\r\n return Math.floor(Math.random() * 100000000);\r\n };\r\n const generateName = (function () {\r\n let startId = Math.floor(Date.now() % 100000000);\r\n return function generateName() {\r\n return '__wm' + getUID() + (startId++ + '__');\r\n };\r\n })();\r\n WeakMap = class WeakMap {\r\n constructor(iterable) {\r\n this[Symbol.toStringTag] = 'WeakMap';\r\n this._name = generateName();\r\n this._frozenEntries = [];\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const item = iterable[i];\r\n this.set(item[0], item[1]);\r\n }\r\n }\r\n else {\r\n for (const [key, value] of iterable) {\r\n this.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n _getFrozenEntryIndex(key) {\r\n for (let i = 0; i < this._frozenEntries.length; i++) {\r\n if (this._frozenEntries[i].key === key) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n delete(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n entry.value = DELETED;\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n this._frozenEntries.splice(frozenIndex, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n get(key) {\r\n if (key === undefined || key === null) {\r\n return undefined;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n return entry.value;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return this._frozenEntries[frozenIndex].value;\r\n }\r\n }\r\n has(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n set(key, value) {\r\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\r\n throw new TypeError('Invalid value used as weak map key');\r\n }\r\n let entry = key[this._name];\r\n if (!entry || entry.key !== key) {\r\n entry = Object.create(null, {\r\n key: { value: key }\r\n });\r\n if (Object.isFrozen(key)) {\r\n this._frozenEntries.push(entry);\r\n }\r\n else {\r\n Object.defineProperty(key, this._name, {\r\n value: entry\r\n });\r\n }\r\n }\r\n entry.value = value;\r\n return this;\r\n }\r\n };\r\n}\r\nexport default WeakMap;\r\n//# sourceMappingURL=WeakMap.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/WeakMap.mjs\n// module id = ./node_modules/@dojo/shim/WeakMap.mjs\n// module chunks = menu","import global from './global';\r\nimport { isArrayLike, isIterable } from './iterator';\r\nimport { MAX_SAFE_INTEGER } from './number';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\nexport let from;\r\n/**\r\n * Creates a new array from the function parameters.\r\n *\r\n * @param arguments Any number of arguments for the array\r\n * @return An array from the given arguments\r\n */\r\nexport let of;\r\n/* ES6 Array instance methods */\r\n/**\r\n * Copies data internally within an array or array-like object.\r\n *\r\n * @param target The target array-like object\r\n * @param offset The index to start copying values to; if negative, it counts backwards from length\r\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\r\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\r\n * @return The target\r\n */\r\nexport let copyWithin;\r\n/**\r\n * Fills elements of an array-like object with the specified value.\r\n *\r\n * @param target The target to fill\r\n * @param value The value to fill each element of the target with\r\n * @param start The first index to fill\r\n * @param end The (exclusive) index at which to stop filling\r\n * @return The filled target\r\n */\r\nexport let fill;\r\n/**\r\n * Finds and returns the first instance matching the callback or undefined if one is not found.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning if the current value matches a criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first element matching the callback, or undefined if one does not exist\r\n */\r\nexport let find;\r\n/**\r\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\r\n * or -1 if no values satisfy it.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning true if the current value satisfies its criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\r\n */\r\nexport let findIndex;\r\n/* ES7 Array instance methods */\r\n/**\r\n * Determines whether an array includes a given value\r\n *\r\n * @param target the target array-like object\r\n * @param searchElement the item to search for\r\n * @param fromIndex the starting index to search from\r\n * @return `true` if the array includes the element, otherwise `false`\r\n */\r\nexport let includes;\r\nif (true && true) {\r\n from = global.Array.from;\r\n of = global.Array.of;\r\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\r\n fill = wrapNative(global.Array.prototype.fill);\r\n find = wrapNative(global.Array.prototype.find);\r\n findIndex = wrapNative(global.Array.prototype.findIndex);\r\n}\r\nelse {\r\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\r\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n length = Number(length);\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n /**\r\n * From ES6 7.1.4 ToInteger()\r\n *\r\n * @param value A value to convert\r\n * @return An integer\r\n */\r\n const toInteger = function toInteger(value) {\r\n value = Number(value);\r\n if (isNaN(value)) {\r\n return 0;\r\n }\r\n if (value === 0 || !isFinite(value)) {\r\n return value;\r\n }\r\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\r\n };\r\n /**\r\n * Normalizes an offset against a given length, wrapping it if negative.\r\n *\r\n * @param value The original offset\r\n * @param length The total length to normalize against\r\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\r\n */\r\n const normalizeOffset = function normalizeOffset(value, length) {\r\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\r\n };\r\n from = function from(arrayLike, mapFunction, thisArg) {\r\n if (arrayLike == null) {\r\n throw new TypeError('from: requires an array-like object');\r\n }\r\n if (mapFunction && thisArg) {\r\n mapFunction = mapFunction.bind(thisArg);\r\n }\r\n /* tslint:disable-next-line:variable-name */\r\n const Constructor = this;\r\n const length = toLength(arrayLike.length);\r\n // Support extension\r\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\r\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\r\n return array;\r\n }\r\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\r\n // with the iteration on IE when using a NaN array length.\r\n if (isArrayLike(arrayLike)) {\r\n if (length === 0) {\r\n return [];\r\n }\r\n for (let i = 0; i < arrayLike.length; i++) {\r\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\r\n }\r\n }\r\n else {\r\n let i = 0;\r\n for (const value of arrayLike) {\r\n array[i] = mapFunction ? mapFunction(value, i) : value;\r\n i++;\r\n }\r\n }\r\n if (arrayLike.length !== undefined) {\r\n array.length = length;\r\n }\r\n return array;\r\n };\r\n of = function of(...items) {\r\n return Array.prototype.slice.call(items);\r\n };\r\n copyWithin = function copyWithin(target, offset, start, end) {\r\n if (target == null) {\r\n throw new TypeError('copyWithin: target must be an array-like object');\r\n }\r\n const length = toLength(target.length);\r\n offset = normalizeOffset(toInteger(offset), length);\r\n start = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n let count = Math.min(end - start, length - offset);\r\n let direction = 1;\r\n if (offset > start && offset < start + count) {\r\n direction = -1;\r\n start += count - 1;\r\n offset += count - 1;\r\n }\r\n while (count > 0) {\r\n if (start in target) {\r\n target[offset] = target[start];\r\n }\r\n else {\r\n delete target[offset];\r\n }\r\n offset += direction;\r\n start += direction;\r\n count--;\r\n }\r\n return target;\r\n };\r\n fill = function fill(target, value, start, end) {\r\n const length = toLength(target.length);\r\n let i = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n while (i < end) {\r\n target[i++] = value;\r\n }\r\n return target;\r\n };\r\n find = function find(target, callback, thisArg) {\r\n const index = findIndex(target, callback, thisArg);\r\n return index !== -1 ? target[index] : undefined;\r\n };\r\n findIndex = function findIndex(target, callback, thisArg) {\r\n const length = toLength(target.length);\r\n if (!callback) {\r\n throw new TypeError('find: second argument must be a function');\r\n }\r\n if (thisArg) {\r\n callback = callback.bind(thisArg);\r\n }\r\n for (let i = 0; i < length; i++) {\r\n if (callback(target[i], i, target)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\nif (true) {\r\n includes = wrapNative(global.Array.prototype.includes);\r\n}\r\nelse {\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n length = Number(length);\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n includes = function includes(target, searchElement, fromIndex = 0) {\r\n let len = toLength(target.length);\r\n for (let i = fromIndex; i < len; ++i) {\r\n const currentElement = target[i];\r\n if (searchElement === currentElement ||\r\n (searchElement !== searchElement && currentElement !== currentElement)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n//# sourceMappingURL=array.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/array.mjs\n// module id = ./node_modules/@dojo/shim/array.mjs\n// module chunks = menu","const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/global.mjs\n// module id = ./node_modules/@dojo/shim/global.mjs\n// module chunks = menu","import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/number.mjs\n// module id = ./node_modules/@dojo/shim/number.mjs\n// module chunks = menu","import global from './global';\r\nimport has from './support/has';\r\nimport { isSymbol } from './Symbol';\r\nexport let assign;\r\n/**\r\n * Gets the own property descriptor of the specified object.\r\n * An own property descriptor is one that is defined directly on the object and is not\r\n * inherited from the object's prototype.\r\n * @param o Object that contains the property.\r\n * @param p Name of the property.\r\n */\r\nexport let getOwnPropertyDescriptor;\r\n/**\r\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\r\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\r\n * @param o Object that contains the own properties.\r\n */\r\nexport let getOwnPropertyNames;\r\n/**\r\n * Returns an array of all symbol properties found directly on object o.\r\n * @param o Object to retrieve the symbols from.\r\n */\r\nexport let getOwnPropertySymbols;\r\n/**\r\n * Returns true if the values are the same value, false otherwise.\r\n * @param value1 The first value.\r\n * @param value2 The second value.\r\n */\r\nexport let is;\r\n/**\r\n * Returns the names of the enumerable properties and methods of an object.\r\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\r\n */\r\nexport let keys;\r\n/* ES7 Object static methods */\r\nexport let getOwnPropertyDescriptors;\r\nexport let entries;\r\nexport let values;\r\nif (true) {\r\n const globalObject = global.Object;\r\n assign = globalObject.assign;\r\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\r\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\r\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\r\n is = globalObject.is;\r\n keys = globalObject.keys;\r\n}\r\nelse {\r\n keys = function symbolAwareKeys(o) {\r\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n assign = function assign(target, ...sources) {\r\n if (target == null) {\r\n // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n const to = Object(target);\r\n sources.forEach((nextSource) => {\r\n if (nextSource) {\r\n // Skip over if undefined or null\r\n keys(nextSource).forEach((nextKey) => {\r\n to[nextKey] = nextSource[nextKey];\r\n });\r\n }\r\n });\r\n return to;\r\n };\r\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\r\n if (isSymbol(prop)) {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n else {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n };\r\n getOwnPropertyNames = function getOwnPropertyNames(o) {\r\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\r\n return Object.getOwnPropertyNames(o)\r\n .filter((key) => Boolean(key.match(/^@@.+/)))\r\n .map((key) => Symbol.for(key.substring(2)));\r\n };\r\n is = function is(value1, value2) {\r\n if (value1 === value2) {\r\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\r\n }\r\n return value1 !== value1 && value2 !== value2; // NaN\r\n };\r\n}\r\nif (true) {\r\n const globalObject = global.Object;\r\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\r\n entries = globalObject.entries;\r\n values = globalObject.values;\r\n}\r\nelse {\r\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\r\n return getOwnPropertyNames(o).reduce((previous, key) => {\r\n previous[key] = getOwnPropertyDescriptor(o, key);\r\n return previous;\r\n }, {});\r\n };\r\n entries = function entries(o) {\r\n return keys(o).map((key) => [key, o[key]]);\r\n };\r\n values = function values(o) {\r\n return keys(o).map((key) => o[key]);\r\n };\r\n}\r\n//# sourceMappingURL=object.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/object.mjs\n// module id = ./node_modules/@dojo/shim/object.mjs\n// module chunks = menu","import global from './global';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\n/**\r\n * The minimum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MIN = 0xd800;\r\n/**\r\n * The maximum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MAX = 0xdbff;\r\n/**\r\n * The minimum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MIN = 0xdc00;\r\n/**\r\n * The maximum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MAX = 0xdfff;\r\n/* ES6 static methods */\r\n/**\r\n * Return the String value whose elements are, in order, the elements in the List elements.\r\n * If length is 0, the empty string is returned.\r\n * @param codePoints The code points to generate the string\r\n */\r\nexport let fromCodePoint;\r\n/**\r\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\r\n * as such the first argument will be a well formed template call site object and the rest\r\n * parameter will contain the substitution values.\r\n * @param template A well-formed template string call site representation.\r\n * @param substitutions A set of substitution values.\r\n */\r\nexport let raw;\r\n/* ES6 instance methods */\r\n/**\r\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\r\n * value of the UTF-16 encoded code point starting at the string element at position pos in\r\n * the String resulting from converting this object to a String.\r\n * If there is no element at that position, the result is undefined.\r\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\r\n */\r\nexport let codePointAt;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * endPosition – length(this). Otherwise returns false.\r\n */\r\nexport let endsWith;\r\n/**\r\n * Returns true if searchString appears as a substring of the result of converting this\r\n * object to a String, at one or more positions that are\r\n * greater than or equal to position; otherwise, returns false.\r\n * @param target The target string\r\n * @param searchString search string\r\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\r\n */\r\nexport let includes;\r\n/**\r\n * Returns the String value result of normalizing the string into the normalization form\r\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\r\n * @param target The target string\r\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\r\n * is \"NFC\"\r\n */\r\nexport let normalize;\r\n/**\r\n * Returns a String value that is made from count copies appended together. If count is 0,\r\n * T is the empty String is returned.\r\n * @param count number of copies to append\r\n */\r\nexport let repeat;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * position. Otherwise returns false.\r\n */\r\nexport let startsWith;\r\n/* ES7 instance methods */\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the end (right) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padEnd;\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the start (left) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padStart;\r\nif (true && true) {\r\n fromCodePoint = global.String.fromCodePoint;\r\n raw = global.String.raw;\r\n codePointAt = wrapNative(global.String.prototype.codePointAt);\r\n endsWith = wrapNative(global.String.prototype.endsWith);\r\n includes = wrapNative(global.String.prototype.includes);\r\n normalize = wrapNative(global.String.prototype.normalize);\r\n repeat = wrapNative(global.String.prototype.repeat);\r\n startsWith = wrapNative(global.String.prototype.startsWith);\r\n}\r\nelse {\r\n /**\r\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\r\n * Used by startsWith, includes, and endsWith.\r\n *\r\n * @return Normalized position.\r\n */\r\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\r\n if (text == null) {\r\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\r\n }\r\n const length = text.length;\r\n position = position !== position ? (isEnd ? length : 0) : position;\r\n return [text, String(search), Math.min(Math.max(position, 0), length)];\r\n };\r\n fromCodePoint = function fromCodePoint(...codePoints) {\r\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\r\n const length = arguments.length;\r\n if (!length) {\r\n return '';\r\n }\r\n const fromCharCode = String.fromCharCode;\r\n const MAX_SIZE = 0x4000;\r\n let codeUnits = [];\r\n let index = -1;\r\n let result = '';\r\n while (++index < length) {\r\n let codePoint = Number(arguments[index]);\r\n // Code points must be finite integers within the valid range\r\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\r\n if (!isValid) {\r\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\r\n }\r\n if (codePoint <= 0xffff) {\r\n // BMP code point\r\n codeUnits.push(codePoint);\r\n }\r\n else {\r\n // Astral code point; split in surrogate halves\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n codePoint -= 0x10000;\r\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\r\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\r\n codeUnits.push(highSurrogate, lowSurrogate);\r\n }\r\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\r\n result += fromCharCode.apply(null, codeUnits);\r\n codeUnits.length = 0;\r\n }\r\n }\r\n return result;\r\n };\r\n raw = function raw(callSite, ...substitutions) {\r\n let rawStrings = callSite.raw;\r\n let result = '';\r\n let numSubstitutions = substitutions.length;\r\n if (callSite == null || callSite.raw == null) {\r\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\r\n }\r\n for (let i = 0, length = rawStrings.length; i < length; i++) {\r\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\r\n }\r\n return result;\r\n };\r\n codePointAt = function codePointAt(text, position = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\r\n if (text == null) {\r\n throw new TypeError('string.codePointAt requries a valid string.');\r\n }\r\n const length = text.length;\r\n if (position !== position) {\r\n position = 0;\r\n }\r\n if (position < 0 || position >= length) {\r\n return undefined;\r\n }\r\n // Get the first code unit\r\n const first = text.charCodeAt(position);\r\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\r\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n const second = text.charCodeAt(position + 1);\r\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\r\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\r\n }\r\n }\r\n return first;\r\n };\r\n endsWith = function endsWith(text, search, endPosition) {\r\n if (endPosition == null) {\r\n endPosition = text.length;\r\n }\r\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\r\n const start = endPosition - search.length;\r\n if (start < 0) {\r\n return false;\r\n }\r\n return text.slice(start, endPosition) === search;\r\n };\r\n includes = function includes(text, search, position = 0) {\r\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\r\n return text.indexOf(search, position) !== -1;\r\n };\r\n repeat = function repeat(text, count = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\r\n if (text == null) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (count !== count) {\r\n count = 0;\r\n }\r\n if (count < 0 || count === Infinity) {\r\n throw new RangeError('string.repeat requires a non-negative finite count.');\r\n }\r\n let result = '';\r\n while (count) {\r\n if (count % 2) {\r\n result += text;\r\n }\r\n if (count > 1) {\r\n text += text;\r\n }\r\n count >>= 1;\r\n }\r\n return result;\r\n };\r\n startsWith = function startsWith(text, search, position = 0) {\r\n search = String(search);\r\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\r\n const end = position + search.length;\r\n if (end > text.length) {\r\n return false;\r\n }\r\n return text.slice(position, end) === search;\r\n };\r\n}\r\nif (true) {\r\n padEnd = wrapNative(global.String.prototype.padEnd);\r\n padStart = wrapNative(global.String.prototype.padStart);\r\n}\r\nelse {\r\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padEnd requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText +=\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length);\r\n }\r\n return strText;\r\n };\r\n padStart = function padStart(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padStart requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText =\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length) +\r\n strText;\r\n }\r\n return strText;\r\n };\r\n}\r\n//# sourceMappingURL=string.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/string.mjs\n// module id = ./node_modules/@dojo/shim/string.mjs\n// module chunks = menu","import has, { add } from '@dojo/has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '@dojo/has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/has.mjs\n// module id = ./node_modules/@dojo/shim/support/has.mjs\n// module chunks = menu","import global from '../global';\r\nimport has from './has';\r\nfunction executeTask(item) {\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n}\r\nfunction getQueueHandle(item, destructor) {\r\n return {\r\n destroy: function () {\r\n this.destroy = function () { };\r\n item.isActive = false;\r\n item.callback = null;\r\n if (destructor) {\r\n destructor();\r\n }\r\n }\r\n };\r\n}\r\nlet checkMicroTaskQueue;\r\nlet microTasks;\r\n/**\r\n * Schedules a callback to the macrotask queue.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueTask = (function () {\r\n let destructor;\r\n let enqueue;\r\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\r\n if (true) {\r\n const queue = [];\r\n global.addEventListener('message', function (event) {\r\n // Confirm that the event was triggered by the current window and by this particular implementation.\r\n if (event.source === global && event.data === 'dojo-queue-message') {\r\n event.stopPropagation();\r\n if (queue.length) {\r\n executeTask(queue.shift());\r\n }\r\n }\r\n });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n global.postMessage('dojo-queue-message', '*');\r\n };\r\n }\r\n else if (false) {\r\n destructor = global.clearImmediate;\r\n enqueue = function (item) {\r\n return setImmediate(executeTask.bind(null, item));\r\n };\r\n }\r\n else {\r\n destructor = global.clearTimeout;\r\n enqueue = function (item) {\r\n return setTimeout(executeTask.bind(null, item), 0);\r\n };\r\n }\r\n function queueTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const id = enqueue(item);\r\n return getQueueHandle(item, destructor &&\r\n function () {\r\n destructor(id);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueTask(callback);\r\n };\r\n})();\r\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\r\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\r\nif (!true) {\r\n let isMicroTaskQueued = false;\r\n microTasks = [];\r\n checkMicroTaskQueue = function () {\r\n if (!isMicroTaskQueued) {\r\n isMicroTaskQueued = true;\r\n queueTask(function () {\r\n isMicroTaskQueued = false;\r\n if (microTasks.length) {\r\n let item;\r\n while ((item = microTasks.shift())) {\r\n executeTask(item);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n}\r\n/**\r\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\r\n *\r\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\r\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueAnimationTask = (function () {\r\n if (!true) {\r\n return queueTask;\r\n }\r\n function queueAnimationTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\r\n return getQueueHandle(item, function () {\r\n cancelAnimationFrame(rafId);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueAnimationTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueAnimationTask(callback);\r\n };\r\n})();\r\n/**\r\n * Schedules a callback to the microtask queue.\r\n *\r\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\r\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\r\n * registered with `queueTask` or `queueAnimationTask`.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport let queueMicroTask = (function () {\r\n let enqueue;\r\n if (false) {\r\n enqueue = function (item) {\r\n global.process.nextTick(executeTask.bind(null, item));\r\n };\r\n }\r\n else if (true) {\r\n enqueue = function (item) {\r\n global.Promise.resolve(item).then(executeTask);\r\n };\r\n }\r\n else if (true) {\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const node = document.createElement('div');\r\n const queue = [];\r\n const observer = new HostMutationObserver(function () {\r\n while (queue.length > 0) {\r\n const item = queue.shift();\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n }\r\n });\r\n observer.observe(node, { attributes: true });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n node.setAttribute('queueStatus', '1');\r\n };\r\n }\r\n else {\r\n enqueue = function (item) {\r\n checkMicroTaskQueue();\r\n microTasks.push(item);\r\n };\r\n }\r\n return function (callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n enqueue(item);\r\n return getQueueHandle(item);\r\n };\r\n})();\r\n//# sourceMappingURL=queue.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/queue.mjs\n// module id = ./node_modules/@dojo/shim/support/queue.mjs\n// module chunks = menu","/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/shim/support/util.mjs\n// module id = ./node_modules/@dojo/shim/support/util.mjs\n// module chunks = menu","import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/Injector.mjs\n// module id = ./node_modules/@dojo/widget-core/Injector.mjs\n// module chunks = menu","import { Evented } from '@dojo/core/Evented';\r\nimport Map from '@dojo/shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/NodeHandler.mjs\n// module id = ./node_modules/@dojo/widget-core/NodeHandler.mjs\n// module chunks = menu","import Promise from '@dojo/shim/Promise';\r\nimport Map from '@dojo/shim/Map';\r\nimport Symbol from '@dojo/shim/Symbol';\r\nimport { Evented } from '@dojo/core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/Registry.mjs\n// module id = ./node_modules/@dojo/widget-core/Registry.mjs\n// module chunks = menu","import { Map } from '@dojo/shim/Map';\r\nimport { Evented } from '@dojo/core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/RegistryHandler.mjs\n// module id = ./node_modules/@dojo/widget-core/RegistryHandler.mjs\n// module chunks = menu","import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/WidgetBase.mjs\n// module id = ./node_modules/@dojo/widget-core/WidgetBase.mjs\n// module chunks = menu","let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/animations/cssTransitions.mjs\n// module id = ./node_modules/@dojo/widget-core/animations/cssTransitions.mjs\n// module chunks = menu","import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/d.mjs\n// module id = ./node_modules/@dojo/widget-core/d.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/afterRender.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/afterRender.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs\n// module chunks = menu","import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/customElement.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/customElement.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/diffProperty.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/diffProperty.mjs\n// module chunks = menu","/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs\n// module chunks = menu","import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/decorators/inject.mjs\n// module id = ./node_modules/@dojo/widget-core/decorators/inject.mjs\n// module chunks = menu","import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/diff.mjs\n// module id = ./node_modules/@dojo/widget-core/diff.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/mixins/Projector.mjs\n// module id = ./node_modules/@dojo/widget-core/mixins/Projector.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/mixins/Themed.mjs\n// module id = ./node_modules/@dojo/widget-core/mixins/Themed.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/registerCustomElement.mjs\n// module id = ./node_modules/@dojo/widget-core/registerCustomElement.mjs\n// module chunks = menu","import global from '@dojo/shim/global';\r\nimport { from as arrayFrom } from '@dojo/shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '@dojo/shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode.focus();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (propName === 'focus') {\r\n focusNode(propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const rendered = dnode.rendered || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\r\n oldIndex++;\r\n newIndex++;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let child = oldChildren[oldIndex];\r\n if (child) {\r\n let nextIndex = oldIndex + 1;\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n if (insertBefore.rendered) {\r\n insertBeforeChildren.push(...insertBefore.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\r\n insertBeforeChildren.push(oldChildren[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/widget-core/vdom.mjs\n// module id = ./node_modules/@dojo/widget-core/vdom.mjs\n// module chunks = menu","/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module id = ./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module chunks = menu","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = ./node_modules/process/browser.js\n// module chunks = menu","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator];\r\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/tslib/tslib.es6.js\n// module id = ./node_modules/tslib/tslib.es6.js\n// module chunks = menu","var 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 || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = 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// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = ./node_modules/webpack/buildin/global.js\n// module chunks = menu","import { v } from '@dojo/widget-core/d';\r\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\r\nimport { WidgetProperties, WNode } from '@dojo/widget-core/interfaces';\r\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\r\nimport { MenuItem, MenuItemProperties } from '../menu-item/MenuItem';\r\n\r\nimport * as css from './menu.m.css';\r\n\r\ninterface MenuProperties extends WidgetProperties {\r\n\tonSelected: (data: any) => void;\r\n}\r\n\r\n@customElement({\r\n\ttag: 'demo-menu',\r\n\tevents: ['onSelected']\r\n})\r\n@theme(css)\r\nexport class Menu extends ThemedMixin(WidgetBase)> {\r\n\tprivate _selectedId: number;\r\n\r\n\tprivate _onSelected(id: number, data: any) {\r\n\t\tthis._selectedId = id;\r\n\t\tthis.properties.onSelected(data);\r\n\t\tthis.invalidate();\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\tconst items = this.children.map((child, index) => {\r\n\t\t\tif (child) {\r\n\t\t\t\tconst properties: Partial = {\r\n\t\t\t\t\tonSelected: (data: any) => {\r\n\t\t\t\t\t\tthis._onSelected(index, data);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\tif (this._selectedId !== undefined) {\r\n\t\t\t\t\tproperties.selected = index === this._selectedId;\r\n\t\t\t\t}\r\n\t\t\t\tchild.properties = { ...child.properties, ...properties };\r\n\t\t\t}\r\n\t\t\treturn child;\r\n\t\t});\r\n\r\n\t\treturn v('nav', { classes: this.theme(css.root) }, [\r\n\t\t\tv(\r\n\t\t\t\t'ol',\r\n\t\t\t\t{\r\n\t\t\t\t\tclasses: this.theme(css.menuContainer)\r\n\t\t\t\t},\r\n\t\t\t\titems\r\n\t\t\t)\r\n\t\t]);\r\n\t}\r\n}\r\n\r\nexport default Menu;\r\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@dojo/webpack-contrib/css-module-dts-loader?type=ts&instanceName=0_menu!./src/menu/Menu.ts","// removed by extract-text-webpack-plugin\nmodule.exports = {\" _key\":\"test-app/menu\",\"root\":\"_3bA6jdSn\",\"menuContainer\":\"_1eoGfqku\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/menu/menu.m.css\n// module id = ./src/menu/menu.m.css\n// module chunks = menu"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap b1d790cff3d2b119c671","webpack:///./node_modules/@dojo/framework/core/Destroyable.mjs","webpack:///./node_modules/@dojo/framework/core/Evented.mjs","webpack:///./node_modules/@dojo/framework/core/lang.mjs","webpack:///./node_modules/@dojo/framework/has/has.mjs","webpack:///./node_modules/@dojo/framework/shim/Map.mjs","webpack:///./node_modules/@dojo/framework/shim/Promise.mjs","webpack:///./node_modules/@dojo/framework/shim/Symbol.mjs","webpack:///./node_modules/@dojo/framework/shim/WeakMap.mjs","webpack:///./node_modules/@dojo/framework/shim/array.mjs","webpack:///./node_modules/@dojo/framework/shim/global.mjs","webpack:///./node_modules/@dojo/framework/shim/number.mjs","webpack:///./node_modules/@dojo/framework/shim/object.mjs","webpack:///./node_modules/@dojo/framework/shim/string.mjs","webpack:///./node_modules/@dojo/framework/shim/support/has.mjs","webpack:///./node_modules/@dojo/framework/shim/support/queue.mjs","webpack:///./node_modules/@dojo/framework/shim/support/util.mjs","webpack:///./node_modules/@dojo/framework/widget-core/Injector.mjs","webpack:///./node_modules/@dojo/framework/widget-core/NodeHandler.mjs","webpack:///./node_modules/@dojo/framework/widget-core/Registry.mjs","webpack:///./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs","webpack:///./node_modules/@dojo/framework/widget-core/WidgetBase.mjs","webpack:///./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs","webpack:///./node_modules/@dojo/framework/widget-core/d.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs","webpack:///./node_modules/@dojo/framework/widget-core/decorators/inject.mjs","webpack:///./node_modules/@dojo/framework/widget-core/diff.mjs","webpack:///./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs","webpack:///./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs","webpack:///./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs","webpack:///./node_modules/@dojo/framework/widget-core/vdom.mjs","webpack:///./node_modules/@dojo/cli-build-widget/template/custom-element.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/menu/Menu.ts","webpack:///./src/menu/menu.m.css?ec11"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","noop","__WEBPACK_IMPORTED_MODULE_1__shim_Promise__","resolve","destroyed","Error","Destroyable","[object Object]","this","handles","handle","Array","isArray","__WEBPACK_IMPORTED_MODULE_0__lang__","_handles","push","splice","indexOf","destroy","forEach","own","__webpack_exports__","regexMap","__WEBPACK_IMPORTED_MODULE_0__shim_Map__","Evented","__WEBPACK_IMPORTED_MODULE_1__Destroyable__","super","arguments","listenersMap","event","methods","type","globString","targetString","regex","has","RegExp","replace","set","test","isGlobMatch","method","listener","map","_addListener","listeners","destructor","called","createHandle","length","slice","testCache","testFunctions","testThenables","globalScope","window","global","self","staticFeatures","DojoHasEnvironment","staticCache","apply","add","feature","value","overwrite","normalizedFeature","toLowerCase","Boolean","exists","TypeError","then","isFeatureTestThenable","resolvedValue","result","document","location","process","versions","node","Map","__WEBPACK_IMPORTED_MODULE_1__global__","ShimPromise","__WEBPACK_IMPORTED_MODULE_0__global__","Promise","Symbol","wellKnown","__WEBPACK_IMPORTED_MODULE_2__support_util__","for","WeakMap","from","of","copyWithin","fill","find","findIndex","includes","__WEBPACK_IMPORTED_MODULE_4__support_util__","globalObject","Math","pow","assign","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","is","keys","getOwnPropertyDescriptors","entries","values","fromCodePoint","raw","codePointAt","endsWith","normalize","repeat","startsWith","padEnd","padStart","String","__WEBPACK_IMPORTED_MODULE_0__has_has__","every","key","Number","POSITIVE_INFINITY","e","imul","Observable","Set","getCallSite","callSite","substitutions","key1","key2","freeze","postMessage","requestAnimationFrame","setImmediate","MutationObserver","WebKitMutationObserver","example","createElement","observer","observe","attributes","style","setProperty","takeRecords","undefined","Animation","KeyframeEffect","executeTask","item","isActive","callback","getQueueHandle","enqueue","queue","addEventListener","source","data","stopPropagation","shift","queueTask","id","queueAnimationTask","rafId","bind","cancelAnimationFrame","writable","nativeFunction","target","args","Injector","__WEBPACK_IMPORTED_MODULE_0__core_Evented__","payload","_payload","invalidator","_invalidator","NodeEventType","_nodeMap","__WEBPACK_IMPORTED_MODULE_1__shim_Map__","element","emit","Widget","Projector","clear","WIDGET_BASE_TYPE","__WEBPACK_IMPORTED_MODULE_2__shim_Symbol__","isWidgetBaseConstructor","_type","Registry","__WEBPACK_IMPORTED_MODULE_3__core_Evented__","widgetLabel","action","label","_widgetRegistry","toString","__WEBPACK_IMPORTED_MODULE_0__shim_Promise__","widgetCtor","emitLoadedEvent","error","injectorFactory","_injectorRegistry","injectorItem","injector","promise","default","isWidgetConstructorDefaultExport","hasInjector","__WEBPACK_IMPORTED_MODULE_1__core_Evented__","_registry","__WEBPACK_IMPORTED_MODULE_2__Registry__","_registryWidgetLabelMap","_registryInjectorLabelMap","baseRegistry","delete","base","widget","define","defineInjector","globalPrecedence","_get","getFunctionName","labelMap","registries","registry","registeredLabels","on","decoratorMap","boundAuto","__WEBPACK_IMPORTED_MODULE_4__diff__","noBind","WidgetBase","_initialProperties","_changedPropertyKeys","_nodeHandler","__WEBPACK_IMPORTED_MODULE_6__NodeHandler__","_children","_decoratorCache","_properties","_boundRenderFunc","render","_boundInvalidate","invalidate","__WEBPACK_IMPORTED_MODULE_7__vdom__","dirty","onAttach","onDetach","nodeHandler","coreProperties","rendering","inputProperties","_runAfterConstructors","MetaType","_metaMap","cached","properties","changedPropertyKeys","instanceData","__WEBPACK_IMPORTED_MODULE_5__RegistryHandler__","originalProperties","_runBeforeProperties","registeredDiffPropertyNames","getDecorator","propertyNames","allProperties","checkedProperties","diffPropertyResults","runReactions","propertyName","previousProperty","newProperty","_bindFunctionProperty","diffFunctions","changed","executedReactions","reaction","propertyChanged","reactionRun","children","dNode","_runBeforeRenders","runAfterRenders","__WEBPACK_IMPORTED_MODULE_3__d__","decoratorKey","decoratorList","constructor","specificDecoratorList","decorators","allDecorators","instanceMap","unshift","getPrototypeOf","_buildDecoratorList","__WEBPACK_IMPORTED_MODULE_8__Registry__","_bindFunctionPropertyMap","__WEBPACK_IMPORTED_MODULE_1__shim_WeakMap__","bindInfo","boundFunc","scope","beforeProperties","reduce","beforePropertiesFunction","beforeRenders","beforeRenderFunction","updatedRender","console","warn","afterRenders","afterRenderFunction","meta","afterRender","afterConstructors","afterConstructor","pop","browserSpecificTransitionEndEventName","browserSpecificAnimationEndEventName","initialize","determineBrowserStyleNames","runAndCleanUp","startAnimation","finishAnimation","finished","transitionEnd","removeEventListener","enter","enterAnimation","activeClass","enterAnimationActive","classList","remove","exit","exitAnimation","removeNode","exitAnimationActive","child","DOMVNODE","widgetConstructor","WNODE","tag","propertiesOrChildren","deferredPropertiesCallback","VNODE","attrs","props","diffType","isElementNode","tagName","events","domNode","text","__WEBPACK_IMPORTED_MODULE_0__shim_Symbol__","isWNode","isVNode","__WEBPACK_IMPORTED_MODULE_0__handleDecorator__","propertyKey","addDecorator","alwaysRender","__WEBPACK_IMPORTED_MODULE_1__beforeProperties__","customElement","childType","__WEBPACK_IMPORTED_MODULE_0__registerCustomElement__","DOJO","registryFactory","__WEBPACK_IMPORTED_MODULE_1__Registry__","__customElementDescriptor","diffProperty","diffFunction","__WEBPACK_IMPORTED_MODULE_1__diff__","reactionFunction","handleDecorator","handler","descriptor","registeredInjectorsMap","__WEBPACK_IMPORTED_MODULE_0__shim_WeakMap__","inject","getProperties","__WEBPACK_IMPORTED_MODULE_1__handleDecorator__","__WEBPACK_IMPORTED_MODULE_2__beforeProperties__","getInjector","registeredInjectors","__WEBPACK_IMPORTED_MODULE_0__Registry__","reference","ignore","isObjectOrArray","shallow","validOldProperty","validNewProperty","previousKeys","newKeys","some","ProjectorAttachState","AttachType","ProjectorMixin","Base","_root","body","_async","_projectorProperties","_projectionOptions","transitions","__WEBPACK_IMPORTED_MODULE_2__animations_cssTransitions__","root","projectorState","Detached","options","Append","_attach","Merge","Attached","async","doc","previousRoot","createDocumentFragment","__setChildren__","__setProperties__","__WEBPACK_IMPORTED_MODULE_1__core_lang__","__setCoreProperties__","_projection","childNodes","outerHTML","__WEBPACK_IMPORTED_MODULE_4__d__","_attachHandle","sync","__WEBPACK_IMPORTED_MODULE_5__vdom__","append","merge","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_3__decorators_afterRender__","theme","__WEBPACK_IMPORTED_MODULE_3__decorators_handleDecorator__","themeRegistry","themeInjector","__WEBPACK_IMPORTED_MODULE_1__Injector__","INJECTED_THEME_KEY","setInvalidator","THEME_KEY","ThemedMixin","Themed","_registeredBaseThemeKeys","_recalculateClasses","_theme","classes","_recalculateThemeClasses","className","_getThemeClass","extraClasses","themeClassName","_baseThemeClassesReverseLookup","resultClassNames","_registeredBaseTheme","join","baseThemes","finalBaseTheme","baseTheme","_a","currentClassNames","baseClass","themeKey","__WEBPACK_IMPORTED_MODULE_4__decorators_diffProperty__","__WEBPACK_IMPORTED_MODULE_5__diff__","__WEBPACK_IMPORTED_MODULE_2__decorators_inject__","CustomElementChildType","DomToWidgetWrapper","__WEBPACK_IMPORTED_MODULE_1__WidgetBase__","__WEBPACK_IMPORTED_MODULE_7__decorators_alwaysRender__","create","WidgetConstructor","attributeMap","attributeName","HTMLElement","_eventProperties","_initialised","domProperties","_attributesToProperties","filteredPropertyName","_getProperty","_setProperty","eventName","_getEventProperty","_setEventProperty","eventCallback","dispatchEvent","CustomEvent","bubbles","detail","defineProperties","TEXT","__WEBPACK_IMPORTED_MODULE_3__shim_array__","childNode","_render","_childConnected","widgetProperties","renderChildren","__children__","themeContext","__WEBPACK_IMPORTED_MODULE_6__mixins_Themed__","_getTheme","__WEBPACK_IMPORTED_MODULE_5__shim_global__","__WEBPACK_IMPORTED_MODULE_2__mixins_Projector__","_projector","setProperties","dojoce","themes","parentNode","filter","Child","isWidget","__properties__","oldValue","getAttribute","observedAttributes","register","customElements","NAMESPACE_SVG","NAMESPACE_W3","NAMESPACE_XLINK","emptyArray","nodeOperations","widgetInstanceMap","__WEBPACK_IMPORTED_MODULE_4__shim_WeakMap__","nextSiblingMap","projectorStateMap","same","dnode1","dnode2","__WEBPACK_IMPORTED_MODULE_2__d__","instance","missingTransition","checkStyleValue","styleValue","updateEvent","currentValue","projectionOptions","previousValue","projectorInstance","eventMap","nodeMap","previousEvent","evt","addClasses","classNames","split","removeClasses","nodeOperation","propName","propValue","deferredRenderCallbacks","removeOrphanedEvents","previousProperties","onlyEvents","isEvent","substr","updateAttribute","attrName","attrValue","namespace","setAttributeNS","removeAttribute","setAttribute","updateAttributes","previousAttributes","attrNames","attrCount","updateProperties","includesEventsAndAttributes","propertiesUpdated","propNames","propCount","previousClasses","currentClasses","newClasses","previousClassName","classIndex","styleNames","styleCount","j","styleName","newStyleValue","styleApplyer","domValue","lastIndexOf","findIndexOfChild","sameAs","start","toInternalWNode","rendered","filterAndDecorateChildren","nodeAdded","dnode","nodeToRemove","pointerEvents","removeDomNode","removeChild","checkDistinguishable","indexToCheck","parentInstance","nodeIdentifier","parentName","updateChildren","parentVNode","siblings","oldChildren","newChildren","oldChildrenLength","newChildrenLength","depth","oldIndex","newIndex","textUpdated","oldChild","newChild","inserted","addDeferredProperties","updateDom","findOldIndex","addChild","insertBeforeDomNode","childrenArray","nextIndex","insertBeforeChildren","insertBefore","parentElement","createDom","afterRenderCallbacks","childToRemove","addChildren","__WEBPACK_IMPORTED_MODULE_1__shim_array__","nextSiblings","domElement","toUpperCase","initPropertiesAndChildren","parentInstanceData","__WEBPACK_IMPORTED_MODULE_3__Registry__","renderQueue","scheduleRender","__render__","filteredRendered","addRoot","mergeElement","ownerDocument","createElementNS","appendChild","newDomNode","createTextNode","replaceChild","previous","oldNextSiblings","previousRendered","updated","current","newProperties","buildPreviousProperties","updateAnimation","vnode","decoratedDeferredProperties","runDeferredRenderCallbacks","__WEBPACK_IMPORTED_MODULE_0__shim_global__","runAfterRenderCallbacks","requestIdleCallback","setTimeout","renderScheduled","renders","sort","a","b","previouslyRendered","dom","finalProjectorOptions","projectorOptions","defaults","getProjectionOptions","rootNode","projection","widgetFactory","registerCustomElement","defaultExport","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","nextTick","title","browser","env","argv","version","addListener","once","off","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","t","desc","r","Reflect","decorate","setPrototypeOf","g","Function","eval","Menu","__WEBPACK_IMPORTED_MODULE_3__dojo_framework_widget_core_mixins_Themed__","__WEBPACK_IMPORTED_MODULE_4__dojo_framework_widget_core_WidgetBase__","_selectedId","onSelected","items","index","_onSelected","selected","__WEBPACK_IMPORTED_MODULE_1__dojo_framework_widget_core_d__","__WEBPACK_IMPORTED_MODULE_5__menu_m_css__","__WEBPACK_IMPORTED_MODULE_2__dojo_framework_widget_core_decorators_customElement__"," _key","menuContainer"],"mappings":"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","file":"menu-1.0.0.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b1d790cff3d2b119c671","import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/Destroyable.mjs\n// module id = ./node_modules/@dojo/framework/core/Destroyable.mjs\n// module chunks = menu","import Map from '../shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n [...methods].forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/Evented.mjs\n// module id = ./node_modules/@dojo/framework/core/Evented.mjs\n// module chunks = menu","import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/core/lang.mjs\n// module id = ./node_modules/@dojo/framework/core/lang.mjs\n// module chunks = menu","function isFeatureTestThenable(value) {\r\n return value && value.then;\r\n}\r\n/**\r\n * A cache of results of feature tests\r\n */\r\nexport const testCache = {};\r\n/**\r\n * A cache of the un-resolved feature tests\r\n */\r\nexport const testFunctions = {};\r\n/**\r\n * A cache of unresolved thenables (probably promises)\r\n * @type {{}}\r\n */\r\nconst testThenables = {};\r\n/**\r\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\r\n */\r\nconst globalScope = (function () {\r\n /* istanbul ignore else */\r\n if (typeof window !== 'undefined') {\r\n // Browsers\r\n return window;\r\n }\r\n else if (typeof global !== 'undefined') {\r\n // Node\r\n return global;\r\n }\r\n else if (typeof self !== 'undefined') {\r\n // Web workers\r\n return self;\r\n }\r\n /* istanbul ignore next */\r\n return {};\r\n})();\r\n/* Grab the staticFeatures if there are available */\r\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\r\n/* Cleaning up the DojoHasEnviornment */\r\nif ('DojoHasEnvironment' in globalScope) {\r\n delete globalScope.DojoHasEnvironment;\r\n}\r\n/**\r\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\r\n * returns a map.\r\n *\r\n * @param value The value to guard for\r\n */\r\nfunction isStaticFeatureFunction(value) {\r\n return typeof value === 'function';\r\n}\r\n/**\r\n * The cache of asserted features that were available in the global scope when the\r\n * module loaded\r\n */\r\nconst staticCache = staticFeatures\r\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\r\n : {}; /* Providing an empty cache, if none was in the environment\r\n\r\n/**\r\n* AMD plugin function.\r\n*\r\n* Conditional loads modules based on a has feature test value.\r\n*\r\n* @param resourceId Gives the resolved module id to load.\r\n* @param require The loader require function with respect to the module that contained the plugin resource in its\r\n* dependency list.\r\n* @param load Callback to loader that consumes result of plugin demand.\r\n*/\r\nexport function load(resourceId, require, load, config) {\r\n resourceId ? require([resourceId], load) : load();\r\n}\r\n/**\r\n * AMD plugin function.\r\n *\r\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\r\n * value(s).\r\n *\r\n * @param resourceId The id of the module\r\n * @param normalize Resolves a relative module id into an absolute module id\r\n */\r\nexport function normalize(resourceId, normalize) {\r\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\r\n let i = 0;\r\n function get(skip) {\r\n const term = tokens[i++];\r\n if (term === ':') {\r\n // empty string module name, resolves to null\r\n return null;\r\n }\r\n else {\r\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\r\n if (tokens[i++] === '?') {\r\n if (!skip && has(term)) {\r\n // matched the feature, get the first value from the options\r\n return get();\r\n }\r\n else {\r\n // did not match, get the second value, passing over the first\r\n get(true);\r\n return get(skip);\r\n }\r\n }\r\n // a module\r\n return term;\r\n }\r\n }\r\n const id = get();\r\n return id && normalize(id);\r\n}\r\n/**\r\n * Check if a feature has already been registered\r\n *\r\n * @param feature the name of the feature\r\n */\r\nexport function exists(feature) {\r\n const normalizedFeature = feature.toLowerCase();\r\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\r\n}\r\n/**\r\n * Register a new test for a named feature.\r\n *\r\n * @example\r\n * has.add('dom-addeventlistener', !!document.addEventListener);\r\n *\r\n * @example\r\n * has.add('touch-events', function () {\r\n * return 'ontouchstart' in document\r\n * });\r\n *\r\n * @param feature the name of the feature\r\n * @param value the value reported of the feature, or a function that will be executed once on first test\r\n * @param overwrite if an existing value should be overwritten. Defaults to false.\r\n */\r\nexport function add(feature, value, overwrite = false) {\r\n const normalizedFeature = feature.toLowerCase();\r\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\r\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\r\n }\r\n if (typeof value === 'function') {\r\n testFunctions[normalizedFeature] = value;\r\n }\r\n else if (isFeatureTestThenable(value)) {\r\n testThenables[feature] = value.then((resolvedValue) => {\r\n testCache[feature] = resolvedValue;\r\n delete testThenables[feature];\r\n }, () => {\r\n delete testThenables[feature];\r\n });\r\n }\r\n else {\r\n testCache[normalizedFeature] = value;\r\n delete testFunctions[normalizedFeature];\r\n }\r\n}\r\n/**\r\n * Return the current value of a named feature.\r\n *\r\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\r\n */\r\nexport default function has(feature) {\r\n let result;\r\n const normalizedFeature = feature.toLowerCase();\r\n if (normalizedFeature in staticCache) {\r\n result = staticCache[normalizedFeature];\r\n }\r\n else if (testFunctions[normalizedFeature]) {\r\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\r\n delete testFunctions[normalizedFeature];\r\n }\r\n else if (normalizedFeature in testCache) {\r\n result = testCache[normalizedFeature];\r\n }\r\n else if (feature in testThenables) {\r\n return false;\r\n }\r\n else {\r\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\r\n }\r\n return result;\r\n}\r\n/*\r\n * Out of the box feature tests\r\n */\r\n/* Environments */\r\n/* Used as a value to provide a debug only code path */\r\nadd('debug', true);\r\n/* Detects if the environment is \"browser like\" */\r\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\r\n/* Detects if the environment appears to be NodeJS */\r\nadd('host-node', function () {\r\n if (typeof process === 'object' && process.versions && process.versions.node) {\r\n return process.versions.node;\r\n }\r\n});\r\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/has/has.mjs\n// module id = ./node_modules/@dojo/framework/has/has.mjs\n// module chunks = menu","import { isArrayLike, ShimIterator } from './iterator';\r\nimport global from './global';\r\nimport { is as objectIs } from './object';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let Map = global.Map;\r\nif (!true) {\r\n Map = (_a = class Map {\r\n constructor(iterable) {\r\n this._keys = [];\r\n this._values = [];\r\n this[Symbol.toStringTag] = 'Map';\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const value = iterable[i];\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n else {\r\n for (const value of iterable) {\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * An alternative to Array.prototype.indexOf using Object.is\r\n * to check for equality. See http://mzl.la/1zuKO2V\r\n */\r\n _indexOfKey(keys, key) {\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n if (objectIs(keys[i], key)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n get size() {\r\n return this._keys.length;\r\n }\r\n clear() {\r\n this._keys.length = this._values.length = 0;\r\n }\r\n delete(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._keys.splice(index, 1);\r\n this._values.splice(index, 1);\r\n return true;\r\n }\r\n entries() {\r\n const values = this._keys.map((key, i) => {\r\n return [key, this._values[i]];\r\n });\r\n return new ShimIterator(values);\r\n }\r\n forEach(callback, context) {\r\n const keys = this._keys;\r\n const values = this._values;\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n callback.call(context, values[i], keys[i], this);\r\n }\r\n }\r\n get(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n return index < 0 ? undefined : this._values[index];\r\n }\r\n has(key) {\r\n return this._indexOfKey(this._keys, key) > -1;\r\n }\r\n keys() {\r\n return new ShimIterator(this._keys);\r\n }\r\n set(key, value) {\r\n let index = this._indexOfKey(this._keys, key);\r\n index = index < 0 ? this._keys.length : index;\r\n this._keys[index] = key;\r\n this._values[index] = value;\r\n return this;\r\n }\r\n values() {\r\n return new ShimIterator(this._values);\r\n }\r\n [Symbol.iterator]() {\r\n return this.entries();\r\n }\r\n },\r\n _a[Symbol.species] = _a,\r\n _a);\r\n}\r\nexport default Map;\r\nvar _a;\r\n//# sourceMappingURL=Map.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Map.mjs\n// module id = ./node_modules/@dojo/framework/shim/Map.mjs\n// module chunks = menu","import global from './global';\r\nimport { queueMicroTask } from './support/queue';\r\nimport './Symbol';\r\nimport has from './support/has';\r\nexport let ShimPromise = global.Promise;\r\nexport const isThenable = function isThenable(value) {\r\n return value && typeof value.then === 'function';\r\n};\r\nif (!true) {\r\n global.Promise = ShimPromise = (_a = class Promise {\r\n /**\r\n * Creates a new Promise.\r\n *\r\n * @constructor\r\n *\r\n * @param executor\r\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\r\n * starting the asynchronous operation when it is invoked.\r\n *\r\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\r\n * successfully, or the `reject` function when the operation fails.\r\n */\r\n constructor(executor) {\r\n /**\r\n * The current state of this promise.\r\n */\r\n this.state = 1 /* Pending */;\r\n this[Symbol.toStringTag] = 'Promise';\r\n /**\r\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\r\n */\r\n let isChained = false;\r\n /**\r\n * Whether or not this promise is in a resolved state.\r\n */\r\n const isResolved = () => {\r\n return this.state !== 1 /* Pending */ || isChained;\r\n };\r\n /**\r\n * Callbacks that should be invoked once the asynchronous operation has completed.\r\n */\r\n let callbacks = [];\r\n /**\r\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\r\n * enqueues callbacks for execution on the next event loop turn.\r\n */\r\n let whenFinished = function (callback) {\r\n if (callbacks) {\r\n callbacks.push(callback);\r\n }\r\n };\r\n /**\r\n * Settles this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const settle = (newState, value) => {\r\n // A promise can only be settled once.\r\n if (this.state !== 1 /* Pending */) {\r\n return;\r\n }\r\n this.state = newState;\r\n this.resolvedValue = value;\r\n whenFinished = queueMicroTask;\r\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\r\n // wait an extra turn.\r\n if (callbacks && callbacks.length > 0) {\r\n queueMicroTask(function () {\r\n if (callbacks) {\r\n let count = callbacks.length;\r\n for (let i = 0; i < count; ++i) {\r\n callbacks[i].call(null);\r\n }\r\n callbacks = null;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Resolves this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const resolve = (newState, value) => {\r\n if (isResolved()) {\r\n return;\r\n }\r\n if (isThenable(value)) {\r\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\r\n isChained = true;\r\n }\r\n else {\r\n settle(newState, value);\r\n }\r\n };\r\n this.then = (onFulfilled, onRejected) => {\r\n return new Promise((resolve, reject) => {\r\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\r\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\r\n // event loop.\r\n whenFinished(() => {\r\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\r\n if (typeof callback === 'function') {\r\n try {\r\n resolve(callback(this.resolvedValue));\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n else if (this.state === 2 /* Rejected */) {\r\n reject(this.resolvedValue);\r\n }\r\n else {\r\n resolve(this.resolvedValue);\r\n }\r\n });\r\n });\r\n };\r\n try {\r\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\r\n }\r\n catch (error) {\r\n settle(2 /* Rejected */, error);\r\n }\r\n }\r\n static all(iterable) {\r\n return new this(function (resolve, reject) {\r\n const values = [];\r\n let complete = 0;\r\n let total = 0;\r\n let populating = true;\r\n function fulfill(index, value) {\r\n values[index] = value;\r\n ++complete;\r\n finish();\r\n }\r\n function finish() {\r\n if (populating || complete < total) {\r\n return;\r\n }\r\n resolve(values);\r\n }\r\n function processItem(index, item) {\r\n ++total;\r\n if (isThenable(item)) {\r\n // If an item Promise rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(fulfill.bind(null, index), reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(fulfill.bind(null, index));\r\n }\r\n }\r\n let i = 0;\r\n for (const value of iterable) {\r\n processItem(i, value);\r\n i++;\r\n }\r\n populating = false;\r\n finish();\r\n });\r\n }\r\n static race(iterable) {\r\n return new this(function (resolve, reject) {\r\n for (const item of iterable) {\r\n if (item instanceof Promise) {\r\n // If a Promise item rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(resolve, reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(resolve);\r\n }\r\n }\r\n });\r\n }\r\n static reject(reason) {\r\n return new this(function (resolve, reject) {\r\n reject(reason);\r\n });\r\n }\r\n static resolve(value) {\r\n return new this(function (resolve) {\r\n resolve(value);\r\n });\r\n }\r\n catch(onRejected) {\r\n return this.then(undefined, onRejected);\r\n }\r\n },\r\n _a[Symbol.species] = ShimPromise,\r\n _a);\r\n}\r\nexport default ShimPromise;\r\nvar _a;\r\n//# sourceMappingURL=Promise.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Promise.mjs\n// module id = ./node_modules/@dojo/framework/shim/Promise.mjs\n// module chunks = menu","import has from './support/has';\r\nimport global from './global';\r\nimport { getValueDescriptor } from './support/util';\r\nexport let Symbol = global.Symbol;\r\nif (!true) {\r\n /**\r\n * Throws if the value is not a symbol, used internally within the Shim\r\n * @param {any} value The value to check\r\n * @return {symbol} Returns the symbol or throws\r\n */\r\n const validateSymbol = function validateSymbol(value) {\r\n if (!isSymbol(value)) {\r\n throw new TypeError(value + ' is not a symbol');\r\n }\r\n return value;\r\n };\r\n const defineProperties = Object.defineProperties;\r\n const defineProperty = Object.defineProperty;\r\n const create = Object.create;\r\n const objPrototype = Object.prototype;\r\n const globalSymbols = {};\r\n const getSymbolName = (function () {\r\n const created = create(null);\r\n return function (desc) {\r\n let postfix = 0;\r\n let name;\r\n while (created[String(desc) + (postfix || '')]) {\r\n ++postfix;\r\n }\r\n desc += String(postfix || '');\r\n created[desc] = true;\r\n name = '@@' + desc;\r\n // FIXME: Temporary guard until the duplicate execution when testing can be\r\n // pinned down.\r\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\r\n defineProperty(objPrototype, name, {\r\n set: function (value) {\r\n defineProperty(this, name, getValueDescriptor(value));\r\n }\r\n });\r\n }\r\n return name;\r\n };\r\n })();\r\n const InternalSymbol = function Symbol(description) {\r\n if (this instanceof InternalSymbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n return Symbol(description);\r\n };\r\n Symbol = global.Symbol = function Symbol(description) {\r\n if (this instanceof Symbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n const sym = Object.create(InternalSymbol.prototype);\r\n description = description === undefined ? '' : String(description);\r\n return defineProperties(sym, {\r\n __description__: getValueDescriptor(description),\r\n __name__: getValueDescriptor(getSymbolName(description))\r\n });\r\n };\r\n /* Decorate the Symbol function with the appropriate properties */\r\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\r\n if (globalSymbols[key]) {\r\n return globalSymbols[key];\r\n }\r\n return (globalSymbols[key] = Symbol(String(key)));\r\n }));\r\n defineProperties(Symbol, {\r\n keyFor: getValueDescriptor(function (sym) {\r\n let key;\r\n validateSymbol(sym);\r\n for (key in globalSymbols) {\r\n if (globalSymbols[key] === sym) {\r\n return key;\r\n }\r\n }\r\n }),\r\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\r\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\r\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\r\n match: getValueDescriptor(Symbol.for('match'), false, false),\r\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\r\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\r\n search: getValueDescriptor(Symbol.for('search'), false, false),\r\n species: getValueDescriptor(Symbol.for('species'), false, false),\r\n split: getValueDescriptor(Symbol.for('split'), false, false),\r\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\r\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\r\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\r\n });\r\n /* Decorate the InternalSymbol object */\r\n defineProperties(InternalSymbol.prototype, {\r\n constructor: getValueDescriptor(Symbol),\r\n toString: getValueDescriptor(function () {\r\n return this.__name__;\r\n }, false, false)\r\n });\r\n /* Decorate the Symbol.prototype */\r\n defineProperties(Symbol.prototype, {\r\n toString: getValueDescriptor(function () {\r\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\r\n }),\r\n valueOf: getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n })\r\n });\r\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n }));\r\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\r\n}\r\n/**\r\n * A custom guard function that determines if an object is a symbol or not\r\n * @param {any} value The value to check to see if it is a symbol or not\r\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\r\n */\r\nexport function isSymbol(value) {\r\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\r\n}\r\n/**\r\n * Fill any missing well known symbols if the native Symbol is missing them\r\n */\r\n[\r\n 'hasInstance',\r\n 'isConcatSpreadable',\r\n 'iterator',\r\n 'species',\r\n 'replace',\r\n 'search',\r\n 'split',\r\n 'match',\r\n 'toPrimitive',\r\n 'toStringTag',\r\n 'unscopables',\r\n 'observable'\r\n].forEach((wellKnown) => {\r\n if (!Symbol[wellKnown]) {\r\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\r\n }\r\n});\r\nexport default Symbol;\r\n//# sourceMappingURL=Symbol.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/Symbol.mjs\n// module id = ./node_modules/@dojo/framework/shim/Symbol.mjs\n// module chunks = menu","import global from './global';\r\nimport { isArrayLike } from './iterator';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let WeakMap = global.WeakMap;\r\nif (!true) {\r\n const DELETED = {};\r\n const getUID = function getUID() {\r\n return Math.floor(Math.random() * 100000000);\r\n };\r\n const generateName = (function () {\r\n let startId = Math.floor(Date.now() % 100000000);\r\n return function generateName() {\r\n return '__wm' + getUID() + (startId++ + '__');\r\n };\r\n })();\r\n WeakMap = class WeakMap {\r\n constructor(iterable) {\r\n this[Symbol.toStringTag] = 'WeakMap';\r\n this._name = generateName();\r\n this._frozenEntries = [];\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const item = iterable[i];\r\n this.set(item[0], item[1]);\r\n }\r\n }\r\n else {\r\n for (const [key, value] of iterable) {\r\n this.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n _getFrozenEntryIndex(key) {\r\n for (let i = 0; i < this._frozenEntries.length; i++) {\r\n if (this._frozenEntries[i].key === key) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n delete(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n entry.value = DELETED;\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n this._frozenEntries.splice(frozenIndex, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n get(key) {\r\n if (key === undefined || key === null) {\r\n return undefined;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n return entry.value;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return this._frozenEntries[frozenIndex].value;\r\n }\r\n }\r\n has(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n set(key, value) {\r\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\r\n throw new TypeError('Invalid value used as weak map key');\r\n }\r\n let entry = key[this._name];\r\n if (!entry || entry.key !== key) {\r\n entry = Object.create(null, {\r\n key: { value: key }\r\n });\r\n if (Object.isFrozen(key)) {\r\n this._frozenEntries.push(entry);\r\n }\r\n else {\r\n Object.defineProperty(key, this._name, {\r\n value: entry\r\n });\r\n }\r\n }\r\n entry.value = value;\r\n return this;\r\n }\r\n };\r\n}\r\nexport default WeakMap;\r\n//# sourceMappingURL=WeakMap.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/WeakMap.mjs\n// module id = ./node_modules/@dojo/framework/shim/WeakMap.mjs\n// module chunks = menu","import global from './global';\r\nimport { isArrayLike, isIterable } from './iterator';\r\nimport { MAX_SAFE_INTEGER } from './number';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\nexport let from;\r\n/**\r\n * Creates a new array from the function parameters.\r\n *\r\n * @param arguments Any number of arguments for the array\r\n * @return An array from the given arguments\r\n */\r\nexport let of;\r\n/* ES6 Array instance methods */\r\n/**\r\n * Copies data internally within an array or array-like object.\r\n *\r\n * @param target The target array-like object\r\n * @param offset The index to start copying values to; if negative, it counts backwards from length\r\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\r\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\r\n * @return The target\r\n */\r\nexport let copyWithin;\r\n/**\r\n * Fills elements of an array-like object with the specified value.\r\n *\r\n * @param target The target to fill\r\n * @param value The value to fill each element of the target with\r\n * @param start The first index to fill\r\n * @param end The (exclusive) index at which to stop filling\r\n * @return The filled target\r\n */\r\nexport let fill;\r\n/**\r\n * Finds and returns the first instance matching the callback or undefined if one is not found.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning if the current value matches a criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first element matching the callback, or undefined if one does not exist\r\n */\r\nexport let find;\r\n/**\r\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\r\n * or -1 if no values satisfy it.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning true if the current value satisfies its criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\r\n */\r\nexport let findIndex;\r\n/* ES7 Array instance methods */\r\n/**\r\n * Determines whether an array includes a given value\r\n *\r\n * @param target the target array-like object\r\n * @param searchElement the item to search for\r\n * @param fromIndex the starting index to search from\r\n * @return `true` if the array includes the element, otherwise `false`\r\n */\r\nexport let includes;\r\nif (true && true) {\r\n from = global.Array.from;\r\n of = global.Array.of;\r\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\r\n fill = wrapNative(global.Array.prototype.fill);\r\n find = wrapNative(global.Array.prototype.find);\r\n findIndex = wrapNative(global.Array.prototype.findIndex);\r\n}\r\nelse {\r\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\r\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n length = Number(length);\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n /**\r\n * From ES6 7.1.4 ToInteger()\r\n *\r\n * @param value A value to convert\r\n * @return An integer\r\n */\r\n const toInteger = function toInteger(value) {\r\n value = Number(value);\r\n if (isNaN(value)) {\r\n return 0;\r\n }\r\n if (value === 0 || !isFinite(value)) {\r\n return value;\r\n }\r\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\r\n };\r\n /**\r\n * Normalizes an offset against a given length, wrapping it if negative.\r\n *\r\n * @param value The original offset\r\n * @param length The total length to normalize against\r\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\r\n */\r\n const normalizeOffset = function normalizeOffset(value, length) {\r\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\r\n };\r\n from = function from(arrayLike, mapFunction, thisArg) {\r\n if (arrayLike == null) {\r\n throw new TypeError('from: requires an array-like object');\r\n }\r\n if (mapFunction && thisArg) {\r\n mapFunction = mapFunction.bind(thisArg);\r\n }\r\n /* tslint:disable-next-line:variable-name */\r\n const Constructor = this;\r\n const length = toLength(arrayLike.length);\r\n // Support extension\r\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\r\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\r\n return array;\r\n }\r\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\r\n // with the iteration on IE when using a NaN array length.\r\n if (isArrayLike(arrayLike)) {\r\n if (length === 0) {\r\n return [];\r\n }\r\n for (let i = 0; i < arrayLike.length; i++) {\r\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\r\n }\r\n }\r\n else {\r\n let i = 0;\r\n for (const value of arrayLike) {\r\n array[i] = mapFunction ? mapFunction(value, i) : value;\r\n i++;\r\n }\r\n }\r\n if (arrayLike.length !== undefined) {\r\n array.length = length;\r\n }\r\n return array;\r\n };\r\n of = function of(...items) {\r\n return Array.prototype.slice.call(items);\r\n };\r\n copyWithin = function copyWithin(target, offset, start, end) {\r\n if (target == null) {\r\n throw new TypeError('copyWithin: target must be an array-like object');\r\n }\r\n const length = toLength(target.length);\r\n offset = normalizeOffset(toInteger(offset), length);\r\n start = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n let count = Math.min(end - start, length - offset);\r\n let direction = 1;\r\n if (offset > start && offset < start + count) {\r\n direction = -1;\r\n start += count - 1;\r\n offset += count - 1;\r\n }\r\n while (count > 0) {\r\n if (start in target) {\r\n target[offset] = target[start];\r\n }\r\n else {\r\n delete target[offset];\r\n }\r\n offset += direction;\r\n start += direction;\r\n count--;\r\n }\r\n return target;\r\n };\r\n fill = function fill(target, value, start, end) {\r\n const length = toLength(target.length);\r\n let i = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n while (i < end) {\r\n target[i++] = value;\r\n }\r\n return target;\r\n };\r\n find = function find(target, callback, thisArg) {\r\n const index = findIndex(target, callback, thisArg);\r\n return index !== -1 ? target[index] : undefined;\r\n };\r\n findIndex = function findIndex(target, callback, thisArg) {\r\n const length = toLength(target.length);\r\n if (!callback) {\r\n throw new TypeError('find: second argument must be a function');\r\n }\r\n if (thisArg) {\r\n callback = callback.bind(thisArg);\r\n }\r\n for (let i = 0; i < length; i++) {\r\n if (callback(target[i], i, target)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\nif (true) {\r\n includes = wrapNative(global.Array.prototype.includes);\r\n}\r\nelse {\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n length = Number(length);\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n includes = function includes(target, searchElement, fromIndex = 0) {\r\n let len = toLength(target.length);\r\n for (let i = fromIndex; i < len; ++i) {\r\n const currentElement = target[i];\r\n if (searchElement === currentElement ||\r\n (searchElement !== searchElement && currentElement !== currentElement)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n//# sourceMappingURL=array.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/array.mjs\n// module id = ./node_modules/@dojo/framework/shim/array.mjs\n// module chunks = menu","const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/global.mjs\n// module id = ./node_modules/@dojo/framework/shim/global.mjs\n// module chunks = menu","import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/number.mjs\n// module id = ./node_modules/@dojo/framework/shim/number.mjs\n// module chunks = menu","import global from './global';\r\nimport has from './support/has';\r\nimport { isSymbol } from './Symbol';\r\nexport let assign;\r\n/**\r\n * Gets the own property descriptor of the specified object.\r\n * An own property descriptor is one that is defined directly on the object and is not\r\n * inherited from the object's prototype.\r\n * @param o Object that contains the property.\r\n * @param p Name of the property.\r\n */\r\nexport let getOwnPropertyDescriptor;\r\n/**\r\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\r\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\r\n * @param o Object that contains the own properties.\r\n */\r\nexport let getOwnPropertyNames;\r\n/**\r\n * Returns an array of all symbol properties found directly on object o.\r\n * @param o Object to retrieve the symbols from.\r\n */\r\nexport let getOwnPropertySymbols;\r\n/**\r\n * Returns true if the values are the same value, false otherwise.\r\n * @param value1 The first value.\r\n * @param value2 The second value.\r\n */\r\nexport let is;\r\n/**\r\n * Returns the names of the enumerable properties and methods of an object.\r\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\r\n */\r\nexport let keys;\r\n/* ES7 Object static methods */\r\nexport let getOwnPropertyDescriptors;\r\nexport let entries;\r\nexport let values;\r\nif (true) {\r\n const globalObject = global.Object;\r\n assign = globalObject.assign;\r\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\r\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\r\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\r\n is = globalObject.is;\r\n keys = globalObject.keys;\r\n}\r\nelse {\r\n keys = function symbolAwareKeys(o) {\r\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n assign = function assign(target, ...sources) {\r\n if (target == null) {\r\n // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n const to = Object(target);\r\n sources.forEach((nextSource) => {\r\n if (nextSource) {\r\n // Skip over if undefined or null\r\n keys(nextSource).forEach((nextKey) => {\r\n to[nextKey] = nextSource[nextKey];\r\n });\r\n }\r\n });\r\n return to;\r\n };\r\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\r\n if (isSymbol(prop)) {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n else {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n };\r\n getOwnPropertyNames = function getOwnPropertyNames(o) {\r\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\r\n return Object.getOwnPropertyNames(o)\r\n .filter((key) => Boolean(key.match(/^@@.+/)))\r\n .map((key) => Symbol.for(key.substring(2)));\r\n };\r\n is = function is(value1, value2) {\r\n if (value1 === value2) {\r\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\r\n }\r\n return value1 !== value1 && value2 !== value2; // NaN\r\n };\r\n}\r\nif (true) {\r\n const globalObject = global.Object;\r\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\r\n entries = globalObject.entries;\r\n values = globalObject.values;\r\n}\r\nelse {\r\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\r\n return getOwnPropertyNames(o).reduce((previous, key) => {\r\n previous[key] = getOwnPropertyDescriptor(o, key);\r\n return previous;\r\n }, {});\r\n };\r\n entries = function entries(o) {\r\n return keys(o).map((key) => [key, o[key]]);\r\n };\r\n values = function values(o) {\r\n return keys(o).map((key) => o[key]);\r\n };\r\n}\r\n//# sourceMappingURL=object.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/object.mjs\n// module id = ./node_modules/@dojo/framework/shim/object.mjs\n// module chunks = menu","import global from './global';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\n/**\r\n * The minimum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MIN = 0xd800;\r\n/**\r\n * The maximum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MAX = 0xdbff;\r\n/**\r\n * The minimum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MIN = 0xdc00;\r\n/**\r\n * The maximum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MAX = 0xdfff;\r\n/* ES6 static methods */\r\n/**\r\n * Return the String value whose elements are, in order, the elements in the List elements.\r\n * If length is 0, the empty string is returned.\r\n * @param codePoints The code points to generate the string\r\n */\r\nexport let fromCodePoint;\r\n/**\r\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\r\n * as such the first argument will be a well formed template call site object and the rest\r\n * parameter will contain the substitution values.\r\n * @param template A well-formed template string call site representation.\r\n * @param substitutions A set of substitution values.\r\n */\r\nexport let raw;\r\n/* ES6 instance methods */\r\n/**\r\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\r\n * value of the UTF-16 encoded code point starting at the string element at position pos in\r\n * the String resulting from converting this object to a String.\r\n * If there is no element at that position, the result is undefined.\r\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\r\n */\r\nexport let codePointAt;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * endPosition – length(this). Otherwise returns false.\r\n */\r\nexport let endsWith;\r\n/**\r\n * Returns true if searchString appears as a substring of the result of converting this\r\n * object to a String, at one or more positions that are\r\n * greater than or equal to position; otherwise, returns false.\r\n * @param target The target string\r\n * @param searchString search string\r\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\r\n */\r\nexport let includes;\r\n/**\r\n * Returns the String value result of normalizing the string into the normalization form\r\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\r\n * @param target The target string\r\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\r\n * is \"NFC\"\r\n */\r\nexport let normalize;\r\n/**\r\n * Returns a String value that is made from count copies appended together. If count is 0,\r\n * T is the empty String is returned.\r\n * @param count number of copies to append\r\n */\r\nexport let repeat;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * position. Otherwise returns false.\r\n */\r\nexport let startsWith;\r\n/* ES7 instance methods */\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the end (right) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padEnd;\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the start (left) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padStart;\r\nif (true && true) {\r\n fromCodePoint = global.String.fromCodePoint;\r\n raw = global.String.raw;\r\n codePointAt = wrapNative(global.String.prototype.codePointAt);\r\n endsWith = wrapNative(global.String.prototype.endsWith);\r\n includes = wrapNative(global.String.prototype.includes);\r\n normalize = wrapNative(global.String.prototype.normalize);\r\n repeat = wrapNative(global.String.prototype.repeat);\r\n startsWith = wrapNative(global.String.prototype.startsWith);\r\n}\r\nelse {\r\n /**\r\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\r\n * Used by startsWith, includes, and endsWith.\r\n *\r\n * @return Normalized position.\r\n */\r\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\r\n if (text == null) {\r\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\r\n }\r\n const length = text.length;\r\n position = position !== position ? (isEnd ? length : 0) : position;\r\n return [text, String(search), Math.min(Math.max(position, 0), length)];\r\n };\r\n fromCodePoint = function fromCodePoint(...codePoints) {\r\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\r\n const length = arguments.length;\r\n if (!length) {\r\n return '';\r\n }\r\n const fromCharCode = String.fromCharCode;\r\n const MAX_SIZE = 0x4000;\r\n let codeUnits = [];\r\n let index = -1;\r\n let result = '';\r\n while (++index < length) {\r\n let codePoint = Number(arguments[index]);\r\n // Code points must be finite integers within the valid range\r\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\r\n if (!isValid) {\r\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\r\n }\r\n if (codePoint <= 0xffff) {\r\n // BMP code point\r\n codeUnits.push(codePoint);\r\n }\r\n else {\r\n // Astral code point; split in surrogate halves\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n codePoint -= 0x10000;\r\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\r\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\r\n codeUnits.push(highSurrogate, lowSurrogate);\r\n }\r\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\r\n result += fromCharCode.apply(null, codeUnits);\r\n codeUnits.length = 0;\r\n }\r\n }\r\n return result;\r\n };\r\n raw = function raw(callSite, ...substitutions) {\r\n let rawStrings = callSite.raw;\r\n let result = '';\r\n let numSubstitutions = substitutions.length;\r\n if (callSite == null || callSite.raw == null) {\r\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\r\n }\r\n for (let i = 0, length = rawStrings.length; i < length; i++) {\r\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\r\n }\r\n return result;\r\n };\r\n codePointAt = function codePointAt(text, position = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\r\n if (text == null) {\r\n throw new TypeError('string.codePointAt requries a valid string.');\r\n }\r\n const length = text.length;\r\n if (position !== position) {\r\n position = 0;\r\n }\r\n if (position < 0 || position >= length) {\r\n return undefined;\r\n }\r\n // Get the first code unit\r\n const first = text.charCodeAt(position);\r\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\r\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n const second = text.charCodeAt(position + 1);\r\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\r\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\r\n }\r\n }\r\n return first;\r\n };\r\n endsWith = function endsWith(text, search, endPosition) {\r\n if (endPosition == null) {\r\n endPosition = text.length;\r\n }\r\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\r\n const start = endPosition - search.length;\r\n if (start < 0) {\r\n return false;\r\n }\r\n return text.slice(start, endPosition) === search;\r\n };\r\n includes = function includes(text, search, position = 0) {\r\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\r\n return text.indexOf(search, position) !== -1;\r\n };\r\n repeat = function repeat(text, count = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\r\n if (text == null) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (count !== count) {\r\n count = 0;\r\n }\r\n if (count < 0 || count === Infinity) {\r\n throw new RangeError('string.repeat requires a non-negative finite count.');\r\n }\r\n let result = '';\r\n while (count) {\r\n if (count % 2) {\r\n result += text;\r\n }\r\n if (count > 1) {\r\n text += text;\r\n }\r\n count >>= 1;\r\n }\r\n return result;\r\n };\r\n startsWith = function startsWith(text, search, position = 0) {\r\n search = String(search);\r\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\r\n const end = position + search.length;\r\n if (end > text.length) {\r\n return false;\r\n }\r\n return text.slice(position, end) === search;\r\n };\r\n}\r\nif (true) {\r\n padEnd = wrapNative(global.String.prototype.padEnd);\r\n padStart = wrapNative(global.String.prototype.padStart);\r\n}\r\nelse {\r\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padEnd requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText +=\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length);\r\n }\r\n return strText;\r\n };\r\n padStart = function padStart(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padStart requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText =\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length) +\r\n strText;\r\n }\r\n return strText;\r\n };\r\n}\r\n//# sourceMappingURL=string.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/string.mjs\n// module id = ./node_modules/@dojo/framework/shim/string.mjs\n// module chunks = menu","import has, { add } from '../../has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '../../has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/has.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/has.mjs\n// module chunks = menu","import global from '../global';\r\nimport has from './has';\r\nfunction executeTask(item) {\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n}\r\nfunction getQueueHandle(item, destructor) {\r\n return {\r\n destroy: function () {\r\n this.destroy = function () { };\r\n item.isActive = false;\r\n item.callback = null;\r\n if (destructor) {\r\n destructor();\r\n }\r\n }\r\n };\r\n}\r\nlet checkMicroTaskQueue;\r\nlet microTasks;\r\n/**\r\n * Schedules a callback to the macrotask queue.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueTask = (function () {\r\n let destructor;\r\n let enqueue;\r\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\r\n if (true) {\r\n const queue = [];\r\n global.addEventListener('message', function (event) {\r\n // Confirm that the event was triggered by the current window and by this particular implementation.\r\n if (event.source === global && event.data === 'dojo-queue-message') {\r\n event.stopPropagation();\r\n if (queue.length) {\r\n executeTask(queue.shift());\r\n }\r\n }\r\n });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n global.postMessage('dojo-queue-message', '*');\r\n };\r\n }\r\n else if (false) {\r\n destructor = global.clearImmediate;\r\n enqueue = function (item) {\r\n return setImmediate(executeTask.bind(null, item));\r\n };\r\n }\r\n else {\r\n destructor = global.clearTimeout;\r\n enqueue = function (item) {\r\n return setTimeout(executeTask.bind(null, item), 0);\r\n };\r\n }\r\n function queueTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const id = enqueue(item);\r\n return getQueueHandle(item, destructor &&\r\n function () {\r\n destructor(id);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueTask(callback);\r\n };\r\n})();\r\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\r\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\r\nif (!true) {\r\n let isMicroTaskQueued = false;\r\n microTasks = [];\r\n checkMicroTaskQueue = function () {\r\n if (!isMicroTaskQueued) {\r\n isMicroTaskQueued = true;\r\n queueTask(function () {\r\n isMicroTaskQueued = false;\r\n if (microTasks.length) {\r\n let item;\r\n while ((item = microTasks.shift())) {\r\n executeTask(item);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n}\r\n/**\r\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\r\n *\r\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\r\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueAnimationTask = (function () {\r\n if (!true) {\r\n return queueTask;\r\n }\r\n function queueAnimationTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\r\n return getQueueHandle(item, function () {\r\n cancelAnimationFrame(rafId);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueAnimationTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueAnimationTask(callback);\r\n };\r\n})();\r\n/**\r\n * Schedules a callback to the microtask queue.\r\n *\r\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\r\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\r\n * registered with `queueTask` or `queueAnimationTask`.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport let queueMicroTask = (function () {\r\n let enqueue;\r\n if (false) {\r\n enqueue = function (item) {\r\n global.process.nextTick(executeTask.bind(null, item));\r\n };\r\n }\r\n else if (true) {\r\n enqueue = function (item) {\r\n global.Promise.resolve(item).then(executeTask);\r\n };\r\n }\r\n else if (true) {\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const node = document.createElement('div');\r\n const queue = [];\r\n const observer = new HostMutationObserver(function () {\r\n while (queue.length > 0) {\r\n const item = queue.shift();\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n }\r\n });\r\n observer.observe(node, { attributes: true });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n node.setAttribute('queueStatus', '1');\r\n };\r\n }\r\n else {\r\n enqueue = function (item) {\r\n checkMicroTaskQueue();\r\n microTasks.push(item);\r\n };\r\n }\r\n return function (callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n enqueue(item);\r\n return getQueueHandle(item);\r\n };\r\n})();\r\n//# sourceMappingURL=queue.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/queue.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/queue.mjs\n// module chunks = menu","/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/shim/support/util.mjs\n// module id = ./node_modules/@dojo/framework/shim/support/util.mjs\n// module chunks = menu","import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/Injector.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/Injector.mjs\n// module chunks = menu","import { Evented } from '../core/Evented';\r\nimport Map from '../shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/NodeHandler.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/NodeHandler.mjs\n// module chunks = menu","import Promise from '../shim/Promise';\r\nimport Map from '../shim/Map';\r\nimport Symbol from '../shim/Symbol';\r\nimport { Evented } from '../core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/Registry.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/Registry.mjs\n// module chunks = menu","import { Map } from '../shim/Map';\r\nimport { Evented } from '../core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs\n// module chunks = menu","import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/WidgetBase.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/WidgetBase.mjs\n// module chunks = menu","let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs\n// module chunks = menu","import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/d.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/d.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs\n// module chunks = menu","import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs\n// module chunks = menu","import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs\n// module chunks = menu","/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs\n// module chunks = menu","import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/decorators/inject.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/decorators/inject.mjs\n// module chunks = menu","import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/diff.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/diff.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs\n// module chunks = menu","import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs\n// module chunks = menu","import global from '../shim/global';\r\nimport { from as arrayFrom } from '../shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '../shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst nextSiblingMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode[propName]();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (nodeOperations.indexOf(propName) !== -1) {\r\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const item = instanceMap.get(dnode.instance);\r\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n oldIndex++;\r\n newIndex++;\r\n textUpdated =\r\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let childrenArray = oldChildren;\r\n let nextIndex = oldIndex + 1;\r\n let child = oldChildren[oldIndex];\r\n if (!child) {\r\n child = siblings[0];\r\n nextIndex = 1;\r\n childrenArray = siblings;\r\n }\r\n if (child) {\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n const item = instanceMap.get(insertBefore.instance);\r\n if (item && item.dnode.rendered) {\r\n insertBeforeChildren.push(...item.dnode.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\r\n break;\r\n }\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\r\n insertBeforeChildren.push(childrenArray[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n const nextSiblings = children.slice(i + 1);\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n nextSiblingMap.set(instance, nextSiblings);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n nextSiblingMap.set(instance, nextSiblings);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const nextSiblings = nextSiblingMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@dojo/framework/widget-core/vdom.mjs\n// module id = ./node_modules/@dojo/framework/widget-core/vdom.mjs\n// module chunks = menu","/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module id = ./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js\n// module chunks = menu","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = ./node_modules/process/browser.js\n// module chunks = menu","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator];\r\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/tslib/tslib.es6.js\n// module id = ./node_modules/tslib/tslib.es6.js\n// module chunks = menu","var 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 || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = 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// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = ./node_modules/webpack/buildin/global.js\n// module chunks = menu","import { v } from '@dojo/framework/widget-core/d';\r\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\r\nimport { WidgetProperties, WNode } from '@dojo/framework/widget-core/interfaces';\r\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\r\nimport { MenuItem, MenuItemProperties } from '../menu-item/MenuItem';\r\n\r\nimport * as css from './menu.m.css';\r\n\r\ninterface MenuProperties extends WidgetProperties {\r\n\tonSelected: (data: any) => void;\r\n}\r\n\r\n@customElement({\r\n\ttag: 'demo-menu',\r\n\tevents: ['onSelected']\r\n})\r\n@theme(css)\r\nexport class Menu extends ThemedMixin(WidgetBase)> {\r\n\tprivate _selectedId: number;\r\n\r\n\tprivate _onSelected(id: number, data: any) {\r\n\t\tthis._selectedId = id;\r\n\t\tthis.properties.onSelected(data);\r\n\t\tthis.invalidate();\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\tconst items = this.children.map((child, index) => {\r\n\t\t\tif (child) {\r\n\t\t\t\tconst properties: Partial = {\r\n\t\t\t\t\tonSelected: (data: any) => {\r\n\t\t\t\t\t\tthis._onSelected(index, data);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\tif (this._selectedId !== undefined) {\r\n\t\t\t\t\tproperties.selected = index === this._selectedId;\r\n\t\t\t\t}\r\n\t\t\t\tchild.properties = { ...child.properties, ...properties };\r\n\t\t\t}\r\n\t\t\treturn child;\r\n\t\t});\r\n\r\n\t\treturn v('nav', { classes: this.theme(css.root) }, [\r\n\t\t\tv(\r\n\t\t\t\t'ol',\r\n\t\t\t\t{\r\n\t\t\t\t\tclasses: this.theme(css.menuContainer)\r\n\t\t\t\t},\r\n\t\t\t\titems\r\n\t\t\t)\r\n\t\t]);\r\n\t}\r\n}\r\n\r\nexport default Menu;\r\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@dojo/webpack-contrib/css-module-dts-loader?type=ts&instanceName=0_menu!./src/menu/Menu.ts","// removed by extract-text-webpack-plugin\nmodule.exports = {\" _key\":\"test-app/menu\",\"root\":\"_3bA6jdSn\",\"menuContainer\":\"_1eoGfqku\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/menu/menu.m.css\n// module id = ./src/menu/menu.m.css\n// module chunks = menu"],"sourceRoot":""} \ No newline at end of file diff --git a/test-app/fixtures/windows/info/menu-item/report.html b/test-app/fixtures/windows/info/menu-item/report.html index dc2cc77..603d1c2 100644 --- a/test-app/fixtures/windows/info/menu-item/report.html +++ b/test-app/fixtures/windows/info/menu-item/report.html @@ -4,7 +4,7 @@ Webpack Bundle Analyzer diff --git a/test-app/fixtures/windows/info/menu-item/stats.json b/test-app/fixtures/windows/info/menu-item/stats.json index e789e33..ec81aab 100644 --- a/test-app/fixtures/windows/info/menu-item/stats.json +++ b/test-app/fixtures/windows/info/menu-item/stats.json @@ -2,8 +2,8 @@ "errors": [], "warnings": [], "version": "3.8.1", - "hash": "569730b4d721e461702a", - "time": 7360, + "hash": "0f998ebbc6b593fa2700", + "time": 8047, "publicPath": "", "assetsByChunkName": { "menu-item": [ @@ -16,7 +16,7 @@ "assets": [ { "name": "menu-item-1.0.0.js", - "size": 54046, + "size": 55222, "chunks": [ "menu-item" ], @@ -38,7 +38,7 @@ }, { "name": "menu-item-1.0.0.js.map", - "size": 273747, + "size": 275213, "chunks": [ "menu-item" ], @@ -80,7 +80,7 @@ "initial": true, "entry": true, "extraAsync": false, - "size": 194939, + "size": 195159, "names": [ "menu-item" ], @@ -90,16 +90,16 @@ "menu-item-1.0.0.js.map", "menu-item-1.0.0.css.map" ], - "hash": "86233aac98ae5e5258fe", + "hash": "343c518bbb7c58eef0ae", "parents": [], "modules": [ { - "id": "./node_modules/@dojo/core/Destroyable.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "name": "./node_modules/@dojo/core/Destroyable.mjs", + "id": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "name": "./node_modules/@dojo/framework/core/Destroyable.mjs", "index": 25, "index2": 17, - "size": 1668, + "size": 1665, "cacheable": true, "built": true, "optional": false, @@ -108,18 +108,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "issuerId": "./node_modules/@dojo/core/Evented.mjs", - "issuerName": "./node_modules/@dojo/core/Evented.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "issuerId": "./node_modules/@dojo/framework/core/Evented.mjs", + "issuerName": "./node_modules/@dojo/framework/core/Evented.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", "userRequest": "./Destroyable", "loc": "2:0-44" @@ -134,15 +134,15 @@ ], "optimizationBailout": [], "depth": 6, - "source": "import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" + "source": "import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" }, { - "id": "./node_modules/@dojo/core/Evented.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "name": "./node_modules/@dojo/core/Evented.mjs", + "id": "./node_modules/@dojo/framework/core/Evented.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "name": "./node_modules/@dojo/framework/core/Evented.mjs", "index": 24, "index2": 18, - "size": 2220, + "size": 2222, "cacheable": true, "built": true, "optional": false, @@ -151,48 +151,48 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "issuerId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "issuerName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "2:0-45" + "userRequest": "../core/Evented", + "loc": "2:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "4:0-45" + "userRequest": "../core/Evented", + "loc": "4:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Injector.mjs", - "module": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Injector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Injector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" } ], "usedExports": [ @@ -205,15 +205,15 @@ ], "optimizationBailout": [], "depth": 5, - "source": "import Map from '@dojo/shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n methods.forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map" + "source": "import Map from '../shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n [...methods].forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map" }, { - "id": "./node_modules/@dojo/core/lang.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "name": "./node_modules/@dojo/core/lang.mjs", + "id": "./node_modules/@dojo/framework/core/lang.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "name": "./node_modules/@dojo/framework/core/lang.mjs", "index": 26, "index2": 16, - "size": 6843, + "size": 6837, "cacheable": true, "built": true, "optional": false, @@ -222,27 +222,27 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/lang", + "userRequest": "../../core/lang", "loc": "2:0-41" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", "userRequest": "./lang", "loc": "1:0-47" @@ -267,12 +267,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" + "source": "import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" }, { - "id": "./node_modules/@dojo/has/has.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "name": "./node_modules/@dojo/has/has.mjs", + "id": "./node_modules/@dojo/framework/has/has.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "name": "./node_modules/@dojo/framework/has/has.mjs", "index": 7, "index2": 3, "size": 6500, @@ -284,29 +284,29 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "issuerId": "./node_modules/@dojo/shim/support/has.mjs", - "issuerName": "./node_modules/@dojo/shim/support/has.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/support/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "1:0-41" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "4:0-30" } ], @@ -328,9 +328,9 @@ "source": "function isFeatureTestThenable(value) {\r\n return value && value.then;\r\n}\r\n/**\r\n * A cache of results of feature tests\r\n */\r\nexport const testCache = {};\r\n/**\r\n * A cache of the un-resolved feature tests\r\n */\r\nexport const testFunctions = {};\r\n/**\r\n * A cache of unresolved thenables (probably promises)\r\n * @type {{}}\r\n */\r\nconst testThenables = {};\r\n/**\r\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\r\n */\r\nconst globalScope = (function () {\r\n /* istanbul ignore else */\r\n if (typeof window !== 'undefined') {\r\n // Browsers\r\n return window;\r\n }\r\n else if (typeof global !== 'undefined') {\r\n // Node\r\n return global;\r\n }\r\n else if (typeof self !== 'undefined') {\r\n // Web workers\r\n return self;\r\n }\r\n /* istanbul ignore next */\r\n return {};\r\n})();\r\n/* Grab the staticFeatures if there are available */\r\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\r\n/* Cleaning up the DojoHasEnviornment */\r\nif ('DojoHasEnvironment' in globalScope) {\r\n delete globalScope.DojoHasEnvironment;\r\n}\r\n/**\r\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\r\n * returns a map.\r\n *\r\n * @param value The value to guard for\r\n */\r\nfunction isStaticFeatureFunction(value) {\r\n return typeof value === 'function';\r\n}\r\n/**\r\n * The cache of asserted features that were available in the global scope when the\r\n * module loaded\r\n */\r\nconst staticCache = staticFeatures\r\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\r\n : {}; /* Providing an empty cache, if none was in the environment\r\n\r\n/**\r\n* AMD plugin function.\r\n*\r\n* Conditional loads modules based on a has feature test value.\r\n*\r\n* @param resourceId Gives the resolved module id to load.\r\n* @param require The loader require function with respect to the module that contained the plugin resource in its\r\n* dependency list.\r\n* @param load Callback to loader that consumes result of plugin demand.\r\n*/\r\nexport function load(resourceId, require, load, config) {\r\n resourceId ? require([resourceId], load) : load();\r\n}\r\n/**\r\n * AMD plugin function.\r\n *\r\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\r\n * value(s).\r\n *\r\n * @param resourceId The id of the module\r\n * @param normalize Resolves a relative module id into an absolute module id\r\n */\r\nexport function normalize(resourceId, normalize) {\r\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\r\n let i = 0;\r\n function get(skip) {\r\n const term = tokens[i++];\r\n if (term === ':') {\r\n // empty string module name, resolves to null\r\n return null;\r\n }\r\n else {\r\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\r\n if (tokens[i++] === '?') {\r\n if (!skip && has(term)) {\r\n // matched the feature, get the first value from the options\r\n return get();\r\n }\r\n else {\r\n // did not match, get the second value, passing over the first\r\n get(true);\r\n return get(skip);\r\n }\r\n }\r\n // a module\r\n return term;\r\n }\r\n }\r\n const id = get();\r\n return id && normalize(id);\r\n}\r\n/**\r\n * Check if a feature has already been registered\r\n *\r\n * @param feature the name of the feature\r\n */\r\nexport function exists(feature) {\r\n const normalizedFeature = feature.toLowerCase();\r\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\r\n}\r\n/**\r\n * Register a new test for a named feature.\r\n *\r\n * @example\r\n * has.add('dom-addeventlistener', !!document.addEventListener);\r\n *\r\n * @example\r\n * has.add('touch-events', function () {\r\n * return 'ontouchstart' in document\r\n * });\r\n *\r\n * @param feature the name of the feature\r\n * @param value the value reported of the feature, or a function that will be executed once on first test\r\n * @param overwrite if an existing value should be overwritten. Defaults to false.\r\n */\r\nexport function add(feature, value, overwrite = false) {\r\n const normalizedFeature = feature.toLowerCase();\r\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\r\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\r\n }\r\n if (typeof value === 'function') {\r\n testFunctions[normalizedFeature] = value;\r\n }\r\n else if (isFeatureTestThenable(value)) {\r\n testThenables[feature] = value.then((resolvedValue) => {\r\n testCache[feature] = resolvedValue;\r\n delete testThenables[feature];\r\n }, () => {\r\n delete testThenables[feature];\r\n });\r\n }\r\n else {\r\n testCache[normalizedFeature] = value;\r\n delete testFunctions[normalizedFeature];\r\n }\r\n}\r\n/**\r\n * Return the current value of a named feature.\r\n *\r\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\r\n */\r\nexport default function has(feature) {\r\n let result;\r\n const normalizedFeature = feature.toLowerCase();\r\n if (normalizedFeature in staticCache) {\r\n result = staticCache[normalizedFeature];\r\n }\r\n else if (testFunctions[normalizedFeature]) {\r\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\r\n delete testFunctions[normalizedFeature];\r\n }\r\n else if (normalizedFeature in testCache) {\r\n result = testCache[normalizedFeature];\r\n }\r\n else if (feature in testThenables) {\r\n return false;\r\n }\r\n else {\r\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\r\n }\r\n return result;\r\n}\r\n/*\r\n * Out of the box feature tests\r\n */\r\n/* Environments */\r\n/* Used as a value to provide a debug only code path */\r\nadd('debug', true);\r\n/* Detects if the environment is \"browser like\" */\r\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\r\n/* Detects if the environment appears to be NodeJS */\r\nadd('host-node', function () {\r\n if (typeof process === 'object' && process.versions && process.versions.node) {\r\n return process.versions.node;\r\n }\r\n});\r\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Map.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "name": "./node_modules/@dojo/shim/Map.mjs", + "id": "./node_modules/@dojo/framework/shim/Map.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "name": "./node_modules/@dojo/framework/shim/Map.mjs", "index": 15, "index2": 12, "size": 3426, @@ -342,57 +342,57 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-37" + "userRequest": "../shim/Map", + "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" } ], "usedExports": [ @@ -408,9 +408,9 @@ "source": "import { isArrayLike, ShimIterator } from './iterator';\r\nimport global from './global';\r\nimport { is as objectIs } from './object';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let Map = global.Map;\r\nif (!true) {\r\n Map = (_a = class Map {\r\n constructor(iterable) {\r\n this._keys = [];\r\n this._values = [];\r\n this[Symbol.toStringTag] = 'Map';\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const value = iterable[i];\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n else {\r\n for (const value of iterable) {\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * An alternative to Array.prototype.indexOf using Object.is\r\n * to check for equality. See http://mzl.la/1zuKO2V\r\n */\r\n _indexOfKey(keys, key) {\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n if (objectIs(keys[i], key)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n get size() {\r\n return this._keys.length;\r\n }\r\n clear() {\r\n this._keys.length = this._values.length = 0;\r\n }\r\n delete(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._keys.splice(index, 1);\r\n this._values.splice(index, 1);\r\n return true;\r\n }\r\n entries() {\r\n const values = this._keys.map((key, i) => {\r\n return [key, this._values[i]];\r\n });\r\n return new ShimIterator(values);\r\n }\r\n forEach(callback, context) {\r\n const keys = this._keys;\r\n const values = this._values;\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n callback.call(context, values[i], keys[i], this);\r\n }\r\n }\r\n get(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n return index < 0 ? undefined : this._values[index];\r\n }\r\n has(key) {\r\n return this._indexOfKey(this._keys, key) > -1;\r\n }\r\n keys() {\r\n return new ShimIterator(this._keys);\r\n }\r\n set(key, value) {\r\n let index = this._indexOfKey(this._keys, key);\r\n index = index < 0 ? this._keys.length : index;\r\n this._keys[index] = key;\r\n this._values[index] = value;\r\n return this;\r\n }\r\n values() {\r\n return new ShimIterator(this._values);\r\n }\r\n [Symbol.iterator]() {\r\n return this.entries();\r\n }\r\n },\r\n _a[Symbol.species] = _a,\r\n _a);\r\n}\r\nexport default Map;\r\nvar _a;\r\n//# sourceMappingURL=Map.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Promise.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "name": "./node_modules/@dojo/shim/Promise.mjs", + "id": "./node_modules/@dojo/framework/shim/Promise.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "name": "./node_modules/@dojo/framework/shim/Promise.mjs", "index": 22, "index2": 15, "size": 8717, @@ -422,30 +422,30 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "issuerId": "./node_modules/@dojo/widget-core/Registry.mjs", - "issuerName": "./node_modules/@dojo/widget-core/Registry.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "1:0-41" + "userRequest": "../shim/Promise", + "loc": "1:0-38" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "2:0-41" + "userRequest": "../shim/Promise", + "loc": "2:0-38" } ], "usedExports": [ @@ -461,9 +461,9 @@ "source": "import global from './global';\r\nimport { queueMicroTask } from './support/queue';\r\nimport './Symbol';\r\nimport has from './support/has';\r\nexport let ShimPromise = global.Promise;\r\nexport const isThenable = function isThenable(value) {\r\n return value && typeof value.then === 'function';\r\n};\r\nif (!true) {\r\n global.Promise = ShimPromise = (_a = class Promise {\r\n /**\r\n * Creates a new Promise.\r\n *\r\n * @constructor\r\n *\r\n * @param executor\r\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\r\n * starting the asynchronous operation when it is invoked.\r\n *\r\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\r\n * successfully, or the `reject` function when the operation fails.\r\n */\r\n constructor(executor) {\r\n /**\r\n * The current state of this promise.\r\n */\r\n this.state = 1 /* Pending */;\r\n this[Symbol.toStringTag] = 'Promise';\r\n /**\r\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\r\n */\r\n let isChained = false;\r\n /**\r\n * Whether or not this promise is in a resolved state.\r\n */\r\n const isResolved = () => {\r\n return this.state !== 1 /* Pending */ || isChained;\r\n };\r\n /**\r\n * Callbacks that should be invoked once the asynchronous operation has completed.\r\n */\r\n let callbacks = [];\r\n /**\r\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\r\n * enqueues callbacks for execution on the next event loop turn.\r\n */\r\n let whenFinished = function (callback) {\r\n if (callbacks) {\r\n callbacks.push(callback);\r\n }\r\n };\r\n /**\r\n * Settles this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const settle = (newState, value) => {\r\n // A promise can only be settled once.\r\n if (this.state !== 1 /* Pending */) {\r\n return;\r\n }\r\n this.state = newState;\r\n this.resolvedValue = value;\r\n whenFinished = queueMicroTask;\r\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\r\n // wait an extra turn.\r\n if (callbacks && callbacks.length > 0) {\r\n queueMicroTask(function () {\r\n if (callbacks) {\r\n let count = callbacks.length;\r\n for (let i = 0; i < count; ++i) {\r\n callbacks[i].call(null);\r\n }\r\n callbacks = null;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Resolves this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const resolve = (newState, value) => {\r\n if (isResolved()) {\r\n return;\r\n }\r\n if (isThenable(value)) {\r\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\r\n isChained = true;\r\n }\r\n else {\r\n settle(newState, value);\r\n }\r\n };\r\n this.then = (onFulfilled, onRejected) => {\r\n return new Promise((resolve, reject) => {\r\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\r\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\r\n // event loop.\r\n whenFinished(() => {\r\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\r\n if (typeof callback === 'function') {\r\n try {\r\n resolve(callback(this.resolvedValue));\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n else if (this.state === 2 /* Rejected */) {\r\n reject(this.resolvedValue);\r\n }\r\n else {\r\n resolve(this.resolvedValue);\r\n }\r\n });\r\n });\r\n };\r\n try {\r\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\r\n }\r\n catch (error) {\r\n settle(2 /* Rejected */, error);\r\n }\r\n }\r\n static all(iterable) {\r\n return new this(function (resolve, reject) {\r\n const values = [];\r\n let complete = 0;\r\n let total = 0;\r\n let populating = true;\r\n function fulfill(index, value) {\r\n values[index] = value;\r\n ++complete;\r\n finish();\r\n }\r\n function finish() {\r\n if (populating || complete < total) {\r\n return;\r\n }\r\n resolve(values);\r\n }\r\n function processItem(index, item) {\r\n ++total;\r\n if (isThenable(item)) {\r\n // If an item Promise rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(fulfill.bind(null, index), reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(fulfill.bind(null, index));\r\n }\r\n }\r\n let i = 0;\r\n for (const value of iterable) {\r\n processItem(i, value);\r\n i++;\r\n }\r\n populating = false;\r\n finish();\r\n });\r\n }\r\n static race(iterable) {\r\n return new this(function (resolve, reject) {\r\n for (const item of iterable) {\r\n if (item instanceof Promise) {\r\n // If a Promise item rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(resolve, reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(resolve);\r\n }\r\n }\r\n });\r\n }\r\n static reject(reason) {\r\n return new this(function (resolve, reject) {\r\n reject(reason);\r\n });\r\n }\r\n static resolve(value) {\r\n return new this(function (resolve) {\r\n resolve(value);\r\n });\r\n }\r\n catch(onRejected) {\r\n return this.then(undefined, onRejected);\r\n }\r\n },\r\n _a[Symbol.species] = ShimPromise,\r\n _a);\r\n}\r\nexport default ShimPromise;\r\nvar _a;\r\n//# sourceMappingURL=Promise.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Symbol.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "name": "./node_modules/@dojo/shim/Symbol.mjs", + "id": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "name": "./node_modules/@dojo/framework/shim/Symbol.mjs", "index": 5, "index2": 7, "size": 6073, @@ -475,84 +475,84 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/d.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\d.mjs", - "module": "./node_modules/@dojo/widget-core/d.mjs", - "moduleName": "./node_modules/@dojo/widget-core/d.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "1:0-39" + "userRequest": "../shim/Symbol", + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\d.mjs", + "module": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/d.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" + "userRequest": "../shim/Symbol", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "5:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "4:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "type": "harmony import", + "userRequest": "../shim/Symbol", + "loc": "3:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "1:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./Symbol", - "loc": "3:0-18" + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./Symbol", - "loc": "3:0-36" + "loc": "3:0-18" } ], "usedExports": [ @@ -568,9 +568,9 @@ "source": "import has from './support/has';\r\nimport global from './global';\r\nimport { getValueDescriptor } from './support/util';\r\nexport let Symbol = global.Symbol;\r\nif (!true) {\r\n /**\r\n * Throws if the value is not a symbol, used internally within the Shim\r\n * @param {any} value The value to check\r\n * @return {symbol} Returns the symbol or throws\r\n */\r\n const validateSymbol = function validateSymbol(value) {\r\n if (!isSymbol(value)) {\r\n throw new TypeError(value + ' is not a symbol');\r\n }\r\n return value;\r\n };\r\n const defineProperties = Object.defineProperties;\r\n const defineProperty = Object.defineProperty;\r\n const create = Object.create;\r\n const objPrototype = Object.prototype;\r\n const globalSymbols = {};\r\n const getSymbolName = (function () {\r\n const created = create(null);\r\n return function (desc) {\r\n let postfix = 0;\r\n let name;\r\n while (created[String(desc) + (postfix || '')]) {\r\n ++postfix;\r\n }\r\n desc += String(postfix || '');\r\n created[desc] = true;\r\n name = '@@' + desc;\r\n // FIXME: Temporary guard until the duplicate execution when testing can be\r\n // pinned down.\r\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\r\n defineProperty(objPrototype, name, {\r\n set: function (value) {\r\n defineProperty(this, name, getValueDescriptor(value));\r\n }\r\n });\r\n }\r\n return name;\r\n };\r\n })();\r\n const InternalSymbol = function Symbol(description) {\r\n if (this instanceof InternalSymbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n return Symbol(description);\r\n };\r\n Symbol = global.Symbol = function Symbol(description) {\r\n if (this instanceof Symbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n const sym = Object.create(InternalSymbol.prototype);\r\n description = description === undefined ? '' : String(description);\r\n return defineProperties(sym, {\r\n __description__: getValueDescriptor(description),\r\n __name__: getValueDescriptor(getSymbolName(description))\r\n });\r\n };\r\n /* Decorate the Symbol function with the appropriate properties */\r\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\r\n if (globalSymbols[key]) {\r\n return globalSymbols[key];\r\n }\r\n return (globalSymbols[key] = Symbol(String(key)));\r\n }));\r\n defineProperties(Symbol, {\r\n keyFor: getValueDescriptor(function (sym) {\r\n let key;\r\n validateSymbol(sym);\r\n for (key in globalSymbols) {\r\n if (globalSymbols[key] === sym) {\r\n return key;\r\n }\r\n }\r\n }),\r\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\r\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\r\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\r\n match: getValueDescriptor(Symbol.for('match'), false, false),\r\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\r\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\r\n search: getValueDescriptor(Symbol.for('search'), false, false),\r\n species: getValueDescriptor(Symbol.for('species'), false, false),\r\n split: getValueDescriptor(Symbol.for('split'), false, false),\r\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\r\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\r\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\r\n });\r\n /* Decorate the InternalSymbol object */\r\n defineProperties(InternalSymbol.prototype, {\r\n constructor: getValueDescriptor(Symbol),\r\n toString: getValueDescriptor(function () {\r\n return this.__name__;\r\n }, false, false)\r\n });\r\n /* Decorate the Symbol.prototype */\r\n defineProperties(Symbol.prototype, {\r\n toString: getValueDescriptor(function () {\r\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\r\n }),\r\n valueOf: getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n })\r\n });\r\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n }));\r\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\r\n}\r\n/**\r\n * A custom guard function that determines if an object is a symbol or not\r\n * @param {any} value The value to check to see if it is a symbol or not\r\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\r\n */\r\nexport function isSymbol(value) {\r\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\r\n}\r\n/**\r\n * Fill any missing well known symbols if the native Symbol is missing them\r\n */\r\n[\r\n 'hasInstance',\r\n 'isConcatSpreadable',\r\n 'iterator',\r\n 'species',\r\n 'replace',\r\n 'search',\r\n 'split',\r\n 'match',\r\n 'toPrimitive',\r\n 'toStringTag',\r\n 'unscopables',\r\n 'observable'\r\n].forEach((wellKnown) => {\r\n if (!Symbol[wellKnown]) {\r\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\r\n }\r\n});\r\nexport default Symbol;\r\n//# sourceMappingURL=Symbol.mjs.map" }, { - "id": "./node_modules/@dojo/shim/WeakMap.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "name": "./node_modules/@dojo/shim/WeakMap.mjs", + "id": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "name": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "index": 19, "index2": 13, "size": 3858, @@ -582,38 +582,38 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "2:0-41" + "userRequest": "../shim/WeakMap", + "loc": "2:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "5:0-41" + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", + "userRequest": "../../shim/WeakMap", "loc": "1:0-41" } ], @@ -629,9 +629,9 @@ "source": "import global from './global';\r\nimport { isArrayLike } from './iterator';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let WeakMap = global.WeakMap;\r\nif (!true) {\r\n const DELETED = {};\r\n const getUID = function getUID() {\r\n return Math.floor(Math.random() * 100000000);\r\n };\r\n const generateName = (function () {\r\n let startId = Math.floor(Date.now() % 100000000);\r\n return function generateName() {\r\n return '__wm' + getUID() + (startId++ + '__');\r\n };\r\n })();\r\n WeakMap = class WeakMap {\r\n constructor(iterable) {\r\n this[Symbol.toStringTag] = 'WeakMap';\r\n this._name = generateName();\r\n this._frozenEntries = [];\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const item = iterable[i];\r\n this.set(item[0], item[1]);\r\n }\r\n }\r\n else {\r\n for (const [key, value] of iterable) {\r\n this.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n _getFrozenEntryIndex(key) {\r\n for (let i = 0; i < this._frozenEntries.length; i++) {\r\n if (this._frozenEntries[i].key === key) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n delete(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n entry.value = DELETED;\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n this._frozenEntries.splice(frozenIndex, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n get(key) {\r\n if (key === undefined || key === null) {\r\n return undefined;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n return entry.value;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return this._frozenEntries[frozenIndex].value;\r\n }\r\n }\r\n has(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n set(key, value) {\r\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\r\n throw new TypeError('Invalid value used as weak map key');\r\n }\r\n let entry = key[this._name];\r\n if (!entry || entry.key !== key) {\r\n entry = Object.create(null, {\r\n key: { value: key }\r\n });\r\n if (Object.isFrozen(key)) {\r\n this._frozenEntries.push(entry);\r\n }\r\n else {\r\n Object.defineProperty(key, this._name, {\r\n value: entry\r\n });\r\n }\r\n }\r\n entry.value = value;\r\n return this;\r\n }\r\n };\r\n}\r\nexport default WeakMap;\r\n//# sourceMappingURL=WeakMap.mjs.map" }, { - "id": "./node_modules/@dojo/shim/array.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "name": "./node_modules/@dojo/shim/array.mjs", + "id": "./node_modules/@dojo/framework/shim/array.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "name": "./node_modules/@dojo/framework/shim/array.mjs", "index": 30, "index2": 24, "size": 9175, @@ -643,30 +643,30 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "4:0-40" + "userRequest": "../shim/array", + "loc": "4:0-37" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "2:0-53" + "userRequest": "../shim/array", + "loc": "2:0-50" } ], "usedExports": [ @@ -686,9 +686,9 @@ "source": "import global from './global';\r\nimport { isArrayLike, isIterable } from './iterator';\r\nimport { MAX_SAFE_INTEGER } from './number';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\nexport let from;\r\n/**\r\n * Creates a new array from the function parameters.\r\n *\r\n * @param arguments Any number of arguments for the array\r\n * @return An array from the given arguments\r\n */\r\nexport let of;\r\n/* ES6 Array instance methods */\r\n/**\r\n * Copies data internally within an array or array-like object.\r\n *\r\n * @param target The target array-like object\r\n * @param offset The index to start copying values to; if negative, it counts backwards from length\r\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\r\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\r\n * @return The target\r\n */\r\nexport let copyWithin;\r\n/**\r\n * Fills elements of an array-like object with the specified value.\r\n *\r\n * @param target The target to fill\r\n * @param value The value to fill each element of the target with\r\n * @param start The first index to fill\r\n * @param end The (exclusive) index at which to stop filling\r\n * @return The filled target\r\n */\r\nexport let fill;\r\n/**\r\n * Finds and returns the first instance matching the callback or undefined if one is not found.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning if the current value matches a criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first element matching the callback, or undefined if one does not exist\r\n */\r\nexport let find;\r\n/**\r\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\r\n * or -1 if no values satisfy it.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning true if the current value satisfies its criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\r\n */\r\nexport let findIndex;\r\n/* ES7 Array instance methods */\r\n/**\r\n * Determines whether an array includes a given value\r\n *\r\n * @param target the target array-like object\r\n * @param searchElement the item to search for\r\n * @param fromIndex the starting index to search from\r\n * @return `true` if the array includes the element, otherwise `false`\r\n */\r\nexport let includes;\r\nif (true && true) {\r\n from = global.Array.from;\r\n of = global.Array.of;\r\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\r\n fill = wrapNative(global.Array.prototype.fill);\r\n find = wrapNative(global.Array.prototype.find);\r\n findIndex = wrapNative(global.Array.prototype.findIndex);\r\n}\r\nelse {\r\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\r\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n length = Number(length);\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n /**\r\n * From ES6 7.1.4 ToInteger()\r\n *\r\n * @param value A value to convert\r\n * @return An integer\r\n */\r\n const toInteger = function toInteger(value) {\r\n value = Number(value);\r\n if (isNaN(value)) {\r\n return 0;\r\n }\r\n if (value === 0 || !isFinite(value)) {\r\n return value;\r\n }\r\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\r\n };\r\n /**\r\n * Normalizes an offset against a given length, wrapping it if negative.\r\n *\r\n * @param value The original offset\r\n * @param length The total length to normalize against\r\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\r\n */\r\n const normalizeOffset = function normalizeOffset(value, length) {\r\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\r\n };\r\n from = function from(arrayLike, mapFunction, thisArg) {\r\n if (arrayLike == null) {\r\n throw new TypeError('from: requires an array-like object');\r\n }\r\n if (mapFunction && thisArg) {\r\n mapFunction = mapFunction.bind(thisArg);\r\n }\r\n /* tslint:disable-next-line:variable-name */\r\n const Constructor = this;\r\n const length = toLength(arrayLike.length);\r\n // Support extension\r\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\r\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\r\n return array;\r\n }\r\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\r\n // with the iteration on IE when using a NaN array length.\r\n if (isArrayLike(arrayLike)) {\r\n if (length === 0) {\r\n return [];\r\n }\r\n for (let i = 0; i < arrayLike.length; i++) {\r\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\r\n }\r\n }\r\n else {\r\n let i = 0;\r\n for (const value of arrayLike) {\r\n array[i] = mapFunction ? mapFunction(value, i) : value;\r\n i++;\r\n }\r\n }\r\n if (arrayLike.length !== undefined) {\r\n array.length = length;\r\n }\r\n return array;\r\n };\r\n of = function of(...items) {\r\n return Array.prototype.slice.call(items);\r\n };\r\n copyWithin = function copyWithin(target, offset, start, end) {\r\n if (target == null) {\r\n throw new TypeError('copyWithin: target must be an array-like object');\r\n }\r\n const length = toLength(target.length);\r\n offset = normalizeOffset(toInteger(offset), length);\r\n start = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n let count = Math.min(end - start, length - offset);\r\n let direction = 1;\r\n if (offset > start && offset < start + count) {\r\n direction = -1;\r\n start += count - 1;\r\n offset += count - 1;\r\n }\r\n while (count > 0) {\r\n if (start in target) {\r\n target[offset] = target[start];\r\n }\r\n else {\r\n delete target[offset];\r\n }\r\n offset += direction;\r\n start += direction;\r\n count--;\r\n }\r\n return target;\r\n };\r\n fill = function fill(target, value, start, end) {\r\n const length = toLength(target.length);\r\n let i = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n while (i < end) {\r\n target[i++] = value;\r\n }\r\n return target;\r\n };\r\n find = function find(target, callback, thisArg) {\r\n const index = findIndex(target, callback, thisArg);\r\n return index !== -1 ? target[index] : undefined;\r\n };\r\n findIndex = function findIndex(target, callback, thisArg) {\r\n const length = toLength(target.length);\r\n if (!callback) {\r\n throw new TypeError('find: second argument must be a function');\r\n }\r\n if (thisArg) {\r\n callback = callback.bind(thisArg);\r\n }\r\n for (let i = 0; i < length; i++) {\r\n if (callback(target[i], i, target)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\nif (true) {\r\n includes = wrapNative(global.Array.prototype.includes);\r\n}\r\nelse {\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n length = Number(length);\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n includes = function includes(target, searchElement, fromIndex = 0) {\r\n let len = toLength(target.length);\r\n for (let i = fromIndex; i < len; ++i) {\r\n const currentElement = target[i];\r\n if (searchElement === currentElement ||\r\n (searchElement !== searchElement && currentElement !== currentElement)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n//# sourceMappingURL=array.mjs.map" }, { - "id": "./node_modules/@dojo/shim/global.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "name": "./node_modules/@dojo/shim/global.mjs", + "id": "./node_modules/@dojo/framework/shim/global.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "name": "./node_modules/@dojo/framework/shim/global.mjs", "index": 10, "index2": 4, "size": 581, @@ -700,117 +700,117 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "6:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "1:0-39" + "userRequest": "../shim/global", + "loc": "6:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/number.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\number.mjs", - "module": "./node_modules/@dojo/shim/number.mjs", - "moduleName": "./node_modules/@dojo/shim/number.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/global", + "loc": "1:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", + "module": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/number.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", "userRequest": "../global", "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "../global", "loc": "1:0-31" @@ -827,9 +827,9 @@ "source": "const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map" }, { - "id": "./node_modules/@dojo/shim/iterator.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "name": "./node_modules/@dojo/shim/iterator.mjs", + "id": "./node_modules/@dojo/framework/shim/iterator.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "name": "./node_modules/@dojo/framework/shim/iterator.mjs", "index": 16, "index2": 10, "size": 3158, @@ -841,36 +841,36 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-53" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "1:0-55" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-41" @@ -889,9 +889,9 @@ "source": "import './Symbol';\nimport { HIGH_SURROGATE_MAX, HIGH_SURROGATE_MIN } from './string';\nconst staticDone = { done: true, value: undefined };\n/**\n * A class that _shims_ an iterator interface on array like objects.\n */\nexport class ShimIterator {\n constructor(list) {\n this._nextIndex = -1;\n if (isIterable(list)) {\n this._nativeIterator = list[Symbol.iterator]();\n }\n else {\n this._list = list;\n }\n }\n /**\n * Return the next iteration result for the Iterator\n */\n next() {\n if (this._nativeIterator) {\n return this._nativeIterator.next();\n }\n if (!this._list) {\n return staticDone;\n }\n if (++this._nextIndex < this._list.length) {\n return {\n done: false,\n value: this._list[this._nextIndex]\n };\n }\n return staticDone;\n }\n [Symbol.iterator]() {\n return this;\n }\n}\n/**\n * A type guard for checking if something has an Iterable interface\n *\n * @param value The value to type guard against\n */\nexport function isIterable(value) {\n return value && typeof value[Symbol.iterator] === 'function';\n}\n/**\n * A type guard for checking if something is ArrayLike\n *\n * @param value The value to type guard against\n */\nexport function isArrayLike(value) {\n return value && typeof value.length === 'number';\n}\n/**\n * Returns the iterator for an object\n *\n * @param iterable The iterable object to return the iterator for\n */\nexport function get(iterable) {\n if (isIterable(iterable)) {\n return iterable[Symbol.iterator]();\n }\n else if (isArrayLike(iterable)) {\n return new ShimIterator(iterable);\n }\n}\n/**\n * Shims the functionality of `for ... of` blocks\n *\n * @param iterable The object the provides an interator interface\n * @param callback The callback which will be called for each item of the iterable\n * @param thisArg Optional scope to pass the callback\n */\nexport function forOf(iterable, callback, thisArg) {\n let broken = false;\n function doBreak() {\n broken = true;\n }\n /* We need to handle iteration of double byte strings properly */\n if (isArrayLike(iterable) && typeof iterable === 'string') {\n const l = iterable.length;\n for (let i = 0; i < l; ++i) {\n let char = iterable[i];\n if (i + 1 < l) {\n const code = char.charCodeAt(0);\n if (code >= HIGH_SURROGATE_MIN && code <= HIGH_SURROGATE_MAX) {\n char += iterable[++i];\n }\n }\n callback.call(thisArg, char, iterable, doBreak);\n if (broken) {\n return;\n }\n }\n }\n else {\n const iterator = get(iterable);\n if (iterator) {\n let result = iterator.next();\n while (!result.done) {\n callback.call(thisArg, result.value, iterable, doBreak);\n if (broken) {\n return;\n }\n result = iterator.next();\n }\n }\n }\n}\n//# sourceMappingURL=iterator.mjs.map" }, { - "id": "./node_modules/@dojo/shim/number.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\number.mjs", - "name": "./node_modules/@dojo/shim/number.mjs", + "id": "./node_modules/@dojo/framework/shim/number.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", + "name": "./node_modules/@dojo/framework/shim/number.mjs", "index": 31, "index2": 23, "size": 1724, @@ -903,18 +903,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./number", "loc": "3:0-44" @@ -935,9 +935,9 @@ "source": "import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map" }, { - "id": "./node_modules/@dojo/shim/object.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "name": "./node_modules/@dojo/shim/object.mjs", + "id": "./node_modules/@dojo/framework/shim/object.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "name": "./node_modules/@dojo/framework/shim/object.mjs", "index": 18, "index2": 11, "size": 4171, @@ -949,39 +949,39 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "issuerId": "./node_modules/@dojo/shim/Map.mjs", - "issuerName": "./node_modules/@dojo/shim/Map.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Map.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Map.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./object", "loc": "3:0-42" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "1:0-43" + "userRequest": "../shim/object", + "loc": "1:0-40" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "2:0-43" + "userRequest": "../shim/object", + "loc": "2:0-40" } ], "usedExports": [ @@ -1003,9 +1003,9 @@ "source": "import global from './global';\r\nimport has from './support/has';\r\nimport { isSymbol } from './Symbol';\r\nexport let assign;\r\n/**\r\n * Gets the own property descriptor of the specified object.\r\n * An own property descriptor is one that is defined directly on the object and is not\r\n * inherited from the object's prototype.\r\n * @param o Object that contains the property.\r\n * @param p Name of the property.\r\n */\r\nexport let getOwnPropertyDescriptor;\r\n/**\r\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\r\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\r\n * @param o Object that contains the own properties.\r\n */\r\nexport let getOwnPropertyNames;\r\n/**\r\n * Returns an array of all symbol properties found directly on object o.\r\n * @param o Object to retrieve the symbols from.\r\n */\r\nexport let getOwnPropertySymbols;\r\n/**\r\n * Returns true if the values are the same value, false otherwise.\r\n * @param value1 The first value.\r\n * @param value2 The second value.\r\n */\r\nexport let is;\r\n/**\r\n * Returns the names of the enumerable properties and methods of an object.\r\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\r\n */\r\nexport let keys;\r\n/* ES7 Object static methods */\r\nexport let getOwnPropertyDescriptors;\r\nexport let entries;\r\nexport let values;\r\nif (true) {\r\n const globalObject = global.Object;\r\n assign = globalObject.assign;\r\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\r\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\r\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\r\n is = globalObject.is;\r\n keys = globalObject.keys;\r\n}\r\nelse {\r\n keys = function symbolAwareKeys(o) {\r\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n assign = function assign(target, ...sources) {\r\n if (target == null) {\r\n // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n const to = Object(target);\r\n sources.forEach((nextSource) => {\r\n if (nextSource) {\r\n // Skip over if undefined or null\r\n keys(nextSource).forEach((nextKey) => {\r\n to[nextKey] = nextSource[nextKey];\r\n });\r\n }\r\n });\r\n return to;\r\n };\r\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\r\n if (isSymbol(prop)) {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n else {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n };\r\n getOwnPropertyNames = function getOwnPropertyNames(o) {\r\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\r\n return Object.getOwnPropertyNames(o)\r\n .filter((key) => Boolean(key.match(/^@@.+/)))\r\n .map((key) => Symbol.for(key.substring(2)));\r\n };\r\n is = function is(value1, value2) {\r\n if (value1 === value2) {\r\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\r\n }\r\n return value1 !== value1 && value2 !== value2; // NaN\r\n };\r\n}\r\nif (true) {\r\n const globalObject = global.Object;\r\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\r\n entries = globalObject.entries;\r\n values = globalObject.values;\r\n}\r\nelse {\r\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\r\n return getOwnPropertyNames(o).reduce((previous, key) => {\r\n previous[key] = getOwnPropertyDescriptor(o, key);\r\n return previous;\r\n }, {});\r\n };\r\n entries = function entries(o) {\r\n return keys(o).map((key) => [key, o[key]]);\r\n };\r\n values = function values(o) {\r\n return keys(o).map((key) => o[key]);\r\n };\r\n}\r\n//# sourceMappingURL=object.mjs.map" }, { - "id": "./node_modules/@dojo/shim/string.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "name": "./node_modules/@dojo/shim/string.mjs", + "id": "./node_modules/@dojo/framework/shim/string.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "name": "./node_modules/@dojo/framework/shim/string.mjs", "index": 17, "index2": 9, "size": 12714, @@ -1017,18 +1017,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "issuerId": "./node_modules/@dojo/shim/iterator.mjs", - "issuerName": "./node_modules/@dojo/shim/iterator.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/iterator.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./string", "loc": "2:0-66" @@ -1059,9 +1059,9 @@ "source": "import global from './global';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\n/**\r\n * The minimum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MIN = 0xd800;\r\n/**\r\n * The maximum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MAX = 0xdbff;\r\n/**\r\n * The minimum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MIN = 0xdc00;\r\n/**\r\n * The maximum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MAX = 0xdfff;\r\n/* ES6 static methods */\r\n/**\r\n * Return the String value whose elements are, in order, the elements in the List elements.\r\n * If length is 0, the empty string is returned.\r\n * @param codePoints The code points to generate the string\r\n */\r\nexport let fromCodePoint;\r\n/**\r\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\r\n * as such the first argument will be a well formed template call site object and the rest\r\n * parameter will contain the substitution values.\r\n * @param template A well-formed template string call site representation.\r\n * @param substitutions A set of substitution values.\r\n */\r\nexport let raw;\r\n/* ES6 instance methods */\r\n/**\r\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\r\n * value of the UTF-16 encoded code point starting at the string element at position pos in\r\n * the String resulting from converting this object to a String.\r\n * If there is no element at that position, the result is undefined.\r\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\r\n */\r\nexport let codePointAt;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * endPosition – length(this). Otherwise returns false.\r\n */\r\nexport let endsWith;\r\n/**\r\n * Returns true if searchString appears as a substring of the result of converting this\r\n * object to a String, at one or more positions that are\r\n * greater than or equal to position; otherwise, returns false.\r\n * @param target The target string\r\n * @param searchString search string\r\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\r\n */\r\nexport let includes;\r\n/**\r\n * Returns the String value result of normalizing the string into the normalization form\r\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\r\n * @param target The target string\r\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\r\n * is \"NFC\"\r\n */\r\nexport let normalize;\r\n/**\r\n * Returns a String value that is made from count copies appended together. If count is 0,\r\n * T is the empty String is returned.\r\n * @param count number of copies to append\r\n */\r\nexport let repeat;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * position. Otherwise returns false.\r\n */\r\nexport let startsWith;\r\n/* ES7 instance methods */\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the end (right) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padEnd;\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the start (left) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padStart;\r\nif (true && true) {\r\n fromCodePoint = global.String.fromCodePoint;\r\n raw = global.String.raw;\r\n codePointAt = wrapNative(global.String.prototype.codePointAt);\r\n endsWith = wrapNative(global.String.prototype.endsWith);\r\n includes = wrapNative(global.String.prototype.includes);\r\n normalize = wrapNative(global.String.prototype.normalize);\r\n repeat = wrapNative(global.String.prototype.repeat);\r\n startsWith = wrapNative(global.String.prototype.startsWith);\r\n}\r\nelse {\r\n /**\r\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\r\n * Used by startsWith, includes, and endsWith.\r\n *\r\n * @return Normalized position.\r\n */\r\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\r\n if (text == null) {\r\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\r\n }\r\n const length = text.length;\r\n position = position !== position ? (isEnd ? length : 0) : position;\r\n return [text, String(search), Math.min(Math.max(position, 0), length)];\r\n };\r\n fromCodePoint = function fromCodePoint(...codePoints) {\r\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\r\n const length = arguments.length;\r\n if (!length) {\r\n return '';\r\n }\r\n const fromCharCode = String.fromCharCode;\r\n const MAX_SIZE = 0x4000;\r\n let codeUnits = [];\r\n let index = -1;\r\n let result = '';\r\n while (++index < length) {\r\n let codePoint = Number(arguments[index]);\r\n // Code points must be finite integers within the valid range\r\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\r\n if (!isValid) {\r\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\r\n }\r\n if (codePoint <= 0xffff) {\r\n // BMP code point\r\n codeUnits.push(codePoint);\r\n }\r\n else {\r\n // Astral code point; split in surrogate halves\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n codePoint -= 0x10000;\r\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\r\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\r\n codeUnits.push(highSurrogate, lowSurrogate);\r\n }\r\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\r\n result += fromCharCode.apply(null, codeUnits);\r\n codeUnits.length = 0;\r\n }\r\n }\r\n return result;\r\n };\r\n raw = function raw(callSite, ...substitutions) {\r\n let rawStrings = callSite.raw;\r\n let result = '';\r\n let numSubstitutions = substitutions.length;\r\n if (callSite == null || callSite.raw == null) {\r\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\r\n }\r\n for (let i = 0, length = rawStrings.length; i < length; i++) {\r\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\r\n }\r\n return result;\r\n };\r\n codePointAt = function codePointAt(text, position = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\r\n if (text == null) {\r\n throw new TypeError('string.codePointAt requries a valid string.');\r\n }\r\n const length = text.length;\r\n if (position !== position) {\r\n position = 0;\r\n }\r\n if (position < 0 || position >= length) {\r\n return undefined;\r\n }\r\n // Get the first code unit\r\n const first = text.charCodeAt(position);\r\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\r\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n const second = text.charCodeAt(position + 1);\r\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\r\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\r\n }\r\n }\r\n return first;\r\n };\r\n endsWith = function endsWith(text, search, endPosition) {\r\n if (endPosition == null) {\r\n endPosition = text.length;\r\n }\r\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\r\n const start = endPosition - search.length;\r\n if (start < 0) {\r\n return false;\r\n }\r\n return text.slice(start, endPosition) === search;\r\n };\r\n includes = function includes(text, search, position = 0) {\r\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\r\n return text.indexOf(search, position) !== -1;\r\n };\r\n repeat = function repeat(text, count = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\r\n if (text == null) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (count !== count) {\r\n count = 0;\r\n }\r\n if (count < 0 || count === Infinity) {\r\n throw new RangeError('string.repeat requires a non-negative finite count.');\r\n }\r\n let result = '';\r\n while (count) {\r\n if (count % 2) {\r\n result += text;\r\n }\r\n if (count > 1) {\r\n text += text;\r\n }\r\n count >>= 1;\r\n }\r\n return result;\r\n };\r\n startsWith = function startsWith(text, search, position = 0) {\r\n search = String(search);\r\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\r\n const end = position + search.length;\r\n if (end > text.length) {\r\n return false;\r\n }\r\n return text.slice(position, end) === search;\r\n };\r\n}\r\nif (true) {\r\n padEnd = wrapNative(global.String.prototype.padEnd);\r\n padStart = wrapNative(global.String.prototype.padStart);\r\n}\r\nelse {\r\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padEnd requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText +=\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length);\r\n }\r\n return strText;\r\n };\r\n padStart = function padStart(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padStart requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText =\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length) +\r\n strText;\r\n }\r\n return strText;\r\n };\r\n}\r\n//# sourceMappingURL=string.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/has.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "name": "./node_modules/@dojo/shim/support/has.mjs", + "id": "./node_modules/@dojo/framework/shim/support/has.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "name": "./node_modules/@dojo/framework/shim/support/has.mjs", "index": 6, "index2": 5, "size": 6316, @@ -1073,81 +1073,81 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "3:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "1:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "4:0-32" + "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "2:0-32" + "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "./has", "loc": "2:0-24" @@ -1165,12 +1165,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import has, { add } from '@dojo/has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '@dojo/has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map" + "source": "import has, { add } from '../../has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '../../has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/queue.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "name": "./node_modules/@dojo/shim/support/queue.mjs", + "id": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "name": "./node_modules/@dojo/framework/shim/support/queue.mjs", "index": 23, "index2": 14, "size": 6381, @@ -1182,18 +1182,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "issuerId": "./node_modules/@dojo/shim/Promise.mjs", - "issuerName": "./node_modules/@dojo/shim/Promise.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Promise.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/queue", "loc": "2:0-49" @@ -1210,9 +1210,9 @@ "source": "import global from '../global';\r\nimport has from './has';\r\nfunction executeTask(item) {\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n}\r\nfunction getQueueHandle(item, destructor) {\r\n return {\r\n destroy: function () {\r\n this.destroy = function () { };\r\n item.isActive = false;\r\n item.callback = null;\r\n if (destructor) {\r\n destructor();\r\n }\r\n }\r\n };\r\n}\r\nlet checkMicroTaskQueue;\r\nlet microTasks;\r\n/**\r\n * Schedules a callback to the macrotask queue.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueTask = (function () {\r\n let destructor;\r\n let enqueue;\r\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\r\n if (true) {\r\n const queue = [];\r\n global.addEventListener('message', function (event) {\r\n // Confirm that the event was triggered by the current window and by this particular implementation.\r\n if (event.source === global && event.data === 'dojo-queue-message') {\r\n event.stopPropagation();\r\n if (queue.length) {\r\n executeTask(queue.shift());\r\n }\r\n }\r\n });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n global.postMessage('dojo-queue-message', '*');\r\n };\r\n }\r\n else if (false) {\r\n destructor = global.clearImmediate;\r\n enqueue = function (item) {\r\n return setImmediate(executeTask.bind(null, item));\r\n };\r\n }\r\n else {\r\n destructor = global.clearTimeout;\r\n enqueue = function (item) {\r\n return setTimeout(executeTask.bind(null, item), 0);\r\n };\r\n }\r\n function queueTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const id = enqueue(item);\r\n return getQueueHandle(item, destructor &&\r\n function () {\r\n destructor(id);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueTask(callback);\r\n };\r\n})();\r\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\r\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\r\nif (!true) {\r\n let isMicroTaskQueued = false;\r\n microTasks = [];\r\n checkMicroTaskQueue = function () {\r\n if (!isMicroTaskQueued) {\r\n isMicroTaskQueued = true;\r\n queueTask(function () {\r\n isMicroTaskQueued = false;\r\n if (microTasks.length) {\r\n let item;\r\n while ((item = microTasks.shift())) {\r\n executeTask(item);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n}\r\n/**\r\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\r\n *\r\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\r\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueAnimationTask = (function () {\r\n if (!true) {\r\n return queueTask;\r\n }\r\n function queueAnimationTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\r\n return getQueueHandle(item, function () {\r\n cancelAnimationFrame(rafId);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueAnimationTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueAnimationTask(callback);\r\n };\r\n})();\r\n/**\r\n * Schedules a callback to the microtask queue.\r\n *\r\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\r\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\r\n * registered with `queueTask` or `queueAnimationTask`.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport let queueMicroTask = (function () {\r\n let enqueue;\r\n if (false) {\r\n enqueue = function (item) {\r\n global.process.nextTick(executeTask.bind(null, item));\r\n };\r\n }\r\n else if (true) {\r\n enqueue = function (item) {\r\n global.Promise.resolve(item).then(executeTask);\r\n };\r\n }\r\n else if (true) {\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const node = document.createElement('div');\r\n const queue = [];\r\n const observer = new HostMutationObserver(function () {\r\n while (queue.length > 0) {\r\n const item = queue.shift();\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n }\r\n });\r\n observer.observe(node, { attributes: true });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n node.setAttribute('queueStatus', '1');\r\n };\r\n }\r\n else {\r\n enqueue = function (item) {\r\n checkMicroTaskQueue();\r\n microTasks.push(item);\r\n };\r\n }\r\n return function (callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n enqueue(item);\r\n return getQueueHandle(item);\r\n };\r\n})();\r\n//# sourceMappingURL=queue.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/util.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\util.mjs", - "name": "./node_modules/@dojo/shim/support/util.mjs", + "id": "./node_modules/@dojo/framework/shim/support/util.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\util.mjs", + "name": "./node_modules/@dojo/framework/shim/support/util.mjs", "index": 11, "index2": 6, "size": 853, @@ -1224,36 +1224,36 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "5:0-44" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-52" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-44" @@ -1272,12 +1272,12 @@ "source": "/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Injector.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Injector.mjs", - "name": "./node_modules/@dojo/widget-core/Injector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Injector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "index": 37, "index2": 31, - "size": 496, + "size": 493, "cacheable": true, "built": true, "optional": false, @@ -1286,18 +1286,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../Injector", "loc": "2:0-41" @@ -1312,15 +1312,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" + "source": "import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "name": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "index": 28, "index2": 22, - "size": 1134, + "size": 1128, "cacheable": true, "built": true, "optional": false, @@ -1329,18 +1329,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./NodeHandler", "loc": "7:0-40" @@ -1356,15 +1356,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\r\nimport Map from '@dojo/shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map" + "source": "import { Evented } from '../core/Evented';\r\nimport Map from '../shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Registry.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "name": "./node_modules/@dojo/widget-core/Registry.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "index": 21, "index2": 19, - "size": 3814, + "size": 3802, "cacheable": true, "built": true, "optional": false, @@ -1373,57 +1373,57 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\diff.mjs", - "module": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleName": "./node_modules/@dojo/widget-core/diff.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "type": "harmony import", + "userRequest": "../Registry", + "loc": "2:0-35" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\diff.mjs", + "module": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/diff.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "1:0-46" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "3:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "type": "harmony import", - "userRequest": "../Registry", - "loc": "2:0-35" } ], "usedExports": [ @@ -1441,15 +1441,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import Promise from '@dojo/shim/Promise';\r\nimport Map from '@dojo/shim/Map';\r\nimport Symbol from '@dojo/shim/Symbol';\r\nimport { Evented } from '@dojo/core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map" + "source": "import Promise from '../shim/Promise';\r\nimport Map from '../shim/Map';\r\nimport Symbol from '../shim/Symbol';\r\nimport { Evented } from '../core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "name": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "index": 27, "index2": 21, - "size": 2933, + "size": 2927, "cacheable": true, "built": true, "optional": false, @@ -1458,18 +1458,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./RegistryHandler", "loc": "6:0-48" @@ -1484,15 +1484,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Map } from '@dojo/shim/Map';\r\nimport { Evented } from '@dojo/core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map" + "source": "import { Map } from '../shim/Map';\r\nimport { Evented } from '../core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "name": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "id": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "name": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "index": 14, "index2": 26, - "size": 14386, + "size": 13720, "cacheable": true, "built": true, "optional": false, @@ -1501,18 +1501,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./WidgetBase", "loc": "2:0-50" @@ -1523,8 +1523,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/WidgetBase", - "loc": "5:0-58" + "userRequest": "@dojo/framework/widget-core/WidgetBase", + "loc": "5:0-68" } ], "usedExports": [ @@ -1538,12 +1538,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" + "source": "import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\animations\\cssTransitions.mjs", - "name": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", + "id": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\animations\\cssTransitions.mjs", + "name": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", "index": 33, "index2": 27, "size": 2288, @@ -1555,18 +1555,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "../animations/cssTransitions", "loc": "3:0-58" @@ -1583,12 +1583,12 @@ "source": "let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/d.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\d.mjs", - "name": "./node_modules/@dojo/widget-core/d.mjs", + "id": "./node_modules/@dojo/framework/widget-core/d.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\d.mjs", + "name": "./node_modules/@dojo/framework/widget-core/d.mjs", "index": 4, "index2": 8, - "size": 3270, + "size": 3267, "cacheable": true, "built": true, "optional": false, @@ -1597,54 +1597,54 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./d", "loc": "5:0-29" }, - { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "type": "harmony import", - "userRequest": "./d", - "loc": "4:0-24" - }, { "moduleId": "./src/menu-item/MenuItem.ts", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/d", - "loc": "2:0-40" + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "type": "harmony import", + "userRequest": "./d", + "loc": "4:0-24" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../d", "loc": "5:0-27" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./d", "loc": "3:0-65" @@ -1675,12 +1675,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" + "source": "import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\afterRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\afterRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "index": 34, "index2": 29, "size": 311, @@ -1692,18 +1692,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../decorators/afterRender", "loc": "4:0-58" @@ -1721,9 +1721,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "index": 41, "index2": 36, "size": 365, @@ -1735,18 +1735,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./decorators/alwaysRender", "loc": "8:0-57" @@ -1764,9 +1764,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\beforeProperties.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\beforeProperties.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "index": 39, "index2": 32, "size": 331, @@ -1778,27 +1778,27 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "issuerId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "2:0-54" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "3:0-54" @@ -1816,9 +1816,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "index": 12, "index2": 38, "size": 728, @@ -1843,8 +1843,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/decorators/customElement", - "loc": "3:0-75" + "userRequest": "@dojo/framework/widget-core/decorators/customElement", + "loc": "3:0-85" } ], "usedExports": [ @@ -1886,12 +1886,12 @@ "depth": 0 }, { - "id": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\diffProperty.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "index": 40, "index2": 34, - "size": 973, + "size": 1014, "cacheable": true, "built": true, "optional": false, @@ -1900,18 +1900,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/diffProperty", "loc": "5:0-60" @@ -1926,12 +1926,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" + "source": "import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\handleDecorator.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\handleDecorator.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", "index": 35, "index2": 28, "size": 512, @@ -1943,63 +1943,63 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/handleDecorator", "loc": "4:0-66" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\afterRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\afterRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "2:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\diffProperty.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\beforeProperties.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\beforeProperties.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" @@ -2017,9 +2017,9 @@ "source": "/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "index": 38, "index2": 33, "size": 1532, @@ -2031,18 +2031,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/inject", "loc": "3:0-48" @@ -2057,12 +2057,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" + "source": "import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/diff.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\diff.mjs", - "name": "./node_modules/@dojo/widget-core/diff.mjs", + "id": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\diff.mjs", + "name": "./node_modules/@dojo/framework/widget-core/diff.mjs", "index": 20, "index2": 20, "size": 1930, @@ -2074,30 +2074,39 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./diff", "loc": "5:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../diff", "loc": "6:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "type": "harmony import", + "userRequest": "./../diff", + "loc": "2:0-33" } ], "usedExports": [ @@ -2116,12 +2125,12 @@ "source": "import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "index": 32, "index2": 30, - "size": 5852, + "size": 5683, "cacheable": true, "built": true, "optional": false, @@ -2130,18 +2139,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Projector", "loc": "3:0-52" @@ -2158,15 +2167,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "index": 36, "index2": 35, - "size": 5320, + "size": 5157, "cacheable": true, "built": true, "optional": false, @@ -2175,18 +2184,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Themed", "loc": "7:0-56" @@ -2197,8 +2206,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/mixins/Themed", - "loc": "4:0-69" + "userRequest": "@dojo/framework/widget-core/mixins/Themed", + "loc": "4:0-79" } ], "usedExports": [ @@ -2215,15 +2224,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "name": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "index": 13, "index2": 37, - "size": 9124, + "size": 9118, "cacheable": true, "built": true, "optional": false, @@ -2245,14 +2254,14 @@ "module": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "moduleName": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "type": "cjs require", - "userRequest": "@dojo/widget-core/registerCustomElement", - "loc": "4:28-78" + "userRequest": "@dojo/framework/widget-core/registerCustomElement", + "loc": "4:28-88" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../registerCustomElement", "loc": "1:0-66" @@ -2268,15 +2277,15 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/vdom.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "name": "./node_modules/@dojo/widget-core/vdom.mjs", + "id": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "name": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "index": 29, "index2": 25, - "size": 39734, + "size": 40904, "cacheable": true, "built": true, "optional": false, @@ -2285,27 +2294,27 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./vdom", "loc": "8:0-43" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../vdom", "loc": "6:0-32" @@ -2324,7 +2333,7 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import global from '@dojo/shim/global';\r\nimport { from as arrayFrom } from '@dojo/shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '@dojo/shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode.focus();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (propName === 'focus') {\r\n focusNode(propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const rendered = dnode.rendered || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\r\n oldIndex++;\r\n newIndex++;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let child = oldChildren[oldIndex];\r\n if (child) {\r\n let nextIndex = oldIndex + 1;\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n if (insertBefore.rendered) {\r\n insertBeforeChildren.push(...insertBefore.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\r\n insertBeforeChildren.push(oldChildren[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map" + "source": "import global from '../shim/global';\r\nimport { from as arrayFrom } from '../shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '../shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst nextSiblingMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode[propName]();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (nodeOperations.indexOf(propName) !== -1) {\r\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const item = instanceMap.get(dnode.instance);\r\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n oldIndex++;\r\n newIndex++;\r\n textUpdated =\r\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let childrenArray = oldChildren;\r\n let nextIndex = oldIndex + 1;\r\n let child = oldChildren[oldIndex];\r\n if (!child) {\r\n child = siblings[0];\r\n nextIndex = 1;\r\n childrenArray = siblings;\r\n }\r\n if (child) {\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n const item = instanceMap.get(insertBefore.instance);\r\n if (item && item.dnode.rendered) {\r\n insertBeforeChildren.push(...item.dnode.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\r\n break;\r\n }\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\r\n insertBeforeChildren.push(childrenArray[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n const nextSiblings = children.slice(i + 1);\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n nextSiblingMap.set(instance, nextSiblings);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n nextSiblingMap.set(instance, nextSiblings);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const nextSiblings = nextSiblingMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map" }, { "id": "./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", @@ -2332,7 +2341,7 @@ "name": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "index": 1, "index2": 41, - "size": 286, + "size": 296, "cacheable": true, "built": true, "optional": false, @@ -2362,7 +2371,7 @@ "providedExports": null, "optimizationBailout": [], "depth": 1, - "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n" + "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n" }, { "id": "./node_modules/process/browser.js", @@ -2379,21 +2388,21 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "issuerId": "./node_modules/@dojo/has/has.mjs", - "issuerName": "./node_modules/@dojo/has/has.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "issuerId": "./node_modules/@dojo/framework/has/has.mjs", + "issuerName": "./node_modules/@dojo/framework/has/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "process", - "loc": "1:0-37" + "loc": "1:0-40" } ], "usedExports": true, @@ -2417,45 +2426,45 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", + "issuerId": "./src/menu-item/MenuItem.ts", + "issuerName": "./src/menu-item/MenuItem.ts", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./src/menu-item/MenuItem.ts", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", + "module": "./src/menu-item/MenuItem.ts", + "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./src/menu-item/MenuItem.ts", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", - "module": "./src/menu-item/MenuItem.ts", - "moduleName": "./src/menu-item/MenuItem.ts", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -2463,7 +2472,6 @@ ], "usedExports": [ "__decorate", - "__metadata", "__rest" ], "providedExports": [ @@ -2504,30 +2512,30 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "issuerId": "./node_modules/@dojo/shim/global.mjs", - "issuerName": "./node_modules/@dojo/shim/global.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/global.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/global.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/global.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "module": "./node_modules/@dojo/shim/global.mjs", - "moduleName": "./node_modules/@dojo/shim/global.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "module": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/global.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" }, { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" } ], "usedExports": true, @@ -2542,7 +2550,7 @@ "name": "./src/menu-item/MenuItem.ts", "index": 2, "index2": 40, - "size": 1126, + "size": 1166, "cacheable": true, "built": true, "optional": false, @@ -2575,7 +2583,7 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\r\nimport { v } from '@dojo/widget-core/d';\r\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\r\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\r\nimport * as css from './menuItem.m.css';\r\nlet MenuItem = class MenuItem extends ThemedMixin(WidgetBase) {\r\n _onClick() {\r\n this.properties.onSelected && this.properties.onSelected(this.properties.data);\r\n }\r\n render() {\r\n const { title, selected } = this.properties;\r\n return v('li', { classes: this.theme(css.root) }, [\r\n v('span', {\r\n classes: this.theme([css.item, selected ? css.selected : null]),\r\n onclick: this._onClick\r\n }, [title])\r\n ]);\r\n }\r\n};\r\nMenuItem = tslib_1.__decorate([\r\n customElement({\r\n tag: 'demo-menu-item',\r\n attributes: ['title', 'selected'],\r\n events: ['onSelected'],\r\n properties: ['data', 'selected']\r\n }),\r\n theme(css)\r\n], MenuItem);\r\nexport { MenuItem };\r\nexport default MenuItem;\r\n" + "source": "import * as tslib_1 from \"tslib\";\r\nimport { v } from '@dojo/framework/widget-core/d';\r\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\r\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\r\nimport * as css from './menuItem.m.css';\r\nlet MenuItem = class MenuItem extends ThemedMixin(WidgetBase) {\r\n _onClick() {\r\n this.properties.onSelected && this.properties.onSelected(this.properties.data);\r\n }\r\n render() {\r\n const { title, selected } = this.properties;\r\n return v('li', { classes: this.theme(css.root) }, [\r\n v('span', {\r\n classes: this.theme([css.item, selected ? css.selected : null]),\r\n onclick: this._onClick\r\n }, [title])\r\n ]);\r\n }\r\n};\r\nMenuItem = tslib_1.__decorate([\r\n customElement({\r\n tag: 'demo-menu-item',\r\n attributes: ['title', 'selected'],\r\n events: ['onSelected'],\r\n properties: ['data', 'selected']\r\n }),\r\n theme(css)\r\n], MenuItem);\r\nexport { MenuItem };\r\nexport default MenuItem;\r\n" }, { "id": "./src/menu-item/menuItem.m.css", @@ -2632,12 +2640,12 @@ ], "modules": [ { - "id": "./node_modules/@dojo/core/Destroyable.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "name": "./node_modules/@dojo/core/Destroyable.mjs", + "id": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "name": "./node_modules/@dojo/framework/core/Destroyable.mjs", "index": 25, "index2": 17, - "size": 1668, + "size": 1665, "cacheable": true, "built": true, "optional": false, @@ -2646,18 +2654,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "issuerId": "./node_modules/@dojo/core/Evented.mjs", - "issuerName": "./node_modules/@dojo/core/Evented.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "issuerId": "./node_modules/@dojo/framework/core/Evented.mjs", + "issuerName": "./node_modules/@dojo/framework/core/Evented.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", "userRequest": "./Destroyable", "loc": "2:0-44" @@ -2672,15 +2680,15 @@ ], "optimizationBailout": [], "depth": 6, - "source": "import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" + "source": "import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" }, { - "id": "./node_modules/@dojo/core/Evented.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "name": "./node_modules/@dojo/core/Evented.mjs", + "id": "./node_modules/@dojo/framework/core/Evented.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "name": "./node_modules/@dojo/framework/core/Evented.mjs", "index": 24, "index2": 18, - "size": 2220, + "size": 2222, "cacheable": true, "built": true, "optional": false, @@ -2689,48 +2697,48 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "issuerId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "issuerName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "2:0-45" + "userRequest": "../core/Evented", + "loc": "2:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "4:0-45" + "userRequest": "../core/Evented", + "loc": "4:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Injector.mjs", - "module": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Injector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Injector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" } ], "usedExports": [ @@ -2743,15 +2751,15 @@ ], "optimizationBailout": [], "depth": 5, - "source": "import Map from '@dojo/shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n methods.forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map" + "source": "import Map from '../shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n [...methods].forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map" }, { - "id": "./node_modules/@dojo/core/lang.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "name": "./node_modules/@dojo/core/lang.mjs", + "id": "./node_modules/@dojo/framework/core/lang.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "name": "./node_modules/@dojo/framework/core/lang.mjs", "index": 26, "index2": 16, - "size": 6843, + "size": 6837, "cacheable": true, "built": true, "optional": false, @@ -2760,27 +2768,27 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/lang", + "userRequest": "../../core/lang", "loc": "2:0-41" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", "userRequest": "./lang", "loc": "1:0-47" @@ -2805,12 +2813,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" + "source": "import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" }, { - "id": "./node_modules/@dojo/has/has.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "name": "./node_modules/@dojo/has/has.mjs", + "id": "./node_modules/@dojo/framework/has/has.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "name": "./node_modules/@dojo/framework/has/has.mjs", "index": 7, "index2": 3, "size": 6500, @@ -2822,29 +2830,29 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "issuerId": "./node_modules/@dojo/shim/support/has.mjs", - "issuerName": "./node_modules/@dojo/shim/support/has.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/support/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "1:0-41" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "4:0-30" } ], @@ -2866,9 +2874,9 @@ "source": "function isFeatureTestThenable(value) {\r\n return value && value.then;\r\n}\r\n/**\r\n * A cache of results of feature tests\r\n */\r\nexport const testCache = {};\r\n/**\r\n * A cache of the un-resolved feature tests\r\n */\r\nexport const testFunctions = {};\r\n/**\r\n * A cache of unresolved thenables (probably promises)\r\n * @type {{}}\r\n */\r\nconst testThenables = {};\r\n/**\r\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\r\n */\r\nconst globalScope = (function () {\r\n /* istanbul ignore else */\r\n if (typeof window !== 'undefined') {\r\n // Browsers\r\n return window;\r\n }\r\n else if (typeof global !== 'undefined') {\r\n // Node\r\n return global;\r\n }\r\n else if (typeof self !== 'undefined') {\r\n // Web workers\r\n return self;\r\n }\r\n /* istanbul ignore next */\r\n return {};\r\n})();\r\n/* Grab the staticFeatures if there are available */\r\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\r\n/* Cleaning up the DojoHasEnviornment */\r\nif ('DojoHasEnvironment' in globalScope) {\r\n delete globalScope.DojoHasEnvironment;\r\n}\r\n/**\r\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\r\n * returns a map.\r\n *\r\n * @param value The value to guard for\r\n */\r\nfunction isStaticFeatureFunction(value) {\r\n return typeof value === 'function';\r\n}\r\n/**\r\n * The cache of asserted features that were available in the global scope when the\r\n * module loaded\r\n */\r\nconst staticCache = staticFeatures\r\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\r\n : {}; /* Providing an empty cache, if none was in the environment\r\n\r\n/**\r\n* AMD plugin function.\r\n*\r\n* Conditional loads modules based on a has feature test value.\r\n*\r\n* @param resourceId Gives the resolved module id to load.\r\n* @param require The loader require function with respect to the module that contained the plugin resource in its\r\n* dependency list.\r\n* @param load Callback to loader that consumes result of plugin demand.\r\n*/\r\nexport function load(resourceId, require, load, config) {\r\n resourceId ? require([resourceId], load) : load();\r\n}\r\n/**\r\n * AMD plugin function.\r\n *\r\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\r\n * value(s).\r\n *\r\n * @param resourceId The id of the module\r\n * @param normalize Resolves a relative module id into an absolute module id\r\n */\r\nexport function normalize(resourceId, normalize) {\r\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\r\n let i = 0;\r\n function get(skip) {\r\n const term = tokens[i++];\r\n if (term === ':') {\r\n // empty string module name, resolves to null\r\n return null;\r\n }\r\n else {\r\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\r\n if (tokens[i++] === '?') {\r\n if (!skip && has(term)) {\r\n // matched the feature, get the first value from the options\r\n return get();\r\n }\r\n else {\r\n // did not match, get the second value, passing over the first\r\n get(true);\r\n return get(skip);\r\n }\r\n }\r\n // a module\r\n return term;\r\n }\r\n }\r\n const id = get();\r\n return id && normalize(id);\r\n}\r\n/**\r\n * Check if a feature has already been registered\r\n *\r\n * @param feature the name of the feature\r\n */\r\nexport function exists(feature) {\r\n const normalizedFeature = feature.toLowerCase();\r\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\r\n}\r\n/**\r\n * Register a new test for a named feature.\r\n *\r\n * @example\r\n * has.add('dom-addeventlistener', !!document.addEventListener);\r\n *\r\n * @example\r\n * has.add('touch-events', function () {\r\n * return 'ontouchstart' in document\r\n * });\r\n *\r\n * @param feature the name of the feature\r\n * @param value the value reported of the feature, or a function that will be executed once on first test\r\n * @param overwrite if an existing value should be overwritten. Defaults to false.\r\n */\r\nexport function add(feature, value, overwrite = false) {\r\n const normalizedFeature = feature.toLowerCase();\r\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\r\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\r\n }\r\n if (typeof value === 'function') {\r\n testFunctions[normalizedFeature] = value;\r\n }\r\n else if (isFeatureTestThenable(value)) {\r\n testThenables[feature] = value.then((resolvedValue) => {\r\n testCache[feature] = resolvedValue;\r\n delete testThenables[feature];\r\n }, () => {\r\n delete testThenables[feature];\r\n });\r\n }\r\n else {\r\n testCache[normalizedFeature] = value;\r\n delete testFunctions[normalizedFeature];\r\n }\r\n}\r\n/**\r\n * Return the current value of a named feature.\r\n *\r\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\r\n */\r\nexport default function has(feature) {\r\n let result;\r\n const normalizedFeature = feature.toLowerCase();\r\n if (normalizedFeature in staticCache) {\r\n result = staticCache[normalizedFeature];\r\n }\r\n else if (testFunctions[normalizedFeature]) {\r\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\r\n delete testFunctions[normalizedFeature];\r\n }\r\n else if (normalizedFeature in testCache) {\r\n result = testCache[normalizedFeature];\r\n }\r\n else if (feature in testThenables) {\r\n return false;\r\n }\r\n else {\r\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\r\n }\r\n return result;\r\n}\r\n/*\r\n * Out of the box feature tests\r\n */\r\n/* Environments */\r\n/* Used as a value to provide a debug only code path */\r\nadd('debug', true);\r\n/* Detects if the environment is \"browser like\" */\r\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\r\n/* Detects if the environment appears to be NodeJS */\r\nadd('host-node', function () {\r\n if (typeof process === 'object' && process.versions && process.versions.node) {\r\n return process.versions.node;\r\n }\r\n});\r\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Map.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "name": "./node_modules/@dojo/shim/Map.mjs", + "id": "./node_modules/@dojo/framework/shim/Map.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "name": "./node_modules/@dojo/framework/shim/Map.mjs", "index": 15, "index2": 12, "size": 3426, @@ -2880,57 +2888,57 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-37" + "userRequest": "../shim/Map", + "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" } ], "usedExports": [ @@ -2946,9 +2954,9 @@ "source": "import { isArrayLike, ShimIterator } from './iterator';\r\nimport global from './global';\r\nimport { is as objectIs } from './object';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let Map = global.Map;\r\nif (!true) {\r\n Map = (_a = class Map {\r\n constructor(iterable) {\r\n this._keys = [];\r\n this._values = [];\r\n this[Symbol.toStringTag] = 'Map';\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const value = iterable[i];\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n else {\r\n for (const value of iterable) {\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * An alternative to Array.prototype.indexOf using Object.is\r\n * to check for equality. See http://mzl.la/1zuKO2V\r\n */\r\n _indexOfKey(keys, key) {\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n if (objectIs(keys[i], key)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n get size() {\r\n return this._keys.length;\r\n }\r\n clear() {\r\n this._keys.length = this._values.length = 0;\r\n }\r\n delete(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._keys.splice(index, 1);\r\n this._values.splice(index, 1);\r\n return true;\r\n }\r\n entries() {\r\n const values = this._keys.map((key, i) => {\r\n return [key, this._values[i]];\r\n });\r\n return new ShimIterator(values);\r\n }\r\n forEach(callback, context) {\r\n const keys = this._keys;\r\n const values = this._values;\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n callback.call(context, values[i], keys[i], this);\r\n }\r\n }\r\n get(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n return index < 0 ? undefined : this._values[index];\r\n }\r\n has(key) {\r\n return this._indexOfKey(this._keys, key) > -1;\r\n }\r\n keys() {\r\n return new ShimIterator(this._keys);\r\n }\r\n set(key, value) {\r\n let index = this._indexOfKey(this._keys, key);\r\n index = index < 0 ? this._keys.length : index;\r\n this._keys[index] = key;\r\n this._values[index] = value;\r\n return this;\r\n }\r\n values() {\r\n return new ShimIterator(this._values);\r\n }\r\n [Symbol.iterator]() {\r\n return this.entries();\r\n }\r\n },\r\n _a[Symbol.species] = _a,\r\n _a);\r\n}\r\nexport default Map;\r\nvar _a;\r\n//# sourceMappingURL=Map.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Promise.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "name": "./node_modules/@dojo/shim/Promise.mjs", + "id": "./node_modules/@dojo/framework/shim/Promise.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "name": "./node_modules/@dojo/framework/shim/Promise.mjs", "index": 22, "index2": 15, "size": 8717, @@ -2960,30 +2968,30 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "issuerId": "./node_modules/@dojo/widget-core/Registry.mjs", - "issuerName": "./node_modules/@dojo/widget-core/Registry.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "1:0-41" + "userRequest": "../shim/Promise", + "loc": "1:0-38" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "2:0-41" + "userRequest": "../shim/Promise", + "loc": "2:0-38" } ], "usedExports": [ @@ -2999,9 +3007,9 @@ "source": "import global from './global';\r\nimport { queueMicroTask } from './support/queue';\r\nimport './Symbol';\r\nimport has from './support/has';\r\nexport let ShimPromise = global.Promise;\r\nexport const isThenable = function isThenable(value) {\r\n return value && typeof value.then === 'function';\r\n};\r\nif (!true) {\r\n global.Promise = ShimPromise = (_a = class Promise {\r\n /**\r\n * Creates a new Promise.\r\n *\r\n * @constructor\r\n *\r\n * @param executor\r\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\r\n * starting the asynchronous operation when it is invoked.\r\n *\r\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\r\n * successfully, or the `reject` function when the operation fails.\r\n */\r\n constructor(executor) {\r\n /**\r\n * The current state of this promise.\r\n */\r\n this.state = 1 /* Pending */;\r\n this[Symbol.toStringTag] = 'Promise';\r\n /**\r\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\r\n */\r\n let isChained = false;\r\n /**\r\n * Whether or not this promise is in a resolved state.\r\n */\r\n const isResolved = () => {\r\n return this.state !== 1 /* Pending */ || isChained;\r\n };\r\n /**\r\n * Callbacks that should be invoked once the asynchronous operation has completed.\r\n */\r\n let callbacks = [];\r\n /**\r\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\r\n * enqueues callbacks for execution on the next event loop turn.\r\n */\r\n let whenFinished = function (callback) {\r\n if (callbacks) {\r\n callbacks.push(callback);\r\n }\r\n };\r\n /**\r\n * Settles this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const settle = (newState, value) => {\r\n // A promise can only be settled once.\r\n if (this.state !== 1 /* Pending */) {\r\n return;\r\n }\r\n this.state = newState;\r\n this.resolvedValue = value;\r\n whenFinished = queueMicroTask;\r\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\r\n // wait an extra turn.\r\n if (callbacks && callbacks.length > 0) {\r\n queueMicroTask(function () {\r\n if (callbacks) {\r\n let count = callbacks.length;\r\n for (let i = 0; i < count; ++i) {\r\n callbacks[i].call(null);\r\n }\r\n callbacks = null;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Resolves this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const resolve = (newState, value) => {\r\n if (isResolved()) {\r\n return;\r\n }\r\n if (isThenable(value)) {\r\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\r\n isChained = true;\r\n }\r\n else {\r\n settle(newState, value);\r\n }\r\n };\r\n this.then = (onFulfilled, onRejected) => {\r\n return new Promise((resolve, reject) => {\r\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\r\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\r\n // event loop.\r\n whenFinished(() => {\r\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\r\n if (typeof callback === 'function') {\r\n try {\r\n resolve(callback(this.resolvedValue));\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n else if (this.state === 2 /* Rejected */) {\r\n reject(this.resolvedValue);\r\n }\r\n else {\r\n resolve(this.resolvedValue);\r\n }\r\n });\r\n });\r\n };\r\n try {\r\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\r\n }\r\n catch (error) {\r\n settle(2 /* Rejected */, error);\r\n }\r\n }\r\n static all(iterable) {\r\n return new this(function (resolve, reject) {\r\n const values = [];\r\n let complete = 0;\r\n let total = 0;\r\n let populating = true;\r\n function fulfill(index, value) {\r\n values[index] = value;\r\n ++complete;\r\n finish();\r\n }\r\n function finish() {\r\n if (populating || complete < total) {\r\n return;\r\n }\r\n resolve(values);\r\n }\r\n function processItem(index, item) {\r\n ++total;\r\n if (isThenable(item)) {\r\n // If an item Promise rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(fulfill.bind(null, index), reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(fulfill.bind(null, index));\r\n }\r\n }\r\n let i = 0;\r\n for (const value of iterable) {\r\n processItem(i, value);\r\n i++;\r\n }\r\n populating = false;\r\n finish();\r\n });\r\n }\r\n static race(iterable) {\r\n return new this(function (resolve, reject) {\r\n for (const item of iterable) {\r\n if (item instanceof Promise) {\r\n // If a Promise item rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(resolve, reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(resolve);\r\n }\r\n }\r\n });\r\n }\r\n static reject(reason) {\r\n return new this(function (resolve, reject) {\r\n reject(reason);\r\n });\r\n }\r\n static resolve(value) {\r\n return new this(function (resolve) {\r\n resolve(value);\r\n });\r\n }\r\n catch(onRejected) {\r\n return this.then(undefined, onRejected);\r\n }\r\n },\r\n _a[Symbol.species] = ShimPromise,\r\n _a);\r\n}\r\nexport default ShimPromise;\r\nvar _a;\r\n//# sourceMappingURL=Promise.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Symbol.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "name": "./node_modules/@dojo/shim/Symbol.mjs", + "id": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "name": "./node_modules/@dojo/framework/shim/Symbol.mjs", "index": 5, "index2": 7, "size": 6073, @@ -3013,84 +3021,84 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/d.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\d.mjs", - "module": "./node_modules/@dojo/widget-core/d.mjs", - "moduleName": "./node_modules/@dojo/widget-core/d.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "1:0-39" + "userRequest": "../shim/Symbol", + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\d.mjs", + "module": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/d.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" + "userRequest": "../shim/Symbol", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "5:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "4:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "type": "harmony import", + "userRequest": "../shim/Symbol", + "loc": "3:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "1:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./Symbol", - "loc": "3:0-18" + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./Symbol", - "loc": "3:0-36" + "loc": "3:0-18" } ], "usedExports": [ @@ -3106,9 +3114,9 @@ "source": "import has from './support/has';\r\nimport global from './global';\r\nimport { getValueDescriptor } from './support/util';\r\nexport let Symbol = global.Symbol;\r\nif (!true) {\r\n /**\r\n * Throws if the value is not a symbol, used internally within the Shim\r\n * @param {any} value The value to check\r\n * @return {symbol} Returns the symbol or throws\r\n */\r\n const validateSymbol = function validateSymbol(value) {\r\n if (!isSymbol(value)) {\r\n throw new TypeError(value + ' is not a symbol');\r\n }\r\n return value;\r\n };\r\n const defineProperties = Object.defineProperties;\r\n const defineProperty = Object.defineProperty;\r\n const create = Object.create;\r\n const objPrototype = Object.prototype;\r\n const globalSymbols = {};\r\n const getSymbolName = (function () {\r\n const created = create(null);\r\n return function (desc) {\r\n let postfix = 0;\r\n let name;\r\n while (created[String(desc) + (postfix || '')]) {\r\n ++postfix;\r\n }\r\n desc += String(postfix || '');\r\n created[desc] = true;\r\n name = '@@' + desc;\r\n // FIXME: Temporary guard until the duplicate execution when testing can be\r\n // pinned down.\r\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\r\n defineProperty(objPrototype, name, {\r\n set: function (value) {\r\n defineProperty(this, name, getValueDescriptor(value));\r\n }\r\n });\r\n }\r\n return name;\r\n };\r\n })();\r\n const InternalSymbol = function Symbol(description) {\r\n if (this instanceof InternalSymbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n return Symbol(description);\r\n };\r\n Symbol = global.Symbol = function Symbol(description) {\r\n if (this instanceof Symbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n const sym = Object.create(InternalSymbol.prototype);\r\n description = description === undefined ? '' : String(description);\r\n return defineProperties(sym, {\r\n __description__: getValueDescriptor(description),\r\n __name__: getValueDescriptor(getSymbolName(description))\r\n });\r\n };\r\n /* Decorate the Symbol function with the appropriate properties */\r\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\r\n if (globalSymbols[key]) {\r\n return globalSymbols[key];\r\n }\r\n return (globalSymbols[key] = Symbol(String(key)));\r\n }));\r\n defineProperties(Symbol, {\r\n keyFor: getValueDescriptor(function (sym) {\r\n let key;\r\n validateSymbol(sym);\r\n for (key in globalSymbols) {\r\n if (globalSymbols[key] === sym) {\r\n return key;\r\n }\r\n }\r\n }),\r\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\r\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\r\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\r\n match: getValueDescriptor(Symbol.for('match'), false, false),\r\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\r\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\r\n search: getValueDescriptor(Symbol.for('search'), false, false),\r\n species: getValueDescriptor(Symbol.for('species'), false, false),\r\n split: getValueDescriptor(Symbol.for('split'), false, false),\r\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\r\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\r\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\r\n });\r\n /* Decorate the InternalSymbol object */\r\n defineProperties(InternalSymbol.prototype, {\r\n constructor: getValueDescriptor(Symbol),\r\n toString: getValueDescriptor(function () {\r\n return this.__name__;\r\n }, false, false)\r\n });\r\n /* Decorate the Symbol.prototype */\r\n defineProperties(Symbol.prototype, {\r\n toString: getValueDescriptor(function () {\r\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\r\n }),\r\n valueOf: getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n })\r\n });\r\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n }));\r\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\r\n}\r\n/**\r\n * A custom guard function that determines if an object is a symbol or not\r\n * @param {any} value The value to check to see if it is a symbol or not\r\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\r\n */\r\nexport function isSymbol(value) {\r\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\r\n}\r\n/**\r\n * Fill any missing well known symbols if the native Symbol is missing them\r\n */\r\n[\r\n 'hasInstance',\r\n 'isConcatSpreadable',\r\n 'iterator',\r\n 'species',\r\n 'replace',\r\n 'search',\r\n 'split',\r\n 'match',\r\n 'toPrimitive',\r\n 'toStringTag',\r\n 'unscopables',\r\n 'observable'\r\n].forEach((wellKnown) => {\r\n if (!Symbol[wellKnown]) {\r\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\r\n }\r\n});\r\nexport default Symbol;\r\n//# sourceMappingURL=Symbol.mjs.map" }, { - "id": "./node_modules/@dojo/shim/WeakMap.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "name": "./node_modules/@dojo/shim/WeakMap.mjs", + "id": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "name": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "index": 19, "index2": 13, "size": 3858, @@ -3120,38 +3128,38 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "2:0-41" + "userRequest": "../shim/WeakMap", + "loc": "2:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "5:0-41" + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", + "userRequest": "../../shim/WeakMap", "loc": "1:0-41" } ], @@ -3167,9 +3175,9 @@ "source": "import global from './global';\r\nimport { isArrayLike } from './iterator';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let WeakMap = global.WeakMap;\r\nif (!true) {\r\n const DELETED = {};\r\n const getUID = function getUID() {\r\n return Math.floor(Math.random() * 100000000);\r\n };\r\n const generateName = (function () {\r\n let startId = Math.floor(Date.now() % 100000000);\r\n return function generateName() {\r\n return '__wm' + getUID() + (startId++ + '__');\r\n };\r\n })();\r\n WeakMap = class WeakMap {\r\n constructor(iterable) {\r\n this[Symbol.toStringTag] = 'WeakMap';\r\n this._name = generateName();\r\n this._frozenEntries = [];\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const item = iterable[i];\r\n this.set(item[0], item[1]);\r\n }\r\n }\r\n else {\r\n for (const [key, value] of iterable) {\r\n this.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n _getFrozenEntryIndex(key) {\r\n for (let i = 0; i < this._frozenEntries.length; i++) {\r\n if (this._frozenEntries[i].key === key) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n delete(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n entry.value = DELETED;\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n this._frozenEntries.splice(frozenIndex, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n get(key) {\r\n if (key === undefined || key === null) {\r\n return undefined;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n return entry.value;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return this._frozenEntries[frozenIndex].value;\r\n }\r\n }\r\n has(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n set(key, value) {\r\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\r\n throw new TypeError('Invalid value used as weak map key');\r\n }\r\n let entry = key[this._name];\r\n if (!entry || entry.key !== key) {\r\n entry = Object.create(null, {\r\n key: { value: key }\r\n });\r\n if (Object.isFrozen(key)) {\r\n this._frozenEntries.push(entry);\r\n }\r\n else {\r\n Object.defineProperty(key, this._name, {\r\n value: entry\r\n });\r\n }\r\n }\r\n entry.value = value;\r\n return this;\r\n }\r\n };\r\n}\r\nexport default WeakMap;\r\n//# sourceMappingURL=WeakMap.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\afterRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\afterRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "index": 34, "index2": 29, "size": 311, @@ -3181,18 +3189,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../decorators/afterRender", "loc": "4:0-58" @@ -3237,9 +3245,9 @@ "depth": 0 }, { - "id": "./node_modules/@dojo/shim/array.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "name": "./node_modules/@dojo/shim/array.mjs", + "id": "./node_modules/@dojo/framework/shim/array.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "name": "./node_modules/@dojo/framework/shim/array.mjs", "index": 30, "index2": 24, "size": 9175, @@ -3251,30 +3259,30 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "4:0-40" + "userRequest": "../shim/array", + "loc": "4:0-37" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "2:0-53" + "userRequest": "../shim/array", + "loc": "2:0-50" } ], "usedExports": [ @@ -3294,9 +3302,9 @@ "source": "import global from './global';\r\nimport { isArrayLike, isIterable } from './iterator';\r\nimport { MAX_SAFE_INTEGER } from './number';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\nexport let from;\r\n/**\r\n * Creates a new array from the function parameters.\r\n *\r\n * @param arguments Any number of arguments for the array\r\n * @return An array from the given arguments\r\n */\r\nexport let of;\r\n/* ES6 Array instance methods */\r\n/**\r\n * Copies data internally within an array or array-like object.\r\n *\r\n * @param target The target array-like object\r\n * @param offset The index to start copying values to; if negative, it counts backwards from length\r\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\r\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\r\n * @return The target\r\n */\r\nexport let copyWithin;\r\n/**\r\n * Fills elements of an array-like object with the specified value.\r\n *\r\n * @param target The target to fill\r\n * @param value The value to fill each element of the target with\r\n * @param start The first index to fill\r\n * @param end The (exclusive) index at which to stop filling\r\n * @return The filled target\r\n */\r\nexport let fill;\r\n/**\r\n * Finds and returns the first instance matching the callback or undefined if one is not found.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning if the current value matches a criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first element matching the callback, or undefined if one does not exist\r\n */\r\nexport let find;\r\n/**\r\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\r\n * or -1 if no values satisfy it.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning true if the current value satisfies its criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\r\n */\r\nexport let findIndex;\r\n/* ES7 Array instance methods */\r\n/**\r\n * Determines whether an array includes a given value\r\n *\r\n * @param target the target array-like object\r\n * @param searchElement the item to search for\r\n * @param fromIndex the starting index to search from\r\n * @return `true` if the array includes the element, otherwise `false`\r\n */\r\nexport let includes;\r\nif (true && true) {\r\n from = global.Array.from;\r\n of = global.Array.of;\r\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\r\n fill = wrapNative(global.Array.prototype.fill);\r\n find = wrapNative(global.Array.prototype.find);\r\n findIndex = wrapNative(global.Array.prototype.findIndex);\r\n}\r\nelse {\r\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\r\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n length = Number(length);\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n /**\r\n * From ES6 7.1.4 ToInteger()\r\n *\r\n * @param value A value to convert\r\n * @return An integer\r\n */\r\n const toInteger = function toInteger(value) {\r\n value = Number(value);\r\n if (isNaN(value)) {\r\n return 0;\r\n }\r\n if (value === 0 || !isFinite(value)) {\r\n return value;\r\n }\r\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\r\n };\r\n /**\r\n * Normalizes an offset against a given length, wrapping it if negative.\r\n *\r\n * @param value The original offset\r\n * @param length The total length to normalize against\r\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\r\n */\r\n const normalizeOffset = function normalizeOffset(value, length) {\r\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\r\n };\r\n from = function from(arrayLike, mapFunction, thisArg) {\r\n if (arrayLike == null) {\r\n throw new TypeError('from: requires an array-like object');\r\n }\r\n if (mapFunction && thisArg) {\r\n mapFunction = mapFunction.bind(thisArg);\r\n }\r\n /* tslint:disable-next-line:variable-name */\r\n const Constructor = this;\r\n const length = toLength(arrayLike.length);\r\n // Support extension\r\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\r\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\r\n return array;\r\n }\r\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\r\n // with the iteration on IE when using a NaN array length.\r\n if (isArrayLike(arrayLike)) {\r\n if (length === 0) {\r\n return [];\r\n }\r\n for (let i = 0; i < arrayLike.length; i++) {\r\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\r\n }\r\n }\r\n else {\r\n let i = 0;\r\n for (const value of arrayLike) {\r\n array[i] = mapFunction ? mapFunction(value, i) : value;\r\n i++;\r\n }\r\n }\r\n if (arrayLike.length !== undefined) {\r\n array.length = length;\r\n }\r\n return array;\r\n };\r\n of = function of(...items) {\r\n return Array.prototype.slice.call(items);\r\n };\r\n copyWithin = function copyWithin(target, offset, start, end) {\r\n if (target == null) {\r\n throw new TypeError('copyWithin: target must be an array-like object');\r\n }\r\n const length = toLength(target.length);\r\n offset = normalizeOffset(toInteger(offset), length);\r\n start = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n let count = Math.min(end - start, length - offset);\r\n let direction = 1;\r\n if (offset > start && offset < start + count) {\r\n direction = -1;\r\n start += count - 1;\r\n offset += count - 1;\r\n }\r\n while (count > 0) {\r\n if (start in target) {\r\n target[offset] = target[start];\r\n }\r\n else {\r\n delete target[offset];\r\n }\r\n offset += direction;\r\n start += direction;\r\n count--;\r\n }\r\n return target;\r\n };\r\n fill = function fill(target, value, start, end) {\r\n const length = toLength(target.length);\r\n let i = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n while (i < end) {\r\n target[i++] = value;\r\n }\r\n return target;\r\n };\r\n find = function find(target, callback, thisArg) {\r\n const index = findIndex(target, callback, thisArg);\r\n return index !== -1 ? target[index] : undefined;\r\n };\r\n findIndex = function findIndex(target, callback, thisArg) {\r\n const length = toLength(target.length);\r\n if (!callback) {\r\n throw new TypeError('find: second argument must be a function');\r\n }\r\n if (thisArg) {\r\n callback = callback.bind(thisArg);\r\n }\r\n for (let i = 0; i < length; i++) {\r\n if (callback(target[i], i, target)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\nif (true) {\r\n includes = wrapNative(global.Array.prototype.includes);\r\n}\r\nelse {\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n length = Number(length);\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n includes = function includes(target, searchElement, fromIndex = 0) {\r\n let len = toLength(target.length);\r\n for (let i = fromIndex; i < len; ++i) {\r\n const currentElement = target[i];\r\n if (searchElement === currentElement ||\r\n (searchElement !== searchElement && currentElement !== currentElement)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n//# sourceMappingURL=array.mjs.map" }, { - "id": "./node_modules/@dojo/shim/global.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "name": "./node_modules/@dojo/shim/global.mjs", + "id": "./node_modules/@dojo/framework/shim/global.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "name": "./node_modules/@dojo/framework/shim/global.mjs", "index": 10, "index2": 4, "size": 581, @@ -3308,117 +3316,117 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "6:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "1:0-39" + "userRequest": "../shim/global", + "loc": "6:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/number.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\number.mjs", - "module": "./node_modules/@dojo/shim/number.mjs", - "moduleName": "./node_modules/@dojo/shim/number.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/global", + "loc": "1:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", + "module": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/number.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", "userRequest": "../global", "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "../global", "loc": "1:0-31" @@ -3435,9 +3443,9 @@ "source": "const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map" }, { - "id": "./node_modules/@dojo/shim/iterator.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "name": "./node_modules/@dojo/shim/iterator.mjs", + "id": "./node_modules/@dojo/framework/shim/iterator.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "name": "./node_modules/@dojo/framework/shim/iterator.mjs", "index": 16, "index2": 10, "size": 3158, @@ -3449,36 +3457,36 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-53" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "1:0-55" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-41" @@ -3497,9 +3505,9 @@ "source": "import './Symbol';\nimport { HIGH_SURROGATE_MAX, HIGH_SURROGATE_MIN } from './string';\nconst staticDone = { done: true, value: undefined };\n/**\n * A class that _shims_ an iterator interface on array like objects.\n */\nexport class ShimIterator {\n constructor(list) {\n this._nextIndex = -1;\n if (isIterable(list)) {\n this._nativeIterator = list[Symbol.iterator]();\n }\n else {\n this._list = list;\n }\n }\n /**\n * Return the next iteration result for the Iterator\n */\n next() {\n if (this._nativeIterator) {\n return this._nativeIterator.next();\n }\n if (!this._list) {\n return staticDone;\n }\n if (++this._nextIndex < this._list.length) {\n return {\n done: false,\n value: this._list[this._nextIndex]\n };\n }\n return staticDone;\n }\n [Symbol.iterator]() {\n return this;\n }\n}\n/**\n * A type guard for checking if something has an Iterable interface\n *\n * @param value The value to type guard against\n */\nexport function isIterable(value) {\n return value && typeof value[Symbol.iterator] === 'function';\n}\n/**\n * A type guard for checking if something is ArrayLike\n *\n * @param value The value to type guard against\n */\nexport function isArrayLike(value) {\n return value && typeof value.length === 'number';\n}\n/**\n * Returns the iterator for an object\n *\n * @param iterable The iterable object to return the iterator for\n */\nexport function get(iterable) {\n if (isIterable(iterable)) {\n return iterable[Symbol.iterator]();\n }\n else if (isArrayLike(iterable)) {\n return new ShimIterator(iterable);\n }\n}\n/**\n * Shims the functionality of `for ... of` blocks\n *\n * @param iterable The object the provides an interator interface\n * @param callback The callback which will be called for each item of the iterable\n * @param thisArg Optional scope to pass the callback\n */\nexport function forOf(iterable, callback, thisArg) {\n let broken = false;\n function doBreak() {\n broken = true;\n }\n /* We need to handle iteration of double byte strings properly */\n if (isArrayLike(iterable) && typeof iterable === 'string') {\n const l = iterable.length;\n for (let i = 0; i < l; ++i) {\n let char = iterable[i];\n if (i + 1 < l) {\n const code = char.charCodeAt(0);\n if (code >= HIGH_SURROGATE_MIN && code <= HIGH_SURROGATE_MAX) {\n char += iterable[++i];\n }\n }\n callback.call(thisArg, char, iterable, doBreak);\n if (broken) {\n return;\n }\n }\n }\n else {\n const iterator = get(iterable);\n if (iterator) {\n let result = iterator.next();\n while (!result.done) {\n callback.call(thisArg, result.value, iterable, doBreak);\n if (broken) {\n return;\n }\n result = iterator.next();\n }\n }\n }\n}\n//# sourceMappingURL=iterator.mjs.map" }, { - "id": "./node_modules/@dojo/shim/number.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\number.mjs", - "name": "./node_modules/@dojo/shim/number.mjs", + "id": "./node_modules/@dojo/framework/shim/number.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", + "name": "./node_modules/@dojo/framework/shim/number.mjs", "index": 31, "index2": 23, "size": 1724, @@ -3511,18 +3519,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./number", "loc": "3:0-44" @@ -3543,9 +3551,9 @@ "source": "import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map" }, { - "id": "./node_modules/@dojo/shim/object.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "name": "./node_modules/@dojo/shim/object.mjs", + "id": "./node_modules/@dojo/framework/shim/object.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "name": "./node_modules/@dojo/framework/shim/object.mjs", "index": 18, "index2": 11, "size": 4171, @@ -3557,39 +3565,39 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "issuerId": "./node_modules/@dojo/shim/Map.mjs", - "issuerName": "./node_modules/@dojo/shim/Map.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Map.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Map.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./object", "loc": "3:0-42" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "1:0-43" + "userRequest": "../shim/object", + "loc": "1:0-40" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "2:0-43" + "userRequest": "../shim/object", + "loc": "2:0-40" } ], "usedExports": [ @@ -3611,9 +3619,9 @@ "source": "import global from './global';\r\nimport has from './support/has';\r\nimport { isSymbol } from './Symbol';\r\nexport let assign;\r\n/**\r\n * Gets the own property descriptor of the specified object.\r\n * An own property descriptor is one that is defined directly on the object and is not\r\n * inherited from the object's prototype.\r\n * @param o Object that contains the property.\r\n * @param p Name of the property.\r\n */\r\nexport let getOwnPropertyDescriptor;\r\n/**\r\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\r\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\r\n * @param o Object that contains the own properties.\r\n */\r\nexport let getOwnPropertyNames;\r\n/**\r\n * Returns an array of all symbol properties found directly on object o.\r\n * @param o Object to retrieve the symbols from.\r\n */\r\nexport let getOwnPropertySymbols;\r\n/**\r\n * Returns true if the values are the same value, false otherwise.\r\n * @param value1 The first value.\r\n * @param value2 The second value.\r\n */\r\nexport let is;\r\n/**\r\n * Returns the names of the enumerable properties and methods of an object.\r\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\r\n */\r\nexport let keys;\r\n/* ES7 Object static methods */\r\nexport let getOwnPropertyDescriptors;\r\nexport let entries;\r\nexport let values;\r\nif (true) {\r\n const globalObject = global.Object;\r\n assign = globalObject.assign;\r\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\r\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\r\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\r\n is = globalObject.is;\r\n keys = globalObject.keys;\r\n}\r\nelse {\r\n keys = function symbolAwareKeys(o) {\r\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n assign = function assign(target, ...sources) {\r\n if (target == null) {\r\n // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n const to = Object(target);\r\n sources.forEach((nextSource) => {\r\n if (nextSource) {\r\n // Skip over if undefined or null\r\n keys(nextSource).forEach((nextKey) => {\r\n to[nextKey] = nextSource[nextKey];\r\n });\r\n }\r\n });\r\n return to;\r\n };\r\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\r\n if (isSymbol(prop)) {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n else {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n };\r\n getOwnPropertyNames = function getOwnPropertyNames(o) {\r\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\r\n return Object.getOwnPropertyNames(o)\r\n .filter((key) => Boolean(key.match(/^@@.+/)))\r\n .map((key) => Symbol.for(key.substring(2)));\r\n };\r\n is = function is(value1, value2) {\r\n if (value1 === value2) {\r\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\r\n }\r\n return value1 !== value1 && value2 !== value2; // NaN\r\n };\r\n}\r\nif (true) {\r\n const globalObject = global.Object;\r\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\r\n entries = globalObject.entries;\r\n values = globalObject.values;\r\n}\r\nelse {\r\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\r\n return getOwnPropertyNames(o).reduce((previous, key) => {\r\n previous[key] = getOwnPropertyDescriptor(o, key);\r\n return previous;\r\n }, {});\r\n };\r\n entries = function entries(o) {\r\n return keys(o).map((key) => [key, o[key]]);\r\n };\r\n values = function values(o) {\r\n return keys(o).map((key) => o[key]);\r\n };\r\n}\r\n//# sourceMappingURL=object.mjs.map" }, { - "id": "./node_modules/@dojo/shim/string.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "name": "./node_modules/@dojo/shim/string.mjs", + "id": "./node_modules/@dojo/framework/shim/string.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "name": "./node_modules/@dojo/framework/shim/string.mjs", "index": 17, "index2": 9, "size": 12714, @@ -3625,18 +3633,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "issuerId": "./node_modules/@dojo/shim/iterator.mjs", - "issuerName": "./node_modules/@dojo/shim/iterator.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/iterator.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./string", "loc": "2:0-66" @@ -3667,9 +3675,9 @@ "source": "import global from './global';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\n/**\r\n * The minimum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MIN = 0xd800;\r\n/**\r\n * The maximum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MAX = 0xdbff;\r\n/**\r\n * The minimum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MIN = 0xdc00;\r\n/**\r\n * The maximum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MAX = 0xdfff;\r\n/* ES6 static methods */\r\n/**\r\n * Return the String value whose elements are, in order, the elements in the List elements.\r\n * If length is 0, the empty string is returned.\r\n * @param codePoints The code points to generate the string\r\n */\r\nexport let fromCodePoint;\r\n/**\r\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\r\n * as such the first argument will be a well formed template call site object and the rest\r\n * parameter will contain the substitution values.\r\n * @param template A well-formed template string call site representation.\r\n * @param substitutions A set of substitution values.\r\n */\r\nexport let raw;\r\n/* ES6 instance methods */\r\n/**\r\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\r\n * value of the UTF-16 encoded code point starting at the string element at position pos in\r\n * the String resulting from converting this object to a String.\r\n * If there is no element at that position, the result is undefined.\r\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\r\n */\r\nexport let codePointAt;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * endPosition – length(this). Otherwise returns false.\r\n */\r\nexport let endsWith;\r\n/**\r\n * Returns true if searchString appears as a substring of the result of converting this\r\n * object to a String, at one or more positions that are\r\n * greater than or equal to position; otherwise, returns false.\r\n * @param target The target string\r\n * @param searchString search string\r\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\r\n */\r\nexport let includes;\r\n/**\r\n * Returns the String value result of normalizing the string into the normalization form\r\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\r\n * @param target The target string\r\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\r\n * is \"NFC\"\r\n */\r\nexport let normalize;\r\n/**\r\n * Returns a String value that is made from count copies appended together. If count is 0,\r\n * T is the empty String is returned.\r\n * @param count number of copies to append\r\n */\r\nexport let repeat;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * position. Otherwise returns false.\r\n */\r\nexport let startsWith;\r\n/* ES7 instance methods */\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the end (right) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padEnd;\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the start (left) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padStart;\r\nif (true && true) {\r\n fromCodePoint = global.String.fromCodePoint;\r\n raw = global.String.raw;\r\n codePointAt = wrapNative(global.String.prototype.codePointAt);\r\n endsWith = wrapNative(global.String.prototype.endsWith);\r\n includes = wrapNative(global.String.prototype.includes);\r\n normalize = wrapNative(global.String.prototype.normalize);\r\n repeat = wrapNative(global.String.prototype.repeat);\r\n startsWith = wrapNative(global.String.prototype.startsWith);\r\n}\r\nelse {\r\n /**\r\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\r\n * Used by startsWith, includes, and endsWith.\r\n *\r\n * @return Normalized position.\r\n */\r\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\r\n if (text == null) {\r\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\r\n }\r\n const length = text.length;\r\n position = position !== position ? (isEnd ? length : 0) : position;\r\n return [text, String(search), Math.min(Math.max(position, 0), length)];\r\n };\r\n fromCodePoint = function fromCodePoint(...codePoints) {\r\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\r\n const length = arguments.length;\r\n if (!length) {\r\n return '';\r\n }\r\n const fromCharCode = String.fromCharCode;\r\n const MAX_SIZE = 0x4000;\r\n let codeUnits = [];\r\n let index = -1;\r\n let result = '';\r\n while (++index < length) {\r\n let codePoint = Number(arguments[index]);\r\n // Code points must be finite integers within the valid range\r\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\r\n if (!isValid) {\r\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\r\n }\r\n if (codePoint <= 0xffff) {\r\n // BMP code point\r\n codeUnits.push(codePoint);\r\n }\r\n else {\r\n // Astral code point; split in surrogate halves\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n codePoint -= 0x10000;\r\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\r\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\r\n codeUnits.push(highSurrogate, lowSurrogate);\r\n }\r\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\r\n result += fromCharCode.apply(null, codeUnits);\r\n codeUnits.length = 0;\r\n }\r\n }\r\n return result;\r\n };\r\n raw = function raw(callSite, ...substitutions) {\r\n let rawStrings = callSite.raw;\r\n let result = '';\r\n let numSubstitutions = substitutions.length;\r\n if (callSite == null || callSite.raw == null) {\r\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\r\n }\r\n for (let i = 0, length = rawStrings.length; i < length; i++) {\r\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\r\n }\r\n return result;\r\n };\r\n codePointAt = function codePointAt(text, position = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\r\n if (text == null) {\r\n throw new TypeError('string.codePointAt requries a valid string.');\r\n }\r\n const length = text.length;\r\n if (position !== position) {\r\n position = 0;\r\n }\r\n if (position < 0 || position >= length) {\r\n return undefined;\r\n }\r\n // Get the first code unit\r\n const first = text.charCodeAt(position);\r\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\r\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n const second = text.charCodeAt(position + 1);\r\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\r\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\r\n }\r\n }\r\n return first;\r\n };\r\n endsWith = function endsWith(text, search, endPosition) {\r\n if (endPosition == null) {\r\n endPosition = text.length;\r\n }\r\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\r\n const start = endPosition - search.length;\r\n if (start < 0) {\r\n return false;\r\n }\r\n return text.slice(start, endPosition) === search;\r\n };\r\n includes = function includes(text, search, position = 0) {\r\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\r\n return text.indexOf(search, position) !== -1;\r\n };\r\n repeat = function repeat(text, count = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\r\n if (text == null) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (count !== count) {\r\n count = 0;\r\n }\r\n if (count < 0 || count === Infinity) {\r\n throw new RangeError('string.repeat requires a non-negative finite count.');\r\n }\r\n let result = '';\r\n while (count) {\r\n if (count % 2) {\r\n result += text;\r\n }\r\n if (count > 1) {\r\n text += text;\r\n }\r\n count >>= 1;\r\n }\r\n return result;\r\n };\r\n startsWith = function startsWith(text, search, position = 0) {\r\n search = String(search);\r\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\r\n const end = position + search.length;\r\n if (end > text.length) {\r\n return false;\r\n }\r\n return text.slice(position, end) === search;\r\n };\r\n}\r\nif (true) {\r\n padEnd = wrapNative(global.String.prototype.padEnd);\r\n padStart = wrapNative(global.String.prototype.padStart);\r\n}\r\nelse {\r\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padEnd requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText +=\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length);\r\n }\r\n return strText;\r\n };\r\n padStart = function padStart(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padStart requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText =\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length) +\r\n strText;\r\n }\r\n return strText;\r\n };\r\n}\r\n//# sourceMappingURL=string.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/has.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "name": "./node_modules/@dojo/shim/support/has.mjs", + "id": "./node_modules/@dojo/framework/shim/support/has.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "name": "./node_modules/@dojo/framework/shim/support/has.mjs", "index": 6, "index2": 5, "size": 6316, @@ -3681,81 +3689,81 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "3:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "1:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "4:0-32" + "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "2:0-32" + "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "./has", "loc": "2:0-24" @@ -3773,12 +3781,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import has, { add } from '@dojo/has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '@dojo/has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map" + "source": "import has, { add } from '../../has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '../../has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/queue.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "name": "./node_modules/@dojo/shim/support/queue.mjs", + "id": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "name": "./node_modules/@dojo/framework/shim/support/queue.mjs", "index": 23, "index2": 14, "size": 6381, @@ -3790,18 +3798,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "issuerId": "./node_modules/@dojo/shim/Promise.mjs", - "issuerName": "./node_modules/@dojo/shim/Promise.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Promise.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/queue", "loc": "2:0-49" @@ -3818,9 +3826,9 @@ "source": "import global from '../global';\r\nimport has from './has';\r\nfunction executeTask(item) {\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n}\r\nfunction getQueueHandle(item, destructor) {\r\n return {\r\n destroy: function () {\r\n this.destroy = function () { };\r\n item.isActive = false;\r\n item.callback = null;\r\n if (destructor) {\r\n destructor();\r\n }\r\n }\r\n };\r\n}\r\nlet checkMicroTaskQueue;\r\nlet microTasks;\r\n/**\r\n * Schedules a callback to the macrotask queue.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueTask = (function () {\r\n let destructor;\r\n let enqueue;\r\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\r\n if (true) {\r\n const queue = [];\r\n global.addEventListener('message', function (event) {\r\n // Confirm that the event was triggered by the current window and by this particular implementation.\r\n if (event.source === global && event.data === 'dojo-queue-message') {\r\n event.stopPropagation();\r\n if (queue.length) {\r\n executeTask(queue.shift());\r\n }\r\n }\r\n });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n global.postMessage('dojo-queue-message', '*');\r\n };\r\n }\r\n else if (false) {\r\n destructor = global.clearImmediate;\r\n enqueue = function (item) {\r\n return setImmediate(executeTask.bind(null, item));\r\n };\r\n }\r\n else {\r\n destructor = global.clearTimeout;\r\n enqueue = function (item) {\r\n return setTimeout(executeTask.bind(null, item), 0);\r\n };\r\n }\r\n function queueTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const id = enqueue(item);\r\n return getQueueHandle(item, destructor &&\r\n function () {\r\n destructor(id);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueTask(callback);\r\n };\r\n})();\r\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\r\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\r\nif (!true) {\r\n let isMicroTaskQueued = false;\r\n microTasks = [];\r\n checkMicroTaskQueue = function () {\r\n if (!isMicroTaskQueued) {\r\n isMicroTaskQueued = true;\r\n queueTask(function () {\r\n isMicroTaskQueued = false;\r\n if (microTasks.length) {\r\n let item;\r\n while ((item = microTasks.shift())) {\r\n executeTask(item);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n}\r\n/**\r\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\r\n *\r\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\r\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueAnimationTask = (function () {\r\n if (!true) {\r\n return queueTask;\r\n }\r\n function queueAnimationTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\r\n return getQueueHandle(item, function () {\r\n cancelAnimationFrame(rafId);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueAnimationTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueAnimationTask(callback);\r\n };\r\n})();\r\n/**\r\n * Schedules a callback to the microtask queue.\r\n *\r\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\r\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\r\n * registered with `queueTask` or `queueAnimationTask`.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport let queueMicroTask = (function () {\r\n let enqueue;\r\n if (false) {\r\n enqueue = function (item) {\r\n global.process.nextTick(executeTask.bind(null, item));\r\n };\r\n }\r\n else if (true) {\r\n enqueue = function (item) {\r\n global.Promise.resolve(item).then(executeTask);\r\n };\r\n }\r\n else if (true) {\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const node = document.createElement('div');\r\n const queue = [];\r\n const observer = new HostMutationObserver(function () {\r\n while (queue.length > 0) {\r\n const item = queue.shift();\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n }\r\n });\r\n observer.observe(node, { attributes: true });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n node.setAttribute('queueStatus', '1');\r\n };\r\n }\r\n else {\r\n enqueue = function (item) {\r\n checkMicroTaskQueue();\r\n microTasks.push(item);\r\n };\r\n }\r\n return function (callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n enqueue(item);\r\n return getQueueHandle(item);\r\n };\r\n})();\r\n//# sourceMappingURL=queue.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/util.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\util.mjs", - "name": "./node_modules/@dojo/shim/support/util.mjs", + "id": "./node_modules/@dojo/framework/shim/support/util.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\util.mjs", + "name": "./node_modules/@dojo/framework/shim/support/util.mjs", "index": 11, "index2": 6, "size": 853, @@ -3832,36 +3840,36 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "5:0-44" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-52" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-44" @@ -3880,12 +3888,12 @@ "source": "/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Injector.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Injector.mjs", - "name": "./node_modules/@dojo/widget-core/Injector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Injector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "index": 37, "index2": 31, - "size": 496, + "size": 493, "cacheable": true, "built": true, "optional": false, @@ -3894,18 +3902,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../Injector", "loc": "2:0-41" @@ -3920,15 +3928,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" + "source": "import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "name": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "index": 28, "index2": 22, - "size": 1134, + "size": 1128, "cacheable": true, "built": true, "optional": false, @@ -3937,18 +3945,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./NodeHandler", "loc": "7:0-40" @@ -3964,15 +3972,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\r\nimport Map from '@dojo/shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map" + "source": "import { Evented } from '../core/Evented';\r\nimport Map from '../shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Registry.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "name": "./node_modules/@dojo/widget-core/Registry.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "index": 21, "index2": 19, - "size": 3814, + "size": 3802, "cacheable": true, "built": true, "optional": false, @@ -3981,57 +3989,57 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\diff.mjs", - "module": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleName": "./node_modules/@dojo/widget-core/diff.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "type": "harmony import", + "userRequest": "../Registry", + "loc": "2:0-35" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\diff.mjs", + "module": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/diff.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "1:0-46" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "3:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "type": "harmony import", - "userRequest": "../Registry", - "loc": "2:0-35" } ], "usedExports": [ @@ -4049,15 +4057,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import Promise from '@dojo/shim/Promise';\r\nimport Map from '@dojo/shim/Map';\r\nimport Symbol from '@dojo/shim/Symbol';\r\nimport { Evented } from '@dojo/core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map" + "source": "import Promise from '../shim/Promise';\r\nimport Map from '../shim/Map';\r\nimport Symbol from '../shim/Symbol';\r\nimport { Evented } from '../core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "name": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "index": 27, "index2": 21, - "size": 2933, + "size": 2927, "cacheable": true, "built": true, "optional": false, @@ -4066,18 +4074,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./RegistryHandler", "loc": "6:0-48" @@ -4092,15 +4100,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Map } from '@dojo/shim/Map';\r\nimport { Evented } from '@dojo/core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map" + "source": "import { Map } from '../shim/Map';\r\nimport { Evented } from '../core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "name": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "id": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "name": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "index": 14, "index2": 26, - "size": 14386, + "size": 13720, "cacheable": true, "built": true, "optional": false, @@ -4109,18 +4117,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./WidgetBase", "loc": "2:0-50" @@ -4131,8 +4139,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/WidgetBase", - "loc": "5:0-58" + "userRequest": "@dojo/framework/widget-core/WidgetBase", + "loc": "5:0-68" } ], "usedExports": [ @@ -4146,12 +4154,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" + "source": "import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\animations\\cssTransitions.mjs", - "name": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", + "id": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\animations\\cssTransitions.mjs", + "name": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", "index": 33, "index2": 27, "size": 2288, @@ -4163,18 +4171,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "../animations/cssTransitions", "loc": "3:0-58" @@ -4191,12 +4199,12 @@ "source": "let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/d.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\d.mjs", - "name": "./node_modules/@dojo/widget-core/d.mjs", + "id": "./node_modules/@dojo/framework/widget-core/d.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\d.mjs", + "name": "./node_modules/@dojo/framework/widget-core/d.mjs", "index": 4, "index2": 8, - "size": 3270, + "size": 3267, "cacheable": true, "built": true, "optional": false, @@ -4205,54 +4213,54 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./d", "loc": "5:0-29" }, - { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "type": "harmony import", - "userRequest": "./d", - "loc": "4:0-24" - }, { "moduleId": "./src/menu-item/MenuItem.ts", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/d", - "loc": "2:0-40" + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "type": "harmony import", + "userRequest": "./d", + "loc": "4:0-24" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../d", "loc": "5:0-27" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./d", "loc": "3:0-65" @@ -4283,12 +4291,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" + "source": "import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "index": 41, "index2": 36, "size": 365, @@ -4300,18 +4308,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./decorators/alwaysRender", "loc": "8:0-57" @@ -4329,9 +4337,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\beforeProperties.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\beforeProperties.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "index": 39, "index2": 32, "size": 331, @@ -4343,27 +4351,27 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "issuerId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "2:0-54" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "3:0-54" @@ -4381,9 +4389,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "index": 12, "index2": 38, "size": 728, @@ -4408,8 +4416,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/decorators/customElement", - "loc": "3:0-75" + "userRequest": "@dojo/framework/widget-core/decorators/customElement", + "loc": "3:0-85" } ], "usedExports": [ @@ -4424,12 +4432,12 @@ "source": "import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\diffProperty.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "index": 40, "index2": 34, - "size": 973, + "size": 1014, "cacheable": true, "built": true, "optional": false, @@ -4438,18 +4446,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/diffProperty", "loc": "5:0-60" @@ -4464,12 +4472,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" + "source": "import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\handleDecorator.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\handleDecorator.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", "index": 35, "index2": 28, "size": 512, @@ -4481,63 +4489,63 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/handleDecorator", "loc": "4:0-66" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\afterRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\afterRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "2:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\diffProperty.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\beforeProperties.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\beforeProperties.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" @@ -4555,9 +4563,9 @@ "source": "/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "index": 38, "index2": 33, "size": 1532, @@ -4569,18 +4577,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/inject", "loc": "3:0-48" @@ -4595,12 +4603,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" + "source": "import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/diff.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\diff.mjs", - "name": "./node_modules/@dojo/widget-core/diff.mjs", + "id": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\diff.mjs", + "name": "./node_modules/@dojo/framework/widget-core/diff.mjs", "index": 20, "index2": 20, "size": 1930, @@ -4612,30 +4620,39 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./diff", "loc": "5:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../diff", "loc": "6:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "type": "harmony import", + "userRequest": "./../diff", + "loc": "2:0-33" } ], "usedExports": [ @@ -4654,12 +4671,12 @@ "source": "import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "index": 32, "index2": 30, - "size": 5852, + "size": 5683, "cacheable": true, "built": true, "optional": false, @@ -4668,18 +4685,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Projector", "loc": "3:0-52" @@ -4696,15 +4713,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "index": 36, "index2": 35, - "size": 5320, + "size": 5157, "cacheable": true, "built": true, "optional": false, @@ -4713,18 +4730,18 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Themed", "loc": "7:0-56" @@ -4735,8 +4752,8 @@ "module": "./src/menu-item/MenuItem.ts", "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/mixins/Themed", - "loc": "4:0-69" + "userRequest": "@dojo/framework/widget-core/mixins/Themed", + "loc": "4:0-79" } ], "usedExports": [ @@ -4753,15 +4770,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "name": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "index": 13, "index2": 37, - "size": 9124, + "size": 9118, "cacheable": true, "built": true, "optional": false, @@ -4783,14 +4800,14 @@ "module": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "moduleName": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "type": "cjs require", - "userRequest": "@dojo/widget-core/registerCustomElement", - "loc": "4:28-78" + "userRequest": "@dojo/framework/widget-core/registerCustomElement", + "loc": "4:28-88" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../registerCustomElement", "loc": "1:0-66" @@ -4806,15 +4823,15 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/vdom.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "name": "./node_modules/@dojo/widget-core/vdom.mjs", + "id": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "name": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "index": 29, "index2": 25, - "size": 39734, + "size": 40904, "cacheable": true, "built": true, "optional": false, @@ -4823,27 +4840,27 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./vdom", "loc": "8:0-43" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../vdom", "loc": "6:0-32" @@ -4862,7 +4879,7 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import global from '@dojo/shim/global';\r\nimport { from as arrayFrom } from '@dojo/shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '@dojo/shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode.focus();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (propName === 'focus') {\r\n focusNode(propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const rendered = dnode.rendered || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\r\n oldIndex++;\r\n newIndex++;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let child = oldChildren[oldIndex];\r\n if (child) {\r\n let nextIndex = oldIndex + 1;\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n if (insertBefore.rendered) {\r\n insertBeforeChildren.push(...insertBefore.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\r\n insertBeforeChildren.push(oldChildren[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map" + "source": "import global from '../shim/global';\r\nimport { from as arrayFrom } from '../shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '../shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst nextSiblingMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode[propName]();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (nodeOperations.indexOf(propName) !== -1) {\r\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const item = instanceMap.get(dnode.instance);\r\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n oldIndex++;\r\n newIndex++;\r\n textUpdated =\r\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let childrenArray = oldChildren;\r\n let nextIndex = oldIndex + 1;\r\n let child = oldChildren[oldIndex];\r\n if (!child) {\r\n child = siblings[0];\r\n nextIndex = 1;\r\n childrenArray = siblings;\r\n }\r\n if (child) {\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n const item = instanceMap.get(insertBefore.instance);\r\n if (item && item.dnode.rendered) {\r\n insertBeforeChildren.push(...item.dnode.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\r\n break;\r\n }\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\r\n insertBeforeChildren.push(childrenArray[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n const nextSiblings = children.slice(i + 1);\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n nextSiblingMap.set(instance, nextSiblings);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n nextSiblingMap.set(instance, nextSiblings);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const nextSiblings = nextSiblingMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map" }, { "id": "./node_modules/imports-loader/index.js?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", @@ -4870,7 +4887,7 @@ "name": "./node_modules/imports-loader?widgetFactory=src/menu-item/MenuItem!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "index": 1, "index2": 41, - "size": 286, + "size": 296, "cacheable": true, "built": true, "optional": false, @@ -4900,7 +4917,7 @@ "providedExports": null, "optimizationBailout": [], "depth": 1, - "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n" + "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu-item/MenuItem\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n" }, { "id": "./node_modules/process/browser.js", @@ -4917,21 +4934,21 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "issuerId": "./node_modules/@dojo/has/has.mjs", - "issuerName": "./node_modules/@dojo/has/has.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "issuerId": "./node_modules/@dojo/framework/has/has.mjs", + "issuerName": "./node_modules/@dojo/framework/has/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "process", - "loc": "1:0-37" + "loc": "1:0-40" } ], "usedExports": true, @@ -4955,45 +4972,45 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", + "issuerId": "./src/menu-item/MenuItem.ts", + "issuerName": "./src/menu-item/MenuItem.ts", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./src/menu-item/MenuItem.ts", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", + "module": "./src/menu-item/MenuItem.ts", + "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./src/menu-item/MenuItem.ts", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", - "module": "./src/menu-item/MenuItem.ts", - "moduleName": "./src/menu-item/MenuItem.ts", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -5001,7 +5018,6 @@ ], "usedExports": [ "__decorate", - "__metadata", "__rest" ], "providedExports": [ @@ -5042,30 +5058,30 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "issuerId": "./node_modules/@dojo/shim/global.mjs", - "issuerName": "./node_modules/@dojo/shim/global.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/global.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/global.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/global.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "module": "./node_modules/@dojo/shim/global.mjs", - "moduleName": "./node_modules/@dojo/shim/global.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "module": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/global.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" }, { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" } ], "usedExports": true, @@ -5080,7 +5096,7 @@ "name": "./src/menu-item/MenuItem.ts", "index": 2, "index2": 40, - "size": 1126, + "size": 1166, "cacheable": true, "built": true, "optional": false, @@ -5113,7 +5129,7 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\r\nimport { v } from '@dojo/widget-core/d';\r\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\r\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\r\nimport * as css from './menuItem.m.css';\r\nlet MenuItem = class MenuItem extends ThemedMixin(WidgetBase) {\r\n _onClick() {\r\n this.properties.onSelected && this.properties.onSelected(this.properties.data);\r\n }\r\n render() {\r\n const { title, selected } = this.properties;\r\n return v('li', { classes: this.theme(css.root) }, [\r\n v('span', {\r\n classes: this.theme([css.item, selected ? css.selected : null]),\r\n onclick: this._onClick\r\n }, [title])\r\n ]);\r\n }\r\n};\r\nMenuItem = tslib_1.__decorate([\r\n customElement({\r\n tag: 'demo-menu-item',\r\n attributes: ['title', 'selected'],\r\n events: ['onSelected'],\r\n properties: ['data', 'selected']\r\n }),\r\n theme(css)\r\n], MenuItem);\r\nexport { MenuItem };\r\nexport default MenuItem;\r\n" + "source": "import * as tslib_1 from \"tslib\";\r\nimport { v } from '@dojo/framework/widget-core/d';\r\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\r\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\r\nimport * as css from './menuItem.m.css';\r\nlet MenuItem = class MenuItem extends ThemedMixin(WidgetBase) {\r\n _onClick() {\r\n this.properties.onSelected && this.properties.onSelected(this.properties.data);\r\n }\r\n render() {\r\n const { title, selected } = this.properties;\r\n return v('li', { classes: this.theme(css.root) }, [\r\n v('span', {\r\n classes: this.theme([css.item, selected ? css.selected : null]),\r\n onclick: this._onClick\r\n }, [title])\r\n ]);\r\n }\r\n};\r\nMenuItem = tslib_1.__decorate([\r\n customElement({\r\n tag: 'demo-menu-item',\r\n attributes: ['title', 'selected'],\r\n events: ['onSelected'],\r\n properties: ['data', 'selected']\r\n }),\r\n theme(css)\r\n], MenuItem);\r\nexport { MenuItem };\r\nexport default MenuItem;\r\n" }, { "id": "./src/menu-item/menuItem.m.css", diff --git a/test-app/fixtures/windows/info/menu/report.html b/test-app/fixtures/windows/info/menu/report.html index c8532d6..e5d5f8a 100644 --- a/test-app/fixtures/windows/info/menu/report.html +++ b/test-app/fixtures/windows/info/menu/report.html @@ -4,7 +4,7 @@ Webpack Bundle Analyzer diff --git a/test-app/fixtures/windows/info/menu/stats.json b/test-app/fixtures/windows/info/menu/stats.json index f3ebc2f..a65646c 100644 --- a/test-app/fixtures/windows/info/menu/stats.json +++ b/test-app/fixtures/windows/info/menu/stats.json @@ -2,8 +2,8 @@ "errors": [], "warnings": [], "version": "3.8.1", - "hash": "3e984433321e15a3bb9b", - "time": 7204, + "hash": "b1d790cff3d2b119c671", + "time": 7421, "publicPath": "", "assetsByChunkName": { "menu": [ @@ -16,7 +16,7 @@ "assets": [ { "name": "menu-1.0.0.js", - "size": 54024, + "size": 55200, "chunks": [ "menu" ], @@ -38,7 +38,7 @@ }, { "name": "menu-1.0.0.js.map", - "size": 273970, + "size": 275436, "chunks": [ "menu" ], @@ -80,7 +80,7 @@ "initial": true, "entry": true, "extraAsync": false, - "size": 195249, + "size": 195469, "names": [ "menu" ], @@ -90,16 +90,16 @@ "menu-1.0.0.js.map", "menu-1.0.0.css.map" ], - "hash": "d18869be4d8257c205ea", + "hash": "6bc5a4dfa19a710d3acf", "parents": [], "modules": [ { - "id": "./node_modules/@dojo/core/Destroyable.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "name": "./node_modules/@dojo/core/Destroyable.mjs", + "id": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "name": "./node_modules/@dojo/framework/core/Destroyable.mjs", "index": 25, "index2": 17, - "size": 1668, + "size": 1665, "cacheable": true, "built": true, "optional": false, @@ -108,18 +108,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "issuerId": "./node_modules/@dojo/core/Evented.mjs", - "issuerName": "./node_modules/@dojo/core/Evented.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "issuerId": "./node_modules/@dojo/framework/core/Evented.mjs", + "issuerName": "./node_modules/@dojo/framework/core/Evented.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", "userRequest": "./Destroyable", "loc": "2:0-44" @@ -134,15 +134,15 @@ ], "optimizationBailout": [], "depth": 6, - "source": "import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" + "source": "import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" }, { - "id": "./node_modules/@dojo/core/Evented.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "name": "./node_modules/@dojo/core/Evented.mjs", + "id": "./node_modules/@dojo/framework/core/Evented.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "name": "./node_modules/@dojo/framework/core/Evented.mjs", "index": 24, "index2": 18, - "size": 2220, + "size": 2222, "cacheable": true, "built": true, "optional": false, @@ -151,48 +151,48 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "issuerId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "issuerName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "2:0-45" + "userRequest": "../core/Evented", + "loc": "2:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "4:0-45" + "userRequest": "../core/Evented", + "loc": "4:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Injector.mjs", - "module": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Injector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Injector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" } ], "usedExports": [ @@ -205,15 +205,15 @@ ], "optimizationBailout": [], "depth": 5, - "source": "import Map from '@dojo/shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n methods.forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map" + "source": "import Map from '../shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n [...methods].forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map" }, { - "id": "./node_modules/@dojo/core/lang.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "name": "./node_modules/@dojo/core/lang.mjs", + "id": "./node_modules/@dojo/framework/core/lang.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "name": "./node_modules/@dojo/framework/core/lang.mjs", "index": 26, "index2": 16, - "size": 6843, + "size": 6837, "cacheable": true, "built": true, "optional": false, @@ -222,27 +222,27 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/lang", + "userRequest": "../../core/lang", "loc": "2:0-41" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", "userRequest": "./lang", "loc": "1:0-47" @@ -267,12 +267,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" + "source": "import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" }, { - "id": "./node_modules/@dojo/has/has.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "name": "./node_modules/@dojo/has/has.mjs", + "id": "./node_modules/@dojo/framework/has/has.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "name": "./node_modules/@dojo/framework/has/has.mjs", "index": 7, "index2": 3, "size": 6500, @@ -284,29 +284,29 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "issuerId": "./node_modules/@dojo/shim/support/has.mjs", - "issuerName": "./node_modules/@dojo/shim/support/has.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/support/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "1:0-41" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "4:0-30" } ], @@ -328,9 +328,9 @@ "source": "function isFeatureTestThenable(value) {\r\n return value && value.then;\r\n}\r\n/**\r\n * A cache of results of feature tests\r\n */\r\nexport const testCache = {};\r\n/**\r\n * A cache of the un-resolved feature tests\r\n */\r\nexport const testFunctions = {};\r\n/**\r\n * A cache of unresolved thenables (probably promises)\r\n * @type {{}}\r\n */\r\nconst testThenables = {};\r\n/**\r\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\r\n */\r\nconst globalScope = (function () {\r\n /* istanbul ignore else */\r\n if (typeof window !== 'undefined') {\r\n // Browsers\r\n return window;\r\n }\r\n else if (typeof global !== 'undefined') {\r\n // Node\r\n return global;\r\n }\r\n else if (typeof self !== 'undefined') {\r\n // Web workers\r\n return self;\r\n }\r\n /* istanbul ignore next */\r\n return {};\r\n})();\r\n/* Grab the staticFeatures if there are available */\r\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\r\n/* Cleaning up the DojoHasEnviornment */\r\nif ('DojoHasEnvironment' in globalScope) {\r\n delete globalScope.DojoHasEnvironment;\r\n}\r\n/**\r\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\r\n * returns a map.\r\n *\r\n * @param value The value to guard for\r\n */\r\nfunction isStaticFeatureFunction(value) {\r\n return typeof value === 'function';\r\n}\r\n/**\r\n * The cache of asserted features that were available in the global scope when the\r\n * module loaded\r\n */\r\nconst staticCache = staticFeatures\r\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\r\n : {}; /* Providing an empty cache, if none was in the environment\r\n\r\n/**\r\n* AMD plugin function.\r\n*\r\n* Conditional loads modules based on a has feature test value.\r\n*\r\n* @param resourceId Gives the resolved module id to load.\r\n* @param require The loader require function with respect to the module that contained the plugin resource in its\r\n* dependency list.\r\n* @param load Callback to loader that consumes result of plugin demand.\r\n*/\r\nexport function load(resourceId, require, load, config) {\r\n resourceId ? require([resourceId], load) : load();\r\n}\r\n/**\r\n * AMD plugin function.\r\n *\r\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\r\n * value(s).\r\n *\r\n * @param resourceId The id of the module\r\n * @param normalize Resolves a relative module id into an absolute module id\r\n */\r\nexport function normalize(resourceId, normalize) {\r\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\r\n let i = 0;\r\n function get(skip) {\r\n const term = tokens[i++];\r\n if (term === ':') {\r\n // empty string module name, resolves to null\r\n return null;\r\n }\r\n else {\r\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\r\n if (tokens[i++] === '?') {\r\n if (!skip && has(term)) {\r\n // matched the feature, get the first value from the options\r\n return get();\r\n }\r\n else {\r\n // did not match, get the second value, passing over the first\r\n get(true);\r\n return get(skip);\r\n }\r\n }\r\n // a module\r\n return term;\r\n }\r\n }\r\n const id = get();\r\n return id && normalize(id);\r\n}\r\n/**\r\n * Check if a feature has already been registered\r\n *\r\n * @param feature the name of the feature\r\n */\r\nexport function exists(feature) {\r\n const normalizedFeature = feature.toLowerCase();\r\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\r\n}\r\n/**\r\n * Register a new test for a named feature.\r\n *\r\n * @example\r\n * has.add('dom-addeventlistener', !!document.addEventListener);\r\n *\r\n * @example\r\n * has.add('touch-events', function () {\r\n * return 'ontouchstart' in document\r\n * });\r\n *\r\n * @param feature the name of the feature\r\n * @param value the value reported of the feature, or a function that will be executed once on first test\r\n * @param overwrite if an existing value should be overwritten. Defaults to false.\r\n */\r\nexport function add(feature, value, overwrite = false) {\r\n const normalizedFeature = feature.toLowerCase();\r\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\r\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\r\n }\r\n if (typeof value === 'function') {\r\n testFunctions[normalizedFeature] = value;\r\n }\r\n else if (isFeatureTestThenable(value)) {\r\n testThenables[feature] = value.then((resolvedValue) => {\r\n testCache[feature] = resolvedValue;\r\n delete testThenables[feature];\r\n }, () => {\r\n delete testThenables[feature];\r\n });\r\n }\r\n else {\r\n testCache[normalizedFeature] = value;\r\n delete testFunctions[normalizedFeature];\r\n }\r\n}\r\n/**\r\n * Return the current value of a named feature.\r\n *\r\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\r\n */\r\nexport default function has(feature) {\r\n let result;\r\n const normalizedFeature = feature.toLowerCase();\r\n if (normalizedFeature in staticCache) {\r\n result = staticCache[normalizedFeature];\r\n }\r\n else if (testFunctions[normalizedFeature]) {\r\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\r\n delete testFunctions[normalizedFeature];\r\n }\r\n else if (normalizedFeature in testCache) {\r\n result = testCache[normalizedFeature];\r\n }\r\n else if (feature in testThenables) {\r\n return false;\r\n }\r\n else {\r\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\r\n }\r\n return result;\r\n}\r\n/*\r\n * Out of the box feature tests\r\n */\r\n/* Environments */\r\n/* Used as a value to provide a debug only code path */\r\nadd('debug', true);\r\n/* Detects if the environment is \"browser like\" */\r\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\r\n/* Detects if the environment appears to be NodeJS */\r\nadd('host-node', function () {\r\n if (typeof process === 'object' && process.versions && process.versions.node) {\r\n return process.versions.node;\r\n }\r\n});\r\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Map.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "name": "./node_modules/@dojo/shim/Map.mjs", + "id": "./node_modules/@dojo/framework/shim/Map.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "name": "./node_modules/@dojo/framework/shim/Map.mjs", "index": 15, "index2": 12, "size": 3426, @@ -342,57 +342,57 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-37" + "userRequest": "../shim/Map", + "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" } ], "usedExports": [ @@ -408,9 +408,9 @@ "source": "import { isArrayLike, ShimIterator } from './iterator';\r\nimport global from './global';\r\nimport { is as objectIs } from './object';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let Map = global.Map;\r\nif (!true) {\r\n Map = (_a = class Map {\r\n constructor(iterable) {\r\n this._keys = [];\r\n this._values = [];\r\n this[Symbol.toStringTag] = 'Map';\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const value = iterable[i];\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n else {\r\n for (const value of iterable) {\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * An alternative to Array.prototype.indexOf using Object.is\r\n * to check for equality. See http://mzl.la/1zuKO2V\r\n */\r\n _indexOfKey(keys, key) {\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n if (objectIs(keys[i], key)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n get size() {\r\n return this._keys.length;\r\n }\r\n clear() {\r\n this._keys.length = this._values.length = 0;\r\n }\r\n delete(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._keys.splice(index, 1);\r\n this._values.splice(index, 1);\r\n return true;\r\n }\r\n entries() {\r\n const values = this._keys.map((key, i) => {\r\n return [key, this._values[i]];\r\n });\r\n return new ShimIterator(values);\r\n }\r\n forEach(callback, context) {\r\n const keys = this._keys;\r\n const values = this._values;\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n callback.call(context, values[i], keys[i], this);\r\n }\r\n }\r\n get(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n return index < 0 ? undefined : this._values[index];\r\n }\r\n has(key) {\r\n return this._indexOfKey(this._keys, key) > -1;\r\n }\r\n keys() {\r\n return new ShimIterator(this._keys);\r\n }\r\n set(key, value) {\r\n let index = this._indexOfKey(this._keys, key);\r\n index = index < 0 ? this._keys.length : index;\r\n this._keys[index] = key;\r\n this._values[index] = value;\r\n return this;\r\n }\r\n values() {\r\n return new ShimIterator(this._values);\r\n }\r\n [Symbol.iterator]() {\r\n return this.entries();\r\n }\r\n },\r\n _a[Symbol.species] = _a,\r\n _a);\r\n}\r\nexport default Map;\r\nvar _a;\r\n//# sourceMappingURL=Map.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Promise.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "name": "./node_modules/@dojo/shim/Promise.mjs", + "id": "./node_modules/@dojo/framework/shim/Promise.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "name": "./node_modules/@dojo/framework/shim/Promise.mjs", "index": 22, "index2": 15, "size": 8717, @@ -422,30 +422,30 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "issuerId": "./node_modules/@dojo/widget-core/Registry.mjs", - "issuerName": "./node_modules/@dojo/widget-core/Registry.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "1:0-41" + "userRequest": "../shim/Promise", + "loc": "1:0-38" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "2:0-41" + "userRequest": "../shim/Promise", + "loc": "2:0-38" } ], "usedExports": [ @@ -461,9 +461,9 @@ "source": "import global from './global';\r\nimport { queueMicroTask } from './support/queue';\r\nimport './Symbol';\r\nimport has from './support/has';\r\nexport let ShimPromise = global.Promise;\r\nexport const isThenable = function isThenable(value) {\r\n return value && typeof value.then === 'function';\r\n};\r\nif (!true) {\r\n global.Promise = ShimPromise = (_a = class Promise {\r\n /**\r\n * Creates a new Promise.\r\n *\r\n * @constructor\r\n *\r\n * @param executor\r\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\r\n * starting the asynchronous operation when it is invoked.\r\n *\r\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\r\n * successfully, or the `reject` function when the operation fails.\r\n */\r\n constructor(executor) {\r\n /**\r\n * The current state of this promise.\r\n */\r\n this.state = 1 /* Pending */;\r\n this[Symbol.toStringTag] = 'Promise';\r\n /**\r\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\r\n */\r\n let isChained = false;\r\n /**\r\n * Whether or not this promise is in a resolved state.\r\n */\r\n const isResolved = () => {\r\n return this.state !== 1 /* Pending */ || isChained;\r\n };\r\n /**\r\n * Callbacks that should be invoked once the asynchronous operation has completed.\r\n */\r\n let callbacks = [];\r\n /**\r\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\r\n * enqueues callbacks for execution on the next event loop turn.\r\n */\r\n let whenFinished = function (callback) {\r\n if (callbacks) {\r\n callbacks.push(callback);\r\n }\r\n };\r\n /**\r\n * Settles this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const settle = (newState, value) => {\r\n // A promise can only be settled once.\r\n if (this.state !== 1 /* Pending */) {\r\n return;\r\n }\r\n this.state = newState;\r\n this.resolvedValue = value;\r\n whenFinished = queueMicroTask;\r\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\r\n // wait an extra turn.\r\n if (callbacks && callbacks.length > 0) {\r\n queueMicroTask(function () {\r\n if (callbacks) {\r\n let count = callbacks.length;\r\n for (let i = 0; i < count; ++i) {\r\n callbacks[i].call(null);\r\n }\r\n callbacks = null;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Resolves this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const resolve = (newState, value) => {\r\n if (isResolved()) {\r\n return;\r\n }\r\n if (isThenable(value)) {\r\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\r\n isChained = true;\r\n }\r\n else {\r\n settle(newState, value);\r\n }\r\n };\r\n this.then = (onFulfilled, onRejected) => {\r\n return new Promise((resolve, reject) => {\r\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\r\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\r\n // event loop.\r\n whenFinished(() => {\r\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\r\n if (typeof callback === 'function') {\r\n try {\r\n resolve(callback(this.resolvedValue));\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n else if (this.state === 2 /* Rejected */) {\r\n reject(this.resolvedValue);\r\n }\r\n else {\r\n resolve(this.resolvedValue);\r\n }\r\n });\r\n });\r\n };\r\n try {\r\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\r\n }\r\n catch (error) {\r\n settle(2 /* Rejected */, error);\r\n }\r\n }\r\n static all(iterable) {\r\n return new this(function (resolve, reject) {\r\n const values = [];\r\n let complete = 0;\r\n let total = 0;\r\n let populating = true;\r\n function fulfill(index, value) {\r\n values[index] = value;\r\n ++complete;\r\n finish();\r\n }\r\n function finish() {\r\n if (populating || complete < total) {\r\n return;\r\n }\r\n resolve(values);\r\n }\r\n function processItem(index, item) {\r\n ++total;\r\n if (isThenable(item)) {\r\n // If an item Promise rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(fulfill.bind(null, index), reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(fulfill.bind(null, index));\r\n }\r\n }\r\n let i = 0;\r\n for (const value of iterable) {\r\n processItem(i, value);\r\n i++;\r\n }\r\n populating = false;\r\n finish();\r\n });\r\n }\r\n static race(iterable) {\r\n return new this(function (resolve, reject) {\r\n for (const item of iterable) {\r\n if (item instanceof Promise) {\r\n // If a Promise item rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(resolve, reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(resolve);\r\n }\r\n }\r\n });\r\n }\r\n static reject(reason) {\r\n return new this(function (resolve, reject) {\r\n reject(reason);\r\n });\r\n }\r\n static resolve(value) {\r\n return new this(function (resolve) {\r\n resolve(value);\r\n });\r\n }\r\n catch(onRejected) {\r\n return this.then(undefined, onRejected);\r\n }\r\n },\r\n _a[Symbol.species] = ShimPromise,\r\n _a);\r\n}\r\nexport default ShimPromise;\r\nvar _a;\r\n//# sourceMappingURL=Promise.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Symbol.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "name": "./node_modules/@dojo/shim/Symbol.mjs", + "id": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "name": "./node_modules/@dojo/framework/shim/Symbol.mjs", "index": 5, "index2": 7, "size": 6073, @@ -475,84 +475,84 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/d.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\d.mjs", - "module": "./node_modules/@dojo/widget-core/d.mjs", - "moduleName": "./node_modules/@dojo/widget-core/d.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "1:0-39" + "userRequest": "../shim/Symbol", + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\d.mjs", + "module": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/d.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" + "userRequest": "../shim/Symbol", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "5:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "4:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "type": "harmony import", + "userRequest": "../shim/Symbol", + "loc": "3:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "1:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./Symbol", - "loc": "3:0-18" + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./Symbol", - "loc": "3:0-36" + "loc": "3:0-18" } ], "usedExports": [ @@ -568,9 +568,9 @@ "source": "import has from './support/has';\r\nimport global from './global';\r\nimport { getValueDescriptor } from './support/util';\r\nexport let Symbol = global.Symbol;\r\nif (!true) {\r\n /**\r\n * Throws if the value is not a symbol, used internally within the Shim\r\n * @param {any} value The value to check\r\n * @return {symbol} Returns the symbol or throws\r\n */\r\n const validateSymbol = function validateSymbol(value) {\r\n if (!isSymbol(value)) {\r\n throw new TypeError(value + ' is not a symbol');\r\n }\r\n return value;\r\n };\r\n const defineProperties = Object.defineProperties;\r\n const defineProperty = Object.defineProperty;\r\n const create = Object.create;\r\n const objPrototype = Object.prototype;\r\n const globalSymbols = {};\r\n const getSymbolName = (function () {\r\n const created = create(null);\r\n return function (desc) {\r\n let postfix = 0;\r\n let name;\r\n while (created[String(desc) + (postfix || '')]) {\r\n ++postfix;\r\n }\r\n desc += String(postfix || '');\r\n created[desc] = true;\r\n name = '@@' + desc;\r\n // FIXME: Temporary guard until the duplicate execution when testing can be\r\n // pinned down.\r\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\r\n defineProperty(objPrototype, name, {\r\n set: function (value) {\r\n defineProperty(this, name, getValueDescriptor(value));\r\n }\r\n });\r\n }\r\n return name;\r\n };\r\n })();\r\n const InternalSymbol = function Symbol(description) {\r\n if (this instanceof InternalSymbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n return Symbol(description);\r\n };\r\n Symbol = global.Symbol = function Symbol(description) {\r\n if (this instanceof Symbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n const sym = Object.create(InternalSymbol.prototype);\r\n description = description === undefined ? '' : String(description);\r\n return defineProperties(sym, {\r\n __description__: getValueDescriptor(description),\r\n __name__: getValueDescriptor(getSymbolName(description))\r\n });\r\n };\r\n /* Decorate the Symbol function with the appropriate properties */\r\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\r\n if (globalSymbols[key]) {\r\n return globalSymbols[key];\r\n }\r\n return (globalSymbols[key] = Symbol(String(key)));\r\n }));\r\n defineProperties(Symbol, {\r\n keyFor: getValueDescriptor(function (sym) {\r\n let key;\r\n validateSymbol(sym);\r\n for (key in globalSymbols) {\r\n if (globalSymbols[key] === sym) {\r\n return key;\r\n }\r\n }\r\n }),\r\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\r\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\r\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\r\n match: getValueDescriptor(Symbol.for('match'), false, false),\r\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\r\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\r\n search: getValueDescriptor(Symbol.for('search'), false, false),\r\n species: getValueDescriptor(Symbol.for('species'), false, false),\r\n split: getValueDescriptor(Symbol.for('split'), false, false),\r\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\r\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\r\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\r\n });\r\n /* Decorate the InternalSymbol object */\r\n defineProperties(InternalSymbol.prototype, {\r\n constructor: getValueDescriptor(Symbol),\r\n toString: getValueDescriptor(function () {\r\n return this.__name__;\r\n }, false, false)\r\n });\r\n /* Decorate the Symbol.prototype */\r\n defineProperties(Symbol.prototype, {\r\n toString: getValueDescriptor(function () {\r\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\r\n }),\r\n valueOf: getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n })\r\n });\r\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n }));\r\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\r\n}\r\n/**\r\n * A custom guard function that determines if an object is a symbol or not\r\n * @param {any} value The value to check to see if it is a symbol or not\r\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\r\n */\r\nexport function isSymbol(value) {\r\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\r\n}\r\n/**\r\n * Fill any missing well known symbols if the native Symbol is missing them\r\n */\r\n[\r\n 'hasInstance',\r\n 'isConcatSpreadable',\r\n 'iterator',\r\n 'species',\r\n 'replace',\r\n 'search',\r\n 'split',\r\n 'match',\r\n 'toPrimitive',\r\n 'toStringTag',\r\n 'unscopables',\r\n 'observable'\r\n].forEach((wellKnown) => {\r\n if (!Symbol[wellKnown]) {\r\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\r\n }\r\n});\r\nexport default Symbol;\r\n//# sourceMappingURL=Symbol.mjs.map" }, { - "id": "./node_modules/@dojo/shim/WeakMap.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "name": "./node_modules/@dojo/shim/WeakMap.mjs", + "id": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "name": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "index": 19, "index2": 13, "size": 3858, @@ -582,38 +582,38 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "2:0-41" + "userRequest": "../shim/WeakMap", + "loc": "2:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "5:0-41" + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", + "userRequest": "../../shim/WeakMap", "loc": "1:0-41" } ], @@ -629,9 +629,9 @@ "source": "import global from './global';\r\nimport { isArrayLike } from './iterator';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let WeakMap = global.WeakMap;\r\nif (!true) {\r\n const DELETED = {};\r\n const getUID = function getUID() {\r\n return Math.floor(Math.random() * 100000000);\r\n };\r\n const generateName = (function () {\r\n let startId = Math.floor(Date.now() % 100000000);\r\n return function generateName() {\r\n return '__wm' + getUID() + (startId++ + '__');\r\n };\r\n })();\r\n WeakMap = class WeakMap {\r\n constructor(iterable) {\r\n this[Symbol.toStringTag] = 'WeakMap';\r\n this._name = generateName();\r\n this._frozenEntries = [];\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const item = iterable[i];\r\n this.set(item[0], item[1]);\r\n }\r\n }\r\n else {\r\n for (const [key, value] of iterable) {\r\n this.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n _getFrozenEntryIndex(key) {\r\n for (let i = 0; i < this._frozenEntries.length; i++) {\r\n if (this._frozenEntries[i].key === key) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n delete(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n entry.value = DELETED;\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n this._frozenEntries.splice(frozenIndex, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n get(key) {\r\n if (key === undefined || key === null) {\r\n return undefined;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n return entry.value;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return this._frozenEntries[frozenIndex].value;\r\n }\r\n }\r\n has(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n set(key, value) {\r\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\r\n throw new TypeError('Invalid value used as weak map key');\r\n }\r\n let entry = key[this._name];\r\n if (!entry || entry.key !== key) {\r\n entry = Object.create(null, {\r\n key: { value: key }\r\n });\r\n if (Object.isFrozen(key)) {\r\n this._frozenEntries.push(entry);\r\n }\r\n else {\r\n Object.defineProperty(key, this._name, {\r\n value: entry\r\n });\r\n }\r\n }\r\n entry.value = value;\r\n return this;\r\n }\r\n };\r\n}\r\nexport default WeakMap;\r\n//# sourceMappingURL=WeakMap.mjs.map" }, { - "id": "./node_modules/@dojo/shim/array.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "name": "./node_modules/@dojo/shim/array.mjs", + "id": "./node_modules/@dojo/framework/shim/array.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "name": "./node_modules/@dojo/framework/shim/array.mjs", "index": 30, "index2": 24, "size": 9175, @@ -643,30 +643,30 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "4:0-40" + "userRequest": "../shim/array", + "loc": "4:0-37" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "2:0-53" + "userRequest": "../shim/array", + "loc": "2:0-50" } ], "usedExports": [ @@ -686,9 +686,9 @@ "source": "import global from './global';\r\nimport { isArrayLike, isIterable } from './iterator';\r\nimport { MAX_SAFE_INTEGER } from './number';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\nexport let from;\r\n/**\r\n * Creates a new array from the function parameters.\r\n *\r\n * @param arguments Any number of arguments for the array\r\n * @return An array from the given arguments\r\n */\r\nexport let of;\r\n/* ES6 Array instance methods */\r\n/**\r\n * Copies data internally within an array or array-like object.\r\n *\r\n * @param target The target array-like object\r\n * @param offset The index to start copying values to; if negative, it counts backwards from length\r\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\r\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\r\n * @return The target\r\n */\r\nexport let copyWithin;\r\n/**\r\n * Fills elements of an array-like object with the specified value.\r\n *\r\n * @param target The target to fill\r\n * @param value The value to fill each element of the target with\r\n * @param start The first index to fill\r\n * @param end The (exclusive) index at which to stop filling\r\n * @return The filled target\r\n */\r\nexport let fill;\r\n/**\r\n * Finds and returns the first instance matching the callback or undefined if one is not found.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning if the current value matches a criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first element matching the callback, or undefined if one does not exist\r\n */\r\nexport let find;\r\n/**\r\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\r\n * or -1 if no values satisfy it.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning true if the current value satisfies its criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\r\n */\r\nexport let findIndex;\r\n/* ES7 Array instance methods */\r\n/**\r\n * Determines whether an array includes a given value\r\n *\r\n * @param target the target array-like object\r\n * @param searchElement the item to search for\r\n * @param fromIndex the starting index to search from\r\n * @return `true` if the array includes the element, otherwise `false`\r\n */\r\nexport let includes;\r\nif (true && true) {\r\n from = global.Array.from;\r\n of = global.Array.of;\r\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\r\n fill = wrapNative(global.Array.prototype.fill);\r\n find = wrapNative(global.Array.prototype.find);\r\n findIndex = wrapNative(global.Array.prototype.findIndex);\r\n}\r\nelse {\r\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\r\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n length = Number(length);\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n /**\r\n * From ES6 7.1.4 ToInteger()\r\n *\r\n * @param value A value to convert\r\n * @return An integer\r\n */\r\n const toInteger = function toInteger(value) {\r\n value = Number(value);\r\n if (isNaN(value)) {\r\n return 0;\r\n }\r\n if (value === 0 || !isFinite(value)) {\r\n return value;\r\n }\r\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\r\n };\r\n /**\r\n * Normalizes an offset against a given length, wrapping it if negative.\r\n *\r\n * @param value The original offset\r\n * @param length The total length to normalize against\r\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\r\n */\r\n const normalizeOffset = function normalizeOffset(value, length) {\r\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\r\n };\r\n from = function from(arrayLike, mapFunction, thisArg) {\r\n if (arrayLike == null) {\r\n throw new TypeError('from: requires an array-like object');\r\n }\r\n if (mapFunction && thisArg) {\r\n mapFunction = mapFunction.bind(thisArg);\r\n }\r\n /* tslint:disable-next-line:variable-name */\r\n const Constructor = this;\r\n const length = toLength(arrayLike.length);\r\n // Support extension\r\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\r\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\r\n return array;\r\n }\r\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\r\n // with the iteration on IE when using a NaN array length.\r\n if (isArrayLike(arrayLike)) {\r\n if (length === 0) {\r\n return [];\r\n }\r\n for (let i = 0; i < arrayLike.length; i++) {\r\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\r\n }\r\n }\r\n else {\r\n let i = 0;\r\n for (const value of arrayLike) {\r\n array[i] = mapFunction ? mapFunction(value, i) : value;\r\n i++;\r\n }\r\n }\r\n if (arrayLike.length !== undefined) {\r\n array.length = length;\r\n }\r\n return array;\r\n };\r\n of = function of(...items) {\r\n return Array.prototype.slice.call(items);\r\n };\r\n copyWithin = function copyWithin(target, offset, start, end) {\r\n if (target == null) {\r\n throw new TypeError('copyWithin: target must be an array-like object');\r\n }\r\n const length = toLength(target.length);\r\n offset = normalizeOffset(toInteger(offset), length);\r\n start = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n let count = Math.min(end - start, length - offset);\r\n let direction = 1;\r\n if (offset > start && offset < start + count) {\r\n direction = -1;\r\n start += count - 1;\r\n offset += count - 1;\r\n }\r\n while (count > 0) {\r\n if (start in target) {\r\n target[offset] = target[start];\r\n }\r\n else {\r\n delete target[offset];\r\n }\r\n offset += direction;\r\n start += direction;\r\n count--;\r\n }\r\n return target;\r\n };\r\n fill = function fill(target, value, start, end) {\r\n const length = toLength(target.length);\r\n let i = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n while (i < end) {\r\n target[i++] = value;\r\n }\r\n return target;\r\n };\r\n find = function find(target, callback, thisArg) {\r\n const index = findIndex(target, callback, thisArg);\r\n return index !== -1 ? target[index] : undefined;\r\n };\r\n findIndex = function findIndex(target, callback, thisArg) {\r\n const length = toLength(target.length);\r\n if (!callback) {\r\n throw new TypeError('find: second argument must be a function');\r\n }\r\n if (thisArg) {\r\n callback = callback.bind(thisArg);\r\n }\r\n for (let i = 0; i < length; i++) {\r\n if (callback(target[i], i, target)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\nif (true) {\r\n includes = wrapNative(global.Array.prototype.includes);\r\n}\r\nelse {\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n length = Number(length);\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n includes = function includes(target, searchElement, fromIndex = 0) {\r\n let len = toLength(target.length);\r\n for (let i = fromIndex; i < len; ++i) {\r\n const currentElement = target[i];\r\n if (searchElement === currentElement ||\r\n (searchElement !== searchElement && currentElement !== currentElement)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n//# sourceMappingURL=array.mjs.map" }, { - "id": "./node_modules/@dojo/shim/global.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "name": "./node_modules/@dojo/shim/global.mjs", + "id": "./node_modules/@dojo/framework/shim/global.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "name": "./node_modules/@dojo/framework/shim/global.mjs", "index": 10, "index2": 4, "size": 581, @@ -700,117 +700,117 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "6:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "1:0-39" + "userRequest": "../shim/global", + "loc": "6:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/number.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\number.mjs", - "module": "./node_modules/@dojo/shim/number.mjs", - "moduleName": "./node_modules/@dojo/shim/number.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/global", + "loc": "1:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", + "module": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/number.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", "userRequest": "../global", "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "../global", "loc": "1:0-31" @@ -827,9 +827,9 @@ "source": "const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map" }, { - "id": "./node_modules/@dojo/shim/iterator.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "name": "./node_modules/@dojo/shim/iterator.mjs", + "id": "./node_modules/@dojo/framework/shim/iterator.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "name": "./node_modules/@dojo/framework/shim/iterator.mjs", "index": 16, "index2": 10, "size": 3158, @@ -841,36 +841,36 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-53" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "1:0-55" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-41" @@ -889,9 +889,9 @@ "source": "import './Symbol';\nimport { HIGH_SURROGATE_MAX, HIGH_SURROGATE_MIN } from './string';\nconst staticDone = { done: true, value: undefined };\n/**\n * A class that _shims_ an iterator interface on array like objects.\n */\nexport class ShimIterator {\n constructor(list) {\n this._nextIndex = -1;\n if (isIterable(list)) {\n this._nativeIterator = list[Symbol.iterator]();\n }\n else {\n this._list = list;\n }\n }\n /**\n * Return the next iteration result for the Iterator\n */\n next() {\n if (this._nativeIterator) {\n return this._nativeIterator.next();\n }\n if (!this._list) {\n return staticDone;\n }\n if (++this._nextIndex < this._list.length) {\n return {\n done: false,\n value: this._list[this._nextIndex]\n };\n }\n return staticDone;\n }\n [Symbol.iterator]() {\n return this;\n }\n}\n/**\n * A type guard for checking if something has an Iterable interface\n *\n * @param value The value to type guard against\n */\nexport function isIterable(value) {\n return value && typeof value[Symbol.iterator] === 'function';\n}\n/**\n * A type guard for checking if something is ArrayLike\n *\n * @param value The value to type guard against\n */\nexport function isArrayLike(value) {\n return value && typeof value.length === 'number';\n}\n/**\n * Returns the iterator for an object\n *\n * @param iterable The iterable object to return the iterator for\n */\nexport function get(iterable) {\n if (isIterable(iterable)) {\n return iterable[Symbol.iterator]();\n }\n else if (isArrayLike(iterable)) {\n return new ShimIterator(iterable);\n }\n}\n/**\n * Shims the functionality of `for ... of` blocks\n *\n * @param iterable The object the provides an interator interface\n * @param callback The callback which will be called for each item of the iterable\n * @param thisArg Optional scope to pass the callback\n */\nexport function forOf(iterable, callback, thisArg) {\n let broken = false;\n function doBreak() {\n broken = true;\n }\n /* We need to handle iteration of double byte strings properly */\n if (isArrayLike(iterable) && typeof iterable === 'string') {\n const l = iterable.length;\n for (let i = 0; i < l; ++i) {\n let char = iterable[i];\n if (i + 1 < l) {\n const code = char.charCodeAt(0);\n if (code >= HIGH_SURROGATE_MIN && code <= HIGH_SURROGATE_MAX) {\n char += iterable[++i];\n }\n }\n callback.call(thisArg, char, iterable, doBreak);\n if (broken) {\n return;\n }\n }\n }\n else {\n const iterator = get(iterable);\n if (iterator) {\n let result = iterator.next();\n while (!result.done) {\n callback.call(thisArg, result.value, iterable, doBreak);\n if (broken) {\n return;\n }\n result = iterator.next();\n }\n }\n }\n}\n//# sourceMappingURL=iterator.mjs.map" }, { - "id": "./node_modules/@dojo/shim/number.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\number.mjs", - "name": "./node_modules/@dojo/shim/number.mjs", + "id": "./node_modules/@dojo/framework/shim/number.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", + "name": "./node_modules/@dojo/framework/shim/number.mjs", "index": 31, "index2": 23, "size": 1724, @@ -903,18 +903,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./number", "loc": "3:0-44" @@ -935,9 +935,9 @@ "source": "import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map" }, { - "id": "./node_modules/@dojo/shim/object.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "name": "./node_modules/@dojo/shim/object.mjs", + "id": "./node_modules/@dojo/framework/shim/object.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "name": "./node_modules/@dojo/framework/shim/object.mjs", "index": 18, "index2": 11, "size": 4171, @@ -949,39 +949,39 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "issuerId": "./node_modules/@dojo/shim/Map.mjs", - "issuerName": "./node_modules/@dojo/shim/Map.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Map.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Map.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./object", "loc": "3:0-42" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "1:0-43" + "userRequest": "../shim/object", + "loc": "1:0-40" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "2:0-43" + "userRequest": "../shim/object", + "loc": "2:0-40" } ], "usedExports": [ @@ -1003,9 +1003,9 @@ "source": "import global from './global';\r\nimport has from './support/has';\r\nimport { isSymbol } from './Symbol';\r\nexport let assign;\r\n/**\r\n * Gets the own property descriptor of the specified object.\r\n * An own property descriptor is one that is defined directly on the object and is not\r\n * inherited from the object's prototype.\r\n * @param o Object that contains the property.\r\n * @param p Name of the property.\r\n */\r\nexport let getOwnPropertyDescriptor;\r\n/**\r\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\r\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\r\n * @param o Object that contains the own properties.\r\n */\r\nexport let getOwnPropertyNames;\r\n/**\r\n * Returns an array of all symbol properties found directly on object o.\r\n * @param o Object to retrieve the symbols from.\r\n */\r\nexport let getOwnPropertySymbols;\r\n/**\r\n * Returns true if the values are the same value, false otherwise.\r\n * @param value1 The first value.\r\n * @param value2 The second value.\r\n */\r\nexport let is;\r\n/**\r\n * Returns the names of the enumerable properties and methods of an object.\r\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\r\n */\r\nexport let keys;\r\n/* ES7 Object static methods */\r\nexport let getOwnPropertyDescriptors;\r\nexport let entries;\r\nexport let values;\r\nif (true) {\r\n const globalObject = global.Object;\r\n assign = globalObject.assign;\r\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\r\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\r\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\r\n is = globalObject.is;\r\n keys = globalObject.keys;\r\n}\r\nelse {\r\n keys = function symbolAwareKeys(o) {\r\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n assign = function assign(target, ...sources) {\r\n if (target == null) {\r\n // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n const to = Object(target);\r\n sources.forEach((nextSource) => {\r\n if (nextSource) {\r\n // Skip over if undefined or null\r\n keys(nextSource).forEach((nextKey) => {\r\n to[nextKey] = nextSource[nextKey];\r\n });\r\n }\r\n });\r\n return to;\r\n };\r\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\r\n if (isSymbol(prop)) {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n else {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n };\r\n getOwnPropertyNames = function getOwnPropertyNames(o) {\r\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\r\n return Object.getOwnPropertyNames(o)\r\n .filter((key) => Boolean(key.match(/^@@.+/)))\r\n .map((key) => Symbol.for(key.substring(2)));\r\n };\r\n is = function is(value1, value2) {\r\n if (value1 === value2) {\r\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\r\n }\r\n return value1 !== value1 && value2 !== value2; // NaN\r\n };\r\n}\r\nif (true) {\r\n const globalObject = global.Object;\r\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\r\n entries = globalObject.entries;\r\n values = globalObject.values;\r\n}\r\nelse {\r\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\r\n return getOwnPropertyNames(o).reduce((previous, key) => {\r\n previous[key] = getOwnPropertyDescriptor(o, key);\r\n return previous;\r\n }, {});\r\n };\r\n entries = function entries(o) {\r\n return keys(o).map((key) => [key, o[key]]);\r\n };\r\n values = function values(o) {\r\n return keys(o).map((key) => o[key]);\r\n };\r\n}\r\n//# sourceMappingURL=object.mjs.map" }, { - "id": "./node_modules/@dojo/shim/string.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "name": "./node_modules/@dojo/shim/string.mjs", + "id": "./node_modules/@dojo/framework/shim/string.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "name": "./node_modules/@dojo/framework/shim/string.mjs", "index": 17, "index2": 9, "size": 12714, @@ -1017,18 +1017,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "issuerId": "./node_modules/@dojo/shim/iterator.mjs", - "issuerName": "./node_modules/@dojo/shim/iterator.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/iterator.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./string", "loc": "2:0-66" @@ -1059,9 +1059,9 @@ "source": "import global from './global';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\n/**\r\n * The minimum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MIN = 0xd800;\r\n/**\r\n * The maximum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MAX = 0xdbff;\r\n/**\r\n * The minimum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MIN = 0xdc00;\r\n/**\r\n * The maximum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MAX = 0xdfff;\r\n/* ES6 static methods */\r\n/**\r\n * Return the String value whose elements are, in order, the elements in the List elements.\r\n * If length is 0, the empty string is returned.\r\n * @param codePoints The code points to generate the string\r\n */\r\nexport let fromCodePoint;\r\n/**\r\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\r\n * as such the first argument will be a well formed template call site object and the rest\r\n * parameter will contain the substitution values.\r\n * @param template A well-formed template string call site representation.\r\n * @param substitutions A set of substitution values.\r\n */\r\nexport let raw;\r\n/* ES6 instance methods */\r\n/**\r\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\r\n * value of the UTF-16 encoded code point starting at the string element at position pos in\r\n * the String resulting from converting this object to a String.\r\n * If there is no element at that position, the result is undefined.\r\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\r\n */\r\nexport let codePointAt;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * endPosition – length(this). Otherwise returns false.\r\n */\r\nexport let endsWith;\r\n/**\r\n * Returns true if searchString appears as a substring of the result of converting this\r\n * object to a String, at one or more positions that are\r\n * greater than or equal to position; otherwise, returns false.\r\n * @param target The target string\r\n * @param searchString search string\r\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\r\n */\r\nexport let includes;\r\n/**\r\n * Returns the String value result of normalizing the string into the normalization form\r\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\r\n * @param target The target string\r\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\r\n * is \"NFC\"\r\n */\r\nexport let normalize;\r\n/**\r\n * Returns a String value that is made from count copies appended together. If count is 0,\r\n * T is the empty String is returned.\r\n * @param count number of copies to append\r\n */\r\nexport let repeat;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * position. Otherwise returns false.\r\n */\r\nexport let startsWith;\r\n/* ES7 instance methods */\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the end (right) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padEnd;\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the start (left) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padStart;\r\nif (true && true) {\r\n fromCodePoint = global.String.fromCodePoint;\r\n raw = global.String.raw;\r\n codePointAt = wrapNative(global.String.prototype.codePointAt);\r\n endsWith = wrapNative(global.String.prototype.endsWith);\r\n includes = wrapNative(global.String.prototype.includes);\r\n normalize = wrapNative(global.String.prototype.normalize);\r\n repeat = wrapNative(global.String.prototype.repeat);\r\n startsWith = wrapNative(global.String.prototype.startsWith);\r\n}\r\nelse {\r\n /**\r\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\r\n * Used by startsWith, includes, and endsWith.\r\n *\r\n * @return Normalized position.\r\n */\r\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\r\n if (text == null) {\r\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\r\n }\r\n const length = text.length;\r\n position = position !== position ? (isEnd ? length : 0) : position;\r\n return [text, String(search), Math.min(Math.max(position, 0), length)];\r\n };\r\n fromCodePoint = function fromCodePoint(...codePoints) {\r\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\r\n const length = arguments.length;\r\n if (!length) {\r\n return '';\r\n }\r\n const fromCharCode = String.fromCharCode;\r\n const MAX_SIZE = 0x4000;\r\n let codeUnits = [];\r\n let index = -1;\r\n let result = '';\r\n while (++index < length) {\r\n let codePoint = Number(arguments[index]);\r\n // Code points must be finite integers within the valid range\r\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\r\n if (!isValid) {\r\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\r\n }\r\n if (codePoint <= 0xffff) {\r\n // BMP code point\r\n codeUnits.push(codePoint);\r\n }\r\n else {\r\n // Astral code point; split in surrogate halves\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n codePoint -= 0x10000;\r\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\r\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\r\n codeUnits.push(highSurrogate, lowSurrogate);\r\n }\r\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\r\n result += fromCharCode.apply(null, codeUnits);\r\n codeUnits.length = 0;\r\n }\r\n }\r\n return result;\r\n };\r\n raw = function raw(callSite, ...substitutions) {\r\n let rawStrings = callSite.raw;\r\n let result = '';\r\n let numSubstitutions = substitutions.length;\r\n if (callSite == null || callSite.raw == null) {\r\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\r\n }\r\n for (let i = 0, length = rawStrings.length; i < length; i++) {\r\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\r\n }\r\n return result;\r\n };\r\n codePointAt = function codePointAt(text, position = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\r\n if (text == null) {\r\n throw new TypeError('string.codePointAt requries a valid string.');\r\n }\r\n const length = text.length;\r\n if (position !== position) {\r\n position = 0;\r\n }\r\n if (position < 0 || position >= length) {\r\n return undefined;\r\n }\r\n // Get the first code unit\r\n const first = text.charCodeAt(position);\r\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\r\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n const second = text.charCodeAt(position + 1);\r\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\r\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\r\n }\r\n }\r\n return first;\r\n };\r\n endsWith = function endsWith(text, search, endPosition) {\r\n if (endPosition == null) {\r\n endPosition = text.length;\r\n }\r\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\r\n const start = endPosition - search.length;\r\n if (start < 0) {\r\n return false;\r\n }\r\n return text.slice(start, endPosition) === search;\r\n };\r\n includes = function includes(text, search, position = 0) {\r\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\r\n return text.indexOf(search, position) !== -1;\r\n };\r\n repeat = function repeat(text, count = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\r\n if (text == null) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (count !== count) {\r\n count = 0;\r\n }\r\n if (count < 0 || count === Infinity) {\r\n throw new RangeError('string.repeat requires a non-negative finite count.');\r\n }\r\n let result = '';\r\n while (count) {\r\n if (count % 2) {\r\n result += text;\r\n }\r\n if (count > 1) {\r\n text += text;\r\n }\r\n count >>= 1;\r\n }\r\n return result;\r\n };\r\n startsWith = function startsWith(text, search, position = 0) {\r\n search = String(search);\r\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\r\n const end = position + search.length;\r\n if (end > text.length) {\r\n return false;\r\n }\r\n return text.slice(position, end) === search;\r\n };\r\n}\r\nif (true) {\r\n padEnd = wrapNative(global.String.prototype.padEnd);\r\n padStart = wrapNative(global.String.prototype.padStart);\r\n}\r\nelse {\r\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padEnd requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText +=\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length);\r\n }\r\n return strText;\r\n };\r\n padStart = function padStart(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padStart requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText =\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length) +\r\n strText;\r\n }\r\n return strText;\r\n };\r\n}\r\n//# sourceMappingURL=string.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/has.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "name": "./node_modules/@dojo/shim/support/has.mjs", + "id": "./node_modules/@dojo/framework/shim/support/has.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "name": "./node_modules/@dojo/framework/shim/support/has.mjs", "index": 6, "index2": 5, "size": 6316, @@ -1073,81 +1073,81 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "3:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "1:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "4:0-32" + "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "2:0-32" + "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "./has", "loc": "2:0-24" @@ -1165,12 +1165,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import has, { add } from '@dojo/has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '@dojo/has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map" + "source": "import has, { add } from '../../has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '../../has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/queue.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "name": "./node_modules/@dojo/shim/support/queue.mjs", + "id": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "name": "./node_modules/@dojo/framework/shim/support/queue.mjs", "index": 23, "index2": 14, "size": 6381, @@ -1182,18 +1182,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "issuerId": "./node_modules/@dojo/shim/Promise.mjs", - "issuerName": "./node_modules/@dojo/shim/Promise.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Promise.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/queue", "loc": "2:0-49" @@ -1210,9 +1210,9 @@ "source": "import global from '../global';\r\nimport has from './has';\r\nfunction executeTask(item) {\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n}\r\nfunction getQueueHandle(item, destructor) {\r\n return {\r\n destroy: function () {\r\n this.destroy = function () { };\r\n item.isActive = false;\r\n item.callback = null;\r\n if (destructor) {\r\n destructor();\r\n }\r\n }\r\n };\r\n}\r\nlet checkMicroTaskQueue;\r\nlet microTasks;\r\n/**\r\n * Schedules a callback to the macrotask queue.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueTask = (function () {\r\n let destructor;\r\n let enqueue;\r\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\r\n if (true) {\r\n const queue = [];\r\n global.addEventListener('message', function (event) {\r\n // Confirm that the event was triggered by the current window and by this particular implementation.\r\n if (event.source === global && event.data === 'dojo-queue-message') {\r\n event.stopPropagation();\r\n if (queue.length) {\r\n executeTask(queue.shift());\r\n }\r\n }\r\n });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n global.postMessage('dojo-queue-message', '*');\r\n };\r\n }\r\n else if (false) {\r\n destructor = global.clearImmediate;\r\n enqueue = function (item) {\r\n return setImmediate(executeTask.bind(null, item));\r\n };\r\n }\r\n else {\r\n destructor = global.clearTimeout;\r\n enqueue = function (item) {\r\n return setTimeout(executeTask.bind(null, item), 0);\r\n };\r\n }\r\n function queueTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const id = enqueue(item);\r\n return getQueueHandle(item, destructor &&\r\n function () {\r\n destructor(id);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueTask(callback);\r\n };\r\n})();\r\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\r\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\r\nif (!true) {\r\n let isMicroTaskQueued = false;\r\n microTasks = [];\r\n checkMicroTaskQueue = function () {\r\n if (!isMicroTaskQueued) {\r\n isMicroTaskQueued = true;\r\n queueTask(function () {\r\n isMicroTaskQueued = false;\r\n if (microTasks.length) {\r\n let item;\r\n while ((item = microTasks.shift())) {\r\n executeTask(item);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n}\r\n/**\r\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\r\n *\r\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\r\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueAnimationTask = (function () {\r\n if (!true) {\r\n return queueTask;\r\n }\r\n function queueAnimationTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\r\n return getQueueHandle(item, function () {\r\n cancelAnimationFrame(rafId);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueAnimationTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueAnimationTask(callback);\r\n };\r\n})();\r\n/**\r\n * Schedules a callback to the microtask queue.\r\n *\r\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\r\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\r\n * registered with `queueTask` or `queueAnimationTask`.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport let queueMicroTask = (function () {\r\n let enqueue;\r\n if (false) {\r\n enqueue = function (item) {\r\n global.process.nextTick(executeTask.bind(null, item));\r\n };\r\n }\r\n else if (true) {\r\n enqueue = function (item) {\r\n global.Promise.resolve(item).then(executeTask);\r\n };\r\n }\r\n else if (true) {\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const node = document.createElement('div');\r\n const queue = [];\r\n const observer = new HostMutationObserver(function () {\r\n while (queue.length > 0) {\r\n const item = queue.shift();\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n }\r\n });\r\n observer.observe(node, { attributes: true });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n node.setAttribute('queueStatus', '1');\r\n };\r\n }\r\n else {\r\n enqueue = function (item) {\r\n checkMicroTaskQueue();\r\n microTasks.push(item);\r\n };\r\n }\r\n return function (callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n enqueue(item);\r\n return getQueueHandle(item);\r\n };\r\n})();\r\n//# sourceMappingURL=queue.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/util.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\util.mjs", - "name": "./node_modules/@dojo/shim/support/util.mjs", + "id": "./node_modules/@dojo/framework/shim/support/util.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\util.mjs", + "name": "./node_modules/@dojo/framework/shim/support/util.mjs", "index": 11, "index2": 6, "size": 853, @@ -1224,36 +1224,36 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "5:0-44" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-52" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-44" @@ -1272,12 +1272,12 @@ "source": "/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Injector.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Injector.mjs", - "name": "./node_modules/@dojo/widget-core/Injector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Injector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "index": 37, "index2": 31, - "size": 496, + "size": 493, "cacheable": true, "built": true, "optional": false, @@ -1286,18 +1286,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../Injector", "loc": "2:0-41" @@ -1312,15 +1312,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" + "source": "import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "name": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "index": 28, "index2": 22, - "size": 1134, + "size": 1128, "cacheable": true, "built": true, "optional": false, @@ -1329,18 +1329,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./NodeHandler", "loc": "7:0-40" @@ -1356,15 +1356,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\r\nimport Map from '@dojo/shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map" + "source": "import { Evented } from '../core/Evented';\r\nimport Map from '../shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Registry.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "name": "./node_modules/@dojo/widget-core/Registry.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "index": 21, "index2": 19, - "size": 3814, + "size": 3802, "cacheable": true, "built": true, "optional": false, @@ -1373,57 +1373,57 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\diff.mjs", - "module": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleName": "./node_modules/@dojo/widget-core/diff.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "type": "harmony import", + "userRequest": "../Registry", + "loc": "2:0-35" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\diff.mjs", + "module": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/diff.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "1:0-46" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "3:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "type": "harmony import", - "userRequest": "../Registry", - "loc": "2:0-35" } ], "usedExports": [ @@ -1441,15 +1441,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import Promise from '@dojo/shim/Promise';\r\nimport Map from '@dojo/shim/Map';\r\nimport Symbol from '@dojo/shim/Symbol';\r\nimport { Evented } from '@dojo/core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map" + "source": "import Promise from '../shim/Promise';\r\nimport Map from '../shim/Map';\r\nimport Symbol from '../shim/Symbol';\r\nimport { Evented } from '../core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "name": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "index": 27, "index2": 21, - "size": 2933, + "size": 2927, "cacheable": true, "built": true, "optional": false, @@ -1458,18 +1458,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./RegistryHandler", "loc": "6:0-48" @@ -1484,15 +1484,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Map } from '@dojo/shim/Map';\r\nimport { Evented } from '@dojo/core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map" + "source": "import { Map } from '../shim/Map';\r\nimport { Evented } from '../core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "name": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "id": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "name": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "index": 14, "index2": 26, - "size": 14386, + "size": 13720, "cacheable": true, "built": true, "optional": false, @@ -1501,18 +1501,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./WidgetBase", "loc": "2:0-50" @@ -1523,8 +1523,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/WidgetBase", - "loc": "5:0-58" + "userRequest": "@dojo/framework/widget-core/WidgetBase", + "loc": "5:0-68" } ], "usedExports": [ @@ -1538,12 +1538,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" + "source": "import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\animations\\cssTransitions.mjs", - "name": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", + "id": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\animations\\cssTransitions.mjs", + "name": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", "index": 33, "index2": 27, "size": 2288, @@ -1555,18 +1555,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "../animations/cssTransitions", "loc": "3:0-58" @@ -1583,12 +1583,12 @@ "source": "let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/d.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\d.mjs", - "name": "./node_modules/@dojo/widget-core/d.mjs", + "id": "./node_modules/@dojo/framework/widget-core/d.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\d.mjs", + "name": "./node_modules/@dojo/framework/widget-core/d.mjs", "index": 4, "index2": 8, - "size": 3270, + "size": 3267, "cacheable": true, "built": true, "optional": false, @@ -1597,54 +1597,54 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./d", "loc": "5:0-29" }, - { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "type": "harmony import", - "userRequest": "./d", - "loc": "4:0-24" - }, { "moduleId": "./src/menu/Menu.ts", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts", "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/d", - "loc": "2:0-40" + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "type": "harmony import", + "userRequest": "./d", + "loc": "4:0-24" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../d", "loc": "5:0-27" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./d", "loc": "3:0-65" @@ -1675,12 +1675,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" + "source": "import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\afterRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\afterRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "index": 34, "index2": 29, "size": 311, @@ -1692,18 +1692,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../decorators/afterRender", "loc": "4:0-58" @@ -1721,9 +1721,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function afterRender(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default afterRender;\n//# sourceMappingURL=afterRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "index": 41, "index2": 36, "size": 365, @@ -1735,18 +1735,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./decorators/alwaysRender", "loc": "8:0-57" @@ -1764,9 +1764,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\beforeProperties.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\beforeProperties.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "index": 39, "index2": 32, "size": 331, @@ -1778,27 +1778,27 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "issuerId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "2:0-54" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "3:0-54" @@ -1816,9 +1816,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "index": 12, "index2": 38, "size": 728, @@ -1843,8 +1843,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/decorators/customElement", - "loc": "3:0-75" + "userRequest": "@dojo/framework/widget-core/decorators/customElement", + "loc": "3:0-85" } ], "usedExports": [ @@ -1886,12 +1886,12 @@ "depth": 0 }, { - "id": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\diffProperty.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "index": 40, "index2": 34, - "size": 973, + "size": 1014, "cacheable": true, "built": true, "optional": false, @@ -1900,18 +1900,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/diffProperty", "loc": "5:0-60" @@ -1926,12 +1926,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" + "source": "import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\handleDecorator.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\handleDecorator.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", "index": 35, "index2": 28, "size": 512, @@ -1943,63 +1943,63 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/handleDecorator", "loc": "4:0-66" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\afterRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\afterRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "2:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\diffProperty.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\beforeProperties.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\beforeProperties.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" @@ -2017,9 +2017,9 @@ "source": "/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "index": 38, "index2": 33, "size": 1532, @@ -2031,18 +2031,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/inject", "loc": "3:0-48" @@ -2057,12 +2057,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" + "source": "import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/diff.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\diff.mjs", - "name": "./node_modules/@dojo/widget-core/diff.mjs", + "id": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\diff.mjs", + "name": "./node_modules/@dojo/framework/widget-core/diff.mjs", "index": 20, "index2": 20, "size": 1930, @@ -2074,30 +2074,39 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./diff", "loc": "5:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../diff", "loc": "6:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "type": "harmony import", + "userRequest": "./../diff", + "loc": "2:0-33" } ], "usedExports": [ @@ -2116,12 +2125,12 @@ "source": "import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "index": 32, "index2": 30, - "size": 5852, + "size": 5683, "cacheable": true, "built": true, "optional": false, @@ -2130,18 +2139,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Projector", "loc": "3:0-52" @@ -2158,15 +2167,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "index": 36, "index2": 35, - "size": 5320, + "size": 5157, "cacheable": true, "built": true, "optional": false, @@ -2175,18 +2184,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Themed", "loc": "7:0-56" @@ -2197,8 +2206,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/mixins/Themed", - "loc": "4:0-69" + "userRequest": "@dojo/framework/widget-core/mixins/Themed", + "loc": "4:0-79" } ], "usedExports": [ @@ -2215,15 +2224,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "name": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "index": 13, "index2": 37, - "size": 9124, + "size": 9118, "cacheable": true, "built": true, "optional": false, @@ -2245,14 +2254,14 @@ "module": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "moduleName": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "type": "cjs require", - "userRequest": "@dojo/widget-core/registerCustomElement", - "loc": "4:28-78" + "userRequest": "@dojo/framework/widget-core/registerCustomElement", + "loc": "4:28-88" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../registerCustomElement", "loc": "1:0-66" @@ -2268,15 +2277,15 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/vdom.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "name": "./node_modules/@dojo/widget-core/vdom.mjs", + "id": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "name": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "index": 29, "index2": 25, - "size": 39734, + "size": 40904, "cacheable": true, "built": true, "optional": false, @@ -2285,27 +2294,27 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./vdom", "loc": "8:0-43" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../vdom", "loc": "6:0-32" @@ -2324,7 +2333,7 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import global from '@dojo/shim/global';\r\nimport { from as arrayFrom } from '@dojo/shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '@dojo/shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode.focus();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (propName === 'focus') {\r\n focusNode(propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const rendered = dnode.rendered || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\r\n oldIndex++;\r\n newIndex++;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let child = oldChildren[oldIndex];\r\n if (child) {\r\n let nextIndex = oldIndex + 1;\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n if (insertBefore.rendered) {\r\n insertBeforeChildren.push(...insertBefore.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\r\n insertBeforeChildren.push(oldChildren[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map" + "source": "import global from '../shim/global';\r\nimport { from as arrayFrom } from '../shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '../shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst nextSiblingMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode[propName]();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (nodeOperations.indexOf(propName) !== -1) {\r\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const item = instanceMap.get(dnode.instance);\r\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n oldIndex++;\r\n newIndex++;\r\n textUpdated =\r\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let childrenArray = oldChildren;\r\n let nextIndex = oldIndex + 1;\r\n let child = oldChildren[oldIndex];\r\n if (!child) {\r\n child = siblings[0];\r\n nextIndex = 1;\r\n childrenArray = siblings;\r\n }\r\n if (child) {\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n const item = instanceMap.get(insertBefore.instance);\r\n if (item && item.dnode.rendered) {\r\n insertBeforeChildren.push(...item.dnode.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\r\n break;\r\n }\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\r\n insertBeforeChildren.push(childrenArray[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n const nextSiblings = children.slice(i + 1);\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n nextSiblingMap.set(instance, nextSiblings);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n nextSiblingMap.set(instance, nextSiblings);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const nextSiblings = nextSiblingMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map" }, { "id": "./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", @@ -2332,7 +2341,7 @@ "name": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "index": 1, "index2": 41, - "size": 277, + "size": 287, "cacheable": true, "built": true, "optional": false, @@ -2362,7 +2371,7 @@ "providedExports": null, "optimizationBailout": [], "depth": 1, - "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n" + "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n" }, { "id": "./node_modules/process/browser.js", @@ -2379,21 +2388,21 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "issuerId": "./node_modules/@dojo/has/has.mjs", - "issuerName": "./node_modules/@dojo/has/has.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "issuerId": "./node_modules/@dojo/framework/has/has.mjs", + "issuerName": "./node_modules/@dojo/framework/has/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "process", - "loc": "1:0-37" + "loc": "1:0-40" } ], "usedExports": true, @@ -2417,18 +2426,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -2443,19 +2452,19 @@ "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -2463,7 +2472,6 @@ ], "usedExports": [ "__decorate", - "__metadata", "__rest" ], "providedExports": [ @@ -2504,30 +2512,30 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "issuerId": "./node_modules/@dojo/shim/global.mjs", - "issuerName": "./node_modules/@dojo/shim/global.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/global.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/global.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/global.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "module": "./node_modules/@dojo/shim/global.mjs", - "moduleName": "./node_modules/@dojo/shim/global.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "module": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/global.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" }, { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" } ], "usedExports": true, @@ -2542,7 +2550,7 @@ "name": "./src/menu/Menu.ts", "index": 2, "index2": 40, - "size": 1462, + "size": 1502, "cacheable": true, "built": true, "optional": false, @@ -2575,7 +2583,7 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\r\nimport { v } from '@dojo/widget-core/d';\r\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\r\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\r\nimport * as css from './menu.m.css';\r\nlet Menu = class Menu extends ThemedMixin(WidgetBase) {\r\n _onSelected(id, data) {\r\n this._selectedId = id;\r\n this.properties.onSelected(data);\r\n this.invalidate();\r\n }\r\n render() {\r\n const items = this.children.map((child, index) => {\r\n if (child) {\r\n const properties = {\r\n onSelected: (data) => {\r\n this._onSelected(index, data);\r\n }\r\n };\r\n if (this._selectedId !== undefined) {\r\n properties.selected = index === this._selectedId;\r\n }\r\n child.properties = Object.assign({}, child.properties, properties);\r\n }\r\n return child;\r\n });\r\n return v('nav', { classes: this.theme(css.root) }, [\r\n v('ol', {\r\n classes: this.theme(css.menuContainer)\r\n }, items)\r\n ]);\r\n }\r\n};\r\nMenu = tslib_1.__decorate([\r\n customElement({\r\n tag: 'demo-menu',\r\n events: ['onSelected']\r\n }),\r\n theme(css)\r\n], Menu);\r\nexport { Menu };\r\nexport default Menu;\r\n" + "source": "import * as tslib_1 from \"tslib\";\r\nimport { v } from '@dojo/framework/widget-core/d';\r\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\r\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\r\nimport * as css from './menu.m.css';\r\nlet Menu = class Menu extends ThemedMixin(WidgetBase) {\r\n _onSelected(id, data) {\r\n this._selectedId = id;\r\n this.properties.onSelected(data);\r\n this.invalidate();\r\n }\r\n render() {\r\n const items = this.children.map((child, index) => {\r\n if (child) {\r\n const properties = {\r\n onSelected: (data) => {\r\n this._onSelected(index, data);\r\n }\r\n };\r\n if (this._selectedId !== undefined) {\r\n properties.selected = index === this._selectedId;\r\n }\r\n child.properties = Object.assign({}, child.properties, properties);\r\n }\r\n return child;\r\n });\r\n return v('nav', { classes: this.theme(css.root) }, [\r\n v('ol', {\r\n classes: this.theme(css.menuContainer)\r\n }, items)\r\n ]);\r\n }\r\n};\r\nMenu = tslib_1.__decorate([\r\n customElement({\r\n tag: 'demo-menu',\r\n events: ['onSelected']\r\n }),\r\n theme(css)\r\n], Menu);\r\nexport { Menu };\r\nexport default Menu;\r\n" }, { "id": "./src/menu/menu.m.css", @@ -2632,12 +2640,12 @@ ], "modules": [ { - "id": "./node_modules/@dojo/core/Destroyable.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "name": "./node_modules/@dojo/core/Destroyable.mjs", + "id": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "name": "./node_modules/@dojo/framework/core/Destroyable.mjs", "index": 25, "index2": 17, - "size": 1668, + "size": 1665, "cacheable": true, "built": true, "optional": false, @@ -2646,18 +2654,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "issuerId": "./node_modules/@dojo/core/Evented.mjs", - "issuerName": "./node_modules/@dojo/core/Evented.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "issuerId": "./node_modules/@dojo/framework/core/Evented.mjs", + "issuerName": "./node_modules/@dojo/framework/core/Evented.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", "userRequest": "./Destroyable", "loc": "2:0-44" @@ -2672,15 +2680,15 @@ ], "optimizationBailout": [], "depth": 6, - "source": "import { createCompositeHandle } from './lang';\nimport Promise from '@dojo/shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" + "source": "import { createCompositeHandle } from './lang';\nimport Promise from '../shim/Promise';\n/**\n * No operation function to replace own once instance is destoryed\n */\nfunction noop() {\n return Promise.resolve(false);\n}\n/**\n * No op function used to replace own, once instance has been destoryed\n */\nfunction destroyed() {\n throw new Error('Call made to destroyed method');\n}\nexport class Destroyable {\n /**\n * @constructor\n */\n constructor() {\n this.handles = [];\n }\n /**\n * Register handles for the instance that will be destroyed when `this.destroy` is called\n *\n * @param {Handle} handle The handle to add for the instance\n * @returns {Handle} a handle for the handle, removes the handle for the instance and calls destroy\n */\n own(handles) {\n const handle = Array.isArray(handles) ? createCompositeHandle(...handles) : handles;\n const { handles: _handles } = this;\n _handles.push(handle);\n return {\n destroy() {\n _handles.splice(_handles.indexOf(handle));\n handle.destroy();\n }\n };\n }\n /**\n * Destrpys all handers registered for the instance\n *\n * @returns {Promise {\n this.handles.forEach((handle) => {\n handle && handle.destroy && handle.destroy();\n });\n this.destroy = noop;\n this.own = destroyed;\n resolve(true);\n });\n }\n}\nexport default Destroyable;\n//# sourceMappingURL=Destroyable.mjs.map" }, { - "id": "./node_modules/@dojo/core/Evented.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "name": "./node_modules/@dojo/core/Evented.mjs", + "id": "./node_modules/@dojo/framework/core/Evented.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "name": "./node_modules/@dojo/framework/core/Evented.mjs", "index": 24, "index2": 18, - "size": 2220, + "size": 2222, "cacheable": true, "built": true, "optional": false, @@ -2689,48 +2697,48 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "issuerId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "issuerName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "2:0-45" + "userRequest": "../core/Evented", + "loc": "2:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "4:0-45" + "userRequest": "../core/Evented", + "loc": "4:0-42" }, { - "moduleId": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Injector.mjs", - "module": "./node_modules/@dojo/widget-core/Injector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Injector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Injector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/Evented", - "loc": "1:0-45" + "userRequest": "../core/Evented", + "loc": "1:0-42" } ], "usedExports": [ @@ -2743,15 +2751,15 @@ ], "optimizationBailout": [], "depth": 5, - "source": "import Map from '@dojo/shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n methods.forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map" + "source": "import Map from '../shim/Map';\r\nimport { Destroyable } from './Destroyable';\r\n/**\r\n * Map of computed regular expressions, keyed by string\r\n */\r\nconst regexMap = new Map();\r\n/**\r\n * Determines is the event type glob has been matched\r\n *\r\n * @returns boolean that indicates if the glob is matched\r\n */\r\nexport function isGlobMatch(globString, targetString) {\r\n if (typeof targetString === 'string' && typeof globString === 'string' && globString.indexOf('*') !== -1) {\r\n let regex;\r\n if (regexMap.has(globString)) {\r\n regex = regexMap.get(globString);\r\n }\r\n else {\r\n regex = new RegExp(`^${globString.replace(/\\*/g, '.*')}$`);\r\n regexMap.set(globString, regex);\r\n }\r\n return regex.test(targetString);\r\n }\r\n else {\r\n return globString === targetString;\r\n }\r\n}\r\n/**\r\n * Event Class\r\n */\r\nexport class Evented extends Destroyable {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * map of listeners keyed by event type\r\n */\r\n this.listenersMap = new Map();\r\n }\r\n emit(event) {\r\n this.listenersMap.forEach((methods, type) => {\r\n if (isGlobMatch(type, event.type)) {\r\n [...methods].forEach((method) => {\r\n method.call(this, event);\r\n });\r\n }\r\n });\r\n }\r\n on(type, listener) {\r\n if (Array.isArray(listener)) {\r\n const handles = listener.map((listener) => this._addListener(type, listener));\r\n return {\r\n destroy() {\r\n handles.forEach((handle) => handle.destroy());\r\n }\r\n };\r\n }\r\n return this._addListener(type, listener);\r\n }\r\n _addListener(type, listener) {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.push(listener);\r\n this.listenersMap.set(type, listeners);\r\n return {\r\n destroy: () => {\r\n const listeners = this.listenersMap.get(type) || [];\r\n listeners.splice(listeners.indexOf(listener), 1);\r\n }\r\n };\r\n }\r\n}\r\nexport default Evented;\r\n//# sourceMappingURL=Evented.mjs.map" }, { - "id": "./node_modules/@dojo/core/lang.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "name": "./node_modules/@dojo/core/lang.mjs", + "id": "./node_modules/@dojo/framework/core/lang.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "name": "./node_modules/@dojo/framework/core/lang.mjs", "index": 26, "index2": 16, - "size": 6843, + "size": 6837, "cacheable": true, "built": true, "optional": false, @@ -2760,27 +2768,27 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", - "userRequest": "@dojo/core/lang", + "userRequest": "../../core/lang", "loc": "2:0-41" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", "userRequest": "./lang", "loc": "1:0-47" @@ -2805,12 +2813,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { assign } from '@dojo/shim/object';\nexport { assign } from '@dojo/shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" + "source": "import { assign } from '../shim/object';\nexport { assign } from '../shim/object';\nconst slice = Array.prototype.slice;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Type guard that ensures that the value can be coerced to Object\n * to weed out host objects that do not derive from Object.\n * This function is used to check if we want to deep copy an object or not.\n * Note: In ES6 it is possible to modify an object's Symbol.toStringTag property, which will\n * change the value returned by `toString`. This is a rare edge case that is difficult to handle,\n * so it is not handled here.\n * @param value The value to check\n * @return If the value is coercible into an Object\n */\nfunction shouldDeepCopyObject(value) {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\nfunction copyArray(array, inherited) {\n return array.map(function (item) {\n if (Array.isArray(item)) {\n return copyArray(item, inherited);\n }\n return !shouldDeepCopyObject(item)\n ? item\n : _mixin({\n deep: true,\n inherited: inherited,\n sources: [item],\n target: {}\n });\n });\n}\nfunction _mixin(kwArgs) {\n const deep = kwArgs.deep;\n const inherited = kwArgs.inherited;\n const target = kwArgs.target;\n const copied = kwArgs.copied || [];\n const copiedClone = [...copied];\n for (let i = 0; i < kwArgs.sources.length; i++) {\n const source = kwArgs.sources[i];\n if (source === null || source === undefined) {\n continue;\n }\n for (let key in source) {\n if (inherited || hasOwnProperty.call(source, key)) {\n let value = source[key];\n if (copiedClone.indexOf(value) !== -1) {\n continue;\n }\n if (deep) {\n if (Array.isArray(value)) {\n value = copyArray(value, inherited);\n }\n else if (shouldDeepCopyObject(value)) {\n const targetValue = target[key] || {};\n copied.push(source);\n value = _mixin({\n deep: true,\n inherited: inherited,\n sources: [value],\n target: targetValue,\n copied\n });\n }\n }\n target[key] = value;\n }\n }\n }\n return target;\n}\nexport function create(prototype, ...mixins) {\n if (!mixins.length) {\n throw new RangeError('lang.create requires at least one mixin object.');\n }\n const args = mixins.slice();\n args.unshift(Object.create(prototype));\n return assign.apply(null, args);\n}\nexport function deepAssign(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: false,\n sources: sources,\n target: target\n });\n}\nexport function deepMixin(target, ...sources) {\n return _mixin({\n deep: true,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Creates a new object using the provided source's prototype as the prototype for the new object, and then\n * deep copies the provided source's values into the new target.\n *\n * @param source The object to duplicate\n * @return The new object\n */\nexport function duplicate(source) {\n const target = Object.create(Object.getPrototypeOf(source));\n return deepMixin(target, source);\n}\n/**\n * Determines whether two values are the same value.\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @return true if the values are the same; false otherwise\n */\nexport function isIdentical(a, b) {\n return (a === b ||\n /* both values are NaN */\n (a !== a && b !== b));\n}\n/**\n * Returns a function that binds a method to the specified object at runtime. This is similar to\n * `Function.prototype.bind`, but instead of a function it takes the name of a method on an object.\n * As a result, the function returned by `lateBind` will always call the function currently assigned to\n * the specified property on the object as of the moment the function it returns is called.\n *\n * @param instance The context object\n * @param method The name of the method on the context object to bind to itself\n * @param suppliedArgs An optional array of values to prepend to the `instance[method]` arguments list\n * @return The bound function\n */\nexport function lateBind(instance, method, ...suppliedArgs) {\n return suppliedArgs.length\n ? function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n // TS7017\n return instance[method].apply(instance, args);\n }\n : function () {\n // TS7017\n return instance[method].apply(instance, arguments);\n };\n}\nexport function mixin(target, ...sources) {\n return _mixin({\n deep: false,\n inherited: true,\n sources: sources,\n target: target\n });\n}\n/**\n * Returns a function which invokes the given function with the given arguments prepended to its argument list.\n * Like `Function.prototype.bind`, but does not alter execution context.\n *\n * @param targetFunction The function that needs to be bound\n * @param suppliedArgs An optional array of arguments to prepend to the `targetFunction` arguments list\n * @return The bound function\n */\nexport function partial(targetFunction, ...suppliedArgs) {\n return function () {\n const args = arguments.length ? suppliedArgs.concat(slice.call(arguments)) : suppliedArgs;\n return targetFunction.apply(this, args);\n };\n}\n/**\n * Returns an object with a destroy method that, when called, calls the passed-in destructor.\n * This is intended to provide a unified interface for creating \"remove\" / \"destroy\" handlers for\n * event listeners, timers, etc.\n *\n * @param destructor A function that will be called when the handle's `destroy` method is invoked\n * @return The handle object\n */\nexport function createHandle(destructor) {\n let called = false;\n return {\n destroy: function () {\n if (!called) {\n called = true;\n destructor();\n }\n }\n };\n}\n/**\n * Returns a single handle that can be used to destroy multiple handles simultaneously.\n *\n * @param handles An array of handles with `destroy` methods\n * @return The handle object\n */\nexport function createCompositeHandle(...handles) {\n return createHandle(function () {\n for (let i = 0; i < handles.length; i++) {\n handles[i].destroy();\n }\n });\n}\n//# sourceMappingURL=lang.mjs.map" }, { - "id": "./node_modules/@dojo/has/has.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "name": "./node_modules/@dojo/has/has.mjs", + "id": "./node_modules/@dojo/framework/has/has.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "name": "./node_modules/@dojo/framework/has/has.mjs", "index": 7, "index2": 3, "size": 6500, @@ -2822,29 +2830,29 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "issuerId": "./node_modules/@dojo/shim/support/has.mjs", - "issuerName": "./node_modules/@dojo/shim/support/has.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/support/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "1:0-41" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", - "userRequest": "@dojo/has/has", + "userRequest": "../../has/has", "loc": "4:0-30" } ], @@ -2866,9 +2874,9 @@ "source": "function isFeatureTestThenable(value) {\r\n return value && value.then;\r\n}\r\n/**\r\n * A cache of results of feature tests\r\n */\r\nexport const testCache = {};\r\n/**\r\n * A cache of the un-resolved feature tests\r\n */\r\nexport const testFunctions = {};\r\n/**\r\n * A cache of unresolved thenables (probably promises)\r\n * @type {{}}\r\n */\r\nconst testThenables = {};\r\n/**\r\n * A reference to the global scope (`window` in a browser, `global` in NodeJS)\r\n */\r\nconst globalScope = (function () {\r\n /* istanbul ignore else */\r\n if (typeof window !== 'undefined') {\r\n // Browsers\r\n return window;\r\n }\r\n else if (typeof global !== 'undefined') {\r\n // Node\r\n return global;\r\n }\r\n else if (typeof self !== 'undefined') {\r\n // Web workers\r\n return self;\r\n }\r\n /* istanbul ignore next */\r\n return {};\r\n})();\r\n/* Grab the staticFeatures if there are available */\r\nconst { staticFeatures } = globalScope.DojoHasEnvironment || {};\r\n/* Cleaning up the DojoHasEnviornment */\r\nif ('DojoHasEnvironment' in globalScope) {\r\n delete globalScope.DojoHasEnvironment;\r\n}\r\n/**\r\n * Custom type guard to narrow the `staticFeatures` to either a map or a function that\r\n * returns a map.\r\n *\r\n * @param value The value to guard for\r\n */\r\nfunction isStaticFeatureFunction(value) {\r\n return typeof value === 'function';\r\n}\r\n/**\r\n * The cache of asserted features that were available in the global scope when the\r\n * module loaded\r\n */\r\nconst staticCache = staticFeatures\r\n ? isStaticFeatureFunction(staticFeatures) ? staticFeatures.apply(globalScope) : staticFeatures\r\n : {}; /* Providing an empty cache, if none was in the environment\r\n\r\n/**\r\n* AMD plugin function.\r\n*\r\n* Conditional loads modules based on a has feature test value.\r\n*\r\n* @param resourceId Gives the resolved module id to load.\r\n* @param require The loader require function with respect to the module that contained the plugin resource in its\r\n* dependency list.\r\n* @param load Callback to loader that consumes result of plugin demand.\r\n*/\r\nexport function load(resourceId, require, load, config) {\r\n resourceId ? require([resourceId], load) : load();\r\n}\r\n/**\r\n * AMD plugin function.\r\n *\r\n * Resolves resourceId into a module id based on possibly-nested tenary expression that branches on has feature test\r\n * value(s).\r\n *\r\n * @param resourceId The id of the module\r\n * @param normalize Resolves a relative module id into an absolute module id\r\n */\r\nexport function normalize(resourceId, normalize) {\r\n const tokens = resourceId.match(/[\\?:]|[^:\\?]*/g) || [];\r\n let i = 0;\r\n function get(skip) {\r\n const term = tokens[i++];\r\n if (term === ':') {\r\n // empty string module name, resolves to null\r\n return null;\r\n }\r\n else {\r\n // postfixed with a ? means it is a feature to branch on, the term is the name of the feature\r\n if (tokens[i++] === '?') {\r\n if (!skip && has(term)) {\r\n // matched the feature, get the first value from the options\r\n return get();\r\n }\r\n else {\r\n // did not match, get the second value, passing over the first\r\n get(true);\r\n return get(skip);\r\n }\r\n }\r\n // a module\r\n return term;\r\n }\r\n }\r\n const id = get();\r\n return id && normalize(id);\r\n}\r\n/**\r\n * Check if a feature has already been registered\r\n *\r\n * @param feature the name of the feature\r\n */\r\nexport function exists(feature) {\r\n const normalizedFeature = feature.toLowerCase();\r\n return Boolean(normalizedFeature in staticCache || normalizedFeature in testCache || testFunctions[normalizedFeature]);\r\n}\r\n/**\r\n * Register a new test for a named feature.\r\n *\r\n * @example\r\n * has.add('dom-addeventlistener', !!document.addEventListener);\r\n *\r\n * @example\r\n * has.add('touch-events', function () {\r\n * return 'ontouchstart' in document\r\n * });\r\n *\r\n * @param feature the name of the feature\r\n * @param value the value reported of the feature, or a function that will be executed once on first test\r\n * @param overwrite if an existing value should be overwritten. Defaults to false.\r\n */\r\nexport function add(feature, value, overwrite = false) {\r\n const normalizedFeature = feature.toLowerCase();\r\n if (exists(normalizedFeature) && !overwrite && !(normalizedFeature in staticCache)) {\r\n throw new TypeError(`Feature \"${feature}\" exists and overwrite not true.`);\r\n }\r\n if (typeof value === 'function') {\r\n testFunctions[normalizedFeature] = value;\r\n }\r\n else if (isFeatureTestThenable(value)) {\r\n testThenables[feature] = value.then((resolvedValue) => {\r\n testCache[feature] = resolvedValue;\r\n delete testThenables[feature];\r\n }, () => {\r\n delete testThenables[feature];\r\n });\r\n }\r\n else {\r\n testCache[normalizedFeature] = value;\r\n delete testFunctions[normalizedFeature];\r\n }\r\n}\r\n/**\r\n * Return the current value of a named feature.\r\n *\r\n * @param feature The name (if a string) or identifier (if an integer) of the feature to test.\r\n */\r\nexport default function has(feature) {\r\n let result;\r\n const normalizedFeature = feature.toLowerCase();\r\n if (normalizedFeature in staticCache) {\r\n result = staticCache[normalizedFeature];\r\n }\r\n else if (testFunctions[normalizedFeature]) {\r\n result = testCache[normalizedFeature] = testFunctions[normalizedFeature].call(null);\r\n delete testFunctions[normalizedFeature];\r\n }\r\n else if (normalizedFeature in testCache) {\r\n result = testCache[normalizedFeature];\r\n }\r\n else if (feature in testThenables) {\r\n return false;\r\n }\r\n else {\r\n throw new TypeError(`Attempt to detect unregistered has feature \"${feature}\"`);\r\n }\r\n return result;\r\n}\r\n/*\r\n * Out of the box feature tests\r\n */\r\n/* Environments */\r\n/* Used as a value to provide a debug only code path */\r\nadd('debug', true);\r\n/* Detects if the environment is \"browser like\" */\r\nadd('host-browser', typeof document !== 'undefined' && typeof location !== 'undefined');\r\n/* Detects if the environment appears to be NodeJS */\r\nadd('host-node', function () {\r\n if (typeof process === 'object' && process.versions && process.versions.node) {\r\n return process.versions.node;\r\n }\r\n});\r\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Map.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "name": "./node_modules/@dojo/shim/Map.mjs", + "id": "./node_modules/@dojo/framework/shim/Map.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "name": "./node_modules/@dojo/framework/shim/Map.mjs", "index": 15, "index2": 12, "size": 3426, @@ -2880,57 +2888,57 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-37" + "userRequest": "../shim/Map", + "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "2:0-33" + "userRequest": "../shim/Map", + "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/core/Evented.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Evented.mjs", - "module": "./node_modules/@dojo/core/Evented.mjs", - "moduleName": "./node_modules/@dojo/core/Evented.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Evented.mjs", + "module": "./node_modules/@dojo/framework/core/Evented.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Evented.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Map", - "loc": "1:0-33" + "userRequest": "../shim/Map", + "loc": "1:0-30" } ], "usedExports": [ @@ -2946,9 +2954,9 @@ "source": "import { isArrayLike, ShimIterator } from './iterator';\r\nimport global from './global';\r\nimport { is as objectIs } from './object';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let Map = global.Map;\r\nif (!true) {\r\n Map = (_a = class Map {\r\n constructor(iterable) {\r\n this._keys = [];\r\n this._values = [];\r\n this[Symbol.toStringTag] = 'Map';\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const value = iterable[i];\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n else {\r\n for (const value of iterable) {\r\n this.set(value[0], value[1]);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * An alternative to Array.prototype.indexOf using Object.is\r\n * to check for equality. See http://mzl.la/1zuKO2V\r\n */\r\n _indexOfKey(keys, key) {\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n if (objectIs(keys[i], key)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n get size() {\r\n return this._keys.length;\r\n }\r\n clear() {\r\n this._keys.length = this._values.length = 0;\r\n }\r\n delete(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._keys.splice(index, 1);\r\n this._values.splice(index, 1);\r\n return true;\r\n }\r\n entries() {\r\n const values = this._keys.map((key, i) => {\r\n return [key, this._values[i]];\r\n });\r\n return new ShimIterator(values);\r\n }\r\n forEach(callback, context) {\r\n const keys = this._keys;\r\n const values = this._values;\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n callback.call(context, values[i], keys[i], this);\r\n }\r\n }\r\n get(key) {\r\n const index = this._indexOfKey(this._keys, key);\r\n return index < 0 ? undefined : this._values[index];\r\n }\r\n has(key) {\r\n return this._indexOfKey(this._keys, key) > -1;\r\n }\r\n keys() {\r\n return new ShimIterator(this._keys);\r\n }\r\n set(key, value) {\r\n let index = this._indexOfKey(this._keys, key);\r\n index = index < 0 ? this._keys.length : index;\r\n this._keys[index] = key;\r\n this._values[index] = value;\r\n return this;\r\n }\r\n values() {\r\n return new ShimIterator(this._values);\r\n }\r\n [Symbol.iterator]() {\r\n return this.entries();\r\n }\r\n },\r\n _a[Symbol.species] = _a,\r\n _a);\r\n}\r\nexport default Map;\r\nvar _a;\r\n//# sourceMappingURL=Map.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Promise.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "name": "./node_modules/@dojo/shim/Promise.mjs", + "id": "./node_modules/@dojo/framework/shim/Promise.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "name": "./node_modules/@dojo/framework/shim/Promise.mjs", "index": 22, "index2": 15, "size": 8717, @@ -2960,30 +2968,30 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "issuerId": "./node_modules/@dojo/widget-core/Registry.mjs", - "issuerName": "./node_modules/@dojo/widget-core/Registry.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "1:0-41" + "userRequest": "../shim/Promise", + "loc": "1:0-38" }, { - "moduleId": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\Destroyable.mjs", - "module": "./node_modules/@dojo/core/Destroyable.mjs", - "moduleName": "./node_modules/@dojo/core/Destroyable.mjs", + "moduleId": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\Destroyable.mjs", + "module": "./node_modules/@dojo/framework/core/Destroyable.mjs", + "moduleName": "./node_modules/@dojo/framework/core/Destroyable.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Promise", - "loc": "2:0-41" + "userRequest": "../shim/Promise", + "loc": "2:0-38" } ], "usedExports": [ @@ -2999,9 +3007,9 @@ "source": "import global from './global';\r\nimport { queueMicroTask } from './support/queue';\r\nimport './Symbol';\r\nimport has from './support/has';\r\nexport let ShimPromise = global.Promise;\r\nexport const isThenable = function isThenable(value) {\r\n return value && typeof value.then === 'function';\r\n};\r\nif (!true) {\r\n global.Promise = ShimPromise = (_a = class Promise {\r\n /**\r\n * Creates a new Promise.\r\n *\r\n * @constructor\r\n *\r\n * @param executor\r\n * The executor function is called immediately when the Promise is instantiated. It is responsible for\r\n * starting the asynchronous operation when it is invoked.\r\n *\r\n * The executor must call either the passed `resolve` function when the asynchronous operation has completed\r\n * successfully, or the `reject` function when the operation fails.\r\n */\r\n constructor(executor) {\r\n /**\r\n * The current state of this promise.\r\n */\r\n this.state = 1 /* Pending */;\r\n this[Symbol.toStringTag] = 'Promise';\r\n /**\r\n * If true, the resolution of this promise is chained (\"locked in\") to another promise.\r\n */\r\n let isChained = false;\r\n /**\r\n * Whether or not this promise is in a resolved state.\r\n */\r\n const isResolved = () => {\r\n return this.state !== 1 /* Pending */ || isChained;\r\n };\r\n /**\r\n * Callbacks that should be invoked once the asynchronous operation has completed.\r\n */\r\n let callbacks = [];\r\n /**\r\n * Initially pushes callbacks onto a queue for execution once this promise settles. After the promise settles,\r\n * enqueues callbacks for execution on the next event loop turn.\r\n */\r\n let whenFinished = function (callback) {\r\n if (callbacks) {\r\n callbacks.push(callback);\r\n }\r\n };\r\n /**\r\n * Settles this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const settle = (newState, value) => {\r\n // A promise can only be settled once.\r\n if (this.state !== 1 /* Pending */) {\r\n return;\r\n }\r\n this.state = newState;\r\n this.resolvedValue = value;\r\n whenFinished = queueMicroTask;\r\n // Only enqueue a callback runner if there are callbacks so that initially fulfilled Promises don't have to\r\n // wait an extra turn.\r\n if (callbacks && callbacks.length > 0) {\r\n queueMicroTask(function () {\r\n if (callbacks) {\r\n let count = callbacks.length;\r\n for (let i = 0; i < count; ++i) {\r\n callbacks[i].call(null);\r\n }\r\n callbacks = null;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Resolves this promise.\r\n *\r\n * @param newState The resolved state for this promise.\r\n * @param {T|any} value The resolved value for this promise.\r\n */\r\n const resolve = (newState, value) => {\r\n if (isResolved()) {\r\n return;\r\n }\r\n if (isThenable(value)) {\r\n value.then(settle.bind(null, 0 /* Fulfilled */), settle.bind(null, 2 /* Rejected */));\r\n isChained = true;\r\n }\r\n else {\r\n settle(newState, value);\r\n }\r\n };\r\n this.then = (onFulfilled, onRejected) => {\r\n return new Promise((resolve, reject) => {\r\n // whenFinished initially queues up callbacks for execution after the promise has settled. Once the\r\n // promise has settled, whenFinished will schedule callbacks for execution on the next turn through the\r\n // event loop.\r\n whenFinished(() => {\r\n const callback = this.state === 2 /* Rejected */ ? onRejected : onFulfilled;\r\n if (typeof callback === 'function') {\r\n try {\r\n resolve(callback(this.resolvedValue));\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n else if (this.state === 2 /* Rejected */) {\r\n reject(this.resolvedValue);\r\n }\r\n else {\r\n resolve(this.resolvedValue);\r\n }\r\n });\r\n });\r\n };\r\n try {\r\n executor(resolve.bind(null, 0 /* Fulfilled */), resolve.bind(null, 2 /* Rejected */));\r\n }\r\n catch (error) {\r\n settle(2 /* Rejected */, error);\r\n }\r\n }\r\n static all(iterable) {\r\n return new this(function (resolve, reject) {\r\n const values = [];\r\n let complete = 0;\r\n let total = 0;\r\n let populating = true;\r\n function fulfill(index, value) {\r\n values[index] = value;\r\n ++complete;\r\n finish();\r\n }\r\n function finish() {\r\n if (populating || complete < total) {\r\n return;\r\n }\r\n resolve(values);\r\n }\r\n function processItem(index, item) {\r\n ++total;\r\n if (isThenable(item)) {\r\n // If an item Promise rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(fulfill.bind(null, index), reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(fulfill.bind(null, index));\r\n }\r\n }\r\n let i = 0;\r\n for (const value of iterable) {\r\n processItem(i, value);\r\n i++;\r\n }\r\n populating = false;\r\n finish();\r\n });\r\n }\r\n static race(iterable) {\r\n return new this(function (resolve, reject) {\r\n for (const item of iterable) {\r\n if (item instanceof Promise) {\r\n // If a Promise item rejects, this Promise is immediately rejected with the item\r\n // Promise's rejection error.\r\n item.then(resolve, reject);\r\n }\r\n else {\r\n Promise.resolve(item).then(resolve);\r\n }\r\n }\r\n });\r\n }\r\n static reject(reason) {\r\n return new this(function (resolve, reject) {\r\n reject(reason);\r\n });\r\n }\r\n static resolve(value) {\r\n return new this(function (resolve) {\r\n resolve(value);\r\n });\r\n }\r\n catch(onRejected) {\r\n return this.then(undefined, onRejected);\r\n }\r\n },\r\n _a[Symbol.species] = ShimPromise,\r\n _a);\r\n}\r\nexport default ShimPromise;\r\nvar _a;\r\n//# sourceMappingURL=Promise.mjs.map" }, { - "id": "./node_modules/@dojo/shim/Symbol.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "name": "./node_modules/@dojo/shim/Symbol.mjs", + "id": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "name": "./node_modules/@dojo/framework/shim/Symbol.mjs", "index": 5, "index2": 7, "size": 6073, @@ -3013,84 +3021,84 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/d.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\d.mjs", - "module": "./node_modules/@dojo/widget-core/d.mjs", - "moduleName": "./node_modules/@dojo/widget-core/d.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "1:0-39" + "userRequest": "../shim/Symbol", + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\d.mjs", + "module": "./node_modules/@dojo/framework/widget-core/d.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/d.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/Symbol", - "loc": "3:0-39" + "userRequest": "../shim/Symbol", + "loc": "1:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "5:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "4:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "type": "harmony import", + "userRequest": "../shim/Symbol", + "loc": "3:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./Symbol", "loc": "1:0-18" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./Symbol", - "loc": "3:0-18" + "loc": "3:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./Symbol", - "loc": "3:0-36" + "loc": "3:0-18" } ], "usedExports": [ @@ -3106,9 +3114,9 @@ "source": "import has from './support/has';\r\nimport global from './global';\r\nimport { getValueDescriptor } from './support/util';\r\nexport let Symbol = global.Symbol;\r\nif (!true) {\r\n /**\r\n * Throws if the value is not a symbol, used internally within the Shim\r\n * @param {any} value The value to check\r\n * @return {symbol} Returns the symbol or throws\r\n */\r\n const validateSymbol = function validateSymbol(value) {\r\n if (!isSymbol(value)) {\r\n throw new TypeError(value + ' is not a symbol');\r\n }\r\n return value;\r\n };\r\n const defineProperties = Object.defineProperties;\r\n const defineProperty = Object.defineProperty;\r\n const create = Object.create;\r\n const objPrototype = Object.prototype;\r\n const globalSymbols = {};\r\n const getSymbolName = (function () {\r\n const created = create(null);\r\n return function (desc) {\r\n let postfix = 0;\r\n let name;\r\n while (created[String(desc) + (postfix || '')]) {\r\n ++postfix;\r\n }\r\n desc += String(postfix || '');\r\n created[desc] = true;\r\n name = '@@' + desc;\r\n // FIXME: Temporary guard until the duplicate execution when testing can be\r\n // pinned down.\r\n if (!Object.getOwnPropertyDescriptor(objPrototype, name)) {\r\n defineProperty(objPrototype, name, {\r\n set: function (value) {\r\n defineProperty(this, name, getValueDescriptor(value));\r\n }\r\n });\r\n }\r\n return name;\r\n };\r\n })();\r\n const InternalSymbol = function Symbol(description) {\r\n if (this instanceof InternalSymbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n return Symbol(description);\r\n };\r\n Symbol = global.Symbol = function Symbol(description) {\r\n if (this instanceof Symbol) {\r\n throw new TypeError('TypeError: Symbol is not a constructor');\r\n }\r\n const sym = Object.create(InternalSymbol.prototype);\r\n description = description === undefined ? '' : String(description);\r\n return defineProperties(sym, {\r\n __description__: getValueDescriptor(description),\r\n __name__: getValueDescriptor(getSymbolName(description))\r\n });\r\n };\r\n /* Decorate the Symbol function with the appropriate properties */\r\n defineProperty(Symbol, 'for', getValueDescriptor(function (key) {\r\n if (globalSymbols[key]) {\r\n return globalSymbols[key];\r\n }\r\n return (globalSymbols[key] = Symbol(String(key)));\r\n }));\r\n defineProperties(Symbol, {\r\n keyFor: getValueDescriptor(function (sym) {\r\n let key;\r\n validateSymbol(sym);\r\n for (key in globalSymbols) {\r\n if (globalSymbols[key] === sym) {\r\n return key;\r\n }\r\n }\r\n }),\r\n hasInstance: getValueDescriptor(Symbol.for('hasInstance'), false, false),\r\n isConcatSpreadable: getValueDescriptor(Symbol.for('isConcatSpreadable'), false, false),\r\n iterator: getValueDescriptor(Symbol.for('iterator'), false, false),\r\n match: getValueDescriptor(Symbol.for('match'), false, false),\r\n observable: getValueDescriptor(Symbol.for('observable'), false, false),\r\n replace: getValueDescriptor(Symbol.for('replace'), false, false),\r\n search: getValueDescriptor(Symbol.for('search'), false, false),\r\n species: getValueDescriptor(Symbol.for('species'), false, false),\r\n split: getValueDescriptor(Symbol.for('split'), false, false),\r\n toPrimitive: getValueDescriptor(Symbol.for('toPrimitive'), false, false),\r\n toStringTag: getValueDescriptor(Symbol.for('toStringTag'), false, false),\r\n unscopables: getValueDescriptor(Symbol.for('unscopables'), false, false)\r\n });\r\n /* Decorate the InternalSymbol object */\r\n defineProperties(InternalSymbol.prototype, {\r\n constructor: getValueDescriptor(Symbol),\r\n toString: getValueDescriptor(function () {\r\n return this.__name__;\r\n }, false, false)\r\n });\r\n /* Decorate the Symbol.prototype */\r\n defineProperties(Symbol.prototype, {\r\n toString: getValueDescriptor(function () {\r\n return 'Symbol (' + validateSymbol(this).__description__ + ')';\r\n }),\r\n valueOf: getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n })\r\n });\r\n defineProperty(Symbol.prototype, Symbol.toPrimitive, getValueDescriptor(function () {\r\n return validateSymbol(this);\r\n }));\r\n defineProperty(Symbol.prototype, Symbol.toStringTag, getValueDescriptor('Symbol', false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toPrimitive, getValueDescriptor(Symbol.prototype[Symbol.toPrimitive], false, false, true));\r\n defineProperty(InternalSymbol.prototype, Symbol.toStringTag, getValueDescriptor(Symbol.prototype[Symbol.toStringTag], false, false, true));\r\n}\r\n/**\r\n * A custom guard function that determines if an object is a symbol or not\r\n * @param {any} value The value to check to see if it is a symbol or not\r\n * @return {is symbol} Returns true if a symbol or not (and narrows the type guard)\r\n */\r\nexport function isSymbol(value) {\r\n return (value && (typeof value === 'symbol' || value['@@toStringTag'] === 'Symbol')) || false;\r\n}\r\n/**\r\n * Fill any missing well known symbols if the native Symbol is missing them\r\n */\r\n[\r\n 'hasInstance',\r\n 'isConcatSpreadable',\r\n 'iterator',\r\n 'species',\r\n 'replace',\r\n 'search',\r\n 'split',\r\n 'match',\r\n 'toPrimitive',\r\n 'toStringTag',\r\n 'unscopables',\r\n 'observable'\r\n].forEach((wellKnown) => {\r\n if (!Symbol[wellKnown]) {\r\n Object.defineProperty(Symbol, wellKnown, getValueDescriptor(Symbol.for(wellKnown), false, false));\r\n }\r\n});\r\nexport default Symbol;\r\n//# sourceMappingURL=Symbol.mjs.map" }, { - "id": "./node_modules/@dojo/shim/WeakMap.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "name": "./node_modules/@dojo/shim/WeakMap.mjs", + "id": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "name": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "index": 19, "index2": 13, "size": 3858, @@ -3120,38 +3128,38 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "2:0-41" + "userRequest": "../shim/WeakMap", + "loc": "2:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", - "loc": "5:0-41" + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/WeakMap", + "userRequest": "../../shim/WeakMap", "loc": "1:0-41" } ], @@ -3167,9 +3175,9 @@ "source": "import global from './global';\r\nimport { isArrayLike } from './iterator';\r\nimport has from './support/has';\r\nimport './Symbol';\r\nexport let WeakMap = global.WeakMap;\r\nif (!true) {\r\n const DELETED = {};\r\n const getUID = function getUID() {\r\n return Math.floor(Math.random() * 100000000);\r\n };\r\n const generateName = (function () {\r\n let startId = Math.floor(Date.now() % 100000000);\r\n return function generateName() {\r\n return '__wm' + getUID() + (startId++ + '__');\r\n };\r\n })();\r\n WeakMap = class WeakMap {\r\n constructor(iterable) {\r\n this[Symbol.toStringTag] = 'WeakMap';\r\n this._name = generateName();\r\n this._frozenEntries = [];\r\n if (iterable) {\r\n if (isArrayLike(iterable)) {\r\n for (let i = 0; i < iterable.length; i++) {\r\n const item = iterable[i];\r\n this.set(item[0], item[1]);\r\n }\r\n }\r\n else {\r\n for (const [key, value] of iterable) {\r\n this.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n _getFrozenEntryIndex(key) {\r\n for (let i = 0; i < this._frozenEntries.length; i++) {\r\n if (this._frozenEntries[i].key === key) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n delete(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n entry.value = DELETED;\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n this._frozenEntries.splice(frozenIndex, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n get(key) {\r\n if (key === undefined || key === null) {\r\n return undefined;\r\n }\r\n const entry = key[this._name];\r\n if (entry && entry.key === key && entry.value !== DELETED) {\r\n return entry.value;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return this._frozenEntries[frozenIndex].value;\r\n }\r\n }\r\n has(key) {\r\n if (key === undefined || key === null) {\r\n return false;\r\n }\r\n const entry = key[this._name];\r\n if (Boolean(entry && entry.key === key && entry.value !== DELETED)) {\r\n return true;\r\n }\r\n const frozenIndex = this._getFrozenEntryIndex(key);\r\n if (frozenIndex >= 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n set(key, value) {\r\n if (!key || (typeof key !== 'object' && typeof key !== 'function')) {\r\n throw new TypeError('Invalid value used as weak map key');\r\n }\r\n let entry = key[this._name];\r\n if (!entry || entry.key !== key) {\r\n entry = Object.create(null, {\r\n key: { value: key }\r\n });\r\n if (Object.isFrozen(key)) {\r\n this._frozenEntries.push(entry);\r\n }\r\n else {\r\n Object.defineProperty(key, this._name, {\r\n value: entry\r\n });\r\n }\r\n }\r\n entry.value = value;\r\n return this;\r\n }\r\n };\r\n}\r\nexport default WeakMap;\r\n//# sourceMappingURL=WeakMap.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\afterRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\afterRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "index": 34, "index2": 29, "size": 311, @@ -3181,18 +3189,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../decorators/afterRender", "loc": "4:0-58" @@ -3237,9 +3245,9 @@ "depth": 0 }, { - "id": "./node_modules/@dojo/shim/array.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "name": "./node_modules/@dojo/shim/array.mjs", + "id": "./node_modules/@dojo/framework/shim/array.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "name": "./node_modules/@dojo/framework/shim/array.mjs", "index": 30, "index2": 24, "size": 9175, @@ -3251,30 +3259,30 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "4:0-40" + "userRequest": "../shim/array", + "loc": "4:0-37" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/array", - "loc": "2:0-53" + "userRequest": "../shim/array", + "loc": "2:0-50" } ], "usedExports": [ @@ -3294,9 +3302,9 @@ "source": "import global from './global';\r\nimport { isArrayLike, isIterable } from './iterator';\r\nimport { MAX_SAFE_INTEGER } from './number';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\nexport let from;\r\n/**\r\n * Creates a new array from the function parameters.\r\n *\r\n * @param arguments Any number of arguments for the array\r\n * @return An array from the given arguments\r\n */\r\nexport let of;\r\n/* ES6 Array instance methods */\r\n/**\r\n * Copies data internally within an array or array-like object.\r\n *\r\n * @param target The target array-like object\r\n * @param offset The index to start copying values to; if negative, it counts backwards from length\r\n * @param start The first (inclusive) index to copy; if negative, it counts backwards from length\r\n * @param end The last (exclusive) index to copy; if negative, it counts backwards from length\r\n * @return The target\r\n */\r\nexport let copyWithin;\r\n/**\r\n * Fills elements of an array-like object with the specified value.\r\n *\r\n * @param target The target to fill\r\n * @param value The value to fill each element of the target with\r\n * @param start The first index to fill\r\n * @param end The (exclusive) index at which to stop filling\r\n * @return The filled target\r\n */\r\nexport let fill;\r\n/**\r\n * Finds and returns the first instance matching the callback or undefined if one is not found.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning if the current value matches a criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first element matching the callback, or undefined if one does not exist\r\n */\r\nexport let find;\r\n/**\r\n * Performs a linear search and returns the first index whose value satisfies the passed callback,\r\n * or -1 if no values satisfy it.\r\n *\r\n * @param target An array-like object\r\n * @param callback A function returning true if the current value satisfies its criteria\r\n * @param thisArg The execution context for the find function\r\n * @return The first index whose value satisfies the passed callback, or -1 if no values satisfy it\r\n */\r\nexport let findIndex;\r\n/* ES7 Array instance methods */\r\n/**\r\n * Determines whether an array includes a given value\r\n *\r\n * @param target the target array-like object\r\n * @param searchElement the item to search for\r\n * @param fromIndex the starting index to search from\r\n * @return `true` if the array includes the element, otherwise `false`\r\n */\r\nexport let includes;\r\nif (true && true) {\r\n from = global.Array.from;\r\n of = global.Array.of;\r\n copyWithin = wrapNative(global.Array.prototype.copyWithin);\r\n fill = wrapNative(global.Array.prototype.fill);\r\n find = wrapNative(global.Array.prototype.find);\r\n findIndex = wrapNative(global.Array.prototype.findIndex);\r\n}\r\nelse {\r\n // It is only older versions of Safari/iOS that have a bad fill implementation and so aren't in the wild\r\n // To make things easier, if there is a bad fill implementation, the whole set of functions will be filled\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n length = Number(length);\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n /**\r\n * From ES6 7.1.4 ToInteger()\r\n *\r\n * @param value A value to convert\r\n * @return An integer\r\n */\r\n const toInteger = function toInteger(value) {\r\n value = Number(value);\r\n if (isNaN(value)) {\r\n return 0;\r\n }\r\n if (value === 0 || !isFinite(value)) {\r\n return value;\r\n }\r\n return (value > 0 ? 1 : -1) * Math.floor(Math.abs(value));\r\n };\r\n /**\r\n * Normalizes an offset against a given length, wrapping it if negative.\r\n *\r\n * @param value The original offset\r\n * @param length The total length to normalize against\r\n * @return If negative, provide a distance from the end (length); otherwise provide a distance from 0\r\n */\r\n const normalizeOffset = function normalizeOffset(value, length) {\r\n return value < 0 ? Math.max(length + value, 0) : Math.min(value, length);\r\n };\r\n from = function from(arrayLike, mapFunction, thisArg) {\r\n if (arrayLike == null) {\r\n throw new TypeError('from: requires an array-like object');\r\n }\r\n if (mapFunction && thisArg) {\r\n mapFunction = mapFunction.bind(thisArg);\r\n }\r\n /* tslint:disable-next-line:variable-name */\r\n const Constructor = this;\r\n const length = toLength(arrayLike.length);\r\n // Support extension\r\n const array = typeof Constructor === 'function' ? Object(new Constructor(length)) : new Array(length);\r\n if (!isArrayLike(arrayLike) && !isIterable(arrayLike)) {\r\n return array;\r\n }\r\n // if this is an array and the normalized length is 0, just return an empty array. this prevents a problem\r\n // with the iteration on IE when using a NaN array length.\r\n if (isArrayLike(arrayLike)) {\r\n if (length === 0) {\r\n return [];\r\n }\r\n for (let i = 0; i < arrayLike.length; i++) {\r\n array[i] = mapFunction ? mapFunction(arrayLike[i], i) : arrayLike[i];\r\n }\r\n }\r\n else {\r\n let i = 0;\r\n for (const value of arrayLike) {\r\n array[i] = mapFunction ? mapFunction(value, i) : value;\r\n i++;\r\n }\r\n }\r\n if (arrayLike.length !== undefined) {\r\n array.length = length;\r\n }\r\n return array;\r\n };\r\n of = function of(...items) {\r\n return Array.prototype.slice.call(items);\r\n };\r\n copyWithin = function copyWithin(target, offset, start, end) {\r\n if (target == null) {\r\n throw new TypeError('copyWithin: target must be an array-like object');\r\n }\r\n const length = toLength(target.length);\r\n offset = normalizeOffset(toInteger(offset), length);\r\n start = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n let count = Math.min(end - start, length - offset);\r\n let direction = 1;\r\n if (offset > start && offset < start + count) {\r\n direction = -1;\r\n start += count - 1;\r\n offset += count - 1;\r\n }\r\n while (count > 0) {\r\n if (start in target) {\r\n target[offset] = target[start];\r\n }\r\n else {\r\n delete target[offset];\r\n }\r\n offset += direction;\r\n start += direction;\r\n count--;\r\n }\r\n return target;\r\n };\r\n fill = function fill(target, value, start, end) {\r\n const length = toLength(target.length);\r\n let i = normalizeOffset(toInteger(start), length);\r\n end = normalizeOffset(end === undefined ? length : toInteger(end), length);\r\n while (i < end) {\r\n target[i++] = value;\r\n }\r\n return target;\r\n };\r\n find = function find(target, callback, thisArg) {\r\n const index = findIndex(target, callback, thisArg);\r\n return index !== -1 ? target[index] : undefined;\r\n };\r\n findIndex = function findIndex(target, callback, thisArg) {\r\n const length = toLength(target.length);\r\n if (!callback) {\r\n throw new TypeError('find: second argument must be a function');\r\n }\r\n if (thisArg) {\r\n callback = callback.bind(thisArg);\r\n }\r\n for (let i = 0; i < length; i++) {\r\n if (callback(target[i], i, target)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n}\r\nif (true) {\r\n includes = wrapNative(global.Array.prototype.includes);\r\n}\r\nelse {\r\n /**\r\n * Ensures a non-negative, non-infinite, safe integer.\r\n *\r\n * @param length The number to validate\r\n * @return A proper length\r\n */\r\n const toLength = function toLength(length) {\r\n length = Number(length);\r\n if (isNaN(length)) {\r\n return 0;\r\n }\r\n if (isFinite(length)) {\r\n length = Math.floor(length);\r\n }\r\n // Ensure a non-negative, real, safe integer\r\n return Math.min(Math.max(length, 0), MAX_SAFE_INTEGER);\r\n };\r\n includes = function includes(target, searchElement, fromIndex = 0) {\r\n let len = toLength(target.length);\r\n for (let i = fromIndex; i < len; ++i) {\r\n const currentElement = target[i];\r\n if (searchElement === currentElement ||\r\n (searchElement !== searchElement && currentElement !== currentElement)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n//# sourceMappingURL=array.mjs.map" }, { - "id": "./node_modules/@dojo/shim/global.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "name": "./node_modules/@dojo/shim/global.mjs", + "id": "./node_modules/@dojo/framework/shim/global.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "name": "./node_modules/@dojo/framework/shim/global.mjs", "index": 10, "index2": 4, "size": 581, @@ -3308,117 +3316,117 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "6:0-39" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "@dojo/shim/global", - "loc": "1:0-39" + "userRequest": "../shim/global", + "loc": "6:0-36" }, { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./global", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/number.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\number.mjs", - "module": "./node_modules/@dojo/shim/number.mjs", - "moduleName": "./node_modules/@dojo/shim/number.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/global", + "loc": "1:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", + "module": "./node_modules/@dojo/framework/shim/number.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/number.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "module": "./node_modules/@dojo/shim/support/has.mjs", - "moduleName": "./node_modules/@dojo/shim/support/has.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "module": "./node_modules/@dojo/framework/shim/support/has.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/has.mjs", "type": "harmony import", "userRequest": "../global", "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "../global", "loc": "1:0-31" @@ -3435,9 +3443,9 @@ "source": "const globalObject = (function () {\n if (typeof global !== 'undefined') {\n // global spec defines a reference to the global object called 'global'\n // https://github.com/tc39/proposal-global\n // `global` is also defined in NodeJS\n return global;\n }\n else if (typeof window !== 'undefined') {\n // window is defined in browsers\n return window;\n }\n else if (typeof self !== 'undefined') {\n // self is defined in WebWorkers\n return self;\n }\n})();\nexport default globalObject;\n//# sourceMappingURL=global.mjs.map" }, { - "id": "./node_modules/@dojo/shim/iterator.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "name": "./node_modules/@dojo/shim/iterator.mjs", + "id": "./node_modules/@dojo/framework/shim/iterator.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "name": "./node_modules/@dojo/framework/shim/iterator.mjs", "index": 16, "index2": 10, "size": 3158, @@ -3449,36 +3457,36 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-53" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "1:0-55" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./iterator", "loc": "2:0-41" @@ -3497,9 +3505,9 @@ "source": "import './Symbol';\nimport { HIGH_SURROGATE_MAX, HIGH_SURROGATE_MIN } from './string';\nconst staticDone = { done: true, value: undefined };\n/**\n * A class that _shims_ an iterator interface on array like objects.\n */\nexport class ShimIterator {\n constructor(list) {\n this._nextIndex = -1;\n if (isIterable(list)) {\n this._nativeIterator = list[Symbol.iterator]();\n }\n else {\n this._list = list;\n }\n }\n /**\n * Return the next iteration result for the Iterator\n */\n next() {\n if (this._nativeIterator) {\n return this._nativeIterator.next();\n }\n if (!this._list) {\n return staticDone;\n }\n if (++this._nextIndex < this._list.length) {\n return {\n done: false,\n value: this._list[this._nextIndex]\n };\n }\n return staticDone;\n }\n [Symbol.iterator]() {\n return this;\n }\n}\n/**\n * A type guard for checking if something has an Iterable interface\n *\n * @param value The value to type guard against\n */\nexport function isIterable(value) {\n return value && typeof value[Symbol.iterator] === 'function';\n}\n/**\n * A type guard for checking if something is ArrayLike\n *\n * @param value The value to type guard against\n */\nexport function isArrayLike(value) {\n return value && typeof value.length === 'number';\n}\n/**\n * Returns the iterator for an object\n *\n * @param iterable The iterable object to return the iterator for\n */\nexport function get(iterable) {\n if (isIterable(iterable)) {\n return iterable[Symbol.iterator]();\n }\n else if (isArrayLike(iterable)) {\n return new ShimIterator(iterable);\n }\n}\n/**\n * Shims the functionality of `for ... of` blocks\n *\n * @param iterable The object the provides an interator interface\n * @param callback The callback which will be called for each item of the iterable\n * @param thisArg Optional scope to pass the callback\n */\nexport function forOf(iterable, callback, thisArg) {\n let broken = false;\n function doBreak() {\n broken = true;\n }\n /* We need to handle iteration of double byte strings properly */\n if (isArrayLike(iterable) && typeof iterable === 'string') {\n const l = iterable.length;\n for (let i = 0; i < l; ++i) {\n let char = iterable[i];\n if (i + 1 < l) {\n const code = char.charCodeAt(0);\n if (code >= HIGH_SURROGATE_MIN && code <= HIGH_SURROGATE_MAX) {\n char += iterable[++i];\n }\n }\n callback.call(thisArg, char, iterable, doBreak);\n if (broken) {\n return;\n }\n }\n }\n else {\n const iterator = get(iterable);\n if (iterator) {\n let result = iterator.next();\n while (!result.done) {\n callback.call(thisArg, result.value, iterable, doBreak);\n if (broken) {\n return;\n }\n result = iterator.next();\n }\n }\n }\n}\n//# sourceMappingURL=iterator.mjs.map" }, { - "id": "./node_modules/@dojo/shim/number.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\number.mjs", - "name": "./node_modules/@dojo/shim/number.mjs", + "id": "./node_modules/@dojo/framework/shim/number.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", + "name": "./node_modules/@dojo/framework/shim/number.mjs", "index": 31, "index2": 23, "size": 1724, @@ -3511,18 +3519,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./number", "loc": "3:0-44" @@ -3543,9 +3551,9 @@ "source": "import global from './global';\n/**\n * The smallest interval between two representable numbers.\n */\nexport const EPSILON = 1;\n/**\n * The maximum safe integer in JavaScript\n */\nexport const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n/**\n * The minimum safe integer in JavaScript\n */\nexport const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER;\n/**\n * Determines whether the passed value is NaN without coersion.\n *\n * @param value The value to test\n * @return true if the value is NaN, false if it is not\n */\nexport function isNaN(value) {\n return typeof value === 'number' && global.isNaN(value);\n}\n/**\n * Determines whether the passed value is a finite number without coersion.\n *\n * @param value The value to test\n * @return true if the value is finite, false if it is not\n */\nexport function isFinite(value) {\n return typeof value === 'number' && global.isFinite(value);\n}\n/**\n * Determines whether the passed value is an integer.\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isInteger(value) {\n return isFinite(value) && Math.floor(value) === value;\n}\n/**\n * Determines whether the passed value is an integer that is 'safe,' meaning:\n * 1. it can be expressed as an IEEE-754 double precision number\n * 2. it has a one-to-one mapping to a mathematical integer, meaning its\n * IEEE-754 representation cannot be the result of rounding any other\n * integer to fit the IEEE-754 representation\n *\n * @param value The value to test\n * @return true if the value is an integer, false if it is not\n */\nexport function isSafeInteger(value) {\n return isInteger(value) && Math.abs(value) <= MAX_SAFE_INTEGER;\n}\n//# sourceMappingURL=number.mjs.map" }, { - "id": "./node_modules/@dojo/shim/object.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "name": "./node_modules/@dojo/shim/object.mjs", + "id": "./node_modules/@dojo/framework/shim/object.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "name": "./node_modules/@dojo/framework/shim/object.mjs", "index": 18, "index2": 11, "size": 4171, @@ -3557,39 +3565,39 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "issuerId": "./node_modules/@dojo/shim/Map.mjs", - "issuerName": "./node_modules/@dojo/shim/Map.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Map.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Map.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./object", "loc": "3:0-42" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "1:0-43" + "userRequest": "../shim/object", + "loc": "1:0-40" }, { - "moduleId": "./node_modules/@dojo/core/lang.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\core\\lang.mjs", - "module": "./node_modules/@dojo/core/lang.mjs", - "moduleName": "./node_modules/@dojo/core/lang.mjs", + "moduleId": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\core\\lang.mjs", + "module": "./node_modules/@dojo/framework/core/lang.mjs", + "moduleName": "./node_modules/@dojo/framework/core/lang.mjs", "type": "harmony import", - "userRequest": "@dojo/shim/object", - "loc": "2:0-43" + "userRequest": "../shim/object", + "loc": "2:0-40" } ], "usedExports": [ @@ -3611,9 +3619,9 @@ "source": "import global from './global';\r\nimport has from './support/has';\r\nimport { isSymbol } from './Symbol';\r\nexport let assign;\r\n/**\r\n * Gets the own property descriptor of the specified object.\r\n * An own property descriptor is one that is defined directly on the object and is not\r\n * inherited from the object's prototype.\r\n * @param o Object that contains the property.\r\n * @param p Name of the property.\r\n */\r\nexport let getOwnPropertyDescriptor;\r\n/**\r\n * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\r\n * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\r\n * @param o Object that contains the own properties.\r\n */\r\nexport let getOwnPropertyNames;\r\n/**\r\n * Returns an array of all symbol properties found directly on object o.\r\n * @param o Object to retrieve the symbols from.\r\n */\r\nexport let getOwnPropertySymbols;\r\n/**\r\n * Returns true if the values are the same value, false otherwise.\r\n * @param value1 The first value.\r\n * @param value2 The second value.\r\n */\r\nexport let is;\r\n/**\r\n * Returns the names of the enumerable properties and methods of an object.\r\n * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\r\n */\r\nexport let keys;\r\n/* ES7 Object static methods */\r\nexport let getOwnPropertyDescriptors;\r\nexport let entries;\r\nexport let values;\r\nif (true) {\r\n const globalObject = global.Object;\r\n assign = globalObject.assign;\r\n getOwnPropertyDescriptor = globalObject.getOwnPropertyDescriptor;\r\n getOwnPropertyNames = globalObject.getOwnPropertyNames;\r\n getOwnPropertySymbols = globalObject.getOwnPropertySymbols;\r\n is = globalObject.is;\r\n keys = globalObject.keys;\r\n}\r\nelse {\r\n keys = function symbolAwareKeys(o) {\r\n return Object.keys(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n assign = function assign(target, ...sources) {\r\n if (target == null) {\r\n // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n const to = Object(target);\r\n sources.forEach((nextSource) => {\r\n if (nextSource) {\r\n // Skip over if undefined or null\r\n keys(nextSource).forEach((nextKey) => {\r\n to[nextKey] = nextSource[nextKey];\r\n });\r\n }\r\n });\r\n return to;\r\n };\r\n getOwnPropertyDescriptor = function getOwnPropertyDescriptor(o, prop) {\r\n if (isSymbol(prop)) {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n else {\r\n return Object.getOwnPropertyDescriptor(o, prop);\r\n }\r\n };\r\n getOwnPropertyNames = function getOwnPropertyNames(o) {\r\n return Object.getOwnPropertyNames(o).filter((key) => !Boolean(key.match(/^@@.+/)));\r\n };\r\n getOwnPropertySymbols = function getOwnPropertySymbols(o) {\r\n return Object.getOwnPropertyNames(o)\r\n .filter((key) => Boolean(key.match(/^@@.+/)))\r\n .map((key) => Symbol.for(key.substring(2)));\r\n };\r\n is = function is(value1, value2) {\r\n if (value1 === value2) {\r\n return value1 !== 0 || 1 / value1 === 1 / value2; // -0\r\n }\r\n return value1 !== value1 && value2 !== value2; // NaN\r\n };\r\n}\r\nif (true) {\r\n const globalObject = global.Object;\r\n getOwnPropertyDescriptors = globalObject.getOwnPropertyDescriptors;\r\n entries = globalObject.entries;\r\n values = globalObject.values;\r\n}\r\nelse {\r\n getOwnPropertyDescriptors = function getOwnPropertyDescriptors(o) {\r\n return getOwnPropertyNames(o).reduce((previous, key) => {\r\n previous[key] = getOwnPropertyDescriptor(o, key);\r\n return previous;\r\n }, {});\r\n };\r\n entries = function entries(o) {\r\n return keys(o).map((key) => [key, o[key]]);\r\n };\r\n values = function values(o) {\r\n return keys(o).map((key) => o[key]);\r\n };\r\n}\r\n//# sourceMappingURL=object.mjs.map" }, { - "id": "./node_modules/@dojo/shim/string.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "name": "./node_modules/@dojo/shim/string.mjs", + "id": "./node_modules/@dojo/framework/shim/string.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "name": "./node_modules/@dojo/framework/shim/string.mjs", "index": 17, "index2": 9, "size": 12714, @@ -3625,18 +3633,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "issuerId": "./node_modules/@dojo/shim/iterator.mjs", - "issuerName": "./node_modules/@dojo/shim/iterator.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/iterator.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/iterator.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\iterator.mjs", - "module": "./node_modules/@dojo/shim/iterator.mjs", - "moduleName": "./node_modules/@dojo/shim/iterator.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\iterator.mjs", + "module": "./node_modules/@dojo/framework/shim/iterator.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/iterator.mjs", "type": "harmony import", "userRequest": "./string", "loc": "2:0-66" @@ -3667,9 +3675,9 @@ "source": "import global from './global';\r\nimport has from './support/has';\r\nimport { wrapNative } from './support/util';\r\n/**\r\n * The minimum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MIN = 0xd800;\r\n/**\r\n * The maximum location of high surrogates\r\n */\r\nexport const HIGH_SURROGATE_MAX = 0xdbff;\r\n/**\r\n * The minimum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MIN = 0xdc00;\r\n/**\r\n * The maximum location of low surrogates\r\n */\r\nexport const LOW_SURROGATE_MAX = 0xdfff;\r\n/* ES6 static methods */\r\n/**\r\n * Return the String value whose elements are, in order, the elements in the List elements.\r\n * If length is 0, the empty string is returned.\r\n * @param codePoints The code points to generate the string\r\n */\r\nexport let fromCodePoint;\r\n/**\r\n * `raw` is intended for use as a tag function of a Tagged Template String. When called\r\n * as such the first argument will be a well formed template call site object and the rest\r\n * parameter will contain the substitution values.\r\n * @param template A well-formed template string call site representation.\r\n * @param substitutions A set of substitution values.\r\n */\r\nexport let raw;\r\n/* ES6 instance methods */\r\n/**\r\n * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\r\n * value of the UTF-16 encoded code point starting at the string element at position pos in\r\n * the String resulting from converting this object to a String.\r\n * If there is no element at that position, the result is undefined.\r\n * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\r\n */\r\nexport let codePointAt;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * endPosition – length(this). Otherwise returns false.\r\n */\r\nexport let endsWith;\r\n/**\r\n * Returns true if searchString appears as a substring of the result of converting this\r\n * object to a String, at one or more positions that are\r\n * greater than or equal to position; otherwise, returns false.\r\n * @param target The target string\r\n * @param searchString search string\r\n * @param position If position is undefined, 0 is assumed, so as to search all of the String.\r\n */\r\nexport let includes;\r\n/**\r\n * Returns the String value result of normalizing the string into the normalization form\r\n * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\r\n * @param target The target string\r\n * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\r\n * is \"NFC\"\r\n */\r\nexport let normalize;\r\n/**\r\n * Returns a String value that is made from count copies appended together. If count is 0,\r\n * T is the empty String is returned.\r\n * @param count number of copies to append\r\n */\r\nexport let repeat;\r\n/**\r\n * Returns true if the sequence of elements of searchString converted to a String is the\r\n * same as the corresponding elements of this object (converted to a String) starting at\r\n * position. Otherwise returns false.\r\n */\r\nexport let startsWith;\r\n/* ES7 instance methods */\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the end (right) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padEnd;\r\n/**\r\n * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\r\n * The padding is applied from the start (left) of the current string.\r\n *\r\n * @param target The target string\r\n * @param maxLength The length of the resulting string once the current string has been padded.\r\n * If this parameter is smaller than the current string's length, the current string will be returned as it is.\r\n *\r\n * @param fillString The string to pad the current string with.\r\n * If this string is too long, it will be truncated and the left-most part will be applied.\r\n * The default value for this parameter is \" \" (U+0020).\r\n */\r\nexport let padStart;\r\nif (true && true) {\r\n fromCodePoint = global.String.fromCodePoint;\r\n raw = global.String.raw;\r\n codePointAt = wrapNative(global.String.prototype.codePointAt);\r\n endsWith = wrapNative(global.String.prototype.endsWith);\r\n includes = wrapNative(global.String.prototype.includes);\r\n normalize = wrapNative(global.String.prototype.normalize);\r\n repeat = wrapNative(global.String.prototype.repeat);\r\n startsWith = wrapNative(global.String.prototype.startsWith);\r\n}\r\nelse {\r\n /**\r\n * Validates that text is defined, and normalizes position (based on the given default if the input is NaN).\r\n * Used by startsWith, includes, and endsWith.\r\n *\r\n * @return Normalized position.\r\n */\r\n const normalizeSubstringArgs = function (name, text, search, position, isEnd = false) {\r\n if (text == null) {\r\n throw new TypeError('string.' + name + ' requires a valid string to search against.');\r\n }\r\n const length = text.length;\r\n position = position !== position ? (isEnd ? length : 0) : position;\r\n return [text, String(search), Math.min(Math.max(position, 0), length)];\r\n };\r\n fromCodePoint = function fromCodePoint(...codePoints) {\r\n // Adapted from https://github.com/mathiasbynens/String.fromCodePoint\r\n const length = arguments.length;\r\n if (!length) {\r\n return '';\r\n }\r\n const fromCharCode = String.fromCharCode;\r\n const MAX_SIZE = 0x4000;\r\n let codeUnits = [];\r\n let index = -1;\r\n let result = '';\r\n while (++index < length) {\r\n let codePoint = Number(arguments[index]);\r\n // Code points must be finite integers within the valid range\r\n let isValid = isFinite(codePoint) && Math.floor(codePoint) === codePoint && codePoint >= 0 && codePoint <= 0x10ffff;\r\n if (!isValid) {\r\n throw RangeError('string.fromCodePoint: Invalid code point ' + codePoint);\r\n }\r\n if (codePoint <= 0xffff) {\r\n // BMP code point\r\n codeUnits.push(codePoint);\r\n }\r\n else {\r\n // Astral code point; split in surrogate halves\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n codePoint -= 0x10000;\r\n let highSurrogate = (codePoint >> 10) + HIGH_SURROGATE_MIN;\r\n let lowSurrogate = codePoint % 0x400 + LOW_SURROGATE_MIN;\r\n codeUnits.push(highSurrogate, lowSurrogate);\r\n }\r\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\r\n result += fromCharCode.apply(null, codeUnits);\r\n codeUnits.length = 0;\r\n }\r\n }\r\n return result;\r\n };\r\n raw = function raw(callSite, ...substitutions) {\r\n let rawStrings = callSite.raw;\r\n let result = '';\r\n let numSubstitutions = substitutions.length;\r\n if (callSite == null || callSite.raw == null) {\r\n throw new TypeError('string.raw requires a valid callSite object with a raw value');\r\n }\r\n for (let i = 0, length = rawStrings.length; i < length; i++) {\r\n result += rawStrings[i] + (i < numSubstitutions && i < length - 1 ? substitutions[i] : '');\r\n }\r\n return result;\r\n };\r\n codePointAt = function codePointAt(text, position = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.codePointAt\r\n if (text == null) {\r\n throw new TypeError('string.codePointAt requries a valid string.');\r\n }\r\n const length = text.length;\r\n if (position !== position) {\r\n position = 0;\r\n }\r\n if (position < 0 || position >= length) {\r\n return undefined;\r\n }\r\n // Get the first code unit\r\n const first = text.charCodeAt(position);\r\n if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > position + 1) {\r\n // Start of a surrogate pair (high surrogate and there is a next code unit); check for low surrogate\r\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\r\n const second = text.charCodeAt(position + 1);\r\n if (second >= LOW_SURROGATE_MIN && second <= LOW_SURROGATE_MAX) {\r\n return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000;\r\n }\r\n }\r\n return first;\r\n };\r\n endsWith = function endsWith(text, search, endPosition) {\r\n if (endPosition == null) {\r\n endPosition = text.length;\r\n }\r\n [text, search, endPosition] = normalizeSubstringArgs('endsWith', text, search, endPosition, true);\r\n const start = endPosition - search.length;\r\n if (start < 0) {\r\n return false;\r\n }\r\n return text.slice(start, endPosition) === search;\r\n };\r\n includes = function includes(text, search, position = 0) {\r\n [text, search, position] = normalizeSubstringArgs('includes', text, search, position);\r\n return text.indexOf(search, position) !== -1;\r\n };\r\n repeat = function repeat(text, count = 0) {\r\n // Adapted from https://github.com/mathiasbynens/String.prototype.repeat\r\n if (text == null) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (count !== count) {\r\n count = 0;\r\n }\r\n if (count < 0 || count === Infinity) {\r\n throw new RangeError('string.repeat requires a non-negative finite count.');\r\n }\r\n let result = '';\r\n while (count) {\r\n if (count % 2) {\r\n result += text;\r\n }\r\n if (count > 1) {\r\n text += text;\r\n }\r\n count >>= 1;\r\n }\r\n return result;\r\n };\r\n startsWith = function startsWith(text, search, position = 0) {\r\n search = String(search);\r\n [text, search, position] = normalizeSubstringArgs('startsWith', text, search, position);\r\n const end = position + search.length;\r\n if (end > text.length) {\r\n return false;\r\n }\r\n return text.slice(position, end) === search;\r\n };\r\n}\r\nif (true) {\r\n padEnd = wrapNative(global.String.prototype.padEnd);\r\n padStart = wrapNative(global.String.prototype.padStart);\r\n}\r\nelse {\r\n padEnd = function padEnd(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padEnd requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText +=\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length);\r\n }\r\n return strText;\r\n };\r\n padStart = function padStart(text, maxLength, fillString = ' ') {\r\n if (text === null || text === undefined) {\r\n throw new TypeError('string.repeat requires a valid string.');\r\n }\r\n if (maxLength === Infinity) {\r\n throw new RangeError('string.padStart requires a non-negative finite count.');\r\n }\r\n if (maxLength === null || maxLength === undefined || maxLength < 0) {\r\n maxLength = 0;\r\n }\r\n let strText = String(text);\r\n const padding = maxLength - strText.length;\r\n if (padding > 0) {\r\n strText =\r\n repeat(fillString, Math.floor(padding / fillString.length)) +\r\n fillString.slice(0, padding % fillString.length) +\r\n strText;\r\n }\r\n return strText;\r\n };\r\n}\r\n//# sourceMappingURL=string.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/has.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\has.mjs", - "name": "./node_modules/@dojo/shim/support/has.mjs", + "id": "./node_modules/@dojo/framework/shim/support/has.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", + "name": "./node_modules/@dojo/framework/shim/support/has.mjs", "index": 6, "index2": 5, "size": 6316, @@ -3681,81 +3689,81 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Map.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Map.mjs", - "module": "./node_modules/@dojo/shim/Map.mjs", - "moduleName": "./node_modules/@dojo/shim/Map.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Map.mjs", + "module": "./node_modules/@dojo/framework/shim/Map.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Map.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\WeakMap.mjs", - "module": "./node_modules/@dojo/shim/WeakMap.mjs", - "moduleName": "./node_modules/@dojo/shim/WeakMap.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\WeakMap.mjs", + "module": "./node_modules/@dojo/framework/shim/WeakMap.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/WeakMap.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "3:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "1:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "4:0-32" + "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\object.mjs", - "module": "./node_modules/@dojo/shim/object.mjs", - "moduleName": "./node_modules/@dojo/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/has", - "loc": "2:0-32" + "loc": "4:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/has", "loc": "2:0-32" }, { - "moduleId": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "module": "./node_modules/@dojo/shim/support/queue.mjs", - "moduleName": "./node_modules/@dojo/shim/support/queue.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "module": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/support/queue.mjs", "type": "harmony import", "userRequest": "./has", "loc": "2:0-24" @@ -3773,12 +3781,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import has, { add } from '@dojo/has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '@dojo/has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map" + "source": "import has, { add } from '../../has/has';\r\nimport global from '../global';\r\nexport default has;\r\nexport * from '../../has/has';\r\n/* ECMAScript 6 and 7 Features */\r\n/* Array */\r\nadd('es6-array', () => {\r\n return (['from', 'of'].every((key) => key in global.Array) &&\r\n ['findIndex', 'find', 'copyWithin'].every((key) => key in global.Array.prototype));\r\n}, true);\r\nadd('es6-array-fill', () => {\r\n if ('fill' in global.Array.prototype) {\r\n /* Some versions of Safari do not properly implement this */\r\n return [1].fill(9, Number.POSITIVE_INFINITY)[0] === 1;\r\n }\r\n return false;\r\n}, true);\r\nadd('es7-array', () => 'includes' in global.Array.prototype, true);\r\n/* Map */\r\nadd('es6-map', () => {\r\n if (typeof global.Map === 'function') {\r\n /*\r\n IE11 and older versions of Safari are missing critical ES6 Map functionality\r\n We wrap this in a try/catch because sometimes the Map constructor exists, but does not\r\n take arguments (iOS 8.4)\r\n */\r\n try {\r\n const map = new global.Map([[0, 1]]);\r\n return map.has(0) &&\r\n typeof map.keys === 'function' &&\r\n true &&\r\n typeof map.values === 'function' &&\r\n typeof map.entries === 'function';\r\n }\r\n catch (e) {\r\n /* istanbul ignore next: not testing on iOS at the moment */\r\n return false;\r\n }\r\n }\r\n return false;\r\n}, true);\r\n/* Math */\r\nadd('es6-math', () => {\r\n return [\r\n 'clz32',\r\n 'sign',\r\n 'log10',\r\n 'log2',\r\n 'log1p',\r\n 'expm1',\r\n 'cosh',\r\n 'sinh',\r\n 'tanh',\r\n 'acosh',\r\n 'asinh',\r\n 'atanh',\r\n 'trunc',\r\n 'fround',\r\n 'cbrt',\r\n 'hypot'\r\n ].every((name) => typeof global.Math[name] === 'function');\r\n}, true);\r\nadd('es6-math-imul', () => {\r\n if ('imul' in global.Math) {\r\n /* Some versions of Safari on ios do not properly implement this */\r\n return Math.imul(0xffffffff, 5) === -5;\r\n }\r\n return false;\r\n}, true);\r\n/* Object */\r\nadd('es6-object', () => {\r\n return true &&\r\n ['assign', 'is', 'getOwnPropertySymbols', 'setPrototypeOf'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\nadd('es2017-object', () => {\r\n return ['values', 'entries', 'getOwnPropertyDescriptors'].every((name) => typeof global.Object[name] === 'function');\r\n}, true);\r\n/* Observable */\r\nadd('es-observable', () => typeof global.Observable !== 'undefined', true);\r\n/* Promise */\r\nadd('es6-promise', () => typeof global.Promise !== 'undefined' && true, true);\r\n/* Set */\r\nadd('es6-set', () => {\r\n if (typeof global.Set === 'function') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Set functionality */\r\n const set = new global.Set([1]);\r\n return set.has(1) && 'keys' in set && typeof set.keys === 'function' && true;\r\n }\r\n return false;\r\n}, true);\r\n/* String */\r\nadd('es6-string', () => {\r\n return ([\r\n /* static methods */\r\n 'fromCodePoint'\r\n ].every((key) => typeof global.String[key] === 'function') &&\r\n [\r\n /* instance methods */\r\n 'codePointAt',\r\n 'normalize',\r\n 'repeat',\r\n 'startsWith',\r\n 'endsWith',\r\n 'includes'\r\n ].every((key) => typeof global.String.prototype[key] === 'function'));\r\n}, true);\r\nadd('es6-string-raw', () => {\r\n function getCallSite(callSite, ...substitutions) {\r\n const result = [...callSite];\r\n result.raw = callSite.raw;\r\n return result;\r\n }\r\n if ('raw' in global.String) {\r\n let b = 1;\r\n let callSite = getCallSite `a\\n${b}`;\r\n callSite.raw = ['a\\\\n'];\r\n const supportsTrunc = global.String.raw(callSite, 42) === 'a:\\\\n';\r\n return supportsTrunc;\r\n }\r\n return false;\r\n}, true);\r\nadd('es2017-string', () => {\r\n return ['padStart', 'padEnd'].every((key) => typeof global.String.prototype[key] === 'function');\r\n}, true);\r\n/* Symbol */\r\nadd('es6-symbol', () => typeof global.Symbol !== 'undefined' && typeof Symbol() === 'symbol', true);\r\n/* WeakMap */\r\nadd('es6-weakmap', () => {\r\n if (typeof global.WeakMap !== 'undefined') {\r\n /* IE11 and older versions of Safari are missing critical ES6 Map functionality */\r\n const key1 = {};\r\n const key2 = {};\r\n const map = new global.WeakMap([[key1, 1]]);\r\n Object.freeze(key1);\r\n return map.get(key1) === 1 && map.set(key2, 2) === map && true;\r\n }\r\n return false;\r\n}, true);\r\n/* Miscellaneous features */\r\nadd('microtasks', () => true || false || true, true);\r\nadd('postmessage', () => {\r\n // If window is undefined, and we have postMessage, it probably means we're in a web worker. Web workers have\r\n // post message but it doesn't work how we expect it to, so it's best just to pretend it doesn't exist.\r\n return typeof global.window !== 'undefined' && typeof global.postMessage === 'function';\r\n}, true);\r\nadd('raf', () => typeof global.requestAnimationFrame === 'function', true);\r\nadd('setimmediate', () => typeof global.setImmediate !== 'undefined', true);\r\n/* DOM Features */\r\nadd('dom-mutationobserver', () => {\r\n if (true && Boolean(global.MutationObserver || global.WebKitMutationObserver)) {\r\n // IE11 has an unreliable MutationObserver implementation where setProperty() does not\r\n // generate a mutation event, observers can crash, and the queue does not drain\r\n // reliably. The following feature test was adapted from\r\n // https://gist.github.com/t10ko/4aceb8c71681fdb275e33efe5e576b14\r\n const example = document.createElement('div');\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const observer = new HostMutationObserver(function () { });\r\n observer.observe(example, { attributes: true });\r\n example.style.setProperty('display', 'block');\r\n return Boolean(observer.takeRecords().length);\r\n }\r\n return false;\r\n}, true);\r\nadd('dom-webanimation', () => true && global.Animation !== undefined && global.KeyframeEffect !== undefined, true);\r\n//# sourceMappingURL=has.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/queue.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\queue.mjs", - "name": "./node_modules/@dojo/shim/support/queue.mjs", + "id": "./node_modules/@dojo/framework/shim/support/queue.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\queue.mjs", + "name": "./node_modules/@dojo/framework/shim/support/queue.mjs", "index": 23, "index2": 14, "size": 6381, @@ -3790,18 +3798,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "issuerId": "./node_modules/@dojo/shim/Promise.mjs", - "issuerName": "./node_modules/@dojo/shim/Promise.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/Promise.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./support/queue", "loc": "2:0-49" @@ -3818,9 +3826,9 @@ "source": "import global from '../global';\r\nimport has from './has';\r\nfunction executeTask(item) {\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n}\r\nfunction getQueueHandle(item, destructor) {\r\n return {\r\n destroy: function () {\r\n this.destroy = function () { };\r\n item.isActive = false;\r\n item.callback = null;\r\n if (destructor) {\r\n destructor();\r\n }\r\n }\r\n };\r\n}\r\nlet checkMicroTaskQueue;\r\nlet microTasks;\r\n/**\r\n * Schedules a callback to the macrotask queue.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueTask = (function () {\r\n let destructor;\r\n let enqueue;\r\n // Since the IE implementation of `setImmediate` is not flawless, we will test for `postMessage` first.\r\n if (true) {\r\n const queue = [];\r\n global.addEventListener('message', function (event) {\r\n // Confirm that the event was triggered by the current window and by this particular implementation.\r\n if (event.source === global && event.data === 'dojo-queue-message') {\r\n event.stopPropagation();\r\n if (queue.length) {\r\n executeTask(queue.shift());\r\n }\r\n }\r\n });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n global.postMessage('dojo-queue-message', '*');\r\n };\r\n }\r\n else if (false) {\r\n destructor = global.clearImmediate;\r\n enqueue = function (item) {\r\n return setImmediate(executeTask.bind(null, item));\r\n };\r\n }\r\n else {\r\n destructor = global.clearTimeout;\r\n enqueue = function (item) {\r\n return setTimeout(executeTask.bind(null, item), 0);\r\n };\r\n }\r\n function queueTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const id = enqueue(item);\r\n return getQueueHandle(item, destructor &&\r\n function () {\r\n destructor(id);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueTask(callback);\r\n };\r\n})();\r\n// When no mechanism for registering microtasks is exposed by the environment, microtasks will\r\n// be queued and then executed in a single macrotask before the other macrotasks are executed.\r\nif (!true) {\r\n let isMicroTaskQueued = false;\r\n microTasks = [];\r\n checkMicroTaskQueue = function () {\r\n if (!isMicroTaskQueued) {\r\n isMicroTaskQueued = true;\r\n queueTask(function () {\r\n isMicroTaskQueued = false;\r\n if (microTasks.length) {\r\n let item;\r\n while ((item = microTasks.shift())) {\r\n executeTask(item);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n}\r\n/**\r\n * Schedules an animation task with `window.requestAnimationFrame` if it exists, or with `queueTask` otherwise.\r\n *\r\n * Since requestAnimationFrame's behavior does not match that expected from `queueTask`, it is not used there.\r\n * However, at times it makes more sense to delegate to requestAnimationFrame; hence the following method.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport const queueAnimationTask = (function () {\r\n if (!true) {\r\n return queueTask;\r\n }\r\n function queueAnimationTask(callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n const rafId = requestAnimationFrame(executeTask.bind(null, item));\r\n return getQueueHandle(item, function () {\r\n cancelAnimationFrame(rafId);\r\n });\r\n }\r\n // TODO: Use aspect.before when it is available.\r\n return true\r\n ? queueAnimationTask\r\n : function (callback) {\r\n checkMicroTaskQueue();\r\n return queueAnimationTask(callback);\r\n };\r\n})();\r\n/**\r\n * Schedules a callback to the microtask queue.\r\n *\r\n * Any callbacks registered with `queueMicroTask` will be executed before the next macrotask. If no native\r\n * mechanism for scheduling macrotasks is exposed, then any callbacks will be fired before any macrotask\r\n * registered with `queueTask` or `queueAnimationTask`.\r\n *\r\n * @param callback the function to be queued and later executed.\r\n * @returns An object with a `destroy` method that, when called, prevents the registered callback from executing.\r\n */\r\nexport let queueMicroTask = (function () {\r\n let enqueue;\r\n if (false) {\r\n enqueue = function (item) {\r\n global.process.nextTick(executeTask.bind(null, item));\r\n };\r\n }\r\n else if (true) {\r\n enqueue = function (item) {\r\n global.Promise.resolve(item).then(executeTask);\r\n };\r\n }\r\n else if (true) {\r\n /* tslint:disable-next-line:variable-name */\r\n const HostMutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\n const node = document.createElement('div');\r\n const queue = [];\r\n const observer = new HostMutationObserver(function () {\r\n while (queue.length > 0) {\r\n const item = queue.shift();\r\n if (item && item.isActive && item.callback) {\r\n item.callback();\r\n }\r\n }\r\n });\r\n observer.observe(node, { attributes: true });\r\n enqueue = function (item) {\r\n queue.push(item);\r\n node.setAttribute('queueStatus', '1');\r\n };\r\n }\r\n else {\r\n enqueue = function (item) {\r\n checkMicroTaskQueue();\r\n microTasks.push(item);\r\n };\r\n }\r\n return function (callback) {\r\n const item = {\r\n isActive: true,\r\n callback: callback\r\n };\r\n enqueue(item);\r\n return getQueueHandle(item);\r\n };\r\n})();\r\n//# sourceMappingURL=queue.mjs.map" }, { - "id": "./node_modules/@dojo/shim/support/util.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\support\\util.mjs", - "name": "./node_modules/@dojo/shim/support/util.mjs", + "id": "./node_modules/@dojo/framework/shim/support/util.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\util.mjs", + "name": "./node_modules/@dojo/framework/shim/support/util.mjs", "index": 11, "index2": 6, "size": 853, @@ -3832,36 +3840,36 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "issuerId": "./node_modules/@dojo/shim/array.mjs", - "issuerName": "./node_modules/@dojo/shim/array.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/array.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/array.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/array.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\array.mjs", - "module": "./node_modules/@dojo/shim/array.mjs", - "moduleName": "./node_modules/@dojo/shim/array.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\array.mjs", + "module": "./node_modules/@dojo/framework/shim/array.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/array.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "5:0-44" }, { - "moduleId": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\Symbol.mjs", - "module": "./node_modules/@dojo/shim/Symbol.mjs", - "moduleName": "./node_modules/@dojo/shim/Symbol.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Symbol.mjs", + "module": "./node_modules/@dojo/framework/shim/Symbol.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Symbol.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-52" }, { - "moduleId": "./node_modules/@dojo/shim/string.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\string.mjs", - "module": "./node_modules/@dojo/shim/string.mjs", - "moduleName": "./node_modules/@dojo/shim/string.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", + "module": "./node_modules/@dojo/framework/shim/string.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/string.mjs", "type": "harmony import", "userRequest": "./support/util", "loc": "3:0-44" @@ -3880,12 +3888,12 @@ "source": "/**\n * Helper function to generate a value property descriptor\n *\n * @param value The value the property descriptor should be set to\n * @param enumerable If the property should be enumberable, defaults to false\n * @param writable If the property should be writable, defaults to true\n * @param configurable If the property should be configurable, defaults to true\n * @return The property descriptor object\n */\nexport function getValueDescriptor(value, enumerable = false, writable = true, configurable = true) {\n return {\n value: value,\n enumerable: enumerable,\n writable: writable,\n configurable: configurable\n };\n}\nexport function wrapNative(nativeFunction) {\n return function (target, ...args) {\n return nativeFunction.apply(target, args);\n };\n}\n//# sourceMappingURL=util.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Injector.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Injector.mjs", - "name": "./node_modules/@dojo/widget-core/Injector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Injector.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Injector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "index": 37, "index2": 31, - "size": 496, + "size": 493, "cacheable": true, "built": true, "optional": false, @@ -3894,18 +3902,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../Injector", "loc": "2:0-41" @@ -3920,15 +3928,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" + "source": "import { Evented } from '../core/Evented';\nexport class Injector extends Evented {\n constructor(payload) {\n super();\n this._payload = payload;\n }\n setInvalidator(invalidator) {\n this._invalidator = invalidator;\n }\n get() {\n return this._payload;\n }\n set(payload) {\n this._payload = payload;\n if (this._invalidator) {\n this._invalidator();\n }\n }\n}\nexport default Injector;\n//# sourceMappingURL=Injector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/NodeHandler.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\NodeHandler.mjs", - "name": "./node_modules/@dojo/widget-core/NodeHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "index": 28, "index2": 22, - "size": 1134, + "size": 1128, "cacheable": true, "built": true, "optional": false, @@ -3937,18 +3945,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./NodeHandler", "loc": "7:0-40" @@ -3964,15 +3972,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Evented } from '@dojo/core/Evented';\r\nimport Map from '@dojo/shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map" + "source": "import { Evented } from '../core/Evented';\r\nimport Map from '../shim/Map';\r\n/**\r\n * Enum to identify the type of event.\r\n * Listening to 'Projector' will notify when projector is created or updated\r\n * Listening to 'Widget' will notify when widget root is created or updated\r\n */\r\nexport var NodeEventType;\r\n(function (NodeEventType) {\r\n NodeEventType[\"Projector\"] = \"Projector\";\r\n NodeEventType[\"Widget\"] = \"Widget\";\r\n})(NodeEventType || (NodeEventType = {}));\r\nexport class NodeHandler extends Evented {\r\n constructor() {\r\n super(...arguments);\r\n this._nodeMap = new Map();\r\n }\r\n get(key) {\r\n return this._nodeMap.get(key);\r\n }\r\n has(key) {\r\n return this._nodeMap.has(key);\r\n }\r\n add(element, key) {\r\n this._nodeMap.set(key, element);\r\n this.emit({ type: key });\r\n }\r\n addRoot() {\r\n this.emit({ type: NodeEventType.Widget });\r\n }\r\n addProjector() {\r\n this.emit({ type: NodeEventType.Projector });\r\n }\r\n clear() {\r\n this._nodeMap.clear();\r\n }\r\n}\r\nexport default NodeHandler;\r\n//# sourceMappingURL=NodeHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/Registry.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\Registry.mjs", - "name": "./node_modules/@dojo/widget-core/Registry.mjs", + "id": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "name": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "index": 21, "index2": 19, - "size": 3814, + "size": 3802, "cacheable": true, "built": true, "optional": false, @@ -3981,57 +3989,57 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\diff.mjs", - "module": "./node_modules/@dojo/widget-core/diff.mjs", - "moduleName": "./node_modules/@dojo/widget-core/diff.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "type": "harmony import", + "userRequest": "../Registry", + "loc": "2:0-35" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\diff.mjs", + "module": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/diff.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "1:0-46" }, { - "moduleId": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "3:0-38" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" - }, - { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "type": "harmony import", - "userRequest": "../Registry", - "loc": "2:0-35" } ], "usedExports": [ @@ -4049,15 +4057,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import Promise from '@dojo/shim/Promise';\r\nimport Map from '@dojo/shim/Map';\r\nimport Symbol from '@dojo/shim/Symbol';\r\nimport { Evented } from '@dojo/core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map" + "source": "import Promise from '../shim/Promise';\r\nimport Map from '../shim/Map';\r\nimport Symbol from '../shim/Symbol';\r\nimport { Evented } from '../core/Evented';\r\n/**\r\n * Widget base symbol type\r\n */\r\nexport const WIDGET_BASE_TYPE = Symbol('Widget Base');\r\n/**\r\n * Checks is the item is a subclass of WidgetBase (or a WidgetBase)\r\n *\r\n * @param item the item to check\r\n * @returns true/false indicating if the item is a WidgetBaseConstructor\r\n */\r\nexport function isWidgetBaseConstructor(item) {\r\n return Boolean(item && item._type === WIDGET_BASE_TYPE);\r\n}\r\nexport function isWidgetConstructorDefaultExport(item) {\r\n return Boolean(item &&\r\n item.hasOwnProperty('__esModule') &&\r\n item.hasOwnProperty('default') &&\r\n isWidgetBaseConstructor(item.default));\r\n}\r\n/**\r\n * The Registry implementation\r\n */\r\nexport class Registry extends Evented {\r\n /**\r\n * Emit loaded event for registry label\r\n */\r\n emitLoadedEvent(widgetLabel, item) {\r\n this.emit({\r\n type: widgetLabel,\r\n action: 'loaded',\r\n item\r\n });\r\n }\r\n define(label, item) {\r\n if (this._widgetRegistry === undefined) {\r\n this._widgetRegistry = new Map();\r\n }\r\n if (this._widgetRegistry.has(label)) {\r\n throw new Error(`widget has already been registered for '${label.toString()}'`);\r\n }\r\n this._widgetRegistry.set(label, item);\r\n if (item instanceof Promise) {\r\n item.then((widgetCtor) => {\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n }\r\n else if (isWidgetBaseConstructor(item)) {\r\n this.emitLoadedEvent(label, item);\r\n }\r\n }\r\n defineInjector(label, injectorFactory) {\r\n if (this._injectorRegistry === undefined) {\r\n this._injectorRegistry = new Map();\r\n }\r\n if (this._injectorRegistry.has(label)) {\r\n throw new Error(`injector has already been registered for '${label.toString()}'`);\r\n }\r\n const invalidator = new Evented();\r\n const injectorItem = {\r\n injector: injectorFactory(() => invalidator.emit({ type: 'invalidate' })),\r\n invalidator\r\n };\r\n this._injectorRegistry.set(label, injectorItem);\r\n this.emitLoadedEvent(label, injectorItem);\r\n }\r\n get(label) {\r\n if (!this._widgetRegistry || !this.has(label)) {\r\n return null;\r\n }\r\n const item = this._widgetRegistry.get(label);\r\n if (isWidgetBaseConstructor(item)) {\r\n return item;\r\n }\r\n if (item instanceof Promise) {\r\n return null;\r\n }\r\n const promise = item();\r\n this._widgetRegistry.set(label, promise);\r\n promise.then((widgetCtor) => {\r\n if (isWidgetConstructorDefaultExport(widgetCtor)) {\r\n widgetCtor = widgetCtor.default;\r\n }\r\n this._widgetRegistry.set(label, widgetCtor);\r\n this.emitLoadedEvent(label, widgetCtor);\r\n return widgetCtor;\r\n }, (error) => {\r\n throw error;\r\n });\r\n return null;\r\n }\r\n getInjector(label) {\r\n if (!this._injectorRegistry || !this.hasInjector(label)) {\r\n return null;\r\n }\r\n return this._injectorRegistry.get(label);\r\n }\r\n has(label) {\r\n return Boolean(this._widgetRegistry && this._widgetRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return Boolean(this._injectorRegistry && this._injectorRegistry.has(label));\r\n }\r\n}\r\nexport default Registry;\r\n//# sourceMappingURL=Registry.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\RegistryHandler.mjs", - "name": "./node_modules/@dojo/widget-core/RegistryHandler.mjs", + "id": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "name": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "index": 27, "index2": 21, - "size": 2933, + "size": 2927, "cacheable": true, "built": true, "optional": false, @@ -4066,18 +4074,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./RegistryHandler", "loc": "6:0-48" @@ -4092,15 +4100,15 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { Map } from '@dojo/shim/Map';\r\nimport { Evented } from '@dojo/core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map" + "source": "import { Map } from '../shim/Map';\r\nimport { Evented } from '../core/Evented';\r\nimport { Registry } from './Registry';\r\nexport class RegistryHandler extends Evented {\r\n constructor() {\r\n super();\r\n this._registry = new Registry();\r\n this._registryWidgetLabelMap = new Map();\r\n this._registryInjectorLabelMap = new Map();\r\n this.own(this._registry);\r\n const destroy = () => {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n this.baseRegistry = undefined;\r\n }\r\n };\r\n this.own({ destroy });\r\n }\r\n set base(baseRegistry) {\r\n if (this.baseRegistry) {\r\n this._registryWidgetLabelMap.delete(this.baseRegistry);\r\n this._registryInjectorLabelMap.delete(this.baseRegistry);\r\n }\r\n this.baseRegistry = baseRegistry;\r\n }\r\n define(label, widget) {\r\n this._registry.define(label, widget);\r\n }\r\n defineInjector(label, injector) {\r\n this._registry.defineInjector(label, injector);\r\n }\r\n has(label) {\r\n return this._registry.has(label) || Boolean(this.baseRegistry && this.baseRegistry.has(label));\r\n }\r\n hasInjector(label) {\r\n return this._registry.hasInjector(label) || Boolean(this.baseRegistry && this.baseRegistry.hasInjector(label));\r\n }\r\n get(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'get', this._registryWidgetLabelMap);\r\n }\r\n getInjector(label, globalPrecedence = false) {\r\n return this._get(label, globalPrecedence, 'getInjector', this._registryInjectorLabelMap);\r\n }\r\n _get(label, globalPrecedence, getFunctionName, labelMap) {\r\n const registries = globalPrecedence ? [this.baseRegistry, this._registry] : [this._registry, this.baseRegistry];\r\n for (let i = 0; i < registries.length; i++) {\r\n const registry = registries[i];\r\n if (!registry) {\r\n continue;\r\n }\r\n const item = registry[getFunctionName](label);\r\n const registeredLabels = labelMap.get(registry) || [];\r\n if (item) {\r\n return item;\r\n }\r\n else if (registeredLabels.indexOf(label) === -1) {\r\n const handle = registry.on(label, (event) => {\r\n if (event.action === 'loaded' &&\r\n this[getFunctionName](label, globalPrecedence) === event.item) {\r\n this.emit({ type: 'invalidate' });\r\n }\r\n });\r\n this.own(handle);\r\n labelMap.set(registry, [...registeredLabels, label]);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nexport default RegistryHandler;\r\n//# sourceMappingURL=RegistryHandler.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "name": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "id": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "name": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "index": 14, "index2": 26, - "size": 14386, + "size": 13720, "cacheable": true, "built": true, "optional": false, @@ -4109,18 +4117,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./WidgetBase", "loc": "2:0-50" @@ -4131,8 +4139,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/WidgetBase", - "loc": "5:0-58" + "userRequest": "@dojo/framework/widget-core/WidgetBase", + "loc": "5:0-68" } ], "usedExports": [ @@ -4146,12 +4154,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Map from '@dojo/shim/Map';\nimport WeakMap from '@dojo/shim/WeakMap';\nimport Symbol from '@dojo/shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach((args, reaction) => {\n if (args.changed) {\n reaction.call(this, args.previousProperties, args.newProperties);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n _mapDiffPropertyReactions(newProperties, changedPropertyKeys) {\n const reactionFunctions = this.getDecorator('diffReaction');\n return reactionFunctions.reduce((reactionPropertyMap, { reaction, propertyName }) => {\n let reactionArguments = reactionPropertyMap.get(reaction);\n if (reactionArguments === undefined) {\n reactionArguments = {\n previousProperties: {},\n newProperties: {},\n changed: false\n };\n }\n reactionArguments.previousProperties[propertyName] = this._properties[propertyName];\n reactionArguments.newProperties[propertyName] = newProperties[propertyName];\n if (changedPropertyKeys.indexOf(propertyName) !== -1) {\n reactionArguments.changed = true;\n }\n reactionPropertyMap.set(reaction, reactionArguments);\n return reactionPropertyMap;\n }, new Map());\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n return afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" + "source": "import Map from '../shim/Map';\nimport WeakMap from '../shim/WeakMap';\nimport Symbol from '../shim/Symbol';\nimport { v } from './d';\nimport { auto } from './diff';\nimport RegistryHandler from './RegistryHandler';\nimport NodeHandler from './NodeHandler';\nimport { widgetInstanceMap } from './vdom';\nimport { isWidgetBaseConstructor, WIDGET_BASE_TYPE } from './Registry';\nconst decoratorMap = new Map();\nconst boundAuto = auto.bind(null);\nexport const noBind = Symbol.for('dojoNoBind');\n/**\n * Main widget base for all widgets to extend\n */\nexport class WidgetBase {\n /**\n * @constructor\n */\n constructor() {\n /**\n * Indicates if it is the initial set properties cycle\n */\n this._initialProperties = true;\n /**\n * Array of property keys considered changed from the previous set properties\n */\n this._changedPropertyKeys = [];\n this._nodeHandler = new NodeHandler();\n this._handles = [];\n this._children = [];\n this._decoratorCache = new Map();\n this._properties = {};\n this._boundRenderFunc = this.render.bind(this);\n this._boundInvalidate = this.invalidate.bind(this);\n widgetInstanceMap.set(this, {\n dirty: true,\n onAttach: () => {\n this.onAttach();\n },\n onDetach: () => {\n this.onDetach();\n this.destroy();\n },\n nodeHandler: this._nodeHandler,\n registry: () => {\n return this.registry;\n },\n coreProperties: {},\n rendering: false,\n inputProperties: {}\n });\n this._runAfterConstructors();\n }\n meta(MetaType) {\n if (this._metaMap === undefined) {\n this._metaMap = new Map();\n }\n let cached = this._metaMap.get(MetaType);\n if (!cached) {\n cached = new MetaType({\n invalidate: this._boundInvalidate,\n nodeHandler: this._nodeHandler,\n bind: this\n });\n this.own(cached);\n this._metaMap.set(MetaType, cached);\n }\n return cached;\n }\n onAttach() {\n // Do nothing by default.\n }\n onDetach() {\n // Do nothing by default.\n }\n get properties() {\n return this._properties;\n }\n get changedPropertyKeys() {\n return [...this._changedPropertyKeys];\n }\n __setCoreProperties__(coreProperties) {\n const { baseRegistry } = coreProperties;\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.coreProperties.baseRegistry !== baseRegistry) {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n this._registry.base = baseRegistry;\n this.invalidate();\n }\n instanceData.coreProperties = coreProperties;\n }\n __setProperties__(originalProperties) {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.inputProperties = originalProperties;\n const properties = this._runBeforeProperties(originalProperties);\n const registeredDiffPropertyNames = this.getDecorator('registeredDiffProperty');\n const changedPropertyKeys = [];\n const propertyNames = Object.keys(properties);\n if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) {\n const allProperties = [...propertyNames, ...Object.keys(this._properties)];\n const checkedProperties = [];\n const diffPropertyResults = {};\n let runReactions = false;\n for (let i = 0; i < allProperties.length; i++) {\n const propertyName = allProperties[i];\n if (checkedProperties.indexOf(propertyName) !== -1) {\n continue;\n }\n checkedProperties.push(propertyName);\n const previousProperty = this._properties[propertyName];\n const newProperty = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n if (registeredDiffPropertyNames.indexOf(propertyName) !== -1) {\n runReactions = true;\n const diffFunctions = this.getDecorator(`diffProperty:${propertyName}`);\n for (let i = 0; i < diffFunctions.length; i++) {\n const result = diffFunctions[i](previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n else {\n const result = boundAuto(previousProperty, newProperty);\n if (result.changed && changedPropertyKeys.indexOf(propertyName) === -1) {\n changedPropertyKeys.push(propertyName);\n }\n if (propertyName in properties) {\n diffPropertyResults[propertyName] = result.value;\n }\n }\n }\n if (runReactions) {\n const reactionFunctions = this.getDecorator('diffReaction');\n const executedReactions = [];\n reactionFunctions.forEach(({ reaction, propertyName }) => {\n const propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1;\n const reactionRun = executedReactions.indexOf(reaction) !== -1;\n if (propertyChanged && !reactionRun) {\n reaction.call(this, this._properties, diffPropertyResults);\n executedReactions.push(reaction);\n }\n });\n }\n this._properties = diffPropertyResults;\n this._changedPropertyKeys = changedPropertyKeys;\n }\n else {\n this._initialProperties = false;\n for (let i = 0; i < propertyNames.length; i++) {\n const propertyName = propertyNames[i];\n if (typeof properties[propertyName] === 'function') {\n properties[propertyName] = this._bindFunctionProperty(properties[propertyName], instanceData.coreProperties.bind);\n }\n else {\n changedPropertyKeys.push(propertyName);\n }\n }\n this._changedPropertyKeys = changedPropertyKeys;\n this._properties = Object.assign({}, properties);\n }\n if (this._changedPropertyKeys.length > 0) {\n this.invalidate();\n }\n }\n get children() {\n return this._children;\n }\n __setChildren__(children) {\n if (this._children.length > 0 || children.length > 0) {\n this._children = children;\n this.invalidate();\n }\n }\n __render__() {\n const instanceData = widgetInstanceMap.get(this);\n instanceData.dirty = false;\n const render = this._runBeforeRenders();\n let dNode = render();\n dNode = this.runAfterRenders(dNode);\n this._nodeHandler.clear();\n return dNode;\n }\n invalidate() {\n const instanceData = widgetInstanceMap.get(this);\n if (instanceData.invalidate) {\n instanceData.invalidate();\n }\n }\n render() {\n return v('div', {}, this.children);\n }\n /**\n * Function to add decorators to WidgetBase\n *\n * @param decoratorKey The key of the decorator\n * @param value The value of the decorator\n */\n addDecorator(decoratorKey, value) {\n value = Array.isArray(value) ? value : [value];\n if (this.hasOwnProperty('constructor')) {\n let decoratorList = decoratorMap.get(this.constructor);\n if (!decoratorList) {\n decoratorList = new Map();\n decoratorMap.set(this.constructor, decoratorList);\n }\n let specificDecoratorList = decoratorList.get(decoratorKey);\n if (!specificDecoratorList) {\n specificDecoratorList = [];\n decoratorList.set(decoratorKey, specificDecoratorList);\n }\n specificDecoratorList.push(...value);\n }\n else {\n const decorators = this.getDecorator(decoratorKey);\n this._decoratorCache.set(decoratorKey, [...decorators, ...value]);\n }\n }\n /**\n * Function to build the list of decorators from the global decorator map.\n *\n * @param decoratorKey The key of the decorator\n * @return An array of decorator values\n * @private\n */\n _buildDecoratorList(decoratorKey) {\n const allDecorators = [];\n let constructor = this.constructor;\n while (constructor) {\n const instanceMap = decoratorMap.get(constructor);\n if (instanceMap) {\n const decorators = instanceMap.get(decoratorKey);\n if (decorators) {\n allDecorators.unshift(...decorators);\n }\n }\n constructor = Object.getPrototypeOf(constructor);\n }\n return allDecorators;\n }\n /**\n * Function to retrieve decorator values\n *\n * @param decoratorKey The key of the decorator\n * @returns An array of decorator values\n */\n getDecorator(decoratorKey) {\n let allDecorators = this._decoratorCache.get(decoratorKey);\n if (allDecorators !== undefined) {\n return allDecorators;\n }\n allDecorators = this._buildDecoratorList(decoratorKey);\n this._decoratorCache.set(decoratorKey, allDecorators);\n return allDecorators;\n }\n /**\n * Binds unbound property functions to the specified `bind` property\n *\n * @param properties properties to check for functions\n */\n _bindFunctionProperty(property, bind) {\n if (typeof property === 'function' && !property[noBind] && isWidgetBaseConstructor(property) === false) {\n if (this._bindFunctionPropertyMap === undefined) {\n this._bindFunctionPropertyMap = new WeakMap();\n }\n const bindInfo = this._bindFunctionPropertyMap.get(property) || {};\n let { boundFunc, scope } = bindInfo;\n if (boundFunc === undefined || scope !== bind) {\n boundFunc = property.bind(bind);\n this._bindFunctionPropertyMap.set(property, { boundFunc, scope: bind });\n }\n return boundFunc;\n }\n return property;\n }\n get registry() {\n if (this._registry === undefined) {\n this._registry = new RegistryHandler();\n this.own(this._registry);\n this.own(this._registry.on('invalidate', this._boundInvalidate));\n }\n return this._registry;\n }\n _runBeforeProperties(properties) {\n const beforeProperties = this.getDecorator('beforeProperties');\n if (beforeProperties.length > 0) {\n return beforeProperties.reduce((properties, beforePropertiesFunction) => {\n return Object.assign({}, properties, beforePropertiesFunction.call(this, properties));\n }, Object.assign({}, properties));\n }\n return properties;\n }\n /**\n * Run all registered before renders and return the updated render method\n */\n _runBeforeRenders() {\n const beforeRenders = this.getDecorator('beforeRender');\n if (beforeRenders.length > 0) {\n return beforeRenders.reduce((render, beforeRenderFunction) => {\n const updatedRender = beforeRenderFunction.call(this, render, this._properties, this._children);\n if (!updatedRender) {\n console.warn('Render function not returned from beforeRender, using previous render');\n return render;\n }\n return updatedRender;\n }, this._boundRenderFunc);\n }\n return this._boundRenderFunc;\n }\n /**\n * Run all registered after renders and return the decorated DNodes\n *\n * @param dNode The DNodes to run through the after renders\n */\n runAfterRenders(dNode) {\n const afterRenders = this.getDecorator('afterRender');\n if (afterRenders.length > 0) {\n dNode = afterRenders.reduce((dNode, afterRenderFunction) => {\n return afterRenderFunction.call(this, dNode);\n }, dNode);\n }\n if (this._metaMap !== undefined) {\n this._metaMap.forEach((meta) => {\n meta.afterRender();\n });\n }\n return dNode;\n }\n _runAfterConstructors() {\n const afterConstructors = this.getDecorator('afterConstructor');\n if (afterConstructors.length > 0) {\n afterConstructors.forEach((afterConstructor) => afterConstructor.call(this));\n }\n }\n own(handle) {\n this._handles.push(handle);\n }\n destroy() {\n while (this._handles.length > 0) {\n const handle = this._handles.pop();\n if (handle) {\n handle.destroy();\n }\n }\n }\n}\n/**\n * static identifier\n */\nWidgetBase._type = WIDGET_BASE_TYPE;\nexport default WidgetBase;\n//# sourceMappingURL=WidgetBase.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\animations\\cssTransitions.mjs", - "name": "./node_modules/@dojo/widget-core/animations/cssTransitions.mjs", + "id": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\animations\\cssTransitions.mjs", + "name": "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.mjs", "index": 33, "index2": 27, "size": 2288, @@ -4163,18 +4171,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "../animations/cssTransitions", "loc": "3:0-58" @@ -4191,12 +4199,12 @@ "source": "let browserSpecificTransitionEndEventName = '';\nlet browserSpecificAnimationEndEventName = '';\nfunction determineBrowserStyleNames(element) {\n if ('WebkitTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'webkitTransitionEnd';\n browserSpecificAnimationEndEventName = 'webkitAnimationEnd';\n }\n else if ('transition' in element.style || 'MozTransition' in element.style) {\n browserSpecificTransitionEndEventName = 'transitionend';\n browserSpecificAnimationEndEventName = 'animationend';\n }\n else {\n throw new Error('Your browser is not supported');\n }\n}\nfunction initialize(element) {\n if (browserSpecificAnimationEndEventName === '') {\n determineBrowserStyleNames(element);\n }\n}\nfunction runAndCleanUp(element, startAnimation, finishAnimation) {\n initialize(element);\n let finished = false;\n let transitionEnd = function () {\n if (!finished) {\n finished = true;\n element.removeEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n element.removeEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n finishAnimation();\n }\n };\n startAnimation();\n element.addEventListener(browserSpecificAnimationEndEventName, transitionEnd);\n element.addEventListener(browserSpecificTransitionEndEventName, transitionEnd);\n}\nfunction exit(node, properties, exitAnimation, removeNode) {\n const activeClass = properties.exitAnimationActive || `${exitAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(exitAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n removeNode();\n });\n}\nfunction enter(node, properties, enterAnimation) {\n const activeClass = properties.enterAnimationActive || `${enterAnimation}-active`;\n runAndCleanUp(node, () => {\n node.classList.add(enterAnimation);\n requestAnimationFrame(function () {\n node.classList.add(activeClass);\n });\n }, () => {\n node.classList.remove(enterAnimation);\n node.classList.remove(activeClass);\n });\n}\nexport default {\n enter,\n exit\n};\n//# sourceMappingURL=cssTransitions.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/d.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\d.mjs", - "name": "./node_modules/@dojo/widget-core/d.mjs", + "id": "./node_modules/@dojo/framework/widget-core/d.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\d.mjs", + "name": "./node_modules/@dojo/framework/widget-core/d.mjs", "index": 4, "index2": 8, - "size": 3270, + "size": 3267, "cacheable": true, "built": true, "optional": false, @@ -4205,54 +4213,54 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./d", "loc": "5:0-29" }, - { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "type": "harmony import", - "userRequest": "./d", - "loc": "4:0-24" - }, { "moduleId": "./src/menu/Menu.ts", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts", "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/d", - "loc": "2:0-40" + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "type": "harmony import", + "userRequest": "./d", + "loc": "4:0-24" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../d", "loc": "5:0-27" }, { - "moduleId": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/widget-core/vdom.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "type": "harmony import", "userRequest": "./d", "loc": "3:0-65" @@ -4283,12 +4291,12 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import Symbol from '@dojo/shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" + "source": "import Symbol from '../shim/Symbol';\n/**\n * The symbol identifier for a WNode type\n */\nexport const WNODE = Symbol('Identifier for a WNode.');\n/**\n * The symbol identifier for a VNode type\n */\nexport const VNODE = Symbol('Identifier for a VNode.');\n/**\n * The symbol identifier for a VNode type created using dom()\n */\nexport const DOMVNODE = Symbol('Identifier for a VNode created using existing dom.');\n/**\n * Helper function that returns true if the `DNode` is a `WNode` using the `type` property\n */\nexport function isWNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === WNODE);\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` using the `type` property\n */\nexport function isVNode(child) {\n return Boolean(child && typeof child !== 'string' && (child.type === VNODE || child.type === DOMVNODE));\n}\n/**\n * Helper function that returns true if the `DNode` is a `VNode` created with `dom()` using the `type` property\n */\nexport function isDomVNode(child) {\n return Boolean(child && typeof child !== 'string' && child.type === DOMVNODE);\n}\nexport function isElementNode(value) {\n return !!value.tagName;\n}\nexport function decorate(dNodes, optionsOrModifier, predicate) {\n let shallow = false;\n let modifier;\n if (typeof optionsOrModifier === 'function') {\n modifier = optionsOrModifier;\n }\n else {\n modifier = optionsOrModifier.modifier;\n predicate = optionsOrModifier.predicate;\n shallow = optionsOrModifier.shallow || false;\n }\n let nodes = Array.isArray(dNodes) ? [...dNodes] : [dNodes];\n function breaker() {\n nodes = [];\n }\n while (nodes.length) {\n const node = nodes.shift();\n if (node) {\n if (!shallow && (isWNode(node) || isVNode(node)) && node.children) {\n nodes = [...nodes, ...node.children];\n }\n if (!predicate || predicate(node)) {\n modifier(node, breaker);\n }\n }\n }\n return dNodes;\n}\n/**\n * Wrapper function for calls to create a widget.\n */\nexport function w(widgetConstructor, properties, children = []) {\n return {\n children,\n widgetConstructor,\n properties,\n type: WNODE\n };\n}\nexport function v(tag, propertiesOrChildren = {}, children = undefined) {\n let properties = propertiesOrChildren;\n let deferredPropertiesCallback;\n if (Array.isArray(propertiesOrChildren)) {\n children = propertiesOrChildren;\n properties = {};\n }\n if (typeof properties === 'function') {\n deferredPropertiesCallback = properties;\n properties = {};\n }\n return {\n tag,\n deferredPropertiesCallback,\n children,\n properties,\n type: VNODE\n };\n}\n/**\n * Create a VNode for an existing DOM Node.\n */\nexport function dom({ node, attrs = {}, props = {}, on = {}, diffType = 'none' }, children) {\n return {\n tag: isElementNode(node) ? node.tagName.toLowerCase() : '',\n properties: props,\n attributes: attrs,\n events: on,\n children,\n type: DOMVNODE,\n domNode: node,\n text: isElementNode(node) ? undefined : node.data,\n diffType\n };\n}\n//# sourceMappingURL=d.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "index": 41, "index2": 36, "size": 365, @@ -4300,18 +4308,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./decorators/alwaysRender", "loc": "8:0-57" @@ -4329,9 +4337,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\nexport function alwaysRender() {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function () {\n this.invalidate();\n })(target);\n });\n}\nexport default alwaysRender;\n//# sourceMappingURL=alwaysRender.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\beforeProperties.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\beforeProperties.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "index": 39, "index2": 32, "size": 331, @@ -4343,27 +4351,27 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "issuerId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "issuerName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "2:0-54" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./beforeProperties", "loc": "3:0-54" @@ -4381,9 +4389,9 @@ "source": "import { handleDecorator } from './handleDecorator';\nexport function beforeProperties(method) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method);\n });\n}\nexport default beforeProperties;\n//# sourceMappingURL=beforeProperties.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "index": 12, "index2": 38, "size": 728, @@ -4408,8 +4416,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/decorators/customElement", - "loc": "3:0-75" + "userRequest": "@dojo/framework/widget-core/decorators/customElement", + "loc": "3:0-85" } ], "usedExports": [ @@ -4424,12 +4432,12 @@ "source": "import { CustomElementChildType } from '../registerCustomElement';\nimport Registry from '../Registry';\n/**\n * This Decorator is provided properties that define the behavior of a custom element, and\n * registers that custom element.\n */\nexport function customElement({ tag, properties = [], attributes = [], events = [], childType = CustomElementChildType.DOJO, registryFactory = () => new Registry() }) {\n return function (target) {\n target.prototype.__customElementDescriptor = {\n tagName: tag,\n attributes,\n properties,\n events,\n childType,\n registryFactory\n };\n };\n}\nexport default customElement;\n//# sourceMappingURL=customElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\diffProperty.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "index": 40, "index2": 34, - "size": 973, + "size": 1014, "cacheable": true, "built": true, "optional": false, @@ -4438,18 +4446,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/diffProperty", "loc": "5:0-60" @@ -4464,12 +4472,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import { handleDecorator } from './handleDecorator';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" + "source": "import { handleDecorator } from './handleDecorator';\nimport { auto } from './../diff';\n/**\n * Decorator that can be used to register a function as a specific property diff\n *\n * @param propertyName The name of the property of which the diff function is applied\n * @param diffType The diff type, default is DiffType.AUTO.\n * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM\n */\nexport function diffProperty(propertyName, diffFunction = auto, reactionFunction) {\n return handleDecorator((target, propertyKey) => {\n target.addDecorator(`diffProperty:${propertyName}`, diffFunction.bind(null));\n target.addDecorator('registeredDiffProperty', propertyName);\n if (reactionFunction || propertyKey) {\n target.addDecorator('diffReaction', {\n propertyName,\n reaction: propertyKey ? target[propertyKey] : reactionFunction\n });\n }\n });\n}\nexport default diffProperty;\n//# sourceMappingURL=diffProperty.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\handleDecorator.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/handleDecorator.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\handleDecorator.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.mjs", "index": 35, "index2": 28, "size": 512, @@ -4481,63 +4489,63 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/handleDecorator", "loc": "4:0-66" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\alwaysRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/alwaysRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\alwaysRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\afterRender.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/afterRender.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\afterRender.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/afterRender.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "2:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\diffProperty.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/diffProperty.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\beforeProperties.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/beforeProperties.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\beforeProperties.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.mjs", "type": "harmony import", "userRequest": "./handleDecorator", "loc": "1:0-52" @@ -4555,9 +4563,9 @@ "source": "/**\n * Generic decorator handler to take care of whether or not the decorator was called at the class level\n * or the method level.\n *\n * @param handler\n */\nexport function handleDecorator(handler) {\n return function (target, propertyKey, descriptor) {\n if (typeof target === 'function') {\n handler(target.prototype, undefined);\n }\n else {\n handler(target, propertyKey);\n }\n };\n}\nexport default handleDecorator;\n//# sourceMappingURL=handleDecorator.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/decorators/inject.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\inject.mjs", - "name": "./node_modules/@dojo/widget-core/decorators/inject.mjs", + "id": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", + "name": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "index": 38, "index2": 33, "size": 1532, @@ -4569,18 +4577,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "issuerId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "issuerName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../decorators/inject", "loc": "3:0-48" @@ -4595,12 +4603,12 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import WeakMap from '@dojo/shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" + "source": "import WeakMap from '../../shim/WeakMap';\nimport { handleDecorator } from './handleDecorator';\nimport { beforeProperties } from './beforeProperties';\n/**\n * Map of instances against registered injectors.\n */\nconst registeredInjectorsMap = new WeakMap();\n/**\n * Decorator retrieves an injector from an available registry using the name and\n * calls the `getProperties` function with the payload from the injector\n * and current properties with the the injected properties returned.\n *\n * @param InjectConfig the inject configuration\n */\nexport function inject({ name, getProperties }) {\n return handleDecorator((target, propertyKey) => {\n beforeProperties(function (properties) {\n const injectorItem = this.registry.getInjector(name);\n if (injectorItem) {\n const { injector, invalidator } = injectorItem;\n const registeredInjectors = registeredInjectorsMap.get(this) || [];\n if (registeredInjectors.length === 0) {\n registeredInjectorsMap.set(this, registeredInjectors);\n }\n if (registeredInjectors.indexOf(injectorItem) === -1) {\n this.own(invalidator.on('invalidate', () => {\n this.invalidate();\n }));\n registeredInjectors.push(injectorItem);\n }\n return getProperties(injector(), properties);\n }\n })(target);\n });\n}\nexport default inject;\n//# sourceMappingURL=inject.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/diff.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\diff.mjs", - "name": "./node_modules/@dojo/widget-core/diff.mjs", + "id": "./node_modules/@dojo/framework/widget-core/diff.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\diff.mjs", + "name": "./node_modules/@dojo/framework/widget-core/diff.mjs", "index": 20, "index2": 20, "size": 1930, @@ -4612,30 +4620,39 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./diff", "loc": "5:0-30" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "./../diff", "loc": "6:0-36" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\diffProperty.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.mjs", + "type": "harmony import", + "userRequest": "./../diff", + "loc": "2:0-33" } ], "usedExports": [ @@ -4654,12 +4671,12 @@ "source": "import { WIDGET_BASE_TYPE } from './Registry';\nfunction isObjectOrArray(value) {\n return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value);\n}\nexport function always(previousProperty, newProperty) {\n return {\n changed: true,\n value: newProperty\n };\n}\nexport function ignore(previousProperty, newProperty) {\n return {\n changed: false,\n value: newProperty\n };\n}\nexport function reference(previousProperty, newProperty) {\n return {\n changed: previousProperty !== newProperty,\n value: newProperty\n };\n}\nexport function shallow(previousProperty, newProperty) {\n let changed = false;\n const validOldProperty = previousProperty && isObjectOrArray(previousProperty);\n const validNewProperty = newProperty && isObjectOrArray(newProperty);\n if (!validOldProperty || !validNewProperty) {\n return {\n changed: true,\n value: newProperty\n };\n }\n const previousKeys = Object.keys(previousProperty);\n const newKeys = Object.keys(newProperty);\n if (previousKeys.length !== newKeys.length) {\n changed = true;\n }\n else {\n changed = newKeys.some((key) => {\n return newProperty[key] !== previousProperty[key];\n });\n }\n return {\n changed,\n value: newProperty\n };\n}\nexport function auto(previousProperty, newProperty) {\n let result;\n if (typeof newProperty === 'function') {\n if (newProperty._type === WIDGET_BASE_TYPE) {\n result = reference(previousProperty, newProperty);\n }\n else {\n result = ignore(previousProperty, newProperty);\n }\n }\n else if (isObjectOrArray(newProperty)) {\n result = shallow(previousProperty, newProperty);\n }\n else {\n result = reference(previousProperty, newProperty);\n }\n return result;\n}\n//# sourceMappingURL=diff.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "index": 32, "index2": 30, - "size": 5852, + "size": 5683, "cacheable": true, "built": true, "optional": false, @@ -4668,18 +4685,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Projector", "loc": "3:0-52" @@ -4696,15 +4713,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '@dojo/core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender(),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", [Object]),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { assign } from '../../core/lang';\nimport cssTransitions from '../animations/cssTransitions';\nimport { afterRender } from './../decorators/afterRender';\nimport { v } from './../d';\nimport { dom } from './../vdom';\n/**\n * Represents the attach state of the projector\n */\nexport var ProjectorAttachState;\n(function (ProjectorAttachState) {\n ProjectorAttachState[ProjectorAttachState[\"Attached\"] = 1] = \"Attached\";\n ProjectorAttachState[ProjectorAttachState[\"Detached\"] = 2] = \"Detached\";\n})(ProjectorAttachState || (ProjectorAttachState = {}));\n/**\n * Attach type for the projector\n */\nexport var AttachType;\n(function (AttachType) {\n AttachType[AttachType[\"Append\"] = 1] = \"Append\";\n AttachType[AttachType[\"Merge\"] = 2] = \"Merge\";\n})(AttachType || (AttachType = {}));\nexport function ProjectorMixin(Base) {\n class Projector extends Base {\n constructor(...args) {\n super(...args);\n this._root = document.body;\n this._async = true;\n this._projectorProperties = {};\n this._projectionOptions = {\n transitions: cssTransitions\n };\n this.root = document.body;\n this.projectorState = ProjectorAttachState.Detached;\n }\n append(root) {\n const options = {\n type: AttachType.Append,\n root\n };\n return this._attach(options);\n }\n merge(root) {\n const options = {\n type: AttachType.Merge,\n root\n };\n return this._attach(options);\n }\n set root(root) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change root element');\n }\n this._root = root;\n }\n get root() {\n return this._root;\n }\n get async() {\n return this._async;\n }\n set async(async) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot change async mode');\n }\n this._async = async;\n }\n sandbox(doc = document) {\n if (this.projectorState === ProjectorAttachState.Attached) {\n throw new Error('Projector already attached, cannot create sandbox');\n }\n this._async = false;\n const previousRoot = this.root;\n /* free up the document fragment for GC */\n this.own({\n destroy: () => {\n this._root = previousRoot;\n }\n });\n this._attach({\n /* DocumentFragment is not assignable to Element, but provides everything needed to work */\n root: doc.createDocumentFragment(),\n type: AttachType.Append\n });\n }\n setChildren(children) {\n this.__setChildren__(children);\n }\n setProperties(properties) {\n this.__setProperties__(properties);\n }\n __setProperties__(properties) {\n if (this._projectorProperties && this._projectorProperties.registry !== properties.registry) {\n if (this._projectorProperties.registry) {\n this._projectorProperties.registry.destroy();\n }\n }\n this._projectorProperties = assign({}, properties);\n super.__setCoreProperties__({ bind: this, baseRegistry: properties.registry });\n super.__setProperties__(properties);\n }\n toHtml() {\n if (this.projectorState !== ProjectorAttachState.Attached || !this._projection) {\n throw new Error('Projector is not attached, cannot return an HTML string of projection.');\n }\n return this._projection.domNode.childNodes[0].outerHTML;\n }\n afterRender(result) {\n let node = result;\n if (typeof result === 'string' || result === null || result === undefined) {\n node = v('span', {}, [result]);\n }\n return node;\n }\n destroy() {\n super.destroy();\n }\n _attach({ type, root }) {\n if (root) {\n this.root = root;\n }\n if (this._attachHandle) {\n return this._attachHandle;\n }\n this.projectorState = ProjectorAttachState.Attached;\n const handle = {\n destroy: () => {\n if (this.projectorState === ProjectorAttachState.Attached) {\n this._projection = undefined;\n this.projectorState = ProjectorAttachState.Detached;\n }\n }\n };\n this.own(handle);\n this._attachHandle = handle;\n this._projectionOptions = Object.assign({}, this._projectionOptions, { sync: !this._async });\n switch (type) {\n case AttachType.Append:\n this._projection = dom.append(this.root, this, this._projectionOptions);\n break;\n case AttachType.Merge:\n this._projection = dom.merge(this.root, this, this._projectionOptions);\n break;\n }\n return this._attachHandle;\n }\n }\n tslib_1.__decorate([\n afterRender()\n ], Projector.prototype, \"afterRender\", null);\n return Projector;\n}\nexport default ProjectorMixin;\n//# sourceMappingURL=Projector.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "name": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "id": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "name": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "index": 36, "index2": 35, - "size": 5320, + "size": 5157, "cacheable": true, "built": true, "optional": false, @@ -4713,18 +4730,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "./mixins/Themed", "loc": "7:0-56" @@ -4735,8 +4752,8 @@ "module": "./src/menu/Menu.ts", "moduleName": "./src/menu/Menu.ts", "type": "harmony import", - "userRequest": "@dojo/widget-core/mixins/Themed", - "loc": "4:0-69" + "userRequest": "@dojo/framework/widget-core/mixins/Themed", + "loc": "4:0-79" } ], "usedExports": [ @@ -4753,15 +4770,15 @@ ], "optimizationBailout": [], "depth": 3, - "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow),\n tslib_1.__metadata(\"design:type\", Function),\n tslib_1.__metadata(\"design:paramtypes\", []),\n tslib_1.__metadata(\"design:returntype\", void 0)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { Injector } from './../Injector';\nimport { inject } from './../decorators/inject';\nimport { handleDecorator } from './../decorators/handleDecorator';\nimport { diffProperty } from './../decorators/diffProperty';\nimport { shallow } from './../diff';\nconst THEME_KEY = ' _key';\nexport const INJECTED_THEME_KEY = Symbol('theme');\n/**\n * Decorator for base css classes\n */\nexport function theme(theme) {\n return handleDecorator((target) => {\n target.addDecorator('baseThemeClasses', theme);\n });\n}\n/**\n * Creates a reverse lookup for the classes passed in via the `theme` function.\n *\n * @param classes The baseClasses object\n * @requires\n */\nfunction createThemeClassesLookup(classes) {\n return classes.reduce((currentClassNames, baseClass) => {\n Object.keys(baseClass).forEach((key) => {\n currentClassNames[baseClass[key]] = key;\n });\n return currentClassNames;\n }, {});\n}\n/**\n * Convenience function that is given a theme and an optional registry, the theme\n * injector is defined against the registry, returning the theme.\n *\n * @param theme the theme to set\n * @param themeRegistry registry to define the theme injector against. Defaults\n * to the global registry\n *\n * @returns the theme injector used to set the theme\n */\nexport function registerThemeInjector(theme, themeRegistry) {\n const themeInjector = new Injector(theme);\n themeRegistry.defineInjector(INJECTED_THEME_KEY, (invalidator) => {\n themeInjector.setInvalidator(invalidator);\n return () => themeInjector.get();\n });\n return themeInjector;\n}\n/**\n * Function that returns a class decorated with with Themed functionality\n */\nexport function ThemedMixin(Base) {\n let Themed = class Themed extends Base {\n constructor() {\n super(...arguments);\n /**\n * Registered base theme keys\n */\n this._registeredBaseThemeKeys = [];\n /**\n * Indicates if classes meta data need to be calculated.\n */\n this._recalculateClasses = true;\n /**\n * Loaded theme\n */\n this._theme = {};\n }\n theme(classes) {\n if (this._recalculateClasses) {\n this._recalculateThemeClasses();\n }\n if (Array.isArray(classes)) {\n return classes.map((className) => this._getThemeClass(className));\n }\n return this._getThemeClass(classes);\n }\n /**\n * Function fired when `theme` or `extraClasses` are changed.\n */\n onPropertiesChanged() {\n this._recalculateClasses = true;\n }\n _getThemeClass(className) {\n if (className === undefined || className === null) {\n return className;\n }\n const extraClasses = this.properties.extraClasses || {};\n const themeClassName = this._baseThemeClassesReverseLookup[className];\n let resultClassNames = [];\n if (!themeClassName) {\n console.warn(`Class name: '${className}' not found in theme`);\n return null;\n }\n if (extraClasses[themeClassName]) {\n resultClassNames.push(extraClasses[themeClassName]);\n }\n if (this._theme[themeClassName]) {\n resultClassNames.push(this._theme[themeClassName]);\n }\n else {\n resultClassNames.push(this._registeredBaseTheme[themeClassName]);\n }\n return resultClassNames.join(' ');\n }\n _recalculateThemeClasses() {\n const { theme = {} } = this.properties;\n const baseThemes = this.getDecorator('baseThemeClasses');\n if (!this._registeredBaseTheme) {\n this._registeredBaseTheme = baseThemes.reduce((finalBaseTheme, baseTheme) => {\n const _a = THEME_KEY, key = baseTheme[_a], classes = tslib_1.__rest(baseTheme, [typeof _a === \"symbol\" ? _a : _a + \"\"]);\n this._registeredBaseThemeKeys.push(key);\n return Object.assign({}, finalBaseTheme, classes);\n }, {});\n this._baseThemeClassesReverseLookup = createThemeClassesLookup(baseThemes);\n }\n this._theme = this._registeredBaseThemeKeys.reduce((baseTheme, themeKey) => {\n return Object.assign({}, baseTheme, theme[themeKey]);\n }, {});\n this._recalculateClasses = false;\n }\n };\n tslib_1.__decorate([\n diffProperty('theme', shallow),\n diffProperty('extraClasses', shallow)\n ], Themed.prototype, \"onPropertiesChanged\", null);\n Themed = tslib_1.__decorate([\n inject({\n name: INJECTED_THEME_KEY,\n getProperties: (theme, properties) => {\n if (!properties.theme) {\n return { theme };\n }\n return {};\n }\n })\n ], Themed);\n return Themed;\n}\nexport default ThemedMixin;\n//# sourceMappingURL=Themed.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "name": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "id": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "name": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "index": 13, "index2": 37, - "size": 9124, + "size": 9118, "cacheable": true, "built": true, "optional": false, @@ -4783,14 +4800,14 @@ "module": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "moduleName": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "type": "cjs require", - "userRequest": "@dojo/widget-core/registerCustomElement", - "loc": "4:28-78" + "userRequest": "@dojo/framework/widget-core/registerCustomElement", + "loc": "4:28-88" }, { - "moduleId": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", "type": "harmony import", "userRequest": "../registerCustomElement", "loc": "1:0-66" @@ -4806,15 +4823,15 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '@dojo/shim/array';\nimport { w, dom } from './d';\nimport global from '@dojo/shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" + "source": "import * as tslib_1 from \"tslib\";\nimport { WidgetBase, noBind } from './WidgetBase';\nimport { ProjectorMixin } from './mixins/Projector';\nimport { from } from '../shim/array';\nimport { w, dom } from './d';\nimport global from '../shim/global';\nimport { registerThemeInjector } from './mixins/Themed';\nimport { alwaysRender } from './decorators/alwaysRender';\nexport var CustomElementChildType;\n(function (CustomElementChildType) {\n CustomElementChildType[\"DOJO\"] = \"DOJO\";\n CustomElementChildType[\"NODE\"] = \"NODE\";\n CustomElementChildType[\"TEXT\"] = \"TEXT\";\n})(CustomElementChildType || (CustomElementChildType = {}));\nexport function DomToWidgetWrapper(domNode) {\n let DomToWidgetWrapper = class DomToWidgetWrapper extends WidgetBase {\n render() {\n const properties = Object.keys(this.properties).reduce((props, key) => {\n const value = this.properties[key];\n if (key.indexOf('on') === 0) {\n key = `__${key}`;\n }\n props[key] = value;\n return props;\n }, {});\n return dom({ node: domNode, props: properties, diffType: 'dom' });\n }\n static get domNode() {\n return domNode;\n }\n };\n DomToWidgetWrapper = tslib_1.__decorate([\n alwaysRender()\n ], DomToWidgetWrapper);\n return DomToWidgetWrapper;\n}\nexport function create(descriptor, WidgetConstructor) {\n const { attributes, childType, registryFactory } = descriptor;\n const attributeMap = {};\n attributes.forEach((propertyName) => {\n const attributeName = propertyName.toLowerCase();\n attributeMap[attributeName] = propertyName;\n });\n return class extends HTMLElement {\n constructor() {\n super(...arguments);\n this._properties = {};\n this._children = [];\n this._eventProperties = {};\n this._initialised = false;\n }\n connectedCallback() {\n if (this._initialised) {\n return;\n }\n const domProperties = {};\n const { attributes, properties, events } = descriptor;\n this._properties = Object.assign({}, this._properties, this._attributesToProperties(attributes));\n [...attributes, ...properties].forEach((propertyName) => {\n const value = this[propertyName];\n const filteredPropertyName = propertyName.replace(/^on/, '__');\n if (value !== undefined) {\n this._properties[propertyName] = value;\n }\n if (filteredPropertyName !== propertyName) {\n domProperties[filteredPropertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n }\n domProperties[propertyName] = {\n get: () => this._getProperty(propertyName),\n set: (value) => this._setProperty(propertyName, value)\n };\n });\n events.forEach((propertyName) => {\n const eventName = propertyName.replace(/^on/, '').toLowerCase();\n const filteredPropertyName = propertyName.replace(/^on/, '__on');\n domProperties[filteredPropertyName] = {\n get: () => this._getEventProperty(propertyName),\n set: (value) => this._setEventProperty(propertyName, value)\n };\n this._eventProperties[propertyName] = undefined;\n this._properties[propertyName] = (...args) => {\n const eventCallback = this._getEventProperty(propertyName);\n if (typeof eventCallback === 'function') {\n eventCallback(...args);\n }\n this.dispatchEvent(new CustomEvent(eventName, {\n bubbles: false,\n detail: args\n }));\n };\n });\n Object.defineProperties(this, domProperties);\n const children = childType === CustomElementChildType.TEXT ? this.childNodes : this.children;\n from(children).forEach((childNode) => {\n if (childType === CustomElementChildType.DOJO) {\n childNode.addEventListener('dojo-ce-render', () => this._render());\n childNode.addEventListener('dojo-ce-connected', () => this._render());\n this._children.push(DomToWidgetWrapper(childNode));\n }\n else {\n this._children.push(dom({ node: childNode, diffType: 'dom' }));\n }\n });\n this.addEventListener('dojo-ce-connected', (e) => this._childConnected(e));\n const widgetProperties = this._properties;\n const renderChildren = () => this.__children__();\n const Wrapper = class extends WidgetBase {\n render() {\n return w(WidgetConstructor, widgetProperties, renderChildren());\n }\n };\n const registry = registryFactory();\n const themeContext = registerThemeInjector(this._getTheme(), registry);\n global.addEventListener('dojo-theme-set', () => themeContext.set(this._getTheme()));\n const Projector = ProjectorMixin(Wrapper);\n this._projector = new Projector();\n this._projector.setProperties({ registry });\n this._projector.append(this);\n this._initialised = true;\n this.dispatchEvent(new CustomEvent('dojo-ce-connected', {\n bubbles: true,\n detail: this\n }));\n }\n _getTheme() {\n if (global && global.dojoce && global.dojoce.theme) {\n return global.dojoce.themes[global.dojoce.theme];\n }\n }\n _childConnected(e) {\n const node = e.detail;\n if (node.parentNode === this) {\n const exists = this._children.some((child) => child.domNode === node);\n if (!exists) {\n node.addEventListener('dojo-ce-render', () => this._render());\n this._children.push(DomToWidgetWrapper(node));\n this._render();\n }\n }\n }\n _render() {\n if (this._projector) {\n this._projector.invalidate();\n this.dispatchEvent(new CustomEvent('dojo-ce-render', {\n bubbles: false,\n detail: this\n }));\n }\n }\n __properties__() {\n return Object.assign({}, this._properties, this._eventProperties);\n }\n __children__() {\n if (childType === CustomElementChildType.DOJO) {\n return this._children.filter((Child) => Child.domNode.isWidget).map((Child) => {\n const { domNode } = Child;\n return w(Child, Object.assign({}, domNode.__properties__()), [...domNode.__children__()]);\n });\n }\n else {\n return this._children;\n }\n }\n attributeChangedCallback(name, oldValue, value) {\n const propertyName = attributeMap[name];\n this._setProperty(propertyName, value);\n }\n _setEventProperty(propertyName, value) {\n this._eventProperties[propertyName] = value;\n }\n _getEventProperty(propertyName) {\n return this._eventProperties[propertyName];\n }\n _setProperty(propertyName, value) {\n if (typeof value === 'function') {\n value[noBind] = true;\n }\n this._properties[propertyName] = value;\n this._render();\n }\n _getProperty(propertyName) {\n return this._properties[propertyName];\n }\n _attributesToProperties(attributes) {\n return attributes.reduce((properties, propertyName) => {\n const attributeName = propertyName.toLowerCase();\n const value = this.getAttribute(attributeName);\n if (value !== null) {\n properties[propertyName] = value;\n }\n return properties;\n }, {});\n }\n static get observedAttributes() {\n return Object.keys(attributeMap);\n }\n get isWidget() {\n return true;\n }\n };\n}\nexport function register(WidgetConstructor) {\n const descriptor = WidgetConstructor.prototype && WidgetConstructor.prototype.__customElementDescriptor;\n if (!descriptor) {\n throw new Error('Cannot get descriptor for Custom Element, have you added the @customElement decorator to your Widget?');\n }\n global.customElements.define(descriptor.tagName, create(descriptor, WidgetConstructor));\n}\nexport default register;\n//# sourceMappingURL=registerCustomElement.mjs.map" }, { - "id": "./node_modules/@dojo/widget-core/vdom.mjs", - "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\vdom.mjs", - "name": "./node_modules/@dojo/widget-core/vdom.mjs", + "id": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "identifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "name": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "index": 29, "index2": 25, - "size": 39734, + "size": 40904, "cacheable": true, "built": true, "optional": false, @@ -4823,27 +4840,27 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "issuerId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "issuerName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\WidgetBase.mjs", - "module": "./node_modules/@dojo/widget-core/WidgetBase.mjs", - "moduleName": "./node_modules/@dojo/widget-core/WidgetBase.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", + "module": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "type": "harmony import", "userRequest": "./vdom", "loc": "8:0-43" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "./../vdom", "loc": "6:0-32" @@ -4862,7 +4879,7 @@ ], "optimizationBailout": [], "depth": 4, - "source": "import global from '@dojo/shim/global';\r\nimport { from as arrayFrom } from '@dojo/shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '@dojo/shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction focusNode(propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode.focus();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (propName === 'focus') {\r\n focusNode(propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const rendered = dnode.rendered || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated;\r\n oldIndex++;\r\n newIndex++;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let child = oldChildren[oldIndex];\r\n if (child) {\r\n let nextIndex = oldIndex + 1;\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n if (insertBefore.rendered) {\r\n insertBeforeChildren.push(...insertBefore.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) {\r\n insertBeforeChildren.push(oldChildren[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map" + "source": "import global from '../shim/global';\r\nimport { from as arrayFrom } from '../shim/array';\r\nimport { isWNode, isVNode, isDomVNode, VNODE, WNODE } from './d';\r\nimport { isWidgetBaseConstructor } from './Registry';\r\nimport WeakMap from '../shim/WeakMap';\r\nconst NAMESPACE_W3 = 'http://www.w3.org/';\r\nconst NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg';\r\nconst NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink';\r\nconst emptyArray = [];\r\nconst nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click'];\r\nexport const widgetInstanceMap = new WeakMap();\r\nconst instanceMap = new WeakMap();\r\nconst nextSiblingMap = new WeakMap();\r\nconst projectorStateMap = new WeakMap();\r\nfunction same(dnode1, dnode2) {\r\n if (isVNode(dnode1) && isVNode(dnode2)) {\r\n if (isDomVNode(dnode1) || isDomVNode(dnode2)) {\r\n if (dnode1.domNode !== dnode2.domNode) {\r\n return false;\r\n }\r\n }\r\n if (dnode1.tag !== dnode2.tag) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n else if (isWNode(dnode1) && isWNode(dnode2)) {\r\n if (dnode1.instance === undefined && typeof dnode2.widgetConstructor === 'string') {\r\n return false;\r\n }\r\n if (dnode1.widgetConstructor !== dnode2.widgetConstructor) {\r\n return false;\r\n }\r\n if (dnode1.properties.key !== dnode2.properties.key) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\nconst missingTransition = function () {\r\n throw new Error('Provide a transitions object to the projectionOptions to do animations');\r\n};\r\nfunction getProjectionOptions(projectorOptions, projectorInstance) {\r\n const defaults = {\r\n namespace: undefined,\r\n styleApplyer: function (domNode, styleName, value) {\r\n domNode.style[styleName] = value;\r\n },\r\n transitions: {\r\n enter: missingTransition,\r\n exit: missingTransition\r\n },\r\n depth: 0,\r\n merge: false,\r\n sync: false,\r\n projectorInstance\r\n };\r\n return Object.assign({}, defaults, projectorOptions);\r\n}\r\nfunction checkStyleValue(styleValue) {\r\n if (typeof styleValue !== 'string') {\r\n throw new Error('Style values must be strings');\r\n }\r\n}\r\nfunction updateEvent(domNode, eventName, currentValue, projectionOptions, bind, previousValue) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode) || new WeakMap();\r\n if (previousValue) {\r\n const previousEvent = eventMap.get(previousValue);\r\n domNode.removeEventListener(eventName, previousEvent);\r\n }\r\n let callback = currentValue.bind(bind);\r\n if (eventName === 'input') {\r\n callback = function (evt) {\r\n currentValue.call(this, evt);\r\n evt.target['oninput-value'] = evt.target.value;\r\n }.bind(bind);\r\n }\r\n domNode.addEventListener(eventName, callback);\r\n eventMap.set(currentValue, callback);\r\n projectorState.nodeMap.set(domNode, eventMap);\r\n}\r\nfunction addClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.add(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction removeClasses(domNode, classes) {\r\n if (classes) {\r\n const classNames = classes.split(' ');\r\n for (let i = 0; i < classNames.length; i++) {\r\n domNode.classList.remove(classNames[i]);\r\n }\r\n }\r\n}\r\nfunction buildPreviousProperties(domNode, previous, current) {\r\n const { diffType, properties, attributes } = current;\r\n if (!diffType || diffType === 'vdom') {\r\n return { properties: previous.properties, attributes: previous.attributes, events: previous.events };\r\n }\r\n else if (diffType === 'none') {\r\n return { properties: {}, attributes: previous.attributes ? {} : undefined, events: previous.events };\r\n }\r\n let newProperties = {\r\n properties: {}\r\n };\r\n if (attributes) {\r\n newProperties.attributes = {};\r\n newProperties.events = previous.events;\r\n Object.keys(properties).forEach((propName) => {\r\n newProperties.properties[propName] = domNode[propName];\r\n });\r\n Object.keys(attributes).forEach((attrName) => {\r\n newProperties.attributes[attrName] = domNode.getAttribute(attrName);\r\n });\r\n return newProperties;\r\n }\r\n newProperties.properties = Object.keys(properties).reduce((props, property) => {\r\n props[property] = domNode.getAttribute(property) || domNode[property];\r\n return props;\r\n }, {});\r\n return newProperties;\r\n}\r\nfunction nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) {\r\n let result;\r\n if (typeof propValue === 'function') {\r\n result = propValue();\r\n }\r\n else {\r\n result = propValue && !previousValue;\r\n }\r\n if (result === true) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n domNode[propName]();\r\n });\r\n }\r\n}\r\nfunction removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions, onlyEvents = false) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n const eventMap = projectorState.nodeMap.get(domNode);\r\n if (eventMap) {\r\n Object.keys(previousProperties).forEach((propName) => {\r\n const isEvent = propName.substr(0, 2) === 'on' || onlyEvents;\r\n const eventName = onlyEvents ? propName : propName.substr(2);\r\n if (isEvent && !properties[propName]) {\r\n const eventCallback = eventMap.get(previousProperties[propName]);\r\n if (eventCallback) {\r\n domNode.removeEventListener(eventName, eventCallback);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nfunction updateAttribute(domNode, attrName, attrValue, projectionOptions) {\r\n if (projectionOptions.namespace === NAMESPACE_SVG && attrName === 'href') {\r\n domNode.setAttributeNS(NAMESPACE_XLINK, attrName, attrValue);\r\n }\r\n else if ((attrName === 'role' && attrValue === '') || attrValue === undefined) {\r\n domNode.removeAttribute(attrName);\r\n }\r\n else {\r\n domNode.setAttribute(attrName, attrValue);\r\n }\r\n}\r\nfunction updateAttributes(domNode, previousAttributes, attributes, projectionOptions) {\r\n const attrNames = Object.keys(attributes);\r\n const attrCount = attrNames.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n const attrName = attrNames[i];\r\n const attrValue = attributes[attrName];\r\n const previousAttrValue = previousAttributes[attrName];\r\n if (attrValue !== previousAttrValue) {\r\n updateAttribute(domNode, attrName, attrValue, projectionOptions);\r\n }\r\n }\r\n}\r\nfunction updateProperties(domNode, previousProperties, properties, projectionOptions, includesEventsAndAttributes = true) {\r\n let propertiesUpdated = false;\r\n const propNames = Object.keys(properties);\r\n const propCount = propNames.length;\r\n if (propNames.indexOf('classes') === -1 && previousProperties.classes) {\r\n if (Array.isArray(previousProperties.classes)) {\r\n for (let i = 0; i < previousProperties.classes.length; i++) {\r\n removeClasses(domNode, previousProperties.classes[i]);\r\n }\r\n }\r\n else {\r\n removeClasses(domNode, previousProperties.classes);\r\n }\r\n }\r\n includesEventsAndAttributes && removeOrphanedEvents(domNode, previousProperties, properties, projectionOptions);\r\n for (let i = 0; i < propCount; i++) {\r\n const propName = propNames[i];\r\n let propValue = properties[propName];\r\n const previousValue = previousProperties[propName];\r\n if (propName === 'classes') {\r\n const previousClasses = Array.isArray(previousValue) ? previousValue : [previousValue];\r\n const currentClasses = Array.isArray(propValue) ? propValue : [propValue];\r\n if (previousClasses && previousClasses.length > 0) {\r\n if (!propValue || propValue.length === 0) {\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n removeClasses(domNode, previousClasses[i]);\r\n }\r\n }\r\n else {\r\n const newClasses = [...currentClasses];\r\n for (let i = 0; i < previousClasses.length; i++) {\r\n const previousClassName = previousClasses[i];\r\n if (previousClassName) {\r\n const classIndex = newClasses.indexOf(previousClassName);\r\n if (classIndex === -1) {\r\n removeClasses(domNode, previousClassName);\r\n }\r\n else {\r\n newClasses.splice(classIndex, 1);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < newClasses.length; i++) {\r\n addClasses(domNode, newClasses[i]);\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < currentClasses.length; i++) {\r\n addClasses(domNode, currentClasses[i]);\r\n }\r\n }\r\n }\r\n else if (nodeOperations.indexOf(propName) !== -1) {\r\n nodeOperation(propName, propValue, previousValue, domNode, projectionOptions);\r\n }\r\n else if (propName === 'styles') {\r\n const styleNames = Object.keys(propValue);\r\n const styleCount = styleNames.length;\r\n for (let j = 0; j < styleCount; j++) {\r\n const styleName = styleNames[j];\r\n const newStyleValue = propValue[styleName];\r\n const oldStyleValue = previousValue && previousValue[styleName];\r\n if (newStyleValue === oldStyleValue) {\r\n continue;\r\n }\r\n propertiesUpdated = true;\r\n if (newStyleValue) {\r\n checkStyleValue(newStyleValue);\r\n projectionOptions.styleApplyer(domNode, styleName, newStyleValue);\r\n }\r\n else {\r\n projectionOptions.styleApplyer(domNode, styleName, '');\r\n }\r\n }\r\n }\r\n else {\r\n if (!propValue && typeof previousValue === 'string') {\r\n propValue = '';\r\n }\r\n if (propName === 'value') {\r\n const domValue = domNode[propName];\r\n if (domValue !== propValue &&\r\n (domNode['oninput-value']\r\n ? domValue === domNode['oninput-value']\r\n : propValue !== previousValue)) {\r\n domNode[propName] = propValue;\r\n domNode['oninput-value'] = undefined;\r\n }\r\n if (propValue !== previousValue) {\r\n propertiesUpdated = true;\r\n }\r\n }\r\n else if (propName !== 'key' && propValue !== previousValue) {\r\n const type = typeof propValue;\r\n if (type === 'function' && propName.lastIndexOf('on', 0) === 0 && includesEventsAndAttributes) {\r\n updateEvent(domNode, propName.substr(2), propValue, projectionOptions, properties.bind, previousValue);\r\n }\r\n else if (type === 'string' && propName !== 'innerHTML' && includesEventsAndAttributes) {\r\n updateAttribute(domNode, propName, propValue, projectionOptions);\r\n }\r\n else if (propName === 'scrollLeft' || propName === 'scrollTop') {\r\n if (domNode[propName] !== propValue) {\r\n domNode[propName] = propValue;\r\n }\r\n }\r\n else {\r\n domNode[propName] = propValue;\r\n }\r\n propertiesUpdated = true;\r\n }\r\n }\r\n }\r\n return propertiesUpdated;\r\n}\r\nfunction findIndexOfChild(children, sameAs, start) {\r\n for (let i = start; i < children.length; i++) {\r\n if (same(children[i], sameAs)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\nexport function toParentVNode(domNode) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n domNode,\r\n type: VNODE\r\n };\r\n}\r\nexport function toTextVNode(data) {\r\n return {\r\n tag: '',\r\n properties: {},\r\n children: undefined,\r\n text: `${data}`,\r\n domNode: undefined,\r\n type: VNODE\r\n };\r\n}\r\nfunction toInternalWNode(instance, instanceData) {\r\n return {\r\n instance,\r\n rendered: [],\r\n coreProperties: instanceData.coreProperties,\r\n children: instance.children,\r\n widgetConstructor: instance.constructor,\r\n properties: instanceData.inputProperties,\r\n type: WNODE\r\n };\r\n}\r\nexport function filterAndDecorateChildren(children, instance) {\r\n if (children === undefined) {\r\n return emptyArray;\r\n }\r\n children = Array.isArray(children) ? children : [children];\r\n for (let i = 0; i < children.length;) {\r\n const child = children[i];\r\n if (child === undefined || child === null) {\r\n children.splice(i, 1);\r\n continue;\r\n }\r\n else if (typeof child === 'string') {\r\n children[i] = toTextVNode(child);\r\n }\r\n else {\r\n if (isVNode(child)) {\r\n if (child.properties.bind === undefined) {\r\n child.properties.bind = instance;\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n else {\r\n if (!child.coreProperties) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n child.coreProperties = {\r\n bind: instance,\r\n baseRegistry: instanceData.coreProperties.baseRegistry\r\n };\r\n }\r\n if (child.children && child.children.length > 0) {\r\n filterAndDecorateChildren(child.children, instance);\r\n }\r\n }\r\n }\r\n i++;\r\n }\r\n return children;\r\n}\r\nfunction nodeAdded(dnode, transitions) {\r\n if (isVNode(dnode) && dnode.properties) {\r\n const enterAnimation = dnode.properties.enterAnimation;\r\n if (enterAnimation) {\r\n if (typeof enterAnimation === 'function') {\r\n enterAnimation(dnode.domNode, dnode.properties);\r\n }\r\n else {\r\n transitions.enter(dnode.domNode, dnode.properties, enterAnimation);\r\n }\r\n }\r\n }\r\n}\r\nfunction nodeToRemove(dnode, transitions, projectionOptions) {\r\n if (isWNode(dnode)) {\r\n const item = instanceMap.get(dnode.instance);\r\n const rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray;\r\n if (dnode.instance) {\r\n const instanceData = widgetInstanceMap.get(dnode.instance);\r\n instanceData.onDetach();\r\n instanceMap.delete(dnode.instance);\r\n }\r\n for (let i = 0; i < rendered.length; i++) {\r\n nodeToRemove(rendered[i], transitions, projectionOptions);\r\n }\r\n }\r\n else {\r\n const domNode = dnode.domNode;\r\n const properties = dnode.properties;\r\n if (dnode.children && dnode.children.length > 0) {\r\n for (let i = 0; i < dnode.children.length; i++) {\r\n nodeToRemove(dnode.children[i], transitions, projectionOptions);\r\n }\r\n }\r\n const exitAnimation = properties.exitAnimation;\r\n if (properties && exitAnimation) {\r\n domNode.style.pointerEvents = 'none';\r\n const removeDomNode = function () {\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n };\r\n if (typeof exitAnimation === 'function') {\r\n exitAnimation(domNode, removeDomNode, properties);\r\n return;\r\n }\r\n else {\r\n transitions.exit(dnode.domNode, properties, exitAnimation, removeDomNode);\r\n return;\r\n }\r\n }\r\n domNode && domNode.parentNode && domNode.parentNode.removeChild(domNode);\r\n dnode.domNode = undefined;\r\n }\r\n}\r\nfunction checkDistinguishable(childNodes, indexToCheck, parentInstance) {\r\n const childNode = childNodes[indexToCheck];\r\n if (isVNode(childNode) && !childNode.tag) {\r\n return; // Text nodes need not be distinguishable\r\n }\r\n const { key } = childNode.properties;\r\n if (key === undefined || key === null) {\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (i !== indexToCheck) {\r\n const node = childNodes[i];\r\n if (same(node, childNode)) {\r\n let nodeIdentifier;\r\n const parentName = parentInstance.constructor.name || 'unknown';\r\n if (isWNode(childNode)) {\r\n nodeIdentifier = childNode.widgetConstructor.name || 'unknown';\r\n }\r\n else {\r\n nodeIdentifier = childNode.tag;\r\n }\r\n console.warn(`A widget (${parentName}) has had a child addded or removed, but they were not able to uniquely identified. It is recommended to provide a unique 'key' property when using the same widget or element (${nodeIdentifier}) multiple times as siblings`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) {\r\n oldChildren = oldChildren || emptyArray;\r\n newChildren = newChildren;\r\n const oldChildrenLength = oldChildren.length;\r\n const newChildrenLength = newChildren.length;\r\n const transitions = projectionOptions.transitions;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n let oldIndex = 0;\r\n let newIndex = 0;\r\n let i;\r\n let textUpdated = false;\r\n while (newIndex < newChildrenLength) {\r\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\r\n const newChild = newChildren[newIndex];\r\n if (isVNode(newChild) && typeof newChild.deferredPropertiesCallback === 'function') {\r\n newChild.inserted = isVNode(oldChild) && oldChild.inserted;\r\n addDeferredProperties(newChild, projectionOptions);\r\n }\r\n if (oldChild !== undefined && same(oldChild, newChild)) {\r\n oldIndex++;\r\n newIndex++;\r\n textUpdated =\r\n updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated;\r\n continue;\r\n }\r\n const findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\r\n const addChild = () => {\r\n let insertBeforeDomNode = undefined;\r\n let childrenArray = oldChildren;\r\n let nextIndex = oldIndex + 1;\r\n let child = oldChildren[oldIndex];\r\n if (!child) {\r\n child = siblings[0];\r\n nextIndex = 1;\r\n childrenArray = siblings;\r\n }\r\n if (child) {\r\n let insertBeforeChildren = [child];\r\n while (insertBeforeChildren.length) {\r\n const insertBefore = insertBeforeChildren.shift();\r\n if (isWNode(insertBefore)) {\r\n const item = instanceMap.get(insertBefore.instance);\r\n if (item && item.dnode.rendered) {\r\n insertBeforeChildren.push(...item.dnode.rendered);\r\n }\r\n }\r\n else {\r\n if (insertBefore.domNode) {\r\n if (insertBefore.domNode.parentElement !== parentVNode.domNode) {\r\n break;\r\n }\r\n insertBeforeDomNode = insertBefore.domNode;\r\n break;\r\n }\r\n }\r\n if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) {\r\n insertBeforeChildren.push(childrenArray[nextIndex]);\r\n nextIndex++;\r\n }\r\n }\r\n }\r\n createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance);\r\n nodeAdded(newChild, transitions);\r\n const indexToCheck = newIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(newChildren, indexToCheck, parentInstance);\r\n });\r\n };\r\n if (!oldChild || findOldIndex === -1) {\r\n addChild();\r\n newIndex++;\r\n continue;\r\n }\r\n const removeChild = () => {\r\n const indexToCheck = oldIndex;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n if (isWNode(oldChild)) {\r\n const item = instanceMap.get(oldChild.instance);\r\n if (item) {\r\n oldChild = item.dnode;\r\n }\r\n }\r\n nodeToRemove(oldChild, transitions, projectionOptions);\r\n };\r\n const findNewIndex = findIndexOfChild(newChildren, oldChild, newIndex + 1);\r\n if (findNewIndex === -1) {\r\n removeChild();\r\n oldIndex++;\r\n continue;\r\n }\r\n addChild();\r\n removeChild();\r\n oldIndex++;\r\n newIndex++;\r\n }\r\n if (oldChildrenLength > oldIndex) {\r\n // Remove child fragments\r\n for (i = oldIndex; i < oldChildrenLength; i++) {\r\n const indexToCheck = i;\r\n projectorState.afterRenderCallbacks.push(() => {\r\n checkDistinguishable(oldChildren, indexToCheck, parentInstance);\r\n });\r\n let childToRemove = oldChildren[i];\r\n if (isWNode(childToRemove)) {\r\n const item = instanceMap.get(childToRemove.instance);\r\n if (item) {\r\n childToRemove = item.dnode;\r\n }\r\n }\r\n nodeToRemove(childToRemove, transitions, projectionOptions);\r\n }\r\n }\r\n return textUpdated;\r\n}\r\nfunction addChildren(parentVNode, children, projectionOptions, parentInstance, insertBefore = undefined, childNodes) {\r\n if (children === undefined) {\r\n return;\r\n }\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.merge && childNodes === undefined) {\r\n childNodes = arrayFrom(parentVNode.domNode.childNodes);\r\n }\r\n const transitions = projectionOptions.transitions;\r\n projectionOptions = Object.assign({}, projectionOptions, { depth: projectionOptions.depth + 1 });\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n const nextSiblings = children.slice(i + 1);\r\n if (isVNode(child)) {\r\n if (projectorState.merge && childNodes) {\r\n let domElement = undefined;\r\n while (child.domNode === undefined && childNodes.length > 0) {\r\n domElement = childNodes.shift();\r\n if (domElement && domElement.tagName === (child.tag.toUpperCase() || undefined)) {\r\n child.domNode = domElement;\r\n }\r\n }\r\n }\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance);\r\n }\r\n else {\r\n createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes);\r\n }\r\n nodeAdded(child, transitions);\r\n }\r\n}\r\nfunction initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions) {\r\n addChildren(dnode, dnode.children, projectionOptions, parentInstance, undefined);\r\n if (typeof dnode.deferredPropertiesCallback === 'function' && dnode.inserted === undefined) {\r\n addDeferredProperties(dnode, projectionOptions);\r\n }\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, {}, dnode.attributes, projectionOptions);\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions, false);\r\n removeOrphanedEvents(domNode, {}, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind);\r\n });\r\n }\r\n else {\r\n updateProperties(domNode, {}, dnode.properties, projectionOptions);\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n dnode.inserted = true;\r\n}\r\nfunction createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) {\r\n let domNode;\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (isWNode(dnode)) {\r\n let { widgetConstructor } = dnode;\r\n const parentInstanceData = widgetInstanceMap.get(parentInstance);\r\n if (!isWidgetBaseConstructor(widgetConstructor)) {\r\n const item = parentInstanceData.registry().get(widgetConstructor);\r\n if (item === null) {\r\n return;\r\n }\r\n widgetConstructor = item;\r\n }\r\n const instance = new widgetConstructor();\r\n dnode.instance = instance;\r\n nextSiblingMap.set(instance, nextSiblings);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: projectionOptions.depth });\r\n scheduleRender(projectionOptions);\r\n }\r\n };\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n if (rendered) {\r\n const filteredRendered = filterAndDecorateChildren(rendered, instance);\r\n dnode.rendered = filteredRendered;\r\n addChildren(parentVNode, filteredRendered, projectionOptions, instance, insertBefore, childNodes);\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n }\r\n else {\r\n if (projectorState.merge && projectorState.mergeElement !== undefined) {\r\n domNode = dnode.domNode = projectionOptions.mergeElement;\r\n projectorState.mergeElement = undefined;\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n return;\r\n }\r\n const doc = parentVNode.domNode.ownerDocument;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.domNode !== undefined && parentVNode.domNode) {\r\n const newDomNode = dnode.domNode.ownerDocument.createTextNode(dnode.text);\r\n if (parentVNode.domNode === dnode.domNode.parentNode) {\r\n parentVNode.domNode.replaceChild(newDomNode, dnode.domNode);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(newDomNode);\r\n dnode.domNode.parentNode && dnode.domNode.parentNode.removeChild(dnode.domNode);\r\n }\r\n dnode.domNode = newDomNode;\r\n }\r\n else {\r\n domNode = dnode.domNode = doc.createTextNode(dnode.text);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n else {\r\n if (dnode.domNode === undefined) {\r\n if (dnode.tag === 'svg') {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (projectionOptions.namespace !== undefined) {\r\n domNode = dnode.domNode = doc.createElementNS(projectionOptions.namespace, dnode.tag);\r\n }\r\n else {\r\n domNode = dnode.domNode = dnode.domNode || doc.createElement(dnode.tag);\r\n }\r\n }\r\n else {\r\n domNode = dnode.domNode;\r\n }\r\n initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOptions);\r\n if (insertBefore !== undefined) {\r\n parentVNode.domNode.insertBefore(domNode, insertBefore);\r\n }\r\n else if (domNode.parentNode !== parentVNode.domNode) {\r\n parentVNode.domNode.appendChild(domNode);\r\n }\r\n }\r\n }\r\n}\r\nfunction updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) {\r\n if (isWNode(dnode)) {\r\n const { instance } = previous;\r\n const { parentVNode, dnode: node } = instanceMap.get(instance);\r\n const previousRendered = node ? node.rendered : previous.rendered;\r\n const instanceData = widgetInstanceMap.get(instance);\r\n instanceData.rendering = true;\r\n instance.__setCoreProperties__(dnode.coreProperties);\r\n instance.__setChildren__(dnode.children);\r\n instance.__setProperties__(dnode.properties);\r\n nextSiblingMap.set(instance, nextSiblings);\r\n dnode.instance = instance;\r\n if (instanceData.dirty === true) {\r\n const rendered = instance.__render__();\r\n instanceData.rendering = false;\r\n dnode.rendered = filterAndDecorateChildren(rendered, instance);\r\n updateChildren(parentVNode, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions);\r\n }\r\n else {\r\n instanceData.rendering = false;\r\n dnode.rendered = previousRendered;\r\n }\r\n instanceMap.set(instance, { dnode, parentVNode });\r\n instanceData.nodeHandler.addRoot();\r\n }\r\n else {\r\n if (previous === dnode) {\r\n return false;\r\n }\r\n const domNode = (dnode.domNode = previous.domNode);\r\n let textUpdated = false;\r\n let updated = false;\r\n if (!dnode.tag && typeof dnode.text === 'string') {\r\n if (dnode.text !== previous.text) {\r\n const newDomNode = domNode.ownerDocument.createTextNode(dnode.text);\r\n domNode.parentNode.replaceChild(newDomNode, domNode);\r\n dnode.domNode = newDomNode;\r\n textUpdated = true;\r\n return textUpdated;\r\n }\r\n }\r\n else {\r\n if (dnode.tag && dnode.tag.lastIndexOf('svg', 0) === 0) {\r\n projectionOptions = Object.assign({}, projectionOptions, { namespace: NAMESPACE_SVG });\r\n }\r\n if (previous.children !== dnode.children) {\r\n const children = filterAndDecorateChildren(dnode.children, parentInstance);\r\n dnode.children = children;\r\n updated =\r\n updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated;\r\n }\r\n const previousProperties = buildPreviousProperties(domNode, previous, dnode);\r\n if (dnode.attributes && dnode.events) {\r\n updateAttributes(domNode, previousProperties.attributes, dnode.attributes, projectionOptions);\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions, false) || updated;\r\n removeOrphanedEvents(domNode, previousProperties.events, dnode.events, projectionOptions, true);\r\n const events = dnode.events;\r\n Object.keys(events).forEach((event) => {\r\n updateEvent(domNode, event, events[event], projectionOptions, dnode.properties.bind, previousProperties.events[event]);\r\n });\r\n }\r\n else {\r\n updated =\r\n updateProperties(domNode, previousProperties.properties, dnode.properties, projectionOptions) ||\r\n updated;\r\n }\r\n if (dnode.properties.key !== null && dnode.properties.key !== undefined) {\r\n const instanceData = widgetInstanceMap.get(parentInstance);\r\n instanceData.nodeHandler.add(domNode, `${dnode.properties.key}`);\r\n }\r\n }\r\n if (updated && dnode.properties && dnode.properties.updateAnimation) {\r\n dnode.properties.updateAnimation(domNode, dnode.properties, previous.properties);\r\n }\r\n }\r\n}\r\nfunction addDeferredProperties(vnode, projectionOptions) {\r\n // transfer any properties that have been passed - as these must be decorated properties\r\n vnode.decoratedDeferredProperties = vnode.properties;\r\n const properties = vnode.deferredPropertiesCallback(!!vnode.inserted);\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n vnode.properties = Object.assign({}, properties, vnode.decoratedDeferredProperties);\r\n projectorState.deferredRenderCallbacks.push(() => {\r\n const properties = Object.assign({}, vnode.deferredPropertiesCallback(!!vnode.inserted), vnode.decoratedDeferredProperties);\r\n updateProperties(vnode.domNode, vnode.properties, properties, projectionOptions);\r\n vnode.properties = properties;\r\n });\r\n}\r\nfunction runDeferredRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectorState.deferredRenderCallbacks.length) {\r\n if (projectionOptions.sync) {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n global.requestAnimationFrame(() => {\r\n while (projectorState.deferredRenderCallbacks.length) {\r\n const callback = projectorState.deferredRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction runAfterRenderCallbacks(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n }\r\n else {\r\n if (global.requestIdleCallback) {\r\n global.requestIdleCallback(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n else {\r\n setTimeout(() => {\r\n while (projectorState.afterRenderCallbacks.length) {\r\n const callback = projectorState.afterRenderCallbacks.shift();\r\n callback && callback();\r\n }\r\n });\r\n }\r\n }\r\n}\r\nfunction scheduleRender(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n if (projectionOptions.sync) {\r\n render(projectionOptions);\r\n }\r\n else if (projectorState.renderScheduled === undefined) {\r\n projectorState.renderScheduled = global.requestAnimationFrame(() => {\r\n render(projectionOptions);\r\n });\r\n }\r\n}\r\nfunction render(projectionOptions) {\r\n const projectorState = projectorStateMap.get(projectionOptions.projectorInstance);\r\n projectorState.renderScheduled = undefined;\r\n const renderQueue = projectorState.renderQueue;\r\n const renders = [...renderQueue];\r\n projectorState.renderQueue = [];\r\n renders.sort((a, b) => a.depth - b.depth);\r\n const previouslyRendered = [];\r\n while (renders.length) {\r\n const { instance } = renders.shift();\r\n if (instanceMap.has(instance) && previouslyRendered.indexOf(instance) === -1) {\r\n previouslyRendered.push(instance);\r\n const { parentVNode, dnode } = instanceMap.get(instance);\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const nextSiblings = nextSiblingMap.get(instance);\r\n updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings);\r\n }\r\n }\r\n runAfterRenderCallbacks(projectionOptions);\r\n runDeferredRenderCallbacks(projectionOptions);\r\n}\r\nexport const dom = {\r\n append: function (parentNode, instance, projectionOptions = {}) {\r\n const instanceData = widgetInstanceMap.get(instance);\r\n const finalProjectorOptions = getProjectionOptions(projectionOptions, instance);\r\n const projectorState = {\r\n afterRenderCallbacks: [],\r\n deferredRenderCallbacks: [],\r\n nodeMap: new WeakMap(),\r\n renderScheduled: undefined,\r\n renderQueue: [],\r\n merge: projectionOptions.merge || false,\r\n mergeElement: projectionOptions.mergeElement\r\n };\r\n projectorStateMap.set(instance, projectorState);\r\n finalProjectorOptions.rootNode = parentNode;\r\n const parentVNode = toParentVNode(finalProjectorOptions.rootNode);\r\n const node = toInternalWNode(instance, instanceData);\r\n instanceMap.set(instance, { dnode: node, parentVNode });\r\n instanceData.invalidate = () => {\r\n instanceData.dirty = true;\r\n if (instanceData.rendering === false) {\r\n projectorState.renderQueue.push({ instance, depth: finalProjectorOptions.depth });\r\n scheduleRender(finalProjectorOptions);\r\n }\r\n };\r\n updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []);\r\n projectorState.afterRenderCallbacks.push(() => {\r\n instanceData.onAttach();\r\n });\r\n runDeferredRenderCallbacks(finalProjectorOptions);\r\n runAfterRenderCallbacks(finalProjectorOptions);\r\n return {\r\n domNode: finalProjectorOptions.rootNode\r\n };\r\n },\r\n create: function (instance, projectionOptions) {\r\n return this.append(document.createElement('div'), instance, projectionOptions);\r\n },\r\n merge: function (element, instance, projectionOptions = {}) {\r\n projectionOptions.merge = true;\r\n projectionOptions.mergeElement = element;\r\n const projection = this.append(element.parentNode, instance, projectionOptions);\r\n const projectorState = projectorStateMap.get(instance);\r\n projectorState.merge = false;\r\n return projection;\r\n }\r\n};\r\n//# sourceMappingURL=vdom.mjs.map" }, { "id": "./node_modules/imports-loader/index.js?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", @@ -4870,7 +4887,7 @@ "name": "./node_modules/imports-loader?widgetFactory=src/menu/Menu!./node_modules/@dojo/cli-build-widget/template/custom-element.js", "index": 1, "index2": 41, - "size": 277, + "size": 287, "cacheable": true, "built": true, "optional": false, @@ -4900,7 +4917,7 @@ "providedExports": null, "optimizationBailout": [], "depth": 1, - "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n" + "source": "/*** IMPORTS FROM imports-loader ***/\nvar widgetFactory = require(\"src/menu/Menu\");\n\nvar registerCustomElement = require('@dojo/framework/widget-core/registerCustomElement').default;\r\n\r\nvar defaultExport = widgetFactory.default;\r\ndefaultExport && registerCustomElement(defaultExport);\r\n\n" }, { "id": "./node_modules/process/browser.js", @@ -4917,21 +4934,21 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "issuerId": "./node_modules/@dojo/has/has.mjs", - "issuerName": "./node_modules/@dojo/has/has.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "issuerId": "./node_modules/@dojo/framework/has/has.mjs", + "issuerName": "./node_modules/@dojo/framework/has/has.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "process", - "loc": "1:0-37" + "loc": "1:0-40" } ], "usedExports": true, @@ -4955,18 +4972,18 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "issuerId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "issuerName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/widget-core/registerCustomElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -4981,19 +4998,19 @@ "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Projector.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Projector.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Projector.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Projector.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\widget-core\\mixins\\Themed.mjs", - "module": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", - "moduleName": "./node_modules/@dojo/widget-core/mixins/Themed.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\mixins\\Themed.mjs", + "module": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/mixins/Themed.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -5001,7 +5018,6 @@ ], "usedExports": [ "__decorate", - "__metadata", "__rest" ], "providedExports": [ @@ -5042,30 +5058,30 @@ "menu" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "issuerId": "./node_modules/@dojo/shim/global.mjs", - "issuerName": "./node_modules/@dojo/shim/global.mjs", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "issuerId": "./node_modules/@dojo/framework/shim/global.mjs", + "issuerName": "./node_modules/@dojo/framework/shim/global.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./node_modules/@dojo/shim/global.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\shim\\global.mjs", - "module": "./node_modules/@dojo/shim/global.mjs", - "moduleName": "./node_modules/@dojo/shim/global.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\global.mjs", + "module": "./node_modules/@dojo/framework/shim/global.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/global.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" }, { - "moduleId": "./node_modules/@dojo/has/has.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\has\\has.mjs", - "module": "./node_modules/@dojo/has/has.mjs", - "moduleName": "./node_modules/@dojo/has/has.mjs", + "moduleId": "./node_modules/@dojo/framework/has/has.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\has\\has.mjs", + "module": "./node_modules/@dojo/framework/has/has.mjs", + "moduleName": "./node_modules/@dojo/framework/has/has.mjs", "type": "cjs require", "userRequest": "global", - "loc": "1:0-44" + "loc": "1:0-47" } ], "usedExports": true, @@ -5080,7 +5096,7 @@ "name": "./src/menu/Menu.ts", "index": 2, "index2": 40, - "size": 1462, + "size": 1502, "cacheable": true, "built": true, "optional": false, @@ -5113,7 +5129,7 @@ ], "optimizationBailout": [], "depth": 2, - "source": "import * as tslib_1 from \"tslib\";\r\nimport { v } from '@dojo/widget-core/d';\r\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\r\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\r\nimport * as css from './menu.m.css';\r\nlet Menu = class Menu extends ThemedMixin(WidgetBase) {\r\n _onSelected(id, data) {\r\n this._selectedId = id;\r\n this.properties.onSelected(data);\r\n this.invalidate();\r\n }\r\n render() {\r\n const items = this.children.map((child, index) => {\r\n if (child) {\r\n const properties = {\r\n onSelected: (data) => {\r\n this._onSelected(index, data);\r\n }\r\n };\r\n if (this._selectedId !== undefined) {\r\n properties.selected = index === this._selectedId;\r\n }\r\n child.properties = Object.assign({}, child.properties, properties);\r\n }\r\n return child;\r\n });\r\n return v('nav', { classes: this.theme(css.root) }, [\r\n v('ol', {\r\n classes: this.theme(css.menuContainer)\r\n }, items)\r\n ]);\r\n }\r\n};\r\nMenu = tslib_1.__decorate([\r\n customElement({\r\n tag: 'demo-menu',\r\n events: ['onSelected']\r\n }),\r\n theme(css)\r\n], Menu);\r\nexport { Menu };\r\nexport default Menu;\r\n" + "source": "import * as tslib_1 from \"tslib\";\r\nimport { v } from '@dojo/framework/widget-core/d';\r\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\r\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\r\nimport * as css from './menu.m.css';\r\nlet Menu = class Menu extends ThemedMixin(WidgetBase) {\r\n _onSelected(id, data) {\r\n this._selectedId = id;\r\n this.properties.onSelected(data);\r\n this.invalidate();\r\n }\r\n render() {\r\n const items = this.children.map((child, index) => {\r\n if (child) {\r\n const properties = {\r\n onSelected: (data) => {\r\n this._onSelected(index, data);\r\n }\r\n };\r\n if (this._selectedId !== undefined) {\r\n properties.selected = index === this._selectedId;\r\n }\r\n child.properties = Object.assign({}, child.properties, properties);\r\n }\r\n return child;\r\n });\r\n return v('nav', { classes: this.theme(css.root) }, [\r\n v('ol', {\r\n classes: this.theme(css.menuContainer)\r\n }, items)\r\n ]);\r\n }\r\n};\r\nMenu = tslib_1.__decorate([\r\n customElement({\r\n tag: 'demo-menu',\r\n events: ['onSelected']\r\n }),\r\n theme(css)\r\n], Menu);\r\nexport { Menu };\r\nexport default Menu;\r\n" }, { "id": "./src/menu/menu.m.css", diff --git a/test-app/fixtures/windows/test/functional.js b/test-app/fixtures/windows/test/functional.js index c4e70e3..75ee436 100644 --- a/test-app/fixtures/windows/test/functional.js +++ b/test-app/fixtures/windows/test/functional.js @@ -103,4 +103,4 @@ module.exports = __webpack_require__("./tests/functional/main.ts"); /***/ }) /******/ }));; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZjdmNjg2Yjg2ZGU4MjZhN2QzMWQiLCJ3ZWJwYWNrOi8vLy4vdGVzdHMvZnVuY3Rpb25hbC9hbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7O0FDN0RBIiwiZmlsZSI6ImZ1bmN0aW9uYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBmN2Y2ODZiODZkZTgyNmE3ZDMxZCIsImltcG9ydCAnLi9tYWluJztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXI/dHlwZT10cyZpbnN0YW5jZU5hbWU9MF9jdXN0b20tZWxlbWVudHMhLi90ZXN0cy9mdW5jdGlvbmFsL2FsbC50cyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgNzMyODJlOTgxNzIzN2Q0NTUwMmMiLCJ3ZWJwYWNrOi8vLy4vdGVzdHMvZnVuY3Rpb25hbC9hbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7O0FDN0RBIiwiZmlsZSI6ImZ1bmN0aW9uYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA3MzI4MmU5ODE3MjM3ZDQ1NTAyYyIsImltcG9ydCAnLi9tYWluJztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXI/dHlwZT10cyZpbnN0YW5jZU5hbWU9MF9jdXN0b20tZWxlbWVudHMhLi90ZXN0cy9mdW5jdGlvbmFsL2FsbC50cyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/test-app/fixtures/windows/test/unit.js b/test-app/fixtures/windows/test/unit.js index a7831f5..58bef5b 100644 --- a/test-app/fixtures/windows/test/unit.js +++ b/test-app/fixtures/windows/test/unit.js @@ -73,15 +73,15 @@ /************************************************************************/ /******/ ({ -/***/ "./node_modules/@dojo/core/Destroyable.js": +/***/ "./node_modules/@dojo/framework/core/Destroyable.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var lang_1 = __webpack_require__("./node_modules/@dojo/core/lang.js"); -var Promise_1 = __webpack_require__("./node_modules/@dojo/shim/Promise.js"); +var lang_1 = __webpack_require__("./node_modules/@dojo/framework/core/lang.js"); +var Promise_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Promise.js"); /** * No operation function to replace own once instance is destoryed */ @@ -141,15 +141,15 @@ exports.default = Destroyable; /***/ }), -/***/ "./node_modules/@dojo/core/Evented.js": +/***/ "./node_modules/@dojo/framework/core/Evented.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); -var Destroyable_1 = __webpack_require__("./node_modules/@dojo/core/Destroyable.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); +var Destroyable_1 = __webpack_require__("./node_modules/@dojo/framework/core/Destroyable.js"); /** * Map of computed regular expressions, keyed by string */ @@ -193,7 +193,7 @@ var Evented = /** @class */ (function (_super) { var _this = this; this.listenersMap.forEach(function (methods, type) { if (isGlobMatch(type, event.type)) { - methods.forEach(function (method) { + tslib_1.__spread(methods).forEach(function (method) { method.call(_this, event); }); } @@ -230,15 +230,15 @@ exports.default = Evented; /***/ }), -/***/ "./node_modules/@dojo/core/lang.js": +/***/ "./node_modules/@dojo/framework/core/lang.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var object_1 = __webpack_require__("./node_modules/@dojo/shim/object.js"); -var object_2 = __webpack_require__("./node_modules/@dojo/shim/object.js"); +var object_1 = __webpack_require__("./node_modules/@dojo/framework/shim/object.js"); +var object_2 = __webpack_require__("./node_modules/@dojo/framework/shim/object.js"); exports.assign = object_2.assign; var slice = Array.prototype.slice; var hasOwnProperty = Object.prototype.hasOwnProperty; @@ -474,7 +474,7 @@ exports.createCompositeHandle = createCompositeHandle; /***/ }), -/***/ "./node_modules/@dojo/has/has.js": +/***/ "./node_modules/@dojo/framework/has/has.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -685,18 +685,18 @@ add('host-node', function () { /***/ }), -/***/ "./node_modules/@dojo/shim/Map.js": +/***/ "./node_modules/@dojo/framework/shim/Map.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var iterator_1 = __webpack_require__("./node_modules/@dojo/shim/iterator.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var object_1 = __webpack_require__("./node_modules/@dojo/shim/object.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -__webpack_require__("./node_modules/@dojo/shim/Symbol.js"); +var iterator_1 = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var object_1 = __webpack_require__("./node_modules/@dojo/framework/shim/object.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +__webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); exports.Map = global_1.default.Map; if (!has_1.default('es6-map')) { exports.Map = (_a = /** @class */ (function () { @@ -807,17 +807,17 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Promise.js": +/***/ "./node_modules/@dojo/framework/shim/Promise.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var queue_1 = __webpack_require__("./node_modules/@dojo/shim/support/queue.js"); -__webpack_require__("./node_modules/@dojo/shim/Symbol.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var queue_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/queue.js"); +__webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); exports.ShimPromise = global_1.default.Promise; exports.isThenable = function isThenable(value) { return value && typeof value.then === 'function'; @@ -1039,17 +1039,17 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Set.js": +/***/ "./node_modules/@dojo/framework/shim/Set.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var iterator_1 = __webpack_require__("./node_modules/@dojo/shim/iterator.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -__webpack_require__("./node_modules/@dojo/shim/Symbol.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var iterator_1 = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +__webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); exports.Set = global_1.default.Set; if (!has_1.default('es6-set')) { exports.Set = (_a = /** @class */ (function () { @@ -1138,15 +1138,15 @@ var _a; /***/ }), -/***/ "./node_modules/@dojo/shim/Symbol.js": +/***/ "./node_modules/@dojo/framework/shim/Symbol.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var util_1 = __webpack_require__("./node_modules/@dojo/shim/support/util.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var util_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.js"); exports.Symbol = global_1.default.Symbol; if (!has_1.default('es6-symbol')) { /** @@ -1292,17 +1292,17 @@ exports.default = exports.Symbol; /***/ }), -/***/ "./node_modules/@dojo/shim/WeakMap.js": +/***/ "./node_modules/@dojo/framework/shim/WeakMap.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var iterator_1 = __webpack_require__("./node_modules/@dojo/shim/iterator.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -__webpack_require__("./node_modules/@dojo/shim/Symbol.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var iterator_1 = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +__webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); exports.WeakMap = global_1.default.WeakMap; if (!has_1.default('es6-weakmap')) { var DELETED_1 = {}; @@ -1424,18 +1424,18 @@ exports.default = exports.WeakMap; /***/ }), -/***/ "./node_modules/@dojo/shim/array.js": +/***/ "./node_modules/@dojo/framework/shim/array.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var iterator_1 = __webpack_require__("./node_modules/@dojo/shim/iterator.js"); -var number_1 = __webpack_require__("./node_modules/@dojo/shim/number.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -var util_1 = __webpack_require__("./node_modules/@dojo/shim/support/util.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var iterator_1 = __webpack_require__("./node_modules/@dojo/framework/shim/iterator.js"); +var number_1 = __webpack_require__("./node_modules/@dojo/framework/shim/number.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +var util_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.js"); if (has_1.default('es6-array') && has_1.default('es6-array-fill')) { exports.from = global_1.default.Array.from; exports.of = global_1.default.Array.of; @@ -1639,7 +1639,7 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/global.js": +/***/ "./node_modules/@dojo/framework/shim/global.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1666,14 +1666,14 @@ exports.default = globalObject; /***/ }), -/***/ "./node_modules/@dojo/shim/iterator.js": +/***/ "./node_modules/@dojo/framework/shim/iterator.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -__webpack_require__("./node_modules/@dojo/shim/Symbol.js"); -var string_1 = __webpack_require__("./node_modules/@dojo/shim/string.js"); +__webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); +var string_1 = __webpack_require__("./node_modules/@dojo/framework/shim/string.js"); var staticDone = { done: true, value: undefined }; /** * A class that _shims_ an iterator interface on array like objects. @@ -1791,13 +1791,13 @@ exports.forOf = forOf; /***/ }), -/***/ "./node_modules/@dojo/shim/number.js": +/***/ "./node_modules/@dojo/framework/shim/number.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); /** * The smallest interval between two representable numbers. */ @@ -1857,15 +1857,15 @@ exports.isSafeInteger = isSafeInteger; /***/ }), -/***/ "./node_modules/@dojo/shim/object.js": +/***/ "./node_modules/@dojo/framework/shim/object.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -var Symbol_1 = __webpack_require__("./node_modules/@dojo/shim/Symbol.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +var Symbol_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); if (has_1.default('es6-object')) { var globalObject = global_1.default.Object; exports.assign = globalObject.assign; @@ -1945,16 +1945,16 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/string.js": +/***/ "./node_modules/@dojo/framework/shim/string.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); -var util_1 = __webpack_require__("./node_modules/@dojo/shim/support/util.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); +var util_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/util.js"); /** * The minimum location of high surrogates */ @@ -2183,17 +2183,17 @@ else { /***/ }), -/***/ "./node_modules/@dojo/shim/support/has.js": +/***/ "./node_modules/@dojo/framework/shim/support/has.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/has/has.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/has/has.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); exports.default = has_1.default; -tslib_1.__exportStar(__webpack_require__("./node_modules/@dojo/has/has.js"), exports); +tslib_1.__exportStar(__webpack_require__("./node_modules/@dojo/framework/has/has.js"), exports); /* ECMAScript 6 and 7 Features */ /* Array */ has_1.add('es6-array', function () { @@ -2363,14 +2363,14 @@ var templateObject_1; /***/ }), -/***/ "./node_modules/@dojo/shim/support/queue.js": +/***/ "./node_modules/@dojo/framework/shim/support/queue.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(setImmediate) { Object.defineProperty(exports, "__esModule", { value: true }); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var has_1 = __webpack_require__("./node_modules/@dojo/shim/support/has.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var has_1 = __webpack_require__("./node_modules/@dojo/framework/shim/support/has.js"); function executeTask(item) { if (item && item.isActive && item.callback) { item.callback(); @@ -2558,7 +2558,7 @@ exports.queueMicroTask = (function () { /***/ }), -/***/ "./node_modules/@dojo/shim/support/util.js": +/***/ "./node_modules/@dojo/framework/shim/support/util.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2598,16 +2598,16 @@ exports.wrapNative = wrapNative; /***/ }), -/***/ "./node_modules/@dojo/test-extras/harness.js": +/***/ "./node_modules/@dojo/framework/testing/harness.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var assertRender_1 = __webpack_require__("./node_modules/@dojo/test-extras/support/assertRender.js"); -var selector_1 = __webpack_require__("./node_modules/@dojo/test-extras/support/selector.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); +var assertRender_1 = __webpack_require__("./node_modules/@dojo/framework/testing/support/assertRender.js"); +var selector_1 = __webpack_require__("./node_modules/@dojo/framework/testing/support/selector.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); function decorateNodes(dNode) { var hasDeferredProperties = false; function addParent(parent) { @@ -2743,18 +2743,18 @@ exports.default = harness; /***/ }), -/***/ "./node_modules/@dojo/test-extras/support/assertRender.js": +/***/ "./node_modules/@dojo/framework/testing/support/assertRender.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); var diff = __webpack_require__("./node_modules/diff/dist/diff.js"); -var WeakMap_1 = __webpack_require__("./node_modules/@dojo/shim/WeakMap.js"); -var Set_1 = __webpack_require__("./node_modules/@dojo/shim/Set.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); -var array_1 = __webpack_require__("./node_modules/@dojo/shim/array.js"); +var WeakMap_1 = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.js"); +var Set_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Set.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); +var array_1 = __webpack_require__("./node_modules/@dojo/framework/shim/array.js"); var widgetClassCounter = 0; var widgetMap = new WeakMap_1.default(); function replacer(key, value) { @@ -2863,14 +2863,14 @@ exports.default = assertRender; /***/ }), -/***/ "./node_modules/@dojo/test-extras/support/selector.js": +/***/ "./node_modules/@dojo/framework/testing/support/selector.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); var cssSelect = __webpack_require__("./node_modules/css-select-umd/dist/index.js"); exports.parseSelector = function (selector) { var selectors = selector.split(' '); @@ -2979,51 +2979,14 @@ exports.default = select; /***/ }), -/***/ "./node_modules/@dojo/webpack-contrib/css-module-decorator-loader/index.js!./node_modules/css-loader/index.js?{\"modules\":true,\"sourceMap\":true,\"importLoaders\":1,\"localIdentName\":\"[hash:base64:8]\"}!./node_modules/postcss-loader/lib/index.js?{\"ident\":\"postcss\",\"plugins\":[null,{\"version\":\"6.0.23\",\"plugins\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\"postcssPlugin\":\"postcss-cssnext\",\"postcssVersion\":\"6.0.23\"}]}!./node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=css!./src/menu-item/menuItem.m.css": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module -exports.push([module.i, ".sUmUi4Sh {\r\n\theight: 100%;\r\n\tdisplay: inline-block;\r\n}\r\n\r\n._2Mk6Rdqa {\r\n\tcolor: #fff;\r\n\ttext-decoration: none;\r\n\tmargin: 0 6.4px;\r\n\tposition: relative;\r\n\tdisplay: -webkit-box;\r\n\tdisplay: -ms-flexbox;\r\n\tdisplay: flex;\r\n\t-webkit-box-orient: vertical;\r\n\t-webkit-box-direction: normal;\r\n\t -ms-flex-direction: column;\r\n\t flex-direction: column;\r\n\t-webkit-box-pack: center;\r\n\t -ms-flex-pack: center;\r\n\t justify-content: center;\r\n\theight: 48px;\r\n\tcursor: pointer;\r\n}\r\n\r\n._2Mk6Rdqa::after {\r\n\tdisplay: block;\r\n\tcontent: \"\";\r\n\tbackground: #fff;\r\n\theight: 2px;\r\n\tposition: absolute;\r\n\twidth: 100%;\r\n\tbottom: 0;\r\n\t-webkit-transition: -webkit-transform .3s ease-out;\r\n\ttransition: -webkit-transform .3s ease-out;\r\n\ttransition: transform .3s ease-out;\r\n\ttransition: transform .3s ease-out, -webkit-transform .3s ease-out;\r\n\t-webkit-transform: translateY(3px);\r\n\t transform: translateY(3px);\r\n}\r\n\r\n._1-f3ItOh::after {\r\n\t-webkit-transform: translateY(0);\r\n\t transform: translateY(0);\r\n}\r\n", "", {"version":3,"sources":["C:/Users/IEUser/Desktop/cli-build-widget/test-app/src/menu-item/menuItem.m.css"],"names":[],"mappings":"AAAA;CACC,aAAa;CACb,sBAAsB;CACtB;;AAED;CACC,YAAY;CACZ,sBAAsB;CACtB,gBAAgB;CAChB,mBAAmB;CACnB,qBAAqB;CACrB,qBAAqB;CACrB,cAAc;CACd,6BAA6B;CAC7B,8BAA8B;KAC1B,2BAA2B;SACvB,uBAAuB;CAC/B,yBAAyB;KACrB,sBAAsB;SAClB,wBAAwB;CAChC,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,eAAe;CACf,YAAY;CACZ,iBAAiB;CACjB,YAAY;CACZ,mBAAmB;CACnB,YAAY;CACZ,UAAU;CACV,mDAAmD;CACnD,2CAA2C;CAC3C,mCAAmC;CACnC,mEAAmE;CACnE,mCAAmC;SAC3B,2BAA2B;CACnC;;AAED;CACC,iCAAiC;SACzB,yBAAyB;CACjC","file":"menuItem.m.css","sourcesContent":[".root {\r\n\theight: 100%;\r\n\tdisplay: inline-block;\r\n}\r\n\r\n.item {\r\n\tcolor: #fff;\r\n\ttext-decoration: none;\r\n\tmargin: 0 6.4px;\r\n\tposition: relative;\r\n\tdisplay: -webkit-box;\r\n\tdisplay: -ms-flexbox;\r\n\tdisplay: flex;\r\n\t-webkit-box-orient: vertical;\r\n\t-webkit-box-direction: normal;\r\n\t -ms-flex-direction: column;\r\n\t flex-direction: column;\r\n\t-webkit-box-pack: center;\r\n\t -ms-flex-pack: center;\r\n\t justify-content: center;\r\n\theight: 48px;\r\n\tcursor: pointer;\r\n}\r\n\r\n.item::after {\r\n\tdisplay: block;\r\n\tcontent: \"\";\r\n\tbackground: #fff;\r\n\theight: 2px;\r\n\tposition: absolute;\r\n\twidth: 100%;\r\n\tbottom: 0;\r\n\t-webkit-transition: -webkit-transform .3s ease-out;\r\n\ttransition: -webkit-transform .3s ease-out;\r\n\ttransition: transform .3s ease-out;\r\n\ttransition: transform .3s ease-out, -webkit-transform .3s ease-out;\r\n\t-webkit-transform: translateY(3px);\r\n\t transform: translateY(3px);\r\n}\r\n\r\n.selected::after {\r\n\t-webkit-transform: translateY(0);\r\n\t transform: translateY(0);\r\n}\r\n"],"sourceRoot":""}]); - -// exports -exports.locals = {" _key": "test-app/menuItem", - "root": "sUmUi4Sh", - "item": "_2Mk6Rdqa", - "selected": "_1-f3ItOh" -}; - -/***/ }), - -/***/ "./node_modules/@dojo/webpack-contrib/css-module-decorator-loader/index.js!./node_modules/css-loader/index.js?{\"modules\":true,\"sourceMap\":true,\"importLoaders\":1,\"localIdentName\":\"[hash:base64:8]\"}!./node_modules/postcss-loader/lib/index.js?{\"ident\":\"postcss\",\"plugins\":[null,{\"version\":\"6.0.23\",\"plugins\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\"postcssPlugin\":\"postcss-cssnext\",\"postcssVersion\":\"6.0.23\"}]}!./node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=css!./src/menu/menu.m.css": -/***/ (function(module, exports, __webpack_require__) { - -exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(true); -// imports - - -// module -exports.push([module.i, "._3bA6jdSn {\r\n\twidth: 100%;\r\n\ttop: 0;\r\n\theight: 48px;\r\n\tz-index: 100;\r\n\tbackground-color: #1d1f20;\r\n}\r\n\r\n._1eoGfqku {\r\n\theight: 100%;\r\n\tmargin: 0 auto;\r\n}\r\n", "", {"version":3,"sources":["C:/Users/IEUser/Desktop/cli-build-widget/test-app/src/menu/menu.m.css"],"names":[],"mappings":"AAAA;CACC,YAAY;CACZ,OAAO;CACP,aAAa;CACb,aAAa;CACb,0BAA0B;CAC1B;;AAED;CACC,aAAa;CACb,eAAe;CACf","file":"menu.m.css","sourcesContent":[".root {\r\n\twidth: 100%;\r\n\ttop: 0;\r\n\theight: 48px;\r\n\tz-index: 100;\r\n\tbackground-color: #1d1f20;\r\n}\r\n\r\n.menuContainer {\r\n\theight: 100%;\r\n\tmargin: 0 auto;\r\n}\r\n"],"sourceRoot":""}]); - -// exports -exports.locals = {" _key": "test-app/menu", - "root": "_3bA6jdSn", - "menuContainer": "_1eoGfqku" -}; - -/***/ }), - -/***/ "./node_modules/@dojo/widget-core/Injector.js": +/***/ "./node_modules/@dojo/framework/widget-core/Injector.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Evented_1 = __webpack_require__("./node_modules/@dojo/core/Evented.js"); +var Evented_1 = __webpack_require__("./node_modules/@dojo/framework/core/Evented.js"); var Injector = /** @class */ (function (_super) { tslib_1.__extends(Injector, _super); function Injector(payload) { @@ -3050,15 +3013,15 @@ exports.default = Injector; /***/ }), -/***/ "./node_modules/@dojo/widget-core/NodeHandler.js": +/***/ "./node_modules/@dojo/framework/widget-core/NodeHandler.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Evented_1 = __webpack_require__("./node_modules/@dojo/core/Evented.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); +var Evented_1 = __webpack_require__("./node_modules/@dojo/framework/core/Evented.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); /** * Enum to identify the type of event. * Listening to 'Projector' will notify when projector is created or updated @@ -3102,17 +3065,17 @@ exports.default = NodeHandler; /***/ }), -/***/ "./node_modules/@dojo/widget-core/Registry.js": +/***/ "./node_modules/@dojo/framework/widget-core/Registry.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Promise_1 = __webpack_require__("./node_modules/@dojo/shim/Promise.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); -var Symbol_1 = __webpack_require__("./node_modules/@dojo/shim/Symbol.js"); -var Evented_1 = __webpack_require__("./node_modules/@dojo/core/Evented.js"); +var Promise_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Promise.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); +var Symbol_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); +var Evented_1 = __webpack_require__("./node_modules/@dojo/framework/core/Evented.js"); /** * Widget base symbol type */ @@ -3234,16 +3197,16 @@ exports.default = Registry; /***/ }), -/***/ "./node_modules/@dojo/widget-core/RegistryHandler.js": +/***/ "./node_modules/@dojo/framework/widget-core/RegistryHandler.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); -var Evented_1 = __webpack_require__("./node_modules/@dojo/core/Evented.js"); -var Registry_1 = __webpack_require__("./node_modules/@dojo/widget-core/Registry.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); +var Evented_1 = __webpack_require__("./node_modules/@dojo/framework/core/Evented.js"); +var Registry_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.js"); var RegistryHandler = /** @class */ (function (_super) { tslib_1.__extends(RegistryHandler, _super); function RegistryHandler() { @@ -3326,22 +3289,22 @@ exports.default = RegistryHandler; /***/ }), -/***/ "./node_modules/@dojo/widget-core/WidgetBase.js": +/***/ "./node_modules/@dojo/framework/widget-core/WidgetBase.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Map_1 = __webpack_require__("./node_modules/@dojo/shim/Map.js"); -var WeakMap_1 = __webpack_require__("./node_modules/@dojo/shim/WeakMap.js"); -var Symbol_1 = __webpack_require__("./node_modules/@dojo/shim/Symbol.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); -var diff_1 = __webpack_require__("./node_modules/@dojo/widget-core/diff.js"); -var RegistryHandler_1 = __webpack_require__("./node_modules/@dojo/widget-core/RegistryHandler.js"); -var NodeHandler_1 = __webpack_require__("./node_modules/@dojo/widget-core/NodeHandler.js"); -var vdom_1 = __webpack_require__("./node_modules/@dojo/widget-core/vdom.js"); -var Registry_1 = __webpack_require__("./node_modules/@dojo/widget-core/Registry.js"); +var Map_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Map.js"); +var WeakMap_1 = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.js"); +var Symbol_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); +var diff_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.js"); +var RegistryHandler_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/RegistryHandler.js"); +var NodeHandler_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/NodeHandler.js"); +var vdom_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.js"); +var Registry_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.js"); var decoratorMap = new Map_1.default(); var boundAuto = diff_1.auto.bind(null); exports.noBind = Symbol_1.default.for('dojoNoBind'); @@ -3449,7 +3412,7 @@ var WidgetBase = /** @class */ (function () { if (this._initialProperties === false || registeredDiffPropertyNames.length !== 0) { var allProperties = tslib_1.__spread(propertyNames, Object.keys(this._properties)); var checkedProperties = []; - var diffPropertyResults = {}; + var diffPropertyResults_1 = {}; var runReactions = false; for (var i = 0; i < allProperties.length; i++) { var propertyName = allProperties[i]; @@ -3468,7 +3431,7 @@ var WidgetBase = /** @class */ (function () { changedPropertyKeys.push(propertyName); } if (propertyName in properties) { - diffPropertyResults[propertyName] = result.value; + diffPropertyResults_1[propertyName] = result.value; } } } @@ -3478,18 +3441,24 @@ var WidgetBase = /** @class */ (function () { changedPropertyKeys.push(propertyName); } if (propertyName in properties) { - diffPropertyResults[propertyName] = result.value; + diffPropertyResults_1[propertyName] = result.value; } } } if (runReactions) { - this._mapDiffPropertyReactions(properties, changedPropertyKeys).forEach(function (args, reaction) { - if (args.changed) { - reaction.call(_this, args.previousProperties, args.newProperties); + var reactionFunctions = this.getDecorator('diffReaction'); + var executedReactions_1 = []; + reactionFunctions.forEach(function (_a) { + var reaction = _a.reaction, propertyName = _a.propertyName; + var propertyChanged = changedPropertyKeys.indexOf(propertyName) !== -1; + var reactionRun = executedReactions_1.indexOf(reaction) !== -1; + if (propertyChanged && !reactionRun) { + reaction.call(_this, _this._properties, diffPropertyResults_1); + executedReactions_1.push(reaction); } }); } - this._properties = diffPropertyResults; + this._properties = diffPropertyResults_1; this._changedPropertyKeys = changedPropertyKeys; } else { @@ -3604,28 +3573,6 @@ var WidgetBase = /** @class */ (function () { this._decoratorCache.set(decoratorKey, allDecorators); return allDecorators; }; - WidgetBase.prototype._mapDiffPropertyReactions = function (newProperties, changedPropertyKeys) { - var _this = this; - var reactionFunctions = this.getDecorator('diffReaction'); - return reactionFunctions.reduce(function (reactionPropertyMap, _a) { - var reaction = _a.reaction, propertyName = _a.propertyName; - var reactionArguments = reactionPropertyMap.get(reaction); - if (reactionArguments === undefined) { - reactionArguments = { - previousProperties: {}, - newProperties: {}, - changed: false - }; - } - reactionArguments.previousProperties[propertyName] = _this._properties[propertyName]; - reactionArguments.newProperties[propertyName] = newProperties[propertyName]; - if (changedPropertyKeys.indexOf(propertyName) !== -1) { - reactionArguments.changed = true; - } - reactionPropertyMap.set(reaction, reactionArguments); - return reactionPropertyMap; - }, new Map_1.default()); - }; /** * Binds unbound property functions to the specified `bind` property * @@ -3695,7 +3642,7 @@ var WidgetBase = /** @class */ (function () { var _this = this; var afterRenders = this.getDecorator('afterRender'); if (afterRenders.length > 0) { - return afterRenders.reduce(function (dNode, afterRenderFunction) { + dNode = afterRenders.reduce(function (dNode, afterRenderFunction) { return afterRenderFunction.call(_this, dNode); }, dNode); } @@ -3735,7 +3682,7 @@ exports.default = WidgetBase; /***/ }), -/***/ "./node_modules/@dojo/widget-core/animations/cssTransitions.js": +/***/ "./node_modules/@dojo/framework/widget-core/animations/cssTransitions.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3806,14 +3753,14 @@ exports.default = { /***/ }), -/***/ "./node_modules/@dojo/widget-core/d.js": +/***/ "./node_modules/@dojo/framework/widget-core/d.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Symbol_1 = __webpack_require__("./node_modules/@dojo/shim/Symbol.js"); +var Symbol_1 = __webpack_require__("./node_modules/@dojo/framework/shim/Symbol.js"); /** * The symbol identifier for a WNode type */ @@ -3936,13 +3883,13 @@ exports.dom = dom; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/afterRender.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/afterRender.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); function afterRender(method) { return handleDecorator_1.handleDecorator(function (target, propertyKey) { target.addDecorator('afterRender', propertyKey ? target[propertyKey] : method); @@ -3953,14 +3900,14 @@ exports.default = afterRender; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/alwaysRender.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); -var beforeProperties_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); +var beforeProperties_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.js"); function alwaysRender() { return handleDecorator_1.handleDecorator(function (target, propertyKey) { beforeProperties_1.beforeProperties(function () { @@ -3973,13 +3920,13 @@ exports.default = alwaysRender; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/beforeProperties.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); function beforeProperties(method) { return handleDecorator_1.handleDecorator(function (target, propertyKey) { target.addDecorator('beforeProperties', propertyKey ? target[propertyKey] : method); @@ -3990,14 +3937,14 @@ exports.default = beforeProperties; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/customElement.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/customElement.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var registerCustomElement_1 = __webpack_require__("./node_modules/@dojo/widget-core/registerCustomElement.js"); -var Registry_1 = __webpack_require__("./node_modules/@dojo/widget-core/Registry.js"); +var registerCustomElement_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/registerCustomElement.js"); +var Registry_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.js"); /** * This Decorator is provided properties that define the behavior of a custom element, and * registers that custom element. @@ -4020,13 +3967,14 @@ exports.default = customElement; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/diffProperty.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/diffProperty.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); +var diff_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.js"); /** * Decorator that can be used to register a function as a specific property diff * @@ -4035,6 +3983,7 @@ var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/de * @param diffFunction A diff function to run if diffType if DiffType.CUSTOM */ function diffProperty(propertyName, diffFunction, reactionFunction) { + if (diffFunction === void 0) { diffFunction = diff_1.auto; } return handleDecorator_1.handleDecorator(function (target, propertyKey) { target.addDecorator("diffProperty:" + propertyName, diffFunction.bind(null)); target.addDecorator('registeredDiffProperty', propertyName); @@ -4051,7 +4000,7 @@ exports.default = diffProperty; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/handleDecorator.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4078,15 +4027,15 @@ exports.default = handleDecorator; /***/ }), -/***/ "./node_modules/@dojo/widget-core/decorators/inject.js": +/***/ "./node_modules/@dojo/framework/widget-core/decorators/inject.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var WeakMap_1 = __webpack_require__("./node_modules/@dojo/shim/WeakMap.js"); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); -var beforeProperties_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/beforeProperties.js"); +var WeakMap_1 = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); +var beforeProperties_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/beforeProperties.js"); /** * Map of instances against registered injectors. */ @@ -4126,13 +4075,13 @@ exports.default = inject; /***/ }), -/***/ "./node_modules/@dojo/widget-core/diff.js": +/***/ "./node_modules/@dojo/framework/widget-core/diff.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var Registry_1 = __webpack_require__("./node_modules/@dojo/widget-core/Registry.js"); +var Registry_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.js"); function isObjectOrArray(value) { return Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value); } @@ -4205,18 +4154,18 @@ exports.auto = auto; /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Projector.js": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Projector.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var lang_1 = __webpack_require__("./node_modules/@dojo/core/lang.js"); -var cssTransitions_1 = __webpack_require__("./node_modules/@dojo/widget-core/animations/cssTransitions.js"); -var afterRender_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/afterRender.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); -var vdom_1 = __webpack_require__("./node_modules/@dojo/widget-core/vdom.js"); +var lang_1 = __webpack_require__("./node_modules/@dojo/framework/core/lang.js"); +var cssTransitions_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/animations/cssTransitions.js"); +var afterRender_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/afterRender.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); +var vdom_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/vdom.js"); /** * Represents the attach state of the projector */ @@ -4376,10 +4325,7 @@ function ProjectorMixin(Base) { return this._attachHandle; }; tslib_1.__decorate([ - afterRender_1.afterRender(), - tslib_1.__metadata("design:type", Function), - tslib_1.__metadata("design:paramtypes", [Object]), - tslib_1.__metadata("design:returntype", void 0) + afterRender_1.afterRender() ], Projector.prototype, "afterRender", null); return Projector; }(Base)); @@ -4390,18 +4336,18 @@ exports.default = ProjectorMixin; /***/ }), -/***/ "./node_modules/@dojo/widget-core/mixins/Themed.js": +/***/ "./node_modules/@dojo/framework/widget-core/mixins/Themed.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var Injector_1 = __webpack_require__("./node_modules/@dojo/widget-core/Injector.js"); -var inject_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/inject.js"); -var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/handleDecorator.js"); -var diffProperty_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/diffProperty.js"); -var diff_1 = __webpack_require__("./node_modules/@dojo/widget-core/diff.js"); +var Injector_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Injector.js"); +var inject_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/inject.js"); +var handleDecorator_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/handleDecorator.js"); +var diffProperty_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/diffProperty.js"); +var diff_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/diff.js"); var THEME_KEY = ' _key'; exports.INJECTED_THEME_KEY = Symbol('theme'); /** @@ -4525,10 +4471,7 @@ function ThemedMixin(Base) { }; tslib_1.__decorate([ diffProperty_1.diffProperty('theme', diff_1.shallow), - diffProperty_1.diffProperty('extraClasses', diff_1.shallow), - tslib_1.__metadata("design:type", Function), - tslib_1.__metadata("design:paramtypes", []), - tslib_1.__metadata("design:returntype", void 0) + diffProperty_1.diffProperty('extraClasses', diff_1.shallow) ], Themed.prototype, "onPropertiesChanged", null); Themed = tslib_1.__decorate([ inject_1.inject({ @@ -4550,20 +4493,20 @@ exports.default = ThemedMixin; /***/ }), -/***/ "./node_modules/@dojo/widget-core/registerCustomElement.js": +/***/ "./node_modules/@dojo/framework/widget-core/registerCustomElement.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var WidgetBase_1 = __webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.js"); -var Projector_1 = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Projector.js"); -var array_1 = __webpack_require__("./node_modules/@dojo/shim/array.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var Themed_1 = __webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.js"); -var alwaysRender_1 = __webpack_require__("./node_modules/@dojo/widget-core/decorators/alwaysRender.js"); +var WidgetBase_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.js"); +var Projector_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Projector.js"); +var array_1 = __webpack_require__("./node_modules/@dojo/framework/shim/array.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var Themed_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.js"); +var alwaysRender_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/alwaysRender.js"); var CustomElementChildType; (function (CustomElementChildType) { CustomElementChildType["DOJO"] = "DOJO"; @@ -4807,24 +4750,26 @@ exports.default = register; /***/ }), -/***/ "./node_modules/@dojo/widget-core/vdom.js": +/***/ "./node_modules/@dojo/framework/widget-core/vdom.js": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = __webpack_require__("./node_modules/tslib/tslib.es6.js"); -var global_1 = __webpack_require__("./node_modules/@dojo/shim/global.js"); -var array_1 = __webpack_require__("./node_modules/@dojo/shim/array.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); -var Registry_1 = __webpack_require__("./node_modules/@dojo/widget-core/Registry.js"); -var WeakMap_1 = __webpack_require__("./node_modules/@dojo/shim/WeakMap.js"); +var global_1 = __webpack_require__("./node_modules/@dojo/framework/shim/global.js"); +var array_1 = __webpack_require__("./node_modules/@dojo/framework/shim/array.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); +var Registry_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/Registry.js"); +var WeakMap_1 = __webpack_require__("./node_modules/@dojo/framework/shim/WeakMap.js"); var NAMESPACE_W3 = 'http://www.w3.org/'; var NAMESPACE_SVG = NAMESPACE_W3 + '2000/svg'; var NAMESPACE_XLINK = NAMESPACE_W3 + '1999/xlink'; var emptyArray = []; +var nodeOperations = ['focus', 'blur', 'scrollIntoView', 'click']; exports.widgetInstanceMap = new WeakMap_1.default(); var instanceMap = new WeakMap_1.default(); +var nextSiblingMap = new WeakMap_1.default(); var projectorStateMap = new WeakMap_1.default(); function same(dnode1, dnode2) { if (d_1.isVNode(dnode1) && d_1.isVNode(dnode2)) { @@ -4942,7 +4887,7 @@ function buildPreviousProperties(domNode, previous, current) { }, {}); return newProperties; } -function focusNode(propValue, previousValue, domNode, projectionOptions) { +function nodeOperation(propName, propValue, previousValue, domNode, projectionOptions) { var result; if (typeof propValue === 'function') { result = propValue(); @@ -4953,7 +4898,7 @@ function focusNode(propValue, previousValue, domNode, projectionOptions) { if (result === true) { var projectorState = projectorStateMap.get(projectionOptions.projectorInstance); projectorState.deferredRenderCallbacks.push(function () { - domNode.focus(); + domNode[propName](); }); } } @@ -5051,8 +4996,8 @@ function updateProperties(domNode, previousProperties, properties, projectionOpt } } } - else if (propName === 'focus') { - focusNode(propValue, previousValue, domNode, projectionOptions); + else if (nodeOperations.indexOf(propName) !== -1) { + nodeOperation(propName, propValue, previousValue, domNode, projectionOptions); } else if (propName === 'styles') { var styleNames = Object.keys(propValue); @@ -5209,7 +5154,8 @@ function nodeAdded(dnode, transitions) { } function nodeToRemove(dnode, transitions, projectionOptions) { if (d_1.isWNode(dnode)) { - var rendered = dnode.rendered || emptyArray; + var item = instanceMap.get(dnode.instance); + var rendered = (item ? item.dnode.rendered : dnode.rendered) || emptyArray; if (dnode.instance) { var instanceData = exports.widgetInstanceMap.get(dnode.instance); instanceData.onDetach(); @@ -5273,7 +5219,7 @@ function checkDistinguishable(childNodes, indexToCheck, parentInstance) { } } } -function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, projectionOptions) { +function updateChildren(parentVNode, siblings, oldChildren, newChildren, parentInstance, projectionOptions) { oldChildren = oldChildren || emptyArray; newChildren = newChildren; var oldChildrenLength = oldChildren.length; @@ -5293,38 +5239,49 @@ function updateChildren(parentVNode, oldChildren, newChildren, parentInstance, p addDeferredProperties(newChild, projectionOptions); } if (oldChild !== undefined && same(oldChild, newChild)) { - textUpdated = updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance) || textUpdated; oldIndex++; newIndex++; + textUpdated = + updateDom(oldChild, newChild, projectionOptions, parentVNode, parentInstance, oldChildren.slice(oldIndex), newChildren.slice(newIndex)) || textUpdated; return "continue"; } var findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1); var addChild = function () { var insertBeforeDomNode = undefined; + var childrenArray = oldChildren; + var nextIndex = oldIndex + 1; var child = oldChildren[oldIndex]; + if (!child) { + child = siblings[0]; + nextIndex = 1; + childrenArray = siblings; + } if (child) { - var nextIndex = oldIndex + 1; var insertBeforeChildren = [child]; while (insertBeforeChildren.length) { var insertBefore = insertBeforeChildren.shift(); if (d_1.isWNode(insertBefore)) { - if (insertBefore.rendered) { - insertBeforeChildren.push.apply(insertBeforeChildren, tslib_1.__spread(insertBefore.rendered)); + var item = instanceMap.get(insertBefore.instance); + if (item && item.dnode.rendered) { + insertBeforeChildren.push.apply(insertBeforeChildren, tslib_1.__spread(item.dnode.rendered)); } } else { if (insertBefore.domNode) { + if (insertBefore.domNode.parentElement !== parentVNode.domNode) { + break; + } insertBeforeDomNode = insertBefore.domNode; break; } } - if (insertBeforeChildren.length === 0 && oldChildren[nextIndex]) { - insertBeforeChildren.push(oldChildren[nextIndex]); + if (insertBeforeChildren.length === 0 && childrenArray[nextIndex]) { + insertBeforeChildren.push(childrenArray[nextIndex]); nextIndex++; } } } - createDom(newChild, parentVNode, insertBeforeDomNode, projectionOptions, parentInstance); + createDom(newChild, parentVNode, newChildren.slice(newIndex + 1), insertBeforeDomNode, projectionOptions, parentInstance); nodeAdded(newChild, transitions); var indexToCheck = newIndex; projectorState.afterRenderCallbacks.push(function () { @@ -5398,6 +5355,7 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i projectionOptions = tslib_1.__assign({}, projectionOptions, { depth: projectionOptions.depth + 1 }); for (var i = 0; i < children.length; i++) { var child = children[i]; + var nextSiblings = children.slice(i + 1); if (d_1.isVNode(child)) { if (projectorState.merge && childNodes) { var domElement = undefined; @@ -5408,10 +5366,10 @@ function addChildren(parentVNode, children, projectionOptions, parentInstance, i } } } - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance); } else { - createDom(child, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes); + createDom(child, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes); } nodeAdded(child, transitions); } @@ -5439,7 +5397,7 @@ function initPropertiesAndChildren(domNode, dnode, parentInstance, projectionOpt } dnode.inserted = true; } -function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentInstance, childNodes) { +function createDom(dnode, parentVNode, nextSiblings, insertBefore, projectionOptions, parentInstance, childNodes) { var domNode; var projectorState = projectorStateMap.get(projectionOptions.projectorInstance); if (d_1.isWNode(dnode)) { @@ -5454,6 +5412,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } var instance_1 = new widgetConstructor(); dnode.instance = instance_1; + nextSiblingMap.set(instance_1, nextSiblings); var instanceData_1 = exports.widgetInstanceMap.get(instance_1); instanceData_1.invalidate = function () { instanceData_1.dirty = true; @@ -5534,7 +5493,7 @@ function createDom(dnode, parentVNode, insertBefore, projectionOptions, parentIn } } } -function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance) { +function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstance, oldNextSiblings, nextSiblings) { if (d_1.isWNode(dnode)) { var instance = previous.instance; var _a = instanceMap.get(instance), parentVNode_1 = _a.parentVNode, node = _a.dnode; @@ -5544,12 +5503,13 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan instance.__setCoreProperties__(dnode.coreProperties); instance.__setChildren__(dnode.children); instance.__setProperties__(dnode.properties); + nextSiblingMap.set(instance, nextSiblings); dnode.instance = instance; if (instanceData.dirty === true) { var rendered = instance.__render__(); instanceData.rendering = false; dnode.rendered = filterAndDecorateChildren(rendered, instance); - updateChildren(parentVNode_1, previousRendered, dnode.rendered, instance, projectionOptions); + updateChildren(parentVNode_1, oldNextSiblings, previousRendered, dnode.rendered, instance, projectionOptions); } else { instanceData.rendering = false; @@ -5582,7 +5542,7 @@ function updateDom(previous, dnode, projectionOptions, parentVNode, parentInstan var children = filterAndDecorateChildren(dnode.children, parentInstance); dnode.children = children; updated = - updateChildren(dnode, previous.children, children, parentInstance, projectionOptions) || updated; + updateChildren(dnode, oldNextSiblings, previous.children, children, parentInstance, projectionOptions) || updated; } var previousProperties_1 = buildPreviousProperties(domNode_2, previous, dnode); if (dnode.attributes && dnode.events) { @@ -5693,7 +5653,8 @@ function render(projectionOptions) { previouslyRendered.push(instance); var _a = instanceMap.get(instance), parentVNode = _a.parentVNode, dnode = _a.dnode; var instanceData = exports.widgetInstanceMap.get(instance); - updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance); + var nextSiblings = nextSiblingMap.get(instance); + updateDom(dnode, toInternalWNode(instance, instanceData), projectionOptions, parentVNode, instance, nextSiblings, nextSiblings); } } runAfterRenderCallbacks(projectionOptions); @@ -5725,7 +5686,7 @@ exports.dom = { scheduleRender(finalProjectorOptions); } }; - updateDom(node, node, finalProjectorOptions, parentVNode, instance); + updateDom(node, node, finalProjectorOptions, parentVNode, instance, [], []); projectorState.afterRenderCallbacks.push(function () { instanceData.onAttach(); }); @@ -5751,6 +5712,43 @@ exports.dom = { /***/ }), +/***/ "./node_modules/@dojo/webpack-contrib/css-module-decorator-loader/index.js!./node_modules/css-loader/index.js?{\"modules\":true,\"sourceMap\":true,\"importLoaders\":1,\"localIdentName\":\"[hash:base64:8]\"}!./node_modules/postcss-loader/lib/index.js?{\"ident\":\"postcss\",\"plugins\":[null,{\"version\":\"6.0.23\",\"plugins\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\"postcssPlugin\":\"postcss-cssnext\",\"postcssVersion\":\"6.0.23\"}]}!./node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=css!./src/menu-item/menuItem.m.css": +/***/ (function(module, exports, __webpack_require__) { + +exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(true); +// imports + + +// module +exports.push([module.i, ".sUmUi4Sh {\r\n\theight: 100%;\r\n\tdisplay: inline-block;\r\n}\r\n\r\n._2Mk6Rdqa {\r\n\tcolor: #fff;\r\n\ttext-decoration: none;\r\n\tmargin: 0 6.4px;\r\n\tposition: relative;\r\n\tdisplay: -webkit-box;\r\n\tdisplay: -ms-flexbox;\r\n\tdisplay: flex;\r\n\t-webkit-box-orient: vertical;\r\n\t-webkit-box-direction: normal;\r\n\t -ms-flex-direction: column;\r\n\t flex-direction: column;\r\n\t-webkit-box-pack: center;\r\n\t -ms-flex-pack: center;\r\n\t justify-content: center;\r\n\theight: 48px;\r\n\tcursor: pointer;\r\n}\r\n\r\n._2Mk6Rdqa::after {\r\n\tdisplay: block;\r\n\tcontent: \"\";\r\n\tbackground: #fff;\r\n\theight: 2px;\r\n\tposition: absolute;\r\n\twidth: 100%;\r\n\tbottom: 0;\r\n\t-webkit-transition: -webkit-transform .3s ease-out;\r\n\ttransition: -webkit-transform .3s ease-out;\r\n\ttransition: transform .3s ease-out;\r\n\ttransition: transform .3s ease-out, -webkit-transform .3s ease-out;\r\n\t-webkit-transform: translateY(3px);\r\n\t transform: translateY(3px);\r\n}\r\n\r\n._1-f3ItOh::after {\r\n\t-webkit-transform: translateY(0);\r\n\t transform: translateY(0);\r\n}\r\n", "", {"version":3,"sources":["C:/Users/IEUser/Desktop/cli-build-widget/test-app/src/menu-item/menuItem.m.css"],"names":[],"mappings":"AAAA;CACC,aAAa;CACb,sBAAsB;CACtB;;AAED;CACC,YAAY;CACZ,sBAAsB;CACtB,gBAAgB;CAChB,mBAAmB;CACnB,qBAAqB;CACrB,qBAAqB;CACrB,cAAc;CACd,6BAA6B;CAC7B,8BAA8B;KAC1B,2BAA2B;SACvB,uBAAuB;CAC/B,yBAAyB;KACrB,sBAAsB;SAClB,wBAAwB;CAChC,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,eAAe;CACf,YAAY;CACZ,iBAAiB;CACjB,YAAY;CACZ,mBAAmB;CACnB,YAAY;CACZ,UAAU;CACV,mDAAmD;CACnD,2CAA2C;CAC3C,mCAAmC;CACnC,mEAAmE;CACnE,mCAAmC;SAC3B,2BAA2B;CACnC;;AAED;CACC,iCAAiC;SACzB,yBAAyB;CACjC","file":"menuItem.m.css","sourcesContent":[".root {\r\n\theight: 100%;\r\n\tdisplay: inline-block;\r\n}\r\n\r\n.item {\r\n\tcolor: #fff;\r\n\ttext-decoration: none;\r\n\tmargin: 0 6.4px;\r\n\tposition: relative;\r\n\tdisplay: -webkit-box;\r\n\tdisplay: -ms-flexbox;\r\n\tdisplay: flex;\r\n\t-webkit-box-orient: vertical;\r\n\t-webkit-box-direction: normal;\r\n\t -ms-flex-direction: column;\r\n\t flex-direction: column;\r\n\t-webkit-box-pack: center;\r\n\t -ms-flex-pack: center;\r\n\t justify-content: center;\r\n\theight: 48px;\r\n\tcursor: pointer;\r\n}\r\n\r\n.item::after {\r\n\tdisplay: block;\r\n\tcontent: \"\";\r\n\tbackground: #fff;\r\n\theight: 2px;\r\n\tposition: absolute;\r\n\twidth: 100%;\r\n\tbottom: 0;\r\n\t-webkit-transition: -webkit-transform .3s ease-out;\r\n\ttransition: -webkit-transform .3s ease-out;\r\n\ttransition: transform .3s ease-out;\r\n\ttransition: transform .3s ease-out, -webkit-transform .3s ease-out;\r\n\t-webkit-transform: translateY(3px);\r\n\t transform: translateY(3px);\r\n}\r\n\r\n.selected::after {\r\n\t-webkit-transform: translateY(0);\r\n\t transform: translateY(0);\r\n}\r\n"],"sourceRoot":""}]); + +// exports +exports.locals = {" _key": "test-app/menuItem", + "root": "sUmUi4Sh", + "item": "_2Mk6Rdqa", + "selected": "_1-f3ItOh" +}; + +/***/ }), + +/***/ "./node_modules/@dojo/webpack-contrib/css-module-decorator-loader/index.js!./node_modules/css-loader/index.js?{\"modules\":true,\"sourceMap\":true,\"importLoaders\":1,\"localIdentName\":\"[hash:base64:8]\"}!./node_modules/postcss-loader/lib/index.js?{\"ident\":\"postcss\",\"plugins\":[null,{\"version\":\"6.0.23\",\"plugins\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\"postcssPlugin\":\"postcss-cssnext\",\"postcssVersion\":\"6.0.23\"}]}!./node_modules/@dojo/webpack-contrib/css-module-dts-loader/index.js?type=css!./src/menu/menu.m.css": +/***/ (function(module, exports, __webpack_require__) { + +exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(true); +// imports + + +// module +exports.push([module.i, "._3bA6jdSn {\r\n\twidth: 100%;\r\n\ttop: 0;\r\n\theight: 48px;\r\n\tz-index: 100;\r\n\tbackground-color: #1d1f20;\r\n}\r\n\r\n._1eoGfqku {\r\n\theight: 100%;\r\n\tmargin: 0 auto;\r\n}\r\n", "", {"version":3,"sources":["C:/Users/IEUser/Desktop/cli-build-widget/test-app/src/menu/menu.m.css"],"names":[],"mappings":"AAAA;CACC,YAAY;CACZ,OAAO;CACP,aAAa;CACb,aAAa;CACb,0BAA0B;CAC1B;;AAED;CACC,aAAa;CACb,eAAe;CACf","file":"menu.m.css","sourcesContent":[".root {\r\n\twidth: 100%;\r\n\ttop: 0;\r\n\theight: 48px;\r\n\tz-index: 100;\r\n\tbackground-color: #1d1f20;\r\n}\r\n\r\n.menuContainer {\r\n\theight: 100%;\r\n\tmargin: 0 auto;\r\n}\r\n"],"sourceRoot":""}]); + +// exports +exports.locals = {" _key": "test-app/menu", + "root": "_3bA6jdSn", + "menuContainer": "_1eoGfqku" +}; + +/***/ }), + /***/ "./node_modules/css-loader/lib/css-base.js": /***/ (function(module, exports) { @@ -13220,7 +13218,7 @@ module.exports = g; /***/ (function(module, exports, __webpack_require__) { "use strict"; -var cov_2k23f93zom=function(){var path="C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts",hash="e17f8dd631e603ffe41ae0ac2a2903f34de51c1a",global=new Function('return this')(),gcv="__coverage__",coverageData={path:"C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts",statementMap:{"0":{start:{line:2,column:0},end:{line:2,column:62}},"1":{start:{line:3,column:14},end:{line:3,column:30}},"2":{start:{line:4,column:10},end:{line:4,column:40}},"3":{start:{line:5,column:22},end:{line:5,column:75}},"4":{start:{line:6,column:15},end:{line:6,column:57}},"5":{start:{line:7,column:19},end:{line:7,column:58}},"6":{start:{line:8,column:10},end:{line:8,column:37}},"7":{start:{line:9,column:30},end:{line:36,column:48}},"8":{start:{line:10,column:4},end:{line:10,column:40}},"9":{start:{line:12,column:8},end:{line:12,column:72}},"10":{start:{line:14,column:4},end:{line:16,column:6}},"11":{start:{line:15,column:8},end:{line:15,column:87}},"12":{start:{line:17,column:4},end:{line:25,column:6}},"13":{start:{line:18,column:17},end:{line:18,column:32}},"14":{start:{line:18,column:42},end:{line:18,column:50}},"15":{start:{line:18,column:63},end:{line:18,column:74}},"16":{start:{line:19,column:8},end:{line:24,column:11}},"17":{start:{line:26,column:4},end:{line:34,column:17}},"18":{start:{line:35,column:4},end:{line:35,column:20}},"19":{start:{line:37,column:0},end:{line:37,column:28}},"20":{start:{line:38,column:0},end:{line:38,column:27}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:9,column:30},end:{line:9,column:31}},loc:{start:{line:9,column:48},end:{line:36,column:1}},line:9},"1":{name:"MenuItem",decl:{start:{line:11,column:13},end:{line:11,column:21}},loc:{start:{line:11,column:24},end:{line:13,column:5}},line:11},"2":{name:"(anonymous_2)",decl:{start:{line:14,column:34},end:{line:14,column:35}},loc:{start:{line:14,column:46},end:{line:16,column:5}},line:14},"3":{name:"(anonymous_3)",decl:{start:{line:17,column:32},end:{line:17,column:33}},loc:{start:{line:17,column:44},end:{line:25,column:5}},line:17}},branchMap:{"0":{loc:{start:{line:12,column:15},end:{line:12,column:71}},type:"binary-expr",locations:[{start:{line:12,column:15},end:{line:12,column:30}},{start:{line:12,column:34},end:{line:12,column:63}},{start:{line:12,column:67},end:{line:12,column:71}}],line:12},"1":{loc:{start:{line:15,column:8},end:{line:15,column:86}},type:"binary-expr",locations:[{start:{line:15,column:8},end:{line:15,column:34}},{start:{line:15,column:38},end:{line:15,column:86}}],line:15},"2":{loc:{start:{line:21,column:47},end:{line:21,column:77}},type:"cond-expr",locations:[{start:{line:21,column:58},end:{line:21,column:70}},{start:{line:21,column:73},end:{line:21,column:77}}],line:21}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0},f:{"0":0,"1":0,"2":0,"3":0},b:{"0":[0,0,0],"1":[0,0],"2":[0,0]},inputSourceMap:{version:3,sources:["C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts"],names:[],mappings:";;;AAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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",file:"C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts",sourcesContent:["import { v } from '@dojo/widget-core/d';\r\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\r\nimport { WidgetProperties } from '@dojo/widget-core/interfaces';\r\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\r\n\r\nimport * as css from './menuItem.m.css';\r\n\r\nexport interface MenuItemProperties extends WidgetProperties {\r\n\ttitle: string;\r\n\tselected?: boolean;\r\n\tdata?: any;\r\n\tonSelected?: (data: any) => void;\r\n}\r\n\r\n@customElement({\r\n\ttag: 'demo-menu-item',\r\n\tattributes: ['title', 'selected'],\r\n\tevents: ['onSelected'],\r\n\tproperties: ['data', 'selected']\r\n})\r\n@theme(css)\r\nexport class MenuItem extends ThemedMixin(WidgetBase) {\r\n\tprivate _onClick() {\r\n\t\tthis.properties.onSelected && this.properties.onSelected(this.properties.data);\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\tconst { title, selected } = this.properties;\r\n\r\n\t\treturn v('li', { classes: this.theme(css.root) }, [\r\n\t\t\tv(\r\n\t\t\t\t'span',\r\n\t\t\t\t{\r\n\t\t\t\t\tclasses: this.theme([css.item, selected ? css.selected : null]),\r\n\t\t\t\t\tonclick: this._onClick\r\n\t\t\t\t},\r\n\t\t\t\t[title]\r\n\t\t\t)\r\n\t\t]);\r\n\t}\r\n}\r\n\r\nexport default MenuItem;\r\n"]},_coverageSchema:"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c"},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();cov_2k23f93zom.s[0]++;Object.defineProperty(exports,"__esModule",{value:true});var tslib_1=(cov_2k23f93zom.s[1]++,__webpack_require__("./node_modules/tslib/tslib.es6.js"));var d_1=(cov_2k23f93zom.s[2]++,__webpack_require__("./node_modules/@dojo/widget-core/d.js"));var customElement_1=(cov_2k23f93zom.s[3]++,__webpack_require__("./node_modules/@dojo/widget-core/decorators/customElement.js"));var Themed_1=(cov_2k23f93zom.s[4]++,__webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.js"));var WidgetBase_1=(cov_2k23f93zom.s[5]++,__webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.js"));var css=(cov_2k23f93zom.s[6]++,__webpack_require__("./src/menu-item/menuItem.m.css"));var MenuItem=(/** @class */cov_2k23f93zom.s[7]++,function(_super){cov_2k23f93zom.f[0]++;cov_2k23f93zom.s[8]++;tslib_1.__extends(MenuItem,_super);function MenuItem(){cov_2k23f93zom.f[1]++;cov_2k23f93zom.s[9]++;return(cov_2k23f93zom.b[0][0]++,_super!==null)&&(cov_2k23f93zom.b[0][1]++,_super.apply(this,arguments))||(cov_2k23f93zom.b[0][2]++,this);}cov_2k23f93zom.s[10]++;MenuItem.prototype._onClick=function(){cov_2k23f93zom.f[2]++;cov_2k23f93zom.s[11]++;(cov_2k23f93zom.b[1][0]++,this.properties.onSelected)&&(cov_2k23f93zom.b[1][1]++,this.properties.onSelected(this.properties.data));};cov_2k23f93zom.s[12]++;MenuItem.prototype.render=function(){cov_2k23f93zom.f[3]++;var _a=(cov_2k23f93zom.s[13]++,this.properties),title=(cov_2k23f93zom.s[14]++,_a.title),selected=(cov_2k23f93zom.s[15]++,_a.selected);cov_2k23f93zom.s[16]++;return d_1.v('li',{classes:this.theme(css.root)},[d_1.v('span',{classes:this.theme([css.item,selected?(cov_2k23f93zom.b[2][0]++,css.selected):(cov_2k23f93zom.b[2][1]++,null)]),onclick:this._onClick},[title])]);};cov_2k23f93zom.s[17]++;MenuItem=tslib_1.__decorate([customElement_1.customElement({tag:'demo-menu-item',attributes:['title','selected'],events:['onSelected'],properties:['data','selected']}),Themed_1.theme(css)],MenuItem);cov_2k23f93zom.s[18]++;return MenuItem;}(Themed_1.ThemedMixin(WidgetBase_1.WidgetBase)));cov_2k23f93zom.s[19]++;exports.MenuItem=MenuItem;cov_2k23f93zom.s[20]++;exports.default=MenuItem; +var cov_2k23f93zom=function(){var path="C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts",hash="cfaf6f318b70cece763698814f5c5e28a4aa65b6",Function=function(){}.constructor,global=new Function('return this')(),gcv="__coverage__",coverageData={path:"C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts",statementMap:{"0":{start:{line:2,column:0},end:{line:2,column:62}},"1":{start:{line:3,column:14},end:{line:3,column:30}},"2":{start:{line:4,column:10},end:{line:4,column:50}},"3":{start:{line:5,column:22},end:{line:5,column:85}},"4":{start:{line:6,column:15},end:{line:6,column:67}},"5":{start:{line:7,column:19},end:{line:7,column:68}},"6":{start:{line:8,column:10},end:{line:8,column:37}},"7":{start:{line:9,column:30},end:{line:36,column:48}},"8":{start:{line:10,column:4},end:{line:10,column:40}},"9":{start:{line:12,column:8},end:{line:12,column:72}},"10":{start:{line:14,column:4},end:{line:16,column:6}},"11":{start:{line:15,column:8},end:{line:15,column:87}},"12":{start:{line:17,column:4},end:{line:25,column:6}},"13":{start:{line:18,column:17},end:{line:18,column:32}},"14":{start:{line:18,column:42},end:{line:18,column:50}},"15":{start:{line:18,column:63},end:{line:18,column:74}},"16":{start:{line:19,column:8},end:{line:24,column:11}},"17":{start:{line:26,column:4},end:{line:34,column:17}},"18":{start:{line:35,column:4},end:{line:35,column:20}},"19":{start:{line:37,column:0},end:{line:37,column:28}},"20":{start:{line:38,column:0},end:{line:38,column:27}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:9,column:30},end:{line:9,column:31}},loc:{start:{line:9,column:48},end:{line:36,column:1}},line:9},"1":{name:"MenuItem",decl:{start:{line:11,column:13},end:{line:11,column:21}},loc:{start:{line:11,column:24},end:{line:13,column:5}},line:11},"2":{name:"(anonymous_2)",decl:{start:{line:14,column:34},end:{line:14,column:35}},loc:{start:{line:14,column:46},end:{line:16,column:5}},line:14},"3":{name:"(anonymous_3)",decl:{start:{line:17,column:32},end:{line:17,column:33}},loc:{start:{line:17,column:44},end:{line:25,column:5}},line:17}},branchMap:{"0":{loc:{start:{line:12,column:15},end:{line:12,column:71}},type:"binary-expr",locations:[{start:{line:12,column:15},end:{line:12,column:30}},{start:{line:12,column:34},end:{line:12,column:63}},{start:{line:12,column:67},end:{line:12,column:71}}],line:12},"1":{loc:{start:{line:15,column:8},end:{line:15,column:86}},type:"binary-expr",locations:[{start:{line:15,column:8},end:{line:15,column:34}},{start:{line:15,column:38},end:{line:15,column:86}}],line:15},"2":{loc:{start:{line:21,column:47},end:{line:21,column:77}},type:"cond-expr",locations:[{start:{line:21,column:58},end:{line:21,column:70}},{start:{line:21,column:73},end:{line:21,column:77}}],line:21}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0},f:{"0":0,"1":0,"2":0,"3":0},b:{"0":[0,0,0],"1":[0,0],"2":[0,0]},inputSourceMap:{version:3,sources:["C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts"],names:[],mappings:";;;AAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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",file:"C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts",sourcesContent:["import { v } from '@dojo/framework/widget-core/d';\r\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\r\nimport { WidgetProperties } from '@dojo/framework/widget-core/interfaces';\r\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\r\n\r\nimport * as css from './menuItem.m.css';\r\n\r\nexport interface MenuItemProperties extends WidgetProperties {\r\n\ttitle: string;\r\n\tselected?: boolean;\r\n\tdata?: any;\r\n\tonSelected?: (data: any) => void;\r\n}\r\n\r\n@customElement({\r\n\ttag: 'demo-menu-item',\r\n\tattributes: ['title', 'selected'],\r\n\tevents: ['onSelected'],\r\n\tproperties: ['data', 'selected']\r\n})\r\n@theme(css)\r\nexport class MenuItem extends ThemedMixin(WidgetBase) {\r\n\tprivate _onClick() {\r\n\t\tthis.properties.onSelected && this.properties.onSelected(this.properties.data);\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\tconst { title, selected } = this.properties;\r\n\r\n\t\treturn v('li', { classes: this.theme(css.root) }, [\r\n\t\t\tv(\r\n\t\t\t\t'span',\r\n\t\t\t\t{\r\n\t\t\t\t\tclasses: this.theme([css.item, selected ? css.selected : null]),\r\n\t\t\t\t\tonclick: this._onClick\r\n\t\t\t\t},\r\n\t\t\t\t[title]\r\n\t\t\t)\r\n\t\t]);\r\n\t}\r\n}\r\n\r\nexport default MenuItem;\r\n"]},_coverageSchema:"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c"},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();cov_2k23f93zom.s[0]++;Object.defineProperty(exports,"__esModule",{value:true});var tslib_1=(cov_2k23f93zom.s[1]++,__webpack_require__("./node_modules/tslib/tslib.es6.js"));var d_1=(cov_2k23f93zom.s[2]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"));var customElement_1=(cov_2k23f93zom.s[3]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/customElement.js"));var Themed_1=(cov_2k23f93zom.s[4]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.js"));var WidgetBase_1=(cov_2k23f93zom.s[5]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.js"));var css=(cov_2k23f93zom.s[6]++,__webpack_require__("./src/menu-item/menuItem.m.css"));var MenuItem=(cov_2k23f93zom.s[7]++,function(_super){cov_2k23f93zom.f[0]++;cov_2k23f93zom.s[8]++;tslib_1.__extends(MenuItem,_super);function MenuItem(){cov_2k23f93zom.f[1]++;cov_2k23f93zom.s[9]++;return(cov_2k23f93zom.b[0][0]++,_super!==null)&&(cov_2k23f93zom.b[0][1]++,_super.apply(this,arguments))||(cov_2k23f93zom.b[0][2]++,this);}cov_2k23f93zom.s[10]++;MenuItem.prototype._onClick=function(){cov_2k23f93zom.f[2]++;cov_2k23f93zom.s[11]++;(cov_2k23f93zom.b[1][0]++,this.properties.onSelected)&&(cov_2k23f93zom.b[1][1]++,this.properties.onSelected(this.properties.data));};cov_2k23f93zom.s[12]++;MenuItem.prototype.render=function(){cov_2k23f93zom.f[3]++;var _a=(cov_2k23f93zom.s[13]++,this.properties),title=(cov_2k23f93zom.s[14]++,_a.title),selected=(cov_2k23f93zom.s[15]++,_a.selected);cov_2k23f93zom.s[16]++;return d_1.v('li',{classes:this.theme(css.root)},[d_1.v('span',{classes:this.theme([css.item,selected?(cov_2k23f93zom.b[2][0]++,css.selected):(cov_2k23f93zom.b[2][1]++,null)]),onclick:this._onClick},[title])]);};cov_2k23f93zom.s[17]++;MenuItem=tslib_1.__decorate([customElement_1.customElement({tag:'demo-menu-item',attributes:['title','selected'],events:['onSelected'],properties:['data','selected']}),Themed_1.theme(css)],MenuItem);cov_2k23f93zom.s[18]++;return MenuItem;}(Themed_1.ThemedMixin(WidgetBase_1.WidgetBase)));cov_2k23f93zom.s[19]++;exports.MenuItem=MenuItem;cov_2k23f93zom.s[20]++;exports.default=MenuItem; /***/ }), @@ -13260,7 +13258,7 @@ if(false) { /***/ (function(module, exports, __webpack_require__) { "use strict"; -var cov_1ag1n6vand=function(){var path="C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts",hash="b63b28122b04d04c7c09819946a001d35d03d6bf",global=new Function('return this')(),gcv="__coverage__",coverageData={path:"C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts",statementMap:{"0":{start:{line:2,column:0},end:{line:2,column:62}},"1":{start:{line:3,column:14},end:{line:3,column:30}},"2":{start:{line:4,column:10},end:{line:4,column:40}},"3":{start:{line:5,column:22},end:{line:5,column:75}},"4":{start:{line:6,column:15},end:{line:6,column:57}},"5":{start:{line:7,column:19},end:{line:7,column:58}},"6":{start:{line:8,column:10},end:{line:8,column:33}},"7":{start:{line:9,column:26},end:{line:49,column:48}},"8":{start:{line:10,column:4},end:{line:10,column:36}},"9":{start:{line:12,column:8},end:{line:12,column:72}},"10":{start:{line:14,column:4},end:{line:18,column:6}},"11":{start:{line:15,column:8},end:{line:15,column:30}},"12":{start:{line:16,column:8},end:{line:16,column:41}},"13":{start:{line:17,column:8},end:{line:17,column:26}},"14":{start:{line:19,column:4},end:{line:40,column:6}},"15":{start:{line:20,column:20},end:{line:20,column:24}},"16":{start:{line:21,column:20},end:{line:34,column:10}},"17":{start:{line:22,column:12},end:{line:32,column:13}},"18":{start:{line:23,column:33},end:{line:27,column:17}},"19":{start:{line:25,column:24},end:{line:25,column:55}},"20":{start:{line:28,column:16},end:{line:30,column:17}},"21":{start:{line:29,column:20},end:{line:29,column:70}},"22":{start:{line:31,column:16},end:{line:31,column:86}},"23":{start:{line:33,column:12},end:{line:33,column:25}},"24":{start:{line:35,column:8},end:{line:39,column:11}},"25":{start:{line:41,column:4},end:{line:47,column:13}},"26":{start:{line:48,column:4},end:{line:48,column:16}},"27":{start:{line:50,column:0},end:{line:50,column:20}},"28":{start:{line:51,column:0},end:{line:51,column:23}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:9,column:26},end:{line:9,column:27}},loc:{start:{line:9,column:44},end:{line:49,column:1}},line:9},"1":{name:"Menu",decl:{start:{line:11,column:13},end:{line:11,column:17}},loc:{start:{line:11,column:20},end:{line:13,column:5}},line:11},"2":{name:"(anonymous_2)",decl:{start:{line:14,column:33},end:{line:14,column:34}},loc:{start:{line:14,column:53},end:{line:18,column:5}},line:14},"3":{name:"(anonymous_3)",decl:{start:{line:19,column:28},end:{line:19,column:29}},loc:{start:{line:19,column:40},end:{line:40,column:5}},line:19},"4":{name:"(anonymous_4)",decl:{start:{line:21,column:38},end:{line:21,column:39}},loc:{start:{line:21,column:62},end:{line:34,column:9}},line:21},"5":{name:"(anonymous_5)",decl:{start:{line:24,column:32},end:{line:24,column:33}},loc:{start:{line:24,column:48},end:{line:26,column:21}},line:24}},branchMap:{"0":{loc:{start:{line:12,column:15},end:{line:12,column:71}},type:"binary-expr",locations:[{start:{line:12,column:15},end:{line:12,column:30}},{start:{line:12,column:34},end:{line:12,column:63}},{start:{line:12,column:67},end:{line:12,column:71}}],line:12},"1":{loc:{start:{line:22,column:12},end:{line:32,column:13}},type:"if",locations:[{start:{line:22,column:12},end:{line:32,column:13}},{start:{line:22,column:12},end:{line:32,column:13}}],line:22},"2":{loc:{start:{line:28,column:16},end:{line:30,column:17}},type:"if",locations:[{start:{line:28,column:16},end:{line:30,column:17}},{start:{line:28,column:16},end:{line:30,column:17}}],line:28}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},b:{"0":[0,0,0],"1":[0,0],"2":[0,0]},inputSourceMap:{version:3,sources:["C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts"],names:[],mappings:";;;AAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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",file:"C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts",sourcesContent:["import { v } from '@dojo/widget-core/d';\r\nimport { customElement } from '@dojo/widget-core/decorators/customElement';\r\nimport { WidgetProperties, WNode } from '@dojo/widget-core/interfaces';\r\nimport { theme, ThemedMixin } from '@dojo/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/widget-core/WidgetBase';\r\nimport { MenuItem, MenuItemProperties } from '../menu-item/MenuItem';\r\n\r\nimport * as css from './menu.m.css';\r\n\r\ninterface MenuProperties extends WidgetProperties {\r\n\tonSelected: (data: any) => void;\r\n}\r\n\r\n@customElement({\r\n\ttag: 'demo-menu',\r\n\tevents: ['onSelected']\r\n})\r\n@theme(css)\r\nexport class Menu extends ThemedMixin(WidgetBase)> {\r\n\tprivate _selectedId: number;\r\n\r\n\tprivate _onSelected(id: number, data: any) {\r\n\t\tthis._selectedId = id;\r\n\t\tthis.properties.onSelected(data);\r\n\t\tthis.invalidate();\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\tconst items = this.children.map((child, index) => {\r\n\t\t\tif (child) {\r\n\t\t\t\tconst properties: Partial = {\r\n\t\t\t\t\tonSelected: (data: any) => {\r\n\t\t\t\t\t\tthis._onSelected(index, data);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\tif (this._selectedId !== undefined) {\r\n\t\t\t\t\tproperties.selected = index === this._selectedId;\r\n\t\t\t\t}\r\n\t\t\t\tchild.properties = { ...child.properties, ...properties };\r\n\t\t\t}\r\n\t\t\treturn child;\r\n\t\t});\r\n\r\n\t\treturn v('nav', { classes: this.theme(css.root) }, [\r\n\t\t\tv(\r\n\t\t\t\t'ol',\r\n\t\t\t\t{\r\n\t\t\t\t\tclasses: this.theme(css.menuContainer)\r\n\t\t\t\t},\r\n\t\t\t\titems\r\n\t\t\t)\r\n\t\t]);\r\n\t}\r\n}\r\n\r\nexport default Menu;\r\n"]},_coverageSchema:"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c"},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();cov_1ag1n6vand.s[0]++;Object.defineProperty(exports,"__esModule",{value:true});var tslib_1=(cov_1ag1n6vand.s[1]++,__webpack_require__("./node_modules/tslib/tslib.es6.js"));var d_1=(cov_1ag1n6vand.s[2]++,__webpack_require__("./node_modules/@dojo/widget-core/d.js"));var customElement_1=(cov_1ag1n6vand.s[3]++,__webpack_require__("./node_modules/@dojo/widget-core/decorators/customElement.js"));var Themed_1=(cov_1ag1n6vand.s[4]++,__webpack_require__("./node_modules/@dojo/widget-core/mixins/Themed.js"));var WidgetBase_1=(cov_1ag1n6vand.s[5]++,__webpack_require__("./node_modules/@dojo/widget-core/WidgetBase.js"));var css=(cov_1ag1n6vand.s[6]++,__webpack_require__("./src/menu/menu.m.css"));var Menu=(/** @class */cov_1ag1n6vand.s[7]++,function(_super){cov_1ag1n6vand.f[0]++;cov_1ag1n6vand.s[8]++;tslib_1.__extends(Menu,_super);function Menu(){cov_1ag1n6vand.f[1]++;cov_1ag1n6vand.s[9]++;return(cov_1ag1n6vand.b[0][0]++,_super!==null)&&(cov_1ag1n6vand.b[0][1]++,_super.apply(this,arguments))||(cov_1ag1n6vand.b[0][2]++,this);}cov_1ag1n6vand.s[10]++;Menu.prototype._onSelected=function(id,data){cov_1ag1n6vand.f[2]++;cov_1ag1n6vand.s[11]++;this._selectedId=id;cov_1ag1n6vand.s[12]++;this.properties.onSelected(data);cov_1ag1n6vand.s[13]++;this.invalidate();};cov_1ag1n6vand.s[14]++;Menu.prototype.render=function(){cov_1ag1n6vand.f[3]++;var _this=(cov_1ag1n6vand.s[15]++,this);var items=(cov_1ag1n6vand.s[16]++,this.children.map(function(child,index){cov_1ag1n6vand.f[4]++;cov_1ag1n6vand.s[17]++;if(child){cov_1ag1n6vand.b[1][0]++;var properties=(cov_1ag1n6vand.s[18]++,{onSelected:function(data){cov_1ag1n6vand.f[5]++;cov_1ag1n6vand.s[19]++;_this._onSelected(index,data);}});cov_1ag1n6vand.s[20]++;if(_this._selectedId!==undefined){cov_1ag1n6vand.b[2][0]++;cov_1ag1n6vand.s[21]++;properties.selected=index===_this._selectedId;}else{cov_1ag1n6vand.b[2][1]++;}cov_1ag1n6vand.s[22]++;child.properties=tslib_1.__assign({},child.properties,properties);}else{cov_1ag1n6vand.b[1][1]++;}cov_1ag1n6vand.s[23]++;return child;}));cov_1ag1n6vand.s[24]++;return d_1.v('nav',{classes:this.theme(css.root)},[d_1.v('ol',{classes:this.theme(css.menuContainer)},items)]);};cov_1ag1n6vand.s[25]++;Menu=tslib_1.__decorate([customElement_1.customElement({tag:'demo-menu',events:['onSelected']}),Themed_1.theme(css)],Menu);cov_1ag1n6vand.s[26]++;return Menu;}(Themed_1.ThemedMixin(WidgetBase_1.WidgetBase)));cov_1ag1n6vand.s[27]++;exports.Menu=Menu;cov_1ag1n6vand.s[28]++;exports.default=Menu; +var cov_1ag1n6vand=function(){var path="C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts",hash="67c7e74d5b4b89cb2d2c80d3fe5bba0331dc767f",Function=function(){}.constructor,global=new Function('return this')(),gcv="__coverage__",coverageData={path:"C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts",statementMap:{"0":{start:{line:2,column:0},end:{line:2,column:62}},"1":{start:{line:3,column:14},end:{line:3,column:30}},"2":{start:{line:4,column:10},end:{line:4,column:50}},"3":{start:{line:5,column:22},end:{line:5,column:85}},"4":{start:{line:6,column:15},end:{line:6,column:67}},"5":{start:{line:7,column:19},end:{line:7,column:68}},"6":{start:{line:8,column:10},end:{line:8,column:33}},"7":{start:{line:9,column:26},end:{line:49,column:48}},"8":{start:{line:10,column:4},end:{line:10,column:36}},"9":{start:{line:12,column:8},end:{line:12,column:72}},"10":{start:{line:14,column:4},end:{line:18,column:6}},"11":{start:{line:15,column:8},end:{line:15,column:30}},"12":{start:{line:16,column:8},end:{line:16,column:41}},"13":{start:{line:17,column:8},end:{line:17,column:26}},"14":{start:{line:19,column:4},end:{line:40,column:6}},"15":{start:{line:20,column:20},end:{line:20,column:24}},"16":{start:{line:21,column:20},end:{line:34,column:10}},"17":{start:{line:22,column:12},end:{line:32,column:13}},"18":{start:{line:23,column:33},end:{line:27,column:17}},"19":{start:{line:25,column:24},end:{line:25,column:55}},"20":{start:{line:28,column:16},end:{line:30,column:17}},"21":{start:{line:29,column:20},end:{line:29,column:70}},"22":{start:{line:31,column:16},end:{line:31,column:86}},"23":{start:{line:33,column:12},end:{line:33,column:25}},"24":{start:{line:35,column:8},end:{line:39,column:11}},"25":{start:{line:41,column:4},end:{line:47,column:13}},"26":{start:{line:48,column:4},end:{line:48,column:16}},"27":{start:{line:50,column:0},end:{line:50,column:20}},"28":{start:{line:51,column:0},end:{line:51,column:23}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:9,column:26},end:{line:9,column:27}},loc:{start:{line:9,column:44},end:{line:49,column:1}},line:9},"1":{name:"Menu",decl:{start:{line:11,column:13},end:{line:11,column:17}},loc:{start:{line:11,column:20},end:{line:13,column:5}},line:11},"2":{name:"(anonymous_2)",decl:{start:{line:14,column:33},end:{line:14,column:34}},loc:{start:{line:14,column:53},end:{line:18,column:5}},line:14},"3":{name:"(anonymous_3)",decl:{start:{line:19,column:28},end:{line:19,column:29}},loc:{start:{line:19,column:40},end:{line:40,column:5}},line:19},"4":{name:"(anonymous_4)",decl:{start:{line:21,column:38},end:{line:21,column:39}},loc:{start:{line:21,column:62},end:{line:34,column:9}},line:21},"5":{name:"(anonymous_5)",decl:{start:{line:24,column:32},end:{line:24,column:33}},loc:{start:{line:24,column:48},end:{line:26,column:21}},line:24}},branchMap:{"0":{loc:{start:{line:12,column:15},end:{line:12,column:71}},type:"binary-expr",locations:[{start:{line:12,column:15},end:{line:12,column:30}},{start:{line:12,column:34},end:{line:12,column:63}},{start:{line:12,column:67},end:{line:12,column:71}}],line:12},"1":{loc:{start:{line:22,column:12},end:{line:32,column:13}},type:"if",locations:[{start:{line:22,column:12},end:{line:32,column:13}},{start:{line:22,column:12},end:{line:32,column:13}}],line:22},"2":{loc:{start:{line:28,column:16},end:{line:30,column:17}},type:"if",locations:[{start:{line:28,column:16},end:{line:30,column:17}},{start:{line:28,column:16},end:{line:30,column:17}}],line:28}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},b:{"0":[0,0,0],"1":[0,0],"2":[0,0]},inputSourceMap:{version:3,sources:["C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts"],names:[],mappings:";;;AAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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",file:"C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts",sourcesContent:["import { v } from '@dojo/framework/widget-core/d';\r\nimport { customElement } from '@dojo/framework/widget-core/decorators/customElement';\r\nimport { WidgetProperties, WNode } from '@dojo/framework/widget-core/interfaces';\r\nimport { theme, ThemedMixin } from '@dojo/framework/widget-core/mixins/Themed';\r\nimport { WidgetBase } from '@dojo/framework/widget-core/WidgetBase';\r\nimport { MenuItem, MenuItemProperties } from '../menu-item/MenuItem';\r\n\r\nimport * as css from './menu.m.css';\r\n\r\ninterface MenuProperties extends WidgetProperties {\r\n\tonSelected: (data: any) => void;\r\n}\r\n\r\n@customElement({\r\n\ttag: 'demo-menu',\r\n\tevents: ['onSelected']\r\n})\r\n@theme(css)\r\nexport class Menu extends ThemedMixin(WidgetBase)> {\r\n\tprivate _selectedId: number;\r\n\r\n\tprivate _onSelected(id: number, data: any) {\r\n\t\tthis._selectedId = id;\r\n\t\tthis.properties.onSelected(data);\r\n\t\tthis.invalidate();\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\tconst items = this.children.map((child, index) => {\r\n\t\t\tif (child) {\r\n\t\t\t\tconst properties: Partial = {\r\n\t\t\t\t\tonSelected: (data: any) => {\r\n\t\t\t\t\t\tthis._onSelected(index, data);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\tif (this._selectedId !== undefined) {\r\n\t\t\t\t\tproperties.selected = index === this._selectedId;\r\n\t\t\t\t}\r\n\t\t\t\tchild.properties = { ...child.properties, ...properties };\r\n\t\t\t}\r\n\t\t\treturn child;\r\n\t\t});\r\n\r\n\t\treturn v('nav', { classes: this.theme(css.root) }, [\r\n\t\t\tv(\r\n\t\t\t\t'ol',\r\n\t\t\t\t{\r\n\t\t\t\t\tclasses: this.theme(css.menuContainer)\r\n\t\t\t\t},\r\n\t\t\t\titems\r\n\t\t\t)\r\n\t\t]);\r\n\t}\r\n}\r\n\r\nexport default Menu;\r\n"]},_coverageSchema:"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c"},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();cov_1ag1n6vand.s[0]++;Object.defineProperty(exports,"__esModule",{value:true});var tslib_1=(cov_1ag1n6vand.s[1]++,__webpack_require__("./node_modules/tslib/tslib.es6.js"));var d_1=(cov_1ag1n6vand.s[2]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"));var customElement_1=(cov_1ag1n6vand.s[3]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/decorators/customElement.js"));var Themed_1=(cov_1ag1n6vand.s[4]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/mixins/Themed.js"));var WidgetBase_1=(cov_1ag1n6vand.s[5]++,__webpack_require__("./node_modules/@dojo/framework/widget-core/WidgetBase.js"));var css=(cov_1ag1n6vand.s[6]++,__webpack_require__("./src/menu/menu.m.css"));var Menu=(cov_1ag1n6vand.s[7]++,function(_super){cov_1ag1n6vand.f[0]++;cov_1ag1n6vand.s[8]++;tslib_1.__extends(Menu,_super);function Menu(){cov_1ag1n6vand.f[1]++;cov_1ag1n6vand.s[9]++;return(cov_1ag1n6vand.b[0][0]++,_super!==null)&&(cov_1ag1n6vand.b[0][1]++,_super.apply(this,arguments))||(cov_1ag1n6vand.b[0][2]++,this);}cov_1ag1n6vand.s[10]++;Menu.prototype._onSelected=function(id,data){cov_1ag1n6vand.f[2]++;cov_1ag1n6vand.s[11]++;this._selectedId=id;cov_1ag1n6vand.s[12]++;this.properties.onSelected(data);cov_1ag1n6vand.s[13]++;this.invalidate();};cov_1ag1n6vand.s[14]++;Menu.prototype.render=function(){cov_1ag1n6vand.f[3]++;var _this=(cov_1ag1n6vand.s[15]++,this);var items=(cov_1ag1n6vand.s[16]++,this.children.map(function(child,index){cov_1ag1n6vand.f[4]++;cov_1ag1n6vand.s[17]++;if(child){cov_1ag1n6vand.b[1][0]++;var properties=(cov_1ag1n6vand.s[18]++,{onSelected:function(data){cov_1ag1n6vand.f[5]++;cov_1ag1n6vand.s[19]++;_this._onSelected(index,data);}});cov_1ag1n6vand.s[20]++;if(_this._selectedId!==undefined){cov_1ag1n6vand.b[2][0]++;cov_1ag1n6vand.s[21]++;properties.selected=index===_this._selectedId;}else{cov_1ag1n6vand.b[2][1]++;}cov_1ag1n6vand.s[22]++;child.properties=tslib_1.__assign({},child.properties,properties);}else{cov_1ag1n6vand.b[1][1]++;}cov_1ag1n6vand.s[23]++;return child;}));cov_1ag1n6vand.s[24]++;return d_1.v('nav',{classes:this.theme(css.root)},[d_1.v('ol',{classes:this.theme(css.menuContainer)},items)]);};cov_1ag1n6vand.s[25]++;Menu=tslib_1.__decorate([customElement_1.customElement({tag:'demo-menu',events:['onSelected']}),Themed_1.theme(css)],Menu);cov_1ag1n6vand.s[26]++;return Menu;}(Themed_1.ThemedMixin(WidgetBase_1.WidgetBase)));cov_1ag1n6vand.s[27]++;exports.Menu=Menu;cov_1ag1n6vand.s[28]++;exports.default=Menu; /***/ }), @@ -13315,8 +13313,8 @@ __webpack_require__("./tests/unit/menu/Menu.ts"); Object.defineProperty(exports, "__esModule", { value: true }); var _a = intern.getInterface('bdd'), describe = _a.describe, it = _a.it; -var harness_1 = __webpack_require__("./node_modules/@dojo/test-extras/harness.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); +var harness_1 = __webpack_require__("./node_modules/@dojo/framework/testing/harness.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); var MenuItem_1 = __webpack_require__("./src/menu-item/MenuItem.ts"); var css = __webpack_require__("./src/menu-item/menuItem.m.css"); describe('MenuItem', function () { @@ -13344,8 +13342,8 @@ describe('MenuItem', function () { Object.defineProperty(exports, "__esModule", { value: true }); var _a = intern.getInterface('bdd'), describe = _a.describe, it = _a.it; -var harness_1 = __webpack_require__("./node_modules/@dojo/test-extras/harness.js"); -var d_1 = __webpack_require__("./node_modules/@dojo/widget-core/d.js"); +var harness_1 = __webpack_require__("./node_modules/@dojo/framework/testing/harness.js"); +var d_1 = __webpack_require__("./node_modules/@dojo/framework/widget-core/d.js"); var Menu_1 = __webpack_require__("./src/menu/Menu.ts"); var css = __webpack_require__("./src/menu/menu.m.css"); describe('Menu', function () { @@ -13369,4 +13367,4 @@ module.exports = __webpack_require__("./tests/unit/menu/Menu.ts"); /***/ }) /******/ }));; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZjdmNjg2Yjg2ZGU4MjZhN2QzMWQiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRGVzdHJveWFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2NvcmUvRXZlbnRlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vY29yZS9sYW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9oYXMvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9Qcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1NldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9TeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vV2Vha01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vbnVtYmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL29iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9xdWV1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3V0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3Rlc3QtZXh0cmFzL2hhcm5lc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3Rlc3QtZXh0cmFzL3N1cHBvcnQvYXNzZXJ0UmVuZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby90ZXN0LWV4dHJhcy9zdXBwb3J0L3NlbGVjdG9yLmpzIiwid2VicGFjazovLy8uL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3M/MmU1NiIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS9tZW51Lm0uY3NzPzQxY2IiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL0luamVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9Ob2RlSGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvUmVnaXN0cnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL1JlZ2lzdHJ5SGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hZnRlclJlbmRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hbHdheXNSZW5kZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYmVmb3JlUHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9jdXN0b21FbGVtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9oYW5kbGVEZWNvcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kaWZmLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9taXhpbnMvUHJvamVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL3Zkb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3Mtc2VsZWN0LXVtZC9kaXN0L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kaWZmL2Rpc3QvZGlmZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS1pdGVtL01lbnVJdGVtLnRzIiwid2VicGFjazovLy8uL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL21lbnUvTWVudS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS9tZW51Lm0uY3NzIiwid2VicGFjazovLy8uL3Rlc3RzL3VuaXQvYWxsLnRzIiwid2VicGFjazovLy8uL3Rlc3RzL3VuaXQvbWVudS1pdGVtL01lbnVJdGVtLnRzIiwid2VicGFjazovLy8uL3Rlc3RzL3VuaXQvbWVudS9NZW51LnRzIl0sIm5hbWVzIjpbImRfMSIsInJlcXVpcmUiLCJjdXN0b21FbGVtZW50XzEiLCJUaGVtZWRfMSIsIldpZGdldEJhc2VfMSIsImNzcyIsIk1lbnVJdGVtIiwiX3N1cGVyIiwidHNsaWJfMSIsIl9fZXh0ZW5kcyIsInByb3RvdHlwZSIsIl9vbkNsaWNrIiwicHJvcGVydGllcyIsIm9uU2VsZWN0ZWQiLCJkYXRhIiwicmVuZGVyIiwiX2EiLCJ0aXRsZSIsInNlbGVjdGVkIiwidiIsImNsYXNzZXMiLCJ0aGVtZSIsInJvb3QiLCJpdGVtIiwib25jbGljayIsIl9fZGVjb3JhdGUiLCJjdXN0b21FbGVtZW50IiwidGFnIiwiYXR0cmlidXRlcyIsImV2ZW50cyIsIlRoZW1lZE1peGluIiwiV2lkZ2V0QmFzZSIsImV4cG9ydHMiLCJkZWZhdWx0IiwiTWVudSIsIl9vblNlbGVjdGVkIiwiaWQiLCJfc2VsZWN0ZWRJZCIsImludmFsaWRhdGUiLCJfdGhpcyIsIml0ZW1zIiwiY2hpbGRyZW4iLCJtYXAiLCJjaGlsZCIsImluZGV4IiwidW5kZWZpbmVkIiwiX19hc3NpZ24iLCJtZW51Q29udGFpbmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7O0FDN0RBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsOEI7Ozs7Ozs7O0FDNURBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThELDJDQUEyQyxFQUFFO0FBQzNHO0FBQ0E7QUFDQSx5REFBeUQseUJBQXlCLEVBQUU7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsMEI7Ozs7Ozs7O0FDakZBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDJCQUEyQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLHNEOzs7Ozs7Ozt1REM1T0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLG1CQUFtQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEU7Ozs7Ozs7OztBQzFNRDtBQUNBLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxxQkFBcUI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0dBQStHLG9CQUFvQjtBQUNuSTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxRQUFRLGdCQUFnQjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQywwQkFBMEI7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsY0FBYztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELGNBQWM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTzs7Ozs7Ozs7QUNsSEE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsV0FBVztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCwwQkFBMEIscUJBQXFCLEVBQUUsRUFBRTtBQUN0RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLDJCOzs7Ozs7OztBQzVIQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQywwQkFBMEI7QUFDcEU7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDBCQUEwQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHVCQUF1QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxxQkFBcUI7QUFDekQ7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxrQzs7Ozs7Ozs7QUNwRkE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMEJBQTBCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDRCQUE0QjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDBCQUEwQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwyQkFBMkI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdUJBQXVCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHNCQUFzQixxQ0FBcUM7QUFDdEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0EsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxpQ0FBaUM7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QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsU0FBUztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQixnQkFBZ0I7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtB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QSxpQkFBaUIsdUJBQXVCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseURBQXlELDBCQUEwQjtBQUNuRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRix5QkFBeUIsd0NBQXdDLEVBQUU7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRixrQ0FBa0Msc0JBQXNCLEVBQUU7QUFDMUQseUJBQXlCLGdDQUFnQyxFQUFFO0FBQzNELHdCQUF3QiwyQkFBMkIsRUFBRTtBQUNyRCwwQkFBMEIsdUJBQXVCLEVBQUU7QUFDbkQsQ0FBQztBQUNEO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsWUFBWTtBQUNoQztBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBLFdBQVc7O0FBRVg7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOzs7O0FBSUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdELE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsY0FBYyxhQUFhLEdBQUcsZUFBZTtBQUM3QztBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOzs7O0FBSUE7QUFD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Q0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsWUFBWTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRixDQUFDO0FBQ0Q7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxvQ0FBb0MsRUFBRTtBQUNoRjs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxZQUFZO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixZQUFZO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFlBQVk7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRixDQUFDO0FBQ0Q7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsMEJBQTBCLGdDQUFnQyxFQUFFO0FBQzVELENBQUM7QUFDRDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDJCQUEyQixxQkFBcUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQkFBMkIscUJBQXFCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw2Q0FBNkMsUUFBUTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBLG1DQUFtQyxRQUFRO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBLGlCQUFpQixxQkFBcUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBLG1DQUFtQyxRQUFRO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixxQkFBcUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FB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QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix1QkFBdUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGNBQWM7OztBQUcxRCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEMsY0FBYzs7O0FBRzFELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsY0FBYzs7O0FBRzFELE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSw0REFBNEQsMEJBQTBCLDBDQUEwQyxnQkFBZ0IsT0FBTyxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsT0FBTyx3QkFBd0IsRUFBRTs7QUFFM047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlEQUFpRCxxQkFBcUI7QUFDdEUsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpREFBaUQ7QUFDaEUsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FB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QjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qiw0QkFBNEI7QUFDNUIsNEJBQTRCO0FBQzVCLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBLDRDQUE0QyxjQUFjOzs7QUFHMUQsT0FBTztBQUNQO0FBQ0EsQ0FBQztBQUNELEM7Ozs7Ozs7QUM5eURBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7O0FDdkx0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsaUJBQWlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQ0FBMEMsc0JBQXNCLEVBQUU7QUFDbEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FB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Q047Z0JBQ0MsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUNqQyxPQUFPLEVBQUUsWUFBWSxDQUFDO2FBQ3RCLEVBQ0QsQ0FBQyxLQUFLLENBQUM7U0FFUixDQUFDLENBQ0Y7SUFDRixDQUFDLENBQUM7QUFDSCxDQUFDLENBQUM7Ozs7Ozs7Ozs7O0FDM0JJLG1DQUE2QyxFQUEzQyxzQkFBUSxFQUFFLFVBQUU7QUFDcEI7QUFFQTtBQUVBO0FBQ0E7QUFFQSxRQUFRLENBQUMsTUFBTSxFQUFFO0lBQ2hCLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRTtRQUMxQixJQUFNLFNBQVEsRUFBRyxpQkFBTyxDQUFDLFdBQUksQ0FBQztRQUM5QixRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUksQ0FBRSxFQUFFLENBQUMsS0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsY0FBYSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwiZmlsZSI6InVuaXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBmN2Y2ODZiODZkZTgyNmE3ZDMxZCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgbGFuZ18xID0gcmVxdWlyZShcIi4vbGFuZ1wiKTtcclxudmFyIFByb21pc2VfMSA9IHJlcXVpcmUoXCJAZG9qby9zaGltL1Byb21pc2VcIik7XHJcbi8qKlxyXG4gKiBObyBvcGVyYXRpb24gZnVuY3Rpb24gdG8gcmVwbGFjZSBvd24gb25jZSBpbnN0YW5jZSBpcyBkZXN0b3J5ZWRcclxuICovXHJcbmZ1bmN0aW9uIG5vb3AoKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZV8xLmRlZmF1bHQucmVzb2x2ZShmYWxzZSk7XHJcbn1cclxuLyoqXHJcbiAqIE5vIG9wIGZ1bmN0aW9uIHVzZWQgdG8gcmVwbGFjZSBvd24sIG9uY2UgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdG9yeWVkXHJcbiAqL1xyXG5mdW5jdGlvbiBkZXN0cm95ZWQoKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgbWFkZSB0byBkZXN0cm95ZWQgbWV0aG9kJyk7XHJcbn1cclxudmFyIERlc3Ryb3lhYmxlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAY29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gRGVzdHJveWFibGUoKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVzID0gW107XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyIGhhbmRsZXMgZm9yIHRoZSBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gYHRoaXMuZGVzdHJveWAgaXMgY2FsbGVkXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtIYW5kbGV9IGhhbmRsZSBUaGUgaGFuZGxlIHRvIGFkZCBmb3IgdGhlIGluc3RhbmNlXHJcbiAgICAgKiBAcmV0dXJucyB7SGFuZGxlfSBhIGhhbmRsZSBmb3IgdGhlIGhhbmRsZSwgcmVtb3ZlcyB0aGUgaGFuZGxlIGZvciB0aGUgaW5zdGFuY2UgYW5kIGNhbGxzIGRlc3Ryb3lcclxuICAgICAqL1xyXG4gICAgRGVzdHJveWFibGUucHJvdG90eXBlLm93biA9IGZ1bmN0aW9uIChoYW5kbGVzKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZSA9IEFycmF5LmlzQXJyYXkoaGFuZGxlcykgPyBsYW5nXzEuY3JlYXRlQ29tcG9zaXRlSGFuZGxlLmFwcGx5KHZvaWQgMCwgdHNsaWJfMS5fX3NwcmVhZChoYW5kbGVzKSkgOiBoYW5kbGVzO1xyXG4gICAgICAgIHZhciBfaGFuZGxlcyA9IHRoaXMuaGFuZGxlcztcclxuICAgICAgICBfaGFuZGxlcy5wdXNoKGhhbmRsZSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgX2hhbmRsZXMuc3BsaWNlKF9oYW5kbGVzLmluZGV4T2YoaGFuZGxlKSk7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGUuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIERlc3RycHlzIGFsbCBoYW5kZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBpbnN0YW5jZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPGFueX0gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSBhbGwgaGFuZGxlcyBoYXZlIGJlZW4gZGVzdHJveWVkXHJcbiAgICAgKi9cclxuICAgIERlc3Ryb3lhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlXzEuZGVmYXVsdChmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICBfdGhpcy5oYW5kbGVzLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZSkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlICYmIGhhbmRsZS5kZXN0cm95ICYmIGhhbmRsZS5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBfdGhpcy5kZXN0cm95ID0gbm9vcDtcclxuICAgICAgICAgICAgX3RoaXMub3duID0gZGVzdHJveWVkO1xyXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBEZXN0cm95YWJsZTtcclxufSgpKTtcclxuZXhwb3J0cy5EZXN0cm95YWJsZSA9IERlc3Ryb3lhYmxlO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBEZXN0cm95YWJsZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0Rlc3Ryb3lhYmxlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0Rlc3Ryb3lhYmxlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgTWFwXzEgPSByZXF1aXJlKFwiQGRvam8vc2hpbS9NYXBcIik7XHJcbnZhciBEZXN0cm95YWJsZV8xID0gcmVxdWlyZShcIi4vRGVzdHJveWFibGVcIik7XHJcbi8qKlxyXG4gKiBNYXAgb2YgY29tcHV0ZWQgcmVndWxhciBleHByZXNzaW9ucywga2V5ZWQgYnkgc3RyaW5nXHJcbiAqL1xyXG52YXIgcmVnZXhNYXAgPSBuZXcgTWFwXzEuZGVmYXVsdCgpO1xyXG4vKipcclxuICogRGV0ZXJtaW5lcyBpcyB0aGUgZXZlbnQgdHlwZSBnbG9iIGhhcyBiZWVuIG1hdGNoZWRcclxuICpcclxuICogQHJldHVybnMgYm9vbGVhbiB0aGF0IGluZGljYXRlcyBpZiB0aGUgZ2xvYiBpcyBtYXRjaGVkXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0dsb2JNYXRjaChnbG9iU3RyaW5nLCB0YXJnZXRTdHJpbmcpIHtcclxuICAgIGlmICh0eXBlb2YgdGFyZ2V0U3RyaW5nID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgZ2xvYlN0cmluZyA9PT0gJ3N0cmluZycgJiYgZ2xvYlN0cmluZy5pbmRleE9mKCcqJykgIT09IC0xKSB7XHJcbiAgICAgICAgdmFyIHJlZ2V4ID0gdm9pZCAwO1xyXG4gICAgICAgIGlmIChyZWdleE1hcC5oYXMoZ2xvYlN0cmluZykpIHtcclxuICAgICAgICAgICAgcmVnZXggPSByZWdleE1hcC5nZXQoZ2xvYlN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAoXCJeXCIgKyBnbG9iU3RyaW5nLnJlcGxhY2UoL1xcKi9nLCAnLionKSArIFwiJFwiKTtcclxuICAgICAgICAgICAgcmVnZXhNYXAuc2V0KGdsb2JTdHJpbmcsIHJlZ2V4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodGFyZ2V0U3RyaW5nKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBnbG9iU3RyaW5nID09PSB0YXJnZXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5pc0dsb2JNYXRjaCA9IGlzR2xvYk1hdGNoO1xyXG4vKipcclxuICogRXZlbnQgQ2xhc3NcclxuICovXHJcbnZhciBFdmVudGVkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoRXZlbnRlZCwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIEV2ZW50ZWQoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogbWFwIG9mIGxpc3RlbmVycyBrZXllZCBieSBldmVudCB0eXBlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3RoaXMubGlzdGVuZXJzTWFwID0gbmV3IE1hcF8xLmRlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICB9XHJcbiAgICBFdmVudGVkLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmxpc3RlbmVyc01hcC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2RzLCB0eXBlKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0dsb2JNYXRjaCh0eXBlLCBldmVudC50eXBlKSkge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2QuY2FsbChfdGhpcywgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBFdmVudGVkLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdGVuZXIpKSB7XHJcbiAgICAgICAgICAgIHZhciBoYW5kbGVzXzEgPSBsaXN0ZW5lci5tYXAoZnVuY3Rpb24gKGxpc3RlbmVyKSB7IHJldHVybiBfdGhpcy5fYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpOyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVzXzEuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlKSB7IHJldHVybiBoYW5kbGUuZGVzdHJveSgpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcclxuICAgIH07XHJcbiAgICBFdmVudGVkLnByb3RvdHlwZS5fYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAodHlwZSwgbGlzdGVuZXIpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XHJcbiAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwLnNldCh0eXBlLCBsaXN0ZW5lcnMpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSBfdGhpcy5saXN0ZW5lcnNNYXAuZ2V0KHR5cGUpIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gRXZlbnRlZDtcclxufShEZXN0cm95YWJsZV8xLkRlc3Ryb3lhYmxlKSk7XHJcbmV4cG9ydHMuRXZlbnRlZCA9IEV2ZW50ZWQ7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEV2ZW50ZWQ7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vY29yZS9FdmVudGVkLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL0V2ZW50ZWQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBvYmplY3RfMSA9IHJlcXVpcmUoXCJAZG9qby9zaGltL29iamVjdFwiKTtcclxudmFyIG9iamVjdF8yID0gcmVxdWlyZShcIkBkb2pvL3NoaW0vb2JqZWN0XCIpO1xyXG5leHBvcnRzLmFzc2lnbiA9IG9iamVjdF8yLmFzc2lnbjtcclxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xyXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG4vKipcclxuICogVHlwZSBndWFyZCB0aGF0IGVuc3VyZXMgdGhhdCB0aGUgdmFsdWUgY2FuIGJlIGNvZXJjZWQgdG8gT2JqZWN0XHJcbiAqIHRvIHdlZWQgb3V0IGhvc3Qgb2JqZWN0cyB0aGF0IGRvIG5vdCBkZXJpdmUgZnJvbSBPYmplY3QuXHJcbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBpZiB3ZSB3YW50IHRvIGRlZXAgY29weSBhbiBvYmplY3Qgb3Igbm90LlxyXG4gKiBOb3RlOiBJbiBFUzYgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IGFuIG9iamVjdCdzIFN5bWJvbC50b1N0cmluZ1RhZyBwcm9wZXJ0eSwgd2hpY2ggd2lsbFxyXG4gKiBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGB0b1N0cmluZ2AuIFRoaXMgaXMgYSByYXJlIGVkZ2UgY2FzZSB0aGF0IGlzIGRpZmZpY3VsdCB0byBoYW5kbGUsXHJcbiAqIHNvIGl0IGlzIG5vdCBoYW5kbGVkIGhlcmUuXHJcbiAqIEBwYXJhbSAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXHJcbiAqIEByZXR1cm4gICAgICAgSWYgdGhlIHZhbHVlIGlzIGNvZXJjaWJsZSBpbnRvIGFuIE9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gc2hvdWxkRGVlcENvcHlPYmplY3QodmFsdWUpIHtcclxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJztcclxufVxyXG5mdW5jdGlvbiBjb3B5QXJyYXkoYXJyYXksIGluaGVyaXRlZCkge1xyXG4gICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3B5QXJyYXkoaXRlbSwgaW5oZXJpdGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICFzaG91bGREZWVwQ29weU9iamVjdChpdGVtKVxyXG4gICAgICAgICAgICA/IGl0ZW1cclxuICAgICAgICAgICAgOiBfbWl4aW4oe1xyXG4gICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGluaGVyaXRlZDogaW5oZXJpdGVkLFxyXG4gICAgICAgICAgICAgICAgc291cmNlczogW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7fVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIF9taXhpbihrd0FyZ3MpIHtcclxuICAgIHZhciBkZWVwID0ga3dBcmdzLmRlZXA7XHJcbiAgICB2YXIgaW5oZXJpdGVkID0ga3dBcmdzLmluaGVyaXRlZDtcclxuICAgIHZhciB0YXJnZXQgPSBrd0FyZ3MudGFyZ2V0O1xyXG4gICAgdmFyIGNvcGllZCA9IGt3QXJncy5jb3BpZWQgfHwgW107XHJcbiAgICB2YXIgY29waWVkQ2xvbmUgPSB0c2xpYl8xLl9fc3ByZWFkKGNvcGllZCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGt3QXJncy5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHNvdXJjZSA9IGt3QXJncy5zb3VyY2VzW2ldO1xyXG4gICAgICAgIGlmIChzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcclxuICAgICAgICAgICAgaWYgKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc291cmNlW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoY29waWVkQ2xvbmUuaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVlcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvcHlBcnJheSh2YWx1ZSwgaW5oZXJpdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkRGVlcENvcHlPYmplY3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXRWYWx1ZSA9IHRhcmdldFtrZXldIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWQucHVzaChzb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9taXhpbih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkOiBpbmhlcml0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzOiBbdmFsdWVdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZDogY29waWVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUpIHtcclxuICAgIHZhciBtaXhpbnMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgbWl4aW5zW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKCFtaXhpbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xhbmcuY3JlYXRlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBtaXhpbiBvYmplY3QuJyk7XHJcbiAgICB9XHJcbiAgICB2YXIgYXJncyA9IG1peGlucy5zbGljZSgpO1xyXG4gICAgYXJncy51bnNoaWZ0KE9iamVjdC5jcmVhdGUocHJvdG90eXBlKSk7XHJcbiAgICByZXR1cm4gb2JqZWN0XzEuYXNzaWduLmFwcGx5KG51bGwsIGFyZ3MpO1xyXG59XHJcbmV4cG9ydHMuY3JlYXRlID0gY3JlYXRlO1xyXG5mdW5jdGlvbiBkZWVwQXNzaWduKHRhcmdldCkge1xyXG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgc291cmNlc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHJldHVybiBfbWl4aW4oe1xyXG4gICAgICAgIGRlZXA6IHRydWUsXHJcbiAgICAgICAgaW5oZXJpdGVkOiBmYWxzZSxcclxuICAgICAgICBzb3VyY2VzOiBzb3VyY2VzLFxyXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLmRlZXBBc3NpZ24gPSBkZWVwQXNzaWduO1xyXG5mdW5jdGlvbiBkZWVwTWl4aW4odGFyZ2V0KSB7XHJcbiAgICB2YXIgc291cmNlcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBzb3VyY2VzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9taXhpbih7XHJcbiAgICAgICAgZGVlcDogdHJ1ZSxcclxuICAgICAgICBpbmhlcml0ZWQ6IHRydWUsXHJcbiAgICAgICAgc291cmNlczogc291cmNlcyxcclxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5kZWVwTWl4aW4gPSBkZWVwTWl4aW47XHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB1c2luZyB0aGUgcHJvdmlkZWQgc291cmNlJ3MgcHJvdG90eXBlIGFzIHRoZSBwcm90b3R5cGUgZm9yIHRoZSBuZXcgb2JqZWN0LCBhbmQgdGhlblxyXG4gKiBkZWVwIGNvcGllcyB0aGUgcHJvdmlkZWQgc291cmNlJ3MgdmFsdWVzIGludG8gdGhlIG5ldyB0YXJnZXQuXHJcbiAqXHJcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIG9iamVjdCB0byBkdXBsaWNhdGVcclxuICogQHJldHVybiBUaGUgbmV3IG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gZHVwbGljYXRlKHNvdXJjZSkge1xyXG4gICAgdmFyIHRhcmdldCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSkpO1xyXG4gICAgcmV0dXJuIGRlZXBNaXhpbih0YXJnZXQsIHNvdXJjZSk7XHJcbn1cclxuZXhwb3J0cy5kdXBsaWNhdGUgPSBkdXBsaWNhdGU7XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgdGhlIHNhbWUgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcclxuICogQHBhcmFtIGIgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcclxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lOyBmYWxzZSBvdGhlcndpc2VcclxuICovXHJcbmZ1bmN0aW9uIGlzSWRlbnRpY2FsKGEsIGIpIHtcclxuICAgIHJldHVybiAoYSA9PT0gYiB8fFxyXG4gICAgICAgIC8qIGJvdGggdmFsdWVzIGFyZSBOYU4gKi9cclxuICAgICAgICAoYSAhPT0gYSAmJiBiICE9PSBiKSk7XHJcbn1cclxuZXhwb3J0cy5pc0lkZW50aWNhbCA9IGlzSWRlbnRpY2FsO1xyXG4vKipcclxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYmluZHMgYSBtZXRob2QgdG8gdGhlIHNwZWNpZmllZCBvYmplY3QgYXQgcnVudGltZS4gVGhpcyBpcyBzaW1pbGFyIHRvXHJcbiAqIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAsIGJ1dCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gaXQgdGFrZXMgdGhlIG5hbWUgb2YgYSBtZXRob2Qgb24gYW4gb2JqZWN0LlxyXG4gKiBBcyBhIHJlc3VsdCwgdGhlIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGBsYXRlQmluZGAgd2lsbCBhbHdheXMgY2FsbCB0aGUgZnVuY3Rpb24gY3VycmVudGx5IGFzc2lnbmVkIHRvXHJcbiAqIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgb24gdGhlIG9iamVjdCBhcyBvZiB0aGUgbW9tZW50IHRoZSBmdW5jdGlvbiBpdCByZXR1cm5zIGlzIGNhbGxlZC5cclxuICpcclxuICogQHBhcmFtIGluc3RhbmNlIFRoZSBjb250ZXh0IG9iamVjdFxyXG4gKiBAcGFyYW0gbWV0aG9kIFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgb24gdGhlIGNvbnRleHQgb2JqZWN0IHRvIGJpbmQgdG8gaXRzZWxmXHJcbiAqIEBwYXJhbSBzdXBwbGllZEFyZ3MgQW4gb3B0aW9uYWwgYXJyYXkgb2YgdmFsdWVzIHRvIHByZXBlbmQgdG8gdGhlIGBpbnN0YW5jZVttZXRob2RdYCBhcmd1bWVudHMgbGlzdFxyXG4gKiBAcmV0dXJuIFRoZSBib3VuZCBmdW5jdGlvblxyXG4gKi9cclxuZnVuY3Rpb24gbGF0ZUJpbmQoaW5zdGFuY2UsIG1ldGhvZCkge1xyXG4gICAgdmFyIHN1cHBsaWVkQXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBzdXBwbGllZEFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VwcGxpZWRBcmdzLmxlbmd0aFxyXG4gICAgICAgID8gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPyBzdXBwbGllZEFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkgOiBzdXBwbGllZEFyZ3M7XHJcbiAgICAgICAgICAgIC8vIFRTNzAxN1xyXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VbbWV0aG9kXS5hcHBseShpbnN0YW5jZSwgYXJncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyBUUzcwMTdcclxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlW21ldGhvZF0uYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfTtcclxufVxyXG5leHBvcnRzLmxhdGVCaW5kID0gbGF0ZUJpbmQ7XHJcbmZ1bmN0aW9uIG1peGluKHRhcmdldCkge1xyXG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgc291cmNlc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHJldHVybiBfbWl4aW4oe1xyXG4gICAgICAgIGRlZXA6IGZhbHNlLFxyXG4gICAgICAgIGluaGVyaXRlZDogdHJ1ZSxcclxuICAgICAgICBzb3VyY2VzOiBzb3VyY2VzLFxyXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLm1peGluID0gbWl4aW47XHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggaW52b2tlcyB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzIHByZXBlbmRlZCB0byBpdHMgYXJndW1lbnQgbGlzdC5cclxuICogTGlrZSBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgLCBidXQgZG9lcyBub3QgYWx0ZXIgZXhlY3V0aW9uIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXRGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBib3VuZFxyXG4gKiBAcGFyYW0gc3VwcGxpZWRBcmdzIEFuIG9wdGlvbmFsIGFycmF5IG9mIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRoZSBgdGFyZ2V0RnVuY3Rpb25gIGFyZ3VtZW50cyBsaXN0XHJcbiAqIEByZXR1cm4gVGhlIGJvdW5kIGZ1bmN0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJ0aWFsKHRhcmdldEZ1bmN0aW9uKSB7XHJcbiAgICB2YXIgc3VwcGxpZWRBcmdzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHN1cHBsaWVkQXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID8gc3VwcGxpZWRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpIDogc3VwcGxpZWRBcmdzO1xyXG4gICAgICAgIHJldHVybiB0YXJnZXRGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmdzKTtcclxuICAgIH07XHJcbn1cclxuZXhwb3J0cy5wYXJ0aWFsID0gcGFydGlhbDtcclxuLyoqXHJcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBkZXN0cm95IG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgY2FsbHMgdGhlIHBhc3NlZC1pbiBkZXN0cnVjdG9yLlxyXG4gKiBUaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgXCJyZW1vdmVcIiAvIFwiZGVzdHJveVwiIGhhbmRsZXJzIGZvclxyXG4gKiBldmVudCBsaXN0ZW5lcnMsIHRpbWVycywgZXRjLlxyXG4gKlxyXG4gKiBAcGFyYW0gZGVzdHJ1Y3RvciBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgaGFuZGxlJ3MgYGRlc3Ryb3lgIG1ldGhvZCBpcyBpbnZva2VkXHJcbiAqIEByZXR1cm4gVGhlIGhhbmRsZSBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUhhbmRsZShkZXN0cnVjdG9yKSB7XHJcbiAgICB2YXIgY2FsbGVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFjYWxsZWQpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBkZXN0cnVjdG9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMuY3JlYXRlSGFuZGxlID0gY3JlYXRlSGFuZGxlO1xyXG4vKipcclxuICogUmV0dXJucyBhIHNpbmdsZSBoYW5kbGUgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXN0cm95IG11bHRpcGxlIGhhbmRsZXMgc2ltdWx0YW5lb3VzbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBoYW5kbGVzIEFuIGFycmF5IG9mIGhhbmRsZXMgd2l0aCBgZGVzdHJveWAgbWV0aG9kc1xyXG4gKiBAcmV0dXJuIFRoZSBoYW5kbGUgb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVDb21wb3NpdGVIYW5kbGUoKSB7XHJcbiAgICB2YXIgaGFuZGxlcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBoYW5kbGVzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3JlYXRlSGFuZGxlKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaGFuZGxlc1tpXS5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5jcmVhdGVDb21wb3NpdGVIYW5kbGUgPSBjcmVhdGVDb21wb3NpdGVIYW5kbGU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vY29yZS9sYW5nLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9jb3JlL2xhbmcuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZnVuY3Rpb24gaXNGZWF0dXJlVGVzdFRoZW5hYmxlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUudGhlbjtcclxufVxyXG4vKipcclxuICogQSBjYWNoZSBvZiByZXN1bHRzIG9mIGZlYXR1cmUgdGVzdHNcclxuICovXHJcbmV4cG9ydHMudGVzdENhY2hlID0ge307XHJcbi8qKlxyXG4gKiBBIGNhY2hlIG9mIHRoZSB1bi1yZXNvbHZlZCBmZWF0dXJlIHRlc3RzXHJcbiAqL1xyXG5leHBvcnRzLnRlc3RGdW5jdGlvbnMgPSB7fTtcclxuLyoqXHJcbiAqIEEgY2FjaGUgb2YgdW5yZXNvbHZlZCB0aGVuYWJsZXMgKHByb2JhYmx5IHByb21pc2VzKVxyXG4gKiBAdHlwZSB7e319XHJcbiAqL1xyXG52YXIgdGVzdFRoZW5hYmxlcyA9IHt9O1xyXG4vKipcclxuICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBzY29wZSAoYHdpbmRvd2AgaW4gYSBicm93c2VyLCBgZ2xvYmFsYCBpbiBOb2RlSlMpXHJcbiAqL1xyXG52YXIgZ2xvYmFsU2NvcGUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIEJyb3dzZXJzXHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gTm9kZVxyXG4gICAgICAgIHJldHVybiBnbG9iYWw7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyBXZWIgd29ya2Vyc1xyXG4gICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfVxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgIHJldHVybiB7fTtcclxufSkoKTtcclxuLyogR3JhYiB0aGUgc3RhdGljRmVhdHVyZXMgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSAqL1xyXG52YXIgc3RhdGljRmVhdHVyZXMgPSAoZ2xvYmFsU2NvcGUuRG9qb0hhc0Vudmlyb25tZW50IHx8IHt9KS5zdGF0aWNGZWF0dXJlcztcclxuLyogQ2xlYW5pbmcgdXAgdGhlIERvam9IYXNFbnZpb3JubWVudCAqL1xyXG5pZiAoJ0Rvam9IYXNFbnZpcm9ubWVudCcgaW4gZ2xvYmFsU2NvcGUpIHtcclxuICAgIGRlbGV0ZSBnbG9iYWxTY29wZS5Eb2pvSGFzRW52aXJvbm1lbnQ7XHJcbn1cclxuLyoqXHJcbiAqIEN1c3RvbSB0eXBlIGd1YXJkIHRvIG5hcnJvdyB0aGUgYHN0YXRpY0ZlYXR1cmVzYCB0byBlaXRoZXIgYSBtYXAgb3IgYSBmdW5jdGlvbiB0aGF0XHJcbiAqIHJldHVybnMgYSBtYXAuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZ3VhcmQgZm9yXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcclxufVxyXG4vKipcclxuICogVGhlIGNhY2hlIG9mIGFzc2VydGVkIGZlYXR1cmVzIHRoYXQgd2VyZSBhdmFpbGFibGUgaW4gdGhlIGdsb2JhbCBzY29wZSB3aGVuIHRoZVxyXG4gKiBtb2R1bGUgbG9hZGVkXHJcbiAqL1xyXG52YXIgc3RhdGljQ2FjaGUgPSBzdGF0aWNGZWF0dXJlc1xyXG4gICAgPyBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbihzdGF0aWNGZWF0dXJlcykgPyBzdGF0aWNGZWF0dXJlcy5hcHBseShnbG9iYWxTY29wZSkgOiBzdGF0aWNGZWF0dXJlc1xyXG4gICAgOiB7fTsvKiBQcm92aWRpbmcgYW4gZW1wdHkgY2FjaGUsIGlmIG5vbmUgd2FzIGluIHRoZSBlbnZpcm9ubWVudFxyXG5cclxuLyoqXHJcbiogQU1EIHBsdWdpbiBmdW5jdGlvbi5cclxuKlxyXG4qIENvbmRpdGlvbmFsIGxvYWRzIG1vZHVsZXMgYmFzZWQgb24gYSBoYXMgZmVhdHVyZSB0ZXN0IHZhbHVlLlxyXG4qXHJcbiogQHBhcmFtIHJlc291cmNlSWQgR2l2ZXMgdGhlIHJlc29sdmVkIG1vZHVsZSBpZCB0byBsb2FkLlxyXG4qIEBwYXJhbSByZXF1aXJlIFRoZSBsb2FkZXIgcmVxdWlyZSBmdW5jdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIG1vZHVsZSB0aGF0IGNvbnRhaW5lZCB0aGUgcGx1Z2luIHJlc291cmNlIGluIGl0c1xyXG4qICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgbGlzdC5cclxuKiBAcGFyYW0gbG9hZCBDYWxsYmFjayB0byBsb2FkZXIgdGhhdCBjb25zdW1lcyByZXN1bHQgb2YgcGx1Z2luIGRlbWFuZC5cclxuKi9cclxuZnVuY3Rpb24gbG9hZChyZXNvdXJjZUlkLCByZXF1aXJlLCBsb2FkLCBjb25maWcpIHtcclxuICAgIHJlc291cmNlSWQgPyByZXF1aXJlKFtyZXNvdXJjZUlkXSwgbG9hZCkgOiBsb2FkKCk7XHJcbn1cclxuZXhwb3J0cy5sb2FkID0gbG9hZDtcclxuLyoqXHJcbiAqIEFNRCBwbHVnaW4gZnVuY3Rpb24uXHJcbiAqXHJcbiAqIFJlc29sdmVzIHJlc291cmNlSWQgaW50byBhIG1vZHVsZSBpZCBiYXNlZCBvbiBwb3NzaWJseS1uZXN0ZWQgdGVuYXJ5IGV4cHJlc3Npb24gdGhhdCBicmFuY2hlcyBvbiBoYXMgZmVhdHVyZSB0ZXN0XHJcbiAqIHZhbHVlKHMpLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVzb3VyY2VJZCBUaGUgaWQgb2YgdGhlIG1vZHVsZVxyXG4gKiBAcGFyYW0gbm9ybWFsaXplIFJlc29sdmVzIGEgcmVsYXRpdmUgbW9kdWxlIGlkIGludG8gYW4gYWJzb2x1dGUgbW9kdWxlIGlkXHJcbiAqL1xyXG5mdW5jdGlvbiBub3JtYWxpemUocmVzb3VyY2VJZCwgbm9ybWFsaXplKSB7XHJcbiAgICB2YXIgdG9rZW5zID0gcmVzb3VyY2VJZC5tYXRjaCgvW1xcPzpdfFteOlxcP10qL2cpIHx8IFtdO1xyXG4gICAgdmFyIGkgPSAwO1xyXG4gICAgZnVuY3Rpb24gZ2V0KHNraXApIHtcclxuICAgICAgICB2YXIgdGVybSA9IHRva2Vuc1tpKytdO1xyXG4gICAgICAgIGlmICh0ZXJtID09PSAnOicpIHtcclxuICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nIG1vZHVsZSBuYW1lLCByZXNvbHZlcyB0byBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gcG9zdGZpeGVkIHdpdGggYSA/IG1lYW5zIGl0IGlzIGEgZmVhdHVyZSB0byBicmFuY2ggb24sIHRoZSB0ZXJtIGlzIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXHJcbiAgICAgICAgICAgIGlmICh0b2tlbnNbaSsrXSA9PT0gJz8nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNraXAgJiYgaGFzKHRlcm0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hlZCB0aGUgZmVhdHVyZSwgZ2V0IHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSBvcHRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlkIG5vdCBtYXRjaCwgZ2V0IHRoZSBzZWNvbmQgdmFsdWUsIHBhc3Npbmcgb3ZlciB0aGUgZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICBnZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldChza2lwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBhIG1vZHVsZVxyXG4gICAgICAgICAgICByZXR1cm4gdGVybTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgaWQgPSBnZXQoKTtcclxuICAgIHJldHVybiBpZCAmJiBub3JtYWxpemUoaWQpO1xyXG59XHJcbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xyXG4vKipcclxuICogQ2hlY2sgaWYgYSBmZWF0dXJlIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZFxyXG4gKlxyXG4gKiBAcGFyYW0gZmVhdHVyZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxyXG4gKi9cclxuZnVuY3Rpb24gZXhpc3RzKGZlYXR1cmUpIHtcclxuICAgIHZhciBub3JtYWxpemVkRmVhdHVyZSA9IGZlYXR1cmUudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiBCb29sZWFuKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlIHx8IG5vcm1hbGl6ZWRGZWF0dXJlIGluIGV4cG9ydHMudGVzdENhY2hlIHx8IGV4cG9ydHMudGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0pO1xyXG59XHJcbmV4cG9ydHMuZXhpc3RzID0gZXhpc3RzO1xyXG4vKipcclxuICogUmVnaXN0ZXIgYSBuZXcgdGVzdCBmb3IgYSBuYW1lZCBmZWF0dXJlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBoYXMuYWRkKCdkb20tYWRkZXZlbnRsaXN0ZW5lcicsICEhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcik7XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGhhcy5hZGQoJ3RvdWNoLWV2ZW50cycsIGZ1bmN0aW9uICgpIHtcclxuICogICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50XHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBAcGFyYW0gZmVhdHVyZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxyXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHJlcG9ydGVkIG9mIHRoZSBmZWF0dXJlLCBvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBvbmNlIG9uIGZpcnN0IHRlc3RcclxuICogQHBhcmFtIG92ZXJ3cml0ZSBpZiBhbiBleGlzdGluZyB2YWx1ZSBzaG91bGQgYmUgb3ZlcndyaXR0ZW4uIERlZmF1bHRzIHRvIGZhbHNlLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkKGZlYXR1cmUsIHZhbHVlLCBvdmVyd3JpdGUpIHtcclxuICAgIGlmIChvdmVyd3JpdGUgPT09IHZvaWQgMCkgeyBvdmVyd3JpdGUgPSBmYWxzZTsgfVxyXG4gICAgdmFyIG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKGV4aXN0cyhub3JtYWxpemVkRmVhdHVyZSkgJiYgIW92ZXJ3cml0ZSAmJiAhKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGZWF0dXJlIFxcXCJcIiArIGZlYXR1cmUgKyBcIlxcXCIgZXhpc3RzIGFuZCBvdmVyd3JpdGUgbm90IHRydWUuXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGV4cG9ydHMudGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzRmVhdHVyZVRlc3RUaGVuYWJsZSh2YWx1ZSkpIHtcclxuICAgICAgICB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdID0gdmFsdWUudGhlbihmdW5jdGlvbiAocmVzb2x2ZWRWYWx1ZSkge1xyXG4gICAgICAgICAgICBleHBvcnRzLnRlc3RDYWNoZVtmZWF0dXJlXSA9IHJlc29sdmVkVmFsdWU7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdO1xyXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRlc3RUaGVuYWJsZXNbZmVhdHVyZV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBleHBvcnRzLnRlc3RDYWNoZVtub3JtYWxpemVkRmVhdHVyZV0gPSB2YWx1ZTtcclxuICAgICAgICBkZWxldGUgZXhwb3J0cy50ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmFkZCA9IGFkZDtcclxuLyoqXHJcbiAqIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWVkIGZlYXR1cmUuXHJcbiAqXHJcbiAqIEBwYXJhbSBmZWF0dXJlIFRoZSBuYW1lIChpZiBhIHN0cmluZykgb3IgaWRlbnRpZmllciAoaWYgYW4gaW50ZWdlcikgb2YgdGhlIGZlYXR1cmUgdG8gdGVzdC5cclxuICovXHJcbmZ1bmN0aW9uIGhhcyhmZWF0dXJlKSB7XHJcbiAgICB2YXIgcmVzdWx0O1xyXG4gICAgdmFyIG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gc3RhdGljQ2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXhwb3J0cy50ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXSkge1xyXG4gICAgICAgIHJlc3VsdCA9IGV4cG9ydHMudGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXSA9IGV4cG9ydHMudGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0uY2FsbChudWxsKTtcclxuICAgICAgICBkZWxldGUgZXhwb3J0cy50ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5vcm1hbGl6ZWRGZWF0dXJlIGluIGV4cG9ydHMudGVzdENhY2hlKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gZXhwb3J0cy50ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmVhdHVyZSBpbiB0ZXN0VGhlbmFibGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkF0dGVtcHQgdG8gZGV0ZWN0IHVucmVnaXN0ZXJlZCBoYXMgZmVhdHVyZSBcXFwiXCIgKyBmZWF0dXJlICsgXCJcXFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSBoYXM7XHJcbi8qXHJcbiAqIE91dCBvZiB0aGUgYm94IGZlYXR1cmUgdGVzdHNcclxuICovXHJcbi8qIEVudmlyb25tZW50cyAqL1xyXG4vKiBVc2VkIGFzIGEgdmFsdWUgdG8gcHJvdmlkZSBhIGRlYnVnIG9ubHkgY29kZSBwYXRoICovXHJcbmFkZCgnZGVidWcnLCB0cnVlKTtcclxuLyogRGV0ZWN0cyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgXCJicm93c2VyIGxpa2VcIiAqL1xyXG5hZGQoJ2hvc3QtYnJvd3NlcicsIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyk7XHJcbi8qIERldGVjdHMgaWYgdGhlIGVudmlyb25tZW50IGFwcGVhcnMgdG8gYmUgTm9kZUpTICovXHJcbmFkZCgnaG9zdC1ub2RlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSkge1xyXG4gICAgICAgIHJldHVybiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XHJcbiAgICB9XHJcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2hhcy9oYXMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2hhcy9oYXMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBpdGVyYXRvcl8xID0gcmVxdWlyZShcIi4vaXRlcmF0b3JcIik7XHJcbnZhciBnbG9iYWxfMSA9IHJlcXVpcmUoXCIuL2dsb2JhbFwiKTtcclxudmFyIG9iamVjdF8xID0gcmVxdWlyZShcIi4vb2JqZWN0XCIpO1xyXG52YXIgaGFzXzEgPSByZXF1aXJlKFwiLi9zdXBwb3J0L2hhc1wiKTtcclxucmVxdWlyZShcIi4vU3ltYm9sXCIpO1xyXG5leHBvcnRzLk1hcCA9IGdsb2JhbF8xLmRlZmF1bHQuTWFwO1xyXG5pZiAoIWhhc18xLmRlZmF1bHQoJ2VzNi1tYXAnKSkge1xyXG4gICAgZXhwb3J0cy5NYXAgPSAoX2EgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIE1hcChpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnTWFwJztcclxuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvcl8xLmlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gdHNsaWJfMS5fX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBlXzEsIF9hO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB1c2luZyBPYmplY3QuaXNcclxuICAgICAgICAgICAgICogdG8gY2hlY2sgZm9yIGVxdWFsaXR5LiBTZWUgaHR0cDovL216bC5sYS8xenVLTzJWXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLl9pbmRleE9mS2V5ID0gZnVuY3Rpb24gKGtleXMsIGtleSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aF8xID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGhfMTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdF8xLmlzKGtleXNbaV0sIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWFwLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9rZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5sZW5ndGggPSB0aGlzLl92YWx1ZXMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLl9rZXlzLm1hcChmdW5jdGlvbiAoa2V5LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtrZXksIF90aGlzLl92YWx1ZXNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGl0ZXJhdG9yXzEuU2hpbUl0ZXJhdG9yKHZhbHVlcyk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGtleXMgPSB0aGlzLl9rZXlzO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuX3ZhbHVlcztcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGhfMiA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoXzI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgdmFsdWVzW2ldLCBrZXlzW2ldLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogdGhpcy5fdmFsdWVzW2luZGV4XTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpID4gLTE7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaXRlcmF0b3JfMS5TaGltSXRlcmF0b3IodGhpcy5fa2V5cyk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KTtcclxuICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gdGhpcy5fa2V5cy5sZW5ndGggOiBpbmRleDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2tleXNbaW5kZXhdID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBpdGVyYXRvcl8xLlNoaW1JdGVyYXRvcih0aGlzLl92YWx1ZXMpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBNYXA7XHJcbiAgICAgICAgfSgpKSxcclxuICAgICAgICBfYVtTeW1ib2wuc3BlY2llc10gPSBfYSxcclxuICAgICAgICBfYSk7XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5NYXA7XHJcbnZhciBfYTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL01hcC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9NYXAuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBnbG9iYWxfMSA9IHJlcXVpcmUoXCIuL2dsb2JhbFwiKTtcclxudmFyIHF1ZXVlXzEgPSByZXF1aXJlKFwiLi9zdXBwb3J0L3F1ZXVlXCIpO1xyXG5yZXF1aXJlKFwiLi9TeW1ib2xcIik7XHJcbnZhciBoYXNfMSA9IHJlcXVpcmUoXCIuL3N1cHBvcnQvaGFzXCIpO1xyXG5leHBvcnRzLlNoaW1Qcm9taXNlID0gZ2xvYmFsXzEuZGVmYXVsdC5Qcm9taXNlO1xyXG5leHBvcnRzLmlzVGhlbmFibGUgPSBmdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbic7XHJcbn07XHJcbmlmICghaGFzXzEuZGVmYXVsdCgnZXM2LXByb21pc2UnKSkge1xyXG4gICAgZ2xvYmFsXzEuZGVmYXVsdC5Qcm9taXNlID0gZXhwb3J0cy5TaGltUHJvbWlzZSA9IChfYSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgUHJvbWlzZS5cclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIEBwYXJhbSBleGVjdXRvclxyXG4gICAgICAgICAgICAgKiBUaGUgZXhlY3V0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIFByb21pc2UgaXMgaW5zdGFudGlhdGVkLiBJdCBpcyByZXNwb25zaWJsZSBmb3JcclxuICAgICAgICAgICAgICogc3RhcnRpbmcgdGhlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hlbiBpdCBpcyBpbnZva2VkLlxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBUaGUgZXhlY3V0b3IgbXVzdCBjYWxsIGVpdGhlciB0aGUgcGFzc2VkIGByZXNvbHZlYCBmdW5jdGlvbiB3aGVuIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWRcclxuICAgICAgICAgICAgICogc3VjY2Vzc2Z1bGx5LCBvciB0aGUgYHJlamVjdGAgZnVuY3Rpb24gd2hlbiB0aGUgb3BlcmF0aW9uIGZhaWxzLlxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMSAvKiBQZW5kaW5nICovO1xyXG4gICAgICAgICAgICAgICAgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ1Byb21pc2UnO1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBJZiB0cnVlLCB0aGUgcmVzb2x1dGlvbiBvZiB0aGlzIHByb21pc2UgaXMgY2hhaW5lZCAoXCJsb2NrZWQgaW5cIikgdG8gYW5vdGhlciBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB2YXIgaXNDaGFpbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgcHJvbWlzZSBpcyBpbiBhIHJlc29sdmVkIHN0YXRlLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB2YXIgaXNSZXNvbHZlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuc3RhdGUgIT09IDEgLyogUGVuZGluZyAqLyB8fCBpc0NoYWluZWQ7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBDYWxsYmFja3MgdGhhdCBzaG91bGQgYmUgaW52b2tlZCBvbmNlIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSBbXTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogSW5pdGlhbGx5IHB1c2hlcyBjYWxsYmFja3Mgb250byBhIHF1ZXVlIGZvciBleGVjdXRpb24gb25jZSB0aGlzIHByb21pc2Ugc2V0dGxlcy4gQWZ0ZXIgdGhlIHByb21pc2Ugc2V0dGxlcyxcclxuICAgICAgICAgICAgICAgICAqIGVucXVldWVzIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IGV2ZW50IGxvb3AgdHVybi5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgdmFyIHdoZW5GaW5pc2hlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFNldHRsZXMgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSBuZXdTdGF0ZSBUaGUgcmVzb2x2ZWQgc3RhdGUgZm9yIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7VHxhbnl9IHZhbHVlIFRoZSByZXNvbHZlZCB2YWx1ZSBmb3IgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB2YXIgc2V0dGxlID0gZnVuY3Rpb24gKG5ld1N0YXRlLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEEgcHJvbWlzZSBjYW4gb25seSBiZSBzZXR0bGVkIG9uY2UuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLnN0YXRlICE9PSAxIC8qIFBlbmRpbmcgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJlc29sdmVkVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB3aGVuRmluaXNoZWQgPSBxdWV1ZV8xLnF1ZXVlTWljcm9UYXNrO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZW5xdWV1ZSBhIGNhbGxiYWNrIHJ1bm5lciBpZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHNvIHRoYXQgaW5pdGlhbGx5IGZ1bGZpbGxlZCBQcm9taXNlcyBkb24ndCBoYXZlIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCBhbiBleHRyYSB0dXJuLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MgJiYgY2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVfMS5xdWV1ZU1pY3JvVGFzayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gY2FsbGJhY2tzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzW2ldLmNhbGwobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFJlc29sdmVzIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge1R8YW55fSB2YWx1ZSBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiAobmV3U3RhdGUsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVzb2x2ZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBvcnRzLmlzVGhlbmFibGUodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnRoZW4oc2V0dGxlLmJpbmQobnVsbCwgMCAvKiBGdWxmaWxsZWQgKi8pLCBzZXR0bGUuYmluZChudWxsLCAyIC8qIFJlamVjdGVkICovKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hhaW5lZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0bGUobmV3U3RhdGUsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aGVuID0gZnVuY3Rpb24gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbkZpbmlzaGVkIGluaXRpYWxseSBxdWV1ZXMgdXAgY2FsbGJhY2tzIGZvciBleGVjdXRpb24gYWZ0ZXIgdGhlIHByb21pc2UgaGFzIHNldHRsZWQuIE9uY2UgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb21pc2UgaGFzIHNldHRsZWQsIHdoZW5GaW5pc2hlZCB3aWxsIHNjaGVkdWxlIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHR1cm4gdGhyb3VnaCB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZlbnQgbG9vcC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlbkZpbmlzaGVkKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IF90aGlzLnN0YXRlID09PSAyIC8qIFJlamVjdGVkICovID8gb25SZWplY3RlZCA6IG9uRnVsZmlsbGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2FsbGJhY2soX3RoaXMucmVzb2x2ZWRWYWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5zdGF0ZSA9PT0gMiAvKiBSZWplY3RlZCAqLykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChfdGhpcy5yZXNvbHZlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3RoaXMucmVzb2x2ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0b3IocmVzb2x2ZS5iaW5kKG51bGwsIDAgLyogRnVsZmlsbGVkICovKSwgcmVzb2x2ZS5iaW5kKG51bGwsIDIgLyogUmVqZWN0ZWQgKi8pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRsZSgyIC8qIFJlamVjdGVkICovLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgUHJvbWlzZS5hbGwgPSBmdW5jdGlvbiAoaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21wbGV0ZSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9wdWxhdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZnVsZmlsbChpbmRleCwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICArK2NvbXBsZXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluaXNoKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9wdWxhdGluZyB8fCBjb21wbGV0ZSA8IHRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzSXRlbShpbmRleCwgaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICArK3RvdGFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb3J0cy5pc1RoZW5hYmxlKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbiBpdGVtIFByb21pc2UgcmVqZWN0cywgdGhpcyBQcm9taXNlIGlzIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggdGhlIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRoZW4oZnVsZmlsbC5iaW5kKG51bGwsIGluZGV4KSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShpdGVtKS50aGVuKGZ1bGZpbGwuYmluZChudWxsLCBpbmRleCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gdHNsaWJfMS5fX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSXRlbShpLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cclxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHBvcHVsYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBmaW5pc2goKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZV8xLCBfYTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBQcm9taXNlLnJhY2UgPSBmdW5jdGlvbiAoaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMiA9IHRzbGliXzEuX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8yXzEgPSBpdGVyYWJsZV8yLm5leHQoKTsgIWl0ZXJhYmxlXzJfMS5kb25lOyBpdGVyYWJsZV8yXzEgPSBpdGVyYWJsZV8yLm5leHQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVyYWJsZV8yXzEudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIFByb21pc2UgaXRlbSByZWplY3RzLCB0aGlzIFByb21pc2UgaXMgaW1tZWRpYXRlbHkgcmVqZWN0ZWQgd2l0aCB0aGUgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21pc2UncyByZWplY3Rpb24gZXJyb3IuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50aGVuKHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoaXRlbSkudGhlbihyZXNvbHZlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzJfMSAmJiAhaXRlcmFibGVfMl8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMi5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVfMiwgX2E7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QgPSBmdW5jdGlvbiAocmVhc29uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2ggPSBmdW5jdGlvbiAob25SZWplY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZTtcclxuICAgICAgICB9KCkpLFxyXG4gICAgICAgIF9hW1N5bWJvbC5zcGVjaWVzXSA9IGV4cG9ydHMuU2hpbVByb21pc2UsXHJcbiAgICAgICAgX2EpO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuU2hpbVByb21pc2U7XHJcbnZhciBfYTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1Byb21pc2UuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vUHJvbWlzZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIGdsb2JhbF8xID0gcmVxdWlyZShcIi4vZ2xvYmFsXCIpO1xyXG52YXIgaXRlcmF0b3JfMSA9IHJlcXVpcmUoXCIuL2l0ZXJhdG9yXCIpO1xyXG52YXIgaGFzXzEgPSByZXF1aXJlKFwiLi9zdXBwb3J0L2hhc1wiKTtcclxucmVxdWlyZShcIi4vU3ltYm9sXCIpO1xyXG5leHBvcnRzLlNldCA9IGdsb2JhbF8xLmRlZmF1bHQuU2V0O1xyXG5pZiAoIWhhc18xLmRlZmF1bHQoJ2VzNi1zZXQnKSkge1xyXG4gICAgZXhwb3J0cy5TZXQgPSAoX2EgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIFNldChpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ1NldCc7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3JfMS5pc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQoaXRlcmFibGVbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IHRzbGliXzEuX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBlXzEsIF9hO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXModmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXREYXRhLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXREYXRhLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gdGhpcy5fc2V0RGF0YS5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RGF0YS5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBTZXQucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGl0ZXJhdG9yXzEuU2hpbUl0ZXJhdG9yKHRoaXMuX3NldERhdGEubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gW3ZhbHVlLCB2YWx1ZV07IH0pKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrZm4sIHRoaXNBcmcpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IHRoaXMudmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrZm4uY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIHJlc3VsdC52YWx1ZSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NldERhdGEuaW5kZXhPZih2YWx1ZSkgPiAtMTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBpdGVyYXRvcl8xLlNoaW1JdGVyYXRvcih0aGlzLl9zZXREYXRhKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNldC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0RGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgU2V0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGl0ZXJhdG9yXzEuU2hpbUl0ZXJhdG9yKHRoaXMuX3NldERhdGEpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBTZXQucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGl0ZXJhdG9yXzEuU2hpbUl0ZXJhdG9yKHRoaXMuX3NldERhdGEpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gU2V0O1xyXG4gICAgICAgIH0oKSksXHJcbiAgICAgICAgX2FbU3ltYm9sLnNwZWNpZXNdID0gX2EsXHJcbiAgICAgICAgX2EpO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuU2V0O1xyXG52YXIgX2E7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9TZXQuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vU2V0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBoYXNfMSA9IHJlcXVpcmUoXCIuL3N1cHBvcnQvaGFzXCIpO1xyXG52YXIgZ2xvYmFsXzEgPSByZXF1aXJlKFwiLi9nbG9iYWxcIik7XHJcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi9zdXBwb3J0L3V0aWxcIik7XHJcbmV4cG9ydHMuU3ltYm9sID0gZ2xvYmFsXzEuZGVmYXVsdC5TeW1ib2w7XHJcbmlmICghaGFzXzEuZGVmYXVsdCgnZXM2LXN5bWJvbCcpKSB7XHJcbiAgICAvKipcclxuICAgICAqIFRocm93cyBpZiB0aGUgdmFsdWUgaXMgbm90IGEgc3ltYm9sLCB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBTaGltXHJcbiAgICAgKiBAcGFyYW0gIHthbnl9ICAgIHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybiB7c3ltYm9sfSAgICAgICBSZXR1cm5zIHRoZSBzeW1ib2wgb3IgdGhyb3dzXHJcbiAgICAgKi9cclxuICAgIHZhciB2YWxpZGF0ZVN5bWJvbF8xID0gZnVuY3Rpb24gdmFsaWRhdGVTeW1ib2wodmFsdWUpIHtcclxuICAgICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuICAgIHZhciBkZWZpbmVQcm9wZXJ0aWVzXzEgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcclxuICAgIHZhciBkZWZpbmVQcm9wZXJ0eV8xID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG4gICAgdmFyIGNyZWF0ZV8xID0gT2JqZWN0LmNyZWF0ZTtcclxuICAgIHZhciBvYmpQcm90b3R5cGVfMSA9IE9iamVjdC5wcm90b3R5cGU7XHJcbiAgICB2YXIgZ2xvYmFsU3ltYm9sc18xID0ge307XHJcbiAgICB2YXIgZ2V0U3ltYm9sTmFtZV8xID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZV8xKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGVzYykge1xyXG4gICAgICAgICAgICB2YXIgcG9zdGZpeCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBuYW1lO1xyXG4gICAgICAgICAgICB3aGlsZSAoY3JlYXRlZFtTdHJpbmcoZGVzYykgKyAocG9zdGZpeCB8fCAnJyldKSB7XHJcbiAgICAgICAgICAgICAgICArK3Bvc3RmaXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVzYyArPSBTdHJpbmcocG9zdGZpeCB8fCAnJyk7XHJcbiAgICAgICAgICAgIGNyZWF0ZWRbZGVzY10gPSB0cnVlO1xyXG4gICAgICAgICAgICBuYW1lID0gJ0BAJyArIGRlc2M7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkgZ3VhcmQgdW50aWwgdGhlIGR1cGxpY2F0ZSBleGVjdXRpb24gd2hlbiB0ZXN0aW5nIGNhbiBiZVxyXG4gICAgICAgICAgICAvLyBwaW5uZWQgZG93bi5cclxuICAgICAgICAgICAgaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9ialByb3RvdHlwZV8xLCBuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHlfMShvYmpQcm90b3R5cGVfMSwgbmFtZSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5XzEodGhpcywgbmFtZSwgdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcih2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpO1xyXG4gICAgdmFyIEludGVybmFsU3ltYm9sXzEgPSBmdW5jdGlvbiBTeW1ib2woZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEludGVybmFsU3ltYm9sXzEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFN5bWJvbChkZXNjcmlwdGlvbik7XHJcbiAgICB9O1xyXG4gICAgZXhwb3J0cy5TeW1ib2wgPSBnbG9iYWxfMS5kZWZhdWx0LlN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgU3ltYm9sKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1R5cGVFcnJvcjogU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzeW0gPSBPYmplY3QuY3JlYXRlKEludGVybmFsU3ltYm9sXzEucHJvdG90eXBlKTtcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyhkZXNjcmlwdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnRpZXNfMShzeW0sIHtcclxuICAgICAgICAgICAgX19kZXNjcmlwdGlvbl9fOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGRlc2NyaXB0aW9uKSxcclxuICAgICAgICAgICAgX19uYW1lX186IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZ2V0U3ltYm9sTmFtZV8xKGRlc2NyaXB0aW9uKSlcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKiBEZWNvcmF0ZSB0aGUgU3ltYm9sIGZ1bmN0aW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlIHByb3BlcnRpZXMgKi9cclxuICAgIGRlZmluZVByb3BlcnR5XzEoZXhwb3J0cy5TeW1ib2wsICdmb3InLCB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICBpZiAoZ2xvYmFsU3ltYm9sc18xW2tleV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFN5bWJvbHNfMVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGdsb2JhbFN5bWJvbHNfMVtrZXldID0gZXhwb3J0cy5TeW1ib2woU3RyaW5nKGtleSkpKTtcclxuICAgIH0pKTtcclxuICAgIGRlZmluZVByb3BlcnRpZXNfMShleHBvcnRzLlN5bWJvbCwge1xyXG4gICAgICAgIGtleUZvcjogdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcihmdW5jdGlvbiAoc3ltKSB7XHJcbiAgICAgICAgICAgIHZhciBrZXk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRlU3ltYm9sXzEoc3ltKTtcclxuICAgICAgICAgICAgZm9yIChrZXkgaW4gZ2xvYmFsU3ltYm9sc18xKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU3ltYm9sc18xW2tleV0gPT09IHN5bSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBoYXNJbnN0YW5jZTogdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcihleHBvcnRzLlN5bWJvbC5mb3IoJ2hhc0luc3RhbmNlJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgaXNDb25jYXRTcHJlYWRhYmxlOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLmZvcignaXNDb25jYXRTcHJlYWRhYmxlJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgaXRlcmF0b3I6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZXhwb3J0cy5TeW1ib2wuZm9yKCdpdGVyYXRvcicpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIG1hdGNoOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLmZvcignbWF0Y2gnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBvYnNlcnZhYmxlOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLmZvcignb2JzZXJ2YWJsZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHJlcGxhY2U6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZXhwb3J0cy5TeW1ib2wuZm9yKCdyZXBsYWNlJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgc2VhcmNoOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLmZvcignc2VhcmNoJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgc3BlY2llczogdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcihleHBvcnRzLlN5bWJvbC5mb3IoJ3NwZWNpZXMnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBzcGxpdDogdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcihleHBvcnRzLlN5bWJvbC5mb3IoJ3NwbGl0JyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgdG9QcmltaXRpdmU6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZXhwb3J0cy5TeW1ib2wuZm9yKCd0b1ByaW1pdGl2ZScpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHRvU3RyaW5nVGFnOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLmZvcigndG9TdHJpbmdUYWcnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICB1bnNjb3BhYmxlczogdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcihleHBvcnRzLlN5bWJvbC5mb3IoJ3Vuc2NvcGFibGVzJyksIGZhbHNlLCBmYWxzZSlcclxuICAgIH0pO1xyXG4gICAgLyogRGVjb3JhdGUgdGhlIEludGVybmFsU3ltYm9sIG9iamVjdCAqL1xyXG4gICAgZGVmaW5lUHJvcGVydGllc18xKEludGVybmFsU3ltYm9sXzEucHJvdG90eXBlLCB7XHJcbiAgICAgICAgY29uc3RydWN0b3I6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZXhwb3J0cy5TeW1ib2wpLFxyXG4gICAgICAgIHRvU3RyaW5nOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19uYW1lX187XHJcbiAgICAgICAgfSwgZmFsc2UsIGZhbHNlKVxyXG4gICAgfSk7XHJcbiAgICAvKiBEZWNvcmF0ZSB0aGUgU3ltYm9sLnByb3RvdHlwZSAqL1xyXG4gICAgZGVmaW5lUHJvcGVydGllc18xKGV4cG9ydHMuU3ltYm9sLnByb3RvdHlwZSwge1xyXG4gICAgICAgIHRvU3RyaW5nOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdTeW1ib2wgKCcgKyB2YWxpZGF0ZVN5bWJvbF8xKHRoaXMpLl9fZGVzY3JpcHRpb25fXyArICcpJztcclxuICAgICAgICB9KSxcclxuICAgICAgICB2YWx1ZU9mOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlU3ltYm9sXzEodGhpcyk7XHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgZGVmaW5lUHJvcGVydHlfMShleHBvcnRzLlN5bWJvbC5wcm90b3R5cGUsIGV4cG9ydHMuU3ltYm9sLnRvUHJpbWl0aXZlLCB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdmFsaWRhdGVTeW1ib2xfMSh0aGlzKTtcclxuICAgIH0pKTtcclxuICAgIGRlZmluZVByb3BlcnR5XzEoZXhwb3J0cy5TeW1ib2wucHJvdG90eXBlLCBleHBvcnRzLlN5bWJvbC50b1N0cmluZ1RhZywgdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcignU3ltYm9sJywgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XHJcbiAgICBkZWZpbmVQcm9wZXJ0eV8xKEludGVybmFsU3ltYm9sXzEucHJvdG90eXBlLCBleHBvcnRzLlN5bWJvbC50b1ByaW1pdGl2ZSwgdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcihleHBvcnRzLlN5bWJvbC5wcm90b3R5cGVbZXhwb3J0cy5TeW1ib2wudG9QcmltaXRpdmVdLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcclxuICAgIGRlZmluZVByb3BlcnR5XzEoSW50ZXJuYWxTeW1ib2xfMS5wcm90b3R5cGUsIGV4cG9ydHMuU3ltYm9sLnRvU3RyaW5nVGFnLCB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLnByb3RvdHlwZVtleHBvcnRzLlN5bWJvbC50b1N0cmluZ1RhZ10sIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpO1xyXG59XHJcbi8qKlxyXG4gKiBBIGN1c3RvbSBndWFyZCBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgaWYgYW4gb2JqZWN0IGlzIGEgc3ltYm9sIG9yIG5vdFxyXG4gKiBAcGFyYW0gIHthbnl9ICAgICAgIHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjayB0byBzZWUgaWYgaXQgaXMgYSBzeW1ib2wgb3Igbm90XHJcbiAqIEByZXR1cm4ge2lzIHN5bWJvbH0gICAgICAgUmV0dXJucyB0cnVlIGlmIGEgc3ltYm9sIG9yIG5vdCAoYW5kIG5hcnJvd3MgdGhlIHR5cGUgZ3VhcmQpXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fCB2YWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykpIHx8IGZhbHNlO1xyXG59XHJcbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcclxuLyoqXHJcbiAqIEZpbGwgYW55IG1pc3Npbmcgd2VsbCBrbm93biBzeW1ib2xzIGlmIHRoZSBuYXRpdmUgU3ltYm9sIGlzIG1pc3NpbmcgdGhlbVxyXG4gKi9cclxuW1xyXG4gICAgJ2hhc0luc3RhbmNlJyxcclxuICAgICdpc0NvbmNhdFNwcmVhZGFibGUnLFxyXG4gICAgJ2l0ZXJhdG9yJyxcclxuICAgICdzcGVjaWVzJyxcclxuICAgICdyZXBsYWNlJyxcclxuICAgICdzZWFyY2gnLFxyXG4gICAgJ3NwbGl0JyxcclxuICAgICdtYXRjaCcsXHJcbiAgICAndG9QcmltaXRpdmUnLFxyXG4gICAgJ3RvU3RyaW5nVGFnJyxcclxuICAgICd1bnNjb3BhYmxlcycsXHJcbiAgICAnb2JzZXJ2YWJsZSdcclxuXS5mb3JFYWNoKGZ1bmN0aW9uICh3ZWxsS25vd24pIHtcclxuICAgIGlmICghZXhwb3J0cy5TeW1ib2xbd2VsbEtub3duXSkge1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLlN5bWJvbCwgd2VsbEtub3duLCB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLmZvcih3ZWxsS25vd24pLCBmYWxzZSwgZmFsc2UpKTtcclxuICAgIH1cclxufSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuU3ltYm9sO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vU3ltYm9sLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL1N5bWJvbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIGdsb2JhbF8xID0gcmVxdWlyZShcIi4vZ2xvYmFsXCIpO1xyXG52YXIgaXRlcmF0b3JfMSA9IHJlcXVpcmUoXCIuL2l0ZXJhdG9yXCIpO1xyXG52YXIgaGFzXzEgPSByZXF1aXJlKFwiLi9zdXBwb3J0L2hhc1wiKTtcclxucmVxdWlyZShcIi4vU3ltYm9sXCIpO1xyXG5leHBvcnRzLldlYWtNYXAgPSBnbG9iYWxfMS5kZWZhdWx0LldlYWtNYXA7XHJcbmlmICghaGFzXzEuZGVmYXVsdCgnZXM2LXdlYWttYXAnKSkge1xyXG4gICAgdmFyIERFTEVURURfMSA9IHt9O1xyXG4gICAgdmFyIGdldFVJRF8xID0gZnVuY3Rpb24gZ2V0VUlEKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApO1xyXG4gICAgfTtcclxuICAgIHZhciBnZW5lcmF0ZU5hbWVfMSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHN0YXJ0SWQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgJSAxMDAwMDAwMDApO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBnZW5lcmF0ZU5hbWUoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnX193bScgKyBnZXRVSURfMSgpICsgKHN0YXJ0SWQrKyArICdfXycpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpO1xyXG4gICAgZXhwb3J0cy5XZWFrTWFwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIFdlYWtNYXAoaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ1dlYWtNYXAnO1xyXG4gICAgICAgICAgICB0aGlzLl9uYW1lID0gZ2VuZXJhdGVOYW1lXzEoKTtcclxuICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvcl8xLmlzQXJyYXlMaWtlKGl0ZXJhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVyYWJsZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoaXRlbVswXSwgaXRlbVsxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IHRzbGliXzEuX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hID0gdHNsaWJfMS5fX3JlYWQoaXRlcmFibGVfMV8xLnZhbHVlLCAyKSwga2V5ID0gX2FbMF0sIHZhbHVlID0gX2FbMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9iID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYi5jYWxsKGl0ZXJhYmxlXzEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGVfMSwgX2I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFdlYWtNYXAucHJvdG90eXBlLl9nZXRGcm96ZW5FbnRyeUluZGV4ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2Zyb3plbkVudHJpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mcm96ZW5FbnRyaWVzW2ldLmtleSA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURURfMSkge1xyXG4gICAgICAgICAgICAgICAgZW50cnkudmFsdWUgPSBERUxFVEVEXzE7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZnJvemVuSW5kZXggPSB0aGlzLl9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSk7XHJcbiAgICAgICAgICAgIGlmIChmcm96ZW5JbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mcm96ZW5FbnRyaWVzLnNwbGljZShmcm96ZW5JbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBXZWFrTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURURfMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcclxuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcm96ZW5FbnRyaWVzW2Zyb3plbkluZGV4XS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgV2Vha01hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoQm9vbGVhbihlbnRyeSAmJiBlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRF8xKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgV2Vha01hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKCFrZXkgfHwgKHR5cGVvZiBrZXkgIT09ICdvYmplY3QnICYmIHR5cGVvZiBrZXkgIT09ICdmdW5jdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHZhbHVlIHVzZWQgYXMgd2VhayBtYXAga2V5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0ga2V5W3RoaXMuX25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LmtleSAhPT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICBlbnRyeSA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogeyB2YWx1ZToga2V5IH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbihrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcy5wdXNoKGVudHJ5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMuX25hbWUsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gV2Vha01hcDtcclxuICAgIH0oKSk7XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5XZWFrTWFwO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vV2Vha01hcC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9XZWFrTWFwLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgZ2xvYmFsXzEgPSByZXF1aXJlKFwiLi9nbG9iYWxcIik7XHJcbnZhciBpdGVyYXRvcl8xID0gcmVxdWlyZShcIi4vaXRlcmF0b3JcIik7XHJcbnZhciBudW1iZXJfMSA9IHJlcXVpcmUoXCIuL251bWJlclwiKTtcclxudmFyIGhhc18xID0gcmVxdWlyZShcIi4vc3VwcG9ydC9oYXNcIik7XHJcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi9zdXBwb3J0L3V0aWxcIik7XHJcbmlmIChoYXNfMS5kZWZhdWx0KCdlczYtYXJyYXknKSAmJiBoYXNfMS5kZWZhdWx0KCdlczYtYXJyYXktZmlsbCcpKSB7XHJcbiAgICBleHBvcnRzLmZyb20gPSBnbG9iYWxfMS5kZWZhdWx0LkFycmF5LmZyb207XHJcbiAgICBleHBvcnRzLm9mID0gZ2xvYmFsXzEuZGVmYXVsdC5BcnJheS5vZjtcclxuICAgIGV4cG9ydHMuY29weVdpdGhpbiA9IHV0aWxfMS53cmFwTmF0aXZlKGdsb2JhbF8xLmRlZmF1bHQuQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4pO1xyXG4gICAgZXhwb3J0cy5maWxsID0gdXRpbF8xLndyYXBOYXRpdmUoZ2xvYmFsXzEuZGVmYXVsdC5BcnJheS5wcm90b3R5cGUuZmlsbCk7XHJcbiAgICBleHBvcnRzLmZpbmQgPSB1dGlsXzEud3JhcE5hdGl2ZShnbG9iYWxfMS5kZWZhdWx0LkFycmF5LnByb3RvdHlwZS5maW5kKTtcclxuICAgIGV4cG9ydHMuZmluZEluZGV4ID0gdXRpbF8xLndyYXBOYXRpdmUoZ2xvYmFsXzEuZGVmYXVsdC5BcnJheS5wcm90b3R5cGUuZmluZEluZGV4KTtcclxufVxyXG5lbHNlIHtcclxuICAgIC8vIEl0IGlzIG9ubHkgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpL2lPUyB0aGF0IGhhdmUgYSBiYWQgZmlsbCBpbXBsZW1lbnRhdGlvbiBhbmQgc28gYXJlbid0IGluIHRoZSB3aWxkXHJcbiAgICAvLyBUbyBtYWtlIHRoaW5ncyBlYXNpZXIsIGlmIHRoZXJlIGlzIGEgYmFkIGZpbGwgaW1wbGVtZW50YXRpb24sIHRoZSB3aG9sZSBzZXQgb2YgZnVuY3Rpb25zIHdpbGwgYmUgZmlsbGVkXHJcbiAgICAvKipcclxuICAgICAqIEVuc3VyZXMgYSBub24tbmVnYXRpdmUsIG5vbi1pbmZpbml0ZSwgc2FmZSBpbnRlZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciB0byB2YWxpZGF0ZVxyXG4gICAgICogQHJldHVybiBBIHByb3BlciBsZW5ndGhcclxuICAgICAqL1xyXG4gICAgdmFyIHRvTGVuZ3RoXzEgPSBmdW5jdGlvbiB0b0xlbmd0aChsZW5ndGgpIHtcclxuICAgICAgICBpZiAoaXNOYU4obGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7XHJcbiAgICAgICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcclxuICAgICAgICAgICAgbGVuZ3RoID0gTWF0aC5mbG9vcihsZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBFbnN1cmUgYSBub24tbmVnYXRpdmUsIHJlYWwsIHNhZmUgaW50ZWdlclxyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChsZW5ndGgsIDApLCBudW1iZXJfMS5NQVhfU0FGRV9JTlRFR0VSKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZyb20gRVM2IDcuMS40IFRvSW50ZWdlcigpXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gY29udmVydFxyXG4gICAgICogQHJldHVybiBBbiBpbnRlZ2VyXHJcbiAgICAgKi9cclxuICAgIHZhciB0b0ludGVnZXJfMSA9IGZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcclxuICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgPT09IDAgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAodmFsdWUgPiAwID8gMSA6IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZXMgYW4gb2Zmc2V0IGFnYWluc3QgYSBnaXZlbiBsZW5ndGgsIHdyYXBwaW5nIGl0IGlmIG5lZ2F0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgb3JpZ2luYWwgb2Zmc2V0XHJcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSB0b3RhbCBsZW5ndGggdG8gbm9ybWFsaXplIGFnYWluc3RcclxuICAgICAqIEByZXR1cm4gSWYgbmVnYXRpdmUsIHByb3ZpZGUgYSBkaXN0YW5jZSBmcm9tIHRoZSBlbmQgKGxlbmd0aCk7IG90aGVyd2lzZSBwcm92aWRlIGEgZGlzdGFuY2UgZnJvbSAwXHJcbiAgICAgKi9cclxuICAgIHZhciBub3JtYWxpemVPZmZzZXRfMSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZU9mZnNldCh2YWx1ZSwgbGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgMCA/IE1hdGgubWF4KGxlbmd0aCArIHZhbHVlLCAwKSA6IE1hdGgubWluKHZhbHVlLCBsZW5ndGgpO1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMuZnJvbSA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLCBtYXBGdW5jdGlvbiwgdGhpc0FyZykge1xyXG4gICAgICAgIGlmIChhcnJheUxpa2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmcm9tOiByZXF1aXJlcyBhbiBhcnJheS1saWtlIG9iamVjdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWFwRnVuY3Rpb24gJiYgdGhpc0FyZykge1xyXG4gICAgICAgICAgICBtYXBGdW5jdGlvbiA9IG1hcEZ1bmN0aW9uLmJpbmQodGhpc0FyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXHJcbiAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcclxuICAgICAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGhfMShhcnJheUxpa2UubGVuZ3RoKTtcclxuICAgICAgICAvLyBTdXBwb3J0IGV4dGVuc2lvblxyXG4gICAgICAgIHZhciBhcnJheSA9IHR5cGVvZiBDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdChuZXcgQ29uc3RydWN0b3IobGVuZ3RoKSkgOiBuZXcgQXJyYXkobGVuZ3RoKTtcclxuICAgICAgICBpZiAoIWl0ZXJhdG9yXzEuaXNBcnJheUxpa2UoYXJyYXlMaWtlKSAmJiAhaXRlcmF0b3JfMS5pc0l0ZXJhYmxlKGFycmF5TGlrZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IGFuZCB0aGUgbm9ybWFsaXplZCBsZW5ndGggaXMgMCwganVzdCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuIHRoaXMgcHJldmVudHMgYSBwcm9ibGVtXHJcbiAgICAgICAgLy8gd2l0aCB0aGUgaXRlcmF0aW9uIG9uIElFIHdoZW4gdXNpbmcgYSBOYU4gYXJyYXkgbGVuZ3RoLlxyXG4gICAgICAgIGlmIChpdGVyYXRvcl8xLmlzQXJyYXlMaWtlKGFycmF5TGlrZSkpIHtcclxuICAgICAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlMaWtlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IG1hcEZ1bmN0aW9uID8gbWFwRnVuY3Rpb24oYXJyYXlMaWtlW2ldLCBpKSA6IGFycmF5TGlrZVtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYXJyYXlMaWtlXzEgPSB0c2xpYl8xLl9fdmFsdWVzKGFycmF5TGlrZSksIGFycmF5TGlrZV8xXzEgPSBhcnJheUxpa2VfMS5uZXh0KCk7ICFhcnJheUxpa2VfMV8xLmRvbmU7IGFycmF5TGlrZV8xXzEgPSBhcnJheUxpa2VfMS5uZXh0KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhcnJheUxpa2VfMV8xLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2ldID0gbWFwRnVuY3Rpb24gPyBtYXBGdW5jdGlvbih2YWx1ZSwgaSkgOiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJheUxpa2VfMV8xICYmICFhcnJheUxpa2VfMV8xLmRvbmUgJiYgKF9hID0gYXJyYXlMaWtlXzEucmV0dXJuKSkgX2EuY2FsbChhcnJheUxpa2VfMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFycmF5TGlrZS5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBhcnJheS5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnJheTtcclxuICAgICAgICB2YXIgZV8xLCBfYTtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLm9mID0gZnVuY3Rpb24gb2YoKSB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgaXRlbXNbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGl0ZW1zKTtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmNvcHlXaXRoaW4gPSBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgb2Zmc2V0LCBzdGFydCwgZW5kKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvcHlXaXRoaW46IHRhcmdldCBtdXN0IGJlIGFuIGFycmF5LWxpa2Ugb2JqZWN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aF8xKHRhcmdldC5sZW5ndGgpO1xyXG4gICAgICAgIG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldF8xKHRvSW50ZWdlcl8xKG9mZnNldCksIGxlbmd0aCk7XHJcbiAgICAgICAgc3RhcnQgPSBub3JtYWxpemVPZmZzZXRfMSh0b0ludGVnZXJfMShzdGFydCksIGxlbmd0aCk7XHJcbiAgICAgICAgZW5kID0gbm9ybWFsaXplT2Zmc2V0XzEoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXJfMShlbmQpLCBsZW5ndGgpO1xyXG4gICAgICAgIHZhciBjb3VudCA9IE1hdGgubWluKGVuZCAtIHN0YXJ0LCBsZW5ndGggLSBvZmZzZXQpO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSAxO1xyXG4gICAgICAgIGlmIChvZmZzZXQgPiBzdGFydCAmJiBvZmZzZXQgPCBzdGFydCArIGNvdW50KSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xO1xyXG4gICAgICAgICAgICBzdGFydCArPSBjb3VudCAtIDE7XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBjb3VudCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChjb3VudCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0IGluIHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W29mZnNldF0gPSB0YXJnZXRbc3RhcnRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRhcmdldFtvZmZzZXRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBkaXJlY3Rpb247XHJcbiAgICAgICAgICAgIHN0YXJ0ICs9IGRpcmVjdGlvbjtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmZpbGwgPSBmdW5jdGlvbiBmaWxsKHRhcmdldCwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcclxuICAgICAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGhfMSh0YXJnZXQubGVuZ3RoKTtcclxuICAgICAgICB2YXIgaSA9IG5vcm1hbGl6ZU9mZnNldF8xKHRvSW50ZWdlcl8xKHN0YXJ0KSwgbGVuZ3RoKTtcclxuICAgICAgICBlbmQgPSBub3JtYWxpemVPZmZzZXRfMShlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcl8xKGVuZCksIGxlbmd0aCk7XHJcbiAgICAgICAgd2hpbGUgKGkgPCBlbmQpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W2krK10gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmZpbmQgPSBmdW5jdGlvbiBmaW5kKHRhcmdldCwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSBleHBvcnRzLmZpbmRJbmRleCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKTtcclxuICAgICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gdGFyZ2V0W2luZGV4XSA6IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmZpbmRJbmRleCA9IGZ1bmN0aW9uIGZpbmRJbmRleCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKSB7XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoXzEodGFyZ2V0Lmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmaW5kOiBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzQXJnKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzQXJnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sodGFyZ2V0W2ldLCBpLCB0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9O1xyXG59XHJcbmlmIChoYXNfMS5kZWZhdWx0KCdlczctYXJyYXknKSkge1xyXG4gICAgZXhwb3J0cy5pbmNsdWRlcyA9IHV0aWxfMS53cmFwTmF0aXZlKGdsb2JhbF8xLmRlZmF1bHQuQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKTtcclxufVxyXG5lbHNlIHtcclxuICAgIC8qKlxyXG4gICAgICogRW5zdXJlcyBhIG5vbi1uZWdhdGl2ZSwgbm9uLWluZmluaXRlLCBzYWZlIGludGVnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIHRvIHZhbGlkYXRlXHJcbiAgICAgKiBAcmV0dXJuIEEgcHJvcGVyIGxlbmd0aFxyXG4gICAgICovXHJcbiAgICB2YXIgdG9MZW5ndGhfMiA9IGZ1bmN0aW9uIHRvTGVuZ3RoKGxlbmd0aCkge1xyXG4gICAgICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpO1xyXG4gICAgICAgIGlmIChpc05hTihsZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xyXG4gICAgICAgICAgICBsZW5ndGggPSBNYXRoLmZsb29yKGxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSBhIG5vbi1uZWdhdGl2ZSwgcmVhbCwgc2FmZSBpbnRlZ2VyXHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KGxlbmd0aCwgMCksIG51bWJlcl8xLk1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh0YXJnZXQsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCkge1xyXG4gICAgICAgIGlmIChmcm9tSW5kZXggPT09IHZvaWQgMCkgeyBmcm9tSW5kZXggPSAwOyB9XHJcbiAgICAgICAgdmFyIGxlbiA9IHRvTGVuZ3RoXzIodGFyZ2V0Lmxlbmd0aCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGZyb21JbmRleDsgaSA8IGxlbjsgKytpKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50RWxlbWVudCA9IHRhcmdldFtpXTtcclxuICAgICAgICAgICAgaWYgKHNlYXJjaEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50IHx8XHJcbiAgICAgICAgICAgICAgICAoc2VhcmNoRWxlbWVudCAhPT0gc2VhcmNoRWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gY3VycmVudEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9hcnJheS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9hcnJheS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgZ2xvYmFsT2JqZWN0ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIGdsb2JhbCBzcGVjIGRlZmluZXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgY2FsbGVkICdnbG9iYWwnXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXHJcbiAgICAgICAgLy8gYGdsb2JhbGAgaXMgYWxzbyBkZWZpbmVkIGluIE5vZGVKU1xyXG4gICAgICAgIHJldHVybiBnbG9iYWw7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIHdpbmRvdyBpcyBkZWZpbmVkIGluIGJyb3dzZXJzXHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIHNlbGYgaXMgZGVmaW5lZCBpbiBXZWJXb3JrZXJzXHJcbiAgICAgICAgcmV0dXJuIHNlbGY7XHJcbiAgICB9XHJcbn0pKCk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbE9iamVjdDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9nbG9iYWwuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxucmVxdWlyZShcIi4vU3ltYm9sXCIpO1xyXG52YXIgc3RyaW5nXzEgPSByZXF1aXJlKFwiLi9zdHJpbmdcIik7XHJcbnZhciBzdGF0aWNEb25lID0geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XHJcbi8qKlxyXG4gKiBBIGNsYXNzIHRoYXQgX3NoaW1zXyBhbiBpdGVyYXRvciBpbnRlcmZhY2Ugb24gYXJyYXkgbGlrZSBvYmplY3RzLlxyXG4gKi9cclxudmFyIFNoaW1JdGVyYXRvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFNoaW1JdGVyYXRvcihsaXN0KSB7XHJcbiAgICAgICAgdGhpcy5fbmV4dEluZGV4ID0gLTE7XHJcbiAgICAgICAgaWYgKGlzSXRlcmFibGUobGlzdCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbmF0aXZlSXRlcmF0b3IgPSBsaXN0W1N5bWJvbC5pdGVyYXRvcl0oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3QgPSBsaXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSBuZXh0IGl0ZXJhdGlvbiByZXN1bHQgZm9yIHRoZSBJdGVyYXRvclxyXG4gICAgICovXHJcbiAgICBTaGltSXRlcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX25hdGl2ZUl0ZXJhdG9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9uYXRpdmVJdGVyYXRvci5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fbGlzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGljRG9uZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCsrdGhpcy5fbmV4dEluZGV4IDwgdGhpcy5fbGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2xpc3RbdGhpcy5fbmV4dEluZGV4XVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RhdGljRG9uZTtcclxuICAgIH07XHJcbiAgICBTaGltSXRlcmF0b3IucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFNoaW1JdGVyYXRvcjtcclxufSgpKTtcclxuZXhwb3J0cy5TaGltSXRlcmF0b3IgPSBTaGltSXRlcmF0b3I7XHJcbi8qKlxyXG4gKiBBIHR5cGUgZ3VhcmQgZm9yIGNoZWNraW5nIGlmIHNvbWV0aGluZyBoYXMgYW4gSXRlcmFibGUgaW50ZXJmYWNlXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHlwZSBndWFyZCBhZ2FpbnN0XHJcbiAqL1xyXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XHJcbn1cclxuZXhwb3J0cy5pc0l0ZXJhYmxlID0gaXNJdGVyYWJsZTtcclxuLyoqXHJcbiAqIEEgdHlwZSBndWFyZCBmb3IgY2hlY2tpbmcgaWYgc29tZXRoaW5nIGlzIEFycmF5TGlrZVxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxyXG4gKi9cclxuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJztcclxufVxyXG5leHBvcnRzLmlzQXJyYXlMaWtlID0gaXNBcnJheUxpa2U7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBmb3IgYW4gb2JqZWN0XHJcbiAqXHJcbiAqIEBwYXJhbSBpdGVyYWJsZSBUaGUgaXRlcmFibGUgb2JqZWN0IHRvIHJldHVybiB0aGUgaXRlcmF0b3IgZm9yXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXQoaXRlcmFibGUpIHtcclxuICAgIGlmIChpc0l0ZXJhYmxlKGl0ZXJhYmxlKSkge1xyXG4gICAgICAgIHJldHVybiBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFNoaW1JdGVyYXRvcihpdGVyYWJsZSk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5nZXQgPSBnZXQ7XHJcbi8qKlxyXG4gKiBTaGltcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgZm9yIC4uLiBvZmAgYmxvY2tzXHJcbiAqXHJcbiAqIEBwYXJhbSBpdGVyYWJsZSBUaGUgb2JqZWN0IHRoZSBwcm92aWRlcyBhbiBpbnRlcmF0b3IgaW50ZXJmYWNlXHJcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggaXRlbSBvZiB0aGUgaXRlcmFibGVcclxuICogQHBhcmFtIHRoaXNBcmcgT3B0aW9uYWwgc2NvcGUgdG8gcGFzcyB0aGUgY2FsbGJhY2tcclxuICovXHJcbmZ1bmN0aW9uIGZvck9mKGl0ZXJhYmxlLCBjYWxsYmFjaywgdGhpc0FyZykge1xyXG4gICAgdmFyIGJyb2tlbiA9IGZhbHNlO1xyXG4gICAgZnVuY3Rpb24gZG9CcmVhaygpIHtcclxuICAgICAgICBicm9rZW4gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgLyogV2UgbmVlZCB0byBoYW5kbGUgaXRlcmF0aW9uIG9mIGRvdWJsZSBieXRlIHN0cmluZ3MgcHJvcGVybHkgKi9cclxuICAgIGlmIChpc0FycmF5TGlrZShpdGVyYWJsZSkgJiYgdHlwZW9mIGl0ZXJhYmxlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHZhciBsID0gaXRlcmFibGUubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgKytpKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGFyID0gaXRlcmFibGVbaV07XHJcbiAgICAgICAgICAgIGlmIChpICsgMSA8IGwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgPj0gc3RyaW5nXzEuSElHSF9TVVJST0dBVEVfTUlOICYmIGNvZGUgPD0gc3RyaW5nXzEuSElHSF9TVVJST0dBVEVfTUFYKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhciArPSBpdGVyYWJsZVsrK2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgY2hhciwgaXRlcmFibGUsIGRvQnJlYWspO1xyXG4gICAgICAgICAgICBpZiAoYnJva2VuKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgaXRlcmF0b3IgPSBnZXQoaXRlcmFibGUpO1xyXG4gICAgICAgIGlmIChpdGVyYXRvcikge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xyXG4gICAgICAgICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHJlc3VsdC52YWx1ZSwgaXRlcmFibGUsIGRvQnJlYWspO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJyb2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5leHBvcnRzLmZvck9mID0gZm9yT2Y7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9pdGVyYXRvci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9pdGVyYXRvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgZ2xvYmFsXzEgPSByZXF1aXJlKFwiLi9nbG9iYWxcIik7XHJcbi8qKlxyXG4gKiBUaGUgc21hbGxlc3QgaW50ZXJ2YWwgYmV0d2VlbiB0d28gcmVwcmVzZW50YWJsZSBudW1iZXJzLlxyXG4gKi9cclxuZXhwb3J0cy5FUFNJTE9OID0gMTtcclxuLyoqXHJcbiAqIFRoZSBtYXhpbXVtIHNhZmUgaW50ZWdlciBpbiBKYXZhU2NyaXB0XHJcbiAqL1xyXG5leHBvcnRzLk1BWF9TQUZFX0lOVEVHRVIgPSBNYXRoLnBvdygyLCA1MykgLSAxO1xyXG4vKipcclxuICogVGhlIG1pbmltdW0gc2FmZSBpbnRlZ2VyIGluIEphdmFTY3JpcHRcclxuICovXHJcbmV4cG9ydHMuTUlOX1NBRkVfSU5URUdFUiA9IC1leHBvcnRzLk1BWF9TQUZFX0lOVEVHRVI7XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBOYU4gd2l0aG91dCBjb2Vyc2lvbi5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XHJcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgTmFOLCBmYWxzZSBpZiBpdCBpcyBub3RcclxuICovXHJcbmZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBnbG9iYWxfMS5kZWZhdWx0LmlzTmFOKHZhbHVlKTtcclxufVxyXG5leHBvcnRzLmlzTmFOID0gaXNOYU47XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhIGZpbml0ZSBudW1iZXIgd2l0aG91dCBjb2Vyc2lvbi5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XHJcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgZmluaXRlLCBmYWxzZSBpZiBpdCBpcyBub3RcclxuICovXHJcbmZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBnbG9iYWxfMS5kZWZhdWx0LmlzRmluaXRlKHZhbHVlKTtcclxufVxyXG5leHBvcnRzLmlzRmluaXRlID0gaXNGaW5pdGU7XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcclxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLCBmYWxzZSBpZiBpdCBpcyBub3RcclxuICovXHJcbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XHJcbn1cclxuZXhwb3J0cy5pc0ludGVnZXIgPSBpc0ludGVnZXI7XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyIHRoYXQgaXMgJ3NhZmUsJyBtZWFuaW5nOlxyXG4gKiAgIDEuIGl0IGNhbiBiZSBleHByZXNzZWQgYXMgYW4gSUVFRS03NTQgZG91YmxlIHByZWNpc2lvbiBudW1iZXJcclxuICogICAyLiBpdCBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgdG8gYSBtYXRoZW1hdGljYWwgaW50ZWdlciwgbWVhbmluZyBpdHNcclxuICogICAgICBJRUVFLTc1NCByZXByZXNlbnRhdGlvbiBjYW5ub3QgYmUgdGhlIHJlc3VsdCBvZiByb3VuZGluZyBhbnkgb3RoZXJcclxuICogICAgICBpbnRlZ2VyIHRvIGZpdCB0aGUgSUVFRS03NTQgcmVwcmVzZW50YXRpb25cclxuICpcclxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XHJcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XHJcbiAqL1xyXG5mdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gaXNJbnRlZ2VyKHZhbHVlKSAmJiBNYXRoLmFicyh2YWx1ZSkgPD0gZXhwb3J0cy5NQVhfU0FGRV9JTlRFR0VSO1xyXG59XHJcbmV4cG9ydHMuaXNTYWZlSW50ZWdlciA9IGlzU2FmZUludGVnZXI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9udW1iZXIuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vbnVtYmVyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBnbG9iYWxfMSA9IHJlcXVpcmUoXCIuL2dsb2JhbFwiKTtcclxudmFyIGhhc18xID0gcmVxdWlyZShcIi4vc3VwcG9ydC9oYXNcIik7XHJcbnZhciBTeW1ib2xfMSA9IHJlcXVpcmUoXCIuL1N5bWJvbFwiKTtcclxuaWYgKGhhc18xLmRlZmF1bHQoJ2VzNi1vYmplY3QnKSkge1xyXG4gICAgdmFyIGdsb2JhbE9iamVjdCA9IGdsb2JhbF8xLmRlZmF1bHQuT2JqZWN0O1xyXG4gICAgZXhwb3J0cy5hc3NpZ24gPSBnbG9iYWxPYmplY3QuYXNzaWduO1xyXG4gICAgZXhwb3J0cy5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xyXG4gICAgZXhwb3J0cy5nZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XHJcbiAgICBleHBvcnRzLmdldE93blByb3BlcnR5U3ltYm9scyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XHJcbiAgICBleHBvcnRzLmlzID0gZ2xvYmFsT2JqZWN0LmlzO1xyXG4gICAgZXhwb3J0cy5rZXlzID0gZ2xvYmFsT2JqZWN0LmtleXM7XHJcbn1cclxuZWxzZSB7XHJcbiAgICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbiBzeW1ib2xBd2FyZUtleXMobykge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gIUJvb2xlYW4oa2V5Lm1hdGNoKC9eQEAuKy8pKTsgfSk7XHJcbiAgICB9O1xyXG4gICAgZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIHNvdXJjZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBzb3VyY2VzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gVHlwZUVycm9yIGlmIHVuZGVmaW5lZCBvciBudWxsXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdG8gPSBPYmplY3QodGFyZ2V0KTtcclxuICAgICAgICBzb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKG5leHRTb3VyY2UpIHtcclxuICAgICAgICAgICAgaWYgKG5leHRTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciBpZiB1bmRlZmluZWQgb3IgbnVsbFxyXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5rZXlzKG5leHRTb3VyY2UpLmZvckVhY2goZnVuY3Rpb24gKG5leHRLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0bztcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBwcm9wKSB7XHJcbiAgICAgICAgaWYgKFN5bWJvbF8xLmlzU3ltYm9sKHByb3ApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGV4cG9ydHMuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMobykge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gIUJvb2xlYW4oa2V5Lm1hdGNoKC9eQEAuKy8pKTsgfSk7XHJcbiAgICB9O1xyXG4gICAgZXhwb3J0cy5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMobykge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKVxyXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIEJvb2xlYW4oa2V5Lm1hdGNoKC9eQEAuKy8pKTsgfSlcclxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBTeW1ib2wuZm9yKGtleS5zdWJzdHJpbmcoMikpOyB9KTtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmlzID0gZnVuY3Rpb24gaXModmFsdWUxLCB2YWx1ZTIpIHtcclxuICAgICAgICBpZiAodmFsdWUxID09PSB2YWx1ZTIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlMSAhPT0gMCB8fCAxIC8gdmFsdWUxID09PSAxIC8gdmFsdWUyOyAvLyAtMFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWUxICE9PSB2YWx1ZTEgJiYgdmFsdWUyICE9PSB2YWx1ZTI7IC8vIE5hTlxyXG4gICAgfTtcclxufVxyXG5pZiAoaGFzXzEuZGVmYXVsdCgnZXMyMDE3LW9iamVjdCcpKSB7XHJcbiAgICB2YXIgZ2xvYmFsT2JqZWN0ID0gZ2xvYmFsXzEuZGVmYXVsdC5PYmplY3Q7XHJcbiAgICBleHBvcnRzLmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcclxuICAgIGV4cG9ydHMuZW50cmllcyA9IGdsb2JhbE9iamVjdC5lbnRyaWVzO1xyXG4gICAgZXhwb3J0cy52YWx1ZXMgPSBnbG9iYWxPYmplY3QudmFsdWVzO1xyXG59XHJcbmVsc2Uge1xyXG4gICAgZXhwb3J0cy5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzLCBrZXkpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNba2V5XSA9IGV4cG9ydHMuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIGtleSk7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICB9O1xyXG4gICAgZXhwb3J0cy5lbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMua2V5cyhvKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gW2tleSwgb1trZXldXTsgfSk7XHJcbiAgICB9O1xyXG4gICAgZXhwb3J0cy52YWx1ZXMgPSBmdW5jdGlvbiB2YWx1ZXMobykge1xyXG4gICAgICAgIHJldHVybiBleHBvcnRzLmtleXMobykubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIG9ba2V5XTsgfSk7XHJcbiAgICB9O1xyXG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vb2JqZWN0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgZ2xvYmFsXzEgPSByZXF1aXJlKFwiLi9nbG9iYWxcIik7XHJcbnZhciBoYXNfMSA9IHJlcXVpcmUoXCIuL3N1cHBvcnQvaGFzXCIpO1xyXG52YXIgdXRpbF8xID0gcmVxdWlyZShcIi4vc3VwcG9ydC91dGlsXCIpO1xyXG4vKipcclxuICogVGhlIG1pbmltdW0gbG9jYXRpb24gb2YgaGlnaCBzdXJyb2dhdGVzXHJcbiAqL1xyXG5leHBvcnRzLkhJR0hfU1VSUk9HQVRFX01JTiA9IDB4ZDgwMDtcclxuLyoqXHJcbiAqIFRoZSBtYXhpbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xyXG4gKi9cclxuZXhwb3J0cy5ISUdIX1NVUlJPR0FURV9NQVggPSAweGRiZmY7XHJcbi8qKlxyXG4gKiBUaGUgbWluaW11bSBsb2NhdGlvbiBvZiBsb3cgc3Vycm9nYXRlc1xyXG4gKi9cclxuZXhwb3J0cy5MT1dfU1VSUk9HQVRFX01JTiA9IDB4ZGMwMDtcclxuLyoqXHJcbiAqIFRoZSBtYXhpbXVtIGxvY2F0aW9uIG9mIGxvdyBzdXJyb2dhdGVzXHJcbiAqL1xyXG5leHBvcnRzLkxPV19TVVJST0dBVEVfTUFYID0gMHhkZmZmO1xyXG5pZiAoaGFzXzEuZGVmYXVsdCgnZXM2LXN0cmluZycpICYmIGhhc18xLmRlZmF1bHQoJ2VzNi1zdHJpbmctcmF3JykpIHtcclxuICAgIGV4cG9ydHMuZnJvbUNvZGVQb2ludCA9IGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nLmZyb21Db2RlUG9pbnQ7XHJcbiAgICBleHBvcnRzLnJhdyA9IGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nLnJhdztcclxuICAgIGV4cG9ydHMuY29kZVBvaW50QXQgPSB1dGlsXzEud3JhcE5hdGl2ZShnbG9iYWxfMS5kZWZhdWx0LlN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQpO1xyXG4gICAgZXhwb3J0cy5lbmRzV2l0aCA9IHV0aWxfMS53cmFwTmF0aXZlKGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aCk7XHJcbiAgICBleHBvcnRzLmluY2x1ZGVzID0gdXRpbF8xLndyYXBOYXRpdmUoZ2xvYmFsXzEuZGVmYXVsdC5TdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKTtcclxuICAgIGV4cG9ydHMubm9ybWFsaXplID0gdXRpbF8xLndyYXBOYXRpdmUoZ2xvYmFsXzEuZGVmYXVsdC5TdHJpbmcucHJvdG90eXBlLm5vcm1hbGl6ZSk7XHJcbiAgICBleHBvcnRzLnJlcGVhdCA9IHV0aWxfMS53cmFwTmF0aXZlKGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nLnByb3RvdHlwZS5yZXBlYXQpO1xyXG4gICAgZXhwb3J0cy5zdGFydHNXaXRoID0gdXRpbF8xLndyYXBOYXRpdmUoZ2xvYmFsXzEuZGVmYXVsdC5TdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgpO1xyXG59XHJcbmVsc2Uge1xyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZXMgdGhhdCB0ZXh0IGlzIGRlZmluZWQsIGFuZCBub3JtYWxpemVzIHBvc2l0aW9uIChiYXNlZCBvbiB0aGUgZ2l2ZW4gZGVmYXVsdCBpZiB0aGUgaW5wdXQgaXMgTmFOKS5cclxuICAgICAqIFVzZWQgYnkgc3RhcnRzV2l0aCwgaW5jbHVkZXMsIGFuZCBlbmRzV2l0aC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIE5vcm1hbGl6ZWQgcG9zaXRpb24uXHJcbiAgICAgKi9cclxuICAgIHZhciBub3JtYWxpemVTdWJzdHJpbmdBcmdzXzEgPSBmdW5jdGlvbiAobmFtZSwgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbiwgaXNFbmQpIHtcclxuICAgICAgICBpZiAoaXNFbmQgPT09IHZvaWQgMCkgeyBpc0VuZCA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcuJyArIG5hbWUgKyAnIHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nIHRvIHNlYXJjaCBhZ2FpbnN0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAhPT0gcG9zaXRpb24gPyAoaXNFbmQgPyBsZW5ndGggOiAwKSA6IHBvc2l0aW9uO1xyXG4gICAgICAgIHJldHVybiBbdGV4dCwgU3RyaW5nKHNlYXJjaCksIE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLCAwKSwgbGVuZ3RoKV07XHJcbiAgICB9O1xyXG4gICAgZXhwb3J0cy5mcm9tQ29kZVBvaW50ID0gZnVuY3Rpb24gZnJvbUNvZGVQb2ludCgpIHtcclxuICAgICAgICB2YXIgY29kZVBvaW50cyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGNvZGVQb2ludHNbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5mcm9tQ29kZVBvaW50XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcclxuICAgICAgICB2YXIgTUFYX1NJWkUgPSAweDQwMDA7XHJcbiAgICAgICAgdmFyIGNvZGVVbml0cyA9IFtdO1xyXG4gICAgICAgIHZhciBpbmRleCA9IC0xO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcclxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pO1xyXG4gICAgICAgICAgICAvLyBDb2RlIHBvaW50cyBtdXN0IGJlIGZpbml0ZSBpbnRlZ2VycyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlXHJcbiAgICAgICAgICAgIHZhciBpc1ZhbGlkID0gaXNGaW5pdGUoY29kZVBvaW50KSAmJiBNYXRoLmZsb29yKGNvZGVQb2ludCkgPT09IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPj0gMCAmJiBjb2RlUG9pbnQgPD0gMHgxMGZmZmY7XHJcbiAgICAgICAgICAgIGlmICghaXNWYWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcignc3RyaW5nLmZyb21Db2RlUG9pbnQ6IEludmFsaWQgY29kZSBwb2ludCAnICsgY29kZVBvaW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29kZVBvaW50IDw9IDB4ZmZmZikge1xyXG4gICAgICAgICAgICAgICAgLy8gQk1QIGNvZGUgcG9pbnRcclxuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW4gc3Vycm9nYXRlIGhhbHZlc1xyXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXHJcbiAgICAgICAgICAgICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMDtcclxuICAgICAgICAgICAgICAgIHZhciBoaWdoU3Vycm9nYXRlID0gKGNvZGVQb2ludCA+PiAxMCkgKyBleHBvcnRzLkhJR0hfU1VSUk9HQVRFX01JTjtcclxuICAgICAgICAgICAgICAgIHZhciBsb3dTdXJyb2dhdGUgPSBjb2RlUG9pbnQgJSAweDQwMCArIGV4cG9ydHMuTE9XX1NVUlJPR0FURV9NSU47XHJcbiAgICAgICAgICAgICAgICBjb2RlVW5pdHMucHVzaChoaWdoU3Vycm9nYXRlLCBsb3dTdXJyb2dhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbmRleCArIDEgPT09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY29kZVVuaXRzKTtcclxuICAgICAgICAgICAgICAgIGNvZGVVbml0cy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgZXhwb3J0cy5yYXcgPSBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcclxuICAgICAgICB2YXIgc3Vic3RpdHV0aW9ucyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbnNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByYXdTdHJpbmdzID0gY2FsbFNpdGUucmF3O1xyXG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcclxuICAgICAgICB2YXIgbnVtU3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIGlmIChjYWxsU2l0ZSA9PSBudWxsIHx8IGNhbGxTaXRlLnJhdyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yYXcgcmVxdWlyZXMgYSB2YWxpZCBjYWxsU2l0ZSBvYmplY3Qgd2l0aCBhIHJhdyB2YWx1ZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoXzEgPSByYXdTdHJpbmdzLmxlbmd0aDsgaSA8IGxlbmd0aF8xOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IHJhd1N0cmluZ3NbaV0gKyAoaSA8IG51bVN1YnN0aXR1dGlvbnMgJiYgaSA8IGxlbmd0aF8xIC0gMSA/IHN1YnN0aXR1dGlvbnNbaV0gOiAnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gICAgZXhwb3J0cy5jb2RlUG9pbnRBdCA9IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHRleHQsIHBvc2l0aW9uKSB7XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSB2b2lkIDApIHsgcG9zaXRpb24gPSAwOyB9XHJcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRcclxuICAgICAgICBpZiAodGV4dCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5jb2RlUG9pbnRBdCByZXF1cmllcyBhIHZhbGlkIHN0cmluZy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRleHQubGVuZ3RoO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiAhPT0gcG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IGxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBHZXQgdGhlIGZpcnN0IGNvZGUgdW5pdFxyXG4gICAgICAgIHZhciBmaXJzdCA9IHRleHQuY2hhckNvZGVBdChwb3NpdGlvbik7XHJcbiAgICAgICAgaWYgKGZpcnN0ID49IGV4cG9ydHMuSElHSF9TVVJST0dBVEVfTUlOICYmIGZpcnN0IDw9IGV4cG9ydHMuSElHSF9TVVJST0dBVEVfTUFYICYmIGxlbmd0aCA+IHBvc2l0aW9uICsgMSkge1xyXG4gICAgICAgICAgICAvLyBTdGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyIChoaWdoIHN1cnJvZ2F0ZSBhbmQgdGhlcmUgaXMgYSBuZXh0IGNvZGUgdW5pdCk7IGNoZWNrIGZvciBsb3cgc3Vycm9nYXRlXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxyXG4gICAgICAgICAgICB2YXIgc2Vjb25kID0gdGV4dC5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gZXhwb3J0cy5MT1dfU1VSUk9HQVRFX01JTiAmJiBzZWNvbmQgPD0gZXhwb3J0cy5MT1dfU1VSUk9HQVRFX01BWCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChmaXJzdCAtIGV4cG9ydHMuSElHSF9TVVJST0dBVEVfTUlOKSAqIDB4NDAwICsgc2Vjb25kIC0gZXhwb3J0cy5MT1dfU1VSUk9HQVRFX01JTiArIDB4MTAwMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpcnN0O1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMuZW5kc1dpdGggPSBmdW5jdGlvbiBlbmRzV2l0aCh0ZXh0LCBzZWFyY2gsIGVuZFBvc2l0aW9uKSB7XHJcbiAgICAgICAgaWYgKGVuZFBvc2l0aW9uID09IG51bGwpIHtcclxuICAgICAgICAgICAgZW5kUG9zaXRpb24gPSB0ZXh0Lmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgX2EgPSB0c2xpYl8xLl9fcmVhZChub3JtYWxpemVTdWJzdHJpbmdBcmdzXzEoJ2VuZHNXaXRoJywgdGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbiwgdHJ1ZSksIDMpLCB0ZXh0ID0gX2FbMF0sIHNlYXJjaCA9IF9hWzFdLCBlbmRQb3NpdGlvbiA9IF9hWzJdO1xyXG4gICAgICAgIHZhciBzdGFydCA9IGVuZFBvc2l0aW9uIC0gc2VhcmNoLmxlbmd0aDtcclxuICAgICAgICBpZiAoc3RhcnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2Uoc3RhcnQsIGVuZFBvc2l0aW9uKSA9PT0gc2VhcmNoO1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXModGV4dCwgc2VhcmNoLCBwb3NpdGlvbikge1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gdm9pZCAwKSB7IHBvc2l0aW9uID0gMDsgfVxyXG4gICAgICAgIF9hID0gdHNsaWJfMS5fX3JlYWQobm9ybWFsaXplU3Vic3RyaW5nQXJnc18xKCdpbmNsdWRlcycsIHRleHQsIHNlYXJjaCwgcG9zaXRpb24pLCAzKSwgdGV4dCA9IF9hWzBdLCBzZWFyY2ggPSBfYVsxXSwgcG9zaXRpb24gPSBfYVsyXTtcclxuICAgICAgICByZXR1cm4gdGV4dC5pbmRleE9mKHNlYXJjaCwgcG9zaXRpb24pICE9PSAtMTtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICB9O1xyXG4gICAgZXhwb3J0cy5yZXBlYXQgPSBmdW5jdGlvbiByZXBlYXQodGV4dCwgY291bnQpIHtcclxuICAgICAgICBpZiAoY291bnQgPT09IHZvaWQgMCkgeyBjb3VudCA9IDA7IH1cclxuICAgICAgICAvLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcclxuICAgICAgICBpZiAodGV4dCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb3VudCAhPT0gY291bnQpIHtcclxuICAgICAgICAgICAgY291bnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY291bnQgPCAwIHx8IGNvdW50ID09PSBJbmZpbml0eSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcclxuICAgICAgICB3aGlsZSAoY291bnQpIHtcclxuICAgICAgICAgICAgaWYgKGNvdW50ICUgMikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvdW50ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgdGV4dCArPSB0ZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvdW50ID4+PSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMuc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIHN0YXJ0c1dpdGgodGV4dCwgc2VhcmNoLCBwb3NpdGlvbikge1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gdm9pZCAwKSB7IHBvc2l0aW9uID0gMDsgfVxyXG4gICAgICAgIHNlYXJjaCA9IFN0cmluZyhzZWFyY2gpO1xyXG4gICAgICAgIF9hID0gdHNsaWJfMS5fX3JlYWQobm9ybWFsaXplU3Vic3RyaW5nQXJnc18xKCdzdGFydHNXaXRoJywgdGV4dCwgc2VhcmNoLCBwb3NpdGlvbiksIDMpLCB0ZXh0ID0gX2FbMF0sIHNlYXJjaCA9IF9hWzFdLCBwb3NpdGlvbiA9IF9hWzJdO1xyXG4gICAgICAgIHZhciBlbmQgPSBwb3NpdGlvbiArIHNlYXJjaC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGVuZCA+IHRleHQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UocG9zaXRpb24sIGVuZCkgPT09IHNlYXJjaDtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICB9O1xyXG59XHJcbmlmIChoYXNfMS5kZWZhdWx0KCdlczIwMTctc3RyaW5nJykpIHtcclxuICAgIGV4cG9ydHMucGFkRW5kID0gdXRpbF8xLndyYXBOYXRpdmUoZ2xvYmFsXzEuZGVmYXVsdC5TdHJpbmcucHJvdG90eXBlLnBhZEVuZCk7XHJcbiAgICBleHBvcnRzLnBhZFN0YXJ0ID0gdXRpbF8xLndyYXBOYXRpdmUoZ2xvYmFsXzEuZGVmYXVsdC5TdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KTtcclxufVxyXG5lbHNlIHtcclxuICAgIGV4cG9ydHMucGFkRW5kID0gZnVuY3Rpb24gcGFkRW5kKHRleHQsIG1heExlbmd0aCwgZmlsbFN0cmluZykge1xyXG4gICAgICAgIGlmIChmaWxsU3RyaW5nID09PSB2b2lkIDApIHsgZmlsbFN0cmluZyA9ICcgJzsgfVxyXG4gICAgICAgIGlmICh0ZXh0ID09PSBudWxsIHx8IHRleHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSBJbmZpbml0eSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3RyaW5nLnBhZEVuZCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IG51bGwgfHwgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbWF4TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgICAgICBtYXhMZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc3RyVGV4dCA9IFN0cmluZyh0ZXh0KTtcclxuICAgICAgICB2YXIgcGFkZGluZyA9IG1heExlbmd0aCAtIHN0clRleHQubGVuZ3RoO1xyXG4gICAgICAgIGlmIChwYWRkaW5nID4gMCkge1xyXG4gICAgICAgICAgICBzdHJUZXh0ICs9XHJcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsU3RyaW5nLnNsaWNlKDAsIHBhZGRpbmcgJSBmaWxsU3RyaW5nLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHJUZXh0O1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMucGFkU3RhcnQgPSBmdW5jdGlvbiBwYWRTdGFydCh0ZXh0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcpIHtcclxuICAgICAgICBpZiAoZmlsbFN0cmluZyA9PT0gdm9pZCAwKSB7IGZpbGxTdHJpbmcgPSAnICc7IH1cclxuICAgICAgICBpZiAodGV4dCA9PT0gbnVsbCB8fCB0ZXh0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIHZhbGlkIHN0cmluZy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5wYWRTdGFydCByZXF1aXJlcyBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgY291bnQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IG51bGwgfHwgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbWF4TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgICAgICBtYXhMZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc3RyVGV4dCA9IFN0cmluZyh0ZXh0KTtcclxuICAgICAgICB2YXIgcGFkZGluZyA9IG1heExlbmd0aCAtIHN0clRleHQubGVuZ3RoO1xyXG4gICAgICAgIGlmIChwYWRkaW5nID4gMCkge1xyXG4gICAgICAgICAgICBzdHJUZXh0ID1cclxuICAgICAgICAgICAgICAgIGV4cG9ydHMucmVwZWF0KGZpbGxTdHJpbmcsIE1hdGguZmxvb3IocGFkZGluZyAvIGZpbGxTdHJpbmcubGVuZ3RoKSkgK1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHJpbmcuc2xpY2UoMCwgcGFkZGluZyAlIGZpbGxTdHJpbmcubGVuZ3RoKSArXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyVGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0clRleHQ7XHJcbiAgICB9O1xyXG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdHJpbmcuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3RyaW5nLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgaGFzXzEgPSByZXF1aXJlKFwiQGRvam8vaGFzL2hhc1wiKTtcclxudmFyIGdsb2JhbF8xID0gcmVxdWlyZShcIi4uL2dsb2JhbFwiKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gaGFzXzEuZGVmYXVsdDtcclxudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIkBkb2pvL2hhcy9oYXNcIiksIGV4cG9ydHMpO1xyXG4vKiBFQ01BU2NyaXB0IDYgYW5kIDcgRmVhdHVyZXMgKi9cclxuLyogQXJyYXkgKi9cclxuaGFzXzEuYWRkKCdlczYtYXJyYXknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gKFsnZnJvbScsICdvZiddLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiBnbG9iYWxfMS5kZWZhdWx0LkFycmF5OyB9KSAmJlxyXG4gICAgICAgIFsnZmluZEluZGV4JywgJ2ZpbmQnLCAnY29weVdpdGhpbiddLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiBnbG9iYWxfMS5kZWZhdWx0LkFycmF5LnByb3RvdHlwZTsgfSkpO1xyXG59LCB0cnVlKTtcclxuaGFzXzEuYWRkKCdlczYtYXJyYXktZmlsbCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICgnZmlsbCcgaW4gZ2xvYmFsXzEuZGVmYXVsdC5BcnJheS5wcm90b3R5cGUpIHtcclxuICAgICAgICAvKiBTb21lIHZlcnNpb25zIG9mIFNhZmFyaSBkbyBub3QgcHJvcGVybHkgaW1wbGVtZW50IHRoaXMgKi9cclxuICAgICAgICByZXR1cm4gWzFdLmZpbGwoOSwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKVswXSA9PT0gMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbmhhc18xLmFkZCgnZXM3LWFycmF5JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJ2luY2x1ZGVzJyBpbiBnbG9iYWxfMS5kZWZhdWx0LkFycmF5LnByb3RvdHlwZTsgfSwgdHJ1ZSk7XHJcbi8qIE1hcCAqL1xyXG5oYXNfMS5hZGQoJ2VzNi1tYXAnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodHlwZW9mIGdsb2JhbF8xLmRlZmF1bHQuTWFwID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgLypcclxuICAgIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgTWFwIGZ1bmN0aW9uYWxpdHlcclxuICAgIFdlIHdyYXAgdGhpcyBpbiBhIHRyeS9jYXRjaCBiZWNhdXNlIHNvbWV0aW1lcyB0aGUgTWFwIGNvbnN0cnVjdG9yIGV4aXN0cywgYnV0IGRvZXMgbm90XHJcbiAgICB0YWtlIGFyZ3VtZW50cyAoaU9TIDguNClcclxuICAgICAqL1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBtYXAgPSBuZXcgZ2xvYmFsXzEuZGVmYXVsdC5NYXAoW1swLCAxXV0pO1xyXG4gICAgICAgICAgICByZXR1cm4gKG1hcC5oYXMoMCkgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXAua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgaGFzXzEuZGVmYXVsdCgnZXM2LXN5bWJvbCcpICYmXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWFwLnZhbHVlcyA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hcC5lbnRyaWVzID09PSAnZnVuY3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IG5vdCB0ZXN0aW5nIG9uIGlPUyBhdCB0aGUgbW9tZW50ICovXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG4vKiBNYXRoICovXHJcbmhhc18xLmFkZCgnZXM2LW1hdGgnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgICdjbHozMicsXHJcbiAgICAgICAgJ3NpZ24nLFxyXG4gICAgICAgICdsb2cxMCcsXHJcbiAgICAgICAgJ2xvZzInLFxyXG4gICAgICAgICdsb2cxcCcsXHJcbiAgICAgICAgJ2V4cG0xJyxcclxuICAgICAgICAnY29zaCcsXHJcbiAgICAgICAgJ3NpbmgnLFxyXG4gICAgICAgICd0YW5oJyxcclxuICAgICAgICAnYWNvc2gnLFxyXG4gICAgICAgICdhc2luaCcsXHJcbiAgICAgICAgJ2F0YW5oJyxcclxuICAgICAgICAndHJ1bmMnLFxyXG4gICAgICAgICdmcm91bmQnLFxyXG4gICAgICAgICdjYnJ0JyxcclxuICAgICAgICAnaHlwb3QnXHJcbiAgICBdLmV2ZXJ5KGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5NYXRoW25hbWVdID09PSAnZnVuY3Rpb24nOyB9KTtcclxufSwgdHJ1ZSk7XHJcbmhhc18xLmFkZCgnZXM2LW1hdGgtaW11bCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICgnaW11bCcgaW4gZ2xvYmFsXzEuZGVmYXVsdC5NYXRoKSB7XHJcbiAgICAgICAgLyogU29tZSB2ZXJzaW9ucyBvZiBTYWZhcmkgb24gaW9zIGRvIG5vdCBwcm9wZXJseSBpbXBsZW1lbnQgdGhpcyAqL1xyXG4gICAgICAgIHJldHVybiBNYXRoLmltdWwoMHhmZmZmZmZmZiwgNSkgPT09IC01O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuLyogT2JqZWN0ICovXHJcbmhhc18xLmFkZCgnZXM2LW9iamVjdCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAoaGFzXzEuZGVmYXVsdCgnZXM2LXN5bWJvbCcpICYmXHJcbiAgICAgICAgWydhc3NpZ24nLCAnaXMnLCAnZ2V0T3duUHJvcGVydHlTeW1ib2xzJywgJ3NldFByb3RvdHlwZU9mJ10uZXZlcnkoZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIHR5cGVvZiBnbG9iYWxfMS5kZWZhdWx0Lk9iamVjdFtuYW1lXSA9PT0gJ2Z1bmN0aW9uJzsgfSkpO1xyXG59LCB0cnVlKTtcclxuaGFzXzEuYWRkKCdlczIwMTctb2JqZWN0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIFsndmFsdWVzJywgJ2VudHJpZXMnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyddLmV2ZXJ5KGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5PYmplY3RbbmFtZV0gPT09ICdmdW5jdGlvbic7IH0pO1xyXG59LCB0cnVlKTtcclxuLyogT2JzZXJ2YWJsZSAqL1xyXG5oYXNfMS5hZGQoJ2VzLW9ic2VydmFibGUnLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5PYnNlcnZhYmxlICE9PSAndW5kZWZpbmVkJzsgfSwgdHJ1ZSk7XHJcbi8qIFByb21pc2UgKi9cclxuaGFzXzEuYWRkKCdlczYtcHJvbWlzZScsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVvZiBnbG9iYWxfMS5kZWZhdWx0LlByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIGhhc18xLmRlZmF1bHQoJ2VzNi1zeW1ib2wnKTsgfSwgdHJ1ZSk7XHJcbi8qIFNldCAqL1xyXG5oYXNfMS5hZGQoJ2VzNi1zZXQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodHlwZW9mIGdsb2JhbF8xLmRlZmF1bHQuU2V0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgLyogSUUxMSBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIGFyZSBtaXNzaW5nIGNyaXRpY2FsIEVTNiBTZXQgZnVuY3Rpb25hbGl0eSAqL1xyXG4gICAgICAgIHZhciBzZXQgPSBuZXcgZ2xvYmFsXzEuZGVmYXVsdC5TZXQoWzFdKTtcclxuICAgICAgICByZXR1cm4gc2V0LmhhcygxKSAmJiAna2V5cycgaW4gc2V0ICYmIHR5cGVvZiBzZXQua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBoYXNfMS5kZWZhdWx0KCdlczYtc3ltYm9sJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG4vKiBTdHJpbmcgKi9cclxuaGFzXzEuYWRkKCdlczYtc3RyaW5nJywgZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIChbXHJcbiAgICAgICAgLyogc3RhdGljIG1ldGhvZHMgKi9cclxuICAgICAgICAnZnJvbUNvZGVQb2ludCdcclxuICAgIF0uZXZlcnkoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gdHlwZW9mIGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nW2tleV0gPT09ICdmdW5jdGlvbic7IH0pICYmXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgICAvKiBpbnN0YW5jZSBtZXRob2RzICovXHJcbiAgICAgICAgICAgICdjb2RlUG9pbnRBdCcsXHJcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxyXG4gICAgICAgICAgICAncmVwZWF0JyxcclxuICAgICAgICAgICAgJ3N0YXJ0c1dpdGgnLFxyXG4gICAgICAgICAgICAnZW5kc1dpdGgnLFxyXG4gICAgICAgICAgICAnaW5jbHVkZXMnXHJcbiAgICAgICAgXS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5TdHJpbmcucHJvdG90eXBlW2tleV0gPT09ICdmdW5jdGlvbic7IH0pKTtcclxufSwgdHJ1ZSk7XHJcbmhhc18xLmFkZCgnZXM2LXN0cmluZy1yYXcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBnZXRDYWxsU2l0ZShjYWxsU2l0ZSkge1xyXG4gICAgICAgIHZhciBzdWJzdGl0dXRpb25zID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgc3Vic3RpdHV0aW9uc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRzbGliXzEuX19zcHJlYWQoY2FsbFNpdGUpO1xyXG4gICAgICAgIHJlc3VsdC5yYXcgPSBjYWxsU2l0ZS5yYXc7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGlmICgncmF3JyBpbiBnbG9iYWxfMS5kZWZhdWx0LlN0cmluZykge1xyXG4gICAgICAgIHZhciBiID0gMTtcclxuICAgICAgICB2YXIgY2FsbFNpdGUgPSBnZXRDYWxsU2l0ZSh0ZW1wbGF0ZU9iamVjdF8xIHx8ICh0ZW1wbGF0ZU9iamVjdF8xID0gdHNsaWJfMS5fX21ha2VUZW1wbGF0ZU9iamVjdChbXCJhXFxuXCIsIFwiXCJdLCBbXCJhXFxcXG5cIiwgXCJcIl0pKSwgYik7XHJcbiAgICAgICAgY2FsbFNpdGUucmF3ID0gWydhXFxcXG4nXTtcclxuICAgICAgICB2YXIgc3VwcG9ydHNUcnVuYyA9IGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nLnJhdyhjYWxsU2l0ZSwgNDIpID09PSAnYTpcXFxcbic7XHJcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzVHJ1bmM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG5oYXNfMS5hZGQoJ2VzMjAxNy1zdHJpbmcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gWydwYWRTdGFydCcsICdwYWRFbmQnXS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5TdHJpbmcucHJvdG90eXBlW2tleV0gPT09ICdmdW5jdGlvbic7IH0pO1xyXG59LCB0cnVlKTtcclxuLyogU3ltYm9sICovXHJcbmhhc18xLmFkZCgnZXM2LXN5bWJvbCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVvZiBnbG9iYWxfMS5kZWZhdWx0LlN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbCgpID09PSAnc3ltYm9sJzsgfSwgdHJ1ZSk7XHJcbi8qIFdlYWtNYXAgKi9cclxuaGFzXzEuYWRkKCdlczYtd2Vha21hcCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5XZWFrTWFwICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgTWFwIGZ1bmN0aW9uYWxpdHkgKi9cclxuICAgICAgICB2YXIga2V5MSA9IHt9O1xyXG4gICAgICAgIHZhciBrZXkyID0ge307XHJcbiAgICAgICAgdmFyIG1hcCA9IG5ldyBnbG9iYWxfMS5kZWZhdWx0LldlYWtNYXAoW1trZXkxLCAxXV0pO1xyXG4gICAgICAgIE9iamVjdC5mcmVlemUoa2V5MSk7XHJcbiAgICAgICAgcmV0dXJuIG1hcC5nZXQoa2V5MSkgPT09IDEgJiYgbWFwLnNldChrZXkyLCAyKSA9PT0gbWFwICYmIGhhc18xLmRlZmF1bHQoJ2VzNi1zeW1ib2wnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbi8qIE1pc2NlbGxhbmVvdXMgZmVhdHVyZXMgKi9cclxuaGFzXzEuYWRkKCdtaWNyb3Rhc2tzJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gaGFzXzEuZGVmYXVsdCgnZXM2LXByb21pc2UnKSB8fCBoYXNfMS5kZWZhdWx0KCdob3N0LW5vZGUnKSB8fCBoYXNfMS5kZWZhdWx0KCdkb20tbXV0YXRpb25vYnNlcnZlcicpOyB9LCB0cnVlKTtcclxuaGFzXzEuYWRkKCdwb3N0bWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIElmIHdpbmRvdyBpcyB1bmRlZmluZWQsIGFuZCB3ZSBoYXZlIHBvc3RNZXNzYWdlLCBpdCBwcm9iYWJseSBtZWFucyB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIuIFdlYiB3b3JrZXJzIGhhdmVcclxuICAgIC8vIHBvc3QgbWVzc2FnZSBidXQgaXQgZG9lc24ndCB3b3JrIGhvdyB3ZSBleHBlY3QgaXQgdG8sIHNvIGl0J3MgYmVzdCBqdXN0IHRvIHByZXRlbmQgaXQgZG9lc24ndCBleGlzdC5cclxuICAgIHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC53aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBnbG9iYWxfMS5kZWZhdWx0LnBvc3RNZXNzYWdlID09PSAnZnVuY3Rpb24nO1xyXG59LCB0cnVlKTtcclxuaGFzXzEuYWRkKCdyYWYnLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbic7IH0sIHRydWUpO1xyXG5oYXNfMS5hZGQoJ3NldGltbWVkaWF0ZScsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVvZiBnbG9iYWxfMS5kZWZhdWx0LnNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCc7IH0sIHRydWUpO1xyXG4vKiBET00gRmVhdHVyZXMgKi9cclxuaGFzXzEuYWRkKCdkb20tbXV0YXRpb25vYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChoYXNfMS5kZWZhdWx0KCdob3N0LWJyb3dzZXInKSAmJiBCb29sZWFuKGdsb2JhbF8xLmRlZmF1bHQuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWxfMS5kZWZhdWx0LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpKSB7XHJcbiAgICAgICAgLy8gSUUxMSBoYXMgYW4gdW5yZWxpYWJsZSBNdXRhdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uIHdoZXJlIHNldFByb3BlcnR5KCkgZG9lcyBub3RcclxuICAgICAgICAvLyBnZW5lcmF0ZSBhIG11dGF0aW9uIGV2ZW50LCBvYnNlcnZlcnMgY2FuIGNyYXNoLCBhbmQgdGhlIHF1ZXVlIGRvZXMgbm90IGRyYWluXHJcbiAgICAgICAgLy8gcmVsaWFibHkuIFRoZSBmb2xsb3dpbmcgZmVhdHVyZSB0ZXN0IHdhcyBhZGFwdGVkIGZyb21cclxuICAgICAgICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90MTBrby80YWNlYjhjNzE2ODFmZGIyNzVlMzNlZmU1ZTU3NmIxNFxyXG4gICAgICAgIHZhciBleGFtcGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cclxuICAgICAgICB2YXIgSG9zdE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWxfMS5kZWZhdWx0Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsXzEuZGVmYXVsdC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xyXG4gICAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBIb3N0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7IH0pO1xyXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZXhhbXBsZSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xyXG4gICAgICAgIGV4YW1wbGUuc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnYmxvY2snKTtcclxuICAgICAgICByZXR1cm4gQm9vbGVhbihvYnNlcnZlci50YWtlUmVjb3JkcygpLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG5oYXNfMS5hZGQoJ2RvbS13ZWJhbmltYXRpb24nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBoYXNfMS5kZWZhdWx0KCdob3N0LWJyb3dzZXInKSAmJiBnbG9iYWxfMS5kZWZhdWx0LkFuaW1hdGlvbiAhPT0gdW5kZWZpbmVkICYmIGdsb2JhbF8xLmRlZmF1bHQuS2V5ZnJhbWVFZmZlY3QgIT09IHVuZGVmaW5lZDsgfSwgdHJ1ZSk7XHJcbnZhciB0ZW1wbGF0ZU9iamVjdF8xO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9oYXMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9oYXMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGdsb2JhbF8xID0gcmVxdWlyZShcIi4uL2dsb2JhbFwiKTtcclxudmFyIGhhc18xID0gcmVxdWlyZShcIi4vaGFzXCIpO1xyXG5mdW5jdGlvbiBleGVjdXRlVGFzayhpdGVtKSB7XHJcbiAgICBpZiAoaXRlbSAmJiBpdGVtLmlzQWN0aXZlICYmIGl0ZW0uY2FsbGJhY2spIHtcclxuICAgICAgICBpdGVtLmNhbGxiYWNrKCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZ2V0UXVldWVIYW5kbGUoaXRlbSwgZGVzdHJ1Y3Rvcikge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsgfTtcclxuICAgICAgICAgICAgaXRlbS5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpdGVtLmNhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGRlc3RydWN0b3IpIHtcclxuICAgICAgICAgICAgICAgIGRlc3RydWN0b3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxudmFyIGNoZWNrTWljcm9UYXNrUXVldWU7XHJcbnZhciBtaWNyb1Rhc2tzO1xyXG4vKipcclxuICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gdGhlIG1hY3JvdGFzayBxdWV1ZS5cclxuICpcclxuICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBxdWV1ZWQgYW5kIGxhdGVyIGV4ZWN1dGVkLlxyXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGBkZXN0cm95YCBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIHByZXZlbnRzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nLlxyXG4gKi9cclxuZXhwb3J0cy5xdWV1ZVRhc2sgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGRlc3RydWN0b3I7XHJcbiAgICB2YXIgZW5xdWV1ZTtcclxuICAgIC8vIFNpbmNlIHRoZSBJRSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0SW1tZWRpYXRlYCBpcyBub3QgZmxhd2xlc3MsIHdlIHdpbGwgdGVzdCBmb3IgYHBvc3RNZXNzYWdlYCBmaXJzdC5cclxuICAgIGlmIChoYXNfMS5kZWZhdWx0KCdwb3N0bWVzc2FnZScpKSB7XHJcbiAgICAgICAgdmFyIHF1ZXVlXzEgPSBbXTtcclxuICAgICAgICBnbG9iYWxfMS5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgLy8gQ29uZmlybSB0aGF0IHRoZSBldmVudCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgYnkgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLlxyXG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWxfMS5kZWZhdWx0ICYmIGV2ZW50LmRhdGEgPT09ICdkb2pvLXF1ZXVlLW1lc3NhZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChxdWV1ZV8xLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVUYXNrKHF1ZXVlXzEuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgcXVldWVfMS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBnbG9iYWxfMS5kZWZhdWx0LnBvc3RNZXNzYWdlKCdkb2pvLXF1ZXVlLW1lc3NhZ2UnLCAnKicpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChoYXNfMS5kZWZhdWx0KCdzZXRpbW1lZGlhdGUnKSkge1xyXG4gICAgICAgIGRlc3RydWN0b3IgPSBnbG9iYWxfMS5kZWZhdWx0LmNsZWFySW1tZWRpYXRlO1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2V0SW1tZWRpYXRlKGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBkZXN0cnVjdG9yID0gZ2xvYmFsXzEuZGVmYXVsdC5jbGVhclRpbWVvdXQ7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSksIDApO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBxdWV1ZVRhc2soY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgaXRlbSA9IHtcclxuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIGlkID0gZW5xdWV1ZShpdGVtKTtcclxuICAgICAgICByZXR1cm4gZ2V0UXVldWVIYW5kbGUoaXRlbSwgZGVzdHJ1Y3RvciAmJlxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBkZXN0cnVjdG9yKGlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPOiBVc2UgYXNwZWN0LmJlZm9yZSB3aGVuIGl0IGlzIGF2YWlsYWJsZS5cclxuICAgIHJldHVybiBoYXNfMS5kZWZhdWx0KCdtaWNyb3Rhc2tzJylcclxuICAgICAgICA/IHF1ZXVlVGFza1xyXG4gICAgICAgIDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHF1ZXVlVGFzayhjYWxsYmFjayk7XHJcbiAgICAgICAgfTtcclxufSkoKTtcclxuLy8gV2hlbiBubyBtZWNoYW5pc20gZm9yIHJlZ2lzdGVyaW5nIG1pY3JvdGFza3MgaXMgZXhwb3NlZCBieSB0aGUgZW52aXJvbm1lbnQsIG1pY3JvdGFza3Mgd2lsbFxyXG4vLyBiZSBxdWV1ZWQgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYSBzaW5nbGUgbWFjcm90YXNrIGJlZm9yZSB0aGUgb3RoZXIgbWFjcm90YXNrcyBhcmUgZXhlY3V0ZWQuXHJcbmlmICghaGFzXzEuZGVmYXVsdCgnbWljcm90YXNrcycpKSB7XHJcbiAgICB2YXIgaXNNaWNyb1Rhc2tRdWV1ZWRfMSA9IGZhbHNlO1xyXG4gICAgbWljcm9UYXNrcyA9IFtdO1xyXG4gICAgY2hlY2tNaWNyb1Rhc2tRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIWlzTWljcm9UYXNrUXVldWVkXzEpIHtcclxuICAgICAgICAgICAgaXNNaWNyb1Rhc2tRdWV1ZWRfMSA9IHRydWU7XHJcbiAgICAgICAgICAgIGV4cG9ydHMucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlzTWljcm9UYXNrUXVldWVkXzEgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChtaWNyb1Rhc2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoaXRlbSA9IG1pY3JvVGFza3Muc2hpZnQoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVRhc2soaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBTY2hlZHVsZXMgYW4gYW5pbWF0aW9uIHRhc2sgd2l0aCBgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZWAgaWYgaXQgZXhpc3RzLCBvciB3aXRoIGBxdWV1ZVRhc2tgIG90aGVyd2lzZS5cclxuICpcclxuICogU2luY2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJ3MgYmVoYXZpb3IgZG9lcyBub3QgbWF0Y2ggdGhhdCBleHBlY3RlZCBmcm9tIGBxdWV1ZVRhc2tgLCBpdCBpcyBub3QgdXNlZCB0aGVyZS5cclxuICogSG93ZXZlciwgYXQgdGltZXMgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBkZWxlZ2F0ZSB0byByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7IGhlbmNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kLlxyXG4gKlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXHJcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGEgYGRlc3Ryb3lgIG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgcHJldmVudHMgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnJvbSBleGVjdXRpbmcuXHJcbiAqL1xyXG5leHBvcnRzLnF1ZXVlQW5pbWF0aW9uVGFzayA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIWhhc18xLmRlZmF1bHQoJ3JhZicpKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMucXVldWVUYXNrO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcXVldWVBbmltYXRpb25UYXNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB7XHJcbiAgICAgICAgICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcclxuICAgICAgICByZXR1cm4gZ2V0UXVldWVIYW5kbGUoaXRlbSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPOiBVc2UgYXNwZWN0LmJlZm9yZSB3aGVuIGl0IGlzIGF2YWlsYWJsZS5cclxuICAgIHJldHVybiBoYXNfMS5kZWZhdWx0KCdtaWNyb3Rhc2tzJylcclxuICAgICAgICA/IHF1ZXVlQW5pbWF0aW9uVGFza1xyXG4gICAgICAgIDogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNoZWNrTWljcm9UYXNrUXVldWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHF1ZXVlQW5pbWF0aW9uVGFzayhjYWxsYmFjayk7XHJcbiAgICAgICAgfTtcclxufSkoKTtcclxuLyoqXHJcbiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIHRoZSBtaWNyb3Rhc2sgcXVldWUuXHJcbiAqXHJcbiAqIEFueSBjYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIGBxdWV1ZU1pY3JvVGFza2Agd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIG5leHQgbWFjcm90YXNrLiBJZiBubyBuYXRpdmVcclxuICogbWVjaGFuaXNtIGZvciBzY2hlZHVsaW5nIG1hY3JvdGFza3MgaXMgZXhwb3NlZCwgdGhlbiBhbnkgY2FsbGJhY2tzIHdpbGwgYmUgZmlyZWQgYmVmb3JlIGFueSBtYWNyb3Rhc2tcclxuICogcmVnaXN0ZXJlZCB3aXRoIGBxdWV1ZVRhc2tgIG9yIGBxdWV1ZUFuaW1hdGlvblRhc2tgLlxyXG4gKlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXHJcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGEgYGRlc3Ryb3lgIG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgcHJldmVudHMgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnJvbSBleGVjdXRpbmcuXHJcbiAqL1xyXG5leHBvcnRzLnF1ZXVlTWljcm9UYXNrID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBlbnF1ZXVlO1xyXG4gICAgaWYgKGhhc18xLmRlZmF1bHQoJ2hvc3Qtbm9kZScpKSB7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbF8xLmRlZmF1bHQucHJvY2Vzcy5uZXh0VGljayhleGVjdXRlVGFzay5iaW5kKG51bGwsIGl0ZW0pKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaGFzXzEuZGVmYXVsdCgnZXM2LXByb21pc2UnKSkge1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBnbG9iYWxfMS5kZWZhdWx0LlByb21pc2UucmVzb2x2ZShpdGVtKS50aGVuKGV4ZWN1dGVUYXNrKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaGFzXzEuZGVmYXVsdCgnZG9tLW11dGF0aW9ub2JzZXJ2ZXInKSkge1xyXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXHJcbiAgICAgICAgdmFyIEhvc3RNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsXzEuZGVmYXVsdC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbF8xLmRlZmF1bHQuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcclxuICAgICAgICB2YXIgbm9kZV8xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdmFyIHF1ZXVlXzIgPSBbXTtcclxuICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgSG9zdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aGlsZSAocXVldWVfMi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlXzIuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0uaXNBY3RpdmUgJiYgaXRlbS5jYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUobm9kZV8xLCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHF1ZXVlXzIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgbm9kZV8xLnNldEF0dHJpYnV0ZSgncXVldWVTdGF0dXMnLCAnMScpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgY2hlY2tNaWNyb1Rhc2tRdWV1ZSgpO1xyXG4gICAgICAgICAgICBtaWNyb1Rhc2tzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgaXRlbSA9IHtcclxuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZW5xdWV1ZShpdGVtKTtcclxuICAgICAgICByZXR1cm4gZ2V0UXVldWVIYW5kbGUoaXRlbSk7XHJcbiAgICB9O1xyXG59KSgpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3NoaW0vc3VwcG9ydC9xdWV1ZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3F1ZXVlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbi8qKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSB2YWx1ZSBwcm9wZXJ0eSBkZXNjcmlwdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAgICAgICAgVGhlIHZhbHVlIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHNob3VsZCBiZSBzZXQgdG9cclxuICogQHBhcmFtIGVudW1lcmFibGUgICBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGVudW1iZXJhYmxlLCBkZWZhdWx0cyB0byBmYWxzZVxyXG4gKiBAcGFyYW0gd3JpdGFibGUgICAgIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgd3JpdGFibGUsIGRlZmF1bHRzIHRvIHRydWVcclxuICogQHBhcmFtIGNvbmZpZ3VyYWJsZSBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSwgZGVmYXVsdHMgdG8gdHJ1ZVxyXG4gKiBAcmV0dXJuICAgICAgICAgICAgIFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VmFsdWVEZXNjcmlwdG9yKHZhbHVlLCBlbnVtZXJhYmxlLCB3cml0YWJsZSwgY29uZmlndXJhYmxlKSB7XHJcbiAgICBpZiAoZW51bWVyYWJsZSA9PT0gdm9pZCAwKSB7IGVudW1lcmFibGUgPSBmYWxzZTsgfVxyXG4gICAgaWYgKHdyaXRhYmxlID09PSB2b2lkIDApIHsgd3JpdGFibGUgPSB0cnVlOyB9XHJcbiAgICBpZiAoY29uZmlndXJhYmxlID09PSB2b2lkIDApIHsgY29uZmlndXJhYmxlID0gdHJ1ZTsgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgICAgZW51bWVyYWJsZTogZW51bWVyYWJsZSxcclxuICAgICAgICB3cml0YWJsZTogd3JpdGFibGUsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiBjb25maWd1cmFibGVcclxuICAgIH07XHJcbn1cclxuZXhwb3J0cy5nZXRWYWx1ZURlc2NyaXB0b3IgPSBnZXRWYWx1ZURlc2NyaXB0b3I7XHJcbmZ1bmN0aW9uIHdyYXBOYXRpdmUobmF0aXZlRnVuY3Rpb24pIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmF0aXZlRnVuY3Rpb24uYXBwbHkodGFyZ2V0LCBhcmdzKTtcclxuICAgIH07XHJcbn1cclxuZXhwb3J0cy53cmFwTmF0aXZlID0gd3JhcE5hdGl2ZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9zaGltL3N1cHBvcnQvdXRpbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vc2hpbS9zdXBwb3J0L3V0aWwuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBhc3NlcnRSZW5kZXJfMSA9IHJlcXVpcmUoXCIuL3N1cHBvcnQvYXNzZXJ0UmVuZGVyXCIpO1xyXG52YXIgc2VsZWN0b3JfMSA9IHJlcXVpcmUoXCIuL3N1cHBvcnQvc2VsZWN0b3JcIik7XHJcbnZhciBkXzEgPSByZXF1aXJlKFwiQGRvam8vd2lkZ2V0LWNvcmUvZFwiKTtcclxuZnVuY3Rpb24gZGVjb3JhdGVOb2RlcyhkTm9kZSkge1xyXG4gICAgdmFyIGhhc0RlZmVycmVkUHJvcGVydGllcyA9IGZhbHNlO1xyXG4gICAgZnVuY3Rpb24gYWRkUGFyZW50KHBhcmVudCkge1xyXG4gICAgICAgIChwYXJlbnQuY2hpbGRyZW4gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmIChkXzEuaXNWTm9kZShjaGlsZCkgfHwgZF8xLmlzV05vZGUoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZF8xLmlzVk5vZGUocGFyZW50KSAmJiB0eXBlb2YgcGFyZW50LmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGhhc0RlZmVycmVkUHJvcGVydGllcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHBhcmVudC5wcm9wZXJ0aWVzID0gdHNsaWJfMS5fX2Fzc2lnbih7fSwgcGFyZW50LnByb3BlcnRpZXMsIHBhcmVudC5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayhmYWxzZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBub2RlcyA9IGRfMS5kZWNvcmF0ZShkTm9kZSwgYWRkUGFyZW50LCBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZF8xLmlzV05vZGUobm9kZSkgfHwgZF8xLmlzVk5vZGUobm9kZSk7IH0pO1xyXG4gICAgcmV0dXJuIHsgaGFzRGVmZXJyZWRQcm9wZXJ0aWVzOiBoYXNEZWZlcnJlZFByb3BlcnRpZXMsIG5vZGVzOiBub2RlcyB9O1xyXG59XHJcbmZ1bmN0aW9uIGhhcm5lc3MocmVuZGVyRnVuYywgY3VzdG9tQ29tcGFyYXRvcikge1xyXG4gICAgaWYgKGN1c3RvbUNvbXBhcmF0b3IgPT09IHZvaWQgMCkgeyBjdXN0b21Db21wYXJhdG9yID0gW107IH1cclxuICAgIHZhciBpbnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICB2YXIgd05vZGUgPSByZW5kZXJGdW5jKCk7XHJcbiAgICB2YXIgd2lkZ2V0O1xyXG4gICAgdmFyIHJlbmRlclN0YWNrID0gW107XHJcbiAgICB2YXIgcHJvcGVydGllcyA9IHdOb2RlLnByb3BlcnRpZXMsIGNoaWxkcmVuID0gd05vZGUuY2hpbGRyZW47XHJcbiAgICB2YXIgd2lkZ2V0Q29uc3RydWN0b3IgPSB3Tm9kZS53aWRnZXRDb25zdHJ1Y3RvcjtcclxuICAgIGlmICh0eXBlb2Ygd2lkZ2V0Q29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB3aWRnZXQgPSBuZXcgLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgICAgICAgICB0c2xpYl8xLl9fZXh0ZW5kcyhjbGFzc18xLCBfc3VwZXIpO1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGFzc18xKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsYXNzXzEucHJvdG90eXBlLmludmFsaWRhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLmludmFsaWRhdGUuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYXNzXzE7XHJcbiAgICAgICAgfSh3aWRnZXRDb25zdHJ1Y3RvcikpKCk7XHJcbiAgICAgICAgd2lkZ2V0Ll9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xyXG4gICAgICAgIHdpZGdldC5fX3NldENoaWxkcmVuX18oY2hpbGRyZW4pO1xyXG4gICAgICAgIF90cnlSZW5kZXIoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGFybmVzcyBkb2VzIG5vdCBzdXBwb3J0IHJlZ2lzdHJ5IGl0ZW1zJyk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBfZ2V0UmVuZGVyKGNvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvdW50ID8gcmVuZGVyU3RhY2tbY291bnRdIDogcmVuZGVyU3RhY2tbcmVuZGVyU3RhY2subGVuZ3RoIC0gMV07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBfcnVuQ29tcGFyZXMobm9kZXMsIGlzRXhwZWN0ZWQpIHtcclxuICAgICAgICBpZiAoaXNFeHBlY3RlZCA9PT0gdm9pZCAwKSB7IGlzRXhwZWN0ZWQgPSBmYWxzZTsgfVxyXG4gICAgICAgIGN1c3RvbUNvbXBhcmF0b3IuZm9yRWFjaChmdW5jdGlvbiAoX2EpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gX2Euc2VsZWN0b3IsIHByb3BlcnR5ID0gX2EucHJvcGVydHksIGNvbXBhcmF0b3IgPSBfYS5jb21wYXJhdG9yO1xyXG4gICAgICAgICAgICB2YXIgaXRlbXMgPSBzZWxlY3Rvcl8xLnNlbGVjdChzZWxlY3Rvciwgbm9kZXMpO1xyXG4gICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbXBhcmF0b3JOYW1lID0gXCJjb21wYXJhdG9yKHNlbGVjdG9yPVwiICsgc2VsZWN0b3IgKyBcIiwgXCIgKyBwcm9wZXJ0eSArIFwiKVwiO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5wcm9wZXJ0aWVzICYmIGl0ZW0ucHJvcGVydGllc1twcm9wZXJ0eV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21wYXJhdG9yUmVzdWx0ID0gY29tcGFyYXRvcihpdGVtLnByb3BlcnRpZXNbcHJvcGVydHldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbXBhcmF0b3JOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29tcGFyYXRvck5hbWUgKyBcIiBGQUlMRURcIjtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnByb3BlcnRpZXNbcHJvcGVydHldID0gaXNFeHBlY3RlZCA/IGNvbXBhcmF0b3JOYW1lIDogY29tcGFyYXRvclJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBfdHJ5UmVuZGVyKCkge1xyXG4gICAgICAgIHZhciBfYSA9IHJlbmRlckZ1bmMoKSwgcHJvcGVydGllcyA9IF9hLnByb3BlcnRpZXMsIGNoaWxkcmVuID0gX2EuY2hpbGRyZW47XHJcbiAgICAgICAgd2lkZ2V0Ll9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xyXG4gICAgICAgIHdpZGdldC5fX3NldENoaWxkcmVuX18oY2hpbGRyZW4pO1xyXG4gICAgICAgIGlmIChpbnZhbGlkYXRlZCkge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyID0gd2lkZ2V0Ll9fcmVuZGVyX18oKTtcclxuICAgICAgICAgICAgdmFyIF9iID0gZGVjb3JhdGVOb2RlcyhyZW5kZXIpLCBoYXNEZWZlcnJlZFByb3BlcnRpZXMgPSBfYi5oYXNEZWZlcnJlZFByb3BlcnRpZXMsIG5vZGVzID0gX2Iubm9kZXM7XHJcbiAgICAgICAgICAgIF9ydW5Db21wYXJlcyhub2Rlcyk7XHJcbiAgICAgICAgICAgIHJlbmRlclN0YWNrLnB1c2gobm9kZXMpO1xyXG4gICAgICAgICAgICBpZiAoaGFzRGVmZXJyZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWZ0ZXJEZWZlcnJlZFByb3BlcnRpZXNOb2RlcyA9IGRlY29yYXRlTm9kZXMocmVuZGVyKS5ub2RlcztcclxuICAgICAgICAgICAgICAgIF9ydW5Db21wYXJlcyhhZnRlckRlZmVycmVkUHJvcGVydGllc05vZGVzKTtcclxuICAgICAgICAgICAgICAgIHJlbmRlclN0YWNrLnB1c2goYWZ0ZXJEZWZlcnJlZFByb3BlcnRpZXNOb2Rlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW52YWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBfZXhwZWN0KGV4cGVjdGVkUmVuZGVyRnVuYywgYWN0dWFsUmVuZGVyRnVuYywgc2VsZWN0b3IpIHtcclxuICAgICAgICB2YXIgcmVuZGVyUmVzdWx0O1xyXG4gICAgICAgIGlmIChhY3R1YWxSZW5kZXJGdW5jID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgX3RyeVJlbmRlcigpO1xyXG4gICAgICAgICAgICByZW5kZXJSZXN1bHQgPSBfZ2V0UmVuZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZW5kZXJSZXN1bHQgPSBhY3R1YWxSZW5kZXJGdW5jKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBleHBlY3RlZFJlbmRlclJlc3VsdCA9IGRlY29yYXRlTm9kZXMoZXhwZWN0ZWRSZW5kZXJGdW5jKCkpLm5vZGVzO1xyXG4gICAgICAgIF9ydW5Db21wYXJlcyhleHBlY3RlZFJlbmRlclJlc3VsdCwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIHZhciBfYSA9IHRzbGliXzEuX19yZWFkKHNlbGVjdG9yXzEuc2VsZWN0KHNlbGVjdG9yLCByZW5kZXJSZXN1bHQpLCAxKSwgZmlyc3RJdGVtID0gX2FbMF07XHJcbiAgICAgICAgICAgIGFzc2VydFJlbmRlcl8xLmRlZmF1bHQoZmlyc3RJdGVtLCBleHBlY3RlZFJlbmRlclJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhc3NlcnRSZW5kZXJfMS5kZWZhdWx0KHJlbmRlclJlc3VsdCwgZXhwZWN0ZWRSZW5kZXJSZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZXhwZWN0OiBmdW5jdGlvbiAoZXhwZWN0ZWRSZW5kZXJGdW5jLCBhY3R1YWxSZW5kZXJGdW5jKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfZXhwZWN0KGV4cGVjdGVkUmVuZGVyRnVuYywgYWN0dWFsUmVuZGVyRnVuYyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBleHBlY3RQYXJ0aWFsOiBmdW5jdGlvbiAoc2VsZWN0b3IsIGV4cGVjdGVkUmVuZGVyRnVuYywgYWN0dWFsUmVuZGVyRnVuYykge1xyXG4gICAgICAgICAgICByZXR1cm4gX2V4cGVjdChleHBlY3RlZFJlbmRlckZ1bmMsIGFjdHVhbFJlbmRlckZ1bmMsIHNlbGVjdG9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uIChzZWxlY3RvciwgZnVuY3Rpb25TZWxlY3Rvcikge1xyXG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfdHJ5UmVuZGVyKCk7XHJcbiAgICAgICAgICAgIHZhciBfYSA9IHRzbGliXzEuX19yZWFkKHNlbGVjdG9yXzEuc2VsZWN0KHNlbGVjdG9yLCBfZ2V0UmVuZGVyKCkpLCAxKSwgZmlyc3RJdGVtID0gX2FbMF07XHJcbiAgICAgICAgICAgIGlmIChmaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHZhciB0cmlnZ2VyRnVuY3Rpb24gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9uU2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZ1bmN0aW9uID0gZmlyc3RJdGVtLnByb3BlcnRpZXNbZnVuY3Rpb25TZWxlY3Rvcl07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRnVuY3Rpb24gPSBmdW5jdGlvblNlbGVjdG9yKGZpcnN0SXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodHJpZ2dlckZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyaWdnZXJGdW5jdGlvbi5hcHBseSh3aWRnZXQsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXRSZW5kZXI6IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgICAgICByZXR1cm4gX2dldFJlbmRlcihpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLmhhcm5lc3MgPSBoYXJuZXNzO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBoYXJuZXNzO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3Rlc3QtZXh0cmFzL2hhcm5lc3MuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3Rlc3QtZXh0cmFzL2hhcm5lc3MuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGRfMSA9IHJlcXVpcmUoXCJAZG9qby93aWRnZXQtY29yZS9kXCIpO1xyXG52YXIgZGlmZiA9IHJlcXVpcmUoXCJkaWZmXCIpO1xyXG52YXIgV2Vha01hcF8xID0gcmVxdWlyZShcIkBkb2pvL3NoaW0vV2Vha01hcFwiKTtcclxudmFyIFNldF8xID0gcmVxdWlyZShcIkBkb2pvL3NoaW0vU2V0XCIpO1xyXG52YXIgTWFwXzEgPSByZXF1aXJlKFwiQGRvam8vc2hpbS9NYXBcIik7XHJcbnZhciBhcnJheV8xID0gcmVxdWlyZShcIkBkb2pvL3NoaW0vYXJyYXlcIik7XHJcbnZhciB3aWRnZXRDbGFzc0NvdW50ZXIgPSAwO1xyXG52YXIgd2lkZ2V0TWFwID0gbmV3IFdlYWtNYXBfMS5kZWZhdWx0KCk7XHJcbmZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gJ2Z1bmN0aW9uJztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldF8xLmRlZmF1bHQgfHwgdmFsdWUgaW5zdGFuY2VvZiBNYXBfMS5kZWZhdWx0KSB7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5XzEuZnJvbSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gZm9ybWF0RE5vZGVzKG5vZGVzLCBkZXB0aCkge1xyXG4gICAgaWYgKGRlcHRoID09PSB2b2lkIDApIHsgZGVwdGggPSAwOyB9XHJcbiAgICB2YXIgaXNBcnJheUZyYWdtZW50ID0gQXJyYXkuaXNBcnJheShub2RlcykgJiYgZGVwdGggPT09IDA7XHJcbiAgICB2YXIgaW5pdGlhbCA9IGlzQXJyYXlGcmFnbWVudCA/ICdbXFxuJyA6ICcnO1xyXG4gICAgdmFyIHRhYnMgPSAnJztcclxuICAgIGRlcHRoID0gaXNBcnJheUZyYWdtZW50ID8gMSA6IGRlcHRoO1xyXG4gICAgbm9kZXMgPSBBcnJheS5pc0FycmF5KG5vZGVzKSA/IG5vZGVzIDogW25vZGVzXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwdGg7IGkrKykge1xyXG4gICAgICAgIHRhYnMgPSB0YWJzICsgXCJcXHRcIjtcclxuICAgIH1cclxuICAgIHZhciBmb3JtYXR0ZWROb2RlID0gbm9kZXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIG5vZGUsIGluZGV4KSB7XHJcbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0ID0gXCJcIiArIHJlc3VsdCArIHRhYnM7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgXCJcXFwiXCIgKyBub2RlICsgXCJcXFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdCA9IFwiXCIgKyByZXN1bHQgKyBmb3JtYXROb2RlKG5vZGUsIHRhYnMpO1xyXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBcIiwgW1xcblwiICsgZm9ybWF0RE5vZGVzKG5vZGUuY2hpbGRyZW4sIGRlcHRoICsgMSkgKyBcIlxcblwiICsgdGFicyArIFwiXVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0ICsgXCIpXCI7XHJcbiAgICB9LCBpbml0aWFsKTtcclxuICAgIHJldHVybiBpc0FycmF5RnJhZ21lbnQgPyAoZm9ybWF0dGVkTm9kZSA9IGZvcm1hdHRlZE5vZGUgKyBcIlxcbl1cIikgOiBmb3JtYXR0ZWROb2RlO1xyXG59XHJcbmV4cG9ydHMuZm9ybWF0RE5vZGVzID0gZm9ybWF0RE5vZGVzO1xyXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIHRhYnMpIHtcclxuICAgIHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKVxyXG4gICAgICAgIC5zb3J0KClcclxuICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChwcm9wcywga2V5KSB7XHJcbiAgICAgICAgcHJvcHNba2V5XSA9IHByb3BlcnRpZXNba2V5XTtcclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9LCB7fSk7XHJcbiAgICBwcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkocHJvcGVydGllcywgcmVwbGFjZXIsIHRhYnMgKyBcIlxcdFwiKS5zbGljZSgwLCAtMSk7XHJcbiAgICByZXR1cm4gXCJcIiArIHByb3BlcnRpZXMgKyB0YWJzICsgXCJ9XCI7XHJcbn1cclxuZnVuY3Rpb24gZ2V0V2lkZ2V0TmFtZSh3aWRnZXRDb25zdHJ1Y3Rvcikge1xyXG4gICAgdmFyIG5hbWU7XHJcbiAgICBpZiAodHlwZW9mIHdpZGdldENvbnN0cnVjdG9yID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygd2lkZ2V0Q29uc3RydWN0b3IgPT09ICdzeW1ib2wnKSB7XHJcbiAgICAgICAgbmFtZSA9IHdpZGdldENvbnN0cnVjdG9yLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBuYW1lID0gd2lkZ2V0Q29uc3RydWN0b3IubmFtZTtcclxuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhciBpZCA9IHdpZGdldE1hcC5nZXQod2lkZ2V0Q29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWQgPSArK3dpZGdldENsYXNzQ291bnRlcjtcclxuICAgICAgICAgICAgICAgIHdpZGdldE1hcC5zZXQod2lkZ2V0Q29uc3RydWN0b3IsIGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuYW1lID0gXCJXaWRnZXQtXCIgKyBpZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmFtZTtcclxufVxyXG5mdW5jdGlvbiBmb3JtYXROb2RlKG5vZGUsIHRhYnMpIHtcclxuICAgIHZhciBwcm9wZXJ0eUtleUNvdW50ID0gT2JqZWN0LmtleXMobm9kZS5wcm9wZXJ0aWVzKS5sZW5ndGg7XHJcbiAgICB2YXIgcHJvcGVydGllcyA9IHByb3BlcnR5S2V5Q291bnQgPiAwID8gZm9ybWF0UHJvcGVydGllcyhub2RlLnByb3BlcnRpZXMsIHRhYnMpIDogJ3t9JztcclxuICAgIGlmIChkXzEuaXNXTm9kZShub2RlKSkge1xyXG4gICAgICAgIHJldHVybiBcIncoXCIgKyBnZXRXaWRnZXROYW1lKG5vZGUud2lkZ2V0Q29uc3RydWN0b3IpICsgXCIsIFwiICsgcHJvcGVydGllcztcclxuICAgIH1cclxuICAgIHJldHVybiBcInYoXFxcIlwiICsgbm9kZS50YWcgKyBcIlxcXCIsIFwiICsgcHJvcGVydGllcztcclxufVxyXG5mdW5jdGlvbiBhc3NlcnRSZW5kZXIoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIHBhcnNlZEFjdHVhbCA9IGZvcm1hdEROb2RlcyhhY3R1YWwpO1xyXG4gICAgdmFyIHBhcnNlZEV4cGVjdGVkID0gZm9ybWF0RE5vZGVzKGV4cGVjdGVkKTtcclxuICAgIHZhciBkaWZmUmVzdWx0ID0gZGlmZi5kaWZmTGluZXMocGFyc2VkQWN0dWFsLCBwYXJzZWRFeHBlY3RlZCk7XHJcbiAgICB2YXIgZGlmZkZvdW5kID0gZmFsc2U7XHJcbiAgICB2YXIgcGFyc2VkRGlmZiA9IGRpZmZSZXN1bHQucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIHBhcnQsIGluZGV4KSB7XHJcbiAgICAgICAgaWYgKHBhcnQuYWRkZWQpIHtcclxuICAgICAgICAgICAgZGlmZkZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgXCIoRSlcIiArIHBhcnQudmFsdWUucmVwbGFjZSgvXFxuXFx0L2csICdcXG4oRSlcXHQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocGFydC5yZW1vdmVkKSB7XHJcbiAgICAgICAgICAgIGRpZmZGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIFwiKEEpXCIgKyBwYXJ0LnZhbHVlLnJlcGxhY2UoL1xcblxcdC9nLCAnXFxuKEEpXFx0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBcIlwiICsgcmVzdWx0ICsgcGFydC52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0sICdcXG4nKTtcclxuICAgIGlmIChkaWZmRm91bmQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocGFyc2VkRGlmZik7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5hc3NlcnRSZW5kZXIgPSBhc3NlcnRSZW5kZXI7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IGFzc2VydFJlbmRlcjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby90ZXN0LWV4dHJhcy9zdXBwb3J0L2Fzc2VydFJlbmRlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vdGVzdC1leHRyYXMvc3VwcG9ydC9hc3NlcnRSZW5kZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBkXzEgPSByZXF1aXJlKFwiQGRvam8vd2lkZ2V0LWNvcmUvZFwiKTtcclxudmFyIGNzc1NlbGVjdCA9IHJlcXVpcmUoXCJjc3Mtc2VsZWN0LXVtZFwiKTtcclxuZXhwb3J0cy5wYXJzZVNlbGVjdG9yID0gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XHJcbiAgICB2YXIgc2VsZWN0b3JzID0gc2VsZWN0b3Iuc3BsaXQoJyAnKTtcclxuICAgIHJldHVybiBzZWxlY3RvcnNcclxuICAgICAgICAubWFwKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xyXG4gICAgICAgIHZhciBrZXlTaWdpbEluZGV4ID0gc2VsZWN0b3IuaW5kZXhPZignQCcpO1xyXG4gICAgICAgIGlmIChrZXlTaWdpbEluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIltrZXk9XFxcIlwiICsgc2VsZWN0b3Iuc3Vic3RyKDEpICsgXCJcXFwiXVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXlTaWdpbEluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gc2VsZWN0b3Iuc3Vic3RyaW5nKGtleVNpZ2lsSW5kZXggKyAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yLnNsaWNlKDAsIGtleVNpZ2lsSW5kZXgpICsgXCJba2V5PVxcXCJcIiArIGtleSArIFwiXFxcIl1cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xyXG4gICAgfSlcclxuICAgICAgICAuam9pbignICcpO1xyXG59O1xyXG5leHBvcnRzLmFkYXB0ZXIgPSB7XHJcbiAgICBpc1RhZzogZnVuY3Rpb24gKGVsZW0pIHtcclxuICAgICAgICByZXR1cm4gZF8xLmlzVk5vZGUoZWxlbSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0VGV4dDogZnVuY3Rpb24gKGVsZW0pIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlU3Vic2V0czogZnVuY3Rpb24gKGVsZW1lbnRzKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xyXG4gICAgfSxcclxuICAgIGdldENoaWxkcmVuOiBmdW5jdGlvbiAoZWxlbSkge1xyXG4gICAgICAgIHJldHVybiBkXzEuaXNWTm9kZShlbGVtKSB8fCBkXzEuaXNXTm9kZShlbGVtKSA/IGVsZW0uY2hpbGRyZW4gOiBbXTtcclxuICAgIH0sXHJcbiAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogZnVuY3Rpb24gKGVsZW0sIG5hbWUpIHtcclxuICAgICAgICBpZiAoZF8xLmlzVk5vZGUoZWxlbSkgfHwgZF8xLmlzV05vZGUoZWxlbSkpIHtcclxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjbGFzc2VzID0gZWxlbS5wcm9wZXJ0aWVzLmNsYXNzZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtLnByb3BlcnRpZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGhhc0F0dHJpYjogZnVuY3Rpb24gKGVsZW0sIG5hbWUpIHtcclxuICAgICAgICBpZiAoZF8xLmlzVk5vZGUoZWxlbSkgfHwgZF8xLmlzV05vZGUoZWxlbSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5hbWUgaW4gZWxlbS5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG4gICAgZXhpc3RzT25lOiBmdW5jdGlvbiAodGVzdCwgZWxlbWVudHMpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudHMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdGVzdChlbGVtKTsgfSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0TmFtZTogZnVuY3Rpb24gKGVsZW0pIHtcclxuICAgICAgICBpZiAoZF8xLmlzVk5vZGUoZWxlbSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW0udGFnO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBnZXRQYXJlbnQ6IGZ1bmN0aW9uIChlbGVtKSB7XHJcbiAgICAgICAgaWYgKGRfMS5pc1ZOb2RlKGVsZW0pIHx8IGRfMS5pc1dOb2RlKGVsZW0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtLnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0U2libGluZ3M6IGZ1bmN0aW9uIChlbGVtKSB7XHJcbiAgICAgICAgaWYgKGRfMS5pc1ZOb2RlKGVsZW0pIHx8IGRfMS5pc1dOb2RlKGVsZW0pKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucGFyZW50LmNoaWxkcmVuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBbZWxlbV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGZpbmRPbmU6IGZ1bmN0aW9uICh0ZXN0LCBhcnIpIHtcclxuICAgICAgICB2YXIgZWxlbSA9IG51bGw7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcnIubGVuZ3RoOyBpIDwgbCAmJiAhZWxlbTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0KGFycltpXSkpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0gPSBhcnJbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBleHBvcnRzLmFkYXB0ZXIuZ2V0Q2hpbGRyZW4oYXJyW2ldKTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGV4cG9ydHMuYWRhcHRlci5maW5kT25lKHRlc3QsIGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWxlbTtcclxuICAgIH0sXHJcbiAgICBmaW5kQWxsOiBmdW5jdGlvbiAodGVzdCwgZWxlbWVudHMpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRlc3QoZWxlbWVudHNbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChlbGVtZW50c1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZXhwb3J0cy5hZGFwdGVyLmdldENoaWxkcmVuKGVsZW1lbnRzW2ldKTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0c2xpYl8xLl9fc3ByZWFkKHJlc3VsdCwgZXhwb3J0cy5hZGFwdGVyLmZpbmRBbGwodGVzdCwgY2hpbGRyZW4pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBzZWxlY3Qoc2VsZWN0b3IsIG5vZGVzKSB7XHJcbiAgICBub2RlcyA9IEFycmF5LmlzQXJyYXkobm9kZXMpID8gbm9kZXMgOiBbbm9kZXNdO1xyXG4gICAgc2VsZWN0b3IgPSBleHBvcnRzLnBhcnNlU2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG4gICAgcmV0dXJuIGNzc1NlbGVjdChzZWxlY3Rvciwgbm9kZXMsIHsgYWRhcHRlcjogZXhwb3J0cy5hZGFwdGVyIH0pO1xyXG59XHJcbmV4cG9ydHMuc2VsZWN0ID0gc2VsZWN0O1xyXG5leHBvcnRzLmRlZmF1bHQgPSBzZWxlY3Q7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vdGVzdC1leHRyYXMvc3VwcG9ydC9zZWxlY3Rvci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vdGVzdC1leHRyYXMvc3VwcG9ydC9zZWxlY3Rvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKHRydWUpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLnNVbVVpNFNoIHtcXHJcXG5cXHRoZWlnaHQ6IDEwMCU7XFxyXFxuXFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xcclxcbn1cXHJcXG5cXHJcXG4uXzJNazZSZHFhIHtcXHJcXG5cXHRjb2xvcjogI2ZmZjtcXHJcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxyXFxuXFx0bWFyZ2luOiAwIDYuNHB4O1xcclxcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG5cXHRkaXNwbGF5OiAtd2Via2l0LWJveDtcXHJcXG5cXHRkaXNwbGF5OiAtbXMtZmxleGJveDtcXHJcXG5cXHRkaXNwbGF5OiBmbGV4O1xcclxcblxcdC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XFxyXFxuXFx0LXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XFxyXFxuXFx0ICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcblxcdCAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG5cXHQtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XFxyXFxuXFx0ICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXHJcXG5cXHQgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcclxcblxcdGhlaWdodDogNDhweDtcXHJcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5fMk1rNlJkcWE6OmFmdGVyIHtcXHJcXG5cXHRkaXNwbGF5OiBibG9jaztcXHJcXG5cXHRjb250ZW50OiBcXFwiXFxcIjtcXHJcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcclxcblxcdGhlaWdodDogMnB4O1xcclxcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG5cXHR3aWR0aDogMTAwJTtcXHJcXG5cXHRib3R0b206IDA7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxyXFxuXFx0dHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGVhc2Utb3V0O1xcclxcblxcdHRyYW5zaXRpb246IHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxyXFxuXFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcyBlYXNlLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGVhc2Utb3V0O1xcclxcblxcdC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7XFxyXFxuXFx0ICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTtcXHJcXG59XFxyXFxuXFxyXFxuLl8xLWYzSXRPaDo6YWZ0ZXIge1xcclxcblxcdC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcclxcblxcdCAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcclxcbn1cXHJcXG5cIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wiQzovVXNlcnMvSUVVc2VyL0Rlc2t0b3AvY2xpLWJ1aWxkLXdpZGdldC90ZXN0LWFwcC9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0NBQ0MsYUFBYTtDQUNiLHNCQUFzQjtDQUN0Qjs7QUFFRDtDQUNDLFlBQVk7Q0FDWixzQkFBc0I7Q0FDdEIsZ0JBQWdCO0NBQ2hCLG1CQUFtQjtDQUNuQixxQkFBcUI7Q0FDckIscUJBQXFCO0NBQ3JCLGNBQWM7Q0FDZCw2QkFBNkI7Q0FDN0IsOEJBQThCO0tBQzFCLDJCQUEyQjtTQUN2Qix1QkFBdUI7Q0FDL0IseUJBQXlCO0tBQ3JCLHNCQUFzQjtTQUNsQix3QkFBd0I7Q0FDaEMsYUFBYTtDQUNiLGdCQUFnQjtDQUNoQjs7QUFFRDtDQUNDLGVBQWU7Q0FDZixZQUFZO0NBQ1osaUJBQWlCO0NBQ2pCLFlBQVk7Q0FDWixtQkFBbUI7Q0FDbkIsWUFBWTtDQUNaLFVBQVU7Q0FDVixtREFBbUQ7Q0FDbkQsMkNBQTJDO0NBQzNDLG1DQUFtQztDQUNuQyxtRUFBbUU7Q0FDbkUsbUNBQW1DO1NBQzNCLDJCQUEyQjtDQUNuQzs7QUFFRDtDQUNDLGlDQUFpQztTQUN6Qix5QkFBeUI7Q0FDakNcIixcImZpbGVcIjpcIm1lbnVJdGVtLm0uY3NzXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5yb290IHtcXHJcXG5cXHRoZWlnaHQ6IDEwMCU7XFxyXFxuXFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xcclxcbn1cXHJcXG5cXHJcXG4uaXRlbSB7XFxyXFxuXFx0Y29sb3I6ICNmZmY7XFxyXFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcblxcdG1hcmdpbjogMCA2LjRweDtcXHJcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuXFx0ZGlzcGxheTogLXdlYmtpdC1ib3g7XFxyXFxuXFx0ZGlzcGxheTogLW1zLWZsZXhib3g7XFxyXFxuXFx0ZGlzcGxheTogZmxleDtcXHJcXG5cXHQtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xcclxcblxcdC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xcclxcblxcdCAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG5cXHQgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuXFx0LXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xcclxcblxcdCAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxyXFxuXFx0ICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXHJcXG5cXHRoZWlnaHQ6IDQ4cHg7XFxyXFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcclxcbn1cXHJcXG5cXHJcXG4uaXRlbTo6YWZ0ZXIge1xcclxcblxcdGRpc3BsYXk6IGJsb2NrO1xcclxcblxcdGNvbnRlbnQ6IFxcXCJcXFwiO1xcclxcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxyXFxuXFx0aGVpZ2h0OiAycHg7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHdpZHRoOiAxMDAlO1xcclxcblxcdGJvdHRvbTogMDtcXHJcXG5cXHQtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXHJcXG5cXHR0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxyXFxuXFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXHJcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTtcXHJcXG5cXHQgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgzcHgpO1xcclxcbn1cXHJcXG5cXHJcXG4uc2VsZWN0ZWQ6OmFmdGVyIHtcXHJcXG5cXHQtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXHJcXG5cXHQgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXHJcXG59XFxyXFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG5cbi8vIGV4cG9ydHNcbmV4cG9ydHMubG9jYWxzID0ge1wiIF9rZXlcIjogXCJ0ZXN0LWFwcC9tZW51SXRlbVwiLFxuXHRcInJvb3RcIjogXCJzVW1VaTRTaFwiLFxuXHRcIml0ZW1cIjogXCJfMk1rNlJkcWFcIixcblx0XCJzZWxlY3RlZFwiOiBcIl8xLWYzSXRPaFwiXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlcj97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPWNzcyEuL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3Ncbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKSh0cnVlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5fM2JBNmpkU24ge1xcclxcblxcdHdpZHRoOiAxMDAlO1xcclxcblxcdHRvcDogMDtcXHJcXG5cXHRoZWlnaHQ6IDQ4cHg7XFxyXFxuXFx0ei1pbmRleDogMTAwO1xcclxcblxcdGJhY2tncm91bmQtY29sb3I6ICMxZDFmMjA7XFxyXFxufVxcclxcblxcclxcbi5fMWVvR2Zxa3Uge1xcclxcblxcdGhlaWdodDogMTAwJTtcXHJcXG5cXHRtYXJnaW46IDAgYXV0bztcXHJcXG59XFxyXFxuXCIsIFwiXCIsIHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIkM6L1VzZXJzL0lFVXNlci9EZXNrdG9wL2NsaS1idWlsZC13aWRnZXQvdGVzdC1hcHAvc3JjL21lbnUvbWVudS5tLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtDQUNDLFlBQVk7Q0FDWixPQUFPO0NBQ1AsYUFBYTtDQUNiLGFBQWE7Q0FDYiwwQkFBMEI7Q0FDMUI7O0FBRUQ7Q0FDQyxhQUFhO0NBQ2IsZUFBZTtDQUNmXCIsXCJmaWxlXCI6XCJtZW51Lm0uY3NzXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5yb290IHtcXHJcXG5cXHR3aWR0aDogMTAwJTtcXHJcXG5cXHR0b3A6IDA7XFxyXFxuXFx0aGVpZ2h0OiA0OHB4O1xcclxcblxcdHotaW5kZXg6IDEwMDtcXHJcXG5cXHRiYWNrZ3JvdW5kLWNvbG9yOiAjMWQxZjIwO1xcclxcbn1cXHJcXG5cXHJcXG4ubWVudUNvbnRhaW5lciB7XFxyXFxuXFx0aGVpZ2h0OiAxMDAlO1xcclxcblxcdG1hcmdpbjogMCBhdXRvO1xcclxcbn1cXHJcXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcblxuLy8gZXhwb3J0c1xuZXhwb3J0cy5sb2NhbHMgPSB7XCIgX2tleVwiOiBcInRlc3QtYXBwL21lbnVcIixcblx0XCJyb290XCI6IFwiXzNiQTZqZFNuXCIsXG5cdFwibWVudUNvbnRhaW5lclwiOiBcIl8xZW9HZnFrdVwiXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlcj97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPWNzcyEuL3NyYy9tZW51L21lbnUubS5jc3Ncbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL3NyYy9tZW51L21lbnUubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBFdmVudGVkXzEgPSByZXF1aXJlKFwiQGRvam8vY29yZS9FdmVudGVkXCIpO1xyXG52YXIgSW5qZWN0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhJbmplY3RvciwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIEluamVjdG9yKHBheWxvYWQpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xyXG4gICAgICAgIF90aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcclxuICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICB9XHJcbiAgICBJbmplY3Rvci5wcm90b3R5cGUuc2V0SW52YWxpZGF0b3IgPSBmdW5jdGlvbiAoaW52YWxpZGF0b3IpIHtcclxuICAgICAgICB0aGlzLl9pbnZhbGlkYXRvciA9IGludmFsaWRhdG9yO1xyXG4gICAgfTtcclxuICAgIEluamVjdG9yLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BheWxvYWQ7XHJcbiAgICB9O1xyXG4gICAgSW5qZWN0b3IucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXlsb2FkKSB7XHJcbiAgICAgICAgdGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ludmFsaWRhdG9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBJbmplY3RvcjtcclxufShFdmVudGVkXzEuRXZlbnRlZCkpO1xyXG5leHBvcnRzLkluamVjdG9yID0gSW5qZWN0b3I7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEluamVjdG9yO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL0luamVjdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9JbmplY3Rvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIEV2ZW50ZWRfMSA9IHJlcXVpcmUoXCJAZG9qby9jb3JlL0V2ZW50ZWRcIik7XHJcbnZhciBNYXBfMSA9IHJlcXVpcmUoXCJAZG9qby9zaGltL01hcFwiKTtcclxuLyoqXHJcbiAqIEVudW0gdG8gaWRlbnRpZnkgdGhlIHR5cGUgb2YgZXZlbnQuXHJcbiAqIExpc3RlbmluZyB0byAnUHJvamVjdG9yJyB3aWxsIG5vdGlmeSB3aGVuIHByb2plY3RvciBpcyBjcmVhdGVkIG9yIHVwZGF0ZWRcclxuICogTGlzdGVuaW5nIHRvICdXaWRnZXQnIHdpbGwgbm90aWZ5IHdoZW4gd2lkZ2V0IHJvb3QgaXMgY3JlYXRlZCBvciB1cGRhdGVkXHJcbiAqL1xyXG52YXIgTm9kZUV2ZW50VHlwZTtcclxuKGZ1bmN0aW9uIChOb2RlRXZlbnRUeXBlKSB7XHJcbiAgICBOb2RlRXZlbnRUeXBlW1wiUHJvamVjdG9yXCJdID0gXCJQcm9qZWN0b3JcIjtcclxuICAgIE5vZGVFdmVudFR5cGVbXCJXaWRnZXRcIl0gPSBcIldpZGdldFwiO1xyXG59KShOb2RlRXZlbnRUeXBlID0gZXhwb3J0cy5Ob2RlRXZlbnRUeXBlIHx8IChleHBvcnRzLk5vZGVFdmVudFR5cGUgPSB7fSkpO1xyXG52YXIgTm9kZUhhbmRsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhOb2RlSGFuZGxlciwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIE5vZGVIYW5kbGVyKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xyXG4gICAgICAgIF90aGlzLl9ub2RlTWFwID0gbmV3IE1hcF8xLmRlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICB9XHJcbiAgICBOb2RlSGFuZGxlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlTWFwLmdldChrZXkpO1xyXG4gICAgfTtcclxuICAgIE5vZGVIYW5kbGVyLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVNYXAuaGFzKGtleSk7XHJcbiAgICB9O1xyXG4gICAgTm9kZUhhbmRsZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChlbGVtZW50LCBrZXkpIHtcclxuICAgICAgICB0aGlzLl9ub2RlTWFwLnNldChrZXksIGVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6IGtleSB9KTtcclxuICAgIH07XHJcbiAgICBOb2RlSGFuZGxlci5wcm90b3R5cGUuYWRkUm9vdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLldpZGdldCB9KTtcclxuICAgIH07XHJcbiAgICBOb2RlSGFuZGxlci5wcm90b3R5cGUuYWRkUHJvamVjdG9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6IE5vZGVFdmVudFR5cGUuUHJvamVjdG9yIH0pO1xyXG4gICAgfTtcclxuICAgIE5vZGVIYW5kbGVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9ub2RlTWFwLmNsZWFyKCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE5vZGVIYW5kbGVyO1xyXG59KEV2ZW50ZWRfMS5FdmVudGVkKSk7XHJcbmV4cG9ydHMuTm9kZUhhbmRsZXIgPSBOb2RlSGFuZGxlcjtcclxuZXhwb3J0cy5kZWZhdWx0ID0gTm9kZUhhbmRsZXI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvTm9kZUhhbmRsZXIuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL05vZGVIYW5kbGVyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgUHJvbWlzZV8xID0gcmVxdWlyZShcIkBkb2pvL3NoaW0vUHJvbWlzZVwiKTtcclxudmFyIE1hcF8xID0gcmVxdWlyZShcIkBkb2pvL3NoaW0vTWFwXCIpO1xyXG52YXIgU3ltYm9sXzEgPSByZXF1aXJlKFwiQGRvam8vc2hpbS9TeW1ib2xcIik7XHJcbnZhciBFdmVudGVkXzEgPSByZXF1aXJlKFwiQGRvam8vY29yZS9FdmVudGVkXCIpO1xyXG4vKipcclxuICogV2lkZ2V0IGJhc2Ugc3ltYm9sIHR5cGVcclxuICovXHJcbmV4cG9ydHMuV0lER0VUX0JBU0VfVFlQRSA9IFN5bWJvbF8xLmRlZmF1bHQoJ1dpZGdldCBCYXNlJyk7XHJcbi8qKlxyXG4gKiBDaGVja3MgaXMgdGhlIGl0ZW0gaXMgYSBzdWJjbGFzcyBvZiBXaWRnZXRCYXNlIChvciBhIFdpZGdldEJhc2UpXHJcbiAqXHJcbiAqIEBwYXJhbSBpdGVtIHRoZSBpdGVtIHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zIHRydWUvZmFsc2UgaW5kaWNhdGluZyBpZiB0aGUgaXRlbSBpcyBhIFdpZGdldEJhc2VDb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkge1xyXG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJiBpdGVtLl90eXBlID09PSBleHBvcnRzLldJREdFVF9CQVNFX1RZUEUpO1xyXG59XHJcbmV4cG9ydHMuaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IgPSBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcjtcclxuZnVuY3Rpb24gaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQoaXRlbSkge1xyXG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJlxyXG4gICAgICAgIGl0ZW0uaGFzT3duUHJvcGVydHkoJ19fZXNNb2R1bGUnKSAmJlxyXG4gICAgICAgIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSAmJlxyXG4gICAgICAgIGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0uZGVmYXVsdCkpO1xyXG59XHJcbmV4cG9ydHMuaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQgPSBpc1dpZGdldENvbnN0cnVjdG9yRGVmYXVsdEV4cG9ydDtcclxuLyoqXHJcbiAqIFRoZSBSZWdpc3RyeSBpbXBsZW1lbnRhdGlvblxyXG4gKi9cclxudmFyIFJlZ2lzdHJ5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoUmVnaXN0cnksIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBSZWdpc3RyeSgpIHtcclxuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEVtaXQgbG9hZGVkIGV2ZW50IGZvciByZWdpc3RyeSBsYWJlbFxyXG4gICAgICovXHJcbiAgICBSZWdpc3RyeS5wcm90b3R5cGUuZW1pdExvYWRlZEV2ZW50ID0gZnVuY3Rpb24gKHdpZGdldExhYmVsLCBpdGVtKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KHtcclxuICAgICAgICAgICAgdHlwZTogd2lkZ2V0TGFiZWwsXHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xvYWRlZCcsXHJcbiAgICAgICAgICAgIGl0ZW06IGl0ZW1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBSZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lID0gZnVuY3Rpb24gKGxhYmVsLCBpdGVtKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0UmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeSA9IG5ldyBNYXBfMS5kZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl93aWRnZXRSZWdpc3RyeS5oYXMobGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIndpZGdldCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgZm9yICdcIiArIGxhYmVsLnRvU3RyaW5nKCkgKyBcIidcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgaXRlbSk7XHJcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlXzEuZGVmYXVsdCkge1xyXG4gICAgICAgICAgICBpdGVtLnRoZW4oZnVuY3Rpb24gKHdpZGdldEN0b3IpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCB3aWRnZXRDdG9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB3aWRnZXRDdG9yO1xyXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBSZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lSW5qZWN0b3IgPSBmdW5jdGlvbiAobGFiZWwsIGluamVjdG9yRmFjdG9yeSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JSZWdpc3RyeSA9IG5ldyBNYXBfMS5kZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmhhcyhsYWJlbCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW5qZWN0b3IgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnXCIgKyBsYWJlbC50b1N0cmluZygpICsgXCInXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaW52YWxpZGF0b3IgPSBuZXcgRXZlbnRlZF8xLkV2ZW50ZWQoKTtcclxuICAgICAgICB2YXIgaW5qZWN0b3JJdGVtID0ge1xyXG4gICAgICAgICAgICBpbmplY3RvcjogaW5qZWN0b3JGYWN0b3J5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludmFsaWRhdG9yLmVtaXQoeyB0eXBlOiAnaW52YWxpZGF0ZScgfSk7IH0pLFxyXG4gICAgICAgICAgICBpbnZhbGlkYXRvcjogaW52YWxpZGF0b3JcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX2luamVjdG9yUmVnaXN0cnkuc2V0KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xyXG4gICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xyXG4gICAgfTtcclxuICAgIFJlZ2lzdHJ5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobGFiZWwpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICghdGhpcy5fd2lkZ2V0UmVnaXN0cnkgfHwgIXRoaXMuaGFzKGxhYmVsKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl93aWRnZXRSZWdpc3RyeS5nZXQobGFiZWwpO1xyXG4gICAgICAgIGlmIChpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlXzEuZGVmYXVsdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHByb21pc2UgPSBpdGVtKCk7XHJcbiAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCBwcm9taXNlKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHdpZGdldEN0b3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2lkZ2V0Q29uc3RydWN0b3JEZWZhdWx0RXhwb3J0KHdpZGdldEN0b3IpKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXRDdG9yID0gd2lkZ2V0Q3Rvci5kZWZhdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF90aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gd2lkZ2V0Q3RvcjtcclxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gICAgUmVnaXN0cnkucHJvdG90eXBlLmdldEluamVjdG9yID0gZnVuY3Rpb24gKGxhYmVsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbmplY3RvclJlZ2lzdHJ5IHx8ICF0aGlzLmhhc0luamVjdG9yKGxhYmVsKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luamVjdG9yUmVnaXN0cnkuZ2V0KGxhYmVsKTtcclxuICAgIH07XHJcbiAgICBSZWdpc3RyeS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fd2lkZ2V0UmVnaXN0cnkgJiYgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSk7XHJcbiAgICB9O1xyXG4gICAgUmVnaXN0cnkucHJvdG90eXBlLmhhc0luamVjdG9yID0gZnVuY3Rpb24gKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5faW5qZWN0b3JSZWdpc3RyeSAmJiB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmhhcyhsYWJlbCkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBSZWdpc3RyeTtcclxufShFdmVudGVkXzEuRXZlbnRlZCkpO1xyXG5leHBvcnRzLlJlZ2lzdHJ5ID0gUmVnaXN0cnk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IFJlZ2lzdHJ5O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL1JlZ2lzdHJ5LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9SZWdpc3RyeS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIE1hcF8xID0gcmVxdWlyZShcIkBkb2pvL3NoaW0vTWFwXCIpO1xyXG52YXIgRXZlbnRlZF8xID0gcmVxdWlyZShcIkBkb2pvL2NvcmUvRXZlbnRlZFwiKTtcclxudmFyIFJlZ2lzdHJ5XzEgPSByZXF1aXJlKFwiLi9SZWdpc3RyeVwiKTtcclxudmFyIFJlZ2lzdHJ5SGFuZGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIHRzbGliXzEuX19leHRlbmRzKFJlZ2lzdHJ5SGFuZGxlciwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFJlZ2lzdHJ5SGFuZGxlcigpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xyXG4gICAgICAgIF90aGlzLl9yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeV8xLlJlZ2lzdHJ5KCk7XHJcbiAgICAgICAgX3RoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXAgPSBuZXcgTWFwXzEuTWFwKCk7XHJcbiAgICAgICAgX3RoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcCA9IG5ldyBNYXBfMS5NYXAoKTtcclxuICAgICAgICBfdGhpcy5vd24oX3RoaXMuX3JlZ2lzdHJ5KTtcclxuICAgICAgICB2YXIgZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmJhc2VSZWdpc3RyeSkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXAuZGVsZXRlKF90aGlzLmJhc2VSZWdpc3RyeSk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwLmRlbGV0ZShfdGhpcy5iYXNlUmVnaXN0cnkpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYmFzZVJlZ2lzdHJ5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBfdGhpcy5vd24oeyBkZXN0cm95OiBkZXN0cm95IH0pO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWdpc3RyeUhhbmRsZXIucHJvdG90eXBlLCBcImJhc2VcIiwge1xyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGJhc2VSZWdpc3RyeSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlUmVnaXN0cnkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXAuZGVsZXRlKHRoaXMuYmFzZVJlZ2lzdHJ5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZVJlZ2lzdHJ5ID0gYmFzZVJlZ2lzdHJ5O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgUmVnaXN0cnlIYW5kbGVyLnByb3RvdHlwZS5kZWZpbmUgPSBmdW5jdGlvbiAobGFiZWwsIHdpZGdldCkge1xyXG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmRlZmluZShsYWJlbCwgd2lkZ2V0KTtcclxuICAgIH07XHJcbiAgICBSZWdpc3RyeUhhbmRsZXIucHJvdG90eXBlLmRlZmluZUluamVjdG9yID0gZnVuY3Rpb24gKGxhYmVsLCBpbmplY3Rvcikge1xyXG4gICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmRlZmluZUluamVjdG9yKGxhYmVsLCBpbmplY3Rvcik7XHJcbiAgICB9O1xyXG4gICAgUmVnaXN0cnlIYW5kbGVyLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVnaXN0cnkuaGFzKGxhYmVsKSB8fCBCb29sZWFuKHRoaXMuYmFzZVJlZ2lzdHJ5ICYmIHRoaXMuYmFzZVJlZ2lzdHJ5LmhhcyhsYWJlbCkpO1xyXG4gICAgfTtcclxuICAgIFJlZ2lzdHJ5SGFuZGxlci5wcm90b3R5cGUuaGFzSW5qZWN0b3IgPSBmdW5jdGlvbiAobGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpIHx8IEJvb2xlYW4odGhpcy5iYXNlUmVnaXN0cnkgJiYgdGhpcy5iYXNlUmVnaXN0cnkuaGFzSW5qZWN0b3IobGFiZWwpKTtcclxuICAgIH07XHJcbiAgICBSZWdpc3RyeUhhbmRsZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSkge1xyXG4gICAgICAgIGlmIChnbG9iYWxQcmVjZWRlbmNlID09PSB2b2lkIDApIHsgZ2xvYmFsUHJlY2VkZW5jZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSwgJ2dldCcsIHRoaXMuX3JlZ2lzdHJ5V2lkZ2V0TGFiZWxNYXApO1xyXG4gICAgfTtcclxuICAgIFJlZ2lzdHJ5SGFuZGxlci5wcm90b3R5cGUuZ2V0SW5qZWN0b3IgPSBmdW5jdGlvbiAobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UpIHtcclxuICAgICAgICBpZiAoZ2xvYmFsUHJlY2VkZW5jZSA9PT0gdm9pZCAwKSB7IGdsb2JhbFByZWNlZGVuY2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsICdnZXRJbmplY3RvcicsIHRoaXMuX3JlZ2lzdHJ5SW5qZWN0b3JMYWJlbE1hcCk7XHJcbiAgICB9O1xyXG4gICAgUmVnaXN0cnlIYW5kbGVyLnByb3RvdHlwZS5fZ2V0ID0gZnVuY3Rpb24gKGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCBnZXRGdW5jdGlvbk5hbWUsIGxhYmVsTWFwKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgcmVnaXN0cmllcyA9IGdsb2JhbFByZWNlZGVuY2UgPyBbdGhpcy5iYXNlUmVnaXN0cnksIHRoaXMuX3JlZ2lzdHJ5XSA6IFt0aGlzLl9yZWdpc3RyeSwgdGhpcy5iYXNlUmVnaXN0cnldO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVnaXN0cmllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVnaXN0cnkgPSByZWdpc3RyaWVzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIXJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IHJlZ2lzdHJ5W2dldEZ1bmN0aW9uTmFtZV0obGFiZWwpO1xyXG4gICAgICAgICAgICB2YXIgcmVnaXN0ZXJlZExhYmVscyA9IGxhYmVsTWFwLmdldChyZWdpc3RyeSkgfHwgW107XHJcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyZWdpc3RlcmVkTGFiZWxzLmluZGV4T2YobGFiZWwpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGhhbmRsZSA9IHJlZ2lzdHJ5Lm9uKGxhYmVsLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbG9hZGVkJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpc1tnZXRGdW5jdGlvbk5hbWVdKGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlKSA9PT0gZXZlbnQuaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KHsgdHlwZTogJ2ludmFsaWRhdGUnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vd24oaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgIGxhYmVsTWFwLnNldChyZWdpc3RyeSwgdHNsaWJfMS5fX3NwcmVhZChyZWdpc3RlcmVkTGFiZWxzLCBbbGFiZWxdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJlZ2lzdHJ5SGFuZGxlcjtcclxufShFdmVudGVkXzEuRXZlbnRlZCkpO1xyXG5leHBvcnRzLlJlZ2lzdHJ5SGFuZGxlciA9IFJlZ2lzdHJ5SGFuZGxlcjtcclxuZXhwb3J0cy5kZWZhdWx0ID0gUmVnaXN0cnlIYW5kbGVyO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL1JlZ2lzdHJ5SGFuZGxlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvUmVnaXN0cnlIYW5kbGVyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgTWFwXzEgPSByZXF1aXJlKFwiQGRvam8vc2hpbS9NYXBcIik7XHJcbnZhciBXZWFrTWFwXzEgPSByZXF1aXJlKFwiQGRvam8vc2hpbS9XZWFrTWFwXCIpO1xyXG52YXIgU3ltYm9sXzEgPSByZXF1aXJlKFwiQGRvam8vc2hpbS9TeW1ib2xcIik7XHJcbnZhciBkXzEgPSByZXF1aXJlKFwiLi9kXCIpO1xyXG52YXIgZGlmZl8xID0gcmVxdWlyZShcIi4vZGlmZlwiKTtcclxudmFyIFJlZ2lzdHJ5SGFuZGxlcl8xID0gcmVxdWlyZShcIi4vUmVnaXN0cnlIYW5kbGVyXCIpO1xyXG52YXIgTm9kZUhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL05vZGVIYW5kbGVyXCIpO1xyXG52YXIgdmRvbV8xID0gcmVxdWlyZShcIi4vdmRvbVwiKTtcclxudmFyIFJlZ2lzdHJ5XzEgPSByZXF1aXJlKFwiLi9SZWdpc3RyeVwiKTtcclxudmFyIGRlY29yYXRvck1hcCA9IG5ldyBNYXBfMS5kZWZhdWx0KCk7XHJcbnZhciBib3VuZEF1dG8gPSBkaWZmXzEuYXV0by5iaW5kKG51bGwpO1xyXG5leHBvcnRzLm5vQmluZCA9IFN5bWJvbF8xLmRlZmF1bHQuZm9yKCdkb2pvTm9CaW5kJyk7XHJcbi8qKlxyXG4gKiBNYWluIHdpZGdldCBiYXNlIGZvciBhbGwgd2lkZ2V0cyB0byBleHRlbmRcclxuICovXHJcbnZhciBXaWRnZXRCYXNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAY29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gV2lkZ2V0QmFzZSgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEluZGljYXRlcyBpZiBpdCBpcyB0aGUgaW5pdGlhbCBzZXQgcHJvcGVydGllcyBjeWNsZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID0gdHJ1ZTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBcnJheSBvZiBwcm9wZXJ0eSBrZXlzIGNvbnNpZGVyZWQgY2hhbmdlZCBmcm9tIHRoZSBwcmV2aW91cyBzZXQgcHJvcGVydGllc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMgPSBbXTtcclxuICAgICAgICB0aGlzLl9ub2RlSGFuZGxlciA9IG5ldyBOb2RlSGFuZGxlcl8xLmRlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLl9oYW5kbGVzID0gW107XHJcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcclxuICAgICAgICB0aGlzLl9kZWNvcmF0b3JDYWNoZSA9IG5ldyBNYXBfMS5kZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2JvdW5kUmVuZGVyRnVuYyA9IHRoaXMucmVuZGVyLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRJbnZhbGlkYXRlID0gdGhpcy5pbnZhbGlkYXRlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdmRvbV8xLndpZGdldEluc3RhbmNlTWFwLnNldCh0aGlzLCB7XHJcbiAgICAgICAgICAgIGRpcnR5OiB0cnVlLFxyXG4gICAgICAgICAgICBvbkF0dGFjaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMub25BdHRhY2goKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25EZXRhY2g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm9uRGV0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5vZGVIYW5kbGVyOiB0aGlzLl9ub2RlSGFuZGxlcixcclxuICAgICAgICAgICAgcmVnaXN0cnk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5yZWdpc3RyeTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29yZVByb3BlcnRpZXM6IHt9LFxyXG4gICAgICAgICAgICByZW5kZXJpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICBpbnB1dFByb3BlcnRpZXM6IHt9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fcnVuQWZ0ZXJDb25zdHJ1Y3RvcnMoKTtcclxuICAgIH1cclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLm1ldGEgPSBmdW5jdGlvbiAoTWV0YVR5cGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fbWV0YU1hcCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21ldGFNYXAgPSBuZXcgTWFwXzEuZGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2FjaGVkID0gdGhpcy5fbWV0YU1hcC5nZXQoTWV0YVR5cGUpO1xyXG4gICAgICAgIGlmICghY2FjaGVkKSB7XHJcbiAgICAgICAgICAgIGNhY2hlZCA9IG5ldyBNZXRhVHlwZSh7XHJcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlOiB0aGlzLl9ib3VuZEludmFsaWRhdGUsXHJcbiAgICAgICAgICAgICAgICBub2RlSGFuZGxlcjogdGhpcy5fbm9kZUhhbmRsZXIsXHJcbiAgICAgICAgICAgICAgICBiaW5kOiB0aGlzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLm93bihjYWNoZWQpO1xyXG4gICAgICAgICAgICB0aGlzLl9tZXRhTWFwLnNldChNZXRhVHlwZSwgY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcclxuICAgIH07XHJcbiAgICBXaWRnZXRCYXNlLnByb3RvdHlwZS5vbkF0dGFjaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXHJcbiAgICB9O1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUub25EZXRhY2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBieSBkZWZhdWx0LlxyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaWRnZXRCYXNlLnByb3RvdHlwZSwgXCJwcm9wZXJ0aWVzXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnRpZXM7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2lkZ2V0QmFzZS5wcm90b3R5cGUsIFwiY2hhbmdlZFByb3BlcnR5S2V5c1wiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fc3ByZWFkKHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUuX19zZXRDb3JlUHJvcGVydGllc19fID0gZnVuY3Rpb24gKGNvcmVQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgdmFyIGJhc2VSZWdpc3RyeSA9IGNvcmVQcm9wZXJ0aWVzLmJhc2VSZWdpc3RyeTtcclxuICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gdmRvbV8xLndpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcclxuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJhc2VSZWdpc3RyeSAhPT0gYmFzZVJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZWdpc3RyeSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeUhhbmRsZXJfMS5kZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5LmJhc2UgPSBiYXNlUmVnaXN0cnk7XHJcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMgPSBjb3JlUHJvcGVydGllcztcclxuICAgIH07XHJcbiAgICBXaWRnZXRCYXNlLnByb3RvdHlwZS5fX3NldFByb3BlcnRpZXNfXyA9IGZ1bmN0aW9uIChvcmlnaW5hbFByb3BlcnRpZXMpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBpbnN0YW5jZURhdGEgPSB2ZG9tXzEud2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5pbnB1dFByb3BlcnRpZXMgPSBvcmlnaW5hbFByb3BlcnRpZXM7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLl9ydW5CZWZvcmVQcm9wZXJ0aWVzKG9yaWdpbmFsUHJvcGVydGllcyk7XHJcbiAgICAgICAgdmFyIHJlZ2lzdGVyZWREaWZmUHJvcGVydHlOYW1lcyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdyZWdpc3RlcmVkRGlmZlByb3BlcnR5Jyk7XHJcbiAgICAgICAgdmFyIGNoYW5nZWRQcm9wZXJ0eUtleXMgPSBbXTtcclxuICAgICAgICB2YXIgcHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpO1xyXG4gICAgICAgIGlmICh0aGlzLl9pbml0aWFsUHJvcGVydGllcyA9PT0gZmFsc2UgfHwgcmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgYWxsUHJvcGVydGllcyA9IHRzbGliXzEuX19zcHJlYWQocHJvcGVydHlOYW1lcywgT2JqZWN0LmtleXModGhpcy5fcHJvcGVydGllcykpO1xyXG4gICAgICAgICAgICB2YXIgY2hlY2tlZFByb3BlcnRpZXMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIGRpZmZQcm9wZXJ0eVJlc3VsdHMgPSB7fTtcclxuICAgICAgICAgICAgdmFyIHJ1blJlYWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrZWRQcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNoZWNrZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c1Byb3BlcnR5ID0gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1Byb3BlcnR5ID0gdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHkocHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLCBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMuYmluZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBydW5SZWFjdGlvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWZmRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoXCJkaWZmUHJvcGVydHk6XCIgKyBwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlfMSA9IDA7IGlfMSA8IGRpZmZGdW5jdGlvbnMubGVuZ3RoOyBpXzErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZGlmZkZ1bmN0aW9uc1tpXzFdKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VkICYmIGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmUHJvcGVydHlSZXN1bHRzW3Byb3BlcnR5TmFtZV0gPSByZXN1bHQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYm91bmRBdXRvKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNoYW5nZWQgJiYgY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0eUtleXMucHVzaChwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lIGluIHByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlmZlByb3BlcnR5UmVzdWx0c1twcm9wZXJ0eU5hbWVdID0gcmVzdWx0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocnVuUmVhY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXBEaWZmUHJvcGVydHlSZWFjdGlvbnMocHJvcGVydGllcywgY2hhbmdlZFByb3BlcnR5S2V5cykuZm9yRWFjaChmdW5jdGlvbiAoYXJncywgcmVhY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5jaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmNhbGwoX3RoaXMsIGFyZ3MucHJldmlvdXNQcm9wZXJ0aWVzLCBhcmdzLm5ld1Byb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBkaWZmUHJvcGVydHlSZXN1bHRzO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gY2hhbmdlZFByb3BlcnR5S2V5cztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxQcm9wZXJ0aWVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5KHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSwgaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzLmJpbmQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cyA9IGNoYW5nZWRQcm9wZXJ0eUtleXM7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB0c2xpYl8xLl9fYXNzaWduKHt9LCBwcm9wZXJ0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpZGdldEJhc2UucHJvdG90eXBlLCBcImNoaWxkcmVuXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUuX19zZXRDaGlsZHJlbl9fID0gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA+IDAgfHwgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUuX19yZW5kZXJfXyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gdmRvbV8xLndpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcclxuICAgICAgICBpbnN0YW5jZURhdGEuZGlydHkgPSBmYWxzZTtcclxuICAgICAgICB2YXIgcmVuZGVyID0gdGhpcy5fcnVuQmVmb3JlUmVuZGVycygpO1xyXG4gICAgICAgIHZhciBkTm9kZSA9IHJlbmRlcigpO1xyXG4gICAgICAgIGROb2RlID0gdGhpcy5ydW5BZnRlclJlbmRlcnMoZE5vZGUpO1xyXG4gICAgICAgIHRoaXMuX25vZGVIYW5kbGVyLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuIGROb2RlO1xyXG4gICAgfTtcclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLmludmFsaWRhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IHZkb21fMS53aWRnZXRJbnN0YW5jZU1hcC5nZXQodGhpcyk7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZF8xLnYoJ2RpdicsIHt9LCB0aGlzLmNoaWxkcmVuKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHRvIGFkZCBkZWNvcmF0b3JzIHRvIFdpZGdldEJhc2VcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxyXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZGVjb3JhdG9yXHJcbiAgICAgKi9cclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLmFkZERlY29yYXRvciA9IGZ1bmN0aW9uIChkZWNvcmF0b3JLZXksIHZhbHVlKSB7XHJcbiAgICAgICAgdmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcclxuICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eSgnY29uc3RydWN0b3InKSkge1xyXG4gICAgICAgICAgICB2YXIgZGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvck1hcC5nZXQodGhpcy5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIGlmICghZGVjb3JhdG9yTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yTGlzdCA9IG5ldyBNYXBfMS5kZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JNYXAuc2V0KHRoaXMuY29uc3RydWN0b3IsIGRlY29yYXRvckxpc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBzcGVjaWZpY0RlY29yYXRvckxpc3QgPSBkZWNvcmF0b3JMaXN0LmdldChkZWNvcmF0b3JLZXkpO1xyXG4gICAgICAgICAgICBpZiAoIXNwZWNpZmljRGVjb3JhdG9yTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgc3BlY2lmaWNEZWNvcmF0b3JMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JMaXN0LnNldChkZWNvcmF0b3JLZXksIHNwZWNpZmljRGVjb3JhdG9yTGlzdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3BlY2lmaWNEZWNvcmF0b3JMaXN0LnB1c2guYXBwbHkoc3BlY2lmaWNEZWNvcmF0b3JMaXN0LCB0c2xpYl8xLl9fc3ByZWFkKHZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZGVjb3JhdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKGRlY29yYXRvcktleSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlY29yYXRvckNhY2hlLnNldChkZWNvcmF0b3JLZXksIHRzbGliXzEuX19zcHJlYWQoZGVjb3JhdG9ycywgdmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiB0byBidWlsZCB0aGUgbGlzdCBvZiBkZWNvcmF0b3JzIGZyb20gdGhlIGdsb2JhbCBkZWNvcmF0b3IgbWFwLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBkZWNvcmF0b3JLZXkgIFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxyXG4gICAgICogQHJldHVybiBBbiBhcnJheSBvZiBkZWNvcmF0b3IgdmFsdWVzXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBXaWRnZXRCYXNlLnByb3RvdHlwZS5fYnVpbGREZWNvcmF0b3JMaXN0ID0gZnVuY3Rpb24gKGRlY29yYXRvcktleSkge1xyXG4gICAgICAgIHZhciBhbGxEZWNvcmF0b3JzID0gW107XHJcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcclxuICAgICAgICB3aGlsZSAoY29uc3RydWN0b3IpIHtcclxuICAgICAgICAgICAgdmFyIGluc3RhbmNlTWFwID0gZGVjb3JhdG9yTWFwLmdldChjb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU1hcCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlY29yYXRvcnMgPSBpbnN0YW5jZU1hcC5nZXQoZGVjb3JhdG9yS2V5KTtcclxuICAgICAgICAgICAgICAgIGlmIChkZWNvcmF0b3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsRGVjb3JhdG9ycy51bnNoaWZ0LmFwcGx5KGFsbERlY29yYXRvcnMsIHRzbGliXzEuX19zcHJlYWQoZGVjb3JhdG9ycykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNvbnN0cnVjdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFsbERlY29yYXRvcnM7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiB0byByZXRyaWV2ZSBkZWNvcmF0b3IgdmFsdWVzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSBUaGUga2V5IG9mIHRoZSBkZWNvcmF0b3JcclxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGRlY29yYXRvciB2YWx1ZXNcclxuICAgICAqL1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUuZ2V0RGVjb3JhdG9yID0gZnVuY3Rpb24gKGRlY29yYXRvcktleSkge1xyXG4gICAgICAgIHZhciBhbGxEZWNvcmF0b3JzID0gdGhpcy5fZGVjb3JhdG9yQ2FjaGUuZ2V0KGRlY29yYXRvcktleSk7XHJcbiAgICAgICAgaWYgKGFsbERlY29yYXRvcnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcclxuICAgICAgICB9XHJcbiAgICAgICAgYWxsRGVjb3JhdG9ycyA9IHRoaXMuX2J1aWxkRGVjb3JhdG9yTGlzdChkZWNvcmF0b3JLZXkpO1xyXG4gICAgICAgIHRoaXMuX2RlY29yYXRvckNhY2hlLnNldChkZWNvcmF0b3JLZXksIGFsbERlY29yYXRvcnMpO1xyXG4gICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xyXG4gICAgfTtcclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLl9tYXBEaWZmUHJvcGVydHlSZWFjdGlvbnMgPSBmdW5jdGlvbiAobmV3UHJvcGVydGllcywgY2hhbmdlZFByb3BlcnR5S2V5cykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHJlYWN0aW9uRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicpO1xyXG4gICAgICAgIHJldHVybiByZWFjdGlvbkZ1bmN0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHJlYWN0aW9uUHJvcGVydHlNYXAsIF9hKSB7XHJcbiAgICAgICAgICAgIHZhciByZWFjdGlvbiA9IF9hLnJlYWN0aW9uLCBwcm9wZXJ0eU5hbWUgPSBfYS5wcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgICAgIHZhciByZWFjdGlvbkFyZ3VtZW50cyA9IHJlYWN0aW9uUHJvcGVydHlNYXAuZ2V0KHJlYWN0aW9uKTtcclxuICAgICAgICAgICAgaWYgKHJlYWN0aW9uQXJndW1lbnRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlYWN0aW9uQXJndW1lbnRzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUHJvcGVydGllczoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3UHJvcGVydGllczoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVhY3Rpb25Bcmd1bWVudHMucHJldmlvdXNQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBfdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgICByZWFjdGlvbkFyZ3VtZW50cy5uZXdQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBuZXdQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydHlLZXlzLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJlYWN0aW9uQXJndW1lbnRzLmNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlYWN0aW9uUHJvcGVydHlNYXAuc2V0KHJlYWN0aW9uLCByZWFjdGlvbkFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWFjdGlvblByb3BlcnR5TWFwO1xyXG4gICAgICAgIH0sIG5ldyBNYXBfMS5kZWZhdWx0KCkpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQmluZHMgdW5ib3VuZCBwcm9wZXJ0eSBmdW5jdGlvbnMgdG8gdGhlIHNwZWNpZmllZCBgYmluZGAgcHJvcGVydHlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBwcm9wZXJ0aWVzIHRvIGNoZWNrIGZvciBmdW5jdGlvbnNcclxuICAgICAqL1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUuX2JpbmRGdW5jdGlvblByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5LCBiaW5kKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJyAmJiAhcHJvcGVydHlbZXhwb3J0cy5ub0JpbmRdICYmIFJlZ2lzdHJ5XzEuaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IocHJvcGVydHkpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHlNYXAgPSBuZXcgV2Vha01hcF8xLmRlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYmluZEluZm8gPSB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcC5nZXQocHJvcGVydHkpIHx8IHt9O1xyXG4gICAgICAgICAgICB2YXIgYm91bmRGdW5jID0gYmluZEluZm8uYm91bmRGdW5jLCBzY29wZSA9IGJpbmRJbmZvLnNjb3BlO1xyXG4gICAgICAgICAgICBpZiAoYm91bmRGdW5jID09PSB1bmRlZmluZWQgfHwgc2NvcGUgIT09IGJpbmQpIHtcclxuICAgICAgICAgICAgICAgIGJvdW5kRnVuYyA9IHByb3BlcnR5LmJpbmQoYmluZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcC5zZXQocHJvcGVydHksIHsgYm91bmRGdW5jOiBib3VuZEZ1bmMsIHNjb3BlOiBiaW5kIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBib3VuZEZ1bmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2lkZ2V0QmFzZS5wcm90b3R5cGUsIFwicmVnaXN0cnlcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyXzEuZGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vd24odGhpcy5fcmVnaXN0cnkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vd24odGhpcy5fcmVnaXN0cnkub24oJ2ludmFsaWRhdGUnLCB0aGlzLl9ib3VuZEludmFsaWRhdGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVnaXN0cnk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBXaWRnZXRCYXNlLnByb3RvdHlwZS5fcnVuQmVmb3JlUHJvcGVydGllcyA9IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgYmVmb3JlUHJvcGVydGllcyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiZWZvcmVQcm9wZXJ0aWVzJyk7XHJcbiAgICAgICAgaWYgKGJlZm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmVmb3JlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHByb3BlcnRpZXMsIGJlZm9yZVByb3BlcnRpZXNGdW5jdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRzbGliXzEuX19hc3NpZ24oe30sIHByb3BlcnRpZXMsIGJlZm9yZVByb3BlcnRpZXNGdW5jdGlvbi5jYWxsKF90aGlzLCBwcm9wZXJ0aWVzKSk7XHJcbiAgICAgICAgICAgIH0sIHRzbGliXzEuX19hc3NpZ24oe30sIHByb3BlcnRpZXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYmVmb3JlIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgdXBkYXRlZCByZW5kZXIgbWV0aG9kXHJcbiAgICAgKi9cclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLl9ydW5CZWZvcmVSZW5kZXJzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGJlZm9yZVJlbmRlcnMgPSB0aGlzLmdldERlY29yYXRvcignYmVmb3JlUmVuZGVyJyk7XHJcbiAgICAgICAgaWYgKGJlZm9yZVJlbmRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmVmb3JlUmVuZGVycy5yZWR1Y2UoZnVuY3Rpb24gKHJlbmRlciwgYmVmb3JlUmVuZGVyRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciB1cGRhdGVkUmVuZGVyID0gYmVmb3JlUmVuZGVyRnVuY3Rpb24uY2FsbChfdGhpcywgcmVuZGVyLCBfdGhpcy5fcHJvcGVydGllcywgX3RoaXMuX2NoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFJlbmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUmVuZGVyIGZ1bmN0aW9uIG5vdCByZXR1cm5lZCBmcm9tIGJlZm9yZVJlbmRlciwgdXNpbmcgcHJldmlvdXMgcmVuZGVyJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkUmVuZGVyO1xyXG4gICAgICAgICAgICB9LCB0aGlzLl9ib3VuZFJlbmRlckZ1bmMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fYm91bmRSZW5kZXJGdW5jO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUnVuIGFsbCByZWdpc3RlcmVkIGFmdGVyIHJlbmRlcnMgYW5kIHJldHVybiB0aGUgZGVjb3JhdGVkIEROb2Rlc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBkTm9kZSBUaGUgRE5vZGVzIHRvIHJ1biB0aHJvdWdoIHRoZSBhZnRlciByZW5kZXJzXHJcbiAgICAgKi9cclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLnJ1bkFmdGVyUmVuZGVycyA9IGZ1bmN0aW9uIChkTm9kZSkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGFmdGVyUmVuZGVycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdhZnRlclJlbmRlcicpO1xyXG4gICAgICAgIGlmIChhZnRlclJlbmRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYWZ0ZXJSZW5kZXJzLnJlZHVjZShmdW5jdGlvbiAoZE5vZGUsIGFmdGVyUmVuZGVyRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhZnRlclJlbmRlckZ1bmN0aW9uLmNhbGwoX3RoaXMsIGROb2RlKTtcclxuICAgICAgICAgICAgfSwgZE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbWV0YU1hcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21ldGFNYXAuZm9yRWFjaChmdW5jdGlvbiAobWV0YSkge1xyXG4gICAgICAgICAgICAgICAgbWV0YS5hZnRlclJlbmRlcigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGROb2RlO1xyXG4gICAgfTtcclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLl9ydW5BZnRlckNvbnN0cnVjdG9ycyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBhZnRlckNvbnN0cnVjdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdhZnRlckNvbnN0cnVjdG9yJyk7XHJcbiAgICAgICAgaWYgKGFmdGVyQ29uc3RydWN0b3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYWZ0ZXJDb25zdHJ1Y3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoYWZ0ZXJDb25zdHJ1Y3RvcikgeyByZXR1cm4gYWZ0ZXJDb25zdHJ1Y3Rvci5jYWxsKF90aGlzKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLm93biA9IGZ1bmN0aW9uIChoYW5kbGUpIHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVzLnB1c2goaGFuZGxlKTtcclxuICAgIH07XHJcbiAgICBXaWRnZXRCYXNlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLl9oYW5kbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IHRoaXMuX2hhbmRsZXMucG9wKCk7XHJcbiAgICAgICAgICAgIGlmIChoYW5kbGUpIHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZS5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBzdGF0aWMgaWRlbnRpZmllclxyXG4gICAgICovXHJcbiAgICBXaWRnZXRCYXNlLl90eXBlID0gUmVnaXN0cnlfMS5XSURHRVRfQkFTRV9UWVBFO1xyXG4gICAgcmV0dXJuIFdpZGdldEJhc2U7XHJcbn0oKSk7XHJcbmV4cG9ydHMuV2lkZ2V0QmFzZSA9IFdpZGdldEJhc2U7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IFdpZGdldEJhc2U7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICcnO1xyXG52YXIgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJyc7XHJcbmZ1bmN0aW9uIGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQpIHtcclxuICAgIGlmICgnV2Via2l0VHJhbnNpdGlvbicgaW4gZWxlbWVudC5zdHlsZSkge1xyXG4gICAgICAgIGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUgPSAnd2Via2l0VHJhbnNpdGlvbkVuZCc7XHJcbiAgICAgICAgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgndHJhbnNpdGlvbicgaW4gZWxlbWVudC5zdHlsZSB8fCAnTW96VHJhbnNpdGlvbicgaW4gZWxlbWVudC5zdHlsZSkge1xyXG4gICAgICAgIGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUgPSAndHJhbnNpdGlvbmVuZCc7XHJcbiAgICAgICAgYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID0gJ2FuaW1hdGlvbmVuZCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdXIgYnJvd3NlciBpcyBub3Qgc3VwcG9ydGVkJyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaW5pdGlhbGl6ZShlbGVtZW50KSB7XHJcbiAgICBpZiAoYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lID09PSAnJykge1xyXG4gICAgICAgIGRldGVybWluZUJyb3dzZXJTdHlsZU5hbWVzKGVsZW1lbnQpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJ1bkFuZENsZWFuVXAoZWxlbWVudCwgc3RhcnRBbmltYXRpb24sIGZpbmlzaEFuaW1hdGlvbikge1xyXG4gICAgaW5pdGlhbGl6ZShlbGVtZW50KTtcclxuICAgIHZhciBmaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgdmFyIHRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xyXG4gICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XHJcbiAgICAgICAgICAgIGZpbmlzaEFuaW1hdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBzdGFydEFuaW1hdGlvbigpO1xyXG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY0FuaW1hdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XHJcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSwgdHJhbnNpdGlvbkVuZCk7XHJcbn1cclxuZnVuY3Rpb24gZXhpdChub2RlLCBwcm9wZXJ0aWVzLCBleGl0QW5pbWF0aW9uLCByZW1vdmVOb2RlKSB7XHJcbiAgICB2YXIgYWN0aXZlQ2xhc3MgPSBwcm9wZXJ0aWVzLmV4aXRBbmltYXRpb25BY3RpdmUgfHwgZXhpdEFuaW1hdGlvbiArIFwiLWFjdGl2ZVwiO1xyXG4gICAgcnVuQW5kQ2xlYW5VcChub2RlLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGV4aXRBbmltYXRpb24pO1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChhY3RpdmVDbGFzcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmVtb3ZlTm9kZSgpO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gZW50ZXIobm9kZSwgcHJvcGVydGllcywgZW50ZXJBbmltYXRpb24pIHtcclxuICAgIHZhciBhY3RpdmVDbGFzcyA9IHByb3BlcnRpZXMuZW50ZXJBbmltYXRpb25BY3RpdmUgfHwgZW50ZXJBbmltYXRpb24gKyBcIi1hY3RpdmVcIjtcclxuICAgIHJ1bkFuZENsZWFuVXAobm9kZSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChlbnRlckFuaW1hdGlvbik7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoZW50ZXJBbmltYXRpb24pO1xyXG4gICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShhY3RpdmVDbGFzcyk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSB7XHJcbiAgICBlbnRlcjogZW50ZXIsXHJcbiAgICBleGl0OiBleGl0XHJcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIFN5bWJvbF8xID0gcmVxdWlyZShcIkBkb2pvL3NoaW0vU3ltYm9sXCIpO1xyXG4vKipcclxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFdOb2RlIHR5cGVcclxuICovXHJcbmV4cG9ydHMuV05PREUgPSBTeW1ib2xfMS5kZWZhdWx0KCdJZGVudGlmaWVyIGZvciBhIFdOb2RlLicpO1xyXG4vKipcclxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFZOb2RlIHR5cGVcclxuICovXHJcbmV4cG9ydHMuVk5PREUgPSBTeW1ib2xfMS5kZWZhdWx0KCdJZGVudGlmaWVyIGZvciBhIFZOb2RlLicpO1xyXG4vKipcclxuICogVGhlIHN5bWJvbCBpZGVudGlmaWVyIGZvciBhIFZOb2RlIHR5cGUgY3JlYXRlZCB1c2luZyBkb20oKVxyXG4gKi9cclxuZXhwb3J0cy5ET01WTk9ERSA9IFN5bWJvbF8xLmRlZmF1bHQoJ0lkZW50aWZpZXIgZm9yIGEgVk5vZGUgY3JlYXRlZCB1c2luZyBleGlzdGluZyBkb20uJyk7XHJcbi8qKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgV05vZGVgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcclxuICovXHJcbmZ1bmN0aW9uIGlzV05vZGUoY2hpbGQpIHtcclxuICAgIHJldHVybiBCb29sZWFuKGNoaWxkICYmIHR5cGVvZiBjaGlsZCAhPT0gJ3N0cmluZycgJiYgY2hpbGQudHlwZSA9PT0gZXhwb3J0cy5XTk9ERSk7XHJcbn1cclxuZXhwb3J0cy5pc1dOb2RlID0gaXNXTm9kZTtcclxuLyoqXHJcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgYEROb2RlYCBpcyBhIGBWTm9kZWAgdXNpbmcgdGhlIGB0eXBlYCBwcm9wZXJ0eVxyXG4gKi9cclxuZnVuY3Rpb24gaXNWTm9kZShjaGlsZCkge1xyXG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiAoY2hpbGQudHlwZSA9PT0gZXhwb3J0cy5WTk9ERSB8fCBjaGlsZC50eXBlID09PSBleHBvcnRzLkRPTVZOT0RFKSk7XHJcbn1cclxuZXhwb3J0cy5pc1ZOb2RlID0gaXNWTm9kZTtcclxuLyoqXHJcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgYEROb2RlYCBpcyBhIGBWTm9kZWAgY3JlYXRlZCB3aXRoIGBkb20oKWAgdXNpbmcgdGhlIGB0eXBlYCBwcm9wZXJ0eVxyXG4gKi9cclxuZnVuY3Rpb24gaXNEb21WTm9kZShjaGlsZCkge1xyXG4gICAgcmV0dXJuIEJvb2xlYW4oY2hpbGQgJiYgdHlwZW9mIGNoaWxkICE9PSAnc3RyaW5nJyAmJiBjaGlsZC50eXBlID09PSBleHBvcnRzLkRPTVZOT0RFKTtcclxufVxyXG5leHBvcnRzLmlzRG9tVk5vZGUgPSBpc0RvbVZOb2RlO1xyXG5mdW5jdGlvbiBpc0VsZW1lbnROb2RlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gISF2YWx1ZS50YWdOYW1lO1xyXG59XHJcbmV4cG9ydHMuaXNFbGVtZW50Tm9kZSA9IGlzRWxlbWVudE5vZGU7XHJcbmZ1bmN0aW9uIGRlY29yYXRlKGROb2Rlcywgb3B0aW9uc09yTW9kaWZpZXIsIHByZWRpY2F0ZSkge1xyXG4gICAgdmFyIHNoYWxsb3cgPSBmYWxzZTtcclxuICAgIHZhciBtb2RpZmllcjtcclxuICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yTW9kaWZpZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBtb2RpZmllciA9IG9wdGlvbnNPck1vZGlmaWVyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbW9kaWZpZXIgPSBvcHRpb25zT3JNb2RpZmllci5tb2RpZmllcjtcclxuICAgICAgICBwcmVkaWNhdGUgPSBvcHRpb25zT3JNb2RpZmllci5wcmVkaWNhdGU7XHJcbiAgICAgICAgc2hhbGxvdyA9IG9wdGlvbnNPck1vZGlmaWVyLnNoYWxsb3cgfHwgZmFsc2U7XHJcbiAgICB9XHJcbiAgICB2YXIgbm9kZXMgPSBBcnJheS5pc0FycmF5KGROb2RlcykgPyB0c2xpYl8xLl9fc3ByZWFkKGROb2RlcykgOiBbZE5vZGVzXTtcclxuICAgIGZ1bmN0aW9uIGJyZWFrZXIoKSB7XHJcbiAgICAgICAgbm9kZXMgPSBbXTtcclxuICAgIH1cclxuICAgIHdoaWxlIChub2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICAgICAgaWYgKCFzaGFsbG93ICYmIChpc1dOb2RlKG5vZGUpIHx8IGlzVk5vZGUobm9kZSkpICYmIG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIG5vZGVzID0gdHNsaWJfMS5fX3NwcmVhZChub2Rlcywgbm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBtb2RpZmllcihub2RlLCBicmVha2VyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkTm9kZXM7XHJcbn1cclxuZXhwb3J0cy5kZWNvcmF0ZSA9IGRlY29yYXRlO1xyXG4vKipcclxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgY2FsbHMgdG8gY3JlYXRlIGEgd2lkZ2V0LlxyXG4gKi9cclxuZnVuY3Rpb24gdyh3aWRnZXRDb25zdHJ1Y3RvciwgcHJvcGVydGllcywgY2hpbGRyZW4pIHtcclxuICAgIGlmIChjaGlsZHJlbiA9PT0gdm9pZCAwKSB7IGNoaWxkcmVuID0gW107IH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxyXG4gICAgICAgIHdpZGdldENvbnN0cnVjdG9yOiB3aWRnZXRDb25zdHJ1Y3RvcixcclxuICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxyXG4gICAgICAgIHR5cGU6IGV4cG9ydHMuV05PREVcclxuICAgIH07XHJcbn1cclxuZXhwb3J0cy53ID0gdztcclxuZnVuY3Rpb24gdih0YWcsIHByb3BlcnRpZXNPckNoaWxkcmVuLCBjaGlsZHJlbikge1xyXG4gICAgaWYgKHByb3BlcnRpZXNPckNoaWxkcmVuID09PSB2b2lkIDApIHsgcHJvcGVydGllc09yQ2hpbGRyZW4gPSB7fTsgfVxyXG4gICAgaWYgKGNoaWxkcmVuID09PSB2b2lkIDApIHsgY2hpbGRyZW4gPSB1bmRlZmluZWQ7IH1cclxuICAgIHZhciBwcm9wZXJ0aWVzID0gcHJvcGVydGllc09yQ2hpbGRyZW47XHJcbiAgICB2YXIgZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2s7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzT3JDaGlsZHJlbikpIHtcclxuICAgICAgICBjaGlsZHJlbiA9IHByb3BlcnRpZXNPckNoaWxkcmVuO1xyXG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID0gcHJvcGVydGllcztcclxuICAgICAgICBwcm9wZXJ0aWVzID0ge307XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHRhZzogdGFnLFxyXG4gICAgICAgIGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrOiBkZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayxcclxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXHJcbiAgICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyxcclxuICAgICAgICB0eXBlOiBleHBvcnRzLlZOT0RFXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMudiA9IHY7XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBWTm9kZSBmb3IgYW4gZXhpc3RpbmcgRE9NIE5vZGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBkb20oX2EsIGNoaWxkcmVuKSB7XHJcbiAgICB2YXIgbm9kZSA9IF9hLm5vZGUsIF9iID0gX2EuYXR0cnMsIGF0dHJzID0gX2IgPT09IHZvaWQgMCA/IHt9IDogX2IsIF9jID0gX2EucHJvcHMsIHByb3BzID0gX2MgPT09IHZvaWQgMCA/IHt9IDogX2MsIF9kID0gX2Eub24sIG9uID0gX2QgPT09IHZvaWQgMCA/IHt9IDogX2QsIF9lID0gX2EuZGlmZlR5cGUsIGRpZmZUeXBlID0gX2UgPT09IHZvaWQgMCA/ICdub25lJyA6IF9lO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0YWc6IGlzRWxlbWVudE5vZGUobm9kZSkgPyBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA6ICcnLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHByb3BzLFxyXG4gICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJzLFxyXG4gICAgICAgIGV2ZW50czogb24sXHJcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxyXG4gICAgICAgIHR5cGU6IGV4cG9ydHMuRE9NVk5PREUsXHJcbiAgICAgICAgZG9tTm9kZTogbm9kZSxcclxuICAgICAgICB0ZXh0OiBpc0VsZW1lbnROb2RlKG5vZGUpID8gdW5kZWZpbmVkIDogbm9kZS5kYXRhLFxyXG4gICAgICAgIGRpZmZUeXBlOiBkaWZmVHlwZVxyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLmRvbSA9IGRvbTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBoYW5kbGVEZWNvcmF0b3JfMSA9IHJlcXVpcmUoXCIuL2hhbmRsZURlY29yYXRvclwiKTtcclxuZnVuY3Rpb24gYWZ0ZXJSZW5kZXIobWV0aG9kKSB7XHJcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yXzEuaGFuZGxlRGVjb3JhdG9yKGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XHJcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYWZ0ZXJSZW5kZXInLCBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiBtZXRob2QpO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5hZnRlclJlbmRlciA9IGFmdGVyUmVuZGVyO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBhZnRlclJlbmRlcjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2FmdGVyUmVuZGVyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBoYW5kbGVEZWNvcmF0b3JfMSA9IHJlcXVpcmUoXCIuL2hhbmRsZURlY29yYXRvclwiKTtcclxudmFyIGJlZm9yZVByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2JlZm9yZVByb3BlcnRpZXNcIik7XHJcbmZ1bmN0aW9uIGFsd2F5c1JlbmRlcigpIHtcclxuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3JfMS5oYW5kbGVEZWNvcmF0b3IoZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcclxuICAgICAgICBiZWZvcmVQcm9wZXJ0aWVzXzEuYmVmb3JlUHJvcGVydGllcyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgIH0pKHRhcmdldCk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLmFsd2F5c1JlbmRlciA9IGFsd2F5c1JlbmRlcjtcclxuZXhwb3J0cy5kZWZhdWx0ID0gYWx3YXlzUmVuZGVyO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2Fsd2F5c1JlbmRlci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgaGFuZGxlRGVjb3JhdG9yXzEgPSByZXF1aXJlKFwiLi9oYW5kbGVEZWNvcmF0b3JcIik7XHJcbmZ1bmN0aW9uIGJlZm9yZVByb3BlcnRpZXMobWV0aG9kKSB7XHJcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yXzEuaGFuZGxlRGVjb3JhdG9yKGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XHJcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmVmb3JlUHJvcGVydGllcycsIHByb3BlcnR5S2V5ID8gdGFyZ2V0W3Byb3BlcnR5S2V5XSA6IG1ldGhvZCk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLmJlZm9yZVByb3BlcnRpZXMgPSBiZWZvcmVQcm9wZXJ0aWVzO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBiZWZvcmVQcm9wZXJ0aWVzO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYmVmb3JlUHJvcGVydGllcy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9iZWZvcmVQcm9wZXJ0aWVzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciByZWdpc3RlckN1c3RvbUVsZW1lbnRfMSA9IHJlcXVpcmUoXCIuLi9yZWdpc3RlckN1c3RvbUVsZW1lbnRcIik7XHJcbnZhciBSZWdpc3RyeV8xID0gcmVxdWlyZShcIi4uL1JlZ2lzdHJ5XCIpO1xyXG4vKipcclxuICogVGhpcyBEZWNvcmF0b3IgaXMgcHJvdmlkZWQgcHJvcGVydGllcyB0aGF0IGRlZmluZSB0aGUgYmVoYXZpb3Igb2YgYSBjdXN0b20gZWxlbWVudCwgYW5kXHJcbiAqIHJlZ2lzdGVycyB0aGF0IGN1c3RvbSBlbGVtZW50LlxyXG4gKi9cclxuZnVuY3Rpb24gY3VzdG9tRWxlbWVudChfYSkge1xyXG4gICAgdmFyIHRhZyA9IF9hLnRhZywgX2IgPSBfYS5wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzID0gX2IgPT09IHZvaWQgMCA/IFtdIDogX2IsIF9jID0gX2EuYXR0cmlidXRlcywgYXR0cmlidXRlcyA9IF9jID09PSB2b2lkIDAgPyBbXSA6IF9jLCBfZCA9IF9hLmV2ZW50cywgZXZlbnRzID0gX2QgPT09IHZvaWQgMCA/IFtdIDogX2QsIF9lID0gX2EuY2hpbGRUeXBlLCBjaGlsZFR5cGUgPSBfZSA9PT0gdm9pZCAwID8gcmVnaXN0ZXJDdXN0b21FbGVtZW50XzEuQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPIDogX2UsIF9mID0gX2EucmVnaXN0cnlGYWN0b3J5LCByZWdpc3RyeUZhY3RvcnkgPSBfZiA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFJlZ2lzdHJ5XzEuZGVmYXVsdCgpOyB9IDogX2Y7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldC5wcm90b3R5cGUuX19jdXN0b21FbGVtZW50RGVzY3JpcHRvciA9IHtcclxuICAgICAgICAgICAgdGFnTmFtZTogdGFnLFxyXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgICBldmVudHM6IGV2ZW50cyxcclxuICAgICAgICAgICAgY2hpbGRUeXBlOiBjaGlsZFR5cGUsXHJcbiAgICAgICAgICAgIHJlZ2lzdHJ5RmFjdG9yeTogcmVnaXN0cnlGYWN0b3J5XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbn1cclxuZXhwb3J0cy5jdXN0b21FbGVtZW50ID0gY3VzdG9tRWxlbWVudDtcclxuZXhwb3J0cy5kZWZhdWx0ID0gY3VzdG9tRWxlbWVudDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2N1c3RvbUVsZW1lbnQuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvY3VzdG9tRWxlbWVudC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgaGFuZGxlRGVjb3JhdG9yXzEgPSByZXF1aXJlKFwiLi9oYW5kbGVEZWNvcmF0b3JcIik7XHJcbi8qKlxyXG4gKiBEZWNvcmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZWdpc3RlciBhIGZ1bmN0aW9uIGFzIGEgc3BlY2lmaWMgcHJvcGVydHkgZGlmZlxyXG4gKlxyXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lICBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgb2Ygd2hpY2ggdGhlIGRpZmYgZnVuY3Rpb24gaXMgYXBwbGllZFxyXG4gKiBAcGFyYW0gZGlmZlR5cGUgICAgICBUaGUgZGlmZiB0eXBlLCBkZWZhdWx0IGlzIERpZmZUeXBlLkFVVE8uXHJcbiAqIEBwYXJhbSBkaWZmRnVuY3Rpb24gIEEgZGlmZiBmdW5jdGlvbiB0byBydW4gaWYgZGlmZlR5cGUgaWYgRGlmZlR5cGUuQ1VTVE9NXHJcbiAqL1xyXG5mdW5jdGlvbiBkaWZmUHJvcGVydHkocHJvcGVydHlOYW1lLCBkaWZmRnVuY3Rpb24sIHJlYWN0aW9uRnVuY3Rpb24pIHtcclxuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3JfMS5oYW5kbGVEZWNvcmF0b3IoZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcclxuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKFwiZGlmZlByb3BlcnR5OlwiICsgcHJvcGVydHlOYW1lLCBkaWZmRnVuY3Rpb24uYmluZChudWxsKSk7XHJcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcigncmVnaXN0ZXJlZERpZmZQcm9wZXJ0eScsIHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgaWYgKHJlYWN0aW9uRnVuY3Rpb24gfHwgcHJvcGVydHlLZXkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignZGlmZlJlYWN0aW9uJywge1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICAgICAgICByZWFjdGlvbjogcHJvcGVydHlLZXkgPyB0YXJnZXRbcHJvcGVydHlLZXldIDogcmVhY3Rpb25GdW5jdGlvblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLmRpZmZQcm9wZXJ0eSA9IGRpZmZQcm9wZXJ0eTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gZGlmZlByb3BlcnR5O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4vKipcclxuICogR2VuZXJpYyBkZWNvcmF0b3IgaGFuZGxlciB0byB0YWtlIGNhcmUgb2Ygd2hldGhlciBvciBub3QgdGhlIGRlY29yYXRvciB3YXMgY2FsbGVkIGF0IHRoZSBjbGFzcyBsZXZlbFxyXG4gKiBvciB0aGUgbWV0aG9kIGxldmVsLlxyXG4gKlxyXG4gKiBAcGFyYW0gaGFuZGxlclxyXG4gKi9cclxuZnVuY3Rpb24gaGFuZGxlRGVjb3JhdG9yKGhhbmRsZXIpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXIodGFyZ2V0LnByb3RvdHlwZSwgdW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXIodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLmhhbmRsZURlY29yYXRvciA9IGhhbmRsZURlY29yYXRvcjtcclxuZXhwb3J0cy5kZWZhdWx0ID0gaGFuZGxlRGVjb3JhdG9yO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgV2Vha01hcF8xID0gcmVxdWlyZShcIkBkb2pvL3NoaW0vV2Vha01hcFwiKTtcclxudmFyIGhhbmRsZURlY29yYXRvcl8xID0gcmVxdWlyZShcIi4vaGFuZGxlRGVjb3JhdG9yXCIpO1xyXG52YXIgYmVmb3JlUHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vYmVmb3JlUHJvcGVydGllc1wiKTtcclxuLyoqXHJcbiAqIE1hcCBvZiBpbnN0YW5jZXMgYWdhaW5zdCByZWdpc3RlcmVkIGluamVjdG9ycy5cclxuICovXHJcbnZhciByZWdpc3RlcmVkSW5qZWN0b3JzTWFwID0gbmV3IFdlYWtNYXBfMS5kZWZhdWx0KCk7XHJcbi8qKlxyXG4gKiBEZWNvcmF0b3IgcmV0cmlldmVzIGFuIGluamVjdG9yIGZyb20gYW4gYXZhaWxhYmxlIHJlZ2lzdHJ5IHVzaW5nIHRoZSBuYW1lIGFuZFxyXG4gKiBjYWxscyB0aGUgYGdldFByb3BlcnRpZXNgIGZ1bmN0aW9uIHdpdGggdGhlIHBheWxvYWQgZnJvbSB0aGUgaW5qZWN0b3JcclxuICogYW5kIGN1cnJlbnQgcHJvcGVydGllcyB3aXRoIHRoZSB0aGUgaW5qZWN0ZWQgcHJvcGVydGllcyByZXR1cm5lZC5cclxuICpcclxuICogQHBhcmFtIEluamVjdENvbmZpZyB0aGUgaW5qZWN0IGNvbmZpZ3VyYXRpb25cclxuICovXHJcbmZ1bmN0aW9uIGluamVjdChfYSkge1xyXG4gICAgdmFyIG5hbWUgPSBfYS5uYW1lLCBnZXRQcm9wZXJ0aWVzID0gX2EuZ2V0UHJvcGVydGllcztcclxuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3JfMS5oYW5kbGVEZWNvcmF0b3IoZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcclxuICAgICAgICBiZWZvcmVQcm9wZXJ0aWVzXzEuYmVmb3JlUHJvcGVydGllcyhmdW5jdGlvbiAocHJvcGVydGllcykge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICB2YXIgaW5qZWN0b3JJdGVtID0gdGhpcy5yZWdpc3RyeS5nZXRJbmplY3RvcihuYW1lKTtcclxuICAgICAgICAgICAgaWYgKGluamVjdG9ySXRlbSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluamVjdG9yID0gaW5qZWN0b3JJdGVtLmluamVjdG9yLCBpbnZhbGlkYXRvciA9IGluamVjdG9ySXRlbS5pbnZhbGlkYXRvcjtcclxuICAgICAgICAgICAgICAgIHZhciByZWdpc3RlcmVkSW5qZWN0b3JzID0gcmVnaXN0ZXJlZEluamVjdG9yc01hcC5nZXQodGhpcykgfHwgW107XHJcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZEluamVjdG9ycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkSW5qZWN0b3JzTWFwLnNldCh0aGlzLCByZWdpc3RlcmVkSW5qZWN0b3JzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RlcmVkSW5qZWN0b3JzLmluZGV4T2YoaW5qZWN0b3JJdGVtKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm93bihpbnZhbGlkYXRvci5vbignaW52YWxpZGF0ZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkSW5qZWN0b3JzLnB1c2goaW5qZWN0b3JJdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzKGluamVjdG9yKCksIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkodGFyZ2V0KTtcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuaW5qZWN0ID0gaW5qZWN0O1xyXG5leHBvcnRzLmRlZmF1bHQgPSBpbmplY3Q7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9pbmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBSZWdpc3RyeV8xID0gcmVxdWlyZShcIi4vUmVnaXN0cnlcIik7XHJcbmZ1bmN0aW9uIGlzT2JqZWN0T3JBcnJheSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xyXG59XHJcbmZ1bmN0aW9uIGFsd2F5cyhwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjaGFuZ2VkOiB0cnVlLFxyXG4gICAgICAgIHZhbHVlOiBuZXdQcm9wZXJ0eVxyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLmFsd2F5cyA9IGFsd2F5cztcclxuZnVuY3Rpb24gaWdub3JlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNoYW5nZWQ6IGZhbHNlLFxyXG4gICAgICAgIHZhbHVlOiBuZXdQcm9wZXJ0eVxyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLmlnbm9yZSA9IGlnbm9yZTtcclxuZnVuY3Rpb24gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNoYW5nZWQ6IHByZXZpb3VzUHJvcGVydHkgIT09IG5ld1Byb3BlcnR5LFxyXG4gICAgICAgIHZhbHVlOiBuZXdQcm9wZXJ0eVxyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcclxuZnVuY3Rpb24gc2hhbGxvdyhwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSkge1xyXG4gICAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcclxuICAgIHZhciB2YWxpZE9sZFByb3BlcnR5ID0gcHJldmlvdXNQcm9wZXJ0eSAmJiBpc09iamVjdE9yQXJyYXkocHJldmlvdXNQcm9wZXJ0eSk7XHJcbiAgICB2YXIgdmFsaWROZXdQcm9wZXJ0eSA9IG5ld1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShuZXdQcm9wZXJ0eSk7XHJcbiAgICBpZiAoIXZhbGlkT2xkUHJvcGVydHkgfHwgIXZhbGlkTmV3UHJvcGVydHkpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjaGFuZ2VkOiB0cnVlLFxyXG4gICAgICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgdmFyIHByZXZpb3VzS2V5cyA9IE9iamVjdC5rZXlzKHByZXZpb3VzUHJvcGVydHkpO1xyXG4gICAgdmFyIG5ld0tleXMgPSBPYmplY3Qua2V5cyhuZXdQcm9wZXJ0eSk7XHJcbiAgICBpZiAocHJldmlvdXNLZXlzLmxlbmd0aCAhPT0gbmV3S2V5cy5sZW5ndGgpIHtcclxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNoYW5nZWQgPSBuZXdLZXlzLnNvbWUoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3UHJvcGVydHlba2V5XSAhPT0gcHJldmlvdXNQcm9wZXJ0eVtrZXldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjaGFuZ2VkOiBjaGFuZ2VkLFxyXG4gICAgICAgIHZhbHVlOiBuZXdQcm9wZXJ0eVxyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLnNoYWxsb3cgPSBzaGFsbG93O1xyXG5mdW5jdGlvbiBhdXRvKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XHJcbiAgICB2YXIgcmVzdWx0O1xyXG4gICAgaWYgKHR5cGVvZiBuZXdQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGlmIChuZXdQcm9wZXJ0eS5fdHlwZSA9PT0gUmVnaXN0cnlfMS5XSURHRVRfQkFTRV9UWVBFKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBpZ25vcmUocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzT2JqZWN0T3JBcnJheShuZXdQcm9wZXJ0eSkpIHtcclxuICAgICAgICByZXN1bHQgPSBzaGFsbG93KHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlZmVyZW5jZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmV4cG9ydHMuYXV0byA9IGF1dG87XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGlmZi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvZGlmZi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIGxhbmdfMSA9IHJlcXVpcmUoXCJAZG9qby9jb3JlL2xhbmdcIik7XHJcbnZhciBjc3NUcmFuc2l0aW9uc18xID0gcmVxdWlyZShcIi4uL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnNcIik7XHJcbnZhciBhZnRlclJlbmRlcl8xID0gcmVxdWlyZShcIi4vLi4vZGVjb3JhdG9ycy9hZnRlclJlbmRlclwiKTtcclxudmFyIGRfMSA9IHJlcXVpcmUoXCIuLy4uL2RcIik7XHJcbnZhciB2ZG9tXzEgPSByZXF1aXJlKFwiLi8uLi92ZG9tXCIpO1xyXG4vKipcclxuICogUmVwcmVzZW50cyB0aGUgYXR0YWNoIHN0YXRlIG9mIHRoZSBwcm9qZWN0b3JcclxuICovXHJcbnZhciBQcm9qZWN0b3JBdHRhY2hTdGF0ZTtcclxuKGZ1bmN0aW9uIChQcm9qZWN0b3JBdHRhY2hTdGF0ZSkge1xyXG4gICAgUHJvamVjdG9yQXR0YWNoU3RhdGVbUHJvamVjdG9yQXR0YWNoU3RhdGVbXCJBdHRhY2hlZFwiXSA9IDFdID0gXCJBdHRhY2hlZFwiO1xyXG4gICAgUHJvamVjdG9yQXR0YWNoU3RhdGVbUHJvamVjdG9yQXR0YWNoU3RhdGVbXCJEZXRhY2hlZFwiXSA9IDJdID0gXCJEZXRhY2hlZFwiO1xyXG59KShQcm9qZWN0b3JBdHRhY2hTdGF0ZSA9IGV4cG9ydHMuUHJvamVjdG9yQXR0YWNoU3RhdGUgfHwgKGV4cG9ydHMuUHJvamVjdG9yQXR0YWNoU3RhdGUgPSB7fSkpO1xyXG4vKipcclxuICogQXR0YWNoIHR5cGUgZm9yIHRoZSBwcm9qZWN0b3JcclxuICovXHJcbnZhciBBdHRhY2hUeXBlO1xyXG4oZnVuY3Rpb24gKEF0dGFjaFR5cGUpIHtcclxuICAgIEF0dGFjaFR5cGVbQXR0YWNoVHlwZVtcIkFwcGVuZFwiXSA9IDFdID0gXCJBcHBlbmRcIjtcclxuICAgIEF0dGFjaFR5cGVbQXR0YWNoVHlwZVtcIk1lcmdlXCJdID0gMl0gPSBcIk1lcmdlXCI7XHJcbn0pKEF0dGFjaFR5cGUgPSBleHBvcnRzLkF0dGFjaFR5cGUgfHwgKGV4cG9ydHMuQXR0YWNoVHlwZSA9IHt9KSk7XHJcbmZ1bmN0aW9uIFByb2plY3Rvck1peGluKEJhc2UpIHtcclxuICAgIHZhciBQcm9qZWN0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICAgICAgdHNsaWJfMS5fX2V4dGVuZHMoUHJvamVjdG9yLCBfc3VwZXIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIFByb2plY3RvcigpIHtcclxuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuYXBwbHkodGhpcywgdHNsaWJfMS5fX3NwcmVhZChhcmdzKSkgfHwgdGhpcztcclxuICAgICAgICAgICAgX3RoaXMuX3Jvb3QgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgICAgICAgICBfdGhpcy5fYXN5bmMgPSB0cnVlO1xyXG4gICAgICAgICAgICBfdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyA9IHt9O1xyXG4gICAgICAgICAgICBfdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uczogY3NzVHJhbnNpdGlvbnNfMS5kZWZhdWx0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIF90aGlzLnJvb3QgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgICAgICAgICBfdGhpcy5wcm9qZWN0b3JTdGF0ZSA9IFByb2plY3RvckF0dGFjaFN0YXRlLkRldGFjaGVkO1xyXG4gICAgICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFByb2plY3Rvci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKHJvb3QpIHtcclxuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBBdHRhY2hUeXBlLkFwcGVuZCxcclxuICAgICAgICAgICAgICAgIHJvb3Q6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaChvcHRpb25zKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFByb2plY3Rvci5wcm90b3R5cGUubWVyZ2UgPSBmdW5jdGlvbiAocm9vdCkge1xyXG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IEF0dGFjaFR5cGUuTWVyZ2UsXHJcbiAgICAgICAgICAgICAgICByb290OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2gob3B0aW9ucyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvamVjdG9yLnByb3RvdHlwZSwgXCJyb290XCIsIHtcclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9vdDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAocm9vdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNoYW5nZSByb290IGVsZW1lbnQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSByb290O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvamVjdG9yLnByb3RvdHlwZSwgXCJhc3luY1wiLCB7XHJcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FzeW5jO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhc3luYykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgYWxyZWFkeSBhdHRhY2hlZCwgY2Fubm90IGNoYW5nZSBhc3luYyBtb2RlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hc3luYyA9IGFzeW5jO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBQcm9qZWN0b3IucHJvdG90eXBlLnNhbmRib3ggPSBmdW5jdGlvbiAoZG9jKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIGlmIChkb2MgPT09IHZvaWQgMCkgeyBkb2MgPSBkb2N1bWVudDsgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjcmVhdGUgc2FuZGJveCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2FzeW5jID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBwcmV2aW91c1Jvb3QgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgICAgIC8qIGZyZWUgdXAgdGhlIGRvY3VtZW50IGZyYWdtZW50IGZvciBHQyAqL1xyXG4gICAgICAgICAgICB0aGlzLm93bih7XHJcbiAgICAgICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Jvb3QgPSBwcmV2aW91c1Jvb3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLl9hdHRhY2goe1xyXG4gICAgICAgICAgICAgICAgLyogRG9jdW1lbnRGcmFnbWVudCBpcyBub3QgYXNzaWduYWJsZSB0byBFbGVtZW50LCBidXQgcHJvdmlkZXMgZXZlcnl0aGluZyBuZWVkZWQgdG8gd29yayAqL1xyXG4gICAgICAgICAgICAgICAgcm9vdDogZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IEF0dGFjaFR5cGUuQXBwZW5kXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgUHJvamVjdG9yLnByb3RvdHlwZS5zZXRDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xyXG4gICAgICAgICAgICB0aGlzLl9fc2V0Q2hpbGRyZW5fXyhjaGlsZHJlbik7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBQcm9qZWN0b3IucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbiAocHJvcGVydGllcykge1xyXG4gICAgICAgICAgICB0aGlzLl9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgUHJvamVjdG9yLnByb3RvdHlwZS5fX3NldFByb3BlcnRpZXNfXyA9IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzICYmIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkgIT09IHByb3BlcnRpZXMucmVnaXN0cnkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcy5yZWdpc3RyeS5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyA9IGxhbmdfMS5hc3NpZ24oe30sIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9fc2V0Q29yZVByb3BlcnRpZXNfXy5jYWxsKHRoaXMsIHsgYmluZDogdGhpcywgYmFzZVJlZ2lzdHJ5OiBwcm9wZXJ0aWVzLnJlZ2lzdHJ5IH0pO1xyXG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9fc2V0UHJvcGVydGllc19fLmNhbGwodGhpcywgcHJvcGVydGllcyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBQcm9qZWN0b3IucHJvdG90eXBlLnRvSHRtbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgIT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkIHx8ICF0aGlzLl9wcm9qZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBpcyBub3QgYXR0YWNoZWQsIGNhbm5vdCByZXR1cm4gYW4gSFRNTCBzdHJpbmcgb2YgcHJvamVjdGlvbi4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbi5kb21Ob2RlLmNoaWxkTm9kZXNbMF0ub3V0ZXJIVE1MO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgUHJvamVjdG9yLnByb3RvdHlwZS5hZnRlclJlbmRlciA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyB8fCByZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSBkXzEudignc3BhbicsIHt9LCBbcmVzdWx0XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBQcm9qZWN0b3IucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgUHJvamVjdG9yLnByb3RvdHlwZS5fYXR0YWNoID0gZnVuY3Rpb24gKF9hKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gX2EudHlwZSwgcm9vdCA9IF9hLnJvb3Q7XHJcbiAgICAgICAgICAgIGlmIChyb290KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3QgPSByb290O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9hdHRhY2hIYW5kbGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hIYW5kbGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9qZWN0b3JTdGF0ZSA9IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkO1xyXG4gICAgICAgICAgICB2YXIgaGFuZGxlID0ge1xyXG4gICAgICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5wcm9qZWN0b3JTdGF0ZSA9PT0gUHJvamVjdG9yQXR0YWNoU3RhdGUuQXR0YWNoZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Byb2plY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnByb2plY3RvclN0YXRlID0gUHJvamVjdG9yQXR0YWNoU3RhdGUuRGV0YWNoZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLm93bihoYW5kbGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9hdHRhY2hIYW5kbGUgPSBoYW5kbGU7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zID0gdHNsaWJfMS5fX2Fzc2lnbih7fSwgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMsIHsgc3luYzogIXRoaXMuX2FzeW5jIH0pO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgQXR0YWNoVHlwZS5BcHBlbmQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvamVjdGlvbiA9IHZkb21fMS5kb20uYXBwZW5kKHRoaXMucm9vdCwgdGhpcywgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBBdHRhY2hUeXBlLk1lcmdlOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb24gPSB2ZG9tXzEuZG9tLm1lcmdlKHRoaXMucm9vdCwgdGhpcywgdGhpcy5fcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hIYW5kbGU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0c2xpYl8xLl9fZGVjb3JhdGUoW1xyXG4gICAgICAgICAgICBhZnRlclJlbmRlcl8xLmFmdGVyUmVuZGVyKCksXHJcbiAgICAgICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcclxuICAgICAgICAgICAgdHNsaWJfMS5fX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pLFxyXG4gICAgICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCB2b2lkIDApXHJcbiAgICAgICAgXSwgUHJvamVjdG9yLnByb3RvdHlwZSwgXCJhZnRlclJlbmRlclwiLCBudWxsKTtcclxuICAgICAgICByZXR1cm4gUHJvamVjdG9yO1xyXG4gICAgfShCYXNlKSk7XHJcbiAgICByZXR1cm4gUHJvamVjdG9yO1xyXG59XHJcbmV4cG9ydHMuUHJvamVjdG9yTWl4aW4gPSBQcm9qZWN0b3JNaXhpbjtcclxuZXhwb3J0cy5kZWZhdWx0ID0gUHJvamVjdG9yTWl4aW47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1Byb2plY3Rvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIEluamVjdG9yXzEgPSByZXF1aXJlKFwiLi8uLi9JbmplY3RvclwiKTtcclxudmFyIGluamVjdF8xID0gcmVxdWlyZShcIi4vLi4vZGVjb3JhdG9ycy9pbmplY3RcIik7XHJcbnZhciBoYW5kbGVEZWNvcmF0b3JfMSA9IHJlcXVpcmUoXCIuLy4uL2RlY29yYXRvcnMvaGFuZGxlRGVjb3JhdG9yXCIpO1xyXG52YXIgZGlmZlByb3BlcnR5XzEgPSByZXF1aXJlKFwiLi8uLi9kZWNvcmF0b3JzL2RpZmZQcm9wZXJ0eVwiKTtcclxudmFyIGRpZmZfMSA9IHJlcXVpcmUoXCIuLy4uL2RpZmZcIik7XHJcbnZhciBUSEVNRV9LRVkgPSAnIF9rZXknO1xyXG5leHBvcnRzLklOSkVDVEVEX1RIRU1FX0tFWSA9IFN5bWJvbCgndGhlbWUnKTtcclxuLyoqXHJcbiAqIERlY29yYXRvciBmb3IgYmFzZSBjc3MgY2xhc3Nlc1xyXG4gKi9cclxuZnVuY3Rpb24gdGhlbWUodGhlbWUpIHtcclxuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3JfMS5oYW5kbGVEZWNvcmF0b3IoZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2Jhc2VUaGVtZUNsYXNzZXMnLCB0aGVtZSk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLnRoZW1lID0gdGhlbWU7XHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcmV2ZXJzZSBsb29rdXAgZm9yIHRoZSBjbGFzc2VzIHBhc3NlZCBpbiB2aWEgdGhlIGB0aGVtZWAgZnVuY3Rpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSBjbGFzc2VzIFRoZSBiYXNlQ2xhc3NlcyBvYmplY3RcclxuICogQHJlcXVpcmVzXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVUaGVtZUNsYXNzZXNMb29rdXAoY2xhc3Nlcykge1xyXG4gICAgcmV0dXJuIGNsYXNzZXMucmVkdWNlKGZ1bmN0aW9uIChjdXJyZW50Q2xhc3NOYW1lcywgYmFzZUNsYXNzKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoYmFzZUNsYXNzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgY3VycmVudENsYXNzTmFtZXNbYmFzZUNsYXNzW2tleV1dID0ga2V5O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50Q2xhc3NOYW1lcztcclxuICAgIH0sIHt9KTtcclxufVxyXG4vKipcclxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBpcyBnaXZlbiBhIHRoZW1lIGFuZCBhbiBvcHRpb25hbCByZWdpc3RyeSwgdGhlIHRoZW1lXHJcbiAqIGluamVjdG9yIGlzIGRlZmluZWQgYWdhaW5zdCB0aGUgcmVnaXN0cnksIHJldHVybmluZyB0aGUgdGhlbWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gc2V0XHJcbiAqIEBwYXJhbSB0aGVtZVJlZ2lzdHJ5IHJlZ2lzdHJ5IHRvIGRlZmluZSB0aGUgdGhlbWUgaW5qZWN0b3IgYWdhaW5zdC4gRGVmYXVsdHNcclxuICogdG8gdGhlIGdsb2JhbCByZWdpc3RyeVxyXG4gKlxyXG4gKiBAcmV0dXJucyB0aGUgdGhlbWUgaW5qZWN0b3IgdXNlZCB0byBzZXQgdGhlIHRoZW1lXHJcbiAqL1xyXG5mdW5jdGlvbiByZWdpc3RlclRoZW1lSW5qZWN0b3IodGhlbWUsIHRoZW1lUmVnaXN0cnkpIHtcclxuICAgIHZhciB0aGVtZUluamVjdG9yID0gbmV3IEluamVjdG9yXzEuSW5qZWN0b3IodGhlbWUpO1xyXG4gICAgdGhlbWVSZWdpc3RyeS5kZWZpbmVJbmplY3RvcihleHBvcnRzLklOSkVDVEVEX1RIRU1FX0tFWSwgZnVuY3Rpb24gKGludmFsaWRhdG9yKSB7XHJcbiAgICAgICAgdGhlbWVJbmplY3Rvci5zZXRJbnZhbGlkYXRvcihpbnZhbGlkYXRvcik7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoZW1lSW5qZWN0b3IuZ2V0KCk7IH07XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGVtZUluamVjdG9yO1xyXG59XHJcbmV4cG9ydHMucmVnaXN0ZXJUaGVtZUluamVjdG9yID0gcmVnaXN0ZXJUaGVtZUluamVjdG9yO1xyXG4vKipcclxuICogRnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhc3MgZGVjb3JhdGVkIHdpdGggd2l0aCBUaGVtZWQgZnVuY3Rpb25hbGl0eVxyXG4gKi9cclxuZnVuY3Rpb24gVGhlbWVkTWl4aW4oQmFzZSkge1xyXG4gICAgdmFyIFRoZW1lZCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgICAgICB0c2xpYl8xLl9fZXh0ZW5kcyhUaGVtZWQsIF9zdXBlcik7XHJcbiAgICAgICAgZnVuY3Rpb24gVGhlbWVkKCkge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFJlZ2lzdGVyZWQgYmFzZSB0aGVtZSBrZXlzXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBfdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZUtleXMgPSBbXTtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEluZGljYXRlcyBpZiBjbGFzc2VzIG1ldGEgZGF0YSBuZWVkIHRvIGJlIGNhbGN1bGF0ZWQuXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBfdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIExvYWRlZCB0aGVtZVxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgX3RoaXMuX3RoZW1lID0ge307XHJcbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgVGhlbWVkLnByb3RvdHlwZS50aGVtZSA9IGZ1bmN0aW9uIChjbGFzc2VzKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlY2FsY3VsYXRlVGhlbWVDbGFzc2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2xhc3NlcykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLm1hcChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7IHJldHVybiBfdGhpcy5fZ2V0VGhlbWVDbGFzcyhjbGFzc05hbWUpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VGhlbWVDbGFzcyhjbGFzc2VzKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZ1bmN0aW9uIGZpcmVkIHdoZW4gYHRoZW1lYCBvciBgZXh0cmFDbGFzc2VzYCBhcmUgY2hhbmdlZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBUaGVtZWQucHJvdG90eXBlLm9uUHJvcGVydGllc0NoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY2FsY3VsYXRlQ2xhc3NlcyA9IHRydWU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBUaGVtZWQucHJvdG90eXBlLl9nZXRUaGVtZUNsYXNzID0gZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09PSB1bmRlZmluZWQgfHwgY2xhc3NOYW1lID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBleHRyYUNsYXNzZXMgPSB0aGlzLnByb3BlcnRpZXMuZXh0cmFDbGFzc2VzIHx8IHt9O1xyXG4gICAgICAgICAgICB2YXIgdGhlbWVDbGFzc05hbWUgPSB0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cFtjbGFzc05hbWVdO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0Q2xhc3NOYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoIXRoZW1lQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJDbGFzcyBuYW1lOiAnXCIgKyBjbGFzc05hbWUgKyBcIicgbm90IGZvdW5kIGluIHRoZW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdENsYXNzTmFtZXMucHVzaChleHRyYUNsYXNzZXNbdGhlbWVDbGFzc05hbWVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRDbGFzc05hbWVzLnB1c2godGhpcy5fdGhlbWVbdGhlbWVDbGFzc05hbWVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdENsYXNzTmFtZXMucHVzaCh0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lW3RoZW1lQ2xhc3NOYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdENsYXNzTmFtZXMuam9pbignICcpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgVGhlbWVkLnByb3RvdHlwZS5fcmVjYWxjdWxhdGVUaGVtZUNsYXNzZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMucHJvcGVydGllcy50aGVtZSwgdGhlbWUgPSBfYSA9PT0gdm9pZCAwID8ge30gOiBfYTtcclxuICAgICAgICAgICAgdmFyIGJhc2VUaGVtZXMgPSB0aGlzLmdldERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWUgPSBiYXNlVGhlbWVzLnJlZHVjZShmdW5jdGlvbiAoZmluYWxCYXNlVGhlbWUsIGJhc2VUaGVtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfYSA9IFRIRU1FX0tFWSwga2V5ID0gYmFzZVRoZW1lW19hXSwgY2xhc3NlcyA9IHRzbGliXzEuX19yZXN0KGJhc2VUaGVtZSwgW3R5cGVvZiBfYSA9PT0gXCJzeW1ib2xcIiA/IF9hIDogX2EgKyBcIlwiXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWVLZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2Fzc2lnbih7fSwgZmluYWxCYXNlVGhlbWUsIGNsYXNzZXMpO1xyXG4gICAgICAgICAgICAgICAgfSwge30pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYmFzZVRoZW1lQ2xhc3Nlc1JldmVyc2VMb29rdXAgPSBjcmVhdGVUaGVtZUNsYXNzZXNMb29rdXAoYmFzZVRoZW1lcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fdGhlbWUgPSB0aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGJhc2VUaGVtZSwgdGhlbWVLZXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fYXNzaWduKHt9LCBiYXNlVGhlbWUsIHRoZW1lW3RoZW1lS2V5XSk7XHJcbiAgICAgICAgICAgIH0sIHt9KTtcclxuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0c2xpYl8xLl9fZGVjb3JhdGUoW1xyXG4gICAgICAgICAgICBkaWZmUHJvcGVydHlfMS5kaWZmUHJvcGVydHkoJ3RoZW1lJywgZGlmZl8xLnNoYWxsb3cpLFxyXG4gICAgICAgICAgICBkaWZmUHJvcGVydHlfMS5kaWZmUHJvcGVydHkoJ2V4dHJhQ2xhc3NlcycsIGRpZmZfMS5zaGFsbG93KSxcclxuICAgICAgICAgICAgdHNsaWJfMS5fX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxyXG4gICAgICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSksXHJcbiAgICAgICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIHZvaWQgMClcclxuICAgICAgICBdLCBUaGVtZWQucHJvdG90eXBlLCBcIm9uUHJvcGVydGllc0NoYW5nZWRcIiwgbnVsbCk7XHJcbiAgICAgICAgVGhlbWVkID0gdHNsaWJfMS5fX2RlY29yYXRlKFtcclxuICAgICAgICAgICAgaW5qZWN0XzEuaW5qZWN0KHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGV4cG9ydHMuSU5KRUNURURfVEhFTUVfS0VZLFxyXG4gICAgICAgICAgICAgICAgZ2V0UHJvcGVydGllczogZnVuY3Rpb24gKHRoZW1lLCBwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLnRoZW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHRoZW1lOiB0aGVtZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXSwgVGhlbWVkKTtcclxuICAgICAgICByZXR1cm4gVGhlbWVkO1xyXG4gICAgfShCYXNlKSk7XHJcbiAgICByZXR1cm4gVGhlbWVkO1xyXG59XHJcbmV4cG9ydHMuVGhlbWVkTWl4aW4gPSBUaGVtZWRNaXhpbjtcclxuZXhwb3J0cy5kZWZhdWx0ID0gVGhlbWVkTWl4aW47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1RoZW1lZC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvbWl4aW5zL1RoZW1lZC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIFdpZGdldEJhc2VfMSA9IHJlcXVpcmUoXCIuL1dpZGdldEJhc2VcIik7XHJcbnZhciBQcm9qZWN0b3JfMSA9IHJlcXVpcmUoXCIuL21peGlucy9Qcm9qZWN0b3JcIik7XHJcbnZhciBhcnJheV8xID0gcmVxdWlyZShcIkBkb2pvL3NoaW0vYXJyYXlcIik7XHJcbnZhciBkXzEgPSByZXF1aXJlKFwiLi9kXCIpO1xyXG52YXIgZ2xvYmFsXzEgPSByZXF1aXJlKFwiQGRvam8vc2hpbS9nbG9iYWxcIik7XHJcbnZhciBUaGVtZWRfMSA9IHJlcXVpcmUoXCIuL21peGlucy9UaGVtZWRcIik7XHJcbnZhciBhbHdheXNSZW5kZXJfMSA9IHJlcXVpcmUoXCIuL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyXCIpO1xyXG52YXIgQ3VzdG9tRWxlbWVudENoaWxkVHlwZTtcclxuKGZ1bmN0aW9uIChDdXN0b21FbGVtZW50Q2hpbGRUeXBlKSB7XHJcbiAgICBDdXN0b21FbGVtZW50Q2hpbGRUeXBlW1wiRE9KT1wiXSA9IFwiRE9KT1wiO1xyXG4gICAgQ3VzdG9tRWxlbWVudENoaWxkVHlwZVtcIk5PREVcIl0gPSBcIk5PREVcIjtcclxuICAgIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGVbXCJURVhUXCJdID0gXCJURVhUXCI7XHJcbn0pKEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUgPSBleHBvcnRzLkN1c3RvbUVsZW1lbnRDaGlsZFR5cGUgfHwgKGV4cG9ydHMuQ3VzdG9tRWxlbWVudENoaWxkVHlwZSA9IHt9KSk7XHJcbmZ1bmN0aW9uIERvbVRvV2lkZ2V0V3JhcHBlcihkb21Ob2RlKSB7XHJcbiAgICB2YXIgRG9tVG9XaWRnZXRXcmFwcGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgICAgIHRzbGliXzEuX19leHRlbmRzKERvbVRvV2lkZ2V0V3JhcHBlciwgX3N1cGVyKTtcclxuICAgICAgICBmdW5jdGlvbiBEb21Ub1dpZGdldFdyYXBwZXIoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgRG9tVG9XaWRnZXRXcmFwcGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5yZWR1Y2UoZnVuY3Rpb24gKHByb3BzLCBrZXkpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF90aGlzLnByb3BlcnRpZXNba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignb24nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IFwiX19cIiArIGtleTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHByb3BzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcztcclxuICAgICAgICAgICAgfSwge30pO1xyXG4gICAgICAgICAgICByZXR1cm4gZF8xLmRvbSh7IG5vZGU6IGRvbU5vZGUsIHByb3BzOiBwcm9wZXJ0aWVzLCBkaWZmVHlwZTogJ2RvbScgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRG9tVG9XaWRnZXRXcmFwcGVyLCBcImRvbU5vZGVcIiwge1xyXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkb21Ob2RlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBEb21Ub1dpZGdldFdyYXBwZXIgPSB0c2xpYl8xLl9fZGVjb3JhdGUoW1xyXG4gICAgICAgICAgICBhbHdheXNSZW5kZXJfMS5hbHdheXNSZW5kZXIoKVxyXG4gICAgICAgIF0sIERvbVRvV2lkZ2V0V3JhcHBlcik7XHJcbiAgICAgICAgcmV0dXJuIERvbVRvV2lkZ2V0V3JhcHBlcjtcclxuICAgIH0oV2lkZ2V0QmFzZV8xLldpZGdldEJhc2UpKTtcclxuICAgIHJldHVybiBEb21Ub1dpZGdldFdyYXBwZXI7XHJcbn1cclxuZXhwb3J0cy5Eb21Ub1dpZGdldFdyYXBwZXIgPSBEb21Ub1dpZGdldFdyYXBwZXI7XHJcbmZ1bmN0aW9uIGNyZWF0ZShkZXNjcmlwdG9yLCBXaWRnZXRDb25zdHJ1Y3Rvcikge1xyXG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXMsIGNoaWxkVHlwZSA9IGRlc2NyaXB0b3IuY2hpbGRUeXBlLCByZWdpc3RyeUZhY3RvcnkgPSBkZXNjcmlwdG9yLnJlZ2lzdHJ5RmFjdG9yeTtcclxuICAgIHZhciBhdHRyaWJ1dGVNYXAgPSB7fTtcclxuICAgIGF0dHJpYnV0ZXMuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBhdHRyaWJ1dGVNYXBbYXR0cmlidXRlTmFtZV0gPSBwcm9wZXJ0eU5hbWU7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICAgICAgdHNsaWJfMS5fX2V4dGVuZHMoY2xhc3NfMSwgX3N1cGVyKTtcclxuICAgICAgICBmdW5jdGlvbiBjbGFzc18xKCkge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcclxuICAgICAgICAgICAgX3RoaXMuX3Byb3BlcnRpZXMgPSB7fTtcclxuICAgICAgICAgICAgX3RoaXMuX2NoaWxkcmVuID0gW107XHJcbiAgICAgICAgICAgIF90aGlzLl9ldmVudFByb3BlcnRpZXMgPSB7fTtcclxuICAgICAgICAgICAgX3RoaXMuX2luaXRpYWxpc2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pbml0aWFsaXNlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBkb21Qcm9wZXJ0aWVzID0ge307XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzLCBwcm9wZXJ0aWVzID0gZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBldmVudHMgPSBkZXNjcmlwdG9yLmV2ZW50cztcclxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHRzbGliXzEuX19hc3NpZ24oe30sIHRoaXMuX3Byb3BlcnRpZXMsIHRoaXMuX2F0dHJpYnV0ZXNUb1Byb3BlcnRpZXMoYXR0cmlidXRlcykpO1xyXG4gICAgICAgICAgICB0c2xpYl8xLl9fc3ByZWFkKGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMpLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX3RoaXNbcHJvcGVydHlOYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnX18nKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUHJvcGVydHlOYW1lICE9PSBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW2ZpbHRlcmVkUHJvcGVydHlOYW1lXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKTsgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIF90aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKTsgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gX3RoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOyB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnJykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnX19vbicpO1xyXG4gICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1tmaWx0ZXJlZFByb3BlcnR5TmFtZV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBfdGhpcy5fc2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBldmVudENhbGxiYWNrID0gX3RoaXMuX2dldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50Q2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDYWxsYmFjay5hcHBseSh2b2lkIDAsIHRzbGliXzEuX19zcHJlYWQoYXJncykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogYXJnc1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCBkb21Qcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLlRFWFQgPyB0aGlzLmNoaWxkTm9kZXMgOiB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICBhcnJheV8xLmZyb20oY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtcmVuZGVyJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX3JlbmRlcigpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1jb25uZWN0ZWQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fcmVuZGVyKCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihjaGlsZE5vZGUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9jaGlsZHJlbi5wdXNoKGRfMS5kb20oeyBub2RlOiBjaGlsZE5vZGUsIGRpZmZUeXBlOiAnZG9tJyB9KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtY29ubmVjdGVkJywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIF90aGlzLl9jaGlsZENvbm5lY3RlZChlKTsgfSk7XHJcbiAgICAgICAgICAgIHZhciB3aWRnZXRQcm9wZXJ0aWVzID0gdGhpcy5fcHJvcGVydGllcztcclxuICAgICAgICAgICAgdmFyIHJlbmRlckNoaWxkcmVuID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX19jaGlsZHJlbl9fKCk7IH07XHJcbiAgICAgICAgICAgIHZhciBXcmFwcGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgICAgICAgICAgICAgdHNsaWJfMS5fX2V4dGVuZHMoY2xhc3NfMiwgX3N1cGVyKTtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNsYXNzXzIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2xhc3NfMi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkXzEudyhXaWRnZXRDb25zdHJ1Y3Rvciwgd2lkZ2V0UHJvcGVydGllcywgcmVuZGVyQ2hpbGRyZW4oKSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzXzI7XHJcbiAgICAgICAgICAgIH0oV2lkZ2V0QmFzZV8xLldpZGdldEJhc2UpKTtcclxuICAgICAgICAgICAgdmFyIHJlZ2lzdHJ5ID0gcmVnaXN0cnlGYWN0b3J5KCk7XHJcbiAgICAgICAgICAgIHZhciB0aGVtZUNvbnRleHQgPSBUaGVtZWRfMS5yZWdpc3RlclRoZW1lSW5qZWN0b3IodGhpcy5fZ2V0VGhlbWUoKSwgcmVnaXN0cnkpO1xyXG4gICAgICAgICAgICBnbG9iYWxfMS5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tdGhlbWUtc2V0JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhlbWVDb250ZXh0LnNldChfdGhpcy5fZ2V0VGhlbWUoKSk7IH0pO1xyXG4gICAgICAgICAgICB2YXIgUHJvamVjdG9yID0gUHJvamVjdG9yXzEuUHJvamVjdG9yTWl4aW4oV3JhcHBlcik7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvciA9IG5ldyBQcm9qZWN0b3IoKTtcclxuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yLnNldFByb3BlcnRpZXMoeyByZWdpc3RyeTogcmVnaXN0cnkgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rvci5hcHBlbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpc2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9qby1jZS1jb25uZWN0ZWQnLCB7XHJcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLl9nZXRUaGVtZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbF8xLmRlZmF1bHQgJiYgZ2xvYmFsXzEuZGVmYXVsdC5kb2pvY2UgJiYgZ2xvYmFsXzEuZGVmYXVsdC5kb2pvY2UudGhlbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxfMS5kZWZhdWx0LmRvam9jZS50aGVtZXNbZ2xvYmFsXzEuZGVmYXVsdC5kb2pvY2UudGhlbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5fY2hpbGRDb25uZWN0ZWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGUuZGV0YWlsO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXhpc3RzID0gdGhpcy5fY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIGNoaWxkLmRvbU5vZGUgPT09IG5vZGU7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtcmVuZGVyJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX3JlbmRlcigpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihub2RlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rvci5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb2pvLWNlLXJlbmRlcicsIHtcclxuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXNcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuX19wcm9wZXJ0aWVzX18gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fYXNzaWduKHt9LCB0aGlzLl9wcm9wZXJ0aWVzLCB0aGlzLl9ldmVudFByb3BlcnRpZXMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuX19jaGlsZHJlbl9fID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKENoaWxkKSB7IHJldHVybiBDaGlsZC5kb21Ob2RlLmlzV2lkZ2V0OyB9KS5tYXAoZnVuY3Rpb24gKENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRvbU5vZGUgPSBDaGlsZC5kb21Ob2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkXzEudyhDaGlsZCwgdHNsaWJfMS5fX2Fzc2lnbih7fSwgZG9tTm9kZS5fX3Byb3BlcnRpZXNfXygpKSwgdHNsaWJfMS5fX3NwcmVhZChkb21Ob2RlLl9fY2hpbGRyZW5fXygpKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKG5hbWUsIG9sZFZhbHVlLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gYXR0cmlidXRlTWFwW25hbWVdO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLl9zZXRFdmVudFByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLl9nZXRFdmVudFByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5fc2V0UHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHlOYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVtXaWRnZXRCYXNlXzEubm9CaW5kXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcigpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuX2dldFByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuX2F0dHJpYnV0ZXNUb1Byb3BlcnRpZXMgPSBmdW5jdGlvbiAoYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5yZWR1Y2UoZnVuY3Rpb24gKHByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF90aGlzLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICAgICAgICAgIH0sIHt9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbGFzc18xLCBcIm9ic2VydmVkQXR0cmlidXRlc1wiLCB7XHJcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbGFzc18xLnByb3RvdHlwZSwgXCJpc1dpZGdldFwiLCB7XHJcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjbGFzc18xO1xyXG4gICAgfShIVE1MRWxlbWVudCkpO1xyXG59XHJcbmV4cG9ydHMuY3JlYXRlID0gY3JlYXRlO1xyXG5mdW5jdGlvbiByZWdpc3RlcihXaWRnZXRDb25zdHJ1Y3Rvcikge1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBXaWRnZXRDb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgV2lkZ2V0Q29uc3RydWN0b3IucHJvdG90eXBlLl9fY3VzdG9tRWxlbWVudERlc2NyaXB0b3I7XHJcbiAgICBpZiAoIWRlc2NyaXB0b3IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgZGVzY3JpcHRvciBmb3IgQ3VzdG9tIEVsZW1lbnQsIGhhdmUgeW91IGFkZGVkIHRoZSBAY3VzdG9tRWxlbWVudCBkZWNvcmF0b3IgdG8geW91ciBXaWRnZXQ/Jyk7XHJcbiAgICB9XHJcbiAgICBnbG9iYWxfMS5kZWZhdWx0LmN1c3RvbUVsZW1lbnRzLmRlZmluZShkZXNjcmlwdG9yLnRhZ05hbWUsIGNyZWF0ZShkZXNjcmlwdG9yLCBXaWRnZXRDb25zdHJ1Y3RvcikpO1xyXG59XHJcbmV4cG9ydHMucmVnaXN0ZXIgPSByZWdpc3RlcjtcclxuZXhwb3J0cy5kZWZhdWx0ID0gcmVnaXN0ZXI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2lkZ2V0LWNvcmUvcmVnaXN0ZXJDdXN0b21FbGVtZW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS9yZWdpc3RlckN1c3RvbUVsZW1lbnQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBnbG9iYWxfMSA9IHJlcXVpcmUoXCJAZG9qby9zaGltL2dsb2JhbFwiKTtcclxudmFyIGFycmF5XzEgPSByZXF1aXJlKFwiQGRvam8vc2hpbS9hcnJheVwiKTtcclxudmFyIGRfMSA9IHJlcXVpcmUoXCIuL2RcIik7XHJcbnZhciBSZWdpc3RyeV8xID0gcmVxdWlyZShcIi4vUmVnaXN0cnlcIik7XHJcbnZhciBXZWFrTWFwXzEgPSByZXF1aXJlKFwiQGRvam8vc2hpbS9XZWFrTWFwXCIpO1xyXG52YXIgTkFNRVNQQUNFX1czID0gJ2h0dHA6Ly93d3cudzMub3JnLyc7XHJcbnZhciBOQU1FU1BBQ0VfU1ZHID0gTkFNRVNQQUNFX1czICsgJzIwMDAvc3ZnJztcclxudmFyIE5BTUVTUEFDRV9YTElOSyA9IE5BTUVTUEFDRV9XMyArICcxOTk5L3hsaW5rJztcclxudmFyIGVtcHR5QXJyYXkgPSBbXTtcclxuZXhwb3J0cy53aWRnZXRJbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwXzEuZGVmYXVsdCgpO1xyXG52YXIgaW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcF8xLmRlZmF1bHQoKTtcclxudmFyIHByb2plY3RvclN0YXRlTWFwID0gbmV3IFdlYWtNYXBfMS5kZWZhdWx0KCk7XHJcbmZ1bmN0aW9uIHNhbWUoZG5vZGUxLCBkbm9kZTIpIHtcclxuICAgIGlmIChkXzEuaXNWTm9kZShkbm9kZTEpICYmIGRfMS5pc1ZOb2RlKGRub2RlMikpIHtcclxuICAgICAgICBpZiAoZF8xLmlzRG9tVk5vZGUoZG5vZGUxKSB8fCBkXzEuaXNEb21WTm9kZShkbm9kZTIpKSB7XHJcbiAgICAgICAgICAgIGlmIChkbm9kZTEuZG9tTm9kZSAhPT0gZG5vZGUyLmRvbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZG5vZGUxLnRhZyAhPT0gZG5vZGUyLnRhZykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkbm9kZTEucHJvcGVydGllcy5rZXkgIT09IGRub2RlMi5wcm9wZXJ0aWVzLmtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZF8xLmlzV05vZGUoZG5vZGUxKSAmJiBkXzEuaXNXTm9kZShkbm9kZTIpKSB7XHJcbiAgICAgICAgaWYgKGRub2RlMS5pbnN0YW5jZSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBkbm9kZTIud2lkZ2V0Q29uc3RydWN0b3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRub2RlMS53aWRnZXRDb25zdHJ1Y3RvciAhPT0gZG5vZGUyLndpZGdldENvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRub2RlMS5wcm9wZXJ0aWVzLmtleSAhPT0gZG5vZGUyLnByb3BlcnRpZXMua2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxudmFyIG1pc3NpbmdUcmFuc2l0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlIGEgdHJhbnNpdGlvbnMgb2JqZWN0IHRvIHRoZSBwcm9qZWN0aW9uT3B0aW9ucyB0byBkbyBhbmltYXRpb25zJyk7XHJcbn07XHJcbmZ1bmN0aW9uIGdldFByb2plY3Rpb25PcHRpb25zKHByb2plY3Rvck9wdGlvbnMsIHByb2plY3Rvckluc3RhbmNlKSB7XHJcbiAgICB2YXIgZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgbmFtZXNwYWNlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgc3R5bGVBcHBseWVyOiBmdW5jdGlvbiAoZG9tTm9kZSwgc3R5bGVOYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBkb21Ob2RlLnN0eWxlW3N0eWxlTmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyYW5zaXRpb25zOiB7XHJcbiAgICAgICAgICAgIGVudGVyOiBtaXNzaW5nVHJhbnNpdGlvbixcclxuICAgICAgICAgICAgZXhpdDogbWlzc2luZ1RyYW5zaXRpb25cclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlcHRoOiAwLFxyXG4gICAgICAgIG1lcmdlOiBmYWxzZSxcclxuICAgICAgICBzeW5jOiBmYWxzZSxcclxuICAgICAgICBwcm9qZWN0b3JJbnN0YW5jZTogcHJvamVjdG9ySW5zdGFuY2VcclxuICAgIH07XHJcbiAgICByZXR1cm4gdHNsaWJfMS5fX2Fzc2lnbih7fSwgZGVmYXVsdHMsIHByb2plY3Rvck9wdGlvbnMpO1xyXG59XHJcbmZ1bmN0aW9uIGNoZWNrU3R5bGVWYWx1ZShzdHlsZVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHN0eWxlVmFsdWUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHlsZSB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzJyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlRXZlbnQoZG9tTm9kZSwgZXZlbnROYW1lLCBjdXJyZW50VmFsdWUsIHByb2plY3Rpb25PcHRpb25zLCBiaW5kLCBwcmV2aW91c1ZhbHVlKSB7XHJcbiAgICB2YXIgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgdmFyIGV2ZW50TWFwID0gcHJvamVjdG9yU3RhdGUubm9kZU1hcC5nZXQoZG9tTm9kZSkgfHwgbmV3IFdlYWtNYXBfMS5kZWZhdWx0KCk7XHJcbiAgICBpZiAocHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gZXZlbnRNYXAuZ2V0KHByZXZpb3VzVmFsdWUpO1xyXG4gICAgICAgIGRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHByZXZpb3VzRXZlbnQpO1xyXG4gICAgfVxyXG4gICAgdmFyIGNhbGxiYWNrID0gY3VycmVudFZhbHVlLmJpbmQoYmluZCk7XHJcbiAgICBpZiAoZXZlbnROYW1lID09PSAnaW5wdXQnKSB7XHJcbiAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXZ0KSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5jYWxsKHRoaXMsIGV2dCk7XHJcbiAgICAgICAgICAgIGV2dC50YXJnZXRbJ29uaW5wdXQtdmFsdWUnXSA9IGV2dC50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgfS5iaW5kKGJpbmQpO1xyXG4gICAgfVxyXG4gICAgZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xyXG4gICAgZXZlbnRNYXAuc2V0KGN1cnJlbnRWYWx1ZSwgY2FsbGJhY2spO1xyXG4gICAgcHJvamVjdG9yU3RhdGUubm9kZU1hcC5zZXQoZG9tTm9kZSwgZXZlbnRNYXApO1xyXG59XHJcbmZ1bmN0aW9uIGFkZENsYXNzZXMoZG9tTm9kZSwgY2xhc3Nlcykge1xyXG4gICAgaWYgKGNsYXNzZXMpIHtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZG9tTm9kZS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZXNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIGNsYXNzZXMpIHtcclxuICAgIGlmIChjbGFzc2VzKSB7XHJcbiAgICAgICAgdmFyIGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gYnVpbGRQcmV2aW91c1Byb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXMsIGN1cnJlbnQpIHtcclxuICAgIHZhciBkaWZmVHlwZSA9IGN1cnJlbnQuZGlmZlR5cGUsIHByb3BlcnRpZXMgPSBjdXJyZW50LnByb3BlcnRpZXMsIGF0dHJpYnV0ZXMgPSBjdXJyZW50LmF0dHJpYnV0ZXM7XHJcbiAgICBpZiAoIWRpZmZUeXBlIHx8IGRpZmZUeXBlID09PSAndmRvbScpIHtcclxuICAgICAgICByZXR1cm4geyBwcm9wZXJ0aWVzOiBwcmV2aW91cy5wcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzOiBwcmV2aW91cy5hdHRyaWJ1dGVzLCBldmVudHM6IHByZXZpb3VzLmV2ZW50cyB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZGlmZlR5cGUgPT09ICdub25lJykge1xyXG4gICAgICAgIHJldHVybiB7IHByb3BlcnRpZXM6IHt9LCBhdHRyaWJ1dGVzOiBwcmV2aW91cy5hdHRyaWJ1dGVzID8ge30gOiB1bmRlZmluZWQsIGV2ZW50czogcHJldmlvdXMuZXZlbnRzIH07XHJcbiAgICB9XHJcbiAgICB2YXIgbmV3UHJvcGVydGllcyA9IHtcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7fVxyXG4gICAgfTtcclxuICAgIGlmIChhdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgbmV3UHJvcGVydGllcy5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgbmV3UHJvcGVydGllcy5ldmVudHMgPSBwcmV2aW91cy5ldmVudHM7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocHJvcGVydGllcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzW3Byb3BOYW1lXSA9IGRvbU5vZGVbcHJvcE5hbWVdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJOYW1lKSB7XHJcbiAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMuYXR0cmlidXRlc1thdHRyTmFtZV0gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZShhdHRyTmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld1Byb3BlcnRpZXM7XHJcbiAgICB9XHJcbiAgICBuZXdQcm9wZXJ0aWVzLnByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5yZWR1Y2UoZnVuY3Rpb24gKHByb3BzLCBwcm9wZXJ0eSkge1xyXG4gICAgICAgIHByb3BzW3Byb3BlcnR5XSA9IGRvbU5vZGUuZ2V0QXR0cmlidXRlKHByb3BlcnR5KSB8fCBkb21Ob2RlW3Byb3BlcnR5XTtcclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9LCB7fSk7XHJcbiAgICByZXR1cm4gbmV3UHJvcGVydGllcztcclxufVxyXG5mdW5jdGlvbiBmb2N1c05vZGUocHJvcFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBkb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgdmFyIHJlc3VsdDtcclxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcHJvcFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSBwcm9wVmFsdWUgJiYgIXByZXZpb3VzVmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZG9tTm9kZS5mb2N1cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIG9ubHlFdmVudHMpIHtcclxuICAgIGlmIChvbmx5RXZlbnRzID09PSB2b2lkIDApIHsgb25seUV2ZW50cyA9IGZhbHNlOyB9XHJcbiAgICB2YXIgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgdmFyIGV2ZW50TWFwID0gcHJvamVjdG9yU3RhdGUubm9kZU1hcC5nZXQoZG9tTm9kZSk7XHJcbiAgICBpZiAoZXZlbnRNYXApIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhwcmV2aW91c1Byb3BlcnRpZXMpLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0V2ZW50ID0gcHJvcE5hbWUuc3Vic3RyKDAsIDIpID09PSAnb24nIHx8IG9ubHlFdmVudHM7XHJcbiAgICAgICAgICAgIHZhciBldmVudE5hbWUgPSBvbmx5RXZlbnRzID8gcHJvcE5hbWUgOiBwcm9wTmFtZS5zdWJzdHIoMik7XHJcbiAgICAgICAgICAgIGlmIChpc0V2ZW50ICYmICFwcm9wZXJ0aWVzW3Byb3BOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50Q2FsbGJhY2sgPSBldmVudE1hcC5nZXQocHJldmlvdXNQcm9wZXJ0aWVzW3Byb3BOYW1lXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlKGRvbU5vZGUsIGF0dHJOYW1lLCBhdHRyVmFsdWUsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMubmFtZXNwYWNlID09PSBOQU1FU1BBQ0VfU1ZHICYmIGF0dHJOYW1lID09PSAnaHJlZicpIHtcclxuICAgICAgICBkb21Ob2RlLnNldEF0dHJpYnV0ZU5TKE5BTUVTUEFDRV9YTElOSywgYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgoYXR0ck5hbWUgPT09ICdyb2xlJyAmJiBhdHRyVmFsdWUgPT09ICcnKSB8fCBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGRvbU5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGRvbU5vZGUuc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZSwgcHJldmlvdXNBdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgdmFyIGF0dHJOYW1lcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpO1xyXG4gICAgdmFyIGF0dHJDb3VudCA9IGF0dHJOYW1lcy5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGF0dHJOYW1lID0gYXR0ck5hbWVzW2ldO1xyXG4gICAgICAgIHZhciBhdHRyVmFsdWUgPSBhdHRyaWJ1dGVzW2F0dHJOYW1lXTtcclxuICAgICAgICB2YXIgcHJldmlvdXNBdHRyVmFsdWUgPSBwcmV2aW91c0F0dHJpYnV0ZXNbYXR0ck5hbWVdO1xyXG4gICAgICAgIGlmIChhdHRyVmFsdWUgIT09IHByZXZpb3VzQXR0clZhbHVlKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZShkb21Ob2RlLCBhdHRyTmFtZSwgYXR0clZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzKSB7XHJcbiAgICBpZiAoaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzID09PSB2b2lkIDApIHsgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzID0gdHJ1ZTsgfVxyXG4gICAgdmFyIHByb3BlcnRpZXNVcGRhdGVkID0gZmFsc2U7XHJcbiAgICB2YXIgcHJvcE5hbWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyk7XHJcbiAgICB2YXIgcHJvcENvdW50ID0gcHJvcE5hbWVzLmxlbmd0aDtcclxuICAgIGlmIChwcm9wTmFtZXMuaW5kZXhPZignY2xhc3NlcycpID09PSAtMSAmJiBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcykge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzKSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcy5jbGFzc2VzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzICYmIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wQ291bnQ7IGkrKykge1xyXG4gICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BOYW1lc1tpXTtcclxuICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcGVydGllc1twcm9wTmFtZV07XHJcbiAgICAgICAgdmFyIHByZXZpb3VzVmFsdWUgPSBwcmV2aW91c1Byb3BlcnRpZXNbcHJvcE5hbWVdO1xyXG4gICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2NsYXNzZXMnKSB7XHJcbiAgICAgICAgICAgIHZhciBwcmV2aW91c0NsYXNzZXMgPSBBcnJheS5pc0FycmF5KHByZXZpb3VzVmFsdWUpID8gcHJldmlvdXNWYWx1ZSA6IFtwcmV2aW91c1ZhbHVlXTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRDbGFzc2VzID0gQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpID8gcHJvcFZhbHVlIDogW3Byb3BWYWx1ZV07XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0NsYXNzZXMgJiYgcHJldmlvdXNDbGFzc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICghcHJvcFZhbHVlIHx8IHByb3BWYWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpXzEgPSAwOyBpXzEgPCBwcmV2aW91c0NsYXNzZXMubGVuZ3RoOyBpXzErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzQ2xhc3Nlc1tpXzFdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3Q2xhc3NlcyA9IHRzbGliXzEuX19zcHJlYWQoY3VycmVudENsYXNzZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlfMiA9IDA7IGlfMiA8IHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGg7IGlfMisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0NsYXNzTmFtZSA9IHByZXZpb3VzQ2xhc3Nlc1tpXzJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNDbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGFzc0luZGV4ID0gbmV3Q2xhc3Nlcy5pbmRleE9mKHByZXZpb3VzQ2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc0luZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNDbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2xhc3Nlcy5zcGxpY2UoY2xhc3NJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV8zID0gMDsgaV8zIDwgbmV3Q2xhc3Nlcy5sZW5ndGg7IGlfMysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZENsYXNzZXMoZG9tTm9kZSwgbmV3Q2xhc3Nlc1tpXzNdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpXzQgPSAwOyBpXzQgPCBjdXJyZW50Q2xhc3Nlcy5sZW5ndGg7IGlfNCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3Nlcyhkb21Ob2RlLCBjdXJyZW50Q2xhc3Nlc1tpXzRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcm9wTmFtZSA9PT0gJ2ZvY3VzJykge1xyXG4gICAgICAgICAgICBmb2N1c05vZGUocHJvcFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBkb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSAnc3R5bGVzJykge1xyXG4gICAgICAgICAgICB2YXIgc3R5bGVOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BWYWx1ZSk7XHJcbiAgICAgICAgICAgIHZhciBzdHlsZUNvdW50ID0gc3R5bGVOYW1lcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3R5bGVDb3VudDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3R5bGVOYW1lID0gc3R5bGVOYW1lc1tqXTtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdTdHlsZVZhbHVlID0gcHJvcFZhbHVlW3N0eWxlTmFtZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkU3R5bGVWYWx1ZSA9IHByZXZpb3VzVmFsdWUgJiYgcHJldmlvdXNWYWx1ZVtzdHlsZU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld1N0eWxlVmFsdWUgPT09IG9sZFN0eWxlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNVcGRhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXdTdHlsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tTdHlsZVZhbHVlKG5ld1N0eWxlVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zLnN0eWxlQXBwbHllcihkb21Ob2RlLCBzdHlsZU5hbWUsIG5ld1N0eWxlVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMuc3R5bGVBcHBseWVyKGRvbU5vZGUsIHN0eWxlTmFtZSwgJycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXByb3BWYWx1ZSAmJiB0eXBlb2YgcHJldmlvdXNWYWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHByb3BWYWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ3ZhbHVlJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRvbVZhbHVlID0gZG9tTm9kZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9tVmFsdWUgIT09IHByb3BWYWx1ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChkb21Ob2RlWydvbmlucHV0LXZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBkb21WYWx1ZSA9PT0gZG9tTm9kZVsnb25pbnB1dC12YWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcHJvcFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbJ29uaW5wdXQtdmFsdWUnXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwcm9wVmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgIT09ICdrZXknICYmIHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbicgJiYgcHJvcE5hbWUubGFzdEluZGV4T2YoJ29uJywgMCkgPT09IDAgJiYgaW5jbHVkZXNFdmVudHNBbmRBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlRXZlbnQoZG9tTm9kZSwgcHJvcE5hbWUuc3Vic3RyKDIpLCBwcm9wVmFsdWUsIHByb2plY3Rpb25PcHRpb25zLCBwcm9wZXJ0aWVzLmJpbmQsIHByZXZpb3VzVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgcHJvcE5hbWUgIT09ICdpbm5lckhUTUwnICYmIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZShkb21Ob2RlLCBwcm9wTmFtZSwgcHJvcFZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wTmFtZSA9PT0gJ3Njcm9sbExlZnQnIHx8IHByb3BOYW1lID09PSAnc2Nyb2xsVG9wJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb21Ob2RlW3Byb3BOYW1lXSAhPT0gcHJvcFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGVbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1VwZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3BlcnRpZXNVcGRhdGVkO1xyXG59XHJcbmZ1bmN0aW9uIGZpbmRJbmRleE9mQ2hpbGQoY2hpbGRyZW4sIHNhbWVBcywgc3RhcnQpIHtcclxuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHNhbWUoY2hpbGRyZW5baV0sIHNhbWVBcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbmZ1bmN0aW9uIHRvUGFyZW50Vk5vZGUoZG9tTm9kZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0YWc6ICcnLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxyXG4gICAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXHJcbiAgICAgICAgZG9tTm9kZTogZG9tTm9kZSxcclxuICAgICAgICB0eXBlOiBkXzEuVk5PREVcclxuICAgIH07XHJcbn1cclxuZXhwb3J0cy50b1BhcmVudFZOb2RlID0gdG9QYXJlbnRWTm9kZTtcclxuZnVuY3Rpb24gdG9UZXh0Vk5vZGUoZGF0YSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0YWc6ICcnLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxyXG4gICAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGV4dDogXCJcIiArIGRhdGEsXHJcbiAgICAgICAgZG9tTm9kZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIHR5cGU6IGRfMS5WTk9ERVxyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLnRvVGV4dFZOb2RlID0gdG9UZXh0Vk5vZGU7XHJcbmZ1bmN0aW9uIHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcclxuICAgICAgICByZW5kZXJlZDogW10sXHJcbiAgICAgICAgY29yZVByb3BlcnRpZXM6IGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcyxcclxuICAgICAgICBjaGlsZHJlbjogaW5zdGFuY2UuY2hpbGRyZW4sXHJcbiAgICAgICAgd2lkZ2V0Q29uc3RydWN0b3I6IGluc3RhbmNlLmNvbnN0cnVjdG9yLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IGluc3RhbmNlRGF0YS5pbnB1dFByb3BlcnRpZXMsXHJcbiAgICAgICAgdHlwZTogZF8xLldOT0RFXHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oY2hpbGRyZW4sIGluc3RhbmNlKSB7XHJcbiAgICBpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBlbXB0eUFycmF5O1xyXG4gICAgfVxyXG4gICAgY2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogW2NoaWxkcmVuXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOykge1xyXG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkIHx8IGNoaWxkID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5baV0gPSB0b1RleHRWTm9kZShjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZF8xLmlzVk5vZGUoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQucHJvcGVydGllcy5iaW5kID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcm9wZXJ0aWVzLmJpbmQgPSBpbnN0YW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5jb3JlUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZURhdGEgPSBleHBvcnRzLndpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuY29yZVByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmQ6IGluc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlUmVnaXN0cnk6IGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iYXNlUmVnaXN0cnlcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaSsrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xyXG59XHJcbmV4cG9ydHMuZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbiA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW47XHJcbmZ1bmN0aW9uIG5vZGVBZGRlZChkbm9kZSwgdHJhbnNpdGlvbnMpIHtcclxuICAgIGlmIChkXzEuaXNWTm9kZShkbm9kZSkgJiYgZG5vZGUucHJvcGVydGllcykge1xyXG4gICAgICAgIHZhciBlbnRlckFuaW1hdGlvbiA9IGRub2RlLnByb3BlcnRpZXMuZW50ZXJBbmltYXRpb247XHJcbiAgICAgICAgaWYgKGVudGVyQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZW50ZXJBbmltYXRpb24gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGVudGVyQW5pbWF0aW9uKGRub2RlLmRvbU5vZGUsIGRub2RlLnByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuZW50ZXIoZG5vZGUuZG9tTm9kZSwgZG5vZGUucHJvcGVydGllcywgZW50ZXJBbmltYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIG5vZGVUb1JlbW92ZShkbm9kZSwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBpZiAoZF8xLmlzV05vZGUoZG5vZGUpKSB7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVkID0gZG5vZGUucmVuZGVyZWQgfHwgZW1wdHlBcnJheTtcclxuICAgICAgICBpZiAoZG5vZGUuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IGV4cG9ydHMud2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGRub2RlLmluc3RhbmNlKTtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm9uRGV0YWNoKCk7XHJcbiAgICAgICAgICAgIGluc3RhbmNlTWFwLmRlbGV0ZShkbm9kZS5pbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZGVyZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbm9kZVRvUmVtb3ZlKHJlbmRlcmVkW2ldLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBkb21Ob2RlXzEgPSBkbm9kZS5kb21Ob2RlO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gZG5vZGUucHJvcGVydGllcztcclxuICAgICAgICBpZiAoZG5vZGUuY2hpbGRyZW4gJiYgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUoZG5vZGUuY2hpbGRyZW5baV0sIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGV4aXRBbmltYXRpb24gPSBwcm9wZXJ0aWVzLmV4aXRBbmltYXRpb247XHJcbiAgICAgICAgaWYgKHByb3BlcnRpZXMgJiYgZXhpdEFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICBkb21Ob2RlXzEuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICAgICAgdmFyIHJlbW92ZURvbU5vZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBkb21Ob2RlXzEgJiYgZG9tTm9kZV8xLnBhcmVudE5vZGUgJiYgZG9tTm9kZV8xLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZV8xKTtcclxuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhpdEFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZXhpdEFuaW1hdGlvbihkb21Ob2RlXzEsIHJlbW92ZURvbU5vZGUsIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuZXhpdChkbm9kZS5kb21Ob2RlLCBwcm9wZXJ0aWVzLCBleGl0QW5pbWF0aW9uLCByZW1vdmVEb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkb21Ob2RlXzEgJiYgZG9tTm9kZV8xLnBhcmVudE5vZGUgJiYgZG9tTm9kZV8xLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZV8xKTtcclxuICAgICAgICBkbm9kZS5kb21Ob2RlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKGNoaWxkTm9kZXMsIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpIHtcclxuICAgIHZhciBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2luZGV4VG9DaGVja107XHJcbiAgICBpZiAoZF8xLmlzVk5vZGUoY2hpbGROb2RlKSAmJiAhY2hpbGROb2RlLnRhZykge1xyXG4gICAgICAgIHJldHVybjsgLy8gVGV4dCBub2RlcyBuZWVkIG5vdCBiZSBkaXN0aW5ndWlzaGFibGVcclxuICAgIH1cclxuICAgIHZhciBrZXkgPSBjaGlsZE5vZGUucHJvcGVydGllcy5rZXk7XHJcbiAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpICE9PSBpbmRleFRvQ2hlY2spIHtcclxuICAgICAgICAgICAgICAgIHZhciBub2RlID0gY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChzYW1lKG5vZGUsIGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZUlkZW50aWZpZXIgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudE5hbWUgPSBwYXJlbnRJbnN0YW5jZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICd1bmtub3duJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZF8xLmlzV05vZGUoY2hpbGROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlSWRlbnRpZmllciA9IGNoaWxkTm9kZS53aWRnZXRDb25zdHJ1Y3Rvci5uYW1lIHx8ICd1bmtub3duJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJZGVudGlmaWVyID0gY2hpbGROb2RlLnRhZztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiQSB3aWRnZXQgKFwiICsgcGFyZW50TmFtZSArIFwiKSBoYXMgaGFkIGEgY2hpbGQgYWRkZGVkIG9yIHJlbW92ZWQsIGJ1dCB0aGV5IHdlcmUgbm90IGFibGUgdG8gdW5pcXVlbHkgaWRlbnRpZmllZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gcHJvdmlkZSBhIHVuaXF1ZSAna2V5JyBwcm9wZXJ0eSB3aGVuIHVzaW5nIHRoZSBzYW1lIHdpZGdldCBvciBlbGVtZW50IChcIiArIG5vZGVJZGVudGlmaWVyICsgXCIpIG11bHRpcGxlIHRpbWVzIGFzIHNpYmxpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuKHBhcmVudFZOb2RlLCBvbGRDaGlsZHJlbiwgbmV3Q2hpbGRyZW4sIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgb2xkQ2hpbGRyZW4gPSBvbGRDaGlsZHJlbiB8fCBlbXB0eUFycmF5O1xyXG4gICAgbmV3Q2hpbGRyZW4gPSBuZXdDaGlsZHJlbjtcclxuICAgIHZhciBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZENoaWxkcmVuLmxlbmd0aDtcclxuICAgIHZhciBuZXdDaGlsZHJlbkxlbmd0aCA9IG5ld0NoaWxkcmVuLmxlbmd0aDtcclxuICAgIHZhciB0cmFuc2l0aW9ucyA9IHByb2plY3Rpb25PcHRpb25zLnRyYW5zaXRpb25zO1xyXG4gICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIHByb2plY3Rpb25PcHRpb25zID0gdHNsaWJfMS5fX2Fzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoICsgMSB9KTtcclxuICAgIHZhciBvbGRJbmRleCA9IDA7XHJcbiAgICB2YXIgbmV3SW5kZXggPSAwO1xyXG4gICAgdmFyIGk7XHJcbiAgICB2YXIgdGV4dFVwZGF0ZWQgPSBmYWxzZTtcclxuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBvbGRDaGlsZCA9IG9sZEluZGV4IDwgb2xkQ2hpbGRyZW5MZW5ndGggPyBvbGRDaGlsZHJlbltvbGRJbmRleF0gOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdmFyIG5ld0NoaWxkID0gbmV3Q2hpbGRyZW5bbmV3SW5kZXhdO1xyXG4gICAgICAgIGlmIChkXzEuaXNWTm9kZShuZXdDaGlsZCkgJiYgdHlwZW9mIG5ld0NoaWxkLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG5ld0NoaWxkLmluc2VydGVkID0gZF8xLmlzVk5vZGUob2xkQ2hpbGQpICYmIG9sZENoaWxkLmluc2VydGVkO1xyXG4gICAgICAgICAgICBhZGREZWZlcnJlZFByb3BlcnRpZXMobmV3Q2hpbGQsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9sZENoaWxkICE9PSB1bmRlZmluZWQgJiYgc2FtZShvbGRDaGlsZCwgbmV3Q2hpbGQpKSB7XHJcbiAgICAgICAgICAgIHRleHRVcGRhdGVkID0gdXBkYXRlRG9tKG9sZENoaWxkLCBuZXdDaGlsZCwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBwYXJlbnRJbnN0YW5jZSkgfHwgdGV4dFVwZGF0ZWQ7XHJcbiAgICAgICAgICAgIG9sZEluZGV4Kys7XHJcbiAgICAgICAgICAgIG5ld0luZGV4Kys7XHJcbiAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBmaW5kT2xkSW5kZXggPSBmaW5kSW5kZXhPZkNoaWxkKG9sZENoaWxkcmVuLCBuZXdDaGlsZCwgb2xkSW5kZXggKyAxKTtcclxuICAgICAgICB2YXIgYWRkQ2hpbGQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBpbnNlcnRCZWZvcmVEb21Ob2RlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBvbGRDaGlsZHJlbltvbGRJbmRleF07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5leHRJbmRleCA9IG9sZEluZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgIHZhciBpbnNlcnRCZWZvcmVDaGlsZHJlbiA9IFtjaGlsZF07XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZUNoaWxkcmVuLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRfMS5pc1dOb2RlKGluc2VydEJlZm9yZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZS5yZW5kZXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ucHVzaC5hcHBseShpbnNlcnRCZWZvcmVDaGlsZHJlbiwgdHNsaWJfMS5fX3NwcmVhZChpbnNlcnRCZWZvcmUucmVuZGVyZWQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZS5kb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVEb21Ob2RlID0gaW5zZXJ0QmVmb3JlLmRvbU5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ubGVuZ3RoID09PSAwICYmIG9sZENoaWxkcmVuW25leHRJbmRleF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ucHVzaChvbGRDaGlsZHJlbltuZXh0SW5kZXhdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNyZWF0ZURvbShuZXdDaGlsZCwgcGFyZW50Vk5vZGUsIGluc2VydEJlZm9yZURvbU5vZGUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIG5vZGVBZGRlZChuZXdDaGlsZCwgdHJhbnNpdGlvbnMpO1xyXG4gICAgICAgICAgICB2YXIgaW5kZXhUb0NoZWNrID0gbmV3SW5kZXg7XHJcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY2hlY2tEaXN0aW5ndWlzaGFibGUobmV3Q2hpbGRyZW4sIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghb2xkQ2hpbGQgfHwgZmluZE9sZEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICBhZGRDaGlsZCgpO1xyXG4gICAgICAgICAgICBuZXdJbmRleCsrO1xyXG4gICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleFRvQ2hlY2sgPSBvbGRJbmRleDtcclxuICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjaGVja0Rpc3Rpbmd1aXNoYWJsZShvbGRDaGlsZHJlbiwgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoZF8xLmlzV05vZGUob2xkQ2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGluc3RhbmNlTWFwLmdldChvbGRDaGlsZC5pbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9sZENoaWxkID0gaXRlbS5kbm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub2RlVG9SZW1vdmUob2xkQ2hpbGQsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgZmluZE5ld0luZGV4ID0gZmluZEluZGV4T2ZDaGlsZChuZXdDaGlsZHJlbiwgb2xkQ2hpbGQsIG5ld0luZGV4ICsgMSk7XHJcbiAgICAgICAgaWYgKGZpbmROZXdJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmVtb3ZlQ2hpbGQoKTtcclxuICAgICAgICAgICAgb2xkSW5kZXgrKztcclxuICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWRkQ2hpbGQoKTtcclxuICAgICAgICByZW1vdmVDaGlsZCgpO1xyXG4gICAgICAgIG9sZEluZGV4Kys7XHJcbiAgICAgICAgbmV3SW5kZXgrKztcclxuICAgIH07XHJcbiAgICB3aGlsZSAobmV3SW5kZXggPCBuZXdDaGlsZHJlbkxlbmd0aCkge1xyXG4gICAgICAgIF9sb29wXzEoKTtcclxuICAgIH1cclxuICAgIGlmIChvbGRDaGlsZHJlbkxlbmd0aCA+IG9sZEluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9sb29wXzIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleFRvQ2hlY2sgPSBpO1xyXG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZFRvUmVtb3ZlID0gb2xkQ2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChkXzEuaXNXTm9kZShjaGlsZFRvUmVtb3ZlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBpbnN0YW5jZU1hcC5nZXQoY2hpbGRUb1JlbW92ZS5pbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVG9SZW1vdmUgPSBpdGVtLmRub2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShjaGlsZFRvUmVtb3ZlLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gUmVtb3ZlIGNoaWxkIGZyYWdtZW50c1xyXG4gICAgICAgIGZvciAoaSA9IG9sZEluZGV4OyBpIDwgb2xkQ2hpbGRyZW5MZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBfbG9vcF8yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHRVcGRhdGVkO1xyXG59XHJcbmZ1bmN0aW9uIGFkZENoaWxkcmVuKHBhcmVudFZOb2RlLCBjaGlsZHJlbiwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlLCBpbnNlcnRCZWZvcmUsIGNoaWxkTm9kZXMpIHtcclxuICAgIGlmIChpbnNlcnRCZWZvcmUgPT09IHZvaWQgMCkgeyBpbnNlcnRCZWZvcmUgPSB1bmRlZmluZWQ7IH1cclxuICAgIGlmIChjaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5tZXJnZSAmJiBjaGlsZE5vZGVzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjaGlsZE5vZGVzID0gYXJyYXlfMS5mcm9tKHBhcmVudFZOb2RlLmRvbU5vZGUuY2hpbGROb2Rlcyk7XHJcbiAgICB9XHJcbiAgICB2YXIgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucztcclxuICAgIHByb2plY3Rpb25PcHRpb25zID0gdHNsaWJfMS5fX2Fzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgZGVwdGg6IHByb2plY3Rpb25PcHRpb25zLmRlcHRoICsgMSB9KTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICBpZiAoZF8xLmlzVk5vZGUoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5tZXJnZSAmJiBjaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZG9tRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZC5kb21Ob2RlID09PSB1bmRlZmluZWQgJiYgY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCA9IGNoaWxkTm9kZXMuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tRWxlbWVudCAmJiBkb21FbGVtZW50LnRhZ05hbWUgPT09IChjaGlsZC50YWcudG9VcHBlckNhc2UoKSB8fCB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmRvbU5vZGUgPSBkb21FbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjcmVhdGVEb20oY2hpbGQsIHBhcmVudFZOb2RlLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjcmVhdGVEb20oY2hpbGQsIHBhcmVudFZOb2RlLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgY2hpbGROb2Rlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGVBZGRlZChjaGlsZCwgdHJhbnNpdGlvbnMpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgYWRkQ2hpbGRyZW4oZG5vZGUsIGRub2RlLmNoaWxkcmVuLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIHVuZGVmaW5lZCk7XHJcbiAgICBpZiAodHlwZW9mIGRub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID09PSAnZnVuY3Rpb24nICYmIGRub2RlLmluc2VydGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhZGREZWZlcnJlZFByb3BlcnRpZXMoZG5vZGUsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIH1cclxuICAgIGlmIChkbm9kZS5hdHRyaWJ1dGVzICYmIGRub2RlLmV2ZW50cykge1xyXG4gICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZSwge30sIGRub2RlLmF0dHJpYnV0ZXMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucywgZmFsc2UpO1xyXG4gICAgICAgIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGUsIHt9LCBkbm9kZS5ldmVudHMsIHByb2plY3Rpb25PcHRpb25zLCB0cnVlKTtcclxuICAgICAgICB2YXIgZXZlbnRzXzEgPSBkbm9kZS5ldmVudHM7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzXzEpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50LCBldmVudHNfMVtldmVudF0sIHByb2plY3Rpb25PcHRpb25zLCBkbm9kZS5wcm9wZXJ0aWVzLmJpbmQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlLCB7fSwgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSBudWxsICYmIGRub2RlLnByb3BlcnRpZXMua2V5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gZXhwb3J0cy53aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGQoZG9tTm9kZSwgXCJcIiArIGRub2RlLnByb3BlcnRpZXMua2V5KTtcclxuICAgIH1cclxuICAgIGRub2RlLmluc2VydGVkID0gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVEb20oZG5vZGUsIHBhcmVudFZOb2RlLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgY2hpbGROb2Rlcykge1xyXG4gICAgdmFyIGRvbU5vZGU7XHJcbiAgICB2YXIgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgaWYgKGRfMS5pc1dOb2RlKGRub2RlKSkge1xyXG4gICAgICAgIHZhciB3aWRnZXRDb25zdHJ1Y3RvciA9IGRub2RlLndpZGdldENvbnN0cnVjdG9yO1xyXG4gICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZURhdGEgPSBleHBvcnRzLndpZGdldEluc3RhbmNlTWFwLmdldChwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgaWYgKCFSZWdpc3RyeV8xLmlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKHdpZGdldENvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IHBhcmVudEluc3RhbmNlRGF0YS5yZWdpc3RyeSgpLmdldCh3aWRnZXRDb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2lkZ2V0Q29uc3RydWN0b3IgPSBpdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaW5zdGFuY2VfMSA9IG5ldyB3aWRnZXRDb25zdHJ1Y3RvcigpO1xyXG4gICAgICAgIGRub2RlLmluc3RhbmNlID0gaW5zdGFuY2VfMTtcclxuICAgICAgICB2YXIgaW5zdGFuY2VEYXRhXzEgPSBleHBvcnRzLndpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZV8xKTtcclxuICAgICAgICBpbnN0YW5jZURhdGFfMS5pbnZhbGlkYXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGFfMS5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZURhdGFfMS5yZW5kZXJpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZS5wdXNoKHsgaW5zdGFuY2U6IGluc3RhbmNlXzEsIGRlcHRoOiBwcm9qZWN0aW9uT3B0aW9ucy5kZXB0aCB9KTtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlUmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhXzEucmVuZGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICBpbnN0YW5jZV8xLl9fc2V0Q29yZVByb3BlcnRpZXNfXyhkbm9kZS5jb3JlUHJvcGVydGllcyk7XHJcbiAgICAgICAgaW5zdGFuY2VfMS5fX3NldENoaWxkcmVuX18oZG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICAgIGluc3RhbmNlXzEuX19zZXRQcm9wZXJ0aWVzX18oZG5vZGUucHJvcGVydGllcyk7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVkID0gaW5zdGFuY2VfMS5fX3JlbmRlcl9fKCk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhXzEucmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlbmRlcmVkKSB7XHJcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZFJlbmRlcmVkID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihyZW5kZXJlZCwgaW5zdGFuY2VfMSk7XHJcbiAgICAgICAgICAgIGRub2RlLnJlbmRlcmVkID0gZmlsdGVyZWRSZW5kZXJlZDtcclxuICAgICAgICAgICAgYWRkQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIGZpbHRlcmVkUmVuZGVyZWQsIHByb2plY3Rpb25PcHRpb25zLCBpbnN0YW5jZV8xLCBpbnNlcnRCZWZvcmUsIGNoaWxkTm9kZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2VfMSwgeyBkbm9kZTogZG5vZGUsIHBhcmVudFZOb2RlOiBwYXJlbnRWTm9kZSB9KTtcclxuICAgICAgICBpbnN0YW5jZURhdGFfMS5ub2RlSGFuZGxlci5hZGRSb290KCk7XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YV8xLm9uQXR0YWNoKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgcHJvamVjdG9yU3RhdGUubWVyZ2VFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaW5pdFByb3BlcnRpZXNBbmRDaGlsZHJlbihkb21Ob2RlLCBkbm9kZSwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZG9jID0gcGFyZW50Vk5vZGUuZG9tTm9kZS5vd25lckRvY3VtZW50O1xyXG4gICAgICAgIGlmICghZG5vZGUudGFnICYmIHR5cGVvZiBkbm9kZS50ZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUuZG9tTm9kZSAhPT0gdW5kZWZpbmVkICYmIHBhcmVudFZOb2RlLmRvbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdEb21Ob2RlID0gZG5vZGUuZG9tTm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRub2RlLnRleHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFZOb2RlLmRvbU5vZGUgPT09IGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUucmVwbGFjZUNoaWxkKG5ld0RvbU5vZGUsIGRub2RlLmRvbU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5hcHBlbmRDaGlsZChuZXdEb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICBkbm9kZS5kb21Ob2RlLnBhcmVudE5vZGUgJiYgZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRub2RlLmRvbU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZSA9IG5ld0RvbU5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IGRvYy5jcmVhdGVUZXh0Tm9kZShkbm9kZS50ZXh0KTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuaW5zZXJ0QmVmb3JlKGRvbU5vZGUsIGluc2VydEJlZm9yZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmFwcGVuZENoaWxkKGRvbU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUuZG9tTm9kZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZG5vZGUudGFnID09PSAnc3ZnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zID0gdHNsaWJfMS5fX2Fzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgbmFtZXNwYWNlOiBOQU1FU1BBQ0VfU1ZHIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudE5TKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSwgZG5vZGUudGFnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG5vZGUuZG9tTm9kZSB8fCBkb2MuY3JlYXRlRWxlbWVudChkbm9kZS50YWcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5pdFByb3BlcnRpZXNBbmRDaGlsZHJlbihkb21Ob2RlLCBkbm9kZSwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmluc2VydEJlZm9yZShkb21Ob2RlLCBpbnNlcnRCZWZvcmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRvbU5vZGUucGFyZW50Tm9kZSAhPT0gcGFyZW50Vk5vZGUuZG9tTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5hcHBlbmRDaGlsZChkb21Ob2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB1cGRhdGVEb20ocHJldmlvdXMsIGRub2RlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50Vk5vZGUsIHBhcmVudEluc3RhbmNlKSB7XHJcbiAgICBpZiAoZF8xLmlzV05vZGUoZG5vZGUpKSB7XHJcbiAgICAgICAgdmFyIGluc3RhbmNlID0gcHJldmlvdXMuaW5zdGFuY2U7XHJcbiAgICAgICAgdmFyIF9hID0gaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKSwgcGFyZW50Vk5vZGVfMSA9IF9hLnBhcmVudFZOb2RlLCBub2RlID0gX2EuZG5vZGU7XHJcbiAgICAgICAgdmFyIHByZXZpb3VzUmVuZGVyZWQgPSBub2RlID8gbm9kZS5yZW5kZXJlZCA6IHByZXZpb3VzLnJlbmRlcmVkO1xyXG4gICAgICAgIHZhciBpbnN0YW5jZURhdGEgPSBleHBvcnRzLndpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgaW5zdGFuY2UuX19zZXRDb3JlUHJvcGVydGllc19fKGRub2RlLmNvcmVQcm9wZXJ0aWVzKTtcclxuICAgICAgICBpbnN0YW5jZS5fX3NldENoaWxkcmVuX18oZG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICAgIGluc3RhbmNlLl9fc2V0UHJvcGVydGllc19fKGRub2RlLnByb3BlcnRpZXMpO1xyXG4gICAgICAgIGRub2RlLmluc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5kaXJ0eSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyZWQgPSBpbnN0YW5jZS5fX3JlbmRlcl9fKCk7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgZG5vZGUucmVuZGVyZWQgPSBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKHJlbmRlcmVkLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKHBhcmVudFZOb2RlXzEsIHByZXZpb3VzUmVuZGVyZWQsIGRub2RlLnJlbmRlcmVkLCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLnJlbmRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IHByZXZpb3VzUmVuZGVyZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZSwgeyBkbm9kZTogZG5vZGUsIHBhcmVudFZOb2RlOiBwYXJlbnRWTm9kZV8xIH0pO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGRSb290KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAocHJldmlvdXMgPT09IGRub2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRvbU5vZGVfMiA9IChkbm9kZS5kb21Ob2RlID0gcHJldmlvdXMuZG9tTm9kZSk7XHJcbiAgICAgICAgdmFyIHRleHRVcGRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHVwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIWRub2RlLnRhZyAmJiB0eXBlb2YgZG5vZGUudGV4dCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGRub2RlLnRleHQgIT09IHByZXZpb3VzLnRleHQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdEb21Ob2RlID0gZG9tTm9kZV8yLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCk7XHJcbiAgICAgICAgICAgICAgICBkb21Ob2RlXzIucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3RG9tTm9kZSwgZG9tTm9kZV8yKTtcclxuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSBuZXdEb21Ob2RlO1xyXG4gICAgICAgICAgICAgICAgdGV4dFVwZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHRVcGRhdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUudGFnICYmIGRub2RlLnRhZy5sYXN0SW5kZXhPZignc3ZnJywgMCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zID0gdHNsaWJfMS5fX2Fzc2lnbih7fSwgcHJvamVjdGlvbk9wdGlvbnMsIHsgbmFtZXNwYWNlOiBOQU1FU1BBQ0VfU1ZHIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91cy5jaGlsZHJlbiAhPT0gZG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4oZG5vZGUuY2hpbGRyZW4sIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGRub2RlLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkID1cclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVDaGlsZHJlbihkbm9kZSwgcHJldmlvdXMuY2hpbGRyZW4sIGNoaWxkcmVuLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHx8IHVwZGF0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHByZXZpb3VzUHJvcGVydGllc18xID0gYnVpbGRQcmV2aW91c1Byb3BlcnRpZXMoZG9tTm9kZV8yLCBwcmV2aW91cywgZG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUuYXR0cmlidXRlcyAmJiBkbm9kZS5ldmVudHMpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMoZG9tTm9kZV8yLCBwcmV2aW91c1Byb3BlcnRpZXNfMS5hdHRyaWJ1dGVzLCBkbm9kZS5hdHRyaWJ1dGVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkID1cclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGVfMiwgcHJldmlvdXNQcm9wZXJ0aWVzXzEucHJvcGVydGllcywgZG5vZGUucHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIGZhbHNlKSB8fCB1cGRhdGVkO1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlT3JwaGFuZWRFdmVudHMoZG9tTm9kZV8yLCBwcmV2aW91c1Byb3BlcnRpZXNfMS5ldmVudHMsIGRub2RlLmV2ZW50cywgcHJvamVjdGlvbk9wdGlvbnMsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50c18yID0gZG5vZGUuZXZlbnRzO1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRzXzIpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlRXZlbnQoZG9tTm9kZV8yLCBldmVudCwgZXZlbnRzXzJbZXZlbnRdLCBwcm9qZWN0aW9uT3B0aW9ucywgZG5vZGUucHJvcGVydGllcy5iaW5kLCBwcmV2aW91c1Byb3BlcnRpZXNfMS5ldmVudHNbZXZlbnRdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlZCA9XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlXzIsIHByZXZpb3VzUHJvcGVydGllc18xLnByb3BlcnRpZXMsIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gbnVsbCAmJiBkbm9kZS5wcm9wZXJ0aWVzLmtleSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gZXhwb3J0cy53aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZChkb21Ob2RlXzIsIFwiXCIgKyBkbm9kZS5wcm9wZXJ0aWVzLmtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVwZGF0ZWQgJiYgZG5vZGUucHJvcGVydGllcyAmJiBkbm9kZS5wcm9wZXJ0aWVzLnVwZGF0ZUFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICBkbm9kZS5wcm9wZXJ0aWVzLnVwZGF0ZUFuaW1hdGlvbihkb21Ob2RlXzIsIGRub2RlLnByb3BlcnRpZXMsIHByZXZpb3VzLnByb3BlcnRpZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBhZGREZWZlcnJlZFByb3BlcnRpZXModm5vZGUsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICAvLyB0cmFuc2ZlciBhbnkgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgLSBhcyB0aGVzZSBtdXN0IGJlIGRlY29yYXRlZCBwcm9wZXJ0aWVzXHJcbiAgICB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMgPSB2bm9kZS5wcm9wZXJ0aWVzO1xyXG4gICAgdmFyIHByb3BlcnRpZXMgPSB2bm9kZS5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayghIXZub2RlLmluc2VydGVkKTtcclxuICAgIHZhciBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICB2bm9kZS5wcm9wZXJ0aWVzID0gdHNsaWJfMS5fX2Fzc2lnbih7fSwgcHJvcGVydGllcywgdm5vZGUuZGVjb3JhdGVkRGVmZXJyZWRQcm9wZXJ0aWVzKTtcclxuICAgIHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdHNsaWJfMS5fX2Fzc2lnbih7fSwgdm5vZGUuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2soISF2bm9kZS5pbnNlcnRlZCksIHZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllcyk7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyh2bm9kZS5kb21Ob2RlLCB2bm9kZS5wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgdm5vZGUucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGlmIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xyXG4gICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZ2xvYmFsXzEuZGVmYXVsdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICB2YXIgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgaWYgKHByb2plY3Rpb25PcHRpb25zLnN5bmMpIHtcclxuICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGdsb2JhbF8xLmRlZmF1bHQucmVxdWVzdElkbGVDYWxsYmFjaykge1xyXG4gICAgICAgICAgICBnbG9iYWxfMS5kZWZhdWx0LnJlcXVlc3RJZGxlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBzY2hlZHVsZVJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XHJcbiAgICAgICAgcmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGUucmVuZGVyU2NoZWR1bGVkID0gZ2xvYmFsXzEuZGVmYXVsdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IHVuZGVmaW5lZDtcclxuICAgIHZhciByZW5kZXJRdWV1ZSA9IHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlO1xyXG4gICAgdmFyIHJlbmRlcnMgPSB0c2xpYl8xLl9fc3ByZWFkKHJlbmRlclF1ZXVlKTtcclxuICAgIHByb2plY3RvclN0YXRlLnJlbmRlclF1ZXVlID0gW107XHJcbiAgICByZW5kZXJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZGVwdGggLSBiLmRlcHRoOyB9KTtcclxuICAgIHZhciBwcmV2aW91c2x5UmVuZGVyZWQgPSBbXTtcclxuICAgIHdoaWxlIChyZW5kZXJzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHJlbmRlcnMuc2hpZnQoKS5pbnN0YW5jZTtcclxuICAgICAgICBpZiAoaW5zdGFuY2VNYXAuaGFzKGluc3RhbmNlKSAmJiBwcmV2aW91c2x5UmVuZGVyZWQuaW5kZXhPZihpbnN0YW5jZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzbHlSZW5kZXJlZC5wdXNoKGluc3RhbmNlKTtcclxuICAgICAgICAgICAgdmFyIF9hID0gaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKSwgcGFyZW50Vk5vZGUgPSBfYS5wYXJlbnRWTm9kZSwgZG5vZGUgPSBfYS5kbm9kZTtcclxuICAgICAgICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IGV4cG9ydHMud2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICAgICAgdXBkYXRlRG9tKGRub2RlLCB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSksIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRWTm9kZSwgaW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIHJ1bkRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKTtcclxufVxyXG5leHBvcnRzLmRvbSA9IHtcclxuICAgIGFwcGVuZDogZnVuY3Rpb24gKHBhcmVudE5vZGUsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucyA9PT0gdm9pZCAwKSB7IHByb2plY3Rpb25PcHRpb25zID0ge307IH1cclxuICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gZXhwb3J0cy53aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgIHZhciBmaW5hbFByb2plY3Rvck9wdGlvbnMgPSBnZXRQcm9qZWN0aW9uT3B0aW9ucyhwcm9qZWN0aW9uT3B0aW9ucywgaW5zdGFuY2UpO1xyXG4gICAgICAgIHZhciBwcm9qZWN0b3JTdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWZ0ZXJSZW5kZXJDYWxsYmFja3M6IFtdLFxyXG4gICAgICAgICAgICBkZWZlcnJlZFJlbmRlckNhbGxiYWNrczogW10sXHJcbiAgICAgICAgICAgIG5vZGVNYXA6IG5ldyBXZWFrTWFwXzEuZGVmYXVsdCgpLFxyXG4gICAgICAgICAgICByZW5kZXJTY2hlZHVsZWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgcmVuZGVyUXVldWU6IFtdLFxyXG4gICAgICAgICAgICBtZXJnZTogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgIG1lcmdlRWxlbWVudDogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50XHJcbiAgICAgICAgfTtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZU1hcC5zZXQoaW5zdGFuY2UsIHByb2plY3RvclN0YXRlKTtcclxuICAgICAgICBmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgIHZhciBwYXJlbnRWTm9kZSA9IHRvUGFyZW50Vk5vZGUoZmluYWxQcm9qZWN0b3JPcHRpb25zLnJvb3ROb2RlKTtcclxuICAgICAgICB2YXIgbm9kZSA9IHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKTtcclxuICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2UsIHsgZG5vZGU6IG5vZGUsIHBhcmVudFZOb2RlOiBwYXJlbnRWTm9kZSB9KTtcclxuICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZS5wdXNoKHsgaW5zdGFuY2U6IGluc3RhbmNlLCBkZXB0aDogZmluYWxQcm9qZWN0b3JPcHRpb25zLmRlcHRoIH0pO1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVSZW5kZXIoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdXBkYXRlRG9tKG5vZGUsIG5vZGUsIGZpbmFsUHJvamVjdG9yT3B0aW9ucywgcGFyZW50Vk5vZGUsIGluc3RhbmNlKTtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm9uQXR0YWNoKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcnVuRGVmZXJyZWRSZW5kZXJDYWxsYmFja3MoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcclxuICAgICAgICBydW5BZnRlclJlbmRlckNhbGxiYWNrcyhmaW5hbFByb2plY3Rvck9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRvbU5vZGU6IGZpbmFsUHJvamVjdG9yT3B0aW9ucy5yb290Tm9kZVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgfSxcclxuICAgIG1lcmdlOiBmdW5jdGlvbiAoZWxlbWVudCwgaW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHByb2plY3Rpb25PcHRpb25zID09PSB2b2lkIDApIHsgcHJvamVjdGlvbk9wdGlvbnMgPSB7fTsgfVxyXG4gICAgICAgIHByb2plY3Rpb25PcHRpb25zLm1lcmdlID0gdHJ1ZTtcclxuICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5tZXJnZUVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIHZhciBwcm9qZWN0aW9uID0gdGhpcy5hcHBlbmQoZWxlbWVudC5wYXJlbnROb2RlLCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIHZhciBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChpbnN0YW5jZSk7XHJcbiAgICAgICAgcHJvamVjdG9yU3RhdGUubWVyZ2UgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gcHJvamVjdGlvbjtcclxuICAgIH1cclxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS92ZG9tLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby93aWRnZXQtY29yZS92ZG9tLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih1c2VTb3VyY2VNYXApIHtcblx0dmFyIGxpc3QgPSBbXTtcblxuXHQvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cdGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXHRcdFx0aWYoaXRlbVsyXSkge1xuXHRcdFx0XHRyZXR1cm4gXCJAbWVkaWEgXCIgKyBpdGVtWzJdICsgXCJ7XCIgKyBjb250ZW50ICsgXCJ9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHRcdH1cblx0XHR9KS5qb2luKFwiXCIpO1xuXHR9O1xuXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcblx0XHRpZih0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIilcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxuXHRcdFx0XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG5cdFx0fVxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gbW9kdWxlc1tpXTtcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxuXHRcdFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG5cdFx0XHRcdGlmKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gXCIoXCIgKyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIpXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7XG5cdHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblx0aWYgKCFjc3NNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdH1cblxuXHRpZiAodXNlU291cmNlTWFwICYmIHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIHNvdXJjZU1hcHBpbmcgPSB0b0NvbW1lbnQoY3NzTWFwcGluZyk7XG5cdFx0dmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0XHRcdHJldHVybiAnLyojIHNvdXJjZVVSTD0nICsgY3NzTWFwcGluZy5zb3VyY2VSb290ICsgc291cmNlICsgJyAqLydcblx0XHR9KTtcblxuXHRcdHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuXHR9XG5cblx0cmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn1cblxuLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuZnVuY3Rpb24gdG9Db21tZW50KHNvdXJjZU1hcCkge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblx0dmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSk7XG5cdHZhciBkYXRhID0gJ3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCcgKyBiYXNlNjQ7XG5cblx0cmV0dXJuICcvKiMgJyArIGRhdGEgKyAnICovJztcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJjc3NTZWxlY3RcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiY3NzU2VsZWN0XCJdID0gZmFjdG9yeSgpO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyNCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpc1ZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0aWYgKCFpc1ZhbHVlKHZhbHVlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgbnVsbCBvciB1bmRlZmluZWRcIik7XG5cdHJldHVybiB2YWx1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG5cdGlmICh0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuXHRyZXR1cm4gZm47XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNjYpKCkgPyBTeW1ib2wgOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDY3KTtcblxuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGFzc2lnbiAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuICAsIG5vcm1hbGl6ZU9wdHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKVxuICAsIGlzQ2FsbGFibGUgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYyKVxuICAsIGNvbnRhaW5zICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuXG4gICwgZDtcblxuZCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRzY3IsIHZhbHVlLyosIG9wdGlvbnMqLykge1xuXHR2YXIgYywgZSwgdywgb3B0aW9ucywgZGVzYztcblx0aWYgKChhcmd1bWVudHMubGVuZ3RoIDwgMikgfHwgKHR5cGVvZiBkc2NyICE9PSAnc3RyaW5nJykpIHtcblx0XHRvcHRpb25zID0gdmFsdWU7XG5cdFx0dmFsdWUgPSBkc2NyO1xuXHRcdGRzY3IgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbMl07XG5cdH1cblx0aWYgKGRzY3IgPT0gbnVsbCkge1xuXHRcdGMgPSB3ID0gdHJ1ZTtcblx0XHRlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0YyA9IGNvbnRhaW5zLmNhbGwoZHNjciwgJ2MnKTtcblx0XHRlID0gY29udGFpbnMuY2FsbChkc2NyLCAnZScpO1xuXHRcdHcgPSBjb250YWlucy5jYWxsKGRzY3IsICd3Jyk7XG5cdH1cblxuXHRkZXNjID0geyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogYywgZW51bWVyYWJsZTogZSwgd3JpdGFibGU6IHcgfTtcblx0cmV0dXJuICFvcHRpb25zID8gZGVzYyA6IGFzc2lnbihub3JtYWxpemVPcHRzKG9wdGlvbnMpLCBkZXNjKTtcbn07XG5cbmQuZ3MgPSBmdW5jdGlvbiAoZHNjciwgZ2V0LCBzZXQvKiwgb3B0aW9ucyovKSB7XG5cdHZhciBjLCBlLCBvcHRpb25zLCBkZXNjO1xuXHRpZiAodHlwZW9mIGRzY3IgIT09ICdzdHJpbmcnKSB7XG5cdFx0b3B0aW9ucyA9IHNldDtcblx0XHRzZXQgPSBnZXQ7XG5cdFx0Z2V0ID0gZHNjcjtcblx0XHRkc2NyID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHRvcHRpb25zID0gYXJndW1lbnRzWzNdO1xuXHR9XG5cdGlmIChnZXQgPT0gbnVsbCkge1xuXHRcdGdldCA9IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmICghaXNDYWxsYWJsZShnZXQpKSB7XG5cdFx0b3B0aW9ucyA9IGdldDtcblx0XHRnZXQgPSBzZXQgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoc2V0ID09IG51bGwpIHtcblx0XHRzZXQgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoc2V0KSkge1xuXHRcdG9wdGlvbnMgPSBzZXQ7XG5cdFx0c2V0ID0gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChkc2NyID09IG51bGwpIHtcblx0XHRjID0gdHJ1ZTtcblx0XHRlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0YyA9IGNvbnRhaW5zLmNhbGwoZHNjciwgJ2MnKTtcblx0XHRlID0gY29udGFpbnMuY2FsbChkc2NyLCAnZScpO1xuXHR9XG5cblx0ZGVzYyA9IHsgZ2V0OiBnZXQsIHNldDogc2V0LCBjb25maWd1cmFibGU6IGMsIGVudW1lcmFibGU6IGUgfTtcblx0cmV0dXJuICFvcHRpb25zID8gZGVzYyA6IGFzc2lnbihub3JtYWxpemVPcHRzKG9wdGlvbnMpLCBkZXNjKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBfdW5kZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNykoKTsgLy8gU3VwcG9ydCBFUzMgZW5naW5lc1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWwpIHtcbiByZXR1cm4gKHZhbCAhPT0gX3VuZGVmaW5lZCkgJiYgKHZhbCAhPT0gbnVsbCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0dHJ1ZUZ1bmM6IGZ1bmN0aW9uIHRydWVGdW5jKCl7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cdGZhbHNlRnVuYzogZnVuY3Rpb24gZmFsc2VGdW5jKCl7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KSgpXG5cdD8gT2JqZWN0LnNldFByb3RvdHlwZU9mXG5cdDogX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5cblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBvYmpUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbiAgLCBpZCA9IG9ialRvU3RyaW5nLmNhbGwoXG5cdChmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50cztcblx0fSkoKVxuKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09PSBpZDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBvYmpUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsIGlkID0gb2JqVG9TdHJpbmcuY2FsbChcIlwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIChcblx0XHR0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHxcblx0XHQodmFsdWUgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0KHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nIHx8IG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09PSBpZCkpIHx8XG5cdFx0ZmFsc2Vcblx0KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vVHlwZXMgb2YgZWxlbWVudHMgZm91bmQgaW4gdGhlIERPTVxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdFRleHQ6IFwidGV4dFwiLCAvL1RleHRcblx0RGlyZWN0aXZlOiBcImRpcmVjdGl2ZVwiLCAvLzw/IC4uLiA/PlxuXHRDb21tZW50OiBcImNvbW1lbnRcIiwgLy88IS0tIC4uLiAtLT5cblx0U2NyaXB0OiBcInNjcmlwdFwiLCAvLzxzY3JpcHQ+IHRhZ3Ncblx0U3R5bGU6IFwic3R5bGVcIiwgLy88c3R5bGU+IHRhZ3Ncblx0VGFnOiBcInRhZ1wiLCAvL0FueSB0YWdcblx0Q0RBVEE6IFwiY2RhdGFcIiwgLy88IVtDREFUQVsgLi4uIF1dPlxuXHREb2N0eXBlOiBcImRvY3R5cGVcIixcblxuXHRpc1RhZzogZnVuY3Rpb24oZWxlbSl7XG5cdFx0cmV0dXJuIGVsZW0udHlwZSA9PT0gXCJ0YWdcIiB8fCBlbGVtLnR5cGUgPT09IFwic2NyaXB0XCIgfHwgZWxlbS50eXBlID09PSBcInN0eWxlXCI7XG5cdH1cbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNTcpKClcblx0PyBPYmplY3QuYXNzaWduXG5cdDogX193ZWJwYWNrX3JlcXVpcmVfXyg1OCk7XG5cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpKClcblx0PyBTdHJpbmcucHJvdG90eXBlLmNvbnRhaW5zXG5cdDogX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XG5cblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgY2xlYXIgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KVxuICAsIGFzc2lnbiAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcbiAgLCBjYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcbiAgLCB2YWx1ZSAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMClcbiAgLCBkICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMylcbiAgLCBhdXRvQmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oNzQpXG4gICwgU3ltYm9sICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHksIGRlZmluZVByb3BlcnRpZXMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcywgSXRlcmF0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gSXRlcmF0b3IgPSBmdW5jdGlvbiAobGlzdCwgY29udGV4dCkge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgSXRlcmF0b3IpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldydcIik7XG5cdGRlZmluZVByb3BlcnRpZXModGhpcywge1xuXHRcdF9fbGlzdF9fOiBkKFwid1wiLCB2YWx1ZShsaXN0KSksXG5cdFx0X19jb250ZXh0X186IGQoXCJ3XCIsIGNvbnRleHQpLFxuXHRcdF9fbmV4dEluZGV4X186IGQoXCJ3XCIsIDApXG5cdH0pO1xuXHRpZiAoIWNvbnRleHQpIHJldHVybjtcblx0Y2FsbGFibGUoY29udGV4dC5vbik7XG5cdGNvbnRleHQub24oXCJfYWRkXCIsIHRoaXMuX29uQWRkKTtcblx0Y29udGV4dC5vbihcIl9kZWxldGVcIiwgdGhpcy5fb25EZWxldGUpO1xuXHRjb250ZXh0Lm9uKFwiX2NsZWFyXCIsIHRoaXMuX29uQ2xlYXIpO1xufTtcblxuLy8gSW50ZXJuYWwgJUl0ZXJhdG9yUHJvdG90eXBlJSBkb2Vzbid0IGV4cG9zZSBpdHMgY29uc3RydWN0b3JcbmRlbGV0ZSBJdGVyYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cbmRlZmluZVByb3BlcnRpZXMoXG5cdEl0ZXJhdG9yLnByb3RvdHlwZSxcblx0YXNzaWduKFxuXHRcdHtcblx0XHRcdF9uZXh0OiBkKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dmFyIGk7XG5cdFx0XHRcdGlmICghdGhpcy5fX2xpc3RfXykgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKHRoaXMuX19yZWRvX18pIHtcblx0XHRcdFx0XHRpID0gdGhpcy5fX3JlZG9fXy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmIChpICE9PSB1bmRlZmluZWQpIHJldHVybiBpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl9fbmV4dEluZGV4X18gPCB0aGlzLl9fbGlzdF9fLmxlbmd0aCkgcmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXysrO1xuXHRcdFx0XHR0aGlzLl91bkJpbmQoKTtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0pLFxuXHRcdFx0bmV4dDogZChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9jcmVhdGVSZXN1bHQodGhpcy5fbmV4dCgpKTtcblx0XHRcdH0pLFxuXHRcdFx0X2NyZWF0ZVJlc3VsdDogZChmdW5jdGlvbiAoaSkge1xuXHRcdFx0XHRpZiAoaSA9PT0gdW5kZWZpbmVkKSByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG5cdFx0XHRcdHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogdGhpcy5fcmVzb2x2ZShpKSB9O1xuXHRcdFx0fSksXG5cdFx0XHRfcmVzb2x2ZTogZChmdW5jdGlvbiAoaSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fX2xpc3RfX1tpXTtcblx0XHRcdH0pLFxuXHRcdFx0X3VuQmluZDogZChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHRoaXMuX19saXN0X18gPSBudWxsO1xuXHRcdFx0XHRkZWxldGUgdGhpcy5fX3JlZG9fXztcblx0XHRcdFx0aWYgKCF0aGlzLl9fY29udGV4dF9fKSByZXR1cm47XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18ub2ZmKFwiX2FkZFwiLCB0aGlzLl9vbkFkZCk7XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18ub2ZmKFwiX2RlbGV0ZVwiLCB0aGlzLl9vbkRlbGV0ZSk7XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18ub2ZmKFwiX2NsZWFyXCIsIHRoaXMuX29uQ2xlYXIpO1xuXHRcdFx0XHR0aGlzLl9fY29udGV4dF9fID0gbnVsbDtcblx0XHRcdH0pLFxuXHRcdFx0dG9TdHJpbmc6IGQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gXCJbb2JqZWN0IFwiICsgKHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCBcIk9iamVjdFwiKSArIFwiXVwiO1xuXHRcdFx0fSlcblx0XHR9LFxuXHRcdGF1dG9CaW5kKHtcblx0XHRcdF9vbkFkZDogZChmdW5jdGlvbiAoaW5kZXgpIHtcblx0XHRcdFx0aWYgKGluZGV4ID49IHRoaXMuX19uZXh0SW5kZXhfXykgcmV0dXJuO1xuXHRcdFx0XHQrK3RoaXMuX19uZXh0SW5kZXhfXztcblx0XHRcdFx0aWYgKCF0aGlzLl9fcmVkb19fKSB7XG5cdFx0XHRcdFx0ZGVmaW5lUHJvcGVydHkodGhpcywgXCJfX3JlZG9fX1wiLCBkKFwiY1wiLCBbaW5kZXhdKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX19yZWRvX18uZm9yRWFjaChmdW5jdGlvbiAocmVkbywgaSkge1xuXHRcdFx0XHRcdGlmIChyZWRvID49IGluZGV4KSB0aGlzLl9fcmVkb19fW2ldID0gKytyZWRvO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5fX3JlZG9fXy5wdXNoKGluZGV4KTtcblx0XHRcdH0pLFxuXHRcdFx0X29uRGVsZXRlOiBkKGZ1bmN0aW9uIChpbmRleCkge1xuXHRcdFx0XHR2YXIgaTtcblx0XHRcdFx0aWYgKGluZGV4ID49IHRoaXMuX19uZXh0SW5kZXhfXykgcmV0dXJuO1xuXHRcdFx0XHQtLXRoaXMuX19uZXh0SW5kZXhfXztcblx0XHRcdFx0aWYgKCF0aGlzLl9fcmVkb19fKSByZXR1cm47XG5cdFx0XHRcdGkgPSB0aGlzLl9fcmVkb19fLmluZGV4T2YoaW5kZXgpO1xuXHRcdFx0XHRpZiAoaSAhPT0gLTEpIHRoaXMuX19yZWRvX18uc3BsaWNlKGksIDEpO1xuXHRcdFx0XHR0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24gKHJlZG8sIGopIHtcblx0XHRcdFx0XHRpZiAocmVkbyA+IGluZGV4KSB0aGlzLl9fcmVkb19fW2pdID0gLS1yZWRvO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdH0pLFxuXHRcdFx0X29uQ2xlYXI6IGQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAodGhpcy5fX3JlZG9fXykgY2xlYXIuY2FsbCh0aGlzLl9fcmVkb19fKTtcblx0XHRcdFx0dGhpcy5fX25leHRJbmRleF9fID0gMDtcblx0XHRcdH0pXG5cdFx0fSlcblx0KVxuKTtcblxuZGVmaW5lUHJvcGVydHkoXG5cdEl0ZXJhdG9yLnByb3RvdHlwZSxcblx0U3ltYm9sLml0ZXJhdG9yLFxuXHRkKGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fSlcbik7XG5cblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcImFtcFwiOlwiJlwiLFwiYXBvc1wiOlwiJ1wiLFwiZ3RcIjpcIj5cIixcImx0XCI6XCI8XCIsXCJxdW90XCI6XCJcXFwiXCJ9XG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7XCJBYWN1dGVcIjpcIsOBXCIsXCJhYWN1dGVcIjpcIsOhXCIsXCJBYnJldmVcIjpcIsSCXCIsXCJhYnJldmVcIjpcIsSDXCIsXCJhY1wiOlwi4oi+XCIsXCJhY2RcIjpcIuKIv1wiLFwiYWNFXCI6XCLiiL7Ms1wiLFwiQWNpcmNcIjpcIsOCXCIsXCJhY2lyY1wiOlwiw6JcIixcImFjdXRlXCI6XCLCtFwiLFwiQWN5XCI6XCLQkFwiLFwiYWN5XCI6XCLQsFwiLFwiQUVsaWdcIjpcIsOGXCIsXCJhZWxpZ1wiOlwiw6ZcIixcImFmXCI6XCLigaFcIixcIkFmclwiOlwi8J2UhFwiLFwiYWZyXCI6XCLwnZSeXCIsXCJBZ3JhdmVcIjpcIsOAXCIsXCJhZ3JhdmVcIjpcIsOgXCIsXCJhbGVmc3ltXCI6XCLihLVcIixcImFsZXBoXCI6XCLihLVcIixcIkFscGhhXCI6XCLOkVwiLFwiYWxwaGFcIjpcIs6xXCIsXCJBbWFjclwiOlwixIBcIixcImFtYWNyXCI6XCLEgVwiLFwiYW1hbGdcIjpcIuKov1wiLFwiYW1wXCI6XCImXCIsXCJBTVBcIjpcIiZcIixcImFuZGFuZFwiOlwi4qmVXCIsXCJBbmRcIjpcIuKpk1wiLFwiYW5kXCI6XCLiiKdcIixcImFuZGRcIjpcIuKpnFwiLFwiYW5kc2xvcGVcIjpcIuKpmFwiLFwiYW5kdlwiOlwi4qmaXCIsXCJhbmdcIjpcIuKIoFwiLFwiYW5nZVwiOlwi4qakXCIsXCJhbmdsZVwiOlwi4oigXCIsXCJhbmdtc2RhYVwiOlwi4qaoXCIsXCJhbmdtc2RhYlwiOlwi4qapXCIsXCJhbmdtc2RhY1wiOlwi4qaqXCIsXCJhbmdtc2RhZFwiOlwi4qarXCIsXCJhbmdtc2RhZVwiOlwi4qasXCIsXCJhbmdtc2RhZlwiOlwi4qatXCIsXCJhbmdtc2RhZ1wiOlwi4qauXCIsXCJhbmdtc2RhaFwiOlwi4qavXCIsXCJhbmdtc2RcIjpcIuKIoVwiLFwiYW5ncnRcIjpcIuKIn1wiLFwiYW5ncnR2YlwiOlwi4oq+XCIsXCJhbmdydHZiZFwiOlwi4qadXCIsXCJhbmdzcGhcIjpcIuKIolwiLFwiYW5nc3RcIjpcIsOFXCIsXCJhbmd6YXJyXCI6XCLijbxcIixcIkFvZ29uXCI6XCLEhFwiLFwiYW9nb25cIjpcIsSFXCIsXCJBb3BmXCI6XCLwnZS4XCIsXCJhb3BmXCI6XCLwnZWSXCIsXCJhcGFjaXJcIjpcIuKpr1wiLFwiYXBcIjpcIuKJiFwiLFwiYXBFXCI6XCLiqbBcIixcImFwZVwiOlwi4omKXCIsXCJhcGlkXCI6XCLiiYtcIixcImFwb3NcIjpcIidcIixcIkFwcGx5RnVuY3Rpb25cIjpcIuKBoVwiLFwiYXBwcm94XCI6XCLiiYhcIixcImFwcHJveGVxXCI6XCLiiYpcIixcIkFyaW5nXCI6XCLDhVwiLFwiYXJpbmdcIjpcIsOlXCIsXCJBc2NyXCI6XCLwnZKcXCIsXCJhc2NyXCI6XCLwnZK2XCIsXCJBc3NpZ25cIjpcIuKJlFwiLFwiYXN0XCI6XCIqXCIsXCJhc3ltcFwiOlwi4omIXCIsXCJhc3ltcGVxXCI6XCLiiY1cIixcIkF0aWxkZVwiOlwiw4NcIixcImF0aWxkZVwiOlwiw6NcIixcIkF1bWxcIjpcIsOEXCIsXCJhdW1sXCI6XCLDpFwiLFwiYXdjb25pbnRcIjpcIuKIs1wiLFwiYXdpbnRcIjpcIuKokVwiLFwiYmFja2NvbmdcIjpcIuKJjFwiLFwiYmFja2Vwc2lsb25cIjpcIs+2XCIsXCJiYWNrcHJpbWVcIjpcIuKAtVwiLFwiYmFja3NpbVwiOlwi4oi9XCIsXCJiYWNrc2ltZXFcIjpcIuKLjVwiLFwiQmFja3NsYXNoXCI6XCLiiJZcIixcIkJhcnZcIjpcIuKrp1wiLFwiYmFydmVlXCI6XCLiir1cIixcImJhcndlZFwiOlwi4oyFXCIsXCJCYXJ3ZWRcIjpcIuKMhlwiLFwiYmFyd2VkZ2VcIjpcIuKMhVwiLFwiYmJya1wiOlwi4o61XCIsXCJiYnJrdGJya1wiOlwi4o62XCIsXCJiY29uZ1wiOlwi4omMXCIsXCJCY3lcIjpcItCRXCIsXCJiY3lcIjpcItCxXCIsXCJiZHF1b1wiOlwi4oCeXCIsXCJiZWNhdXNcIjpcIuKItVwiLFwiYmVjYXVzZVwiOlwi4oi1XCIsXCJCZWNhdXNlXCI6XCLiiLVcIixcImJlbXB0eXZcIjpcIuKmsFwiLFwiYmVwc2lcIjpcIs+2XCIsXCJiZXJub3VcIjpcIuKErFwiLFwiQmVybm91bGxpc1wiOlwi4oSsXCIsXCJCZXRhXCI6XCLOklwiLFwiYmV0YVwiOlwizrJcIixcImJldGhcIjpcIuKEtlwiLFwiYmV0d2VlblwiOlwi4omsXCIsXCJCZnJcIjpcIvCdlIVcIixcImJmclwiOlwi8J2Un1wiLFwiYmlnY2FwXCI6XCLii4JcIixcImJpZ2NpcmNcIjpcIuKXr1wiLFwiYmlnY3VwXCI6XCLii4NcIixcImJpZ29kb3RcIjpcIuKogFwiLFwiYmlnb3BsdXNcIjpcIuKogVwiLFwiYmlnb3RpbWVzXCI6XCLiqIJcIixcImJpZ3NxY3VwXCI6XCLiqIZcIixcImJpZ3N0YXJcIjpcIuKYhVwiLFwiYmlndHJpYW5nbGVkb3duXCI6XCLilr1cIixcImJpZ3RyaWFuZ2xldXBcIjpcIuKWs1wiLFwiYmlndXBsdXNcIjpcIuKohFwiLFwiYmlndmVlXCI6XCLii4FcIixcImJpZ3dlZGdlXCI6XCLii4BcIixcImJrYXJvd1wiOlwi4qSNXCIsXCJibGFja2xvemVuZ2VcIjpcIuKnq1wiLFwiYmxhY2tzcXVhcmVcIjpcIuKWqlwiLFwiYmxhY2t0cmlhbmdsZVwiOlwi4pa0XCIsXCJibGFja3RyaWFuZ2xlZG93blwiOlwi4pa+XCIsXCJibGFja3RyaWFuZ2xlbGVmdFwiOlwi4peCXCIsXCJibGFja3RyaWFuZ2xlcmlnaHRcIjpcIuKWuFwiLFwiYmxhbmtcIjpcIuKQo1wiLFwiYmxrMTJcIjpcIuKWklwiLFwiYmxrMTRcIjpcIuKWkVwiLFwiYmxrMzRcIjpcIuKWk1wiLFwiYmxvY2tcIjpcIuKWiFwiLFwiYm5lXCI6XCI94oOlXCIsXCJibmVxdWl2XCI6XCLiiaHig6VcIixcImJOb3RcIjpcIuKrrVwiLFwiYm5vdFwiOlwi4oyQXCIsXCJCb3BmXCI6XCLwnZS5XCIsXCJib3BmXCI6XCLwnZWTXCIsXCJib3RcIjpcIuKKpVwiLFwiYm90dG9tXCI6XCLiiqVcIixcImJvd3RpZVwiOlwi4ouIXCIsXCJib3hib3hcIjpcIuKniVwiLFwiYm94ZGxcIjpcIuKUkFwiLFwiYm94ZExcIjpcIuKVlVwiLFwiYm94RGxcIjpcIuKVllwiLFwiYm94RExcIjpcIuKVl1wiLFwiYm94ZHJcIjpcIuKUjFwiLFwiYm94ZFJcIjpcIuKVklwiLFwiYm94RHJcIjpcIuKVk1wiLFwiYm94RFJcIjpcIuKVlFwiLFwiYm94aFwiOlwi4pSAXCIsXCJib3hIXCI6XCLilZBcIixcImJveGhkXCI6XCLilKxcIixcImJveEhkXCI6XCLilaRcIixcImJveGhEXCI6XCLilaVcIixcImJveEhEXCI6XCLilaZcIixcImJveGh1XCI6XCLilLRcIixcImJveEh1XCI6XCLiladcIixcImJveGhVXCI6XCLilahcIixcImJveEhVXCI6XCLilalcIixcImJveG1pbnVzXCI6XCLiip9cIixcImJveHBsdXNcIjpcIuKKnlwiLFwiYm94dGltZXNcIjpcIuKKoFwiLFwiYm94dWxcIjpcIuKUmFwiLFwiYm94dUxcIjpcIuKVm1wiLFwiYm94VWxcIjpcIuKVnFwiLFwiYm94VUxcIjpcIuKVnVwiLFwiYm94dXJcIjpcIuKUlFwiLFwiYm94dVJcIjpcIuKVmFwiLFwiYm94VXJcIjpcIuKVmVwiLFwiYm94VVJcIjpcIuKVmlwiLFwiYm94dlwiOlwi4pSCXCIsXCJib3hWXCI6XCLilZFcIixcImJveHZoXCI6XCLilLxcIixcImJveHZIXCI6XCLilapcIixcImJveFZoXCI6XCLilatcIixcImJveFZIXCI6XCLilaxcIixcImJveHZsXCI6XCLilKRcIixcImJveHZMXCI6XCLilaFcIixcImJveFZsXCI6XCLilaJcIixcImJveFZMXCI6XCLilaNcIixcImJveHZyXCI6XCLilJxcIixcImJveHZSXCI6XCLilZ5cIixcImJveFZyXCI6XCLilZ9cIixcImJveFZSXCI6XCLilaBcIixcImJwcmltZVwiOlwi4oC1XCIsXCJicmV2ZVwiOlwiy5hcIixcIkJyZXZlXCI6XCLLmFwiLFwiYnJ2YmFyXCI6XCLCplwiLFwiYnNjclwiOlwi8J2St1wiLFwiQnNjclwiOlwi4oSsXCIsXCJic2VtaVwiOlwi4oGPXCIsXCJic2ltXCI6XCLiiL1cIixcImJzaW1lXCI6XCLii41cIixcImJzb2xiXCI6XCLip4VcIixcImJzb2xcIjpcIlxcXFxcIixcImJzb2xoc3ViXCI6XCLin4hcIixcImJ1bGxcIjpcIuKAolwiLFwiYnVsbGV0XCI6XCLigKJcIixcImJ1bXBcIjpcIuKJjlwiLFwiYnVtcEVcIjpcIuKqrlwiLFwiYnVtcGVcIjpcIuKJj1wiLFwiQnVtcGVxXCI6XCLiiY5cIixcImJ1bXBlcVwiOlwi4omPXCIsXCJDYWN1dGVcIjpcIsSGXCIsXCJjYWN1dGVcIjpcIsSHXCIsXCJjYXBhbmRcIjpcIuKphFwiLFwiY2FwYnJjdXBcIjpcIuKpiVwiLFwiY2FwY2FwXCI6XCLiqYtcIixcImNhcFwiOlwi4oipXCIsXCJDYXBcIjpcIuKLklwiLFwiY2FwY3VwXCI6XCLiqYdcIixcImNhcGRvdFwiOlwi4qmAXCIsXCJDYXBpdGFsRGlmZmVyZW50aWFsRFwiOlwi4oWFXCIsXCJjYXBzXCI6XCLiiKnvuIBcIixcImNhcmV0XCI6XCLigYFcIixcImNhcm9uXCI6XCLLh1wiLFwiQ2F5bGV5c1wiOlwi4oStXCIsXCJjY2Fwc1wiOlwi4qmNXCIsXCJDY2Fyb25cIjpcIsSMXCIsXCJjY2Fyb25cIjpcIsSNXCIsXCJDY2VkaWxcIjpcIsOHXCIsXCJjY2VkaWxcIjpcIsOnXCIsXCJDY2lyY1wiOlwixIhcIixcImNjaXJjXCI6XCLEiVwiLFwiQ2NvbmludFwiOlwi4oiwXCIsXCJjY3Vwc1wiOlwi4qmMXCIsXCJjY3Vwc3NtXCI6XCLiqZBcIixcIkNkb3RcIjpcIsSKXCIsXCJjZG90XCI6XCLEi1wiLFwiY2VkaWxcIjpcIsK4XCIsXCJDZWRpbGxhXCI6XCLCuFwiLFwiY2VtcHR5dlwiOlwi4qayXCIsXCJjZW50XCI6XCLColwiLFwiY2VudGVyZG90XCI6XCLCt1wiLFwiQ2VudGVyRG90XCI6XCLCt1wiLFwiY2ZyXCI6XCLwnZSgXCIsXCJDZnJcIjpcIuKErVwiLFwiQ0hjeVwiOlwi0KdcIixcImNoY3lcIjpcItGHXCIsXCJjaGVja1wiOlwi4pyTXCIsXCJjaGVja21hcmtcIjpcIuKck1wiLFwiQ2hpXCI6XCLOp1wiLFwiY2hpXCI6XCLPh1wiLFwiY2lyY1wiOlwiy4ZcIixcImNpcmNlcVwiOlwi4omXXCIsXCJjaXJjbGVhcnJvd2xlZnRcIjpcIuKGulwiLFwiY2lyY2xlYXJyb3dyaWdodFwiOlwi4oa7XCIsXCJjaXJjbGVkYXN0XCI6XCLiiptcIixcImNpcmNsZWRjaXJjXCI6XCLiippcIixcImNpcmNsZWRkYXNoXCI6XCLiip1cIixcIkNpcmNsZURvdFwiOlwi4oqZXCIsXCJjaXJjbGVkUlwiOlwiwq5cIixcImNpcmNsZWRTXCI6XCLik4hcIixcIkNpcmNsZU1pbnVzXCI6XCLiipZcIixcIkNpcmNsZVBsdXNcIjpcIuKKlVwiLFwiQ2lyY2xlVGltZXNcIjpcIuKKl1wiLFwiY2lyXCI6XCLil4tcIixcImNpckVcIjpcIuKng1wiLFwiY2lyZVwiOlwi4omXXCIsXCJjaXJmbmludFwiOlwi4qiQXCIsXCJjaXJtaWRcIjpcIuKrr1wiLFwiY2lyc2NpclwiOlwi4qeCXCIsXCJDbG9ja3dpc2VDb250b3VySW50ZWdyYWxcIjpcIuKIslwiLFwiQ2xvc2VDdXJseURvdWJsZVF1b3RlXCI6XCLigJ1cIixcIkNsb3NlQ3VybHlRdW90ZVwiOlwi4oCZXCIsXCJjbHVic1wiOlwi4pmjXCIsXCJjbHVic3VpdFwiOlwi4pmjXCIsXCJjb2xvblwiOlwiOlwiLFwiQ29sb25cIjpcIuKIt1wiLFwiQ29sb25lXCI6XCLiqbRcIixcImNvbG9uZVwiOlwi4omUXCIsXCJjb2xvbmVxXCI6XCLiiZRcIixcImNvbW1hXCI6XCIsXCIsXCJjb21tYXRcIjpcIkBcIixcImNvbXBcIjpcIuKIgVwiLFwiY29tcGZuXCI6XCLiiJhcIixcImNvbXBsZW1lbnRcIjpcIuKIgVwiLFwiY29tcGxleGVzXCI6XCLihIJcIixcImNvbmdcIjpcIuKJhVwiLFwiY29uZ2RvdFwiOlwi4qmtXCIsXCJDb25ncnVlbnRcIjpcIuKJoVwiLFwiY29uaW50XCI6XCLiiK5cIixcIkNvbmludFwiOlwi4oivXCIsXCJDb250b3VySW50ZWdyYWxcIjpcIuKIrlwiLFwiY29wZlwiOlwi8J2VlFwiLFwiQ29wZlwiOlwi4oSCXCIsXCJjb3Byb2RcIjpcIuKIkFwiLFwiQ29wcm9kdWN0XCI6XCLiiJBcIixcImNvcHlcIjpcIsKpXCIsXCJDT1BZXCI6XCLCqVwiLFwiY29weXNyXCI6XCLihJdcIixcIkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWxcIjpcIuKIs1wiLFwiY3JhcnJcIjpcIuKGtVwiLFwiY3Jvc3NcIjpcIuKcl1wiLFwiQ3Jvc3NcIjpcIuKor1wiLFwiQ3NjclwiOlwi8J2SnlwiLFwiY3NjclwiOlwi8J2SuFwiLFwiY3N1YlwiOlwi4quPXCIsXCJjc3ViZVwiOlwi4quRXCIsXCJjc3VwXCI6XCLiq5BcIixcImNzdXBlXCI6XCLiq5JcIixcImN0ZG90XCI6XCLii69cIixcImN1ZGFycmxcIjpcIuKkuFwiLFwiY3VkYXJyclwiOlwi4qS1XCIsXCJjdWVwclwiOlwi4oueXCIsXCJjdWVzY1wiOlwi4oufXCIsXCJjdWxhcnJcIjpcIuKGtlwiLFwiY3VsYXJycFwiOlwi4qS9XCIsXCJjdXBicmNhcFwiOlwi4qmIXCIsXCJjdXBjYXBcIjpcIuKphlwiLFwiQ3VwQ2FwXCI6XCLiiY1cIixcImN1cFwiOlwi4oiqXCIsXCJDdXBcIjpcIuKLk1wiLFwiY3VwY3VwXCI6XCLiqYpcIixcImN1cGRvdFwiOlwi4oqNXCIsXCJjdXBvclwiOlwi4qmFXCIsXCJjdXBzXCI6XCLiiKrvuIBcIixcImN1cmFyclwiOlwi4oa3XCIsXCJjdXJhcnJtXCI6XCLipLxcIixcImN1cmx5ZXFwcmVjXCI6XCLii55cIixcImN1cmx5ZXFzdWNjXCI6XCLii59cIixcImN1cmx5dmVlXCI6XCLii45cIixcImN1cmx5d2VkZ2VcIjpcIuKLj1wiLFwiY3VycmVuXCI6XCLCpFwiLFwiY3VydmVhcnJvd2xlZnRcIjpcIuKGtlwiLFwiY3VydmVhcnJvd3JpZ2h0XCI6XCLihrdcIixcImN1dmVlXCI6XCLii45cIixcImN1d2VkXCI6XCLii49cIixcImN3Y29uaW50XCI6XCLiiLJcIixcImN3aW50XCI6XCLiiLFcIixcImN5bGN0eVwiOlwi4oytXCIsXCJkYWdnZXJcIjpcIuKAoFwiLFwiRGFnZ2VyXCI6XCLigKFcIixcImRhbGV0aFwiOlwi4oS4XCIsXCJkYXJyXCI6XCLihpNcIixcIkRhcnJcIjpcIuKGoVwiLFwiZEFyclwiOlwi4oeTXCIsXCJkYXNoXCI6XCLigJBcIixcIkRhc2h2XCI6XCLiq6RcIixcImRhc2h2XCI6XCLiiqNcIixcImRia2Fyb3dcIjpcIuKkj1wiLFwiZGJsYWNcIjpcIsudXCIsXCJEY2Fyb25cIjpcIsSOXCIsXCJkY2Fyb25cIjpcIsSPXCIsXCJEY3lcIjpcItCUXCIsXCJkY3lcIjpcItC0XCIsXCJkZGFnZ2VyXCI6XCLigKFcIixcImRkYXJyXCI6XCLih4pcIixcIkREXCI6XCLihYVcIixcImRkXCI6XCLihYZcIixcIkREb3RyYWhkXCI6XCLipJFcIixcImRkb3RzZXFcIjpcIuKpt1wiLFwiZGVnXCI6XCLCsFwiLFwiRGVsXCI6XCLiiIdcIixcIkRlbHRhXCI6XCLOlFwiLFwiZGVsdGFcIjpcIs60XCIsXCJkZW1wdHl2XCI6XCLiprFcIixcImRmaXNodFwiOlwi4qW/XCIsXCJEZnJcIjpcIvCdlIdcIixcImRmclwiOlwi8J2UoVwiLFwiZEhhclwiOlwi4qWlXCIsXCJkaGFybFwiOlwi4oeDXCIsXCJkaGFyclwiOlwi4oeCXCIsXCJEaWFjcml0aWNhbEFjdXRlXCI6XCLCtFwiLFwiRGlhY3JpdGljYWxEb3RcIjpcIsuZXCIsXCJEaWFjcml0aWNhbERvdWJsZUFjdXRlXCI6XCLLnVwiLFwiRGlhY3JpdGljYWxHcmF2ZVwiOlwiYFwiLFwiRGlhY3JpdGljYWxUaWxkZVwiOlwiy5xcIixcImRpYW1cIjpcIuKLhFwiLFwiZGlhbW9uZFwiOlwi4ouEXCIsXCJEaWFtb25kXCI6XCLii4RcIixcImRpYW1vbmRzdWl0XCI6XCLimaZcIixcImRpYW1zXCI6XCLimaZcIixcImRpZVwiOlwiwqhcIixcIkRpZmZlcmVudGlhbERcIjpcIuKFhlwiLFwiZGlnYW1tYVwiOlwiz51cIixcImRpc2luXCI6XCLii7JcIixcImRpdlwiOlwiw7dcIixcImRpdmlkZVwiOlwiw7dcIixcImRpdmlkZW9udGltZXNcIjpcIuKLh1wiLFwiZGl2b254XCI6XCLii4dcIixcIkRKY3lcIjpcItCCXCIsXCJkamN5XCI6XCLRklwiLFwiZGxjb3JuXCI6XCLijJ5cIixcImRsY3JvcFwiOlwi4oyNXCIsXCJkb2xsYXJcIjpcIiRcIixcIkRvcGZcIjpcIvCdlLtcIixcImRvcGZcIjpcIvCdlZVcIixcIkRvdFwiOlwiwqhcIixcImRvdFwiOlwiy5lcIixcIkRvdERvdFwiOlwi4oOcXCIsXCJkb3RlcVwiOlwi4omQXCIsXCJkb3RlcWRvdFwiOlwi4omRXCIsXCJEb3RFcXVhbFwiOlwi4omQXCIsXCJkb3RtaW51c1wiOlwi4oi4XCIsXCJkb3RwbHVzXCI6XCLiiJRcIixcImRvdHNxdWFyZVwiOlwi4oqhXCIsXCJkb3VibGViYXJ3ZWRnZVwiOlwi4oyGXCIsXCJEb3VibGVDb250b3VySW50ZWdyYWxcIjpcIuKIr1wiLFwiRG91YmxlRG90XCI6XCLCqFwiLFwiRG91YmxlRG93bkFycm93XCI6XCLih5NcIixcIkRvdWJsZUxlZnRBcnJvd1wiOlwi4oeQXCIsXCJEb3VibGVMZWZ0UmlnaHRBcnJvd1wiOlwi4oeUXCIsXCJEb3VibGVMZWZ0VGVlXCI6XCLiq6RcIixcIkRvdWJsZUxvbmdMZWZ0QXJyb3dcIjpcIuKfuFwiLFwiRG91YmxlTG9uZ0xlZnRSaWdodEFycm93XCI6XCLin7pcIixcIkRvdWJsZUxvbmdSaWdodEFycm93XCI6XCLin7lcIixcIkRvdWJsZVJpZ2h0QXJyb3dcIjpcIuKHklwiLFwiRG91YmxlUmlnaHRUZWVcIjpcIuKKqFwiLFwiRG91YmxlVXBBcnJvd1wiOlwi4oeRXCIsXCJEb3VibGVVcERvd25BcnJvd1wiOlwi4oeVXCIsXCJEb3VibGVWZXJ0aWNhbEJhclwiOlwi4oilXCIsXCJEb3duQXJyb3dCYXJcIjpcIuKkk1wiLFwiZG93bmFycm93XCI6XCLihpNcIixcIkRvd25BcnJvd1wiOlwi4oaTXCIsXCJEb3duYXJyb3dcIjpcIuKHk1wiLFwiRG93bkFycm93VXBBcnJvd1wiOlwi4oe1XCIsXCJEb3duQnJldmVcIjpcIsyRXCIsXCJkb3duZG93bmFycm93c1wiOlwi4oeKXCIsXCJkb3duaGFycG9vbmxlZnRcIjpcIuKHg1wiLFwiZG93bmhhcnBvb25yaWdodFwiOlwi4oeCXCIsXCJEb3duTGVmdFJpZ2h0VmVjdG9yXCI6XCLipZBcIixcIkRvd25MZWZ0VGVlVmVjdG9yXCI6XCLipZ5cIixcIkRvd25MZWZ0VmVjdG9yQmFyXCI6XCLipZZcIixcIkRvd25MZWZ0VmVjdG9yXCI6XCLihr1cIixcIkRvd25SaWdodFRlZVZlY3RvclwiOlwi4qWfXCIsXCJEb3duUmlnaHRWZWN0b3JCYXJcIjpcIuKll1wiLFwiRG93blJpZ2h0VmVjdG9yXCI6XCLih4FcIixcIkRvd25UZWVBcnJvd1wiOlwi4oanXCIsXCJEb3duVGVlXCI6XCLiiqRcIixcImRyYmthcm93XCI6XCLipJBcIixcImRyY29yblwiOlwi4oyfXCIsXCJkcmNyb3BcIjpcIuKMjFwiLFwiRHNjclwiOlwi8J2Sn1wiLFwiZHNjclwiOlwi8J2SuVwiLFwiRFNjeVwiOlwi0IVcIixcImRzY3lcIjpcItGVXCIsXCJkc29sXCI6XCLip7ZcIixcIkRzdHJva1wiOlwixJBcIixcImRzdHJva1wiOlwixJFcIixcImR0ZG90XCI6XCLii7FcIixcImR0cmlcIjpcIuKWv1wiLFwiZHRyaWZcIjpcIuKWvlwiLFwiZHVhcnJcIjpcIuKHtVwiLFwiZHVoYXJcIjpcIuKlr1wiLFwiZHdhbmdsZVwiOlwi4qamXCIsXCJEWmN5XCI6XCLQj1wiLFwiZHpjeVwiOlwi0Z9cIixcImR6aWdyYXJyXCI6XCLin79cIixcIkVhY3V0ZVwiOlwiw4lcIixcImVhY3V0ZVwiOlwiw6lcIixcImVhc3RlclwiOlwi4qmuXCIsXCJFY2Fyb25cIjpcIsSaXCIsXCJlY2Fyb25cIjpcIsSbXCIsXCJFY2lyY1wiOlwiw4pcIixcImVjaXJjXCI6XCLDqlwiLFwiZWNpclwiOlwi4omWXCIsXCJlY29sb25cIjpcIuKJlVwiLFwiRWN5XCI6XCLQrVwiLFwiZWN5XCI6XCLRjVwiLFwiZUREb3RcIjpcIuKpt1wiLFwiRWRvdFwiOlwixJZcIixcImVkb3RcIjpcIsSXXCIsXCJlRG90XCI6XCLiiZFcIixcImVlXCI6XCLihYdcIixcImVmRG90XCI6XCLiiZJcIixcIkVmclwiOlwi8J2UiFwiLFwiZWZyXCI6XCLwnZSiXCIsXCJlZ1wiOlwi4qqaXCIsXCJFZ3JhdmVcIjpcIsOIXCIsXCJlZ3JhdmVcIjpcIsOoXCIsXCJlZ3NcIjpcIuKqllwiLFwiZWdzZG90XCI6XCLiqphcIixcImVsXCI6XCLiqplcIixcIkVsZW1lbnRcIjpcIuKIiFwiLFwiZWxpbnRlcnNcIjpcIuKPp1wiLFwiZWxsXCI6XCLihJNcIixcImVsc1wiOlwi4qqVXCIsXCJlbHNkb3RcIjpcIuKql1wiLFwiRW1hY3JcIjpcIsSSXCIsXCJlbWFjclwiOlwixJNcIixcImVtcHR5XCI6XCLiiIVcIixcImVtcHR5c2V0XCI6XCLiiIVcIixcIkVtcHR5U21hbGxTcXVhcmVcIjpcIuKXu1wiLFwiZW1wdHl2XCI6XCLiiIVcIixcIkVtcHR5VmVyeVNtYWxsU3F1YXJlXCI6XCLilqtcIixcImVtc3AxM1wiOlwi4oCEXCIsXCJlbXNwMTRcIjpcIuKAhVwiLFwiZW1zcFwiOlwi4oCDXCIsXCJFTkdcIjpcIsWKXCIsXCJlbmdcIjpcIsWLXCIsXCJlbnNwXCI6XCLigIJcIixcIkVvZ29uXCI6XCLEmFwiLFwiZW9nb25cIjpcIsSZXCIsXCJFb3BmXCI6XCLwnZS8XCIsXCJlb3BmXCI6XCLwnZWWXCIsXCJlcGFyXCI6XCLii5VcIixcImVwYXJzbFwiOlwi4qejXCIsXCJlcGx1c1wiOlwi4qmxXCIsXCJlcHNpXCI6XCLOtVwiLFwiRXBzaWxvblwiOlwizpVcIixcImVwc2lsb25cIjpcIs61XCIsXCJlcHNpdlwiOlwiz7VcIixcImVxY2lyY1wiOlwi4omWXCIsXCJlcWNvbG9uXCI6XCLiiZVcIixcImVxc2ltXCI6XCLiiYJcIixcImVxc2xhbnRndHJcIjpcIuKqllwiLFwiZXFzbGFudGxlc3NcIjpcIuKqlVwiLFwiRXF1YWxcIjpcIuKptVwiLFwiZXF1YWxzXCI6XCI9XCIsXCJFcXVhbFRpbGRlXCI6XCLiiYJcIixcImVxdWVzdFwiOlwi4omfXCIsXCJFcXVpbGlicml1bVwiOlwi4oeMXCIsXCJlcXVpdlwiOlwi4omhXCIsXCJlcXVpdkREXCI6XCLiqbhcIixcImVxdnBhcnNsXCI6XCLip6VcIixcImVyYXJyXCI6XCLipbFcIixcImVyRG90XCI6XCLiiZNcIixcImVzY3JcIjpcIuKEr1wiLFwiRXNjclwiOlwi4oSwXCIsXCJlc2RvdFwiOlwi4omQXCIsXCJFc2ltXCI6XCLiqbNcIixcImVzaW1cIjpcIuKJglwiLFwiRXRhXCI6XCLOl1wiLFwiZXRhXCI6XCLOt1wiLFwiRVRIXCI6XCLDkFwiLFwiZXRoXCI6XCLDsFwiLFwiRXVtbFwiOlwiw4tcIixcImV1bWxcIjpcIsOrXCIsXCJldXJvXCI6XCLigqxcIixcImV4Y2xcIjpcIiFcIixcImV4aXN0XCI6XCLiiINcIixcIkV4aXN0c1wiOlwi4oiDXCIsXCJleHBlY3RhdGlvblwiOlwi4oSwXCIsXCJleHBvbmVudGlhbGVcIjpcIuKFh1wiLFwiRXhwb25lbnRpYWxFXCI6XCLihYdcIixcImZhbGxpbmdkb3RzZXFcIjpcIuKJklwiLFwiRmN5XCI6XCLQpFwiLFwiZmN5XCI6XCLRhFwiLFwiZmVtYWxlXCI6XCLimYBcIixcImZmaWxpZ1wiOlwi76yDXCIsXCJmZmxpZ1wiOlwi76yAXCIsXCJmZmxsaWdcIjpcIu+shFwiLFwiRmZyXCI6XCLwnZSJXCIsXCJmZnJcIjpcIvCdlKNcIixcImZpbGlnXCI6XCLvrIFcIixcIkZpbGxlZFNtYWxsU3F1YXJlXCI6XCLil7xcIixcIkZpbGxlZFZlcnlTbWFsbFNxdWFyZVwiOlwi4paqXCIsXCJmamxpZ1wiOlwiZmpcIixcImZsYXRcIjpcIuKZrVwiLFwiZmxsaWdcIjpcIu+sglwiLFwiZmx0bnNcIjpcIuKWsVwiLFwiZm5vZlwiOlwixpJcIixcIkZvcGZcIjpcIvCdlL1cIixcImZvcGZcIjpcIvCdlZdcIixcImZvcmFsbFwiOlwi4oiAXCIsXCJGb3JBbGxcIjpcIuKIgFwiLFwiZm9ya1wiOlwi4ouUXCIsXCJmb3JrdlwiOlwi4quZXCIsXCJGb3VyaWVydHJmXCI6XCLihLFcIixcImZwYXJ0aW50XCI6XCLiqI1cIixcImZyYWMxMlwiOlwiwr1cIixcImZyYWMxM1wiOlwi4oWTXCIsXCJmcmFjMTRcIjpcIsK8XCIsXCJmcmFjMTVcIjpcIuKFlVwiLFwiZnJhYzE2XCI6XCLihZlcIixcImZyYWMxOFwiOlwi4oWbXCIsXCJmcmFjMjNcIjpcIuKFlFwiLFwiZnJhYzI1XCI6XCLihZZcIixcImZyYWMzNFwiOlwiwr5cIixcImZyYWMzNVwiOlwi4oWXXCIsXCJmcmFjMzhcIjpcIuKFnFwiLFwiZnJhYzQ1XCI6XCLihZhcIixcImZyYWM1NlwiOlwi4oWaXCIsXCJmcmFjNThcIjpcIuKFnVwiLFwiZnJhYzc4XCI6XCLihZ5cIixcImZyYXNsXCI6XCLigYRcIixcImZyb3duXCI6XCLijKJcIixcImZzY3JcIjpcIvCdkrtcIixcIkZzY3JcIjpcIuKEsVwiLFwiZ2FjdXRlXCI6XCLHtVwiLFwiR2FtbWFcIjpcIs6TXCIsXCJnYW1tYVwiOlwizrNcIixcIkdhbW1hZFwiOlwiz5xcIixcImdhbW1hZFwiOlwiz51cIixcImdhcFwiOlwi4qqGXCIsXCJHYnJldmVcIjpcIsSeXCIsXCJnYnJldmVcIjpcIsSfXCIsXCJHY2VkaWxcIjpcIsSiXCIsXCJHY2lyY1wiOlwixJxcIixcImdjaXJjXCI6XCLEnVwiLFwiR2N5XCI6XCLQk1wiLFwiZ2N5XCI6XCLQs1wiLFwiR2RvdFwiOlwixKBcIixcImdkb3RcIjpcIsShXCIsXCJnZVwiOlwi4omlXCIsXCJnRVwiOlwi4omnXCIsXCJnRWxcIjpcIuKqjFwiLFwiZ2VsXCI6XCLii5tcIixcImdlcVwiOlwi4omlXCIsXCJnZXFxXCI6XCLiiadcIixcImdlcXNsYW50XCI6XCLiqb5cIixcImdlc2NjXCI6XCLiqqlcIixcImdlc1wiOlwi4qm+XCIsXCJnZXNkb3RcIjpcIuKqgFwiLFwiZ2VzZG90b1wiOlwi4qqCXCIsXCJnZXNkb3RvbFwiOlwi4qqEXCIsXCJnZXNsXCI6XCLii5vvuIBcIixcImdlc2xlc1wiOlwi4qqUXCIsXCJHZnJcIjpcIvCdlIpcIixcImdmclwiOlwi8J2UpFwiLFwiZ2dcIjpcIuKJq1wiLFwiR2dcIjpcIuKLmVwiLFwiZ2dnXCI6XCLii5lcIixcImdpbWVsXCI6XCLihLdcIixcIkdKY3lcIjpcItCDXCIsXCJnamN5XCI6XCLRk1wiLFwiZ2xhXCI6XCLiqqVcIixcImdsXCI6XCLiibdcIixcImdsRVwiOlwi4qqSXCIsXCJnbGpcIjpcIuKqpFwiLFwiZ25hcFwiOlwi4qqKXCIsXCJnbmFwcHJveFwiOlwi4qqKXCIsXCJnbmVcIjpcIuKqiFwiLFwiZ25FXCI6XCLiialcIixcImduZXFcIjpcIuKqiFwiLFwiZ25lcXFcIjpcIuKJqVwiLFwiZ25zaW1cIjpcIuKLp1wiLFwiR29wZlwiOlwi8J2UvlwiLFwiZ29wZlwiOlwi8J2VmFwiLFwiZ3JhdmVcIjpcImBcIixcIkdyZWF0ZXJFcXVhbFwiOlwi4omlXCIsXCJHcmVhdGVyRXF1YWxMZXNzXCI6XCLii5tcIixcIkdyZWF0ZXJGdWxsRXF1YWxcIjpcIuKJp1wiLFwiR3JlYXRlckdyZWF0ZXJcIjpcIuKqolwiLFwiR3JlYXRlckxlc3NcIjpcIuKJt1wiLFwiR3JlYXRlclNsYW50RXF1YWxcIjpcIuKpvlwiLFwiR3JlYXRlclRpbGRlXCI6XCLiibNcIixcIkdzY3JcIjpcIvCdkqJcIixcImdzY3JcIjpcIuKEilwiLFwiZ3NpbVwiOlwi4omzXCIsXCJnc2ltZVwiOlwi4qqOXCIsXCJnc2ltbFwiOlwi4qqQXCIsXCJndGNjXCI6XCLiqqdcIixcImd0Y2lyXCI6XCLiqbpcIixcImd0XCI6XCI+XCIsXCJHVFwiOlwiPlwiLFwiR3RcIjpcIuKJq1wiLFwiZ3Rkb3RcIjpcIuKLl1wiLFwiZ3RsUGFyXCI6XCLippVcIixcImd0cXVlc3RcIjpcIuKpvFwiLFwiZ3RyYXBwcm94XCI6XCLiqoZcIixcImd0cmFyclwiOlwi4qW4XCIsXCJndHJkb3RcIjpcIuKLl1wiLFwiZ3RyZXFsZXNzXCI6XCLii5tcIixcImd0cmVxcWxlc3NcIjpcIuKqjFwiLFwiZ3RybGVzc1wiOlwi4om3XCIsXCJndHJzaW1cIjpcIuKJs1wiLFwiZ3ZlcnRuZXFxXCI6XCLiianvuIBcIixcImd2bkVcIjpcIuKJqe+4gFwiLFwiSGFjZWtcIjpcIsuHXCIsXCJoYWlyc3BcIjpcIuKAilwiLFwiaGFsZlwiOlwiwr1cIixcImhhbWlsdFwiOlwi4oSLXCIsXCJIQVJEY3lcIjpcItCqXCIsXCJoYXJkY3lcIjpcItGKXCIsXCJoYXJyY2lyXCI6XCLipYhcIixcImhhcnJcIjpcIuKGlFwiLFwiaEFyclwiOlwi4oeUXCIsXCJoYXJyd1wiOlwi4oatXCIsXCJIYXRcIjpcIl5cIixcImhiYXJcIjpcIuKEj1wiLFwiSGNpcmNcIjpcIsSkXCIsXCJoY2lyY1wiOlwixKVcIixcImhlYXJ0c1wiOlwi4pmlXCIsXCJoZWFydHN1aXRcIjpcIuKZpVwiLFwiaGVsbGlwXCI6XCLigKZcIixcImhlcmNvblwiOlwi4oq5XCIsXCJoZnJcIjpcIvCdlKVcIixcIkhmclwiOlwi4oSMXCIsXCJIaWxiZXJ0U3BhY2VcIjpcIuKEi1wiLFwiaGtzZWFyb3dcIjpcIuKkpVwiLFwiaGtzd2Fyb3dcIjpcIuKkplwiLFwiaG9hcnJcIjpcIuKHv1wiLFwiaG9tdGh0XCI6XCLiiLtcIixcImhvb2tsZWZ0YXJyb3dcIjpcIuKGqVwiLFwiaG9va3JpZ2h0YXJyb3dcIjpcIuKGqlwiLFwiaG9wZlwiOlwi8J2VmVwiLFwiSG9wZlwiOlwi4oSNXCIsXCJob3JiYXJcIjpcIuKAlVwiLFwiSG9yaXpvbnRhbExpbmVcIjpcIuKUgFwiLFwiaHNjclwiOlwi8J2SvVwiLFwiSHNjclwiOlwi4oSLXCIsXCJoc2xhc2hcIjpcIuKEj1wiLFwiSHN0cm9rXCI6XCLEplwiLFwiaHN0cm9rXCI6XCLEp1wiLFwiSHVtcERvd25IdW1wXCI6XCLiiY5cIixcIkh1bXBFcXVhbFwiOlwi4omPXCIsXCJoeWJ1bGxcIjpcIuKBg1wiLFwiaHlwaGVuXCI6XCLigJBcIixcIklhY3V0ZVwiOlwiw41cIixcImlhY3V0ZVwiOlwiw61cIixcImljXCI6XCLigaNcIixcIkljaXJjXCI6XCLDjlwiLFwiaWNpcmNcIjpcIsOuXCIsXCJJY3lcIjpcItCYXCIsXCJpY3lcIjpcItC4XCIsXCJJZG90XCI6XCLEsFwiLFwiSUVjeVwiOlwi0JVcIixcImllY3lcIjpcItC1XCIsXCJpZXhjbFwiOlwiwqFcIixcImlmZlwiOlwi4oeUXCIsXCJpZnJcIjpcIvCdlKZcIixcIklmclwiOlwi4oSRXCIsXCJJZ3JhdmVcIjpcIsOMXCIsXCJpZ3JhdmVcIjpcIsOsXCIsXCJpaVwiOlwi4oWIXCIsXCJpaWlpbnRcIjpcIuKojFwiLFwiaWlpbnRcIjpcIuKIrVwiLFwiaWluZmluXCI6XCLip5xcIixcImlpb3RhXCI6XCLihKlcIixcIklKbGlnXCI6XCLEslwiLFwiaWpsaWdcIjpcIsSzXCIsXCJJbWFjclwiOlwixKpcIixcImltYWNyXCI6XCLEq1wiLFwiaW1hZ2VcIjpcIuKEkVwiLFwiSW1hZ2luYXJ5SVwiOlwi4oWIXCIsXCJpbWFnbGluZVwiOlwi4oSQXCIsXCJpbWFncGFydFwiOlwi4oSRXCIsXCJpbWF0aFwiOlwixLFcIixcIkltXCI6XCLihJFcIixcImltb2ZcIjpcIuKKt1wiLFwiaW1wZWRcIjpcIsa1XCIsXCJJbXBsaWVzXCI6XCLih5JcIixcImluY2FyZVwiOlwi4oSFXCIsXCJpblwiOlwi4oiIXCIsXCJpbmZpblwiOlwi4oieXCIsXCJpbmZpbnRpZVwiOlwi4qedXCIsXCJpbm9kb3RcIjpcIsSxXCIsXCJpbnRjYWxcIjpcIuKKulwiLFwiaW50XCI6XCLiiKtcIixcIkludFwiOlwi4oisXCIsXCJpbnRlZ2Vyc1wiOlwi4oSkXCIsXCJJbnRlZ3JhbFwiOlwi4oirXCIsXCJpbnRlcmNhbFwiOlwi4oq6XCIsXCJJbnRlcnNlY3Rpb25cIjpcIuKLglwiLFwiaW50bGFyaGtcIjpcIuKol1wiLFwiaW50cHJvZFwiOlwi4qi8XCIsXCJJbnZpc2libGVDb21tYVwiOlwi4oGjXCIsXCJJbnZpc2libGVUaW1lc1wiOlwi4oGiXCIsXCJJT2N5XCI6XCLQgVwiLFwiaW9jeVwiOlwi0ZFcIixcIklvZ29uXCI6XCLErlwiLFwiaW9nb25cIjpcIsSvXCIsXCJJb3BmXCI6XCLwnZWAXCIsXCJpb3BmXCI6XCLwnZWaXCIsXCJJb3RhXCI6XCLOmVwiLFwiaW90YVwiOlwizrlcIixcImlwcm9kXCI6XCLiqLxcIixcImlxdWVzdFwiOlwiwr9cIixcImlzY3JcIjpcIvCdkr5cIixcIklzY3JcIjpcIuKEkFwiLFwiaXNpblwiOlwi4oiIXCIsXCJpc2luZG90XCI6XCLii7VcIixcImlzaW5FXCI6XCLii7lcIixcImlzaW5zXCI6XCLii7RcIixcImlzaW5zdlwiOlwi4ouzXCIsXCJpc2ludlwiOlwi4oiIXCIsXCJpdFwiOlwi4oGiXCIsXCJJdGlsZGVcIjpcIsSoXCIsXCJpdGlsZGVcIjpcIsSpXCIsXCJJdWtjeVwiOlwi0IZcIixcIml1a2N5XCI6XCLRllwiLFwiSXVtbFwiOlwiw49cIixcIml1bWxcIjpcIsOvXCIsXCJKY2lyY1wiOlwixLRcIixcImpjaXJjXCI6XCLEtVwiLFwiSmN5XCI6XCLQmVwiLFwiamN5XCI6XCLQuVwiLFwiSmZyXCI6XCLwnZSNXCIsXCJqZnJcIjpcIvCdlKdcIixcImptYXRoXCI6XCLIt1wiLFwiSm9wZlwiOlwi8J2VgVwiLFwiam9wZlwiOlwi8J2Vm1wiLFwiSnNjclwiOlwi8J2SpVwiLFwianNjclwiOlwi8J2Sv1wiLFwiSnNlcmN5XCI6XCLQiFwiLFwianNlcmN5XCI6XCLRmFwiLFwiSnVrY3lcIjpcItCEXCIsXCJqdWtjeVwiOlwi0ZRcIixcIkthcHBhXCI6XCLOmlwiLFwia2FwcGFcIjpcIs66XCIsXCJrYXBwYXZcIjpcIs+wXCIsXCJLY2VkaWxcIjpcIsS2XCIsXCJrY2VkaWxcIjpcIsS3XCIsXCJLY3lcIjpcItCaXCIsXCJrY3lcIjpcItC6XCIsXCJLZnJcIjpcIvCdlI5cIixcImtmclwiOlwi8J2UqFwiLFwia2dyZWVuXCI6XCLEuFwiLFwiS0hjeVwiOlwi0KVcIixcImtoY3lcIjpcItGFXCIsXCJLSmN5XCI6XCLQjFwiLFwia2pjeVwiOlwi0ZxcIixcIktvcGZcIjpcIvCdlYJcIixcImtvcGZcIjpcIvCdlZxcIixcIktzY3JcIjpcIvCdkqZcIixcImtzY3JcIjpcIvCdk4BcIixcImxBYXJyXCI6XCLih5pcIixcIkxhY3V0ZVwiOlwixLlcIixcImxhY3V0ZVwiOlwixLpcIixcImxhZW1wdHl2XCI6XCLiprRcIixcImxhZ3JhblwiOlwi4oSSXCIsXCJMYW1iZGFcIjpcIs6bXCIsXCJsYW1iZGFcIjpcIs67XCIsXCJsYW5nXCI6XCLin6hcIixcIkxhbmdcIjpcIuKfqlwiLFwibGFuZ2RcIjpcIuKmkVwiLFwibGFuZ2xlXCI6XCLin6hcIixcImxhcFwiOlwi4qqFXCIsXCJMYXBsYWNldHJmXCI6XCLihJJcIixcImxhcXVvXCI6XCLCq1wiLFwibGFycmJcIjpcIuKHpFwiLFwibGFycmJmc1wiOlwi4qSfXCIsXCJsYXJyXCI6XCLihpBcIixcIkxhcnJcIjpcIuKGnlwiLFwibEFyclwiOlwi4oeQXCIsXCJsYXJyZnNcIjpcIuKknVwiLFwibGFycmhrXCI6XCLihqlcIixcImxhcnJscFwiOlwi4oarXCIsXCJsYXJycGxcIjpcIuKkuVwiLFwibGFycnNpbVwiOlwi4qWzXCIsXCJsYXJydGxcIjpcIuKGolwiLFwibGF0YWlsXCI6XCLipJlcIixcImxBdGFpbFwiOlwi4qSbXCIsXCJsYXRcIjpcIuKqq1wiLFwibGF0ZVwiOlwi4qqtXCIsXCJsYXRlc1wiOlwi4qqt77iAXCIsXCJsYmFyclwiOlwi4qSMXCIsXCJsQmFyclwiOlwi4qSOXCIsXCJsYmJya1wiOlwi4p2yXCIsXCJsYnJhY2VcIjpcIntcIixcImxicmFja1wiOlwiW1wiLFwibGJya2VcIjpcIuKmi1wiLFwibGJya3NsZFwiOlwi4qaPXCIsXCJsYnJrc2x1XCI6XCLipo1cIixcIkxjYXJvblwiOlwixL1cIixcImxjYXJvblwiOlwixL5cIixcIkxjZWRpbFwiOlwixLtcIixcImxjZWRpbFwiOlwixLxcIixcImxjZWlsXCI6XCLijIhcIixcImxjdWJcIjpcIntcIixcIkxjeVwiOlwi0JtcIixcImxjeVwiOlwi0LtcIixcImxkY2FcIjpcIuKktlwiLFwibGRxdW9cIjpcIuKAnFwiLFwibGRxdW9yXCI6XCLigJ5cIixcImxkcmRoYXJcIjpcIuKlp1wiLFwibGRydXNoYXJcIjpcIuKli1wiLFwibGRzaFwiOlwi4oayXCIsXCJsZVwiOlwi4omkXCIsXCJsRVwiOlwi4ommXCIsXCJMZWZ0QW5nbGVCcmFja2V0XCI6XCLin6hcIixcIkxlZnRBcnJvd0JhclwiOlwi4oekXCIsXCJsZWZ0YXJyb3dcIjpcIuKGkFwiLFwiTGVmdEFycm93XCI6XCLihpBcIixcIkxlZnRhcnJvd1wiOlwi4oeQXCIsXCJMZWZ0QXJyb3dSaWdodEFycm93XCI6XCLih4ZcIixcImxlZnRhcnJvd3RhaWxcIjpcIuKGolwiLFwiTGVmdENlaWxpbmdcIjpcIuKMiFwiLFwiTGVmdERvdWJsZUJyYWNrZXRcIjpcIuKfplwiLFwiTGVmdERvd25UZWVWZWN0b3JcIjpcIuKloVwiLFwiTGVmdERvd25WZWN0b3JCYXJcIjpcIuKlmVwiLFwiTGVmdERvd25WZWN0b3JcIjpcIuKHg1wiLFwiTGVmdEZsb29yXCI6XCLijIpcIixcImxlZnRoYXJwb29uZG93blwiOlwi4oa9XCIsXCJsZWZ0aGFycG9vbnVwXCI6XCLihrxcIixcImxlZnRsZWZ0YXJyb3dzXCI6XCLih4dcIixcImxlZnRyaWdodGFycm93XCI6XCLihpRcIixcIkxlZnRSaWdodEFycm93XCI6XCLihpRcIixcIkxlZnRyaWdodGFycm93XCI6XCLih5RcIixcImxlZnRyaWdodGFycm93c1wiOlwi4oeGXCIsXCJsZWZ0cmlnaHRoYXJwb29uc1wiOlwi4oeLXCIsXCJsZWZ0cmlnaHRzcXVpZ2Fycm93XCI6XCLihq1cIixcIkxlZnRSaWdodFZlY3RvclwiOlwi4qWOXCIsXCJMZWZ0VGVlQXJyb3dcIjpcIuKGpFwiLFwiTGVmdFRlZVwiOlwi4oqjXCIsXCJMZWZ0VGVlVmVjdG9yXCI6XCLipZpcIixcImxlZnR0aHJlZXRpbWVzXCI6XCLii4tcIixcIkxlZnRUcmlhbmdsZUJhclwiOlwi4qePXCIsXCJMZWZ0VHJpYW5nbGVcIjpcIuKKslwiLFwiTGVmdFRyaWFuZ2xlRXF1YWxcIjpcIuKKtFwiLFwiTGVmdFVwRG93blZlY3RvclwiOlwi4qWRXCIsXCJMZWZ0VXBUZWVWZWN0b3JcIjpcIuKloFwiLFwiTGVmdFVwVmVjdG9yQmFyXCI6XCLipZhcIixcIkxlZnRVcFZlY3RvclwiOlwi4oa/XCIsXCJMZWZ0VmVjdG9yQmFyXCI6XCLipZJcIixcIkxlZnRWZWN0b3JcIjpcIuKGvFwiLFwibEVnXCI6XCLiqotcIixcImxlZ1wiOlwi4ouaXCIsXCJsZXFcIjpcIuKJpFwiLFwibGVxcVwiOlwi4ommXCIsXCJsZXFzbGFudFwiOlwi4qm9XCIsXCJsZXNjY1wiOlwi4qqoXCIsXCJsZXNcIjpcIuKpvVwiLFwibGVzZG90XCI6XCLiqb9cIixcImxlc2RvdG9cIjpcIuKqgVwiLFwibGVzZG90b3JcIjpcIuKqg1wiLFwibGVzZ1wiOlwi4oua77iAXCIsXCJsZXNnZXNcIjpcIuKqk1wiLFwibGVzc2FwcHJveFwiOlwi4qqFXCIsXCJsZXNzZG90XCI6XCLii5ZcIixcImxlc3NlcWd0clwiOlwi4ouaXCIsXCJsZXNzZXFxZ3RyXCI6XCLiqotcIixcIkxlc3NFcXVhbEdyZWF0ZXJcIjpcIuKLmlwiLFwiTGVzc0Z1bGxFcXVhbFwiOlwi4ommXCIsXCJMZXNzR3JlYXRlclwiOlwi4om2XCIsXCJsZXNzZ3RyXCI6XCLiibZcIixcIkxlc3NMZXNzXCI6XCLiqqFcIixcImxlc3NzaW1cIjpcIuKJslwiLFwiTGVzc1NsYW50RXF1YWxcIjpcIuKpvVwiLFwiTGVzc1RpbGRlXCI6XCLiibJcIixcImxmaXNodFwiOlwi4qW8XCIsXCJsZmxvb3JcIjpcIuKMilwiLFwiTGZyXCI6XCLwnZSPXCIsXCJsZnJcIjpcIvCdlKlcIixcImxnXCI6XCLiibZcIixcImxnRVwiOlwi4qqRXCIsXCJsSGFyXCI6XCLipaJcIixcImxoYXJkXCI6XCLihr1cIixcImxoYXJ1XCI6XCLihrxcIixcImxoYXJ1bFwiOlwi4qWqXCIsXCJsaGJsa1wiOlwi4paEXCIsXCJMSmN5XCI6XCLQiVwiLFwibGpjeVwiOlwi0ZlcIixcImxsYXJyXCI6XCLih4dcIixcImxsXCI6XCLiiapcIixcIkxsXCI6XCLii5hcIixcImxsY29ybmVyXCI6XCLijJ5cIixcIkxsZWZ0YXJyb3dcIjpcIuKHmlwiLFwibGxoYXJkXCI6XCLipatcIixcImxsdHJpXCI6XCLil7pcIixcIkxtaWRvdFwiOlwixL9cIixcImxtaWRvdFwiOlwixYBcIixcImxtb3VzdGFjaGVcIjpcIuKOsFwiLFwibG1vdXN0XCI6XCLijrBcIixcImxuYXBcIjpcIuKqiVwiLFwibG5hcHByb3hcIjpcIuKqiVwiLFwibG5lXCI6XCLiqodcIixcImxuRVwiOlwi4omoXCIsXCJsbmVxXCI6XCLiqodcIixcImxuZXFxXCI6XCLiiahcIixcImxuc2ltXCI6XCLii6ZcIixcImxvYW5nXCI6XCLin6xcIixcImxvYXJyXCI6XCLih71cIixcImxvYnJrXCI6XCLin6ZcIixcImxvbmdsZWZ0YXJyb3dcIjpcIuKftVwiLFwiTG9uZ0xlZnRBcnJvd1wiOlwi4p+1XCIsXCJMb25nbGVmdGFycm93XCI6XCLin7hcIixcImxvbmdsZWZ0cmlnaHRhcnJvd1wiOlwi4p+3XCIsXCJMb25nTGVmdFJpZ2h0QXJyb3dcIjpcIuKft1wiLFwiTG9uZ2xlZnRyaWdodGFycm93XCI6XCLin7pcIixcImxvbmdtYXBzdG9cIjpcIuKfvFwiLFwibG9uZ3JpZ2h0YXJyb3dcIjpcIuKftlwiLFwiTG9uZ1JpZ2h0QXJyb3dcIjpcIuKftlwiLFwiTG9uZ3JpZ2h0YXJyb3dcIjpcIuKfuVwiLFwibG9vcGFycm93bGVmdFwiOlwi4oarXCIsXCJsb29wYXJyb3dyaWdodFwiOlwi4oasXCIsXCJsb3BhclwiOlwi4qaFXCIsXCJMb3BmXCI6XCLwnZWDXCIsXCJsb3BmXCI6XCLwnZWdXCIsXCJsb3BsdXNcIjpcIuKorVwiLFwibG90aW1lc1wiOlwi4qi0XCIsXCJsb3dhc3RcIjpcIuKIl1wiLFwibG93YmFyXCI6XCJfXCIsXCJMb3dlckxlZnRBcnJvd1wiOlwi4oaZXCIsXCJMb3dlclJpZ2h0QXJyb3dcIjpcIuKGmFwiLFwibG96XCI6XCLil4pcIixcImxvemVuZ2VcIjpcIuKXilwiLFwibG96ZlwiOlwi4qerXCIsXCJscGFyXCI6XCIoXCIsXCJscGFybHRcIjpcIuKmk1wiLFwibHJhcnJcIjpcIuKHhlwiLFwibHJjb3JuZXJcIjpcIuKMn1wiLFwibHJoYXJcIjpcIuKHi1wiLFwibHJoYXJkXCI6XCLipa1cIixcImxybVwiOlwi4oCOXCIsXCJscnRyaVwiOlwi4oq/XCIsXCJsc2FxdW9cIjpcIuKAuVwiLFwibHNjclwiOlwi8J2TgVwiLFwiTHNjclwiOlwi4oSSXCIsXCJsc2hcIjpcIuKGsFwiLFwiTHNoXCI6XCLihrBcIixcImxzaW1cIjpcIuKJslwiLFwibHNpbWVcIjpcIuKqjVwiLFwibHNpbWdcIjpcIuKqj1wiLFwibHNxYlwiOlwiW1wiLFwibHNxdW9cIjpcIuKAmFwiLFwibHNxdW9yXCI6XCLigJpcIixcIkxzdHJva1wiOlwixYFcIixcImxzdHJva1wiOlwixYJcIixcImx0Y2NcIjpcIuKqplwiLFwibHRjaXJcIjpcIuKpuVwiLFwibHRcIjpcIjxcIixcIkxUXCI6XCI8XCIsXCJMdFwiOlwi4omqXCIsXCJsdGRvdFwiOlwi4ouWXCIsXCJsdGhyZWVcIjpcIuKLi1wiLFwibHRpbWVzXCI6XCLii4lcIixcImx0bGFyclwiOlwi4qW2XCIsXCJsdHF1ZXN0XCI6XCLiqbtcIixcImx0cmlcIjpcIuKXg1wiLFwibHRyaWVcIjpcIuKKtFwiLFwibHRyaWZcIjpcIuKXglwiLFwibHRyUGFyXCI6XCLippZcIixcImx1cmRzaGFyXCI6XCLipYpcIixcImx1cnVoYXJcIjpcIuKlplwiLFwibHZlcnRuZXFxXCI6XCLiiajvuIBcIixcImx2bkVcIjpcIuKJqO+4gFwiLFwibWFjclwiOlwiwq9cIixcIm1hbGVcIjpcIuKZglwiLFwibWFsdFwiOlwi4pygXCIsXCJtYWx0ZXNlXCI6XCLinKBcIixcIk1hcFwiOlwi4qSFXCIsXCJtYXBcIjpcIuKGplwiLFwibWFwc3RvXCI6XCLihqZcIixcIm1hcHN0b2Rvd25cIjpcIuKGp1wiLFwibWFwc3RvbGVmdFwiOlwi4oakXCIsXCJtYXBzdG91cFwiOlwi4oalXCIsXCJtYXJrZXJcIjpcIuKWrlwiLFwibWNvbW1hXCI6XCLiqKlcIixcIk1jeVwiOlwi0JxcIixcIm1jeVwiOlwi0LxcIixcIm1kYXNoXCI6XCLigJRcIixcIm1ERG90XCI6XCLiiLpcIixcIm1lYXN1cmVkYW5nbGVcIjpcIuKIoVwiLFwiTWVkaXVtU3BhY2VcIjpcIuKBn1wiLFwiTWVsbGludHJmXCI6XCLihLNcIixcIk1mclwiOlwi8J2UkFwiLFwibWZyXCI6XCLwnZSqXCIsXCJtaG9cIjpcIuKEp1wiLFwibWljcm9cIjpcIsK1XCIsXCJtaWRhc3RcIjpcIipcIixcIm1pZGNpclwiOlwi4quwXCIsXCJtaWRcIjpcIuKIo1wiLFwibWlkZG90XCI6XCLCt1wiLFwibWludXNiXCI6XCLiip9cIixcIm1pbnVzXCI6XCLiiJJcIixcIm1pbnVzZFwiOlwi4oi4XCIsXCJtaW51c2R1XCI6XCLiqKpcIixcIk1pbnVzUGx1c1wiOlwi4oiTXCIsXCJtbGNwXCI6XCLiq5tcIixcIm1sZHJcIjpcIuKAplwiLFwibW5wbHVzXCI6XCLiiJNcIixcIm1vZGVsc1wiOlwi4oqnXCIsXCJNb3BmXCI6XCLwnZWEXCIsXCJtb3BmXCI6XCLwnZWeXCIsXCJtcFwiOlwi4oiTXCIsXCJtc2NyXCI6XCLwnZOCXCIsXCJNc2NyXCI6XCLihLNcIixcIm1zdHBvc1wiOlwi4oi+XCIsXCJNdVwiOlwizpxcIixcIm11XCI6XCLOvFwiLFwibXVsdGltYXBcIjpcIuKKuFwiLFwibXVtYXBcIjpcIuKKuFwiLFwibmFibGFcIjpcIuKIh1wiLFwiTmFjdXRlXCI6XCLFg1wiLFwibmFjdXRlXCI6XCLFhFwiLFwibmFuZ1wiOlwi4oig4oOSXCIsXCJuYXBcIjpcIuKJiVwiLFwibmFwRVwiOlwi4qmwzLhcIixcIm5hcGlkXCI6XCLiiYvMuFwiLFwibmFwb3NcIjpcIsWJXCIsXCJuYXBwcm94XCI6XCLiiYlcIixcIm5hdHVyYWxcIjpcIuKZrlwiLFwibmF0dXJhbHNcIjpcIuKElVwiLFwibmF0dXJcIjpcIuKZrlwiLFwibmJzcFwiOlwiwqBcIixcIm5idW1wXCI6XCLiiY7MuFwiLFwibmJ1bXBlXCI6XCLiiY/MuFwiLFwibmNhcFwiOlwi4qmDXCIsXCJOY2Fyb25cIjpcIsWHXCIsXCJuY2Fyb25cIjpcIsWIXCIsXCJOY2VkaWxcIjpcIsWFXCIsXCJuY2VkaWxcIjpcIsWGXCIsXCJuY29uZ1wiOlwi4omHXCIsXCJuY29uZ2RvdFwiOlwi4qmtzLhcIixcIm5jdXBcIjpcIuKpglwiLFwiTmN5XCI6XCLQnVwiLFwibmN5XCI6XCLQvVwiLFwibmRhc2hcIjpcIuKAk1wiLFwibmVhcmhrXCI6XCLipKRcIixcIm5lYXJyXCI6XCLihpdcIixcIm5lQXJyXCI6XCLih5dcIixcIm5lYXJyb3dcIjpcIuKGl1wiLFwibmVcIjpcIuKJoFwiLFwibmVkb3RcIjpcIuKJkMy4XCIsXCJOZWdhdGl2ZU1lZGl1bVNwYWNlXCI6XCLigItcIixcIk5lZ2F0aXZlVGhpY2tTcGFjZVwiOlwi4oCLXCIsXCJOZWdhdGl2ZVRoaW5TcGFjZVwiOlwi4oCLXCIsXCJOZWdhdGl2ZVZlcnlUaGluU3BhY2VcIjpcIuKAi1wiLFwibmVxdWl2XCI6XCLiiaJcIixcIm5lc2VhclwiOlwi4qSoXCIsXCJuZXNpbVwiOlwi4omCzLhcIixcIk5lc3RlZEdyZWF0ZXJHcmVhdGVyXCI6XCLiiatcIixcIk5lc3RlZExlc3NMZXNzXCI6XCLiiapcIixcIk5ld0xpbmVcIjpcIlxcblwiLFwibmV4aXN0XCI6XCLiiIRcIixcIm5leGlzdHNcIjpcIuKIhFwiLFwiTmZyXCI6XCLwnZSRXCIsXCJuZnJcIjpcIvCdlKtcIixcIm5nRVwiOlwi4omnzLhcIixcIm5nZVwiOlwi4omxXCIsXCJuZ2VxXCI6XCLiibFcIixcIm5nZXFxXCI6XCLiiafMuFwiLFwibmdlcXNsYW50XCI6XCLiqb7MuFwiLFwibmdlc1wiOlwi4qm+zLhcIixcIm5HZ1wiOlwi4ouZzLhcIixcIm5nc2ltXCI6XCLiibVcIixcIm5HdFwiOlwi4omr4oOSXCIsXCJuZ3RcIjpcIuKJr1wiLFwibmd0clwiOlwi4omvXCIsXCJuR3R2XCI6XCLiiavMuFwiLFwibmhhcnJcIjpcIuKGrlwiLFwibmhBcnJcIjpcIuKHjlwiLFwibmhwYXJcIjpcIuKrslwiLFwibmlcIjpcIuKIi1wiLFwibmlzXCI6XCLii7xcIixcIm5pc2RcIjpcIuKLulwiLFwibml2XCI6XCLiiItcIixcIk5KY3lcIjpcItCKXCIsXCJuamN5XCI6XCLRmlwiLFwibmxhcnJcIjpcIuKGmlwiLFwibmxBcnJcIjpcIuKHjVwiLFwibmxkclwiOlwi4oClXCIsXCJubEVcIjpcIuKJpsy4XCIsXCJubGVcIjpcIuKJsFwiLFwibmxlZnRhcnJvd1wiOlwi4oaaXCIsXCJuTGVmdGFycm93XCI6XCLih41cIixcIm5sZWZ0cmlnaHRhcnJvd1wiOlwi4oauXCIsXCJuTGVmdHJpZ2h0YXJyb3dcIjpcIuKHjlwiLFwibmxlcVwiOlwi4omwXCIsXCJubGVxcVwiOlwi4ommzLhcIixcIm5sZXFzbGFudFwiOlwi4qm9zLhcIixcIm5sZXNcIjpcIuKpvcy4XCIsXCJubGVzc1wiOlwi4omuXCIsXCJuTGxcIjpcIuKLmMy4XCIsXCJubHNpbVwiOlwi4om0XCIsXCJuTHRcIjpcIuKJquKDklwiLFwibmx0XCI6XCLiia5cIixcIm5sdHJpXCI6XCLii6pcIixcIm5sdHJpZVwiOlwi4ousXCIsXCJuTHR2XCI6XCLiiarMuFwiLFwibm1pZFwiOlwi4oikXCIsXCJOb0JyZWFrXCI6XCLigaBcIixcIk5vbkJyZWFraW5nU3BhY2VcIjpcIsKgXCIsXCJub3BmXCI6XCLwnZWfXCIsXCJOb3BmXCI6XCLihJVcIixcIk5vdFwiOlwi4qusXCIsXCJub3RcIjpcIsKsXCIsXCJOb3RDb25ncnVlbnRcIjpcIuKJolwiLFwiTm90Q3VwQ2FwXCI6XCLiia1cIixcIk5vdERvdWJsZVZlcnRpY2FsQmFyXCI6XCLiiKZcIixcIk5vdEVsZW1lbnRcIjpcIuKIiVwiLFwiTm90RXF1YWxcIjpcIuKJoFwiLFwiTm90RXF1YWxUaWxkZVwiOlwi4omCzLhcIixcIk5vdEV4aXN0c1wiOlwi4oiEXCIsXCJOb3RHcmVhdGVyXCI6XCLiia9cIixcIk5vdEdyZWF0ZXJFcXVhbFwiOlwi4omxXCIsXCJOb3RHcmVhdGVyRnVsbEVxdWFsXCI6XCLiiafMuFwiLFwiTm90R3JlYXRlckdyZWF0ZXJcIjpcIuKJq8y4XCIsXCJOb3RHcmVhdGVyTGVzc1wiOlwi4om5XCIsXCJOb3RHcmVhdGVyU2xhbnRFcXVhbFwiOlwi4qm+zLhcIixcIk5vdEdyZWF0ZXJUaWxkZVwiOlwi4om1XCIsXCJOb3RIdW1wRG93bkh1bXBcIjpcIuKJjsy4XCIsXCJOb3RIdW1wRXF1YWxcIjpcIuKJj8y4XCIsXCJub3RpblwiOlwi4oiJXCIsXCJub3RpbmRvdFwiOlwi4ou1zLhcIixcIm5vdGluRVwiOlwi4ou5zLhcIixcIm5vdGludmFcIjpcIuKIiVwiLFwibm90aW52YlwiOlwi4ou3XCIsXCJub3RpbnZjXCI6XCLii7ZcIixcIk5vdExlZnRUcmlhbmdsZUJhclwiOlwi4qePzLhcIixcIk5vdExlZnRUcmlhbmdsZVwiOlwi4ouqXCIsXCJOb3RMZWZ0VHJpYW5nbGVFcXVhbFwiOlwi4ousXCIsXCJOb3RMZXNzXCI6XCLiia5cIixcIk5vdExlc3NFcXVhbFwiOlwi4omwXCIsXCJOb3RMZXNzR3JlYXRlclwiOlwi4om4XCIsXCJOb3RMZXNzTGVzc1wiOlwi4omqzLhcIixcIk5vdExlc3NTbGFudEVxdWFsXCI6XCLiqb3MuFwiLFwiTm90TGVzc1RpbGRlXCI6XCLiibRcIixcIk5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyXCI6XCLiqqLMuFwiLFwiTm90TmVzdGVkTGVzc0xlc3NcIjpcIuKqocy4XCIsXCJub3RuaVwiOlwi4oiMXCIsXCJub3RuaXZhXCI6XCLiiIxcIixcIm5vdG5pdmJcIjpcIuKLvlwiLFwibm90bml2Y1wiOlwi4ou9XCIsXCJOb3RQcmVjZWRlc1wiOlwi4oqAXCIsXCJOb3RQcmVjZWRlc0VxdWFsXCI6XCLiqq/MuFwiLFwiTm90UHJlY2VkZXNTbGFudEVxdWFsXCI6XCLii6BcIixcIk5vdFJldmVyc2VFbGVtZW50XCI6XCLiiIxcIixcIk5vdFJpZ2h0VHJpYW5nbGVCYXJcIjpcIuKnkMy4XCIsXCJOb3RSaWdodFRyaWFuZ2xlXCI6XCLii6tcIixcIk5vdFJpZ2h0VHJpYW5nbGVFcXVhbFwiOlwi4outXCIsXCJOb3RTcXVhcmVTdWJzZXRcIjpcIuKKj8y4XCIsXCJOb3RTcXVhcmVTdWJzZXRFcXVhbFwiOlwi4ouiXCIsXCJOb3RTcXVhcmVTdXBlcnNldFwiOlwi4oqQzLhcIixcIk5vdFNxdWFyZVN1cGVyc2V0RXF1YWxcIjpcIuKLo1wiLFwiTm90U3Vic2V0XCI6XCLiioLig5JcIixcIk5vdFN1YnNldEVxdWFsXCI6XCLiiohcIixcIk5vdFN1Y2NlZWRzXCI6XCLiioFcIixcIk5vdFN1Y2NlZWRzRXF1YWxcIjpcIuKqsMy4XCIsXCJOb3RTdWNjZWVkc1NsYW50RXF1YWxcIjpcIuKLoVwiLFwiTm90U3VjY2VlZHNUaWxkZVwiOlwi4om/zLhcIixcIk5vdFN1cGVyc2V0XCI6XCLiioPig5JcIixcIk5vdFN1cGVyc2V0RXF1YWxcIjpcIuKKiVwiLFwiTm90VGlsZGVcIjpcIuKJgVwiLFwiTm90VGlsZGVFcXVhbFwiOlwi4omEXCIsXCJOb3RUaWxkZUZ1bGxFcXVhbFwiOlwi4omHXCIsXCJOb3RUaWxkZVRpbGRlXCI6XCLiiYlcIixcIk5vdFZlcnRpY2FsQmFyXCI6XCLiiKRcIixcIm5wYXJhbGxlbFwiOlwi4oimXCIsXCJucGFyXCI6XCLiiKZcIixcIm5wYXJzbFwiOlwi4qu94oOlXCIsXCJucGFydFwiOlwi4oiCzLhcIixcIm5wb2xpbnRcIjpcIuKolFwiLFwibnByXCI6XCLiioBcIixcIm5wcmN1ZVwiOlwi4ougXCIsXCJucHJlY1wiOlwi4oqAXCIsXCJucHJlY2VxXCI6XCLiqq/MuFwiLFwibnByZVwiOlwi4qqvzLhcIixcIm5yYXJyY1wiOlwi4qSzzLhcIixcIm5yYXJyXCI6XCLihptcIixcIm5yQXJyXCI6XCLih49cIixcIm5yYXJyd1wiOlwi4oadzLhcIixcIm5yaWdodGFycm93XCI6XCLihptcIixcIm5SaWdodGFycm93XCI6XCLih49cIixcIm5ydHJpXCI6XCLii6tcIixcIm5ydHJpZVwiOlwi4outXCIsXCJuc2NcIjpcIuKKgVwiLFwibnNjY3VlXCI6XCLii6FcIixcIm5zY2VcIjpcIuKqsMy4XCIsXCJOc2NyXCI6XCLwnZKpXCIsXCJuc2NyXCI6XCLwnZODXCIsXCJuc2hvcnRtaWRcIjpcIuKIpFwiLFwibnNob3J0cGFyYWxsZWxcIjpcIuKIplwiLFwibnNpbVwiOlwi4omBXCIsXCJuc2ltZVwiOlwi4omEXCIsXCJuc2ltZXFcIjpcIuKJhFwiLFwibnNtaWRcIjpcIuKIpFwiLFwibnNwYXJcIjpcIuKIplwiLFwibnNxc3ViZVwiOlwi4ouiXCIsXCJuc3FzdXBlXCI6XCLii6NcIixcIm5zdWJcIjpcIuKKhFwiLFwibnN1YkVcIjpcIuKrhcy4XCIsXCJuc3ViZVwiOlwi4oqIXCIsXCJuc3Vic2V0XCI6XCLiioLig5JcIixcIm5zdWJzZXRlcVwiOlwi4oqIXCIsXCJuc3Vic2V0ZXFxXCI6XCLiq4XMuFwiLFwibnN1Y2NcIjpcIuKKgVwiLFwibnN1Y2NlcVwiOlwi4qqwzLhcIixcIm5zdXBcIjpcIuKKhVwiLFwibnN1cEVcIjpcIuKrhsy4XCIsXCJuc3VwZVwiOlwi4oqJXCIsXCJuc3Vwc2V0XCI6XCLiioPig5JcIixcIm5zdXBzZXRlcVwiOlwi4oqJXCIsXCJuc3Vwc2V0ZXFxXCI6XCLiq4bMuFwiLFwibnRnbFwiOlwi4om5XCIsXCJOdGlsZGVcIjpcIsORXCIsXCJudGlsZGVcIjpcIsOxXCIsXCJudGxnXCI6XCLiibhcIixcIm50cmlhbmdsZWxlZnRcIjpcIuKLqlwiLFwibnRyaWFuZ2xlbGVmdGVxXCI6XCLii6xcIixcIm50cmlhbmdsZXJpZ2h0XCI6XCLii6tcIixcIm50cmlhbmdsZXJpZ2h0ZXFcIjpcIuKLrVwiLFwiTnVcIjpcIs6dXCIsXCJudVwiOlwizr1cIixcIm51bVwiOlwiI1wiLFwibnVtZXJvXCI6XCLihJZcIixcIm51bXNwXCI6XCLigIdcIixcIm52YXBcIjpcIuKJjeKDklwiLFwibnZkYXNoXCI6XCLiiqxcIixcIm52RGFzaFwiOlwi4oqtXCIsXCJuVmRhc2hcIjpcIuKKrlwiLFwiblZEYXNoXCI6XCLiiq9cIixcIm52Z2VcIjpcIuKJpeKDklwiLFwibnZndFwiOlwiPuKDklwiLFwibnZIYXJyXCI6XCLipIRcIixcIm52aW5maW5cIjpcIuKnnlwiLFwibnZsQXJyXCI6XCLipIJcIixcIm52bGVcIjpcIuKJpOKDklwiLFwibnZsdFwiOlwiPOKDklwiLFwibnZsdHJpZVwiOlwi4oq04oOSXCIsXCJudnJBcnJcIjpcIuKkg1wiLFwibnZydHJpZVwiOlwi4oq14oOSXCIsXCJudnNpbVwiOlwi4oi84oOSXCIsXCJud2FyaGtcIjpcIuKko1wiLFwibndhcnJcIjpcIuKGllwiLFwibndBcnJcIjpcIuKHllwiLFwibndhcnJvd1wiOlwi4oaWXCIsXCJud25lYXJcIjpcIuKkp1wiLFwiT2FjdXRlXCI6XCLDk1wiLFwib2FjdXRlXCI6XCLDs1wiLFwib2FzdFwiOlwi4oqbXCIsXCJPY2lyY1wiOlwiw5RcIixcIm9jaXJjXCI6XCLDtFwiLFwib2NpclwiOlwi4oqaXCIsXCJPY3lcIjpcItCeXCIsXCJvY3lcIjpcItC+XCIsXCJvZGFzaFwiOlwi4oqdXCIsXCJPZGJsYWNcIjpcIsWQXCIsXCJvZGJsYWNcIjpcIsWRXCIsXCJvZGl2XCI6XCLiqLhcIixcIm9kb3RcIjpcIuKKmVwiLFwib2Rzb2xkXCI6XCLiprxcIixcIk9FbGlnXCI6XCLFklwiLFwib2VsaWdcIjpcIsWTXCIsXCJvZmNpclwiOlwi4qa/XCIsXCJPZnJcIjpcIvCdlJJcIixcIm9mclwiOlwi8J2UrFwiLFwib2dvblwiOlwiy5tcIixcIk9ncmF2ZVwiOlwiw5JcIixcIm9ncmF2ZVwiOlwiw7JcIixcIm9ndFwiOlwi4qeBXCIsXCJvaGJhclwiOlwi4qa1XCIsXCJvaG1cIjpcIs6pXCIsXCJvaW50XCI6XCLiiK5cIixcIm9sYXJyXCI6XCLihrpcIixcIm9sY2lyXCI6XCLipr5cIixcIm9sY3Jvc3NcIjpcIuKmu1wiLFwib2xpbmVcIjpcIuKAvlwiLFwib2x0XCI6XCLip4BcIixcIk9tYWNyXCI6XCLFjFwiLFwib21hY3JcIjpcIsWNXCIsXCJPbWVnYVwiOlwizqlcIixcIm9tZWdhXCI6XCLPiVwiLFwiT21pY3JvblwiOlwizp9cIixcIm9taWNyb25cIjpcIs6/XCIsXCJvbWlkXCI6XCLiprZcIixcIm9taW51c1wiOlwi4oqWXCIsXCJPb3BmXCI6XCLwnZWGXCIsXCJvb3BmXCI6XCLwnZWgXCIsXCJvcGFyXCI6XCLiprdcIixcIk9wZW5DdXJseURvdWJsZVF1b3RlXCI6XCLigJxcIixcIk9wZW5DdXJseVF1b3RlXCI6XCLigJhcIixcIm9wZXJwXCI6XCLiprlcIixcIm9wbHVzXCI6XCLiipVcIixcIm9yYXJyXCI6XCLihrtcIixcIk9yXCI6XCLiqZRcIixcIm9yXCI6XCLiiKhcIixcIm9yZFwiOlwi4qmdXCIsXCJvcmRlclwiOlwi4oS0XCIsXCJvcmRlcm9mXCI6XCLihLRcIixcIm9yZGZcIjpcIsKqXCIsXCJvcmRtXCI6XCLCulwiLFwib3JpZ29mXCI6XCLiirZcIixcIm9yb3JcIjpcIuKpllwiLFwib3JzbG9wZVwiOlwi4qmXXCIsXCJvcnZcIjpcIuKpm1wiLFwib1NcIjpcIuKTiFwiLFwiT3NjclwiOlwi8J2SqlwiLFwib3NjclwiOlwi4oS0XCIsXCJPc2xhc2hcIjpcIsOYXCIsXCJvc2xhc2hcIjpcIsO4XCIsXCJvc29sXCI6XCLiiphcIixcIk90aWxkZVwiOlwiw5VcIixcIm90aWxkZVwiOlwiw7VcIixcIm90aW1lc2FzXCI6XCLiqLZcIixcIk90aW1lc1wiOlwi4qi3XCIsXCJvdGltZXNcIjpcIuKKl1wiLFwiT3VtbFwiOlwiw5ZcIixcIm91bWxcIjpcIsO2XCIsXCJvdmJhclwiOlwi4oy9XCIsXCJPdmVyQmFyXCI6XCLigL5cIixcIk92ZXJCcmFjZVwiOlwi4o+eXCIsXCJPdmVyQnJhY2tldFwiOlwi4o60XCIsXCJPdmVyUGFyZW50aGVzaXNcIjpcIuKPnFwiLFwicGFyYVwiOlwiwrZcIixcInBhcmFsbGVsXCI6XCLiiKVcIixcInBhclwiOlwi4oilXCIsXCJwYXJzaW1cIjpcIuKrs1wiLFwicGFyc2xcIjpcIuKrvVwiLFwicGFydFwiOlwi4oiCXCIsXCJQYXJ0aWFsRFwiOlwi4oiCXCIsXCJQY3lcIjpcItCfXCIsXCJwY3lcIjpcItC/XCIsXCJwZXJjbnRcIjpcIiVcIixcInBlcmlvZFwiOlwiLlwiLFwicGVybWlsXCI6XCLigLBcIixcInBlcnBcIjpcIuKKpVwiLFwicGVydGVua1wiOlwi4oCxXCIsXCJQZnJcIjpcIvCdlJNcIixcInBmclwiOlwi8J2UrVwiLFwiUGhpXCI6XCLOplwiLFwicGhpXCI6XCLPhlwiLFwicGhpdlwiOlwiz5VcIixcInBobW1hdFwiOlwi4oSzXCIsXCJwaG9uZVwiOlwi4piOXCIsXCJQaVwiOlwizqBcIixcInBpXCI6XCLPgFwiLFwicGl0Y2hmb3JrXCI6XCLii5RcIixcInBpdlwiOlwiz5ZcIixcInBsYW5ja1wiOlwi4oSPXCIsXCJwbGFuY2toXCI6XCLihI5cIixcInBsYW5rdlwiOlwi4oSPXCIsXCJwbHVzYWNpclwiOlwi4qijXCIsXCJwbHVzYlwiOlwi4oqeXCIsXCJwbHVzY2lyXCI6XCLiqKJcIixcInBsdXNcIjpcIitcIixcInBsdXNkb1wiOlwi4oiUXCIsXCJwbHVzZHVcIjpcIuKopVwiLFwicGx1c2VcIjpcIuKpslwiLFwiUGx1c01pbnVzXCI6XCLCsVwiLFwicGx1c21uXCI6XCLCsVwiLFwicGx1c3NpbVwiOlwi4qimXCIsXCJwbHVzdHdvXCI6XCLiqKdcIixcInBtXCI6XCLCsVwiLFwiUG9pbmNhcmVwbGFuZVwiOlwi4oSMXCIsXCJwb2ludGludFwiOlwi4qiVXCIsXCJwb3BmXCI6XCLwnZWhXCIsXCJQb3BmXCI6XCLihJlcIixcInBvdW5kXCI6XCLCo1wiLFwicHJhcFwiOlwi4qq3XCIsXCJQclwiOlwi4qq7XCIsXCJwclwiOlwi4om6XCIsXCJwcmN1ZVwiOlwi4om8XCIsXCJwcmVjYXBwcm94XCI6XCLiqrdcIixcInByZWNcIjpcIuKJulwiLFwicHJlY2N1cmx5ZXFcIjpcIuKJvFwiLFwiUHJlY2VkZXNcIjpcIuKJulwiLFwiUHJlY2VkZXNFcXVhbFwiOlwi4qqvXCIsXCJQcmVjZWRlc1NsYW50RXF1YWxcIjpcIuKJvFwiLFwiUHJlY2VkZXNUaWxkZVwiOlwi4om+XCIsXCJwcmVjZXFcIjpcIuKqr1wiLFwicHJlY25hcHByb3hcIjpcIuKquVwiLFwicHJlY25lcXFcIjpcIuKqtVwiLFwicHJlY25zaW1cIjpcIuKLqFwiLFwicHJlXCI6XCLiqq9cIixcInByRVwiOlwi4qqzXCIsXCJwcmVjc2ltXCI6XCLiib5cIixcInByaW1lXCI6XCLigLJcIixcIlByaW1lXCI6XCLigLNcIixcInByaW1lc1wiOlwi4oSZXCIsXCJwcm5hcFwiOlwi4qq5XCIsXCJwcm5FXCI6XCLiqrVcIixcInBybnNpbVwiOlwi4ouoXCIsXCJwcm9kXCI6XCLiiI9cIixcIlByb2R1Y3RcIjpcIuKIj1wiLFwicHJvZmFsYXJcIjpcIuKMrlwiLFwicHJvZmxpbmVcIjpcIuKMklwiLFwicHJvZnN1cmZcIjpcIuKMk1wiLFwicHJvcFwiOlwi4oidXCIsXCJQcm9wb3J0aW9uYWxcIjpcIuKInVwiLFwiUHJvcG9ydGlvblwiOlwi4oi3XCIsXCJwcm9wdG9cIjpcIuKInVwiLFwicHJzaW1cIjpcIuKJvlwiLFwicHJ1cmVsXCI6XCLiirBcIixcIlBzY3JcIjpcIvCdkqtcIixcInBzY3JcIjpcIvCdk4VcIixcIlBzaVwiOlwizqhcIixcInBzaVwiOlwiz4hcIixcInB1bmNzcFwiOlwi4oCIXCIsXCJRZnJcIjpcIvCdlJRcIixcInFmclwiOlwi8J2UrlwiLFwicWludFwiOlwi4qiMXCIsXCJxb3BmXCI6XCLwnZWiXCIsXCJRb3BmXCI6XCLihJpcIixcInFwcmltZVwiOlwi4oGXXCIsXCJRc2NyXCI6XCLwnZKsXCIsXCJxc2NyXCI6XCLwnZOGXCIsXCJxdWF0ZXJuaW9uc1wiOlwi4oSNXCIsXCJxdWF0aW50XCI6XCLiqJZcIixcInF1ZXN0XCI6XCI/XCIsXCJxdWVzdGVxXCI6XCLiiZ9cIixcInF1b3RcIjpcIlxcXCJcIixcIlFVT1RcIjpcIlxcXCJcIixcInJBYXJyXCI6XCLih5tcIixcInJhY2VcIjpcIuKIvcyxXCIsXCJSYWN1dGVcIjpcIsWUXCIsXCJyYWN1dGVcIjpcIsWVXCIsXCJyYWRpY1wiOlwi4oiaXCIsXCJyYWVtcHR5dlwiOlwi4qazXCIsXCJyYW5nXCI6XCLin6lcIixcIlJhbmdcIjpcIuKfq1wiLFwicmFuZ2RcIjpcIuKmklwiLFwicmFuZ2VcIjpcIuKmpVwiLFwicmFuZ2xlXCI6XCLin6lcIixcInJhcXVvXCI6XCLCu1wiLFwicmFycmFwXCI6XCLipbVcIixcInJhcnJiXCI6XCLih6VcIixcInJhcnJiZnNcIjpcIuKkoFwiLFwicmFycmNcIjpcIuKks1wiLFwicmFyclwiOlwi4oaSXCIsXCJSYXJyXCI6XCLihqBcIixcInJBcnJcIjpcIuKHklwiLFwicmFycmZzXCI6XCLipJ5cIixcInJhcnJoa1wiOlwi4oaqXCIsXCJyYXJybHBcIjpcIuKGrFwiLFwicmFycnBsXCI6XCLipYVcIixcInJhcnJzaW1cIjpcIuKltFwiLFwiUmFycnRsXCI6XCLipJZcIixcInJhcnJ0bFwiOlwi4oajXCIsXCJyYXJyd1wiOlwi4oadXCIsXCJyYXRhaWxcIjpcIuKkmlwiLFwickF0YWlsXCI6XCLipJxcIixcInJhdGlvXCI6XCLiiLZcIixcInJhdGlvbmFsc1wiOlwi4oSaXCIsXCJyYmFyclwiOlwi4qSNXCIsXCJyQmFyclwiOlwi4qSPXCIsXCJSQmFyclwiOlwi4qSQXCIsXCJyYmJya1wiOlwi4p2zXCIsXCJyYnJhY2VcIjpcIn1cIixcInJicmFja1wiOlwiXVwiLFwicmJya2VcIjpcIuKmjFwiLFwicmJya3NsZFwiOlwi4qaOXCIsXCJyYnJrc2x1XCI6XCLippBcIixcIlJjYXJvblwiOlwixZhcIixcInJjYXJvblwiOlwixZlcIixcIlJjZWRpbFwiOlwixZZcIixcInJjZWRpbFwiOlwixZdcIixcInJjZWlsXCI6XCLijIlcIixcInJjdWJcIjpcIn1cIixcIlJjeVwiOlwi0KBcIixcInJjeVwiOlwi0YBcIixcInJkY2FcIjpcIuKkt1wiLFwicmRsZGhhclwiOlwi4qWpXCIsXCJyZHF1b1wiOlwi4oCdXCIsXCJyZHF1b3JcIjpcIuKAnVwiLFwicmRzaFwiOlwi4oazXCIsXCJyZWFsXCI6XCLihJxcIixcInJlYWxpbmVcIjpcIuKEm1wiLFwicmVhbHBhcnRcIjpcIuKEnFwiLFwicmVhbHNcIjpcIuKEnVwiLFwiUmVcIjpcIuKEnFwiLFwicmVjdFwiOlwi4patXCIsXCJyZWdcIjpcIsKuXCIsXCJSRUdcIjpcIsKuXCIsXCJSZXZlcnNlRWxlbWVudFwiOlwi4oiLXCIsXCJSZXZlcnNlRXF1aWxpYnJpdW1cIjpcIuKHi1wiLFwiUmV2ZXJzZVVwRXF1aWxpYnJpdW1cIjpcIuKlr1wiLFwicmZpc2h0XCI6XCLipb1cIixcInJmbG9vclwiOlwi4oyLXCIsXCJyZnJcIjpcIvCdlK9cIixcIlJmclwiOlwi4oScXCIsXCJySGFyXCI6XCLipaRcIixcInJoYXJkXCI6XCLih4FcIixcInJoYXJ1XCI6XCLih4BcIixcInJoYXJ1bFwiOlwi4qWsXCIsXCJSaG9cIjpcIs6hXCIsXCJyaG9cIjpcIs+BXCIsXCJyaG92XCI6XCLPsVwiLFwiUmlnaHRBbmdsZUJyYWNrZXRcIjpcIuKfqVwiLFwiUmlnaHRBcnJvd0JhclwiOlwi4oelXCIsXCJyaWdodGFycm93XCI6XCLihpJcIixcIlJpZ2h0QXJyb3dcIjpcIuKGklwiLFwiUmlnaHRhcnJvd1wiOlwi4oeSXCIsXCJSaWdodEFycm93TGVmdEFycm93XCI6XCLih4RcIixcInJpZ2h0YXJyb3d0YWlsXCI6XCLihqNcIixcIlJpZ2h0Q2VpbGluZ1wiOlwi4oyJXCIsXCJSaWdodERvdWJsZUJyYWNrZXRcIjpcIuKfp1wiLFwiUmlnaHREb3duVGVlVmVjdG9yXCI6XCLipZ1cIixcIlJpZ2h0RG93blZlY3RvckJhclwiOlwi4qWVXCIsXCJSaWdodERvd25WZWN0b3JcIjpcIuKHglwiLFwiUmlnaHRGbG9vclwiOlwi4oyLXCIsXCJyaWdodGhhcnBvb25kb3duXCI6XCLih4FcIixcInJpZ2h0aGFycG9vbnVwXCI6XCLih4BcIixcInJpZ2h0bGVmdGFycm93c1wiOlwi4oeEXCIsXCJyaWdodGxlZnRoYXJwb29uc1wiOlwi4oeMXCIsXCJyaWdodHJpZ2h0YXJyb3dzXCI6XCLih4lcIixcInJpZ2h0c3F1aWdhcnJvd1wiOlwi4oadXCIsXCJSaWdodFRlZUFycm93XCI6XCLihqZcIixcIlJpZ2h0VGVlXCI6XCLiiqJcIixcIlJpZ2h0VGVlVmVjdG9yXCI6XCLipZtcIixcInJpZ2h0dGhyZWV0aW1lc1wiOlwi4ouMXCIsXCJSaWdodFRyaWFuZ2xlQmFyXCI6XCLip5BcIixcIlJpZ2h0VHJpYW5nbGVcIjpcIuKKs1wiLFwiUmlnaHRUcmlhbmdsZUVxdWFsXCI6XCLiirVcIixcIlJpZ2h0VXBEb3duVmVjdG9yXCI6XCLipY9cIixcIlJpZ2h0VXBUZWVWZWN0b3JcIjpcIuKlnFwiLFwiUmlnaHRVcFZlY3RvckJhclwiOlwi4qWUXCIsXCJSaWdodFVwVmVjdG9yXCI6XCLihr5cIixcIlJpZ2h0VmVjdG9yQmFyXCI6XCLipZNcIixcIlJpZ2h0VmVjdG9yXCI6XCLih4BcIixcInJpbmdcIjpcIsuaXCIsXCJyaXNpbmdkb3RzZXFcIjpcIuKJk1wiLFwicmxhcnJcIjpcIuKHhFwiLFwicmxoYXJcIjpcIuKHjFwiLFwicmxtXCI6XCLigI9cIixcInJtb3VzdGFjaGVcIjpcIuKOsVwiLFwicm1vdXN0XCI6XCLijrFcIixcInJubWlkXCI6XCLiq65cIixcInJvYW5nXCI6XCLin61cIixcInJvYXJyXCI6XCLih75cIixcInJvYnJrXCI6XCLin6dcIixcInJvcGFyXCI6XCLipoZcIixcInJvcGZcIjpcIvCdlaNcIixcIlJvcGZcIjpcIuKEnVwiLFwicm9wbHVzXCI6XCLiqK5cIixcInJvdGltZXNcIjpcIuKotVwiLFwiUm91bmRJbXBsaWVzXCI6XCLipbBcIixcInJwYXJcIjpcIilcIixcInJwYXJndFwiOlwi4qaUXCIsXCJycHBvbGludFwiOlwi4qiSXCIsXCJycmFyclwiOlwi4oeJXCIsXCJScmlnaHRhcnJvd1wiOlwi4oebXCIsXCJyc2FxdW9cIjpcIuKAulwiLFwicnNjclwiOlwi8J2Th1wiLFwiUnNjclwiOlwi4oSbXCIsXCJyc2hcIjpcIuKGsVwiLFwiUnNoXCI6XCLihrFcIixcInJzcWJcIjpcIl1cIixcInJzcXVvXCI6XCLigJlcIixcInJzcXVvclwiOlwi4oCZXCIsXCJydGhyZWVcIjpcIuKLjFwiLFwicnRpbWVzXCI6XCLii4pcIixcInJ0cmlcIjpcIuKWuVwiLFwicnRyaWVcIjpcIuKKtVwiLFwicnRyaWZcIjpcIuKWuFwiLFwicnRyaWx0cmlcIjpcIuKnjlwiLFwiUnVsZURlbGF5ZWRcIjpcIuKntFwiLFwicnVsdWhhclwiOlwi4qWoXCIsXCJyeFwiOlwi4oSeXCIsXCJTYWN1dGVcIjpcIsWaXCIsXCJzYWN1dGVcIjpcIsWbXCIsXCJzYnF1b1wiOlwi4oCaXCIsXCJzY2FwXCI6XCLiqrhcIixcIlNjYXJvblwiOlwixaBcIixcInNjYXJvblwiOlwixaFcIixcIlNjXCI6XCLiqrxcIixcInNjXCI6XCLiibtcIixcInNjY3VlXCI6XCLiib1cIixcInNjZVwiOlwi4qqwXCIsXCJzY0VcIjpcIuKqtFwiLFwiU2NlZGlsXCI6XCLFnlwiLFwic2NlZGlsXCI6XCLFn1wiLFwiU2NpcmNcIjpcIsWcXCIsXCJzY2lyY1wiOlwixZ1cIixcInNjbmFwXCI6XCLiqrpcIixcInNjbkVcIjpcIuKqtlwiLFwic2Nuc2ltXCI6XCLii6lcIixcInNjcG9saW50XCI6XCLiqJNcIixcInNjc2ltXCI6XCLiib9cIixcIlNjeVwiOlwi0KFcIixcInNjeVwiOlwi0YFcIixcInNkb3RiXCI6XCLiiqFcIixcInNkb3RcIjpcIuKLhVwiLFwic2RvdGVcIjpcIuKpplwiLFwic2VhcmhrXCI6XCLipKVcIixcInNlYXJyXCI6XCLihphcIixcInNlQXJyXCI6XCLih5hcIixcInNlYXJyb3dcIjpcIuKGmFwiLFwic2VjdFwiOlwiwqdcIixcInNlbWlcIjpcIjtcIixcInNlc3dhclwiOlwi4qSpXCIsXCJzZXRtaW51c1wiOlwi4oiWXCIsXCJzZXRtblwiOlwi4oiWXCIsXCJzZXh0XCI6XCLinLZcIixcIlNmclwiOlwi8J2UllwiLFwic2ZyXCI6XCLwnZSwXCIsXCJzZnJvd25cIjpcIuKMolwiLFwic2hhcnBcIjpcIuKZr1wiLFwiU0hDSGN5XCI6XCLQqVwiLFwic2hjaGN5XCI6XCLRiVwiLFwiU0hjeVwiOlwi0KhcIixcInNoY3lcIjpcItGIXCIsXCJTaG9ydERvd25BcnJvd1wiOlwi4oaTXCIsXCJTaG9ydExlZnRBcnJvd1wiOlwi4oaQXCIsXCJzaG9ydG1pZFwiOlwi4oijXCIsXCJzaG9ydHBhcmFsbGVsXCI6XCLiiKVcIixcIlNob3J0UmlnaHRBcnJvd1wiOlwi4oaSXCIsXCJTaG9ydFVwQXJyb3dcIjpcIuKGkVwiLFwic2h5XCI6XCLCrVwiLFwiU2lnbWFcIjpcIs6jXCIsXCJzaWdtYVwiOlwiz4NcIixcInNpZ21hZlwiOlwiz4JcIixcInNpZ21hdlwiOlwiz4JcIixcInNpbVwiOlwi4oi8XCIsXCJzaW1kb3RcIjpcIuKpqlwiLFwic2ltZVwiOlwi4omDXCIsXCJzaW1lcVwiOlwi4omDXCIsXCJzaW1nXCI6XCLiqp5cIixcInNpbWdFXCI6XCLiqqBcIixcInNpbWxcIjpcIuKqnVwiLFwic2ltbEVcIjpcIuKqn1wiLFwic2ltbmVcIjpcIuKJhlwiLFwic2ltcGx1c1wiOlwi4qikXCIsXCJzaW1yYXJyXCI6XCLipbJcIixcInNsYXJyXCI6XCLihpBcIixcIlNtYWxsQ2lyY2xlXCI6XCLiiJhcIixcInNtYWxsc2V0bWludXNcIjpcIuKIllwiLFwic21hc2hwXCI6XCLiqLNcIixcInNtZXBhcnNsXCI6XCLip6RcIixcInNtaWRcIjpcIuKIo1wiLFwic21pbGVcIjpcIuKMo1wiLFwic210XCI6XCLiqqpcIixcInNtdGVcIjpcIuKqrFwiLFwic210ZXNcIjpcIuKqrO+4gFwiLFwiU09GVGN5XCI6XCLQrFwiLFwic29mdGN5XCI6XCLRjFwiLFwic29sYmFyXCI6XCLijL9cIixcInNvbGJcIjpcIuKnhFwiLFwic29sXCI6XCIvXCIsXCJTb3BmXCI6XCLwnZWKXCIsXCJzb3BmXCI6XCLwnZWkXCIsXCJzcGFkZXNcIjpcIuKZoFwiLFwic3BhZGVzdWl0XCI6XCLimaBcIixcInNwYXJcIjpcIuKIpVwiLFwic3FjYXBcIjpcIuKKk1wiLFwic3FjYXBzXCI6XCLiipPvuIBcIixcInNxY3VwXCI6XCLiipRcIixcInNxY3Vwc1wiOlwi4oqU77iAXCIsXCJTcXJ0XCI6XCLiiJpcIixcInNxc3ViXCI6XCLiio9cIixcInNxc3ViZVwiOlwi4oqRXCIsXCJzcXN1YnNldFwiOlwi4oqPXCIsXCJzcXN1YnNldGVxXCI6XCLiipFcIixcInNxc3VwXCI6XCLiipBcIixcInNxc3VwZVwiOlwi4oqSXCIsXCJzcXN1cHNldFwiOlwi4oqQXCIsXCJzcXN1cHNldGVxXCI6XCLiipJcIixcInNxdWFyZVwiOlwi4pahXCIsXCJTcXVhcmVcIjpcIuKWoVwiLFwiU3F1YXJlSW50ZXJzZWN0aW9uXCI6XCLiipNcIixcIlNxdWFyZVN1YnNldFwiOlwi4oqPXCIsXCJTcXVhcmVTdWJzZXRFcXVhbFwiOlwi4oqRXCIsXCJTcXVhcmVTdXBlcnNldFwiOlwi4oqQXCIsXCJTcXVhcmVTdXBlcnNldEVxdWFsXCI6XCLiipJcIixcIlNxdWFyZVVuaW9uXCI6XCLiipRcIixcInNxdWFyZlwiOlwi4paqXCIsXCJzcXVcIjpcIuKWoVwiLFwic3F1ZlwiOlwi4paqXCIsXCJzcmFyclwiOlwi4oaSXCIsXCJTc2NyXCI6XCLwnZKuXCIsXCJzc2NyXCI6XCLwnZOIXCIsXCJzc2V0bW5cIjpcIuKIllwiLFwic3NtaWxlXCI6XCLijKNcIixcInNzdGFyZlwiOlwi4ouGXCIsXCJTdGFyXCI6XCLii4ZcIixcInN0YXJcIjpcIuKYhlwiLFwic3RhcmZcIjpcIuKYhVwiLFwic3RyYWlnaHRlcHNpbG9uXCI6XCLPtVwiLFwic3RyYWlnaHRwaGlcIjpcIs+VXCIsXCJzdHJuc1wiOlwiwq9cIixcInN1YlwiOlwi4oqCXCIsXCJTdWJcIjpcIuKLkFwiLFwic3ViZG90XCI6XCLiqr1cIixcInN1YkVcIjpcIuKrhVwiLFwic3ViZVwiOlwi4oqGXCIsXCJzdWJlZG90XCI6XCLiq4NcIixcInN1Ym11bHRcIjpcIuKrgVwiLFwic3VibkVcIjpcIuKri1wiLFwic3VibmVcIjpcIuKKilwiLFwic3VicGx1c1wiOlwi4qq/XCIsXCJzdWJyYXJyXCI6XCLipblcIixcInN1YnNldFwiOlwi4oqCXCIsXCJTdWJzZXRcIjpcIuKLkFwiLFwic3Vic2V0ZXFcIjpcIuKKhlwiLFwic3Vic2V0ZXFxXCI6XCLiq4VcIixcIlN1YnNldEVxdWFsXCI6XCLiioZcIixcInN1YnNldG5lcVwiOlwi4oqKXCIsXCJzdWJzZXRuZXFxXCI6XCLiq4tcIixcInN1YnNpbVwiOlwi4quHXCIsXCJzdWJzdWJcIjpcIuKrlVwiLFwic3Vic3VwXCI6XCLiq5NcIixcInN1Y2NhcHByb3hcIjpcIuKquFwiLFwic3VjY1wiOlwi4om7XCIsXCJzdWNjY3VybHllcVwiOlwi4om9XCIsXCJTdWNjZWVkc1wiOlwi4om7XCIsXCJTdWNjZWVkc0VxdWFsXCI6XCLiqrBcIixcIlN1Y2NlZWRzU2xhbnRFcXVhbFwiOlwi4om9XCIsXCJTdWNjZWVkc1RpbGRlXCI6XCLiib9cIixcInN1Y2NlcVwiOlwi4qqwXCIsXCJzdWNjbmFwcHJveFwiOlwi4qq6XCIsXCJzdWNjbmVxcVwiOlwi4qq2XCIsXCJzdWNjbnNpbVwiOlwi4oupXCIsXCJzdWNjc2ltXCI6XCLiib9cIixcIlN1Y2hUaGF0XCI6XCLiiItcIixcInN1bVwiOlwi4oiRXCIsXCJTdW1cIjpcIuKIkVwiLFwic3VuZ1wiOlwi4pmqXCIsXCJzdXAxXCI6XCLCuVwiLFwic3VwMlwiOlwiwrJcIixcInN1cDNcIjpcIsKzXCIsXCJzdXBcIjpcIuKKg1wiLFwiU3VwXCI6XCLii5FcIixcInN1cGRvdFwiOlwi4qq+XCIsXCJzdXBkc3ViXCI6XCLiq5hcIixcInN1cEVcIjpcIuKrhlwiLFwic3VwZVwiOlwi4oqHXCIsXCJzdXBlZG90XCI6XCLiq4RcIixcIlN1cGVyc2V0XCI6XCLiioNcIixcIlN1cGVyc2V0RXF1YWxcIjpcIuKKh1wiLFwic3VwaHNvbFwiOlwi4p+JXCIsXCJzdXBoc3ViXCI6XCLiq5dcIixcInN1cGxhcnJcIjpcIuKlu1wiLFwic3VwbXVsdFwiOlwi4quCXCIsXCJzdXBuRVwiOlwi4quMXCIsXCJzdXBuZVwiOlwi4oqLXCIsXCJzdXBwbHVzXCI6XCLiq4BcIixcInN1cHNldFwiOlwi4oqDXCIsXCJTdXBzZXRcIjpcIuKLkVwiLFwic3Vwc2V0ZXFcIjpcIuKKh1wiLFwic3Vwc2V0ZXFxXCI6XCLiq4ZcIixcInN1cHNldG5lcVwiOlwi4oqLXCIsXCJzdXBzZXRuZXFxXCI6XCLiq4xcIixcInN1cHNpbVwiOlwi4quIXCIsXCJzdXBzdWJcIjpcIuKrlFwiLFwic3Vwc3VwXCI6XCLiq5ZcIixcInN3YXJoa1wiOlwi4qSmXCIsXCJzd2FyclwiOlwi4oaZXCIsXCJzd0FyclwiOlwi4oeZXCIsXCJzd2Fycm93XCI6XCLihplcIixcInN3bndhclwiOlwi4qSqXCIsXCJzemxpZ1wiOlwiw59cIixcIlRhYlwiOlwiXFx0XCIsXCJ0YXJnZXRcIjpcIuKMllwiLFwiVGF1XCI6XCLOpFwiLFwidGF1XCI6XCLPhFwiLFwidGJya1wiOlwi4o60XCIsXCJUY2Fyb25cIjpcIsWkXCIsXCJ0Y2Fyb25cIjpcIsWlXCIsXCJUY2VkaWxcIjpcIsWiXCIsXCJ0Y2VkaWxcIjpcIsWjXCIsXCJUY3lcIjpcItCiXCIsXCJ0Y3lcIjpcItGCXCIsXCJ0ZG90XCI6XCLig5tcIixcInRlbHJlY1wiOlwi4oyVXCIsXCJUZnJcIjpcIvCdlJdcIixcInRmclwiOlwi8J2UsVwiLFwidGhlcmU0XCI6XCLiiLRcIixcInRoZXJlZm9yZVwiOlwi4oi0XCIsXCJUaGVyZWZvcmVcIjpcIuKItFwiLFwiVGhldGFcIjpcIs6YXCIsXCJ0aGV0YVwiOlwizrhcIixcInRoZXRhc3ltXCI6XCLPkVwiLFwidGhldGF2XCI6XCLPkVwiLFwidGhpY2thcHByb3hcIjpcIuKJiFwiLFwidGhpY2tzaW1cIjpcIuKIvFwiLFwiVGhpY2tTcGFjZVwiOlwi4oGf4oCKXCIsXCJUaGluU3BhY2VcIjpcIuKAiVwiLFwidGhpbnNwXCI6XCLigIlcIixcInRoa2FwXCI6XCLiiYhcIixcInRoa3NpbVwiOlwi4oi8XCIsXCJUSE9STlwiOlwiw55cIixcInRob3JuXCI6XCLDvlwiLFwidGlsZGVcIjpcIsucXCIsXCJUaWxkZVwiOlwi4oi8XCIsXCJUaWxkZUVxdWFsXCI6XCLiiYNcIixcIlRpbGRlRnVsbEVxdWFsXCI6XCLiiYVcIixcIlRpbGRlVGlsZGVcIjpcIuKJiFwiLFwidGltZXNiYXJcIjpcIuKosVwiLFwidGltZXNiXCI6XCLiiqBcIixcInRpbWVzXCI6XCLDl1wiLFwidGltZXNkXCI6XCLiqLBcIixcInRpbnRcIjpcIuKIrVwiLFwidG9lYVwiOlwi4qSoXCIsXCJ0b3Bib3RcIjpcIuKMtlwiLFwidG9wY2lyXCI6XCLiq7FcIixcInRvcFwiOlwi4oqkXCIsXCJUb3BmXCI6XCLwnZWLXCIsXCJ0b3BmXCI6XCLwnZWlXCIsXCJ0b3Bmb3JrXCI6XCLiq5pcIixcInRvc2FcIjpcIuKkqVwiLFwidHByaW1lXCI6XCLigLRcIixcInRyYWRlXCI6XCLihKJcIixcIlRSQURFXCI6XCLihKJcIixcInRyaWFuZ2xlXCI6XCLilrVcIixcInRyaWFuZ2xlZG93blwiOlwi4pa/XCIsXCJ0cmlhbmdsZWxlZnRcIjpcIuKXg1wiLFwidHJpYW5nbGVsZWZ0ZXFcIjpcIuKKtFwiLFwidHJpYW5nbGVxXCI6XCLiiZxcIixcInRyaWFuZ2xlcmlnaHRcIjpcIuKWuVwiLFwidHJpYW5nbGVyaWdodGVxXCI6XCLiirVcIixcInRyaWRvdFwiOlwi4pesXCIsXCJ0cmllXCI6XCLiiZxcIixcInRyaW1pbnVzXCI6XCLiqLpcIixcIlRyaXBsZURvdFwiOlwi4oObXCIsXCJ0cmlwbHVzXCI6XCLiqLlcIixcInRyaXNiXCI6XCLip41cIixcInRyaXRpbWVcIjpcIuKou1wiLFwidHJwZXppdW1cIjpcIuKPolwiLFwiVHNjclwiOlwi8J2Sr1wiLFwidHNjclwiOlwi8J2TiVwiLFwiVFNjeVwiOlwi0KZcIixcInRzY3lcIjpcItGGXCIsXCJUU0hjeVwiOlwi0ItcIixcInRzaGN5XCI6XCLRm1wiLFwiVHN0cm9rXCI6XCLFplwiLFwidHN0cm9rXCI6XCLFp1wiLFwidHdpeHRcIjpcIuKJrFwiLFwidHdvaGVhZGxlZnRhcnJvd1wiOlwi4oaeXCIsXCJ0d29oZWFkcmlnaHRhcnJvd1wiOlwi4oagXCIsXCJVYWN1dGVcIjpcIsOaXCIsXCJ1YWN1dGVcIjpcIsO6XCIsXCJ1YXJyXCI6XCLihpFcIixcIlVhcnJcIjpcIuKGn1wiLFwidUFyclwiOlwi4oeRXCIsXCJVYXJyb2NpclwiOlwi4qWJXCIsXCJVYnJjeVwiOlwi0I5cIixcInVicmN5XCI6XCLRnlwiLFwiVWJyZXZlXCI6XCLFrFwiLFwidWJyZXZlXCI6XCLFrVwiLFwiVWNpcmNcIjpcIsObXCIsXCJ1Y2lyY1wiOlwiw7tcIixcIlVjeVwiOlwi0KNcIixcInVjeVwiOlwi0YNcIixcInVkYXJyXCI6XCLih4VcIixcIlVkYmxhY1wiOlwixbBcIixcInVkYmxhY1wiOlwixbFcIixcInVkaGFyXCI6XCLipa5cIixcInVmaXNodFwiOlwi4qW+XCIsXCJVZnJcIjpcIvCdlJhcIixcInVmclwiOlwi8J2UslwiLFwiVWdyYXZlXCI6XCLDmVwiLFwidWdyYXZlXCI6XCLDuVwiLFwidUhhclwiOlwi4qWjXCIsXCJ1aGFybFwiOlwi4oa/XCIsXCJ1aGFyclwiOlwi4oa+XCIsXCJ1aGJsa1wiOlwi4paAXCIsXCJ1bGNvcm5cIjpcIuKMnFwiLFwidWxjb3JuZXJcIjpcIuKMnFwiLFwidWxjcm9wXCI6XCLijI9cIixcInVsdHJpXCI6XCLil7hcIixcIlVtYWNyXCI6XCLFqlwiLFwidW1hY3JcIjpcIsWrXCIsXCJ1bWxcIjpcIsKoXCIsXCJVbmRlckJhclwiOlwiX1wiLFwiVW5kZXJCcmFjZVwiOlwi4o+fXCIsXCJVbmRlckJyYWNrZXRcIjpcIuKOtVwiLFwiVW5kZXJQYXJlbnRoZXNpc1wiOlwi4o+dXCIsXCJVbmlvblwiOlwi4ouDXCIsXCJVbmlvblBsdXNcIjpcIuKKjlwiLFwiVW9nb25cIjpcIsWyXCIsXCJ1b2dvblwiOlwixbNcIixcIlVvcGZcIjpcIvCdlYxcIixcInVvcGZcIjpcIvCdlaZcIixcIlVwQXJyb3dCYXJcIjpcIuKkklwiLFwidXBhcnJvd1wiOlwi4oaRXCIsXCJVcEFycm93XCI6XCLihpFcIixcIlVwYXJyb3dcIjpcIuKHkVwiLFwiVXBBcnJvd0Rvd25BcnJvd1wiOlwi4oeFXCIsXCJ1cGRvd25hcnJvd1wiOlwi4oaVXCIsXCJVcERvd25BcnJvd1wiOlwi4oaVXCIsXCJVcGRvd25hcnJvd1wiOlwi4oeVXCIsXCJVcEVxdWlsaWJyaXVtXCI6XCLipa5cIixcInVwaGFycG9vbmxlZnRcIjpcIuKGv1wiLFwidXBoYXJwb29ucmlnaHRcIjpcIuKGvlwiLFwidXBsdXNcIjpcIuKKjlwiLFwiVXBwZXJMZWZ0QXJyb3dcIjpcIuKGllwiLFwiVXBwZXJSaWdodEFycm93XCI6XCLihpdcIixcInVwc2lcIjpcIs+FXCIsXCJVcHNpXCI6XCLPklwiLFwidXBzaWhcIjpcIs+SXCIsXCJVcHNpbG9uXCI6XCLOpVwiLFwidXBzaWxvblwiOlwiz4VcIixcIlVwVGVlQXJyb3dcIjpcIuKGpVwiLFwiVXBUZWVcIjpcIuKKpVwiLFwidXB1cGFycm93c1wiOlwi4oeIXCIsXCJ1cmNvcm5cIjpcIuKMnVwiLFwidXJjb3JuZXJcIjpcIuKMnVwiLFwidXJjcm9wXCI6XCLijI5cIixcIlVyaW5nXCI6XCLFrlwiLFwidXJpbmdcIjpcIsWvXCIsXCJ1cnRyaVwiOlwi4pe5XCIsXCJVc2NyXCI6XCLwnZKwXCIsXCJ1c2NyXCI6XCLwnZOKXCIsXCJ1dGRvdFwiOlwi4ouwXCIsXCJVdGlsZGVcIjpcIsWoXCIsXCJ1dGlsZGVcIjpcIsWpXCIsXCJ1dHJpXCI6XCLilrVcIixcInV0cmlmXCI6XCLilrRcIixcInV1YXJyXCI6XCLih4hcIixcIlV1bWxcIjpcIsOcXCIsXCJ1dW1sXCI6XCLDvFwiLFwidXdhbmdsZVwiOlwi4qanXCIsXCJ2YW5ncnRcIjpcIuKmnFwiLFwidmFyZXBzaWxvblwiOlwiz7VcIixcInZhcmthcHBhXCI6XCLPsFwiLFwidmFybm90aGluZ1wiOlwi4oiFXCIsXCJ2YXJwaGlcIjpcIs+VXCIsXCJ2YXJwaVwiOlwiz5ZcIixcInZhcnByb3B0b1wiOlwi4oidXCIsXCJ2YXJyXCI6XCLihpVcIixcInZBcnJcIjpcIuKHlVwiLFwidmFycmhvXCI6XCLPsVwiLFwidmFyc2lnbWFcIjpcIs+CXCIsXCJ2YXJzdWJzZXRuZXFcIjpcIuKKiu+4gFwiLFwidmFyc3Vic2V0bmVxcVwiOlwi4quL77iAXCIsXCJ2YXJzdXBzZXRuZXFcIjpcIuKKi++4gFwiLFwidmFyc3Vwc2V0bmVxcVwiOlwi4quM77iAXCIsXCJ2YXJ0aGV0YVwiOlwiz5FcIixcInZhcnRyaWFuZ2xlbGVmdFwiOlwi4oqyXCIsXCJ2YXJ0cmlhbmdsZXJpZ2h0XCI6XCLiirNcIixcInZCYXJcIjpcIuKrqFwiLFwiVmJhclwiOlwi4qurXCIsXCJ2QmFydlwiOlwi4qupXCIsXCJWY3lcIjpcItCSXCIsXCJ2Y3lcIjpcItCyXCIsXCJ2ZGFzaFwiOlwi4oqiXCIsXCJ2RGFzaFwiOlwi4oqoXCIsXCJWZGFzaFwiOlwi4oqpXCIsXCJWRGFzaFwiOlwi4oqrXCIsXCJWZGFzaGxcIjpcIuKrplwiLFwidmVlYmFyXCI6XCLiirtcIixcInZlZVwiOlwi4oioXCIsXCJWZWVcIjpcIuKLgVwiLFwidmVlZXFcIjpcIuKJmlwiLFwidmVsbGlwXCI6XCLii65cIixcInZlcmJhclwiOlwifFwiLFwiVmVyYmFyXCI6XCLigJZcIixcInZlcnRcIjpcInxcIixcIlZlcnRcIjpcIuKAllwiLFwiVmVydGljYWxCYXJcIjpcIuKIo1wiLFwiVmVydGljYWxMaW5lXCI6XCJ8XCIsXCJWZXJ0aWNhbFNlcGFyYXRvclwiOlwi4p2YXCIsXCJWZXJ0aWNhbFRpbGRlXCI6XCLiiYBcIixcIlZlcnlUaGluU3BhY2VcIjpcIuKAilwiLFwiVmZyXCI6XCLwnZSZXCIsXCJ2ZnJcIjpcIvCdlLNcIixcInZsdHJpXCI6XCLiirJcIixcInZuc3ViXCI6XCLiioLig5JcIixcInZuc3VwXCI6XCLiioPig5JcIixcIlZvcGZcIjpcIvCdlY1cIixcInZvcGZcIjpcIvCdladcIixcInZwcm9wXCI6XCLiiJ1cIixcInZydHJpXCI6XCLiirNcIixcIlZzY3JcIjpcIvCdkrFcIixcInZzY3JcIjpcIvCdk4tcIixcInZzdWJuRVwiOlwi4quL77iAXCIsXCJ2c3VibmVcIjpcIuKKiu+4gFwiLFwidnN1cG5FXCI6XCLiq4zvuIBcIixcInZzdXBuZVwiOlwi4oqL77iAXCIsXCJWdmRhc2hcIjpcIuKKqlwiLFwidnppZ3phZ1wiOlwi4qaaXCIsXCJXY2lyY1wiOlwixbRcIixcIndjaXJjXCI6XCLFtVwiLFwid2VkYmFyXCI6XCLiqZ9cIixcIndlZGdlXCI6XCLiiKdcIixcIldlZGdlXCI6XCLii4BcIixcIndlZGdlcVwiOlwi4omZXCIsXCJ3ZWllcnBcIjpcIuKEmFwiLFwiV2ZyXCI6XCLwnZSaXCIsXCJ3ZnJcIjpcIvCdlLRcIixcIldvcGZcIjpcIvCdlY5cIixcIndvcGZcIjpcIvCdlahcIixcIndwXCI6XCLihJhcIixcIndyXCI6XCLiiYBcIixcIndyZWF0aFwiOlwi4omAXCIsXCJXc2NyXCI6XCLwnZKyXCIsXCJ3c2NyXCI6XCLwnZOMXCIsXCJ4Y2FwXCI6XCLii4JcIixcInhjaXJjXCI6XCLil69cIixcInhjdXBcIjpcIuKLg1wiLFwieGR0cmlcIjpcIuKWvVwiLFwiWGZyXCI6XCLwnZSbXCIsXCJ4ZnJcIjpcIvCdlLVcIixcInhoYXJyXCI6XCLin7dcIixcInhoQXJyXCI6XCLin7pcIixcIlhpXCI6XCLOnlwiLFwieGlcIjpcIs6+XCIsXCJ4bGFyclwiOlwi4p+1XCIsXCJ4bEFyclwiOlwi4p+4XCIsXCJ4bWFwXCI6XCLin7xcIixcInhuaXNcIjpcIuKLu1wiLFwieG9kb3RcIjpcIuKogFwiLFwiWG9wZlwiOlwi8J2Vj1wiLFwieG9wZlwiOlwi8J2VqVwiLFwieG9wbHVzXCI6XCLiqIFcIixcInhvdGltZVwiOlwi4qiCXCIsXCJ4cmFyclwiOlwi4p+2XCIsXCJ4ckFyclwiOlwi4p+5XCIsXCJYc2NyXCI6XCLwnZKzXCIsXCJ4c2NyXCI6XCLwnZONXCIsXCJ4c3FjdXBcIjpcIuKohlwiLFwieHVwbHVzXCI6XCLiqIRcIixcInh1dHJpXCI6XCLilrNcIixcInh2ZWVcIjpcIuKLgVwiLFwieHdlZGdlXCI6XCLii4BcIixcIllhY3V0ZVwiOlwiw51cIixcInlhY3V0ZVwiOlwiw71cIixcIllBY3lcIjpcItCvXCIsXCJ5YWN5XCI6XCLRj1wiLFwiWWNpcmNcIjpcIsW2XCIsXCJ5Y2lyY1wiOlwixbdcIixcIlljeVwiOlwi0KtcIixcInljeVwiOlwi0YtcIixcInllblwiOlwiwqVcIixcIllmclwiOlwi8J2UnFwiLFwieWZyXCI6XCLwnZS2XCIsXCJZSWN5XCI6XCLQh1wiLFwieWljeVwiOlwi0ZdcIixcIllvcGZcIjpcIvCdlZBcIixcInlvcGZcIjpcIvCdlapcIixcIllzY3JcIjpcIvCdkrRcIixcInlzY3JcIjpcIvCdk45cIixcIllVY3lcIjpcItCuXCIsXCJ5dWN5XCI6XCLRjlwiLFwieXVtbFwiOlwiw79cIixcIll1bWxcIjpcIsW4XCIsXCJaYWN1dGVcIjpcIsW5XCIsXCJ6YWN1dGVcIjpcIsW6XCIsXCJaY2Fyb25cIjpcIsW9XCIsXCJ6Y2Fyb25cIjpcIsW+XCIsXCJaY3lcIjpcItCXXCIsXCJ6Y3lcIjpcItC3XCIsXCJaZG90XCI6XCLFu1wiLFwiemRvdFwiOlwixbxcIixcInplZXRyZlwiOlwi4oSoXCIsXCJaZXJvV2lkdGhTcGFjZVwiOlwi4oCLXCIsXCJaZXRhXCI6XCLOllwiLFwiemV0YVwiOlwizrZcIixcInpmclwiOlwi8J2Ut1wiLFwiWmZyXCI6XCLihKhcIixcIlpIY3lcIjpcItCWXCIsXCJ6aGN5XCI6XCLQtlwiLFwiemlncmFyclwiOlwi4oedXCIsXCJ6b3BmXCI6XCLwnZWrXCIsXCJab3BmXCI6XCLihKRcIixcIlpzY3JcIjpcIvCdkrVcIixcInpzY3JcIjpcIvCdk49cIixcInp3alwiOlwi4oCNXCIsXCJ6d25qXCI6XCLigIxcIn1cblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcInVuaXZlcnNhbFwiOjUwLFwidGFnXCI6MzAsXCJhdHRyaWJ1dGVcIjoxLFwicHNldWRvXCI6MCxcImRlc2NlbmRhbnRcIjotMSxcImNoaWxkXCI6LTEsXCJwYXJlbnRcIjotMSxcInNpYmxpbmdcIjotMSxcImFkamFjZW50XCI6LTF9XG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBJbnNwaXJlZCBieSBHb29nbGUgQ2xvc3VyZTpcbi8vIGh0dHA6Ly9jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vc3ZuL2RvY3MvXG4vLyBjbG9zdXJlX2dvb2dfYXJyYXlfYXJyYXkuanMuaHRtbCNnb29nLmFycmF5LmNsZWFyXG5cblxuXG52YXIgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0dmFsdWUodGhpcykubGVuZ3RoID0gMDtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHt9O1xuXG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIHRvSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpXG5cbiAgLCBtYXggPSBNYXRoLm1heDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiByZXR1cm4gbWF4KDAsIHRvSW50ZWdlcih2YWx1ZSkpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlLCBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiwgcGxhaW5PYmplY3QgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoLyogQ3VzdG9tQ3JlYXRlKi8pIHtcblx0dmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mLCBjdXN0b21DcmVhdGUgPSBhcmd1bWVudHNbMF0gfHwgY3JlYXRlO1xuXHRpZiAodHlwZW9mIHNldFByb3RvdHlwZU9mICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIGdldFByb3RvdHlwZU9mKHNldFByb3RvdHlwZU9mKGN1c3RvbUNyZWF0ZShudWxsKSwgcGxhaW5PYmplY3QpKSA9PT0gcGxhaW5PYmplY3Q7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQgbm8tcHJvdG86IFwib2ZmXCIgKi9cblxuLy8gQmlnIHRoYW5rcyB0byBAV2ViUmVmbGVjdGlvbiBmb3Igc29ydGluZyB0aGlzIG91dFxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi81NTkzNTU0XG5cblxuXG52YXIgaXNPYmplY3QgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSlcbiAgLCB2YWx1ZSAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApXG4gICwgb2JqSXNQcm90b3R5cGVPZiA9IE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZlxuICAsIGRlZmluZVByb3BlcnR5ICA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICAsIG51bGxEZXNjICAgICAgICA9IHtcblx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0d3JpdGFibGU6IHRydWUsXG5cdHZhbHVlOiB1bmRlZmluZWRcbn1cbiAgLCB2YWxpZGF0ZTtcblxudmFsaWRhdGUgPSBmdW5jdGlvbiAob2JqLCBwcm90b3R5cGUpIHtcblx0dmFsdWUob2JqKTtcblx0aWYgKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBpc09iamVjdChwcm90b3R5cGUpKSByZXR1cm4gb2JqO1xuXHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdG90eXBlIG11c3QgYmUgbnVsbCBvciBhbiBvYmplY3RcIik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoc3RhdHVzKSB7XG5cdHZhciBmbiwgc2V0O1xuXHRpZiAoIXN0YXR1cykgcmV0dXJuIG51bGw7XG5cdGlmIChzdGF0dXMubGV2ZWwgPT09IDIpIHtcblx0XHRpZiAoc3RhdHVzLnNldCkge1xuXHRcdFx0c2V0ID0gc3RhdHVzLnNldDtcblx0XHRcdGZuID0gZnVuY3Rpb24gKG9iaiwgcHJvdG90eXBlKSB7XG5cdFx0XHRcdHNldC5jYWxsKHZhbGlkYXRlKG9iaiwgcHJvdG90eXBlKSwgcHJvdG90eXBlKTtcblx0XHRcdFx0cmV0dXJuIG9iajtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZuID0gZnVuY3Rpb24gKG9iaiwgcHJvdG90eXBlKSB7XG5cdFx0XHRcdHZhbGlkYXRlKG9iaiwgcHJvdG90eXBlKS5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG5cdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmbiA9IGZ1bmN0aW9uIHNlbGYob2JqLCBwcm90b3R5cGUpIHtcblx0XHRcdHZhciBpc051bGxCYXNlO1xuXHRcdFx0dmFsaWRhdGUob2JqLCBwcm90b3R5cGUpO1xuXHRcdFx0aXNOdWxsQmFzZSA9IG9iaklzUHJvdG90eXBlT2YuY2FsbChzZWxmLm51bGxQb2x5ZmlsbCwgb2JqKTtcblx0XHRcdGlmIChpc051bGxCYXNlKSBkZWxldGUgc2VsZi5udWxsUG9seWZpbGwuX19wcm90b19fO1xuXHRcdFx0aWYgKHByb3RvdHlwZSA9PT0gbnVsbCkgcHJvdG90eXBlID0gc2VsZi5udWxsUG9seWZpbGw7XG5cdFx0XHRvYmouX19wcm90b19fID0gcHJvdG90eXBlO1xuXHRcdFx0aWYgKGlzTnVsbEJhc2UpIGRlZmluZVByb3BlcnR5KHNlbGYubnVsbFBvbHlmaWxsLCBcIl9fcHJvdG9fX1wiLCBudWxsRGVzYyk7XG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgXCJsZXZlbFwiLCB7XG5cdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR3cml0YWJsZTogZmFsc2UsXG5cdFx0dmFsdWU6IHN0YXR1cy5sZXZlbFxuXHR9KTtcbn0oXG5cdChmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIHRtcE9iajEgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cdFx0ICAsIHRtcE9iajIgPSB7fVxuXHRcdCAgLCBzZXRcblx0XHQgICwgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwgXCJfX3Byb3RvX19cIik7XG5cblx0XHRpZiAoZGVzYykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c2V0ID0gZGVzYy5zZXQ7IC8vIE9wZXJhIGNyYXNoZXMgYXQgdGhpcyBwb2ludFxuXHRcdFx0XHRzZXQuY2FsbCh0bXBPYmoxLCB0bXBPYmoyKTtcblx0XHRcdH0gY2F0Y2ggKGlnbm9yZSkge31cblx0XHRcdGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodG1wT2JqMSkgPT09IHRtcE9iajIpIHJldHVybiB7IHNldDogc2V0LCBsZXZlbDogMiB9O1xuXHRcdH1cblxuXHRcdHRtcE9iajEuX19wcm90b19fID0gdG1wT2JqMjtcblx0XHRpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRtcE9iajEpID09PSB0bXBPYmoyKSByZXR1cm4geyBsZXZlbDogMiB9O1xuXG5cdFx0dG1wT2JqMSA9IHt9O1xuXHRcdHRtcE9iajEuX19wcm90b19fID0gdG1wT2JqMjtcblx0XHRpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRtcE9iajEpID09PSB0bXBPYmoyKSByZXR1cm4geyBsZXZlbDogMSB9O1xuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSgpXG4pKTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XG5cblxuLyoqKi8gfSksXG4vKiAyMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNWYWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbnZhciBmb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2gsIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbnZhciBwcm9jZXNzID0gZnVuY3Rpb24gKHNyYywgb2JqKSB7XG5cdHZhciBrZXk7XG5cdGZvciAoa2V5IGluIHNyYykgb2JqW2tleV0gPSBzcmNba2V5XTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0czEgLyosIOKApm9wdGlvbnMqLykge1xuXHR2YXIgcmVzdWx0ID0gY3JlYXRlKG51bGwpO1xuXHRmb3JFYWNoLmNhbGwoYXJndW1lbnRzLCBmdW5jdGlvbiAob3B0aW9ucykge1xuXHRcdGlmICghaXNWYWx1ZShvcHRpb25zKSkgcmV0dXJuO1xuXHRcdHByb2Nlc3MoT2JqZWN0KG9wdGlvbnMpLCByZXN1bHQpO1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNJdGVyYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRpZiAoIWlzSXRlcmFibGUodmFsdWUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgXCIgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGZhbHNlRnVuYyA9IF9fd2VicGFja19yZXF1aXJlX18oNSkuZmFsc2VGdW5jO1xuXG4vL2h0dHBzOi8vZ2l0aHViLmNvbS9zbGV2aXRoYW4vWFJlZ0V4cC9ibG9iL21hc3Rlci9zcmMveHJlZ2V4cC5qcyNMNDY5XG52YXIgcmVDaGFycyA9IC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZztcblxuZnVuY3Rpb24gZmFjdG9yeShhZGFwdGVyKXtcblx0Lypcblx0XHRhdHRyaWJ1dGUgc2VsZWN0b3JzXG5cdCovXG5cdHZhciBhdHRyaWJ1dGVSdWxlcyA9IHtcblx0XHRfX3Byb3RvX186IG51bGwsXG5cdFx0ZXF1YWxzOiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lICA9IGRhdGEubmFtZSxcblx0XHRcdFx0dmFsdWUgPSBkYXRhLnZhbHVlO1xuXG5cdFx0XHRpZihkYXRhLmlnbm9yZUNhc2Upe1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGVxdWFsc0lDKGVsZW0pe1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGVxdWFscyhlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSkgPT09IHZhbHVlICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0aHlwaGVuOiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lICA9IGRhdGEubmFtZSxcblx0XHRcdFx0dmFsdWUgPSBkYXRhLnZhbHVlLFxuXHRcdFx0XHRsZW4gPSB2YWx1ZS5sZW5ndGg7XG5cblx0XHRcdGlmKGRhdGEuaWdub3JlQ2FzZSl7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gaHlwaGVuSUMoZWxlbSl7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiZcblx0XHRcdFx0XHRcdFx0KGF0dHIubGVuZ3RoID09PSBsZW4gfHwgYXR0ci5jaGFyQXQobGVuKSA9PT0gXCItXCIpICYmXG5cdFx0XHRcdFx0XHRcdGF0dHIuc3Vic3RyKDAsIGxlbikudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0bmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGh5cGhlbihlbGVtKXtcblx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmXG5cdFx0XHRcdFx0XHRhdHRyLnN1YnN0cigwLCBsZW4pID09PSB2YWx1ZSAmJlxuXHRcdFx0XHRcdFx0KGF0dHIubGVuZ3RoID09PSBsZW4gfHwgYXR0ci5jaGFyQXQobGVuKSA9PT0gXCItXCIpICYmXG5cdFx0XHRcdFx0XHRuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGVsZW1lbnQ6IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgPSBkYXRhLm5hbWUsXG5cdFx0XHRcdHZhbHVlID0gZGF0YS52YWx1ZTtcblxuXHRcdFx0aWYoL1xccy8udGVzdCh2YWx1ZSkpe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2VGdW5jO1xuXHRcdFx0fVxuXG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmVDaGFycywgXCJcXFxcJCZcIik7XG5cblx0XHRcdHZhciBwYXR0ZXJuID0gXCIoPzpefFxcXFxzKVwiICsgdmFsdWUgKyBcIig/OiR8XFxcXHMpXCIsXG5cdFx0XHRcdGZsYWdzID0gZGF0YS5pZ25vcmVDYXNlID8gXCJpXCIgOiBcIlwiLFxuXHRcdFx0XHRyZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZWxlbWVudChlbGVtKXtcblx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIHJlZ2V4LnRlc3QoYXR0cikgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRleGlzdHM6IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgPSBkYXRhLm5hbWU7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZXhpc3RzKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gYWRhcHRlci5oYXNBdHRyaWIoZWxlbSwgbmFtZSkgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRzdGFydDogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSAgPSBkYXRhLm5hbWUsXG5cdFx0XHRcdHZhbHVlID0gZGF0YS52YWx1ZSxcblx0XHRcdFx0bGVuID0gdmFsdWUubGVuZ3RoO1xuXG5cdFx0XHRpZihsZW4gPT09IDApe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2VGdW5jO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihkYXRhLmlnbm9yZUNhc2Upe1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIHN0YXJ0SUMoZWxlbSl7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiYgYXR0ci5zdWJzdHIoMCwgbGVuKS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gc3RhcnQoZWxlbSl7XG5cdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiBhdHRyLnN1YnN0cigwLCBsZW4pID09PSB2YWx1ZSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSAgPSBkYXRhLm5hbWUsXG5cdFx0XHRcdHZhbHVlID0gZGF0YS52YWx1ZSxcblx0XHRcdFx0bGVuICAgPSAtdmFsdWUubGVuZ3RoO1xuXG5cdFx0XHRpZihsZW4gPT09IDApe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2VGdW5jO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihkYXRhLmlnbm9yZUNhc2Upe1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGVuZElDKGVsZW0pe1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIGF0dHIuc3Vic3RyKGxlbikudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGVuZChlbGVtKXtcblx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIGF0dHIuc3Vic3RyKGxlbikgPT09IHZhbHVlICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YW55OiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lICA9IGRhdGEubmFtZSxcblx0XHRcdFx0dmFsdWUgPSBkYXRhLnZhbHVlO1xuXG5cdFx0XHRpZih2YWx1ZSA9PT0gXCJcIil7XG5cdFx0XHRcdHJldHVybiBmYWxzZUZ1bmM7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGRhdGEuaWdub3JlQ2FzZSl7XG5cdFx0XHRcdHZhciByZWdleCA9IG5ldyBSZWdFeHAodmFsdWUucmVwbGFjZShyZUNoYXJzLCBcIlxcXFwkJlwiKSwgXCJpXCIpO1xuXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiBhbnlJQyhlbGVtKXtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiByZWdleC50ZXN0KGF0dHIpICYmIG5leHQoZWxlbSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBhbnkoZWxlbSl7XG5cdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiBhdHRyLmluZGV4T2YodmFsdWUpID49IDAgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRub3Q6IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgID0gZGF0YS5uYW1lLFxuXHRcdFx0XHR2YWx1ZSA9IGRhdGEudmFsdWU7XG5cblx0XHRcdGlmKHZhbHVlID09PSBcIlwiKXtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIG5vdEVtcHR5KGVsZW0pe1xuXHRcdFx0XHRcdHJldHVybiAhIWFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSkgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZihkYXRhLmlnbm9yZUNhc2Upe1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIG5vdElDKGVsZW0pe1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIGF0dHIudG9Mb3dlckNhc2UoKSAhPT0gdmFsdWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIG5vdChlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSkgIT09IHZhbHVlICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGNvbXBpbGU6IGZ1bmN0aW9uKG5leHQsIGRhdGEsIG9wdGlvbnMpe1xuXHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLnN0cmljdCAmJiAoXG5cdFx0XHRcdGRhdGEuaWdub3JlQ2FzZSB8fCBkYXRhLmFjdGlvbiA9PT0gXCJub3RcIlxuXHRcdFx0KSkgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYXR0cmlidXRlIHNlbGVjdG9yXCIpO1xuXHRcdFx0cmV0dXJuIGF0dHJpYnV0ZVJ1bGVzW2RhdGEuYWN0aW9uXShuZXh0LCBkYXRhKTtcblx0XHR9LFxuXHRcdHJ1bGVzOiBhdHRyaWJ1dGVSdWxlc1xuXHR9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3Rvcnk7XG5cblxuLyoqKi8gfSksXG4vKiAyNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IENTU3NlbGVjdDtcblxudmFyIERvbVV0aWxzICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSksXG5cdGZhbHNlRnVuYyAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KS5mYWxzZUZ1bmMsXG5cdGNvbXBpbGVGYWN0b3J5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCksXG5cdGRlZmF1bHRDb21waWxlID0gY29tcGlsZUZhY3RvcnkoRG9tVXRpbHMpO1xuXG5mdW5jdGlvbiBhZGFwdGVyQ29tcGlsZShhZGFwdGVyKXtcblx0cmV0dXJuIGFkYXB0ZXIgPT09IERvbVV0aWxzID8gZGVmYXVsdENvbXBpbGUgOiBjb21waWxlRmFjdG9yeShhZGFwdGVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0b3JGdW5jKHNlYXJjaEZ1bmMpe1xuXHRyZXR1cm4gZnVuY3Rpb24gc2VsZWN0KHF1ZXJ5LCBlbGVtcywgb3B0aW9ucyl7XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblx0XHRvcHRpb25zLmFkYXB0ZXIgPSBvcHRpb25zLmFkYXB0ZXIgfHwgRG9tVXRpbHM7XG5cdFx0dmFyIGNvbXBpbGUgPSBhZGFwdGVyQ29tcGlsZShvcHRpb25zLmFkYXB0ZXIpO1xuXG5cdFx0aWYodHlwZW9mIHF1ZXJ5ICE9PSBcImZ1bmN0aW9uXCIpIHF1ZXJ5ID0gY29tcGlsZS5jb21waWxlVW5zYWZlKHF1ZXJ5LCBvcHRpb25zLCBlbGVtcyk7XG5cdFx0aWYocXVlcnkuc2hvdWxkVGVzdE5leHRTaWJsaW5ncykgZWxlbXMgPSBhcHBlbmROZXh0U2libGluZ3MoKG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0KSB8fCBlbGVtcywgb3B0aW9ucy5hZGFwdGVyKTtcblx0XHRpZighQXJyYXkuaXNBcnJheShlbGVtcykpIGVsZW1zID0gb3B0aW9ucy5hZGFwdGVyLmdldENoaWxkcmVuKGVsZW1zKTtcblx0XHRlbHNlIGVsZW1zID0gb3B0aW9ucy5hZGFwdGVyLnJlbW92ZVN1YnNldHMoZWxlbXMpO1xuXHRcdHJldHVybiBzZWFyY2hGdW5jKHF1ZXJ5LCBlbGVtcywgb3B0aW9ucyk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldE5leHRTaWJsaW5ncyhlbGVtLCBhZGFwdGVyKXtcblx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblx0aWYoIUFycmF5LmlzQXJyYXkoc2libGluZ3MpKSByZXR1cm4gW107XG5cdHNpYmxpbmdzID0gc2libGluZ3Muc2xpY2UoMCk7XG5cdHdoaWxlKHNpYmxpbmdzLnNoaWZ0KCkgIT09IGVsZW0pO1xuXHRyZXR1cm4gc2libGluZ3M7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZE5leHRTaWJsaW5ncyhlbGVtcywgYWRhcHRlcil7XG5cdC8vIE9yZGVyIG1hdHRlcnMgYmVjYXVzZSBqUXVlcnkgc2VlbXMgdG8gY2hlY2sgdGhlIGNoaWxkcmVuIGJlZm9yZSB0aGUgc2libGluZ3Ncblx0aWYoIUFycmF5LmlzQXJyYXkoZWxlbXMpKSBlbGVtcyA9IFtlbGVtc107XG5cdHZhciBuZXdFbGVtcyA9IGVsZW1zLnNsaWNlKDApO1xuXG5cdGZvcih2YXIgaSA9IDAsIGxlbiA9IGVsZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXtcblx0XHR2YXIgbmV4dFNpYmxpbmdzID0gZ2V0TmV4dFNpYmxpbmdzKG5ld0VsZW1zW2ldLCBhZGFwdGVyKTtcblx0XHRuZXdFbGVtcy5wdXNoLmFwcGx5KG5ld0VsZW1zLCBuZXh0U2libGluZ3MpO1xuXHR9XG5cdHJldHVybiBuZXdFbGVtcztcbn1cblxudmFyIHNlbGVjdEFsbCA9IGdldFNlbGVjdG9yRnVuYyhmdW5jdGlvbiBzZWxlY3RBbGwocXVlcnksIGVsZW1zLCBvcHRpb25zKXtcblx0cmV0dXJuIChxdWVyeSA9PT0gZmFsc2VGdW5jIHx8ICFlbGVtcyB8fCBlbGVtcy5sZW5ndGggPT09IDApID8gW10gOiBvcHRpb25zLmFkYXB0ZXIuZmluZEFsbChxdWVyeSwgZWxlbXMpO1xufSk7XG5cbnZhciBzZWxlY3RPbmUgPSBnZXRTZWxlY3RvckZ1bmMoZnVuY3Rpb24gc2VsZWN0T25lKHF1ZXJ5LCBlbGVtcywgb3B0aW9ucyl7XG5cdHJldHVybiAocXVlcnkgPT09IGZhbHNlRnVuYyB8fCAhZWxlbXMgfHwgZWxlbXMubGVuZ3RoID09PSAwKSA/IG51bGwgOiBvcHRpb25zLmFkYXB0ZXIuZmluZE9uZShxdWVyeSwgZWxlbXMpO1xufSk7XG5cbmZ1bmN0aW9uIGlzKGVsZW0sIHF1ZXJ5LCBvcHRpb25zKXtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblx0b3B0aW9ucy5hZGFwdGVyID0gb3B0aW9ucy5hZGFwdGVyIHx8IERvbVV0aWxzO1xuXHR2YXIgY29tcGlsZSA9IGFkYXB0ZXJDb21waWxlKG9wdGlvbnMuYWRhcHRlcik7XG5cdHJldHVybiAodHlwZW9mIHF1ZXJ5ID09PSBcImZ1bmN0aW9uXCIgPyBxdWVyeSA6IGNvbXBpbGUocXVlcnksIG9wdGlvbnMpKShlbGVtKTtcbn1cblxuLypcblx0dGhlIGV4cG9ydGVkIGludGVyZmFjZVxuKi9cbmZ1bmN0aW9uIENTU3NlbGVjdChxdWVyeSwgZWxlbXMsIG9wdGlvbnMpe1xuXHRyZXR1cm4gc2VsZWN0QWxsKHF1ZXJ5LCBlbGVtcywgb3B0aW9ucyk7XG59XG5cbkNTU3NlbGVjdC5jb21waWxlID0gZGVmYXVsdENvbXBpbGU7XG5DU1NzZWxlY3QuZmlsdGVycyA9IGRlZmF1bHRDb21waWxlLlBzZXVkb3MuZmlsdGVycztcbkNTU3NlbGVjdC5wc2V1ZG9zID0gZGVmYXVsdENvbXBpbGUuUHNldWRvcy5wc2V1ZG9zO1xuXG5DU1NzZWxlY3Quc2VsZWN0QWxsID0gc2VsZWN0QWxsO1xuQ1NTc2VsZWN0LnNlbGVjdE9uZSA9IHNlbGVjdE9uZTtcblxuQ1NTc2VsZWN0LmlzID0gaXM7XG5cbi8vbGVnYWN5IG1ldGhvZHMgKG1pZ2h0IGJlIHJlbW92ZWQpXG5DU1NzZWxlY3QucGFyc2UgPSBkZWZhdWx0Q29tcGlsZTtcbkNTU3NlbGVjdC5pdGVyYXRlID0gc2VsZWN0QWxsO1xuXG4vL2hvb2tzXG5DU1NzZWxlY3QuX2NvbXBpbGVVbnNhZmUgPSBkZWZhdWx0Q29tcGlsZS5jb21waWxlVW5zYWZlO1xuQ1NTc2VsZWN0Ll9jb21waWxlVG9rZW4gPSBkZWZhdWx0Q29tcGlsZS5jb21waWxlVG9rZW47XG5cblxuLyoqKi8gfSksXG4vKiAyNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgRG9tVXRpbHMgPSBtb2R1bGUuZXhwb3J0cztcblxuW1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KSxcblx0X193ZWJwYWNrX3JlcXVpcmVfXygzNSksXG5cdF9fd2VicGFja19yZXF1aXJlX18oMzYpLFxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KSxcblx0X193ZWJwYWNrX3JlcXVpcmVfXygzOCksXG5cdF9fd2VicGFja19yZXF1aXJlX18oMzkpXG5dLmZvckVhY2goZnVuY3Rpb24oZXh0KXtcblx0T2JqZWN0LmtleXMoZXh0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7XG5cdFx0RG9tVXRpbHNba2V5XSA9IGV4dFtrZXldLmJpbmQoRG9tVXRpbHMpO1xuXHR9KTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIEVsZW1lbnRUeXBlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KSxcbiAgICBnZXRPdXRlckhUTUwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KSxcbiAgICBpc1RhZyA9IEVsZW1lbnRUeXBlLmlzVGFnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0Z2V0SW5uZXJIVE1MOiBnZXRJbm5lckhUTUwsXG5cdGdldE91dGVySFRNTDogZ2V0T3V0ZXJIVE1MLFxuXHRnZXRUZXh0OiBnZXRUZXh0XG59O1xuXG5mdW5jdGlvbiBnZXRJbm5lckhUTUwoZWxlbSwgb3B0cyl7XG5cdHJldHVybiBlbGVtLmNoaWxkcmVuID8gZWxlbS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oZWxlbSl7XG5cdFx0cmV0dXJuIGdldE91dGVySFRNTChlbGVtLCBvcHRzKTtcblx0fSkuam9pbihcIlwiKSA6IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldFRleHQoZWxlbSl7XG5cdGlmKEFycmF5LmlzQXJyYXkoZWxlbSkpIHJldHVybiBlbGVtLm1hcChnZXRUZXh0KS5qb2luKFwiXCIpO1xuXHRpZihpc1RhZyhlbGVtKSB8fCBlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLkNEQVRBKSByZXR1cm4gZ2V0VGV4dChlbGVtLmNoaWxkcmVuKTtcblx0aWYoZWxlbS50eXBlID09PSBFbGVtZW50VHlwZS5UZXh0KSByZXR1cm4gZWxlbS5kYXRhO1xuXHRyZXR1cm4gXCJcIjtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDI3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qXG4gIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiovXG52YXIgRWxlbWVudFR5cGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTtcbnZhciBlbnRpdGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuXG4vKlxuICBCb29sZWFuIEF0dHJpYnV0ZXNcbiovXG52YXIgYm9vbGVhbkF0dHJpYnV0ZXMgPSB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgYWxsb3dmdWxsc2NyZWVuOiB0cnVlLFxuICBhc3luYzogdHJ1ZSxcbiAgYXV0b2ZvY3VzOiB0cnVlLFxuICBhdXRvcGxheTogdHJ1ZSxcbiAgY2hlY2tlZDogdHJ1ZSxcbiAgY29udHJvbHM6IHRydWUsXG4gIGRlZmF1bHQ6IHRydWUsXG4gIGRlZmVyOiB0cnVlLFxuICBkaXNhYmxlZDogdHJ1ZSxcbiAgaGlkZGVuOiB0cnVlLFxuICBpc21hcDogdHJ1ZSxcbiAgbG9vcDogdHJ1ZSxcbiAgbXVsdGlwbGU6IHRydWUsXG4gIG11dGVkOiB0cnVlLFxuICBvcGVuOiB0cnVlLFxuICByZWFkb25seTogdHJ1ZSxcbiAgcmVxdWlyZWQ6IHRydWUsXG4gIHJldmVyc2VkOiB0cnVlLFxuICBzY29wZWQ6IHRydWUsXG4gIHNlYW1sZXNzOiB0cnVlLFxuICBzZWxlY3RlZDogdHJ1ZSxcbiAgdHlwZW11c3RtYXRjaDogdHJ1ZVxufTtcblxudmFyIHVuZW5jb2RlZEVsZW1lbnRzID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIHN0eWxlOiB0cnVlLFxuICBzY3JpcHQ6IHRydWUsXG4gIHhtcDogdHJ1ZSxcbiAgaWZyYW1lOiB0cnVlLFxuICBub2VtYmVkOiB0cnVlLFxuICBub2ZyYW1lczogdHJ1ZSxcbiAgcGxhaW50ZXh0OiB0cnVlLFxuICBub3NjcmlwdDogdHJ1ZVxufTtcblxuLypcbiAgRm9ybWF0IGF0dHJpYnV0ZXNcbiovXG5mdW5jdGlvbiBmb3JtYXRBdHRycyhhdHRyaWJ1dGVzLCBvcHRzKSB7XG4gIGlmICghYXR0cmlidXRlcykgcmV0dXJuO1xuXG4gIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgIHZhbHVlO1xuXG4gIC8vIExvb3AgdGhyb3VnaCB0aGUgYXR0cmlidXRlc1xuICBmb3IgKHZhciBrZXkgaW4gYXR0cmlidXRlcykge1xuICAgIHZhbHVlID0gYXR0cmlidXRlc1trZXldO1xuICAgIGlmIChvdXRwdXQpIHtcbiAgICAgIG91dHB1dCArPSAnICc7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSAmJiBib29sZWFuQXR0cmlidXRlc1trZXldKSB7XG4gICAgICBvdXRwdXQgKz0ga2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQgKz0ga2V5ICsgJz1cIicgKyAob3B0cy5kZWNvZGVFbnRpdGllcyA/IGVudGl0aWVzLmVuY29kZVhNTCh2YWx1ZSkgOiB2YWx1ZSkgKyAnXCInO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qXG4gIFNlbGYtZW5jbG9zaW5nIHRhZ3MgKHN0b2xlbiBmcm9tIG5vZGUtaHRtbHBhcnNlcilcbiovXG52YXIgc2luZ2xlVGFnID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIGFyZWE6IHRydWUsXG4gIGJhc2U6IHRydWUsXG4gIGJhc2Vmb250OiB0cnVlLFxuICBicjogdHJ1ZSxcbiAgY29sOiB0cnVlLFxuICBjb21tYW5kOiB0cnVlLFxuICBlbWJlZDogdHJ1ZSxcbiAgZnJhbWU6IHRydWUsXG4gIGhyOiB0cnVlLFxuICBpbWc6IHRydWUsXG4gIGlucHV0OiB0cnVlLFxuICBpc2luZGV4OiB0cnVlLFxuICBrZXlnZW46IHRydWUsXG4gIGxpbms6IHRydWUsXG4gIG1ldGE6IHRydWUsXG4gIHBhcmFtOiB0cnVlLFxuICBzb3VyY2U6IHRydWUsXG4gIHRyYWNrOiB0cnVlLFxuICB3YnI6IHRydWUsXG59O1xuXG5cbnZhciByZW5kZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRvbSwgb3B0cykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZG9tKSAmJiAhZG9tLmNoZWVyaW8pIGRvbSA9IFtkb21dO1xuICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICB2YXIgb3V0cHV0ID0gJyc7XG5cbiAgZm9yKHZhciBpID0gMDsgaSA8IGRvbS5sZW5ndGg7IGkrKyl7XG4gICAgdmFyIGVsZW0gPSBkb21baV07XG5cbiAgICBpZiAoZWxlbS50eXBlID09PSAncm9vdCcpXG4gICAgICBvdXRwdXQgKz0gcmVuZGVyKGVsZW0uY2hpbGRyZW4sIG9wdHMpO1xuICAgIGVsc2UgaWYgKEVsZW1lbnRUeXBlLmlzVGFnKGVsZW0pKVxuICAgICAgb3V0cHV0ICs9IHJlbmRlclRhZyhlbGVtLCBvcHRzKTtcbiAgICBlbHNlIGlmIChlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLkRpcmVjdGl2ZSlcbiAgICAgIG91dHB1dCArPSByZW5kZXJEaXJlY3RpdmUoZWxlbSk7XG4gICAgZWxzZSBpZiAoZWxlbS50eXBlID09PSBFbGVtZW50VHlwZS5Db21tZW50KVxuICAgICAgb3V0cHV0ICs9IHJlbmRlckNvbW1lbnQoZWxlbSk7XG4gICAgZWxzZSBpZiAoZWxlbS50eXBlID09PSBFbGVtZW50VHlwZS5DREFUQSlcbiAgICAgIG91dHB1dCArPSByZW5kZXJDZGF0YShlbGVtKTtcbiAgICBlbHNlXG4gICAgICBvdXRwdXQgKz0gcmVuZGVyVGV4dChlbGVtLCBvcHRzKTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5mdW5jdGlvbiByZW5kZXJUYWcoZWxlbSwgb3B0cykge1xuICAvLyBIYW5kbGUgU1ZHXG4gIGlmIChlbGVtLm5hbWUgPT09IFwic3ZnXCIpIG9wdHMgPSB7ZGVjb2RlRW50aXRpZXM6IG9wdHMuZGVjb2RlRW50aXRpZXMsIHhtbE1vZGU6IHRydWV9O1xuXG4gIHZhciB0YWcgPSAnPCcgKyBlbGVtLm5hbWUsXG4gICAgICBhdHRyaWJzID0gZm9ybWF0QXR0cnMoZWxlbS5hdHRyaWJzLCBvcHRzKTtcblxuICBpZiAoYXR0cmlicykge1xuICAgIHRhZyArPSAnICcgKyBhdHRyaWJzO1xuICB9XG5cbiAgaWYgKFxuICAgIG9wdHMueG1sTW9kZVxuICAgICYmICghZWxlbS5jaGlsZHJlbiB8fCBlbGVtLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgKSB7XG4gICAgdGFnICs9ICcvPic7XG4gIH0gZWxzZSB7XG4gICAgdGFnICs9ICc+JztcbiAgICBpZiAoZWxlbS5jaGlsZHJlbikge1xuICAgICAgdGFnICs9IHJlbmRlcihlbGVtLmNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG5cbiAgICBpZiAoIXNpbmdsZVRhZ1tlbGVtLm5hbWVdIHx8IG9wdHMueG1sTW9kZSkge1xuICAgICAgdGFnICs9ICc8LycgKyBlbGVtLm5hbWUgKyAnPic7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhZztcbn1cblxuZnVuY3Rpb24gcmVuZGVyRGlyZWN0aXZlKGVsZW0pIHtcbiAgcmV0dXJuICc8JyArIGVsZW0uZGF0YSArICc+Jztcbn1cblxuZnVuY3Rpb24gcmVuZGVyVGV4dChlbGVtLCBvcHRzKSB7XG4gIHZhciBkYXRhID0gZWxlbS5kYXRhIHx8ICcnO1xuXG4gIC8vIGlmIGVudGl0aWVzIHdlcmVuJ3QgZGVjb2RlZCwgbm8gbmVlZCB0byBlbmNvZGUgdGhlbSBiYWNrXG4gIGlmIChvcHRzLmRlY29kZUVudGl0aWVzICYmICEoZWxlbS5wYXJlbnQgJiYgZWxlbS5wYXJlbnQubmFtZSBpbiB1bmVuY29kZWRFbGVtZW50cykpIHtcbiAgICBkYXRhID0gZW50aXRpZXMuZW5jb2RlWE1MKGRhdGEpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNkYXRhKGVsZW0pIHtcbiAgcmV0dXJuICc8IVtDREFUQVsnICsgZWxlbS5jaGlsZHJlblswXS5kYXRhICsgJ11dPic7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvbW1lbnQoZWxlbSkge1xuICByZXR1cm4gJzwhLS0nICsgZWxlbS5kYXRhICsgJy0tPic7XG59XG5cblxuLyoqKi8gfSksXG4vKiAyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vL1R5cGVzIG9mIGVsZW1lbnRzIGZvdW5kIGluIHRoZSBET01cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRUZXh0OiBcInRleHRcIiwgLy9UZXh0XG5cdERpcmVjdGl2ZTogXCJkaXJlY3RpdmVcIiwgLy88PyAuLi4gPz5cblx0Q29tbWVudDogXCJjb21tZW50XCIsIC8vPCEtLSAuLi4gLS0+XG5cdFNjcmlwdDogXCJzY3JpcHRcIiwgLy88c2NyaXB0PiB0YWdzXG5cdFN0eWxlOiBcInN0eWxlXCIsIC8vPHN0eWxlPiB0YWdzXG5cdFRhZzogXCJ0YWdcIiwgLy9BbnkgdGFnXG5cdENEQVRBOiBcImNkYXRhXCIsIC8vPCFbQ0RBVEFbIC4uLiBdXT5cblxuXHRpc1RhZzogZnVuY3Rpb24oZWxlbSl7XG5cdFx0cmV0dXJuIGVsZW0udHlwZSA9PT0gXCJ0YWdcIiB8fCBlbGVtLnR5cGUgPT09IFwic2NyaXB0XCIgfHwgZWxlbS50eXBlID09PSBcInN0eWxlXCI7XG5cdH1cbn07XG5cbi8qKiovIH0pLFxuLyogMjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGVuY29kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzApLFxuICAgIGRlY29kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xuXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uKGRhdGEsIGxldmVsKXtcblx0cmV0dXJuICghbGV2ZWwgfHwgbGV2ZWwgPD0gMCA/IGRlY29kZS5YTUwgOiBkZWNvZGUuSFRNTCkoZGF0YSk7XG59O1xuXG5leHBvcnRzLmRlY29kZVN0cmljdCA9IGZ1bmN0aW9uKGRhdGEsIGxldmVsKXtcblx0cmV0dXJuICghbGV2ZWwgfHwgbGV2ZWwgPD0gMCA/IGRlY29kZS5YTUwgOiBkZWNvZGUuSFRNTFN0cmljdCkoZGF0YSk7XG59O1xuXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uKGRhdGEsIGxldmVsKXtcblx0cmV0dXJuICghbGV2ZWwgfHwgbGV2ZWwgPD0gMCA/IGVuY29kZS5YTUwgOiBlbmNvZGUuSFRNTCkoZGF0YSk7XG59O1xuXG5leHBvcnRzLmVuY29kZVhNTCA9IGVuY29kZS5YTUw7XG5cbmV4cG9ydHMuZW5jb2RlSFRNTDQgPVxuZXhwb3J0cy5lbmNvZGVIVE1MNSA9XG5leHBvcnRzLmVuY29kZUhUTUwgID0gZW5jb2RlLkhUTUw7XG5cbmV4cG9ydHMuZGVjb2RlWE1MID1cbmV4cG9ydHMuZGVjb2RlWE1MU3RyaWN0ID0gZGVjb2RlLlhNTDtcblxuZXhwb3J0cy5kZWNvZGVIVE1MNCA9XG5leHBvcnRzLmRlY29kZUhUTUw1ID1cbmV4cG9ydHMuZGVjb2RlSFRNTCA9IGRlY29kZS5IVE1MO1xuXG5leHBvcnRzLmRlY29kZUhUTUw0U3RyaWN0ID1cbmV4cG9ydHMuZGVjb2RlSFRNTDVTdHJpY3QgPVxuZXhwb3J0cy5kZWNvZGVIVE1MU3RyaWN0ID0gZGVjb2RlLkhUTUxTdHJpY3Q7XG5cbmV4cG9ydHMuZXNjYXBlID0gZW5jb2RlLmVzY2FwZTtcblxuXG4vKioqLyB9KSxcbi8qIDMwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpbnZlcnNlWE1MID0gZ2V0SW52ZXJzZU9iaihfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKSksXG4gICAgeG1sUmVwbGFjZXIgPSBnZXRJbnZlcnNlUmVwbGFjZXIoaW52ZXJzZVhNTCk7XG5cbmV4cG9ydHMuWE1MID0gZ2V0SW52ZXJzZShpbnZlcnNlWE1MLCB4bWxSZXBsYWNlcik7XG5cbnZhciBpbnZlcnNlSFRNTCA9IGdldEludmVyc2VPYmooX193ZWJwYWNrX3JlcXVpcmVfXygxNCkpLFxuICAgIGh0bWxSZXBsYWNlciA9IGdldEludmVyc2VSZXBsYWNlcihpbnZlcnNlSFRNTCk7XG5cbmV4cG9ydHMuSFRNTCA9IGdldEludmVyc2UoaW52ZXJzZUhUTUwsIGh0bWxSZXBsYWNlcik7XG5cbmZ1bmN0aW9uIGdldEludmVyc2VPYmoob2JqKXtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG9iaikuc29ydCgpLnJlZHVjZShmdW5jdGlvbihpbnZlcnNlLCBuYW1lKXtcblx0XHRpbnZlcnNlW29ialtuYW1lXV0gPSBcIiZcIiArIG5hbWUgKyBcIjtcIjtcblx0XHRyZXR1cm4gaW52ZXJzZTtcblx0fSwge30pO1xufVxuXG5mdW5jdGlvbiBnZXRJbnZlcnNlUmVwbGFjZXIoaW52ZXJzZSl7XG5cdHZhciBzaW5nbGUgPSBbXSxcblx0ICAgIG11bHRpcGxlID0gW107XG5cblx0T2JqZWN0LmtleXMoaW52ZXJzZSkuZm9yRWFjaChmdW5jdGlvbihrKXtcblx0XHRpZihrLmxlbmd0aCA9PT0gMSl7XG5cdFx0XHRzaW5nbGUucHVzaChcIlxcXFxcIiArIGspO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtdWx0aXBsZS5wdXNoKGspO1xuXHRcdH1cblx0fSk7XG5cblx0Ly9UT0RPIGFkZCByYW5nZXNcblx0bXVsdGlwbGUudW5zaGlmdChcIltcIiArIHNpbmdsZS5qb2luKFwiXCIpICsgXCJdXCIpO1xuXG5cdHJldHVybiBuZXcgUmVnRXhwKG11bHRpcGxlLmpvaW4oXCJ8XCIpLCBcImdcIik7XG59XG5cbnZhciByZV9ub25BU0NJSSA9IC9bXlxcMC1cXHg3Rl0vZyxcbiAgICByZV9hc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcblxuZnVuY3Rpb24gc2luZ2xlQ2hhclJlcGxhY2VyKGMpe1xuXHRyZXR1cm4gXCImI3hcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiO1wiO1xufVxuXG5mdW5jdGlvbiBhc3RyYWxSZXBsYWNlcihjKXtcblx0Ly8gaHR0cDovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcblx0dmFyIGhpZ2ggPSBjLmNoYXJDb2RlQXQoMCk7XG5cdHZhciBsb3cgID0gYy5jaGFyQ29kZUF0KDEpO1xuXHR2YXIgY29kZVBvaW50ID0gKGhpZ2ggLSAweEQ4MDApICogMHg0MDAgKyBsb3cgLSAweERDMDAgKyAweDEwMDAwO1xuXHRyZXR1cm4gXCImI3hcIiArIGNvZGVQb2ludC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiO1wiO1xufVxuXG5mdW5jdGlvbiBnZXRJbnZlcnNlKGludmVyc2UsIHJlKXtcblx0ZnVuY3Rpb24gZnVuYyhuYW1lKXtcblx0XHRyZXR1cm4gaW52ZXJzZVtuYW1lXTtcblx0fVxuXG5cdHJldHVybiBmdW5jdGlvbihkYXRhKXtcblx0XHRyZXR1cm4gZGF0YVxuXHRcdFx0XHQucmVwbGFjZShyZSwgZnVuYylcblx0XHRcdFx0LnJlcGxhY2UocmVfYXN0cmFsU3ltYm9scywgYXN0cmFsUmVwbGFjZXIpXG5cdFx0XHRcdC5yZXBsYWNlKHJlX25vbkFTQ0lJLCBzaW5nbGVDaGFyUmVwbGFjZXIpO1xuXHR9O1xufVxuXG52YXIgcmVfeG1sQ2hhcnMgPSBnZXRJbnZlcnNlUmVwbGFjZXIoaW52ZXJzZVhNTCk7XG5cbmZ1bmN0aW9uIGVzY2FwZVhNTChkYXRhKXtcblx0cmV0dXJuIGRhdGFcblx0XHRcdC5yZXBsYWNlKHJlX3htbENoYXJzLCBzaW5nbGVDaGFyUmVwbGFjZXIpXG5cdFx0XHQucmVwbGFjZShyZV9hc3RyYWxTeW1ib2xzLCBhc3RyYWxSZXBsYWNlcilcblx0XHRcdC5yZXBsYWNlKHJlX25vbkFTQ0lJLCBzaW5nbGVDaGFyUmVwbGFjZXIpO1xufVxuXG5leHBvcnRzLmVzY2FwZSA9IGVzY2FwZVhNTDtcblxuXG4vKioqLyB9KSxcbi8qIDMxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBlbnRpdHlNYXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSxcbiAgICBsZWdhY3lNYXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKSxcbiAgICB4bWxNYXAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKSxcbiAgICBkZWNvZGVDb2RlUG9pbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcblxudmFyIGRlY29kZVhNTFN0cmljdCAgPSBnZXRTdHJpY3REZWNvZGVyKHhtbE1hcCksXG4gICAgZGVjb2RlSFRNTFN0cmljdCA9IGdldFN0cmljdERlY29kZXIoZW50aXR5TWFwKTtcblxuZnVuY3Rpb24gZ2V0U3RyaWN0RGVjb2RlcihtYXApe1xuXHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKG1hcCkuam9pbihcInxcIiksXG5cdCAgICByZXBsYWNlID0gZ2V0UmVwbGFjZXIobWFwKTtcblxuXHRrZXlzICs9IFwifCNbeFhdW1xcXFxkYS1mQS1GXSt8I1xcXFxkK1wiO1xuXG5cdHZhciByZSA9IG5ldyBSZWdFeHAoXCImKD86XCIgKyBrZXlzICsgXCIpO1wiLCBcImdcIik7XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHN0cil7XG5cdFx0cmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UocmUsIHJlcGxhY2UpO1xuXHR9O1xufVxuXG52YXIgZGVjb2RlSFRNTCA9IChmdW5jdGlvbigpe1xuXHR2YXIgbGVnYWN5ID0gT2JqZWN0LmtleXMobGVnYWN5TWFwKVxuXHRcdC5zb3J0KHNvcnRlcik7XG5cblx0dmFyIGtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHlNYXApXG5cdFx0LnNvcnQoc29ydGVyKTtcblxuXHRmb3IodmFyIGkgPSAwLCBqID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuXHRcdGlmKGxlZ2FjeVtqXSA9PT0ga2V5c1tpXSl7XG5cdFx0XHRrZXlzW2ldICs9IFwiOz9cIjtcblx0XHRcdGorKztcblx0XHR9IGVsc2Uge1xuXHRcdFx0a2V5c1tpXSArPSBcIjtcIjtcblx0XHR9XG5cdH1cblxuXHR2YXIgcmUgPSBuZXcgUmVnRXhwKFwiJig/OlwiICsga2V5cy5qb2luKFwifFwiKSArIFwifCNbeFhdW1xcXFxkYS1mQS1GXSs7P3wjXFxcXGQrOz8pXCIsIFwiZ1wiKSxcblx0ICAgIHJlcGxhY2UgPSBnZXRSZXBsYWNlcihlbnRpdHlNYXApO1xuXG5cdGZ1bmN0aW9uIHJlcGxhY2VyKHN0cil7XG5cdFx0aWYoc3RyLnN1YnN0cigtMSkgIT09IFwiO1wiKSBzdHIgKz0gXCI7XCI7XG5cdFx0cmV0dXJuIHJlcGxhY2Uoc3RyKTtcblx0fVxuXG5cdC8vVE9ETyBjb25zaWRlciBjcmVhdGluZyBhIG1lcmdlZCBtYXBcblx0cmV0dXJuIGZ1bmN0aW9uKHN0cil7XG5cdFx0cmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UocmUsIHJlcGxhY2VyKTtcblx0fTtcbn0oKSk7XG5cbmZ1bmN0aW9uIHNvcnRlcihhLCBiKXtcblx0cmV0dXJuIGEgPCBiID8gMSA6IC0xO1xufVxuXG5mdW5jdGlvbiBnZXRSZXBsYWNlcihtYXApe1xuXHRyZXR1cm4gZnVuY3Rpb24gcmVwbGFjZShzdHIpe1xuXHRcdGlmKHN0ci5jaGFyQXQoMSkgPT09IFwiI1wiKXtcblx0XHRcdGlmKHN0ci5jaGFyQXQoMikgPT09IFwiWFwiIHx8IHN0ci5jaGFyQXQoMikgPT09IFwieFwiKXtcblx0XHRcdFx0cmV0dXJuIGRlY29kZUNvZGVQb2ludChwYXJzZUludChzdHIuc3Vic3RyKDMpLCAxNikpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRlY29kZUNvZGVQb2ludChwYXJzZUludChzdHIuc3Vic3RyKDIpLCAxMCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gbWFwW3N0ci5zbGljZSgxLCAtMSldO1xuXHR9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0WE1MOiBkZWNvZGVYTUxTdHJpY3QsXG5cdEhUTUw6IGRlY29kZUhUTUwsXG5cdEhUTUxTdHJpY3Q6IGRlY29kZUhUTUxTdHJpY3Rcbn07XG5cbi8qKiovIH0pLFxuLyogMzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7XCJBYWN1dGVcIjpcIsOBXCIsXCJhYWN1dGVcIjpcIsOhXCIsXCJBY2lyY1wiOlwiw4JcIixcImFjaXJjXCI6XCLDolwiLFwiYWN1dGVcIjpcIsK0XCIsXCJBRWxpZ1wiOlwiw4ZcIixcImFlbGlnXCI6XCLDplwiLFwiQWdyYXZlXCI6XCLDgFwiLFwiYWdyYXZlXCI6XCLDoFwiLFwiYW1wXCI6XCImXCIsXCJBTVBcIjpcIiZcIixcIkFyaW5nXCI6XCLDhVwiLFwiYXJpbmdcIjpcIsOlXCIsXCJBdGlsZGVcIjpcIsODXCIsXCJhdGlsZGVcIjpcIsOjXCIsXCJBdW1sXCI6XCLDhFwiLFwiYXVtbFwiOlwiw6RcIixcImJydmJhclwiOlwiwqZcIixcIkNjZWRpbFwiOlwiw4dcIixcImNjZWRpbFwiOlwiw6dcIixcImNlZGlsXCI6XCLCuFwiLFwiY2VudFwiOlwiwqJcIixcImNvcHlcIjpcIsKpXCIsXCJDT1BZXCI6XCLCqVwiLFwiY3VycmVuXCI6XCLCpFwiLFwiZGVnXCI6XCLCsFwiLFwiZGl2aWRlXCI6XCLDt1wiLFwiRWFjdXRlXCI6XCLDiVwiLFwiZWFjdXRlXCI6XCLDqVwiLFwiRWNpcmNcIjpcIsOKXCIsXCJlY2lyY1wiOlwiw6pcIixcIkVncmF2ZVwiOlwiw4hcIixcImVncmF2ZVwiOlwiw6hcIixcIkVUSFwiOlwiw5BcIixcImV0aFwiOlwiw7BcIixcIkV1bWxcIjpcIsOLXCIsXCJldW1sXCI6XCLDq1wiLFwiZnJhYzEyXCI6XCLCvVwiLFwiZnJhYzE0XCI6XCLCvFwiLFwiZnJhYzM0XCI6XCLCvlwiLFwiZ3RcIjpcIj5cIixcIkdUXCI6XCI+XCIsXCJJYWN1dGVcIjpcIsONXCIsXCJpYWN1dGVcIjpcIsOtXCIsXCJJY2lyY1wiOlwiw45cIixcImljaXJjXCI6XCLDrlwiLFwiaWV4Y2xcIjpcIsKhXCIsXCJJZ3JhdmVcIjpcIsOMXCIsXCJpZ3JhdmVcIjpcIsOsXCIsXCJpcXVlc3RcIjpcIsK/XCIsXCJJdW1sXCI6XCLDj1wiLFwiaXVtbFwiOlwiw69cIixcImxhcXVvXCI6XCLCq1wiLFwibHRcIjpcIjxcIixcIkxUXCI6XCI8XCIsXCJtYWNyXCI6XCLCr1wiLFwibWljcm9cIjpcIsK1XCIsXCJtaWRkb3RcIjpcIsK3XCIsXCJuYnNwXCI6XCLCoFwiLFwibm90XCI6XCLCrFwiLFwiTnRpbGRlXCI6XCLDkVwiLFwibnRpbGRlXCI6XCLDsVwiLFwiT2FjdXRlXCI6XCLDk1wiLFwib2FjdXRlXCI6XCLDs1wiLFwiT2NpcmNcIjpcIsOUXCIsXCJvY2lyY1wiOlwiw7RcIixcIk9ncmF2ZVwiOlwiw5JcIixcIm9ncmF2ZVwiOlwiw7JcIixcIm9yZGZcIjpcIsKqXCIsXCJvcmRtXCI6XCLCulwiLFwiT3NsYXNoXCI6XCLDmFwiLFwib3NsYXNoXCI6XCLDuFwiLFwiT3RpbGRlXCI6XCLDlVwiLFwib3RpbGRlXCI6XCLDtVwiLFwiT3VtbFwiOlwiw5ZcIixcIm91bWxcIjpcIsO2XCIsXCJwYXJhXCI6XCLCtlwiLFwicGx1c21uXCI6XCLCsVwiLFwicG91bmRcIjpcIsKjXCIsXCJxdW90XCI6XCJcXFwiXCIsXCJRVU9UXCI6XCJcXFwiXCIsXCJyYXF1b1wiOlwiwrtcIixcInJlZ1wiOlwiwq5cIixcIlJFR1wiOlwiwq5cIixcInNlY3RcIjpcIsKnXCIsXCJzaHlcIjpcIsKtXCIsXCJzdXAxXCI6XCLCuVwiLFwic3VwMlwiOlwiwrJcIixcInN1cDNcIjpcIsKzXCIsXCJzemxpZ1wiOlwiw59cIixcIlRIT1JOXCI6XCLDnlwiLFwidGhvcm5cIjpcIsO+XCIsXCJ0aW1lc1wiOlwiw5dcIixcIlVhY3V0ZVwiOlwiw5pcIixcInVhY3V0ZVwiOlwiw7pcIixcIlVjaXJjXCI6XCLDm1wiLFwidWNpcmNcIjpcIsO7XCIsXCJVZ3JhdmVcIjpcIsOZXCIsXCJ1Z3JhdmVcIjpcIsO5XCIsXCJ1bWxcIjpcIsKoXCIsXCJVdW1sXCI6XCLDnFwiLFwidXVtbFwiOlwiw7xcIixcIllhY3V0ZVwiOlwiw51cIixcInlhY3V0ZVwiOlwiw71cIixcInllblwiOlwiwqVcIixcInl1bWxcIjpcIsO/XCJ9XG5cbi8qKiovIH0pLFxuLyogMzMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGRlY29kZU1hcCA9IF9fd2VicGFja19yZXF1aXJlX18oMzQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZUNvZGVQb2ludDtcblxuLy8gbW9kaWZpZWQgdmVyc2lvbiBvZiBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9oZS9ibG9iL21hc3Rlci9zcmMvaGUuanMjTDk0LUwxMTlcbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludChjb2RlUG9pbnQpe1xuXG5cdGlmKChjb2RlUG9pbnQgPj0gMHhEODAwICYmIGNvZGVQb2ludCA8PSAweERGRkYpIHx8IGNvZGVQb2ludCA+IDB4MTBGRkZGKXtcblx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdH1cblxuXHRpZihjb2RlUG9pbnQgaW4gZGVjb2RlTWFwKXtcblx0XHRjb2RlUG9pbnQgPSBkZWNvZGVNYXBbY29kZVBvaW50XTtcblx0fVxuXG5cdHZhciBvdXRwdXQgPSBcIlwiO1xuXG5cdGlmKGNvZGVQb2ludCA+IDB4RkZGRil7XG5cdFx0Y29kZVBvaW50IC09IDB4MTAwMDA7XG5cdFx0b3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRjtcblx0fVxuXG5cdG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCk7XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cblxuLyoqKi8gfSksXG4vKiAzNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcIjBcIjo2NTUzMyxcIjEyOFwiOjgzNjQsXCIxMzBcIjo4MjE4LFwiMTMxXCI6NDAyLFwiMTMyXCI6ODIyMixcIjEzM1wiOjgyMzAsXCIxMzRcIjo4MjI0LFwiMTM1XCI6ODIyNSxcIjEzNlwiOjcxMCxcIjEzN1wiOjgyNDAsXCIxMzhcIjozNTIsXCIxMzlcIjo4MjQ5LFwiMTQwXCI6MzM4LFwiMTQyXCI6MzgxLFwiMTQ1XCI6ODIxNixcIjE0NlwiOjgyMTcsXCIxNDdcIjo4MjIwLFwiMTQ4XCI6ODIyMSxcIjE0OVwiOjgyMjYsXCIxNTBcIjo4MjExLFwiMTUxXCI6ODIxMixcIjE1MlwiOjczMixcIjE1M1wiOjg0ODIsXCIxNTRcIjozNTMsXCIxNTVcIjo4MjUwLFwiMTU2XCI6MzM5LFwiMTU4XCI6MzgyLFwiMTU5XCI6Mzc2fVxuXG4vKioqLyB9KSxcbi8qIDM1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbnZhciBnZXRDaGlsZHJlbiA9IGV4cG9ydHMuZ2V0Q2hpbGRyZW4gPSBmdW5jdGlvbihlbGVtKXtcblx0cmV0dXJuIGVsZW0uY2hpbGRyZW47XG59O1xuXG52YXIgZ2V0UGFyZW50ID0gZXhwb3J0cy5nZXRQYXJlbnQgPSBmdW5jdGlvbihlbGVtKXtcblx0cmV0dXJuIGVsZW0ucGFyZW50O1xufTtcblxuZXhwb3J0cy5nZXRTaWJsaW5ncyA9IGZ1bmN0aW9uKGVsZW0pe1xuXHR2YXIgcGFyZW50ID0gZ2V0UGFyZW50KGVsZW0pO1xuXHRyZXR1cm4gcGFyZW50ID8gZ2V0Q2hpbGRyZW4ocGFyZW50KSA6IFtlbGVtXTtcbn07XG5cbmV4cG9ydHMuZ2V0QXR0cmlidXRlVmFsdWUgPSBmdW5jdGlvbihlbGVtLCBuYW1lKXtcblx0cmV0dXJuIGVsZW0uYXR0cmlicyAmJiBlbGVtLmF0dHJpYnNbbmFtZV07XG59O1xuXG5leHBvcnRzLmhhc0F0dHJpYiA9IGZ1bmN0aW9uKGVsZW0sIG5hbWUpe1xuXHRyZXR1cm4gISFlbGVtLmF0dHJpYnMgJiYgaGFzT3duUHJvcGVydHkuY2FsbChlbGVtLmF0dHJpYnMsIG5hbWUpO1xufTtcblxuZXhwb3J0cy5nZXROYW1lID0gZnVuY3Rpb24oZWxlbSl7XG5cdHJldHVybiBlbGVtLm5hbWU7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMzYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuZXhwb3J0cy5yZW1vdmVFbGVtZW50ID0gZnVuY3Rpb24oZWxlbSl7XG5cdGlmKGVsZW0ucHJldikgZWxlbS5wcmV2Lm5leHQgPSBlbGVtLm5leHQ7XG5cdGlmKGVsZW0ubmV4dCkgZWxlbS5uZXh0LnByZXYgPSBlbGVtLnByZXY7XG5cblx0aWYoZWxlbS5wYXJlbnQpe1xuXHRcdHZhciBjaGlsZHMgPSBlbGVtLnBhcmVudC5jaGlsZHJlbjtcblx0XHRjaGlsZHMuc3BsaWNlKGNoaWxkcy5sYXN0SW5kZXhPZihlbGVtKSwgMSk7XG5cdH1cbn07XG5cbmV4cG9ydHMucmVwbGFjZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtLCByZXBsYWNlbWVudCl7XG5cdHZhciBwcmV2ID0gcmVwbGFjZW1lbnQucHJldiA9IGVsZW0ucHJldjtcblx0aWYocHJldil7XG5cdFx0cHJldi5uZXh0ID0gcmVwbGFjZW1lbnQ7XG5cdH1cblxuXHR2YXIgbmV4dCA9IHJlcGxhY2VtZW50Lm5leHQgPSBlbGVtLm5leHQ7XG5cdGlmKG5leHQpe1xuXHRcdG5leHQucHJldiA9IHJlcGxhY2VtZW50O1xuXHR9XG5cblx0dmFyIHBhcmVudCA9IHJlcGxhY2VtZW50LnBhcmVudCA9IGVsZW0ucGFyZW50O1xuXHRpZihwYXJlbnQpe1xuXHRcdHZhciBjaGlsZHMgPSBwYXJlbnQuY2hpbGRyZW47XG5cdFx0Y2hpbGRzW2NoaWxkcy5sYXN0SW5kZXhPZihlbGVtKV0gPSByZXBsYWNlbWVudDtcblx0fVxufTtcblxuZXhwb3J0cy5hcHBlbmRDaGlsZCA9IGZ1bmN0aW9uKGVsZW0sIGNoaWxkKXtcblx0Y2hpbGQucGFyZW50ID0gZWxlbTtcblxuXHRpZihlbGVtLmNoaWxkcmVuLnB1c2goY2hpbGQpICE9PSAxKXtcblx0XHR2YXIgc2libGluZyA9IGVsZW0uY2hpbGRyZW5bZWxlbS5jaGlsZHJlbi5sZW5ndGggLSAyXTtcblx0XHRzaWJsaW5nLm5leHQgPSBjaGlsZDtcblx0XHRjaGlsZC5wcmV2ID0gc2libGluZztcblx0XHRjaGlsZC5uZXh0ID0gbnVsbDtcblx0fVxufTtcblxuZXhwb3J0cy5hcHBlbmQgPSBmdW5jdGlvbihlbGVtLCBuZXh0KXtcblx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50LFxuXHRcdGN1cnJOZXh0ID0gZWxlbS5uZXh0O1xuXG5cdG5leHQubmV4dCA9IGN1cnJOZXh0O1xuXHRuZXh0LnByZXYgPSBlbGVtO1xuXHRlbGVtLm5leHQgPSBuZXh0O1xuXHRuZXh0LnBhcmVudCA9IHBhcmVudDtcblxuXHRpZihjdXJyTmV4dCl7XG5cdFx0Y3Vyck5leHQucHJldiA9IG5leHQ7XG5cdFx0aWYocGFyZW50KXtcblx0XHRcdHZhciBjaGlsZHMgPSBwYXJlbnQuY2hpbGRyZW47XG5cdFx0XHRjaGlsZHMuc3BsaWNlKGNoaWxkcy5sYXN0SW5kZXhPZihjdXJyTmV4dCksIDAsIG5leHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmKHBhcmVudCl7XG5cdFx0cGFyZW50LmNoaWxkcmVuLnB1c2gobmV4dCk7XG5cdH1cbn07XG5cbmV4cG9ydHMucHJlcGVuZCA9IGZ1bmN0aW9uKGVsZW0sIHByZXYpe1xuXHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnQ7XG5cdGlmKHBhcmVudCl7XG5cdFx0dmFyIGNoaWxkcyA9IHBhcmVudC5jaGlsZHJlbjtcblx0XHRjaGlsZHMuc3BsaWNlKGNoaWxkcy5sYXN0SW5kZXhPZihlbGVtKSwgMCwgcHJldik7XG5cdH1cblxuXHRpZihlbGVtLnByZXYpe1xuXHRcdGVsZW0ucHJldi5uZXh0ID0gcHJldjtcblx0fVxuXHRcblx0cHJldi5wYXJlbnQgPSBwYXJlbnQ7XG5cdHByZXYucHJldiA9IGVsZW0ucHJldjtcblx0cHJldi5uZXh0ID0gZWxlbTtcblx0ZWxlbS5wcmV2ID0gcHJldjtcbn07XG5cblxuXG5cbi8qKiovIH0pLFxuLyogMzcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGlzVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KS5pc1RhZztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdGZpbHRlcjogZmlsdGVyLFxuXHRmaW5kOiBmaW5kLFxuXHRmaW5kT25lQ2hpbGQ6IGZpbmRPbmVDaGlsZCxcblx0ZmluZE9uZTogZmluZE9uZSxcblx0ZXhpc3RzT25lOiBleGlzdHNPbmUsXG5cdGZpbmRBbGw6IGZpbmRBbGxcbn07XG5cbmZ1bmN0aW9uIGZpbHRlcih0ZXN0LCBlbGVtZW50LCByZWN1cnNlLCBsaW1pdCl7XG5cdGlmKCFBcnJheS5pc0FycmF5KGVsZW1lbnQpKSBlbGVtZW50ID0gW2VsZW1lbnRdO1xuXG5cdGlmKHR5cGVvZiBsaW1pdCAhPT0gXCJudW1iZXJcIiB8fCAhaXNGaW5pdGUobGltaXQpKXtcblx0XHRsaW1pdCA9IEluZmluaXR5O1xuXHR9XG5cdHJldHVybiBmaW5kKHRlc3QsIGVsZW1lbnQsIHJlY3Vyc2UgIT09IGZhbHNlLCBsaW1pdCk7XG59XG5cbmZ1bmN0aW9uIGZpbmQodGVzdCwgZWxlbXMsIHJlY3Vyc2UsIGxpbWl0KXtcblx0dmFyIHJlc3VsdCA9IFtdLCBjaGlsZHM7XG5cblx0Zm9yKHZhciBpID0gMCwgaiA9IGVsZW1zLmxlbmd0aDsgaSA8IGo7IGkrKyl7XG5cdFx0aWYodGVzdChlbGVtc1tpXSkpe1xuXHRcdFx0cmVzdWx0LnB1c2goZWxlbXNbaV0pO1xuXHRcdFx0aWYoLS1saW1pdCA8PSAwKSBicmVhaztcblx0XHR9XG5cblx0XHRjaGlsZHMgPSBlbGVtc1tpXS5jaGlsZHJlbjtcblx0XHRpZihyZWN1cnNlICYmIGNoaWxkcyAmJiBjaGlsZHMubGVuZ3RoID4gMCl7XG5cdFx0XHRjaGlsZHMgPSBmaW5kKHRlc3QsIGNoaWxkcywgcmVjdXJzZSwgbGltaXQpO1xuXHRcdFx0cmVzdWx0ID0gcmVzdWx0LmNvbmNhdChjaGlsZHMpO1xuXHRcdFx0bGltaXQgLT0gY2hpbGRzLmxlbmd0aDtcblx0XHRcdGlmKGxpbWl0IDw9IDApIGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRPbmVDaGlsZCh0ZXN0LCBlbGVtcyl7XG5cdGZvcih2YXIgaSA9IDAsIGwgPSBlbGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdGlmKHRlc3QoZWxlbXNbaV0pKSByZXR1cm4gZWxlbXNbaV07XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluZE9uZSh0ZXN0LCBlbGVtcyl7XG5cdHZhciBlbGVtID0gbnVsbDtcblxuXHRmb3IodmFyIGkgPSAwLCBsID0gZWxlbXMubGVuZ3RoOyBpIDwgbCAmJiAhZWxlbTsgaSsrKXtcblx0XHRpZighaXNUYWcoZWxlbXNbaV0pKXtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH0gZWxzZSBpZih0ZXN0KGVsZW1zW2ldKSl7XG5cdFx0XHRlbGVtID0gZWxlbXNbaV07XG5cdFx0fSBlbHNlIGlmKGVsZW1zW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0ZWxlbSA9IGZpbmRPbmUodGVzdCwgZWxlbXNbaV0uY2hpbGRyZW4pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBleGlzdHNPbmUodGVzdCwgZWxlbXMpe1xuXHRmb3IodmFyIGkgPSAwLCBsID0gZWxlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKXtcblx0XHRpZihcblx0XHRcdGlzVGFnKGVsZW1zW2ldKSAmJiAoXG5cdFx0XHRcdHRlc3QoZWxlbXNbaV0pIHx8IChcblx0XHRcdFx0XHRlbGVtc1tpXS5jaGlsZHJlbi5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0ZXhpc3RzT25lKHRlc3QsIGVsZW1zW2ldLmNoaWxkcmVuKVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0KXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZmluZEFsbCh0ZXN0LCBlbGVtcyl7XG5cdHZhciByZXN1bHQgPSBbXTtcblx0Zm9yKHZhciBpID0gMCwgaiA9IGVsZW1zLmxlbmd0aDsgaSA8IGo7IGkrKyl7XG5cdFx0aWYoIWlzVGFnKGVsZW1zW2ldKSkgY29udGludWU7XG5cdFx0aWYodGVzdChlbGVtc1tpXSkpIHJlc3VsdC5wdXNoKGVsZW1zW2ldKTtcblxuXHRcdGlmKGVsZW1zW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0cmVzdWx0ID0gcmVzdWx0LmNvbmNhdChmaW5kQWxsKHRlc3QsIGVsZW1zW2ldLmNoaWxkcmVuKSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG5cblxuLyoqKi8gfSksXG4vKiAzOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgRWxlbWVudFR5cGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGlzVGFnID0gZXhwb3J0cy5pc1RhZyA9IEVsZW1lbnRUeXBlLmlzVGFnO1xuXG5leHBvcnRzLnRlc3RFbGVtZW50ID0gZnVuY3Rpb24ob3B0aW9ucywgZWxlbWVudCl7XG5cdGZvcih2YXIga2V5IGluIG9wdGlvbnMpe1xuXHRcdGlmKCFvcHRpb25zLmhhc093blByb3BlcnR5KGtleSkpO1xuXHRcdGVsc2UgaWYoa2V5ID09PSBcInRhZ19uYW1lXCIpe1xuXHRcdFx0aWYoIWlzVGFnKGVsZW1lbnQpIHx8ICFvcHRpb25zLnRhZ19uYW1lKGVsZW1lbnQubmFtZSkpe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmKGtleSA9PT0gXCJ0YWdfdHlwZVwiKXtcblx0XHRcdGlmKCFvcHRpb25zLnRhZ190eXBlKGVsZW1lbnQudHlwZSkpIHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2UgaWYoa2V5ID09PSBcInRhZ19jb250YWluc1wiKXtcblx0XHRcdGlmKGlzVGFnKGVsZW1lbnQpIHx8ICFvcHRpb25zLnRhZ19jb250YWlucyhlbGVtZW50LmRhdGEpKXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZighZWxlbWVudC5hdHRyaWJzIHx8ICFvcHRpb25zW2tleV0oZWxlbWVudC5hdHRyaWJzW2tleV0pKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG52YXIgQ2hlY2tzID0ge1xuXHR0YWdfbmFtZTogZnVuY3Rpb24obmFtZSl7XG5cdFx0aWYodHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIil7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7IHJldHVybiBpc1RhZyhlbGVtKSAmJiBuYW1lKGVsZW0ubmFtZSk7IH07XG5cdFx0fSBlbHNlIGlmKG5hbWUgPT09IFwiKlwiKXtcblx0XHRcdHJldHVybiBpc1RhZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gaXNUYWcoZWxlbSkgJiYgZWxlbS5uYW1lID09PSBuYW1lOyB9O1xuXHRcdH1cblx0fSxcblx0dGFnX3R5cGU6IGZ1bmN0aW9uKHR5cGUpe1xuXHRcdGlmKHR5cGVvZiB0eXBlID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gdHlwZShlbGVtLnR5cGUpOyB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7IHJldHVybiBlbGVtLnR5cGUgPT09IHR5cGU7IH07XG5cdFx0fVxuXHR9LFxuXHR0YWdfY29udGFpbnM6IGZ1bmN0aW9uKGRhdGEpe1xuXHRcdGlmKHR5cGVvZiBkYXRhID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gIWlzVGFnKGVsZW0pICYmIGRhdGEoZWxlbS5kYXRhKTsgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gIWlzVGFnKGVsZW0pICYmIGVsZW0uZGF0YSA9PT0gZGF0YTsgfTtcblx0XHR9XG5cdH1cbn07XG5cbmZ1bmN0aW9uIGdldEF0dHJpYkNoZWNrKGF0dHJpYiwgdmFsdWUpe1xuXHRpZih0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIil7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0peyByZXR1cm4gZWxlbS5hdHRyaWJzICYmIHZhbHVlKGVsZW0uYXR0cmlic1thdHRyaWJdKTsgfTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7IHJldHVybiBlbGVtLmF0dHJpYnMgJiYgZWxlbS5hdHRyaWJzW2F0dHJpYl0gPT09IHZhbHVlOyB9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVGdW5jcyhhLCBiKXtcblx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe1xuXHRcdHJldHVybiBhKGVsZW0pIHx8IGIoZWxlbSk7XG5cdH07XG59XG5cbmV4cG9ydHMuZ2V0RWxlbWVudHMgPSBmdW5jdGlvbihvcHRpb25zLCBlbGVtZW50LCByZWN1cnNlLCBsaW1pdCl7XG5cdHZhciBmdW5jcyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpLm1hcChmdW5jdGlvbihrZXkpe1xuXHRcdHZhciB2YWx1ZSA9IG9wdGlvbnNba2V5XTtcblx0XHRyZXR1cm4ga2V5IGluIENoZWNrcyA/IENoZWNrc1trZXldKHZhbHVlKSA6IGdldEF0dHJpYkNoZWNrKGtleSwgdmFsdWUpO1xuXHR9KTtcblxuXHRyZXR1cm4gZnVuY3MubGVuZ3RoID09PSAwID8gW10gOiB0aGlzLmZpbHRlcihcblx0XHRmdW5jcy5yZWR1Y2UoY29tYmluZUZ1bmNzKSxcblx0XHRlbGVtZW50LCByZWN1cnNlLCBsaW1pdFxuXHQpO1xufTtcblxuZXhwb3J0cy5nZXRFbGVtZW50QnlJZCA9IGZ1bmN0aW9uKGlkLCBlbGVtZW50LCByZWN1cnNlKXtcblx0aWYoIUFycmF5LmlzQXJyYXkoZWxlbWVudCkpIGVsZW1lbnQgPSBbZWxlbWVudF07XG5cdHJldHVybiB0aGlzLmZpbmRPbmUoZ2V0QXR0cmliQ2hlY2soXCJpZFwiLCBpZCksIGVsZW1lbnQsIHJlY3Vyc2UgIT09IGZhbHNlKTtcbn07XG5cbmV4cG9ydHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBmdW5jdGlvbihuYW1lLCBlbGVtZW50LCByZWN1cnNlLCBsaW1pdCl7XG5cdHJldHVybiB0aGlzLmZpbHRlcihDaGVja3MudGFnX25hbWUobmFtZSksIGVsZW1lbnQsIHJlY3Vyc2UsIGxpbWl0KTtcbn07XG5cbmV4cG9ydHMuZ2V0RWxlbWVudHNCeVRhZ1R5cGUgPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCByZWN1cnNlLCBsaW1pdCl7XG5cdHJldHVybiB0aGlzLmZpbHRlcihDaGVja3MudGFnX3R5cGUodHlwZSksIGVsZW1lbnQsIHJlY3Vyc2UsIGxpbWl0KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyByZW1vdmVTdWJzZXRzXG4vLyBHaXZlbiBhbiBhcnJheSBvZiBub2RlcywgcmVtb3ZlIGFueSBtZW1iZXIgdGhhdCBpcyBjb250YWluZWQgYnkgYW5vdGhlci5cbmV4cG9ydHMucmVtb3ZlU3Vic2V0cyA9IGZ1bmN0aW9uKG5vZGVzKSB7XG5cdHZhciBpZHggPSBub2Rlcy5sZW5ndGgsIG5vZGUsIGFuY2VzdG9yLCByZXBsYWNlO1xuXG5cdC8vIENoZWNrIGlmIGVhY2ggbm9kZSAob3Igb25lIG9mIGl0cyBhbmNlc3RvcnMpIGlzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZVxuXHQvLyBhcnJheS5cblx0d2hpbGUgKC0taWR4ID4gLTEpIHtcblx0XHRub2RlID0gYW5jZXN0b3IgPSBub2Rlc1tpZHhdO1xuXG5cdFx0Ly8gVGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBub2RlIHVuZGVyIGNvbnNpZGVyYXRpb25cblx0XHRub2Rlc1tpZHhdID0gbnVsbDtcblx0XHRyZXBsYWNlID0gdHJ1ZTtcblxuXHRcdHdoaWxlIChhbmNlc3Rvcikge1xuXHRcdFx0aWYgKG5vZGVzLmluZGV4T2YoYW5jZXN0b3IpID4gLTEpIHtcblx0XHRcdFx0cmVwbGFjZSA9IGZhbHNlO1xuXHRcdFx0XHRub2Rlcy5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbm9kZSBoYXMgYmVlbiBmb3VuZCB0byBiZSB1bmlxdWUsIHJlLWluc2VydCBpdC5cblx0XHRpZiAocmVwbGFjZSkge1xuXHRcdFx0bm9kZXNbaWR4XSA9IG5vZGU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5vZGVzO1xufTtcblxuLy8gU291cmNlOiBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLW5vZGUtY29tcGFyZWRvY3VtZW50cG9zaXRpb25cbnZhciBQT1NJVElPTiA9IHtcblx0RElTQ09OTkVDVEVEOiAxLFxuXHRQUkVDRURJTkc6IDIsXG5cdEZPTExPV0lORzogNCxcblx0Q09OVEFJTlM6IDgsXG5cdENPTlRBSU5FRF9CWTogMTZcbn07XG5cbi8vIENvbXBhcmUgdGhlIHBvc2l0aW9uIG9mIG9uZSBub2RlIGFnYWluc3QgYW5vdGhlciBub2RlIGluIGFueSBvdGhlciBkb2N1bWVudC5cbi8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBiaXRtYXNrIHdpdGggdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4vL1xuLy8gZG9jdW1lbnQgb3JkZXI6XG4vLyA+IFRoZXJlIGlzIGFuIG9yZGVyaW5nLCBkb2N1bWVudCBvcmRlciwgZGVmaW5lZCBvbiBhbGwgdGhlIG5vZGVzIGluIHRoZVxuLy8gPiBkb2N1bWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuLy8gPiBYTUwgcmVwcmVzZW50YXRpb24gb2YgZWFjaCBub2RlIG9jY3VycyBpbiB0aGUgWE1MIHJlcHJlc2VudGF0aW9uIG9mIHRoZVxuLy8gPiBkb2N1bWVudCBhZnRlciBleHBhbnNpb24gb2YgZ2VuZXJhbCBlbnRpdGllcy4gVGh1cywgdGhlIGRvY3VtZW50IGVsZW1lbnRcbi8vID4gbm9kZSB3aWxsIGJlIHRoZSBmaXJzdCBub2RlLiBFbGVtZW50IG5vZGVzIG9jY3VyIGJlZm9yZSB0aGVpciBjaGlsZHJlbi5cbi8vID4gVGh1cywgZG9jdW1lbnQgb3JkZXIgb3JkZXJzIGVsZW1lbnQgbm9kZXMgaW4gb3JkZXIgb2YgdGhlIG9jY3VycmVuY2Ugb2Zcbi8vID4gdGhlaXIgc3RhcnQtdGFnIGluIHRoZSBYTUwgKGFmdGVyIGV4cGFuc2lvbiBvZiBlbnRpdGllcykuIFRoZSBhdHRyaWJ1dGVcbi8vID4gbm9kZXMgb2YgYW4gZWxlbWVudCBvY2N1ciBhZnRlciB0aGUgZWxlbWVudCBhbmQgYmVmb3JlIGl0cyBjaGlsZHJlbi4gVGhlXG4vLyA+IHJlbGF0aXZlIG9yZGVyIG9mIGF0dHJpYnV0ZSBub2RlcyBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuL1xuLy8gU291cmNlOlxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtQ29yZS9nbG9zc2FyeS5odG1sI2R0LWRvY3VtZW50LW9yZGVyXG4vL1xuLy8gQGFyZ3VtZW50IHtOb2RlfSBub2RhQSBUaGUgZmlyc3Qgbm9kZSB0byB1c2UgaW4gdGhlIGNvbXBhcmlzb25cbi8vIEBhcmd1bWVudCB7Tm9kZX0gbm9kZUIgVGhlIHNlY29uZCBub2RlIHRvIHVzZSBpbiB0aGUgY29tcGFyaXNvblxuLy9cbi8vIEByZXR1cm4ge051bWJlcn0gQSBiaXRtYXNrIGRlc2NyaWJpbmcgdGhlIGlucHV0IG5vZGVzJyByZWxhdGl2ZSBwb3NpdGlvbi5cbi8vICAgICAgICAgU2VlIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tbm9kZS1jb21wYXJlZG9jdW1lbnRwb3NpdGlvbiBmb3Jcbi8vICAgICAgICAgYSBkZXNjcmlwdGlvbiBvZiB0aGVzZSB2YWx1ZXMuXG52YXIgY29tcGFyZVBvcyA9IGV4cG9ydHMuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPSBmdW5jdGlvbihub2RlQSwgbm9kZUIpIHtcblx0dmFyIGFQYXJlbnRzID0gW107XG5cdHZhciBiUGFyZW50cyA9IFtdO1xuXHR2YXIgY3VycmVudCwgc2hhcmVkUGFyZW50LCBzaWJsaW5ncywgYVNpYmxpbmcsIGJTaWJsaW5nLCBpZHg7XG5cblx0aWYgKG5vZGVBID09PSBub2RlQikge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y3VycmVudCA9IG5vZGVBO1xuXHR3aGlsZSAoY3VycmVudCkge1xuXHRcdGFQYXJlbnRzLnVuc2hpZnQoY3VycmVudCk7XG5cdFx0Y3VycmVudCA9IGN1cnJlbnQucGFyZW50O1xuXHR9XG5cdGN1cnJlbnQgPSBub2RlQjtcblx0d2hpbGUgKGN1cnJlbnQpIHtcblx0XHRiUGFyZW50cy51bnNoaWZ0KGN1cnJlbnQpO1xuXHRcdGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcblx0fVxuXG5cdGlkeCA9IDA7XG5cdHdoaWxlIChhUGFyZW50c1tpZHhdID09PSBiUGFyZW50c1tpZHhdKSB7XG5cdFx0aWR4Kys7XG5cdH1cblxuXHRpZiAoaWR4ID09PSAwKSB7XG5cdFx0cmV0dXJuIFBPU0lUSU9OLkRJU0NPTk5FQ1RFRDtcblx0fVxuXG5cdHNoYXJlZFBhcmVudCA9IGFQYXJlbnRzW2lkeCAtIDFdO1xuXHRzaWJsaW5ncyA9IHNoYXJlZFBhcmVudC5jaGlsZHJlbjtcblx0YVNpYmxpbmcgPSBhUGFyZW50c1tpZHhdO1xuXHRiU2libGluZyA9IGJQYXJlbnRzW2lkeF07XG5cblx0aWYgKHNpYmxpbmdzLmluZGV4T2YoYVNpYmxpbmcpID4gc2libGluZ3MuaW5kZXhPZihiU2libGluZykpIHtcblx0XHRpZiAoc2hhcmVkUGFyZW50ID09PSBub2RlQikge1xuXHRcdFx0cmV0dXJuIFBPU0lUSU9OLkZPTExPV0lORyB8IFBPU0lUSU9OLkNPTlRBSU5FRF9CWTtcblx0XHR9XG5cdFx0cmV0dXJuIFBPU0lUSU9OLkZPTExPV0lORztcblx0fSBlbHNlIHtcblx0XHRpZiAoc2hhcmVkUGFyZW50ID09PSBub2RlQSkge1xuXHRcdFx0cmV0dXJuIFBPU0lUSU9OLlBSRUNFRElORyB8IFBPU0lUSU9OLkNPTlRBSU5TO1xuXHRcdH1cblx0XHRyZXR1cm4gUE9TSVRJT04uUFJFQ0VESU5HO1xuXHR9XG59O1xuXG4vLyBTb3J0IGFuIGFycmF5IG9mIG5vZGVzIGJhc2VkIG9uIHRoZWlyIHJlbGF0aXZlIHBvc2l0aW9uIGluIHRoZSBkb2N1bWVudCBhbmRcbi8vIHJlbW92ZSBhbnkgZHVwbGljYXRlIG5vZGVzLiBJZiB0aGUgYXJyYXkgY29udGFpbnMgbm9kZXMgdGhhdCBkbyBub3QgYmVsb25nXG4vLyB0byB0aGUgc2FtZSBkb2N1bWVudCwgc29ydCBvcmRlciBpcyB1bnNwZWNpZmllZC5cbi8vXG4vLyBAYXJndW1lbnQge0FycmF5fSBub2RlcyBBcnJheSBvZiBET00gbm9kZXNcbi8vXG4vLyBAcmV0dXJucyB7QXJyYXl9IGNvbGxlY3Rpb24gb2YgdW5pcXVlIG5vZGVzLCBzb3J0ZWQgaW4gZG9jdW1lbnQgb3JkZXJcbmV4cG9ydHMudW5pcXVlU29ydCA9IGZ1bmN0aW9uKG5vZGVzKSB7XG5cdHZhciBpZHggPSBub2Rlcy5sZW5ndGgsIG5vZGUsIHBvc2l0aW9uO1xuXG5cdG5vZGVzID0gbm9kZXMuc2xpY2UoKTtcblxuXHR3aGlsZSAoLS1pZHggPiAtMSkge1xuXHRcdG5vZGUgPSBub2Rlc1tpZHhdO1xuXHRcdHBvc2l0aW9uID0gbm9kZXMuaW5kZXhPZihub2RlKTtcblx0XHRpZiAocG9zaXRpb24gPiAtMSAmJiBwb3NpdGlvbiA8IGlkeCkge1xuXHRcdFx0bm9kZXMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0fVxuXHR9XG5cdG5vZGVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuXHRcdHZhciByZWxhdGl2ZSA9IGNvbXBhcmVQb3MoYSwgYik7XG5cdFx0aWYgKHJlbGF0aXZlICYgUE9TSVRJT04uUFJFQ0VESU5HKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fSBlbHNlIGlmIChyZWxhdGl2ZSAmIFBPU0lUSU9OLkZPTExPV0lORykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9KTtcblxuXHRyZXR1cm4gbm9kZXM7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLypcblx0Y29tcGlsZXMgYSBzZWxlY3RvciB0byBhbiBleGVjdXRhYmxlIGZ1bmN0aW9uXG4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBpbGVGYWN0b3J5O1xuXG52YXIgcGFyc2UgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKSxcblx0QmFzZUZ1bmNzICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLFxuXHRzb3J0UnVsZXMgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpLFxuXHRwcm9jZWR1cmUgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpLFxuXHRydWxlc0ZhY3RvcnkgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpLFxuXHRwc2V1ZG9zRmFjdG9yeSA9IF9fd2VicGFja19yZXF1aXJlX18oODYpLFxuXHR0cnVlRnVuYyAgICAgICA9IEJhc2VGdW5jcy50cnVlRnVuYyxcblx0ZmFsc2VGdW5jICAgICAgPSBCYXNlRnVuY3MuZmFsc2VGdW5jO1xuXG5mdW5jdGlvbiBjb21waWxlRmFjdG9yeShhZGFwdGVyKXtcblx0dmFyIFBzZXVkb3MgICAgID0gcHNldWRvc0ZhY3RvcnkoYWRhcHRlciksXG5cdFx0ZmlsdGVycyAgICAgPSBQc2V1ZG9zLmZpbHRlcnMsXG5cdFx0UnVsZXMgXHRcdFx0PSBydWxlc0ZhY3RvcnkoYWRhcHRlciwgUHNldWRvcyk7XG5cblx0ZnVuY3Rpb24gY29tcGlsZShzZWxlY3Rvciwgb3B0aW9ucywgY29udGV4dCl7XG5cdFx0dmFyIG5leHQgPSBjb21waWxlVW5zYWZlKHNlbGVjdG9yLCBvcHRpb25zLCBjb250ZXh0KTtcblx0XHRyZXR1cm4gd3JhcChuZXh0KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHdyYXAobmV4dCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGJhc2UoZWxlbSl7XG5cdFx0XHRyZXR1cm4gYWRhcHRlci5pc1RhZyhlbGVtKSAmJiBuZXh0KGVsZW0pO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBjb21waWxlVW5zYWZlKHNlbGVjdG9yLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHR2YXIgdG9rZW4gPSBwYXJzZShzZWxlY3Rvciwgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIGNvbXBpbGVUb2tlbih0b2tlbiwgb3B0aW9ucywgY29udGV4dCk7XG5cdH1cblxuXHRmdW5jdGlvbiBpbmNsdWRlc1Njb3BlUHNldWRvKHQpe1xuXHRcdHJldHVybiB0LnR5cGUgPT09IFwicHNldWRvXCIgJiYgKFxuXHRcdFx0dC5uYW1lID09PSBcInNjb3BlXCIgfHwgKFxuXHRcdFx0XHRBcnJheS5pc0FycmF5KHQuZGF0YSkgJiZcblx0XHRcdFx0dC5kYXRhLnNvbWUoZnVuY3Rpb24oZGF0YSl7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGEuc29tZShpbmNsdWRlc1Njb3BlUHNldWRvKTtcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0dmFyIERFU0NFTkRBTlRfVE9LRU4gPSB7dHlwZTogXCJkZXNjZW5kYW50XCJ9LFxuXHRcdEZMRVhJQkxFX0RFU0NFTkRBTlRfVE9LRU4gPSB7dHlwZTogXCJfZmxleGlibGVEZXNjZW5kYW50XCJ9LFxuXHRcdFNDT1BFX1RPS0VOID0ge3R5cGU6IFwicHNldWRvXCIsIG5hbWU6IFwic2NvcGVcIn0sXG5cdFx0UExBQ0VIT0xERVJfRUxFTUVOVCA9IHt9O1xuXG5cdC8vQ1NTIDQgU3BlYyAoRHJhZnQpOiAzLjMuMS4gQWJzb2x1dGl6aW5nIGEgU2NvcGUtcmVsYXRpdmUgU2VsZWN0b3Jcblx0Ly9odHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnM0LyNhYnNvbHV0aXppbmdcblx0ZnVuY3Rpb24gYWJzb2x1dGl6ZSh0b2tlbiwgY29udGV4dCl7XG5cdFx0Ly9UT0RPIGJldHRlciBjaGVjayBpZiBjb250ZXh0IGlzIGRvY3VtZW50XG5cdFx0dmFyIGhhc0NvbnRleHQgPSAhIWNvbnRleHQgJiYgISFjb250ZXh0Lmxlbmd0aCAmJiBjb250ZXh0LmV2ZXJ5KGZ1bmN0aW9uKGUpe1xuXHRcdFx0cmV0dXJuIGUgPT09IFBMQUNFSE9MREVSX0VMRU1FTlQgfHwgISFhZGFwdGVyLmdldFBhcmVudChlKTtcblx0XHR9KTtcblxuXG5cdFx0dG9rZW4uZm9yRWFjaChmdW5jdGlvbih0KXtcblx0XHRcdGlmKHQubGVuZ3RoID4gMCAmJiBpc1RyYXZlcnNhbCh0WzBdKSAmJiB0WzBdLnR5cGUgIT09IFwiZGVzY2VuZGFudFwiKXtcblx0XHRcdFx0Ly9kb24ndCByZXR1cm4gaW4gZWxzZSBicmFuY2hcblx0XHRcdH0gZWxzZSBpZihoYXNDb250ZXh0ICYmICFpbmNsdWRlc1Njb3BlUHNldWRvKHQpKXtcblx0XHRcdFx0dC51bnNoaWZ0KERFU0NFTkRBTlRfVE9LRU4pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0LnVuc2hpZnQoU0NPUEVfVE9LRU4pO1xuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29tcGlsZVRva2VuKHRva2VuLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHR0b2tlbiA9IHRva2VuLmZpbHRlcihmdW5jdGlvbih0KXsgcmV0dXJuIHQubGVuZ3RoID4gMDsgfSk7XG5cblx0XHR0b2tlbi5mb3JFYWNoKHNvcnRSdWxlcyk7XG5cblx0XHR2YXIgaXNBcnJheUNvbnRleHQgPSBBcnJheS5pc0FycmF5KGNvbnRleHQpO1xuXG5cdFx0Y29udGV4dCA9IChvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dCkgfHwgY29udGV4dDtcblxuXHRcdGlmKGNvbnRleHQgJiYgIWlzQXJyYXlDb250ZXh0KSBjb250ZXh0ID0gW2NvbnRleHRdO1xuXG5cdFx0YWJzb2x1dGl6ZSh0b2tlbiwgY29udGV4dCk7XG5cblx0XHR2YXIgc2hvdWxkVGVzdE5leHRTaWJsaW5ncyA9IGZhbHNlO1xuXG5cdFx0dmFyIHF1ZXJ5ID0gdG9rZW5cblx0XHRcdC5tYXAoZnVuY3Rpb24ocnVsZXMpe1xuXHRcdFx0XHRpZihydWxlc1swXSAmJiBydWxlc1sxXSAmJiBydWxlc1swXS5uYW1lID09PSBcInNjb3BlXCIpe1xuXHRcdFx0XHRcdHZhciBydWxlVHlwZSA9IHJ1bGVzWzFdLnR5cGU7XG5cdFx0XHRcdFx0aWYoaXNBcnJheUNvbnRleHQgJiYgcnVsZVR5cGUgPT09IFwiZGVzY2VuZGFudFwiKSBydWxlc1sxXSA9IEZMRVhJQkxFX0RFU0NFTkRBTlRfVE9LRU47XG5cdFx0XHRcdFx0ZWxzZSBpZihydWxlVHlwZSA9PT0gXCJhZGphY2VudFwiIHx8IHJ1bGVUeXBlID09PSBcInNpYmxpbmdcIikgc2hvdWxkVGVzdE5leHRTaWJsaW5ncyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVSdWxlcyhydWxlcywgb3B0aW9ucywgY29udGV4dCk7XG5cdFx0XHR9KVxuXHRcdFx0LnJlZHVjZShyZWR1Y2VSdWxlcywgZmFsc2VGdW5jKTtcblxuXHRcdHF1ZXJ5LnNob3VsZFRlc3ROZXh0U2libGluZ3MgPSBzaG91bGRUZXN0TmV4dFNpYmxpbmdzO1xuXG5cdFx0cmV0dXJuIHF1ZXJ5O1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNUcmF2ZXJzYWwodCl7XG5cdFx0cmV0dXJuIHByb2NlZHVyZVt0LnR5cGVdIDwgMDtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvbXBpbGVSdWxlcyhydWxlcywgb3B0aW9ucywgY29udGV4dCl7XG5cdFx0cmV0dXJuIHJ1bGVzLnJlZHVjZShmdW5jdGlvbihmdW5jLCBydWxlKXtcblx0XHRcdGlmKGZ1bmMgPT09IGZhbHNlRnVuYykgcmV0dXJuIGZ1bmM7XG5cdFx0XHRyZXR1cm4gUnVsZXNbcnVsZS50eXBlXShmdW5jLCBydWxlLCBvcHRpb25zLCBjb250ZXh0KTtcblx0XHR9LCBvcHRpb25zICYmIG9wdGlvbnMucm9vdEZ1bmMgfHwgdHJ1ZUZ1bmMpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVkdWNlUnVsZXMoYSwgYil7XG5cdFx0aWYoYiA9PT0gZmFsc2VGdW5jIHx8IGEgPT09IHRydWVGdW5jKXtcblx0XHRcdHJldHVybiBhO1xuXHRcdH1cblx0XHRpZihhID09PSBmYWxzZUZ1bmMgfHwgYiA9PT0gdHJ1ZUZ1bmMpe1xuXHRcdFx0cmV0dXJuIGI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmUoZWxlbSl7XG5cdFx0XHRyZXR1cm4gYShlbGVtKSB8fCBiKGVsZW0pO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBjb250YWluc1RyYXZlcnNhbCh0KXtcblx0XHRyZXR1cm4gdC5zb21lKGlzVHJhdmVyc2FsKTtcblx0fVxuXG5cdC8vOm5vdCwgOmhhcyBhbmQgOm1hdGNoZXMgaGF2ZSB0byBjb21waWxlIHNlbGVjdG9yc1xuXHQvL2RvaW5nIHRoaXMgaW4gbGliL3BzZXVkb3MuanMgd291bGQgbGVhZCB0byBjaXJjdWxhciBkZXBlbmRlbmNpZXMsXG5cdC8vc28gd2UgYWRkIHRoZW0gaGVyZVxuXHRmaWx0ZXJzLm5vdCA9IGZ1bmN0aW9uKG5leHQsIHRva2VuLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHR2YXIgb3B0cyA9IHtcblx0XHRcdHhtbE1vZGU6ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy54bWxNb2RlKSxcblx0XHRcdHN0cmljdDogISEob3B0aW9ucyAmJiBvcHRpb25zLnN0cmljdClcblx0XHR9O1xuXG5cdFx0aWYob3B0cy5zdHJpY3Qpe1xuXHRcdFx0aWYodG9rZW4ubGVuZ3RoID4gMSB8fCB0b2tlbi5zb21lKGNvbnRhaW5zVHJhdmVyc2FsKSl7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImNvbXBsZXggc2VsZWN0b3JzIGluIDpub3QgYXJlbid0IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGVcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGZ1bmMgPSBjb21waWxlVG9rZW4odG9rZW4sIG9wdHMsIGNvbnRleHQpO1xuXG5cdFx0aWYoZnVuYyA9PT0gZmFsc2VGdW5jKSByZXR1cm4gbmV4dDtcblx0XHRpZihmdW5jID09PSB0cnVlRnVuYykgIHJldHVybiBmYWxzZUZ1bmM7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gIWZ1bmMoZWxlbSkgJiYgbmV4dChlbGVtKTtcblx0XHR9O1xuXHR9O1xuXG5cdGZpbHRlcnMuaGFzID0gZnVuY3Rpb24obmV4dCwgdG9rZW4sIG9wdGlvbnMpe1xuXHRcdHZhciBvcHRzID0ge1xuXHRcdFx0eG1sTW9kZTogISEob3B0aW9ucyAmJiBvcHRpb25zLnhtbE1vZGUpLFxuXHRcdFx0c3RyaWN0OiAhIShvcHRpb25zICYmIG9wdGlvbnMuc3RyaWN0KVxuXHRcdH07XG5cblx0XHQvL0ZJWE1FOiBVc2VzIGFuIGFycmF5IGFzIGEgcG9pbnRlciB0byB0aGUgY3VycmVudCBlbGVtZW50IChzaWRlIGVmZmVjdHMpXG5cdFx0dmFyIGNvbnRleHQgPSB0b2tlbi5zb21lKGNvbnRhaW5zVHJhdmVyc2FsKSA/IFtQTEFDRUhPTERFUl9FTEVNRU5UXSA6IG51bGw7XG5cblx0XHR2YXIgZnVuYyA9IGNvbXBpbGVUb2tlbih0b2tlbiwgb3B0cywgY29udGV4dCk7XG5cblx0XHRpZihmdW5jID09PSBmYWxzZUZ1bmMpIHJldHVybiBmYWxzZUZ1bmM7XG5cdFx0aWYoZnVuYyA9PT0gdHJ1ZUZ1bmMpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gYWRhcHRlci5nZXRDaGlsZHJlbihlbGVtKS5zb21lKGFkYXB0ZXIuaXNUYWcpICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGZ1bmMgPSB3cmFwKGZ1bmMpO1xuXG5cdFx0aWYoY29udGV4dCl7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gaGFzKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gbmV4dChlbGVtKSAmJiAoXG5cdFx0XHRcdFx0KGNvbnRleHRbMF0gPSBlbGVtKSwgYWRhcHRlci5leGlzdHNPbmUoZnVuYywgYWRhcHRlci5nZXRDaGlsZHJlbihlbGVtKSlcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGhhcyhlbGVtKXtcblx0XHRcdHJldHVybiBuZXh0KGVsZW0pICYmIGFkYXB0ZXIuZXhpc3RzT25lKGZ1bmMsIGFkYXB0ZXIuZ2V0Q2hpbGRyZW4oZWxlbSkpO1xuXHRcdH07XG5cdH07XG5cblx0ZmlsdGVycy5tYXRjaGVzID0gZnVuY3Rpb24obmV4dCwgdG9rZW4sIG9wdGlvbnMsIGNvbnRleHQpe1xuXHRcdHZhciBvcHRzID0ge1xuXHRcdFx0eG1sTW9kZTogISEob3B0aW9ucyAmJiBvcHRpb25zLnhtbE1vZGUpLFxuXHRcdFx0c3RyaWN0OiAhIShvcHRpb25zICYmIG9wdGlvbnMuc3RyaWN0KSxcblx0XHRcdHJvb3RGdW5jOiBuZXh0XG5cdFx0fTtcblxuXHRcdHJldHVybiBjb21waWxlVG9rZW4odG9rZW4sIG9wdHMsIGNvbnRleHQpO1xuXHR9O1xuXG5cdGNvbXBpbGUuY29tcGlsZVRva2VuID0gY29tcGlsZVRva2VuO1xuXHRjb21waWxlLmNvbXBpbGVVbnNhZmUgPSBjb21waWxlVW5zYWZlO1xuXHRjb21waWxlLlBzZXVkb3MgPSBQc2V1ZG9zO1xuXG5cdHJldHVybiBjb21waWxlO1xufVxuXG5cbi8qKiovIH0pLFxuLyogNDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcblxudmFyIHJlX25hbWUgPSAvXig/OlxcXFwufFtcXHdcXC1cXHUwMGMwLVxcdUZGRkZdKSsvLFxuICAgIHJlX2VzY2FwZSA9IC9cXFxcKFtcXGRhLWZdezEsNn1cXHM/fChcXHMpfC4pL2lnLFxuICAgIC8vbW9kaWZpZWQgdmVyc2lvbiBvZiBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9ibG9iL21hc3Rlci9zcmMvc2l6emxlLmpzI0w4N1xuICAgIHJlX2F0dHIgPSAvXlxccyooKD86XFxcXC58W1xcd1xcdTAwYzAtXFx1RkZGRlxcLV0pKylcXHMqKD86KFxcUz8pPVxccyooPzooWydcIl0pKC4qPylcXDN8KCM/KD86XFxcXC58W1xcd1xcdTAwYzAtXFx1RkZGRlxcLV0pKil8KXwpXFxzKihpKT9cXF0vO1xuXG52YXIgYWN0aW9uVHlwZXMgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0XCJ1bmRlZmluZWRcIjogXCJleGlzdHNcIixcblx0XCJcIjogIFwiZXF1YWxzXCIsXG5cdFwiflwiOiBcImVsZW1lbnRcIixcblx0XCJeXCI6IFwic3RhcnRcIixcblx0XCIkXCI6IFwiZW5kXCIsXG5cdFwiKlwiOiBcImFueVwiLFxuXHRcIiFcIjogXCJub3RcIixcblx0XCJ8XCI6IFwiaHlwaGVuXCJcbn07XG5cbnZhciBzaW1wbGVTZWxlY3RvcnMgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0XCI+XCI6IFwiY2hpbGRcIixcblx0XCI8XCI6IFwicGFyZW50XCIsXG5cdFwiflwiOiBcInNpYmxpbmdcIixcblx0XCIrXCI6IFwiYWRqYWNlbnRcIlxufTtcblxudmFyIGF0dHJpYlNlbGVjdG9ycyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRcIiNcIjogW1wiaWRcIiwgXCJlcXVhbHNcIl0sXG5cdFwiLlwiOiBbXCJjbGFzc1wiLCBcImVsZW1lbnRcIl1cbn07XG5cbi8vcHNldWRvcywgd2hvc2UgZGF0YS1wcm9wZXJ0eSBpcyBwYXJzZWQgYXMgd2VsbFxudmFyIHVucGFja1BzZXVkb3MgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0XCJoYXNcIjogdHJ1ZSxcblx0XCJub3RcIjogdHJ1ZSxcblx0XCJtYXRjaGVzXCI6IHRydWVcbn07XG5cbnZhciBzdHJpcFF1b3Rlc0Zyb21Qc2V1ZG9zID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdFwiY29udGFpbnNcIjogdHJ1ZSxcblx0XCJpY29udGFpbnNcIjogdHJ1ZVxufTtcblxudmFyIHF1b3RlcyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRcIlxcXCJcIjogdHJ1ZSxcblx0XCInXCI6IHRydWVcbn07XG5cbi8vdW5lc2NhcGUgZnVuY3Rpb24gdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9ibG9iL21hc3Rlci9zcmMvc2l6emxlLmpzI0wxMzlcbmZ1bmN0aW9uIGZ1bmVzY2FwZSggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XG5cdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlZCAtIDB4MTAwMDA7XG5cdC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50XG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3hcblx0Ly8gV29ya2Fyb3VuZCBlcnJvbmVvdXMgbnVtZXJpYyBpbnRlcnByZXRhdGlvbiBvZiArXCIweFwiXG5cdHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID9cblx0XHRlc2NhcGVkIDpcblx0XHQvLyBCTVAgY29kZXBvaW50XG5cdFx0aGlnaCA8IDAgP1xuXHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHQvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFpcilcblx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xufVxuXG5mdW5jdGlvbiB1bmVzY2FwZUNTUyhzdHIpe1xuXHRyZXR1cm4gc3RyLnJlcGxhY2UocmVfZXNjYXBlLCBmdW5lc2NhcGUpO1xufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UoYyl7XG5cdHJldHVybiBjID09PSBcIiBcIiB8fCBjID09PSBcIlxcblwiIHx8IGMgPT09IFwiXFx0XCIgfHwgYyA9PT0gXCJcXGZcIiB8fCBjID09PSBcIlxcclwiO1xufVxuXG5mdW5jdGlvbiBwYXJzZShzZWxlY3Rvciwgb3B0aW9ucyl7XG5cdHZhciBzdWJzZWxlY3RzID0gW107XG5cblx0c2VsZWN0b3IgPSBwYXJzZVNlbGVjdG9yKHN1YnNlbGVjdHMsIHNlbGVjdG9yICsgXCJcIiwgb3B0aW9ucyk7XG5cblx0aWYoc2VsZWN0b3IgIT09IFwiXCIpe1xuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVubWF0Y2hlZCBzZWxlY3RvcjogXCIgKyBzZWxlY3Rvcik7XG5cdH1cblxuXHRyZXR1cm4gc3Vic2VsZWN0cztcbn1cblxuZnVuY3Rpb24gcGFyc2VTZWxlY3RvcihzdWJzZWxlY3RzLCBzZWxlY3Rvciwgb3B0aW9ucyl7XG5cdHZhciB0b2tlbnMgPSBbXSxcblx0XHRzYXdXUyA9IGZhbHNlLFxuXHRcdGRhdGEsIGZpcnN0Q2hhciwgbmFtZSwgcXVvdDtcblxuXHRmdW5jdGlvbiBnZXROYW1lKCl7XG5cdFx0dmFyIHN1YiA9IHNlbGVjdG9yLm1hdGNoKHJlX25hbWUpWzBdO1xuXHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKHN1Yi5sZW5ndGgpO1xuXHRcdHJldHVybiB1bmVzY2FwZUNTUyhzdWIpO1xuXHR9XG5cblx0ZnVuY3Rpb24gc3RyaXBXaGl0ZXNwYWNlKHN0YXJ0KXtcblx0XHR3aGlsZShpc1doaXRlc3BhY2Uoc2VsZWN0b3IuY2hhckF0KHN0YXJ0KSkpIHN0YXJ0Kys7XG5cdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoc3RhcnQpO1xuXHR9XG5cblx0c3RyaXBXaGl0ZXNwYWNlKDApO1xuXG5cdHdoaWxlKHNlbGVjdG9yICE9PSBcIlwiKXtcblx0XHRmaXJzdENoYXIgPSBzZWxlY3Rvci5jaGFyQXQoMCk7XG5cblx0XHRpZihpc1doaXRlc3BhY2UoZmlyc3RDaGFyKSl7XG5cdFx0XHRzYXdXUyA9IHRydWU7XG5cdFx0XHRzdHJpcFdoaXRlc3BhY2UoMSk7XG5cdFx0fSBlbHNlIGlmKGZpcnN0Q2hhciBpbiBzaW1wbGVTZWxlY3RvcnMpe1xuXHRcdFx0dG9rZW5zLnB1c2goe3R5cGU6IHNpbXBsZVNlbGVjdG9yc1tmaXJzdENoYXJdfSk7XG5cdFx0XHRzYXdXUyA9IGZhbHNlO1xuXG5cdFx0XHRzdHJpcFdoaXRlc3BhY2UoMSk7XG5cdFx0fSBlbHNlIGlmKGZpcnN0Q2hhciA9PT0gXCIsXCIpe1xuXHRcdFx0aWYodG9rZW5zLmxlbmd0aCA9PT0gMCl7XG5cdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcImVtcHR5IHN1Yi1zZWxlY3RvclwiKTtcblx0XHRcdH1cblx0XHRcdHN1YnNlbGVjdHMucHVzaCh0b2tlbnMpO1xuXHRcdFx0dG9rZW5zID0gW107XG5cdFx0XHRzYXdXUyA9IGZhbHNlO1xuXHRcdFx0c3RyaXBXaGl0ZXNwYWNlKDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZihzYXdXUyl7XG5cdFx0XHRcdGlmKHRva2Vucy5sZW5ndGggPiAwKXtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7dHlwZTogXCJkZXNjZW5kYW50XCJ9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzYXdXUyA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihmaXJzdENoYXIgPT09IFwiKlwiKXtcblx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoMSk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKHt0eXBlOiBcInVuaXZlcnNhbFwifSk7XG5cdFx0XHR9IGVsc2UgaWYoZmlyc3RDaGFyIGluIGF0dHJpYlNlbGVjdG9ycyl7XG5cdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKDEpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogXCJhdHRyaWJ1dGVcIixcblx0XHRcdFx0XHRuYW1lOiBhdHRyaWJTZWxlY3RvcnNbZmlyc3RDaGFyXVswXSxcblx0XHRcdFx0XHRhY3Rpb246IGF0dHJpYlNlbGVjdG9yc1tmaXJzdENoYXJdWzFdLFxuXHRcdFx0XHRcdHZhbHVlOiBnZXROYW1lKCksXG5cdFx0XHRcdFx0aWdub3JlQ2FzZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYoZmlyc3RDaGFyID09PSBcIltcIil7XG5cdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKDEpO1xuXHRcdFx0XHRkYXRhID0gc2VsZWN0b3IubWF0Y2gocmVfYXR0cik7XG5cdFx0XHRcdGlmKCFkYXRhKXtcblx0XHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJNYWxmb3JtZWQgYXR0cmlidXRlIHNlbGVjdG9yOiBcIiArIHNlbGVjdG9yKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cihkYXRhWzBdLmxlbmd0aCk7XG5cdFx0XHRcdG5hbWUgPSB1bmVzY2FwZUNTUyhkYXRhWzFdKTtcblxuXHRcdFx0XHRpZihcblx0XHRcdFx0XHQhb3B0aW9ucyB8fCAoXG5cdFx0XHRcdFx0XHRcImxvd2VyQ2FzZUF0dHJpYnV0ZU5hbWVzXCIgaW4gb3B0aW9ucyA/XG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMubG93ZXJDYXNlQXR0cmlidXRlTmFtZXMgOlxuXHRcdFx0XHRcdFx0XHQhb3B0aW9ucy54bWxNb2RlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpe1xuXHRcdFx0XHRcdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogXCJhdHRyaWJ1dGVcIixcblx0XHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRcdGFjdGlvbjogYWN0aW9uVHlwZXNbZGF0YVsyXV0sXG5cdFx0XHRcdFx0dmFsdWU6IHVuZXNjYXBlQ1NTKGRhdGFbNF0gfHwgZGF0YVs1XSB8fCBcIlwiKSxcblx0XHRcdFx0XHRpZ25vcmVDYXNlOiAhIWRhdGFbNl1cblx0XHRcdFx0fSk7XG5cblx0XHRcdH0gZWxzZSBpZihmaXJzdENoYXIgPT09IFwiOlwiKXtcblx0XHRcdFx0aWYoc2VsZWN0b3IuY2hhckF0KDEpID09PSBcIjpcIil7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoMik7XG5cdFx0XHRcdFx0dG9rZW5zLnB1c2goe3R5cGU6IFwicHNldWRvLWVsZW1lbnRcIiwgbmFtZTogZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCl9KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKDEpO1xuXG5cdFx0XHRcdG5hbWUgPSBnZXROYW1lKCkudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0ZGF0YSA9IG51bGw7XG5cblx0XHRcdFx0aWYoc2VsZWN0b3IuY2hhckF0KDApID09PSBcIihcIil7XG5cdFx0XHRcdFx0aWYobmFtZSBpbiB1bnBhY2tQc2V1ZG9zKXtcblx0XHRcdFx0XHRcdHF1b3QgPSBzZWxlY3Rvci5jaGFyQXQoMSk7XG5cdFx0XHRcdFx0XHR2YXIgcXVvdGVkID0gcXVvdCBpbiBxdW90ZXM7XG5cblx0XHRcdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKHF1b3RlZCArIDEpO1xuXG5cdFx0XHRcdFx0XHRkYXRhID0gW107XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9IHBhcnNlU2VsZWN0b3IoZGF0YSwgc2VsZWN0b3IsIG9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0XHRpZihxdW90ZWQpe1xuXHRcdFx0XHRcdFx0XHRpZihzZWxlY3Rvci5jaGFyQXQoMCkgIT09IHF1b3Qpe1xuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInVubWF0Y2hlZCBxdW90ZXMgaW4gOlwiICsgbmFtZSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoc2VsZWN0b3IuY2hhckF0KDApICE9PSBcIilcIil7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcIm1pc3NpbmcgY2xvc2luZyBwYXJlbnRoZXNpcyBpbiA6XCIgKyBuYW1lICsgXCIgXCIgKyBzZWxlY3Rvcik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKDEpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR2YXIgcG9zID0gMSwgY291bnRlciA9IDE7XG5cblx0XHRcdFx0XHRcdGZvcig7IGNvdW50ZXIgPiAwICYmIHBvcyA8IHNlbGVjdG9yLmxlbmd0aDsgcG9zKyspe1xuXHRcdFx0XHRcdFx0XHRpZihzZWxlY3Rvci5jaGFyQXQocG9zKSA9PT0gXCIoXCIpIGNvdW50ZXIrKztcblx0XHRcdFx0XHRcdFx0ZWxzZSBpZihzZWxlY3Rvci5jaGFyQXQocG9zKSA9PT0gXCIpXCIpIGNvdW50ZXItLTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoY291bnRlcil7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInBhcmVudGhlc2lzIG5vdCBtYXRjaGVkXCIpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRkYXRhID0gc2VsZWN0b3Iuc3Vic3RyKDEsIHBvcyAtIDIpO1xuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIocG9zKTtcblxuXHRcdFx0XHRcdFx0aWYobmFtZSBpbiBzdHJpcFF1b3Rlc0Zyb21Qc2V1ZG9zKXtcblx0XHRcdFx0XHRcdFx0cXVvdCA9IGRhdGEuY2hhckF0KDApO1xuXG5cdFx0XHRcdFx0XHRcdGlmKHF1b3QgPT09IGRhdGEuc2xpY2UoLTEpICYmIHF1b3QgaW4gcXVvdGVzKXtcblx0XHRcdFx0XHRcdFx0XHRkYXRhID0gZGF0YS5zbGljZSgxLCAtMSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRkYXRhID0gdW5lc2NhcGVDU1MoZGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9rZW5zLnB1c2goe3R5cGU6IFwicHNldWRvXCIsIG5hbWU6IG5hbWUsIGRhdGE6IGRhdGF9KTtcblx0XHRcdH0gZWxzZSBpZihyZV9uYW1lLnRlc3Qoc2VsZWN0b3IpKXtcblx0XHRcdFx0bmFtZSA9IGdldE5hbWUoKTtcblxuXHRcdFx0XHRpZighb3B0aW9ucyB8fCAoXCJsb3dlckNhc2VUYWdzXCIgaW4gb3B0aW9ucyA/IG9wdGlvbnMubG93ZXJDYXNlVGFncyA6ICFvcHRpb25zLnhtbE1vZGUpKXtcblx0XHRcdFx0XHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9rZW5zLnB1c2goe3R5cGU6IFwidGFnXCIsIG5hbWU6IG5hbWV9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS50eXBlID09PSBcImRlc2NlbmRhbnRcIil7XG5cdFx0XHRcdFx0dG9rZW5zLnBvcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFkZFRva2VuKHN1YnNlbGVjdHMsIHRva2Vucyk7XG5cdFx0XHRcdHJldHVybiBzZWxlY3Rvcjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhZGRUb2tlbihzdWJzZWxlY3RzLCB0b2tlbnMpO1xuXG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkVG9rZW4oc3Vic2VsZWN0cywgdG9rZW5zKXtcblx0aWYoc3Vic2VsZWN0cy5sZW5ndGggPiAwICYmIHRva2Vucy5sZW5ndGggPT09IDApe1xuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcImVtcHR5IHN1Yi1zZWxlY3RvclwiKTtcblx0fVxuXG5cdHN1YnNlbGVjdHMucHVzaCh0b2tlbnMpO1xufVxuXG5cbi8qKiovIH0pLFxuLyogNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxubW9kdWxlLmV4cG9ydHMgPSBzb3J0QnlQcm9jZWR1cmU7XG5cbi8qXG5cdHNvcnQgdGhlIHBhcnRzIG9mIHRoZSBwYXNzZWQgc2VsZWN0b3IsXG5cdGFzIHRoZXJlIGlzIHBvdGVudGlhbCBmb3Igb3B0aW1pemF0aW9uXG5cdChzb21lIHR5cGVzIG9mIHNlbGVjdG9ycyBhcmUgZmFzdGVyIHRoYW4gb3RoZXJzKVxuKi9cblxudmFyIHByb2NlZHVyZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXG52YXIgYXR0cmlidXRlcyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRleGlzdHM6IDEwLFxuXHRlcXVhbHM6IDgsXG5cdG5vdDogNyxcblx0c3RhcnQ6IDYsXG5cdGVuZDogNixcblx0YW55OiA1LFxuXHRoeXBoZW46IDQsXG5cdGVsZW1lbnQ6IDRcbn07XG5cbmZ1bmN0aW9uIHNvcnRCeVByb2NlZHVyZShhcnIpe1xuXHR2YXIgcHJvY3MgPSBhcnIubWFwKGdldFByb2NlZHVyZSk7XG5cdGZvcih2YXIgaSA9IDE7IGkgPCBhcnIubGVuZ3RoOyBpKyspe1xuXHRcdHZhciBwcm9jTmV3ID0gcHJvY3NbaV07XG5cblx0XHRpZihwcm9jTmV3IDwgMCkgY29udGludWU7XG5cblx0XHRmb3IodmFyIGogPSBpIC0gMTsgaiA+PSAwICYmIHByb2NOZXcgPCBwcm9jc1tqXTsgai0tKXtcblx0XHRcdHZhciB0b2tlbiA9IGFycltqICsgMV07XG5cdFx0XHRhcnJbaiArIDFdID0gYXJyW2pdO1xuXHRcdFx0YXJyW2pdID0gdG9rZW47XG5cdFx0XHRwcm9jc1tqICsgMV0gPSBwcm9jc1tqXTtcblx0XHRcdHByb2NzW2pdID0gcHJvY05ldztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0UHJvY2VkdXJlKHRva2VuKXtcblx0dmFyIHByb2MgPSBwcm9jZWR1cmVbdG9rZW4udHlwZV07XG5cblx0aWYocHJvYyA9PT0gcHJvY2VkdXJlLmF0dHJpYnV0ZSl7XG5cdFx0cHJvYyA9IGF0dHJpYnV0ZXNbdG9rZW4uYWN0aW9uXTtcblxuXHRcdGlmKHByb2MgPT09IGF0dHJpYnV0ZXMuZXF1YWxzICYmIHRva2VuLm5hbWUgPT09IFwiaWRcIil7XG5cdFx0XHQvL3ByZWZlciBJRCBzZWxlY3RvcnMgKGVnLiAjSUQpXG5cdFx0XHRwcm9jID0gOTtcblx0XHR9XG5cblx0XHRpZih0b2tlbi5pZ25vcmVDYXNlKXtcblx0XHRcdC8vaWdub3JlQ2FzZSBhZGRzIHNvbWUgb3ZlcmhlYWQsIHByZWZlciBcIm5vcm1hbFwiIHRva2VuXG5cdFx0XHQvL3RoaXMgaXMgYSBiaW5hcnkgb3BlcmF0aW9uLCB0byBlbnN1cmUgaXQncyBzdGlsbCBhbiBpbnRcblx0XHRcdHByb2MgPj49IDE7XG5cdFx0fVxuXHR9IGVsc2UgaWYocHJvYyA9PT0gcHJvY2VkdXJlLnBzZXVkbyl7XG5cdFx0aWYoIXRva2VuLmRhdGEpe1xuXHRcdFx0cHJvYyA9IDM7XG5cdFx0fSBlbHNlIGlmKHRva2VuLm5hbWUgPT09IFwiaGFzXCIgfHwgdG9rZW4ubmFtZSA9PT0gXCJjb250YWluc1wiKXtcblx0XHRcdHByb2MgPSAwOyAvL2V4cGVuc2l2ZSBpbiBhbnkgY2FzZVxuXHRcdH0gZWxzZSBpZih0b2tlbi5uYW1lID09PSBcIm1hdGNoZXNcIiB8fCB0b2tlbi5uYW1lID09PSBcIm5vdFwiKXtcblx0XHRcdHByb2MgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRva2VuLmRhdGEubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHQvL1RPRE8gYmV0dGVyIGhhbmRsaW5nIG9mIGNvbXBsZXggc2VsZWN0b3JzXG5cdFx0XHRcdGlmKHRva2VuLmRhdGFbaV0ubGVuZ3RoICE9PSAxKSBjb250aW51ZTtcblx0XHRcdFx0dmFyIGN1ciA9IGdldFByb2NlZHVyZSh0b2tlbi5kYXRhW2ldWzBdKTtcblx0XHRcdFx0Ly9hdm9pZCBleGVjdXRpbmcgOmhhcyBvciA6Y29udGFpbnNcblx0XHRcdFx0aWYoY3VyID09PSAwKXtcblx0XHRcdFx0XHRwcm9jID0gMDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihjdXIgPiBwcm9jKSBwcm9jID0gY3VyO1xuXHRcdFx0fVxuXHRcdFx0aWYodG9rZW4uZGF0YS5sZW5ndGggPiAxICYmIHByb2MgPiAwKSBwcm9jIC09IDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb2MgPSAxO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJvYztcbn1cblxuXG4vKioqLyB9KSxcbi8qIDQzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBTZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcbnZhciBhdHRyaWJ1dGVGYWN0b3J5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG5cbmZ1bmN0aW9uIGdlbmVyYWxGYWN0b3J5KGFkYXB0ZXIsIFBzZXVkb3Mpe1xuXHQvKlxuXHRcdGFsbCBhdmFpbGFibGUgcnVsZXNcblx0Ki9cblx0cmV0dXJuIHtcblx0XHRfX3Byb3RvX186IG51bGwsXG5cblx0XHRhdHRyaWJ1dGU6IGF0dHJpYnV0ZUZhY3RvcnkoYWRhcHRlcikuY29tcGlsZSxcblx0XHRwc2V1ZG86IFBzZXVkb3MuY29tcGlsZSxcblxuXHRcdC8vdGFnc1xuXHRcdHRhZzogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSA9IGRhdGEubmFtZTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiB0YWcoZWxlbSl7XG5cdFx0XHRcdHJldHVybiBhZGFwdGVyLmdldE5hbWUoZWxlbSkgPT09IG5hbWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdC8vdHJhdmVyc2FsXG5cdFx0ZGVzY2VuZGFudDogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHR2YXIgaXNGYWxzZUNhY2hlID0gbmV3IFNldCgpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZGVzY2VuZGFudChlbGVtKXtcblx0XHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XG5cblx0XHRcdFx0d2hpbGUoIWZvdW5kICYmIChlbGVtID0gYWRhcHRlci5nZXRQYXJlbnQoZWxlbSkpKXtcblx0XHRcdFx0XHRpZighaXNGYWxzZUNhY2hlLmhhcyhlbGVtKSl7XG5cdFx0XHRcdFx0XHRmb3VuZCA9IG5leHQoZWxlbSk7XG5cdFx0XHRcdFx0XHRpZighZm91bmQpe1xuXHRcdFx0XHRcdFx0XHRpc0ZhbHNlQ2FjaGUuYWRkKGVsZW0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmb3VuZDtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRfZmxleGlibGVEZXNjZW5kYW50OiBmdW5jdGlvbihuZXh0KXtcblx0XHRcdC8vIEluY2x1ZGUgZWxlbWVudCBpdHNlbGYsIG9ubHkgdXNlZCB3aGlsZSBxdWVyeWluZyBhbiBhcnJheVxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGRlc2NlbmRhbnQoZWxlbSl7XG5cblx0XHRcdFx0dmFyIGZvdW5kID0gbmV4dChlbGVtKTtcblxuXHRcdFx0XHR3aGlsZSghZm91bmQgJiYgKGVsZW0gPSBhZGFwdGVyLmdldFBhcmVudChlbGVtKSkpe1xuXHRcdFx0XHRcdGZvdW5kID0gbmV4dChlbGVtKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmb3VuZDtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRwYXJlbnQ6IGZ1bmN0aW9uKG5leHQsIGRhdGEsIG9wdGlvbnMpe1xuXHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLnN0cmljdCkgdGhyb3cgbmV3IEVycm9yKFwiUGFyZW50IHNlbGVjdG9yIGlzbid0IHBhcnQgb2YgQ1NTM1wiKTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIHBhcmVudChlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuZ2V0Q2hpbGRyZW4oZWxlbSkuc29tZSh0ZXN0KTtcblx0XHRcdH07XG5cblx0XHRcdGZ1bmN0aW9uIHRlc3QoZWxlbSl7XG5cdFx0XHRcdHJldHVybiBhZGFwdGVyLmlzVGFnKGVsZW0pICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRjaGlsZDogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gY2hpbGQoZWxlbSl7XG5cdFx0XHRcdHZhciBwYXJlbnQgPSBhZGFwdGVyLmdldFBhcmVudChlbGVtKTtcblx0XHRcdFx0cmV0dXJuICEhcGFyZW50ICYmIG5leHQocGFyZW50KTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRzaWJsaW5nOiBmdW5jdGlvbihuZXh0KXtcblx0XHRcdHJldHVybiBmdW5jdGlvbiBzaWJsaW5nKGVsZW0pe1xuXHRcdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIGJyZWFrO1xuXHRcdFx0XHRcdFx0aWYobmV4dChzaWJsaW5nc1tpXSkpIHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhZGphY2VudDogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gYWRqYWNlbnQoZWxlbSl7XG5cdFx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSksXG5cdFx0XHRcdFx0bGFzdEVsZW1lbnQ7XG5cblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudCA9IHNpYmxpbmdzW2ldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAhIWxhc3RFbGVtZW50ICYmIG5leHQobGFzdEVsZW1lbnQpO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdHVuaXZlcnNhbDogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHRyZXR1cm4gbmV4dDtcblx0XHR9XG5cdH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhbEZhY3Rvcnk7XG5cblxuLyoqKi8gfSksXG4vKiA0NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpKCkgPyBTZXQgOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcblxuXG4vKioqLyB9KSxcbi8qIDQ1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgc2V0LCBpdGVyYXRvciwgcmVzdWx0O1xuXHRpZiAodHlwZW9mIFNldCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRzZXQgPSBuZXcgU2V0KFsncmF6JywgJ2R3YScsICd0cnp5J10pO1xuXHRpZiAoU3RyaW5nKHNldCkgIT09ICdbb2JqZWN0IFNldF0nKSByZXR1cm4gZmFsc2U7XG5cdGlmIChzZXQuc2l6ZSAhPT0gMykgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHNldC5hZGQgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQuY2xlYXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQuZGVsZXRlICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2Ygc2V0LmVudHJpZXMgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHNldC5oYXMgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQua2V5cyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHNldC52YWx1ZXMgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblxuXHRpdGVyYXRvciA9IHNldC52YWx1ZXMoKTtcblx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuXHRpZiAocmVzdWx0LmRvbmUgIT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cdGlmIChyZXN1bHQudmFsdWUgIT09ICdyYXonKSByZXR1cm4gZmFsc2U7XG5cblx0cmV0dXJuIHRydWU7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGNsZWFyICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNilcbiAgLCBlSW5kZXhPZiAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpXG4gICwgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpXG4gICwgY2FsbGFibGUgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgZCAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG4gICwgZWUgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KVxuICAsIFN5bWJvbCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKVxuICAsIGl0ZXJhdG9yICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMilcbiAgLCBmb3JPZiAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpXG4gICwgSXRlcmF0b3IgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0KVxuICAsIGlzTmF0aXZlICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NSlcblxuICAsIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbFxuICAsIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LCBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZlxuICAsIFNldFBvbHksIGdldFZhbHVlcywgTmF0aXZlU2V0O1xuXG5pZiAoaXNOYXRpdmUpIE5hdGl2ZVNldCA9IFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRQb2x5ID0gZnVuY3Rpb24gU2V0KC8qaXRlcmFibGUqLykge1xuXHR2YXIgaXRlcmFibGUgPSBhcmd1bWVudHNbMF0sIHNlbGY7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBTZXRQb2x5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29uc3RydWN0b3IgcmVxdWlyZXMgXFwnbmV3XFwnJyk7XG5cdGlmIChpc05hdGl2ZSAmJiBzZXRQcm90b3R5cGVPZikgc2VsZiA9IHNldFByb3RvdHlwZU9mKG5ldyBOYXRpdmVTZXQoKSwgZ2V0UHJvdG90eXBlT2YodGhpcykpO1xuXHRlbHNlIHNlbGYgPSB0aGlzO1xuXHRpZiAoaXRlcmFibGUgIT0gbnVsbCkgaXRlcmF0b3IoaXRlcmFibGUpO1xuXHRkZWZpbmVQcm9wZXJ0eShzZWxmLCAnX19zZXREYXRhX18nLCBkKCdjJywgW10pKTtcblx0aWYgKCFpdGVyYWJsZSkgcmV0dXJuIHNlbGY7XG5cdGZvck9mKGl0ZXJhYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRpZiAoZUluZGV4T2YuY2FsbCh0aGlzLCB2YWx1ZSkgIT09IC0xKSByZXR1cm47XG5cdFx0dGhpcy5wdXNoKHZhbHVlKTtcblx0fSwgc2VsZi5fX3NldERhdGFfXyk7XG5cdHJldHVybiBzZWxmO1xufTtcblxuaWYgKGlzTmF0aXZlKSB7XG5cdGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoU2V0UG9seSwgTmF0aXZlU2V0KTtcblx0U2V0UG9seS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE5hdGl2ZVNldC5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IGQoU2V0UG9seSkgfSk7XG59XG5cbmVlKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNldFBvbHkucHJvdG90eXBlLCB7XG5cdGFkZDogZChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRpZiAodGhpcy5oYXModmFsdWUpKSByZXR1cm4gdGhpcztcblx0XHR0aGlzLmVtaXQoJ19hZGQnLCB0aGlzLl9fc2V0RGF0YV9fLnB1c2godmFsdWUpIC0gMSwgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9KSxcblx0Y2xlYXI6IGQoZnVuY3Rpb24gKCkge1xuXHRcdGlmICghdGhpcy5fX3NldERhdGFfXy5sZW5ndGgpIHJldHVybjtcblx0XHRjbGVhci5jYWxsKHRoaXMuX19zZXREYXRhX18pO1xuXHRcdHRoaXMuZW1pdCgnX2NsZWFyJyk7XG5cdH0pLFxuXHRkZWxldGU6IGQoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0dmFyIGluZGV4ID0gZUluZGV4T2YuY2FsbCh0aGlzLl9fc2V0RGF0YV9fLCB2YWx1ZSk7XG5cdFx0aWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xuXHRcdHRoaXMuX19zZXREYXRhX18uc3BsaWNlKGluZGV4LCAxKTtcblx0XHR0aGlzLmVtaXQoJ19kZWxldGUnLCBpbmRleCwgdmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9KSxcblx0ZW50cmllczogZChmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3IodGhpcywgJ2tleSt2YWx1ZScpOyB9KSxcblx0Zm9yRWFjaDogZChmdW5jdGlvbiAoY2IvKiwgdGhpc0FyZyovKSB7XG5cdFx0dmFyIHRoaXNBcmcgPSBhcmd1bWVudHNbMV0sIGl0ZXJhdG9yLCByZXN1bHQsIHZhbHVlO1xuXHRcdGNhbGxhYmxlKGNiKTtcblx0XHRpdGVyYXRvciA9IHRoaXMudmFsdWVzKCk7XG5cdFx0cmVzdWx0ID0gaXRlcmF0b3IuX25leHQoKTtcblx0XHR3aGlsZSAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0gaXRlcmF0b3IuX3Jlc29sdmUocmVzdWx0KTtcblx0XHRcdGNhbGwuY2FsbChjYiwgdGhpc0FyZywgdmFsdWUsIHZhbHVlLCB0aGlzKTtcblx0XHRcdHJlc3VsdCA9IGl0ZXJhdG9yLl9uZXh0KCk7XG5cdFx0fVxuXHR9KSxcblx0aGFzOiBkKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdHJldHVybiAoZUluZGV4T2YuY2FsbCh0aGlzLl9fc2V0RGF0YV9fLCB2YWx1ZSkgIT09IC0xKTtcblx0fSksXG5cdGtleXM6IGQoZ2V0VmFsdWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy52YWx1ZXMoKTsgfSksXG5cdHNpemU6IGQuZ3MoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fX3NldERhdGFfXy5sZW5ndGg7IH0pLFxuXHR2YWx1ZXM6IGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yKHRoaXMpOyB9KSxcblx0dG9TdHJpbmc6IGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gJ1tvYmplY3QgU2V0XSc7IH0pXG59KSk7XG5kZWZpbmVQcm9wZXJ0eShTZXRQb2x5LnByb3RvdHlwZSwgU3ltYm9sLml0ZXJhdG9yLCBkKGdldFZhbHVlcykpO1xuZGVmaW5lUHJvcGVydHkoU2V0UG9seS5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZCgnYycsICdTZXQnKSk7XG5cblxuLyoqKi8gfSksXG4vKiA0NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgbnVtYmVySXNOYU4gICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KVxuICAsIHRvUG9zSW50ICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOClcbiAgLCB2YWx1ZSAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMClcbiAgLCBpbmRleE9mICAgICAgICAgICA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mXG4gICwgb2JqSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgYWJzICAgICAgICAgICAgICAgPSBNYXRoLmFic1xuICAsIGZsb29yICAgICAgICAgICAgID0gTWF0aC5mbG9vcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2VhcmNoRWxlbWVudCAvKiwgZnJvbUluZGV4Ki8pIHtcblx0dmFyIGksIGxlbmd0aCwgZnJvbUluZGV4LCB2YWw7XG5cdGlmICghbnVtYmVySXNOYU4oc2VhcmNoRWxlbWVudCkpIHJldHVybiBpbmRleE9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cblx0bGVuZ3RoID0gdG9Qb3NJbnQodmFsdWUodGhpcykubGVuZ3RoKTtcblx0ZnJvbUluZGV4ID0gYXJndW1lbnRzWzFdO1xuXHRpZiAoaXNOYU4oZnJvbUluZGV4KSkgZnJvbUluZGV4ID0gMDtcblx0ZWxzZSBpZiAoZnJvbUluZGV4ID49IDApIGZyb21JbmRleCA9IGZsb29yKGZyb21JbmRleCk7XG5cdGVsc2UgZnJvbUluZGV4ID0gdG9Qb3NJbnQodGhpcy5sZW5ndGgpIC0gZmxvb3IoYWJzKGZyb21JbmRleCkpO1xuXG5cdGZvciAoaSA9IGZyb21JbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0aWYgKG9iakhhc093blByb3BlcnR5LmNhbGwodGhpcywgaSkpIHtcblx0XHRcdHZhbCA9IHRoaXNbaV07XG5cdFx0XHRpZiAobnVtYmVySXNOYU4odmFsKSkgcmV0dXJuIGk7IC8vIEpzbGludDogaWdub3JlXG5cdFx0fVxuXHR9XG5cdHJldHVybiAtMTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA0OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpKClcblx0PyBOdW1iZXIuaXNOYU5cblx0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcblxuXG4vKioqLyB9KSxcbi8qIDQ5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgbnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU47XG5cdGlmICh0eXBlb2YgbnVtYmVySXNOYU4gIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gIW51bWJlcklzTmFOKHt9KSAmJiBudW1iZXJJc05hTihOYU4pICYmICFudW1iZXJJc05hTigzNCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuXHRyZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDUxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MilcblxuICAsIGFicyA9IE1hdGguYWJzLCBmbG9vciA9IE1hdGguZmxvb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdGlmIChpc05hTih2YWx1ZSkpIHJldHVybiAwO1xuXHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdGlmICgodmFsdWUgPT09IDApIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcblx0cmV0dXJuIHNpZ24odmFsdWUpICogZmxvb3IoYWJzKHZhbHVlKSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKSgpXG5cdD8gTWF0aC5zaWduXG5cdDogX193ZWJwYWNrX3JlcXVpcmVfXyg1NCk7XG5cblxuLyoqKi8gfSksXG4vKiA1MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHNpZ24gPSBNYXRoLnNpZ247XG5cdGlmICh0eXBlb2Ygc2lnbiAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAoc2lnbigxMCkgPT09IDEpICYmIChzaWduKC0yMCkgPT09IC0xKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdGlmIChpc05hTih2YWx1ZSkgfHwgKHZhbHVlID09PSAwKSkgcmV0dXJuIHZhbHVlO1xuXHRyZXR1cm4gdmFsdWUgPiAwID8gMSA6IC0xO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDU1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpc1ZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxudmFyIG1hcCA9IHsgZnVuY3Rpb246IHRydWUsIG9iamVjdDogdHJ1ZSB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gKGlzVmFsdWUodmFsdWUpICYmIG1hcFt0eXBlb2YgdmFsdWVdKSB8fCBmYWxzZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIFdvcmthcm91bmQgZm9yIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTI4MDRcblxuXG5cbnZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlLCBzaGltO1xuXG5pZiAoIV9fd2VicGFja19yZXF1aXJlX18oMTkpKCkpIHtcblx0c2hpbSA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciBudWxsT2JqZWN0LCBwb2x5UHJvcHMsIGRlc2M7XG5cdGlmICghc2hpbSkgcmV0dXJuIGNyZWF0ZTtcblx0aWYgKHNoaW0ubGV2ZWwgIT09IDEpIHJldHVybiBjcmVhdGU7XG5cblx0bnVsbE9iamVjdCA9IHt9O1xuXHRwb2x5UHJvcHMgPSB7fTtcblx0ZGVzYyA9IHtcblx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdHZhbHVlOiB1bmRlZmluZWRcblx0fTtcblx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuXHRcdGlmIChuYW1lID09PSBcIl9fcHJvdG9fX1wiKSB7XG5cdFx0XHRwb2x5UHJvcHNbbmFtZV0gPSB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwb2x5UHJvcHNbbmFtZV0gPSBkZXNjO1xuXHR9KTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobnVsbE9iamVjdCwgcG9seVByb3BzKTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc2hpbSwgXCJudWxsUG9seWZpbGxcIiwge1xuXHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0d3JpdGFibGU6IGZhbHNlLFxuXHRcdHZhbHVlOiBudWxsT2JqZWN0XG5cdH0pO1xuXG5cdHJldHVybiBmdW5jdGlvbiAocHJvdG90eXBlLCBwcm9wcykge1xuXHRcdHJldHVybiBjcmVhdGUocHJvdG90eXBlID09PSBudWxsID8gbnVsbE9iamVjdCA6IHByb3RvdHlwZSwgcHJvcHMpO1xuXHR9O1xufSgpKTtcblxuXG4vKioqLyB9KSxcbi8qIDU3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbiwgb2JqO1xuXHRpZiAodHlwZW9mIGFzc2lnbiAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cdG9iaiA9IHsgZm9vOiBcInJhelwiIH07XG5cdGFzc2lnbihvYmosIHsgYmFyOiBcImR3YVwiIH0sIHsgdHJ6eTogXCJ0cnp5XCIgfSk7XG5cdHJldHVybiAob2JqLmZvbyArIG9iai5iYXIgKyBvYmoudHJ6eSkgPT09IFwicmF6ZHdhdHJ6eVwiO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDU4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBrZXlzICA9IF9fd2VicGFja19yZXF1aXJlX18oNTkpXG4gICwgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApXG4gICwgbWF4ICAgPSBNYXRoLm1heDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGVzdCwgc3JjIC8qLCDigKZzcmNuKi8pIHtcblx0dmFyIGVycm9yLCBpLCBsZW5ndGggPSBtYXgoYXJndW1lbnRzLmxlbmd0aCwgMiksIGFzc2lnbjtcblx0ZGVzdCA9IE9iamVjdCh2YWx1ZShkZXN0KSk7XG5cdGFzc2lnbiA9IGZ1bmN0aW9uIChrZXkpIHtcblx0XHR0cnkge1xuXHRcdFx0ZGVzdFtrZXldID0gc3JjW2tleV07XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlO1xuXHRcdH1cblx0fTtcblx0Zm9yIChpID0gMTsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0c3JjID0gYXJndW1lbnRzW2ldO1xuXHRcdGtleXMoc3JjKS5mb3JFYWNoKGFzc2lnbik7XG5cdH1cblx0aWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHRocm93IGVycm9yO1xuXHRyZXR1cm4gZGVzdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNjApKClcblx0PyBPYmplY3Qua2V5c1xuXHQ6IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xuXG5cbi8qKiovIH0pLFxuLyogNjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHRyeSB7XG5cdFx0T2JqZWN0LmtleXMoXCJwcmltaXRpdmVcIik7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcbiByZXR1cm4gZmFsc2U7XG59XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzVmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG52YXIga2V5cyA9IE9iamVjdC5rZXlzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcblx0cmV0dXJuIGtleXMoaXNWYWx1ZShvYmplY3QpID8gT2JqZWN0KG9iamVjdCkgOiBvYmplY3QpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDYyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRGVwcmVjYXRlZFxuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gcmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIjtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA2MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgc3RyID0gXCJyYXpkd2F0cnp5XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHRpZiAodHlwZW9mIHN0ci5jb250YWlucyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAoc3RyLmNvbnRhaW5zKFwiZHdhXCIpID09PSB0cnVlKSAmJiAoc3RyLmNvbnRhaW5zKFwiZm9vXCIpID09PSBmYWxzZSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGluZGV4T2YgPSBTdHJpbmcucHJvdG90eXBlLmluZGV4T2Y7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNlYXJjaFN0cmluZy8qLCBwb3NpdGlvbiovKSB7XG5cdHJldHVybiBpbmRleE9mLmNhbGwodGhpcywgc2VhcmNoU3RyaW5nLCBhcmd1bWVudHNbMV0pID4gLTE7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGQgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuICAsIGNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuXG4gICwgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHksIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbFxuICAsIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gICwgZGVmaW5lUHJvcGVydGllcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzXG4gICwgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgZGVzY3JpcHRvciA9IHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUgfVxuXG4gICwgb24sIG9uY2UsIG9mZiwgZW1pdCwgbWV0aG9kcywgZGVzY3JpcHRvcnMsIGJhc2U7XG5cbm9uID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyKSB7XG5cdHZhciBkYXRhO1xuXG5cdGNhbGxhYmxlKGxpc3RlbmVyKTtcblxuXHRpZiAoIWhhc093blByb3BlcnR5LmNhbGwodGhpcywgJ19fZWVfXycpKSB7XG5cdFx0ZGF0YSA9IGRlc2NyaXB0b3IudmFsdWUgPSBjcmVhdGUobnVsbCk7XG5cdFx0ZGVmaW5lUHJvcGVydHkodGhpcywgJ19fZWVfXycsIGRlc2NyaXB0b3IpO1xuXHRcdGRlc2NyaXB0b3IudmFsdWUgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdGRhdGEgPSB0aGlzLl9fZWVfXztcblx0fVxuXHRpZiAoIWRhdGFbdHlwZV0pIGRhdGFbdHlwZV0gPSBsaXN0ZW5lcjtcblx0ZWxzZSBpZiAodHlwZW9mIGRhdGFbdHlwZV0gPT09ICdvYmplY3QnKSBkYXRhW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuXHRlbHNlIGRhdGFbdHlwZV0gPSBbZGF0YVt0eXBlXSwgbGlzdGVuZXJdO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxub25jZSA9IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xuXHR2YXIgb25jZSwgc2VsZjtcblxuXHRjYWxsYWJsZShsaXN0ZW5lcik7XG5cdHNlbGYgPSB0aGlzO1xuXHRvbi5jYWxsKHRoaXMsIHR5cGUsIG9uY2UgPSBmdW5jdGlvbiAoKSB7XG5cdFx0b2ZmLmNhbGwoc2VsZiwgdHlwZSwgb25jZSk7XG5cdFx0YXBwbHkuY2FsbChsaXN0ZW5lciwgdGhpcywgYXJndW1lbnRzKTtcblx0fSk7XG5cblx0b25jZS5fX2VlT25jZUxpc3RlbmVyX18gPSBsaXN0ZW5lcjtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5vZmYgPSBmdW5jdGlvbiAodHlwZSwgbGlzdGVuZXIpIHtcblx0dmFyIGRhdGEsIGxpc3RlbmVycywgY2FuZGlkYXRlLCBpO1xuXG5cdGNhbGxhYmxlKGxpc3RlbmVyKTtcblxuXHRpZiAoIWhhc093blByb3BlcnR5LmNhbGwodGhpcywgJ19fZWVfXycpKSByZXR1cm4gdGhpcztcblx0ZGF0YSA9IHRoaXMuX19lZV9fO1xuXHRpZiAoIWRhdGFbdHlwZV0pIHJldHVybiB0aGlzO1xuXHRsaXN0ZW5lcnMgPSBkYXRhW3R5cGVdO1xuXG5cdGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnb2JqZWN0Jykge1xuXHRcdGZvciAoaSA9IDA7IChjYW5kaWRhdGUgPSBsaXN0ZW5lcnNbaV0pOyArK2kpIHtcblx0XHRcdGlmICgoY2FuZGlkYXRlID09PSBsaXN0ZW5lcikgfHxcblx0XHRcdFx0XHQoY2FuZGlkYXRlLl9fZWVPbmNlTGlzdGVuZXJfXyA9PT0gbGlzdGVuZXIpKSB7XG5cdFx0XHRcdGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAyKSBkYXRhW3R5cGVdID0gbGlzdGVuZXJzW2kgPyAwIDogMV07XG5cdFx0XHRcdGVsc2UgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKChsaXN0ZW5lcnMgPT09IGxpc3RlbmVyKSB8fFxuXHRcdFx0XHQobGlzdGVuZXJzLl9fZWVPbmNlTGlzdGVuZXJfXyA9PT0gbGlzdGVuZXIpKSB7XG5cdFx0XHRkZWxldGUgZGF0YVt0eXBlXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmVtaXQgPSBmdW5jdGlvbiAodHlwZSkge1xuXHR2YXIgaSwgbCwgbGlzdGVuZXIsIGxpc3RlbmVycywgYXJncztcblxuXHRpZiAoIWhhc093blByb3BlcnR5LmNhbGwodGhpcywgJ19fZWVfXycpKSByZXR1cm47XG5cdGxpc3RlbmVycyA9IHRoaXMuX19lZV9fW3R5cGVdO1xuXHRpZiAoIWxpc3RlbmVycykgcmV0dXJuO1xuXG5cdGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnb2JqZWN0Jykge1xuXHRcdGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdGFyZ3MgPSBuZXcgQXJyYXkobCAtIDEpO1xuXHRcdGZvciAoaSA9IDE7IGkgPCBsOyArK2kpIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuXG5cdFx0bGlzdGVuZXJzID0gbGlzdGVuZXJzLnNsaWNlKCk7XG5cdFx0Zm9yIChpID0gMDsgKGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldKTsgKytpKSB7XG5cdFx0XHRhcHBseS5jYWxsKGxpc3RlbmVyLCB0aGlzLCBhcmdzKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0Y2FzZSAxOlxuXHRcdFx0Y2FsbC5jYWxsKGxpc3RlbmVycywgdGhpcyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIDI6XG5cdFx0XHRjYWxsLmNhbGwobGlzdGVuZXJzLCB0aGlzLCBhcmd1bWVudHNbMV0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAzOlxuXHRcdFx0Y2FsbC5jYWxsKGxpc3RlbmVycywgdGhpcywgYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0YXJncyA9IG5ldyBBcnJheShsIC0gMSk7XG5cdFx0XHRmb3IgKGkgPSAxOyBpIDwgbDsgKytpKSB7XG5cdFx0XHRcdGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0fVxuXHRcdFx0YXBwbHkuY2FsbChsaXN0ZW5lcnMsIHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fVxufTtcblxubWV0aG9kcyA9IHtcblx0b246IG9uLFxuXHRvbmNlOiBvbmNlLFxuXHRvZmY6IG9mZixcblx0ZW1pdDogZW1pdFxufTtcblxuZGVzY3JpcHRvcnMgPSB7XG5cdG9uOiBkKG9uKSxcblx0b25jZTogZChvbmNlKSxcblx0b2ZmOiBkKG9mZiksXG5cdGVtaXQ6IGQoZW1pdClcbn07XG5cbmJhc2UgPSBkZWZpbmVQcm9wZXJ0aWVzKHt9LCBkZXNjcmlwdG9ycyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZ1bmN0aW9uIChvKSB7XG5cdHJldHVybiAobyA9PSBudWxsKSA/IGNyZWF0ZShiYXNlKSA6IGRlZmluZVByb3BlcnRpZXMoT2JqZWN0KG8pLCBkZXNjcmlwdG9ycyk7XG59O1xuZXhwb3J0cy5tZXRob2RzID0gbWV0aG9kcztcblxuXG4vKioqLyB9KSxcbi8qIDY2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciB2YWxpZFR5cGVzID0geyBvYmplY3Q6IHRydWUsIHN5bWJvbDogdHJ1ZSB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHN5bWJvbDtcblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0c3ltYm9sID0gU3ltYm9sKCd0ZXN0IHN5bWJvbCcpO1xuXHR0cnkgeyBTdHJpbmcoc3ltYm9sKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBSZXR1cm4gJ3RydWUnIGFsc28gZm9yIHBvbHlmaWxsc1xuXHRpZiAoIXZhbGlkVHlwZXNbdHlwZW9mIFN5bWJvbC5pdGVyYXRvcl0pIHJldHVybiBmYWxzZTtcblx0aWYgKCF2YWxpZFR5cGVzW3R5cGVvZiBTeW1ib2wudG9QcmltaXRpdmVdKSByZXR1cm4gZmFsc2U7XG5cdGlmICghdmFsaWRUeXBlc1t0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnXSkgcmV0dXJuIGZhbHNlO1xuXG5cdHJldHVybiB0cnVlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDY3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVMyMDE1IFN5bWJvbCBwb2x5ZmlsbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IChvciBwYXJ0aWFsbHkpIHN1cHBvcnQgaXRcblxuXG5cbnZhciBkICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMylcbiAgLCB2YWxpZGF0ZVN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpXG5cbiAgLCBjcmVhdGUgPSBPYmplY3QuY3JlYXRlLCBkZWZpbmVQcm9wZXJ0aWVzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXNcbiAgLCBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgb2JqUHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZVxuICAsIE5hdGl2ZVN5bWJvbCwgU3ltYm9sUG9seWZpbGwsIEhpZGRlblN5bWJvbCwgZ2xvYmFsU3ltYm9scyA9IGNyZWF0ZShudWxsKVxuICAsIGlzTmF0aXZlU2FmZTtcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicpIHtcblx0TmF0aXZlU3ltYm9sID0gU3ltYm9sO1xuXHR0cnkge1xuXHRcdFN0cmluZyhOYXRpdmVTeW1ib2woKSk7XG5cdFx0aXNOYXRpdmVTYWZlID0gdHJ1ZTtcblx0fSBjYXRjaCAoaWdub3JlKSB7fVxufVxuXG52YXIgZ2VuZXJhdGVOYW1lID0gKGZ1bmN0aW9uICgpIHtcblx0dmFyIGNyZWF0ZWQgPSBjcmVhdGUobnVsbCk7XG5cdHJldHVybiBmdW5jdGlvbiAoZGVzYykge1xuXHRcdHZhciBwb3N0Zml4ID0gMCwgbmFtZSwgaWUxMUJ1Z1dvcmthcm91bmQ7XG5cdFx0d2hpbGUgKGNyZWF0ZWRbZGVzYyArIChwb3N0Zml4IHx8ICcnKV0pICsrcG9zdGZpeDtcblx0XHRkZXNjICs9IChwb3N0Zml4IHx8ICcnKTtcblx0XHRjcmVhdGVkW2Rlc2NdID0gdHJ1ZTtcblx0XHRuYW1lID0gJ0BAJyArIGRlc2M7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqUHJvdG90eXBlLCBuYW1lLCBkLmdzKG51bGwsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Ly8gRm9yIElFMTEgaXNzdWUgc2VlOlxuXHRcdFx0Ly8gaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2tkZXRhaWwvdmlldy8xOTI4NTA4L1xuXHRcdFx0Ly8gICAgaWUxMS1icm9rZW4tZ2V0dGVycy1vbi1kb20tb2JqZWN0c1xuXHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL21lZGlrb28vZXM2LXN5bWJvbC9pc3N1ZXMvMTJcblx0XHRcdGlmIChpZTExQnVnV29ya2Fyb3VuZCkgcmV0dXJuO1xuXHRcdFx0aWUxMUJ1Z1dvcmthcm91bmQgPSB0cnVlO1xuXHRcdFx0ZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwgZCh2YWx1ZSkpO1xuXHRcdFx0aWUxMUJ1Z1dvcmthcm91bmQgPSBmYWxzZTtcblx0XHR9KSk7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH07XG59KCkpO1xuXG4vLyBJbnRlcm5hbCBjb25zdHJ1Y3RvciAobm90IG9uZSBleHBvc2VkKSBmb3IgY3JlYXRpbmcgU3ltYm9sIGluc3RhbmNlcy5cbi8vIFRoaXMgb25lIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgYHNvbWVTeW1ib2wgaW5zdGFuY2VvZiBTeW1ib2xgIGFsd2F5cyByZXR1cm4gZmFsc2VcbkhpZGRlblN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xuXHRpZiAodGhpcyBpbnN0YW5jZW9mIEhpZGRlblN5bWJvbCkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG5cdHJldHVybiBTeW1ib2xQb2x5ZmlsbChkZXNjcmlwdGlvbik7XG59O1xuXG4vLyBFeHBvc2VkIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyAocmV0dXJucyBpbnN0YW5jZXMgb2YgSGlkZGVuU3ltYm9sKVxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2xQb2x5ZmlsbCA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xuXHR2YXIgc3ltYm9sO1xuXHRpZiAodGhpcyBpbnN0YW5jZW9mIFN5bWJvbCkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG5cdGlmIChpc05hdGl2ZVNhZmUpIHJldHVybiBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pO1xuXHRzeW1ib2wgPSBjcmVhdGUoSGlkZGVuU3ltYm9sLnByb3RvdHlwZSk7XG5cdGRlc2NyaXB0aW9uID0gKGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyhkZXNjcmlwdGlvbikpO1xuXHRyZXR1cm4gZGVmaW5lUHJvcGVydGllcyhzeW1ib2wsIHtcblx0XHRfX2Rlc2NyaXB0aW9uX186IGQoJycsIGRlc2NyaXB0aW9uKSxcblx0XHRfX25hbWVfXzogZCgnJywgZ2VuZXJhdGVOYW1lKGRlc2NyaXB0aW9uKSlcblx0fSk7XG59O1xuZGVmaW5lUHJvcGVydGllcyhTeW1ib2xQb2x5ZmlsbCwge1xuXHRmb3I6IGQoZnVuY3Rpb24gKGtleSkge1xuXHRcdGlmIChnbG9iYWxTeW1ib2xzW2tleV0pIHJldHVybiBnbG9iYWxTeW1ib2xzW2tleV07XG5cdFx0cmV0dXJuIChnbG9iYWxTeW1ib2xzW2tleV0gPSBTeW1ib2xQb2x5ZmlsbChTdHJpbmcoa2V5KSkpO1xuXHR9KSxcblx0a2V5Rm9yOiBkKGZ1bmN0aW9uIChzKSB7XG5cdFx0dmFyIGtleTtcblx0XHR2YWxpZGF0ZVN5bWJvbChzKTtcblx0XHRmb3IgKGtleSBpbiBnbG9iYWxTeW1ib2xzKSBpZiAoZ2xvYmFsU3ltYm9sc1trZXldID09PSBzKSByZXR1cm4ga2V5O1xuXHR9KSxcblxuXHQvLyBUbyBlbnN1cmUgcHJvcGVyIGludGVyb3BlcmFiaWxpdHkgd2l0aCBvdGhlciBuYXRpdmUgZnVuY3Rpb25zIChlLmcuIEFycmF5LmZyb20pXG5cdC8vIGZhbGxiYWNrIHRvIGV2ZW50dWFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBnaXZlbiBzeW1ib2xcblx0aGFzSW5zdGFuY2U6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLmhhc0luc3RhbmNlKSB8fCBTeW1ib2xQb2x5ZmlsbCgnaGFzSW5zdGFuY2UnKSksXG5cdGlzQ29uY2F0U3ByZWFkYWJsZTogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlKSB8fFxuXHRcdFN5bWJvbFBvbHlmaWxsKCdpc0NvbmNhdFNwcmVhZGFibGUnKSksXG5cdGl0ZXJhdG9yOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5pdGVyYXRvcikgfHwgU3ltYm9sUG9seWZpbGwoJ2l0ZXJhdG9yJykpLFxuXHRtYXRjaDogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wubWF0Y2gpIHx8IFN5bWJvbFBvbHlmaWxsKCdtYXRjaCcpKSxcblx0cmVwbGFjZTogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wucmVwbGFjZSkgfHwgU3ltYm9sUG9seWZpbGwoJ3JlcGxhY2UnKSksXG5cdHNlYXJjaDogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wuc2VhcmNoKSB8fCBTeW1ib2xQb2x5ZmlsbCgnc2VhcmNoJykpLFxuXHRzcGVjaWVzOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5zcGVjaWVzKSB8fCBTeW1ib2xQb2x5ZmlsbCgnc3BlY2llcycpKSxcblx0c3BsaXQ6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnNwbGl0KSB8fCBTeW1ib2xQb2x5ZmlsbCgnc3BsaXQnKSksXG5cdHRvUHJpbWl0aXZlOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC50b1ByaW1pdGl2ZSkgfHwgU3ltYm9sUG9seWZpbGwoJ3RvUHJpbWl0aXZlJykpLFxuXHR0b1N0cmluZ1RhZzogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wudG9TdHJpbmdUYWcpIHx8IFN5bWJvbFBvbHlmaWxsKCd0b1N0cmluZ1RhZycpKSxcblx0dW5zY29wYWJsZXM6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnVuc2NvcGFibGVzKSB8fCBTeW1ib2xQb2x5ZmlsbCgndW5zY29wYWJsZXMnKSlcbn0pO1xuXG4vLyBJbnRlcm5hbCB0d2Vha3MgZm9yIHJlYWwgc3ltYm9sIHByb2R1Y2VyXG5kZWZpbmVQcm9wZXJ0aWVzKEhpZGRlblN5bWJvbC5wcm90b3R5cGUsIHtcblx0Y29uc3RydWN0b3I6IGQoU3ltYm9sUG9seWZpbGwpLFxuXHR0b1N0cmluZzogZCgnJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fX25hbWVfXzsgfSlcbn0pO1xuXG4vLyBQcm9wZXIgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBleHBvc2VkIG9uIFN5bWJvbC5wcm90b3R5cGVcbi8vIFRoZXkgd29uJ3QgYmUgYWNjZXNzaWJsZSBvbiBwcm9kdWNlZCBzeW1ib2wgaW5zdGFuY2VzIGFzIHRoZXkgZGVyaXZlIGZyb20gSGlkZGVuU3ltYm9sLnByb3RvdHlwZVxuZGVmaW5lUHJvcGVydGllcyhTeW1ib2xQb2x5ZmlsbC5wcm90b3R5cGUsIHtcblx0dG9TdHJpbmc6IGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gJ1N5bWJvbCAoJyArIHZhbGlkYXRlU3ltYm9sKHRoaXMpLl9fZGVzY3JpcHRpb25fXyArICcpJzsgfSksXG5cdHZhbHVlT2Y6IGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsaWRhdGVTeW1ib2wodGhpcyk7IH0pXG59KTtcbmRlZmluZVByb3BlcnR5KFN5bWJvbFBvbHlmaWxsLnByb3RvdHlwZSwgU3ltYm9sUG9seWZpbGwudG9QcmltaXRpdmUsIGQoJycsIGZ1bmN0aW9uICgpIHtcblx0dmFyIHN5bWJvbCA9IHZhbGlkYXRlU3ltYm9sKHRoaXMpO1xuXHRpZiAodHlwZW9mIHN5bWJvbCA9PT0gJ3N5bWJvbCcpIHJldHVybiBzeW1ib2w7XG5cdHJldHVybiBzeW1ib2wudG9TdHJpbmcoKTtcbn0pKTtcbmRlZmluZVByb3BlcnR5KFN5bWJvbFBvbHlmaWxsLnByb3RvdHlwZSwgU3ltYm9sUG9seWZpbGwudG9TdHJpbmdUYWcsIGQoJ2MnLCAnU3ltYm9sJykpO1xuXG4vLyBQcm9wZXIgaW1wbGVtZW50YXRvbiBvZiB0b1ByaW1pdGl2ZSBhbmQgdG9TdHJpbmdUYWcgZm9yIHJldHVybmVkIHN5bWJvbCBpbnN0YW5jZXNcbmRlZmluZVByb3BlcnR5KEhpZGRlblN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnLFxuXHRkKCdjJywgU3ltYm9sUG9seWZpbGwucHJvdG90eXBlW1N5bWJvbFBvbHlmaWxsLnRvU3RyaW5nVGFnXSkpO1xuXG4vLyBOb3RlOiBJdCdzIGltcG9ydGFudCB0byBkZWZpbmUgYHRvUHJpbWl0aXZlYCBhcyBsYXN0IG9uZSwgYXMgc29tZSBpbXBsZW1lbnRhdGlvbnNcbi8vIGltcGxlbWVudCBgdG9QcmltaXRpdmVgIG5hdGl2ZWx5IHdpdGhvdXQgaW1wbGVtZW50aW5nIGB0b1N0cmluZ1RhZ2AgKG9yIG90aGVyIHNwZWNpZmllZCBzeW1ib2xzKVxuLy8gQW5kIHRoYXQgbWF5IGludm9rZSBlcnJvciBpbiBkZWZpbml0aW9uIGZsb3c6XG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpa29vL2VzNi1zeW1ib2wvaXNzdWVzLzEzI2lzc3VlY29tbWVudC0xNjQxNDYxNDlcbmRlZmluZVByb3BlcnR5KEhpZGRlblN5bWJvbC5wcm90b3R5cGUsIFN5bWJvbFBvbHlmaWxsLnRvUHJpbWl0aXZlLFxuXHRkKCdjJywgU3ltYm9sUG9seWZpbGwucHJvdG90eXBlW1N5bWJvbFBvbHlmaWxsLnRvUHJpbWl0aXZlXSkpO1xuXG5cbi8qKiovIH0pLFxuLyogNjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdGlmICghaXNTeW1ib2wodmFsdWUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgXCIgaXMgbm90IGEgc3ltYm9sXCIpO1xuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoeCkge1xuXHRpZiAoIXgpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiB4ID09PSAnc3ltYm9sJykgcmV0dXJuIHRydWU7XG5cdGlmICgheC5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xuXHRpZiAoeC5jb25zdHJ1Y3Rvci5uYW1lICE9PSAnU3ltYm9sJykgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gKHhbeC5jb25zdHJ1Y3Rvci50b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNBcmd1bWVudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpXG4gICwgaXNWYWx1ZSAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpXG4gICwgaXNTdHJpbmcgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuXG52YXIgaXRlcmF0b3JTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLml0ZXJhdG9yXG4gICwgaXNBcnJheSAgICAgICAgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRpZiAoIWlzVmFsdWUodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmIChpc0FycmF5KHZhbHVlKSkgcmV0dXJuIHRydWU7XG5cdGlmIChpc1N0cmluZyh2YWx1ZSkpIHJldHVybiB0cnVlO1xuXHRpZiAoaXNBcmd1bWVudHModmFsdWUpKSByZXR1cm4gdHJ1ZTtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZVtpdGVyYXRvclN5bWJvbF0gPT09IFwiZnVuY3Rpb25cIjtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNBcmd1bWVudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpXG4gICwgY2FsbGFibGUgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgaXNTdHJpbmcgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpXG4gICwgZ2V0ICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5LCBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGNiIC8qLCB0aGlzQXJnKi8pIHtcblx0dmFyIG1vZGUsIHRoaXNBcmcgPSBhcmd1bWVudHNbMl0sIHJlc3VsdCwgZG9CcmVhaywgYnJva2VuLCBpLCBsZW5ndGgsIGNoYXIsIGNvZGU7XG5cdGlmIChpc0FycmF5KGl0ZXJhYmxlKSB8fCBpc0FyZ3VtZW50cyhpdGVyYWJsZSkpIG1vZGUgPSBcImFycmF5XCI7XG5cdGVsc2UgaWYgKGlzU3RyaW5nKGl0ZXJhYmxlKSkgbW9kZSA9IFwic3RyaW5nXCI7XG5cdGVsc2UgaXRlcmFibGUgPSBnZXQoaXRlcmFibGUpO1xuXG5cdGNhbGxhYmxlKGNiKTtcblx0ZG9CcmVhayA9IGZ1bmN0aW9uICgpIHtcblx0XHRicm9rZW4gPSB0cnVlO1xuXHR9O1xuXHRpZiAobW9kZSA9PT0gXCJhcnJheVwiKSB7XG5cdFx0c29tZS5jYWxsKGl0ZXJhYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdGNhbGwuY2FsbChjYiwgdGhpc0FyZywgdmFsdWUsIGRvQnJlYWspO1xuXHRcdFx0cmV0dXJuIGJyb2tlbjtcblx0XHR9KTtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKG1vZGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRsZW5ndGggPSBpdGVyYWJsZS5sZW5ndGg7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0XHRjaGFyID0gaXRlcmFibGVbaV07XG5cdFx0XHRpZiAoaSArIDEgPCBsZW5ndGgpIHtcblx0XHRcdFx0Y29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcblx0XHRcdFx0aWYgKGNvZGUgPj0gMHhkODAwICYmIGNvZGUgPD0gMHhkYmZmKSBjaGFyICs9IGl0ZXJhYmxlWysraV07XG5cdFx0XHR9XG5cdFx0XHRjYWxsLmNhbGwoY2IsIHRoaXNBcmcsIGNoYXIsIGRvQnJlYWspO1xuXHRcdFx0aWYgKGJyb2tlbikgYnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXHRyZXN1bHQgPSBpdGVyYWJsZS5uZXh0KCk7XG5cblx0d2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuXHRcdGNhbGwuY2FsbChjYiwgdGhpc0FyZywgcmVzdWx0LnZhbHVlLCBkb0JyZWFrKTtcblx0XHRpZiAoYnJva2VuKSByZXR1cm47XG5cdFx0cmVzdWx0ID0gaXRlcmFibGUubmV4dCgpO1xuXHR9XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzQXJndW1lbnRzICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KVxuICAsIGlzU3RyaW5nICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KVxuICAsIEFycmF5SXRlcmF0b3IgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MylcbiAgLCBTdHJpbmdJdGVyYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oODMpXG4gICwgaXRlcmFibGUgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKVxuICAsIGl0ZXJhdG9yU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5pdGVyYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG5cdGlmICh0eXBlb2YgaXRlcmFibGUob2JqKVtpdGVyYXRvclN5bWJvbF0gPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG9ialtpdGVyYXRvclN5bWJvbF0oKTtcblx0aWYgKGlzQXJndW1lbnRzKG9iaikpIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcihvYmopO1xuXHRpZiAoaXNTdHJpbmcob2JqKSkgcmV0dXJuIG5ldyBTdHJpbmdJdGVyYXRvcihvYmopO1xuXHRyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3Iob2JqKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpXG4gICwgY29udGFpbnMgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuICAsIGQgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuICAsIFN5bWJvbCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKVxuICAsIEl0ZXJhdG9yICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgQXJyYXlJdGVyYXRvcjtcblxuQXJyYXlJdGVyYXRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyciwga2luZCkge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJyYXlJdGVyYXRvcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3J1wiKTtcblx0SXRlcmF0b3IuY2FsbCh0aGlzLCBhcnIpO1xuXHRpZiAoIWtpbmQpIGtpbmQgPSBcInZhbHVlXCI7XG5cdGVsc2UgaWYgKGNvbnRhaW5zLmNhbGwoa2luZCwgXCJrZXkrdmFsdWVcIikpIGtpbmQgPSBcImtleSt2YWx1ZVwiO1xuXHRlbHNlIGlmIChjb250YWlucy5jYWxsKGtpbmQsIFwia2V5XCIpKSBraW5kID0gXCJrZXlcIjtcblx0ZWxzZSBraW5kID0gXCJ2YWx1ZVwiO1xuXHRkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9fa2luZF9fXCIsIGQoXCJcIiwga2luZCkpO1xufTtcbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoQXJyYXlJdGVyYXRvciwgSXRlcmF0b3IpO1xuXG4vLyBJbnRlcm5hbCAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUgZG9lc24ndCBleHBvc2UgaXRzIGNvbnN0cnVjdG9yXG5kZWxldGUgQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cbkFycmF5SXRlcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvci5wcm90b3R5cGUsIHtcblx0X3Jlc29sdmU6IGQoZnVuY3Rpb24gKGkpIHtcblx0XHRpZiAodGhpcy5fX2tpbmRfXyA9PT0gXCJ2YWx1ZVwiKSByZXR1cm4gdGhpcy5fX2xpc3RfX1tpXTtcblx0XHRpZiAodGhpcy5fX2tpbmRfXyA9PT0gXCJrZXkrdmFsdWVcIikgcmV0dXJuIFtpLCB0aGlzLl9fbGlzdF9fW2ldXTtcblx0XHRyZXR1cm4gaTtcblx0fSlcbn0pO1xuZGVmaW5lUHJvcGVydHkoQXJyYXlJdGVyYXRvci5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywgZChcImNcIiwgXCJBcnJheSBJdGVyYXRvclwiKSk7XG5cblxuLyoqKi8gfSksXG4vKiA3NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgY29weSAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzUpXG4gICwgbm9ybWFsaXplT3B0aW9ucyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpXG4gICwgZW5zdXJlQ2FsbGFibGUgICA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcbiAgLCBtYXAgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MClcbiAgLCBjYWxsYWJsZSAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuICAsIHZhbGlkVmFsdWUgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApXG5cbiAgLCBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gICwgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgZGVmaW5lO1xuXG5kZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgZGVzYywgb3B0aW9ucykge1xuXHR2YXIgdmFsdWUgPSB2YWxpZFZhbHVlKGRlc2MpICYmIGNhbGxhYmxlKGRlc2MudmFsdWUpLCBkZ3M7XG5cdGRncyA9IGNvcHkoZGVzYyk7XG5cdGRlbGV0ZSBkZ3Mud3JpdGFibGU7XG5cdGRlbGV0ZSBkZ3MudmFsdWU7XG5cdGRncy5nZXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKCFvcHRpb25zLm92ZXJ3cml0ZURlZmluaXRpb24gJiYgaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCBuYW1lKSkgcmV0dXJuIHZhbHVlO1xuXHRcdGRlc2MudmFsdWUgPSBiaW5kLmNhbGwodmFsdWUsIG9wdGlvbnMucmVzb2x2ZUNvbnRleHQgPyBvcHRpb25zLnJlc29sdmVDb250ZXh0KHRoaXMpIDogdGhpcyk7XG5cdFx0ZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwgZGVzYyk7XG5cdFx0cmV0dXJuIHRoaXNbbmFtZV07XG5cdH07XG5cdHJldHVybiBkZ3M7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwcm9wcy8qLCBvcHRpb25zKi8pIHtcblx0dmFyIG9wdGlvbnMgPSBub3JtYWxpemVPcHRpb25zKGFyZ3VtZW50c1sxXSk7XG5cdGlmIChvcHRpb25zLnJlc29sdmVDb250ZXh0ICE9IG51bGwpIGVuc3VyZUNhbGxhYmxlKG9wdGlvbnMucmVzb2x2ZUNvbnRleHQpO1xuXHRyZXR1cm4gbWFwKHByb3BzLCBmdW5jdGlvbiAoZGVzYywgbmFtZSkgeyByZXR1cm4gZGVmaW5lKG5hbWUsIGRlc2MsIG9wdGlvbnMpOyB9KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgYUZyb20gID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NilcbiAgLCBhc3NpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuICAsIHZhbHVlICA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iai8qLCBwcm9wZXJ0eU5hbWVzLCBvcHRpb25zKi8pIHtcblx0dmFyIGNvcHkgPSBPYmplY3QodmFsdWUob2JqKSksIHByb3BlcnR5TmFtZXMgPSBhcmd1bWVudHNbMV0sIG9wdGlvbnMgPSBPYmplY3QoYXJndW1lbnRzWzJdKTtcblx0aWYgKGNvcHkgIT09IG9iaiAmJiAhcHJvcGVydHlOYW1lcykgcmV0dXJuIGNvcHk7XG5cdHZhciByZXN1bHQgPSB7fTtcblx0aWYgKHByb3BlcnR5TmFtZXMpIHtcblx0XHRhRnJvbShwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG5cdFx0XHRpZiAob3B0aW9ucy5lbnN1cmUgfHwgcHJvcGVydHlOYW1lIGluIG9iaikgcmVzdWx0W3Byb3BlcnR5TmFtZV0gPSBvYmpbcHJvcGVydHlOYW1lXTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRhc3NpZ24ocmVzdWx0LCBvYmopO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KSgpXG5cdD8gQXJyYXkuZnJvbVxuXHQ6IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xuXG5cbi8qKiovIH0pLFxuLyogNzcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBmcm9tID0gQXJyYXkuZnJvbSwgYXJyLCByZXN1bHQ7XG5cdGlmICh0eXBlb2YgZnJvbSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cdGFyciA9IFtcInJhelwiLCBcImR3YVwiXTtcblx0cmVzdWx0ID0gZnJvbShhcnIpO1xuXHRyZXR1cm4gQm9vbGVhbihyZXN1bHQgJiYgKHJlc3VsdCAhPT0gYXJyKSAmJiAocmVzdWx0WzFdID09PSBcImR3YVwiKSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGl0ZXJhdG9yU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS5pdGVyYXRvclxuICAsIGlzQXJndW1lbnRzICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KVxuICAsIGlzRnVuY3Rpb24gICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSlcbiAgLCB0b1Bvc0ludCAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpXG4gICwgY2FsbGFibGUgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgdmFsaWRWYWx1ZSAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApXG4gICwgaXNWYWx1ZSAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpXG4gICwgaXNTdHJpbmcgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpXG4gICwgaXNBcnJheSAgICAgICAgPSBBcnJheS5pc0FycmF5XG4gICwgY2FsbCAgICAgICAgICAgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbFxuICAsIGRlc2MgICAgICAgICAgID0geyBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogbnVsbCB9XG4gICwgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcnJheUxpa2UgLyosIG1hcEZuLCB0aGlzQXJnKi8pIHtcblx0dmFyIG1hcEZuID0gYXJndW1lbnRzWzFdXG5cdCAgLCB0aGlzQXJnID0gYXJndW1lbnRzWzJdXG5cdCAgLCBDb250ZXh0XG5cdCAgLCBpXG5cdCAgLCBqXG5cdCAgLCBhcnJcblx0ICAsIGxlbmd0aFxuXHQgICwgY29kZVxuXHQgICwgaXRlcmF0b3Jcblx0ICAsIHJlc3VsdFxuXHQgICwgZ2V0SXRlcmF0b3Jcblx0ICAsIHZhbHVlO1xuXG5cdGFycmF5TGlrZSA9IE9iamVjdCh2YWxpZFZhbHVlKGFycmF5TGlrZSkpO1xuXG5cdGlmIChpc1ZhbHVlKG1hcEZuKSkgY2FsbGFibGUobWFwRm4pO1xuXHRpZiAoIXRoaXMgfHwgdGhpcyA9PT0gQXJyYXkgfHwgIWlzRnVuY3Rpb24odGhpcykpIHtcblx0XHQvLyBSZXN1bHQ6IFBsYWluIGFycmF5XG5cdFx0aWYgKCFtYXBGbikge1xuXHRcdFx0aWYgKGlzQXJndW1lbnRzKGFycmF5TGlrZSkpIHtcblx0XHRcdFx0Ly8gU291cmNlOiBBcmd1bWVudHNcblx0XHRcdFx0bGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aDtcblx0XHRcdFx0aWYgKGxlbmd0aCAhPT0gMSkgcmV0dXJuIEFycmF5LmFwcGx5KG51bGwsIGFycmF5TGlrZSk7XG5cdFx0XHRcdGFyciA9IG5ldyBBcnJheSgxKTtcblx0XHRcdFx0YXJyWzBdID0gYXJyYXlMaWtlWzBdO1xuXHRcdFx0XHRyZXR1cm4gYXJyO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzQXJyYXkoYXJyYXlMaWtlKSkge1xuXHRcdFx0XHQvLyBTb3VyY2U6IEFycmF5XG5cdFx0XHRcdGFyciA9IG5ldyBBcnJheShsZW5ndGggPSBhcnJheUxpa2UubGVuZ3RoKTtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSBhcnJbaV0gPSBhcnJheUxpa2VbaV07XG5cdFx0XHRcdHJldHVybiBhcnI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFyciA9IFtdO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFJlc3VsdDogTm9uIHBsYWluIGFycmF5XG5cdFx0Q29udGV4dCA9IHRoaXM7XG5cdH1cblxuXHRpZiAoIWlzQXJyYXkoYXJyYXlMaWtlKSkge1xuXHRcdGlmICgoZ2V0SXRlcmF0b3IgPSBhcnJheUxpa2VbaXRlcmF0b3JTeW1ib2xdKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBTb3VyY2U6IEl0ZXJhdG9yXG5cdFx0XHRpdGVyYXRvciA9IGNhbGxhYmxlKGdldEl0ZXJhdG9yKS5jYWxsKGFycmF5TGlrZSk7XG5cdFx0XHRpZiAoQ29udGV4dCkgYXJyID0gbmV3IENvbnRleHQoKTtcblx0XHRcdHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcblx0XHRcdGkgPSAwO1xuXHRcdFx0d2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuXHRcdFx0XHR2YWx1ZSA9IG1hcEZuID8gY2FsbC5jYWxsKG1hcEZuLCB0aGlzQXJnLCByZXN1bHQudmFsdWUsIGkpIDogcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRpZiAoQ29udGV4dCkge1xuXHRcdFx0XHRcdGRlc2MudmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRkZWZpbmVQcm9wZXJ0eShhcnIsIGksIGRlc2MpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFycltpXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcblx0XHRcdFx0KytpO1xuXHRcdFx0fVxuXHRcdFx0bGVuZ3RoID0gaTtcblx0XHR9IGVsc2UgaWYgKGlzU3RyaW5nKGFycmF5TGlrZSkpIHtcblx0XHRcdC8vIFNvdXJjZTogU3RyaW5nXG5cdFx0XHRsZW5ndGggPSBhcnJheUxpa2UubGVuZ3RoO1xuXHRcdFx0aWYgKENvbnRleHQpIGFyciA9IG5ldyBDb250ZXh0KCk7XG5cdFx0XHRmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdHZhbHVlID0gYXJyYXlMaWtlW2ldO1xuXHRcdFx0XHRpZiAoaSArIDEgPCBsZW5ndGgpIHtcblx0XHRcdFx0XHRjb2RlID0gdmFsdWUuY2hhckNvZGVBdCgwKTtcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWRlcHRoXG5cdFx0XHRcdFx0aWYgKGNvZGUgPj0gMHhkODAwICYmIGNvZGUgPD0gMHhkYmZmKSB2YWx1ZSArPSBhcnJheUxpa2VbKytpXTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YWx1ZSA9IG1hcEZuID8gY2FsbC5jYWxsKG1hcEZuLCB0aGlzQXJnLCB2YWx1ZSwgaikgOiB2YWx1ZTtcblx0XHRcdFx0aWYgKENvbnRleHQpIHtcblx0XHRcdFx0XHRkZXNjLnZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdFx0ZGVmaW5lUHJvcGVydHkoYXJyLCBqLCBkZXNjKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhcnJbal0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQrK2o7XG5cdFx0XHR9XG5cdFx0XHRsZW5ndGggPSBqO1xuXHRcdH1cblx0fVxuXHRpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBTb3VyY2U6IGFycmF5IG9yIGFycmF5LWxpa2Vcblx0XHRsZW5ndGggPSB0b1Bvc0ludChhcnJheUxpa2UubGVuZ3RoKTtcblx0XHRpZiAoQ29udGV4dCkgYXJyID0gbmV3IENvbnRleHQobGVuZ3RoKTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcblx0XHRcdHZhbHVlID0gbWFwRm4gPyBjYWxsLmNhbGwobWFwRm4sIHRoaXNBcmcsIGFycmF5TGlrZVtpXSwgaSkgOiBhcnJheUxpa2VbaV07XG5cdFx0XHRpZiAoQ29udGV4dCkge1xuXHRcdFx0XHRkZXNjLnZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdGRlZmluZVByb3BlcnR5KGFyciwgaSwgZGVzYyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhcnJbaV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKENvbnRleHQpIHtcblx0XHRkZXNjLnZhbHVlID0gbnVsbDtcblx0XHRhcnIubGVuZ3RoID0gbGVuZ3RoO1xuXHR9XG5cdHJldHVybiBhcnI7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIG9ialRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywgaWQgPSBvYmpUb1N0cmluZy5jYWxsKF9fd2VicGFja19yZXF1aXJlX18oMTcpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09PSBpZDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgY2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgZm9yRWFjaCAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxKVxuICAsIGNhbGwgICAgID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaiwgY2IgLyosIHRoaXNBcmcqLykge1xuXHR2YXIgcmVzdWx0ID0ge30sIHRoaXNBcmcgPSBhcmd1bWVudHNbMl07XG5cdGNhbGxhYmxlKGNiKTtcblx0Zm9yRWFjaChvYmosIGZ1bmN0aW9uICh2YWx1ZSwga2V5LCB0YXJnZXRPYmosIGluZGV4KSB7XG5cdFx0cmVzdWx0W2tleV0gPSBjYWxsLmNhbGwoY2IsIHRoaXNBcmcsIHZhbHVlLCBrZXksIHRhcmdldE9iaiwgaW5kZXgpO1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpKFwiZm9yRWFjaFwiKTtcblxuXG4vKioqLyB9KSxcbi8qIDgyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gSW50ZXJuYWwgbWV0aG9kLCB1c2VkIGJ5IGl0ZXJhdGlvbiBmdW5jdGlvbnMuXG4vLyBDYWxscyBhIGZ1bmN0aW9uIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyIGZvdW5kIGluIG9iamVjdFxuLy8gT3B0aW9uYWxseSB0YWtlcyBjb21wYXJlRm4gdG8gaXRlcmF0ZSBvYmplY3QgaW4gc3BlY2lmaWMgb3JkZXJcblxuXG5cbnZhciBjYWxsYWJsZSAgICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcbiAgLCB2YWx1ZSAgICAgICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMClcbiAgLCBiaW5kICAgICAgICAgICAgICAgICAgICA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gICwgY2FsbCAgICAgICAgICAgICAgICAgICAgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbFxuICAsIGtleXMgICAgICAgICAgICAgICAgICAgID0gT2JqZWN0LmtleXNcbiAgLCBvYmpQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgZGVmVmFsKSB7XG5cdHJldHVybiBmdW5jdGlvbiAob2JqLCBjYiAvKiwgdGhpc0FyZywgY29tcGFyZUZuKi8pIHtcblx0XHR2YXIgbGlzdCwgdGhpc0FyZyA9IGFyZ3VtZW50c1syXSwgY29tcGFyZUZuID0gYXJndW1lbnRzWzNdO1xuXHRcdG9iaiA9IE9iamVjdCh2YWx1ZShvYmopKTtcblx0XHRjYWxsYWJsZShjYik7XG5cblx0XHRsaXN0ID0ga2V5cyhvYmopO1xuXHRcdGlmIChjb21wYXJlRm4pIHtcblx0XHRcdGxpc3Quc29ydCh0eXBlb2YgY29tcGFyZUZuID09PSBcImZ1bmN0aW9uXCIgPyBiaW5kLmNhbGwoY29tcGFyZUZuLCBvYmopIDogdW5kZWZpbmVkKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikgbWV0aG9kID0gbGlzdFttZXRob2RdO1xuXHRcdHJldHVybiBjYWxsLmNhbGwobWV0aG9kLCBsaXN0LCBmdW5jdGlvbiAoa2V5LCBpbmRleCkge1xuXHRcdFx0aWYgKCFvYmpQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iaiwga2V5KSkgcmV0dXJuIGRlZlZhbDtcblx0XHRcdHJldHVybiBjYWxsLmNhbGwoY2IsIHRoaXNBcmcsIG9ialtrZXldLCBrZXksIG9iaiwgaW5kZXgpO1xuXHRcdH0pO1xuXHR9O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDgzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gVGhhbmtzIEBtYXRoaWFzYnluZW5zXG4vLyBodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUjaXRlcmF0aW5nLW92ZXItc3ltYm9sc1xuXG5cblxudmFyIHNldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KVxuICAsIGQgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuICAsIFN5bWJvbCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKVxuICAsIEl0ZXJhdG9yICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgU3RyaW5nSXRlcmF0b3I7XG5cblN0cmluZ0l0ZXJhdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdHJpbmdJdGVyYXRvcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3J1wiKTtcblx0c3RyID0gU3RyaW5nKHN0cik7XG5cdEl0ZXJhdG9yLmNhbGwodGhpcywgc3RyKTtcblx0ZGVmaW5lUHJvcGVydHkodGhpcywgXCJfX2xlbmd0aF9fXCIsIGQoXCJcIiwgc3RyLmxlbmd0aCkpO1xufTtcbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoU3RyaW5nSXRlcmF0b3IsIEl0ZXJhdG9yKTtcblxuLy8gSW50ZXJuYWwgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIGRvZXNuJ3QgZXhwb3NlIGl0cyBjb25zdHJ1Y3RvclxuZGVsZXRlIFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcblxuU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvci5wcm90b3R5cGUsIHtcblx0X25leHQ6IGQoZnVuY3Rpb24gKCkge1xuXHRcdGlmICghdGhpcy5fX2xpc3RfXykgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRpZiAodGhpcy5fX25leHRJbmRleF9fIDwgdGhpcy5fX2xlbmd0aF9fKSByZXR1cm4gdGhpcy5fX25leHRJbmRleF9fKys7XG5cdFx0dGhpcy5fdW5CaW5kKCk7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSksXG5cdF9yZXNvbHZlOiBkKGZ1bmN0aW9uIChpKSB7XG5cdFx0dmFyIGNoYXIgPSB0aGlzLl9fbGlzdF9fW2ldLCBjb2RlO1xuXHRcdGlmICh0aGlzLl9fbmV4dEluZGV4X18gPT09IHRoaXMuX19sZW5ndGhfXykgcmV0dXJuIGNoYXI7XG5cdFx0Y29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcblx0XHRpZiAoY29kZSA+PSAweGQ4MDAgJiYgY29kZSA8PSAweGRiZmYpIHJldHVybiBjaGFyICsgdGhpcy5fX2xpc3RfX1t0aGlzLl9fbmV4dEluZGV4X18rK107XG5cdFx0cmV0dXJuIGNoYXI7XG5cdH0pXG59KTtcbmRlZmluZVByb3BlcnR5KFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCBkKFwiY1wiLCBcIlN0cmluZyBJdGVyYXRvclwiKSk7XG5cblxuLyoqKi8gfSksXG4vKiA4NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgc2V0UHJvdG90eXBlT2YgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpXG4gICwgY29udGFpbnMgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuICAsIGQgICAgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuICAsIEl0ZXJhdG9yICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMilcbiAgLCB0b1N0cmluZ1RhZ1N5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMikudG9TdHJpbmdUYWdcblxuICAsIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gICwgU2V0SXRlcmF0b3I7XG5cblNldEl0ZXJhdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0LCBraW5kKSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBTZXRJdGVyYXRvcikpIHJldHVybiBuZXcgU2V0SXRlcmF0b3Ioc2V0LCBraW5kKTtcblx0SXRlcmF0b3IuY2FsbCh0aGlzLCBzZXQuX19zZXREYXRhX18sIHNldCk7XG5cdGlmICgha2luZCkga2luZCA9ICd2YWx1ZSc7XG5cdGVsc2UgaWYgKGNvbnRhaW5zLmNhbGwoa2luZCwgJ2tleSt2YWx1ZScpKSBraW5kID0gJ2tleSt2YWx1ZSc7XG5cdGVsc2Uga2luZCA9ICd2YWx1ZSc7XG5cdGRlZmluZVByb3BlcnR5KHRoaXMsICdfX2tpbmRfXycsIGQoJycsIGtpbmQpKTtcbn07XG5pZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFNldEl0ZXJhdG9yLCBJdGVyYXRvcik7XG5cblNldEl0ZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3IucHJvdG90eXBlLCB7XG5cdGNvbnN0cnVjdG9yOiBkKFNldEl0ZXJhdG9yKSxcblx0X3Jlc29sdmU6IGQoZnVuY3Rpb24gKGkpIHtcblx0XHRpZiAodGhpcy5fX2tpbmRfXyA9PT0gJ3ZhbHVlJykgcmV0dXJuIHRoaXMuX19saXN0X19baV07XG5cdFx0cmV0dXJuIFt0aGlzLl9fbGlzdF9fW2ldLCB0aGlzLl9fbGlzdF9fW2ldXTtcblx0fSksXG5cdHRvU3RyaW5nOiBkKGZ1bmN0aW9uICgpIHsgcmV0dXJuICdbb2JqZWN0IFNldCBJdGVyYXRvcl0nOyB9KVxufSk7XG5kZWZpbmVQcm9wZXJ0eShTZXRJdGVyYXRvci5wcm90b3R5cGUsIHRvU3RyaW5nVGFnU3ltYm9sLCBkKCdjJywgJ1NldCBJdGVyYXRvcicpKTtcblxuXG4vKioqLyB9KSxcbi8qIDg1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRXhwb3J0cyB0cnVlIGlmIGVudmlyb25tZW50IHByb3ZpZGVzIG5hdGl2ZSBgU2V0YCBpbXBsZW1lbnRhdGlvbixcbi8vIHdoYXRldmVyIHRoYXQgaXMuXG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG5cdGlmICh0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTZXQucHJvdG90eXBlKSA9PT0gJ1tvYmplY3QgU2V0XScpO1xufSgpKTtcblxuXG4vKioqLyB9KSxcbi8qIDg2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8qXG5cdHBzZXVkbyBzZWxlY3RvcnNcblxuXHQtLS1cblxuXHR0aGV5IGFyZSBhdmFpbGFibGUgaW4gdHdvIGZvcm1zOlxuXHQqIGZpbHRlcnMgY2FsbGVkIHdoZW4gdGhlIHNlbGVjdG9yXG5cdCAgaXMgY29tcGlsZWQgYW5kIHJldHVybiBhIGZ1bmN0aW9uXG5cdCAgdGhhdCBuZWVkcyB0byByZXR1cm4gbmV4dCgpXG5cdCogcHNldWRvcyBnZXQgY2FsbGVkIG9uIGV4ZWN1dGlvblxuXHQgIHRoZXkgbmVlZCB0byByZXR1cm4gYSBib29sZWFuXG4qL1xuXG52YXIgZ2V0TkNoZWNrICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3KSxcblx0QmFzZUZ1bmNzICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLFxuXHRhdHRyaWJ1dGVzRmFjdG9yeSA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpLFxuXHR0cnVlRnVuYyAgICAgICAgICA9IEJhc2VGdW5jcy50cnVlRnVuYyxcblx0ZmFsc2VGdW5jICAgICAgICAgPSBCYXNlRnVuY3MuZmFsc2VGdW5jO1xuXG5mdW5jdGlvbiBmaWx0ZXJzRmFjdG9yeShhZGFwdGVyKXtcblx0dmFyIGF0dHJpYnV0ZXMgID0gYXR0cmlidXRlc0ZhY3RvcnkoYWRhcHRlciksXG5cdFx0Y2hlY2tBdHRyaWIgPSBhdHRyaWJ1dGVzLnJ1bGVzLmVxdWFscztcblxuXHQvL2hlbHBlciBtZXRob2RzXG5cdGZ1bmN0aW9uIGVxdWFscyhhLCBiKXtcblx0XHRpZih0eXBlb2YgYWRhcHRlci5lcXVhbHMgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGFkYXB0ZXIuZXF1YWxzKGEsIGIpO1xuXG5cdFx0cmV0dXJuIGEgPT09IGI7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRBdHRyaWJGdW5jKG5hbWUsIHZhbHVlKXtcblx0XHR2YXIgZGF0YSA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9O1xuXHRcdHJldHVybiBmdW5jdGlvbiBhdHRyaWJGdW5jKG5leHQpe1xuXHRcdFx0cmV0dXJuIGNoZWNrQXR0cmliKG5leHQsIGRhdGEpO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDaGlsZEZ1bmMobmV4dCl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuICEhYWRhcHRlci5nZXRQYXJlbnQoZWxlbSkgJiYgbmV4dChlbGVtKTtcblx0XHR9O1xuXHR9XG5cblx0dmFyIGZpbHRlcnMgPSB7XG5cdFx0Y29udGFpbnM6IGZ1bmN0aW9uKG5leHQsIHRleHQpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGNvbnRhaW5zKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gbmV4dChlbGVtKSAmJiBhZGFwdGVyLmdldFRleHQoZWxlbSkuaW5kZXhPZih0ZXh0KSA+PSAwO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGljb250YWluczogZnVuY3Rpb24obmV4dCwgdGV4dCl7XG5cdFx0XHR2YXIgaXRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gaWNvbnRhaW5zKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gbmV4dChlbGVtKSAmJlxuXHRcdFx0XHRcdGFkYXB0ZXIuZ2V0VGV4dChlbGVtKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoaXRleHQpID49IDA7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHQvL2xvY2F0aW9uIHNwZWNpZmljIG1ldGhvZHNcblx0XHRcIm50aC1jaGlsZFwiOiBmdW5jdGlvbihuZXh0LCBydWxlKXtcblx0XHRcdHZhciBmdW5jID0gZ2V0TkNoZWNrKHJ1bGUpO1xuXG5cdFx0XHRpZihmdW5jID09PSBmYWxzZUZ1bmMpIHJldHVybiBmdW5jO1xuXHRcdFx0aWYoZnVuYyA9PT0gdHJ1ZUZ1bmMpICByZXR1cm4gZ2V0Q2hpbGRGdW5jKG5leHQpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gbnRoQ2hpbGQoZWxlbSl7XG5cdFx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdFx0Zm9yKHZhciBpID0gMCwgcG9zID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRlbHNlIHBvcysrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmdW5jKHBvcykgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRcIm50aC1sYXN0LWNoaWxkXCI6IGZ1bmN0aW9uKG5leHQsIHJ1bGUpe1xuXHRcdFx0dmFyIGZ1bmMgPSBnZXROQ2hlY2socnVsZSk7XG5cblx0XHRcdGlmKGZ1bmMgPT09IGZhbHNlRnVuYykgcmV0dXJuIGZ1bmM7XG5cdFx0XHRpZihmdW5jID09PSB0cnVlRnVuYykgIHJldHVybiBnZXRDaGlsZEZ1bmMobmV4dCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBudGhMYXN0Q2hpbGQoZWxlbSl7XG5cdFx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdFx0Zm9yKHZhciBwb3MgPSAwLCBpID0gc2libGluZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xuXHRcdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSBicmVhaztcblx0XHRcdFx0XHRcdGVsc2UgcG9zKys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmMocG9zKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdFwibnRoLW9mLXR5cGVcIjogZnVuY3Rpb24obmV4dCwgcnVsZSl7XG5cdFx0XHR2YXIgZnVuYyA9IGdldE5DaGVjayhydWxlKTtcblxuXHRcdFx0aWYoZnVuYyA9PT0gZmFsc2VGdW5jKSByZXR1cm4gZnVuYztcblx0XHRcdGlmKGZ1bmMgPT09IHRydWVGdW5jKSAgcmV0dXJuIGdldENoaWxkRnVuYyhuZXh0KTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIG50aE9mVHlwZShlbGVtKXtcblx0XHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0XHRmb3IodmFyIHBvcyA9IDAsIGkgPSAwOyBpIDwgc2libGluZ3MubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSBicmVhaztcblx0XHRcdFx0XHRcdGlmKGFkYXB0ZXIuZ2V0TmFtZShzaWJsaW5nc1tpXSkgPT09IGFkYXB0ZXIuZ2V0TmFtZShlbGVtKSkgcG9zKys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmMocG9zKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdFwibnRoLWxhc3Qtb2YtdHlwZVwiOiBmdW5jdGlvbihuZXh0LCBydWxlKXtcblx0XHRcdHZhciBmdW5jID0gZ2V0TkNoZWNrKHJ1bGUpO1xuXG5cdFx0XHRpZihmdW5jID09PSBmYWxzZUZ1bmMpIHJldHVybiBmdW5jO1xuXHRcdFx0aWYoZnVuYyA9PT0gdHJ1ZUZ1bmMpICByZXR1cm4gZ2V0Q2hpbGRGdW5jKG5leHQpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gbnRoTGFzdE9mVHlwZShlbGVtKXtcblx0XHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0XHRmb3IodmFyIHBvcyA9IDAsIGkgPSBzaWJsaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIGJyZWFrO1xuXHRcdFx0XHRcdFx0aWYoYWRhcHRlci5nZXROYW1lKHNpYmxpbmdzW2ldKSA9PT0gYWRhcHRlci5nZXROYW1lKGVsZW0pKSBwb3MrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZnVuYyhwb3MpICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHQvL1RPRE8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgcm9vdCBlbGVtZW50XG5cdFx0cm9vdDogZnVuY3Rpb24obmV4dCl7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRcdHJldHVybiAhYWRhcHRlci5nZXRQYXJlbnQoZWxlbSkgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdHNjb3BlOiBmdW5jdGlvbihuZXh0LCBydWxlLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHRcdGlmKCFjb250ZXh0IHx8IGNvbnRleHQubGVuZ3RoID09PSAwKXtcblx0XHRcdFx0Ly9lcXVpdmFsZW50IHRvIDpyb290XG5cdFx0XHRcdHJldHVybiBmaWx0ZXJzLnJvb3QobmV4dCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGNvbnRleHQubGVuZ3RoID09PSAxKXtcblx0XHRcdFx0Ly9OT1RFOiBjYW4ndCBiZSB1bnBhY2tlZCwgYXMgOmhhcyB1c2VzIHRoaXMgZm9yIHNpZGUtZWZmZWN0c1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRcdFx0cmV0dXJuIGVxdWFscyhjb250ZXh0WzBdLCBlbGVtKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmluZGV4T2YoZWxlbSkgPj0gMCAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0Ly9qUXVlcnkgZXh0ZW5zaW9ucyAob3RoZXJzIGZvbGxvdyBhcyBwc2V1ZG9zKVxuXHRcdGNoZWNrYm94OiBnZXRBdHRyaWJGdW5jKFwidHlwZVwiLCBcImNoZWNrYm94XCIpLFxuXHRcdGZpbGU6IGdldEF0dHJpYkZ1bmMoXCJ0eXBlXCIsIFwiZmlsZVwiKSxcblx0XHRwYXNzd29yZDogZ2V0QXR0cmliRnVuYyhcInR5cGVcIiwgXCJwYXNzd29yZFwiKSxcblx0XHRyYWRpbzogZ2V0QXR0cmliRnVuYyhcInR5cGVcIiwgXCJyYWRpb1wiKSxcblx0XHRyZXNldDogZ2V0QXR0cmliRnVuYyhcInR5cGVcIiwgXCJyZXNldFwiKSxcblx0XHRpbWFnZTogZ2V0QXR0cmliRnVuYyhcInR5cGVcIiwgXCJpbWFnZVwiKSxcblx0XHRzdWJtaXQ6IGdldEF0dHJpYkZ1bmMoXCJ0eXBlXCIsIFwic3VibWl0XCIpXG5cdH07XG5cdHJldHVybiBmaWx0ZXJzO1xufVxuXG5mdW5jdGlvbiBwc2V1ZG9zRmFjdG9yeShhZGFwdGVyKXtcblx0Ly9oZWxwZXIgbWV0aG9kc1xuXHRmdW5jdGlvbiBnZXRGaXJzdEVsZW1lbnQoZWxlbXMpe1xuXHRcdGZvcih2YXIgaSA9IDA7IGVsZW1zICYmIGkgPCBlbGVtcy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRpZihhZGFwdGVyLmlzVGFnKGVsZW1zW2ldKSkgcmV0dXJuIGVsZW1zW2ldO1xuXHRcdH1cblx0fVxuXG5cdC8vd2hpbGUgZmlsdGVycyBhcmUgcHJlY29tcGlsZWQsIHBzZXVkb3MgZ2V0IGNhbGxlZCB3aGVuIHRoZXkgYXJlIG5lZWRlZFxuXHR2YXIgcHNldWRvcyA9IHtcblx0XHRlbXB0eTogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gIWFkYXB0ZXIuZ2V0Q2hpbGRyZW4oZWxlbSkuc29tZShmdW5jdGlvbihlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuaXNUYWcoZWxlbSkgfHwgZWxlbS50eXBlID09PSBcInRleHRcIjtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRcImZpcnN0LWNoaWxkXCI6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGdldEZpcnN0RWxlbWVudChhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pKSA9PT0gZWxlbTtcblx0XHR9LFxuXHRcdFwibGFzdC1jaGlsZFwiOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdGZvcih2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcblx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIHJldHVybiB0cnVlO1xuXHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSkgYnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdFwiZmlyc3Qtb2YtdHlwZVwiOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgcmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5nZXROYW1lKHNpYmxpbmdzW2ldKSA9PT0gYWRhcHRlci5nZXROYW1lKGVsZW0pKSBicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRcImxhc3Qtb2YtdHlwZVwiOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdGZvcih2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcblx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSByZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmdldE5hbWUoc2libGluZ3NbaV0pID09PSBhZGFwdGVyLmdldE5hbWUoZWxlbSkpIGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdFwib25seS1vZi10eXBlXCI6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0Zm9yKHZhciBpID0gMCwgaiA9IHNpYmxpbmdzLmxlbmd0aDsgaSA8IGo7IGkrKyl7XG5cdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgY29udGludWU7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5nZXROYW1lKHNpYmxpbmdzW2ldKSA9PT0gYWRhcHRlci5nZXROYW1lKGVsZW0pKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblx0XHRcIm9ubHktY2hpbGRcIjogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc2libGluZ3MubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSAmJiBzaWJsaW5nc1tpXSAhPT0gZWxlbSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly86bWF0Y2hlcyhhLCBhcmVhLCBsaW5rKVtocmVmXVxuXHRcdGxpbms6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwiaHJlZlwiKTtcblx0XHR9LFxuXHRcdHZpc2l0ZWQ6IGZhbHNlRnVuYywgLy9zZWVtcyB0byBiZSBhIHZhbGlkIGltcGxlbWVudGF0aW9uXG5cdFx0Ly9UT0RPOiA6YW55LWxpbmsgb25jZSB0aGUgbmFtZSBpcyBmaW5hbGl6ZWQgKGFzIGFuIGFsaWFzIG9mIDpsaW5rKVxuXG5cdFx0Ly9mb3Jtc1xuXHRcdC8vdG8gY29uc2lkZXI6IDp0YXJnZXRcblxuXHRcdC8vOm1hdGNoZXMoW3NlbGVjdGVkXSwgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoPiBvcHRpb25bc2VsZWN0ZWRdKSA+IG9wdGlvbjpmaXJzdC1vZi10eXBlKVxuXHRcdHNlbGVjdGVkOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdGlmKGFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwic2VsZWN0ZWRcIikpIHJldHVybiB0cnVlO1xuXHRcdFx0ZWxzZSBpZihhZGFwdGVyLmdldE5hbWUoZWxlbSkgIT09IFwib3B0aW9uXCIpIHJldHVybiBmYWxzZTtcblxuXHRcdFx0Ly90aGUgZmlyc3QgPG9wdGlvbj4gaW4gYSA8c2VsZWN0PiBpcyBhbHNvIHNlbGVjdGVkXG5cdFx0XHR2YXIgcGFyZW50ID0gYWRhcHRlci5nZXRQYXJlbnQoZWxlbSk7XG5cblx0XHRcdGlmKFxuXHRcdFx0XHQhcGFyZW50IHx8XG5cdFx0XHRcdGFkYXB0ZXIuZ2V0TmFtZShwYXJlbnQpICE9PSBcInNlbGVjdFwiIHx8XG5cdFx0XHRcdGFkYXB0ZXIuaGFzQXR0cmliKHBhcmVudCwgXCJtdWx0aXBsZVwiKVxuXHRcdFx0KSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0Q2hpbGRyZW4ocGFyZW50KSxcblx0XHRcdFx0c2F3RWxlbSAgPSBmYWxzZTtcblxuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKXtcblx0XHRcdFx0XHRcdHNhd0VsZW0gPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZighc2F3RWxlbSl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fSBlbHNlIGlmKGFkYXB0ZXIuaGFzQXR0cmliKHNpYmxpbmdzW2ldLCBcInNlbGVjdGVkXCIpKXtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNhd0VsZW07XG5cdFx0fSxcblx0XHQvL2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2Rpc2FibGVkLWVsZW1lbnRzXG5cdFx0Ly86bWF0Y2hlcyhcblx0XHQvLyAgOm1hdGNoZXMoYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgbWVudWl0ZW0sIG9wdGdyb3VwLCBvcHRpb24pW2Rpc2FibGVkXSxcblx0XHQvLyAgb3B0Z3JvdXBbZGlzYWJsZWRdID4gb3B0aW9uKSxcblx0XHQvLyBmaWVsZHNldFtkaXNhYmxlZF0gKiAvL1RPRE8gbm90IGNoaWxkIG9mIGZpcnN0IDxsZWdlbmQ+XG5cdFx0Ly8pXG5cdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwiZGlzYWJsZWRcIik7XG5cdFx0fSxcblx0XHRlbmFibGVkOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiAhYWRhcHRlci5oYXNBdHRyaWIoZWxlbSwgXCJkaXNhYmxlZFwiKTtcblx0XHR9LFxuXHRcdC8vOm1hdGNoZXMoOm1hdGNoZXMoOnJhZGlvLCA6Y2hlY2tib3gpW2NoZWNrZWRdLCA6c2VsZWN0ZWQpIChUT0RPIG1lbnVpdGVtKVxuXHRcdGNoZWNrZWQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwiY2hlY2tlZFwiKSB8fCBwc2V1ZG9zLnNlbGVjdGVkKGVsZW0pO1xuXHRcdH0sXG5cdFx0Ly86bWF0Y2hlcyhpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSlbcmVxdWlyZWRdXG5cdFx0cmVxdWlyZWQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuIGFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwicmVxdWlyZWRcIik7XG5cdFx0fSxcblx0XHQvLzptYXRjaGVzKGlucHV0LCBzZWxlY3QsIHRleHRhcmVhKTpub3QoW3JlcXVpcmVkXSlcblx0XHRvcHRpb25hbDogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gIWFkYXB0ZXIuaGFzQXR0cmliKGVsZW0sIFwicmVxdWlyZWRcIik7XG5cdFx0fSxcblxuXHRcdC8valF1ZXJ5IGV4dGVuc2lvbnNcblxuXHRcdC8vOm5vdCg6ZW1wdHkpXG5cdFx0cGFyZW50OiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiAhcHNldWRvcy5lbXB0eShlbGVtKTtcblx0XHR9LFxuXHRcdC8vOm1hdGNoZXMoaDEsIGgyLCBoMywgaDQsIGg1LCBoNilcblx0XHRoZWFkZXI6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIG5hbWUgPSBhZGFwdGVyLmdldE5hbWUoZWxlbSk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJoMVwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJoMlwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJoM1wiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJoNFwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJoNVwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJoNlwiO1xuXHRcdH0sXG5cblx0XHQvLzptYXRjaGVzKGJ1dHRvbiwgaW5wdXRbdHlwZT1idXR0b25dKVxuXHRcdGJ1dHRvbjogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHR2YXIgbmFtZSA9IGFkYXB0ZXIuZ2V0TmFtZShlbGVtKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImJ1dHRvblwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdFx0YWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBcInR5cGVcIikgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblx0XHQvLzptYXRjaGVzKGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBidXR0b24pXG5cdFx0aW5wdXQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIG5hbWUgPSBhZGFwdGVyLmdldE5hbWUoZWxlbSk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJ0ZXh0YXJlYVwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJzZWxlY3RcIiB8fFxuXHRcdFx0XHRcdG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblx0XHQvL2lucHV0Om1hdGNoZXMoOm5vdChbdHlwZSE9JyddKSwgW3R5cGU9J3RleHQnIGldKVxuXHRcdHRleHQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gYWRhcHRlci5nZXROYW1lKGVsZW0pID09PSBcImlucHV0XCIgJiYgKFxuXHRcdFx0XHQhKGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIFwidHlwZVwiKSkgfHxcblx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIlxuXHRcdFx0KTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIHBzZXVkb3M7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFyZ3MoZnVuYywgbmFtZSwgc3Vic2VsZWN0KXtcblx0aWYoc3Vic2VsZWN0ID09PSBudWxsKXtcblx0XHRpZihmdW5jLmxlbmd0aCA+IDEgJiYgbmFtZSAhPT0gXCJzY29wZVwiKXtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInBzZXVkby1zZWxlY3RvciA6XCIgKyBuYW1lICsgXCIgcmVxdWlyZXMgYW4gYXJndW1lbnRcIik7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmKGZ1bmMubGVuZ3RoID09PSAxKXtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInBzZXVkby1zZWxlY3RvciA6XCIgKyBuYW1lICsgXCIgZG9lc24ndCBoYXZlIGFueSBhcmd1bWVudHNcIik7XG5cdFx0fVxuXHR9XG59XG5cbi8vRklYTUUgdGhpcyBmZWVscyBoYWNreVxudmFyIHJlX0NTUzMgPSAvXig/Oig/Om50aHxsYXN0fGZpcnN0fG9ubHkpLSg/OmNoaWxkfG9mLXR5cGUpfHJvb3R8ZW1wdHl8KD86ZW58ZGlzKWFibGVkfGNoZWNrZWR8bm90KSQvO1xuXG5mdW5jdGlvbiBmYWN0b3J5KGFkYXB0ZXIpe1xuXHR2YXIgcHNldWRvcyA9IHBzZXVkb3NGYWN0b3J5KGFkYXB0ZXIpO1xuXHR2YXIgZmlsdGVycyA9IGZpbHRlcnNGYWN0b3J5KGFkYXB0ZXIpO1xuXG5cdHJldHVybiB7XG5cdFx0Y29tcGlsZTogZnVuY3Rpb24obmV4dCwgZGF0YSwgb3B0aW9ucywgY29udGV4dCl7XG5cdFx0XHR2YXIgbmFtZSA9IGRhdGEubmFtZSxcblx0XHRcdFx0c3Vic2VsZWN0ID0gZGF0YS5kYXRhO1xuXG5cdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMuc3RyaWN0ICYmICFyZV9DU1MzLnRlc3QobmFtZSkpe1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCI6XCIgKyBuYW1lICsgXCIgaXNuJ3QgcGFydCBvZiBDU1MzXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZih0eXBlb2YgZmlsdGVyc1tuYW1lXSA9PT0gXCJmdW5jdGlvblwiKXtcblx0XHRcdFx0dmVyaWZ5QXJncyhmaWx0ZXJzW25hbWVdLCBuYW1lLCAgc3Vic2VsZWN0KTtcblx0XHRcdFx0cmV0dXJuIGZpbHRlcnNbbmFtZV0obmV4dCwgc3Vic2VsZWN0LCBvcHRpb25zLCBjb250ZXh0KTtcblx0XHRcdH0gZWxzZSBpZih0eXBlb2YgcHNldWRvc1tuYW1lXSA9PT0gXCJmdW5jdGlvblwiKXtcblx0XHRcdFx0dmFyIGZ1bmMgPSBwc2V1ZG9zW25hbWVdO1xuXHRcdFx0XHR2ZXJpZnlBcmdzKGZ1bmMsIG5hbWUsIHN1YnNlbGVjdCk7XG5cblx0XHRcdFx0aWYobmV4dCA9PT0gdHJ1ZUZ1bmMpIHJldHVybiBmdW5jO1xuXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiBwc2V1ZG9BcmdzKGVsZW0pe1xuXHRcdFx0XHRcdHJldHVybiBmdW5jKGVsZW0sIHN1YnNlbGVjdCkgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInVubWF0Y2hlZCBwc2V1ZG8tY2xhc3MgOlwiICsgbmFtZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRmaWx0ZXJzOiBmaWx0ZXJzLFxuXHRcdHBzZXVkb3M6IHBzZXVkb3Ncblx0fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5O1xuXG5cbi8qKiovIH0pLFxuLyogODcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHBhcnNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCksXG4gICAgY29tcGlsZSA9IF9fd2VicGFja19yZXF1aXJlX18oODkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG50aENoZWNrKGZvcm11bGEpe1xuXHRyZXR1cm4gY29tcGlsZShwYXJzZShmb3JtdWxhKSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xubW9kdWxlLmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGU7XG5cbi8qKiovIH0pLFxuLyogODggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcblxuLy9mb2xsb3dpbmcgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI250aC1jaGlsZC1wc2V1ZG9cblxuLy9bIFsnLSd8JysnXT8gSU5URUdFUj8ge059IFsgUyogWyctJ3wnKyddIFMqIElOVEVHRVIgXT9cbnZhciByZV9udGhFbGVtZW50ID0gL14oWytcXC1dP1xcZCpuKT9cXHMqKD86KFsrXFwtXT8pXFxzKihcXGQrKSk/JC87XG5cbi8qXG5cdHBhcnNlcyBhIG50aC1jaGVjayBmb3JtdWxhLCByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBudW1iZXJzXG4qL1xuZnVuY3Rpb24gcGFyc2UoZm9ybXVsYSl7XG5cdGZvcm11bGEgPSBmb3JtdWxhLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG5cdGlmKGZvcm11bGEgPT09IFwiZXZlblwiKXtcblx0XHRyZXR1cm4gWzIsIDBdO1xuXHR9IGVsc2UgaWYoZm9ybXVsYSA9PT0gXCJvZGRcIil7XG5cdFx0cmV0dXJuIFsyLCAxXTtcblx0fSBlbHNlIHtcblx0XHR2YXIgcGFyc2VkID0gZm9ybXVsYS5tYXRjaChyZV9udGhFbGVtZW50KTtcblxuXHRcdGlmKCFwYXJzZWQpe1xuXHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwibi10aCBydWxlIGNvdWxkbid0IGJlIHBhcnNlZCAoJ1wiICsgZm9ybXVsYSArIFwiJylcIik7XG5cdFx0fVxuXG5cdFx0dmFyIGE7XG5cblx0XHRpZihwYXJzZWRbMV0pe1xuXHRcdFx0YSA9IHBhcnNlSW50KHBhcnNlZFsxXSwgMTApO1xuXHRcdFx0aWYoaXNOYU4oYSkpe1xuXHRcdFx0XHRpZihwYXJzZWRbMV0uY2hhckF0KDApID09PSBcIi1cIikgYSA9IC0xO1xuXHRcdFx0XHRlbHNlIGEgPSAxO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBhID0gMDtcblxuXHRcdHJldHVybiBbXG5cdFx0XHRhLFxuXHRcdFx0cGFyc2VkWzNdID8gcGFyc2VJbnQoKHBhcnNlZFsyXSB8fCBcIlwiKSArIHBhcnNlZFszXSwgMTApIDogMFxuXHRcdF07XG5cdH1cbn1cblxuXG4vKioqLyB9KSxcbi8qIDg5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZTtcblxudmFyIEJhc2VGdW5jcyA9IF9fd2VicGFja19yZXF1aXJlX18oNSksXG4gICAgdHJ1ZUZ1bmMgID0gQmFzZUZ1bmNzLnRydWVGdW5jLFxuICAgIGZhbHNlRnVuYyA9IEJhc2VGdW5jcy5mYWxzZUZ1bmM7XG5cbi8qXG5cdHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhbiBlbGVtZW50cyBpbmRleCBtYXRjaGVzIHRoZSBnaXZlbiBydWxlXG5cdGhpZ2hseSBvcHRpbWl6ZWQgdG8gcmV0dXJuIHRoZSBmYXN0ZXN0IHNvbHV0aW9uXG4qL1xuZnVuY3Rpb24gY29tcGlsZShwYXJzZWQpe1xuXHR2YXIgYSA9IHBhcnNlZFswXSxcblx0ICAgIGIgPSBwYXJzZWRbMV0gLSAxO1xuXG5cdC8vd2hlbiBiIDw9IDAsIGEqbiB3b24ndCBiZSBwb3NzaWJsZSBmb3IgYW55IG1hdGNoZXMgd2hlbiBhIDwgMFxuXHQvL2Jlc2lkZXMsIHRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBubyBlbGVtZW50IGlzIG1hdGNoZWQgd2hlbiBhIGFuZCBiIGFyZSAwXG5cdGlmKGIgPCAwICYmIGEgPD0gMCkgcmV0dXJuIGZhbHNlRnVuYztcblxuXHQvL3doZW4gYSBpcyBpbiB0aGUgcmFuZ2UgLTEuLjEsIGl0IG1hdGNoZXMgYW55IGVsZW1lbnQgKHNvIG9ubHkgYiBpcyBjaGVja2VkKVxuXHRpZihhID09PS0xKSByZXR1cm4gZnVuY3Rpb24ocG9zKXsgcmV0dXJuIHBvcyA8PSBiOyB9O1xuXHRpZihhID09PSAwKSByZXR1cm4gZnVuY3Rpb24ocG9zKXsgcmV0dXJuIHBvcyA9PT0gYjsgfTtcblx0Ly93aGVuIGIgPD0gMCBhbmQgYSA9PT0gMSwgdGhleSBtYXRjaCBhbnkgZWxlbWVudFxuXHRpZihhID09PSAxKSByZXR1cm4gYiA8IDAgPyB0cnVlRnVuYyA6IGZ1bmN0aW9uKHBvcyl7IHJldHVybiBwb3MgPj0gYjsgfTtcblxuXHQvL3doZW4gYSA+IDAsIG1vZHVsbyBjYW4gYmUgdXNlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhIG1hdGNoXG5cdHZhciBiTW9kID0gYiAlIGE7XG5cdGlmKGJNb2QgPCAwKSBiTW9kICs9IGE7XG5cblx0aWYoYSA+IDEpe1xuXHRcdHJldHVybiBmdW5jdGlvbihwb3Mpe1xuXHRcdFx0cmV0dXJuIHBvcyA+PSBiICYmIHBvcyAlIGEgPT09IGJNb2Q7XG5cdFx0fTtcblx0fVxuXG5cdGEgKj0gLTE7IC8vbWFrZSBgYWAgcG9zaXRpdmVcblxuXHRyZXR1cm4gZnVuY3Rpb24ocG9zKXtcblx0XHRyZXR1cm4gcG9zIDw9IGIgJiYgcG9zICUgYSA9PT0gYk1vZDtcblx0fTtcbn1cblxuLyoqKi8gfSlcbi8qKioqKiovIF0pO1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdC11bWQvZGlzdC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdC11bWQvZGlzdC9pbmRleC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCIvKiFcblxuIGRpZmYgdjMuNC4wXG5cblNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50IChCU0QgTGljZW5zZSlcblxuQ29weXJpZ2h0IChjKSAyMDA5LTIwMTUsIEtldmluIERlY2tlciA8a3BkZWNrZXJAZ21haWwuY29tPlxuXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZVxuICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlXG4gIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4qIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZVxuICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXJcbiAgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEtldmluIERlY2tlciBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzXG4gIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3JcbiAgd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1JcbklNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1JcbkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUxcbkRBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSXG5JTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUXG5PRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5AbGljZW5zZVxuKi9cbihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkpzRGlmZlwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJKc0RpZmZcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5jYW5vbmljYWxpemUgPSBleHBvcnRzLmNvbnZlcnRDaGFuZ2VzVG9YTUwgPSBleHBvcnRzLmNvbnZlcnRDaGFuZ2VzVG9ETVAgPSBleHBvcnRzLm1lcmdlID0gZXhwb3J0cy5wYXJzZVBhdGNoID0gZXhwb3J0cy5hcHBseVBhdGNoZXMgPSBleHBvcnRzLmFwcGx5UGF0Y2ggPSBleHBvcnRzLmNyZWF0ZVBhdGNoID0gZXhwb3J0cy5jcmVhdGVUd29GaWxlc1BhdGNoID0gZXhwb3J0cy5zdHJ1Y3R1cmVkUGF0Y2ggPSBleHBvcnRzLmRpZmZBcnJheXMgPSBleHBvcnRzLmRpZmZKc29uID0gZXhwb3J0cy5kaWZmQ3NzID0gZXhwb3J0cy5kaWZmU2VudGVuY2VzID0gZXhwb3J0cy5kaWZmVHJpbW1lZExpbmVzID0gZXhwb3J0cy5kaWZmTGluZXMgPSBleHBvcnRzLmRpZmZXb3Jkc1dpdGhTcGFjZSA9IGV4cG9ydHMuZGlmZldvcmRzID0gZXhwb3J0cy5kaWZmQ2hhcnMgPSBleHBvcnRzLkRpZmYgPSB1bmRlZmluZWQ7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY2hhcmFjdGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL193b3JkID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19saW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19zZW50ZW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNikgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY3NzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19qc29uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19hcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oOSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYXBwbHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19wYXJzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX21lcmdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMykgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fZG1wID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNikgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9feG1sID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNykgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2Z1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKiBTZWUgTElDRU5TRSBmaWxlIGZvciB0ZXJtcyBvZiB1c2UgKi9cblxuXHQvKlxuXHQgKiBUZXh0IGRpZmYgaW1wbGVtZW50YXRpb24uXG5cdCAqXG5cdCAqIFRoaXMgbGlicmFyeSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIEFQSVM6XG5cdCAqIEpzRGlmZi5kaWZmQ2hhcnM6IENoYXJhY3RlciBieSBjaGFyYWN0ZXIgZGlmZlxuXHQgKiBKc0RpZmYuZGlmZldvcmRzOiBXb3JkIChhcyBkZWZpbmVkIGJ5IFxcYiByZWdleCkgZGlmZiB3aGljaCBpZ25vcmVzIHdoaXRlc3BhY2Vcblx0ICogSnNEaWZmLmRpZmZMaW5lczogTGluZSBiYXNlZCBkaWZmXG5cdCAqXG5cdCAqIEpzRGlmZi5kaWZmQ3NzOiBEaWZmIHRhcmdldGVkIGF0IENTUyBjb250ZW50XG5cdCAqXG5cdCAqIFRoZXNlIG1ldGhvZHMgYXJlIGJhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBwcm9wb3NlZCBpblxuXHQgKiBcIkFuIE8oTkQpIERpZmZlcmVuY2UgQWxnb3JpdGhtIGFuZCBpdHMgVmFyaWF0aW9uc1wiIChNeWVycywgMTk4NikuXG5cdCAqIGh0dHA6Ly9jaXRlc2VlcnguaXN0LnBzdS5lZHUvdmlld2RvYy9zdW1tYXJ5P2RvaT0xMC4xLjEuNC42OTI3XG5cdCAqL1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL0RpZmYgPSBfYmFzZTJbJ2RlZmF1bHQnXTtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkNoYXJzID0gX2NoYXJhY3Rlci5kaWZmQ2hhcnM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZXb3JkcyA9IF93b3JkLmRpZmZXb3Jkcztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZldvcmRzV2l0aFNwYWNlID0gX3dvcmQuZGlmZldvcmRzV2l0aFNwYWNlO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmTGluZXMgPSBfbGluZS5kaWZmTGluZXM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZUcmltbWVkTGluZXMgPSBfbGluZS5kaWZmVHJpbW1lZExpbmVzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmU2VudGVuY2VzID0gX3NlbnRlbmNlLmRpZmZTZW50ZW5jZXM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZDc3MgPSBfY3NzLmRpZmZDc3M7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZKc29uID0gX2pzb24uZGlmZkpzb247XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZBcnJheXMgPSBfYXJyYXkuZGlmZkFycmF5cztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovc3RydWN0dXJlZFBhdGNoID0gX2NyZWF0ZS5zdHJ1Y3R1cmVkUGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NyZWF0ZVR3b0ZpbGVzUGF0Y2ggPSBfY3JlYXRlLmNyZWF0ZVR3b0ZpbGVzUGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NyZWF0ZVBhdGNoID0gX2NyZWF0ZS5jcmVhdGVQYXRjaDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovYXBwbHlQYXRjaCA9IF9hcHBseS5hcHBseVBhdGNoO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9hcHBseVBhdGNoZXMgPSBfYXBwbHkuYXBwbHlQYXRjaGVzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9wYXJzZVBhdGNoID0gX3BhcnNlLnBhcnNlUGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL21lcmdlID0gX21lcmdlLm1lcmdlO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jb252ZXJ0Q2hhbmdlc1RvRE1QID0gX2RtcC5jb252ZXJ0Q2hhbmdlc1RvRE1QO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jb252ZXJ0Q2hhbmdlc1RvWE1MID0gX3htbC5jb252ZXJ0Q2hhbmdlc1RvWE1MO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jYW5vbmljYWxpemUgPSBfanNvbi5jYW5vbmljYWxpemU7XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5cGJtUmxlQzVxY3lKZExDSnVZVzFsY3lJNld5SkVhV1ptSWl3aVpHbG1aa05vWVhKeklpd2laR2xtWmxkdmNtUnpJaXdpWkdsbVpsZHZjbVJ6VjJsMGFGTndZV05sSWl3aVpHbG1aa3hwYm1Weklpd2laR2xtWmxSeWFXMXRaV1JNYVc1bGN5SXNJbVJwWm1aVFpXNTBaVzVqWlhNaUxDSmthV1ptUTNOeklpd2laR2xtWmtwemIyNGlMQ0prYVdabVFYSnlZWGx6SWl3aWMzUnlkV04wZFhKbFpGQmhkR05vSWl3aVkzSmxZWFJsVkhkdlJtbHNaWE5RWVhSamFDSXNJbU55WldGMFpWQmhkR05vSWl3aVlYQndiSGxRWVhSamFDSXNJbUZ3Y0d4NVVHRjBZMmhsY3lJc0luQmhjbk5sVUdGMFkyZ2lMQ0p0WlhKblpTSXNJbU52Ym5abGNuUkRhR0Z1WjJWelZHOUVUVkFpTENKamIyNTJaWEowUTJoaGJtZGxjMVJ2V0UxTUlpd2lZMkZ1YjI1cFkyRnNhWHBsSWwwc0ltMWhjSEJwYm1keklqb2lPenM3T3p0MVFrRm5Ra0U3T3pzN2RVSkJRMEU3TzBGQlEwRTdPMEZCUTBFN08wRkJRMEU3TzBGQlJVRTdPMEZCUTBFN08wRkJSVUU3TzBGQlJVRTdPMEZCUTBFN08wRkJRMEU3TzBGQlEwRTdPMEZCUlVFN08wRkJRMEU3T3pzN1FVRnFRMEU3TzBGQlJVRTdPenM3T3pzN096czdPenM3TzJkRFFXdERSVUVzU1R0NVJFRkZRVU1zVXp0NVJFRkRRVU1zVXp0NVJFRkRRVU1zYTBJN2VVUkJRMEZETEZNN2VVUkJRMEZETEdkQ08zbEVRVU5CUXl4aE8zbEVRVVZCUXl4UE8zbEVRVU5CUXl4Uk8zbEVRVVZCUXl4Vk8zbEVRVVZCUXl4bE8zbEVRVU5CUXl4dFFqdDVSRUZEUVVNc1Z6dDVSRUZEUVVNc1ZUdDVSRUZEUVVNc1dUdDVSRUZEUVVNc1ZUdDVSRUZEUVVNc1N6dDVSRUZEUVVNc2JVSTdlVVJCUTBGRExHMUNPM2xFUVVOQlF5eFpJaXdpWm1sc1pTSTZJbWx1WkdWNExtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvZ1UyVmxJRXhKUTBWT1UwVWdabWxzWlNCbWIzSWdkR1Z5YlhNZ2IyWWdkWE5sSUNvdlhHNWNiaThxWEc0Z0tpQlVaWGgwSUdScFptWWdhVzF3YkdWdFpXNTBZWFJwYjI0dVhHNGdLbHh1SUNvZ1ZHaHBjeUJzYVdKeVlYSjVJSE4xY0hCdmNuUnpJSFJvWlNCbWIyeHNiM2RwYm1jZ1FWQkpVenBjYmlBcUlFcHpSR2xtWmk1a2FXWm1RMmhoY25NNklFTm9ZWEpoWTNSbGNpQmllU0JqYUdGeVlXTjBaWElnWkdsbVpseHVJQ29nU25ORWFXWm1MbVJwWm1aWGIzSmtjem9nVjI5eVpDQW9ZWE1nWkdWbWFXNWxaQ0JpZVNCY1hHSWdjbVZuWlhncElHUnBabVlnZDJocFkyZ2dhV2R1YjNKbGN5QjNhR2wwWlhOd1lXTmxYRzRnS2lCS2MwUnBabVl1WkdsbVpreHBibVZ6T2lCTWFXNWxJR0poYzJWa0lHUnBabVpjYmlBcVhHNGdLaUJLYzBScFptWXVaR2xtWmtOemN6b2dSR2xtWmlCMFlYSm5aWFJsWkNCaGRDQkRVMU1nWTI5dWRHVnVkRnh1SUNwY2JpQXFJRlJvWlhObElHMWxkR2h2WkhNZ1lYSmxJR0poYzJWa0lHOXVJSFJvWlNCcGJYQnNaVzFsYm5SaGRHbHZiaUJ3Y205d2IzTmxaQ0JwYmx4dUlDb2dYQ0pCYmlCUEtFNUVLU0JFYVdabVpYSmxibU5sSUVGc1oyOXlhWFJvYlNCaGJtUWdhWFJ6SUZaaGNtbGhkR2x2Ym5OY0lpQW9UWGxsY25Nc0lERTVPRFlwTGx4dUlDb2dhSFIwY0RvdkwyTnBkR1Z6WldWeWVDNXBjM1F1Y0hOMUxtVmtkUzkyYVdWM1pHOWpMM04xYlcxaGNuay9aRzlwUFRFd0xqRXVNUzQwTGpZNU1qZGNiaUFxTDF4dWFXMXdiM0owSUVScFptWWdabkp2YlNBbkxpOWthV1ptTDJKaGMyVW5PMXh1YVcxd2IzSjBJSHRrYVdabVEyaGhjbk45SUdaeWIyMGdKeTR2WkdsbVppOWphR0Z5WVdOMFpYSW5PMXh1YVcxd2IzSjBJSHRrYVdabVYyOXlaSE1zSUdScFptWlhiM0prYzFkcGRHaFRjR0ZqWlgwZ1puSnZiU0FuTGk5a2FXWm1MM2R2Y21Rbk8xeHVhVzF3YjNKMElIdGthV1ptVEdsdVpYTXNJR1JwWm1aVWNtbHRiV1ZrVEdsdVpYTjlJR1p5YjIwZ0p5NHZaR2xtWmk5c2FXNWxKenRjYm1sdGNHOXlkQ0I3WkdsbVpsTmxiblJsYm1ObGMzMGdabkp2YlNBbkxpOWthV1ptTDNObGJuUmxibU5sSnp0Y2JseHVhVzF3YjNKMElIdGthV1ptUTNOemZTQm1jbTl0SUNjdUwyUnBabVl2WTNOekp6dGNibWx0Y0c5eWRDQjdaR2xtWmtwemIyNHNJR05oYm05dWFXTmhiR2w2WlgwZ1puSnZiU0FuTGk5a2FXWm1MMnB6YjI0bk8xeHVYRzVwYlhCdmNuUWdlMlJwWm1aQmNuSmhlWE45SUdaeWIyMGdKeTR2WkdsbVppOWhjbkpoZVNjN1hHNWNibWx0Y0c5eWRDQjdZWEJ3YkhsUVlYUmphQ3dnWVhCd2JIbFFZWFJqYUdWemZTQm1jbTl0SUNjdUwzQmhkR05vTDJGd2NHeDVKenRjYm1sdGNHOXlkQ0I3Y0dGeWMyVlFZWFJqYUgwZ1puSnZiU0FuTGk5d1lYUmphQzl3WVhKelpTYzdYRzVwYlhCdmNuUWdlMjFsY21kbGZTQm1jbTl0SUNjdUwzQmhkR05vTDIxbGNtZGxKenRjYm1sdGNHOXlkQ0I3YzNSeWRXTjBkWEpsWkZCaGRHTm9MQ0JqY21WaGRHVlVkMjlHYVd4bGMxQmhkR05vTENCamNtVmhkR1ZRWVhSamFIMGdabkp2YlNBbkxpOXdZWFJqYUM5amNtVmhkR1VuTzF4dVhHNXBiWEJ2Y25RZ2UyTnZiblpsY25SRGFHRnVaMlZ6Vkc5RVRWQjlJR1p5YjIwZ0p5NHZZMjl1ZG1WeWRDOWtiWEFuTzF4dWFXMXdiM0owSUh0amIyNTJaWEowUTJoaGJtZGxjMVJ2V0UxTWZTQm1jbTl0SUNjdUwyTnZiblpsY25RdmVHMXNKenRjYmx4dVpYaHdiM0owSUh0Y2JpQWdSR2xtWml4Y2JseHVJQ0JrYVdabVEyaGhjbk1zWEc0Z0lHUnBabVpYYjNKa2N5eGNiaUFnWkdsbVpsZHZjbVJ6VjJsMGFGTndZV05sTEZ4dUlDQmthV1ptVEdsdVpYTXNYRzRnSUdScFptWlVjbWx0YldWa1RHbHVaWE1zWEc0Z0lHUnBabVpUWlc1MFpXNWpaWE1zWEc1Y2JpQWdaR2xtWmtOemN5eGNiaUFnWkdsbVprcHpiMjRzWEc1Y2JpQWdaR2xtWmtGeWNtRjVjeXhjYmx4dUlDQnpkSEoxWTNSMWNtVmtVR0YwWTJnc1hHNGdJR055WldGMFpWUjNiMFpwYkdWelVHRjBZMmdzWEc0Z0lHTnlaV0YwWlZCaGRHTm9MRnh1SUNCaGNIQnNlVkJoZEdOb0xGeHVJQ0JoY0hCc2VWQmhkR05vWlhNc1hHNGdJSEJoY25ObFVHRjBZMmdzWEc0Z0lHMWxjbWRsTEZ4dUlDQmpiMjUyWlhKMFEyaGhibWRsYzFSdlJFMVFMRnh1SUNCamIyNTJaWEowUTJoaGJtZGxjMVJ2V0UxTUxGeHVJQ0JqWVc1dmJtbGpZV3hwZW1WY2JuMDdYRzRpWFgwPVxuXG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0c1snZGVmYXVsdCddID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9EaWZmO1xuXHRmdW5jdGlvbiBEaWZmKCkge31cblxuXHREaWZmLnByb3RvdHlwZSA9IHtcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZjogZnVuY3Rpb24gZGlmZihvbGRTdHJpbmcsIG5ld1N0cmluZykge1xuXHQgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL29wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG5cdCAgICB2YXIgY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcblx0ICAgICAgb3B0aW9ucyA9IHt9O1xuXHQgICAgfVxuXHQgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuXHQgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG5cdCAgICBmdW5jdGlvbiBkb25lKHZhbHVlKSB7XG5cdCAgICAgIGlmIChjYWxsYmFjaykge1xuXHQgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCB2YWx1ZSk7XG5cdCAgICAgICAgfSwgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIC8vIEFsbG93IHN1YmNsYXNzZXMgdG8gbWFzc2FnZSB0aGUgaW5wdXQgcHJpb3IgdG8gcnVubmluZ1xuXHQgICAgb2xkU3RyaW5nID0gdGhpcy5jYXN0SW5wdXQob2xkU3RyaW5nKTtcblx0ICAgIG5ld1N0cmluZyA9IHRoaXMuY2FzdElucHV0KG5ld1N0cmluZyk7XG5cblx0ICAgIG9sZFN0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShvbGRTdHJpbmcpKTtcblx0ICAgIG5ld1N0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShuZXdTdHJpbmcpKTtcblxuXHQgICAgdmFyIG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG5cdCAgICAgICAgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aDtcblx0ICAgIHZhciBlZGl0TGVuZ3RoID0gMTtcblx0ICAgIHZhciBtYXhFZGl0TGVuZ3RoID0gbmV3TGVuICsgb2xkTGVuO1xuXHQgICAgdmFyIGJlc3RQYXRoID0gW3sgbmV3UG9zOiAtMSwgY29tcG9uZW50czogW10gfV07XG5cblx0ICAgIC8vIFNlZWQgZWRpdExlbmd0aCA9IDAsIGkuZS4gdGhlIGNvbnRlbnQgc3RhcnRzIHdpdGggdGhlIHNhbWUgdmFsdWVzXG5cdCAgICB2YXIgb2xkUG9zID0gdGhpcy5leHRyYWN0Q29tbW9uKGJlc3RQYXRoWzBdLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgMCk7XG5cdCAgICBpZiAoYmVzdFBhdGhbMF0ubmV3UG9zICsgMSA+PSBuZXdMZW4gJiYgb2xkUG9zICsgMSA+PSBvbGRMZW4pIHtcblx0ICAgICAgLy8gSWRlbnRpdHkgcGVyIHRoZSBlcXVhbGl0eSBhbmQgdG9rZW5pemVyXG5cdCAgICAgIHJldHVybiBkb25lKFt7IHZhbHVlOiB0aGlzLmpvaW4obmV3U3RyaW5nKSwgY291bnQ6IG5ld1N0cmluZy5sZW5ndGggfV0pO1xuXHQgICAgfVxuXG5cdCAgICAvLyBNYWluIHdvcmtlciBtZXRob2QuIGNoZWNrcyBhbGwgcGVybXV0YXRpb25zIG9mIGEgZ2l2ZW4gZWRpdCBsZW5ndGggZm9yIGFjY2VwdGFuY2UuXG5cdCAgICBmdW5jdGlvbiBleGVjRWRpdExlbmd0aCgpIHtcblx0ICAgICAgZm9yICh2YXIgZGlhZ29uYWxQYXRoID0gLTEgKiBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggPD0gZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoICs9IDIpIHtcblx0ICAgICAgICB2YXIgYmFzZVBhdGggPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdm9pZCAwIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXHQgICAgICAgIHZhciBhZGRQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0sXG5cdCAgICAgICAgICAgIHJlbW92ZVBhdGggPSBiZXN0UGF0aFtkaWFnb25hbFBhdGggKyAxXSxcblx0ICAgICAgICAgICAgX29sZFBvcyA9IChyZW1vdmVQYXRoID8gcmVtb3ZlUGF0aC5uZXdQb3MgOiAwKSAtIGRpYWdvbmFsUGF0aDtcblx0ICAgICAgICBpZiAoYWRkUGF0aCkge1xuXHQgICAgICAgICAgLy8gTm8gb25lIGVsc2UgaXMgZ29pbmcgdG8gYXR0ZW1wdCB0byB1c2UgdGhpcyB2YWx1ZSwgY2xlYXIgaXRcblx0ICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBjYW5BZGQgPSBhZGRQYXRoICYmIGFkZFBhdGgubmV3UG9zICsgMSA8IG5ld0xlbixcblx0ICAgICAgICAgICAgY2FuUmVtb3ZlID0gcmVtb3ZlUGF0aCAmJiAwIDw9IF9vbGRQb3MgJiYgX29sZFBvcyA8IG9sZExlbjtcblx0ICAgICAgICBpZiAoIWNhbkFkZCAmJiAhY2FuUmVtb3ZlKSB7XG5cdCAgICAgICAgICAvLyBJZiB0aGlzIHBhdGggaXMgYSB0ZXJtaW5hbCB0aGVuIHBydW5lXG5cdCAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgY29udGludWU7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gU2VsZWN0IHRoZSBkaWFnb25hbCB0aGF0IHdlIHdhbnQgdG8gYnJhbmNoIGZyb20uIFdlIHNlbGVjdCB0aGUgcHJpb3Jcblx0ICAgICAgICAvLyBwYXRoIHdob3NlIHBvc2l0aW9uIGluIHRoZSBuZXcgc3RyaW5nIGlzIHRoZSBmYXJ0aGVzdCBmcm9tIHRoZSBvcmlnaW5cblx0ICAgICAgICAvLyBhbmQgZG9lcyBub3QgcGFzcyB0aGUgYm91bmRzIG9mIHRoZSBkaWZmIGdyYXBoXG5cdCAgICAgICAgaWYgKCFjYW5BZGQgfHwgY2FuUmVtb3ZlICYmIGFkZFBhdGgubmV3UG9zIDwgcmVtb3ZlUGF0aC5uZXdQb3MpIHtcblx0ICAgICAgICAgIGJhc2VQYXRoID0gY2xvbmVQYXRoKHJlbW92ZVBhdGgpO1xuXHQgICAgICAgICAgc2VsZi5wdXNoQ29tcG9uZW50KGJhc2VQYXRoLmNvbXBvbmVudHMsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIGJhc2VQYXRoID0gYWRkUGF0aDsgLy8gTm8gbmVlZCB0byBjbG9uZSwgd2UndmUgcHVsbGVkIGl0IGZyb20gdGhlIGxpc3Rcblx0ICAgICAgICAgIGJhc2VQYXRoLm5ld1BvcysrO1xuXHQgICAgICAgICAgc2VsZi5wdXNoQ29tcG9uZW50KGJhc2VQYXRoLmNvbXBvbmVudHMsIHRydWUsIHVuZGVmaW5lZCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgX29sZFBvcyA9IHNlbGYuZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCk7XG5cblx0ICAgICAgICAvLyBJZiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIGJvdGggc3RyaW5ncywgdGhlbiB3ZSBhcmUgZG9uZVxuXHQgICAgICAgIGlmIChiYXNlUGF0aC5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBfb2xkUG9zICsgMSA+PSBvbGRMZW4pIHtcblx0ICAgICAgICAgIHJldHVybiBkb25lKGJ1aWxkVmFsdWVzKHNlbGYsIGJhc2VQYXRoLmNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBzZWxmLnVzZUxvbmdlc3RUb2tlbikpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAvLyBPdGhlcndpc2UgdHJhY2sgdGhpcyBwYXRoIGFzIGEgcG90ZW50aWFsIGNhbmRpZGF0ZSBhbmQgY29udGludWUuXG5cdCAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gYmFzZVBhdGg7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgZWRpdExlbmd0aCsrO1xuXHQgICAgfVxuXG5cdCAgICAvLyBQZXJmb3JtcyB0aGUgbGVuZ3RoIG9mIGVkaXQgaXRlcmF0aW9uLiBJcyBhIGJpdCBmdWdseSBhcyB0aGlzIGhhcyB0byBzdXBwb3J0IHRoZVxuXHQgICAgLy8gc3luYyBhbmQgYXN5bmMgbW9kZSB3aGljaCBpcyBuZXZlciBmdW4uIExvb3BzIG92ZXIgZXhlY0VkaXRMZW5ndGggdW50aWwgYSB2YWx1ZVxuXHQgICAgLy8gaXMgcHJvZHVjZWQuXG5cdCAgICBpZiAoY2FsbGJhY2spIHtcblx0ICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG5cdCAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgd2Ugd2FudCB0byBiZSBzYWZlLlxuXHQgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0ICAgICAgICAgIGlmIChlZGl0TGVuZ3RoID4gbWF4RWRpdExlbmd0aCkge1xuXHQgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcblx0ICAgICAgICAgIH1cblxuXHQgICAgICAgICAgaWYgKCFleGVjRWRpdExlbmd0aCgpKSB7XG5cdCAgICAgICAgICAgIGV4ZWMoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9LCAwKTtcblx0ICAgICAgfSkoKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHdoaWxlIChlZGl0TGVuZ3RoIDw9IG1heEVkaXRMZW5ndGgpIHtcblx0ICAgICAgICB2YXIgcmV0ID0gZXhlY0VkaXRMZW5ndGgoKTtcblx0ICAgICAgICBpZiAocmV0KSB7XG5cdCAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3B1c2hDb21wb25lbnQ6IGZ1bmN0aW9uIHB1c2hDb21wb25lbnQoY29tcG9uZW50cywgYWRkZWQsIHJlbW92ZWQpIHtcblx0ICAgIHZhciBsYXN0ID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuXHQgICAgaWYgKGxhc3QgJiYgbGFzdC5hZGRlZCA9PT0gYWRkZWQgJiYgbGFzdC5yZW1vdmVkID09PSByZW1vdmVkKSB7XG5cdCAgICAgIC8vIFdlIG5lZWQgdG8gY2xvbmUgaGVyZSBhcyB0aGUgY29tcG9uZW50IGNsb25lIG9wZXJhdGlvbiBpcyBqdXN0XG5cdCAgICAgIC8vIGFzIHNoYWxsb3cgYXJyYXkgY2xvbmVcblx0ICAgICAgY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdID0geyBjb3VudDogbGFzdC5jb3VudCArIDEsIGFkZGVkOiBhZGRlZCwgcmVtb3ZlZDogcmVtb3ZlZCB9O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgY29tcG9uZW50cy5wdXNoKHsgY291bnQ6IDEsIGFkZGVkOiBhZGRlZCwgcmVtb3ZlZDogcmVtb3ZlZCB9KTtcblx0ICAgIH1cblx0ICB9LFxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9leHRyYWN0Q29tbW9uOiBmdW5jdGlvbiBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKSB7XG5cdCAgICB2YXIgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCxcblx0ICAgICAgICBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoLFxuXHQgICAgICAgIG5ld1BvcyA9IGJhc2VQYXRoLm5ld1Bvcyxcblx0ICAgICAgICBvbGRQb3MgPSBuZXdQb3MgLSBkaWFnb25hbFBhdGgsXG5cdCAgICAgICAgY29tbW9uQ291bnQgPSAwO1xuXHQgICAgd2hpbGUgKG5ld1BvcyArIDEgPCBuZXdMZW4gJiYgb2xkUG9zICsgMSA8IG9sZExlbiAmJiB0aGlzLmVxdWFscyhuZXdTdHJpbmdbbmV3UG9zICsgMV0sIG9sZFN0cmluZ1tvbGRQb3MgKyAxXSkpIHtcblx0ICAgICAgbmV3UG9zKys7XG5cdCAgICAgIG9sZFBvcysrO1xuXHQgICAgICBjb21tb25Db3VudCsrO1xuXHQgICAgfVxuXG5cdCAgICBpZiAoY29tbW9uQ291bnQpIHtcblx0ICAgICAgYmFzZVBhdGguY29tcG9uZW50cy5wdXNoKHsgY291bnQ6IGNvbW1vbkNvdW50IH0pO1xuXHQgICAgfVxuXG5cdCAgICBiYXNlUGF0aC5uZXdQb3MgPSBuZXdQb3M7XG5cdCAgICByZXR1cm4gb2xkUG9zO1xuXHQgIH0sXG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2VxdWFsczogZnVuY3Rpb24gZXF1YWxzKGxlZnQsIHJpZ2h0KSB7XG5cdCAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhcmF0b3IpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKGxlZnQsIHJpZ2h0KTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJldHVybiBsZWZ0ID09PSByaWdodCB8fCB0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSAmJiBsZWZ0LnRvTG93ZXJDYXNlKCkgPT09IHJpZ2h0LnRvTG93ZXJDYXNlKCk7XG5cdCAgICB9XG5cdCAgfSxcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovIC8qaXN0YW5idWwgaWdub3JlIGVuZCovcmVtb3ZlRW1wdHk6IGZ1bmN0aW9uIHJlbW92ZUVtcHR5KGFycmF5KSB7XG5cdCAgICB2YXIgcmV0ID0gW107XG5cdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgIGlmIChhcnJheVtpXSkge1xuXHQgICAgICAgIHJldC5wdXNoKGFycmF5W2ldKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJldDtcblx0ICB9LFxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jYXN0SW5wdXQ6IGZ1bmN0aW9uIGNhc3RJbnB1dCh2YWx1ZSkge1xuXHQgICAgcmV0dXJuIHZhbHVlO1xuXHQgIH0sXG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3Rva2VuaXplOiBmdW5jdGlvbiB0b2tlbml6ZSh2YWx1ZSkge1xuXHQgICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcnKTtcblx0ICB9LFxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9qb2luOiBmdW5jdGlvbiBqb2luKGNoYXJzKSB7XG5cdCAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG5cdCAgfVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGJ1aWxkVmFsdWVzKGRpZmYsIGNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCB1c2VMb25nZXN0VG9rZW4pIHtcblx0ICB2YXIgY29tcG9uZW50UG9zID0gMCxcblx0ICAgICAgY29tcG9uZW50TGVuID0gY29tcG9uZW50cy5sZW5ndGgsXG5cdCAgICAgIG5ld1BvcyA9IDAsXG5cdCAgICAgIG9sZFBvcyA9IDA7XG5cblx0ICBmb3IgKDsgY29tcG9uZW50UG9zIDwgY29tcG9uZW50TGVuOyBjb21wb25lbnRQb3MrKykge1xuXHQgICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcblx0ICAgIGlmICghY29tcG9uZW50LnJlbW92ZWQpIHtcblx0ICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQgJiYgdXNlTG9uZ2VzdFRva2VuKSB7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gbmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KTtcblx0ICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChmdW5jdGlvbiAodmFsdWUsIGkpIHtcblx0ICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IG9sZFN0cmluZ1tvbGRQb3MgKyBpXTtcblx0ICAgICAgICAgIHJldHVybiBvbGRWYWx1ZS5sZW5ndGggPiB2YWx1ZS5sZW5ndGggPyBvbGRWYWx1ZSA6IHZhbHVlO1xuXHQgICAgICAgIH0pO1xuXG5cdCAgICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKHZhbHVlKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4obmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KSk7XG5cdCAgICAgIH1cblx0ICAgICAgbmV3UG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuXHQgICAgICAvLyBDb21tb24gY2FzZVxuXHQgICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCkge1xuXHQgICAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7XG5cdCAgICAgIH1cblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbihvbGRTdHJpbmcuc2xpY2Uob2xkUG9zLCBvbGRQb3MgKyBjb21wb25lbnQuY291bnQpKTtcblx0ICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuXHQgICAgICAvLyBSZXZlcnNlIGFkZCBhbmQgcmVtb3ZlIHNvIHJlbW92ZXMgYXJlIG91dHB1dCBmaXJzdCB0byBtYXRjaCBjb21tb24gY29udmVudGlvblxuXHQgICAgICAvLyBUaGUgZGlmZmluZyBhbGdvcml0aG0gaXMgdGllZCB0byBhZGQgdGhlbiByZW1vdmUgb3V0cHV0IGFuZCB0aGlzIGlzIHRoZSBzaW1wbGVzdFxuXHQgICAgICAvLyByb3V0ZSB0byBnZXQgdGhlIGRlc2lyZWQgb3V0cHV0IHdpdGggbWluaW1hbCBvdmVyaGVhZC5cblx0ICAgICAgaWYgKGNvbXBvbmVudFBvcyAmJiBjb21wb25lbnRzW2NvbXBvbmVudFBvcyAtIDFdLmFkZGVkKSB7XG5cdCAgICAgICAgdmFyIHRtcCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV07XG5cdCAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXSA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcblx0ICAgICAgICBjb21wb25lbnRzW2NvbXBvbmVudFBvc10gPSB0bXA7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICAvLyBTcGVjaWFsIGNhc2UgaGFuZGxlIGZvciB3aGVuIG9uZSB0ZXJtaW5hbCBpcyBpZ25vcmVkIChpLmUuIHdoaXRlc3BhY2UpLlxuXHQgIC8vIEZvciB0aGlzIGNhc2Ugd2UgbWVyZ2UgdGhlIHRlcm1pbmFsIGludG8gdGhlIHByaW9yIHN0cmluZyBhbmQgZHJvcCB0aGUgY2hhbmdlLlxuXHQgIC8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIHN0cmluZyBtb2RlLlxuXHQgIHZhciBsYXN0Q29tcG9uZW50ID0gY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAxXTtcblx0ICBpZiAoY29tcG9uZW50TGVuID4gMSAmJiB0eXBlb2YgbGFzdENvbXBvbmVudC52YWx1ZSA9PT0gJ3N0cmluZycgJiYgKGxhc3RDb21wb25lbnQuYWRkZWQgfHwgbGFzdENvbXBvbmVudC5yZW1vdmVkKSAmJiBkaWZmLmVxdWFscygnJywgbGFzdENvbXBvbmVudC52YWx1ZSkpIHtcblx0ICAgIGNvbXBvbmVudHNbY29tcG9uZW50TGVuIC0gMl0udmFsdWUgKz0gbGFzdENvbXBvbmVudC52YWx1ZTtcblx0ICAgIGNvbXBvbmVudHMucG9wKCk7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIGNvbXBvbmVudHM7XG5cdH1cblxuXHRmdW5jdGlvbiBjbG9uZVBhdGgocGF0aCkge1xuXHQgIHJldHVybiB7IG5ld1BvczogcGF0aC5uZXdQb3MsIGNvbXBvbmVudHM6IHBhdGguY29tcG9uZW50cy5zbGljZSgwKSB9O1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDJKaGMyVXVhbk1pWFN3aWJtRnRaWE1pT2xzaVJHbG1aaUlzSW5CeWIzUnZkSGx3WlNJc0ltUnBabVlpTENKdmJHUlRkSEpwYm1jaUxDSnVaWGRUZEhKcGJtY2lMQ0p2Y0hScGIyNXpJaXdpWTJGc2JHSmhZMnNpTENKelpXeG1JaXdpWkc5dVpTSXNJblpoYkhWbElpd2ljMlYwVkdsdFpXOTFkQ0lzSW5WdVpHVm1hVzVsWkNJc0ltTmhjM1JKYm5CMWRDSXNJbkpsYlc5MlpVVnRjSFI1SWl3aWRHOXJaVzVwZW1VaUxDSnVaWGRNWlc0aUxDSnNaVzVuZEdnaUxDSnZiR1JNWlc0aUxDSmxaR2wwVEdWdVozUm9JaXdpYldGNFJXUnBkRXhsYm1kMGFDSXNJbUpsYzNSUVlYUm9JaXdpYm1WM1VHOXpJaXdpWTI5dGNHOXVaVzUwY3lJc0ltOXNaRkJ2Y3lJc0ltVjRkSEpoWTNSRGIyMXRiMjRpTENKcWIybHVJaXdpWTI5MWJuUWlMQ0psZUdWalJXUnBkRXhsYm1kMGFDSXNJbVJwWVdkdmJtRnNVR0YwYUNJc0ltSmhjMlZRWVhSb0lpd2lZV1JrVUdGMGFDSXNJbkpsYlc5MlpWQmhkR2dpTENKallXNUJaR1FpTENKallXNVNaVzF2ZG1VaUxDSmpiRzl1WlZCaGRHZ2lMQ0p3ZFhOb1EyOXRjRzl1Wlc1MElpd2lZblZwYkdSV1lXeDFaWE1pTENKMWMyVk1iMjVuWlhOMFZHOXJaVzRpTENKbGVHVmpJaXdpY21WMElpd2lZV1JrWldRaUxDSnlaVzF2ZG1Wa0lpd2liR0Z6ZENJc0luQjFjMmdpTENKamIyMXRiMjVEYjNWdWRDSXNJbVZ4ZFdGc2N5SXNJbXhsWm5RaUxDSnlhV2RvZENJc0ltTnZiWEJoY21GMGIzSWlMQ0pwWjI1dmNtVkRZWE5sSWl3aWRHOU1iM2RsY2tOaGMyVWlMQ0poY25KaGVTSXNJbWtpTENKemNHeHBkQ0lzSW1Ob1lYSnpJaXdpWTI5dGNHOXVaVzUwVUc5eklpd2lZMjl0Y0c5dVpXNTBUR1Z1SWl3aVkyOXRjRzl1Wlc1MElpd2ljMnhwWTJVaUxDSnRZWEFpTENKdmJHUldZV3gxWlNJc0luUnRjQ0lzSW14aGMzUkRiMjF3YjI1bGJuUWlMQ0p3YjNBaUxDSndZWFJvSWwwc0ltMWhjSEJwYm1keklqb2lPenM3TkVOQlFYZENRU3hKTzBGQlFWUXNVMEZCVTBFc1NVRkJWQ3hIUVVGblFpeERRVUZGT3p0QlFVVnFRMEVzUzBGQlMwTXNVMEZCVEN4SFFVRnBRanRCUVVGQkxHMUVRVU5tUXl4SlFVUmxMR2RDUVVOV1F5eFRRVVJWTEVWQlEwTkRMRk5CUkVRc1JVRkRNRUk3UVVGQlFTeDNSRUZCWkVNc1QwRkJZeXgxUlVGQlNpeEZRVUZKT3p0QlFVTjJReXhSUVVGSlF5eFhRVUZYUkN4UlFVRlJReXhSUVVGMlFqdEJRVU5CTEZGQlFVa3NUMEZCVDBRc1QwRkJVQ3hMUVVGdFFpeFZRVUYyUWl4RlFVRnRRenRCUVVOcVEwTXNhVUpCUVZkRUxFOUJRVmc3UVVGRFFVRXNaMEpCUVZVc1JVRkJWanRCUVVORU8wRkJRMFFzVTBGQlMwRXNUMEZCVEN4SFFVRmxRU3hQUVVGbU96dEJRVVZCTEZGQlFVbEZMRTlCUVU4c1NVRkJXRHM3UVVGRlFTeGhRVUZUUXl4SlFVRlVMRU5CUVdORExFdEJRV1FzUlVGQmNVSTdRVUZEYmtJc1ZVRkJTVWdzVVVGQlNpeEZRVUZqTzBGQlExcEpMRzFDUVVGWExGbEJRVmM3UVVGQlJVb3NiVUpCUVZOTExGTkJRVlFzUlVGQmIwSkdMRXRCUVhCQ08wRkJRVFpDTEZOQlFYSkVMRVZCUVhWRUxFTkJRWFpFTzBGQlEwRXNaVUZCVHl4SlFVRlFPMEZCUTBRc1QwRklSQ3hOUVVkUE8wRkJRMHdzWlVGQlQwRXNTMEZCVUR0QlFVTkVPMEZCUTBZN08wRkJSVVE3UVVGRFFVNHNaMEpCUVZrc1MwRkJTMU1zVTBGQlRDeERRVUZsVkN4VFFVRm1MRU5CUVZvN1FVRkRRVU1zWjBKQlFWa3NTMEZCUzFFc1UwRkJUQ3hEUVVGbFVpeFRRVUZtTEVOQlFWbzdPMEZCUlVGRUxHZENRVUZaTEV0QlFVdFZMRmRCUVV3c1EwRkJhVUlzUzBGQlMwTXNVVUZCVEN4RFFVRmpXQ3hUUVVGa0xFTkJRV3BDTEVOQlFWbzdRVUZEUVVNc1owSkJRVmtzUzBGQlMxTXNWMEZCVEN4RFFVRnBRaXhMUVVGTFF5eFJRVUZNTEVOQlFXTldMRk5CUVdRc1EwRkJha0lzUTBGQldqczdRVUZGUVN4UlFVRkpWeXhUUVVGVFdDeFZRVUZWV1N4TlFVRjJRanRCUVVGQkxGRkJRU3RDUXl4VFFVRlRaQ3hWUVVGVllTeE5RVUZzUkR0QlFVTkJMRkZCUVVsRkxHRkJRV0VzUTBGQmFrSTdRVUZEUVN4UlFVRkpReXhuUWtGQlowSktMRk5CUVZORkxFMUJRVGRDTzBGQlEwRXNVVUZCU1Vjc1YwRkJWeXhEUVVGRExFVkJRVVZETEZGQlFWRXNRMEZCUXl4RFFVRllMRVZCUVdORExGbEJRVmtzUlVGQk1VSXNSVUZCUkN4RFFVRm1PenRCUVVWQk8wRkJRMEVzVVVGQlNVTXNVMEZCVXl4TFFVRkxReXhoUVVGTUxFTkJRVzFDU2l4VFFVRlRMRU5CUVZRc1EwRkJia0lzUlVGQlowTm9RaXhUUVVGb1F5eEZRVUV5UTBRc1UwRkJNME1zUlVGQmMwUXNRMEZCZEVRc1EwRkJZanRCUVVOQkxGRkJRVWxwUWl4VFFVRlRMRU5CUVZRc1JVRkJXVU1zVFVGQldpeEhRVUZ4UWl4RFFVRnlRaXhKUVVFd1FrNHNUVUZCTVVJc1NVRkJiME5STEZOQlFWTXNRMEZCVkN4SlFVRmpUaXhOUVVGMFJDeEZRVUU0UkR0QlFVTTFSRHRCUVVOQkxHRkJRVTlVTEV0QlFVc3NRMEZCUXl4RlFVRkRReXhQUVVGUExFdEJRVXRuUWl4SlFVRk1MRU5CUVZWeVFpeFRRVUZXTEVOQlFWSXNSVUZCT0VKelFpeFBRVUZQZEVJc1ZVRkJWVmtzVFVGQkwwTXNSVUZCUkN4RFFVRk1MRU5CUVZBN1FVRkRSRHM3UVVGRlJEdEJRVU5CTEdGQlFWTlhMR05CUVZRc1IwRkJNRUk3UVVGRGVFSXNWMEZCU3l4SlFVRkpReXhsUVVGbExFTkJRVU1zUTBGQlJDeEhRVUZMVml4VlFVRTNRaXhGUVVGNVExVXNaMEpCUVdkQ1ZpeFZRVUY2UkN4RlFVRnhSVlVzWjBKQlFXZENMRU5CUVhKR0xFVkJRWGRHTzBGQlEzUkdMRmxCUVVsRExEQkRRVUZLTzBGQlEwRXNXVUZCU1VNc1ZVRkJWVllzVTBGQlUxRXNaVUZCWlN4RFFVRjRRaXhEUVVGa08wRkJRVUVzV1VGRFNVY3NZVUZCWVZnc1UwRkJVMUVzWlVGQlpTeERRVUY0UWl4RFFVUnFRanRCUVVGQkxGbEJSVWxNTEZWQlFWTXNRMEZCUTFFc1lVRkJZVUVzVjBGQlYxWXNUVUZCZUVJc1IwRkJhVU1zUTBGQmJFTXNTVUZCZFVOUExGbEJSbkJFTzBGQlIwRXNXVUZCU1VVc1QwRkJTaXhGUVVGaE8wRkJRMWc3UVVGRFFWWXNiVUpCUVZOUkxHVkJRV1VzUTBGQmVFSXNTVUZCTmtKcVFpeFRRVUUzUWp0QlFVTkVPenRCUVVWRUxGbEJRVWx4UWl4VFFVRlRSaXhYUVVGWFFTeFJRVUZSVkN4TlFVRlNMRWRCUVdsQ0xFTkJRV3BDTEVkQlFYRkNUaXhOUVVFM1F6dEJRVUZCTEZsQlEwbHJRaXhaUVVGWlJpeGpRVUZqTEV0QlFVdFNMRTlCUVc1Q0xFbEJRVFpDUVN4VlFVRlRUaXhOUVVSMFJEdEJRVVZCTEZsQlFVa3NRMEZCUTJVc1RVRkJSQ3hKUVVGWExFTkJRVU5ETEZOQlFXaENMRVZCUVRKQ08wRkJRM3BDTzBGQlEwRmlMRzFDUVVGVFVTeFpRVUZVTEVsQlFYbENha0lzVTBGQmVrSTdRVUZEUVR0QlFVTkVPenRCUVVWRU8wRkJRMEU3UVVGRFFUdEJRVU5CTEZsQlFVa3NRMEZCUTNGQ0xFMUJRVVFzU1VGQldVTXNZVUZCWVVnc1VVRkJVVlFzVFVGQlVpeEhRVUZwUWxVc1YwRkJWMVlzVFVGQmVrUXNSVUZCYTBVN1FVRkRhRVZSTEhGQ1FVRlhTeXhWUVVGVlNDeFZRVUZXTEVOQlFWZzdRVUZEUVhoQ0xHVkJRVXMwUWl4aFFVRk1MRU5CUVcxQ1RpeFRRVUZUVUN4VlFVRTFRaXhGUVVGM1ExZ3NVMEZCZUVNc1JVRkJiVVFzU1VGQmJrUTdRVUZEUkN4VFFVaEVMRTFCUjA4N1FVRkRUR3RDTEhGQ1FVRlhReXhQUVVGWUxFTkJSRXNzUTBGRGFVSTdRVUZEZEVKRUxHMUNRVUZUVWl4TlFVRlVPMEZCUTBGa0xHVkJRVXMwUWl4aFFVRk1MRU5CUVcxQ1RpeFRRVUZUVUN4VlFVRTFRaXhGUVVGM1F5eEpRVUY0UXl4RlFVRTRRMWdzVTBGQk9VTTdRVUZEUkRzN1FVRkZSRmtzYTBKQlFWTm9RaXhMUVVGTGFVSXNZVUZCVEN4RFFVRnRRa3NzVVVGQmJrSXNSVUZCTmtKNlFpeFRRVUUzUWl4RlFVRjNRMFFzVTBGQmVFTXNSVUZCYlVSNVFpeFpRVUZ1UkN4RFFVRlVPenRCUVVWQk8wRkJRMEVzV1VGQlNVTXNVMEZCVTFJc1RVRkJWQ3hIUVVGclFpeERRVUZzUWl4SlFVRjFRazRzVFVGQmRrSXNTVUZCYVVOUkxGVkJRVk1zUTBGQlZDeEpRVUZqVGl4TlFVRnVSQ3hGUVVFeVJEdEJRVU42UkN4cFFrRkJUMVFzUzBGQlN6UkNMRmxCUVZrM1FpeEpRVUZhTEVWQlFXdENjMElzVTBGQlUxQXNWVUZCTTBJc1JVRkJkVU5zUWl4VFFVRjJReXhGUVVGclJFUXNVMEZCYkVRc1JVRkJOa1JKTEV0QlFVczRRaXhsUVVGc1JTeERRVUZNTEVOQlFWQTdRVUZEUkN4VFFVWkVMRTFCUlU4N1FVRkRURHRCUVVOQmFrSXNiVUpCUVZOUkxGbEJRVlFzU1VGQmVVSkRMRkZCUVhwQ08wRkJRMFE3UVVGRFJqczdRVUZGUkZnN1FVRkRSRHM3UVVGRlJEdEJRVU5CTzBGQlEwRTdRVUZEUVN4UlFVRkpXaXhSUVVGS0xFVkJRV003UVVGRFdDeG5Ra0ZCVTJkRExFbEJRVlFzUjBGQlowSTdRVUZEWmpWQ0xHMUNRVUZYTEZsQlFWYzdRVUZEY0VJN1FVRkRRVHRCUVVOQkxHTkJRVWxSTEdGQlFXRkRMR0ZCUVdwQ0xFVkJRV2RETzBGQlF6bENMRzFDUVVGUFlpeFZRVUZRTzBGQlEwUTdPMEZCUlVRc1kwRkJTU3hEUVVGRGNVSXNaMEpCUVV3c1JVRkJkVUk3UVVGRGNrSlhPMEZCUTBRN1FVRkRSaXhUUVZaRUxFVkJWVWNzUTBGV1NEdEJRVmRFTEU5QldrRXNSMEZCUkR0QlFXRkVMRXRCWkVRc1RVRmpUenRCUVVOTUxHRkJRVTl3UWl4alFVRmpReXhoUVVGeVFpeEZRVUZ2UXp0QlFVTnNReXhaUVVGSmIwSXNUVUZCVFZvc1owSkJRVlk3UVVGRFFTeFpRVUZKV1N4SFFVRktMRVZCUVZNN1FVRkRVQ3hwUWtGQlQwRXNSMEZCVUR0QlFVTkVPMEZCUTBZN1FVRkRSanRCUVVOR0xFZEJPVWRqTzBGQlFVRXNiVVJCWjBobVNpeGhRV2hJWlN4NVFrRm5TRVJpTEZWQmFFaERMRVZCWjBoWGEwSXNTMEZvU0Znc1JVRm5TR3RDUXl4UFFXaEliRUlzUlVGblNESkNPMEZCUTNoRExGRkJRVWxETEU5QlFVOXdRaXhYUVVGWFFTeFhRVUZYVGl4TlFVRllMRWRCUVc5Q0xFTkJRUzlDTEVOQlFWZzdRVUZEUVN4UlFVRkpNRUlzVVVGQlVVRXNTMEZCUzBZc1MwRkJUQ3hMUVVGbFFTeExRVUYyUWl4SlFVRm5RMFVzUzBGQlMwUXNUMEZCVEN4TFFVRnBRa0VzVDBGQmNrUXNSVUZCT0VRN1FVRkROVVE3UVVGRFFUdEJRVU5CYmtJc2FVSkJRVmRCTEZkQlFWZE9MRTFCUVZnc1IwRkJiMElzUTBGQkwwSXNTVUZCYjBNc1JVRkJRMVVzVDBGQlQyZENMRXRCUVV0b1FpeExRVUZNTEVkQlFXRXNRMEZCY2tJc1JVRkJkMEpqTEU5QlFVOUJMRXRCUVM5Q0xFVkJRWE5EUXl4VFFVRlRRU3hQUVVFdlF5eEZRVUZ3UXp0QlFVTkVMRXRCU2tRc1RVRkpUenRCUVVOTWJrSXNhVUpCUVZkeFFpeEpRVUZZTEVOQlFXZENMRVZCUVVOcVFpeFBRVUZQTEVOQlFWSXNSVUZCVjJNc1QwRkJUMEVzUzBGQmJFSXNSVUZCZVVKRExGTkJRVk5CTEU5QlFXeERMRVZCUVdoQ08wRkJRMFE3UVVGRFJpeEhRWHBJWXp0QlFVRkJMRzFFUVRCSVptcENMR0ZCTVVobExIbENRVEJJUkVzc1VVRXhTRU1zUlVFd1NGTjZRaXhUUVRGSVZDeEZRVEJJYjBKRUxGTkJNVWh3UWl4RlFUQklLMEo1UWl4WlFURklMMElzUlVFd1NEWkRPMEZCUXpGRUxGRkJRVWxpTEZOQlFWTllMRlZCUVZWWkxFMUJRWFpDTzBGQlFVRXNVVUZEU1VNc1UwRkJVMlFzVlVGQlZXRXNUVUZFZGtJN1FVRkJRU3hSUVVWSlN5eFRRVUZUVVN4VFFVRlRVaXhOUVVaMFFqdEJRVUZCTEZGQlIwbEZMRk5CUVZOR0xGTkJRVk5QTEZsQlNIUkNPMEZCUVVFc1VVRkxTV2RDTEdOQlFXTXNRMEZNYkVJN1FVRk5RU3hYUVVGUGRrSXNVMEZCVXl4RFFVRlVMRWRCUVdGT0xFMUJRV0lzU1VGQmRVSlJMRk5CUVZNc1EwRkJWQ3hIUVVGaFRpeE5RVUZ3UXl4SlFVRTRReXhMUVVGTE5FSXNUVUZCVEN4RFFVRlpla01zVlVGQlZXbENMRk5CUVZNc1EwRkJia0lzUTBGQldpeEZRVUZ0UTJ4Q0xGVkJRVlZ2UWl4VFFVRlRMRU5CUVc1Q0xFTkJRVzVETEVOQlFYSkVMRVZCUVdkSU8wRkJRemxIUmp0QlFVTkJSVHRCUVVOQmNVSTdRVUZEUkRzN1FVRkZSQ3hSUVVGSlFTeFhRVUZLTEVWQlFXbENPMEZCUTJabUxHVkJRVk5RTEZWQlFWUXNRMEZCYjBKeFFpeEpRVUZ3UWl4RFFVRjVRaXhGUVVGRGFrSXNUMEZCVDJ0Q0xGZEJRVklzUlVGQmVrSTdRVUZEUkRzN1FVRkZSR1lzWVVGQlUxSXNUVUZCVkN4SFFVRnJRa0VzVFVGQmJFSTdRVUZEUVN4WFFVRlBSU3hOUVVGUU8wRkJRMFFzUjBFM1NXTTdRVUZCUVN4dFJFRXJTV1p6UWl4TlFTOUpaU3hyUWtFclNWSkRMRWxCTDBsUkxFVkJLMGxHUXl4TFFTOUpSU3hGUVN0SlN6dEJRVU5zUWl4UlFVRkpMRXRCUVVzeFF5eFBRVUZNTEVOQlFXRXlReXhWUVVGcVFpeEZRVUUyUWp0QlFVTXpRaXhoUVVGUExFdEJRVXN6UXl4UFFVRk1MRU5CUVdFeVF5eFZRVUZpTEVOQlFYZENSaXhKUVVGNFFpeEZRVUU0UWtNc1MwRkJPVUlzUTBGQlVEdEJRVU5FTEV0QlJrUXNUVUZGVHp0QlFVTk1MR0ZCUVU5RUxGTkJRVk5ETEV0QlFWUXNTVUZEUkN4TFFVRkxNVU1zVDBGQlRDeERRVUZoTkVNc1ZVRkJZaXhKUVVFeVFrZ3NTMEZCUzBrc1YwRkJUQ3hQUVVGMVFrZ3NUVUZCVFVjc1YwRkJUaXhGUVVSNFJEdEJRVVZFTzBGQlEwWXNSMEYwU21NN1FVRkJRU3h0UkVGMVNtWnlReXhYUVhaS1pTeDFRa0YxU2toelF5eExRWFpLUnl4RlFYVktTVHRCUVVOcVFpeFJRVUZKV2l4TlFVRk5MRVZCUVZZN1FVRkRRU3hUUVVGTExFbEJRVWxoTEVsQlFVa3NRMEZCWWl4RlFVRm5Ra0VzU1VGQlNVUXNUVUZCVFc1RExFMUJRVEZDTEVWQlFXdERiME1zUjBGQmJFTXNSVUZCZFVNN1FVRkRja01zVlVGQlNVUXNUVUZCVFVNc1EwRkJUaXhEUVVGS0xFVkJRV003UVVGRFdtSXNXVUZCU1Vrc1NVRkJTaXhEUVVGVFVTeE5RVUZOUXl4RFFVRk9MRU5CUVZRN1FVRkRSRHRCUVVOR08wRkJRMFFzVjBGQlQySXNSMEZCVUR0QlFVTkVMRWRCTDBwak8wRkJRVUVzYlVSQlowdG1NMElzVTBGb1MyVXNjVUpCWjB0TVNDeExRV2hMU3l4RlFXZExSVHRCUVVObUxGZEJRVTlCTEV0QlFWQTdRVUZEUkN4SFFXeExZenRCUVVGQkxHMUVRVzFMWmtzc1VVRnVTMlVzYjBKQmJVdE9UQ3hMUVc1TFRTeEZRVzFMUXp0QlFVTmtMRmRCUVU5QkxFMUJRVTAwUXl4TFFVRk9MRU5CUVZrc1JVRkJXaXhEUVVGUU8wRkJRMFFzUjBGeVMyTTdRVUZCUVN4dFJFRnpTMlkxUWl4SlFYUkxaU3huUWtGelMxWTJRaXhMUVhSTFZTeEZRWE5MU0R0QlFVTldMRmRCUVU5QkxFMUJRVTAzUWl4SlFVRk9MRU5CUVZjc1JVRkJXQ3hEUVVGUU8wRkJRMFE3UVVGNFMyTXNRMEZCYWtJN08wRkJNa3RCTEZOQlFWTlhMRmRCUVZRc1EwRkJjVUpzUXl4SlFVRnlRaXhGUVVFeVFtOUNMRlZCUVROQ0xFVkJRWFZEYkVJc1UwRkJka01zUlVGQmEwUkVMRk5CUVd4RUxFVkJRVFpFYTBNc1pVRkJOMFFzUlVGQk9FVTdRVUZETlVVc1RVRkJTV3RDTEdWQlFXVXNRMEZCYmtJN1FVRkJRU3hOUVVOSlF5eGxRVUZsYkVNc1YwRkJWMDRzVFVGRU9VSTdRVUZCUVN4TlFVVkpTeXhUUVVGVExFTkJSbUk3UVVGQlFTeE5RVWRKUlN4VFFVRlRMRU5CU0dJN08wRkJTMEVzVTBGQlQyZERMR1ZCUVdWRExGbEJRWFJDTEVWQlFXOURSQ3hqUVVGd1F5eEZRVUZ2UkR0QlFVTnNSQ3hSUVVGSlJTeFpRVUZaYmtNc1YwRkJWMmxETEZsQlFWZ3NRMEZCYUVJN1FVRkRRU3hSUVVGSkxFTkJRVU5GTEZWQlFWVm9RaXhQUVVGbUxFVkJRWGRDTzBGQlEzUkNMRlZCUVVrc1EwRkJRMmRDTEZWQlFWVnFRaXhMUVVGWUxFbEJRVzlDU0N4bFFVRjRRaXhGUVVGNVF6dEJRVU4yUXl4WlFVRkpOVUlzVVVGQlVVd3NWVUZCVlhORUxFdEJRVllzUTBGQlowSnlReXhOUVVGb1FpeEZRVUYzUWtFc1UwRkJVMjlETEZWQlFWVXZRaXhMUVVFelF5eERRVUZhTzBGQlEwRnFRaXhuUWtGQlVVRXNUVUZCVFd0RUxFZEJRVTRzUTBGQlZTeFZRVUZUYkVRc1MwRkJWQ3hGUVVGblFqSkRMRU5CUVdoQ0xFVkJRVzFDTzBGQlEyNURMR05CUVVsUkxGZEJRVmQ2UkN4VlFVRlZiMElzVTBGQlV6WkNMRU5CUVc1Q0xFTkJRV1k3UVVGRFFTeHBRa0ZCVDFFc1UwRkJVelZETEUxQlFWUXNSMEZCYTBKUUxFMUJRVTFQTEUxQlFYaENMRWRCUVdsRE5FTXNVVUZCYWtNc1IwRkJORU51UkN4TFFVRnVSRHRCUVVORUxGTkJTRThzUTBGQlVqczdRVUZMUVdkRUxHdENRVUZWYUVRc1MwRkJWaXhIUVVGclFsQXNTMEZCUzNWQ0xFbEJRVXdzUTBGQlZXaENMRXRCUVZZc1EwRkJiRUk3UVVGRFJDeFBRVkpFTEUxQlVVODdRVUZEVEdkRUxHdENRVUZWYUVRc1MwRkJWaXhIUVVGclFsQXNTMEZCUzNWQ0xFbEJRVXdzUTBGQlZYSkNMRlZCUVZWelJDeExRVUZXTEVOQlFXZENja01zVFVGQmFFSXNSVUZCZDBKQkxGTkJRVk52UXl4VlFVRlZMMElzUzBGQk0wTXNRMEZCVml4RFFVRnNRanRCUVVORU8wRkJRMFJNTEdkQ1FVRlZiME1zVlVGQlZTOUNMRXRCUVhCQ096dEJRVVZCTzBGQlEwRXNWVUZCU1N4RFFVRkRLMElzVlVGQlZXcENMRXRCUVdZc1JVRkJjMEk3UVVGRGNFSnFRaXhyUWtGQlZXdERMRlZCUVZVdlFpeExRVUZ3UWp0QlFVTkVPMEZCUTBZc1MwRnNRa1FzVFVGclFrODdRVUZEVEN0Q0xHZENRVUZWYUVRc1MwRkJWaXhIUVVGclFsQXNTMEZCUzNWQ0xFbEJRVXdzUTBGQlZYUkNMRlZCUVZWMVJDeExRVUZXTEVOQlFXZENia01zVFVGQmFFSXNSVUZCZDBKQkxGTkJRVk5yUXl4VlFVRlZMMElzUzBGQk0wTXNRMEZCVml4RFFVRnNRanRCUVVOQlNDeG5Ra0ZCVld0RExGVkJRVlV2UWl4TFFVRndRanM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVN4VlFVRkpOa0lzWjBKQlFXZENha01zVjBGQlYybERMR1ZCUVdVc1EwRkJNVUlzUlVGQk5rSm1MRXRCUVdwRUxFVkJRWGRFTzBGQlEzUkVMRmxCUVVseFFpeE5RVUZOZGtNc1YwRkJWMmxETEdWQlFXVXNRMEZCTVVJc1EwRkJWanRCUVVOQmFrTXNiVUpCUVZkcFF5eGxRVUZsTEVOQlFURkNMRWxCUVN0Q2FrTXNWMEZCVjJsRExGbEJRVmdzUTBGQkwwSTdRVUZEUVdwRExHMUNRVUZYYVVNc1dVRkJXQ3hKUVVFeVFrMHNSMEZCTTBJN1FVRkRSRHRCUVVOR08wRkJRMFk3TzBGQlJVUTdRVUZEUVR0QlFVTkJPMEZCUTBFc1RVRkJTVU1zWjBKQlFXZENlRU1zVjBGQlYydERMR1ZCUVdVc1EwRkJNVUlzUTBGQmNFSTdRVUZEUVN4TlFVRkpRU3hsUVVGbExFTkJRV1lzU1VGRFJ5eFBRVUZQVFN4alFVRmpja1FzUzBGQmNrSXNTMEZCSzBJc1VVRkViRU1zUzBGRlNYRkVMR05CUVdOMFFpeExRVUZrTEVsQlFYVkNjMElzWTBGQlkzSkNMRTlCUm5wRExFdEJSMGQyUXl4TFFVRkxNa01zVFVGQlRDeERRVUZaTEVWQlFWb3NSVUZCWjBKcFFpeGpRVUZqY2tRc1MwRkJPVUlzUTBGSVVDeEZRVWMyUXp0QlFVTXpRMkVzWlVGQlYydERMR1ZCUVdVc1EwRkJNVUlzUlVGQk5rSXZReXhMUVVFM1FpeEpRVUZ6UTNGRUxHTkJRV055UkN4TFFVRndSRHRCUVVOQllTeGxRVUZYZVVNc1IwRkJXRHRCUVVORU96dEJRVVZFTEZOQlFVOTZReXhWUVVGUU8wRkJRMFE3TzBGQlJVUXNVMEZCVTFrc1UwRkJWQ3hEUVVGdFFqaENMRWxCUVc1Q0xFVkJRWGxDTzBGQlEzWkNMRk5CUVU4c1JVRkJSVE5ETEZGQlFWRXlReXhMUVVGTE0wTXNUVUZCWml4RlFVRjFRa01zV1VGQldUQkRMRXRCUVVzeFF5eFZRVUZNTEVOQlFXZENiME1zUzBGQmFFSXNRMEZCYzBJc1EwRkJkRUlzUTBGQmJrTXNSVUZCVUR0QlFVTkVJaXdpWm1sc1pTSTZJbUpoYzJVdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQm1kVzVqZEdsdmJpQkVhV1ptS0NrZ2UzMWNibHh1UkdsbVppNXdjbTkwYjNSNWNHVWdQU0I3WEc0Z0lHUnBabVlvYjJ4a1UzUnlhVzVuTENCdVpYZFRkSEpwYm1jc0lHOXdkR2x2Ym5NZ1BTQjdmU2tnZTF4dUlDQWdJR3hsZENCallXeHNZbUZqYXlBOUlHOXdkR2x2Ym5NdVkyRnNiR0poWTJzN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdmNIUnBiMjV6SUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0JqWVd4c1ltRmpheUE5SUc5d2RHbHZibk03WEc0Z0lDQWdJQ0J2Y0hScGIyNXpJRDBnZTMwN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWIzQjBhVzl1Y3lBOUlHOXdkR2x2Ym5NN1hHNWNiaUFnSUNCc1pYUWdjMlZzWmlBOUlIUm9hWE03WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJrYjI1bEtIWmhiSFZsS1NCN1hHNGdJQ0FnSUNCcFppQW9ZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQWdJQ0FnYzJWMFZHbHRaVzkxZENobWRXNWpkR2x2YmlncElIc2dZMkZzYkdKaFkyc29kVzVrWldacGJtVmtMQ0IyWVd4MVpTazdJSDBzSURBcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RISjFaVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjJZV3gxWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCQmJHeHZkeUJ6ZFdKamJHRnpjMlZ6SUhSdklHMWhjM05oWjJVZ2RHaGxJR2x1Y0hWMElIQnlhVzl5SUhSdklISjFibTVwYm1kY2JpQWdJQ0J2YkdSVGRISnBibWNnUFNCMGFHbHpMbU5oYzNSSmJuQjFkQ2h2YkdSVGRISnBibWNwTzF4dUlDQWdJRzVsZDFOMGNtbHVaeUE5SUhSb2FYTXVZMkZ6ZEVsdWNIVjBLRzVsZDFOMGNtbHVaeWs3WEc1Y2JpQWdJQ0J2YkdSVGRISnBibWNnUFNCMGFHbHpMbkpsYlc5MlpVVnRjSFI1S0hSb2FYTXVkRzlyWlc1cGVtVW9iMnhrVTNSeWFXNW5LU2s3WEc0Z0lDQWdibVYzVTNSeWFXNW5JRDBnZEdocGN5NXlaVzF2ZG1WRmJYQjBlU2gwYUdsekxuUnZhMlZ1YVhwbEtHNWxkMU4wY21sdVp5a3BPMXh1WEc0Z0lDQWdiR1YwSUc1bGQweGxiaUE5SUc1bGQxTjBjbWx1Wnk1c1pXNW5kR2dzSUc5c1pFeGxiaUE5SUc5c1pGTjBjbWx1Wnk1c1pXNW5kR2c3WEc0Z0lDQWdiR1YwSUdWa2FYUk1aVzVuZEdnZ1BTQXhPMXh1SUNBZ0lHeGxkQ0J0WVhoRlpHbDBUR1Z1WjNSb0lEMGdibVYzVEdWdUlDc2diMnhrVEdWdU8xeHVJQ0FnSUd4bGRDQmlaWE4wVUdGMGFDQTlJRnQ3SUc1bGQxQnZjem9nTFRFc0lHTnZiWEJ2Ym1WdWRITTZJRnRkSUgxZE8xeHVYRzRnSUNBZ0x5OGdVMlZsWkNCbFpHbDBUR1Z1WjNSb0lEMGdNQ3dnYVM1bExpQjBhR1VnWTI5dWRHVnVkQ0J6ZEdGeWRITWdkMmwwYUNCMGFHVWdjMkZ0WlNCMllXeDFaWE5jYmlBZ0lDQnNaWFFnYjJ4a1VHOXpJRDBnZEdocGN5NWxlSFJ5WVdOMFEyOXRiVzl1S0dKbGMzUlFZWFJvV3pCZExDQnVaWGRUZEhKcGJtY3NJRzlzWkZOMGNtbHVaeXdnTUNrN1hHNGdJQ0FnYVdZZ0tHSmxjM1JRWVhSb1d6QmRMbTVsZDFCdmN5QXJJREVnUGowZ2JtVjNUR1Z1SUNZbUlHOXNaRkJ2Y3lBcklERWdQajBnYjJ4a1RHVnVLU0I3WEc0Z0lDQWdJQ0F2THlCSlpHVnVkR2wwZVNCd1pYSWdkR2hsSUdWeGRXRnNhWFI1SUdGdVpDQjBiMnRsYm1sNlpYSmNiaUFnSUNBZ0lISmxkSFZ5YmlCa2IyNWxLRnQ3ZG1Gc2RXVTZJSFJvYVhNdWFtOXBiaWh1WlhkVGRISnBibWNwTENCamIzVnVkRG9nYm1WM1UzUnlhVzVuTG14bGJtZDBhSDFkS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCTllXbHVJSGR2Y210bGNpQnRaWFJvYjJRdUlHTm9aV05yY3lCaGJHd2djR1Z5YlhWMFlYUnBiMjV6SUc5bUlHRWdaMmwyWlc0Z1pXUnBkQ0JzWlc1bmRHZ2dabTl5SUdGalkyVndkR0Z1WTJVdVhHNGdJQ0FnWm5WdVkzUnBiMjRnWlhobFkwVmthWFJNWlc1bmRHZ29LU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JrYVdGbmIyNWhiRkJoZEdnZ1BTQXRNU0FxSUdWa2FYUk1aVzVuZEdnN0lHUnBZV2R2Ym1Gc1VHRjBhQ0E4UFNCbFpHbDBUR1Z1WjNSb095QmthV0ZuYjI1aGJGQmhkR2dnS3owZ01pa2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ1ltRnpaVkJoZEdnN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JoWkdSUVlYUm9JRDBnWW1WemRGQmhkR2hiWkdsaFoyOXVZV3hRWVhSb0lDMGdNVjBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaVzF2ZG1WUVlYUm9JRDBnWW1WemRGQmhkR2hiWkdsaFoyOXVZV3hRWVhSb0lDc2dNVjBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnZiR1JRYjNNZ1BTQW9jbVZ0YjNabFVHRjBhQ0EvSUhKbGJXOTJaVkJoZEdndWJtVjNVRzl6SURvZ01Da2dMU0JrYVdGbmIyNWhiRkJoZEdnN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hoWkdSUVlYUm9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdUbThnYjI1bElHVnNjMlVnYVhNZ1oyOXBibWNnZEc4Z1lYUjBaVzF3ZENCMGJ5QjFjMlVnZEdocGN5QjJZV3gxWlN3Z1kyeGxZWElnYVhSY2JpQWdJQ0FnSUNBZ0lDQmlaWE4wVUdGMGFGdGthV0ZuYjI1aGJGQmhkR2dnTFNBeFhTQTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHeGxkQ0JqWVc1QlpHUWdQU0JoWkdSUVlYUm9JQ1ltSUdGa1pGQmhkR2d1Ym1WM1VHOXpJQ3NnTVNBOElHNWxkMHhsYml4Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYmxKbGJXOTJaU0E5SUhKbGJXOTJaVkJoZEdnZ0ppWWdNQ0E4UFNCdmJHUlFiM01nSmlZZ2IyeGtVRzl6SUR3Z2IyeGtUR1Z1TzF4dUlDQWdJQ0FnSUNCcFppQW9JV05oYmtGa1pDQW1KaUFoWTJGdVVtVnRiM1psS1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnU1dZZ2RHaHBjeUJ3WVhSb0lHbHpJR0VnZEdWeWJXbHVZV3dnZEdobGJpQndjblZ1WlZ4dUlDQWdJQ0FnSUNBZ0lHSmxjM1JRWVhSb1cyUnBZV2R2Ym1Gc1VHRjBhRjBnUFNCMWJtUmxabWx1WldRN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBdkx5QlRaV3hsWTNRZ2RHaGxJR1JwWVdkdmJtRnNJSFJvWVhRZ2QyVWdkMkZ1ZENCMGJ5QmljbUZ1WTJnZ1puSnZiUzRnVjJVZ2MyVnNaV04wSUhSb1pTQndjbWx2Y2x4dUlDQWdJQ0FnSUNBdkx5QndZWFJvSUhkb2IzTmxJSEJ2YzJsMGFXOXVJR2x1SUhSb1pTQnVaWGNnYzNSeWFXNW5JR2x6SUhSb1pTQm1ZWEowYUdWemRDQm1jbTl0SUhSb1pTQnZjbWxuYVc1Y2JpQWdJQ0FnSUNBZ0x5OGdZVzVrSUdSdlpYTWdibTkwSUhCaGMzTWdkR2hsSUdKdmRXNWtjeUJ2WmlCMGFHVWdaR2xtWmlCbmNtRndhRnh1SUNBZ0lDQWdJQ0JwWmlBb0lXTmhia0ZrWkNCOGZDQW9ZMkZ1VW1WdGIzWmxJQ1ltSUdGa1pGQmhkR2d1Ym1WM1VHOXpJRHdnY21WdGIzWmxVR0YwYUM1dVpYZFFiM01wS1NCN1hHNGdJQ0FnSUNBZ0lDQWdZbUZ6WlZCaGRHZ2dQU0JqYkc5dVpWQmhkR2dvY21WdGIzWmxVR0YwYUNrN1hHNGdJQ0FnSUNBZ0lDQWdjMlZzWmk1d2RYTm9RMjl0Y0c5dVpXNTBLR0poYzJWUVlYUm9MbU52YlhCdmJtVnVkSE1zSUhWdVpHVm1hVzVsWkN3Z2RISjFaU2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ1ltRnpaVkJoZEdnZ1BTQmhaR1JRWVhSb095QWdJQzh2SUU1dklHNWxaV1FnZEc4Z1kyeHZibVVzSUhkbEozWmxJSEIxYkd4bFpDQnBkQ0JtY205dElIUm9aU0JzYVhOMFhHNGdJQ0FnSUNBZ0lDQWdZbUZ6WlZCaGRHZ3VibVYzVUc5ekt5czdYRzRnSUNBZ0lDQWdJQ0FnYzJWc1ppNXdkWE5vUTI5dGNHOXVaVzUwS0dKaGMyVlFZWFJvTG1OdmJYQnZibVZ1ZEhNc0lIUnlkV1VzSUhWdVpHVm1hVzVsWkNrN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J2YkdSUWIzTWdQU0J6Wld4bUxtVjRkSEpoWTNSRGIyMXRiMjRvWW1GelpWQmhkR2dzSUc1bGQxTjBjbWx1Wnl3Z2IyeGtVM1J5YVc1bkxDQmthV0ZuYjI1aGJGQmhkR2dwTzF4dVhHNGdJQ0FnSUNBZ0lDOHZJRWxtSUhkbElHaGhkbVVnYUdsMElIUm9aU0JsYm1RZ2IyWWdZbTkwYUNCemRISnBibWR6TENCMGFHVnVJSGRsSUdGeVpTQmtiMjVsWEc0Z0lDQWdJQ0FnSUdsbUlDaGlZWE5sVUdGMGFDNXVaWGRRYjNNZ0t5QXhJRDQ5SUc1bGQweGxiaUFtSmlCdmJHUlFiM01nS3lBeElENDlJRzlzWkV4bGJpa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJrYjI1bEtHSjFhV3hrVm1Gc2RXVnpLSE5sYkdZc0lHSmhjMlZRWVhSb0xtTnZiWEJ2Ym1WdWRITXNJRzVsZDFOMGNtbHVaeXdnYjJ4a1UzUnlhVzVuTENCelpXeG1MblZ6WlV4dmJtZGxjM1JVYjJ0bGJpa3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUM4dklFOTBhR1Z5ZDJselpTQjBjbUZqYXlCMGFHbHpJSEJoZEdnZ1lYTWdZU0J3YjNSbGJuUnBZV3dnWTJGdVpHbGtZWFJsSUdGdVpDQmpiMjUwYVc1MVpTNWNiaUFnSUNBZ0lDQWdJQ0JpWlhOMFVHRjBhRnRrYVdGbmIyNWhiRkJoZEdoZElEMGdZbUZ6WlZCaGRHZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWldScGRFeGxibWQwYUNzck8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklGQmxjbVp2Y20xeklIUm9aU0JzWlc1bmRHZ2diMllnWldScGRDQnBkR1Z5WVhScGIyNHVJRWx6SUdFZ1ltbDBJR1oxWjJ4NUlHRnpJSFJvYVhNZ2FHRnpJSFJ2SUhOMWNIQnZjblFnZEdobFhHNGdJQ0FnTHk4Z2MzbHVZeUJoYm1RZ1lYTjVibU1nYlc5a1pTQjNhR2xqYUNCcGN5QnVaWFpsY2lCbWRXNHVJRXh2YjNCeklHOTJaWElnWlhobFkwVmthWFJNWlc1bmRHZ2dkVzUwYVd3Z1lTQjJZV3gxWlZ4dUlDQWdJQzh2SUdseklIQnliMlIxWTJWa0xseHVJQ0FnSUdsbUlDaGpZV3hzWW1GamF5a2dlMXh1SUNBZ0lDQWdLR1oxYm1OMGFXOXVJR1Y0WldNb0tTQjdYRzRnSUNBZ0lDQWdJSE5sZEZScGJXVnZkWFFvWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVkdocGN5QnphRzkxYkdRZ2JtOTBJR2hoY0hCbGJpd2dZblYwSUhkbElIZGhiblFnZEc4Z1ltVWdjMkZtWlM1Y2JpQWdJQ0FnSUNBZ0lDQXZLaUJwYzNSaGJtSjFiQ0JwWjI1dmNtVWdibVY0ZENBcUwxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNobFpHbDBUR1Z1WjNSb0lENGdiV0Y0UldScGRFeGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR05oYkd4aVlXTnJLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tDRmxlR1ZqUldScGRFeGxibWQwYUNncEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGVHVmpLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlMQ0F3S1R0Y2JpQWdJQ0FnSUgwb0tTazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhkb2FXeGxJQ2hsWkdsMFRHVnVaM1JvSUR3OUlHMWhlRVZrYVhSTVpXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJSEpsZENBOUlHVjRaV05GWkdsMFRHVnVaM1JvS0NrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WlhRcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVYwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lIQjFjMmhEYjIxd2IyNWxiblFvWTI5dGNHOXVaVzUwY3l3Z1lXUmtaV1FzSUhKbGJXOTJaV1FwSUh0Y2JpQWdJQ0JzWlhRZ2JHRnpkQ0E5SUdOdmJYQnZibVZ1ZEhOYlkyOXRjRzl1Wlc1MGN5NXNaVzVuZEdnZ0xTQXhYVHRjYmlBZ0lDQnBaaUFvYkdGemRDQW1KaUJzWVhOMExtRmtaR1ZrSUQwOVBTQmhaR1JsWkNBbUppQnNZWE4wTG5KbGJXOTJaV1FnUFQwOUlISmxiVzkyWldRcElIdGNiaUFnSUNBZ0lDOHZJRmRsSUc1bFpXUWdkRzhnWTJ4dmJtVWdhR1Z5WlNCaGN5QjBhR1VnWTI5dGNHOXVaVzUwSUdOc2IyNWxJRzl3WlhKaGRHbHZiaUJwY3lCcWRYTjBYRzRnSUNBZ0lDQXZMeUJoY3lCemFHRnNiRzkzSUdGeWNtRjVJR05zYjI1bFhHNGdJQ0FnSUNCamIyMXdiMjVsYm5SelcyTnZiWEJ2Ym1WdWRITXViR1Z1WjNSb0lDMGdNVjBnUFNCN1kyOTFiblE2SUd4aGMzUXVZMjkxYm5RZ0t5QXhMQ0JoWkdSbFpEb2dZV1JrWldRc0lISmxiVzkyWldRNklISmxiVzkyWldRZ2ZUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnWTI5dGNHOXVaVzUwY3k1d2RYTm9LSHRqYjNWdWREb2dNU3dnWVdSa1pXUTZJR0ZrWkdWa0xDQnlaVzF2ZG1Wa09pQnlaVzF2ZG1Wa0lIMHBPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JpQWdaWGgwY21GamRFTnZiVzF2YmloaVlYTmxVR0YwYUN3Z2JtVjNVM1J5YVc1bkxDQnZiR1JUZEhKcGJtY3NJR1JwWVdkdmJtRnNVR0YwYUNrZ2UxeHVJQ0FnSUd4bGRDQnVaWGRNWlc0Z1BTQnVaWGRUZEhKcGJtY3ViR1Z1WjNSb0xGeHVJQ0FnSUNBZ0lDQnZiR1JNWlc0Z1BTQnZiR1JUZEhKcGJtY3ViR1Z1WjNSb0xGeHVJQ0FnSUNBZ0lDQnVaWGRRYjNNZ1BTQmlZWE5sVUdGMGFDNXVaWGRRYjNNc1hHNGdJQ0FnSUNBZ0lHOXNaRkJ2Y3lBOUlHNWxkMUJ2Y3lBdElHUnBZV2R2Ym1Gc1VHRjBhQ3hjYmx4dUlDQWdJQ0FnSUNCamIyMXRiMjVEYjNWdWRDQTlJREE3WEc0Z0lDQWdkMmhwYkdVZ0tHNWxkMUJ2Y3lBcklERWdQQ0J1WlhkTVpXNGdKaVlnYjJ4a1VHOXpJQ3NnTVNBOElHOXNaRXhsYmlBbUppQjBhR2x6TG1WeGRXRnNjeWh1WlhkVGRISnBibWRiYm1WM1VHOXpJQ3NnTVYwc0lHOXNaRk4wY21sdVoxdHZiR1JRYjNNZ0t5QXhYU2twSUh0Y2JpQWdJQ0FnSUc1bGQxQnZjeXNyTzF4dUlDQWdJQ0FnYjJ4a1VHOXpLeXM3WEc0Z0lDQWdJQ0JqYjIxdGIyNURiM1Z1ZENzck8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaGpiMjF0YjI1RGIzVnVkQ2tnZTF4dUlDQWdJQ0FnWW1GelpWQmhkR2d1WTI5dGNHOXVaVzUwY3k1d2RYTm9LSHRqYjNWdWREb2dZMjl0Ylc5dVEyOTFiblI5S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JpWVhObFVHRjBhQzV1WlhkUWIzTWdQU0J1WlhkUWIzTTdYRzRnSUNBZ2NtVjBkWEp1SUc5c1pGQnZjenRjYmlBZ2ZTeGNibHh1SUNCbGNYVmhiSE1vYkdWbWRDd2djbWxuYUhRcElIdGNiaUFnSUNCcFppQW9kR2hwY3k1dmNIUnBiMjV6TG1OdmJYQmhjbUYwYjNJcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbTl3ZEdsdmJuTXVZMjl0Y0dGeVlYUnZjaWhzWldaMExDQnlhV2RvZENrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnNaV1owSUQwOVBTQnlhV2RvZEZ4dUlDQWdJQ0FnSUNCOGZDQW9kR2hwY3k1dmNIUnBiMjV6TG1sbmJtOXlaVU5oYzJVZ0ppWWdiR1ZtZEM1MGIweHZkMlZ5UTJGelpTZ3BJRDA5UFNCeWFXZG9kQzUwYjB4dmQyVnlRMkZ6WlNncEtUdGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lISmxiVzkyWlVWdGNIUjVLR0Z5Y21GNUtTQjdYRzRnSUNBZ2JHVjBJSEpsZENBOUlGdGRPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dZWEp5WVhrdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJR2xtSUNoaGNuSmhlVnRwWFNrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFF1Y0hWemFDaGhjbkpoZVZ0cFhTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJSDBzWEc0Z0lHTmhjM1JKYm5CMWRDaDJZV3gxWlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIyWVd4MVpUdGNiaUFnZlN4Y2JpQWdkRzlyWlc1cGVtVW9kbUZzZFdVcElIdGNiaUFnSUNCeVpYUjFjbTRnZG1Gc2RXVXVjM0JzYVhRb0p5Y3BPMXh1SUNCOUxGeHVJQ0JxYjJsdUtHTm9ZWEp6S1NCN1hHNGdJQ0FnY21WMGRYSnVJR05vWVhKekxtcHZhVzRvSnljcE8xeHVJQ0I5WEc1OU8xeHVYRzVtZFc1amRHbHZiaUJpZFdsc1pGWmhiSFZsY3loa2FXWm1MQ0JqYjIxd2IyNWxiblJ6TENCdVpYZFRkSEpwYm1jc0lHOXNaRk4wY21sdVp5d2dkWE5sVEc5dVoyVnpkRlJ2YTJWdUtTQjdYRzRnSUd4bGRDQmpiMjF3YjI1bGJuUlFiM01nUFNBd0xGeHVJQ0FnSUNBZ1kyOXRjRzl1Wlc1MFRHVnVJRDBnWTI5dGNHOXVaVzUwY3k1c1pXNW5kR2dzWEc0Z0lDQWdJQ0J1WlhkUWIzTWdQU0F3TEZ4dUlDQWdJQ0FnYjJ4a1VHOXpJRDBnTUR0Y2JseHVJQ0JtYjNJZ0tEc2dZMjl0Y0c5dVpXNTBVRzl6SUR3Z1kyOXRjRzl1Wlc1MFRHVnVPeUJqYjIxd2IyNWxiblJRYjNNckt5a2dlMXh1SUNBZ0lHeGxkQ0JqYjIxd2IyNWxiblFnUFNCamIyMXdiMjVsYm5SelcyTnZiWEJ2Ym1WdWRGQnZjMTA3WEc0Z0lDQWdhV1lnS0NGamIyMXdiMjVsYm5RdWNtVnRiM1psWkNrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0ZqYjIxd2IyNWxiblF1WVdSa1pXUWdKaVlnZFhObFRHOXVaMlZ6ZEZSdmEyVnVLU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQjJZV3gxWlNBOUlHNWxkMU4wY21sdVp5NXpiR2xqWlNodVpYZFFiM01zSUc1bGQxQnZjeUFySUdOdmJYQnZibVZ1ZEM1amIzVnVkQ2s3WEc0Z0lDQWdJQ0FnSUhaaGJIVmxJRDBnZG1Gc2RXVXViV0Z3S0daMWJtTjBhVzl1S0haaGJIVmxMQ0JwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUc5c1pGWmhiSFZsSUQwZ2IyeGtVM1J5YVc1blcyOXNaRkJ2Y3lBcklHbGRPMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ2YkdSV1lXeDFaUzVzWlc1bmRHZ2dQaUIyWVd4MVpTNXNaVzVuZEdnZ1B5QnZiR1JXWVd4MVpTQTZJSFpoYkhWbE8xeHVJQ0FnSUNBZ0lDQjlLVHRjYmx4dUlDQWdJQ0FnSUNCamIyMXdiMjVsYm5RdWRtRnNkV1VnUFNCa2FXWm1MbXB2YVc0b2RtRnNkV1VwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnWTI5dGNHOXVaVzUwTG5aaGJIVmxJRDBnWkdsbVppNXFiMmx1S0c1bGQxTjBjbWx1Wnk1emJHbGpaU2h1WlhkUWIzTXNJRzVsZDFCdmN5QXJJR052YlhCdmJtVnVkQzVqYjNWdWRDa3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdibVYzVUc5eklDczlJR052YlhCdmJtVnVkQzVqYjNWdWREdGNibHh1SUNBZ0lDQWdMeThnUTI5dGJXOXVJR05oYzJWY2JpQWdJQ0FnSUdsbUlDZ2hZMjl0Y0c5dVpXNTBMbUZrWkdWa0tTQjdYRzRnSUNBZ0lDQWdJRzlzWkZCdmN5QXJQU0JqYjIxd2IyNWxiblF1WTI5MWJuUTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdOdmJYQnZibVZ1ZEM1MllXeDFaU0E5SUdScFptWXVhbTlwYmlodmJHUlRkSEpwYm1jdWMyeHBZMlVvYjJ4a1VHOXpMQ0J2YkdSUWIzTWdLeUJqYjIxd2IyNWxiblF1WTI5MWJuUXBLVHRjYmlBZ0lDQWdJRzlzWkZCdmN5QXJQU0JqYjIxd2IyNWxiblF1WTI5MWJuUTdYRzVjYmlBZ0lDQWdJQzh2SUZKbGRtVnljMlVnWVdSa0lHRnVaQ0J5WlcxdmRtVWdjMjhnY21WdGIzWmxjeUJoY21VZ2IzVjBjSFYwSUdacGNuTjBJSFJ2SUcxaGRHTm9JR052YlcxdmJpQmpiMjUyWlc1MGFXOXVYRzRnSUNBZ0lDQXZMeUJVYUdVZ1pHbG1abWx1WnlCaGJHZHZjbWwwYUcwZ2FYTWdkR2xsWkNCMGJ5QmhaR1FnZEdobGJpQnlaVzF2ZG1VZ2IzVjBjSFYwSUdGdVpDQjBhR2x6SUdseklIUm9aU0J6YVcxd2JHVnpkRnh1SUNBZ0lDQWdMeThnY205MWRHVWdkRzhnWjJWMElIUm9aU0JrWlhOcGNtVmtJRzkxZEhCMWRDQjNhWFJvSUcxcGJtbHRZV3dnYjNabGNtaGxZV1F1WEc0Z0lDQWdJQ0JwWmlBb1kyOXRjRzl1Wlc1MFVHOXpJQ1ltSUdOdmJYQnZibVZ1ZEhOYlkyOXRjRzl1Wlc1MFVHOXpJQzBnTVYwdVlXUmtaV1FwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJSFJ0Y0NBOUlHTnZiWEJ2Ym1WdWRITmJZMjl0Y0c5dVpXNTBVRzl6SUMwZ01WMDdYRzRnSUNBZ0lDQWdJR052YlhCdmJtVnVkSE5iWTI5dGNHOXVaVzUwVUc5eklDMGdNVjBnUFNCamIyMXdiMjVsYm5SelcyTnZiWEJ2Ym1WdWRGQnZjMTA3WEc0Z0lDQWdJQ0FnSUdOdmJYQnZibVZ1ZEhOYlkyOXRjRzl1Wlc1MFVHOXpYU0E5SUhSdGNEdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZMeUJUY0dWamFXRnNJR05oYzJVZ2FHRnVaR3hsSUdadmNpQjNhR1Z1SUc5dVpTQjBaWEp0YVc1aGJDQnBjeUJwWjI1dmNtVmtJQ2hwTG1VdUlIZG9hWFJsYzNCaFkyVXBMbHh1SUNBdkx5QkdiM0lnZEdocGN5QmpZWE5sSUhkbElHMWxjbWRsSUhSb1pTQjBaWEp0YVc1aGJDQnBiblJ2SUhSb1pTQndjbWx2Y2lCemRISnBibWNnWVc1a0lHUnliM0FnZEdobElHTm9ZVzVuWlM1Y2JpQWdMeThnVkdocGN5QnBjeUJ2Ym14NUlHRjJZV2xzWVdKc1pTQm1iM0lnYzNSeWFXNW5JRzF2WkdVdVhHNGdJR3hsZENCc1lYTjBRMjl0Y0c5dVpXNTBJRDBnWTI5dGNHOXVaVzUwYzF0amIyMXdiMjVsYm5STVpXNGdMU0F4WFR0Y2JpQWdhV1lnS0dOdmJYQnZibVZ1ZEV4bGJpQStJREZjYmlBZ0lDQWdJQ1ltSUhSNWNHVnZaaUJzWVhOMFEyOXRjRzl1Wlc1MExuWmhiSFZsSUQwOVBTQW5jM1J5YVc1bkoxeHVJQ0FnSUNBZ0ppWWdLR3hoYzNSRGIyMXdiMjVsYm5RdVlXUmtaV1FnZkh3Z2JHRnpkRU52YlhCdmJtVnVkQzV5WlcxdmRtVmtLVnh1SUNBZ0lDQWdKaVlnWkdsbVppNWxjWFZoYkhNb0p5Y3NJR3hoYzNSRGIyMXdiMjVsYm5RdWRtRnNkV1VwS1NCN1hHNGdJQ0FnWTI5dGNHOXVaVzUwYzF0amIyMXdiMjVsYm5STVpXNGdMU0F5WFM1MllXeDFaU0FyUFNCc1lYTjBRMjl0Y0c5dVpXNTBMblpoYkhWbE8xeHVJQ0FnSUdOdmJYQnZibVZ1ZEhNdWNHOXdLQ2s3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnWTI5dGNHOXVaVzUwY3p0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnWTJ4dmJtVlFZWFJvS0hCaGRHZ3BJSHRjYmlBZ2NtVjBkWEp1SUhzZ2JtVjNVRzl6T2lCd1lYUm9MbTVsZDFCdmN5d2dZMjl0Y0c5dVpXNTBjem9nY0dGMGFDNWpiMjF3YjI1bGJuUnpMbk5zYVdObEtEQXBJSDA3WEc1OVhHNGlYWDA9XG5cblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmNoYXJhY3RlckRpZmYgPSB1bmRlZmluZWQ7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkNoYXJzID0gZGlmZkNoYXJzO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Jhc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIGNoYXJhY3RlckRpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jaGFyYWN0ZXJEaWZmID0gbmV3IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZTJbJ2RlZmF1bHQnXSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLygpO1xuXHRmdW5jdGlvbiBkaWZmQ2hhcnMob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcblx0ICByZXR1cm4gY2hhcmFjdGVyRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlrYVdabUwyTm9ZWEpoWTNSbGNpNXFjeUpkTENKdVlXMWxjeUk2V3lKa2FXWm1RMmhoY25NaUxDSmphR0Z5WVdOMFpYSkVhV1ptSWl3aWIyeGtVM1J5SWl3aWJtVjNVM1J5SWl3aWIzQjBhVzl1Y3lJc0ltUnBabVlpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3WjBOQlIyZENRU3hUTEVkQlFVRkJMRk03TzBGQlNHaENPenM3T3pzN2RVSkJSVThzU1VGQlRVTXNlVVpCUVdkQ0xIZEZRVUYwUWp0QlFVTkJMRk5CUVZORUxGTkJRVlFzUTBGQmJVSkZMRTFCUVc1Q0xFVkJRVEpDUXl4TlFVRXpRaXhGUVVGdFEwTXNUMEZCYmtNc1JVRkJORU03UVVGQlJTeFRRVUZQU0N4alFVRmpTU3hKUVVGa0xFTkJRVzFDU0N4TlFVRnVRaXhGUVVFeVFrTXNUVUZCTTBJc1JVRkJiVU5ETEU5QlFXNURMRU5CUVZBN1FVRkJjVVFpTENKbWFXeGxJam9pWTJoaGNtRmpkR1Z5TG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElFUnBabVlnWm5KdmJTQW5MaTlpWVhObEp6dGNibHh1Wlhod2IzSjBJR052Ym5OMElHTm9ZWEpoWTNSbGNrUnBabVlnUFNCdVpYY2dSR2xtWmlncE8xeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUnBabVpEYUdGeWN5aHZiR1JUZEhJc0lHNWxkMU4wY2l3Z2IzQjBhVzl1Y3lrZ2V5QnlaWFIxY200Z1kyaGhjbUZqZEdWeVJHbG1aaTVrYVdabUtHOXNaRk4wY2l3Z2JtVjNVM1J5TENCdmNIUnBiMjV6S1RzZ2ZWeHVJbDE5XG5cblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLndvcmREaWZmID0gdW5kZWZpbmVkO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZXb3JkcyA9IGRpZmZXb3Jkcztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZldvcmRzV2l0aFNwYWNlID0gZGlmZldvcmRzV2l0aFNwYWNlO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Jhc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZSk7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19wYXJhbXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLy8gQmFzZWQgb24gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW5fc2NyaXB0X2luX1VuaWNvZGVcblx0Ly9cblx0Ly8gUmFuZ2VzIGFuZCBleGNlcHRpb25zOlxuXHQvLyBMYXRpbi0xIFN1cHBsZW1lbnQsIDAwODDigJMwMEZGXG5cdC8vICAtIFUrMDBENyAgw5cgTXVsdGlwbGljYXRpb24gc2lnblxuXHQvLyAgLSBVKzAwRjcgIMO3IERpdmlzaW9uIHNpZ25cblx0Ly8gTGF0aW4gRXh0ZW5kZWQtQSwgMDEwMOKAkzAxN0Zcblx0Ly8gTGF0aW4gRXh0ZW5kZWQtQiwgMDE4MOKAkzAyNEZcblx0Ly8gSVBBIEV4dGVuc2lvbnMsIDAyNTDigJMwMkFGXG5cdC8vIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycywgMDJCMOKAkzAyRkZcblx0Ly8gIC0gVSswMkM3ICDLhyAmIzcxMTsgIENhcm9uXG5cdC8vICAtIFUrMDJEOCAgy5ggJiM3Mjg7ICBCcmV2ZVxuXHQvLyAgLSBVKzAyRDkgIMuZICYjNzI5OyAgRG90IEFib3ZlXG5cdC8vICAtIFUrMDJEQSAgy5ogJiM3MzA7ICBSaW5nIEFib3ZlXG5cdC8vICAtIFUrMDJEQiAgy5sgJiM3MzE7ICBPZ29uZWtcblx0Ly8gIC0gVSswMkRDICDLnCAmIzczMjsgIFNtYWxsIFRpbGRlXG5cdC8vICAtIFUrMDJERCAgy50gJiM3MzM7ICBEb3VibGUgQWN1dGUgQWNjZW50XG5cdC8vIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwsIDFFMDDigJMxRUZGXG5cdHZhciBleHRlbmRlZFdvcmRDaGFycyA9IC9eW0EtWmEtelxceEMwLVxcdTAyQzZcXHUwMkM4LVxcdTAyRDdcXHUwMkRFLVxcdTAyRkZcXHUxRTAwLVxcdTFFRkZdKyQvO1xuXG5cdHZhciByZVdoaXRlc3BhY2UgPSAvXFxTLztcblxuXHR2YXIgd29yZERpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi93b3JkRGlmZiA9IG5ldyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UyWydkZWZhdWx0J10gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oKTtcblx0d29yZERpZmYuZXF1YWxzID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG5cdCAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVDYXNlKSB7XG5cdCAgICBsZWZ0ID0gbGVmdC50b0xvd2VyQ2FzZSgpO1xuXHQgICAgcmlnaHQgPSByaWdodC50b0xvd2VyQ2FzZSgpO1xuXHQgIH1cblx0ICByZXR1cm4gbGVmdCA9PT0gcmlnaHQgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UgJiYgIXJlV2hpdGVzcGFjZS50ZXN0KGxlZnQpICYmICFyZVdoaXRlc3BhY2UudGVzdChyaWdodCk7XG5cdH07XG5cdHdvcmREaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgdmFyIHRva2VucyA9IHZhbHVlLnNwbGl0KC8oXFxzK3xcXGIpLyk7XG5cblx0ICAvLyBKb2luIHRoZSBib3VuZGFyeSBzcGxpdHMgdGhhdCB3ZSBkbyBub3QgY29uc2lkZXIgdG8gYmUgYm91bmRhcmllcy4gVGhpcyBpcyBwcmltYXJpbHkgdGhlIGV4dGVuZGVkIExhdGluIGNoYXJhY3RlciBzZXQuXG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdCAgICAvLyBJZiB3ZSBoYXZlIGFuIGVtcHR5IHN0cmluZyBpbiB0aGUgbmV4dCBmaWVsZCBhbmQgd2UgaGF2ZSBvbmx5IHdvcmQgY2hhcnMgYmVmb3JlIGFuZCBhZnRlciwgbWVyZ2Vcblx0ICAgIGlmICghdG9rZW5zW2kgKyAxXSAmJiB0b2tlbnNbaSArIDJdICYmIGV4dGVuZGVkV29yZENoYXJzLnRlc3QodG9rZW5zW2ldKSAmJiBleHRlbmRlZFdvcmRDaGFycy50ZXN0KHRva2Vuc1tpICsgMl0pKSB7XG5cdCAgICAgIHRva2Vuc1tpXSArPSB0b2tlbnNbaSArIDJdO1xuXHQgICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAyKTtcblx0ICAgICAgaS0tO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiB0b2tlbnM7XG5cdH07XG5cblx0ZnVuY3Rpb24gZGlmZldvcmRzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKSB7XG5cdCAgb3B0aW9ucyA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX3BhcmFtcy5nZW5lcmF0ZU9wdGlvbnMpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKG9wdGlvbnMsIHsgaWdub3JlV2hpdGVzcGFjZTogdHJ1ZSB9KTtcblx0ICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG5cdH1cblxuXHRmdW5jdGlvbiBkaWZmV29yZHNXaXRoU3BhY2Uob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcblx0ICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5a2FXWm1MM2R2Y21RdWFuTWlYU3dpYm1GdFpYTWlPbHNpWkdsbVpsZHZjbVJ6SWl3aVpHbG1abGR2Y21SelYybDBhRk53WVdObElpd2laWGgwWlc1a1pXUlhiM0prUTJoaGNuTWlMQ0p5WlZkb2FYUmxjM0JoWTJVaUxDSjNiM0prUkdsbVppSXNJbVZ4ZFdGc2N5SXNJbXhsWm5RaUxDSnlhV2RvZENJc0ltOXdkR2x2Ym5NaUxDSnBaMjV2Y21WRFlYTmxJaXdpZEc5TWIzZGxja05oYzJVaUxDSnBaMjV2Y21WWGFHbDBaWE53WVdObElpd2lkR1Z6ZENJc0luUnZhMlZ1YVhwbElpd2lkbUZzZFdVaUxDSjBiMnRsYm5NaUxDSnpjR3hwZENJc0lta2lMQ0pzWlc1bmRHZ2lMQ0p6Y0d4cFkyVWlMQ0p2YkdSVGRISWlMQ0p1WlhkVGRISWlMQ0prYVdabUlsMHNJbTFoY0hCcGJtZHpJam9pT3pzN08yZERRVzFFWjBKQkxGTXNSMEZCUVVFc1V6dDVSRUZMUVVNc2EwSXNSMEZCUVVFc2EwSTdPMEZCZUVSb1FqczdPenQxUWtGRFFUczdPenQzUWtGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeEpRVUZOUXl4dlFrRkJiMElzSzBSQlFURkNPenRCUVVWQkxFbEJRVTFETEdWQlFXVXNTVUZCY2tJN08wRkJSVThzU1VGQlRVTXNLMFZCUVZjc2QwVkJRV3BDTzBGQlExQkJMRk5CUVZORExFMUJRVlFzUjBGQmEwSXNWVUZCVTBNc1NVRkJWQ3hGUVVGbFF5eExRVUZtTEVWQlFYTkNPMEZCUTNSRExFMUJRVWtzUzBGQlMwTXNUMEZCVEN4RFFVRmhReXhWUVVGcVFpeEZRVUUyUWp0QlFVTXpRa2dzVjBGQlQwRXNTMEZCUzBrc1YwRkJUQ3hGUVVGUU8wRkJRMEZJTEZsQlFWRkJMRTFCUVUxSExGZEJRVTRzUlVGQlVqdEJRVU5FTzBGQlEwUXNVMEZCVDBvc1UwRkJVME1zUzBGQlZDeEpRVUZ0UWl4TFFVRkxReXhQUVVGTUxFTkJRV0ZITEdkQ1FVRmlMRWxCUVdsRExFTkJRVU5TTEdGQlFXRlRMRWxCUVdJc1EwRkJhMEpPTEVsQlFXeENMRU5CUVd4RExFbEJRVFpFTEVOQlFVTklMR0ZCUVdGVExFbEJRV0lzUTBGQmEwSk1MRXRCUVd4Q0xFTkJRWGhHTzBGQlEwUXNRMEZPUkR0QlFVOUJTQ3hUUVVGVFV5eFJRVUZVTEVkQlFXOUNMRlZCUVZORExFdEJRVlFzUlVGQlowSTdRVUZEYkVNc1RVRkJTVU1zVTBGQlUwUXNUVUZCVFVVc1MwRkJUaXhEUVVGWkxGVkJRVm9zUTBGQllqczdRVUZGUVR0QlFVTkJMRTlCUVVzc1NVRkJTVU1zU1VGQlNTeERRVUZpTEVWQlFXZENRU3hKUVVGSlJpeFBRVUZQUnl4TlFVRlFMRWRCUVdkQ0xFTkJRWEJETEVWQlFYVkRSQ3hIUVVGMlF5eEZRVUUwUXp0QlFVTXhRenRCUVVOQkxGRkJRVWtzUTBGQlEwWXNUMEZCVDBVc1NVRkJTU3hEUVVGWUxFTkJRVVFzU1VGQmEwSkdMRTlCUVU5RkxFbEJRVWtzUTBGQldDeERRVUZzUWl4SlFVTkxaaXhyUWtGQmEwSlZMRWxCUVd4Q0xFTkJRWFZDUnl4UFFVRlBSU3hEUVVGUUxFTkJRWFpDTEVOQlJFd3NTVUZGUzJZc2EwSkJRV3RDVlN4SlFVRnNRaXhEUVVGMVFrY3NUMEZCVDBVc1NVRkJTU3hEUVVGWUxFTkJRWFpDTEVOQlJsUXNSVUZGWjBRN1FVRkRPVU5HTEdGQlFVOUZMRU5CUVZBc1MwRkJZVVlzVDBGQlQwVXNTVUZCU1N4RFFVRllMRU5CUVdJN1FVRkRRVVlzWVVGQlQwa3NUVUZCVUN4RFFVRmpSaXhKUVVGSkxFTkJRV3hDTEVWQlFYRkNMRU5CUVhKQ08wRkJRMEZCTzBGQlEwUTdRVUZEUmpzN1FVRkZSQ3hUUVVGUFJpeE5RVUZRTzBGQlEwUXNRMEZvUWtRN08wRkJhMEpQTEZOQlFWTm1MRk5CUVZRc1EwRkJiVUp2UWl4TlFVRnVRaXhGUVVFeVFrTXNUVUZCTTBJc1JVRkJiVU5pTEU5QlFXNURMRVZCUVRSRE8wRkJRMnBFUVN4WlFVRlZMRGhGUVVGblFrRXNUMEZCYUVJc1JVRkJlVUlzUlVGQlEwY3NhMEpCUVd0Q0xFbEJRVzVDTEVWQlFYcENMRU5CUVZZN1FVRkRRU3hUUVVGUFVDeFRRVUZUYTBJc1NVRkJWQ3hEUVVGalJpeE5RVUZrTEVWQlFYTkNReXhOUVVGMFFpeEZRVUU0UW1Jc1QwRkJPVUlzUTBGQlVEdEJRVU5FT3p0QlFVVk5MRk5CUVZOUUxHdENRVUZVTEVOQlFUUkNiVUlzVFVGQk5VSXNSVUZCYjBORExFMUJRWEJETEVWQlFUUkRZaXhQUVVFMVF5eEZRVUZ4UkR0QlFVTXhSQ3hUUVVGUFNpeFRRVUZUYTBJc1NVRkJWQ3hEUVVGalJpeE5RVUZrTEVWQlFYTkNReXhOUVVGMFFpeEZRVUU0UW1Jc1QwRkJPVUlzUTBGQlVEdEJRVU5FSWl3aVptbHNaU0k2SW5kdmNtUXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnUkdsbVppQm1jbTl0SUNjdUwySmhjMlVuTzF4dWFXMXdiM0owSUh0blpXNWxjbUYwWlU5d2RHbHZibk45SUdaeWIyMGdKeTR1TDNWMGFXd3ZjR0Z5WVcxekp6dGNibHh1THk4Z1FtRnpaV1FnYjI0Z2FIUjBjSE02THk5bGJpNTNhV3RwY0dWa2FXRXViM0puTDNkcGEya3ZUR0YwYVc1ZmMyTnlhWEIwWDJsdVgxVnVhV052WkdWY2JpOHZYRzR2THlCU1lXNW5aWE1nWVc1a0lHVjRZMlZ3ZEdsdmJuTTZYRzR2THlCTVlYUnBiaTB4SUZOMWNIQnNaVzFsYm5Rc0lEQXdPRERpZ0pNd01FWkdYRzR2THlBZ0xTQlZLekF3UkRjZ0lNT1hJRTExYkhScGNHeHBZMkYwYVc5dUlITnBaMjVjYmk4dklDQXRJRlVyTURCR055QWd3N2NnUkdsMmFYTnBiMjRnYzJsbmJseHVMeThnVEdGMGFXNGdSWGgwWlc1a1pXUXRRU3dnTURFd01PS0FrekF4TjBaY2JpOHZJRXhoZEdsdUlFVjRkR1Z1WkdWa0xVSXNJREF4T0REaWdKTXdNalJHWEc0dkx5QkpVRUVnUlhoMFpXNXphVzl1Y3l3Z01ESTFNT0tBa3pBeVFVWmNiaTh2SUZOd1lXTnBibWNnVFc5a2FXWnBaWElnVEdWMGRHVnljeXdnTURKQ01PS0FrekF5UmtaY2JpOHZJQ0F0SUZVck1ESkROeUFneTRjZ0ppTTNNVEU3SUNCRFlYSnZibHh1THk4Z0lDMGdWU3N3TWtRNElDRExtQ0FtSXpjeU9Ec2dJRUp5WlhabFhHNHZMeUFnTFNCVkt6QXlSRGtnSU11WklDWWpOekk1T3lBZ1JHOTBJRUZpYjNabFhHNHZMeUFnTFNCVkt6QXlSRUVnSU11YUlDWWpOek13T3lBZ1VtbHVaeUJCWW05MlpWeHVMeThnSUMwZ1ZTc3dNa1JDSUNETG15QW1JemN6TVRzZ0lFOW5iMjVsYTF4dUx5OGdJQzBnVlNzd01rUkRJQ0RMbkNBbUl6Y3pNanNnSUZOdFlXeHNJRlJwYkdSbFhHNHZMeUFnTFNCVkt6QXlSRVFnSU11ZElDWWpOek16T3lBZ1JHOTFZbXhsSUVGamRYUmxJRUZqWTJWdWRGeHVMeThnVEdGMGFXNGdSWGgwWlc1a1pXUWdRV1JrYVhScGIyNWhiQ3dnTVVVd01PS0FrekZGUmtaY2JtTnZibk4wSUdWNGRHVnVaR1ZrVjI5eVpFTm9ZWEp6SUQwZ0wxNWJZUzE2UVMxYVhGeDFlME13ZlMxY1hIVjdSa1o5WEZ4MWUwUTRmUzFjWEhWN1JqWjlYRngxZTBZNGZTMWNYSFY3TWtNMmZWeGNkWHN5UXpoOUxWeGNkWHN5UkRkOVhGeDFlekpFUlgwdFhGeDFlekpHUm4xY1hIVjdNVVV3TUgwdFhGeDFlekZGUmtaOVhTc2tMM1U3WEc1Y2JtTnZibk4wSUhKbFYyaHBkR1Z6Y0dGalpTQTlJQzljWEZNdk8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2QyOXlaRVJwWm1ZZ1BTQnVaWGNnUkdsbVppZ3BPMXh1ZDI5eVpFUnBabVl1WlhGMVlXeHpJRDBnWm5WdVkzUnBiMjRvYkdWbWRDd2djbWxuYUhRcElIdGNiaUFnYVdZZ0tIUm9hWE11YjNCMGFXOXVjeTVwWjI1dmNtVkRZWE5sS1NCN1hHNGdJQ0FnYkdWbWRDQTlJR3hsWm5RdWRHOU1iM2RsY2tOaGMyVW9LVHRjYmlBZ0lDQnlhV2RvZENBOUlISnBaMmgwTG5SdlRHOTNaWEpEWVhObEtDazdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHeGxablFnUFQwOUlISnBaMmgwSUh4OElDaDBhR2x6TG05d2RHbHZibk11YVdkdWIzSmxWMmhwZEdWemNHRmpaU0FtSmlBaGNtVlhhR2wwWlhOd1lXTmxMblJsYzNRb2JHVm1kQ2tnSmlZZ0lYSmxWMmhwZEdWemNHRmpaUzUwWlhOMEtISnBaMmgwS1NrN1hHNTlPMXh1ZDI5eVpFUnBabVl1ZEc5clpXNXBlbVVnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnNaWFFnZEc5clpXNXpJRDBnZG1Gc2RXVXVjM0JzYVhRb0x5aGNYSE1yZkZ4Y1lpa3ZLVHRjYmx4dUlDQXZMeUJLYjJsdUlIUm9aU0JpYjNWdVpHRnllU0J6Y0d4cGRITWdkR2hoZENCM1pTQmtieUJ1YjNRZ1kyOXVjMmxrWlhJZ2RHOGdZbVVnWW05MWJtUmhjbWxsY3k0Z1ZHaHBjeUJwY3lCd2NtbHRZWEpwYkhrZ2RHaGxJR1Y0ZEdWdVpHVmtJRXhoZEdsdUlHTm9ZWEpoWTNSbGNpQnpaWFF1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkRzlyWlc1ekxteGxibWQwYUNBdElERTdJR2tyS3lrZ2UxeHVJQ0FnSUM4dklFbG1JSGRsSUdoaGRtVWdZVzRnWlcxd2RIa2djM1J5YVc1bklHbHVJSFJvWlNCdVpYaDBJR1pwWld4a0lHRnVaQ0IzWlNCb1lYWmxJRzl1YkhrZ2QyOXlaQ0JqYUdGeWN5QmlaV1p2Y21VZ1lXNWtJR0ZtZEdWeUxDQnRaWEpuWlZ4dUlDQWdJR2xtSUNnaGRHOXJaVzV6VzJrZ0t5QXhYU0FtSmlCMGIydGxibk5iYVNBcklESmRYRzRnSUNBZ0lDQWdJQ0FnSmlZZ1pYaDBaVzVrWldSWGIzSmtRMmhoY25NdWRHVnpkQ2gwYjJ0bGJuTmJhVjBwWEc0Z0lDQWdJQ0FnSUNBZ0ppWWdaWGgwWlc1a1pXUlhiM0prUTJoaGNuTXVkR1Z6ZENoMGIydGxibk5iYVNBcklESmRLU2tnZTF4dUlDQWdJQ0FnZEc5clpXNXpXMmxkSUNzOUlIUnZhMlZ1YzF0cElDc2dNbDA3WEc0Z0lDQWdJQ0IwYjJ0bGJuTXVjM0JzYVdObEtHa2dLeUF4TENBeUtUdGNiaUFnSUNBZ0lHa3RMVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdkRzlyWlc1ek8xeHVmVHRjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdScFptWlhiM0prY3lodmJHUlRkSElzSUc1bGQxTjBjaXdnYjNCMGFXOXVjeWtnZTF4dUlDQnZjSFJwYjI1eklEMGdaMlZ1WlhKaGRHVlBjSFJwYjI1ektHOXdkR2x2Ym5Nc0lIdHBaMjV2Y21WWGFHbDBaWE53WVdObE9pQjBjblZsZlNrN1hHNGdJSEpsZEhWeWJpQjNiM0prUkdsbVppNWthV1ptS0c5c1pGTjBjaXdnYm1WM1UzUnlMQ0J2Y0hScGIyNXpLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUnBabVpYYjNKa2MxZHBkR2hUY0dGalpTaHZiR1JUZEhJc0lHNWxkMU4wY2l3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0J5WlhSMWNtNGdkMjl5WkVScFptWXVaR2xtWmlodmJHUlRkSElzSUc1bGQxTjBjaXdnYjNCMGFXOXVjeWs3WEc1OVhHNGlYWDA9XG5cblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2dlbmVyYXRlT3B0aW9ucyA9IGdlbmVyYXRlT3B0aW9ucztcblx0ZnVuY3Rpb24gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG5cdCAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICBkZWZhdWx0cy5jYWxsYmFjayA9IG9wdGlvbnM7XG5cdCAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG5cdCAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMpIHtcblx0ICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0ICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcblx0ICAgICAgICBkZWZhdWx0c1tuYW1lXSA9IG9wdGlvbnNbbmFtZV07XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdCAgcmV0dXJuIGRlZmF1bHRzO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OTFkR2xzTDNCaGNtRnRjeTVxY3lKZExDSnVZVzFsY3lJNld5Sm5aVzVsY21GMFpVOXdkR2x2Ym5NaUxDSnZjSFJwYjI1eklpd2laR1ZtWVhWc2RITWlMQ0pqWVd4c1ltRmpheUlzSW01aGJXVWlMQ0pvWVhOUGQyNVFjbTl3WlhKMGVTSmRMQ0p0WVhCd2FXNW5jeUk2SWpzN08yZERRVUZuUWtFc1pTeEhRVUZCUVN4bE8wRkJRVlFzVTBGQlUwRXNaVUZCVkN4RFFVRjVRa01zVDBGQmVrSXNSVUZCYTBORExGRkJRV3hETEVWQlFUUkRPMEZCUTJwRUxFMUJRVWtzVDBGQlQwUXNUMEZCVUN4TFFVRnRRaXhWUVVGMlFpeEZRVUZ0UXp0QlFVTnFRME1zWVVGQlUwTXNVVUZCVkN4SFFVRnZRa1lzVDBGQmNFSTdRVUZEUkN4SFFVWkVMRTFCUlU4c1NVRkJTVUVzVDBGQlNpeEZRVUZoTzBGQlEyeENMRk5CUVVzc1NVRkJTVWNzU1VGQlZDeEpRVUZwUWtnc1QwRkJha0lzUlVGQk1FSTdRVUZEZUVJN1FVRkRRU3hWUVVGSlFTeFJRVUZSU1N4alFVRlNMRU5CUVhWQ1JDeEpRVUYyUWl4RFFVRktMRVZCUVd0RE8wRkJRMmhEUml4cFFrRkJVMFVzU1VGQlZDeEpRVUZwUWtnc1VVRkJVVWNzU1VGQlVpeERRVUZxUWp0QlFVTkVPMEZCUTBZN1FVRkRSanRCUVVORUxGTkJRVTlHTEZGQlFWQTdRVUZEUkNJc0ltWnBiR1VpT2lKd1lYSmhiWE11YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1oyVnVaWEpoZEdWUGNIUnBiMjV6S0c5d2RHbHZibk1zSUdSbFptRjFiSFJ6S1NCN1hHNGdJR2xtSUNoMGVYQmxiMllnYjNCMGFXOXVjeUE5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lHUmxabUYxYkhSekxtTmhiR3hpWVdOcklEMGdiM0IwYVc5dWN6dGNiaUFnZlNCbGJITmxJR2xtSUNodmNIUnBiMjV6S1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYm1GdFpTQnBiaUJ2Y0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0F2S2lCcGMzUmhibUoxYkNCcFoyNXZjbVVnWld4elpTQXFMMXh1SUNBZ0lDQWdhV1lnS0c5d2RHbHZibk11YUdGelQzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdaR1ZtWVhWc2RITmJibUZ0WlYwZ1BTQnZjSFJwYjI1elcyNWhiV1ZkTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdaR1ZtWVhWc2RITTdYRzU5WEc0aVhYMD1cblxuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMubGluZURpZmYgPSB1bmRlZmluZWQ7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkxpbmVzID0gZGlmZkxpbmVzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmVHJpbW1lZExpbmVzID0gZGlmZlRyaW1tZWRMaW5lcztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fcGFyYW1zID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIGxpbmVEaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovbGluZURpZmYgPSBuZXcgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCk7XG5cdGxpbmVEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgdmFyIHJldExpbmVzID0gW10sXG5cdCAgICAgIGxpbmVzQW5kTmV3bGluZXMgPSB2YWx1ZS5zcGxpdCgvKFxcbnxcXHJcXG4pLyk7XG5cblx0ICAvLyBJZ25vcmUgdGhlIGZpbmFsIGVtcHR5IHRva2VuIHRoYXQgb2NjdXJzIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGEgbmV3IGxpbmVcblx0ICBpZiAoIWxpbmVzQW5kTmV3bGluZXNbbGluZXNBbmROZXdsaW5lcy5sZW5ndGggLSAxXSkge1xuXHQgICAgbGluZXNBbmROZXdsaW5lcy5wb3AoKTtcblx0ICB9XG5cblx0ICAvLyBNZXJnZSB0aGUgY29udGVudCBhbmQgbGluZSBzZXBhcmF0b3JzIGludG8gc2luZ2xlIHRva2Vuc1xuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXNBbmROZXdsaW5lcy5sZW5ndGg7IGkrKykge1xuXHQgICAgdmFyIGxpbmUgPSBsaW5lc0FuZE5ld2xpbmVzW2ldO1xuXG5cdCAgICBpZiAoaSAlIDIgJiYgIXRoaXMub3B0aW9ucy5uZXdsaW5lSXNUb2tlbikge1xuXHQgICAgICByZXRMaW5lc1tyZXRMaW5lcy5sZW5ndGggLSAxXSArPSBsaW5lO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVXaGl0ZXNwYWNlKSB7XG5cdCAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldExpbmVzLnB1c2gobGluZSk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHJldExpbmVzO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGRpZmZMaW5lcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcblx0ICByZXR1cm4gbGluZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xuXHR9XG5cdGZ1bmN0aW9uIGRpZmZUcmltbWVkTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG5cdCAgdmFyIG9wdGlvbnMgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9wYXJhbXMuZ2VuZXJhdGVPcHRpb25zKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyhjYWxsYmFjaywgeyBpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlIH0pO1xuXHQgIHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlrYVdabUwyeHBibVV1YW5NaVhTd2libUZ0WlhNaU9sc2laR2xtWmt4cGJtVnpJaXdpWkdsbVpsUnlhVzF0WldSTWFXNWxjeUlzSW14cGJtVkVhV1ptSWl3aWRHOXJaVzVwZW1VaUxDSjJZV3gxWlNJc0luSmxkRXhwYm1Weklpd2liR2x1WlhOQmJtUk9aWGRzYVc1bGN5SXNJbk53YkdsMElpd2liR1Z1WjNSb0lpd2ljRzl3SWl3aWFTSXNJbXhwYm1VaUxDSnZjSFJwYjI1eklpd2libVYzYkdsdVpVbHpWRzlyWlc0aUxDSnBaMjV2Y21WWGFHbDBaWE53WVdObElpd2lkSEpwYlNJc0luQjFjMmdpTENKdmJHUlRkSElpTENKdVpYZFRkSElpTENKallXeHNZbUZqYXlJc0ltUnBabVlpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3WjBOQk9FSm5Ra0VzVXl4SFFVRkJRU3hUTzNsRVFVTkJReXhuUWl4SFFVRkJRU3huUWpzN1FVRXZRbWhDT3pzN08zVkNRVU5CT3pzN08zVkNRVVZQTEVsQlFVMURMQ3RGUVVGWExIZEZRVUZxUWp0QlFVTlFRU3hUUVVGVFF5eFJRVUZVTEVkQlFXOUNMRlZCUVZORExFdEJRVlFzUlVGQlowSTdRVUZEYkVNc1RVRkJTVU1zVjBGQlZ5eEZRVUZtTzBGQlFVRXNUVUZEU1VNc2JVSkJRVzFDUml4TlFVRk5SeXhMUVVGT0xFTkJRVmtzVjBGQldpeERRVVIyUWpzN1FVRkhRVHRCUVVOQkxFMUJRVWtzUTBGQlEwUXNhVUpCUVdsQ1FTeHBRa0ZCYVVKRkxFMUJRV3BDTEVkQlFUQkNMRU5CUVRORExFTkJRVXdzUlVGQmIwUTdRVUZEYkVSR0xIRkNRVUZwUWtjc1IwRkJha0k3UVVGRFJEczdRVUZGUkR0QlFVTkJMRTlCUVVzc1NVRkJTVU1zU1VGQlNTeERRVUZpTEVWQlFXZENRU3hKUVVGSlNpeHBRa0ZCYVVKRkxFMUJRWEpETEVWQlFUWkRSU3hIUVVFM1F5eEZRVUZyUkR0QlFVTm9SQ3hSUVVGSlF5eFBRVUZQVEN4cFFrRkJhVUpKTEVOQlFXcENMRU5CUVZnN08wRkJSVUVzVVVGQlNVRXNTVUZCU1N4RFFVRktMRWxCUVZNc1EwRkJReXhMUVVGTFJTeFBRVUZNTEVOQlFXRkRMR05CUVROQ0xFVkJRVEpETzBGQlEzcERVaXhsUVVGVFFTeFRRVUZUUnl4TlFVRlVMRWRCUVd0Q0xFTkJRVE5DTEV0QlFXbERSeXhKUVVGcVF6dEJRVU5FTEV0QlJrUXNUVUZGVHp0QlFVTk1MRlZCUVVrc1MwRkJTME1zVDBGQlRDeERRVUZoUlN4blFrRkJha0lzUlVGQmJVTTdRVUZEYWtOSUxHVkJRVTlCTEV0QlFVdEpMRWxCUVV3c1JVRkJVRHRCUVVORU8wRkJRMFJXTEdWQlFWTlhMRWxCUVZRc1EwRkJZMHdzU1VGQlpEdEJRVU5FTzBGQlEwWTdPMEZCUlVRc1UwRkJUMDRzVVVGQlVEdEJRVU5FTEVOQmVFSkVPenRCUVRCQ1R5eFRRVUZUVEN4VFFVRlVMRU5CUVcxQ2FVSXNUVUZCYmtJc1JVRkJNa0pETEUxQlFUTkNMRVZCUVcxRFF5eFJRVUZ1UXl4RlFVRTJRenRCUVVGRkxGTkJRVTlxUWl4VFFVRlRhMElzU1VGQlZDeERRVUZqU0N4TlFVRmtMRVZCUVhOQ1F5eE5RVUYwUWl4RlFVRTRRa01zVVVGQk9VSXNRMEZCVUR0QlFVRnBSRHRCUVVOb1J5eFRRVUZUYkVJc1owSkJRVlFzUTBGQk1FSm5RaXhOUVVFeFFpeEZRVUZyUTBNc1RVRkJiRU1zUlVGQk1FTkRMRkZCUVRGRExFVkJRVzlFTzBGQlEzcEVMRTFCUVVsUUxGVkJRVlVzT0VWQlFXZENUeXhSUVVGb1FpeEZRVUV3UWl4RlFVRkRUQ3hyUWtGQmEwSXNTVUZCYmtJc1JVRkJNVUlzUTBGQlpEdEJRVU5CTEZOQlFVOWFMRk5CUVZOclFpeEpRVUZVTEVOQlFXTklMRTFCUVdRc1JVRkJjMEpETEUxQlFYUkNMRVZCUVRoQ1RpeFBRVUU1UWl4RFFVRlFPMEZCUTBRaUxDSm1hV3hsSWpvaWJHbHVaUzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCRWFXWm1JR1p5YjIwZ0p5NHZZbUZ6WlNjN1hHNXBiWEJ2Y25RZ2UyZGxibVZ5WVhSbFQzQjBhVzl1YzMwZ1puSnZiU0FuTGk0dmRYUnBiQzl3WVhKaGJYTW5PMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdiR2x1WlVScFptWWdQU0J1WlhjZ1JHbG1aaWdwTzF4dWJHbHVaVVJwWm1ZdWRHOXJaVzVwZW1VZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0JzWlhRZ2NtVjBUR2x1WlhNZ1BTQmJYU3hjYmlBZ0lDQWdJR3hwYm1WelFXNWtUbVYzYkdsdVpYTWdQU0IyWVd4MVpTNXpjR3hwZENndktGeGNibnhjWEhKY1hHNHBMeWs3WEc1Y2JpQWdMeThnU1dkdWIzSmxJSFJvWlNCbWFXNWhiQ0JsYlhCMGVTQjBiMnRsYmlCMGFHRjBJRzlqWTNWeWN5QnBaaUIwYUdVZ2MzUnlhVzVuSUdWdVpITWdkMmwwYUNCaElHNWxkeUJzYVc1bFhHNGdJR2xtSUNnaGJHbHVaWE5CYm1ST1pYZHNhVzVsYzF0c2FXNWxjMEZ1WkU1bGQyeHBibVZ6TG14bGJtZDBhQ0F0SURGZEtTQjdYRzRnSUNBZ2JHbHVaWE5CYm1ST1pYZHNhVzVsY3k1d2IzQW9LVHRjYmlBZ2ZWeHVYRzRnSUM4dklFMWxjbWRsSUhSb1pTQmpiMjUwWlc1MElHRnVaQ0JzYVc1bElITmxjR0Z5WVhSdmNuTWdhVzUwYnlCemFXNW5iR1VnZEc5clpXNXpYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JHbHVaWE5CYm1ST1pYZHNhVzVsY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHeGxkQ0JzYVc1bElEMGdiR2x1WlhOQmJtUk9aWGRzYVc1bGMxdHBYVHRjYmx4dUlDQWdJR2xtSUNocElDVWdNaUFtSmlBaGRHaHBjeTV2Y0hScGIyNXpMbTVsZDJ4cGJtVkpjMVJ2YTJWdUtTQjdYRzRnSUNBZ0lDQnlaWFJNYVc1bGMxdHlaWFJNYVc1bGN5NXNaVzVuZEdnZ0xTQXhYU0FyUFNCc2FXNWxPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1dmNIUnBiMjV6TG1sbmJtOXlaVmRvYVhSbGMzQmhZMlVwSUh0Y2JpQWdJQ0FnSUNBZ2JHbHVaU0E5SUd4cGJtVXVkSEpwYlNncE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2NtVjBUR2x1WlhNdWNIVnphQ2hzYVc1bEtUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2NtVjBUR2x1WlhNN1hHNTlPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWkdsbVpreHBibVZ6S0c5c1pGTjBjaXdnYm1WM1UzUnlMQ0JqWVd4c1ltRmpheWtnZXlCeVpYUjFjbTRnYkdsdVpVUnBabVl1WkdsbVppaHZiR1JUZEhJc0lHNWxkMU4wY2l3Z1kyRnNiR0poWTJzcE95QjlYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaR2xtWmxSeWFXMXRaV1JNYVc1bGN5aHZiR1JUZEhJc0lHNWxkMU4wY2l3Z1kyRnNiR0poWTJzcElIdGNiaUFnYkdWMElHOXdkR2x2Ym5NZ1BTQm5aVzVsY21GMFpVOXdkR2x2Ym5Nb1kyRnNiR0poWTJzc0lIdHBaMjV2Y21WWGFHbDBaWE53WVdObE9pQjBjblZsZlNrN1hHNGdJSEpsZEhWeWJpQnNhVzVsUkdsbVppNWthV1ptS0c5c1pGTjBjaXdnYm1WM1UzUnlMQ0J2Y0hScGIyNXpLVHRjYm4xY2JpSmRmUT09XG5cblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLnNlbnRlbmNlRGlmZiA9IHVuZGVmaW5lZDtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmU2VudGVuY2VzID0gZGlmZlNlbnRlbmNlcztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciBzZW50ZW5jZURpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9zZW50ZW5jZURpZmYgPSBuZXcgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCk7XG5cdHNlbnRlbmNlRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgIHJldHVybiB2YWx1ZS5zcGxpdCgvKFxcUy4rP1suIT9dKSg/PVxccyt8JCkvKTtcblx0fTtcblxuXHRmdW5jdGlvbiBkaWZmU2VudGVuY2VzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuXHQgIHJldHVybiBzZW50ZW5jZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDNObGJuUmxibU5sTG1weklsMHNJbTVoYldWeklqcGJJbVJwWm1aVFpXNTBaVzVqWlhNaUxDSnpaVzUwWlc1alpVUnBabVlpTENKMGIydGxibWw2WlNJc0luWmhiSFZsSWl3aWMzQnNhWFFpTENKdmJHUlRkSElpTENKdVpYZFRkSElpTENKallXeHNZbUZqYXlJc0ltUnBabVlpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3WjBOQlVXZENRU3hoTEVkQlFVRkJMR0U3TzBGQlVtaENPenM3T3pzN2RVSkJSMDhzU1VGQlRVTXNkVVpCUVdVc2QwVkJRWEpDTzBGQlExQkJMR0ZCUVdGRExGRkJRV0lzUjBGQmQwSXNWVUZCVTBNc1MwRkJWQ3hGUVVGblFqdEJRVU4wUXl4VFFVRlBRU3hOUVVGTlF5eExRVUZPTEVOQlFWa3NkVUpCUVZvc1EwRkJVRHRCUVVORUxFTkJSa1E3TzBGQlNVOHNVMEZCVTBvc1lVRkJWQ3hEUVVGMVFrc3NUVUZCZGtJc1JVRkJLMEpETEUxQlFTOUNMRVZCUVhWRFF5eFJRVUYyUXl4RlFVRnBSRHRCUVVGRkxGTkJRVTlPTEdGQlFXRlBMRWxCUVdJc1EwRkJhMEpJTEUxQlFXeENMRVZCUVRCQ1F5eE5RVUV4UWl4RlFVRnJRME1zVVVGQmJFTXNRMEZCVUR0QlFVRnhSQ0lzSW1acGJHVWlPaUp6Wlc1MFpXNWpaUzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCRWFXWm1JR1p5YjIwZ0p5NHZZbUZ6WlNjN1hHNWNibHh1Wlhod2IzSjBJR052Ym5OMElITmxiblJsYm1ObFJHbG1aaUE5SUc1bGR5QkVhV1ptS0NrN1hHNXpaVzUwWlc1alpVUnBabVl1ZEc5clpXNXBlbVVnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2RtRnNkV1V1YzNCc2FYUW9MeWhjWEZNdUt6OWJMaUUvWFNrb1B6MWNYSE1yZkNRcEx5azdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pHbG1abE5sYm5SbGJtTmxjeWh2YkdSVGRISXNJRzVsZDFOMGNpd2dZMkZzYkdKaFkyc3BJSHNnY21WMGRYSnVJSE5sYm5SbGJtTmxSR2xtWmk1a2FXWm1LRzlzWkZOMGNpd2dibVYzVTNSeUxDQmpZV3hzWW1GamF5azdJSDFjYmlKZGZRPT1cblxuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuY3NzRGlmZiA9IHVuZGVmaW5lZDtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmQ3NzID0gZGlmZkNzcztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciBjc3NEaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY3NzRGlmZiA9IG5ldyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UyWydkZWZhdWx0J10gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oKTtcblx0Y3NzRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgIHJldHVybiB2YWx1ZS5zcGxpdCgvKFt7fTo7LF18XFxzKykvKTtcblx0fTtcblxuXHRmdW5jdGlvbiBkaWZmQ3NzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuXHQgIHJldHVybiBjc3NEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlrYVdabUwyTnpjeTVxY3lKZExDSnVZVzFsY3lJNld5SmthV1ptUTNOeklpd2lZM056UkdsbVppSXNJblJ2YTJWdWFYcGxJaXdpZG1Gc2RXVWlMQ0p6Y0d4cGRDSXNJbTlzWkZOMGNpSXNJbTVsZDFOMGNpSXNJbU5oYkd4aVlXTnJJaXdpWkdsbVppSmRMQ0p0WVhCd2FXNW5jeUk2SWpzN096dG5RMEZQWjBKQkxFOHNSMEZCUVVFc1R6czdRVUZRYUVJN096czdPenQxUWtGRlR5eEpRVUZOUXl3MlJVRkJWU3gzUlVGQmFFSTdRVUZEVUVFc1VVRkJVVU1zVVVGQlVpeEhRVUZ0UWl4VlFVRlRReXhMUVVGVUxFVkJRV2RDTzBGQlEycERMRk5CUVU5QkxFMUJRVTFETEV0QlFVNHNRMEZCV1N4bFFVRmFMRU5CUVZBN1FVRkRSQ3hEUVVaRU96dEJRVWxQTEZOQlFWTktMRTlCUVZRc1EwRkJhVUpMTEUxQlFXcENMRVZCUVhsQ1F5eE5RVUY2UWl4RlFVRnBRME1zVVVGQmFrTXNSVUZCTWtNN1FVRkJSU3hUUVVGUFRpeFJRVUZSVHl4SlFVRlNMRU5CUVdGSUxFMUJRV0lzUlVGQmNVSkRMRTFCUVhKQ0xFVkJRVFpDUXl4UlFVRTNRaXhEUVVGUU8wRkJRV2RFSWl3aVptbHNaU0k2SW1OemN5NXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JFYVdabUlHWnliMjBnSnk0dlltRnpaU2M3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JqYzNORWFXWm1JRDBnYm1WM0lFUnBabVlvS1R0Y2JtTnpjMFJwWm1ZdWRHOXJaVzVwZW1VZ1BTQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0J5WlhSMWNtNGdkbUZzZFdVdWMzQnNhWFFvTHloYmUzMDZPeXhkZkZ4Y2N5c3BMeWs3WEc1OU8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaR2xtWmtOemN5aHZiR1JUZEhJc0lHNWxkMU4wY2l3Z1kyRnNiR0poWTJzcElIc2djbVYwZFhKdUlHTnpjMFJwWm1ZdVpHbG1aaWh2YkdSVGRISXNJRzVsZDFOMGNpd2dZMkZzYkdKaFkyc3BPeUI5WEc0aVhYMD1cblxuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuanNvbkRpZmYgPSB1bmRlZmluZWQ7XG5cblx0dmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkpzb24gPSBkaWZmSnNvbjtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY2Fub25pY2FsaXplID0gY2Fub25pY2FsaXplO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Jhc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZSk7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19saW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIG9iamVjdFByb3RvdHlwZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuXHR2YXIganNvbkRpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9qc29uRGlmZiA9IG5ldyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UyWydkZWZhdWx0J10gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oKTtcblx0Ly8gRGlzY3JpbWluYXRlIGJldHdlZW4gdHdvIGxpbmVzIG9mIHByZXR0eS1wcmludGVkLCBzZXJpYWxpemVkIEpTT04gd2hlcmUgb25lIG9mIHRoZW0gaGFzIGFcblx0Ly8gZGFuZ2xpbmcgY29tbWEgYW5kIHRoZSBvdGhlciBkb2Vzbid0LiBUdXJucyBvdXQgaW5jbHVkaW5nIHRoZSBkYW5nbGluZyBjb21tYSB5aWVsZHMgdGhlIG5pY2VzdCBvdXRwdXQ6XG5cdGpzb25EaWZmLnVzZUxvbmdlc3RUb2tlbiA9IHRydWU7XG5cblx0anNvbkRpZmYudG9rZW5pemUgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2xpbmUubGluZURpZmYgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8udG9rZW5pemU7XG5cdGpzb25EaWZmLmNhc3RJbnB1dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi91bmRlZmluZWRSZXBsYWNlbWVudCA9IHRoaXMub3B0aW9ucy51bmRlZmluZWRSZXBsYWNlbWVudDtcblxuXG5cdCAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KGNhbm9uaWNhbGl6ZSh2YWx1ZSksIGZ1bmN0aW9uIChrLCB2KSB7XG5cdCAgICBpZiAodHlwZW9mIHYgPT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICAgIHJldHVybiB1bmRlZmluZWRSZXBsYWNlbWVudDtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHY7XG5cdCAgfSwgJyAgJyk7XG5cdH07XG5cdGpzb25EaWZmLmVxdWFscyA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuXHQgIHJldHVybiAoLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLnByb3RvdHlwZS5lcXVhbHMuY2FsbChqc29uRGlmZiwgbGVmdC5yZXBsYWNlKC8sKFtcXHJcXG5dKS9nLCAnJDEnKSwgcmlnaHQucmVwbGFjZSgvLChbXFxyXFxuXSkvZywgJyQxJykpXG5cdCAgKTtcblx0fTtcblxuXHRmdW5jdGlvbiBkaWZmSnNvbihvbGRPYmosIG5ld09iaiwgb3B0aW9ucykge1xuXHQgIHJldHVybiBqc29uRGlmZi5kaWZmKG9sZE9iaiwgbmV3T2JqLCBvcHRpb25zKTtcblx0fVxuXG5cdC8vIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcHJlc2VuY2Ugb2YgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBiYWlsaW5nIG91dCB3aGVuIGVuY291bnRlcmluZyBhblxuXHQvLyBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBcInN0YWNrXCIgb2YgaXRlbXMgYmVpbmcgcHJvY2Vzc2VkLlxuXHRmdW5jdGlvbiBjYW5vbmljYWxpemUob2JqLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaykge1xuXHQgIHN0YWNrID0gc3RhY2sgfHwgW107XG5cdCAgcmVwbGFjZW1lbnRTdGFjayA9IHJlcGxhY2VtZW50U3RhY2sgfHwgW107XG5cblx0ICB2YXIgaSA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0ICBmb3IgKGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpICs9IDEpIHtcblx0ICAgIGlmIChzdGFja1tpXSA9PT0gb2JqKSB7XG5cdCAgICAgIHJldHVybiByZXBsYWNlbWVudFN0YWNrW2ldO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHZhciBjYW5vbmljYWxpemVkT2JqID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZvaWQgMCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQgIGlmICgnW29iamVjdCBBcnJheV0nID09PSBvYmplY3RQcm90b3R5cGVUb1N0cmluZy5jYWxsKG9iaikpIHtcblx0ICAgIHN0YWNrLnB1c2gob2JqKTtcblx0ICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBuZXcgQXJyYXkob2JqLmxlbmd0aCk7XG5cdCAgICByZXBsYWNlbWVudFN0YWNrLnB1c2goY2Fub25pY2FsaXplZE9iaik7XG5cdCAgICBmb3IgKGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSArPSAxKSB7XG5cdCAgICAgIGNhbm9uaWNhbGl6ZWRPYmpbaV0gPSBjYW5vbmljYWxpemUob2JqW2ldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjayk7XG5cdCAgICB9XG5cdCAgICBzdGFjay5wb3AoKTtcblx0ICAgIHJlcGxhY2VtZW50U3RhY2sucG9wKCk7XG5cdCAgICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcblx0ICB9XG5cblx0ICBpZiAob2JqICYmIG9iai50b0pTT04pIHtcblx0ICAgIG9iaiA9IG9iai50b0pTT04oKTtcblx0ICB9XG5cblx0ICBpZiAoIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8odHlwZW9mIC8qaXN0YW5idWwgaWdub3JlIGVuZCovb2JqID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihvYmopKSA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSB7XG5cdCAgICBzdGFjay5wdXNoKG9iaik7XG5cdCAgICBjYW5vbmljYWxpemVkT2JqID0ge307XG5cdCAgICByZXBsYWNlbWVudFN0YWNrLnB1c2goY2Fub25pY2FsaXplZE9iaik7XG5cdCAgICB2YXIgc29ydGVkS2V5cyA9IFtdLFxuXHQgICAgICAgIGtleSA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cdCAgICBmb3IgKGtleSBpbiBvYmopIHtcblx0ICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0ICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdCAgICAgICAgc29ydGVkS2V5cy5wdXNoKGtleSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHNvcnRlZEtleXMuc29ydCgpO1xuXHQgICAgZm9yIChpID0gMDsgaSA8IHNvcnRlZEtleXMubGVuZ3RoOyBpICs9IDEpIHtcblx0ICAgICAga2V5ID0gc29ydGVkS2V5c1tpXTtcblx0ICAgICAgY2Fub25pY2FsaXplZE9ialtrZXldID0gY2Fub25pY2FsaXplKG9ialtrZXldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjayk7XG5cdCAgICB9XG5cdCAgICBzdGFjay5wb3AoKTtcblx0ICAgIHJlcGxhY2VtZW50U3RhY2sucG9wKCk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBvYmo7XG5cdCAgfVxuXHQgIHJldHVybiBjYW5vbmljYWxpemVkT2JqO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDJwemIyNHVhbk1pWFN3aWJtRnRaWE1pT2xzaVpHbG1aa3B6YjI0aUxDSmpZVzV2Ym1sallXeHBlbVVpTENKdlltcGxZM1JRY205MGIzUjVjR1ZVYjFOMGNtbHVaeUlzSWs5aWFtVmpkQ0lzSW5CeWIzUnZkSGx3WlNJc0luUnZVM1J5YVc1bklpd2lhbk52YmtScFptWWlMQ0oxYzJWTWIyNW5aWE4wVkc5clpXNGlMQ0owYjJ0bGJtbDZaU0lzSW1OaGMzUkpibkIxZENJc0luWmhiSFZsSWl3aWRXNWtaV1pwYm1Wa1VtVndiR0ZqWlcxbGJuUWlMQ0p2Y0hScGIyNXpJaXdpU2xOUFRpSXNJbk4wY21sdVoybG1lU0lzSW1zaUxDSjJJaXdpWlhGMVlXeHpJaXdpYkdWbWRDSXNJbkpwWjJoMElpd2lZMkZzYkNJc0luSmxjR3hoWTJVaUxDSnZiR1JQWW1vaUxDSnVaWGRQWW1vaUxDSmthV1ptSWl3aWIySnFJaXdpYzNSaFkyc2lMQ0p5WlhCc1lXTmxiV1Z1ZEZOMFlXTnJJaXdpYVNJc0lteGxibWQwYUNJc0ltTmhibTl1YVdOaGJHbDZaV1JQWW1vaUxDSndkWE5vSWl3aVFYSnlZWGtpTENKd2IzQWlMQ0owYjBwVFQwNGlMQ0p6YjNKMFpXUkxaWGx6SWl3aWEyVjVJaXdpYUdGelQzZHVVSEp2Y0dWeWRIa2lMQ0p6YjNKMElsMHNJbTFoY0hCcGJtZHpJam9pT3pzN096czdPMmREUVRKQ1owSkJMRkVzUjBGQlFVRXNVVHQ1UkVGSlFVTXNXU3hIUVVGQlFTeFpPenRCUVM5Q2FFSTdPenM3ZFVKQlEwRTdPenM3ZFVKQlJVRXNTVUZCVFVNc01FSkJRVEJDUXl4UFFVRlBReXhUUVVGUUxFTkJRV2xDUXl4UlFVRnFSRHM3UVVGSFR5eEpRVUZOUXl3clJVRkJWeXgzUlVGQmFrSTdRVUZEVUR0QlFVTkJPMEZCUTBGQkxGTkJRVk5ETEdWQlFWUXNSMEZCTWtJc1NVRkJNMEk3TzBGQlJVRkVMRk5CUVZORkxGRkJRVlFzUjBGQmIwSXNaMFZCUVZOQkxGRkJRVGRDTzBGQlEwRkdMRk5CUVZOSExGTkJRVlFzUjBGQmNVSXNWVUZCVTBNc1MwRkJWQ3hGUVVGblFqdEJRVUZCTEhORVFVTTFRa01zYjBKQlJEUkNMRWRCUTBvc1MwRkJTME1zVDBGRVJDeERRVU0xUWtRc2IwSkJSRFJDT3pzN1FVRkhia01zVTBGQlR5eFBRVUZQUkN4TFFVRlFMRXRCUVdsQ0xGRkJRV3BDTEVkQlFUUkNRU3hMUVVFMVFpeEhRVUZ2UTBjc1MwRkJTME1zVTBGQlRDeERRVUZsWWl4aFFVRmhVeXhMUVVGaUxFTkJRV1lzUlVGQmIwTXNWVUZCVTBzc1EwRkJWQ3hGUVVGWlF5eERRVUZhTEVWQlFXVTdRVUZETlVZc1VVRkJTU3hQUVVGUFFTeERRVUZRTEV0QlFXRXNWMEZCYWtJc1JVRkJPRUk3UVVGRE5VSXNZVUZCVDB3c2IwSkJRVkE3UVVGRFJEczdRVUZGUkN4WFFVRlBTeXhEUVVGUU8wRkJRMFFzUjBGT01FTXNSVUZOZUVNc1NVRk9kME1zUTBGQk0wTTdRVUZQUkN4RFFWWkVPMEZCVjBGV0xGTkJRVk5YTEUxQlFWUXNSMEZCYTBJc1ZVRkJVME1zU1VGQlZDeEZRVUZsUXl4TFFVRm1MRVZCUVhOQ08wRkJRM1JETEZOQlFVOHNiMFZCUVV0bUxGTkJRVXdzUTBGQlpXRXNUVUZCWml4RFFVRnpRa2NzU1VGQmRFSXNRMEZCTWtKa0xGRkJRVE5DTEVWQlFYRkRXU3hMUVVGTFJ5eFBRVUZNTEVOQlFXRXNXVUZCWWl4RlFVRXlRaXhKUVVFelFpeERRVUZ5UXl4RlFVRjFSVVlzVFVGQlRVVXNUMEZCVGl4RFFVRmpMRmxCUVdRc1JVRkJORUlzU1VGQk5VSXNRMEZCZGtVN1FVRkJVRHRCUVVORUxFTkJSa1E3TzBGQlNVOHNVMEZCVTNKQ0xGRkJRVlFzUTBGQmEwSnpRaXhOUVVGc1FpeEZRVUV3UWtNc1RVRkJNVUlzUlVGQmEwTllMRTlCUVd4RExFVkJRVEpETzBGQlFVVXNVMEZCVDA0c1UwRkJVMnRDTEVsQlFWUXNRMEZCWTBZc1RVRkJaQ3hGUVVGelFrTXNUVUZCZEVJc1JVRkJPRUpZTEU5QlFUbENMRU5CUVZBN1FVRkJaMFE3TzBGQlJYQkhPMEZCUTBFN1FVRkRUeXhUUVVGVFdDeFpRVUZVTEVOQlFYTkNkMElzUjBGQmRFSXNSVUZCTWtKRExFdEJRVE5DTEVWQlFXdERReXhuUWtGQmJFTXNSVUZCYjBRN1FVRkRla1JFTEZWQlFWRkJMRk5CUVZNc1JVRkJha0k3UVVGRFFVTXNjVUpCUVcxQ1FTeHZRa0ZCYjBJc1JVRkJka003TzBGQlJVRXNUVUZCU1VNc2JVTkJRVW83TzBGQlJVRXNUMEZCUzBFc1NVRkJTU3hEUVVGVUxFVkJRVmxCTEVsQlFVbEdMRTFCUVUxSExFMUJRWFJDTEVWQlFUaENSQ3hMUVVGTExFTkJRVzVETEVWQlFYTkRPMEZCUTNCRExGRkJRVWxHTEUxQlFVMUZMRU5CUVU0c1RVRkJZVWdzUjBGQmFrSXNSVUZCYzBJN1FVRkRjRUlzWVVGQlQwVXNhVUpCUVdsQ1F5eERRVUZxUWl4RFFVRlFPMEZCUTBRN1FVRkRSanM3UVVGRlJDeE5RVUZKUlN4clJFRkJTanM3UVVGRlFTeE5RVUZKTEhGQ1FVRnhRalZDTEhkQ1FVRjNRbXRDTEVsQlFYaENMRU5CUVRaQ1N5eEhRVUUzUWl4RFFVRjZRaXhGUVVFMFJEdEJRVU14UkVNc1ZVRkJUVXNzU1VGQlRpeERRVUZYVGl4SFFVRllPMEZCUTBGTExIVkNRVUZ0UWl4SlFVRkpSU3hMUVVGS0xFTkJRVlZRTEVsQlFVbEpMRTFCUVdRc1EwRkJia0k3UVVGRFFVWXNjVUpCUVdsQ1NTeEpRVUZxUWl4RFFVRnpRa1FzWjBKQlFYUkNPMEZCUTBFc1UwRkJTMFlzU1VGQlNTeERRVUZVTEVWQlFWbEJMRWxCUVVsSUxFbEJRVWxKTEUxQlFYQkNMRVZCUVRSQ1JDeExRVUZMTEVOQlFXcERMRVZCUVc5RE8wRkJRMnhEUlN4MVFrRkJhVUpHTEVOQlFXcENMRWxCUVhOQ00wSXNZVUZCWVhkQ0xFbEJRVWxITEVOQlFVb3NRMEZCWWl4RlFVRnhRa1lzUzBGQmNrSXNSVUZCTkVKRExHZENRVUUxUWl4RFFVRjBRanRCUVVORU8wRkJRMFJFTEZWQlFVMVBMRWRCUVU0N1FVRkRRVTRzY1VKQlFXbENUU3hIUVVGcVFqdEJRVU5CTEZkQlFVOUlMR2RDUVVGUU8wRkJRMFE3TzBGQlJVUXNUVUZCU1V3c1QwRkJUMEVzU1VGQlNWTXNUVUZCWml4RlFVRjFRanRCUVVOeVFsUXNWVUZCVFVFc1NVRkJTVk1zVFVGQlNpeEZRVUZPTzBGQlEwUTdPMEZCUlVRc1RVRkJTU3g1UkVGQlQxUXNSMEZCVUN4NVEwRkJUMEVzUjBGQlVDeFBRVUZsTEZGQlFXWXNTVUZCTWtKQkxGRkJRVkVzU1VGQmRrTXNSVUZCTmtNN1FVRkRNME5ETEZWQlFVMUxMRWxCUVU0c1EwRkJWMDRzUjBGQldEdEJRVU5CU3l4MVFrRkJiVUlzUlVGQmJrSTdRVUZEUVVnc2NVSkJRV2xDU1N4SlFVRnFRaXhEUVVGelFrUXNaMEpCUVhSQ08wRkJRMEVzVVVGQlNVc3NZVUZCWVN4RlFVRnFRanRCUVVGQkxGRkJRMGxETEhGRFFVUktPMEZCUlVFc1UwRkJTMEVzUjBGQlRDeEpRVUZaV0N4SFFVRmFMRVZCUVdsQ08wRkJRMlk3UVVGRFFTeFZRVUZKUVN4SlFVRkpXU3hqUVVGS0xFTkJRVzFDUkN4SFFVRnVRaXhEUVVGS0xFVkJRVFpDTzBGQlF6TkNSQ3h0UWtGQlYwb3NTVUZCV0N4RFFVRm5Ra3NzUjBGQmFFSTdRVUZEUkR0QlFVTkdPMEZCUTBSRUxHVkJRVmRITEVsQlFWZzdRVUZEUVN4VFFVRkxWaXhKUVVGSkxFTkJRVlFzUlVGQldVRXNTVUZCU1U4c1YwRkJWMDRzVFVGQk0wSXNSVUZCYlVORUxFdEJRVXNzUTBGQmVFTXNSVUZCTWtNN1FVRkRla05STEZsQlFVMUVMRmRCUVZkUUxFTkJRVmdzUTBGQlRqdEJRVU5CUlN4MVFrRkJhVUpOTEVkQlFXcENMRWxCUVhkQ2JrTXNZVUZCWVhkQ0xFbEJRVWxYTEVkQlFVb3NRMEZCWWl4RlFVRjFRbFlzUzBGQmRrSXNSVUZCT0VKRExHZENRVUU1UWl4RFFVRjRRanRCUVVORU8wRkJRMFJFTEZWQlFVMVBMRWRCUVU0N1FVRkRRVTRzY1VKQlFXbENUU3hIUVVGcVFqdEJRVU5FTEVkQmJrSkVMRTFCYlVKUE8wRkJRMHhJTEhWQ1FVRnRRa3dzUjBGQmJrSTdRVUZEUkR0QlFVTkVMRk5CUVU5TExHZENRVUZRTzBGQlEwUWlMQ0ptYVd4bElqb2lhbk52Ymk1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQkVhV1ptSUdaeWIyMGdKeTR2WW1GelpTYzdYRzVwYlhCdmNuUWdlMnhwYm1WRWFXWm1mU0JtY205dElDY3VMMnhwYm1Vbk8xeHVYRzVqYjI1emRDQnZZbXBsWTNSUWNtOTBiM1I1Y0dWVWIxTjBjbWx1WnlBOUlFOWlhbVZqZEM1d2NtOTBiM1I1Y0dVdWRHOVRkSEpwYm1jN1hHNWNibHh1Wlhod2IzSjBJR052Ym5OMElHcHpiMjVFYVdabUlEMGdibVYzSUVScFptWW9LVHRjYmk4dklFUnBjMk55YVcxcGJtRjBaU0JpWlhSM1pXVnVJSFIzYnlCc2FXNWxjeUJ2WmlCd2NtVjBkSGt0Y0hKcGJuUmxaQ3dnYzJWeWFXRnNhWHBsWkNCS1UwOU9JSGRvWlhKbElHOXVaU0J2WmlCMGFHVnRJR2hoY3lCaFhHNHZMeUJrWVc1bmJHbHVaeUJqYjIxdFlTQmhibVFnZEdobElHOTBhR1Z5SUdSdlpYTnVKM1F1SUZSMWNtNXpJRzkxZENCcGJtTnNkV1JwYm1jZ2RHaGxJR1JoYm1kc2FXNW5JR052YlcxaElIbHBaV3hrY3lCMGFHVWdibWxqWlhOMElHOTFkSEIxZERwY2JtcHpiMjVFYVdabUxuVnpaVXh2Ym1kbGMzUlViMnRsYmlBOUlIUnlkV1U3WEc1Y2JtcHpiMjVFYVdabUxuUnZhMlZ1YVhwbElEMGdiR2x1WlVScFptWXVkRzlyWlc1cGVtVTdYRzVxYzI5dVJHbG1aaTVqWVhOMFNXNXdkWFFnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQmpiMjV6ZENCN2RXNWtaV1pwYm1Wa1VtVndiR0ZqWlcxbGJuUjlJRDBnZEdocGN5NXZjSFJwYjI1ek8xeHVYRzRnSUhKbGRIVnliaUIwZVhCbGIyWWdkbUZzZFdVZ1BUMDlJQ2R6ZEhKcGJtY25JRDhnZG1Gc2RXVWdPaUJLVTA5T0xuTjBjbWx1WjJsbWVTaGpZVzV2Ym1sallXeHBlbVVvZG1Gc2RXVXBMQ0JtZFc1amRHbHZiaWhyTENCMktTQjdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQjJJRDA5UFNBbmRXNWtaV1pwYm1Wa0p5a2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlIVnVaR1ZtYVc1bFpGSmxjR3hoWTJWdFpXNTBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCMk8xeHVJQ0I5TENBbklDQW5LVHRjYm4wN1hHNXFjMjl1UkdsbVppNWxjWFZoYkhNZ1BTQm1kVzVqZEdsdmJpaHNaV1owTENCeWFXZG9kQ2tnZTF4dUlDQnlaWFIxY200Z1JHbG1aaTV3Y205MGIzUjVjR1V1WlhGMVlXeHpMbU5oYkd3b2FuTnZia1JwWm1Zc0lHeGxablF1Y21Wd2JHRmpaU2d2TENoYlhGeHlYRnh1WFNrdlp5d2dKeVF4Snlrc0lISnBaMmgwTG5KbGNHeGhZMlVvTHl3b1cxeGNjbHhjYmwwcEwyY3NJQ2NrTVNjcEtUdGNibjA3WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCa2FXWm1Tbk52YmlodmJHUlBZbW9zSUc1bGQwOWlhaXdnYjNCMGFXOXVjeWtnZXlCeVpYUjFjbTRnYW5OdmJrUnBabVl1WkdsbVppaHZiR1JQWW1vc0lHNWxkMDlpYWl3Z2IzQjBhVzl1Y3lrN0lIMWNibHh1THk4Z1ZHaHBjeUJtZFc1amRHbHZiaUJvWVc1a2JHVnpJSFJvWlNCd2NtVnpaVzVqWlNCdlppQmphWEpqZFd4aGNpQnlaV1psY21WdVkyVnpJR0o1SUdKaGFXeHBibWNnYjNWMElIZG9aVzRnWlc1amIzVnVkR1Z5YVc1bklHRnVYRzR2THlCdlltcGxZM1FnZEdoaGRDQnBjeUJoYkhKbFlXUjVJRzl1SUhSb1pTQmNJbk4wWVdOclhDSWdiMllnYVhSbGJYTWdZbVZwYm1jZ2NISnZZMlZ6YzJWa0xseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTmhibTl1YVdOaGJHbDZaU2h2WW1vc0lITjBZV05yTENCeVpYQnNZV05sYldWdWRGTjBZV05yS1NCN1hHNGdJSE4wWVdOcklEMGdjM1JoWTJzZ2ZId2dXMTA3WEc0Z0lISmxjR3hoWTJWdFpXNTBVM1JoWTJzZ1BTQnlaWEJzWVdObGJXVnVkRk4wWVdOcklIeDhJRnRkTzF4dVhHNGdJR3hsZENCcE8xeHVYRzRnSUdadmNpQW9hU0E5SURBN0lHa2dQQ0J6ZEdGamF5NXNaVzVuZEdnN0lHa2dLejBnTVNrZ2UxeHVJQ0FnSUdsbUlDaHpkR0ZqYTF0cFhTQTlQVDBnYjJKcUtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2NtVndiR0ZqWlcxbGJuUlRkR0ZqYTF0cFhUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnNaWFFnWTJGdWIyNXBZMkZzYVhwbFpFOWlhanRjYmx4dUlDQnBaaUFvSjF0dlltcGxZM1FnUVhKeVlYbGRKeUE5UFQwZ2IySnFaV04wVUhKdmRHOTBlWEJsVkc5VGRISnBibWN1WTJGc2JDaHZZbW9wS1NCN1hHNGdJQ0FnYzNSaFkyc3VjSFZ6YUNodlltb3BPMXh1SUNBZ0lHTmhibTl1YVdOaGJHbDZaV1JQWW1vZ1BTQnVaWGNnUVhKeVlYa29iMkpxTG14bGJtZDBhQ2s3WEc0Z0lDQWdjbVZ3YkdGalpXMWxiblJUZEdGamF5NXdkWE5vS0dOaGJtOXVhV05oYkdsNlpXUlBZbW9wTzF4dUlDQWdJR1p2Y2lBb2FTQTlJREE3SUdrZ1BDQnZZbW91YkdWdVozUm9PeUJwSUNzOUlERXBJSHRjYmlBZ0lDQWdJR05oYm05dWFXTmhiR2w2WldSUFltcGJhVjBnUFNCallXNXZibWxqWVd4cGVtVW9iMkpxVzJsZExDQnpkR0ZqYXl3Z2NtVndiR0ZqWlcxbGJuUlRkR0ZqYXlrN1hHNGdJQ0FnZlZ4dUlDQWdJSE4wWVdOckxuQnZjQ2dwTzF4dUlDQWdJSEpsY0d4aFkyVnRaVzUwVTNSaFkyc3VjRzl3S0NrN1hHNGdJQ0FnY21WMGRYSnVJR05oYm05dWFXTmhiR2w2WldSUFltbzdYRzRnSUgxY2JseHVJQ0JwWmlBb2IySnFJQ1ltSUc5aWFpNTBiMHBUVDA0cElIdGNiaUFnSUNCdlltb2dQU0J2WW1vdWRHOUtVMDlPS0NrN1hHNGdJSDFjYmx4dUlDQnBaaUFvZEhsd1pXOW1JRzlpYWlBOVBUMGdKMjlpYW1WamRDY2dKaVlnYjJKcUlDRTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ2MzUmhZMnN1Y0hWemFDaHZZbW9wTzF4dUlDQWdJR05oYm05dWFXTmhiR2w2WldSUFltb2dQU0I3ZlR0Y2JpQWdJQ0J5WlhCc1lXTmxiV1Z1ZEZOMFlXTnJMbkIxYzJnb1kyRnViMjVwWTJGc2FYcGxaRTlpYWlrN1hHNGdJQ0FnYkdWMElITnZjblJsWkV0bGVYTWdQU0JiWFN4Y2JpQWdJQ0FnSUNBZ2EyVjVPMXh1SUNBZ0lHWnZjaUFvYTJWNUlHbHVJRzlpYWlrZ2UxeHVJQ0FnSUNBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHVnNjMlVnS2k5Y2JpQWdJQ0FnSUdsbUlDaHZZbW91YUdGelQzZHVVSEp2Y0dWeWRIa29hMlY1S1NrZ2UxeHVJQ0FnSUNBZ0lDQnpiM0owWldSTFpYbHpMbkIxYzJnb2EyVjVLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2MyOXlkR1ZrUzJWNWN5NXpiM0owS0NrN1hHNGdJQ0FnWm05eUlDaHBJRDBnTURzZ2FTQThJSE52Y25SbFpFdGxlWE11YkdWdVozUm9PeUJwSUNzOUlERXBJSHRjYmlBZ0lDQWdJR3RsZVNBOUlITnZjblJsWkV0bGVYTmJhVjA3WEc0Z0lDQWdJQ0JqWVc1dmJtbGpZV3hwZW1Wa1QySnFXMnRsZVYwZ1BTQmpZVzV2Ym1sallXeHBlbVVvYjJKcVcydGxlVjBzSUhOMFlXTnJMQ0J5WlhCc1lXTmxiV1Z1ZEZOMFlXTnJLVHRjYmlBZ0lDQjlYRzRnSUNBZ2MzUmhZMnN1Y0c5d0tDazdYRzRnSUNBZ2NtVndiR0ZqWlcxbGJuUlRkR0ZqYXk1d2IzQW9LVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0JqWVc1dmJtbGpZV3hwZW1Wa1QySnFJRDBnYjJKcU8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCallXNXZibWxqWVd4cGVtVmtUMkpxTzF4dWZWeHVJbDE5XG5cblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmFycmF5RGlmZiA9IHVuZGVmaW5lZDtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmQXJyYXlzID0gZGlmZkFycmF5cztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9iYXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2UpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciBhcnJheURpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9hcnJheURpZmYgPSBuZXcgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCk7XG5cdGFycmF5RGlmZi50b2tlbml6ZSA9IGFycmF5RGlmZi5qb2luID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgcmV0dXJuIHZhbHVlLnNsaWNlKCk7XG5cdH07XG5cdGFycmF5RGlmZi5yZW1vdmVFbXB0eSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgIHJldHVybiB2YWx1ZTtcblx0fTtcblxuXHRmdW5jdGlvbiBkaWZmQXJyYXlzKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjaykge1xuXHQgIHJldHVybiBhcnJheURpZmYuZGlmZihvbGRBcnIsIG5ld0FyciwgY2FsbGJhY2spO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDJGeWNtRjVMbXB6SWwwc0ltNWhiV1Z6SWpwYkltUnBabVpCY25KaGVYTWlMQ0poY25KaGVVUnBabVlpTENKMGIydGxibWw2WlNJc0ltcHZhVzRpTENKMllXeDFaU0lzSW5Oc2FXTmxJaXdpY21WdGIzWmxSVzF3ZEhraUxDSnZiR1JCY25JaUxDSnVaWGRCY25JaUxDSmpZV3hzWW1GamF5SXNJbVJwWm1ZaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN1owTkJWV2RDUVN4VkxFZEJRVUZCTEZVN08wRkJWbWhDT3pzN096czdkVUpCUlU4c1NVRkJUVU1zYVVaQlFWa3NkMFZCUVd4Q08wRkJRMUJCTEZWQlFWVkRMRkZCUVZZc1IwRkJjVUpFTEZWQlFWVkZMRWxCUVZZc1IwRkJhVUlzVlVGQlUwTXNTMEZCVkN4RlFVRm5RanRCUVVOd1JDeFRRVUZQUVN4TlFVRk5ReXhMUVVGT0xFVkJRVkE3UVVGRFJDeERRVVpFTzBGQlIwRktMRlZCUVZWTExGZEJRVllzUjBGQmQwSXNWVUZCVTBZc1MwRkJWQ3hGUVVGblFqdEJRVU4wUXl4VFFVRlBRU3hMUVVGUU8wRkJRMFFzUTBGR1JEczdRVUZKVHl4VFFVRlRTaXhWUVVGVUxFTkJRVzlDVHl4TlFVRndRaXhGUVVFMFFrTXNUVUZCTlVJc1JVRkJiME5ETEZGQlFYQkRMRVZCUVRoRE8wRkJRVVVzVTBGQlQxSXNWVUZCVlZNc1NVRkJWaXhEUVVGbFNDeE5RVUZtTEVWQlFYVkNReXhOUVVGMlFpeEZRVUVyUWtNc1VVRkJMMElzUTBGQlVEdEJRVUZyUkNJc0ltWnBiR1VpT2lKaGNuSmhlUzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCRWFXWm1JR1p5YjIwZ0p5NHZZbUZ6WlNjN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCaGNuSmhlVVJwWm1ZZ1BTQnVaWGNnUkdsbVppZ3BPMXh1WVhKeVlYbEVhV1ptTG5SdmEyVnVhWHBsSUQwZ1lYSnlZWGxFYVdabUxtcHZhVzRnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2RtRnNkV1V1YzJ4cFkyVW9LVHRjYm4wN1hHNWhjbkpoZVVScFptWXVjbVZ0YjNabFJXMXdkSGtnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2RtRnNkV1U3WEc1OU8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaR2xtWmtGeWNtRjVjeWh2YkdSQmNuSXNJRzVsZDBGeWNpd2dZMkZzYkdKaFkyc3BJSHNnY21WMGRYSnVJR0Z5Y21GNVJHbG1aaTVrYVdabUtHOXNaRUZ5Y2l3Z2JtVjNRWEp5TENCallXeHNZbUZqYXlrN0lIMWNiaUpkZlE9PVxuXG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovYXBwbHlQYXRjaCA9IGFwcGx5UGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2FwcGx5UGF0Y2hlcyA9IGFwcGx5UGF0Y2hlcztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19wYXJzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Rpc3RhbmNlSXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9kaXN0YW5jZUl0ZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Rpc3RhbmNlSXRlcmF0b3IpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2Z1bmN0aW9uIGFwcGx5UGF0Y2goc291cmNlLCB1bmlEaWZmKSB7XG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL29wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG5cdCAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuXHQgICAgdW5pRGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX3BhcnNlLnBhcnNlUGF0Y2gpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKHVuaURpZmYpO1xuXHQgIH1cblxuXHQgIGlmIChBcnJheS5pc0FycmF5KHVuaURpZmYpKSB7XG5cdCAgICBpZiAodW5pRGlmZi5sZW5ndGggPiAxKSB7XG5cdCAgICAgIHRocm93IG5ldyBFcnJvcignYXBwbHlQYXRjaCBvbmx5IHdvcmtzIHdpdGggYSBzaW5nbGUgaW5wdXQuJyk7XG5cdCAgICB9XG5cblx0ICAgIHVuaURpZmYgPSB1bmlEaWZmWzBdO1xuXHQgIH1cblxuXHQgIC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBpbnB1dFxuXHQgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcblx0ICAgICAgZGVsaW1pdGVycyA9IHNvdXJjZS5tYXRjaCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vZykgfHwgW10sXG5cdCAgICAgIGh1bmtzID0gdW5pRGlmZi5odW5rcyxcblx0ICAgICAgY29tcGFyZUxpbmUgPSBvcHRpb25zLmNvbXBhcmVMaW5lIHx8IGZ1bmN0aW9uIChsaW5lTnVtYmVyLCBsaW5lLCBvcGVyYXRpb24sIHBhdGNoQ29udGVudCkgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3tcblx0ICAgIHJldHVybiAoLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9saW5lID09PSBwYXRjaENvbnRlbnRcblx0ICAgICk7XG5cdCAgfSxcblx0ICAgICAgZXJyb3JDb3VudCA9IDAsXG5cdCAgICAgIGZ1enpGYWN0b3IgPSBvcHRpb25zLmZ1enpGYWN0b3IgfHwgMCxcblx0ICAgICAgbWluTGluZSA9IDAsXG5cdCAgICAgIG9mZnNldCA9IDAsXG5cdCAgICAgIHJlbW92ZUVPRk5MID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZvaWQgMCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyxcblx0ICAgICAgYWRkRU9GTkwgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdm9pZCAwIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdCAgLyoqXG5cdCAgICogQ2hlY2tzIGlmIHRoZSBodW5rIGV4YWN0bHkgZml0cyBvbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cblx0ICAgKi9cblx0ICBmdW5jdGlvbiBodW5rRml0cyhodW5rLCB0b1Bvcykge1xuXHQgICAgZm9yICh2YXIgaiA9IDA7IGogPCBodW5rLmxpbmVzLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgIHZhciBsaW5lID0gaHVuay5saW5lc1tqXSxcblx0ICAgICAgICAgIG9wZXJhdGlvbiA9IGxpbmVbMF0sXG5cdCAgICAgICAgICBjb250ZW50ID0gbGluZS5zdWJzdHIoMSk7XG5cblx0ICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnIHx8IG9wZXJhdGlvbiA9PT0gJy0nKSB7XG5cdCAgICAgICAgLy8gQ29udGV4dCBzYW5pdHkgY2hlY2tcblx0ICAgICAgICBpZiAoIWNvbXBhcmVMaW5lKHRvUG9zICsgMSwgbGluZXNbdG9Qb3NdLCBvcGVyYXRpb24sIGNvbnRlbnQpKSB7XG5cdCAgICAgICAgICBlcnJvckNvdW50Kys7XG5cblx0ICAgICAgICAgIGlmIChlcnJvckNvdW50ID4gZnV6ekZhY3Rvcikge1xuXHQgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRvUG9zKys7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHRydWU7XG5cdCAgfVxuXG5cdCAgLy8gU2VhcmNoIGJlc3QgZml0IG9mZnNldHMgZm9yIGVhY2ggaHVuayBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lc1xuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgaHVua3MubGVuZ3RoOyBpKyspIHtcblx0ICAgIHZhciBodW5rID0gaHVua3NbaV0sXG5cdCAgICAgICAgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMsXG5cdCAgICAgICAgbG9jYWxPZmZzZXQgPSAwLFxuXHQgICAgICAgIHRvUG9zID0gb2Zmc2V0ICsgaHVuay5vbGRTdGFydCAtIDE7XG5cblx0ICAgIHZhciBpdGVyYXRvciA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX2Rpc3RhbmNlSXRlcmF0b3IyWydkZWZhdWx0J10pIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKHRvUG9zLCBtaW5MaW5lLCBtYXhMaW5lKTtcblxuXHQgICAgZm9yICg7IGxvY2FsT2Zmc2V0ICE9PSB1bmRlZmluZWQ7IGxvY2FsT2Zmc2V0ID0gaXRlcmF0b3IoKSkge1xuXHQgICAgICBpZiAoaHVua0ZpdHMoaHVuaywgdG9Qb3MgKyBsb2NhbE9mZnNldCkpIHtcblx0ICAgICAgICBodW5rLm9mZnNldCA9IG9mZnNldCArPSBsb2NhbE9mZnNldDtcblx0ICAgICAgICBicmVhaztcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBpZiAobG9jYWxPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9XG5cblx0ICAgIC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG5cdCAgICAvLyB0byBmaXQgb3ZlciBhbHJlYWR5IHBhdGNoZWQgdGV4dFxuXHQgICAgbWluTGluZSA9IGh1bmsub2Zmc2V0ICsgaHVuay5vbGRTdGFydCArIGh1bmsub2xkTGluZXM7XG5cdCAgfVxuXG5cdCAgLy8gQXBwbHkgcGF0Y2ggaHVua3Ncblx0ICB2YXIgZGlmZk9mZnNldCA9IDA7XG5cdCAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGh1bmtzLmxlbmd0aDsgX2krKykge1xuXHQgICAgdmFyIF9odW5rID0gaHVua3NbX2ldLFxuXHQgICAgICAgIF90b1BvcyA9IF9odW5rLm9sZFN0YXJ0ICsgX2h1bmsub2Zmc2V0ICsgZGlmZk9mZnNldCAtIDE7XG5cdCAgICBkaWZmT2Zmc2V0ICs9IF9odW5rLm5ld0xpbmVzIC0gX2h1bmsub2xkTGluZXM7XG5cblx0ICAgIGlmIChfdG9Qb3MgPCAwKSB7XG5cdCAgICAgIC8vIENyZWF0aW5nIGEgbmV3IGZpbGVcblx0ICAgICAgX3RvUG9zID0gMDtcblx0ICAgIH1cblxuXHQgICAgZm9yICh2YXIgaiA9IDA7IGogPCBfaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuXHQgICAgICB2YXIgbGluZSA9IF9odW5rLmxpbmVzW2pdLFxuXHQgICAgICAgICAgb3BlcmF0aW9uID0gbGluZVswXSxcblx0ICAgICAgICAgIGNvbnRlbnQgPSBsaW5lLnN1YnN0cigxKSxcblx0ICAgICAgICAgIGRlbGltaXRlciA9IF9odW5rLmxpbmVkZWxpbWl0ZXJzW2pdO1xuXG5cdCAgICAgIGlmIChvcGVyYXRpb24gPT09ICcgJykge1xuXHQgICAgICAgIF90b1BvcysrO1xuXHQgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG5cdCAgICAgICAgbGluZXMuc3BsaWNlKF90b1BvcywgMSk7XG5cdCAgICAgICAgZGVsaW1pdGVycy5zcGxpY2UoX3RvUG9zLCAxKTtcblx0ICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHQgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG5cdCAgICAgICAgbGluZXMuc3BsaWNlKF90b1BvcywgMCwgY29udGVudCk7XG5cdCAgICAgICAgZGVsaW1pdGVycy5zcGxpY2UoX3RvUG9zLCAwLCBkZWxpbWl0ZXIpO1xuXHQgICAgICAgIF90b1BvcysrO1xuXHQgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJ1xcXFwnKSB7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzT3BlcmF0aW9uID0gX2h1bmsubGluZXNbaiAtIDFdID8gX2h1bmsubGluZXNbaiAtIDFdWzBdIDogbnVsbDtcblx0ICAgICAgICBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICcrJykge1xuXHQgICAgICAgICAgcmVtb3ZlRU9GTkwgPSB0cnVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICctJykge1xuXHQgICAgICAgICAgYWRkRU9GTkwgPSB0cnVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIC8vIEhhbmRsZSBFT0ZOTCBpbnNlcnRpb24vcmVtb3ZhbFxuXHQgIGlmIChyZW1vdmVFT0ZOTCkge1xuXHQgICAgd2hpbGUgKCFsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSkge1xuXHQgICAgICBsaW5lcy5wb3AoKTtcblx0ICAgICAgZGVsaW1pdGVycy5wb3AoKTtcblx0ICAgIH1cblx0ICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG5cdCAgICBsaW5lcy5wdXNoKCcnKTtcblx0ICAgIGRlbGltaXRlcnMucHVzaCgnXFxuJyk7XG5cdCAgfVxuXHQgIGZvciAodmFyIF9rID0gMDsgX2sgPCBsaW5lcy5sZW5ndGggLSAxOyBfaysrKSB7XG5cdCAgICBsaW5lc1tfa10gPSBsaW5lc1tfa10gKyBkZWxpbWl0ZXJzW19rXTtcblx0ICB9XG5cdCAgcmV0dXJuIGxpbmVzLmpvaW4oJycpO1xuXHR9XG5cblx0Ly8gV3JhcHBlciB0aGF0IHN1cHBvcnRzIG11bHRpcGxlIGZpbGUgcGF0Y2hlcyB2aWEgY2FsbGJhY2tzLlxuXHRmdW5jdGlvbiBhcHBseVBhdGNoZXModW5pRGlmZiwgb3B0aW9ucykge1xuXHQgIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcblx0ICAgIHVuaURpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9wYXJzZS5wYXJzZVBhdGNoKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyh1bmlEaWZmKTtcblx0ICB9XG5cblx0ICB2YXIgY3VycmVudEluZGV4ID0gMDtcblx0ICBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoKSB7XG5cdCAgICB2YXIgaW5kZXggPSB1bmlEaWZmW2N1cnJlbnRJbmRleCsrXTtcblx0ICAgIGlmICghaW5kZXgpIHtcblx0ICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcblx0ICAgIH1cblxuXHQgICAgb3B0aW9ucy5sb2FkRmlsZShpbmRleCwgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuXHQgICAgICBpZiAoZXJyKSB7XG5cdCAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHZhciB1cGRhdGVkQ29udGVudCA9IGFwcGx5UGF0Y2goZGF0YSwgaW5kZXgsIG9wdGlvbnMpO1xuXHQgICAgICBvcHRpb25zLnBhdGNoZWQoaW5kZXgsIHVwZGF0ZWRDb250ZW50LCBmdW5jdGlvbiAoZXJyKSB7XG5cdCAgICAgICAgaWYgKGVycikge1xuXHQgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBwcm9jZXNzSW5kZXgoKTtcblx0ICAgICAgfSk7XG5cdCAgICB9KTtcblx0ICB9XG5cdCAgcHJvY2Vzc0luZGV4KCk7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5d1lYUmphQzloY0hCc2VTNXFjeUpkTENKdVlXMWxjeUk2V3lKaGNIQnNlVkJoZEdOb0lpd2lZWEJ3YkhsUVlYUmphR1Z6SWl3aWMyOTFjbU5sSWl3aWRXNXBSR2xtWmlJc0ltOXdkR2x2Ym5NaUxDSkJjbkpoZVNJc0ltbHpRWEp5WVhraUxDSnNaVzVuZEdnaUxDSkZjbkp2Y2lJc0lteHBibVZ6SWl3aWMzQnNhWFFpTENKa1pXeHBiV2wwWlhKeklpd2liV0YwWTJnaUxDSm9kVzVyY3lJc0ltTnZiWEJoY21WTWFXNWxJaXdpYkdsdVpVNTFiV0psY2lJc0lteHBibVVpTENKdmNHVnlZWFJwYjI0aUxDSndZWFJqYUVOdmJuUmxiblFpTENKbGNuSnZja052ZFc1MElpd2lablY2ZWtaaFkzUnZjaUlzSW0xcGJreHBibVVpTENKdlptWnpaWFFpTENKeVpXMXZkbVZGVDBaT1RDSXNJbUZrWkVWUFJrNU1JaXdpYUhWdWEwWnBkSE1pTENKb2RXNXJJaXdpZEc5UWIzTWlMQ0pxSWl3aVkyOXVkR1Z1ZENJc0luTjFZbk4wY2lJc0lta2lMQ0p0WVhoTWFXNWxJaXdpYjJ4a1RHbHVaWE1pTENKc2IyTmhiRTltWm5ObGRDSXNJbTlzWkZOMFlYSjBJaXdpYVhSbGNtRjBiM0lpTENKMWJtUmxabWx1WldRaUxDSmthV1ptVDJabWMyVjBJaXdpYm1WM1RHbHVaWE1pTENKa1pXeHBiV2wwWlhJaUxDSnNhVzVsWkdWc2FXMXBkR1Z5Y3lJc0luTndiR2xqWlNJc0luQnlaWFpwYjNWelQzQmxjbUYwYVc5dUlpd2ljRzl3SWl3aWNIVnphQ0lzSWw5cklpd2lhbTlwYmlJc0ltTjFjbkpsYm5SSmJtUmxlQ0lzSW5CeWIyTmxjM05KYm1SbGVDSXNJbWx1WkdWNElpd2lZMjl0Y0d4bGRHVWlMQ0pzYjJGa1JtbHNaU0lzSW1WeWNpSXNJbVJoZEdFaUxDSjFjR1JoZEdWa1EyOXVkR1Z1ZENJc0luQmhkR05vWldRaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3p0blEwRkhaMEpCTEZVc1IwRkJRVUVzVlR0NVJFRnZTVUZETEZrc1IwRkJRVUVzV1RzN1FVRjJTV2hDT3p0QlFVTkJPenM3T3pzN2RVSkJSVThzVTBGQlUwUXNWVUZCVkN4RFFVRnZRa1VzVFVGQmNFSXNSVUZCTkVKRExFOUJRVFZDTEVWQlFXMUVPMEZCUVVFc2MwUkJRV1JETEU5QlFXTXNkVVZCUVVvc1JVRkJTVHM3UVVGRGVFUXNUVUZCU1N4UFFVRlBSQ3hQUVVGUUxFdEJRVzFDTEZGQlFYWkNMRVZCUVdsRE8wRkJReTlDUVN4alFVRlZMSGRGUVVGWFFTeFBRVUZZTEVOQlFWWTdRVUZEUkRzN1FVRkZSQ3hOUVVGSlJTeE5RVUZOUXl4UFFVRk9MRU5CUVdOSUxFOUJRV1FzUTBGQlNpeEZRVUUwUWp0QlFVTXhRaXhSUVVGSlFTeFJRVUZSU1N4TlFVRlNMRWRCUVdsQ0xFTkJRWEpDTEVWQlFYZENPMEZCUTNSQ0xGbEJRVTBzU1VGQlNVTXNTMEZCU2l4RFFVRlZMRFJEUVVGV0xFTkJRVTQ3UVVGRFJEczdRVUZGUkV3c1kwRkJWVUVzVVVGQlVTeERRVUZTTEVOQlFWWTdRVUZEUkRzN1FVRkZSRHRCUVVOQkxFMUJRVWxOTEZGQlFWRlFMRTlCUVU5UkxFdEJRVkFzUTBGQllTeHhRa0ZCWWl4RFFVRmFPMEZCUVVFc1RVRkRTVU1zWVVGQllWUXNUMEZCVDFVc1MwRkJVQ3hEUVVGaExITkNRVUZpTEV0QlFYZERMRVZCUkhwRU8wRkJRVUVzVFVGRlNVTXNVVUZCVVZZc1VVRkJVVlVzUzBGR2NFSTdRVUZCUVN4TlFVbEpReXhqUVVGalZpeFJRVUZSVlN4WFFVRlNMRWxCUVhkQ0xGVkJRVU5ETEZWQlFVUXNSVUZCWVVNc1NVRkJZaXhGUVVGdFFrTXNVMEZCYmtJc1JVRkJPRUpETEZsQlFUbENPMEZCUVVFc2JVTkJRU3REUml4VFFVRlRSVHRCUVVGNFJEdEJRVUZCTEVkQlNqRkRPMEZCUVVFc1RVRkxTVU1zWVVGQllTeERRVXhxUWp0QlFVRkJMRTFCVFVsRExHRkJRV0ZvUWl4UlFVRlJaMElzVlVGQlVpeEpRVUZ6UWl4RFFVNTJRenRCUVVGQkxFMUJUMGxETEZWQlFWVXNRMEZRWkR0QlFVRkJMRTFCVVVsRExGTkJRVk1zUTBGU1lqdEJRVUZCTEUxQlZVbERMRFpEUVZaS08wRkJRVUVzVFVGWFNVTXNNRU5CV0VvN08wRkJZVUU3T3p0QlFVZEJMRmRCUVZORExGRkJRVlFzUTBGQmEwSkRMRWxCUVd4Q0xFVkJRWGRDUXl4TFFVRjRRaXhGUVVFclFqdEJRVU0zUWl4VFFVRkxMRWxCUVVsRExFbEJRVWtzUTBGQllpeEZRVUZuUWtFc1NVRkJTVVlzUzBGQlMycENMRXRCUVV3c1EwRkJWMFlzVFVGQkwwSXNSVUZCZFVOeFFpeEhRVUYyUXl4RlFVRTBRenRCUVVNeFF5eFZRVUZKV2l4UFFVRlBWU3hMUVVGTGFrSXNTMEZCVEN4RFFVRlhiVUlzUTBGQldDeERRVUZZTzBGQlFVRXNWVUZEU1Znc1dVRkJXVVFzUzBGQlN5eERRVUZNTEVOQlJHaENPMEZCUVVFc1ZVRkZTV0VzVlVGQlZXSXNTMEZCUzJNc1RVRkJUQ3hEUVVGWkxFTkJRVm9zUTBGR1pEczdRVUZKUVN4VlFVRkpZaXhqUVVGakxFZEJRV1FzU1VGQmNVSkJMR05CUVdNc1IwRkJka01zUlVGQk5FTTdRVUZETVVNN1FVRkRRU3haUVVGSkxFTkJRVU5JTEZsQlFWbGhMRkZCUVZFc1EwRkJjRUlzUlVGQmRVSnNRaXhOUVVGTmEwSXNTMEZCVGl4RFFVRjJRaXhGUVVGeFExWXNVMEZCY2tNc1JVRkJaMFJaTEU5QlFXaEVMRU5CUVV3c1JVRkJLMFE3UVVGRE4wUldPenRCUVVWQkxHTkJRVWxCTEdGQlFXRkRMRlZCUVdwQ0xFVkJRVFpDTzBGQlF6TkNMRzFDUVVGUExFdEJRVkE3UVVGRFJEdEJRVU5HTzBGQlEwUlBPMEZCUTBRN1FVRkRSanM3UVVGRlJDeFhRVUZQTEVsQlFWQTdRVUZEUkRzN1FVRkZSRHRCUVVOQkxFOUJRVXNzU1VGQlNVa3NTVUZCU1N4RFFVRmlMRVZCUVdkQ1FTeEpRVUZKYkVJc1RVRkJUVTRzVFVGQk1VSXNSVUZCYTBOM1FpeEhRVUZzUXl4RlFVRjFRenRCUVVOeVF5eFJRVUZKVEN4UFFVRlBZaXhOUVVGTmEwSXNRMEZCVGl4RFFVRllPMEZCUVVFc1VVRkRTVU1zVlVGQlZYWkNMRTFCUVUxR0xFMUJRVTRzUjBGQlpXMUNMRXRCUVV0UExGRkJSR3hETzBGQlFVRXNVVUZGU1VNc1kwRkJZeXhEUVVac1FqdEJRVUZCTEZGQlIwbFFMRkZCUVZGTUxGTkJRVk5KTEV0QlFVdFRMRkZCUVdRc1IwRkJlVUlzUTBGSWNrTTdPMEZCUzBFc1VVRkJTVU1zVjBGQlZ5eHZSa0ZCYVVKVUxFdEJRV3BDTEVWQlFYZENUaXhQUVVGNFFpeEZRVUZwUTFjc1QwRkJha01zUTBGQlpqczdRVUZGUVN4WFFVRlBSU3huUWtGQlowSkhMRk5CUVhaQ0xFVkJRV3REU0N4alFVRmpSU3hWUVVGb1JDeEZRVUUwUkR0QlFVTXhSQ3hWUVVGSldDeFRRVUZUUXl4SlFVRlVMRVZCUVdWRExGRkJRVkZQTEZkQlFYWkNMRU5CUVVvc1JVRkJlVU03UVVGRGRrTlNMR0ZCUVV0S0xFMUJRVXdzUjBGQlkwRXNWVUZCVlZrc1YwRkJlRUk3UVVGRFFUdEJRVU5FTzBGQlEwWTdPMEZCUlVRc1VVRkJTVUVzWjBKQlFXZENSeXhUUVVGd1FpeEZRVUVyUWp0QlFVTTNRaXhoUVVGUExFdEJRVkE3UVVGRFJEczdRVUZGUkR0QlFVTkJPMEZCUTBGb1FpeGpRVUZWU3l4TFFVRkxTaXhOUVVGTUxFZEJRV05KTEV0QlFVdFRMRkZCUVc1Q0xFZEJRVGhDVkN4TFFVRkxUeXhSUVVFM1F6dEJRVU5FT3p0QlFVVkVPMEZCUTBFc1RVRkJTVXNzWVVGQllTeERRVUZxUWp0QlFVTkJMRTlCUVVzc1NVRkJTVkFzUzBGQlNTeERRVUZpTEVWQlFXZENRU3hMUVVGSmJFSXNUVUZCVFU0c1RVRkJNVUlzUlVGQmEwTjNRaXhKUVVGc1F5eEZRVUYxUXp0QlFVTnlReXhSUVVGSlRDeFJRVUZQWWl4TlFVRk5hMElzUlVGQlRpeERRVUZZTzBGQlFVRXNVVUZEU1Vvc1UwRkJVVVFzVFVGQlMxTXNVVUZCVEN4SFFVRm5RbFFzVFVGQlMwb3NUVUZCY2tJc1IwRkJPRUpuUWl4VlFVRTVRaXhIUVVFeVF5eERRVVIyUkR0QlFVVkJRU3hyUWtGQlkxb3NUVUZCUzJFc1VVRkJUQ3hIUVVGblFtSXNUVUZCUzA4c1VVRkJia003TzBGQlJVRXNVVUZCU1U0c1UwRkJVU3hEUVVGYUxFVkJRV1U3UVVGQlJUdEJRVU5tUVN4bFFVRlJMRU5CUVZJN1FVRkRSRHM3UVVGRlJDeFRRVUZMTEVsQlFVbERMRWxCUVVrc1EwRkJZaXhGUVVGblFrRXNTVUZCU1VZc1RVRkJTMnBDTEV0QlFVd3NRMEZCVjBZc1RVRkJMMElzUlVGQmRVTnhRaXhIUVVGMlF5eEZRVUUwUXp0QlFVTXhReXhWUVVGSldpeFBRVUZQVlN4TlFVRkxha0lzUzBGQlRDeERRVUZYYlVJc1EwRkJXQ3hEUVVGWU8wRkJRVUVzVlVGRFNWZ3NXVUZCV1VRc1MwRkJTeXhEUVVGTUxFTkJSR2hDTzBGQlFVRXNWVUZGU1dFc1ZVRkJWV0lzUzBGQlMyTXNUVUZCVEN4RFFVRlpMRU5CUVZvc1EwRkdaRHRCUVVGQkxGVkJSMGxWTEZsQlFWbGtMRTFCUVV0bExHTkJRVXdzUTBGQmIwSmlMRU5CUVhCQ0xFTkJTR2hDT3p0QlFVdEJMRlZCUVVsWUxHTkJRV01zUjBGQmJFSXNSVUZCZFVJN1FVRkRja0pWTzBGQlEwUXNUMEZHUkN4TlFVVlBMRWxCUVVsV0xHTkJRV01zUjBGQmJFSXNSVUZCZFVJN1FVRkROVUpTTEdOQlFVMXBReXhOUVVGT0xFTkJRV0ZtTEUxQlFXSXNSVUZCYjBJc1EwRkJjRUk3UVVGRFFXaENMRzFDUVVGWEswSXNUVUZCV0N4RFFVRnJRbVlzVFVGQmJFSXNSVUZCZVVJc1EwRkJla0k3UVVGRFJqdEJRVU5ETEU5QlNrMHNUVUZKUVN4SlFVRkpWaXhqUVVGakxFZEJRV3hDTEVWQlFYVkNPMEZCUXpWQ1VpeGpRVUZOYVVNc1RVRkJUaXhEUVVGaFppeE5RVUZpTEVWQlFXOUNMRU5CUVhCQ0xFVkJRWFZDUlN4UFFVRjJRanRCUVVOQmJFSXNiVUpCUVZjclFpeE5RVUZZTEVOQlFXdENaaXhOUVVGc1FpeEZRVUY1UWl4RFFVRjZRaXhGUVVFMFFtRXNVMEZCTlVJN1FVRkRRV0k3UVVGRFJDeFBRVXBOTEUxQlNVRXNTVUZCU1ZZc1kwRkJZeXhKUVVGc1FpeEZRVUYzUWp0QlFVTTNRaXhaUVVGSk1FSXNiMEpCUVc5Q2FrSXNUVUZCUzJwQ0xFdEJRVXdzUTBGQlYyMUNMRWxCUVVrc1EwRkJaaXhKUVVGdlFrWXNUVUZCUzJwQ0xFdEJRVXdzUTBGQlYyMUNMRWxCUVVrc1EwRkJaaXhGUVVGclFpeERRVUZzUWl4RFFVRndRaXhIUVVFeVF5eEpRVUZ1UlR0QlFVTkJMRmxCUVVsbExITkNRVUZ6UWl4SFFVRXhRaXhGUVVFclFqdEJRVU0zUW5CQ0xIZENRVUZqTEVsQlFXUTdRVUZEUkN4VFFVWkVMRTFCUlU4c1NVRkJTVzlDTEhOQ1FVRnpRaXhIUVVFeFFpeEZRVUVyUWp0QlFVTndRMjVDTEhGQ1FVRlhMRWxCUVZnN1FVRkRSRHRCUVVOR08wRkJRMFk3UVVGRFJqczdRVUZGUkR0QlFVTkJMRTFCUVVsRUxGZEJRVW9zUlVGQmFVSTdRVUZEWml4WFFVRlBMRU5CUVVOa0xFMUJRVTFCTEUxQlFVMUdMRTFCUVU0c1IwRkJaU3hEUVVGeVFpeERRVUZTTEVWQlFXbERPMEZCUXk5Q1JTeFpRVUZOYlVNc1IwRkJUanRCUVVOQmFrTXNhVUpCUVZkcFF5eEhRVUZZTzBGQlEwUTdRVUZEUml4SFFVeEVMRTFCUzA4c1NVRkJTWEJDTEZGQlFVb3NSVUZCWXp0QlFVTnVRbVlzVlVGQlRXOURMRWxCUVU0c1EwRkJWeXhGUVVGWU8wRkJRMEZzUXl4bFFVRlhhME1zU1VGQldDeERRVUZuUWl4SlFVRm9RanRCUVVORU8wRkJRMFFzVDBGQlN5eEpRVUZKUXl4TFFVRkxMRU5CUVdRc1JVRkJhVUpCTEV0QlFVdHlReXhOUVVGTlJpeE5RVUZPTEVkQlFXVXNRMEZCY2tNc1JVRkJkME4xUXl4SlFVRjRReXhGUVVFNFF6dEJRVU0xUTNKRExGVkJRVTF4UXl4RlFVRk9MRWxCUVZseVF5eE5RVUZOY1VNc1JVRkJUaXhKUVVGWmJrTXNWMEZCVjIxRExFVkJRVmdzUTBGQmVFSTdRVUZEUkR0QlFVTkVMRk5CUVU5eVF5eE5RVUZOYzBNc1NVRkJUaXhEUVVGWExFVkJRVmdzUTBGQlVEdEJRVU5FT3p0QlFVVkVPMEZCUTA4c1UwRkJVemxETEZsQlFWUXNRMEZCYzBKRkxFOUJRWFJDTEVWQlFTdENReXhQUVVFdlFpeEZRVUYzUXp0QlFVTTNReXhOUVVGSkxFOUJRVTlFTEU5QlFWQXNTMEZCYlVJc1VVRkJka0lzUlVGQmFVTTdRVUZETDBKQkxHTkJRVlVzZDBWQlFWZEJMRTlCUVZnc1EwRkJWanRCUVVORU96dEJRVVZFTEUxQlFVazJReXhsUVVGbExFTkJRVzVDTzBGQlEwRXNWMEZCVTBNc1dVRkJWQ3hIUVVGM1FqdEJRVU4wUWl4UlFVRkpReXhSUVVGUkwwTXNVVUZCVVRaRExHTkJRVklzUTBGQldqdEJRVU5CTEZGQlFVa3NRMEZCUTBVc1MwRkJUQ3hGUVVGWk8wRkJRMVlzWVVGQlR6bERMRkZCUVZFclF5eFJRVUZTTEVWQlFWQTdRVUZEUkRzN1FVRkZSQzlETEZsQlFWRm5SQ3hSUVVGU0xFTkJRV2xDUml4TFFVRnFRaXhGUVVGM1FpeFZRVUZUUnl4SFFVRlVMRVZCUVdORExFbEJRV1FzUlVGQmIwSTdRVUZETVVNc1ZVRkJTVVFzUjBGQlNpeEZRVUZUTzBGQlExQXNaVUZCVDJwRUxGRkJRVkVyUXl4UlFVRlNMRU5CUVdsQ1JTeEhRVUZxUWl4RFFVRlFPMEZCUTBRN08wRkJSVVFzVlVGQlNVVXNhVUpCUVdsQ2RrUXNWMEZCVjNORUxFbEJRVmdzUlVGQmFVSktMRXRCUVdwQ0xFVkJRWGRDT1VNc1QwRkJlRUlzUTBGQmNrSTdRVUZEUVVFc1kwRkJVVzlFTEU5QlFWSXNRMEZCWjBKT0xFdEJRV2hDTEVWQlFYVkNTeXhqUVVGMlFpeEZRVUYxUXl4VlFVRlRSaXhIUVVGVUxFVkJRV003UVVGRGJrUXNXVUZCU1VFc1IwRkJTaXhGUVVGVE8wRkJRMUFzYVVKQlFVOXFSQ3hSUVVGUkswTXNVVUZCVWl4RFFVRnBRa1VzUjBGQmFrSXNRMEZCVUR0QlFVTkVPenRCUVVWRVNqdEJRVU5FTEU5QlRrUTdRVUZQUkN4TFFXSkVPMEZCWTBRN1FVRkRSRUU3UVVGRFJDSXNJbVpwYkdVaU9pSmhjSEJzZVM1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdjR0Z5YzJWUVlYUmphSDBnWm5KdmJTQW5MaTl3WVhKelpTYzdYRzVwYlhCdmNuUWdaR2x6ZEdGdVkyVkpkR1Z5WVhSdmNpQm1jbTl0SUNjdUxpOTFkR2xzTDJScGMzUmhibU5sTFdsMFpYSmhkRzl5Snp0Y2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHRndjR3g1VUdGMFkyZ29jMjkxY21ObExDQjFibWxFYVdabUxDQnZjSFJwYjI1eklEMGdlMzBwSUh0Y2JpQWdhV1lnS0hSNWNHVnZaaUIxYm1sRWFXWm1JRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUhWdWFVUnBabVlnUFNCd1lYSnpaVkJoZEdOb0tIVnVhVVJwWm1ZcE8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0VGeWNtRjVMbWx6UVhKeVlYa29kVzVwUkdsbVppa3BJSHRjYmlBZ0lDQnBaaUFvZFc1cFJHbG1aaTVzWlc1bmRHZ2dQaUF4S1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjJGd2NHeDVVR0YwWTJnZ2IyNXNlU0IzYjNKcmN5QjNhWFJvSUdFZ2MybHVaMnhsSUdsdWNIVjBMaWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFZ1YVVScFptWWdQU0IxYm1sRWFXWm1XekJkTzF4dUlDQjlYRzVjYmlBZ0x5OGdRWEJ3YkhrZ2RHaGxJR1JwWm1ZZ2RHOGdkR2hsSUdsdWNIVjBYRzRnSUd4bGRDQnNhVzVsY3lBOUlITnZkWEpqWlM1emNHeHBkQ2d2WEZ4eVhGeHVmRnRjWEc1Y1hIWmNYR1pjWEhKY1hIZzROVjB2S1N4Y2JpQWdJQ0FnSUdSbGJHbHRhWFJsY25NZ1BTQnpiM1Z5WTJVdWJXRjBZMmdvTDF4Y2NseGNibnhiWEZ4dVhGeDJYRnhtWEZ4eVhGeDRPRFZkTDJjcElIeDhJRnRkTEZ4dUlDQWdJQ0FnYUhWdWEzTWdQU0IxYm1sRWFXWm1MbWgxYm10ekxGeHVYRzRnSUNBZ0lDQmpiMjF3WVhKbFRHbHVaU0E5SUc5d2RHbHZibk11WTI5dGNHRnlaVXhwYm1VZ2ZId2dLQ2hzYVc1bFRuVnRZbVZ5TENCc2FXNWxMQ0J2Y0dWeVlYUnBiMjRzSUhCaGRHTm9RMjl1ZEdWdWRDa2dQVDRnYkdsdVpTQTlQVDBnY0dGMFkyaERiMjUwWlc1MEtTeGNiaUFnSUNBZ0lHVnljbTl5UTI5MWJuUWdQU0F3TEZ4dUlDQWdJQ0FnWm5WNmVrWmhZM1J2Y2lBOUlHOXdkR2x2Ym5NdVpuVjZla1poWTNSdmNpQjhmQ0F3TEZ4dUlDQWdJQ0FnYldsdVRHbHVaU0E5SURBc1hHNGdJQ0FnSUNCdlptWnpaWFFnUFNBd0xGeHVYRzRnSUNBZ0lDQnlaVzF2ZG1WRlQwWk9UQ3hjYmlBZ0lDQWdJR0ZrWkVWUFJrNU1PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRhR1ZqYTNNZ2FXWWdkR2hsSUdoMWJtc2daWGhoWTNSc2VTQm1hWFJ6SUc5dUlIUm9aU0J3Y205MmFXUmxaQ0JzYjJOaGRHbHZibHh1SUNBZ0tpOWNiaUFnWm5WdVkzUnBiMjRnYUhWdWEwWnBkSE1vYUhWdWF5d2dkRzlRYjNNcElIdGNiaUFnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBOElHaDFibXN1YkdsdVpYTXViR1Z1WjNSb095QnFLeXNwSUh0Y2JpQWdJQ0FnSUd4bGRDQnNhVzVsSUQwZ2FIVnVheTVzYVc1bGMxdHFYU3hjYmlBZ0lDQWdJQ0FnSUNCdmNHVnlZWFJwYjI0Z1BTQnNhVzVsV3pCZExGeHVJQ0FnSUNBZ0lDQWdJR052Ym5SbGJuUWdQU0JzYVc1bExuTjFZbk4wY2lneEtUdGNibHh1SUNBZ0lDQWdhV1lnS0c5d1pYSmhkR2x2YmlBOVBUMGdKeUFuSUh4OElHOXdaWEpoZEdsdmJpQTlQVDBnSnkwbktTQjdYRzRnSUNBZ0lDQWdJQzh2SUVOdmJuUmxlSFFnYzJGdWFYUjVJR05vWldOclhHNGdJQ0FnSUNBZ0lHbG1JQ2doWTI5dGNHRnlaVXhwYm1Vb2RHOVFiM01nS3lBeExDQnNhVzVsYzF0MGIxQnZjMTBzSUc5d1pYSmhkR2x2Yml3Z1kyOXVkR1Z1ZENrcElIdGNiaUFnSUNBZ0lDQWdJQ0JsY25KdmNrTnZkVzUwS3lzN1hHNWNiaUFnSUNBZ0lDQWdJQ0JwWmlBb1pYSnliM0pEYjNWdWRDQStJR1oxZW5wR1lXTjBiM0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZEc5UWIzTXJLenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2RISjFaVHRjYmlBZ2ZWeHVYRzRnSUM4dklGTmxZWEpqYUNCaVpYTjBJR1pwZENCdlptWnpaWFJ6SUdadmNpQmxZV05vSUdoMWJtc2dZbUZ6WldRZ2IyNGdkR2hsSUhCeVpYWnBiM1Z6SUc5dVpYTmNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCb2RXNXJjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUd4bGRDQm9kVzVySUQwZ2FIVnVhM05iYVYwc1hHNGdJQ0FnSUNBZ0lHMWhlRXhwYm1VZ1BTQnNhVzVsY3k1c1pXNW5kR2dnTFNCb2RXNXJMbTlzWkV4cGJtVnpMRnh1SUNBZ0lDQWdJQ0JzYjJOaGJFOW1abk5sZENBOUlEQXNYRzRnSUNBZ0lDQWdJSFJ2VUc5eklEMGdiMlptYzJWMElDc2dhSFZ1YXk1dmJHUlRkR0Z5ZENBdElERTdYRzVjYmlBZ0lDQnNaWFFnYVhSbGNtRjBiM0lnUFNCa2FYTjBZVzVqWlVsMFpYSmhkRzl5S0hSdlVHOXpMQ0J0YVc1TWFXNWxMQ0J0WVhoTWFXNWxLVHRjYmx4dUlDQWdJR1p2Y2lBb095QnNiMk5oYkU5bVpuTmxkQ0FoUFQwZ2RXNWtaV1pwYm1Wa095QnNiMk5oYkU5bVpuTmxkQ0E5SUdsMFpYSmhkRzl5S0NrcElIdGNiaUFnSUNBZ0lHbG1JQ2hvZFc1clJtbDBjeWhvZFc1ckxDQjBiMUJ2Y3lBcklHeHZZMkZzVDJabWMyVjBLU2tnZTF4dUlDQWdJQ0FnSUNCb2RXNXJMbTltWm5ObGRDQTlJRzltWm5ObGRDQXJQU0JzYjJOaGJFOW1abk5sZER0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0d4dlkyRnNUMlptYzJWMElEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QlRaWFFnYkc5M1pYSWdkR1Y0ZENCc2FXMXBkQ0IwYnlCbGJtUWdiMllnZEdobElHTjFjbkpsYm5RZ2FIVnVheXdnYzI4Z2JtVjRkQ0J2Ym1WeklHUnZiaWQwSUhSeWVWeHVJQ0FnSUM4dklIUnZJR1pwZENCdmRtVnlJR0ZzY21WaFpIa2djR0YwWTJobFpDQjBaWGgwWEc0Z0lDQWdiV2x1VEdsdVpTQTlJR2gxYm1zdWIyWm1jMlYwSUNzZ2FIVnVheTV2YkdSVGRHRnlkQ0FySUdoMWJtc3ViMnhrVEdsdVpYTTdYRzRnSUgxY2JseHVJQ0F2THlCQmNIQnNlU0J3WVhSamFDQm9kVzVyYzF4dUlDQnNaWFFnWkdsbVprOW1abk5sZENBOUlEQTdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2FIVnVhM011YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNCc1pYUWdhSFZ1YXlBOUlHaDFibXR6VzJsZExGeHVJQ0FnSUNBZ0lDQjBiMUJ2Y3lBOUlHaDFibXN1YjJ4a1UzUmhjblFnS3lCb2RXNXJMbTltWm5ObGRDQXJJR1JwWm1aUFptWnpaWFFnTFNBeE8xeHVJQ0FnSUdScFptWlBabVp6WlhRZ0t6MGdhSFZ1YXk1dVpYZE1hVzVsY3lBdElHaDFibXN1YjJ4a1RHbHVaWE03WEc1Y2JpQWdJQ0JwWmlBb2RHOVFiM01nUENBd0tTQjdJQzh2SUVOeVpXRjBhVzVuSUdFZ2JtVjNJR1pwYkdWY2JpQWdJQ0FnSUhSdlVHOXpJRDBnTUR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ01Ec2dhaUE4SUdoMWJtc3ViR2x1WlhNdWJHVnVaM1JvT3lCcUt5c3BJSHRjYmlBZ0lDQWdJR3hsZENCc2FXNWxJRDBnYUhWdWF5NXNhVzVsYzF0cVhTeGNiaUFnSUNBZ0lDQWdJQ0J2Y0dWeVlYUnBiMjRnUFNCc2FXNWxXekJkTEZ4dUlDQWdJQ0FnSUNBZ0lHTnZiblJsYm5RZ1BTQnNhVzVsTG5OMVluTjBjaWd4S1N4Y2JpQWdJQ0FnSUNBZ0lDQmtaV3hwYldsMFpYSWdQU0JvZFc1ckxteHBibVZrWld4cGJXbDBaWEp6VzJwZE8xeHVYRzRnSUNBZ0lDQnBaaUFvYjNCbGNtRjBhVzl1SUQwOVBTQW5JQ2NwSUh0Y2JpQWdJQ0FnSUNBZ2RHOVFiM01yS3p0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2IzQmxjbUYwYVc5dUlEMDlQU0FuTFNjcElIdGNiaUFnSUNBZ0lDQWdiR2x1WlhNdWMzQnNhV05sS0hSdlVHOXpMQ0F4S1R0Y2JpQWdJQ0FnSUNBZ1pHVnNhVzFwZEdWeWN5NXpjR3hwWTJVb2RHOVFiM01zSURFcE8xeHVJQ0FnSUNBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHVnNjMlVnS2k5Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2IzQmxjbUYwYVc5dUlEMDlQU0FuS3ljcElIdGNiaUFnSUNBZ0lDQWdiR2x1WlhNdWMzQnNhV05sS0hSdlVHOXpMQ0F3TENCamIyNTBaVzUwS1R0Y2JpQWdJQ0FnSUNBZ1pHVnNhVzFwZEdWeWN5NXpjR3hwWTJVb2RHOVFiM01zSURBc0lHUmxiR2x0YVhSbGNpazdYRzRnSUNBZ0lDQWdJSFJ2VUc5ekt5czdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzl3WlhKaGRHbHZiaUE5UFQwZ0oxeGNYRnduS1NCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J3Y21WMmFXOTFjMDl3WlhKaGRHbHZiaUE5SUdoMWJtc3ViR2x1WlhOYmFpQXRJREZkSUQ4Z2FIVnVheTVzYVc1bGMxdHFJQzBnTVYxYk1GMGdPaUJ1ZFd4c08xeHVJQ0FnSUNBZ0lDQnBaaUFvY0hKbGRtbHZkWE5QY0dWeVlYUnBiMjRnUFQwOUlDY3JKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxiVzkyWlVWUFJrNU1JRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h3Y21WMmFXOTFjMDl3WlhKaGRHbHZiaUE5UFQwZ0p5MG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ1lXUmtSVTlHVGt3Z1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5OGdTR0Z1Wkd4bElFVlBSazVNSUdsdWMyVnlkR2x2Ymk5eVpXMXZkbUZzWEc0Z0lHbG1JQ2h5WlcxdmRtVkZUMFpPVENrZ2UxeHVJQ0FnSUhkb2FXeGxJQ2doYkdsdVpYTmJiR2x1WlhNdWJHVnVaM1JvSUMwZ01WMHBJSHRjYmlBZ0lDQWdJR3hwYm1WekxuQnZjQ2dwTzF4dUlDQWdJQ0FnWkdWc2FXMXBkR1Z5Y3k1d2IzQW9LVHRjYmlBZ0lDQjlYRzRnSUgwZ1pXeHpaU0JwWmlBb1lXUmtSVTlHVGt3cElIdGNiaUFnSUNCc2FXNWxjeTV3ZFhOb0tDY25LVHRjYmlBZ0lDQmtaV3hwYldsMFpYSnpMbkIxYzJnb0oxeGNiaWNwTzF4dUlDQjlYRzRnSUdadmNpQW9iR1YwSUY5cklEMGdNRHNnWDJzZ1BDQnNhVzVsY3k1c1pXNW5kR2dnTFNBeE95QmZheXNyS1NCN1hHNGdJQ0FnYkdsdVpYTmJYMnRkSUQwZ2JHbHVaWE5iWDJ0ZElDc2daR1ZzYVcxcGRHVnljMXRmYTEwN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUd4cGJtVnpMbXB2YVc0b0p5Y3BPMXh1ZlZ4dVhHNHZMeUJYY21Gd2NHVnlJSFJvWVhRZ2MzVndjRzl5ZEhNZ2JYVnNkR2x3YkdVZ1ptbHNaU0J3WVhSamFHVnpJSFpwWVNCallXeHNZbUZqYTNNdVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1lYQndiSGxRWVhSamFHVnpLSFZ1YVVScFptWXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ2FXWWdLSFI1Y0dWdlppQjFibWxFYVdabUlEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJSFZ1YVVScFptWWdQU0J3WVhKelpWQmhkR05vS0hWdWFVUnBabVlwTzF4dUlDQjlYRzVjYmlBZ2JHVjBJR04xY25KbGJuUkpibVJsZUNBOUlEQTdYRzRnSUdaMWJtTjBhVzl1SUhCeWIyTmxjM05KYm1SbGVDZ3BJSHRjYmlBZ0lDQnNaWFFnYVc1a1pYZ2dQU0IxYm1sRWFXWm1XMk4xY25KbGJuUkpibVJsZUNzclhUdGNiaUFnSUNCcFppQW9JV2x1WkdWNEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2IzQjBhVzl1Y3k1amIyMXdiR1YwWlNncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUc5d2RHbHZibk11Ykc5aFpFWnBiR1VvYVc1a1pYZ3NJR1oxYm1OMGFXOXVLR1Z5Y2l3Z1pHRjBZU2tnZTF4dUlDQWdJQ0FnYVdZZ0tHVnljaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYjNCMGFXOXVjeTVqYjIxd2JHVjBaU2hsY25JcE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnNaWFFnZFhCa1lYUmxaRU52Ym5SbGJuUWdQU0JoY0hCc2VWQmhkR05vS0dSaGRHRXNJR2x1WkdWNExDQnZjSFJwYjI1ektUdGNiaUFnSUNBZ0lHOXdkR2x2Ym5NdWNHRjBZMmhsWkNocGJtUmxlQ3dnZFhCa1lYUmxaRU52Ym5SbGJuUXNJR1oxYm1OMGFXOXVLR1Z5Y2lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWlhKeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRzl3ZEdsdmJuTXVZMjl0Y0d4bGRHVW9aWEp5S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJSEJ5YjJObGMzTkpibVJsZUNncE8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZTazdYRzRnSUgxY2JpQWdjSEp2WTJWemMwbHVaR1Y0S0NrN1hHNTlYRzRpWFgwPVxuXG5cbi8qKiovIH0pLFxuLyogMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovcGFyc2VQYXRjaCA9IHBhcnNlUGF0Y2g7XG5cdGZ1bmN0aW9uIHBhcnNlUGF0Y2godW5pRGlmZikge1xuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9vcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuXHQgIHZhciBkaWZmc3RyID0gdW5pRGlmZi5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcblx0ICAgICAgZGVsaW1pdGVycyA9IHVuaURpZmYubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuXHQgICAgICBsaXN0ID0gW10sXG5cdCAgICAgIGkgPSAwO1xuXG5cdCAgZnVuY3Rpb24gcGFyc2VJbmRleCgpIHtcblx0ICAgIHZhciBpbmRleCA9IHt9O1xuXHQgICAgbGlzdC5wdXNoKGluZGV4KTtcblxuXHQgICAgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuXHQgICAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuXHQgICAgICB2YXIgbGluZSA9IGRpZmZzdHJbaV07XG5cblx0ICAgICAgLy8gRmlsZSBoZWFkZXIgZm91bmQsIGVuZCBwYXJzaW5nIGRpZmYgbWV0YWRhdGFcblx0ICAgICAgaWYgKC9eKFxcLVxcLVxcLXxcXCtcXCtcXCt8QEApXFxzLy50ZXN0KGxpbmUpKSB7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIH1cblxuXHQgICAgICAvLyBEaWZmIGluZGV4XG5cdCAgICAgIHZhciBoZWFkZXIgPSAvXig/OkluZGV4OnxkaWZmKD86IC1yIFxcdyspKylcXHMrKC4rPylcXHMqJC8uZXhlYyhsaW5lKTtcblx0ICAgICAgaWYgKGhlYWRlcikge1xuXHQgICAgICAgIGluZGV4LmluZGV4ID0gaGVhZGVyWzFdO1xuXHQgICAgICB9XG5cblx0ICAgICAgaSsrO1xuXHQgICAgfVxuXG5cdCAgICAvLyBQYXJzZSBmaWxlIGhlYWRlcnMgaWYgdGhleSBhcmUgZGVmaW5lZC4gVW5pZmllZCBkaWZmIHJlcXVpcmVzIHRoZW0sIGJ1dFxuXHQgICAgLy8gdGhlcmUncyBubyB0ZWNobmljYWwgaXNzdWVzIHRvIGhhdmUgYW4gaXNvbGF0ZWQgaHVuayB3aXRob3V0IGZpbGUgaGVhZGVyXG5cdCAgICBwYXJzZUZpbGVIZWFkZXIoaW5kZXgpO1xuXHQgICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTtcblxuXHQgICAgLy8gUGFyc2UgaHVua3Ncblx0ICAgIGluZGV4Lmh1bmtzID0gW107XG5cblx0ICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcblx0ICAgICAgdmFyIF9saW5lID0gZGlmZnN0cltpXTtcblxuXHQgICAgICBpZiAoL14oSW5kZXg6fGRpZmZ8XFwtXFwtXFwtfFxcK1xcK1xcKylcXHMvLnRlc3QoX2xpbmUpKSB7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIH0gZWxzZSBpZiAoL15AQC8udGVzdChfbGluZSkpIHtcblx0ICAgICAgICBpbmRleC5odW5rcy5wdXNoKHBhcnNlSHVuaygpKTtcblx0ICAgICAgfSBlbHNlIGlmIChfbGluZSAmJiBvcHRpb25zLnN0cmljdCkge1xuXHQgICAgICAgIC8vIElnbm9yZSB1bmV4cGVjdGVkIGNvbnRlbnQgdW5sZXNzIGluIHN0cmljdCBtb2RlXG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxpbmUgJyArIChpICsgMSkgKyAnICcgKyBKU09OLnN0cmluZ2lmeShfbGluZSkpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIGkrKztcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIC8vIFBhcnNlcyB0aGUgLS0tIGFuZCArKysgaGVhZGVycywgaWYgbm9uZSBhcmUgZm91bmQsIG5vIGxpbmVzXG5cdCAgLy8gYXJlIGNvbnN1bWVkLlxuXHQgIGZ1bmN0aW9uIHBhcnNlRmlsZUhlYWRlcihpbmRleCkge1xuXHQgICAgdmFyIGhlYWRlclBhdHRlcm4gPSAvXigtLS18XFwrXFwrXFwrKVxccysoW1xcUyBdKikoPzpcXHQoLio/KVxccyopPyQvO1xuXHQgICAgdmFyIGZpbGVIZWFkZXIgPSBoZWFkZXJQYXR0ZXJuLmV4ZWMoZGlmZnN0cltpXSk7XG5cdCAgICBpZiAoZmlsZUhlYWRlcikge1xuXHQgICAgICB2YXIga2V5UHJlZml4ID0gZmlsZUhlYWRlclsxXSA9PT0gJy0tLScgPyAnb2xkJyA6ICduZXcnO1xuXHQgICAgICB2YXIgZmlsZU5hbWUgPSBmaWxlSGVhZGVyWzJdLnJlcGxhY2UoL1xcXFxcXFxcL2csICdcXFxcJyk7XG5cdCAgICAgIGlmICgvXlwiLipcIiQvLnRlc3QoZmlsZU5hbWUpKSB7XG5cdCAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdWJzdHIoMSwgZmlsZU5hbWUubGVuZ3RoIC0gMik7XG5cdCAgICAgIH1cblx0ICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0ZpbGVOYW1lJ10gPSBmaWxlTmFtZTtcblx0ICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0hlYWRlciddID0gZmlsZUhlYWRlclszXTtcblxuXHQgICAgICBpKys7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgLy8gUGFyc2VzIGEgaHVua1xuXHQgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBodW5rLlxuXHQgIGZ1bmN0aW9uIHBhcnNlSHVuaygpIHtcblx0ICAgIHZhciBjaHVua0hlYWRlckluZGV4ID0gaSxcblx0ICAgICAgICBjaHVua0hlYWRlckxpbmUgPSBkaWZmc3RyW2krK10sXG5cdCAgICAgICAgY2h1bmtIZWFkZXIgPSBjaHVua0hlYWRlckxpbmUuc3BsaXQoL0BAIC0oXFxkKykoPzosKFxcZCspKT8gXFwrKFxcZCspKD86LChcXGQrKSk/IEBALyk7XG5cblx0ICAgIHZhciBodW5rID0ge1xuXHQgICAgICBvbGRTdGFydDogK2NodW5rSGVhZGVyWzFdLFxuXHQgICAgICBvbGRMaW5lczogK2NodW5rSGVhZGVyWzJdIHx8IDEsXG5cdCAgICAgIG5ld1N0YXJ0OiArY2h1bmtIZWFkZXJbM10sXG5cdCAgICAgIG5ld0xpbmVzOiArY2h1bmtIZWFkZXJbNF0gfHwgMSxcblx0ICAgICAgbGluZXM6IFtdLFxuXHQgICAgICBsaW5lZGVsaW1pdGVyczogW11cblx0ICAgIH07XG5cblx0ICAgIHZhciBhZGRDb3VudCA9IDAsXG5cdCAgICAgICAgcmVtb3ZlQ291bnQgPSAwO1xuXHQgICAgZm9yICg7IGkgPCBkaWZmc3RyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgIC8vIExpbmVzIHN0YXJ0aW5nIHdpdGggJy0tLScgY291bGQgYmUgbWlzdGFrZW4gZm9yIHRoZSBcInJlbW92ZSBsaW5lXCIgb3BlcmF0aW9uXG5cdCAgICAgIC8vIEJ1dCB0aGV5IGNvdWxkIGJlIHRoZSBoZWFkZXIgZm9yIHRoZSBuZXh0IGZpbGUuIFRoZXJlZm9yZSBwcnVuZSBzdWNoIGNhc2VzIG91dC5cblx0ICAgICAgaWYgKGRpZmZzdHJbaV0uaW5kZXhPZignLS0tICcpID09PSAwICYmIGkgKyAyIDwgZGlmZnN0ci5sZW5ndGggJiYgZGlmZnN0cltpICsgMV0uaW5kZXhPZignKysrICcpID09PSAwICYmIGRpZmZzdHJbaSArIDJdLmluZGV4T2YoJ0BAJykgPT09IDApIHtcblx0ICAgICAgICBicmVhaztcblx0ICAgICAgfVxuXHQgICAgICB2YXIgb3BlcmF0aW9uID0gZGlmZnN0cltpXVswXTtcblxuXHQgICAgICBpZiAob3BlcmF0aW9uID09PSAnKycgfHwgb3BlcmF0aW9uID09PSAnLScgfHwgb3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnXFxcXCcpIHtcblx0ICAgICAgICBodW5rLmxpbmVzLnB1c2goZGlmZnN0cltpXSk7XG5cdCAgICAgICAgaHVuay5saW5lZGVsaW1pdGVycy5wdXNoKGRlbGltaXRlcnNbaV0gfHwgJ1xcbicpO1xuXG5cdCAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG5cdCAgICAgICAgICBhZGRDb3VudCsrO1xuXHQgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcblx0ICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG5cdCAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICcgJykge1xuXHQgICAgICAgICAgYWRkQ291bnQrKztcblx0ICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIGJyZWFrO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIC8vIEhhbmRsZSB0aGUgZW1wdHkgYmxvY2sgY291bnQgY2FzZVxuXHQgICAgaWYgKCFhZGRDb3VudCAmJiBodW5rLm5ld0xpbmVzID09PSAxKSB7XG5cdCAgICAgIGh1bmsubmV3TGluZXMgPSAwO1xuXHQgICAgfVxuXHQgICAgaWYgKCFyZW1vdmVDb3VudCAmJiBodW5rLm9sZExpbmVzID09PSAxKSB7XG5cdCAgICAgIGh1bmsub2xkTGluZXMgPSAwO1xuXHQgICAgfVxuXG5cdCAgICAvLyBQZXJmb3JtIG9wdGlvbmFsIHNhbml0eSBjaGVja2luZ1xuXHQgICAgaWYgKG9wdGlvbnMuc3RyaWN0KSB7XG5cdCAgICAgIGlmIChhZGRDb3VudCAhPT0gaHVuay5uZXdMaW5lcykge1xuXHQgICAgICAgIHRocm93IG5ldyBFcnJvcignQWRkZWQgbGluZSBjb3VudCBkaWQgbm90IG1hdGNoIGZvciBodW5rIGF0IGxpbmUgJyArIChjaHVua0hlYWRlckluZGV4ICsgMSkpO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChyZW1vdmVDb3VudCAhPT0gaHVuay5vbGRMaW5lcykge1xuXHQgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVtb3ZlZCBsaW5lIGNvdW50IGRpZCBub3QgbWF0Y2ggZm9yIGh1bmsgYXQgbGluZSAnICsgKGNodW5rSGVhZGVySW5kZXggKyAxKSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIGh1bms7XG5cdCAgfVxuXG5cdCAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuXHQgICAgcGFyc2VJbmRleCgpO1xuXHQgIH1cblxuXHQgIHJldHVybiBsaXN0O1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWFJqYUM5d1lYSnpaUzVxY3lKZExDSnVZVzFsY3lJNld5SndZWEp6WlZCaGRHTm9JaXdpZFc1cFJHbG1aaUlzSW05d2RHbHZibk1pTENKa2FXWm1jM1J5SWl3aWMzQnNhWFFpTENKa1pXeHBiV2wwWlhKeklpd2liV0YwWTJnaUxDSnNhWE4wSWl3aWFTSXNJbkJoY25ObFNXNWtaWGdpTENKcGJtUmxlQ0lzSW5CMWMyZ2lMQ0pzWlc1bmRHZ2lMQ0pzYVc1bElpd2lkR1Z6ZENJc0ltaGxZV1JsY2lJc0ltVjRaV01pTENKd1lYSnpaVVpwYkdWSVpXRmtaWElpTENKb2RXNXJjeUlzSW5CaGNuTmxTSFZ1YXlJc0luTjBjbWxqZENJc0lrVnljbTl5SWl3aVNsTlBUaUlzSW5OMGNtbHVaMmxtZVNJc0ltaGxZV1JsY2xCaGRIUmxjbTRpTENKbWFXeGxTR1ZoWkdWeUlpd2lhMlY1VUhKbFptbDRJaXdpWm1sc1pVNWhiV1VpTENKeVpYQnNZV05sSWl3aWMzVmljM1J5SWl3aVkyaDFibXRJWldGa1pYSkpibVJsZUNJc0ltTm9kVzVyU0dWaFpHVnlUR2x1WlNJc0ltTm9kVzVyU0dWaFpHVnlJaXdpYUhWdWF5SXNJbTlzWkZOMFlYSjBJaXdpYjJ4a1RHbHVaWE1pTENKdVpYZFRkR0Z5ZENJc0ltNWxkMHhwYm1Weklpd2liR2x1WlhNaUxDSnNhVzVsWkdWc2FXMXBkR1Z5Y3lJc0ltRmtaRU52ZFc1MElpd2ljbVZ0YjNabFEyOTFiblFpTENKcGJtUmxlRTltSWl3aWIzQmxjbUYwYVc5dUlsMHNJbTFoY0hCcGJtZHpJam9pT3pzN1owTkJRV2RDUVN4VkxFZEJRVUZCTEZVN1FVRkJWQ3hUUVVGVFFTeFZRVUZVTEVOQlFXOUNReXhQUVVGd1FpeEZRVUV5UXp0QlFVRkJMSE5FUVVGa1F5eFBRVUZqTEhWRlFVRktMRVZCUVVrN08wRkJRMmhFTEUxQlFVbERMRlZCUVZWR0xGRkJRVkZITEV0QlFWSXNRMEZCWXl4eFFrRkJaQ3hEUVVGa08wRkJRVUVzVFVGRFNVTXNZVUZCWVVvc1VVRkJVVXNzUzBGQlVpeERRVUZqTEhOQ1FVRmtMRXRCUVhsRExFVkJSREZFTzBGQlFVRXNUVUZGU1VNc1QwRkJUeXhGUVVaWU8wRkJRVUVzVFVGSFNVTXNTVUZCU1N4RFFVaFNPenRCUVV0QkxGZEJRVk5ETEZWQlFWUXNSMEZCYzBJN1FVRkRjRUlzVVVGQlNVTXNVVUZCVVN4RlFVRmFPMEZCUTBGSUxGTkJRVXRKTEVsQlFVd3NRMEZCVlVRc1MwRkJWanM3UVVGRlFUdEJRVU5CTEZkQlFVOUdMRWxCUVVsTUxGRkJRVkZUTEUxQlFXNUNMRVZCUVRKQ08wRkJRM3BDTEZWQlFVbERMRTlCUVU5V0xGRkJRVkZMTEVOQlFWSXNRMEZCV0RzN1FVRkZRVHRCUVVOQkxGVkJRVWtzZDBKQlFYZENUU3hKUVVGNFFpeERRVUUyUWtRc1NVRkJOMElzUTBGQlNpeEZRVUYzUXp0QlFVTjBRenRCUVVORU96dEJRVVZFTzBGQlEwRXNWVUZCU1VVc1UwRkJWU3d3UTBGQlJDeERRVUUyUTBNc1NVRkJOME1zUTBGQmEwUklMRWxCUVd4RUxFTkJRV0k3UVVGRFFTeFZRVUZKUlN4TlFVRktMRVZCUVZrN1FVRkRWa3dzWTBGQlRVRXNTMEZCVGl4SFFVRmpTeXhQUVVGUExFTkJRVkFzUTBGQlpEdEJRVU5FT3p0QlFVVkVVRHRCUVVORU96dEJRVVZFTzBGQlEwRTdRVUZEUVZNc2IwSkJRV2RDVUN4TFFVRm9RanRCUVVOQlR5eHZRa0ZCWjBKUUxFdEJRV2hDT3p0QlFVVkJPMEZCUTBGQkxGVkJRVTFSTEV0QlFVNHNSMEZCWXl4RlFVRmtPenRCUVVWQkxGZEJRVTlXTEVsQlFVbE1MRkZCUVZGVExFMUJRVzVDTEVWQlFUSkNPMEZCUTNwQ0xGVkJRVWxETEZGQlFVOVdMRkZCUVZGTExFTkJRVklzUTBGQldEczdRVUZGUVN4VlFVRkpMR2xEUVVGcFEwMHNTVUZCYWtNc1EwRkJjME5FTEV0QlFYUkRMRU5CUVVvc1JVRkJhVVE3UVVGREwwTTdRVUZEUkN4UFFVWkVMRTFCUlU4c1NVRkJTU3hOUVVGTlF5eEpRVUZPTEVOQlFWZEVMRXRCUVZnc1EwRkJTaXhGUVVGelFqdEJRVU16UWtnc1kwRkJUVkVzUzBGQlRpeERRVUZaVUN4SlFVRmFMRU5CUVdsQ1VTeFhRVUZxUWp0QlFVTkVMRTlCUmswc1RVRkZRU3hKUVVGSlRpeFRRVUZSV0N4UlFVRlJhMElzVFVGQmNFSXNSVUZCTkVJN1FVRkRha003UVVGRFFTeGpRVUZOTEVsQlFVbERMRXRCUVVvc1EwRkJWU3h0UWtGQmJVSmlMRWxCUVVrc1EwRkJka0lzU1VGQk5FSXNSMEZCTlVJc1IwRkJhME5qTEV0QlFVdERMRk5CUVV3c1EwRkJaVllzUzBGQlppeERRVUUxUXl4RFFVRk9PMEZCUTBRc1QwRklUU3hOUVVkQk8wRkJRMHhNTzBGQlEwUTdRVUZEUmp0QlFVTkdPenRCUVVWRU8wRkJRMEU3UVVGRFFTeFhRVUZUVXl4bFFVRlVMRU5CUVhsQ1VDeExRVUY2UWl4RlFVRm5RenRCUVVNNVFpeFJRVUZOWXl4blFrRkJaMElzTUVOQlFYUkNPMEZCUTBFc1VVRkJUVU1zWVVGQllVUXNZMEZCWTFJc1NVRkJaQ3hEUVVGdFFtSXNVVUZCVVVzc1EwRkJVaXhEUVVGdVFpeERRVUZ1UWp0QlFVTkJMRkZCUVVscFFpeFZRVUZLTEVWQlFXZENPMEZCUTJRc1ZVRkJTVU1zV1VGQldVUXNWMEZCVnl4RFFVRllMRTFCUVd0Q0xFdEJRV3hDTEVkQlFUQkNMRXRCUVRGQ0xFZEJRV3RETEV0QlFXeEVPMEZCUTBFc1ZVRkJTVVVzVjBGQlYwWXNWMEZCVnl4RFFVRllMRVZCUVdOSExFOUJRV1FzUTBGQmMwSXNUMEZCZEVJc1JVRkJLMElzU1VGQkwwSXNRMEZCWmp0QlFVTkJMRlZCUVVrc1UwRkJVMlFzU1VGQlZDeERRVUZqWVN4UlFVRmtMRU5CUVVvc1JVRkJOa0k3UVVGRE0wSkJMRzFDUVVGWFFTeFRRVUZUUlN4TlFVRlVMRU5CUVdkQ0xFTkJRV2hDTEVWQlFXMUNSaXhUUVVGVFppeE5RVUZVTEVkQlFXdENMRU5CUVhKRExFTkJRVmc3UVVGRFJEdEJRVU5FUml4WlFVRk5aMElzV1VGQldTeFZRVUZzUWl4SlFVRm5RME1zVVVGQmFFTTdRVUZEUVdwQ0xGbEJRVTFuUWl4WlFVRlpMRkZCUVd4Q0xFbEJRVGhDUkN4WFFVRlhMRU5CUVZnc1EwRkJPVUk3TzBGQlJVRnFRanRCUVVORU8wRkJRMFk3TzBGQlJVUTdRVUZEUVR0QlFVTkJMRmRCUVZOWExGTkJRVlFzUjBGQmNVSTdRVUZEYmtJc1VVRkJTVmNzYlVKQlFXMUNkRUlzUTBGQmRrSTdRVUZCUVN4UlFVTkpkVUlzYTBKQlFXdENOVUlzVVVGQlVVc3NSMEZCVWl4RFFVUjBRanRCUVVGQkxGRkJSVWwzUWl4alFVRmpSQ3huUWtGQlowSXpRaXhMUVVGb1FpeERRVUZ6UWl3MFEwRkJkRUlzUTBGR2JFSTdPMEZCU1VFc1VVRkJTVFpDTEU5QlFVODdRVUZEVkVNc1owSkJRVlVzUTBGQlEwWXNXVUZCV1N4RFFVRmFMRU5CUkVZN1FVRkZWRWNzWjBKQlFWVXNRMEZCUTBnc1dVRkJXU3hEUVVGYUxFTkJRVVFzU1VGQmJVSXNRMEZHY0VJN1FVRkhWRWtzWjBKQlFWVXNRMEZCUTBvc1dVRkJXU3hEUVVGYUxFTkJTRVk3UVVGSlZFc3NaMEpCUVZVc1EwRkJRMHdzV1VGQldTeERRVUZhTEVOQlFVUXNTVUZCYlVJc1EwRktjRUk3UVVGTFZFMHNZVUZCVHl4RlFVeEZPMEZCVFZSRExITkNRVUZuUWp0QlFVNVFMRXRCUVZnN08wRkJVMEVzVVVGQlNVTXNWMEZCVnl4RFFVRm1PMEZCUVVFc1VVRkRTVU1zWTBGQll5eERRVVJzUWp0QlFVVkJMRmRCUVU5cVF5eEpRVUZKVEN4UlFVRlJVeXhOUVVGdVFpeEZRVUV5UWtvc1IwRkJNMElzUlVGQlowTTdRVUZET1VJN1FVRkRRVHRCUVVOQkxGVkJRVWxNTEZGQlFWRkxMRU5CUVZJc1JVRkJWMnRETEU5QlFWZ3NRMEZCYlVJc1RVRkJia0lzVFVGQkswSXNRMEZCTDBJc1NVRkRUV3hETEVsQlFVa3NRMEZCU2l4SFFVRlJUQ3hSUVVGUlV5eE5RVVIwUWl4SlFVVkxWQ3hSUVVGUlN5eEpRVUZKTEVOQlFWb3NSVUZCWld0RExFOUJRV1lzUTBGQmRVSXNUVUZCZGtJc1RVRkJiVU1zUTBGR2VFTXNTVUZIUzNaRExGRkJRVkZMTEVsQlFVa3NRMEZCV2l4RlFVRmxhME1zVDBGQlppeERRVUYxUWl4SlFVRjJRaXhOUVVGcFF5eERRVWd4UXl4RlFVYzJRenRCUVVONlF6dEJRVU5JTzBGQlEwUXNWVUZCU1VNc1dVRkJXWGhETEZGQlFWRkxMRU5CUVZJc1JVRkJWeXhEUVVGWUxFTkJRV2hDT3p0QlFVVkJMRlZCUVVsdFF5eGpRVUZqTEVkQlFXUXNTVUZCY1VKQkxHTkJRV01zUjBGQmJrTXNTVUZCTUVOQkxHTkJRV01zUjBGQmVFUXNTVUZCSzBSQkxHTkJRV01zU1VGQmFrWXNSVUZCZFVZN1FVRkRja1pXTEdGQlFVdExMRXRCUVV3c1EwRkJWek5DTEVsQlFWZ3NRMEZCWjBKU0xGRkJRVkZMTEVOQlFWSXNRMEZCYUVJN1FVRkRRWGxDTEdGQlFVdE5MR05CUVV3c1EwRkJiMEkxUWl4SlFVRndRaXhEUVVGNVFrNHNWMEZCVjBjc1EwRkJXQ3hMUVVGcFFpeEpRVUV4UXpzN1FVRkZRU3haUVVGSmJVTXNZMEZCWXl4SFFVRnNRaXhGUVVGMVFqdEJRVU55UWtnN1FVRkRSQ3hUUVVaRUxFMUJSVThzU1VGQlNVY3NZMEZCWXl4SFFVRnNRaXhGUVVGMVFqdEJRVU0xUWtZN1FVRkRSQ3hUUVVaTkxFMUJSVUVzU1VGQlNVVXNZMEZCWXl4SFFVRnNRaXhGUVVGMVFqdEJRVU0xUWtnN1FVRkRRVU03UVVGRFJEdEJRVU5HTEU5QldrUXNUVUZaVHp0QlFVTk1PMEZCUTBRN1FVRkRSanM3UVVGRlJEdEJRVU5CTEZGQlFVa3NRMEZCUTBRc1VVRkJSQ3hKUVVGaFVDeExRVUZMU1N4UlFVRk1MRXRCUVd0Q0xFTkJRVzVETEVWQlFYTkRPMEZCUTNCRFNpeFhRVUZMU1N4UlFVRk1MRWRCUVdkQ0xFTkJRV2hDTzBGQlEwUTdRVUZEUkN4UlFVRkpMRU5CUVVOSkxGZEJRVVFzU1VGQlowSlNMRXRCUVV0RkxGRkJRVXdzUzBGQmEwSXNRMEZCZEVNc1JVRkJlVU03UVVGRGRrTkdMRmRCUVV0RkxGRkJRVXdzUjBGQlowSXNRMEZCYUVJN1FVRkRSRHM3UVVGRlJEdEJRVU5CTEZGQlFVbHFReXhSUVVGUmEwSXNUVUZCV2l4RlFVRnZRanRCUVVOc1FpeFZRVUZKYjBJc1lVRkJZVkFzUzBGQlMwa3NVVUZCZEVJc1JVRkJaME03UVVGRE9VSXNZMEZCVFN4SlFVRkphRUlzUzBGQlNpeERRVUZWTEhORVFVRnpSRk1zYlVKQlFXMUNMRU5CUVhwRkxFTkJRVllzUTBGQlRqdEJRVU5FTzBGQlEwUXNWVUZCU1Zjc1owSkJRV2RDVWl4TFFVRkxSU3hSUVVGNlFpeEZRVUZ0UXp0QlFVTnFReXhqUVVGTkxFbEJRVWxrTEV0QlFVb3NRMEZCVlN4M1JFRkJkMFJUTEcxQ1FVRnRRaXhEUVVFelJTeERRVUZXTEVOQlFVNDdRVUZEUkR0QlFVTkdPenRCUVVWRUxGZEJRVTlITEVsQlFWQTdRVUZEUkRzN1FVRkZSQ3hUUVVGUGVrSXNTVUZCU1V3c1VVRkJVVk1zVFVGQmJrSXNSVUZCTWtJN1FVRkRla0pJTzBGQlEwUTdPMEZCUlVRc1UwRkJUMFlzU1VGQlVEdEJRVU5FSWl3aVptbHNaU0k2SW5CaGNuTmxMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpYaHdiM0owSUdaMWJtTjBhVzl1SUhCaGNuTmxVR0YwWTJnb2RXNXBSR2xtWml3Z2IzQjBhVzl1Y3lBOUlIdDlLU0I3WEc0Z0lHeGxkQ0JrYVdabWMzUnlJRDBnZFc1cFJHbG1aaTV6Y0d4cGRDZ3ZYRnh5WEZ4dWZGdGNYRzVjWEhaY1hHWmNYSEpjWEhnNE5WMHZLU3hjYmlBZ0lDQWdJR1JsYkdsdGFYUmxjbk1nUFNCMWJtbEVhV1ptTG0xaGRHTm9LQzljWEhKY1hHNThXMXhjYmx4Y2RseGNabHhjY2x4Y2VEZzFYUzluS1NCOGZDQmJYU3hjYmlBZ0lDQWdJR3hwYzNRZ1BTQmJYU3hjYmlBZ0lDQWdJR2tnUFNBd08xeHVYRzRnSUdaMWJtTjBhVzl1SUhCaGNuTmxTVzVrWlhnb0tTQjdYRzRnSUNBZ2JHVjBJR2x1WkdWNElEMGdlMzA3WEc0Z0lDQWdiR2x6ZEM1d2RYTm9LR2x1WkdWNEtUdGNibHh1SUNBZ0lDOHZJRkJoY25ObElHUnBabVlnYldWMFlXUmhkR0ZjYmlBZ0lDQjNhR2xzWlNBb2FTQThJR1JwWm1aemRISXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQnNaWFFnYkdsdVpTQTlJR1JwWm1aemRISmJhVjA3WEc1Y2JpQWdJQ0FnSUM4dklFWnBiR1VnYUdWaFpHVnlJR1p2ZFc1a0xDQmxibVFnY0dGeWMybHVaeUJrYVdabUlHMWxkR0ZrWVhSaFhHNGdJQ0FnSUNCcFppQW9MMTRvWEZ3dFhGd3RYRnd0ZkZ4Y0sxeGNLMXhjSzN4QVFDbGNYSE12TG5SbGMzUW9iR2x1WlNrcElIdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJRVJwWm1ZZ2FXNWtaWGhjYmlBZ0lDQWdJR3hsZENCb1pXRmtaWElnUFNBb0wxNG9QenBKYm1SbGVEcDhaR2xtWmlnL09pQXRjaUJjWEhjcktTc3BYRnh6S3lndUt6OHBYRnh6S2lRdktTNWxlR1ZqS0d4cGJtVXBPMXh1SUNBZ0lDQWdhV1lnS0dobFlXUmxjaWtnZTF4dUlDQWdJQ0FnSUNCcGJtUmxlQzVwYm1SbGVDQTlJR2hsWVdSbGNsc3hYVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVNzck8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklGQmhjbk5sSUdacGJHVWdhR1ZoWkdWeWN5QnBaaUIwYUdWNUlHRnlaU0JrWldacGJtVmtMaUJWYm1sbWFXVmtJR1JwWm1ZZ2NtVnhkV2x5WlhNZ2RHaGxiU3dnWW5WMFhHNGdJQ0FnTHk4Z2RHaGxjbVVuY3lCdWJ5QjBaV05vYm1sallXd2dhWE56ZFdWeklIUnZJR2hoZG1VZ1lXNGdhWE52YkdGMFpXUWdhSFZ1YXlCM2FYUm9iM1YwSUdacGJHVWdhR1ZoWkdWeVhHNGdJQ0FnY0dGeWMyVkdhV3hsU0dWaFpHVnlLR2x1WkdWNEtUdGNiaUFnSUNCd1lYSnpaVVpwYkdWSVpXRmtaWElvYVc1a1pYZ3BPMXh1WEc0Z0lDQWdMeThnVUdGeWMyVWdhSFZ1YTNOY2JpQWdJQ0JwYm1SbGVDNW9kVzVyY3lBOUlGdGRPMXh1WEc0Z0lDQWdkMmhwYkdVZ0tHa2dQQ0JrYVdabWMzUnlMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdiR1YwSUd4cGJtVWdQU0JrYVdabWMzUnlXMmxkTzF4dVhHNGdJQ0FnSUNCcFppQW9MMTRvU1c1a1pYZzZmR1JwWm1aOFhGd3RYRnd0WEZ3dGZGeGNLMXhjSzF4Y0t5bGNYSE12TG5SbGMzUW9iR2x1WlNrcElIdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tDOWVRRUF2TG5SbGMzUW9iR2x1WlNrcElIdGNiaUFnSUNBZ0lDQWdhVzVrWlhndWFIVnVhM011Y0hWemFDaHdZWEp6WlVoMWJtc29LU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0d4cGJtVWdKaVlnYjNCMGFXOXVjeTV6ZEhKcFkzUXBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z1NXZHViM0psSUhWdVpYaHdaV04wWldRZ1kyOXVkR1Z1ZENCMWJteGxjM01nYVc0Z2MzUnlhV04wSUcxdlpHVmNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZFZibXR1YjNkdUlHeHBibVVnSnlBcklDaHBJQ3NnTVNrZ0t5QW5JQ2NnS3lCS1UwOU9Mbk4wY21sdVoybG1lU2hzYVc1bEtTazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnBLeXM3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHk4Z1VHRnljMlZ6SUhSb1pTQXRMUzBnWVc1a0lDc3JLeUJvWldGa1pYSnpMQ0JwWmlCdWIyNWxJR0Z5WlNCbWIzVnVaQ3dnYm04Z2JHbHVaWE5jYmlBZ0x5OGdZWEpsSUdOdmJuTjFiV1ZrTGx4dUlDQm1kVzVqZEdsdmJpQndZWEp6WlVacGJHVklaV0ZrWlhJb2FXNWtaWGdwSUh0Y2JpQWdJQ0JqYjI1emRDQm9aV0ZrWlhKUVlYUjBaWEp1SUQwZ0wxNG9MUzB0ZkZ4Y0sxeGNLMXhjS3lsY1hITXJLRnRjWEZNZ1hTb3BLRDg2WEZ4MEtDNHFQeWxjWEhNcUtUOGtMenRjYmlBZ0lDQmpiMjV6ZENCbWFXeGxTR1ZoWkdWeUlEMGdhR1ZoWkdWeVVHRjBkR1Z5Ymk1bGVHVmpLR1JwWm1aemRISmJhVjBwTzF4dUlDQWdJR2xtSUNobWFXeGxTR1ZoWkdWeUtTQjdYRzRnSUNBZ0lDQnNaWFFnYTJWNVVISmxabWw0SUQwZ1ptbHNaVWhsWVdSbGNsc3hYU0E5UFQwZ0p5MHRMU2NnUHlBbmIyeGtKeUE2SUNkdVpYY25PMXh1SUNBZ0lDQWdiR1YwSUdacGJHVk9ZVzFsSUQwZ1ptbHNaVWhsWVdSbGNsc3lYUzV5WlhCc1lXTmxLQzljWEZ4Y1hGeGNYQzluTENBblhGeGNYQ2NwTzF4dUlDQWdJQ0FnYVdZZ0tDOWVYQ0l1S2x3aUpDOHVkR1Z6ZENobWFXeGxUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdabWxzWlU1aGJXVWdQU0JtYVd4bFRtRnRaUzV6ZFdKemRISW9NU3dnWm1sc1pVNWhiV1V1YkdWdVozUm9JQzBnTWlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcGJtUmxlRnRyWlhsUWNtVm1hWGdnS3lBblJtbHNaVTVoYldVblhTQTlJR1pwYkdWT1lXMWxPMXh1SUNBZ0lDQWdhVzVrWlhoYmEyVjVVSEpsWm1sNElDc2dKMGhsWVdSbGNpZGRJRDBnWm1sc1pVaGxZV1JsY2xzelhUdGNibHh1SUNBZ0lDQWdhU3NyTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4dklGQmhjbk5sY3lCaElHaDFibXRjYmlBZ0x5OGdWR2hwY3lCaGMzTjFiV1Z6SUhSb1lYUWdkMlVnWVhKbElHRjBJSFJvWlNCemRHRnlkQ0J2WmlCaElHaDFibXN1WEc0Z0lHWjFibU4wYVc5dUlIQmhjbk5sU0hWdWF5Z3BJSHRjYmlBZ0lDQnNaWFFnWTJoMWJtdElaV0ZrWlhKSmJtUmxlQ0E5SUdrc1hHNGdJQ0FnSUNBZ0lHTm9kVzVyU0dWaFpHVnlUR2x1WlNBOUlHUnBabVp6ZEhKYmFTc3JYU3hjYmlBZ0lDQWdJQ0FnWTJoMWJtdElaV0ZrWlhJZ1BTQmphSFZ1YTBobFlXUmxja3hwYm1VdWMzQnNhWFFvTDBCQUlDMG9YRnhrS3lrb1B6b3NLRnhjWkNzcEtUOGdYRndyS0Z4Y1pDc3BLRDg2TENoY1hHUXJLU2svSUVCQUx5azdYRzVjYmlBZ0lDQnNaWFFnYUhWdWF5QTlJSHRjYmlBZ0lDQWdJRzlzWkZOMFlYSjBPaUFyWTJoMWJtdElaV0ZrWlhKYk1WMHNYRzRnSUNBZ0lDQnZiR1JNYVc1bGN6b2dLMk5vZFc1clNHVmhaR1Z5V3pKZElIeDhJREVzWEc0Z0lDQWdJQ0J1WlhkVGRHRnlkRG9nSzJOb2RXNXJTR1ZoWkdWeVd6TmRMRnh1SUNBZ0lDQWdibVYzVEdsdVpYTTZJQ3RqYUhWdWEwaGxZV1JsY2xzMFhTQjhmQ0F4TEZ4dUlDQWdJQ0FnYkdsdVpYTTZJRnRkTEZ4dUlDQWdJQ0FnYkdsdVpXUmxiR2x0YVhSbGNuTTZJRnRkWEc0Z0lDQWdmVHRjYmx4dUlDQWdJR3hsZENCaFpHUkRiM1Z1ZENBOUlEQXNYRzRnSUNBZ0lDQWdJSEpsYlc5MlpVTnZkVzUwSUQwZ01EdGNiaUFnSUNCbWIzSWdLRHNnYVNBOElHUnBabVp6ZEhJdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQzh2SUV4cGJtVnpJSE4wWVhKMGFXNW5JSGRwZEdnZ0p5MHRMU2NnWTI5MWJHUWdZbVVnYldsemRHRnJaVzRnWm05eUlIUm9aU0JjSW5KbGJXOTJaU0JzYVc1bFhDSWdiM0JsY21GMGFXOXVYRzRnSUNBZ0lDQXZMeUJDZFhRZ2RHaGxlU0JqYjNWc1pDQmlaU0IwYUdVZ2FHVmhaR1Z5SUdadmNpQjBhR1VnYm1WNGRDQm1hV3hsTGlCVWFHVnlaV1p2Y21VZ2NISjFibVVnYzNWamFDQmpZWE5sY3lCdmRYUXVYRzRnSUNBZ0lDQnBaaUFvWkdsbVpuTjBjbHRwWFM1cGJtUmxlRTltS0NjdExTMGdKeWtnUFQwOUlEQmNiaUFnSUNBZ0lDQWdJQ0FnSUNZbUlDaHBJQ3NnTWlBOElHUnBabVp6ZEhJdWJHVnVaM1JvS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdKaVlnWkdsbVpuTjBjbHRwSUNzZ01WMHVhVzVrWlhoUFppZ25LeXNySUNjcElEMDlQU0F3WEc0Z0lDQWdJQ0FnSUNBZ0lDQW1KaUJrYVdabWMzUnlXMmtnS3lBeVhTNXBibVJsZUU5bUtDZEFRQ2NwSUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JzWlhRZ2IzQmxjbUYwYVc5dUlEMGdaR2xtWm5OMGNsdHBYVnN3WFR0Y2JseHVJQ0FnSUNBZ2FXWWdLRzl3WlhKaGRHbHZiaUE5UFQwZ0p5c25JSHg4SUc5d1pYSmhkR2x2YmlBOVBUMGdKeTBuSUh4OElHOXdaWEpoZEdsdmJpQTlQVDBnSnlBbklIeDhJRzl3WlhKaGRHbHZiaUE5UFQwZ0oxeGNYRnduS1NCN1hHNGdJQ0FnSUNBZ0lHaDFibXN1YkdsdVpYTXVjSFZ6YUNoa2FXWm1jM1J5VzJsZEtUdGNiaUFnSUNBZ0lDQWdhSFZ1YXk1c2FXNWxaR1ZzYVcxcGRHVnljeTV3ZFhOb0tHUmxiR2x0YVhSbGNuTmJhVjBnZkh3Z0oxeGNiaWNwTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2h2Y0dWeVlYUnBiMjRnUFQwOUlDY3JKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHRmtaRU52ZFc1MEt5czdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvYjNCbGNtRjBhVzl1SUQwOVBTQW5MU2NwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlaVzF2ZG1WRGIzVnVkQ3NyTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHOXdaWEpoZEdsdmJpQTlQVDBnSnlBbktTQjdYRzRnSUNBZ0lDQWdJQ0FnWVdSa1EyOTFiblFyS3p0Y2JpQWdJQ0FnSUNBZ0lDQnlaVzF2ZG1WRGIzVnVkQ3NyTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJJWVc1a2JHVWdkR2hsSUdWdGNIUjVJR0pzYjJOcklHTnZkVzUwSUdOaGMyVmNiaUFnSUNCcFppQW9JV0ZrWkVOdmRXNTBJQ1ltSUdoMWJtc3VibVYzVEdsdVpYTWdQVDA5SURFcElIdGNiaUFnSUNBZ0lHaDFibXN1Ym1WM1RHbHVaWE1nUFNBd08xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb0lYSmxiVzkyWlVOdmRXNTBJQ1ltSUdoMWJtc3ViMnhrVEdsdVpYTWdQVDA5SURFcElIdGNiaUFnSUNBZ0lHaDFibXN1YjJ4a1RHbHVaWE1nUFNBd08xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklGQmxjbVp2Y20wZ2IzQjBhVzl1WVd3Z2MyRnVhWFI1SUdOb1pXTnJhVzVuWEc0Z0lDQWdhV1lnS0c5d2RHbHZibk11YzNSeWFXTjBLU0I3WEc0Z0lDQWdJQ0JwWmlBb1lXUmtRMjkxYm5RZ0lUMDlJR2gxYm1zdWJtVjNUR2x1WlhNcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEJaR1JsWkNCc2FXNWxJR052ZFc1MElHUnBaQ0J1YjNRZ2JXRjBZMmdnWm05eUlHaDFibXNnWVhRZ2JHbHVaU0FuSUNzZ0tHTm9kVzVyU0dWaFpHVnlTVzVrWlhnZ0t5QXhLU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb2NtVnRiM1psUTI5MWJuUWdJVDA5SUdoMWJtc3ViMnhrVEdsdVpYTXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RTWlcxdmRtVmtJR3hwYm1VZ1kyOTFiblFnWkdsa0lHNXZkQ0J0WVhSamFDQm1iM0lnYUhWdWF5QmhkQ0JzYVc1bElDY2dLeUFvWTJoMWJtdElaV0ZrWlhKSmJtUmxlQ0FySURFcEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnYUhWdWF6dGNiaUFnZlZ4dVhHNGdJSGRvYVd4bElDaHBJRHdnWkdsbVpuTjBjaTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQndZWEp6WlVsdVpHVjRLQ2s3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnYkdsemREdGNibjFjYmlKZGZRPT1cblxuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL1widXNlIHN0cmljdFwiO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0ZXhwb3J0c1tcImRlZmF1bHRcIl0gPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2Z1bmN0aW9uIChzdGFydCwgbWluTGluZSwgbWF4TGluZSkge1xuXHQgIHZhciB3YW50Rm9yd2FyZCA9IHRydWUsXG5cdCAgICAgIGJhY2t3YXJkRXhoYXVzdGVkID0gZmFsc2UsXG5cdCAgICAgIGZvcndhcmRFeGhhdXN0ZWQgPSBmYWxzZSxcblx0ICAgICAgbG9jYWxPZmZzZXQgPSAxO1xuXG5cdCAgcmV0dXJuIGZ1bmN0aW9uIGl0ZXJhdG9yKCkge1xuXHQgICAgaWYgKHdhbnRGb3J3YXJkICYmICFmb3J3YXJkRXhoYXVzdGVkKSB7XG5cdCAgICAgIGlmIChiYWNrd2FyZEV4aGF1c3RlZCkge1xuXHQgICAgICAgIGxvY2FsT2Zmc2V0Kys7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgd2FudEZvcndhcmQgPSBmYWxzZTtcblx0ICAgICAgfVxuXG5cdCAgICAgIC8vIENoZWNrIGlmIHRyeWluZyB0byBmaXQgYmV5b25kIHRleHQgbGVuZ3RoLCBhbmQgaWYgbm90LCBjaGVjayBpdCBmaXRzXG5cdCAgICAgIC8vIGFmdGVyIG9mZnNldCBsb2NhdGlvbiAob3IgZGVzaXJlZCBsb2NhdGlvbiBvbiBmaXJzdCBpdGVyYXRpb24pXG5cdCAgICAgIGlmIChzdGFydCArIGxvY2FsT2Zmc2V0IDw9IG1heExpbmUpIHtcblx0ICAgICAgICByZXR1cm4gbG9jYWxPZmZzZXQ7XG5cdCAgICAgIH1cblxuXHQgICAgICBmb3J3YXJkRXhoYXVzdGVkID0gdHJ1ZTtcblx0ICAgIH1cblxuXHQgICAgaWYgKCFiYWNrd2FyZEV4aGF1c3RlZCkge1xuXHQgICAgICBpZiAoIWZvcndhcmRFeGhhdXN0ZWQpIHtcblx0ICAgICAgICB3YW50Rm9yd2FyZCA9IHRydWU7XG5cdCAgICAgIH1cblxuXHQgICAgICAvLyBDaGVjayBpZiB0cnlpbmcgdG8gZml0IGJlZm9yZSB0ZXh0IGJlZ2lubmluZywgYW5kIGlmIG5vdCwgY2hlY2sgaXQgZml0c1xuXHQgICAgICAvLyBiZWZvcmUgb2Zmc2V0IGxvY2F0aW9uXG5cdCAgICAgIGlmIChtaW5MaW5lIDw9IHN0YXJ0IC0gbG9jYWxPZmZzZXQpIHtcblx0ICAgICAgICByZXR1cm4gLWxvY2FsT2Zmc2V0Kys7XG5cdCAgICAgIH1cblxuXHQgICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IHRydWU7XG5cdCAgICAgIHJldHVybiBpdGVyYXRvcigpO1xuXHQgICAgfVxuXG5cdCAgICAvLyBXZSB0cmllZCB0byBmaXQgaHVuayBiZWZvcmUgdGV4dCBiZWdpbm5pbmcgYW5kIGJleW9uZCB0ZXh0IGxlbmd0aCwgdGhlblxuXHQgICAgLy8gaHVuayBjYW4ndCBmaXQgb24gdGhlIHRleHQuIFJldHVybiB1bmRlZmluZWRcblx0ICB9O1xuXHR9O1xuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkxZEdsc0wyUnBjM1JoYm1ObExXbDBaWEpoZEc5eUxtcHpJbDBzSW01aGJXVnpJanBiSW5OMFlYSjBJaXdpYldsdVRHbHVaU0lzSW0xaGVFeHBibVVpTENKM1lXNTBSbTl5ZDJGeVpDSXNJbUpoWTJ0M1lYSmtSWGhvWVhWemRHVmtJaXdpWm05eWQyRnlaRVY0YUdGMWMzUmxaQ0lzSW14dlkyRnNUMlptYzJWMElpd2lhWFJsY21GMGIzSWlYU3dpYldGd2NHbHVaM01pT2lJN096czdORU5CUjJVc1ZVRkJVMEVzUzBGQlZDeEZRVUZuUWtNc1QwRkJhRUlzUlVGQmVVSkRMRTlCUVhwQ0xFVkJRV3RETzBGQlF5OURMRTFCUVVsRExHTkJRV01zU1VGQmJFSTdRVUZCUVN4TlFVTkpReXh2UWtGQmIwSXNTMEZFZUVJN1FVRkJRU3hOUVVWSlF5eHRRa0ZCYlVJc1MwRkdka0k3UVVGQlFTeE5RVWRKUXl4alFVRmpMRU5CU0d4Q096dEJRVXRCTEZOQlFVOHNVMEZCVTBNc1VVRkJWQ3hIUVVGdlFqdEJRVU42UWl4UlFVRkpTaXhsUVVGbExFTkJRVU5GTEdkQ1FVRndRaXhGUVVGelF6dEJRVU53UXl4VlFVRkpSQ3hwUWtGQlNpeEZRVUYxUWp0QlFVTnlRa1U3UVVGRFJDeFBRVVpFTEUxQlJVODdRVUZEVEVnc2MwSkJRV01zUzBGQlpEdEJRVU5FT3p0QlFVVkVPMEZCUTBFN1FVRkRRU3hWUVVGSlNDeFJRVUZSVFN4WFFVRlNMRWxCUVhWQ1NpeFBRVUV6UWl4RlFVRnZRenRCUVVOc1F5eGxRVUZQU1N4WFFVRlFPMEZCUTBRN08wRkJSVVJFTEhsQ1FVRnRRaXhKUVVGdVFqdEJRVU5FT3p0QlFVVkVMRkZCUVVrc1EwRkJRMFFzYVVKQlFVd3NSVUZCZDBJN1FVRkRkRUlzVlVGQlNTeERRVUZEUXl4blFrRkJUQ3hGUVVGMVFqdEJRVU55UWtZc2MwSkJRV01zU1VGQlpEdEJRVU5FT3p0QlFVVkVPMEZCUTBFN1FVRkRRU3hWUVVGSlJpeFhRVUZYUkN4UlFVRlJUU3hYUVVGMlFpeEZRVUZ2UXp0QlFVTnNReXhsUVVGUExFTkJRVU5CTEdGQlFWSTdRVUZEUkRzN1FVRkZSRVlzTUVKQlFXOUNMRWxCUVhCQ08wRkJRMEVzWVVGQlQwY3NWVUZCVUR0QlFVTkVPenRCUVVWRU8wRkJRMEU3UVVGRFJDeEhRV3hEUkR0QlFXMURSQ3hESWl3aVptbHNaU0k2SW1ScGMzUmhibU5sTFdsMFpYSmhkRzl5TG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeThnU1hSbGNtRjBiM0lnZEdoaGRDQjBjbUYyWlhKelpYTWdhVzRnZEdobElISmhibWRsSUc5bUlGdHRhVzRzSUcxaGVGMHNJSE4wWlhCd2FXNW5YRzR2THlCaWVTQmthWE4wWVc1alpTQm1jbTl0SUdFZ1oybDJaVzRnYzNSaGNuUWdjRzl6YVhScGIyNHVJRWt1WlM0Z1ptOXlJRnN3TENBMFhTd2dkMmwwYUZ4dUx5OGdjM1JoY25RZ2IyWWdNaXdnZEdocGN5QjNhV3hzSUdsMFpYSmhkR1VnTWl3Z015d2dNU3dnTkN3Z01DNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHWjFibU4wYVc5dUtITjBZWEowTENCdGFXNU1hVzVsTENCdFlYaE1hVzVsS1NCN1hHNGdJR3hsZENCM1lXNTBSbTl5ZDJGeVpDQTlJSFJ5ZFdVc1hHNGdJQ0FnSUNCaVlXTnJkMkZ5WkVWNGFHRjFjM1JsWkNBOUlHWmhiSE5sTEZ4dUlDQWdJQ0FnWm05eWQyRnlaRVY0YUdGMWMzUmxaQ0E5SUdaaGJITmxMRnh1SUNBZ0lDQWdiRzlqWVd4UFptWnpaWFFnUFNBeE8xeHVYRzRnSUhKbGRIVnliaUJtZFc1amRHbHZiaUJwZEdWeVlYUnZjaWdwSUh0Y2JpQWdJQ0JwWmlBb2QyRnVkRVp2Y25kaGNtUWdKaVlnSVdadmNuZGhjbVJGZUdoaGRYTjBaV1FwSUh0Y2JpQWdJQ0FnSUdsbUlDaGlZV05yZDJGeVpFVjRhR0YxYzNSbFpDa2dlMXh1SUNBZ0lDQWdJQ0JzYjJOaGJFOW1abk5sZENzck8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2QyRnVkRVp2Y25kaGNtUWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnUTJobFkyc2dhV1lnZEhKNWFXNW5JSFJ2SUdacGRDQmlaWGx2Ym1RZ2RHVjRkQ0JzWlc1bmRHZ3NJR0Z1WkNCcFppQnViM1FzSUdOb1pXTnJJR2wwSUdacGRITmNiaUFnSUNBZ0lDOHZJR0ZtZEdWeUlHOW1abk5sZENCc2IyTmhkR2x2YmlBb2IzSWdaR1Z6YVhKbFpDQnNiMk5oZEdsdmJpQnZiaUJtYVhKemRDQnBkR1Z5WVhScGIyNHBYRzRnSUNBZ0lDQnBaaUFvYzNSaGNuUWdLeUJzYjJOaGJFOW1abk5sZENBOFBTQnRZWGhNYVc1bEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnNiMk5oYkU5bVpuTmxkRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWm05eWQyRnlaRVY0YUdGMWMzUmxaQ0E5SUhSeWRXVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLQ0ZpWVdOcmQyRnlaRVY0YUdGMWMzUmxaQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tDRm1iM0ozWVhKa1JYaG9ZWFZ6ZEdWa0tTQjdYRzRnSUNBZ0lDQWdJSGRoYm5SR2IzSjNZWEprSUQwZ2RISjFaVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnTHk4Z1EyaGxZMnNnYVdZZ2RISjVhVzVuSUhSdklHWnBkQ0JpWldadmNtVWdkR1Y0ZENCaVpXZHBibTVwYm1jc0lHRnVaQ0JwWmlCdWIzUXNJR05vWldOcklHbDBJR1pwZEhOY2JpQWdJQ0FnSUM4dklHSmxabTl5WlNCdlptWnpaWFFnYkc5allYUnBiMjVjYmlBZ0lDQWdJR2xtSUNodGFXNU1hVzVsSUR3OUlITjBZWEowSUMwZ2JHOWpZV3hQWm1aelpYUXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJQzFzYjJOaGJFOW1abk5sZENzck8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQmlZV05yZDJGeVpFVjRhR0YxYzNSbFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYVhSbGNtRjBiM0lvS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCWFpTQjBjbWxsWkNCMGJ5Qm1hWFFnYUhWdWF5QmlaV1p2Y21VZ2RHVjRkQ0JpWldkcGJtNXBibWNnWVc1a0lHSmxlVzl1WkNCMFpYaDBJR3hsYm1kMGFDd2dkR2hsYmx4dUlDQWdJQzh2SUdoMWJtc2dZMkZ1SjNRZ1ptbDBJRzl1SUhSb1pTQjBaWGgwTGlCU1pYUjFjbTRnZFc1a1pXWnBibVZrWEc0Z0lIMDdYRzU5WEc0aVhYMD1cblxuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NhbGNMaW5lQ291bnQgPSBjYWxjTGluZUNvdW50O1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9tZXJnZSA9IG1lcmdlO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2NyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3BhcnNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9mdW5jdGlvbiBjYWxjTGluZUNvdW50KGh1bmspIHtcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9jYWxjT2xkTmV3TGluZUNvdW50ID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jYWxjT2xkTmV3TGluZUNvdW50KGh1bmsubGluZXMpLFxuXHQgICAgICBvbGRMaW5lcyA9IF9jYWxjT2xkTmV3TGluZUNvdW50Lm9sZExpbmVzLFxuXHQgICAgICBuZXdMaW5lcyA9IF9jYWxjT2xkTmV3TGluZUNvdW50Lm5ld0xpbmVzO1xuXG5cdCAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcblx0ICAgIGh1bmsub2xkTGluZXMgPSBvbGRMaW5lcztcblx0ICB9IGVsc2Uge1xuXHQgICAgZGVsZXRlIGh1bmsub2xkTGluZXM7XG5cdCAgfVxuXG5cdCAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcblx0ICAgIGh1bmsubmV3TGluZXMgPSBuZXdMaW5lcztcblx0ICB9IGVsc2Uge1xuXHQgICAgZGVsZXRlIGh1bmsubmV3TGluZXM7XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gbWVyZ2UobWluZSwgdGhlaXJzLCBiYXNlKSB7XG5cdCAgbWluZSA9IGxvYWRQYXRjaChtaW5lLCBiYXNlKTtcblx0ICB0aGVpcnMgPSBsb2FkUGF0Y2godGhlaXJzLCBiYXNlKTtcblxuXHQgIHZhciByZXQgPSB7fTtcblxuXHQgIC8vIEZvciBpbmRleCB3ZSBqdXN0IGxldCBpdCBwYXNzIHRocm91Z2ggYXMgaXQgZG9lc24ndCBoYXZlIGFueSBuZWNlc3NhcnkgbWVhbmluZy5cblx0ICAvLyBMZWF2aW5nIHNhbml0eSBjaGVja3Mgb24gdGhpcyB0byB0aGUgQVBJIGNvbnN1bWVyIHRoYXQgbWF5IGtub3cgbW9yZSBhYm91dCB0aGVcblx0ICAvLyBtZWFuaW5nIGluIHRoZWlyIG93biBjb250ZXh0LlxuXHQgIGlmIChtaW5lLmluZGV4IHx8IHRoZWlycy5pbmRleCkge1xuXHQgICAgcmV0LmluZGV4ID0gbWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXg7XG5cdCAgfVxuXG5cdCAgaWYgKG1pbmUubmV3RmlsZU5hbWUgfHwgdGhlaXJzLm5ld0ZpbGVOYW1lKSB7XG5cdCAgICBpZiAoIWZpbGVOYW1lQ2hhbmdlZChtaW5lKSkge1xuXHQgICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIG91cnMsIHVzZSB0aGVpcnMgKGFuZCBvdXJzIGlmIHRoZWlycyBkb2VzIG5vdCBleGlzdClcblx0ICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gdGhlaXJzLm9sZEZpbGVOYW1lIHx8IG1pbmUub2xkRmlsZU5hbWU7XG5cdCAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHRoZWlycy5uZXdGaWxlTmFtZSB8fCBtaW5lLm5ld0ZpbGVOYW1lO1xuXHQgICAgICByZXQub2xkSGVhZGVyID0gdGhlaXJzLm9sZEhlYWRlciB8fCBtaW5lLm9sZEhlYWRlcjtcblx0ICAgICAgcmV0Lm5ld0hlYWRlciA9IHRoZWlycy5uZXdIZWFkZXIgfHwgbWluZS5uZXdIZWFkZXI7XG5cdCAgICB9IGVsc2UgaWYgKCFmaWxlTmFtZUNoYW5nZWQodGhlaXJzKSkge1xuXHQgICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIHRoZWlycywgdXNlIG91cnNcblx0ICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gbWluZS5vbGRGaWxlTmFtZTtcblx0ICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gbWluZS5uZXdGaWxlTmFtZTtcblx0ICAgICAgcmV0Lm9sZEhlYWRlciA9IG1pbmUub2xkSGVhZGVyO1xuXHQgICAgICByZXQubmV3SGVhZGVyID0gbWluZS5uZXdIZWFkZXI7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICAvLyBCb3RoIGNoYW5nZWQuLi4gZmlndXJlIGl0IG91dFxuXHQgICAgICByZXQub2xkRmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUub2xkRmlsZU5hbWUsIHRoZWlycy5vbGRGaWxlTmFtZSk7XG5cdCAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5uZXdGaWxlTmFtZSwgdGhlaXJzLm5ld0ZpbGVOYW1lKTtcblx0ICAgICAgcmV0Lm9sZEhlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5vbGRIZWFkZXIsIHRoZWlycy5vbGRIZWFkZXIpO1xuXHQgICAgICByZXQubmV3SGVhZGVyID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm5ld0hlYWRlciwgdGhlaXJzLm5ld0hlYWRlcik7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0Lmh1bmtzID0gW107XG5cblx0ICB2YXIgbWluZUluZGV4ID0gMCxcblx0ICAgICAgdGhlaXJzSW5kZXggPSAwLFxuXHQgICAgICBtaW5lT2Zmc2V0ID0gMCxcblx0ICAgICAgdGhlaXJzT2Zmc2V0ID0gMDtcblxuXHQgIHdoaWxlIChtaW5lSW5kZXggPCBtaW5lLmh1bmtzLmxlbmd0aCB8fCB0aGVpcnNJbmRleCA8IHRoZWlycy5odW5rcy5sZW5ndGgpIHtcblx0ICAgIHZhciBtaW5lQ3VycmVudCA9IG1pbmUuaHVua3NbbWluZUluZGV4XSB8fCB7IG9sZFN0YXJ0OiBJbmZpbml0eSB9LFxuXHQgICAgICAgIHRoZWlyc0N1cnJlbnQgPSB0aGVpcnMuaHVua3NbdGhlaXJzSW5kZXhdIHx8IHsgb2xkU3RhcnQ6IEluZmluaXR5IH07XG5cblx0ICAgIGlmIChodW5rQmVmb3JlKG1pbmVDdXJyZW50LCB0aGVpcnNDdXJyZW50KSkge1xuXHQgICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuXHQgICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsobWluZUN1cnJlbnQsIG1pbmVPZmZzZXQpKTtcblx0ICAgICAgbWluZUluZGV4Kys7XG5cdCAgICAgIHRoZWlyc09mZnNldCArPSBtaW5lQ3VycmVudC5uZXdMaW5lcyAtIG1pbmVDdXJyZW50Lm9sZExpbmVzO1xuXHQgICAgfSBlbHNlIGlmIChodW5rQmVmb3JlKHRoZWlyc0N1cnJlbnQsIG1pbmVDdXJyZW50KSkge1xuXHQgICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuXHQgICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsodGhlaXJzQ3VycmVudCwgdGhlaXJzT2Zmc2V0KSk7XG5cdCAgICAgIHRoZWlyc0luZGV4Kys7XG5cdCAgICAgIG1pbmVPZmZzZXQgKz0gdGhlaXJzQ3VycmVudC5uZXdMaW5lcyAtIHRoZWlyc0N1cnJlbnQub2xkTGluZXM7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICAvLyBPdmVybGFwLCBtZXJnZSBhcyBiZXN0IHdlIGNhblxuXHQgICAgICB2YXIgbWVyZ2VkSHVuayA9IHtcblx0ICAgICAgICBvbGRTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQpLFxuXHQgICAgICAgIG9sZExpbmVzOiAwLFxuXHQgICAgICAgIG5ld1N0YXJ0OiBNYXRoLm1pbihtaW5lQ3VycmVudC5uZXdTdGFydCArIG1pbmVPZmZzZXQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQgKyB0aGVpcnNPZmZzZXQpLFxuXHQgICAgICAgIG5ld0xpbmVzOiAwLFxuXHQgICAgICAgIGxpbmVzOiBbXVxuXHQgICAgICB9O1xuXHQgICAgICBtZXJnZUxpbmVzKG1lcmdlZEh1bmssIG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCBtaW5lQ3VycmVudC5saW5lcywgdGhlaXJzQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5saW5lcyk7XG5cdCAgICAgIHRoZWlyc0luZGV4Kys7XG5cdCAgICAgIG1pbmVJbmRleCsrO1xuXG5cdCAgICAgIHJldC5odW5rcy5wdXNoKG1lcmdlZEh1bmspO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiByZXQ7XG5cdH1cblxuXHRmdW5jdGlvbiBsb2FkUGF0Y2gocGFyYW0sIGJhc2UpIHtcblx0ICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xuXHQgICAgaWYgKC9eQEAvbS50ZXN0KHBhcmFtKSB8fCAvXkluZGV4Oi9tLnRlc3QocGFyYW0pKSB7XG5cdCAgICAgIHJldHVybiAoLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfcGFyc2UucGFyc2VQYXRjaCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8ocGFyYW0pWzBdXG5cdCAgICAgICk7XG5cdCAgICB9XG5cblx0ICAgIGlmICghYmFzZSkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgcHJvdmlkZSBhIGJhc2UgcmVmZXJlbmNlIG9yIHBhc3MgaW4gYSBwYXRjaCcpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuICgvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9jcmVhdGUuc3RydWN0dXJlZFBhdGNoKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmFzZSwgcGFyYW0pXG5cdCAgICApO1xuXHQgIH1cblxuXHQgIHJldHVybiBwYXJhbTtcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbGVOYW1lQ2hhbmdlZChwYXRjaCkge1xuXHQgIHJldHVybiBwYXRjaC5uZXdGaWxlTmFtZSAmJiBwYXRjaC5uZXdGaWxlTmFtZSAhPT0gcGF0Y2gub2xkRmlsZU5hbWU7XG5cdH1cblxuXHRmdW5jdGlvbiBzZWxlY3RGaWVsZChpbmRleCwgbWluZSwgdGhlaXJzKSB7XG5cdCAgaWYgKG1pbmUgPT09IHRoZWlycykge1xuXHQgICAgcmV0dXJuIG1pbmU7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGluZGV4LmNvbmZsaWN0ID0gdHJ1ZTtcblx0ICAgIHJldHVybiB7IG1pbmU6IG1pbmUsIHRoZWlyczogdGhlaXJzIH07XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gaHVua0JlZm9yZSh0ZXN0LCBjaGVjaykge1xuXHQgIHJldHVybiB0ZXN0Lm9sZFN0YXJ0IDwgY2hlY2sub2xkU3RhcnQgJiYgdGVzdC5vbGRTdGFydCArIHRlc3Qub2xkTGluZXMgPCBjaGVjay5vbGRTdGFydDtcblx0fVxuXG5cdGZ1bmN0aW9uIGNsb25lSHVuayhodW5rLCBvZmZzZXQpIHtcblx0ICByZXR1cm4ge1xuXHQgICAgb2xkU3RhcnQ6IGh1bmsub2xkU3RhcnQsIG9sZExpbmVzOiBodW5rLm9sZExpbmVzLFxuXHQgICAgbmV3U3RhcnQ6IGh1bmsubmV3U3RhcnQgKyBvZmZzZXQsIG5ld0xpbmVzOiBodW5rLm5ld0xpbmVzLFxuXHQgICAgbGluZXM6IGh1bmsubGluZXNcblx0ICB9O1xuXHR9XG5cblx0ZnVuY3Rpb24gbWVyZ2VMaW5lcyhodW5rLCBtaW5lT2Zmc2V0LCBtaW5lTGluZXMsIHRoZWlyT2Zmc2V0LCB0aGVpckxpbmVzKSB7XG5cdCAgLy8gVGhpcyB3aWxsIGdlbmVyYWxseSByZXN1bHQgaW4gYSBjb25mbGljdGVkIGh1bmssIGJ1dCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIGNvbnRleHRcblx0ICAvLyBpcyB0aGUgb25seSBvdmVybGFwIHdoZXJlIHdlIGNhbiBzdWNjZXNzZnVsbHkgbWVyZ2UgdGhlIGNvbnRlbnQgaGVyZS5cblx0ICB2YXIgbWluZSA9IHsgb2Zmc2V0OiBtaW5lT2Zmc2V0LCBsaW5lczogbWluZUxpbmVzLCBpbmRleDogMCB9LFxuXHQgICAgICB0aGVpciA9IHsgb2Zmc2V0OiB0aGVpck9mZnNldCwgbGluZXM6IHRoZWlyTGluZXMsIGluZGV4OiAwIH07XG5cblx0ICAvLyBIYW5kbGUgYW55IGxlYWRpbmcgY29udGVudFxuXHQgIGluc2VydExlYWRpbmcoaHVuaywgbWluZSwgdGhlaXIpO1xuXHQgIGluc2VydExlYWRpbmcoaHVuaywgdGhlaXIsIG1pbmUpO1xuXG5cdCAgLy8gTm93IGluIHRoZSBvdmVybGFwIGNvbnRlbnQuIFNjYW4gdGhyb3VnaCBhbmQgc2VsZWN0IHRoZSBiZXN0IGNoYW5nZXMgZnJvbSBlYWNoLlxuXHQgIHdoaWxlIChtaW5lLmluZGV4IDwgbWluZS5saW5lcy5sZW5ndGggJiYgdGhlaXIuaW5kZXggPCB0aGVpci5saW5lcy5sZW5ndGgpIHtcblx0ICAgIHZhciBtaW5lQ3VycmVudCA9IG1pbmUubGluZXNbbWluZS5pbmRleF0sXG5cdCAgICAgICAgdGhlaXJDdXJyZW50ID0gdGhlaXIubGluZXNbdGhlaXIuaW5kZXhdO1xuXG5cdCAgICBpZiAoKG1pbmVDdXJyZW50WzBdID09PSAnLScgfHwgbWluZUN1cnJlbnRbMF0gPT09ICcrJykgJiYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nIHx8IHRoZWlyQ3VycmVudFswXSA9PT0gJysnKSkge1xuXHQgICAgICAvLyBCb3RoIG1vZGlmaWVkIC4uLlxuXHQgICAgICBtdXR1YWxDaGFuZ2UoaHVuaywgbWluZSwgdGhlaXIpO1xuXHQgICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJysnICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2h1bmskbGluZXM7XG5cblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLy8gTWluZSBpbnNlcnRlZFxuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9odW5rJGxpbmVzID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9odW5rLmxpbmVzKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9faHVuayRsaW5lcyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jb2xsZWN0Q2hhbmdlKG1pbmUpKSk7XG5cdCAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJysnICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfaHVuayRsaW5lczI7XG5cblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLy8gVGhlaXJzIGluc2VydGVkXG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2h1bmskbGluZXMyID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9odW5rLmxpbmVzKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9faHVuayRsaW5lczIgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY29sbGVjdENoYW5nZSh0aGVpcikpKTtcblx0ICAgIH0gZWxzZSBpZiAobWluZUN1cnJlbnRbMF0gPT09ICctJyAmJiB0aGVpckN1cnJlbnRbMF0gPT09ICcgJykge1xuXHQgICAgICAvLyBNaW5lIHJlbW92ZWQgb3IgZWRpdGVkXG5cdCAgICAgIHJlbW92YWwoaHVuaywgbWluZSwgdGhlaXIpO1xuXHQgICAgfSBlbHNlIGlmICh0aGVpckN1cnJlbnRbMF0gPT09ICctJyAmJiBtaW5lQ3VycmVudFswXSA9PT0gJyAnKSB7XG5cdCAgICAgIC8vIFRoZWlyIHJlbW92ZWQgb3IgZWRpdGVkXG5cdCAgICAgIHJlbW92YWwoaHVuaywgdGhlaXIsIG1pbmUsIHRydWUpO1xuXHQgICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudCA9PT0gdGhlaXJDdXJyZW50KSB7XG5cdCAgICAgIC8vIENvbnRleHQgaWRlbnRpdHlcblx0ICAgICAgaHVuay5saW5lcy5wdXNoKG1pbmVDdXJyZW50KTtcblx0ICAgICAgbWluZS5pbmRleCsrO1xuXHQgICAgICB0aGVpci5pbmRleCsrO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgLy8gQ29udGV4dCBtaXNtYXRjaFxuXHQgICAgICBjb25mbGljdChodW5rLCBjb2xsZWN0Q2hhbmdlKG1pbmUpLCBjb2xsZWN0Q2hhbmdlKHRoZWlyKSk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgLy8gTm93IHB1c2ggYW55dGhpbmcgdGhhdCBtYXkgYmUgcmVtYWluaW5nXG5cdCAgaW5zZXJ0VHJhaWxpbmcoaHVuaywgbWluZSk7XG5cdCAgaW5zZXJ0VHJhaWxpbmcoaHVuaywgdGhlaXIpO1xuXG5cdCAgY2FsY0xpbmVDb3VudChodW5rKTtcblx0fVxuXG5cdGZ1bmN0aW9uIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcikge1xuXHQgIHZhciBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuXHQgICAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKHRoZWlyKTtcblxuXHQgIGlmIChhbGxSZW1vdmVzKG15Q2hhbmdlcykgJiYgYWxsUmVtb3Zlcyh0aGVpckNoYW5nZXMpKSB7XG5cdCAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHJlbW92ZSBjaGFuZ2VzIHRoYXQgYXJlIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlclxuXHQgICAgaWYgKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9hcnJheS5hcnJheVN0YXJ0c1dpdGgpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKG15Q2hhbmdlcywgdGhlaXJDaGFuZ2VzKSAmJiBza2lwUmVtb3ZlU3VwZXJzZXQodGhlaXIsIG15Q2hhbmdlcywgbXlDaGFuZ2VzLmxlbmd0aCAtIHRoZWlyQ2hhbmdlcy5sZW5ndGgpKSB7XG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2h1bmskbGluZXMzO1xuXG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2h1bmskbGluZXMzID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9odW5rLmxpbmVzKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9faHVuayRsaW5lczMgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovbXlDaGFuZ2VzKSk7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH0gZWxzZSBpZiAoIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX2FycmF5LmFycmF5U3RhcnRzV2l0aCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8odGhlaXJDaGFuZ2VzLCBteUNoYW5nZXMpICYmIHNraXBSZW1vdmVTdXBlcnNldChtaW5lLCB0aGVpckNoYW5nZXMsIHRoZWlyQ2hhbmdlcy5sZW5ndGggLSBteUNoYW5nZXMubGVuZ3RoKSkge1xuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9odW5rJGxpbmVzNDtcblxuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9odW5rJGxpbmVzNCA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovaHVuay5saW5lcykucHVzaC4gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2FwcGx5IC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2h1bmskbGluZXM0IC8qaXN0YW5idWwgaWdub3JlIGVuZCovLCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3RvQ29uc3VtYWJsZUFycmF5KCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3RoZWlyQ2hhbmdlcykpO1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cdCAgfSBlbHNlIGlmICggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfYXJyYXkuYXJyYXlFcXVhbCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8obXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpKSB7XG5cdCAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9odW5rJGxpbmVzNTtcblxuXHQgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfaHVuayRsaW5lczUgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2h1bmsubGluZXMpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19odW5rJGxpbmVzNSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9teUNoYW5nZXMpKTtcblx0ICAgIHJldHVybjtcblx0ICB9XG5cblx0ICBjb25mbGljdChodW5rLCBteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcyk7XG5cdH1cblxuXHRmdW5jdGlvbiByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyLCBzd2FwKSB7XG5cdCAgdmFyIG15Q2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UobWluZSksXG5cdCAgICAgIHRoZWlyQ2hhbmdlcyA9IGNvbGxlY3RDb250ZXh0KHRoZWlyLCBteUNoYW5nZXMpO1xuXHQgIGlmICh0aGVpckNoYW5nZXMubWVyZ2VkKSB7XG5cdCAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9odW5rJGxpbmVzNjtcblxuXHQgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfaHVuayRsaW5lczYgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2h1bmsubGluZXMpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19odW5rJGxpbmVzNiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi90aGVpckNoYW5nZXMubWVyZ2VkKSk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGNvbmZsaWN0KGh1bmssIHN3YXAgPyB0aGVpckNoYW5nZXMgOiBteUNoYW5nZXMsIHN3YXAgPyBteUNoYW5nZXMgOiB0aGVpckNoYW5nZXMpO1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGNvbmZsaWN0KGh1bmssIG1pbmUsIHRoZWlyKSB7XG5cdCAgaHVuay5jb25mbGljdCA9IHRydWU7XG5cdCAgaHVuay5saW5lcy5wdXNoKHtcblx0ICAgIGNvbmZsaWN0OiB0cnVlLFxuXHQgICAgbWluZTogbWluZSxcblx0ICAgIHRoZWlyczogdGhlaXJcblx0ICB9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGluc2VydExlYWRpbmcoaHVuaywgaW5zZXJ0LCB0aGVpcikge1xuXHQgIHdoaWxlIChpbnNlcnQub2Zmc2V0IDwgdGhlaXIub2Zmc2V0ICYmIGluc2VydC5pbmRleCA8IGluc2VydC5saW5lcy5sZW5ndGgpIHtcblx0ICAgIHZhciBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcblx0ICAgIGh1bmsubGluZXMucHVzaChsaW5lKTtcblx0ICAgIGluc2VydC5vZmZzZXQrKztcblx0ICB9XG5cdH1cblx0ZnVuY3Rpb24gaW5zZXJ0VHJhaWxpbmcoaHVuaywgaW5zZXJ0KSB7XG5cdCAgd2hpbGUgKGluc2VydC5pbmRleCA8IGluc2VydC5saW5lcy5sZW5ndGgpIHtcblx0ICAgIHZhciBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcblx0ICAgIGh1bmsubGluZXMucHVzaChsaW5lKTtcblx0ICB9XG5cdH1cblxuXHRmdW5jdGlvbiBjb2xsZWN0Q2hhbmdlKHN0YXRlKSB7XG5cdCAgdmFyIHJldCA9IFtdLFxuXHQgICAgICBvcGVyYXRpb24gPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF1bMF07XG5cdCAgd2hpbGUgKHN0YXRlLmluZGV4IDwgc3RhdGUubGluZXMubGVuZ3RoKSB7XG5cdCAgICB2YXIgbGluZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XTtcblxuXHQgICAgLy8gR3JvdXAgYWRkaXRpb25zIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGFmdGVyIHN1YnRyYWN0aW9ucyBhbmQgdHJlYXQgdGhlbSBhcyBvbmUgXCJhdG9taWNcIiBtb2RpZnkgY2hhbmdlLlxuXHQgICAgaWYgKG9wZXJhdGlvbiA9PT0gJy0nICYmIGxpbmVbMF0gPT09ICcrJykge1xuXHQgICAgICBvcGVyYXRpb24gPSAnKyc7XG5cdCAgICB9XG5cblx0ICAgIGlmIChvcGVyYXRpb24gPT09IGxpbmVbMF0pIHtcblx0ICAgICAgcmV0LnB1c2gobGluZSk7XG5cdCAgICAgIHN0YXRlLmluZGV4Kys7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBicmVhaztcblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXR1cm4gcmV0O1xuXHR9XG5cdGZ1bmN0aW9uIGNvbGxlY3RDb250ZXh0KHN0YXRlLCBtYXRjaENoYW5nZXMpIHtcblx0ICB2YXIgY2hhbmdlcyA9IFtdLFxuXHQgICAgICBtZXJnZWQgPSBbXSxcblx0ICAgICAgbWF0Y2hJbmRleCA9IDAsXG5cdCAgICAgIGNvbnRleHRDaGFuZ2VzID0gZmFsc2UsXG5cdCAgICAgIGNvbmZsaWN0ZWQgPSBmYWxzZTtcblx0ICB3aGlsZSAobWF0Y2hJbmRleCA8IG1hdGNoQ2hhbmdlcy5sZW5ndGggJiYgc3RhdGUuaW5kZXggPCBzdGF0ZS5saW5lcy5sZW5ndGgpIHtcblx0ICAgIHZhciBjaGFuZ2UgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF0sXG5cdCAgICAgICAgbWF0Y2ggPSBtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF07XG5cblx0ICAgIC8vIE9uY2Ugd2UndmUgaGl0IG91ciBhZGQsIHRoZW4gd2UgYXJlIGRvbmVcblx0ICAgIGlmIChtYXRjaFswXSA9PT0gJysnKSB7XG5cdCAgICAgIGJyZWFrO1xuXHQgICAgfVxuXG5cdCAgICBjb250ZXh0Q2hhbmdlcyA9IGNvbnRleHRDaGFuZ2VzIHx8IGNoYW5nZVswXSAhPT0gJyAnO1xuXG5cdCAgICBtZXJnZWQucHVzaChtYXRjaCk7XG5cdCAgICBtYXRjaEluZGV4Kys7XG5cblx0ICAgIC8vIENvbnN1bWUgYW55IGFkZGl0aW9ucyBpbiB0aGUgb3RoZXIgYmxvY2sgYXMgYSBjb25mbGljdCB0byBhdHRlbXB0XG5cdCAgICAvLyB0byBwdWxsIGluIHRoZSByZW1haW5pbmcgY29udGV4dCBhZnRlciB0aGlzXG5cdCAgICBpZiAoY2hhbmdlWzBdID09PSAnKycpIHtcblx0ICAgICAgY29uZmxpY3RlZCA9IHRydWU7XG5cblx0ICAgICAgd2hpbGUgKGNoYW5nZVswXSA9PT0gJysnKSB7XG5cdCAgICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZSk7XG5cdCAgICAgICAgY2hhbmdlID0gc3RhdGUubGluZXNbKytzdGF0ZS5pbmRleF07XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgaWYgKG1hdGNoLnN1YnN0cigxKSA9PT0gY2hhbmdlLnN1YnN0cigxKSkge1xuXHQgICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcblx0ICAgICAgc3RhdGUuaW5kZXgrKztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGlmICgobWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXhdIHx8ICcnKVswXSA9PT0gJysnICYmIGNvbnRleHRDaGFuZ2VzKSB7XG5cdCAgICBjb25mbGljdGVkID0gdHJ1ZTtcblx0ICB9XG5cblx0ICBpZiAoY29uZmxpY3RlZCkge1xuXHQgICAgcmV0dXJuIGNoYW5nZXM7XG5cdCAgfVxuXG5cdCAgd2hpbGUgKG1hdGNoSW5kZXggPCBtYXRjaENoYW5nZXMubGVuZ3RoKSB7XG5cdCAgICBtZXJnZWQucHVzaChtYXRjaENoYW5nZXNbbWF0Y2hJbmRleCsrXSk7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHtcblx0ICAgIG1lcmdlZDogbWVyZ2VkLFxuXHQgICAgY2hhbmdlczogY2hhbmdlc1xuXHQgIH07XG5cdH1cblxuXHRmdW5jdGlvbiBhbGxSZW1vdmVzKGNoYW5nZXMpIHtcblx0ICByZXR1cm4gY2hhbmdlcy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGNoYW5nZSkge1xuXHQgICAgcmV0dXJuIHByZXYgJiYgY2hhbmdlWzBdID09PSAnLSc7XG5cdCAgfSwgdHJ1ZSk7XG5cdH1cblx0ZnVuY3Rpb24gc2tpcFJlbW92ZVN1cGVyc2V0KHN0YXRlLCByZW1vdmVDaGFuZ2VzLCBkZWx0YSkge1xuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGE7IGkrKykge1xuXHQgICAgdmFyIGNoYW5nZUNvbnRlbnQgPSByZW1vdmVDaGFuZ2VzW3JlbW92ZUNoYW5nZXMubGVuZ3RoIC0gZGVsdGEgKyBpXS5zdWJzdHIoMSk7XG5cdCAgICBpZiAoc3RhdGUubGluZXNbc3RhdGUuaW5kZXggKyBpXSAhPT0gJyAnICsgY2hhbmdlQ29udGVudCkge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgc3RhdGUuaW5kZXggKz0gZGVsdGE7XG5cdCAgcmV0dXJuIHRydWU7XG5cdH1cblxuXHRmdW5jdGlvbiBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmVzKSB7XG5cdCAgdmFyIG9sZExpbmVzID0gMDtcblx0ICB2YXIgbmV3TGluZXMgPSAwO1xuXG5cdCAgbGluZXMuZm9yRWFjaChmdW5jdGlvbiAobGluZSkge1xuXHQgICAgaWYgKHR5cGVvZiBsaW5lICE9PSAnc3RyaW5nJykge1xuXHQgICAgICB2YXIgbXlDb3VudCA9IGNhbGNPbGROZXdMaW5lQ291bnQobGluZS5taW5lKTtcblx0ICAgICAgdmFyIHRoZWlyQ291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUudGhlaXJzKTtcblxuXHQgICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgIGlmIChteUNvdW50Lm9sZExpbmVzID09PSB0aGVpckNvdW50Lm9sZExpbmVzKSB7XG5cdCAgICAgICAgICBvbGRMaW5lcyArPSBteUNvdW50Lm9sZExpbmVzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBvbGRMaW5lcyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgIGlmIChteUNvdW50Lm5ld0xpbmVzID09PSB0aGVpckNvdW50Lm5ld0xpbmVzKSB7XG5cdCAgICAgICAgICBuZXdMaW5lcyArPSBteUNvdW50Lm5ld0xpbmVzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBuZXdMaW5lcyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkICYmIChsaW5lWzBdID09PSAnKycgfHwgbGluZVswXSA9PT0gJyAnKSkge1xuXHQgICAgICAgIG5ld0xpbmVzKys7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQgJiYgKGxpbmVbMF0gPT09ICctJyB8fCBsaW5lWzBdID09PSAnICcpKSB7XG5cdCAgICAgICAgb2xkTGluZXMrKztcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pO1xuXG5cdCAgcmV0dXJuIHsgb2xkTGluZXM6IG9sZExpbmVzLCBuZXdMaW5lczogbmV3TGluZXMgfTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTl3WVhSamFDOXRaWEpuWlM1cWN5SmRMQ0p1WVcxbGN5STZXeUpqWVd4alRHbHVaVU52ZFc1MElpd2liV1Z5WjJVaUxDSm9kVzVySWl3aVkyRnNZMDlzWkU1bGQweHBibVZEYjNWdWRDSXNJbXhwYm1Weklpd2liMnhrVEdsdVpYTWlMQ0p1WlhkTWFXNWxjeUlzSW5WdVpHVm1hVzVsWkNJc0ltMXBibVVpTENKMGFHVnBjbk1pTENKaVlYTmxJaXdpYkc5aFpGQmhkR05vSWl3aWNtVjBJaXdpYVc1a1pYZ2lMQ0p1WlhkR2FXeGxUbUZ0WlNJc0ltWnBiR1ZPWVcxbFEyaGhibWRsWkNJc0ltOXNaRVpwYkdWT1lXMWxJaXdpYjJ4a1NHVmhaR1Z5SWl3aWJtVjNTR1ZoWkdWeUlpd2ljMlZzWldOMFJtbGxiR1FpTENKb2RXNXJjeUlzSW0xcGJtVkpibVJsZUNJc0luUm9aV2x5YzBsdVpHVjRJaXdpYldsdVpVOW1abk5sZENJc0luUm9aV2x5YzA5bVpuTmxkQ0lzSW14bGJtZDBhQ0lzSW0xcGJtVkRkWEp5Wlc1MElpd2liMnhrVTNSaGNuUWlMQ0pKYm1acGJtbDBlU0lzSW5Sb1pXbHljME4xY25KbGJuUWlMQ0pvZFc1clFtVm1iM0psSWl3aWNIVnphQ0lzSW1Oc2IyNWxTSFZ1YXlJc0ltMWxjbWRsWkVoMWJtc2lMQ0pOWVhSb0lpd2liV2x1SWl3aWJtVjNVM1JoY25RaUxDSnRaWEpuWlV4cGJtVnpJaXdpY0dGeVlXMGlMQ0owWlhOMElpd2lSWEp5YjNJaUxDSndZWFJqYUNJc0ltTnZibVpzYVdOMElpd2lZMmhsWTJzaUxDSnZabVp6WlhRaUxDSnRhVzVsVEdsdVpYTWlMQ0owYUdWcGNrOW1abk5sZENJc0luUm9aV2x5VEdsdVpYTWlMQ0owYUdWcGNpSXNJbWx1YzJWeWRFeGxZV1JwYm1jaUxDSjBhR1ZwY2tOMWNuSmxiblFpTENKdGRYUjFZV3hEYUdGdVoyVWlMQ0pqYjJ4c1pXTjBRMmhoYm1kbElpd2ljbVZ0YjNaaGJDSXNJbWx1YzJWeWRGUnlZV2xzYVc1bklpd2liWGxEYUdGdVoyVnpJaXdpZEdobGFYSkRhR0Z1WjJWeklpd2lZV3hzVW1WdGIzWmxjeUlzSW5OcmFYQlNaVzF2ZG1WVGRYQmxjbk5sZENJc0luTjNZWEFpTENKamIyeHNaV04wUTI5dWRHVjRkQ0lzSW0xbGNtZGxaQ0lzSW1sdWMyVnlkQ0lzSW14cGJtVWlMQ0p6ZEdGMFpTSXNJbTl3WlhKaGRHbHZiaUlzSW0xaGRHTm9RMmhoYm1kbGN5SXNJbU5vWVc1blpYTWlMQ0p0WVhSamFFbHVaR1Y0SWl3aVkyOXVkR1Y0ZEVOb1lXNW5aWE1pTENKamIyNW1iR2xqZEdWa0lpd2lZMmhoYm1kbElpd2liV0YwWTJnaUxDSnpkV0p6ZEhJaUxDSnlaV1IxWTJVaUxDSndjbVYySWl3aWNtVnRiM1psUTJoaGJtZGxjeUlzSW1SbGJIUmhJaXdpYVNJc0ltTm9ZVzVuWlVOdmJuUmxiblFpTENKbWIzSkZZV05vSWl3aWJYbERiM1Z1ZENJc0luUm9aV2x5UTI5MWJuUWlYU3dpYldGd2NHbHVaM01pT2lJN096dG5RMEZMWjBKQkxHRXNSMEZCUVVFc1lUdDVSRUZuUWtGRExFc3NSMEZCUVVFc1N6czdRVUZ5UW1oQ096dEJRVU5CT3p0QlFVVkJPenM3TzNWQ1FVVlBMRk5CUVZORUxHRkJRVlFzUTBGQmRVSkZMRWxCUVhaQ0xFVkJRVFpDTzBGQlFVRXNOa1ZCUTB4RExHOUNRVUZ2UWtRc1MwRkJTMFVzUzBGQmVrSXNRMEZFU3p0QlFVRkJMRTFCUXpOQ1F5eFJRVVF5UWl4M1FrRkRNMEpCTEZGQlJESkNPMEZCUVVFc1RVRkRha0pETEZGQlJHbENMSGRDUVVOcVFrRXNVVUZFYVVJN08wRkJSMnhETEUxQlFVbEVMR0ZCUVdGRkxGTkJRV3BDTEVWQlFUUkNPMEZCUXpGQ1RDeFRRVUZMUnl4UlFVRk1MRWRCUVdkQ1FTeFJRVUZvUWp0QlFVTkVMRWRCUmtRc1RVRkZUenRCUVVOTUxGZEJRVTlJTEV0QlFVdEhMRkZCUVZvN1FVRkRSRHM3UVVGRlJDeE5RVUZKUXl4aFFVRmhReXhUUVVGcVFpeEZRVUUwUWp0QlFVTXhRa3dzVTBGQlMwa3NVVUZCVEN4SFFVRm5Ra0VzVVVGQmFFSTdRVUZEUkN4SFFVWkVMRTFCUlU4N1FVRkRUQ3hYUVVGUFNpeExRVUZMU1N4UlFVRmFPMEZCUTBRN1FVRkRSanM3UVVGRlRTeFRRVUZUVEN4TFFVRlVMRU5CUVdWUExFbEJRV1lzUlVGQmNVSkRMRTFCUVhKQ0xFVkJRVFpDUXl4SlFVRTNRaXhGUVVGdFF6dEJRVU40UTBZc1UwRkJUMGNzVlVGQlZVZ3NTVUZCVml4RlFVRm5Ra1VzU1VGQmFFSXNRMEZCVUR0QlFVTkJSQ3hYUVVGVFJTeFZRVUZWUml4TlFVRldMRVZCUVd0Q1F5eEpRVUZzUWl4RFFVRlVPenRCUVVWQkxFMUJRVWxGTEUxQlFVMHNSVUZCVmpzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeE5RVUZKU2l4TFFVRkxTeXhMUVVGTUxFbEJRV05LTEU5QlFVOUpMRXRCUVhwQ0xFVkJRV2RETzBGQlF6bENSQ3hSUVVGSlF5eExRVUZLTEVkQlFWbE1MRXRCUVV0TExFdEJRVXdzU1VGQlkwb3NUMEZCVDBrc1MwRkJha003UVVGRFJEczdRVUZGUkN4TlFVRkpUQ3hMUVVGTFRTeFhRVUZNTEVsQlFXOUNUQ3hQUVVGUFN5eFhRVUV2UWl4RlFVRTBRenRCUVVNeFF5eFJRVUZKTEVOQlFVTkRMR2RDUVVGblFsQXNTVUZCYUVJc1EwRkJUQ3hGUVVFMFFqdEJRVU14UWp0QlFVTkJTU3hWUVVGSlNTeFhRVUZLTEVkQlFXdENVQ3hQUVVGUFR5eFhRVUZRTEVsQlFYTkNVaXhMUVVGTFVTeFhRVUUzUXp0QlFVTkJTaXhWUVVGSlJTeFhRVUZLTEVkQlFXdENUQ3hQUVVGUFN5eFhRVUZRTEVsQlFYTkNUaXhMUVVGTFRTeFhRVUUzUXp0QlFVTkJSaXhWUVVGSlN5eFRRVUZLTEVkQlFXZENVaXhQUVVGUFVTeFRRVUZRTEVsQlFXOUNWQ3hMUVVGTFV5eFRRVUY2UXp0QlFVTkJUQ3hWUVVGSlRTeFRRVUZLTEVkQlFXZENWQ3hQUVVGUFV5eFRRVUZRTEVsQlFXOUNWaXhMUVVGTFZTeFRRVUY2UXp0QlFVTkVMRXRCVGtRc1RVRk5UeXhKUVVGSkxFTkJRVU5JTEdkQ1FVRm5RazRzVFVGQmFFSXNRMEZCVEN4RlFVRTRRanRCUVVOdVF6dEJRVU5CUnl4VlFVRkpTU3hYUVVGS0xFZEJRV3RDVWl4TFFVRkxVU3hYUVVGMlFqdEJRVU5CU2l4VlFVRkpSU3hYUVVGS0xFZEJRV3RDVGl4TFFVRkxUU3hYUVVGMlFqdEJRVU5CUml4VlFVRkpTeXhUUVVGS0xFZEJRV2RDVkN4TFFVRkxVeXhUUVVGeVFqdEJRVU5CVEN4VlFVRkpUU3hUUVVGS0xFZEJRV2RDVml4TFFVRkxWU3hUUVVGeVFqdEJRVU5FTEV0QlRrMHNUVUZOUVR0QlFVTk1PMEZCUTBGT0xGVkJRVWxKTEZkQlFVb3NSMEZCYTBKSExGbEJRVmxRTEVkQlFWb3NSVUZCYVVKS0xFdEJRVXRSTEZkQlFYUkNMRVZCUVcxRFVDeFBRVUZQVHl4WFFVRXhReXhEUVVGc1FqdEJRVU5CU2l4VlFVRkpSU3hYUVVGS0xFZEJRV3RDU3l4WlFVRlpVQ3hIUVVGYUxFVkJRV2xDU2l4TFFVRkxUU3hYUVVGMFFpeEZRVUZ0UTB3c1QwRkJUMHNzVjBGQk1VTXNRMEZCYkVJN1FVRkRRVVlzVlVGQlNVc3NVMEZCU2l4SFFVRm5Ra1VzV1VGQldWQXNSMEZCV2l4RlFVRnBRa29zUzBGQlMxTXNVMEZCZEVJc1JVRkJhVU5TTEU5QlFVOVJMRk5CUVhoRExFTkJRV2hDTzBGQlEwRk1MRlZCUVVsTkxGTkJRVW9zUjBGQlowSkRMRmxCUVZsUUxFZEJRVm9zUlVGQmFVSktMRXRCUVV0VkxGTkJRWFJDTEVWQlFXbERWQ3hQUVVGUFV5eFRRVUY0UXl4RFFVRm9RanRCUVVORU8wRkJRMFk3TzBGQlJVUk9MRTFCUVVsUkxFdEJRVW9zUjBGQldTeEZRVUZhT3p0QlFVVkJMRTFCUVVsRExGbEJRVmtzUTBGQmFFSTdRVUZCUVN4TlFVTkpReXhqUVVGakxFTkJSR3hDTzBGQlFVRXNUVUZGU1VNc1lVRkJZU3hEUVVacVFqdEJRVUZCTEUxQlIwbERMR1ZCUVdVc1EwRklia0k3TzBGQlMwRXNVMEZCVDBnc1dVRkJXV0lzUzBGQlMxa3NTMEZCVEN4RFFVRlhTeXhOUVVGMlFpeEpRVUZwUTBnc1kwRkJZMklzVDBGQlQxY3NTMEZCVUN4RFFVRmhTeXhOUVVGdVJTeEZRVUV5UlR0QlFVTjZSU3hSUVVGSlF5eGpRVUZqYkVJc1MwRkJTMWtzUzBGQlRDeERRVUZYUXl4VFFVRllMRXRCUVhsQ0xFVkJRVU5OTEZWQlFWVkRMRkZCUVZnc1JVRkJNME03UVVGQlFTeFJRVU5KUXl4blFrRkJaMEp3UWl4UFFVRlBWeXhMUVVGUUxFTkJRV0ZGTEZkQlFXSXNTMEZCTmtJc1JVRkJRMHNzVlVGQlZVTXNVVUZCV0N4RlFVUnFSRHM3UVVGSFFTeFJRVUZKUlN4WFFVRlhTaXhYUVVGWUxFVkJRWGRDUnl4aFFVRjRRaXhEUVVGS0xFVkJRVFJETzBGQlF6RkRPMEZCUTBGcVFpeFZRVUZKVVN4TFFVRktMRU5CUVZWWExFbEJRVllzUTBGQlpVTXNWVUZCVlU0c1YwRkJWaXhGUVVGMVFrZ3NWVUZCZGtJc1EwRkJaanRCUVVOQlJqdEJRVU5CUnl4elFrRkJaMEpGTEZsQlFWbHdRaXhSUVVGYUxFZEJRWFZDYjBJc1dVRkJXWEpDTEZGQlFXNUVPMEZCUTBRc1MwRk1SQ3hOUVV0UExFbEJRVWw1UWl4WFFVRlhSQ3hoUVVGWUxFVkJRVEJDU0N4WFFVRXhRaXhEUVVGS0xFVkJRVFJETzBGQlEycEVPMEZCUTBGa0xGVkJRVWxSTEV0QlFVb3NRMEZCVlZjc1NVRkJWaXhEUVVGbFF5eFZRVUZWU0N4aFFVRldMRVZCUVhsQ1RDeFpRVUY2UWl4RFFVRm1PMEZCUTBGR08wRkJRMEZETEc5Q1FVRmpUU3hqUVVGamRrSXNVVUZCWkN4SFFVRjVRblZDTEdOQlFXTjRRaXhSUVVGeVJEdEJRVU5FTEV0QlRFMHNUVUZMUVR0QlFVTk1PMEZCUTBFc1ZVRkJTVFJDTEdGQlFXRTdRVUZEWms0c2EwSkJRVlZQTEV0QlFVdERMRWRCUVV3c1EwRkJVMVFzV1VGQldVTXNVVUZCY2tJc1JVRkJLMEpGTEdOQlFXTkdMRkZCUVRkRExFTkJSRXM3UVVGRlpuUkNMR3RDUVVGVkxFTkJSa3M3UVVGSFppdENMR3RDUVVGVlJpeExRVUZMUXl4SFFVRk1MRU5CUVZOVUxGbEJRVmxWTEZGQlFWb3NSMEZCZFVKaUxGVkJRV2hETEVWQlFUUkRUU3hqUVVGalJpeFJRVUZrTEVkQlFYbENTQ3haUVVGeVJTeERRVWhMTzBGQlNXWnNRaXhyUWtGQlZTeERRVXBMTzBGQlMyWkdMR1ZCUVU4N1FVRk1VU3hQUVVGcVFqdEJRVTlCYVVNc2FVSkJRVmRLTEZWQlFWZ3NSVUZCZFVKUUxGbEJRVmxETEZGQlFXNURMRVZCUVRaRFJDeFpRVUZaZEVJc1MwRkJla1FzUlVGQlowVjVRaXhqUVVGalJpeFJRVUU1UlN4RlFVRjNSa1VzWTBGQlkzcENMRXRCUVhSSE8wRkJRMEZyUWp0QlFVTkJSRHM3UVVGRlFWUXNWVUZCU1ZFc1MwRkJTaXhEUVVGVlZ5eEpRVUZXTEVOQlFXVkZMRlZCUVdZN1FVRkRSRHRCUVVOR096dEJRVVZFTEZOQlFVOXlRaXhIUVVGUU8wRkJRMFE3TzBGQlJVUXNVMEZCVTBRc1UwRkJWQ3hEUVVGdFFqSkNMRXRCUVc1Q0xFVkJRVEJDTlVJc1NVRkJNVUlzUlVGQlowTTdRVUZET1VJc1RVRkJTU3hQUVVGUE5FSXNTMEZCVUN4TFFVRnBRaXhSUVVGeVFpeEZRVUVyUWp0QlFVTTNRaXhSUVVGSkxFOUJRVTlETEVsQlFWQXNRMEZCV1VRc1MwRkJXaXhMUVVGMVFpeFhRVUZYUXl4SlFVRllMRU5CUVdkQ1JDeExRVUZvUWl4RFFVRXpRaXhGUVVGdlJEdEJRVU5zUkN4aFFVRlBMSGxGUVVGWFFTeExRVUZZTEVWQlFXdENMRU5CUVd4Q08wRkJRVkE3UVVGRFJEczdRVUZGUkN4UlFVRkpMRU5CUVVNMVFpeEpRVUZNTEVWQlFWYzdRVUZEVkN4WlFVRk5MRWxCUVVrNFFpeExRVUZLTEVOQlFWVXNhMFJCUVZZc1EwRkJUanRCUVVORU8wRkJRMFFzVjBGQlR5d3JSVUZCWjBKcVF5eFRRVUZvUWl4RlFVRXlRa0VzVTBGQk0wSXNSVUZCYzBOSExFbEJRWFJETEVWQlFUUkRORUlzUzBGQk5VTTdRVUZCVUR0QlFVTkVPenRCUVVWRUxGTkJRVTlCTEV0QlFWQTdRVUZEUkRzN1FVRkZSQ3hUUVVGVGRrSXNaVUZCVkN4RFFVRjVRakJDTEV0QlFYcENMRVZCUVdkRE8wRkJRemxDTEZOQlFVOUJMRTFCUVUwelFpeFhRVUZPTEVsQlFYRkNNa0lzVFVGQlRUTkNMRmRCUVU0c1MwRkJjMEl5UWl4TlFVRk5la0lzVjBGQmVFUTdRVUZEUkRzN1FVRkZSQ3hUUVVGVFJ5eFhRVUZVTEVOQlFYRkNUaXhMUVVGeVFpeEZRVUUwUWt3c1NVRkJOVUlzUlVGQmEwTkRMRTFCUVd4RExFVkJRVEJETzBGQlEzaERMRTFCUVVsRUxGTkJRVk5ETEUxQlFXSXNSVUZCY1VJN1FVRkRia0lzVjBGQlQwUXNTVUZCVUR0QlFVTkVMRWRCUmtRc1RVRkZUenRCUVVOTVN5eFZRVUZOTmtJc1VVRkJUaXhIUVVGcFFpeEpRVUZxUWp0QlFVTkJMRmRCUVU4c1JVRkJRMnhETEZWQlFVUXNSVUZCVDBNc1kwRkJVQ3hGUVVGUU8wRkJRMFE3UVVGRFJqczdRVUZGUkN4VFFVRlRjVUlzVlVGQlZDeERRVUZ2UWxNc1NVRkJjRUlzUlVGQk1FSkpMRXRCUVRGQ0xFVkJRV2xETzBGQlF5OUNMRk5CUVU5S0xFdEJRVXRhTEZGQlFVd3NSMEZCWjBKblFpeE5RVUZOYUVJc1VVRkJkRUlzU1VGRFJGa3NTMEZCUzFvc1VVRkJUQ3hIUVVGblFsa3NTMEZCUzJ4RExGRkJRWFJDTEVkQlFXdERjME1zVFVGQlRXaENMRkZCUkRkRE8wRkJSVVE3TzBGQlJVUXNVMEZCVTBzc1UwRkJWQ3hEUVVGdFFqbENMRWxCUVc1Q0xFVkJRWGxDTUVNc1RVRkJla0lzUlVGQmFVTTdRVUZETDBJc1UwRkJUenRCUVVOTWFrSXNZMEZCVlhwQ0xFdEJRVXQ1UWl4UlFVUldMRVZCUTI5Q2RFSXNWVUZCVlVnc1MwRkJTMGNzVVVGRWJrTTdRVUZGVEN0Q0xHTkJRVlZzUXl4TFFVRkxhME1zVVVGQlRDeEhRVUZuUWxFc1RVRkdja0lzUlVGRk5rSjBReXhWUVVGVlNpeExRVUZMU1N4UlFVWTFRenRCUVVkTVJpeFhRVUZQUml4TFFVRkxSVHRCUVVoUUxFZEJRVkE3UVVGTFJEczdRVUZGUkN4VFFVRlRhVU1zVlVGQlZDeERRVUZ2UW01RExFbEJRWEJDTEVWQlFUQkNjVUlzVlVGQk1VSXNSVUZCYzBOelFpeFRRVUYwUXl4RlFVRnBSRU1zVjBGQmFrUXNSVUZCT0VSRExGVkJRVGxFTEVWQlFUQkZPMEZCUTNoRk8wRkJRMEU3UVVGRFFTeE5RVUZKZGtNc1QwRkJUeXhGUVVGRGIwTXNVVUZCVVhKQ0xGVkJRVlFzUlVGQmNVSnVRaXhQUVVGUGVVTXNVMEZCTlVJc1JVRkJkVU5vUXl4UFFVRlBMRU5CUVRsRExFVkJRVmc3UVVGQlFTeE5RVU5KYlVNc1VVRkJVU3hGUVVGRFNpeFJRVUZSUlN4WFFVRlVMRVZCUVhOQ01VTXNUMEZCVHpKRExGVkJRVGRDTEVWQlFYbERiRU1zVDBGQlR5eERRVUZvUkN4RlFVUmFPenRCUVVkQk8wRkJRMEZ2UXl4blFrRkJZeTlETEVsQlFXUXNSVUZCYjBKTkxFbEJRWEJDTEVWQlFUQkNkME1zUzBGQk1VSTdRVUZEUVVNc1owSkJRV012UXl4SlFVRmtMRVZCUVc5Q09FTXNTMEZCY0VJc1JVRkJNa0o0UXl4SlFVRXpRanM3UVVGRlFUdEJRVU5CTEZOQlFVOUJMRXRCUVV0TExFdEJRVXdzUjBGQllVd3NTMEZCUzBvc1MwRkJUQ3hEUVVGWGNVSXNUVUZCZUVJc1NVRkJhME4xUWl4TlFVRk5ia01zUzBGQlRpeEhRVUZqYlVNc1RVRkJUVFZETEV0QlFVNHNRMEZCV1hGQ0xFMUJRVzVGTEVWQlFUSkZPMEZCUTNwRkxGRkJRVWxETEdOQlFXTnNRaXhMUVVGTFNpeExRVUZNTEVOQlFWZEpMRXRCUVV0TExFdEJRV2hDTEVOQlFXeENPMEZCUVVFc1VVRkRTWEZETEdWQlFXVkdMRTFCUVUwMVF5eExRVUZPTEVOQlFWazBReXhOUVVGTmJrTXNTMEZCYkVJc1EwRkVia0k3TzBGQlIwRXNVVUZCU1N4RFFVRkRZU3haUVVGWkxFTkJRVm9zVFVGQmJVSXNSMEZCYmtJc1NVRkJNRUpCTEZsQlFWa3NRMEZCV2l4TlFVRnRRaXhIUVVFNVF5eE5RVU5KZDBJc1lVRkJZU3hEUVVGaUxFMUJRVzlDTEVkQlFYQkNMRWxCUVRKQ1FTeGhRVUZoTEVOQlFXSXNUVUZCYjBJc1IwRkVia1FzUTBGQlNpeEZRVU0yUkR0QlFVTXpSRHRCUVVOQlF5eHRRa0ZCWVdwRUxFbEJRV0lzUlVGQmJVSk5MRWxCUVc1Q0xFVkJRWGxDZDBNc1MwRkJla0k3UVVGRFJDeExRVXBFTEUxQlNVOHNTVUZCU1hSQ0xGbEJRVmtzUTBGQldpeE5RVUZ0UWl4SFFVRnVRaXhKUVVFd1FuZENMR0ZCUVdFc1EwRkJZaXhOUVVGdlFpeEhRVUZzUkN4RlFVRjFSRHRCUVVGQk96dEJRVUZCTERoQ1FVTTFSRHRCUVVOQkxEQkZRVUZMT1VNc1MwRkJUQ3hGUVVGWE1rSXNTVUZCV0N3MFRFRkJiMEp4UWl4alFVRmpOVU1zU1VGQlpDeERRVUZ3UWp0QlFVTkVMRXRCU0Uwc1RVRkhRU3hKUVVGSk1FTXNZVUZCWVN4RFFVRmlMRTFCUVc5Q0xFZEJRWEJDTEVsQlFUSkNlRUlzV1VGQldTeERRVUZhTEUxQlFXMUNMRWRCUVd4RUxFVkJRWFZFTzBGQlFVRTdPMEZCUVVFc09FSkJRelZFTzBGQlEwRXNNa1ZCUVV0MFFpeExRVUZNTEVWQlFWY3lRaXhKUVVGWUxEWk1RVUZ2UW5GQ0xHTkJRV05LTEV0QlFXUXNRMEZCY0VJN1FVRkRSQ3hMUVVoTkxFMUJSMEVzU1VGQlNYUkNMRmxCUVZrc1EwRkJXaXhOUVVGdFFpeEhRVUZ1UWl4SlFVRXdRbmRDTEdGQlFXRXNRMEZCWWl4TlFVRnZRaXhIUVVGc1JDeEZRVUYxUkR0QlFVTTFSRHRCUVVOQlJ5eGpRVUZSYmtRc1NVRkJVaXhGUVVGalRTeEpRVUZrTEVWQlFXOUNkME1zUzBGQmNFSTdRVUZEUkN4TFFVaE5MRTFCUjBFc1NVRkJTVVVzWVVGQllTeERRVUZpTEUxQlFXOUNMRWRCUVhCQ0xFbEJRVEpDZUVJc1dVRkJXU3hEUVVGYUxFMUJRVzFDTEVkQlFXeEVMRVZCUVhWRU8wRkJRelZFTzBGQlEwRXlRaXhqUVVGUmJrUXNTVUZCVWl4RlFVRmpPRU1zUzBGQlpDeEZRVUZ4UW5oRExFbEJRWEpDTEVWQlFUSkNMRWxCUVROQ08wRkJRMFFzUzBGSVRTeE5RVWRCTEVsQlFVbHJRaXhuUWtGQlowSjNRaXhaUVVGd1FpeEZRVUZyUXp0QlFVTjJRenRCUVVOQmFFUXNWMEZCUzBVc1MwRkJUQ3hEUVVGWE1rSXNTVUZCV0N4RFFVRm5Ra3dzVjBGQmFFSTdRVUZEUVd4Q0xGZEJRVXRMTEV0QlFVdzdRVUZEUVcxRExGbEJRVTF1UXl4TFFVRk9PMEZCUTBRc1MwRk1UU3hOUVV0Qk8wRkJRMHc3UVVGRFFUWkNMR1ZCUVZONFF5eEpRVUZVTEVWQlFXVnJSQ3hqUVVGak5VTXNTVUZCWkN4RFFVRm1MRVZCUVc5RE5FTXNZMEZCWTBvc1MwRkJaQ3hEUVVGd1F6dEJRVU5FTzBGQlEwWTdPMEZCUlVRN1FVRkRRVTBzYVVKQlFXVndSQ3hKUVVGbUxFVkJRWEZDVFN4SlFVRnlRanRCUVVOQk9FTXNhVUpCUVdWd1JDeEpRVUZtTEVWQlFYRkNPRU1zUzBGQmNrSTdPMEZCUlVGb1JDeG5Ra0ZCWTBVc1NVRkJaRHRCUVVORU96dEJRVVZFTEZOQlFWTnBSQ3haUVVGVUxFTkJRWE5DYWtRc1NVRkJkRUlzUlVGQk5FSk5MRWxCUVRWQ0xFVkJRV3REZDBNc1MwRkJiRU1zUlVGQmVVTTdRVUZEZGtNc1RVRkJTVThzV1VGQldVZ3NZMEZCWXpWRExFbEJRV1FzUTBGQmFFSTdRVUZCUVN4TlFVTkpaMFFzWlVGQlpVb3NZMEZCWTBvc1MwRkJaQ3hEUVVSdVFqczdRVUZIUVN4TlFVRkpVeXhYUVVGWFJpeFRRVUZZTEV0QlFYbENSU3hYUVVGWFJDeFpRVUZZTEVOQlFUZENMRVZCUVhWRU8wRkJRM0pFTzBGQlEwRXNVVUZCU1N3NFJVRkJaMEpFTEZOQlFXaENMRVZCUVRKQ1F5eFpRVUV6UWl4TFFVTkhSU3h0UWtGQmJVSldMRXRCUVc1Q0xFVkJRVEJDVHl4VFFVRXhRaXhGUVVGeFEwRXNWVUZCVlRsQ0xFMUJRVllzUjBGQmJVSXJRaXhoUVVGaEwwSXNUVUZCY2tVc1EwRkVVQ3hGUVVOeFJqdEJRVUZCT3p0QlFVRkJMRFpDUVVOdVJpeHpSVUZCUzNKQ0xFdEJRVXdzUlVGQlZ6SkNMRWxCUVZnc05reEJRVzlDZDBJc1UwRkJjRUk3UVVGRFFUdEJRVU5FTEV0QlNrUXNUVUZKVHl4SlFVRkpMRGhGUVVGblFrTXNXVUZCYUVJc1JVRkJPRUpFTEZOQlFUbENMRXRCUTBwSExHMUNRVUZ0UW14RUxFbEJRVzVDTEVWQlFYbENaMFFzV1VGQmVrSXNSVUZCZFVOQkxHRkJRV0V2UWl4TlFVRmlMRWRCUVhOQ09FSXNWVUZCVlRsQ0xFMUJRWFpGTEVOQlJFRXNSVUZEWjBZN1FVRkJRVHM3UVVGQlFTdzJRa0ZEY2tZc2MwVkJRVXR5UWl4TFFVRk1MRVZCUVZjeVFpeEpRVUZZTERaTVFVRnZRbmxDTEZsQlFYQkNPMEZCUTBFN1FVRkRSRHRCUVVOR0xFZEJXRVFzVFVGWFR5eEpRVUZKTEhsRlFVRlhSQ3hUUVVGWUxFVkJRWE5DUXl4WlFVRjBRaXhEUVVGS0xFVkJRWGxETzBGQlFVRTdPMEZCUVVFc01rSkJRemxETEhORlFVRkxjRVFzUzBGQlRDeEZRVUZYTWtJc1NVRkJXQ3cyVEVGQmIwSjNRaXhUUVVGd1FqdEJRVU5CTzBGQlEwUTdPMEZCUlVSaUxGZEJRVk40UXl4SlFVRlVMRVZCUVdWeFJDeFRRVUZtTEVWQlFUQkNReXhaUVVFeFFqdEJRVU5FT3p0QlFVVkVMRk5CUVZOSUxFOUJRVlFzUTBGQmFVSnVSQ3hKUVVGcVFpeEZRVUYxUWswc1NVRkJka0lzUlVGQk5rSjNReXhMUVVFM1FpeEZRVUZ2UTFjc1NVRkJjRU1zUlVGQk1FTTdRVUZEZUVNc1RVRkJTVW9zV1VGQldVZ3NZMEZCWXpWRExFbEJRV1FzUTBGQmFFSTdRVUZCUVN4TlFVTkpaMFFzWlVGQlpVa3NaVUZCWlZvc1MwRkJaaXhGUVVGelFrOHNVMEZCZEVJc1EwRkVia0k3UVVGRlFTeE5RVUZKUXl4aFFVRmhTeXhOUVVGcVFpeEZRVUY1UWp0QlFVRkJPenRCUVVGQkxESkNRVU4yUWl4elJVRkJTM3BFTEV0QlFVd3NSVUZCVnpKQ0xFbEJRVmdzTmt4QlFXOUNlVUlzWVVGQllVc3NUVUZCYWtNN1FVRkRSQ3hIUVVaRUxFMUJSVTg3UVVGRFRHNUNMR0ZCUVZONFF5eEpRVUZVTEVWQlFXVjVSQ3hQUVVGUFNDeFpRVUZRTEVkQlFYTkNSQ3hUUVVGeVF5eEZRVUZuUkVrc1QwRkJUMG9zVTBGQlVDeEhRVUZ0UWtNc1dVRkJia1U3UVVGRFJEdEJRVU5HT3p0QlFVVkVMRk5CUVZOa0xGRkJRVlFzUTBGQmEwSjRReXhKUVVGc1FpeEZRVUYzUWswc1NVRkJlRUlzUlVGQk9FSjNReXhMUVVFNVFpeEZRVUZ4UXp0QlFVTnVRemxETEU5QlFVdDNReXhSUVVGTUxFZEJRV2RDTEVsQlFXaENPMEZCUTBGNFF5eFBRVUZMUlN4TFFVRk1MRU5CUVZjeVFpeEpRVUZZTEVOQlFXZENPMEZCUTJSWExHTkJRVlVzU1VGRVNUdEJRVVZrYkVNc1ZVRkJUVUVzU1VGR1VUdEJRVWRrUXl4WlFVRlJkVU03UVVGSVRTeEhRVUZvUWp0QlFVdEVPenRCUVVWRUxGTkJRVk5ETEdGQlFWUXNRMEZCZFVJdlF5eEpRVUYyUWl4RlFVRTJRalJFTEUxQlFUZENMRVZCUVhGRFpDeExRVUZ5UXl4RlFVRTBRenRCUVVNeFF5eFRRVUZQWXl4UFFVRlBiRUlzVFVGQlVDeEhRVUZuUWtrc1RVRkJUVW9zVFVGQmRFSXNTVUZCWjBOclFpeFBRVUZQYWtRc1MwRkJVQ3hIUVVGbGFVUXNUMEZCVHpGRUxFdEJRVkFzUTBGQllYRkNMRTFCUVc1RkxFVkJRVEpGTzBGQlEzcEZMRkZCUVVselF5eFBRVUZQUkN4UFFVRlBNVVFzUzBGQlVDeERRVUZoTUVRc1QwRkJUMnBFTEV0QlFWQXNSVUZCWWl4RFFVRllPMEZCUTBGWUxGTkJRVXRGTEV0QlFVd3NRMEZCVnpKQ0xFbEJRVmdzUTBGQlowSm5ReXhKUVVGb1FqdEJRVU5CUkN4WFFVRlBiRUlzVFVGQlVEdEJRVU5FTzBGQlEwWTdRVUZEUkN4VFFVRlRWU3hqUVVGVUxFTkJRWGRDY0VRc1NVRkJlRUlzUlVGQk9FSTBSQ3hOUVVFNVFpeEZRVUZ6UXp0QlFVTndReXhUUVVGUFFTeFBRVUZQYWtRc1MwRkJVQ3hIUVVGbGFVUXNUMEZCVHpGRUxFdEJRVkFzUTBGQllYRkNMRTFCUVc1RExFVkJRVEpETzBGQlEzcERMRkZCUVVselF5eFBRVUZQUkN4UFFVRlBNVVFzUzBGQlVDeERRVUZoTUVRc1QwRkJUMnBFTEV0QlFWQXNSVUZCWWl4RFFVRllPMEZCUTBGWUxGTkJRVXRGTEV0QlFVd3NRMEZCVnpKQ0xFbEJRVmdzUTBGQlowSm5ReXhKUVVGb1FqdEJRVU5FTzBGQlEwWTdPMEZCUlVRc1UwRkJVMWdzWVVGQlZDeERRVUYxUWxrc1MwRkJka0lzUlVGQk9FSTdRVUZETlVJc1RVRkJTWEJFTEUxQlFVMHNSVUZCVmp0QlFVRkJMRTFCUTBseFJDeFpRVUZaUkN4TlFVRk5OVVFzUzBGQlRpeERRVUZaTkVRc1RVRkJUVzVFTEV0QlFXeENMRVZCUVhsQ0xFTkJRWHBDTEVOQlJHaENPMEZCUlVFc1UwRkJUMjFFTEUxQlFVMXVSQ3hMUVVGT0xFZEJRV050UkN4TlFVRk5OVVFzUzBGQlRpeERRVUZaY1VJc1RVRkJha01zUlVGQmVVTTdRVUZEZGtNc1VVRkJTWE5ETEU5QlFVOURMRTFCUVUwMVJDeExRVUZPTEVOQlFWazBSQ3hOUVVGTmJrUXNTMEZCYkVJc1EwRkJXRHM3UVVGRlFUdEJRVU5CTEZGQlFVbHZSQ3hqUVVGakxFZEJRV1FzU1VGQmNVSkdMRXRCUVVzc1EwRkJUQ3hOUVVGWkxFZEJRWEpETEVWQlFUQkRPMEZCUTNoRFJTeHJRa0ZCV1N4SFFVRmFPMEZCUTBRN08wRkJSVVFzVVVGQlNVRXNZMEZCWTBZc1MwRkJTeXhEUVVGTUxFTkJRV3hDTEVWQlFUSkNPMEZCUTNwQ2JrUXNWVUZCU1cxQ0xFbEJRVW9zUTBGQlUyZERMRWxCUVZRN1FVRkRRVU1zV1VGQlRXNUVMRXRCUVU0N1FVRkRSQ3hMUVVoRUxFMUJSMDg3UVVGRFREdEJRVU5FTzBGQlEwWTdPMEZCUlVRc1UwRkJUMFFzUjBGQlVEdEJRVU5FTzBGQlEwUXNVMEZCVTJkRUxHTkJRVlFzUTBGQmQwSkpMRXRCUVhoQ0xFVkJRU3RDUlN4WlFVRXZRaXhGUVVFMlF6dEJRVU16UXl4TlFVRkpReXhWUVVGVkxFVkJRV1E3UVVGQlFTeE5RVU5KVGl4VFFVRlRMRVZCUkdJN1FVRkJRU3hOUVVWSlR5eGhRVUZoTEVOQlJtcENPMEZCUVVFc1RVRkhTVU1zYVVKQlFXbENMRXRCU0hKQ08wRkJRVUVzVFVGSlNVTXNZVUZCWVN4TFFVcHFRanRCUVV0QkxGTkJRVTlHTEdGQlFXRkdMR0ZCUVdGNlF5eE5RVUV4UWl4SlFVTkZkVU1zVFVGQlRXNUVMRXRCUVU0c1IwRkJZMjFFTEUxQlFVMDFSQ3hMUVVGT0xFTkJRVmx4UWl4TlFVUnVReXhGUVVNeVF6dEJRVU42UXl4UlFVRkpPRU1zVTBGQlUxQXNUVUZCVFRWRUxFdEJRVTRzUTBGQldUUkVMRTFCUVUxdVJDeExRVUZzUWl4RFFVRmlPMEZCUVVFc1VVRkRTVEpFTEZGQlFWRk9MR0ZCUVdGRkxGVkJRV0lzUTBGRVdqczdRVUZIUVR0QlFVTkJMRkZCUVVsSkxFMUJRVTBzUTBGQlRpeE5RVUZoTEVkQlFXcENMRVZCUVhOQ08wRkJRM0JDTzBGQlEwUTdPMEZCUlVSSUxIRkNRVUZwUWtFc2EwSkJRV3RDUlN4UFFVRlBMRU5CUVZBc1RVRkJZeXhIUVVGcVJEczdRVUZGUVZZc1YwRkJUemxDTEVsQlFWQXNRMEZCV1hsRExFdEJRVm83UVVGRFFVbzdPMEZCUlVFN1FVRkRRVHRCUVVOQkxGRkJRVWxITEU5QlFVOHNRMEZCVUN4TlFVRmpMRWRCUVd4Q0xFVkJRWFZDTzBGQlEzSkNSQ3h0UWtGQllTeEpRVUZpT3p0QlFVVkJMR0ZCUVU5RExFOUJRVThzUTBGQlVDeE5RVUZqTEVkQlFYSkNMRVZCUVRCQ08wRkJRM2hDU2l4blFrRkJVWEJETEVsQlFWSXNRMEZCWVhkRExFMUJRV0k3UVVGRFFVRXNhVUpCUVZOUUxFMUJRVTAxUkN4TFFVRk9MRU5CUVZrc1JVRkJSVFJFTEUxQlFVMXVSQ3hMUVVGd1FpeERRVUZVTzBGQlEwUTdRVUZEUmpzN1FVRkZSQ3hSUVVGSk1rUXNUVUZCVFVNc1RVRkJUaXhEUVVGaExFTkJRV0lzVFVGQmIwSkdMRTlCUVU5RkxFMUJRVkFzUTBGQll5eERRVUZrTEVOQlFYaENMRVZCUVRCRE8wRkJRM2hEVGl4alFVRlJjRU1zU1VGQlVpeERRVUZoZDBNc1RVRkJZanRCUVVOQlVDeFpRVUZOYmtRc1MwRkJUanRCUVVORUxFdEJTRVFzVFVGSFR6dEJRVU5NZVVRc2JVSkJRV0VzU1VGQllqdEJRVU5FTzBGQlEwWTdPMEZCUlVRc1RVRkJTU3hEUVVGRFNpeGhRVUZoUlN4VlFVRmlMRXRCUVRSQ0xFVkJRVGRDTEVWQlFXbERMRU5CUVdwRExFMUJRWGRETEVkQlFYaERMRWxCUTBkRExHTkJSRkFzUlVGRGRVSTdRVUZEY2tKRExHbENRVUZoTEVsQlFXSTdRVUZEUkRzN1FVRkZSQ3hOUVVGSlFTeFZRVUZLTEVWQlFXZENPMEZCUTJRc1YwRkJUMGdzVDBGQlVEdEJRVU5FT3p0QlFVVkVMRk5CUVU5RExHRkJRV0ZHTEdGQlFXRjZReXhOUVVGcVF5eEZRVUY1UXp0QlFVTjJRMjlETEZkQlFVODVRaXhKUVVGUUxFTkJRVmx0UXl4aFFVRmhSU3haUVVGaUxFTkJRVm83UVVGRFJEczdRVUZGUkN4VFFVRlBPMEZCUTB4UUxHdENRVVJMTzBGQlJVeE5PMEZCUmtzc1IwRkJVRHRCUVVsRU96dEJRVVZFTEZOQlFWTldMRlZCUVZRc1EwRkJiMEpWTEU5QlFYQkNMRVZCUVRaQ08wRkJRek5DTEZOQlFVOUJMRkZCUVZGUExFMUJRVklzUTBGQlpTeFZRVUZUUXl4SlFVRlVMRVZCUVdWS0xFMUJRV1lzUlVGQmRVSTdRVUZETTBNc1YwRkJUMGtzVVVGQlVVb3NUMEZCVHl4RFFVRlFMRTFCUVdNc1IwRkJOMEk3UVVGRFJDeEhRVVpOTEVWQlJVb3NTVUZHU1N4RFFVRlFPMEZCUjBRN1FVRkRSQ3hUUVVGVFlpeHJRa0ZCVkN4RFFVRTBRazBzUzBGQk5VSXNSVUZCYlVOWkxHRkJRVzVETEVWQlFXdEVReXhMUVVGc1JDeEZRVUY1UkR0QlFVTjJSQ3hQUVVGTExFbEJRVWxETEVsQlFVa3NRMEZCWWl4RlFVRm5Ra0VzU1VGQlNVUXNTMEZCY0VJc1JVRkJNa0pETEVkQlFUTkNMRVZCUVdkRE8wRkJRemxDTEZGQlFVbERMR2RDUVVGblFrZ3NZMEZCWTBFc1kwRkJZMjVFTEUxQlFXUXNSMEZCZFVKdlJDeExRVUYyUWl4SFFVRXJRa01zUTBGQk4wTXNSVUZCWjBSTUxFMUJRV2hFTEVOQlFYVkVMRU5CUVhaRUxFTkJRWEJDTzBGQlEwRXNVVUZCU1ZRc1RVRkJUVFZFTEV0QlFVNHNRMEZCV1RSRUxFMUJRVTF1UkN4TFFVRk9MRWRCUVdOcFJTeERRVUV4UWl4TlFVRnBReXhOUVVGTlF5eGhRVUV6UXl4RlFVRXdSRHRCUVVONFJDeGhRVUZQTEV0QlFWQTdRVUZEUkR0QlFVTkdPenRCUVVWRVppeFJRVUZOYmtRc1MwRkJUaXhKUVVGbFowVXNTMEZCWmp0QlFVTkJMRk5CUVU4c1NVRkJVRHRCUVVORU96dEJRVVZFTEZOQlFWTXhSU3h0UWtGQlZDeERRVUUyUWtNc1MwRkJOMElzUlVGQmIwTTdRVUZEYkVNc1RVRkJTVU1zVjBGQlZ5eERRVUZtTzBGQlEwRXNUVUZCU1VNc1YwRkJWeXhEUVVGbU96dEJRVVZCUml4UlFVRk5ORVVzVDBGQlRpeERRVUZqTEZWQlFWTnFRaXhKUVVGVUxFVkJRV1U3UVVGRE0wSXNVVUZCU1N4UFFVRlBRU3hKUVVGUUxFdEJRV2RDTEZGQlFYQkNMRVZCUVRoQ08wRkJRelZDTEZWQlFVbHJRaXhWUVVGVk9VVXNiMEpCUVc5Q05FUXNTMEZCUzNaRUxFbEJRWHBDTEVOQlFXUTdRVUZEUVN4VlFVRkpNRVVzWVVGQllTOUZMRzlDUVVGdlFqUkVMRXRCUVV0MFJDeE5RVUY2UWl4RFFVRnFRanM3UVVGRlFTeFZRVUZKU2l4aFFVRmhSU3hUUVVGcVFpeEZRVUUwUWp0QlFVTXhRaXhaUVVGSk1FVXNVVUZCVVRWRkxGRkJRVklzUzBGQmNVSTJSU3hYUVVGWE4wVXNVVUZCY0VNc1JVRkJPRU03UVVGRE5VTkJMSE5DUVVGWk5FVXNVVUZCVVRWRkxGRkJRWEJDTzBGQlEwUXNVMEZHUkN4TlFVVlBPMEZCUTB4QkxIRkNRVUZYUlN4VFFVRllPMEZCUTBRN1FVRkRSanM3UVVGRlJDeFZRVUZKUkN4aFFVRmhReXhUUVVGcVFpeEZRVUUwUWp0QlFVTXhRaXhaUVVGSk1FVXNVVUZCVVRORkxGRkJRVklzUzBGQmNVSTBSU3hYUVVGWE5VVXNVVUZCY0VNc1JVRkJPRU03UVVGRE5VTkJMSE5DUVVGWk1rVXNVVUZCVVRORkxGRkJRWEJDTzBGQlEwUXNVMEZHUkN4TlFVVlBPMEZCUTB4QkxIRkNRVUZYUXl4VFFVRllPMEZCUTBRN1FVRkRSanRCUVVOR0xFdEJia0pFTEUxQmJVSlBPMEZCUTB3c1ZVRkJTVVFzWVVGQllVTXNVMEZCWWl4TFFVRXlRbmRFTEV0QlFVc3NRMEZCVEN4TlFVRlpMRWRCUVZvc1NVRkJiVUpCTEV0QlFVc3NRMEZCVEN4TlFVRlpMRWRCUVRGRUxFTkJRVW9zUlVGQmIwVTdRVUZEYkVWNlJEdEJRVU5FTzBGQlEwUXNWVUZCU1VRc1lVRkJZVVVzVTBGQllpeExRVUV5UW5kRUxFdEJRVXNzUTBGQlRDeE5RVUZaTEVkQlFWb3NTVUZCYlVKQkxFdEJRVXNzUTBGQlRDeE5RVUZaTEVkQlFURkVMRU5CUVVvc1JVRkJiMFU3UVVGRGJFVXhSRHRCUVVORU8wRkJRMFk3UVVGRFJpeEhRVFZDUkRzN1FVRTRRa0VzVTBGQlR5eEZRVUZEUVN4clFrRkJSQ3hGUVVGWFF5eHJRa0ZCV0N4RlFVRlFPMEZCUTBRaUxDSm1hV3hsSWpvaWJXVnlaMlV1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2UzTjBjblZqZEhWeVpXUlFZWFJqYUgwZ1puSnZiU0FuTGk5amNtVmhkR1VuTzF4dWFXMXdiM0owSUh0d1lYSnpaVkJoZEdOb2ZTQm1jbTl0SUNjdUwzQmhjbk5sSnp0Y2JseHVhVzF3YjNKMElIdGhjbkpoZVVWeGRXRnNMQ0JoY25KaGVWTjBZWEowYzFkcGRHaDlJR1p5YjIwZ0p5NHVMM1YwYVd3dllYSnlZWGtuTzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyRnNZMHhwYm1WRGIzVnVkQ2hvZFc1cktTQjdYRzRnSUdOdmJuTjBJSHR2YkdSTWFXNWxjeXdnYm1WM1RHbHVaWE45SUQwZ1kyRnNZMDlzWkU1bGQweHBibVZEYjNWdWRDaG9kVzVyTG14cGJtVnpLVHRjYmx4dUlDQnBaaUFvYjJ4a1RHbHVaWE1nSVQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lHaDFibXN1YjJ4a1RHbHVaWE1nUFNCdmJHUk1hVzVsY3p0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNCa1pXeGxkR1VnYUhWdWF5NXZiR1JNYVc1bGN6dGNiaUFnZlZ4dVhHNGdJR2xtSUNodVpYZE1hVzVsY3lBaFBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdhSFZ1YXk1dVpYZE1hVzVsY3lBOUlHNWxkMHhwYm1Wek8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lHUmxiR1YwWlNCb2RXNXJMbTVsZDB4cGJtVnpPMXh1SUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ0WlhKblpTaHRhVzVsTENCMGFHVnBjbk1zSUdKaGMyVXBJSHRjYmlBZ2JXbHVaU0E5SUd4dllXUlFZWFJqYUNodGFXNWxMQ0JpWVhObEtUdGNiaUFnZEdobGFYSnpJRDBnYkc5aFpGQmhkR05vS0hSb1pXbHljeXdnWW1GelpTazdYRzVjYmlBZ2JHVjBJSEpsZENBOUlIdDlPMXh1WEc0Z0lDOHZJRVp2Y2lCcGJtUmxlQ0IzWlNCcWRYTjBJR3hsZENCcGRDQndZWE56SUhSb2NtOTFaMmdnWVhNZ2FYUWdaRzlsYzI0bmRDQm9ZWFpsSUdGdWVTQnVaV05sYzNOaGNua2diV1ZoYm1sdVp5NWNiaUFnTHk4Z1RHVmhkbWx1WnlCellXNXBkSGtnWTJobFkydHpJRzl1SUhSb2FYTWdkRzhnZEdobElFRlFTU0JqYjI1emRXMWxjaUIwYUdGMElHMWhlU0JyYm05M0lHMXZjbVVnWVdKdmRYUWdkR2hsWEc0Z0lDOHZJRzFsWVc1cGJtY2dhVzRnZEdobGFYSWdiM2R1SUdOdmJuUmxlSFF1WEc0Z0lHbG1JQ2h0YVc1bExtbHVaR1Y0SUh4OElIUm9aV2x5Y3k1cGJtUmxlQ2tnZTF4dUlDQWdJSEpsZEM1cGJtUmxlQ0E5SUcxcGJtVXVhVzVrWlhnZ2ZId2dkR2hsYVhKekxtbHVaR1Y0TzF4dUlDQjlYRzVjYmlBZ2FXWWdLRzFwYm1VdWJtVjNSbWxzWlU1aGJXVWdmSHdnZEdobGFYSnpMbTVsZDBacGJHVk9ZVzFsS1NCN1hHNGdJQ0FnYVdZZ0tDRm1hV3hsVG1GdFpVTm9ZVzVuWldRb2JXbHVaU2twSUh0Y2JpQWdJQ0FnSUM4dklFNXZJR2hsWVdSbGNpQnZjaUJ1YnlCamFHRnVaMlVnYVc0Z2IzVnljeXdnZFhObElIUm9aV2x5Y3lBb1lXNWtJRzkxY25NZ2FXWWdkR2hsYVhKeklHUnZaWE1nYm05MElHVjRhWE4wS1Z4dUlDQWdJQ0FnY21WMExtOXNaRVpwYkdWT1lXMWxJRDBnZEdobGFYSnpMbTlzWkVacGJHVk9ZVzFsSUh4OElHMXBibVV1YjJ4a1JtbHNaVTVoYldVN1hHNGdJQ0FnSUNCeVpYUXVibVYzUm1sc1pVNWhiV1VnUFNCMGFHVnBjbk11Ym1WM1JtbHNaVTVoYldVZ2ZId2diV2x1WlM1dVpYZEdhV3hsVG1GdFpUdGNiaUFnSUNBZ0lISmxkQzV2YkdSSVpXRmtaWElnUFNCMGFHVnBjbk11YjJ4a1NHVmhaR1Z5SUh4OElHMXBibVV1YjJ4a1NHVmhaR1Z5TzF4dUlDQWdJQ0FnY21WMExtNWxkMGhsWVdSbGNpQTlJSFJvWldseWN5NXVaWGRJWldGa1pYSWdmSHdnYldsdVpTNXVaWGRJWldGa1pYSTdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDZ2habWxzWlU1aGJXVkRhR0Z1WjJWa0tIUm9aV2x5Y3lrcElIdGNiaUFnSUNBZ0lDOHZJRTV2SUdobFlXUmxjaUJ2Y2lCdWJ5QmphR0Z1WjJVZ2FXNGdkR2hsYVhKekxDQjFjMlVnYjNWeWMxeHVJQ0FnSUNBZ2NtVjBMbTlzWkVacGJHVk9ZVzFsSUQwZ2JXbHVaUzV2YkdSR2FXeGxUbUZ0WlR0Y2JpQWdJQ0FnSUhKbGRDNXVaWGRHYVd4bFRtRnRaU0E5SUcxcGJtVXVibVYzUm1sc1pVNWhiV1U3WEc0Z0lDQWdJQ0J5WlhRdWIyeGtTR1ZoWkdWeUlEMGdiV2x1WlM1dmJHUklaV0ZrWlhJN1hHNGdJQ0FnSUNCeVpYUXVibVYzU0dWaFpHVnlJRDBnYldsdVpTNXVaWGRJWldGa1pYSTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUM4dklFSnZkR2dnWTJoaGJtZGxaQzR1TGlCbWFXZDFjbVVnYVhRZ2IzVjBYRzRnSUNBZ0lDQnlaWFF1YjJ4a1JtbHNaVTVoYldVZ1BTQnpaV3hsWTNSR2FXVnNaQ2h5WlhRc0lHMXBibVV1YjJ4a1JtbHNaVTVoYldVc0lIUm9aV2x5Y3k1dmJHUkdhV3hsVG1GdFpTazdYRzRnSUNBZ0lDQnlaWFF1Ym1WM1JtbHNaVTVoYldVZ1BTQnpaV3hsWTNSR2FXVnNaQ2h5WlhRc0lHMXBibVV1Ym1WM1JtbHNaVTVoYldVc0lIUm9aV2x5Y3k1dVpYZEdhV3hsVG1GdFpTazdYRzRnSUNBZ0lDQnlaWFF1YjJ4a1NHVmhaR1Z5SUQwZ2MyVnNaV04wUm1sbGJHUW9jbVYwTENCdGFXNWxMbTlzWkVobFlXUmxjaXdnZEdobGFYSnpMbTlzWkVobFlXUmxjaWs3WEc0Z0lDQWdJQ0J5WlhRdWJtVjNTR1ZoWkdWeUlEMGdjMlZzWldOMFJtbGxiR1FvY21WMExDQnRhVzVsTG01bGQwaGxZV1JsY2l3Z2RHaGxhWEp6TG01bGQwaGxZV1JsY2lrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NtVjBMbWgxYm10eklEMGdXMTA3WEc1Y2JpQWdiR1YwSUcxcGJtVkpibVJsZUNBOUlEQXNYRzRnSUNBZ0lDQjBhR1ZwY25OSmJtUmxlQ0E5SURBc1hHNGdJQ0FnSUNCdGFXNWxUMlptYzJWMElEMGdNQ3hjYmlBZ0lDQWdJSFJvWldseWMwOW1abk5sZENBOUlEQTdYRzVjYmlBZ2QyaHBiR1VnS0cxcGJtVkpibVJsZUNBOElHMXBibVV1YUhWdWEzTXViR1Z1WjNSb0lIeDhJSFJvWldseWMwbHVaR1Y0SUR3Z2RHaGxhWEp6TG1oMWJtdHpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lHeGxkQ0J0YVc1bFEzVnljbVZ1ZENBOUlHMXBibVV1YUhWdWEzTmJiV2x1WlVsdVpHVjRYU0I4ZkNCN2IyeGtVM1JoY25RNklFbHVabWx1YVhSNWZTeGNiaUFnSUNBZ0lDQWdkR2hsYVhKelEzVnljbVZ1ZENBOUlIUm9aV2x5Y3k1b2RXNXJjMXQwYUdWcGNuTkpibVJsZUYwZ2ZId2dlMjlzWkZOMFlYSjBPaUJKYm1acGJtbDBlWDA3WEc1Y2JpQWdJQ0JwWmlBb2FIVnVhMEpsWm05eVpTaHRhVzVsUTNWeWNtVnVkQ3dnZEdobGFYSnpRM1Z5Y21WdWRDa3BJSHRjYmlBZ0lDQWdJQzh2SUZSb2FYTWdjR0YwWTJnZ1pHOWxjeUJ1YjNRZ2IzWmxjbXhoY0NCM2FYUm9JR0Z1ZVNCdlppQjBhR1VnYjNSb1pYSnpMQ0I1WVhrdVhHNGdJQ0FnSUNCeVpYUXVhSFZ1YTNNdWNIVnphQ2hqYkc5dVpVaDFibXNvYldsdVpVTjFjbkpsYm5Rc0lHMXBibVZQWm1aelpYUXBLVHRjYmlBZ0lDQWdJRzFwYm1WSmJtUmxlQ3NyTzF4dUlDQWdJQ0FnZEdobGFYSnpUMlptYzJWMElDczlJRzFwYm1WRGRYSnlaVzUwTG01bGQweHBibVZ6SUMwZ2JXbHVaVU4xY25KbGJuUXViMnhrVEdsdVpYTTdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaG9kVzVyUW1WbWIzSmxLSFJvWldseWMwTjFjbkpsYm5Rc0lHMXBibVZEZFhKeVpXNTBLU2tnZTF4dUlDQWdJQ0FnTHk4Z1ZHaHBjeUJ3WVhSamFDQmtiMlZ6SUc1dmRDQnZkbVZ5YkdGd0lIZHBkR2dnWVc1NUlHOW1JSFJvWlNCdmRHaGxjbk1zSUhsaGVTNWNiaUFnSUNBZ0lISmxkQzVvZFc1cmN5NXdkWE5vS0dOc2IyNWxTSFZ1YXloMGFHVnBjbk5EZFhKeVpXNTBMQ0IwYUdWcGNuTlBabVp6WlhRcEtUdGNiaUFnSUNBZ0lIUm9aV2x5YzBsdVpHVjRLeXM3WEc0Z0lDQWdJQ0J0YVc1bFQyWm1jMlYwSUNzOUlIUm9aV2x5YzBOMWNuSmxiblF1Ym1WM1RHbHVaWE1nTFNCMGFHVnBjbk5EZFhKeVpXNTBMbTlzWkV4cGJtVnpPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBdkx5QlBkbVZ5YkdGd0xDQnRaWEpuWlNCaGN5QmlaWE4wSUhkbElHTmhibHh1SUNBZ0lDQWdiR1YwSUcxbGNtZGxaRWgxYm1zZ1BTQjdYRzRnSUNBZ0lDQWdJRzlzWkZOMFlYSjBPaUJOWVhSb0xtMXBiaWh0YVc1bFEzVnljbVZ1ZEM1dmJHUlRkR0Z5ZEN3Z2RHaGxhWEp6UTNWeWNtVnVkQzV2YkdSVGRHRnlkQ2tzWEc0Z0lDQWdJQ0FnSUc5c1pFeHBibVZ6T2lBd0xGeHVJQ0FnSUNBZ0lDQnVaWGRUZEdGeWREb2dUV0YwYUM1dGFXNG9iV2x1WlVOMWNuSmxiblF1Ym1WM1UzUmhjblFnS3lCdGFXNWxUMlptYzJWMExDQjBhR1ZwY25ORGRYSnlaVzUwTG05c1pGTjBZWEowSUNzZ2RHaGxhWEp6VDJabWMyVjBLU3hjYmlBZ0lDQWdJQ0FnYm1WM1RHbHVaWE02SURBc1hHNGdJQ0FnSUNBZ0lHeHBibVZ6T2lCYlhWeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lHMWxjbWRsVEdsdVpYTW9iV1Z5WjJWa1NIVnVheXdnYldsdVpVTjFjbkpsYm5RdWIyeGtVM1JoY25Rc0lHMXBibVZEZFhKeVpXNTBMbXhwYm1WekxDQjBhR1ZwY25ORGRYSnlaVzUwTG05c1pGTjBZWEowTENCMGFHVnBjbk5EZFhKeVpXNTBMbXhwYm1WektUdGNiaUFnSUNBZ0lIUm9aV2x5YzBsdVpHVjRLeXM3WEc0Z0lDQWdJQ0J0YVc1bFNXNWtaWGdyS3p0Y2JseHVJQ0FnSUNBZ2NtVjBMbWgxYm10ekxuQjFjMmdvYldWeVoyVmtTSFZ1YXlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUhKbGREdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2JHOWhaRkJoZEdOb0tIQmhjbUZ0TENCaVlYTmxLU0I3WEc0Z0lHbG1JQ2gwZVhCbGIyWWdjR0Z5WVcwZ1BUMDlJQ2R6ZEhKcGJtY25LU0I3WEc0Z0lDQWdhV1lnS0M5ZVFFQXZiUzUwWlhOMEtIQmhjbUZ0S1NCOGZDQW9MMTVKYm1SbGVEb3ZiUzUwWlhOMEtIQmhjbUZ0S1NrcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCd1lYSnpaVkJoZEdOb0tIQmhjbUZ0S1Zzd1hUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9JV0poYzJVcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblRYVnpkQ0J3Y205MmFXUmxJR0VnWW1GelpTQnlaV1psY21WdVkyVWdiM0lnY0dGemN5QnBiaUJoSUhCaGRHTm9KeWs3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCemRISjFZM1IxY21Wa1VHRjBZMmdvZFc1a1pXWnBibVZrTENCMWJtUmxabWx1WldRc0lHSmhjMlVzSUhCaGNtRnRLVHRjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJ3WVhKaGJUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1ptbHNaVTVoYldWRGFHRnVaMlZrS0hCaGRHTm9LU0I3WEc0Z0lISmxkSFZ5YmlCd1lYUmphQzV1WlhkR2FXeGxUbUZ0WlNBbUppQndZWFJqYUM1dVpYZEdhV3hsVG1GdFpTQWhQVDBnY0dGMFkyZ3ViMnhrUm1sc1pVNWhiV1U3WEc1OVhHNWNibVoxYm1OMGFXOXVJSE5sYkdWamRFWnBaV3hrS0dsdVpHVjRMQ0J0YVc1bExDQjBhR1ZwY25NcElIdGNiaUFnYVdZZ0tHMXBibVVnUFQwOUlIUm9aV2x5Y3lrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ0YVc1bE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lHbHVaR1Y0TG1OdmJtWnNhV04wSUQwZ2RISjFaVHRjYmlBZ0lDQnlaWFIxY200Z2UyMXBibVVzSUhSb1pXbHljMzA3WEc0Z0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z2FIVnVhMEpsWm05eVpTaDBaWE4wTENCamFHVmpheWtnZTF4dUlDQnlaWFIxY200Z2RHVnpkQzV2YkdSVGRHRnlkQ0E4SUdOb1pXTnJMbTlzWkZOMFlYSjBYRzRnSUNBZ0ppWWdLSFJsYzNRdWIyeGtVM1JoY25RZ0t5QjBaWE4wTG05c1pFeHBibVZ6S1NBOElHTm9aV05yTG05c1pGTjBZWEowTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJqYkc5dVpVaDFibXNvYUhWdWF5d2diMlptYzJWMEtTQjdYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdiMnhrVTNSaGNuUTZJR2gxYm1zdWIyeGtVM1JoY25Rc0lHOXNaRXhwYm1Wek9pQm9kVzVyTG05c1pFeHBibVZ6TEZ4dUlDQWdJRzVsZDFOMFlYSjBPaUJvZFc1ckxtNWxkMU4wWVhKMElDc2diMlptYzJWMExDQnVaWGRNYVc1bGN6b2dhSFZ1YXk1dVpYZE1hVzVsY3l4Y2JpQWdJQ0JzYVc1bGN6b2dhSFZ1YXk1c2FXNWxjMXh1SUNCOU8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCdFpYSm5aVXhwYm1WektHaDFibXNzSUcxcGJtVlBabVp6WlhRc0lHMXBibVZNYVc1bGN5d2dkR2hsYVhKUFptWnpaWFFzSUhSb1pXbHlUR2x1WlhNcElIdGNiaUFnTHk4Z1ZHaHBjeUIzYVd4c0lHZGxibVZ5WVd4c2VTQnlaWE4xYkhRZ2FXNGdZU0JqYjI1bWJHbGpkR1ZrSUdoMWJtc3NJR0oxZENCMGFHVnlaU0JoY21VZ1kyRnpaWE1nZDJobGNtVWdkR2hsSUdOdmJuUmxlSFJjYmlBZ0x5OGdhWE1nZEdobElHOXViSGtnYjNabGNteGhjQ0IzYUdWeVpTQjNaU0JqWVc0Z2MzVmpZMlZ6YzJaMWJHeDVJRzFsY21kbElIUm9aU0JqYjI1MFpXNTBJR2hsY21VdVhHNGdJR3hsZENCdGFXNWxJRDBnZTI5bVpuTmxkRG9nYldsdVpVOW1abk5sZEN3Z2JHbHVaWE02SUcxcGJtVk1hVzVsY3l3Z2FXNWtaWGc2SURCOUxGeHVJQ0FnSUNBZ2RHaGxhWElnUFNCN2IyWm1jMlYwT2lCMGFHVnBjazltWm5ObGRDd2diR2x1WlhNNklIUm9aV2x5VEdsdVpYTXNJR2x1WkdWNE9pQXdmVHRjYmx4dUlDQXZMeUJJWVc1a2JHVWdZVzU1SUd4bFlXUnBibWNnWTI5dWRHVnVkRnh1SUNCcGJuTmxjblJNWldGa2FXNW5LR2gxYm1zc0lHMXBibVVzSUhSb1pXbHlLVHRjYmlBZ2FXNXpaWEowVEdWaFpHbHVaeWhvZFc1ckxDQjBhR1ZwY2l3Z2JXbHVaU2s3WEc1Y2JpQWdMeThnVG05M0lHbHVJSFJvWlNCdmRtVnliR0Z3SUdOdmJuUmxiblF1SUZOallXNGdkR2h5YjNWbmFDQmhibVFnYzJWc1pXTjBJSFJvWlNCaVpYTjBJR05vWVc1blpYTWdabkp2YlNCbFlXTm9MbHh1SUNCM2FHbHNaU0FvYldsdVpTNXBibVJsZUNBOElHMXBibVV1YkdsdVpYTXViR1Z1WjNSb0lDWW1JSFJvWldseUxtbHVaR1Y0SUR3Z2RHaGxhWEl1YkdsdVpYTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ2JHVjBJRzFwYm1WRGRYSnlaVzUwSUQwZ2JXbHVaUzVzYVc1bGMxdHRhVzVsTG1sdVpHVjRYU3hjYmlBZ0lDQWdJQ0FnZEdobGFYSkRkWEp5Wlc1MElEMGdkR2hsYVhJdWJHbHVaWE5iZEdobGFYSXVhVzVrWlhoZE8xeHVYRzRnSUNBZ2FXWWdLQ2h0YVc1bFEzVnljbVZ1ZEZzd1hTQTlQVDBnSnkwbklIeDhJRzFwYm1WRGRYSnlaVzUwV3pCZElEMDlQU0FuS3ljcFhHNGdJQ0FnSUNBZ0lDWW1JQ2gwYUdWcGNrTjFjbkpsYm5SYk1GMGdQVDA5SUNjdEp5QjhmQ0IwYUdWcGNrTjFjbkpsYm5SYk1GMGdQVDA5SUNjckp5a3BJSHRjYmlBZ0lDQWdJQzh2SUVKdmRHZ2diVzlrYVdacFpXUWdMaTR1WEc0Z0lDQWdJQ0J0ZFhSMVlXeERhR0Z1WjJVb2FIVnVheXdnYldsdVpTd2dkR2hsYVhJcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2JXbHVaVU4xY25KbGJuUmJNRjBnUFQwOUlDY3JKeUFtSmlCMGFHVnBja04xY25KbGJuUmJNRjBnUFQwOUlDY2dKeWtnZTF4dUlDQWdJQ0FnTHk4Z1RXbHVaU0JwYm5ObGNuUmxaRnh1SUNBZ0lDQWdhSFZ1YXk1c2FXNWxjeTV3ZFhOb0tDNHVMaUJqYjJ4c1pXTjBRMmhoYm1kbEtHMXBibVVwS1R0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0hSb1pXbHlRM1Z5Y21WdWRGc3dYU0E5UFQwZ0p5c25JQ1ltSUcxcGJtVkRkWEp5Wlc1MFd6QmRJRDA5UFNBbklDY3BJSHRjYmlBZ0lDQWdJQzh2SUZSb1pXbHljeUJwYm5ObGNuUmxaRnh1SUNBZ0lDQWdhSFZ1YXk1c2FXNWxjeTV3ZFhOb0tDNHVMaUJqYjJ4c1pXTjBRMmhoYm1kbEtIUm9aV2x5S1NrN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNodGFXNWxRM1Z5Y21WdWRGc3dYU0E5UFQwZ0p5MG5JQ1ltSUhSb1pXbHlRM1Z5Y21WdWRGc3dYU0E5UFQwZ0p5QW5LU0I3WEc0Z0lDQWdJQ0F2THlCTmFXNWxJSEpsYlc5MlpXUWdiM0lnWldScGRHVmtYRzRnSUNBZ0lDQnlaVzF2ZG1Gc0tHaDFibXNzSUcxcGJtVXNJSFJvWldseUtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUm9aV2x5UTNWeWNtVnVkRnN3WFNBOVBUMGdKeTBuSUNZbUlHMXBibVZEZFhKeVpXNTBXekJkSUQwOVBTQW5JQ2NwSUh0Y2JpQWdJQ0FnSUM4dklGUm9aV2x5SUhKbGJXOTJaV1FnYjNJZ1pXUnBkR1ZrWEc0Z0lDQWdJQ0J5WlcxdmRtRnNLR2gxYm1zc0lIUm9aV2x5TENCdGFXNWxMQ0IwY25WbEtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHMXBibVZEZFhKeVpXNTBJRDA5UFNCMGFHVnBja04xY25KbGJuUXBJSHRjYmlBZ0lDQWdJQzh2SUVOdmJuUmxlSFFnYVdSbGJuUnBkSGxjYmlBZ0lDQWdJR2gxYm1zdWJHbHVaWE11Y0hWemFDaHRhVzVsUTNWeWNtVnVkQ2s3WEc0Z0lDQWdJQ0J0YVc1bExtbHVaR1Y0S3lzN1hHNGdJQ0FnSUNCMGFHVnBjaTVwYm1SbGVDc3JPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBdkx5QkRiMjUwWlhoMElHMXBjMjFoZEdOb1hHNGdJQ0FnSUNCamIyNW1iR2xqZENob2RXNXJMQ0JqYjJ4c1pXTjBRMmhoYm1kbEtHMXBibVVwTENCamIyeHNaV04wUTJoaGJtZGxLSFJvWldseUtTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdMeThnVG05M0lIQjFjMmdnWVc1NWRHaHBibWNnZEdoaGRDQnRZWGtnWW1VZ2NtVnRZV2x1YVc1blhHNGdJR2x1YzJWeWRGUnlZV2xzYVc1bktHaDFibXNzSUcxcGJtVXBPMXh1SUNCcGJuTmxjblJVY21GcGJHbHVaeWhvZFc1ckxDQjBhR1ZwY2lrN1hHNWNiaUFnWTJGc1kweHBibVZEYjNWdWRDaG9kVzVyS1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYlhWMGRXRnNRMmhoYm1kbEtHaDFibXNzSUcxcGJtVXNJSFJvWldseUtTQjdYRzRnSUd4bGRDQnRlVU5vWVc1blpYTWdQU0JqYjJ4c1pXTjBRMmhoYm1kbEtHMXBibVVwTEZ4dUlDQWdJQ0FnZEdobGFYSkRhR0Z1WjJWeklEMGdZMjlzYkdWamRFTm9ZVzVuWlNoMGFHVnBjaWs3WEc1Y2JpQWdhV1lnS0dGc2JGSmxiVzkyWlhNb2JYbERhR0Z1WjJWektTQW1KaUJoYkd4U1pXMXZkbVZ6S0hSb1pXbHlRMmhoYm1kbGN5a3BJSHRjYmlBZ0lDQXZMeUJUY0dWamFXRnNJR05oYzJVZ1ptOXlJSEpsYlc5MlpTQmphR0Z1WjJWeklIUm9ZWFFnWVhKbElITjFjR1Z5YzJWMGN5QnZaaUJ2Ym1VZ1lXNXZkR2hsY2x4dUlDQWdJR2xtSUNoaGNuSmhlVk4wWVhKMGMxZHBkR2dvYlhsRGFHRnVaMlZ6TENCMGFHVnBja05vWVc1blpYTXBYRzRnSUNBZ0lDQWdJQ1ltSUhOcmFYQlNaVzF2ZG1WVGRYQmxjbk5sZENoMGFHVnBjaXdnYlhsRGFHRnVaMlZ6TENCdGVVTm9ZVzVuWlhNdWJHVnVaM1JvSUMwZ2RHaGxhWEpEYUdGdVoyVnpMbXhsYm1kMGFDa3BJSHRjYmlBZ0lDQWdJR2gxYm1zdWJHbHVaWE11Y0hWemFDZ3VMaTRnYlhsRGFHRnVaMlZ6S1R0Y2JpQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR0Z5Y21GNVUzUmhjblJ6VjJsMGFDaDBhR1ZwY2tOb1lXNW5aWE1zSUcxNVEyaGhibWRsY3lsY2JpQWdJQ0FnSUNBZ0ppWWdjMnRwY0ZKbGJXOTJaVk4xY0dWeWMyVjBLRzFwYm1Vc0lIUm9aV2x5UTJoaGJtZGxjeXdnZEdobGFYSkRhR0Z1WjJWekxteGxibWQwYUNBdElHMTVRMmhoYm1kbGN5NXNaVzVuZEdncEtTQjdYRzRnSUNBZ0lDQm9kVzVyTG14cGJtVnpMbkIxYzJnb0xpNHVJSFJvWldseVEyaGhibWRsY3lrN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1SUNCOUlHVnNjMlVnYVdZZ0tHRnljbUY1UlhGMVlXd29iWGxEYUdGdVoyVnpMQ0IwYUdWcGNrTm9ZVzVuWlhNcEtTQjdYRzRnSUNBZ2FIVnVheTVzYVc1bGN5NXdkWE5vS0M0dUxpQnRlVU5vWVc1blpYTXBPMXh1SUNBZ0lISmxkSFZ5Ymp0Y2JpQWdmVnh1WEc0Z0lHTnZibVpzYVdOMEtHaDFibXNzSUcxNVEyaGhibWRsY3l3Z2RHaGxhWEpEYUdGdVoyVnpLVHRjYm4xY2JseHVablZ1WTNScGIyNGdjbVZ0YjNaaGJDaG9kVzVyTENCdGFXNWxMQ0IwYUdWcGNpd2djM2RoY0NrZ2UxeHVJQ0JzWlhRZ2JYbERhR0Z1WjJWeklEMGdZMjlzYkdWamRFTm9ZVzVuWlNodGFXNWxLU3hjYmlBZ0lDQWdJSFJvWldseVEyaGhibWRsY3lBOUlHTnZiR3hsWTNSRGIyNTBaWGgwS0hSb1pXbHlMQ0J0ZVVOb1lXNW5aWE1wTzF4dUlDQnBaaUFvZEdobGFYSkRhR0Z1WjJWekxtMWxjbWRsWkNrZ2UxeHVJQ0FnSUdoMWJtc3ViR2x1WlhNdWNIVnphQ2d1TGk0Z2RHaGxhWEpEYUdGdVoyVnpMbTFsY21kbFpDazdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdZMjl1Wm14cFkzUW9hSFZ1YXl3Z2MzZGhjQ0EvSUhSb1pXbHlRMmhoYm1kbGN5QTZJRzE1UTJoaGJtZGxjeXdnYzNkaGNDQS9JRzE1UTJoaGJtZGxjeUE2SUhSb1pXbHlRMmhoYm1kbGN5azdYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnWTI5dVpteHBZM1FvYUhWdWF5d2diV2x1WlN3Z2RHaGxhWElwSUh0Y2JpQWdhSFZ1YXk1amIyNW1iR2xqZENBOUlIUnlkV1U3WEc0Z0lHaDFibXN1YkdsdVpYTXVjSFZ6YUNoN1hHNGdJQ0FnWTI5dVpteHBZM1E2SUhSeWRXVXNYRzRnSUNBZ2JXbHVaVG9nYldsdVpTeGNiaUFnSUNCMGFHVnBjbk02SUhSb1pXbHlYRzRnSUgwcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCcGJuTmxjblJNWldGa2FXNW5LR2gxYm1zc0lHbHVjMlZ5ZEN3Z2RHaGxhWElwSUh0Y2JpQWdkMmhwYkdVZ0tHbHVjMlZ5ZEM1dlptWnpaWFFnUENCMGFHVnBjaTV2Wm1aelpYUWdKaVlnYVc1elpYSjBMbWx1WkdWNElEd2dhVzV6WlhKMExteHBibVZ6TG14bGJtZDBhQ2tnZTF4dUlDQWdJR3hsZENCc2FXNWxJRDBnYVc1elpYSjBMbXhwYm1WelcybHVjMlZ5ZEM1cGJtUmxlQ3NyWFR0Y2JpQWdJQ0JvZFc1ckxteHBibVZ6TG5CMWMyZ29iR2x1WlNrN1hHNGdJQ0FnYVc1elpYSjBMbTltWm5ObGRDc3JPMXh1SUNCOVhHNTlYRzVtZFc1amRHbHZiaUJwYm5ObGNuUlVjbUZwYkdsdVp5aG9kVzVyTENCcGJuTmxjblFwSUh0Y2JpQWdkMmhwYkdVZ0tHbHVjMlZ5ZEM1cGJtUmxlQ0E4SUdsdWMyVnlkQzVzYVc1bGN5NXNaVzVuZEdncElIdGNiaUFnSUNCc1pYUWdiR2x1WlNBOUlHbHVjMlZ5ZEM1c2FXNWxjMXRwYm5ObGNuUXVhVzVrWlhncksxMDdYRzRnSUNBZ2FIVnVheTVzYVc1bGN5NXdkWE5vS0d4cGJtVXBPMXh1SUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUdOdmJHeGxZM1JEYUdGdVoyVW9jM1JoZEdVcElIdGNiaUFnYkdWMElISmxkQ0E5SUZ0ZExGeHVJQ0FnSUNBZ2IzQmxjbUYwYVc5dUlEMGdjM1JoZEdVdWJHbHVaWE5iYzNSaGRHVXVhVzVrWlhoZFd6QmRPMXh1SUNCM2FHbHNaU0FvYzNSaGRHVXVhVzVrWlhnZ1BDQnpkR0YwWlM1c2FXNWxjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQnNaWFFnYkdsdVpTQTlJSE4wWVhSbExteHBibVZ6VzNOMFlYUmxMbWx1WkdWNFhUdGNibHh1SUNBZ0lDOHZJRWR5YjNWd0lHRmtaR2wwYVc5dWN5QjBhR0YwSUdGeVpTQnBiVzFsWkdsaGRHVnNlU0JoWm5SbGNpQnpkV0owY21GamRHbHZibk1nWVc1a0lIUnlaV0YwSUhSb1pXMGdZWE1nYjI1bElGd2lZWFJ2YldsalhDSWdiVzlrYVdaNUlHTm9ZVzVuWlM1Y2JpQWdJQ0JwWmlBb2IzQmxjbUYwYVc5dUlEMDlQU0FuTFNjZ0ppWWdiR2x1WlZzd1hTQTlQVDBnSnlzbktTQjdYRzRnSUNBZ0lDQnZjR1Z5WVhScGIyNGdQU0FuS3ljN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHOXdaWEpoZEdsdmJpQTlQVDBnYkdsdVpWc3dYU2tnZTF4dUlDQWdJQ0FnY21WMExuQjFjMmdvYkdsdVpTazdYRzRnSUNBZ0lDQnpkR0YwWlM1cGJtUmxlQ3NyTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnY21WME8xeHVmVnh1Wm5WdVkzUnBiMjRnWTI5c2JHVmpkRU52Ym5SbGVIUW9jM1JoZEdVc0lHMWhkR05vUTJoaGJtZGxjeWtnZTF4dUlDQnNaWFFnWTJoaGJtZGxjeUE5SUZ0ZExGeHVJQ0FnSUNBZ2JXVnlaMlZrSUQwZ1cxMHNYRzRnSUNBZ0lDQnRZWFJqYUVsdVpHVjRJRDBnTUN4Y2JpQWdJQ0FnSUdOdmJuUmxlSFJEYUdGdVoyVnpJRDBnWm1Gc2MyVXNYRzRnSUNBZ0lDQmpiMjVtYkdsamRHVmtJRDBnWm1Gc2MyVTdYRzRnSUhkb2FXeGxJQ2h0WVhSamFFbHVaR1Y0SUR3Z2JXRjBZMmhEYUdGdVoyVnpMbXhsYm1kMGFGeHVJQ0FnSUNBZ0lDQW1KaUJ6ZEdGMFpTNXBibVJsZUNBOElITjBZWFJsTG14cGJtVnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lHeGxkQ0JqYUdGdVoyVWdQU0J6ZEdGMFpTNXNhVzVsYzF0emRHRjBaUzVwYm1SbGVGMHNYRzRnSUNBZ0lDQWdJRzFoZEdOb0lEMGdiV0YwWTJoRGFHRnVaMlZ6VzIxaGRHTm9TVzVrWlhoZE8xeHVYRzRnSUNBZ0x5OGdUMjVqWlNCM1pTZDJaU0JvYVhRZ2IzVnlJR0ZrWkN3Z2RHaGxiaUIzWlNCaGNtVWdaRzl1WlZ4dUlDQWdJR2xtSUNodFlYUmphRnN3WFNBOVBUMGdKeXNuS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjUwWlhoMFEyaGhibWRsY3lBOUlHTnZiblJsZUhSRGFHRnVaMlZ6SUh4OElHTm9ZVzVuWlZzd1hTQWhQVDBnSnlBbk8xeHVYRzRnSUNBZ2JXVnlaMlZrTG5CMWMyZ29iV0YwWTJncE8xeHVJQ0FnSUcxaGRHTm9TVzVrWlhnckt6dGNibHh1SUNBZ0lDOHZJRU52Ym5OMWJXVWdZVzU1SUdGa1pHbDBhVzl1Y3lCcGJpQjBhR1VnYjNSb1pYSWdZbXh2WTJzZ1lYTWdZU0JqYjI1bWJHbGpkQ0IwYnlCaGRIUmxiWEIwWEc0Z0lDQWdMeThnZEc4Z2NIVnNiQ0JwYmlCMGFHVWdjbVZ0WVdsdWFXNW5JR052Ym5SbGVIUWdZV1owWlhJZ2RHaHBjMXh1SUNBZ0lHbG1JQ2hqYUdGdVoyVmJNRjBnUFQwOUlDY3JKeWtnZTF4dUlDQWdJQ0FnWTI5dVpteHBZM1JsWkNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0FnSUhkb2FXeGxJQ2hqYUdGdVoyVmJNRjBnUFQwOUlDY3JKeWtnZTF4dUlDQWdJQ0FnSUNCamFHRnVaMlZ6TG5CMWMyZ29ZMmhoYm1kbEtUdGNiaUFnSUNBZ0lDQWdZMmhoYm1kbElEMGdjM1JoZEdVdWJHbHVaWE5iS3l0emRHRjBaUzVwYm1SbGVGMDdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzFoZEdOb0xuTjFZbk4wY2lneEtTQTlQVDBnWTJoaGJtZGxMbk4xWW5OMGNpZ3hLU2tnZTF4dUlDQWdJQ0FnWTJoaGJtZGxjeTV3ZFhOb0tHTm9ZVzVuWlNrN1hHNGdJQ0FnSUNCemRHRjBaUzVwYm1SbGVDc3JPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCamIyNW1iR2xqZEdWa0lEMGdkSEoxWlR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCcFppQW9LRzFoZEdOb1EyaGhibWRsYzF0dFlYUmphRWx1WkdWNFhTQjhmQ0FuSnlsYk1GMGdQVDA5SUNjckoxeHVJQ0FnSUNBZ0ppWWdZMjl1ZEdWNGRFTm9ZVzVuWlhNcElIdGNiaUFnSUNCamIyNW1iR2xqZEdWa0lEMGdkSEoxWlR0Y2JpQWdmVnh1WEc0Z0lHbG1JQ2hqYjI1bWJHbGpkR1ZrS1NCN1hHNGdJQ0FnY21WMGRYSnVJR05vWVc1blpYTTdYRzRnSUgxY2JseHVJQ0IzYUdsc1pTQW9iV0YwWTJoSmJtUmxlQ0E4SUcxaGRHTm9RMmhoYm1kbGN5NXNaVzVuZEdncElIdGNiaUFnSUNCdFpYSm5aV1F1Y0hWemFDaHRZWFJqYUVOb1lXNW5aWE5iYldGMFkyaEpibVJsZUNzclhTazdYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lHMWxjbWRsWkN4Y2JpQWdJQ0JqYUdGdVoyVnpYRzRnSUgwN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdGc2JGSmxiVzkyWlhNb1kyaGhibWRsY3lrZ2UxeHVJQ0J5WlhSMWNtNGdZMmhoYm1kbGN5NXlaV1IxWTJVb1puVnVZM1JwYjI0b2NISmxkaXdnWTJoaGJtZGxLU0I3WEc0Z0lDQWdjbVYwZFhKdUlIQnlaWFlnSmlZZ1kyaGhibWRsV3pCZElEMDlQU0FuTFNjN1hHNGdJSDBzSUhSeWRXVXBPMXh1ZlZ4dVpuVnVZM1JwYjI0Z2MydHBjRkpsYlc5MlpWTjFjR1Z5YzJWMEtITjBZWFJsTENCeVpXMXZkbVZEYUdGdVoyVnpMQ0JrWld4MFlTa2dlMXh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHUmxiSFJoT3lCcEt5c3BJSHRjYmlBZ0lDQnNaWFFnWTJoaGJtZGxRMjl1ZEdWdWRDQTlJSEpsYlc5MlpVTm9ZVzVuWlhOYmNtVnRiM1psUTJoaGJtZGxjeTVzWlc1bmRHZ2dMU0JrWld4MFlTQXJJR2xkTG5OMVluTjBjaWd4S1R0Y2JpQWdJQ0JwWmlBb2MzUmhkR1V1YkdsdVpYTmJjM1JoZEdVdWFXNWtaWGdnS3lCcFhTQWhQVDBnSnlBbklDc2dZMmhoYm1kbFEyOXVkR1Z1ZENrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSE4wWVhSbExtbHVaR1Y0SUNzOUlHUmxiSFJoTzF4dUlDQnlaWFIxY200Z2RISjFaVHRjYm4xY2JseHVablZ1WTNScGIyNGdZMkZzWTA5c1pFNWxkMHhwYm1WRGIzVnVkQ2hzYVc1bGN5a2dlMXh1SUNCc1pYUWdiMnhrVEdsdVpYTWdQU0F3TzF4dUlDQnNaWFFnYm1WM1RHbHVaWE1nUFNBd08xeHVYRzRnSUd4cGJtVnpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9iR2x1WlNrZ2UxeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2JHbHVaU0FoUFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lHeGxkQ0J0ZVVOdmRXNTBJRDBnWTJGc1kwOXNaRTVsZDB4cGJtVkRiM1Z1ZENoc2FXNWxMbTFwYm1VcE8xeHVJQ0FnSUNBZ2JHVjBJSFJvWldseVEyOTFiblFnUFNCallXeGpUMnhrVG1WM1RHbHVaVU52ZFc1MEtHeHBibVV1ZEdobGFYSnpLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHOXNaRXhwYm1WeklDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLRzE1UTI5MWJuUXViMnhrVEdsdVpYTWdQVDA5SUhSb1pXbHlRMjkxYm5RdWIyeGtUR2x1WlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0J2YkdSTWFXNWxjeUFyUFNCdGVVTnZkVzUwTG05c1pFeHBibVZ6TzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lHOXNaRXhwYm1WeklEMGdkVzVrWldacGJtVmtPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdsbUlDaHVaWGRNYVc1bGN5QWhQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h0ZVVOdmRXNTBMbTVsZDB4cGJtVnpJRDA5UFNCMGFHVnBja052ZFc1MExtNWxkMHhwYm1WektTQjdYRzRnSUNBZ0lDQWdJQ0FnYm1WM1RHbHVaWE1nS3owZ2JYbERiM1Z1ZEM1dVpYZE1hVzVsY3p0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQnVaWGRNYVc1bGN5QTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnBaaUFvYm1WM1RHbHVaWE1nSVQwOUlIVnVaR1ZtYVc1bFpDQW1KaUFvYkdsdVpWc3dYU0E5UFQwZ0p5c25JSHg4SUd4cGJtVmJNRjBnUFQwOUlDY2dKeWtwSUh0Y2JpQWdJQ0FnSUNBZ2JtVjNUR2x1WlhNckt6dGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2h2YkdSTWFXNWxjeUFoUFQwZ2RXNWtaV1pwYm1Wa0lDWW1JQ2hzYVc1bFd6QmRJRDA5UFNBbkxTY2dmSHdnYkdsdVpWc3dYU0E5UFQwZ0p5QW5LU2tnZTF4dUlDQWdJQ0FnSUNCdmJHUk1hVzVsY3lzck8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmU2s3WEc1Y2JpQWdjbVYwZFhKdUlIdHZiR1JNYVc1bGN5d2dibVYzVEdsdVpYTjlPMXh1ZlZ4dUlsMTlcblxuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3N0cnVjdHVyZWRQYXRjaCA9IHN0cnVjdHVyZWRQYXRjaDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY3JlYXRlVHdvRmlsZXNQYXRjaCA9IGNyZWF0ZVR3b0ZpbGVzUGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NyZWF0ZVBhdGNoID0gY3JlYXRlUGF0Y2g7XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fbGluZSA9IF9fd2VicGFja19yZXF1aXJlX18oNSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2Z1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovZnVuY3Rpb24gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG5cdCAgaWYgKCFvcHRpb25zKSB7XG5cdCAgICBvcHRpb25zID0ge307XG5cdCAgfVxuXHQgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuXHQgICAgb3B0aW9ucy5jb250ZXh0ID0gNDtcblx0ICB9XG5cblx0ICB2YXIgZGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX2xpbmUuZGlmZkxpbmVzKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG5cdCAgZGlmZi5wdXNoKHsgdmFsdWU6ICcnLCBsaW5lczogW10gfSk7IC8vIEFwcGVuZCBhbiBlbXB0eSB2YWx1ZSB0byBtYWtlIGNsZWFudXAgZWFzaWVyXG5cblx0ICBmdW5jdGlvbiBjb250ZXh0TGluZXMobGluZXMpIHtcblx0ICAgIHJldHVybiBsaW5lcy5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7XG5cdCAgICAgIHJldHVybiAnICcgKyBlbnRyeTtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIHZhciBodW5rcyA9IFtdO1xuXHQgIHZhciBvbGRSYW5nZVN0YXJ0ID0gMCxcblx0ICAgICAgbmV3UmFuZ2VTdGFydCA9IDAsXG5cdCAgICAgIGN1clJhbmdlID0gW10sXG5cdCAgICAgIG9sZExpbmUgPSAxLFxuXHQgICAgICBuZXdMaW5lID0gMTtcblxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9pKSB7XG5cdCAgICB2YXIgY3VycmVudCA9IGRpZmZbaV0sXG5cdCAgICAgICAgbGluZXMgPSBjdXJyZW50LmxpbmVzIHx8IGN1cnJlbnQudmFsdWUucmVwbGFjZSgvXFxuJC8sICcnKS5zcGxpdCgnXFxuJyk7XG5cdCAgICBjdXJyZW50LmxpbmVzID0gbGluZXM7XG5cblx0ICAgIGlmIChjdXJyZW50LmFkZGVkIHx8IGN1cnJlbnQucmVtb3ZlZCkge1xuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9jdXJSYW5nZTtcblxuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvLyBJZiB3ZSBoYXZlIHByZXZpb3VzIGNvbnRleHQsIHN0YXJ0IHdpdGggdGhhdFxuXHQgICAgICBpZiAoIW9sZFJhbmdlU3RhcnQpIHtcblx0ICAgICAgICB2YXIgcHJldiA9IGRpZmZbaSAtIDFdO1xuXHQgICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuXHQgICAgICAgIG5ld1JhbmdlU3RhcnQgPSBuZXdMaW5lO1xuXG5cdCAgICAgICAgaWYgKHByZXYpIHtcblx0ICAgICAgICAgIGN1clJhbmdlID0gb3B0aW9ucy5jb250ZXh0ID4gMCA/IGNvbnRleHRMaW5lcyhwcmV2LmxpbmVzLnNsaWNlKC1vcHRpb25zLmNvbnRleHQpKSA6IFtdO1xuXHQgICAgICAgICAgb2xkUmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG5cdCAgICAgICAgICBuZXdSYW5nZVN0YXJ0IC09IGN1clJhbmdlLmxlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICAvLyBPdXRwdXQgb3VyIGNoYW5nZXNcblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfY3VyUmFuZ2UgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2N1clJhbmdlKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY3VyUmFuZ2UgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovbGluZXMubWFwKGZ1bmN0aW9uIChlbnRyeSkge1xuXHQgICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcblx0ICAgICAgfSkpKTtcblxuXHQgICAgICAvLyBUcmFjayB0aGUgdXBkYXRlZCBmaWxlIHBvc2l0aW9uXG5cdCAgICAgIGlmIChjdXJyZW50LmFkZGVkKSB7XG5cdCAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG5cdCAgICAgIH1cblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIC8vIElkZW50aWNhbCBjb250ZXh0IGxpbmVzLiBUcmFjayBsaW5lIGNoYW5nZXNcblx0ICAgICAgaWYgKG9sZFJhbmdlU3RhcnQpIHtcblx0ICAgICAgICAvLyBDbG9zZSBvdXQgYW55IGNoYW5nZXMgdGhhdCBoYXZlIGJlZW4gb3V0cHV0IChvciBqb2luIG92ZXJsYXBwaW5nKVxuXHQgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPD0gb3B0aW9ucy5jb250ZXh0ICogMiAmJiBpIDwgZGlmZi5sZW5ndGggLSAyKSB7XG5cdCAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9jdXJSYW5nZTI7XG5cblx0ICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8vIE92ZXJsYXBwaW5nXG5cdCAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9jdXJSYW5nZTIgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2N1clJhbmdlKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY3VyUmFuZ2UyIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3RvQ29uc3VtYWJsZUFycmF5KCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NvbnRleHRMaW5lcyhsaW5lcykpKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfY3VyUmFuZ2UzO1xuXG5cdCAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvLyBlbmQgdGhlIHJhbmdlIGFuZCBvdXRwdXRcblx0ICAgICAgICAgIHZhciBjb250ZXh0U2l6ZSA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgb3B0aW9ucy5jb250ZXh0KTtcblx0ICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2N1clJhbmdlMyA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovY3VyUmFuZ2UpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19jdXJSYW5nZTMgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY29udGV4dExpbmVzKGxpbmVzLnNsaWNlKDAsIGNvbnRleHRTaXplKSkpKTtcblxuXHQgICAgICAgICAgdmFyIGh1bmsgPSB7XG5cdCAgICAgICAgICAgIG9sZFN0YXJ0OiBvbGRSYW5nZVN0YXJ0LFxuXHQgICAgICAgICAgICBvbGRMaW5lczogb2xkTGluZSAtIG9sZFJhbmdlU3RhcnQgKyBjb250ZXh0U2l6ZSxcblx0ICAgICAgICAgICAgbmV3U3RhcnQ6IG5ld1JhbmdlU3RhcnQsXG5cdCAgICAgICAgICAgIG5ld0xpbmVzOiBuZXdMaW5lIC0gbmV3UmFuZ2VTdGFydCArIGNvbnRleHRTaXplLFxuXHQgICAgICAgICAgICBsaW5lczogY3VyUmFuZ2Vcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgICBpZiAoaSA+PSBkaWZmLmxlbmd0aCAtIDIgJiYgbGluZXMubGVuZ3RoIDw9IG9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICAvLyBFT0YgaXMgaW5zaWRlIHRoaXMgaHVua1xuXHQgICAgICAgICAgICB2YXIgb2xkRU9GTmV3bGluZSA9IC9cXG4kLy50ZXN0KG9sZFN0cik7XG5cdCAgICAgICAgICAgIHZhciBuZXdFT0ZOZXdsaW5lID0gL1xcbiQvLnRlc3QobmV3U3RyKTtcblx0ICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PSAwICYmICFvbGRFT0ZOZXdsaW5lKSB7XG5cdCAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBvbGQgaGFzIG5vIGVvbCBhbmQgbm8gdHJhaWxpbmcgY29udGV4dDsgbm8tbmwgY2FuIGVuZCB1cCBiZWZvcmUgYWRkc1xuXHQgICAgICAgICAgICAgIGN1clJhbmdlLnNwbGljZShodW5rLm9sZExpbmVzLCAwLCAnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9sZEVPRk5ld2xpbmUgfHwgIW5ld0VPRk5ld2xpbmUpIHtcblx0ICAgICAgICAgICAgICBjdXJSYW5nZS5wdXNoKCdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgaHVua3MucHVzaChodW5rKTtcblxuXHQgICAgICAgICAgb2xkUmFuZ2VTdGFydCA9IDA7XG5cdCAgICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gMDtcblx0ICAgICAgICAgIGN1clJhbmdlID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuXHQgICAgICBuZXdMaW5lICs9IGxpbmVzLmxlbmd0aDtcblx0ICAgIH1cblx0ICB9O1xuXG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaWZmLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2xvb3AoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovaSk7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHtcblx0ICAgIG9sZEZpbGVOYW1lOiBvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWU6IG5ld0ZpbGVOYW1lLFxuXHQgICAgb2xkSGVhZGVyOiBvbGRIZWFkZXIsIG5ld0hlYWRlcjogbmV3SGVhZGVyLFxuXHQgICAgaHVua3M6IGh1bmtzXG5cdCAgfTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcblx0ICB2YXIgZGlmZiA9IHN0cnVjdHVyZWRQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucyk7XG5cblx0ICB2YXIgcmV0ID0gW107XG5cdCAgaWYgKG9sZEZpbGVOYW1lID09IG5ld0ZpbGVOYW1lKSB7XG5cdCAgICByZXQucHVzaCgnSW5kZXg6ICcgKyBvbGRGaWxlTmFtZSk7XG5cdCAgfVxuXHQgIHJldC5wdXNoKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG5cdCAgcmV0LnB1c2goJy0tLSAnICsgZGlmZi5vbGRGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5vbGRIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYub2xkSGVhZGVyKSk7XG5cdCAgcmV0LnB1c2goJysrKyAnICsgZGlmZi5uZXdGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5uZXdIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYubmV3SGVhZGVyKSk7XG5cblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmYuaHVua3MubGVuZ3RoOyBpKyspIHtcblx0ICAgIHZhciBodW5rID0gZGlmZi5odW5rc1tpXTtcblx0ICAgIHJldC5wdXNoKCdAQCAtJyArIGh1bmsub2xkU3RhcnQgKyAnLCcgKyBodW5rLm9sZExpbmVzICsgJyArJyArIGh1bmsubmV3U3RhcnQgKyAnLCcgKyBodW5rLm5ld0xpbmVzICsgJyBAQCcpO1xuXHQgICAgcmV0LnB1c2guYXBwbHkocmV0LCBodW5rLmxpbmVzKTtcblx0ICB9XG5cblx0ICByZXR1cm4gcmV0LmpvaW4oJ1xcbicpICsgJ1xcbic7XG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVQYXRjaChmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG5cdCAgcmV0dXJuIGNyZWF0ZVR3b0ZpbGVzUGF0Y2goZmlsZU5hbWUsIGZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWFJqYUM5amNtVmhkR1V1YW5NaVhTd2libUZ0WlhNaU9sc2ljM1J5ZFdOMGRYSmxaRkJoZEdOb0lpd2lZM0psWVhSbFZIZHZSbWxzWlhOUVlYUmphQ0lzSW1OeVpXRjBaVkJoZEdOb0lpd2liMnhrUm1sc1pVNWhiV1VpTENKdVpYZEdhV3hsVG1GdFpTSXNJbTlzWkZOMGNpSXNJbTVsZDFOMGNpSXNJbTlzWkVobFlXUmxjaUlzSW01bGQwaGxZV1JsY2lJc0ltOXdkR2x2Ym5NaUxDSmpiMjUwWlhoMElpd2laR2xtWmlJc0luQjFjMmdpTENKMllXeDFaU0lzSW14cGJtVnpJaXdpWTI5dWRHVjRkRXhwYm1Weklpd2liV0Z3SWl3aVpXNTBjbmtpTENKb2RXNXJjeUlzSW05c1pGSmhibWRsVTNSaGNuUWlMQ0p1WlhkU1lXNW5aVk4wWVhKMElpd2lZM1Z5VW1GdVoyVWlMQ0p2YkdSTWFXNWxJaXdpYm1WM1RHbHVaU0lzSW1raUxDSmpkWEp5Wlc1MElpd2ljbVZ3YkdGalpTSXNJbk53YkdsMElpd2lZV1JrWldRaUxDSnlaVzF2ZG1Wa0lpd2ljSEpsZGlJc0luTnNhV05sSWl3aWJHVnVaM1JvSWl3aVkyOXVkR1Y0ZEZOcGVtVWlMQ0pOWVhSb0lpd2liV2x1SWl3aWFIVnVheUlzSW05c1pGTjBZWEowSWl3aWIyeGtUR2x1WlhNaUxDSnVaWGRUZEdGeWRDSXNJbTVsZDB4cGJtVnpJaXdpYjJ4a1JVOUdUbVYzYkdsdVpTSXNJblJsYzNRaUxDSnVaWGRGVDBaT1pYZHNhVzVsSWl3aWMzQnNhV05sSWl3aWNtVjBJaXdpWVhCd2JIa2lMQ0pxYjJsdUlpd2labWxzWlU1aGJXVWlYU3dpYldGd2NHbHVaM01pT2lJN096dG5RMEZGWjBKQkxHVXNSMEZCUVVFc1pUdDVSRUZwUjBGRExHMUNMRWRCUVVGQkxHMUNPM2xFUVhkQ1FVTXNWeXhIUVVGQlFTeFhPenRCUVROSWFFSTdPenM3ZFVKQlJVOHNVMEZCVTBZc1pVRkJWQ3hEUVVGNVFrY3NWMEZCZWtJc1JVRkJjME5ETEZkQlFYUkRMRVZCUVcxRVF5eE5RVUZ1UkN4RlFVRXlSRU1zVFVGQk0wUXNSVUZCYlVWRExGTkJRVzVGTEVWQlFUaEZReXhUUVVFNVJTeEZRVUY1UmtNc1QwRkJla1lzUlVGQmEwYzdRVUZEZGtjc1RVRkJTU3hEUVVGRFFTeFBRVUZNTEVWQlFXTTdRVUZEV2tFc1kwRkJWU3hGUVVGV08wRkJRMFE3UVVGRFJDeE5RVUZKTEU5QlFVOUJMRkZCUVZGRExFOUJRV1lzUzBGQk1rSXNWMEZCTDBJc1JVRkJORU03UVVGRE1VTkVMRmxCUVZGRExFOUJRVklzUjBGQmEwSXNRMEZCYkVJN1FVRkRSRHM3UVVGRlJDeE5RVUZOUXl4UFFVRlBMSE5GUVVGVlRpeE5RVUZXTEVWQlFXdENReXhOUVVGc1FpeEZRVUV3UWtjc1QwRkJNVUlzUTBGQllqdEJRVU5CUlN4UFFVRkxReXhKUVVGTUxFTkJRVlVzUlVGQlEwTXNUMEZCVHl4RlFVRlNMRVZCUVZsRExFOUJRVThzUlVGQmJrSXNSVUZCVml4RlFWUjFSeXhEUVZOc1JUczdRVUZGY2tNc1YwRkJVME1zV1VGQlZDeERRVUZ6UWtRc1MwRkJkRUlzUlVGQk5rSTdRVUZETTBJc1YwRkJUMEVzVFVGQlRVVXNSMEZCVGl4RFFVRlZMRlZCUVZORExFdEJRVlFzUlVGQlowSTdRVUZCUlN4aFFVRlBMRTFCUVUxQkxFdEJRV0k3UVVGQmNVSXNTMEZCYWtRc1EwRkJVRHRCUVVORU96dEJRVVZFTEUxQlFVbERMRkZCUVZFc1JVRkJXanRCUVVOQkxFMUJRVWxETEdkQ1FVRm5RaXhEUVVGd1FqdEJRVUZCTEUxQlFYVkNReXhuUWtGQlowSXNRMEZCZGtNN1FVRkJRU3hOUVVFd1EwTXNWMEZCVnl4RlFVRnlSRHRCUVVGQkxFMUJRMGxETEZWQlFWVXNRMEZFWkR0QlFVRkJMRTFCUTJsQ1F5eFZRVUZWTEVOQlJETkNPenRCUVdoQ2RVY3NPRVZCYTBJNVJrTXNRMEZzUWpoR08wRkJiVUp5Unl4UlFVRk5ReXhWUVVGVlpDeExRVUZMWVN4RFFVRk1MRU5CUVdoQ08wRkJRVUVzVVVGRFRWWXNVVUZCVVZjc1VVRkJVVmdzUzBGQlVpeEpRVUZwUWxjc1VVRkJVVm9zUzBGQlVpeERRVUZqWVN4UFFVRmtMRU5CUVhOQ0xFdEJRWFJDTEVWQlFUWkNMRVZCUVRkQ0xFVkJRV2xEUXl4TFFVRnFReXhEUVVGMVF5eEpRVUYyUXl4RFFVUXZRanRCUVVWQlJpeFpRVUZSV0N4TFFVRlNMRWRCUVdkQ1FTeExRVUZvUWpzN1FVRkZRU3hSUVVGSlZ5eFJRVUZSUnl4TFFVRlNMRWxCUVdsQ1NDeFJRVUZSU1N4UFFVRTNRaXhGUVVGelF6dEJRVUZCT3p0QlFVRkJMRGhDUVVOd1F6dEJRVU5CTEZWQlFVa3NRMEZCUTFZc1lVRkJUQ3hGUVVGdlFqdEJRVU5zUWl4WlFVRk5WeXhQUVVGUGJrSXNTMEZCUzJFc1NVRkJTU3hEUVVGVUxFTkJRV0k3UVVGRFFVd3NkMEpCUVdkQ1J5eFBRVUZvUWp0QlFVTkJSaXgzUWtGQlowSkhMRTlCUVdoQ096dEJRVVZCTEZsQlFVbFBMRWxCUVVvc1JVRkJWVHRCUVVOU1ZDeHhRa0ZCVjFvc1VVRkJVVU1zVDBGQlVpeEhRVUZyUWl4RFFVRnNRaXhIUVVGelFrc3NZVUZCWVdVc1MwRkJTMmhDTEV0QlFVd3NRMEZCVjJsQ0xFdEJRVmdzUTBGQmFVSXNRMEZCUTNSQ0xGRkJRVkZETEU5QlFURkNMRU5CUVdJc1EwRkJkRUlzUjBGQmVVVXNSVUZCY0VZN1FVRkRRVk1zTWtKQlFXbENSU3hUUVVGVFZ5eE5RVUV4UWp0QlFVTkJXaXd5UWtGQmFVSkRMRk5CUVZOWExFMUJRVEZDTzBGQlEwUTdRVUZEUmpzN1FVRkZSRHRCUVVOQkxEWkZRVUZUY0VJc1NVRkJWQ3d3VEVGQmEwSkZMRTFCUVUxRkxFZEJRVTRzUTBGQlZTeFZRVUZUUXl4TFFVRlVMRVZCUVdkQ08wRkJRekZETEdWQlFVOHNRMEZCUTFFc1VVRkJVVWNzUzBGQlVpeEhRVUZuUWl4SFFVRm9RaXhIUVVGelFpeEhRVUYyUWl4SlFVRTRRbGdzUzBGQmNrTTdRVUZEUkN4UFFVWnBRaXhEUVVGc1FqczdRVUZKUVR0QlFVTkJMRlZCUVVsUkxGRkJRVkZITEV0QlFWb3NSVUZCYlVJN1FVRkRha0pNTEcxQ1FVRlhWQ3hOUVVGTmEwSXNUVUZCYWtJN1FVRkRSQ3hQUVVaRUxFMUJSVTg3UVVGRFRGWXNiVUpCUVZkU0xFMUJRVTFyUWl4TlFVRnFRanRCUVVORU8wRkJRMFlzUzBGNlFrUXNUVUY1UWs4N1FVRkRURHRCUVVOQkxGVkJRVWxpTEdGQlFVb3NSVUZCYlVJN1FVRkRha0k3UVVGRFFTeFpRVUZKVEN4TlFVRk5hMElzVFVGQlRpeEpRVUZuUW5aQ0xGRkJRVkZETEU5QlFWSXNSMEZCYTBJc1EwRkJiRU1zU1VGQmRVTmpMRWxCUVVsaUxFdEJRVXR4UWl4TlFVRk1MRWRCUVdNc1EwRkJOMFFzUlVGQlowVTdRVUZCUVRzN1FVRkJRU3hyUTBGRE9VUTdRVUZEUVN4clJrRkJVM0JDTEVsQlFWUXNNa3hCUVd0Q1J5eGhRVUZoUkN4TFFVRmlMRU5CUVd4Q08wRkJRMFFzVTBGSVJDeE5RVWRQTzBGQlFVRTdPMEZCUVVFc2EwTkJRMHc3UVVGRFFTeGpRVUZKYlVJc1kwRkJZME1zUzBGQlMwTXNSMEZCVEN4RFFVRlRja0lzVFVGQlRXdENMRTFCUVdZc1JVRkJkVUoyUWl4UlFVRlJReXhQUVVFdlFpeERRVUZzUWp0QlFVTkJMR3RHUVVGVFJTeEpRVUZVTERKTVFVRnJRa2NzWVVGQllVUXNUVUZCVFdsQ0xFdEJRVTRzUTBGQldTeERRVUZhTEVWQlFXVkZMRmRCUVdZc1EwRkJZaXhEUVVGc1FqczdRVUZGUVN4alFVRkpSeXhQUVVGUE8wRkJRMVJETEhOQ1FVRlZiRUlzWVVGRVJEdEJRVVZVYlVJc2MwSkJRVmRvUWl4VlFVRlZTQ3hoUVVGV0xFZEJRVEJDWXl4WFFVWTFRanRCUVVkVVRTeHpRa0ZCVlc1Q0xHRkJTRVE3UVVGSlZHOUNMSE5DUVVGWGFrSXNWVUZCVlVnc1lVRkJWaXhIUVVFd1FtRXNWMEZLTlVJN1FVRkxWRzVDTEcxQ1FVRlBUenRCUVV4RkxGZEJRVmc3UVVGUFFTeGpRVUZKUnl4TFFVRkxZaXhMUVVGTGNVSXNUVUZCVEN4SFFVRmpMRU5CUVc1Q0xFbEJRWGRDYkVJc1RVRkJUV3RDTEUxQlFVNHNTVUZCWjBKMlFpeFJRVUZSUXl4UFFVRndSQ3hGUVVFMlJEdEJRVU16UkR0QlFVTkJMR2RDUVVGSkswSXNaMEpCUVdsQ0xFMUJRVTFETEVsQlFVNHNRMEZCVjNKRExFMUJRVmdzUTBGQmNrSTdRVUZEUVN4blFrRkJTWE5ETEdkQ1FVRnBRaXhOUVVGTlJDeEpRVUZPTEVOQlFWZHdReXhOUVVGWUxFTkJRWEpDTzBGQlEwRXNaMEpCUVVsUkxFMUJRVTFyUWl4TlFVRk9MRWxCUVdkQ0xFTkJRV2hDTEVsQlFYRkNMRU5CUVVOVExHRkJRVEZDTEVWQlFYbERPMEZCUTNaRE8wRkJRMEZ3UWl4MVFrRkJVM1ZDTEUxQlFWUXNRMEZCWjBKU0xFdEJRVXRGTEZGQlFYSkNMRVZCUVN0Q0xFTkJRUzlDTEVWQlFXdERMRGhDUVVGc1F6dEJRVU5FTEdGQlNFUXNUVUZIVHl4SlFVRkpMRU5CUVVOSExHRkJRVVFzU1VGQmEwSXNRMEZCUTBVc1lVRkJka0lzUlVGQmMwTTdRVUZETTBOMFFpeDFRa0ZCVTFRc1NVRkJWQ3hEUVVGakxEaENRVUZrTzBGQlEwUTdRVUZEUmp0QlFVTkVUU3huUWtGQlRVNHNTVUZCVGl4RFFVRlhkMElzU1VGQldEczdRVUZGUVdwQ0xEQkNRVUZuUWl4RFFVRm9RanRCUVVOQlF5d3dRa0ZCWjBJc1EwRkJhRUk3UVVGRFFVTXNjVUpCUVZjc1JVRkJXRHRCUVVORU8wRkJRMFk3UVVGRFJFTXNhVUpCUVZkU0xFMUJRVTFyUWl4TlFVRnFRanRCUVVOQlZDeHBRa0ZCVjFRc1RVRkJUV3RDTEUxQlFXcENPMEZCUTBRN1FVRjJSbTlIT3p0QlFXdENka2NzVDBGQlN5eEpRVUZKVWl4SlFVRkpMRU5CUVdJc1JVRkJaMEpCTEVsQlFVbGlMRXRCUVV0eFFpeE5RVUY2UWl4RlFVRnBRMUlzUjBGQmFrTXNSVUZCYzBNN1FVRkJRU3d5UkVGQk4wSkJMRU5CUVRaQ08wRkJjMFZ5UXpzN1FVRkZSQ3hUUVVGUE8wRkJRMHh5UWl4cFFrRkJZVUVzVjBGRVVpeEZRVU54UWtNc1lVRkJZVUVzVjBGRWJFTTdRVUZGVEVjc1pVRkJWMEVzVTBGR1RpeEZRVVZwUWtNc1YwRkJWMEVzVTBGR05VSTdRVUZIVEZVc1YwRkJUMEU3UVVGSVJpeEhRVUZRTzBGQlMwUTdPMEZCUlUwc1UwRkJVMnBDTEcxQ1FVRlVMRU5CUVRaQ1JTeFhRVUUzUWl4RlFVRXdRME1zVjBGQk1VTXNSVUZCZFVSRExFMUJRWFpFTEVWQlFTdEVReXhOUVVFdlJDeEZRVUYxUlVNc1UwRkJka1VzUlVGQmEwWkRMRk5CUVd4R0xFVkJRVFpHUXl4UFFVRTNSaXhGUVVGelJ6dEJRVU16Unl4TlFVRk5SU3hQUVVGUFdDeG5Ra0ZCWjBKSExGZEJRV2hDTEVWQlFUWkNReXhYUVVFM1FpeEZRVUV3UTBNc1RVRkJNVU1zUlVGQmEwUkRMRTFCUVd4RUxFVkJRVEJFUXl4VFFVRXhSQ3hGUVVGeFJVTXNVMEZCY2tVc1JVRkJaMFpETEU5QlFXaEdMRU5CUVdJN08wRkJSVUVzVFVGQlRXOURMRTFCUVUwc1JVRkJXanRCUVVOQkxFMUJRVWt4UXl4bFFVRmxReXhYUVVGdVFpeEZRVUZuUXp0QlFVTTVRbmxETEZGQlFVbHFReXhKUVVGS0xFTkJRVk1zV1VGQldWUXNWMEZCY2tJN1FVRkRSRHRCUVVORU1FTXNUVUZCU1dwRExFbEJRVW9zUTBGQlV5eHhSVUZCVkR0QlFVTkJhVU1zVFVGQlNXcERMRWxCUVVvc1EwRkJVeXhUUVVGVFJDeExRVUZMVWl4WFFVRmtMRWxCUVRaQ0xFOUJRVTlSTEV0QlFVdEtMRk5CUVZvc1MwRkJNRUlzVjBGQk1VSXNSMEZCZDBNc1JVRkJlRU1zUjBGQk5rTXNUMEZCVDBrc1MwRkJTMG9zVTBGQmRFWXNRMEZCVkR0QlFVTkJjME1zVFVGQlNXcERMRWxCUVVvc1EwRkJVeXhUUVVGVFJDeExRVUZMVUN4WFFVRmtMRWxCUVRaQ0xFOUJRVTlQTEV0QlFVdElMRk5CUVZvc1MwRkJNRUlzVjBGQk1VSXNSMEZCZDBNc1JVRkJlRU1zUjBGQk5rTXNUMEZCVDBjc1MwRkJTMGdzVTBGQmRFWXNRMEZCVkRzN1FVRkZRU3hQUVVGTExFbEJRVWxuUWl4SlFVRkpMRU5CUVdJc1JVRkJaMEpCTEVsQlFVbGlMRXRCUVV0UExFdEJRVXdzUTBGQlYyTXNUVUZCTDBJc1JVRkJkVU5TTEVkQlFYWkRMRVZCUVRSRE8wRkJRekZETEZGQlFVMVpMRTlCUVU5NlFpeExRVUZMVHl4TFFVRk1MRU5CUVZkTkxFTkJRVmdzUTBGQllqdEJRVU5CY1VJc1VVRkJTV3BETEVsQlFVb3NRMEZEUlN4VFFVRlRkMElzUzBGQlMwTXNVVUZCWkN4SFFVRjVRaXhIUVVGNlFpeEhRVUVyUWtRc1MwRkJTMFVzVVVGQmNFTXNSMEZEUlN4SlFVUkdMRWRCUTFOR0xFdEJRVXRITEZGQlJHUXNSMEZEZVVJc1IwRkVla0lzUjBGREswSklMRXRCUVV0SkxGRkJSSEJETEVkQlJVVXNTMEZJU2p0QlFVdEJTeXhSUVVGSmFrTXNTVUZCU2l4RFFVRlRhME1zUzBGQlZDeERRVUZsUkN4SFFVRm1MRVZCUVc5Q1ZDeExRVUZMZEVJc1MwRkJla0k3UVVGRFJEczdRVUZGUkN4VFFVRlBLMElzU1VGQlNVVXNTVUZCU2l4RFFVRlRMRWxCUVZRc1NVRkJhVUlzU1VGQmVFSTdRVUZEUkRzN1FVRkZUU3hUUVVGVE4wTXNWMEZCVkN4RFFVRnhRamhETEZGQlFYSkNMRVZCUVN0Q00wTXNUVUZCTDBJc1JVRkJkVU5ETEUxQlFYWkRMRVZCUVN0RFF5eFRRVUV2UXl4RlFVRXdSRU1zVTBGQk1VUXNSVUZCY1VWRExFOUJRWEpGTEVWQlFUaEZPMEZCUTI1R0xGTkJRVTlTTEc5Q1FVRnZRaXRETEZGQlFYQkNMRVZCUVRoQ1FTeFJRVUU1UWl4RlFVRjNRek5ETEUxQlFYaERMRVZCUVdkRVF5eE5RVUZvUkN4RlFVRjNSRU1zVTBGQmVFUXNSVUZCYlVWRExGTkJRVzVGTEVWQlFUaEZReXhQUVVFNVJTeERRVUZRTzBGQlEwUWlMQ0ptYVd4bElqb2lZM0psWVhSbExtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHRrYVdabVRHbHVaWE45SUdaeWIyMGdKeTR1TDJScFptWXZiR2x1WlNjN1hHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnpkSEoxWTNSMWNtVmtVR0YwWTJnb2IyeGtSbWxzWlU1aGJXVXNJRzVsZDBacGJHVk9ZVzFsTENCdmJHUlRkSElzSUc1bGQxTjBjaXdnYjJ4a1NHVmhaR1Z5TENCdVpYZElaV0ZrWlhJc0lHOXdkR2x2Ym5NcElIdGNiaUFnYVdZZ0tDRnZjSFJwYjI1ektTQjdYRzRnSUNBZ2IzQjBhVzl1Y3lBOUlIdDlPMXh1SUNCOVhHNGdJR2xtSUNoMGVYQmxiMllnYjNCMGFXOXVjeTVqYjI1MFpYaDBJRDA5UFNBbmRXNWtaV1pwYm1Wa0p5a2dlMXh1SUNBZ0lHOXdkR2x2Ym5NdVkyOXVkR1Y0ZENBOUlEUTdYRzRnSUgxY2JseHVJQ0JqYjI1emRDQmthV1ptSUQwZ1pHbG1aa3hwYm1WektHOXNaRk4wY2l3Z2JtVjNVM1J5TENCdmNIUnBiMjV6S1R0Y2JpQWdaR2xtWmk1d2RYTm9LSHQyWVd4MVpUb2dKeWNzSUd4cGJtVnpPaUJiWFgwcE95QWdJQzh2SUVGd2NHVnVaQ0JoYmlCbGJYQjBlU0IyWVd4MVpTQjBieUJ0WVd0bElHTnNaV0Z1ZFhBZ1pXRnphV1Z5WEc1Y2JpQWdablZ1WTNScGIyNGdZMjl1ZEdWNGRFeHBibVZ6S0d4cGJtVnpLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHeHBibVZ6TG0xaGNDaG1kVzVqZEdsdmJpaGxiblJ5ZVNrZ2V5QnlaWFIxY200Z0p5QW5JQ3NnWlc1MGNuazdJSDBwTzF4dUlDQjlYRzVjYmlBZ2JHVjBJR2gxYm10eklEMGdXMTA3WEc0Z0lHeGxkQ0J2YkdSU1lXNW5aVk4wWVhKMElEMGdNQ3dnYm1WM1VtRnVaMlZUZEdGeWRDQTlJREFzSUdOMWNsSmhibWRsSUQwZ1cxMHNYRzRnSUNBZ0lDQnZiR1JNYVc1bElEMGdNU3dnYm1WM1RHbHVaU0E5SURFN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWkdsbVppNXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR052Ym5OMElHTjFjbkpsYm5RZ1BTQmthV1ptVzJsZExGeHVJQ0FnSUNBZ0lDQWdJR3hwYm1WeklEMGdZM1Z5Y21WdWRDNXNhVzVsY3lCOGZDQmpkWEp5Wlc1MExuWmhiSFZsTG5KbGNHeGhZMlVvTDF4Y2JpUXZMQ0FuSnlrdWMzQnNhWFFvSjF4Y2JpY3BPMXh1SUNBZ0lHTjFjbkpsYm5RdWJHbHVaWE1nUFNCc2FXNWxjenRjYmx4dUlDQWdJR2xtSUNoamRYSnlaVzUwTG1Ga1pHVmtJSHg4SUdOMWNuSmxiblF1Y21WdGIzWmxaQ2tnZTF4dUlDQWdJQ0FnTHk4Z1NXWWdkMlVnYUdGMlpTQndjbVYyYVc5MWN5QmpiMjUwWlhoMExDQnpkR0Z5ZENCM2FYUm9JSFJvWVhSY2JpQWdJQ0FnSUdsbUlDZ2hiMnhrVW1GdVoyVlRkR0Z5ZENrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd2NtVjJJRDBnWkdsbVpsdHBJQzBnTVYwN1hHNGdJQ0FnSUNBZ0lHOXNaRkpoYm1kbFUzUmhjblFnUFNCdmJHUk1hVzVsTzF4dUlDQWdJQ0FnSUNCdVpYZFNZVzVuWlZOMFlYSjBJRDBnYm1WM1RHbHVaVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9jSEpsZGlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR04xY2xKaGJtZGxJRDBnYjNCMGFXOXVjeTVqYjI1MFpYaDBJRDRnTUNBL0lHTnZiblJsZUhSTWFXNWxjeWh3Y21WMkxteHBibVZ6TG5Oc2FXTmxLQzF2Y0hScGIyNXpMbU52Ym5SbGVIUXBLU0E2SUZ0ZE8xeHVJQ0FnSUNBZ0lDQWdJRzlzWkZKaGJtZGxVM1JoY25RZ0xUMGdZM1Z5VW1GdVoyVXViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQWdJRzVsZDFKaGJtZGxVM1JoY25RZ0xUMGdZM1Z5VW1GdVoyVXViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQzh2SUU5MWRIQjFkQ0J2ZFhJZ1kyaGhibWRsYzF4dUlDQWdJQ0FnWTNWeVVtRnVaMlV1Y0hWemFDZ3VMaTRnYkdsdVpYTXViV0Z3S0daMWJtTjBhVzl1S0dWdWRISjVLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUFvWTNWeWNtVnVkQzVoWkdSbFpDQS9JQ2NySnlBNklDY3RKeWtnS3lCbGJuUnllVHRjYmlBZ0lDQWdJSDBwS1R0Y2JseHVJQ0FnSUNBZ0x5OGdWSEpoWTJzZ2RHaGxJSFZ3WkdGMFpXUWdabWxzWlNCd2IzTnBkR2x2Ymx4dUlDQWdJQ0FnYVdZZ0tHTjFjbkpsYm5RdVlXUmtaV1FwSUh0Y2JpQWdJQ0FnSUNBZ2JtVjNUR2x1WlNBclBTQnNhVzVsY3k1c1pXNW5kR2c3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0J2YkdSTWFXNWxJQ3M5SUd4cGJtVnpMbXhsYm1kMGFEdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnTHk4Z1NXUmxiblJwWTJGc0lHTnZiblJsZUhRZ2JHbHVaWE11SUZSeVlXTnJJR3hwYm1VZ1kyaGhibWRsYzF4dUlDQWdJQ0FnYVdZZ0tHOXNaRkpoYm1kbFUzUmhjblFwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdRMnh2YzJVZ2IzVjBJR0Z1ZVNCamFHRnVaMlZ6SUhSb1lYUWdhR0YyWlNCaVpXVnVJRzkxZEhCMWRDQW9iM0lnYW05cGJpQnZkbVZ5YkdGd2NHbHVaeWxjYmlBZ0lDQWdJQ0FnYVdZZ0tHeHBibVZ6TG14bGJtZDBhQ0E4UFNCdmNIUnBiMjV6TG1OdmJuUmxlSFFnS2lBeUlDWW1JR2tnUENCa2FXWm1MbXhsYm1kMGFDQXRJRElwSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJQZG1WeWJHRndjR2x1WjF4dUlDQWdJQ0FnSUNBZ0lHTjFjbEpoYm1kbExuQjFjMmdvTGk0dUlHTnZiblJsZUhSTWFXNWxjeWhzYVc1bGN5a3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUM4dklHVnVaQ0IwYUdVZ2NtRnVaMlVnWVc1a0lHOTFkSEIxZEZ4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0JqYjI1MFpYaDBVMmw2WlNBOUlFMWhkR2d1YldsdUtHeHBibVZ6TG14bGJtZDBhQ3dnYjNCMGFXOXVjeTVqYjI1MFpYaDBLVHRjYmlBZ0lDQWdJQ0FnSUNCamRYSlNZVzVuWlM1d2RYTm9LQzR1TGlCamIyNTBaWGgwVEdsdVpYTW9iR2x1WlhNdWMyeHBZMlVvTUN3Z1kyOXVkR1Y0ZEZOcGVtVXBLU2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQnNaWFFnYUhWdWF5QTlJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHOXNaRk4wWVhKME9pQnZiR1JTWVc1blpWTjBZWEowTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdiMnhrVEdsdVpYTTZJQ2h2YkdSTWFXNWxJQzBnYjJ4a1VtRnVaMlZUZEdGeWRDQXJJR052Ym5SbGVIUlRhWHBsS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVsZDFOMFlYSjBPaUJ1WlhkU1lXNW5aVk4wWVhKMExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYm1WM1RHbHVaWE02SUNodVpYZE1hVzVsSUMwZ2JtVjNVbUZ1WjJWVGRHRnlkQ0FySUdOdmJuUmxlSFJUYVhwbEtTeGNiaUFnSUNBZ0lDQWdJQ0FnSUd4cGJtVnpPaUJqZFhKU1lXNW5aVnh1SUNBZ0lDQWdJQ0FnSUgwN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0drZ1BqMGdaR2xtWmk1c1pXNW5kR2dnTFNBeUlDWW1JR3hwYm1WekxteGxibWQwYUNBOFBTQnZjSFJwYjI1ekxtTnZiblJsZUhRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklFVlBSaUJwY3lCcGJuTnBaR1VnZEdocGN5Qm9kVzVyWEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYjJ4a1JVOUdUbVYzYkdsdVpTQTlJQ2d2WEZ4dUpDOHVkR1Z6ZENodmJHUlRkSElwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCdVpYZEZUMFpPWlhkc2FXNWxJRDBnS0M5Y1hHNGtMeTUwWlhOMEtHNWxkMU4wY2lrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHeHBibVZ6TG14bGJtZDBhQ0E5UFNBd0lDWW1JQ0Z2YkdSRlQwWk9aWGRzYVc1bEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJSE53WldOcFlXd2dZMkZ6WlRvZ2IyeGtJR2hoY3lCdWJ5QmxiMndnWVc1a0lHNXZJSFJ5WVdsc2FXNW5JR052Ym5SbGVIUTdJRzV2TFc1c0lHTmhiaUJsYm1RZ2RYQWdZbVZtYjNKbElHRmtaSE5jYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZM1Z5VW1GdVoyVXVjM0JzYVdObEtHaDFibXN1YjJ4a1RHbHVaWE1zSURBc0lDZGNYRnhjSUU1dklHNWxkMnhwYm1VZ1lYUWdaVzVrSUc5bUlHWnBiR1VuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvSVc5c1pFVlBSazVsZDJ4cGJtVWdmSHdnSVc1bGQwVlBSazVsZDJ4cGJtVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZM1Z5VW1GdVoyVXVjSFZ6YUNnblhGeGNYQ0JPYnlCdVpYZHNhVzVsSUdGMElHVnVaQ0J2WmlCbWFXeGxKeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lHaDFibXR6TG5CMWMyZ29hSFZ1YXlrN1hHNWNiaUFnSUNBZ0lDQWdJQ0J2YkdSU1lXNW5aVk4wWVhKMElEMGdNRHRjYmlBZ0lDQWdJQ0FnSUNCdVpYZFNZVzVuWlZOMFlYSjBJRDBnTUR0Y2JpQWdJQ0FnSUNBZ0lDQmpkWEpTWVc1blpTQTlJRnRkTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCdmJHUk1hVzVsSUNzOUlHeHBibVZ6TG14bGJtZDBhRHRjYmlBZ0lDQWdJRzVsZDB4cGJtVWdLejBnYkdsdVpYTXViR1Z1WjNSb08xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnYjJ4a1JtbHNaVTVoYldVNklHOXNaRVpwYkdWT1lXMWxMQ0J1WlhkR2FXeGxUbUZ0WlRvZ2JtVjNSbWxzWlU1aGJXVXNYRzRnSUNBZ2IyeGtTR1ZoWkdWeU9pQnZiR1JJWldGa1pYSXNJRzVsZDBobFlXUmxjam9nYm1WM1NHVmhaR1Z5TEZ4dUlDQWdJR2gxYm10ek9pQm9kVzVyYzF4dUlDQjlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kzSmxZWFJsVkhkdlJtbHNaWE5RWVhSamFDaHZiR1JHYVd4bFRtRnRaU3dnYm1WM1JtbHNaVTVoYldVc0lHOXNaRk4wY2l3Z2JtVjNVM1J5TENCdmJHUklaV0ZrWlhJc0lHNWxkMGhsWVdSbGNpd2diM0IwYVc5dWN5a2dlMXh1SUNCamIyNXpkQ0JrYVdabUlEMGdjM1J5ZFdOMGRYSmxaRkJoZEdOb0tHOXNaRVpwYkdWT1lXMWxMQ0J1WlhkR2FXeGxUbUZ0WlN3Z2IyeGtVM1J5TENCdVpYZFRkSElzSUc5c1pFaGxZV1JsY2l3Z2JtVjNTR1ZoWkdWeUxDQnZjSFJwYjI1ektUdGNibHh1SUNCamIyNXpkQ0J5WlhRZ1BTQmJYVHRjYmlBZ2FXWWdLRzlzWkVacGJHVk9ZVzFsSUQwOUlHNWxkMFpwYkdWT1lXMWxLU0I3WEc0Z0lDQWdjbVYwTG5CMWMyZ29KMGx1WkdWNE9pQW5JQ3NnYjJ4a1JtbHNaVTVoYldVcE8xeHVJQ0I5WEc0Z0lISmxkQzV3ZFhOb0tDYzlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5SnlrN1hHNGdJSEpsZEM1d2RYTm9LQ2N0TFMwZ0p5QXJJR1JwWm1ZdWIyeGtSbWxzWlU1aGJXVWdLeUFvZEhsd1pXOW1JR1JwWm1ZdWIyeGtTR1ZoWkdWeUlEMDlQU0FuZFc1a1pXWnBibVZrSnlBL0lDY25JRG9nSjF4Y2RDY2dLeUJrYVdabUxtOXNaRWhsWVdSbGNpa3BPMXh1SUNCeVpYUXVjSFZ6YUNnbkt5c3JJQ2NnS3lCa2FXWm1MbTVsZDBacGJHVk9ZVzFsSUNzZ0tIUjVjR1Z2WmlCa2FXWm1MbTVsZDBobFlXUmxjaUE5UFQwZ0ozVnVaR1ZtYVc1bFpDY2dQeUFuSnlBNklDZGNYSFFuSUNzZ1pHbG1aaTV1WlhkSVpXRmtaWElwS1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdScFptWXVhSFZ1YTNNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQmpiMjV6ZENCb2RXNXJJRDBnWkdsbVppNW9kVzVyYzF0cFhUdGNiaUFnSUNCeVpYUXVjSFZ6YUNoY2JpQWdJQ0FnSUNkQVFDQXRKeUFySUdoMWJtc3ViMnhrVTNSaGNuUWdLeUFuTENjZ0t5Qm9kVzVyTG05c1pFeHBibVZ6WEc0Z0lDQWdJQ0FySUNjZ0t5Y2dLeUJvZFc1ckxtNWxkMU4wWVhKMElDc2dKeXduSUNzZ2FIVnVheTV1WlhkTWFXNWxjMXh1SUNBZ0lDQWdLeUFuSUVCQUoxeHVJQ0FnSUNrN1hHNGdJQ0FnY21WMExuQjFjMmd1WVhCd2JIa29jbVYwTENCb2RXNXJMbXhwYm1WektUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQnlaWFF1YW05cGJpZ25YRnh1SnlrZ0t5QW5YRnh1Snp0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR055WldGMFpWQmhkR05vS0dacGJHVk9ZVzFsTENCdmJHUlRkSElzSUc1bGQxTjBjaXdnYjJ4a1NHVmhaR1Z5TENCdVpYZElaV0ZrWlhJc0lHOXdkR2x2Ym5NcElIdGNiaUFnY21WMGRYSnVJR055WldGMFpWUjNiMFpwYkdWelVHRjBZMmdvWm1sc1pVNWhiV1VzSUdacGJHVk9ZVzFsTENCdmJHUlRkSElzSUc1bGQxTjBjaXdnYjJ4a1NHVmhaR1Z5TENCdVpYZElaV0ZrWlhJc0lHOXdkR2x2Ym5NcE8xeHVmVnh1SWwxOVxuXG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovXCJ1c2Ugc3RyaWN0XCI7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9hcnJheUVxdWFsID0gYXJyYXlFcXVhbDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovYXJyYXlTdGFydHNXaXRoID0gYXJyYXlTdGFydHNXaXRoO1xuXHRmdW5jdGlvbiBhcnJheUVxdWFsKGEsIGIpIHtcblx0ICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG5cdCAgICByZXR1cm4gZmFsc2U7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIGFycmF5U3RhcnRzV2l0aChhLCBiKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFycmF5U3RhcnRzV2l0aChhcnJheSwgc3RhcnQpIHtcblx0ICBpZiAoc3RhcnQubGVuZ3RoID4gYXJyYXkubGVuZ3RoKSB7XG5cdCAgICByZXR1cm4gZmFsc2U7XG5cdCAgfVxuXG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydC5sZW5ndGg7IGkrKykge1xuXHQgICAgaWYgKHN0YXJ0W2ldICE9PSBhcnJheVtpXSkge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHRydWU7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MWRHbHNMMkZ5Y21GNUxtcHpJbDBzSW01aGJXVnpJanBiSW1GeWNtRjVSWEYxWVd3aUxDSmhjbkpoZVZOMFlYSjBjMWRwZEdnaUxDSmhJaXdpWWlJc0lteGxibWQwYUNJc0ltRnljbUY1SWl3aWMzUmhjblFpTENKcElsMHNJbTFoY0hCcGJtZHpJam9pT3pzN1owTkJRV2RDUVN4VkxFZEJRVUZCTEZVN2VVUkJVVUZETEdVc1IwRkJRVUVzWlR0QlFWSlVMRk5CUVZORUxGVkJRVlFzUTBGQmIwSkZMRU5CUVhCQ0xFVkJRWFZDUXl4RFFVRjJRaXhGUVVFd1FqdEJRVU12UWl4TlFVRkpSQ3hGUVVGRlJTeE5RVUZHTEV0QlFXRkVMRVZCUVVWRExFMUJRVzVDTEVWQlFUSkNPMEZCUTNwQ0xGZEJRVThzUzBGQlVEdEJRVU5FT3p0QlFVVkVMRk5CUVU5SUxHZENRVUZuUWtNc1EwRkJhRUlzUlVGQmJVSkRMRU5CUVc1Q0xFTkJRVkE3UVVGRFJEczdRVUZGVFN4VFFVRlRSaXhsUVVGVUxFTkJRWGxDU1N4TFFVRjZRaXhGUVVGblEwTXNTMEZCYUVNc1JVRkJkVU03UVVGRE5VTXNUVUZCU1VFc1RVRkJUVVlzVFVGQlRpeEhRVUZsUXl4TlFVRk5SQ3hOUVVGNlFpeEZRVUZwUXp0QlFVTXZRaXhYUVVGUExFdEJRVkE3UVVGRFJEczdRVUZGUkN4UFFVRkxMRWxCUVVsSExFbEJRVWtzUTBGQllpeEZRVUZuUWtFc1NVRkJTVVFzVFVGQlRVWXNUVUZCTVVJc1JVRkJhME5ITEVkQlFXeERMRVZCUVhWRE8wRkJRM0pETEZGQlFVbEVMRTFCUVUxRExFTkJRVTRzVFVGQllVWXNUVUZCVFVVc1EwRkJUaXhEUVVGcVFpeEZRVUV5UWp0QlFVTjZRaXhoUVVGUExFdEJRVkE3UVVGRFJEdEJRVU5HT3p0QlFVVkVMRk5CUVU4c1NVRkJVRHRCUVVORUlpd2labWxzWlNJNkltRnljbUY1TG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2laWGh3YjNKMElHWjFibU4wYVc5dUlHRnljbUY1UlhGMVlXd29ZU3dnWWlrZ2UxeHVJQ0JwWmlBb1lTNXNaVzVuZEdnZ0lUMDlJR0l1YkdWdVozUm9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUdGeWNtRjVVM1JoY25SelYybDBhQ2hoTENCaUtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGeWNtRjVVM1JoY25SelYybDBhQ2hoY25KaGVTd2djM1JoY25RcElIdGNiaUFnYVdZZ0tITjBZWEowTG14bGJtZDBhQ0ErSUdGeWNtRjVMbXhsYm1kMGFDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ2ZWeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2MzUmhjblF1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNCcFppQW9jM1JoY25SYmFWMGdJVDA5SUdGeWNtRjVXMmxkS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlIUnlkV1U3WEc1OVhHNGlYWDA9XG5cblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9cInVzZSBzdHJpY3RcIjtcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NvbnZlcnRDaGFuZ2VzVG9ETVAgPSBjb252ZXJ0Q2hhbmdlc1RvRE1QO1xuXHQvLyBTZWU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtZGlmZi1tYXRjaC1wYXRjaC93aWtpL0FQSVxuXHRmdW5jdGlvbiBjb252ZXJ0Q2hhbmdlc1RvRE1QKGNoYW5nZXMpIHtcblx0ICB2YXIgcmV0ID0gW10sXG5cdCAgICAgIGNoYW5nZSA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sXG5cdCAgICAgIG9wZXJhdGlvbiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuXHQgICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuXHQgICAgICBvcGVyYXRpb24gPSAxO1xuXHQgICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuXHQgICAgICBvcGVyYXRpb24gPSAtMTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIG9wZXJhdGlvbiA9IDA7XG5cdCAgICB9XG5cblx0ICAgIHJldC5wdXNoKFtvcGVyYXRpb24sIGNoYW5nZS52YWx1ZV0pO1xuXHQgIH1cblx0ICByZXR1cm4gcmV0O1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWpiMjUyWlhKMEwyUnRjQzVxY3lKZExDSnVZVzFsY3lJNld5SmpiMjUyWlhKMFEyaGhibWRsYzFSdlJFMVFJaXdpWTJoaGJtZGxjeUlzSW5KbGRDSXNJbU5vWVc1blpTSXNJbTl3WlhKaGRHbHZiaUlzSW1raUxDSnNaVzVuZEdnaUxDSmhaR1JsWkNJc0luSmxiVzkyWldRaUxDSndkWE5vSWl3aWRtRnNkV1VpWFN3aWJXRndjR2x1WjNNaU9pSTdPenRuUTBGRFowSkJMRzFDTEVkQlFVRkJMRzFDTzBGQlJHaENPMEZCUTA4c1UwRkJVMEVzYlVKQlFWUXNRMEZCTmtKRExFOUJRVGRDTEVWQlFYTkRPMEZCUXpORExFMUJRVWxETEUxQlFVMHNSVUZCVmp0QlFVRkJMRTFCUTBsRExIZERRVVJLTzBGQlFVRXNUVUZGU1VNc01rTkJSa283UVVGSFFTeFBRVUZMTEVsQlFVbERMRWxCUVVrc1EwRkJZaXhGUVVGblFrRXNTVUZCU1Vvc1VVRkJVVXNzVFVGQk5VSXNSVUZCYjBORUxFZEJRWEJETEVWQlFYbERPMEZCUTNaRFJpeGhRVUZUUml4UlFVRlJTU3hEUVVGU0xFTkJRVlE3UVVGRFFTeFJRVUZKUml4UFFVRlBTU3hMUVVGWUxFVkJRV3RDTzBGQlEyaENTQ3hyUWtGQldTeERRVUZhTzBGQlEwUXNTMEZHUkN4TlFVVlBMRWxCUVVsRUxFOUJRVTlMTEU5QlFWZ3NSVUZCYjBJN1FVRkRla0pLTEd0Q1FVRlpMRU5CUVVNc1EwRkJZanRCUVVORUxFdEJSazBzVFVGRlFUdEJRVU5NUVN4clFrRkJXU3hEUVVGYU8wRkJRMFE3TzBGQlJVUkdMRkZCUVVsUExFbEJRVW9zUTBGQlV5eERRVUZEVEN4VFFVRkVMRVZCUVZsRUxFOUJRVTlQTEV0QlFXNUNMRU5CUVZRN1FVRkRSRHRCUVVORUxGTkJRVTlTTEVkQlFWQTdRVUZEUkNJc0ltWnBiR1VpT2lKa2JYQXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdkx5QlRaV1U2SUdoMGRIQTZMeTlqYjJSbExtZHZiMmRzWlM1amIyMHZjQzluYjI5bmJHVXRaR2xtWmkxdFlYUmphQzF3WVhSamFDOTNhV3RwTDBGUVNWeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTnZiblpsY25SRGFHRnVaMlZ6Vkc5RVRWQW9ZMmhoYm1kbGN5a2dlMXh1SUNCc1pYUWdjbVYwSUQwZ1cxMHNYRzRnSUNBZ0lDQmphR0Z1WjJVc1hHNGdJQ0FnSUNCdmNHVnlZWFJwYjI0N1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWTJoaGJtZGxjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdOb1lXNW5aU0E5SUdOb1lXNW5aWE5iYVYwN1hHNGdJQ0FnYVdZZ0tHTm9ZVzVuWlM1aFpHUmxaQ2tnZTF4dUlDQWdJQ0FnYjNCbGNtRjBhVzl1SUQwZ01UdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHTm9ZVzVuWlM1eVpXMXZkbVZrS1NCN1hHNGdJQ0FnSUNCdmNHVnlZWFJwYjI0Z1BTQXRNVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2IzQmxjbUYwYVc5dUlEMGdNRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFF1Y0hWemFDaGJiM0JsY21GMGFXOXVMQ0JqYUdGdVoyVXVkbUZzZFdWZEtUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2NtVjBPMXh1ZlZ4dUlsMTlcblxuXG4vKioqLyB9KSxcbi8qIDE3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NvbnZlcnRDaGFuZ2VzVG9YTUwgPSBjb252ZXJ0Q2hhbmdlc1RvWE1MO1xuXHRmdW5jdGlvbiBjb252ZXJ0Q2hhbmdlc1RvWE1MKGNoYW5nZXMpIHtcblx0ICB2YXIgcmV0ID0gW107XG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXTtcblx0ICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcblx0ICAgICAgcmV0LnB1c2goJzxpbnM+Jyk7XG5cdCAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG5cdCAgICAgIHJldC5wdXNoKCc8ZGVsPicpO1xuXHQgICAgfVxuXG5cdCAgICByZXQucHVzaChlc2NhcGVIVE1MKGNoYW5nZS52YWx1ZSkpO1xuXG5cdCAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG5cdCAgICAgIHJldC5wdXNoKCc8L2lucz4nKTtcblx0ICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcblx0ICAgICAgcmV0LnB1c2goJzwvZGVsPicpO1xuXHQgICAgfVxuXHQgIH1cblx0ICByZXR1cm4gcmV0LmpvaW4oJycpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXNjYXBlSFRNTChzKSB7XG5cdCAgdmFyIG4gPSBzO1xuXHQgIG4gPSBuLnJlcGxhY2UoLyYvZywgJyZhbXA7Jyk7XG5cdCAgbiA9IG4ucmVwbGFjZSgvPC9nLCAnJmx0OycpO1xuXHQgIG4gPSBuLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcblx0ICBuID0gbi5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG5cblx0ICByZXR1cm4gbjtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlqYjI1MlpYSjBMM2h0YkM1cWN5SmRMQ0p1WVcxbGN5STZXeUpqYjI1MlpYSjBRMmhoYm1kbGMxUnZXRTFNSWl3aVkyaGhibWRsY3lJc0luSmxkQ0lzSW1raUxDSnNaVzVuZEdnaUxDSmphR0Z1WjJVaUxDSmhaR1JsWkNJc0luQjFjMmdpTENKeVpXMXZkbVZrSWl3aVpYTmpZWEJsU0ZSTlRDSXNJblpoYkhWbElpd2lhbTlwYmlJc0luTWlMQ0p1SWl3aWNtVndiR0ZqWlNKZExDSnRZWEJ3YVc1bmN5STZJanM3TzJkRFFVRm5Ra0VzYlVJc1IwRkJRVUVzYlVJN1FVRkJWQ3hUUVVGVFFTeHRRa0ZCVkN4RFFVRTJRa01zVDBGQk4wSXNSVUZCYzBNN1FVRkRNME1zVFVGQlNVTXNUVUZCVFN4RlFVRldPMEZCUTBFc1QwRkJTeXhKUVVGSlF5eEpRVUZKTEVOQlFXSXNSVUZCWjBKQkxFbEJRVWxHTEZGQlFWRkhMRTFCUVRWQ0xFVkJRVzlEUkN4SFFVRndReXhGUVVGNVF6dEJRVU4yUXl4UlFVRkpSU3hUUVVGVFNpeFJRVUZSUlN4RFFVRlNMRU5CUVdJN1FVRkRRU3hSUVVGSlJTeFBRVUZQUXl4TFFVRllMRVZCUVd0Q08wRkJRMmhDU2l4VlFVRkpTeXhKUVVGS0xFTkJRVk1zVDBGQlZEdEJRVU5FTEV0QlJrUXNUVUZGVHl4SlFVRkpSaXhQUVVGUFJ5eFBRVUZZTEVWQlFXOUNPMEZCUTNwQ1RpeFZRVUZKU3l4SlFVRktMRU5CUVZNc1QwRkJWRHRCUVVORU96dEJRVVZFVEN4UlFVRkpTeXhKUVVGS0xFTkJRVk5GTEZkQlFWZEtMRTlCUVU5TExFdEJRV3hDTEVOQlFWUTdPMEZCUlVFc1VVRkJTVXdzVDBGQlQwTXNTMEZCV0N4RlFVRnJRanRCUVVOb1Frb3NWVUZCU1Vzc1NVRkJTaXhEUVVGVExGRkJRVlE3UVVGRFJDeExRVVpFTEUxQlJVOHNTVUZCU1VZc1QwRkJUMGNzVDBGQldDeEZRVUZ2UWp0QlFVTjZRazRzVlVGQlNVc3NTVUZCU2l4RFFVRlRMRkZCUVZRN1FVRkRSRHRCUVVOR08wRkJRMFFzVTBGQlQwd3NTVUZCU1ZNc1NVRkJTaXhEUVVGVExFVkJRVlFzUTBGQlVEdEJRVU5FT3p0QlFVVkVMRk5CUVZOR0xGVkJRVlFzUTBGQmIwSkhMRU5CUVhCQ0xFVkJRWFZDTzBGQlEzSkNMRTFCUVVsRExFbEJRVWxFTEVOQlFWSTdRVUZEUVVNc1RVRkJTVUVzUlVGQlJVTXNUMEZCUml4RFFVRlZMRWxCUVZZc1JVRkJaMElzVDBGQmFFSXNRMEZCU2p0QlFVTkJSQ3hOUVVGSlFTeEZRVUZGUXl4UFFVRkdMRU5CUVZVc1NVRkJWaXhGUVVGblFpeE5RVUZvUWl4RFFVRktPMEZCUTBGRUxFMUJRVWxCTEVWQlFVVkRMRTlCUVVZc1EwRkJWU3hKUVVGV0xFVkJRV2RDTEUxQlFXaENMRU5CUVVvN1FVRkRRVVFzVFVGQlNVRXNSVUZCUlVNc1QwRkJSaXhEUVVGVkxFbEJRVllzUlVGQlowSXNVVUZCYUVJc1EwRkJTanM3UVVGRlFTeFRRVUZQUkN4RFFVRlFPMEZCUTBRaUxDSm1hV3hsSWpvaWVHMXNMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpYaHdiM0owSUdaMWJtTjBhVzl1SUdOdmJuWmxjblJEYUdGdVoyVnpWRzlZVFV3b1kyaGhibWRsY3lrZ2UxeHVJQ0JzWlhRZ2NtVjBJRDBnVzEwN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWTJoaGJtZGxjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUd4bGRDQmphR0Z1WjJVZ1BTQmphR0Z1WjJWelcybGRPMXh1SUNBZ0lHbG1JQ2hqYUdGdVoyVXVZV1JrWldRcElIdGNiaUFnSUNBZ0lISmxkQzV3ZFhOb0tDYzhhVzV6UGljcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb1kyaGhibWRsTG5KbGJXOTJaV1FwSUh0Y2JpQWdJQ0FnSUhKbGRDNXdkWE5vS0NjOFpHVnNQaWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEM1d2RYTm9LR1Z6WTJGd1pVaFVUVXdvWTJoaGJtZGxMblpoYkhWbEtTazdYRzVjYmlBZ0lDQnBaaUFvWTJoaGJtZGxMbUZrWkdWa0tTQjdYRzRnSUNBZ0lDQnlaWFF1Y0hWemFDZ25QQzlwYm5NK0p5azdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaGphR0Z1WjJVdWNtVnRiM1psWkNrZ2UxeHVJQ0FnSUNBZ2NtVjBMbkIxYzJnb0p6d3ZaR1ZzUGljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnY21WMExtcHZhVzRvSnljcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCbGMyTmhjR1ZJVkUxTUtITXBJSHRjYmlBZ2JHVjBJRzRnUFNCek8xeHVJQ0J1SUQwZ2JpNXlaWEJzWVdObEtDOG1MMmNzSUNjbVlXMXdPeWNwTzF4dUlDQnVJRDBnYmk1eVpYQnNZV05sS0M4OEwyY3NJQ2NtYkhRN0p5azdYRzRnSUc0Z1BTQnVMbkpsY0d4aFkyVW9MejR2Wnl3Z0p5Wm5kRHNuS1R0Y2JpQWdiaUE5SUc0dWNtVndiR0ZqWlNndlhDSXZaeXdnSnlaeGRXOTBPeWNwTzF4dVhHNGdJSEpsZEhWeWJpQnVPMXh1ZlZ4dUlsMTlcblxuXG4vKioqLyB9KVxuLyoqKioqKi8gXSlcbn0pO1xuO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2RpZmYvZGlzdC9kaWZmLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9kaWZmL2Rpc3QvZGlmZi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCIvKlxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7fTtcblxudmFyXHRtZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKHR5cGVvZiBtZW1vID09PSBcInVuZGVmaW5lZFwiKSBtZW1vID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRyZXR1cm4gbWVtbztcblx0fTtcbn07XG5cbnZhciBpc09sZElFID0gbWVtb2l6ZShmdW5jdGlvbiAoKSB7XG5cdC8vIFRlc3QgZm9yIElFIDw9IDkgYXMgcHJvcG9zZWQgYnkgQnJvd3NlcmhhY2tzXG5cdC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcblx0Ly8gVGVzdHMgZm9yIGV4aXN0ZW5jZSBvZiBzdGFuZGFyZCBnbG9iYWxzIGlzIHRvIGFsbG93IHN0eWxlLWxvYWRlclxuXHQvLyB0byBvcGVyYXRlIGNvcnJlY3RseSBpbnRvIG5vbi1zdGFuZGFyZCBlbnZpcm9ubWVudHNcblx0Ly8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG5cdHJldHVybiB3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYjtcbn0pO1xuXG52YXIgZ2V0RWxlbWVudCA9IChmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW8gPSB7fTtcblxuXHRyZXR1cm4gZnVuY3Rpb24oc2VsZWN0b3IpIHtcblx0XHRpZiAodHlwZW9mIG1lbW9bc2VsZWN0b3JdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBmbi5jYWxsKHRoaXMsIHNlbGVjdG9yKTtcblx0XHRcdC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cdFx0XHRpZiAoc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuXHRcdFx0XHRcdC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcblx0XHRcdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZW1vW3NlbGVjdG9yXSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1tzZWxlY3Rvcl1cblx0fTtcbn0pKGZ1bmN0aW9uICh0YXJnZXQpIHtcblx0cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KVxufSk7XG5cbnZhciBzaW5nbGV0b24gPSBudWxsO1xudmFyXHRzaW5nbGV0b25Db3VudGVyID0gMDtcbnZhclx0c3R5bGVzSW5zZXJ0ZWRBdFRvcCA9IFtdO1xuXG52YXJcdGZpeFVybHMgPSByZXF1aXJlKFwiLi91cmxzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxpc3QsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiBERUJVRyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBERUJVRykge1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBFcnJvcihcIlRoZSBzdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdG9wdGlvbnMuYXR0cnMgPSB0eXBlb2Ygb3B0aW9ucy5hdHRycyA9PT0gXCJvYmplY3RcIiA/IG9wdGlvbnMuYXR0cnMgOiB7fTtcblxuXHQvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cblx0Ly8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXHRpZiAoIW9wdGlvbnMuc2luZ2xldG9uKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuXHRpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0SW50byArIFwiIFwiICsgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdG9wdGlvbnMuYXR0cnMucmVsID0gXCJzdHlsZXNoZWV0XCI7XG5cblx0YWRkQXR0cnMobGluaywgb3B0aW9ucy5hdHRycyk7XG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBsaW5rKTtcblxuXHRyZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gYWRkQXR0cnMgKGVsLCBhdHRycykge1xuXHRPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0ZWwuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqLCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZSwgdXBkYXRlLCByZW1vdmUsIHJlc3VsdDtcblxuXHQvLyBJZiBhIHRyYW5zZm9ybSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgcnVuIGl0IG9uIHRoZSBjc3Ncblx0aWYgKG9wdGlvbnMudHJhbnNmb3JtICYmIG9iai5jc3MpIHtcblx0ICAgIHJlc3VsdCA9IG9wdGlvbnMudHJhbnNmb3JtKG9iai5jc3MpO1xuXG5cdCAgICBpZiAocmVzdWx0KSB7XG5cdCAgICBcdC8vIElmIHRyYW5zZm9ybSByZXR1cm5zIGEgdmFsdWUsIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgcnVubmluZyBydW50aW1lIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgY3NzLlxuXHQgICAgXHRvYmouY3NzID0gcmVzdWx0O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0Ly8gSWYgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiByZXR1cm5zIGEgZmFsc3kgdmFsdWUsIGRvbid0IGFkZCB0aGlzIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgY29uZGl0aW9uYWwgbG9hZGluZyBvZiBjc3Ncblx0ICAgIFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgXHRcdC8vIG5vb3Bcblx0ICAgIFx0fTtcblx0ICAgIH1cblx0fVxuXG5cdGlmIChvcHRpb25zLnNpbmdsZXRvbikge1xuXHRcdHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrO1xuXG5cdFx0c3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSk7XG5cblx0XHR1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcblx0XHRyZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuXG5cdH0gZWxzZSBpZiAoXG5cdFx0b2JqLnNvdXJjZU1hcCAmJlxuXHRcdHR5cGVvZiBVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwuY3JlYXRlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLnJldm9rZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIEJsb2IgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVMaW5rRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSB1cGRhdGVMaW5rLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cblx0XHRcdGlmKHN0eWxlLmhyZWYpIFVSTC5yZXZva2VPYmplY3RVUkwoc3R5bGUuaHJlZik7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRzdHlsZSA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cdFx0fTtcblx0fVxuXG5cdHVwZGF0ZShvYmopO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqKSB7XG5cdFx0aWYgKG5ld09iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG5cdFx0XHRcdG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG5cdFx0XHRcdG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXBcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHVwZGF0ZShvYmogPSBuZXdPYmopO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW1vdmUoKTtcblx0XHR9XG5cdH07XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciB0ZXh0U3RvcmUgPSBbXTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuXHRcdHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudDtcblxuXHRcdHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuXHR9O1xufSkoKTtcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuXHR2YXIgY3NzID0gcmVtb3ZlID8gXCJcIiA6IG9iai5jc3M7XG5cblx0aWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcyk7XG5cdFx0dmFyIGNoaWxkTm9kZXMgPSBzdHlsZS5jaGlsZE5vZGVzO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZS5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSk7XG5cblx0XHRpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0XHRcdHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZSwgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgbWVkaWEgPSBvYmoubWVkaWE7XG5cblx0aWYobWVkaWEpIHtcblx0XHRzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBtZWRpYSlcblx0fVxuXG5cdGlmKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG5cdH0gZWxzZSB7XG5cdFx0d2hpbGUoc3R5bGUuZmlyc3RDaGlsZCkge1xuXHRcdFx0c3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG5cdFx0fVxuXG5cdFx0c3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTGluayAobGluaywgb3B0aW9ucywgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuXHQvKlxuXHRcdElmIGNvbnZlcnRUb0Fic29sdXRlVXJscyBpc24ndCBkZWZpbmVkLCBidXQgc291cmNlbWFwcyBhcmUgZW5hYmxlZFxuXHRcdGFuZCB0aGVyZSBpcyBubyBwdWJsaWNQYXRoIGRlZmluZWQgdGhlbiBsZXRzIHR1cm4gY29udmVydFRvQWJzb2x1dGVVcmxzXG5cdFx0b24gYnkgZGVmYXVsdC4gIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgb3B0aW9uXG5cdFx0ZGlyZWN0bHlcblx0Ki9cblx0dmFyIGF1dG9GaXhVcmxzID0gb3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgPT09IHVuZGVmaW5lZCAmJiBzb3VyY2VNYXA7XG5cblx0aWYgKG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzIHx8IGF1dG9GaXhVcmxzKSB7XG5cdFx0Y3NzID0gZml4VXJscyhjc3MpO1xuXHR9XG5cblx0aWYgKHNvdXJjZU1hcCkge1xuXHRcdC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG5cdFx0Y3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIiArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyBcIiAqL1wiO1xuXHR9XG5cblx0dmFyIGJsb2IgPSBuZXcgQmxvYihbY3NzXSwgeyB0eXBlOiBcInRleHQvY3NzXCIgfSk7XG5cblx0dmFyIG9sZFNyYyA9IGxpbmsuaHJlZjtcblxuXHRsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG5cdGlmKG9sZFNyYykgVVJMLnJldm9rZU9iamVjdFVSTChvbGRTcmMpO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlxuLyoqXG4gKiBXaGVuIHNvdXJjZSBtYXBzIGFyZSBlbmFibGVkLCBgc3R5bGUtbG9hZGVyYCB1c2VzIGEgbGluayBlbGVtZW50IHdpdGggYSBkYXRhLXVyaSB0b1xuICogZW1iZWQgdGhlIGNzcyBvbiB0aGUgcGFnZS4gVGhpcyBicmVha3MgYWxsIHJlbGF0aXZlIHVybHMgYmVjYXVzZSBub3cgdGhleSBhcmUgcmVsYXRpdmUgdG8gYVxuICogYnVuZGxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cbiAqXG4gKiBPbmUgc29sdXRpb24gaXMgdG8gb25seSB1c2UgZnVsbCB1cmxzLCBidXQgdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAqXG4gKiBJbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIFwiZml4ZXNcIiB0aGUgcmVsYXRpdmUgdXJscyB0byBiZSBhYnNvbHV0ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSBsb2NhdGlvbi5cbiAqXG4gKiBBIHJ1ZGltZW50YXJ5IHRlc3Qgc3VpdGUgaXMgbG9jYXRlZCBhdCBgdGVzdC9maXhVcmxzLmpzYCBhbmQgY2FuIGJlIHJ1biB2aWEgdGhlIGBucG0gdGVzdGAgY29tbWFuZC5cbiAqXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIC8vIGdldCBjdXJyZW50IGxvY2F0aW9uXG4gIHZhciBsb2NhdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvblwiKTtcbiAgfVxuXG5cdC8vIGJsYW5rIG9yIG51bGw/XG5cdGlmICghY3NzIHx8IHR5cGVvZiBjc3MgIT09IFwic3RyaW5nXCIpIHtcblx0ICByZXR1cm4gY3NzO1xuICB9XG5cbiAgdmFyIGJhc2VVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gIHZhciBjdXJyZW50RGlyID0gYmFzZVVybCArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1xcL1teXFwvXSokLywgXCIvXCIpO1xuXG5cdC8vIGNvbnZlcnQgZWFjaCB1cmwoLi4uKVxuXHQvKlxuXHRUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBqdXN0IGEgd2F5IHRvIHJlY3Vyc2l2ZWx5IG1hdGNoIGJyYWNrZXRzIHdpdGhpblxuXHRhIHN0cmluZy5cblxuXHQgL3VybFxccypcXCggID0gTWF0Y2ggb24gdGhlIHdvcmQgXCJ1cmxcIiB3aXRoIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0IGFuZCB0aGVuIGEgcGFyZW5zXG5cdCAgICggID0gU3RhcnQgYSBjYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAoPzogID0gU3RhcnQgYSBub24tY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgICAgIFteKShdICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAoPzogID0gU3RhcnQgYW5vdGhlciBub24tY2FwdHVyaW5nIGdyb3Vwc1xuXHQgICAgICAgICAgICAgICAgIFteKShdKyAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICAgICAgW14pKF0qICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIFxcKSAgPSBNYXRjaCBhIGVuZCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKSAgPSBFbmQgR3JvdXBcbiAgICAgICAgICAgICAgKlxcKSA9IE1hdGNoIGFueXRoaW5nIGFuZCB0aGVuIGEgY2xvc2UgcGFyZW5zXG4gICAgICAgICAgKSAgPSBDbG9zZSBub24tY2FwdHVyaW5nIGdyb3VwXG4gICAgICAgICAgKiAgPSBNYXRjaCBhbnl0aGluZ1xuICAgICAgICkgID0gQ2xvc2UgY2FwdHVyaW5nIGdyb3VwXG5cdCBcXCkgID0gTWF0Y2ggYSBjbG9zZSBwYXJlbnNcblxuXHQgL2dpICA9IEdldCBhbGwgbWF0Y2hlcywgbm90IHRoZSBmaXJzdC4gIEJlIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqL1xuXHR2YXIgZml4ZWRDc3MgPSBjc3MucmVwbGFjZSgvdXJsXFxzKlxcKCgoPzpbXikoXXxcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKilcXCkvZ2ksIGZ1bmN0aW9uKGZ1bGxNYXRjaCwgb3JpZ1VybCkge1xuXHRcdC8vIHN0cmlwIHF1b3RlcyAoaWYgdGhleSBleGlzdClcblx0XHR2YXIgdW5xdW90ZWRPcmlnVXJsID0gb3JpZ1VybFxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15cIiguKilcIiQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSlcblx0XHRcdC5yZXBsYWNlKC9eJyguKiknJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KTtcblxuXHRcdC8vIGFscmVhZHkgYSBmdWxsIHVybD8gbm8gY2hhbmdlXG5cdFx0aWYgKC9eKCN8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfGZpbGU6XFwvXFwvXFwvKS9pLnRlc3QodW5xdW90ZWRPcmlnVXJsKSkge1xuXHRcdCAgcmV0dXJuIGZ1bGxNYXRjaDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IHRoZSB1cmwgdG8gYSBmdWxsIHVybFxuXHRcdHZhciBuZXdVcmw7XG5cblx0XHRpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvL1wiKSA9PT0gMCkge1xuXHRcdCAgXHQvL1RPRE86IHNob3VsZCB3ZSBhZGQgcHJvdG9jb2w/XG5cdFx0XHRuZXdVcmwgPSB1bnF1b3RlZE9yaWdVcmw7XG5cdFx0fSBlbHNlIGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHVybFxuXHRcdFx0bmV3VXJsID0gYmFzZVVybCArIHVucXVvdGVkT3JpZ1VybDsgLy8gYWxyZWFkeSBzdGFydHMgd2l0aCAnLydcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3Rvcnlcblx0XHRcdG5ld1VybCA9IGN1cnJlbnREaXIgKyB1bnF1b3RlZE9yaWdVcmwucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpOyAvLyBTdHJpcCBsZWFkaW5nICcuLydcblx0XHR9XG5cblx0XHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIHVybCguLi4pXG5cdFx0cmV0dXJuIFwidXJsKFwiICsgSlNPTi5zdHJpbmdpZnkobmV3VXJsKSArIFwiKVwiO1xuXHR9KTtcblxuXHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIGNzc1xuXHRyZXR1cm4gZml4ZWRDc3M7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL3VybHMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwidmFyIHNjb3BlID0gKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYpIHx8XG4gICAgICAgICAgICB3aW5kb3c7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbChzY29wZSwgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBPbiBzb21lIGV4b3RpYyBlbnZpcm9ubWVudHMsIGl0J3Mgbm90IGNsZWFyIHdoaWNoIG9iamVjdCBgc2V0aW1tZWRpYXRlYCB3YXNcbi8vIGFibGUgdG8gaW5zdGFsbCBvbnRvLiAgU2VhcmNoIGVhY2ggcG9zc2liaWxpdHkgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4vLyBgc2V0aW1tZWRpYXRlYCBsaWJyYXJ5LlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuc2V0SW1tZWRpYXRlKTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5jbGVhckltbWVkaWF0ZSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0geVtvcFswXSAmIDIgPyBcInJldHVyblwiIDogb3BbMF0gPyBcInRocm93XCIgOiBcIm5leHRcIl0pICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gWzAsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7ICB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAob1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XG59IGNhdGNoKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcblx0XHRnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwibnVsbFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9tZW51LWl0ZW0vTWVudUl0ZW0udHMiLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTAtMyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzPz9wb3N0Y3NzIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyL2luZGV4LmpzP3R5cGU9Y3NzIS4vbWVudUl0ZW0ubS5jc3NcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbi8vIFByZXBhcmUgY3NzVHJhbnNmb3JtYXRpb25cbnZhciB0cmFuc2Zvcm07XG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcblx0Ly8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3Ncblx0aWYoIWNvbnRlbnQubG9jYWxzKSB7XG5cdFx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kZWNvcmF0b3ItbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEwLTMhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2xpYi9pbmRleC5qcz8/cG9zdGNzcyEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL21lbnVJdGVtLm0uY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZGVjb3JhdG9yLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0xMC0zIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9saWIvaW5kZXguanM/P3Bvc3Rjc3MhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXIvaW5kZXguanM/dHlwZT1jc3MhLi9tZW51SXRlbS5tLmNzc1wiKTtcblx0XHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXHRcdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHRcdH0pO1xuXHR9XG5cdC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3Ncblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzXG4vLyBtb2R1bGUgaWQgPSAuL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwibnVsbFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9tZW51L01lbnUudHMiLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTAtMyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzPz9wb3N0Y3NzIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyL2luZGV4LmpzP3R5cGU9Y3NzIS4vbWVudS5tLmNzc1wiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuLy8gUHJlcGFyZSBjc3NUcmFuc2Zvcm1hdGlvblxudmFyIHRyYW5zZm9ybTtcblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuXHQvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuXHRpZighY29udGVudC5sb2NhbHMpIHtcblx0XHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTAtMyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzPz9wb3N0Y3NzIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyL2luZGV4LmpzP3R5cGU9Y3NzIS4vbWVudS5tLmNzc1wiLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTAtMyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzPz9wb3N0Y3NzIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyL2luZGV4LmpzP3R5cGU9Y3NzIS4vbWVudS5tLmNzc1wiKTtcblx0XHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXHRcdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHRcdH0pO1xuXHR9XG5cdC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3Ncblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWVudS9tZW51Lm0uY3NzXG4vLyBtb2R1bGUgaWQgPSAuL3NyYy9tZW51L21lbnUubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiaW1wb3J0ICcuL21lbnUtaXRlbS9NZW51SXRlbSc7XHJcbmltcG9ydCAnLi9tZW51L01lbnUnO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPXRzJmluc3RhbmNlTmFtZT0wX2N1c3RvbS1lbGVtZW50cyEuL3Rlc3RzL3VuaXQvYWxsLnRzIiwiY29uc3QgeyBkZXNjcmliZSwgaXQgfSA9IGludGVybi5nZXRJbnRlcmZhY2UoJ2JkZCcpO1xyXG5pbXBvcnQgaGFybmVzcyBmcm9tICdAZG9qby90ZXN0LWV4dHJhcy9oYXJuZXNzJztcclxuXHJcbmltcG9ydCB7IHYgfSBmcm9tICdAZG9qby93aWRnZXQtY29yZS9kJztcclxuXHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vLi4vc3JjL21lbnUtaXRlbS9NZW51SXRlbSc7XHJcbmltcG9ydCAqIGFzIGNzcyBmcm9tICcuLi8uLi8uLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzJztcclxuXHJcbmRlc2NyaWJlKCdNZW51SXRlbScsICgpID0+IHtcclxuXHRpdCgnc2hvdWxkIHJlbmRlciB3aWRnZXQnLCAoKSA9PiB7XHJcblx0XHRjb25zdCB0ZXN0TWVudUl0ZW0gPSBoYXJuZXNzKE1lbnVJdGVtKTtcclxuXHRcdGNvbnN0IHNlbGVjdGVkID0gdHJ1ZTtcclxuXHRcdGNvbnN0IHRpdGxlID0gJ01lbnUgSXRlbSc7XHJcblx0XHR0ZXN0TWVudUl0ZW0uc2V0UHJvcGVydGllcyh7IHNlbGVjdGVkLCB0aXRsZSB9KTtcclxuXHRcdHRlc3RNZW51SXRlbS5leHBlY3RSZW5kZXIoXHJcblx0XHRcdHYoJ2xpJywgeyBjbGFzc2VzOiBjc3Mucm9vdCB9LCBbXHJcblx0XHRcdFx0dihcclxuXHRcdFx0XHRcdCdzcGFuJyxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0Y2xhc3NlczogW2Nzcy5pdGVtLCBjc3Muc2VsZWN0ZWRdLFxyXG5cdFx0XHRcdFx0XHRvbmNsaWNrOiB0ZXN0TWVudUl0ZW0ubGlzdGVuZXJcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRbdGl0bGVdXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRdKVxyXG5cdFx0KTtcclxuXHR9KTtcclxufSk7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9dHMmaW5zdGFuY2VOYW1lPTBfY3VzdG9tLWVsZW1lbnRzIS4vdGVzdHMvdW5pdC9tZW51LWl0ZW0vTWVudUl0ZW0udHMiLCJjb25zdCB7IGRlc2NyaWJlLCBpdCB9ID0gaW50ZXJuLmdldEludGVyZmFjZSgnYmRkJyk7XHJcbmltcG9ydCBoYXJuZXNzIGZyb20gJ0Bkb2pvL3Rlc3QtZXh0cmFzL2hhcm5lc3MnO1xyXG5cclxuaW1wb3J0IHsgdiB9IGZyb20gJ0Bkb2pvL3dpZGdldC1jb3JlL2QnO1xyXG5cclxuaW1wb3J0IHsgTWVudSB9IGZyb20gJy4uLy4uLy4uL3NyYy9tZW51L01lbnUnO1xyXG5pbXBvcnQgKiBhcyBjc3MgZnJvbSAnLi4vLi4vLi4vc3JjL21lbnUvbWVudS5tLmNzcyc7XHJcblxyXG5kZXNjcmliZSgnTWVudScsICgpID0+IHtcclxuXHRpdCgnc2hvdWxkIHJlbmRlciB3aWRnZXQnLCAoKSA9PiB7XHJcblx0XHRjb25zdCB0ZXN0TWVudSA9IGhhcm5lc3MoTWVudSk7XHJcblx0XHR0ZXN0TWVudS5leHBlY3RSZW5kZXIodignbmF2JywgeyBjbGFzc2VzOiBjc3Mucm9vdCB9LCBbdignb2wnLCB7IGNsYXNzZXM6IGNzcy5tZW51Q29udGFpbmVyIH0pXSkpO1xyXG5cdH0pO1xyXG59KTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXI/dHlwZT10cyZpbnN0YW5jZU5hbWU9MF9jdXN0b20tZWxlbWVudHMhLi90ZXN0cy91bml0L21lbnUvTWVudS50cyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgNzMyODJlOTgxNzIzN2Q0NTUwMmMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL0Rlc3Ryb3lhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9FdmVudGVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9sYW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvaGFzL2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9Qcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9TZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vV2Vha01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL251bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L3F1ZXVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L3V0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay90ZXN0aW5nL2hhcm5lc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay90ZXN0aW5nL3N1cHBvcnQvYXNzZXJ0UmVuZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvdGVzdGluZy9zdXBwb3J0L3NlbGVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvSW5qZWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9Ob2RlSGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1JlZ2lzdHJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvUmVnaXN0cnlIYW5kbGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvV2lkZ2V0QmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hZnRlclJlbmRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9iZWZvcmVQcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9jdXN0b21FbGVtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9kaWZmUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGlmZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL21peGlucy9Qcm9qZWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvcmVnaXN0ZXJDdXN0b21FbGVtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvdmRvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzPzJlNTYiLCJ3ZWJwYWNrOi8vLy4vc3JjL21lbnUvbWVudS5tLmNzcz80MWNiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdC11bWQvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGlmZi9kaXN0L2RpZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21lbnUtaXRlbS9NZW51SXRlbS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzIiwid2VicGFjazovLy8uL3NyYy9tZW51L01lbnUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21lbnUvbWVudS5tLmNzcyIsIndlYnBhY2s6Ly8vLi90ZXN0cy91bml0L2FsbC50cyIsIndlYnBhY2s6Ly8vLi90ZXN0cy91bml0L21lbnUtaXRlbS9NZW51SXRlbS50cyIsIndlYnBhY2s6Ly8vLi90ZXN0cy91bml0L21lbnUvTWVudS50cyJdLCJuYW1lcyI6WyJkXzEiLCJyZXF1aXJlIiwiY3VzdG9tRWxlbWVudF8xIiwiVGhlbWVkXzEiLCJXaWRnZXRCYXNlXzEiLCJjc3MiLCJNZW51SXRlbSIsIl9zdXBlciIsInRzbGliXzEiLCJfX2V4dGVuZHMiLCJwcm90b3R5cGUiLCJfb25DbGljayIsInByb3BlcnRpZXMiLCJvblNlbGVjdGVkIiwiZGF0YSIsInJlbmRlciIsIl9hIiwidGl0bGUiLCJzZWxlY3RlZCIsInYiLCJjbGFzc2VzIiwidGhlbWUiLCJyb290IiwiaXRlbSIsIm9uY2xpY2siLCJfX2RlY29yYXRlIiwiY3VzdG9tRWxlbWVudCIsInRhZyIsImF0dHJpYnV0ZXMiLCJldmVudHMiLCJUaGVtZWRNaXhpbiIsIldpZGdldEJhc2UiLCJleHBvcnRzIiwiZGVmYXVsdCIsIk1lbnUiLCJfb25TZWxlY3RlZCIsImlkIiwiX3NlbGVjdGVkSWQiLCJpbnZhbGlkYXRlIiwiX3RoaXMiLCJpdGVtcyIsImNoaWxkcmVuIiwibWFwIiwiY2hpbGQiLCJpbmRleCIsInVuZGVmaW5lZCIsIl9fYXNzaWduIiwibWVudUNvbnRhaW5lciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzRDs7Ozs7Ozs7dURDNU9BO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsZ0NBQWdDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxrQzs7Ozs7Ozs7QUM1SEE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRTtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixzQkFBc0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUdBQXVHLHFCQUFxQjtBQUM1SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLFFBQVEsZ0JBQWdCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDBCQUEwQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixZQUFZO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZUFBZTtBQUNsRDtBQUNBLCtCQUErQixTQUFTO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDOzs7Ozs7Ozs4Q0MvTUE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsK0I7Ozs7Ozs7OztBQ2xCQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsT0FBTztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQjs7Ozs7Ozs7QUNySEE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Qjs7Ozs7Ozs7QUM1Q0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsMEJBQTBCLHFCQUFxQixFQUFFLEVBQUU7QUFDdEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSwyQjs7Ozs7Ozs7QUM1SEE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsMEJBQTBCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQywwQkFBMEI7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix1QkFBdUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MscUJBQXFCO0FBQ3pEO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esa0M7Ozs7Ozs7O0FDcEZBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDBCQUEwQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyw0QkFBNEI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwwQkFBMEI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsb0NBQW9DO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxhQUFhLHFCQUFxQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUscUNBQXFDLEVBQUU7QUFDMUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsNkI7Ozs7Ozs7O0FDallBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7OztBQy9EQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixlQUFlO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQywyQkFBMkI7QUFDckUsOEJBQThCLHNCQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLGdEQUFnRCwwQ0FBMEM7QUFDM0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0I7Ozs7Ozs7O0FDMUhBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLDhCOzs7Ozs7OztBQ1RBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0EsK0I7Ozs7Ozs7O0FDWkE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUM7Ozs7Ozs7O0FDVEE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZXQUE2VyxpQ0FBaUMsRUFBRTtBQUNoWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQzs7Ozs7Ozs7QUN0QkE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyw0QkFBNEI7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLCtCOzs7Ozs7OztBQ3pCQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQzs7Ozs7Ozs7QUNuQkE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0EseUI7Ozs7Ozs7O0FDeENBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQjs7Ozs7Ozs7QUN2RUE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsMkZBQTJGO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyw2REFBNkQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxpQ0FBaUMsZ0JBQWdCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hELCtEQUErRCxnREFBZ0Q7QUFDL0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELDRCQUE0QixxQkFBcUI7QUFDMUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxpQzs7Ozs7Ozs7QUM5S0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUssSUFBSTtBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qiw0QkFBNEI7QUFDeEQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELHdDQUF3QyxFQUFFO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDLGlCQUFpQixJQUFJO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxhQUFhLElBQUk7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSw4Qjs7Ozs7Ozs7QUNySkE7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsaUdBQWlHO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsSUFBSTtBQUNqQiw0QkFBNEIsb0RBQW9EO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyx5Q0FBeUMsRUFBRTtBQUNyRiwrQ0FBK0MsZ0RBQWdEO0FBQy9GO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyx5Q0FBeUMsRUFBRTtBQUNqRiwyQ0FBMkMsZ0RBQWdEO0FBQzNGO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLDhDQUE4QyxFQUFFO0FBQ3RGLDJDQUEyQyxxREFBcUQ7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsdUJBQXVCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSx3QkFBd0IsRUFBRTtBQUN4RyxpRkFBaUYsd0JBQXdCLEVBQUU7QUFDM0c7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELG1DQUFtQztBQUNyRjtBQUNBLGFBQWE7QUFDYixxRUFBcUUsaUNBQWlDLEVBQUU7QUFDeEc7QUFDQSw4Q0FBOEMsNkJBQTZCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsNkVBQTZFLDRDQUE0QyxFQUFFO0FBQzNIO0FBQ0E7QUFDQSwyQ0FBMkMscUJBQXFCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsK0JBQStCLEVBQUU7QUFDcEc7QUFDQSx5RUFBeUUsd0JBQXdCLEVBQUU7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsK0RBQStELCtCQUErQixFQUFFO0FBQ2hHO0FBQ0EsMkRBQTJEO0FBQzNELGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsSUFBSTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkI7Ozs7Ozs7O0FDelBBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdUJBQXVCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHVCQUF1QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsZ0JBQWdCLGVBQWUsc0NBQXNDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUk7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxvQkFBb0I7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGVBQWU7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELG9DQUFvQztBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHVDQUF1QztBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGVBQWU7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyw4QkFBOEI7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyw4QkFBOEI7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx5QkFBeUI7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyw2QkFBNkI7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsZ0JBQWdCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixxQkFBcUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwyQkFBMkI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdUJBQXVCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHNCQUFzQixxQ0FBcUM7QUFDdEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsdUJBQXVCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQywwQkFBMEI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxzQkFBc0IscUNBQXFDO0FBQ3RHLG1CQUFtQixxQkFBcUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQyxvQ0FBb0M7QUFDcEMsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCx1REFBdUQ7QUFDeEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx5Q0FBeUM7QUFDOUU7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELHNCQUFzQiwyQkFBMkI7QUFDNUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsMkNBQTJDO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsc0JBQXNCLDJCQUEyQjtBQUN4RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7OztBQUdBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0EsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsU0FBUztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsQ0FBQzs7O0FBR0QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQixnQkFBZ0I7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBLEVBQUUsSUFBSTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwrREFBK0Q7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLHdDQUF3Qzs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsc0JBQXNCLGlCQUFpQjtBQUN2QztBQUNBLGdCQUFnQjtBQUNoQjtBQUNBLEdBQUc7QUFDSCxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQSxtRUFBbUUsUUFBUTtBQUMzRTs7QUFFQTtBQUNBLDBCQUEwQixZQUFZO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUEsa0JBQWtCOztBQUVsQixPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBLGtCQUFrQjs7QUFFbEIsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQ0FBaUMsT0FBTztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsT0FBTztBQUN4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQ0FBaUMsZ0JBQWdCO0FBQ2pEO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsT0FBTztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQyxPQUFPO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQSw0QkFBNEIsSUFBSTtBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFlBQVk7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRixDQUFDO0FBQ0Q7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsMEJB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OztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlEQUFpRCxxQkFBcUI7QUFDdEUsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpREFBaUQ7QUFDaEUsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0Esa0JBQWtCLFdBQVc7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUos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QUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7Ozs7Ozs7O0FDdkx0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsaUJBQWlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQ0FBMEMsc0JBQXNCLEVBQUU7QUFDbEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7OztBQ3pMRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUI7QUFDcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHNCQUFzQjtBQUN2Qzs7QUFFQTtBQUNBLG1CQUFtQiwyQkFBMkI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsMkJBQTJCO0FBQzVDO0FBQ0E7O0FBRUEsUUFBUSx1QkFBdUI7QUFDL0I7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxpQkFBaUIsdUJBQXVCO0FBQ3hDO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZCxrREFBa0Qsc0JBQXNCO0FBQ3hFO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEOztBQUVBLDZCQUE2QixtQkFBbUI7O0FBRWhEOztBQUVBOztBQUVBO0FBQ0E7Ozs7Ozs7OztBQzVXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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InVuaXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA3MzI4MmU5ODE3MjM3ZDQ1NTAyYyIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgbGFuZ18xID0gcmVxdWlyZShcIi4vbGFuZ1wiKTtcclxudmFyIFByb21pc2VfMSA9IHJlcXVpcmUoXCIuLi9zaGltL1Byb21pc2VcIik7XHJcbi8qKlxyXG4gKiBObyBvcGVyYXRpb24gZnVuY3Rpb24gdG8gcmVwbGFjZSBvd24gb25jZSBpbnN0YW5jZSBpcyBkZXN0b3J5ZWRcclxuICovXHJcbmZ1bmN0aW9uIG5vb3AoKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZV8xLmRlZmF1bHQucmVzb2x2ZShmYWxzZSk7XHJcbn1cclxuLyoqXHJcbiAqIE5vIG9wIGZ1bmN0aW9uIHVzZWQgdG8gcmVwbGFjZSBvd24sIG9uY2UgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdG9yeWVkXHJcbiAqL1xyXG5mdW5jdGlvbiBkZXN0cm95ZWQoKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgbWFkZSB0byBkZXN0cm95ZWQgbWV0aG9kJyk7XHJcbn1cclxudmFyIERlc3Ryb3lhYmxlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAY29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gRGVzdHJveWFibGUoKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVzID0gW107XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyIGhhbmRsZXMgZm9yIHRoZSBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gYHRoaXMuZGVzdHJveWAgaXMgY2FsbGVkXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtIYW5kbGV9IGhhbmRsZSBUaGUgaGFuZGxlIHRvIGFkZCBmb3IgdGhlIGluc3RhbmNlXHJcbiAgICAgKiBAcmV0dXJucyB7SGFuZGxlfSBhIGhhbmRsZSBmb3IgdGhlIGhhbmRsZSwgcmVtb3ZlcyB0aGUgaGFuZGxlIGZvciB0aGUgaW5zdGFuY2UgYW5kIGNhbGxzIGRlc3Ryb3lcclxuICAgICAqL1xyXG4gICAgRGVzdHJveWFibGUucHJvdG90eXBlLm93biA9IGZ1bmN0aW9uIChoYW5kbGVzKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZSA9IEFycmF5LmlzQXJyYXkoaGFuZGxlcykgPyBsYW5nXzEuY3JlYXRlQ29tcG9zaXRlSGFuZGxlLmFwcGx5KHZvaWQgMCwgdHNsaWJfMS5fX3NwcmVhZChoYW5kbGVzKSkgOiBoYW5kbGVzO1xyXG4gICAgICAgIHZhciBfaGFuZGxlcyA9IHRoaXMuaGFuZGxlcztcclxuICAgICAgICBfaGFuZGxlcy5wdXNoKGhhbmRsZSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgX2hhbmRsZXMuc3BsaWNlKF9oYW5kbGVzLmluZGV4T2YoaGFuZGxlKSk7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGUuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIERlc3RycHlzIGFsbCBoYW5kZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBpbnN0YW5jZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPGFueX0gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSBhbGwgaGFuZGxlcyBoYXZlIGJlZW4gZGVzdHJveWVkXHJcbiAgICAgKi9cclxuICAgIERlc3Ryb3lhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlXzEuZGVmYXVsdChmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICBfdGhpcy5oYW5kbGVzLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZSkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlICYmIGhhbmRsZS5kZXN0cm95ICYmIGhhbmRsZS5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBfdGhpcy5kZXN0cm95ID0gbm9vcDtcclxuICAgICAgICAgICAgX3RoaXMub3duID0gZGVzdHJveWVkO1xyXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBEZXN0cm95YWJsZTtcclxufSgpKTtcclxuZXhwb3J0cy5EZXN0cm95YWJsZSA9IERlc3Ryb3lhYmxlO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBEZXN0cm95YWJsZTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9EZXN0cm95YWJsZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL2NvcmUvRGVzdHJveWFibGUuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBNYXBfMSA9IHJlcXVpcmUoXCIuLi9zaGltL01hcFwiKTtcclxudmFyIERlc3Ryb3lhYmxlXzEgPSByZXF1aXJlKFwiLi9EZXN0cm95YWJsZVwiKTtcclxuLyoqXHJcbiAqIE1hcCBvZiBjb21wdXRlZCByZWd1bGFyIGV4cHJlc3Npb25zLCBrZXllZCBieSBzdHJpbmdcclxuICovXHJcbnZhciByZWdleE1hcCA9IG5ldyBNYXBfMS5kZWZhdWx0KCk7XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIGlzIHRoZSBldmVudCB0eXBlIGdsb2IgaGFzIGJlZW4gbWF0Y2hlZFxyXG4gKlxyXG4gKiBAcmV0dXJucyBib29sZWFuIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBnbG9iIGlzIG1hdGNoZWRcclxuICovXHJcbmZ1bmN0aW9uIGlzR2xvYk1hdGNoKGdsb2JTdHJpbmcsIHRhcmdldFN0cmluZykge1xyXG4gICAgaWYgKHR5cGVvZiB0YXJnZXRTdHJpbmcgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBnbG9iU3RyaW5nID09PSAnc3RyaW5nJyAmJiBnbG9iU3RyaW5nLmluZGV4T2YoJyonKSAhPT0gLTEpIHtcclxuICAgICAgICB2YXIgcmVnZXggPSB2b2lkIDA7XHJcbiAgICAgICAgaWYgKHJlZ2V4TWFwLmhhcyhnbG9iU3RyaW5nKSkge1xyXG4gICAgICAgICAgICByZWdleCA9IHJlZ2V4TWFwLmdldChnbG9iU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChcIl5cIiArIGdsb2JTdHJpbmcucmVwbGFjZSgvXFwqL2csICcuKicpICsgXCIkXCIpO1xyXG4gICAgICAgICAgICByZWdleE1hcC5zZXQoZ2xvYlN0cmluZywgcmVnZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh0YXJnZXRTdHJpbmcpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGdsb2JTdHJpbmcgPT09IHRhcmdldFN0cmluZztcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmlzR2xvYk1hdGNoID0gaXNHbG9iTWF0Y2g7XHJcbi8qKlxyXG4gKiBFdmVudCBDbGFzc1xyXG4gKi9cclxudmFyIEV2ZW50ZWQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhFdmVudGVkLCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gRXZlbnRlZCgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBtYXAgb2YgbGlzdGVuZXJzIGtleWVkIGJ5IGV2ZW50IHR5cGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfdGhpcy5saXN0ZW5lcnNNYXAgPSBuZXcgTWFwXzEuZGVmYXVsdCgpO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIEV2ZW50ZWQucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzTWFwLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZHMsIHR5cGUpIHtcclxuICAgICAgICAgICAgaWYgKGlzR2xvYk1hdGNoKHR5cGUsIGV2ZW50LnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0c2xpYl8xLl9fc3ByZWFkKG1ldGhvZHMpLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZC5jYWxsKF90aGlzLCBldmVudCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIEV2ZW50ZWQucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0ZW5lcikpIHtcclxuICAgICAgICAgICAgdmFyIGhhbmRsZXNfMSA9IGxpc3RlbmVyLm1hcChmdW5jdGlvbiAobGlzdGVuZXIpIHsgcmV0dXJuIF90aGlzLl9hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7IH0pO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXNfMS5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGUpIHsgcmV0dXJuIGhhbmRsZS5kZXN0cm95KCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpO1xyXG4gICAgfTtcclxuICAgIEV2ZW50ZWQucHJvdG90eXBlLl9hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzTWFwLmdldCh0eXBlKSB8fCBbXTtcclxuICAgICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lcnNNYXAuc2V0KHR5cGUsIGxpc3RlbmVycyk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVycyA9IF90aGlzLmxpc3RlbmVyc01hcC5nZXQodHlwZSkgfHwgW107XHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBFdmVudGVkO1xyXG59KERlc3Ryb3lhYmxlXzEuRGVzdHJveWFibGUpKTtcclxuZXhwb3J0cy5FdmVudGVkID0gRXZlbnRlZDtcclxuZXhwb3J0cy5kZWZhdWx0ID0gRXZlbnRlZDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9FdmVudGVkLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvY29yZS9FdmVudGVkLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgb2JqZWN0XzEgPSByZXF1aXJlKFwiLi4vc2hpbS9vYmplY3RcIik7XHJcbnZhciBvYmplY3RfMiA9IHJlcXVpcmUoXCIuLi9zaGltL29iamVjdFwiKTtcclxuZXhwb3J0cy5hc3NpZ24gPSBvYmplY3RfMi5hc3NpZ247XHJcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcclxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcclxuLyoqXHJcbiAqIFR5cGUgZ3VhcmQgdGhhdCBlbnN1cmVzIHRoYXQgdGhlIHZhbHVlIGNhbiBiZSBjb2VyY2VkIHRvIE9iamVjdFxyXG4gKiB0byB3ZWVkIG91dCBob3N0IG9iamVjdHMgdGhhdCBkbyBub3QgZGVyaXZlIGZyb20gT2JqZWN0LlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgaWYgd2Ugd2FudCB0byBkZWVwIGNvcHkgYW4gb2JqZWN0IG9yIG5vdC5cclxuICogTm90ZTogSW4gRVM2IGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSBhbiBvYmplY3QncyBTeW1ib2wudG9TdHJpbmdUYWcgcHJvcGVydHksIHdoaWNoIHdpbGxcclxuICogY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBgdG9TdHJpbmdgLiBUaGlzIGlzIGEgcmFyZSBlZGdlIGNhc2UgdGhhdCBpcyBkaWZmaWN1bHQgdG8gaGFuZGxlLFxyXG4gKiBzbyBpdCBpcyBub3QgaGFuZGxlZCBoZXJlLlxyXG4gKiBAcGFyYW0gIHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVja1xyXG4gKiBAcmV0dXJuICAgICAgIElmIHRoZSB2YWx1ZSBpcyBjb2VyY2libGUgaW50byBhbiBPYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIHNob3VsZERlZXBDb3B5T2JqZWN0KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XHJcbn1cclxuZnVuY3Rpb24gY29weUFycmF5KGFycmF5LCBpbmhlcml0ZWQpIHtcclxuICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29weUFycmF5KGl0ZW0sIGluaGVyaXRlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAhc2hvdWxkRGVlcENvcHlPYmplY3QoaXRlbSlcclxuICAgICAgICAgICAgPyBpdGVtXHJcbiAgICAgICAgICAgIDogX21peGluKHtcclxuICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBpbmhlcml0ZWQ6IGluaGVyaXRlZCxcclxuICAgICAgICAgICAgICAgIHNvdXJjZXM6IFtpdGVtXSxcclxuICAgICAgICAgICAgICAgIHRhcmdldDoge31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBfbWl4aW4oa3dBcmdzKSB7XHJcbiAgICB2YXIgZGVlcCA9IGt3QXJncy5kZWVwO1xyXG4gICAgdmFyIGluaGVyaXRlZCA9IGt3QXJncy5pbmhlcml0ZWQ7XHJcbiAgICB2YXIgdGFyZ2V0ID0ga3dBcmdzLnRhcmdldDtcclxuICAgIHZhciBjb3BpZWQgPSBrd0FyZ3MuY29waWVkIHx8IFtdO1xyXG4gICAgdmFyIGNvcGllZENsb25lID0gdHNsaWJfMS5fX3NwcmVhZChjb3BpZWQpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrd0FyZ3Muc291cmNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBzb3VyY2UgPSBrd0FyZ3Muc291cmNlc1tpXTtcclxuICAgICAgICBpZiAoc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtrZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvcGllZENsb25lLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGRlZXApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjb3B5QXJyYXkodmFsdWUsIGluaGVyaXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZERlZXBDb3B5T2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5XSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkLnB1c2goc291cmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfbWl4aW4oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRlZDogaW5oZXJpdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlczogW3ZhbHVlXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0VmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWQ6IGNvcGllZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlKSB7XHJcbiAgICB2YXIgbWl4aW5zID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIG1peGluc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmICghbWl4aW5zLmxlbmd0aCkge1xyXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsYW5nLmNyZWF0ZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWl4aW4gb2JqZWN0LicpO1xyXG4gICAgfVxyXG4gICAgdmFyIGFyZ3MgPSBtaXhpbnMuc2xpY2UoKTtcclxuICAgIGFyZ3MudW5zaGlmdChPYmplY3QuY3JlYXRlKHByb3RvdHlwZSkpO1xyXG4gICAgcmV0dXJuIG9iamVjdF8xLmFzc2lnbi5hcHBseShudWxsLCBhcmdzKTtcclxufVxyXG5leHBvcnRzLmNyZWF0ZSA9IGNyZWF0ZTtcclxuZnVuY3Rpb24gZGVlcEFzc2lnbih0YXJnZXQpIHtcclxuICAgIHZhciBzb3VyY2VzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHNvdXJjZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX21peGluKHtcclxuICAgICAgICBkZWVwOiB0cnVlLFxyXG4gICAgICAgIGluaGVyaXRlZDogZmFsc2UsXHJcbiAgICAgICAgc291cmNlczogc291cmNlcyxcclxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5kZWVwQXNzaWduID0gZGVlcEFzc2lnbjtcclxuZnVuY3Rpb24gZGVlcE1peGluKHRhcmdldCkge1xyXG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgc291cmNlc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHJldHVybiBfbWl4aW4oe1xyXG4gICAgICAgIGRlZXA6IHRydWUsXHJcbiAgICAgICAgaW5oZXJpdGVkOiB0cnVlLFxyXG4gICAgICAgIHNvdXJjZXM6IHNvdXJjZXMsXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuZGVlcE1peGluID0gZGVlcE1peGluO1xyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdXNpbmcgdGhlIHByb3ZpZGVkIHNvdXJjZSdzIHByb3RvdHlwZSBhcyB0aGUgcHJvdG90eXBlIGZvciB0aGUgbmV3IG9iamVjdCwgYW5kIHRoZW5cclxuICogZGVlcCBjb3BpZXMgdGhlIHByb3ZpZGVkIHNvdXJjZSdzIHZhbHVlcyBpbnRvIHRoZSBuZXcgdGFyZ2V0LlxyXG4gKlxyXG4gKiBAcGFyYW0gc291cmNlIFRoZSBvYmplY3QgdG8gZHVwbGljYXRlXHJcbiAqIEByZXR1cm4gVGhlIG5ldyBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIGR1cGxpY2F0ZShzb3VyY2UpIHtcclxuICAgIHZhciB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpKTtcclxuICAgIHJldHVybiBkZWVwTWl4aW4odGFyZ2V0LCBzb3VyY2UpO1xyXG59XHJcbmV4cG9ydHMuZHVwbGljYXRlID0gZHVwbGljYXRlO1xyXG4vKipcclxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXHJcbiAqIEBwYXJhbSBiIFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXHJcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZTsgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0lkZW50aWNhbChhLCBiKSB7XHJcbiAgICByZXR1cm4gKGEgPT09IGIgfHxcclxuICAgICAgICAvKiBib3RoIHZhbHVlcyBhcmUgTmFOICovXHJcbiAgICAgICAgKGEgIT09IGEgJiYgYiAhPT0gYikpO1xyXG59XHJcbmV4cG9ydHMuaXNJZGVudGljYWwgPSBpc0lkZW50aWNhbDtcclxuLyoqXHJcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGJpbmRzIGEgbWV0aG9kIHRvIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGF0IHJ1bnRpbWUuIFRoaXMgaXMgc2ltaWxhciB0b1xyXG4gKiBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgLCBidXQgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIGl0IHRha2VzIHRoZSBuYW1lIG9mIGEgbWV0aG9kIG9uIGFuIG9iamVjdC5cclxuICogQXMgYSByZXN1bHQsIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBgbGF0ZUJpbmRgIHdpbGwgYWx3YXlzIGNhbGwgdGhlIGZ1bmN0aW9uIGN1cnJlbnRseSBhc3NpZ25lZCB0b1xyXG4gKiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG9uIHRoZSBvYmplY3QgYXMgb2YgdGhlIG1vbWVudCB0aGUgZnVuY3Rpb24gaXQgcmV0dXJucyBpcyBjYWxsZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgY29udGV4dCBvYmplY3RcclxuICogQHBhcmFtIG1ldGhvZCBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIG9uIHRoZSBjb250ZXh0IG9iamVjdCB0byBiaW5kIHRvIGl0c2VsZlxyXG4gKiBAcGFyYW0gc3VwcGxpZWRBcmdzIEFuIG9wdGlvbmFsIGFycmF5IG9mIHZhbHVlcyB0byBwcmVwZW5kIHRvIHRoZSBgaW5zdGFuY2VbbWV0aG9kXWAgYXJndW1lbnRzIGxpc3RcclxuICogQHJldHVybiBUaGUgYm91bmQgZnVuY3Rpb25cclxuICovXHJcbmZ1bmN0aW9uIGxhdGVCaW5kKGluc3RhbmNlLCBtZXRob2QpIHtcclxuICAgIHZhciBzdXBwbGllZEFyZ3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgc3VwcGxpZWRBcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cHBsaWVkQXJncy5sZW5ndGhcclxuICAgICAgICA/IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID8gc3VwcGxpZWRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpIDogc3VwcGxpZWRBcmdzO1xyXG4gICAgICAgICAgICAvLyBUUzcwMTdcclxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlW21ldGhvZF0uYXBwbHkoaW5zdGFuY2UsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICA6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgLy8gVFM3MDE3XHJcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZVttZXRob2RdLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xyXG4gICAgICAgIH07XHJcbn1cclxuZXhwb3J0cy5sYXRlQmluZCA9IGxhdGVCaW5kO1xyXG5mdW5jdGlvbiBtaXhpbih0YXJnZXQpIHtcclxuICAgIHZhciBzb3VyY2VzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHNvdXJjZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX21peGluKHtcclxuICAgICAgICBkZWVwOiBmYWxzZSxcclxuICAgICAgICBpbmhlcml0ZWQ6IHRydWUsXHJcbiAgICAgICAgc291cmNlczogc291cmNlcyxcclxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5taXhpbiA9IG1peGluO1xyXG4vKipcclxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMgdGhlIGdpdmVuIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cyBwcmVwZW5kZWQgdG8gaXRzIGFyZ3VtZW50IGxpc3QuXHJcbiAqIExpa2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCwgYnV0IGRvZXMgbm90IGFsdGVyIGV4ZWN1dGlvbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0gdGFyZ2V0RnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYm91bmRcclxuICogQHBhcmFtIHN1cHBsaWVkQXJncyBBbiBvcHRpb25hbCBhcnJheSBvZiBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aGUgYHRhcmdldEZ1bmN0aW9uYCBhcmd1bWVudHMgbGlzdFxyXG4gKiBAcmV0dXJuIFRoZSBib3VuZCBmdW5jdGlvblxyXG4gKi9cclxuZnVuY3Rpb24gcGFydGlhbCh0YXJnZXRGdW5jdGlvbikge1xyXG4gICAgdmFyIHN1cHBsaWVkQXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBzdXBwbGllZEFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA/IHN1cHBsaWVkQXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IHN1cHBsaWVkQXJncztcclxuICAgICAgICByZXR1cm4gdGFyZ2V0RnVuY3Rpb24uYXBwbHkodGhpcywgYXJncyk7XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMucGFydGlhbCA9IHBhcnRpYWw7XHJcbi8qKlxyXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgZGVzdHJveSBtZXRob2QgdGhhdCwgd2hlbiBjYWxsZWQsIGNhbGxzIHRoZSBwYXNzZWQtaW4gZGVzdHJ1Y3Rvci5cclxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGNyZWF0aW5nIFwicmVtb3ZlXCIgLyBcImRlc3Ryb3lcIiBoYW5kbGVycyBmb3JcclxuICogZXZlbnQgbGlzdGVuZXJzLCB0aW1lcnMsIGV0Yy5cclxuICpcclxuICogQHBhcmFtIGRlc3RydWN0b3IgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGhhbmRsZSdzIGBkZXN0cm95YCBtZXRob2QgaXMgaW52b2tlZFxyXG4gKiBAcmV0dXJuIFRoZSBoYW5kbGUgb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVIYW5kbGUoZGVzdHJ1Y3Rvcikge1xyXG4gICAgdmFyIGNhbGxlZCA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghY2FsbGVkKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLmNyZWF0ZUhhbmRsZSA9IGNyZWF0ZUhhbmRsZTtcclxuLyoqXHJcbiAqIFJldHVybnMgYSBzaW5nbGUgaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVzdHJveSBtdWx0aXBsZSBoYW5kbGVzIHNpbXVsdGFuZW91c2x5LlxyXG4gKlxyXG4gKiBAcGFyYW0gaGFuZGxlcyBBbiBhcnJheSBvZiBoYW5kbGVzIHdpdGggYGRlc3Ryb3lgIG1ldGhvZHNcclxuICogQHJldHVybiBUaGUgaGFuZGxlIG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQ29tcG9zaXRlSGFuZGxlKCkge1xyXG4gICAgdmFyIGhhbmRsZXMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgaGFuZGxlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZUhhbmRsZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXNbaV0uZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuY3JlYXRlQ29tcG9zaXRlSGFuZGxlID0gY3JlYXRlQ29tcG9zaXRlSGFuZGxlO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL2xhbmcuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9jb3JlL2xhbmcuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZnVuY3Rpb24gaXNGZWF0dXJlVGVzdFRoZW5hYmxlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUudGhlbjtcclxufVxyXG4vKipcclxuICogQSBjYWNoZSBvZiByZXN1bHRzIG9mIGZlYXR1cmUgdGVzdHNcclxuICovXHJcbmV4cG9ydHMudGVzdENhY2hlID0ge307XHJcbi8qKlxyXG4gKiBBIGNhY2hlIG9mIHRoZSB1bi1yZXNvbHZlZCBmZWF0dXJlIHRlc3RzXHJcbiAqL1xyXG5leHBvcnRzLnRlc3RGdW5jdGlvbnMgPSB7fTtcclxuLyoqXHJcbiAqIEEgY2FjaGUgb2YgdW5yZXNvbHZlZCB0aGVuYWJsZXMgKHByb2JhYmx5IHByb21pc2VzKVxyXG4gKiBAdHlwZSB7e319XHJcbiAqL1xyXG52YXIgdGVzdFRoZW5hYmxlcyA9IHt9O1xyXG4vKipcclxuICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBzY29wZSAoYHdpbmRvd2AgaW4gYSBicm93c2VyLCBgZ2xvYmFsYCBpbiBOb2RlSlMpXHJcbiAqL1xyXG52YXIgZ2xvYmFsU2NvcGUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIEJyb3dzZXJzXHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gTm9kZVxyXG4gICAgICAgIHJldHVybiBnbG9iYWw7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyBXZWIgd29ya2Vyc1xyXG4gICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfVxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgIHJldHVybiB7fTtcclxufSkoKTtcclxuLyogR3JhYiB0aGUgc3RhdGljRmVhdHVyZXMgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSAqL1xyXG52YXIgc3RhdGljRmVhdHVyZXMgPSAoZ2xvYmFsU2NvcGUuRG9qb0hhc0Vudmlyb25tZW50IHx8IHt9KS5zdGF0aWNGZWF0dXJlcztcclxuLyogQ2xlYW5pbmcgdXAgdGhlIERvam9IYXNFbnZpb3JubWVudCAqL1xyXG5pZiAoJ0Rvam9IYXNFbnZpcm9ubWVudCcgaW4gZ2xvYmFsU2NvcGUpIHtcclxuICAgIGRlbGV0ZSBnbG9iYWxTY29wZS5Eb2pvSGFzRW52aXJvbm1lbnQ7XHJcbn1cclxuLyoqXHJcbiAqIEN1c3RvbSB0eXBlIGd1YXJkIHRvIG5hcnJvdyB0aGUgYHN0YXRpY0ZlYXR1cmVzYCB0byBlaXRoZXIgYSBtYXAgb3IgYSBmdW5jdGlvbiB0aGF0XHJcbiAqIHJldHVybnMgYSBtYXAuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZ3VhcmQgZm9yXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcclxufVxyXG4vKipcclxuICogVGhlIGNhY2hlIG9mIGFzc2VydGVkIGZlYXR1cmVzIHRoYXQgd2VyZSBhdmFpbGFibGUgaW4gdGhlIGdsb2JhbCBzY29wZSB3aGVuIHRoZVxyXG4gKiBtb2R1bGUgbG9hZGVkXHJcbiAqL1xyXG52YXIgc3RhdGljQ2FjaGUgPSBzdGF0aWNGZWF0dXJlc1xyXG4gICAgPyBpc1N0YXRpY0ZlYXR1cmVGdW5jdGlvbihzdGF0aWNGZWF0dXJlcykgPyBzdGF0aWNGZWF0dXJlcy5hcHBseShnbG9iYWxTY29wZSkgOiBzdGF0aWNGZWF0dXJlc1xyXG4gICAgOiB7fTsvKiBQcm92aWRpbmcgYW4gZW1wdHkgY2FjaGUsIGlmIG5vbmUgd2FzIGluIHRoZSBlbnZpcm9ubWVudFxyXG5cclxuLyoqXHJcbiogQU1EIHBsdWdpbiBmdW5jdGlvbi5cclxuKlxyXG4qIENvbmRpdGlvbmFsIGxvYWRzIG1vZHVsZXMgYmFzZWQgb24gYSBoYXMgZmVhdHVyZSB0ZXN0IHZhbHVlLlxyXG4qXHJcbiogQHBhcmFtIHJlc291cmNlSWQgR2l2ZXMgdGhlIHJlc29sdmVkIG1vZHVsZSBpZCB0byBsb2FkLlxyXG4qIEBwYXJhbSByZXF1aXJlIFRoZSBsb2FkZXIgcmVxdWlyZSBmdW5jdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIG1vZHVsZSB0aGF0IGNvbnRhaW5lZCB0aGUgcGx1Z2luIHJlc291cmNlIGluIGl0c1xyXG4qICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgbGlzdC5cclxuKiBAcGFyYW0gbG9hZCBDYWxsYmFjayB0byBsb2FkZXIgdGhhdCBjb25zdW1lcyByZXN1bHQgb2YgcGx1Z2luIGRlbWFuZC5cclxuKi9cclxuZnVuY3Rpb24gbG9hZChyZXNvdXJjZUlkLCByZXF1aXJlLCBsb2FkLCBjb25maWcpIHtcclxuICAgIHJlc291cmNlSWQgPyByZXF1aXJlKFtyZXNvdXJjZUlkXSwgbG9hZCkgOiBsb2FkKCk7XHJcbn1cclxuZXhwb3J0cy5sb2FkID0gbG9hZDtcclxuLyoqXHJcbiAqIEFNRCBwbHVnaW4gZnVuY3Rpb24uXHJcbiAqXHJcbiAqIFJlc29sdmVzIHJlc291cmNlSWQgaW50byBhIG1vZHVsZSBpZCBiYXNlZCBvbiBwb3NzaWJseS1uZXN0ZWQgdGVuYXJ5IGV4cHJlc3Npb24gdGhhdCBicmFuY2hlcyBvbiBoYXMgZmVhdHVyZSB0ZXN0XHJcbiAqIHZhbHVlKHMpLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVzb3VyY2VJZCBUaGUgaWQgb2YgdGhlIG1vZHVsZVxyXG4gKiBAcGFyYW0gbm9ybWFsaXplIFJlc29sdmVzIGEgcmVsYXRpdmUgbW9kdWxlIGlkIGludG8gYW4gYWJzb2x1dGUgbW9kdWxlIGlkXHJcbiAqL1xyXG5mdW5jdGlvbiBub3JtYWxpemUocmVzb3VyY2VJZCwgbm9ybWFsaXplKSB7XHJcbiAgICB2YXIgdG9rZW5zID0gcmVzb3VyY2VJZC5tYXRjaCgvW1xcPzpdfFteOlxcP10qL2cpIHx8IFtdO1xyXG4gICAgdmFyIGkgPSAwO1xyXG4gICAgZnVuY3Rpb24gZ2V0KHNraXApIHtcclxuICAgICAgICB2YXIgdGVybSA9IHRva2Vuc1tpKytdO1xyXG4gICAgICAgIGlmICh0ZXJtID09PSAnOicpIHtcclxuICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nIG1vZHVsZSBuYW1lLCByZXNvbHZlcyB0byBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gcG9zdGZpeGVkIHdpdGggYSA/IG1lYW5zIGl0IGlzIGEgZmVhdHVyZSB0byBicmFuY2ggb24sIHRoZSB0ZXJtIGlzIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlXHJcbiAgICAgICAgICAgIGlmICh0b2tlbnNbaSsrXSA9PT0gJz8nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNraXAgJiYgaGFzKHRlcm0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hlZCB0aGUgZmVhdHVyZSwgZ2V0IHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSBvcHRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlkIG5vdCBtYXRjaCwgZ2V0IHRoZSBzZWNvbmQgdmFsdWUsIHBhc3Npbmcgb3ZlciB0aGUgZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICBnZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldChza2lwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBhIG1vZHVsZVxyXG4gICAgICAgICAgICByZXR1cm4gdGVybTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgaWQgPSBnZXQoKTtcclxuICAgIHJldHVybiBpZCAmJiBub3JtYWxpemUoaWQpO1xyXG59XHJcbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xyXG4vKipcclxuICogQ2hlY2sgaWYgYSBmZWF0dXJlIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZFxyXG4gKlxyXG4gKiBAcGFyYW0gZmVhdHVyZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxyXG4gKi9cclxuZnVuY3Rpb24gZXhpc3RzKGZlYXR1cmUpIHtcclxuICAgIHZhciBub3JtYWxpemVkRmVhdHVyZSA9IGZlYXR1cmUudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiBCb29sZWFuKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlIHx8IG5vcm1hbGl6ZWRGZWF0dXJlIGluIGV4cG9ydHMudGVzdENhY2hlIHx8IGV4cG9ydHMudGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0pO1xyXG59XHJcbmV4cG9ydHMuZXhpc3RzID0gZXhpc3RzO1xyXG4vKipcclxuICogUmVnaXN0ZXIgYSBuZXcgdGVzdCBmb3IgYSBuYW1lZCBmZWF0dXJlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBoYXMuYWRkKCdkb20tYWRkZXZlbnRsaXN0ZW5lcicsICEhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcik7XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGhhcy5hZGQoJ3RvdWNoLWV2ZW50cycsIGZ1bmN0aW9uICgpIHtcclxuICogICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50XHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBAcGFyYW0gZmVhdHVyZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZVxyXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHJlcG9ydGVkIG9mIHRoZSBmZWF0dXJlLCBvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBvbmNlIG9uIGZpcnN0IHRlc3RcclxuICogQHBhcmFtIG92ZXJ3cml0ZSBpZiBhbiBleGlzdGluZyB2YWx1ZSBzaG91bGQgYmUgb3ZlcndyaXR0ZW4uIERlZmF1bHRzIHRvIGZhbHNlLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkKGZlYXR1cmUsIHZhbHVlLCBvdmVyd3JpdGUpIHtcclxuICAgIGlmIChvdmVyd3JpdGUgPT09IHZvaWQgMCkgeyBvdmVyd3JpdGUgPSBmYWxzZTsgfVxyXG4gICAgdmFyIG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKGV4aXN0cyhub3JtYWxpemVkRmVhdHVyZSkgJiYgIW92ZXJ3cml0ZSAmJiAhKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGZWF0dXJlIFxcXCJcIiArIGZlYXR1cmUgKyBcIlxcXCIgZXhpc3RzIGFuZCBvdmVyd3JpdGUgbm90IHRydWUuXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGV4cG9ydHMudGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzRmVhdHVyZVRlc3RUaGVuYWJsZSh2YWx1ZSkpIHtcclxuICAgICAgICB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdID0gdmFsdWUudGhlbihmdW5jdGlvbiAocmVzb2x2ZWRWYWx1ZSkge1xyXG4gICAgICAgICAgICBleHBvcnRzLnRlc3RDYWNoZVtmZWF0dXJlXSA9IHJlc29sdmVkVmFsdWU7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0ZXN0VGhlbmFibGVzW2ZlYXR1cmVdO1xyXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRlc3RUaGVuYWJsZXNbZmVhdHVyZV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBleHBvcnRzLnRlc3RDYWNoZVtub3JtYWxpemVkRmVhdHVyZV0gPSB2YWx1ZTtcclxuICAgICAgICBkZWxldGUgZXhwb3J0cy50ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmFkZCA9IGFkZDtcclxuLyoqXHJcbiAqIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWVkIGZlYXR1cmUuXHJcbiAqXHJcbiAqIEBwYXJhbSBmZWF0dXJlIFRoZSBuYW1lIChpZiBhIHN0cmluZykgb3IgaWRlbnRpZmllciAoaWYgYW4gaW50ZWdlcikgb2YgdGhlIGZlYXR1cmUgdG8gdGVzdC5cclxuICovXHJcbmZ1bmN0aW9uIGhhcyhmZWF0dXJlKSB7XHJcbiAgICB2YXIgcmVzdWx0O1xyXG4gICAgdmFyIG5vcm1hbGl6ZWRGZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKG5vcm1hbGl6ZWRGZWF0dXJlIGluIHN0YXRpY0NhY2hlKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gc3RhdGljQ2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXhwb3J0cy50ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXSkge1xyXG4gICAgICAgIHJlc3VsdCA9IGV4cG9ydHMudGVzdENhY2hlW25vcm1hbGl6ZWRGZWF0dXJlXSA9IGV4cG9ydHMudGVzdEZ1bmN0aW9uc1tub3JtYWxpemVkRmVhdHVyZV0uY2FsbChudWxsKTtcclxuICAgICAgICBkZWxldGUgZXhwb3J0cy50ZXN0RnVuY3Rpb25zW25vcm1hbGl6ZWRGZWF0dXJlXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5vcm1hbGl6ZWRGZWF0dXJlIGluIGV4cG9ydHMudGVzdENhY2hlKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gZXhwb3J0cy50ZXN0Q2FjaGVbbm9ybWFsaXplZEZlYXR1cmVdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmVhdHVyZSBpbiB0ZXN0VGhlbmFibGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkF0dGVtcHQgdG8gZGV0ZWN0IHVucmVnaXN0ZXJlZCBoYXMgZmVhdHVyZSBcXFwiXCIgKyBmZWF0dXJlICsgXCJcXFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSBoYXM7XHJcbi8qXHJcbiAqIE91dCBvZiB0aGUgYm94IGZlYXR1cmUgdGVzdHNcclxuICovXHJcbi8qIEVudmlyb25tZW50cyAqL1xyXG4vKiBVc2VkIGFzIGEgdmFsdWUgdG8gcHJvdmlkZSBhIGRlYnVnIG9ubHkgY29kZSBwYXRoICovXHJcbmFkZCgnZGVidWcnLCB0cnVlKTtcclxuLyogRGV0ZWN0cyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgXCJicm93c2VyIGxpa2VcIiAqL1xyXG5hZGQoJ2hvc3QtYnJvd3NlcicsIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyk7XHJcbi8qIERldGVjdHMgaWYgdGhlIGVudmlyb25tZW50IGFwcGVhcnMgdG8gYmUgTm9kZUpTICovXHJcbmFkZCgnaG9zdC1ub2RlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSkge1xyXG4gICAgICAgIHJldHVybiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XHJcbiAgICB9XHJcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9oYXMvaGFzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvaGFzL2hhcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIGl0ZXJhdG9yXzEgPSByZXF1aXJlKFwiLi9pdGVyYXRvclwiKTtcclxudmFyIGdsb2JhbF8xID0gcmVxdWlyZShcIi4vZ2xvYmFsXCIpO1xyXG52YXIgb2JqZWN0XzEgPSByZXF1aXJlKFwiLi9vYmplY3RcIik7XHJcbnZhciBoYXNfMSA9IHJlcXVpcmUoXCIuL3N1cHBvcnQvaGFzXCIpO1xyXG5yZXF1aXJlKFwiLi9TeW1ib2xcIik7XHJcbmV4cG9ydHMuTWFwID0gZ2xvYmFsXzEuZGVmYXVsdC5NYXA7XHJcbmlmICghaGFzXzEuZGVmYXVsdCgnZXM2LW1hcCcpKSB7XHJcbiAgICBleHBvcnRzLk1hcCA9IChfYSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gTWFwKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdNYXAnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yXzEuaXNBcnJheUxpa2UoaXRlcmFibGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodmFsdWVbMF0sIHZhbHVlWzFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSB0c2xpYl8xLl9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodmFsdWVbMF0sIHZhbHVlWzFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGVfMSwgX2E7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEFuIGFsdGVybmF0aXZlIHRvIEFycmF5LnByb3RvdHlwZS5pbmRleE9mIHVzaW5nIE9iamVjdC5pc1xyXG4gICAgICAgICAgICAgKiB0byBjaGVjayBmb3IgZXF1YWxpdHkuIFNlZSBodHRwOi8vbXpsLmxhLzF6dUtPMlZcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuX2luZGV4T2ZLZXkgPSBmdW5jdGlvbiAoa2V5cywga2V5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoXzEgPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aF8xOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0XzEuaXMoa2V5c1tpXSwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXAucHJvdG90eXBlLCBcInNpemVcIiwge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2tleXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzLmxlbmd0aCA9IHRoaXMuX3ZhbHVlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuX2tleXMubWFwKGZ1bmN0aW9uIChrZXksIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2tleSwgX3RoaXMuX3ZhbHVlc1tpXV07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaXRlcmF0b3JfMS5TaGltSXRlcmF0b3IodmFsdWVzKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IHRoaXMuX2tleXM7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aF8yID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGhfMjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCB2YWx1ZXNbaV0sIGtleXNbaV0sIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2luZGV4T2ZLZXkodGhpcy5fa2V5cywga2V5KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiB0aGlzLl92YWx1ZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbmRleE9mS2V5KHRoaXMuX2tleXMsIGtleSkgPiAtMTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBpdGVyYXRvcl8xLlNoaW1JdGVyYXRvcih0aGlzLl9rZXlzKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5faW5kZXhPZktleSh0aGlzLl9rZXlzLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCA8IDAgPyB0aGlzLl9rZXlzLmxlbmd0aCA6IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5c1tpbmRleF0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXNbaW5kZXhdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgTWFwLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGl0ZXJhdG9yXzEuU2hpbUl0ZXJhdG9yKHRoaXMuX3ZhbHVlcyk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIE1hcC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVudHJpZXMoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIE1hcDtcclxuICAgICAgICB9KCkpLFxyXG4gICAgICAgIF9hW1N5bWJvbC5zcGVjaWVzXSA9IF9hLFxyXG4gICAgICAgIF9hKTtcclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLk1hcDtcclxudmFyIF9hO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL01hcC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vTWFwLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgZ2xvYmFsXzEgPSByZXF1aXJlKFwiLi9nbG9iYWxcIik7XHJcbnZhciBxdWV1ZV8xID0gcmVxdWlyZShcIi4vc3VwcG9ydC9xdWV1ZVwiKTtcclxucmVxdWlyZShcIi4vU3ltYm9sXCIpO1xyXG52YXIgaGFzXzEgPSByZXF1aXJlKFwiLi9zdXBwb3J0L2hhc1wiKTtcclxuZXhwb3J0cy5TaGltUHJvbWlzZSA9IGdsb2JhbF8xLmRlZmF1bHQuUHJvbWlzZTtcclxuZXhwb3J0cy5pc1RoZW5hYmxlID0gZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nO1xyXG59O1xyXG5pZiAoIWhhc18xLmRlZmF1bHQoJ2VzNi1wcm9taXNlJykpIHtcclxuICAgIGdsb2JhbF8xLmRlZmF1bHQuUHJvbWlzZSA9IGV4cG9ydHMuU2hpbVByb21pc2UgPSAoX2EgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFByb21pc2UuXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBAcGFyYW0gZXhlY3V0b3JcclxuICAgICAgICAgICAgICogVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBQcm9taXNlIGlzIGluc3RhbnRpYXRlZC4gSXQgaXMgcmVzcG9uc2libGUgZm9yXHJcbiAgICAgICAgICAgICAqIHN0YXJ0aW5nIHRoZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoZW4gaXQgaXMgaW52b2tlZC5cclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogVGhlIGV4ZWN1dG9yIG11c3QgY2FsbCBlaXRoZXIgdGhlIHBhc3NlZCBgcmVzb2x2ZWAgZnVuY3Rpb24gd2hlbiB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkXHJcbiAgICAgICAgICAgICAqIHN1Y2Nlc3NmdWxseSwgb3IgdGhlIGByZWplY3RgIGZ1bmN0aW9uIHdoZW4gdGhlIG9wZXJhdGlvbiBmYWlscy5cclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEgLyogUGVuZGluZyAqLztcclxuICAgICAgICAgICAgICAgIHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdQcm9taXNlJztcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogSWYgdHJ1ZSwgdGhlIHJlc29sdXRpb24gb2YgdGhpcyBwcm9taXNlIGlzIGNoYWluZWQgKFwibG9ja2VkIGluXCIpIHRvIGFub3RoZXIgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgdmFyIGlzQ2hhaW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHByb21pc2UgaXMgaW4gYSByZXNvbHZlZCBzdGF0ZS5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgdmFyIGlzUmVzb2x2ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnN0YXRlICE9PSAxIC8qIFBlbmRpbmcgKi8gfHwgaXNDaGFpbmVkO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogQ2FsbGJhY2tzIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgb25jZSB0aGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tzID0gW107XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIEluaXRpYWxseSBwdXNoZXMgY2FsbGJhY2tzIG9udG8gYSBxdWV1ZSBmb3IgZXhlY3V0aW9uIG9uY2UgdGhpcyBwcm9taXNlIHNldHRsZXMuIEFmdGVyIHRoZSBwcm9taXNlIHNldHRsZXMsXHJcbiAgICAgICAgICAgICAgICAgKiBlbnF1ZXVlcyBjYWxsYmFja3MgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCBldmVudCBsb29wIHR1cm4uXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHZhciB3aGVuRmluaXNoZWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBTZXR0bGVzIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHJlc29sdmVkIHN0YXRlIGZvciB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge1R8YW55fSB2YWx1ZSBUaGUgcmVzb2x2ZWQgdmFsdWUgZm9yIHRoaXMgcHJvbWlzZS5cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgdmFyIHNldHRsZSA9IGZ1bmN0aW9uIChuZXdTdGF0ZSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBBIHByb21pc2UgY2FuIG9ubHkgYmUgc2V0dGxlZCBvbmNlLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZSAhPT0gMSAvKiBQZW5kaW5nICovKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZXNvbHZlZFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlbkZpbmlzaGVkID0gcXVldWVfMS5xdWV1ZU1pY3JvVGFzaztcclxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGVucXVldWUgYSBjYWxsYmFjayBydW5uZXIgaWYgdGhlcmUgYXJlIGNhbGxiYWNrcyBzbyB0aGF0IGluaXRpYWxseSBmdWxmaWxsZWQgUHJvbWlzZXMgZG9uJ3QgaGF2ZSB0b1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgYW4gZXh0cmEgdHVybi5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzICYmIGNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlXzEucXVldWVNaWNyb1Rhc2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGNhbGxiYWNrcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBSZXNvbHZlcyB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIG5ld1N0YXRlIFRoZSByZXNvbHZlZCBzdGF0ZSBmb3IgdGhpcyBwcm9taXNlLlxyXG4gICAgICAgICAgICAgICAgICogQHBhcmFtIHtUfGFueX0gdmFsdWUgVGhlIHJlc29sdmVkIHZhbHVlIGZvciB0aGlzIHByb21pc2UuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHZhciByZXNvbHZlID0gZnVuY3Rpb24gKG5ld1N0YXRlLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Jlc29sdmVkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb3J0cy5pc1RoZW5hYmxlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS50aGVuKHNldHRsZS5iaW5kKG51bGwsIDAgLyogRnVsZmlsbGVkICovKSwgc2V0dGxlLmJpbmQobnVsbCwgMiAvKiBSZWplY3RlZCAqLykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NoYWluZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGxlKG5ld1N0YXRlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGhlbiA9IGZ1bmN0aW9uIChvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW5GaW5pc2hlZCBpbml0aWFsbHkgcXVldWVzIHVwIGNhbGxiYWNrcyBmb3IgZXhlY3V0aW9uIGFmdGVyIHRoZSBwcm9taXNlIGhhcyBzZXR0bGVkLiBPbmNlIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9taXNlIGhhcyBzZXR0bGVkLCB3aGVuRmluaXNoZWQgd2lsbCBzY2hlZHVsZSBjYWxsYmFja3MgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCB0dXJuIHRocm91Z2ggdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGxvb3AuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW5GaW5pc2hlZChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBfdGhpcy5zdGF0ZSA9PT0gMiAvKiBSZWplY3RlZCAqLyA/IG9uUmVqZWN0ZWQgOiBvbkZ1bGZpbGxlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNhbGxiYWNrKF90aGlzLnJlc29sdmVkVmFsdWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX3RoaXMuc3RhdGUgPT09IDIgLyogUmVqZWN0ZWQgKi8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoX3RoaXMucmVzb2x2ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF90aGlzLnJlc29sdmVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dG9yKHJlc29sdmUuYmluZChudWxsLCAwIC8qIEZ1bGZpbGxlZCAqLyksIHJlc29sdmUuYmluZChudWxsLCAyIC8qIFJlamVjdGVkICovKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0bGUoMiAvKiBSZWplY3RlZCAqLywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFByb21pc2UuYWxsID0gZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGxldGUgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcHVsYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGwoaW5kZXgsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKytjb21wbGV0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcHVsYXRpbmcgfHwgY29tcGxldGUgPCB0b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0l0ZW0oaW5kZXgsIGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyt0b3RhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9ydHMuaXNUaGVuYWJsZShpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYW4gaXRlbSBQcm9taXNlIHJlamVjdHMsIHRoaXMgUHJvbWlzZSBpcyBpbW1lZGlhdGVseSByZWplY3RlZCB3aXRoIHRoZSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9taXNlJ3MgcmVqZWN0aW9uIGVycm9yLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50aGVuKGZ1bGZpbGwuYmluZChudWxsLCBpbmRleCksIHJlamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoaXRlbSkudGhlbihmdWxmaWxsLmJpbmQobnVsbCwgaW5kZXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IHRzbGliXzEuX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0l0ZW0oaSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XHJcbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwb3B1bGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVfMSwgX2E7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgUHJvbWlzZS5yYWNlID0gZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzIgPSB0c2xpYl8xLl9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMl8xID0gaXRlcmFibGVfMi5uZXh0KCk7ICFpdGVyYWJsZV8yXzEuZG9uZTsgaXRlcmFibGVfMl8xID0gaXRlcmFibGVfMi5uZXh0KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gaXRlcmFibGVfMl8xLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBQcm9taXNlIGl0ZW0gcmVqZWN0cywgdGhpcyBQcm9taXNlIGlzIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggdGhlIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9taXNlJ3MgcmVqZWN0aW9uIGVycm9yLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4ocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cclxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8yXzEgJiYgIWl0ZXJhYmxlXzJfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzIucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlXzIsIF9hO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFByb21pc2UucmVqZWN0ID0gZnVuY3Rpb24gKHJlYXNvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QocmVhc29uKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFByb21pc2UucHJvdG90eXBlLmNhdGNoID0gZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2U7XHJcbiAgICAgICAgfSgpKSxcclxuICAgICAgICBfYVtTeW1ib2wuc3BlY2llc10gPSBleHBvcnRzLlNoaW1Qcm9taXNlLFxyXG4gICAgICAgIF9hKTtcclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLlNoaW1Qcm9taXNlO1xyXG52YXIgX2E7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vUHJvbWlzZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vUHJvbWlzZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIGdsb2JhbF8xID0gcmVxdWlyZShcIi4vZ2xvYmFsXCIpO1xyXG52YXIgaXRlcmF0b3JfMSA9IHJlcXVpcmUoXCIuL2l0ZXJhdG9yXCIpO1xyXG52YXIgaGFzXzEgPSByZXF1aXJlKFwiLi9zdXBwb3J0L2hhc1wiKTtcclxucmVxdWlyZShcIi4vU3ltYm9sXCIpO1xyXG5leHBvcnRzLlNldCA9IGdsb2JhbF8xLmRlZmF1bHQuU2V0O1xyXG5pZiAoIWhhc18xLmRlZmF1bHQoJ2VzNi1zZXQnKSkge1xyXG4gICAgZXhwb3J0cy5TZXQgPSAoX2EgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIFNldChpdGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ1NldCc7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3JfMS5pc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQoaXRlcmFibGVbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IHRzbGliXzEuX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBlXzEsIF9hO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXModmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXREYXRhLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXREYXRhLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFNldC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gdGhpcy5fc2V0RGF0YS5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RGF0YS5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBTZXQucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGl0ZXJhdG9yXzEuU2hpbUl0ZXJhdG9yKHRoaXMuX3NldERhdGEubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gW3ZhbHVlLCB2YWx1ZV07IH0pKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrZm4sIHRoaXNBcmcpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IHRoaXMudmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrZm4uY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIHJlc3VsdC52YWx1ZSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NldERhdGEuaW5kZXhPZih2YWx1ZSkgPiAtMTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBpdGVyYXRvcl8xLlNoaW1JdGVyYXRvcih0aGlzLl9zZXREYXRhKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNldC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0RGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgU2V0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGl0ZXJhdG9yXzEuU2hpbUl0ZXJhdG9yKHRoaXMuX3NldERhdGEpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBTZXQucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGl0ZXJhdG9yXzEuU2hpbUl0ZXJhdG9yKHRoaXMuX3NldERhdGEpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gU2V0O1xyXG4gICAgICAgIH0oKSksXHJcbiAgICAgICAgX2FbU3ltYm9sLnNwZWNpZXNdID0gX2EsXHJcbiAgICAgICAgX2EpO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuU2V0O1xyXG52YXIgX2E7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vU2V0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9TZXQuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGhhc18xID0gcmVxdWlyZShcIi4vc3VwcG9ydC9oYXNcIik7XHJcbnZhciBnbG9iYWxfMSA9IHJlcXVpcmUoXCIuL2dsb2JhbFwiKTtcclxudmFyIHV0aWxfMSA9IHJlcXVpcmUoXCIuL3N1cHBvcnQvdXRpbFwiKTtcclxuZXhwb3J0cy5TeW1ib2wgPSBnbG9iYWxfMS5kZWZhdWx0LlN5bWJvbDtcclxuaWYgKCFoYXNfMS5kZWZhdWx0KCdlczYtc3ltYm9sJykpIHtcclxuICAgIC8qKlxyXG4gICAgICogVGhyb3dzIGlmIHRoZSB2YWx1ZSBpcyBub3QgYSBzeW1ib2wsIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIFNoaW1cclxuICAgICAqIEBwYXJhbSAge2FueX0gICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJuIHtzeW1ib2x9ICAgICAgIFJldHVybnMgdGhlIHN5bWJvbCBvciB0aHJvd3NcclxuICAgICAqL1xyXG4gICAgdmFyIHZhbGlkYXRlU3ltYm9sXzEgPSBmdW5jdGlvbiB2YWxpZGF0ZVN5bWJvbCh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IodmFsdWUgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9O1xyXG4gICAgdmFyIGRlZmluZVByb3BlcnRpZXNfMSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xyXG4gICAgdmFyIGRlZmluZVByb3BlcnR5XzEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbiAgICB2YXIgY3JlYXRlXzEgPSBPYmplY3QuY3JlYXRlO1xyXG4gICAgdmFyIG9ialByb3RvdHlwZV8xID0gT2JqZWN0LnByb3RvdHlwZTtcclxuICAgIHZhciBnbG9iYWxTeW1ib2xzXzEgPSB7fTtcclxuICAgIHZhciBnZXRTeW1ib2xOYW1lXzEgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlXzEobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkZXNjKSB7XHJcbiAgICAgICAgICAgIHZhciBwb3N0Zml4ID0gMDtcclxuICAgICAgICAgICAgdmFyIG5hbWU7XHJcbiAgICAgICAgICAgIHdoaWxlIChjcmVhdGVkW1N0cmluZyhkZXNjKSArIChwb3N0Zml4IHx8ICcnKV0pIHtcclxuICAgICAgICAgICAgICAgICsrcG9zdGZpeDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZXNjICs9IFN0cmluZyhwb3N0Zml4IHx8ICcnKTtcclxuICAgICAgICAgICAgY3JlYXRlZFtkZXNjXSA9IHRydWU7XHJcbiAgICAgICAgICAgIG5hbWUgPSAnQEAnICsgZGVzYztcclxuICAgICAgICAgICAgLy8gRklYTUU6IFRlbXBvcmFyeSBndWFyZCB1bnRpbCB0aGUgZHVwbGljYXRlIGV4ZWN1dGlvbiB3aGVuIHRlc3RpbmcgY2FuIGJlXHJcbiAgICAgICAgICAgIC8vIHBpbm5lZCBkb3duLlxyXG4gICAgICAgICAgICBpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqUHJvdG90eXBlXzEsIG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eV8xKG9ialByb3RvdHlwZV8xLCBuYW1lLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHlfMSh0aGlzLCBuYW1lLCB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKHZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCk7XHJcbiAgICB2YXIgSW50ZXJuYWxTeW1ib2xfMSA9IGZ1bmN0aW9uIFN5bWJvbChkZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgSW50ZXJuYWxTeW1ib2xfMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUeXBlRXJyb3I6IFN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU3ltYm9sKGRlc2NyaXB0aW9uKTtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLlN5bWJvbCA9IGdsb2JhbF8xLmRlZmF1bHQuU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKGRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBTeW1ib2wpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHlwZUVycm9yOiBTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHN5bSA9IE9iamVjdC5jcmVhdGUoSW50ZXJuYWxTeW1ib2xfMS5wcm90b3R5cGUpO1xyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKGRlc2NyaXB0aW9uKTtcclxuICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydGllc18xKHN5bSwge1xyXG4gICAgICAgICAgICBfX2Rlc2NyaXB0aW9uX186IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZGVzY3JpcHRpb24pLFxyXG4gICAgICAgICAgICBfX25hbWVfXzogdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcihnZXRTeW1ib2xOYW1lXzEoZGVzY3JpcHRpb24pKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIC8qIERlY29yYXRlIHRoZSBTeW1ib2wgZnVuY3Rpb24gd2l0aCB0aGUgYXBwcm9wcmlhdGUgcHJvcGVydGllcyAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHlfMShleHBvcnRzLlN5bWJvbCwgJ2ZvcicsIHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIGlmIChnbG9iYWxTeW1ib2xzXzFba2V5XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsU3ltYm9sc18xW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoZ2xvYmFsU3ltYm9sc18xW2tleV0gPSBleHBvcnRzLlN5bWJvbChTdHJpbmcoa2V5KSkpO1xyXG4gICAgfSkpO1xyXG4gICAgZGVmaW5lUHJvcGVydGllc18xKGV4cG9ydHMuU3ltYm9sLCB7XHJcbiAgICAgICAga2V5Rm9yOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGZ1bmN0aW9uIChzeW0pIHtcclxuICAgICAgICAgICAgdmFyIGtleTtcclxuICAgICAgICAgICAgdmFsaWRhdGVTeW1ib2xfMShzeW0pO1xyXG4gICAgICAgICAgICBmb3IgKGtleSBpbiBnbG9iYWxTeW1ib2xzXzEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxTeW1ib2xzXzFba2V5XSA9PT0gc3ltKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGhhc0luc3RhbmNlOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLmZvcignaGFzSW5zdGFuY2UnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBpc0NvbmNhdFNwcmVhZGFibGU6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZXhwb3J0cy5TeW1ib2wuZm9yKCdpc0NvbmNhdFNwcmVhZGFibGUnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBpdGVyYXRvcjogdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcihleHBvcnRzLlN5bWJvbC5mb3IoJ2l0ZXJhdG9yJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgbWF0Y2g6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZXhwb3J0cy5TeW1ib2wuZm9yKCdtYXRjaCcpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIG9ic2VydmFibGU6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZXhwb3J0cy5TeW1ib2wuZm9yKCdvYnNlcnZhYmxlJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgcmVwbGFjZTogdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcihleHBvcnRzLlN5bWJvbC5mb3IoJ3JlcGxhY2UnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBzZWFyY2g6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZXhwb3J0cy5TeW1ib2wuZm9yKCdzZWFyY2gnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICBzcGVjaWVzOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLmZvcignc3BlY2llcycpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHNwbGl0OiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLmZvcignc3BsaXQnKSwgZmFsc2UsIGZhbHNlKSxcclxuICAgICAgICB0b1ByaW1pdGl2ZTogdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcihleHBvcnRzLlN5bWJvbC5mb3IoJ3RvUHJpbWl0aXZlJyksIGZhbHNlLCBmYWxzZSksXHJcbiAgICAgICAgdG9TdHJpbmdUYWc6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZXhwb3J0cy5TeW1ib2wuZm9yKCd0b1N0cmluZ1RhZycpLCBmYWxzZSwgZmFsc2UpLFxyXG4gICAgICAgIHVuc2NvcGFibGVzOiB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLmZvcigndW5zY29wYWJsZXMnKSwgZmFsc2UsIGZhbHNlKVxyXG4gICAgfSk7XHJcbiAgICAvKiBEZWNvcmF0ZSB0aGUgSW50ZXJuYWxTeW1ib2wgb2JqZWN0ICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0aWVzXzEoSW50ZXJuYWxTeW1ib2xfMS5wcm90b3R5cGUsIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcjogdXRpbF8xLmdldFZhbHVlRGVzY3JpcHRvcihleHBvcnRzLlN5bWJvbCksXHJcbiAgICAgICAgdG9TdHJpbmc6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX25hbWVfXztcclxuICAgICAgICB9LCBmYWxzZSwgZmFsc2UpXHJcbiAgICB9KTtcclxuICAgIC8qIERlY29yYXRlIHRoZSBTeW1ib2wucHJvdG90eXBlICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0aWVzXzEoZXhwb3J0cy5TeW1ib2wucHJvdG90eXBlLCB7XHJcbiAgICAgICAgdG9TdHJpbmc6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ1N5bWJvbCAoJyArIHZhbGlkYXRlU3ltYm9sXzEodGhpcykuX19kZXNjcmlwdGlvbl9fICsgJyknO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHZhbHVlT2Y6IHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVTeW1ib2xfMSh0aGlzKTtcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICBkZWZpbmVQcm9wZXJ0eV8xKGV4cG9ydHMuU3ltYm9sLnByb3RvdHlwZSwgZXhwb3J0cy5TeW1ib2wudG9QcmltaXRpdmUsIHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZVN5bWJvbF8xKHRoaXMpO1xyXG4gICAgfSkpO1xyXG4gICAgZGVmaW5lUHJvcGVydHlfMShleHBvcnRzLlN5bWJvbC5wcm90b3R5cGUsIGV4cG9ydHMuU3ltYm9sLnRvU3RyaW5nVGFnLCB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKCdTeW1ib2wnLCBmYWxzZSwgZmFsc2UsIHRydWUpKTtcclxuICAgIGRlZmluZVByb3BlcnR5XzEoSW50ZXJuYWxTeW1ib2xfMS5wcm90b3R5cGUsIGV4cG9ydHMuU3ltYm9sLnRvUHJpbWl0aXZlLCB1dGlsXzEuZ2V0VmFsdWVEZXNjcmlwdG9yKGV4cG9ydHMuU3ltYm9sLnByb3RvdHlwZVtleHBvcnRzLlN5bWJvbC50b1ByaW1pdGl2ZV0sIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpO1xyXG4gICAgZGVmaW5lUHJvcGVydHlfMShJbnRlcm5hbFN5bWJvbF8xLnByb3RvdHlwZSwgZXhwb3J0cy5TeW1ib2wudG9TdHJpbmdUYWcsIHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZXhwb3J0cy5TeW1ib2wucHJvdG90eXBlW2V4cG9ydHMuU3ltYm9sLnRvU3RyaW5nVGFnXSwgZmFsc2UsIGZhbHNlLCB0cnVlKSk7XHJcbn1cclxuLyoqXHJcbiAqIEEgY3VzdG9tIGd1YXJkIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgaXMgYSBzeW1ib2wgb3Igbm90XHJcbiAqIEBwYXJhbSAge2FueX0gICAgICAgdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyBhIHN5bWJvbCBvciBub3RcclxuICogQHJldHVybiB7aXMgc3ltYm9sfSAgICAgICBSZXR1cm5zIHRydWUgaWYgYSBzeW1ib2wgb3Igbm90IChhbmQgbmFycm93cyB0aGUgdHlwZSBndWFyZClcclxuICovXHJcbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8IHZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSkgfHwgZmFsc2U7XHJcbn1cclxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xyXG4vKipcclxuICogRmlsbCBhbnkgbWlzc2luZyB3ZWxsIGtub3duIHN5bWJvbHMgaWYgdGhlIG5hdGl2ZSBTeW1ib2wgaXMgbWlzc2luZyB0aGVtXHJcbiAqL1xyXG5bXHJcbiAgICAnaGFzSW5zdGFuY2UnLFxyXG4gICAgJ2lzQ29uY2F0U3ByZWFkYWJsZScsXHJcbiAgICAnaXRlcmF0b3InLFxyXG4gICAgJ3NwZWNpZXMnLFxyXG4gICAgJ3JlcGxhY2UnLFxyXG4gICAgJ3NlYXJjaCcsXHJcbiAgICAnc3BsaXQnLFxyXG4gICAgJ21hdGNoJyxcclxuICAgICd0b1ByaW1pdGl2ZScsXHJcbiAgICAndG9TdHJpbmdUYWcnLFxyXG4gICAgJ3Vuc2NvcGFibGVzJyxcclxuICAgICdvYnNlcnZhYmxlJ1xyXG5dLmZvckVhY2goZnVuY3Rpb24gKHdlbGxLbm93bikge1xyXG4gICAgaWYgKCFleHBvcnRzLlN5bWJvbFt3ZWxsS25vd25dKSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuU3ltYm9sLCB3ZWxsS25vd24sIHV0aWxfMS5nZXRWYWx1ZURlc2NyaXB0b3IoZXhwb3J0cy5TeW1ib2wuZm9yKHdlbGxLbm93biksIGZhbHNlLCBmYWxzZSkpO1xyXG4gICAgfVxyXG59KTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5TeW1ib2w7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vU3ltYm9sLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9TeW1ib2wuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBnbG9iYWxfMSA9IHJlcXVpcmUoXCIuL2dsb2JhbFwiKTtcclxudmFyIGl0ZXJhdG9yXzEgPSByZXF1aXJlKFwiLi9pdGVyYXRvclwiKTtcclxudmFyIGhhc18xID0gcmVxdWlyZShcIi4vc3VwcG9ydC9oYXNcIik7XHJcbnJlcXVpcmUoXCIuL1N5bWJvbFwiKTtcclxuZXhwb3J0cy5XZWFrTWFwID0gZ2xvYmFsXzEuZGVmYXVsdC5XZWFrTWFwO1xyXG5pZiAoIWhhc18xLmRlZmF1bHQoJ2VzNi13ZWFrbWFwJykpIHtcclxuICAgIHZhciBERUxFVEVEXzEgPSB7fTtcclxuICAgIHZhciBnZXRVSURfMSA9IGZ1bmN0aW9uIGdldFVJRCgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwKTtcclxuICAgIH07XHJcbiAgICB2YXIgZ2VuZXJhdGVOYW1lXzEgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzdGFydElkID0gTWF0aC5mbG9vcihEYXRlLm5vdygpICUgMTAwMDAwMDAwKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gZ2VuZXJhdGVOYW1lKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ19fd20nICsgZ2V0VUlEXzEoKSArIChzdGFydElkKysgKyAnX18nKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKTtcclxuICAgIGV4cG9ydHMuV2Vha01hcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmdW5jdGlvbiBXZWFrTWFwKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdXZWFrTWFwJztcclxuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IGdlbmVyYXRlTmFtZV8xKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zyb3plbkVudHJpZXMgPSBbXTtcclxuICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3JfMS5pc0FycmF5TGlrZShpdGVyYWJsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gaXRlcmFibGVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGl0ZW1bMF0sIGl0ZW1bMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSB0c2xpYl8xLl9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSA9IHRzbGliXzEuX19yZWFkKGl0ZXJhYmxlXzFfMS52YWx1ZSwgMiksIGtleSA9IF9hWzBdLCB2YWx1ZSA9IF9hWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cclxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYiA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2IuY2FsbChpdGVyYWJsZV8xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlXzEsIF9iO1xyXG4gICAgICAgIH1cclxuICAgICAgICBXZWFrTWFwLnByb3RvdHlwZS5fZ2V0RnJvemVuRW50cnlJbmRleCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9mcm96ZW5FbnRyaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnJvemVuRW50cmllc1tpXS5rZXkgPT09IGtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcclxuICAgICAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEXzEpIHtcclxuICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gREVMRVRFRF8xO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGZyb3plbkluZGV4ID0gdGhpcy5fZ2V0RnJvemVuRW50cnlJbmRleChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoZnJvemVuSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZnJvemVuRW50cmllcy5zcGxpY2UoZnJvemVuSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgV2Vha01hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcclxuICAgICAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEXzEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZnJvemVuSW5kZXggPSB0aGlzLl9nZXRGcm96ZW5FbnRyeUluZGV4KGtleSk7XHJcbiAgICAgICAgICAgIGlmIChmcm96ZW5JbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJvemVuRW50cmllc1tmcm96ZW5JbmRleF0udmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIFdlYWtNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcclxuICAgICAgICAgICAgaWYgKEJvb2xlYW4oZW50cnkgJiYgZW50cnkua2V5ID09PSBrZXkgJiYgZW50cnkudmFsdWUgIT09IERFTEVURURfMSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBmcm96ZW5JbmRleCA9IHRoaXMuX2dldEZyb3plbkVudHJ5SW5kZXgoa2V5KTtcclxuICAgICAgICAgICAgaWYgKGZyb3plbkluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFdlYWtNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICgha2V5IHx8ICh0eXBlb2Yga2V5ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2Yga2V5ICE9PSAnZnVuY3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB2YWx1ZSB1c2VkIGFzIHdlYWsgbWFwIGtleScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGtleVt0aGlzLl9uYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFlbnRyeSB8fCBlbnRyeS5rZXkgIT09IGtleSkge1xyXG4gICAgICAgICAgICAgICAgZW50cnkgPSBPYmplY3QuY3JlYXRlKG51bGwsIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IHsgdmFsdWU6IGtleSB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChPYmplY3QuaXNGcm96ZW4oa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zyb3plbkVudHJpZXMucHVzaChlbnRyeSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoa2V5LCB0aGlzLl9uYW1lLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbnRyeVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIFdlYWtNYXA7XHJcbiAgICB9KCkpO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuV2Vha01hcDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9XZWFrTWFwLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9XZWFrTWFwLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgZ2xvYmFsXzEgPSByZXF1aXJlKFwiLi9nbG9iYWxcIik7XHJcbnZhciBpdGVyYXRvcl8xID0gcmVxdWlyZShcIi4vaXRlcmF0b3JcIik7XHJcbnZhciBudW1iZXJfMSA9IHJlcXVpcmUoXCIuL251bWJlclwiKTtcclxudmFyIGhhc18xID0gcmVxdWlyZShcIi4vc3VwcG9ydC9oYXNcIik7XHJcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi9zdXBwb3J0L3V0aWxcIik7XHJcbmlmIChoYXNfMS5kZWZhdWx0KCdlczYtYXJyYXknKSAmJiBoYXNfMS5kZWZhdWx0KCdlczYtYXJyYXktZmlsbCcpKSB7XHJcbiAgICBleHBvcnRzLmZyb20gPSBnbG9iYWxfMS5kZWZhdWx0LkFycmF5LmZyb207XHJcbiAgICBleHBvcnRzLm9mID0gZ2xvYmFsXzEuZGVmYXVsdC5BcnJheS5vZjtcclxuICAgIGV4cG9ydHMuY29weVdpdGhpbiA9IHV0aWxfMS53cmFwTmF0aXZlKGdsb2JhbF8xLmRlZmF1bHQuQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4pO1xyXG4gICAgZXhwb3J0cy5maWxsID0gdXRpbF8xLndyYXBOYXRpdmUoZ2xvYmFsXzEuZGVmYXVsdC5BcnJheS5wcm90b3R5cGUuZmlsbCk7XHJcbiAgICBleHBvcnRzLmZpbmQgPSB1dGlsXzEud3JhcE5hdGl2ZShnbG9iYWxfMS5kZWZhdWx0LkFycmF5LnByb3RvdHlwZS5maW5kKTtcclxuICAgIGV4cG9ydHMuZmluZEluZGV4ID0gdXRpbF8xLndyYXBOYXRpdmUoZ2xvYmFsXzEuZGVmYXVsdC5BcnJheS5wcm90b3R5cGUuZmluZEluZGV4KTtcclxufVxyXG5lbHNlIHtcclxuICAgIC8vIEl0IGlzIG9ubHkgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpL2lPUyB0aGF0IGhhdmUgYSBiYWQgZmlsbCBpbXBsZW1lbnRhdGlvbiBhbmQgc28gYXJlbid0IGluIHRoZSB3aWxkXHJcbiAgICAvLyBUbyBtYWtlIHRoaW5ncyBlYXNpZXIsIGlmIHRoZXJlIGlzIGEgYmFkIGZpbGwgaW1wbGVtZW50YXRpb24sIHRoZSB3aG9sZSBzZXQgb2YgZnVuY3Rpb25zIHdpbGwgYmUgZmlsbGVkXHJcbiAgICAvKipcclxuICAgICAqIEVuc3VyZXMgYSBub24tbmVnYXRpdmUsIG5vbi1pbmZpbml0ZSwgc2FmZSBpbnRlZ2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciB0byB2YWxpZGF0ZVxyXG4gICAgICogQHJldHVybiBBIHByb3BlciBsZW5ndGhcclxuICAgICAqL1xyXG4gICAgdmFyIHRvTGVuZ3RoXzEgPSBmdW5jdGlvbiB0b0xlbmd0aChsZW5ndGgpIHtcclxuICAgICAgICBpZiAoaXNOYU4obGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aCk7XHJcbiAgICAgICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcclxuICAgICAgICAgICAgbGVuZ3RoID0gTWF0aC5mbG9vcihsZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBFbnN1cmUgYSBub24tbmVnYXRpdmUsIHJlYWwsIHNhZmUgaW50ZWdlclxyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChsZW5ndGgsIDApLCBudW1iZXJfMS5NQVhfU0FGRV9JTlRFR0VSKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZyb20gRVM2IDcuMS40IFRvSW50ZWdlcigpXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgdG8gY29udmVydFxyXG4gICAgICogQHJldHVybiBBbiBpbnRlZ2VyXHJcbiAgICAgKi9cclxuICAgIHZhciB0b0ludGVnZXJfMSA9IGZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcclxuICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgPT09IDAgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAodmFsdWUgPiAwID8gMSA6IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnModmFsdWUpKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZXMgYW4gb2Zmc2V0IGFnYWluc3QgYSBnaXZlbiBsZW5ndGgsIHdyYXBwaW5nIGl0IGlmIG5lZ2F0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgb3JpZ2luYWwgb2Zmc2V0XHJcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSB0b3RhbCBsZW5ndGggdG8gbm9ybWFsaXplIGFnYWluc3RcclxuICAgICAqIEByZXR1cm4gSWYgbmVnYXRpdmUsIHByb3ZpZGUgYSBkaXN0YW5jZSBmcm9tIHRoZSBlbmQgKGxlbmd0aCk7IG90aGVyd2lzZSBwcm92aWRlIGEgZGlzdGFuY2UgZnJvbSAwXHJcbiAgICAgKi9cclxuICAgIHZhciBub3JtYWxpemVPZmZzZXRfMSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZU9mZnNldCh2YWx1ZSwgbGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgMCA/IE1hdGgubWF4KGxlbmd0aCArIHZhbHVlLCAwKSA6IE1hdGgubWluKHZhbHVlLCBsZW5ndGgpO1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMuZnJvbSA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLCBtYXBGdW5jdGlvbiwgdGhpc0FyZykge1xyXG4gICAgICAgIGlmIChhcnJheUxpa2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmcm9tOiByZXF1aXJlcyBhbiBhcnJheS1saWtlIG9iamVjdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWFwRnVuY3Rpb24gJiYgdGhpc0FyZykge1xyXG4gICAgICAgICAgICBtYXBGdW5jdGlvbiA9IG1hcEZ1bmN0aW9uLmJpbmQodGhpc0FyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lICovXHJcbiAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcclxuICAgICAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGhfMShhcnJheUxpa2UubGVuZ3RoKTtcclxuICAgICAgICAvLyBTdXBwb3J0IGV4dGVuc2lvblxyXG4gICAgICAgIHZhciBhcnJheSA9IHR5cGVvZiBDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdChuZXcgQ29uc3RydWN0b3IobGVuZ3RoKSkgOiBuZXcgQXJyYXkobGVuZ3RoKTtcclxuICAgICAgICBpZiAoIWl0ZXJhdG9yXzEuaXNBcnJheUxpa2UoYXJyYXlMaWtlKSAmJiAhaXRlcmF0b3JfMS5pc0l0ZXJhYmxlKGFycmF5TGlrZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IGFuZCB0aGUgbm9ybWFsaXplZCBsZW5ndGggaXMgMCwganVzdCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuIHRoaXMgcHJldmVudHMgYSBwcm9ibGVtXHJcbiAgICAgICAgLy8gd2l0aCB0aGUgaXRlcmF0aW9uIG9uIElFIHdoZW4gdXNpbmcgYSBOYU4gYXJyYXkgbGVuZ3RoLlxyXG4gICAgICAgIGlmIChpdGVyYXRvcl8xLmlzQXJyYXlMaWtlKGFycmF5TGlrZSkpIHtcclxuICAgICAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlMaWtlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IG1hcEZ1bmN0aW9uID8gbWFwRnVuY3Rpb24oYXJyYXlMaWtlW2ldLCBpKSA6IGFycmF5TGlrZVtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYXJyYXlMaWtlXzEgPSB0c2xpYl8xLl9fdmFsdWVzKGFycmF5TGlrZSksIGFycmF5TGlrZV8xXzEgPSBhcnJheUxpa2VfMS5uZXh0KCk7ICFhcnJheUxpa2VfMV8xLmRvbmU7IGFycmF5TGlrZV8xXzEgPSBhcnJheUxpa2VfMS5uZXh0KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhcnJheUxpa2VfMV8xLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2ldID0gbWFwRnVuY3Rpb24gPyBtYXBGdW5jdGlvbih2YWx1ZSwgaSkgOiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJheUxpa2VfMV8xICYmICFhcnJheUxpa2VfMV8xLmRvbmUgJiYgKF9hID0gYXJyYXlMaWtlXzEucmV0dXJuKSkgX2EuY2FsbChhcnJheUxpa2VfMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFycmF5TGlrZS5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBhcnJheS5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnJheTtcclxuICAgICAgICB2YXIgZV8xLCBfYTtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLm9mID0gZnVuY3Rpb24gb2YoKSB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgaXRlbXNbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGl0ZW1zKTtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmNvcHlXaXRoaW4gPSBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgb2Zmc2V0LCBzdGFydCwgZW5kKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvcHlXaXRoaW46IHRhcmdldCBtdXN0IGJlIGFuIGFycmF5LWxpa2Ugb2JqZWN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aF8xKHRhcmdldC5sZW5ndGgpO1xyXG4gICAgICAgIG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldF8xKHRvSW50ZWdlcl8xKG9mZnNldCksIGxlbmd0aCk7XHJcbiAgICAgICAgc3RhcnQgPSBub3JtYWxpemVPZmZzZXRfMSh0b0ludGVnZXJfMShzdGFydCksIGxlbmd0aCk7XHJcbiAgICAgICAgZW5kID0gbm9ybWFsaXplT2Zmc2V0XzEoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXJfMShlbmQpLCBsZW5ndGgpO1xyXG4gICAgICAgIHZhciBjb3VudCA9IE1hdGgubWluKGVuZCAtIHN0YXJ0LCBsZW5ndGggLSBvZmZzZXQpO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSAxO1xyXG4gICAgICAgIGlmIChvZmZzZXQgPiBzdGFydCAmJiBvZmZzZXQgPCBzdGFydCArIGNvdW50KSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xO1xyXG4gICAgICAgICAgICBzdGFydCArPSBjb3VudCAtIDE7XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBjb3VudCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChjb3VudCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0IGluIHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W29mZnNldF0gPSB0YXJnZXRbc3RhcnRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRhcmdldFtvZmZzZXRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBkaXJlY3Rpb247XHJcbiAgICAgICAgICAgIHN0YXJ0ICs9IGRpcmVjdGlvbjtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmZpbGwgPSBmdW5jdGlvbiBmaWxsKHRhcmdldCwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcclxuICAgICAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGhfMSh0YXJnZXQubGVuZ3RoKTtcclxuICAgICAgICB2YXIgaSA9IG5vcm1hbGl6ZU9mZnNldF8xKHRvSW50ZWdlcl8xKHN0YXJ0KSwgbGVuZ3RoKTtcclxuICAgICAgICBlbmQgPSBub3JtYWxpemVPZmZzZXRfMShlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcl8xKGVuZCksIGxlbmd0aCk7XHJcbiAgICAgICAgd2hpbGUgKGkgPCBlbmQpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W2krK10gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmZpbmQgPSBmdW5jdGlvbiBmaW5kKHRhcmdldCwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcclxuICAgICAgICB2YXIgaW5kZXggPSBleHBvcnRzLmZpbmRJbmRleCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKTtcclxuICAgICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gdGFyZ2V0W2luZGV4XSA6IHVuZGVmaW5lZDtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmZpbmRJbmRleCA9IGZ1bmN0aW9uIGZpbmRJbmRleCh0YXJnZXQsIGNhbGxiYWNrLCB0aGlzQXJnKSB7XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoXzEodGFyZ2V0Lmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmaW5kOiBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzQXJnKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzQXJnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sodGFyZ2V0W2ldLCBpLCB0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9O1xyXG59XHJcbmlmIChoYXNfMS5kZWZhdWx0KCdlczctYXJyYXknKSkge1xyXG4gICAgZXhwb3J0cy5pbmNsdWRlcyA9IHV0aWxfMS53cmFwTmF0aXZlKGdsb2JhbF8xLmRlZmF1bHQuQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKTtcclxufVxyXG5lbHNlIHtcclxuICAgIC8qKlxyXG4gICAgICogRW5zdXJlcyBhIG5vbi1uZWdhdGl2ZSwgbm9uLWluZmluaXRlLCBzYWZlIGludGVnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIHRvIHZhbGlkYXRlXHJcbiAgICAgKiBAcmV0dXJuIEEgcHJvcGVyIGxlbmd0aFxyXG4gICAgICovXHJcbiAgICB2YXIgdG9MZW5ndGhfMiA9IGZ1bmN0aW9uIHRvTGVuZ3RoKGxlbmd0aCkge1xyXG4gICAgICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpO1xyXG4gICAgICAgIGlmIChpc05hTihsZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xyXG4gICAgICAgICAgICBsZW5ndGggPSBNYXRoLmZsb29yKGxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSBhIG5vbi1uZWdhdGl2ZSwgcmVhbCwgc2FmZSBpbnRlZ2VyXHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KGxlbmd0aCwgMCksIG51bWJlcl8xLk1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh0YXJnZXQsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCkge1xyXG4gICAgICAgIGlmIChmcm9tSW5kZXggPT09IHZvaWQgMCkgeyBmcm9tSW5kZXggPSAwOyB9XHJcbiAgICAgICAgdmFyIGxlbiA9IHRvTGVuZ3RoXzIodGFyZ2V0Lmxlbmd0aCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGZyb21JbmRleDsgaSA8IGxlbjsgKytpKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50RWxlbWVudCA9IHRhcmdldFtpXTtcclxuICAgICAgICAgICAgaWYgKHNlYXJjaEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50IHx8XHJcbiAgICAgICAgICAgICAgICAoc2VhcmNoRWxlbWVudCAhPT0gc2VhcmNoRWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gY3VycmVudEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2FycmF5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBnbG9iYWxPYmplY3QgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gZ2xvYmFsIHNwZWMgZGVmaW5lcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdCBjYWxsZWQgJ2dsb2JhbCdcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcclxuICAgICAgICAvLyBgZ2xvYmFsYCBpcyBhbHNvIGRlZmluZWQgaW4gTm9kZUpTXHJcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gd2luZG93IGlzIGRlZmluZWQgaW4gYnJvd3NlcnNcclxuICAgICAgICByZXR1cm4gd2luZG93O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gc2VsZiBpcyBkZWZpbmVkIGluIFdlYldvcmtlcnNcclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxufSkoKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsT2JqZWN0O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vZ2xvYmFsLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnJlcXVpcmUoXCIuL1N5bWJvbFwiKTtcclxudmFyIHN0cmluZ18xID0gcmVxdWlyZShcIi4vc3RyaW5nXCIpO1xyXG52YXIgc3RhdGljRG9uZSA9IHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xyXG4vKipcclxuICogQSBjbGFzcyB0aGF0IF9zaGltc18gYW4gaXRlcmF0b3IgaW50ZXJmYWNlIG9uIGFycmF5IGxpa2Ugb2JqZWN0cy5cclxuICovXHJcbnZhciBTaGltSXRlcmF0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBTaGltSXRlcmF0b3IobGlzdCkge1xyXG4gICAgICAgIHRoaXMuX25leHRJbmRleCA9IC0xO1xyXG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGxpc3QpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25hdGl2ZUl0ZXJhdG9yID0gbGlzdFtTeW1ib2wuaXRlcmF0b3JdKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0ID0gbGlzdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB0aGUgbmV4dCBpdGVyYXRpb24gcmVzdWx0IGZvciB0aGUgSXRlcmF0b3JcclxuICAgICAqL1xyXG4gICAgU2hpbUl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9uYXRpdmVJdGVyYXRvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmF0aXZlSXRlcmF0b3IubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuX2xpc3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRpY0RvbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgrK3RoaXMuX25leHRJbmRleCA8IHRoaXMuX2xpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBkb25lOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9saXN0W3RoaXMuX25leHRJbmRleF1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0YXRpY0RvbmU7XHJcbiAgICB9O1xyXG4gICAgU2hpbUl0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBTaGltSXRlcmF0b3I7XHJcbn0oKSk7XHJcbmV4cG9ydHMuU2hpbUl0ZXJhdG9yID0gU2hpbUl0ZXJhdG9yO1xyXG4vKipcclxuICogQSB0eXBlIGd1YXJkIGZvciBjaGVja2luZyBpZiBzb21ldGhpbmcgaGFzIGFuIEl0ZXJhYmxlIGludGVyZmFjZVxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHR5cGUgZ3VhcmQgYWdhaW5zdFxyXG4gKi9cclxuZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xyXG59XHJcbmV4cG9ydHMuaXNJdGVyYWJsZSA9IGlzSXRlcmFibGU7XHJcbi8qKlxyXG4gKiBBIHR5cGUgZ3VhcmQgZm9yIGNoZWNraW5nIGlmIHNvbWV0aGluZyBpcyBBcnJheUxpa2VcclxuICpcclxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0eXBlIGd1YXJkIGFnYWluc3RcclxuICovXHJcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcic7XHJcbn1cclxuZXhwb3J0cy5pc0FycmF5TGlrZSA9IGlzQXJyYXlMaWtlO1xyXG4vKipcclxuICogUmV0dXJucyB0aGUgaXRlcmF0b3IgZm9yIGFuIG9iamVjdFxyXG4gKlxyXG4gKiBAcGFyYW0gaXRlcmFibGUgVGhlIGl0ZXJhYmxlIG9iamVjdCB0byByZXR1cm4gdGhlIGl0ZXJhdG9yIGZvclxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0KGl0ZXJhYmxlKSB7XHJcbiAgICBpZiAoaXNJdGVyYWJsZShpdGVyYWJsZSkpIHtcclxuICAgICAgICByZXR1cm4gaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaGltSXRlcmF0b3IoaXRlcmFibGUpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZ2V0ID0gZ2V0O1xyXG4vKipcclxuICogU2hpbXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYGZvciAuLi4gb2ZgIGJsb2Nrc1xyXG4gKlxyXG4gKiBAcGFyYW0gaXRlcmFibGUgVGhlIG9iamVjdCB0aGUgcHJvdmlkZXMgYW4gaW50ZXJhdG9yIGludGVyZmFjZVxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIGl0ZW0gb2YgdGhlIGl0ZXJhYmxlXHJcbiAqIEBwYXJhbSB0aGlzQXJnIE9wdGlvbmFsIHNjb3BlIHRvIHBhc3MgdGhlIGNhbGxiYWNrXHJcbiAqL1xyXG5mdW5jdGlvbiBmb3JPZihpdGVyYWJsZSwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcclxuICAgIHZhciBicm9rZW4gPSBmYWxzZTtcclxuICAgIGZ1bmN0aW9uIGRvQnJlYWsoKSB7XHJcbiAgICAgICAgYnJva2VuID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8qIFdlIG5lZWQgdG8gaGFuZGxlIGl0ZXJhdGlvbiBvZiBkb3VibGUgYnl0ZSBzdHJpbmdzIHByb3Blcmx5ICovXHJcbiAgICBpZiAoaXNBcnJheUxpa2UoaXRlcmFibGUpICYmIHR5cGVvZiBpdGVyYWJsZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB2YXIgbCA9IGl0ZXJhYmxlLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7ICsraSkge1xyXG4gICAgICAgICAgICB2YXIgY2hhciA9IGl0ZXJhYmxlW2ldO1xyXG4gICAgICAgICAgICBpZiAoaSArIDEgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb2RlID49IHN0cmluZ18xLkhJR0hfU1VSUk9HQVRFX01JTiAmJiBjb2RlIDw9IHN0cmluZ18xLkhJR0hfU1VSUk9HQVRFX01BWCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYXIgKz0gaXRlcmFibGVbKytpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIGNoYXIsIGl0ZXJhYmxlLCBkb0JyZWFrKTtcclxuICAgICAgICAgICAgaWYgKGJyb2tlbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gZ2V0KGl0ZXJhYmxlKTtcclxuICAgICAgICBpZiAoaXRlcmF0b3IpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcclxuICAgICAgICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIGl0ZXJhYmxlLCBkb0JyZWFrKTtcclxuICAgICAgICAgICAgICAgIGlmIChicm9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5mb3JPZiA9IGZvck9mO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL2l0ZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9pdGVyYXRvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgZ2xvYmFsXzEgPSByZXF1aXJlKFwiLi9nbG9iYWxcIik7XHJcbi8qKlxyXG4gKiBUaGUgc21hbGxlc3QgaW50ZXJ2YWwgYmV0d2VlbiB0d28gcmVwcmVzZW50YWJsZSBudW1iZXJzLlxyXG4gKi9cclxuZXhwb3J0cy5FUFNJTE9OID0gMTtcclxuLyoqXHJcbiAqIFRoZSBtYXhpbXVtIHNhZmUgaW50ZWdlciBpbiBKYXZhU2NyaXB0XHJcbiAqL1xyXG5leHBvcnRzLk1BWF9TQUZFX0lOVEVHRVIgPSBNYXRoLnBvdygyLCA1MykgLSAxO1xyXG4vKipcclxuICogVGhlIG1pbmltdW0gc2FmZSBpbnRlZ2VyIGluIEphdmFTY3JpcHRcclxuICovXHJcbmV4cG9ydHMuTUlOX1NBRkVfSU5URUdFUiA9IC1leHBvcnRzLk1BWF9TQUZFX0lOVEVHRVI7XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBOYU4gd2l0aG91dCBjb2Vyc2lvbi5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XHJcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgTmFOLCBmYWxzZSBpZiBpdCBpcyBub3RcclxuICovXHJcbmZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBnbG9iYWxfMS5kZWZhdWx0LmlzTmFOKHZhbHVlKTtcclxufVxyXG5leHBvcnRzLmlzTmFOID0gaXNOYU47XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhIGZpbml0ZSBudW1iZXIgd2l0aG91dCBjb2Vyc2lvbi5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XHJcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgZmluaXRlLCBmYWxzZSBpZiBpdCBpcyBub3RcclxuICovXHJcbmZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBnbG9iYWxfMS5kZWZhdWx0LmlzRmluaXRlKHZhbHVlKTtcclxufVxyXG5leHBvcnRzLmlzRmluaXRlID0gaXNGaW5pdGU7XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3RcclxuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLCBmYWxzZSBpZiBpdCBpcyBub3RcclxuICovXHJcbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XHJcbn1cclxuZXhwb3J0cy5pc0ludGVnZXIgPSBpc0ludGVnZXI7XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyIHRoYXQgaXMgJ3NhZmUsJyBtZWFuaW5nOlxyXG4gKiAgIDEuIGl0IGNhbiBiZSBleHByZXNzZWQgYXMgYW4gSUVFRS03NTQgZG91YmxlIHByZWNpc2lvbiBudW1iZXJcclxuICogICAyLiBpdCBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgdG8gYSBtYXRoZW1hdGljYWwgaW50ZWdlciwgbWVhbmluZyBpdHNcclxuICogICAgICBJRUVFLTc1NCByZXByZXNlbnRhdGlvbiBjYW5ub3QgYmUgdGhlIHJlc3VsdCBvZiByb3VuZGluZyBhbnkgb3RoZXJcclxuICogICAgICBpbnRlZ2VyIHRvIGZpdCB0aGUgSUVFRS03NTQgcmVwcmVzZW50YXRpb25cclxuICpcclxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0XHJcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgZmFsc2UgaWYgaXQgaXMgbm90XHJcbiAqL1xyXG5mdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gaXNJbnRlZ2VyKHZhbHVlKSAmJiBNYXRoLmFicyh2YWx1ZSkgPD0gZXhwb3J0cy5NQVhfU0FGRV9JTlRFR0VSO1xyXG59XHJcbmV4cG9ydHMuaXNTYWZlSW50ZWdlciA9IGlzU2FmZUludGVnZXI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vbnVtYmVyLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9udW1iZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGdsb2JhbF8xID0gcmVxdWlyZShcIi4vZ2xvYmFsXCIpO1xyXG52YXIgaGFzXzEgPSByZXF1aXJlKFwiLi9zdXBwb3J0L2hhc1wiKTtcclxudmFyIFN5bWJvbF8xID0gcmVxdWlyZShcIi4vU3ltYm9sXCIpO1xyXG5pZiAoaGFzXzEuZGVmYXVsdCgnZXM2LW9iamVjdCcpKSB7XHJcbiAgICB2YXIgZ2xvYmFsT2JqZWN0ID0gZ2xvYmFsXzEuZGVmYXVsdC5PYmplY3Q7XHJcbiAgICBleHBvcnRzLmFzc2lnbiA9IGdsb2JhbE9iamVjdC5hc3NpZ247XHJcbiAgICBleHBvcnRzLmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XHJcbiAgICBleHBvcnRzLmdldE93blByb3BlcnR5TmFtZXMgPSBnbG9iYWxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcclxuICAgIGV4cG9ydHMuZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2xvYmFsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcclxuICAgIGV4cG9ydHMuaXMgPSBnbG9iYWxPYmplY3QuaXM7XHJcbiAgICBleHBvcnRzLmtleXMgPSBnbG9iYWxPYmplY3Qua2V5cztcclxufVxyXG5lbHNlIHtcclxuICAgIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uIHN5bWJvbEF3YXJlS2V5cyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG8pLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7IHJldHVybiAhQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpOyB9KTtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcclxuICAgICAgICB2YXIgc291cmNlcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHNvdXJjZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBUeXBlRXJyb3IgaWYgdW5kZWZpbmVkIG9yIG51bGxcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0byA9IE9iamVjdCh0YXJnZXQpO1xyXG4gICAgICAgIHNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAobmV4dFNvdXJjZSkge1xyXG4gICAgICAgICAgICBpZiAobmV4dFNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gU2tpcCBvdmVyIGlmIHVuZGVmaW5lZCBvciBudWxsXHJcbiAgICAgICAgICAgICAgICBleHBvcnRzLmtleXMobmV4dFNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAobmV4dEtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHByb3ApIHtcclxuICAgICAgICBpZiAoU3ltYm9sXzEuaXNTeW1ib2wocHJvcCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBwcm9wKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZXhwb3J0cy5nZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7IHJldHVybiAhQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpOyB9KTtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gQm9vbGVhbihrZXkubWF0Y2goL15AQC4rLykpOyB9KVxyXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIFN5bWJvbC5mb3Ioa2V5LnN1YnN0cmluZygyKSk7IH0pO1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMuaXMgPSBmdW5jdGlvbiBpcyh2YWx1ZTEsIHZhbHVlMikge1xyXG4gICAgICAgIGlmICh2YWx1ZTEgPT09IHZhbHVlMikge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUxICE9PSAwIHx8IDEgLyB2YWx1ZTEgPT09IDEgLyB2YWx1ZTI7IC8vIC0wXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTEgIT09IHZhbHVlMSAmJiB2YWx1ZTIgIT09IHZhbHVlMjsgLy8gTmFOXHJcbiAgICB9O1xyXG59XHJcbmlmIChoYXNfMS5kZWZhdWx0KCdlczIwMTctb2JqZWN0JykpIHtcclxuICAgIHZhciBnbG9iYWxPYmplY3QgPSBnbG9iYWxfMS5kZWZhdWx0Lk9iamVjdDtcclxuICAgIGV4cG9ydHMuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9IGdsb2JhbE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xyXG4gICAgZXhwb3J0cy5lbnRyaWVzID0gZ2xvYmFsT2JqZWN0LmVudHJpZXM7XHJcbiAgICBleHBvcnRzLnZhbHVlcyA9IGdsb2JhbE9iamVjdC52YWx1ZXM7XHJcbn1cclxuZWxzZSB7XHJcbiAgICBleHBvcnRzLmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG8pIHtcclxuICAgICAgICByZXR1cm4gZXhwb3J0cy5nZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXMsIGtleSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1trZXldID0gZXhwb3J0cy5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobywga2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgICAgIH0sIHt9KTtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmVudHJpZXMgPSBmdW5jdGlvbiBlbnRyaWVzKG8pIHtcclxuICAgICAgICByZXR1cm4gZXhwb3J0cy5rZXlzKG8pLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBba2V5LCBvW2tleV1dOyB9KTtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLnZhbHVlcyA9IGZ1bmN0aW9uIHZhbHVlcyhvKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMua2V5cyhvKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gb1trZXldOyB9KTtcclxuICAgIH07XHJcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL29iamVjdC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIGdsb2JhbF8xID0gcmVxdWlyZShcIi4vZ2xvYmFsXCIpO1xyXG52YXIgaGFzXzEgPSByZXF1aXJlKFwiLi9zdXBwb3J0L2hhc1wiKTtcclxudmFyIHV0aWxfMSA9IHJlcXVpcmUoXCIuL3N1cHBvcnQvdXRpbFwiKTtcclxuLyoqXHJcbiAqIFRoZSBtaW5pbXVtIGxvY2F0aW9uIG9mIGhpZ2ggc3Vycm9nYXRlc1xyXG4gKi9cclxuZXhwb3J0cy5ISUdIX1NVUlJPR0FURV9NSU4gPSAweGQ4MDA7XHJcbi8qKlxyXG4gKiBUaGUgbWF4aW11bSBsb2NhdGlvbiBvZiBoaWdoIHN1cnJvZ2F0ZXNcclxuICovXHJcbmV4cG9ydHMuSElHSF9TVVJST0dBVEVfTUFYID0gMHhkYmZmO1xyXG4vKipcclxuICogVGhlIG1pbmltdW0gbG9jYXRpb24gb2YgbG93IHN1cnJvZ2F0ZXNcclxuICovXHJcbmV4cG9ydHMuTE9XX1NVUlJPR0FURV9NSU4gPSAweGRjMDA7XHJcbi8qKlxyXG4gKiBUaGUgbWF4aW11bSBsb2NhdGlvbiBvZiBsb3cgc3Vycm9nYXRlc1xyXG4gKi9cclxuZXhwb3J0cy5MT1dfU1VSUk9HQVRFX01BWCA9IDB4ZGZmZjtcclxuaWYgKGhhc18xLmRlZmF1bHQoJ2VzNi1zdHJpbmcnKSAmJiBoYXNfMS5kZWZhdWx0KCdlczYtc3RyaW5nLXJhdycpKSB7XHJcbiAgICBleHBvcnRzLmZyb21Db2RlUG9pbnQgPSBnbG9iYWxfMS5kZWZhdWx0LlN0cmluZy5mcm9tQ29kZVBvaW50O1xyXG4gICAgZXhwb3J0cy5yYXcgPSBnbG9iYWxfMS5kZWZhdWx0LlN0cmluZy5yYXc7XHJcbiAgICBleHBvcnRzLmNvZGVQb2ludEF0ID0gdXRpbF8xLndyYXBOYXRpdmUoZ2xvYmFsXzEuZGVmYXVsdC5TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KTtcclxuICAgIGV4cG9ydHMuZW5kc1dpdGggPSB1dGlsXzEud3JhcE5hdGl2ZShnbG9iYWxfMS5kZWZhdWx0LlN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgpO1xyXG4gICAgZXhwb3J0cy5pbmNsdWRlcyA9IHV0aWxfMS53cmFwTmF0aXZlKGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyk7XHJcbiAgICBleHBvcnRzLm5vcm1hbGl6ZSA9IHV0aWxfMS53cmFwTmF0aXZlKGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nLnByb3RvdHlwZS5ub3JtYWxpemUpO1xyXG4gICAgZXhwb3J0cy5yZXBlYXQgPSB1dGlsXzEud3JhcE5hdGl2ZShnbG9iYWxfMS5kZWZhdWx0LlN0cmluZy5wcm90b3R5cGUucmVwZWF0KTtcclxuICAgIGV4cG9ydHMuc3RhcnRzV2l0aCA9IHV0aWxfMS53cmFwTmF0aXZlKGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKTtcclxufVxyXG5lbHNlIHtcclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdGVzIHRoYXQgdGV4dCBpcyBkZWZpbmVkLCBhbmQgbm9ybWFsaXplcyBwb3NpdGlvbiAoYmFzZWQgb24gdGhlIGdpdmVuIGRlZmF1bHQgaWYgdGhlIGlucHV0IGlzIE5hTikuXHJcbiAgICAgKiBVc2VkIGJ5IHN0YXJ0c1dpdGgsIGluY2x1ZGVzLCBhbmQgZW5kc1dpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBOb3JtYWxpemVkIHBvc2l0aW9uLlxyXG4gICAgICovXHJcbiAgICB2YXIgbm9ybWFsaXplU3Vic3RyaW5nQXJnc18xID0gZnVuY3Rpb24gKG5hbWUsIHRleHQsIHNlYXJjaCwgcG9zaXRpb24sIGlzRW5kKSB7XHJcbiAgICAgICAgaWYgKGlzRW5kID09PSB2b2lkIDApIHsgaXNFbmQgPSBmYWxzZTsgfVxyXG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLicgKyBuYW1lICsgJyByZXF1aXJlcyBhIHZhbGlkIHN0cmluZyB0byBzZWFyY2ggYWdhaW5zdC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRleHQubGVuZ3RoO1xyXG4gICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gIT09IHBvc2l0aW9uID8gKGlzRW5kID8gbGVuZ3RoIDogMCkgOiBwb3NpdGlvbjtcclxuICAgICAgICByZXR1cm4gW3RleHQsIFN0cmluZyhzZWFyY2gpLCBNYXRoLm1pbihNYXRoLm1heChwb3NpdGlvbiwgMCksIGxlbmd0aCldO1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMuZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoKSB7XHJcbiAgICAgICAgdmFyIGNvZGVQb2ludHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBjb2RlUG9pbnRzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcuZnJvbUNvZGVQb2ludFxyXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xyXG4gICAgICAgIGlmICghbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XHJcbiAgICAgICAgdmFyIE1BWF9TSVpFID0gMHg0MDAwO1xyXG4gICAgICAgIHZhciBjb2RlVW5pdHMgPSBbXTtcclxuICAgICAgICB2YXIgaW5kZXggPSAtMTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IE51bWJlcihhcmd1bWVudHNbaW5kZXhdKTtcclxuICAgICAgICAgICAgLy8gQ29kZSBwb2ludHMgbXVzdCBiZSBmaW5pdGUgaW50ZWdlcnMgd2l0aGluIHRoZSB2YWxpZCByYW5nZVxyXG4gICAgICAgICAgICB2YXIgaXNWYWxpZCA9IGlzRmluaXRlKGNvZGVQb2ludCkgJiYgTWF0aC5mbG9vcihjb2RlUG9pbnQpID09PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50ID49IDAgJiYgY29kZVBvaW50IDw9IDB4MTBmZmZmO1xyXG4gICAgICAgICAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoJ3N0cmluZy5mcm9tQ29kZVBvaW50OiBJbnZhbGlkIGNvZGUgcG9pbnQgJyArIGNvZGVQb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweGZmZmYpIHtcclxuICAgICAgICAgICAgICAgIC8vIEJNUCBjb2RlIHBvaW50XHJcbiAgICAgICAgICAgICAgICBjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQXN0cmFsIGNvZGUgcG9pbnQ7IHNwbGl0IGluIHN1cnJvZ2F0ZSBoYWx2ZXNcclxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxyXG4gICAgICAgICAgICAgICAgY29kZVBvaW50IC09IDB4MTAwMDA7XHJcbiAgICAgICAgICAgICAgICB2YXIgaGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgZXhwb3J0cy5ISUdIX1NVUlJPR0FURV9NSU47XHJcbiAgICAgICAgICAgICAgICB2YXIgbG93U3Vycm9nYXRlID0gY29kZVBvaW50ICUgMHg0MDAgKyBleHBvcnRzLkxPV19TVVJST0dBVEVfTUlOO1xyXG4gICAgICAgICAgICAgICAgY29kZVVuaXRzLnB1c2goaGlnaFN1cnJvZ2F0ZSwgbG93U3Vycm9nYXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaW5kZXggKyAxID09PSBsZW5ndGggfHwgY29kZVVuaXRzLmxlbmd0aCA+IE1BWF9TSVpFKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cyk7XHJcbiAgICAgICAgICAgICAgICBjb2RlVW5pdHMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMucmF3ID0gZnVuY3Rpb24gcmF3KGNhbGxTaXRlKSB7XHJcbiAgICAgICAgdmFyIHN1YnN0aXR1dGlvbnMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBzdWJzdGl0dXRpb25zW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmF3U3RyaW5ncyA9IGNhbGxTaXRlLnJhdztcclxuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgdmFyIG51bVN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zLmxlbmd0aDtcclxuICAgICAgICBpZiAoY2FsbFNpdGUgPT0gbnVsbCB8fCBjYWxsU2l0ZS5yYXcgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmF3IHJlcXVpcmVzIGEgdmFsaWQgY2FsbFNpdGUgb2JqZWN0IHdpdGggYSByYXcgdmFsdWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aF8xID0gcmF3U3RyaW5ncy5sZW5ndGg7IGkgPCBsZW5ndGhfMTsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSByYXdTdHJpbmdzW2ldICsgKGkgPCBudW1TdWJzdGl0dXRpb25zICYmIGkgPCBsZW5ndGhfMSAtIDEgPyBzdWJzdGl0dXRpb25zW2ldIDogJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMuY29kZVBvaW50QXQgPSBmdW5jdGlvbiBjb2RlUG9pbnRBdCh0ZXh0LCBwb3NpdGlvbikge1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gdm9pZCAwKSB7IHBvc2l0aW9uID0gMDsgfVxyXG4gICAgICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0XHJcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcuY29kZVBvaW50QXQgcmVxdXJpZXMgYSB2YWxpZCBzdHJpbmcuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcclxuICAgICAgICBpZiAocG9zaXRpb24gIT09IHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBsZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gR2V0IHRoZSBmaXJzdCBjb2RlIHVuaXRcclxuICAgICAgICB2YXIgZmlyc3QgPSB0ZXh0LmNoYXJDb2RlQXQocG9zaXRpb24pO1xyXG4gICAgICAgIGlmIChmaXJzdCA+PSBleHBvcnRzLkhJR0hfU1VSUk9HQVRFX01JTiAmJiBmaXJzdCA8PSBleHBvcnRzLkhJR0hfU1VSUk9HQVRFX01BWCAmJiBsZW5ndGggPiBwb3NpdGlvbiArIDEpIHtcclxuICAgICAgICAgICAgLy8gU3RhcnQgb2YgYSBzdXJyb2dhdGUgcGFpciAoaGlnaCBzdXJyb2dhdGUgYW5kIHRoZXJlIGlzIGEgbmV4dCBjb2RlIHVuaXQpOyBjaGVjayBmb3IgbG93IHN1cnJvZ2F0ZVxyXG4gICAgICAgICAgICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcclxuICAgICAgICAgICAgdmFyIHNlY29uZCA9IHRleHQuY2hhckNvZGVBdChwb3NpdGlvbiArIDEpO1xyXG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IGV4cG9ydHMuTE9XX1NVUlJPR0FURV9NSU4gJiYgc2Vjb25kIDw9IGV4cG9ydHMuTE9XX1NVUlJPR0FURV9NQVgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoZmlyc3QgLSBleHBvcnRzLkhJR0hfU1VSUk9HQVRFX01JTikgKiAweDQwMCArIHNlY29uZCAtIGV4cG9ydHMuTE9XX1NVUlJPR0FURV9NSU4gKyAweDEwMDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaXJzdDtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLmVuZHNXaXRoID0gZnVuY3Rpb24gZW5kc1dpdGgodGV4dCwgc2VhcmNoLCBlbmRQb3NpdGlvbikge1xyXG4gICAgICAgIGlmIChlbmRQb3NpdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9hID0gdHNsaWJfMS5fX3JlYWQobm9ybWFsaXplU3Vic3RyaW5nQXJnc18xKCdlbmRzV2l0aCcsIHRleHQsIHNlYXJjaCwgZW5kUG9zaXRpb24sIHRydWUpLCAzKSwgdGV4dCA9IF9hWzBdLCBzZWFyY2ggPSBfYVsxXSwgZW5kUG9zaXRpb24gPSBfYVsyXTtcclxuICAgICAgICB2YXIgc3RhcnQgPSBlbmRQb3NpdGlvbiAtIHNlYXJjaC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmRQb3NpdGlvbikgPT09IHNlYXJjaDtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICB9O1xyXG4gICAgZXhwb3J0cy5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzKHRleHQsIHNlYXJjaCwgcG9zaXRpb24pIHtcclxuICAgICAgICBpZiAocG9zaXRpb24gPT09IHZvaWQgMCkgeyBwb3NpdGlvbiA9IDA7IH1cclxuICAgICAgICBfYSA9IHRzbGliXzEuX19yZWFkKG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3NfMSgnaW5jbHVkZXMnLCB0ZXh0LCBzZWFyY2gsIHBvc2l0aW9uKSwgMyksIHRleHQgPSBfYVswXSwgc2VhcmNoID0gX2FbMV0sIHBvc2l0aW9uID0gX2FbMl07XHJcbiAgICAgICAgcmV0dXJuIHRleHQuaW5kZXhPZihzZWFyY2gsIHBvc2l0aW9uKSAhPT0gLTE7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgfTtcclxuICAgIGV4cG9ydHMucmVwZWF0ID0gZnVuY3Rpb24gcmVwZWF0KHRleHQsIGNvdW50KSB7XHJcbiAgICAgICAgaWYgKGNvdW50ID09PSB2b2lkIDApIHsgY291bnQgPSAwOyB9XHJcbiAgICAgICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUucmVwZWF0XHJcbiAgICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcucmVwZWF0IHJlcXVpcmVzIGEgdmFsaWQgc3RyaW5nLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY291bnQgIT09IGNvdW50KSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgd2hpbGUgKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCAlIDIpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB0ZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHRleHQgKz0gdGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb3VudCA+Pj0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLnN0YXJ0c1dpdGggPSBmdW5jdGlvbiBzdGFydHNXaXRoKHRleHQsIHNlYXJjaCwgcG9zaXRpb24pIHtcclxuICAgICAgICBpZiAocG9zaXRpb24gPT09IHZvaWQgMCkgeyBwb3NpdGlvbiA9IDA7IH1cclxuICAgICAgICBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoKTtcclxuICAgICAgICBfYSA9IHRzbGliXzEuX19yZWFkKG5vcm1hbGl6ZVN1YnN0cmluZ0FyZ3NfMSgnc3RhcnRzV2l0aCcsIHRleHQsIHNlYXJjaCwgcG9zaXRpb24pLCAzKSwgdGV4dCA9IF9hWzBdLCBzZWFyY2ggPSBfYVsxXSwgcG9zaXRpb24gPSBfYVsyXTtcclxuICAgICAgICB2YXIgZW5kID0gcG9zaXRpb24gKyBzZWFyY2gubGVuZ3RoO1xyXG4gICAgICAgIGlmIChlbmQgPiB0ZXh0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKHBvc2l0aW9uLCBlbmQpID09PSBzZWFyY2g7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgfTtcclxufVxyXG5pZiAoaGFzXzEuZGVmYXVsdCgnZXMyMDE3LXN0cmluZycpKSB7XHJcbiAgICBleHBvcnRzLnBhZEVuZCA9IHV0aWxfMS53cmFwTmF0aXZlKGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nLnByb3RvdHlwZS5wYWRFbmQpO1xyXG4gICAgZXhwb3J0cy5wYWRTdGFydCA9IHV0aWxfMS53cmFwTmF0aXZlKGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCk7XHJcbn1cclxuZWxzZSB7XHJcbiAgICBleHBvcnRzLnBhZEVuZCA9IGZ1bmN0aW9uIHBhZEVuZCh0ZXh0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcpIHtcclxuICAgICAgICBpZiAoZmlsbFN0cmluZyA9PT0gdm9pZCAwKSB7IGZpbGxTdHJpbmcgPSAnICc7IH1cclxuICAgICAgICBpZiAodGV4dCA9PT0gbnVsbCB8fCB0ZXh0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nLnJlcGVhdCByZXF1aXJlcyBhIHZhbGlkIHN0cmluZy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3N0cmluZy5wYWRFbmQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSBudWxsIHx8IG1heExlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IG1heExlbmd0aCA8IDApIHtcclxuICAgICAgICAgICAgbWF4TGVuZ3RoID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHN0clRleHQgPSBTdHJpbmcodGV4dCk7XHJcbiAgICAgICAgdmFyIHBhZGRpbmcgPSBtYXhMZW5ndGggLSBzdHJUZXh0Lmxlbmd0aDtcclxuICAgICAgICBpZiAocGFkZGluZyA+IDApIHtcclxuICAgICAgICAgICAgc3RyVGV4dCArPVxyXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5yZXBlYXQoZmlsbFN0cmluZywgTWF0aC5mbG9vcihwYWRkaW5nIC8gZmlsbFN0cmluZy5sZW5ndGgpKSArXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0cmluZy5zbGljZSgwLCBwYWRkaW5nICUgZmlsbFN0cmluZy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyVGV4dDtcclxuICAgIH07XHJcbiAgICBleHBvcnRzLnBhZFN0YXJ0ID0gZnVuY3Rpb24gcGFkU3RhcnQodGV4dCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGZpbGxTdHJpbmcgPT09IHZvaWQgMCkgeyBmaWxsU3RyaW5nID0gJyAnOyB9XHJcbiAgICAgICAgaWYgKHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZy5yZXBlYXQgcmVxdWlyZXMgYSB2YWxpZCBzdHJpbmcuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzdHJpbmcucGFkU3RhcnQgcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgZmluaXRlIGNvdW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSBudWxsIHx8IG1heExlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IG1heExlbmd0aCA8IDApIHtcclxuICAgICAgICAgICAgbWF4TGVuZ3RoID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHN0clRleHQgPSBTdHJpbmcodGV4dCk7XHJcbiAgICAgICAgdmFyIHBhZGRpbmcgPSBtYXhMZW5ndGggLSBzdHJUZXh0Lmxlbmd0aDtcclxuICAgICAgICBpZiAocGFkZGluZyA+IDApIHtcclxuICAgICAgICAgICAgc3RyVGV4dCA9XHJcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlcGVhdChmaWxsU3RyaW5nLCBNYXRoLmZsb29yKHBhZGRpbmcgLyBmaWxsU3RyaW5nLmxlbmd0aCkpICtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsU3RyaW5nLnNsaWNlKDAsIHBhZGRpbmcgJSBmaWxsU3RyaW5nLmxlbmd0aCkgK1xyXG4gICAgICAgICAgICAgICAgICAgIHN0clRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHJUZXh0O1xyXG4gICAgfTtcclxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N0cmluZy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3RyaW5nLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgaGFzXzEgPSByZXF1aXJlKFwiLi4vLi4vaGFzL2hhc1wiKTtcclxudmFyIGdsb2JhbF8xID0gcmVxdWlyZShcIi4uL2dsb2JhbFwiKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gaGFzXzEuZGVmYXVsdDtcclxudHNsaWJfMS5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4uLy4uL2hhcy9oYXNcIiksIGV4cG9ydHMpO1xyXG4vKiBFQ01BU2NyaXB0IDYgYW5kIDcgRmVhdHVyZXMgKi9cclxuLyogQXJyYXkgKi9cclxuaGFzXzEuYWRkKCdlczYtYXJyYXknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gKFsnZnJvbScsICdvZiddLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiBnbG9iYWxfMS5kZWZhdWx0LkFycmF5OyB9KSAmJlxyXG4gICAgICAgIFsnZmluZEluZGV4JywgJ2ZpbmQnLCAnY29weVdpdGhpbiddLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiBnbG9iYWxfMS5kZWZhdWx0LkFycmF5LnByb3RvdHlwZTsgfSkpO1xyXG59LCB0cnVlKTtcclxuaGFzXzEuYWRkKCdlczYtYXJyYXktZmlsbCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICgnZmlsbCcgaW4gZ2xvYmFsXzEuZGVmYXVsdC5BcnJheS5wcm90b3R5cGUpIHtcclxuICAgICAgICAvKiBTb21lIHZlcnNpb25zIG9mIFNhZmFyaSBkbyBub3QgcHJvcGVybHkgaW1wbGVtZW50IHRoaXMgKi9cclxuICAgICAgICByZXR1cm4gWzFdLmZpbGwoOSwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKVswXSA9PT0gMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbmhhc18xLmFkZCgnZXM3LWFycmF5JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJ2luY2x1ZGVzJyBpbiBnbG9iYWxfMS5kZWZhdWx0LkFycmF5LnByb3RvdHlwZTsgfSwgdHJ1ZSk7XHJcbi8qIE1hcCAqL1xyXG5oYXNfMS5hZGQoJ2VzNi1tYXAnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodHlwZW9mIGdsb2JhbF8xLmRlZmF1bHQuTWFwID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgLypcclxuICAgIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgTWFwIGZ1bmN0aW9uYWxpdHlcclxuICAgIFdlIHdyYXAgdGhpcyBpbiBhIHRyeS9jYXRjaCBiZWNhdXNlIHNvbWV0aW1lcyB0aGUgTWFwIGNvbnN0cnVjdG9yIGV4aXN0cywgYnV0IGRvZXMgbm90XHJcbiAgICB0YWtlIGFyZ3VtZW50cyAoaU9TIDguNClcclxuICAgICAqL1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBtYXAgPSBuZXcgZ2xvYmFsXzEuZGVmYXVsdC5NYXAoW1swLCAxXV0pO1xyXG4gICAgICAgICAgICByZXR1cm4gKG1hcC5oYXMoMCkgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXAua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgaGFzXzEuZGVmYXVsdCgnZXM2LXN5bWJvbCcpICYmXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWFwLnZhbHVlcyA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIG1hcC5lbnRyaWVzID09PSAnZnVuY3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IG5vdCB0ZXN0aW5nIG9uIGlPUyBhdCB0aGUgbW9tZW50ICovXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG4vKiBNYXRoICovXHJcbmhhc18xLmFkZCgnZXM2LW1hdGgnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgICdjbHozMicsXHJcbiAgICAgICAgJ3NpZ24nLFxyXG4gICAgICAgICdsb2cxMCcsXHJcbiAgICAgICAgJ2xvZzInLFxyXG4gICAgICAgICdsb2cxcCcsXHJcbiAgICAgICAgJ2V4cG0xJyxcclxuICAgICAgICAnY29zaCcsXHJcbiAgICAgICAgJ3NpbmgnLFxyXG4gICAgICAgICd0YW5oJyxcclxuICAgICAgICAnYWNvc2gnLFxyXG4gICAgICAgICdhc2luaCcsXHJcbiAgICAgICAgJ2F0YW5oJyxcclxuICAgICAgICAndHJ1bmMnLFxyXG4gICAgICAgICdmcm91bmQnLFxyXG4gICAgICAgICdjYnJ0JyxcclxuICAgICAgICAnaHlwb3QnXHJcbiAgICBdLmV2ZXJ5KGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5NYXRoW25hbWVdID09PSAnZnVuY3Rpb24nOyB9KTtcclxufSwgdHJ1ZSk7XHJcbmhhc18xLmFkZCgnZXM2LW1hdGgtaW11bCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICgnaW11bCcgaW4gZ2xvYmFsXzEuZGVmYXVsdC5NYXRoKSB7XHJcbiAgICAgICAgLyogU29tZSB2ZXJzaW9ucyBvZiBTYWZhcmkgb24gaW9zIGRvIG5vdCBwcm9wZXJseSBpbXBsZW1lbnQgdGhpcyAqL1xyXG4gICAgICAgIHJldHVybiBNYXRoLmltdWwoMHhmZmZmZmZmZiwgNSkgPT09IC01O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59LCB0cnVlKTtcclxuLyogT2JqZWN0ICovXHJcbmhhc18xLmFkZCgnZXM2LW9iamVjdCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAoaGFzXzEuZGVmYXVsdCgnZXM2LXN5bWJvbCcpICYmXHJcbiAgICAgICAgWydhc3NpZ24nLCAnaXMnLCAnZ2V0T3duUHJvcGVydHlTeW1ib2xzJywgJ3NldFByb3RvdHlwZU9mJ10uZXZlcnkoZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIHR5cGVvZiBnbG9iYWxfMS5kZWZhdWx0Lk9iamVjdFtuYW1lXSA9PT0gJ2Z1bmN0aW9uJzsgfSkpO1xyXG59LCB0cnVlKTtcclxuaGFzXzEuYWRkKCdlczIwMTctb2JqZWN0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIFsndmFsdWVzJywgJ2VudHJpZXMnLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyddLmV2ZXJ5KGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5PYmplY3RbbmFtZV0gPT09ICdmdW5jdGlvbic7IH0pO1xyXG59LCB0cnVlKTtcclxuLyogT2JzZXJ2YWJsZSAqL1xyXG5oYXNfMS5hZGQoJ2VzLW9ic2VydmFibGUnLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5PYnNlcnZhYmxlICE9PSAndW5kZWZpbmVkJzsgfSwgdHJ1ZSk7XHJcbi8qIFByb21pc2UgKi9cclxuaGFzXzEuYWRkKCdlczYtcHJvbWlzZScsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVvZiBnbG9iYWxfMS5kZWZhdWx0LlByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIGhhc18xLmRlZmF1bHQoJ2VzNi1zeW1ib2wnKTsgfSwgdHJ1ZSk7XHJcbi8qIFNldCAqL1xyXG5oYXNfMS5hZGQoJ2VzNi1zZXQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodHlwZW9mIGdsb2JhbF8xLmRlZmF1bHQuU2V0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgLyogSUUxMSBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIGFyZSBtaXNzaW5nIGNyaXRpY2FsIEVTNiBTZXQgZnVuY3Rpb25hbGl0eSAqL1xyXG4gICAgICAgIHZhciBzZXQgPSBuZXcgZ2xvYmFsXzEuZGVmYXVsdC5TZXQoWzFdKTtcclxuICAgICAgICByZXR1cm4gc2V0LmhhcygxKSAmJiAna2V5cycgaW4gc2V0ICYmIHR5cGVvZiBzZXQua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBoYXNfMS5kZWZhdWx0KCdlczYtc3ltYm9sJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG4vKiBTdHJpbmcgKi9cclxuaGFzXzEuYWRkKCdlczYtc3RyaW5nJywgZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIChbXHJcbiAgICAgICAgLyogc3RhdGljIG1ldGhvZHMgKi9cclxuICAgICAgICAnZnJvbUNvZGVQb2ludCdcclxuICAgIF0uZXZlcnkoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gdHlwZW9mIGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nW2tleV0gPT09ICdmdW5jdGlvbic7IH0pICYmXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgICAvKiBpbnN0YW5jZSBtZXRob2RzICovXHJcbiAgICAgICAgICAgICdjb2RlUG9pbnRBdCcsXHJcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxyXG4gICAgICAgICAgICAncmVwZWF0JyxcclxuICAgICAgICAgICAgJ3N0YXJ0c1dpdGgnLFxyXG4gICAgICAgICAgICAnZW5kc1dpdGgnLFxyXG4gICAgICAgICAgICAnaW5jbHVkZXMnXHJcbiAgICAgICAgXS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5TdHJpbmcucHJvdG90eXBlW2tleV0gPT09ICdmdW5jdGlvbic7IH0pKTtcclxufSwgdHJ1ZSk7XHJcbmhhc18xLmFkZCgnZXM2LXN0cmluZy1yYXcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBnZXRDYWxsU2l0ZShjYWxsU2l0ZSkge1xyXG4gICAgICAgIHZhciBzdWJzdGl0dXRpb25zID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgc3Vic3RpdHV0aW9uc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRzbGliXzEuX19zcHJlYWQoY2FsbFNpdGUpO1xyXG4gICAgICAgIHJlc3VsdC5yYXcgPSBjYWxsU2l0ZS5yYXc7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGlmICgncmF3JyBpbiBnbG9iYWxfMS5kZWZhdWx0LlN0cmluZykge1xyXG4gICAgICAgIHZhciBiID0gMTtcclxuICAgICAgICB2YXIgY2FsbFNpdGUgPSBnZXRDYWxsU2l0ZSh0ZW1wbGF0ZU9iamVjdF8xIHx8ICh0ZW1wbGF0ZU9iamVjdF8xID0gdHNsaWJfMS5fX21ha2VUZW1wbGF0ZU9iamVjdChbXCJhXFxuXCIsIFwiXCJdLCBbXCJhXFxcXG5cIiwgXCJcIl0pKSwgYik7XHJcbiAgICAgICAgY2FsbFNpdGUucmF3ID0gWydhXFxcXG4nXTtcclxuICAgICAgICB2YXIgc3VwcG9ydHNUcnVuYyA9IGdsb2JhbF8xLmRlZmF1bHQuU3RyaW5nLnJhdyhjYWxsU2l0ZSwgNDIpID09PSAnYTpcXFxcbic7XHJcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzVHJ1bmM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG5oYXNfMS5hZGQoJ2VzMjAxNy1zdHJpbmcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gWydwYWRTdGFydCcsICdwYWRFbmQnXS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5TdHJpbmcucHJvdG90eXBlW2tleV0gPT09ICdmdW5jdGlvbic7IH0pO1xyXG59LCB0cnVlKTtcclxuLyogU3ltYm9sICovXHJcbmhhc18xLmFkZCgnZXM2LXN5bWJvbCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVvZiBnbG9iYWxfMS5kZWZhdWx0LlN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbCgpID09PSAnc3ltYm9sJzsgfSwgdHJ1ZSk7XHJcbi8qIFdlYWtNYXAgKi9cclxuaGFzXzEuYWRkKCdlczYtd2Vha21hcCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5XZWFrTWFwICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qIElFMTEgYW5kIG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaSBhcmUgbWlzc2luZyBjcml0aWNhbCBFUzYgTWFwIGZ1bmN0aW9uYWxpdHkgKi9cclxuICAgICAgICB2YXIga2V5MSA9IHt9O1xyXG4gICAgICAgIHZhciBrZXkyID0ge307XHJcbiAgICAgICAgdmFyIG1hcCA9IG5ldyBnbG9iYWxfMS5kZWZhdWx0LldlYWtNYXAoW1trZXkxLCAxXV0pO1xyXG4gICAgICAgIE9iamVjdC5mcmVlemUoa2V5MSk7XHJcbiAgICAgICAgcmV0dXJuIG1hcC5nZXQoa2V5MSkgPT09IDEgJiYgbWFwLnNldChrZXkyLCAyKSA9PT0gbWFwICYmIGhhc18xLmRlZmF1bHQoJ2VzNi1zeW1ib2wnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSwgdHJ1ZSk7XHJcbi8qIE1pc2NlbGxhbmVvdXMgZmVhdHVyZXMgKi9cclxuaGFzXzEuYWRkKCdtaWNyb3Rhc2tzJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gaGFzXzEuZGVmYXVsdCgnZXM2LXByb21pc2UnKSB8fCBoYXNfMS5kZWZhdWx0KCdob3N0LW5vZGUnKSB8fCBoYXNfMS5kZWZhdWx0KCdkb20tbXV0YXRpb25vYnNlcnZlcicpOyB9LCB0cnVlKTtcclxuaGFzXzEuYWRkKCdwb3N0bWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIElmIHdpbmRvdyBpcyB1bmRlZmluZWQsIGFuZCB3ZSBoYXZlIHBvc3RNZXNzYWdlLCBpdCBwcm9iYWJseSBtZWFucyB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIuIFdlYiB3b3JrZXJzIGhhdmVcclxuICAgIC8vIHBvc3QgbWVzc2FnZSBidXQgaXQgZG9lc24ndCB3b3JrIGhvdyB3ZSBleHBlY3QgaXQgdG8sIHNvIGl0J3MgYmVzdCBqdXN0IHRvIHByZXRlbmQgaXQgZG9lc24ndCBleGlzdC5cclxuICAgIHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC53aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBnbG9iYWxfMS5kZWZhdWx0LnBvc3RNZXNzYWdlID09PSAnZnVuY3Rpb24nO1xyXG59LCB0cnVlKTtcclxuaGFzXzEuYWRkKCdyYWYnLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlb2YgZ2xvYmFsXzEuZGVmYXVsdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbic7IH0sIHRydWUpO1xyXG5oYXNfMS5hZGQoJ3NldGltbWVkaWF0ZScsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVvZiBnbG9iYWxfMS5kZWZhdWx0LnNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCc7IH0sIHRydWUpO1xyXG4vKiBET00gRmVhdHVyZXMgKi9cclxuaGFzXzEuYWRkKCdkb20tbXV0YXRpb25vYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChoYXNfMS5kZWZhdWx0KCdob3N0LWJyb3dzZXInKSAmJiBCb29sZWFuKGdsb2JhbF8xLmRlZmF1bHQuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWxfMS5kZWZhdWx0LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIpKSB7XHJcbiAgICAgICAgLy8gSUUxMSBoYXMgYW4gdW5yZWxpYWJsZSBNdXRhdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uIHdoZXJlIHNldFByb3BlcnR5KCkgZG9lcyBub3RcclxuICAgICAgICAvLyBnZW5lcmF0ZSBhIG11dGF0aW9uIGV2ZW50LCBvYnNlcnZlcnMgY2FuIGNyYXNoLCBhbmQgdGhlIHF1ZXVlIGRvZXMgbm90IGRyYWluXHJcbiAgICAgICAgLy8gcmVsaWFibHkuIFRoZSBmb2xsb3dpbmcgZmVhdHVyZSB0ZXN0IHdhcyBhZGFwdGVkIGZyb21cclxuICAgICAgICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90MTBrby80YWNlYjhjNzE2ODFmZGIyNzVlMzNlZmU1ZTU3NmIxNFxyXG4gICAgICAgIHZhciBleGFtcGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cclxuICAgICAgICB2YXIgSG9zdE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWxfMS5kZWZhdWx0Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsXzEuZGVmYXVsdC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xyXG4gICAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBIb3N0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7IH0pO1xyXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZXhhbXBsZSwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xyXG4gICAgICAgIGV4YW1wbGUuc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnYmxvY2snKTtcclxuICAgICAgICByZXR1cm4gQm9vbGVhbihvYnNlcnZlci50YWtlUmVjb3JkcygpLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn0sIHRydWUpO1xyXG5oYXNfMS5hZGQoJ2RvbS13ZWJhbmltYXRpb24nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBoYXNfMS5kZWZhdWx0KCdob3N0LWJyb3dzZXInKSAmJiBnbG9iYWxfMS5kZWZhdWx0LkFuaW1hdGlvbiAhPT0gdW5kZWZpbmVkICYmIGdsb2JhbF8xLmRlZmF1bHQuS2V5ZnJhbWVFZmZlY3QgIT09IHVuZGVmaW5lZDsgfSwgdHJ1ZSk7XHJcbnZhciB0ZW1wbGF0ZU9iamVjdF8xO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay9zaGltL3N1cHBvcnQvaGFzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L2hhcy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgZ2xvYmFsXzEgPSByZXF1aXJlKFwiLi4vZ2xvYmFsXCIpO1xyXG52YXIgaGFzXzEgPSByZXF1aXJlKFwiLi9oYXNcIik7XHJcbmZ1bmN0aW9uIGV4ZWN1dGVUYXNrKGl0ZW0pIHtcclxuICAgIGlmIChpdGVtICYmIGl0ZW0uaXNBY3RpdmUgJiYgaXRlbS5jYWxsYmFjaykge1xyXG4gICAgICAgIGl0ZW0uY2FsbGJhY2soKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBnZXRRdWV1ZUhhbmRsZShpdGVtLCBkZXN0cnVjdG9yKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24gKCkgeyB9O1xyXG4gICAgICAgICAgICBpdGVtLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGl0ZW0uY2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoZGVzdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG52YXIgY2hlY2tNaWNyb1Rhc2tRdWV1ZTtcclxudmFyIG1pY3JvVGFza3M7XHJcbi8qKlxyXG4gKiBTY2hlZHVsZXMgYSBjYWxsYmFjayB0byB0aGUgbWFjcm90YXNrIHF1ZXVlLlxyXG4gKlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIHRvIGJlIHF1ZXVlZCBhbmQgbGF0ZXIgZXhlY3V0ZWQuXHJcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGEgYGRlc3Ryb3lgIG1ldGhvZCB0aGF0LCB3aGVuIGNhbGxlZCwgcHJldmVudHMgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnJvbSBleGVjdXRpbmcuXHJcbiAqL1xyXG5leHBvcnRzLnF1ZXVlVGFzayA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZGVzdHJ1Y3RvcjtcclxuICAgIHZhciBlbnF1ZXVlO1xyXG4gICAgLy8gU2luY2UgdGhlIElFIGltcGxlbWVudGF0aW9uIG9mIGBzZXRJbW1lZGlhdGVgIGlzIG5vdCBmbGF3bGVzcywgd2Ugd2lsbCB0ZXN0IGZvciBgcG9zdE1lc3NhZ2VgIGZpcnN0LlxyXG4gICAgaWYgKGhhc18xLmRlZmF1bHQoJ3Bvc3RtZXNzYWdlJykpIHtcclxuICAgICAgICB2YXIgcXVldWVfMSA9IFtdO1xyXG4gICAgICAgIGdsb2JhbF8xLmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAvLyBDb25maXJtIHRoYXQgdGhlIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGN1cnJlbnQgd2luZG93IGFuZCBieSB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uXHJcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbF8xLmRlZmF1bHQgJiYgZXZlbnQuZGF0YSA9PT0gJ2Rvam8tcXVldWUtbWVzc2FnZScpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXVlXzEubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVRhc2socXVldWVfMS5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBxdWV1ZV8xLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIGdsb2JhbF8xLmRlZmF1bHQucG9zdE1lc3NhZ2UoJ2Rvam8tcXVldWUtbWVzc2FnZScsICcqJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGhhc18xLmRlZmF1bHQoJ3NldGltbWVkaWF0ZScpKSB7XHJcbiAgICAgICAgZGVzdHJ1Y3RvciA9IGdsb2JhbF8xLmRlZmF1bHQuY2xlYXJJbW1lZGlhdGU7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXRJbW1lZGlhdGUoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGRlc3RydWN0b3IgPSBnbG9iYWxfMS5kZWZhdWx0LmNsZWFyVGltZW91dDtcclxuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZXhlY3V0ZVRhc2suYmluZChudWxsLCBpdGVtKSwgMCk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHF1ZXVlVGFzayhjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBpdGVtID0ge1xyXG4gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgaWQgPSBlbnF1ZXVlKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtLCBkZXN0cnVjdG9yICYmXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGRlc3RydWN0b3IoaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxyXG4gICAgcmV0dXJuIGhhc18xLmRlZmF1bHQoJ21pY3JvdGFza3MnKVxyXG4gICAgICAgID8gcXVldWVUYXNrXHJcbiAgICAgICAgOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY2hlY2tNaWNyb1Rhc2tRdWV1ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcXVldWVUYXNrKGNhbGxiYWNrKTtcclxuICAgICAgICB9O1xyXG59KSgpO1xyXG4vLyBXaGVuIG5vIG1lY2hhbmlzbSBmb3IgcmVnaXN0ZXJpbmcgbWljcm90YXNrcyBpcyBleHBvc2VkIGJ5IHRoZSBlbnZpcm9ubWVudCwgbWljcm90YXNrcyB3aWxsXHJcbi8vIGJlIHF1ZXVlZCBhbmQgdGhlbiBleGVjdXRlZCBpbiBhIHNpbmdsZSBtYWNyb3Rhc2sgYmVmb3JlIHRoZSBvdGhlciBtYWNyb3Rhc2tzIGFyZSBleGVjdXRlZC5cclxuaWYgKCFoYXNfMS5kZWZhdWx0KCdtaWNyb3Rhc2tzJykpIHtcclxuICAgIHZhciBpc01pY3JvVGFza1F1ZXVlZF8xID0gZmFsc2U7XHJcbiAgICBtaWNyb1Rhc2tzID0gW107XHJcbiAgICBjaGVja01pY3JvVGFza1F1ZXVlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghaXNNaWNyb1Rhc2tRdWV1ZWRfMSkge1xyXG4gICAgICAgICAgICBpc01pY3JvVGFza1F1ZXVlZF8xID0gdHJ1ZTtcclxuICAgICAgICAgICAgZXhwb3J0cy5xdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaXNNaWNyb1Rhc2tRdWV1ZWRfMSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1pY3JvVGFza3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChpdGVtID0gbWljcm9UYXNrcy5zaGlmdCgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlVGFzayhpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIFNjaGVkdWxlcyBhbiBhbmltYXRpb24gdGFzayB3aXRoIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpZiBpdCBleGlzdHMsIG9yIHdpdGggYHF1ZXVlVGFza2Agb3RoZXJ3aXNlLlxyXG4gKlxyXG4gKiBTaW5jZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUncyBiZWhhdmlvciBkb2VzIG5vdCBtYXRjaCB0aGF0IGV4cGVjdGVkIGZyb20gYHF1ZXVlVGFza2AsIGl0IGlzIG5vdCB1c2VkIHRoZXJlLlxyXG4gKiBIb3dldmVyLCBhdCB0aW1lcyBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGRlbGVnYXRlIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZTsgaGVuY2UgdGhlIGZvbGxvd2luZyBtZXRob2QuXHJcbiAqXHJcbiAqIEBwYXJhbSBjYWxsYmFjayB0aGUgZnVuY3Rpb24gdG8gYmUgcXVldWVkIGFuZCBsYXRlciBleGVjdXRlZC5cclxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cclxuICovXHJcbmV4cG9ydHMucXVldWVBbmltYXRpb25UYXNrID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghaGFzXzEuZGVmYXVsdCgncmFmJykpIHtcclxuICAgICAgICByZXR1cm4gZXhwb3J0cy5xdWV1ZVRhc2s7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBxdWV1ZUFuaW1hdGlvblRhc2soY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgaXRlbSA9IHtcclxuICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSkpO1xyXG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIFRPRE86IFVzZSBhc3BlY3QuYmVmb3JlIHdoZW4gaXQgaXMgYXZhaWxhYmxlLlxyXG4gICAgcmV0dXJuIGhhc18xLmRlZmF1bHQoJ21pY3JvdGFza3MnKVxyXG4gICAgICAgID8gcXVldWVBbmltYXRpb25UYXNrXHJcbiAgICAgICAgOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY2hlY2tNaWNyb1Rhc2tRdWV1ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcXVldWVBbmltYXRpb25UYXNrKGNhbGxiYWNrKTtcclxuICAgICAgICB9O1xyXG59KSgpO1xyXG4vKipcclxuICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gdGhlIG1pY3JvdGFzayBxdWV1ZS5cclxuICpcclxuICogQW55IGNhbGxiYWNrcyByZWdpc3RlcmVkIHdpdGggYHF1ZXVlTWljcm9UYXNrYCB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgbmV4dCBtYWNyb3Rhc2suIElmIG5vIG5hdGl2ZVxyXG4gKiBtZWNoYW5pc20gZm9yIHNjaGVkdWxpbmcgbWFjcm90YXNrcyBpcyBleHBvc2VkLCB0aGVuIGFueSBjYWxsYmFja3Mgd2lsbCBiZSBmaXJlZCBiZWZvcmUgYW55IG1hY3JvdGFza1xyXG4gKiByZWdpc3RlcmVkIHdpdGggYHF1ZXVlVGFza2Agb3IgYHF1ZXVlQW5pbWF0aW9uVGFza2AuXHJcbiAqXHJcbiAqIEBwYXJhbSBjYWxsYmFjayB0aGUgZnVuY3Rpb24gdG8gYmUgcXVldWVkIGFuZCBsYXRlciBleGVjdXRlZC5cclxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYSBgZGVzdHJveWAgbWV0aG9kIHRoYXQsIHdoZW4gY2FsbGVkLCBwcmV2ZW50cyB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmcm9tIGV4ZWN1dGluZy5cclxuICovXHJcbmV4cG9ydHMucXVldWVNaWNyb1Rhc2sgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGVucXVldWU7XHJcbiAgICBpZiAoaGFzXzEuZGVmYXVsdCgnaG9zdC1ub2RlJykpIHtcclxuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgZ2xvYmFsXzEuZGVmYXVsdC5wcm9jZXNzLm5leHRUaWNrKGV4ZWN1dGVUYXNrLmJpbmQobnVsbCwgaXRlbSkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChoYXNfMS5kZWZhdWx0KCdlczYtcHJvbWlzZScpKSB7XHJcbiAgICAgICAgZW5xdWV1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbF8xLmRlZmF1bHQuUHJvbWlzZS5yZXNvbHZlKGl0ZW0pLnRoZW4oZXhlY3V0ZVRhc2spO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChoYXNfMS5kZWZhdWx0KCdkb20tbXV0YXRpb25vYnNlcnZlcicpKSB7XHJcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cclxuICAgICAgICB2YXIgSG9zdE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWxfMS5kZWZhdWx0Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsXzEuZGVmYXVsdC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xyXG4gICAgICAgIHZhciBub2RlXzEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICB2YXIgcXVldWVfMiA9IFtdO1xyXG4gICAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBIb3N0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChxdWV1ZV8yLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gcXVldWVfMi5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5pc0FjdGl2ZSAmJiBpdGVtLmNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlXzEsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbnF1ZXVlID0gZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgcXVldWVfMi5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBub2RlXzEuc2V0QXR0cmlidXRlKCdxdWV1ZVN0YXR1cycsICcxJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGVucXVldWUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBjaGVja01pY3JvVGFza1F1ZXVlKCk7XHJcbiAgICAgICAgICAgIG1pY3JvVGFza3MucHVzaChpdGVtKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBpdGVtID0ge1xyXG4gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXHJcbiAgICAgICAgfTtcclxuICAgICAgICBlbnF1ZXVlKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiBnZXRRdWV1ZUhhbmRsZShpdGVtKTtcclxuICAgIH07XHJcbn0pKCk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC9xdWV1ZS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC9xdWV1ZS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4vKipcclxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgdmFsdWUgcHJvcGVydHkgZGVzY3JpcHRvclxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgICAgICAgIFRoZSB2YWx1ZSB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBzaG91bGQgYmUgc2V0IHRvXHJcbiAqIEBwYXJhbSBlbnVtZXJhYmxlICAgSWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBlbnVtYmVyYWJsZSwgZGVmYXVsdHMgdG8gZmFsc2VcclxuICogQHBhcmFtIHdyaXRhYmxlICAgICBJZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlLCBkZWZhdWx0cyB0byB0cnVlXHJcbiAqIEBwYXJhbSBjb25maWd1cmFibGUgSWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBjb25maWd1cmFibGUsIGRlZmF1bHRzIHRvIHRydWVcclxuICogQHJldHVybiAgICAgICAgICAgICBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIGdldFZhbHVlRGVzY3JpcHRvcih2YWx1ZSwgZW51bWVyYWJsZSwgd3JpdGFibGUsIGNvbmZpZ3VyYWJsZSkge1xyXG4gICAgaWYgKGVudW1lcmFibGUgPT09IHZvaWQgMCkgeyBlbnVtZXJhYmxlID0gZmFsc2U7IH1cclxuICAgIGlmICh3cml0YWJsZSA9PT0gdm9pZCAwKSB7IHdyaXRhYmxlID0gdHJ1ZTsgfVxyXG4gICAgaWYgKGNvbmZpZ3VyYWJsZSA9PT0gdm9pZCAwKSB7IGNvbmZpZ3VyYWJsZSA9IHRydWU7IH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgIGVudW1lcmFibGU6IGVudW1lcmFibGUsXHJcbiAgICAgICAgd3JpdGFibGU6IHdyaXRhYmxlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogY29uZmlndXJhYmxlXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMuZ2V0VmFsdWVEZXNjcmlwdG9yID0gZ2V0VmFsdWVEZXNjcmlwdG9yO1xyXG5mdW5jdGlvbiB3cmFwTmF0aXZlKG5hdGl2ZUZ1bmN0aW9uKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9uLmFwcGx5KHRhcmdldCwgYXJncyk7XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMud3JhcE5hdGl2ZSA9IHdyYXBOYXRpdmU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3NoaW0vc3VwcG9ydC91dGlsLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvc2hpbS9zdXBwb3J0L3V0aWwuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBhc3NlcnRSZW5kZXJfMSA9IHJlcXVpcmUoXCIuL3N1cHBvcnQvYXNzZXJ0UmVuZGVyXCIpO1xyXG52YXIgc2VsZWN0b3JfMSA9IHJlcXVpcmUoXCIuL3N1cHBvcnQvc2VsZWN0b3JcIik7XHJcbnZhciBkXzEgPSByZXF1aXJlKFwiLi4vd2lkZ2V0LWNvcmUvZFwiKTtcclxuZnVuY3Rpb24gZGVjb3JhdGVOb2RlcyhkTm9kZSkge1xyXG4gICAgdmFyIGhhc0RlZmVycmVkUHJvcGVydGllcyA9IGZhbHNlO1xyXG4gICAgZnVuY3Rpb24gYWRkUGFyZW50KHBhcmVudCkge1xyXG4gICAgICAgIChwYXJlbnQuY2hpbGRyZW4gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmIChkXzEuaXNWTm9kZShjaGlsZCkgfHwgZF8xLmlzV05vZGUoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZF8xLmlzVk5vZGUocGFyZW50KSAmJiB0eXBlb2YgcGFyZW50LmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGhhc0RlZmVycmVkUHJvcGVydGllcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHBhcmVudC5wcm9wZXJ0aWVzID0gdHNsaWJfMS5fX2Fzc2lnbih7fSwgcGFyZW50LnByb3BlcnRpZXMsIHBhcmVudC5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayhmYWxzZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBub2RlcyA9IGRfMS5kZWNvcmF0ZShkTm9kZSwgYWRkUGFyZW50LCBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZF8xLmlzV05vZGUobm9kZSkgfHwgZF8xLmlzVk5vZGUobm9kZSk7IH0pO1xyXG4gICAgcmV0dXJuIHsgaGFzRGVmZXJyZWRQcm9wZXJ0aWVzOiBoYXNEZWZlcnJlZFByb3BlcnRpZXMsIG5vZGVzOiBub2RlcyB9O1xyXG59XHJcbmZ1bmN0aW9uIGhhcm5lc3MocmVuZGVyRnVuYywgY3VzdG9tQ29tcGFyYXRvcikge1xyXG4gICAgaWYgKGN1c3RvbUNvbXBhcmF0b3IgPT09IHZvaWQgMCkgeyBjdXN0b21Db21wYXJhdG9yID0gW107IH1cclxuICAgIHZhciBpbnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICB2YXIgd05vZGUgPSByZW5kZXJGdW5jKCk7XHJcbiAgICB2YXIgd2lkZ2V0O1xyXG4gICAgdmFyIHJlbmRlclN0YWNrID0gW107XHJcbiAgICB2YXIgcHJvcGVydGllcyA9IHdOb2RlLnByb3BlcnRpZXMsIGNoaWxkcmVuID0gd05vZGUuY2hpbGRyZW47XHJcbiAgICB2YXIgd2lkZ2V0Q29uc3RydWN0b3IgPSB3Tm9kZS53aWRnZXRDb25zdHJ1Y3RvcjtcclxuICAgIGlmICh0eXBlb2Ygd2lkZ2V0Q29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB3aWRnZXQgPSBuZXcgLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgICAgICAgICB0c2xpYl8xLl9fZXh0ZW5kcyhjbGFzc18xLCBfc3VwZXIpO1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGFzc18xKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsYXNzXzEucHJvdG90eXBlLmludmFsaWRhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLmludmFsaWRhdGUuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYXNzXzE7XHJcbiAgICAgICAgfSh3aWRnZXRDb25zdHJ1Y3RvcikpKCk7XHJcbiAgICAgICAgd2lkZ2V0Ll9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xyXG4gICAgICAgIHdpZGdldC5fX3NldENoaWxkcmVuX18oY2hpbGRyZW4pO1xyXG4gICAgICAgIF90cnlSZW5kZXIoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGFybmVzcyBkb2VzIG5vdCBzdXBwb3J0IHJlZ2lzdHJ5IGl0ZW1zJyk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBfZ2V0UmVuZGVyKGNvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvdW50ID8gcmVuZGVyU3RhY2tbY291bnRdIDogcmVuZGVyU3RhY2tbcmVuZGVyU3RhY2subGVuZ3RoIC0gMV07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBfcnVuQ29tcGFyZXMobm9kZXMsIGlzRXhwZWN0ZWQpIHtcclxuICAgICAgICBpZiAoaXNFeHBlY3RlZCA9PT0gdm9pZCAwKSB7IGlzRXhwZWN0ZWQgPSBmYWxzZTsgfVxyXG4gICAgICAgIGN1c3RvbUNvbXBhcmF0b3IuZm9yRWFjaChmdW5jdGlvbiAoX2EpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gX2Euc2VsZWN0b3IsIHByb3BlcnR5ID0gX2EucHJvcGVydHksIGNvbXBhcmF0b3IgPSBfYS5jb21wYXJhdG9yO1xyXG4gICAgICAgICAgICB2YXIgaXRlbXMgPSBzZWxlY3Rvcl8xLnNlbGVjdChzZWxlY3Rvciwgbm9kZXMpO1xyXG4gICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbXBhcmF0b3JOYW1lID0gXCJjb21wYXJhdG9yKHNlbGVjdG9yPVwiICsgc2VsZWN0b3IgKyBcIiwgXCIgKyBwcm9wZXJ0eSArIFwiKVwiO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5wcm9wZXJ0aWVzICYmIGl0ZW0ucHJvcGVydGllc1twcm9wZXJ0eV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21wYXJhdG9yUmVzdWx0ID0gY29tcGFyYXRvcihpdGVtLnByb3BlcnRpZXNbcHJvcGVydHldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbXBhcmF0b3JOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29tcGFyYXRvck5hbWUgKyBcIiBGQUlMRURcIjtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnByb3BlcnRpZXNbcHJvcGVydHldID0gaXNFeHBlY3RlZCA/IGNvbXBhcmF0b3JOYW1lIDogY29tcGFyYXRvclJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBfdHJ5UmVuZGVyKCkge1xyXG4gICAgICAgIHZhciBfYSA9IHJlbmRlckZ1bmMoKSwgcHJvcGVydGllcyA9IF9hLnByb3BlcnRpZXMsIGNoaWxkcmVuID0gX2EuY2hpbGRyZW47XHJcbiAgICAgICAgd2lkZ2V0Ll9fc2V0UHJvcGVydGllc19fKHByb3BlcnRpZXMpO1xyXG4gICAgICAgIHdpZGdldC5fX3NldENoaWxkcmVuX18oY2hpbGRyZW4pO1xyXG4gICAgICAgIGlmIChpbnZhbGlkYXRlZCkge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyID0gd2lkZ2V0Ll9fcmVuZGVyX18oKTtcclxuICAgICAgICAgICAgdmFyIF9iID0gZGVjb3JhdGVOb2RlcyhyZW5kZXIpLCBoYXNEZWZlcnJlZFByb3BlcnRpZXMgPSBfYi5oYXNEZWZlcnJlZFByb3BlcnRpZXMsIG5vZGVzID0gX2Iubm9kZXM7XHJcbiAgICAgICAgICAgIF9ydW5Db21wYXJlcyhub2Rlcyk7XHJcbiAgICAgICAgICAgIHJlbmRlclN0YWNrLnB1c2gobm9kZXMpO1xyXG4gICAgICAgICAgICBpZiAoaGFzRGVmZXJyZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWZ0ZXJEZWZlcnJlZFByb3BlcnRpZXNOb2RlcyA9IGRlY29yYXRlTm9kZXMocmVuZGVyKS5ub2RlcztcclxuICAgICAgICAgICAgICAgIF9ydW5Db21wYXJlcyhhZnRlckRlZmVycmVkUHJvcGVydGllc05vZGVzKTtcclxuICAgICAgICAgICAgICAgIHJlbmRlclN0YWNrLnB1c2goYWZ0ZXJEZWZlcnJlZFByb3BlcnRpZXNOb2Rlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW52YWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBfZXhwZWN0KGV4cGVjdGVkUmVuZGVyRnVuYywgYWN0dWFsUmVuZGVyRnVuYywgc2VsZWN0b3IpIHtcclxuICAgICAgICB2YXIgcmVuZGVyUmVzdWx0O1xyXG4gICAgICAgIGlmIChhY3R1YWxSZW5kZXJGdW5jID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgX3RyeVJlbmRlcigpO1xyXG4gICAgICAgICAgICByZW5kZXJSZXN1bHQgPSBfZ2V0UmVuZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZW5kZXJSZXN1bHQgPSBhY3R1YWxSZW5kZXJGdW5jKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBleHBlY3RlZFJlbmRlclJlc3VsdCA9IGRlY29yYXRlTm9kZXMoZXhwZWN0ZWRSZW5kZXJGdW5jKCkpLm5vZGVzO1xyXG4gICAgICAgIF9ydW5Db21wYXJlcyhleHBlY3RlZFJlbmRlclJlc3VsdCwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIHZhciBfYSA9IHRzbGliXzEuX19yZWFkKHNlbGVjdG9yXzEuc2VsZWN0KHNlbGVjdG9yLCByZW5kZXJSZXN1bHQpLCAxKSwgZmlyc3RJdGVtID0gX2FbMF07XHJcbiAgICAgICAgICAgIGFzc2VydFJlbmRlcl8xLmRlZmF1bHQoZmlyc3RJdGVtLCBleHBlY3RlZFJlbmRlclJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhc3NlcnRSZW5kZXJfMS5kZWZhdWx0KHJlbmRlclJlc3VsdCwgZXhwZWN0ZWRSZW5kZXJSZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZXhwZWN0OiBmdW5jdGlvbiAoZXhwZWN0ZWRSZW5kZXJGdW5jLCBhY3R1YWxSZW5kZXJGdW5jKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfZXhwZWN0KGV4cGVjdGVkUmVuZGVyRnVuYywgYWN0dWFsUmVuZGVyRnVuYyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBleHBlY3RQYXJ0aWFsOiBmdW5jdGlvbiAoc2VsZWN0b3IsIGV4cGVjdGVkUmVuZGVyRnVuYywgYWN0dWFsUmVuZGVyRnVuYykge1xyXG4gICAgICAgICAgICByZXR1cm4gX2V4cGVjdChleHBlY3RlZFJlbmRlckZ1bmMsIGFjdHVhbFJlbmRlckZ1bmMsIHNlbGVjdG9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uIChzZWxlY3RvciwgZnVuY3Rpb25TZWxlY3Rvcikge1xyXG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfdHJ5UmVuZGVyKCk7XHJcbiAgICAgICAgICAgIHZhciBfYSA9IHRzbGliXzEuX19yZWFkKHNlbGVjdG9yXzEuc2VsZWN0KHNlbGVjdG9yLCBfZ2V0UmVuZGVyKCkpLCAxKSwgZmlyc3RJdGVtID0gX2FbMF07XHJcbiAgICAgICAgICAgIGlmIChmaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHZhciB0cmlnZ2VyRnVuY3Rpb24gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9uU2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZ1bmN0aW9uID0gZmlyc3RJdGVtLnByb3BlcnRpZXNbZnVuY3Rpb25TZWxlY3Rvcl07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRnVuY3Rpb24gPSBmdW5jdGlvblNlbGVjdG9yKGZpcnN0SXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodHJpZ2dlckZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyaWdnZXJGdW5jdGlvbi5hcHBseSh3aWRnZXQsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXRSZW5kZXI6IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgICAgICByZXR1cm4gX2dldFJlbmRlcihpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLmhhcm5lc3MgPSBoYXJuZXNzO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBoYXJuZXNzO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay90ZXN0aW5nL2hhcm5lc3MuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay90ZXN0aW5nL2hhcm5lc3MuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGRfMSA9IHJlcXVpcmUoXCIuLi8uLi93aWRnZXQtY29yZS9kXCIpO1xyXG52YXIgZGlmZiA9IHJlcXVpcmUoXCJkaWZmXCIpO1xyXG52YXIgV2Vha01hcF8xID0gcmVxdWlyZShcIi4uLy4uL3NoaW0vV2Vha01hcFwiKTtcclxudmFyIFNldF8xID0gcmVxdWlyZShcIi4uLy4uL3NoaW0vU2V0XCIpO1xyXG52YXIgTWFwXzEgPSByZXF1aXJlKFwiLi4vLi4vc2hpbS9NYXBcIik7XHJcbnZhciBhcnJheV8xID0gcmVxdWlyZShcIi4uLy4uL3NoaW0vYXJyYXlcIik7XHJcbnZhciB3aWRnZXRDbGFzc0NvdW50ZXIgPSAwO1xyXG52YXIgd2lkZ2V0TWFwID0gbmV3IFdlYWtNYXBfMS5kZWZhdWx0KCk7XHJcbmZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gJ2Z1bmN0aW9uJztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldF8xLmRlZmF1bHQgfHwgdmFsdWUgaW5zdGFuY2VvZiBNYXBfMS5kZWZhdWx0KSB7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5XzEuZnJvbSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gZm9ybWF0RE5vZGVzKG5vZGVzLCBkZXB0aCkge1xyXG4gICAgaWYgKGRlcHRoID09PSB2b2lkIDApIHsgZGVwdGggPSAwOyB9XHJcbiAgICB2YXIgaXNBcnJheUZyYWdtZW50ID0gQXJyYXkuaXNBcnJheShub2RlcykgJiYgZGVwdGggPT09IDA7XHJcbiAgICB2YXIgaW5pdGlhbCA9IGlzQXJyYXlGcmFnbWVudCA/ICdbXFxuJyA6ICcnO1xyXG4gICAgdmFyIHRhYnMgPSAnJztcclxuICAgIGRlcHRoID0gaXNBcnJheUZyYWdtZW50ID8gMSA6IGRlcHRoO1xyXG4gICAgbm9kZXMgPSBBcnJheS5pc0FycmF5KG5vZGVzKSA/IG5vZGVzIDogW25vZGVzXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwdGg7IGkrKykge1xyXG4gICAgICAgIHRhYnMgPSB0YWJzICsgXCJcXHRcIjtcclxuICAgIH1cclxuICAgIHZhciBmb3JtYXR0ZWROb2RlID0gbm9kZXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIG5vZGUsIGluZGV4KSB7XHJcbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0ID0gXCJcIiArIHJlc3VsdCArIHRhYnM7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgXCJcXFwiXCIgKyBub2RlICsgXCJcXFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdCA9IFwiXCIgKyByZXN1bHQgKyBmb3JtYXROb2RlKG5vZGUsIHRhYnMpO1xyXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBcIiwgW1xcblwiICsgZm9ybWF0RE5vZGVzKG5vZGUuY2hpbGRyZW4sIGRlcHRoICsgMSkgKyBcIlxcblwiICsgdGFicyArIFwiXVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0ICsgXCIpXCI7XHJcbiAgICB9LCBpbml0aWFsKTtcclxuICAgIHJldHVybiBpc0FycmF5RnJhZ21lbnQgPyAoZm9ybWF0dGVkTm9kZSA9IGZvcm1hdHRlZE5vZGUgKyBcIlxcbl1cIikgOiBmb3JtYXR0ZWROb2RlO1xyXG59XHJcbmV4cG9ydHMuZm9ybWF0RE5vZGVzID0gZm9ybWF0RE5vZGVzO1xyXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIHRhYnMpIHtcclxuICAgIHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKVxyXG4gICAgICAgIC5zb3J0KClcclxuICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChwcm9wcywga2V5KSB7XHJcbiAgICAgICAgcHJvcHNba2V5XSA9IHByb3BlcnRpZXNba2V5XTtcclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9LCB7fSk7XHJcbiAgICBwcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkocHJvcGVydGllcywgcmVwbGFjZXIsIHRhYnMgKyBcIlxcdFwiKS5zbGljZSgwLCAtMSk7XHJcbiAgICByZXR1cm4gXCJcIiArIHByb3BlcnRpZXMgKyB0YWJzICsgXCJ9XCI7XHJcbn1cclxuZnVuY3Rpb24gZ2V0V2lkZ2V0TmFtZSh3aWRnZXRDb25zdHJ1Y3Rvcikge1xyXG4gICAgdmFyIG5hbWU7XHJcbiAgICBpZiAodHlwZW9mIHdpZGdldENvbnN0cnVjdG9yID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygd2lkZ2V0Q29uc3RydWN0b3IgPT09ICdzeW1ib2wnKSB7XHJcbiAgICAgICAgbmFtZSA9IHdpZGdldENvbnN0cnVjdG9yLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBuYW1lID0gd2lkZ2V0Q29uc3RydWN0b3IubmFtZTtcclxuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhciBpZCA9IHdpZGdldE1hcC5nZXQod2lkZ2V0Q29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWQgPSArK3dpZGdldENsYXNzQ291bnRlcjtcclxuICAgICAgICAgICAgICAgIHdpZGdldE1hcC5zZXQod2lkZ2V0Q29uc3RydWN0b3IsIGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuYW1lID0gXCJXaWRnZXQtXCIgKyBpZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmFtZTtcclxufVxyXG5mdW5jdGlvbiBmb3JtYXROb2RlKG5vZGUsIHRhYnMpIHtcclxuICAgIHZhciBwcm9wZXJ0eUtleUNvdW50ID0gT2JqZWN0LmtleXMobm9kZS5wcm9wZXJ0aWVzKS5sZW5ndGg7XHJcbiAgICB2YXIgcHJvcGVydGllcyA9IHByb3BlcnR5S2V5Q291bnQgPiAwID8gZm9ybWF0UHJvcGVydGllcyhub2RlLnByb3BlcnRpZXMsIHRhYnMpIDogJ3t9JztcclxuICAgIGlmIChkXzEuaXNXTm9kZShub2RlKSkge1xyXG4gICAgICAgIHJldHVybiBcIncoXCIgKyBnZXRXaWRnZXROYW1lKG5vZGUud2lkZ2V0Q29uc3RydWN0b3IpICsgXCIsIFwiICsgcHJvcGVydGllcztcclxuICAgIH1cclxuICAgIHJldHVybiBcInYoXFxcIlwiICsgbm9kZS50YWcgKyBcIlxcXCIsIFwiICsgcHJvcGVydGllcztcclxufVxyXG5mdW5jdGlvbiBhc3NlcnRSZW5kZXIoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIHBhcnNlZEFjdHVhbCA9IGZvcm1hdEROb2RlcyhhY3R1YWwpO1xyXG4gICAgdmFyIHBhcnNlZEV4cGVjdGVkID0gZm9ybWF0RE5vZGVzKGV4cGVjdGVkKTtcclxuICAgIHZhciBkaWZmUmVzdWx0ID0gZGlmZi5kaWZmTGluZXMocGFyc2VkQWN0dWFsLCBwYXJzZWRFeHBlY3RlZCk7XHJcbiAgICB2YXIgZGlmZkZvdW5kID0gZmFsc2U7XHJcbiAgICB2YXIgcGFyc2VkRGlmZiA9IGRpZmZSZXN1bHQucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIHBhcnQsIGluZGV4KSB7XHJcbiAgICAgICAgaWYgKHBhcnQuYWRkZWQpIHtcclxuICAgICAgICAgICAgZGlmZkZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgXCIoRSlcIiArIHBhcnQudmFsdWUucmVwbGFjZSgvXFxuXFx0L2csICdcXG4oRSlcXHQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocGFydC5yZW1vdmVkKSB7XHJcbiAgICAgICAgICAgIGRpZmZGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIFwiKEEpXCIgKyBwYXJ0LnZhbHVlLnJlcGxhY2UoL1xcblxcdC9nLCAnXFxuKEEpXFx0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBcIlwiICsgcmVzdWx0ICsgcGFydC52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0sICdcXG4nKTtcclxuICAgIGlmIChkaWZmRm91bmQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocGFyc2VkRGlmZik7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5hc3NlcnRSZW5kZXIgPSBhc3NlcnRSZW5kZXI7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IGFzc2VydFJlbmRlcjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvdGVzdGluZy9zdXBwb3J0L2Fzc2VydFJlbmRlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3Rlc3Rpbmcvc3VwcG9ydC9hc3NlcnRSZW5kZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBkXzEgPSByZXF1aXJlKFwiLi4vLi4vd2lkZ2V0LWNvcmUvZFwiKTtcclxudmFyIGNzc1NlbGVjdCA9IHJlcXVpcmUoXCJjc3Mtc2VsZWN0LXVtZFwiKTtcclxuZXhwb3J0cy5wYXJzZVNlbGVjdG9yID0gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XHJcbiAgICB2YXIgc2VsZWN0b3JzID0gc2VsZWN0b3Iuc3BsaXQoJyAnKTtcclxuICAgIHJldHVybiBzZWxlY3RvcnNcclxuICAgICAgICAubWFwKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xyXG4gICAgICAgIHZhciBrZXlTaWdpbEluZGV4ID0gc2VsZWN0b3IuaW5kZXhPZignQCcpO1xyXG4gICAgICAgIGlmIChrZXlTaWdpbEluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIltrZXk9XFxcIlwiICsgc2VsZWN0b3Iuc3Vic3RyKDEpICsgXCJcXFwiXVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChrZXlTaWdpbEluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gc2VsZWN0b3Iuc3Vic3RyaW5nKGtleVNpZ2lsSW5kZXggKyAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yLnNsaWNlKDAsIGtleVNpZ2lsSW5kZXgpICsgXCJba2V5PVxcXCJcIiArIGtleSArIFwiXFxcIl1cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xyXG4gICAgfSlcclxuICAgICAgICAuam9pbignICcpO1xyXG59O1xyXG5leHBvcnRzLmFkYXB0ZXIgPSB7XHJcbiAgICBpc1RhZzogZnVuY3Rpb24gKGVsZW0pIHtcclxuICAgICAgICByZXR1cm4gZF8xLmlzVk5vZGUoZWxlbSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0VGV4dDogZnVuY3Rpb24gKGVsZW0pIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlU3Vic2V0czogZnVuY3Rpb24gKGVsZW1lbnRzKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xyXG4gICAgfSxcclxuICAgIGdldENoaWxkcmVuOiBmdW5jdGlvbiAoZWxlbSkge1xyXG4gICAgICAgIHJldHVybiBkXzEuaXNWTm9kZShlbGVtKSB8fCBkXzEuaXNXTm9kZShlbGVtKSA/IGVsZW0uY2hpbGRyZW4gOiBbXTtcclxuICAgIH0sXHJcbiAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogZnVuY3Rpb24gKGVsZW0sIG5hbWUpIHtcclxuICAgICAgICBpZiAoZF8xLmlzVk5vZGUoZWxlbSkgfHwgZF8xLmlzV05vZGUoZWxlbSkpIHtcclxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjbGFzc2VzID0gZWxlbS5wcm9wZXJ0aWVzLmNsYXNzZXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtLnByb3BlcnRpZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGhhc0F0dHJpYjogZnVuY3Rpb24gKGVsZW0sIG5hbWUpIHtcclxuICAgICAgICBpZiAoZF8xLmlzVk5vZGUoZWxlbSkgfHwgZF8xLmlzV05vZGUoZWxlbSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5hbWUgaW4gZWxlbS5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG4gICAgZXhpc3RzT25lOiBmdW5jdGlvbiAodGVzdCwgZWxlbWVudHMpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudHMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdGVzdChlbGVtKTsgfSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0TmFtZTogZnVuY3Rpb24gKGVsZW0pIHtcclxuICAgICAgICBpZiAoZF8xLmlzVk5vZGUoZWxlbSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW0udGFnO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBnZXRQYXJlbnQ6IGZ1bmN0aW9uIChlbGVtKSB7XHJcbiAgICAgICAgaWYgKGRfMS5pc1ZOb2RlKGVsZW0pIHx8IGRfMS5pc1dOb2RlKGVsZW0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtLnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0U2libGluZ3M6IGZ1bmN0aW9uIChlbGVtKSB7XHJcbiAgICAgICAgaWYgKGRfMS5pc1ZOb2RlKGVsZW0pIHx8IGRfMS5pc1dOb2RlKGVsZW0pKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucGFyZW50LmNoaWxkcmVuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBbZWxlbV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGZpbmRPbmU6IGZ1bmN0aW9uICh0ZXN0LCBhcnIpIHtcclxuICAgICAgICB2YXIgZWxlbSA9IG51bGw7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcnIubGVuZ3RoOyBpIDwgbCAmJiAhZWxlbTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0KGFycltpXSkpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0gPSBhcnJbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBleHBvcnRzLmFkYXB0ZXIuZ2V0Q2hpbGRyZW4oYXJyW2ldKTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGV4cG9ydHMuYWRhcHRlci5maW5kT25lKHRlc3QsIGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWxlbTtcclxuICAgIH0sXHJcbiAgICBmaW5kQWxsOiBmdW5jdGlvbiAodGVzdCwgZWxlbWVudHMpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRlc3QoZWxlbWVudHNbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChlbGVtZW50c1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZXhwb3J0cy5hZGFwdGVyLmdldENoaWxkcmVuKGVsZW1lbnRzW2ldKTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0c2xpYl8xLl9fc3ByZWFkKHJlc3VsdCwgZXhwb3J0cy5hZGFwdGVyLmZpbmRBbGwodGVzdCwgY2hpbGRyZW4pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBzZWxlY3Qoc2VsZWN0b3IsIG5vZGVzKSB7XHJcbiAgICBub2RlcyA9IEFycmF5LmlzQXJyYXkobm9kZXMpID8gbm9kZXMgOiBbbm9kZXNdO1xyXG4gICAgc2VsZWN0b3IgPSBleHBvcnRzLnBhcnNlU2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG4gICAgcmV0dXJuIGNzc1NlbGVjdChzZWxlY3Rvciwgbm9kZXMsIHsgYWRhcHRlcjogZXhwb3J0cy5hZGFwdGVyIH0pO1xyXG59XHJcbmV4cG9ydHMuc2VsZWN0ID0gc2VsZWN0O1xyXG5leHBvcnRzLmRlZmF1bHQgPSBzZWxlY3Q7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3Rlc3Rpbmcvc3VwcG9ydC9zZWxlY3Rvci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3Rlc3Rpbmcvc3VwcG9ydC9zZWxlY3Rvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIEV2ZW50ZWRfMSA9IHJlcXVpcmUoXCIuLi9jb3JlL0V2ZW50ZWRcIik7XHJcbnZhciBJbmplY3RvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIHRzbGliXzEuX19leHRlbmRzKEluamVjdG9yLCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gSW5qZWN0b3IocGF5bG9hZCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XHJcbiAgICAgICAgX3RoaXMuX3BheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIEluamVjdG9yLnByb3RvdHlwZS5zZXRJbnZhbGlkYXRvciA9IGZ1bmN0aW9uIChpbnZhbGlkYXRvcikge1xyXG4gICAgICAgIHRoaXMuX2ludmFsaWRhdG9yID0gaW52YWxpZGF0b3I7XHJcbiAgICB9O1xyXG4gICAgSW5qZWN0b3IucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGF5bG9hZDtcclxuICAgIH07XHJcbiAgICBJbmplY3Rvci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBheWxvYWQpIHtcclxuICAgICAgICB0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcclxuICAgICAgICBpZiAodGhpcy5faW52YWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5faW52YWxpZGF0b3IoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEluamVjdG9yO1xyXG59KEV2ZW50ZWRfMS5FdmVudGVkKSk7XHJcbmV4cG9ydHMuSW5qZWN0b3IgPSBJbmplY3RvcjtcclxuZXhwb3J0cy5kZWZhdWx0ID0gSW5qZWN0b3I7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL0luamVjdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvSW5qZWN0b3IuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBFdmVudGVkXzEgPSByZXF1aXJlKFwiLi4vY29yZS9FdmVudGVkXCIpO1xyXG52YXIgTWFwXzEgPSByZXF1aXJlKFwiLi4vc2hpbS9NYXBcIik7XHJcbi8qKlxyXG4gKiBFbnVtIHRvIGlkZW50aWZ5IHRoZSB0eXBlIG9mIGV2ZW50LlxyXG4gKiBMaXN0ZW5pbmcgdG8gJ1Byb2plY3Rvcicgd2lsbCBub3RpZnkgd2hlbiBwcm9qZWN0b3IgaXMgY3JlYXRlZCBvciB1cGRhdGVkXHJcbiAqIExpc3RlbmluZyB0byAnV2lkZ2V0JyB3aWxsIG5vdGlmeSB3aGVuIHdpZGdldCByb290IGlzIGNyZWF0ZWQgb3IgdXBkYXRlZFxyXG4gKi9cclxudmFyIE5vZGVFdmVudFR5cGU7XHJcbihmdW5jdGlvbiAoTm9kZUV2ZW50VHlwZSkge1xyXG4gICAgTm9kZUV2ZW50VHlwZVtcIlByb2plY3RvclwiXSA9IFwiUHJvamVjdG9yXCI7XHJcbiAgICBOb2RlRXZlbnRUeXBlW1wiV2lkZ2V0XCJdID0gXCJXaWRnZXRcIjtcclxufSkoTm9kZUV2ZW50VHlwZSA9IGV4cG9ydHMuTm9kZUV2ZW50VHlwZSB8fCAoZXhwb3J0cy5Ob2RlRXZlbnRUeXBlID0ge30pKTtcclxudmFyIE5vZGVIYW5kbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoTm9kZUhhbmRsZXIsIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBOb2RlSGFuZGxlcigpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcclxuICAgICAgICBfdGhpcy5fbm9kZU1hcCA9IG5ldyBNYXBfMS5kZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgTm9kZUhhbmRsZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZU1hcC5nZXQoa2V5KTtcclxuICAgIH07XHJcbiAgICBOb2RlSGFuZGxlci5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlTWFwLmhhcyhrZXkpO1xyXG4gICAgfTtcclxuICAgIE5vZGVIYW5kbGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZWxlbWVudCwga2V5KSB7XHJcbiAgICAgICAgdGhpcy5fbm9kZU1hcC5zZXQoa2V5LCBlbGVtZW50KTtcclxuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBrZXkgfSk7XHJcbiAgICB9O1xyXG4gICAgTm9kZUhhbmRsZXIucHJvdG90eXBlLmFkZFJvb3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KHsgdHlwZTogTm9kZUV2ZW50VHlwZS5XaWRnZXQgfSk7XHJcbiAgICB9O1xyXG4gICAgTm9kZUhhbmRsZXIucHJvdG90eXBlLmFkZFByb2plY3RvciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBOb2RlRXZlbnRUeXBlLlByb2plY3RvciB9KTtcclxuICAgIH07XHJcbiAgICBOb2RlSGFuZGxlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fbm9kZU1hcC5jbGVhcigpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBOb2RlSGFuZGxlcjtcclxufShFdmVudGVkXzEuRXZlbnRlZCkpO1xyXG5leHBvcnRzLk5vZGVIYW5kbGVyID0gTm9kZUhhbmRsZXI7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IE5vZGVIYW5kbGVyO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9Ob2RlSGFuZGxlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL05vZGVIYW5kbGVyLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgUHJvbWlzZV8xID0gcmVxdWlyZShcIi4uL3NoaW0vUHJvbWlzZVwiKTtcclxudmFyIE1hcF8xID0gcmVxdWlyZShcIi4uL3NoaW0vTWFwXCIpO1xyXG52YXIgU3ltYm9sXzEgPSByZXF1aXJlKFwiLi4vc2hpbS9TeW1ib2xcIik7XHJcbnZhciBFdmVudGVkXzEgPSByZXF1aXJlKFwiLi4vY29yZS9FdmVudGVkXCIpO1xyXG4vKipcclxuICogV2lkZ2V0IGJhc2Ugc3ltYm9sIHR5cGVcclxuICovXHJcbmV4cG9ydHMuV0lER0VUX0JBU0VfVFlQRSA9IFN5bWJvbF8xLmRlZmF1bHQoJ1dpZGdldCBCYXNlJyk7XHJcbi8qKlxyXG4gKiBDaGVja3MgaXMgdGhlIGl0ZW0gaXMgYSBzdWJjbGFzcyBvZiBXaWRnZXRCYXNlIChvciBhIFdpZGdldEJhc2UpXHJcbiAqXHJcbiAqIEBwYXJhbSBpdGVtIHRoZSBpdGVtIHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zIHRydWUvZmFsc2UgaW5kaWNhdGluZyBpZiB0aGUgaXRlbSBpcyBhIFdpZGdldEJhc2VDb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkge1xyXG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJiBpdGVtLl90eXBlID09PSBleHBvcnRzLldJREdFVF9CQVNFX1RZUEUpO1xyXG59XHJcbmV4cG9ydHMuaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IgPSBpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcjtcclxuZnVuY3Rpb24gaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQoaXRlbSkge1xyXG4gICAgcmV0dXJuIEJvb2xlYW4oaXRlbSAmJlxyXG4gICAgICAgIGl0ZW0uaGFzT3duUHJvcGVydHkoJ19fZXNNb2R1bGUnKSAmJlxyXG4gICAgICAgIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSAmJlxyXG4gICAgICAgIGlzV2lkZ2V0QmFzZUNvbnN0cnVjdG9yKGl0ZW0uZGVmYXVsdCkpO1xyXG59XHJcbmV4cG9ydHMuaXNXaWRnZXRDb25zdHJ1Y3RvckRlZmF1bHRFeHBvcnQgPSBpc1dpZGdldENvbnN0cnVjdG9yRGVmYXVsdEV4cG9ydDtcclxuLyoqXHJcbiAqIFRoZSBSZWdpc3RyeSBpbXBsZW1lbnRhdGlvblxyXG4gKi9cclxudmFyIFJlZ2lzdHJ5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoUmVnaXN0cnksIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBSZWdpc3RyeSgpIHtcclxuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEVtaXQgbG9hZGVkIGV2ZW50IGZvciByZWdpc3RyeSBsYWJlbFxyXG4gICAgICovXHJcbiAgICBSZWdpc3RyeS5wcm90b3R5cGUuZW1pdExvYWRlZEV2ZW50ID0gZnVuY3Rpb24gKHdpZGdldExhYmVsLCBpdGVtKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KHtcclxuICAgICAgICAgICAgdHlwZTogd2lkZ2V0TGFiZWwsXHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xvYWRlZCcsXHJcbiAgICAgICAgICAgIGl0ZW06IGl0ZW1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBSZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lID0gZnVuY3Rpb24gKGxhYmVsLCBpdGVtKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0UmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl93aWRnZXRSZWdpc3RyeSA9IG5ldyBNYXBfMS5kZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl93aWRnZXRSZWdpc3RyeS5oYXMobGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIndpZGdldCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgZm9yICdcIiArIGxhYmVsLnRvU3RyaW5nKCkgKyBcIidcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3dpZGdldFJlZ2lzdHJ5LnNldChsYWJlbCwgaXRlbSk7XHJcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlXzEuZGVmYXVsdCkge1xyXG4gICAgICAgICAgICBpdGVtLnRoZW4oZnVuY3Rpb24gKHdpZGdldEN0b3IpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCB3aWRnZXRDdG9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB3aWRnZXRDdG9yO1xyXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNXaWRnZXRCYXNlQ29uc3RydWN0b3IoaXRlbSkpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBSZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lSW5qZWN0b3IgPSBmdW5jdGlvbiAobGFiZWwsIGluamVjdG9yRmFjdG9yeSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pbmplY3RvclJlZ2lzdHJ5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JSZWdpc3RyeSA9IG5ldyBNYXBfMS5kZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmhhcyhsYWJlbCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW5qZWN0b3IgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnXCIgKyBsYWJlbC50b1N0cmluZygpICsgXCInXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaW52YWxpZGF0b3IgPSBuZXcgRXZlbnRlZF8xLkV2ZW50ZWQoKTtcclxuICAgICAgICB2YXIgaW5qZWN0b3JJdGVtID0ge1xyXG4gICAgICAgICAgICBpbmplY3RvcjogaW5qZWN0b3JGYWN0b3J5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludmFsaWRhdG9yLmVtaXQoeyB0eXBlOiAnaW52YWxpZGF0ZScgfSk7IH0pLFxyXG4gICAgICAgICAgICBpbnZhbGlkYXRvcjogaW52YWxpZGF0b3JcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX2luamVjdG9yUmVnaXN0cnkuc2V0KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xyXG4gICAgICAgIHRoaXMuZW1pdExvYWRlZEV2ZW50KGxhYmVsLCBpbmplY3Rvckl0ZW0pO1xyXG4gICAgfTtcclxuICAgIFJlZ2lzdHJ5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobGFiZWwpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICghdGhpcy5fd2lkZ2V0UmVnaXN0cnkgfHwgIXRoaXMuaGFzKGxhYmVsKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl93aWRnZXRSZWdpc3RyeS5nZXQobGFiZWwpO1xyXG4gICAgICAgIGlmIChpc1dpZGdldEJhc2VDb25zdHJ1Y3RvcihpdGVtKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlXzEuZGVmYXVsdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHByb21pc2UgPSBpdGVtKCk7XHJcbiAgICAgICAgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuc2V0KGxhYmVsLCBwcm9taXNlKTtcclxuICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHdpZGdldEN0b3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2lkZ2V0Q29uc3RydWN0b3JEZWZhdWx0RXhwb3J0KHdpZGdldEN0b3IpKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXRDdG9yID0gd2lkZ2V0Q3Rvci5kZWZhdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF90aGlzLl93aWRnZXRSZWdpc3RyeS5zZXQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICBfdGhpcy5lbWl0TG9hZGVkRXZlbnQobGFiZWwsIHdpZGdldEN0b3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gd2lkZ2V0Q3RvcjtcclxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gICAgUmVnaXN0cnkucHJvdG90eXBlLmdldEluamVjdG9yID0gZnVuY3Rpb24gKGxhYmVsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbmplY3RvclJlZ2lzdHJ5IHx8ICF0aGlzLmhhc0luamVjdG9yKGxhYmVsKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luamVjdG9yUmVnaXN0cnkuZ2V0KGxhYmVsKTtcclxuICAgIH07XHJcbiAgICBSZWdpc3RyeS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fd2lkZ2V0UmVnaXN0cnkgJiYgdGhpcy5fd2lkZ2V0UmVnaXN0cnkuaGFzKGxhYmVsKSk7XHJcbiAgICB9O1xyXG4gICAgUmVnaXN0cnkucHJvdG90eXBlLmhhc0luamVjdG9yID0gZnVuY3Rpb24gKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5faW5qZWN0b3JSZWdpc3RyeSAmJiB0aGlzLl9pbmplY3RvclJlZ2lzdHJ5LmhhcyhsYWJlbCkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBSZWdpc3RyeTtcclxufShFdmVudGVkXzEuRXZlbnRlZCkpO1xyXG5leHBvcnRzLlJlZ2lzdHJ5ID0gUmVnaXN0cnk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IFJlZ2lzdHJ5O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9SZWdpc3RyeS5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1JlZ2lzdHJ5LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgTWFwXzEgPSByZXF1aXJlKFwiLi4vc2hpbS9NYXBcIik7XHJcbnZhciBFdmVudGVkXzEgPSByZXF1aXJlKFwiLi4vY29yZS9FdmVudGVkXCIpO1xyXG52YXIgUmVnaXN0cnlfMSA9IHJlcXVpcmUoXCIuL1JlZ2lzdHJ5XCIpO1xyXG52YXIgUmVnaXN0cnlIYW5kbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoUmVnaXN0cnlIYW5kbGVyLCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gUmVnaXN0cnlIYW5kbGVyKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XHJcbiAgICAgICAgX3RoaXMuX3JlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5XzEuUmVnaXN0cnkoKTtcclxuICAgICAgICBfdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcCA9IG5ldyBNYXBfMS5NYXAoKTtcclxuICAgICAgICBfdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwID0gbmV3IE1hcF8xLk1hcCgpO1xyXG4gICAgICAgIF90aGlzLm93bihfdGhpcy5fcmVnaXN0cnkpO1xyXG4gICAgICAgIHZhciBkZXN0cm95ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMuYmFzZVJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUoX3RoaXMuYmFzZVJlZ2lzdHJ5KTtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9yZWdpc3RyeUluamVjdG9yTGFiZWxNYXAuZGVsZXRlKF90aGlzLmJhc2VSZWdpc3RyeSk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5iYXNlUmVnaXN0cnkgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIF90aGlzLm93bih7IGRlc3Ryb3k6IGRlc3Ryb3kgfSk7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZ2lzdHJ5SGFuZGxlci5wcm90b3R5cGUsIFwiYmFzZVwiLCB7XHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoYmFzZVJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VSZWdpc3RyeSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcC5kZWxldGUodGhpcy5iYXNlUmVnaXN0cnkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwLmRlbGV0ZSh0aGlzLmJhc2VSZWdpc3RyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5iYXNlUmVnaXN0cnkgPSBiYXNlUmVnaXN0cnk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBSZWdpc3RyeUhhbmRsZXIucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uIChsYWJlbCwgd2lkZ2V0KSB7XHJcbiAgICAgICAgdGhpcy5fcmVnaXN0cnkuZGVmaW5lKGxhYmVsLCB3aWRnZXQpO1xyXG4gICAgfTtcclxuICAgIFJlZ2lzdHJ5SGFuZGxlci5wcm90b3R5cGUuZGVmaW5lSW5qZWN0b3IgPSBmdW5jdGlvbiAobGFiZWwsIGluamVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5fcmVnaXN0cnkuZGVmaW5lSW5qZWN0b3IobGFiZWwsIGluamVjdG9yKTtcclxuICAgIH07XHJcbiAgICBSZWdpc3RyeUhhbmRsZXIucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChsYWJlbCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeS5oYXMobGFiZWwpIHx8IEJvb2xlYW4odGhpcy5iYXNlUmVnaXN0cnkgJiYgdGhpcy5iYXNlUmVnaXN0cnkuaGFzKGxhYmVsKSk7XHJcbiAgICB9O1xyXG4gICAgUmVnaXN0cnlIYW5kbGVyLnByb3RvdHlwZS5oYXNJbmplY3RvciA9IGZ1bmN0aW9uIChsYWJlbCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeS5oYXNJbmplY3RvcihsYWJlbCkgfHwgQm9vbGVhbih0aGlzLmJhc2VSZWdpc3RyeSAmJiB0aGlzLmJhc2VSZWdpc3RyeS5oYXNJbmplY3RvcihsYWJlbCkpO1xyXG4gICAgfTtcclxuICAgIFJlZ2lzdHJ5SGFuZGxlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlKSB7XHJcbiAgICAgICAgaWYgKGdsb2JhbFByZWNlZGVuY2UgPT09IHZvaWQgMCkgeyBnbG9iYWxQcmVjZWRlbmNlID0gZmFsc2U7IH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KGxhYmVsLCBnbG9iYWxQcmVjZWRlbmNlLCAnZ2V0JywgdGhpcy5fcmVnaXN0cnlXaWRnZXRMYWJlbE1hcCk7XHJcbiAgICB9O1xyXG4gICAgUmVnaXN0cnlIYW5kbGVyLnByb3RvdHlwZS5nZXRJbmplY3RvciA9IGZ1bmN0aW9uIChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSkge1xyXG4gICAgICAgIGlmIChnbG9iYWxQcmVjZWRlbmNlID09PSB2b2lkIDApIHsgZ2xvYmFsUHJlY2VkZW5jZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldChsYWJlbCwgZ2xvYmFsUHJlY2VkZW5jZSwgJ2dldEluamVjdG9yJywgdGhpcy5fcmVnaXN0cnlJbmplY3RvckxhYmVsTWFwKTtcclxuICAgIH07XHJcbiAgICBSZWdpc3RyeUhhbmRsZXIucHJvdG90eXBlLl9nZXQgPSBmdW5jdGlvbiAobGFiZWwsIGdsb2JhbFByZWNlZGVuY2UsIGdldEZ1bmN0aW9uTmFtZSwgbGFiZWxNYXApIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciByZWdpc3RyaWVzID0gZ2xvYmFsUHJlY2VkZW5jZSA/IFt0aGlzLmJhc2VSZWdpc3RyeSwgdGhpcy5fcmVnaXN0cnldIDogW3RoaXMuX3JlZ2lzdHJ5LCB0aGlzLmJhc2VSZWdpc3RyeV07XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWdpc3RyaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByZWdpc3RyeSA9IHJlZ2lzdHJpZXNbaV07XHJcbiAgICAgICAgICAgIGlmICghcmVnaXN0cnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gcmVnaXN0cnlbZ2V0RnVuY3Rpb25OYW1lXShsYWJlbCk7XHJcbiAgICAgICAgICAgIHZhciByZWdpc3RlcmVkTGFiZWxzID0gbGFiZWxNYXAuZ2V0KHJlZ2lzdHJ5KSB8fCBbXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyZWRMYWJlbHMuaW5kZXhPZihsYWJlbCkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaGFuZGxlID0gcmVnaXN0cnkub24obGFiZWwsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdsb2FkZWQnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzW2dldEZ1bmN0aW9uTmFtZV0obGFiZWwsIGdsb2JhbFByZWNlZGVuY2UpID09PSBldmVudC5pdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoeyB0eXBlOiAnaW52YWxpZGF0ZScgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm93bihoYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgbGFiZWxNYXAuc2V0KHJlZ2lzdHJ5LCB0c2xpYl8xLl9fc3ByZWFkKHJlZ2lzdGVyZWRMYWJlbHMsIFtsYWJlbF0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUmVnaXN0cnlIYW5kbGVyO1xyXG59KEV2ZW50ZWRfMS5FdmVudGVkKSk7XHJcbmV4cG9ydHMuUmVnaXN0cnlIYW5kbGVyID0gUmVnaXN0cnlIYW5kbGVyO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBSZWdpc3RyeUhhbmRsZXI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1JlZ2lzdHJ5SGFuZGxlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1JlZ2lzdHJ5SGFuZGxlci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIE1hcF8xID0gcmVxdWlyZShcIi4uL3NoaW0vTWFwXCIpO1xyXG52YXIgV2Vha01hcF8xID0gcmVxdWlyZShcIi4uL3NoaW0vV2Vha01hcFwiKTtcclxudmFyIFN5bWJvbF8xID0gcmVxdWlyZShcIi4uL3NoaW0vU3ltYm9sXCIpO1xyXG52YXIgZF8xID0gcmVxdWlyZShcIi4vZFwiKTtcclxudmFyIGRpZmZfMSA9IHJlcXVpcmUoXCIuL2RpZmZcIik7XHJcbnZhciBSZWdpc3RyeUhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL1JlZ2lzdHJ5SGFuZGxlclwiKTtcclxudmFyIE5vZGVIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9Ob2RlSGFuZGxlclwiKTtcclxudmFyIHZkb21fMSA9IHJlcXVpcmUoXCIuL3Zkb21cIik7XHJcbnZhciBSZWdpc3RyeV8xID0gcmVxdWlyZShcIi4vUmVnaXN0cnlcIik7XHJcbnZhciBkZWNvcmF0b3JNYXAgPSBuZXcgTWFwXzEuZGVmYXVsdCgpO1xyXG52YXIgYm91bmRBdXRvID0gZGlmZl8xLmF1dG8uYmluZChudWxsKTtcclxuZXhwb3J0cy5ub0JpbmQgPSBTeW1ib2xfMS5kZWZhdWx0LmZvcignZG9qb05vQmluZCcpO1xyXG4vKipcclxuICogTWFpbiB3aWRnZXQgYmFzZSBmb3IgYWxsIHdpZGdldHMgdG8gZXh0ZW5kXHJcbiAqL1xyXG52YXIgV2lkZ2V0QmFzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQGNvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIFdpZGdldEJhc2UoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbmRpY2F0ZXMgaWYgaXQgaXMgdGhlIGluaXRpYWwgc2V0IHByb3BlcnRpZXMgY3ljbGVcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9pbml0aWFsUHJvcGVydGllcyA9IHRydWU7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXJyYXkgb2YgcHJvcGVydHkga2V5cyBjb25zaWRlcmVkIGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgc2V0IHByb3BlcnRpZXNcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gW107XHJcbiAgICAgICAgdGhpcy5fbm9kZUhhbmRsZXIgPSBuZXcgTm9kZUhhbmRsZXJfMS5kZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2NoaWxkcmVuID0gW107XHJcbiAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUgPSBuZXcgTWFwXzEuZGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSB7fTtcclxuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlckZ1bmMgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSA9IHRoaXMuaW52YWxpZGF0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHZkb21fMS53aWRnZXRJbnN0YW5jZU1hcC5zZXQodGhpcywge1xyXG4gICAgICAgICAgICBkaXJ0eTogdHJ1ZSxcclxuICAgICAgICAgICAgb25BdHRhY2g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm9uQXR0YWNoKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uRGV0YWNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5vbkRldGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBub2RlSGFuZGxlcjogdGhpcy5fbm9kZUhhbmRsZXIsXHJcbiAgICAgICAgICAgIHJlZ2lzdHJ5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMucmVnaXN0cnk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvcmVQcm9wZXJ0aWVzOiB7fSxcclxuICAgICAgICAgICAgcmVuZGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgaW5wdXRQcm9wZXJ0aWVzOiB7fVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3J1bkFmdGVyQ29uc3RydWN0b3JzKCk7XHJcbiAgICB9XHJcbiAgICBXaWRnZXRCYXNlLnByb3RvdHlwZS5tZXRhID0gZnVuY3Rpb24gKE1ldGFUeXBlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21ldGFNYXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXRhTWFwID0gbmV3IE1hcF8xLmRlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNhY2hlZCA9IHRoaXMuX21ldGFNYXAuZ2V0KE1ldGFUeXBlKTtcclxuICAgICAgICBpZiAoIWNhY2hlZCkge1xyXG4gICAgICAgICAgICBjYWNoZWQgPSBuZXcgTWV0YVR5cGUoe1xyXG4gICAgICAgICAgICAgICAgaW52YWxpZGF0ZTogdGhpcy5fYm91bmRJbnZhbGlkYXRlLFxyXG4gICAgICAgICAgICAgICAgbm9kZUhhbmRsZXI6IHRoaXMuX25vZGVIYW5kbGVyLFxyXG4gICAgICAgICAgICAgICAgYmluZDogdGhpc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5vd24oY2FjaGVkKTtcclxuICAgICAgICAgICAgdGhpcy5fbWV0YU1hcC5zZXQoTWV0YVR5cGUsIGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYWNoZWQ7XHJcbiAgICB9O1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUub25BdHRhY2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBieSBkZWZhdWx0LlxyXG4gICAgfTtcclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLm9uRGV0YWNoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgYnkgZGVmYXVsdC5cclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2lkZ2V0QmFzZS5wcm90b3R5cGUsIFwicHJvcGVydGllc1wiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpZGdldEJhc2UucHJvdG90eXBlLCBcImNoYW5nZWRQcm9wZXJ0eUtleXNcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHNsaWJfMS5fX3NwcmVhZCh0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLl9fc2V0Q29yZVByb3BlcnRpZXNfXyA9IGZ1bmN0aW9uIChjb3JlUHJvcGVydGllcykge1xyXG4gICAgICAgIHZhciBiYXNlUmVnaXN0cnkgPSBjb3JlUHJvcGVydGllcy5iYXNlUmVnaXN0cnk7XHJcbiAgICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IHZkb21fMS53aWRnZXRJbnN0YW5jZU1hcC5nZXQodGhpcyk7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5jb3JlUHJvcGVydGllcy5iYXNlUmVnaXN0cnkgIT09IGJhc2VSZWdpc3RyeSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVnaXN0cnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnlIYW5kbGVyXzEuZGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vd24odGhpcy5fcmVnaXN0cnkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vd24odGhpcy5fcmVnaXN0cnkub24oJ2ludmFsaWRhdGUnLCB0aGlzLl9ib3VuZEludmFsaWRhdGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZWdpc3RyeS5iYXNlID0gYmFzZVJlZ2lzdHJ5O1xyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLmNvcmVQcm9wZXJ0aWVzID0gY29yZVByb3BlcnRpZXM7XHJcbiAgICB9O1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUuX19zZXRQcm9wZXJ0aWVzX18gPSBmdW5jdGlvbiAob3JpZ2luYWxQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gdmRvbV8xLndpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcclxuICAgICAgICBpbnN0YW5jZURhdGEuaW5wdXRQcm9wZXJ0aWVzID0gb3JpZ2luYWxQcm9wZXJ0aWVzO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5fcnVuQmVmb3JlUHJvcGVydGllcyhvcmlnaW5hbFByb3BlcnRpZXMpO1xyXG4gICAgICAgIHZhciByZWdpc3RlcmVkRGlmZlByb3BlcnR5TmFtZXMgPSB0aGlzLmdldERlY29yYXRvcigncmVnaXN0ZXJlZERpZmZQcm9wZXJ0eScpO1xyXG4gICAgICAgIHZhciBjaGFuZ2VkUHJvcGVydHlLZXlzID0gW107XHJcbiAgICAgICAgdmFyIHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcclxuICAgICAgICBpZiAodGhpcy5faW5pdGlhbFByb3BlcnRpZXMgPT09IGZhbHNlIHx8IHJlZ2lzdGVyZWREaWZmUHJvcGVydHlOYW1lcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgdmFyIGFsbFByb3BlcnRpZXMgPSB0c2xpYl8xLl9fc3ByZWFkKHByb3BlcnR5TmFtZXMsIE9iamVjdC5rZXlzKHRoaXMuX3Byb3BlcnRpZXMpKTtcclxuICAgICAgICAgICAgdmFyIGNoZWNrZWRQcm9wZXJ0aWVzID0gW107XHJcbiAgICAgICAgICAgIHZhciBkaWZmUHJvcGVydHlSZXN1bHRzXzEgPSB7fTtcclxuICAgICAgICAgICAgdmFyIHJ1blJlYWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrZWRQcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNoZWNrZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c1Byb3BlcnR5ID0gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1Byb3BlcnR5ID0gdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHkocHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLCBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMuYmluZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZERpZmZQcm9wZXJ0eU5hbWVzLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBydW5SZWFjdGlvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWZmRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoXCJkaWZmUHJvcGVydHk6XCIgKyBwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlfMSA9IDA7IGlfMSA8IGRpZmZGdW5jdGlvbnMubGVuZ3RoOyBpXzErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZGlmZkZ1bmN0aW9uc1tpXzFdKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VkICYmIGNoYW5nZWRQcm9wZXJ0eUtleXMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmUHJvcGVydHlSZXN1bHRzXzFbcHJvcGVydHlOYW1lXSA9IHJlc3VsdC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBib3VuZEF1dG8ocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlZCAmJiBjaGFuZ2VkUHJvcGVydHlLZXlzLmluZGV4T2YocHJvcGVydHlOYW1lKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnR5S2V5cy5wdXNoKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWZmUHJvcGVydHlSZXN1bHRzXzFbcHJvcGVydHlOYW1lXSA9IHJlc3VsdC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJ1blJlYWN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlYWN0aW9uRnVuY3Rpb25zID0gdGhpcy5nZXREZWNvcmF0b3IoJ2RpZmZSZWFjdGlvbicpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGV4ZWN1dGVkUmVhY3Rpb25zXzEgPSBbXTtcclxuICAgICAgICAgICAgICAgIHJlYWN0aW9uRnVuY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKF9hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWN0aW9uID0gX2EucmVhY3Rpb24sIHByb3BlcnR5TmFtZSA9IF9hLnByb3BlcnR5TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHlDaGFuZ2VkID0gY2hhbmdlZFByb3BlcnR5S2V5cy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZWFjdGlvblJ1biA9IGV4ZWN1dGVkUmVhY3Rpb25zXzEuaW5kZXhPZihyZWFjdGlvbikgIT09IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUNoYW5nZWQgJiYgIXJlYWN0aW9uUnVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmNhbGwoX3RoaXMsIF90aGlzLl9wcm9wZXJ0aWVzLCBkaWZmUHJvcGVydHlSZXN1bHRzXzEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZFJlYWN0aW9uc18xLnB1c2gocmVhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBkaWZmUHJvcGVydHlSZXN1bHRzXzE7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRQcm9wZXJ0eUtleXMgPSBjaGFuZ2VkUHJvcGVydHlLZXlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbFByb3BlcnRpZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdGhpcy5fYmluZEZ1bmN0aW9uUHJvcGVydHkocHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLCBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMuYmluZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkUHJvcGVydHlLZXlzLnB1c2gocHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VkUHJvcGVydHlLZXlzID0gY2hhbmdlZFByb3BlcnR5S2V5cztcclxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHRzbGliXzEuX19hc3NpZ24oe30sIHByb3BlcnRpZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fY2hhbmdlZFByb3BlcnR5S2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2lkZ2V0QmFzZS5wcm90b3R5cGUsIFwiY2hpbGRyZW5cIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBXaWRnZXRCYXNlLnByb3RvdHlwZS5fX3NldENoaWxkcmVuX18gPSBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcclxuICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW4ubGVuZ3RoID4gMCB8fCBjaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBXaWRnZXRCYXNlLnByb3RvdHlwZS5fX3JlbmRlcl9fID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpbnN0YW5jZURhdGEgPSB2ZG9tXzEud2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHRoaXMpO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YS5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciByZW5kZXIgPSB0aGlzLl9ydW5CZWZvcmVSZW5kZXJzKCk7XHJcbiAgICAgICAgdmFyIGROb2RlID0gcmVuZGVyKCk7XHJcbiAgICAgICAgZE5vZGUgPSB0aGlzLnJ1bkFmdGVyUmVuZGVycyhkTm9kZSk7XHJcbiAgICAgICAgdGhpcy5fbm9kZUhhbmRsZXIuY2xlYXIoKTtcclxuICAgICAgICByZXR1cm4gZE5vZGU7XHJcbiAgICB9O1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUuaW52YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gdmRvbV8xLndpZGdldEluc3RhbmNlTWFwLmdldCh0aGlzKTtcclxuICAgICAgICBpZiAoaW5zdGFuY2VEYXRhLmludmFsaWRhdGUpIHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLmludmFsaWRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBkXzEudignZGl2Jywge30sIHRoaXMuY2hpbGRyZW4pO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb24gdG8gYWRkIGRlY29yYXRvcnMgdG8gV2lkZ2V0QmFzZVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBkZWNvcmF0b3JLZXkgVGhlIGtleSBvZiB0aGUgZGVjb3JhdG9yXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBkZWNvcmF0b3JcclxuICAgICAqL1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUuYWRkRGVjb3JhdG9yID0gZnVuY3Rpb24gKGRlY29yYXRvcktleSwgdmFsdWUpIHtcclxuICAgICAgICB2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KCdjb25zdHJ1Y3RvcicpKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNvcmF0b3JMaXN0ID0gZGVjb3JhdG9yTWFwLmdldCh0aGlzLmNvbnN0cnVjdG9yKTtcclxuICAgICAgICAgICAgaWYgKCFkZWNvcmF0b3JMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JMaXN0ID0gbmV3IE1hcF8xLmRlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGRlY29yYXRvck1hcC5zZXQodGhpcy5jb25zdHJ1Y3RvciwgZGVjb3JhdG9yTGlzdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHNwZWNpZmljRGVjb3JhdG9yTGlzdCA9IGRlY29yYXRvckxpc3QuZ2V0KGRlY29yYXRvcktleSk7XHJcbiAgICAgICAgICAgIGlmICghc3BlY2lmaWNEZWNvcmF0b3JMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBzcGVjaWZpY0RlY29yYXRvckxpc3QgPSBbXTtcclxuICAgICAgICAgICAgICAgIGRlY29yYXRvckxpc3Quc2V0KGRlY29yYXRvcktleSwgc3BlY2lmaWNEZWNvcmF0b3JMaXN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzcGVjaWZpY0RlY29yYXRvckxpc3QucHVzaC5hcHBseShzcGVjaWZpY0RlY29yYXRvckxpc3QsIHRzbGliXzEuX19zcHJlYWQodmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNvcmF0b3JzID0gdGhpcy5nZXREZWNvcmF0b3IoZGVjb3JhdG9yS2V5KTtcclxuICAgICAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgdHNsaWJfMS5fX3NwcmVhZChkZWNvcmF0b3JzLCB2YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHRvIGJ1aWxkIHRoZSBsaXN0IG9mIGRlY29yYXRvcnMgZnJvbSB0aGUgZ2xvYmFsIGRlY29yYXRvciBtYXAuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGRlY29yYXRvcktleSAgVGhlIGtleSBvZiB0aGUgZGVjb3JhdG9yXHJcbiAgICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIGRlY29yYXRvciB2YWx1ZXNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLl9idWlsZERlY29yYXRvckxpc3QgPSBmdW5jdGlvbiAoZGVjb3JhdG9yS2V5KSB7XHJcbiAgICAgICAgdmFyIGFsbERlY29yYXRvcnMgPSBbXTtcclxuICAgICAgICB2YXIgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xyXG4gICAgICAgIHdoaWxlIChjb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICB2YXIgaW5zdGFuY2VNYXAgPSBkZWNvcmF0b3JNYXAuZ2V0KGNvbnN0cnVjdG9yKTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlTWFwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGVjb3JhdG9ycyA9IGluc3RhbmNlTWFwLmdldChkZWNvcmF0b3JLZXkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlY29yYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGxEZWNvcmF0b3JzLnVuc2hpZnQuYXBwbHkoYWxsRGVjb3JhdG9ycywgdHNsaWJfMS5fX3NwcmVhZChkZWNvcmF0b3JzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY29uc3RydWN0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWxsRGVjb3JhdG9ycztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHRvIHJldHJpZXZlIGRlY29yYXRvciB2YWx1ZXNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZGVjb3JhdG9yS2V5IFRoZSBrZXkgb2YgdGhlIGRlY29yYXRvclxyXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZGVjb3JhdG9yIHZhbHVlc1xyXG4gICAgICovXHJcbiAgICBXaWRnZXRCYXNlLnByb3RvdHlwZS5nZXREZWNvcmF0b3IgPSBmdW5jdGlvbiAoZGVjb3JhdG9yS2V5KSB7XHJcbiAgICAgICAgdmFyIGFsbERlY29yYXRvcnMgPSB0aGlzLl9kZWNvcmF0b3JDYWNoZS5nZXQoZGVjb3JhdG9yS2V5KTtcclxuICAgICAgICBpZiAoYWxsRGVjb3JhdG9ycyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGxEZWNvcmF0b3JzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbGxEZWNvcmF0b3JzID0gdGhpcy5fYnVpbGREZWNvcmF0b3JMaXN0KGRlY29yYXRvcktleSk7XHJcbiAgICAgICAgdGhpcy5fZGVjb3JhdG9yQ2FjaGUuc2V0KGRlY29yYXRvcktleSwgYWxsRGVjb3JhdG9ycyk7XHJcbiAgICAgICAgcmV0dXJuIGFsbERlY29yYXRvcnM7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBCaW5kcyB1bmJvdW5kIHByb3BlcnR5IGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBiaW5kYCBwcm9wZXJ0eVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIHByb3BlcnRpZXMgdG8gY2hlY2sgZm9yIGZ1bmN0aW9uc1xyXG4gICAgICovXHJcbiAgICBXaWRnZXRCYXNlLnByb3RvdHlwZS5fYmluZEZ1bmN0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHksIGJpbmQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAnZnVuY3Rpb24nICYmICFwcm9wZXJ0eVtleHBvcnRzLm5vQmluZF0gJiYgUmVnaXN0cnlfMS5pc1dpZGdldEJhc2VDb25zdHJ1Y3Rvcihwcm9wZXJ0eSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRnVuY3Rpb25Qcm9wZXJ0eU1hcCA9IG5ldyBXZWFrTWFwXzEuZGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBiaW5kSW5mbyA9IHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwLmdldChwcm9wZXJ0eSkgfHwge307XHJcbiAgICAgICAgICAgIHZhciBib3VuZEZ1bmMgPSBiaW5kSW5mby5ib3VuZEZ1bmMsIHNjb3BlID0gYmluZEluZm8uc2NvcGU7XHJcbiAgICAgICAgICAgIGlmIChib3VuZEZ1bmMgPT09IHVuZGVmaW5lZCB8fCBzY29wZSAhPT0gYmluZCkge1xyXG4gICAgICAgICAgICAgICAgYm91bmRGdW5jID0gcHJvcGVydHkuYmluZChiaW5kKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2JpbmRGdW5jdGlvblByb3BlcnR5TWFwLnNldChwcm9wZXJ0eSwgeyBib3VuZEZ1bmM6IGJvdW5kRnVuYywgc2NvcGU6IGJpbmQgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGJvdW5kRnVuYztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xyXG4gICAgfTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaWRnZXRCYXNlLnByb3RvdHlwZSwgXCJyZWdpc3RyeVwiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZWdpc3RyeSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeUhhbmRsZXJfMS5kZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm93bih0aGlzLl9yZWdpc3RyeS5vbignaW52YWxpZGF0ZScsIHRoaXMuX2JvdW5kSW52YWxpZGF0ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RyeTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLl9ydW5CZWZvcmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBiZWZvcmVQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnKTtcclxuICAgICAgICBpZiAoYmVmb3JlUHJvcGVydGllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAocHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2Fzc2lnbih7fSwgcHJvcGVydGllcywgYmVmb3JlUHJvcGVydGllc0Z1bmN0aW9uLmNhbGwoX3RoaXMsIHByb3BlcnRpZXMpKTtcclxuICAgICAgICAgICAgfSwgdHNsaWJfMS5fX2Fzc2lnbih7fSwgcHJvcGVydGllcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJ1biBhbGwgcmVnaXN0ZXJlZCBiZWZvcmUgcmVuZGVycyBhbmQgcmV0dXJuIHRoZSB1cGRhdGVkIHJlbmRlciBtZXRob2RcclxuICAgICAqL1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUuX3J1bkJlZm9yZVJlbmRlcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgYmVmb3JlUmVuZGVycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiZWZvcmVSZW5kZXInKTtcclxuICAgICAgICBpZiAoYmVmb3JlUmVuZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiZWZvcmVSZW5kZXJzLnJlZHVjZShmdW5jdGlvbiAocmVuZGVyLCBiZWZvcmVSZW5kZXJGdW5jdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHVwZGF0ZWRSZW5kZXIgPSBiZWZvcmVSZW5kZXJGdW5jdGlvbi5jYWxsKF90aGlzLCByZW5kZXIsIF90aGlzLl9wcm9wZXJ0aWVzLCBfdGhpcy5fY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVuZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZW5kZXIgZnVuY3Rpb24gbm90IHJldHVybmVkIGZyb20gYmVmb3JlUmVuZGVyLCB1c2luZyBwcmV2aW91cyByZW5kZXInKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWRSZW5kZXI7XHJcbiAgICAgICAgICAgIH0sIHRoaXMuX2JvdW5kUmVuZGVyRnVuYyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9ib3VuZFJlbmRlckZ1bmM7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSdW4gYWxsIHJlZ2lzdGVyZWQgYWZ0ZXIgcmVuZGVycyBhbmQgcmV0dXJuIHRoZSBkZWNvcmF0ZWQgRE5vZGVzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGROb2RlIFRoZSBETm9kZXMgdG8gcnVuIHRocm91Z2ggdGhlIGFmdGVyIHJlbmRlcnNcclxuICAgICAqL1xyXG4gICAgV2lkZ2V0QmFzZS5wcm90b3R5cGUucnVuQWZ0ZXJSZW5kZXJzID0gZnVuY3Rpb24gKGROb2RlKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgYWZ0ZXJSZW5kZXJzID0gdGhpcy5nZXREZWNvcmF0b3IoJ2FmdGVyUmVuZGVyJyk7XHJcbiAgICAgICAgaWYgKGFmdGVyUmVuZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGROb2RlID0gYWZ0ZXJSZW5kZXJzLnJlZHVjZShmdW5jdGlvbiAoZE5vZGUsIGFmdGVyUmVuZGVyRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhZnRlclJlbmRlckZ1bmN0aW9uLmNhbGwoX3RoaXMsIGROb2RlKTtcclxuICAgICAgICAgICAgfSwgZE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbWV0YU1hcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21ldGFNYXAuZm9yRWFjaChmdW5jdGlvbiAobWV0YSkge1xyXG4gICAgICAgICAgICAgICAgbWV0YS5hZnRlclJlbmRlcigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGROb2RlO1xyXG4gICAgfTtcclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLl9ydW5BZnRlckNvbnN0cnVjdG9ycyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBhZnRlckNvbnN0cnVjdG9ycyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdhZnRlckNvbnN0cnVjdG9yJyk7XHJcbiAgICAgICAgaWYgKGFmdGVyQ29uc3RydWN0b3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYWZ0ZXJDb25zdHJ1Y3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoYWZ0ZXJDb25zdHJ1Y3RvcikgeyByZXR1cm4gYWZ0ZXJDb25zdHJ1Y3Rvci5jYWxsKF90aGlzKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFdpZGdldEJhc2UucHJvdG90eXBlLm93biA9IGZ1bmN0aW9uIChoYW5kbGUpIHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVzLnB1c2goaGFuZGxlKTtcclxuICAgIH07XHJcbiAgICBXaWRnZXRCYXNlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLl9oYW5kbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IHRoaXMuX2hhbmRsZXMucG9wKCk7XHJcbiAgICAgICAgICAgIGlmIChoYW5kbGUpIHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZS5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBzdGF0aWMgaWRlbnRpZmllclxyXG4gICAgICovXHJcbiAgICBXaWRnZXRCYXNlLl90eXBlID0gUmVnaXN0cnlfMS5XSURHRVRfQkFTRV9UWVBFO1xyXG4gICAgcmV0dXJuIFdpZGdldEJhc2U7XHJcbn0oKSk7XHJcbmV4cG9ydHMuV2lkZ2V0QmFzZSA9IFdpZGdldEJhc2U7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IFdpZGdldEJhc2U7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL1dpZGdldEJhc2UuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9XaWRnZXRCYXNlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lID0gJyc7XHJcbnZhciBicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnJztcclxuZnVuY3Rpb24gZGV0ZXJtaW5lQnJvd3NlclN0eWxlTmFtZXMoZWxlbWVudCkge1xyXG4gICAgaWYgKCdXZWJraXRUcmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlKSB7XHJcbiAgICAgICAgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICd3ZWJraXRUcmFuc2l0aW9uRW5kJztcclxuICAgICAgICBicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnd2Via2l0QW5pbWF0aW9uRW5kJztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCd0cmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlIHx8ICdNb3pUcmFuc2l0aW9uJyBpbiBlbGVtZW50LnN0eWxlKSB7XHJcbiAgICAgICAgYnJvd3NlclNwZWNpZmljVHJhbnNpdGlvbkVuZEV2ZW50TmFtZSA9ICd0cmFuc2l0aW9uZW5kJztcclxuICAgICAgICBicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPSAnYW5pbWF0aW9uZW5kJztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91ciBicm93c2VyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpbml0aWFsaXplKGVsZW1lbnQpIHtcclxuICAgIGlmIChicm93c2VyU3BlY2lmaWNBbmltYXRpb25FbmRFdmVudE5hbWUgPT09ICcnKSB7XHJcbiAgICAgICAgZGV0ZXJtaW5lQnJvd3NlclN0eWxlTmFtZXMoZWxlbWVudCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcnVuQW5kQ2xlYW5VcChlbGVtZW50LCBzdGFydEFuaW1hdGlvbiwgZmluaXNoQW5pbWF0aW9uKSB7XHJcbiAgICBpbml0aWFsaXplKGVsZW1lbnQpO1xyXG4gICAgdmFyIGZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICB2YXIgdHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIWZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGJyb3dzZXJTcGVjaWZpY1RyYW5zaXRpb25FbmRFdmVudE5hbWUsIHRyYW5zaXRpb25FbmQpO1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcclxuICAgICAgICAgICAgZmluaXNoQW5pbWF0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHN0YXJ0QW5pbWF0aW9uKCk7XHJcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYnJvd3NlclNwZWNpZmljQW5pbWF0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcclxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihicm93c2VyU3BlY2lmaWNUcmFuc2l0aW9uRW5kRXZlbnROYW1lLCB0cmFuc2l0aW9uRW5kKTtcclxufVxyXG5mdW5jdGlvbiBleGl0KG5vZGUsIHByb3BlcnRpZXMsIGV4aXRBbmltYXRpb24sIHJlbW92ZU5vZGUpIHtcclxuICAgIHZhciBhY3RpdmVDbGFzcyA9IHByb3BlcnRpZXMuZXhpdEFuaW1hdGlvbkFjdGl2ZSB8fCBleGl0QW5pbWF0aW9uICsgXCItYWN0aXZlXCI7XHJcbiAgICBydW5BbmRDbGVhblVwKG5vZGUsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoZXhpdEFuaW1hdGlvbik7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZW1vdmVOb2RlKCk7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBlbnRlcihub2RlLCBwcm9wZXJ0aWVzLCBlbnRlckFuaW1hdGlvbikge1xyXG4gICAgdmFyIGFjdGl2ZUNsYXNzID0gcHJvcGVydGllcy5lbnRlckFuaW1hdGlvbkFjdGl2ZSB8fCBlbnRlckFuaW1hdGlvbiArIFwiLWFjdGl2ZVwiO1xyXG4gICAgcnVuQW5kQ2xlYW5VcChub2RlLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGVudGVyQW5pbWF0aW9uKTtcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoYWN0aXZlQ2xhc3MpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShlbnRlckFuaW1hdGlvbik7XHJcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGFjdGl2ZUNsYXNzKTtcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IHtcclxuICAgIGVudGVyOiBlbnRlcixcclxuICAgIGV4aXQ6IGV4aXRcclxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvYW5pbWF0aW9ucy9jc3NUcmFuc2l0aW9ucy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2FuaW1hdGlvbnMvY3NzVHJhbnNpdGlvbnMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBTeW1ib2xfMSA9IHJlcXVpcmUoXCIuLi9zaGltL1N5bWJvbFwiKTtcclxuLyoqXHJcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBXTm9kZSB0eXBlXHJcbiAqL1xyXG5leHBvcnRzLldOT0RFID0gU3ltYm9sXzEuZGVmYXVsdCgnSWRlbnRpZmllciBmb3IgYSBXTm9kZS4nKTtcclxuLyoqXHJcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBWTm9kZSB0eXBlXHJcbiAqL1xyXG5leHBvcnRzLlZOT0RFID0gU3ltYm9sXzEuZGVmYXVsdCgnSWRlbnRpZmllciBmb3IgYSBWTm9kZS4nKTtcclxuLyoqXHJcbiAqIFRoZSBzeW1ib2wgaWRlbnRpZmllciBmb3IgYSBWTm9kZSB0eXBlIGNyZWF0ZWQgdXNpbmcgZG9tKClcclxuICovXHJcbmV4cG9ydHMuRE9NVk5PREUgPSBTeW1ib2xfMS5kZWZhdWx0KCdJZGVudGlmaWVyIGZvciBhIFZOb2RlIGNyZWF0ZWQgdXNpbmcgZXhpc3RpbmcgZG9tLicpO1xyXG4vKipcclxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBgRE5vZGVgIGlzIGEgYFdOb2RlYCB1c2luZyB0aGUgYHR5cGVgIHByb3BlcnR5XHJcbiAqL1xyXG5mdW5jdGlvbiBpc1dOb2RlKGNoaWxkKSB7XHJcbiAgICByZXR1cm4gQm9vbGVhbihjaGlsZCAmJiB0eXBlb2YgY2hpbGQgIT09ICdzdHJpbmcnICYmIGNoaWxkLnR5cGUgPT09IGV4cG9ydHMuV05PREUpO1xyXG59XHJcbmV4cG9ydHMuaXNXTm9kZSA9IGlzV05vZGU7XHJcbi8qKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgVk5vZGVgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcclxuICovXHJcbmZ1bmN0aW9uIGlzVk5vZGUoY2hpbGQpIHtcclxuICAgIHJldHVybiBCb29sZWFuKGNoaWxkICYmIHR5cGVvZiBjaGlsZCAhPT0gJ3N0cmluZycgJiYgKGNoaWxkLnR5cGUgPT09IGV4cG9ydHMuVk5PREUgfHwgY2hpbGQudHlwZSA9PT0gZXhwb3J0cy5ET01WTk9ERSkpO1xyXG59XHJcbmV4cG9ydHMuaXNWTm9kZSA9IGlzVk5vZGU7XHJcbi8qKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGBETm9kZWAgaXMgYSBgVk5vZGVgIGNyZWF0ZWQgd2l0aCBgZG9tKClgIHVzaW5nIHRoZSBgdHlwZWAgcHJvcGVydHlcclxuICovXHJcbmZ1bmN0aW9uIGlzRG9tVk5vZGUoY2hpbGQpIHtcclxuICAgIHJldHVybiBCb29sZWFuKGNoaWxkICYmIHR5cGVvZiBjaGlsZCAhPT0gJ3N0cmluZycgJiYgY2hpbGQudHlwZSA9PT0gZXhwb3J0cy5ET01WTk9ERSk7XHJcbn1cclxuZXhwb3J0cy5pc0RvbVZOb2RlID0gaXNEb21WTm9kZTtcclxuZnVuY3Rpb24gaXNFbGVtZW50Tm9kZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuICEhdmFsdWUudGFnTmFtZTtcclxufVxyXG5leHBvcnRzLmlzRWxlbWVudE5vZGUgPSBpc0VsZW1lbnROb2RlO1xyXG5mdW5jdGlvbiBkZWNvcmF0ZShkTm9kZXMsIG9wdGlvbnNPck1vZGlmaWVyLCBwcmVkaWNhdGUpIHtcclxuICAgIHZhciBzaGFsbG93ID0gZmFsc2U7XHJcbiAgICB2YXIgbW9kaWZpZXI7XHJcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNPck1vZGlmaWVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgbW9kaWZpZXIgPSBvcHRpb25zT3JNb2RpZmllcjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIG1vZGlmaWVyID0gb3B0aW9uc09yTW9kaWZpZXIubW9kaWZpZXI7XHJcbiAgICAgICAgcHJlZGljYXRlID0gb3B0aW9uc09yTW9kaWZpZXIucHJlZGljYXRlO1xyXG4gICAgICAgIHNoYWxsb3cgPSBvcHRpb25zT3JNb2RpZmllci5zaGFsbG93IHx8IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdmFyIG5vZGVzID0gQXJyYXkuaXNBcnJheShkTm9kZXMpID8gdHNsaWJfMS5fX3NwcmVhZChkTm9kZXMpIDogW2ROb2Rlc107XHJcbiAgICBmdW5jdGlvbiBicmVha2VyKCkge1xyXG4gICAgICAgIG5vZGVzID0gW107XHJcbiAgICB9XHJcbiAgICB3aGlsZSAobm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlcy5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgIGlmICghc2hhbGxvdyAmJiAoaXNXTm9kZShub2RlKSB8fCBpc1ZOb2RlKG5vZGUpKSAmJiBub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlcyA9IHRzbGliXzEuX19zcHJlYWQobm9kZXMsIG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZShub2RlKSkge1xyXG4gICAgICAgICAgICAgICAgbW9kaWZpZXIobm9kZSwgYnJlYWtlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZE5vZGVzO1xyXG59XHJcbmV4cG9ydHMuZGVjb3JhdGUgPSBkZWNvcmF0ZTtcclxuLyoqXHJcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIGNhbGxzIHRvIGNyZWF0ZSBhIHdpZGdldC5cclxuICovXHJcbmZ1bmN0aW9uIHcod2lkZ2V0Q29uc3RydWN0b3IsIHByb3BlcnRpZXMsIGNoaWxkcmVuKSB7XHJcbiAgICBpZiAoY2hpbGRyZW4gPT09IHZvaWQgMCkgeyBjaGlsZHJlbiA9IFtdOyB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcclxuICAgICAgICB3aWRnZXRDb25zdHJ1Y3Rvcjogd2lkZ2V0Q29uc3RydWN0b3IsXHJcbiAgICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyxcclxuICAgICAgICB0eXBlOiBleHBvcnRzLldOT0RFXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMudyA9IHc7XHJcbmZ1bmN0aW9uIHYodGFnLCBwcm9wZXJ0aWVzT3JDaGlsZHJlbiwgY2hpbGRyZW4pIHtcclxuICAgIGlmIChwcm9wZXJ0aWVzT3JDaGlsZHJlbiA9PT0gdm9pZCAwKSB7IHByb3BlcnRpZXNPckNoaWxkcmVuID0ge307IH1cclxuICAgIGlmIChjaGlsZHJlbiA9PT0gdm9pZCAwKSB7IGNoaWxkcmVuID0gdW5kZWZpbmVkOyB9XHJcbiAgICB2YXIgcHJvcGVydGllcyA9IHByb3BlcnRpZXNPckNoaWxkcmVuO1xyXG4gICAgdmFyIGRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydGllc09yQ2hpbGRyZW4pKSB7XHJcbiAgICAgICAgY2hpbGRyZW4gPSBwcm9wZXJ0aWVzT3JDaGlsZHJlbjtcclxuICAgICAgICBwcm9wZXJ0aWVzID0ge307XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBkZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9IHByb3BlcnRpZXM7XHJcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0YWc6IHRhZyxcclxuICAgICAgICBkZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjazogZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2ssXHJcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMsXHJcbiAgICAgICAgdHlwZTogZXhwb3J0cy5WTk9ERVxyXG4gICAgfTtcclxufVxyXG5leHBvcnRzLnYgPSB2O1xyXG4vKipcclxuICogQ3JlYXRlIGEgVk5vZGUgZm9yIGFuIGV4aXN0aW5nIERPTSBOb2RlLlxyXG4gKi9cclxuZnVuY3Rpb24gZG9tKF9hLCBjaGlsZHJlbikge1xyXG4gICAgdmFyIG5vZGUgPSBfYS5ub2RlLCBfYiA9IF9hLmF0dHJzLCBhdHRycyA9IF9iID09PSB2b2lkIDAgPyB7fSA6IF9iLCBfYyA9IF9hLnByb3BzLCBwcm9wcyA9IF9jID09PSB2b2lkIDAgPyB7fSA6IF9jLCBfZCA9IF9hLm9uLCBvbiA9IF9kID09PSB2b2lkIDAgPyB7fSA6IF9kLCBfZSA9IF9hLmRpZmZUeXBlLCBkaWZmVHlwZSA9IF9lID09PSB2b2lkIDAgPyAnbm9uZScgOiBfZTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdGFnOiBpc0VsZW1lbnROb2RlKG5vZGUpID8gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgOiAnJyxcclxuICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wcyxcclxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRycyxcclxuICAgICAgICBldmVudHM6IG9uLFxyXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcclxuICAgICAgICB0eXBlOiBleHBvcnRzLkRPTVZOT0RFLFxyXG4gICAgICAgIGRvbU5vZGU6IG5vZGUsXHJcbiAgICAgICAgdGV4dDogaXNFbGVtZW50Tm9kZShub2RlKSA/IHVuZGVmaW5lZCA6IG5vZGUuZGF0YSxcclxuICAgICAgICBkaWZmVHlwZTogZGlmZlR5cGVcclxuICAgIH07XHJcbn1cclxuZXhwb3J0cy5kb20gPSBkb207XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2QuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBoYW5kbGVEZWNvcmF0b3JfMSA9IHJlcXVpcmUoXCIuL2hhbmRsZURlY29yYXRvclwiKTtcclxuZnVuY3Rpb24gYWZ0ZXJSZW5kZXIobWV0aG9kKSB7XHJcbiAgICByZXR1cm4gaGFuZGxlRGVjb3JhdG9yXzEuaGFuZGxlRGVjb3JhdG9yKGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XHJcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYWZ0ZXJSZW5kZXInLCBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiBtZXRob2QpO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5hZnRlclJlbmRlciA9IGFmdGVyUmVuZGVyO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBhZnRlclJlbmRlcjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hZnRlclJlbmRlci5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGhhbmRsZURlY29yYXRvcl8xID0gcmVxdWlyZShcIi4vaGFuZGxlRGVjb3JhdG9yXCIpO1xyXG52YXIgYmVmb3JlUHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vYmVmb3JlUHJvcGVydGllc1wiKTtcclxuZnVuY3Rpb24gYWx3YXlzUmVuZGVyKCkge1xyXG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcl8xLmhhbmRsZURlY29yYXRvcihmdW5jdGlvbiAodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xyXG4gICAgICAgIGJlZm9yZVByb3BlcnRpZXNfMS5iZWZvcmVQcm9wZXJ0aWVzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgfSkodGFyZ2V0KTtcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuYWx3YXlzUmVuZGVyID0gYWx3YXlzUmVuZGVyO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBhbHdheXNSZW5kZXI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9hbHdheXNSZW5kZXIuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGhhbmRsZURlY29yYXRvcl8xID0gcmVxdWlyZShcIi4vaGFuZGxlRGVjb3JhdG9yXCIpO1xyXG5mdW5jdGlvbiBiZWZvcmVQcm9wZXJ0aWVzKG1ldGhvZCkge1xyXG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcl8xLmhhbmRsZURlY29yYXRvcihmdW5jdGlvbiAodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xyXG4gICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoJ2JlZm9yZVByb3BlcnRpZXMnLCBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiBtZXRob2QpO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5iZWZvcmVQcm9wZXJ0aWVzID0gYmVmb3JlUHJvcGVydGllcztcclxuZXhwb3J0cy5kZWZhdWx0ID0gYmVmb3JlUHJvcGVydGllcztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9iZWZvcmVQcm9wZXJ0aWVzLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9iZWZvcmVQcm9wZXJ0aWVzLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciByZWdpc3RlckN1c3RvbUVsZW1lbnRfMSA9IHJlcXVpcmUoXCIuLi9yZWdpc3RlckN1c3RvbUVsZW1lbnRcIik7XHJcbnZhciBSZWdpc3RyeV8xID0gcmVxdWlyZShcIi4uL1JlZ2lzdHJ5XCIpO1xyXG4vKipcclxuICogVGhpcyBEZWNvcmF0b3IgaXMgcHJvdmlkZWQgcHJvcGVydGllcyB0aGF0IGRlZmluZSB0aGUgYmVoYXZpb3Igb2YgYSBjdXN0b20gZWxlbWVudCwgYW5kXHJcbiAqIHJlZ2lzdGVycyB0aGF0IGN1c3RvbSBlbGVtZW50LlxyXG4gKi9cclxuZnVuY3Rpb24gY3VzdG9tRWxlbWVudChfYSkge1xyXG4gICAgdmFyIHRhZyA9IF9hLnRhZywgX2IgPSBfYS5wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzID0gX2IgPT09IHZvaWQgMCA/IFtdIDogX2IsIF9jID0gX2EuYXR0cmlidXRlcywgYXR0cmlidXRlcyA9IF9jID09PSB2b2lkIDAgPyBbXSA6IF9jLCBfZCA9IF9hLmV2ZW50cywgZXZlbnRzID0gX2QgPT09IHZvaWQgMCA/IFtdIDogX2QsIF9lID0gX2EuY2hpbGRUeXBlLCBjaGlsZFR5cGUgPSBfZSA9PT0gdm9pZCAwID8gcmVnaXN0ZXJDdXN0b21FbGVtZW50XzEuQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPIDogX2UsIF9mID0gX2EucmVnaXN0cnlGYWN0b3J5LCByZWdpc3RyeUZhY3RvcnkgPSBfZiA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFJlZ2lzdHJ5XzEuZGVmYXVsdCgpOyB9IDogX2Y7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldC5wcm90b3R5cGUuX19jdXN0b21FbGVtZW50RGVzY3JpcHRvciA9IHtcclxuICAgICAgICAgICAgdGFnTmFtZTogdGFnLFxyXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgICBldmVudHM6IGV2ZW50cyxcclxuICAgICAgICAgICAgY2hpbGRUeXBlOiBjaGlsZFR5cGUsXHJcbiAgICAgICAgICAgIHJlZ2lzdHJ5RmFjdG9yeTogcmVnaXN0cnlGYWN0b3J5XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbn1cclxuZXhwb3J0cy5jdXN0b21FbGVtZW50ID0gY3VzdG9tRWxlbWVudDtcclxuZXhwb3J0cy5kZWZhdWx0ID0gY3VzdG9tRWxlbWVudDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9jdXN0b21FbGVtZW50LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9jdXN0b21FbGVtZW50LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBoYW5kbGVEZWNvcmF0b3JfMSA9IHJlcXVpcmUoXCIuL2hhbmRsZURlY29yYXRvclwiKTtcclxudmFyIGRpZmZfMSA9IHJlcXVpcmUoXCIuLy4uL2RpZmZcIik7XHJcbi8qKlxyXG4gKiBEZWNvcmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZWdpc3RlciBhIGZ1bmN0aW9uIGFzIGEgc3BlY2lmaWMgcHJvcGVydHkgZGlmZlxyXG4gKlxyXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lICBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgb2Ygd2hpY2ggdGhlIGRpZmYgZnVuY3Rpb24gaXMgYXBwbGllZFxyXG4gKiBAcGFyYW0gZGlmZlR5cGUgICAgICBUaGUgZGlmZiB0eXBlLCBkZWZhdWx0IGlzIERpZmZUeXBlLkFVVE8uXHJcbiAqIEBwYXJhbSBkaWZmRnVuY3Rpb24gIEEgZGlmZiBmdW5jdGlvbiB0byBydW4gaWYgZGlmZlR5cGUgaWYgRGlmZlR5cGUuQ1VTVE9NXHJcbiAqL1xyXG5mdW5jdGlvbiBkaWZmUHJvcGVydHkocHJvcGVydHlOYW1lLCBkaWZmRnVuY3Rpb24sIHJlYWN0aW9uRnVuY3Rpb24pIHtcclxuICAgIGlmIChkaWZmRnVuY3Rpb24gPT09IHZvaWQgMCkgeyBkaWZmRnVuY3Rpb24gPSBkaWZmXzEuYXV0bzsgfVxyXG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcl8xLmhhbmRsZURlY29yYXRvcihmdW5jdGlvbiAodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xyXG4gICAgICAgIHRhcmdldC5hZGREZWNvcmF0b3IoXCJkaWZmUHJvcGVydHk6XCIgKyBwcm9wZXJ0eU5hbWUsIGRpZmZGdW5jdGlvbi5iaW5kKG51bGwpKTtcclxuICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdyZWdpc3RlcmVkRGlmZlByb3BlcnR5JywgcHJvcGVydHlOYW1lKTtcclxuICAgICAgICBpZiAocmVhY3Rpb25GdW5jdGlvbiB8fCBwcm9wZXJ0eUtleSkge1xyXG4gICAgICAgICAgICB0YXJnZXQuYWRkRGVjb3JhdG9yKCdkaWZmUmVhY3Rpb24nLCB7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgICAgIHJlYWN0aW9uOiBwcm9wZXJ0eUtleSA/IHRhcmdldFtwcm9wZXJ0eUtleV0gOiByZWFjdGlvbkZ1bmN0aW9uXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuZGlmZlByb3BlcnR5ID0gZGlmZlByb3BlcnR5O1xyXG5leHBvcnRzLmRlZmF1bHQgPSBkaWZmUHJvcGVydHk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9kaWZmUHJvcGVydHkuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuLyoqXHJcbiAqIEdlbmVyaWMgZGVjb3JhdG9yIGhhbmRsZXIgdG8gdGFrZSBjYXJlIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBkZWNvcmF0b3Igd2FzIGNhbGxlZCBhdCB0aGUgY2xhc3MgbGV2ZWxcclxuICogb3IgdGhlIG1ldGhvZCBsZXZlbC5cclxuICpcclxuICogQHBhcmFtIGhhbmRsZXJcclxuICovXHJcbmZ1bmN0aW9uIGhhbmRsZURlY29yYXRvcihoYW5kbGVyKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBoYW5kbGVyKHRhcmdldC5wcm90b3R5cGUsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoYW5kbGVyKHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuZXhwb3J0cy5oYW5kbGVEZWNvcmF0b3IgPSBoYW5kbGVEZWNvcmF0b3I7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IGhhbmRsZURlY29yYXRvcjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9oYW5kbGVEZWNvcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kZWNvcmF0b3JzL2hhbmRsZURlY29yYXRvci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgV2Vha01hcF8xID0gcmVxdWlyZShcIi4uLy4uL3NoaW0vV2Vha01hcFwiKTtcclxudmFyIGhhbmRsZURlY29yYXRvcl8xID0gcmVxdWlyZShcIi4vaGFuZGxlRGVjb3JhdG9yXCIpO1xyXG52YXIgYmVmb3JlUHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vYmVmb3JlUHJvcGVydGllc1wiKTtcclxuLyoqXHJcbiAqIE1hcCBvZiBpbnN0YW5jZXMgYWdhaW5zdCByZWdpc3RlcmVkIGluamVjdG9ycy5cclxuICovXHJcbnZhciByZWdpc3RlcmVkSW5qZWN0b3JzTWFwID0gbmV3IFdlYWtNYXBfMS5kZWZhdWx0KCk7XHJcbi8qKlxyXG4gKiBEZWNvcmF0b3IgcmV0cmlldmVzIGFuIGluamVjdG9yIGZyb20gYW4gYXZhaWxhYmxlIHJlZ2lzdHJ5IHVzaW5nIHRoZSBuYW1lIGFuZFxyXG4gKiBjYWxscyB0aGUgYGdldFByb3BlcnRpZXNgIGZ1bmN0aW9uIHdpdGggdGhlIHBheWxvYWQgZnJvbSB0aGUgaW5qZWN0b3JcclxuICogYW5kIGN1cnJlbnQgcHJvcGVydGllcyB3aXRoIHRoZSB0aGUgaW5qZWN0ZWQgcHJvcGVydGllcyByZXR1cm5lZC5cclxuICpcclxuICogQHBhcmFtIEluamVjdENvbmZpZyB0aGUgaW5qZWN0IGNvbmZpZ3VyYXRpb25cclxuICovXHJcbmZ1bmN0aW9uIGluamVjdChfYSkge1xyXG4gICAgdmFyIG5hbWUgPSBfYS5uYW1lLCBnZXRQcm9wZXJ0aWVzID0gX2EuZ2V0UHJvcGVydGllcztcclxuICAgIHJldHVybiBoYW5kbGVEZWNvcmF0b3JfMS5oYW5kbGVEZWNvcmF0b3IoZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcclxuICAgICAgICBiZWZvcmVQcm9wZXJ0aWVzXzEuYmVmb3JlUHJvcGVydGllcyhmdW5jdGlvbiAocHJvcGVydGllcykge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICB2YXIgaW5qZWN0b3JJdGVtID0gdGhpcy5yZWdpc3RyeS5nZXRJbmplY3RvcihuYW1lKTtcclxuICAgICAgICAgICAgaWYgKGluamVjdG9ySXRlbSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluamVjdG9yID0gaW5qZWN0b3JJdGVtLmluamVjdG9yLCBpbnZhbGlkYXRvciA9IGluamVjdG9ySXRlbS5pbnZhbGlkYXRvcjtcclxuICAgICAgICAgICAgICAgIHZhciByZWdpc3RlcmVkSW5qZWN0b3JzID0gcmVnaXN0ZXJlZEluamVjdG9yc01hcC5nZXQodGhpcykgfHwgW107XHJcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0ZXJlZEluamVjdG9ycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkSW5qZWN0b3JzTWFwLnNldCh0aGlzLCByZWdpc3RlcmVkSW5qZWN0b3JzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZWdpc3RlcmVkSW5qZWN0b3JzLmluZGV4T2YoaW5qZWN0b3JJdGVtKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm93bihpbnZhbGlkYXRvci5vbignaW52YWxpZGF0ZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkSW5qZWN0b3JzLnB1c2goaW5qZWN0b3JJdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzKGluamVjdG9yKCksIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkodGFyZ2V0KTtcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuaW5qZWN0ID0gaW5qZWN0O1xyXG5leHBvcnRzLmRlZmF1bHQgPSBpbmplY3Q7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RlY29yYXRvcnMvaW5qZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGVjb3JhdG9ycy9pbmplY3QuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIFJlZ2lzdHJ5XzEgPSByZXF1aXJlKFwiLi9SZWdpc3RyeVwiKTtcclxuZnVuY3Rpb24gaXNPYmplY3RPckFycmF5KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbn1cclxuZnVuY3Rpb24gYWx3YXlzKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNoYW5nZWQ6IHRydWUsXHJcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMuYWx3YXlzID0gYWx3YXlzO1xyXG5mdW5jdGlvbiBpZ25vcmUocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY2hhbmdlZDogZmFsc2UsXHJcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMuaWdub3JlID0gaWdub3JlO1xyXG5mdW5jdGlvbiByZWZlcmVuY2UocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY2hhbmdlZDogcHJldmlvdXNQcm9wZXJ0eSAhPT0gbmV3UHJvcGVydHksXHJcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xyXG5mdW5jdGlvbiBzaGFsbG93KHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XHJcbiAgICB2YXIgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgdmFyIHZhbGlkT2xkUHJvcGVydHkgPSBwcmV2aW91c1Byb3BlcnR5ICYmIGlzT2JqZWN0T3JBcnJheShwcmV2aW91c1Byb3BlcnR5KTtcclxuICAgIHZhciB2YWxpZE5ld1Byb3BlcnR5ID0gbmV3UHJvcGVydHkgJiYgaXNPYmplY3RPckFycmF5KG5ld1Byb3BlcnR5KTtcclxuICAgIGlmICghdmFsaWRPbGRQcm9wZXJ0eSB8fCAhdmFsaWROZXdQcm9wZXJ0eSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNoYW5nZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiBuZXdQcm9wZXJ0eVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICB2YXIgcHJldmlvdXNLZXlzID0gT2JqZWN0LmtleXMocHJldmlvdXNQcm9wZXJ0eSk7XHJcbiAgICB2YXIgbmV3S2V5cyA9IE9iamVjdC5rZXlzKG5ld1Byb3BlcnR5KTtcclxuICAgIGlmIChwcmV2aW91c0tleXMubGVuZ3RoICE9PSBuZXdLZXlzLmxlbmd0aCkge1xyXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY2hhbmdlZCA9IG5ld0tleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdQcm9wZXJ0eVtrZXldICE9PSBwcmV2aW91c1Byb3BlcnR5W2tleV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNoYW5nZWQ6IGNoYW5nZWQsXHJcbiAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMuc2hhbGxvdyA9IHNoYWxsb3c7XHJcbmZ1bmN0aW9uIGF1dG8ocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcclxuICAgIHZhciByZXN1bHQ7XHJcbiAgICBpZiAodHlwZW9mIG5ld1Byb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgaWYgKG5ld1Byb3BlcnR5Ll90eXBlID09PSBSZWdpc3RyeV8xLldJREdFVF9CQVNFX1RZUEUpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGlnbm9yZShwcmV2aW91c1Byb3BlcnR5LCBuZXdQcm9wZXJ0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNPYmplY3RPckFycmF5KG5ld1Byb3BlcnR5KSkge1xyXG4gICAgICAgIHJlc3VsdCA9IHNoYWxsb3cocHJldmlvdXNQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVmZXJlbmNlKHByZXZpb3VzUHJvcGVydHksIG5ld1Byb3BlcnR5KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZXhwb3J0cy5hdXRvID0gYXV0bztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvZGlmZi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL2RpZmYuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRzbGliXzEgPSByZXF1aXJlKFwidHNsaWJcIik7XHJcbnZhciBsYW5nXzEgPSByZXF1aXJlKFwiLi4vLi4vY29yZS9sYW5nXCIpO1xyXG52YXIgY3NzVHJhbnNpdGlvbnNfMSA9IHJlcXVpcmUoXCIuLi9hbmltYXRpb25zL2Nzc1RyYW5zaXRpb25zXCIpO1xyXG52YXIgYWZ0ZXJSZW5kZXJfMSA9IHJlcXVpcmUoXCIuLy4uL2RlY29yYXRvcnMvYWZ0ZXJSZW5kZXJcIik7XHJcbnZhciBkXzEgPSByZXF1aXJlKFwiLi8uLi9kXCIpO1xyXG52YXIgdmRvbV8xID0gcmVxdWlyZShcIi4vLi4vdmRvbVwiKTtcclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgdGhlIGF0dGFjaCBzdGF0ZSBvZiB0aGUgcHJvamVjdG9yXHJcbiAqL1xyXG52YXIgUHJvamVjdG9yQXR0YWNoU3RhdGU7XHJcbihmdW5jdGlvbiAoUHJvamVjdG9yQXR0YWNoU3RhdGUpIHtcclxuICAgIFByb2plY3RvckF0dGFjaFN0YXRlW1Byb2plY3RvckF0dGFjaFN0YXRlW1wiQXR0YWNoZWRcIl0gPSAxXSA9IFwiQXR0YWNoZWRcIjtcclxuICAgIFByb2plY3RvckF0dGFjaFN0YXRlW1Byb2plY3RvckF0dGFjaFN0YXRlW1wiRGV0YWNoZWRcIl0gPSAyXSA9IFwiRGV0YWNoZWRcIjtcclxufSkoUHJvamVjdG9yQXR0YWNoU3RhdGUgPSBleHBvcnRzLlByb2plY3RvckF0dGFjaFN0YXRlIHx8IChleHBvcnRzLlByb2plY3RvckF0dGFjaFN0YXRlID0ge30pKTtcclxuLyoqXHJcbiAqIEF0dGFjaCB0eXBlIGZvciB0aGUgcHJvamVjdG9yXHJcbiAqL1xyXG52YXIgQXR0YWNoVHlwZTtcclxuKGZ1bmN0aW9uIChBdHRhY2hUeXBlKSB7XHJcbiAgICBBdHRhY2hUeXBlW0F0dGFjaFR5cGVbXCJBcHBlbmRcIl0gPSAxXSA9IFwiQXBwZW5kXCI7XHJcbiAgICBBdHRhY2hUeXBlW0F0dGFjaFR5cGVbXCJNZXJnZVwiXSA9IDJdID0gXCJNZXJnZVwiO1xyXG59KShBdHRhY2hUeXBlID0gZXhwb3J0cy5BdHRhY2hUeXBlIHx8IChleHBvcnRzLkF0dGFjaFR5cGUgPSB7fSkpO1xyXG5mdW5jdGlvbiBQcm9qZWN0b3JNaXhpbihCYXNlKSB7XHJcbiAgICB2YXIgUHJvamVjdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgICAgIHRzbGliXzEuX19leHRlbmRzKFByb2plY3RvciwgX3N1cGVyKTtcclxuICAgICAgICBmdW5jdGlvbiBQcm9qZWN0b3IoKSB7XHJcbiAgICAgICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmFwcGx5KHRoaXMsIHRzbGliXzEuX19zcHJlYWQoYXJncykpIHx8IHRoaXM7XHJcbiAgICAgICAgICAgIF90aGlzLl9yb290ID0gZG9jdW1lbnQuYm9keTtcclxuICAgICAgICAgICAgX3RoaXMuX2FzeW5jID0gdHJ1ZTtcclxuICAgICAgICAgICAgX3RoaXMuX3Byb2plY3RvclByb3BlcnRpZXMgPSB7fTtcclxuICAgICAgICAgICAgX3RoaXMuX3Byb2plY3Rpb25PcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnM6IGNzc1RyYW5zaXRpb25zXzEuZGVmYXVsdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBfdGhpcy5yb290ID0gZG9jdW1lbnQuYm9keTtcclxuICAgICAgICAgICAgX3RoaXMucHJvamVjdG9yU3RhdGUgPSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5EZXRhY2hlZDtcclxuICAgICAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBQcm9qZWN0b3IucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChyb290KSB7XHJcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogQXR0YWNoVHlwZS5BcHBlbmQsXHJcbiAgICAgICAgICAgICAgICByb290OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2gob3B0aW9ucyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBQcm9qZWN0b3IucHJvdG90eXBlLm1lcmdlID0gZnVuY3Rpb24gKHJvb3QpIHtcclxuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBBdHRhY2hUeXBlLk1lcmdlLFxyXG4gICAgICAgICAgICAgICAgcm9vdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoKG9wdGlvbnMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFByb2plY3Rvci5wcm90b3R5cGUsIFwicm9vdFwiLCB7XHJcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3Q7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHJvb3QpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjaGFuZ2Ugcm9vdCBlbGVtZW50Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yb290ID0gcm9vdDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFByb2plY3Rvci5wcm90b3R5cGUsIFwiYXN5bmNcIiwge1xyXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hc3luYztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoYXN5bmMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlID09PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdG9yIGFscmVhZHkgYXR0YWNoZWQsIGNhbm5vdCBjaGFuZ2UgYXN5bmMgbW9kZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXN5bmMgPSBhc3luYztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgUHJvamVjdG9yLnByb3RvdHlwZS5zYW5kYm94ID0gZnVuY3Rpb24gKGRvYykge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZiAoZG9jID09PSB2b2lkIDApIHsgZG9jID0gZG9jdW1lbnQ7IH1cclxuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3RvciBhbHJlYWR5IGF0dGFjaGVkLCBjYW5ub3QgY3JlYXRlIHNhbmRib3gnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9hc3luYyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgcHJldmlvdXNSb290ID0gdGhpcy5yb290O1xyXG4gICAgICAgICAgICAvKiBmcmVlIHVwIHRoZSBkb2N1bWVudCBmcmFnbWVudCBmb3IgR0MgKi9cclxuICAgICAgICAgICAgdGhpcy5vd24oe1xyXG4gICAgICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9yb290ID0gcHJldmlvdXNSb290O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5fYXR0YWNoKHtcclxuICAgICAgICAgICAgICAgIC8qIERvY3VtZW50RnJhZ21lbnQgaXMgbm90IGFzc2lnbmFibGUgdG8gRWxlbWVudCwgYnV0IHByb3ZpZGVzIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHdvcmsgKi9cclxuICAgICAgICAgICAgICAgIHJvb3Q6IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBBdHRhY2hUeXBlLkFwcGVuZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFByb2plY3Rvci5wcm90b3R5cGUuc2V0Q2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5fX3NldENoaWxkcmVuX18oY2hpbGRyZW4pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgUHJvamVjdG9yLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fX3NldFByb3BlcnRpZXNfXyhwcm9wZXJ0aWVzKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFByb2plY3Rvci5wcm90b3R5cGUuX19zZXRQcm9wZXJ0aWVzX18gPSBmdW5jdGlvbiAocHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdG9yUHJvcGVydGllcyAmJiB0aGlzLl9wcm9qZWN0b3JQcm9wZXJ0aWVzLnJlZ2lzdHJ5ICE9PSBwcm9wZXJ0aWVzLnJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJvamVjdG9yUHJvcGVydGllcy5yZWdpc3RyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMucmVnaXN0cnkuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvclByb3BlcnRpZXMgPSBsYW5nXzEuYXNzaWduKHt9LCBwcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fX3NldENvcmVQcm9wZXJ0aWVzX18uY2FsbCh0aGlzLCB7IGJpbmQ6IHRoaXMsIGJhc2VSZWdpc3RyeTogcHJvcGVydGllcy5yZWdpc3RyeSB9KTtcclxuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fX3NldFByb3BlcnRpZXNfXy5jYWxsKHRoaXMsIHByb3BlcnRpZXMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgUHJvamVjdG9yLnByb3RvdHlwZS50b0h0bWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3RvclN0YXRlICE9PSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZCB8fCAhdGhpcy5fcHJvamVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0b3IgaXMgbm90IGF0dGFjaGVkLCBjYW5ub3QgcmV0dXJuIGFuIEhUTUwgc3RyaW5nIG9mIHByb2plY3Rpb24uJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb24uZG9tTm9kZS5jaGlsZE5vZGVzWzBdLm91dGVySFRNTDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFByb2plY3Rvci5wcm90b3R5cGUuYWZ0ZXJSZW5kZXIgPSBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgfHwgcmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlID0gZF8xLnYoJ3NwYW4nLCB7fSwgW3Jlc3VsdF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgUHJvamVjdG9yLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFByb2plY3Rvci5wcm90b3R5cGUuX2F0dGFjaCA9IGZ1bmN0aW9uIChfYSkge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICB2YXIgdHlwZSA9IF9hLnR5cGUsIHJvb3QgPSBfYS5yb290O1xyXG4gICAgICAgICAgICBpZiAocm9vdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fYXR0YWNoSGFuZGxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoSGFuZGxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvamVjdG9yU3RhdGUgPSBQcm9qZWN0b3JBdHRhY2hTdGF0ZS5BdHRhY2hlZDtcclxuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IHtcclxuICAgICAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucHJvamVjdG9yU3RhdGUgPT09IFByb2plY3RvckF0dGFjaFN0YXRlLkF0dGFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wcm9qZWN0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9qZWN0b3JTdGF0ZSA9IFByb2plY3RvckF0dGFjaFN0YXRlLkRldGFjaGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5vd24oaGFuZGxlKTtcclxuICAgICAgICAgICAgdGhpcy5fYXR0YWNoSGFuZGxlID0gaGFuZGxlO1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uT3B0aW9ucyA9IHRzbGliXzEuX19hc3NpZ24oe30sIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zLCB7IHN5bmM6ICF0aGlzLl9hc3luYyB9KTtcclxuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEF0dGFjaFR5cGUuQXBwZW5kOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rpb24gPSB2ZG9tXzEuZG9tLmFwcGVuZCh0aGlzLnJvb3QsIHRoaXMsIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgQXR0YWNoVHlwZS5NZXJnZTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9qZWN0aW9uID0gdmRvbV8xLmRvbS5tZXJnZSh0aGlzLnJvb3QsIHRoaXMsIHRoaXMuX3Byb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNoSGFuZGxlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHNsaWJfMS5fX2RlY29yYXRlKFtcclxuICAgICAgICAgICAgYWZ0ZXJSZW5kZXJfMS5hZnRlclJlbmRlcigpXHJcbiAgICAgICAgXSwgUHJvamVjdG9yLnByb3RvdHlwZSwgXCJhZnRlclJlbmRlclwiLCBudWxsKTtcclxuICAgICAgICByZXR1cm4gUHJvamVjdG9yO1xyXG4gICAgfShCYXNlKSk7XHJcbiAgICByZXR1cm4gUHJvamVjdG9yO1xyXG59XHJcbmV4cG9ydHMuUHJvamVjdG9yTWl4aW4gPSBQcm9qZWN0b3JNaXhpbjtcclxuZXhwb3J0cy5kZWZhdWx0ID0gUHJvamVjdG9yTWl4aW47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL21peGlucy9Qcm9qZWN0b3IuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9taXhpbnMvUHJvamVjdG9yLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0c2xpYl8xID0gcmVxdWlyZShcInRzbGliXCIpO1xyXG52YXIgSW5qZWN0b3JfMSA9IHJlcXVpcmUoXCIuLy4uL0luamVjdG9yXCIpO1xyXG52YXIgaW5qZWN0XzEgPSByZXF1aXJlKFwiLi8uLi9kZWNvcmF0b3JzL2luamVjdFwiKTtcclxudmFyIGhhbmRsZURlY29yYXRvcl8xID0gcmVxdWlyZShcIi4vLi4vZGVjb3JhdG9ycy9oYW5kbGVEZWNvcmF0b3JcIik7XHJcbnZhciBkaWZmUHJvcGVydHlfMSA9IHJlcXVpcmUoXCIuLy4uL2RlY29yYXRvcnMvZGlmZlByb3BlcnR5XCIpO1xyXG52YXIgZGlmZl8xID0gcmVxdWlyZShcIi4vLi4vZGlmZlwiKTtcclxudmFyIFRIRU1FX0tFWSA9ICcgX2tleSc7XHJcbmV4cG9ydHMuSU5KRUNURURfVEhFTUVfS0VZID0gU3ltYm9sKCd0aGVtZScpO1xyXG4vKipcclxuICogRGVjb3JhdG9yIGZvciBiYXNlIGNzcyBjbGFzc2VzXHJcbiAqL1xyXG5mdW5jdGlvbiB0aGVtZSh0aGVtZSkge1xyXG4gICAgcmV0dXJuIGhhbmRsZURlY29yYXRvcl8xLmhhbmRsZURlY29yYXRvcihmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgdGFyZ2V0LmFkZERlY29yYXRvcignYmFzZVRoZW1lQ2xhc3NlcycsIHRoZW1lKTtcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMudGhlbWUgPSB0aGVtZTtcclxuLyoqXHJcbiAqIENyZWF0ZXMgYSByZXZlcnNlIGxvb2t1cCBmb3IgdGhlIGNsYXNzZXMgcGFzc2VkIGluIHZpYSB0aGUgYHRoZW1lYCBmdW5jdGlvbi5cclxuICpcclxuICogQHBhcmFtIGNsYXNzZXMgVGhlIGJhc2VDbGFzc2VzIG9iamVjdFxyXG4gKiBAcmVxdWlyZXNcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lQ2xhc3Nlc0xvb2t1cChjbGFzc2VzKSB7XHJcbiAgICByZXR1cm4gY2xhc3Nlcy5yZWR1Y2UoZnVuY3Rpb24gKGN1cnJlbnRDbGFzc05hbWVzLCBiYXNlQ2xhc3MpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhiYXNlQ2xhc3MpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBjdXJyZW50Q2xhc3NOYW1lc1tiYXNlQ2xhc3Nba2V5XV0gPSBrZXk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDbGFzc05hbWVzO1xyXG4gICAgfSwge30pO1xyXG59XHJcbi8qKlxyXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IGlzIGdpdmVuIGEgdGhlbWUgYW5kIGFuIG9wdGlvbmFsIHJlZ2lzdHJ5LCB0aGUgdGhlbWVcclxuICogaW5qZWN0b3IgaXMgZGVmaW5lZCBhZ2FpbnN0IHRoZSByZWdpc3RyeSwgcmV0dXJuaW5nIHRoZSB0aGVtZS5cclxuICpcclxuICogQHBhcmFtIHRoZW1lIHRoZSB0aGVtZSB0byBzZXRcclxuICogQHBhcmFtIHRoZW1lUmVnaXN0cnkgcmVnaXN0cnkgdG8gZGVmaW5lIHRoZSB0aGVtZSBpbmplY3RvciBhZ2FpbnN0LiBEZWZhdWx0c1xyXG4gKiB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XHJcbiAqXHJcbiAqIEByZXR1cm5zIHRoZSB0aGVtZSBpbmplY3RvciB1c2VkIHRvIHNldCB0aGUgdGhlbWVcclxuICovXHJcbmZ1bmN0aW9uIHJlZ2lzdGVyVGhlbWVJbmplY3Rvcih0aGVtZSwgdGhlbWVSZWdpc3RyeSkge1xyXG4gICAgdmFyIHRoZW1lSW5qZWN0b3IgPSBuZXcgSW5qZWN0b3JfMS5JbmplY3Rvcih0aGVtZSk7XHJcbiAgICB0aGVtZVJlZ2lzdHJ5LmRlZmluZUluamVjdG9yKGV4cG9ydHMuSU5KRUNURURfVEhFTUVfS0VZLCBmdW5jdGlvbiAoaW52YWxpZGF0b3IpIHtcclxuICAgICAgICB0aGVtZUluamVjdG9yLnNldEludmFsaWRhdG9yKGludmFsaWRhdG9yKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhlbWVJbmplY3Rvci5nZXQoKTsgfTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoZW1lSW5qZWN0b3I7XHJcbn1cclxuZXhwb3J0cy5yZWdpc3RlclRoZW1lSW5qZWN0b3IgPSByZWdpc3RlclRoZW1lSW5qZWN0b3I7XHJcbi8qKlxyXG4gKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFzcyBkZWNvcmF0ZWQgd2l0aCB3aXRoIFRoZW1lZCBmdW5jdGlvbmFsaXR5XHJcbiAqL1xyXG5mdW5jdGlvbiBUaGVtZWRNaXhpbihCYXNlKSB7XHJcbiAgICB2YXIgVGhlbWVkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgICAgIHRzbGliXzEuX19leHRlbmRzKFRoZW1lZCwgX3N1cGVyKTtcclxuICAgICAgICBmdW5jdGlvbiBUaGVtZWQoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogUmVnaXN0ZXJlZCBiYXNlIHRoZW1lIGtleXNcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIF90aGlzLl9yZWdpc3RlcmVkQmFzZVRoZW1lS2V5cyA9IFtdO1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogSW5kaWNhdGVzIGlmIGNsYXNzZXMgbWV0YSBkYXRhIG5lZWQgdG8gYmUgY2FsY3VsYXRlZC5cclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIF90aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogTG9hZGVkIHRoZW1lXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBfdGhpcy5fdGhlbWUgPSB7fTtcclxuICAgICAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBUaGVtZWQucHJvdG90eXBlLnRoZW1lID0gZnVuY3Rpb24gKGNsYXNzZXMpIHtcclxuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlY2FsY3VsYXRlQ2xhc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVUaGVtZUNsYXNzZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjbGFzc05hbWUpIHsgcmV0dXJuIF90aGlzLl9nZXRUaGVtZUNsYXNzKGNsYXNzTmFtZSk7IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRUaGVtZUNsYXNzKGNsYXNzZXMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRnVuY3Rpb24gZmlyZWQgd2hlbiBgdGhlbWVgIG9yIGBleHRyYUNsYXNzZXNgIGFyZSBjaGFuZ2VkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIFRoZW1lZC5wcm90b3R5cGUub25Qcm9wZXJ0aWVzQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjYWxjdWxhdGVDbGFzc2VzID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFRoZW1lZC5wcm90b3R5cGUuX2dldFRoZW1lQ2xhc3MgPSBmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT09IHVuZGVmaW5lZCB8fCBjbGFzc05hbWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGV4dHJhQ2xhc3NlcyA9IHRoaXMucHJvcGVydGllcy5leHRyYUNsYXNzZXMgfHwge307XHJcbiAgICAgICAgICAgIHZhciB0aGVtZUNsYXNzTmFtZSA9IHRoaXMuX2Jhc2VUaGVtZUNsYXNzZXNSZXZlcnNlTG9va3VwW2NsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIHZhciByZXN1bHRDbGFzc05hbWVzID0gW107XHJcbiAgICAgICAgICAgIGlmICghdGhlbWVDbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkNsYXNzIG5hbWU6ICdcIiArIGNsYXNzTmFtZSArIFwiJyBub3QgZm91bmQgaW4gdGhlbWVcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXh0cmFDbGFzc2VzW3RoZW1lQ2xhc3NOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Q2xhc3NOYW1lcy5wdXNoKGV4dHJhQ2xhc3Nlc1t0aGVtZUNsYXNzTmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl90aGVtZVt0aGVtZUNsYXNzTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdENsYXNzTmFtZXMucHVzaCh0aGlzLl90aGVtZVt0aGVtZUNsYXNzTmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Q2xhc3NOYW1lcy5wdXNoKHRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWVbdGhlbWVDbGFzc05hbWVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0Q2xhc3NOYW1lcy5qb2luKCcgJyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBUaGVtZWQucHJvdG90eXBlLl9yZWNhbGN1bGF0ZVRoZW1lQ2xhc3NlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wZXJ0aWVzLnRoZW1lLCB0aGVtZSA9IF9hID09PSB2b2lkIDAgPyB7fSA6IF9hO1xyXG4gICAgICAgICAgICB2YXIgYmFzZVRoZW1lcyA9IHRoaXMuZ2V0RGVjb3JhdG9yKCdiYXNlVGhlbWVDbGFzc2VzJyk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZSA9IGJhc2VUaGVtZXMucmVkdWNlKGZ1bmN0aW9uIChmaW5hbEJhc2VUaGVtZSwgYmFzZVRoZW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hID0gVEhFTUVfS0VZLCBrZXkgPSBiYXNlVGhlbWVbX2FdLCBjbGFzc2VzID0gdHNsaWJfMS5fX3Jlc3QoYmFzZVRoZW1lLCBbdHlwZW9mIF9hID09PSBcInN5bWJvbFwiID8gX2EgOiBfYSArIFwiXCJdKTtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmVnaXN0ZXJlZEJhc2VUaGVtZUtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fYXNzaWduKHt9LCBmaW5hbEJhc2VUaGVtZSwgY2xhc3Nlcyk7XHJcbiAgICAgICAgICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9iYXNlVGhlbWVDbGFzc2VzUmV2ZXJzZUxvb2t1cCA9IGNyZWF0ZVRoZW1lQ2xhc3Nlc0xvb2t1cChiYXNlVGhlbWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl90aGVtZSA9IHRoaXMuX3JlZ2lzdGVyZWRCYXNlVGhlbWVLZXlzLnJlZHVjZShmdW5jdGlvbiAoYmFzZVRoZW1lLCB0aGVtZUtleSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRzbGliXzEuX19hc3NpZ24oe30sIGJhc2VUaGVtZSwgdGhlbWVbdGhlbWVLZXldKTtcclxuICAgICAgICAgICAgfSwge30pO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWNhbGN1bGF0ZUNsYXNzZXMgPSBmYWxzZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXHJcbiAgICAgICAgICAgIGRpZmZQcm9wZXJ0eV8xLmRpZmZQcm9wZXJ0eSgndGhlbWUnLCBkaWZmXzEuc2hhbGxvdyksXHJcbiAgICAgICAgICAgIGRpZmZQcm9wZXJ0eV8xLmRpZmZQcm9wZXJ0eSgnZXh0cmFDbGFzc2VzJywgZGlmZl8xLnNoYWxsb3cpXHJcbiAgICAgICAgXSwgVGhlbWVkLnByb3RvdHlwZSwgXCJvblByb3BlcnRpZXNDaGFuZ2VkXCIsIG51bGwpO1xyXG4gICAgICAgIFRoZW1lZCA9IHRzbGliXzEuX19kZWNvcmF0ZShbXHJcbiAgICAgICAgICAgIGluamVjdF8xLmluamVjdCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBleHBvcnRzLklOSkVDVEVEX1RIRU1FX0tFWSxcclxuICAgICAgICAgICAgICAgIGdldFByb3BlcnRpZXM6IGZ1bmN0aW9uICh0aGVtZSwgcHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvcGVydGllcy50aGVtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB0aGVtZTogdGhlbWUgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF0sIFRoZW1lZCk7XHJcbiAgICAgICAgcmV0dXJuIFRoZW1lZDtcclxuICAgIH0oQmFzZSkpO1xyXG4gICAgcmV0dXJuIFRoZW1lZDtcclxufVxyXG5leHBvcnRzLlRoZW1lZE1peGluID0gVGhlbWVkTWl4aW47XHJcbmV4cG9ydHMuZGVmYXVsdCA9IFRoZW1lZE1peGluO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9taXhpbnMvVGhlbWVkLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvbWl4aW5zL1RoZW1lZC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIFdpZGdldEJhc2VfMSA9IHJlcXVpcmUoXCIuL1dpZGdldEJhc2VcIik7XHJcbnZhciBQcm9qZWN0b3JfMSA9IHJlcXVpcmUoXCIuL21peGlucy9Qcm9qZWN0b3JcIik7XHJcbnZhciBhcnJheV8xID0gcmVxdWlyZShcIi4uL3NoaW0vYXJyYXlcIik7XHJcbnZhciBkXzEgPSByZXF1aXJlKFwiLi9kXCIpO1xyXG52YXIgZ2xvYmFsXzEgPSByZXF1aXJlKFwiLi4vc2hpbS9nbG9iYWxcIik7XHJcbnZhciBUaGVtZWRfMSA9IHJlcXVpcmUoXCIuL21peGlucy9UaGVtZWRcIik7XHJcbnZhciBhbHdheXNSZW5kZXJfMSA9IHJlcXVpcmUoXCIuL2RlY29yYXRvcnMvYWx3YXlzUmVuZGVyXCIpO1xyXG52YXIgQ3VzdG9tRWxlbWVudENoaWxkVHlwZTtcclxuKGZ1bmN0aW9uIChDdXN0b21FbGVtZW50Q2hpbGRUeXBlKSB7XHJcbiAgICBDdXN0b21FbGVtZW50Q2hpbGRUeXBlW1wiRE9KT1wiXSA9IFwiRE9KT1wiO1xyXG4gICAgQ3VzdG9tRWxlbWVudENoaWxkVHlwZVtcIk5PREVcIl0gPSBcIk5PREVcIjtcclxuICAgIEN1c3RvbUVsZW1lbnRDaGlsZFR5cGVbXCJURVhUXCJdID0gXCJURVhUXCI7XHJcbn0pKEN1c3RvbUVsZW1lbnRDaGlsZFR5cGUgPSBleHBvcnRzLkN1c3RvbUVsZW1lbnRDaGlsZFR5cGUgfHwgKGV4cG9ydHMuQ3VzdG9tRWxlbWVudENoaWxkVHlwZSA9IHt9KSk7XHJcbmZ1bmN0aW9uIERvbVRvV2lkZ2V0V3JhcHBlcihkb21Ob2RlKSB7XHJcbiAgICB2YXIgRG9tVG9XaWRnZXRXcmFwcGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgICAgIHRzbGliXzEuX19leHRlbmRzKERvbVRvV2lkZ2V0V3JhcHBlciwgX3N1cGVyKTtcclxuICAgICAgICBmdW5jdGlvbiBEb21Ub1dpZGdldFdyYXBwZXIoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgRG9tVG9XaWRnZXRXcmFwcGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5yZWR1Y2UoZnVuY3Rpb24gKHByb3BzLCBrZXkpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF90aGlzLnByb3BlcnRpZXNba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignb24nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IFwiX19cIiArIGtleTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHByb3BzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcztcclxuICAgICAgICAgICAgfSwge30pO1xyXG4gICAgICAgICAgICByZXR1cm4gZF8xLmRvbSh7IG5vZGU6IGRvbU5vZGUsIHByb3BzOiBwcm9wZXJ0aWVzLCBkaWZmVHlwZTogJ2RvbScgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRG9tVG9XaWRnZXRXcmFwcGVyLCBcImRvbU5vZGVcIiwge1xyXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkb21Ob2RlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBEb21Ub1dpZGdldFdyYXBwZXIgPSB0c2xpYl8xLl9fZGVjb3JhdGUoW1xyXG4gICAgICAgICAgICBhbHdheXNSZW5kZXJfMS5hbHdheXNSZW5kZXIoKVxyXG4gICAgICAgIF0sIERvbVRvV2lkZ2V0V3JhcHBlcik7XHJcbiAgICAgICAgcmV0dXJuIERvbVRvV2lkZ2V0V3JhcHBlcjtcclxuICAgIH0oV2lkZ2V0QmFzZV8xLldpZGdldEJhc2UpKTtcclxuICAgIHJldHVybiBEb21Ub1dpZGdldFdyYXBwZXI7XHJcbn1cclxuZXhwb3J0cy5Eb21Ub1dpZGdldFdyYXBwZXIgPSBEb21Ub1dpZGdldFdyYXBwZXI7XHJcbmZ1bmN0aW9uIGNyZWF0ZShkZXNjcmlwdG9yLCBXaWRnZXRDb25zdHJ1Y3Rvcikge1xyXG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXMsIGNoaWxkVHlwZSA9IGRlc2NyaXB0b3IuY2hpbGRUeXBlLCByZWdpc3RyeUZhY3RvcnkgPSBkZXNjcmlwdG9yLnJlZ2lzdHJ5RmFjdG9yeTtcclxuICAgIHZhciBhdHRyaWJ1dGVNYXAgPSB7fTtcclxuICAgIGF0dHJpYnV0ZXMuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBhdHRyaWJ1dGVNYXBbYXR0cmlidXRlTmFtZV0gPSBwcm9wZXJ0eU5hbWU7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICAgICAgdHNsaWJfMS5fX2V4dGVuZHMoY2xhc3NfMSwgX3N1cGVyKTtcclxuICAgICAgICBmdW5jdGlvbiBjbGFzc18xKCkge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcclxuICAgICAgICAgICAgX3RoaXMuX3Byb3BlcnRpZXMgPSB7fTtcclxuICAgICAgICAgICAgX3RoaXMuX2NoaWxkcmVuID0gW107XHJcbiAgICAgICAgICAgIF90aGlzLl9ldmVudFByb3BlcnRpZXMgPSB7fTtcclxuICAgICAgICAgICAgX3RoaXMuX2luaXRpYWxpc2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pbml0aWFsaXNlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBkb21Qcm9wZXJ0aWVzID0ge307XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzLCBwcm9wZXJ0aWVzID0gZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBldmVudHMgPSBkZXNjcmlwdG9yLmV2ZW50cztcclxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHRzbGliXzEuX19hc3NpZ24oe30sIHRoaXMuX3Byb3BlcnRpZXMsIHRoaXMuX2F0dHJpYnV0ZXNUb1Byb3BlcnRpZXMoYXR0cmlidXRlcykpO1xyXG4gICAgICAgICAgICB0c2xpYl8xLl9fc3ByZWFkKGF0dHJpYnV0ZXMsIHByb3BlcnRpZXMpLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX3RoaXNbcHJvcGVydHlOYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnX18nKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Byb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUHJvcGVydHlOYW1lICE9PSBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW2ZpbHRlcmVkUHJvcGVydHlOYW1lXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKTsgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIF90aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkb21Qcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKTsgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gX3RoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOyB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnJykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5yZXBsYWNlKC9eb24vLCAnX19vbicpO1xyXG4gICAgICAgICAgICAgICAgZG9tUHJvcGVydGllc1tmaWx0ZXJlZFByb3BlcnR5TmFtZV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fZ2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBfdGhpcy5fc2V0RXZlbnRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9ldmVudFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBldmVudENhbGxiYWNrID0gX3RoaXMuX2dldEV2ZW50UHJvcGVydHkocHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50Q2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDYWxsYmFjay5hcHBseSh2b2lkIDAsIHRzbGliXzEuX19zcHJlYWQoYXJncykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogYXJnc1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCBkb21Qcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLlRFWFQgPyB0aGlzLmNoaWxkTm9kZXMgOiB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICBhcnJheV8xLmZyb20oY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkVHlwZSA9PT0gQ3VzdG9tRWxlbWVudENoaWxkVHlwZS5ET0pPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtcmVuZGVyJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX3JlbmRlcigpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZG9qby1jZS1jb25uZWN0ZWQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fcmVuZGVyKCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihjaGlsZE5vZGUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9jaGlsZHJlbi5wdXNoKGRfMS5kb20oeyBub2RlOiBjaGlsZE5vZGUsIGRpZmZUeXBlOiAnZG9tJyB9KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtY29ubmVjdGVkJywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIF90aGlzLl9jaGlsZENvbm5lY3RlZChlKTsgfSk7XHJcbiAgICAgICAgICAgIHZhciB3aWRnZXRQcm9wZXJ0aWVzID0gdGhpcy5fcHJvcGVydGllcztcclxuICAgICAgICAgICAgdmFyIHJlbmRlckNoaWxkcmVuID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX19jaGlsZHJlbl9fKCk7IH07XHJcbiAgICAgICAgICAgIHZhciBXcmFwcGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgICAgICAgICAgICAgdHNsaWJfMS5fX2V4dGVuZHMoY2xhc3NfMiwgX3N1cGVyKTtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNsYXNzXzIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2xhc3NfMi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkXzEudyhXaWRnZXRDb25zdHJ1Y3Rvciwgd2lkZ2V0UHJvcGVydGllcywgcmVuZGVyQ2hpbGRyZW4oKSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzXzI7XHJcbiAgICAgICAgICAgIH0oV2lkZ2V0QmFzZV8xLldpZGdldEJhc2UpKTtcclxuICAgICAgICAgICAgdmFyIHJlZ2lzdHJ5ID0gcmVnaXN0cnlGYWN0b3J5KCk7XHJcbiAgICAgICAgICAgIHZhciB0aGVtZUNvbnRleHQgPSBUaGVtZWRfMS5yZWdpc3RlclRoZW1lSW5qZWN0b3IodGhpcy5fZ2V0VGhlbWUoKSwgcmVnaXN0cnkpO1xyXG4gICAgICAgICAgICBnbG9iYWxfMS5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tdGhlbWUtc2V0JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhlbWVDb250ZXh0LnNldChfdGhpcy5fZ2V0VGhlbWUoKSk7IH0pO1xyXG4gICAgICAgICAgICB2YXIgUHJvamVjdG9yID0gUHJvamVjdG9yXzEuUHJvamVjdG9yTWl4aW4oV3JhcHBlcik7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3RvciA9IG5ldyBQcm9qZWN0b3IoKTtcclxuICAgICAgICAgICAgdGhpcy5fcHJvamVjdG9yLnNldFByb3BlcnRpZXMoeyByZWdpc3RyeTogcmVnaXN0cnkgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rvci5hcHBlbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpc2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9qby1jZS1jb25uZWN0ZWQnLCB7XHJcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLl9nZXRUaGVtZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbF8xLmRlZmF1bHQgJiYgZ2xvYmFsXzEuZGVmYXVsdC5kb2pvY2UgJiYgZ2xvYmFsXzEuZGVmYXVsdC5kb2pvY2UudGhlbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxfMS5kZWZhdWx0LmRvam9jZS50aGVtZXNbZ2xvYmFsXzEuZGVmYXVsdC5kb2pvY2UudGhlbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5fY2hpbGRDb25uZWN0ZWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGUuZGV0YWlsO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXhpc3RzID0gdGhpcy5fY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIGNoaWxkLmRvbU5vZGUgPT09IG5vZGU7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Rvam8tY2UtcmVuZGVyJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX3JlbmRlcigpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKERvbVRvV2lkZ2V0V3JhcHBlcihub2RlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9qZWN0b3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2plY3Rvci5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb2pvLWNlLXJlbmRlcicsIHtcclxuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXNcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuX19wcm9wZXJ0aWVzX18gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0c2xpYl8xLl9fYXNzaWduKHt9LCB0aGlzLl9wcm9wZXJ0aWVzLCB0aGlzLl9ldmVudFByb3BlcnRpZXMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuX19jaGlsZHJlbl9fID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRUeXBlID09PSBDdXN0b21FbGVtZW50Q2hpbGRUeXBlLkRPSk8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKENoaWxkKSB7IHJldHVybiBDaGlsZC5kb21Ob2RlLmlzV2lkZ2V0OyB9KS5tYXAoZnVuY3Rpb24gKENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRvbU5vZGUgPSBDaGlsZC5kb21Ob2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkXzEudyhDaGlsZCwgdHNsaWJfMS5fX2Fzc2lnbih7fSwgZG9tTm9kZS5fX3Byb3BlcnRpZXNfXygpKSwgdHNsaWJfMS5fX3NwcmVhZChkb21Ob2RlLl9fY2hpbGRyZW5fXygpKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKG5hbWUsIG9sZFZhbHVlLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gYXR0cmlidXRlTWFwW25hbWVdO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLl9zZXRFdmVudFByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLl9nZXRFdmVudFByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5fc2V0UHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHlOYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVtXaWRnZXRCYXNlXzEubm9CaW5kXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcigpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuX2dldFByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuX2F0dHJpYnV0ZXNUb1Byb3BlcnRpZXMgPSBmdW5jdGlvbiAoYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5yZWR1Y2UoZnVuY3Rpb24gKHByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF90aGlzLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICAgICAgICAgIH0sIHt9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbGFzc18xLCBcIm9ic2VydmVkQXR0cmlidXRlc1wiLCB7XHJcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbGFzc18xLnByb3RvdHlwZSwgXCJpc1dpZGdldFwiLCB7XHJcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjbGFzc18xO1xyXG4gICAgfShIVE1MRWxlbWVudCkpO1xyXG59XHJcbmV4cG9ydHMuY3JlYXRlID0gY3JlYXRlO1xyXG5mdW5jdGlvbiByZWdpc3RlcihXaWRnZXRDb25zdHJ1Y3Rvcikge1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBXaWRnZXRDb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgV2lkZ2V0Q29uc3RydWN0b3IucHJvdG90eXBlLl9fY3VzdG9tRWxlbWVudERlc2NyaXB0b3I7XHJcbiAgICBpZiAoIWRlc2NyaXB0b3IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgZGVzY3JpcHRvciBmb3IgQ3VzdG9tIEVsZW1lbnQsIGhhdmUgeW91IGFkZGVkIHRoZSBAY3VzdG9tRWxlbWVudCBkZWNvcmF0b3IgdG8geW91ciBXaWRnZXQ/Jyk7XHJcbiAgICB9XHJcbiAgICBnbG9iYWxfMS5kZWZhdWx0LmN1c3RvbUVsZW1lbnRzLmRlZmluZShkZXNjcmlwdG9yLnRhZ05hbWUsIGNyZWF0ZShkZXNjcmlwdG9yLCBXaWRnZXRDb25zdHJ1Y3RvcikpO1xyXG59XHJcbmV4cG9ydHMucmVnaXN0ZXIgPSByZWdpc3RlcjtcclxuZXhwb3J0cy5kZWZhdWx0ID0gcmVnaXN0ZXI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvQGRvam8vZnJhbWV3b3JrL3dpZGdldC1jb3JlL3JlZ2lzdGVyQ3VzdG9tRWxlbWVudC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgdHNsaWJfMSA9IHJlcXVpcmUoXCJ0c2xpYlwiKTtcclxudmFyIGdsb2JhbF8xID0gcmVxdWlyZShcIi4uL3NoaW0vZ2xvYmFsXCIpO1xyXG52YXIgYXJyYXlfMSA9IHJlcXVpcmUoXCIuLi9zaGltL2FycmF5XCIpO1xyXG52YXIgZF8xID0gcmVxdWlyZShcIi4vZFwiKTtcclxudmFyIFJlZ2lzdHJ5XzEgPSByZXF1aXJlKFwiLi9SZWdpc3RyeVwiKTtcclxudmFyIFdlYWtNYXBfMSA9IHJlcXVpcmUoXCIuLi9zaGltL1dlYWtNYXBcIik7XHJcbnZhciBOQU1FU1BBQ0VfVzMgPSAnaHR0cDovL3d3dy53My5vcmcvJztcclxudmFyIE5BTUVTUEFDRV9TVkcgPSBOQU1FU1BBQ0VfVzMgKyAnMjAwMC9zdmcnO1xyXG52YXIgTkFNRVNQQUNFX1hMSU5LID0gTkFNRVNQQUNFX1czICsgJzE5OTkveGxpbmsnO1xyXG52YXIgZW1wdHlBcnJheSA9IFtdO1xyXG52YXIgbm9kZU9wZXJhdGlvbnMgPSBbJ2ZvY3VzJywgJ2JsdXInLCAnc2Nyb2xsSW50b1ZpZXcnLCAnY2xpY2snXTtcclxuZXhwb3J0cy53aWRnZXRJbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwXzEuZGVmYXVsdCgpO1xyXG52YXIgaW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcF8xLmRlZmF1bHQoKTtcclxudmFyIG5leHRTaWJsaW5nTWFwID0gbmV3IFdlYWtNYXBfMS5kZWZhdWx0KCk7XHJcbnZhciBwcm9qZWN0b3JTdGF0ZU1hcCA9IG5ldyBXZWFrTWFwXzEuZGVmYXVsdCgpO1xyXG5mdW5jdGlvbiBzYW1lKGRub2RlMSwgZG5vZGUyKSB7XHJcbiAgICBpZiAoZF8xLmlzVk5vZGUoZG5vZGUxKSAmJiBkXzEuaXNWTm9kZShkbm9kZTIpKSB7XHJcbiAgICAgICAgaWYgKGRfMS5pc0RvbVZOb2RlKGRub2RlMSkgfHwgZF8xLmlzRG9tVk5vZGUoZG5vZGUyKSkge1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUxLmRvbU5vZGUgIT09IGRub2RlMi5kb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRub2RlMS50YWcgIT09IGRub2RlMi50YWcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZG5vZGUxLnByb3BlcnRpZXMua2V5ICE9PSBkbm9kZTIucHJvcGVydGllcy5rZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGRfMS5pc1dOb2RlKGRub2RlMSkgJiYgZF8xLmlzV05vZGUoZG5vZGUyKSkge1xyXG4gICAgICAgIGlmIChkbm9kZTEuaW5zdGFuY2UgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZG5vZGUyLndpZGdldENvbnN0cnVjdG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkbm9kZTEud2lkZ2V0Q29uc3RydWN0b3IgIT09IGRub2RlMi53aWRnZXRDb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkbm9kZTEucHJvcGVydGllcy5rZXkgIT09IGRub2RlMi5wcm9wZXJ0aWVzLmtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbnZhciBtaXNzaW5nVHJhbnNpdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZSBhIHRyYW5zaXRpb25zIG9iamVjdCB0byB0aGUgcHJvamVjdGlvbk9wdGlvbnMgdG8gZG8gYW5pbWF0aW9ucycpO1xyXG59O1xyXG5mdW5jdGlvbiBnZXRQcm9qZWN0aW9uT3B0aW9ucyhwcm9qZWN0b3JPcHRpb25zLCBwcm9qZWN0b3JJbnN0YW5jZSkge1xyXG4gICAgdmFyIGRlZmF1bHRzID0ge1xyXG4gICAgICAgIG5hbWVzcGFjZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIHN0eWxlQXBwbHllcjogZnVuY3Rpb24gKGRvbU5vZGUsIHN0eWxlTmFtZSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgZG9tTm9kZS5zdHlsZVtzdHlsZU5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0cmFuc2l0aW9uczoge1xyXG4gICAgICAgICAgICBlbnRlcjogbWlzc2luZ1RyYW5zaXRpb24sXHJcbiAgICAgICAgICAgIGV4aXQ6IG1pc3NpbmdUcmFuc2l0aW9uXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZXB0aDogMCxcclxuICAgICAgICBtZXJnZTogZmFsc2UsXHJcbiAgICAgICAgc3luYzogZmFsc2UsXHJcbiAgICAgICAgcHJvamVjdG9ySW5zdGFuY2U6IHByb2plY3Rvckluc3RhbmNlXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRzbGliXzEuX19hc3NpZ24oe30sIGRlZmF1bHRzLCBwcm9qZWN0b3JPcHRpb25zKTtcclxufVxyXG5mdW5jdGlvbiBjaGVja1N0eWxlVmFsdWUoc3R5bGVWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBzdHlsZVZhbHVlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU3R5bGUgdmFsdWVzIG11c3QgYmUgc3RyaW5ncycpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIGV2ZW50TmFtZSwgY3VycmVudFZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucywgYmluZCwgcHJldmlvdXNWYWx1ZSkge1xyXG4gICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIHZhciBldmVudE1hcCA9IHByb2plY3RvclN0YXRlLm5vZGVNYXAuZ2V0KGRvbU5vZGUpIHx8IG5ldyBXZWFrTWFwXzEuZGVmYXVsdCgpO1xyXG4gICAgaWYgKHByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICB2YXIgcHJldmlvdXNFdmVudCA9IGV2ZW50TWFwLmdldChwcmV2aW91c1ZhbHVlKTtcclxuICAgICAgICBkb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBwcmV2aW91c0V2ZW50KTtcclxuICAgIH1cclxuICAgIHZhciBjYWxsYmFjayA9IGN1cnJlbnRWYWx1ZS5iaW5kKGJpbmQpO1xyXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2lucHV0Jykge1xyXG4gICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGV2dCkge1xyXG4gICAgICAgICAgICBjdXJyZW50VmFsdWUuY2FsbCh0aGlzLCBldnQpO1xyXG4gICAgICAgICAgICBldnQudGFyZ2V0WydvbmlucHV0LXZhbHVlJ10gPSBldnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIH0uYmluZChiaW5kKTtcclxuICAgIH1cclxuICAgIGRvbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKTtcclxuICAgIGV2ZW50TWFwLnNldChjdXJyZW50VmFsdWUsIGNhbGxiYWNrKTtcclxuICAgIHByb2plY3RvclN0YXRlLm5vZGVNYXAuc2V0KGRvbU5vZGUsIGV2ZW50TWFwKTtcclxufVxyXG5mdW5jdGlvbiBhZGRDbGFzc2VzKGRvbU5vZGUsIGNsYXNzZXMpIHtcclxuICAgIGlmIChjbGFzc2VzKSB7XHJcbiAgICAgICAgdmFyIGNsYXNzTmFtZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUuY2xhc3NMaXN0LmFkZChjbGFzc05hbWVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBjbGFzc2VzKSB7XHJcbiAgICBpZiAoY2xhc3Nlcykge1xyXG4gICAgICAgIHZhciBjbGFzc05hbWVzID0gY2xhc3Nlcy5zcGxpdCgnICcpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBkb21Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGJ1aWxkUHJldmlvdXNQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzLCBjdXJyZW50KSB7XHJcbiAgICB2YXIgZGlmZlR5cGUgPSBjdXJyZW50LmRpZmZUeXBlLCBwcm9wZXJ0aWVzID0gY3VycmVudC5wcm9wZXJ0aWVzLCBhdHRyaWJ1dGVzID0gY3VycmVudC5hdHRyaWJ1dGVzO1xyXG4gICAgaWYgKCFkaWZmVHlwZSB8fCBkaWZmVHlwZSA9PT0gJ3Zkb20nKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgcHJvcGVydGllczogcHJldmlvdXMucHJvcGVydGllcywgYXR0cmlidXRlczogcHJldmlvdXMuYXR0cmlidXRlcywgZXZlbnRzOiBwcmV2aW91cy5ldmVudHMgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGRpZmZUeXBlID09PSAnbm9uZScpIHtcclxuICAgICAgICByZXR1cm4geyBwcm9wZXJ0aWVzOiB7fSwgYXR0cmlidXRlczogcHJldmlvdXMuYXR0cmlidXRlcyA/IHt9IDogdW5kZWZpbmVkLCBldmVudHM6IHByZXZpb3VzLmV2ZW50cyB9O1xyXG4gICAgfVxyXG4gICAgdmFyIG5ld1Byb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgcHJvcGVydGllczoge31cclxuICAgIH07XHJcbiAgICBpZiAoYXR0cmlidXRlcykge1xyXG4gICAgICAgIG5ld1Byb3BlcnRpZXMuYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIG5ld1Byb3BlcnRpZXMuZXZlbnRzID0gcHJldmlvdXMuZXZlbnRzO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMucHJvcGVydGllc1twcm9wTmFtZV0gPSBkb21Ob2RlW3Byb3BOYW1lXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyTmFtZSkge1xyXG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLmF0dHJpYnV0ZXNbYXR0ck5hbWVdID0gZG9tTm9kZS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBuZXdQcm9wZXJ0aWVzO1xyXG4gICAgfVxyXG4gICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykucmVkdWNlKGZ1bmN0aW9uIChwcm9wcywgcHJvcGVydHkpIHtcclxuICAgICAgICBwcm9wc1twcm9wZXJ0eV0gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZShwcm9wZXJ0eSkgfHwgZG9tTm9kZVtwcm9wZXJ0eV07XHJcbiAgICAgICAgcmV0dXJuIHByb3BzO1xyXG4gICAgfSwge30pO1xyXG4gICAgcmV0dXJuIG5ld1Byb3BlcnRpZXM7XHJcbn1cclxuZnVuY3Rpb24gbm9kZU9wZXJhdGlvbihwcm9wTmFtZSwgcHJvcFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBkb21Ob2RlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgdmFyIHJlc3VsdDtcclxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcHJvcFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSBwcm9wVmFsdWUgJiYgIXByZXZpb3VzVmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZG9tTm9kZVtwcm9wTmFtZV0oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMsIHByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zLCBvbmx5RXZlbnRzKSB7XHJcbiAgICBpZiAob25seUV2ZW50cyA9PT0gdm9pZCAwKSB7IG9ubHlFdmVudHMgPSBmYWxzZTsgfVxyXG4gICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIHZhciBldmVudE1hcCA9IHByb2plY3RvclN0YXRlLm5vZGVNYXAuZ2V0KGRvbU5vZGUpO1xyXG4gICAgaWYgKGV2ZW50TWFwKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocHJldmlvdXNQcm9wZXJ0aWVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgaXNFdmVudCA9IHByb3BOYW1lLnN1YnN0cigwLCAyKSA9PT0gJ29uJyB8fCBvbmx5RXZlbnRzO1xyXG4gICAgICAgICAgICB2YXIgZXZlbnROYW1lID0gb25seUV2ZW50cyA/IHByb3BOYW1lIDogcHJvcE5hbWUuc3Vic3RyKDIpO1xyXG4gICAgICAgICAgICBpZiAoaXNFdmVudCAmJiAhcHJvcGVydGllc1twcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHZhciBldmVudENhbGxiYWNrID0gZXZlbnRNYXAuZ2V0KHByZXZpb3VzUHJvcGVydGllc1twcm9wTmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Q2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudENhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZShkb21Ob2RlLCBhdHRyTmFtZSwgYXR0clZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgaWYgKHByb2plY3Rpb25PcHRpb25zLm5hbWVzcGFjZSA9PT0gTkFNRVNQQUNFX1NWRyAmJiBhdHRyTmFtZSA9PT0gJ2hyZWYnKSB7XHJcbiAgICAgICAgZG9tTm9kZS5zZXRBdHRyaWJ1dGVOUyhOQU1FU1BBQ0VfWExJTkssIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoKGF0dHJOYW1lID09PSAncm9sZScgJiYgYXR0clZhbHVlID09PSAnJykgfHwgYXR0clZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBkb21Ob2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyTmFtZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBkb21Ob2RlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0clZhbHVlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGUsIHByZXZpb3VzQXR0cmlidXRlcywgYXR0cmlidXRlcywgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIHZhciBhdHRyTmFtZXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKTtcclxuICAgIHZhciBhdHRyQ291bnQgPSBhdHRyTmFtZXMubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyQ291bnQ7IGkrKykge1xyXG4gICAgICAgIHZhciBhdHRyTmFtZSA9IGF0dHJOYW1lc1tpXTtcclxuICAgICAgICB2YXIgYXR0clZhbHVlID0gYXR0cmlidXRlc1thdHRyTmFtZV07XHJcbiAgICAgICAgdmFyIHByZXZpb3VzQXR0clZhbHVlID0gcHJldmlvdXNBdHRyaWJ1dGVzW2F0dHJOYW1lXTtcclxuICAgICAgICBpZiAoYXR0clZhbHVlICE9PSBwcmV2aW91c0F0dHJWYWx1ZSkge1xyXG4gICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGUoZG9tTm9kZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHByZXZpb3VzUHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMsIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcykge1xyXG4gICAgaWYgKGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcyA9PT0gdm9pZCAwKSB7IGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcyA9IHRydWU7IH1cclxuICAgIHZhciBwcm9wZXJ0aWVzVXBkYXRlZCA9IGZhbHNlO1xyXG4gICAgdmFyIHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpO1xyXG4gICAgdmFyIHByb3BDb3VudCA9IHByb3BOYW1lcy5sZW5ndGg7XHJcbiAgICBpZiAocHJvcE5hbWVzLmluZGV4T2YoJ2NsYXNzZXMnKSA9PT0gLTEgJiYgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3NlcykpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMuY2xhc3Nlc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoZG9tTm9kZSwgcHJldmlvdXNQcm9wZXJ0aWVzLmNsYXNzZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcyAmJiByZW1vdmVPcnBoYW5lZEV2ZW50cyhkb21Ob2RlLCBwcmV2aW91c1Byb3BlcnRpZXMsIHByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcENvdW50OyBpKyspIHtcclxuICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTmFtZXNbaV07XHJcbiAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BlcnRpZXNbcHJvcE5hbWVdO1xyXG4gICAgICAgIHZhciBwcmV2aW91c1ZhbHVlID0gcHJldmlvdXNQcm9wZXJ0aWVzW3Byb3BOYW1lXTtcclxuICAgICAgICBpZiAocHJvcE5hbWUgPT09ICdjbGFzc2VzJykge1xyXG4gICAgICAgICAgICB2YXIgcHJldmlvdXNDbGFzc2VzID0gQXJyYXkuaXNBcnJheShwcmV2aW91c1ZhbHVlKSA/IHByZXZpb3VzVmFsdWUgOiBbcHJldmlvdXNWYWx1ZV07XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50Q2xhc3NlcyA9IEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSA/IHByb3BWYWx1ZSA6IFtwcm9wVmFsdWVdO1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNDbGFzc2VzICYmIHByZXZpb3VzQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BWYWx1ZSB8fCBwcm9wVmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV8xID0gMDsgaV8xIDwgcHJldmlvdXNDbGFzc2VzLmxlbmd0aDsgaV8xKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Nlcyhkb21Ob2RlLCBwcmV2aW91c0NsYXNzZXNbaV8xXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0NsYXNzZXMgPSB0c2xpYl8xLl9fc3ByZWFkKGN1cnJlbnRDbGFzc2VzKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpXzIgPSAwOyBpXzIgPCBwcmV2aW91c0NsYXNzZXMubGVuZ3RoOyBpXzIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNDbGFzc05hbWUgPSBwcmV2aW91c0NsYXNzZXNbaV8yXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xhc3NJbmRleCA9IG5ld0NsYXNzZXMuaW5kZXhPZihwcmV2aW91c0NsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGRvbU5vZGUsIHByZXZpb3VzQ2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NsYXNzZXMuc3BsaWNlKGNsYXNzSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlfMyA9IDA7IGlfMyA8IG5ld0NsYXNzZXMubGVuZ3RoOyBpXzMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRDbGFzc2VzKGRvbU5vZGUsIG5ld0NsYXNzZXNbaV8zXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaV80ID0gMDsgaV80IDwgY3VycmVudENsYXNzZXMubGVuZ3RoOyBpXzQrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkZENsYXNzZXMoZG9tTm9kZSwgY3VycmVudENsYXNzZXNbaV80XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9kZU9wZXJhdGlvbnMuaW5kZXhPZihwcm9wTmFtZSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIG5vZGVPcGVyYXRpb24ocHJvcE5hbWUsIHByb3BWYWx1ZSwgcHJldmlvdXNWYWx1ZSwgZG9tTm9kZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcm9wTmFtZSA9PT0gJ3N0eWxlcycpIHtcclxuICAgICAgICAgICAgdmFyIHN0eWxlTmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wVmFsdWUpO1xyXG4gICAgICAgICAgICB2YXIgc3R5bGVDb3VudCA9IHN0eWxlTmFtZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0eWxlQ291bnQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0eWxlTmFtZSA9IHN0eWxlTmFtZXNbal07XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3U3R5bGVWYWx1ZSA9IHByb3BWYWx1ZVtzdHlsZU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9sZFN0eWxlVmFsdWUgPSBwcmV2aW91c1ZhbHVlICYmIHByZXZpb3VzVmFsdWVbc3R5bGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXdTdHlsZVZhbHVlID09PSBvbGRTdHlsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3U3R5bGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrU3R5bGVWYWx1ZShuZXdTdHlsZVZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucy5zdHlsZUFwcGx5ZXIoZG9tTm9kZSwgc3R5bGVOYW1lLCBuZXdTdHlsZVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25PcHRpb25zLnN0eWxlQXBwbHllcihkb21Ob2RlLCBzdHlsZU5hbWUsICcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFwcm9wVmFsdWUgJiYgdHlwZW9mIHByZXZpb3VzVmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcE5hbWUgPT09ICd2YWx1ZScpIHtcclxuICAgICAgICAgICAgICAgIHZhciBkb21WYWx1ZSA9IGRvbU5vZGVbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvbVZhbHVlICE9PSBwcm9wVmFsdWUgJiZcclxuICAgICAgICAgICAgICAgICAgICAoZG9tTm9kZVsnb25pbnB1dC12YWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZG9tVmFsdWUgPT09IGRvbU5vZGVbJ29uaW5wdXQtdmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHByb3BWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlWydvbmlucHV0LXZhbHVlJ10gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1VwZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3BOYW1lICE9PSAna2V5JyAmJiBwcm9wVmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb24nICYmIHByb3BOYW1lLmxhc3RJbmRleE9mKCdvbicsIDApID09PSAwICYmIGluY2x1ZGVzRXZlbnRzQW5kQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGRvbU5vZGUsIHByb3BOYW1lLnN1YnN0cigyKSwgcHJvcFZhbHVlLCBwcm9qZWN0aW9uT3B0aW9ucywgcHJvcGVydGllcy5iaW5kLCBwcmV2aW91c1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHByb3BOYW1lICE9PSAnaW5uZXJIVE1MJyAmJiBpbmNsdWRlc0V2ZW50c0FuZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGUoZG9tTm9kZSwgcHJvcE5hbWUsIHByb3BWYWx1ZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcE5hbWUgPT09ICdzY3JvbGxMZWZ0JyB8fCBwcm9wTmFtZSA9PT0gJ3Njcm9sbFRvcCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tTm9kZVtwcm9wTmFtZV0gIT09IHByb3BWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlW3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNVcGRhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wZXJ0aWVzVXBkYXRlZDtcclxufVxyXG5mdW5jdGlvbiBmaW5kSW5kZXhPZkNoaWxkKGNoaWxkcmVuLCBzYW1lQXMsIHN0YXJ0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChzYW1lKGNoaWxkcmVuW2ldLCBzYW1lQXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG5mdW5jdGlvbiB0b1BhcmVudFZOb2RlKGRvbU5vZGUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdGFnOiAnJyxcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7fSxcclxuICAgICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxyXG4gICAgICAgIGRvbU5vZGU6IGRvbU5vZGUsXHJcbiAgICAgICAgdHlwZTogZF8xLlZOT0RFXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydHMudG9QYXJlbnRWTm9kZSA9IHRvUGFyZW50Vk5vZGU7XHJcbmZ1bmN0aW9uIHRvVGV4dFZOb2RlKGRhdGEpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdGFnOiAnJyxcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7fSxcclxuICAgICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRleHQ6IFwiXCIgKyBkYXRhLFxyXG4gICAgICAgIGRvbU5vZGU6IHVuZGVmaW5lZCxcclxuICAgICAgICB0eXBlOiBkXzEuVk5PREVcclxuICAgIH07XHJcbn1cclxuZXhwb3J0cy50b1RleHRWTm9kZSA9IHRvVGV4dFZOb2RlO1xyXG5mdW5jdGlvbiB0b0ludGVybmFsV05vZGUoaW5zdGFuY2UsIGluc3RhbmNlRGF0YSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXHJcbiAgICAgICAgcmVuZGVyZWQ6IFtdLFxyXG4gICAgICAgIGNvcmVQcm9wZXJ0aWVzOiBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMsXHJcbiAgICAgICAgY2hpbGRyZW46IGluc3RhbmNlLmNoaWxkcmVuLFxyXG4gICAgICAgIHdpZGdldENvbnN0cnVjdG9yOiBpbnN0YW5jZS5jb25zdHJ1Y3RvcixcclxuICAgICAgICBwcm9wZXJ0aWVzOiBpbnN0YW5jZURhdGEuaW5wdXRQcm9wZXJ0aWVzLFxyXG4gICAgICAgIHR5cGU6IGRfMS5XTk9ERVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKGNoaWxkcmVuLCBpbnN0YW5jZSkge1xyXG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gZW1wdHlBcnJheTtcclxuICAgIH1cclxuICAgIGNoaWxkcmVuID0gQXJyYXkuaXNBcnJheShjaGlsZHJlbikgPyBjaGlsZHJlbiA6IFtjaGlsZHJlbl07XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDspIHtcclxuICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCB8fCBjaGlsZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gdG9UZXh0Vk5vZGUoY2hpbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRfMS5pc1ZOb2RlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLnByb3BlcnRpZXMuYmluZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQucHJvcGVydGllcy5iaW5kID0gaW5zdGFuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghY2hpbGQuY29yZVByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gZXhwb3J0cy53aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmNvcmVQcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kOiBpbnN0YW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJlZ2lzdHJ5OiBpbnN0YW5jZURhdGEuY29yZVByb3BlcnRpZXMuYmFzZVJlZ2lzdHJ5XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGkrKztcclxuICAgIH1cclxuICAgIHJldHVybiBjaGlsZHJlbjtcclxufVxyXG5leHBvcnRzLmZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4gPSBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuO1xyXG5mdW5jdGlvbiBub2RlQWRkZWQoZG5vZGUsIHRyYW5zaXRpb25zKSB7XHJcbiAgICBpZiAoZF8xLmlzVk5vZGUoZG5vZGUpICYmIGRub2RlLnByb3BlcnRpZXMpIHtcclxuICAgICAgICB2YXIgZW50ZXJBbmltYXRpb24gPSBkbm9kZS5wcm9wZXJ0aWVzLmVudGVyQW5pbWF0aW9uO1xyXG4gICAgICAgIGlmIChlbnRlckFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudGVyQW5pbWF0aW9uID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRlckFuaW1hdGlvbihkbm9kZS5kb21Ob2RlLCBkbm9kZS5wcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmVudGVyKGRub2RlLmRvbU5vZGUsIGRub2RlLnByb3BlcnRpZXMsIGVudGVyQW5pbWF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBub2RlVG9SZW1vdmUoZG5vZGUsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgaWYgKGRfMS5pc1dOb2RlKGRub2RlKSkge1xyXG4gICAgICAgIHZhciBpdGVtID0gaW5zdGFuY2VNYXAuZ2V0KGRub2RlLmluc3RhbmNlKTtcclxuICAgICAgICB2YXIgcmVuZGVyZWQgPSAoaXRlbSA/IGl0ZW0uZG5vZGUucmVuZGVyZWQgOiBkbm9kZS5yZW5kZXJlZCkgfHwgZW1wdHlBcnJheTtcclxuICAgICAgICBpZiAoZG5vZGUuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IGV4cG9ydHMud2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGRub2RlLmluc3RhbmNlKTtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLm9uRGV0YWNoKCk7XHJcbiAgICAgICAgICAgIGluc3RhbmNlTWFwLmRlbGV0ZShkbm9kZS5pbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZGVyZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbm9kZVRvUmVtb3ZlKHJlbmRlcmVkW2ldLCB0cmFuc2l0aW9ucywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBkb21Ob2RlXzEgPSBkbm9kZS5kb21Ob2RlO1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gZG5vZGUucHJvcGVydGllcztcclxuICAgICAgICBpZiAoZG5vZGUuY2hpbGRyZW4gJiYgZG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUoZG5vZGUuY2hpbGRyZW5baV0sIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGV4aXRBbmltYXRpb24gPSBwcm9wZXJ0aWVzLmV4aXRBbmltYXRpb247XHJcbiAgICAgICAgaWYgKHByb3BlcnRpZXMgJiYgZXhpdEFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICBkb21Ob2RlXzEuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgICAgICAgICAgdmFyIHJlbW92ZURvbU5vZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBkb21Ob2RlXzEgJiYgZG9tTm9kZV8xLnBhcmVudE5vZGUgJiYgZG9tTm9kZV8xLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZV8xKTtcclxuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhpdEFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZXhpdEFuaW1hdGlvbihkb21Ob2RlXzEsIHJlbW92ZURvbU5vZGUsIHByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuZXhpdChkbm9kZS5kb21Ob2RlLCBwcm9wZXJ0aWVzLCBleGl0QW5pbWF0aW9uLCByZW1vdmVEb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkb21Ob2RlXzEgJiYgZG9tTm9kZV8xLnBhcmVudE5vZGUgJiYgZG9tTm9kZV8xLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZV8xKTtcclxuICAgICAgICBkbm9kZS5kb21Ob2RlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKGNoaWxkTm9kZXMsIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpIHtcclxuICAgIHZhciBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2luZGV4VG9DaGVja107XHJcbiAgICBpZiAoZF8xLmlzVk5vZGUoY2hpbGROb2RlKSAmJiAhY2hpbGROb2RlLnRhZykge1xyXG4gICAgICAgIHJldHVybjsgLy8gVGV4dCBub2RlcyBuZWVkIG5vdCBiZSBkaXN0aW5ndWlzaGFibGVcclxuICAgIH1cclxuICAgIHZhciBrZXkgPSBjaGlsZE5vZGUucHJvcGVydGllcy5rZXk7XHJcbiAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpICE9PSBpbmRleFRvQ2hlY2spIHtcclxuICAgICAgICAgICAgICAgIHZhciBub2RlID0gY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChzYW1lKG5vZGUsIGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZUlkZW50aWZpZXIgPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudE5hbWUgPSBwYXJlbnRJbnN0YW5jZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICd1bmtub3duJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZF8xLmlzV05vZGUoY2hpbGROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlSWRlbnRpZmllciA9IGNoaWxkTm9kZS53aWRnZXRDb25zdHJ1Y3Rvci5uYW1lIHx8ICd1bmtub3duJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJZGVudGlmaWVyID0gY2hpbGROb2RlLnRhZztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiQSB3aWRnZXQgKFwiICsgcGFyZW50TmFtZSArIFwiKSBoYXMgaGFkIGEgY2hpbGQgYWRkZGVkIG9yIHJlbW92ZWQsIGJ1dCB0aGV5IHdlcmUgbm90IGFibGUgdG8gdW5pcXVlbHkgaWRlbnRpZmllZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gcHJvdmlkZSBhIHVuaXF1ZSAna2V5JyBwcm9wZXJ0eSB3aGVuIHVzaW5nIHRoZSBzYW1lIHdpZGdldCBvciBlbGVtZW50IChcIiArIG5vZGVJZGVudGlmaWVyICsgXCIpIG11bHRpcGxlIHRpbWVzIGFzIHNpYmxpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuKHBhcmVudFZOb2RlLCBzaWJsaW5ncywgb2xkQ2hpbGRyZW4sIG5ld0NoaWxkcmVuLCBwYXJlbnRJbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIG9sZENoaWxkcmVuID0gb2xkQ2hpbGRyZW4gfHwgZW1wdHlBcnJheTtcclxuICAgIG5ld0NoaWxkcmVuID0gbmV3Q2hpbGRyZW47XHJcbiAgICB2YXIgb2xkQ2hpbGRyZW5MZW5ndGggPSBvbGRDaGlsZHJlbi5sZW5ndGg7XHJcbiAgICB2YXIgbmV3Q2hpbGRyZW5MZW5ndGggPSBuZXdDaGlsZHJlbi5sZW5ndGg7XHJcbiAgICB2YXIgdHJhbnNpdGlvbnMgPSBwcm9qZWN0aW9uT3B0aW9ucy50cmFuc2l0aW9ucztcclxuICAgIHZhciBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IHRzbGliXzEuX19hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IGRlcHRoOiBwcm9qZWN0aW9uT3B0aW9ucy5kZXB0aCArIDEgfSk7XHJcbiAgICB2YXIgb2xkSW5kZXggPSAwO1xyXG4gICAgdmFyIG5ld0luZGV4ID0gMDtcclxuICAgIHZhciBpO1xyXG4gICAgdmFyIHRleHRVcGRhdGVkID0gZmFsc2U7XHJcbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgb2xkQ2hpbGQgPSBvbGRJbmRleCA8IG9sZENoaWxkcmVuTGVuZ3RoID8gb2xkQ2hpbGRyZW5bb2xkSW5kZXhdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIHZhciBuZXdDaGlsZCA9IG5ld0NoaWxkcmVuW25ld0luZGV4XTtcclxuICAgICAgICBpZiAoZF8xLmlzVk5vZGUobmV3Q2hpbGQpICYmIHR5cGVvZiBuZXdDaGlsZC5kZWZlcnJlZFByb3BlcnRpZXNDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBuZXdDaGlsZC5pbnNlcnRlZCA9IGRfMS5pc1ZOb2RlKG9sZENoaWxkKSAmJiBvbGRDaGlsZC5pbnNlcnRlZDtcclxuICAgICAgICAgICAgYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKG5ld0NoaWxkLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvbGRDaGlsZCAhPT0gdW5kZWZpbmVkICYmIHNhbWUob2xkQ2hpbGQsIG5ld0NoaWxkKSkge1xyXG4gICAgICAgICAgICBvbGRJbmRleCsrO1xyXG4gICAgICAgICAgICBuZXdJbmRleCsrO1xyXG4gICAgICAgICAgICB0ZXh0VXBkYXRlZCA9XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVEb20ob2xkQ2hpbGQsIG5ld0NoaWxkLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50Vk5vZGUsIHBhcmVudEluc3RhbmNlLCBvbGRDaGlsZHJlbi5zbGljZShvbGRJbmRleCksIG5ld0NoaWxkcmVuLnNsaWNlKG5ld0luZGV4KSkgfHwgdGV4dFVwZGF0ZWQ7XHJcbiAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBmaW5kT2xkSW5kZXggPSBmaW5kSW5kZXhPZkNoaWxkKG9sZENoaWxkcmVuLCBuZXdDaGlsZCwgb2xkSW5kZXggKyAxKTtcclxuICAgICAgICB2YXIgYWRkQ2hpbGQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBpbnNlcnRCZWZvcmVEb21Ob2RlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW5BcnJheSA9IG9sZENoaWxkcmVuO1xyXG4gICAgICAgICAgICB2YXIgbmV4dEluZGV4ID0gb2xkSW5kZXggKyAxO1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBvbGRDaGlsZHJlbltvbGRJbmRleF07XHJcbiAgICAgICAgICAgIGlmICghY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkID0gc2libGluZ3NbMF07XHJcbiAgICAgICAgICAgICAgICBuZXh0SW5kZXggPSAxO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5BcnJheSA9IHNpYmxpbmdzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluc2VydEJlZm9yZUNoaWxkcmVuID0gW2NoaWxkXTtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChpbnNlcnRCZWZvcmVDaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5zZXJ0QmVmb3JlID0gaW5zZXJ0QmVmb3JlQ2hpbGRyZW4uc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZF8xLmlzV05vZGUoaW5zZXJ0QmVmb3JlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGluc3RhbmNlTWFwLmdldChpbnNlcnRCZWZvcmUuaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmRub2RlLnJlbmRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDaGlsZHJlbi5wdXNoLmFwcGx5KGluc2VydEJlZm9yZUNoaWxkcmVuLCB0c2xpYl8xLl9fc3ByZWFkKGl0ZW0uZG5vZGUucmVuZGVyZWQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZS5kb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlLmRvbU5vZGUucGFyZW50RWxlbWVudCAhPT0gcGFyZW50Vk5vZGUuZG9tTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlRG9tTm9kZSA9IGluc2VydEJlZm9yZS5kb21Ob2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydEJlZm9yZUNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiBjaGlsZHJlbkFycmF5W25leHRJbmRleF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmVmb3JlQ2hpbGRyZW4ucHVzaChjaGlsZHJlbkFycmF5W25leHRJbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0SW5kZXgrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3JlYXRlRG9tKG5ld0NoaWxkLCBwYXJlbnRWTm9kZSwgbmV3Q2hpbGRyZW4uc2xpY2UobmV3SW5kZXggKyAxKSwgaW5zZXJ0QmVmb3JlRG9tTm9kZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgbm9kZUFkZGVkKG5ld0NoaWxkLCB0cmFuc2l0aW9ucyk7XHJcbiAgICAgICAgICAgIHZhciBpbmRleFRvQ2hlY2sgPSBuZXdJbmRleDtcclxuICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MucHVzaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjaGVja0Rpc3Rpbmd1aXNoYWJsZShuZXdDaGlsZHJlbiwgaW5kZXhUb0NoZWNrLCBwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCFvbGRDaGlsZCB8fCBmaW5kT2xkSW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGFkZENoaWxkKCk7XHJcbiAgICAgICAgICAgIG5ld0luZGV4Kys7XHJcbiAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZW1vdmVDaGlsZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4VG9DaGVjayA9IG9sZEluZGV4O1xyXG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGNoZWNrRGlzdGluZ3Vpc2hhYmxlKG9sZENoaWxkcmVuLCBpbmRleFRvQ2hlY2ssIHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChkXzEuaXNXTm9kZShvbGRDaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gaW5zdGFuY2VNYXAuZ2V0KG9sZENoaWxkLmluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2xkQ2hpbGQgPSBpdGVtLmRub2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5vZGVUb1JlbW92ZShvbGRDaGlsZCwgdHJhbnNpdGlvbnMsIHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBmaW5kTmV3SW5kZXggPSBmaW5kSW5kZXhPZkNoaWxkKG5ld0NoaWxkcmVuLCBvbGRDaGlsZCwgbmV3SW5kZXggKyAxKTtcclxuICAgICAgICBpZiAoZmluZE5ld0luZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICByZW1vdmVDaGlsZCgpO1xyXG4gICAgICAgICAgICBvbGRJbmRleCsrO1xyXG4gICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhZGRDaGlsZCgpO1xyXG4gICAgICAgIHJlbW92ZUNoaWxkKCk7XHJcbiAgICAgICAgb2xkSW5kZXgrKztcclxuICAgICAgICBuZXdJbmRleCsrO1xyXG4gICAgfTtcclxuICAgIHdoaWxlIChuZXdJbmRleCA8IG5ld0NoaWxkcmVuTGVuZ3RoKSB7XHJcbiAgICAgICAgX2xvb3BfMSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9sZENoaWxkcmVuTGVuZ3RoID4gb2xkSW5kZXgpIHtcclxuICAgICAgICB2YXIgX2xvb3BfMiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4VG9DaGVjayA9IGk7XHJcbiAgICAgICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY2hlY2tEaXN0aW5ndWlzaGFibGUob2xkQ2hpbGRyZW4sIGluZGV4VG9DaGVjaywgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIGNoaWxkVG9SZW1vdmUgPSBvbGRDaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGRfMS5pc1dOb2RlKGNoaWxkVG9SZW1vdmUpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGluc3RhbmNlTWFwLmdldChjaGlsZFRvUmVtb3ZlLmluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUb1JlbW92ZSA9IGl0ZW0uZG5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbm9kZVRvUmVtb3ZlKGNoaWxkVG9SZW1vdmUsIHRyYW5zaXRpb25zLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBSZW1vdmUgY2hpbGQgZnJhZ21lbnRzXHJcbiAgICAgICAgZm9yIChpID0gb2xkSW5kZXg7IGkgPCBvbGRDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIF9sb29wXzIoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dFVwZGF0ZWQ7XHJcbn1cclxuZnVuY3Rpb24gYWRkQ2hpbGRyZW4ocGFyZW50Vk5vZGUsIGNoaWxkcmVuLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGluc2VydEJlZm9yZSwgY2hpbGROb2Rlcykge1xyXG4gICAgaWYgKGluc2VydEJlZm9yZSA9PT0gdm9pZCAwKSB7IGluc2VydEJlZm9yZSA9IHVuZGVmaW5lZDsgfVxyXG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgaWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNoaWxkTm9kZXMgPSBhcnJheV8xLmZyb20ocGFyZW50Vk5vZGUuZG9tTm9kZS5jaGlsZE5vZGVzKTtcclxuICAgIH1cclxuICAgIHZhciB0cmFuc2l0aW9ucyA9IHByb2plY3Rpb25PcHRpb25zLnRyYW5zaXRpb25zO1xyXG4gICAgcHJvamVjdGlvbk9wdGlvbnMgPSB0c2xpYl8xLl9fYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBkZXB0aDogcHJvamVjdGlvbk9wdGlvbnMuZGVwdGggKyAxIH0pO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgIHZhciBuZXh0U2libGluZ3MgPSBjaGlsZHJlbi5zbGljZShpICsgMSk7XHJcbiAgICAgICAgaWYgKGRfMS5pc1ZOb2RlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICBpZiAocHJvamVjdG9yU3RhdGUubWVyZ2UgJiYgY2hpbGROb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRvbUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGQuZG9tTm9kZSA9PT0gdW5kZWZpbmVkICYmIGNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQgPSBjaGlsZE5vZGVzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbUVsZW1lbnQgJiYgZG9tRWxlbWVudC50YWdOYW1lID09PSAoY2hpbGQudGFnLnRvVXBwZXJDYXNlKCkgfHwgdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5kb21Ob2RlID0gZG9tRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3JlYXRlRG9tKGNoaWxkLCBwYXJlbnRWTm9kZSwgbmV4dFNpYmxpbmdzLCBpbnNlcnRCZWZvcmUsIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjcmVhdGVEb20oY2hpbGQsIHBhcmVudFZOb2RlLCBuZXh0U2libGluZ3MsIGluc2VydEJlZm9yZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudEluc3RhbmNlLCBjaGlsZE5vZGVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZUFkZGVkKGNoaWxkLCB0cmFuc2l0aW9ucyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaW5pdFByb3BlcnRpZXNBbmRDaGlsZHJlbihkb21Ob2RlLCBkbm9kZSwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB7XHJcbiAgICBhZGRDaGlsZHJlbihkbm9kZSwgZG5vZGUuY2hpbGRyZW4sIHByb2plY3Rpb25PcHRpb25zLCBwYXJlbnRJbnN0YW5jZSwgdW5kZWZpbmVkKTtcclxuICAgIGlmICh0eXBlb2YgZG5vZGUuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgJiYgZG5vZGUuaW5zZXJ0ZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGFkZERlZmVycmVkUHJvcGVydGllcyhkbm9kZSwgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRub2RlLmF0dHJpYnV0ZXMgJiYgZG5vZGUuZXZlbnRzKSB7XHJcbiAgICAgICAgdXBkYXRlQXR0cmlidXRlcyhkb21Ob2RlLCB7fSwgZG5vZGUuYXR0cmlidXRlcywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZSwge30sIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zLCBmYWxzZSk7XHJcbiAgICAgICAgcmVtb3ZlT3JwaGFuZWRFdmVudHMoZG9tTm9kZSwge30sIGRub2RlLmV2ZW50cywgcHJvamVjdGlvbk9wdGlvbnMsIHRydWUpO1xyXG4gICAgICAgIHZhciBldmVudHNfMSA9IGRub2RlLmV2ZW50cztcclxuICAgICAgICBPYmplY3Qua2V5cyhldmVudHNfMSkuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgdXBkYXRlRXZlbnQoZG9tTm9kZSwgZXZlbnQsIGV2ZW50c18xW2V2ZW50XSwgcHJvamVjdGlvbk9wdGlvbnMsIGRub2RlLnByb3BlcnRpZXMuYmluZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbU5vZGUsIHt9LCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBpZiAoZG5vZGUucHJvcGVydGllcy5rZXkgIT09IG51bGwgJiYgZG5vZGUucHJvcGVydGllcy5rZXkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHZhciBpbnN0YW5jZURhdGEgPSBleHBvcnRzLndpZGdldEluc3RhbmNlTWFwLmdldChwYXJlbnRJbnN0YW5jZSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZChkb21Ob2RlLCBcIlwiICsgZG5vZGUucHJvcGVydGllcy5rZXkpO1xyXG4gICAgfVxyXG4gICAgZG5vZGUuaW5zZXJ0ZWQgPSB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZURvbShkbm9kZSwgcGFyZW50Vk5vZGUsIG5leHRTaWJsaW5ncywgaW5zZXJ0QmVmb3JlLCBwcm9qZWN0aW9uT3B0aW9ucywgcGFyZW50SW5zdGFuY2UsIGNoaWxkTm9kZXMpIHtcclxuICAgIHZhciBkb21Ob2RlO1xyXG4gICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGlmIChkXzEuaXNXTm9kZShkbm9kZSkpIHtcclxuICAgICAgICB2YXIgd2lkZ2V0Q29uc3RydWN0b3IgPSBkbm9kZS53aWRnZXRDb25zdHJ1Y3RvcjtcclxuICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2VEYXRhID0gZXhwb3J0cy53aWRnZXRJbnN0YW5jZU1hcC5nZXQocGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgIGlmICghUmVnaXN0cnlfMS5pc1dpZGdldEJhc2VDb25zdHJ1Y3Rvcih3aWRnZXRDb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBwYXJlbnRJbnN0YW5jZURhdGEucmVnaXN0cnkoKS5nZXQod2lkZ2V0Q29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpZGdldENvbnN0cnVjdG9yID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGluc3RhbmNlXzEgPSBuZXcgd2lkZ2V0Q29uc3RydWN0b3IoKTtcclxuICAgICAgICBkbm9kZS5pbnN0YW5jZSA9IGluc3RhbmNlXzE7XHJcbiAgICAgICAgbmV4dFNpYmxpbmdNYXAuc2V0KGluc3RhbmNlXzEsIG5leHRTaWJsaW5ncyk7XHJcbiAgICAgICAgdmFyIGluc3RhbmNlRGF0YV8xID0gZXhwb3J0cy53aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2VfMSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhXzEuaW52YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhXzEuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VEYXRhXzEucmVuZGVyaW5nID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvamVjdG9yU3RhdGUucmVuZGVyUXVldWUucHVzaCh7IGluc3RhbmNlOiBpbnN0YW5jZV8xLCBkZXB0aDogcHJvamVjdGlvbk9wdGlvbnMuZGVwdGggfSk7XHJcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGluc3RhbmNlRGF0YV8xLnJlbmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgaW5zdGFuY2VfMS5fX3NldENvcmVQcm9wZXJ0aWVzX18oZG5vZGUuY29yZVByb3BlcnRpZXMpO1xyXG4gICAgICAgIGluc3RhbmNlXzEuX19zZXRDaGlsZHJlbl9fKGRub2RlLmNoaWxkcmVuKTtcclxuICAgICAgICBpbnN0YW5jZV8xLl9fc2V0UHJvcGVydGllc19fKGRub2RlLnByb3BlcnRpZXMpO1xyXG4gICAgICAgIHZhciByZW5kZXJlZCA9IGluc3RhbmNlXzEuX19yZW5kZXJfXygpO1xyXG4gICAgICAgIGluc3RhbmNlRGF0YV8xLnJlbmRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChyZW5kZXJlZCkge1xyXG4gICAgICAgICAgICB2YXIgZmlsdGVyZWRSZW5kZXJlZCA9IGZpbHRlckFuZERlY29yYXRlQ2hpbGRyZW4ocmVuZGVyZWQsIGluc3RhbmNlXzEpO1xyXG4gICAgICAgICAgICBkbm9kZS5yZW5kZXJlZCA9IGZpbHRlcmVkUmVuZGVyZWQ7XHJcbiAgICAgICAgICAgIGFkZENoaWxkcmVuKHBhcmVudFZOb2RlLCBmaWx0ZXJlZFJlbmRlcmVkLCBwcm9qZWN0aW9uT3B0aW9ucywgaW5zdGFuY2VfMSwgaW5zZXJ0QmVmb3JlLCBjaGlsZE5vZGVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlXzEsIHsgZG5vZGU6IGRub2RlLCBwYXJlbnRWTm9kZTogcGFyZW50Vk5vZGUgfSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhXzEubm9kZUhhbmRsZXIuYWRkUm9vdCgpO1xyXG4gICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGFfMS5vbkF0dGFjaCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHByb2plY3RvclN0YXRlLm1lcmdlICYmIHByb2plY3RvclN0YXRlLm1lcmdlRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gcHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50O1xyXG4gICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5tZXJnZUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRvYyA9IHBhcmVudFZOb2RlLmRvbU5vZGUub3duZXJEb2N1bWVudDtcclxuICAgICAgICBpZiAoIWRub2RlLnRhZyAmJiB0eXBlb2YgZG5vZGUudGV4dCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGRub2RlLmRvbU5vZGUgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRWTm9kZS5kb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3RG9tTm9kZSA9IGRub2RlLmRvbU5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkbm9kZS50ZXh0KTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRWTm9kZS5kb21Ob2RlID09PSBkbm9kZS5kb21Ob2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLnJlcGxhY2VDaGlsZChuZXdEb21Ob2RlLCBkbm9kZS5kb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQobmV3RG9tTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZS5wYXJlbnROb2RlICYmIGRub2RlLmRvbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkbm9kZS5kb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRub2RlLmRvbU5vZGUgPSBuZXdEb21Ob2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoZG5vZGUudGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QmVmb3JlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRWTm9kZS5kb21Ob2RlLmluc2VydEJlZm9yZShkb21Ob2RlLCBpbnNlcnRCZWZvcmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5hcHBlbmRDaGlsZChkb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRub2RlLmRvbU5vZGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRub2RlLnRhZyA9PT0gJ3N2ZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uT3B0aW9ucyA9IHRzbGliXzEuX19hc3NpZ24oe30sIHByb2plY3Rpb25PcHRpb25zLCB7IG5hbWVzcGFjZTogTkFNRVNQQUNFX1NWRyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhwcm9qZWN0aW9uT3B0aW9ucy5uYW1lc3BhY2UsIGRub2RlLnRhZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG5vZGUuZG9tTm9kZSA9IGRub2RlLmRvbU5vZGUgfHwgZG9jLmNyZWF0ZUVsZW1lbnQoZG5vZGUudGFnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBkbm9kZS5kb21Ob2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluaXRQcm9wZXJ0aWVzQW5kQ2hpbGRyZW4oZG9tTm9kZSwgZG5vZGUsIHBhcmVudEluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGlmIChpbnNlcnRCZWZvcmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tTm9kZS5pbnNlcnRCZWZvcmUoZG9tTm9kZSwgaW5zZXJ0QmVmb3JlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkb21Ob2RlLnBhcmVudE5vZGUgIT09IHBhcmVudFZOb2RlLmRvbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbU5vZGUuYXBwZW5kQ2hpbGQoZG9tTm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlRG9tKHByZXZpb3VzLCBkbm9kZSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBwYXJlbnRJbnN0YW5jZSwgb2xkTmV4dFNpYmxpbmdzLCBuZXh0U2libGluZ3MpIHtcclxuICAgIGlmIChkXzEuaXNXTm9kZShkbm9kZSkpIHtcclxuICAgICAgICB2YXIgaW5zdGFuY2UgPSBwcmV2aW91cy5pbnN0YW5jZTtcclxuICAgICAgICB2YXIgX2EgPSBpbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpLCBwYXJlbnRWTm9kZV8xID0gX2EucGFyZW50Vk5vZGUsIG5vZGUgPSBfYS5kbm9kZTtcclxuICAgICAgICB2YXIgcHJldmlvdXNSZW5kZXJlZCA9IG5vZGUgPyBub2RlLnJlbmRlcmVkIDogcHJldmlvdXMucmVuZGVyZWQ7XHJcbiAgICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IGV4cG9ydHMud2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICBpbnN0YW5jZS5fX3NldENvcmVQcm9wZXJ0aWVzX18oZG5vZGUuY29yZVByb3BlcnRpZXMpO1xyXG4gICAgICAgIGluc3RhbmNlLl9fc2V0Q2hpbGRyZW5fXyhkbm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgaW5zdGFuY2UuX19zZXRQcm9wZXJ0aWVzX18oZG5vZGUucHJvcGVydGllcyk7XHJcbiAgICAgICAgbmV4dFNpYmxpbmdNYXAuc2V0KGluc3RhbmNlLCBuZXh0U2libGluZ3MpO1xyXG4gICAgICAgIGRub2RlLmluc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5kaXJ0eSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyZWQgPSBpbnN0YW5jZS5fX3JlbmRlcl9fKCk7XHJcbiAgICAgICAgICAgIGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgZG5vZGUucmVuZGVyZWQgPSBmaWx0ZXJBbmREZWNvcmF0ZUNoaWxkcmVuKHJlbmRlcmVkLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKHBhcmVudFZOb2RlXzEsIG9sZE5leHRTaWJsaW5ncywgcHJldmlvdXNSZW5kZXJlZCwgZG5vZGUucmVuZGVyZWQsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGEucmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGRub2RlLnJlbmRlcmVkID0gcHJldmlvdXNSZW5kZXJlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5zdGFuY2VNYXAuc2V0KGluc3RhbmNlLCB7IGRub2RlOiBkbm9kZSwgcGFyZW50Vk5vZGU6IHBhcmVudFZOb2RlXzEgfSk7XHJcbiAgICAgICAgaW5zdGFuY2VEYXRhLm5vZGVIYW5kbGVyLmFkZFJvb3QoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChwcmV2aW91cyA9PT0gZG5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZG9tTm9kZV8yID0gKGRub2RlLmRvbU5vZGUgPSBwcmV2aW91cy5kb21Ob2RlKTtcclxuICAgICAgICB2YXIgdGV4dFVwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgdXBkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghZG5vZGUudGFnICYmIHR5cGVvZiBkbm9kZS50ZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZG5vZGUudGV4dCAhPT0gcHJldmlvdXMudGV4dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld0RvbU5vZGUgPSBkb21Ob2RlXzIub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkbm9kZS50ZXh0KTtcclxuICAgICAgICAgICAgICAgIGRvbU5vZGVfMi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdEb21Ob2RlLCBkb21Ob2RlXzIpO1xyXG4gICAgICAgICAgICAgICAgZG5vZGUuZG9tTm9kZSA9IG5ld0RvbU5vZGU7XHJcbiAgICAgICAgICAgICAgICB0ZXh0VXBkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFVwZGF0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChkbm9kZS50YWcgJiYgZG5vZGUudGFnLmxhc3RJbmRleE9mKCdzdmcnLCAwKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMgPSB0c2xpYl8xLl9fYXNzaWduKHt9LCBwcm9qZWN0aW9uT3B0aW9ucywgeyBuYW1lc3BhY2U6IE5BTUVTUEFDRV9TVkcgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHByZXZpb3VzLmNoaWxkcmVuICE9PSBkbm9kZS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZmlsdGVyQW5kRGVjb3JhdGVDaGlsZHJlbihkbm9kZS5jaGlsZHJlbiwgcGFyZW50SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgZG5vZGUuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKGRub2RlLCBvbGROZXh0U2libGluZ3MsIHByZXZpb3VzLmNoaWxkcmVuLCBjaGlsZHJlbiwgcGFyZW50SW5zdGFuY2UsIHByb2plY3Rpb25PcHRpb25zKSB8fCB1cGRhdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwcmV2aW91c1Byb3BlcnRpZXNfMSA9IGJ1aWxkUHJldmlvdXNQcm9wZXJ0aWVzKGRvbU5vZGVfMiwgcHJldmlvdXMsIGRub2RlKTtcclxuICAgICAgICAgICAgaWYgKGRub2RlLmF0dHJpYnV0ZXMgJiYgZG5vZGUuZXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGVzKGRvbU5vZGVfMiwgcHJldmlvdXNQcm9wZXJ0aWVzXzEuYXR0cmlidXRlcywgZG5vZGUuYXR0cmlidXRlcywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlZCA9XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21Ob2RlXzIsIHByZXZpb3VzUHJvcGVydGllc18xLnByb3BlcnRpZXMsIGRub2RlLnByb3BlcnRpZXMsIHByb2plY3Rpb25PcHRpb25zLCBmYWxzZSkgfHwgdXBkYXRlZDtcclxuICAgICAgICAgICAgICAgIHJlbW92ZU9ycGhhbmVkRXZlbnRzKGRvbU5vZGVfMiwgcHJldmlvdXNQcm9wZXJ0aWVzXzEuZXZlbnRzLCBkbm9kZS5ldmVudHMsIHByb2plY3Rpb25PcHRpb25zLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHZhciBldmVudHNfMiA9IGRub2RlLmV2ZW50cztcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGV2ZW50c18yKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGRvbU5vZGVfMiwgZXZlbnQsIGV2ZW50c18yW2V2ZW50XSwgcHJvamVjdGlvbk9wdGlvbnMsIGRub2RlLnByb3BlcnRpZXMuYmluZCwgcHJldmlvdXNQcm9wZXJ0aWVzXzEuZXZlbnRzW2V2ZW50XSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZG9tTm9kZV8yLCBwcmV2aW91c1Byb3BlcnRpZXNfMS5wcm9wZXJ0aWVzLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcm9qZWN0aW9uT3B0aW9ucykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZG5vZGUucHJvcGVydGllcy5rZXkgIT09IG51bGwgJiYgZG5vZGUucHJvcGVydGllcy5rZXkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IGV4cG9ydHMud2lkZ2V0SW5zdGFuY2VNYXAuZ2V0KHBhcmVudEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlRGF0YS5ub2RlSGFuZGxlci5hZGQoZG9tTm9kZV8yLCBcIlwiICsgZG5vZGUucHJvcGVydGllcy5rZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1cGRhdGVkICYmIGRub2RlLnByb3BlcnRpZXMgJiYgZG5vZGUucHJvcGVydGllcy51cGRhdGVBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgZG5vZGUucHJvcGVydGllcy51cGRhdGVBbmltYXRpb24oZG9tTm9kZV8yLCBkbm9kZS5wcm9wZXJ0aWVzLCBwcmV2aW91cy5wcm9wZXJ0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gYWRkRGVmZXJyZWRQcm9wZXJ0aWVzKHZub2RlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgLy8gdHJhbnNmZXIgYW55IHByb3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkIC0gYXMgdGhlc2UgbXVzdCBiZSBkZWNvcmF0ZWQgcHJvcGVydGllc1xyXG4gICAgdm5vZGUuZGVjb3JhdGVkRGVmZXJyZWRQcm9wZXJ0aWVzID0gdm5vZGUucHJvcGVydGllcztcclxuICAgIHZhciBwcm9wZXJ0aWVzID0gdm5vZGUuZGVmZXJyZWRQcm9wZXJ0aWVzQ2FsbGJhY2soISF2bm9kZS5pbnNlcnRlZCk7XHJcbiAgICB2YXIgcHJvamVjdG9yU3RhdGUgPSBwcm9qZWN0b3JTdGF0ZU1hcC5nZXQocHJvamVjdGlvbk9wdGlvbnMucHJvamVjdG9ySW5zdGFuY2UpO1xyXG4gICAgdm5vZGUucHJvcGVydGllcyA9IHRzbGliXzEuX19hc3NpZ24oe30sIHByb3BlcnRpZXMsIHZub2RlLmRlY29yYXRlZERlZmVycmVkUHJvcGVydGllcyk7XHJcbiAgICBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRzbGliXzEuX19hc3NpZ24oe30sIHZub2RlLmRlZmVycmVkUHJvcGVydGllc0NhbGxiYWNrKCEhdm5vZGUuaW5zZXJ0ZWQpLCB2bm9kZS5kZWNvcmF0ZWREZWZlcnJlZFByb3BlcnRpZXMpO1xyXG4gICAgICAgIHVwZGF0ZVByb3BlcnRpZXModm5vZGUuZG9tTm9kZSwgdm5vZGUucHJvcGVydGllcywgcHJvcGVydGllcywgcHJvamVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgIHZub2RlLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gcnVuRGVmZXJyZWRSZW5kZXJDYWxsYmFja3MocHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIHZhciBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBpZiAocHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHByb2plY3Rpb25PcHRpb25zLnN5bmMpIHtcclxuICAgICAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuZGVmZXJyZWRSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGdsb2JhbF8xLmRlZmF1bHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5kZWZlcnJlZFJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBydW5BZnRlclJlbmRlckNhbGxiYWNrcyhwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KHByb2plY3Rpb25PcHRpb25zLnByb2plY3Rvckluc3RhbmNlKTtcclxuICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucy5zeW5jKSB7XHJcbiAgICAgICAgd2hpbGUgKHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChnbG9iYWxfMS5kZWZhdWx0LnJlcXVlc3RJZGxlQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgZ2xvYmFsXzEuZGVmYXVsdC5yZXF1ZXN0SWRsZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBwcm9qZWN0b3JTdGF0ZS5hZnRlclJlbmRlckNhbGxiYWNrcy5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAocHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gcHJvamVjdG9yU3RhdGUuYWZ0ZXJSZW5kZXJDYWxsYmFja3Muc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gc2NoZWR1bGVSZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIHZhciBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMuc3luYykge1xyXG4gICAgICAgIHJlbmRlcihwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9qZWN0b3JTdGF0ZS5yZW5kZXJTY2hlZHVsZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHByb2plY3RvclN0YXRlLnJlbmRlclNjaGVkdWxlZCA9IGdsb2JhbF8xLmRlZmF1bHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmVuZGVyKHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiByZW5kZXIocHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgIHZhciBwcm9qZWN0b3JTdGF0ZSA9IHByb2plY3RvclN0YXRlTWFwLmdldChwcm9qZWN0aW9uT3B0aW9ucy5wcm9qZWN0b3JJbnN0YW5jZSk7XHJcbiAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJTY2hlZHVsZWQgPSB1bmRlZmluZWQ7XHJcbiAgICB2YXIgcmVuZGVyUXVldWUgPSBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZTtcclxuICAgIHZhciByZW5kZXJzID0gdHNsaWJfMS5fX3NwcmVhZChyZW5kZXJRdWV1ZSk7XHJcbiAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZSA9IFtdO1xyXG4gICAgcmVuZGVycy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmRlcHRoIC0gYi5kZXB0aDsgfSk7XHJcbiAgICB2YXIgcHJldmlvdXNseVJlbmRlcmVkID0gW107XHJcbiAgICB3aGlsZSAocmVuZGVycy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgaW5zdGFuY2UgPSByZW5kZXJzLnNoaWZ0KCkuaW5zdGFuY2U7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlTWFwLmhhcyhpbnN0YW5jZSkgJiYgcHJldmlvdXNseVJlbmRlcmVkLmluZGV4T2YoaW5zdGFuY2UpID09PSAtMSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c2x5UmVuZGVyZWQucHVzaChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIHZhciBfYSA9IGluc3RhbmNlTWFwLmdldChpbnN0YW5jZSksIHBhcmVudFZOb2RlID0gX2EucGFyZW50Vk5vZGUsIGRub2RlID0gX2EuZG5vZGU7XHJcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZURhdGEgPSBleHBvcnRzLndpZGdldEluc3RhbmNlTWFwLmdldChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgIHZhciBuZXh0U2libGluZ3MgPSBuZXh0U2libGluZ01hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB1cGRhdGVEb20oZG5vZGUsIHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKSwgcHJvamVjdGlvbk9wdGlvbnMsIHBhcmVudFZOb2RlLCBpbnN0YW5jZSwgbmV4dFNpYmxpbmdzLCBuZXh0U2libGluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKTtcclxuICAgIHJ1bkRlZmVycmVkUmVuZGVyQ2FsbGJhY2tzKHByb2plY3Rpb25PcHRpb25zKTtcclxufVxyXG5leHBvcnRzLmRvbSA9IHtcclxuICAgIGFwcGVuZDogZnVuY3Rpb24gKHBhcmVudE5vZGUsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIGlmIChwcm9qZWN0aW9uT3B0aW9ucyA9PT0gdm9pZCAwKSB7IHByb2plY3Rpb25PcHRpb25zID0ge307IH1cclxuICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gZXhwb3J0cy53aWRnZXRJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpO1xyXG4gICAgICAgIHZhciBmaW5hbFByb2plY3Rvck9wdGlvbnMgPSBnZXRQcm9qZWN0aW9uT3B0aW9ucyhwcm9qZWN0aW9uT3B0aW9ucywgaW5zdGFuY2UpO1xyXG4gICAgICAgIHZhciBwcm9qZWN0b3JTdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWZ0ZXJSZW5kZXJDYWxsYmFja3M6IFtdLFxyXG4gICAgICAgICAgICBkZWZlcnJlZFJlbmRlckNhbGxiYWNrczogW10sXHJcbiAgICAgICAgICAgIG5vZGVNYXA6IG5ldyBXZWFrTWFwXzEuZGVmYXVsdCgpLFxyXG4gICAgICAgICAgICByZW5kZXJTY2hlZHVsZWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgcmVuZGVyUXVldWU6IFtdLFxyXG4gICAgICAgICAgICBtZXJnZTogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgIG1lcmdlRWxlbWVudDogcHJvamVjdGlvbk9wdGlvbnMubWVyZ2VFbGVtZW50XHJcbiAgICAgICAgfTtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZU1hcC5zZXQoaW5zdGFuY2UsIHByb2plY3RvclN0YXRlKTtcclxuICAgICAgICBmaW5hbFByb2plY3Rvck9wdGlvbnMucm9vdE5vZGUgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgIHZhciBwYXJlbnRWTm9kZSA9IHRvUGFyZW50Vk5vZGUoZmluYWxQcm9qZWN0b3JPcHRpb25zLnJvb3ROb2RlKTtcclxuICAgICAgICB2YXIgbm9kZSA9IHRvSW50ZXJuYWxXTm9kZShpbnN0YW5jZSwgaW5zdGFuY2VEYXRhKTtcclxuICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2UsIHsgZG5vZGU6IG5vZGUsIHBhcmVudFZOb2RlOiBwYXJlbnRWTm9kZSB9KTtcclxuICAgICAgICBpbnN0YW5jZURhdGEuaW52YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlRGF0YS5yZW5kZXJpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9qZWN0b3JTdGF0ZS5yZW5kZXJRdWV1ZS5wdXNoKHsgaW5zdGFuY2U6IGluc3RhbmNlLCBkZXB0aDogZmluYWxQcm9qZWN0b3JPcHRpb25zLmRlcHRoIH0pO1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVSZW5kZXIoZmluYWxQcm9qZWN0b3JPcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdXBkYXRlRG9tKG5vZGUsIG5vZGUsIGZpbmFsUHJvamVjdG9yT3B0aW9ucywgcGFyZW50Vk5vZGUsIGluc3RhbmNlLCBbXSwgW10pO1xyXG4gICAgICAgIHByb2plY3RvclN0YXRlLmFmdGVyUmVuZGVyQ2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpbnN0YW5jZURhdGEub25BdHRhY2goKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBydW5EZWZlcnJlZFJlbmRlckNhbGxiYWNrcyhmaW5hbFByb2plY3Rvck9wdGlvbnMpO1xyXG4gICAgICAgIHJ1bkFmdGVyUmVuZGVyQ2FsbGJhY2tzKGZpbmFsUHJvamVjdG9yT3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZG9tTm9kZTogZmluYWxQcm9qZWN0b3JPcHRpb25zLnJvb3ROb2RlXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICB9LFxyXG4gICAgbWVyZ2U6IGZ1bmN0aW9uIChlbGVtZW50LCBpbnN0YW5jZSwgcHJvamVjdGlvbk9wdGlvbnMpIHtcclxuICAgICAgICBpZiAocHJvamVjdGlvbk9wdGlvbnMgPT09IHZvaWQgMCkgeyBwcm9qZWN0aW9uT3B0aW9ucyA9IHt9OyB9XHJcbiAgICAgICAgcHJvamVjdGlvbk9wdGlvbnMubWVyZ2UgPSB0cnVlO1xyXG4gICAgICAgIHByb2plY3Rpb25PcHRpb25zLm1lcmdlRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB0aGlzLmFwcGVuZChlbGVtZW50LnBhcmVudE5vZGUsIGluc3RhbmNlLCBwcm9qZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgdmFyIHByb2plY3RvclN0YXRlID0gcHJvamVjdG9yU3RhdGVNYXAuZ2V0KGluc3RhbmNlKTtcclxuICAgICAgICBwcm9qZWN0b3JTdGF0ZS5tZXJnZSA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBwcm9qZWN0aW9uO1xyXG4gICAgfVxyXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS92ZG9tLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9AZG9qby9mcmFtZXdvcmsvd2lkZ2V0LWNvcmUvdmRvbS5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKHRydWUpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLnNVbVVpNFNoIHtcXHJcXG5cXHRoZWlnaHQ6IDEwMCU7XFxyXFxuXFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xcclxcbn1cXHJcXG5cXHJcXG4uXzJNazZSZHFhIHtcXHJcXG5cXHRjb2xvcjogI2ZmZjtcXHJcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxyXFxuXFx0bWFyZ2luOiAwIDYuNHB4O1xcclxcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG5cXHRkaXNwbGF5OiAtd2Via2l0LWJveDtcXHJcXG5cXHRkaXNwbGF5OiAtbXMtZmxleGJveDtcXHJcXG5cXHRkaXNwbGF5OiBmbGV4O1xcclxcblxcdC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XFxyXFxuXFx0LXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XFxyXFxuXFx0ICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcblxcdCAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG5cXHQtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XFxyXFxuXFx0ICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXHJcXG5cXHQgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcclxcblxcdGhlaWdodDogNDhweDtcXHJcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5fMk1rNlJkcWE6OmFmdGVyIHtcXHJcXG5cXHRkaXNwbGF5OiBibG9jaztcXHJcXG5cXHRjb250ZW50OiBcXFwiXFxcIjtcXHJcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcclxcblxcdGhlaWdodDogMnB4O1xcclxcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG5cXHR3aWR0aDogMTAwJTtcXHJcXG5cXHRib3R0b206IDA7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxyXFxuXFx0dHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGVhc2Utb3V0O1xcclxcblxcdHRyYW5zaXRpb246IHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxyXFxuXFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcyBlYXNlLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGVhc2Utb3V0O1xcclxcblxcdC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7XFxyXFxuXFx0ICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTtcXHJcXG59XFxyXFxuXFxyXFxuLl8xLWYzSXRPaDo6YWZ0ZXIge1xcclxcblxcdC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcclxcblxcdCAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcclxcbn1cXHJcXG5cIiwgXCJcIiwge1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wiQzovVXNlcnMvSUVVc2VyL0Rlc2t0b3AvY2xpLWJ1aWxkLXdpZGdldC90ZXN0LWFwcC9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0NBQ0MsYUFBYTtDQUNiLHNCQUFzQjtDQUN0Qjs7QUFFRDtDQUNDLFlBQVk7Q0FDWixzQkFBc0I7Q0FDdEIsZ0JBQWdCO0NBQ2hCLG1CQUFtQjtDQUNuQixxQkFBcUI7Q0FDckIscUJBQXFCO0NBQ3JCLGNBQWM7Q0FDZCw2QkFBNkI7Q0FDN0IsOEJBQThCO0tBQzFCLDJCQUEyQjtTQUN2Qix1QkFBdUI7Q0FDL0IseUJBQXlCO0tBQ3JCLHNCQUFzQjtTQUNsQix3QkFBd0I7Q0FDaEMsYUFBYTtDQUNiLGdCQUFnQjtDQUNoQjs7QUFFRDtDQUNDLGVBQWU7Q0FDZixZQUFZO0NBQ1osaUJBQWlCO0NBQ2pCLFlBQVk7Q0FDWixtQkFBbUI7Q0FDbkIsWUFBWTtDQUNaLFVBQVU7Q0FDVixtREFBbUQ7Q0FDbkQsMkNBQTJDO0NBQzNDLG1DQUFtQztDQUNuQyxtRUFBbUU7Q0FDbkUsbUNBQW1DO1NBQzNCLDJCQUEyQjtDQUNuQzs7QUFFRDtDQUNDLGlDQUFpQztTQUN6Qix5QkFBeUI7Q0FDakNcIixcImZpbGVcIjpcIm1lbnVJdGVtLm0uY3NzXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5yb290IHtcXHJcXG5cXHRoZWlnaHQ6IDEwMCU7XFxyXFxuXFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xcclxcbn1cXHJcXG5cXHJcXG4uaXRlbSB7XFxyXFxuXFx0Y29sb3I6ICNmZmY7XFxyXFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcblxcdG1hcmdpbjogMCA2LjRweDtcXHJcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuXFx0ZGlzcGxheTogLXdlYmtpdC1ib3g7XFxyXFxuXFx0ZGlzcGxheTogLW1zLWZsZXhib3g7XFxyXFxuXFx0ZGlzcGxheTogZmxleDtcXHJcXG5cXHQtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xcclxcblxcdC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xcclxcblxcdCAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG5cXHQgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuXFx0LXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xcclxcblxcdCAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxyXFxuXFx0ICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXHJcXG5cXHRoZWlnaHQ6IDQ4cHg7XFxyXFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcclxcbn1cXHJcXG5cXHJcXG4uaXRlbTo6YWZ0ZXIge1xcclxcblxcdGRpc3BsYXk6IGJsb2NrO1xcclxcblxcdGNvbnRlbnQ6IFxcXCJcXFwiO1xcclxcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxyXFxuXFx0aGVpZ2h0OiAycHg7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHdpZHRoOiAxMDAlO1xcclxcblxcdGJvdHRvbTogMDtcXHJcXG5cXHQtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXHJcXG5cXHR0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxyXFxuXFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcyBlYXNlLW91dDtcXHJcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1vdXQ7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTtcXHJcXG5cXHQgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgzcHgpO1xcclxcbn1cXHJcXG5cXHJcXG4uc2VsZWN0ZWQ6OmFmdGVyIHtcXHJcXG5cXHQtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXHJcXG5cXHQgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXHJcXG59XFxyXFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG5cbi8vIGV4cG9ydHNcbmV4cG9ydHMubG9jYWxzID0ge1wiIF9rZXlcIjogXCJ0ZXN0LWFwcC9tZW51SXRlbVwiLFxuXHRcInJvb3RcIjogXCJzVW1VaTRTaFwiLFxuXHRcIml0ZW1cIjogXCJfMk1rNlJkcWFcIixcblx0XCJzZWxlY3RlZFwiOiBcIl8xLWYzSXRPaFwiXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlcj97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPWNzcyEuL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3Ncbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKSh0cnVlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5fM2JBNmpkU24ge1xcclxcblxcdHdpZHRoOiAxMDAlO1xcclxcblxcdHRvcDogMDtcXHJcXG5cXHRoZWlnaHQ6IDQ4cHg7XFxyXFxuXFx0ei1pbmRleDogMTAwO1xcclxcblxcdGJhY2tncm91bmQtY29sb3I6ICMxZDFmMjA7XFxyXFxufVxcclxcblxcclxcbi5fMWVvR2Zxa3Uge1xcclxcblxcdGhlaWdodDogMTAwJTtcXHJcXG5cXHRtYXJnaW46IDAgYXV0bztcXHJcXG59XFxyXFxuXCIsIFwiXCIsIHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIkM6L1VzZXJzL0lFVXNlci9EZXNrdG9wL2NsaS1idWlsZC13aWRnZXQvdGVzdC1hcHAvc3JjL21lbnUvbWVudS5tLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtDQUNDLFlBQVk7Q0FDWixPQUFPO0NBQ1AsYUFBYTtDQUNiLGFBQWE7Q0FDYiwwQkFBMEI7Q0FDMUI7O0FBRUQ7Q0FDQyxhQUFhO0NBQ2IsZUFBZTtDQUNmXCIsXCJmaWxlXCI6XCJtZW51Lm0uY3NzXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5yb290IHtcXHJcXG5cXHR3aWR0aDogMTAwJTtcXHJcXG5cXHR0b3A6IDA7XFxyXFxuXFx0aGVpZ2h0OiA0OHB4O1xcclxcblxcdHotaW5kZXg6IDEwMDtcXHJcXG5cXHRiYWNrZ3JvdW5kLWNvbG9yOiAjMWQxZjIwO1xcclxcbn1cXHJcXG5cXHJcXG4ubWVudUNvbnRhaW5lciB7XFxyXFxuXFx0aGVpZ2h0OiAxMDAlO1xcclxcblxcdG1hcmdpbjogMCBhdXRvO1xcclxcbn1cXHJcXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcblxuLy8gZXhwb3J0c1xuZXhwb3J0cy5sb2NhbHMgPSB7XCIgX2tleVwiOiBcInRlc3QtYXBwL21lbnVcIixcblx0XCJyb290XCI6IFwiXzNiQTZqZFNuXCIsXG5cdFwibWVudUNvbnRhaW5lclwiOiBcIl8xZW9HZnFrdVwiXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlcj97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlcj90eXBlPWNzcyEuL3NyYy9tZW51L21lbnUubS5jc3Ncbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz97XCJtb2R1bGVzXCI6dHJ1ZSxcInNvdXJjZU1hcFwiOnRydWUsXCJpbXBvcnRMb2FkZXJzXCI6MSxcImxvY2FsSWRlbnROYW1lXCI6XCJbaGFzaDpiYXNlNjQ6OF1cIn0hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzP3tcImlkZW50XCI6XCJwb3N0Y3NzXCIsXCJwbHVnaW5zXCI6W251bGwse1widmVyc2lvblwiOlwiNi4wLjIzXCIsXCJwbHVnaW5zXCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFwicG9zdGNzc1BsdWdpblwiOlwicG9zdGNzcy1jc3NuZXh0XCIsXCJwb3N0Y3NzVmVyc2lvblwiOlwiNi4wLjIzXCJ9XX0hLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL3NyYy9tZW51L21lbnUubS5jc3Ncbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblx0bGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0dmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCk7XG5cdFx0XHRpZihpdGVtWzJdKSB7XG5cdFx0XHRcdHJldHVybiBcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGNvbnRlbnQgKyBcIn1cIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdFx0fVxuXHRcdH0pLmpvaW4oXCJcIik7XG5cdH07XG5cblx0Ly8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3Rcblx0bGlzdC5pID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xuXHRcdGlmKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxuXHRcdFx0bW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpZCA9IHRoaXNbaV1bMF07XG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcblx0XHR9XG5cdFx0Zm9yKGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBtb2R1bGVzW2ldO1xuXHRcdFx0Ly8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxuXHRcdFx0Ly8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5hdGlvbnNcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG5cdFx0XHQvLyAgSSBob3BlIHRoaXMgd2lsbCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdlIGhhdmUgc21hbGxlciBidW5kbGVzKVxuXHRcdFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcblx0XHRcdFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFRdWVyeSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChcIiArIG1lZGlhUXVlcnkgKyBcIilcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0LnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG5cdHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcblx0dmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXHRpZiAoIWNzc01hcHBpbmcpIHtcblx0XHRyZXR1cm4gY29udGVudDtcblx0fVxuXG5cdGlmICh1c2VTb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgc291cmNlTWFwcGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcblx0XHR2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdFx0cmV0dXJuICcvKiMgc291cmNlVVJMPScgKyBjc3NNYXBwaW5nLnNvdXJjZVJvb3QgKyBzb3VyY2UgKyAnICovJ1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG5cdH1cblxuXHRyZXR1cm4gW2NvbnRlbnRdLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBBZGFwdGVkIGZyb20gY29udmVydC1zb3VyY2UtbWFwIChNSVQpXG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuXHR2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcblx0dmFyIGRhdGEgPSAnc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsJyArIGJhc2U2NDtcblxuXHRyZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImNzc1NlbGVjdFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJjc3NTZWxlY3RcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDI0KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzVmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRpZiAoIWlzVmFsdWUodmFsdWUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcblx0cmV0dXJuIHZhbHVlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcblx0aWYgKHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgXCIgaXMgbm90IGEgZnVuY3Rpb25cIik7XG5cdHJldHVybiBmbjtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NikoKSA/IFN5bWJvbCA6IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xuXG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgYXNzaWduICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTApXG4gICwgbm9ybWFsaXplT3B0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpXG4gICwgaXNDYWxsYWJsZSAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNjIpXG4gICwgY29udGFpbnMgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpXG5cbiAgLCBkO1xuXG5kID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZHNjciwgdmFsdWUvKiwgb3B0aW9ucyovKSB7XG5cdHZhciBjLCBlLCB3LCBvcHRpb25zLCBkZXNjO1xuXHRpZiAoKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB8fCAodHlwZW9mIGRzY3IgIT09ICdzdHJpbmcnKSkge1xuXHRcdG9wdGlvbnMgPSB2YWx1ZTtcblx0XHR2YWx1ZSA9IGRzY3I7XG5cdFx0ZHNjciA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0b3B0aW9ucyA9IGFyZ3VtZW50c1syXTtcblx0fVxuXHRpZiAoZHNjciA9PSBudWxsKSB7XG5cdFx0YyA9IHcgPSB0cnVlO1xuXHRcdGUgPSBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRjID0gY29udGFpbnMuY2FsbChkc2NyLCAnYycpO1xuXHRcdGUgPSBjb250YWlucy5jYWxsKGRzY3IsICdlJyk7XG5cdFx0dyA9IGNvbnRhaW5zLmNhbGwoZHNjciwgJ3cnKTtcblx0fVxuXG5cdGRlc2MgPSB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiBjLCBlbnVtZXJhYmxlOiBlLCB3cml0YWJsZTogdyB9O1xuXHRyZXR1cm4gIW9wdGlvbnMgPyBkZXNjIDogYXNzaWduKG5vcm1hbGl6ZU9wdHMob3B0aW9ucyksIGRlc2MpO1xufTtcblxuZC5ncyA9IGZ1bmN0aW9uIChkc2NyLCBnZXQsIHNldC8qLCBvcHRpb25zKi8pIHtcblx0dmFyIGMsIGUsIG9wdGlvbnMsIGRlc2M7XG5cdGlmICh0eXBlb2YgZHNjciAhPT0gJ3N0cmluZycpIHtcblx0XHRvcHRpb25zID0gc2V0O1xuXHRcdHNldCA9IGdldDtcblx0XHRnZXQgPSBkc2NyO1xuXHRcdGRzY3IgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbM107XG5cdH1cblx0aWYgKGdldCA9PSBudWxsKSB7XG5cdFx0Z2V0ID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKGdldCkpIHtcblx0XHRvcHRpb25zID0gZ2V0O1xuXHRcdGdldCA9IHNldCA9IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChzZXQgPT0gbnVsbCkge1xuXHRcdHNldCA9IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmICghaXNDYWxsYWJsZShzZXQpKSB7XG5cdFx0b3B0aW9ucyA9IHNldDtcblx0XHRzZXQgPSB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGRzY3IgPT0gbnVsbCkge1xuXHRcdGMgPSB0cnVlO1xuXHRcdGUgPSBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRjID0gY29udGFpbnMuY2FsbChkc2NyLCAnYycpO1xuXHRcdGUgPSBjb250YWlucy5jYWxsKGRzY3IsICdlJyk7XG5cdH1cblxuXHRkZXNjID0geyBnZXQ6IGdldCwgc2V0OiBzZXQsIGNvbmZpZ3VyYWJsZTogYywgZW51bWVyYWJsZTogZSB9O1xuXHRyZXR1cm4gIW9wdGlvbnMgPyBkZXNjIDogYXNzaWduKG5vcm1hbGl6ZU9wdHMob3B0aW9ucyksIGRlc2MpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF91bmRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KSgpOyAvLyBTdXBwb3J0IEVTMyBlbmdpbmVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbCkge1xuIHJldHVybiAodmFsICE9PSBfdW5kZWZpbmVkKSAmJiAodmFsICE9PSBudWxsKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHR0cnVlRnVuYzogZnVuY3Rpb24gdHJ1ZUZ1bmMoKXtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblx0ZmFsc2VGdW5jOiBmdW5jdGlvbiBmYWxzZUZ1bmMoKXtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpKClcblx0PyBPYmplY3Quc2V0UHJvdG90eXBlT2Zcblx0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcblxuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIG9ialRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuICAsIGlkID0gb2JqVG9TdHJpbmcuY2FsbChcblx0KGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gYXJndW1lbnRzO1xuXHR9KSgpXG4pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IGlkO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIG9ialRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywgaWQgPSBvYmpUb1N0cmluZy5jYWxsKFwiXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gKFxuXHRcdHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fFxuXHRcdCh2YWx1ZSAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHQodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IGlkKSkgfHxcblx0XHRmYWxzZVxuXHQpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy9UeXBlcyBvZiBlbGVtZW50cyBmb3VuZCBpbiB0aGUgRE9NXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0VGV4dDogXCJ0ZXh0XCIsIC8vVGV4dFxuXHREaXJlY3RpdmU6IFwiZGlyZWN0aXZlXCIsIC8vPD8gLi4uID8+XG5cdENvbW1lbnQ6IFwiY29tbWVudFwiLCAvLzwhLS0gLi4uIC0tPlxuXHRTY3JpcHQ6IFwic2NyaXB0XCIsIC8vPHNjcmlwdD4gdGFnc1xuXHRTdHlsZTogXCJzdHlsZVwiLCAvLzxzdHlsZT4gdGFnc1xuXHRUYWc6IFwidGFnXCIsIC8vQW55IHRhZ1xuXHRDREFUQTogXCJjZGF0YVwiLCAvLzwhW0NEQVRBWyAuLi4gXV0+XG5cdERvY3R5cGU6IFwiZG9jdHlwZVwiLFxuXG5cdGlzVGFnOiBmdW5jdGlvbihlbGVtKXtcblx0XHRyZXR1cm4gZWxlbS50eXBlID09PSBcInRhZ1wiIHx8IGVsZW0udHlwZSA9PT0gXCJzY3JpcHRcIiB8fCBlbGVtLnR5cGUgPT09IFwic3R5bGVcIjtcblx0fVxufTtcblxuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NykoKVxuXHQ/IE9iamVjdC5hc3NpZ25cblx0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcblxuXG4vKioqLyB9KSxcbi8qIDExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MykoKVxuXHQ/IFN0cmluZy5wcm90b3R5cGUuY29udGFpbnNcblx0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcblxuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBjbGVhciAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpXG4gICwgYXNzaWduICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuICAsIGNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuICAsIHZhbHVlICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKVxuICAsIGQgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuICAsIGF1dG9CaW5kID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NClcbiAgLCBTeW1ib2wgICA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgZGVmaW5lUHJvcGVydGllcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLCBJdGVyYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBJdGVyYXRvciA9IGZ1bmN0aW9uIChsaXN0LCBjb250ZXh0KSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBJdGVyYXRvcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3J1wiKTtcblx0ZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG5cdFx0X19saXN0X186IGQoXCJ3XCIsIHZhbHVlKGxpc3QpKSxcblx0XHRfX2NvbnRleHRfXzogZChcIndcIiwgY29udGV4dCksXG5cdFx0X19uZXh0SW5kZXhfXzogZChcIndcIiwgMClcblx0fSk7XG5cdGlmICghY29udGV4dCkgcmV0dXJuO1xuXHRjYWxsYWJsZShjb250ZXh0Lm9uKTtcblx0Y29udGV4dC5vbihcIl9hZGRcIiwgdGhpcy5fb25BZGQpO1xuXHRjb250ZXh0Lm9uKFwiX2RlbGV0ZVwiLCB0aGlzLl9vbkRlbGV0ZSk7XG5cdGNvbnRleHQub24oXCJfY2xlYXJcIiwgdGhpcy5fb25DbGVhcik7XG59O1xuXG4vLyBJbnRlcm5hbCAlSXRlcmF0b3JQcm90b3R5cGUlIGRvZXNuJ3QgZXhwb3NlIGl0cyBjb25zdHJ1Y3RvclxuZGVsZXRlIEl0ZXJhdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcblxuZGVmaW5lUHJvcGVydGllcyhcblx0SXRlcmF0b3IucHJvdG90eXBlLFxuXHRhc3NpZ24oXG5cdFx0e1xuXHRcdFx0X25leHQ6IGQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR2YXIgaTtcblx0XHRcdFx0aWYgKCF0aGlzLl9fbGlzdF9fKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAodGhpcy5fX3JlZG9fXykge1xuXHRcdFx0XHRcdGkgPSB0aGlzLl9fcmVkb19fLnNoaWZ0KCk7XG5cdFx0XHRcdFx0aWYgKGkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX19uZXh0SW5kZXhfXyA8IHRoaXMuX19saXN0X18ubGVuZ3RoKSByZXR1cm4gdGhpcy5fX25leHRJbmRleF9fKys7XG5cdFx0XHRcdHRoaXMuX3VuQmluZCgpO1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSksXG5cdFx0XHRuZXh0OiBkKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2NyZWF0ZVJlc3VsdCh0aGlzLl9uZXh0KCkpO1xuXHRcdFx0fSksXG5cdFx0XHRfY3JlYXRlUmVzdWx0OiBkKGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRcdGlmIChpID09PSB1bmRlZmluZWQpIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcblx0XHRcdFx0cmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiB0aGlzLl9yZXNvbHZlKGkpIH07XG5cdFx0XHR9KSxcblx0XHRcdF9yZXNvbHZlOiBkKGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9fbGlzdF9fW2ldO1xuXHRcdFx0fSksXG5cdFx0XHRfdW5CaW5kOiBkKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhpcy5fX2xpc3RfXyA9IG51bGw7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl9fcmVkb19fO1xuXHRcdFx0XHRpZiAoIXRoaXMuX19jb250ZXh0X18pIHJldHVybjtcblx0XHRcdFx0dGhpcy5fX2NvbnRleHRfXy5vZmYoXCJfYWRkXCIsIHRoaXMuX29uQWRkKTtcblx0XHRcdFx0dGhpcy5fX2NvbnRleHRfXy5vZmYoXCJfZGVsZXRlXCIsIHRoaXMuX29uRGVsZXRlKTtcblx0XHRcdFx0dGhpcy5fX2NvbnRleHRfXy5vZmYoXCJfY2xlYXJcIiwgdGhpcy5fb25DbGVhcik7XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18gPSBudWxsO1xuXHRcdFx0fSksXG5cdFx0XHR0b1N0cmluZzogZChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBcIltvYmplY3QgXCIgKyAodGhpc1tTeW1ib2wudG9TdHJpbmdUYWddIHx8IFwiT2JqZWN0XCIpICsgXCJdXCI7XG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0YXV0b0JpbmQoe1xuXHRcdFx0X29uQWRkOiBkKGZ1bmN0aW9uIChpbmRleCkge1xuXHRcdFx0XHRpZiAoaW5kZXggPj0gdGhpcy5fX25leHRJbmRleF9fKSByZXR1cm47XG5cdFx0XHRcdCsrdGhpcy5fX25leHRJbmRleF9fO1xuXHRcdFx0XHRpZiAoIXRoaXMuX19yZWRvX18pIHtcblx0XHRcdFx0XHRkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9fcmVkb19fXCIsIGQoXCJjXCIsIFtpbmRleF0pKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fX3JlZG9fXy5mb3JFYWNoKGZ1bmN0aW9uIChyZWRvLCBpKSB7XG5cdFx0XHRcdFx0aWYgKHJlZG8gPj0gaW5kZXgpIHRoaXMuX19yZWRvX19baV0gPSArK3JlZG87XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0XHR0aGlzLl9fcmVkb19fLnB1c2goaW5kZXgpO1xuXHRcdFx0fSksXG5cdFx0XHRfb25EZWxldGU6IGQoZnVuY3Rpb24gKGluZGV4KSB7XG5cdFx0XHRcdHZhciBpO1xuXHRcdFx0XHRpZiAoaW5kZXggPj0gdGhpcy5fX25leHRJbmRleF9fKSByZXR1cm47XG5cdFx0XHRcdC0tdGhpcy5fX25leHRJbmRleF9fO1xuXHRcdFx0XHRpZiAoIXRoaXMuX19yZWRvX18pIHJldHVybjtcblx0XHRcdFx0aSA9IHRoaXMuX19yZWRvX18uaW5kZXhPZihpbmRleCk7XG5cdFx0XHRcdGlmIChpICE9PSAtMSkgdGhpcy5fX3JlZG9fXy5zcGxpY2UoaSwgMSk7XG5cdFx0XHRcdHRoaXMuX19yZWRvX18uZm9yRWFjaChmdW5jdGlvbiAocmVkbywgaikge1xuXHRcdFx0XHRcdGlmIChyZWRvID4gaW5kZXgpIHRoaXMuX19yZWRvX19bal0gPSAtLXJlZG87XG5cdFx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0fSksXG5cdFx0XHRfb25DbGVhcjogZChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9fcmVkb19fKSBjbGVhci5jYWxsKHRoaXMuX19yZWRvX18pO1xuXHRcdFx0XHR0aGlzLl9fbmV4dEluZGV4X18gPSAwO1xuXHRcdFx0fSlcblx0XHR9KVxuXHQpXG4pO1xuXG5kZWZpbmVQcm9wZXJ0eShcblx0SXRlcmF0b3IucHJvdG90eXBlLFxuXHRTeW1ib2wuaXRlcmF0b3IsXG5cdGQoZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9KVxuKTtcblxuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0ge1wiYW1wXCI6XCImXCIsXCJhcG9zXCI6XCInXCIsXCJndFwiOlwiPlwiLFwibHRcIjpcIjxcIixcInF1b3RcIjpcIlxcXCJcIn1cblxuLyoqKi8gfSksXG4vKiAxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcIkFhY3V0ZVwiOlwiw4FcIixcImFhY3V0ZVwiOlwiw6FcIixcIkFicmV2ZVwiOlwixIJcIixcImFicmV2ZVwiOlwixINcIixcImFjXCI6XCLiiL5cIixcImFjZFwiOlwi4oi/XCIsXCJhY0VcIjpcIuKIvsyzXCIsXCJBY2lyY1wiOlwiw4JcIixcImFjaXJjXCI6XCLDolwiLFwiYWN1dGVcIjpcIsK0XCIsXCJBY3lcIjpcItCQXCIsXCJhY3lcIjpcItCwXCIsXCJBRWxpZ1wiOlwiw4ZcIixcImFlbGlnXCI6XCLDplwiLFwiYWZcIjpcIuKBoVwiLFwiQWZyXCI6XCLwnZSEXCIsXCJhZnJcIjpcIvCdlJ5cIixcIkFncmF2ZVwiOlwiw4BcIixcImFncmF2ZVwiOlwiw6BcIixcImFsZWZzeW1cIjpcIuKEtVwiLFwiYWxlcGhcIjpcIuKEtVwiLFwiQWxwaGFcIjpcIs6RXCIsXCJhbHBoYVwiOlwizrFcIixcIkFtYWNyXCI6XCLEgFwiLFwiYW1hY3JcIjpcIsSBXCIsXCJhbWFsZ1wiOlwi4qi/XCIsXCJhbXBcIjpcIiZcIixcIkFNUFwiOlwiJlwiLFwiYW5kYW5kXCI6XCLiqZVcIixcIkFuZFwiOlwi4qmTXCIsXCJhbmRcIjpcIuKIp1wiLFwiYW5kZFwiOlwi4qmcXCIsXCJhbmRzbG9wZVwiOlwi4qmYXCIsXCJhbmR2XCI6XCLiqZpcIixcImFuZ1wiOlwi4oigXCIsXCJhbmdlXCI6XCLipqRcIixcImFuZ2xlXCI6XCLiiKBcIixcImFuZ21zZGFhXCI6XCLipqhcIixcImFuZ21zZGFiXCI6XCLipqlcIixcImFuZ21zZGFjXCI6XCLipqpcIixcImFuZ21zZGFkXCI6XCLipqtcIixcImFuZ21zZGFlXCI6XCLipqxcIixcImFuZ21zZGFmXCI6XCLipq1cIixcImFuZ21zZGFnXCI6XCLipq5cIixcImFuZ21zZGFoXCI6XCLipq9cIixcImFuZ21zZFwiOlwi4oihXCIsXCJhbmdydFwiOlwi4oifXCIsXCJhbmdydHZiXCI6XCLiir5cIixcImFuZ3J0dmJkXCI6XCLipp1cIixcImFuZ3NwaFwiOlwi4oiiXCIsXCJhbmdzdFwiOlwiw4VcIixcImFuZ3phcnJcIjpcIuKNvFwiLFwiQW9nb25cIjpcIsSEXCIsXCJhb2dvblwiOlwixIVcIixcIkFvcGZcIjpcIvCdlLhcIixcImFvcGZcIjpcIvCdlZJcIixcImFwYWNpclwiOlwi4qmvXCIsXCJhcFwiOlwi4omIXCIsXCJhcEVcIjpcIuKpsFwiLFwiYXBlXCI6XCLiiYpcIixcImFwaWRcIjpcIuKJi1wiLFwiYXBvc1wiOlwiJ1wiLFwiQXBwbHlGdW5jdGlvblwiOlwi4oGhXCIsXCJhcHByb3hcIjpcIuKJiFwiLFwiYXBwcm94ZXFcIjpcIuKJilwiLFwiQXJpbmdcIjpcIsOFXCIsXCJhcmluZ1wiOlwiw6VcIixcIkFzY3JcIjpcIvCdkpxcIixcImFzY3JcIjpcIvCdkrZcIixcIkFzc2lnblwiOlwi4omUXCIsXCJhc3RcIjpcIipcIixcImFzeW1wXCI6XCLiiYhcIixcImFzeW1wZXFcIjpcIuKJjVwiLFwiQXRpbGRlXCI6XCLDg1wiLFwiYXRpbGRlXCI6XCLDo1wiLFwiQXVtbFwiOlwiw4RcIixcImF1bWxcIjpcIsOkXCIsXCJhd2NvbmludFwiOlwi4oizXCIsXCJhd2ludFwiOlwi4qiRXCIsXCJiYWNrY29uZ1wiOlwi4omMXCIsXCJiYWNrZXBzaWxvblwiOlwiz7ZcIixcImJhY2twcmltZVwiOlwi4oC1XCIsXCJiYWNrc2ltXCI6XCLiiL1cIixcImJhY2tzaW1lcVwiOlwi4ouNXCIsXCJCYWNrc2xhc2hcIjpcIuKIllwiLFwiQmFydlwiOlwi4qunXCIsXCJiYXJ2ZWVcIjpcIuKKvVwiLFwiYmFyd2VkXCI6XCLijIVcIixcIkJhcndlZFwiOlwi4oyGXCIsXCJiYXJ3ZWRnZVwiOlwi4oyFXCIsXCJiYnJrXCI6XCLijrVcIixcImJicmt0YnJrXCI6XCLijrZcIixcImJjb25nXCI6XCLiiYxcIixcIkJjeVwiOlwi0JFcIixcImJjeVwiOlwi0LFcIixcImJkcXVvXCI6XCLigJ5cIixcImJlY2F1c1wiOlwi4oi1XCIsXCJiZWNhdXNlXCI6XCLiiLVcIixcIkJlY2F1c2VcIjpcIuKItVwiLFwiYmVtcHR5dlwiOlwi4qawXCIsXCJiZXBzaVwiOlwiz7ZcIixcImJlcm5vdVwiOlwi4oSsXCIsXCJCZXJub3VsbGlzXCI6XCLihKxcIixcIkJldGFcIjpcIs6SXCIsXCJiZXRhXCI6XCLOslwiLFwiYmV0aFwiOlwi4oS2XCIsXCJiZXR3ZWVuXCI6XCLiiaxcIixcIkJmclwiOlwi8J2UhVwiLFwiYmZyXCI6XCLwnZSfXCIsXCJiaWdjYXBcIjpcIuKLglwiLFwiYmlnY2lyY1wiOlwi4pevXCIsXCJiaWdjdXBcIjpcIuKLg1wiLFwiYmlnb2RvdFwiOlwi4qiAXCIsXCJiaWdvcGx1c1wiOlwi4qiBXCIsXCJiaWdvdGltZXNcIjpcIuKoglwiLFwiYmlnc3FjdXBcIjpcIuKohlwiLFwiYmlnc3RhclwiOlwi4piFXCIsXCJiaWd0cmlhbmdsZWRvd25cIjpcIuKWvVwiLFwiYmlndHJpYW5nbGV1cFwiOlwi4pazXCIsXCJiaWd1cGx1c1wiOlwi4qiEXCIsXCJiaWd2ZWVcIjpcIuKLgVwiLFwiYmlnd2VkZ2VcIjpcIuKLgFwiLFwiYmthcm93XCI6XCLipI1cIixcImJsYWNrbG96ZW5nZVwiOlwi4qerXCIsXCJibGFja3NxdWFyZVwiOlwi4paqXCIsXCJibGFja3RyaWFuZ2xlXCI6XCLilrRcIixcImJsYWNrdHJpYW5nbGVkb3duXCI6XCLilr5cIixcImJsYWNrdHJpYW5nbGVsZWZ0XCI6XCLil4JcIixcImJsYWNrdHJpYW5nbGVyaWdodFwiOlwi4pa4XCIsXCJibGFua1wiOlwi4pCjXCIsXCJibGsxMlwiOlwi4paSXCIsXCJibGsxNFwiOlwi4paRXCIsXCJibGszNFwiOlwi4paTXCIsXCJibG9ja1wiOlwi4paIXCIsXCJibmVcIjpcIj3ig6VcIixcImJuZXF1aXZcIjpcIuKJoeKDpVwiLFwiYk5vdFwiOlwi4qutXCIsXCJibm90XCI6XCLijJBcIixcIkJvcGZcIjpcIvCdlLlcIixcImJvcGZcIjpcIvCdlZNcIixcImJvdFwiOlwi4oqlXCIsXCJib3R0b21cIjpcIuKKpVwiLFwiYm93dGllXCI6XCLii4hcIixcImJveGJveFwiOlwi4qeJXCIsXCJib3hkbFwiOlwi4pSQXCIsXCJib3hkTFwiOlwi4pWVXCIsXCJib3hEbFwiOlwi4pWWXCIsXCJib3hETFwiOlwi4pWXXCIsXCJib3hkclwiOlwi4pSMXCIsXCJib3hkUlwiOlwi4pWSXCIsXCJib3hEclwiOlwi4pWTXCIsXCJib3hEUlwiOlwi4pWUXCIsXCJib3hoXCI6XCLilIBcIixcImJveEhcIjpcIuKVkFwiLFwiYm94aGRcIjpcIuKUrFwiLFwiYm94SGRcIjpcIuKVpFwiLFwiYm94aERcIjpcIuKVpVwiLFwiYm94SERcIjpcIuKVplwiLFwiYm94aHVcIjpcIuKUtFwiLFwiYm94SHVcIjpcIuKVp1wiLFwiYm94aFVcIjpcIuKVqFwiLFwiYm94SFVcIjpcIuKVqVwiLFwiYm94bWludXNcIjpcIuKKn1wiLFwiYm94cGx1c1wiOlwi4oqeXCIsXCJib3h0aW1lc1wiOlwi4oqgXCIsXCJib3h1bFwiOlwi4pSYXCIsXCJib3h1TFwiOlwi4pWbXCIsXCJib3hVbFwiOlwi4pWcXCIsXCJib3hVTFwiOlwi4pWdXCIsXCJib3h1clwiOlwi4pSUXCIsXCJib3h1UlwiOlwi4pWYXCIsXCJib3hVclwiOlwi4pWZXCIsXCJib3hVUlwiOlwi4pWaXCIsXCJib3h2XCI6XCLilIJcIixcImJveFZcIjpcIuKVkVwiLFwiYm94dmhcIjpcIuKUvFwiLFwiYm94dkhcIjpcIuKVqlwiLFwiYm94VmhcIjpcIuKVq1wiLFwiYm94VkhcIjpcIuKVrFwiLFwiYm94dmxcIjpcIuKUpFwiLFwiYm94dkxcIjpcIuKVoVwiLFwiYm94VmxcIjpcIuKVolwiLFwiYm94VkxcIjpcIuKVo1wiLFwiYm94dnJcIjpcIuKUnFwiLFwiYm94dlJcIjpcIuKVnlwiLFwiYm94VnJcIjpcIuKVn1wiLFwiYm94VlJcIjpcIuKVoFwiLFwiYnByaW1lXCI6XCLigLVcIixcImJyZXZlXCI6XCLLmFwiLFwiQnJldmVcIjpcIsuYXCIsXCJicnZiYXJcIjpcIsKmXCIsXCJic2NyXCI6XCLwnZK3XCIsXCJCc2NyXCI6XCLihKxcIixcImJzZW1pXCI6XCLigY9cIixcImJzaW1cIjpcIuKIvVwiLFwiYnNpbWVcIjpcIuKLjVwiLFwiYnNvbGJcIjpcIuKnhVwiLFwiYnNvbFwiOlwiXFxcXFwiLFwiYnNvbGhzdWJcIjpcIuKfiFwiLFwiYnVsbFwiOlwi4oCiXCIsXCJidWxsZXRcIjpcIuKAolwiLFwiYnVtcFwiOlwi4omOXCIsXCJidW1wRVwiOlwi4qquXCIsXCJidW1wZVwiOlwi4omPXCIsXCJCdW1wZXFcIjpcIuKJjlwiLFwiYnVtcGVxXCI6XCLiiY9cIixcIkNhY3V0ZVwiOlwixIZcIixcImNhY3V0ZVwiOlwixIdcIixcImNhcGFuZFwiOlwi4qmEXCIsXCJjYXBicmN1cFwiOlwi4qmJXCIsXCJjYXBjYXBcIjpcIuKpi1wiLFwiY2FwXCI6XCLiiKlcIixcIkNhcFwiOlwi4ouSXCIsXCJjYXBjdXBcIjpcIuKph1wiLFwiY2FwZG90XCI6XCLiqYBcIixcIkNhcGl0YWxEaWZmZXJlbnRpYWxEXCI6XCLihYVcIixcImNhcHNcIjpcIuKIqe+4gFwiLFwiY2FyZXRcIjpcIuKBgVwiLFwiY2Fyb25cIjpcIsuHXCIsXCJDYXlsZXlzXCI6XCLihK1cIixcImNjYXBzXCI6XCLiqY1cIixcIkNjYXJvblwiOlwixIxcIixcImNjYXJvblwiOlwixI1cIixcIkNjZWRpbFwiOlwiw4dcIixcImNjZWRpbFwiOlwiw6dcIixcIkNjaXJjXCI6XCLEiFwiLFwiY2NpcmNcIjpcIsSJXCIsXCJDY29uaW50XCI6XCLiiLBcIixcImNjdXBzXCI6XCLiqYxcIixcImNjdXBzc21cIjpcIuKpkFwiLFwiQ2RvdFwiOlwixIpcIixcImNkb3RcIjpcIsSLXCIsXCJjZWRpbFwiOlwiwrhcIixcIkNlZGlsbGFcIjpcIsK4XCIsXCJjZW1wdHl2XCI6XCLiprJcIixcImNlbnRcIjpcIsKiXCIsXCJjZW50ZXJkb3RcIjpcIsK3XCIsXCJDZW50ZXJEb3RcIjpcIsK3XCIsXCJjZnJcIjpcIvCdlKBcIixcIkNmclwiOlwi4oStXCIsXCJDSGN5XCI6XCLQp1wiLFwiY2hjeVwiOlwi0YdcIixcImNoZWNrXCI6XCLinJNcIixcImNoZWNrbWFya1wiOlwi4pyTXCIsXCJDaGlcIjpcIs6nXCIsXCJjaGlcIjpcIs+HXCIsXCJjaXJjXCI6XCLLhlwiLFwiY2lyY2VxXCI6XCLiiZdcIixcImNpcmNsZWFycm93bGVmdFwiOlwi4oa6XCIsXCJjaXJjbGVhcnJvd3JpZ2h0XCI6XCLihrtcIixcImNpcmNsZWRhc3RcIjpcIuKKm1wiLFwiY2lyY2xlZGNpcmNcIjpcIuKKmlwiLFwiY2lyY2xlZGRhc2hcIjpcIuKKnVwiLFwiQ2lyY2xlRG90XCI6XCLiiplcIixcImNpcmNsZWRSXCI6XCLCrlwiLFwiY2lyY2xlZFNcIjpcIuKTiFwiLFwiQ2lyY2xlTWludXNcIjpcIuKKllwiLFwiQ2lyY2xlUGx1c1wiOlwi4oqVXCIsXCJDaXJjbGVUaW1lc1wiOlwi4oqXXCIsXCJjaXJcIjpcIuKXi1wiLFwiY2lyRVwiOlwi4qeDXCIsXCJjaXJlXCI6XCLiiZdcIixcImNpcmZuaW50XCI6XCLiqJBcIixcImNpcm1pZFwiOlwi4quvXCIsXCJjaXJzY2lyXCI6XCLip4JcIixcIkNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbFwiOlwi4oiyXCIsXCJDbG9zZUN1cmx5RG91YmxlUXVvdGVcIjpcIuKAnVwiLFwiQ2xvc2VDdXJseVF1b3RlXCI6XCLigJlcIixcImNsdWJzXCI6XCLimaNcIixcImNsdWJzdWl0XCI6XCLimaNcIixcImNvbG9uXCI6XCI6XCIsXCJDb2xvblwiOlwi4oi3XCIsXCJDb2xvbmVcIjpcIuKptFwiLFwiY29sb25lXCI6XCLiiZRcIixcImNvbG9uZXFcIjpcIuKJlFwiLFwiY29tbWFcIjpcIixcIixcImNvbW1hdFwiOlwiQFwiLFwiY29tcFwiOlwi4oiBXCIsXCJjb21wZm5cIjpcIuKImFwiLFwiY29tcGxlbWVudFwiOlwi4oiBXCIsXCJjb21wbGV4ZXNcIjpcIuKEglwiLFwiY29uZ1wiOlwi4omFXCIsXCJjb25nZG90XCI6XCLiqa1cIixcIkNvbmdydWVudFwiOlwi4omhXCIsXCJjb25pbnRcIjpcIuKIrlwiLFwiQ29uaW50XCI6XCLiiK9cIixcIkNvbnRvdXJJbnRlZ3JhbFwiOlwi4oiuXCIsXCJjb3BmXCI6XCLwnZWUXCIsXCJDb3BmXCI6XCLihIJcIixcImNvcHJvZFwiOlwi4oiQXCIsXCJDb3Byb2R1Y3RcIjpcIuKIkFwiLFwiY29weVwiOlwiwqlcIixcIkNPUFlcIjpcIsKpXCIsXCJjb3B5c3JcIjpcIuKEl1wiLFwiQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbFwiOlwi4oizXCIsXCJjcmFyclwiOlwi4oa1XCIsXCJjcm9zc1wiOlwi4pyXXCIsXCJDcm9zc1wiOlwi4qivXCIsXCJDc2NyXCI6XCLwnZKeXCIsXCJjc2NyXCI6XCLwnZK4XCIsXCJjc3ViXCI6XCLiq49cIixcImNzdWJlXCI6XCLiq5FcIixcImNzdXBcIjpcIuKrkFwiLFwiY3N1cGVcIjpcIuKrklwiLFwiY3Rkb3RcIjpcIuKLr1wiLFwiY3VkYXJybFwiOlwi4qS4XCIsXCJjdWRhcnJyXCI6XCLipLVcIixcImN1ZXByXCI6XCLii55cIixcImN1ZXNjXCI6XCLii59cIixcImN1bGFyclwiOlwi4oa2XCIsXCJjdWxhcnJwXCI6XCLipL1cIixcImN1cGJyY2FwXCI6XCLiqYhcIixcImN1cGNhcFwiOlwi4qmGXCIsXCJDdXBDYXBcIjpcIuKJjVwiLFwiY3VwXCI6XCLiiKpcIixcIkN1cFwiOlwi4ouTXCIsXCJjdXBjdXBcIjpcIuKpilwiLFwiY3VwZG90XCI6XCLiio1cIixcImN1cG9yXCI6XCLiqYVcIixcImN1cHNcIjpcIuKIqu+4gFwiLFwiY3VyYXJyXCI6XCLihrdcIixcImN1cmFycm1cIjpcIuKkvFwiLFwiY3VybHllcXByZWNcIjpcIuKLnlwiLFwiY3VybHllcXN1Y2NcIjpcIuKLn1wiLFwiY3VybHl2ZWVcIjpcIuKLjlwiLFwiY3VybHl3ZWRnZVwiOlwi4ouPXCIsXCJjdXJyZW5cIjpcIsKkXCIsXCJjdXJ2ZWFycm93bGVmdFwiOlwi4oa2XCIsXCJjdXJ2ZWFycm93cmlnaHRcIjpcIuKGt1wiLFwiY3V2ZWVcIjpcIuKLjlwiLFwiY3V3ZWRcIjpcIuKLj1wiLFwiY3djb25pbnRcIjpcIuKIslwiLFwiY3dpbnRcIjpcIuKIsVwiLFwiY3lsY3R5XCI6XCLijK1cIixcImRhZ2dlclwiOlwi4oCgXCIsXCJEYWdnZXJcIjpcIuKAoVwiLFwiZGFsZXRoXCI6XCLihLhcIixcImRhcnJcIjpcIuKGk1wiLFwiRGFyclwiOlwi4oahXCIsXCJkQXJyXCI6XCLih5NcIixcImRhc2hcIjpcIuKAkFwiLFwiRGFzaHZcIjpcIuKrpFwiLFwiZGFzaHZcIjpcIuKKo1wiLFwiZGJrYXJvd1wiOlwi4qSPXCIsXCJkYmxhY1wiOlwiy51cIixcIkRjYXJvblwiOlwixI5cIixcImRjYXJvblwiOlwixI9cIixcIkRjeVwiOlwi0JRcIixcImRjeVwiOlwi0LRcIixcImRkYWdnZXJcIjpcIuKAoVwiLFwiZGRhcnJcIjpcIuKHilwiLFwiRERcIjpcIuKFhVwiLFwiZGRcIjpcIuKFhlwiLFwiRERvdHJhaGRcIjpcIuKkkVwiLFwiZGRvdHNlcVwiOlwi4qm3XCIsXCJkZWdcIjpcIsKwXCIsXCJEZWxcIjpcIuKIh1wiLFwiRGVsdGFcIjpcIs6UXCIsXCJkZWx0YVwiOlwizrRcIixcImRlbXB0eXZcIjpcIuKmsVwiLFwiZGZpc2h0XCI6XCLipb9cIixcIkRmclwiOlwi8J2Uh1wiLFwiZGZyXCI6XCLwnZShXCIsXCJkSGFyXCI6XCLipaVcIixcImRoYXJsXCI6XCLih4NcIixcImRoYXJyXCI6XCLih4JcIixcIkRpYWNyaXRpY2FsQWN1dGVcIjpcIsK0XCIsXCJEaWFjcml0aWNhbERvdFwiOlwiy5lcIixcIkRpYWNyaXRpY2FsRG91YmxlQWN1dGVcIjpcIsudXCIsXCJEaWFjcml0aWNhbEdyYXZlXCI6XCJgXCIsXCJEaWFjcml0aWNhbFRpbGRlXCI6XCLLnFwiLFwiZGlhbVwiOlwi4ouEXCIsXCJkaWFtb25kXCI6XCLii4RcIixcIkRpYW1vbmRcIjpcIuKLhFwiLFwiZGlhbW9uZHN1aXRcIjpcIuKZplwiLFwiZGlhbXNcIjpcIuKZplwiLFwiZGllXCI6XCLCqFwiLFwiRGlmZmVyZW50aWFsRFwiOlwi4oWGXCIsXCJkaWdhbW1hXCI6XCLPnVwiLFwiZGlzaW5cIjpcIuKLslwiLFwiZGl2XCI6XCLDt1wiLFwiZGl2aWRlXCI6XCLDt1wiLFwiZGl2aWRlb250aW1lc1wiOlwi4ouHXCIsXCJkaXZvbnhcIjpcIuKLh1wiLFwiREpjeVwiOlwi0IJcIixcImRqY3lcIjpcItGSXCIsXCJkbGNvcm5cIjpcIuKMnlwiLFwiZGxjcm9wXCI6XCLijI1cIixcImRvbGxhclwiOlwiJFwiLFwiRG9wZlwiOlwi8J2Uu1wiLFwiZG9wZlwiOlwi8J2VlVwiLFwiRG90XCI6XCLCqFwiLFwiZG90XCI6XCLLmVwiLFwiRG90RG90XCI6XCLig5xcIixcImRvdGVxXCI6XCLiiZBcIixcImRvdGVxZG90XCI6XCLiiZFcIixcIkRvdEVxdWFsXCI6XCLiiZBcIixcImRvdG1pbnVzXCI6XCLiiLhcIixcImRvdHBsdXNcIjpcIuKIlFwiLFwiZG90c3F1YXJlXCI6XCLiiqFcIixcImRvdWJsZWJhcndlZGdlXCI6XCLijIZcIixcIkRvdWJsZUNvbnRvdXJJbnRlZ3JhbFwiOlwi4oivXCIsXCJEb3VibGVEb3RcIjpcIsKoXCIsXCJEb3VibGVEb3duQXJyb3dcIjpcIuKHk1wiLFwiRG91YmxlTGVmdEFycm93XCI6XCLih5BcIixcIkRvdWJsZUxlZnRSaWdodEFycm93XCI6XCLih5RcIixcIkRvdWJsZUxlZnRUZWVcIjpcIuKrpFwiLFwiRG91YmxlTG9uZ0xlZnRBcnJvd1wiOlwi4p+4XCIsXCJEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3dcIjpcIuKfulwiLFwiRG91YmxlTG9uZ1JpZ2h0QXJyb3dcIjpcIuKfuVwiLFwiRG91YmxlUmlnaHRBcnJvd1wiOlwi4oeSXCIsXCJEb3VibGVSaWdodFRlZVwiOlwi4oqoXCIsXCJEb3VibGVVcEFycm93XCI6XCLih5FcIixcIkRvdWJsZVVwRG93bkFycm93XCI6XCLih5VcIixcIkRvdWJsZVZlcnRpY2FsQmFyXCI6XCLiiKVcIixcIkRvd25BcnJvd0JhclwiOlwi4qSTXCIsXCJkb3duYXJyb3dcIjpcIuKGk1wiLFwiRG93bkFycm93XCI6XCLihpNcIixcIkRvd25hcnJvd1wiOlwi4oeTXCIsXCJEb3duQXJyb3dVcEFycm93XCI6XCLih7VcIixcIkRvd25CcmV2ZVwiOlwizJFcIixcImRvd25kb3duYXJyb3dzXCI6XCLih4pcIixcImRvd25oYXJwb29ubGVmdFwiOlwi4oeDXCIsXCJkb3duaGFycG9vbnJpZ2h0XCI6XCLih4JcIixcIkRvd25MZWZ0UmlnaHRWZWN0b3JcIjpcIuKlkFwiLFwiRG93bkxlZnRUZWVWZWN0b3JcIjpcIuKlnlwiLFwiRG93bkxlZnRWZWN0b3JCYXJcIjpcIuKlllwiLFwiRG93bkxlZnRWZWN0b3JcIjpcIuKGvVwiLFwiRG93blJpZ2h0VGVlVmVjdG9yXCI6XCLipZ9cIixcIkRvd25SaWdodFZlY3RvckJhclwiOlwi4qWXXCIsXCJEb3duUmlnaHRWZWN0b3JcIjpcIuKHgVwiLFwiRG93blRlZUFycm93XCI6XCLihqdcIixcIkRvd25UZWVcIjpcIuKKpFwiLFwiZHJia2Fyb3dcIjpcIuKkkFwiLFwiZHJjb3JuXCI6XCLijJ9cIixcImRyY3JvcFwiOlwi4oyMXCIsXCJEc2NyXCI6XCLwnZKfXCIsXCJkc2NyXCI6XCLwnZK5XCIsXCJEU2N5XCI6XCLQhVwiLFwiZHNjeVwiOlwi0ZVcIixcImRzb2xcIjpcIuKntlwiLFwiRHN0cm9rXCI6XCLEkFwiLFwiZHN0cm9rXCI6XCLEkVwiLFwiZHRkb3RcIjpcIuKLsVwiLFwiZHRyaVwiOlwi4pa/XCIsXCJkdHJpZlwiOlwi4pa+XCIsXCJkdWFyclwiOlwi4oe1XCIsXCJkdWhhclwiOlwi4qWvXCIsXCJkd2FuZ2xlXCI6XCLipqZcIixcIkRaY3lcIjpcItCPXCIsXCJkemN5XCI6XCLRn1wiLFwiZHppZ3JhcnJcIjpcIuKfv1wiLFwiRWFjdXRlXCI6XCLDiVwiLFwiZWFjdXRlXCI6XCLDqVwiLFwiZWFzdGVyXCI6XCLiqa5cIixcIkVjYXJvblwiOlwixJpcIixcImVjYXJvblwiOlwixJtcIixcIkVjaXJjXCI6XCLDilwiLFwiZWNpcmNcIjpcIsOqXCIsXCJlY2lyXCI6XCLiiZZcIixcImVjb2xvblwiOlwi4omVXCIsXCJFY3lcIjpcItCtXCIsXCJlY3lcIjpcItGNXCIsXCJlRERvdFwiOlwi4qm3XCIsXCJFZG90XCI6XCLEllwiLFwiZWRvdFwiOlwixJdcIixcImVEb3RcIjpcIuKJkVwiLFwiZWVcIjpcIuKFh1wiLFwiZWZEb3RcIjpcIuKJklwiLFwiRWZyXCI6XCLwnZSIXCIsXCJlZnJcIjpcIvCdlKJcIixcImVnXCI6XCLiqppcIixcIkVncmF2ZVwiOlwiw4hcIixcImVncmF2ZVwiOlwiw6hcIixcImVnc1wiOlwi4qqWXCIsXCJlZ3Nkb3RcIjpcIuKqmFwiLFwiZWxcIjpcIuKqmVwiLFwiRWxlbWVudFwiOlwi4oiIXCIsXCJlbGludGVyc1wiOlwi4o+nXCIsXCJlbGxcIjpcIuKEk1wiLFwiZWxzXCI6XCLiqpVcIixcImVsc2RvdFwiOlwi4qqXXCIsXCJFbWFjclwiOlwixJJcIixcImVtYWNyXCI6XCLEk1wiLFwiZW1wdHlcIjpcIuKIhVwiLFwiZW1wdHlzZXRcIjpcIuKIhVwiLFwiRW1wdHlTbWFsbFNxdWFyZVwiOlwi4pe7XCIsXCJlbXB0eXZcIjpcIuKIhVwiLFwiRW1wdHlWZXJ5U21hbGxTcXVhcmVcIjpcIuKWq1wiLFwiZW1zcDEzXCI6XCLigIRcIixcImVtc3AxNFwiOlwi4oCFXCIsXCJlbXNwXCI6XCLigINcIixcIkVOR1wiOlwixYpcIixcImVuZ1wiOlwixYtcIixcImVuc3BcIjpcIuKAglwiLFwiRW9nb25cIjpcIsSYXCIsXCJlb2dvblwiOlwixJlcIixcIkVvcGZcIjpcIvCdlLxcIixcImVvcGZcIjpcIvCdlZZcIixcImVwYXJcIjpcIuKLlVwiLFwiZXBhcnNsXCI6XCLip6NcIixcImVwbHVzXCI6XCLiqbFcIixcImVwc2lcIjpcIs61XCIsXCJFcHNpbG9uXCI6XCLOlVwiLFwiZXBzaWxvblwiOlwizrVcIixcImVwc2l2XCI6XCLPtVwiLFwiZXFjaXJjXCI6XCLiiZZcIixcImVxY29sb25cIjpcIuKJlVwiLFwiZXFzaW1cIjpcIuKJglwiLFwiZXFzbGFudGd0clwiOlwi4qqWXCIsXCJlcXNsYW50bGVzc1wiOlwi4qqVXCIsXCJFcXVhbFwiOlwi4qm1XCIsXCJlcXVhbHNcIjpcIj1cIixcIkVxdWFsVGlsZGVcIjpcIuKJglwiLFwiZXF1ZXN0XCI6XCLiiZ9cIixcIkVxdWlsaWJyaXVtXCI6XCLih4xcIixcImVxdWl2XCI6XCLiiaFcIixcImVxdWl2RERcIjpcIuKpuFwiLFwiZXF2cGFyc2xcIjpcIuKnpVwiLFwiZXJhcnJcIjpcIuKlsVwiLFwiZXJEb3RcIjpcIuKJk1wiLFwiZXNjclwiOlwi4oSvXCIsXCJFc2NyXCI6XCLihLBcIixcImVzZG90XCI6XCLiiZBcIixcIkVzaW1cIjpcIuKps1wiLFwiZXNpbVwiOlwi4omCXCIsXCJFdGFcIjpcIs6XXCIsXCJldGFcIjpcIs63XCIsXCJFVEhcIjpcIsOQXCIsXCJldGhcIjpcIsOwXCIsXCJFdW1sXCI6XCLDi1wiLFwiZXVtbFwiOlwiw6tcIixcImV1cm9cIjpcIuKCrFwiLFwiZXhjbFwiOlwiIVwiLFwiZXhpc3RcIjpcIuKIg1wiLFwiRXhpc3RzXCI6XCLiiINcIixcImV4cGVjdGF0aW9uXCI6XCLihLBcIixcImV4cG9uZW50aWFsZVwiOlwi4oWHXCIsXCJFeHBvbmVudGlhbEVcIjpcIuKFh1wiLFwiZmFsbGluZ2RvdHNlcVwiOlwi4omSXCIsXCJGY3lcIjpcItCkXCIsXCJmY3lcIjpcItGEXCIsXCJmZW1hbGVcIjpcIuKZgFwiLFwiZmZpbGlnXCI6XCLvrINcIixcImZmbGlnXCI6XCLvrIBcIixcImZmbGxpZ1wiOlwi76yEXCIsXCJGZnJcIjpcIvCdlIlcIixcImZmclwiOlwi8J2Uo1wiLFwiZmlsaWdcIjpcIu+sgVwiLFwiRmlsbGVkU21hbGxTcXVhcmVcIjpcIuKXvFwiLFwiRmlsbGVkVmVyeVNtYWxsU3F1YXJlXCI6XCLilqpcIixcImZqbGlnXCI6XCJmalwiLFwiZmxhdFwiOlwi4pmtXCIsXCJmbGxpZ1wiOlwi76yCXCIsXCJmbHRuc1wiOlwi4paxXCIsXCJmbm9mXCI6XCLGklwiLFwiRm9wZlwiOlwi8J2UvVwiLFwiZm9wZlwiOlwi8J2Vl1wiLFwiZm9yYWxsXCI6XCLiiIBcIixcIkZvckFsbFwiOlwi4oiAXCIsXCJmb3JrXCI6XCLii5RcIixcImZvcmt2XCI6XCLiq5lcIixcIkZvdXJpZXJ0cmZcIjpcIuKEsVwiLFwiZnBhcnRpbnRcIjpcIuKojVwiLFwiZnJhYzEyXCI6XCLCvVwiLFwiZnJhYzEzXCI6XCLihZNcIixcImZyYWMxNFwiOlwiwrxcIixcImZyYWMxNVwiOlwi4oWVXCIsXCJmcmFjMTZcIjpcIuKFmVwiLFwiZnJhYzE4XCI6XCLihZtcIixcImZyYWMyM1wiOlwi4oWUXCIsXCJmcmFjMjVcIjpcIuKFllwiLFwiZnJhYzM0XCI6XCLCvlwiLFwiZnJhYzM1XCI6XCLihZdcIixcImZyYWMzOFwiOlwi4oWcXCIsXCJmcmFjNDVcIjpcIuKFmFwiLFwiZnJhYzU2XCI6XCLihZpcIixcImZyYWM1OFwiOlwi4oWdXCIsXCJmcmFjNzhcIjpcIuKFnlwiLFwiZnJhc2xcIjpcIuKBhFwiLFwiZnJvd25cIjpcIuKMolwiLFwiZnNjclwiOlwi8J2Su1wiLFwiRnNjclwiOlwi4oSxXCIsXCJnYWN1dGVcIjpcIse1XCIsXCJHYW1tYVwiOlwizpNcIixcImdhbW1hXCI6XCLOs1wiLFwiR2FtbWFkXCI6XCLPnFwiLFwiZ2FtbWFkXCI6XCLPnVwiLFwiZ2FwXCI6XCLiqoZcIixcIkdicmV2ZVwiOlwixJ5cIixcImdicmV2ZVwiOlwixJ9cIixcIkdjZWRpbFwiOlwixKJcIixcIkdjaXJjXCI6XCLEnFwiLFwiZ2NpcmNcIjpcIsSdXCIsXCJHY3lcIjpcItCTXCIsXCJnY3lcIjpcItCzXCIsXCJHZG90XCI6XCLEoFwiLFwiZ2RvdFwiOlwixKFcIixcImdlXCI6XCLiiaVcIixcImdFXCI6XCLiiadcIixcImdFbFwiOlwi4qqMXCIsXCJnZWxcIjpcIuKLm1wiLFwiZ2VxXCI6XCLiiaVcIixcImdlcXFcIjpcIuKJp1wiLFwiZ2Vxc2xhbnRcIjpcIuKpvlwiLFwiZ2VzY2NcIjpcIuKqqVwiLFwiZ2VzXCI6XCLiqb5cIixcImdlc2RvdFwiOlwi4qqAXCIsXCJnZXNkb3RvXCI6XCLiqoJcIixcImdlc2RvdG9sXCI6XCLiqoRcIixcImdlc2xcIjpcIuKLm++4gFwiLFwiZ2VzbGVzXCI6XCLiqpRcIixcIkdmclwiOlwi8J2UilwiLFwiZ2ZyXCI6XCLwnZSkXCIsXCJnZ1wiOlwi4omrXCIsXCJHZ1wiOlwi4ouZXCIsXCJnZ2dcIjpcIuKLmVwiLFwiZ2ltZWxcIjpcIuKEt1wiLFwiR0pjeVwiOlwi0INcIixcImdqY3lcIjpcItGTXCIsXCJnbGFcIjpcIuKqpVwiLFwiZ2xcIjpcIuKJt1wiLFwiZ2xFXCI6XCLiqpJcIixcImdsalwiOlwi4qqkXCIsXCJnbmFwXCI6XCLiqopcIixcImduYXBwcm94XCI6XCLiqopcIixcImduZVwiOlwi4qqIXCIsXCJnbkVcIjpcIuKJqVwiLFwiZ25lcVwiOlwi4qqIXCIsXCJnbmVxcVwiOlwi4ompXCIsXCJnbnNpbVwiOlwi4ounXCIsXCJHb3BmXCI6XCLwnZS+XCIsXCJnb3BmXCI6XCLwnZWYXCIsXCJncmF2ZVwiOlwiYFwiLFwiR3JlYXRlckVxdWFsXCI6XCLiiaVcIixcIkdyZWF0ZXJFcXVhbExlc3NcIjpcIuKLm1wiLFwiR3JlYXRlckZ1bGxFcXVhbFwiOlwi4omnXCIsXCJHcmVhdGVyR3JlYXRlclwiOlwi4qqiXCIsXCJHcmVhdGVyTGVzc1wiOlwi4om3XCIsXCJHcmVhdGVyU2xhbnRFcXVhbFwiOlwi4qm+XCIsXCJHcmVhdGVyVGlsZGVcIjpcIuKJs1wiLFwiR3NjclwiOlwi8J2SolwiLFwiZ3NjclwiOlwi4oSKXCIsXCJnc2ltXCI6XCLiibNcIixcImdzaW1lXCI6XCLiqo5cIixcImdzaW1sXCI6XCLiqpBcIixcImd0Y2NcIjpcIuKqp1wiLFwiZ3RjaXJcIjpcIuKpulwiLFwiZ3RcIjpcIj5cIixcIkdUXCI6XCI+XCIsXCJHdFwiOlwi4omrXCIsXCJndGRvdFwiOlwi4ouXXCIsXCJndGxQYXJcIjpcIuKmlVwiLFwiZ3RxdWVzdFwiOlwi4qm8XCIsXCJndHJhcHByb3hcIjpcIuKqhlwiLFwiZ3RyYXJyXCI6XCLipbhcIixcImd0cmRvdFwiOlwi4ouXXCIsXCJndHJlcWxlc3NcIjpcIuKLm1wiLFwiZ3RyZXFxbGVzc1wiOlwi4qqMXCIsXCJndHJsZXNzXCI6XCLiibdcIixcImd0cnNpbVwiOlwi4omzXCIsXCJndmVydG5lcXFcIjpcIuKJqe+4gFwiLFwiZ3ZuRVwiOlwi4omp77iAXCIsXCJIYWNla1wiOlwiy4dcIixcImhhaXJzcFwiOlwi4oCKXCIsXCJoYWxmXCI6XCLCvVwiLFwiaGFtaWx0XCI6XCLihItcIixcIkhBUkRjeVwiOlwi0KpcIixcImhhcmRjeVwiOlwi0YpcIixcImhhcnJjaXJcIjpcIuKliFwiLFwiaGFyclwiOlwi4oaUXCIsXCJoQXJyXCI6XCLih5RcIixcImhhcnJ3XCI6XCLihq1cIixcIkhhdFwiOlwiXlwiLFwiaGJhclwiOlwi4oSPXCIsXCJIY2lyY1wiOlwixKRcIixcImhjaXJjXCI6XCLEpVwiLFwiaGVhcnRzXCI6XCLimaVcIixcImhlYXJ0c3VpdFwiOlwi4pmlXCIsXCJoZWxsaXBcIjpcIuKAplwiLFwiaGVyY29uXCI6XCLiirlcIixcImhmclwiOlwi8J2UpVwiLFwiSGZyXCI6XCLihIxcIixcIkhpbGJlcnRTcGFjZVwiOlwi4oSLXCIsXCJoa3NlYXJvd1wiOlwi4qSlXCIsXCJoa3N3YXJvd1wiOlwi4qSmXCIsXCJob2FyclwiOlwi4oe/XCIsXCJob210aHRcIjpcIuKIu1wiLFwiaG9va2xlZnRhcnJvd1wiOlwi4oapXCIsXCJob29rcmlnaHRhcnJvd1wiOlwi4oaqXCIsXCJob3BmXCI6XCLwnZWZXCIsXCJIb3BmXCI6XCLihI1cIixcImhvcmJhclwiOlwi4oCVXCIsXCJIb3Jpem9udGFsTGluZVwiOlwi4pSAXCIsXCJoc2NyXCI6XCLwnZK9XCIsXCJIc2NyXCI6XCLihItcIixcImhzbGFzaFwiOlwi4oSPXCIsXCJIc3Ryb2tcIjpcIsSmXCIsXCJoc3Ryb2tcIjpcIsSnXCIsXCJIdW1wRG93bkh1bXBcIjpcIuKJjlwiLFwiSHVtcEVxdWFsXCI6XCLiiY9cIixcImh5YnVsbFwiOlwi4oGDXCIsXCJoeXBoZW5cIjpcIuKAkFwiLFwiSWFjdXRlXCI6XCLDjVwiLFwiaWFjdXRlXCI6XCLDrVwiLFwiaWNcIjpcIuKBo1wiLFwiSWNpcmNcIjpcIsOOXCIsXCJpY2lyY1wiOlwiw65cIixcIkljeVwiOlwi0JhcIixcImljeVwiOlwi0LhcIixcIklkb3RcIjpcIsSwXCIsXCJJRWN5XCI6XCLQlVwiLFwiaWVjeVwiOlwi0LVcIixcImlleGNsXCI6XCLCoVwiLFwiaWZmXCI6XCLih5RcIixcImlmclwiOlwi8J2UplwiLFwiSWZyXCI6XCLihJFcIixcIklncmF2ZVwiOlwiw4xcIixcImlncmF2ZVwiOlwiw6xcIixcImlpXCI6XCLihYhcIixcImlpaWludFwiOlwi4qiMXCIsXCJpaWludFwiOlwi4oitXCIsXCJpaW5maW5cIjpcIuKnnFwiLFwiaWlvdGFcIjpcIuKEqVwiLFwiSUpsaWdcIjpcIsSyXCIsXCJpamxpZ1wiOlwixLNcIixcIkltYWNyXCI6XCLEqlwiLFwiaW1hY3JcIjpcIsSrXCIsXCJpbWFnZVwiOlwi4oSRXCIsXCJJbWFnaW5hcnlJXCI6XCLihYhcIixcImltYWdsaW5lXCI6XCLihJBcIixcImltYWdwYXJ0XCI6XCLihJFcIixcImltYXRoXCI6XCLEsVwiLFwiSW1cIjpcIuKEkVwiLFwiaW1vZlwiOlwi4oq3XCIsXCJpbXBlZFwiOlwixrVcIixcIkltcGxpZXNcIjpcIuKHklwiLFwiaW5jYXJlXCI6XCLihIVcIixcImluXCI6XCLiiIhcIixcImluZmluXCI6XCLiiJ5cIixcImluZmludGllXCI6XCLip51cIixcImlub2RvdFwiOlwixLFcIixcImludGNhbFwiOlwi4oq6XCIsXCJpbnRcIjpcIuKIq1wiLFwiSW50XCI6XCLiiKxcIixcImludGVnZXJzXCI6XCLihKRcIixcIkludGVncmFsXCI6XCLiiKtcIixcImludGVyY2FsXCI6XCLiirpcIixcIkludGVyc2VjdGlvblwiOlwi4ouCXCIsXCJpbnRsYXJoa1wiOlwi4qiXXCIsXCJpbnRwcm9kXCI6XCLiqLxcIixcIkludmlzaWJsZUNvbW1hXCI6XCLigaNcIixcIkludmlzaWJsZVRpbWVzXCI6XCLigaJcIixcIklPY3lcIjpcItCBXCIsXCJpb2N5XCI6XCLRkVwiLFwiSW9nb25cIjpcIsSuXCIsXCJpb2dvblwiOlwixK9cIixcIklvcGZcIjpcIvCdlYBcIixcImlvcGZcIjpcIvCdlZpcIixcIklvdGFcIjpcIs6ZXCIsXCJpb3RhXCI6XCLOuVwiLFwiaXByb2RcIjpcIuKovFwiLFwiaXF1ZXN0XCI6XCLCv1wiLFwiaXNjclwiOlwi8J2SvlwiLFwiSXNjclwiOlwi4oSQXCIsXCJpc2luXCI6XCLiiIhcIixcImlzaW5kb3RcIjpcIuKLtVwiLFwiaXNpbkVcIjpcIuKLuVwiLFwiaXNpbnNcIjpcIuKLtFwiLFwiaXNpbnN2XCI6XCLii7NcIixcImlzaW52XCI6XCLiiIhcIixcIml0XCI6XCLigaJcIixcIkl0aWxkZVwiOlwixKhcIixcIml0aWxkZVwiOlwixKlcIixcIkl1a2N5XCI6XCLQhlwiLFwiaXVrY3lcIjpcItGWXCIsXCJJdW1sXCI6XCLDj1wiLFwiaXVtbFwiOlwiw69cIixcIkpjaXJjXCI6XCLEtFwiLFwiamNpcmNcIjpcIsS1XCIsXCJKY3lcIjpcItCZXCIsXCJqY3lcIjpcItC5XCIsXCJKZnJcIjpcIvCdlI1cIixcImpmclwiOlwi8J2Up1wiLFwiam1hdGhcIjpcIsi3XCIsXCJKb3BmXCI6XCLwnZWBXCIsXCJqb3BmXCI6XCLwnZWbXCIsXCJKc2NyXCI6XCLwnZKlXCIsXCJqc2NyXCI6XCLwnZK/XCIsXCJKc2VyY3lcIjpcItCIXCIsXCJqc2VyY3lcIjpcItGYXCIsXCJKdWtjeVwiOlwi0IRcIixcImp1a2N5XCI6XCLRlFwiLFwiS2FwcGFcIjpcIs6aXCIsXCJrYXBwYVwiOlwizrpcIixcImthcHBhdlwiOlwiz7BcIixcIktjZWRpbFwiOlwixLZcIixcImtjZWRpbFwiOlwixLdcIixcIktjeVwiOlwi0JpcIixcImtjeVwiOlwi0LpcIixcIktmclwiOlwi8J2UjlwiLFwia2ZyXCI6XCLwnZSoXCIsXCJrZ3JlZW5cIjpcIsS4XCIsXCJLSGN5XCI6XCLQpVwiLFwia2hjeVwiOlwi0YVcIixcIktKY3lcIjpcItCMXCIsXCJramN5XCI6XCLRnFwiLFwiS29wZlwiOlwi8J2VglwiLFwia29wZlwiOlwi8J2VnFwiLFwiS3NjclwiOlwi8J2SplwiLFwia3NjclwiOlwi8J2TgFwiLFwibEFhcnJcIjpcIuKHmlwiLFwiTGFjdXRlXCI6XCLEuVwiLFwibGFjdXRlXCI6XCLEulwiLFwibGFlbXB0eXZcIjpcIuKmtFwiLFwibGFncmFuXCI6XCLihJJcIixcIkxhbWJkYVwiOlwizptcIixcImxhbWJkYVwiOlwizrtcIixcImxhbmdcIjpcIuKfqFwiLFwiTGFuZ1wiOlwi4p+qXCIsXCJsYW5nZFwiOlwi4qaRXCIsXCJsYW5nbGVcIjpcIuKfqFwiLFwibGFwXCI6XCLiqoVcIixcIkxhcGxhY2V0cmZcIjpcIuKEklwiLFwibGFxdW9cIjpcIsKrXCIsXCJsYXJyYlwiOlwi4oekXCIsXCJsYXJyYmZzXCI6XCLipJ9cIixcImxhcnJcIjpcIuKGkFwiLFwiTGFyclwiOlwi4oaeXCIsXCJsQXJyXCI6XCLih5BcIixcImxhcnJmc1wiOlwi4qSdXCIsXCJsYXJyaGtcIjpcIuKGqVwiLFwibGFycmxwXCI6XCLihqtcIixcImxhcnJwbFwiOlwi4qS5XCIsXCJsYXJyc2ltXCI6XCLipbNcIixcImxhcnJ0bFwiOlwi4oaiXCIsXCJsYXRhaWxcIjpcIuKkmVwiLFwibEF0YWlsXCI6XCLipJtcIixcImxhdFwiOlwi4qqrXCIsXCJsYXRlXCI6XCLiqq1cIixcImxhdGVzXCI6XCLiqq3vuIBcIixcImxiYXJyXCI6XCLipIxcIixcImxCYXJyXCI6XCLipI5cIixcImxiYnJrXCI6XCLinbJcIixcImxicmFjZVwiOlwie1wiLFwibGJyYWNrXCI6XCJbXCIsXCJsYnJrZVwiOlwi4qaLXCIsXCJsYnJrc2xkXCI6XCLipo9cIixcImxicmtzbHVcIjpcIuKmjVwiLFwiTGNhcm9uXCI6XCLEvVwiLFwibGNhcm9uXCI6XCLEvlwiLFwiTGNlZGlsXCI6XCLEu1wiLFwibGNlZGlsXCI6XCLEvFwiLFwibGNlaWxcIjpcIuKMiFwiLFwibGN1YlwiOlwie1wiLFwiTGN5XCI6XCLQm1wiLFwibGN5XCI6XCLQu1wiLFwibGRjYVwiOlwi4qS2XCIsXCJsZHF1b1wiOlwi4oCcXCIsXCJsZHF1b3JcIjpcIuKAnlwiLFwibGRyZGhhclwiOlwi4qWnXCIsXCJsZHJ1c2hhclwiOlwi4qWLXCIsXCJsZHNoXCI6XCLihrJcIixcImxlXCI6XCLiiaRcIixcImxFXCI6XCLiiaZcIixcIkxlZnRBbmdsZUJyYWNrZXRcIjpcIuKfqFwiLFwiTGVmdEFycm93QmFyXCI6XCLih6RcIixcImxlZnRhcnJvd1wiOlwi4oaQXCIsXCJMZWZ0QXJyb3dcIjpcIuKGkFwiLFwiTGVmdGFycm93XCI6XCLih5BcIixcIkxlZnRBcnJvd1JpZ2h0QXJyb3dcIjpcIuKHhlwiLFwibGVmdGFycm93dGFpbFwiOlwi4oaiXCIsXCJMZWZ0Q2VpbGluZ1wiOlwi4oyIXCIsXCJMZWZ0RG91YmxlQnJhY2tldFwiOlwi4p+mXCIsXCJMZWZ0RG93blRlZVZlY3RvclwiOlwi4qWhXCIsXCJMZWZ0RG93blZlY3RvckJhclwiOlwi4qWZXCIsXCJMZWZ0RG93blZlY3RvclwiOlwi4oeDXCIsXCJMZWZ0Rmxvb3JcIjpcIuKMilwiLFwibGVmdGhhcnBvb25kb3duXCI6XCLihr1cIixcImxlZnRoYXJwb29udXBcIjpcIuKGvFwiLFwibGVmdGxlZnRhcnJvd3NcIjpcIuKHh1wiLFwibGVmdHJpZ2h0YXJyb3dcIjpcIuKGlFwiLFwiTGVmdFJpZ2h0QXJyb3dcIjpcIuKGlFwiLFwiTGVmdHJpZ2h0YXJyb3dcIjpcIuKHlFwiLFwibGVmdHJpZ2h0YXJyb3dzXCI6XCLih4ZcIixcImxlZnRyaWdodGhhcnBvb25zXCI6XCLih4tcIixcImxlZnRyaWdodHNxdWlnYXJyb3dcIjpcIuKGrVwiLFwiTGVmdFJpZ2h0VmVjdG9yXCI6XCLipY5cIixcIkxlZnRUZWVBcnJvd1wiOlwi4oakXCIsXCJMZWZ0VGVlXCI6XCLiiqNcIixcIkxlZnRUZWVWZWN0b3JcIjpcIuKlmlwiLFwibGVmdHRocmVldGltZXNcIjpcIuKLi1wiLFwiTGVmdFRyaWFuZ2xlQmFyXCI6XCLip49cIixcIkxlZnRUcmlhbmdsZVwiOlwi4oqyXCIsXCJMZWZ0VHJpYW5nbGVFcXVhbFwiOlwi4oq0XCIsXCJMZWZ0VXBEb3duVmVjdG9yXCI6XCLipZFcIixcIkxlZnRVcFRlZVZlY3RvclwiOlwi4qWgXCIsXCJMZWZ0VXBWZWN0b3JCYXJcIjpcIuKlmFwiLFwiTGVmdFVwVmVjdG9yXCI6XCLihr9cIixcIkxlZnRWZWN0b3JCYXJcIjpcIuKlklwiLFwiTGVmdFZlY3RvclwiOlwi4oa8XCIsXCJsRWdcIjpcIuKqi1wiLFwibGVnXCI6XCLii5pcIixcImxlcVwiOlwi4omkXCIsXCJsZXFxXCI6XCLiiaZcIixcImxlcXNsYW50XCI6XCLiqb1cIixcImxlc2NjXCI6XCLiqqhcIixcImxlc1wiOlwi4qm9XCIsXCJsZXNkb3RcIjpcIuKpv1wiLFwibGVzZG90b1wiOlwi4qqBXCIsXCJsZXNkb3RvclwiOlwi4qqDXCIsXCJsZXNnXCI6XCLii5rvuIBcIixcImxlc2dlc1wiOlwi4qqTXCIsXCJsZXNzYXBwcm94XCI6XCLiqoVcIixcImxlc3Nkb3RcIjpcIuKLllwiLFwibGVzc2VxZ3RyXCI6XCLii5pcIixcImxlc3NlcXFndHJcIjpcIuKqi1wiLFwiTGVzc0VxdWFsR3JlYXRlclwiOlwi4ouaXCIsXCJMZXNzRnVsbEVxdWFsXCI6XCLiiaZcIixcIkxlc3NHcmVhdGVyXCI6XCLiibZcIixcImxlc3NndHJcIjpcIuKJtlwiLFwiTGVzc0xlc3NcIjpcIuKqoVwiLFwibGVzc3NpbVwiOlwi4omyXCIsXCJMZXNzU2xhbnRFcXVhbFwiOlwi4qm9XCIsXCJMZXNzVGlsZGVcIjpcIuKJslwiLFwibGZpc2h0XCI6XCLipbxcIixcImxmbG9vclwiOlwi4oyKXCIsXCJMZnJcIjpcIvCdlI9cIixcImxmclwiOlwi8J2UqVwiLFwibGdcIjpcIuKJtlwiLFwibGdFXCI6XCLiqpFcIixcImxIYXJcIjpcIuKlolwiLFwibGhhcmRcIjpcIuKGvVwiLFwibGhhcnVcIjpcIuKGvFwiLFwibGhhcnVsXCI6XCLipapcIixcImxoYmxrXCI6XCLiloRcIixcIkxKY3lcIjpcItCJXCIsXCJsamN5XCI6XCLRmVwiLFwibGxhcnJcIjpcIuKHh1wiLFwibGxcIjpcIuKJqlwiLFwiTGxcIjpcIuKLmFwiLFwibGxjb3JuZXJcIjpcIuKMnlwiLFwiTGxlZnRhcnJvd1wiOlwi4oeaXCIsXCJsbGhhcmRcIjpcIuKlq1wiLFwibGx0cmlcIjpcIuKXulwiLFwiTG1pZG90XCI6XCLEv1wiLFwibG1pZG90XCI6XCLFgFwiLFwibG1vdXN0YWNoZVwiOlwi4o6wXCIsXCJsbW91c3RcIjpcIuKOsFwiLFwibG5hcFwiOlwi4qqJXCIsXCJsbmFwcHJveFwiOlwi4qqJXCIsXCJsbmVcIjpcIuKqh1wiLFwibG5FXCI6XCLiiahcIixcImxuZXFcIjpcIuKqh1wiLFwibG5lcXFcIjpcIuKJqFwiLFwibG5zaW1cIjpcIuKLplwiLFwibG9hbmdcIjpcIuKfrFwiLFwibG9hcnJcIjpcIuKHvVwiLFwibG9icmtcIjpcIuKfplwiLFwibG9uZ2xlZnRhcnJvd1wiOlwi4p+1XCIsXCJMb25nTGVmdEFycm93XCI6XCLin7VcIixcIkxvbmdsZWZ0YXJyb3dcIjpcIuKfuFwiLFwibG9uZ2xlZnRyaWdodGFycm93XCI6XCLin7dcIixcIkxvbmdMZWZ0UmlnaHRBcnJvd1wiOlwi4p+3XCIsXCJMb25nbGVmdHJpZ2h0YXJyb3dcIjpcIuKfulwiLFwibG9uZ21hcHN0b1wiOlwi4p+8XCIsXCJsb25ncmlnaHRhcnJvd1wiOlwi4p+2XCIsXCJMb25nUmlnaHRBcnJvd1wiOlwi4p+2XCIsXCJMb25ncmlnaHRhcnJvd1wiOlwi4p+5XCIsXCJsb29wYXJyb3dsZWZ0XCI6XCLihqtcIixcImxvb3BhcnJvd3JpZ2h0XCI6XCLihqxcIixcImxvcGFyXCI6XCLipoVcIixcIkxvcGZcIjpcIvCdlYNcIixcImxvcGZcIjpcIvCdlZ1cIixcImxvcGx1c1wiOlwi4qitXCIsXCJsb3RpbWVzXCI6XCLiqLRcIixcImxvd2FzdFwiOlwi4oiXXCIsXCJsb3diYXJcIjpcIl9cIixcIkxvd2VyTGVmdEFycm93XCI6XCLihplcIixcIkxvd2VyUmlnaHRBcnJvd1wiOlwi4oaYXCIsXCJsb3pcIjpcIuKXilwiLFwibG96ZW5nZVwiOlwi4peKXCIsXCJsb3pmXCI6XCLip6tcIixcImxwYXJcIjpcIihcIixcImxwYXJsdFwiOlwi4qaTXCIsXCJscmFyclwiOlwi4oeGXCIsXCJscmNvcm5lclwiOlwi4oyfXCIsXCJscmhhclwiOlwi4oeLXCIsXCJscmhhcmRcIjpcIuKlrVwiLFwibHJtXCI6XCLigI5cIixcImxydHJpXCI6XCLiir9cIixcImxzYXF1b1wiOlwi4oC5XCIsXCJsc2NyXCI6XCLwnZOBXCIsXCJMc2NyXCI6XCLihJJcIixcImxzaFwiOlwi4oawXCIsXCJMc2hcIjpcIuKGsFwiLFwibHNpbVwiOlwi4omyXCIsXCJsc2ltZVwiOlwi4qqNXCIsXCJsc2ltZ1wiOlwi4qqPXCIsXCJsc3FiXCI6XCJbXCIsXCJsc3F1b1wiOlwi4oCYXCIsXCJsc3F1b3JcIjpcIuKAmlwiLFwiTHN0cm9rXCI6XCLFgVwiLFwibHN0cm9rXCI6XCLFglwiLFwibHRjY1wiOlwi4qqmXCIsXCJsdGNpclwiOlwi4qm5XCIsXCJsdFwiOlwiPFwiLFwiTFRcIjpcIjxcIixcIkx0XCI6XCLiiapcIixcImx0ZG90XCI6XCLii5ZcIixcImx0aHJlZVwiOlwi4ouLXCIsXCJsdGltZXNcIjpcIuKLiVwiLFwibHRsYXJyXCI6XCLipbZcIixcImx0cXVlc3RcIjpcIuKpu1wiLFwibHRyaVwiOlwi4peDXCIsXCJsdHJpZVwiOlwi4oq0XCIsXCJsdHJpZlwiOlwi4peCXCIsXCJsdHJQYXJcIjpcIuKmllwiLFwibHVyZHNoYXJcIjpcIuKlilwiLFwibHVydWhhclwiOlwi4qWmXCIsXCJsdmVydG5lcXFcIjpcIuKJqO+4gFwiLFwibHZuRVwiOlwi4omo77iAXCIsXCJtYWNyXCI6XCLCr1wiLFwibWFsZVwiOlwi4pmCXCIsXCJtYWx0XCI6XCLinKBcIixcIm1hbHRlc2VcIjpcIuKcoFwiLFwiTWFwXCI6XCLipIVcIixcIm1hcFwiOlwi4oamXCIsXCJtYXBzdG9cIjpcIuKGplwiLFwibWFwc3RvZG93blwiOlwi4oanXCIsXCJtYXBzdG9sZWZ0XCI6XCLihqRcIixcIm1hcHN0b3VwXCI6XCLihqVcIixcIm1hcmtlclwiOlwi4pauXCIsXCJtY29tbWFcIjpcIuKoqVwiLFwiTWN5XCI6XCLQnFwiLFwibWN5XCI6XCLQvFwiLFwibWRhc2hcIjpcIuKAlFwiLFwibUREb3RcIjpcIuKIulwiLFwibWVhc3VyZWRhbmdsZVwiOlwi4oihXCIsXCJNZWRpdW1TcGFjZVwiOlwi4oGfXCIsXCJNZWxsaW50cmZcIjpcIuKEs1wiLFwiTWZyXCI6XCLwnZSQXCIsXCJtZnJcIjpcIvCdlKpcIixcIm1ob1wiOlwi4oSnXCIsXCJtaWNyb1wiOlwiwrVcIixcIm1pZGFzdFwiOlwiKlwiLFwibWlkY2lyXCI6XCLiq7BcIixcIm1pZFwiOlwi4oijXCIsXCJtaWRkb3RcIjpcIsK3XCIsXCJtaW51c2JcIjpcIuKKn1wiLFwibWludXNcIjpcIuKIklwiLFwibWludXNkXCI6XCLiiLhcIixcIm1pbnVzZHVcIjpcIuKoqlwiLFwiTWludXNQbHVzXCI6XCLiiJNcIixcIm1sY3BcIjpcIuKrm1wiLFwibWxkclwiOlwi4oCmXCIsXCJtbnBsdXNcIjpcIuKIk1wiLFwibW9kZWxzXCI6XCLiiqdcIixcIk1vcGZcIjpcIvCdlYRcIixcIm1vcGZcIjpcIvCdlZ5cIixcIm1wXCI6XCLiiJNcIixcIm1zY3JcIjpcIvCdk4JcIixcIk1zY3JcIjpcIuKEs1wiLFwibXN0cG9zXCI6XCLiiL5cIixcIk11XCI6XCLOnFwiLFwibXVcIjpcIs68XCIsXCJtdWx0aW1hcFwiOlwi4oq4XCIsXCJtdW1hcFwiOlwi4oq4XCIsXCJuYWJsYVwiOlwi4oiHXCIsXCJOYWN1dGVcIjpcIsWDXCIsXCJuYWN1dGVcIjpcIsWEXCIsXCJuYW5nXCI6XCLiiKDig5JcIixcIm5hcFwiOlwi4omJXCIsXCJuYXBFXCI6XCLiqbDMuFwiLFwibmFwaWRcIjpcIuKJi8y4XCIsXCJuYXBvc1wiOlwixYlcIixcIm5hcHByb3hcIjpcIuKJiVwiLFwibmF0dXJhbFwiOlwi4pmuXCIsXCJuYXR1cmFsc1wiOlwi4oSVXCIsXCJuYXR1clwiOlwi4pmuXCIsXCJuYnNwXCI6XCLCoFwiLFwibmJ1bXBcIjpcIuKJjsy4XCIsXCJuYnVtcGVcIjpcIuKJj8y4XCIsXCJuY2FwXCI6XCLiqYNcIixcIk5jYXJvblwiOlwixYdcIixcIm5jYXJvblwiOlwixYhcIixcIk5jZWRpbFwiOlwixYVcIixcIm5jZWRpbFwiOlwixYZcIixcIm5jb25nXCI6XCLiiYdcIixcIm5jb25nZG90XCI6XCLiqa3MuFwiLFwibmN1cFwiOlwi4qmCXCIsXCJOY3lcIjpcItCdXCIsXCJuY3lcIjpcItC9XCIsXCJuZGFzaFwiOlwi4oCTXCIsXCJuZWFyaGtcIjpcIuKkpFwiLFwibmVhcnJcIjpcIuKGl1wiLFwibmVBcnJcIjpcIuKHl1wiLFwibmVhcnJvd1wiOlwi4oaXXCIsXCJuZVwiOlwi4omgXCIsXCJuZWRvdFwiOlwi4omQzLhcIixcIk5lZ2F0aXZlTWVkaXVtU3BhY2VcIjpcIuKAi1wiLFwiTmVnYXRpdmVUaGlja1NwYWNlXCI6XCLigItcIixcIk5lZ2F0aXZlVGhpblNwYWNlXCI6XCLigItcIixcIk5lZ2F0aXZlVmVyeVRoaW5TcGFjZVwiOlwi4oCLXCIsXCJuZXF1aXZcIjpcIuKJolwiLFwibmVzZWFyXCI6XCLipKhcIixcIm5lc2ltXCI6XCLiiYLMuFwiLFwiTmVzdGVkR3JlYXRlckdyZWF0ZXJcIjpcIuKJq1wiLFwiTmVzdGVkTGVzc0xlc3NcIjpcIuKJqlwiLFwiTmV3TGluZVwiOlwiXFxuXCIsXCJuZXhpc3RcIjpcIuKIhFwiLFwibmV4aXN0c1wiOlwi4oiEXCIsXCJOZnJcIjpcIvCdlJFcIixcIm5mclwiOlwi8J2Uq1wiLFwibmdFXCI6XCLiiafMuFwiLFwibmdlXCI6XCLiibFcIixcIm5nZXFcIjpcIuKJsVwiLFwibmdlcXFcIjpcIuKJp8y4XCIsXCJuZ2Vxc2xhbnRcIjpcIuKpvsy4XCIsXCJuZ2VzXCI6XCLiqb7MuFwiLFwibkdnXCI6XCLii5nMuFwiLFwibmdzaW1cIjpcIuKJtVwiLFwibkd0XCI6XCLiiavig5JcIixcIm5ndFwiOlwi4omvXCIsXCJuZ3RyXCI6XCLiia9cIixcIm5HdHZcIjpcIuKJq8y4XCIsXCJuaGFyclwiOlwi4oauXCIsXCJuaEFyclwiOlwi4oeOXCIsXCJuaHBhclwiOlwi4quyXCIsXCJuaVwiOlwi4oiLXCIsXCJuaXNcIjpcIuKLvFwiLFwibmlzZFwiOlwi4ou6XCIsXCJuaXZcIjpcIuKIi1wiLFwiTkpjeVwiOlwi0IpcIixcIm5qY3lcIjpcItGaXCIsXCJubGFyclwiOlwi4oaaXCIsXCJubEFyclwiOlwi4oeNXCIsXCJubGRyXCI6XCLigKVcIixcIm5sRVwiOlwi4ommzLhcIixcIm5sZVwiOlwi4omwXCIsXCJubGVmdGFycm93XCI6XCLihppcIixcIm5MZWZ0YXJyb3dcIjpcIuKHjVwiLFwibmxlZnRyaWdodGFycm93XCI6XCLihq5cIixcIm5MZWZ0cmlnaHRhcnJvd1wiOlwi4oeOXCIsXCJubGVxXCI6XCLiibBcIixcIm5sZXFxXCI6XCLiiabMuFwiLFwibmxlcXNsYW50XCI6XCLiqb3MuFwiLFwibmxlc1wiOlwi4qm9zLhcIixcIm5sZXNzXCI6XCLiia5cIixcIm5MbFwiOlwi4ouYzLhcIixcIm5sc2ltXCI6XCLiibRcIixcIm5MdFwiOlwi4omq4oOSXCIsXCJubHRcIjpcIuKJrlwiLFwibmx0cmlcIjpcIuKLqlwiLFwibmx0cmllXCI6XCLii6xcIixcIm5MdHZcIjpcIuKJqsy4XCIsXCJubWlkXCI6XCLiiKRcIixcIk5vQnJlYWtcIjpcIuKBoFwiLFwiTm9uQnJlYWtpbmdTcGFjZVwiOlwiwqBcIixcIm5vcGZcIjpcIvCdlZ9cIixcIk5vcGZcIjpcIuKElVwiLFwiTm90XCI6XCLiq6xcIixcIm5vdFwiOlwiwqxcIixcIk5vdENvbmdydWVudFwiOlwi4omiXCIsXCJOb3RDdXBDYXBcIjpcIuKJrVwiLFwiTm90RG91YmxlVmVydGljYWxCYXJcIjpcIuKIplwiLFwiTm90RWxlbWVudFwiOlwi4oiJXCIsXCJOb3RFcXVhbFwiOlwi4omgXCIsXCJOb3RFcXVhbFRpbGRlXCI6XCLiiYLMuFwiLFwiTm90RXhpc3RzXCI6XCLiiIRcIixcIk5vdEdyZWF0ZXJcIjpcIuKJr1wiLFwiTm90R3JlYXRlckVxdWFsXCI6XCLiibFcIixcIk5vdEdyZWF0ZXJGdWxsRXF1YWxcIjpcIuKJp8y4XCIsXCJOb3RHcmVhdGVyR3JlYXRlclwiOlwi4omrzLhcIixcIk5vdEdyZWF0ZXJMZXNzXCI6XCLiiblcIixcIk5vdEdyZWF0ZXJTbGFudEVxdWFsXCI6XCLiqb7MuFwiLFwiTm90R3JlYXRlclRpbGRlXCI6XCLiibVcIixcIk5vdEh1bXBEb3duSHVtcFwiOlwi4omOzLhcIixcIk5vdEh1bXBFcXVhbFwiOlwi4omPzLhcIixcIm5vdGluXCI6XCLiiIlcIixcIm5vdGluZG90XCI6XCLii7XMuFwiLFwibm90aW5FXCI6XCLii7nMuFwiLFwibm90aW52YVwiOlwi4oiJXCIsXCJub3RpbnZiXCI6XCLii7dcIixcIm5vdGludmNcIjpcIuKLtlwiLFwiTm90TGVmdFRyaWFuZ2xlQmFyXCI6XCLip4/MuFwiLFwiTm90TGVmdFRyaWFuZ2xlXCI6XCLii6pcIixcIk5vdExlZnRUcmlhbmdsZUVxdWFsXCI6XCLii6xcIixcIk5vdExlc3NcIjpcIuKJrlwiLFwiTm90TGVzc0VxdWFsXCI6XCLiibBcIixcIk5vdExlc3NHcmVhdGVyXCI6XCLiibhcIixcIk5vdExlc3NMZXNzXCI6XCLiiarMuFwiLFwiTm90TGVzc1NsYW50RXF1YWxcIjpcIuKpvcy4XCIsXCJOb3RMZXNzVGlsZGVcIjpcIuKJtFwiLFwiTm90TmVzdGVkR3JlYXRlckdyZWF0ZXJcIjpcIuKqosy4XCIsXCJOb3ROZXN0ZWRMZXNzTGVzc1wiOlwi4qqhzLhcIixcIm5vdG5pXCI6XCLiiIxcIixcIm5vdG5pdmFcIjpcIuKIjFwiLFwibm90bml2YlwiOlwi4ou+XCIsXCJub3RuaXZjXCI6XCLii71cIixcIk5vdFByZWNlZGVzXCI6XCLiioBcIixcIk5vdFByZWNlZGVzRXF1YWxcIjpcIuKqr8y4XCIsXCJOb3RQcmVjZWRlc1NsYW50RXF1YWxcIjpcIuKLoFwiLFwiTm90UmV2ZXJzZUVsZW1lbnRcIjpcIuKIjFwiLFwiTm90UmlnaHRUcmlhbmdsZUJhclwiOlwi4qeQzLhcIixcIk5vdFJpZ2h0VHJpYW5nbGVcIjpcIuKLq1wiLFwiTm90UmlnaHRUcmlhbmdsZUVxdWFsXCI6XCLii61cIixcIk5vdFNxdWFyZVN1YnNldFwiOlwi4oqPzLhcIixcIk5vdFNxdWFyZVN1YnNldEVxdWFsXCI6XCLii6JcIixcIk5vdFNxdWFyZVN1cGVyc2V0XCI6XCLiipDMuFwiLFwiTm90U3F1YXJlU3VwZXJzZXRFcXVhbFwiOlwi4oujXCIsXCJOb3RTdWJzZXRcIjpcIuKKguKDklwiLFwiTm90U3Vic2V0RXF1YWxcIjpcIuKKiFwiLFwiTm90U3VjY2VlZHNcIjpcIuKKgVwiLFwiTm90U3VjY2VlZHNFcXVhbFwiOlwi4qqwzLhcIixcIk5vdFN1Y2NlZWRzU2xhbnRFcXVhbFwiOlwi4ouhXCIsXCJOb3RTdWNjZWVkc1RpbGRlXCI6XCLiib/MuFwiLFwiTm90U3VwZXJzZXRcIjpcIuKKg+KDklwiLFwiTm90U3VwZXJzZXRFcXVhbFwiOlwi4oqJXCIsXCJOb3RUaWxkZVwiOlwi4omBXCIsXCJOb3RUaWxkZUVxdWFsXCI6XCLiiYRcIixcIk5vdFRpbGRlRnVsbEVxdWFsXCI6XCLiiYdcIixcIk5vdFRpbGRlVGlsZGVcIjpcIuKJiVwiLFwiTm90VmVydGljYWxCYXJcIjpcIuKIpFwiLFwibnBhcmFsbGVsXCI6XCLiiKZcIixcIm5wYXJcIjpcIuKIplwiLFwibnBhcnNsXCI6XCLiq73ig6VcIixcIm5wYXJ0XCI6XCLiiILMuFwiLFwibnBvbGludFwiOlwi4qiUXCIsXCJucHJcIjpcIuKKgFwiLFwibnByY3VlXCI6XCLii6BcIixcIm5wcmVjXCI6XCLiioBcIixcIm5wcmVjZXFcIjpcIuKqr8y4XCIsXCJucHJlXCI6XCLiqq/MuFwiLFwibnJhcnJjXCI6XCLipLPMuFwiLFwibnJhcnJcIjpcIuKGm1wiLFwibnJBcnJcIjpcIuKHj1wiLFwibnJhcnJ3XCI6XCLihp3MuFwiLFwibnJpZ2h0YXJyb3dcIjpcIuKGm1wiLFwiblJpZ2h0YXJyb3dcIjpcIuKHj1wiLFwibnJ0cmlcIjpcIuKLq1wiLFwibnJ0cmllXCI6XCLii61cIixcIm5zY1wiOlwi4oqBXCIsXCJuc2NjdWVcIjpcIuKLoVwiLFwibnNjZVwiOlwi4qqwzLhcIixcIk5zY3JcIjpcIvCdkqlcIixcIm5zY3JcIjpcIvCdk4NcIixcIm5zaG9ydG1pZFwiOlwi4oikXCIsXCJuc2hvcnRwYXJhbGxlbFwiOlwi4oimXCIsXCJuc2ltXCI6XCLiiYFcIixcIm5zaW1lXCI6XCLiiYRcIixcIm5zaW1lcVwiOlwi4omEXCIsXCJuc21pZFwiOlwi4oikXCIsXCJuc3BhclwiOlwi4oimXCIsXCJuc3FzdWJlXCI6XCLii6JcIixcIm5zcXN1cGVcIjpcIuKLo1wiLFwibnN1YlwiOlwi4oqEXCIsXCJuc3ViRVwiOlwi4quFzLhcIixcIm5zdWJlXCI6XCLiiohcIixcIm5zdWJzZXRcIjpcIuKKguKDklwiLFwibnN1YnNldGVxXCI6XCLiiohcIixcIm5zdWJzZXRlcXFcIjpcIuKrhcy4XCIsXCJuc3VjY1wiOlwi4oqBXCIsXCJuc3VjY2VxXCI6XCLiqrDMuFwiLFwibnN1cFwiOlwi4oqFXCIsXCJuc3VwRVwiOlwi4quGzLhcIixcIm5zdXBlXCI6XCLiiolcIixcIm5zdXBzZXRcIjpcIuKKg+KDklwiLFwibnN1cHNldGVxXCI6XCLiiolcIixcIm5zdXBzZXRlcXFcIjpcIuKrhsy4XCIsXCJudGdsXCI6XCLiiblcIixcIk50aWxkZVwiOlwiw5FcIixcIm50aWxkZVwiOlwiw7FcIixcIm50bGdcIjpcIuKJuFwiLFwibnRyaWFuZ2xlbGVmdFwiOlwi4ouqXCIsXCJudHJpYW5nbGVsZWZ0ZXFcIjpcIuKLrFwiLFwibnRyaWFuZ2xlcmlnaHRcIjpcIuKLq1wiLFwibnRyaWFuZ2xlcmlnaHRlcVwiOlwi4outXCIsXCJOdVwiOlwizp1cIixcIm51XCI6XCLOvVwiLFwibnVtXCI6XCIjXCIsXCJudW1lcm9cIjpcIuKEllwiLFwibnVtc3BcIjpcIuKAh1wiLFwibnZhcFwiOlwi4omN4oOSXCIsXCJudmRhc2hcIjpcIuKKrFwiLFwibnZEYXNoXCI6XCLiiq1cIixcIm5WZGFzaFwiOlwi4oquXCIsXCJuVkRhc2hcIjpcIuKKr1wiLFwibnZnZVwiOlwi4oml4oOSXCIsXCJudmd0XCI6XCI+4oOSXCIsXCJudkhhcnJcIjpcIuKkhFwiLFwibnZpbmZpblwiOlwi4qeeXCIsXCJudmxBcnJcIjpcIuKkglwiLFwibnZsZVwiOlwi4omk4oOSXCIsXCJudmx0XCI6XCI84oOSXCIsXCJudmx0cmllXCI6XCLiirTig5JcIixcIm52ckFyclwiOlwi4qSDXCIsXCJudnJ0cmllXCI6XCLiirXig5JcIixcIm52c2ltXCI6XCLiiLzig5JcIixcIm53YXJoa1wiOlwi4qSjXCIsXCJud2FyclwiOlwi4oaWXCIsXCJud0FyclwiOlwi4oeWXCIsXCJud2Fycm93XCI6XCLihpZcIixcIm53bmVhclwiOlwi4qSnXCIsXCJPYWN1dGVcIjpcIsOTXCIsXCJvYWN1dGVcIjpcIsOzXCIsXCJvYXN0XCI6XCLiiptcIixcIk9jaXJjXCI6XCLDlFwiLFwib2NpcmNcIjpcIsO0XCIsXCJvY2lyXCI6XCLiippcIixcIk9jeVwiOlwi0J5cIixcIm9jeVwiOlwi0L5cIixcIm9kYXNoXCI6XCLiip1cIixcIk9kYmxhY1wiOlwixZBcIixcIm9kYmxhY1wiOlwixZFcIixcIm9kaXZcIjpcIuKouFwiLFwib2RvdFwiOlwi4oqZXCIsXCJvZHNvbGRcIjpcIuKmvFwiLFwiT0VsaWdcIjpcIsWSXCIsXCJvZWxpZ1wiOlwixZNcIixcIm9mY2lyXCI6XCLipr9cIixcIk9mclwiOlwi8J2UklwiLFwib2ZyXCI6XCLwnZSsXCIsXCJvZ29uXCI6XCLLm1wiLFwiT2dyYXZlXCI6XCLDklwiLFwib2dyYXZlXCI6XCLDslwiLFwib2d0XCI6XCLip4FcIixcIm9oYmFyXCI6XCLiprVcIixcIm9obVwiOlwizqlcIixcIm9pbnRcIjpcIuKIrlwiLFwib2xhcnJcIjpcIuKGulwiLFwib2xjaXJcIjpcIuKmvlwiLFwib2xjcm9zc1wiOlwi4qa7XCIsXCJvbGluZVwiOlwi4oC+XCIsXCJvbHRcIjpcIuKngFwiLFwiT21hY3JcIjpcIsWMXCIsXCJvbWFjclwiOlwixY1cIixcIk9tZWdhXCI6XCLOqVwiLFwib21lZ2FcIjpcIs+JXCIsXCJPbWljcm9uXCI6XCLOn1wiLFwib21pY3JvblwiOlwizr9cIixcIm9taWRcIjpcIuKmtlwiLFwib21pbnVzXCI6XCLiipZcIixcIk9vcGZcIjpcIvCdlYZcIixcIm9vcGZcIjpcIvCdlaBcIixcIm9wYXJcIjpcIuKmt1wiLFwiT3BlbkN1cmx5RG91YmxlUXVvdGVcIjpcIuKAnFwiLFwiT3BlbkN1cmx5UXVvdGVcIjpcIuKAmFwiLFwib3BlcnBcIjpcIuKmuVwiLFwib3BsdXNcIjpcIuKKlVwiLFwib3JhcnJcIjpcIuKGu1wiLFwiT3JcIjpcIuKplFwiLFwib3JcIjpcIuKIqFwiLFwib3JkXCI6XCLiqZ1cIixcIm9yZGVyXCI6XCLihLRcIixcIm9yZGVyb2ZcIjpcIuKEtFwiLFwib3JkZlwiOlwiwqpcIixcIm9yZG1cIjpcIsK6XCIsXCJvcmlnb2ZcIjpcIuKKtlwiLFwib3JvclwiOlwi4qmWXCIsXCJvcnNsb3BlXCI6XCLiqZdcIixcIm9ydlwiOlwi4qmbXCIsXCJvU1wiOlwi4pOIXCIsXCJPc2NyXCI6XCLwnZKqXCIsXCJvc2NyXCI6XCLihLRcIixcIk9zbGFzaFwiOlwiw5hcIixcIm9zbGFzaFwiOlwiw7hcIixcIm9zb2xcIjpcIuKKmFwiLFwiT3RpbGRlXCI6XCLDlVwiLFwib3RpbGRlXCI6XCLDtVwiLFwib3RpbWVzYXNcIjpcIuKotlwiLFwiT3RpbWVzXCI6XCLiqLdcIixcIm90aW1lc1wiOlwi4oqXXCIsXCJPdW1sXCI6XCLDllwiLFwib3VtbFwiOlwiw7ZcIixcIm92YmFyXCI6XCLijL1cIixcIk92ZXJCYXJcIjpcIuKAvlwiLFwiT3ZlckJyYWNlXCI6XCLij55cIixcIk92ZXJCcmFja2V0XCI6XCLijrRcIixcIk92ZXJQYXJlbnRoZXNpc1wiOlwi4o+cXCIsXCJwYXJhXCI6XCLCtlwiLFwicGFyYWxsZWxcIjpcIuKIpVwiLFwicGFyXCI6XCLiiKVcIixcInBhcnNpbVwiOlwi4quzXCIsXCJwYXJzbFwiOlwi4qu9XCIsXCJwYXJ0XCI6XCLiiIJcIixcIlBhcnRpYWxEXCI6XCLiiIJcIixcIlBjeVwiOlwi0J9cIixcInBjeVwiOlwi0L9cIixcInBlcmNudFwiOlwiJVwiLFwicGVyaW9kXCI6XCIuXCIsXCJwZXJtaWxcIjpcIuKAsFwiLFwicGVycFwiOlwi4oqlXCIsXCJwZXJ0ZW5rXCI6XCLigLFcIixcIlBmclwiOlwi8J2Uk1wiLFwicGZyXCI6XCLwnZStXCIsXCJQaGlcIjpcIs6mXCIsXCJwaGlcIjpcIs+GXCIsXCJwaGl2XCI6XCLPlVwiLFwicGhtbWF0XCI6XCLihLNcIixcInBob25lXCI6XCLimI5cIixcIlBpXCI6XCLOoFwiLFwicGlcIjpcIs+AXCIsXCJwaXRjaGZvcmtcIjpcIuKLlFwiLFwicGl2XCI6XCLPllwiLFwicGxhbmNrXCI6XCLihI9cIixcInBsYW5ja2hcIjpcIuKEjlwiLFwicGxhbmt2XCI6XCLihI9cIixcInBsdXNhY2lyXCI6XCLiqKNcIixcInBsdXNiXCI6XCLiip5cIixcInBsdXNjaXJcIjpcIuKoolwiLFwicGx1c1wiOlwiK1wiLFwicGx1c2RvXCI6XCLiiJRcIixcInBsdXNkdVwiOlwi4qilXCIsXCJwbHVzZVwiOlwi4qmyXCIsXCJQbHVzTWludXNcIjpcIsKxXCIsXCJwbHVzbW5cIjpcIsKxXCIsXCJwbHVzc2ltXCI6XCLiqKZcIixcInBsdXN0d29cIjpcIuKop1wiLFwicG1cIjpcIsKxXCIsXCJQb2luY2FyZXBsYW5lXCI6XCLihIxcIixcInBvaW50aW50XCI6XCLiqJVcIixcInBvcGZcIjpcIvCdlaFcIixcIlBvcGZcIjpcIuKEmVwiLFwicG91bmRcIjpcIsKjXCIsXCJwcmFwXCI6XCLiqrdcIixcIlByXCI6XCLiqrtcIixcInByXCI6XCLiibpcIixcInByY3VlXCI6XCLiibxcIixcInByZWNhcHByb3hcIjpcIuKqt1wiLFwicHJlY1wiOlwi4om6XCIsXCJwcmVjY3VybHllcVwiOlwi4om8XCIsXCJQcmVjZWRlc1wiOlwi4om6XCIsXCJQcmVjZWRlc0VxdWFsXCI6XCLiqq9cIixcIlByZWNlZGVzU2xhbnRFcXVhbFwiOlwi4om8XCIsXCJQcmVjZWRlc1RpbGRlXCI6XCLiib5cIixcInByZWNlcVwiOlwi4qqvXCIsXCJwcmVjbmFwcHJveFwiOlwi4qq5XCIsXCJwcmVjbmVxcVwiOlwi4qq1XCIsXCJwcmVjbnNpbVwiOlwi4ouoXCIsXCJwcmVcIjpcIuKqr1wiLFwicHJFXCI6XCLiqrNcIixcInByZWNzaW1cIjpcIuKJvlwiLFwicHJpbWVcIjpcIuKAslwiLFwiUHJpbWVcIjpcIuKAs1wiLFwicHJpbWVzXCI6XCLihJlcIixcInBybmFwXCI6XCLiqrlcIixcInBybkVcIjpcIuKqtVwiLFwicHJuc2ltXCI6XCLii6hcIixcInByb2RcIjpcIuKIj1wiLFwiUHJvZHVjdFwiOlwi4oiPXCIsXCJwcm9mYWxhclwiOlwi4oyuXCIsXCJwcm9mbGluZVwiOlwi4oySXCIsXCJwcm9mc3VyZlwiOlwi4oyTXCIsXCJwcm9wXCI6XCLiiJ1cIixcIlByb3BvcnRpb25hbFwiOlwi4oidXCIsXCJQcm9wb3J0aW9uXCI6XCLiiLdcIixcInByb3B0b1wiOlwi4oidXCIsXCJwcnNpbVwiOlwi4om+XCIsXCJwcnVyZWxcIjpcIuKKsFwiLFwiUHNjclwiOlwi8J2Sq1wiLFwicHNjclwiOlwi8J2ThVwiLFwiUHNpXCI6XCLOqFwiLFwicHNpXCI6XCLPiFwiLFwicHVuY3NwXCI6XCLigIhcIixcIlFmclwiOlwi8J2UlFwiLFwicWZyXCI6XCLwnZSuXCIsXCJxaW50XCI6XCLiqIxcIixcInFvcGZcIjpcIvCdlaJcIixcIlFvcGZcIjpcIuKEmlwiLFwicXByaW1lXCI6XCLigZdcIixcIlFzY3JcIjpcIvCdkqxcIixcInFzY3JcIjpcIvCdk4ZcIixcInF1YXRlcm5pb25zXCI6XCLihI1cIixcInF1YXRpbnRcIjpcIuKollwiLFwicXVlc3RcIjpcIj9cIixcInF1ZXN0ZXFcIjpcIuKJn1wiLFwicXVvdFwiOlwiXFxcIlwiLFwiUVVPVFwiOlwiXFxcIlwiLFwickFhcnJcIjpcIuKHm1wiLFwicmFjZVwiOlwi4oi9zLFcIixcIlJhY3V0ZVwiOlwixZRcIixcInJhY3V0ZVwiOlwixZVcIixcInJhZGljXCI6XCLiiJpcIixcInJhZW1wdHl2XCI6XCLiprNcIixcInJhbmdcIjpcIuKfqVwiLFwiUmFuZ1wiOlwi4p+rXCIsXCJyYW5nZFwiOlwi4qaSXCIsXCJyYW5nZVwiOlwi4qalXCIsXCJyYW5nbGVcIjpcIuKfqVwiLFwicmFxdW9cIjpcIsK7XCIsXCJyYXJyYXBcIjpcIuKltVwiLFwicmFycmJcIjpcIuKHpVwiLFwicmFycmJmc1wiOlwi4qSgXCIsXCJyYXJyY1wiOlwi4qSzXCIsXCJyYXJyXCI6XCLihpJcIixcIlJhcnJcIjpcIuKGoFwiLFwickFyclwiOlwi4oeSXCIsXCJyYXJyZnNcIjpcIuKknlwiLFwicmFycmhrXCI6XCLihqpcIixcInJhcnJscFwiOlwi4oasXCIsXCJyYXJycGxcIjpcIuKlhVwiLFwicmFycnNpbVwiOlwi4qW0XCIsXCJSYXJydGxcIjpcIuKkllwiLFwicmFycnRsXCI6XCLihqNcIixcInJhcnJ3XCI6XCLihp1cIixcInJhdGFpbFwiOlwi4qSaXCIsXCJyQXRhaWxcIjpcIuKknFwiLFwicmF0aW9cIjpcIuKItlwiLFwicmF0aW9uYWxzXCI6XCLihJpcIixcInJiYXJyXCI6XCLipI1cIixcInJCYXJyXCI6XCLipI9cIixcIlJCYXJyXCI6XCLipJBcIixcInJiYnJrXCI6XCLinbNcIixcInJicmFjZVwiOlwifVwiLFwicmJyYWNrXCI6XCJdXCIsXCJyYnJrZVwiOlwi4qaMXCIsXCJyYnJrc2xkXCI6XCLipo5cIixcInJicmtzbHVcIjpcIuKmkFwiLFwiUmNhcm9uXCI6XCLFmFwiLFwicmNhcm9uXCI6XCLFmVwiLFwiUmNlZGlsXCI6XCLFllwiLFwicmNlZGlsXCI6XCLFl1wiLFwicmNlaWxcIjpcIuKMiVwiLFwicmN1YlwiOlwifVwiLFwiUmN5XCI6XCLQoFwiLFwicmN5XCI6XCLRgFwiLFwicmRjYVwiOlwi4qS3XCIsXCJyZGxkaGFyXCI6XCLipalcIixcInJkcXVvXCI6XCLigJ1cIixcInJkcXVvclwiOlwi4oCdXCIsXCJyZHNoXCI6XCLihrNcIixcInJlYWxcIjpcIuKEnFwiLFwicmVhbGluZVwiOlwi4oSbXCIsXCJyZWFscGFydFwiOlwi4oScXCIsXCJyZWFsc1wiOlwi4oSdXCIsXCJSZVwiOlwi4oScXCIsXCJyZWN0XCI6XCLilq1cIixcInJlZ1wiOlwiwq5cIixcIlJFR1wiOlwiwq5cIixcIlJldmVyc2VFbGVtZW50XCI6XCLiiItcIixcIlJldmVyc2VFcXVpbGlicml1bVwiOlwi4oeLXCIsXCJSZXZlcnNlVXBFcXVpbGlicml1bVwiOlwi4qWvXCIsXCJyZmlzaHRcIjpcIuKlvVwiLFwicmZsb29yXCI6XCLijItcIixcInJmclwiOlwi8J2Ur1wiLFwiUmZyXCI6XCLihJxcIixcInJIYXJcIjpcIuKlpFwiLFwicmhhcmRcIjpcIuKHgVwiLFwicmhhcnVcIjpcIuKHgFwiLFwicmhhcnVsXCI6XCLipaxcIixcIlJob1wiOlwizqFcIixcInJob1wiOlwiz4FcIixcInJob3ZcIjpcIs+xXCIsXCJSaWdodEFuZ2xlQnJhY2tldFwiOlwi4p+pXCIsXCJSaWdodEFycm93QmFyXCI6XCLih6VcIixcInJpZ2h0YXJyb3dcIjpcIuKGklwiLFwiUmlnaHRBcnJvd1wiOlwi4oaSXCIsXCJSaWdodGFycm93XCI6XCLih5JcIixcIlJpZ2h0QXJyb3dMZWZ0QXJyb3dcIjpcIuKHhFwiLFwicmlnaHRhcnJvd3RhaWxcIjpcIuKGo1wiLFwiUmlnaHRDZWlsaW5nXCI6XCLijIlcIixcIlJpZ2h0RG91YmxlQnJhY2tldFwiOlwi4p+nXCIsXCJSaWdodERvd25UZWVWZWN0b3JcIjpcIuKlnVwiLFwiUmlnaHREb3duVmVjdG9yQmFyXCI6XCLipZVcIixcIlJpZ2h0RG93blZlY3RvclwiOlwi4oeCXCIsXCJSaWdodEZsb29yXCI6XCLijItcIixcInJpZ2h0aGFycG9vbmRvd25cIjpcIuKHgVwiLFwicmlnaHRoYXJwb29udXBcIjpcIuKHgFwiLFwicmlnaHRsZWZ0YXJyb3dzXCI6XCLih4RcIixcInJpZ2h0bGVmdGhhcnBvb25zXCI6XCLih4xcIixcInJpZ2h0cmlnaHRhcnJvd3NcIjpcIuKHiVwiLFwicmlnaHRzcXVpZ2Fycm93XCI6XCLihp1cIixcIlJpZ2h0VGVlQXJyb3dcIjpcIuKGplwiLFwiUmlnaHRUZWVcIjpcIuKKolwiLFwiUmlnaHRUZWVWZWN0b3JcIjpcIuKlm1wiLFwicmlnaHR0aHJlZXRpbWVzXCI6XCLii4xcIixcIlJpZ2h0VHJpYW5nbGVCYXJcIjpcIuKnkFwiLFwiUmlnaHRUcmlhbmdsZVwiOlwi4oqzXCIsXCJSaWdodFRyaWFuZ2xlRXF1YWxcIjpcIuKKtVwiLFwiUmlnaHRVcERvd25WZWN0b3JcIjpcIuKlj1wiLFwiUmlnaHRVcFRlZVZlY3RvclwiOlwi4qWcXCIsXCJSaWdodFVwVmVjdG9yQmFyXCI6XCLipZRcIixcIlJpZ2h0VXBWZWN0b3JcIjpcIuKGvlwiLFwiUmlnaHRWZWN0b3JCYXJcIjpcIuKlk1wiLFwiUmlnaHRWZWN0b3JcIjpcIuKHgFwiLFwicmluZ1wiOlwiy5pcIixcInJpc2luZ2RvdHNlcVwiOlwi4omTXCIsXCJybGFyclwiOlwi4oeEXCIsXCJybGhhclwiOlwi4oeMXCIsXCJybG1cIjpcIuKAj1wiLFwicm1vdXN0YWNoZVwiOlwi4o6xXCIsXCJybW91c3RcIjpcIuKOsVwiLFwicm5taWRcIjpcIuKrrlwiLFwicm9hbmdcIjpcIuKfrVwiLFwicm9hcnJcIjpcIuKHvlwiLFwicm9icmtcIjpcIuKfp1wiLFwicm9wYXJcIjpcIuKmhlwiLFwicm9wZlwiOlwi8J2Vo1wiLFwiUm9wZlwiOlwi4oSdXCIsXCJyb3BsdXNcIjpcIuKorlwiLFwicm90aW1lc1wiOlwi4qi1XCIsXCJSb3VuZEltcGxpZXNcIjpcIuKlsFwiLFwicnBhclwiOlwiKVwiLFwicnBhcmd0XCI6XCLippRcIixcInJwcG9saW50XCI6XCLiqJJcIixcInJyYXJyXCI6XCLih4lcIixcIlJyaWdodGFycm93XCI6XCLih5tcIixcInJzYXF1b1wiOlwi4oC6XCIsXCJyc2NyXCI6XCLwnZOHXCIsXCJSc2NyXCI6XCLihJtcIixcInJzaFwiOlwi4oaxXCIsXCJSc2hcIjpcIuKGsVwiLFwicnNxYlwiOlwiXVwiLFwicnNxdW9cIjpcIuKAmVwiLFwicnNxdW9yXCI6XCLigJlcIixcInJ0aHJlZVwiOlwi4ouMXCIsXCJydGltZXNcIjpcIuKLilwiLFwicnRyaVwiOlwi4pa5XCIsXCJydHJpZVwiOlwi4oq1XCIsXCJydHJpZlwiOlwi4pa4XCIsXCJydHJpbHRyaVwiOlwi4qeOXCIsXCJSdWxlRGVsYXllZFwiOlwi4qe0XCIsXCJydWx1aGFyXCI6XCLipahcIixcInJ4XCI6XCLihJ5cIixcIlNhY3V0ZVwiOlwixZpcIixcInNhY3V0ZVwiOlwixZtcIixcInNicXVvXCI6XCLigJpcIixcInNjYXBcIjpcIuKquFwiLFwiU2Nhcm9uXCI6XCLFoFwiLFwic2Nhcm9uXCI6XCLFoVwiLFwiU2NcIjpcIuKqvFwiLFwic2NcIjpcIuKJu1wiLFwic2NjdWVcIjpcIuKJvVwiLFwic2NlXCI6XCLiqrBcIixcInNjRVwiOlwi4qq0XCIsXCJTY2VkaWxcIjpcIsWeXCIsXCJzY2VkaWxcIjpcIsWfXCIsXCJTY2lyY1wiOlwixZxcIixcInNjaXJjXCI6XCLFnVwiLFwic2NuYXBcIjpcIuKqulwiLFwic2NuRVwiOlwi4qq2XCIsXCJzY25zaW1cIjpcIuKLqVwiLFwic2Nwb2xpbnRcIjpcIuKok1wiLFwic2NzaW1cIjpcIuKJv1wiLFwiU2N5XCI6XCLQoVwiLFwic2N5XCI6XCLRgVwiLFwic2RvdGJcIjpcIuKKoVwiLFwic2RvdFwiOlwi4ouFXCIsXCJzZG90ZVwiOlwi4qmmXCIsXCJzZWFyaGtcIjpcIuKkpVwiLFwic2VhcnJcIjpcIuKGmFwiLFwic2VBcnJcIjpcIuKHmFwiLFwic2VhcnJvd1wiOlwi4oaYXCIsXCJzZWN0XCI6XCLCp1wiLFwic2VtaVwiOlwiO1wiLFwic2Vzd2FyXCI6XCLipKlcIixcInNldG1pbnVzXCI6XCLiiJZcIixcInNldG1uXCI6XCLiiJZcIixcInNleHRcIjpcIuKctlwiLFwiU2ZyXCI6XCLwnZSWXCIsXCJzZnJcIjpcIvCdlLBcIixcInNmcm93blwiOlwi4oyiXCIsXCJzaGFycFwiOlwi4pmvXCIsXCJTSENIY3lcIjpcItCpXCIsXCJzaGNoY3lcIjpcItGJXCIsXCJTSGN5XCI6XCLQqFwiLFwic2hjeVwiOlwi0YhcIixcIlNob3J0RG93bkFycm93XCI6XCLihpNcIixcIlNob3J0TGVmdEFycm93XCI6XCLihpBcIixcInNob3J0bWlkXCI6XCLiiKNcIixcInNob3J0cGFyYWxsZWxcIjpcIuKIpVwiLFwiU2hvcnRSaWdodEFycm93XCI6XCLihpJcIixcIlNob3J0VXBBcnJvd1wiOlwi4oaRXCIsXCJzaHlcIjpcIsKtXCIsXCJTaWdtYVwiOlwizqNcIixcInNpZ21hXCI6XCLPg1wiLFwic2lnbWFmXCI6XCLPglwiLFwic2lnbWF2XCI6XCLPglwiLFwic2ltXCI6XCLiiLxcIixcInNpbWRvdFwiOlwi4qmqXCIsXCJzaW1lXCI6XCLiiYNcIixcInNpbWVxXCI6XCLiiYNcIixcInNpbWdcIjpcIuKqnlwiLFwic2ltZ0VcIjpcIuKqoFwiLFwic2ltbFwiOlwi4qqdXCIsXCJzaW1sRVwiOlwi4qqfXCIsXCJzaW1uZVwiOlwi4omGXCIsXCJzaW1wbHVzXCI6XCLiqKRcIixcInNpbXJhcnJcIjpcIuKlslwiLFwic2xhcnJcIjpcIuKGkFwiLFwiU21hbGxDaXJjbGVcIjpcIuKImFwiLFwic21hbGxzZXRtaW51c1wiOlwi4oiWXCIsXCJzbWFzaHBcIjpcIuKos1wiLFwic21lcGFyc2xcIjpcIuKnpFwiLFwic21pZFwiOlwi4oijXCIsXCJzbWlsZVwiOlwi4oyjXCIsXCJzbXRcIjpcIuKqqlwiLFwic210ZVwiOlwi4qqsXCIsXCJzbXRlc1wiOlwi4qqs77iAXCIsXCJTT0ZUY3lcIjpcItCsXCIsXCJzb2Z0Y3lcIjpcItGMXCIsXCJzb2xiYXJcIjpcIuKMv1wiLFwic29sYlwiOlwi4qeEXCIsXCJzb2xcIjpcIi9cIixcIlNvcGZcIjpcIvCdlYpcIixcInNvcGZcIjpcIvCdlaRcIixcInNwYWRlc1wiOlwi4pmgXCIsXCJzcGFkZXN1aXRcIjpcIuKZoFwiLFwic3BhclwiOlwi4oilXCIsXCJzcWNhcFwiOlwi4oqTXCIsXCJzcWNhcHNcIjpcIuKKk++4gFwiLFwic3FjdXBcIjpcIuKKlFwiLFwic3FjdXBzXCI6XCLiipTvuIBcIixcIlNxcnRcIjpcIuKImlwiLFwic3FzdWJcIjpcIuKKj1wiLFwic3FzdWJlXCI6XCLiipFcIixcInNxc3Vic2V0XCI6XCLiio9cIixcInNxc3Vic2V0ZXFcIjpcIuKKkVwiLFwic3FzdXBcIjpcIuKKkFwiLFwic3FzdXBlXCI6XCLiipJcIixcInNxc3Vwc2V0XCI6XCLiipBcIixcInNxc3Vwc2V0ZXFcIjpcIuKKklwiLFwic3F1YXJlXCI6XCLilqFcIixcIlNxdWFyZVwiOlwi4pahXCIsXCJTcXVhcmVJbnRlcnNlY3Rpb25cIjpcIuKKk1wiLFwiU3F1YXJlU3Vic2V0XCI6XCLiio9cIixcIlNxdWFyZVN1YnNldEVxdWFsXCI6XCLiipFcIixcIlNxdWFyZVN1cGVyc2V0XCI6XCLiipBcIixcIlNxdWFyZVN1cGVyc2V0RXF1YWxcIjpcIuKKklwiLFwiU3F1YXJlVW5pb25cIjpcIuKKlFwiLFwic3F1YXJmXCI6XCLilqpcIixcInNxdVwiOlwi4pahXCIsXCJzcXVmXCI6XCLilqpcIixcInNyYXJyXCI6XCLihpJcIixcIlNzY3JcIjpcIvCdkq5cIixcInNzY3JcIjpcIvCdk4hcIixcInNzZXRtblwiOlwi4oiWXCIsXCJzc21pbGVcIjpcIuKMo1wiLFwic3N0YXJmXCI6XCLii4ZcIixcIlN0YXJcIjpcIuKLhlwiLFwic3RhclwiOlwi4piGXCIsXCJzdGFyZlwiOlwi4piFXCIsXCJzdHJhaWdodGVwc2lsb25cIjpcIs+1XCIsXCJzdHJhaWdodHBoaVwiOlwiz5VcIixcInN0cm5zXCI6XCLCr1wiLFwic3ViXCI6XCLiioJcIixcIlN1YlwiOlwi4ouQXCIsXCJzdWJkb3RcIjpcIuKqvVwiLFwic3ViRVwiOlwi4quFXCIsXCJzdWJlXCI6XCLiioZcIixcInN1YmVkb3RcIjpcIuKrg1wiLFwic3VibXVsdFwiOlwi4quBXCIsXCJzdWJuRVwiOlwi4quLXCIsXCJzdWJuZVwiOlwi4oqKXCIsXCJzdWJwbHVzXCI6XCLiqr9cIixcInN1YnJhcnJcIjpcIuKluVwiLFwic3Vic2V0XCI6XCLiioJcIixcIlN1YnNldFwiOlwi4ouQXCIsXCJzdWJzZXRlcVwiOlwi4oqGXCIsXCJzdWJzZXRlcXFcIjpcIuKrhVwiLFwiU3Vic2V0RXF1YWxcIjpcIuKKhlwiLFwic3Vic2V0bmVxXCI6XCLiiopcIixcInN1YnNldG5lcXFcIjpcIuKri1wiLFwic3Vic2ltXCI6XCLiq4dcIixcInN1YnN1YlwiOlwi4quVXCIsXCJzdWJzdXBcIjpcIuKrk1wiLFwic3VjY2FwcHJveFwiOlwi4qq4XCIsXCJzdWNjXCI6XCLiibtcIixcInN1Y2NjdXJseWVxXCI6XCLiib1cIixcIlN1Y2NlZWRzXCI6XCLiibtcIixcIlN1Y2NlZWRzRXF1YWxcIjpcIuKqsFwiLFwiU3VjY2VlZHNTbGFudEVxdWFsXCI6XCLiib1cIixcIlN1Y2NlZWRzVGlsZGVcIjpcIuKJv1wiLFwic3VjY2VxXCI6XCLiqrBcIixcInN1Y2NuYXBwcm94XCI6XCLiqrpcIixcInN1Y2NuZXFxXCI6XCLiqrZcIixcInN1Y2Nuc2ltXCI6XCLii6lcIixcInN1Y2NzaW1cIjpcIuKJv1wiLFwiU3VjaFRoYXRcIjpcIuKIi1wiLFwic3VtXCI6XCLiiJFcIixcIlN1bVwiOlwi4oiRXCIsXCJzdW5nXCI6XCLimapcIixcInN1cDFcIjpcIsK5XCIsXCJzdXAyXCI6XCLCslwiLFwic3VwM1wiOlwiwrNcIixcInN1cFwiOlwi4oqDXCIsXCJTdXBcIjpcIuKLkVwiLFwic3VwZG90XCI6XCLiqr5cIixcInN1cGRzdWJcIjpcIuKrmFwiLFwic3VwRVwiOlwi4quGXCIsXCJzdXBlXCI6XCLiiodcIixcInN1cGVkb3RcIjpcIuKrhFwiLFwiU3VwZXJzZXRcIjpcIuKKg1wiLFwiU3VwZXJzZXRFcXVhbFwiOlwi4oqHXCIsXCJzdXBoc29sXCI6XCLin4lcIixcInN1cGhzdWJcIjpcIuKrl1wiLFwic3VwbGFyclwiOlwi4qW7XCIsXCJzdXBtdWx0XCI6XCLiq4JcIixcInN1cG5FXCI6XCLiq4xcIixcInN1cG5lXCI6XCLiiotcIixcInN1cHBsdXNcIjpcIuKrgFwiLFwic3Vwc2V0XCI6XCLiioNcIixcIlN1cHNldFwiOlwi4ouRXCIsXCJzdXBzZXRlcVwiOlwi4oqHXCIsXCJzdXBzZXRlcXFcIjpcIuKrhlwiLFwic3Vwc2V0bmVxXCI6XCLiiotcIixcInN1cHNldG5lcXFcIjpcIuKrjFwiLFwic3Vwc2ltXCI6XCLiq4hcIixcInN1cHN1YlwiOlwi4quUXCIsXCJzdXBzdXBcIjpcIuKrllwiLFwic3dhcmhrXCI6XCLipKZcIixcInN3YXJyXCI6XCLihplcIixcInN3QXJyXCI6XCLih5lcIixcInN3YXJyb3dcIjpcIuKGmVwiLFwic3dud2FyXCI6XCLipKpcIixcInN6bGlnXCI6XCLDn1wiLFwiVGFiXCI6XCJcXHRcIixcInRhcmdldFwiOlwi4oyWXCIsXCJUYXVcIjpcIs6kXCIsXCJ0YXVcIjpcIs+EXCIsXCJ0YnJrXCI6XCLijrRcIixcIlRjYXJvblwiOlwixaRcIixcInRjYXJvblwiOlwixaVcIixcIlRjZWRpbFwiOlwixaJcIixcInRjZWRpbFwiOlwixaNcIixcIlRjeVwiOlwi0KJcIixcInRjeVwiOlwi0YJcIixcInRkb3RcIjpcIuKDm1wiLFwidGVscmVjXCI6XCLijJVcIixcIlRmclwiOlwi8J2Ul1wiLFwidGZyXCI6XCLwnZSxXCIsXCJ0aGVyZTRcIjpcIuKItFwiLFwidGhlcmVmb3JlXCI6XCLiiLRcIixcIlRoZXJlZm9yZVwiOlwi4oi0XCIsXCJUaGV0YVwiOlwizphcIixcInRoZXRhXCI6XCLOuFwiLFwidGhldGFzeW1cIjpcIs+RXCIsXCJ0aGV0YXZcIjpcIs+RXCIsXCJ0aGlja2FwcHJveFwiOlwi4omIXCIsXCJ0aGlja3NpbVwiOlwi4oi8XCIsXCJUaGlja1NwYWNlXCI6XCLigZ/igIpcIixcIlRoaW5TcGFjZVwiOlwi4oCJXCIsXCJ0aGluc3BcIjpcIuKAiVwiLFwidGhrYXBcIjpcIuKJiFwiLFwidGhrc2ltXCI6XCLiiLxcIixcIlRIT1JOXCI6XCLDnlwiLFwidGhvcm5cIjpcIsO+XCIsXCJ0aWxkZVwiOlwiy5xcIixcIlRpbGRlXCI6XCLiiLxcIixcIlRpbGRlRXF1YWxcIjpcIuKJg1wiLFwiVGlsZGVGdWxsRXF1YWxcIjpcIuKJhVwiLFwiVGlsZGVUaWxkZVwiOlwi4omIXCIsXCJ0aW1lc2JhclwiOlwi4qixXCIsXCJ0aW1lc2JcIjpcIuKKoFwiLFwidGltZXNcIjpcIsOXXCIsXCJ0aW1lc2RcIjpcIuKosFwiLFwidGludFwiOlwi4oitXCIsXCJ0b2VhXCI6XCLipKhcIixcInRvcGJvdFwiOlwi4oy2XCIsXCJ0b3BjaXJcIjpcIuKrsVwiLFwidG9wXCI6XCLiiqRcIixcIlRvcGZcIjpcIvCdlYtcIixcInRvcGZcIjpcIvCdlaVcIixcInRvcGZvcmtcIjpcIuKrmlwiLFwidG9zYVwiOlwi4qSpXCIsXCJ0cHJpbWVcIjpcIuKAtFwiLFwidHJhZGVcIjpcIuKEolwiLFwiVFJBREVcIjpcIuKEolwiLFwidHJpYW5nbGVcIjpcIuKWtVwiLFwidHJpYW5nbGVkb3duXCI6XCLilr9cIixcInRyaWFuZ2xlbGVmdFwiOlwi4peDXCIsXCJ0cmlhbmdsZWxlZnRlcVwiOlwi4oq0XCIsXCJ0cmlhbmdsZXFcIjpcIuKJnFwiLFwidHJpYW5nbGVyaWdodFwiOlwi4pa5XCIsXCJ0cmlhbmdsZXJpZ2h0ZXFcIjpcIuKKtVwiLFwidHJpZG90XCI6XCLil6xcIixcInRyaWVcIjpcIuKJnFwiLFwidHJpbWludXNcIjpcIuKoulwiLFwiVHJpcGxlRG90XCI6XCLig5tcIixcInRyaXBsdXNcIjpcIuKouVwiLFwidHJpc2JcIjpcIuKnjVwiLFwidHJpdGltZVwiOlwi4qi7XCIsXCJ0cnBleml1bVwiOlwi4o+iXCIsXCJUc2NyXCI6XCLwnZKvXCIsXCJ0c2NyXCI6XCLwnZOJXCIsXCJUU2N5XCI6XCLQplwiLFwidHNjeVwiOlwi0YZcIixcIlRTSGN5XCI6XCLQi1wiLFwidHNoY3lcIjpcItGbXCIsXCJUc3Ryb2tcIjpcIsWmXCIsXCJ0c3Ryb2tcIjpcIsWnXCIsXCJ0d2l4dFwiOlwi4omsXCIsXCJ0d29oZWFkbGVmdGFycm93XCI6XCLihp5cIixcInR3b2hlYWRyaWdodGFycm93XCI6XCLihqBcIixcIlVhY3V0ZVwiOlwiw5pcIixcInVhY3V0ZVwiOlwiw7pcIixcInVhcnJcIjpcIuKGkVwiLFwiVWFyclwiOlwi4oafXCIsXCJ1QXJyXCI6XCLih5FcIixcIlVhcnJvY2lyXCI6XCLipYlcIixcIlVicmN5XCI6XCLQjlwiLFwidWJyY3lcIjpcItGeXCIsXCJVYnJldmVcIjpcIsWsXCIsXCJ1YnJldmVcIjpcIsWtXCIsXCJVY2lyY1wiOlwiw5tcIixcInVjaXJjXCI6XCLDu1wiLFwiVWN5XCI6XCLQo1wiLFwidWN5XCI6XCLRg1wiLFwidWRhcnJcIjpcIuKHhVwiLFwiVWRibGFjXCI6XCLFsFwiLFwidWRibGFjXCI6XCLFsVwiLFwidWRoYXJcIjpcIuKlrlwiLFwidWZpc2h0XCI6XCLipb5cIixcIlVmclwiOlwi8J2UmFwiLFwidWZyXCI6XCLwnZSyXCIsXCJVZ3JhdmVcIjpcIsOZXCIsXCJ1Z3JhdmVcIjpcIsO5XCIsXCJ1SGFyXCI6XCLipaNcIixcInVoYXJsXCI6XCLihr9cIixcInVoYXJyXCI6XCLihr5cIixcInVoYmxrXCI6XCLiloBcIixcInVsY29yblwiOlwi4oycXCIsXCJ1bGNvcm5lclwiOlwi4oycXCIsXCJ1bGNyb3BcIjpcIuKMj1wiLFwidWx0cmlcIjpcIuKXuFwiLFwiVW1hY3JcIjpcIsWqXCIsXCJ1bWFjclwiOlwixatcIixcInVtbFwiOlwiwqhcIixcIlVuZGVyQmFyXCI6XCJfXCIsXCJVbmRlckJyYWNlXCI6XCLij59cIixcIlVuZGVyQnJhY2tldFwiOlwi4o61XCIsXCJVbmRlclBhcmVudGhlc2lzXCI6XCLij51cIixcIlVuaW9uXCI6XCLii4NcIixcIlVuaW9uUGx1c1wiOlwi4oqOXCIsXCJVb2dvblwiOlwixbJcIixcInVvZ29uXCI6XCLFs1wiLFwiVW9wZlwiOlwi8J2VjFwiLFwidW9wZlwiOlwi8J2VplwiLFwiVXBBcnJvd0JhclwiOlwi4qSSXCIsXCJ1cGFycm93XCI6XCLihpFcIixcIlVwQXJyb3dcIjpcIuKGkVwiLFwiVXBhcnJvd1wiOlwi4oeRXCIsXCJVcEFycm93RG93bkFycm93XCI6XCLih4VcIixcInVwZG93bmFycm93XCI6XCLihpVcIixcIlVwRG93bkFycm93XCI6XCLihpVcIixcIlVwZG93bmFycm93XCI6XCLih5VcIixcIlVwRXF1aWxpYnJpdW1cIjpcIuKlrlwiLFwidXBoYXJwb29ubGVmdFwiOlwi4oa/XCIsXCJ1cGhhcnBvb25yaWdodFwiOlwi4oa+XCIsXCJ1cGx1c1wiOlwi4oqOXCIsXCJVcHBlckxlZnRBcnJvd1wiOlwi4oaWXCIsXCJVcHBlclJpZ2h0QXJyb3dcIjpcIuKGl1wiLFwidXBzaVwiOlwiz4VcIixcIlVwc2lcIjpcIs+SXCIsXCJ1cHNpaFwiOlwiz5JcIixcIlVwc2lsb25cIjpcIs6lXCIsXCJ1cHNpbG9uXCI6XCLPhVwiLFwiVXBUZWVBcnJvd1wiOlwi4oalXCIsXCJVcFRlZVwiOlwi4oqlXCIsXCJ1cHVwYXJyb3dzXCI6XCLih4hcIixcInVyY29yblwiOlwi4oydXCIsXCJ1cmNvcm5lclwiOlwi4oydXCIsXCJ1cmNyb3BcIjpcIuKMjlwiLFwiVXJpbmdcIjpcIsWuXCIsXCJ1cmluZ1wiOlwixa9cIixcInVydHJpXCI6XCLil7lcIixcIlVzY3JcIjpcIvCdkrBcIixcInVzY3JcIjpcIvCdk4pcIixcInV0ZG90XCI6XCLii7BcIixcIlV0aWxkZVwiOlwixahcIixcInV0aWxkZVwiOlwixalcIixcInV0cmlcIjpcIuKWtVwiLFwidXRyaWZcIjpcIuKWtFwiLFwidXVhcnJcIjpcIuKHiFwiLFwiVXVtbFwiOlwiw5xcIixcInV1bWxcIjpcIsO8XCIsXCJ1d2FuZ2xlXCI6XCLipqdcIixcInZhbmdydFwiOlwi4qacXCIsXCJ2YXJlcHNpbG9uXCI6XCLPtVwiLFwidmFya2FwcGFcIjpcIs+wXCIsXCJ2YXJub3RoaW5nXCI6XCLiiIVcIixcInZhcnBoaVwiOlwiz5VcIixcInZhcnBpXCI6XCLPllwiLFwidmFycHJvcHRvXCI6XCLiiJ1cIixcInZhcnJcIjpcIuKGlVwiLFwidkFyclwiOlwi4oeVXCIsXCJ2YXJyaG9cIjpcIs+xXCIsXCJ2YXJzaWdtYVwiOlwiz4JcIixcInZhcnN1YnNldG5lcVwiOlwi4oqK77iAXCIsXCJ2YXJzdWJzZXRuZXFxXCI6XCLiq4vvuIBcIixcInZhcnN1cHNldG5lcVwiOlwi4oqL77iAXCIsXCJ2YXJzdXBzZXRuZXFxXCI6XCLiq4zvuIBcIixcInZhcnRoZXRhXCI6XCLPkVwiLFwidmFydHJpYW5nbGVsZWZ0XCI6XCLiirJcIixcInZhcnRyaWFuZ2xlcmlnaHRcIjpcIuKKs1wiLFwidkJhclwiOlwi4quoXCIsXCJWYmFyXCI6XCLiq6tcIixcInZCYXJ2XCI6XCLiq6lcIixcIlZjeVwiOlwi0JJcIixcInZjeVwiOlwi0LJcIixcInZkYXNoXCI6XCLiiqJcIixcInZEYXNoXCI6XCLiiqhcIixcIlZkYXNoXCI6XCLiiqlcIixcIlZEYXNoXCI6XCLiiqtcIixcIlZkYXNobFwiOlwi4qumXCIsXCJ2ZWViYXJcIjpcIuKKu1wiLFwidmVlXCI6XCLiiKhcIixcIlZlZVwiOlwi4ouBXCIsXCJ2ZWVlcVwiOlwi4omaXCIsXCJ2ZWxsaXBcIjpcIuKLrlwiLFwidmVyYmFyXCI6XCJ8XCIsXCJWZXJiYXJcIjpcIuKAllwiLFwidmVydFwiOlwifFwiLFwiVmVydFwiOlwi4oCWXCIsXCJWZXJ0aWNhbEJhclwiOlwi4oijXCIsXCJWZXJ0aWNhbExpbmVcIjpcInxcIixcIlZlcnRpY2FsU2VwYXJhdG9yXCI6XCLinZhcIixcIlZlcnRpY2FsVGlsZGVcIjpcIuKJgFwiLFwiVmVyeVRoaW5TcGFjZVwiOlwi4oCKXCIsXCJWZnJcIjpcIvCdlJlcIixcInZmclwiOlwi8J2Us1wiLFwidmx0cmlcIjpcIuKKslwiLFwidm5zdWJcIjpcIuKKguKDklwiLFwidm5zdXBcIjpcIuKKg+KDklwiLFwiVm9wZlwiOlwi8J2VjVwiLFwidm9wZlwiOlwi8J2Vp1wiLFwidnByb3BcIjpcIuKInVwiLFwidnJ0cmlcIjpcIuKKs1wiLFwiVnNjclwiOlwi8J2SsVwiLFwidnNjclwiOlwi8J2Ti1wiLFwidnN1Ym5FXCI6XCLiq4vvuIBcIixcInZzdWJuZVwiOlwi4oqK77iAXCIsXCJ2c3VwbkVcIjpcIuKrjO+4gFwiLFwidnN1cG5lXCI6XCLiiovvuIBcIixcIlZ2ZGFzaFwiOlwi4oqqXCIsXCJ2emlnemFnXCI6XCLipppcIixcIldjaXJjXCI6XCLFtFwiLFwid2NpcmNcIjpcIsW1XCIsXCJ3ZWRiYXJcIjpcIuKpn1wiLFwid2VkZ2VcIjpcIuKIp1wiLFwiV2VkZ2VcIjpcIuKLgFwiLFwid2VkZ2VxXCI6XCLiiZlcIixcIndlaWVycFwiOlwi4oSYXCIsXCJXZnJcIjpcIvCdlJpcIixcIndmclwiOlwi8J2UtFwiLFwiV29wZlwiOlwi8J2VjlwiLFwid29wZlwiOlwi8J2VqFwiLFwid3BcIjpcIuKEmFwiLFwid3JcIjpcIuKJgFwiLFwid3JlYXRoXCI6XCLiiYBcIixcIldzY3JcIjpcIvCdkrJcIixcIndzY3JcIjpcIvCdk4xcIixcInhjYXBcIjpcIuKLglwiLFwieGNpcmNcIjpcIuKXr1wiLFwieGN1cFwiOlwi4ouDXCIsXCJ4ZHRyaVwiOlwi4pa9XCIsXCJYZnJcIjpcIvCdlJtcIixcInhmclwiOlwi8J2UtVwiLFwieGhhcnJcIjpcIuKft1wiLFwieGhBcnJcIjpcIuKfulwiLFwiWGlcIjpcIs6eXCIsXCJ4aVwiOlwizr5cIixcInhsYXJyXCI6XCLin7VcIixcInhsQXJyXCI6XCLin7hcIixcInhtYXBcIjpcIuKfvFwiLFwieG5pc1wiOlwi4ou7XCIsXCJ4b2RvdFwiOlwi4qiAXCIsXCJYb3BmXCI6XCLwnZWPXCIsXCJ4b3BmXCI6XCLwnZWpXCIsXCJ4b3BsdXNcIjpcIuKogVwiLFwieG90aW1lXCI6XCLiqIJcIixcInhyYXJyXCI6XCLin7ZcIixcInhyQXJyXCI6XCLin7lcIixcIlhzY3JcIjpcIvCdkrNcIixcInhzY3JcIjpcIvCdk41cIixcInhzcWN1cFwiOlwi4qiGXCIsXCJ4dXBsdXNcIjpcIuKohFwiLFwieHV0cmlcIjpcIuKWs1wiLFwieHZlZVwiOlwi4ouBXCIsXCJ4d2VkZ2VcIjpcIuKLgFwiLFwiWWFjdXRlXCI6XCLDnVwiLFwieWFjdXRlXCI6XCLDvVwiLFwiWUFjeVwiOlwi0K9cIixcInlhY3lcIjpcItGPXCIsXCJZY2lyY1wiOlwixbZcIixcInljaXJjXCI6XCLFt1wiLFwiWWN5XCI6XCLQq1wiLFwieWN5XCI6XCLRi1wiLFwieWVuXCI6XCLCpVwiLFwiWWZyXCI6XCLwnZScXCIsXCJ5ZnJcIjpcIvCdlLZcIixcIllJY3lcIjpcItCHXCIsXCJ5aWN5XCI6XCLRl1wiLFwiWW9wZlwiOlwi8J2VkFwiLFwieW9wZlwiOlwi8J2VqlwiLFwiWXNjclwiOlwi8J2StFwiLFwieXNjclwiOlwi8J2TjlwiLFwiWVVjeVwiOlwi0K5cIixcInl1Y3lcIjpcItGOXCIsXCJ5dW1sXCI6XCLDv1wiLFwiWXVtbFwiOlwixbhcIixcIlphY3V0ZVwiOlwixblcIixcInphY3V0ZVwiOlwixbpcIixcIlpjYXJvblwiOlwixb1cIixcInpjYXJvblwiOlwixb5cIixcIlpjeVwiOlwi0JdcIixcInpjeVwiOlwi0LdcIixcIlpkb3RcIjpcIsW7XCIsXCJ6ZG90XCI6XCLFvFwiLFwiemVldHJmXCI6XCLihKhcIixcIlplcm9XaWR0aFNwYWNlXCI6XCLigItcIixcIlpldGFcIjpcIs6WXCIsXCJ6ZXRhXCI6XCLOtlwiLFwiemZyXCI6XCLwnZS3XCIsXCJaZnJcIjpcIuKEqFwiLFwiWkhjeVwiOlwi0JZcIixcInpoY3lcIjpcItC2XCIsXCJ6aWdyYXJyXCI6XCLih51cIixcInpvcGZcIjpcIvCdlatcIixcIlpvcGZcIjpcIuKEpFwiLFwiWnNjclwiOlwi8J2StVwiLFwienNjclwiOlwi8J2Tj1wiLFwiendqXCI6XCLigI1cIixcInp3bmpcIjpcIuKAjFwifVxuXG4vKioqLyB9KSxcbi8qIDE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0ge1widW5pdmVyc2FsXCI6NTAsXCJ0YWdcIjozMCxcImF0dHJpYnV0ZVwiOjEsXCJwc2V1ZG9cIjowLFwiZGVzY2VuZGFudFwiOi0xLFwiY2hpbGRcIjotMSxcInBhcmVudFwiOi0xLFwic2libGluZ1wiOi0xLFwiYWRqYWNlbnRcIjotMX1cblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEluc3BpcmVkIGJ5IEdvb2dsZSBDbG9zdXJlOlxuLy8gaHR0cDovL2Nsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9zdm4vZG9jcy9cbi8vIGNsb3N1cmVfZ29vZ19hcnJheV9hcnJheS5qcy5odG1sI2dvb2cuYXJyYXkuY2xlYXJcblxuXG5cbnZhciB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHR2YWx1ZSh0aGlzKS5sZW5ndGggPSAwO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge307XG5cblxuLyoqKi8gfSksXG4vKiAxOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgdG9JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSlcblxuICAsIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuIHJldHVybiBtYXgoMCwgdG9JbnRlZ2VyKHZhbHVlKSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLCBwbGFpbk9iamVjdCA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgvKiBDdXN0b21DcmVhdGUqLykge1xuXHR2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YsIGN1c3RvbUNyZWF0ZSA9IGFyZ3VtZW50c1swXSB8fCBjcmVhdGU7XG5cdGlmICh0eXBlb2Ygc2V0UHJvdG90eXBlT2YgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gZ2V0UHJvdG90eXBlT2Yoc2V0UHJvdG90eXBlT2YoY3VzdG9tQ3JlYXRlKG51bGwpLCBwbGFpbk9iamVjdCkpID09PSBwbGFpbk9iamVjdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGVzbGludCBuby1wcm90bzogXCJvZmZcIiAqL1xuXG4vLyBCaWcgdGhhbmtzIHRvIEBXZWJSZWZsZWN0aW9uIGZvciBzb3J0aW5nIHRoaXMgb3V0XG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9XZWJSZWZsZWN0aW9uLzU1OTM1NTRcblxuXG5cbnZhciBpc09iamVjdCAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1KVxuICAsIHZhbHVlICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMClcbiAgLCBvYmpJc1Byb3RvdHlwZU9mID0gT2JqZWN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mXG4gICwgZGVmaW5lUHJvcGVydHkgID0gT2JqZWN0LmRlZmluZVByb3BlcnR5XG4gICwgbnVsbERlc2MgICAgICAgID0ge1xuXHRjb25maWd1cmFibGU6IHRydWUsXG5cdGVudW1lcmFibGU6IGZhbHNlLFxuXHR3cml0YWJsZTogdHJ1ZSxcblx0dmFsdWU6IHVuZGVmaW5lZFxufVxuICAsIHZhbGlkYXRlO1xuXG52YWxpZGF0ZSA9IGZ1bmN0aW9uIChvYmosIHByb3RvdHlwZSkge1xuXHR2YWx1ZShvYmopO1xuXHRpZiAocHJvdG90eXBlID09PSBudWxsIHx8IGlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiBvYmo7XG5cdHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm90b3R5cGUgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdFwiKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uIChzdGF0dXMpIHtcblx0dmFyIGZuLCBzZXQ7XG5cdGlmICghc3RhdHVzKSByZXR1cm4gbnVsbDtcblx0aWYgKHN0YXR1cy5sZXZlbCA9PT0gMikge1xuXHRcdGlmIChzdGF0dXMuc2V0KSB7XG5cdFx0XHRzZXQgPSBzdGF0dXMuc2V0O1xuXHRcdFx0Zm4gPSBmdW5jdGlvbiAob2JqLCBwcm90b3R5cGUpIHtcblx0XHRcdFx0c2V0LmNhbGwodmFsaWRhdGUob2JqLCBwcm90b3R5cGUpLCBwcm90b3R5cGUpO1xuXHRcdFx0XHRyZXR1cm4gb2JqO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm4gPSBmdW5jdGlvbiAob2JqLCBwcm90b3R5cGUpIHtcblx0XHRcdFx0dmFsaWRhdGUob2JqLCBwcm90b3R5cGUpLl9fcHJvdG9fXyA9IHByb3RvdHlwZTtcblx0XHRcdFx0cmV0dXJuIG9iajtcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZuID0gZnVuY3Rpb24gc2VsZihvYmosIHByb3RvdHlwZSkge1xuXHRcdFx0dmFyIGlzTnVsbEJhc2U7XG5cdFx0XHR2YWxpZGF0ZShvYmosIHByb3RvdHlwZSk7XG5cdFx0XHRpc051bGxCYXNlID0gb2JqSXNQcm90b3R5cGVPZi5jYWxsKHNlbGYubnVsbFBvbHlmaWxsLCBvYmopO1xuXHRcdFx0aWYgKGlzTnVsbEJhc2UpIGRlbGV0ZSBzZWxmLm51bGxQb2x5ZmlsbC5fX3Byb3RvX187XG5cdFx0XHRpZiAocHJvdG90eXBlID09PSBudWxsKSBwcm90b3R5cGUgPSBzZWxmLm51bGxQb2x5ZmlsbDtcblx0XHRcdG9iai5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG5cdFx0XHRpZiAoaXNOdWxsQmFzZSkgZGVmaW5lUHJvcGVydHkoc2VsZi5udWxsUG9seWZpbGwsIFwiX19wcm90b19fXCIsIG51bGxEZXNjKTtcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBcImxldmVsXCIsIHtcblx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdHdyaXRhYmxlOiBmYWxzZSxcblx0XHR2YWx1ZTogc3RhdHVzLmxldmVsXG5cdH0pO1xufShcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgdG1wT2JqMSA9IE9iamVjdC5jcmVhdGUobnVsbClcblx0XHQgICwgdG1wT2JqMiA9IHt9XG5cdFx0ICAsIHNldFxuXHRcdCAgLCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCBcIl9fcHJvdG9fX1wiKTtcblxuXHRcdGlmIChkZXNjKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRzZXQgPSBkZXNjLnNldDsgLy8gT3BlcmEgY3Jhc2hlcyBhdCB0aGlzIHBvaW50XG5cdFx0XHRcdHNldC5jYWxsKHRtcE9iajEsIHRtcE9iajIpO1xuXHRcdFx0fSBjYXRjaCAoaWdub3JlKSB7fVxuXHRcdFx0aWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0bXBPYmoxKSA9PT0gdG1wT2JqMikgcmV0dXJuIHsgc2V0OiBzZXQsIGxldmVsOiAyIH07XG5cdFx0fVxuXG5cdFx0dG1wT2JqMS5fX3Byb3RvX18gPSB0bXBPYmoyO1xuXHRcdGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodG1wT2JqMSkgPT09IHRtcE9iajIpIHJldHVybiB7IGxldmVsOiAyIH07XG5cblx0XHR0bXBPYmoxID0ge307XG5cdFx0dG1wT2JqMS5fX3Byb3RvX18gPSB0bXBPYmoyO1xuXHRcdGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodG1wT2JqMSkgPT09IHRtcE9iajIpIHJldHVybiB7IGxldmVsOiAxIH07XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pKClcbikpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDU2KTtcblxuXG4vKioqLyB9KSxcbi8qIDIxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpc1ZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxudmFyIGZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCwgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxudmFyIHByb2Nlc3MgPSBmdW5jdGlvbiAoc3JjLCBvYmopIHtcblx0dmFyIGtleTtcblx0Zm9yIChrZXkgaW4gc3JjKSBvYmpba2V5XSA9IHNyY1trZXldO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRzMSAvKiwg4oCmb3B0aW9ucyovKSB7XG5cdHZhciByZXN1bHQgPSBjcmVhdGUobnVsbCk7XG5cdGZvckVhY2guY2FsbChhcmd1bWVudHMsIGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdFx0aWYgKCFpc1ZhbHVlKG9wdGlvbnMpKSByZXR1cm47XG5cdFx0cHJvY2VzcyhPYmplY3Qob3B0aW9ucyksIHJlc3VsdCk7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDIyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpc0l0ZXJhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdGlmICghaXNJdGVyYWJsZSh2YWx1ZSkpIHRocm93IG5ldyBUeXBlRXJyb3IodmFsdWUgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG5cdHJldHVybiB2YWx1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAyMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZmFsc2VGdW5jID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KS5mYWxzZUZ1bmM7XG5cbi8vaHR0cHM6Ly9naXRodWIuY29tL3NsZXZpdGhhbi9YUmVnRXhwL2Jsb2IvbWFzdGVyL3NyYy94cmVnZXhwLmpzI0w0NjlcbnZhciByZUNoYXJzID0gL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nO1xuXG5mdW5jdGlvbiBmYWN0b3J5KGFkYXB0ZXIpe1xuXHQvKlxuXHRcdGF0dHJpYnV0ZSBzZWxlY3RvcnNcblx0Ki9cblx0dmFyIGF0dHJpYnV0ZVJ1bGVzID0ge1xuXHRcdF9fcHJvdG9fXzogbnVsbCxcblx0XHRlcXVhbHM6IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgID0gZGF0YS5uYW1lLFxuXHRcdFx0XHR2YWx1ZSA9IGRhdGEudmFsdWU7XG5cblx0XHRcdGlmKGRhdGEuaWdub3JlQ2FzZSl7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gZXF1YWxzSUMoZWxlbSl7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiYgYXR0ci50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZXF1YWxzKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKSA9PT0gdmFsdWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRoeXBoZW46IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgID0gZGF0YS5uYW1lLFxuXHRcdFx0XHR2YWx1ZSA9IGRhdGEudmFsdWUsXG5cdFx0XHRcdGxlbiA9IHZhbHVlLmxlbmd0aDtcblxuXHRcdFx0aWYoZGF0YS5pZ25vcmVDYXNlKXtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiBoeXBoZW5JQyhlbGVtKXtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0XHQoYXR0ci5sZW5ndGggPT09IGxlbiB8fCBhdHRyLmNoYXJBdChsZW4pID09PSBcIi1cIikgJiZcblx0XHRcdFx0XHRcdFx0YXR0ci5zdWJzdHIoMCwgbGVuKS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZSAmJlxuXHRcdFx0XHRcdFx0XHRuZXh0KGVsZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gaHlwaGVuKGVsZW0pe1xuXHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiZcblx0XHRcdFx0XHRcdGF0dHIuc3Vic3RyKDAsIGxlbikgPT09IHZhbHVlICYmXG5cdFx0XHRcdFx0XHQoYXR0ci5sZW5ndGggPT09IGxlbiB8fCBhdHRyLmNoYXJBdChsZW4pID09PSBcIi1cIikgJiZcblx0XHRcdFx0XHRcdG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0ZWxlbWVudDogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSA9IGRhdGEubmFtZSxcblx0XHRcdFx0dmFsdWUgPSBkYXRhLnZhbHVlO1xuXG5cdFx0XHRpZigvXFxzLy50ZXN0KHZhbHVlKSl7XG5cdFx0XHRcdHJldHVybiBmYWxzZUZ1bmM7XG5cdFx0XHR9XG5cblx0XHRcdHZhbHVlID0gdmFsdWUucmVwbGFjZShyZUNoYXJzLCBcIlxcXFwkJlwiKTtcblxuXHRcdFx0dmFyIHBhdHRlcm4gPSBcIig/Ol58XFxcXHMpXCIgKyB2YWx1ZSArIFwiKD86JHxcXFxccylcIixcblx0XHRcdFx0ZmxhZ3MgPSBkYXRhLmlnbm9yZUNhc2UgPyBcImlcIiA6IFwiXCIsXG5cdFx0XHRcdHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBlbGVtZW50KGVsZW0pe1xuXHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiYgcmVnZXgudGVzdChhdHRyKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGV4aXN0czogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSA9IGRhdGEubmFtZTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiBleGlzdHMoZWxlbSl7XG5cdFx0XHRcdHJldHVybiBhZGFwdGVyLmhhc0F0dHJpYihlbGVtLCBuYW1lKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdHN0YXJ0OiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lICA9IGRhdGEubmFtZSxcblx0XHRcdFx0dmFsdWUgPSBkYXRhLnZhbHVlLFxuXHRcdFx0XHRsZW4gPSB2YWx1ZS5sZW5ndGg7XG5cblx0XHRcdGlmKGxlbiA9PT0gMCl7XG5cdFx0XHRcdHJldHVybiBmYWxzZUZ1bmM7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGRhdGEuaWdub3JlQ2FzZSl7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gc3RhcnRJQyhlbGVtKXtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHIgIT0gbnVsbCAmJiBhdHRyLnN1YnN0cigwLCBsZW4pLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlICYmIG5leHQoZWxlbSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBzdGFydChlbGVtKXtcblx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIGF0dHIuc3Vic3RyKDAsIGxlbikgPT09IHZhbHVlICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0ZW5kOiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lICA9IGRhdGEubmFtZSxcblx0XHRcdFx0dmFsdWUgPSBkYXRhLnZhbHVlLFxuXHRcdFx0XHRsZW4gICA9IC12YWx1ZS5sZW5ndGg7XG5cblx0XHRcdGlmKGxlbiA9PT0gMCl7XG5cdFx0XHRcdHJldHVybiBmYWxzZUZ1bmM7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGRhdGEuaWdub3JlQ2FzZSl7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gZW5kSUMoZWxlbSl7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiYgYXR0ci5zdWJzdHIobGVuKS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZW5kKGVsZW0pe1xuXHRcdFx0XHR2YXIgYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgbmFtZSk7XG5cdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiYgYXR0ci5zdWJzdHIobGVuKSA9PT0gdmFsdWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhbnk6IGZ1bmN0aW9uKG5leHQsIGRhdGEpe1xuXHRcdFx0dmFyIG5hbWUgID0gZGF0YS5uYW1lLFxuXHRcdFx0XHR2YWx1ZSA9IGRhdGEudmFsdWU7XG5cblx0XHRcdGlmKHZhbHVlID09PSBcIlwiKXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlRnVuYztcblx0XHRcdH1cblxuXHRcdFx0aWYoZGF0YS5pZ25vcmVDYXNlKXtcblx0XHRcdFx0dmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCh2YWx1ZS5yZXBsYWNlKHJlQ2hhcnMsIFwiXFxcXCQmXCIpLCBcImlcIik7XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGFueUlDKGVsZW0pe1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIHJlZ2V4LnRlc3QoYXR0cikgJiYgbmV4dChlbGVtKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGFueShlbGVtKXtcblx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gYXR0ciAhPSBudWxsICYmIGF0dHIuaW5kZXhPZih2YWx1ZSkgPj0gMCAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdG5vdDogZnVuY3Rpb24obmV4dCwgZGF0YSl7XG5cdFx0XHR2YXIgbmFtZSAgPSBkYXRhLm5hbWUsXG5cdFx0XHRcdHZhbHVlID0gZGF0YS52YWx1ZTtcblxuXHRcdFx0aWYodmFsdWUgPT09IFwiXCIpe1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gbm90RW1wdHkoZWxlbSl7XG5cdFx0XHRcdFx0cmV0dXJuICEhYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmKGRhdGEuaWdub3JlQ2FzZSl7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gbm90SUMoZWxlbSl7XG5cdFx0XHRcdFx0dmFyIGF0dHIgPSBhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIG5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBhdHRyICE9IG51bGwgJiYgYXR0ci50b0xvd2VyQ2FzZSgpICE9PSB2YWx1ZSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gbm90KGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gYWRhcHRlci5nZXRBdHRyaWJ1dGVWYWx1ZShlbGVtLCBuYW1lKSAhPT0gdmFsdWUgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiB7XG5cdFx0Y29tcGlsZTogZnVuY3Rpb24obmV4dCwgZGF0YSwgb3B0aW9ucyl7XG5cdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMuc3RyaWN0ICYmIChcblx0XHRcdFx0ZGF0YS5pZ25vcmVDYXNlIHx8IGRhdGEuYWN0aW9uID09PSBcIm5vdFwiXG5cdFx0XHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhdHRyaWJ1dGUgc2VsZWN0b3JcIik7XG5cdFx0XHRyZXR1cm4gYXR0cmlidXRlUnVsZXNbZGF0YS5hY3Rpb25dKG5leHQsIGRhdGEpO1xuXHRcdH0sXG5cdFx0cnVsZXM6IGF0dHJpYnV0ZVJ1bGVzXG5cdH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeTtcblxuXG4vKioqLyB9KSxcbi8qIDI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gQ1NTc2VsZWN0O1xuXG52YXIgRG9tVXRpbHMgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KSxcblx0ZmFsc2VGdW5jICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLmZhbHNlRnVuYyxcblx0Y29tcGlsZUZhY3RvcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKSxcblx0ZGVmYXVsdENvbXBpbGUgPSBjb21waWxlRmFjdG9yeShEb21VdGlscyk7XG5cbmZ1bmN0aW9uIGFkYXB0ZXJDb21waWxlKGFkYXB0ZXIpe1xuXHRyZXR1cm4gYWRhcHRlciA9PT0gRG9tVXRpbHMgPyBkZWZhdWx0Q29tcGlsZSA6IGNvbXBpbGVGYWN0b3J5KGFkYXB0ZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3RvckZ1bmMoc2VhcmNoRnVuYyl7XG5cdHJldHVybiBmdW5jdGlvbiBzZWxlY3QocXVlcnksIGVsZW1zLCBvcHRpb25zKXtcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXHRcdG9wdGlvbnMuYWRhcHRlciA9IG9wdGlvbnMuYWRhcHRlciB8fCBEb21VdGlscztcblx0XHR2YXIgY29tcGlsZSA9IGFkYXB0ZXJDb21waWxlKG9wdGlvbnMuYWRhcHRlcik7XG5cblx0XHRpZih0eXBlb2YgcXVlcnkgIT09IFwiZnVuY3Rpb25cIikgcXVlcnkgPSBjb21waWxlLmNvbXBpbGVVbnNhZmUocXVlcnksIG9wdGlvbnMsIGVsZW1zKTtcblx0XHRpZihxdWVyeS5zaG91bGRUZXN0TmV4dFNpYmxpbmdzKSBlbGVtcyA9IGFwcGVuZE5leHRTaWJsaW5ncygob3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQpIHx8IGVsZW1zLCBvcHRpb25zLmFkYXB0ZXIpO1xuXHRcdGlmKCFBcnJheS5pc0FycmF5KGVsZW1zKSkgZWxlbXMgPSBvcHRpb25zLmFkYXB0ZXIuZ2V0Q2hpbGRyZW4oZWxlbXMpO1xuXHRcdGVsc2UgZWxlbXMgPSBvcHRpb25zLmFkYXB0ZXIucmVtb3ZlU3Vic2V0cyhlbGVtcyk7XG5cdFx0cmV0dXJuIHNlYXJjaEZ1bmMocXVlcnksIGVsZW1zLCBvcHRpb25zKTtcblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dFNpYmxpbmdzKGVsZW0sIGFkYXB0ZXIpe1xuXHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXHRpZighQXJyYXkuaXNBcnJheShzaWJsaW5ncykpIHJldHVybiBbXTtcblx0c2libGluZ3MgPSBzaWJsaW5ncy5zbGljZSgwKTtcblx0d2hpbGUoc2libGluZ3Muc2hpZnQoKSAhPT0gZWxlbSk7XG5cdHJldHVybiBzaWJsaW5ncztcbn1cblxuZnVuY3Rpb24gYXBwZW5kTmV4dFNpYmxpbmdzKGVsZW1zLCBhZGFwdGVyKXtcblx0Ly8gT3JkZXIgbWF0dGVycyBiZWNhdXNlIGpRdWVyeSBzZWVtcyB0byBjaGVjayB0aGUgY2hpbGRyZW4gYmVmb3JlIHRoZSBzaWJsaW5nc1xuXHRpZighQXJyYXkuaXNBcnJheShlbGVtcykpIGVsZW1zID0gW2VsZW1zXTtcblx0dmFyIG5ld0VsZW1zID0gZWxlbXMuc2xpY2UoMCk7XG5cblx0Zm9yKHZhciBpID0gMCwgbGVuID0gZWxlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspe1xuXHRcdHZhciBuZXh0U2libGluZ3MgPSBnZXROZXh0U2libGluZ3MobmV3RWxlbXNbaV0sIGFkYXB0ZXIpO1xuXHRcdG5ld0VsZW1zLnB1c2guYXBwbHkobmV3RWxlbXMsIG5leHRTaWJsaW5ncyk7XG5cdH1cblx0cmV0dXJuIG5ld0VsZW1zO1xufVxuXG52YXIgc2VsZWN0QWxsID0gZ2V0U2VsZWN0b3JGdW5jKGZ1bmN0aW9uIHNlbGVjdEFsbChxdWVyeSwgZWxlbXMsIG9wdGlvbnMpe1xuXHRyZXR1cm4gKHF1ZXJ5ID09PSBmYWxzZUZ1bmMgfHwgIWVsZW1zIHx8IGVsZW1zLmxlbmd0aCA9PT0gMCkgPyBbXSA6IG9wdGlvbnMuYWRhcHRlci5maW5kQWxsKHF1ZXJ5LCBlbGVtcyk7XG59KTtcblxudmFyIHNlbGVjdE9uZSA9IGdldFNlbGVjdG9yRnVuYyhmdW5jdGlvbiBzZWxlY3RPbmUocXVlcnksIGVsZW1zLCBvcHRpb25zKXtcblx0cmV0dXJuIChxdWVyeSA9PT0gZmFsc2VGdW5jIHx8ICFlbGVtcyB8fCBlbGVtcy5sZW5ndGggPT09IDApID8gbnVsbCA6IG9wdGlvbnMuYWRhcHRlci5maW5kT25lKHF1ZXJ5LCBlbGVtcyk7XG59KTtcblxuZnVuY3Rpb24gaXMoZWxlbSwgcXVlcnksIG9wdGlvbnMpe1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXHRvcHRpb25zLmFkYXB0ZXIgPSBvcHRpb25zLmFkYXB0ZXIgfHwgRG9tVXRpbHM7XG5cdHZhciBjb21waWxlID0gYWRhcHRlckNvbXBpbGUob3B0aW9ucy5hZGFwdGVyKTtcblx0cmV0dXJuICh0eXBlb2YgcXVlcnkgPT09IFwiZnVuY3Rpb25cIiA/IHF1ZXJ5IDogY29tcGlsZShxdWVyeSwgb3B0aW9ucykpKGVsZW0pO1xufVxuXG4vKlxuXHR0aGUgZXhwb3J0ZWQgaW50ZXJmYWNlXG4qL1xuZnVuY3Rpb24gQ1NTc2VsZWN0KHF1ZXJ5LCBlbGVtcywgb3B0aW9ucyl7XG5cdHJldHVybiBzZWxlY3RBbGwocXVlcnksIGVsZW1zLCBvcHRpb25zKTtcbn1cblxuQ1NTc2VsZWN0LmNvbXBpbGUgPSBkZWZhdWx0Q29tcGlsZTtcbkNTU3NlbGVjdC5maWx0ZXJzID0gZGVmYXVsdENvbXBpbGUuUHNldWRvcy5maWx0ZXJzO1xuQ1NTc2VsZWN0LnBzZXVkb3MgPSBkZWZhdWx0Q29tcGlsZS5Qc2V1ZG9zLnBzZXVkb3M7XG5cbkNTU3NlbGVjdC5zZWxlY3RBbGwgPSBzZWxlY3RBbGw7XG5DU1NzZWxlY3Quc2VsZWN0T25lID0gc2VsZWN0T25lO1xuXG5DU1NzZWxlY3QuaXMgPSBpcztcblxuLy9sZWdhY3kgbWV0aG9kcyAobWlnaHQgYmUgcmVtb3ZlZClcbkNTU3NlbGVjdC5wYXJzZSA9IGRlZmF1bHRDb21waWxlO1xuQ1NTc2VsZWN0Lml0ZXJhdGUgPSBzZWxlY3RBbGw7XG5cbi8vaG9va3NcbkNTU3NlbGVjdC5fY29tcGlsZVVuc2FmZSA9IGRlZmF1bHRDb21waWxlLmNvbXBpbGVVbnNhZmU7XG5DU1NzZWxlY3QuX2NvbXBpbGVUb2tlbiA9IGRlZmF1bHRDb21waWxlLmNvbXBpbGVUb2tlbjtcblxuXG4vKioqLyB9KSxcbi8qIDI1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBEb21VdGlscyA9IG1vZHVsZS5leHBvcnRzO1xuXG5bXG5cdF9fd2VicGFja19yZXF1aXJlX18oMjYpLFxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KSxcblx0X193ZWJwYWNrX3JlcXVpcmVfXygzNiksXG5cdF9fd2VicGFja19yZXF1aXJlX18oMzcpLFxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KSxcblx0X193ZWJwYWNrX3JlcXVpcmVfXygzOSlcbl0uZm9yRWFjaChmdW5jdGlvbihleHQpe1xuXHRPYmplY3Qua2V5cyhleHQpLmZvckVhY2goZnVuY3Rpb24oa2V5KXtcblx0XHREb21VdGlsc1trZXldID0gZXh0W2tleV0uYmluZChEb21VdGlscyk7XG5cdH0pO1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgRWxlbWVudFR5cGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpLFxuICAgIGdldE91dGVySFRNTCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpLFxuICAgIGlzVGFnID0gRWxlbWVudFR5cGUuaXNUYWc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRnZXRJbm5lckhUTUw6IGdldElubmVySFRNTCxcblx0Z2V0T3V0ZXJIVE1MOiBnZXRPdXRlckhUTUwsXG5cdGdldFRleHQ6IGdldFRleHRcbn07XG5cbmZ1bmN0aW9uIGdldElubmVySFRNTChlbGVtLCBvcHRzKXtcblx0cmV0dXJuIGVsZW0uY2hpbGRyZW4gPyBlbGVtLmNoaWxkcmVuLm1hcChmdW5jdGlvbihlbGVtKXtcblx0XHRyZXR1cm4gZ2V0T3V0ZXJIVE1MKGVsZW0sIG9wdHMpO1xuXHR9KS5qb2luKFwiXCIpIDogXCJcIjtcbn1cblxuZnVuY3Rpb24gZ2V0VGV4dChlbGVtKXtcblx0aWYoQXJyYXkuaXNBcnJheShlbGVtKSkgcmV0dXJuIGVsZW0ubWFwKGdldFRleHQpLmpvaW4oXCJcIik7XG5cdGlmKGlzVGFnKGVsZW0pIHx8IGVsZW0udHlwZSA9PT0gRWxlbWVudFR5cGUuQ0RBVEEpIHJldHVybiBnZXRUZXh0KGVsZW0uY2hpbGRyZW4pO1xuXHRpZihlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLlRleHQpIHJldHVybiBlbGVtLmRhdGE7XG5cdHJldHVybiBcIlwiO1xufVxuXG5cbi8qKiovIH0pLFxuLyogMjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLypcbiAgTW9kdWxlIGRlcGVuZGVuY2llc1xuKi9cbnZhciBFbGVtZW50VHlwZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpO1xudmFyIGVudGl0aWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XG5cbi8qXG4gIEJvb2xlYW4gQXR0cmlidXRlc1xuKi9cbnZhciBib29sZWFuQXR0cmlidXRlcyA9IHtcbiAgX19wcm90b19fOiBudWxsLFxuICBhbGxvd2Z1bGxzY3JlZW46IHRydWUsXG4gIGFzeW5jOiB0cnVlLFxuICBhdXRvZm9jdXM6IHRydWUsXG4gIGF1dG9wbGF5OiB0cnVlLFxuICBjaGVja2VkOiB0cnVlLFxuICBjb250cm9sczogdHJ1ZSxcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgZGVmZXI6IHRydWUsXG4gIGRpc2FibGVkOiB0cnVlLFxuICBoaWRkZW46IHRydWUsXG4gIGlzbWFwOiB0cnVlLFxuICBsb29wOiB0cnVlLFxuICBtdWx0aXBsZTogdHJ1ZSxcbiAgbXV0ZWQ6IHRydWUsXG4gIG9wZW46IHRydWUsXG4gIHJlYWRvbmx5OiB0cnVlLFxuICByZXF1aXJlZDogdHJ1ZSxcbiAgcmV2ZXJzZWQ6IHRydWUsXG4gIHNjb3BlZDogdHJ1ZSxcbiAgc2VhbWxlc3M6IHRydWUsXG4gIHNlbGVjdGVkOiB0cnVlLFxuICB0eXBlbXVzdG1hdGNoOiB0cnVlXG59O1xuXG52YXIgdW5lbmNvZGVkRWxlbWVudHMgPSB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgc3R5bGU6IHRydWUsXG4gIHNjcmlwdDogdHJ1ZSxcbiAgeG1wOiB0cnVlLFxuICBpZnJhbWU6IHRydWUsXG4gIG5vZW1iZWQ6IHRydWUsXG4gIG5vZnJhbWVzOiB0cnVlLFxuICBwbGFpbnRleHQ6IHRydWUsXG4gIG5vc2NyaXB0OiB0cnVlXG59O1xuXG4vKlxuICBGb3JtYXQgYXR0cmlidXRlc1xuKi9cbmZ1bmN0aW9uIGZvcm1hdEF0dHJzKGF0dHJpYnV0ZXMsIG9wdHMpIHtcbiAgaWYgKCFhdHRyaWJ1dGVzKSByZXR1cm47XG5cbiAgdmFyIG91dHB1dCA9ICcnLFxuICAgICAgdmFsdWU7XG5cbiAgLy8gTG9vcCB0aHJvdWdoIHRoZSBhdHRyaWJ1dGVzXG4gIGZvciAodmFyIGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgdmFsdWUgPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgaWYgKG91dHB1dCkge1xuICAgICAgb3V0cHV0ICs9ICcgJztcbiAgICB9XG5cbiAgICBpZiAoIXZhbHVlICYmIGJvb2xlYW5BdHRyaWJ1dGVzW2tleV0pIHtcbiAgICAgIG91dHB1dCArPSBrZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dCArPSBrZXkgKyAnPVwiJyArIChvcHRzLmRlY29kZUVudGl0aWVzID8gZW50aXRpZXMuZW5jb2RlWE1MKHZhbHVlKSA6IHZhbHVlKSArICdcIic7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLypcbiAgU2VsZi1lbmNsb3NpbmcgdGFncyAoc3RvbGVuIGZyb20gbm9kZS1odG1scGFyc2VyKVxuKi9cbnZhciBzaW5nbGVUYWcgPSB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgYXJlYTogdHJ1ZSxcbiAgYmFzZTogdHJ1ZSxcbiAgYmFzZWZvbnQ6IHRydWUsXG4gIGJyOiB0cnVlLFxuICBjb2w6IHRydWUsXG4gIGNvbW1hbmQ6IHRydWUsXG4gIGVtYmVkOiB0cnVlLFxuICBmcmFtZTogdHJ1ZSxcbiAgaHI6IHRydWUsXG4gIGltZzogdHJ1ZSxcbiAgaW5wdXQ6IHRydWUsXG4gIGlzaW5kZXg6IHRydWUsXG4gIGtleWdlbjogdHJ1ZSxcbiAgbGluazogdHJ1ZSxcbiAgbWV0YTogdHJ1ZSxcbiAgcGFyYW06IHRydWUsXG4gIHNvdXJjZTogdHJ1ZSxcbiAgdHJhY2s6IHRydWUsXG4gIHdicjogdHJ1ZSxcbn07XG5cblxudmFyIHJlbmRlciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZG9tLCBvcHRzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShkb20pICYmICFkb20uY2hlZXJpbykgZG9tID0gW2RvbV07XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gIHZhciBvdXRwdXQgPSAnJztcblxuICBmb3IodmFyIGkgPSAwOyBpIDwgZG9tLmxlbmd0aDsgaSsrKXtcbiAgICB2YXIgZWxlbSA9IGRvbVtpXTtcblxuICAgIGlmIChlbGVtLnR5cGUgPT09ICdyb290JylcbiAgICAgIG91dHB1dCArPSByZW5kZXIoZWxlbS5jaGlsZHJlbiwgb3B0cyk7XG4gICAgZWxzZSBpZiAoRWxlbWVudFR5cGUuaXNUYWcoZWxlbSkpXG4gICAgICBvdXRwdXQgKz0gcmVuZGVyVGFnKGVsZW0sIG9wdHMpO1xuICAgIGVsc2UgaWYgKGVsZW0udHlwZSA9PT0gRWxlbWVudFR5cGUuRGlyZWN0aXZlKVxuICAgICAgb3V0cHV0ICs9IHJlbmRlckRpcmVjdGl2ZShlbGVtKTtcbiAgICBlbHNlIGlmIChlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLkNvbW1lbnQpXG4gICAgICBvdXRwdXQgKz0gcmVuZGVyQ29tbWVudChlbGVtKTtcbiAgICBlbHNlIGlmIChlbGVtLnR5cGUgPT09IEVsZW1lbnRUeXBlLkNEQVRBKVxuICAgICAgb3V0cHV0ICs9IHJlbmRlckNkYXRhKGVsZW0pO1xuICAgIGVsc2VcbiAgICAgIG91dHB1dCArPSByZW5kZXJUZXh0KGVsZW0sIG9wdHMpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbmZ1bmN0aW9uIHJlbmRlclRhZyhlbGVtLCBvcHRzKSB7XG4gIC8vIEhhbmRsZSBTVkdcbiAgaWYgKGVsZW0ubmFtZSA9PT0gXCJzdmdcIikgb3B0cyA9IHtkZWNvZGVFbnRpdGllczogb3B0cy5kZWNvZGVFbnRpdGllcywgeG1sTW9kZTogdHJ1ZX07XG5cbiAgdmFyIHRhZyA9ICc8JyArIGVsZW0ubmFtZSxcbiAgICAgIGF0dHJpYnMgPSBmb3JtYXRBdHRycyhlbGVtLmF0dHJpYnMsIG9wdHMpO1xuXG4gIGlmIChhdHRyaWJzKSB7XG4gICAgdGFnICs9ICcgJyArIGF0dHJpYnM7XG4gIH1cblxuICBpZiAoXG4gICAgb3B0cy54bWxNb2RlXG4gICAgJiYgKCFlbGVtLmNoaWxkcmVuIHx8IGVsZW0uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICApIHtcbiAgICB0YWcgKz0gJy8+JztcbiAgfSBlbHNlIHtcbiAgICB0YWcgKz0gJz4nO1xuICAgIGlmIChlbGVtLmNoaWxkcmVuKSB7XG4gICAgICB0YWcgKz0gcmVuZGVyKGVsZW0uY2hpbGRyZW4sIG9wdHMpO1xuICAgIH1cblxuICAgIGlmICghc2luZ2xlVGFnW2VsZW0ubmFtZV0gfHwgb3B0cy54bWxNb2RlKSB7XG4gICAgICB0YWcgKz0gJzwvJyArIGVsZW0ubmFtZSArICc+JztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFnO1xufVxuXG5mdW5jdGlvbiByZW5kZXJEaXJlY3RpdmUoZWxlbSkge1xuICByZXR1cm4gJzwnICsgZWxlbS5kYXRhICsgJz4nO1xufVxuXG5mdW5jdGlvbiByZW5kZXJUZXh0KGVsZW0sIG9wdHMpIHtcbiAgdmFyIGRhdGEgPSBlbGVtLmRhdGEgfHwgJyc7XG5cbiAgLy8gaWYgZW50aXRpZXMgd2VyZW4ndCBkZWNvZGVkLCBubyBuZWVkIHRvIGVuY29kZSB0aGVtIGJhY2tcbiAgaWYgKG9wdHMuZGVjb2RlRW50aXRpZXMgJiYgIShlbGVtLnBhcmVudCAmJiBlbGVtLnBhcmVudC5uYW1lIGluIHVuZW5jb2RlZEVsZW1lbnRzKSkge1xuICAgIGRhdGEgPSBlbnRpdGllcy5lbmNvZGVYTUwoZGF0YSk7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ2RhdGEoZWxlbSkge1xuICByZXR1cm4gJzwhW0NEQVRBWycgKyBlbGVtLmNoaWxkcmVuWzBdLmRhdGEgKyAnXV0+Jztcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ29tbWVudChlbGVtKSB7XG4gIHJldHVybiAnPCEtLScgKyBlbGVtLmRhdGEgKyAnLS0+Jztcbn1cblxuXG4vKioqLyB9KSxcbi8qIDI4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vVHlwZXMgb2YgZWxlbWVudHMgZm91bmQgaW4gdGhlIERPTVxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdFRleHQ6IFwidGV4dFwiLCAvL1RleHRcblx0RGlyZWN0aXZlOiBcImRpcmVjdGl2ZVwiLCAvLzw/IC4uLiA/PlxuXHRDb21tZW50OiBcImNvbW1lbnRcIiwgLy88IS0tIC4uLiAtLT5cblx0U2NyaXB0OiBcInNjcmlwdFwiLCAvLzxzY3JpcHQ+IHRhZ3Ncblx0U3R5bGU6IFwic3R5bGVcIiwgLy88c3R5bGU+IHRhZ3Ncblx0VGFnOiBcInRhZ1wiLCAvL0FueSB0YWdcblx0Q0RBVEE6IFwiY2RhdGFcIiwgLy88IVtDREFUQVsgLi4uIF1dPlxuXG5cdGlzVGFnOiBmdW5jdGlvbihlbGVtKXtcblx0XHRyZXR1cm4gZWxlbS50eXBlID09PSBcInRhZ1wiIHx8IGVsZW0udHlwZSA9PT0gXCJzY3JpcHRcIiB8fCBlbGVtLnR5cGUgPT09IFwic3R5bGVcIjtcblx0fVxufTtcblxuLyoqKi8gfSksXG4vKiAyOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZW5jb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCksXG4gICAgZGVjb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG5cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24oZGF0YSwgbGV2ZWwpe1xuXHRyZXR1cm4gKCFsZXZlbCB8fCBsZXZlbCA8PSAwID8gZGVjb2RlLlhNTCA6IGRlY29kZS5IVE1MKShkYXRhKTtcbn07XG5cbmV4cG9ydHMuZGVjb2RlU3RyaWN0ID0gZnVuY3Rpb24oZGF0YSwgbGV2ZWwpe1xuXHRyZXR1cm4gKCFsZXZlbCB8fCBsZXZlbCA8PSAwID8gZGVjb2RlLlhNTCA6IGRlY29kZS5IVE1MU3RyaWN0KShkYXRhKTtcbn07XG5cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24oZGF0YSwgbGV2ZWwpe1xuXHRyZXR1cm4gKCFsZXZlbCB8fCBsZXZlbCA8PSAwID8gZW5jb2RlLlhNTCA6IGVuY29kZS5IVE1MKShkYXRhKTtcbn07XG5cbmV4cG9ydHMuZW5jb2RlWE1MID0gZW5jb2RlLlhNTDtcblxuZXhwb3J0cy5lbmNvZGVIVE1MNCA9XG5leHBvcnRzLmVuY29kZUhUTUw1ID1cbmV4cG9ydHMuZW5jb2RlSFRNTCAgPSBlbmNvZGUuSFRNTDtcblxuZXhwb3J0cy5kZWNvZGVYTUwgPVxuZXhwb3J0cy5kZWNvZGVYTUxTdHJpY3QgPSBkZWNvZGUuWE1MO1xuXG5leHBvcnRzLmRlY29kZUhUTUw0ID1cbmV4cG9ydHMuZGVjb2RlSFRNTDUgPVxuZXhwb3J0cy5kZWNvZGVIVE1MID0gZGVjb2RlLkhUTUw7XG5cbmV4cG9ydHMuZGVjb2RlSFRNTDRTdHJpY3QgPVxuZXhwb3J0cy5kZWNvZGVIVE1MNVN0cmljdCA9XG5leHBvcnRzLmRlY29kZUhUTUxTdHJpY3QgPSBkZWNvZGUuSFRNTFN0cmljdDtcblxuZXhwb3J0cy5lc2NhcGUgPSBlbmNvZGUuZXNjYXBlO1xuXG5cbi8qKiovIH0pLFxuLyogMzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGludmVyc2VYTUwgPSBnZXRJbnZlcnNlT2JqKF9fd2VicGFja19yZXF1aXJlX18oMTMpKSxcbiAgICB4bWxSZXBsYWNlciA9IGdldEludmVyc2VSZXBsYWNlcihpbnZlcnNlWE1MKTtcblxuZXhwb3J0cy5YTUwgPSBnZXRJbnZlcnNlKGludmVyc2VYTUwsIHhtbFJlcGxhY2VyKTtcblxudmFyIGludmVyc2VIVE1MID0gZ2V0SW52ZXJzZU9iaihfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSksXG4gICAgaHRtbFJlcGxhY2VyID0gZ2V0SW52ZXJzZVJlcGxhY2VyKGludmVyc2VIVE1MKTtcblxuZXhwb3J0cy5IVE1MID0gZ2V0SW52ZXJzZShpbnZlcnNlSFRNTCwgaHRtbFJlcGxhY2VyKTtcblxuZnVuY3Rpb24gZ2V0SW52ZXJzZU9iaihvYmope1xuXHRyZXR1cm4gT2JqZWN0LmtleXMob2JqKS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uKGludmVyc2UsIG5hbWUpe1xuXHRcdGludmVyc2Vbb2JqW25hbWVdXSA9IFwiJlwiICsgbmFtZSArIFwiO1wiO1xuXHRcdHJldHVybiBpbnZlcnNlO1xuXHR9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGdldEludmVyc2VSZXBsYWNlcihpbnZlcnNlKXtcblx0dmFyIHNpbmdsZSA9IFtdLFxuXHQgICAgbXVsdGlwbGUgPSBbXTtcblxuXHRPYmplY3Qua2V5cyhpbnZlcnNlKS5mb3JFYWNoKGZ1bmN0aW9uKGspe1xuXHRcdGlmKGsubGVuZ3RoID09PSAxKXtcblx0XHRcdHNpbmdsZS5wdXNoKFwiXFxcXFwiICsgayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG11bHRpcGxlLnB1c2goayk7XG5cdFx0fVxuXHR9KTtcblxuXHQvL1RPRE8gYWRkIHJhbmdlc1xuXHRtdWx0aXBsZS51bnNoaWZ0KFwiW1wiICsgc2luZ2xlLmpvaW4oXCJcIikgKyBcIl1cIik7XG5cblx0cmV0dXJuIG5ldyBSZWdFeHAobXVsdGlwbGUuam9pbihcInxcIiksIFwiZ1wiKTtcbn1cblxudmFyIHJlX25vbkFTQ0lJID0gL1teXFwwLVxceDdGXS9nLFxuICAgIHJlX2FzdHJhbFN5bWJvbHMgPSAvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nO1xuXG5mdW5jdGlvbiBzaW5nbGVDaGFyUmVwbGFjZXIoYyl7XG5cdHJldHVybiBcIiYjeFwiICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCI7XCI7XG59XG5cbmZ1bmN0aW9uIGFzdHJhbFJlcGxhY2VyKGMpe1xuXHQvLyBodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuXHR2YXIgaGlnaCA9IGMuY2hhckNvZGVBdCgwKTtcblx0dmFyIGxvdyAgPSBjLmNoYXJDb2RlQXQoMSk7XG5cdHZhciBjb2RlUG9pbnQgPSAoaGlnaCAtIDB4RDgwMCkgKiAweDQwMCArIGxvdyAtIDB4REMwMCArIDB4MTAwMDA7XG5cdHJldHVybiBcIiYjeFwiICsgY29kZVBvaW50LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgXCI7XCI7XG59XG5cbmZ1bmN0aW9uIGdldEludmVyc2UoaW52ZXJzZSwgcmUpe1xuXHRmdW5jdGlvbiBmdW5jKG5hbWUpe1xuXHRcdHJldHVybiBpbnZlcnNlW25hbWVdO1xuXHR9XG5cblx0cmV0dXJuIGZ1bmN0aW9uKGRhdGEpe1xuXHRcdHJldHVybiBkYXRhXG5cdFx0XHRcdC5yZXBsYWNlKHJlLCBmdW5jKVxuXHRcdFx0XHQucmVwbGFjZShyZV9hc3RyYWxTeW1ib2xzLCBhc3RyYWxSZXBsYWNlcilcblx0XHRcdFx0LnJlcGxhY2UocmVfbm9uQVNDSUksIHNpbmdsZUNoYXJSZXBsYWNlcik7XG5cdH07XG59XG5cbnZhciByZV94bWxDaGFycyA9IGdldEludmVyc2VSZXBsYWNlcihpbnZlcnNlWE1MKTtcblxuZnVuY3Rpb24gZXNjYXBlWE1MKGRhdGEpe1xuXHRyZXR1cm4gZGF0YVxuXHRcdFx0LnJlcGxhY2UocmVfeG1sQ2hhcnMsIHNpbmdsZUNoYXJSZXBsYWNlcilcblx0XHRcdC5yZXBsYWNlKHJlX2FzdHJhbFN5bWJvbHMsIGFzdHJhbFJlcGxhY2VyKVxuXHRcdFx0LnJlcGxhY2UocmVfbm9uQVNDSUksIHNpbmdsZUNoYXJSZXBsYWNlcik7XG59XG5cbmV4cG9ydHMuZXNjYXBlID0gZXNjYXBlWE1MO1xuXG5cbi8qKiovIH0pLFxuLyogMzEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGVudGl0eU1hcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpLFxuICAgIGxlZ2FjeU1hcCA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpLFxuICAgIHhtbE1hcCAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpLFxuICAgIGRlY29kZUNvZGVQb2ludCA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xuXG52YXIgZGVjb2RlWE1MU3RyaWN0ICA9IGdldFN0cmljdERlY29kZXIoeG1sTWFwKSxcbiAgICBkZWNvZGVIVE1MU3RyaWN0ID0gZ2V0U3RyaWN0RGVjb2RlcihlbnRpdHlNYXApO1xuXG5mdW5jdGlvbiBnZXRTdHJpY3REZWNvZGVyKG1hcCl7XG5cdHZhciBrZXlzID0gT2JqZWN0LmtleXMobWFwKS5qb2luKFwifFwiKSxcblx0ICAgIHJlcGxhY2UgPSBnZXRSZXBsYWNlcihtYXApO1xuXG5cdGtleXMgKz0gXCJ8I1t4WF1bXFxcXGRhLWZBLUZdK3wjXFxcXGQrXCI7XG5cblx0dmFyIHJlID0gbmV3IFJlZ0V4cChcIiYoPzpcIiArIGtleXMgKyBcIik7XCIsIFwiZ1wiKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24oc3RyKXtcblx0XHRyZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZShyZSwgcmVwbGFjZSk7XG5cdH07XG59XG5cbnZhciBkZWNvZGVIVE1MID0gKGZ1bmN0aW9uKCl7XG5cdHZhciBsZWdhY3kgPSBPYmplY3Qua2V5cyhsZWdhY3lNYXApXG5cdFx0LnNvcnQoc29ydGVyKTtcblxuXHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eU1hcClcblx0XHQuc29ydChzb3J0ZXIpO1xuXG5cdGZvcih2YXIgaSA9IDAsIGogPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG5cdFx0aWYobGVnYWN5W2pdID09PSBrZXlzW2ldKXtcblx0XHRcdGtleXNbaV0gKz0gXCI7P1wiO1xuXHRcdFx0aisrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRrZXlzW2ldICs9IFwiO1wiO1xuXHRcdH1cblx0fVxuXG5cdHZhciByZSA9IG5ldyBSZWdFeHAoXCImKD86XCIgKyBrZXlzLmpvaW4oXCJ8XCIpICsgXCJ8I1t4WF1bXFxcXGRhLWZBLUZdKzs/fCNcXFxcZCs7PylcIiwgXCJnXCIpLFxuXHQgICAgcmVwbGFjZSA9IGdldFJlcGxhY2VyKGVudGl0eU1hcCk7XG5cblx0ZnVuY3Rpb24gcmVwbGFjZXIoc3RyKXtcblx0XHRpZihzdHIuc3Vic3RyKC0xKSAhPT0gXCI7XCIpIHN0ciArPSBcIjtcIjtcblx0XHRyZXR1cm4gcmVwbGFjZShzdHIpO1xuXHR9XG5cblx0Ly9UT0RPIGNvbnNpZGVyIGNyZWF0aW5nIGEgbWVyZ2VkIG1hcFxuXHRyZXR1cm4gZnVuY3Rpb24oc3RyKXtcblx0XHRyZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZShyZSwgcmVwbGFjZXIpO1xuXHR9O1xufSgpKTtcblxuZnVuY3Rpb24gc29ydGVyKGEsIGIpe1xuXHRyZXR1cm4gYSA8IGIgPyAxIDogLTE7XG59XG5cbmZ1bmN0aW9uIGdldFJlcGxhY2VyKG1hcCl7XG5cdHJldHVybiBmdW5jdGlvbiByZXBsYWNlKHN0cil7XG5cdFx0aWYoc3RyLmNoYXJBdCgxKSA9PT0gXCIjXCIpe1xuXHRcdFx0aWYoc3RyLmNoYXJBdCgyKSA9PT0gXCJYXCIgfHwgc3RyLmNoYXJBdCgyKSA9PT0gXCJ4XCIpe1xuXHRcdFx0XHRyZXR1cm4gZGVjb2RlQ29kZVBvaW50KHBhcnNlSW50KHN0ci5zdWJzdHIoMyksIDE2KSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGVjb2RlQ29kZVBvaW50KHBhcnNlSW50KHN0ci5zdWJzdHIoMiksIDEwKSk7XG5cdFx0fVxuXHRcdHJldHVybiBtYXBbc3RyLnNsaWNlKDEsIC0xKV07XG5cdH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRYTUw6IGRlY29kZVhNTFN0cmljdCxcblx0SFRNTDogZGVjb2RlSFRNTCxcblx0SFRNTFN0cmljdDogZGVjb2RlSFRNTFN0cmljdFxufTtcblxuLyoqKi8gfSksXG4vKiAzMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcIkFhY3V0ZVwiOlwiw4FcIixcImFhY3V0ZVwiOlwiw6FcIixcIkFjaXJjXCI6XCLDglwiLFwiYWNpcmNcIjpcIsOiXCIsXCJhY3V0ZVwiOlwiwrRcIixcIkFFbGlnXCI6XCLDhlwiLFwiYWVsaWdcIjpcIsOmXCIsXCJBZ3JhdmVcIjpcIsOAXCIsXCJhZ3JhdmVcIjpcIsOgXCIsXCJhbXBcIjpcIiZcIixcIkFNUFwiOlwiJlwiLFwiQXJpbmdcIjpcIsOFXCIsXCJhcmluZ1wiOlwiw6VcIixcIkF0aWxkZVwiOlwiw4NcIixcImF0aWxkZVwiOlwiw6NcIixcIkF1bWxcIjpcIsOEXCIsXCJhdW1sXCI6XCLDpFwiLFwiYnJ2YmFyXCI6XCLCplwiLFwiQ2NlZGlsXCI6XCLDh1wiLFwiY2NlZGlsXCI6XCLDp1wiLFwiY2VkaWxcIjpcIsK4XCIsXCJjZW50XCI6XCLColwiLFwiY29weVwiOlwiwqlcIixcIkNPUFlcIjpcIsKpXCIsXCJjdXJyZW5cIjpcIsKkXCIsXCJkZWdcIjpcIsKwXCIsXCJkaXZpZGVcIjpcIsO3XCIsXCJFYWN1dGVcIjpcIsOJXCIsXCJlYWN1dGVcIjpcIsOpXCIsXCJFY2lyY1wiOlwiw4pcIixcImVjaXJjXCI6XCLDqlwiLFwiRWdyYXZlXCI6XCLDiFwiLFwiZWdyYXZlXCI6XCLDqFwiLFwiRVRIXCI6XCLDkFwiLFwiZXRoXCI6XCLDsFwiLFwiRXVtbFwiOlwiw4tcIixcImV1bWxcIjpcIsOrXCIsXCJmcmFjMTJcIjpcIsK9XCIsXCJmcmFjMTRcIjpcIsK8XCIsXCJmcmFjMzRcIjpcIsK+XCIsXCJndFwiOlwiPlwiLFwiR1RcIjpcIj5cIixcIklhY3V0ZVwiOlwiw41cIixcImlhY3V0ZVwiOlwiw61cIixcIkljaXJjXCI6XCLDjlwiLFwiaWNpcmNcIjpcIsOuXCIsXCJpZXhjbFwiOlwiwqFcIixcIklncmF2ZVwiOlwiw4xcIixcImlncmF2ZVwiOlwiw6xcIixcImlxdWVzdFwiOlwiwr9cIixcIkl1bWxcIjpcIsOPXCIsXCJpdW1sXCI6XCLDr1wiLFwibGFxdW9cIjpcIsKrXCIsXCJsdFwiOlwiPFwiLFwiTFRcIjpcIjxcIixcIm1hY3JcIjpcIsKvXCIsXCJtaWNyb1wiOlwiwrVcIixcIm1pZGRvdFwiOlwiwrdcIixcIm5ic3BcIjpcIsKgXCIsXCJub3RcIjpcIsKsXCIsXCJOdGlsZGVcIjpcIsORXCIsXCJudGlsZGVcIjpcIsOxXCIsXCJPYWN1dGVcIjpcIsOTXCIsXCJvYWN1dGVcIjpcIsOzXCIsXCJPY2lyY1wiOlwiw5RcIixcIm9jaXJjXCI6XCLDtFwiLFwiT2dyYXZlXCI6XCLDklwiLFwib2dyYXZlXCI6XCLDslwiLFwib3JkZlwiOlwiwqpcIixcIm9yZG1cIjpcIsK6XCIsXCJPc2xhc2hcIjpcIsOYXCIsXCJvc2xhc2hcIjpcIsO4XCIsXCJPdGlsZGVcIjpcIsOVXCIsXCJvdGlsZGVcIjpcIsO1XCIsXCJPdW1sXCI6XCLDllwiLFwib3VtbFwiOlwiw7ZcIixcInBhcmFcIjpcIsK2XCIsXCJwbHVzbW5cIjpcIsKxXCIsXCJwb3VuZFwiOlwiwqNcIixcInF1b3RcIjpcIlxcXCJcIixcIlFVT1RcIjpcIlxcXCJcIixcInJhcXVvXCI6XCLCu1wiLFwicmVnXCI6XCLCrlwiLFwiUkVHXCI6XCLCrlwiLFwic2VjdFwiOlwiwqdcIixcInNoeVwiOlwiwq1cIixcInN1cDFcIjpcIsK5XCIsXCJzdXAyXCI6XCLCslwiLFwic3VwM1wiOlwiwrNcIixcInN6bGlnXCI6XCLDn1wiLFwiVEhPUk5cIjpcIsOeXCIsXCJ0aG9yblwiOlwiw75cIixcInRpbWVzXCI6XCLDl1wiLFwiVWFjdXRlXCI6XCLDmlwiLFwidWFjdXRlXCI6XCLDulwiLFwiVWNpcmNcIjpcIsObXCIsXCJ1Y2lyY1wiOlwiw7tcIixcIlVncmF2ZVwiOlwiw5lcIixcInVncmF2ZVwiOlwiw7lcIixcInVtbFwiOlwiwqhcIixcIlV1bWxcIjpcIsOcXCIsXCJ1dW1sXCI6XCLDvFwiLFwiWWFjdXRlXCI6XCLDnVwiLFwieWFjdXRlXCI6XCLDvVwiLFwieWVuXCI6XCLCpVwiLFwieXVtbFwiOlwiw79cIn1cblxuLyoqKi8gfSksXG4vKiAzMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZGVjb2RlTWFwID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVjb2RlQ29kZVBvaW50O1xuXG4vLyBtb2RpZmllZCB2ZXJzaW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL2hlL2Jsb2IvbWFzdGVyL3NyYy9oZS5qcyNMOTQtTDExOVxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50KGNvZGVQb2ludCl7XG5cblx0aWYoKGNvZGVQb2ludCA+PSAweEQ4MDAgJiYgY29kZVBvaW50IDw9IDB4REZGRikgfHwgY29kZVBvaW50ID4gMHgxMEZGRkYpe1xuXHRcdHJldHVybiBcIlxcdUZGRkRcIjtcblx0fVxuXG5cdGlmKGNvZGVQb2ludCBpbiBkZWNvZGVNYXApe1xuXHRcdGNvZGVQb2ludCA9IGRlY29kZU1hcFtjb2RlUG9pbnRdO1xuXHR9XG5cblx0dmFyIG91dHB1dCA9IFwiXCI7XG5cblx0aWYoY29kZVBvaW50ID4gMHhGRkZGKXtcblx0XHRjb2RlUG9pbnQgLT0gMHgxMDAwMDtcblx0XHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApO1xuXHRcdGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGO1xuXHR9XG5cblx0b3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KTtcblx0cmV0dXJuIG91dHB1dDtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDM0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0ge1wiMFwiOjY1NTMzLFwiMTI4XCI6ODM2NCxcIjEzMFwiOjgyMTgsXCIxMzFcIjo0MDIsXCIxMzJcIjo4MjIyLFwiMTMzXCI6ODIzMCxcIjEzNFwiOjgyMjQsXCIxMzVcIjo4MjI1LFwiMTM2XCI6NzEwLFwiMTM3XCI6ODI0MCxcIjEzOFwiOjM1MixcIjEzOVwiOjgyNDksXCIxNDBcIjozMzgsXCIxNDJcIjozODEsXCIxNDVcIjo4MjE2LFwiMTQ2XCI6ODIxNyxcIjE0N1wiOjgyMjAsXCIxNDhcIjo4MjIxLFwiMTQ5XCI6ODIyNixcIjE1MFwiOjgyMTEsXCIxNTFcIjo4MjEyLFwiMTUyXCI6NzMyLFwiMTUzXCI6ODQ4MixcIjE1NFwiOjM1MyxcIjE1NVwiOjgyNTAsXCIxNTZcIjozMzksXCIxNThcIjozODIsXCIxNTlcIjozNzZ9XG5cbi8qKiovIH0pLFxuLyogMzUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIGdldENoaWxkcmVuID0gZXhwb3J0cy5nZXRDaGlsZHJlbiA9IGZ1bmN0aW9uKGVsZW0pe1xuXHRyZXR1cm4gZWxlbS5jaGlsZHJlbjtcbn07XG5cbnZhciBnZXRQYXJlbnQgPSBleHBvcnRzLmdldFBhcmVudCA9IGZ1bmN0aW9uKGVsZW0pe1xuXHRyZXR1cm4gZWxlbS5wYXJlbnQ7XG59O1xuXG5leHBvcnRzLmdldFNpYmxpbmdzID0gZnVuY3Rpb24oZWxlbSl7XG5cdHZhciBwYXJlbnQgPSBnZXRQYXJlbnQoZWxlbSk7XG5cdHJldHVybiBwYXJlbnQgPyBnZXRDaGlsZHJlbihwYXJlbnQpIDogW2VsZW1dO1xufTtcblxuZXhwb3J0cy5nZXRBdHRyaWJ1dGVWYWx1ZSA9IGZ1bmN0aW9uKGVsZW0sIG5hbWUpe1xuXHRyZXR1cm4gZWxlbS5hdHRyaWJzICYmIGVsZW0uYXR0cmlic1tuYW1lXTtcbn07XG5cbmV4cG9ydHMuaGFzQXR0cmliID0gZnVuY3Rpb24oZWxlbSwgbmFtZSl7XG5cdHJldHVybiAhIWVsZW0uYXR0cmlicyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGVsZW0uYXR0cmlicywgbmFtZSk7XG59O1xuXG5leHBvcnRzLmdldE5hbWUgPSBmdW5jdGlvbihlbGVtKXtcblx0cmV0dXJuIGVsZW0ubmFtZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5leHBvcnRzLnJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtKXtcblx0aWYoZWxlbS5wcmV2KSBlbGVtLnByZXYubmV4dCA9IGVsZW0ubmV4dDtcblx0aWYoZWxlbS5uZXh0KSBlbGVtLm5leHQucHJldiA9IGVsZW0ucHJldjtcblxuXHRpZihlbGVtLnBhcmVudCl7XG5cdFx0dmFyIGNoaWxkcyA9IGVsZW0ucGFyZW50LmNoaWxkcmVuO1xuXHRcdGNoaWxkcy5zcGxpY2UoY2hpbGRzLmxhc3RJbmRleE9mKGVsZW0pLCAxKTtcblx0fVxufTtcblxuZXhwb3J0cy5yZXBsYWNlRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW0sIHJlcGxhY2VtZW50KXtcblx0dmFyIHByZXYgPSByZXBsYWNlbWVudC5wcmV2ID0gZWxlbS5wcmV2O1xuXHRpZihwcmV2KXtcblx0XHRwcmV2Lm5leHQgPSByZXBsYWNlbWVudDtcblx0fVxuXG5cdHZhciBuZXh0ID0gcmVwbGFjZW1lbnQubmV4dCA9IGVsZW0ubmV4dDtcblx0aWYobmV4dCl7XG5cdFx0bmV4dC5wcmV2ID0gcmVwbGFjZW1lbnQ7XG5cdH1cblxuXHR2YXIgcGFyZW50ID0gcmVwbGFjZW1lbnQucGFyZW50ID0gZWxlbS5wYXJlbnQ7XG5cdGlmKHBhcmVudCl7XG5cdFx0dmFyIGNoaWxkcyA9IHBhcmVudC5jaGlsZHJlbjtcblx0XHRjaGlsZHNbY2hpbGRzLmxhc3RJbmRleE9mKGVsZW0pXSA9IHJlcGxhY2VtZW50O1xuXHR9XG59O1xuXG5leHBvcnRzLmFwcGVuZENoaWxkID0gZnVuY3Rpb24oZWxlbSwgY2hpbGQpe1xuXHRjaGlsZC5wYXJlbnQgPSBlbGVtO1xuXG5cdGlmKGVsZW0uY2hpbGRyZW4ucHVzaChjaGlsZCkgIT09IDEpe1xuXHRcdHZhciBzaWJsaW5nID0gZWxlbS5jaGlsZHJlbltlbGVtLmNoaWxkcmVuLmxlbmd0aCAtIDJdO1xuXHRcdHNpYmxpbmcubmV4dCA9IGNoaWxkO1xuXHRcdGNoaWxkLnByZXYgPSBzaWJsaW5nO1xuXHRcdGNoaWxkLm5leHQgPSBudWxsO1xuXHR9XG59O1xuXG5leHBvcnRzLmFwcGVuZCA9IGZ1bmN0aW9uKGVsZW0sIG5leHQpe1xuXHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnQsXG5cdFx0Y3Vyck5leHQgPSBlbGVtLm5leHQ7XG5cblx0bmV4dC5uZXh0ID0gY3Vyck5leHQ7XG5cdG5leHQucHJldiA9IGVsZW07XG5cdGVsZW0ubmV4dCA9IG5leHQ7XG5cdG5leHQucGFyZW50ID0gcGFyZW50O1xuXG5cdGlmKGN1cnJOZXh0KXtcblx0XHRjdXJyTmV4dC5wcmV2ID0gbmV4dDtcblx0XHRpZihwYXJlbnQpe1xuXHRcdFx0dmFyIGNoaWxkcyA9IHBhcmVudC5jaGlsZHJlbjtcblx0XHRcdGNoaWxkcy5zcGxpY2UoY2hpbGRzLmxhc3RJbmRleE9mKGN1cnJOZXh0KSwgMCwgbmV4dCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYocGFyZW50KXtcblx0XHRwYXJlbnQuY2hpbGRyZW4ucHVzaChuZXh0KTtcblx0fVxufTtcblxuZXhwb3J0cy5wcmVwZW5kID0gZnVuY3Rpb24oZWxlbSwgcHJldil7XG5cdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudDtcblx0aWYocGFyZW50KXtcblx0XHR2YXIgY2hpbGRzID0gcGFyZW50LmNoaWxkcmVuO1xuXHRcdGNoaWxkcy5zcGxpY2UoY2hpbGRzLmxhc3RJbmRleE9mKGVsZW0pLCAwLCBwcmV2KTtcblx0fVxuXG5cdGlmKGVsZW0ucHJldil7XG5cdFx0ZWxlbS5wcmV2Lm5leHQgPSBwcmV2O1xuXHR9XG5cdFxuXHRwcmV2LnBhcmVudCA9IHBhcmVudDtcblx0cHJldi5wcmV2ID0gZWxlbS5wcmV2O1xuXHRwcmV2Lm5leHQgPSBlbGVtO1xuXHRlbGVtLnByZXYgPSBwcmV2O1xufTtcblxuXG5cblxuLyoqKi8gfSksXG4vKiAzNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaXNUYWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpLmlzVGFnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0ZmlsdGVyOiBmaWx0ZXIsXG5cdGZpbmQ6IGZpbmQsXG5cdGZpbmRPbmVDaGlsZDogZmluZE9uZUNoaWxkLFxuXHRmaW5kT25lOiBmaW5kT25lLFxuXHRleGlzdHNPbmU6IGV4aXN0c09uZSxcblx0ZmluZEFsbDogZmluZEFsbFxufTtcblxuZnVuY3Rpb24gZmlsdGVyKHRlc3QsIGVsZW1lbnQsIHJlY3Vyc2UsIGxpbWl0KXtcblx0aWYoIUFycmF5LmlzQXJyYXkoZWxlbWVudCkpIGVsZW1lbnQgPSBbZWxlbWVudF07XG5cblx0aWYodHlwZW9mIGxpbWl0ICE9PSBcIm51bWJlclwiIHx8ICFpc0Zpbml0ZShsaW1pdCkpe1xuXHRcdGxpbWl0ID0gSW5maW5pdHk7XG5cdH1cblx0cmV0dXJuIGZpbmQodGVzdCwgZWxlbWVudCwgcmVjdXJzZSAhPT0gZmFsc2UsIGxpbWl0KTtcbn1cblxuZnVuY3Rpb24gZmluZCh0ZXN0LCBlbGVtcywgcmVjdXJzZSwgbGltaXQpe1xuXHR2YXIgcmVzdWx0ID0gW10sIGNoaWxkcztcblxuXHRmb3IodmFyIGkgPSAwLCBqID0gZWxlbXMubGVuZ3RoOyBpIDwgajsgaSsrKXtcblx0XHRpZih0ZXN0KGVsZW1zW2ldKSl7XG5cdFx0XHRyZXN1bHQucHVzaChlbGVtc1tpXSk7XG5cdFx0XHRpZigtLWxpbWl0IDw9IDApIGJyZWFrO1xuXHRcdH1cblxuXHRcdGNoaWxkcyA9IGVsZW1zW2ldLmNoaWxkcmVuO1xuXHRcdGlmKHJlY3Vyc2UgJiYgY2hpbGRzICYmIGNoaWxkcy5sZW5ndGggPiAwKXtcblx0XHRcdGNoaWxkcyA9IGZpbmQodGVzdCwgY2hpbGRzLCByZWN1cnNlLCBsaW1pdCk7XG5cdFx0XHRyZXN1bHQgPSByZXN1bHQuY29uY2F0KGNoaWxkcyk7XG5cdFx0XHRsaW1pdCAtPSBjaGlsZHMubGVuZ3RoO1xuXHRcdFx0aWYobGltaXQgPD0gMCkgYnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZmluZE9uZUNoaWxkKHRlc3QsIGVsZW1zKXtcblx0Zm9yKHZhciBpID0gMCwgbCA9IGVsZW1zLmxlbmd0aDsgaSA8IGw7IGkrKyl7XG5cdFx0aWYodGVzdChlbGVtc1tpXSkpIHJldHVybiBlbGVtc1tpXTtcblx0fVxuXG5cdHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmaW5kT25lKHRlc3QsIGVsZW1zKXtcblx0dmFyIGVsZW0gPSBudWxsO1xuXG5cdGZvcih2YXIgaSA9IDAsIGwgPSBlbGVtcy5sZW5ndGg7IGkgPCBsICYmICFlbGVtOyBpKyspe1xuXHRcdGlmKCFpc1RhZyhlbGVtc1tpXSkpe1xuXHRcdFx0Y29udGludWU7XG5cdFx0fSBlbHNlIGlmKHRlc3QoZWxlbXNbaV0pKXtcblx0XHRcdGVsZW0gPSBlbGVtc1tpXTtcblx0XHR9IGVsc2UgaWYoZWxlbXNbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG5cdFx0XHRlbGVtID0gZmluZE9uZSh0ZXN0LCBlbGVtc1tpXS5jaGlsZHJlbik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGV4aXN0c09uZSh0ZXN0LCBlbGVtcyl7XG5cdGZvcih2YXIgaSA9IDAsIGwgPSBlbGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspe1xuXHRcdGlmKFxuXHRcdFx0aXNUYWcoZWxlbXNbaV0pICYmIChcblx0XHRcdFx0dGVzdChlbGVtc1tpXSkgfHwgKFxuXHRcdFx0XHRcdGVsZW1zW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHRleGlzdHNPbmUodGVzdCwgZWxlbXNbaV0uY2hpbGRyZW4pXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBmaW5kQWxsKHRlc3QsIGVsZW1zKXtcblx0dmFyIHJlc3VsdCA9IFtdO1xuXHRmb3IodmFyIGkgPSAwLCBqID0gZWxlbXMubGVuZ3RoOyBpIDwgajsgaSsrKXtcblx0XHRpZighaXNUYWcoZWxlbXNbaV0pKSBjb250aW51ZTtcblx0XHRpZih0ZXN0KGVsZW1zW2ldKSkgcmVzdWx0LnB1c2goZWxlbXNbaV0pO1xuXG5cdFx0aWYoZWxlbXNbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG5cdFx0XHRyZXN1bHQgPSByZXN1bHQuY29uY2F0KGZpbmRBbGwodGVzdCwgZWxlbXNbaV0uY2hpbGRyZW4pKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDM4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBFbGVtZW50VHlwZSA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgaXNUYWcgPSBleHBvcnRzLmlzVGFnID0gRWxlbWVudFR5cGUuaXNUYWc7XG5cbmV4cG9ydHMudGVzdEVsZW1lbnQgPSBmdW5jdGlvbihvcHRpb25zLCBlbGVtZW50KXtcblx0Zm9yKHZhciBrZXkgaW4gb3B0aW9ucyl7XG5cdFx0aWYoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSk7XG5cdFx0ZWxzZSBpZihrZXkgPT09IFwidGFnX25hbWVcIil7XG5cdFx0XHRpZighaXNUYWcoZWxlbWVudCkgfHwgIW9wdGlvbnMudGFnX25hbWUoZWxlbWVudC5uYW1lKSl7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYoa2V5ID09PSBcInRhZ190eXBlXCIpe1xuXHRcdFx0aWYoIW9wdGlvbnMudGFnX3R5cGUoZWxlbWVudC50eXBlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZihrZXkgPT09IFwidGFnX2NvbnRhaW5zXCIpe1xuXHRcdFx0aWYoaXNUYWcoZWxlbWVudCkgfHwgIW9wdGlvbnMudGFnX2NvbnRhaW5zKGVsZW1lbnQuZGF0YSkpe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmKCFlbGVtZW50LmF0dHJpYnMgfHwgIW9wdGlvbnNba2V5XShlbGVtZW50LmF0dHJpYnNba2V5XSkpe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBDaGVja3MgPSB7XG5cdHRhZ19uYW1lOiBmdW5jdGlvbihuYW1lKXtcblx0XHRpZih0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiKXtcblx0XHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXsgcmV0dXJuIGlzVGFnKGVsZW0pICYmIG5hbWUoZWxlbS5uYW1lKTsgfTtcblx0XHR9IGVsc2UgaWYobmFtZSA9PT0gXCIqXCIpe1xuXHRcdFx0cmV0dXJuIGlzVGFnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7IHJldHVybiBpc1RhZyhlbGVtKSAmJiBlbGVtLm5hbWUgPT09IG5hbWU7IH07XG5cdFx0fVxuXHR9LFxuXHR0YWdfdHlwZTogZnVuY3Rpb24odHlwZSl7XG5cdFx0aWYodHlwZW9mIHR5cGUgPT09IFwiZnVuY3Rpb25cIil7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7IHJldHVybiB0eXBlKGVsZW0udHlwZSk7IH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXsgcmV0dXJuIGVsZW0udHlwZSA9PT0gdHlwZTsgfTtcblx0XHR9XG5cdH0sXG5cdHRhZ19jb250YWluczogZnVuY3Rpb24oZGF0YSl7XG5cdFx0aWYodHlwZW9mIGRhdGEgPT09IFwiZnVuY3Rpb25cIil7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7IHJldHVybiAhaXNUYWcoZWxlbSkgJiYgZGF0YShlbGVtLmRhdGEpOyB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7IHJldHVybiAhaXNUYWcoZWxlbSkgJiYgZWxlbS5kYXRhID09PSBkYXRhOyB9O1xuXHRcdH1cblx0fVxufTtcblxuZnVuY3Rpb24gZ2V0QXR0cmliQ2hlY2soYXR0cmliLCB2YWx1ZSl7XG5cdGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcblx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7IHJldHVybiBlbGVtLmF0dHJpYnMgJiYgdmFsdWUoZWxlbS5hdHRyaWJzW2F0dHJpYl0pOyB9O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXsgcmV0dXJuIGVsZW0uYXR0cmlicyAmJiBlbGVtLmF0dHJpYnNbYXR0cmliXSA9PT0gdmFsdWU7IH07XG5cdH1cbn1cblxuZnVuY3Rpb24gY29tYmluZUZ1bmNzKGEsIGIpe1xuXHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7XG5cdFx0cmV0dXJuIGEoZWxlbSkgfHwgYihlbGVtKTtcblx0fTtcbn1cblxuZXhwb3J0cy5nZXRFbGVtZW50cyA9IGZ1bmN0aW9uKG9wdGlvbnMsIGVsZW1lbnQsIHJlY3Vyc2UsIGxpbWl0KXtcblx0dmFyIGZ1bmNzID0gT2JqZWN0LmtleXMob3B0aW9ucykubWFwKGZ1bmN0aW9uKGtleSl7XG5cdFx0dmFyIHZhbHVlID0gb3B0aW9uc1trZXldO1xuXHRcdHJldHVybiBrZXkgaW4gQ2hlY2tzID8gQ2hlY2tzW2tleV0odmFsdWUpIDogZ2V0QXR0cmliQ2hlY2soa2V5LCB2YWx1ZSk7XG5cdH0pO1xuXG5cdHJldHVybiBmdW5jcy5sZW5ndGggPT09IDAgPyBbXSA6IHRoaXMuZmlsdGVyKFxuXHRcdGZ1bmNzLnJlZHVjZShjb21iaW5lRnVuY3MpLFxuXHRcdGVsZW1lbnQsIHJlY3Vyc2UsIGxpbWl0XG5cdCk7XG59O1xuXG5leHBvcnRzLmdldEVsZW1lbnRCeUlkID0gZnVuY3Rpb24oaWQsIGVsZW1lbnQsIHJlY3Vyc2Upe1xuXHRpZighQXJyYXkuaXNBcnJheShlbGVtZW50KSkgZWxlbWVudCA9IFtlbGVtZW50XTtcblx0cmV0dXJuIHRoaXMuZmluZE9uZShnZXRBdHRyaWJDaGVjayhcImlkXCIsIGlkKSwgZWxlbWVudCwgcmVjdXJzZSAhPT0gZmFsc2UpO1xufTtcblxuZXhwb3J0cy5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGZ1bmN0aW9uKG5hbWUsIGVsZW1lbnQsIHJlY3Vyc2UsIGxpbWl0KXtcblx0cmV0dXJuIHRoaXMuZmlsdGVyKENoZWNrcy50YWdfbmFtZShuYW1lKSwgZWxlbWVudCwgcmVjdXJzZSwgbGltaXQpO1xufTtcblxuZXhwb3J0cy5nZXRFbGVtZW50c0J5VGFnVHlwZSA9IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHJlY3Vyc2UsIGxpbWl0KXtcblx0cmV0dXJuIHRoaXMuZmlsdGVyKENoZWNrcy50YWdfdHlwZSh0eXBlKSwgZWxlbWVudCwgcmVjdXJzZSwgbGltaXQpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDM5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIHJlbW92ZVN1YnNldHNcbi8vIEdpdmVuIGFuIGFycmF5IG9mIG5vZGVzLCByZW1vdmUgYW55IG1lbWJlciB0aGF0IGlzIGNvbnRhaW5lZCBieSBhbm90aGVyLlxuZXhwb3J0cy5yZW1vdmVTdWJzZXRzID0gZnVuY3Rpb24obm9kZXMpIHtcblx0dmFyIGlkeCA9IG5vZGVzLmxlbmd0aCwgbm9kZSwgYW5jZXN0b3IsIHJlcGxhY2U7XG5cblx0Ly8gQ2hlY2sgaWYgZWFjaCBub2RlIChvciBvbmUgb2YgaXRzIGFuY2VzdG9ycykgaXMgYWxyZWFkeSBjb250YWluZWQgaW4gdGhlXG5cdC8vIGFycmF5LlxuXHR3aGlsZSAoLS1pZHggPiAtMSkge1xuXHRcdG5vZGUgPSBhbmNlc3RvciA9IG5vZGVzW2lkeF07XG5cblx0XHQvLyBUZW1wb3JhcmlseSByZW1vdmUgdGhlIG5vZGUgdW5kZXIgY29uc2lkZXJhdGlvblxuXHRcdG5vZGVzW2lkeF0gPSBudWxsO1xuXHRcdHJlcGxhY2UgPSB0cnVlO1xuXG5cdFx0d2hpbGUgKGFuY2VzdG9yKSB7XG5cdFx0XHRpZiAobm9kZXMuaW5kZXhPZihhbmNlc3RvcikgPiAtMSkge1xuXHRcdFx0XHRyZXBsYWNlID0gZmFsc2U7XG5cdFx0XHRcdG5vZGVzLnNwbGljZShpZHgsIDEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBub2RlIGhhcyBiZWVuIGZvdW5kIHRvIGJlIHVuaXF1ZSwgcmUtaW5zZXJ0IGl0LlxuXHRcdGlmIChyZXBsYWNlKSB7XG5cdFx0XHRub2Rlc1tpZHhdID0gbm9kZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbm9kZXM7XG59O1xuXG4vLyBTb3VyY2U6IGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tbm9kZS1jb21wYXJlZG9jdW1lbnRwb3NpdGlvblxudmFyIFBPU0lUSU9OID0ge1xuXHRESVNDT05ORUNURUQ6IDEsXG5cdFBSRUNFRElORzogMixcblx0Rk9MTE9XSU5HOiA0LFxuXHRDT05UQUlOUzogOCxcblx0Q09OVEFJTkVEX0JZOiAxNlxufTtcblxuLy8gQ29tcGFyZSB0aGUgcG9zaXRpb24gb2Ygb25lIG5vZGUgYWdhaW5zdCBhbm90aGVyIG5vZGUgaW4gYW55IG90aGVyIGRvY3VtZW50LlxuLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJpdG1hc2sgd2l0aCB0aGUgZm9sbG93aW5nIHZhbHVlczpcbi8vXG4vLyBkb2N1bWVudCBvcmRlcjpcbi8vID4gVGhlcmUgaXMgYW4gb3JkZXJpbmcsIGRvY3VtZW50IG9yZGVyLCBkZWZpbmVkIG9uIGFsbCB0aGUgbm9kZXMgaW4gdGhlXG4vLyA+IGRvY3VtZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlXG4vLyA+IFhNTCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIG5vZGUgb2NjdXJzIGluIHRoZSBYTUwgcmVwcmVzZW50YXRpb24gb2YgdGhlXG4vLyA+IGRvY3VtZW50IGFmdGVyIGV4cGFuc2lvbiBvZiBnZW5lcmFsIGVudGl0aWVzLiBUaHVzLCB0aGUgZG9jdW1lbnQgZWxlbWVudFxuLy8gPiBub2RlIHdpbGwgYmUgdGhlIGZpcnN0IG5vZGUuIEVsZW1lbnQgbm9kZXMgb2NjdXIgYmVmb3JlIHRoZWlyIGNoaWxkcmVuLlxuLy8gPiBUaHVzLCBkb2N1bWVudCBvcmRlciBvcmRlcnMgZWxlbWVudCBub2RlcyBpbiBvcmRlciBvZiB0aGUgb2NjdXJyZW5jZSBvZlxuLy8gPiB0aGVpciBzdGFydC10YWcgaW4gdGhlIFhNTCAoYWZ0ZXIgZXhwYW5zaW9uIG9mIGVudGl0aWVzKS4gVGhlIGF0dHJpYnV0ZVxuLy8gPiBub2RlcyBvZiBhbiBlbGVtZW50IG9jY3VyIGFmdGVyIHRoZSBlbGVtZW50IGFuZCBiZWZvcmUgaXRzIGNoaWxkcmVuLiBUaGVcbi8vID4gcmVsYXRpdmUgb3JkZXIgb2YgYXR0cmlidXRlIG5vZGVzIGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4vXG4vLyBTb3VyY2U6XG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1Db3JlL2dsb3NzYXJ5Lmh0bWwjZHQtZG9jdW1lbnQtb3JkZXJcbi8vXG4vLyBAYXJndW1lbnQge05vZGV9IG5vZGFBIFRoZSBmaXJzdCBub2RlIHRvIHVzZSBpbiB0aGUgY29tcGFyaXNvblxuLy8gQGFyZ3VtZW50IHtOb2RlfSBub2RlQiBUaGUgc2Vjb25kIG5vZGUgdG8gdXNlIGluIHRoZSBjb21wYXJpc29uXG4vL1xuLy8gQHJldHVybiB7TnVtYmVyfSBBIGJpdG1hc2sgZGVzY3JpYmluZyB0aGUgaW5wdXQgbm9kZXMnIHJlbGF0aXZlIHBvc2l0aW9uLlxuLy8gICAgICAgICBTZWUgaHR0cDovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ub2RlLWNvbXBhcmVkb2N1bWVudHBvc2l0aW9uIGZvclxuLy8gICAgICAgICBhIGRlc2NyaXB0aW9uIG9mIHRoZXNlIHZhbHVlcy5cbnZhciBjb21wYXJlUG9zID0gZXhwb3J0cy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA9IGZ1bmN0aW9uKG5vZGVBLCBub2RlQikge1xuXHR2YXIgYVBhcmVudHMgPSBbXTtcblx0dmFyIGJQYXJlbnRzID0gW107XG5cdHZhciBjdXJyZW50LCBzaGFyZWRQYXJlbnQsIHNpYmxpbmdzLCBhU2libGluZywgYlNpYmxpbmcsIGlkeDtcblxuXHRpZiAobm9kZUEgPT09IG5vZGVCKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjdXJyZW50ID0gbm9kZUE7XG5cdHdoaWxlIChjdXJyZW50KSB7XG5cdFx0YVBhcmVudHMudW5zaGlmdChjdXJyZW50KTtcblx0XHRjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG5cdH1cblx0Y3VycmVudCA9IG5vZGVCO1xuXHR3aGlsZSAoY3VycmVudCkge1xuXHRcdGJQYXJlbnRzLnVuc2hpZnQoY3VycmVudCk7XG5cdFx0Y3VycmVudCA9IGN1cnJlbnQucGFyZW50O1xuXHR9XG5cblx0aWR4ID0gMDtcblx0d2hpbGUgKGFQYXJlbnRzW2lkeF0gPT09IGJQYXJlbnRzW2lkeF0pIHtcblx0XHRpZHgrKztcblx0fVxuXG5cdGlmIChpZHggPT09IDApIHtcblx0XHRyZXR1cm4gUE9TSVRJT04uRElTQ09OTkVDVEVEO1xuXHR9XG5cblx0c2hhcmVkUGFyZW50ID0gYVBhcmVudHNbaWR4IC0gMV07XG5cdHNpYmxpbmdzID0gc2hhcmVkUGFyZW50LmNoaWxkcmVuO1xuXHRhU2libGluZyA9IGFQYXJlbnRzW2lkeF07XG5cdGJTaWJsaW5nID0gYlBhcmVudHNbaWR4XTtcblxuXHRpZiAoc2libGluZ3MuaW5kZXhPZihhU2libGluZykgPiBzaWJsaW5ncy5pbmRleE9mKGJTaWJsaW5nKSkge1xuXHRcdGlmIChzaGFyZWRQYXJlbnQgPT09IG5vZGVCKSB7XG5cdFx0XHRyZXR1cm4gUE9TSVRJT04uRk9MTE9XSU5HIHwgUE9TSVRJT04uQ09OVEFJTkVEX0JZO1xuXHRcdH1cblx0XHRyZXR1cm4gUE9TSVRJT04uRk9MTE9XSU5HO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChzaGFyZWRQYXJlbnQgPT09IG5vZGVBKSB7XG5cdFx0XHRyZXR1cm4gUE9TSVRJT04uUFJFQ0VESU5HIHwgUE9TSVRJT04uQ09OVEFJTlM7XG5cdFx0fVxuXHRcdHJldHVybiBQT1NJVElPTi5QUkVDRURJTkc7XG5cdH1cbn07XG5cbi8vIFNvcnQgYW4gYXJyYXkgb2Ygbm9kZXMgYmFzZWQgb24gdGhlaXIgcmVsYXRpdmUgcG9zaXRpb24gaW4gdGhlIGRvY3VtZW50IGFuZFxuLy8gcmVtb3ZlIGFueSBkdXBsaWNhdGUgbm9kZXMuIElmIHRoZSBhcnJheSBjb250YWlucyBub2RlcyB0aGF0IGRvIG5vdCBiZWxvbmdcbi8vIHRvIHRoZSBzYW1lIGRvY3VtZW50LCBzb3J0IG9yZGVyIGlzIHVuc3BlY2lmaWVkLlxuLy9cbi8vIEBhcmd1bWVudCB7QXJyYXl9IG5vZGVzIEFycmF5IG9mIERPTSBub2Rlc1xuLy9cbi8vIEByZXR1cm5zIHtBcnJheX0gY29sbGVjdGlvbiBvZiB1bmlxdWUgbm9kZXMsIHNvcnRlZCBpbiBkb2N1bWVudCBvcmRlclxuZXhwb3J0cy51bmlxdWVTb3J0ID0gZnVuY3Rpb24obm9kZXMpIHtcblx0dmFyIGlkeCA9IG5vZGVzLmxlbmd0aCwgbm9kZSwgcG9zaXRpb247XG5cblx0bm9kZXMgPSBub2Rlcy5zbGljZSgpO1xuXG5cdHdoaWxlICgtLWlkeCA+IC0xKSB7XG5cdFx0bm9kZSA9IG5vZGVzW2lkeF07XG5cdFx0cG9zaXRpb24gPSBub2Rlcy5pbmRleE9mKG5vZGUpO1xuXHRcdGlmIChwb3NpdGlvbiA+IC0xICYmIHBvc2l0aW9uIDwgaWR4KSB7XG5cdFx0XHRub2Rlcy5zcGxpY2UoaWR4LCAxKTtcblx0XHR9XG5cdH1cblx0bm9kZXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG5cdFx0dmFyIHJlbGF0aXZlID0gY29tcGFyZVBvcyhhLCBiKTtcblx0XHRpZiAocmVsYXRpdmUgJiBQT1NJVElPTi5QUkVDRURJTkcpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9IGVsc2UgaWYgKHJlbGF0aXZlICYgUE9TSVRJT04uRk9MTE9XSU5HKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0pO1xuXG5cdHJldHVybiBub2Rlcztcbn07XG5cblxuLyoqKi8gfSksXG4vKiA0MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vKlxuXHRjb21waWxlcyBhIHNlbGVjdG9yIHRvIGFuIGV4ZWN1dGFibGUgZnVuY3Rpb25cbiovXG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZUZhY3Rvcnk7XG5cbnZhciBwYXJzZSAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpLFxuXHRCYXNlRnVuY3MgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNSksXG5cdHNvcnRSdWxlcyAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MiksXG5cdHByb2NlZHVyZSAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSksXG5cdHJ1bGVzRmFjdG9yeSAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MyksXG5cdHBzZXVkb3NGYWN0b3J5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NiksXG5cdHRydWVGdW5jICAgICAgID0gQmFzZUZ1bmNzLnRydWVGdW5jLFxuXHRmYWxzZUZ1bmMgICAgICA9IEJhc2VGdW5jcy5mYWxzZUZ1bmM7XG5cbmZ1bmN0aW9uIGNvbXBpbGVGYWN0b3J5KGFkYXB0ZXIpe1xuXHR2YXIgUHNldWRvcyAgICAgPSBwc2V1ZG9zRmFjdG9yeShhZGFwdGVyKSxcblx0XHRmaWx0ZXJzICAgICA9IFBzZXVkb3MuZmlsdGVycyxcblx0XHRSdWxlcyBcdFx0XHQ9IHJ1bGVzRmFjdG9yeShhZGFwdGVyLCBQc2V1ZG9zKTtcblxuXHRmdW5jdGlvbiBjb21waWxlKHNlbGVjdG9yLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHR2YXIgbmV4dCA9IGNvbXBpbGVVbnNhZmUoc2VsZWN0b3IsIG9wdGlvbnMsIGNvbnRleHQpO1xuXHRcdHJldHVybiB3cmFwKG5leHQpO1xuXHR9XG5cblx0ZnVuY3Rpb24gd3JhcChuZXh0KXtcblx0XHRyZXR1cm4gZnVuY3Rpb24gYmFzZShlbGVtKXtcblx0XHRcdHJldHVybiBhZGFwdGVyLmlzVGFnKGVsZW0pICYmIG5leHQoZWxlbSk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvbXBpbGVVbnNhZmUoc2VsZWN0b3IsIG9wdGlvbnMsIGNvbnRleHQpe1xuXHRcdHZhciB0b2tlbiA9IHBhcnNlKHNlbGVjdG9yLCBvcHRpb25zKTtcblx0XHRyZXR1cm4gY29tcGlsZVRva2VuKHRva2VuLCBvcHRpb25zLCBjb250ZXh0KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGluY2x1ZGVzU2NvcGVQc2V1ZG8odCl7XG5cdFx0cmV0dXJuIHQudHlwZSA9PT0gXCJwc2V1ZG9cIiAmJiAoXG5cdFx0XHR0Lm5hbWUgPT09IFwic2NvcGVcIiB8fCAoXG5cdFx0XHRcdEFycmF5LmlzQXJyYXkodC5kYXRhKSAmJlxuXHRcdFx0XHR0LmRhdGEuc29tZShmdW5jdGlvbihkYXRhKXtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YS5zb21lKGluY2x1ZGVzU2NvcGVQc2V1ZG8pO1xuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHR2YXIgREVTQ0VOREFOVF9UT0tFTiA9IHt0eXBlOiBcImRlc2NlbmRhbnRcIn0sXG5cdFx0RkxFWElCTEVfREVTQ0VOREFOVF9UT0tFTiA9IHt0eXBlOiBcIl9mbGV4aWJsZURlc2NlbmRhbnRcIn0sXG5cdFx0U0NPUEVfVE9LRU4gPSB7dHlwZTogXCJwc2V1ZG9cIiwgbmFtZTogXCJzY29wZVwifSxcblx0XHRQTEFDRUhPTERFUl9FTEVNRU5UID0ge307XG5cblx0Ly9DU1MgNCBTcGVjIChEcmFmdCk6IDMuMy4xLiBBYnNvbHV0aXppbmcgYSBTY29wZS1yZWxhdGl2ZSBTZWxlY3RvclxuXHQvL2h0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9yczQvI2Fic29sdXRpemluZ1xuXHRmdW5jdGlvbiBhYnNvbHV0aXplKHRva2VuLCBjb250ZXh0KXtcblx0XHQvL1RPRE8gYmV0dGVyIGNoZWNrIGlmIGNvbnRleHQgaXMgZG9jdW1lbnRcblx0XHR2YXIgaGFzQ29udGV4dCA9ICEhY29udGV4dCAmJiAhIWNvbnRleHQubGVuZ3RoICYmIGNvbnRleHQuZXZlcnkoZnVuY3Rpb24oZSl7XG5cdFx0XHRyZXR1cm4gZSA9PT0gUExBQ0VIT0xERVJfRUxFTUVOVCB8fCAhIWFkYXB0ZXIuZ2V0UGFyZW50KGUpO1xuXHRcdH0pO1xuXG5cblx0XHR0b2tlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe1xuXHRcdFx0aWYodC5sZW5ndGggPiAwICYmIGlzVHJhdmVyc2FsKHRbMF0pICYmIHRbMF0udHlwZSAhPT0gXCJkZXNjZW5kYW50XCIpe1xuXHRcdFx0XHQvL2Rvbid0IHJldHVybiBpbiBlbHNlIGJyYW5jaFxuXHRcdFx0fSBlbHNlIGlmKGhhc0NvbnRleHQgJiYgIWluY2x1ZGVzU2NvcGVQc2V1ZG8odCkpe1xuXHRcdFx0XHR0LnVuc2hpZnQoREVTQ0VOREFOVF9UT0tFTik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHQudW5zaGlmdChTQ09QRV9UT0tFTik7XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiBjb21waWxlVG9rZW4odG9rZW4sIG9wdGlvbnMsIGNvbnRleHQpe1xuXHRcdHRva2VuID0gdG9rZW4uZmlsdGVyKGZ1bmN0aW9uKHQpeyByZXR1cm4gdC5sZW5ndGggPiAwOyB9KTtcblxuXHRcdHRva2VuLmZvckVhY2goc29ydFJ1bGVzKTtcblxuXHRcdHZhciBpc0FycmF5Q29udGV4dCA9IEFycmF5LmlzQXJyYXkoY29udGV4dCk7XG5cblx0XHRjb250ZXh0ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0KSB8fCBjb250ZXh0O1xuXG5cdFx0aWYoY29udGV4dCAmJiAhaXNBcnJheUNvbnRleHQpIGNvbnRleHQgPSBbY29udGV4dF07XG5cblx0XHRhYnNvbHV0aXplKHRva2VuLCBjb250ZXh0KTtcblxuXHRcdHZhciBzaG91bGRUZXN0TmV4dFNpYmxpbmdzID0gZmFsc2U7XG5cblx0XHR2YXIgcXVlcnkgPSB0b2tlblxuXHRcdFx0Lm1hcChmdW5jdGlvbihydWxlcyl7XG5cdFx0XHRcdGlmKHJ1bGVzWzBdICYmIHJ1bGVzWzFdICYmIHJ1bGVzWzBdLm5hbWUgPT09IFwic2NvcGVcIil7XG5cdFx0XHRcdFx0dmFyIHJ1bGVUeXBlID0gcnVsZXNbMV0udHlwZTtcblx0XHRcdFx0XHRpZihpc0FycmF5Q29udGV4dCAmJiBydWxlVHlwZSA9PT0gXCJkZXNjZW5kYW50XCIpIHJ1bGVzWzFdID0gRkxFWElCTEVfREVTQ0VOREFOVF9UT0tFTjtcblx0XHRcdFx0XHRlbHNlIGlmKHJ1bGVUeXBlID09PSBcImFkamFjZW50XCIgfHwgcnVsZVR5cGUgPT09IFwic2libGluZ1wiKSBzaG91bGRUZXN0TmV4dFNpYmxpbmdzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29tcGlsZVJ1bGVzKHJ1bGVzLCBvcHRpb25zLCBjb250ZXh0KTtcblx0XHRcdH0pXG5cdFx0XHQucmVkdWNlKHJlZHVjZVJ1bGVzLCBmYWxzZUZ1bmMpO1xuXG5cdFx0cXVlcnkuc2hvdWxkVGVzdE5leHRTaWJsaW5ncyA9IHNob3VsZFRlc3ROZXh0U2libGluZ3M7XG5cblx0XHRyZXR1cm4gcXVlcnk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc1RyYXZlcnNhbCh0KXtcblx0XHRyZXR1cm4gcHJvY2VkdXJlW3QudHlwZV0gPCAwO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29tcGlsZVJ1bGVzKHJ1bGVzLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHRyZXR1cm4gcnVsZXMucmVkdWNlKGZ1bmN0aW9uKGZ1bmMsIHJ1bGUpe1xuXHRcdFx0aWYoZnVuYyA9PT0gZmFsc2VGdW5jKSByZXR1cm4gZnVuYztcblx0XHRcdHJldHVybiBSdWxlc1tydWxlLnR5cGVdKGZ1bmMsIHJ1bGUsIG9wdGlvbnMsIGNvbnRleHQpO1xuXHRcdH0sIG9wdGlvbnMgJiYgb3B0aW9ucy5yb290RnVuYyB8fCB0cnVlRnVuYyk7XG5cdH1cblxuXHRmdW5jdGlvbiByZWR1Y2VSdWxlcyhhLCBiKXtcblx0XHRpZihiID09PSBmYWxzZUZ1bmMgfHwgYSA9PT0gdHJ1ZUZ1bmMpe1xuXHRcdFx0cmV0dXJuIGE7XG5cdFx0fVxuXHRcdGlmKGEgPT09IGZhbHNlRnVuYyB8fCBiID09PSB0cnVlRnVuYyl7XG5cdFx0XHRyZXR1cm4gYjtcblx0XHR9XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gY29tYmluZShlbGVtKXtcblx0XHRcdHJldHVybiBhKGVsZW0pIHx8IGIoZWxlbSk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvbnRhaW5zVHJhdmVyc2FsKHQpe1xuXHRcdHJldHVybiB0LnNvbWUoaXNUcmF2ZXJzYWwpO1xuXHR9XG5cblx0Ly86bm90LCA6aGFzIGFuZCA6bWF0Y2hlcyBoYXZlIHRvIGNvbXBpbGUgc2VsZWN0b3JzXG5cdC8vZG9pbmcgdGhpcyBpbiBsaWIvcHNldWRvcy5qcyB3b3VsZCBsZWFkIHRvIGNpcmN1bGFyIGRlcGVuZGVuY2llcyxcblx0Ly9zbyB3ZSBhZGQgdGhlbSBoZXJlXG5cdGZpbHRlcnMubm90ID0gZnVuY3Rpb24obmV4dCwgdG9rZW4sIG9wdGlvbnMsIGNvbnRleHQpe1xuXHRcdHZhciBvcHRzID0ge1xuXHRcdFx0eG1sTW9kZTogISEob3B0aW9ucyAmJiBvcHRpb25zLnhtbE1vZGUpLFxuXHRcdFx0c3RyaWN0OiAhIShvcHRpb25zICYmIG9wdGlvbnMuc3RyaWN0KVxuXHRcdH07XG5cblx0XHRpZihvcHRzLnN0cmljdCl7XG5cdFx0XHRpZih0b2tlbi5sZW5ndGggPiAxIHx8IHRva2VuLnNvbWUoY29udGFpbnNUcmF2ZXJzYWwpKXtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiY29tcGxleCBzZWxlY3RvcnMgaW4gOm5vdCBhcmVuJ3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgZnVuYyA9IGNvbXBpbGVUb2tlbih0b2tlbiwgb3B0cywgY29udGV4dCk7XG5cblx0XHRpZihmdW5jID09PSBmYWxzZUZ1bmMpIHJldHVybiBuZXh0O1xuXHRcdGlmKGZ1bmMgPT09IHRydWVGdW5jKSAgcmV0dXJuIGZhbHNlRnVuYztcblxuXHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiAhZnVuYyhlbGVtKSAmJiBuZXh0KGVsZW0pO1xuXHRcdH07XG5cdH07XG5cblx0ZmlsdGVycy5oYXMgPSBmdW5jdGlvbihuZXh0LCB0b2tlbiwgb3B0aW9ucyl7XG5cdFx0dmFyIG9wdHMgPSB7XG5cdFx0XHR4bWxNb2RlOiAhIShvcHRpb25zICYmIG9wdGlvbnMueG1sTW9kZSksXG5cdFx0XHRzdHJpY3Q6ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5zdHJpY3QpXG5cdFx0fTtcblxuXHRcdC8vRklYTUU6IFVzZXMgYW4gYXJyYXkgYXMgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGVsZW1lbnQgKHNpZGUgZWZmZWN0cylcblx0XHR2YXIgY29udGV4dCA9IHRva2VuLnNvbWUoY29udGFpbnNUcmF2ZXJzYWwpID8gW1BMQUNFSE9MREVSX0VMRU1FTlRdIDogbnVsbDtcblxuXHRcdHZhciBmdW5jID0gY29tcGlsZVRva2VuKHRva2VuLCBvcHRzLCBjb250ZXh0KTtcblxuXHRcdGlmKGZ1bmMgPT09IGZhbHNlRnVuYykgcmV0dXJuIGZhbHNlRnVuYztcblx0XHRpZihmdW5jID09PSB0cnVlRnVuYyl7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRcdHJldHVybiBhZGFwdGVyLmdldENoaWxkcmVuKGVsZW0pLnNvbWUoYWRhcHRlci5pc1RhZykgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuYyA9IHdyYXAoZnVuYyk7XG5cblx0XHRpZihjb250ZXh0KXtcblx0XHRcdHJldHVybiBmdW5jdGlvbiBoYXMoZWxlbSl7XG5cdFx0XHRcdHJldHVybiBuZXh0KGVsZW0pICYmIChcblx0XHRcdFx0XHQoY29udGV4dFswXSA9IGVsZW0pLCBhZGFwdGVyLmV4aXN0c09uZShmdW5jLCBhZGFwdGVyLmdldENoaWxkcmVuKGVsZW0pKVxuXHRcdFx0XHQpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gaGFzKGVsZW0pe1xuXHRcdFx0cmV0dXJuIG5leHQoZWxlbSkgJiYgYWRhcHRlci5leGlzdHNPbmUoZnVuYywgYWRhcHRlci5nZXRDaGlsZHJlbihlbGVtKSk7XG5cdFx0fTtcblx0fTtcblxuXHRmaWx0ZXJzLm1hdGNoZXMgPSBmdW5jdGlvbihuZXh0LCB0b2tlbiwgb3B0aW9ucywgY29udGV4dCl7XG5cdFx0dmFyIG9wdHMgPSB7XG5cdFx0XHR4bWxNb2RlOiAhIShvcHRpb25zICYmIG9wdGlvbnMueG1sTW9kZSksXG5cdFx0XHRzdHJpY3Q6ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5zdHJpY3QpLFxuXHRcdFx0cm9vdEZ1bmM6IG5leHRcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGNvbXBpbGVUb2tlbih0b2tlbiwgb3B0cywgY29udGV4dCk7XG5cdH07XG5cblx0Y29tcGlsZS5jb21waWxlVG9rZW4gPSBjb21waWxlVG9rZW47XG5cdGNvbXBpbGUuY29tcGlsZVVuc2FmZSA9IGNvbXBpbGVVbnNhZmU7XG5cdGNvbXBpbGUuUHNldWRvcyA9IFBzZXVkb3M7XG5cblx0cmV0dXJuIGNvbXBpbGU7XG59XG5cblxuLyoqKi8gfSksXG4vKiA0MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlO1xuXG52YXIgcmVfbmFtZSA9IC9eKD86XFxcXC58W1xcd1xcLVxcdTAwYzAtXFx1RkZGRl0pKy8sXG4gICAgcmVfZXNjYXBlID0gL1xcXFwoW1xcZGEtZl17MSw2fVxccz98KFxccyl8LikvaWcsXG4gICAgLy9tb2RpZmllZCB2ZXJzaW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL2Jsb2IvbWFzdGVyL3NyYy9zaXp6bGUuanMjTDg3XG4gICAgcmVfYXR0ciA9IC9eXFxzKigoPzpcXFxcLnxbXFx3XFx1MDBjMC1cXHVGRkZGXFwtXSkrKVxccyooPzooXFxTPyk9XFxzKig/OihbJ1wiXSkoLio/KVxcM3woIz8oPzpcXFxcLnxbXFx3XFx1MDBjMC1cXHVGRkZGXFwtXSkqKXwpfClcXHMqKGkpP1xcXS87XG5cbnZhciBhY3Rpb25UeXBlcyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRcInVuZGVmaW5lZFwiOiBcImV4aXN0c1wiLFxuXHRcIlwiOiAgXCJlcXVhbHNcIixcblx0XCJ+XCI6IFwiZWxlbWVudFwiLFxuXHRcIl5cIjogXCJzdGFydFwiLFxuXHRcIiRcIjogXCJlbmRcIixcblx0XCIqXCI6IFwiYW55XCIsXG5cdFwiIVwiOiBcIm5vdFwiLFxuXHRcInxcIjogXCJoeXBoZW5cIlxufTtcblxudmFyIHNpbXBsZVNlbGVjdG9ycyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRcIj5cIjogXCJjaGlsZFwiLFxuXHRcIjxcIjogXCJwYXJlbnRcIixcblx0XCJ+XCI6IFwic2libGluZ1wiLFxuXHRcIitcIjogXCJhZGphY2VudFwiXG59O1xuXG52YXIgYXR0cmliU2VsZWN0b3JzID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdFwiI1wiOiBbXCJpZFwiLCBcImVxdWFsc1wiXSxcblx0XCIuXCI6IFtcImNsYXNzXCIsIFwiZWxlbWVudFwiXVxufTtcblxuLy9wc2V1ZG9zLCB3aG9zZSBkYXRhLXByb3BlcnR5IGlzIHBhcnNlZCBhcyB3ZWxsXG52YXIgdW5wYWNrUHNldWRvcyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRcImhhc1wiOiB0cnVlLFxuXHRcIm5vdFwiOiB0cnVlLFxuXHRcIm1hdGNoZXNcIjogdHJ1ZVxufTtcblxudmFyIHN0cmlwUXVvdGVzRnJvbVBzZXVkb3MgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0XCJjb250YWluc1wiOiB0cnVlLFxuXHRcImljb250YWluc1wiOiB0cnVlXG59O1xuXG52YXIgcXVvdGVzID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdFwiXFxcIlwiOiB0cnVlLFxuXHRcIidcIjogdHJ1ZVxufTtcblxuLy91bmVzY2FwZSBmdW5jdGlvbiB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL2Jsb2IvbWFzdGVyL3NyYy9zaXp6bGUuanMjTDEzOVxuZnVuY3Rpb24gZnVuZXNjYXBlKCBfLCBlc2NhcGVkLCBlc2NhcGVkV2hpdGVzcGFjZSApIHtcblx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGVkIC0gMHgxMDAwMDtcblx0Ly8gTmFOIG1lYW5zIG5vbi1jb2RlcG9pbnRcblx0Ly8gU3VwcG9ydDogRmlyZWZveFxuXHQvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICtcIjB4XCJcblx0cmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdoaXRlc3BhY2UgP1xuXHRcdGVzY2FwZWQgOlxuXHRcdC8vIEJNUCBjb2RlcG9pbnRcblx0XHRoaWdoIDwgMCA/XG5cdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdC8vIFN1cHBsZW1lbnRhbCBQbGFuZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKVxuXHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG59XG5cbmZ1bmN0aW9uIHVuZXNjYXBlQ1NTKHN0cil7XG5cdHJldHVybiBzdHIucmVwbGFjZShyZV9lc2NhcGUsIGZ1bmVzY2FwZSk7XG59XG5cbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjKXtcblx0cmV0dXJuIGMgPT09IFwiIFwiIHx8IGMgPT09IFwiXFxuXCIgfHwgYyA9PT0gXCJcXHRcIiB8fCBjID09PSBcIlxcZlwiIHx8IGMgPT09IFwiXFxyXCI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHNlbGVjdG9yLCBvcHRpb25zKXtcblx0dmFyIHN1YnNlbGVjdHMgPSBbXTtcblxuXHRzZWxlY3RvciA9IHBhcnNlU2VsZWN0b3Ioc3Vic2VsZWN0cywgc2VsZWN0b3IgKyBcIlwiLCBvcHRpb25zKTtcblxuXHRpZihzZWxlY3RvciAhPT0gXCJcIil7XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW5tYXRjaGVkIHNlbGVjdG9yOiBcIiArIHNlbGVjdG9yKTtcblx0fVxuXG5cdHJldHVybiBzdWJzZWxlY3RzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNlbGVjdG9yKHN1YnNlbGVjdHMsIHNlbGVjdG9yLCBvcHRpb25zKXtcblx0dmFyIHRva2VucyA9IFtdLFxuXHRcdHNhd1dTID0gZmFsc2UsXG5cdFx0ZGF0YSwgZmlyc3RDaGFyLCBuYW1lLCBxdW90O1xuXG5cdGZ1bmN0aW9uIGdldE5hbWUoKXtcblx0XHR2YXIgc3ViID0gc2VsZWN0b3IubWF0Y2gocmVfbmFtZSlbMF07XG5cdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoc3ViLmxlbmd0aCk7XG5cdFx0cmV0dXJuIHVuZXNjYXBlQ1NTKHN1Yik7XG5cdH1cblxuXHRmdW5jdGlvbiBzdHJpcFdoaXRlc3BhY2Uoc3RhcnQpe1xuXHRcdHdoaWxlKGlzV2hpdGVzcGFjZShzZWxlY3Rvci5jaGFyQXQoc3RhcnQpKSkgc3RhcnQrKztcblx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cihzdGFydCk7XG5cdH1cblxuXHRzdHJpcFdoaXRlc3BhY2UoMCk7XG5cblx0d2hpbGUoc2VsZWN0b3IgIT09IFwiXCIpe1xuXHRcdGZpcnN0Q2hhciA9IHNlbGVjdG9yLmNoYXJBdCgwKTtcblxuXHRcdGlmKGlzV2hpdGVzcGFjZShmaXJzdENoYXIpKXtcblx0XHRcdHNhd1dTID0gdHJ1ZTtcblx0XHRcdHN0cmlwV2hpdGVzcGFjZSgxKTtcblx0XHR9IGVsc2UgaWYoZmlyc3RDaGFyIGluIHNpbXBsZVNlbGVjdG9ycyl7XG5cdFx0XHR0b2tlbnMucHVzaCh7dHlwZTogc2ltcGxlU2VsZWN0b3JzW2ZpcnN0Q2hhcl19KTtcblx0XHRcdHNhd1dTID0gZmFsc2U7XG5cblx0XHRcdHN0cmlwV2hpdGVzcGFjZSgxKTtcblx0XHR9IGVsc2UgaWYoZmlyc3RDaGFyID09PSBcIixcIil7XG5cdFx0XHRpZih0b2tlbnMubGVuZ3RoID09PSAwKXtcblx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZW1wdHkgc3ViLXNlbGVjdG9yXCIpO1xuXHRcdFx0fVxuXHRcdFx0c3Vic2VsZWN0cy5wdXNoKHRva2Vucyk7XG5cdFx0XHR0b2tlbnMgPSBbXTtcblx0XHRcdHNhd1dTID0gZmFsc2U7XG5cdFx0XHRzdHJpcFdoaXRlc3BhY2UoMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHNhd1dTKXtcblx0XHRcdFx0aWYodG9rZW5zLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHt0eXBlOiBcImRlc2NlbmRhbnRcIn0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNhd1dTID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGZpcnN0Q2hhciA9PT0gXCIqXCIpe1xuXHRcdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cigxKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goe3R5cGU6IFwidW5pdmVyc2FsXCJ9KTtcblx0XHRcdH0gZWxzZSBpZihmaXJzdENoYXIgaW4gYXR0cmliU2VsZWN0b3JzKXtcblx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoMSk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBcImF0dHJpYnV0ZVwiLFxuXHRcdFx0XHRcdG5hbWU6IGF0dHJpYlNlbGVjdG9yc1tmaXJzdENoYXJdWzBdLFxuXHRcdFx0XHRcdGFjdGlvbjogYXR0cmliU2VsZWN0b3JzW2ZpcnN0Q2hhcl1bMV0sXG5cdFx0XHRcdFx0dmFsdWU6IGdldE5hbWUoKSxcblx0XHRcdFx0XHRpZ25vcmVDYXNlOiBmYWxzZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZihmaXJzdENoYXIgPT09IFwiW1wiKXtcblx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoMSk7XG5cdFx0XHRcdGRhdGEgPSBzZWxlY3Rvci5tYXRjaChyZV9hdHRyKTtcblx0XHRcdFx0aWYoIWRhdGEpe1xuXHRcdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcIk1hbGZvcm1lZCBhdHRyaWJ1dGUgc2VsZWN0b3I6IFwiICsgc2VsZWN0b3IpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyKGRhdGFbMF0ubGVuZ3RoKTtcblx0XHRcdFx0bmFtZSA9IHVuZXNjYXBlQ1NTKGRhdGFbMV0pO1xuXG5cdFx0XHRcdGlmKFxuXHRcdFx0XHRcdCFvcHRpb25zIHx8IChcblx0XHRcdFx0XHRcdFwibG93ZXJDYXNlQXR0cmlidXRlTmFtZXNcIiBpbiBvcHRpb25zID9cblx0XHRcdFx0XHRcdFx0b3B0aW9ucy5sb3dlckNhc2VBdHRyaWJ1dGVOYW1lcyA6XG5cdFx0XHRcdFx0XHRcdCFvcHRpb25zLnhtbE1vZGVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl7XG5cdFx0XHRcdFx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBcImF0dHJpYnV0ZVwiLFxuXHRcdFx0XHRcdG5hbWU6IG5hbWUsXG5cdFx0XHRcdFx0YWN0aW9uOiBhY3Rpb25UeXBlc1tkYXRhWzJdXSxcblx0XHRcdFx0XHR2YWx1ZTogdW5lc2NhcGVDU1MoZGF0YVs0XSB8fCBkYXRhWzVdIHx8IFwiXCIpLFxuXHRcdFx0XHRcdGlnbm9yZUNhc2U6ICEhZGF0YVs2XVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0fSBlbHNlIGlmKGZpcnN0Q2hhciA9PT0gXCI6XCIpe1xuXHRcdFx0XHRpZihzZWxlY3Rvci5jaGFyQXQoMSkgPT09IFwiOlwiKXtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cigyKTtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7dHlwZTogXCJwc2V1ZG8tZWxlbWVudFwiLCBuYW1lOiBnZXROYW1lKCkudG9Mb3dlckNhc2UoKX0pO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoMSk7XG5cblx0XHRcdFx0bmFtZSA9IGdldE5hbWUoKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRkYXRhID0gbnVsbDtcblxuXHRcdFx0XHRpZihzZWxlY3Rvci5jaGFyQXQoMCkgPT09IFwiKFwiKXtcblx0XHRcdFx0XHRpZihuYW1lIGluIHVucGFja1BzZXVkb3Mpe1xuXHRcdFx0XHRcdFx0cXVvdCA9IHNlbGVjdG9yLmNoYXJBdCgxKTtcblx0XHRcdFx0XHRcdHZhciBxdW90ZWQgPSBxdW90IGluIHF1b3RlcztcblxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIocXVvdGVkICsgMSk7XG5cblx0XHRcdFx0XHRcdGRhdGEgPSBbXTtcblx0XHRcdFx0XHRcdHNlbGVjdG9yID0gcGFyc2VTZWxlY3RvcihkYXRhLCBzZWxlY3Rvciwgb3B0aW9ucyk7XG5cblx0XHRcdFx0XHRcdGlmKHF1b3RlZCl7XG5cdFx0XHRcdFx0XHRcdGlmKHNlbGVjdG9yLmNoYXJBdCgwKSAhPT0gcXVvdCl7XG5cdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwidW5tYXRjaGVkIHF1b3RlcyBpbiA6XCIgKyBuYW1lKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cigxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihzZWxlY3Rvci5jaGFyQXQoMCkgIT09IFwiKVwiKXtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwibWlzc2luZyBjbG9zaW5nIHBhcmVudGhlc2lzIGluIDpcIiArIG5hbWUgKyBcIiBcIiArIHNlbGVjdG9yKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHIoMSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZhciBwb3MgPSAxLCBjb3VudGVyID0gMTtcblxuXHRcdFx0XHRcdFx0Zm9yKDsgY291bnRlciA+IDAgJiYgcG9zIDwgc2VsZWN0b3IubGVuZ3RoOyBwb3MrKyl7XG5cdFx0XHRcdFx0XHRcdGlmKHNlbGVjdG9yLmNoYXJBdChwb3MpID09PSBcIihcIikgY291bnRlcisrO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmKHNlbGVjdG9yLmNoYXJBdChwb3MpID09PSBcIilcIikgY291bnRlci0tO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihjb3VudGVyKXtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwicGFyZW50aGVzaXMgbm90IG1hdGNoZWRcIik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGRhdGEgPSBzZWxlY3Rvci5zdWJzdHIoMSwgcG9zIC0gMik7XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cihwb3MpO1xuXG5cdFx0XHRcdFx0XHRpZihuYW1lIGluIHN0cmlwUXVvdGVzRnJvbVBzZXVkb3Mpe1xuXHRcdFx0XHRcdFx0XHRxdW90ID0gZGF0YS5jaGFyQXQoMCk7XG5cblx0XHRcdFx0XHRcdFx0aWYocXVvdCA9PT0gZGF0YS5zbGljZSgtMSkgJiYgcXVvdCBpbiBxdW90ZXMpe1xuXHRcdFx0XHRcdFx0XHRcdGRhdGEgPSBkYXRhLnNsaWNlKDEsIC0xKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGRhdGEgPSB1bmVzY2FwZUNTUyhkYXRhKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b2tlbnMucHVzaCh7dHlwZTogXCJwc2V1ZG9cIiwgbmFtZTogbmFtZSwgZGF0YTogZGF0YX0pO1xuXHRcdFx0fSBlbHNlIGlmKHJlX25hbWUudGVzdChzZWxlY3Rvcikpe1xuXHRcdFx0XHRuYW1lID0gZ2V0TmFtZSgpO1xuXG5cdFx0XHRcdGlmKCFvcHRpb25zIHx8IChcImxvd2VyQ2FzZVRhZ3NcIiBpbiBvcHRpb25zID8gb3B0aW9ucy5sb3dlckNhc2VUYWdzIDogIW9wdGlvbnMueG1sTW9kZSkpe1xuXHRcdFx0XHRcdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b2tlbnMucHVzaCh7dHlwZTogXCJ0YWdcIiwgbmFtZTogbmFtZX0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPT09IFwiZGVzY2VuZGFudFwiKXtcblx0XHRcdFx0XHR0b2tlbnMucG9wKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YWRkVG9rZW4oc3Vic2VsZWN0cywgdG9rZW5zKTtcblx0XHRcdFx0cmV0dXJuIHNlbGVjdG9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFkZFRva2VuKHN1YnNlbGVjdHMsIHRva2Vucyk7XG5cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRUb2tlbihzdWJzZWxlY3RzLCB0b2tlbnMpe1xuXHRpZihzdWJzZWxlY3RzLmxlbmd0aCA+IDAgJiYgdG9rZW5zLmxlbmd0aCA9PT0gMCl7XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZW1wdHkgc3ViLXNlbGVjdG9yXCIpO1xuXHR9XG5cblx0c3Vic2VsZWN0cy5wdXNoKHRva2Vucyk7XG59XG5cblxuLyoqKi8gfSksXG4vKiA0MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNvcnRCeVByb2NlZHVyZTtcblxuLypcblx0c29ydCB0aGUgcGFydHMgb2YgdGhlIHBhc3NlZCBzZWxlY3Rvcixcblx0YXMgdGhlcmUgaXMgcG90ZW50aWFsIGZvciBvcHRpbWl6YXRpb25cblx0KHNvbWUgdHlwZXMgb2Ygc2VsZWN0b3JzIGFyZSBmYXN0ZXIgdGhhbiBvdGhlcnMpXG4qL1xuXG52YXIgcHJvY2VkdXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cbnZhciBhdHRyaWJ1dGVzID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdGV4aXN0czogMTAsXG5cdGVxdWFsczogOCxcblx0bm90OiA3LFxuXHRzdGFydDogNixcblx0ZW5kOiA2LFxuXHRhbnk6IDUsXG5cdGh5cGhlbjogNCxcblx0ZWxlbWVudDogNFxufTtcblxuZnVuY3Rpb24gc29ydEJ5UHJvY2VkdXJlKGFycil7XG5cdHZhciBwcm9jcyA9IGFyci5tYXAoZ2V0UHJvY2VkdXJlKTtcblx0Zm9yKHZhciBpID0gMTsgaSA8IGFyci5sZW5ndGg7IGkrKyl7XG5cdFx0dmFyIHByb2NOZXcgPSBwcm9jc1tpXTtcblxuXHRcdGlmKHByb2NOZXcgPCAwKSBjb250aW51ZTtcblxuXHRcdGZvcih2YXIgaiA9IGkgLSAxOyBqID49IDAgJiYgcHJvY05ldyA8IHByb2NzW2pdOyBqLS0pe1xuXHRcdFx0dmFyIHRva2VuID0gYXJyW2ogKyAxXTtcblx0XHRcdGFycltqICsgMV0gPSBhcnJbal07XG5cdFx0XHRhcnJbal0gPSB0b2tlbjtcblx0XHRcdHByb2NzW2ogKyAxXSA9IHByb2NzW2pdO1xuXHRcdFx0cHJvY3Nbal0gPSBwcm9jTmV3O1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXRQcm9jZWR1cmUodG9rZW4pe1xuXHR2YXIgcHJvYyA9IHByb2NlZHVyZVt0b2tlbi50eXBlXTtcblxuXHRpZihwcm9jID09PSBwcm9jZWR1cmUuYXR0cmlidXRlKXtcblx0XHRwcm9jID0gYXR0cmlidXRlc1t0b2tlbi5hY3Rpb25dO1xuXG5cdFx0aWYocHJvYyA9PT0gYXR0cmlidXRlcy5lcXVhbHMgJiYgdG9rZW4ubmFtZSA9PT0gXCJpZFwiKXtcblx0XHRcdC8vcHJlZmVyIElEIHNlbGVjdG9ycyAoZWcuICNJRClcblx0XHRcdHByb2MgPSA5O1xuXHRcdH1cblxuXHRcdGlmKHRva2VuLmlnbm9yZUNhc2Upe1xuXHRcdFx0Ly9pZ25vcmVDYXNlIGFkZHMgc29tZSBvdmVyaGVhZCwgcHJlZmVyIFwibm9ybWFsXCIgdG9rZW5cblx0XHRcdC8vdGhpcyBpcyBhIGJpbmFyeSBvcGVyYXRpb24sIHRvIGVuc3VyZSBpdCdzIHN0aWxsIGFuIGludFxuXHRcdFx0cHJvYyA+Pj0gMTtcblx0XHR9XG5cdH0gZWxzZSBpZihwcm9jID09PSBwcm9jZWR1cmUucHNldWRvKXtcblx0XHRpZighdG9rZW4uZGF0YSl7XG5cdFx0XHRwcm9jID0gMztcblx0XHR9IGVsc2UgaWYodG9rZW4ubmFtZSA9PT0gXCJoYXNcIiB8fCB0b2tlbi5uYW1lID09PSBcImNvbnRhaW5zXCIpe1xuXHRcdFx0cHJvYyA9IDA7IC8vZXhwZW5zaXZlIGluIGFueSBjYXNlXG5cdFx0fSBlbHNlIGlmKHRva2VuLm5hbWUgPT09IFwibWF0Y2hlc1wiIHx8IHRva2VuLm5hbWUgPT09IFwibm90XCIpe1xuXHRcdFx0cHJvYyA9IDA7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdG9rZW4uZGF0YS5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdC8vVE9ETyBiZXR0ZXIgaGFuZGxpbmcgb2YgY29tcGxleCBzZWxlY3RvcnNcblx0XHRcdFx0aWYodG9rZW4uZGF0YVtpXS5sZW5ndGggIT09IDEpIGNvbnRpbnVlO1xuXHRcdFx0XHR2YXIgY3VyID0gZ2V0UHJvY2VkdXJlKHRva2VuLmRhdGFbaV1bMF0pO1xuXHRcdFx0XHQvL2F2b2lkIGV4ZWN1dGluZyA6aGFzIG9yIDpjb250YWluc1xuXHRcdFx0XHRpZihjdXIgPT09IDApe1xuXHRcdFx0XHRcdHByb2MgPSAwO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGN1ciA+IHByb2MpIHByb2MgPSBjdXI7XG5cdFx0XHR9XG5cdFx0XHRpZih0b2tlbi5kYXRhLmxlbmd0aCA+IDEgJiYgcHJvYyA+IDApIHByb2MgLT0gMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvYyA9IDE7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9jO1xufVxuXG5cbi8qKiovIH0pLFxuLyogNDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIFNldCA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xudmFyIGF0dHJpYnV0ZUZhY3RvcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcblxuZnVuY3Rpb24gZ2VuZXJhbEZhY3RvcnkoYWRhcHRlciwgUHNldWRvcyl7XG5cdC8qXG5cdFx0YWxsIGF2YWlsYWJsZSBydWxlc1xuXHQqL1xuXHRyZXR1cm4ge1xuXHRcdF9fcHJvdG9fXzogbnVsbCxcblxuXHRcdGF0dHJpYnV0ZTogYXR0cmlidXRlRmFjdG9yeShhZGFwdGVyKS5jb21waWxlLFxuXHRcdHBzZXVkbzogUHNldWRvcy5jb21waWxlLFxuXG5cdFx0Ly90YWdzXG5cdFx0dGFnOiBmdW5jdGlvbihuZXh0LCBkYXRhKXtcblx0XHRcdHZhciBuYW1lID0gZGF0YS5uYW1lO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIHRhZyhlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuZ2V0TmFtZShlbGVtKSA9PT0gbmFtZSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0Ly90cmF2ZXJzYWxcblx0XHRkZXNjZW5kYW50OiBmdW5jdGlvbihuZXh0KXtcblx0XHRcdHZhciBpc0ZhbHNlQ2FjaGUgPSBuZXcgU2V0KCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBkZXNjZW5kYW50KGVsZW0pe1xuXHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblxuXHRcdFx0XHR3aGlsZSghZm91bmQgJiYgKGVsZW0gPSBhZGFwdGVyLmdldFBhcmVudChlbGVtKSkpe1xuXHRcdFx0XHRcdGlmKCFpc0ZhbHNlQ2FjaGUuaGFzKGVsZW0pKXtcblx0XHRcdFx0XHRcdGZvdW5kID0gbmV4dChlbGVtKTtcblx0XHRcdFx0XHRcdGlmKCFmb3VuZCl7XG5cdFx0XHRcdFx0XHRcdGlzRmFsc2VDYWNoZS5hZGQoZWxlbSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdF9mbGV4aWJsZURlc2NlbmRhbnQ6IGZ1bmN0aW9uKG5leHQpe1xuXHRcdFx0Ly8gSW5jbHVkZSBlbGVtZW50IGl0c2VsZiwgb25seSB1c2VkIHdoaWxlIHF1ZXJ5aW5nIGFuIGFycmF5XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gZGVzY2VuZGFudChlbGVtKXtcblxuXHRcdFx0XHR2YXIgZm91bmQgPSBuZXh0KGVsZW0pO1xuXG5cdFx0XHRcdHdoaWxlKCFmb3VuZCAmJiAoZWxlbSA9IGFkYXB0ZXIuZ2V0UGFyZW50KGVsZW0pKSl7XG5cdFx0XHRcdFx0Zm91bmQgPSBuZXh0KGVsZW0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdHBhcmVudDogZnVuY3Rpb24obmV4dCwgZGF0YSwgb3B0aW9ucyl7XG5cdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMuc3RyaWN0KSB0aHJvdyBuZXcgRXJyb3IoXCJQYXJlbnQgc2VsZWN0b3IgaXNuJ3QgcGFydCBvZiBDU1MzXCIpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gcGFyZW50KGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gYWRhcHRlci5nZXRDaGlsZHJlbihlbGVtKS5zb21lKHRlc3QpO1xuXHRcdFx0fTtcblxuXHRcdFx0ZnVuY3Rpb24gdGVzdChlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGFkYXB0ZXIuaXNUYWcoZWxlbSkgJiYgbmV4dChlbGVtKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGNoaWxkOiBmdW5jdGlvbihuZXh0KXtcblx0XHRcdHJldHVybiBmdW5jdGlvbiBjaGlsZChlbGVtKXtcblx0XHRcdFx0dmFyIHBhcmVudCA9IGFkYXB0ZXIuZ2V0UGFyZW50KGVsZW0pO1xuXHRcdFx0XHRyZXR1cm4gISFwYXJlbnQgJiYgbmV4dChwYXJlbnQpO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdHNpYmxpbmc6IGZ1bmN0aW9uKG5leHQpe1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIHNpYmxpbmcoZWxlbSl7XG5cdFx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRpZihuZXh0KHNpYmxpbmdzW2ldKSkgcmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFkamFjZW50OiBmdW5jdGlvbihuZXh0KXtcblx0XHRcdHJldHVybiBmdW5jdGlvbiBhZGphY2VudChlbGVtKXtcblx0XHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKSxcblx0XHRcdFx0XHRsYXN0RWxlbWVudDtcblxuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc2libGluZ3MubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSBicmVhaztcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50ID0gc2libGluZ3NbaV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuICEhbGFzdEVsZW1lbnQgJiYgbmV4dChsYXN0RWxlbWVudCk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0dW5pdmVyc2FsOiBmdW5jdGlvbihuZXh0KXtcblx0XHRcdHJldHVybiBuZXh0O1xuXHRcdH1cblx0fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmFsRmFjdG9yeTtcblxuXG4vKioqLyB9KSxcbi8qIDQ0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSkoKSA/IFNldCA6IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xuXG5cbi8qKiovIH0pLFxuLyogNDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBzZXQsIGl0ZXJhdG9yLCByZXN1bHQ7XG5cdGlmICh0eXBlb2YgU2V0ICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cdHNldCA9IG5ldyBTZXQoWydyYXonLCAnZHdhJywgJ3RyenknXSk7XG5cdGlmIChTdHJpbmcoc2V0KSAhPT0gJ1tvYmplY3QgU2V0XScpIHJldHVybiBmYWxzZTtcblx0aWYgKHNldC5zaXplICE9PSAzKSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2Ygc2V0LmFkZCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHNldC5jbGVhciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHNldC5kZWxldGUgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblx0aWYgKHR5cGVvZiBzZXQuZW50cmllcyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHNldC5mb3JFYWNoICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2Ygc2V0LmhhcyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHNldC5rZXlzICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cdGlmICh0eXBlb2Ygc2V0LnZhbHVlcyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXG5cdGl0ZXJhdG9yID0gc2V0LnZhbHVlcygpO1xuXHRyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG5cdGlmIChyZXN1bHQuZG9uZSAhPT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblx0aWYgKHJlc3VsdC52YWx1ZSAhPT0gJ3JheicpIHJldHVybiBmYWxzZTtcblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA0NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgY2xlYXIgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KVxuICAsIGVJbmRleE9mICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NylcbiAgLCBzZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNilcbiAgLCBjYWxsYWJsZSAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcbiAgLCBkICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMylcbiAgLCBlZSAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpXG4gICwgU3ltYm9sICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpXG4gICwgaXRlcmF0b3IgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKVxuICAsIGZvck9mICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MSlcbiAgLCBJdGVyYXRvciAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oODQpXG4gICwgaXNOYXRpdmUgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KVxuXG4gICwgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsXG4gICwgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHksIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mXG4gICwgU2V0UG9seSwgZ2V0VmFsdWVzLCBOYXRpdmVTZXQ7XG5cbmlmIChpc05hdGl2ZSkgTmF0aXZlU2V0ID0gU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldFBvbHkgPSBmdW5jdGlvbiBTZXQoLyppdGVyYWJsZSovKSB7XG5cdHZhciBpdGVyYWJsZSA9IGFyZ3VtZW50c1swXSwgc2VsZjtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIFNldFBvbHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb25zdHJ1Y3RvciByZXF1aXJlcyBcXCduZXdcXCcnKTtcblx0aWYgKGlzTmF0aXZlICYmIHNldFByb3RvdHlwZU9mKSBzZWxmID0gc2V0UHJvdG90eXBlT2YobmV3IE5hdGl2ZVNldCgpLCBnZXRQcm90b3R5cGVPZih0aGlzKSk7XG5cdGVsc2Ugc2VsZiA9IHRoaXM7XG5cdGlmIChpdGVyYWJsZSAhPSBudWxsKSBpdGVyYXRvcihpdGVyYWJsZSk7XG5cdGRlZmluZVByb3BlcnR5KHNlbGYsICdfX3NldERhdGFfXycsIGQoJ2MnLCBbXSkpO1xuXHRpZiAoIWl0ZXJhYmxlKSByZXR1cm4gc2VsZjtcblx0Zm9yT2YoaXRlcmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdGlmIChlSW5kZXhPZi5jYWxsKHRoaXMsIHZhbHVlKSAhPT0gLTEpIHJldHVybjtcblx0XHR0aGlzLnB1c2godmFsdWUpO1xuXHR9LCBzZWxmLl9fc2V0RGF0YV9fKTtcblx0cmV0dXJuIHNlbGY7XG59O1xuXG5pZiAoaXNOYXRpdmUpIHtcblx0aWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZihTZXRQb2x5LCBOYXRpdmVTZXQpO1xuXHRTZXRQb2x5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTmF0aXZlU2V0LnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogZChTZXRQb2x5KSB9KTtcbn1cblxuZWUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2V0UG9seS5wcm90b3R5cGUsIHtcblx0YWRkOiBkKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdGlmICh0aGlzLmhhcyh2YWx1ZSkpIHJldHVybiB0aGlzO1xuXHRcdHRoaXMuZW1pdCgnX2FkZCcsIHRoaXMuX19zZXREYXRhX18ucHVzaCh2YWx1ZSkgLSAxLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0pLFxuXHRjbGVhcjogZChmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKCF0aGlzLl9fc2V0RGF0YV9fLmxlbmd0aCkgcmV0dXJuO1xuXHRcdGNsZWFyLmNhbGwodGhpcy5fX3NldERhdGFfXyk7XG5cdFx0dGhpcy5lbWl0KCdfY2xlYXInKTtcblx0fSksXG5cdGRlbGV0ZTogZChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHR2YXIgaW5kZXggPSBlSW5kZXhPZi5jYWxsKHRoaXMuX19zZXREYXRhX18sIHZhbHVlKTtcblx0XHRpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gZmFsc2U7XG5cdFx0dGhpcy5fX3NldERhdGFfXy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdHRoaXMuZW1pdCgnX2RlbGV0ZScsIGluZGV4LCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pLFxuXHRlbnRyaWVzOiBkKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvcih0aGlzLCAna2V5K3ZhbHVlJyk7IH0pLFxuXHRmb3JFYWNoOiBkKGZ1bmN0aW9uIChjYi8qLCB0aGlzQXJnKi8pIHtcblx0XHR2YXIgdGhpc0FyZyA9IGFyZ3VtZW50c1sxXSwgaXRlcmF0b3IsIHJlc3VsdCwgdmFsdWU7XG5cdFx0Y2FsbGFibGUoY2IpO1xuXHRcdGl0ZXJhdG9yID0gdGhpcy52YWx1ZXMoKTtcblx0XHRyZXN1bHQgPSBpdGVyYXRvci5fbmV4dCgpO1xuXHRcdHdoaWxlIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSBpdGVyYXRvci5fcmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0Y2FsbC5jYWxsKGNiLCB0aGlzQXJnLCB2YWx1ZSwgdmFsdWUsIHRoaXMpO1xuXHRcdFx0cmVzdWx0ID0gaXRlcmF0b3IuX25leHQoKTtcblx0XHR9XG5cdH0pLFxuXHRoYXM6IGQoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0cmV0dXJuIChlSW5kZXhPZi5jYWxsKHRoaXMuX19zZXREYXRhX18sIHZhbHVlKSAhPT0gLTEpO1xuXHR9KSxcblx0a2V5czogZChnZXRWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnZhbHVlcygpOyB9KSxcblx0c2l6ZTogZC5ncyhmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9fc2V0RGF0YV9fLmxlbmd0aDsgfSksXG5cdHZhbHVlczogZChmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3IodGhpcyk7IH0pLFxuXHR0b1N0cmluZzogZChmdW5jdGlvbiAoKSB7IHJldHVybiAnW29iamVjdCBTZXRdJzsgfSlcbn0pKTtcbmRlZmluZVByb3BlcnR5KFNldFBvbHkucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGQoZ2V0VmFsdWVzKSk7XG5kZWZpbmVQcm9wZXJ0eShTZXRQb2x5LnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCBkKCdjJywgJ1NldCcpKTtcblxuXG4vKioqLyB9KSxcbi8qIDQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBudW1iZXJJc05hTiAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpXG4gICwgdG9Qb3NJbnQgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KVxuICAsIHZhbHVlICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKVxuICAsIGluZGV4T2YgICAgICAgICAgID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2ZcbiAgLCBvYmpIYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCBhYnMgICAgICAgICAgICAgICA9IE1hdGguYWJzXG4gICwgZmxvb3IgICAgICAgICAgICAgPSBNYXRoLmZsb29yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWFyY2hFbGVtZW50IC8qLCBmcm9tSW5kZXgqLykge1xuXHR2YXIgaSwgbGVuZ3RoLCBmcm9tSW5kZXgsIHZhbDtcblx0aWYgKCFudW1iZXJJc05hTihzZWFyY2hFbGVtZW50KSkgcmV0dXJuIGluZGV4T2YuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuXHRsZW5ndGggPSB0b1Bvc0ludCh2YWx1ZSh0aGlzKS5sZW5ndGgpO1xuXHRmcm9tSW5kZXggPSBhcmd1bWVudHNbMV07XG5cdGlmIChpc05hTihmcm9tSW5kZXgpKSBmcm9tSW5kZXggPSAwO1xuXHRlbHNlIGlmIChmcm9tSW5kZXggPj0gMCkgZnJvbUluZGV4ID0gZmxvb3IoZnJvbUluZGV4KTtcblx0ZWxzZSBmcm9tSW5kZXggPSB0b1Bvc0ludCh0aGlzLmxlbmd0aCkgLSBmbG9vcihhYnMoZnJvbUluZGV4KSk7XG5cblx0Zm9yIChpID0gZnJvbUluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHtcblx0XHRpZiAob2JqSGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCBpKSkge1xuXHRcdFx0dmFsID0gdGhpc1tpXTtcblx0XHRcdGlmIChudW1iZXJJc05hTih2YWwpKSByZXR1cm4gaTsgLy8gSnNsaW50OiBpZ25vcmVcblx0XHR9XG5cdH1cblx0cmV0dXJuIC0xO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQ4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSkoKVxuXHQ/IE51bWJlci5pc05hTlxuXHQ6IF9fd2VicGFja19yZXF1aXJlX18oNTApO1xuXG5cbi8qKiovIH0pLFxuLyogNDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBudW1iZXJJc05hTiA9IE51bWJlci5pc05hTjtcblx0aWYgKHR5cGVvZiBudW1iZXJJc05hTiAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAhbnVtYmVySXNOYU4oe30pICYmIG51bWJlcklzTmFOKE5hTikgJiYgIW51bWJlcklzTmFOKDM0KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG5cdHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIHNpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyKVxuXG4gICwgYWJzID0gTWF0aC5hYnMsIGZsb29yID0gTWF0aC5mbG9vcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0aWYgKGlzTmFOKHZhbHVlKSkgcmV0dXJuIDA7XG5cdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0aWYgKCh2YWx1ZSA9PT0gMCkgfHwgIWlzRmluaXRlKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuXHRyZXR1cm4gc2lnbih2YWx1ZSkgKiBmbG9vcihhYnModmFsdWUpKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNTMpKClcblx0PyBNYXRoLnNpZ25cblx0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDU0KTtcblxuXG4vKioqLyB9KSxcbi8qIDUzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgc2lnbiA9IE1hdGguc2lnbjtcblx0aWYgKHR5cGVvZiBzaWduICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChzaWduKDEwKSA9PT0gMSkgJiYgKHNpZ24oLTIwKSA9PT0gLTEpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDU0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0aWYgKGlzTmFOKHZhbHVlKSB8fCAodmFsdWUgPT09IDApKSByZXR1cm4gdmFsdWU7XG5cdHJldHVybiB2YWx1ZSA+IDAgPyAxIDogLTE7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGlzVmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG52YXIgbWFwID0geyBmdW5jdGlvbjogdHJ1ZSwgb2JqZWN0OiB0cnVlIH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdHJldHVybiAoaXNWYWx1ZSh2YWx1ZSkgJiYgbWFwW3R5cGVvZiB2YWx1ZV0pIHx8IGZhbHNlO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDU2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gV29ya2Fyb3VuZCBmb3IgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjgwNFxuXG5cblxudmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsIHNoaW07XG5cbmlmICghX193ZWJwYWNrX3JlcXVpcmVfXygxOSkoKSkge1xuXHRzaGltID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uICgpIHtcblx0dmFyIG51bGxPYmplY3QsIHBvbHlQcm9wcywgZGVzYztcblx0aWYgKCFzaGltKSByZXR1cm4gY3JlYXRlO1xuXHRpZiAoc2hpbS5sZXZlbCAhPT0gMSkgcmV0dXJuIGNyZWF0ZTtcblxuXHRudWxsT2JqZWN0ID0ge307XG5cdHBvbHlQcm9wcyA9IHt9O1xuXHRkZXNjID0ge1xuXHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0dmFsdWU6IHVuZGVmaW5lZFxuXHR9O1xuXHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QucHJvdG90eXBlKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG5cdFx0aWYgKG5hbWUgPT09IFwiX19wcm90b19fXCIpIHtcblx0XHRcdHBvbHlQcm9wc1tuYW1lXSA9IHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHBvbHlQcm9wc1tuYW1lXSA9IGRlc2M7XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyhudWxsT2JqZWN0LCBwb2x5UHJvcHMpO1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzaGltLCBcIm51bGxQb2x5ZmlsbFwiLCB7XG5cdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR3cml0YWJsZTogZmFsc2UsXG5cdFx0dmFsdWU6IG51bGxPYmplY3Rcblx0fSk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChwcm90b3R5cGUsIHByb3BzKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZShwcm90b3R5cGUgPT09IG51bGwgPyBudWxsT2JqZWN0IDogcHJvdG90eXBlLCBwcm9wcyk7XG5cdH07XG59KCkpO1xuXG5cbi8qKiovIH0pLFxuLyogNTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduLCBvYmo7XG5cdGlmICh0eXBlb2YgYXNzaWduICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmYWxzZTtcblx0b2JqID0geyBmb286IFwicmF6XCIgfTtcblx0YXNzaWduKG9iaiwgeyBiYXI6IFwiZHdhXCIgfSwgeyB0cnp5OiBcInRyenlcIiB9KTtcblx0cmV0dXJuIChvYmouZm9vICsgb2JqLmJhciArIG9iai50cnp5KSA9PT0gXCJyYXpkd2F0cnp5XCI7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIGtleXMgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OSlcbiAgLCB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMClcbiAgLCBtYXggICA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkZXN0LCBzcmMgLyosIOKApnNyY24qLykge1xuXHR2YXIgZXJyb3IsIGksIGxlbmd0aCA9IG1heChhcmd1bWVudHMubGVuZ3RoLCAyKSwgYXNzaWduO1xuXHRkZXN0ID0gT2JqZWN0KHZhbHVlKGRlc3QpKTtcblx0YXNzaWduID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdHRyeSB7XG5cdFx0XHRkZXN0W2tleV0gPSBzcmNba2V5XTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoIWVycm9yKSBlcnJvciA9IGU7XG5cdFx0fVxuXHR9O1xuXHRmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoOyArK2kpIHtcblx0XHRzcmMgPSBhcmd1bWVudHNbaV07XG5cdFx0a2V5cyhzcmMpLmZvckVhY2goYXNzaWduKTtcblx0fVxuXHRpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCkgdGhyb3cgZXJyb3I7XG5cdHJldHVybiBkZXN0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDU5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCkoKVxuXHQ/IE9iamVjdC5rZXlzXG5cdDogX193ZWJwYWNrX3JlcXVpcmVfXyg2MSk7XG5cblxuLyoqKi8gfSksXG4vKiA2MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0dHJ5IHtcblx0XHRPYmplY3Qua2V5cyhcInByaW1pdGl2ZVwiKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuIHJldHVybiBmYWxzZTtcbn1cbn07XG5cblxuLyoqKi8gfSksXG4vKiA2MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNWYWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbnZhciBrZXlzID0gT2JqZWN0LmtleXM7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHRyZXR1cm4ga2V5cyhpc1ZhbHVlKG9iamVjdCkgPyBPYmplY3Qob2JqZWN0KSA6IG9iamVjdCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBEZXByZWNhdGVkXG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDYzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBzdHIgPSBcInJhemR3YXRyenlcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICh0eXBlb2Ygc3RyLmNvbnRhaW5zICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIChzdHIuY29udGFpbnMoXCJkd2FcIikgPT09IHRydWUpICYmIChzdHIuY29udGFpbnMoXCJmb29cIikgPT09IGZhbHNlKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA2NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaW5kZXhPZiA9IFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2VhcmNoU3RyaW5nLyosIHBvc2l0aW9uKi8pIHtcblx0cmV0dXJuIGluZGV4T2YuY2FsbCh0aGlzLCBzZWFyY2hTdHJpbmcsIGFyZ3VtZW50c1sxXSkgPiAtMTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA2NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgZCAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG4gICwgY2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG5cbiAgLCBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSwgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsXG4gICwgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZSwgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHlcbiAgLCBkZWZpbmVQcm9wZXJ0aWVzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXNcbiAgLCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCBkZXNjcmlwdG9yID0geyBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSB9XG5cbiAgLCBvbiwgb25jZSwgb2ZmLCBlbWl0LCBtZXRob2RzLCBkZXNjcmlwdG9ycywgYmFzZTtcblxub24gPSBmdW5jdGlvbiAodHlwZSwgbGlzdGVuZXIpIHtcblx0dmFyIGRhdGE7XG5cblx0Y2FsbGFibGUobGlzdGVuZXIpO1xuXG5cdGlmICghaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCAnX19lZV9fJykpIHtcblx0XHRkYXRhID0gZGVzY3JpcHRvci52YWx1ZSA9IGNyZWF0ZShudWxsKTtcblx0XHRkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19lZV9fJywgZGVzY3JpcHRvcik7XG5cdFx0ZGVzY3JpcHRvci52YWx1ZSA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0ZGF0YSA9IHRoaXMuX19lZV9fO1xuXHR9XG5cdGlmICghZGF0YVt0eXBlXSkgZGF0YVt0eXBlXSA9IGxpc3RlbmVyO1xuXHRlbHNlIGlmICh0eXBlb2YgZGF0YVt0eXBlXSA9PT0gJ29iamVjdCcpIGRhdGFbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG5cdGVsc2UgZGF0YVt0eXBlXSA9IFtkYXRhW3R5cGVdLCBsaXN0ZW5lcl07XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5vbmNlID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyKSB7XG5cdHZhciBvbmNlLCBzZWxmO1xuXG5cdGNhbGxhYmxlKGxpc3RlbmVyKTtcblx0c2VsZiA9IHRoaXM7XG5cdG9uLmNhbGwodGhpcywgdHlwZSwgb25jZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRvZmYuY2FsbChzZWxmLCB0eXBlLCBvbmNlKTtcblx0XHRhcHBseS5jYWxsKGxpc3RlbmVyLCB0aGlzLCBhcmd1bWVudHMpO1xuXHR9KTtcblxuXHRvbmNlLl9fZWVPbmNlTGlzdGVuZXJfXyA9IGxpc3RlbmVyO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbm9mZiA9IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xuXHR2YXIgZGF0YSwgbGlzdGVuZXJzLCBjYW5kaWRhdGUsIGk7XG5cblx0Y2FsbGFibGUobGlzdGVuZXIpO1xuXG5cdGlmICghaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCAnX19lZV9fJykpIHJldHVybiB0aGlzO1xuXHRkYXRhID0gdGhpcy5fX2VlX187XG5cdGlmICghZGF0YVt0eXBlXSkgcmV0dXJuIHRoaXM7XG5cdGxpc3RlbmVycyA9IGRhdGFbdHlwZV07XG5cblx0aWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdvYmplY3QnKSB7XG5cdFx0Zm9yIChpID0gMDsgKGNhbmRpZGF0ZSA9IGxpc3RlbmVyc1tpXSk7ICsraSkge1xuXHRcdFx0aWYgKChjYW5kaWRhdGUgPT09IGxpc3RlbmVyKSB8fFxuXHRcdFx0XHRcdChjYW5kaWRhdGUuX19lZU9uY2VMaXN0ZW5lcl9fID09PSBsaXN0ZW5lcikpIHtcblx0XHRcdFx0aWYgKGxpc3RlbmVycy5sZW5ndGggPT09IDIpIGRhdGFbdHlwZV0gPSBsaXN0ZW5lcnNbaSA/IDAgOiAxXTtcblx0XHRcdFx0ZWxzZSBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoKGxpc3RlbmVycyA9PT0gbGlzdGVuZXIpIHx8XG5cdFx0XHRcdChsaXN0ZW5lcnMuX19lZU9uY2VMaXN0ZW5lcl9fID09PSBsaXN0ZW5lcikpIHtcblx0XHRcdGRlbGV0ZSBkYXRhW3R5cGVdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuZW1pdCA9IGZ1bmN0aW9uICh0eXBlKSB7XG5cdHZhciBpLCBsLCBsaXN0ZW5lciwgbGlzdGVuZXJzLCBhcmdzO1xuXG5cdGlmICghaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCAnX19lZV9fJykpIHJldHVybjtcblx0bGlzdGVuZXJzID0gdGhpcy5fX2VlX19bdHlwZV07XG5cdGlmICghbGlzdGVuZXJzKSByZXR1cm47XG5cblx0aWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdvYmplY3QnKSB7XG5cdFx0bCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0YXJncyA9IG5ldyBBcnJheShsIC0gMSk7XG5cdFx0Zm9yIChpID0gMTsgaSA8IGw7ICsraSkgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG5cblx0XHRsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTtcblx0XHRmb3IgKGkgPSAwOyAobGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV0pOyArK2kpIHtcblx0XHRcdGFwcGx5LmNhbGwobGlzdGVuZXIsIHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcblx0XHRjYXNlIDE6XG5cdFx0XHRjYWxsLmNhbGwobGlzdGVuZXJzLCB0aGlzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgMjpcblx0XHRcdGNhbGwuY2FsbChsaXN0ZW5lcnMsIHRoaXMsIGFyZ3VtZW50c1sxXSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIDM6XG5cdFx0XHRjYWxsLmNhbGwobGlzdGVuZXJzLCB0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0bCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRhcmdzID0gbmV3IEFycmF5KGwgLSAxKTtcblx0XHRcdGZvciAoaSA9IDE7IGkgPCBsOyArK2kpIHtcblx0XHRcdFx0YXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG5cdFx0XHR9XG5cdFx0XHRhcHBseS5jYWxsKGxpc3RlbmVycywgdGhpcywgYXJncyk7XG5cdFx0fVxuXHR9XG59O1xuXG5tZXRob2RzID0ge1xuXHRvbjogb24sXG5cdG9uY2U6IG9uY2UsXG5cdG9mZjogb2ZmLFxuXHRlbWl0OiBlbWl0XG59O1xuXG5kZXNjcmlwdG9ycyA9IHtcblx0b246IGQob24pLFxuXHRvbmNlOiBkKG9uY2UpLFxuXHRvZmY6IGQob2ZmKSxcblx0ZW1pdDogZChlbWl0KVxufTtcblxuYmFzZSA9IGRlZmluZVByb3BlcnRpZXMoe30sIGRlc2NyaXB0b3JzKTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZnVuY3Rpb24gKG8pIHtcblx0cmV0dXJuIChvID09IG51bGwpID8gY3JlYXRlKGJhc2UpIDogZGVmaW5lUHJvcGVydGllcyhPYmplY3QobyksIGRlc2NyaXB0b3JzKTtcbn07XG5leHBvcnRzLm1ldGhvZHMgPSBtZXRob2RzO1xuXG5cbi8qKiovIH0pLFxuLyogNjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIHZhbGlkVHlwZXMgPSB7IG9iamVjdDogdHJ1ZSwgc3ltYm9sOiB0cnVlIH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgc3ltYm9sO1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXHRzeW1ib2wgPSBTeW1ib2woJ3Rlc3Qgc3ltYm9sJyk7XG5cdHRyeSB7IFN0cmluZyhzeW1ib2wpOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIFJldHVybiAndHJ1ZScgYWxzbyBmb3IgcG9seWZpbGxzXG5cdGlmICghdmFsaWRUeXBlc1t0eXBlb2YgU3ltYm9sLml0ZXJhdG9yXSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIXZhbGlkVHlwZXNbdHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZV0pIHJldHVybiBmYWxzZTtcblx0aWYgKCF2YWxpZFR5cGVzW3R5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWddKSByZXR1cm4gZmFsc2U7XG5cblx0cmV0dXJuIHRydWU7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBFUzIwMTUgU3ltYm9sIHBvbHlmaWxsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgKG9yIHBhcnRpYWxseSkgc3VwcG9ydCBpdFxuXG5cblxudmFyIGQgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuICAsIHZhbGlkYXRlU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OClcblxuICAsIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsIGRlZmluZVByb3BlcnRpZXMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllc1xuICAsIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LCBvYmpQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlXG4gICwgTmF0aXZlU3ltYm9sLCBTeW1ib2xQb2x5ZmlsbCwgSGlkZGVuU3ltYm9sLCBnbG9iYWxTeW1ib2xzID0gY3JlYXRlKG51bGwpXG4gICwgaXNOYXRpdmVTYWZlO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJykge1xuXHROYXRpdmVTeW1ib2wgPSBTeW1ib2w7XG5cdHRyeSB7XG5cdFx0U3RyaW5nKE5hdGl2ZVN5bWJvbCgpKTtcblx0XHRpc05hdGl2ZVNhZmUgPSB0cnVlO1xuXHR9IGNhdGNoIChpZ25vcmUpIHt9XG59XG5cbnZhciBnZW5lcmF0ZU5hbWUgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgY3JlYXRlZCA9IGNyZWF0ZShudWxsKTtcblx0cmV0dXJuIGZ1bmN0aW9uIChkZXNjKSB7XG5cdFx0dmFyIHBvc3RmaXggPSAwLCBuYW1lLCBpZTExQnVnV29ya2Fyb3VuZDtcblx0XHR3aGlsZSAoY3JlYXRlZFtkZXNjICsgKHBvc3RmaXggfHwgJycpXSkgKytwb3N0Zml4O1xuXHRcdGRlc2MgKz0gKHBvc3RmaXggfHwgJycpO1xuXHRcdGNyZWF0ZWRbZGVzY10gPSB0cnVlO1xuXHRcdG5hbWUgPSAnQEAnICsgZGVzYztcblx0XHRkZWZpbmVQcm9wZXJ0eShvYmpQcm90b3R5cGUsIG5hbWUsIGQuZ3MobnVsbCwgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHQvLyBGb3IgSUUxMSBpc3N1ZSBzZWU6XG5cdFx0XHQvLyBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFja2RldGFpbC92aWV3LzE5Mjg1MDgvXG5cdFx0XHQvLyAgICBpZTExLWJyb2tlbi1nZXR0ZXJzLW9uLWRvbS1vYmplY3RzXG5cdFx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWtvby9lczYtc3ltYm9sL2lzc3Vlcy8xMlxuXHRcdFx0aWYgKGllMTFCdWdXb3JrYXJvdW5kKSByZXR1cm47XG5cdFx0XHRpZTExQnVnV29ya2Fyb3VuZCA9IHRydWU7XG5cdFx0XHRkZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCBkKHZhbHVlKSk7XG5cdFx0XHRpZTExQnVnV29ya2Fyb3VuZCA9IGZhbHNlO1xuXHRcdH0pKTtcblx0XHRyZXR1cm4gbmFtZTtcblx0fTtcbn0oKSk7XG5cbi8vIEludGVybmFsIGNvbnN0cnVjdG9yIChub3Qgb25lIGV4cG9zZWQpIGZvciBjcmVhdGluZyBTeW1ib2wgaW5zdGFuY2VzLlxuLy8gVGhpcyBvbmUgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBgc29tZVN5bWJvbCBpbnN0YW5jZW9mIFN5bWJvbGAgYWx3YXlzIHJldHVybiBmYWxzZVxuSGlkZGVuU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKGRlc2NyaXB0aW9uKSB7XG5cdGlmICh0aGlzIGluc3RhbmNlb2YgSGlkZGVuU3ltYm9sKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcblx0cmV0dXJuIFN5bWJvbFBvbHlmaWxsKGRlc2NyaXB0aW9uKTtcbn07XG5cbi8vIEV4cG9zZWQgYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIChyZXR1cm5zIGluc3RhbmNlcyBvZiBIaWRkZW5TeW1ib2wpXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbFBvbHlmaWxsID0gZnVuY3Rpb24gU3ltYm9sKGRlc2NyaXB0aW9uKSB7XG5cdHZhciBzeW1ib2w7XG5cdGlmICh0aGlzIGluc3RhbmNlb2YgU3ltYm9sKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcblx0aWYgKGlzTmF0aXZlU2FmZSkgcmV0dXJuIE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbik7XG5cdHN5bWJvbCA9IGNyZWF0ZShIaWRkZW5TeW1ib2wucHJvdG90eXBlKTtcblx0ZGVzY3JpcHRpb24gPSAoZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKGRlc2NyaXB0aW9uKSk7XG5cdHJldHVybiBkZWZpbmVQcm9wZXJ0aWVzKHN5bWJvbCwge1xuXHRcdF9fZGVzY3JpcHRpb25fXzogZCgnJywgZGVzY3JpcHRpb24pLFxuXHRcdF9fbmFtZV9fOiBkKCcnLCBnZW5lcmF0ZU5hbWUoZGVzY3JpcHRpb24pKVxuXHR9KTtcbn07XG5kZWZpbmVQcm9wZXJ0aWVzKFN5bWJvbFBvbHlmaWxsLCB7XG5cdGZvcjogZChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0aWYgKGdsb2JhbFN5bWJvbHNba2V5XSkgcmV0dXJuIGdsb2JhbFN5bWJvbHNba2V5XTtcblx0XHRyZXR1cm4gKGdsb2JhbFN5bWJvbHNba2V5XSA9IFN5bWJvbFBvbHlmaWxsKFN0cmluZyhrZXkpKSk7XG5cdH0pLFxuXHRrZXlGb3I6IGQoZnVuY3Rpb24gKHMpIHtcblx0XHR2YXIga2V5O1xuXHRcdHZhbGlkYXRlU3ltYm9sKHMpO1xuXHRcdGZvciAoa2V5IGluIGdsb2JhbFN5bWJvbHMpIGlmIChnbG9iYWxTeW1ib2xzW2tleV0gPT09IHMpIHJldHVybiBrZXk7XG5cdH0pLFxuXG5cdC8vIFRvIGVuc3VyZSBwcm9wZXIgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIG90aGVyIG5hdGl2ZSBmdW5jdGlvbnMgKGUuZy4gQXJyYXkuZnJvbSlcblx0Ly8gZmFsbGJhY2sgdG8gZXZlbnR1YWwgbmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIGdpdmVuIHN5bWJvbFxuXHRoYXNJbnN0YW5jZTogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wuaGFzSW5zdGFuY2UpIHx8IFN5bWJvbFBvbHlmaWxsKCdoYXNJbnN0YW5jZScpKSxcblx0aXNDb25jYXRTcHJlYWRhYmxlOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUpIHx8XG5cdFx0U3ltYm9sUG9seWZpbGwoJ2lzQ29uY2F0U3ByZWFkYWJsZScpKSxcblx0aXRlcmF0b3I6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLml0ZXJhdG9yKSB8fCBTeW1ib2xQb2x5ZmlsbCgnaXRlcmF0b3InKSksXG5cdG1hdGNoOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5tYXRjaCkgfHwgU3ltYm9sUG9seWZpbGwoJ21hdGNoJykpLFxuXHRyZXBsYWNlOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5yZXBsYWNlKSB8fCBTeW1ib2xQb2x5ZmlsbCgncmVwbGFjZScpKSxcblx0c2VhcmNoOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5zZWFyY2gpIHx8IFN5bWJvbFBvbHlmaWxsKCdzZWFyY2gnKSksXG5cdHNwZWNpZXM6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnNwZWNpZXMpIHx8IFN5bWJvbFBvbHlmaWxsKCdzcGVjaWVzJykpLFxuXHRzcGxpdDogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wuc3BsaXQpIHx8IFN5bWJvbFBvbHlmaWxsKCdzcGxpdCcpKSxcblx0dG9QcmltaXRpdmU6IGQoJycsIChOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnRvUHJpbWl0aXZlKSB8fCBTeW1ib2xQb2x5ZmlsbCgndG9QcmltaXRpdmUnKSksXG5cdHRvU3RyaW5nVGFnOiBkKCcnLCAoTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC50b1N0cmluZ1RhZykgfHwgU3ltYm9sUG9seWZpbGwoJ3RvU3RyaW5nVGFnJykpLFxuXHR1bnNjb3BhYmxlczogZCgnJywgKE5hdGl2ZVN5bWJvbCAmJiBOYXRpdmVTeW1ib2wudW5zY29wYWJsZXMpIHx8IFN5bWJvbFBvbHlmaWxsKCd1bnNjb3BhYmxlcycpKVxufSk7XG5cbi8vIEludGVybmFsIHR3ZWFrcyBmb3IgcmVhbCBzeW1ib2wgcHJvZHVjZXJcbmRlZmluZVByb3BlcnRpZXMoSGlkZGVuU3ltYm9sLnByb3RvdHlwZSwge1xuXHRjb25zdHJ1Y3RvcjogZChTeW1ib2xQb2x5ZmlsbCksXG5cdHRvU3RyaW5nOiBkKCcnLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9fbmFtZV9fOyB9KVxufSk7XG5cbi8vIFByb3BlciBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGV4cG9zZWQgb24gU3ltYm9sLnByb3RvdHlwZVxuLy8gVGhleSB3b24ndCBiZSBhY2Nlc3NpYmxlIG9uIHByb2R1Y2VkIHN5bWJvbCBpbnN0YW5jZXMgYXMgdGhleSBkZXJpdmUgZnJvbSBIaWRkZW5TeW1ib2wucHJvdG90eXBlXG5kZWZpbmVQcm9wZXJ0aWVzKFN5bWJvbFBvbHlmaWxsLnByb3RvdHlwZSwge1xuXHR0b1N0cmluZzogZChmdW5jdGlvbiAoKSB7IHJldHVybiAnU3ltYm9sICgnICsgdmFsaWRhdGVTeW1ib2wodGhpcykuX19kZXNjcmlwdGlvbl9fICsgJyknOyB9KSxcblx0dmFsdWVPZjogZChmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0ZVN5bWJvbCh0aGlzKTsgfSlcbn0pO1xuZGVmaW5lUHJvcGVydHkoU3ltYm9sUG9seWZpbGwucHJvdG90eXBlLCBTeW1ib2xQb2x5ZmlsbC50b1ByaW1pdGl2ZSwgZCgnJywgZnVuY3Rpb24gKCkge1xuXHR2YXIgc3ltYm9sID0gdmFsaWRhdGVTeW1ib2wodGhpcyk7XG5cdGlmICh0eXBlb2Ygc3ltYm9sID09PSAnc3ltYm9sJykgcmV0dXJuIHN5bWJvbDtcblx0cmV0dXJuIHN5bWJvbC50b1N0cmluZygpO1xufSkpO1xuZGVmaW5lUHJvcGVydHkoU3ltYm9sUG9seWZpbGwucHJvdG90eXBlLCBTeW1ib2xQb2x5ZmlsbC50b1N0cmluZ1RhZywgZCgnYycsICdTeW1ib2wnKSk7XG5cbi8vIFByb3BlciBpbXBsZW1lbnRhdG9uIG9mIHRvUHJpbWl0aXZlIGFuZCB0b1N0cmluZ1RhZyBmb3IgcmV0dXJuZWQgc3ltYm9sIGluc3RhbmNlc1xuZGVmaW5lUHJvcGVydHkoSGlkZGVuU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sUG9seWZpbGwudG9TdHJpbmdUYWcsXG5cdGQoJ2MnLCBTeW1ib2xQb2x5ZmlsbC5wcm90b3R5cGVbU3ltYm9sUG9seWZpbGwudG9TdHJpbmdUYWddKSk7XG5cbi8vIE5vdGU6IEl0J3MgaW1wb3J0YW50IHRvIGRlZmluZSBgdG9QcmltaXRpdmVgIGFzIGxhc3Qgb25lLCBhcyBzb21lIGltcGxlbWVudGF0aW9uc1xuLy8gaW1wbGVtZW50IGB0b1ByaW1pdGl2ZWAgbmF0aXZlbHkgd2l0aG91dCBpbXBsZW1lbnRpbmcgYHRvU3RyaW5nVGFnYCAob3Igb3RoZXIgc3BlY2lmaWVkIHN5bWJvbHMpXG4vLyBBbmQgdGhhdCBtYXkgaW52b2tlIGVycm9yIGluIGRlZmluaXRpb24gZmxvdzpcbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL21lZGlrb28vZXM2LXN5bWJvbC9pc3N1ZXMvMTMjaXNzdWVjb21tZW50LTE2NDE0NjE0OVxuZGVmaW5lUHJvcGVydHkoSGlkZGVuU3ltYm9sLnByb3RvdHlwZSwgU3ltYm9sUG9seWZpbGwudG9QcmltaXRpdmUsXG5cdGQoJ2MnLCBTeW1ib2xQb2x5ZmlsbC5wcm90b3R5cGVbU3ltYm9sUG9seWZpbGwudG9QcmltaXRpdmVdKSk7XG5cblxuLyoqKi8gfSksXG4vKiA2OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0aWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHRocm93IG5ldyBUeXBlRXJyb3IodmFsdWUgKyBcIiBpcyBub3QgYSBzeW1ib2xcIik7XG5cdHJldHVybiB2YWx1ZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA2OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh4KSB7XG5cdGlmICgheCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIHggPT09ICdzeW1ib2wnKSByZXR1cm4gdHJ1ZTtcblx0aWYgKCF4LmNvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7XG5cdGlmICh4LmNvbnN0cnVjdG9yLm5hbWUgIT09ICdTeW1ib2wnKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAoeFt4LmNvbnN0cnVjdG9yLnRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCcpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDcwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpc0FyZ3VtZW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNylcbiAgLCBpc1ZhbHVlICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNClcbiAgLCBpc1N0cmluZyAgICA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG5cbnZhciBpdGVyYXRvclN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMikuaXRlcmF0b3JcbiAgLCBpc0FycmF5ICAgICAgICA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdGlmICghaXNWYWx1ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gdHJ1ZTtcblx0aWYgKGlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuIHRydWU7XG5cdGlmIChpc0FyZ3VtZW50cyh2YWx1ZSkpIHJldHVybiB0cnVlO1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlW2l0ZXJhdG9yU3ltYm9sXSA9PT0gXCJmdW5jdGlvblwiO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDcxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBpc0FyZ3VtZW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNylcbiAgLCBjYWxsYWJsZSAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcbiAgLCBpc1N0cmluZyAgICA9IF9fd2VicGFja19yZXF1aXJlX18oOClcbiAgLCBnZXQgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzIpO1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXksIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCwgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgY2IgLyosIHRoaXNBcmcqLykge1xuXHR2YXIgbW9kZSwgdGhpc0FyZyA9IGFyZ3VtZW50c1syXSwgcmVzdWx0LCBkb0JyZWFrLCBicm9rZW4sIGksIGxlbmd0aCwgY2hhciwgY29kZTtcblx0aWYgKGlzQXJyYXkoaXRlcmFibGUpIHx8IGlzQXJndW1lbnRzKGl0ZXJhYmxlKSkgbW9kZSA9IFwiYXJyYXlcIjtcblx0ZWxzZSBpZiAoaXNTdHJpbmcoaXRlcmFibGUpKSBtb2RlID0gXCJzdHJpbmdcIjtcblx0ZWxzZSBpdGVyYWJsZSA9IGdldChpdGVyYWJsZSk7XG5cblx0Y2FsbGFibGUoY2IpO1xuXHRkb0JyZWFrID0gZnVuY3Rpb24gKCkge1xuXHRcdGJyb2tlbiA9IHRydWU7XG5cdH07XG5cdGlmIChtb2RlID09PSBcImFycmF5XCIpIHtcblx0XHRzb21lLmNhbGwoaXRlcmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0Y2FsbC5jYWxsKGNiLCB0aGlzQXJnLCB2YWx1ZSwgZG9CcmVhayk7XG5cdFx0XHRyZXR1cm4gYnJva2VuO1xuXHRcdH0pO1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAobW9kZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGxlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aDtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcblx0XHRcdGNoYXIgPSBpdGVyYWJsZVtpXTtcblx0XHRcdGlmIChpICsgMSA8IGxlbmd0aCkge1xuXHRcdFx0XHRjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApO1xuXHRcdFx0XHRpZiAoY29kZSA+PSAweGQ4MDAgJiYgY29kZSA8PSAweGRiZmYpIGNoYXIgKz0gaXRlcmFibGVbKytpXTtcblx0XHRcdH1cblx0XHRcdGNhbGwuY2FsbChjYiwgdGhpc0FyZywgY2hhciwgZG9CcmVhayk7XG5cdFx0XHRpZiAoYnJva2VuKSBicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHJlc3VsdCA9IGl0ZXJhYmxlLm5leHQoKTtcblxuXHR3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG5cdFx0Y2FsbC5jYWxsKGNiLCB0aGlzQXJnLCByZXN1bHQudmFsdWUsIGRvQnJlYWspO1xuXHRcdGlmIChicm9rZW4pIHJldHVybjtcblx0XHRyZXN1bHQgPSBpdGVyYWJsZS5uZXh0KCk7XG5cdH1cbn07XG5cblxuLyoqKi8gfSksXG4vKiA3MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXNBcmd1bWVudHMgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpXG4gICwgaXNTdHJpbmcgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpXG4gICwgQXJyYXlJdGVyYXRvciAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKVxuICAsIFN0cmluZ0l0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MylcbiAgLCBpdGVyYWJsZSAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpXG4gICwgaXRlcmF0b3JTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLml0ZXJhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcblx0aWYgKHR5cGVvZiBpdGVyYWJsZShvYmopW2l0ZXJhdG9yU3ltYm9sXSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gb2JqW2l0ZXJhdG9yU3ltYm9sXSgpO1xuXHRpZiAoaXNBcmd1bWVudHMob2JqKSkgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKG9iaik7XG5cdGlmIChpc1N0cmluZyhvYmopKSByZXR1cm4gbmV3IFN0cmluZ0l0ZXJhdG9yKG9iaik7XG5cdHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcihvYmopO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDczICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBzZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNilcbiAgLCBjb250YWlucyAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpXG4gICwgZCAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG4gICwgU3ltYm9sICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpXG4gICwgSXRlcmF0b3IgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LCBBcnJheUl0ZXJhdG9yO1xuXG5BcnJheUl0ZXJhdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJyLCBraW5kKSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBBcnJheUl0ZXJhdG9yKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnXCIpO1xuXHRJdGVyYXRvci5jYWxsKHRoaXMsIGFycik7XG5cdGlmICgha2luZCkga2luZCA9IFwidmFsdWVcIjtcblx0ZWxzZSBpZiAoY29udGFpbnMuY2FsbChraW5kLCBcImtleSt2YWx1ZVwiKSkga2luZCA9IFwia2V5K3ZhbHVlXCI7XG5cdGVsc2UgaWYgKGNvbnRhaW5zLmNhbGwoa2luZCwgXCJrZXlcIikpIGtpbmQgPSBcImtleVwiO1xuXHRlbHNlIGtpbmQgPSBcInZhbHVlXCI7XG5cdGRlZmluZVByb3BlcnR5KHRoaXMsIFwiX19raW5kX19cIiwgZChcIlwiLCBraW5kKSk7XG59O1xuaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZihBcnJheUl0ZXJhdG9yLCBJdGVyYXRvcik7XG5cbi8vIEludGVybmFsICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSBkb2Vzbid0IGV4cG9zZSBpdHMgY29uc3RydWN0b3JcbmRlbGV0ZSBBcnJheUl0ZXJhdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcblxuQXJyYXlJdGVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yLnByb3RvdHlwZSwge1xuXHRfcmVzb2x2ZTogZChmdW5jdGlvbiAoaSkge1xuXHRcdGlmICh0aGlzLl9fa2luZF9fID09PSBcInZhbHVlXCIpIHJldHVybiB0aGlzLl9fbGlzdF9fW2ldO1xuXHRcdGlmICh0aGlzLl9fa2luZF9fID09PSBcImtleSt2YWx1ZVwiKSByZXR1cm4gW2ksIHRoaXMuX19saXN0X19baV1dO1xuXHRcdHJldHVybiBpO1xuXHR9KVxufSk7XG5kZWZpbmVQcm9wZXJ0eShBcnJheUl0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCBkKFwiY1wiLCBcIkFycmF5IEl0ZXJhdG9yXCIpKTtcblxuXG4vKioqLyB9KSxcbi8qIDc0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBjb3B5ICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSlcbiAgLCBub3JtYWxpemVPcHRpb25zID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSlcbiAgLCBlbnN1cmVDYWxsYWJsZSAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuICAsIG1hcCAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgwKVxuICAsIGNhbGxhYmxlICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpXG4gICwgdmFsaWRWYWx1ZSAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMClcblxuICAsIGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHlcbiAgLCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCBkZWZpbmU7XG5cbmRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBkZXNjLCBvcHRpb25zKSB7XG5cdHZhciB2YWx1ZSA9IHZhbGlkVmFsdWUoZGVzYykgJiYgY2FsbGFibGUoZGVzYy52YWx1ZSksIGRncztcblx0ZGdzID0gY29weShkZXNjKTtcblx0ZGVsZXRlIGRncy53cml0YWJsZTtcblx0ZGVsZXRlIGRncy52YWx1ZTtcblx0ZGdzLmdldCA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoIW9wdGlvbnMub3ZlcndyaXRlRGVmaW5pdGlvbiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsIG5hbWUpKSByZXR1cm4gdmFsdWU7XG5cdFx0ZGVzYy52YWx1ZSA9IGJpbmQuY2FsbCh2YWx1ZSwgb3B0aW9ucy5yZXNvbHZlQ29udGV4dCA/IG9wdGlvbnMucmVzb2x2ZUNvbnRleHQodGhpcykgOiB0aGlzKTtcblx0XHRkZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCBkZXNjKTtcblx0XHRyZXR1cm4gdGhpc1tuYW1lXTtcblx0fTtcblx0cmV0dXJuIGRncztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHByb3BzLyosIG9wdGlvbnMqLykge1xuXHR2YXIgb3B0aW9ucyA9IG5vcm1hbGl6ZU9wdGlvbnMoYXJndW1lbnRzWzFdKTtcblx0aWYgKG9wdGlvbnMucmVzb2x2ZUNvbnRleHQgIT0gbnVsbCkgZW5zdXJlQ2FsbGFibGUob3B0aW9ucy5yZXNvbHZlQ29udGV4dCk7XG5cdHJldHVybiBtYXAocHJvcHMsIGZ1bmN0aW9uIChkZXNjLCBuYW1lKSB7IHJldHVybiBkZWZpbmUobmFtZSwgZGVzYywgb3B0aW9ucyk7IH0pO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDc1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBhRnJvbSAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KVxuICAsIGFzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTApXG4gICwgdmFsdWUgID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqLyosIHByb3BlcnR5TmFtZXMsIG9wdGlvbnMqLykge1xuXHR2YXIgY29weSA9IE9iamVjdCh2YWx1ZShvYmopKSwgcHJvcGVydHlOYW1lcyA9IGFyZ3VtZW50c1sxXSwgb3B0aW9ucyA9IE9iamVjdChhcmd1bWVudHNbMl0pO1xuXHRpZiAoY29weSAhPT0gb2JqICYmICFwcm9wZXJ0eU5hbWVzKSByZXR1cm4gY29weTtcblx0dmFyIHJlc3VsdCA9IHt9O1xuXHRpZiAocHJvcGVydHlOYW1lcykge1xuXHRcdGFGcm9tKHByb3BlcnR5TmFtZXMsIGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUpIHtcblx0XHRcdGlmIChvcHRpb25zLmVuc3VyZSB8fCBwcm9wZXJ0eU5hbWUgaW4gb2JqKSByZXN1bHRbcHJvcGVydHlOYW1lXSA9IG9ialtwcm9wZXJ0eU5hbWVdO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGFzc2lnbihyZXN1bHQsIG9iaik7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNzcpKClcblx0PyBBcnJheS5mcm9tXG5cdDogX193ZWJwYWNrX3JlcXVpcmVfXyg3OCk7XG5cblxuLyoqKi8gfSksXG4vKiA3NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIGZyb20gPSBBcnJheS5mcm9tLCBhcnIsIHJlc3VsdDtcblx0aWYgKHR5cGVvZiBmcm9tICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmYWxzZTtcblx0YXJyID0gW1wicmF6XCIsIFwiZHdhXCJdO1xuXHRyZXN1bHQgPSBmcm9tKGFycik7XG5cdHJldHVybiBCb29sZWFuKHJlc3VsdCAmJiAocmVzdWx0ICE9PSBhcnIpICYmIChyZXN1bHRbMV0gPT09IFwiZHdhXCIpKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgaXRlcmF0b3JTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLml0ZXJhdG9yXG4gICwgaXNBcmd1bWVudHMgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpXG4gICwgaXNGdW5jdGlvbiAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KVxuICAsIHRvUG9zSW50ICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOClcbiAgLCBjYWxsYWJsZSAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcbiAgLCB2YWxpZFZhbHVlICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMClcbiAgLCBpc1ZhbHVlICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNClcbiAgLCBpc1N0cmluZyAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oOClcbiAgLCBpc0FycmF5ICAgICAgICA9IEFycmF5LmlzQXJyYXlcbiAgLCBjYWxsICAgICAgICAgICA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsXG4gICwgZGVzYyAgICAgICAgICAgPSB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBudWxsIH1cbiAgLCBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFycmF5TGlrZSAvKiwgbWFwRm4sIHRoaXNBcmcqLykge1xuXHR2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV1cblx0ICAsIHRoaXNBcmcgPSBhcmd1bWVudHNbMl1cblx0ICAsIENvbnRleHRcblx0ICAsIGlcblx0ICAsIGpcblx0ICAsIGFyclxuXHQgICwgbGVuZ3RoXG5cdCAgLCBjb2RlXG5cdCAgLCBpdGVyYXRvclxuXHQgICwgcmVzdWx0XG5cdCAgLCBnZXRJdGVyYXRvclxuXHQgICwgdmFsdWU7XG5cblx0YXJyYXlMaWtlID0gT2JqZWN0KHZhbGlkVmFsdWUoYXJyYXlMaWtlKSk7XG5cblx0aWYgKGlzVmFsdWUobWFwRm4pKSBjYWxsYWJsZShtYXBGbik7XG5cdGlmICghdGhpcyB8fCB0aGlzID09PSBBcnJheSB8fCAhaXNGdW5jdGlvbih0aGlzKSkge1xuXHRcdC8vIFJlc3VsdDogUGxhaW4gYXJyYXlcblx0XHRpZiAoIW1hcEZuKSB7XG5cdFx0XHRpZiAoaXNBcmd1bWVudHMoYXJyYXlMaWtlKSkge1xuXHRcdFx0XHQvLyBTb3VyY2U6IEFyZ3VtZW50c1xuXHRcdFx0XHRsZW5ndGggPSBhcnJheUxpa2UubGVuZ3RoO1xuXHRcdFx0XHRpZiAobGVuZ3RoICE9PSAxKSByZXR1cm4gQXJyYXkuYXBwbHkobnVsbCwgYXJyYXlMaWtlKTtcblx0XHRcdFx0YXJyID0gbmV3IEFycmF5KDEpO1xuXHRcdFx0XHRhcnJbMF0gPSBhcnJheUxpa2VbMF07XG5cdFx0XHRcdHJldHVybiBhcnI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNBcnJheShhcnJheUxpa2UpKSB7XG5cdFx0XHRcdC8vIFNvdXJjZTogQXJyYXlcblx0XHRcdFx0YXJyID0gbmV3IEFycmF5KGxlbmd0aCA9IGFycmF5TGlrZS5sZW5ndGgpO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIGFycltpXSA9IGFycmF5TGlrZVtpXTtcblx0XHRcdFx0cmV0dXJuIGFycjtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXJyID0gW107XG5cdH0gZWxzZSB7XG5cdFx0Ly8gUmVzdWx0OiBOb24gcGxhaW4gYXJyYXlcblx0XHRDb250ZXh0ID0gdGhpcztcblx0fVxuXG5cdGlmICghaXNBcnJheShhcnJheUxpa2UpKSB7XG5cdFx0aWYgKChnZXRJdGVyYXRvciA9IGFycmF5TGlrZVtpdGVyYXRvclN5bWJvbF0pICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFNvdXJjZTogSXRlcmF0b3Jcblx0XHRcdGl0ZXJhdG9yID0gY2FsbGFibGUoZ2V0SXRlcmF0b3IpLmNhbGwoYXJyYXlMaWtlKTtcblx0XHRcdGlmIChDb250ZXh0KSBhcnIgPSBuZXcgQ29udGV4dCgpO1xuXHRcdFx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuXHRcdFx0aSA9IDA7XG5cdFx0XHR3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG5cdFx0XHRcdHZhbHVlID0gbWFwRm4gPyBjYWxsLmNhbGwobWFwRm4sIHRoaXNBcmcsIHJlc3VsdC52YWx1ZSwgaSkgOiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdGlmIChDb250ZXh0KSB7XG5cdFx0XHRcdFx0ZGVzYy52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0XHRcdGRlZmluZVByb3BlcnR5KGFyciwgaSwgZGVzYyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YXJyW2ldID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuXHRcdFx0XHQrK2k7XG5cdFx0XHR9XG5cdFx0XHRsZW5ndGggPSBpO1xuXHRcdH0gZWxzZSBpZiAoaXNTdHJpbmcoYXJyYXlMaWtlKSkge1xuXHRcdFx0Ly8gU291cmNlOiBTdHJpbmdcblx0XHRcdGxlbmd0aCA9IGFycmF5TGlrZS5sZW5ndGg7XG5cdFx0XHRpZiAoQ29udGV4dCkgYXJyID0gbmV3IENvbnRleHQoKTtcblx0XHRcdGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dmFsdWUgPSBhcnJheUxpa2VbaV07XG5cdFx0XHRcdGlmIChpICsgMSA8IGxlbmd0aCkge1xuXHRcdFx0XHRcdGNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KDApO1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtZGVwdGhcblx0XHRcdFx0XHRpZiAoY29kZSA+PSAweGQ4MDAgJiYgY29kZSA8PSAweGRiZmYpIHZhbHVlICs9IGFycmF5TGlrZVsrK2ldO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhbHVlID0gbWFwRm4gPyBjYWxsLmNhbGwobWFwRm4sIHRoaXNBcmcsIHZhbHVlLCBqKSA6IHZhbHVlO1xuXHRcdFx0XHRpZiAoQ29udGV4dCkge1xuXHRcdFx0XHRcdGRlc2MudmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRkZWZpbmVQcm9wZXJ0eShhcnIsIGosIGRlc2MpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFycltqXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCsrajtcblx0XHRcdH1cblx0XHRcdGxlbmd0aCA9IGo7XG5cdFx0fVxuXHR9XG5cdGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIFNvdXJjZTogYXJyYXkgb3IgYXJyYXktbGlrZVxuXHRcdGxlbmd0aCA9IHRvUG9zSW50KGFycmF5TGlrZS5sZW5ndGgpO1xuXHRcdGlmIChDb250ZXh0KSBhcnIgPSBuZXcgQ29udGV4dChsZW5ndGgpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdFx0dmFsdWUgPSBtYXBGbiA/IGNhbGwuY2FsbChtYXBGbiwgdGhpc0FyZywgYXJyYXlMaWtlW2ldLCBpKSA6IGFycmF5TGlrZVtpXTtcblx0XHRcdGlmIChDb250ZXh0KSB7XG5cdFx0XHRcdGRlc2MudmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0ZGVmaW5lUHJvcGVydHkoYXJyLCBpLCBkZXNjKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFycltpXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoQ29udGV4dCkge1xuXHRcdGRlc2MudmFsdWUgPSBudWxsO1xuXHRcdGFyci5sZW5ndGggPSBsZW5ndGg7XG5cdH1cblx0cmV0dXJuIGFycjtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA3OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgb2JqVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLCBpZCA9IG9ialRvU3RyaW5nLmNhbGwoX193ZWJwYWNrX3JlcXVpcmVfXygxNykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IGlkO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDgwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBjYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSlcbiAgLCBmb3JFYWNoICA9IF9fd2VicGFja19yZXF1aXJlX18oODEpXG4gICwgY2FsbCAgICAgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqLCBjYiAvKiwgdGhpc0FyZyovKSB7XG5cdHZhciByZXN1bHQgPSB7fSwgdGhpc0FyZyA9IGFyZ3VtZW50c1syXTtcblx0Y2FsbGFibGUoY2IpO1xuXHRmb3JFYWNoKG9iaiwgZnVuY3Rpb24gKHZhbHVlLCBrZXksIHRhcmdldE9iaiwgaW5kZXgpIHtcblx0XHRyZXN1bHRba2V5XSA9IGNhbGwuY2FsbChjYiwgdGhpc0FyZywgdmFsdWUsIGtleSwgdGFyZ2V0T2JqLCBpbmRleCk7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDgxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MikoXCJmb3JFYWNoXCIpO1xuXG5cbi8qKiovIH0pLFxuLyogODIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBJbnRlcm5hbCBtZXRob2QsIHVzZWQgYnkgaXRlcmF0aW9uIGZ1bmN0aW9ucy5cbi8vIENhbGxzIGEgZnVuY3Rpb24gZm9yIGVhY2gga2V5LXZhbHVlIHBhaXIgZm91bmQgaW4gb2JqZWN0XG4vLyBPcHRpb25hbGx5IHRha2VzIGNvbXBhcmVGbiB0byBpdGVyYXRlIG9iamVjdCBpbiBzcGVjaWZpYyBvcmRlclxuXG5cblxudmFyIGNhbGxhYmxlICAgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuICAsIHZhbHVlICAgICAgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKVxuICAsIGJpbmQgICAgICAgICAgICAgICAgICAgID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbiAgLCBjYWxsICAgICAgICAgICAgICAgICAgICA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsXG4gICwga2V5cyAgICAgICAgICAgICAgICAgICAgPSBPYmplY3Qua2V5c1xuICAsIG9ialByb3BlcnR5SXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBkZWZWYWwpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChvYmosIGNiIC8qLCB0aGlzQXJnLCBjb21wYXJlRm4qLykge1xuXHRcdHZhciBsaXN0LCB0aGlzQXJnID0gYXJndW1lbnRzWzJdLCBjb21wYXJlRm4gPSBhcmd1bWVudHNbM107XG5cdFx0b2JqID0gT2JqZWN0KHZhbHVlKG9iaikpO1xuXHRcdGNhbGxhYmxlKGNiKTtcblxuXHRcdGxpc3QgPSBrZXlzKG9iaik7XG5cdFx0aWYgKGNvbXBhcmVGbikge1xuXHRcdFx0bGlzdC5zb3J0KHR5cGVvZiBjb21wYXJlRm4gPT09IFwiZnVuY3Rpb25cIiA/IGJpbmQuY2FsbChjb21wYXJlRm4sIG9iaikgOiB1bmRlZmluZWQpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIG1ldGhvZCAhPT0gXCJmdW5jdGlvblwiKSBtZXRob2QgPSBsaXN0W21ldGhvZF07XG5cdFx0cmV0dXJuIGNhbGwuY2FsbChtZXRob2QsIGxpc3QsIGZ1bmN0aW9uIChrZXksIGluZGV4KSB7XG5cdFx0XHRpZiAoIW9ialByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBrZXkpKSByZXR1cm4gZGVmVmFsO1xuXHRcdFx0cmV0dXJuIGNhbGwuY2FsbChjYiwgdGhpc0FyZywgb2JqW2tleV0sIGtleSwgb2JqLCBpbmRleCk7XG5cdFx0fSk7XG5cdH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogODMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBUaGFua3MgQG1hdGhpYXNieW5lbnNcbi8vIGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSNpdGVyYXRpbmctb3Zlci1zeW1ib2xzXG5cblxuXG52YXIgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpXG4gICwgZCAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG4gICwgU3ltYm9sICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpXG4gICwgSXRlcmF0b3IgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LCBTdHJpbmdJdGVyYXRvcjtcblxuU3RyaW5nSXRlcmF0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIFN0cmluZ0l0ZXJhdG9yKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnXCIpO1xuXHRzdHIgPSBTdHJpbmcoc3RyKTtcblx0SXRlcmF0b3IuY2FsbCh0aGlzLCBzdHIpO1xuXHRkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9fbGVuZ3RoX19cIiwgZChcIlwiLCBzdHIubGVuZ3RoKSk7XG59O1xuaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZihTdHJpbmdJdGVyYXRvciwgSXRlcmF0b3IpO1xuXG4vLyBJbnRlcm5hbCAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUgZG9lc24ndCBleHBvc2UgaXRzIGNvbnN0cnVjdG9yXG5kZWxldGUgU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5TdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yLnByb3RvdHlwZSwge1xuXHRfbmV4dDogZChmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKCF0aGlzLl9fbGlzdF9fKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdGlmICh0aGlzLl9fbmV4dEluZGV4X18gPCB0aGlzLl9fbGVuZ3RoX18pIHJldHVybiB0aGlzLl9fbmV4dEluZGV4X18rKztcblx0XHR0aGlzLl91bkJpbmQoKTtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9KSxcblx0X3Jlc29sdmU6IGQoZnVuY3Rpb24gKGkpIHtcblx0XHR2YXIgY2hhciA9IHRoaXMuX19saXN0X19baV0sIGNvZGU7XG5cdFx0aWYgKHRoaXMuX19uZXh0SW5kZXhfXyA9PT0gdGhpcy5fX2xlbmd0aF9fKSByZXR1cm4gY2hhcjtcblx0XHRjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApO1xuXHRcdGlmIChjb2RlID49IDB4ZDgwMCAmJiBjb2RlIDw9IDB4ZGJmZikgcmV0dXJuIGNoYXIgKyB0aGlzLl9fbGlzdF9fW3RoaXMuX19uZXh0SW5kZXhfXysrXTtcblx0XHRyZXR1cm4gY2hhcjtcblx0fSlcbn0pO1xuZGVmaW5lUHJvcGVydHkoU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIGQoXCJjXCIsIFwiU3RyaW5nIEl0ZXJhdG9yXCIpKTtcblxuXG4vKioqLyB9KSxcbi8qIDg0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBzZXRQcm90b3R5cGVPZiAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNilcbiAgLCBjb250YWlucyAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpXG4gICwgZCAgICAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG4gICwgSXRlcmF0b3IgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKVxuICAsIHRvU3RyaW5nVGFnU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKS50b1N0cmluZ1RhZ1xuXG4gICwgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHlcbiAgLCBTZXRJdGVyYXRvcjtcblxuU2V0SXRlcmF0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQsIGtpbmQpIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIFNldEl0ZXJhdG9yKSkgcmV0dXJuIG5ldyBTZXRJdGVyYXRvcihzZXQsIGtpbmQpO1xuXHRJdGVyYXRvci5jYWxsKHRoaXMsIHNldC5fX3NldERhdGFfXywgc2V0KTtcblx0aWYgKCFraW5kKSBraW5kID0gJ3ZhbHVlJztcblx0ZWxzZSBpZiAoY29udGFpbnMuY2FsbChraW5kLCAna2V5K3ZhbHVlJykpIGtpbmQgPSAna2V5K3ZhbHVlJztcblx0ZWxzZSBraW5kID0gJ3ZhbHVlJztcblx0ZGVmaW5lUHJvcGVydHkodGhpcywgJ19fa2luZF9fJywgZCgnJywga2luZCkpO1xufTtcbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoU2V0SXRlcmF0b3IsIEl0ZXJhdG9yKTtcblxuU2V0SXRlcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvci5wcm90b3R5cGUsIHtcblx0Y29uc3RydWN0b3I6IGQoU2V0SXRlcmF0b3IpLFxuXHRfcmVzb2x2ZTogZChmdW5jdGlvbiAoaSkge1xuXHRcdGlmICh0aGlzLl9fa2luZF9fID09PSAndmFsdWUnKSByZXR1cm4gdGhpcy5fX2xpc3RfX1tpXTtcblx0XHRyZXR1cm4gW3RoaXMuX19saXN0X19baV0sIHRoaXMuX19saXN0X19baV1dO1xuXHR9KSxcblx0dG9TdHJpbmc6IGQoZnVuY3Rpb24gKCkgeyByZXR1cm4gJ1tvYmplY3QgU2V0IEl0ZXJhdG9yXSc7IH0pXG59KTtcbmRlZmluZVByb3BlcnR5KFNldEl0ZXJhdG9yLnByb3RvdHlwZSwgdG9TdHJpbmdUYWdTeW1ib2wsIGQoJ2MnLCAnU2V0IEl0ZXJhdG9yJykpO1xuXG5cbi8qKiovIH0pLFxuLyogODUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBFeHBvcnRzIHRydWUgaWYgZW52aXJvbm1lbnQgcHJvdmlkZXMgbmF0aXZlIGBTZXRgIGltcGxlbWVudGF0aW9uLFxuLy8gd2hhdGV2ZXIgdGhhdCBpcy5cblxuXG5cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uICgpIHtcblx0aWYgKHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFNldC5wcm90b3R5cGUpID09PSAnW29iamVjdCBTZXRdJyk7XG59KCkpO1xuXG5cbi8qKiovIH0pLFxuLyogODYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLypcblx0cHNldWRvIHNlbGVjdG9yc1xuXG5cdC0tLVxuXG5cdHRoZXkgYXJlIGF2YWlsYWJsZSBpbiB0d28gZm9ybXM6XG5cdCogZmlsdGVycyBjYWxsZWQgd2hlbiB0aGUgc2VsZWN0b3Jcblx0ICBpcyBjb21waWxlZCBhbmQgcmV0dXJuIGEgZnVuY3Rpb25cblx0ICB0aGF0IG5lZWRzIHRvIHJldHVybiBuZXh0KClcblx0KiBwc2V1ZG9zIGdldCBjYWxsZWQgb24gZXhlY3V0aW9uXG5cdCAgdGhleSBuZWVkIHRvIHJldHVybiBhIGJvb2xlYW5cbiovXG5cbnZhciBnZXROQ2hlY2sgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oODcpLFxuXHRCYXNlRnVuY3MgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNSksXG5cdGF0dHJpYnV0ZXNGYWN0b3J5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyksXG5cdHRydWVGdW5jICAgICAgICAgID0gQmFzZUZ1bmNzLnRydWVGdW5jLFxuXHRmYWxzZUZ1bmMgICAgICAgICA9IEJhc2VGdW5jcy5mYWxzZUZ1bmM7XG5cbmZ1bmN0aW9uIGZpbHRlcnNGYWN0b3J5KGFkYXB0ZXIpe1xuXHR2YXIgYXR0cmlidXRlcyAgPSBhdHRyaWJ1dGVzRmFjdG9yeShhZGFwdGVyKSxcblx0XHRjaGVja0F0dHJpYiA9IGF0dHJpYnV0ZXMucnVsZXMuZXF1YWxzO1xuXG5cdC8vaGVscGVyIG1ldGhvZHNcblx0ZnVuY3Rpb24gZXF1YWxzKGEsIGIpe1xuXHRcdGlmKHR5cGVvZiBhZGFwdGVyLmVxdWFscyA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gYWRhcHRlci5lcXVhbHMoYSwgYik7XG5cblx0XHRyZXR1cm4gYSA9PT0gYjtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldEF0dHJpYkZ1bmMobmFtZSwgdmFsdWUpe1xuXHRcdHZhciBkYXRhID0ge25hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZX07XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGF0dHJpYkZ1bmMobmV4dCl7XG5cdFx0XHRyZXR1cm4gY2hlY2tBdHRyaWIobmV4dCwgZGF0YSk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldENoaWxkRnVuYyhuZXh0KXtcblx0XHRyZXR1cm4gZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gISFhZGFwdGVyLmdldFBhcmVudChlbGVtKSAmJiBuZXh0KGVsZW0pO1xuXHRcdH07XG5cdH1cblxuXHR2YXIgZmlsdGVycyA9IHtcblx0XHRjb250YWluczogZnVuY3Rpb24obmV4dCwgdGV4dCl7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gY29udGFpbnMoZWxlbSl7XG5cdFx0XHRcdHJldHVybiBuZXh0KGVsZW0pICYmIGFkYXB0ZXIuZ2V0VGV4dChlbGVtKS5pbmRleE9mKHRleHQpID49IDA7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0aWNvbnRhaW5zOiBmdW5jdGlvbihuZXh0LCB0ZXh0KXtcblx0XHRcdHZhciBpdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiBpY29udGFpbnMoZWxlbSl7XG5cdFx0XHRcdHJldHVybiBuZXh0KGVsZW0pICYmXG5cdFx0XHRcdFx0YWRhcHRlci5nZXRUZXh0KGVsZW0pLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpdGV4dCkgPj0gMDtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdC8vbG9jYXRpb24gc3BlY2lmaWMgbWV0aG9kc1xuXHRcdFwibnRoLWNoaWxkXCI6IGZ1bmN0aW9uKG5leHQsIHJ1bGUpe1xuXHRcdFx0dmFyIGZ1bmMgPSBnZXROQ2hlY2socnVsZSk7XG5cblx0XHRcdGlmKGZ1bmMgPT09IGZhbHNlRnVuYykgcmV0dXJuIGZ1bmM7XG5cdFx0XHRpZihmdW5jID09PSB0cnVlRnVuYykgIHJldHVybiBnZXRDaGlsZEZ1bmMobmV4dCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBudGhDaGlsZChlbGVtKXtcblx0XHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0XHRmb3IodmFyIGkgPSAwLCBwb3MgPSAwOyBpIDwgc2libGluZ3MubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKXtcblx0XHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSBicmVhaztcblx0XHRcdFx0XHRcdGVsc2UgcG9zKys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmMocG9zKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdFwibnRoLWxhc3QtY2hpbGRcIjogZnVuY3Rpb24obmV4dCwgcnVsZSl7XG5cdFx0XHR2YXIgZnVuYyA9IGdldE5DaGVjayhydWxlKTtcblxuXHRcdFx0aWYoZnVuYyA9PT0gZmFsc2VGdW5jKSByZXR1cm4gZnVuYztcblx0XHRcdGlmKGZ1bmMgPT09IHRydWVGdW5jKSAgcmV0dXJuIGdldENoaWxkRnVuYyhuZXh0KTtcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIG50aExhc3RDaGlsZChlbGVtKXtcblx0XHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0XHRmb3IodmFyIHBvcyA9IDAsIGkgPSBzaWJsaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIGJyZWFrO1xuXHRcdFx0XHRcdFx0ZWxzZSBwb3MrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZnVuYyhwb3MpICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0XCJudGgtb2YtdHlwZVwiOiBmdW5jdGlvbihuZXh0LCBydWxlKXtcblx0XHRcdHZhciBmdW5jID0gZ2V0TkNoZWNrKHJ1bGUpO1xuXG5cdFx0XHRpZihmdW5jID09PSBmYWxzZUZ1bmMpIHJldHVybiBmdW5jO1xuXHRcdFx0aWYoZnVuYyA9PT0gdHJ1ZUZ1bmMpICByZXR1cm4gZ2V0Q2hpbGRGdW5jKG5leHQpO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gbnRoT2ZUeXBlKGVsZW0pe1xuXHRcdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRcdGZvcih2YXIgcG9zID0gMCwgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIGJyZWFrO1xuXHRcdFx0XHRcdFx0aWYoYWRhcHRlci5nZXROYW1lKHNpYmxpbmdzW2ldKSA9PT0gYWRhcHRlci5nZXROYW1lKGVsZW0pKSBwb3MrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZnVuYyhwb3MpICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0XCJudGgtbGFzdC1vZi10eXBlXCI6IGZ1bmN0aW9uKG5leHQsIHJ1bGUpe1xuXHRcdFx0dmFyIGZ1bmMgPSBnZXROQ2hlY2socnVsZSk7XG5cblx0XHRcdGlmKGZ1bmMgPT09IGZhbHNlRnVuYykgcmV0dXJuIGZ1bmM7XG5cdFx0XHRpZihmdW5jID09PSB0cnVlRnVuYykgIHJldHVybiBnZXRDaGlsZEZ1bmMobmV4dCk7XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbiBudGhMYXN0T2ZUeXBlKGVsZW0pe1xuXHRcdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRcdGZvcih2YXIgcG9zID0gMCwgaSA9IHNpYmxpbmdzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRpZihhZGFwdGVyLmdldE5hbWUoc2libGluZ3NbaV0pID09PSBhZGFwdGVyLmdldE5hbWUoZWxlbSkpIHBvcysrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmdW5jKHBvcykgJiYgbmV4dChlbGVtKTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdC8vVE9ETyBkZXRlcm1pbmUgdGhlIGFjdHVhbCByb290IGVsZW1lbnRcblx0XHRyb290OiBmdW5jdGlvbihuZXh0KXtcblx0XHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdFx0cmV0dXJuICFhZGFwdGVyLmdldFBhcmVudChlbGVtKSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0c2NvcGU6IGZ1bmN0aW9uKG5leHQsIHJ1bGUsIG9wdGlvbnMsIGNvbnRleHQpe1xuXHRcdFx0aWYoIWNvbnRleHQgfHwgY29udGV4dC5sZW5ndGggPT09IDApe1xuXHRcdFx0XHQvL2VxdWl2YWxlbnQgdG8gOnJvb3Rcblx0XHRcdFx0cmV0dXJuIGZpbHRlcnMucm9vdChuZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYoY29udGV4dC5sZW5ndGggPT09IDEpe1xuXHRcdFx0XHQvL05PVEU6IGNhbid0IGJlIHVucGFja2VkLCBhcyA6aGFzIHVzZXMgdGhpcyBmb3Igc2lkZS1lZmZlY3RzXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdFx0XHRyZXR1cm4gZXF1YWxzKGNvbnRleHRbMF0sIGVsZW0pICYmIG5leHQoZWxlbSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuaW5kZXhPZihlbGVtKSA+PSAwICYmIG5leHQoZWxlbSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHQvL2pRdWVyeSBleHRlbnNpb25zIChvdGhlcnMgZm9sbG93IGFzIHBzZXVkb3MpXG5cdFx0Y2hlY2tib3g6IGdldEF0dHJpYkZ1bmMoXCJ0eXBlXCIsIFwiY2hlY2tib3hcIiksXG5cdFx0ZmlsZTogZ2V0QXR0cmliRnVuYyhcInR5cGVcIiwgXCJmaWxlXCIpLFxuXHRcdHBhc3N3b3JkOiBnZXRBdHRyaWJGdW5jKFwidHlwZVwiLCBcInBhc3N3b3JkXCIpLFxuXHRcdHJhZGlvOiBnZXRBdHRyaWJGdW5jKFwidHlwZVwiLCBcInJhZGlvXCIpLFxuXHRcdHJlc2V0OiBnZXRBdHRyaWJGdW5jKFwidHlwZVwiLCBcInJlc2V0XCIpLFxuXHRcdGltYWdlOiBnZXRBdHRyaWJGdW5jKFwidHlwZVwiLCBcImltYWdlXCIpLFxuXHRcdHN1Ym1pdDogZ2V0QXR0cmliRnVuYyhcInR5cGVcIiwgXCJzdWJtaXRcIilcblx0fTtcblx0cmV0dXJuIGZpbHRlcnM7XG59XG5cbmZ1bmN0aW9uIHBzZXVkb3NGYWN0b3J5KGFkYXB0ZXIpe1xuXHQvL2hlbHBlciBtZXRob2RzXG5cdGZ1bmN0aW9uIGdldEZpcnN0RWxlbWVudChlbGVtcyl7XG5cdFx0Zm9yKHZhciBpID0gMDsgZWxlbXMgJiYgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKXtcblx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoZWxlbXNbaV0pKSByZXR1cm4gZWxlbXNbaV07XG5cdFx0fVxuXHR9XG5cblx0Ly93aGlsZSBmaWx0ZXJzIGFyZSBwcmVjb21waWxlZCwgcHNldWRvcyBnZXQgY2FsbGVkIHdoZW4gdGhleSBhcmUgbmVlZGVkXG5cdHZhciBwc2V1ZG9zID0ge1xuXHRcdGVtcHR5OiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiAhYWRhcHRlci5nZXRDaGlsZHJlbihlbGVtKS5zb21lKGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0XHRyZXR1cm4gYWRhcHRlci5pc1RhZyhlbGVtKSB8fCBlbGVtLnR5cGUgPT09IFwidGV4dFwiO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdFwiZmlyc3QtY2hpbGRcIjogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gZ2V0Rmlyc3RFbGVtZW50KGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSkpID09PSBlbGVtO1xuXHRcdH0sXG5cdFx0XCJsYXN0LWNoaWxkXCI6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0Zm9yKHZhciBpID0gc2libGluZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xuXHRcdFx0XHRpZihzaWJsaW5nc1tpXSA9PT0gZWxlbSkgcmV0dXJuIHRydWU7XG5cdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pKSBicmVhaztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0XCJmaXJzdC1vZi10eXBlXCI6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHNpYmxpbmdzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSByZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmdldE5hbWUoc2libGluZ3NbaV0pID09PSBhZGFwdGVyLmdldE5hbWUoZWxlbSkpIGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdFwibGFzdC1vZi10eXBlXCI6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRTaWJsaW5ncyhlbGVtKTtcblxuXHRcdFx0Zm9yKHZhciBpID0gc2libGluZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xuXHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pIHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdGlmKGFkYXB0ZXIuZ2V0TmFtZShzaWJsaW5nc1tpXSkgPT09IGFkYXB0ZXIuZ2V0TmFtZShlbGVtKSkgYnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0XCJvbmx5LW9mLXR5cGVcIjogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHR2YXIgc2libGluZ3MgPSBhZGFwdGVyLmdldFNpYmxpbmdzKGVsZW0pO1xuXG5cdFx0XHRmb3IodmFyIGkgPSAwLCBqID0gc2libGluZ3MubGVuZ3RoOyBpIDwgajsgaSsrKXtcblx0XHRcdFx0aWYoYWRhcHRlci5pc1RhZyhzaWJsaW5nc1tpXSkpe1xuXHRcdFx0XHRcdGlmKHNpYmxpbmdzW2ldID09PSBlbGVtKSBjb250aW51ZTtcblx0XHRcdFx0XHRpZihhZGFwdGVyLmdldE5hbWUoc2libGluZ3NbaV0pID09PSBhZGFwdGVyLmdldE5hbWUoZWxlbSkpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXHRcdFwib25seS1jaGlsZFwiOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBzaWJsaW5ncyA9IGFkYXB0ZXIuZ2V0U2libGluZ3MoZWxlbSk7XG5cblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzaWJsaW5ncy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdGlmKGFkYXB0ZXIuaXNUYWcoc2libGluZ3NbaV0pICYmIHNpYmxpbmdzW2ldICE9PSBlbGVtKSByZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLzptYXRjaGVzKGEsIGFyZWEsIGxpbmspW2hyZWZdXG5cdFx0bGluazogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gYWRhcHRlci5oYXNBdHRyaWIoZWxlbSwgXCJocmVmXCIpO1xuXHRcdH0sXG5cdFx0dmlzaXRlZDogZmFsc2VGdW5jLCAvL3NlZW1zIHRvIGJlIGEgdmFsaWQgaW1wbGVtZW50YXRpb25cblx0XHQvL1RPRE86IDphbnktbGluayBvbmNlIHRoZSBuYW1lIGlzIGZpbmFsaXplZCAoYXMgYW4gYWxpYXMgb2YgOmxpbmspXG5cblx0XHQvL2Zvcm1zXG5cdFx0Ly90byBjb25zaWRlcjogOnRhcmdldFxuXG5cdFx0Ly86bWF0Y2hlcyhbc2VsZWN0ZWRdLCBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdCg+IG9wdGlvbltzZWxlY3RlZF0pID4gb3B0aW9uOmZpcnN0LW9mLXR5cGUpXG5cdFx0c2VsZWN0ZWQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0aWYoYWRhcHRlci5oYXNBdHRyaWIoZWxlbSwgXCJzZWxlY3RlZFwiKSkgcmV0dXJuIHRydWU7XG5cdFx0XHRlbHNlIGlmKGFkYXB0ZXIuZ2V0TmFtZShlbGVtKSAhPT0gXCJvcHRpb25cIikgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHQvL3RoZSBmaXJzdCA8b3B0aW9uPiBpbiBhIDxzZWxlY3Q+IGlzIGFsc28gc2VsZWN0ZWRcblx0XHRcdHZhciBwYXJlbnQgPSBhZGFwdGVyLmdldFBhcmVudChlbGVtKTtcblxuXHRcdFx0aWYoXG5cdFx0XHRcdCFwYXJlbnQgfHxcblx0XHRcdFx0YWRhcHRlci5nZXROYW1lKHBhcmVudCkgIT09IFwic2VsZWN0XCIgfHxcblx0XHRcdFx0YWRhcHRlci5oYXNBdHRyaWIocGFyZW50LCBcIm11bHRpcGxlXCIpXG5cdFx0XHQpIHJldHVybiBmYWxzZTtcblxuXHRcdFx0dmFyIHNpYmxpbmdzID0gYWRhcHRlci5nZXRDaGlsZHJlbihwYXJlbnQpLFxuXHRcdFx0XHRzYXdFbGVtICA9IGZhbHNlO1xuXG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc2libGluZ3MubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRpZihhZGFwdGVyLmlzVGFnKHNpYmxpbmdzW2ldKSl7XG5cdFx0XHRcdFx0aWYoc2libGluZ3NbaV0gPT09IGVsZW0pe1xuXHRcdFx0XHRcdFx0c2F3RWxlbSA9IHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlIGlmKCFzYXdFbGVtKXtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9IGVsc2UgaWYoYWRhcHRlci5oYXNBdHRyaWIoc2libGluZ3NbaV0sIFwic2VsZWN0ZWRcIikpe1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2F3RWxlbTtcblx0XHR9LFxuXHRcdC8vaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZGlzYWJsZWQtZWxlbWVudHNcblx0XHQvLzptYXRjaGVzKFxuXHRcdC8vICA6bWF0Y2hlcyhidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBtZW51aXRlbSwgb3B0Z3JvdXAsIG9wdGlvbilbZGlzYWJsZWRdLFxuXHRcdC8vICBvcHRncm91cFtkaXNhYmxlZF0gPiBvcHRpb24pLFxuXHRcdC8vIGZpZWxkc2V0W2Rpc2FibGVkXSAqIC8vVE9ETyBub3QgY2hpbGQgb2YgZmlyc3QgPGxlZ2VuZD5cblx0XHQvLylcblx0XHRkaXNhYmxlZDogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gYWRhcHRlci5oYXNBdHRyaWIoZWxlbSwgXCJkaXNhYmxlZFwiKTtcblx0XHR9LFxuXHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuICFhZGFwdGVyLmhhc0F0dHJpYihlbGVtLCBcImRpc2FibGVkXCIpO1xuXHRcdH0sXG5cdFx0Ly86bWF0Y2hlcyg6bWF0Y2hlcyg6cmFkaW8sIDpjaGVja2JveClbY2hlY2tlZF0sIDpzZWxlY3RlZCkgKFRPRE8gbWVudWl0ZW0pXG5cdFx0Y2hlY2tlZDogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gYWRhcHRlci5oYXNBdHRyaWIoZWxlbSwgXCJjaGVja2VkXCIpIHx8IHBzZXVkb3Muc2VsZWN0ZWQoZWxlbSk7XG5cdFx0fSxcblx0XHQvLzptYXRjaGVzKGlucHV0LCBzZWxlY3QsIHRleHRhcmVhKVtyZXF1aXJlZF1cblx0XHRyZXF1aXJlZDogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHRyZXR1cm4gYWRhcHRlci5oYXNBdHRyaWIoZWxlbSwgXCJyZXF1aXJlZFwiKTtcblx0XHR9LFxuXHRcdC8vOm1hdGNoZXMoaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEpOm5vdChbcmVxdWlyZWRdKVxuXHRcdG9wdGlvbmFsOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHJldHVybiAhYWRhcHRlci5oYXNBdHRyaWIoZWxlbSwgXCJyZXF1aXJlZFwiKTtcblx0XHR9LFxuXG5cdFx0Ly9qUXVlcnkgZXh0ZW5zaW9uc1xuXG5cdFx0Ly86bm90KDplbXB0eSlcblx0XHRwYXJlbnQ6IGZ1bmN0aW9uKGVsZW0pe1xuXHRcdFx0cmV0dXJuICFwc2V1ZG9zLmVtcHR5KGVsZW0pO1xuXHRcdH0sXG5cdFx0Ly86bWF0Y2hlcyhoMSwgaDIsIGgzLCBoNCwgaDUsIGg2KVxuXHRcdGhlYWRlcjogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHR2YXIgbmFtZSA9IGFkYXB0ZXIuZ2V0TmFtZShlbGVtKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImgxXCIgfHxcblx0XHRcdFx0XHRuYW1lID09PSBcImgyXCIgfHxcblx0XHRcdFx0XHRuYW1lID09PSBcImgzXCIgfHxcblx0XHRcdFx0XHRuYW1lID09PSBcImg0XCIgfHxcblx0XHRcdFx0XHRuYW1lID09PSBcImg1XCIgfHxcblx0XHRcdFx0XHRuYW1lID09PSBcImg2XCI7XG5cdFx0fSxcblxuXHRcdC8vOm1hdGNoZXMoYnV0dG9uLCBpbnB1dFt0eXBlPWJ1dHRvbl0pXG5cdFx0YnV0dG9uOiBmdW5jdGlvbihlbGVtKXtcblx0XHRcdHZhciBuYW1lID0gYWRhcHRlci5nZXROYW1lKGVsZW0pO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiYnV0dG9uXCIgfHxcblx0XHRcdFx0XHRuYW1lID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0XHRhZGFwdGVyLmdldEF0dHJpYnV0ZVZhbHVlKGVsZW0sIFwidHlwZVwiKSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXHRcdC8vOm1hdGNoZXMoaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGJ1dHRvbilcblx0XHRpbnB1dDogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHR2YXIgbmFtZSA9IGFkYXB0ZXIuZ2V0TmFtZShlbGVtKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgfHxcblx0XHRcdFx0XHRuYW1lID09PSBcInRleHRhcmVhXCIgfHxcblx0XHRcdFx0XHRuYW1lID09PSBcInNlbGVjdFwiIHx8XG5cdFx0XHRcdFx0bmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXHRcdC8vaW5wdXQ6bWF0Y2hlcyg6bm90KFt0eXBlIT0nJ10pLCBbdHlwZT0ndGV4dCcgaV0pXG5cdFx0dGV4dDogZnVuY3Rpb24oZWxlbSl7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBhZGFwdGVyLmdldE5hbWUoZWxlbSkgPT09IFwiaW5wdXRcIiAmJiAoXG5cdFx0XHRcdCEoYXR0ciA9IGFkYXB0ZXIuZ2V0QXR0cmlidXRlVmFsdWUoZWxlbSwgXCJ0eXBlXCIpKSB8fFxuXHRcdFx0XHRhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gcHNldWRvcztcbn1cblxuZnVuY3Rpb24gdmVyaWZ5QXJncyhmdW5jLCBuYW1lLCBzdWJzZWxlY3Qpe1xuXHRpZihzdWJzZWxlY3QgPT09IG51bGwpe1xuXHRcdGlmKGZ1bmMubGVuZ3RoID4gMSAmJiBuYW1lICE9PSBcInNjb3BlXCIpe1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicHNldWRvLXNlbGVjdG9yIDpcIiArIG5hbWUgKyBcIiByZXF1aXJlcyBhbiBhcmd1bWVudFwiKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYoZnVuYy5sZW5ndGggPT09IDEpe1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicHNldWRvLXNlbGVjdG9yIDpcIiArIG5hbWUgKyBcIiBkb2Vzbid0IGhhdmUgYW55IGFyZ3VtZW50c1wiKTtcblx0XHR9XG5cdH1cbn1cblxuLy9GSVhNRSB0aGlzIGZlZWxzIGhhY2t5XG52YXIgcmVfQ1NTMyA9IC9eKD86KD86bnRofGxhc3R8Zmlyc3R8b25seSktKD86Y2hpbGR8b2YtdHlwZSl8cm9vdHxlbXB0eXwoPzplbnxkaXMpYWJsZWR8Y2hlY2tlZHxub3QpJC87XG5cbmZ1bmN0aW9uIGZhY3RvcnkoYWRhcHRlcil7XG5cdHZhciBwc2V1ZG9zID0gcHNldWRvc0ZhY3RvcnkoYWRhcHRlcik7XG5cdHZhciBmaWx0ZXJzID0gZmlsdGVyc0ZhY3RvcnkoYWRhcHRlcik7XG5cblx0cmV0dXJuIHtcblx0XHRjb21waWxlOiBmdW5jdGlvbihuZXh0LCBkYXRhLCBvcHRpb25zLCBjb250ZXh0KXtcblx0XHRcdHZhciBuYW1lID0gZGF0YS5uYW1lLFxuXHRcdFx0XHRzdWJzZWxlY3QgPSBkYXRhLmRhdGE7XG5cblx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5zdHJpY3QgJiYgIXJlX0NTUzMudGVzdChuYW1lKSl7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIjpcIiArIG5hbWUgKyBcIiBpc24ndCBwYXJ0IG9mIENTUzNcIik7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHR5cGVvZiBmaWx0ZXJzW25hbWVdID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0XHR2ZXJpZnlBcmdzKGZpbHRlcnNbbmFtZV0sIG5hbWUsICBzdWJzZWxlY3QpO1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyc1tuYW1lXShuZXh0LCBzdWJzZWxlY3QsIG9wdGlvbnMsIGNvbnRleHQpO1xuXHRcdFx0fSBlbHNlIGlmKHR5cGVvZiBwc2V1ZG9zW25hbWVdID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0XHR2YXIgZnVuYyA9IHBzZXVkb3NbbmFtZV07XG5cdFx0XHRcdHZlcmlmeUFyZ3MoZnVuYywgbmFtZSwgc3Vic2VsZWN0KTtcblxuXHRcdFx0XHRpZihuZXh0ID09PSB0cnVlRnVuYykgcmV0dXJuIGZ1bmM7XG5cblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIHBzZXVkb0FyZ3MoZWxlbSl7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmMoZWxlbSwgc3Vic2VsZWN0KSAmJiBuZXh0KGVsZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5tYXRjaGVkIHBzZXVkby1jbGFzcyA6XCIgKyBuYW1lKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGZpbHRlcnM6IGZpbHRlcnMsXG5cdFx0cHNldWRvczogcHNldWRvc1xuXHR9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3Rvcnk7XG5cblxuLyoqKi8gfSksXG4vKiA4NyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgcGFyc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4KSxcbiAgICBjb21waWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbnRoQ2hlY2soZm9ybXVsYSl7XG5cdHJldHVybiBjb21waWxlKHBhcnNlKGZvcm11bGEpKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5tb2R1bGUuZXhwb3J0cy5jb21waWxlID0gY29tcGlsZTtcblxuLyoqKi8gfSksXG4vKiA4OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlO1xuXG4vL2ZvbGxvd2luZyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jbnRoLWNoaWxkLXBzZXVkb1xuXG4vL1sgWyctJ3wnKyddPyBJTlRFR0VSPyB7Tn0gWyBTKiBbJy0nfCcrJ10gUyogSU5URUdFUiBdP1xudmFyIHJlX250aEVsZW1lbnQgPSAvXihbK1xcLV0/XFxkKm4pP1xccyooPzooWytcXC1dPylcXHMqKFxcZCspKT8kLztcblxuLypcblx0cGFyc2VzIGEgbnRoLWNoZWNrIGZvcm11bGEsIHJldHVybnMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnNcbiovXG5mdW5jdGlvbiBwYXJzZShmb3JtdWxhKXtcblx0Zm9ybXVsYSA9IGZvcm11bGEudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cblx0aWYoZm9ybXVsYSA9PT0gXCJldmVuXCIpe1xuXHRcdHJldHVybiBbMiwgMF07XG5cdH0gZWxzZSBpZihmb3JtdWxhID09PSBcIm9kZFwiKXtcblx0XHRyZXR1cm4gWzIsIDFdO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBwYXJzZWQgPSBmb3JtdWxhLm1hdGNoKHJlX250aEVsZW1lbnQpO1xuXG5cdFx0aWYoIXBhcnNlZCl7XG5cdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJuLXRoIHJ1bGUgY291bGRuJ3QgYmUgcGFyc2VkICgnXCIgKyBmb3JtdWxhICsgXCInKVwiKTtcblx0XHR9XG5cblx0XHR2YXIgYTtcblxuXHRcdGlmKHBhcnNlZFsxXSl7XG5cdFx0XHRhID0gcGFyc2VJbnQocGFyc2VkWzFdLCAxMCk7XG5cdFx0XHRpZihpc05hTihhKSl7XG5cdFx0XHRcdGlmKHBhcnNlZFsxXS5jaGFyQXQoMCkgPT09IFwiLVwiKSBhID0gLTE7XG5cdFx0XHRcdGVsc2UgYSA9IDE7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGEgPSAwO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdGEsXG5cdFx0XHRwYXJzZWRbM10gPyBwYXJzZUludCgocGFyc2VkWzJdIHx8IFwiXCIpICsgcGFyc2VkWzNdLCAxMCkgOiAwXG5cdFx0XTtcblx0fVxufVxuXG5cbi8qKiovIH0pLFxuLyogODkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlO1xuXG52YXIgQmFzZUZ1bmNzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSxcbiAgICB0cnVlRnVuYyAgPSBCYXNlRnVuY3MudHJ1ZUZ1bmMsXG4gICAgZmFsc2VGdW5jID0gQmFzZUZ1bmNzLmZhbHNlRnVuYztcblxuLypcblx0cmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGFuIGVsZW1lbnRzIGluZGV4IG1hdGNoZXMgdGhlIGdpdmVuIHJ1bGVcblx0aGlnaGx5IG9wdGltaXplZCB0byByZXR1cm4gdGhlIGZhc3Rlc3Qgc29sdXRpb25cbiovXG5mdW5jdGlvbiBjb21waWxlKHBhcnNlZCl7XG5cdHZhciBhID0gcGFyc2VkWzBdLFxuXHQgICAgYiA9IHBhcnNlZFsxXSAtIDE7XG5cblx0Ly93aGVuIGIgPD0gMCwgYSpuIHdvbid0IGJlIHBvc3NpYmxlIGZvciBhbnkgbWF0Y2hlcyB3aGVuIGEgPCAwXG5cdC8vYmVzaWRlcywgdGhlIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IG5vIGVsZW1lbnQgaXMgbWF0Y2hlZCB3aGVuIGEgYW5kIGIgYXJlIDBcblx0aWYoYiA8IDAgJiYgYSA8PSAwKSByZXR1cm4gZmFsc2VGdW5jO1xuXG5cdC8vd2hlbiBhIGlzIGluIHRoZSByYW5nZSAtMS4uMSwgaXQgbWF0Y2hlcyBhbnkgZWxlbWVudCAoc28gb25seSBiIGlzIGNoZWNrZWQpXG5cdGlmKGEgPT09LTEpIHJldHVybiBmdW5jdGlvbihwb3MpeyByZXR1cm4gcG9zIDw9IGI7IH07XG5cdGlmKGEgPT09IDApIHJldHVybiBmdW5jdGlvbihwb3MpeyByZXR1cm4gcG9zID09PSBiOyB9O1xuXHQvL3doZW4gYiA8PSAwIGFuZCBhID09PSAxLCB0aGV5IG1hdGNoIGFueSBlbGVtZW50XG5cdGlmKGEgPT09IDEpIHJldHVybiBiIDwgMCA/IHRydWVGdW5jIDogZnVuY3Rpb24ocG9zKXsgcmV0dXJuIHBvcyA+PSBiOyB9O1xuXG5cdC8vd2hlbiBhID4gMCwgbW9kdWxvIGNhbiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGEgbWF0Y2hcblx0dmFyIGJNb2QgPSBiICUgYTtcblx0aWYoYk1vZCA8IDApIGJNb2QgKz0gYTtcblxuXHRpZihhID4gMSl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHBvcyl7XG5cdFx0XHRyZXR1cm4gcG9zID49IGIgJiYgcG9zICUgYSA9PT0gYk1vZDtcblx0XHR9O1xuXHR9XG5cblx0YSAqPSAtMTsgLy9tYWtlIGBhYCBwb3NpdGl2ZVxuXG5cdHJldHVybiBmdW5jdGlvbihwb3Mpe1xuXHRcdHJldHVybiBwb3MgPD0gYiAmJiBwb3MgJSBhID09PSBiTW9kO1xuXHR9O1xufVxuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3Mtc2VsZWN0LXVtZC9kaXN0L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9jc3Mtc2VsZWN0LXVtZC9kaXN0L2luZGV4LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIi8qIVxuXG4gZGlmZiB2My40LjBcblxuU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgKEJTRCBMaWNlbnNlKVxuXG5Db3B5cmlnaHQgKGMpIDIwMDktMjAxNSwgS2V2aW4gRGVja2VyIDxrcGRlY2tlckBnbWFpbC5jb20+XG5cbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlXG4gIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGVcbiAgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlXG4gIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlclxuICBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4qIE5laXRoZXIgdGhlIG5hbWUgb2YgS2V2aW4gRGVja2VyIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHNcbiAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvclxuICB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUlxuSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUlxuQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTFxuREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVJcbklOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVRcbk9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbkBsaWNlbnNlXG4qL1xuKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiSnNEaWZmXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkpzRGlmZlwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9LFxuLyoqKioqKi8gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bG9hZGVkOiBmYWxzZVxuLyoqKioqKi8gXHRcdH07XG5cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG5cblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmNhbm9uaWNhbGl6ZSA9IGV4cG9ydHMuY29udmVydENoYW5nZXNUb1hNTCA9IGV4cG9ydHMuY29udmVydENoYW5nZXNUb0RNUCA9IGV4cG9ydHMubWVyZ2UgPSBleHBvcnRzLnBhcnNlUGF0Y2ggPSBleHBvcnRzLmFwcGx5UGF0Y2hlcyA9IGV4cG9ydHMuYXBwbHlQYXRjaCA9IGV4cG9ydHMuY3JlYXRlUGF0Y2ggPSBleHBvcnRzLmNyZWF0ZVR3b0ZpbGVzUGF0Y2ggPSBleHBvcnRzLnN0cnVjdHVyZWRQYXRjaCA9IGV4cG9ydHMuZGlmZkFycmF5cyA9IGV4cG9ydHMuZGlmZkpzb24gPSBleHBvcnRzLmRpZmZDc3MgPSBleHBvcnRzLmRpZmZTZW50ZW5jZXMgPSBleHBvcnRzLmRpZmZUcmltbWVkTGluZXMgPSBleHBvcnRzLmRpZmZMaW5lcyA9IGV4cG9ydHMuZGlmZldvcmRzV2l0aFNwYWNlID0gZXhwb3J0cy5kaWZmV29yZHMgPSBleHBvcnRzLmRpZmZDaGFycyA9IGV4cG9ydHMuRGlmZiA9IHVuZGVmaW5lZDtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Jhc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZSk7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19jaGFyYWN0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3dvcmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2xpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3NlbnRlbmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19jc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2pzb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2FycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19hcHBseSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3BhcnNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fbWVyZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19jcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19kbXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL194bWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qIFNlZSBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zIG9mIHVzZSAqL1xuXG5cdC8qXG5cdCAqIFRleHQgZGlmZiBpbXBsZW1lbnRhdGlvbi5cblx0ICpcblx0ICogVGhpcyBsaWJyYXJ5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgQVBJUzpcblx0ICogSnNEaWZmLmRpZmZDaGFyczogQ2hhcmFjdGVyIGJ5IGNoYXJhY3RlciBkaWZmXG5cdCAqIEpzRGlmZi5kaWZmV29yZHM6IFdvcmQgKGFzIGRlZmluZWQgYnkgXFxiIHJlZ2V4KSBkaWZmIHdoaWNoIGlnbm9yZXMgd2hpdGVzcGFjZVxuXHQgKiBKc0RpZmYuZGlmZkxpbmVzOiBMaW5lIGJhc2VkIGRpZmZcblx0ICpcblx0ICogSnNEaWZmLmRpZmZDc3M6IERpZmYgdGFyZ2V0ZWQgYXQgQ1NTIGNvbnRlbnRcblx0ICpcblx0ICogVGhlc2UgbWV0aG9kcyBhcmUgYmFzZWQgb24gdGhlIGltcGxlbWVudGF0aW9uIHByb3Bvc2VkIGluXG5cdCAqIFwiQW4gTyhORCkgRGlmZmVyZW5jZSBBbGdvcml0aG0gYW5kIGl0cyBWYXJpYXRpb25zXCIgKE15ZXJzLCAxOTg2KS5cblx0ICogaHR0cDovL2NpdGVzZWVyeC5pc3QucHN1LmVkdS92aWV3ZG9jL3N1bW1hcnk/ZG9pPTEwLjEuMS40LjY5Mjdcblx0ICovXG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovRGlmZiA9IF9iYXNlMlsnZGVmYXVsdCddO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmQ2hhcnMgPSBfY2hhcmFjdGVyLmRpZmZDaGFycztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZldvcmRzID0gX3dvcmQuZGlmZldvcmRzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmV29yZHNXaXRoU3BhY2UgPSBfd29yZC5kaWZmV29yZHNXaXRoU3BhY2U7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZMaW5lcyA9IF9saW5lLmRpZmZMaW5lcztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZlRyaW1tZWRMaW5lcyA9IF9saW5lLmRpZmZUcmltbWVkTGluZXM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZTZW50ZW5jZXMgPSBfc2VudGVuY2UuZGlmZlNlbnRlbmNlcztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkNzcyA9IF9jc3MuZGlmZkNzcztcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkpzb24gPSBfanNvbi5kaWZmSnNvbjtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZkFycmF5cyA9IF9hcnJheS5kaWZmQXJyYXlzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9zdHJ1Y3R1cmVkUGF0Y2ggPSBfY3JlYXRlLnN0cnVjdHVyZWRQYXRjaDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY3JlYXRlVHdvRmlsZXNQYXRjaCA9IF9jcmVhdGUuY3JlYXRlVHdvRmlsZXNQYXRjaDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY3JlYXRlUGF0Y2ggPSBfY3JlYXRlLmNyZWF0ZVBhdGNoO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9hcHBseVBhdGNoID0gX2FwcGx5LmFwcGx5UGF0Y2g7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2FwcGx5UGF0Y2hlcyA9IF9hcHBseS5hcHBseVBhdGNoZXM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3BhcnNlUGF0Y2ggPSBfcGFyc2UucGFyc2VQYXRjaDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovbWVyZ2UgPSBfbWVyZ2UubWVyZ2U7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NvbnZlcnRDaGFuZ2VzVG9ETVAgPSBfZG1wLmNvbnZlcnRDaGFuZ2VzVG9ETVA7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NvbnZlcnRDaGFuZ2VzVG9YTUwgPSBfeG1sLmNvbnZlcnRDaGFuZ2VzVG9YTUw7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2Nhbm9uaWNhbGl6ZSA9IF9qc29uLmNhbm9uaWNhbGl6ZTtcblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTlwYm1SbGVDNXFjeUpkTENKdVlXMWxjeUk2V3lKRWFXWm1JaXdpWkdsbVprTm9ZWEp6SWl3aVpHbG1abGR2Y21Seklpd2laR2xtWmxkdmNtUnpWMmwwYUZOd1lXTmxJaXdpWkdsbVpreHBibVZ6SWl3aVpHbG1abFJ5YVcxdFpXUk1hVzVsY3lJc0ltUnBabVpUWlc1MFpXNWpaWE1pTENKa2FXWm1RM056SWl3aVpHbG1aa3B6YjI0aUxDSmthV1ptUVhKeVlYbHpJaXdpYzNSeWRXTjBkWEpsWkZCaGRHTm9JaXdpWTNKbFlYUmxWSGR2Um1sc1pYTlFZWFJqYUNJc0ltTnlaV0YwWlZCaGRHTm9JaXdpWVhCd2JIbFFZWFJqYUNJc0ltRndjR3g1VUdGMFkyaGxjeUlzSW5CaGNuTmxVR0YwWTJnaUxDSnRaWEpuWlNJc0ltTnZiblpsY25SRGFHRnVaMlZ6Vkc5RVRWQWlMQ0pqYjI1MlpYSjBRMmhoYm1kbGMxUnZXRTFNSWl3aVkyRnViMjVwWTJGc2FYcGxJbDBzSW0xaGNIQnBibWR6SWpvaU96czdPenQxUWtGblFrRTdPenM3ZFVKQlEwRTdPMEZCUTBFN08wRkJRMEU3TzBGQlEwRTdPMEZCUlVFN08wRkJRMEU3TzBGQlJVRTdPMEZCUlVFN08wRkJRMEU3TzBGQlEwRTdPMEZCUTBFN08wRkJSVUU3TzBGQlEwRTdPenM3UVVGcVEwRTdPMEZCUlVFN096czdPenM3T3pzN096czdPMmREUVd0RFJVRXNTVHQ1UkVGRlFVTXNVenQ1UkVGRFFVTXNVenQ1UkVGRFFVTXNhMEk3ZVVSQlEwRkRMRk03ZVVSQlEwRkRMR2RDTzNsRVFVTkJReXhoTzNsRVFVVkJReXhQTzNsRVFVTkJReXhSTzNsRVFVVkJReXhWTzNsRVFVVkJReXhsTzNsRVFVTkJReXh0UWp0NVJFRkRRVU1zVnp0NVJFRkRRVU1zVlR0NVJFRkRRVU1zV1R0NVJFRkRRVU1zVlR0NVJFRkRRVU1zU3p0NVJFRkRRVU1zYlVJN2VVUkJRMEZETEcxQ08zbEVRVU5CUXl4Wklpd2labWxzWlNJNkltbHVaR1Y0TG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9nVTJWbElFeEpRMFZPVTBVZ1ptbHNaU0JtYjNJZ2RHVnliWE1nYjJZZ2RYTmxJQ292WEc1Y2JpOHFYRzRnS2lCVVpYaDBJR1JwWm1ZZ2FXMXdiR1Z0Wlc1MFlYUnBiMjR1WEc0Z0tseHVJQ29nVkdocGN5QnNhV0p5WVhKNUlITjFjSEJ2Y25SeklIUm9aU0JtYjJ4c2IzZHBibWNnUVZCSlV6cGNiaUFxSUVwelJHbG1aaTVrYVdabVEyaGhjbk02SUVOb1lYSmhZM1JsY2lCaWVTQmphR0Z5WVdOMFpYSWdaR2xtWmx4dUlDb2dTbk5FYVdabUxtUnBabVpYYjNKa2N6b2dWMjl5WkNBb1lYTWdaR1ZtYVc1bFpDQmllU0JjWEdJZ2NtVm5aWGdwSUdScFptWWdkMmhwWTJnZ2FXZHViM0psY3lCM2FHbDBaWE53WVdObFhHNGdLaUJLYzBScFptWXVaR2xtWmt4cGJtVnpPaUJNYVc1bElHSmhjMlZrSUdScFptWmNiaUFxWEc0Z0tpQktjMFJwWm1ZdVpHbG1aa056Y3pvZ1JHbG1aaUIwWVhKblpYUmxaQ0JoZENCRFUxTWdZMjl1ZEdWdWRGeHVJQ3BjYmlBcUlGUm9aWE5sSUcxbGRHaHZaSE1nWVhKbElHSmhjMlZrSUc5dUlIUm9aU0JwYlhCc1pXMWxiblJoZEdsdmJpQndjbTl3YjNObFpDQnBibHh1SUNvZ1hDSkJiaUJQS0U1RUtTQkVhV1ptWlhKbGJtTmxJRUZzWjI5eWFYUm9iU0JoYm1RZ2FYUnpJRlpoY21saGRHbHZibk5jSWlBb1RYbGxjbk1zSURFNU9EWXBMbHh1SUNvZ2FIUjBjRG92TDJOcGRHVnpaV1Z5ZUM1cGMzUXVjSE4xTG1Wa2RTOTJhV1YzWkc5akwzTjFiVzFoY25rL1pHOXBQVEV3TGpFdU1TNDBMalk1TWpkY2JpQXFMMXh1YVcxd2IzSjBJRVJwWm1ZZ1puSnZiU0FuTGk5a2FXWm1MMkpoYzJVbk8xeHVhVzF3YjNKMElIdGthV1ptUTJoaGNuTjlJR1p5YjIwZ0p5NHZaR2xtWmk5amFHRnlZV04wWlhJbk8xeHVhVzF3YjNKMElIdGthV1ptVjI5eVpITXNJR1JwWm1aWGIzSmtjMWRwZEdoVGNHRmpaWDBnWm5KdmJTQW5MaTlrYVdabUwzZHZjbVFuTzF4dWFXMXdiM0owSUh0a2FXWm1UR2x1WlhNc0lHUnBabVpVY21sdGJXVmtUR2x1WlhOOUlHWnliMjBnSnk0dlpHbG1aaTlzYVc1bEp6dGNibWx0Y0c5eWRDQjdaR2xtWmxObGJuUmxibU5sYzMwZ1puSnZiU0FuTGk5a2FXWm1MM05sYm5SbGJtTmxKenRjYmx4dWFXMXdiM0owSUh0a2FXWm1RM056ZlNCbWNtOXRJQ2N1TDJScFptWXZZM056Snp0Y2JtbHRjRzl5ZENCN1pHbG1aa3B6YjI0c0lHTmhibTl1YVdOaGJHbDZaWDBnWm5KdmJTQW5MaTlrYVdabUwycHpiMjRuTzF4dVhHNXBiWEJ2Y25RZ2UyUnBabVpCY25KaGVYTjlJR1p5YjIwZ0p5NHZaR2xtWmk5aGNuSmhlU2M3WEc1Y2JtbHRjRzl5ZENCN1lYQndiSGxRWVhSamFDd2dZWEJ3YkhsUVlYUmphR1Z6ZlNCbWNtOXRJQ2N1TDNCaGRHTm9MMkZ3Y0d4NUp6dGNibWx0Y0c5eWRDQjdjR0Z5YzJWUVlYUmphSDBnWm5KdmJTQW5MaTl3WVhSamFDOXdZWEp6WlNjN1hHNXBiWEJ2Y25RZ2UyMWxjbWRsZlNCbWNtOXRJQ2N1TDNCaGRHTm9MMjFsY21kbEp6dGNibWx0Y0c5eWRDQjdjM1J5ZFdOMGRYSmxaRkJoZEdOb0xDQmpjbVZoZEdWVWQyOUdhV3hsYzFCaGRHTm9MQ0JqY21WaGRHVlFZWFJqYUgwZ1puSnZiU0FuTGk5d1lYUmphQzlqY21WaGRHVW5PMXh1WEc1cGJYQnZjblFnZTJOdmJuWmxjblJEYUdGdVoyVnpWRzlFVFZCOUlHWnliMjBnSnk0dlkyOXVkbVZ5ZEM5a2JYQW5PMXh1YVcxd2IzSjBJSHRqYjI1MlpYSjBRMmhoYm1kbGMxUnZXRTFNZlNCbWNtOXRJQ2N1TDJOdmJuWmxjblF2ZUcxc0p6dGNibHh1Wlhod2IzSjBJSHRjYmlBZ1JHbG1aaXhjYmx4dUlDQmthV1ptUTJoaGNuTXNYRzRnSUdScFptWlhiM0prY3l4Y2JpQWdaR2xtWmxkdmNtUnpWMmwwYUZOd1lXTmxMRnh1SUNCa2FXWm1UR2x1WlhNc1hHNGdJR1JwWm1aVWNtbHRiV1ZrVEdsdVpYTXNYRzRnSUdScFptWlRaVzUwWlc1alpYTXNYRzVjYmlBZ1pHbG1aa056Y3l4Y2JpQWdaR2xtWmtwemIyNHNYRzVjYmlBZ1pHbG1aa0Z5Y21GNWN5eGNibHh1SUNCemRISjFZM1IxY21Wa1VHRjBZMmdzWEc0Z0lHTnlaV0YwWlZSM2IwWnBiR1Z6VUdGMFkyZ3NYRzRnSUdOeVpXRjBaVkJoZEdOb0xGeHVJQ0JoY0hCc2VWQmhkR05vTEZ4dUlDQmhjSEJzZVZCaGRHTm9aWE1zWEc0Z0lIQmhjbk5sVUdGMFkyZ3NYRzRnSUcxbGNtZGxMRnh1SUNCamIyNTJaWEowUTJoaGJtZGxjMVJ2UkUxUUxGeHVJQ0JqYjI1MlpYSjBRMmhoYm1kbGMxUnZXRTFNTEZ4dUlDQmpZVzV2Ym1sallXeHBlbVZjYm4wN1hHNGlYWDA9XG5cblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzWydkZWZhdWx0J10gPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL0RpZmY7XG5cdGZ1bmN0aW9uIERpZmYoKSB7fVxuXG5cdERpZmYucHJvdG90eXBlID0ge1xuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmOiBmdW5jdGlvbiBkaWZmKG9sZFN0cmluZywgbmV3U3RyaW5nKSB7XG5cdCAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIC8qaXN0YW5idWwgaWdub3JlIGVuZCovb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cblx0ICAgIHZhciBjYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuXHQgICAgICBvcHRpb25zID0ge307XG5cdCAgICB9XG5cdCAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG5cdCAgICB2YXIgc2VsZiA9IHRoaXM7XG5cblx0ICAgIGZ1bmN0aW9uIGRvbmUodmFsdWUpIHtcblx0ICAgICAgaWYgKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQsIHZhbHVlKTtcblx0ICAgICAgICB9LCAwKTtcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgLy8gQWxsb3cgc3ViY2xhc3NlcyB0byBtYXNzYWdlIHRoZSBpbnB1dCBwcmlvciB0byBydW5uaW5nXG5cdCAgICBvbGRTdHJpbmcgPSB0aGlzLmNhc3RJbnB1dChvbGRTdHJpbmcpO1xuXHQgICAgbmV3U3RyaW5nID0gdGhpcy5jYXN0SW5wdXQobmV3U3RyaW5nKTtcblxuXHQgICAgb2xkU3RyaW5nID0gdGhpcy5yZW1vdmVFbXB0eSh0aGlzLnRva2VuaXplKG9sZFN0cmluZykpO1xuXHQgICAgbmV3U3RyaW5nID0gdGhpcy5yZW1vdmVFbXB0eSh0aGlzLnRva2VuaXplKG5ld1N0cmluZykpO1xuXG5cdCAgICB2YXIgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCxcblx0ICAgICAgICBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoO1xuXHQgICAgdmFyIGVkaXRMZW5ndGggPSAxO1xuXHQgICAgdmFyIG1heEVkaXRMZW5ndGggPSBuZXdMZW4gKyBvbGRMZW47XG5cdCAgICB2YXIgYmVzdFBhdGggPSBbeyBuZXdQb3M6IC0xLCBjb21wb25lbnRzOiBbXSB9XTtcblxuXHQgICAgLy8gU2VlZCBlZGl0TGVuZ3RoID0gMCwgaS5lLiB0aGUgY29udGVudCBzdGFydHMgd2l0aCB0aGUgc2FtZSB2YWx1ZXNcblx0ICAgIHZhciBvbGRQb3MgPSB0aGlzLmV4dHJhY3RDb21tb24oYmVzdFBhdGhbMF0sIG5ld1N0cmluZywgb2xkU3RyaW5nLCAwKTtcblx0ICAgIGlmIChiZXN0UGF0aFswXS5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBvbGRQb3MgKyAxID49IG9sZExlbikge1xuXHQgICAgICAvLyBJZGVudGl0eSBwZXIgdGhlIGVxdWFsaXR5IGFuZCB0b2tlbml6ZXJcblx0ICAgICAgcmV0dXJuIGRvbmUoW3sgdmFsdWU6IHRoaXMuam9pbihuZXdTdHJpbmcpLCBjb3VudDogbmV3U3RyaW5nLmxlbmd0aCB9XSk7XG5cdCAgICB9XG5cblx0ICAgIC8vIE1haW4gd29ya2VyIG1ldGhvZC4gY2hlY2tzIGFsbCBwZXJtdXRhdGlvbnMgb2YgYSBnaXZlbiBlZGl0IGxlbmd0aCBmb3IgYWNjZXB0YW5jZS5cblx0ICAgIGZ1bmN0aW9uIGV4ZWNFZGl0TGVuZ3RoKCkge1xuXHQgICAgICBmb3IgKHZhciBkaWFnb25hbFBhdGggPSAtMSAqIGVkaXRMZW5ndGg7IGRpYWdvbmFsUGF0aCA8PSBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggKz0gMikge1xuXHQgICAgICAgIHZhciBiYXNlUGF0aCA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cdCAgICAgICAgdmFyIGFkZFBhdGggPSBiZXN0UGF0aFtkaWFnb25hbFBhdGggLSAxXSxcblx0ICAgICAgICAgICAgcmVtb3ZlUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCArIDFdLFxuXHQgICAgICAgICAgICBfb2xkUG9zID0gKHJlbW92ZVBhdGggPyByZW1vdmVQYXRoLm5ld1BvcyA6IDApIC0gZGlhZ29uYWxQYXRoO1xuXHQgICAgICAgIGlmIChhZGRQYXRoKSB7XG5cdCAgICAgICAgICAvLyBObyBvbmUgZWxzZSBpcyBnb2luZyB0byBhdHRlbXB0IHRvIHVzZSB0aGlzIHZhbHVlLCBjbGVhciBpdFxuXHQgICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0gPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdmFyIGNhbkFkZCA9IGFkZFBhdGggJiYgYWRkUGF0aC5uZXdQb3MgKyAxIDwgbmV3TGVuLFxuXHQgICAgICAgICAgICBjYW5SZW1vdmUgPSByZW1vdmVQYXRoICYmIDAgPD0gX29sZFBvcyAmJiBfb2xkUG9zIDwgb2xkTGVuO1xuXHQgICAgICAgIGlmICghY2FuQWRkICYmICFjYW5SZW1vdmUpIHtcblx0ICAgICAgICAgIC8vIElmIHRoaXMgcGF0aCBpcyBhIHRlcm1pbmFsIHRoZW4gcHJ1bmVcblx0ICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICBjb250aW51ZTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBTZWxlY3QgdGhlIGRpYWdvbmFsIHRoYXQgd2Ugd2FudCB0byBicmFuY2ggZnJvbS4gV2Ugc2VsZWN0IHRoZSBwcmlvclxuXHQgICAgICAgIC8vIHBhdGggd2hvc2UgcG9zaXRpb24gaW4gdGhlIG5ldyBzdHJpbmcgaXMgdGhlIGZhcnRoZXN0IGZyb20gdGhlIG9yaWdpblxuXHQgICAgICAgIC8vIGFuZCBkb2VzIG5vdCBwYXNzIHRoZSBib3VuZHMgb2YgdGhlIGRpZmYgZ3JhcGhcblx0ICAgICAgICBpZiAoIWNhbkFkZCB8fCBjYW5SZW1vdmUgJiYgYWRkUGF0aC5uZXdQb3MgPCByZW1vdmVQYXRoLm5ld1Bvcykge1xuXHQgICAgICAgICAgYmFzZVBhdGggPSBjbG9uZVBhdGgocmVtb3ZlUGF0aCk7XG5cdCAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdW5kZWZpbmVkLCB0cnVlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgYmFzZVBhdGggPSBhZGRQYXRoOyAvLyBObyBuZWVkIHRvIGNsb25lLCB3ZSd2ZSBwdWxsZWQgaXQgZnJvbSB0aGUgbGlzdFxuXHQgICAgICAgICAgYmFzZVBhdGgubmV3UG9zKys7XG5cdCAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdHJ1ZSwgdW5kZWZpbmVkKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBfb2xkUG9zID0gc2VsZi5leHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKTtcblxuXHQgICAgICAgIC8vIElmIHdlIGhhdmUgaGl0IHRoZSBlbmQgb2YgYm90aCBzdHJpbmdzLCB0aGVuIHdlIGFyZSBkb25lXG5cdCAgICAgICAgaWYgKGJhc2VQYXRoLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIF9vbGRQb3MgKyAxID49IG9sZExlbikge1xuXHQgICAgICAgICAgcmV0dXJuIGRvbmUoYnVpbGRWYWx1ZXMoc2VsZiwgYmFzZVBhdGguY29tcG9uZW50cywgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHNlbGYudXNlTG9uZ2VzdFRva2VuKSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIC8vIE90aGVyd2lzZSB0cmFjayB0aGlzIHBhdGggYXMgYSBwb3RlbnRpYWwgY2FuZGlkYXRlIGFuZCBjb250aW51ZS5cblx0ICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSBiYXNlUGF0aDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICBlZGl0TGVuZ3RoKys7XG5cdCAgICB9XG5cblx0ICAgIC8vIFBlcmZvcm1zIHRoZSBsZW5ndGggb2YgZWRpdCBpdGVyYXRpb24uIElzIGEgYml0IGZ1Z2x5IGFzIHRoaXMgaGFzIHRvIHN1cHBvcnQgdGhlXG5cdCAgICAvLyBzeW5jIGFuZCBhc3luYyBtb2RlIHdoaWNoIGlzIG5ldmVyIGZ1bi4gTG9vcHMgb3ZlciBleGVjRWRpdExlbmd0aCB1bnRpbCBhIHZhbHVlXG5cdCAgICAvLyBpcyBwcm9kdWNlZC5cblx0ICAgIGlmIChjYWxsYmFjaykge1xuXHQgICAgICAoZnVuY3Rpb24gZXhlYygpIHtcblx0ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCB3ZSB3YW50IHRvIGJlIHNhZmUuXG5cdCAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQgICAgICAgICAgaWYgKGVkaXRMZW5ndGggPiBtYXhFZGl0TGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICBpZiAoIWV4ZWNFZGl0TGVuZ3RoKCkpIHtcblx0ICAgICAgICAgICAgZXhlYygpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0sIDApO1xuXHQgICAgICB9KSgpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgd2hpbGUgKGVkaXRMZW5ndGggPD0gbWF4RWRpdExlbmd0aCkge1xuXHQgICAgICAgIHZhciByZXQgPSBleGVjRWRpdExlbmd0aCgpO1xuXHQgICAgICAgIGlmIChyZXQpIHtcblx0ICAgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovIC8qaXN0YW5idWwgaWdub3JlIGVuZCovcHVzaENvbXBvbmVudDogZnVuY3Rpb24gcHVzaENvbXBvbmVudChjb21wb25lbnRzLCBhZGRlZCwgcmVtb3ZlZCkge1xuXHQgICAgdmFyIGxhc3QgPSBjb21wb25lbnRzW2NvbXBvbmVudHMubGVuZ3RoIC0gMV07XG5cdCAgICBpZiAobGFzdCAmJiBsYXN0LmFkZGVkID09PSBhZGRlZCAmJiBsYXN0LnJlbW92ZWQgPT09IHJlbW92ZWQpIHtcblx0ICAgICAgLy8gV2UgbmVlZCB0byBjbG9uZSBoZXJlIGFzIHRoZSBjb21wb25lbnQgY2xvbmUgb3BlcmF0aW9uIGlzIGp1c3Rcblx0ICAgICAgLy8gYXMgc2hhbGxvdyBhcnJheSBjbG9uZVxuXHQgICAgICBjb21wb25lbnRzW2NvbXBvbmVudHMubGVuZ3RoIC0gMV0gPSB7IGNvdW50OiBsYXN0LmNvdW50ICsgMSwgYWRkZWQ6IGFkZGVkLCByZW1vdmVkOiByZW1vdmVkIH07XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBjb21wb25lbnRzLnB1c2goeyBjb3VudDogMSwgYWRkZWQ6IGFkZGVkLCByZW1vdmVkOiByZW1vdmVkIH0pO1xuXHQgICAgfVxuXHQgIH0sXG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2V4dHJhY3RDb21tb246IGZ1bmN0aW9uIGV4dHJhY3RDb21tb24oYmFzZVBhdGgsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBkaWFnb25hbFBhdGgpIHtcblx0ICAgIHZhciBuZXdMZW4gPSBuZXdTdHJpbmcubGVuZ3RoLFxuXHQgICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGgsXG5cdCAgICAgICAgbmV3UG9zID0gYmFzZVBhdGgubmV3UG9zLFxuXHQgICAgICAgIG9sZFBvcyA9IG5ld1BvcyAtIGRpYWdvbmFsUGF0aCxcblx0ICAgICAgICBjb21tb25Db3VudCA9IDA7XG5cdCAgICB3aGlsZSAobmV3UG9zICsgMSA8IG5ld0xlbiAmJiBvbGRQb3MgKyAxIDwgb2xkTGVuICYmIHRoaXMuZXF1YWxzKG5ld1N0cmluZ1tuZXdQb3MgKyAxXSwgb2xkU3RyaW5nW29sZFBvcyArIDFdKSkge1xuXHQgICAgICBuZXdQb3MrKztcblx0ICAgICAgb2xkUG9zKys7XG5cdCAgICAgIGNvbW1vbkNvdW50Kys7XG5cdCAgICB9XG5cblx0ICAgIGlmIChjb21tb25Db3VudCkge1xuXHQgICAgICBiYXNlUGF0aC5jb21wb25lbnRzLnB1c2goeyBjb3VudDogY29tbW9uQ291bnQgfSk7XG5cdCAgICB9XG5cblx0ICAgIGJhc2VQYXRoLm5ld1BvcyA9IG5ld1Bvcztcblx0ICAgIHJldHVybiBvbGRQb3M7XG5cdCAgfSxcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZXF1YWxzOiBmdW5jdGlvbiBlcXVhbHMobGVmdCwgcmlnaHQpIHtcblx0ICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGFyYXRvcikge1xuXHQgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNvbXBhcmF0b3IobGVmdCwgcmlnaHQpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8IHRoaXMub3B0aW9ucy5pZ25vcmVDYXNlICYmIGxlZnQudG9Mb3dlckNhc2UoKSA9PT0gcmlnaHQudG9Mb3dlckNhc2UoKTtcblx0ICAgIH1cblx0ICB9LFxuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9yZW1vdmVFbXB0eTogZnVuY3Rpb24gcmVtb3ZlRW1wdHkoYXJyYXkpIHtcblx0ICAgIHZhciByZXQgPSBbXTtcblx0ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgaWYgKGFycmF5W2ldKSB7XG5cdCAgICAgICAgcmV0LnB1c2goYXJyYXlbaV0pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgICByZXR1cm4gcmV0O1xuXHQgIH0sXG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2Nhc3RJbnB1dDogZnVuY3Rpb24gY2FzdElucHV0KHZhbHVlKSB7XG5cdCAgICByZXR1cm4gdmFsdWU7XG5cdCAgfSxcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovIC8qaXN0YW5idWwgaWdub3JlIGVuZCovdG9rZW5pemU6IGZ1bmN0aW9uIHRva2VuaXplKHZhbHVlKSB7XG5cdCAgICByZXR1cm4gdmFsdWUuc3BsaXQoJycpO1xuXHQgIH0sXG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2pvaW46IGZ1bmN0aW9uIGpvaW4oY2hhcnMpIHtcblx0ICAgIHJldHVybiBjaGFycy5qb2luKCcnKTtcblx0ICB9XG5cdH07XG5cblx0ZnVuY3Rpb24gYnVpbGRWYWx1ZXMoZGlmZiwgY29tcG9uZW50cywgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHVzZUxvbmdlc3RUb2tlbikge1xuXHQgIHZhciBjb21wb25lbnRQb3MgPSAwLFxuXHQgICAgICBjb21wb25lbnRMZW4gPSBjb21wb25lbnRzLmxlbmd0aCxcblx0ICAgICAgbmV3UG9zID0gMCxcblx0ICAgICAgb2xkUG9zID0gMDtcblxuXHQgIGZvciAoOyBjb21wb25lbnRQb3MgPCBjb21wb25lbnRMZW47IGNvbXBvbmVudFBvcysrKSB7XG5cdCAgICB2YXIgY29tcG9uZW50ID0gY29tcG9uZW50c1tjb21wb25lbnRQb3NdO1xuXHQgICAgaWYgKCFjb21wb25lbnQucmVtb3ZlZCkge1xuXHQgICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCAmJiB1c2VMb25nZXN0VG9rZW4pIHtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBuZXdTdHJpbmcuc2xpY2UobmV3UG9zLCBuZXdQb3MgKyBjb21wb25lbnQuY291bnQpO1xuXHQgICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGZ1bmN0aW9uICh2YWx1ZSwgaSkge1xuXHQgICAgICAgICAgdmFyIG9sZFZhbHVlID0gb2xkU3RyaW5nW29sZFBvcyArIGldO1xuXHQgICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmxlbmd0aCA+IHZhbHVlLmxlbmd0aCA/IG9sZFZhbHVlIDogdmFsdWU7XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4odmFsdWUpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbihuZXdTdHJpbmcuc2xpY2UobmV3UG9zLCBuZXdQb3MgKyBjb21wb25lbnQuY291bnQpKTtcblx0ICAgICAgfVxuXHQgICAgICBuZXdQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuXG5cdCAgICAgIC8vIENvbW1vbiBjYXNlXG5cdCAgICAgIGlmICghY29tcG9uZW50LmFkZGVkKSB7XG5cdCAgICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcblx0ICAgICAgfVxuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG9sZFN0cmluZy5zbGljZShvbGRQb3MsIG9sZFBvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuXHQgICAgICBvbGRQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuXG5cdCAgICAgIC8vIFJldmVyc2UgYWRkIGFuZCByZW1vdmUgc28gcmVtb3ZlcyBhcmUgb3V0cHV0IGZpcnN0IHRvIG1hdGNoIGNvbW1vbiBjb252ZW50aW9uXG5cdCAgICAgIC8vIFRoZSBkaWZmaW5nIGFsZ29yaXRobSBpcyB0aWVkIHRvIGFkZCB0aGVuIHJlbW92ZSBvdXRwdXQgYW5kIHRoaXMgaXMgdGhlIHNpbXBsZXN0XG5cdCAgICAgIC8vIHJvdXRlIHRvIGdldCB0aGUgZGVzaXJlZCBvdXRwdXQgd2l0aCBtaW5pbWFsIG92ZXJoZWFkLlxuXHQgICAgICBpZiAoY29tcG9uZW50UG9zICYmIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0uYWRkZWQpIHtcblx0ICAgICAgICB2YXIgdG1wID0gY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXTtcblx0ICAgICAgICBjb21wb25lbnRzW2NvbXBvbmVudFBvcyAtIDFdID0gY29tcG9uZW50c1tjb21wb25lbnRQb3NdO1xuXHQgICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zXSA9IHRtcDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIC8vIFNwZWNpYWwgY2FzZSBoYW5kbGUgZm9yIHdoZW4gb25lIHRlcm1pbmFsIGlzIGlnbm9yZWQgKGkuZS4gd2hpdGVzcGFjZSkuXG5cdCAgLy8gRm9yIHRoaXMgY2FzZSB3ZSBtZXJnZSB0aGUgdGVybWluYWwgaW50byB0aGUgcHJpb3Igc3RyaW5nIGFuZCBkcm9wIHRoZSBjaGFuZ2UuXG5cdCAgLy8gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3Igc3RyaW5nIG1vZGUuXG5cdCAgdmFyIGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuXHQgIGlmIChjb21wb25lbnRMZW4gPiAxICYmIHR5cGVvZiBsYXN0Q29tcG9uZW50LnZhbHVlID09PSAnc3RyaW5nJyAmJiAobGFzdENvbXBvbmVudC5hZGRlZCB8fCBsYXN0Q29tcG9uZW50LnJlbW92ZWQpICYmIGRpZmYuZXF1YWxzKCcnLCBsYXN0Q29tcG9uZW50LnZhbHVlKSkge1xuXHQgICAgY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAyXS52YWx1ZSArPSBsYXN0Q29tcG9uZW50LnZhbHVlO1xuXHQgICAgY29tcG9uZW50cy5wb3AoKTtcblx0ICB9XG5cblx0ICByZXR1cm4gY29tcG9uZW50cztcblx0fVxuXG5cdGZ1bmN0aW9uIGNsb25lUGF0aChwYXRoKSB7XG5cdCAgcmV0dXJuIHsgbmV3UG9zOiBwYXRoLm5ld1BvcywgY29tcG9uZW50czogcGF0aC5jb21wb25lbnRzLnNsaWNlKDApIH07XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5a2FXWm1MMkpoYzJVdWFuTWlYU3dpYm1GdFpYTWlPbHNpUkdsbVppSXNJbkJ5YjNSdmRIbHdaU0lzSW1ScFptWWlMQ0p2YkdSVGRISnBibWNpTENKdVpYZFRkSEpwYm1jaUxDSnZjSFJwYjI1eklpd2lZMkZzYkdKaFkyc2lMQ0p6Wld4bUlpd2laRzl1WlNJc0luWmhiSFZsSWl3aWMyVjBWR2x0Wlc5MWRDSXNJblZ1WkdWbWFXNWxaQ0lzSW1OaGMzUkpibkIxZENJc0luSmxiVzkyWlVWdGNIUjVJaXdpZEc5clpXNXBlbVVpTENKdVpYZE1aVzRpTENKc1pXNW5kR2dpTENKdmJHUk1aVzRpTENKbFpHbDBUR1Z1WjNSb0lpd2liV0Y0UldScGRFeGxibWQwYUNJc0ltSmxjM1JRWVhSb0lpd2libVYzVUc5eklpd2lZMjl0Y0c5dVpXNTBjeUlzSW05c1pGQnZjeUlzSW1WNGRISmhZM1JEYjIxdGIyNGlMQ0pxYjJsdUlpd2lZMjkxYm5RaUxDSmxlR1ZqUldScGRFeGxibWQwYUNJc0ltUnBZV2R2Ym1Gc1VHRjBhQ0lzSW1KaGMyVlFZWFJvSWl3aVlXUmtVR0YwYUNJc0luSmxiVzkyWlZCaGRHZ2lMQ0pqWVc1QlpHUWlMQ0pqWVc1U1pXMXZkbVVpTENKamJHOXVaVkJoZEdnaUxDSndkWE5vUTI5dGNHOXVaVzUwSWl3aVluVnBiR1JXWVd4MVpYTWlMQ0oxYzJWTWIyNW5aWE4wVkc5clpXNGlMQ0psZUdWaklpd2ljbVYwSWl3aVlXUmtaV1FpTENKeVpXMXZkbVZrSWl3aWJHRnpkQ0lzSW5CMWMyZ2lMQ0pqYjIxdGIyNURiM1Z1ZENJc0ltVnhkV0ZzY3lJc0lteGxablFpTENKeWFXZG9kQ0lzSW1OdmJYQmhjbUYwYjNJaUxDSnBaMjV2Y21WRFlYTmxJaXdpZEc5TWIzZGxja05oYzJVaUxDSmhjbkpoZVNJc0lta2lMQ0p6Y0d4cGRDSXNJbU5vWVhKeklpd2lZMjl0Y0c5dVpXNTBVRzl6SWl3aVkyOXRjRzl1Wlc1MFRHVnVJaXdpWTI5dGNHOXVaVzUwSWl3aWMyeHBZMlVpTENKdFlYQWlMQ0p2YkdSV1lXeDFaU0lzSW5SdGNDSXNJbXhoYzNSRGIyMXdiMjVsYm5RaUxDSndiM0FpTENKd1lYUm9JbDBzSW0xaGNIQnBibWR6SWpvaU96czdORU5CUVhkQ1FTeEpPMEZCUVZRc1UwRkJVMEVzU1VGQlZDeEhRVUZuUWl4RFFVRkZPenRCUVVWcVEwRXNTMEZCUzBNc1UwRkJUQ3hIUVVGcFFqdEJRVUZCTEcxRVFVTm1ReXhKUVVSbExHZENRVU5XUXl4VFFVUlZMRVZCUTBORExGTkJSRVFzUlVGRE1FSTdRVUZCUVN4M1JFRkJaRU1zVDBGQll5eDFSVUZCU2l4RlFVRkpPenRCUVVOMlF5eFJRVUZKUXl4WFFVRlhSQ3hSUVVGUlF5eFJRVUYyUWp0QlFVTkJMRkZCUVVrc1QwRkJUMFFzVDBGQlVDeExRVUZ0UWl4VlFVRjJRaXhGUVVGdFF6dEJRVU5xUTBNc2FVSkJRVmRFTEU5QlFWZzdRVUZEUVVFc1owSkJRVlVzUlVGQlZqdEJRVU5FTzBGQlEwUXNVMEZCUzBFc1QwRkJUQ3hIUVVGbFFTeFBRVUZtT3p0QlFVVkJMRkZCUVVsRkxFOUJRVThzU1VGQldEczdRVUZGUVN4aFFVRlRReXhKUVVGVUxFTkJRV05ETEV0QlFXUXNSVUZCY1VJN1FVRkRia0lzVlVGQlNVZ3NVVUZCU2l4RlFVRmpPMEZCUTFwSkxHMUNRVUZYTEZsQlFWYzdRVUZCUlVvc2JVSkJRVk5MTEZOQlFWUXNSVUZCYjBKR0xFdEJRWEJDTzBGQlFUWkNMRk5CUVhKRUxFVkJRWFZFTEVOQlFYWkVPMEZCUTBFc1pVRkJUeXhKUVVGUU8wRkJRMFFzVDBGSVJDeE5RVWRQTzBGQlEwd3NaVUZCVDBFc1MwRkJVRHRCUVVORU8wRkJRMFk3TzBGQlJVUTdRVUZEUVU0c1owSkJRVmtzUzBGQlMxTXNVMEZCVEN4RFFVRmxWQ3hUUVVGbUxFTkJRVm83UVVGRFFVTXNaMEpCUVZrc1MwRkJTMUVzVTBGQlRDeERRVUZsVWl4VFFVRm1MRU5CUVZvN08wRkJSVUZFTEdkQ1FVRlpMRXRCUVV0VkxGZEJRVXdzUTBGQmFVSXNTMEZCUzBNc1VVRkJUQ3hEUVVGaldDeFRRVUZrTEVOQlFXcENMRU5CUVZvN1FVRkRRVU1zWjBKQlFWa3NTMEZCUzFNc1YwRkJUQ3hEUVVGcFFpeExRVUZMUXl4UlFVRk1MRU5CUVdOV0xGTkJRV1FzUTBGQmFrSXNRMEZCV2pzN1FVRkZRU3hSUVVGSlZ5eFRRVUZUV0N4VlFVRlZXU3hOUVVGMlFqdEJRVUZCTEZGQlFTdENReXhUUVVGVFpDeFZRVUZWWVN4TlFVRnNSRHRCUVVOQkxGRkJRVWxGTEdGQlFXRXNRMEZCYWtJN1FVRkRRU3hSUVVGSlF5eG5Ra0ZCWjBKS0xGTkJRVk5GTEUxQlFUZENPMEZCUTBFc1VVRkJTVWNzVjBGQlZ5eERRVUZETEVWQlFVVkRMRkZCUVZFc1EwRkJReXhEUVVGWUxFVkJRV05ETEZsQlFWa3NSVUZCTVVJc1JVRkJSQ3hEUVVGbU96dEJRVVZCTzBGQlEwRXNVVUZCU1VNc1UwRkJVeXhMUVVGTFF5eGhRVUZNTEVOQlFXMUNTaXhUUVVGVExFTkJRVlFzUTBGQmJrSXNSVUZCWjBOb1FpeFRRVUZvUXl4RlFVRXlRMFFzVTBGQk0wTXNSVUZCYzBRc1EwRkJkRVFzUTBGQllqdEJRVU5CTEZGQlFVbHBRaXhUUVVGVExFTkJRVlFzUlVGQldVTXNUVUZCV2l4SFFVRnhRaXhEUVVGeVFpeEpRVUV3UWs0c1RVRkJNVUlzU1VGQmIwTlJMRk5CUVZNc1EwRkJWQ3hKUVVGalRpeE5RVUYwUkN4RlFVRTRSRHRCUVVNMVJEdEJRVU5CTEdGQlFVOVVMRXRCUVVzc1EwRkJReXhGUVVGRFF5eFBRVUZQTEV0QlFVdG5RaXhKUVVGTUxFTkJRVlZ5UWl4VFFVRldMRU5CUVZJc1JVRkJPRUp6UWl4UFFVRlBkRUlzVlVGQlZWa3NUVUZCTDBNc1JVRkJSQ3hEUVVGTUxFTkJRVkE3UVVGRFJEczdRVUZGUkR0QlFVTkJMR0ZCUVZOWExHTkJRVlFzUjBGQk1FSTdRVUZEZUVJc1YwRkJTeXhKUVVGSlF5eGxRVUZsTEVOQlFVTXNRMEZCUkN4SFFVRkxWaXhWUVVFM1FpeEZRVUY1UTFVc1owSkJRV2RDVml4VlFVRjZSQ3hGUVVGeFJWVXNaMEpCUVdkQ0xFTkJRWEpHTEVWQlFYZEdPMEZCUTNSR0xGbEJRVWxETERCRFFVRktPMEZCUTBFc1dVRkJTVU1zVlVGQlZWWXNVMEZCVTFFc1pVRkJaU3hEUVVGNFFpeERRVUZrTzBGQlFVRXNXVUZEU1Vjc1lVRkJZVmdzVTBGQlUxRXNaVUZCWlN4RFFVRjRRaXhEUVVScVFqdEJRVUZCTEZsQlJVbE1MRlZCUVZNc1EwRkJRMUVzWVVGQllVRXNWMEZCVjFZc1RVRkJlRUlzUjBGQmFVTXNRMEZCYkVNc1NVRkJkVU5QTEZsQlJuQkVPMEZCUjBFc1dVRkJTVVVzVDBGQlNpeEZRVUZoTzBGQlExZzdRVUZEUVZZc2JVSkJRVk5STEdWQlFXVXNRMEZCZUVJc1NVRkJOa0pxUWl4VFFVRTNRanRCUVVORU96dEJRVVZFTEZsQlFVbHhRaXhUUVVGVFJpeFhRVUZYUVN4UlFVRlJWQ3hOUVVGU0xFZEJRV2xDTEVOQlFXcENMRWRCUVhGQ1RpeE5RVUUzUXp0QlFVRkJMRmxCUTBsclFpeFpRVUZaUml4alFVRmpMRXRCUVV0U0xFOUJRVzVDTEVsQlFUWkNRU3hWUVVGVFRpeE5RVVIwUkR0QlFVVkJMRmxCUVVrc1EwRkJRMlVzVFVGQlJDeEpRVUZYTEVOQlFVTkRMRk5CUVdoQ0xFVkJRVEpDTzBGQlEzcENPMEZCUTBGaUxHMUNRVUZUVVN4WlFVRlVMRWxCUVhsQ2FrSXNVMEZCZWtJN1FVRkRRVHRCUVVORU96dEJRVVZFTzBGQlEwRTdRVUZEUVR0QlFVTkJMRmxCUVVrc1EwRkJRM0ZDTEUxQlFVUXNTVUZCV1VNc1lVRkJZVWdzVVVGQlVWUXNUVUZCVWl4SFFVRnBRbFVzVjBGQlYxWXNUVUZCZWtRc1JVRkJhMFU3UVVGRGFFVlJMSEZDUVVGWFN5eFZRVUZWU0N4VlFVRldMRU5CUVZnN1FVRkRRWGhDTEdWQlFVczBRaXhoUVVGTUxFTkJRVzFDVGl4VFFVRlRVQ3hWUVVFMVFpeEZRVUYzUTFnc1UwRkJlRU1zUlVGQmJVUXNTVUZCYmtRN1FVRkRSQ3hUUVVoRUxFMUJSMDg3UVVGRFRHdENMSEZDUVVGWFF5eFBRVUZZTEVOQlJFc3NRMEZEYVVJN1FVRkRkRUpFTEcxQ1FVRlRVaXhOUVVGVU8wRkJRMEZrTEdWQlFVczBRaXhoUVVGTUxFTkJRVzFDVGl4VFFVRlRVQ3hWUVVFMVFpeEZRVUYzUXl4SlFVRjRReXhGUVVFNFExZ3NVMEZCT1VNN1FVRkRSRHM3UVVGRlJGa3NhMEpCUVZOb1FpeExRVUZMYVVJc1lVRkJUQ3hEUVVGdFFrc3NVVUZCYmtJc1JVRkJOa0o2UWl4VFFVRTNRaXhGUVVGM1EwUXNVMEZCZUVNc1JVRkJiVVI1UWl4WlFVRnVSQ3hEUVVGVU96dEJRVVZCTzBGQlEwRXNXVUZCU1VNc1UwRkJVMUlzVFVGQlZDeEhRVUZyUWl4RFFVRnNRaXhKUVVGMVFrNHNUVUZCZGtJc1NVRkJhVU5STEZWQlFWTXNRMEZCVkN4SlFVRmpUaXhOUVVGdVJDeEZRVUV5UkR0QlFVTjZSQ3hwUWtGQlQxUXNTMEZCU3pSQ0xGbEJRVmszUWl4SlFVRmFMRVZCUVd0Q2MwSXNVMEZCVTFBc1ZVRkJNMElzUlVGQmRVTnNRaXhUUVVGMlF5eEZRVUZyUkVRc1UwRkJiRVFzUlVGQk5rUkpMRXRCUVVzNFFpeGxRVUZzUlN4RFFVRk1MRU5CUVZBN1FVRkRSQ3hUUVVaRUxFMUJSVTg3UVVGRFREdEJRVU5CYWtJc2JVSkJRVk5STEZsQlFWUXNTVUZCZVVKRExGRkJRWHBDTzBGQlEwUTdRVUZEUmpzN1FVRkZSRmc3UVVGRFJEczdRVUZGUkR0QlFVTkJPMEZCUTBFN1FVRkRRU3hSUVVGSldpeFJRVUZLTEVWQlFXTTdRVUZEV0N4blFrRkJVMmRETEVsQlFWUXNSMEZCWjBJN1FVRkRaalZDTEcxQ1FVRlhMRmxCUVZjN1FVRkRjRUk3UVVGRFFUdEJRVU5CTEdOQlFVbFJMR0ZCUVdGRExHRkJRV3BDTEVWQlFXZERPMEZCUXpsQ0xHMUNRVUZQWWl4VlFVRlFPMEZCUTBRN08wRkJSVVFzWTBGQlNTeERRVUZEY1VJc1owSkJRVXdzUlVGQmRVSTdRVUZEY2tKWE8wRkJRMFE3UVVGRFJpeFRRVlpFTEVWQlZVY3NRMEZXU0R0QlFWZEVMRTlCV2tFc1IwRkJSRHRCUVdGRUxFdEJaRVFzVFVGalR6dEJRVU5NTEdGQlFVOXdRaXhqUVVGalF5eGhRVUZ5UWl4RlFVRnZRenRCUVVOc1F5eFpRVUZKYjBJc1RVRkJUVm9zWjBKQlFWWTdRVUZEUVN4WlFVRkpXU3hIUVVGS0xFVkJRVk03UVVGRFVDeHBRa0ZCVDBFc1IwRkJVRHRCUVVORU8wRkJRMFk3UVVGRFJqdEJRVU5HTEVkQk9VZGpPMEZCUVVFc2JVUkJaMGhtU2l4aFFXaElaU3g1UWtGblNFUmlMRlZCYUVoRExFVkJaMGhYYTBJc1MwRm9TRmdzUlVGblNHdENReXhQUVdoSWJFSXNSVUZuU0RKQ08wRkJRM2hETEZGQlFVbERMRTlCUVU5d1FpeFhRVUZYUVN4WFFVRlhUaXhOUVVGWUxFZEJRVzlDTEVOQlFTOUNMRU5CUVZnN1FVRkRRU3hSUVVGSk1FSXNVVUZCVVVFc1MwRkJTMFlzUzBGQlRDeExRVUZsUVN4TFFVRjJRaXhKUVVGblEwVXNTMEZCUzBRc1QwRkJUQ3hMUVVGcFFrRXNUMEZCY2tRc1JVRkJPRVE3UVVGRE5VUTdRVUZEUVR0QlFVTkJia0lzYVVKQlFWZEJMRmRCUVZkT0xFMUJRVmdzUjBGQmIwSXNRMEZCTDBJc1NVRkJiME1zUlVGQlExVXNUMEZCVDJkQ0xFdEJRVXRvUWl4TFFVRk1MRWRCUVdFc1EwRkJja0lzUlVGQmQwSmpMRTlCUVU5QkxFdEJRUzlDTEVWQlFYTkRReXhUUVVGVFFTeFBRVUV2UXl4RlFVRndRenRCUVVORUxFdEJTa1FzVFVGSlR6dEJRVU5NYmtJc2FVSkJRVmR4UWl4SlFVRllMRU5CUVdkQ0xFVkJRVU5xUWl4UFFVRlBMRU5CUVZJc1JVRkJWMk1zVDBGQlQwRXNTMEZCYkVJc1JVRkJlVUpETEZOQlFWTkJMRTlCUVd4RExFVkJRV2hDTzBGQlEwUTdRVUZEUml4SFFYcElZenRCUVVGQkxHMUVRVEJJWm1wQ0xHRkJNVWhsTEhsQ1FUQklSRXNzVVVFeFNFTXNSVUV3U0ZONlFpeFRRVEZJVkN4RlFUQkliMEpFTEZOQk1VaHdRaXhGUVRCSUswSjVRaXhaUVRGSUwwSXNSVUV3U0RaRE8wRkJRekZFTEZGQlFVbGlMRk5CUVZOWUxGVkJRVlZaTEUxQlFYWkNPMEZCUVVFc1VVRkRTVU1zVTBGQlUyUXNWVUZCVldFc1RVRkVka0k3UVVGQlFTeFJRVVZKU3l4VFFVRlRVU3hUUVVGVFVpeE5RVVowUWp0QlFVRkJMRkZCUjBsRkxGTkJRVk5HTEZOQlFWTlBMRmxCU0hSQ08wRkJRVUVzVVVGTFNXZENMR05CUVdNc1EwRk1iRUk3UVVGTlFTeFhRVUZQZGtJc1UwRkJVeXhEUVVGVUxFZEJRV0ZPTEUxQlFXSXNTVUZCZFVKUkxGTkJRVk1zUTBGQlZDeEhRVUZoVGl4TlFVRndReXhKUVVFNFF5eExRVUZMTkVJc1RVRkJUQ3hEUVVGWmVrTXNWVUZCVldsQ0xGTkJRVk1zUTBGQmJrSXNRMEZCV2l4RlFVRnRRMnhDTEZWQlFWVnZRaXhUUVVGVExFTkJRVzVDTEVOQlFXNURMRU5CUVhKRUxFVkJRV2RJTzBGQlF6bEhSanRCUVVOQlJUdEJRVU5CY1VJN1FVRkRSRHM3UVVGRlJDeFJRVUZKUVN4WFFVRktMRVZCUVdsQ08wRkJRMlptTEdWQlFWTlFMRlZCUVZRc1EwRkJiMEp4UWl4SlFVRndRaXhEUVVGNVFpeEZRVUZEYWtJc1QwRkJUMnRDTEZkQlFWSXNSVUZCZWtJN1FVRkRSRHM3UVVGRlJHWXNZVUZCVTFJc1RVRkJWQ3hIUVVGclFrRXNUVUZCYkVJN1FVRkRRU3hYUVVGUFJTeE5RVUZRTzBGQlEwUXNSMEUzU1dNN1FVRkJRU3h0UkVFclNXWnpRaXhOUVM5SlpTeHJRa0VyU1ZKRExFbEJMMGxSTEVWQkswbEdReXhMUVM5SlJTeEZRU3RKU3p0QlFVTnNRaXhSUVVGSkxFdEJRVXN4UXl4UFFVRk1MRU5CUVdFeVF5eFZRVUZxUWl4RlFVRTJRanRCUVVNelFpeGhRVUZQTEV0QlFVc3pReXhQUVVGTUxFTkJRV0V5UXl4VlFVRmlMRU5CUVhkQ1JpeEpRVUY0UWl4RlFVRTRRa01zUzBGQk9VSXNRMEZCVUR0QlFVTkVMRXRCUmtRc1RVRkZUenRCUVVOTUxHRkJRVTlFTEZOQlFWTkRMRXRCUVZRc1NVRkRSQ3hMUVVGTE1VTXNUMEZCVEN4RFFVRmhORU1zVlVGQllpeEpRVUV5UWtnc1MwRkJTMGtzVjBGQlRDeFBRVUYxUWtnc1RVRkJUVWNzVjBGQlRpeEZRVVI0UkR0QlFVVkVPMEZCUTBZc1IwRjBTbU03UVVGQlFTeHRSRUYxU21aeVF5eFhRWFpLWlN4MVFrRjFTa2h6UXl4TFFYWktSeXhGUVhWS1NUdEJRVU5xUWl4UlFVRkpXaXhOUVVGTkxFVkJRVlk3UVVGRFFTeFRRVUZMTEVsQlFVbGhMRWxCUVVrc1EwRkJZaXhGUVVGblFrRXNTVUZCU1VRc1RVRkJUVzVETEUxQlFURkNMRVZCUVd0RGIwTXNSMEZCYkVNc1JVRkJkVU03UVVGRGNrTXNWVUZCU1VRc1RVRkJUVU1zUTBGQlRpeERRVUZLTEVWQlFXTTdRVUZEV21Jc1dVRkJTVWtzU1VGQlNpeERRVUZUVVN4TlFVRk5ReXhEUVVGT0xFTkJRVlE3UVVGRFJEdEJRVU5HTzBGQlEwUXNWMEZCVDJJc1IwRkJVRHRCUVVORUxFZEJMMHBqTzBGQlFVRXNiVVJCWjB0bU0wSXNVMEZvUzJVc2NVSkJaMHRNU0N4TFFXaExTeXhGUVdkTFJUdEJRVU5tTEZkQlFVOUJMRXRCUVZBN1FVRkRSQ3hIUVd4TFl6dEJRVUZCTEcxRVFXMUxaa3NzVVVGdVMyVXNiMEpCYlV0T1RDeExRVzVMVFN4RlFXMUxRenRCUVVOa0xGZEJRVTlCTEUxQlFVMDBReXhMUVVGT0xFTkJRVmtzUlVGQldpeERRVUZRTzBGQlEwUXNSMEZ5UzJNN1FVRkJRU3h0UkVGelMyWTFRaXhKUVhSTFpTeG5Ra0Z6UzFZMlFpeExRWFJMVlN4RlFYTkxTRHRCUVVOV0xGZEJRVTlCTEUxQlFVMDNRaXhKUVVGT0xFTkJRVmNzUlVGQldDeERRVUZRTzBGQlEwUTdRVUY0UzJNc1EwRkJha0k3TzBGQk1rdEJMRk5CUVZOWExGZEJRVlFzUTBGQmNVSnNReXhKUVVGeVFpeEZRVUV5UW05Q0xGVkJRVE5DTEVWQlFYVkRiRUlzVTBGQmRrTXNSVUZCYTBSRUxGTkJRV3hFTEVWQlFUWkVhME1zWlVGQk4wUXNSVUZCT0VVN1FVRkROVVVzVFVGQlNXdENMR1ZCUVdVc1EwRkJia0k3UVVGQlFTeE5RVU5KUXl4bFFVRmxiRU1zVjBGQlYwNHNUVUZFT1VJN1FVRkJRU3hOUVVWSlN5eFRRVUZUTEVOQlJtSTdRVUZCUVN4TlFVZEpSU3hUUVVGVExFTkJTR0k3TzBGQlMwRXNVMEZCVDJkRExHVkJRV1ZETEZsQlFYUkNMRVZCUVc5RFJDeGpRVUZ3UXl4RlFVRnZSRHRCUVVOc1JDeFJRVUZKUlN4WlFVRlpia01zVjBGQlYybERMRmxCUVZnc1EwRkJhRUk3UVVGRFFTeFJRVUZKTEVOQlFVTkZMRlZCUVZWb1FpeFBRVUZtTEVWQlFYZENPMEZCUTNSQ0xGVkJRVWtzUTBGQlEyZENMRlZCUVZWcVFpeExRVUZZTEVsQlFXOUNTQ3hsUVVGNFFpeEZRVUY1UXp0QlFVTjJReXhaUVVGSk5VSXNVVUZCVVV3c1ZVRkJWWE5FTEV0QlFWWXNRMEZCWjBKeVF5eE5RVUZvUWl4RlFVRjNRa0VzVTBGQlUyOURMRlZCUVZVdlFpeExRVUV6UXl4RFFVRmFPMEZCUTBGcVFpeG5Ra0ZCVVVFc1RVRkJUV3RFTEVkQlFVNHNRMEZCVlN4VlFVRlRiRVFzUzBGQlZDeEZRVUZuUWpKRExFTkJRV2hDTEVWQlFXMUNPMEZCUTI1RExHTkJRVWxSTEZkQlFWZDZSQ3hWUVVGVmIwSXNVMEZCVXpaQ0xFTkJRVzVDTEVOQlFXWTdRVUZEUVN4cFFrRkJUMUVzVTBGQlV6VkRMRTFCUVZRc1IwRkJhMEpRTEUxQlFVMVBMRTFCUVhoQ0xFZEJRV2xETkVNc1VVRkJha01zUjBGQk5FTnVSQ3hMUVVGdVJEdEJRVU5FTEZOQlNFOHNRMEZCVWpzN1FVRkxRV2RFTEd0Q1FVRlZhRVFzUzBGQlZpeEhRVUZyUWxBc1MwRkJTM1ZDTEVsQlFVd3NRMEZCVldoQ0xFdEJRVllzUTBGQmJFSTdRVUZEUkN4UFFWSkVMRTFCVVU4N1FVRkRUR2RFTEd0Q1FVRlZhRVFzUzBGQlZpeEhRVUZyUWxBc1MwRkJTM1ZDTEVsQlFVd3NRMEZCVlhKQ0xGVkJRVlZ6UkN4TFFVRldMRU5CUVdkQ2NrTXNUVUZCYUVJc1JVRkJkMEpCTEZOQlFWTnZReXhWUVVGVkwwSXNTMEZCTTBNc1EwRkJWaXhEUVVGc1FqdEJRVU5FTzBGQlEwUk1MR2RDUVVGVmIwTXNWVUZCVlM5Q0xFdEJRWEJDT3p0QlFVVkJPMEZCUTBFc1ZVRkJTU3hEUVVGREswSXNWVUZCVldwQ0xFdEJRV1lzUlVGQmMwSTdRVUZEY0VKcVFpeHJRa0ZCVld0RExGVkJRVlV2UWl4TFFVRndRanRCUVVORU8wRkJRMFlzUzBGc1FrUXNUVUZyUWs4N1FVRkRUQ3RDTEdkQ1FVRlZhRVFzUzBGQlZpeEhRVUZyUWxBc1MwRkJTM1ZDTEVsQlFVd3NRMEZCVlhSQ0xGVkJRVlYxUkN4TFFVRldMRU5CUVdkQ2JrTXNUVUZCYUVJc1JVRkJkMEpCTEZOQlFWTnJReXhWUVVGVkwwSXNTMEZCTTBNc1EwRkJWaXhEUVVGc1FqdEJRVU5CU0N4blFrRkJWV3RETEZWQlFWVXZRaXhMUVVGd1FqczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRU3hWUVVGSk5rSXNaMEpCUVdkQ2FrTXNWMEZCVjJsRExHVkJRV1VzUTBGQk1VSXNSVUZCTmtKbUxFdEJRV3BFTEVWQlFYZEVPMEZCUTNSRUxGbEJRVWx4UWl4TlFVRk5ka01zVjBGQlYybERMR1ZCUVdVc1EwRkJNVUlzUTBGQlZqdEJRVU5CYWtNc2JVSkJRVmRwUXl4bFFVRmxMRU5CUVRGQ0xFbEJRU3RDYWtNc1YwRkJWMmxETEZsQlFWZ3NRMEZCTDBJN1FVRkRRV3BETEcxQ1FVRlhhVU1zV1VGQldDeEpRVUV5UWswc1IwRkJNMEk3UVVGRFJEdEJRVU5HTzBGQlEwWTdPMEZCUlVRN1FVRkRRVHRCUVVOQk8wRkJRMEVzVFVGQlNVTXNaMEpCUVdkQ2VFTXNWMEZCVjJ0RExHVkJRV1VzUTBGQk1VSXNRMEZCY0VJN1FVRkRRU3hOUVVGSlFTeGxRVUZsTEVOQlFXWXNTVUZEUnl4UFFVRlBUU3hqUVVGamNrUXNTMEZCY2tJc1MwRkJLMElzVVVGRWJFTXNTMEZGU1hGRUxHTkJRV04wUWl4TFFVRmtMRWxCUVhWQ2MwSXNZMEZCWTNKQ0xFOUJSbnBETEV0QlIwZDJReXhMUVVGTE1rTXNUVUZCVEN4RFFVRlpMRVZCUVZvc1JVRkJaMEpwUWl4alFVRmpja1FzUzBGQk9VSXNRMEZJVUN4RlFVYzJRenRCUVVNelEyRXNaVUZCVjJ0RExHVkJRV1VzUTBGQk1VSXNSVUZCTmtJdlF5eExRVUUzUWl4SlFVRnpRM0ZFTEdOQlFXTnlSQ3hMUVVGd1JEdEJRVU5CWVN4bFFVRlhlVU1zUjBGQldEdEJRVU5FT3p0QlFVVkVMRk5CUVU5NlF5eFZRVUZRTzBGQlEwUTdPMEZCUlVRc1UwRkJVMWtzVTBGQlZDeERRVUZ0UWpoQ0xFbEJRVzVDTEVWQlFYbENPMEZCUTNaQ0xGTkJRVThzUlVGQlJUTkRMRkZCUVZFeVF5eExRVUZMTTBNc1RVRkJaaXhGUVVGMVFrTXNXVUZCV1RCRExFdEJRVXN4UXl4VlFVRk1MRU5CUVdkQ2IwTXNTMEZCYUVJc1EwRkJjMElzUTBGQmRFSXNRMEZCYmtNc1JVRkJVRHRCUVVORUlpd2labWxzWlNJNkltSmhjMlV1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmxlSEJ2Y25RZ1pHVm1ZWFZzZENCbWRXNWpkR2x2YmlCRWFXWm1LQ2tnZTMxY2JseHVSR2xtWmk1d2NtOTBiM1I1Y0dVZ1BTQjdYRzRnSUdScFptWW9iMnhrVTNSeWFXNW5MQ0J1WlhkVGRISnBibWNzSUc5d2RHbHZibk1nUFNCN2ZTa2dlMXh1SUNBZ0lHeGxkQ0JqWVd4c1ltRmpheUE5SUc5d2RHbHZibk11WTJGc2JHSmhZMnM3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJ2Y0hScGIyNXpJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0lDQmpZV3hzWW1GamF5QTlJRzl3ZEdsdmJuTTdYRzRnSUNBZ0lDQnZjSFJwYjI1eklEMGdlMzA3WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11YjNCMGFXOXVjeUE5SUc5d2RHbHZibk03WEc1Y2JpQWdJQ0JzWlhRZ2MyVnNaaUE5SUhSb2FYTTdYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQmtiMjVsS0haaGJIVmxLU0I3WEc0Z0lDQWdJQ0JwWmlBb1kyRnNiR0poWTJzcElIdGNiaUFnSUNBZ0lDQWdjMlYwVkdsdFpXOTFkQ2htZFc1amRHbHZiaWdwSUhzZ1kyRnNiR0poWTJzb2RXNWtaV1pwYm1Wa0xDQjJZV3gxWlNrN0lIMHNJREFwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMllXeDFaVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJCYkd4dmR5QnpkV0pqYkdGemMyVnpJSFJ2SUcxaGMzTmhaMlVnZEdobElHbHVjSFYwSUhCeWFXOXlJSFJ2SUhKMWJtNXBibWRjYmlBZ0lDQnZiR1JUZEhKcGJtY2dQU0IwYUdsekxtTmhjM1JKYm5CMWRDaHZiR1JUZEhKcGJtY3BPMXh1SUNBZ0lHNWxkMU4wY21sdVp5QTlJSFJvYVhNdVkyRnpkRWx1Y0hWMEtHNWxkMU4wY21sdVp5azdYRzVjYmlBZ0lDQnZiR1JUZEhKcGJtY2dQU0IwYUdsekxuSmxiVzkyWlVWdGNIUjVLSFJvYVhNdWRHOXJaVzVwZW1Vb2IyeGtVM1J5YVc1bktTazdYRzRnSUNBZ2JtVjNVM1J5YVc1bklEMGdkR2hwY3k1eVpXMXZkbVZGYlhCMGVTaDBhR2x6TG5SdmEyVnVhWHBsS0c1bGQxTjBjbWx1WnlrcE8xeHVYRzRnSUNBZ2JHVjBJRzVsZDB4bGJpQTlJRzVsZDFOMGNtbHVaeTVzWlc1bmRHZ3NJRzlzWkV4bGJpQTlJRzlzWkZOMGNtbHVaeTVzWlc1bmRHZzdYRzRnSUNBZ2JHVjBJR1ZrYVhSTVpXNW5kR2dnUFNBeE8xeHVJQ0FnSUd4bGRDQnRZWGhGWkdsMFRHVnVaM1JvSUQwZ2JtVjNUR1Z1SUNzZ2IyeGtUR1Z1TzF4dUlDQWdJR3hsZENCaVpYTjBVR0YwYUNBOUlGdDdJRzVsZDFCdmN6b2dMVEVzSUdOdmJYQnZibVZ1ZEhNNklGdGRJSDFkTzF4dVhHNGdJQ0FnTHk4Z1UyVmxaQ0JsWkdsMFRHVnVaM1JvSUQwZ01Dd2dhUzVsTGlCMGFHVWdZMjl1ZEdWdWRDQnpkR0Z5ZEhNZ2QybDBhQ0IwYUdVZ2MyRnRaU0IyWVd4MVpYTmNiaUFnSUNCc1pYUWdiMnhrVUc5eklEMGdkR2hwY3k1bGVIUnlZV04wUTI5dGJXOXVLR0psYzNSUVlYUm9XekJkTENCdVpYZFRkSEpwYm1jc0lHOXNaRk4wY21sdVp5d2dNQ2s3WEc0Z0lDQWdhV1lnS0dKbGMzUlFZWFJvV3pCZExtNWxkMUJ2Y3lBcklERWdQajBnYm1WM1RHVnVJQ1ltSUc5c1pGQnZjeUFySURFZ1BqMGdiMnhrVEdWdUtTQjdYRzRnSUNBZ0lDQXZMeUJKWkdWdWRHbDBlU0J3WlhJZ2RHaGxJR1Z4ZFdGc2FYUjVJR0Z1WkNCMGIydGxibWw2WlhKY2JpQWdJQ0FnSUhKbGRIVnliaUJrYjI1bEtGdDdkbUZzZFdVNklIUm9hWE11YW05cGJpaHVaWGRUZEhKcGJtY3BMQ0JqYjNWdWREb2dibVYzVTNSeWFXNW5MbXhsYm1kMGFIMWRLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJOWVdsdUlIZHZjbXRsY2lCdFpYUm9iMlF1SUdOb1pXTnJjeUJoYkd3Z2NHVnliWFYwWVhScGIyNXpJRzltSUdFZ1oybDJaVzRnWldScGRDQnNaVzVuZEdnZ1ptOXlJR0ZqWTJWd2RHRnVZMlV1WEc0Z0lDQWdablZ1WTNScGIyNGdaWGhsWTBWa2FYUk1aVzVuZEdnb0tTQjdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQmthV0ZuYjI1aGJGQmhkR2dnUFNBdE1TQXFJR1ZrYVhSTVpXNW5kR2c3SUdScFlXZHZibUZzVUdGMGFDQThQU0JsWkdsMFRHVnVaM1JvT3lCa2FXRm5iMjVoYkZCaGRHZ2dLejBnTWlrZ2UxeHVJQ0FnSUNBZ0lDQnNaWFFnWW1GelpWQmhkR2c3WEc0Z0lDQWdJQ0FnSUd4bGRDQmhaR1JRWVhSb0lEMGdZbVZ6ZEZCaGRHaGJaR2xoWjI5dVlXeFFZWFJvSUMwZ01WMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpXMXZkbVZRWVhSb0lEMGdZbVZ6ZEZCaGRHaGJaR2xoWjI5dVlXeFFZWFJvSUNzZ01WMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCdmJHUlFiM01nUFNBb2NtVnRiM1psVUdGMGFDQS9JSEpsYlc5MlpWQmhkR2d1Ym1WM1VHOXpJRG9nTUNrZ0xTQmthV0ZuYjI1aGJGQmhkR2c3WEc0Z0lDQWdJQ0FnSUdsbUlDaGhaR1JRWVhSb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1RtOGdiMjVsSUdWc2MyVWdhWE1nWjI5cGJtY2dkRzhnWVhSMFpXMXdkQ0IwYnlCMWMyVWdkR2hwY3lCMllXeDFaU3dnWTJ4bFlYSWdhWFJjYmlBZ0lDQWdJQ0FnSUNCaVpYTjBVR0YwYUZ0a2FXRm5iMjVoYkZCaGRHZ2dMU0F4WFNBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUd4bGRDQmpZVzVCWkdRZ1BTQmhaR1JRWVhSb0lDWW1JR0ZrWkZCaGRHZ3VibVYzVUc5eklDc2dNU0E4SUc1bGQweGxiaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhibEpsYlc5MlpTQTlJSEpsYlc5MlpWQmhkR2dnSmlZZ01DQThQU0J2YkdSUWIzTWdKaVlnYjJ4a1VHOXpJRHdnYjJ4a1RHVnVPMXh1SUNBZ0lDQWdJQ0JwWmlBb0lXTmhia0ZrWkNBbUppQWhZMkZ1VW1WdGIzWmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdTV1lnZEdocGN5QndZWFJvSUdseklHRWdkR1Z5YldsdVlXd2dkR2hsYmlCd2NuVnVaVnh1SUNBZ0lDQWdJQ0FnSUdKbGMzUlFZWFJvVzJScFlXZHZibUZzVUdGMGFGMGdQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0F2THlCVFpXeGxZM1FnZEdobElHUnBZV2R2Ym1Gc0lIUm9ZWFFnZDJVZ2QyRnVkQ0IwYnlCaWNtRnVZMmdnWm5KdmJTNGdWMlVnYzJWc1pXTjBJSFJvWlNCd2NtbHZjbHh1SUNBZ0lDQWdJQ0F2THlCd1lYUm9JSGRvYjNObElIQnZjMmwwYVc5dUlHbHVJSFJvWlNCdVpYY2djM1J5YVc1bklHbHpJSFJvWlNCbVlYSjBhR1Z6ZENCbWNtOXRJSFJvWlNCdmNtbG5hVzVjYmlBZ0lDQWdJQ0FnTHk4Z1lXNWtJR1J2WlhNZ2JtOTBJSEJoYzNNZ2RHaGxJR0p2ZFc1a2N5QnZaaUIwYUdVZ1pHbG1aaUJuY21Gd2FGeHVJQ0FnSUNBZ0lDQnBaaUFvSVdOaGJrRmtaQ0I4ZkNBb1kyRnVVbVZ0YjNabElDWW1JR0ZrWkZCaGRHZ3VibVYzVUc5eklEd2djbVZ0YjNabFVHRjBhQzV1WlhkUWIzTXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1ltRnpaVkJoZEdnZ1BTQmpiRzl1WlZCaGRHZ29jbVZ0YjNabFVHRjBhQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2MyVnNaaTV3ZFhOb1EyOXRjRzl1Wlc1MEtHSmhjMlZRWVhSb0xtTnZiWEJ2Ym1WdWRITXNJSFZ1WkdWbWFXNWxaQ3dnZEhKMVpTazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnWW1GelpWQmhkR2dnUFNCaFpHUlFZWFJvT3lBZ0lDOHZJRTV2SUc1bFpXUWdkRzhnWTJ4dmJtVXNJSGRsSjNabElIQjFiR3hsWkNCcGRDQm1jbTl0SUhSb1pTQnNhWE4wWEc0Z0lDQWdJQ0FnSUNBZ1ltRnpaVkJoZEdndWJtVjNVRzl6S3lzN1hHNGdJQ0FnSUNBZ0lDQWdjMlZzWmk1d2RYTm9RMjl0Y0c5dVpXNTBLR0poYzJWUVlYUm9MbU52YlhCdmJtVnVkSE1zSUhSeWRXVXNJSFZ1WkdWbWFXNWxaQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnZiR1JRYjNNZ1BTQnpaV3htTG1WNGRISmhZM1JEYjIxdGIyNG9ZbUZ6WlZCaGRHZ3NJRzVsZDFOMGNtbHVaeXdnYjJ4a1UzUnlhVzVuTENCa2FXRm5iMjVoYkZCaGRHZ3BPMXh1WEc0Z0lDQWdJQ0FnSUM4dklFbG1JSGRsSUdoaGRtVWdhR2wwSUhSb1pTQmxibVFnYjJZZ1ltOTBhQ0J6ZEhKcGJtZHpMQ0IwYUdWdUlIZGxJR0Z5WlNCa2IyNWxYRzRnSUNBZ0lDQWdJR2xtSUNoaVlYTmxVR0YwYUM1dVpYZFFiM01nS3lBeElENDlJRzVsZDB4bGJpQW1KaUJ2YkdSUWIzTWdLeUF4SUQ0OUlHOXNaRXhsYmlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmtiMjVsS0dKMWFXeGtWbUZzZFdWektITmxiR1lzSUdKaGMyVlFZWFJvTG1OdmJYQnZibVZ1ZEhNc0lHNWxkMU4wY21sdVp5d2diMnhrVTNSeWFXNW5MQ0J6Wld4bUxuVnpaVXh2Ym1kbGMzUlViMnRsYmlrcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUU5MGFHVnlkMmx6WlNCMGNtRmpheUIwYUdseklIQmhkR2dnWVhNZ1lTQndiM1JsYm5ScFlXd2dZMkZ1Wkdsa1lYUmxJR0Z1WkNCamIyNTBhVzUxWlM1Y2JpQWdJQ0FnSUNBZ0lDQmlaWE4wVUdGMGFGdGthV0ZuYjI1aGJGQmhkR2hkSUQwZ1ltRnpaVkJoZEdnN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdaV1JwZEV4bGJtZDBhQ3NyTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUZCbGNtWnZjbTF6SUhSb1pTQnNaVzVuZEdnZ2IyWWdaV1JwZENCcGRHVnlZWFJwYjI0dUlFbHpJR0VnWW1sMElHWjFaMng1SUdGeklIUm9hWE1nYUdGeklIUnZJSE4xY0hCdmNuUWdkR2hsWEc0Z0lDQWdMeThnYzNsdVl5QmhibVFnWVhONWJtTWdiVzlrWlNCM2FHbGphQ0JwY3lCdVpYWmxjaUJtZFc0dUlFeHZiM0J6SUc5MlpYSWdaWGhsWTBWa2FYUk1aVzVuZEdnZ2RXNTBhV3dnWVNCMllXeDFaVnh1SUNBZ0lDOHZJR2x6SUhCeWIyUjFZMlZrTGx4dUlDQWdJR2xtSUNoallXeHNZbUZqYXlrZ2UxeHVJQ0FnSUNBZ0tHWjFibU4wYVc5dUlHVjRaV01vS1NCN1hHNGdJQ0FnSUNBZ0lITmxkRlJwYldWdmRYUW9ablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdWR2hwY3lCemFHOTFiR1FnYm05MElHaGhjSEJsYml3Z1luVjBJSGRsSUhkaGJuUWdkRzhnWW1VZ2MyRm1aUzVjYmlBZ0lDQWdJQ0FnSUNBdktpQnBjM1JoYm1KMWJDQnBaMjV2Y21VZ2JtVjRkQ0FxTDF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2hsWkdsMFRHVnVaM1JvSUQ0Z2JXRjRSV1JwZEV4bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHTmhiR3hpWVdOcktDazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0NGbGVHVmpSV1JwZEV4bGJtZDBhQ2dwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JsZUdWaktDazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUxDQXdLVHRjYmlBZ0lDQWdJSDBvS1NrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSGRvYVd4bElDaGxaR2wwVEdWdVozUm9JRHc5SUcxaGVFVmthWFJNWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxkQ0E5SUdWNFpXTkZaR2wwVEdWdVozUm9LQ2s3WEc0Z0lDQWdJQ0FnSUdsbUlDaHlaWFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVjBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUhCMWMyaERiMjF3YjI1bGJuUW9ZMjl0Y0c5dVpXNTBjeXdnWVdSa1pXUXNJSEpsYlc5MlpXUXBJSHRjYmlBZ0lDQnNaWFFnYkdGemRDQTlJR052YlhCdmJtVnVkSE5iWTI5dGNHOXVaVzUwY3k1c1pXNW5kR2dnTFNBeFhUdGNiaUFnSUNCcFppQW9iR0Z6ZENBbUppQnNZWE4wTG1Ga1pHVmtJRDA5UFNCaFpHUmxaQ0FtSmlCc1lYTjBMbkpsYlc5MlpXUWdQVDA5SUhKbGJXOTJaV1FwSUh0Y2JpQWdJQ0FnSUM4dklGZGxJRzVsWldRZ2RHOGdZMnh2Ym1VZ2FHVnlaU0JoY3lCMGFHVWdZMjl0Y0c5dVpXNTBJR05zYjI1bElHOXdaWEpoZEdsdmJpQnBjeUJxZFhOMFhHNGdJQ0FnSUNBdkx5QmhjeUJ6YUdGc2JHOTNJR0Z5Y21GNUlHTnNiMjVsWEc0Z0lDQWdJQ0JqYjIxd2IyNWxiblJ6VzJOdmJYQnZibVZ1ZEhNdWJHVnVaM1JvSUMwZ01WMGdQU0I3WTI5MWJuUTZJR3hoYzNRdVkyOTFiblFnS3lBeExDQmhaR1JsWkRvZ1lXUmtaV1FzSUhKbGJXOTJaV1E2SUhKbGJXOTJaV1FnZlR0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdZMjl0Y0c5dVpXNTBjeTV3ZFhOb0tIdGpiM1Z1ZERvZ01Td2dZV1JrWldRNklHRmtaR1ZrTENCeVpXMXZkbVZrT2lCeVpXMXZkbVZrSUgwcE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmlBZ1pYaDBjbUZqZEVOdmJXMXZiaWhpWVhObFVHRjBhQ3dnYm1WM1UzUnlhVzVuTENCdmJHUlRkSEpwYm1jc0lHUnBZV2R2Ym1Gc1VHRjBhQ2tnZTF4dUlDQWdJR3hsZENCdVpYZE1aVzRnUFNCdVpYZFRkSEpwYm1jdWJHVnVaM1JvTEZ4dUlDQWdJQ0FnSUNCdmJHUk1aVzRnUFNCdmJHUlRkSEpwYm1jdWJHVnVaM1JvTEZ4dUlDQWdJQ0FnSUNCdVpYZFFiM01nUFNCaVlYTmxVR0YwYUM1dVpYZFFiM01zWEc0Z0lDQWdJQ0FnSUc5c1pGQnZjeUE5SUc1bGQxQnZjeUF0SUdScFlXZHZibUZzVUdGMGFDeGNibHh1SUNBZ0lDQWdJQ0JqYjIxdGIyNURiM1Z1ZENBOUlEQTdYRzRnSUNBZ2QyaHBiR1VnS0c1bGQxQnZjeUFySURFZ1BDQnVaWGRNWlc0Z0ppWWdiMnhrVUc5eklDc2dNU0E4SUc5c1pFeGxiaUFtSmlCMGFHbHpMbVZ4ZFdGc2N5aHVaWGRUZEhKcGJtZGJibVYzVUc5eklDc2dNVjBzSUc5c1pGTjBjbWx1WjF0dmJHUlFiM01nS3lBeFhTa3BJSHRjYmlBZ0lDQWdJRzVsZDFCdmN5c3JPMXh1SUNBZ0lDQWdiMnhrVUc5ekt5czdYRzRnSUNBZ0lDQmpiMjF0YjI1RGIzVnVkQ3NyTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoamIyMXRiMjVEYjNWdWRDa2dlMXh1SUNBZ0lDQWdZbUZ6WlZCaGRHZ3VZMjl0Y0c5dVpXNTBjeTV3ZFhOb0tIdGpiM1Z1ZERvZ1kyOXRiVzl1UTI5MWJuUjlLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmlZWE5sVUdGMGFDNXVaWGRRYjNNZ1BTQnVaWGRRYjNNN1hHNGdJQ0FnY21WMGRYSnVJRzlzWkZCdmN6dGNiaUFnZlN4Y2JseHVJQ0JsY1hWaGJITW9iR1ZtZEN3Z2NtbG5hSFFwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV2Y0hScGIyNXpMbU52YlhCaGNtRjBiM0lwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtOXdkR2x2Ym5NdVkyOXRjR0Z5WVhSdmNpaHNaV1owTENCeWFXZG9kQ2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCc1pXWjBJRDA5UFNCeWFXZG9kRnh1SUNBZ0lDQWdJQ0I4ZkNBb2RHaHBjeTV2Y0hScGIyNXpMbWxuYm05eVpVTmhjMlVnSmlZZ2JHVm1kQzUwYjB4dmQyVnlRMkZ6WlNncElEMDlQU0J5YVdkb2RDNTBiMHh2ZDJWeVEyRnpaU2dwS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhKbGJXOTJaVVZ0Y0hSNUtHRnljbUY1S1NCN1hHNGdJQ0FnYkdWMElISmxkQ0E5SUZ0ZE8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1lYSnlZWGt1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lHbG1JQ2hoY25KaGVWdHBYU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUXVjSFZ6YUNoaGNuSmhlVnRwWFNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnlaWFE3WEc0Z0lIMHNYRzRnSUdOaGMzUkpibkIxZENoMllXeDFaU2tnZTF4dUlDQWdJSEpsZEhWeWJpQjJZV3gxWlR0Y2JpQWdmU3hjYmlBZ2RHOXJaVzVwZW1Vb2RtRnNkV1VwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkbUZzZFdVdWMzQnNhWFFvSnljcE8xeHVJQ0I5TEZ4dUlDQnFiMmx1S0dOb1lYSnpLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHTm9ZWEp6TG1wdmFXNG9KeWNwTzF4dUlDQjlYRzU5TzF4dVhHNW1kVzVqZEdsdmJpQmlkV2xzWkZaaGJIVmxjeWhrYVdabUxDQmpiMjF3YjI1bGJuUnpMQ0J1WlhkVGRISnBibWNzSUc5c1pGTjBjbWx1Wnl3Z2RYTmxURzl1WjJWemRGUnZhMlZ1S1NCN1hHNGdJR3hsZENCamIyMXdiMjVsYm5SUWIzTWdQU0F3TEZ4dUlDQWdJQ0FnWTI5dGNHOXVaVzUwVEdWdUlEMGdZMjl0Y0c5dVpXNTBjeTVzWlc1bmRHZ3NYRzRnSUNBZ0lDQnVaWGRRYjNNZ1BTQXdMRnh1SUNBZ0lDQWdiMnhrVUc5eklEMGdNRHRjYmx4dUlDQm1iM0lnS0RzZ1kyOXRjRzl1Wlc1MFVHOXpJRHdnWTI5dGNHOXVaVzUwVEdWdU95QmpiMjF3YjI1bGJuUlFiM01yS3lrZ2UxeHVJQ0FnSUd4bGRDQmpiMjF3YjI1bGJuUWdQU0JqYjIxd2IyNWxiblJ6VzJOdmJYQnZibVZ1ZEZCdmMxMDdYRzRnSUNBZ2FXWWdLQ0ZqYjIxd2IyNWxiblF1Y21WdGIzWmxaQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tDRmpiMjF3YjI1bGJuUXVZV1JrWldRZ0ppWWdkWE5sVEc5dVoyVnpkRlJ2YTJWdUtTQjdYRzRnSUNBZ0lDQWdJR3hsZENCMllXeDFaU0E5SUc1bGQxTjBjbWx1Wnk1emJHbGpaU2h1WlhkUWIzTXNJRzVsZDFCdmN5QXJJR052YlhCdmJtVnVkQzVqYjNWdWRDazdYRzRnSUNBZ0lDQWdJSFpoYkhWbElEMGdkbUZzZFdVdWJXRndLR1oxYm1OMGFXOXVLSFpoYkhWbExDQnBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2JHVjBJRzlzWkZaaGJIVmxJRDBnYjJ4a1UzUnlhVzVuVzI5c1pGQnZjeUFySUdsZE8xeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnZiR1JXWVd4MVpTNXNaVzVuZEdnZ1BpQjJZV3gxWlM1c1pXNW5kR2dnUHlCdmJHUldZV3gxWlNBNklIWmhiSFZsTzF4dUlDQWdJQ0FnSUNCOUtUdGNibHh1SUNBZ0lDQWdJQ0JqYjIxd2IyNWxiblF1ZG1Gc2RXVWdQU0JrYVdabUxtcHZhVzRvZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdZMjl0Y0c5dVpXNTBMblpoYkhWbElEMGdaR2xtWmk1cWIybHVLRzVsZDFOMGNtbHVaeTV6YkdsalpTaHVaWGRRYjNNc0lHNWxkMUJ2Y3lBcklHTnZiWEJ2Ym1WdWRDNWpiM1Z1ZENrcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2JtVjNVRzl6SUNzOUlHTnZiWEJ2Ym1WdWRDNWpiM1Z1ZER0Y2JseHVJQ0FnSUNBZ0x5OGdRMjl0Ylc5dUlHTmhjMlZjYmlBZ0lDQWdJR2xtSUNnaFkyOXRjRzl1Wlc1MExtRmtaR1ZrS1NCN1hHNGdJQ0FnSUNBZ0lHOXNaRkJ2Y3lBclBTQmpiMjF3YjI1bGJuUXVZMjkxYm5RN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR052YlhCdmJtVnVkQzUyWVd4MVpTQTlJR1JwWm1ZdWFtOXBiaWh2YkdSVGRISnBibWN1YzJ4cFkyVW9iMnhrVUc5ekxDQnZiR1JRYjNNZ0t5QmpiMjF3YjI1bGJuUXVZMjkxYm5RcEtUdGNiaUFnSUNBZ0lHOXNaRkJ2Y3lBclBTQmpiMjF3YjI1bGJuUXVZMjkxYm5RN1hHNWNiaUFnSUNBZ0lDOHZJRkpsZG1WeWMyVWdZV1JrSUdGdVpDQnlaVzF2ZG1VZ2MyOGdjbVZ0YjNabGN5QmhjbVVnYjNWMGNIVjBJR1pwY25OMElIUnZJRzFoZEdOb0lHTnZiVzF2YmlCamIyNTJaVzUwYVc5dVhHNGdJQ0FnSUNBdkx5QlVhR1VnWkdsbVptbHVaeUJoYkdkdmNtbDBhRzBnYVhNZ2RHbGxaQ0IwYnlCaFpHUWdkR2hsYmlCeVpXMXZkbVVnYjNWMGNIVjBJR0Z1WkNCMGFHbHpJR2x6SUhSb1pTQnphVzF3YkdWemRGeHVJQ0FnSUNBZ0x5OGdjbTkxZEdVZ2RHOGdaMlYwSUhSb1pTQmtaWE5wY21Wa0lHOTFkSEIxZENCM2FYUm9JRzFwYm1sdFlXd2diM1psY21obFlXUXVYRzRnSUNBZ0lDQnBaaUFvWTI5dGNHOXVaVzUwVUc5eklDWW1JR052YlhCdmJtVnVkSE5iWTI5dGNHOXVaVzUwVUc5eklDMGdNVjB1WVdSa1pXUXBJSHRjYmlBZ0lDQWdJQ0FnYkdWMElIUnRjQ0E5SUdOdmJYQnZibVZ1ZEhOYlkyOXRjRzl1Wlc1MFVHOXpJQzBnTVYwN1hHNGdJQ0FnSUNBZ0lHTnZiWEJ2Ym1WdWRITmJZMjl0Y0c5dVpXNTBVRzl6SUMwZ01WMGdQU0JqYjIxd2IyNWxiblJ6VzJOdmJYQnZibVZ1ZEZCdmMxMDdYRzRnSUNBZ0lDQWdJR052YlhCdmJtVnVkSE5iWTI5dGNHOXVaVzUwVUc5elhTQTlJSFJ0Y0R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdkx5QlRjR1ZqYVdGc0lHTmhjMlVnYUdGdVpHeGxJR1p2Y2lCM2FHVnVJRzl1WlNCMFpYSnRhVzVoYkNCcGN5QnBaMjV2Y21Wa0lDaHBMbVV1SUhkb2FYUmxjM0JoWTJVcExseHVJQ0F2THlCR2IzSWdkR2hwY3lCallYTmxJSGRsSUcxbGNtZGxJSFJvWlNCMFpYSnRhVzVoYkNCcGJuUnZJSFJvWlNCd2NtbHZjaUJ6ZEhKcGJtY2dZVzVrSUdSeWIzQWdkR2hsSUdOb1lXNW5aUzVjYmlBZ0x5OGdWR2hwY3lCcGN5QnZibXg1SUdGMllXbHNZV0pzWlNCbWIzSWdjM1J5YVc1bklHMXZaR1V1WEc0Z0lHeGxkQ0JzWVhOMFEyOXRjRzl1Wlc1MElEMGdZMjl0Y0c5dVpXNTBjMXRqYjIxd2IyNWxiblJNWlc0Z0xTQXhYVHRjYmlBZ2FXWWdLR052YlhCdmJtVnVkRXhsYmlBK0lERmNiaUFnSUNBZ0lDWW1JSFI1Y0dWdlppQnNZWE4wUTI5dGNHOXVaVzUwTG5aaGJIVmxJRDA5UFNBbmMzUnlhVzVuSjF4dUlDQWdJQ0FnSmlZZ0tHeGhjM1JEYjIxd2IyNWxiblF1WVdSa1pXUWdmSHdnYkdGemRFTnZiWEJ2Ym1WdWRDNXlaVzF2ZG1Wa0tWeHVJQ0FnSUNBZ0ppWWdaR2xtWmk1bGNYVmhiSE1vSnljc0lHeGhjM1JEYjIxd2IyNWxiblF1ZG1Gc2RXVXBLU0I3WEc0Z0lDQWdZMjl0Y0c5dVpXNTBjMXRqYjIxd2IyNWxiblJNWlc0Z0xTQXlYUzUyWVd4MVpTQXJQU0JzWVhOMFEyOXRjRzl1Wlc1MExuWmhiSFZsTzF4dUlDQWdJR052YlhCdmJtVnVkSE11Y0c5d0tDazdYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdZMjl0Y0c5dVpXNTBjenRjYm4xY2JseHVablZ1WTNScGIyNGdZMnh2Ym1WUVlYUm9LSEJoZEdncElIdGNiaUFnY21WMGRYSnVJSHNnYm1WM1VHOXpPaUJ3WVhSb0xtNWxkMUJ2Y3l3Z1kyOXRjRzl1Wlc1MGN6b2djR0YwYUM1amIyMXdiMjVsYm5SekxuTnNhV05sS0RBcElIMDdYRzU5WEc0aVhYMD1cblxuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuY2hhcmFjdGVyRGlmZiA9IHVuZGVmaW5lZDtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmQ2hhcnMgPSBkaWZmQ2hhcnM7XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfYmFzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9iYXNlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgY2hhcmFjdGVyRGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NoYXJhY3RlckRpZmYgPSBuZXcgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19iYXNlMlsnZGVmYXVsdCddIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCk7XG5cdGZ1bmN0aW9uIGRpZmZDaGFycyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuXHQgIHJldHVybiBjaGFyYWN0ZXJEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDJOb1lYSmhZM1JsY2k1cWN5SmRMQ0p1WVcxbGN5STZXeUprYVdabVEyaGhjbk1pTENKamFHRnlZV04wWlhKRWFXWm1JaXdpYjJ4a1UzUnlJaXdpYm1WM1UzUnlJaXdpYjNCMGFXOXVjeUlzSW1ScFptWWlYU3dpYldGd2NHbHVaM01pT2lJN096czdaME5CUjJkQ1FTeFRMRWRCUVVGQkxGTTdPMEZCU0doQ096czdPenM3ZFVKQlJVOHNTVUZCVFVNc2VVWkJRV2RDTEhkRlFVRjBRanRCUVVOQkxGTkJRVk5FTEZOQlFWUXNRMEZCYlVKRkxFMUJRVzVDTEVWQlFUSkNReXhOUVVFelFpeEZRVUZ0UTBNc1QwRkJia01zUlVGQk5FTTdRVUZCUlN4VFFVRlBTQ3hqUVVGalNTeEpRVUZrTEVOQlFXMUNTQ3hOUVVGdVFpeEZRVUV5UWtNc1RVRkJNMElzUlVGQmJVTkRMRTlCUVc1RExFTkJRVkE3UVVGQmNVUWlMQ0ptYVd4bElqb2lZMmhoY21GamRHVnlMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUVScFptWWdabkp2YlNBbkxpOWlZWE5sSnp0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdOb1lYSmhZM1JsY2tScFptWWdQU0J1WlhjZ1JHbG1aaWdwTzF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdScFptWkRhR0Z5Y3lodmJHUlRkSElzSUc1bGQxTjBjaXdnYjNCMGFXOXVjeWtnZXlCeVpYUjFjbTRnWTJoaGNtRmpkR1Z5UkdsbVppNWthV1ptS0c5c1pGTjBjaXdnYm1WM1UzUnlMQ0J2Y0hScGIyNXpLVHNnZlZ4dUlsMTlcblxuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMud29yZERpZmYgPSB1bmRlZmluZWQ7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZGlmZldvcmRzID0gZGlmZldvcmRzO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmV29yZHNXaXRoU3BhY2UgPSBkaWZmV29yZHNXaXRoU3BhY2U7XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfYmFzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9iYXNlKTtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3BhcmFtcyA9IF9fd2VicGFja19yZXF1aXJlX18oNCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2Z1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvLyBCYXNlZCBvbiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbl9zY3JpcHRfaW5fVW5pY29kZVxuXHQvL1xuXHQvLyBSYW5nZXMgYW5kIGV4Y2VwdGlvbnM6XG5cdC8vIExhdGluLTEgU3VwcGxlbWVudCwgMDA4MOKAkzAwRkZcblx0Ly8gIC0gVSswMEQ3ICDDlyBNdWx0aXBsaWNhdGlvbiBzaWduXG5cdC8vICAtIFUrMDBGNyAgw7cgRGl2aXNpb24gc2lnblxuXHQvLyBMYXRpbiBFeHRlbmRlZC1BLCAwMTAw4oCTMDE3RlxuXHQvLyBMYXRpbiBFeHRlbmRlZC1CLCAwMTgw4oCTMDI0RlxuXHQvLyBJUEEgRXh0ZW5zaW9ucywgMDI1MOKAkzAyQUZcblx0Ly8gU3BhY2luZyBNb2RpZmllciBMZXR0ZXJzLCAwMkIw4oCTMDJGRlxuXHQvLyAgLSBVKzAyQzcgIMuHICYjNzExOyAgQ2Fyb25cblx0Ly8gIC0gVSswMkQ4ICDLmCAmIzcyODsgIEJyZXZlXG5cdC8vICAtIFUrMDJEOSAgy5kgJiM3Mjk7ICBEb3QgQWJvdmVcblx0Ly8gIC0gVSswMkRBICDLmiAmIzczMDsgIFJpbmcgQWJvdmVcblx0Ly8gIC0gVSswMkRCICDLmyAmIzczMTsgIE9nb25la1xuXHQvLyAgLSBVKzAyREMgIMucICYjNzMyOyAgU21hbGwgVGlsZGVcblx0Ly8gIC0gVSswMkREICDLnSAmIzczMzsgIERvdWJsZSBBY3V0ZSBBY2NlbnRcblx0Ly8gTGF0aW4gRXh0ZW5kZWQgQWRkaXRpb25hbCwgMUUwMOKAkzFFRkZcblx0dmFyIGV4dGVuZGVkV29yZENoYXJzID0gL15bQS1aYS16XFx4QzAtXFx1MDJDNlxcdTAyQzgtXFx1MDJEN1xcdTAyREUtXFx1MDJGRlxcdTFFMDAtXFx1MUVGRl0rJC87XG5cblx0dmFyIHJlV2hpdGVzcGFjZSA9IC9cXFMvO1xuXG5cdHZhciB3b3JkRGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3dvcmREaWZmID0gbmV3IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZTJbJ2RlZmF1bHQnXSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLygpO1xuXHR3b3JkRGlmZi5lcXVhbHMgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcblx0ICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUNhc2UpIHtcblx0ICAgIGxlZnQgPSBsZWZ0LnRvTG93ZXJDYXNlKCk7XG5cdCAgICByaWdodCA9IHJpZ2h0LnRvTG93ZXJDYXNlKCk7XG5cdCAgfVxuXHQgIHJldHVybiBsZWZ0ID09PSByaWdodCB8fCB0aGlzLm9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSAmJiAhcmVXaGl0ZXNwYWNlLnRlc3QobGVmdCkgJiYgIXJlV2hpdGVzcGFjZS50ZXN0KHJpZ2h0KTtcblx0fTtcblx0d29yZERpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICB2YXIgdG9rZW5zID0gdmFsdWUuc3BsaXQoLyhcXHMrfFxcYikvKTtcblxuXHQgIC8vIEpvaW4gdGhlIGJvdW5kYXJ5IHNwbGl0cyB0aGF0IHdlIGRvIG5vdCBjb25zaWRlciB0byBiZSBib3VuZGFyaWVzLiBUaGlzIGlzIHByaW1hcmlseSB0aGUgZXh0ZW5kZWQgTGF0aW4gY2hhcmFjdGVyIHNldC5cblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGggLSAxOyBpKyspIHtcblx0ICAgIC8vIElmIHdlIGhhdmUgYW4gZW1wdHkgc3RyaW5nIGluIHRoZSBuZXh0IGZpZWxkIGFuZCB3ZSBoYXZlIG9ubHkgd29yZCBjaGFycyBiZWZvcmUgYW5kIGFmdGVyLCBtZXJnZVxuXHQgICAgaWYgKCF0b2tlbnNbaSArIDFdICYmIHRva2Vuc1tpICsgMl0gJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaV0pICYmIGV4dGVuZGVkV29yZENoYXJzLnRlc3QodG9rZW5zW2kgKyAyXSkpIHtcblx0ICAgICAgdG9rZW5zW2ldICs9IHRva2Vuc1tpICsgMl07XG5cdCAgICAgIHRva2Vucy5zcGxpY2UoaSArIDEsIDIpO1xuXHQgICAgICBpLS07XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHRva2Vucztcblx0fTtcblxuXHRmdW5jdGlvbiBkaWZmV29yZHMob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcblx0ICBvcHRpb25zID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfcGFyYW1zLmdlbmVyYXRlT3B0aW9ucykgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8ob3B0aW9ucywgeyBpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlIH0pO1xuXHQgIHJldHVybiB3b3JkRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRpZmZXb3Jkc1dpdGhTcGFjZShvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuXHQgIHJldHVybiB3b3JkRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlrYVdabUwzZHZjbVF1YW5NaVhTd2libUZ0WlhNaU9sc2laR2xtWmxkdmNtUnpJaXdpWkdsbVpsZHZjbVJ6VjJsMGFGTndZV05sSWl3aVpYaDBaVzVrWldSWGIzSmtRMmhoY25NaUxDSnlaVmRvYVhSbGMzQmhZMlVpTENKM2IzSmtSR2xtWmlJc0ltVnhkV0ZzY3lJc0lteGxablFpTENKeWFXZG9kQ0lzSW05d2RHbHZibk1pTENKcFoyNXZjbVZEWVhObElpd2lkRzlNYjNkbGNrTmhjMlVpTENKcFoyNXZjbVZYYUdsMFpYTndZV05sSWl3aWRHVnpkQ0lzSW5SdmEyVnVhWHBsSWl3aWRtRnNkV1VpTENKMGIydGxibk1pTENKemNHeHBkQ0lzSW1raUxDSnNaVzVuZEdnaUxDSnpjR3hwWTJVaUxDSnZiR1JUZEhJaUxDSnVaWGRUZEhJaUxDSmthV1ptSWwwc0ltMWhjSEJwYm1keklqb2lPenM3TzJkRFFXMUVaMEpCTEZNc1IwRkJRVUVzVXp0NVJFRkxRVU1zYTBJc1IwRkJRVUVzYTBJN08wRkJlRVJvUWpzN096dDFRa0ZEUVRzN096dDNRa0ZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVN4SlFVRk5ReXh2UWtGQmIwSXNLMFJCUVRGQ096dEJRVVZCTEVsQlFVMURMR1ZCUVdVc1NVRkJja0k3TzBGQlJVOHNTVUZCVFVNc0swVkJRVmNzZDBWQlFXcENPMEZCUTFCQkxGTkJRVk5ETEUxQlFWUXNSMEZCYTBJc1ZVRkJVME1zU1VGQlZDeEZRVUZsUXl4TFFVRm1MRVZCUVhOQ08wRkJRM1JETEUxQlFVa3NTMEZCUzBNc1QwRkJUQ3hEUVVGaFF5eFZRVUZxUWl4RlFVRTJRanRCUVVNelFrZ3NWMEZCVDBFc1MwRkJTMGtzVjBGQlRDeEZRVUZRTzBGQlEwRklMRmxCUVZGQkxFMUJRVTFITEZkQlFVNHNSVUZCVWp0QlFVTkVPMEZCUTBRc1UwRkJUMG9zVTBGQlUwTXNTMEZCVkN4SlFVRnRRaXhMUVVGTFF5eFBRVUZNTEVOQlFXRkhMR2RDUVVGaUxFbEJRV2xETEVOQlFVTlNMR0ZCUVdGVExFbEJRV0lzUTBGQmEwSk9MRWxCUVd4Q0xFTkJRV3hETEVsQlFUWkVMRU5CUVVOSUxHRkJRV0ZUTEVsQlFXSXNRMEZCYTBKTUxFdEJRV3hDTEVOQlFYaEdPMEZCUTBRc1EwRk9SRHRCUVU5QlNDeFRRVUZUVXl4UlFVRlVMRWRCUVc5Q0xGVkJRVk5ETEV0QlFWUXNSVUZCWjBJN1FVRkRiRU1zVFVGQlNVTXNVMEZCVTBRc1RVRkJUVVVzUzBGQlRpeERRVUZaTEZWQlFWb3NRMEZCWWpzN1FVRkZRVHRCUVVOQkxFOUJRVXNzU1VGQlNVTXNTVUZCU1N4RFFVRmlMRVZCUVdkQ1FTeEpRVUZKUml4UFFVRlBSeXhOUVVGUUxFZEJRV2RDTEVOQlFYQkRMRVZCUVhWRFJDeEhRVUYyUXl4RlFVRTBRenRCUVVNeFF6dEJRVU5CTEZGQlFVa3NRMEZCUTBZc1QwRkJUMFVzU1VGQlNTeERRVUZZTEVOQlFVUXNTVUZCYTBKR0xFOUJRVTlGTEVsQlFVa3NRMEZCV0N4RFFVRnNRaXhKUVVOTFppeHJRa0ZCYTBKVkxFbEJRV3hDTEVOQlFYVkNSeXhQUVVGUFJTeERRVUZRTEVOQlFYWkNMRU5CUkV3c1NVRkZTMllzYTBKQlFXdENWU3hKUVVGc1FpeERRVUYxUWtjc1QwRkJUMFVzU1VGQlNTeERRVUZZTEVOQlFYWkNMRU5CUmxRc1JVRkZaMFE3UVVGRE9VTkdMR0ZCUVU5RkxFTkJRVkFzUzBGQllVWXNUMEZCVDBVc1NVRkJTU3hEUVVGWUxFTkJRV0k3UVVGRFFVWXNZVUZCVDBrc1RVRkJVQ3hEUVVGalJpeEpRVUZKTEVOQlFXeENMRVZCUVhGQ0xFTkJRWEpDTzBGQlEwRkJPMEZCUTBRN1FVRkRSanM3UVVGRlJDeFRRVUZQUml4TlFVRlFPMEZCUTBRc1EwRm9Ra1E3TzBGQmEwSlBMRk5CUVZObUxGTkJRVlFzUTBGQmJVSnZRaXhOUVVGdVFpeEZRVUV5UWtNc1RVRkJNMElzUlVGQmJVTmlMRTlCUVc1RExFVkJRVFJETzBGQlEycEVRU3haUVVGVkxEaEZRVUZuUWtFc1QwRkJhRUlzUlVGQmVVSXNSVUZCUTBjc2EwSkJRV3RDTEVsQlFXNUNMRVZCUVhwQ0xFTkJRVlk3UVVGRFFTeFRRVUZQVUN4VFFVRlRhMElzU1VGQlZDeERRVUZqUml4TlFVRmtMRVZCUVhOQ1F5eE5RVUYwUWl4RlFVRTRRbUlzVDBGQk9VSXNRMEZCVUR0QlFVTkVPenRCUVVWTkxGTkJRVk5RTEd0Q1FVRlVMRU5CUVRSQ2JVSXNUVUZCTlVJc1JVRkJiME5ETEUxQlFYQkRMRVZCUVRSRFlpeFBRVUUxUXl4RlFVRnhSRHRCUVVNeFJDeFRRVUZQU2l4VFFVRlRhMElzU1VGQlZDeERRVUZqUml4TlFVRmtMRVZCUVhOQ1F5eE5RVUYwUWl4RlFVRTRRbUlzVDBGQk9VSXNRMEZCVUR0QlFVTkVJaXdpWm1sc1pTSTZJbmR2Y21RdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdSR2xtWmlCbWNtOXRJQ2N1TDJKaGMyVW5PMXh1YVcxd2IzSjBJSHRuWlc1bGNtRjBaVTl3ZEdsdmJuTjlJR1p5YjIwZ0p5NHVMM1YwYVd3dmNHRnlZVzF6Snp0Y2JseHVMeThnUW1GelpXUWdiMjRnYUhSMGNITTZMeTlsYmk1M2FXdHBjR1ZrYVdFdWIzSm5MM2RwYTJrdlRHRjBhVzVmYzJOeWFYQjBYMmx1WDFWdWFXTnZaR1ZjYmk4dlhHNHZMeUJTWVc1blpYTWdZVzVrSUdWNFkyVndkR2x2Ym5NNlhHNHZMeUJNWVhScGJpMHhJRk4xY0hCc1pXMWxiblFzSURBd09ERGlnSk13TUVaR1hHNHZMeUFnTFNCVkt6QXdSRGNnSU1PWElFMTFiSFJwY0d4cFkyRjBhVzl1SUhOcFoyNWNiaTh2SUNBdElGVXJNREJHTnlBZ3c3Y2dSR2wyYVhOcGIyNGdjMmxuYmx4dUx5OGdUR0YwYVc0Z1JYaDBaVzVrWldRdFFTd2dNREV3TU9LQWt6QXhOMFpjYmk4dklFeGhkR2x1SUVWNGRHVnVaR1ZrTFVJc0lEQXhPRERpZ0pNd01qUkdYRzR2THlCSlVFRWdSWGgwWlc1emFXOXVjeXdnTURJMU1PS0FrekF5UVVaY2JpOHZJRk53WVdOcGJtY2dUVzlrYVdacFpYSWdUR1YwZEdWeWN5d2dNREpDTU9LQWt6QXlSa1pjYmk4dklDQXRJRlVyTURKRE55QWd5NGNnSmlNM01URTdJQ0JEWVhKdmJseHVMeThnSUMwZ1ZTc3dNa1E0SUNETG1DQW1JemN5T0RzZ0lFSnlaWFpsWEc0dkx5QWdMU0JWS3pBeVJEa2dJTXVaSUNZak56STVPeUFnUkc5MElFRmliM1psWEc0dkx5QWdMU0JWS3pBeVJFRWdJTXVhSUNZak56TXdPeUFnVW1sdVp5QkJZbTkyWlZ4dUx5OGdJQzBnVlNzd01rUkNJQ0RMbXlBbUl6Y3pNVHNnSUU5bmIyNWxhMXh1THk4Z0lDMGdWU3N3TWtSRElDRExuQ0FtSXpjek1qc2dJRk50WVd4c0lGUnBiR1JsWEc0dkx5QWdMU0JWS3pBeVJFUWdJTXVkSUNZak56TXpPeUFnUkc5MVlteGxJRUZqZFhSbElFRmpZMlZ1ZEZ4dUx5OGdUR0YwYVc0Z1JYaDBaVzVrWldRZ1FXUmthWFJwYjI1aGJDd2dNVVV3TU9LQWt6RkZSa1pjYm1OdmJuTjBJR1Y0ZEdWdVpHVmtWMjl5WkVOb1lYSnpJRDBnTDE1YllTMTZRUzFhWEZ4MWUwTXdmUzFjWEhWN1JrWjlYRngxZTBRNGZTMWNYSFY3UmpaOVhGeDFlMFk0ZlMxY1hIVjdNa00yZlZ4Y2RYc3lRemg5TFZ4Y2RYc3lSRGQ5WEZ4MWV6SkVSWDB0WEZ4MWV6SkdSbjFjWEhWN01VVXdNSDB0WEZ4MWV6RkZSa1o5WFNza0wzVTdYRzVjYm1OdmJuTjBJSEpsVjJocGRHVnpjR0ZqWlNBOUlDOWNYRk12TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnZDI5eVpFUnBabVlnUFNCdVpYY2dSR2xtWmlncE8xeHVkMjl5WkVScFptWXVaWEYxWVd4eklEMGdablZ1WTNScGIyNG9iR1ZtZEN3Z2NtbG5hSFFwSUh0Y2JpQWdhV1lnS0hSb2FYTXViM0IwYVc5dWN5NXBaMjV2Y21WRFlYTmxLU0I3WEc0Z0lDQWdiR1ZtZENBOUlHeGxablF1ZEc5TWIzZGxja05oYzJVb0tUdGNiaUFnSUNCeWFXZG9kQ0E5SUhKcFoyaDBMblJ2VEc5M1pYSkRZWE5sS0NrN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUd4bFpuUWdQVDA5SUhKcFoyaDBJSHg4SUNoMGFHbHpMbTl3ZEdsdmJuTXVhV2R1YjNKbFYyaHBkR1Z6Y0dGalpTQW1KaUFoY21WWGFHbDBaWE53WVdObExuUmxjM1FvYkdWbWRDa2dKaVlnSVhKbFYyaHBkR1Z6Y0dGalpTNTBaWE4wS0hKcFoyaDBLU2s3WEc1OU8xeHVkMjl5WkVScFptWXVkRzlyWlc1cGVtVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCc1pYUWdkRzlyWlc1eklEMGdkbUZzZFdVdWMzQnNhWFFvTHloY1hITXJmRnhjWWlrdktUdGNibHh1SUNBdkx5QktiMmx1SUhSb1pTQmliM1Z1WkdGeWVTQnpjR3hwZEhNZ2RHaGhkQ0IzWlNCa2J5QnViM1FnWTI5dWMybGtaWElnZEc4Z1ltVWdZbTkxYm1SaGNtbGxjeTRnVkdocGN5QnBjeUJ3Y21sdFlYSnBiSGtnZEdobElHVjRkR1Z1WkdWa0lFeGhkR2x1SUdOb1lYSmhZM1JsY2lCelpYUXVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RHOXJaVzV6TG14bGJtZDBhQ0F0SURFN0lHa3JLeWtnZTF4dUlDQWdJQzh2SUVsbUlIZGxJR2hoZG1VZ1lXNGdaVzF3ZEhrZ2MzUnlhVzVuSUdsdUlIUm9aU0J1WlhoMElHWnBaV3hrSUdGdVpDQjNaU0JvWVhabElHOXViSGtnZDI5eVpDQmphR0Z5Y3lCaVpXWnZjbVVnWVc1a0lHRm1kR1Z5TENCdFpYSm5aVnh1SUNBZ0lHbG1JQ2doZEc5clpXNXpXMmtnS3lBeFhTQW1KaUIwYjJ0bGJuTmJhU0FySURKZFhHNGdJQ0FnSUNBZ0lDQWdKaVlnWlhoMFpXNWtaV1JYYjNKa1EyaGhjbk11ZEdWemRDaDBiMnRsYm5OYmFWMHBYRzRnSUNBZ0lDQWdJQ0FnSmlZZ1pYaDBaVzVrWldSWGIzSmtRMmhoY25NdWRHVnpkQ2gwYjJ0bGJuTmJhU0FySURKZEtTa2dlMXh1SUNBZ0lDQWdkRzlyWlc1elcybGRJQ3M5SUhSdmEyVnVjMXRwSUNzZ01sMDdYRzRnSUNBZ0lDQjBiMnRsYm5NdWMzQnNhV05sS0drZ0t5QXhMQ0F5S1R0Y2JpQWdJQ0FnSUdrdExUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2RHOXJaVzV6TzF4dWZUdGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1JwWm1aWGIzSmtjeWh2YkdSVGRISXNJRzVsZDFOMGNpd2diM0IwYVc5dWN5a2dlMXh1SUNCdmNIUnBiMjV6SUQwZ1oyVnVaWEpoZEdWUGNIUnBiMjV6S0c5d2RHbHZibk1zSUh0cFoyNXZjbVZYYUdsMFpYTndZV05sT2lCMGNuVmxmU2s3WEc0Z0lISmxkSFZ5YmlCM2IzSmtSR2xtWmk1a2FXWm1LRzlzWkZOMGNpd2dibVYzVTNSeUxDQnZjSFJwYjI1ektUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdScFptWlhiM0prYzFkcGRHaFRjR0ZqWlNodmJHUlRkSElzSUc1bGQxTjBjaXdnYjNCMGFXOXVjeWtnZTF4dUlDQnlaWFIxY200Z2QyOXlaRVJwWm1ZdVpHbG1aaWh2YkdSVGRISXNJRzVsZDFOMGNpd2diM0IwYVc5dWN5azdYRzU5WEc0aVhYMD1cblxuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovZ2VuZXJhdGVPcHRpb25zID0gZ2VuZXJhdGVPcHRpb25zO1xuXHRmdW5jdGlvbiBnZW5lcmF0ZU9wdGlvbnMob3B0aW9ucywgZGVmYXVsdHMpIHtcblx0ICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIGRlZmF1bHRzLmNhbGxiYWNrID0gb3B0aW9ucztcblx0ICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcblx0ICAgIGZvciAodmFyIG5hbWUgaW4gb3B0aW9ucykge1xuXHQgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHQgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuXHQgICAgICAgIGRlZmF1bHRzW25hbWVdID0gb3B0aW9uc1tuYW1lXTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0ICByZXR1cm4gZGVmYXVsdHM7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MWRHbHNMM0JoY21GdGN5NXFjeUpkTENKdVlXMWxjeUk2V3lKblpXNWxjbUYwWlU5d2RHbHZibk1pTENKdmNIUnBiMjV6SWl3aVpHVm1ZWFZzZEhNaUxDSmpZV3hzWW1GamF5SXNJbTVoYldVaUxDSm9ZWE5QZDI1UWNtOXdaWEowZVNKZExDSnRZWEJ3YVc1bmN5STZJanM3TzJkRFFVRm5Ra0VzWlN4SFFVRkJRU3hsTzBGQlFWUXNVMEZCVTBFc1pVRkJWQ3hEUVVGNVFrTXNUMEZCZWtJc1JVRkJhME5ETEZGQlFXeERMRVZCUVRSRE8wRkJRMnBFTEUxQlFVa3NUMEZCVDBRc1QwRkJVQ3hMUVVGdFFpeFZRVUYyUWl4RlFVRnRRenRCUVVOcVEwTXNZVUZCVTBNc1VVRkJWQ3hIUVVGdlFrWXNUMEZCY0VJN1FVRkRSQ3hIUVVaRUxFMUJSVThzU1VGQlNVRXNUMEZCU2l4RlFVRmhPMEZCUTJ4Q0xGTkJRVXNzU1VGQlNVY3NTVUZCVkN4SlFVRnBRa2dzVDBGQmFrSXNSVUZCTUVJN1FVRkRlRUk3UVVGRFFTeFZRVUZKUVN4UlFVRlJTU3hqUVVGU0xFTkJRWFZDUkN4SlFVRjJRaXhEUVVGS0xFVkJRV3RETzBGQlEyaERSaXhwUWtGQlUwVXNTVUZCVkN4SlFVRnBRa2dzVVVGQlVVY3NTVUZCVWl4RFFVRnFRanRCUVVORU8wRkJRMFk3UVVGRFJqdEJRVU5FTEZOQlFVOUdMRkZCUVZBN1FVRkRSQ0lzSW1acGJHVWlPaUp3WVhKaGJYTXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKbGVIQnZjblFnWm5WdVkzUnBiMjRnWjJWdVpYSmhkR1ZQY0hScGIyNXpLRzl3ZEdsdmJuTXNJR1JsWm1GMWJIUnpLU0I3WEc0Z0lHbG1JQ2gwZVhCbGIyWWdiM0IwYVc5dWN5QTlQVDBnSjJaMWJtTjBhVzl1SnlrZ2UxeHVJQ0FnSUdSbFptRjFiSFJ6TG1OaGJHeGlZV05ySUQwZ2IzQjBhVzl1Y3p0Y2JpQWdmU0JsYkhObElHbG1JQ2h2Y0hScGIyNXpLU0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdibUZ0WlNCcGJpQnZjSFJwYjI1ektTQjdYRzRnSUNBZ0lDQXZLaUJwYzNSaGJtSjFiQ0JwWjI1dmNtVWdaV3h6WlNBcUwxeHVJQ0FnSUNBZ2FXWWdLRzl3ZEdsdmJuTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZEhOYmJtRnRaVjBnUFNCdmNIUnBiMjV6VzI1aGJXVmRPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z1pHVm1ZWFZzZEhNN1hHNTlYRzRpWFgwPVxuXG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5saW5lRGlmZiA9IHVuZGVmaW5lZDtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmTGluZXMgPSBkaWZmTGluZXM7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZUcmltbWVkTGluZXMgPSBkaWZmVHJpbW1lZExpbmVzO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Jhc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZSk7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19wYXJhbXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgbGluZURpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9saW5lRGlmZiA9IG5ldyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UyWydkZWZhdWx0J10gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oKTtcblx0bGluZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICB2YXIgcmV0TGluZXMgPSBbXSxcblx0ICAgICAgbGluZXNBbmROZXdsaW5lcyA9IHZhbHVlLnNwbGl0KC8oXFxufFxcclxcbikvKTtcblxuXHQgIC8vIElnbm9yZSB0aGUgZmluYWwgZW1wdHkgdG9rZW4gdGhhdCBvY2N1cnMgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggYSBuZXcgbGluZVxuXHQgIGlmICghbGluZXNBbmROZXdsaW5lc1tsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aCAtIDFdKSB7XG5cdCAgICBsaW5lc0FuZE5ld2xpbmVzLnBvcCgpO1xuXHQgIH1cblxuXHQgIC8vIE1lcmdlIHRoZSBjb250ZW50IGFuZCBsaW5lIHNlcGFyYXRvcnMgaW50byBzaW5nbGUgdG9rZW5zXG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICB2YXIgbGluZSA9IGxpbmVzQW5kTmV3bGluZXNbaV07XG5cblx0ICAgIGlmIChpICUgMiAmJiAhdGhpcy5vcHRpb25zLm5ld2xpbmVJc1Rva2VuKSB7XG5cdCAgICAgIHJldExpbmVzW3JldExpbmVzLmxlbmd0aCAtIDFdICs9IGxpbmU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UpIHtcblx0ICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0TGluZXMucHVzaChsaW5lKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXR1cm4gcmV0TGluZXM7XG5cdH07XG5cblx0ZnVuY3Rpb24gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuXHQgIHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7XG5cdH1cblx0ZnVuY3Rpb24gZGlmZlRyaW1tZWRMaW5lcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcblx0ICB2YXIgb3B0aW9ucyA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX3BhcmFtcy5nZW5lcmF0ZU9wdGlvbnMpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKGNhbGxiYWNrLCB7IGlnbm9yZVdoaXRlc3BhY2U6IHRydWUgfSk7XG5cdCAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDJ4cGJtVXVhbk1pWFN3aWJtRnRaWE1pT2xzaVpHbG1aa3hwYm1Weklpd2laR2xtWmxSeWFXMXRaV1JNYVc1bGN5SXNJbXhwYm1WRWFXWm1JaXdpZEc5clpXNXBlbVVpTENKMllXeDFaU0lzSW5KbGRFeHBibVZ6SWl3aWJHbHVaWE5CYm1ST1pYZHNhVzVsY3lJc0luTndiR2wwSWl3aWJHVnVaM1JvSWl3aWNHOXdJaXdpYVNJc0lteHBibVVpTENKdmNIUnBiMjV6SWl3aWJtVjNiR2x1WlVselZHOXJaVzRpTENKcFoyNXZjbVZYYUdsMFpYTndZV05sSWl3aWRISnBiU0lzSW5CMWMyZ2lMQ0p2YkdSVGRISWlMQ0p1WlhkVGRISWlMQ0pqWVd4c1ltRmpheUlzSW1ScFptWWlYU3dpYldGd2NHbHVaM01pT2lJN096czdaME5CT0VKblFrRXNVeXhIUVVGQlFTeFRPM2xFUVVOQlF5eG5RaXhIUVVGQlFTeG5RanM3UVVFdlFtaENPenM3TzNWQ1FVTkJPenM3TzNWQ1FVVlBMRWxCUVUxRExDdEZRVUZYTEhkRlFVRnFRanRCUVVOUVFTeFRRVUZUUXl4UlFVRlVMRWRCUVc5Q0xGVkJRVk5ETEV0QlFWUXNSVUZCWjBJN1FVRkRiRU1zVFVGQlNVTXNWMEZCVnl4RlFVRm1PMEZCUVVFc1RVRkRTVU1zYlVKQlFXMUNSaXhOUVVGTlJ5eExRVUZPTEVOQlFWa3NWMEZCV2l4RFFVUjJRanM3UVVGSFFUdEJRVU5CTEUxQlFVa3NRMEZCUTBRc2FVSkJRV2xDUVN4cFFrRkJhVUpGTEUxQlFXcENMRWRCUVRCQ0xFTkJRVE5ETEVOQlFVd3NSVUZCYjBRN1FVRkRiRVJHTEhGQ1FVRnBRa2NzUjBGQmFrSTdRVUZEUkRzN1FVRkZSRHRCUVVOQkxFOUJRVXNzU1VGQlNVTXNTVUZCU1N4RFFVRmlMRVZCUVdkQ1FTeEpRVUZKU2l4cFFrRkJhVUpGTEUxQlFYSkRMRVZCUVRaRFJTeEhRVUUzUXl4RlFVRnJSRHRCUVVOb1JDeFJRVUZKUXl4UFFVRlBUQ3hwUWtGQmFVSkpMRU5CUVdwQ0xFTkJRVmc3TzBGQlJVRXNVVUZCU1VFc1NVRkJTU3hEUVVGS0xFbEJRVk1zUTBGQlF5eExRVUZMUlN4UFFVRk1MRU5CUVdGRExHTkJRVE5DTEVWQlFUSkRPMEZCUTNwRFVpeGxRVUZUUVN4VFFVRlRSeXhOUVVGVUxFZEJRV3RDTEVOQlFUTkNMRXRCUVdsRFJ5eEpRVUZxUXp0QlFVTkVMRXRCUmtRc1RVRkZUenRCUVVOTUxGVkJRVWtzUzBGQlMwTXNUMEZCVEN4RFFVRmhSU3huUWtGQmFrSXNSVUZCYlVNN1FVRkRha05JTEdWQlFVOUJMRXRCUVV0SkxFbEJRVXdzUlVGQlVEdEJRVU5FTzBGQlEwUldMR1ZCUVZOWExFbEJRVlFzUTBGQlkwd3NTVUZCWkR0QlFVTkVPMEZCUTBZN08wRkJSVVFzVTBGQlQwNHNVVUZCVUR0QlFVTkVMRU5CZUVKRU96dEJRVEJDVHl4VFFVRlRUQ3hUUVVGVUxFTkJRVzFDYVVJc1RVRkJia0lzUlVGQk1rSkRMRTFCUVROQ0xFVkJRVzFEUXl4UlFVRnVReXhGUVVFMlF6dEJRVUZGTEZOQlFVOXFRaXhUUVVGVGEwSXNTVUZCVkN4RFFVRmpTQ3hOUVVGa0xFVkJRWE5DUXl4TlFVRjBRaXhGUVVFNFFrTXNVVUZCT1VJc1EwRkJVRHRCUVVGcFJEdEJRVU5vUnl4VFFVRlRiRUlzWjBKQlFWUXNRMEZCTUVKblFpeE5RVUV4UWl4RlFVRnJRME1zVFVGQmJFTXNSVUZCTUVORExGRkJRVEZETEVWQlFXOUVPMEZCUTNwRUxFMUJRVWxRTEZWQlFWVXNPRVZCUVdkQ1R5eFJRVUZvUWl4RlFVRXdRaXhGUVVGRFRDeHJRa0ZCYTBJc1NVRkJia0lzUlVGQk1VSXNRMEZCWkR0QlFVTkJMRk5CUVU5YUxGTkJRVk5yUWl4SlFVRlVMRU5CUVdOSUxFMUJRV1FzUlVGQmMwSkRMRTFCUVhSQ0xFVkJRVGhDVGl4UFFVRTVRaXhEUVVGUU8wRkJRMFFpTENKbWFXeGxJam9pYkdsdVpTNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JFYVdabUlHWnliMjBnSnk0dlltRnpaU2M3WEc1cGJYQnZjblFnZTJkbGJtVnlZWFJsVDNCMGFXOXVjMzBnWm5KdmJTQW5MaTR2ZFhScGJDOXdZWEpoYlhNbk8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2JHbHVaVVJwWm1ZZ1BTQnVaWGNnUkdsbVppZ3BPMXh1YkdsdVpVUnBabVl1ZEc5clpXNXBlbVVnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnNaWFFnY21WMFRHbHVaWE1nUFNCYlhTeGNiaUFnSUNBZ0lHeHBibVZ6UVc1a1RtVjNiR2x1WlhNZ1BTQjJZV3gxWlM1emNHeHBkQ2d2S0Z4Y2JueGNYSEpjWEc0cEx5azdYRzVjYmlBZ0x5OGdTV2R1YjNKbElIUm9aU0JtYVc1aGJDQmxiWEIwZVNCMGIydGxiaUIwYUdGMElHOWpZM1Z5Y3lCcFppQjBhR1VnYzNSeWFXNW5JR1Z1WkhNZ2QybDBhQ0JoSUc1bGR5QnNhVzVsWEc0Z0lHbG1JQ2doYkdsdVpYTkJibVJPWlhkc2FXNWxjMXRzYVc1bGMwRnVaRTVsZDJ4cGJtVnpMbXhsYm1kMGFDQXRJREZkS1NCN1hHNGdJQ0FnYkdsdVpYTkJibVJPWlhkc2FXNWxjeTV3YjNBb0tUdGNiaUFnZlZ4dVhHNGdJQzh2SUUxbGNtZGxJSFJvWlNCamIyNTBaVzUwSUdGdVpDQnNhVzVsSUhObGNHRnlZWFJ2Y25NZ2FXNTBieUJ6YVc1bmJHVWdkRzlyWlc1elhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYkdsdVpYTkJibVJPWlhkc2FXNWxjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUd4bGRDQnNhVzVsSUQwZ2JHbHVaWE5CYm1ST1pYZHNhVzVsYzF0cFhUdGNibHh1SUNBZ0lHbG1JQ2hwSUNVZ01pQW1KaUFoZEdocGN5NXZjSFJwYjI1ekxtNWxkMnhwYm1WSmMxUnZhMlZ1S1NCN1hHNGdJQ0FnSUNCeVpYUk1hVzVsYzF0eVpYUk1hVzVsY3k1c1pXNW5kR2dnTFNBeFhTQXJQU0JzYVc1bE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTV2Y0hScGIyNXpMbWxuYm05eVpWZG9hWFJsYzNCaFkyVXBJSHRjYmlBZ0lDQWdJQ0FnYkdsdVpTQTlJR3hwYm1VdWRISnBiU2dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnY21WMFRHbHVaWE11Y0hWemFDaHNhVzVsS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnY21WMFRHbHVaWE03WEc1OU8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaR2xtWmt4cGJtVnpLRzlzWkZOMGNpd2dibVYzVTNSeUxDQmpZV3hzWW1GamF5a2dleUJ5WlhSMWNtNGdiR2x1WlVScFptWXVaR2xtWmlodmJHUlRkSElzSUc1bGQxTjBjaXdnWTJGc2JHSmhZMnNwT3lCOVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pHbG1abFJ5YVcxdFpXUk1hVzVsY3lodmJHUlRkSElzSUc1bGQxTjBjaXdnWTJGc2JHSmhZMnNwSUh0Y2JpQWdiR1YwSUc5d2RHbHZibk1nUFNCblpXNWxjbUYwWlU5d2RHbHZibk1vWTJGc2JHSmhZMnNzSUh0cFoyNXZjbVZYYUdsMFpYTndZV05sT2lCMGNuVmxmU2s3WEc0Z0lISmxkSFZ5YmlCc2FXNWxSR2xtWmk1a2FXWm1LRzlzWkZOMGNpd2dibVYzVTNSeUxDQnZjSFJwYjI1ektUdGNibjFjYmlKZGZRPT1cblxuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuc2VudGVuY2VEaWZmID0gdW5kZWZpbmVkO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZTZW50ZW5jZXMgPSBkaWZmU2VudGVuY2VzO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Jhc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIHNlbnRlbmNlRGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3NlbnRlbmNlRGlmZiA9IG5ldyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UyWydkZWZhdWx0J10gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oKTtcblx0c2VudGVuY2VEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgcmV0dXJuIHZhbHVlLnNwbGl0KC8oXFxTLis/Wy4hP10pKD89XFxzK3wkKS8pO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGRpZmZTZW50ZW5jZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG5cdCAgcmV0dXJuIHNlbnRlbmNlRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5a2FXWm1MM05sYm5SbGJtTmxMbXB6SWwwc0ltNWhiV1Z6SWpwYkltUnBabVpUWlc1MFpXNWpaWE1pTENKelpXNTBaVzVqWlVScFptWWlMQ0owYjJ0bGJtbDZaU0lzSW5aaGJIVmxJaXdpYzNCc2FYUWlMQ0p2YkdSVGRISWlMQ0p1WlhkVGRISWlMQ0pqWVd4c1ltRmpheUlzSW1ScFptWWlYU3dpYldGd2NHbHVaM01pT2lJN096czdaME5CVVdkQ1FTeGhMRWRCUVVGQkxHRTdPMEZCVW1oQ096czdPenM3ZFVKQlIwOHNTVUZCVFVNc2RVWkJRV1VzZDBWQlFYSkNPMEZCUTFCQkxHRkJRV0ZETEZGQlFXSXNSMEZCZDBJc1ZVRkJVME1zUzBGQlZDeEZRVUZuUWp0QlFVTjBReXhUUVVGUFFTeE5RVUZOUXl4TFFVRk9MRU5CUVZrc2RVSkJRVm9zUTBGQlVEdEJRVU5FTEVOQlJrUTdPMEZCU1U4c1UwRkJVMG9zWVVGQlZDeERRVUYxUWtzc1RVRkJka0lzUlVGQkswSkRMRTFCUVM5Q0xFVkJRWFZEUXl4UlFVRjJReXhGUVVGcFJEdEJRVUZGTEZOQlFVOU9MR0ZCUVdGUExFbEJRV0lzUTBGQmEwSklMRTFCUVd4Q0xFVkJRVEJDUXl4TlFVRXhRaXhGUVVGclEwTXNVVUZCYkVNc1EwRkJVRHRCUVVGeFJDSXNJbVpwYkdVaU9pSnpaVzUwWlc1alpTNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JFYVdabUlHWnliMjBnSnk0dlltRnpaU2M3WEc1Y2JseHVaWGh3YjNKMElHTnZibk4wSUhObGJuUmxibU5sUkdsbVppQTlJRzVsZHlCRWFXWm1LQ2s3WEc1elpXNTBaVzVqWlVScFptWXVkRzlyWlc1cGVtVWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnZG1Gc2RXVXVjM0JzYVhRb0x5aGNYRk11S3o5YkxpRS9YU2tvUHoxY1hITXJmQ1FwTHlrN1hHNTlPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWkdsbVpsTmxiblJsYm1ObGN5aHZiR1JUZEhJc0lHNWxkMU4wY2l3Z1kyRnNiR0poWTJzcElIc2djbVYwZFhKdUlITmxiblJsYm1ObFJHbG1aaTVrYVdabUtHOXNaRk4wY2l3Z2JtVjNVM1J5TENCallXeHNZbUZqYXlrN0lIMWNiaUpkZlE9PVxuXG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5jc3NEaWZmID0gdW5kZWZpbmVkO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZDc3MgPSBkaWZmQ3NzO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Jhc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIGNzc0RpZmYgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jc3NEaWZmID0gbmV3IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZTJbJ2RlZmF1bHQnXSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLygpO1xuXHRjc3NEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgcmV0dXJuIHZhbHVlLnNwbGl0KC8oW3t9OjssXXxcXHMrKS8pO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGRpZmZDc3Mob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG5cdCAgcmV0dXJuIGNzc0RpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWthV1ptTDJOemN5NXFjeUpkTENKdVlXMWxjeUk2V3lKa2FXWm1RM056SWl3aVkzTnpSR2xtWmlJc0luUnZhMlZ1YVhwbElpd2lkbUZzZFdVaUxDSnpjR3hwZENJc0ltOXNaRk4wY2lJc0ltNWxkMU4wY2lJc0ltTmhiR3hpWVdOcklpd2laR2xtWmlKZExDSnRZWEJ3YVc1bmN5STZJanM3T3p0blEwRlBaMEpCTEU4c1IwRkJRVUVzVHpzN1FVRlFhRUk3T3pzN096dDFRa0ZGVHl4SlFVRk5ReXcyUlVGQlZTeDNSVUZCYUVJN1FVRkRVRUVzVVVGQlVVTXNVVUZCVWl4SFFVRnRRaXhWUVVGVFF5eExRVUZVTEVWQlFXZENPMEZCUTJwRExGTkJRVTlCTEUxQlFVMURMRXRCUVU0c1EwRkJXU3hsUVVGYUxFTkJRVkE3UVVGRFJDeERRVVpFT3p0QlFVbFBMRk5CUVZOS0xFOUJRVlFzUTBGQmFVSkxMRTFCUVdwQ0xFVkJRWGxDUXl4TlFVRjZRaXhGUVVGcFEwTXNVVUZCYWtNc1JVRkJNa003UVVGQlJTeFRRVUZQVGl4UlFVRlJUeXhKUVVGU0xFTkJRV0ZJTEUxQlFXSXNSVUZCY1VKRExFMUJRWEpDTEVWQlFUWkNReXhSUVVFM1FpeERRVUZRTzBGQlFXZEVJaXdpWm1sc1pTSTZJbU56Y3k1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQkVhV1ptSUdaeWIyMGdKeTR2WW1GelpTYzdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQmpjM05FYVdabUlEMGdibVYzSUVScFptWW9LVHRjYm1OemMwUnBabVl1ZEc5clpXNXBlbVVnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2RtRnNkV1V1YzNCc2FYUW9MeWhiZTMwNk95eGRmRnhjY3lzcEx5azdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pHbG1aa056Y3lodmJHUlRkSElzSUc1bGQxTjBjaXdnWTJGc2JHSmhZMnNwSUhzZ2NtVjBkWEp1SUdOemMwUnBabVl1WkdsbVppaHZiR1JUZEhJc0lHNWxkMU4wY2l3Z1kyRnNiR0poWTJzcE95QjlYRzRpWFgwPVxuXG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5qc29uRGlmZiA9IHVuZGVmaW5lZDtcblxuXHR2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9kaWZmSnNvbiA9IGRpZmZKc29uO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jYW5vbmljYWxpemUgPSBjYW5vbmljYWxpemU7XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfYmFzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9iYXNlKTtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3ZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2xpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi92YXIgb2JqZWN0UHJvdG90eXBlVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5cdHZhciBqc29uRGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2pzb25EaWZmID0gbmV3IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fYmFzZTJbJ2RlZmF1bHQnXSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLygpO1xuXHQvLyBEaXNjcmltaW5hdGUgYmV0d2VlbiB0d28gbGluZXMgb2YgcHJldHR5LXByaW50ZWQsIHNlcmlhbGl6ZWQgSlNPTiB3aGVyZSBvbmUgb2YgdGhlbSBoYXMgYVxuXHQvLyBkYW5nbGluZyBjb21tYSBhbmQgdGhlIG90aGVyIGRvZXNuJ3QuIFR1cm5zIG91dCBpbmNsdWRpbmcgdGhlIGRhbmdsaW5nIGNvbW1hIHlpZWxkcyB0aGUgbmljZXN0IG91dHB1dDpcblx0anNvbkRpZmYudXNlTG9uZ2VzdFRva2VuID0gdHJ1ZTtcblxuXHRqc29uRGlmZi50b2tlbml6ZSA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fbGluZS5saW5lRGlmZiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLy50b2tlbml6ZTtcblx0anNvbkRpZmYuY2FzdElucHV0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3VuZGVmaW5lZFJlcGxhY2VtZW50ID0gdGhpcy5vcHRpb25zLnVuZGVmaW5lZFJlcGxhY2VtZW50O1xuXG5cblx0ICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkoY2Fub25pY2FsaXplKHZhbHVlKSwgZnVuY3Rpb24gKGssIHYpIHtcblx0ICAgIGlmICh0eXBlb2YgdiA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0ICAgICAgcmV0dXJuIHVuZGVmaW5lZFJlcGxhY2VtZW50O1xuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gdjtcblx0ICB9LCAnICAnKTtcblx0fTtcblx0anNvbkRpZmYuZXF1YWxzID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG5cdCAgcmV0dXJuICgvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UyWydkZWZhdWx0J10gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8ucHJvdG90eXBlLmVxdWFscy5jYWxsKGpzb25EaWZmLCBsZWZ0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpLCByaWdodC5yZXBsYWNlKC8sKFtcXHJcXG5dKS9nLCAnJDEnKSlcblx0ICApO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGRpZmZKc29uKG9sZE9iaiwgbmV3T2JqLCBvcHRpb25zKSB7XG5cdCAgcmV0dXJuIGpzb25EaWZmLmRpZmYob2xkT2JqLCBuZXdPYmosIG9wdGlvbnMpO1xuXHR9XG5cblx0Ly8gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBwcmVzZW5jZSBvZiBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGJhaWxpbmcgb3V0IHdoZW4gZW5jb3VudGVyaW5nIGFuXG5cdC8vIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgb24gdGhlIFwic3RhY2tcIiBvZiBpdGVtcyBiZWluZyBwcm9jZXNzZWQuXG5cdGZ1bmN0aW9uIGNhbm9uaWNhbGl6ZShvYmosIHN0YWNrLCByZXBsYWNlbWVudFN0YWNrKSB7XG5cdCAgc3RhY2sgPSBzdGFjayB8fCBbXTtcblx0ICByZXBsYWNlbWVudFN0YWNrID0gcmVwbGFjZW1lbnRTdGFjayB8fCBbXTtcblxuXHQgIHZhciBpID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZvaWQgMCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQgIGZvciAoaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkgKz0gMSkge1xuXHQgICAgaWYgKHN0YWNrW2ldID09PSBvYmopIHtcblx0ICAgICAgcmV0dXJuIHJlcGxhY2VtZW50U3RhY2tbaV07XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgdmFyIGNhbm9uaWNhbGl6ZWRPYmogPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdm9pZCAwIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdCAgaWYgKCdbb2JqZWN0IEFycmF5XScgPT09IG9iamVjdFByb3RvdHlwZVRvU3RyaW5nLmNhbGwob2JqKSkge1xuXHQgICAgc3RhY2sucHVzaChvYmopO1xuXHQgICAgY2Fub25pY2FsaXplZE9iaiA9IG5ldyBBcnJheShvYmoubGVuZ3RoKTtcblx0ICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcblx0ICAgIGZvciAoaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpICs9IDEpIHtcblx0ICAgICAgY2Fub25pY2FsaXplZE9ialtpXSA9IGNhbm9uaWNhbGl6ZShvYmpbaV0sIHN0YWNrLCByZXBsYWNlbWVudFN0YWNrKTtcblx0ICAgIH1cblx0ICAgIHN0YWNrLnBvcCgpO1xuXHQgICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcblx0ICAgIHJldHVybiBjYW5vbmljYWxpemVkT2JqO1xuXHQgIH1cblxuXHQgIGlmIChvYmogJiYgb2JqLnRvSlNPTikge1xuXHQgICAgb2JqID0gb2JqLnRvSlNPTigpO1xuXHQgIH1cblxuXHQgIGlmICggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyh0eXBlb2YgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9vYmogPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG9iaikpID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHtcblx0ICAgIHN0YWNrLnB1c2gob2JqKTtcblx0ICAgIGNhbm9uaWNhbGl6ZWRPYmogPSB7fTtcblx0ICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcblx0ICAgIHZhciBzb3J0ZWRLZXlzID0gW10sXG5cdCAgICAgICAga2V5ID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZvaWQgMCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblx0ICAgIGZvciAoa2V5IGluIG9iaikge1xuXHQgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHQgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0ICAgICAgICBzb3J0ZWRLZXlzLnB1c2goa2V5KTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgc29ydGVkS2V5cy5zb3J0KCk7XG5cdCAgICBmb3IgKGkgPSAwOyBpIDwgc29ydGVkS2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuXHQgICAgICBrZXkgPSBzb3J0ZWRLZXlzW2ldO1xuXHQgICAgICBjYW5vbmljYWxpemVkT2JqW2tleV0gPSBjYW5vbmljYWxpemUob2JqW2tleV0sIHN0YWNrLCByZXBsYWNlbWVudFN0YWNrKTtcblx0ICAgIH1cblx0ICAgIHN0YWNrLnBvcCgpO1xuXHQgICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcblx0ICB9IGVsc2Uge1xuXHQgICAgY2Fub25pY2FsaXplZE9iaiA9IG9iajtcblx0ICB9XG5cdCAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRPYmo7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5a2FXWm1MMnB6YjI0dWFuTWlYU3dpYm1GdFpYTWlPbHNpWkdsbVprcHpiMjRpTENKallXNXZibWxqWVd4cGVtVWlMQ0p2WW1wbFkzUlFjbTkwYjNSNWNHVlViMU4wY21sdVp5SXNJazlpYW1WamRDSXNJbkJ5YjNSdmRIbHdaU0lzSW5SdlUzUnlhVzVuSWl3aWFuTnZia1JwWm1ZaUxDSjFjMlZNYjI1blpYTjBWRzlyWlc0aUxDSjBiMnRsYm1sNlpTSXNJbU5oYzNSSmJuQjFkQ0lzSW5aaGJIVmxJaXdpZFc1a1pXWnBibVZrVW1Wd2JHRmpaVzFsYm5RaUxDSnZjSFJwYjI1eklpd2lTbE5QVGlJc0luTjBjbWx1WjJsbWVTSXNJbXNpTENKMklpd2laWEYxWVd4eklpd2liR1ZtZENJc0luSnBaMmgwSWl3aVkyRnNiQ0lzSW5KbGNHeGhZMlVpTENKdmJHUlBZbW9pTENKdVpYZFBZbW9pTENKa2FXWm1JaXdpYjJKcUlpd2ljM1JoWTJzaUxDSnlaWEJzWVdObGJXVnVkRk4wWVdOcklpd2lhU0lzSW14bGJtZDBhQ0lzSW1OaGJtOXVhV05oYkdsNlpXUlBZbW9pTENKd2RYTm9JaXdpUVhKeVlYa2lMQ0p3YjNBaUxDSjBiMHBUVDA0aUxDSnpiM0owWldSTFpYbHpJaXdpYTJWNUlpd2lhR0Z6VDNkdVVISnZjR1Z5ZEhraUxDSnpiM0owSWwwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN08yZERRVEpDWjBKQkxGRXNSMEZCUVVFc1VUdDVSRUZKUVVNc1dTeEhRVUZCUVN4Wk96dEJRUzlDYUVJN096czdkVUpCUTBFN096czdkVUpCUlVFc1NVRkJUVU1zTUVKQlFUQkNReXhQUVVGUFF5eFRRVUZRTEVOQlFXbENReXhSUVVGcVJEczdRVUZIVHl4SlFVRk5ReXdyUlVGQlZ5eDNSVUZCYWtJN1FVRkRVRHRCUVVOQk8wRkJRMEZCTEZOQlFWTkRMR1ZCUVZRc1IwRkJNa0lzU1VGQk0wSTdPMEZCUlVGRUxGTkJRVk5GTEZGQlFWUXNSMEZCYjBJc1owVkJRVk5CTEZGQlFUZENPMEZCUTBGR0xGTkJRVk5ITEZOQlFWUXNSMEZCY1VJc1ZVRkJVME1zUzBGQlZDeEZRVUZuUWp0QlFVRkJMSE5FUVVNMVFrTXNiMEpCUkRSQ0xFZEJRMG9zUzBGQlMwTXNUMEZFUkN4RFFVTTFRa1FzYjBKQlJEUkNPenM3UVVGSGJrTXNVMEZCVHl4UFFVRlBSQ3hMUVVGUUxFdEJRV2xDTEZGQlFXcENMRWRCUVRSQ1FTeExRVUUxUWl4SFFVRnZRMGNzUzBGQlMwTXNVMEZCVEN4RFFVRmxZaXhoUVVGaFV5eExRVUZpTEVOQlFXWXNSVUZCYjBNc1ZVRkJVMHNzUTBGQlZDeEZRVUZaUXl4RFFVRmFMRVZCUVdVN1FVRkROVVlzVVVGQlNTeFBRVUZQUVN4RFFVRlFMRXRCUVdFc1YwRkJha0lzUlVGQk9FSTdRVUZETlVJc1lVRkJUMHdzYjBKQlFWQTdRVUZEUkRzN1FVRkZSQ3hYUVVGUFN5eERRVUZRTzBGQlEwUXNSMEZPTUVNc1JVRk5lRU1zU1VGT2QwTXNRMEZCTTBNN1FVRlBSQ3hEUVZaRU8wRkJWMEZXTEZOQlFWTlhMRTFCUVZRc1IwRkJhMElzVlVGQlUwTXNTVUZCVkN4RlFVRmxReXhMUVVGbUxFVkJRWE5DTzBGQlEzUkRMRk5CUVU4c2IwVkJRVXRtTEZOQlFVd3NRMEZCWldFc1RVRkJaaXhEUVVGelFrY3NTVUZCZEVJc1EwRkJNa0prTEZGQlFUTkNMRVZCUVhGRFdTeExRVUZMUnl4UFFVRk1MRU5CUVdFc1dVRkJZaXhGUVVFeVFpeEpRVUV6UWl4RFFVRnlReXhGUVVGMVJVWXNUVUZCVFVVc1QwRkJUaXhEUVVGakxGbEJRV1FzUlVGQk5FSXNTVUZCTlVJc1EwRkJka1U3UVVGQlVEdEJRVU5FTEVOQlJrUTdPMEZCU1U4c1UwRkJVM0pDTEZGQlFWUXNRMEZCYTBKelFpeE5RVUZzUWl4RlFVRXdRa01zVFVGQk1VSXNSVUZCYTBOWUxFOUJRV3hETEVWQlFUSkRPMEZCUVVVc1UwRkJUMDRzVTBGQlUydENMRWxCUVZRc1EwRkJZMFlzVFVGQlpDeEZRVUZ6UWtNc1RVRkJkRUlzUlVGQk9FSllMRTlCUVRsQ0xFTkJRVkE3UVVGQlowUTdPMEZCUlhCSE8wRkJRMEU3UVVGRFR5eFRRVUZUV0N4WlFVRlVMRU5CUVhOQ2QwSXNSMEZCZEVJc1JVRkJNa0pETEV0QlFUTkNMRVZCUVd0RFF5eG5Ra0ZCYkVNc1JVRkJiMFE3UVVGRGVrUkVMRlZCUVZGQkxGTkJRVk1zUlVGQmFrSTdRVUZEUVVNc2NVSkJRVzFDUVN4dlFrRkJiMElzUlVGQmRrTTdPMEZCUlVFc1RVRkJTVU1zYlVOQlFVbzdPMEZCUlVFc1QwRkJTMEVzU1VGQlNTeERRVUZVTEVWQlFWbEJMRWxCUVVsR0xFMUJRVTFITEUxQlFYUkNMRVZCUVRoQ1JDeExRVUZMTEVOQlFXNURMRVZCUVhORE8wRkJRM0JETEZGQlFVbEdMRTFCUVUxRkxFTkJRVTRzVFVGQllVZ3NSMEZCYWtJc1JVRkJjMEk3UVVGRGNFSXNZVUZCVDBVc2FVSkJRV2xDUXl4RFFVRnFRaXhEUVVGUU8wRkJRMFE3UVVGRFJqczdRVUZGUkN4TlFVRkpSU3hyUkVGQlNqczdRVUZGUVN4TlFVRkpMSEZDUVVGeFFqVkNMSGRDUVVGM1FtdENMRWxCUVhoQ0xFTkJRVFpDU3l4SFFVRTNRaXhEUVVGNlFpeEZRVUUwUkR0QlFVTXhSRU1zVlVGQlRVc3NTVUZCVGl4RFFVRlhUaXhIUVVGWU8wRkJRMEZMTEhWQ1FVRnRRaXhKUVVGSlJTeExRVUZLTEVOQlFWVlFMRWxCUVVsSkxFMUJRV1FzUTBGQmJrSTdRVUZEUVVZc2NVSkJRV2xDU1N4SlFVRnFRaXhEUVVGelFrUXNaMEpCUVhSQ08wRkJRMEVzVTBGQlMwWXNTVUZCU1N4RFFVRlVMRVZCUVZsQkxFbEJRVWxJTEVsQlFVbEpMRTFCUVhCQ0xFVkJRVFJDUkN4TFFVRkxMRU5CUVdwRExFVkJRVzlETzBGQlEyeERSU3gxUWtGQmFVSkdMRU5CUVdwQ0xFbEJRWE5DTTBJc1lVRkJZWGRDTEVsQlFVbEhMRU5CUVVvc1EwRkJZaXhGUVVGeFFrWXNTMEZCY2tJc1JVRkJORUpETEdkQ1FVRTFRaXhEUVVGMFFqdEJRVU5FTzBGQlEwUkVMRlZCUVUxUExFZEJRVTQ3UVVGRFFVNHNjVUpCUVdsQ1RTeEhRVUZxUWp0QlFVTkJMRmRCUVU5SUxHZENRVUZRTzBGQlEwUTdPMEZCUlVRc1RVRkJTVXdzVDBGQlQwRXNTVUZCU1ZNc1RVRkJaaXhGUVVGMVFqdEJRVU55UWxRc1ZVRkJUVUVzU1VGQlNWTXNUVUZCU2l4RlFVRk9PMEZCUTBRN08wRkJSVVFzVFVGQlNTeDVSRUZCVDFRc1IwRkJVQ3g1UTBGQlQwRXNSMEZCVUN4UFFVRmxMRkZCUVdZc1NVRkJNa0pCTEZGQlFWRXNTVUZCZGtNc1JVRkJOa003UVVGRE0wTkRMRlZCUVUxTExFbEJRVTRzUTBGQlYwNHNSMEZCV0R0QlFVTkJTeXgxUWtGQmJVSXNSVUZCYmtJN1FVRkRRVWdzY1VKQlFXbENTU3hKUVVGcVFpeERRVUZ6UWtRc1owSkJRWFJDTzBGQlEwRXNVVUZCU1Vzc1lVRkJZU3hGUVVGcVFqdEJRVUZCTEZGQlEwbERMSEZEUVVSS08wRkJSVUVzVTBGQlMwRXNSMEZCVEN4SlFVRlpXQ3hIUVVGYUxFVkJRV2xDTzBGQlEyWTdRVUZEUVN4VlFVRkpRU3hKUVVGSldTeGpRVUZLTEVOQlFXMUNSQ3hIUVVGdVFpeERRVUZLTEVWQlFUWkNPMEZCUXpOQ1JDeHRRa0ZCVjBvc1NVRkJXQ3hEUVVGblFrc3NSMEZCYUVJN1FVRkRSRHRCUVVOR08wRkJRMFJFTEdWQlFWZEhMRWxCUVZnN1FVRkRRU3hUUVVGTFZpeEpRVUZKTEVOQlFWUXNSVUZCV1VFc1NVRkJTVThzVjBGQlYwNHNUVUZCTTBJc1JVRkJiVU5FTEV0QlFVc3NRMEZCZUVNc1JVRkJNa003UVVGRGVrTlJMRmxCUVUxRUxGZEJRVmRRTEVOQlFWZ3NRMEZCVGp0QlFVTkJSU3gxUWtGQmFVSk5MRWRCUVdwQ0xFbEJRWGRDYmtNc1lVRkJZWGRDTEVsQlFVbFhMRWRCUVVvc1EwRkJZaXhGUVVGMVFsWXNTMEZCZGtJc1JVRkJPRUpETEdkQ1FVRTVRaXhEUVVGNFFqdEJRVU5FTzBGQlEwUkVMRlZCUVUxUExFZEJRVTQ3UVVGRFFVNHNjVUpCUVdsQ1RTeEhRVUZxUWp0QlFVTkVMRWRCYmtKRUxFMUJiVUpQTzBGQlEweElMSFZDUVVGdFFrd3NSMEZCYmtJN1FVRkRSRHRCUVVORUxGTkJRVTlMTEdkQ1FVRlFPMEZCUTBRaUxDSm1hV3hsSWpvaWFuTnZiaTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCRWFXWm1JR1p5YjIwZ0p5NHZZbUZ6WlNjN1hHNXBiWEJ2Y25RZ2UyeHBibVZFYVdabWZTQm1jbTl0SUNjdUwyeHBibVVuTzF4dVhHNWpiMjV6ZENCdlltcGxZM1JRY205MGIzUjVjR1ZVYjFOMGNtbHVaeUE5SUU5aWFtVmpkQzV3Y205MGIzUjVjR1V1ZEc5VGRISnBibWM3WEc1Y2JseHVaWGh3YjNKMElHTnZibk4wSUdwemIyNUVhV1ptSUQwZ2JtVjNJRVJwWm1Zb0tUdGNiaTh2SUVScGMyTnlhVzFwYm1GMFpTQmlaWFIzWldWdUlIUjNieUJzYVc1bGN5QnZaaUJ3Y21WMGRIa3RjSEpwYm5SbFpDd2djMlZ5YVdGc2FYcGxaQ0JLVTA5T0lIZG9aWEpsSUc5dVpTQnZaaUIwYUdWdElHaGhjeUJoWEc0dkx5QmtZVzVuYkdsdVp5QmpiMjF0WVNCaGJtUWdkR2hsSUc5MGFHVnlJR1J2WlhOdUozUXVJRlIxY201eklHOTFkQ0JwYm1Oc2RXUnBibWNnZEdobElHUmhibWRzYVc1bklHTnZiVzFoSUhscFpXeGtjeUIwYUdVZ2JtbGpaWE4wSUc5MWRIQjFkRHBjYm1wemIyNUVhV1ptTG5WelpVeHZibWRsYzNSVWIydGxiaUE5SUhSeWRXVTdYRzVjYm1wemIyNUVhV1ptTG5SdmEyVnVhWHBsSUQwZ2JHbHVaVVJwWm1ZdWRHOXJaVzVwZW1VN1hHNXFjMjl1UkdsbVppNWpZWE4wU1c1d2RYUWdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCamIyNXpkQ0I3ZFc1a1pXWnBibVZrVW1Wd2JHRmpaVzFsYm5SOUlEMGdkR2hwY3k1dmNIUnBiMjV6TzF4dVhHNGdJSEpsZEhWeWJpQjBlWEJsYjJZZ2RtRnNkV1VnUFQwOUlDZHpkSEpwYm1jbklEOGdkbUZzZFdVZ09pQktVMDlPTG5OMGNtbHVaMmxtZVNoallXNXZibWxqWVd4cGVtVW9kbUZzZFdVcExDQm1kVzVqZEdsdmJpaHJMQ0IyS1NCN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCMklEMDlQU0FuZFc1a1pXWnBibVZrSnlrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhWdVpHVm1hVzVsWkZKbGNHeGhZMlZ0Wlc1ME8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUIyTzF4dUlDQjlMQ0FuSUNBbktUdGNibjA3WEc1cWMyOXVSR2xtWmk1bGNYVmhiSE1nUFNCbWRXNWpkR2x2Ymloc1pXWjBMQ0J5YVdkb2RDa2dlMXh1SUNCeVpYUjFjbTRnUkdsbVppNXdjbTkwYjNSNWNHVXVaWEYxWVd4ekxtTmhiR3dvYW5OdmJrUnBabVlzSUd4bFpuUXVjbVZ3YkdGalpTZ3ZMQ2hiWEZ4eVhGeHVYU2t2Wnl3Z0p5UXhKeWtzSUhKcFoyaDBMbkpsY0d4aFkyVW9MeXdvVzF4Y2NseGNibDBwTDJjc0lDY2tNU2NwS1R0Y2JuMDdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJrYVdabVNuTnZiaWh2YkdSUFltb3NJRzVsZDA5aWFpd2diM0IwYVc5dWN5a2dleUJ5WlhSMWNtNGdhbk52YmtScFptWXVaR2xtWmlodmJHUlBZbW9zSUc1bGQwOWlhaXdnYjNCMGFXOXVjeWs3SUgxY2JseHVMeThnVkdocGN5Qm1kVzVqZEdsdmJpQm9ZVzVrYkdWeklIUm9aU0J3Y21WelpXNWpaU0J2WmlCamFYSmpkV3hoY2lCeVpXWmxjbVZ1WTJWeklHSjVJR0poYVd4cGJtY2diM1YwSUhkb1pXNGdaVzVqYjNWdWRHVnlhVzVuSUdGdVhHNHZMeUJ2WW1wbFkzUWdkR2hoZENCcGN5QmhiSEpsWVdSNUlHOXVJSFJvWlNCY0luTjBZV05yWENJZ2IyWWdhWFJsYlhNZ1ltVnBibWNnY0hKdlkyVnpjMlZrTGx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdOaGJtOXVhV05oYkdsNlpTaHZZbW9zSUhOMFlXTnJMQ0J5WlhCc1lXTmxiV1Z1ZEZOMFlXTnJLU0I3WEc0Z0lITjBZV05ySUQwZ2MzUmhZMnNnZkh3Z1cxMDdYRzRnSUhKbGNHeGhZMlZ0Wlc1MFUzUmhZMnNnUFNCeVpYQnNZV05sYldWdWRGTjBZV05ySUh4OElGdGRPMXh1WEc0Z0lHeGxkQ0JwTzF4dVhHNGdJR1p2Y2lBb2FTQTlJREE3SUdrZ1BDQnpkR0ZqYXk1c1pXNW5kR2c3SUdrZ0t6MGdNU2tnZTF4dUlDQWdJR2xtSUNoemRHRmphMXRwWFNBOVBUMGdiMkpxS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnY21Wd2JHRmpaVzFsYm5SVGRHRmphMXRwWFR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCc1pYUWdZMkZ1YjI1cFkyRnNhWHBsWkU5aWFqdGNibHh1SUNCcFppQW9KMXR2WW1wbFkzUWdRWEp5WVhsZEp5QTlQVDBnYjJKcVpXTjBVSEp2ZEc5MGVYQmxWRzlUZEhKcGJtY3VZMkZzYkNodlltb3BLU0I3WEc0Z0lDQWdjM1JoWTJzdWNIVnphQ2h2WW1vcE8xeHVJQ0FnSUdOaGJtOXVhV05oYkdsNlpXUlBZbW9nUFNCdVpYY2dRWEp5WVhrb2IySnFMbXhsYm1kMGFDazdYRzRnSUNBZ2NtVndiR0ZqWlcxbGJuUlRkR0ZqYXk1d2RYTm9LR05oYm05dWFXTmhiR2w2WldSUFltb3BPMXh1SUNBZ0lHWnZjaUFvYVNBOUlEQTdJR2tnUENCdlltb3ViR1Z1WjNSb095QnBJQ3M5SURFcElIdGNiaUFnSUNBZ0lHTmhibTl1YVdOaGJHbDZaV1JQWW1wYmFWMGdQU0JqWVc1dmJtbGpZV3hwZW1Vb2IySnFXMmxkTENCemRHRmpheXdnY21Wd2JHRmpaVzFsYm5SVGRHRmpheWs3WEc0Z0lDQWdmVnh1SUNBZ0lITjBZV05yTG5CdmNDZ3BPMXh1SUNBZ0lISmxjR3hoWTJWdFpXNTBVM1JoWTJzdWNHOXdLQ2s3WEc0Z0lDQWdjbVYwZFhKdUlHTmhibTl1YVdOaGJHbDZaV1JQWW1vN1hHNGdJSDFjYmx4dUlDQnBaaUFvYjJKcUlDWW1JRzlpYWk1MGIwcFRUMDRwSUh0Y2JpQWdJQ0J2WW1vZ1BTQnZZbW91ZEc5S1UwOU9LQ2s3WEc0Z0lIMWNibHh1SUNCcFppQW9kSGx3Wlc5bUlHOWlhaUE5UFQwZ0oyOWlhbVZqZENjZ0ppWWdiMkpxSUNFOVBTQnVkV3hzS1NCN1hHNGdJQ0FnYzNSaFkyc3VjSFZ6YUNodlltb3BPMXh1SUNBZ0lHTmhibTl1YVdOaGJHbDZaV1JQWW1vZ1BTQjdmVHRjYmlBZ0lDQnlaWEJzWVdObGJXVnVkRk4wWVdOckxuQjFjMmdvWTJGdWIyNXBZMkZzYVhwbFpFOWlhaWs3WEc0Z0lDQWdiR1YwSUhOdmNuUmxaRXRsZVhNZ1BTQmJYU3hjYmlBZ0lDQWdJQ0FnYTJWNU8xeHVJQ0FnSUdadmNpQW9hMlY1SUdsdUlHOWlhaWtnZTF4dUlDQWdJQ0FnTHlvZ2FYTjBZVzVpZFd3Z2FXZHViM0psSUdWc2MyVWdLaTljYmlBZ0lDQWdJR2xtSUNodlltb3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb2EyVjVLU2tnZTF4dUlDQWdJQ0FnSUNCemIzSjBaV1JMWlhsekxuQjFjMmdvYTJWNUtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnYzI5eWRHVmtTMlY1Y3k1emIzSjBLQ2s3WEc0Z0lDQWdabTl5SUNocElEMGdNRHNnYVNBOElITnZjblJsWkV0bGVYTXViR1Z1WjNSb095QnBJQ3M5SURFcElIdGNiaUFnSUNBZ0lHdGxlU0E5SUhOdmNuUmxaRXRsZVhOYmFWMDdYRzRnSUNBZ0lDQmpZVzV2Ym1sallXeHBlbVZrVDJKcVcydGxlVjBnUFNCallXNXZibWxqWVd4cGVtVW9iMkpxVzJ0bGVWMHNJSE4wWVdOckxDQnlaWEJzWVdObGJXVnVkRk4wWVdOcktUdGNiaUFnSUNCOVhHNGdJQ0FnYzNSaFkyc3VjRzl3S0NrN1hHNGdJQ0FnY21Wd2JHRmpaVzFsYm5SVGRHRmpheTV3YjNBb0tUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQmpZVzV2Ym1sallXeHBlbVZrVDJKcUlEMGdiMkpxTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJqWVc1dmJtbGpZV3hwZW1Wa1QySnFPMXh1ZlZ4dUlsMTlcblxuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuYXJyYXlEaWZmID0gdW5kZWZpbmVkO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2RpZmZBcnJheXMgPSBkaWZmQXJyYXlzO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Jhc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovdmFyIGFycmF5RGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2FycmF5RGlmZiA9IG5ldyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2Jhc2UyWydkZWZhdWx0J10gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oKTtcblx0YXJyYXlEaWZmLnRva2VuaXplID0gYXJyYXlEaWZmLmpvaW4gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICByZXR1cm4gdmFsdWUuc2xpY2UoKTtcblx0fTtcblx0YXJyYXlEaWZmLnJlbW92ZUVtcHR5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgcmV0dXJuIHZhbHVlO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGRpZmZBcnJheXMob2xkQXJyLCBuZXdBcnIsIGNhbGxiYWNrKSB7XG5cdCAgcmV0dXJuIGFycmF5RGlmZi5kaWZmKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjayk7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5a2FXWm1MMkZ5Y21GNUxtcHpJbDBzSW01aGJXVnpJanBiSW1ScFptWkJjbkpoZVhNaUxDSmhjbkpoZVVScFptWWlMQ0owYjJ0bGJtbDZaU0lzSW1wdmFXNGlMQ0oyWVd4MVpTSXNJbk5zYVdObElpd2ljbVZ0YjNabFJXMXdkSGtpTENKdmJHUkJjbklpTENKdVpYZEJjbklpTENKallXeHNZbUZqYXlJc0ltUnBabVlpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3WjBOQlZXZENRU3hWTEVkQlFVRkJMRlU3TzBGQlZtaENPenM3T3pzN2RVSkJSVThzU1VGQlRVTXNhVVpCUVZrc2QwVkJRV3hDTzBGQlExQkJMRlZCUVZWRExGRkJRVllzUjBGQmNVSkVMRlZCUVZWRkxFbEJRVllzUjBGQmFVSXNWVUZCVTBNc1MwRkJWQ3hGUVVGblFqdEJRVU53UkN4VFFVRlBRU3hOUVVGTlF5eExRVUZPTEVWQlFWQTdRVUZEUkN4RFFVWkVPMEZCUjBGS0xGVkJRVlZMTEZkQlFWWXNSMEZCZDBJc1ZVRkJVMFlzUzBGQlZDeEZRVUZuUWp0QlFVTjBReXhUUVVGUFFTeExRVUZRTzBGQlEwUXNRMEZHUkRzN1FVRkpUeXhUUVVGVFNpeFZRVUZVTEVOQlFXOUNUeXhOUVVGd1FpeEZRVUUwUWtNc1RVRkJOVUlzUlVGQmIwTkRMRkZCUVhCRExFVkJRVGhETzBGQlFVVXNVMEZCVDFJc1ZVRkJWVk1zU1VGQlZpeERRVUZsU0N4TlFVRm1MRVZCUVhWQ1F5eE5RVUYyUWl4RlFVRXJRa01zVVVGQkwwSXNRMEZCVUR0QlFVRnJSQ0lzSW1acGJHVWlPaUpoY25KaGVTNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JFYVdabUlHWnliMjBnSnk0dlltRnpaU2M3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JoY25KaGVVUnBabVlnUFNCdVpYY2dSR2xtWmlncE8xeHVZWEp5WVhsRWFXWm1MblJ2YTJWdWFYcGxJRDBnWVhKeVlYbEVhV1ptTG1wdmFXNGdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnZG1Gc2RXVXVjMnhwWTJVb0tUdGNibjA3WEc1aGNuSmhlVVJwWm1ZdWNtVnRiM1psUlcxd2RIa2dQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnZG1Gc2RXVTdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pHbG1aa0Z5Y21GNWN5aHZiR1JCY25Jc0lHNWxkMEZ5Y2l3Z1kyRnNiR0poWTJzcElIc2djbVYwZFhKdUlHRnljbUY1UkdsbVppNWthV1ptS0c5c1pFRnljaXdnYm1WM1FYSnlMQ0JqWVd4c1ltRmpheWs3SUgxY2JpSmRmUT09XG5cblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9hcHBseVBhdGNoID0gYXBwbHlQYXRjaDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovYXBwbHlQYXRjaGVzID0gYXBwbHlQYXRjaGVzO1xuXG5cdHZhciAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3BhcnNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fZGlzdGFuY2VJdGVyYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2Rpc3RhbmNlSXRlcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGlzdGFuY2VJdGVyYXRvcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5cdC8qaXN0YW5idWwgaWdub3JlIGVuZCovZnVuY3Rpb24gYXBwbHlQYXRjaChzb3VyY2UsIHVuaURpZmYpIHtcblx0ICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIC8qaXN0YW5idWwgaWdub3JlIGVuZCovb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cblx0ICBpZiAodHlwZW9mIHVuaURpZmYgPT09ICdzdHJpbmcnKSB7XG5cdCAgICB1bmlEaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfcGFyc2UucGFyc2VQYXRjaCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8odW5pRGlmZik7XG5cdCAgfVxuXG5cdCAgaWYgKEFycmF5LmlzQXJyYXkodW5pRGlmZikpIHtcblx0ICAgIGlmICh1bmlEaWZmLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgdGhyb3cgbmV3IEVycm9yKCdhcHBseVBhdGNoIG9ubHkgd29ya3Mgd2l0aCBhIHNpbmdsZSBpbnB1dC4nKTtcblx0ICAgIH1cblxuXHQgICAgdW5pRGlmZiA9IHVuaURpZmZbMF07XG5cdCAgfVxuXG5cdCAgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIGlucHV0XG5cdCAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS8pLFxuXHQgICAgICBkZWxpbWl0ZXJzID0gc291cmNlLm1hdGNoKC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS9nKSB8fCBbXSxcblx0ICAgICAgaHVua3MgPSB1bmlEaWZmLmh1bmtzLFxuXHQgICAgICBjb21wYXJlTGluZSA9IG9wdGlvbnMuY29tcGFyZUxpbmUgfHwgZnVuY3Rpb24gKGxpbmVOdW1iZXIsIGxpbmUsIG9wZXJhdGlvbiwgcGF0Y2hDb250ZW50KSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCove1xuXHQgICAgcmV0dXJuICgvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2xpbmUgPT09IHBhdGNoQ29udGVudFxuXHQgICAgKTtcblx0ICB9LFxuXHQgICAgICBlcnJvckNvdW50ID0gMCxcblx0ICAgICAgZnV6ekZhY3RvciA9IG9wdGlvbnMuZnV6ekZhY3RvciB8fCAwLFxuXHQgICAgICBtaW5MaW5lID0gMCxcblx0ICAgICAgb2Zmc2V0ID0gMCxcblx0ICAgICAgcmVtb3ZlRU9GTkwgPSAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdm9pZCAwIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLFxuXHQgICAgICBhZGRFT0ZOTCA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92b2lkIDAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0ICAvKipcblx0ICAgKiBDaGVja3MgaWYgdGhlIGh1bmsgZXhhY3RseSBmaXRzIG9uIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuXHQgICAqL1xuXHQgIGZ1bmN0aW9uIGh1bmtGaXRzKGh1bmssIHRvUG9zKSB7XG5cdCAgICBmb3IgKHZhciBqID0gMDsgaiA8IGh1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgdmFyIGxpbmUgPSBodW5rLmxpbmVzW2pdLFxuXHQgICAgICAgICAgb3BlcmF0aW9uID0gbGluZVswXSxcblx0ICAgICAgICAgIGNvbnRlbnQgPSBsaW5lLnN1YnN0cigxKTtcblxuXHQgICAgICBpZiAob3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnLScpIHtcblx0ICAgICAgICAvLyBDb250ZXh0IHNhbml0eSBjaGVja1xuXHQgICAgICAgIGlmICghY29tcGFyZUxpbmUodG9Qb3MgKyAxLCBsaW5lc1t0b1Bvc10sIG9wZXJhdGlvbiwgY29udGVudCkpIHtcblx0ICAgICAgICAgIGVycm9yQ291bnQrKztcblxuXHQgICAgICAgICAgaWYgKGVycm9yQ291bnQgPiBmdXp6RmFjdG9yKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdG9Qb3MrKztcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gdHJ1ZTtcblx0ICB9XG5cblx0ICAvLyBTZWFyY2ggYmVzdCBmaXQgb2Zmc2V0cyBmb3IgZWFjaCBodW5rIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBvbmVzXG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBodW5rcy5sZW5ndGg7IGkrKykge1xuXHQgICAgdmFyIGh1bmsgPSBodW5rc1tpXSxcblx0ICAgICAgICBtYXhMaW5lID0gbGluZXMubGVuZ3RoIC0gaHVuay5vbGRMaW5lcyxcblx0ICAgICAgICBsb2NhbE9mZnNldCA9IDAsXG5cdCAgICAgICAgdG9Qb3MgPSBvZmZzZXQgKyBodW5rLm9sZFN0YXJ0IC0gMTtcblxuXHQgICAgdmFyIGl0ZXJhdG9yID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfZGlzdGFuY2VJdGVyYXRvcjJbJ2RlZmF1bHQnXSkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8odG9Qb3MsIG1pbkxpbmUsIG1heExpbmUpO1xuXG5cdCAgICBmb3IgKDsgbG9jYWxPZmZzZXQgIT09IHVuZGVmaW5lZDsgbG9jYWxPZmZzZXQgPSBpdGVyYXRvcigpKSB7XG5cdCAgICAgIGlmIChodW5rRml0cyhodW5rLCB0b1BvcyArIGxvY2FsT2Zmc2V0KSkge1xuXHQgICAgICAgIGh1bmsub2Zmc2V0ID0gb2Zmc2V0ICs9IGxvY2FsT2Zmc2V0O1xuXHQgICAgICAgIGJyZWFrO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGlmIChsb2NhbE9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgIH1cblxuXHQgICAgLy8gU2V0IGxvd2VyIHRleHQgbGltaXQgdG8gZW5kIG9mIHRoZSBjdXJyZW50IGh1bmssIHNvIG5leHQgb25lcyBkb24ndCB0cnlcblx0ICAgIC8vIHRvIGZpdCBvdmVyIGFscmVhZHkgcGF0Y2hlZCB0ZXh0XG5cdCAgICBtaW5MaW5lID0gaHVuay5vZmZzZXQgKyBodW5rLm9sZFN0YXJ0ICsgaHVuay5vbGRMaW5lcztcblx0ICB9XG5cblx0ICAvLyBBcHBseSBwYXRjaCBodW5rc1xuXHQgIHZhciBkaWZmT2Zmc2V0ID0gMDtcblx0ICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaHVua3MubGVuZ3RoOyBfaSsrKSB7XG5cdCAgICB2YXIgX2h1bmsgPSBodW5rc1tfaV0sXG5cdCAgICAgICAgX3RvUG9zID0gX2h1bmsub2xkU3RhcnQgKyBfaHVuay5vZmZzZXQgKyBkaWZmT2Zmc2V0IC0gMTtcblx0ICAgIGRpZmZPZmZzZXQgKz0gX2h1bmsubmV3TGluZXMgLSBfaHVuay5vbGRMaW5lcztcblxuXHQgICAgaWYgKF90b1BvcyA8IDApIHtcblx0ICAgICAgLy8gQ3JlYXRpbmcgYSBuZXcgZmlsZVxuXHQgICAgICBfdG9Qb3MgPSAwO1xuXHQgICAgfVxuXG5cdCAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9odW5rLmxpbmVzLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgIHZhciBsaW5lID0gX2h1bmsubGluZXNbal0sXG5cdCAgICAgICAgICBvcGVyYXRpb24gPSBsaW5lWzBdLFxuXHQgICAgICAgICAgY29udGVudCA9IGxpbmUuc3Vic3RyKDEpLFxuXHQgICAgICAgICAgZGVsaW1pdGVyID0gX2h1bmsubGluZWRlbGltaXRlcnNbal07XG5cblx0ICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG5cdCAgICAgICAgX3RvUG9zKys7XG5cdCAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcblx0ICAgICAgICBsaW5lcy5zcGxpY2UoX3RvUG9zLCAxKTtcblx0ICAgICAgICBkZWxpbWl0ZXJzLnNwbGljZShfdG9Qb3MsIDEpO1xuXHQgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdCAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnKycpIHtcblx0ICAgICAgICBsaW5lcy5zcGxpY2UoX3RvUG9zLCAwLCBjb250ZW50KTtcblx0ICAgICAgICBkZWxpbWl0ZXJzLnNwbGljZShfdG9Qb3MsIDAsIGRlbGltaXRlcik7XG5cdCAgICAgICAgX3RvUG9zKys7XG5cdCAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnXFxcXCcpIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNPcGVyYXRpb24gPSBfaHVuay5saW5lc1tqIC0gMV0gPyBfaHVuay5saW5lc1tqIC0gMV1bMF0gOiBudWxsO1xuXHQgICAgICAgIGlmIChwcmV2aW91c09wZXJhdGlvbiA9PT0gJysnKSB7XG5cdCAgICAgICAgICByZW1vdmVFT0ZOTCA9IHRydWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChwcmV2aW91c09wZXJhdGlvbiA9PT0gJy0nKSB7XG5cdCAgICAgICAgICBhZGRFT0ZOTCA9IHRydWU7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgLy8gSGFuZGxlIEVPRk5MIGluc2VydGlvbi9yZW1vdmFsXG5cdCAgaWYgKHJlbW92ZUVPRk5MKSB7XG5cdCAgICB3aGlsZSAoIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKSB7XG5cdCAgICAgIGxpbmVzLnBvcCgpO1xuXHQgICAgICBkZWxpbWl0ZXJzLnBvcCgpO1xuXHQgICAgfVxuXHQgIH0gZWxzZSBpZiAoYWRkRU9GTkwpIHtcblx0ICAgIGxpbmVzLnB1c2goJycpO1xuXHQgICAgZGVsaW1pdGVycy5wdXNoKCdcXG4nKTtcblx0ICB9XG5cdCAgZm9yICh2YXIgX2sgPSAwOyBfayA8IGxpbmVzLmxlbmd0aCAtIDE7IF9rKyspIHtcblx0ICAgIGxpbmVzW19rXSA9IGxpbmVzW19rXSArIGRlbGltaXRlcnNbX2tdO1xuXHQgIH1cblx0ICByZXR1cm4gbGluZXMuam9pbignJyk7XG5cdH1cblxuXHQvLyBXcmFwcGVyIHRoYXQgc3VwcG9ydHMgbXVsdGlwbGUgZmlsZSBwYXRjaGVzIHZpYSBjYWxsYmFja3MuXG5cdGZ1bmN0aW9uIGFwcGx5UGF0Y2hlcyh1bmlEaWZmLCBvcHRpb25zKSB7XG5cdCAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuXHQgICAgdW5pRGlmZiA9IC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX3BhcnNlLnBhcnNlUGF0Y2gpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKHVuaURpZmYpO1xuXHQgIH1cblxuXHQgIHZhciBjdXJyZW50SW5kZXggPSAwO1xuXHQgIGZ1bmN0aW9uIHByb2Nlc3NJbmRleCgpIHtcblx0ICAgIHZhciBpbmRleCA9IHVuaURpZmZbY3VycmVudEluZGV4KytdO1xuXHQgICAgaWYgKCFpbmRleCkge1xuXHQgICAgICByZXR1cm4gb3B0aW9ucy5jb21wbGV0ZSgpO1xuXHQgICAgfVxuXG5cdCAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG5cdCAgICAgIGlmIChlcnIpIHtcblx0ICAgICAgICByZXR1cm4gb3B0aW9ucy5jb21wbGV0ZShlcnIpO1xuXHQgICAgICB9XG5cblx0ICAgICAgdmFyIHVwZGF0ZWRDb250ZW50ID0gYXBwbHlQYXRjaChkYXRhLCBpbmRleCwgb3B0aW9ucyk7XG5cdCAgICAgIG9wdGlvbnMucGF0Y2hlZChpbmRleCwgdXBkYXRlZENvbnRlbnQsIGZ1bmN0aW9uIChlcnIpIHtcblx0ICAgICAgICBpZiAoZXJyKSB7XG5cdCAgICAgICAgICByZXR1cm4gb3B0aW9ucy5jb21wbGV0ZShlcnIpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHByb2Nlc3NJbmRleCgpO1xuXHQgICAgICB9KTtcblx0ICAgIH0pO1xuXHQgIH1cblx0ICBwcm9jZXNzSW5kZXgoKTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTl3WVhSamFDOWhjSEJzZVM1cWN5SmRMQ0p1WVcxbGN5STZXeUpoY0hCc2VWQmhkR05vSWl3aVlYQndiSGxRWVhSamFHVnpJaXdpYzI5MWNtTmxJaXdpZFc1cFJHbG1aaUlzSW05d2RHbHZibk1pTENKQmNuSmhlU0lzSW1selFYSnlZWGtpTENKc1pXNW5kR2dpTENKRmNuSnZjaUlzSW14cGJtVnpJaXdpYzNCc2FYUWlMQ0prWld4cGJXbDBaWEp6SWl3aWJXRjBZMmdpTENKb2RXNXJjeUlzSW1OdmJYQmhjbVZNYVc1bElpd2liR2x1WlU1MWJXSmxjaUlzSW14cGJtVWlMQ0p2Y0dWeVlYUnBiMjRpTENKd1lYUmphRU52Ym5SbGJuUWlMQ0psY25KdmNrTnZkVzUwSWl3aVpuVjZla1poWTNSdmNpSXNJbTFwYmt4cGJtVWlMQ0p2Wm1aelpYUWlMQ0p5WlcxdmRtVkZUMFpPVENJc0ltRmtaRVZQUms1TUlpd2lhSFZ1YTBacGRITWlMQ0pvZFc1cklpd2lkRzlRYjNNaUxDSnFJaXdpWTI5dWRHVnVkQ0lzSW5OMVluTjBjaUlzSW1raUxDSnRZWGhNYVc1bElpd2liMnhrVEdsdVpYTWlMQ0pzYjJOaGJFOW1abk5sZENJc0ltOXNaRk4wWVhKMElpd2lhWFJsY21GMGIzSWlMQ0oxYm1SbFptbHVaV1FpTENKa2FXWm1UMlptYzJWMElpd2libVYzVEdsdVpYTWlMQ0prWld4cGJXbDBaWElpTENKc2FXNWxaR1ZzYVcxcGRHVnljeUlzSW5Od2JHbGpaU0lzSW5CeVpYWnBiM1Z6VDNCbGNtRjBhVzl1SWl3aWNHOXdJaXdpY0hWemFDSXNJbDlySWl3aWFtOXBiaUlzSW1OMWNuSmxiblJKYm1SbGVDSXNJbkJ5YjJObGMzTkpibVJsZUNJc0ltbHVaR1Y0SWl3aVkyOXRjR3hsZEdVaUxDSnNiMkZrUm1sc1pTSXNJbVZ5Y2lJc0ltUmhkR0VpTENKMWNHUmhkR1ZrUTI5dWRHVnVkQ0lzSW5CaGRHTm9aV1FpWFN3aWJXRndjR2x1WjNNaU9pSTdPenRuUTBGSFowSkJMRlVzUjBGQlFVRXNWVHQ1UkVGdlNVRkRMRmtzUjBGQlFVRXNXVHM3UVVGMlNXaENPenRCUVVOQk96czdPenM3ZFVKQlJVOHNVMEZCVTBRc1ZVRkJWQ3hEUVVGdlFrVXNUVUZCY0VJc1JVRkJORUpETEU5QlFUVkNMRVZCUVcxRU8wRkJRVUVzYzBSQlFXUkRMRTlCUVdNc2RVVkJRVW9zUlVGQlNUczdRVUZEZUVRc1RVRkJTU3hQUVVGUFJDeFBRVUZRTEV0QlFXMUNMRkZCUVhaQ0xFVkJRV2xETzBGQlF5OUNRU3hqUVVGVkxIZEZRVUZYUVN4UFFVRllMRU5CUVZZN1FVRkRSRHM3UVVGRlJDeE5RVUZKUlN4TlFVRk5ReXhQUVVGT0xFTkJRV05JTEU5QlFXUXNRMEZCU2l4RlFVRTBRanRCUVVNeFFpeFJRVUZKUVN4UlFVRlJTU3hOUVVGU0xFZEJRV2xDTEVOQlFYSkNMRVZCUVhkQ08wRkJRM1JDTEZsQlFVMHNTVUZCU1VNc1MwRkJTaXhEUVVGVkxEUkRRVUZXTEVOQlFVNDdRVUZEUkRzN1FVRkZSRXdzWTBGQlZVRXNVVUZCVVN4RFFVRlNMRU5CUVZZN1FVRkRSRHM3UVVGRlJEdEJRVU5CTEUxQlFVbE5MRkZCUVZGUUxFOUJRVTlSTEV0QlFWQXNRMEZCWVN4eFFrRkJZaXhEUVVGYU8wRkJRVUVzVFVGRFNVTXNZVUZCWVZRc1QwRkJUMVVzUzBGQlVDeERRVUZoTEhOQ1FVRmlMRXRCUVhkRExFVkJSSHBFTzBGQlFVRXNUVUZGU1VNc1VVRkJVVllzVVVGQlVWVXNTMEZHY0VJN1FVRkJRU3hOUVVsSlF5eGpRVUZqVml4UlFVRlJWU3hYUVVGU0xFbEJRWGRDTEZWQlFVTkRMRlZCUVVRc1JVRkJZVU1zU1VGQllpeEZRVUZ0UWtNc1UwRkJia0lzUlVGQk9FSkRMRmxCUVRsQ08wRkJRVUVzYlVOQlFTdERSaXhUUVVGVFJUdEJRVUY0UkR0QlFVRkJMRWRCU2pGRE8wRkJRVUVzVFVGTFNVTXNZVUZCWVN4RFFVeHFRanRCUVVGQkxFMUJUVWxETEdGQlFXRm9RaXhSUVVGUlowSXNWVUZCVWl4SlFVRnpRaXhEUVU1MlF6dEJRVUZCTEUxQlQwbERMRlZCUVZVc1EwRlFaRHRCUVVGQkxFMUJVVWxETEZOQlFWTXNRMEZTWWp0QlFVRkJMRTFCVlVsRExEWkRRVlpLTzBGQlFVRXNUVUZYU1VNc01FTkJXRW83TzBGQllVRTdPenRCUVVkQkxGZEJRVk5ETEZGQlFWUXNRMEZCYTBKRExFbEJRV3hDTEVWQlFYZENReXhMUVVGNFFpeEZRVUVyUWp0QlFVTTNRaXhUUVVGTExFbEJRVWxETEVsQlFVa3NRMEZCWWl4RlFVRm5Ra0VzU1VGQlNVWXNTMEZCUzJwQ0xFdEJRVXdzUTBGQlYwWXNUVUZCTDBJc1JVRkJkVU54UWl4SFFVRjJReXhGUVVFMFF6dEJRVU14UXl4VlFVRkpXaXhQUVVGUFZTeExRVUZMYWtJc1MwRkJUQ3hEUVVGWGJVSXNRMEZCV0N4RFFVRllPMEZCUVVFc1ZVRkRTVmdzV1VGQldVUXNTMEZCU3l4RFFVRk1MRU5CUkdoQ08wRkJRVUVzVlVGRlNXRXNWVUZCVldJc1MwRkJTMk1zVFVGQlRDeERRVUZaTEVOQlFWb3NRMEZHWkRzN1FVRkpRU3hWUVVGSllpeGpRVUZqTEVkQlFXUXNTVUZCY1VKQkxHTkJRV01zUjBGQmRrTXNSVUZCTkVNN1FVRkRNVU03UVVGRFFTeFpRVUZKTEVOQlFVTklMRmxCUVZsaExGRkJRVkVzUTBGQmNFSXNSVUZCZFVKc1FpeE5RVUZOYTBJc1MwRkJUaXhEUVVGMlFpeEZRVUZ4UTFZc1UwRkJja01zUlVGQlowUlpMRTlCUVdoRUxFTkJRVXdzUlVGQkswUTdRVUZETjBSV096dEJRVVZCTEdOQlFVbEJMR0ZCUVdGRExGVkJRV3BDTEVWQlFUWkNPMEZCUXpOQ0xHMUNRVUZQTEV0QlFWQTdRVUZEUkR0QlFVTkdPMEZCUTBSUE8wRkJRMFE3UVVGRFJqczdRVUZGUkN4WFFVRlBMRWxCUVZBN1FVRkRSRHM3UVVGRlJEdEJRVU5CTEU5QlFVc3NTVUZCU1Vrc1NVRkJTU3hEUVVGaUxFVkJRV2RDUVN4SlFVRkpiRUlzVFVGQlRVNHNUVUZCTVVJc1JVRkJhME4zUWl4SFFVRnNReXhGUVVGMVF6dEJRVU55UXl4UlFVRkpUQ3hQUVVGUFlpeE5RVUZOYTBJc1EwRkJUaXhEUVVGWU8wRkJRVUVzVVVGRFNVTXNWVUZCVlhaQ0xFMUJRVTFHTEUxQlFVNHNSMEZCWlcxQ0xFdEJRVXRQTEZGQlJHeERPMEZCUVVFc1VVRkZTVU1zWTBGQll5eERRVVpzUWp0QlFVRkJMRkZCUjBsUUxGRkJRVkZNTEZOQlFWTkpMRXRCUVV0VExGRkJRV1FzUjBGQmVVSXNRMEZJY2tNN08wRkJTMEVzVVVGQlNVTXNWMEZCVnl4dlJrRkJhVUpVTEV0QlFXcENMRVZCUVhkQ1RpeFBRVUY0UWl4RlFVRnBRMWNzVDBGQmFrTXNRMEZCWmpzN1FVRkZRU3hYUVVGUFJTeG5Ra0ZCWjBKSExGTkJRWFpDTEVWQlFXdERTQ3hqUVVGalJTeFZRVUZvUkN4RlFVRTBSRHRCUVVNeFJDeFZRVUZKV0N4VFFVRlRReXhKUVVGVUxFVkJRV1ZETEZGQlFWRlBMRmRCUVhaQ0xFTkJRVW9zUlVGQmVVTTdRVUZEZGtOU0xHRkJRVXRLTEUxQlFVd3NSMEZCWTBFc1ZVRkJWVmtzVjBGQmVFSTdRVUZEUVR0QlFVTkVPMEZCUTBZN08wRkJSVVFzVVVGQlNVRXNaMEpCUVdkQ1J5eFRRVUZ3UWl4RlFVRXJRanRCUVVNM1FpeGhRVUZQTEV0QlFWQTdRVUZEUkRzN1FVRkZSRHRCUVVOQk8wRkJRMEZvUWl4alFVRlZTeXhMUVVGTFNpeE5RVUZNTEVkQlFXTkpMRXRCUVV0VExGRkJRVzVDTEVkQlFUaENWQ3hMUVVGTFR5eFJRVUUzUXp0QlFVTkVPenRCUVVWRU8wRkJRMEVzVFVGQlNVc3NZVUZCWVN4RFFVRnFRanRCUVVOQkxFOUJRVXNzU1VGQlNWQXNTMEZCU1N4RFFVRmlMRVZCUVdkQ1FTeExRVUZKYkVJc1RVRkJUVTRzVFVGQk1VSXNSVUZCYTBOM1FpeEpRVUZzUXl4RlFVRjFRenRCUVVOeVF5eFJRVUZKVEN4UlFVRlBZaXhOUVVGTmEwSXNSVUZCVGl4RFFVRllPMEZCUVVFc1VVRkRTVW9zVTBGQlVVUXNUVUZCUzFNc1VVRkJUQ3hIUVVGblFsUXNUVUZCUzBvc1RVRkJja0lzUjBGQk9FSm5RaXhWUVVFNVFpeEhRVUV5UXl4RFFVUjJSRHRCUVVWQlFTeHJRa0ZCWTFvc1RVRkJTMkVzVVVGQlRDeEhRVUZuUW1Jc1RVRkJTMDhzVVVGQmJrTTdPMEZCUlVFc1VVRkJTVTRzVTBGQlVTeERRVUZhTEVWQlFXVTdRVUZCUlR0QlFVTm1RU3hsUVVGUkxFTkJRVkk3UVVGRFJEczdRVUZGUkN4VFFVRkxMRWxCUVVsRExFbEJRVWtzUTBGQllpeEZRVUZuUWtFc1NVRkJTVVlzVFVGQlMycENMRXRCUVV3c1EwRkJWMFlzVFVGQkwwSXNSVUZCZFVOeFFpeEhRVUYyUXl4RlFVRTBRenRCUVVNeFF5eFZRVUZKV2l4UFFVRlBWU3hOUVVGTGFrSXNTMEZCVEN4RFFVRlhiVUlzUTBGQldDeERRVUZZTzBGQlFVRXNWVUZEU1Znc1dVRkJXVVFzUzBGQlN5eERRVUZNTEVOQlJHaENPMEZCUVVFc1ZVRkZTV0VzVlVGQlZXSXNTMEZCUzJNc1RVRkJUQ3hEUVVGWkxFTkJRVm9zUTBGR1pEdEJRVUZCTEZWQlIwbFZMRmxCUVZsa0xFMUJRVXRsTEdOQlFVd3NRMEZCYjBKaUxFTkJRWEJDTEVOQlNHaENPenRCUVV0QkxGVkJRVWxZTEdOQlFXTXNSMEZCYkVJc1JVRkJkVUk3UVVGRGNrSlZPMEZCUTBRc1QwRkdSQ3hOUVVWUExFbEJRVWxXTEdOQlFXTXNSMEZCYkVJc1JVRkJkVUk3UVVGRE5VSlNMR05CUVUxcFF5eE5RVUZPTEVOQlFXRm1MRTFCUVdJc1JVRkJiMElzUTBGQmNFSTdRVUZEUVdoQ0xHMUNRVUZYSzBJc1RVRkJXQ3hEUVVGclFtWXNUVUZCYkVJc1JVRkJlVUlzUTBGQmVrSTdRVUZEUmp0QlFVTkRMRTlCU2swc1RVRkpRU3hKUVVGSlZpeGpRVUZqTEVkQlFXeENMRVZCUVhWQ08wRkJRelZDVWl4alFVRk5hVU1zVFVGQlRpeERRVUZoWml4TlFVRmlMRVZCUVc5Q0xFTkJRWEJDTEVWQlFYVkNSU3hQUVVGMlFqdEJRVU5CYkVJc2JVSkJRVmNyUWl4TlFVRllMRU5CUVd0Q1ppeE5RVUZzUWl4RlFVRjVRaXhEUVVGNlFpeEZRVUUwUW1Fc1UwRkJOVUk3UVVGRFFXSTdRVUZEUkN4UFFVcE5MRTFCU1VFc1NVRkJTVllzWTBGQll5eEpRVUZzUWl4RlFVRjNRanRCUVVNM1FpeFpRVUZKTUVJc2IwSkJRVzlDYWtJc1RVRkJTMnBDTEV0QlFVd3NRMEZCVjIxQ0xFbEJRVWtzUTBGQlppeEpRVUZ2UWtZc1RVRkJTMnBDTEV0QlFVd3NRMEZCVjIxQ0xFbEJRVWtzUTBGQlppeEZRVUZyUWl4RFFVRnNRaXhEUVVGd1FpeEhRVUV5UXl4SlFVRnVSVHRCUVVOQkxGbEJRVWxsTEhOQ1FVRnpRaXhIUVVFeFFpeEZRVUVyUWp0QlFVTTNRbkJDTEhkQ1FVRmpMRWxCUVdRN1FVRkRSQ3hUUVVaRUxFMUJSVThzU1VGQlNXOUNMSE5DUVVGelFpeEhRVUV4UWl4RlFVRXJRanRCUVVOd1EyNUNMSEZDUVVGWExFbEJRVmc3UVVGRFJEdEJRVU5HTzBGQlEwWTdRVUZEUmpzN1FVRkZSRHRCUVVOQkxFMUJRVWxFTEZkQlFVb3NSVUZCYVVJN1FVRkRaaXhYUVVGUExFTkJRVU5rTEUxQlFVMUJMRTFCUVUxR0xFMUJRVTRzUjBGQlpTeERRVUZ5UWl4RFFVRlNMRVZCUVdsRE8wRkJReTlDUlN4WlFVRk5iVU1zUjBGQlRqdEJRVU5CYWtNc2FVSkJRVmRwUXl4SFFVRllPMEZCUTBRN1FVRkRSaXhIUVV4RUxFMUJTMDhzU1VGQlNYQkNMRkZCUVVvc1JVRkJZenRCUVVOdVFtWXNWVUZCVFc5RExFbEJRVTRzUTBGQlZ5eEZRVUZZTzBGQlEwRnNReXhsUVVGWGEwTXNTVUZCV0N4RFFVRm5RaXhKUVVGb1FqdEJRVU5FTzBGQlEwUXNUMEZCU3l4SlFVRkpReXhMUVVGTExFTkJRV1FzUlVGQmFVSkJMRXRCUVV0eVF5eE5RVUZOUml4TlFVRk9MRWRCUVdVc1EwRkJja01zUlVGQmQwTjFReXhKUVVGNFF5eEZRVUU0UXp0QlFVTTFRM0pETEZWQlFVMXhReXhGUVVGT0xFbEJRVmx5UXl4TlFVRk5jVU1zUlVGQlRpeEpRVUZaYmtNc1YwRkJWMjFETEVWQlFWZ3NRMEZCZUVJN1FVRkRSRHRCUVVORUxGTkJRVTl5UXl4TlFVRk5jME1zU1VGQlRpeERRVUZYTEVWQlFWZ3NRMEZCVUR0QlFVTkVPenRCUVVWRU8wRkJRMDhzVTBGQlV6bERMRmxCUVZRc1EwRkJjMEpGTEU5QlFYUkNMRVZCUVN0Q1F5eFBRVUV2UWl4RlFVRjNRenRCUVVNM1F5eE5RVUZKTEU5QlFVOUVMRTlCUVZBc1MwRkJiVUlzVVVGQmRrSXNSVUZCYVVNN1FVRkRMMEpCTEdOQlFWVXNkMFZCUVZkQkxFOUJRVmdzUTBGQlZqdEJRVU5FT3p0QlFVVkVMRTFCUVVrMlF5eGxRVUZsTEVOQlFXNUNPMEZCUTBFc1YwRkJVME1zV1VGQlZDeEhRVUYzUWp0QlFVTjBRaXhSUVVGSlF5eFJRVUZSTDBNc1VVRkJVVFpETEdOQlFWSXNRMEZCV2p0QlFVTkJMRkZCUVVrc1EwRkJRMFVzUzBGQlRDeEZRVUZaTzBGQlExWXNZVUZCVHpsRExGRkJRVkVyUXl4UlFVRlNMRVZCUVZBN1FVRkRSRHM3UVVGRlJDOURMRmxCUVZGblJDeFJRVUZTTEVOQlFXbENSaXhMUVVGcVFpeEZRVUYzUWl4VlFVRlRSeXhIUVVGVUxFVkJRV05ETEVsQlFXUXNSVUZCYjBJN1FVRkRNVU1zVlVGQlNVUXNSMEZCU2l4RlFVRlRPMEZCUTFBc1pVRkJUMnBFTEZGQlFWRXJReXhSUVVGU0xFTkJRV2xDUlN4SFFVRnFRaXhEUVVGUU8wRkJRMFE3TzBGQlJVUXNWVUZCU1VVc2FVSkJRV2xDZGtRc1YwRkJWM05FTEVsQlFWZ3NSVUZCYVVKS0xFdEJRV3BDTEVWQlFYZENPVU1zVDBGQmVFSXNRMEZCY2tJN1FVRkRRVUVzWTBGQlVXOUVMRTlCUVZJc1EwRkJaMEpPTEV0QlFXaENMRVZCUVhWQ1N5eGpRVUYyUWl4RlFVRjFReXhWUVVGVFJpeEhRVUZVTEVWQlFXTTdRVUZEYmtRc1dVRkJTVUVzUjBGQlNpeEZRVUZUTzBGQlExQXNhVUpCUVU5cVJDeFJRVUZSSzBNc1VVRkJVaXhEUVVGcFFrVXNSMEZCYWtJc1EwRkJVRHRCUVVORU96dEJRVVZFU2p0QlFVTkVMRTlCVGtRN1FVRlBSQ3hMUVdKRU8wRkJZMFE3UVVGRFJFRTdRVUZEUkNJc0ltWnBiR1VpT2lKaGNIQnNlUzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN2NHRnljMlZRWVhSamFIMGdabkp2YlNBbkxpOXdZWEp6WlNjN1hHNXBiWEJ2Y25RZ1pHbHpkR0Z1WTJWSmRHVnlZWFJ2Y2lCbWNtOXRJQ2N1TGk5MWRHbHNMMlJwYzNSaGJtTmxMV2wwWlhKaGRHOXlKenRjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGd2NHeDVVR0YwWTJnb2MyOTFjbU5sTENCMWJtbEVhV1ptTENCdmNIUnBiMjV6SUQwZ2UzMHBJSHRjYmlBZ2FXWWdLSFI1Y0dWdlppQjFibWxFYVdabUlEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJSFZ1YVVScFptWWdQU0J3WVhKelpWQmhkR05vS0hWdWFVUnBabVlwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLRUZ5Y21GNUxtbHpRWEp5WVhrb2RXNXBSR2xtWmlrcElIdGNiaUFnSUNCcFppQW9kVzVwUkdsbVppNXNaVzVuZEdnZ1BpQXhLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMkZ3Y0d4NVVHRjBZMmdnYjI1c2VTQjNiM0pyY3lCM2FYUm9JR0VnYzJsdVoyeGxJR2x1Y0hWMExpY3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIVnVhVVJwWm1ZZ1BTQjFibWxFYVdabVd6QmRPMXh1SUNCOVhHNWNiaUFnTHk4Z1FYQndiSGtnZEdobElHUnBabVlnZEc4Z2RHaGxJR2x1Y0hWMFhHNGdJR3hsZENCc2FXNWxjeUE5SUhOdmRYSmpaUzV6Y0d4cGRDZ3ZYRnh5WEZ4dWZGdGNYRzVjWEhaY1hHWmNYSEpjWEhnNE5WMHZLU3hjYmlBZ0lDQWdJR1JsYkdsdGFYUmxjbk1nUFNCemIzVnlZMlV1YldGMFkyZ29MMXhjY2x4Y2JueGJYRnh1WEZ4MlhGeG1YRnh5WEZ4NE9EVmRMMmNwSUh4OElGdGRMRnh1SUNBZ0lDQWdhSFZ1YTNNZ1BTQjFibWxFYVdabUxtaDFibXR6TEZ4dVhHNGdJQ0FnSUNCamIyMXdZWEpsVEdsdVpTQTlJRzl3ZEdsdmJuTXVZMjl0Y0dGeVpVeHBibVVnZkh3Z0tDaHNhVzVsVG5WdFltVnlMQ0JzYVc1bExDQnZjR1Z5WVhScGIyNHNJSEJoZEdOb1EyOXVkR1Z1ZENrZ1BUNGdiR2x1WlNBOVBUMGdjR0YwWTJoRGIyNTBaVzUwS1N4Y2JpQWdJQ0FnSUdWeWNtOXlRMjkxYm5RZ1BTQXdMRnh1SUNBZ0lDQWdablY2ZWtaaFkzUnZjaUE5SUc5d2RHbHZibk11Wm5WNmVrWmhZM1J2Y2lCOGZDQXdMRnh1SUNBZ0lDQWdiV2x1VEdsdVpTQTlJREFzWEc0Z0lDQWdJQ0J2Wm1aelpYUWdQU0F3TEZ4dVhHNGdJQ0FnSUNCeVpXMXZkbVZGVDBaT1RDeGNiaUFnSUNBZ0lHRmtaRVZQUms1TU8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGFHVmphM01nYVdZZ2RHaGxJR2gxYm1zZ1pYaGhZM1JzZVNCbWFYUnpJRzl1SUhSb1pTQndjbTkyYVdSbFpDQnNiMk5oZEdsdmJseHVJQ0FnS2k5Y2JpQWdablZ1WTNScGIyNGdhSFZ1YTBacGRITW9hSFZ1YXl3Z2RHOVFiM01wSUh0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ01Ec2dhaUE4SUdoMWJtc3ViR2x1WlhNdWJHVnVaM1JvT3lCcUt5c3BJSHRjYmlBZ0lDQWdJR3hsZENCc2FXNWxJRDBnYUhWdWF5NXNhVzVsYzF0cVhTeGNiaUFnSUNBZ0lDQWdJQ0J2Y0dWeVlYUnBiMjRnUFNCc2FXNWxXekJkTEZ4dUlDQWdJQ0FnSUNBZ0lHTnZiblJsYm5RZ1BTQnNhVzVsTG5OMVluTjBjaWd4S1R0Y2JseHVJQ0FnSUNBZ2FXWWdLRzl3WlhKaGRHbHZiaUE5UFQwZ0p5QW5JSHg4SUc5d1pYSmhkR2x2YmlBOVBUMGdKeTBuS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRU52Ym5SbGVIUWdjMkZ1YVhSNUlHTm9aV05yWEc0Z0lDQWdJQ0FnSUdsbUlDZ2hZMjl0Y0dGeVpVeHBibVVvZEc5UWIzTWdLeUF4TENCc2FXNWxjMXQwYjFCdmMxMHNJRzl3WlhKaGRHbHZiaXdnWTI5dWRHVnVkQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQmxjbkp2Y2tOdmRXNTBLeXM3WEc1Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvWlhKeWIzSkRiM1Z1ZENBK0lHWjFlbnBHWVdOMGIzSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdkRzlRYjNNckt6dGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZEhKMVpUdGNiaUFnZlZ4dVhHNGdJQzh2SUZObFlYSmphQ0JpWlhOMElHWnBkQ0J2Wm1aelpYUnpJR1p2Y2lCbFlXTm9JR2gxYm1zZ1ltRnpaV1FnYjI0Z2RHaGxJSEJ5WlhacGIzVnpJRzl1WlhOY2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JvZFc1cmN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR3hsZENCb2RXNXJJRDBnYUhWdWEzTmJhVjBzWEc0Z0lDQWdJQ0FnSUcxaGVFeHBibVVnUFNCc2FXNWxjeTVzWlc1bmRHZ2dMU0JvZFc1ckxtOXNaRXhwYm1WekxGeHVJQ0FnSUNBZ0lDQnNiMk5oYkU5bVpuTmxkQ0E5SURBc1hHNGdJQ0FnSUNBZ0lIUnZVRzl6SUQwZ2IyWm1jMlYwSUNzZ2FIVnVheTV2YkdSVGRHRnlkQ0F0SURFN1hHNWNiaUFnSUNCc1pYUWdhWFJsY21GMGIzSWdQU0JrYVhOMFlXNWpaVWwwWlhKaGRHOXlLSFJ2VUc5ekxDQnRhVzVNYVc1bExDQnRZWGhNYVc1bEtUdGNibHh1SUNBZ0lHWnZjaUFvT3lCc2IyTmhiRTltWm5ObGRDQWhQVDBnZFc1a1pXWnBibVZrT3lCc2IyTmhiRTltWm5ObGRDQTlJR2wwWlhKaGRHOXlLQ2twSUh0Y2JpQWdJQ0FnSUdsbUlDaG9kVzVyUm1sMGN5aG9kVzVyTENCMGIxQnZjeUFySUd4dlkyRnNUMlptYzJWMEtTa2dlMXh1SUNBZ0lDQWdJQ0JvZFc1ckxtOW1abk5sZENBOUlHOW1abk5sZENBclBTQnNiMk5oYkU5bVpuTmxkRHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLR3h2WTJGc1QyWm1jMlYwSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCVFpYUWdiRzkzWlhJZ2RHVjRkQ0JzYVcxcGRDQjBieUJsYm1RZ2IyWWdkR2hsSUdOMWNuSmxiblFnYUhWdWF5d2djMjhnYm1WNGRDQnZibVZ6SUdSdmJpZDBJSFJ5ZVZ4dUlDQWdJQzh2SUhSdklHWnBkQ0J2ZG1WeUlHRnNjbVZoWkhrZ2NHRjBZMmhsWkNCMFpYaDBYRzRnSUNBZ2JXbHVUR2x1WlNBOUlHaDFibXN1YjJabWMyVjBJQ3NnYUhWdWF5NXZiR1JUZEdGeWRDQXJJR2gxYm1zdWIyeGtUR2x1WlhNN1hHNGdJSDFjYmx4dUlDQXZMeUJCY0hCc2VTQndZWFJqYUNCb2RXNXJjMXh1SUNCc1pYUWdaR2xtWms5bVpuTmxkQ0E5SURBN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYUhWdWEzTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0JzWlhRZ2FIVnVheUE5SUdoMWJtdHpXMmxkTEZ4dUlDQWdJQ0FnSUNCMGIxQnZjeUE5SUdoMWJtc3ViMnhrVTNSaGNuUWdLeUJvZFc1ckxtOW1abk5sZENBcklHUnBabVpQWm1aelpYUWdMU0F4TzF4dUlDQWdJR1JwWm1aUFptWnpaWFFnS3owZ2FIVnVheTV1WlhkTWFXNWxjeUF0SUdoMWJtc3ViMnhrVEdsdVpYTTdYRzVjYmlBZ0lDQnBaaUFvZEc5UWIzTWdQQ0F3S1NCN0lDOHZJRU55WldGMGFXNW5JR0VnYm1WM0lHWnBiR1ZjYmlBZ0lDQWdJSFJ2VUc5eklEMGdNRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnTURzZ2FpQThJR2gxYm1zdWJHbHVaWE11YkdWdVozUm9PeUJxS3lzcElIdGNiaUFnSUNBZ0lHeGxkQ0JzYVc1bElEMGdhSFZ1YXk1c2FXNWxjMXRxWFN4Y2JpQWdJQ0FnSUNBZ0lDQnZjR1Z5WVhScGIyNGdQU0JzYVc1bFd6QmRMRnh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmxiblFnUFNCc2FXNWxMbk4xWW5OMGNpZ3hLU3hjYmlBZ0lDQWdJQ0FnSUNCa1pXeHBiV2wwWlhJZ1BTQm9kVzVyTG14cGJtVmtaV3hwYldsMFpYSnpXMnBkTzF4dVhHNGdJQ0FnSUNCcFppQW9iM0JsY21GMGFXOXVJRDA5UFNBbklDY3BJSHRjYmlBZ0lDQWdJQ0FnZEc5UWIzTXJLenRjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvYjNCbGNtRjBhVzl1SUQwOVBTQW5MU2NwSUh0Y2JpQWdJQ0FnSUNBZ2JHbHVaWE11YzNCc2FXTmxLSFJ2VUc5ekxDQXhLVHRjYmlBZ0lDQWdJQ0FnWkdWc2FXMXBkR1Z5Y3k1emNHeHBZMlVvZEc5UWIzTXNJREVwTzF4dUlDQWdJQ0FnTHlvZ2FYTjBZVzVpZFd3Z2FXZHViM0psSUdWc2MyVWdLaTljYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvYjNCbGNtRjBhVzl1SUQwOVBTQW5LeWNwSUh0Y2JpQWdJQ0FnSUNBZ2JHbHVaWE11YzNCc2FXTmxLSFJ2VUc5ekxDQXdMQ0JqYjI1MFpXNTBLVHRjYmlBZ0lDQWdJQ0FnWkdWc2FXMXBkR1Z5Y3k1emNHeHBZMlVvZEc5UWIzTXNJREFzSUdSbGJHbHRhWFJsY2lrN1hHNGdJQ0FnSUNBZ0lIUnZVRzl6S3lzN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHOXdaWEpoZEdsdmJpQTlQVDBnSjF4Y1hGd25LU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQndjbVYyYVc5MWMwOXdaWEpoZEdsdmJpQTlJR2gxYm1zdWJHbHVaWE5iYWlBdElERmRJRDhnYUhWdWF5NXNhVzVsYzF0cUlDMGdNVjFiTUYwZ09pQnVkV3hzTzF4dUlDQWdJQ0FnSUNCcFppQW9jSEpsZG1sdmRYTlBjR1Z5WVhScGIyNGdQVDA5SUNjckp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGJXOTJaVVZQUms1TUlEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaHdjbVYyYVc5MWMwOXdaWEpoZEdsdmJpQTlQVDBnSnkwbktTQjdYRzRnSUNBZ0lDQWdJQ0FnWVdSa1JVOUdUa3dnUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHk4Z1NHRnVaR3hsSUVWUFJrNU1JR2x1YzJWeWRHbHZiaTl5WlcxdmRtRnNYRzRnSUdsbUlDaHlaVzF2ZG1WRlQwWk9UQ2tnZTF4dUlDQWdJSGRvYVd4bElDZ2hiR2x1WlhOYmJHbHVaWE11YkdWdVozUm9JQzBnTVYwcElIdGNiaUFnSUNBZ0lHeHBibVZ6TG5CdmNDZ3BPMXh1SUNBZ0lDQWdaR1ZzYVcxcGRHVnljeTV3YjNBb0tUdGNiaUFnSUNCOVhHNGdJSDBnWld4elpTQnBaaUFvWVdSa1JVOUdUa3dwSUh0Y2JpQWdJQ0JzYVc1bGN5NXdkWE5vS0NjbktUdGNiaUFnSUNCa1pXeHBiV2wwWlhKekxuQjFjMmdvSjF4Y2JpY3BPMXh1SUNCOVhHNGdJR1p2Y2lBb2JHVjBJRjlySUQwZ01Ec2dYMnNnUENCc2FXNWxjeTVzWlc1bmRHZ2dMU0F4T3lCZmF5c3JLU0I3WEc0Z0lDQWdiR2x1WlhOYlgydGRJRDBnYkdsdVpYTmJYMnRkSUNzZ1pHVnNhVzFwZEdWeWMxdGZhMTA3WEc0Z0lIMWNiaUFnY21WMGRYSnVJR3hwYm1WekxtcHZhVzRvSnljcE8xeHVmVnh1WEc0dkx5QlhjbUZ3Y0dWeUlIUm9ZWFFnYzNWd2NHOXlkSE1nYlhWc2RHbHdiR1VnWm1sc1pTQndZWFJqYUdWeklIWnBZU0JqWVd4c1ltRmphM011WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWVhCd2JIbFFZWFJqYUdWektIVnVhVVJwWm1Zc0lHOXdkR2x2Ym5NcElIdGNiaUFnYVdZZ0tIUjVjR1Z2WmlCMWJtbEVhV1ptSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lIVnVhVVJwWm1ZZ1BTQndZWEp6WlZCaGRHTm9LSFZ1YVVScFptWXBPMXh1SUNCOVhHNWNiaUFnYkdWMElHTjFjbkpsYm5SSmJtUmxlQ0E5SURBN1hHNGdJR1oxYm1OMGFXOXVJSEJ5YjJObGMzTkpibVJsZUNncElIdGNiaUFnSUNCc1pYUWdhVzVrWlhnZ1BTQjFibWxFYVdabVcyTjFjbkpsYm5SSmJtUmxlQ3NyWFR0Y2JpQWdJQ0JwWmlBb0lXbHVaR1Y0S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYjNCMGFXOXVjeTVqYjIxd2JHVjBaU2dwTzF4dUlDQWdJSDFjYmx4dUlDQWdJRzl3ZEdsdmJuTXViRzloWkVacGJHVW9hVzVrWlhnc0lHWjFibU4wYVc5dUtHVnljaXdnWkdGMFlTa2dlMXh1SUNBZ0lDQWdhV1lnS0dWeWNpa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiM0IwYVc5dWN5NWpiMjF3YkdWMFpTaGxjbklwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCc1pYUWdkWEJrWVhSbFpFTnZiblJsYm5RZ1BTQmhjSEJzZVZCaGRHTm9LR1JoZEdFc0lHbHVaR1Y0TENCdmNIUnBiMjV6S1R0Y2JpQWdJQ0FnSUc5d2RHbHZibk11Y0dGMFkyaGxaQ2hwYm1SbGVDd2dkWEJrWVhSbFpFTnZiblJsYm5Rc0lHWjFibU4wYVc5dUtHVnljaWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9aWEp5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHOXdkR2x2Ym5NdVkyOXRjR3hsZEdVb1pYSnlLVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lIQnliMk5sYzNOSmJtUmxlQ2dwTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlNrN1hHNGdJSDFjYmlBZ2NISnZZMlZ6YzBsdVpHVjRLQ2s3WEc1OVhHNGlYWDA9XG5cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8ndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9wYXJzZVBhdGNoID0gcGFyc2VQYXRjaDtcblx0ZnVuY3Rpb24gcGFyc2VQYXRjaCh1bmlEaWZmKSB7XG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL29wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG5cdCAgdmFyIGRpZmZzdHIgPSB1bmlEaWZmLnNwbGl0KC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS8pLFxuXHQgICAgICBkZWxpbWl0ZXJzID0gdW5pRGlmZi5tYXRjaCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vZykgfHwgW10sXG5cdCAgICAgIGxpc3QgPSBbXSxcblx0ICAgICAgaSA9IDA7XG5cblx0ICBmdW5jdGlvbiBwYXJzZUluZGV4KCkge1xuXHQgICAgdmFyIGluZGV4ID0ge307XG5cdCAgICBsaXN0LnB1c2goaW5kZXgpO1xuXG5cdCAgICAvLyBQYXJzZSBkaWZmIG1ldGFkYXRhXG5cdCAgICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG5cdCAgICAgIHZhciBsaW5lID0gZGlmZnN0cltpXTtcblxuXHQgICAgICAvLyBGaWxlIGhlYWRlciBmb3VuZCwgZW5kIHBhcnNpbmcgZGlmZiBtZXRhZGF0YVxuXHQgICAgICBpZiAoL14oXFwtXFwtXFwtfFxcK1xcK1xcK3xAQClcXHMvLnRlc3QobGluZSkpIHtcblx0ICAgICAgICBicmVhaztcblx0ICAgICAgfVxuXG5cdCAgICAgIC8vIERpZmYgaW5kZXhcblx0ICAgICAgdmFyIGhlYWRlciA9IC9eKD86SW5kZXg6fGRpZmYoPzogLXIgXFx3KykrKVxccysoLis/KVxccyokLy5leGVjKGxpbmUpO1xuXHQgICAgICBpZiAoaGVhZGVyKSB7XG5cdCAgICAgICAgaW5kZXguaW5kZXggPSBoZWFkZXJbMV07XG5cdCAgICAgIH1cblxuXHQgICAgICBpKys7XG5cdCAgICB9XG5cblx0ICAgIC8vIFBhcnNlIGZpbGUgaGVhZGVycyBpZiB0aGV5IGFyZSBkZWZpbmVkLiBVbmlmaWVkIGRpZmYgcmVxdWlyZXMgdGhlbSwgYnV0XG5cdCAgICAvLyB0aGVyZSdzIG5vIHRlY2huaWNhbCBpc3N1ZXMgdG8gaGF2ZSBhbiBpc29sYXRlZCBodW5rIHdpdGhvdXQgZmlsZSBoZWFkZXJcblx0ICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG5cdCAgICBwYXJzZUZpbGVIZWFkZXIoaW5kZXgpO1xuXG5cdCAgICAvLyBQYXJzZSBodW5rc1xuXHQgICAgaW5kZXguaHVua3MgPSBbXTtcblxuXHQgICAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuXHQgICAgICB2YXIgX2xpbmUgPSBkaWZmc3RyW2ldO1xuXG5cdCAgICAgIGlmICgvXihJbmRleDp8ZGlmZnxcXC1cXC1cXC18XFwrXFwrXFwrKVxccy8udGVzdChfbGluZSkpIHtcblx0ICAgICAgICBicmVhaztcblx0ICAgICAgfSBlbHNlIGlmICgvXkBALy50ZXN0KF9saW5lKSkge1xuXHQgICAgICAgIGluZGV4Lmh1bmtzLnB1c2gocGFyc2VIdW5rKCkpO1xuXHQgICAgICB9IGVsc2UgaWYgKF9saW5lICYmIG9wdGlvbnMuc3RyaWN0KSB7XG5cdCAgICAgICAgLy8gSWdub3JlIHVuZXhwZWN0ZWQgY29udGVudCB1bmxlc3MgaW4gc3RyaWN0IG1vZGVcblx0ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGluZSAnICsgKGkgKyAxKSArICcgJyArIEpTT04uc3RyaW5naWZ5KF9saW5lKSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgaSsrO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgLy8gUGFyc2VzIHRoZSAtLS0gYW5kICsrKyBoZWFkZXJzLCBpZiBub25lIGFyZSBmb3VuZCwgbm8gbGluZXNcblx0ICAvLyBhcmUgY29uc3VtZWQuXG5cdCAgZnVuY3Rpb24gcGFyc2VGaWxlSGVhZGVyKGluZGV4KSB7XG5cdCAgICB2YXIgaGVhZGVyUGF0dGVybiA9IC9eKC0tLXxcXCtcXCtcXCspXFxzKyhbXFxTIF0qKSg/OlxcdCguKj8pXFxzKik/JC87XG5cdCAgICB2YXIgZmlsZUhlYWRlciA9IGhlYWRlclBhdHRlcm4uZXhlYyhkaWZmc3RyW2ldKTtcblx0ICAgIGlmIChmaWxlSGVhZGVyKSB7XG5cdCAgICAgIHZhciBrZXlQcmVmaXggPSBmaWxlSGVhZGVyWzFdID09PSAnLS0tJyA/ICdvbGQnIDogJ25ldyc7XG5cdCAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGVIZWFkZXJbMl0ucmVwbGFjZSgvXFxcXFxcXFwvZywgJ1xcXFwnKTtcblx0ICAgICAgaWYgKC9eXCIuKlwiJC8udGVzdChmaWxlTmFtZSkpIHtcblx0ICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cigxLCBmaWxlTmFtZS5sZW5ndGggLSAyKTtcblx0ICAgICAgfVxuXHQgICAgICBpbmRleFtrZXlQcmVmaXggKyAnRmlsZU5hbWUnXSA9IGZpbGVOYW1lO1xuXHQgICAgICBpbmRleFtrZXlQcmVmaXggKyAnSGVhZGVyJ10gPSBmaWxlSGVhZGVyWzNdO1xuXG5cdCAgICAgIGkrKztcblx0ICAgIH1cblx0ICB9XG5cblx0ICAvLyBQYXJzZXMgYSBodW5rXG5cdCAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIGh1bmsuXG5cdCAgZnVuY3Rpb24gcGFyc2VIdW5rKCkge1xuXHQgICAgdmFyIGNodW5rSGVhZGVySW5kZXggPSBpLFxuXHQgICAgICAgIGNodW5rSGVhZGVyTGluZSA9IGRpZmZzdHJbaSsrXSxcblx0ICAgICAgICBjaHVua0hlYWRlciA9IGNodW5rSGVhZGVyTGluZS5zcGxpdCgvQEAgLShcXGQrKSg/OiwoXFxkKykpPyBcXCsoXFxkKykoPzosKFxcZCspKT8gQEAvKTtcblxuXHQgICAgdmFyIGh1bmsgPSB7XG5cdCAgICAgIG9sZFN0YXJ0OiArY2h1bmtIZWFkZXJbMV0sXG5cdCAgICAgIG9sZExpbmVzOiArY2h1bmtIZWFkZXJbMl0gfHwgMSxcblx0ICAgICAgbmV3U3RhcnQ6ICtjaHVua0hlYWRlclszXSxcblx0ICAgICAgbmV3TGluZXM6ICtjaHVua0hlYWRlcls0XSB8fCAxLFxuXHQgICAgICBsaW5lczogW10sXG5cdCAgICAgIGxpbmVkZWxpbWl0ZXJzOiBbXVxuXHQgICAgfTtcblxuXHQgICAgdmFyIGFkZENvdW50ID0gMCxcblx0ICAgICAgICByZW1vdmVDb3VudCA9IDA7XG5cdCAgICBmb3IgKDsgaSA8IGRpZmZzdHIubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgLy8gTGluZXMgc3RhcnRpbmcgd2l0aCAnLS0tJyBjb3VsZCBiZSBtaXN0YWtlbiBmb3IgdGhlIFwicmVtb3ZlIGxpbmVcIiBvcGVyYXRpb25cblx0ICAgICAgLy8gQnV0IHRoZXkgY291bGQgYmUgdGhlIGhlYWRlciBmb3IgdGhlIG5leHQgZmlsZS4gVGhlcmVmb3JlIHBydW5lIHN1Y2ggY2FzZXMgb3V0LlxuXHQgICAgICBpZiAoZGlmZnN0cltpXS5pbmRleE9mKCctLS0gJykgPT09IDAgJiYgaSArIDIgPCBkaWZmc3RyLmxlbmd0aCAmJiBkaWZmc3RyW2kgKyAxXS5pbmRleE9mKCcrKysgJykgPT09IDAgJiYgZGlmZnN0cltpICsgMl0uaW5kZXhPZignQEAnKSA9PT0gMCkge1xuXHQgICAgICAgIGJyZWFrO1xuXHQgICAgICB9XG5cdCAgICAgIHZhciBvcGVyYXRpb24gPSBkaWZmc3RyW2ldWzBdO1xuXG5cdCAgICAgIGlmIChvcGVyYXRpb24gPT09ICcrJyB8fCBvcGVyYXRpb24gPT09ICctJyB8fCBvcGVyYXRpb24gPT09ICcgJyB8fCBvcGVyYXRpb24gPT09ICdcXFxcJykge1xuXHQgICAgICAgIGh1bmsubGluZXMucHVzaChkaWZmc3RyW2ldKTtcblx0ICAgICAgICBodW5rLmxpbmVkZWxpbWl0ZXJzLnB1c2goZGVsaW1pdGVyc1tpXSB8fCAnXFxuJyk7XG5cblx0ICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnKycpIHtcblx0ICAgICAgICAgIGFkZENvdW50Kys7XG5cdCAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICctJykge1xuXHQgICAgICAgICAgcmVtb3ZlQ291bnQrKztcblx0ICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG5cdCAgICAgICAgICBhZGRDb3VudCsrO1xuXHQgICAgICAgICAgcmVtb3ZlQ291bnQrKztcblx0ICAgICAgICB9XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgLy8gSGFuZGxlIHRoZSBlbXB0eSBibG9jayBjb3VudCBjYXNlXG5cdCAgICBpZiAoIWFkZENvdW50ICYmIGh1bmsubmV3TGluZXMgPT09IDEpIHtcblx0ICAgICAgaHVuay5uZXdMaW5lcyA9IDA7XG5cdCAgICB9XG5cdCAgICBpZiAoIXJlbW92ZUNvdW50ICYmIGh1bmsub2xkTGluZXMgPT09IDEpIHtcblx0ICAgICAgaHVuay5vbGRMaW5lcyA9IDA7XG5cdCAgICB9XG5cblx0ICAgIC8vIFBlcmZvcm0gb3B0aW9uYWwgc2FuaXR5IGNoZWNraW5nXG5cdCAgICBpZiAob3B0aW9ucy5zdHJpY3QpIHtcblx0ICAgICAgaWYgKGFkZENvdW50ICE9PSBodW5rLm5ld0xpbmVzKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRlZCBsaW5lIGNvdW50IGRpZCBub3QgbWF0Y2ggZm9yIGh1bmsgYXQgbGluZSAnICsgKGNodW5rSGVhZGVySW5kZXggKyAxKSk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHJlbW92ZUNvdW50ICE9PSBodW5rLm9sZExpbmVzKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZW1vdmVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gaHVuaztcblx0ICB9XG5cblx0ICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG5cdCAgICBwYXJzZUluZGV4KCk7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIGxpc3Q7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5d1lYUmphQzl3WVhKelpTNXFjeUpkTENKdVlXMWxjeUk2V3lKd1lYSnpaVkJoZEdOb0lpd2lkVzVwUkdsbVppSXNJbTl3ZEdsdmJuTWlMQ0prYVdabWMzUnlJaXdpYzNCc2FYUWlMQ0prWld4cGJXbDBaWEp6SWl3aWJXRjBZMmdpTENKc2FYTjBJaXdpYVNJc0luQmhjbk5sU1c1a1pYZ2lMQ0pwYm1SbGVDSXNJbkIxYzJnaUxDSnNaVzVuZEdnaUxDSnNhVzVsSWl3aWRHVnpkQ0lzSW1obFlXUmxjaUlzSW1WNFpXTWlMQ0p3WVhKelpVWnBiR1ZJWldGa1pYSWlMQ0pvZFc1cmN5SXNJbkJoY25ObFNIVnVheUlzSW5OMGNtbGpkQ0lzSWtWeWNtOXlJaXdpU2xOUFRpSXNJbk4wY21sdVoybG1lU0lzSW1obFlXUmxjbEJoZEhSbGNtNGlMQ0ptYVd4bFNHVmhaR1Z5SWl3aWEyVjVVSEpsWm1sNElpd2labWxzWlU1aGJXVWlMQ0p5WlhCc1lXTmxJaXdpYzNWaWMzUnlJaXdpWTJoMWJtdElaV0ZrWlhKSmJtUmxlQ0lzSW1Ob2RXNXJTR1ZoWkdWeVRHbHVaU0lzSW1Ob2RXNXJTR1ZoWkdWeUlpd2lhSFZ1YXlJc0ltOXNaRk4wWVhKMElpd2liMnhrVEdsdVpYTWlMQ0p1WlhkVGRHRnlkQ0lzSW01bGQweHBibVZ6SWl3aWJHbHVaWE1pTENKc2FXNWxaR1ZzYVcxcGRHVnljeUlzSW1Ga1pFTnZkVzUwSWl3aWNtVnRiM1psUTI5MWJuUWlMQ0pwYm1SbGVFOW1JaXdpYjNCbGNtRjBhVzl1SWwwc0ltMWhjSEJwYm1keklqb2lPenM3WjBOQlFXZENRU3hWTEVkQlFVRkJMRlU3UVVGQlZDeFRRVUZUUVN4VlFVRlVMRU5CUVc5Q1F5eFBRVUZ3UWl4RlFVRXlRenRCUVVGQkxITkVRVUZrUXl4UFFVRmpMSFZGUVVGS0xFVkJRVWs3TzBGQlEyaEVMRTFCUVVsRExGVkJRVlZHTEZGQlFWRkhMRXRCUVZJc1EwRkJZeXh4UWtGQlpDeERRVUZrTzBGQlFVRXNUVUZEU1VNc1lVRkJZVW9zVVVGQlVVc3NTMEZCVWl4RFFVRmpMSE5DUVVGa0xFdEJRWGxETEVWQlJERkVPMEZCUVVFc1RVRkZTVU1zVDBGQlR5eEZRVVpZTzBGQlFVRXNUVUZIU1VNc1NVRkJTU3hEUVVoU096dEJRVXRCTEZkQlFWTkRMRlZCUVZRc1IwRkJjMEk3UVVGRGNFSXNVVUZCU1VNc1VVRkJVU3hGUVVGYU8wRkJRMEZJTEZOQlFVdEpMRWxCUVV3c1EwRkJWVVFzUzBGQlZqczdRVUZGUVR0QlFVTkJMRmRCUVU5R0xFbEJRVWxNTEZGQlFWRlRMRTFCUVc1Q0xFVkJRVEpDTzBGQlEzcENMRlZCUVVsRExFOUJRVTlXTEZGQlFWRkxMRU5CUVZJc1EwRkJXRHM3UVVGRlFUdEJRVU5CTEZWQlFVa3NkMEpCUVhkQ1RTeEpRVUY0UWl4RFFVRTJRa1FzU1VGQk4wSXNRMEZCU2l4RlFVRjNRenRCUVVOMFF6dEJRVU5FT3p0QlFVVkVPMEZCUTBFc1ZVRkJTVVVzVTBGQlZTd3dRMEZCUkN4RFFVRTJRME1zU1VGQk4wTXNRMEZCYTBSSUxFbEJRV3hFTEVOQlFXSTdRVUZEUVN4VlFVRkpSU3hOUVVGS0xFVkJRVms3UVVGRFZrd3NZMEZCVFVFc1MwRkJUaXhIUVVGalN5eFBRVUZQTEVOQlFWQXNRMEZCWkR0QlFVTkVPenRCUVVWRVVEdEJRVU5FT3p0QlFVVkVPMEZCUTBFN1FVRkRRVk1zYjBKQlFXZENVQ3hMUVVGb1FqdEJRVU5CVHl4dlFrRkJaMEpRTEV0QlFXaENPenRCUVVWQk8wRkJRMEZCTEZWQlFVMVJMRXRCUVU0c1IwRkJZeXhGUVVGa096dEJRVVZCTEZkQlFVOVdMRWxCUVVsTUxGRkJRVkZUTEUxQlFXNUNMRVZCUVRKQ08wRkJRM3BDTEZWQlFVbERMRkZCUVU5V0xGRkJRVkZMTEVOQlFWSXNRMEZCV0RzN1FVRkZRU3hWUVVGSkxHbERRVUZwUTAwc1NVRkJha01zUTBGQmMwTkVMRXRCUVhSRExFTkJRVW9zUlVGQmFVUTdRVUZETDBNN1FVRkRSQ3hQUVVaRUxFMUJSVThzU1VGQlNTeE5RVUZOUXl4SlFVRk9MRU5CUVZkRUxFdEJRVmdzUTBGQlNpeEZRVUZ6UWp0QlFVTXpRa2dzWTBGQlRWRXNTMEZCVGl4RFFVRlpVQ3hKUVVGYUxFTkJRV2xDVVN4WFFVRnFRanRCUVVORUxFOUJSazBzVFVGRlFTeEpRVUZKVGl4VFFVRlJXQ3hSUVVGUmEwSXNUVUZCY0VJc1JVRkJORUk3UVVGRGFrTTdRVUZEUVN4alFVRk5MRWxCUVVsRExFdEJRVW9zUTBGQlZTeHRRa0ZCYlVKaUxFbEJRVWtzUTBGQmRrSXNTVUZCTkVJc1IwRkJOVUlzUjBGQmEwTmpMRXRCUVV0RExGTkJRVXdzUTBGQlpWWXNTMEZCWml4RFFVRTFReXhEUVVGT08wRkJRMFFzVDBGSVRTeE5RVWRCTzBGQlEweE1PMEZCUTBRN1FVRkRSanRCUVVOR096dEJRVVZFTzBGQlEwRTdRVUZEUVN4WFFVRlRVeXhsUVVGVUxFTkJRWGxDVUN4TFFVRjZRaXhGUVVGblF6dEJRVU01UWl4UlFVRk5ZeXhuUWtGQlowSXNNRU5CUVhSQ08wRkJRMEVzVVVGQlRVTXNZVUZCWVVRc1kwRkJZMUlzU1VGQlpDeERRVUZ0UW1Jc1VVRkJVVXNzUTBGQlVpeERRVUZ1UWl4RFFVRnVRanRCUVVOQkxGRkJRVWxwUWl4VlFVRktMRVZCUVdkQ08wRkJRMlFzVlVGQlNVTXNXVUZCV1VRc1YwRkJWeXhEUVVGWUxFMUJRV3RDTEV0QlFXeENMRWRCUVRCQ0xFdEJRVEZDTEVkQlFXdERMRXRCUVd4RU8wRkJRMEVzVlVGQlNVVXNWMEZCVjBZc1YwRkJWeXhEUVVGWUxFVkJRV05ITEU5QlFXUXNRMEZCYzBJc1QwRkJkRUlzUlVGQkswSXNTVUZCTDBJc1EwRkJaanRCUVVOQkxGVkJRVWtzVTBGQlUyUXNTVUZCVkN4RFFVRmpZU3hSUVVGa0xFTkJRVW9zUlVGQk5rSTdRVUZETTBKQkxHMUNRVUZYUVN4VFFVRlRSU3hOUVVGVUxFTkJRV2RDTEVOQlFXaENMRVZCUVcxQ1JpeFRRVUZUWml4TlFVRlVMRWRCUVd0Q0xFTkJRWEpETEVOQlFWZzdRVUZEUkR0QlFVTkVSaXhaUVVGTlowSXNXVUZCV1N4VlFVRnNRaXhKUVVGblEwTXNVVUZCYUVNN1FVRkRRV3BDTEZsQlFVMW5RaXhaUVVGWkxGRkJRV3hDTEVsQlFUaENSQ3hYUVVGWExFTkJRVmdzUTBGQk9VSTdPMEZCUlVGcVFqdEJRVU5FTzBGQlEwWTdPMEZCUlVRN1FVRkRRVHRCUVVOQkxGZEJRVk5YTEZOQlFWUXNSMEZCY1VJN1FVRkRia0lzVVVGQlNWY3NiVUpCUVcxQ2RFSXNRMEZCZGtJN1FVRkJRU3hSUVVOSmRVSXNhMEpCUVd0Q05VSXNVVUZCVVVzc1IwRkJVaXhEUVVSMFFqdEJRVUZCTEZGQlJVbDNRaXhqUVVGalJDeG5Ra0ZCWjBJelFpeExRVUZvUWl4RFFVRnpRaXcwUTBGQmRFSXNRMEZHYkVJN08wRkJTVUVzVVVGQlNUWkNMRTlCUVU4N1FVRkRWRU1zWjBKQlFWVXNRMEZCUTBZc1dVRkJXU3hEUVVGYUxFTkJSRVk3UVVGRlZFY3NaMEpCUVZVc1EwRkJRMGdzV1VGQldTeERRVUZhTEVOQlFVUXNTVUZCYlVJc1EwRkdjRUk3UVVGSFZFa3NaMEpCUVZVc1EwRkJRMG9zV1VGQldTeERRVUZhTEVOQlNFWTdRVUZKVkVzc1owSkJRVlVzUTBGQlEwd3NXVUZCV1N4RFFVRmFMRU5CUVVRc1NVRkJiVUlzUTBGS2NFSTdRVUZMVkUwc1lVRkJUeXhGUVV4Rk8wRkJUVlJETEhOQ1FVRm5RanRCUVU1UUxFdEJRVmc3TzBGQlUwRXNVVUZCU1VNc1YwRkJWeXhEUVVGbU8wRkJRVUVzVVVGRFNVTXNZMEZCWXl4RFFVUnNRanRCUVVWQkxGZEJRVTlxUXl4SlFVRkpUQ3hSUVVGUlV5eE5RVUZ1UWl4RlFVRXlRa29zUjBGQk0wSXNSVUZCWjBNN1FVRkRPVUk3UVVGRFFUdEJRVU5CTEZWQlFVbE1MRkZCUVZGTExFTkJRVklzUlVGQlYydERMRTlCUVZnc1EwRkJiVUlzVFVGQmJrSXNUVUZCSzBJc1EwRkJMMElzU1VGRFRXeERMRWxCUVVrc1EwRkJTaXhIUVVGUlRDeFJRVUZSVXl4TlFVUjBRaXhKUVVWTFZDeFJRVUZSU3l4SlFVRkpMRU5CUVZvc1JVRkJaV3RETEU5QlFXWXNRMEZCZFVJc1RVRkJka0lzVFVGQmJVTXNRMEZHZUVNc1NVRkhTM1pETEZGQlFWRkxMRWxCUVVrc1EwRkJXaXhGUVVGbGEwTXNUMEZCWml4RFFVRjFRaXhKUVVGMlFpeE5RVUZwUXl4RFFVZ3hReXhGUVVjMlF6dEJRVU42UXp0QlFVTklPMEZCUTBRc1ZVRkJTVU1zV1VGQldYaERMRkZCUVZGTExFTkJRVklzUlVGQlZ5eERRVUZZTEVOQlFXaENPenRCUVVWQkxGVkJRVWx0UXl4alFVRmpMRWRCUVdRc1NVRkJjVUpCTEdOQlFXTXNSMEZCYmtNc1NVRkJNRU5CTEdOQlFXTXNSMEZCZUVRc1NVRkJLMFJCTEdOQlFXTXNTVUZCYWtZc1JVRkJkVVk3UVVGRGNrWldMR0ZCUVV0TExFdEJRVXdzUTBGQlZ6TkNMRWxCUVZnc1EwRkJaMEpTTEZGQlFWRkxMRU5CUVZJc1EwRkJhRUk3UVVGRFFYbENMR0ZCUVV0TkxHTkJRVXdzUTBGQmIwSTFRaXhKUVVGd1FpeERRVUY1UWs0c1YwRkJWMGNzUTBGQldDeExRVUZwUWl4SlFVRXhRenM3UVVGRlFTeFpRVUZKYlVNc1kwRkJZeXhIUVVGc1FpeEZRVUYxUWp0QlFVTnlRa2c3UVVGRFJDeFRRVVpFTEUxQlJVOHNTVUZCU1Vjc1kwRkJZeXhIUVVGc1FpeEZRVUYxUWp0QlFVTTFRa1k3UVVGRFJDeFRRVVpOTEUxQlJVRXNTVUZCU1VVc1kwRkJZeXhIUVVGc1FpeEZRVUYxUWp0QlFVTTFRa2c3UVVGRFFVTTdRVUZEUkR0QlFVTkdMRTlCV2tRc1RVRlpUenRCUVVOTU8wRkJRMFE3UVVGRFJqczdRVUZGUkR0QlFVTkJMRkZCUVVrc1EwRkJRMFFzVVVGQlJDeEpRVUZoVUN4TFFVRkxTU3hSUVVGTUxFdEJRV3RDTEVOQlFXNURMRVZCUVhORE8wRkJRM0JEU2l4WFFVRkxTU3hSUVVGTUxFZEJRV2RDTEVOQlFXaENPMEZCUTBRN1FVRkRSQ3hSUVVGSkxFTkJRVU5KTEZkQlFVUXNTVUZCWjBKU0xFdEJRVXRGTEZGQlFVd3NTMEZCYTBJc1EwRkJkRU1zUlVGQmVVTTdRVUZEZGtOR0xGZEJRVXRGTEZGQlFVd3NSMEZCWjBJc1EwRkJhRUk3UVVGRFJEczdRVUZGUkR0QlFVTkJMRkZCUVVscVF5eFJRVUZSYTBJc1RVRkJXaXhGUVVGdlFqdEJRVU5zUWl4VlFVRkpiMElzWVVGQllWQXNTMEZCUzBrc1VVRkJkRUlzUlVGQlowTTdRVUZET1VJc1kwRkJUU3hKUVVGSmFFSXNTMEZCU2l4RFFVRlZMSE5FUVVGelJGTXNiVUpCUVcxQ0xFTkJRWHBGTEVOQlFWWXNRMEZCVGp0QlFVTkVPMEZCUTBRc1ZVRkJTVmNzWjBKQlFXZENVaXhMUVVGTFJTeFJRVUY2UWl4RlFVRnRRenRCUVVOcVF5eGpRVUZOTEVsQlFVbGtMRXRCUVVvc1EwRkJWU3gzUkVGQmQwUlRMRzFDUVVGdFFpeERRVUV6UlN4RFFVRldMRU5CUVU0N1FVRkRSRHRCUVVOR096dEJRVVZFTEZkQlFVOUhMRWxCUVZBN1FVRkRSRHM3UVVGRlJDeFRRVUZQZWtJc1NVRkJTVXdzVVVGQlVWTXNUVUZCYmtJc1JVRkJNa0k3UVVGRGVrSklPMEZCUTBRN08wRkJSVVFzVTBGQlQwWXNTVUZCVUR0QlFVTkVJaXdpWm1sc1pTSTZJbkJoY25ObExtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJR1oxYm1OMGFXOXVJSEJoY25ObFVHRjBZMmdvZFc1cFJHbG1aaXdnYjNCMGFXOXVjeUE5SUh0OUtTQjdYRzRnSUd4bGRDQmthV1ptYzNSeUlEMGdkVzVwUkdsbVppNXpjR3hwZENndlhGeHlYRnh1ZkZ0Y1hHNWNYSFpjWEdaY1hISmNYSGc0TlYwdktTeGNiaUFnSUNBZ0lHUmxiR2x0YVhSbGNuTWdQU0IxYm1sRWFXWm1MbTFoZEdOb0tDOWNYSEpjWEc1OFcxeGNibHhjZGx4Y1pseGNjbHhjZURnMVhTOW5LU0I4ZkNCYlhTeGNiaUFnSUNBZ0lHeHBjM1FnUFNCYlhTeGNiaUFnSUNBZ0lHa2dQU0F3TzF4dVhHNGdJR1oxYm1OMGFXOXVJSEJoY25ObFNXNWtaWGdvS1NCN1hHNGdJQ0FnYkdWMElHbHVaR1Y0SUQwZ2UzMDdYRzRnSUNBZ2JHbHpkQzV3ZFhOb0tHbHVaR1Y0S1R0Y2JseHVJQ0FnSUM4dklGQmhjbk5sSUdScFptWWdiV1YwWVdSaGRHRmNiaUFnSUNCM2FHbHNaU0FvYVNBOElHUnBabVp6ZEhJdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCc1pYUWdiR2x1WlNBOUlHUnBabVp6ZEhKYmFWMDdYRzVjYmlBZ0lDQWdJQzh2SUVacGJHVWdhR1ZoWkdWeUlHWnZkVzVrTENCbGJtUWdjR0Z5YzJsdVp5QmthV1ptSUcxbGRHRmtZWFJoWEc0Z0lDQWdJQ0JwWmlBb0wxNG9YRnd0WEZ3dFhGd3RmRnhjSzF4Y0sxeGNLM3hBUUNsY1hITXZMblJsYzNRb2JHbHVaU2twSUh0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUM4dklFUnBabVlnYVc1a1pYaGNiaUFnSUNBZ0lHeGxkQ0JvWldGa1pYSWdQU0FvTDE0b1B6cEpibVJsZURwOFpHbG1aaWcvT2lBdGNpQmNYSGNyS1NzcFhGeHpLeWd1S3o4cFhGeHpLaVF2S1M1bGVHVmpLR3hwYm1VcE8xeHVJQ0FnSUNBZ2FXWWdLR2hsWVdSbGNpa2dlMXh1SUNBZ0lDQWdJQ0JwYm1SbGVDNXBibVJsZUNBOUlHaGxZV1JsY2xzeFhUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdhU3NyTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUZCaGNuTmxJR1pwYkdVZ2FHVmhaR1Z5Y3lCcFppQjBhR1Y1SUdGeVpTQmtaV1pwYm1Wa0xpQlZibWxtYVdWa0lHUnBabVlnY21WeGRXbHlaWE1nZEdobGJTd2dZblYwWEc0Z0lDQWdMeThnZEdobGNtVW5jeUJ1YnlCMFpXTm9ibWxqWVd3Z2FYTnpkV1Z6SUhSdklHaGhkbVVnWVc0Z2FYTnZiR0YwWldRZ2FIVnVheUIzYVhSb2IzVjBJR1pwYkdVZ2FHVmhaR1Z5WEc0Z0lDQWdjR0Z5YzJWR2FXeGxTR1ZoWkdWeUtHbHVaR1Y0S1R0Y2JpQWdJQ0J3WVhKelpVWnBiR1ZJWldGa1pYSW9hVzVrWlhncE8xeHVYRzRnSUNBZ0x5OGdVR0Z5YzJVZ2FIVnVhM05jYmlBZ0lDQnBibVJsZUM1b2RXNXJjeUE5SUZ0ZE8xeHVYRzRnSUNBZ2QyaHBiR1VnS0drZ1BDQmthV1ptYzNSeUxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ2JHVjBJR3hwYm1VZ1BTQmthV1ptYzNSeVcybGRPMXh1WEc0Z0lDQWdJQ0JwWmlBb0wxNG9TVzVrWlhnNmZHUnBabVo4WEZ3dFhGd3RYRnd0ZkZ4Y0sxeGNLMXhjS3lsY1hITXZMblJsYzNRb2JHbHVaU2twSUh0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0M5ZVFFQXZMblJsYzNRb2JHbHVaU2twSUh0Y2JpQWdJQ0FnSUNBZ2FXNWtaWGd1YUhWdWEzTXVjSFZ6YUNod1lYSnpaVWgxYm1zb0tTazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR3hwYm1VZ0ppWWdiM0IwYVc5dWN5NXpkSEpwWTNRcElIdGNiaUFnSUNBZ0lDQWdMeThnU1dkdWIzSmxJSFZ1Wlhod1pXTjBaV1FnWTI5dWRHVnVkQ0IxYm14bGMzTWdhVzRnYzNSeWFXTjBJRzF2WkdWY2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkVmJtdHViM2R1SUd4cGJtVWdKeUFySUNocElDc2dNU2tnS3lBbklDY2dLeUJLVTA5T0xuTjBjbWx1WjJsbWVTaHNhVzVsS1NrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCcEt5czdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdMeThnVUdGeWMyVnpJSFJvWlNBdExTMGdZVzVrSUNzckt5Qm9aV0ZrWlhKekxDQnBaaUJ1YjI1bElHRnlaU0JtYjNWdVpDd2dibThnYkdsdVpYTmNiaUFnTHk4Z1lYSmxJR052Ym5OMWJXVmtMbHh1SUNCbWRXNWpkR2x2YmlCd1lYSnpaVVpwYkdWSVpXRmtaWElvYVc1a1pYZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCb1pXRmtaWEpRWVhSMFpYSnVJRDBnTDE0b0xTMHRmRnhjSzF4Y0sxeGNLeWxjWEhNcktGdGNYRk1nWFNvcEtEODZYRngwS0M0cVB5bGNYSE1xS1Q4a0x6dGNiaUFnSUNCamIyNXpkQ0JtYVd4bFNHVmhaR1Z5SUQwZ2FHVmhaR1Z5VUdGMGRHVnliaTVsZUdWaktHUnBabVp6ZEhKYmFWMHBPMXh1SUNBZ0lHbG1JQ2htYVd4bFNHVmhaR1Z5S1NCN1hHNGdJQ0FnSUNCc1pYUWdhMlY1VUhKbFptbDRJRDBnWm1sc1pVaGxZV1JsY2xzeFhTQTlQVDBnSnkwdExTY2dQeUFuYjJ4a0p5QTZJQ2R1Wlhjbk8xeHVJQ0FnSUNBZ2JHVjBJR1pwYkdWT1lXMWxJRDBnWm1sc1pVaGxZV1JsY2xzeVhTNXlaWEJzWVdObEtDOWNYRnhjWEZ4Y1hDOW5MQ0FuWEZ4Y1hDY3BPMXh1SUNBZ0lDQWdhV1lnS0M5ZVhDSXVLbHdpSkM4dWRHVnpkQ2htYVd4bFRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ1ptbHNaVTVoYldVZ1BTQm1hV3hsVG1GdFpTNXpkV0p6ZEhJb01Td2dabWxzWlU1aGJXVXViR1Z1WjNSb0lDMGdNaWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwYm1SbGVGdHJaWGxRY21WbWFYZ2dLeUFuUm1sc1pVNWhiV1VuWFNBOUlHWnBiR1ZPWVcxbE8xeHVJQ0FnSUNBZ2FXNWtaWGhiYTJWNVVISmxabWw0SUNzZ0owaGxZV1JsY2lkZElEMGdabWxzWlVobFlXUmxjbHN6WFR0Y2JseHVJQ0FnSUNBZ2FTc3JPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQzh2SUZCaGNuTmxjeUJoSUdoMWJtdGNiaUFnTHk4Z1ZHaHBjeUJoYzNOMWJXVnpJSFJvWVhRZ2QyVWdZWEpsSUdGMElIUm9aU0J6ZEdGeWRDQnZaaUJoSUdoMWJtc3VYRzRnSUdaMWJtTjBhVzl1SUhCaGNuTmxTSFZ1YXlncElIdGNiaUFnSUNCc1pYUWdZMmgxYm10SVpXRmtaWEpKYm1SbGVDQTlJR2tzWEc0Z0lDQWdJQ0FnSUdOb2RXNXJTR1ZoWkdWeVRHbHVaU0E5SUdScFptWnpkSEpiYVNzclhTeGNiaUFnSUNBZ0lDQWdZMmgxYm10SVpXRmtaWElnUFNCamFIVnVhMGhsWVdSbGNreHBibVV1YzNCc2FYUW9MMEJBSUMwb1hGeGtLeWtvUHpvc0tGeGNaQ3NwS1Q4Z1hGd3JLRnhjWkNzcEtEODZMQ2hjWEdRcktTay9JRUJBTHlrN1hHNWNiaUFnSUNCc1pYUWdhSFZ1YXlBOUlIdGNiaUFnSUNBZ0lHOXNaRk4wWVhKME9pQXJZMmgxYm10SVpXRmtaWEpiTVYwc1hHNGdJQ0FnSUNCdmJHUk1hVzVsY3pvZ0syTm9kVzVyU0dWaFpHVnlXekpkSUh4OElERXNYRzRnSUNBZ0lDQnVaWGRUZEdGeWREb2dLMk5vZFc1clNHVmhaR1Z5V3pOZExGeHVJQ0FnSUNBZ2JtVjNUR2x1WlhNNklDdGphSFZ1YTBobFlXUmxjbHMwWFNCOGZDQXhMRnh1SUNBZ0lDQWdiR2x1WlhNNklGdGRMRnh1SUNBZ0lDQWdiR2x1WldSbGJHbHRhWFJsY25NNklGdGRYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lHeGxkQ0JoWkdSRGIzVnVkQ0E5SURBc1hHNGdJQ0FnSUNBZ0lISmxiVzkyWlVOdmRXNTBJRDBnTUR0Y2JpQWdJQ0JtYjNJZ0tEc2dhU0E4SUdScFptWnpkSEl1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDOHZJRXhwYm1WeklITjBZWEowYVc1bklIZHBkR2dnSnkwdExTY2dZMjkxYkdRZ1ltVWdiV2x6ZEdGclpXNGdabTl5SUhSb1pTQmNJbkpsYlc5MlpTQnNhVzVsWENJZ2IzQmxjbUYwYVc5dVhHNGdJQ0FnSUNBdkx5QkNkWFFnZEdobGVTQmpiM1ZzWkNCaVpTQjBhR1VnYUdWaFpHVnlJR1p2Y2lCMGFHVWdibVY0ZENCbWFXeGxMaUJVYUdWeVpXWnZjbVVnY0hKMWJtVWdjM1ZqYUNCallYTmxjeUJ2ZFhRdVhHNGdJQ0FnSUNCcFppQW9aR2xtWm5OMGNsdHBYUzVwYm1SbGVFOW1LQ2N0TFMwZ0p5a2dQVDA5SURCY2JpQWdJQ0FnSUNBZ0lDQWdJQ1ltSUNocElDc2dNaUE4SUdScFptWnpkSEl1YkdWdVozUm9LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0ppWWdaR2xtWm5OMGNsdHBJQ3NnTVYwdWFXNWtaWGhQWmlnbkt5c3JJQ2NwSUQwOVBTQXdYRzRnSUNBZ0lDQWdJQ0FnSUNBbUppQmthV1ptYzNSeVcya2dLeUF5WFM1cGJtUmxlRTltS0NkQVFDY3BJRDA5UFNBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnNaWFFnYjNCbGNtRjBhVzl1SUQwZ1pHbG1abk4wY2x0cFhWc3dYVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHOXdaWEpoZEdsdmJpQTlQVDBnSnlzbklIeDhJRzl3WlhKaGRHbHZiaUE5UFQwZ0p5MG5JSHg4SUc5d1pYSmhkR2x2YmlBOVBUMGdKeUFuSUh4OElHOXdaWEpoZEdsdmJpQTlQVDBnSjF4Y1hGd25LU0I3WEc0Z0lDQWdJQ0FnSUdoMWJtc3ViR2x1WlhNdWNIVnphQ2hrYVdabWMzUnlXMmxkS1R0Y2JpQWdJQ0FnSUNBZ2FIVnVheTVzYVc1bFpHVnNhVzFwZEdWeWN5NXdkWE5vS0dSbGJHbHRhWFJsY25OYmFWMGdmSHdnSjF4Y2JpY3BPMXh1WEc0Z0lDQWdJQ0FnSUdsbUlDaHZjR1Z5WVhScGIyNGdQVDA5SUNjckp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUdGa1pFTnZkVzUwS3lzN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9iM0JsY21GMGFXOXVJRDA5UFNBbkxTY3BJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpXMXZkbVZEYjNWdWRDc3JPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0c5d1pYSmhkR2x2YmlBOVBUMGdKeUFuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdZV1JrUTI5MWJuUXJLenRjYmlBZ0lDQWdJQ0FnSUNCeVpXMXZkbVZEYjNWdWRDc3JPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QklZVzVrYkdVZ2RHaGxJR1Z0Y0hSNUlHSnNiMk5ySUdOdmRXNTBJR05oYzJWY2JpQWdJQ0JwWmlBb0lXRmtaRU52ZFc1MElDWW1JR2gxYm1zdWJtVjNUR2x1WlhNZ1BUMDlJREVwSUh0Y2JpQWdJQ0FnSUdoMWJtc3VibVYzVEdsdVpYTWdQU0F3TzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvSVhKbGJXOTJaVU52ZFc1MElDWW1JR2gxYm1zdWIyeGtUR2x1WlhNZ1BUMDlJREVwSUh0Y2JpQWdJQ0FnSUdoMWJtc3ViMnhrVEdsdVpYTWdQU0F3TzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUZCbGNtWnZjbTBnYjNCMGFXOXVZV3dnYzJGdWFYUjVJR05vWldOcmFXNW5YRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTXVjM1J5YVdOMEtTQjdYRzRnSUNBZ0lDQnBaaUFvWVdSa1EyOTFiblFnSVQwOUlHaDFibXN1Ym1WM1RHbHVaWE1wSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkQlpHUmxaQ0JzYVc1bElHTnZkVzUwSUdScFpDQnViM1FnYldGMFkyZ2dabTl5SUdoMWJtc2dZWFFnYkdsdVpTQW5JQ3NnS0dOb2RXNXJTR1ZoWkdWeVNXNWtaWGdnS3lBeEtTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnBaaUFvY21WdGIzWmxRMjkxYm5RZ0lUMDlJR2gxYm1zdWIyeGtUR2x1WlhNcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZFNaVzF2ZG1Wa0lHeHBibVVnWTI5MWJuUWdaR2xrSUc1dmRDQnRZWFJqYUNCbWIzSWdhSFZ1YXlCaGRDQnNhVzVsSUNjZ0t5QW9ZMmgxYm10SVpXRmtaWEpKYm1SbGVDQXJJREVwS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdhSFZ1YXp0Y2JpQWdmVnh1WEc0Z0lIZG9hV3hsSUNocElEd2daR2xtWm5OMGNpNXNaVzVuZEdncElIdGNiaUFnSUNCd1lYSnpaVWx1WkdWNEtDazdYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdiR2x6ZER0Y2JuMWNiaUpkZlE9PVxuXG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovXCJ1c2Ugc3RyaWN0XCI7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHRleHBvcnRzW1wiZGVmYXVsdFwiXSA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovZnVuY3Rpb24gKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG5cdCAgdmFyIHdhbnRGb3J3YXJkID0gdHJ1ZSxcblx0ICAgICAgYmFja3dhcmRFeGhhdXN0ZWQgPSBmYWxzZSxcblx0ICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuXHQgICAgICBsb2NhbE9mZnNldCA9IDE7XG5cblx0ICByZXR1cm4gZnVuY3Rpb24gaXRlcmF0b3IoKSB7XG5cdCAgICBpZiAod2FudEZvcndhcmQgJiYgIWZvcndhcmRFeGhhdXN0ZWQpIHtcblx0ICAgICAgaWYgKGJhY2t3YXJkRXhoYXVzdGVkKSB7XG5cdCAgICAgICAgbG9jYWxPZmZzZXQrKztcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB3YW50Rm9yd2FyZCA9IGZhbHNlO1xuXHQgICAgICB9XG5cblx0ICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZXlvbmQgdGV4dCBsZW5ndGgsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcblx0ICAgICAgLy8gYWZ0ZXIgb2Zmc2V0IGxvY2F0aW9uIChvciBkZXNpcmVkIGxvY2F0aW9uIG9uIGZpcnN0IGl0ZXJhdGlvbilcblx0ICAgICAgaWYgKHN0YXJ0ICsgbG9jYWxPZmZzZXQgPD0gbWF4TGluZSkge1xuXHQgICAgICAgIHJldHVybiBsb2NhbE9mZnNldDtcblx0ICAgICAgfVxuXG5cdCAgICAgIGZvcndhcmRFeGhhdXN0ZWQgPSB0cnVlO1xuXHQgICAgfVxuXG5cdCAgICBpZiAoIWJhY2t3YXJkRXhoYXVzdGVkKSB7XG5cdCAgICAgIGlmICghZm9yd2FyZEV4aGF1c3RlZCkge1xuXHQgICAgICAgIHdhbnRGb3J3YXJkID0gdHJ1ZTtcblx0ICAgICAgfVxuXG5cdCAgICAgIC8vIENoZWNrIGlmIHRyeWluZyB0byBmaXQgYmVmb3JlIHRleHQgYmVnaW5uaW5nLCBhbmQgaWYgbm90LCBjaGVjayBpdCBmaXRzXG5cdCAgICAgIC8vIGJlZm9yZSBvZmZzZXQgbG9jYXRpb25cblx0ICAgICAgaWYgKG1pbkxpbmUgPD0gc3RhcnQgLSBsb2NhbE9mZnNldCkge1xuXHQgICAgICAgIHJldHVybiAtbG9jYWxPZmZzZXQrKztcblx0ICAgICAgfVxuXG5cdCAgICAgIGJhY2t3YXJkRXhoYXVzdGVkID0gdHJ1ZTtcblx0ICAgICAgcmV0dXJuIGl0ZXJhdG9yKCk7XG5cdCAgICB9XG5cblx0ICAgIC8vIFdlIHRyaWVkIHRvIGZpdCBodW5rIGJlZm9yZSB0ZXh0IGJlZ2lubmluZyBhbmQgYmV5b25kIHRleHQgbGVuZ3RoLCB0aGVuXG5cdCAgICAvLyBodW5rIGNhbid0IGZpdCBvbiB0aGUgdGV4dC4gUmV0dXJuIHVuZGVmaW5lZFxuXHQgIH07XG5cdH07XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OTFkR2xzTDJScGMzUmhibU5sTFdsMFpYSmhkRzl5TG1weklsMHNJbTVoYldWeklqcGJJbk4wWVhKMElpd2liV2x1VEdsdVpTSXNJbTFoZUV4cGJtVWlMQ0ozWVc1MFJtOXlkMkZ5WkNJc0ltSmhZMnQzWVhKa1JYaG9ZWFZ6ZEdWa0lpd2labTl5ZDJGeVpFVjRhR0YxYzNSbFpDSXNJbXh2WTJGc1QyWm1jMlYwSWl3aWFYUmxjbUYwYjNJaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN05FTkJSMlVzVlVGQlUwRXNTMEZCVkN4RlFVRm5Ra01zVDBGQmFFSXNSVUZCZVVKRExFOUJRWHBDTEVWQlFXdERPMEZCUXk5RExFMUJRVWxETEdOQlFXTXNTVUZCYkVJN1FVRkJRU3hOUVVOSlF5eHZRa0ZCYjBJc1MwRkVlRUk3UVVGQlFTeE5RVVZKUXl4dFFrRkJiVUlzUzBGR2RrSTdRVUZCUVN4TlFVZEpReXhqUVVGakxFTkJTR3hDT3p0QlFVdEJMRk5CUVU4c1UwRkJVME1zVVVGQlZDeEhRVUZ2UWp0QlFVTjZRaXhSUVVGSlNpeGxRVUZsTEVOQlFVTkZMR2RDUVVGd1FpeEZRVUZ6UXp0QlFVTndReXhWUVVGSlJDeHBRa0ZCU2l4RlFVRjFRanRCUVVOeVFrVTdRVUZEUkN4UFFVWkVMRTFCUlU4N1FVRkRURWdzYzBKQlFXTXNTMEZCWkR0QlFVTkVPenRCUVVWRU8wRkJRMEU3UVVGRFFTeFZRVUZKU0N4UlFVRlJUU3hYUVVGU0xFbEJRWFZDU2l4UFFVRXpRaXhGUVVGdlF6dEJRVU5zUXl4bFFVRlBTU3hYUVVGUU8wRkJRMFE3TzBGQlJVUkVMSGxDUVVGdFFpeEpRVUZ1UWp0QlFVTkVPenRCUVVWRUxGRkJRVWtzUTBGQlEwUXNhVUpCUVV3c1JVRkJkMEk3UVVGRGRFSXNWVUZCU1N4RFFVRkRReXhuUWtGQlRDeEZRVUYxUWp0QlFVTnlRa1lzYzBKQlFXTXNTVUZCWkR0QlFVTkVPenRCUVVWRU8wRkJRMEU3UVVGRFFTeFZRVUZKUml4WFFVRlhSQ3hSUVVGUlRTeFhRVUYyUWl4RlFVRnZRenRCUVVOc1F5eGxRVUZQTEVOQlFVTkJMR0ZCUVZJN1FVRkRSRHM3UVVGRlJFWXNNRUpCUVc5Q0xFbEJRWEJDTzBGQlEwRXNZVUZCVDBjc1ZVRkJVRHRCUVVORU96dEJRVVZFTzBGQlEwRTdRVUZEUkN4SFFXeERSRHRCUVcxRFJDeERJaXdpWm1sc1pTSTZJbVJwYzNSaGJtTmxMV2wwWlhKaGRHOXlMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5OGdTWFJsY21GMGIzSWdkR2hoZENCMGNtRjJaWEp6WlhNZ2FXNGdkR2hsSUhKaGJtZGxJRzltSUZ0dGFXNHNJRzFoZUYwc0lITjBaWEJ3YVc1blhHNHZMeUJpZVNCa2FYTjBZVzVqWlNCbWNtOXRJR0VnWjJsMlpXNGdjM1JoY25RZ2NHOXphWFJwYjI0dUlFa3VaUzRnWm05eUlGc3dMQ0EwWFN3Z2QybDBhRnh1THk4Z2MzUmhjblFnYjJZZ01pd2dkR2hwY3lCM2FXeHNJR2wwWlhKaGRHVWdNaXdnTXl3Z01Td2dOQ3dnTUM1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdaMWJtTjBhVzl1S0hOMFlYSjBMQ0J0YVc1TWFXNWxMQ0J0WVhoTWFXNWxLU0I3WEc0Z0lHeGxkQ0IzWVc1MFJtOXlkMkZ5WkNBOUlIUnlkV1VzWEc0Z0lDQWdJQ0JpWVdOcmQyRnlaRVY0YUdGMWMzUmxaQ0E5SUdaaGJITmxMRnh1SUNBZ0lDQWdabTl5ZDJGeVpFVjRhR0YxYzNSbFpDQTlJR1poYkhObExGeHVJQ0FnSUNBZ2JHOWpZV3hQWm1aelpYUWdQU0F4TzF4dVhHNGdJSEpsZEhWeWJpQm1kVzVqZEdsdmJpQnBkR1Z5WVhSdmNpZ3BJSHRjYmlBZ0lDQnBaaUFvZDJGdWRFWnZjbmRoY21RZ0ppWWdJV1p2Y25kaGNtUkZlR2hoZFhOMFpXUXBJSHRjYmlBZ0lDQWdJR2xtSUNoaVlXTnJkMkZ5WkVWNGFHRjFjM1JsWkNrZ2UxeHVJQ0FnSUNBZ0lDQnNiMk5oYkU5bVpuTmxkQ3NyTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnZDJGdWRFWnZjbmRoY21RZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0x5OGdRMmhsWTJzZ2FXWWdkSEo1YVc1bklIUnZJR1pwZENCaVpYbHZibVFnZEdWNGRDQnNaVzVuZEdnc0lHRnVaQ0JwWmlCdWIzUXNJR05vWldOcklHbDBJR1pwZEhOY2JpQWdJQ0FnSUM4dklHRm1kR1Z5SUc5bVpuTmxkQ0JzYjJOaGRHbHZiaUFvYjNJZ1pHVnphWEpsWkNCc2IyTmhkR2x2YmlCdmJpQm1hWEp6ZENCcGRHVnlZWFJwYjI0cFhHNGdJQ0FnSUNCcFppQW9jM1JoY25RZ0t5QnNiMk5oYkU5bVpuTmxkQ0E4UFNCdFlYaE1hVzVsS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCc2IyTmhiRTltWm5ObGREdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdabTl5ZDJGeVpFVjRhR0YxYzNSbFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tDRmlZV05yZDJGeVpFVjRhR0YxYzNSbFpDa2dlMXh1SUNBZ0lDQWdhV1lnS0NGbWIzSjNZWEprUlhob1lYVnpkR1ZrS1NCN1hHNGdJQ0FnSUNBZ0lIZGhiblJHYjNKM1lYSmtJRDBnZEhKMVpUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnUTJobFkyc2dhV1lnZEhKNWFXNW5JSFJ2SUdacGRDQmlaV1p2Y21VZ2RHVjRkQ0JpWldkcGJtNXBibWNzSUdGdVpDQnBaaUJ1YjNRc0lHTm9aV05ySUdsMElHWnBkSE5jYmlBZ0lDQWdJQzh2SUdKbFptOXlaU0J2Wm1aelpYUWdiRzlqWVhScGIyNWNiaUFnSUNBZ0lHbG1JQ2h0YVc1TWFXNWxJRHc5SUhOMFlYSjBJQzBnYkc5allXeFBabVp6WlhRcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlDMXNiMk5oYkU5bVpuTmxkQ3NyTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCaVlXTnJkMkZ5WkVWNGFHRjFjM1JsWkNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdhWFJsY21GMGIzSW9LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJYWlNCMGNtbGxaQ0IwYnlCbWFYUWdhSFZ1YXlCaVpXWnZjbVVnZEdWNGRDQmlaV2RwYm01cGJtY2dZVzVrSUdKbGVXOXVaQ0IwWlhoMElHeGxibWQwYUN3Z2RHaGxibHh1SUNBZ0lDOHZJR2gxYm1zZ1kyRnVKM1FnWm1sMElHOXVJSFJvWlNCMFpYaDBMaUJTWlhSMWNtNGdkVzVrWldacGJtVmtYRzRnSUgwN1hHNTlYRzRpWFgwPVxuXG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY2FsY0xpbmVDb3VudCA9IGNhbGNMaW5lQ291bnQ7XG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9leHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL21lcmdlID0gbWVyZ2U7XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi87XG5cblx0dmFyIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fcGFyc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19hcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovO1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2Z1bmN0aW9uIGNhbGNMaW5lQ291bnQoaHVuaykge1xuXHQgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2NhbGNPbGROZXdMaW5lQ291bnQgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NhbGNPbGROZXdMaW5lQ291bnQoaHVuay5saW5lcyksXG5cdCAgICAgIG9sZExpbmVzID0gX2NhbGNPbGROZXdMaW5lQ291bnQub2xkTGluZXMsXG5cdCAgICAgIG5ld0xpbmVzID0gX2NhbGNPbGROZXdMaW5lQ291bnQubmV3TGluZXM7XG5cblx0ICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuXHQgICAgaHVuay5vbGRMaW5lcyA9IG9sZExpbmVzO1xuXHQgIH0gZWxzZSB7XG5cdCAgICBkZWxldGUgaHVuay5vbGRMaW5lcztcblx0ICB9XG5cblx0ICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCkge1xuXHQgICAgaHVuay5uZXdMaW5lcyA9IG5ld0xpbmVzO1xuXHQgIH0gZWxzZSB7XG5cdCAgICBkZWxldGUgaHVuay5uZXdMaW5lcztcblx0ICB9XG5cdH1cblxuXHRmdW5jdGlvbiBtZXJnZShtaW5lLCB0aGVpcnMsIGJhc2UpIHtcblx0ICBtaW5lID0gbG9hZFBhdGNoKG1pbmUsIGJhc2UpO1xuXHQgIHRoZWlycyA9IGxvYWRQYXRjaCh0aGVpcnMsIGJhc2UpO1xuXG5cdCAgdmFyIHJldCA9IHt9O1xuXG5cdCAgLy8gRm9yIGluZGV4IHdlIGp1c3QgbGV0IGl0IHBhc3MgdGhyb3VnaCBhcyBpdCBkb2Vzbid0IGhhdmUgYW55IG5lY2Vzc2FyeSBtZWFuaW5nLlxuXHQgIC8vIExlYXZpbmcgc2FuaXR5IGNoZWNrcyBvbiB0aGlzIHRvIHRoZSBBUEkgY29uc3VtZXIgdGhhdCBtYXkga25vdyBtb3JlIGFib3V0IHRoZVxuXHQgIC8vIG1lYW5pbmcgaW4gdGhlaXIgb3duIGNvbnRleHQuXG5cdCAgaWYgKG1pbmUuaW5kZXggfHwgdGhlaXJzLmluZGV4KSB7XG5cdCAgICByZXQuaW5kZXggPSBtaW5lLmluZGV4IHx8IHRoZWlycy5pbmRleDtcblx0ICB9XG5cblx0ICBpZiAobWluZS5uZXdGaWxlTmFtZSB8fCB0aGVpcnMubmV3RmlsZU5hbWUpIHtcblx0ICAgIGlmICghZmlsZU5hbWVDaGFuZ2VkKG1pbmUpKSB7XG5cdCAgICAgIC8vIE5vIGhlYWRlciBvciBubyBjaGFuZ2UgaW4gb3VycywgdXNlIHRoZWlycyAoYW5kIG91cnMgaWYgdGhlaXJzIGRvZXMgbm90IGV4aXN0KVxuXHQgICAgICByZXQub2xkRmlsZU5hbWUgPSB0aGVpcnMub2xkRmlsZU5hbWUgfHwgbWluZS5vbGRGaWxlTmFtZTtcblx0ICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gdGhlaXJzLm5ld0ZpbGVOYW1lIHx8IG1pbmUubmV3RmlsZU5hbWU7XG5cdCAgICAgIHJldC5vbGRIZWFkZXIgPSB0aGVpcnMub2xkSGVhZGVyIHx8IG1pbmUub2xkSGVhZGVyO1xuXHQgICAgICByZXQubmV3SGVhZGVyID0gdGhlaXJzLm5ld0hlYWRlciB8fCBtaW5lLm5ld0hlYWRlcjtcblx0ICAgIH0gZWxzZSBpZiAoIWZpbGVOYW1lQ2hhbmdlZCh0aGVpcnMpKSB7XG5cdCAgICAgIC8vIE5vIGhlYWRlciBvciBubyBjaGFuZ2UgaW4gdGhlaXJzLCB1c2Ugb3Vyc1xuXHQgICAgICByZXQub2xkRmlsZU5hbWUgPSBtaW5lLm9sZEZpbGVOYW1lO1xuXHQgICAgICByZXQubmV3RmlsZU5hbWUgPSBtaW5lLm5ld0ZpbGVOYW1lO1xuXHQgICAgICByZXQub2xkSGVhZGVyID0gbWluZS5vbGRIZWFkZXI7XG5cdCAgICAgIHJldC5uZXdIZWFkZXIgPSBtaW5lLm5ld0hlYWRlcjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIC8vIEJvdGggY2hhbmdlZC4uLiBmaWd1cmUgaXQgb3V0XG5cdCAgICAgIHJldC5vbGRGaWxlTmFtZSA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5vbGRGaWxlTmFtZSwgdGhlaXJzLm9sZEZpbGVOYW1lKTtcblx0ICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm5ld0ZpbGVOYW1lLCB0aGVpcnMubmV3RmlsZU5hbWUpO1xuXHQgICAgICByZXQub2xkSGVhZGVyID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm9sZEhlYWRlciwgdGhlaXJzLm9sZEhlYWRlcik7XG5cdCAgICAgIHJldC5uZXdIZWFkZXIgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUubmV3SGVhZGVyLCB0aGVpcnMubmV3SGVhZGVyKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXQuaHVua3MgPSBbXTtcblxuXHQgIHZhciBtaW5lSW5kZXggPSAwLFxuXHQgICAgICB0aGVpcnNJbmRleCA9IDAsXG5cdCAgICAgIG1pbmVPZmZzZXQgPSAwLFxuXHQgICAgICB0aGVpcnNPZmZzZXQgPSAwO1xuXG5cdCAgd2hpbGUgKG1pbmVJbmRleCA8IG1pbmUuaHVua3MubGVuZ3RoIHx8IHRoZWlyc0luZGV4IDwgdGhlaXJzLmh1bmtzLmxlbmd0aCkge1xuXHQgICAgdmFyIG1pbmVDdXJyZW50ID0gbWluZS5odW5rc1ttaW5lSW5kZXhdIHx8IHsgb2xkU3RhcnQ6IEluZmluaXR5IH0sXG5cdCAgICAgICAgdGhlaXJzQ3VycmVudCA9IHRoZWlycy5odW5rc1t0aGVpcnNJbmRleF0gfHwgeyBvbGRTdGFydDogSW5maW5pdHkgfTtcblxuXHQgICAgaWYgKGh1bmtCZWZvcmUobWluZUN1cnJlbnQsIHRoZWlyc0N1cnJlbnQpKSB7XG5cdCAgICAgIC8vIFRoaXMgcGF0Y2ggZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgb3RoZXJzLCB5YXkuXG5cdCAgICAgIHJldC5odW5rcy5wdXNoKGNsb25lSHVuayhtaW5lQ3VycmVudCwgbWluZU9mZnNldCkpO1xuXHQgICAgICBtaW5lSW5kZXgrKztcblx0ICAgICAgdGhlaXJzT2Zmc2V0ICs9IG1pbmVDdXJyZW50Lm5ld0xpbmVzIC0gbWluZUN1cnJlbnQub2xkTGluZXM7XG5cdCAgICB9IGVsc2UgaWYgKGh1bmtCZWZvcmUodGhlaXJzQ3VycmVudCwgbWluZUN1cnJlbnQpKSB7XG5cdCAgICAgIC8vIFRoaXMgcGF0Y2ggZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgb3RoZXJzLCB5YXkuXG5cdCAgICAgIHJldC5odW5rcy5wdXNoKGNsb25lSHVuayh0aGVpcnNDdXJyZW50LCB0aGVpcnNPZmZzZXQpKTtcblx0ICAgICAgdGhlaXJzSW5kZXgrKztcblx0ICAgICAgbWluZU9mZnNldCArPSB0aGVpcnNDdXJyZW50Lm5ld0xpbmVzIC0gdGhlaXJzQ3VycmVudC5vbGRMaW5lcztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIC8vIE92ZXJsYXAsIG1lcmdlIGFzIGJlc3Qgd2UgY2FuXG5cdCAgICAgIHZhciBtZXJnZWRIdW5rID0ge1xuXHQgICAgICAgIG9sZFN0YXJ0OiBNYXRoLm1pbihtaW5lQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5vbGRTdGFydCksXG5cdCAgICAgICAgb2xkTGluZXM6IDAsXG5cdCAgICAgICAgbmV3U3RhcnQ6IE1hdGgubWluKG1pbmVDdXJyZW50Lm5ld1N0YXJ0ICsgbWluZU9mZnNldCwgdGhlaXJzQ3VycmVudC5vbGRTdGFydCArIHRoZWlyc09mZnNldCksXG5cdCAgICAgICAgbmV3TGluZXM6IDAsXG5cdCAgICAgICAgbGluZXM6IFtdXG5cdCAgICAgIH07XG5cdCAgICAgIG1lcmdlTGluZXMobWVyZ2VkSHVuaywgbWluZUN1cnJlbnQub2xkU3RhcnQsIG1pbmVDdXJyZW50LmxpbmVzLCB0aGVpcnNDdXJyZW50Lm9sZFN0YXJ0LCB0aGVpcnNDdXJyZW50LmxpbmVzKTtcblx0ICAgICAgdGhlaXJzSW5kZXgrKztcblx0ICAgICAgbWluZUluZGV4Kys7XG5cblx0ICAgICAgcmV0Lmh1bmtzLnB1c2gobWVyZ2VkSHVuayk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHJldDtcblx0fVxuXG5cdGZ1bmN0aW9uIGxvYWRQYXRjaChwYXJhbSwgYmFzZSkge1xuXHQgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XG5cdCAgICBpZiAoL15AQC9tLnRlc3QocGFyYW0pIHx8IC9eSW5kZXg6L20udGVzdChwYXJhbSkpIHtcblx0ICAgICAgcmV0dXJuICgvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9wYXJzZS5wYXJzZVBhdGNoKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyhwYXJhbSlbMF1cblx0ICAgICAgKTtcblx0ICAgIH1cblxuXHQgICAgaWYgKCFiYXNlKSB7XG5cdCAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGEgYmFzZSByZWZlcmVuY2Ugb3IgcGFzcyBpbiBhIHBhdGNoJyk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gKC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX2NyZWF0ZS5zdHJ1Y3R1cmVkUGF0Y2gpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBiYXNlLCBwYXJhbSlcblx0ICAgICk7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHBhcmFtO1xuXHR9XG5cblx0ZnVuY3Rpb24gZmlsZU5hbWVDaGFuZ2VkKHBhdGNoKSB7XG5cdCAgcmV0dXJuIHBhdGNoLm5ld0ZpbGVOYW1lICYmIHBhdGNoLm5ld0ZpbGVOYW1lICE9PSBwYXRjaC5vbGRGaWxlTmFtZTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNlbGVjdEZpZWxkKGluZGV4LCBtaW5lLCB0aGVpcnMpIHtcblx0ICBpZiAobWluZSA9PT0gdGhlaXJzKSB7XG5cdCAgICByZXR1cm4gbWluZTtcblx0ICB9IGVsc2Uge1xuXHQgICAgaW5kZXguY29uZmxpY3QgPSB0cnVlO1xuXHQgICAgcmV0dXJuIHsgbWluZTogbWluZSwgdGhlaXJzOiB0aGVpcnMgfTtcblx0ICB9XG5cdH1cblxuXHRmdW5jdGlvbiBodW5rQmVmb3JlKHRlc3QsIGNoZWNrKSB7XG5cdCAgcmV0dXJuIHRlc3Qub2xkU3RhcnQgPCBjaGVjay5vbGRTdGFydCAmJiB0ZXN0Lm9sZFN0YXJ0ICsgdGVzdC5vbGRMaW5lcyA8IGNoZWNrLm9sZFN0YXJ0O1xuXHR9XG5cblx0ZnVuY3Rpb24gY2xvbmVIdW5rKGh1bmssIG9mZnNldCkge1xuXHQgIHJldHVybiB7XG5cdCAgICBvbGRTdGFydDogaHVuay5vbGRTdGFydCwgb2xkTGluZXM6IGh1bmsub2xkTGluZXMsXG5cdCAgICBuZXdTdGFydDogaHVuay5uZXdTdGFydCArIG9mZnNldCwgbmV3TGluZXM6IGh1bmsubmV3TGluZXMsXG5cdCAgICBsaW5lczogaHVuay5saW5lc1xuXHQgIH07XG5cdH1cblxuXHRmdW5jdGlvbiBtZXJnZUxpbmVzKGh1bmssIG1pbmVPZmZzZXQsIG1pbmVMaW5lcywgdGhlaXJPZmZzZXQsIHRoZWlyTGluZXMpIHtcblx0ICAvLyBUaGlzIHdpbGwgZ2VuZXJhbGx5IHJlc3VsdCBpbiBhIGNvbmZsaWN0ZWQgaHVuaywgYnV0IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgY29udGV4dFxuXHQgIC8vIGlzIHRoZSBvbmx5IG92ZXJsYXAgd2hlcmUgd2UgY2FuIHN1Y2Nlc3NmdWxseSBtZXJnZSB0aGUgY29udGVudCBoZXJlLlxuXHQgIHZhciBtaW5lID0geyBvZmZzZXQ6IG1pbmVPZmZzZXQsIGxpbmVzOiBtaW5lTGluZXMsIGluZGV4OiAwIH0sXG5cdCAgICAgIHRoZWlyID0geyBvZmZzZXQ6IHRoZWlyT2Zmc2V0LCBsaW5lczogdGhlaXJMaW5lcywgaW5kZXg6IDAgfTtcblxuXHQgIC8vIEhhbmRsZSBhbnkgbGVhZGluZyBjb250ZW50XG5cdCAgaW5zZXJ0TGVhZGluZyhodW5rLCBtaW5lLCB0aGVpcik7XG5cdCAgaW5zZXJ0TGVhZGluZyhodW5rLCB0aGVpciwgbWluZSk7XG5cblx0ICAvLyBOb3cgaW4gdGhlIG92ZXJsYXAgY29udGVudC4gU2NhbiB0aHJvdWdoIGFuZCBzZWxlY3QgdGhlIGJlc3QgY2hhbmdlcyBmcm9tIGVhY2guXG5cdCAgd2hpbGUgKG1pbmUuaW5kZXggPCBtaW5lLmxpbmVzLmxlbmd0aCAmJiB0aGVpci5pbmRleCA8IHRoZWlyLmxpbmVzLmxlbmd0aCkge1xuXHQgICAgdmFyIG1pbmVDdXJyZW50ID0gbWluZS5saW5lc1ttaW5lLmluZGV4XSxcblx0ICAgICAgICB0aGVpckN1cnJlbnQgPSB0aGVpci5saW5lc1t0aGVpci5pbmRleF07XG5cblx0ICAgIGlmICgobWluZUN1cnJlbnRbMF0gPT09ICctJyB8fCBtaW5lQ3VycmVudFswXSA9PT0gJysnKSAmJiAodGhlaXJDdXJyZW50WzBdID09PSAnLScgfHwgdGhlaXJDdXJyZW50WzBdID09PSAnKycpKSB7XG5cdCAgICAgIC8vIEJvdGggbW9kaWZpZWQgLi4uXG5cdCAgICAgIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcik7XG5cdCAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50WzBdID09PSAnKycgJiYgdGhlaXJDdXJyZW50WzBdID09PSAnICcpIHtcblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfaHVuayRsaW5lcztcblxuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvLyBNaW5lIGluc2VydGVkXG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2h1bmskbGluZXMgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2h1bmsubGluZXMpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19odW5rJGxpbmVzIC8qaXN0YW5idWwgaWdub3JlIGVuZCovLCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3RvQ29uc3VtYWJsZUFycmF5KCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2NvbGxlY3RDaGFuZ2UobWluZSkpKTtcblx0ICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnKycgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9odW5rJGxpbmVzMjtcblxuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvLyBUaGVpcnMgaW5zZXJ0ZWRcblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfaHVuayRsaW5lczIgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2h1bmsubGluZXMpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19odW5rJGxpbmVzMiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jb2xsZWN0Q2hhbmdlKHRoZWlyKSkpO1xuXHQgICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJy0nICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG5cdCAgICAgIC8vIE1pbmUgcmVtb3ZlZCBvciBlZGl0ZWRcblx0ICAgICAgcmVtb3ZhbChodW5rLCBtaW5lLCB0aGVpcik7XG5cdCAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcblx0ICAgICAgLy8gVGhlaXIgcmVtb3ZlZCBvciBlZGl0ZWRcblx0ICAgICAgcmVtb3ZhbChodW5rLCB0aGVpciwgbWluZSwgdHJ1ZSk7XG5cdCAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50ID09PSB0aGVpckN1cnJlbnQpIHtcblx0ICAgICAgLy8gQ29udGV4dCBpZGVudGl0eVxuXHQgICAgICBodW5rLmxpbmVzLnB1c2gobWluZUN1cnJlbnQpO1xuXHQgICAgICBtaW5lLmluZGV4Kys7XG5cdCAgICAgIHRoZWlyLmluZGV4Kys7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICAvLyBDb250ZXh0IG1pc21hdGNoXG5cdCAgICAgIGNvbmZsaWN0KGh1bmssIGNvbGxlY3RDaGFuZ2UobWluZSksIGNvbGxlY3RDaGFuZ2UodGhlaXIpKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICAvLyBOb3cgcHVzaCBhbnl0aGluZyB0aGF0IG1heSBiZSByZW1haW5pbmdcblx0ICBpbnNlcnRUcmFpbGluZyhodW5rLCBtaW5lKTtcblx0ICBpbnNlcnRUcmFpbGluZyhodW5rLCB0aGVpcik7XG5cblx0ICBjYWxjTGluZUNvdW50KGh1bmspO1xuXHR9XG5cblx0ZnVuY3Rpb24gbXV0dWFsQ2hhbmdlKGh1bmssIG1pbmUsIHRoZWlyKSB7XG5cdCAgdmFyIG15Q2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UobWluZSksXG5cdCAgICAgIHRoZWlyQ2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UodGhlaXIpO1xuXG5cdCAgaWYgKGFsbFJlbW92ZXMobXlDaGFuZ2VzKSAmJiBhbGxSZW1vdmVzKHRoZWlyQ2hhbmdlcykpIHtcblx0ICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgcmVtb3ZlIGNoYW5nZXMgdGhhdCBhcmUgc3VwZXJzZXRzIG9mIG9uZSBhbm90aGVyXG5cdCAgICBpZiAoIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oMCwgX2FycmF5LmFycmF5U3RhcnRzV2l0aCkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8obXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpICYmIHNraXBSZW1vdmVTdXBlcnNldCh0aGVpciwgbXlDaGFuZ2VzLCBteUNoYW5nZXMubGVuZ3RoIC0gdGhlaXJDaGFuZ2VzLmxlbmd0aCkpIHtcblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfaHVuayRsaW5lczM7XG5cblx0ICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfaHVuayRsaW5lczMgPSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2h1bmsubGluZXMpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19odW5rJGxpbmVzMyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9teUNoYW5nZXMpKTtcblx0ICAgICAgcmV0dXJuO1xuXHQgICAgfSBlbHNlIGlmICggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfYXJyYXkuYXJyYXlTdGFydHNXaXRoKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyh0aGVpckNoYW5nZXMsIG15Q2hhbmdlcykgJiYgc2tpcFJlbW92ZVN1cGVyc2V0KG1pbmUsIHRoZWlyQ2hhbmdlcywgdGhlaXJDaGFuZ2VzLmxlbmd0aCAtIG15Q2hhbmdlcy5sZW5ndGgpKSB7XG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2h1bmskbGluZXM0O1xuXG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2h1bmskbGluZXM0ID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9odW5rLmxpbmVzKS5wdXNoLiAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovYXBwbHkgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8oIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9faHVuayRsaW5lczQgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovdGhlaXJDaGFuZ2VzKSk7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICB9IGVsc2UgaWYgKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKDAsIF9hcnJheS5hcnJheUVxdWFsKSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyhteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcykpIHtcblx0ICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2h1bmskbGluZXM1O1xuXG5cdCAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9odW5rJGxpbmVzNSA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovaHVuay5saW5lcykucHVzaC4gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2FwcGx5IC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2h1bmskbGluZXM1IC8qaXN0YW5idWwgaWdub3JlIGVuZCovLCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3RvQ29uc3VtYWJsZUFycmF5KCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL215Q2hhbmdlcykpO1xuXHQgICAgcmV0dXJuO1xuXHQgIH1cblxuXHQgIGNvbmZsaWN0KGh1bmssIG15Q2hhbmdlcywgdGhlaXJDaGFuZ2VzKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlbW92YWwoaHVuaywgbWluZSwgdGhlaXIsIHN3YXApIHtcblx0ICB2YXIgbXlDaGFuZ2VzID0gY29sbGVjdENoYW5nZShtaW5lKSxcblx0ICAgICAgdGhlaXJDaGFuZ2VzID0gY29sbGVjdENvbnRleHQodGhlaXIsIG15Q2hhbmdlcyk7XG5cdCAgaWYgKHRoZWlyQ2hhbmdlcy5tZXJnZWQpIHtcblx0ICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2h1bmskbGluZXM2O1xuXG5cdCAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9odW5rJGxpbmVzNiA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovaHVuay5saW5lcykucHVzaC4gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2FwcGx5IC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2h1bmskbGluZXM2IC8qaXN0YW5idWwgaWdub3JlIGVuZCovLCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX3RvQ29uc3VtYWJsZUFycmF5KCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL3RoZWlyQ2hhbmdlcy5tZXJnZWQpKTtcblx0ICB9IGVsc2Uge1xuXHQgICAgY29uZmxpY3QoaHVuaywgc3dhcCA/IHRoZWlyQ2hhbmdlcyA6IG15Q2hhbmdlcywgc3dhcCA/IG15Q2hhbmdlcyA6IHRoZWlyQ2hhbmdlcyk7XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gY29uZmxpY3QoaHVuaywgbWluZSwgdGhlaXIpIHtcblx0ICBodW5rLmNvbmZsaWN0ID0gdHJ1ZTtcblx0ICBodW5rLmxpbmVzLnB1c2goe1xuXHQgICAgY29uZmxpY3Q6IHRydWUsXG5cdCAgICBtaW5lOiBtaW5lLFxuXHQgICAgdGhlaXJzOiB0aGVpclxuXHQgIH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gaW5zZXJ0TGVhZGluZyhodW5rLCBpbnNlcnQsIHRoZWlyKSB7XG5cdCAgd2hpbGUgKGluc2VydC5vZmZzZXQgPCB0aGVpci5vZmZzZXQgJiYgaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuXHQgICAgdmFyIGxpbmUgPSBpbnNlcnQubGluZXNbaW5zZXJ0LmluZGV4KytdO1xuXHQgICAgaHVuay5saW5lcy5wdXNoKGxpbmUpO1xuXHQgICAgaW5zZXJ0Lm9mZnNldCsrO1xuXHQgIH1cblx0fVxuXHRmdW5jdGlvbiBpbnNlcnRUcmFpbGluZyhodW5rLCBpbnNlcnQpIHtcblx0ICB3aGlsZSAoaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuXHQgICAgdmFyIGxpbmUgPSBpbnNlcnQubGluZXNbaW5zZXJ0LmluZGV4KytdO1xuXHQgICAgaHVuay5saW5lcy5wdXNoKGxpbmUpO1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGNvbGxlY3RDaGFuZ2Uoc3RhdGUpIHtcblx0ICB2YXIgcmV0ID0gW10sXG5cdCAgICAgIG9wZXJhdGlvbiA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XVswXTtcblx0ICB3aGlsZSAoc3RhdGUuaW5kZXggPCBzdGF0ZS5saW5lcy5sZW5ndGgpIHtcblx0ICAgIHZhciBsaW5lID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdO1xuXG5cdCAgICAvLyBHcm91cCBhZGRpdGlvbnMgdGhhdCBhcmUgaW1tZWRpYXRlbHkgYWZ0ZXIgc3VidHJhY3Rpb25zIGFuZCB0cmVhdCB0aGVtIGFzIG9uZSBcImF0b21pY1wiIG1vZGlmeSBjaGFuZ2UuXG5cdCAgICBpZiAob3BlcmF0aW9uID09PSAnLScgJiYgbGluZVswXSA9PT0gJysnKSB7XG5cdCAgICAgIG9wZXJhdGlvbiA9ICcrJztcblx0ICAgIH1cblxuXHQgICAgaWYgKG9wZXJhdGlvbiA9PT0gbGluZVswXSkge1xuXHQgICAgICByZXQucHVzaChsaW5lKTtcblx0ICAgICAgc3RhdGUuaW5kZXgrKztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGJyZWFrO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiByZXQ7XG5cdH1cblx0ZnVuY3Rpb24gY29sbGVjdENvbnRleHQoc3RhdGUsIG1hdGNoQ2hhbmdlcykge1xuXHQgIHZhciBjaGFuZ2VzID0gW10sXG5cdCAgICAgIG1lcmdlZCA9IFtdLFxuXHQgICAgICBtYXRjaEluZGV4ID0gMCxcblx0ICAgICAgY29udGV4dENoYW5nZXMgPSBmYWxzZSxcblx0ICAgICAgY29uZmxpY3RlZCA9IGZhbHNlO1xuXHQgIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCAmJiBzdGF0ZS5pbmRleCA8IHN0YXRlLmxpbmVzLmxlbmd0aCkge1xuXHQgICAgdmFyIGNoYW5nZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XSxcblx0ICAgICAgICBtYXRjaCA9IG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4XTtcblxuXHQgICAgLy8gT25jZSB3ZSd2ZSBoaXQgb3VyIGFkZCwgdGhlbiB3ZSBhcmUgZG9uZVxuXHQgICAgaWYgKG1hdGNoWzBdID09PSAnKycpIHtcblx0ICAgICAgYnJlYWs7XG5cdCAgICB9XG5cblx0ICAgIGNvbnRleHRDaGFuZ2VzID0gY29udGV4dENoYW5nZXMgfHwgY2hhbmdlWzBdICE9PSAnICc7XG5cblx0ICAgIG1lcmdlZC5wdXNoKG1hdGNoKTtcblx0ICAgIG1hdGNoSW5kZXgrKztcblxuXHQgICAgLy8gQ29uc3VtZSBhbnkgYWRkaXRpb25zIGluIHRoZSBvdGhlciBibG9jayBhcyBhIGNvbmZsaWN0IHRvIGF0dGVtcHRcblx0ICAgIC8vIHRvIHB1bGwgaW4gdGhlIHJlbWFpbmluZyBjb250ZXh0IGFmdGVyIHRoaXNcblx0ICAgIGlmIChjaGFuZ2VbMF0gPT09ICcrJykge1xuXHQgICAgICBjb25mbGljdGVkID0gdHJ1ZTtcblxuXHQgICAgICB3aGlsZSAoY2hhbmdlWzBdID09PSAnKycpIHtcblx0ICAgICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcblx0ICAgICAgICBjaGFuZ2UgPSBzdGF0ZS5saW5lc1srK3N0YXRlLmluZGV4XTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBpZiAobWF0Y2guc3Vic3RyKDEpID09PSBjaGFuZ2Uuc3Vic3RyKDEpKSB7XG5cdCAgICAgIGNoYW5nZXMucHVzaChjaGFuZ2UpO1xuXHQgICAgICBzdGF0ZS5pbmRleCsrO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgY29uZmxpY3RlZCA9IHRydWU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgaWYgKChtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF0gfHwgJycpWzBdID09PSAnKycgJiYgY29udGV4dENoYW5nZXMpIHtcblx0ICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuXHQgIH1cblxuXHQgIGlmIChjb25mbGljdGVkKSB7XG5cdCAgICByZXR1cm4gY2hhbmdlcztcblx0ICB9XG5cblx0ICB3aGlsZSAobWF0Y2hJbmRleCA8IG1hdGNoQ2hhbmdlcy5sZW5ndGgpIHtcblx0ICAgIG1lcmdlZC5wdXNoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4KytdKTtcblx0ICB9XG5cblx0ICByZXR1cm4ge1xuXHQgICAgbWVyZ2VkOiBtZXJnZWQsXG5cdCAgICBjaGFuZ2VzOiBjaGFuZ2VzXG5cdCAgfTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFsbFJlbW92ZXMoY2hhbmdlcykge1xuXHQgIHJldHVybiBjaGFuZ2VzLnJlZHVjZShmdW5jdGlvbiAocHJldiwgY2hhbmdlKSB7XG5cdCAgICByZXR1cm4gcHJldiAmJiBjaGFuZ2VbMF0gPT09ICctJztcblx0ICB9LCB0cnVlKTtcblx0fVxuXHRmdW5jdGlvbiBza2lwUmVtb3ZlU3VwZXJzZXQoc3RhdGUsIHJlbW92ZUNoYW5nZXMsIGRlbHRhKSB7XG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7XG5cdCAgICB2YXIgY2hhbmdlQ29udGVudCA9IHJlbW92ZUNoYW5nZXNbcmVtb3ZlQ2hhbmdlcy5sZW5ndGggLSBkZWx0YSArIGldLnN1YnN0cigxKTtcblx0ICAgIGlmIChzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleCArIGldICE9PSAnICcgKyBjaGFuZ2VDb250ZW50KSB7XG5cdCAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBzdGF0ZS5pbmRleCArPSBkZWx0YTtcblx0ICByZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNhbGNPbGROZXdMaW5lQ291bnQobGluZXMpIHtcblx0ICB2YXIgb2xkTGluZXMgPSAwO1xuXHQgIHZhciBuZXdMaW5lcyA9IDA7XG5cblx0ICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG5cdCAgICBpZiAodHlwZW9mIGxpbmUgIT09ICdzdHJpbmcnKSB7XG5cdCAgICAgIHZhciBteUNvdW50ID0gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lLm1pbmUpO1xuXHQgICAgICB2YXIgdGhlaXJDb3VudCA9IGNhbGNPbGROZXdMaW5lQ291bnQobGluZS50aGVpcnMpO1xuXG5cdCAgICAgIGlmIChvbGRMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgaWYgKG15Q291bnQub2xkTGluZXMgPT09IHRoZWlyQ291bnQub2xkTGluZXMpIHtcblx0ICAgICAgICAgIG9sZExpbmVzICs9IG15Q291bnQub2xkTGluZXM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIG9sZExpbmVzID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgaWYgKG15Q291bnQubmV3TGluZXMgPT09IHRoZWlyQ291bnQubmV3TGluZXMpIHtcblx0ICAgICAgICAgIG5ld0xpbmVzICs9IG15Q291bnQubmV3TGluZXM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIG5ld0xpbmVzID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQgJiYgKGxpbmVbMF0gPT09ICcrJyB8fCBsaW5lWzBdID09PSAnICcpKSB7XG5cdCAgICAgICAgbmV3TGluZXMrKztcblx0ICAgICAgfVxuXHQgICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCAmJiAobGluZVswXSA9PT0gJy0nIHx8IGxpbmVbMF0gPT09ICcgJykpIHtcblx0ICAgICAgICBvbGRMaW5lcysrO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSk7XG5cblx0ICByZXR1cm4geyBvbGRMaW5lczogb2xkTGluZXMsIG5ld0xpbmVzOiBuZXdMaW5lcyB9O1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWFJqYUM5dFpYSm5aUzVxY3lKZExDSnVZVzFsY3lJNld5SmpZV3hqVEdsdVpVTnZkVzUwSWl3aWJXVnlaMlVpTENKb2RXNXJJaXdpWTJGc1kwOXNaRTVsZDB4cGJtVkRiM1Z1ZENJc0lteHBibVZ6SWl3aWIyeGtUR2x1WlhNaUxDSnVaWGRNYVc1bGN5SXNJblZ1WkdWbWFXNWxaQ0lzSW0xcGJtVWlMQ0owYUdWcGNuTWlMQ0ppWVhObElpd2liRzloWkZCaGRHTm9JaXdpY21WMElpd2lhVzVrWlhnaUxDSnVaWGRHYVd4bFRtRnRaU0lzSW1acGJHVk9ZVzFsUTJoaGJtZGxaQ0lzSW05c1pFWnBiR1ZPWVcxbElpd2liMnhrU0dWaFpHVnlJaXdpYm1WM1NHVmhaR1Z5SWl3aWMyVnNaV04wUm1sbGJHUWlMQ0pvZFc1cmN5SXNJbTFwYm1WSmJtUmxlQ0lzSW5Sb1pXbHljMGx1WkdWNElpd2liV2x1WlU5bVpuTmxkQ0lzSW5Sb1pXbHljMDltWm5ObGRDSXNJbXhsYm1kMGFDSXNJbTFwYm1WRGRYSnlaVzUwSWl3aWIyeGtVM1JoY25RaUxDSkpibVpwYm1sMGVTSXNJblJvWldseWMwTjFjbkpsYm5RaUxDSm9kVzVyUW1WbWIzSmxJaXdpY0hWemFDSXNJbU5zYjI1bFNIVnVheUlzSW0xbGNtZGxaRWgxYm1zaUxDSk5ZWFJvSWl3aWJXbHVJaXdpYm1WM1UzUmhjblFpTENKdFpYSm5aVXhwYm1Weklpd2ljR0Z5WVcwaUxDSjBaWE4wSWl3aVJYSnliM0lpTENKd1lYUmphQ0lzSW1OdmJtWnNhV04wSWl3aVkyaGxZMnNpTENKdlptWnpaWFFpTENKdGFXNWxUR2x1WlhNaUxDSjBhR1ZwY2s5bVpuTmxkQ0lzSW5Sb1pXbHlUR2x1WlhNaUxDSjBhR1ZwY2lJc0ltbHVjMlZ5ZEV4bFlXUnBibWNpTENKMGFHVnBja04xY25KbGJuUWlMQ0p0ZFhSMVlXeERhR0Z1WjJVaUxDSmpiMnhzWldOMFEyaGhibWRsSWl3aWNtVnRiM1poYkNJc0ltbHVjMlZ5ZEZSeVlXbHNhVzVuSWl3aWJYbERhR0Z1WjJWeklpd2lkR2hsYVhKRGFHRnVaMlZ6SWl3aVlXeHNVbVZ0YjNabGN5SXNJbk5yYVhCU1pXMXZkbVZUZFhCbGNuTmxkQ0lzSW5OM1lYQWlMQ0pqYjJ4c1pXTjBRMjl1ZEdWNGRDSXNJbTFsY21kbFpDSXNJbWx1YzJWeWRDSXNJbXhwYm1VaUxDSnpkR0YwWlNJc0ltOXdaWEpoZEdsdmJpSXNJbTFoZEdOb1EyaGhibWRsY3lJc0ltTm9ZVzVuWlhNaUxDSnRZWFJqYUVsdVpHVjRJaXdpWTI5dWRHVjRkRU5vWVc1blpYTWlMQ0pqYjI1bWJHbGpkR1ZrSWl3aVkyaGhibWRsSWl3aWJXRjBZMmdpTENKemRXSnpkSElpTENKeVpXUjFZMlVpTENKd2NtVjJJaXdpY21WdGIzWmxRMmhoYm1kbGN5SXNJbVJsYkhSaElpd2lhU0lzSW1Ob1lXNW5aVU52Ym5SbGJuUWlMQ0ptYjNKRllXTm9JaXdpYlhsRGIzVnVkQ0lzSW5Sb1pXbHlRMjkxYm5RaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3p0blEwRkxaMEpCTEdFc1IwRkJRVUVzWVR0NVJFRm5Ra0ZETEVzc1IwRkJRVUVzU3pzN1FVRnlRbWhDT3p0QlFVTkJPenRCUVVWQk96czdPM1ZDUVVWUExGTkJRVk5FTEdGQlFWUXNRMEZCZFVKRkxFbEJRWFpDTEVWQlFUWkNPMEZCUVVFc05rVkJRMHhETEc5Q1FVRnZRa1FzUzBGQlMwVXNTMEZCZWtJc1EwRkVTenRCUVVGQkxFMUJRek5DUXl4UlFVUXlRaXgzUWtGRE0wSkJMRkZCUkRKQ08wRkJRVUVzVFVGRGFrSkRMRkZCUkdsQ0xIZENRVU5xUWtFc1VVRkVhVUk3TzBGQlIyeERMRTFCUVVsRUxHRkJRV0ZGTEZOQlFXcENMRVZCUVRSQ08wRkJRekZDVEN4VFFVRkxSeXhSUVVGTUxFZEJRV2RDUVN4UlFVRm9RanRCUVVORUxFZEJSa1FzVFVGRlR6dEJRVU5NTEZkQlFVOUlMRXRCUVV0SExGRkJRVm83UVVGRFJEczdRVUZGUkN4TlFVRkpReXhoUVVGaFF5eFRRVUZxUWl4RlFVRTBRanRCUVVNeFFrd3NVMEZCUzBrc1VVRkJUQ3hIUVVGblFrRXNVVUZCYUVJN1FVRkRSQ3hIUVVaRUxFMUJSVTg3UVVGRFRDeFhRVUZQU2l4TFFVRkxTU3hSUVVGYU8wRkJRMFE3UVVGRFJqczdRVUZGVFN4VFFVRlRUQ3hMUVVGVUxFTkJRV1ZQTEVsQlFXWXNSVUZCY1VKRExFMUJRWEpDTEVWQlFUWkNReXhKUVVFM1FpeEZRVUZ0UXp0QlFVTjRRMFlzVTBGQlQwY3NWVUZCVlVnc1NVRkJWaXhGUVVGblFrVXNTVUZCYUVJc1EwRkJVRHRCUVVOQlJDeFhRVUZUUlN4VlFVRlZSaXhOUVVGV0xFVkJRV3RDUXl4SlFVRnNRaXhEUVVGVU96dEJRVVZCTEUxQlFVbEZMRTFCUVUwc1JVRkJWanM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVN4TlFVRkpTaXhMUVVGTFN5eExRVUZNTEVsQlFXTktMRTlCUVU5SkxFdEJRWHBDTEVWQlFXZERPMEZCUXpsQ1JDeFJRVUZKUXl4TFFVRktMRWRCUVZsTUxFdEJRVXRMTEV0QlFVd3NTVUZCWTBvc1QwRkJUMGtzUzBGQmFrTTdRVUZEUkRzN1FVRkZSQ3hOUVVGSlRDeExRVUZMVFN4WFFVRk1MRWxCUVc5Q1RDeFBRVUZQU3l4WFFVRXZRaXhGUVVFMFF6dEJRVU14UXl4UlFVRkpMRU5CUVVORExHZENRVUZuUWxBc1NVRkJhRUlzUTBGQlRDeEZRVUUwUWp0QlFVTXhRanRCUVVOQlNTeFZRVUZKU1N4WFFVRktMRWRCUVd0Q1VDeFBRVUZQVHl4WFFVRlFMRWxCUVhOQ1VpeExRVUZMVVN4WFFVRTNRenRCUVVOQlNpeFZRVUZKUlN4WFFVRktMRWRCUVd0Q1RDeFBRVUZQU3l4WFFVRlFMRWxCUVhOQ1RpeExRVUZMVFN4WFFVRTNRenRCUVVOQlJpeFZRVUZKU3l4VFFVRktMRWRCUVdkQ1VpeFBRVUZQVVN4VFFVRlFMRWxCUVc5Q1ZDeExRVUZMVXl4VFFVRjZRenRCUVVOQlRDeFZRVUZKVFN4VFFVRktMRWRCUVdkQ1ZDeFBRVUZQVXl4VFFVRlFMRWxCUVc5Q1ZpeExRVUZMVlN4VFFVRjZRenRCUVVORUxFdEJUa1FzVFVGTlR5eEpRVUZKTEVOQlFVTklMR2RDUVVGblFrNHNUVUZCYUVJc1EwRkJUQ3hGUVVFNFFqdEJRVU51UXp0QlFVTkJSeXhWUVVGSlNTeFhRVUZLTEVkQlFXdENVaXhMUVVGTFVTeFhRVUYyUWp0QlFVTkJTaXhWUVVGSlJTeFhRVUZLTEVkQlFXdENUaXhMUVVGTFRTeFhRVUYyUWp0QlFVTkJSaXhWUVVGSlN5eFRRVUZLTEVkQlFXZENWQ3hMUVVGTFV5eFRRVUZ5UWp0QlFVTkJUQ3hWUVVGSlRTeFRRVUZLTEVkQlFXZENWaXhMUVVGTFZTeFRRVUZ5UWp0QlFVTkVMRXRCVGswc1RVRk5RVHRCUVVOTU8wRkJRMEZPTEZWQlFVbEpMRmRCUVVvc1IwRkJhMEpITEZsQlFWbFFMRWRCUVZvc1JVRkJhVUpLTEV0QlFVdFJMRmRCUVhSQ0xFVkJRVzFEVUN4UFFVRlBUeXhYUVVFeFF5eERRVUZzUWp0QlFVTkJTaXhWUVVGSlJTeFhRVUZLTEVkQlFXdENTeXhaUVVGWlVDeEhRVUZhTEVWQlFXbENTaXhMUVVGTFRTeFhRVUYwUWl4RlFVRnRRMHdzVDBGQlQwc3NWMEZCTVVNc1EwRkJiRUk3UVVGRFFVWXNWVUZCU1Vzc1UwRkJTaXhIUVVGblFrVXNXVUZCV1ZBc1IwRkJXaXhGUVVGcFFrb3NTMEZCUzFNc1UwRkJkRUlzUlVGQmFVTlNMRTlCUVU5UkxGTkJRWGhETEVOQlFXaENPMEZCUTBGTUxGVkJRVWxOTEZOQlFVb3NSMEZCWjBKRExGbEJRVmxRTEVkQlFWb3NSVUZCYVVKS0xFdEJRVXRWTEZOQlFYUkNMRVZCUVdsRFZDeFBRVUZQVXl4VFFVRjRReXhEUVVGb1FqdEJRVU5FTzBGQlEwWTdPMEZCUlVST0xFMUJRVWxSTEV0QlFVb3NSMEZCV1N4RlFVRmFPenRCUVVWQkxFMUJRVWxETEZsQlFWa3NRMEZCYUVJN1FVRkJRU3hOUVVOSlF5eGpRVUZqTEVOQlJHeENPMEZCUVVFc1RVRkZTVU1zWVVGQllTeERRVVpxUWp0QlFVRkJMRTFCUjBsRExHVkJRV1VzUTBGSWJrSTdPMEZCUzBFc1UwRkJUMGdzV1VGQldXSXNTMEZCUzFrc1MwRkJUQ3hEUVVGWFN5eE5RVUYyUWl4SlFVRnBRMGdzWTBGQlkySXNUMEZCVDFjc1MwRkJVQ3hEUVVGaFN5eE5RVUZ1UlN4RlFVRXlSVHRCUVVONlJTeFJRVUZKUXl4alFVRmpiRUlzUzBGQlMxa3NTMEZCVEN4RFFVRlhReXhUUVVGWUxFdEJRWGxDTEVWQlFVTk5MRlZCUVZWRExGRkJRVmdzUlVGQk0wTTdRVUZCUVN4UlFVTkpReXhuUWtGQlowSndRaXhQUVVGUFZ5eExRVUZRTEVOQlFXRkZMRmRCUVdJc1MwRkJOa0lzUlVGQlEwc3NWVUZCVlVNc1VVRkJXQ3hGUVVScVJEczdRVUZIUVN4UlFVRkpSU3hYUVVGWFNpeFhRVUZZTEVWQlFYZENSeXhoUVVGNFFpeERRVUZLTEVWQlFUUkRPMEZCUXpGRE8wRkJRMEZxUWl4VlFVRkpVU3hMUVVGS0xFTkJRVlZYTEVsQlFWWXNRMEZCWlVNc1ZVRkJWVTRzVjBGQlZpeEZRVUYxUWtnc1ZVRkJka0lzUTBGQlpqdEJRVU5CUmp0QlFVTkJSeXh6UWtGQlowSkZMRmxCUVZsd1FpeFJRVUZhTEVkQlFYVkNiMElzV1VGQldYSkNMRkZCUVc1RU8wRkJRMFFzUzBGTVJDeE5RVXRQTEVsQlFVbDVRaXhYUVVGWFJDeGhRVUZZTEVWQlFUQkNTQ3hYUVVFeFFpeERRVUZLTEVWQlFUUkRPMEZCUTJwRU8wRkJRMEZrTEZWQlFVbFJMRXRCUVVvc1EwRkJWVmNzU1VGQlZpeERRVUZsUXl4VlFVRlZTQ3hoUVVGV0xFVkJRWGxDVEN4WlFVRjZRaXhEUVVGbU8wRkJRMEZHTzBGQlEwRkRMRzlDUVVGalRTeGpRVUZqZGtJc1VVRkJaQ3hIUVVGNVFuVkNMR05CUVdONFFpeFJRVUZ5UkR0QlFVTkVMRXRCVEUwc1RVRkxRVHRCUVVOTU8wRkJRMEVzVlVGQlNUUkNMR0ZCUVdFN1FVRkRaazRzYTBKQlFWVlBMRXRCUVV0RExFZEJRVXdzUTBGQlUxUXNXVUZCV1VNc1VVRkJja0lzUlVGQkswSkZMR05CUVdOR0xGRkJRVGRETEVOQlJFczdRVUZGWm5SQ0xHdENRVUZWTEVOQlJrczdRVUZIWml0Q0xHdENRVUZWUml4TFFVRkxReXhIUVVGTUxFTkJRVk5VTEZsQlFWbFZMRkZCUVZvc1IwRkJkVUppTEZWQlFXaERMRVZCUVRSRFRTeGpRVUZqUml4UlFVRmtMRWRCUVhsQ1NDeFpRVUZ5UlN4RFFVaExPMEZCU1dac1FpeHJRa0ZCVlN4RFFVcExPMEZCUzJaR0xHVkJRVTg3UVVGTVVTeFBRVUZxUWp0QlFVOUJhVU1zYVVKQlFWZEtMRlZCUVZnc1JVRkJkVUpRTEZsQlFWbERMRkZCUVc1RExFVkJRVFpEUkN4WlFVRlpkRUlzUzBGQmVrUXNSVUZCWjBWNVFpeGpRVUZqUml4UlFVRTVSU3hGUVVGM1JrVXNZMEZCWTNwQ0xFdEJRWFJITzBGQlEwRnJRanRCUVVOQlJEczdRVUZGUVZRc1ZVRkJTVkVzUzBGQlNpeERRVUZWVnl4SlFVRldMRU5CUVdWRkxGVkJRV1k3UVVGRFJEdEJRVU5HT3p0QlFVVkVMRk5CUVU5eVFpeEhRVUZRTzBGQlEwUTdPMEZCUlVRc1UwRkJVMFFzVTBGQlZDeERRVUZ0UWpKQ0xFdEJRVzVDTEVWQlFUQkNOVUlzU1VGQk1VSXNSVUZCWjBNN1FVRkRPVUlzVFVGQlNTeFBRVUZQTkVJc1MwRkJVQ3hMUVVGcFFpeFJRVUZ5UWl4RlFVRXJRanRCUVVNM1FpeFJRVUZKTEU5QlFVOURMRWxCUVZBc1EwRkJXVVFzUzBGQldpeExRVUYxUWl4WFFVRlhReXhKUVVGWUxFTkJRV2RDUkN4TFFVRm9RaXhEUVVFelFpeEZRVUZ2UkR0QlFVTnNSQ3hoUVVGUExIbEZRVUZYUVN4TFFVRllMRVZCUVd0Q0xFTkJRV3hDTzBGQlFWQTdRVUZEUkRzN1FVRkZSQ3hSUVVGSkxFTkJRVU0xUWl4SlFVRk1MRVZCUVZjN1FVRkRWQ3haUVVGTkxFbEJRVWs0UWl4TFFVRktMRU5CUVZVc2EwUkJRVllzUTBGQlRqdEJRVU5FTzBGQlEwUXNWMEZCVHl3clJVRkJaMEpxUXl4VFFVRm9RaXhGUVVFeVFrRXNVMEZCTTBJc1JVRkJjME5ITEVsQlFYUkRMRVZCUVRSRE5FSXNTMEZCTlVNN1FVRkJVRHRCUVVORU96dEJRVVZFTEZOQlFVOUJMRXRCUVZBN1FVRkRSRHM3UVVGRlJDeFRRVUZUZGtJc1pVRkJWQ3hEUVVGNVFqQkNMRXRCUVhwQ0xFVkJRV2RETzBGQlF6bENMRk5CUVU5QkxFMUJRVTB6UWl4WFFVRk9MRWxCUVhGQ01rSXNUVUZCVFROQ0xGZEJRVTRzUzBGQmMwSXlRaXhOUVVGTmVrSXNWMEZCZUVRN1FVRkRSRHM3UVVGRlJDeFRRVUZUUnl4WFFVRlVMRU5CUVhGQ1RpeExRVUZ5UWl4RlFVRTBRa3dzU1VGQk5VSXNSVUZCYTBORExFMUJRV3hETEVWQlFUQkRPMEZCUTNoRExFMUJRVWxFTEZOQlFWTkRMRTFCUVdJc1JVRkJjVUk3UVVGRGJrSXNWMEZCVDBRc1NVRkJVRHRCUVVORUxFZEJSa1FzVFVGRlR6dEJRVU5NU3l4VlFVRk5Oa0lzVVVGQlRpeEhRVUZwUWl4SlFVRnFRanRCUVVOQkxGZEJRVThzUlVGQlEyeERMRlZCUVVRc1JVRkJUME1zWTBGQlVDeEZRVUZRTzBGQlEwUTdRVUZEUmpzN1FVRkZSQ3hUUVVGVGNVSXNWVUZCVkN4RFFVRnZRbE1zU1VGQmNFSXNSVUZCTUVKSkxFdEJRVEZDTEVWQlFXbERPMEZCUXk5Q0xGTkJRVTlLTEV0QlFVdGFMRkZCUVV3c1IwRkJaMEpuUWl4TlFVRk5hRUlzVVVGQmRFSXNTVUZEUkZrc1MwRkJTMW9zVVVGQlRDeEhRVUZuUWxrc1MwRkJTMnhETEZGQlFYUkNMRWRCUVd0RGMwTXNUVUZCVFdoQ0xGRkJSRGRETzBGQlJVUTdPMEZCUlVRc1UwRkJVMHNzVTBGQlZDeERRVUZ0UWpsQ0xFbEJRVzVDTEVWQlFYbENNRU1zVFVGQmVrSXNSVUZCYVVNN1FVRkRMMElzVTBGQlR6dEJRVU5NYWtJc1kwRkJWWHBDTEV0QlFVdDVRaXhSUVVSV0xFVkJRMjlDZEVJc1ZVRkJWVWdzUzBGQlMwY3NVVUZFYmtNN1FVRkZUQ3RDTEdOQlFWVnNReXhMUVVGTGEwTXNVVUZCVEN4SFFVRm5RbEVzVFVGR2NrSXNSVUZGTmtKMFF5eFZRVUZWU2l4TFFVRkxTU3hSUVVZMVF6dEJRVWRNUml4WFFVRlBSaXhMUVVGTFJUdEJRVWhRTEVkQlFWQTdRVUZMUkRzN1FVRkZSQ3hUUVVGVGFVTXNWVUZCVkN4RFFVRnZRbTVETEVsQlFYQkNMRVZCUVRCQ2NVSXNWVUZCTVVJc1JVRkJjME56UWl4VFFVRjBReXhGUVVGcFJFTXNWMEZCYWtRc1JVRkJPRVJETEZWQlFUbEVMRVZCUVRCRk8wRkJRM2hGTzBGQlEwRTdRVUZEUVN4TlFVRkpka01zVDBGQlR5eEZRVUZEYjBNc1VVRkJVWEpDTEZWQlFWUXNSVUZCY1VKdVFpeFBRVUZQZVVNc1UwRkJOVUlzUlVGQmRVTm9ReXhQUVVGUExFTkJRVGxETEVWQlFWZzdRVUZCUVN4TlFVTkpiVU1zVVVGQlVTeEZRVUZEU2l4UlFVRlJSU3hYUVVGVUxFVkJRWE5DTVVNc1QwRkJUekpETEZWQlFUZENMRVZCUVhsRGJFTXNUMEZCVHl4RFFVRm9SQ3hGUVVSYU96dEJRVWRCTzBGQlEwRnZReXhuUWtGQll5OURMRWxCUVdRc1JVRkJiMEpOTEVsQlFYQkNMRVZCUVRCQ2QwTXNTMEZCTVVJN1FVRkRRVU1zWjBKQlFXTXZReXhKUVVGa0xFVkJRVzlDT0VNc1MwRkJjRUlzUlVGQk1rSjRReXhKUVVFelFqczdRVUZGUVR0QlFVTkJMRk5CUVU5QkxFdEJRVXRMTEV0QlFVd3NSMEZCWVV3c1MwRkJTMG9zUzBGQlRDeERRVUZYY1VJc1RVRkJlRUlzU1VGQmEwTjFRaXhOUVVGTmJrTXNTMEZCVGl4SFFVRmpiVU1zVFVGQlRUVkRMRXRCUVU0c1EwRkJXWEZDTEUxQlFXNUZMRVZCUVRKRk8wRkJRM3BGTEZGQlFVbERMR05CUVdOc1FpeExRVUZMU2l4TFFVRk1MRU5CUVZkSkxFdEJRVXRMTEV0QlFXaENMRU5CUVd4Q08wRkJRVUVzVVVGRFNYRkRMR1ZCUVdWR0xFMUJRVTAxUXl4TFFVRk9MRU5CUVZrMFF5eE5RVUZOYmtNc1MwRkJiRUlzUTBGRWJrSTdPMEZCUjBFc1VVRkJTU3hEUVVGRFlTeFpRVUZaTEVOQlFWb3NUVUZCYlVJc1IwRkJia0lzU1VGQk1FSkJMRmxCUVZrc1EwRkJXaXhOUVVGdFFpeEhRVUU1UXl4TlFVTkpkMElzWVVGQllTeERRVUZpTEUxQlFXOUNMRWRCUVhCQ0xFbEJRVEpDUVN4aFFVRmhMRU5CUVdJc1RVRkJiMElzUjBGRWJrUXNRMEZCU2l4RlFVTTJSRHRCUVVNelJEdEJRVU5CUXl4dFFrRkJZV3BFTEVsQlFXSXNSVUZCYlVKTkxFbEJRVzVDTEVWQlFYbENkME1zUzBGQmVrSTdRVUZEUkN4TFFVcEVMRTFCU1U4c1NVRkJTWFJDTEZsQlFWa3NRMEZCV2l4TlFVRnRRaXhIUVVGdVFpeEpRVUV3UW5kQ0xHRkJRV0VzUTBGQllpeE5RVUZ2UWl4SFFVRnNSQ3hGUVVGMVJEdEJRVUZCT3p0QlFVRkJMRGhDUVVNMVJEdEJRVU5CTERCRlFVRkxPVU1zUzBGQlRDeEZRVUZYTWtJc1NVRkJXQ3cwVEVGQmIwSnhRaXhqUVVGak5VTXNTVUZCWkN4RFFVRndRanRCUVVORUxFdEJTRTBzVFVGSFFTeEpRVUZKTUVNc1lVRkJZU3hEUVVGaUxFMUJRVzlDTEVkQlFYQkNMRWxCUVRKQ2VFSXNXVUZCV1N4RFFVRmFMRTFCUVcxQ0xFZEJRV3hFTEVWQlFYVkVPMEZCUVVFN08wRkJRVUVzT0VKQlF6VkVPMEZCUTBFc01rVkJRVXQwUWl4TFFVRk1MRVZCUVZjeVFpeEpRVUZZTERaTVFVRnZRbkZDTEdOQlFXTktMRXRCUVdRc1EwRkJjRUk3UVVGRFJDeExRVWhOTEUxQlIwRXNTVUZCU1hSQ0xGbEJRVmtzUTBGQldpeE5RVUZ0UWl4SFFVRnVRaXhKUVVFd1FuZENMR0ZCUVdFc1EwRkJZaXhOUVVGdlFpeEhRVUZzUkN4RlFVRjFSRHRCUVVNMVJEdEJRVU5CUnl4alFVRlJia1FzU1VGQlVpeEZRVUZqVFN4SlFVRmtMRVZCUVc5Q2QwTXNTMEZCY0VJN1FVRkRSQ3hMUVVoTkxFMUJSMEVzU1VGQlNVVXNZVUZCWVN4RFFVRmlMRTFCUVc5Q0xFZEJRWEJDTEVsQlFUSkNlRUlzV1VGQldTeERRVUZhTEUxQlFXMUNMRWRCUVd4RUxFVkJRWFZFTzBGQlF6VkVPMEZCUTBFeVFpeGpRVUZSYmtRc1NVRkJVaXhGUVVGak9FTXNTMEZCWkN4RlFVRnhRbmhETEVsQlFYSkNMRVZCUVRKQ0xFbEJRVE5DTzBGQlEwUXNTMEZJVFN4TlFVZEJMRWxCUVVsclFpeG5Ra0ZCWjBKM1FpeFpRVUZ3UWl4RlFVRnJRenRCUVVOMlF6dEJRVU5CYUVRc1YwRkJTMFVzUzBGQlRDeERRVUZYTWtJc1NVRkJXQ3hEUVVGblFrd3NWMEZCYUVJN1FVRkRRV3hDTEZkQlFVdExMRXRCUVV3N1FVRkRRVzFETEZsQlFVMXVReXhMUVVGT08wRkJRMFFzUzBGTVRTeE5RVXRCTzBGQlEwdzdRVUZEUVRaQ0xHVkJRVk40UXl4SlFVRlVMRVZCUVdWclJDeGpRVUZqTlVNc1NVRkJaQ3hEUVVGbUxFVkJRVzlETkVNc1kwRkJZMG9zUzBGQlpDeERRVUZ3UXp0QlFVTkVPMEZCUTBZN08wRkJSVVE3UVVGRFFVMHNhVUpCUVdWd1JDeEpRVUZtTEVWQlFYRkNUU3hKUVVGeVFqdEJRVU5CT0VNc2FVSkJRV1Z3UkN4SlFVRm1MRVZCUVhGQ09FTXNTMEZCY2tJN08wRkJSVUZvUkN4blFrRkJZMFVzU1VGQlpEdEJRVU5FT3p0QlFVVkVMRk5CUVZOcFJDeFpRVUZVTEVOQlFYTkNha1FzU1VGQmRFSXNSVUZCTkVKTkxFbEJRVFZDTEVWQlFXdERkME1zUzBGQmJFTXNSVUZCZVVNN1FVRkRka01zVFVGQlNVOHNXVUZCV1Vnc1kwRkJZelZETEVsQlFXUXNRMEZCYUVJN1FVRkJRU3hOUVVOSlowUXNaVUZCWlVvc1kwRkJZMG9zUzBGQlpDeERRVVJ1UWpzN1FVRkhRU3hOUVVGSlV5eFhRVUZYUml4VFFVRllMRXRCUVhsQ1JTeFhRVUZYUkN4WlFVRllMRU5CUVRkQ0xFVkJRWFZFTzBGQlEzSkVPMEZCUTBFc1VVRkJTU3c0UlVGQlowSkVMRk5CUVdoQ0xFVkJRVEpDUXl4WlFVRXpRaXhMUVVOSFJTeHRRa0ZCYlVKV0xFdEJRVzVDTEVWQlFUQkNUeXhUUVVFeFFpeEZRVUZ4UTBFc1ZVRkJWVGxDTEUxQlFWWXNSMEZCYlVJclFpeGhRVUZoTDBJc1RVRkJja1VzUTBGRVVDeEZRVU54Ump0QlFVRkJPenRCUVVGQkxEWkNRVU51Uml4elJVRkJTM0pDTEV0QlFVd3NSVUZCVnpKQ0xFbEJRVmdzTmt4QlFXOUNkMElzVTBGQmNFSTdRVUZEUVR0QlFVTkVMRXRCU2tRc1RVRkpUeXhKUVVGSkxEaEZRVUZuUWtNc1dVRkJhRUlzUlVGQk9FSkVMRk5CUVRsQ0xFdEJRMHBITEcxQ1FVRnRRbXhFTEVsQlFXNUNMRVZCUVhsQ1owUXNXVUZCZWtJc1JVRkJkVU5CTEdGQlFXRXZRaXhOUVVGaUxFZEJRWE5DT0VJc1ZVRkJWVGxDTEUxQlFYWkZMRU5CUkVFc1JVRkRaMFk3UVVGQlFUczdRVUZCUVN3MlFrRkRja1lzYzBWQlFVdHlRaXhMUVVGTUxFVkJRVmN5UWl4SlFVRllMRFpNUVVGdlFubENMRmxCUVhCQ08wRkJRMEU3UVVGRFJEdEJRVU5HTEVkQldFUXNUVUZYVHl4SlFVRkpMSGxGUVVGWFJDeFRRVUZZTEVWQlFYTkNReXhaUVVGMFFpeERRVUZLTEVWQlFYbERPMEZCUVVFN08wRkJRVUVzTWtKQlF6bERMSE5GUVVGTGNFUXNTMEZCVEN4RlFVRlhNa0lzU1VGQldDdzJURUZCYjBKM1FpeFRRVUZ3UWp0QlFVTkJPMEZCUTBRN08wRkJSVVJpTEZkQlFWTjRReXhKUVVGVUxFVkJRV1Z4UkN4VFFVRm1MRVZCUVRCQ1F5eFpRVUV4UWp0QlFVTkVPenRCUVVWRUxGTkJRVk5JTEU5QlFWUXNRMEZCYVVKdVJDeEpRVUZxUWl4RlFVRjFRazBzU1VGQmRrSXNSVUZCTmtKM1F5eExRVUUzUWl4RlFVRnZRMWNzU1VGQmNFTXNSVUZCTUVNN1FVRkRlRU1zVFVGQlNVb3NXVUZCV1Vnc1kwRkJZelZETEVsQlFXUXNRMEZCYUVJN1FVRkJRU3hOUVVOSlowUXNaVUZCWlVrc1pVRkJaVm9zUzBGQlppeEZRVUZ6UWs4c1UwRkJkRUlzUTBGRWJrSTdRVUZGUVN4TlFVRkpReXhoUVVGaFN5eE5RVUZxUWl4RlFVRjVRanRCUVVGQk96dEJRVUZCTERKQ1FVTjJRaXh6UlVGQlMzcEVMRXRCUVV3c1JVRkJWekpDTEVsQlFWZ3NOa3hCUVc5Q2VVSXNZVUZCWVVzc1RVRkJha003UVVGRFJDeEhRVVpFTEUxQlJVODdRVUZEVEc1Q0xHRkJRVk40UXl4SlFVRlVMRVZCUVdWNVJDeFBRVUZQU0N4WlFVRlFMRWRCUVhOQ1JDeFRRVUZ5UXl4RlFVRm5SRWtzVDBGQlQwb3NVMEZCVUN4SFFVRnRRa01zV1VGQmJrVTdRVUZEUkR0QlFVTkdPenRCUVVWRUxGTkJRVk5rTEZGQlFWUXNRMEZCYTBKNFF5eEpRVUZzUWl4RlFVRjNRazBzU1VGQmVFSXNSVUZCT0VKM1F5eExRVUU1UWl4RlFVRnhRenRCUVVOdVF6bERMRTlCUVV0M1F5eFJRVUZNTEVkQlFXZENMRWxCUVdoQ08wRkJRMEY0UXl4UFFVRkxSU3hMUVVGTUxFTkJRVmN5UWl4SlFVRllMRU5CUVdkQ08wRkJRMlJYTEdOQlFWVXNTVUZFU1R0QlFVVmtiRU1zVlVGQlRVRXNTVUZHVVR0QlFVZGtReXhaUVVGUmRVTTdRVUZJVFN4SFFVRm9RanRCUVV0RU96dEJRVVZFTEZOQlFWTkRMR0ZCUVZRc1EwRkJkVUl2UXl4SlFVRjJRaXhGUVVFMlFqUkVMRTFCUVRkQ0xFVkJRWEZEWkN4TFFVRnlReXhGUVVFMFF6dEJRVU14UXl4VFFVRlBZeXhQUVVGUGJFSXNUVUZCVUN4SFFVRm5Ra2tzVFVGQlRVb3NUVUZCZEVJc1NVRkJaME5yUWl4UFFVRlBha1FzUzBGQlVDeEhRVUZsYVVRc1QwRkJUekZFTEV0QlFWQXNRMEZCWVhGQ0xFMUJRVzVGTEVWQlFUSkZPMEZCUTNwRkxGRkJRVWx6UXl4UFFVRlBSQ3hQUVVGUE1VUXNTMEZCVUN4RFFVRmhNRVFzVDBGQlQycEVMRXRCUVZBc1JVRkJZaXhEUVVGWU8wRkJRMEZZTEZOQlFVdEZMRXRCUVV3c1EwRkJWekpDTEVsQlFWZ3NRMEZCWjBKblF5eEpRVUZvUWp0QlFVTkJSQ3hYUVVGUGJFSXNUVUZCVUR0QlFVTkVPMEZCUTBZN1FVRkRSQ3hUUVVGVFZTeGpRVUZVTEVOQlFYZENjRVFzU1VGQmVFSXNSVUZCT0VJMFJDeE5RVUU1UWl4RlFVRnpRenRCUVVOd1F5eFRRVUZQUVN4UFFVRlBha1FzUzBGQlVDeEhRVUZsYVVRc1QwRkJUekZFTEV0QlFWQXNRMEZCWVhGQ0xFMUJRVzVETEVWQlFUSkRPMEZCUTNwRExGRkJRVWx6UXl4UFFVRlBSQ3hQUVVGUE1VUXNTMEZCVUN4RFFVRmhNRVFzVDBGQlQycEVMRXRCUVZBc1JVRkJZaXhEUVVGWU8wRkJRMEZZTEZOQlFVdEZMRXRCUVV3c1EwRkJWekpDTEVsQlFWZ3NRMEZCWjBKblF5eEpRVUZvUWp0QlFVTkVPMEZCUTBZN08wRkJSVVFzVTBGQlUxZ3NZVUZCVkN4RFFVRjFRbGtzUzBGQmRrSXNSVUZCT0VJN1FVRkROVUlzVFVGQlNYQkVMRTFCUVUwc1JVRkJWanRCUVVGQkxFMUJRMGx4UkN4WlFVRlpSQ3hOUVVGTk5VUXNTMEZCVGl4RFFVRlpORVFzVFVGQlRXNUVMRXRCUVd4Q0xFVkJRWGxDTEVOQlFYcENMRU5CUkdoQ08wRkJSVUVzVTBGQlQyMUVMRTFCUVUxdVJDeExRVUZPTEVkQlFXTnRSQ3hOUVVGTk5VUXNTMEZCVGl4RFFVRlpjVUlzVFVGQmFrTXNSVUZCZVVNN1FVRkRka01zVVVGQlNYTkRMRTlCUVU5RExFMUJRVTAxUkN4TFFVRk9MRU5CUVZrMFJDeE5RVUZOYmtRc1MwRkJiRUlzUTBGQldEczdRVUZGUVR0QlFVTkJMRkZCUVVsdlJDeGpRVUZqTEVkQlFXUXNTVUZCY1VKR0xFdEJRVXNzUTBGQlRDeE5RVUZaTEVkQlFYSkRMRVZCUVRCRE8wRkJRM2hEUlN4clFrRkJXU3hIUVVGYU8wRkJRMFE3TzBGQlJVUXNVVUZCU1VFc1kwRkJZMFlzUzBGQlN5eERRVUZNTEVOQlFXeENMRVZCUVRKQ08wRkJRM3BDYmtRc1ZVRkJTVzFDTEVsQlFVb3NRMEZCVTJkRExFbEJRVlE3UVVGRFFVTXNXVUZCVFc1RUxFdEJRVTQ3UVVGRFJDeExRVWhFTEUxQlIwODdRVUZEVER0QlFVTkVPMEZCUTBZN08wRkJSVVFzVTBGQlQwUXNSMEZCVUR0QlFVTkVPMEZCUTBRc1UwRkJVMmRFTEdOQlFWUXNRMEZCZDBKSkxFdEJRWGhDTEVWQlFTdENSU3haUVVFdlFpeEZRVUUyUXp0QlFVTXpReXhOUVVGSlF5eFZRVUZWTEVWQlFXUTdRVUZCUVN4TlFVTkpUaXhUUVVGVExFVkJSR0k3UVVGQlFTeE5RVVZKVHl4aFFVRmhMRU5CUm1wQ08wRkJRVUVzVFVGSFNVTXNhVUpCUVdsQ0xFdEJTSEpDTzBGQlFVRXNUVUZKU1VNc1lVRkJZU3hMUVVwcVFqdEJRVXRCTEZOQlFVOUdMR0ZCUVdGR0xHRkJRV0Y2UXl4TlFVRXhRaXhKUVVORmRVTXNUVUZCVFc1RUxFdEJRVTRzUjBGQlkyMUVMRTFCUVUwMVJDeExRVUZPTEVOQlFWbHhRaXhOUVVSdVF5eEZRVU15UXp0QlFVTjZReXhSUVVGSk9FTXNVMEZCVTFBc1RVRkJUVFZFTEV0QlFVNHNRMEZCV1RSRUxFMUJRVTF1UkN4TFFVRnNRaXhEUVVGaU8wRkJRVUVzVVVGRFNUSkVMRkZCUVZGT0xHRkJRV0ZGTEZWQlFXSXNRMEZFV2pzN1FVRkhRVHRCUVVOQkxGRkJRVWxKTEUxQlFVMHNRMEZCVGl4TlFVRmhMRWRCUVdwQ0xFVkJRWE5DTzBGQlEzQkNPMEZCUTBRN08wRkJSVVJJTEhGQ1FVRnBRa0VzYTBKQlFXdENSU3hQUVVGUExFTkJRVkFzVFVGQll5eEhRVUZxUkRzN1FVRkZRVllzVjBGQlR6bENMRWxCUVZBc1EwRkJXWGxETEV0QlFWbzdRVUZEUVVvN08wRkJSVUU3UVVGRFFUdEJRVU5CTEZGQlFVbEhMRTlCUVU4c1EwRkJVQ3hOUVVGakxFZEJRV3hDTEVWQlFYVkNPMEZCUTNKQ1JDeHRRa0ZCWVN4SlFVRmlPenRCUVVWQkxHRkJRVTlETEU5QlFVOHNRMEZCVUN4TlFVRmpMRWRCUVhKQ0xFVkJRVEJDTzBGQlEzaENTaXhuUWtGQlVYQkRMRWxCUVZJc1EwRkJZWGRETEUxQlFXSTdRVUZEUVVFc2FVSkJRVk5RTEUxQlFVMDFSQ3hMUVVGT0xFTkJRVmtzUlVGQlJUUkVMRTFCUVUxdVJDeExRVUZ3UWl4RFFVRlVPMEZCUTBRN1FVRkRSanM3UVVGRlJDeFJRVUZKTWtRc1RVRkJUVU1zVFVGQlRpeERRVUZoTEVOQlFXSXNUVUZCYjBKR0xFOUJRVTlGTEUxQlFWQXNRMEZCWXl4RFFVRmtMRU5CUVhoQ0xFVkJRVEJETzBGQlEzaERUaXhqUVVGUmNFTXNTVUZCVWl4RFFVRmhkME1zVFVGQllqdEJRVU5CVUN4WlFVRk5ia1FzUzBGQlRqdEJRVU5FTEV0QlNFUXNUVUZIVHp0QlFVTk1lVVFzYlVKQlFXRXNTVUZCWWp0QlFVTkVPMEZCUTBZN08wRkJSVVFzVFVGQlNTeERRVUZEU2l4aFFVRmhSU3hWUVVGaUxFdEJRVFJDTEVWQlFUZENMRVZCUVdsRExFTkJRV3BETEUxQlFYZERMRWRCUVhoRExFbEJRMGRETEdOQlJGQXNSVUZEZFVJN1FVRkRja0pETEdsQ1FVRmhMRWxCUVdJN1FVRkRSRHM3UVVGRlJDeE5RVUZKUVN4VlFVRktMRVZCUVdkQ08wRkJRMlFzVjBGQlQwZ3NUMEZCVUR0QlFVTkVPenRCUVVWRUxGTkJRVTlETEdGQlFXRkdMR0ZCUVdGNlF5eE5RVUZxUXl4RlFVRjVRenRCUVVOMlEyOURMRmRCUVU4NVFpeEpRVUZRTEVOQlFWbHRReXhoUVVGaFJTeFpRVUZpTEVOQlFWbzdRVUZEUkRzN1FVRkZSQ3hUUVVGUE8wRkJRMHhRTEd0Q1FVUkxPMEZCUlV4Tk8wRkJSa3NzUjBGQlVEdEJRVWxFT3p0QlFVVkVMRk5CUVZOV0xGVkJRVlFzUTBGQmIwSlZMRTlCUVhCQ0xFVkJRVFpDTzBGQlF6TkNMRk5CUVU5QkxGRkJRVkZQTEUxQlFWSXNRMEZCWlN4VlFVRlRReXhKUVVGVUxFVkJRV1ZLTEUxQlFXWXNSVUZCZFVJN1FVRkRNME1zVjBGQlQwa3NVVUZCVVVvc1QwRkJUeXhEUVVGUUxFMUJRV01zUjBGQk4wSTdRVUZEUkN4SFFVWk5MRVZCUlVvc1NVRkdTU3hEUVVGUU8wRkJSMFE3UVVGRFJDeFRRVUZUWWl4clFrRkJWQ3hEUVVFMFFrMHNTMEZCTlVJc1JVRkJiVU5aTEdGQlFXNURMRVZCUVd0RVF5eExRVUZzUkN4RlFVRjVSRHRCUVVOMlJDeFBRVUZMTEVsQlFVbERMRWxCUVVrc1EwRkJZaXhGUVVGblFrRXNTVUZCU1VRc1MwRkJjRUlzUlVGQk1rSkRMRWRCUVROQ0xFVkJRV2RETzBGQlF6bENMRkZCUVVsRExHZENRVUZuUWtnc1kwRkJZMEVzWTBGQlkyNUVMRTFCUVdRc1IwRkJkVUp2UkN4TFFVRjJRaXhIUVVFclFrTXNRMEZCTjBNc1JVRkJaMFJNTEUxQlFXaEVMRU5CUVhWRUxFTkJRWFpFTEVOQlFYQkNPMEZCUTBFc1VVRkJTVlFzVFVGQlRUVkVMRXRCUVU0c1EwRkJXVFJFTEUxQlFVMXVSQ3hMUVVGT0xFZEJRV05wUlN4RFFVRXhRaXhOUVVGcFF5eE5RVUZOUXl4aFFVRXpReXhGUVVFd1JEdEJRVU40UkN4aFFVRlBMRXRCUVZBN1FVRkRSRHRCUVVOR096dEJRVVZFWml4UlFVRk5ia1FzUzBGQlRpeEpRVUZsWjBVc1MwRkJaanRCUVVOQkxGTkJRVThzU1VGQlVEdEJRVU5FT3p0QlFVVkVMRk5CUVZNeFJTeHRRa0ZCVkN4RFFVRTJRa01zUzBGQk4wSXNSVUZCYjBNN1FVRkRiRU1zVFVGQlNVTXNWMEZCVnl4RFFVRm1PMEZCUTBFc1RVRkJTVU1zVjBGQlZ5eERRVUZtT3p0QlFVVkJSaXhSUVVGTk5FVXNUMEZCVGl4RFFVRmpMRlZCUVZOcVFpeEpRVUZVTEVWQlFXVTdRVUZETTBJc1VVRkJTU3hQUVVGUFFTeEpRVUZRTEV0QlFXZENMRkZCUVhCQ0xFVkJRVGhDTzBGQlF6VkNMRlZCUVVsclFpeFZRVUZWT1VVc2IwSkJRVzlDTkVRc1MwRkJTM1pFTEVsQlFYcENMRU5CUVdRN1FVRkRRU3hWUVVGSk1FVXNZVUZCWVM5RkxHOUNRVUZ2UWpSRUxFdEJRVXQwUkN4TlFVRjZRaXhEUVVGcVFqczdRVUZGUVN4VlFVRkpTaXhoUVVGaFJTeFRRVUZxUWl4RlFVRTBRanRCUVVNeFFpeFpRVUZKTUVVc1VVRkJVVFZGTEZGQlFWSXNTMEZCY1VJMlJTeFhRVUZYTjBVc1VVRkJjRU1zUlVGQk9FTTdRVUZETlVOQkxITkNRVUZaTkVVc1VVRkJVVFZGTEZGQlFYQkNPMEZCUTBRc1UwRkdSQ3hOUVVWUE8wRkJRMHhCTEhGQ1FVRlhSU3hUUVVGWU8wRkJRMFE3UVVGRFJqczdRVUZGUkN4VlFVRkpSQ3hoUVVGaFF5eFRRVUZxUWl4RlFVRTBRanRCUVVNeFFpeFpRVUZKTUVVc1VVRkJVVE5GTEZGQlFWSXNTMEZCY1VJMFJTeFhRVUZYTlVVc1VVRkJjRU1zUlVGQk9FTTdRVUZETlVOQkxITkNRVUZaTWtVc1VVRkJVVE5GTEZGQlFYQkNPMEZCUTBRc1UwRkdSQ3hOUVVWUE8wRkJRMHhCTEhGQ1FVRlhReXhUUVVGWU8wRkJRMFE3UVVGRFJqdEJRVU5HTEV0QmJrSkVMRTFCYlVKUE8wRkJRMHdzVlVGQlNVUXNZVUZCWVVNc1UwRkJZaXhMUVVFeVFuZEVMRXRCUVVzc1EwRkJUQ3hOUVVGWkxFZEJRVm9zU1VGQmJVSkJMRXRCUVVzc1EwRkJUQ3hOUVVGWkxFZEJRVEZFTEVOQlFVb3NSVUZCYjBVN1FVRkRiRVY2UkR0QlFVTkVPMEZCUTBRc1ZVRkJTVVFzWVVGQllVVXNVMEZCWWl4TFFVRXlRbmRFTEV0QlFVc3NRMEZCVEN4TlFVRlpMRWRCUVZvc1NVRkJiVUpCTEV0QlFVc3NRMEZCVEN4TlFVRlpMRWRCUVRGRUxFTkJRVW9zUlVGQmIwVTdRVUZEYkVVeFJEdEJRVU5FTzBGQlEwWTdRVUZEUml4SFFUVkNSRHM3UVVFNFFrRXNVMEZCVHl4RlFVRkRRU3hyUWtGQlJDeEZRVUZYUXl4clFrRkJXQ3hGUVVGUU8wRkJRMFFpTENKbWFXeGxJam9pYldWeVoyVXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZTNOMGNuVmpkSFZ5WldSUVlYUmphSDBnWm5KdmJTQW5MaTlqY21WaGRHVW5PMXh1YVcxd2IzSjBJSHR3WVhKelpWQmhkR05vZlNCbWNtOXRJQ2N1TDNCaGNuTmxKenRjYmx4dWFXMXdiM0owSUh0aGNuSmhlVVZ4ZFdGc0xDQmhjbkpoZVZOMFlYSjBjMWRwZEdoOUlHWnliMjBnSnk0dUwzVjBhV3d2WVhKeVlYa25PMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTJGc1kweHBibVZEYjNWdWRDaG9kVzVyS1NCN1hHNGdJR052Ym5OMElIdHZiR1JNYVc1bGN5d2dibVYzVEdsdVpYTjlJRDBnWTJGc1kwOXNaRTVsZDB4cGJtVkRiM1Z1ZENob2RXNXJMbXhwYm1WektUdGNibHh1SUNCcFppQW9iMnhrVEdsdVpYTWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUdoMWJtc3ViMnhrVEdsdVpYTWdQU0J2YkdSTWFXNWxjenRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0JrWld4bGRHVWdhSFZ1YXk1dmJHUk1hVzVsY3p0Y2JpQWdmVnh1WEc0Z0lHbG1JQ2h1WlhkTWFXNWxjeUFoUFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ2FIVnVheTV1WlhkTWFXNWxjeUE5SUc1bGQweHBibVZ6TzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUdSbGJHVjBaU0JvZFc1ckxtNWxkMHhwYm1Wek8xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnRaWEpuWlNodGFXNWxMQ0IwYUdWcGNuTXNJR0poYzJVcElIdGNiaUFnYldsdVpTQTlJR3h2WVdSUVlYUmphQ2h0YVc1bExDQmlZWE5sS1R0Y2JpQWdkR2hsYVhKeklEMGdiRzloWkZCaGRHTm9LSFJvWldseWN5d2dZbUZ6WlNrN1hHNWNiaUFnYkdWMElISmxkQ0E5SUh0OU8xeHVYRzRnSUM4dklFWnZjaUJwYm1SbGVDQjNaU0JxZFhOMElHeGxkQ0JwZENCd1lYTnpJSFJvY205MVoyZ2dZWE1nYVhRZ1pHOWxjMjRuZENCb1lYWmxJR0Z1ZVNCdVpXTmxjM05oY25rZ2JXVmhibWx1Wnk1Y2JpQWdMeThnVEdWaGRtbHVaeUJ6WVc1cGRIa2dZMmhsWTJ0eklHOXVJSFJvYVhNZ2RHOGdkR2hsSUVGUVNTQmpiMjV6ZFcxbGNpQjBhR0YwSUcxaGVTQnJibTkzSUcxdmNtVWdZV0p2ZFhRZ2RHaGxYRzRnSUM4dklHMWxZVzVwYm1jZ2FXNGdkR2hsYVhJZ2IzZHVJR052Ym5SbGVIUXVYRzRnSUdsbUlDaHRhVzVsTG1sdVpHVjRJSHg4SUhSb1pXbHljeTVwYm1SbGVDa2dlMXh1SUNBZ0lISmxkQzVwYm1SbGVDQTlJRzFwYm1VdWFXNWtaWGdnZkh3Z2RHaGxhWEp6TG1sdVpHVjRPMXh1SUNCOVhHNWNiaUFnYVdZZ0tHMXBibVV1Ym1WM1JtbHNaVTVoYldVZ2ZId2dkR2hsYVhKekxtNWxkMFpwYkdWT1lXMWxLU0I3WEc0Z0lDQWdhV1lnS0NGbWFXeGxUbUZ0WlVOb1lXNW5aV1FvYldsdVpTa3BJSHRjYmlBZ0lDQWdJQzh2SUU1dklHaGxZV1JsY2lCdmNpQnVieUJqYUdGdVoyVWdhVzRnYjNWeWN5d2dkWE5sSUhSb1pXbHljeUFvWVc1a0lHOTFjbk1nYVdZZ2RHaGxhWEp6SUdSdlpYTWdibTkwSUdWNGFYTjBLVnh1SUNBZ0lDQWdjbVYwTG05c1pFWnBiR1ZPWVcxbElEMGdkR2hsYVhKekxtOXNaRVpwYkdWT1lXMWxJSHg4SUcxcGJtVXViMnhrUm1sc1pVNWhiV1U3WEc0Z0lDQWdJQ0J5WlhRdWJtVjNSbWxzWlU1aGJXVWdQU0IwYUdWcGNuTXVibVYzUm1sc1pVNWhiV1VnZkh3Z2JXbHVaUzV1WlhkR2FXeGxUbUZ0WlR0Y2JpQWdJQ0FnSUhKbGRDNXZiR1JJWldGa1pYSWdQU0IwYUdWcGNuTXViMnhrU0dWaFpHVnlJSHg4SUcxcGJtVXViMnhrU0dWaFpHVnlPMXh1SUNBZ0lDQWdjbVYwTG01bGQwaGxZV1JsY2lBOUlIUm9aV2x5Y3k1dVpYZElaV0ZrWlhJZ2ZId2diV2x1WlM1dVpYZElaV0ZrWlhJN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNnaFptbHNaVTVoYldWRGFHRnVaMlZrS0hSb1pXbHljeWtwSUh0Y2JpQWdJQ0FnSUM4dklFNXZJR2hsWVdSbGNpQnZjaUJ1YnlCamFHRnVaMlVnYVc0Z2RHaGxhWEp6TENCMWMyVWdiM1Z5YzF4dUlDQWdJQ0FnY21WMExtOXNaRVpwYkdWT1lXMWxJRDBnYldsdVpTNXZiR1JHYVd4bFRtRnRaVHRjYmlBZ0lDQWdJSEpsZEM1dVpYZEdhV3hsVG1GdFpTQTlJRzFwYm1VdWJtVjNSbWxzWlU1aGJXVTdYRzRnSUNBZ0lDQnlaWFF1YjJ4a1NHVmhaR1Z5SUQwZ2JXbHVaUzV2YkdSSVpXRmtaWEk3WEc0Z0lDQWdJQ0J5WlhRdWJtVjNTR1ZoWkdWeUlEMGdiV2x1WlM1dVpYZElaV0ZrWlhJN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQzh2SUVKdmRHZ2dZMmhoYm1kbFpDNHVMaUJtYVdkMWNtVWdhWFFnYjNWMFhHNGdJQ0FnSUNCeVpYUXViMnhrUm1sc1pVNWhiV1VnUFNCelpXeGxZM1JHYVdWc1pDaHlaWFFzSUcxcGJtVXViMnhrUm1sc1pVNWhiV1VzSUhSb1pXbHljeTV2YkdSR2FXeGxUbUZ0WlNrN1hHNGdJQ0FnSUNCeVpYUXVibVYzUm1sc1pVNWhiV1VnUFNCelpXeGxZM1JHYVdWc1pDaHlaWFFzSUcxcGJtVXVibVYzUm1sc1pVNWhiV1VzSUhSb1pXbHljeTV1WlhkR2FXeGxUbUZ0WlNrN1hHNGdJQ0FnSUNCeVpYUXViMnhrU0dWaFpHVnlJRDBnYzJWc1pXTjBSbWxsYkdRb2NtVjBMQ0J0YVc1bExtOXNaRWhsWVdSbGNpd2dkR2hsYVhKekxtOXNaRWhsWVdSbGNpazdYRzRnSUNBZ0lDQnlaWFF1Ym1WM1NHVmhaR1Z5SUQwZ2MyVnNaV04wUm1sbGJHUW9jbVYwTENCdGFXNWxMbTVsZDBobFlXUmxjaXdnZEdobGFYSnpMbTVsZDBobFlXUmxjaWs3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY21WMExtaDFibXR6SUQwZ1cxMDdYRzVjYmlBZ2JHVjBJRzFwYm1WSmJtUmxlQ0E5SURBc1hHNGdJQ0FnSUNCMGFHVnBjbk5KYm1SbGVDQTlJREFzWEc0Z0lDQWdJQ0J0YVc1bFQyWm1jMlYwSUQwZ01DeGNiaUFnSUNBZ0lIUm9aV2x5YzA5bVpuTmxkQ0E5SURBN1hHNWNiaUFnZDJocGJHVWdLRzFwYm1WSmJtUmxlQ0E4SUcxcGJtVXVhSFZ1YTNNdWJHVnVaM1JvSUh4OElIUm9aV2x5YzBsdVpHVjRJRHdnZEdobGFYSnpMbWgxYm10ekxteGxibWQwYUNrZ2UxeHVJQ0FnSUd4bGRDQnRhVzVsUTNWeWNtVnVkQ0E5SUcxcGJtVXVhSFZ1YTNOYmJXbHVaVWx1WkdWNFhTQjhmQ0I3YjJ4a1UzUmhjblE2SUVsdVptbHVhWFI1ZlN4Y2JpQWdJQ0FnSUNBZ2RHaGxhWEp6UTNWeWNtVnVkQ0E5SUhSb1pXbHljeTVvZFc1cmMxdDBhR1ZwY25OSmJtUmxlRjBnZkh3Z2UyOXNaRk4wWVhKME9pQkpibVpwYm1sMGVYMDdYRzVjYmlBZ0lDQnBaaUFvYUhWdWEwSmxabTl5WlNodGFXNWxRM1Z5Y21WdWRDd2dkR2hsYVhKelEzVnljbVZ1ZENrcElIdGNiaUFnSUNBZ0lDOHZJRlJvYVhNZ2NHRjBZMmdnWkc5bGN5QnViM1FnYjNabGNteGhjQ0IzYVhSb0lHRnVlU0J2WmlCMGFHVWdiM1JvWlhKekxDQjVZWGt1WEc0Z0lDQWdJQ0J5WlhRdWFIVnVhM011Y0hWemFDaGpiRzl1WlVoMWJtc29iV2x1WlVOMWNuSmxiblFzSUcxcGJtVlBabVp6WlhRcEtUdGNiaUFnSUNBZ0lHMXBibVZKYm1SbGVDc3JPMXh1SUNBZ0lDQWdkR2hsYVhKelQyWm1jMlYwSUNzOUlHMXBibVZEZFhKeVpXNTBMbTVsZDB4cGJtVnpJQzBnYldsdVpVTjFjbkpsYm5RdWIyeGtUR2x1WlhNN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNob2RXNXJRbVZtYjNKbEtIUm9aV2x5YzBOMWNuSmxiblFzSUcxcGJtVkRkWEp5Wlc1MEtTa2dlMXh1SUNBZ0lDQWdMeThnVkdocGN5QndZWFJqYUNCa2IyVnpJRzV2ZENCdmRtVnliR0Z3SUhkcGRHZ2dZVzU1SUc5bUlIUm9aU0J2ZEdobGNuTXNJSGxoZVM1Y2JpQWdJQ0FnSUhKbGRDNW9kVzVyY3k1d2RYTm9LR05zYjI1bFNIVnVheWgwYUdWcGNuTkRkWEp5Wlc1MExDQjBhR1ZwY25OUFptWnpaWFFwS1R0Y2JpQWdJQ0FnSUhSb1pXbHljMGx1WkdWNEt5czdYRzRnSUNBZ0lDQnRhVzVsVDJabWMyVjBJQ3M5SUhSb1pXbHljME4xY25KbGJuUXVibVYzVEdsdVpYTWdMU0IwYUdWcGNuTkRkWEp5Wlc1MExtOXNaRXhwYm1Wek8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0F2THlCUGRtVnliR0Z3TENCdFpYSm5aU0JoY3lCaVpYTjBJSGRsSUdOaGJseHVJQ0FnSUNBZ2JHVjBJRzFsY21kbFpFaDFibXNnUFNCN1hHNGdJQ0FnSUNBZ0lHOXNaRk4wWVhKME9pQk5ZWFJvTG0xcGJpaHRhVzVsUTNWeWNtVnVkQzV2YkdSVGRHRnlkQ3dnZEdobGFYSnpRM1Z5Y21WdWRDNXZiR1JUZEdGeWRDa3NYRzRnSUNBZ0lDQWdJRzlzWkV4cGJtVnpPaUF3TEZ4dUlDQWdJQ0FnSUNCdVpYZFRkR0Z5ZERvZ1RXRjBhQzV0YVc0b2JXbHVaVU4xY25KbGJuUXVibVYzVTNSaGNuUWdLeUJ0YVc1bFQyWm1jMlYwTENCMGFHVnBjbk5EZFhKeVpXNTBMbTlzWkZOMFlYSjBJQ3NnZEdobGFYSnpUMlptYzJWMEtTeGNiaUFnSUNBZ0lDQWdibVYzVEdsdVpYTTZJREFzWEc0Z0lDQWdJQ0FnSUd4cGJtVnpPaUJiWFZ4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUcxbGNtZGxUR2x1WlhNb2JXVnlaMlZrU0hWdWF5d2diV2x1WlVOMWNuSmxiblF1YjJ4a1UzUmhjblFzSUcxcGJtVkRkWEp5Wlc1MExteHBibVZ6TENCMGFHVnBjbk5EZFhKeVpXNTBMbTlzWkZOMFlYSjBMQ0IwYUdWcGNuTkRkWEp5Wlc1MExteHBibVZ6S1R0Y2JpQWdJQ0FnSUhSb1pXbHljMGx1WkdWNEt5czdYRzRnSUNBZ0lDQnRhVzVsU1c1a1pYZ3JLenRjYmx4dUlDQWdJQ0FnY21WMExtaDFibXR6TG5CMWMyZ29iV1Z5WjJWa1NIVnVheWs3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJSEpsZER0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYkc5aFpGQmhkR05vS0hCaGNtRnRMQ0JpWVhObEtTQjdYRzRnSUdsbUlDaDBlWEJsYjJZZ2NHRnlZVzBnUFQwOUlDZHpkSEpwYm1jbktTQjdYRzRnSUNBZ2FXWWdLQzllUUVBdmJTNTBaWE4wS0hCaGNtRnRLU0I4ZkNBb0wxNUpibVJsZURvdmJTNTBaWE4wS0hCaGNtRnRLU2twSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ3WVhKelpWQmhkR05vS0hCaGNtRnRLVnN3WFR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb0lXSmhjMlVwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVFhWemRDQndjbTkyYVdSbElHRWdZbUZ6WlNCeVpXWmxjbVZ1WTJVZ2IzSWdjR0Z6Y3lCcGJpQmhJSEJoZEdOb0p5azdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ6ZEhKMVkzUjFjbVZrVUdGMFkyZ29kVzVrWldacGJtVmtMQ0IxYm1SbFptbHVaV1FzSUdKaGMyVXNJSEJoY21GdEtUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQndZWEpoYlR0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnWm1sc1pVNWhiV1ZEYUdGdVoyVmtLSEJoZEdOb0tTQjdYRzRnSUhKbGRIVnliaUJ3WVhSamFDNXVaWGRHYVd4bFRtRnRaU0FtSmlCd1lYUmphQzV1WlhkR2FXeGxUbUZ0WlNBaFBUMGdjR0YwWTJndWIyeGtSbWxzWlU1aGJXVTdYRzU5WEc1Y2JtWjFibU4wYVc5dUlITmxiR1ZqZEVacFpXeGtLR2x1WkdWNExDQnRhVzVsTENCMGFHVnBjbk1wSUh0Y2JpQWdhV1lnS0cxcGJtVWdQVDA5SUhSb1pXbHljeWtnZTF4dUlDQWdJSEpsZEhWeWJpQnRhVzVsTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUdsdVpHVjRMbU52Ym1ac2FXTjBJRDBnZEhKMVpUdGNiaUFnSUNCeVpYUjFjbTRnZTIxcGJtVXNJSFJvWldseWMzMDdYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnYUhWdWEwSmxabTl5WlNoMFpYTjBMQ0JqYUdWamF5a2dlMXh1SUNCeVpYUjFjbTRnZEdWemRDNXZiR1JUZEdGeWRDQThJR05vWldOckxtOXNaRk4wWVhKMFhHNGdJQ0FnSmlZZ0tIUmxjM1F1YjJ4a1UzUmhjblFnS3lCMFpYTjBMbTlzWkV4cGJtVnpLU0E4SUdOb1pXTnJMbTlzWkZOMFlYSjBPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmpiRzl1WlVoMWJtc29hSFZ1YXl3Z2IyWm1jMlYwS1NCN1hHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ2IyeGtVM1JoY25RNklHaDFibXN1YjJ4a1UzUmhjblFzSUc5c1pFeHBibVZ6T2lCb2RXNXJMbTlzWkV4cGJtVnpMRnh1SUNBZ0lHNWxkMU4wWVhKME9pQm9kVzVyTG01bGQxTjBZWEowSUNzZ2IyWm1jMlYwTENCdVpYZE1hVzVsY3pvZ2FIVnVheTV1WlhkTWFXNWxjeXhjYmlBZ0lDQnNhVzVsY3pvZ2FIVnVheTVzYVc1bGMxeHVJQ0I5TzF4dWZWeHVYRzVtZFc1amRHbHZiaUJ0WlhKblpVeHBibVZ6S0doMWJtc3NJRzFwYm1WUFptWnpaWFFzSUcxcGJtVk1hVzVsY3l3Z2RHaGxhWEpQWm1aelpYUXNJSFJvWldseVRHbHVaWE1wSUh0Y2JpQWdMeThnVkdocGN5QjNhV3hzSUdkbGJtVnlZV3hzZVNCeVpYTjFiSFFnYVc0Z1lTQmpiMjVtYkdsamRHVmtJR2gxYm1zc0lHSjFkQ0IwYUdWeVpTQmhjbVVnWTJGelpYTWdkMmhsY21VZ2RHaGxJR052Ym5SbGVIUmNiaUFnTHk4Z2FYTWdkR2hsSUc5dWJIa2diM1psY214aGNDQjNhR1Z5WlNCM1pTQmpZVzRnYzNWalkyVnpjMloxYkd4NUlHMWxjbWRsSUhSb1pTQmpiMjUwWlc1MElHaGxjbVV1WEc0Z0lHeGxkQ0J0YVc1bElEMGdlMjltWm5ObGREb2diV2x1WlU5bVpuTmxkQ3dnYkdsdVpYTTZJRzFwYm1WTWFXNWxjeXdnYVc1a1pYZzZJREI5TEZ4dUlDQWdJQ0FnZEdobGFYSWdQU0I3YjJabWMyVjBPaUIwYUdWcGNrOW1abk5sZEN3Z2JHbHVaWE02SUhSb1pXbHlUR2x1WlhNc0lHbHVaR1Y0T2lBd2ZUdGNibHh1SUNBdkx5QklZVzVrYkdVZ1lXNTVJR3hsWVdScGJtY2dZMjl1ZEdWdWRGeHVJQ0JwYm5ObGNuUk1aV0ZrYVc1bktHaDFibXNzSUcxcGJtVXNJSFJvWldseUtUdGNiaUFnYVc1elpYSjBUR1ZoWkdsdVp5aG9kVzVyTENCMGFHVnBjaXdnYldsdVpTazdYRzVjYmlBZ0x5OGdUbTkzSUdsdUlIUm9aU0J2ZG1WeWJHRndJR052Ym5SbGJuUXVJRk5qWVc0Z2RHaHliM1ZuYUNCaGJtUWdjMlZzWldOMElIUm9aU0JpWlhOMElHTm9ZVzVuWlhNZ1puSnZiU0JsWVdOb0xseHVJQ0IzYUdsc1pTQW9iV2x1WlM1cGJtUmxlQ0E4SUcxcGJtVXViR2x1WlhNdWJHVnVaM1JvSUNZbUlIUm9aV2x5TG1sdVpHVjRJRHdnZEdobGFYSXViR2x1WlhNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnYkdWMElHMXBibVZEZFhKeVpXNTBJRDBnYldsdVpTNXNhVzVsYzF0dGFXNWxMbWx1WkdWNFhTeGNiaUFnSUNBZ0lDQWdkR2hsYVhKRGRYSnlaVzUwSUQwZ2RHaGxhWEl1YkdsdVpYTmJkR2hsYVhJdWFXNWtaWGhkTzF4dVhHNGdJQ0FnYVdZZ0tDaHRhVzVsUTNWeWNtVnVkRnN3WFNBOVBUMGdKeTBuSUh4OElHMXBibVZEZFhKeVpXNTBXekJkSUQwOVBTQW5LeWNwWEc0Z0lDQWdJQ0FnSUNZbUlDaDBhR1ZwY2tOMWNuSmxiblJiTUYwZ1BUMDlJQ2N0SnlCOGZDQjBhR1ZwY2tOMWNuSmxiblJiTUYwZ1BUMDlJQ2NySnlrcElIdGNiaUFnSUNBZ0lDOHZJRUp2ZEdnZ2JXOWthV1pwWldRZ0xpNHVYRzRnSUNBZ0lDQnRkWFIxWVd4RGFHRnVaMlVvYUhWdWF5d2diV2x1WlN3Z2RHaGxhWElwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvYldsdVpVTjFjbkpsYm5SYk1GMGdQVDA5SUNjckp5QW1KaUIwYUdWcGNrTjFjbkpsYm5SYk1GMGdQVDA5SUNjZ0p5a2dlMXh1SUNBZ0lDQWdMeThnVFdsdVpTQnBibk5sY25SbFpGeHVJQ0FnSUNBZ2FIVnVheTVzYVc1bGN5NXdkWE5vS0M0dUxpQmpiMnhzWldOMFEyaGhibWRsS0cxcGJtVXBLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFJvWldseVEzVnljbVZ1ZEZzd1hTQTlQVDBnSnlzbklDWW1JRzFwYm1WRGRYSnlaVzUwV3pCZElEMDlQU0FuSUNjcElIdGNiaUFnSUNBZ0lDOHZJRlJvWldseWN5QnBibk5sY25SbFpGeHVJQ0FnSUNBZ2FIVnVheTVzYVc1bGN5NXdkWE5vS0M0dUxpQmpiMnhzWldOMFEyaGhibWRsS0hSb1pXbHlLU2s3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2h0YVc1bFEzVnljbVZ1ZEZzd1hTQTlQVDBnSnkwbklDWW1JSFJvWldseVEzVnljbVZ1ZEZzd1hTQTlQVDBnSnlBbktTQjdYRzRnSUNBZ0lDQXZMeUJOYVc1bElISmxiVzkyWldRZ2IzSWdaV1JwZEdWa1hHNGdJQ0FnSUNCeVpXMXZkbUZzS0doMWJtc3NJRzFwYm1Vc0lIUm9aV2x5S1R0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0hSb1pXbHlRM1Z5Y21WdWRGc3dYU0E5UFQwZ0p5MG5JQ1ltSUcxcGJtVkRkWEp5Wlc1MFd6QmRJRDA5UFNBbklDY3BJSHRjYmlBZ0lDQWdJQzh2SUZSb1pXbHlJSEpsYlc5MlpXUWdiM0lnWldScGRHVmtYRzRnSUNBZ0lDQnlaVzF2ZG1Gc0tHaDFibXNzSUhSb1pXbHlMQ0J0YVc1bExDQjBjblZsS1R0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0cxcGJtVkRkWEp5Wlc1MElEMDlQU0IwYUdWcGNrTjFjbkpsYm5RcElIdGNiaUFnSUNBZ0lDOHZJRU52Ym5SbGVIUWdhV1JsYm5ScGRIbGNiaUFnSUNBZ0lHaDFibXN1YkdsdVpYTXVjSFZ6YUNodGFXNWxRM1Z5Y21WdWRDazdYRzRnSUNBZ0lDQnRhVzVsTG1sdVpHVjRLeXM3WEc0Z0lDQWdJQ0IwYUdWcGNpNXBibVJsZUNzck8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0F2THlCRGIyNTBaWGgwSUcxcGMyMWhkR05vWEc0Z0lDQWdJQ0JqYjI1bWJHbGpkQ2hvZFc1ckxDQmpiMnhzWldOMFEyaGhibWRsS0cxcGJtVXBMQ0JqYjJ4c1pXTjBRMmhoYm1kbEtIUm9aV2x5S1NrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5OGdUbTkzSUhCMWMyZ2dZVzU1ZEdocGJtY2dkR2hoZENCdFlYa2dZbVVnY21WdFlXbHVhVzVuWEc0Z0lHbHVjMlZ5ZEZSeVlXbHNhVzVuS0doMWJtc3NJRzFwYm1VcE8xeHVJQ0JwYm5ObGNuUlVjbUZwYkdsdVp5aG9kVzVyTENCMGFHVnBjaWs3WEc1Y2JpQWdZMkZzWTB4cGJtVkRiM1Z1ZENob2RXNXJLVHRjYm4xY2JseHVablZ1WTNScGIyNGdiWFYwZFdGc1EyaGhibWRsS0doMWJtc3NJRzFwYm1Vc0lIUm9aV2x5S1NCN1hHNGdJR3hsZENCdGVVTm9ZVzVuWlhNZ1BTQmpiMnhzWldOMFEyaGhibWRsS0cxcGJtVXBMRnh1SUNBZ0lDQWdkR2hsYVhKRGFHRnVaMlZ6SUQwZ1kyOXNiR1ZqZEVOb1lXNW5aU2gwYUdWcGNpazdYRzVjYmlBZ2FXWWdLR0ZzYkZKbGJXOTJaWE1vYlhsRGFHRnVaMlZ6S1NBbUppQmhiR3hTWlcxdmRtVnpLSFJvWldseVEyaGhibWRsY3lrcElIdGNiaUFnSUNBdkx5QlRjR1ZqYVdGc0lHTmhjMlVnWm05eUlISmxiVzkyWlNCamFHRnVaMlZ6SUhSb1lYUWdZWEpsSUhOMWNHVnljMlYwY3lCdlppQnZibVVnWVc1dmRHaGxjbHh1SUNBZ0lHbG1JQ2hoY25KaGVWTjBZWEowYzFkcGRHZ29iWGxEYUdGdVoyVnpMQ0IwYUdWcGNrTm9ZVzVuWlhNcFhHNGdJQ0FnSUNBZ0lDWW1JSE5yYVhCU1pXMXZkbVZUZFhCbGNuTmxkQ2gwYUdWcGNpd2diWGxEYUdGdVoyVnpMQ0J0ZVVOb1lXNW5aWE11YkdWdVozUm9JQzBnZEdobGFYSkRhR0Z1WjJWekxteGxibWQwYUNrcElIdGNiaUFnSUNBZ0lHaDFibXN1YkdsdVpYTXVjSFZ6YUNndUxpNGdiWGxEYUdGdVoyVnpLVHRjYmlBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHRnljbUY1VTNSaGNuUnpWMmwwYUNoMGFHVnBja05vWVc1blpYTXNJRzE1UTJoaGJtZGxjeWxjYmlBZ0lDQWdJQ0FnSmlZZ2MydHBjRkpsYlc5MlpWTjFjR1Z5YzJWMEtHMXBibVVzSUhSb1pXbHlRMmhoYm1kbGN5d2dkR2hsYVhKRGFHRnVaMlZ6TG14bGJtZDBhQ0F0SUcxNVEyaGhibWRsY3k1c1pXNW5kR2dwS1NCN1hHNGdJQ0FnSUNCb2RXNXJMbXhwYm1WekxuQjFjMmdvTGk0dUlIUm9aV2x5UTJoaGJtZGxjeWs3WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVJQ0I5SUdWc2MyVWdhV1lnS0dGeWNtRjVSWEYxWVd3b2JYbERhR0Z1WjJWekxDQjBhR1ZwY2tOb1lXNW5aWE1wS1NCN1hHNGdJQ0FnYUhWdWF5NXNhVzVsY3k1d2RYTm9LQzR1TGlCdGVVTm9ZVzVuWlhNcE8xeHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVYRzRnSUdOdmJtWnNhV04wS0doMWJtc3NJRzE1UTJoaGJtZGxjeXdnZEdobGFYSkRhR0Z1WjJWektUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2NtVnRiM1poYkNob2RXNXJMQ0J0YVc1bExDQjBhR1ZwY2l3Z2MzZGhjQ2tnZTF4dUlDQnNaWFFnYlhsRGFHRnVaMlZ6SUQwZ1kyOXNiR1ZqZEVOb1lXNW5aU2h0YVc1bEtTeGNiaUFnSUNBZ0lIUm9aV2x5UTJoaGJtZGxjeUE5SUdOdmJHeGxZM1JEYjI1MFpYaDBLSFJvWldseUxDQnRlVU5vWVc1blpYTXBPMXh1SUNCcFppQW9kR2hsYVhKRGFHRnVaMlZ6TG0xbGNtZGxaQ2tnZTF4dUlDQWdJR2gxYm1zdWJHbHVaWE11Y0hWemFDZ3VMaTRnZEdobGFYSkRhR0Z1WjJWekxtMWxjbWRsWkNrN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ1kyOXVabXhwWTNRb2FIVnVheXdnYzNkaGNDQS9JSFJvWldseVEyaGhibWRsY3lBNklHMTVRMmhoYm1kbGN5d2djM2RoY0NBL0lHMTVRMmhoYm1kbGN5QTZJSFJvWldseVEyaGhibWRsY3lrN1hHNGdJSDFjYm4xY2JseHVablZ1WTNScGIyNGdZMjl1Wm14cFkzUW9hSFZ1YXl3Z2JXbHVaU3dnZEdobGFYSXBJSHRjYmlBZ2FIVnVheTVqYjI1bWJHbGpkQ0E5SUhSeWRXVTdYRzRnSUdoMWJtc3ViR2x1WlhNdWNIVnphQ2g3WEc0Z0lDQWdZMjl1Wm14cFkzUTZJSFJ5ZFdVc1hHNGdJQ0FnYldsdVpUb2diV2x1WlN4Y2JpQWdJQ0IwYUdWcGNuTTZJSFJvWldseVhHNGdJSDBwTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJwYm5ObGNuUk1aV0ZrYVc1bktHaDFibXNzSUdsdWMyVnlkQ3dnZEdobGFYSXBJSHRjYmlBZ2QyaHBiR1VnS0dsdWMyVnlkQzV2Wm1aelpYUWdQQ0IwYUdWcGNpNXZabVp6WlhRZ0ppWWdhVzV6WlhKMExtbHVaR1Y0SUR3Z2FXNXpaWEowTG14cGJtVnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lHeGxkQ0JzYVc1bElEMGdhVzV6WlhKMExteHBibVZ6VzJsdWMyVnlkQzVwYm1SbGVDc3JYVHRjYmlBZ0lDQm9kVzVyTG14cGJtVnpMbkIxYzJnb2JHbHVaU2s3WEc0Z0lDQWdhVzV6WlhKMExtOW1abk5sZENzck8xeHVJQ0I5WEc1OVhHNW1kVzVqZEdsdmJpQnBibk5sY25SVWNtRnBiR2x1Wnlob2RXNXJMQ0JwYm5ObGNuUXBJSHRjYmlBZ2QyaHBiR1VnS0dsdWMyVnlkQzVwYm1SbGVDQThJR2x1YzJWeWRDNXNhVzVsY3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0JzWlhRZ2JHbHVaU0E5SUdsdWMyVnlkQzVzYVc1bGMxdHBibk5sY25RdWFXNWtaWGdySzEwN1hHNGdJQ0FnYUhWdWF5NXNhVzVsY3k1d2RYTm9LR3hwYm1VcE8xeHVJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJR052Ykd4bFkzUkRhR0Z1WjJVb2MzUmhkR1VwSUh0Y2JpQWdiR1YwSUhKbGRDQTlJRnRkTEZ4dUlDQWdJQ0FnYjNCbGNtRjBhVzl1SUQwZ2MzUmhkR1V1YkdsdVpYTmJjM1JoZEdVdWFXNWtaWGhkV3pCZE8xeHVJQ0IzYUdsc1pTQW9jM1JoZEdVdWFXNWtaWGdnUENCemRHRjBaUzVzYVc1bGN5NXNaVzVuZEdncElIdGNiaUFnSUNCc1pYUWdiR2x1WlNBOUlITjBZWFJsTG14cGJtVnpXM04wWVhSbExtbHVaR1Y0WFR0Y2JseHVJQ0FnSUM4dklFZHliM1Z3SUdGa1pHbDBhVzl1Y3lCMGFHRjBJR0Z5WlNCcGJXMWxaR2xoZEdWc2VTQmhablJsY2lCemRXSjBjbUZqZEdsdmJuTWdZVzVrSUhSeVpXRjBJSFJvWlcwZ1lYTWdiMjVsSUZ3aVlYUnZiV2xqWENJZ2JXOWthV1o1SUdOb1lXNW5aUzVjYmlBZ0lDQnBaaUFvYjNCbGNtRjBhVzl1SUQwOVBTQW5MU2NnSmlZZ2JHbHVaVnN3WFNBOVBUMGdKeXNuS1NCN1hHNGdJQ0FnSUNCdmNHVnlZWFJwYjI0Z1BTQW5LeWM3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c5d1pYSmhkR2x2YmlBOVBUMGdiR2x1WlZzd1hTa2dlMXh1SUNBZ0lDQWdjbVYwTG5CMWMyZ29iR2x1WlNrN1hHNGdJQ0FnSUNCemRHRjBaUzVwYm1SbGVDc3JPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdjbVYwTzF4dWZWeHVablZ1WTNScGIyNGdZMjlzYkdWamRFTnZiblJsZUhRb2MzUmhkR1VzSUcxaGRHTm9RMmhoYm1kbGN5a2dlMXh1SUNCc1pYUWdZMmhoYm1kbGN5QTlJRnRkTEZ4dUlDQWdJQ0FnYldWeVoyVmtJRDBnVzEwc1hHNGdJQ0FnSUNCdFlYUmphRWx1WkdWNElEMGdNQ3hjYmlBZ0lDQWdJR052Ym5SbGVIUkRhR0Z1WjJWeklEMGdabUZzYzJVc1hHNGdJQ0FnSUNCamIyNW1iR2xqZEdWa0lEMGdabUZzYzJVN1hHNGdJSGRvYVd4bElDaHRZWFJqYUVsdVpHVjRJRHdnYldGMFkyaERhR0Z1WjJWekxteGxibWQwYUZ4dUlDQWdJQ0FnSUNBbUppQnpkR0YwWlM1cGJtUmxlQ0E4SUhOMFlYUmxMbXhwYm1WekxteGxibWQwYUNrZ2UxeHVJQ0FnSUd4bGRDQmphR0Z1WjJVZ1BTQnpkR0YwWlM1c2FXNWxjMXR6ZEdGMFpTNXBibVJsZUYwc1hHNGdJQ0FnSUNBZ0lHMWhkR05vSUQwZ2JXRjBZMmhEYUdGdVoyVnpXMjFoZEdOb1NXNWtaWGhkTzF4dVhHNGdJQ0FnTHk4Z1QyNWpaU0IzWlNkMlpTQm9hWFFnYjNWeUlHRmtaQ3dnZEdobGJpQjNaU0JoY21VZ1pHOXVaVnh1SUNBZ0lHbG1JQ2h0WVhSamFGc3dYU0E5UFQwZ0p5c25LU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNWNiaUFnSUNCamIyNTBaWGgwUTJoaGJtZGxjeUE5SUdOdmJuUmxlSFJEYUdGdVoyVnpJSHg4SUdOb1lXNW5aVnN3WFNBaFBUMGdKeUFuTzF4dVhHNGdJQ0FnYldWeVoyVmtMbkIxYzJnb2JXRjBZMmdwTzF4dUlDQWdJRzFoZEdOb1NXNWtaWGdyS3p0Y2JseHVJQ0FnSUM4dklFTnZibk4xYldVZ1lXNTVJR0ZrWkdsMGFXOXVjeUJwYmlCMGFHVWdiM1JvWlhJZ1lteHZZMnNnWVhNZ1lTQmpiMjVtYkdsamRDQjBieUJoZEhSbGJYQjBYRzRnSUNBZ0x5OGdkRzhnY0hWc2JDQnBiaUIwYUdVZ2NtVnRZV2x1YVc1bklHTnZiblJsZUhRZ1lXWjBaWElnZEdocGMxeHVJQ0FnSUdsbUlDaGphR0Z1WjJWYk1GMGdQVDA5SUNjckp5a2dlMXh1SUNBZ0lDQWdZMjl1Wm14cFkzUmxaQ0E5SUhSeWRXVTdYRzVjYmlBZ0lDQWdJSGRvYVd4bElDaGphR0Z1WjJWYk1GMGdQVDA5SUNjckp5a2dlMXh1SUNBZ0lDQWdJQ0JqYUdGdVoyVnpMbkIxYzJnb1kyaGhibWRsS1R0Y2JpQWdJQ0FnSUNBZ1kyaGhibWRsSUQwZ2MzUmhkR1V1YkdsdVpYTmJLeXR6ZEdGMFpTNXBibVJsZUYwN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHMWhkR05vTG5OMVluTjBjaWd4S1NBOVBUMGdZMmhoYm1kbExuTjFZbk4wY2lneEtTa2dlMXh1SUNBZ0lDQWdZMmhoYm1kbGN5NXdkWE5vS0dOb1lXNW5aU2s3WEc0Z0lDQWdJQ0J6ZEdGMFpTNXBibVJsZUNzck8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JqYjI1bWJHbGpkR1ZrSUQwZ2RISjFaVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0JwWmlBb0tHMWhkR05vUTJoaGJtZGxjMXR0WVhSamFFbHVaR1Y0WFNCOGZDQW5KeWxiTUYwZ1BUMDlJQ2NySjF4dUlDQWdJQ0FnSmlZZ1kyOXVkR1Y0ZEVOb1lXNW5aWE1wSUh0Y2JpQWdJQ0JqYjI1bWJHbGpkR1ZrSUQwZ2RISjFaVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaGpiMjVtYkdsamRHVmtLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHTm9ZVzVuWlhNN1hHNGdJSDFjYmx4dUlDQjNhR2xzWlNBb2JXRjBZMmhKYm1SbGVDQThJRzFoZEdOb1EyaGhibWRsY3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0J0WlhKblpXUXVjSFZ6YUNodFlYUmphRU5vWVc1blpYTmJiV0YwWTJoSmJtUmxlQ3NyWFNrN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUcxbGNtZGxaQ3hjYmlBZ0lDQmphR0Z1WjJWelhHNGdJSDA3WEc1OVhHNWNibVoxYm1OMGFXOXVJR0ZzYkZKbGJXOTJaWE1vWTJoaGJtZGxjeWtnZTF4dUlDQnlaWFIxY200Z1kyaGhibWRsY3k1eVpXUjFZMlVvWm5WdVkzUnBiMjRvY0hKbGRpd2dZMmhoYm1kbEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhCeVpYWWdKaVlnWTJoaGJtZGxXekJkSUQwOVBTQW5MU2M3WEc0Z0lIMHNJSFJ5ZFdVcE8xeHVmVnh1Wm5WdVkzUnBiMjRnYzJ0cGNGSmxiVzkyWlZOMWNHVnljMlYwS0hOMFlYUmxMQ0J5WlcxdmRtVkRhR0Z1WjJWekxDQmtaV3gwWVNrZ2UxeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdSbGJIUmhPeUJwS3lzcElIdGNiaUFnSUNCc1pYUWdZMmhoYm1kbFEyOXVkR1Z1ZENBOUlISmxiVzkyWlVOb1lXNW5aWE5iY21WdGIzWmxRMmhoYm1kbGN5NXNaVzVuZEdnZ0xTQmtaV3gwWVNBcklHbGRMbk4xWW5OMGNpZ3hLVHRjYmlBZ0lDQnBaaUFvYzNSaGRHVXViR2x1WlhOYmMzUmhkR1V1YVc1a1pYZ2dLeUJwWFNBaFBUMGdKeUFuSUNzZ1kyaGhibWRsUTI5dWRHVnVkQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lITjBZWFJsTG1sdVpHVjRJQ3M5SUdSbGJIUmhPMXh1SUNCeVpYUjFjbTRnZEhKMVpUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1kyRnNZMDlzWkU1bGQweHBibVZEYjNWdWRDaHNhVzVsY3lrZ2UxeHVJQ0JzWlhRZ2IyeGtUR2x1WlhNZ1BTQXdPMXh1SUNCc1pYUWdibVYzVEdsdVpYTWdQU0F3TzF4dVhHNGdJR3hwYm1WekxtWnZja1ZoWTJnb1puVnVZM1JwYjI0b2JHbHVaU2tnZTF4dUlDQWdJR2xtSUNoMGVYQmxiMllnYkdsdVpTQWhQVDBnSjNOMGNtbHVaeWNwSUh0Y2JpQWdJQ0FnSUd4bGRDQnRlVU52ZFc1MElEMGdZMkZzWTA5c1pFNWxkMHhwYm1WRGIzVnVkQ2hzYVc1bExtMXBibVVwTzF4dUlDQWdJQ0FnYkdWMElIUm9aV2x5UTI5MWJuUWdQU0JqWVd4alQyeGtUbVYzVEdsdVpVTnZkVzUwS0d4cGJtVXVkR2hsYVhKektUdGNibHh1SUNBZ0lDQWdhV1lnS0c5c1pFeHBibVZ6SUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHMTVRMjkxYm5RdWIyeGtUR2x1WlhNZ1BUMDlJSFJvWldseVEyOTFiblF1YjJ4a1RHbHVaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQnZiR1JNYVc1bGN5QXJQU0J0ZVVOdmRXNTBMbTlzWkV4cGJtVnpPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUc5c1pFeHBibVZ6SUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR2xtSUNodVpYZE1hVzVsY3lBaFBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHRlVU52ZFc1MExtNWxkMHhwYm1WeklEMDlQU0IwYUdWcGNrTnZkVzUwTG01bGQweHBibVZ6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdibVYzVEdsdVpYTWdLejBnYlhsRGIzVnVkQzV1WlhkTWFXNWxjenRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCdVpYZE1hVzVsY3lBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCcFppQW9ibVYzVEdsdVpYTWdJVDA5SUhWdVpHVm1hVzVsWkNBbUppQW9iR2x1WlZzd1hTQTlQVDBnSnlzbklIeDhJR3hwYm1WYk1GMGdQVDA5SUNjZ0p5a3BJSHRjYmlBZ0lDQWdJQ0FnYm1WM1RHbHVaWE1yS3p0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDaHZiR1JNYVc1bGN5QWhQVDBnZFc1a1pXWnBibVZrSUNZbUlDaHNhVzVsV3pCZElEMDlQU0FuTFNjZ2ZId2diR2x1WlZzd1hTQTlQVDBnSnlBbktTa2dlMXh1SUNBZ0lDQWdJQ0J2YkdSTWFXNWxjeXNyTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZTazdYRzVjYmlBZ2NtVjBkWEp1SUh0dmJHUk1hVzVsY3l3Z2JtVjNUR2x1WlhOOU8xeHVmVnh1SWwxOVxuXG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovc3RydWN0dXJlZFBhdGNoID0gc3RydWN0dXJlZFBhdGNoO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jcmVhdGVUd29GaWxlc1BhdGNoID0gY3JlYXRlVHdvRmlsZXNQYXRjaDtcblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2V4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY3JlYXRlUGF0Y2ggPSBjcmVhdGVQYXRjaDtcblxuXHR2YXIgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19saW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9mdW5jdGlvbiBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcblx0ICBpZiAoIW9wdGlvbnMpIHtcblx0ICAgIG9wdGlvbnMgPSB7fTtcblx0ICB9XG5cdCAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnRleHQgPT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICBvcHRpb25zLmNvbnRleHQgPSA0O1xuXHQgIH1cblxuXHQgIHZhciBkaWZmID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLygwLCBfbGluZS5kaWZmTGluZXMpIC8qaXN0YW5idWwgaWdub3JlIGVuZCovKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcblx0ICBkaWZmLnB1c2goeyB2YWx1ZTogJycsIGxpbmVzOiBbXSB9KTsgLy8gQXBwZW5kIGFuIGVtcHR5IHZhbHVlIHRvIG1ha2UgY2xlYW51cCBlYXNpZXJcblxuXHQgIGZ1bmN0aW9uIGNvbnRleHRMaW5lcyhsaW5lcykge1xuXHQgICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbiAoZW50cnkpIHtcblx0ICAgICAgcmV0dXJuICcgJyArIGVudHJ5O1xuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgdmFyIGh1bmtzID0gW107XG5cdCAgdmFyIG9sZFJhbmdlU3RhcnQgPSAwLFxuXHQgICAgICBuZXdSYW5nZVN0YXJ0ID0gMCxcblx0ICAgICAgY3VyUmFuZ2UgPSBbXSxcblx0ICAgICAgb2xkTGluZSA9IDEsXG5cdCAgICAgIG5ld0xpbmUgPSAxO1xuXG5cdCAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2kpIHtcblx0ICAgIHZhciBjdXJyZW50ID0gZGlmZltpXSxcblx0ICAgICAgICBsaW5lcyA9IGN1cnJlbnQubGluZXMgfHwgY3VycmVudC52YWx1ZS5yZXBsYWNlKC9cXG4kLywgJycpLnNwbGl0KCdcXG4nKTtcblx0ICAgIGN1cnJlbnQubGluZXMgPSBsaW5lcztcblxuXHQgICAgaWYgKGN1cnJlbnQuYWRkZWQgfHwgY3VycmVudC5yZW1vdmVkKSB7XG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2N1clJhbmdlO1xuXG5cdCAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8vIElmIHdlIGhhdmUgcHJldmlvdXMgY29udGV4dCwgc3RhcnQgd2l0aCB0aGF0XG5cdCAgICAgIGlmICghb2xkUmFuZ2VTdGFydCkge1xuXHQgICAgICAgIHZhciBwcmV2ID0gZGlmZltpIC0gMV07XG5cdCAgICAgICAgb2xkUmFuZ2VTdGFydCA9IG9sZExpbmU7XG5cdCAgICAgICAgbmV3UmFuZ2VTdGFydCA9IG5ld0xpbmU7XG5cblx0ICAgICAgICBpZiAocHJldikge1xuXHQgICAgICAgICAgY3VyUmFuZ2UgPSBvcHRpb25zLmNvbnRleHQgPiAwID8gY29udGV4dExpbmVzKHByZXYubGluZXMuc2xpY2UoLW9wdGlvbnMuY29udGV4dCkpIDogW107XG5cdCAgICAgICAgICBvbGRSYW5nZVN0YXJ0IC09IGN1clJhbmdlLmxlbmd0aDtcblx0ICAgICAgICAgIG5ld1JhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIC8vIE91dHB1dCBvdXIgY2hhbmdlc1xuXHQgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovKF9jdXJSYW5nZSA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovY3VyUmFuZ2UpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19jdXJSYW5nZSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9saW5lcy5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7XG5cdCAgICAgICAgcmV0dXJuIChjdXJyZW50LmFkZGVkID8gJysnIDogJy0nKSArIGVudHJ5O1xuXHQgICAgICB9KSkpO1xuXG5cdCAgICAgIC8vIFRyYWNrIHRoZSB1cGRhdGVkIGZpbGUgcG9zaXRpb25cblx0ICAgICAgaWYgKGN1cnJlbnQuYWRkZWQpIHtcblx0ICAgICAgICBuZXdMaW5lICs9IGxpbmVzLmxlbmd0aDtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcblx0ICAgICAgfVxuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgLy8gSWRlbnRpY2FsIGNvbnRleHQgbGluZXMuIFRyYWNrIGxpbmUgY2hhbmdlc1xuXHQgICAgICBpZiAob2xkUmFuZ2VTdGFydCkge1xuXHQgICAgICAgIC8vIENsb3NlIG91dCBhbnkgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBvdXRwdXQgKG9yIGpvaW4gb3ZlcmxhcHBpbmcpXG5cdCAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQgKiAyICYmIGkgPCBkaWZmLmxlbmd0aCAtIDIpIHtcblx0ICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki92YXIgX2N1clJhbmdlMjtcblxuXHQgICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8gLy8gT3ZlcmxhcHBpbmdcblx0ICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki8oX2N1clJhbmdlMiA9IC8qaXN0YW5idWwgaWdub3JlIGVuZCovY3VyUmFuZ2UpLnB1c2guIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9hcHBseSAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyggLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL19jdXJSYW5nZTIgLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi8sIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fdG9Db25zdW1hYmxlQXJyYXkoIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY29udGV4dExpbmVzKGxpbmVzKSkpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovdmFyIF9jdXJSYW5nZTM7XG5cblx0ICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVuZCovIC8vIGVuZCB0aGUgcmFuZ2UgYW5kIG91dHB1dFxuXHQgICAgICAgICAgdmFyIGNvbnRleHRTaXplID0gTWF0aC5taW4obGluZXMubGVuZ3RoLCBvcHRpb25zLmNvbnRleHQpO1xuXHQgICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqLyhfY3VyUmFuZ2UzID0gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jdXJSYW5nZSkucHVzaC4gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL2FwcGx5IC8qaXN0YW5idWwgaWdub3JlIGVuZCovKCAvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovX2N1clJhbmdlMyAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLywgLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL190b0NvbnN1bWFibGVBcnJheSggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9jb250ZXh0TGluZXMobGluZXMuc2xpY2UoMCwgY29udGV4dFNpemUpKSkpO1xuXG5cdCAgICAgICAgICB2YXIgaHVuayA9IHtcblx0ICAgICAgICAgICAgb2xkU3RhcnQ6IG9sZFJhbmdlU3RhcnQsXG5cdCAgICAgICAgICAgIG9sZExpbmVzOiBvbGRMaW5lIC0gb2xkUmFuZ2VTdGFydCArIGNvbnRleHRTaXplLFxuXHQgICAgICAgICAgICBuZXdTdGFydDogbmV3UmFuZ2VTdGFydCxcblx0ICAgICAgICAgICAgbmV3TGluZXM6IG5ld0xpbmUgLSBuZXdSYW5nZVN0YXJ0ICsgY29udGV4dFNpemUsXG5cdCAgICAgICAgICAgIGxpbmVzOiBjdXJSYW5nZVxuXHQgICAgICAgICAgfTtcblx0ICAgICAgICAgIGlmIChpID49IGRpZmYubGVuZ3RoIC0gMiAmJiBsaW5lcy5sZW5ndGggPD0gb3B0aW9ucy5jb250ZXh0KSB7XG5cdCAgICAgICAgICAgIC8vIEVPRiBpcyBpbnNpZGUgdGhpcyBodW5rXG5cdCAgICAgICAgICAgIHZhciBvbGRFT0ZOZXdsaW5lID0gL1xcbiQvLnRlc3Qob2xkU3RyKTtcblx0ICAgICAgICAgICAgdmFyIG5ld0VPRk5ld2xpbmUgPSAvXFxuJC8udGVzdChuZXdTdHIpO1xuXHQgICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09IDAgJiYgIW9sZEVPRk5ld2xpbmUpIHtcblx0ICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IG9sZCBoYXMgbm8gZW9sIGFuZCBubyB0cmFpbGluZyBjb250ZXh0OyBuby1ubCBjYW4gZW5kIHVwIGJlZm9yZSBhZGRzXG5cdCAgICAgICAgICAgICAgY3VyUmFuZ2Uuc3BsaWNlKGh1bmsub2xkTGluZXMsIDAsICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICghb2xkRU9GTmV3bGluZSB8fCAhbmV3RU9GTmV3bGluZSkge1xuXHQgICAgICAgICAgICAgIGN1clJhbmdlLnB1c2goJ1xcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZScpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBodW5rcy5wdXNoKGh1bmspO1xuXG5cdCAgICAgICAgICBvbGRSYW5nZVN0YXJ0ID0gMDtcblx0ICAgICAgICAgIG5ld1JhbmdlU3RhcnQgPSAwO1xuXHQgICAgICAgICAgY3VyUmFuZ2UgPSBbXTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG5cdCAgICAgIG5ld0xpbmUgKz0gbGluZXMubGVuZ3RoO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmYubGVuZ3RoOyBpKyspIHtcblx0ICAgIC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9fbG9vcCggLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9pKTtcblx0ICB9XG5cblx0ICByZXR1cm4ge1xuXHQgICAgb2xkRmlsZU5hbWU6IG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZTogbmV3RmlsZU5hbWUsXG5cdCAgICBvbGRIZWFkZXI6IG9sZEhlYWRlciwgbmV3SGVhZGVyOiBuZXdIZWFkZXIsXG5cdCAgICBodW5rczogaHVua3Ncblx0ICB9O1xuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlVHdvRmlsZXNQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuXHQgIHZhciBkaWZmID0gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcblxuXHQgIHZhciByZXQgPSBbXTtcblx0ICBpZiAob2xkRmlsZU5hbWUgPT0gbmV3RmlsZU5hbWUpIHtcblx0ICAgIHJldC5wdXNoKCdJbmRleDogJyArIG9sZEZpbGVOYW1lKTtcblx0ICB9XG5cdCAgcmV0LnB1c2goJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcblx0ICByZXQucHVzaCgnLS0tICcgKyBkaWZmLm9sZEZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm9sZEhlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5vbGRIZWFkZXIpKTtcblx0ICByZXQucHVzaCgnKysrICcgKyBkaWZmLm5ld0ZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm5ld0hlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5uZXdIZWFkZXIpKTtcblxuXHQgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlmZi5odW5rcy5sZW5ndGg7IGkrKykge1xuXHQgICAgdmFyIGh1bmsgPSBkaWZmLmh1bmtzW2ldO1xuXHQgICAgcmV0LnB1c2goJ0BAIC0nICsgaHVuay5vbGRTdGFydCArICcsJyArIGh1bmsub2xkTGluZXMgKyAnICsnICsgaHVuay5uZXdTdGFydCArICcsJyArIGh1bmsubmV3TGluZXMgKyAnIEBAJyk7XG5cdCAgICByZXQucHVzaC5hcHBseShyZXQsIGh1bmsubGluZXMpO1xuXHQgIH1cblxuXHQgIHJldHVybiByZXQuam9pbignXFxuJykgKyAnXFxuJztcblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZVBhdGNoKGZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcblx0ICByZXR1cm4gY3JlYXRlVHdvRmlsZXNQYXRjaChmaWxlTmFtZSwgZmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucyk7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5d1lYUmphQzlqY21WaGRHVXVhbk1pWFN3aWJtRnRaWE1pT2xzaWMzUnlkV04wZFhKbFpGQmhkR05vSWl3aVkzSmxZWFJsVkhkdlJtbHNaWE5RWVhSamFDSXNJbU55WldGMFpWQmhkR05vSWl3aWIyeGtSbWxzWlU1aGJXVWlMQ0p1WlhkR2FXeGxUbUZ0WlNJc0ltOXNaRk4wY2lJc0ltNWxkMU4wY2lJc0ltOXNaRWhsWVdSbGNpSXNJbTVsZDBobFlXUmxjaUlzSW05d2RHbHZibk1pTENKamIyNTBaWGgwSWl3aVpHbG1aaUlzSW5CMWMyZ2lMQ0oyWVd4MVpTSXNJbXhwYm1Weklpd2lZMjl1ZEdWNGRFeHBibVZ6SWl3aWJXRndJaXdpWlc1MGNua2lMQ0pvZFc1cmN5SXNJbTlzWkZKaGJtZGxVM1JoY25RaUxDSnVaWGRTWVc1blpWTjBZWEowSWl3aVkzVnlVbUZ1WjJVaUxDSnZiR1JNYVc1bElpd2libVYzVEdsdVpTSXNJbWtpTENKamRYSnlaVzUwSWl3aWNtVndiR0ZqWlNJc0luTndiR2wwSWl3aVlXUmtaV1FpTENKeVpXMXZkbVZrSWl3aWNISmxkaUlzSW5Oc2FXTmxJaXdpYkdWdVozUm9JaXdpWTI5dWRHVjRkRk5wZW1VaUxDSk5ZWFJvSWl3aWJXbHVJaXdpYUhWdWF5SXNJbTlzWkZOMFlYSjBJaXdpYjJ4a1RHbHVaWE1pTENKdVpYZFRkR0Z5ZENJc0ltNWxkMHhwYm1Weklpd2liMnhrUlU5R1RtVjNiR2x1WlNJc0luUmxjM1FpTENKdVpYZEZUMFpPWlhkc2FXNWxJaXdpYzNCc2FXTmxJaXdpY21WMElpd2lZWEJ3YkhraUxDSnFiMmx1SWl3aVptbHNaVTVoYldVaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3p0blEwRkZaMEpCTEdVc1IwRkJRVUVzWlR0NVJFRnBSMEZETEcxQ0xFZEJRVUZCTEcxQ08zbEVRWGRDUVVNc1Z5eEhRVUZCUVN4WE96dEJRVE5JYUVJN096czdkVUpCUlU4c1UwRkJVMFlzWlVGQlZDeERRVUY1UWtjc1YwRkJla0lzUlVGQmMwTkRMRmRCUVhSRExFVkJRVzFFUXl4TlFVRnVSQ3hGUVVFeVJFTXNUVUZCTTBRc1JVRkJiVVZETEZOQlFXNUZMRVZCUVRoRlF5eFRRVUU1UlN4RlFVRjVSa01zVDBGQmVrWXNSVUZCYTBjN1FVRkRka2NzVFVGQlNTeERRVUZEUVN4UFFVRk1MRVZCUVdNN1FVRkRXa0VzWTBGQlZTeEZRVUZXTzBGQlEwUTdRVUZEUkN4TlFVRkpMRTlCUVU5QkxGRkJRVkZETEU5QlFXWXNTMEZCTWtJc1YwRkJMMElzUlVGQk5FTTdRVUZETVVORUxGbEJRVkZETEU5QlFWSXNSMEZCYTBJc1EwRkJiRUk3UVVGRFJEczdRVUZGUkN4TlFVRk5ReXhQUVVGUExITkZRVUZWVGl4TlFVRldMRVZCUVd0Q1F5eE5RVUZzUWl4RlFVRXdRa2NzVDBGQk1VSXNRMEZCWWp0QlFVTkJSU3hQUVVGTFF5eEpRVUZNTEVOQlFWVXNSVUZCUTBNc1QwRkJUeXhGUVVGU0xFVkJRVmxETEU5QlFVOHNSVUZCYmtJc1JVRkJWaXhGUVZSMVJ5eERRVk5zUlRzN1FVRkZja01zVjBGQlUwTXNXVUZCVkN4RFFVRnpRa1FzUzBGQmRFSXNSVUZCTmtJN1FVRkRNMElzVjBGQlQwRXNUVUZCVFVVc1IwRkJUaXhEUVVGVkxGVkJRVk5ETEV0QlFWUXNSVUZCWjBJN1FVRkJSU3hoUVVGUExFMUJRVTFCTEV0QlFXSTdRVUZCY1VJc1MwRkJha1FzUTBGQlVEdEJRVU5FT3p0QlFVVkVMRTFCUVVsRExGRkJRVkVzUlVGQldqdEJRVU5CTEUxQlFVbERMR2RDUVVGblFpeERRVUZ3UWp0QlFVRkJMRTFCUVhWQ1F5eG5Ra0ZCWjBJc1EwRkJka003UVVGQlFTeE5RVUV3UTBNc1YwRkJWeXhGUVVGeVJEdEJRVUZCTEUxQlEwbERMRlZCUVZVc1EwRkVaRHRCUVVGQkxFMUJRMmxDUXl4VlFVRlZMRU5CUkROQ096dEJRV2hDZFVjc09FVkJhMEk1UmtNc1EwRnNRamhHTzBGQmJVSnlSeXhSUVVGTlF5eFZRVUZWWkN4TFFVRkxZU3hEUVVGTUxFTkJRV2hDTzBGQlFVRXNVVUZEVFZZc1VVRkJVVmNzVVVGQlVWZ3NTMEZCVWl4SlFVRnBRbGNzVVVGQlVWb3NTMEZCVWl4RFFVRmpZU3hQUVVGa0xFTkJRWE5DTEV0QlFYUkNMRVZCUVRaQ0xFVkJRVGRDTEVWQlFXbERReXhMUVVGcVF5eERRVUYxUXl4SlFVRjJReXhEUVVRdlFqdEJRVVZCUml4WlFVRlJXQ3hMUVVGU0xFZEJRV2RDUVN4TFFVRm9RanM3UVVGRlFTeFJRVUZKVnl4UlFVRlJSeXhMUVVGU0xFbEJRV2xDU0N4UlFVRlJTU3hQUVVFM1FpeEZRVUZ6UXp0QlFVRkJPenRCUVVGQkxEaENRVU53UXp0QlFVTkJMRlZCUVVrc1EwRkJRMVlzWVVGQlRDeEZRVUZ2UWp0QlFVTnNRaXhaUVVGTlZ5eFBRVUZQYmtJc1MwRkJTMkVzU1VGQlNTeERRVUZVTEVOQlFXSTdRVUZEUVV3c2QwSkJRV2RDUnl4UFFVRm9RanRCUVVOQlJpeDNRa0ZCWjBKSExFOUJRV2hDT3p0QlFVVkJMRmxCUVVsUExFbEJRVW9zUlVGQlZUdEJRVU5TVkN4eFFrRkJWMW9zVVVGQlVVTXNUMEZCVWl4SFFVRnJRaXhEUVVGc1FpeEhRVUZ6UWtzc1lVRkJZV1VzUzBGQlMyaENMRXRCUVV3c1EwRkJWMmxDTEV0QlFWZ3NRMEZCYVVJc1EwRkJRM1JDTEZGQlFWRkRMRTlCUVRGQ0xFTkJRV0lzUTBGQmRFSXNSMEZCZVVVc1JVRkJjRVk3UVVGRFFWTXNNa0pCUVdsQ1JTeFRRVUZUVnl4TlFVRXhRanRCUVVOQldpd3lRa0ZCYVVKRExGTkJRVk5YTEUxQlFURkNPMEZCUTBRN1FVRkRSanM3UVVGRlJEdEJRVU5CTERaRlFVRlRjRUlzU1VGQlZDd3dURUZCYTBKRkxFMUJRVTFGTEVkQlFVNHNRMEZCVlN4VlFVRlRReXhMUVVGVUxFVkJRV2RDTzBGQlF6RkRMR1ZCUVU4c1EwRkJRMUVzVVVGQlVVY3NTMEZCVWl4SFFVRm5RaXhIUVVGb1FpeEhRVUZ6UWl4SFFVRjJRaXhKUVVFNFFsZ3NTMEZCY2tNN1FVRkRSQ3hQUVVacFFpeERRVUZzUWpzN1FVRkpRVHRCUVVOQkxGVkJRVWxSTEZGQlFWRkhMRXRCUVZvc1JVRkJiVUk3UVVGRGFrSk1MRzFDUVVGWFZDeE5RVUZOYTBJc1RVRkJha0k3UVVGRFJDeFBRVVpFTEUxQlJVODdRVUZEVEZZc2JVSkJRVmRTTEUxQlFVMXJRaXhOUVVGcVFqdEJRVU5FTzBGQlEwWXNTMEY2UWtRc1RVRjVRazg3UVVGRFREdEJRVU5CTEZWQlFVbGlMR0ZCUVVvc1JVRkJiVUk3UVVGRGFrSTdRVUZEUVN4WlFVRkpUQ3hOUVVGTmEwSXNUVUZCVGl4SlFVRm5RblpDTEZGQlFWRkRMRTlCUVZJc1IwRkJhMElzUTBGQmJFTXNTVUZCZFVOakxFbEJRVWxpTEV0QlFVdHhRaXhOUVVGTUxFZEJRV01zUTBGQk4wUXNSVUZCWjBVN1FVRkJRVHM3UVVGQlFTeHJRMEZET1VRN1FVRkRRU3hyUmtGQlUzQkNMRWxCUVZRc01reEJRV3RDUnl4aFFVRmhSQ3hMUVVGaUxFTkJRV3hDTzBGQlEwUXNVMEZJUkN4TlFVZFBPMEZCUVVFN08wRkJRVUVzYTBOQlEwdzdRVUZEUVN4alFVRkpiVUlzWTBGQlkwTXNTMEZCUzBNc1IwRkJUQ3hEUVVGVGNrSXNUVUZCVFd0Q0xFMUJRV1lzUlVGQmRVSjJRaXhSUVVGUlF5eFBRVUV2UWl4RFFVRnNRanRCUVVOQkxHdEdRVUZUUlN4SlFVRlVMREpNUVVGclFrY3NZVUZCWVVRc1RVRkJUV2xDTEV0QlFVNHNRMEZCV1N4RFFVRmFMRVZCUVdWRkxGZEJRV1lzUTBGQllpeERRVUZzUWpzN1FVRkZRU3hqUVVGSlJ5eFBRVUZQTzBGQlExUkRMSE5DUVVGVmJFSXNZVUZFUkR0QlFVVlViVUlzYzBKQlFWZG9RaXhWUVVGVlNDeGhRVUZXTEVkQlFUQkNZeXhYUVVZMVFqdEJRVWRVVFN4elFrRkJWVzVDTEdGQlNFUTdRVUZKVkc5Q0xITkNRVUZYYWtJc1ZVRkJWVWdzWVVGQlZpeEhRVUV3UW1Fc1YwRktOVUk3UVVGTFZHNUNMRzFDUVVGUFR6dEJRVXhGTEZkQlFWZzdRVUZQUVN4alFVRkpSeXhMUVVGTFlpeExRVUZMY1VJc1RVRkJUQ3hIUVVGakxFTkJRVzVDTEVsQlFYZENiRUlzVFVGQlRXdENMRTFCUVU0c1NVRkJaMEoyUWl4UlFVRlJReXhQUVVGd1JDeEZRVUUyUkR0QlFVTXpSRHRCUVVOQkxHZENRVUZKSzBJc1owSkJRV2xDTEUxQlFVMURMRWxCUVU0c1EwRkJWM0pETEUxQlFWZ3NRMEZCY2tJN1FVRkRRU3huUWtGQlNYTkRMR2RDUVVGcFFpeE5RVUZOUkN4SlFVRk9MRU5CUVZkd1F5eE5RVUZZTEVOQlFYSkNPMEZCUTBFc1owSkJRVWxSTEUxQlFVMXJRaXhOUVVGT0xFbEJRV2RDTEVOQlFXaENMRWxCUVhGQ0xFTkJRVU5UTEdGQlFURkNMRVZCUVhsRE8wRkJRM1pETzBGQlEwRndRaXgxUWtGQlUzVkNMRTFCUVZRc1EwRkJaMEpTTEV0QlFVdEZMRkZCUVhKQ0xFVkJRU3RDTEVOQlFTOUNMRVZCUVd0RExEaENRVUZzUXp0QlFVTkVMR0ZCU0VRc1RVRkhUeXhKUVVGSkxFTkJRVU5ITEdGQlFVUXNTVUZCYTBJc1EwRkJRMFVzWVVGQmRrSXNSVUZCYzBNN1FVRkRNME4wUWl4MVFrRkJVMVFzU1VGQlZDeERRVUZqTERoQ1FVRmtPMEZCUTBRN1FVRkRSanRCUVVORVRTeG5Ra0ZCVFU0c1NVRkJUaXhEUVVGWGQwSXNTVUZCV0RzN1FVRkZRV3BDTERCQ1FVRm5RaXhEUVVGb1FqdEJRVU5CUXl3d1FrRkJaMElzUTBGQmFFSTdRVUZEUVVNc2NVSkJRVmNzUlVGQldEdEJRVU5FTzBGQlEwWTdRVUZEUkVNc2FVSkJRVmRTTEUxQlFVMXJRaXhOUVVGcVFqdEJRVU5CVkN4cFFrRkJWMVFzVFVGQlRXdENMRTFCUVdwQ08wRkJRMFE3UVVGMlJtOUhPenRCUVd0Q2RrY3NUMEZCU3l4SlFVRkpVaXhKUVVGSkxFTkJRV0lzUlVGQlowSkJMRWxCUVVsaUxFdEJRVXR4UWl4TlFVRjZRaXhGUVVGcFExSXNSMEZCYWtNc1JVRkJjME03UVVGQlFTd3lSRUZCTjBKQkxFTkJRVFpDTzBGQmMwVnlRenM3UVVGRlJDeFRRVUZQTzBGQlEweHlRaXhwUWtGQllVRXNWMEZFVWl4RlFVTnhRa01zWVVGQllVRXNWMEZFYkVNN1FVRkZURWNzWlVGQlYwRXNVMEZHVGl4RlFVVnBRa01zVjBGQlYwRXNVMEZHTlVJN1FVRkhURlVzVjBGQlQwRTdRVUZJUml4SFFVRlFPMEZCUzBRN08wRkJSVTBzVTBGQlUycENMRzFDUVVGVUxFTkJRVFpDUlN4WFFVRTNRaXhGUVVFd1EwTXNWMEZCTVVNc1JVRkJkVVJETEUxQlFYWkVMRVZCUVN0RVF5eE5RVUV2UkN4RlFVRjFSVU1zVTBGQmRrVXNSVUZCYTBaRExGTkJRV3hHTEVWQlFUWkdReXhQUVVFM1JpeEZRVUZ6Unp0QlFVTXpSeXhOUVVGTlJTeFBRVUZQV0N4blFrRkJaMEpITEZkQlFXaENMRVZCUVRaQ1F5eFhRVUUzUWl4RlFVRXdRME1zVFVGQk1VTXNSVUZCYTBSRExFMUJRV3hFTEVWQlFUQkVReXhUUVVFeFJDeEZRVUZ4UlVNc1UwRkJja1VzUlVGQlowWkRMRTlCUVdoR0xFTkJRV0k3TzBGQlJVRXNUVUZCVFc5RExFMUJRVTBzUlVGQldqdEJRVU5CTEUxQlFVa3hReXhsUVVGbFF5eFhRVUZ1UWl4RlFVRm5RenRCUVVNNVFubERMRkZCUVVscVF5eEpRVUZLTEVOQlFWTXNXVUZCV1ZRc1YwRkJja0k3UVVGRFJEdEJRVU5FTUVNc1RVRkJTV3BETEVsQlFVb3NRMEZCVXl4eFJVRkJWRHRCUVVOQmFVTXNUVUZCU1dwRExFbEJRVW9zUTBGQlV5eFRRVUZUUkN4TFFVRkxVaXhYUVVGa0xFbEJRVFpDTEU5QlFVOVJMRXRCUVV0S0xGTkJRVm9zUzBGQk1FSXNWMEZCTVVJc1IwRkJkME1zUlVGQmVFTXNSMEZCTmtNc1QwRkJUMGtzUzBGQlMwb3NVMEZCZEVZc1EwRkJWRHRCUVVOQmMwTXNUVUZCU1dwRExFbEJRVW9zUTBGQlV5eFRRVUZUUkN4TFFVRkxVQ3hYUVVGa0xFbEJRVFpDTEU5QlFVOVBMRXRCUVV0SUxGTkJRVm9zUzBGQk1FSXNWMEZCTVVJc1IwRkJkME1zUlVGQmVFTXNSMEZCTmtNc1QwRkJUMGNzUzBGQlMwZ3NVMEZCZEVZc1EwRkJWRHM3UVVGRlFTeFBRVUZMTEVsQlFVbG5RaXhKUVVGSkxFTkJRV0lzUlVGQlowSkJMRWxCUVVsaUxFdEJRVXRQTEV0QlFVd3NRMEZCVjJNc1RVRkJMMElzUlVGQmRVTlNMRWRCUVhaRExFVkJRVFJETzBGQlF6RkRMRkZCUVUxWkxFOUJRVTk2UWl4TFFVRkxUeXhMUVVGTUxFTkJRVmROTEVOQlFWZ3NRMEZCWWp0QlFVTkJjVUlzVVVGQlNXcERMRWxCUVVvc1EwRkRSU3hUUVVGVGQwSXNTMEZCUzBNc1VVRkJaQ3hIUVVGNVFpeEhRVUY2UWl4SFFVRXJRa1FzUzBGQlMwVXNVVUZCY0VNc1IwRkRSU3hKUVVSR0xFZEJRMU5HTEV0QlFVdEhMRkZCUkdRc1IwRkRlVUlzUjBGRWVrSXNSMEZESzBKSUxFdEJRVXRKTEZGQlJIQkRMRWRCUlVVc1MwRklTanRCUVV0QlN5eFJRVUZKYWtNc1NVRkJTaXhEUVVGVGEwTXNTMEZCVkN4RFFVRmxSQ3hIUVVGbUxFVkJRVzlDVkN4TFFVRkxkRUlzUzBGQmVrSTdRVUZEUkRzN1FVRkZSQ3hUUVVGUEswSXNTVUZCU1VVc1NVRkJTaXhEUVVGVExFbEJRVlFzU1VGQmFVSXNTVUZCZUVJN1FVRkRSRHM3UVVGRlRTeFRRVUZUTjBNc1YwRkJWQ3hEUVVGeFFqaERMRkZCUVhKQ0xFVkJRU3RDTTBNc1RVRkJMMElzUlVGQmRVTkRMRTFCUVhaRExFVkJRU3REUXl4VFFVRXZReXhGUVVFd1JFTXNVMEZCTVVRc1JVRkJjVVZETEU5QlFYSkZMRVZCUVRoRk8wRkJRMjVHTEZOQlFVOVNMRzlDUVVGdlFpdERMRkZCUVhCQ0xFVkJRVGhDUVN4UlFVRTVRaXhGUVVGM1F6TkRMRTFCUVhoRExFVkJRV2RFUXl4TlFVRm9SQ3hGUVVGM1JFTXNVMEZCZUVRc1JVRkJiVVZETEZOQlFXNUZMRVZCUVRoRlF5eFBRVUU1UlN4RFFVRlFPMEZCUTBRaUxDSm1hV3hsSWpvaVkzSmxZWFJsTG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdGthV1ptVEdsdVpYTjlJR1p5YjIwZ0p5NHVMMlJwWm1ZdmJHbHVaU2M3WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCemRISjFZM1IxY21Wa1VHRjBZMmdvYjJ4a1JtbHNaVTVoYldVc0lHNWxkMFpwYkdWT1lXMWxMQ0J2YkdSVGRISXNJRzVsZDFOMGNpd2diMnhrU0dWaFpHVnlMQ0J1WlhkSVpXRmtaWElzSUc5d2RHbHZibk1wSUh0Y2JpQWdhV1lnS0NGdmNIUnBiMjV6S1NCN1hHNGdJQ0FnYjNCMGFXOXVjeUE5SUh0OU8xeHVJQ0I5WEc0Z0lHbG1JQ2gwZVhCbGIyWWdiM0IwYVc5dWN5NWpiMjUwWlhoMElEMDlQU0FuZFc1a1pXWnBibVZrSnlrZ2UxeHVJQ0FnSUc5d2RHbHZibk11WTI5dWRHVjRkQ0E5SURRN1hHNGdJSDFjYmx4dUlDQmpiMjV6ZENCa2FXWm1JRDBnWkdsbVpreHBibVZ6S0c5c1pGTjBjaXdnYm1WM1UzUnlMQ0J2Y0hScGIyNXpLVHRjYmlBZ1pHbG1aaTV3ZFhOb0tIdDJZV3gxWlRvZ0p5Y3NJR3hwYm1Wek9pQmJYWDBwT3lBZ0lDOHZJRUZ3Y0dWdVpDQmhiaUJsYlhCMGVTQjJZV3gxWlNCMGJ5QnRZV3RsSUdOc1pXRnVkWEFnWldGemFXVnlYRzVjYmlBZ1puVnVZM1JwYjI0Z1kyOXVkR1Y0ZEV4cGJtVnpLR3hwYm1WektTQjdYRzRnSUNBZ2NtVjBkWEp1SUd4cGJtVnpMbTFoY0NobWRXNWpkR2x2YmlobGJuUnllU2tnZXlCeVpYUjFjbTRnSnlBbklDc2daVzUwY25rN0lIMHBPMXh1SUNCOVhHNWNiaUFnYkdWMElHaDFibXR6SUQwZ1cxMDdYRzRnSUd4bGRDQnZiR1JTWVc1blpWTjBZWEowSUQwZ01Dd2dibVYzVW1GdVoyVlRkR0Z5ZENBOUlEQXNJR04xY2xKaGJtZGxJRDBnVzEwc1hHNGdJQ0FnSUNCdmJHUk1hVzVsSUQwZ01Td2dibVYzVEdsdVpTQTlJREU3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daR2xtWmk1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHTnZibk4wSUdOMWNuSmxiblFnUFNCa2FXWm1XMmxkTEZ4dUlDQWdJQ0FnSUNBZ0lHeHBibVZ6SUQwZ1kzVnljbVZ1ZEM1c2FXNWxjeUI4ZkNCamRYSnlaVzUwTG5aaGJIVmxMbkpsY0d4aFkyVW9MMXhjYmlRdkxDQW5KeWt1YzNCc2FYUW9KMXhjYmljcE8xeHVJQ0FnSUdOMWNuSmxiblF1YkdsdVpYTWdQU0JzYVc1bGN6dGNibHh1SUNBZ0lHbG1JQ2hqZFhKeVpXNTBMbUZrWkdWa0lIeDhJR04xY25KbGJuUXVjbVZ0YjNabFpDa2dlMXh1SUNBZ0lDQWdMeThnU1dZZ2QyVWdhR0YyWlNCd2NtVjJhVzkxY3lCamIyNTBaWGgwTENCemRHRnlkQ0IzYVhSb0lIUm9ZWFJjYmlBZ0lDQWdJR2xtSUNnaGIyeGtVbUZ1WjJWVGRHRnlkQ2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3Y21WMklEMGdaR2xtWmx0cElDMGdNVjA3WEc0Z0lDQWdJQ0FnSUc5c1pGSmhibWRsVTNSaGNuUWdQU0J2YkdSTWFXNWxPMXh1SUNBZ0lDQWdJQ0J1WlhkU1lXNW5aVk4wWVhKMElEMGdibVYzVEdsdVpUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb2NISmxkaWtnZTF4dUlDQWdJQ0FnSUNBZ0lHTjFjbEpoYm1kbElEMGdiM0IwYVc5dWN5NWpiMjUwWlhoMElENGdNQ0EvSUdOdmJuUmxlSFJNYVc1bGN5aHdjbVYyTG14cGJtVnpMbk5zYVdObEtDMXZjSFJwYjI1ekxtTnZiblJsZUhRcEtTQTZJRnRkTzF4dUlDQWdJQ0FnSUNBZ0lHOXNaRkpoYm1kbFUzUmhjblFnTFQwZ1kzVnlVbUZ1WjJVdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNBZ0lHNWxkMUpoYm1kbFUzUmhjblFnTFQwZ1kzVnlVbUZ1WjJVdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJRTkxZEhCMWRDQnZkWElnWTJoaGJtZGxjMXh1SUNBZ0lDQWdZM1Z5VW1GdVoyVXVjSFZ6YUNndUxpNGdiR2x1WlhNdWJXRndLR1oxYm1OMGFXOXVLR1Z1ZEhKNUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQW9ZM1Z5Y21WdWRDNWhaR1JsWkNBL0lDY3JKeUE2SUNjdEp5a2dLeUJsYm5SeWVUdGNiaUFnSUNBZ0lIMHBLVHRjYmx4dUlDQWdJQ0FnTHk4Z1ZISmhZMnNnZEdobElIVndaR0YwWldRZ1ptbHNaU0J3YjNOcGRHbHZibHh1SUNBZ0lDQWdhV1lnS0dOMWNuSmxiblF1WVdSa1pXUXBJSHRjYmlBZ0lDQWdJQ0FnYm1WM1RHbHVaU0FyUFNCc2FXNWxjeTVzWlc1bmRHZzdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnZiR1JNYVc1bElDczlJR3hwYm1WekxteGxibWQwYUR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdMeThnU1dSbGJuUnBZMkZzSUdOdmJuUmxlSFFnYkdsdVpYTXVJRlJ5WVdOcklHeHBibVVnWTJoaGJtZGxjMXh1SUNBZ0lDQWdhV1lnS0c5c1pGSmhibWRsVTNSaGNuUXBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z1EyeHZjMlVnYjNWMElHRnVlU0JqYUdGdVoyVnpJSFJvWVhRZ2FHRjJaU0JpWldWdUlHOTFkSEIxZENBb2IzSWdhbTlwYmlCdmRtVnliR0Z3Y0dsdVp5bGNiaUFnSUNBZ0lDQWdhV1lnS0d4cGJtVnpMbXhsYm1kMGFDQThQU0J2Y0hScGIyNXpMbU52Ym5SbGVIUWdLaUF5SUNZbUlHa2dQQ0JrYVdabUxteGxibWQwYUNBdElESXBJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QlBkbVZ5YkdGd2NHbHVaMXh1SUNBZ0lDQWdJQ0FnSUdOMWNsSmhibWRsTG5CMWMyZ29MaTR1SUdOdmJuUmxlSFJNYVc1bGN5aHNhVzVsY3lrcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUdWdVpDQjBhR1VnY21GdVoyVWdZVzVrSUc5MWRIQjFkRnh1SUNBZ0lDQWdJQ0FnSUd4bGRDQmpiMjUwWlhoMFUybDZaU0E5SUUxaGRHZ3ViV2x1S0d4cGJtVnpMbXhsYm1kMGFDd2diM0IwYVc5dWN5NWpiMjUwWlhoMEtUdGNiaUFnSUNBZ0lDQWdJQ0JqZFhKU1lXNW5aUzV3ZFhOb0tDNHVMaUJqYjI1MFpYaDBUR2x1WlhNb2JHbHVaWE11YzJ4cFkyVW9NQ3dnWTI5dWRHVjRkRk5wZW1VcEtTazdYRzVjYmlBZ0lDQWdJQ0FnSUNCc1pYUWdhSFZ1YXlBOUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUc5c1pGTjBZWEowT2lCdmJHUlNZVzVuWlZOMFlYSjBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2IyeGtUR2x1WlhNNklDaHZiR1JNYVc1bElDMGdiMnhrVW1GdVoyVlRkR0Z5ZENBcklHTnZiblJsZUhSVGFYcGxLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHNWxkMU4wWVhKME9pQnVaWGRTWVc1blpWTjBZWEowTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdibVYzVEdsdVpYTTZJQ2h1WlhkTWFXNWxJQzBnYm1WM1VtRnVaMlZUZEdGeWRDQXJJR052Ym5SbGVIUlRhWHBsS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hwYm1Wek9pQmpkWEpTWVc1blpWeHVJQ0FnSUNBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR2tnUGowZ1pHbG1aaTVzWlc1bmRHZ2dMU0F5SUNZbUlHeHBibVZ6TG14bGJtZDBhQ0E4UFNCdmNIUnBiMjV6TG1OdmJuUmxlSFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUVWUFJpQnBjeUJwYm5OcFpHVWdkR2hwY3lCb2RXNXJYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdiMnhrUlU5R1RtVjNiR2x1WlNBOUlDZ3ZYRnh1SkM4dWRHVnpkQ2h2YkdSVGRISXBLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J1WlhkRlQwWk9aWGRzYVc1bElEMGdLQzljWEc0a0x5NTBaWE4wS0c1bGQxTjBjaWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0d4cGJtVnpMbXhsYm1kMGFDQTlQU0F3SUNZbUlDRnZiR1JGVDBaT1pYZHNhVzVsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklITndaV05wWVd3Z1kyRnpaVG9nYjJ4a0lHaGhjeUJ1YnlCbGIyd2dZVzVrSUc1dklIUnlZV2xzYVc1bklHTnZiblJsZUhRN0lHNXZMVzVzSUdOaGJpQmxibVFnZFhBZ1ltVm1iM0psSUdGa1pITmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1kzVnlVbUZ1WjJVdWMzQnNhV05sS0doMWJtc3ViMnhrVEdsdVpYTXNJREFzSUNkY1hGeGNJRTV2SUc1bGQyeHBibVVnWVhRZ1pXNWtJRzltSUdacGJHVW5LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9JVzlzWkVWUFJrNWxkMnhwYm1VZ2ZId2dJVzVsZDBWUFJrNWxkMnhwYm1VcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1kzVnlVbUZ1WjJVdWNIVnphQ2duWEZ4Y1hDQk9ieUJ1Wlhkc2FXNWxJR0YwSUdWdVpDQnZaaUJtYVd4bEp5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUdoMWJtdHpMbkIxYzJnb2FIVnVheWs3WEc1Y2JpQWdJQ0FnSUNBZ0lDQnZiR1JTWVc1blpWTjBZWEowSUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0J1WlhkU1lXNW5aVk4wWVhKMElEMGdNRHRjYmlBZ0lDQWdJQ0FnSUNCamRYSlNZVzVuWlNBOUlGdGRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J2YkdSTWFXNWxJQ3M5SUd4cGJtVnpMbXhsYm1kMGFEdGNiaUFnSUNBZ0lHNWxkMHhwYm1VZ0t6MGdiR2x1WlhNdWJHVnVaM1JvTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdiMnhrUm1sc1pVNWhiV1U2SUc5c1pFWnBiR1ZPWVcxbExDQnVaWGRHYVd4bFRtRnRaVG9nYm1WM1JtbHNaVTVoYldVc1hHNGdJQ0FnYjJ4a1NHVmhaR1Z5T2lCdmJHUklaV0ZrWlhJc0lHNWxkMGhsWVdSbGNqb2dibVYzU0dWaFpHVnlMRnh1SUNBZ0lHaDFibXR6T2lCb2RXNXJjMXh1SUNCOU8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTNKbFlYUmxWSGR2Um1sc1pYTlFZWFJqYUNodmJHUkdhV3hsVG1GdFpTd2dibVYzUm1sc1pVNWhiV1VzSUc5c1pGTjBjaXdnYm1WM1UzUnlMQ0J2YkdSSVpXRmtaWElzSUc1bGQwaGxZV1JsY2l3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0JqYjI1emRDQmthV1ptSUQwZ2MzUnlkV04wZFhKbFpGQmhkR05vS0c5c1pFWnBiR1ZPWVcxbExDQnVaWGRHYVd4bFRtRnRaU3dnYjJ4a1UzUnlMQ0J1WlhkVGRISXNJRzlzWkVobFlXUmxjaXdnYm1WM1NHVmhaR1Z5TENCdmNIUnBiMjV6S1R0Y2JseHVJQ0JqYjI1emRDQnlaWFFnUFNCYlhUdGNiaUFnYVdZZ0tHOXNaRVpwYkdWT1lXMWxJRDA5SUc1bGQwWnBiR1ZPWVcxbEtTQjdYRzRnSUNBZ2NtVjBMbkIxYzJnb0owbHVaR1Y0T2lBbklDc2diMnhrUm1sc1pVNWhiV1VwTzF4dUlDQjlYRzRnSUhKbGRDNXdkWE5vS0NjOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlKeWs3WEc0Z0lISmxkQzV3ZFhOb0tDY3RMUzBnSnlBcklHUnBabVl1YjJ4a1JtbHNaVTVoYldVZ0t5QW9kSGx3Wlc5bUlHUnBabVl1YjJ4a1NHVmhaR1Z5SUQwOVBTQW5kVzVrWldacGJtVmtKeUEvSUNjbklEb2dKMXhjZENjZ0t5QmthV1ptTG05c1pFaGxZV1JsY2lrcE8xeHVJQ0J5WlhRdWNIVnphQ2duS3lzcklDY2dLeUJrYVdabUxtNWxkMFpwYkdWT1lXMWxJQ3NnS0hSNWNHVnZaaUJrYVdabUxtNWxkMGhsWVdSbGNpQTlQVDBnSjNWdVpHVm1hVzVsWkNjZ1B5QW5KeUE2SUNkY1hIUW5JQ3NnWkdsbVppNXVaWGRJWldGa1pYSXBLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JwWm1ZdWFIVnVhM011YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNCamIyNXpkQ0JvZFc1cklEMGdaR2xtWmk1b2RXNXJjMXRwWFR0Y2JpQWdJQ0J5WlhRdWNIVnphQ2hjYmlBZ0lDQWdJQ2RBUUNBdEp5QXJJR2gxYm1zdWIyeGtVM1JoY25RZ0t5QW5MQ2NnS3lCb2RXNXJMbTlzWkV4cGJtVnpYRzRnSUNBZ0lDQXJJQ2NnS3ljZ0t5Qm9kVzVyTG01bGQxTjBZWEowSUNzZ0p5d25JQ3NnYUhWdWF5NXVaWGRNYVc1bGMxeHVJQ0FnSUNBZ0t5QW5JRUJBSjF4dUlDQWdJQ2s3WEc0Z0lDQWdjbVYwTG5CMWMyZ3VZWEJ3Ykhrb2NtVjBMQ0JvZFc1ckxteHBibVZ6S1R0Y2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCeVpYUXVhbTlwYmlnblhGeHVKeWtnS3lBblhGeHVKenRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTnlaV0YwWlZCaGRHTm9LR1pwYkdWT1lXMWxMQ0J2YkdSVGRISXNJRzVsZDFOMGNpd2diMnhrU0dWaFpHVnlMQ0J1WlhkSVpXRmtaWElzSUc5d2RHbHZibk1wSUh0Y2JpQWdjbVYwZFhKdUlHTnlaV0YwWlZSM2IwWnBiR1Z6VUdGMFkyZ29abWxzWlU1aGJXVXNJR1pwYkdWT1lXMWxMQ0J2YkdSVGRISXNJRzVsZDFOMGNpd2diMnhrU0dWaFpHVnlMQ0J1WlhkSVpXRmtaWElzSUc5d2RHbHZibk1wTzF4dWZWeHVJbDE5XG5cblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qaXN0YW5idWwgaWdub3JlIHN0YXJ0Ki9cInVzZSBzdHJpY3RcIjtcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLiAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqL2FycmF5RXF1YWwgPSBhcnJheUVxdWFsO1xuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovZXhwb3J0cy4gLyppc3RhbmJ1bCBpZ25vcmUgZW5kKi9hcnJheVN0YXJ0c1dpdGggPSBhcnJheVN0YXJ0c1dpdGg7XG5cdGZ1bmN0aW9uIGFycmF5RXF1YWwoYSwgYikge1xuXHQgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcblx0ICAgIHJldHVybiBmYWxzZTtcblx0ICB9XG5cblx0ICByZXR1cm4gYXJyYXlTdGFydHNXaXRoKGEsIGIpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXJyYXlTdGFydHNXaXRoKGFycmF5LCBzdGFydCkge1xuXHQgIGlmIChzdGFydC5sZW5ndGggPiBhcnJheS5sZW5ndGgpIHtcblx0ICAgIHJldHVybiBmYWxzZTtcblx0ICB9XG5cblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICBpZiAoc3RhcnRbaV0gIT09IGFycmF5W2ldKSB7XG5cdCAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXR1cm4gdHJ1ZTtcblx0fVxuXHQvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkxZEdsc0wyRnljbUY1TG1weklsMHNJbTVoYldWeklqcGJJbUZ5Y21GNVJYRjFZV3dpTENKaGNuSmhlVk4wWVhKMGMxZHBkR2dpTENKaElpd2lZaUlzSW14bGJtZDBhQ0lzSW1GeWNtRjVJaXdpYzNSaGNuUWlMQ0pwSWwwc0ltMWhjSEJwYm1keklqb2lPenM3WjBOQlFXZENRU3hWTEVkQlFVRkJMRlU3ZVVSQlVVRkRMR1VzUjBGQlFVRXNaVHRCUVZKVUxGTkJRVk5FTEZWQlFWUXNRMEZCYjBKRkxFTkJRWEJDTEVWQlFYVkNReXhEUVVGMlFpeEZRVUV3UWp0QlFVTXZRaXhOUVVGSlJDeEZRVUZGUlN4TlFVRkdMRXRCUVdGRUxFVkJRVVZETEUxQlFXNUNMRVZCUVRKQ08wRkJRM3BDTEZkQlFVOHNTMEZCVUR0QlFVTkVPenRCUVVWRUxGTkJRVTlJTEdkQ1FVRm5Ra01zUTBGQmFFSXNSVUZCYlVKRExFTkJRVzVDTEVOQlFWQTdRVUZEUkRzN1FVRkZUU3hUUVVGVFJpeGxRVUZVTEVOQlFYbENTU3hMUVVGNlFpeEZRVUZuUTBNc1MwRkJhRU1zUlVGQmRVTTdRVUZETlVNc1RVRkJTVUVzVFVGQlRVWXNUVUZCVGl4SFFVRmxReXhOUVVGTlJDeE5RVUY2UWl4RlFVRnBRenRCUVVNdlFpeFhRVUZQTEV0QlFWQTdRVUZEUkRzN1FVRkZSQ3hQUVVGTExFbEJRVWxITEVsQlFVa3NRMEZCWWl4RlFVRm5Ra0VzU1VGQlNVUXNUVUZCVFVZc1RVRkJNVUlzUlVGQmEwTkhMRWRCUVd4RExFVkJRWFZETzBGQlEzSkRMRkZCUVVsRUxFMUJRVTFETEVOQlFVNHNUVUZCWVVZc1RVRkJUVVVzUTBGQlRpeERRVUZxUWl4RlFVRXlRanRCUVVONlFpeGhRVUZQTEV0QlFWQTdRVUZEUkR0QlFVTkdPenRCUVVWRUxGTkJRVThzU1VGQlVEdEJRVU5FSWl3aVptbHNaU0k2SW1GeWNtRjVMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGeWNtRjVSWEYxWVd3b1lTd2dZaWtnZTF4dUlDQnBaaUFvWVM1c1pXNW5kR2dnSVQwOUlHSXViR1Z1WjNSb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNCOVhHNWNiaUFnY21WMGRYSnVJR0Z5Y21GNVUzUmhjblJ6VjJsMGFDaGhMQ0JpS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR0Z5Y21GNVUzUmhjblJ6VjJsMGFDaGhjbkpoZVN3Z2MzUmhjblFwSUh0Y2JpQWdhV1lnS0hOMFlYSjBMbXhsYm1kMGFDQStJR0Z5Y21GNUxteGxibWQwYUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnZlZ4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYzNSaGNuUXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0JwWmlBb2MzUmhjblJiYVYwZ0lUMDlJR0Z5Y21GNVcybGRLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUhSeWRXVTdYRzU5WEc0aVhYMD1cblxuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL1widXNlIHN0cmljdFwiO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY29udmVydENoYW5nZXNUb0RNUCA9IGNvbnZlcnRDaGFuZ2VzVG9ETVA7XG5cdC8vIFNlZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1kaWZmLW1hdGNoLXBhdGNoL3dpa2kvQVBJXG5cdGZ1bmN0aW9uIGNvbnZlcnRDaGFuZ2VzVG9ETVAoY2hhbmdlcykge1xuXHQgIHZhciByZXQgPSBbXSxcblx0ICAgICAgY2hhbmdlID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZvaWQgMCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLyxcblx0ICAgICAgb3BlcmF0aW9uID0gLyppc3RhbmJ1bCBpZ25vcmUgc3RhcnQqL3ZvaWQgMCAvKmlzdGFuYnVsIGlnbm9yZSBlbmQqLztcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgIGNoYW5nZSA9IGNoYW5nZXNbaV07XG5cdCAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG5cdCAgICAgIG9wZXJhdGlvbiA9IDE7XG5cdCAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG5cdCAgICAgIG9wZXJhdGlvbiA9IC0xO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgb3BlcmF0aW9uID0gMDtcblx0ICAgIH1cblxuXHQgICAgcmV0LnB1c2goW29wZXJhdGlvbiwgY2hhbmdlLnZhbHVlXSk7XG5cdCAgfVxuXHQgIHJldHVybiByZXQ7XG5cdH1cblx0Ly8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5amIyNTJaWEowTDJSdGNDNXFjeUpkTENKdVlXMWxjeUk2V3lKamIyNTJaWEowUTJoaGJtZGxjMVJ2UkUxUUlpd2lZMmhoYm1kbGN5SXNJbkpsZENJc0ltTm9ZVzVuWlNJc0ltOXdaWEpoZEdsdmJpSXNJbWtpTENKc1pXNW5kR2dpTENKaFpHUmxaQ0lzSW5KbGJXOTJaV1FpTENKd2RYTm9JaXdpZG1Gc2RXVWlYU3dpYldGd2NHbHVaM01pT2lJN096dG5RMEZEWjBKQkxHMUNMRWRCUVVGQkxHMUNPMEZCUkdoQ08wRkJRMDhzVTBGQlUwRXNiVUpCUVZRc1EwRkJOa0pETEU5QlFUZENMRVZCUVhORE8wRkJRek5ETEUxQlFVbERMRTFCUVUwc1JVRkJWanRCUVVGQkxFMUJRMGxETEhkRFFVUktPMEZCUVVFc1RVRkZTVU1zTWtOQlJrbzdRVUZIUVN4UFFVRkxMRWxCUVVsRExFbEJRVWtzUTBGQllpeEZRVUZuUWtFc1NVRkJTVW9zVVVGQlVVc3NUVUZCTlVJc1JVRkJiME5FTEVkQlFYQkRMRVZCUVhsRE8wRkJRM1pEUml4aFFVRlRSaXhSUVVGUlNTeERRVUZTTEVOQlFWUTdRVUZEUVN4UlFVRkpSaXhQUVVGUFNTeExRVUZZTEVWQlFXdENPMEZCUTJoQ1NDeHJRa0ZCV1N4RFFVRmFPMEZCUTBRc1MwRkdSQ3hOUVVWUExFbEJRVWxFTEU5QlFVOUxMRTlCUVZnc1JVRkJiMEk3UVVGRGVrSktMR3RDUVVGWkxFTkJRVU1zUTBGQllqdEJRVU5FTEV0QlJrMHNUVUZGUVR0QlFVTk1RU3hyUWtGQldTeERRVUZhTzBGQlEwUTdPMEZCUlVSR0xGRkJRVWxQTEVsQlFVb3NRMEZCVXl4RFFVRkRUQ3hUUVVGRUxFVkJRVmxFTEU5QlFVOVBMRXRCUVc1Q0xFTkJRVlE3UVVGRFJEdEJRVU5FTEZOQlFVOVNMRWRCUVZBN1FVRkRSQ0lzSW1acGJHVWlPaUprYlhBdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2THlCVFpXVTZJR2gwZEhBNkx5OWpiMlJsTG1kdmIyZHNaUzVqYjIwdmNDOW5iMjluYkdVdFpHbG1aaTF0WVhSamFDMXdZWFJqYUM5M2FXdHBMMEZRU1Z4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdOdmJuWmxjblJEYUdGdVoyVnpWRzlFVFZBb1kyaGhibWRsY3lrZ2UxeHVJQ0JzWlhRZ2NtVjBJRDBnVzEwc1hHNGdJQ0FnSUNCamFHRnVaMlVzWEc0Z0lDQWdJQ0J2Y0dWeVlYUnBiMjQ3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dZMmhoYm1kbGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR05vWVc1blpTQTlJR05vWVc1blpYTmJhVjA3WEc0Z0lDQWdhV1lnS0dOb1lXNW5aUzVoWkdSbFpDa2dlMXh1SUNBZ0lDQWdiM0JsY21GMGFXOXVJRDBnTVR0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0dOb1lXNW5aUzV5WlcxdmRtVmtLU0I3WEc0Z0lDQWdJQ0J2Y0dWeVlYUnBiMjRnUFNBdE1UdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnYjNCbGNtRjBhVzl1SUQwZ01EdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUXVjSFZ6YUNoYmIzQmxjbUYwYVc5dUxDQmphR0Z1WjJVdWRtRnNkV1ZkS1R0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnY21WME8xeHVmVnh1SWwxOVxuXG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKmlzdGFuYnVsIGlnbm9yZSBzdGFydCovJ3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuIC8qaXN0YW5idWwgaWdub3JlIGVuZCovY29udmVydENoYW5nZXNUb1hNTCA9IGNvbnZlcnRDaGFuZ2VzVG9YTUw7XG5cdGZ1bmN0aW9uIGNvbnZlcnRDaGFuZ2VzVG9YTUwoY2hhbmdlcykge1xuXHQgIHZhciByZXQgPSBbXTtcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuXHQgICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuXHQgICAgICByZXQucHVzaCgnPGlucz4nKTtcblx0ICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcblx0ICAgICAgcmV0LnB1c2goJzxkZWw+Jyk7XG5cdCAgICB9XG5cblx0ICAgIHJldC5wdXNoKGVzY2FwZUhUTUwoY2hhbmdlLnZhbHVlKSk7XG5cblx0ICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcblx0ICAgICAgcmV0LnB1c2goJzwvaW5zPicpO1xuXHQgICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuXHQgICAgICByZXQucHVzaCgnPC9kZWw+Jyk7XG5cdCAgICB9XG5cdCAgfVxuXHQgIHJldHVybiByZXQuam9pbignJyk7XG5cdH1cblxuXHRmdW5jdGlvbiBlc2NhcGVIVE1MKHMpIHtcblx0ICB2YXIgbiA9IHM7XG5cdCAgbiA9IG4ucmVwbGFjZSgvJi9nLCAnJmFtcDsnKTtcblx0ICBuID0gbi5yZXBsYWNlKC88L2csICcmbHQ7Jyk7XG5cdCAgbiA9IG4ucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuXHQgIG4gPSBuLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcblxuXHQgIHJldHVybiBuO1xuXHR9XG5cdC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWpiMjUyWlhKMEwzaHRiQzVxY3lKZExDSnVZVzFsY3lJNld5SmpiMjUyWlhKMFEyaGhibWRsYzFSdldFMU1JaXdpWTJoaGJtZGxjeUlzSW5KbGRDSXNJbWtpTENKc1pXNW5kR2dpTENKamFHRnVaMlVpTENKaFpHUmxaQ0lzSW5CMWMyZ2lMQ0p5WlcxdmRtVmtJaXdpWlhOallYQmxTRlJOVENJc0luWmhiSFZsSWl3aWFtOXBiaUlzSW5NaUxDSnVJaXdpY21Wd2JHRmpaU0pkTENKdFlYQndhVzVuY3lJNklqczdPMmREUVVGblFrRXNiVUlzUjBGQlFVRXNiVUk3UVVGQlZDeFRRVUZUUVN4dFFrRkJWQ3hEUVVFMlFrTXNUMEZCTjBJc1JVRkJjME03UVVGRE0wTXNUVUZCU1VNc1RVRkJUU3hGUVVGV08wRkJRMEVzVDBGQlN5eEpRVUZKUXl4SlFVRkpMRU5CUVdJc1JVRkJaMEpCTEVsQlFVbEdMRkZCUVZGSExFMUJRVFZDTEVWQlFXOURSQ3hIUVVGd1F5eEZRVUY1UXp0QlFVTjJReXhSUVVGSlJTeFRRVUZUU2l4UlFVRlJSU3hEUVVGU0xFTkJRV0k3UVVGRFFTeFJRVUZKUlN4UFFVRlBReXhMUVVGWUxFVkJRV3RDTzBGQlEyaENTaXhWUVVGSlN5eEpRVUZLTEVOQlFWTXNUMEZCVkR0QlFVTkVMRXRCUmtRc1RVRkZUeXhKUVVGSlJpeFBRVUZQUnl4UFFVRllMRVZCUVc5Q08wRkJRM3BDVGl4VlFVRkpTeXhKUVVGS0xFTkJRVk1zVDBGQlZEdEJRVU5FT3p0QlFVVkVUQ3hSUVVGSlN5eEpRVUZLTEVOQlFWTkZMRmRCUVZkS0xFOUJRVTlMTEV0QlFXeENMRU5CUVZRN08wRkJSVUVzVVVGQlNVd3NUMEZCVDBNc1MwRkJXQ3hGUVVGclFqdEJRVU5vUWtvc1ZVRkJTVXNzU1VGQlNpeERRVUZUTEZGQlFWUTdRVUZEUkN4TFFVWkVMRTFCUlU4c1NVRkJTVVlzVDBGQlQwY3NUMEZCV0N4RlFVRnZRanRCUVVONlFrNHNWVUZCU1Vzc1NVRkJTaXhEUVVGVExGRkJRVlE3UVVGRFJEdEJRVU5HTzBGQlEwUXNVMEZCVDB3c1NVRkJTVk1zU1VGQlNpeERRVUZUTEVWQlFWUXNRMEZCVUR0QlFVTkVPenRCUVVWRUxGTkJRVk5HTEZWQlFWUXNRMEZCYjBKSExFTkJRWEJDTEVWQlFYVkNPMEZCUTNKQ0xFMUJRVWxETEVsQlFVbEVMRU5CUVZJN1FVRkRRVU1zVFVGQlNVRXNSVUZCUlVNc1QwRkJSaXhEUVVGVkxFbEJRVllzUlVGQlowSXNUMEZCYUVJc1EwRkJTanRCUVVOQlJDeE5RVUZKUVN4RlFVRkZReXhQUVVGR0xFTkJRVlVzU1VGQlZpeEZRVUZuUWl4TlFVRm9RaXhEUVVGS08wRkJRMEZFTEUxQlFVbEJMRVZCUVVWRExFOUJRVVlzUTBGQlZTeEpRVUZXTEVWQlFXZENMRTFCUVdoQ0xFTkJRVW83UVVGRFFVUXNUVUZCU1VFc1JVRkJSVU1zVDBGQlJpeERRVUZWTEVsQlFWWXNSVUZCWjBJc1VVRkJhRUlzUTBGQlNqczdRVUZGUVN4VFFVRlBSQ3hEUVVGUU8wRkJRMFFpTENKbWFXeGxJam9pZUcxc0xtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJR1oxYm1OMGFXOXVJR052Ym5abGNuUkRhR0Z1WjJWelZHOVlUVXdvWTJoaGJtZGxjeWtnZTF4dUlDQnNaWFFnY21WMElEMGdXMTA3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dZMmhoYm1kbGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR3hsZENCamFHRnVaMlVnUFNCamFHRnVaMlZ6VzJsZE8xeHVJQ0FnSUdsbUlDaGphR0Z1WjJVdVlXUmtaV1FwSUh0Y2JpQWdJQ0FnSUhKbGRDNXdkWE5vS0NjOGFXNXpQaWNwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvWTJoaGJtZGxMbkpsYlc5MlpXUXBJSHRjYmlBZ0lDQWdJSEpsZEM1d2RYTm9LQ2M4WkdWc1BpY3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkQzV3ZFhOb0tHVnpZMkZ3WlVoVVRVd29ZMmhoYm1kbExuWmhiSFZsS1NrN1hHNWNiaUFnSUNCcFppQW9ZMmhoYm1kbExtRmtaR1ZrS1NCN1hHNGdJQ0FnSUNCeVpYUXVjSFZ6YUNnblBDOXBibk0rSnlrN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoamFHRnVaMlV1Y21WdGIzWmxaQ2tnZTF4dUlDQWdJQ0FnY21WMExuQjFjMmdvSnp3dlpHVnNQaWNwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdjbVYwTG1wdmFXNG9KeWNwTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJsYzJOaGNHVklWRTFNS0hNcElIdGNiaUFnYkdWMElHNGdQU0J6TzF4dUlDQnVJRDBnYmk1eVpYQnNZV05sS0M4bUwyY3NJQ2NtWVcxd095Y3BPMXh1SUNCdUlEMGdiaTV5WlhCc1lXTmxLQzg4TDJjc0lDY21iSFE3SnlrN1hHNGdJRzRnUFNCdUxuSmxjR3hoWTJVb0x6NHZaeXdnSnlabmREc25LVHRjYmlBZ2JpQTlJRzR1Y21Wd2JHRmpaU2d2WENJdlp5d2dKeVp4ZFc5ME95Y3BPMXh1WEc0Z0lISmxkSFZ5YmlCdU8xeHVmVnh1SWwxOVxuXG5cbi8qKiovIH0pXG4vKioqKioqLyBdKVxufSk7XG47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZGlmZi9kaXN0L2RpZmYuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL2RpZmYvZGlzdC9kaWZmLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCIoZnVuY3Rpb24gKGdsb2JhbCwgdW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICBpZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5leHRIYW5kbGUgPSAxOyAvLyBTcGVjIHNheXMgZ3JlYXRlciB0aGFuIHplcm9cbiAgICB2YXIgdGFza3NCeUhhbmRsZSA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICB2YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciByZWdpc3RlckltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYWxsYmFjaykge1xuICAgICAgLy8gQ2FsbGJhY2sgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24oXCJcIiArIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIENvcHkgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIGFuZCByZWdpc3RlciB0aGUgdGFza1xuICAgICAgdmFyIHRhc2sgPSB7IGNhbGxiYWNrOiBjYWxsYmFjaywgYXJnczogYXJncyB9O1xuICAgICAgdGFza3NCeUhhbmRsZVtuZXh0SGFuZGxlXSA9IHRhc2s7XG4gICAgICByZWdpc3RlckltbWVkaWF0ZShuZXh0SGFuZGxlKTtcbiAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuKHRhc2spIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdGFzay5jYWxsYmFjaztcbiAgICAgICAgdmFyIGFyZ3MgPSB0YXNrLmFyZ3M7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBydW4odGFzayk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcnVuSWZQcmVzZW50KGhhbmRsZSk7IH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gdHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMgOiBnbG9iYWwgOiBzZWxmKSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAuL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHt9O1xuXG52YXJcdG1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW87XG5cblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodHlwZW9mIG1lbW8gPT09IFwidW5kZWZpbmVkXCIpIG1lbW8gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHJldHVybiBtZW1vO1xuXHR9O1xufTtcblxudmFyIGlzT2xkSUUgPSBtZW1vaXplKGZ1bmN0aW9uICgpIHtcblx0Ly8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3Ncblx0Ly8gQHNlZSBodHRwOi8vYnJvd3NlcmhhY2tzLmNvbS8jaGFjay1lNzFkODY5MmY2NTMzNDE3M2ZlZTcxNWMyMjJjYjgwNVxuXHQvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG5cdC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuXHQvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyL2lzc3Vlcy8xNzdcblx0cmV0dXJuIHdpbmRvdyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5hdG9iO1xufSk7XG5cbnZhciBnZXRFbGVtZW50ID0gKGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbyA9IHt9O1xuXG5cdHJldHVybiBmdW5jdGlvbihzZWxlY3Rvcikge1xuXHRcdGlmICh0eXBlb2YgbWVtb1tzZWxlY3Rvcl0gPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHZhciBzdHlsZVRhcmdldCA9IGZuLmNhbGwodGhpcywgc2VsZWN0b3IpO1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblx0XHRcdGlmIChzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bc2VsZWN0b3JdID0gc3R5bGVUYXJnZXQ7XG5cdFx0fVxuXHRcdHJldHVybiBtZW1vW3NlbGVjdG9yXVxuXHR9O1xufSkoZnVuY3Rpb24gKHRhcmdldCkge1xuXHRyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpXG59KTtcblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXJcdHNpbmdsZXRvbkNvdW50ZXIgPSAwO1xudmFyXHRzdHlsZXNJbnNlcnRlZEF0VG9wID0gW107XG5cbnZhclx0Zml4VXJscyA9IHJlcXVpcmUoXCIuL3VybHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGlzdCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIERFQlVHICE9PSBcInVuZGVmaW5lZFwiICYmIERFQlVHKSB7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5hdHRycyA9IHR5cGVvZiBvcHRpb25zLmF0dHJzID09PSBcIm9iamVjdFwiID8gb3B0aW9ucy5hdHRycyA6IHt9O1xuXG5cdC8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuXHQvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG5cdGlmICghb3B0aW9ucy5zaW5nbGV0b24pIG9wdGlvbnMuc2luZ2xldG9uID0gaXNPbGRJRSgpO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIDxoZWFkPiBlbGVtZW50XG5cdGlmICghb3B0aW9ucy5pbnNlcnRJbnRvKSBvcHRpb25zLmluc2VydEludG8gPSBcImhlYWRcIjtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSBib3R0b20gb2YgdGhlIHRhcmdldFxuXHRpZiAoIW9wdGlvbnMuaW5zZXJ0QXQpIG9wdGlvbnMuaW5zZXJ0QXQgPSBcImJvdHRvbVwiO1xuXG5cdHZhciBzdHlsZXMgPSBsaXN0VG9TdHlsZXMobGlzdCwgb3B0aW9ucyk7XG5cblx0YWRkU3R5bGVzVG9Eb20oc3R5bGVzLCBvcHRpb25zKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlIChuZXdMaXN0KSB7XG5cdFx0dmFyIG1heVJlbW92ZSA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdFx0dmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF07XG5cblx0XHRcdGRvbVN0eWxlLnJlZnMtLTtcblx0XHRcdG1heVJlbW92ZS5wdXNoKGRvbVN0eWxlKTtcblx0XHR9XG5cblx0XHRpZihuZXdMaXN0KSB7XG5cdFx0XHR2YXIgbmV3U3R5bGVzID0gbGlzdFRvU3R5bGVzKG5ld0xpc3QsIG9wdGlvbnMpO1xuXHRcdFx0YWRkU3R5bGVzVG9Eb20obmV3U3R5bGVzLCBvcHRpb25zKTtcblx0XHR9XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1heVJlbW92ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGRvbVN0eWxlID0gbWF5UmVtb3ZlW2ldO1xuXG5cdFx0XHRpZihkb21TdHlsZS5yZWZzID09PSAwKSB7XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIGRvbVN0eWxlLnBhcnRzW2pdKCk7XG5cblx0XHRcdFx0ZGVsZXRlIHN0eWxlc0luRG9tW2RvbVN0eWxlLmlkXTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59O1xuXG5mdW5jdGlvbiBhZGRTdHlsZXNUb0RvbSAoc3R5bGVzLCBvcHRpb25zKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0dmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF07XG5cblx0XHRpZihkb21TdHlsZSkge1xuXHRcdFx0ZG9tU3R5bGUucmVmcysrO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHNbal0oaXRlbS5wYXJ0c1tqXSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvcig7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgcGFydHMgPSBbXTtcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0cGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cblx0XHRcdHN0eWxlc0luRG9tW2l0ZW0uaWRdID0ge2lkOiBpdGVtLmlkLCByZWZzOiAxLCBwYXJ0czogcGFydHN9O1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBsaXN0VG9TdHlsZXMgKGxpc3QsIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlcyA9IFtdO1xuXHR2YXIgbmV3U3R5bGVzID0ge307XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGl0ZW0gPSBsaXN0W2ldO1xuXHRcdHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuXHRcdHZhciBjc3MgPSBpdGVtWzFdO1xuXHRcdHZhciBtZWRpYSA9IGl0ZW1bMl07XG5cdFx0dmFyIHNvdXJjZU1hcCA9IGl0ZW1bM107XG5cdFx0dmFyIHBhcnQgPSB7Y3NzOiBjc3MsIG1lZGlhOiBtZWRpYSwgc291cmNlTWFwOiBzb3VyY2VNYXB9O1xuXG5cdFx0aWYoIW5ld1N0eWxlc1tpZF0pIHN0eWxlcy5wdXNoKG5ld1N0eWxlc1tpZF0gPSB7aWQ6IGlkLCBwYXJ0czogW3BhcnRdfSk7XG5cdFx0ZWxzZSBuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2gocGFydCk7XG5cdH1cblxuXHRyZXR1cm4gc3R5bGVzO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQgKG9wdGlvbnMsIHN0eWxlKSB7XG5cdHZhciB0YXJnZXQgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0SW50bylcblxuXHRpZiAoIXRhcmdldCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0SW50bycgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuXHR9XG5cblx0dmFyIGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcFtzdHlsZXNJbnNlcnRlZEF0VG9wLmxlbmd0aCAtIDFdO1xuXG5cdGlmIChvcHRpb25zLmluc2VydEF0ID09PSBcInRvcFwiKSB7XG5cdFx0aWYgKCFsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCkge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgdGFyZ2V0LmZpcnN0Q2hpbGQpO1xuXHRcdH0gZWxzZSBpZiAobGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcblx0XHR9XG5cdFx0c3R5bGVzSW5zZXJ0ZWRBdFRvcC5wdXNoKHN0eWxlKTtcblx0fSBlbHNlIGlmIChvcHRpb25zLmluc2VydEF0ID09PSBcImJvdHRvbVwiKSB7XG5cdFx0dGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJvYmplY3RcIiAmJiBvcHRpb25zLmluc2VydEF0LmJlZm9yZSkge1xuXHRcdHZhciBuZXh0U2libGluZyA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvICsgXCIgXCIgKyBvcHRpb25zLmluc2VydEF0LmJlZm9yZSk7XG5cdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbmV4dFNpYmxpbmcpO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIltTdHlsZSBMb2FkZXJdXFxuXFxuIEludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAnaW5zZXJ0QXQnICgnb3B0aW9ucy5pbnNlcnRBdCcpIGZvdW5kLlxcbiBNdXN0IGJlICd0b3AnLCAnYm90dG9tJywgb3IgT2JqZWN0LlxcbiAoaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIjaW5zZXJ0YXQpXFxuXCIpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudCAoc3R5bGUpIHtcblx0aWYgKHN0eWxlLnBhcmVudE5vZGUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0c3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7XG5cblx0dmFyIGlkeCA9IHN0eWxlc0luc2VydGVkQXRUb3AuaW5kZXhPZihzdHlsZSk7XG5cdGlmKGlkeCA+PSAwKSB7XG5cdFx0c3R5bGVzSW5zZXJ0ZWRBdFRvcC5zcGxpY2UoaWR4LCAxKTtcblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXG5cdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblxuXHRhZGRBdHRycyhzdHlsZSwgb3B0aW9ucy5hdHRycyk7XG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBzdHlsZSk7XG5cblx0cmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMaW5rRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG5cdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0b3B0aW9ucy5hdHRycy5yZWwgPSBcInN0eWxlc2hlZXRcIjtcblxuXHRhZGRBdHRycyhsaW5rLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIGxpbmspO1xuXG5cdHJldHVybiBsaW5rO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRycyAoZWwsIGF0dHJzKSB7XG5cdE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRlbC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyc1trZXldKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmosIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlLCB1cGRhdGUsIHJlbW92ZSwgcmVzdWx0O1xuXG5cdC8vIElmIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLCBydW4gaXQgb24gdGhlIGNzc1xuXHRpZiAob3B0aW9ucy50cmFuc2Zvcm0gJiYgb2JqLmNzcykge1xuXHQgICAgcmVzdWx0ID0gb3B0aW9ucy50cmFuc2Zvcm0ob2JqLmNzcyk7XG5cblx0ICAgIGlmIChyZXN1bHQpIHtcblx0ICAgIFx0Ly8gSWYgdHJhbnNmb3JtIHJldHVybnMgYSB2YWx1ZSwgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBydW5uaW5nIHJ1bnRpbWUgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBjc3MuXG5cdCAgICBcdG9iai5jc3MgPSByZXN1bHQ7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHQvLyBJZiB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIHJldHVybnMgYSBmYWxzeSB2YWx1ZSwgZG9uJ3QgYWRkIHRoaXMgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBjb25kaXRpb25hbCBsb2FkaW5nIG9mIGNzc1xuXHQgICAgXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdCAgICBcdFx0Ly8gbm9vcFxuXHQgICAgXHR9O1xuXHQgICAgfVxuXHR9XG5cblx0aWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG5cdFx0dmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG5cblx0XHRzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcblxuXHRcdHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgZmFsc2UpO1xuXHRcdHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgdHJ1ZSk7XG5cblx0fSBlbHNlIGlmIChcblx0XHRvYmouc291cmNlTWFwICYmXG5cdFx0dHlwZW9mIFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5jcmVhdGVPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwucmV2b2tlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgQmxvYiA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIlxuXHQpIHtcblx0XHRzdHlsZSA9IGNyZWF0ZUxpbmtFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IHVwZGF0ZUxpbmsuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblxuXHRcdFx0aWYoc3R5bGUuaHJlZikgVVJMLnJldm9rZU9iamVjdFVSTChzdHlsZS5ocmVmKTtcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHN0eWxlID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblx0XHR9O1xuXHR9XG5cblx0dXBkYXRlKG9iaik7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChuZXdPYmopIHtcblx0XHRpZiAobmV3T2JqKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG5ld09iai5jc3MgPT09IG9iai5jc3MgJiZcblx0XHRcdFx0bmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcblx0XHRcdFx0bmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dXBkYXRlKG9iaiA9IG5ld09iaik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbW92ZSgpO1xuXHRcdH1cblx0fTtcbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcblx0dmFyIHRleHRTdG9yZSA9IFtdO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG5cdFx0dGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuXG5cdFx0cmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG5cdH07XG59KSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZSwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG5cdHZhciBjc3MgPSByZW1vdmUgPyBcIlwiIDogb2JqLmNzcztcblxuXHRpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcblx0XHR2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cblx0XHRpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcblxuXHRcdGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuXHRcdFx0c3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0eWxlLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBtZWRpYSA9IG9iai5tZWRpYTtcblxuXHRpZihtZWRpYSkge1xuXHRcdHN0eWxlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsIG1lZGlhKVxuXHR9XG5cblx0aWYoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcblx0fSBlbHNlIHtcblx0XHR3aGlsZShzdHlsZS5maXJzdENoaWxkKSB7XG5cdFx0XHRzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcblx0XHR9XG5cblx0XHRzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVMaW5rIChsaW5rLCBvcHRpb25zLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG5cdC8qXG5cdFx0SWYgY29udmVydFRvQWJzb2x1dGVVcmxzIGlzbid0IGRlZmluZWQsIGJ1dCBzb3VyY2VtYXBzIGFyZSBlbmFibGVkXG5cdFx0YW5kIHRoZXJlIGlzIG5vIHB1YmxpY1BhdGggZGVmaW5lZCB0aGVuIGxldHMgdHVybiBjb252ZXJ0VG9BYnNvbHV0ZVVybHNcblx0XHRvbiBieSBkZWZhdWx0LiAgT3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIGNvbnZlcnRUb0Fic29sdXRlVXJscyBvcHRpb25cblx0XHRkaXJlY3RseVxuXHQqL1xuXHR2YXIgYXV0b0ZpeFVybHMgPSBvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyA9PT0gdW5kZWZpbmVkICYmIHNvdXJjZU1hcDtcblxuXHRpZiAob3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgfHwgYXV0b0ZpeFVybHMpIHtcblx0XHRjc3MgPSBmaXhVcmxzKGNzcyk7XG5cdH1cblxuXHRpZiAoc291cmNlTWFwKSB7XG5cdFx0Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcblx0XHRjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiICsgYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSArIFwiICovXCI7XG5cdH1cblxuXHR2YXIgYmxvYiA9IG5ldyBCbG9iKFtjc3NdLCB7IHR5cGU6IFwidGV4dC9jc3NcIiB9KTtcblxuXHR2YXIgb2xkU3JjID0gbGluay5ocmVmO1xuXG5cdGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cblx0aWYob2xkU3JjKSBVUkwucmV2b2tlT2JqZWN0VVJMKG9sZFNyYyk7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiXG4vKipcbiAqIFdoZW4gc291cmNlIG1hcHMgYXJlIGVuYWJsZWQsIGBzdHlsZS1sb2FkZXJgIHVzZXMgYSBsaW5rIGVsZW1lbnQgd2l0aCBhIGRhdGEtdXJpIHRvXG4gKiBlbWJlZCB0aGUgY3NzIG9uIHRoZSBwYWdlLiBUaGlzIGJyZWFrcyBhbGwgcmVsYXRpdmUgdXJscyBiZWNhdXNlIG5vdyB0aGV5IGFyZSByZWxhdGl2ZSB0byBhXG4gKiBidW5kbGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBwYWdlLlxuICpcbiAqIE9uZSBzb2x1dGlvbiBpcyB0byBvbmx5IHVzZSBmdWxsIHVybHMsIGJ1dCB0aGF0IG1heSBiZSBpbXBvc3NpYmxlLlxuICpcbiAqIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gXCJmaXhlc1wiIHRoZSByZWxhdGl2ZSB1cmxzIHRvIGJlIGFic29sdXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwYWdlIGxvY2F0aW9uLlxuICpcbiAqIEEgcnVkaW1lbnRhcnkgdGVzdCBzdWl0ZSBpcyBsb2NhdGVkIGF0IGB0ZXN0L2ZpeFVybHMuanNgIGFuZCBjYW4gYmUgcnVuIHZpYSB0aGUgYG5wbSB0ZXN0YCBjb21tYW5kLlxuICpcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb25cbiAgdmFyIGxvY2F0aW9uID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cubG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImZpeFVybHMgcmVxdWlyZXMgd2luZG93LmxvY2F0aW9uXCIpO1xuICB9XG5cblx0Ly8gYmxhbmsgb3IgbnVsbD9cblx0aWYgKCFjc3MgfHwgdHlwZW9mIGNzcyAhPT0gXCJzdHJpbmdcIikge1xuXHQgIHJldHVybiBjc3M7XG4gIH1cblxuICB2YXIgYmFzZVVybCA9IGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcbiAgdmFyIGN1cnJlbnREaXIgPSBiYXNlVXJsICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXFwvW15cXC9dKiQvLCBcIi9cIik7XG5cblx0Ly8gY29udmVydCBlYWNoIHVybCguLi4pXG5cdC8qXG5cdFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGp1c3QgYSB3YXkgdG8gcmVjdXJzaXZlbHkgbWF0Y2ggYnJhY2tldHMgd2l0aGluXG5cdGEgc3RyaW5nLlxuXG5cdCAvdXJsXFxzKlxcKCAgPSBNYXRjaCBvbiB0aGUgd29yZCBcInVybFwiIHdpdGggYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQgYW5kIHRoZW4gYSBwYXJlbnNcblx0ICAgKCAgPSBTdGFydCBhIGNhcHR1cmluZyBncm91cFxuXHQgICAgICg/OiAgPSBTdGFydCBhIG5vbi1jYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAgICAgW14pKF0gID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICg/OiAgPSBTdGFydCBhbm90aGVyIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG5cdCAgICAgICAgICAgICAgICAgW14pKF0rICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgICAgICBbXikoXSogID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgXFwpICA9IE1hdGNoIGEgZW5kIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICApICA9IEVuZCBHcm91cFxuICAgICAgICAgICAgICAqXFwpID0gTWF0Y2ggYW55dGhpbmcgYW5kIHRoZW4gYSBjbG9zZSBwYXJlbnNcbiAgICAgICAgICApICA9IENsb3NlIG5vbi1jYXB0dXJpbmcgZ3JvdXBcbiAgICAgICAgICAqICA9IE1hdGNoIGFueXRoaW5nXG4gICAgICAgKSAgPSBDbG9zZSBjYXB0dXJpbmcgZ3JvdXBcblx0IFxcKSAgPSBNYXRjaCBhIGNsb3NlIHBhcmVuc1xuXG5cdCAvZ2kgID0gR2V0IGFsbCBtYXRjaGVzLCBub3QgdGhlIGZpcnN0LiAgQmUgY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICovXG5cdHZhciBmaXhlZENzcyA9IGNzcy5yZXBsYWNlKC91cmxcXHMqXFwoKCg/OlteKShdfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqKVxcKS9naSwgZnVuY3Rpb24oZnVsbE1hdGNoLCBvcmlnVXJsKSB7XG5cdFx0Ly8gc3RyaXAgcXVvdGVzIChpZiB0aGV5IGV4aXN0KVxuXHRcdHZhciB1bnF1b3RlZE9yaWdVcmwgPSBvcmlnVXJsXG5cdFx0XHQudHJpbSgpXG5cdFx0XHQucmVwbGFjZSgvXlwiKC4qKVwiJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KVxuXHRcdFx0LnJlcGxhY2UoL14nKC4qKSckLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pO1xuXG5cdFx0Ly8gYWxyZWFkeSBhIGZ1bGwgdXJsPyBubyBjaGFuZ2Vcblx0XHRpZiAoL14oI3xkYXRhOnxodHRwOlxcL1xcL3xodHRwczpcXC9cXC98ZmlsZTpcXC9cXC9cXC8pL2kudGVzdCh1bnF1b3RlZE9yaWdVcmwpKSB7XG5cdFx0ICByZXR1cm4gZnVsbE1hdGNoO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlcnQgdGhlIHVybCB0byBhIGZ1bGwgdXJsXG5cdFx0dmFyIG5ld1VybDtcblxuXHRcdGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi8vXCIpID09PSAwKSB7XG5cdFx0ICBcdC8vVE9ETzogc2hvdWxkIHdlIGFkZCBwcm90b2NvbD9cblx0XHRcdG5ld1VybCA9IHVucXVvdGVkT3JpZ1VybDtcblx0XHR9IGVsc2UgaWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGJhc2UgdXJsXG5cdFx0XHRuZXdVcmwgPSBiYXNlVXJsICsgdW5xdW90ZWRPcmlnVXJsOyAvLyBhbHJlYWR5IHN0YXJ0cyB3aXRoICcvJ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeVxuXHRcdFx0bmV3VXJsID0gY3VycmVudERpciArIHVucXVvdGVkT3JpZ1VybC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIik7IC8vIFN0cmlwIGxlYWRpbmcgJy4vJ1xuXHRcdH1cblxuXHRcdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgdXJsKC4uLilcblx0XHRyZXR1cm4gXCJ1cmwoXCIgKyBKU09OLnN0cmluZ2lmeShuZXdVcmwpICsgXCIpXCI7XG5cdH0pO1xuXG5cdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgY3NzXG5cdHJldHVybiBmaXhlZENzcztcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL3VybHMuanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanNcbi8vIG1vZHVsZSBpZCA9IC4vbm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanNcbi8vIG1vZHVsZSBjaHVua3MgPSB1bml0IiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDApXHJcbiAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSB5W29wWzBdICYgMiA/IFwicmV0dXJuXCIgOiBvcFswXSA/IFwidGhyb3dcIiA6IFwibmV4dFwiXSkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbMCwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgIH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChvW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9OyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzXG4vLyBtb2R1bGUgY2h1bmtzID0gdW5pdCIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2goZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxuXHRcdGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJudWxsXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL21lbnUtaXRlbS9NZW51SXRlbS50cyIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZGVjb3JhdG9yLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0xMC0zIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9saWIvaW5kZXguanM/P3Bvc3Rjc3MhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXIvaW5kZXguanM/dHlwZT1jc3MhLi9tZW51SXRlbS5tLmNzc1wiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuLy8gUHJlcGFyZSBjc3NUcmFuc2Zvcm1hdGlvblxudmFyIHRyYW5zZm9ybTtcblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuXHQvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuXHRpZighY29udGVudC5sb2NhbHMpIHtcblx0XHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWRlY29yYXRvci1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTAtMyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbGliL2luZGV4LmpzPz9wb3N0Y3NzIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyL2luZGV4LmpzP3R5cGU9Y3NzIS4vbWVudUl0ZW0ubS5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kZWNvcmF0b3ItbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEwLTMhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2xpYi9pbmRleC5qcz8/cG9zdGNzcyEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZHRzLWxvYWRlci9pbmRleC5qcz90eXBlPWNzcyEuL21lbnVJdGVtLm0uY3NzXCIpO1xuXHRcdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cdFx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdFx0fSk7XG5cdH1cblx0Ly8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9tZW51LWl0ZW0vbWVudUl0ZW0ubS5jc3Ncbi8vIG1vZHVsZSBpZCA9IC4vc3JjL21lbnUtaXRlbS9tZW51SXRlbS5tLmNzc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJudWxsXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL21lbnUvTWVudS50cyIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZGVjb3JhdG9yLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0xMC0zIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9saWIvaW5kZXguanM/P3Bvc3Rjc3MhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXIvaW5kZXguanM/dHlwZT1jc3MhLi9tZW51Lm0uY3NzXCIpO1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG4vLyBQcmVwYXJlIGNzc1RyYW5zZm9ybWF0aW9uXG52YXIgdHJhbnNmb3JtO1xuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG5cdC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG5cdGlmKCFjb250ZW50LmxvY2Fscykge1xuXHRcdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZGVjb3JhdG9yLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0xMC0zIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9saWIvaW5kZXguanM/P3Bvc3Rjc3MhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXIvaW5kZXguanM/dHlwZT1jc3MhLi9tZW51Lm0uY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvQGRvam8vd2VicGFjay1jb250cmliL2Nzcy1tb2R1bGUtZGVjb3JhdG9yLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0xMC0zIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9saWIvaW5kZXguanM/P3Bvc3Rjc3MhLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2pvL3dlYnBhY2stY29udHJpYi9jc3MtbW9kdWxlLWR0cy1sb2FkZXIvaW5kZXguanM/dHlwZT1jc3MhLi9tZW51Lm0uY3NzXCIpO1xuXHRcdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cdFx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdFx0fSk7XG5cdH1cblx0Ly8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9tZW51L21lbnUubS5jc3Ncbi8vIG1vZHVsZSBpZCA9IC4vc3JjL21lbnUvbWVudS5tLmNzc1xuLy8gbW9kdWxlIGNodW5rcyA9IHVuaXQiLCJpbXBvcnQgJy4vbWVudS1pdGVtL01lbnVJdGVtJztcclxuaW1wb3J0ICcuL21lbnUvTWVudSc7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9dHMmaW5zdGFuY2VOYW1lPTBfY3VzdG9tLWVsZW1lbnRzIS4vdGVzdHMvdW5pdC9hbGwudHMiLCJjb25zdCB7IGRlc2NyaWJlLCBpdCB9ID0gaW50ZXJuLmdldEludGVyZmFjZSgnYmRkJyk7XHJcbmltcG9ydCBoYXJuZXNzIGZyb20gJ0Bkb2pvL2ZyYW1ld29yay90ZXN0aW5nL2hhcm5lc3MnO1xyXG5cclxuaW1wb3J0IHsgdiB9IGZyb20gJ0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kJztcclxuXHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vLi4vc3JjL21lbnUtaXRlbS9NZW51SXRlbSc7XHJcbmltcG9ydCAqIGFzIGNzcyBmcm9tICcuLi8uLi8uLi9zcmMvbWVudS1pdGVtL21lbnVJdGVtLm0uY3NzJztcclxuXHJcbmRlc2NyaWJlKCdNZW51SXRlbScsICgpID0+IHtcclxuXHRpdCgnc2hvdWxkIHJlbmRlciB3aWRnZXQnLCAoKSA9PiB7XHJcblx0XHRjb25zdCB0ZXN0TWVudUl0ZW0gPSBoYXJuZXNzKE1lbnVJdGVtKTtcclxuXHRcdGNvbnN0IHNlbGVjdGVkID0gdHJ1ZTtcclxuXHRcdGNvbnN0IHRpdGxlID0gJ01lbnUgSXRlbSc7XHJcblx0XHR0ZXN0TWVudUl0ZW0uc2V0UHJvcGVydGllcyh7IHNlbGVjdGVkLCB0aXRsZSB9KTtcclxuXHRcdHRlc3RNZW51SXRlbS5leHBlY3RSZW5kZXIoXHJcblx0XHRcdHYoJ2xpJywgeyBjbGFzc2VzOiBjc3Mucm9vdCB9LCBbXHJcblx0XHRcdFx0dihcclxuXHRcdFx0XHRcdCdzcGFuJyxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0Y2xhc3NlczogW2Nzcy5pdGVtLCBjc3Muc2VsZWN0ZWRdLFxyXG5cdFx0XHRcdFx0XHRvbmNsaWNrOiB0ZXN0TWVudUl0ZW0ubGlzdGVuZXJcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRbdGl0bGVdXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRdKVxyXG5cdFx0KTtcclxuXHR9KTtcclxufSk7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9dHMmaW5zdGFuY2VOYW1lPTBfY3VzdG9tLWVsZW1lbnRzIS4vdGVzdHMvdW5pdC9tZW51LWl0ZW0vTWVudUl0ZW0udHMiLCJjb25zdCB7IGRlc2NyaWJlLCBpdCB9ID0gaW50ZXJuLmdldEludGVyZmFjZSgnYmRkJyk7XHJcbmltcG9ydCBoYXJuZXNzIGZyb20gJ0Bkb2pvL2ZyYW1ld29yay90ZXN0aW5nL2hhcm5lc3MnO1xyXG5cclxuaW1wb3J0IHsgdiB9IGZyb20gJ0Bkb2pvL2ZyYW1ld29yay93aWRnZXQtY29yZS9kJztcclxuXHJcbmltcG9ydCB7IE1lbnUgfSBmcm9tICcuLi8uLi8uLi9zcmMvbWVudS9NZW51JztcclxuaW1wb3J0ICogYXMgY3NzIGZyb20gJy4uLy4uLy4uL3NyYy9tZW51L21lbnUubS5jc3MnO1xyXG5cclxuZGVzY3JpYmUoJ01lbnUnLCAoKSA9PiB7XHJcblx0aXQoJ3Nob3VsZCByZW5kZXIgd2lkZ2V0JywgKCkgPT4ge1xyXG5cdFx0Y29uc3QgdGVzdE1lbnUgPSBoYXJuZXNzKE1lbnUpO1xyXG5cdFx0dGVzdE1lbnUuZXhwZWN0UmVuZGVyKHYoJ25hdicsIHsgY2xhc3NlczogY3NzLnJvb3QgfSwgW3YoJ29sJywgeyBjbGFzc2VzOiBjc3MubWVudUNvbnRhaW5lciB9KV0pKTtcclxuXHR9KTtcclxufSk7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9AZG9qby93ZWJwYWNrLWNvbnRyaWIvY3NzLW1vZHVsZS1kdHMtbG9hZGVyP3R5cGU9dHMmaW5zdGFuY2VOYW1lPTBfY3VzdG9tLWVsZW1lbnRzIS4vdGVzdHMvdW5pdC9tZW51L01lbnUudHMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file From f1de67e54ae1b63c3abae9b7d4a47cec99618035 Mon Sep 17 00:00:00 2001 From: Bryan Forbes Date: Sat, 21 Jul 2018 03:50:10 -0500 Subject: [PATCH 3/5] Updates --- intern.json | 20 +- package-lock.json | 9415 ++++++++--------- package.json | 65 +- tarballs/dojo-cli-3.0.0-alpha.1.tgz | Bin 34982 -> 0 bytes tarballs/dojo-framework-3.0.0-pre.tgz | Bin 525017 -> 0 bytes .../dojo-webpack-contrib-3.0.0-alpha.1.tgz | Bin 43780 -> 0 bytes tarballs/grunt-dojo2-3.0.0-pre.tgz | Bin 66572 -> 0 bytes .../fixtures/unix/info/menu-item/stats.json | 106 +- test-app/fixtures/unix/info/menu/stats.json | 110 +- test-app/package-lock.json | 11 +- test-app/package.json | 4 +- tests/functional/main.ts | 2 +- tests/unit/main.ts | 2 +- tsconfig.json | 23 +- tslint.json | 64 +- 15 files changed, 4545 insertions(+), 5277 deletions(-) delete mode 100644 tarballs/dojo-cli-3.0.0-alpha.1.tgz delete mode 100644 tarballs/dojo-framework-3.0.0-pre.tgz delete mode 100644 tarballs/dojo-webpack-contrib-3.0.0-alpha.1.tgz delete mode 100644 tarballs/grunt-dojo2-3.0.0-pre.tgz diff --git a/intern.json b/intern.json index d7d83bb..27bbab4 100644 --- a/intern.json +++ b/intern.json @@ -1,14 +1,10 @@ { - "suites": [ - "./_build/tests/unit/all.js", - "./_build/tests/functional/all.js" - ], - - "coverage": [ - "./_build/src/**/*.js" - ], - - "configs": { - "local": {} - } + "extends": "./node_modules/@dojo/scripts/intern/base.json", + "capabilities+": { + "name": "@dojo/cli-build-widget" + }, + "suites": [ + "./dist/dev/tests/unit/all.js", + "./dist/dev/tests/functional/all.js" + ] } diff --git a/package-lock.json b/package-lock.json index 0b7d976..454428f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,12 +5,12 @@ "requires": true, "dependencies": { "@dojo/cli": { - "version": "file:tarballs/dojo-cli-3.0.0-alpha.1.tgz", - "integrity": "sha512-7gZf944+7Y5/4e7LenbOCC+07AL3tMVKFt2E9TZDdTrnStg9OJGQzsgWp5FkXs0vWIOMNFNjeGlqaCb1u75/rg==", + "version": "3.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/@dojo/cli/-/cli-3.0.0-alpha.1.tgz", + "integrity": "sha512-5oLp5n0umN7xTxhUGbOOM1DNWYEryx2rurB8xYJK1GDN52xTPwZLY05GanQcDvuwVh3jgyGubpVjbbZg41vJig==", "dev": true, "requires": { "chalk": "^2.3.0", - "cliui": "^4.0.0", "configstore": "^3.1.1", "cross-spawn": "^5.1.0", "detect-indent": "^5.0.0", @@ -23,15 +23,38 @@ "slice-ansi": "^1.0.0", "string-width": "^2.1.1", "tslib": "~1.8.1", - "typings-core": "^2.3.3", "update-notifier": "^2.3.0", "yargs": "^10.0.3" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, "cliui": { @@ -45,6 +68,63 @@ "wrap-ansi": "^2.0.0" } }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -58,59 +138,118 @@ "pinkie-promise": "^2.0.0" } }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "package-json": "^4.0.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "dev": true }, - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", "dev": true }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "widest-line": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, "yargs": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", @@ -149,14 +288,25 @@ "dev": true, "requires": { "tslib": "~1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", - "dev": true - } + } + }, + "@dojo/framework": { + "version": "3.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/@dojo/framework/-/framework-3.0.0-alpha.1.tgz", + "integrity": "sha512-Bpu7K7xQ210BH9mVBHYHIZ4CyNiDyUGSEyTZ0AKkRHy6+bggPN6hyatO5rbAhxrksMvk3Rgwi1nCosvLA4d6jQ==", + "requires": { + "@types/cldrjs": "~0.4.20", + "@types/globalize": "0.0.34", + "@types/web-animations-js": "2.2.5", + "@webcomponents/webcomponentsjs": "1.1.0", + "cldr-data": "~32.0.0", + "css-select-umd": "1.3.0-rc0", + "diff": "3.4.0", + "globalize": "1.3.0", + "intersection-observer": "0.4.2", + "pepjs": "0.4.2", + "tslib": "~1.8.0", + "web-animations-js": "2.3.1" } }, "@dojo/has": { @@ -172,6 +322,110 @@ "dev": true, "requires": { "@types/yargs": "^8.0.2" + }, + "dependencies": { + "@types/yargs": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-8.0.3.tgz", + "integrity": "sha512-YdxO7zGQf2qJeMgR0fNO8QTlj88L2zCP5GOddovoTyetgLiNDOUXcWzhWKb4EdZZlOjLQUA0JM8lW7VcKQL+9w==", + "dev": true + } + } + }, + "@dojo/scripts": { + "version": "3.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@dojo/scripts/-/scripts-3.0.0-alpha.6.tgz", + "integrity": "sha512-f8nQ2jdbzSyJ2Ytwpgqu0jocRGb7xNpmBvZL1Imo1bFQAH/946I+RHLM6DV1gYcie9zYMYMQdc/WeF8RFz6nCA==", + "dev": true, + "requires": { + "chalk": "~2.4.0", + "intern": "~4.2.0", + "parse-git-config": "~2.0.2", + "prettier": "1.13.7", + "rxjs": "^5.5.6", + "tslint": "~5.11.0", + "tslint-language-service": "~0.9.9", + "typescript": "~2.6.2", + "yargs": "~10.1.2" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "prettier": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz", + "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } } }, "@dojo/shim": { @@ -184,14 +438,26 @@ "pepjs": "0.4.2", "tslib": "~1.8.0", "web-animations-js": "2.3.1" - }, - "dependencies": { - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", - "dev": true - } + } + }, + "@dojo/webpack-contrib": { + "version": "3.0.0-alpha.2", + "resolved": "https://registry.npmjs.org/@dojo/webpack-contrib/-/webpack-contrib-3.0.0-alpha.2.tgz", + "integrity": "sha512-HPyF4UFj46RCZpwDg3ohHm4Plz09UQQpBFZvVbd9XL0vQg8FNR+HVrLYLitfBFth20NkXLFwHDUfCzYHPjqBQA==", + "requires": { + "@dojo/framework": "^3.0.0-alpha.1", + "acorn-dynamic-import": "3.0.0", + "copy-webpack-plugin": "4.0.1", + "filter-css": "0.1.2", + "html-webpack-include-assets-plugin": "1.0.2", + "jsdom": "11.6.2", + "loader-utils": "1.1.0", + "recast": "0.12.7", + "source-map": "0.6.1", + "ts-loader": "3.1.1", + "typed-css-modules": "0.3.1", + "typescript": "~2.6.1", + "workbox-webpack-plugin": "3.2.0" } }, "@sinonjs/formatio": { @@ -261,6 +527,12 @@ "dev": true } } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true } } }, @@ -294,6 +566,11 @@ "@types/tapable": "*", "@types/uglify-js": "*" } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, @@ -310,6 +587,14 @@ "@types/jszip": "~3.1.3", "jszip": "~3.1.3", "tslib": "~1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + } } }, "@types/babel-types": { @@ -339,15 +624,6 @@ "integrity": "sha512-h6+VEw2Vr3ORiFCyyJmcho2zALnUq9cvdB/IO8Xs9itrJVCenC7o26A6+m7D0ihTTr65eS259H5/Ghl/VjYs6g==", "dev": true }, - "@types/chalk": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-2.2.0.tgz", - "integrity": "sha512-1zzPV9FDe1I/WHhRkf9SNgqtRJWZqrBWgu7JGveuHmmyR9CnAPCie2N/x+iHrgnpYBIcCJWHBoMRv2TRWktsvw==", - "dev": true, - "requires": { - "chalk": "*" - } - }, "@types/charm": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/charm/-/charm-1.0.1.tgz", @@ -357,6 +633,11 @@ "@types/node": "*" } }, + "@types/cldrjs": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/@types/cldrjs/-/cldrjs-0.4.20.tgz", + "integrity": "sha512-vQe6BQF9QCHSLUlNjRa/1zicRCnQnTRwhW/FqgVv26A85COY1jfkkO6JjogDv22U3LRhu9pY4uPQOlxGnsuJPA==" + }, "@types/clean-css": { "version": "3.4.30", "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-3.4.30.tgz", @@ -433,15 +714,6 @@ "@types/webpack": "*" } }, - "@types/fs-extra": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-0.0.33.tgz", - "integrity": "sha1-qHGcQXsIDAEtNJeyjiKKwJdF/fI=", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/glob": { "version": "5.0.35", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz", @@ -453,6 +725,14 @@ "@types/node": "*" } }, + "@types/globalize": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/globalize/-/globalize-0.0.34.tgz", + "integrity": "sha512-FQTLuqZxqf+T1Ao6RzaIP7HcTcNvgDf0YQfK90YGYt1N6KeU5GE0M/hsxdQlpqvuztxjEwEQqIO3paSO/tZ4Pw==", + "requires": { + "@types/cldrjs": "*" + } + }, "@types/globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/globby/-/globby-6.1.0.tgz", @@ -462,15 +742,6 @@ "@types/glob": "*" } }, - "@types/grunt": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/@types/grunt/-/grunt-0.4.23.tgz", - "integrity": "sha512-tg7GE1d3GiT2yOsP6GlFmkii8+z15X8GNvlAoupAgP4McSfYQjYRTltpNrS1sX9n/ANUN2mnUmoqsGUCwNkg2g==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/gzip-size": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/gzip-size/-/gzip-size-4.0.0.tgz", @@ -480,18 +751,6 @@ "@types/node": "*" } }, - "@types/handlebars": { - "version": "4.0.38", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.38.tgz", - "integrity": "sha512-oMzU0D7jDp+H2go/i0XqBHfr+HEhYD/e1TvkhHi3yrhQm/7JFR8FJMdvoH76X8G1FBpgc6Pwi+QslCJBeJ1N9g==", - "dev": true - }, - "@types/highlight.js": { - "version": "9.12.3", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.3.tgz", - "integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==", - "dev": true - }, "@types/html-minifier": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/@types/html-minifier/-/html-minifier-3.5.2.tgz", @@ -538,13 +797,6 @@ "@types/babel-types": "*", "@types/istanbul-lib-coverage": "*", "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "@types/istanbul-lib-report": { @@ -564,14 +816,6 @@ "requires": { "@types/istanbul-lib-coverage": "*", "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "@types/istanbul-reports": { @@ -633,12 +877,6 @@ "@types/node": "*" } }, - "@types/marked": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.0.28.tgz", - "integrity": "sha1-RLp1Tp+lFDJYPo6zCnxN0km1L6o=", - "dev": true - }, "@types/mime": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", @@ -740,19 +978,10 @@ "integrity": "sha512-BFonQx849sYB2YOJZBUEfbWdaJcqRb6+ASvgUBtcmg2JRTjBaV2Wgn0SD0gWNIZ+rd7KPysPCjLUOUXnBDUlBg==", "dev": true }, - "@types/shelljs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.3.33.tgz", - "integrity": "sha1-32E73biCJe0JzlyDX2INyq8VXms=", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/sinon": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-4.0.0.tgz", - "integrity": "sha512-cuK4xM8Lg2wd8cxshcQa8RG4IK/xfyB6TNE6tNVvkrShR4xdrYgsV04q6Dp6v1Lp6biEFdzD8k8zg/ujQeiw+A==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-4.3.3.tgz", + "integrity": "sha512-Tt7w/ylBS/OEAlSCwzB0Db1KbxnkycP/1UkQpbvKFYoUuRn4uYsC3xh5TRPrOjTy0i8TIkSz1JdNL4GPVdf3KQ==", "dev": true }, "@types/source-map": { @@ -786,15 +1015,13 @@ "integrity": "sha512-MAT0BW2ruO0LhQKjvlipLGCF/Yx0y/cj+tT67tK3QIQDrM2+9R78HgJ54VlrE8AbfjYJJBCQCEPM5ZblPVTuww==", "requires": { "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, + "@types/web-animations-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@types/web-animations-js/-/web-animations-js-2.2.5.tgz", + "integrity": "sha512-3kjO6yvLt1e673wtcKEz0lgLKqPkBiuwxQj0DQ1jj+48HB03emIlTQYcqKAvB9UwOXq09QrWy/Dm6ZU8xMZVTw==" + }, "@types/webpack": { "version": "3.8.1", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-3.8.1.tgz", @@ -826,16 +1053,25 @@ } }, "@types/yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha512-Upj9YsBZRgjEVPvsaeGru48d2JiyzBNZkmkebHyoaQ+UM9wqj/rp5mkilRjSq/Ga45yfd/zwrNuML9f2gGfVpw==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-10.0.2.tgz", + "integrity": "sha512-VbsIazac1gy20qTjEZVgDUhs8uuVmGbFkSGcdHpcMoXSC4+0vn/PRHz9YBqpgxKwUi8qoxf3eHff07w7aKNBOg==", "dev": true }, + "@webcomponents/webcomponentsjs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.1.0.tgz", + "integrity": "sha512-7toNyVlrl7vJnY3PU0eXIK1KWq8phfnEe1IwOdCMxkIl/BfUkUB2aaVs45R0LSx1qxHRnkqj0vlGtskUvKkNkA==" + }, + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=" + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.5", @@ -852,38 +1088,26 @@ "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==" }, "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "requires": { - "acorn": "^4.0.3" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } + "acorn": "^5.0.0" } }, - "agent-base": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", - "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", - "dev": true, + "acorn-globals": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", + "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", "requires": { - "extend": "~3.0.0", - "semver": "~5.0.1" - }, - "dependencies": { - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", - "dev": true - } + "acorn": "^5.0.0" } }, + "adm-zip": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", + "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==" + }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", @@ -921,21 +1145,11 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", - "dev": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", + "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", "requires": { - "ansi-wrap": "0.1.0" + "string-width": "^1.0.1" } }, "ansi-escapes": { @@ -948,33 +1162,15 @@ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" }, - "ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "any-observable": { "version": "0.2.0", @@ -982,12 +1178,6 @@ "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", "dev": true }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", @@ -1025,6 +1215,12 @@ "sprintf-js": "~1.0.2" } }, + "argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", + "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", + "dev": true + }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", @@ -1043,6 +1239,11 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" + }, "array-filter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", @@ -1071,12 +1272,6 @@ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", "dev": true }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -1101,11 +1296,9 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", - "dev": true, - "optional": true + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, "asn1.js": { "version": "4.10.1", @@ -1141,11 +1334,9 @@ } }, "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", - "dev": true, - "optional": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assertion-error": { "version": "1.1.0", @@ -1159,9 +1350,9 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "ast-types": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.14.tgz", - "integrity": "sha512-Ebvx7/0lLboCdyEmAw/4GqwBeKIijPveXNiVGhCGCNxc7z26T5he7DC6ARxu8ByKuzUZZcLog+VP8GMyZrBzJw==" + "version": "0.9.12", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.12.tgz", + "integrity": "sha1-sTYwDWcCZiWuFTJpgsqZGOXbc8k=" }, "async": { "version": "2.6.1", @@ -1179,14 +1370,12 @@ "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { "version": "2.1.1", @@ -1204,14 +1393,75 @@ "num2fraction": "^1.2.2", "postcss": "^5.2.16", "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "aws-sign2": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", - "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", - "dev": true, - "optional": true + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "babel-code-frame": { "version": "6.26.0", @@ -1223,16 +1473,6 @@ "js-tokens": "^3.0.2" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -1252,11 +1492,6 @@ "requires": { "ansi-regex": "^2.0.0" } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, @@ -1290,6 +1525,12 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -1429,6 +1670,15 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, "benchmark": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", @@ -1450,54 +1700,25 @@ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" }, "bl": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { - "readable-stream": "~1.0.26" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, - "body": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", - "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", - "dev": true, - "requires": { - "continuable-cache": "^0.3.1", - "error": "^7.0.0", - "raw-body": "~1.1.0", - "safe-json-parse": "~1.0.1" - }, - "dependencies": { - "bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", - "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", - "dev": true - }, - "raw-body": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", - "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", - "dev": true, - "requires": { - "bytes": "1", - "string_decoder": "0.10" - } - } - } - }, "body-parser": { "version": "1.18.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", @@ -1513,6 +1734,13 @@ "qs": "6.5.1", "raw-body": "2.3.2", "type-is": "~1.6.15" + }, + "dependencies": { + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + } } }, "boolbase": { @@ -1521,27 +1749,48 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "boom": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", - "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", - "dev": true, + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { - "hoek": "0.9.x" + "hoek": "4.x.x" } }, "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.5.1.tgz", + "integrity": "sha1-W3PYhA6388ihVcv2ntPtaNRyABQ=", "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", + "camelcase": "^2.1.0", + "chalk": "^1.1.1", "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" + "filled-array": "^1.0.0", + "object-assign": "^4.0.1", + "repeating": "^2.0.0", + "string-width": "^1.0.1", + "widest-line": "^1.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "brace-expansion": { @@ -1568,6 +1817,11 @@ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, + "browser-process-hrtime": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=" + }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -1600,13 +1854,6 @@ "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } } }, "browserify-rsa": { @@ -1657,13 +1904,6 @@ "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } } }, "buffer-alloc": { @@ -1739,6 +1979,32 @@ "y18n": "^4.0.0" }, "dependencies": { + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", @@ -1769,6 +2035,15 @@ } } }, + "caller-id": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-id/-/caller-id-0.1.0.tgz", + "integrity": "sha1-Wb2sCJPRLDhxQIJ5Ix+XRYNk8Hs=", + "dev": true, + "requires": { + "stack-trace": "~0.0.7" + } + }, "camel-case": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", @@ -1779,26 +2054,17 @@ } }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" }, "camelcase-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, "requires": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } } }, "caniuse-api": { @@ -1813,9 +2079,9 @@ } }, "caniuse-db": { - "version": "1.0.30000867", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000867.tgz", - "integrity": "sha1-tVpuz6wxB5iJQMnH3+GGYxUxLJc=" + "version": "1.0.30000869", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000869.tgz", + "integrity": "sha1-w9pZ+o2UVt+Iokuyku3g43mHmMs=" }, "caniuse-lite": { "version": "1.0.30000865", @@ -1825,14 +2091,12 @@ "capture-stack-trace": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", - "dev": true + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" }, "caseless": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz", - "integrity": "sha1-gWfBq4OX+1u5X5bSjlqBxQ8kesQ=", - "dev": true + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "center-align": { "version": "0.1.3", @@ -1858,24 +2122,42 @@ } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "^3.1.0", + "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "charm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", + "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "charm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", "dev": true, "requires": { @@ -1902,6 +2184,21 @@ "is-glob": "^2.0.0", "path-is-absolute": "^1.0.0", "readdirp": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "chownr": { @@ -1932,16 +2229,6 @@ "chalk": "^1.1.3" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -1961,11 +2248,6 @@ "requires": { "ansi-regex": "^2.0.0" } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, @@ -1995,12 +2277,47 @@ } } }, + "cldr-data": { + "version": "32.0.1", + "resolved": "https://registry.npmjs.org/cldr-data/-/cldr-data-32.0.1.tgz", + "integrity": "sha1-eWCDKDbgpkp0voi1XuEF8pgKDyo=", + "requires": { + "cldr-data-downloader": "0.3.x", + "glob": "5.x.x" + } + }, + "cldr-data-downloader": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/cldr-data-downloader/-/cldr-data-downloader-0.3.4.tgz", + "integrity": "sha1-SiWXAiHvg5vh7LWKFnEdo/Pk1sA=", + "requires": { + "adm-zip": "0.4.11", + "mkdirp": "0.5.0", + "nopt": "3.0.x", + "progress": "1.1.8", + "q": "1.0.1", + "request": "~2.83.0", + "request-progress": "0.3.1" + } + }, + "cldrjs": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.4.8.tgz", + "integrity": "sha1-O5lMRk0qMrWsp8XeF6YKh+RdxPk=" + }, "clean-css": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", "requires": { "source-map": "0.5.x" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, "clean-webpack-plugin": { @@ -2014,8 +2331,7 @@ "cli-boxes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" }, "cli-columns": { "version": "3.1.2", @@ -2027,9 +2343,33 @@ }, "dependencies": { "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } }, "strip-ansi": { "version": "3.0.1", @@ -2037,6 +2377,13 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } } } } @@ -2064,46 +2411,11 @@ "string-width": "^1.0.1" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "slice-ansi": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } } } }, @@ -2123,29 +2435,6 @@ "wrap-ansi": "^2.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -2153,15 +2442,6 @@ "requires": { "ansi-regex": "^2.0.0" } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } } } }, @@ -2181,6 +2461,13 @@ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "requires": { "q": "^1.1.2" + }, + "dependencies": { + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + } } }, "code-point-at": { @@ -2188,22 +2475,48 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "codecov.io": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/codecov.io/-/codecov.io-0.1.6.tgz", - "integrity": "sha1-Wd/QLaH/McL7K5Uq2K0W/TeBtyg=", - "dev": true, - "requires": { - "request": "2.42.0", - "urlgrey": "0.4.0" + "codecov": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.4.tgz", + "integrity": "sha512-KJyzHdg9B8U9LxXa7hS6jnEW5b1cNckLYc2YpnJ1nEFiOW+/iSzDHp+5MYEIQd9fN3/tC6WmGZmYiwxzkuGp/A==", + "dev": true, + "requires": { + "argv": "^0.0.2", + "ignore-walk": "^3.0.1", + "request": "^2.87.0", + "urlgrey": "^0.4.4" + }, + "dependencies": { + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + } } }, - "coffee-script": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", - "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=", - "dev": true - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -2263,7 +2576,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -2279,6 +2591,11 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==" }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -2303,49 +2620,29 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", + "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", "requires": { - "dot-prop": "^4.1.0", + "dot-prop": "^3.0.0", "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" + "mkdirp": "^0.5.0", + "object-assign": "^4.0.1", + "os-tmpdir": "^1.0.0", + "osenv": "^0.1.0", + "uuid": "^2.0.1", + "write-file-atomic": "^1.1.2", + "xdg-basedir": "^2.0.0" + }, + "dependencies": { + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + } } }, "console-browserify": { @@ -2371,11 +2668,10 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, - "continuable-cache": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", - "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", - "dev": true + "content-type-parser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", + "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==" }, "cookie": { "version": "0.3.1", @@ -2398,6 +2694,16 @@ "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + } } }, "copy-descriptor": { @@ -2405,6 +2711,46 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, + "copy-webpack-plugin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.0.1.tgz", + "integrity": "sha1-lyjjg7lDFgUNDHRjlY8rhcCqggA=", + "requires": { + "bluebird": "^2.10.2", + "fs-extra": "^0.26.4", + "glob": "^6.0.4", + "is-glob": "^3.1.0", + "loader-utils": "^0.2.15", + "lodash": "^4.3.0", + "minimatch": "^3.0.0", + "node-dir": "^0.1.10" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, "core-js": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", @@ -2436,6 +2782,50 @@ } } }, + "cpx": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cpx/-/cpx-1.5.0.tgz", + "integrity": "sha1-GFvgGFEdhycN7czCkxceN2VauI8=", + "dev": true, + "requires": { + "babel-runtime": "^6.9.2", + "chokidar": "^1.6.0", + "duplexer": "^0.1.1", + "glob": "^7.0.5", + "glob2base": "^0.0.12", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "resolve": "^1.1.7", + "safe-buffer": "^5.0.1", + "shell-quote": "^1.6.1", + "subarg": "^1.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -2449,7 +2839,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, "requires": { "capture-stack-trace": "^1.0.0" } @@ -2489,24 +2878,22 @@ "which": "^1.2.9" } }, - "cross-spawn-async": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", - "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", - "dev": true, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "requires": { - "lru-cache": "^4.0.0", - "which": "^1.2.8" - } - }, - "cryptiles": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", - "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", - "dev": true, - "optional": true, - "requires": { - "boom": "0.4.x" + "boom": "5.x.x" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.x.x" + } + } } }, "crypto-browserify": { @@ -2533,29 +2920,24 @@ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", "dev": true }, - "csproj2ts": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/csproj2ts/-/csproj2ts-0.0.7.tgz", - "integrity": "sha1-drEJRoMlbponCf1cY+7ya/R6FEI=", - "dev": true, + "css": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz", + "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==", "requires": { - "es6-promise": "^2.0.1", - "lodash": "^3.3.1", - "semver": "^5.0.1", - "xml2js": "^0.4.5" + "inherits": "^2.0.1", + "source-map": "^0.1.38", + "source-map-resolve": "^0.5.1", + "urix": "^0.1.0" }, "dependencies": { - "es6-promise": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "requires": { + "amdefine": ">=0.0.4" + } } } }, @@ -2609,31 +2991,8 @@ "postcss-modules-values": "^1.1.0", "postcss-value-parser": "^3.3.0", "source-list-map": "^2.0.0" - } - }, - "css-modules-loader-core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", - "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.1", - "postcss-modules-extract-imports": "1.1.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -2659,15 +3018,21 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", - "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "^1.1.3", + "js-base64": "^2.1.9", "source-map": "^0.5.6", "supports-color": "^3.2.3" } }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -2686,6 +3051,19 @@ } } }, + "css-modules-loader-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", + "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.1", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0" + } + }, "css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", @@ -2697,6 +3075,18 @@ "nth-check": "~1.0.1" } }, + "css-select-umd": { + "version": "1.3.0-rc0", + "resolved": "https://registry.npmjs.org/css-select-umd/-/css-select-umd-1.3.0-rc0.tgz", + "integrity": "sha512-ggouX0yWeql8nZobF5jscijHx/WIDkEuy7Iq6fU2X6ogQyIPpJ/aGn4ZYM0jpfI0LbvDaQustkj0az/hN1BqwA==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "es6-set": "^0.1.5", + "nth-check": "^1.0.1" + } + }, "css-selector-tokenizer": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", @@ -2759,6 +3149,64 @@ "postcss-unique-selectors": "^2.0.2", "postcss-value-parser": "^3.2.3", "postcss-zindex": "^2.0.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "csso": { @@ -2768,14 +3216,27 @@ "requires": { "clap": "^1.0.9", "source-map": "^0.5.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, - "ctype": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", - "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", - "dev": true, - "optional": true + "cssom": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", + "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==" + }, + "cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "requires": { + "cssom": "0.3.x" + } }, "currently-unhandled": { "version": "0.4.1", @@ -2798,6 +3259,14 @@ "es5-ext": "^0.10.9" } }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, "date-fns": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", @@ -2809,16 +3278,6 @@ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2851,14 +3310,6 @@ "make-dir": "^1.0.0", "pify": "^2.3.0", "strip-dirs": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } } }, "decompress-tar": { @@ -2931,12 +3382,6 @@ "object-assign": "^4.0.1", "pinkie-promise": "^2.0.0" } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true } } }, @@ -2955,23 +3400,15 @@ "type-detect": "^4.0.0" } }, - "deep-equal": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.1.2.tgz", - "integrity": "sha1-skbCuApXCkfBG+HZvRBw7IeLh84=", - "dev": true - }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "default-require-extensions": { "version": "1.0.0", @@ -2980,17 +3417,6 @@ "dev": true, "requires": { "strip-bom": "^2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } } }, "define-properties": { @@ -3057,8 +3483,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "depd": { "version": "1.1.2", @@ -3086,9 +3511,9 @@ "dev": true }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", + "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==" }, "diffie-hellman": { "version": "5.0.3", @@ -3107,6 +3532,21 @@ "requires": { "arrify": "^1.0.1", "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } } }, "dom-converter": { @@ -3150,6 +3590,14 @@ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "requires": { + "webidl-conversions": "^4.0.2" + } + }, "domhandler": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", @@ -3168,51 +3616,26 @@ } }, "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", "requires": { "is-obj": "^1.0.0" } }, - "dts-generator": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dts-generator/-/dts-generator-2.1.0.tgz", - "integrity": "sha1-A5uHpPX4R7O47wDd7j6wlUXezv4=", - "dev": true, - "requires": { - "bluebird": "3.3.3", - "glob": "7.0.0", - "mkdirp": "0.5.1" - }, - "dependencies": { - "bluebird": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.3.3.tgz", - "integrity": "sha1-z5akXXe5qXpDxGo2XEYZ9iv5dtA=", - "dev": true - }, - "glob": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.0.tgz", - "integrity": "sha1-OyCjV//89GuzhK7W+K6aZH/basQ=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + } + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -3228,35 +3651,15 @@ "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "~0.1.0" } }, "ee-first": { @@ -3336,37 +3739,36 @@ "prr": "~1.0.1" } }, - "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "dev": true, - "requires": { - "string-template": "~0.2.1", - "xtend": "~4.0.0" - }, - "dependencies": { - "string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", - "dev": true - } - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { "is-arrayish": "^0.2.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - } + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, "es5-ext": { @@ -3409,9 +3811,9 @@ "dev": true }, "es6-promise": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-0.1.2.tgz", - "integrity": "sha1-8RLCn+paCZhTn8tqL9IUQ9KPBfc=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", "dev": true }, "es6-set": { @@ -3457,34 +3859,15 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", + "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", + "esprima": "^3.1.3", + "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", - "source-map": "~0.2.0" - }, - "dependencies": { - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "source-map": "~0.6.1" } }, "escope": { @@ -3498,20 +3881,10 @@ "estraverse": "^4.1.1" } }, - "eslint-plugin-prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz", - "integrity": "sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og==", - "dev": true, - "requires": { - "fast-diff": "^1.1.1", - "jest-docblock": "^21.0.0" - } - }, "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" }, "esrecurse": { "version": "4.2.1", @@ -3545,11 +3918,20 @@ "es5-ext": "~0.10.14" } }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true + "event-stream": { + "version": "3.3.4", + "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } }, "events": { "version": "1.1.1", @@ -3580,12 +3962,6 @@ "strip-eof": "^1.0.0" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, "exit-hook": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", @@ -3608,6 +3984,15 @@ "fill-range": "^2.1.0" } }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, "express": { "version": "4.16.2", "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", @@ -3643,13 +4028,24 @@ "type-is": "~1.6.15", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "dependencies": { + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + } } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { "version": "3.0.2", @@ -3687,6 +4083,13 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "requires": { "is-extglob": "^1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + } } }, "extract-text-webpack-plugin": { @@ -3700,17 +4103,16 @@ "webpack-sources": "^1.0.1" } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, - "fast-diff": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", - "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", - "dev": true - }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -3719,23 +4121,13 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fastparse": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=" }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -3763,12 +4155,6 @@ "schema-utils": "^0.3.0" } }, - "file-sync-cmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", - "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", - "dev": true - }, "file-type": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", @@ -3797,6 +4183,23 @@ "repeat-string": "^1.5.2" } }, + "filled-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", + "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=" + }, + "filter-css": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/filter-css/-/filter-css-0.1.2.tgz", + "integrity": "sha1-Sk0BWyGhRamWFxA4+AYMAxV17gk=", + "requires": { + "css": "^2.2.0", + "get-stdin": "^5.0.1", + "lodash": "^4.13.1", + "meow": "^3.1.0", + "update-notifier": "^0.7.0" + } + }, "finalhandler": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", @@ -3821,6 +4224,12 @@ "pkg-dir": "^2.0.0" } }, + "find-index": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "dev": true + }, "find-parent-dir": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", @@ -3828,35 +4237,12 @@ "dev": true }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "flatten": { @@ -3871,35 +4257,6 @@ "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.4" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "for-in": { @@ -3921,31 +4278,20 @@ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, "forever-agent": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", - "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=", - "dev": true + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "1.0.6", "mime-types": "^2.1.12" } }, - "formatio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", - "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", - "dev": true, - "requires": { - "samsam": "1.x" - } - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -3964,6 +4310,12 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -3971,35 +4323,6 @@ "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "fs-constants": { @@ -4015,14 +4338,25 @@ "dev": true }, "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dev": true, + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", "requires": { "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + } } }, "fs-write-stream-atomic": { @@ -4508,38 +4842,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, - "generic-names": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-1.0.3.tgz", - "integrity": "sha1-LXhqEhruUIh2eWk56OO/+DbCCRc=", - "dev": true, - "requires": { - "loader-utils": "^0.2.16" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } - } - }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", @@ -4558,10 +4860,9 @@ "dev": true }, "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" }, "get-stream": { "version": "3.0.0", @@ -4573,11 +4874,13 @@ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", - "dev": true + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } }, "git-config-path": { "version": "1.0.1", @@ -4602,14 +4905,13 @@ } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "requires": { - "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -4621,6 +4923,21 @@ "requires": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "glob-parent": { @@ -4629,6 +4946,30 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "requires": { "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true, + "requires": { + "find-index": "^0.1.1" } }, "global-dirs": { @@ -4640,6 +4981,14 @@ "ini": "^1.3.4" } }, + "globalize": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.3.0.tgz", + "integrity": "sha1-xWUkuKz9LOONDJfd/c6zj2RLM5I=", + "requires": { + "cldrjs": "^0.4.6" + } + }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", @@ -4657,35 +5006,47 @@ "ignore": "^3.3.5", "pify": "^3.0.0", "slash": "^1.0.0" - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } } }, "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", "is-redirect": "^1.0.0", "is-retry-allowed": "^1.0.0", "is-stream": "^1.0.0", "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^3.0.0", + "unzip-response": "^1.0.2", "url-parse-lax": "^1.0.0" } }, @@ -4700,1156 +5061,22 @@ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, - "grunt": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", - "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=", - "dev": true, - "requires": { - "coffee-script": "~1.10.0", - "dateformat": "~1.0.12", - "eventemitter2": "~0.4.13", - "exit": "~0.1.1", - "findup-sync": "~0.3.0", - "glob": "~7.0.0", - "grunt-cli": "~1.2.0", - "grunt-known-options": "~1.1.0", - "grunt-legacy-log": "~1.0.0", - "grunt-legacy-util": "~1.0.0", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.5.2", - "minimatch": "~3.0.0", - "nopt": "~3.0.6", - "path-is-absolute": "~1.0.0", - "rimraf": "~2.2.8" + "gzip-size": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz", + "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", + "requires": { + "duplexer": "^0.1.1", + "pify": "^3.0.0" }, "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "grunt-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", - "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", - "dev": true, - "requires": { - "findup-sync": "~0.3.0", - "grunt-known-options": "~1.1.0", - "nopt": "~3.0.6", - "resolve": "~1.1.0" - } - }, - "js-yaml": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", - "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", - "dev": true, - "requires": { - "argparse": "^1.0.2", - "esprima": "^2.6.0" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } - } - }, - "grunt-contrib-clean": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz", - "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=", - "dev": true, - "requires": { - "async": "^1.5.2", - "rimraf": "^2.5.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } - } - }, - "grunt-contrib-copy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", - "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "file-sync-cmp": "^0.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "grunt-contrib-watch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", - "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", - "dev": true, - "requires": { - "async": "^2.6.0", - "gaze": "^1.1.0", - "lodash": "^4.17.10", - "tiny-lr": "^1.1.1" - } - }, - "grunt-dojo2": { - "version": "file:tarballs/grunt-dojo2-3.0.0-pre.tgz", - "integrity": "sha512-Rm2HxBI5mFpPkQvX2b4ovs2e/cJXN2V6rpsmWHqZrNAnJMF69rWSxaE+KUm0HhtBLhnQhTxXqBqzug/LQTXxMQ==", - "dev": true, - "requires": { - "codecov.io": ">=0.1.6", - "cssnano": "^3.10.0", - "dts-generator": ">=1.7.0", - "execa": "^0.4.0", - "glob": "^7.1.2", - "grunt-contrib-clean": ">=1.0.0", - "grunt-contrib-copy": ">=1.0.0", - "grunt-contrib-watch": ">=1.0.0", - "grunt-postcss": "^0.8.0", - "grunt-text-replace": ">=0.4.0", - "grunt-ts": ">=5.0.0", - "grunt-typings": "^0.1.5", - "intern": "~4.2.0", - "lodash": "^4.15.0", - "parse-git-config": "^0.4.2", - "pkg-dir": "^1.0.0", - "postcss-cssnext": "^2.9.0", - "postcss-import": "^9.1.0", - "postcss-modules": "^0.6.3", - "remap-istanbul": ">=0.6.3", - "resolve-from": "^2.0.0", - "shelljs": "^0.7.6", - "typed-css-modules": "^0.3.1", - "typedoc": "0.5.9", - "umd-wrapper": "^0.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "color-convert": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", - "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=", - "dev": true - }, - "execa": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz", - "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=", - "dev": true, - "requires": { - "cross-spawn-async": "^2.1.1", - "is-stream": "^1.1.0", - "npm-run-path": "^1.0.0", - "object-assign": "^4.0.1", - "path-key": "^1.0.0", - "strip-eof": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "npm-run-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", - "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", - "dev": true, - "requires": { - "path-key": "^1.0.0" - } - }, - "onecolor": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-2.4.2.tgz", - "integrity": "sha1-pT7D/xccNEYBbdUhDRobVEv32HQ=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-key": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", - "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", - "dev": true - }, - "pixrem": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pixrem/-/pixrem-3.0.2.tgz", - "integrity": "sha1-MNG6+0w73Ojpu0vVahOYVhkyDDQ=", - "dev": true, - "requires": { - "browserslist": "^1.0.0", - "postcss": "^5.0.0", - "reduce-css-calc": "^1.2.7" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - }, - "pleeease-filters": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pleeease-filters/-/pleeease-filters-3.0.1.tgz", - "integrity": "sha1-Tf4OjxBGYTUXxktyi8gGCKfr8i8=", - "dev": true, - "requires": { - "onecolor": "~2.4.0", - "postcss": "^5.0.4" - } - }, - "postcss-apply": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/postcss-apply/-/postcss-apply-0.3.0.tgz", - "integrity": "sha1-ovN8W9+ogeTBX08kXsDNlt0ucNU=", - "dev": true, - "requires": { - "balanced-match": "^0.4.1", - "postcss": "^5.0.21" - } - }, - "postcss-attribute-case-insensitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-1.0.1.tgz", - "integrity": "sha1-zrc3d+EGFn6yM/GTjJvZ8uaXMI0=", - "dev": true, - "requires": { - "postcss": "^5.1.1", - "postcss-selector-parser": "^2.2.0" - } - }, - "postcss-color-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-function/-/postcss-color-function-2.0.1.tgz", - "integrity": "sha1-mtIm9VDop8f4uKd4YFRbbdf1UkE=", - "dev": true, - "requires": { - "css-color-function": "^1.2.0", - "postcss": "^5.0.4", - "postcss-message-helpers": "^2.0.0", - "postcss-value-parser": "^3.3.0" - } - }, - "postcss-color-gray": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-3.0.1.tgz", - "integrity": "sha1-dEMu3mbdg7HRNjVlxos3bhj/Z3A=", - "dev": true, - "requires": { - "color": "^0.11.3", - "postcss": "^5.0.4", - "postcss-message-helpers": "^2.0.0", - "reduce-function-call": "^1.0.1" - } - }, - "postcss-color-hex-alpha": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-2.0.0.tgz", - "integrity": "sha1-RP1uyt5mAoZIyIHLZQTNy/3GzQk=", - "dev": true, - "requires": { - "color": "^0.10.1", - "postcss": "^5.0.4", - "postcss-message-helpers": "^2.0.0" - }, - "dependencies": { - "color": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/color/-/color-0.10.1.tgz", - "integrity": "sha1-wEGI34KiCd3rzOzazT7DIPGTc58=", - "dev": true, - "requires": { - "color-convert": "^0.5.3", - "color-string": "^0.3.0" - } - } - } - }, - "postcss-color-hsl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-color-hsl/-/postcss-color-hsl-1.0.5.tgz", - "integrity": "sha1-9Tuxw0gxDOMHrYnjGBqGRzi15oc=", - "dev": true, - "requires": { - "postcss": "^5.2.0", - "postcss-value-parser": "^3.3.0", - "units-css": "^0.4.0" - } - }, - "postcss-color-hwb": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-hwb/-/postcss-color-hwb-2.0.1.tgz", - "integrity": "sha1-1jr6+bcMtZX5AKKcn+V78qMvq+w=", - "dev": true, - "requires": { - "color": "^0.11.4", - "postcss": "^5.0.4", - "postcss-message-helpers": "^2.0.0", - "reduce-function-call": "^1.0.1" - } - }, - "postcss-color-rebeccapurple": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-2.0.1.tgz", - "integrity": "sha1-dMZETny7fYVhO19yht96SRYIRRw=", - "dev": true, - "requires": { - "color": "^0.11.4", - "postcss": "^5.0.4" - } - }, - "postcss-color-rgb": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/postcss-color-rgb/-/postcss-color-rgb-1.1.4.tgz", - "integrity": "sha1-8pJD4i6OjBNDRHQJI3LUzmBb6Lw=", - "dev": true, - "requires": { - "postcss": "^5.2.0", - "postcss-value-parser": "^3.3.0" - } - }, - "postcss-color-rgba-fallback": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-2.2.0.tgz", - "integrity": "sha1-bSlJG+WZCpMXPUfnx29YELCUAro=", - "dev": true, - "requires": { - "postcss": "^5.0.0", - "postcss-value-parser": "^3.0.2", - "rgb-hex": "^1.0.0" - } - }, - "postcss-cssnext": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/postcss-cssnext/-/postcss-cssnext-2.11.0.tgz", - "integrity": "sha1-MeaPAB5AlgTacDtm3hS4uMjJ8rE=", - "dev": true, - "requires": { - "autoprefixer": "^6.0.2", - "caniuse-api": "^1.5.3", - "chalk": "^1.1.1", - "pixrem": "^3.0.0", - "pleeease-filters": "^3.0.0", - "postcss": "^5.0.4", - "postcss-apply": "^0.3.0", - "postcss-attribute-case-insensitive": "^1.0.1", - "postcss-calc": "^5.0.0", - "postcss-color-function": "^2.0.0", - "postcss-color-gray": "^3.0.0", - "postcss-color-hex-alpha": "^2.0.0", - "postcss-color-hsl": "^1.0.5", - "postcss-color-hwb": "^2.0.0", - "postcss-color-rebeccapurple": "^2.0.0", - "postcss-color-rgb": "^1.1.4", - "postcss-color-rgba-fallback": "^2.0.0", - "postcss-custom-media": "^5.0.0", - "postcss-custom-properties": "^5.0.0", - "postcss-custom-selectors": "^3.0.0", - "postcss-font-family-system-ui": "^1.0.1", - "postcss-font-variant": "^2.0.0", - "postcss-image-set-polyfill": "^0.3.3", - "postcss-initial": "^1.3.1", - "postcss-media-minmax": "^2.1.0", - "postcss-nesting": "^2.0.5", - "postcss-pseudo-class-any-link": "^1.0.0", - "postcss-pseudoelements": "^3.0.0", - "postcss-replace-overflow-wrap": "^1.0.0", - "postcss-selector-matches": "^2.0.0", - "postcss-selector-not": "^2.0.0" - } - }, - "postcss-custom-media": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-5.0.1.tgz", - "integrity": "sha1-E40loYS/LrVN4S1VpsAcMKnYvYE=", - "dev": true, - "requires": { - "postcss": "^5.0.0" - } - }, - "postcss-custom-properties": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-5.0.2.tgz", - "integrity": "sha1-lxnXjy2pz59TgQrrwj1GVhMKzrE=", - "dev": true, - "requires": { - "balanced-match": "^0.4.2", - "postcss": "^5.0.0" - } - }, - "postcss-custom-selectors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-3.0.0.tgz", - "integrity": "sha1-j4Ekn17Qeo0JF89qOf5bBWt/lqw=", - "dev": true, - "requires": { - "balanced-match": "^0.2.0", - "postcss": "^5.0.0", - "postcss-selector-matches": "^2.0.0" - }, - "dependencies": { - "balanced-match": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.1.tgz", - "integrity": "sha1-e8ZYtL7WHu5CStdPdfXD4sTfPMc=", - "dev": true - } - } - }, - "postcss-font-family-system-ui": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/postcss-font-family-system-ui/-/postcss-font-family-system-ui-1.0.2.tgz", - "integrity": "sha1-PhpeP7fjHl6ecUOcyw6AFFVpJ8c=", - "dev": true, - "requires": { - "lodash": "^4.17.4", - "postcss": "^5.2.12", - "postcss-value-parser": "^3.3.0" - } - }, - "postcss-font-variant": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-2.0.1.tgz", - "integrity": "sha1-fKKRA/WfoCyjrOLKIrL3VoU9Tvg=", - "dev": true, - "requires": { - "postcss": "^5.0.4" - } - }, - "postcss-import": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-9.1.0.tgz", - "integrity": "sha1-lf6YdqHnmvSfvcNYnwH+WqfMHoA=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3", - "promise-each": "^2.2.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-initial": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-1.5.3.tgz", - "integrity": "sha1-IMPpHJaCLdsb7UlQjbltVrrDd9A=", - "dev": true, - "requires": { - "lodash.template": "^4.2.4", - "postcss": "^5.0.19" - } - }, - "postcss-media-minmax": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-2.1.2.tgz", - "integrity": "sha1-RExc+JJqteT9iiUJ6Sl+dRZJzfg=", - "dev": true, - "requires": { - "postcss": "^5.0.4" - } - }, - "postcss-nesting": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-2.3.1.tgz", - "integrity": "sha1-lKa2pO9wf77CCof+5clXdZtOAc8=", - "dev": true, - "requires": { - "postcss": "^5.0.19" - } - }, - "postcss-pseudo-class-any-link": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-1.0.0.tgz", - "integrity": "sha1-kDI5GWQB0zX+c6x1YYb6YuaTryY=", - "dev": true, - "requires": { - "postcss": "^5.0.3", - "postcss-selector-parser": "^1.1.4" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-1.3.3.tgz", - "integrity": "sha1-0u4Z33pk+O8hwacchvfUg1yIwoE=", - "dev": true, - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-pseudoelements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-3.0.0.tgz", - "integrity": "sha1-bGghd8eQC6BTtt8X+MWQKEx7i7w=", - "dev": true, - "requires": { - "postcss": "^5.0.4" - } - }, - "postcss-replace-overflow-wrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-1.0.0.tgz", - "integrity": "sha1-8KA7Meq5Y2ppNr/SEOKu8bQ0pkM=", - "dev": true, - "requires": { - "postcss": "^5.0.16" - } - }, - "postcss-selector-matches": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-2.0.5.tgz", - "integrity": "sha1-+g9Dvle2jneqTNEYBwI0kqExAn8=", - "dev": true, - "requires": { - "balanced-match": "^0.4.2", - "postcss": "^5.0.0" - } - }, - "postcss-selector-not": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-2.0.0.tgz", - "integrity": "sha1-xzrSGj91I0vuf+4mnhVP1qhpeY0=", - "dev": true, - "requires": { - "balanced-match": "^0.2.0", - "postcss": "^5.0.0" - }, - "dependencies": { - "balanced-match": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.1.tgz", - "integrity": "sha1-e8ZYtL7WHu5CStdPdfXD4sTfPMc=", - "dev": true - } - } - }, - "rgb-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-1.0.0.tgz", - "integrity": "sha1-v6+M2c2RZLWibXHrTxWgllMks8E=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "grunt-known-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", - "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", - "dev": true - }, - "grunt-legacy-log": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.2.tgz", - "integrity": "sha512-WdedTJ/6zCXnI/coaouzqvkI19uwqbcPkdsXiDRKJyB5rOUlOxnCnTVbpeUdEckKVir2uHF3rDBYppj2p6N3+g==", - "dev": true, - "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~1.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.5" - } - }, - "grunt-legacy-log-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", - "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", - "dev": true, - "requires": { - "chalk": "~1.1.1", - "lodash": "~4.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "grunt-legacy-util": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", - "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", - "dev": true, - "requires": { - "async": "~1.5.2", - "exit": "~0.1.1", - "getobject": "~0.1.0", - "hooker": "~0.2.3", - "lodash": "~4.3.0", - "underscore.string": "~3.2.3", - "which": "~1.2.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true - }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "grunt-postcss": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/grunt-postcss/-/grunt-postcss-0.8.0.tgz", - "integrity": "sha1-jzCor2B5A84MRfAfC+QsYOMc6w4=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "diff": "^2.0.2", - "postcss": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "grunt-text-replace": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/grunt-text-replace/-/grunt-text-replace-0.4.0.tgz", - "integrity": "sha1-252c5Z4v5J2id+nbwZXD4Rz7FsI=", - "dev": true - }, - "grunt-ts": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/grunt-ts/-/grunt-ts-5.5.1.tgz", - "integrity": "sha1-lXIBxrQhx3cilATwcILY5pnRIZk=", - "dev": true, - "requires": { - "chokidar": "~1.0.0", - "csproj2ts": "0.0.7", - "es6-promise": "~0.1.1", - "lodash": "2.4.1", - "ncp": "0.5.1", - "rimraf": "2.2.6", - "semver": "^5.1.0", - "strip-bom": "^2.0.0", - "typescript": "1.8.9", - "underscore": "1.5.1", - "underscore.string": "2.3.3" - }, - "dependencies": { - "async-each": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-0.1.6.tgz", - "integrity": "sha1-tn6Z7c3fllQeRK9WKQzX1cbnBDk=", - "dev": true - }, - "chokidar": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.0.6.tgz", - "integrity": "sha1-ChwLzh4kmTr8EFpbgeom3aAeI68=", - "dev": true, - "requires": { - "anymatch": "^1.1.0", - "arrify": "^1.0.0", - "async-each": "^0.1.5", - "fsevents": "^0.3.8", - "glob-parent": "^1.0.0", - "is-binary-path": "^1.0.0", - "is-glob": "^1.1.3", - "path-is-absolute": "^1.0.0", - "readdirp": "^1.3.0" - } - }, - "fsevents": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-0.3.8.tgz", - "integrity": "sha1-mZLxAyySXIKVVNDVmAHcoDE6U1Y=", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.0.2" - } - }, - "glob-parent": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-1.3.0.tgz", - "integrity": "sha1-lx7dgW7V21hwW1gHlkemTQrveWg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "is-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-1.1.3.tgz", - "integrity": "sha1-tMZLgwPTkRRJKkYNNkzPsNPAoEU=", - "dev": true - }, - "lodash": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", - "integrity": "sha1-W3cjA03aTSYuWkb7LFjXzCL3FCA=", - "dev": true - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - }, - "readdirp": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-1.4.0.tgz", - "integrity": "sha1-xd5vyz3sgFI8HHARPxoZDYr4LIk=", - "dev": true, - "requires": { - "graceful-fs": "~4.1.2", - "minimatch": "~0.2.12", - "readable-stream": "~1.0.26-2" - } - }, - "rimraf": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz", - "integrity": "sha1-xZWXVpsU2VatKcrMQr3d9fDqT0w=", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "typescript": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-1.8.9.tgz", - "integrity": "sha1-s7OnQFn9McvT7K2V1iRlk55+1fo=", - "dev": true - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true - } - } - }, - "grunt-tslint": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/grunt-tslint/-/grunt-tslint-5.0.1.tgz", - "integrity": "sha1-dDK9G9VuijolAACI1cYf3MNC8MI=", - "dev": true - }, - "grunt-typings": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/grunt-typings/-/grunt-typings-0.1.5.tgz", - "integrity": "sha1-GluJR6DWBCIxs6oTjACnOjlhW9w=", - "dev": true, - "requires": { - "typings-core": "^1.0.1" - }, - "dependencies": { - "configstore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", - "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", - "dev": true, - "requires": { - "dot-prop": "^3.0.0", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.1", - "os-tmpdir": "^1.0.0", - "osenv": "^0.1.0", - "uuid": "^2.0.1", - "write-file-atomic": "^1.1.2", - "xdg-basedir": "^2.0.0" - } - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "dot-prop": { + "pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "popsicle": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-8.2.0.tgz", - "integrity": "sha1-/0QBAFyrQ6lBipFBBhHAAZdxLSE=", - "dev": true, - "requires": { - "any-promise": "^1.3.0", - "arrify": "^1.0.0", - "concat-stream": "^1.4.7", - "form-data": "^2.0.0", - "make-error-cause": "^1.2.1", - "throwback": "^1.1.0", - "tough-cookie": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "promise-finally": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/promise-finally/-/promise-finally-2.2.1.tgz", - "integrity": "sha1-ImFsS6kCkW6Yi9RsVNfKoIkQzXc=", - "dev": true, - "requires": { - "any-promise": "^1.3.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "typings-core": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/typings-core/-/typings-core-1.6.1.tgz", - "integrity": "sha1-zkspMeovGbuPPay+xpmDrE6WSjc=", - "dev": true, - "requires": { - "any-promise": "^1.3.0", - "array-uniq": "^1.0.2", - "configstore": "^2.0.0", - "debug": "^2.2.0", - "detect-indent": "^4.0.0", - "graceful-fs": "^4.1.2", - "has": "^1.0.1", - "invariant": "^2.2.0", - "is-absolute": "^0.2.3", - "listify": "^1.0.0", - "lockfile": "^1.0.1", - "make-error-cause": "^1.2.1", - "mkdirp": "^0.5.1", - "object.pick": "^1.1.1", - "parse-json": "^2.2.0", - "popsicle": "^8.0.2", - "popsicle-proxy-agent": "^3.0.0", - "popsicle-retry": "^3.2.0", - "popsicle-rewrite": "^1.0.0", - "popsicle-status": "^2.0.0", - "promise-finally": "^2.0.1", - "rc": "^1.1.5", - "rimraf": "^2.4.4", - "sort-keys": "^1.0.0", - "string-template": "^1.0.0", - "strip-bom": "^2.0.0", - "thenify": "^3.1.0", - "throat": "^3.0.0", - "touch": "^1.0.0", - "typescript": "^2.0.3", - "xtend": "^4.0.0", - "zip-object": "^0.1.0" - } - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, - "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" } } }, - "gzip-size": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz", - "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", - "requires": { - "duplexer": "^0.1.1", - "pify": "^3.0.0" - } - }, "handlebars": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", @@ -5917,6 +5144,13 @@ } } }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", @@ -5932,6 +5166,20 @@ } } }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -5946,19 +5194,12 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - } } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { "version": "1.0.0", @@ -6038,16 +5279,14 @@ } }, "hawk": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz", - "integrity": "sha1-h81JH5tG5OKurKM1QWdmiF0tHtk=", - "dev": true, - "optional": true, + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "requires": { - "boom": "0.4.x", - "cryptiles": "0.2.x", - "hoek": "0.9.x", - "sntp": "0.2.x" + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" } }, "he": { @@ -6055,12 +5294,6 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" }, - "highlight.js": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", - "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", - "dev": true - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -6072,10 +5305,9 @@ } }, "hoek": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", - "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=", - "dev": true + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" }, "homedir-polyfill": { "version": "1.0.1", @@ -6086,12 +5318,6 @@ "parse-passwd": "^1.0.0" } }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -6102,6 +5328,14 @@ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=" }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, "html-entities": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", @@ -6121,6 +5355,31 @@ "uglify-js": "3.4.x" } }, + "html-webpack-include-assets-plugin": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-webpack-include-assets-plugin/-/html-webpack-include-assets-plugin-1.0.2.tgz", + "integrity": "sha512-e9ck8RWk+z6aV2XThCCpV/Cn8wK0SWoi8K7b1ZnOP9BSckh3z9/NFoWFc453aywCsyq8RQGhAPx/BOHpaACqkA==", + "requires": { + "glob": "^7.1.2", + "minimatch": "^3.0.4", + "slash": "^1.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "html-webpack-plugin": { "version": "2.30.1", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", @@ -6134,6 +5393,11 @@ "toposort": "^1.0.0" }, "dependencies": { + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, "loader-utils": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", @@ -6165,6 +5429,27 @@ "requires": { "domelementtype": "1" } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } }, @@ -6186,33 +5471,14 @@ } } }, - "http-parser-js": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", - "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", - "dev": true - }, - "http-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz", - "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", - "dev": true, - "requires": { - "agent-base": "2", - "debug": "2", - "extend": "3" - } - }, "http-signature": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", - "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", - "dev": true, - "optional": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "asn1": "0.1.11", - "assert-plus": "^0.1.5", - "ctype": "0.5.3" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-browserify": { @@ -6220,17 +5486,6 @@ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, - "https-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", - "dev": true, - "requires": { - "agent-base": "2", - "debug": "2", - "extend": "3" - } - }, "husky": { "version": "0.14.3", "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", @@ -6272,46 +5527,6 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "requires": { "postcss": "^6.0.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "ieee754": { @@ -6329,6 +5544,15 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -6348,6 +5572,13 @@ "requires": { "loader-utils": "^1.0.2", "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, "imurmurhash": { @@ -6359,7 +5590,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, "requires": { "repeating": "^2.0.0" } @@ -6391,8 +5621,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { "version": "4.0.2", @@ -6414,6 +5643,24 @@ "string-width": "^2.1.0", "strip-ansi": "^4.0.0", "through": "^2.3.6" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + } } }, "intern": { @@ -6484,6 +5731,12 @@ "@types/serve-static": "*" } }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, "express": { "version": "4.16.3", "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", @@ -6553,6 +5806,26 @@ } } }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, "resolve": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", @@ -6562,6 +5835,12 @@ "path-parse": "^1.0.5" } }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -6603,17 +5882,26 @@ "send": "0.16.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "ws": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.1.1.tgz", + "integrity": "sha512-bOusvpCb09TOBLbpMKszd45WKC2KPtxiyiHanv+H2DE3Az+1db5a/L7sVJZVDPUC1Br8f0SKRr1KjLpD1U/IAw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } } } }, @@ -6625,8 +5913,7 @@ "intersection-observer": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.4.2.tgz", - "integrity": "sha512-SFGCL4d6A7J+aXNHTx94zV7ydngTKraDBvoJjn5iGgsXYhXgAXIYj8i3ewJoO80BRB7qtBB3sBlrdGNwTktzLg==", - "dev": true + "integrity": "sha512-SFGCL4d6A7J+aXNHTx94zV7ydngTKraDBvoJjn5iGgsXYhXgAXIYj8i3ewJoO80BRB7qtBB3sBlrdGNwTktzLg==" }, "invariant": { "version": "2.2.4", @@ -6647,24 +5934,6 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" }, - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true, - "requires": { - "is-relative": "^0.2.1", - "is-windows": "^0.2.0" - }, - "dependencies": { - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - } - } - }, "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", @@ -6679,9 +5948,9 @@ } }, "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-binary-path": { "version": "1.0.1", @@ -6704,6 +5973,12 @@ "builtin-modules": "^1.0.0" } }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, "is-ci": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", @@ -6721,6 +5996,12 @@ "kind-of": "^3.0.2" } }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -6762,30 +6043,32 @@ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "^2.1.0" } }, "is-installed-globally": { @@ -6807,8 +6090,7 @@ "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" }, "is-number": { "version": "2.1.0", @@ -6821,8 +6103,7 @@ "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, "is-observable": { "version": "0.2.0", @@ -6831,6 +6112,14 @@ "dev": true, "requires": { "symbol-observable": "^0.2.2" + }, + "dependencies": { + "symbol-observable": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", + "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "dev": true + } } }, "is-path-inside": { @@ -6881,8 +6170,16 @@ "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } }, "is-regexp": { "version": "1.0.0", @@ -6890,20 +6187,10 @@ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true, - "requires": { - "is-unc-path": "^0.1.1" - } - }, "is-retry-allowed": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" }, "is-stream": { "version": "1.1.0", @@ -6918,146 +6205,75 @@ "html-comment-regex": "^1.1.0" } }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, "is-there": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/is-there/-/is-there-4.4.3.tgz", "integrity": "sha1-osSTZsakh/cZ28rYDL3iEkjSwY0=" }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.0" - } + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isnumeric": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/isnumeric/-/isnumeric-0.2.0.tgz", - "integrity": "sha1-ojR7o2DeGeM9D/1ZD933dVy/LmQ=" - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } - } - }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isemail": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.1.3.tgz", + "integrity": "sha512-5xbsG5wYADIcB+mfLsd+nst1V/D+I7EU7LEZPo2GOIMu4JzfcRs5yQoypP4avA7QtUqgxYLKBYNv4IdzBmbhdw==", + "requires": { + "punycode": "2.x.x" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" } } }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isnumeric": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/isnumeric/-/isnumeric-0.2.0.tgz", + "integrity": "sha1-ojR7o2DeGeM9D/1ZD933dVy/LmQ=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, "istanbul-lib-coverage": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", @@ -7106,6 +6322,15 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -7138,6 +6363,21 @@ "requires": { "ms": "2.0.0" } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -7150,12 +6390,6 @@ "handlebars": "^4.0.3" } }, - "jest-docblock": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", - "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", - "dev": true - }, "jest-get-type": { "version": "21.2.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-21.2.0.tgz", @@ -7174,6 +6408,16 @@ "pretty-format": "^21.2.1" } }, + "joi": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-11.4.0.tgz", + "integrity": "sha512-O7Uw+w/zEWgbL6OcHbyACKSj0PkQeUgmehdoXVSxt92QFCq4+1390Rwh5moI2K/OgC7D8RHRZqHZxT2husMJHA==", + "requires": { + "hoek": "4.x.x", + "isemail": "3.x.x", + "topo": "2.x.x" + } + }, "js-base64": { "version": "2.4.8", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz", @@ -7191,6 +6435,52 @@ "requires": { "argparse": "^1.0.7", "esprima": "^2.6.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + } + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsdom": { + "version": "11.6.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.6.2.tgz", + "integrity": "sha512-pAeZhpbSlUp5yQcS6cBQJwkbzmv4tWFaYxHbFVSxzXefqjvtRA851Z5N2P+TguVG9YeUDcgb8pdeVQRJh0XR3Q==", + "requires": { + "abab": "^1.0.4", + "acorn": "^5.3.0", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "browser-process-hrtime": "^0.1.2", + "content-type-parser": "^1.0.2", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.2.37 < 0.3.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.2.0", + "nwmatcher": "^1.4.3", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-url": "^6.4.0", + "ws": "^4.0.0", + "xml-name-validator": "^3.0.0" } }, "jsesc": { @@ -7208,16 +6498,34 @@ "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { "version": "0.5.1", @@ -7235,24 +6543,17 @@ "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, - "jspm-config": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/jspm-config/-/jspm-config-0.3.4.tgz", - "integrity": "sha1-RMJpAuSujs4jZs7cn/FrEKXzkcY=", - "dev": true, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "requires": { - "any-promise": "^1.3.0", - "graceful-fs": "^4.1.4", - "make-error-cause": "^1.2.1", - "object.pick": "^1.1.2", - "parse-json": "^2.2.0", - "strip-bom": "^3.0.0", - "thenify": "^3.2.0", - "throat": "^3.0.0", - "xtend": "^4.0.1" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" } }, "jszip": { @@ -7274,18 +6575,6 @@ "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", "dev": true }, - "es6-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", @@ -7305,6 +6594,12 @@ "string_decoder": "~0.10.x", "util-deprecate": "~1.0.1" } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true } } }, @@ -7322,6 +6617,14 @@ "is-buffer": "^1.1.5" } }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "^4.1.9" + } + }, "last-call-webpack-plugin": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-2.1.2.tgz", @@ -7332,12 +6635,11 @@ } }, "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", + "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", "requires": { - "package-json": "^4.0.0" + "package-json": "^2.0.0" } }, "lazy-cache": { @@ -7353,6 +6655,11 @@ "invert-kv": "^1.0.0" } }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" + }, "leven": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", @@ -7363,7 +6670,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -7433,12 +6739,6 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", @@ -7467,6 +6767,12 @@ "error-ex": "^1.3.1" } }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -7475,12 +6781,6 @@ } } }, - "listify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/listify/-/listify-1.0.0.tgz", - "integrity": "sha1-A8p7otFQ1CZ3c/dOV1WNEFPSvuM=", - "dev": true - }, "listr": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", @@ -7512,18 +6812,6 @@ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -7617,12 +6905,6 @@ "requires": { "ansi-regex": "^2.0.0" } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true } } }, @@ -7654,18 +6936,6 @@ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -7747,12 +7017,6 @@ "requires": { "ansi-regex": "^2.0.0" } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true } } }, @@ -7768,18 +7032,6 @@ "figures": "^1.7.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -7836,37 +7088,19 @@ "requires": { "ansi-regex": "^2.0.0" } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true } } }, - "livereload-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz", - "integrity": "sha512-j1R0/FeGa64Y+NmqfZhyoVRzcFlOZ8sNlKzHjh4VvLULFACZhn68XrX5DFg2FhMvSMJmROuFxRSa560ECWKBMg==", - "dev": true - }, "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "loader-runner": { @@ -7891,15 +7125,13 @@ "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" - } - }, - "lockfile": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", - "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", - "dev": true, - "requires": { - "signal-exit": "^3.0.2" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } } }, "lodash": { @@ -7933,6 +7165,11 @@ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, "lodash.template": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", @@ -7971,6 +7208,31 @@ "ansi-escapes": "^3.0.0", "cli-cursor": "^2.0.0", "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } } }, "loglevelnext": { @@ -8019,8 +7281,7 @@ "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "lru-cache": { "version": "4.1.3", @@ -8037,21 +7298,13 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "requires": { "pify": "^3.0.0" - } - }, - "make-error": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", - "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", - "dev": true - }, - "make-error-cause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", - "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", - "dev": true, - "requires": { - "make-error": "^1.2.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } } }, "map-cache": { @@ -8062,7 +7315,12 @@ "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, "map-visit": { @@ -8073,12 +7331,6 @@ "object-visit": "^1.0.0" } }, - "marked": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", - "dev": true - }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", @@ -8118,139 +7370,35 @@ "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" } } }, @@ -8282,6 +7430,21 @@ "object.omit": "^2.0.0", "parse-glob": "^3.0.4", "regex-cache": "^0.4.2" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "miller-rabin": { @@ -8299,16 +7462,16 @@ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "requires": { - "mime-db": "~1.33.0" + "mime-db": "~1.35.0" } }, "mimic-fn": { @@ -8376,13 +7539,22 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", "requires": { "minimist": "0.0.8" } }, + "mock-require": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mock-require/-/mock-require-2.0.2.tgz", + "integrity": "sha1-HqpxqtIwE3c9En3H6Ro/u0g31g0=", + "dev": true, + "requires": { + "caller-id": "^0.1.0" + } + }, "mockery": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", @@ -8400,6 +7572,16 @@ "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.3" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + } } }, "ms": { @@ -8454,12 +7636,6 @@ } } }, - "ncp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.5.1.tgz", - "integrity": "sha1-dDmFMW49tFkoG1hxaehFc1oFQ58=", - "dev": true - }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -8475,6 +7651,12 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, + "nice-try": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "dev": true + }, "nise": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.2.tgz", @@ -8488,6 +7670,12 @@ "text-encoding": "^0.6.4" }, "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, "path-to-regexp": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", @@ -8507,6 +7695,14 @@ "lower-case": "^1.1.1" } }, + "node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", + "requires": { + "minimatch": "^3.0.2" + } + }, "node-libs-browser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", @@ -8535,42 +7731,17 @@ "url": "^0.11.0", "util": "^0.10.3", "vm-browserify": "0.0.4" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, + "node-status-codes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=" + }, "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "requires": { "abbrev": "1" } @@ -8619,6 +7790,101 @@ "which": "^1.2.10" } }, + "npm-run-all": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.3.tgz", + "integrity": "sha512-aOG0N3Eo/WW+q6sUIdzcV2COS8VnTZCmdji0VQIAZF3b+a3YWb0AD0vFIyjKec18A7beLGbaQ5jFTNI2bPt9Cg==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.4", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "ps-tree": "^1.1.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -8656,12 +7922,15 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, + "nwmatcher": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==" + }, "oauth-sign": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz", - "integrity": "sha1-8ilW8x6nFRqCHl8vsywRPK2Ln2k=", - "dev": true, - "optional": true + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "object-assign": { "version": "4.1.1", @@ -8785,6 +8054,14 @@ "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } } }, "optimize-css-assets-webpack-plugin": { @@ -8800,7 +8077,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -8808,14 +8084,6 @@ "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "wordwrap": "~1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } } }, "ora": { @@ -8829,16 +8097,6 @@ "log-symbols": "^1.0.2" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -8866,11 +8124,6 @@ "requires": { "ansi-regex": "^2.0.0" } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, @@ -8913,14 +8166,12 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -8959,12 +8210,11 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", + "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", "requires": { - "got": "^6.7.1", + "got": "^5.0.0", "registry-auth-token": "^3.0.1", "registry-url": "^3.0.3", "semver": "^5.1.0" @@ -8983,35 +8233,6 @@ "cyclist": "~0.2.2", "inherits": "^2.0.3", "readable-stream": "^2.1.5" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "param-case": { @@ -9035,26 +8256,14 @@ } }, "parse-git-config": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-0.4.3.tgz", - "integrity": "sha1-Z9YiSN1aJOYFP4R1EF8fuelLuwA=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-2.0.2.tgz", + "integrity": "sha512-ObBoF8oac1DKo78J6R+O9KwhMNL0yCmizi4/WKyB6rQXNHe4SmLMhnLrpPogWT2BbJUx1LcIzec/ftAiveSVhQ==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "fs-exists-sync": "^0.1.0", - "git-config-path": "^1.0.0", - "ini": "^1.3.4" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "expand-tilde": "^2.0.2", + "git-config-path": "^1.0.1", + "ini": "^1.3.5" } }, "parse-glob": { @@ -9066,6 +8275,21 @@ "is-dotfile": "^1.0.0", "is-extglob": "^1.0.0", "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "parse-json": { @@ -9082,6 +8306,11 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" + }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -9103,9 +8332,12 @@ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } }, "path-is-absolute": { "version": "1.0.1", @@ -9134,11 +8366,13 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "requires": { - "pify": "^3.0.0" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pathval": { @@ -9147,6 +8381,15 @@ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", "dev": true }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "~2.3" + } + }, "pbkdf2": { "version": "3.0.16", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", @@ -9168,25 +8411,27 @@ "pepjs": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/pepjs/-/pepjs-0.4.2.tgz", - "integrity": "sha1-EyZO6olJhP9CPIPkDS+k4d7Byfo=", - "dev": true + "integrity": "sha1-EyZO6olJhP9CPIPkDS+k4d7Byfo=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, "requires": { "pinkie": "^2.0.0" } @@ -9209,44 +8454,6 @@ "caniuse-lite": "^1.0.30000792", "electron-to-chromium": "^1.3.30" } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -9256,6 +8463,16 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "requires": { "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + } } }, "platform": { @@ -9271,137 +8488,12 @@ "requires": { "onecolor": "^3.0.4", "postcss": "^6.0.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dev": true, - "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - }, - "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - } - }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "dev": true - }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", - "dev": true, - "requires": { - "kind-of": "^1.1.0" - } - }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true - } - } - }, - "popsicle": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-9.2.0.tgz", - "integrity": "sha512-petRj39w05GvH1WKuGFmzxR9+k+R9E7zX5XWTFee7P/qf88hMuLT7aAO/RsmldpQMtJsWQISkTQlfMRECKlxhw==", - "dev": true, - "requires": { - "concat-stream": "^1.4.7", - "form-data": "^2.0.0", - "make-error-cause": "^1.2.1", - "tough-cookie": "^2.0.0" - } - }, - "popsicle-proxy-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/popsicle-proxy-agent/-/popsicle-proxy-agent-3.0.0.tgz", - "integrity": "sha1-uRM8VdlFdZq37mG3cRNkYg066tw=", - "dev": true, - "requires": { - "http-proxy-agent": "^1.0.0", - "https-proxy-agent": "^1.0.0" - } - }, - "popsicle-retry": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/popsicle-retry/-/popsicle-retry-3.2.1.tgz", - "integrity": "sha1-4G6GZTO0KnoSPrMwy+Y6fOvLoQw=", - "dev": true, - "requires": { - "any-promise": "^1.1.0", - "xtend": "^4.0.1" } }, - "popsicle-rewrite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/popsicle-rewrite/-/popsicle-rewrite-1.0.0.tgz", - "integrity": "sha1-HdTo6pwxgjUfuCD4eTTZkvf7kAc=", - "dev": true - }, - "popsicle-status": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/popsicle-status/-/popsicle-status-2.0.1.tgz", - "integrity": "sha1-jdcMT+fGlBCa3XhP/oDqysHnso0=", - "dev": true + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" }, "posix-character-classes": { "version": "0.1.1", @@ -9409,26 +8501,15 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", "requires": { "chalk": "^1.1.3", - "js-base64": "^2.1.9", "source-map": "^0.5.6", "supports-color": "^3.2.3" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -9453,6 +8534,11 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -9485,44 +8571,6 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -9533,46 +8581,6 @@ "requires": { "postcss": "^6.0.0", "postcss-selector-parser": "^2.2.3" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-calc": { @@ -9583,59 +8591,77 @@ "postcss": "^5.0.2", "postcss-message-helpers": "^2.0.0", "reduce-css-calc": "^1.2.6" - } - }, - "postcss-color-function": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-function/-/postcss-color-function-4.0.1.tgz", - "integrity": "sha1-QCs/LOvD9pR+YY+2vjZU++zvZEQ=", - "requires": { - "css-color-function": "~1.3.3", - "postcss": "^6.0.1", - "postcss-message-helpers": "^2.0.0", - "postcss-value-parser": "^3.3.0" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, + "postcss-color-function": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-function/-/postcss-color-function-4.0.1.tgz", + "integrity": "sha1-QCs/LOvD9pR+YY+2vjZU++zvZEQ=", + "requires": { + "css-color-function": "~1.3.3", + "postcss": "^6.0.1", + "postcss-message-helpers": "^2.0.0", + "postcss-value-parser": "^3.3.0" + } + }, "postcss-color-gray": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-4.1.0.tgz", @@ -9647,16 +8673,6 @@ "reduce-function-call": "^1.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "color": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz", @@ -9675,11 +8691,6 @@ "simple-swizzle": "^0.2.2" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "postcss": { "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", @@ -9690,11 +8701,6 @@ "supports-color": "^5.4.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -9715,16 +8721,6 @@ "postcss-message-helpers": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", @@ -9742,34 +8738,6 @@ "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -9781,46 +8749,6 @@ "postcss": "^6.0.1", "postcss-value-parser": "^3.3.0", "units-css": "^0.4.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-color-hwb": { @@ -9834,16 +8762,6 @@ "reduce-function-call": "^1.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", @@ -9861,34 +8779,6 @@ "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -9901,21 +8791,6 @@ "postcss-values-parser": "^1.5.0" }, "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "postcss": { "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", @@ -9926,11 +8801,6 @@ "supports-color": "^5.4.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -9948,23 +8818,18 @@ "requires": { "postcss": "^6.0.1", "postcss-value-parser": "^3.3.0" + } + }, + "postcss-color-rgba-fallback": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz", + "integrity": "sha1-N9XJNToHoJJwkSqCYGu0Kg1wLAQ=", + "requires": { + "postcss": "^6.0.6", + "postcss-value-parser": "^3.3.0", + "rgb-hex": "^2.1.0" }, "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "postcss": { "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", @@ -9975,11 +8840,6 @@ "supports-color": "^5.4.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -9990,66 +8850,74 @@ } } }, - "postcss-color-rgba-fallback": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz", - "integrity": "sha1-N9XJNToHoJJwkSqCYGu0Kg1wLAQ=", + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "requires": { - "postcss": "^6.0.6", - "postcss-value-parser": "^3.3.0", - "rgb-hex": "^2.1.0" + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, - "postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "requires": { - "colormin": "^1.0.5", - "postcss": "^5.0.13", - "postcss-value-parser": "^3.2.3" - } - }, "postcss-convert-values": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", @@ -10057,6 +8925,64 @@ "requires": { "postcss": "^5.0.11", "postcss-value-parser": "^3.1.2" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "postcss-cssnext": { @@ -10128,12 +9054,7 @@ "caniuse-lite": "^1.0.0", "lodash.memoize": "^4.1.2", "lodash.uniq": "^4.5.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + } }, "postcss": { "version": "6.0.23", @@ -10143,18 +9064,6 @@ "chalk": "^2.4.1", "source-map": "^0.6.1", "supports-color": "^5.4.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } } }, "postcss-calc": { @@ -10177,11 +9086,6 @@ "postcss-value-parser": "^3.3.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -10198,46 +9102,6 @@ "integrity": "sha1-vlMnhBEOyylQRPtTlaGABushpzc=", "requires": { "postcss": "^6.0.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-custom-properties": { @@ -10249,21 +9113,6 @@ "postcss": "^6.0.18" }, "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "postcss": { "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", @@ -10274,11 +9123,6 @@ "supports-color": "^5.4.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -10296,62 +9140,138 @@ "requires": { "postcss": "^6.0.1", "postcss-selector-matches": "^3.0.0" + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "requires": { + "postcss": "^5.0.14" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, - "postcss-discard-comments": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "requires": { - "postcss": "^5.0.14" - } - }, "postcss-discard-duplicates": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "requires": { "postcss": "^5.0.4" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "postcss-discard-empty": { @@ -10360,6 +9280,64 @@ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "requires": { "postcss": "^5.0.14" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "postcss-discard-overridden": { @@ -10368,6 +9346,64 @@ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "requires": { "postcss": "^5.0.16" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "postcss-discard-unused": { @@ -10377,112 +9413,148 @@ "requires": { "postcss": "^5.0.14", "uniqs": "^2.0.0" - } - }, - "postcss-filter-plugins": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", - "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", - "requires": { - "postcss": "^5.0.4" - } - }, - "postcss-font-family-system-ui": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-family-system-ui/-/postcss-font-family-system-ui-3.0.0.tgz", - "integrity": "sha512-58G/hTxMSSKlIRpcPUjlyo6hV2MEzvcVO2m4L/T7Bb2fJTG4DYYfQjQeRvuimKQh1V1sOzCIz99g+H2aFNtlQw==", - "requires": { - "postcss": "^6.0" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, - "postcss-font-variant": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-3.0.0.tgz", - "integrity": "sha1-CMzIj2BQuoLtjvLMdsDGprQfGD4=", + "postcss-filter-plugins": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", "requires": { - "postcss": "^6.0.1" + "postcss": "^5.0.4" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, + "postcss-font-family-system-ui": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-family-system-ui/-/postcss-font-family-system-ui-3.0.0.tgz", + "integrity": "sha512-58G/hTxMSSKlIRpcPUjlyo6hV2MEzvcVO2m4L/T7Bb2fJTG4DYYfQjQeRvuimKQh1V1sOzCIz99g+H2aFNtlQw==", + "requires": { + "postcss": "^6.0" + } + }, + "postcss-font-variant": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-3.0.0.tgz", + "integrity": "sha1-CMzIj2BQuoLtjvLMdsDGprQfGD4=", + "requires": { + "postcss": "^6.0.1" + } + }, "postcss-image-set-polyfill": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/postcss-image-set-polyfill/-/postcss-image-set-polyfill-0.3.5.tgz", @@ -10490,46 +9562,6 @@ "requires": { "postcss": "^6.0.1", "postcss-media-query-parser": "^0.2.3" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-import": { @@ -10541,46 +9573,6 @@ "postcss-value-parser": "^3.2.3", "read-cache": "^1.0.0", "resolve": "^1.1.7" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-initial": { @@ -10590,46 +9582,6 @@ "requires": { "lodash.template": "^4.2.4", "postcss": "^6.0.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-load-config": { @@ -10670,119 +9622,155 @@ "postcss": "^6.0.0", "postcss-load-config": "^1.2.0", "schema-utils": "^0.3.0" + } + }, + "postcss-media-minmax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-3.0.0.tgz", + "integrity": "sha1-Z1JWA3pD70C8Twdgv9BtTcadSNI=", + "requires": { + "postcss": "^6.0.1" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=" + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, - "postcss-media-minmax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-3.0.0.tgz", - "integrity": "sha1-Z1JWA3pD70C8Twdgv9BtTcadSNI=", + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "requires": { - "postcss": "^6.0.1" + "postcss": "^5.0.4" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=" - }, - "postcss-merge-idents": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "requires": { - "has": "^1.0.1", - "postcss": "^5.0.10", - "postcss-value-parser": "^3.1.1" - } - }, - "postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", - "requires": { - "postcss": "^5.0.4" - } - }, "postcss-merge-rules": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", @@ -10793,6 +9781,64 @@ "postcss": "^5.0.4", "postcss-selector-parser": "^2.2.2", "vendors": "^1.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "postcss-message-helpers": { @@ -10808,6 +9854,64 @@ "object-assign": "^4.0.1", "postcss": "^5.0.4", "postcss-value-parser": "^3.0.2" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "postcss-minify-gradients": { @@ -10817,6 +9921,64 @@ "requires": { "postcss": "^5.0.12", "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "postcss-minify-params": { @@ -10828,6 +9990,64 @@ "postcss": "^5.0.2", "postcss-value-parser": "^3.0.2", "uniqs": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "postcss-minify-selectors": { @@ -10839,68 +10059,74 @@ "has": "^1.0.1", "postcss": "^5.0.14", "postcss-selector-parser": "^2.0.0" - } - }, - "postcss-modules": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-0.6.4.tgz", - "integrity": "sha1-d6WLt3uhtDkrJwwLWYUv116JqLQ=", - "dev": true, - "requires": { - "css-modules-loader-core": "^1.0.1", - "generic-names": "^1.0.2", - "postcss": "^5.2.8", - "string-hash": "^1.1.1" - } - }, - "postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", - "requires": { - "postcss": "^6.0.1" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, + "postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "requires": { + "postcss": "^6.0.1" + } + }, "postcss-modules-local-by-default": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", @@ -10908,23 +10134,34 @@ "requires": { "css-selector-tokenizer": "^0.7.0", "postcss": "^6.0.1" + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + } + }, + "postcss-nesting": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-4.2.1.tgz", + "integrity": "sha512-IkyWXICwagCnlaviRexi7qOdwPw3+xVVjgFfGsxmztvRVaNxAlrypOIKqDE5mxY+BVxnId1rnUKBRQoNE2VDaA==", + "requires": { + "postcss": "^6.0.11" }, "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "postcss": { "version": "6.0.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", @@ -10935,11 +10172,6 @@ "supports-color": "^5.4.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -10950,352 +10182,434 @@ } } }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "postcss": "^5.0.5" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, - "postcss-nesting": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-4.2.1.tgz", - "integrity": "sha512-IkyWXICwagCnlaviRexi7qOdwPw3+xVVjgFfGsxmztvRVaNxAlrypOIKqDE5mxY+BVxnId1rnUKBRQoNE2VDaA==", + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "requires": { - "postcss": "^6.0.11" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, - "postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "postcss-pseudo-class-any-link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-4.0.0.tgz", + "integrity": "sha1-kVKgYT00UHIFE+iJKFS65C0O5o4=", "requires": { - "postcss": "^5.0.5" + "postcss": "^6.0.1", + "postcss-selector-parser": "^2.2.3" } }, - "postcss-normalize-url": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "postcss-pseudoelements": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz", + "integrity": "sha1-7vGU6NUkZFylIKlJ6V5RjoEkAss=", "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^1.4.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3" + "postcss": "^6.0.0" } }, - "postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "requires": { "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.1" - } - }, - "postcss-pseudo-class-any-link": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-4.0.0.tgz", - "integrity": "sha1-kVKgYT00UHIFE+iJKFS65C0O5o4=", - "requires": { - "postcss": "^6.0.1", - "postcss-selector-parser": "^2.2.3" + "postcss-value-parser": "^3.0.2" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, - "postcss-pseudoelements": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz", - "integrity": "sha1-7vGU6NUkZFylIKlJ6V5RjoEkAss=", + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "requires": { - "postcss": "^6.0.0" + "postcss": "^5.0.4" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, - "postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" - } - }, - "postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", - "requires": { - "postcss": "^5.0.4" - } - }, "postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", - "requires": { - "has": "^1.0.1", - "postcss": "^5.0.8", - "postcss-value-parser": "^3.0.1" - } - }, - "postcss-replace-overflow-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-2.0.0.tgz", - "integrity": "sha1-eU22+qVPjbEAhUOSqTr0V2i04ls=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "requires": { - "postcss": "^6.0.1" + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^1.0.0" } } } }, + "postcss-replace-overflow-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-2.0.0.tgz", + "integrity": "sha1-eU22+qVPjbEAhUOSqTr0V2i04ls=", + "requires": { + "postcss": "^6.0.1" + } + }, "postcss-selector-matches": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-3.0.1.tgz", @@ -11309,44 +10623,6 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -11363,44 +10639,6 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -11423,6 +10661,64 @@ "postcss": "^5.0.14", "postcss-value-parser": "^3.2.3", "svgo": "^0.7.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "postcss-unique-selectors": { @@ -11433,6 +10729,64 @@ "alphanum-sort": "^1.0.1", "postcss": "^5.0.4", "uniqs": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "postcss-value-parser": { @@ -11458,13 +10812,70 @@ "has": "^1.0.1", "postcss": "^5.0.4", "uniqs": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "^1.0.0" + } + } } }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prepend-http": { "version": "1.0.4", @@ -11482,6 +10893,11 @@ "integrity": "sha512-fHWjCwoRZgjP1rvLP7OGqOznq7xH1sHMQUFLX8qLRO79hI57+6xbc5vB904LxEkCfgFgyr3vv06JkafgCSzoZg==", "dev": true }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=" + }, "pretty-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", @@ -11499,6 +10915,23 @@ "requires": { "ansi-regex": "^3.0.0", "ansi-styles": "^3.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } } }, "private": { @@ -11519,31 +10952,7 @@ "progress": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, - "promise-each": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/promise-each/-/promise-each-2.2.0.tgz", - "integrity": "sha1-M1MXTv8mlEgQN+BOAfd6oPttG2A=", - "dev": true, - "requires": { - "any-promise": "^0.1.0" - }, - "dependencies": { - "any-promise": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-0.1.0.tgz", - "integrity": "sha1-gwtoCqflbzNFHUsEnzvYBESY7ic=", - "dev": true - } - } - }, - "promise-finally": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/promise-finally/-/promise-finally-3.0.0.tgz", - "integrity": "sha1-3dXQ+JVDKxIGzrjaEnUGTRjnqiM=", - "dev": true + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" }, "promise-inflight": { "version": "1.0.1", @@ -11564,17 +10973,20 @@ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, + "ps-tree": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "dev": true, + "requires": { + "event-stream": "~3.3.0" + } + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, - "psl": { - "version": "1.1.28", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.28.tgz", - "integrity": "sha512-+AqO1Ae+N/4r7Rvchrdm432afjT9hqJRyBN3DQv9At0tPz4hIFSGKbq64fN9dVoCow4oggIIax5/iONx0r9hZw==", - "dev": true - }, "public-encrypt": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", @@ -11612,14 +11024,14 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.0.1.tgz", + "integrity": "sha1-EYcq7t7okmgRCxCnGESP+xARKhQ=" }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "query-string": { "version": "4.3.4", @@ -11722,7 +11134,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -11733,69 +11144,58 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" } } }, + "read-all-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "requires": { + "pinkie-promise": "^2.0.0", + "readable-stream": "^2.0.0" + } + }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "requires": { "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } } }, "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "requires": { - "load-json-file": "^2.0.0", + "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "dependencies": { - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } + "path-type": "^1.0.0" } }, "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -11807,57 +11207,24 @@ "minimatch": "^3.0.2", "readable-stream": "^2.0.2", "set-immediate-shim": "^1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.7.tgz", + "integrity": "sha512-UgJBjELa0DaLUbblnIOPUj0UgdbetzYzrvWtHCXX8N5aCTHoMSx6ATkA2JH0hS7tP6dMJ5/CtVZEC4yW7V/8Dw==", "requires": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", + "ast-types": "0.9.12", + "core-js": "^2.4.1", + "esprima": "~4.0.0", "private": "~0.1.5", - "source-map": "~0.5.0" + "source-map": "~0.6.1" }, "dependencies": { - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=" - }, "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" } } }, @@ -11874,7 +11241,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, "requires": { "indent-string": "^2.1.0", "strip-indent": "^1.0.1" @@ -11953,7 +11319,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dev": true, "requires": { "rc": "^1.1.6", "safe-buffer": "^5.0.1" @@ -11963,7 +11328,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, "requires": { "rc": "^1.0.1" } @@ -11986,64 +11350,6 @@ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" }, - "remap-istanbul": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.11.1.tgz", - "integrity": "sha512-Itv3XvYjD6G+9xDzAeFohx4GUwbFjfqFt0UXlC826jHR18E49fEiEGqZUxUASwMq4z7wwUv2H9/XF2d6qj0iaQ==", - "dev": true, - "requires": { - "amdefine": "^1.0.0", - "istanbul": "0.4.5", - "minimatch": "^3.0.3", - "plugin-error": "^0.1.2", - "source-map": "^0.6.1", - "through2": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "through2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", - "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", - "dev": true, - "requires": { - "readable-stream": "~2.0.0", - "xtend": "~4.0.0" - } - } - } - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -12061,11 +11367,6 @@ "utila": "~0.3" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -12095,95 +11396,63 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, "requires": { "is-finite": "^1.0.0" } }, "request": { - "version": "2.42.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.42.0.tgz", - "integrity": "sha1-VyvQFIk4VkBArHqxSLlkI6BjMEo=", - "dev": true, - "requires": { - "aws-sign2": "~0.5.0", - "bl": "~0.9.0", - "caseless": "~0.6.0", - "forever-agent": "~0.5.0", - "form-data": "~0.1.0", - "hawk": "1.1.1", - "http-signature": "~0.10.0", - "json-stringify-safe": "~5.0.0", - "mime-types": "~1.0.1", - "node-uuid": "~1.4.0", - "oauth-sign": "~0.4.0", - "qs": "~1.2.0", - "stringstream": "~0.0.4", - "tough-cookie": ">=0.12.0", - "tunnel-agent": "~0.4.0" - }, - "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true, - "optional": true - }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "dev": true, - "optional": true, - "requires": { - "delayed-stream": "0.0.5" - } - }, - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", - "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", - "dev": true, - "optional": true - }, - "form-data": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", - "integrity": "sha1-kavXiKupcCsaq/qLwBAxoqyeOxI=", - "dev": true, - "optional": true, - "requires": { - "async": "~0.9.0", - "combined-stream": "~0.0.4", - "mime": "~1.2.11" - } - }, - "mime": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", - "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", - "dev": true, - "optional": true - }, - "mime-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz", - "integrity": "sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4=", - "dev": true - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true - }, - "qs": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz", - "integrity": "sha1-GbV/8k3CqZzh+L32r82ln472H4g=", - "dev": true - } + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "request-progress": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", + "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", + "requires": { + "throttleit": "~0.0.2" + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "requires": { + "lodash": "^4.13.1" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" } }, "require-directory": { @@ -12209,12 +11478,6 @@ "path-parse": "^1.0.5" } }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", - "dev": true - }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -12229,15 +11492,6 @@ "signal-exit": "^3.0.2" } }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "dev": true, - "requires": { - "through": "~2.3.4" - } - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -12267,6 +11521,21 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { "glob": "^7.0.5" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "ripemd160": { @@ -12317,26 +11586,12 @@ "dev": true, "requires": { "symbol-observable": "1.0.1" - }, - "dependencies": { - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - } } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "safe-json-parse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", - "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", - "dev": true + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -12346,6 +11601,11 @@ "ret": "~0.1.10" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "samsam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", @@ -12394,7 +11654,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, "requires": { "semver": "^5.0.3" } @@ -12514,6 +11773,22 @@ "glob": "^7.0.0", "interpret": "^1.0.0", "rechoir": "^0.6.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "shx": { @@ -12532,14 +11807,8 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true - } - } - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true + } + } }, "signal-exit": { "version": "3.0.2", @@ -12552,21 +11821,39 @@ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "requires": { "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } } }, "sinon": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.2.tgz", - "integrity": "sha512-5uLBZPdCWl59Lpbf45ygKj7Z0LVol+ftBe7RDIXOQV/sF58pcFmbK8raA7bt6eljNuGnvBP+/ZxlicVn0emDjA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.5.0.tgz", + "integrity": "sha512-trdx+mB0VBBgoYucy6a9L7/jfQOmvGeaKZT4OOJ+lPAtI8623xyGr8wLiE4eojzBS8G9yXbhx42GHUOVLr4X2w==", "dev": true, "requires": { + "@sinonjs/formatio": "^2.0.0", "diff": "^3.1.0", - "formatio": "1.2.0", "lodash.get": "^4.4.2", "lolex": "^2.2.0", "nise": "^1.2.0", - "supports-color": "^4.4.0", - "type-detect": "^4.0.0" + "supports-color": "^5.1.0", + "type-detect": "^4.0.5" + }, + "dependencies": { + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "slash": { @@ -12581,13 +11868,20 @@ "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } } }, "slide": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" }, "snapdragon": { "version": "0.8.2", @@ -12619,6 +11913,11 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, @@ -12687,13 +11986,11 @@ } }, "sntp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", - "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", - "dev": true, - "optional": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "requires": { - "hoek": "0.9.x" + "hoek": "4.x.x" } }, "sort-keys": { @@ -12710,9 +12007,9 @@ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-loader-cli": { "version": "0.0.1", @@ -12796,9 +12093,9 @@ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" }, "split": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", - "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true, "requires": { "through": "2" @@ -12817,6 +12114,22 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "ssri": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", @@ -12825,6 +12138,12 @@ "safe-buffer": "^5.1.1" } }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true + }, "staged-git-files": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-0.0.4.tgz", @@ -12855,6 +12174,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, "stream-browserify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", @@ -12862,35 +12186,6 @@ "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "stream-combiner": { @@ -12921,35 +12216,6 @@ "readable-stream": "^2.3.6", "to-arraybuffer": "^1.0.0", "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "stream-shift": { @@ -12971,31 +12237,44 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, - "string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", - "dev": true - }, - "string-template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", - "integrity": "sha1-np8iM9wA8hhxjsN5oopWc+zKi5Y=", - "dev": true - }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "string.prototype.padend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", + "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.4.3", + "function-bind": "^1.0.2" } }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } }, "stringify-object": { "version": "3.2.2", @@ -13011,9 +12290,7 @@ "stringstream": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true, - "optional": true + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==" }, "strip-ansi": { "version": "4.0.0", @@ -13021,12 +12298,22 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + } } }, "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } }, "strip-dirs": { "version": "2.1.0", @@ -13046,16 +12333,21 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, "requires": { "get-stdin": "^4.0.1" + }, + "dependencies": { + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + } } }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "style-loader": { "version": "0.19.0", @@ -13066,14 +12358,28 @@ "schema-utils": "^0.3.0" } }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, "requires": { - "has-flag": "^2.0.0" + "minimist": "^1.1.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, "svgo": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", @@ -13086,43 +12392,34 @@ "mkdirp": "~0.5.1", "sax": "~1.2.1", "whet.extend": "~0.9.9" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + } } }, "symbol-observable": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", - "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", "dev": true }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" + }, "tapable": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" }, - "tape": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-2.3.0.tgz", - "integrity": "sha1-Df7scJIn+8yRcKvn8EaWKycUMds=", - "dev": true, - "requires": { - "deep-equal": "~0.1.0", - "defined": "~0.0.0", - "inherits": "~2.0.1", - "jsonify": "~0.0.0", - "resumer": "~0.0.0", - "split": "~0.2.10", - "stream-combiner": "~0.0.2", - "through": "~2.3.4" - }, - "dependencies": { - "defined": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", - "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=", - "dev": true - } - } - }, "tar-stream": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", @@ -13136,48 +12433,6 @@ "readable-stream": "^2.3.0", "to-buffer": "^1.1.0", "xtend": "^4.0.0" - }, - "dependencies": { - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "term-size": { @@ -13212,20 +12467,10 @@ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", "dev": true }, - "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "throat": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", - "integrity": "sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==", - "dev": true + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=" }, "through": { "version": "2.3.8", @@ -13240,51 +12485,12 @@ "requires": { "readable-stream": "^2.1.5", "xtend": "~4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "throwback": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/throwback/-/throwback-1.1.1.tgz", - "integrity": "sha1-8AfnwXYEptFtegfEGqDo/txhhKQ=", - "dev": true, - "requires": { - "any-promise": "^1.3.0" } }, "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=" }, "timers-browserify": { "version": "2.0.10", @@ -13294,31 +12500,6 @@ "setimmediate": "^1.0.4" } }, - "tiny-lr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", - "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", - "dev": true, - "requires": { - "body": "^5.1.0", - "debug": "^3.1.0", - "faye-websocket": "~0.10.0", - "livereload-js": "^2.3.0", - "object-assign": "^4.1.0", - "qs": "^6.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -13383,35 +12564,46 @@ } } }, + "topo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", + "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", + "requires": { + "hoek": "4.x.x" + } + }, "toposort": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=" }, - "touch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", - "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", - "dev": true, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "nopt": "~1.0.10" + "punycode": "^1.4.1" } }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } } }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" }, "trim-right": { "version": "1.0.1", @@ -13431,26 +12623,51 @@ } }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", + "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=" }, "tslint": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.8.0.tgz", - "integrity": "sha1-H0mtWy53x2w69N3K5VKuTjYS6xM=", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", + "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", "requires": { "babel-code-frame": "^6.22.0", "builtin-modules": "^1.1.1", - "chalk": "^2.1.0", - "commander": "^2.9.0", + "chalk": "^2.3.0", + "commander": "^2.12.1", "diff": "^3.2.0", "glob": "^7.1.1", + "js-yaml": "^3.7.0", "minimatch": "^3.0.4", "resolve": "^1.3.2", "semver": "^5.3.0", - "tslib": "^1.7.1", - "tsutils": "^2.12.1" + "tslib": "^1.8.0", + "tsutils": "^2.27.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "tslint-language-service": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/tslint-language-service/-/tslint-language-service-0.9.9.tgz", + "integrity": "sha1-9UbcOEg5eeb7PPpZWErYUls61No=", + "dev": true, + "requires": { + "mock-require": "^2.0.2" } }, "tslint-loader": { @@ -13463,16 +12680,16 @@ "object-assign": "^4.1.1", "rimraf": "^2.4.4", "semver": "^5.3.0" - } - }, - "tslint-plugin-prettier": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tslint-plugin-prettier/-/tslint-plugin-prettier-1.3.0.tgz", - "integrity": "sha512-6UqeeV6EABp0RdQkW6eC1vwnAXcKMGJgPeJ5soXiKdSm2vv7c3dp+835CM8pjgx9l4uSa7tICm1Kli+SMsADDg==", - "dev": true, - "requires": { - "eslint-plugin-prettier": "^2.2.0", - "tslib": "^1.7.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + } } }, "tsutils": { @@ -13489,16 +12706,23 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" }, "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -13531,202 +12755,45 @@ "is-there": "^4.4.2", "mkdirp": "^0.5.1", "yargs": "^8.0.2" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typedoc": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.5.9.tgz", - "integrity": "sha1-40mCQ4tleokM/YXogliz2HWYJBA=", - "dev": true, - "requires": { - "@types/fs-extra": "0.0.33", - "@types/handlebars": "^4.0.31", - "@types/highlight.js": "^9.1.8", - "@types/lodash": "^4.14.37", - "@types/marked": "0.0.28", - "@types/minimatch": "^2.0.29", - "@types/shelljs": "^0.3.32", - "fs-extra": "^2.0.0", - "handlebars": "4.0.5", - "highlight.js": "^9.0.0", - "lodash": "^4.13.1", - "marked": "^0.3.5", - "minimatch": "^3.0.0", - "progress": "^1.1.8", - "shelljs": "^0.7.0", - "typedoc-default-themes": "^0.4.2", - "typescript": "2.2.1" }, "dependencies": { - "@types/minimatch": { - "version": "2.0.29", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-2.0.29.tgz", - "integrity": "sha1-UALhT3Xi1x5WQoHfBDHIwbSio2o=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" - } - }, - "handlebars": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.5.tgz", - "integrity": "sha1-ksbta7FkEQxQ1NjQ+93HCAbG+Oc=", - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - }, - "typescript": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.2.1.tgz", - "integrity": "sha1-SGK2YrmIpMj/aRzHlpYi0k23auk=", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" + "minimist": "0.0.8" } } } }, - "typedoc-default-themes": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.4.4.tgz", - "integrity": "sha1-q+mX3PF0YrYnQ4vGO2XFDTY8JS8=", - "dev": true + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", - "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", - "dev": true - }, - "typings-core": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/typings-core/-/typings-core-2.3.3.tgz", - "integrity": "sha1-CexUzVsR3V8e8vwKsx03ACyita0=", - "dev": true, - "requires": { - "array-uniq": "^1.0.2", - "configstore": "^3.0.0", - "debug": "^2.2.0", - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.2", - "has": "^1.0.1", - "invariant": "^2.2.0", - "is-absolute": "^0.2.3", - "jspm-config": "^0.3.0", - "listify": "^1.0.0", - "lockfile": "^1.0.1", - "make-error-cause": "^1.2.1", - "mkdirp": "^0.5.1", - "object.pick": "^1.1.1", - "parse-json": "^2.2.0", - "popsicle": "^9.0.0", - "popsicle-proxy-agent": "^3.0.0", - "popsicle-retry": "^3.2.0", - "popsicle-rewrite": "^1.0.0", - "popsicle-status": "^2.0.0", - "promise-finally": "^3.0.0", - "rc": "^1.1.5", - "rimraf": "^2.4.4", - "sort-keys": "^1.0.0", - "string-template": "^1.0.0", - "strip-bom": "^3.0.0", - "thenify": "^3.1.0", - "throat": "^3.0.0", - "touch": "^1.0.0", - "typescript": "^2.1.4", - "xtend": "^4.0.0", - "zip-object": "^0.1.0" - } + "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=" }, "uglify-js": { "version": "3.4.5", @@ -13735,13 +12802,6 @@ "requires": { "commander": "~2.16.0", "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "uglify-to-browserify": { @@ -13769,11 +12829,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "uglify-es": { "version": "3.3.9", "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", @@ -13793,14 +12848,33 @@ "ast-types": "^0.9.2", "loader-utils": "^1.0.3", "recast": "^0.11.17" + }, + "dependencies": { + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" + }, + "dependencies": { + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=" + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, - "umd-wrapper": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/umd-wrapper/-/umd-wrapper-0.1.0.tgz", - "integrity": "sha1-iym4cLCCVDqas7Siooe0uNcVMt4=", - "dev": true - }, "unbzip2-stream": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", @@ -13827,33 +12901,9 @@ "ieee754": "^1.1.4", "isarray": "^1.0.0" } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true } } }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "underscore": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.5.1.tgz", - "integrity": "sha1-0r3oF9F2/63olKtxRY5oKhS4bck=", - "dev": true - }, - "underscore.string": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", - "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=", - "dev": true - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -13933,8 +12983,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unpipe": { "version": "1.0.0", @@ -13975,11 +13024,6 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -13987,35 +13031,53 @@ } } }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, + "unzip-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" + }, + "update-notifier": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.7.0.tgz", + "integrity": "sha1-FDxFMzg9CJCO9wVGIGOV/htauwY=", + "requires": { + "ansi-align": "^1.0.0", + "boxen": "^0.5.1", + "chalk": "^1.0.0", + "configstore": "^2.0.0", + "is-npm": "^1.0.0", + "latest-version": "^2.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", @@ -14051,19 +13113,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, "requires": { "prepend-http": "^1.0.1" } }, "urlgrey": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.0.tgz", - "integrity": "sha1-8GU1cED7NcOzEdTl3DZITZbb6gY=", - "dev": true, - "requires": { - "tape": "2.3.0" - } + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", + "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", + "dev": true }, "use": { "version": "3.1.1", @@ -14117,6 +13175,16 @@ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==" }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "viewport-dimensions": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz", @@ -14130,6 +13198,14 @@ "indexof": "0.0.1" } }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", @@ -14388,11 +13464,6 @@ "kind-of": "^6.0.2" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", @@ -14454,8 +13525,12 @@ "web-animations-js": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/web-animations-js/-/web-animations-js-2.3.1.tgz", - "integrity": "sha1-Om2bwVGWN3qQ+OKAP6UmIWWwRRA=", - "dev": true + "integrity": "sha1-Om2bwVGWN3qQ+OKAP6UmIWWwRRA=" + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { "version": "3.8.1", @@ -14486,6 +13561,21 @@ "yargs": "^8.0.2" }, "dependencies": { + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "requires": { + "acorn": "^4.0.3" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", @@ -14501,6 +13591,24 @@ "wordwrap": "0.0.2" } }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "^2.0.0" + } + }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", @@ -14533,6 +13641,11 @@ "uglify-js": "^2.8.29", "webpack-sources": "^1.0.1" } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" } } }, @@ -14558,16 +13671,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -14588,6 +13691,14 @@ "duplexer": "^0.1.1" } }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -14595,11 +13706,6 @@ "requires": { "ansi-regex": "^2.0.0" } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, @@ -14626,11 +13732,6 @@ "@types/uglify-js": "*", "source-map": "^0.6.0" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -14666,11 +13767,6 @@ "strip-ansi": "^3.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -14704,30 +13800,25 @@ "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, + "whatwg-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", + "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", "requires": { - "http-parser-js": ">=0.4.0", - "websocket-extensions": ">=0.1.1" + "iconv-lite": "0.4.19" } }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } }, "whet.extend": { "version": "0.9.9", @@ -14748,12 +13839,11 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "widest-line": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", - "dev": true, + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", + "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", "requires": { - "string-width": "^2.1.1" + "string-width": "^1.0.1" } }, "window-size": { @@ -14762,9 +13852,171 @@ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "workbox-background-sync": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-3.4.1.tgz", + "integrity": "sha512-Ksb2nCg/2wOyBMhSBqSbtCEwuKaf5sHgTY8HdCxbLIQSzDh9/qZqg+1P11CKlgJmHtje3EK3B8EsrzukZo10xA==", + "requires": { + "workbox-core": "^3.4.1" + } + }, + "workbox-broadcast-cache-update": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.4.1.tgz", + "integrity": "sha512-+WPqHFk4ER4RICAMOYrP88yBbiUQ9ZOFNruqwbl9YxGfbADV16OEGmYpIs+Az6HT6DNDCx8eQqtFiaG8N3O11Q==", + "requires": { + "workbox-core": "^3.4.1" + } + }, + "workbox-build": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-3.4.1.tgz", + "integrity": "sha512-Qi04XdHjkXbRN0CV5XO1oqDWbJSIm7VYhxmxjtnVcKK8PrMT6rOUFUi9ziDI+8UQgcXbLK4ZChWf2ptZS1/MbA==", + "requires": { + "babel-runtime": "^6.26.0", + "common-tags": "^1.4.0", + "fs-extra": "^4.0.2", + "glob": "^7.1.2", + "joi": "^11.1.1", + "lodash.template": "^4.4.0", + "pretty-bytes": "^4.0.2", + "workbox-background-sync": "^3.4.1", + "workbox-broadcast-cache-update": "^3.4.1", + "workbox-cache-expiration": "^3.4.1", + "workbox-cacheable-response": "^3.4.1", + "workbox-core": "^3.4.1", + "workbox-google-analytics": "^3.4.1", + "workbox-navigation-preload": "^3.4.1", + "workbox-precaching": "^3.4.1", + "workbox-range-requests": "^3.4.1", + "workbox-routing": "^3.4.1", + "workbox-strategies": "^3.4.1", + "workbox-streams": "^3.4.1", + "workbox-sw": "^3.4.1" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "workbox-cache-expiration": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-cache-expiration/-/workbox-cache-expiration-3.4.1.tgz", + "integrity": "sha512-AzOPB+dwfxg13v4+q5jWkxsw/oim9mPIzew1anu8ALA3vB8qySaJJToXp+ZlVh/Co+sDK0tgjlB76bvSFHgZ4g==", + "requires": { + "workbox-core": "^3.4.1" + } + }, + "workbox-cacheable-response": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-3.4.1.tgz", + "integrity": "sha512-SO2k830JT93GitPwc5tzJI49d9VwyVxXwiCbyvo+Sqo+dcvWSrmpsyuXdzy6zuasbPrWUF0vsFj1uGtZbOym8Q==", + "requires": { + "workbox-core": "^3.4.1" + } + }, + "workbox-core": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-3.4.1.tgz", + "integrity": "sha512-RqMV2so9/KLAu9aUxJ/85pvrZMUn835B8zoHmqRyGNetiDr8B1zSBeKXPZAjFlX/88KdhizNwiRlJtqlXtM4tA==" + }, + "workbox-google-analytics": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-3.4.1.tgz", + "integrity": "sha512-w6Osz2Rr1/4+W0gram6Yzg6NNWLvHP51RwFCNAZSpEnipr0qSEtD+yvwrdaHfiJHWhcK2yH/V6E1MV8Hrczmvw==", + "requires": { + "workbox-background-sync": "^3.4.1", + "workbox-core": "^3.4.1", + "workbox-routing": "^3.4.1", + "workbox-strategies": "^3.4.1" + } + }, + "workbox-navigation-preload": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-3.4.1.tgz", + "integrity": "sha512-P3FHAcyZ8db2QiW/BpMkuosC1OkRsEoUaT7U3QOgg7JSjjsJoEbF7G5olNe+P+PQYdVhJA7TCuptI6dy2gLS/g==", + "requires": { + "workbox-core": "^3.4.1" + } + }, + "workbox-precaching": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-3.4.1.tgz", + "integrity": "sha512-ykU2mly9xmRrCW6iMeUWYydWiso/WSE16+7wponhI0WC53jiQSt2JvykWm0VpWFJSs6ZTSZZ1WK2gs/brRnPug==", + "requires": { + "workbox-core": "^3.4.1" + } + }, + "workbox-range-requests": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-3.4.1.tgz", + "integrity": "sha512-ktgjl6liZrRTmQjPw1pBblC5umHnTb8XcvFVitdGz17B23jj6cUV4EXzEU2ilGn6jO6+MLV1Vn9SWajtLSc2Gg==", + "requires": { + "workbox-core": "^3.4.1" + } + }, + "workbox-routing": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-3.4.1.tgz", + "integrity": "sha512-6j6cXMUYfMPYTycmElxVOfBTr6WV5zAn/JUFJ7GJ5pYFIE9cqztprnrcOsWJ42+AiNIeHPbKfyIWE/rZVviMxQ==", + "requires": { + "workbox-core": "^3.4.1" + } + }, + "workbox-strategies": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-3.4.1.tgz", + "integrity": "sha512-7mJuzFsgejflzjfnChXCFma1S0mi9WC6wlSU2wE50M7bJmEuf9A3j3MojpKcsTEM58hbhbnU6QF/u9iIV7+opw==", + "requires": { + "workbox-core": "^3.4.1" + } + }, + "workbox-streams": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-3.4.1.tgz", + "integrity": "sha512-krw+5bp+oe9Za5c6WlTWM3SgZGfExYcqRSn1gsyYgKeXmgzTwf+DOb5Lwult0KSWlJfq8B3Wk7sW8Sl7lRzSbA==", + "requires": { + "workbox-core": "^3.4.1" + } + }, + "workbox-sw": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-3.4.1.tgz", + "integrity": "sha512-nnm2by5oaQGXRH7x4M5/n2KqjUGVmP4P8azUmJITnYa3DWVYn/ghDg3LJ5+h4A28vYq9V6ePgATaEPfb6B5pug==" + }, + "workbox-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-zl1/2ChVhwcpSumDd3jSUfbDIk5MtTSW5xc/h/WPkBpYi4dwvfwmQ8KAXc1qBIEoDz++R483zwYTyJQJ0g6f3w==", + "requires": { + "json-stable-stringify": "^1.0.1", + "workbox-build": "^3.2.0" + } }, "worker-farm": { "version": "1.6.0", @@ -14775,12 +14027,22 @@ } }, "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "wrappy": { @@ -14789,46 +14051,36 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "slide": "^1.1.5" } }, "ws": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.1.1.tgz", - "integrity": "sha512-bOusvpCb09TOBLbpMKszd45WKC2KPtxiyiHanv+H2DE3Az+1db5a/L7sVJZVDPUC1Br8f0SKRr1KjLpD1U/IAw==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", "requires": { - "async-limiter": "~1.0.0" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" } }, "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "os-homedir": "^1.0.0" } }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, "xtend": { "version": "4.0.1", @@ -14863,6 +14115,78 @@ "which-module": "^2.0.0", "y18n": "^3.2.1", "yargs-parser": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + } } }, "yargs-parser": { @@ -14871,6 +14195,13 @@ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "requires": { "camelcase": "^4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + } } }, "yauzl": { @@ -14882,12 +14213,6 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } - }, - "zip-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/zip-object/-/zip-object-0.1.0.tgz", - "integrity": "sha1-waDaBMiMg3dW4khoCgP/kC7D9To=", - "dev": true } } } diff --git a/package.json b/package.json index 3febc0c..a65ec74 100644 --- a/package.json +++ b/package.json @@ -17,17 +17,28 @@ "url": "https://github.com/dojo/cli-build-widget.git" }, "scripts": { - "test": "npm run setup-tests && grunt test --color", - "test-ci": "npm run setup-tests && grunt dev && grunt intern:node --test-reporter --color", - "clean": "shx rm -rf dist", - "setup-tests": "npm run build-test-artifact && cd test-app && shx rm -rf node_modules && npm i && npm run install-build-widget", - "build-test-artifact": "npm run clean dist && grunt dist && grunt release-publish-flat --dry-run && shx mv dist/dojo-cli-build-widget-* dist/dojo-cli-build-widget.tgz", - "prepublish": "grunt peerDepInstall", - "prettier": "prettier --write 'src/**/*.ts' 'tests/**/*.ts'", - "generate-unix-fixtures": "cd test-app && npm run generate-unix-fixtures && cd ..", - "generate-windows-fixtures": "cd test-app && npm run generate-windows-fixtures && cd ..", + "artifact:install": "cd test-app && shx rm -rf node_modules && npm i && npm run install-build-widget", + "artifact:package": "cd dist && npm pack -q ./release && shx mv dojo-cli-build-widget-* dojo-cli-build-widget.tgz && cd ..", + "build:static:dev": "cpx \"{src,tests}/**/*.{d.ts,html,md,json,js,css}\" dist/dev", + "build:static:release": "cpx \"src/**/*.{d.ts,json,js}\" dist/release", + "build:cjs": "tsc", + "build": "npm-run-all -p build:** -s package", + "clean": "rimraf dist coverage test-app/output", + "generate:unix-fixtures": "cd test-app && npm run generate-unix-fixtures && cd ..", + "generate:windows-fixtures": "cd test-app && npm run generate-windows-fixtures && cd ..", + "intern": "intern", + "lint:tslint": "tslint -p .", + "lint:prettier": "prettier -l \"{src,tests}/**/*.{ts,tsx}\"", + "lint": "run-p lint:*", + "package": "dojo-package", "precommit": "lint-staged", - "test-release": "npm run clean dist && grunt release --pre-release-tag=rc --dry-run --skip-checks --initial --dry-run" + "prettier": "prettier --write \"{src,tests}/**/*.{ts,tsx}\"", + "test:ci": "run-p --race serve test", + "test": "run-s lint build artifact:package artifact:install build intern", + "serve": "http-server -p 9999 -c-1 --silent", + "uploadCoverage": "codecov --file=coverage/coverage.json", + "watch:ts": "dojo-tsc-watcher -p tsconfig.json -- dojo-package", + "watch": "run-p watch:ts \"build:static:** -- --watch\"" }, "lint-staged": { "*.{ts,tsx}": [ @@ -35,20 +46,15 @@ "git add" ] }, - "peerDependencies": { - "@dojo/framework": "file:./tarballs/dojo-framework-3.0.0-pre.tgz", - "@dojo/webpack-contrib": "file:./tarballs/dojo-webpack-contrib-3.0.0-alpha.1.tgz" - }, + "peerDependencies": {}, "devDependencies": { - "@dojo/cli": "file:./tarballs/dojo-cli-3.0.0-alpha.1.tgz", - "@types/chalk": "2.2.0", + "@dojo/cli": "^3.0.0-alpha.1", + "@dojo/scripts": "^3.0.0-alpha.6", "@types/clean-webpack-plugin": "0.1.0", "@types/execa": "0.8.0", "@types/express": "4.11.0", "@types/extract-text-webpack-plugin": "3.0.0", - "@types/glob": "5.0.*", "@types/globby": "6.1.0", - "@types/grunt": "0.4.*", "@types/gzip-size": "4.0.0", "@types/html-webpack-plugin": "2.30.1", "@types/jsonfile": "4.0.1", @@ -60,31 +66,30 @@ "@types/optimize-css-assets-webpack-plugin": "1.3.1", "@types/ora": "^1.3.1", "@types/rimraf": "2.0.2", - "@types/sinon": "4.0.0", + "@types/sinon": "~4.3.3", "@types/strip-ansi": "3.0.0", "@types/tapable": "^0.2.5", "@types/webpack": "3.8.1", "@types/webpack-chunk-hash": "0.4.0", - "@types/yargs": "8.0.2", - "codecov.io": "0.1.6", + "@types/yargs": "^10.0.0", + "cpx": "~1.5.0", + "codecov": "~3.0.4", "execa": "0.8.0", - "grunt": "1.0.1", - "grunt-dojo2": "file:./tarballs/grunt-dojo2-3.0.0-pre.tgz", - "grunt-tslint": "5.0.1", - "husky": "0.14.3", + "husky": "^0.14.3", "lint-staged": "6.0.0", "mockery": "2.1.0", + "npm-run-all": "~4.1.3", "prettier": "1.8.2", "rimraf": "2.6.2", "shelljs": "0.7.8", "shx": "0.2.2", - "sinon": "4.1.2", - "tslint-plugin-prettier": "1.3.0", - "typescript": "~2.6.1" + "sinon": "~4.5.0" }, "dependencies": { + "@dojo/framework": "^3.0.0-alpha.1", + "@dojo/webpack-contrib": "^3.0.0-alpha.2", "@theintern/istanbul-loader": "1.0.0-beta.1", - "chalk": "2.3.0", + "chalk": "~2.4.0", "clean-webpack-plugin": "0.1.17", "cli-columns": "3.1.2", "css-loader": "0.28.7", @@ -111,7 +116,7 @@ "strip-ansi": "4.0.0", "style-loader": "0.19.0", "ts-loader": "3.1.1", - "tslint": "5.8.0", + "tslint": "~5.11.0", "tslint-loader": "3.5.3", "typed-css-modules": "0.3.1", "uglifyjs-webpack-plugin": "1.1.0", diff --git a/tarballs/dojo-cli-3.0.0-alpha.1.tgz b/tarballs/dojo-cli-3.0.0-alpha.1.tgz deleted file mode 100644 index 8b2a81182121be43c5008439980cc03422dbb13d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34982 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 GA_D-z6WJi)s972c#g!KXs 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⪻lqv+4#@TcsSNXf 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

IG(O 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�TcFCpB|BB-j5T>bR@2_xpDGdRw~oWw9u=$bief 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

`3gFB9nM+&HL-Yk&*QzYnl%iG1!0+3%D7KXBe> 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

v%y~Sd_tf*WUG50y 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

AFU;+A#^2h2@5qLqq)PwbXu) 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%0D;_Wj9G~bk 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

-nQEic9rAs83ss5Mg@|k6W(-wE7hp zvuUZ%7Gu;RAZu8YpwC)Vw%M~4vc-(}_xtMbjf7;a+^@1>wTRC<*i5oWJ;%lki!KR- z#g*NThNYK{9w$lTe={r%mw30jKc@Vn4Bf3WnA7SP7%_;JQN&XuCC%lhP%!?@?4zC9 z5WX;$X@fvVG!qY9AY;?nMt$j+*ROu__}H8#TvteUF3jMxKVk)>WkOj$aW?>Exyw;d z4<|oUnY;IpNKltTXNzXN6=sP4qe&I&%H}O%p;xwBsBM*mfpD>IuCu$U(nqjXKC%*!z;u zaq-ozcT$SR3+-d-`$H~5AX^8;?V;iVEv$`Tw%dfV=>8=0`kK+!lk{uS2 zdr8aO#mzx`>i(-{?geoKl0&{~mZ;RTEKf;a!}*EJB$J{$>DSOnye&_9 z8B?mlmn1COeIq@I)2n2;Sj2S<%~BpXE!`WCGM4DSwX~d+ULPso<2y{cB?qzBaGK)O z#QEfJo1u0VL&BzS&xeBbUuv;o1tQr96liQ=8;#ffMSkphCM=9g&kL8=6%vD!4rWUg z!S2a7mIwkv<_y%@Ga^p4y;Xi{nt%SL7`k}UkJ8lZ_02b^V?{qL@1*{ML!8pKzb$0= zXEk8G_NpJ18DC$ovn}r=MezHCbxu zI0SmX%S>3OgcY>udC)i{iA0WOeRiSyEbxz!699el4wG!Ny01X%lW7=3AqD;QI%Ww% zoWjT6!WZGG98O&|lkzJq(YJSpc!^hEumlYC~$gXXgIj0YE;JhPN zj7-5`xFQUVwAJltclx7*VN&jsRV7mspgZM<5V=yQ5cef> zWT#AxvV(Kvjnypi5i;GuC2AI%A!^CVh{Al`*B~}QHnw7w;cy`%v`rKQ@q-BF1)nt@ z9m6*7O=rRb->soXfsV4r(y}&5c@hbY5az<1kHhWtWRX8Tb(Lwnd=y8?&4Q4RAvH_| z>9v&V!rIxblr&hh3CfuaJXu}e=2gENLm9NTd-U`Twv>lU1Q3aqTlQ`^+(ye=KyF{J zw^l_##t9-l^wkh44Tz)6Wn=dcv+*ZNezx4ZCU+PNgBkmk8%rusjeDv&nD4-wxCd`( zWbqBh?Bgyib9)AGWAa>{&PoaH3 zU_f>z-Q(LETbF0=g8}59Jl%rUZgU`P-%3s}AX$L-VqugZq)}+65rHsJ-M2^|h`+yK zYUE&PhewIwn4|=w)f-W6W<35H*vmi=1A=L!cj!u=vi|P@w6SN~O-=7%Z^0(1|rRF)hE-dQQn!bKBJD z;){jAJapO`{myRDhP0Rx7k@Lg1Ec^422o}N#hF?vOK5{-s>{u`*bm)~^Mh<4tG;&v zh|Zp+)g)Lhjnn>Xgfk{}&$zyYH~xicvF1k_|cGK+n`?``}#R zuV1&{M2I*|MJwV-HS@1f5wfu^Nb50t`*sf!=f75!b(p}&Npke49@XFI^NfYwe`u10 zewTo^kV4NkE26>B#Q_fY$7+j`K6;iRX)a|f9$${2`RN3C(YF8_L~rx3-uV3eI9=kn zeXjLEKUaNy5rT}11Vvr84UsLZwebR@; zH&6#=djceKpssCFUVIz}-(yX41h$|dgmFg(P;v*zIIEKKKC>2+R{0cH^iG9aL$8Q6 zFgYIyxsrk9Ei&C`^1GrWFPRNCidk`Ed@O6_*_XRu78dt)$+c|Fxp$bRY52dZEn2kF z<8w27)Bg=!Bum2`DNo@Q9sJ!l=v^n<@0+UI`}oweuLl7)bPPDWEnV{*rkBWHxMa0n zW^wus%Mf=PNLkv-GY$8LaC%f;OhWwl`53&gRqL!q=jEd&%q||;47VTj-0Me{Y&om5 z2q)8GFPp`_#+PO~1Vmn$wv2eo6;3IWHXhaoo zQ1dfM2>-_td#!(6$Oz!Kj1ZE_M|6e&K&r26UbN}6S_L2W&>7x z60_4U8Lu5)UX}ASMkkCgcc+Bh=IcATuQ99qD@BEg(yp zk|nI1A!0i0aXcfXqJ8t2!Bn&8ng%7v5Z<9olkLH;oZ?MI?s4I(H($FvZ?n!6@(ehi zDw7nk+R35jF#FuY;lKnPf#5_dhzYRD&hQ%i1DNW#AmK&Nt3X!!ey`*5BQDJNLlQ%V zh(nGnJR=2CvVd+$k80fA8(%p=FaTA_z*rarrrps}_LrliiD<$qG7=BLa`tahksAgw z^+Ty5vP_6Vk02LV2uY5E!mLXmRS|;y$_tFVpcRFtrc%C*r=w#=9k?hxhf|C>k|a(M zoHTGaL^W?P`hy;&C5kuTA3s6yz#$7 zq!8W65;bMx@*L)`WdE+08UCpP894&c!Xrq6wJEdACH)eJ5-%Mqg3j}-@7op*9DFEX zgHon_Ge&;=i73v~uYW~-Ko%>|@!V*E2)E3m4Bxp(mL&Z=fwpe*sy3t`wE(t&c0mbq z7z?M?B#Z)9H_>*Er$#O+po$-0wGp78HEZILNUD8ZK&re~|7>wUiwXIEO0FMb=V~PsHwY*=n8d1+S>A?d%G74e6S!0Tf|wLNmnhM{Jli( zwJ~dn&_2GFb&o063};IlE{BCKq`4hI`n$`rJXuuE zP@>W>O$uJDZWav`*XW6Cr7Y~24IvZ=j9KY)MPGpBD7?LG;-Y#MJ(}>wCAB$0&C6?a zHm4>LBka_$O>g>AD7B`+ksJ$^!RmCi`R4K=mchyIkBwtoO#4No{tc%ORCO}#6To3| z1Asph1^9Ocz}ofCAG%#YM{kSPy5G)-+NbkzHnBd-&D3-Etvr5Y>1B{jDlmoEmFnSU z#@ zxRZSKfkC}>Cu0+~c^31Jlv^TjifJ&m^as`SV7e&}RkZ>;L z*e9O%3QQSM-_USGS?M%5TPSnWqr1~SWgA{+)BU>#Ip*8=LSvHY%hFML8ig7Xlh)~w zld;faa><=zrUxkIsF!Xov&=R5q{7>k%`EnDXEXe8?;ss^$Mc~J$+&$_>qtDIomY#* zezC*@!3-#Yr*fApvY?Bw`iCL%TFohAC8u75UHqMbI|ndMm8OI4r^wD#rd$&XGl(aWI`<@gHW=E!6Yo_uE8MHHUs`^hDwFpSQADw(6j zB)r`v20h|H>Ly@vN@BFseQJ|5-p09C64uneh0ewwD zMm_AbQ!oYo7}>ZG@BXZ6Q_lF>9ZB8$X8j8UC;~jC9$F;egLB~S!@N@zbi#s&Ug)dS z0m2;M1}a7t^d}nvYo4|Gn39&*TU2@U(F;g#lDfPXRPXcs(YGFh4F0FuMmKv>rlG^iN-eyB$(!J%ym?3OUI68z>;Ig%rZ# z0fdnEOCKI2s=PQAo;hNF^BfNF^W( zNjfH^Cj9Qrq~nnJBxg!!QWN49!;72lZ*3A>DUrrA_VFw*=#aK2@1!3R<9t9CDVM~g zA7h&nN)53||LOiF1N^0);}g7#jPWVg#Q#@Uf|M+}dn@n1)(FA6OaH%%-o$^IFZLJ0 zav$wnnMtsOrXO9+H4VL&tKJ)%nwsS2omPi*dQ0x_(Z(Tkp2$fKF4RaIPd_r(cC+sB z7;U0qwu{lP$Z;*MhO%0VIhE|# zpHNRVHT}#l7WNJFbAWG;9k~|9JA9KGsMuSwCG0u24FBDp_-g?p+?OCIk}_As&=E$_ z?sK)AsjJ*6{F?0Jxguk_mgT-fMu_A~akznB633=s7-71P3 zbA1hT682AmfP73%yCT@|6KcOT1mK@I2a+0Vj?toXSXnvG^|B(?oK?JcdMhNa7QiGk zn0h96t(2_nu?Zr^kCEBFXfhgL<7NJoa3XvRY`-BI2P~B~1LR%>AjISltyP{^44#V| z_ZLj7n#1%ZI0ZqYG~?a5#KJ4GzZ(2CfsBs1O)qmxAYJ^{-voHWi}4^gyC-J&uBkjZ z2T_jU<629$VGn-*T+i^rCVBQYxw~zB7@klwahQu{KI;x~h~rx(3JI@@0J*J(t>T|< z81SjpwNr(=3n9n}M#?V;o>jsOoM5Lqo7lb9=>Kd>F{zHf?p$KXL< zNy#kk91P00Cr)a9NJ9f5UzSBdCoEe%do_tF*x3y#I6xl`L;X8Lh(=TA7}*Q<$XMX} zc0R)}Om3HF79Ze&x?TRcDA)o@o zAh+_JcKs_lpc^5wi1sD8u_pe(B|Bw_gv8g@NjU4PO`$k9yDlOugL9pak#J6eu29*V zW~kg_CV&pAUeuO|v{&x#U%oq_S@0n>F3;V#jzT3yf4SdGQqVYM-+!4SP1-WJI~}2D z%eS&}A$%4S!(33Zc2i+fa=iKHAZRxNeqI$=4rr2A$%?|>=ti{+O2~K zx!7Y&G6CskcjM)N5%;%$2H}WQ{2J+|IoqyhnM>KmJJ%cER>h;6B^f1FX`n3*hw8p%AlU+y)hnO>Ib#qcP#rqwkQ_yJS9(30F5J zZM&_9>Tv2@=d^NeA~Az*MJG>*hQ_aO)vc2EAa}GqRK7j;=PYaxS2_lvDofio-{iN| zx3^PK52vwVMx>A>iY|C~AnGTZ@S_pOYL>r4sxnog;aiUuF{`Iu+4E%0RDDg?Pe$qe2!a+4~7O$;~nR={>CpvsIvR%W*J@d=BuX0uJ-k?^Fe({6c{b_c97R<2$ zso~~V8;ad=1IXc8kJsl5esP8*CV1qU2fmbk%^|%5_~l_hvo&oa-QXpeW?-9MF$YTi z@{k&SDJ8MP@rFPKYMA0dWlxg^{91P&8x9E2p|?BsHzDF|7IslQVkT1hg9-NmC!|DX zv~WD&#?TDqQz=H_z2Jz&@&@bLby@9ifbrN0WJ@W0n5(NbfTlSbW8;-3EL9L+9m5gc z_BUblQBIod3oNZr9)Xb^bn%hF5NW?}^25RQiAEO1(b>Swy=83Z*uJ6Av_P(*w=ilN zTryAQ7huO6Z+RG>n&DyV;+BrLsHhU)Y*LpkRNkH-_CI6&0T{Dm_Cwfse=%1qa0UlJ zboEFdEPoo=1l3%VGE}Jn*vv2$Mzqzikr0B;Y&kkuWp;PuEy1*KWe0|Xu|{q2!@2(u zQTqMg+kCXeT$nx@qE}*NfzuI!?}t2Ldkyu<&&>okLaBM<<^Zue2I z+O%TYRlZpo<^(oqWLw5)=Sz50Uu>TS%cGXVYo}odE?2wMkvLXEeNL!wgw+yw=z%039d>eCfkOcV874JKloYmffhhzcu2&W-?kmZzS9+8hQ^!`RrA>@+r zRXGucEUjy_-rtQy8kx0dsBVi_%$7A@n<*u@$U?Y^O&Q6a7D+P@Cjh##vc@t(O%ngo zT4IeN%?Fb9jMYLSV!t>VB&8!1U;kh&9vQ6oa-WN9wDL&S2lw!Lz^^5E!MPnVqQTew zFT*3w=C4~}7Ca_fCC5p@+$krn7@qKzRtF~bOyTALXwQ`odJ@aXp6A+2s)P<}tg9^P zmtbe-pUZ2b(v`rtk~A+E51|As)?qCV67JByMJl+~XEv$K(;;w>_IPEpXM*!e;JBPk z77;?FHe-fDBNdVhGkt8OK$C5)Jf*noESWt|EoXM0Q`G+)Ojp2Ww$=~OmQsw=tVZa- zY66*B_1X$n7*$*({0R|&)ADav5PPRjxS#?@Jxy8G}=DD zQVV-@eZUy3OVEY*tV9xGEPb@37Gb#aVH@JSiO0`gjwz4Qv}9$uwglaV7_{y|*s8qJ z12*`zXfUyCCag?wjY~#k=*8!Oe@SA<@Q?_uCT*(lO#=88#^sI;$6hcX^(67|qOIUz z=zO`#?Vb4lTVh8s!>f(Gv77*SDK;vTJAsV^UZqFI&KHuZwc>nT(wdSrqYYsa43rOq0WdC}|7*`yPn> zkYlWw)So<`YGQO&b14d-%QPSE6;9K1Mja!K#feA(U)_Av>s%~q&af$*6sg)K?Q=xq zpM6#Hio-@+(yCaL3qTZq07mnd8KY>D$f~KhMfk1zIW-BBz!vc&B|?k8ht2pF&PDkS z<_;)hsgtW=&jvH=VT+^GgKGo@7cH@})2g;1-tjrvWl{!helv`4W?Ru|SdunJ^^8PL zYHBo1o`k%y%p~(Jp}V=D7XIzA zS-5?xCs;Jz0Th>iPD%hQ~vwJs=H%?A0$oJ-*3Y}7YX3U2xSP`7@~tUUtEvV4DhuY2hKIN2F}>010aVXM~z zmvE0i6mz%7rd}K8&~1(LXm>C#t<7f-_0MM?wj*JTo(SHc3S5gSc=8mmB3GjepZ^_4 zb1W15Ap<1mr#w>v!19pM9gIOJ5vE0M8l+83Yw4eRnq}^!=VgE)b|x z&fg{?7X^ij7~@pLx!lb{8&^9r+A!s$HH42Gic`QTQG+Nr9$eTgBy^-Y1Q=@ov>?QY z2AVVFK!=J6E;}|l5mJfeWHfunG2h57v<0wA!8Q{!Ey1Z5ZqsI~q4`Ny@Z%p3B&YTx zrH&zXazOv|M~qCiXD|{>jnp4DTyM0$@csL>l05q>A zNFzNG^oE6^2Pm(S9lZxN*w$pArAD~)itdvN+e5X(uJ>Q%*xO9gQiA`_IzSCQ{7-XB zhi=Z#=16k%&xA8jE;hh2z@qx1GWXpqWXv3%!eSy@$~HNgF>KS>0K+nP`vonYH4Uv_ z=zHlB;Pw%$e)VEibYb$=6H_jrxRpk3VNURl5q$KrMBd!Ga>1OJ*}vteUYj}doZ8cU z^Cmfz=;fB#9A`STzsK%pB{OLz}1U$022@aEF~v*KUe?3HfK`+nSmi=KHbnfiNp zk(kZ|Ds#d0!b+}V#+CTTMj%cI?_L#9iol#e8fSSGAki#71n$(dpw;$ga9|0`A?Qyh zg3wi;a2akJ1Zy>WfP&M<`8$h7vm8q0vYg@4`hxzFYdc~Tu6dzfa|^geV{xP8hS+?a zU$Yp5hLw|F^Rq0#GS?fRl?}AULkb>Ov31{{QV#uUZdToDEu0$H1W0x6bf}u;X7lD6 zXthS0IZS$f2KPt^!)gNrt7s6z>gX`m4zXO&`sMFP1S=c3`ezR8`sF(WE6=|OR<6jq z&H>P#*nUo3!O0=M3n*A=EW4(#9*C{07W$@iv~e z6(=p~_qQ#sNZZTPkaib`L9NYK9<2r;8zByqdO+(^0$Pyf)POdmdDS3I$$l+Jvugiu z^2bI%YvNn{<2HNvgZ4J@XxHgs^o=Y~fjEoy#w$7L4zXu%aC)d9C%eST~^xKzxj@m z;^QV4 zZZ?cSsQ802E6ar8e0^jyqUTmcCV_LID27v#$Z^AkpdybS^F#7!hWtRn@!dtHA%)90 zyJg6pO|08~JaosX=h@l4((#puOwfo3Yw2QA@<*K$uHA9*b~V)LDM=m$%};!07Amj2Sc%6GoMGaGS3J2xpvk>J53COIZE^oH02JV z`I%@Hae}4S2KJ<7SM)jYsDH8`fm4jZ;DfN(#M}=HhWtqEOtvXR<>nt!GyclhP_sq5 z^mA!0jH2R@hzS?xwpYy9iUr(+B?BRyvJ%M~5^)Otf?MJPoZx|iC6l! z?gq;MlFAz#V*%D=BvlxGi}dnxR3vU%BhQD zy$50QPvi{Dzv#t*Toh_rL2fjKd2+ZT;;tp(Fsa}Ti*(JNIi{x{Y56kMCQ8amqvGeD zy-a3J2X_;_tyN+vEfp+G@p|cruLEcoRo4@P8*g#&{^NJ`C;KOPz8C2X{kQa(ALq!N z`ETkLmvfg2a(uudJ>95X_U+$4(*9)eav3e*O?mdKwCoa3sq~}hg+4c{ektv2gj6GT z$myb!CnE7R)<&VS=W*kN+Gzp7V076ebB&FXjh@B&l_t-=J=%4!tfA)L=b!7OJ_>fD z9>nFbeW%hFql&%J9`+?=c4XcqGe6hWH6SOxFUx8x6A!<&qclG0%U@X@ zS3suDUgo%bx;6!sUvZuH+W^U`u8znwT-YIOPtzM7Q?})=so_bN!&b5UolbFVgt+sM z*AOsqRB#jhxH921KzdWsH3+TAmM=LTrJ6BUg~{*a)`vq;VRXnn@)+q2NADoa?&UB| zHVlV?-19aYG?2}ygPJ8{iUTFHlxoeivo*$P4D;o!=FqI1MmLovEfXv5JxoAPFc3zxRcO=OYIteQ6#KBe*PZ39{$wb)0tkowVkd{#<#cT zyS_OFD}=$fh$^ESae#?f-anFA&I3C)2Uh$w74fkuJ`wyJp(IdFc|j{Jde@4)u(REk zg0@*|z@j;oA^D)*{EHVhZGrAE0(se73RuNZI*p@^u@HkYK-THFWbWdm+F{k7S97xX z(dB+Q>pExzPHnV`pD0RH=yG~IBh7LdW~ZTJUbKL09)i2>hhM(^N|@(iFQ8@ztZxK| z1o{Cq{JiaG8OuZ`a3n-Nr0mf|`R>5{v+~jSL;vL1I|aBjWQk8f`iTRSiiTVq z^Dy3e70pZo605{<1P(N=B>uu80FVgE=mI;gzZ%Q z7)8$u?ngkTB$6!#NffVX0x~TM?o3>|iuwgP+V+9v)79oT>)0Pa3Sk-&I`j?@j(rxz%kE!Mk^9D1E+=bU;)nqer20TmCev}gDS9ccf1v_^a9$L#hCOdadT&CbM| zc<84(NMe&9YO)7Re5x+3>e;Nf9;kgKNWg%DW{ZQSzkbh|eT)sk;2T2Fbanh1by8#xpf zAZQBa+_^08bPyn8?cFmrC%BJ$J&e!fPv$Qr+Tbmn9y1lauRb}o5_ZZnP5V44pEXbs zH}}A6O0FNuH?I%Ni3jMBG#ZXrhw?^Ixkmi*=$)MGj~n^SbT-1dExGhM_FpsFe_wtY zn?hkeeppAoeZRh?+JAbZscn98&pxQp0rC(ZK9ZjSo()3XGlT|VMg-M8nQwg$)+&&Z zQAl*jeL$cHA=hydcKbw;+*61%PIVqK(ScB%BLbm1@Je)NcCPm=JVXY(+Up z84X-^R zg_1j^V7>wmR4569`J~7P6R{zb$m|=m0La#xK7?G!FoN?Hk2SYT2crpD8oYqLAs|SO zop9ywK=l~f1YP&r^Ps!zx-BM)zm8U=s2%{N`3_i7-jyJf2cw9fr<90)EUCE$jsMf3 z%09T%r$9J9#T_uIPu>uG(yKobzrz1Xc9nFVzWC0)r|dlc7qYLG%0Hdl@}sw*-G1Zy zqo>#HTl@L#i=DbQUkMC&1(Lzd3;_q-(Dj{WmYkySa9hR7gFGk;50*0%vz6#@946oV z!TWL+AKq2G2_$Xi7o(nc!C=J;`z-g*N6)mT3+B5*j7G%|!z6kV@lIyc1bO=`G9Zv= z9(9vlp0!Va=E&{c?!8d)=M~Zc%`%8Z&CoE%RC&4PtZ0Lg_F9R7oP_8?!ke6uVkRZE z%W~6wtQbPYpS*O;(iAYL0iT+2KvX+AZ#rs`!~Xwh{8}r6zCSHZ zs#PvK7Qo<;{w0Mo>H?x2#p7aXjsJ?ocwDk3pHH~fiTL_#P=74(JLG~?7H8_aK|WS- za3#ZQ&tB91i^RvrIq4l;7yH?^AHft!1rNM&7DSKCDLdV|HOo{~N~>Ek9aQG5z*W@91C&^D4+dp%vFF{9 zkqedQhgbSAJHT>us3o#2f8A5S7b->kDl%XMLtQppaa!XUF_mSbb)^jHa^Dr<;k<)~ zaQ5lFMEIe4w4X+jEoXsJQYv&im>^zr&*ZIRecl=@v8{2YNna~$G6^gP+FPnL&kJ3Y zUS6yzcMd48K|eQbv$t4RsXw<&V=aQe z#DLOgE;m8q7el8JMGn63l;<4p)9N7$mZO5lzRGoVBgzoG5{dkwwOQyPk+bb}|E@e8 zeieRL(ZW0c!K}wHGo$z1{$E%>6k53Nf)N9o1ULI|M;8qW4U_Z#VEvIRbv!O?f=m$# zQr2r<_b$B6VM&CyY*WlQe44fWuG%AZopS~vWx=SVtnQE7GVg^96Ehyw)0D(&S$PuW zL&VoV{{j1nFX^tSMm9=26x+6mXLQpaK5rL0O~Ev_D+z)QI=ED_a?z$^#`_cX!rMGp zgef&?NI1cXjFEILd+N?u=FUnA`4Zzcx`c4mQ&&fhS(xa~uxixO4T#kQ|H$FMUJc;u zV3d?NS70zoR7L!3!-yS7dIqpj(R+qcN7>20;7D{HS7xMri=!uhqoAUXTO6KND3}8N z3(PG4_7eP@JwD}x+)pLKoki~$2{Y{}2+Fx^x6@%K`+v#)D1PO(DEWm{{e-3#*k6BG zZaJf*N2dK*6gr7-g`tm%hG!tzVHM*$npCrmM+G+7-l7AYZy!kFAjp&qR@GtzCy(~{ zaQeI@%n&_;dkA44&nPbKQ0l2U2r2bkpLZF;H!45sJ$(+M|AY3M_wL!kxabqDc(@xQ zX&D-OV7PJZz5s_3&+4ERB9qclQUMlYY4?B@cvkE0!Ee4n84RRLQ8wM`dR~v;8ehLwa93q|^|; zkab}+PlbLntS@rj6jE&*t|UC0XVBQmE#_T8=#C}|iN~YUK|39pBY1~=p53$G0w7Si z)ex}N6if+bF`+^UFT&#EXxove#!xoHD12;!rQ5=fe5l6QRHKG=D}U1%-{%@ur)#8v z1OEsFk#2LsVXl4I`X8WwGXVs{yav2CxD;D0_{D8au5@24(-@ubuB0%JnqM)b5e;a3Z^h9G z`}?|^?cd|5m<_NA8sq=4{MXEaLEh@2$-sOsR$I*YF~8?OLvN0KhJB^2X%(z+a>8l>HH4&fupm1D;Mdd@#-T)#EXwvI z?EgjcGs93^zdrB)E7%0Cc49;VvaRV5&9sG&nS*#`_Vj=SdKqJpj}eL1ftpvuKHN}W5v;u5J56Hyk6gwb7^H)e>h8zX?EOXYdGf?PwSRe_^5X9 zBIMpL@R2J#R&Co>?DAGHg zvV~W9?1X<5nuUCqkyDUx?q-t8L`!Gs6Z_nD=P_3TW~L(BxVwG?PNH`;P>PEy8=kz} z;ypJ~3vRn8yCCrltN7gu{W!cA>T$9g<2wPRk@A`_(BqjruQUAn&gb)(!QHNu8{> z^=Z!qYZXFe?hxbf*!HrnpmwT;As#q-HH5<@<^u6HDPM@ch%p>@=Uh7|tk}1IM)HTD zPS*9Hy~^ETKS6`D%+O!rFJH~jRXd+lj+~NjqUGHl{W?o*F9(C(tVs8@PYy&@t82ws z{l%{Nv2!q`#e7G@1L}&KyTAtd&pd&Q+_zkfOm5M-k!bH)-_}@{E5lGc&xXVBm@_Ib zK)eW_Bx3Zkn|(!VZ$5RQU3S~tMQc!WvL#`{4IYIDK7JJaY&XI!#-h{x4s?F4Tko(P ze|FyOgU~DC9UfmScG4=yV=ZanDDvn=0JlA}buDNy(3g+OLh40!o7%r>G>Bgy=M~}N zyk;^Ey&LMiTW5cxZBmE%n4}oALQSgUcI50%g-2<8RbFyrJg`^bf@scfr%0j4@oWCj zO`mw_$K$%-(3}A;aPftS7n_lAF?RAs>RH8R*cVmvF$FwUNah?HhfcdE*ZUPO%JF;q?g&K18LWMxkU=SEWW$8PImoxMu?14~)p_&kZ3WF*(5x7wp`GG!F0;nM% zaVQAxsSJxkK~c@`5{8h&SY=1h!#@{9K%gR|Z`t4O(n^$$(IK^TUmCt*__4=2tH5-i zLIN7PQkPVM_ka~yMbo%PfpjXEnJ)syj0|vaU|e+u_BQftn4?5poD)$? ziMEZ2@aa#QX{6v0MEYcgo0M;2)p%@EjJiN|BZ<|74a&)xy+*opa`rGN!G#S2)M3yG z1N9|W1eBz42M5aSi5>|&7zWac4TPSES|zXp120#u1cGxC@c+G|JSR?Ql5Q*KlmBVoXVvabu0u{>0cQbCfqYAR+y|y%z}F9+VFfN95TpWf+@}<-by^ya z9C3tm=KJA?TgubSeyY|LUAya$>;~)NNjEqRgr2e|W(8Fes!{7$T89WvLSDIVVq-NQ zkd86Bx`-2;LykyHJ_*A*BtS5{a~c+9!_WxP%H5Gc?%V}JTMS~hhcZu$6)*0iDBEVO zP}nZ9P8#sUmlEu3>Z(@ze$s5&b3NltA7ln5QK&U!OMX*;Xewey-dNrF?10YU{s+v4D)<-^q^^|qzwDqc-BlI*IHA0z2%sG#Ep02CH9JzYckcHM`+`3Rov3_ zwS5OLvGrupXttv&1E*RN-jjj+Oj+tVYZpiFG2mF9X5(DzX}_CJshjEP7UEugee@UC z%DmPyTw^s;`l^`;&ijJf3P##v$w~z%%?AJGM!YZzW75sdP|7yTH~r|)xjXNe*&V$} zjnZVl#n;R*qgA8{i=#W#}^QSJI5MNLMHXx{MSL_Boo|Me?X4c*=3KSxJuj zrH3-_Ey7%VfvLw?{aG@(RFL&Fr+Q4)<|fC{1y@N5f#+S1+sT?KSGXg>H`dhxnd>cuVo#k4*Cpv-E1dAXMJQq9GZizorb|a| zRu-Irqg0KuwsjF#Li>~4UU~ND>b-^2{*e`jx_w6g>ScMrz0oHZ+rKSt30&J+_hH#zHDJ&kmW1DEpZ6DrKANUSiNSGZ(q%g1 zO-OvB^gTcYW@dqME`RnBg+Da&ExeMZruoA!a)^iN$CLOZdA0}kz2jvLLWlN4yb}MR z34xcmt*B9-QiI6YNT76AZN$f6)xQ^CKP*2uN zOuEp_)17LF2q&qW+VQu|p|@yrKim>z(K`%;_m1Vy zbdS|C+tbf4UyJ_vRd6aPp0ZZ;W}oYdu)U*x{uOo@2PecQ?t$-M{zK^_S|xDjSS|sM z%o>bq!rXP2xTkoiO*s1kxRP?rSA@F9S9IipKR-{wQ~MEzmQaA+NT*W!$E{i?oMsJ9 z^iMEuM3ZbNQN@$Ie%S^QcSq4)Bkanelif?U<7|7$EU1#60!YDL8}YoL1otwaz{Uwd zQ87+X6A#9mYg1rciYvl=18z`Luit<7@3|q)#?WK^`|{Wkx^Ex57JHrTusok58l5!A z{b%sU3}$h|HVMMG5tMc)!6En=aRarHMhURAsyZSDjZY3RjK^>TdD15s$C_7u;|xQD z9uAxZzs?F9EQ$sPQz{lL;QE3hfa2_Y>jj>MAMIs0SC19H4wQp6pSQ-qvQo+vxW zJ{GQD!<#b^gHXHcTLJnEKb|AWvMNA7+n3O}jMRq0TM=KJ%knvaxo zY=)08Tx2_?g%vxg%~6TSvtmSM!k|TWQd4tkLd(69q52eVQk*0xJ0Q;@ZYyycfFo?T zCIIdaL@!Bch+cx;_(lMoWXP~~LKadgNhx0{$)NjhJ48BeQ6-(Qr$Q$w7cQM3d>)+e zUbtv1wd3y4BeA}YK5ldrSybW`zw1Ir*&Um-EuJ?u{~>YaZER}u-(#s8;^G%X85Ixw z|22;PuQf%Fd_rK1ORF0)fBtJ$0eJg=@=E_}xo^d2%g-}qd`jnJqD7Z~(YkMKjjgTq z>hq2k_v;Ocix|JJ(}!KLqSg9DBMNNJhzZUMW?~_z`DKddb~+1ZBuYn>TVmum=9Xp< z8?8n~f5dI#oU(NR3BYuzQ_FCjWDTZfK2!Z2X;VSBr=ExT@x4g(52ZJt$?MPB=BnfJ z&#_wj_sKm?g=)(f8vB8SEs1{Qt;)&ZwF$qV+<7J8yX#xTDb4GO3F6V3glNAWg6}6( zZM_C;r}C%A8aAmaCf>SGi|(2ud1uB%@&RdJ+*G53p)qp2`L{v4lkINQ+s5#U9%MyN zg<201Yrni3_vOHa?aiTxFJA7`w7M>7cC0)X`tpX^_>jjz$yt=ik!RqWKh+fsiLuwYOiN%RIYw5lMtVJ&>4`nOtKj;M#FU{ zYm$ONbL4hTUb$xM?BS~LVdp8HUb@&zJWbV2z<9o%?wNia+VECIx+@VlDfK&*W zM3bUIi>0rb3xrFMXUbl!5m2oYT&f`A zXV})uE7AuT>SU#~xpUCXYFi?e!K3E^*6fS@A}8;Ol>VouW*0h=OwY%dq58`d5g2b1 zYx@n#uO?vcDYIY5q_v?=|2W+_MjyYZmNeX!(5edHvjSQAs48{!X82@l!s=5HVWtY% zAP;k{i`gUjMr1B|n|)`Mn4)aRx2N3eN$gtwcudg2%N_%oJSkh_=APnA7ms`dZERQp z*!KAd7;_M!fC$sW!+z~%a7dY6iFY@QlI6ZFu-)anZ-N@$-osrAiAmxP7>oavs#+rX zpt4rOG8wjGdU!fgwCYcCh%-A@aF9N1TI!Fg9}SX6I)@knjY;Oq*gL@GKE~#Irezzf)tHP1~H(D2|Qm z8j{ax`>89Jz++J1DRA4X(>itPjDd^*x#h@Yg@F8g+^>Jr=>xaNqv!1ZZmOM$HT@Rv zc){4KT$<=z*#sOulcSntK7FRXIUCRbuw4a!8WtUe=syktq_<(}J|jag^dHnsiN8Jm zG+%Xd4FFUp}ygO zX5VSU$=+#ABQw1u4!Hu~q5#J&nC#g{KHOnw7696tIkac#(CdbY?uOJtmaXW+Cud(( zv#LH=mPG4XO?dG#xeY!>8FRI3+2PcRRc$DWsb|WyL!T<2xyGCf30L<+{yg_Ue4o~~ z1g@Q%L*l2MQq3A*^Koe|n;AZmJW0xp{zj^DxE(8Nl8}q8j)-b8L!sSL1}0@ z85h_hnWt&sqej*qND@N%)(H9e96}p+k5^J?j(9LC+jZ7n}9;f%~m|*xBVUkgL zWqHHr^q+%BBqHnGH?J*LZL2Qni$9glzuX8s6+Xad0Tb? zhsG*39je|)(ugK%N*gnUk~495;_N+l8Sg;HoPkC|7-QMvL|JFO{CEi2_Lblj=kL{S zCuwaV^!K1?0pMZR1>abb=ZB0gi0G(S`AMwfCwHm&AFI}PXLnDJ?u75jo%`31MqutW z@R&r_F@(81fAycj5I(Z+K#m1F>?Icg_2s!r@$UCrF!x*meE8_|Hh+Q{G@zAeezi6H zUN*oSE=xy-+&<3?IAVe)unutdfj!UlaPYq3Ij!0DXPdh{LdxUh0JL6#)h2xTaE)G; z)ZYrOFv(!`Q$7^V9<+d6-*!!C$zYc4VHKd0V)pi-@1prPJjqDr3?yD+6HJN=SZ3Rg zoY0Kg$q=!48zJJcqd?ud9}1(jtnNC2j7NFTbA0&5unbR}8+Be(XS%FqTb4-Rd>Sd> z_UBI~h5}3MWs|TpBd?pJcp_d$AKyl8fNkb+Nb_3Qf*rnx&+1q$&}h8DkKnxNER65j z&-p~;F^`>3679L13O+7Tlp6@b{`U5j`6Cqr{IQTN>g}L@?=3hG^?1IMv{JKMfC53$ zs-~}tT#CI}6^{geJG23QjRs-&?1f*z+|2VQm%lmisCn8q7f@I~v|`|4vQRtx`3_$w z-HM4am-c&g%W^mszD?kou|tKA@cYD*jzC8QbT1luTwIBHN1NKmrZM!{X7t@RR4^r-Uj_xhNjdz=J?TF zCXt6Gdo*%cFZPs2>ZrBJc>*qt=X0XuVAvnhq=Mp+b9>@G;uMIXe}Av(rpG1+0#hjL z9zSs{Pd{e= z_ENnNa>@IuoNY~}(RE}5>^n!LseuZH_8Ea^!E)N$Z@bZ>^%&#s8sXkJ@5!r0r7bwwNz8}l_mLTF&Xc4sTdtg2XiFGLC9mo zp`rPQXXIfne?OD=bK8;V z$~t@yJJt<5HxN7i+scn7j}}cHmVeyLAln#4^k1#S{O_4Uc0@OUWIJI>iSGf#uW*;j z@p-g56O!MNpBHQ88bhZWQ{lDU$mt1pI6ZXqKu{HffPdF7#eaoKy3iub3LhwXoNa*# zVSb1&a<`3GreR7cj5b9zYUY#5*x3ZVGDHkZgHjJJL{qiTO{nXvwdpgYUuAhG3(dcZ z&RDLvo1*BC5~VU#x~`UDeZ= zim6cLDdNkYdt%~9SfOa*aNdd|V$QHy%VNen+tj(RG@V%=97j{r|LW)yN|CRWR_O$A zjb5udk(G(JwHVpN4yPt2f?es2kKSOy4_Eg_uuS+x1k3Om2?Kgy)}hW=6v2exn)I4p zyBWaWS59r)jg>JuowXlO#@piZ@da{j@cIzbcAbr7GUEQ zG$IHUXSDX0!5gjvPM936uax98Lw`wKt$UBM&>*vr8~o?fmnTL)n3pb3NM-4uviPY| z#E8_isl{(6;NGI8I~Q;WY0Zt>A6SBM8Wwyw=!D(EMq2g}`y;aUlO+!hAUo=NQ)S2T z%&)b9U0M7!!;|9$RN`5FU+g)zU+kGa{~H6vp25b_FG?W4aU`XWgCDp(>Awk`_xu^Q zEYqY5QErBssw`rRej^bsflKx&7yKWoKt6@UB5O1Z1auez5T-qsGDJ{qfq}CqfpfYN z!O~I7uTmiA*|myfj2Q4&Bo7U6BqY`+)-GtDB~QWPenU+r%XA1lZ5*(NqZp0??~SVG zs~~jvXi2!JC7_fftRQkIVo(=INW0%SG14MSOnVO%xtbD(Uy=e{U^=)UGlvilg$dAL zEsy~%Rw&R!c_GDg1n`dEirV}}K+P7P4Yj(+u_2&-l zjyvj)-ye+0YzFJ;9}Y`lq%oR}gVq@;hX*gBbW$g!$uk^Ynk$cmY;Jq{HcJEx*I17Y z?i>R94^RHhI*bRXvmoWQ)Bv8X!47t(a64;V?TWNi&irM3xBVYAtmO(h)=WAnI%l%sW zZ>d`8n>m&o`zIL_gbxcq4fywBL5Vwj7SeyNr?`yVg61noBW`K71bX2V){ z01qoyjqDX6Q$VZS0$W_R6VrqbI7V%OQJfaK7Z^HPONDp+@0X=?rs5syTjq^;rpj*W@=_G{)=6^dsX$m=&s$hy4U-x z)r9hE_RMT@Ew;O8)>fzT2>eb0V8$)Y&E(!0@Z3y9&8ckrGBurjeY0&$mHXXf56xqs zQZVaL>S>;=Mq%e9s&9ZK;m?HwW#GUE)uopghouXUfJ>;&0Cs|$IZL<&SEeUpJT0(p!dJ3VdTy$R<$R4`Ewer z6+kOFtneJWHckev)A3FIVnffep%lDC$@j9|nP&(;x1it^4UWZlUW(VQ6_Po(Vw7*v zQ7v4f#ts$ybHr;@RlIB8#35Ccf?Dt}Ayq2Mjb&fIjU+W`R6!zJYky9mQ58r9SsuIEo0syCkoWr<~Ul!qZOY*9%A&Pr9EU*V19RfVl>!t8mV!R}e= zYX#n4Lpf2l_P4Mr2FFm%_-xD-Fdx6EK!|#wP4>g;$q;@zMj|l8a$zmy4^j5BES1y* zEul!SVT49CvrDyCK9{vv5Uf6|uz2R{7Jb}WQVeftqS|#jm-jJLx^3re+Fa6-fByeM z0spV@trOab^7SK8xA)pg-j&q=uwmkT25Q!6;a7ak^A%~nqgUCIrj>@L4u`qa_MQ4i z9M?Kgyw)n9Ik!*pC!QQV@~!awo|~?{@rU<0+~5!u%&wd-a*p$1h;~$foB&lB-u_xg zW}6#~7cm?0#Khcbi|Unz$x28651VR$(Gt{`L=L!n_QwJ3t({$()qt;vHCWAgBIn)O z$JX|VF<2sgcn@@ocY8U0d-0Jyihj;Tu6uK$wmgl(mf(N|3%uF z@4@5erFr9G1W(t|BV7z?3Ov7Anxe})C2)LW;b&bh<)t04Bz%5v$nZ>^LPZVwTL0$? zBFd8mD}H8-uo)b5?iWl4*xhh_ zn3013O8eNY#m^t9xj(CBB52Ds4l-r$;8jw%e~jpaCVDV*cYD{a@+S5u4owS}v|Hsu z|HhICySdWz5xBMDX^eXrUFy5tpQou;CQeVn?W-}KUcsbEsx#K&N{@vd9G#{dBbFL5 zXdI*<`K|HiY5cOzgq3Wosw0TxS3aM4(#erqV#oe#g2E@fL9s4%HP=EPXdkVJ=C5cl ztS(T>K3~^Ea2fV`b?jD0>Yx5j1?k6?5n_#Y%IK4^Ca&SE1Z^a^Iukjo@)KmR76#T7 zq-{muQxOd{Or?L=6N!kAf@Kzs{1@fa|6N*c?PtJA9Q|HsFeiHOc$E&-^6HI`kLq4( zbQ4XIq`pN(=>|eeOrC~TP8UUIVEUZ#ib~Ry-GD6@N^X7DIEDLo=BU8Ub^ps>TmL2D z6Ig+L=d#d^u*R80Pm%(!PSVp0-u-xe+t}ZyekEVN>>sG)Z=mQpW)@}brdQx4RM&GA zhLNPy2bu)}$g)0`JmV&Pf|EC07oF%Ajv*MiOvRQk8b?;`3!`q^ViRej1$1R7m(yAx zA|j&|`$XeTLP}1S`iZ0SS3VBJ9ZL7fc6W)zrXca4%aB~H#D!&-`7a}gu8>`}PbH&~ zXRDOAMJiaTBR7KwPZRPVxeeWvqwjtlXUo&$hHZjF8o?KvPZr4@Z77XrSvZbnXM#Uh z8~;#zPi{a*&I(Hy{rX3}2NhkUUVd(Rh*o7gCA%WE4OsQ)<<&x-b-VyCd4MUpejLbt z{@!!+iELOS2wm#R5TyelH87%#}A%@9Q9kr z5j5!XHkyLUVs!l8PaW7QVbwBOWbGPd&7}TES{+Gf*9FM^Gtv0A6JslURDES_^Re}w z+)^?D%zgE?IJPQb%?cPPp|W>&3*6i3wqraNlm)*_vzivQ#LKLkn6za&=ioeWi3j<) zmI#vh{4@$?>bM$kEr;PeDw5QyJ*eV@(8CLe za+sW*22>MNs&FV-{sl9ig@kQhc0SF$NFa+D)aYXw>TEEU1TLZB&kinJ7PGg_O&J9=?>ecR;pN&w)tY2(R7!s#>?t?J9QBaQT#y`brVxLy+8oJnQ z{vt52uvzTL=hk_L@~velh-YXm&T#(NzhYE!)K8-srGFtu4pVv9`M!B_5#eDPDmgh) zCLDCrVYp6qNoGR4d7r*UQ*YRA4ylyd4EOnajvDRZhcaKQLVrbFM_fay`vGC(WCEH` zPC#SkV}j#pMa_CBIYItCH3-dQx{Cn(0YjqOx!oBF{WALH_~E{m4YM1@fxXj=v^3+M zDTIf`W_T5uH&$>72Pzwb`Xq_!I-8*_o)wNp{W_WlTtMveHvXa8iTTNCNJdk*D9mg8 zfi%(lpF}s9d-8;KTUjZ`;9@p=sxwUPW~@7_7@v}J(JJNBMEM!jt7=vNl23kH#pXw{ zQjCCX2ZW!gw&WY)-T}_<_%}9qF#RkNDW$6t6%fD%#;8|=);nI)4|X)AAI1Kpo;(Su zn+XQ8g|g6-_zf}E!13}5SoXswJUv@BjOlocBe9k;eV4MBTEU-&GDXRHfniW~dhTsV zm-|S1#-O}zV{`s#?2hn7vdrXvlLFeGq5l^t&~YYEf%Sd%iX_$+DT3#S;2$pVa<&$| z(eSf5E8Qsa`4>R4S%SiH_ZP* z3fzt(7^WkTZ@iNN%o9SkOUo`~2`4b4<||(rWMw#NxHdUXcyNh0X+np%`-J*S2O3B7 zwYAYn7qP<`3YQh>w0aCQH`i~flSt_~ zpv)?FwVpR_J5|@aeibsv;2FRpn{9eBQIRq4-l@>dWL7rirg_jl6^0KuZnT!Ng`fz- zl@Mu_IZcO6*)}RUF16ydQy@WoUVsbk=7rv=YesA&U`c}A^qZgR5jxr+ldFiGuSA^K zq+PfA=FFX#k9G<*UF?2pShzy@?~nYT+XISr_tBL+S|-@TlpNtgz}gT>z|x8la?FEn z`O>#NUnzB-K-_-2^(hof!6Lfj@AdKZ24($`!H_mMJO)ZEt6 z<344bcE!Rd{rg9JdXH<6q{PPd+2{hGM)ZoF>jB<=I2kIA0SsBM#oc{TzQetz=s?Uu)$8`06@E;%_4G(&{I6tw>jcJEg`u@$2FwGm-d}9XL7W)`|f;e=f4Xk8!{24(U zd5{u73J5jm+BRtD9dbGn?x63BLCk-LqmI$H2yk3_<s0! zjvU@>21^jvj~C|?!=4u%7ybLg?&(*=xwZv=8`oIc?p63_muCzoJFnMp7jWI4)xaPX zno^-;5SAr4>Q%(ri<zmv)V9Zi4wKzCn?`s5X|s(qJPdDUhKnd zvv1q9YJ+tzN^VgfialLrJ_5el63YTqXe!=+K!J7q9tvC-DLC>3@hqD@j0mhNShV+e z>da>-*wrHwV>m8_OO#wq!%BrQdi~_nE7n}PXB$(5p8TRuwX#qM-x(}Yw;rI;iu1AJ ze!2femBGZfB)9sD3YLp)y@KzDd4gH?n2lr?Shx!52Ootr%Ms}9n%#NrVEm3@OAjKn z?1gtiXS0p$foJ-jRKi$1>L?6jWab&--1@=X%<%(k8&_;@&)~^ll)rw=I65)RT z(|34?mGgs%@c({JxlIl`@3-&(hNO^HzrfKFuBpRp?_z~vXD=~!B5qJBfd_!9bFIPg2Az`|jz$-;3GV?&PsRBssqrd}PoC;Pu#**1;L`-ka| zY72#(5mGp|TLv6~7=`(~ALJ#+LvTH$qC#{eWrE{qOYK;KfBbh)fq?I#p8>TRM=~$d z(;iZ?n%V-8*a_N@D7e9lBR}>@JWJT283Ov^?ohD+Oz&yv`We*9w=*BxQtoW?%%6X zxUcf+YGt)?%5IjB=co;ZFF8cLANCD_!CHyqQ;>uIa2>F!zs+zC`gfCj4Z2c@0d6B> z{<-rIo5Uy0HpJ}z@tzZ2LiGU6Y<63$?@o*0SIBhw+>~x|B*->ZXVp4AXa6)LfLC^Y zL8j69%)Fi$w5#oQSI0lA#VTJ1yCFQBu+4WG=RDJ-&GXt-o2H{xo6|w_l7ZmhilvX5 zl>E@661Y2h)go-yP%Xf?VbJuO-tL?Sxe?ZejTD1@QKbBC=nSRj$;X*3(}U6IFtt*N z_ovLx#g>bL?cV`jg#9oK3r34nn*{zg(glP~1Y1-SqY>pr6jBVoRIOgCZhkRM_E@?< z=o{R8;<@~@v(|AnI6}~|M|xs=Z=kWh0Q{RmDzv{RgSI^b`)HV67iyi?G(N*0zelk<~H6Y&4=1ue$l3`N)v zJkPl^$ecPW;4FhlT=&!Bu%_@Ca}nT_u!`jE3KMKgUrOk*5_<}) zESj<>)j_~t7dZRwo^--WQ05%{{}J{Ed`4OhRQxjMWR|`Yv`0d}w}m4vAjiigH1yg| zOrG>l{Nzcm=w?@uek*TKEk-;&{D*EqG?upocsNR(cXbfBvG`17D6m|c(d&M*1$@`a z#sWOo2SI0NXUW%jhc`agAE!!7LM1Bqf7VeLGzIR8y)MgDJyg^Ra5;AAhWXAWbQ1bu zpMlmBwlP*fvz2FKoW3y2SszcEpNogD5U+92LrGB-1Z9M&6;b~flG!gW3Xjc=a=g}$ z2*PRdf8>0^m<;$U|K_z#f#*KvlBX;c@6co^`!6L=IYT?0(;n3u{DSUq!jDTaD|gBz z_<5|-qnpuRHa=<|K7_{!;ehW#x}j}sOuuPzU;BVMUQ)0EocNkEIOe-LtcL=zGH(1q zgHCQ|=+bib79+&j!s9fyb1NU9gM@F+c5bIQvvm=MTaC^TP6ASy6?B+tJ%Z(2!QYWR zI2A|R$LS;+X#sXA^MoR3_j|lXs)>OFH9Gr>Rvo5||tgYt<1{cZeJn5sO$pk9bFeW!7QuN7q^?$>to*>uL-NYBDLk z$KGZ>iS$9hLaYjnhgC56-Vr|7S26ZN++B$2d7I3BAeu73#C7)-6v)@Lf#SR1KfC?U z{_kEG6(hubmM48W74Jkpfi22_XQHPbPJL`mNrhHCFhV{-S!lYJ(RYWXlI9lz0|i$Y z7MIv$P!!A0^)#~I0(EA7_G*Lw1Pr~X^#s!Z}P3mu6OQ**Sc1Egr@B92{Q5hd-U( z{_K5pW+?vOYz?78laKEJ$<6LGQ(e=)9+0vZh?X%xcKUp&Go1HpyE_Gi`)Rmlz8f|W zQtA0@^?M z0w}X52%pdhHJdn@@*wLsdtdWsWD zV4|kQ`SoszRocY~$4(!nQ6v?Lx5%Yh_PsfSO|jCwhMh0#Me`f<_7Cd$W%+Yg3t9iS z=Q|fR)L^e5)Zo-UF!u@Z%#ZU19fcVhuiO1@Rj)Yzi2# zi|5V#=tv>=h;3=Nae+jQGB-+i$W3o>t)=X%+DPVU9;GPK-eDmTH6qqFmv zpA3^LNx16}KWlW3{K;ZW&-

&QYZIyCjVzlF#0Kew}|iw<5)x%)g7+kh9{__{;Oc z#t%FDE!1+D)S!dY8fGBU$l~BM1%+tadrwIxtSW&Zw02@B_9K6c&d*r6+*z)ap9cn` zoqGPe3qJ|MV$i^KeRDfCslo&VZ&`z*`YveX#%k=cTA#gWzj;%#lU(U7hGy-KV&c>6 z#hY_{-ps^YTVc`bD&B*|W7iZ$55Phi^J`C&!-RUn`W=gDfLos_z?wr%J5sIBhJxRT+tc~CHbGZ?yZZNl zU}5Vf+RZWf8MAN}b&MJJ>t9+WcXGlSErP7w66ryCF=zsBVD^Z|`nT)?f8xx{tdb_-Lte|#>?1B6MkegN_JRdbLpVrpie zl%q)}yJ&xF%muEJsIUnK+DEL=NETHzH^o>srsJoz35tmSk>D{O5t7H6Y6&s*Ar;Sg zDi;>{GOE)Bc_DA#6cbls+RM8AZQeb1S`WV}d|Y?`K?7a5Lvh1be++M(ILc71>*YDW zwVU~S6w|%6Oc{F#LzA0`qEIcm@eiUTZSyK)Bb4O@5ud*`XOV>;?9Dvsl&6GnT+2w@ znS-~G{WG+-_IA1uncq|o-k2eXH6-G&DwjpZ$8qu4PCe71nSN?yym%{&Y1o@ti0;Ye zJ*J{&SsY!^H!`~)ik)o`Gzl57q%SoaSAyKe*1>)n{Sib zfY33uT=6`@Sv%JhiLoDnqsu9o^k%t=L`va^+K6TbV+{6c&J+FJp!?@QO}D5N%55+> zCE6-_g;H93ta_bx^X{9HlNL$$c2QwW&0d3Qw|Ixm_Kyf@j!QZkF_g(^n_zO8UJ~ z#bRL}KKXYYb>U?zGww1iRnwbLzmVJE8HK1~vHheAz|P5iy%$tf<5H7y^B(M@g}~<7f`@O$o+`b& zZqSMtK&pg@C7XR}>F3yGu9lJXCf_2;bkR<~Cg;?RS#{1C1-KR*u-f@jn%=X|SAd92 z-^P#2A7l1KXcX*>Fv=_I7t6+&uCW5XScuLM8|Dtv$|*&_qcL%w7=7>QPKpZ!(8mLU z8*ovtu(sLWLxCr}Hb43Q{wmG&EPmpx*c!oydhy>oK=ZfcoFNNEL`Ey{9lypw5QUKJsAUy@EnL_`-Lw|P(28P_vAz5S+Sj7SbN zAj1@cMnc+SHwbYtJn2ZWp z`Ow4z9wZ-T+!M~oR%-X{dbn#Li6m5AdLcX;z7Y$7{wPIG?tYFvCGGknxtc>&d0L{} zgmxz%6teSh1&71pZ8(WDJh%LYWT;48O9KtRVOMVJGHU7@D09Rn_$zeaj2PZt4wss-`N*p^hT+48U&39JuU%Dtf=z!y;fEnN81hYmq1 z=1{WMJeSqomy4((@qfqRGFU(`|8UpcFiT)s3F7P?rVUfaS4}T{MaeW=b$bok4z&p* z)X-fD{cqV}F-X%yNv-=OCy(Geob3G@tEc%ZAtGL(Ju57M=If5lLSx%F{uHbUaUR364l3J4bY14l8q0xmG9a)7HCsg~1?n{_W za?ej;5jDwbZ@@3=J^}2VI;orjRM*th2tC!rEn)+_dBYCC_T)gI_w8<{3vr*kSgY;X zIoZO)$6)AZ)LOF|SLwjJA~f>ea7n?P9v9{5+gIJmjDL$=D+*iYNg8WBw?D{FI>fd7 zqp&~|DkqO+@ZHl5;$8jX*W!952Ue!QDyI=d+S71M|1tiExO=d71z)u3R0#KLRL};A zEaTj9fE9dn#FTsXCihs7KMhDsX715=E|S!jQXvnQPBetA)YUpK!DB6fhLQ&&EnmG$i8I@;&t`>B8?rayT4VS(r+JpcuKb+P@eQ zT3?A%CAviF`!URH7`k;2SDOgD`bm0KLnr)yn&7`wy&OkG34~!{ZDogXkUx<2lB+VE z-{%y)EKpPxm0eW{7RqOMoo~_PO-@m14)F)k$*4K==@Hvw;Bxgy33)(M@)fmB;uMK-S$z1AUJb` z2TIP^y<_R8zz59o?qF5B?>hn^J0!}mIfHWv5fUcK-9Q#$D8a_I{CT5Y*hDb*38k8( zMW@6N-j}u4B|gUShVD1HM}7lV8GSp3%*rOPB+jm~LM72{(RqcVPRvp|C&z#@fo2Ua z*e$K6_f0aji!l;Z<*b%K)v((lq#Q{y?Re3%V76NGXf7787P%%C5}NT(pA0Ii&2fOX zYd}wu{j*6I=F@n|3Igav%JyA=ZZdp}HInJC~0xKR$?{|p)lQ6s#jToZ3%oAQ5zMi3P;5vqe@H{JGU1crY|G#r&c{>b%djIoo8IevzF zZ-luD^jE?F&EI^&?}sce2oz_fmtR=AeJ_~PLaz#u27l$q2IT{@QGf_ru z14)_{tv5YFnA8%TmAsCp;+-H}-Us0%B&&9`E6wy&FjVbIy~R&ctOLBTfTCn&;f>ts ztI4{2ccxIZC6B|8<-18y^gX+EOb7HNPZtd;BnST13=F?vhe&wb4q3`lV_mY%B3*T2 z=E{__TdCA?##J@^lCe4ytn;4y-s6EQl%JDiMlKrU7BsrUh<>@5?eUB4A3s-3J9t0I zg;V1qM9!5>v7Dhz=9|lNI#k!v<92Jkv;h~xy6HbXY6;wT%8R0zrobqO3j-u_5;u zcYQI)unWLX(tUZO@CdYY?hXNl+Zznm+wQ&=xPgN?M+e$=c;1z1x*5ENU;G=iEhlIB zO@$)7BbeyUB^@!gp62TQ+|E%=mX8i@zFJ$@eW_rWQw1y&>L|4;4dp2dE7Wic#nSU< zLyndlt(aX^u+k<&Z6@QaCgUwSwckFg3t9E~1ej@4QBrB!Kxt_X$RJ!O$$uw(mok`_ zX?*?-1*e6TLhy|kUaYC0xWyw{q4xOvj;-US|C8%X6|Y*viX=u+k4WGSFV*fY`lAyC zV}gq7-fb}bu_`ul_Cx}H=_Vb$85c3jF+Ba&T9y&61Q)*mSCR9V6?9T7w5iz~`uBj# zTsE4f4?TBhq6($xSI)RDwhZFaw2)h+-lylQKxdHQUl>upAh>PZBT?9z;mDZ}L(H)7 zDgfLizL3xS=#{YQ}@Il@na|nvI|7?qHA$8_`q_iehSPh zEWNDdp0$k-W80C*B#!c$A&o$9!zctC5oAj^2U2QVyc;Z7Bue#KUd#OaAo>$siC*H& z>-OXYF_diMQ&ox(p_Gd-D77DmiQ2dESjhzzxI z(iG6xnB2L09wXmio9A}Fv3?}2)yBnGQ4NM|<{_;;fWfA4;3KUigGY2c4Erw=FFdI_ zFl?~d1?cVc;D^AjQ+_p53WhaY-Ra>Afz6Y7x76+Q^s`5!i_oq}IL2Rm*(3*ZvwnS$ z0kWZ0uXu>*eM-$kh)Gv|b%Qy2GeeO5_#375Ad)^i%rf4T>7~}e(CgS}@8}|idj7Bp z(g;_$Kc(_JPh*Ys}&)XMOP-~k!hz7@rbL6D58142}n7s{_1 zGMT$3p89HSwAp1<$-Ab|D6w`E2Q*4vaH5&m6RTN3fUWzF;xCD0{XGT+;7V4eC)FCo zw~|4~nRLD!3Zm8InXvo)k2*i6k2*Ey{U=R z)*R1FTAzdbstc8bq&CiZPa#!!vzpB;7_;7N zKVl~%eV5l4`7ehgTlBy`^aDi{8)Hkyd!7st)JmG(boGB2&n5l8_tyZ_W;RP;+r;~+ zJLkUX-VMkb-Wvp^|IWpLE3l)slronuHN}$Y4f<%rGrI!9VZHxjeTvW9dQk_^fe%sV zzY(9o&3cNf1nE_f-I&^zmS9IXwFR06+H8yb3%6!mE9VVL?hbO)5$CgtrIRtHX}jWy z>6(66Qk+<+WG|LopLl-wR$GiYoNJ;irXw0rc!{hMQ9CSF1dg14Lo{IGnGZ#lWo;h( zaXEDjPs1+w0Q9K_*IxkZ!WVC#&O3lRtz-mYzvp-VgyjXi&m~(%zv0R60srG^t80jT z`d+|kx88iiQ#UIj(B7ai2K>9Vx&dX#@8}_@TZa6kRr)5_XNpaxFRYudu!DSkpWaEX zG*oNN84>*#m4waImP)KE=R@SmjcXL|ASKlw9>&(bL}qaR*Kqw;5YXn%o%pvSSIaE~kTwj-Z_tIfyqTKAO+$Ykh&JJTzLD*0- z1jT)qfXxkH#lqD65=26B@RB#Ic>?-=47xhdaO+!&;j4YAunngu+2j+hnD_eh+bWyF zyIR@p*tpsBCrscEeEKh)*KRI7ZS~9W>*ni&e-kOF4d-PHF#Krta8ZvkV|mQ2lUm89 zC9r?G0NqKiz|c~0Kj2iI@(LJ{18>`;_pz_yDx_7=_L%7Ep_>ovs~;_&EJ0Kvr~6t^ zIsA?OoLBd5I`rfOjiyM)yVg5TB(5o%P@d6ITAJ>i zfB(898|Ak#YnLFJthZ>?57}9bO&~Q_cMRu&nA*dOL<~xGbZ=q&5wy+^C8h<(sRnC} z2)QD!APso+p*N6&!+0l9lk#Btt_L~>eRtxjUK<&v#9t;nFnj#0Cz>^Rdm4-8#hRu4 zx@RBfRt-p1jqCt?{5h|{)Y8L$u;Od0ThJ;>z8*p?f{|$<0+NqZj@HwU#ptq+e~7PQ zpNI(?^H7+hN<-KBJrL^2dL^1g&i@VX0Nd~ z5P7`8%l*}yDIeMO=B;If(B=hU&RprF#M1;(E|N;AdSHmfGXr!WcQO_Dprhs830Lg) zP9)tXeVj~3`%yf$N?%B~=ByE9^;7fCNk9de8^W_V>8~nr$(A+EvHuVLvrvK-n zL#Q%yD~<0^gTIm5xEIS)M2>e}u4caZ5%U|X>+Y=z0pGa3fnPxoxxz~z_lf=|5Gcdp{)$R+-y<8@UwKn%Wxk7`x@r-rps)10mLZdXA#M zd^VLqOs56(-OoWSElSVRM!6X~-CS%RxDkRU|GMogp0rK`l3D`8i|-sa{1WJ*+2$HB zYzBJ=db&3l0q(wkp8#btvuacca+($HXgI?f%SM(UPFsC~(Bq$G4c(ND0sL@zFtr_c z$t@u_I_hGk`_V$cB|gw{TnCtJ{+Hxq{~i!fY)c!KTcQ2nmOhz&|{IN9^DP-BCI zrx|1oWs!Ri`t;OYg-!rO@=+eVbibA?0I4tAJ>+0n&u;Hs=)}}YkJjTqBHStw)sNFh z@LbyvadAMr2PgFv*c4~H$&&}?{rpplDF5}YK}AI3VqySxpEF)pRH^DRlBMc$X6Z$a z*k`+`CNCu0zud#dZ(CfG<5WXtv+6OAajG2Yc>H4z5MTG_5(#K&-FpGCpLZYLO{fF> z9}pAfxgr_;y0v)nIx!$Jq$V#(?r+=h5SR5(U}cTvt$XTV^dCUw3GzOGzDextq9Ld7 zwmF4%TOzd>AEs1=er5j8uG67Z&0z_M+pOywl)!e%MV+<+xtZ9d1W%_SD4+MW( z&I!uSqeXiCv^^mIQm1{kBHEsur?)MQ6=0bUt+L7qr9wpiRX*XdUs5Mfh;#kh{LrOj z0x6m9yy-{vVLgne;ew5PSpuzeeDZP4$4Ct^fKd0L&WPR1ttsJQ!1{YlRHV^u&u8|( z<}|t}8%_gffk8_oIBfZm)Sio{^<|2Y*y*qZOu=0uic>=L(2-5k_4L*`CvR_h)n#czj2(WuXr+ooShCR;_sM^X zKQuS4n{5`4s~1>)2GQT-#Wj(|zYY8OLZ%NG@4Gc#wxM3Bx<=m~<4f=!K06&pNIOvv zjvxpLYLBO7Yu-$$QkVoRG0Oa~0InOJsx8&jb}}z?->8GeSpG5 zKrnLM*%#r|EJSf~3E9d8Z~Bh+RH~j+dh(tYI`#qNfxbWP686s}41DdILJ)DlH^$3nfSLH757 z3kgVfYuD}oXnoa$_4<8h=(qv-FU%hRHYXzF`QjJL_8%X2y+Pf6o283WlHax*(1=+E zCC_K6pYCAGp_U{QK{GBFWJ^I1EyUwz>W7fPeLnoke4N^jp1ioEo^{ItyeF6Y#$FH~ z#PB>gqyW06hInyT`ubDo8}$8;>+!I+YfQ+B!}0^Y))DYa=M@hKLa<>Vz)il3?cDEn zKKW))E@mO~+vTJRK_j%Z1=uq|(4V(|dQ>`eVQFUtAQ{V7ijcQ#X8e57rcR7T-L*=v z852WLLifwPjps&bU?s@|6Cp0MA-9ISnfzCUaN3CSSe~DhSb5uJjWb$p6RH-rOnNut zXq{ZiV^!)#6oW2w`h8NlHt>*wUsAT*td?@Wq&^#BNSa5b+rfp0C6Ze7VbV6ICnS?I z((KcIl1KLKQ|2sCXCL+T|HRMBBK($#uTE_fgDgGof8CH?sqIc&CvwKZg{al7*}`(o z-ziaK6kDD<710SRoMqyIpQaa&C>tLE^Z7xtl4ou~T5c;axkbzG;3xa&xm*_&0nxMK zhT(qR%MYq;y*H|jS~vJF65V!Nw2D2uBDqFjkR)sm+G`&AFtEHfwWc}>Odn(hO`iOHnlJ?{X7(p36z!WH_X}2 zCUgcLkkKM1#mlRRYrBraEu11>oo8<-uC8nnn#&LGb1pmT}`cf6|d;8ULy^ zqBv#yY?~7ewF7RPs9iX4zj@$8rN2sIjTv(UPnFG6+}Ag+jGV$%@R?3)EDR#0 zh5&4z=VXsm9sU4|S5>t>P3JVd-}VZoeX282;hMuHNfJg-C;U=K9TvB03dMYqbN2&} zuNVd=4iCv1vMu{%K~Oi(jK7>h4aOT~G`Tdk$1?l=$Mh9z@~;YuNc?ucJAZ{VTvUax zB*TZT6FidRjIF0VtMqfM%O)b?dd(>6WLjnVo+wXRmomBoK^1+(?75=iK8g0!Drp;3 z=WxEY+UVFT3Kt|om;#Yo+@+5{?bZVVn!Uv9N&|`kdEwN6RWI^*df~Mnb5+V3t z>cHv`{Sw~t`o#G2x^ClayQy|pSr|!Iz(DnDOz3zJDB6*%Adz6-O1UlBnCi;0w3i9V zZ~9_$?6SM0iAhg90TROyvv~3^WZ3F4w%LDP>8}@~f@DJLCT_`yVa1yt$`jeidtQq9 zPYvF3Qr7Iw#mJd4h5?_-X4@<1KLXwa5P*-*=-uVRag(&n!CC`)miuOy#Z`sGn%CC${&f_OOnPpNL-|oDPmsmWSpNTNo<}Z zs}5}EV$D%Y(O{S8ixV9LPW(n4J#x%07E)+Acxq};GW308^${QWW$d)gICG+Lk!DQ> z93O=roZ^!`mrwh|(7!ynl|V}zr8aEFCMNUhURB0&gcga@vTRutxXxpE^SfS7%`@L8 z1Oqoo*gIcO{X&)tCe4a2EJb|=T@4L{Mr%>#-9t3*7E?Fqg{*lq0L_}vi;Ls=gOMWi zLoz~lRIDpCM}(9m4sL2^D=dNJCA!$7X`UUk^LEKqE2Bvy6_JsN6zP`=Pbn<4DrLtX z3fkSdKlD=$Hpb{SieD7Do+ds!;Rf7XfxPzsoRGIx$VWaUhzpwf?w(DwWkJ}*@>)*t}H(87l8LS zU~9$begMRJy?yIje+gv#>z;-ACIT^)q{~l2F*MB3+7zcONG1@0@eOW1%p}!zQjO_Lj9y65!-`>QZg$F z+K95ZBj6}CB=|FjItqefZ_oDr=nhaRXgmSOlLHuTKCFP8o!+&l|8AZ{m@9T6(4Rg| z^fyexM=$360gEdlj7H^X+Y3dLxxtaV72a~14{tH-4y*S~WY_Wa1%l{F0+JH5HAdz!3|)bwZVYI0nI z$*QEEvn^*N+SG7rCC`8rp`Qwd*WU`6Hd9Kdv!yOBw}OPT{9f1}XIkn&ghQ_i@X~pJ zf9UcjoY`Mn8&kmN`Qyg_GWYM~@@iiUKvj;Zyamla01X%>lw-H==O10j=?}j)xE0lp zPVmj9IK?LM;bjC*f&#LK2>gTy51R9L$yaEQfTF^9X-YI})2^~mf!ls*Lxk^ARxEq2 zRS)T}0axkD_p*vg5z*v?wKC^1lHXP7PfDmq2C4GaX#K2;)u&oK^X!s$OK;O`JexEe zNOUw5mCx~lK8qu2ZXK3xxRHw>>g-zzI0}}O3Q=IicF*|sF0G0t`_^cN)Fb7}DAxVb z!=gOI4u}-57<5*j)sx_|;YKa`dggMqF9M)uKv}N9;&+Jh8U|=n^AE>EGy9OQJ$Xo*%bQHd9 zP`sn};xN^wB#ubiF4^}k2Uc(E@cKYMI2&Z>4srT$2qGMPYT?~;$rSc^t4Wy%8a+#! z2zs6Xj|u?(u+?=8N6*pX`iH=eKuC?#d1cDOyAzbWn0cr4sCme6JS-4I6~wx#z;i;X zRyZBydLVOllzKXhV|@&6s`r!z#jr5u*+uyGT7y>hKP~M3^PcWCaQI4%zDU3>#Q$bq z;^2Hh_~ZN;`}HI8Po=CLhZZBZ@BcjN1oJ0w@I5YlPagHJa}3jCh3{`8?Jg|8#8?!0 zi%3q)EEJ&6{Fo%9{X|`g);v?1kmou!{EzmrlhMFW5P=!K5z*>P-RyZikC&7lb$|O3 zTD9#T@l9UD;UmXU432s^QLlk`efaXSfVMh+#yV9?m)K5ctn8f|z&qG<^mPf9bqU z(N#FyOPZ4Xu3P&%>>4$Cs}ayckl{f4g|5o;r9F=On!(09GH3CaZFw$w7DoBAOV85D z4xvEgJO)@}w)p%+{$th|GI~gkhaneMvd_mi&WbJytf+qHDVx5IE2%F7J+>xJigXC5 z^|7r~8ANm2d<1(4t3yFO@^j<}kstxy4Ec;#XK+I6t@~<_EXqRQAvaCvLub~v)4Nx^ zr!Ui4QWz!Oyzuy##3{H!KaDJ&hd?CA8EaeE6Fph^&uM8HLHBHr(PY=3-oE< zlNZBLH(LJXd&bOc(e@;F1f8;{SgL1($KR~Jj{W04JFY0;yY>BB<U8N# zB-$F_Dk#Qnm|k)^K+LD}hsnt`dTT}WAk(^DS_^KF%ATv{w@{tarY=9hi$<2xSdApJ z!XO4<9ZPNb4A>E8PXR72)lNbX&@#W``@Th915u0fYgWs^@G#2>o=Y*8QI+$ z+Y){WtA=lh(r8y0N4tD(uMxs76txD$F9<-^w?)(Qb-I~{x*(lMaq$I*4tON(p(Awz z(J&N#1=ni!l?0$yA^$`p;m=o&Y}LdAM^U)|tVwvg?^*#ihY{|5k? zKxMz()95>H-zJHm_le5YgZ|#TuA>4qrB*DO7O3jIYU9vXD(>MeXfwD?nlwq8$J6`acm zHO6)0MB|N<>07O)wjuVUM5&?vpWRE;Ro|rE1djw`GkUx#Bn^`&y*!Bg=GKx`GyR4yih zf(*O}@6xUH|FO-CT|u>bi^{FJz}Si-rYn30$|=c^nLPpw?G1vL{8^Q4N+@nE8O5HR zaVl|yE-X?8p)<(nW_iU9x`f;8+A{oU}q;e_5ggD*;vQ#NK8InN$*{VsV zQIX6@J>tsuXQ>v6Q;95Ev&dUYwjLy?11YNiaQmjX-h&3=G4&l@kFZjQk*2>OD4yu^ ze+mUahWvkP!?FL_-Yo5Z=kuh=|1)7f5efk9^Hrm9hINGRNQldCjaa9!4Z|s{@NTLT zo8_V&;SuN&G{(r)BOI7&gc?yJSPo@DJ(0iPT_R+I)!0DodQpX zlLJ%)A85~6+J#|QyD*H`E}RnW!f8S6!l70!c!K=c%7vCkxlr@C_$}25r8=QhCzR@h zQk_t$6H0YLsZJ=>3A24N?*D4_O@jbVzyGi9tULaHw>MU|%KQI39v$w&_8So;)|dPR z?%21Q0hjL=_FP!3{AK`SUk^x}hPS&$!Cn|?M%)ZOpY@3hXFo6n{QbDnAF?-!V@Sng z%0zhT9E>>G+AjpK3E*jhQoQ6kp4iJ|29_L^}o7V zuK&3_CH@beEc~AXaQnky`icSc(l;Twxq19^&lrT|4J6Y!VS9N4*znOMbaf^MCL4Z5 zW(aL4chSRlbgzeSq|vyJh#BMUt{8<-z-Ks_5g(JAu~GigGP{25caG0U-{MUuMFaLO zNOjfd0X%=-2K8gvP@F6Xj=G%RC+8GRpkX-rdk~02&ZWN$6z7XP@#lZ>eojCCH`caX z{Ll7!8UJH0k5~UkMm=2ts1oME00Hc0yw83gPWBNraD$-|e{CpL-mmD;@8V%zSdK4} zAyn|Ou3{Oo`g`?S`wI0OPitP6ftVRJJ6gTw=$d>wIIDiGnKU&mTl%-Ft{bA~aGfip zvmxrJ7c!m1);vz7P3yya5h+bd&YJdHXuyv_42cfn7yym@uUXx!*A5NHh$1pq7{_X^ zD=X2lWZzkdU?+TS1vyaatu-jmp6S&!AQYa_r8TDqs-ub1{;b9o9`bw_RFw(y|1ZSeHMfuh&`qF4T?@L;(%@O%=9$h*CL zufKKg@IDh$eLqjXn@?voT0Zl5a_s+w$1>~w@B07UVXw>me;!Zz{Xf$JI7$GZZGa6E z-(lTn;|oFo`r45Uv@FR$J~P`a5dpi?UNs6x1x}}u3LI*oKscIME}4LJ)5o^Kg?=rI z##rgVsaHC1sIK}R8&E9>$T0dW1p=i&pcDv{0)g_m^T*5o^-fNv4EbO@8TbFy^>v&7 z+hD&+{%;r^zp{`E|+pX~cjCSu%C{*B!R`T#S;d-tclPixlSdgXG$H zv$X52G+cb|bik(PofSVyPLfeFIKI0Y#%Jv09$w#B`JKzjaO%Rp^o%T@c|O7Ye>#`{ z#*@DPZ*8nO@jush%J`r2c}n{~d@}9-@o2Z^r@(H%ah?Vyt^#J1yp9kJI!l8-XhD}1;D>x;mf@-t%QzP7S~`LSswB%S0H$X zb$S0(jZdQENNHNk?Xy(l^Z-y0f7rd}XF>{6d(vU^b~NmVVO_pwd_*YHLBFfobl+_z+dAxpW2ag2l=`zK zsbch#uRuz_xf}k|A(5@Hf7&(JDlG3v8l&m1mW)v&Bd14Cwpez^;{?|a6-Z?C6|2gV zDcm2lCJCYw6Op`f`~|5=0PT(p&#W`a!pFn&gzWeqU2|sA`J@f6S<1IarrjI(#nQ!j z!$+sDP4Q#8B`B5`Yp?iaEkExiBX#YKlJRAKVh*4bkJ06k8gLsjk<`oYFxoBT(Ffr2 zt5);T{_}VB+Oz$4&kvvO`^RN0&5Yx=#saEcRY%lm5mdsO(-L8>DLaO{`UMej8)oEk zn4};+%^1rS1&GP;?kH@S3 z6%!y`^^1w3?YSd!=`wtrae%q+taJ%ovwb~0%751qL(h9*X-R9uRzgfJ#tNv_5Ct9IJd=>(}E*OZMx_^B+-46K8v5e3*0@^{BUU8AeQaSruGI+vx-r@@7*b37M}Lwv4jc=IHnni@ zFHp8?)i}9v3uB|+tghB;>oSnWF)j)3%GeMqLs!dQ{?}`-f-Ob@Oh;XcTG!4+cM|5q z|Ezl_vw*Q68Q5!jr>1WCtSO{BG|SAznw05f3NsXKa$?UPtC^uSZkGBRZJwTODWtIa zKQz4r=n0&&$J)Bb%;`pE0GmoD@>jPBUJ#En3}vBbMn3gi>l18b0IvNi9 zNoQbKYuts%(KJMut*+7_Uf5KavK9W$y@R8bM2NPTC^}PV<8sGB#LY@gno3`$l(7)$ zv(dkDV*AO&5h`;3YTR+u%w&pIk;MgyoVr}nMBdBh82M*-Xe{_>aQh(DkX&*?oh?F0 zsM{DVAv9*56b&NDhJ{r?49KN_)S@cC+|M+f3a*M`bAARk0eZpiCpa_V@) zG{oz6^N^QIU+ZJ5@WYI`D!a@n^|Zxww0C96P=L!K`C@gk#q_W~9V{{7@g)o}Ts~EI z5pApKuPC%Sip~9aWhr5=Z1bx)C21}eYxXL=G*w|vE$FS!t}9maSxD>Yoqz?q#h6BN zL~m0Rm|qkoo5ugmimELA-@4=fX=7(~z2yJq@r3n%nb^-v1z-)dekt) z5uIR7>jV*vNCUsP^7xjeqHB8;I&F_W=do4;)RY=v`ub2M*!HLdGwKszbG-E#%D{Gp zGO+Da24++)u(#gI)6{@1R0BRKs0M7I8qmodp$2SCs|IXaYQQPA$+91FDgj%lS9p?J z3D}yA60jXq0=Bdgu;tOAw6m3fT9c=d&k&ntT5Vw4rwyd8%^Kdd$w|()C~)?9mxQbT zYZcS~wPW>vnab>f%B)QNSd{j!t+jtGrTw!ePJZoQyNLF$rL}*-nVYl2TDrqpA?;sH zYX3@=U#apdReq()uT=S!D!)?YSE~Ht9-sV2hE|%D4~TU6&+5*q1~ILXueMBoM>Cl?k1(JJptys?T1wo7aHj>Z&wuy^m) zDVF_rJXYoE5Rb_x#szoBvSr`dHA@x3#i)113a`8qG5_|=wSbL1)|1bv`JY2EmbCToG{APOzE&8b^XuC1R#C=uWzk8 z{{J?%%lO~(c}o00J{kD`$++J;LPr4RuK36E27r{Bt^hdkB#j{6au{H>jHH+Q0ZYE} z_1BgE;~VbRD;3hvcjLk(H4sSuxH543faG{g@th06(4 z*iAR?4-bJOcXzmy(S2TP`;e7-XXe-XO|>a%Nrk!B!_-#YLH2zo)DcqCGcr174A#Au zRylYCq%{Vx-$vVG%N|>02gV|*UvW*^O%D26rim8Az*zl3G*h33_0o_85lL={GUl{vd;fCNB_IIv0dta=kj>9~z{raUH(1L@)P{G@s&3 zDW@U#r0&fPguIdsZCupt>{gptnoo6Goe}f}j9CCubyc?$sUo1rk%ksNB)<}&$Pg;8 zTJ5TiKQHA-JYv1K14*vxhY-`J)@HwN>a4h2QGGJ+okSfGd+{VfvEZE(1zJ&8&NqWw zTH+MfO{mkpZNkORcyC-875`iLy|PH|k5umLUPYy33Hc)xUpsVM6It!W@O1=F^gV+=yVEVNrY|NRp{%3Ik$l(7sHyr;jn_C-Y{O`Fu>HL4D z4QSK_z>5E&e^GNsVa#$M!+0iW3;GP0$OF6^wD4|lsICTWWL>pkm1JFi$>5?}`eM)m zcKjIb1=1eqvMy}X(k}!peIdXy(B}lp_&nn((9%}{l~0*$VUsd10qy*kfW!1VKwIAd zv<+3G)@bIB$Wb!$B{N?#^M9ttcmC_uHyaCp)boFX@%r1&`MdxV&UQ?`Id%ZKO$Ms`kLR$Lr&C-|dV&bE=}n zo|PvhIXiYgTB)5Tm|2=bc339`GPVX6my>A9*Z?$#*8?lPZ`_=GPe;jkTqNU*i`=<> zVk}5>o3MjCt;*;){u!oNfqXwDohy4j#N>N2ER^lQ8RDp1SB2WRXjT$4g103U$ke>NGh>&EE~>_2e! zjuw-Ca?XCSjfekG0q=SVJH%f8JnTv%6ZWE7!Av!FIqN`iGUT4JKKn=VsW-`8Cd=a# zS*?tcbC_+iERRu~Z>wbmbME}$0*V_$OGinkI~??HDihTaW7h9(x3C6`CpZ11c5%_a zNk-o$@j8wM&o(H zj&6mL0itgP$MkPZAjth*4Fmfy8V)DCLHb=cxtN^oRtA^nM=*W{@?pf=n0KKCvmoG$rCXEGVVm(LZ4J~cF2VsXoI3=-|dR<%GV zu+0Aeo|!SD9l1R~#8Z~$WH>snT%RRedQgEjRoK6sZkGo|?Er`i=G_hKF5?MMdBHf_ z!DJcBe5JDD!o|F5E#C|;E9aMhMFE*lr}F;7Ub4$%BY9sDXfq_|m{p3kF%}wYQmd(Q zIfnPIUt^L)E%vu>IZ6M==BTe7HD7rZVZBa~f7So02uLgZ#%` z&Uv#VPRJ_YNH02+{qd0PpvV2oE=vo$bnobL0t^-MC+y#2HqlXVos5@x9x#DD>KuQp z==@j1kGQZ{^}L?pU;<03!Z{{(IxvDoKjUAVka6s;bv|T=0E}L55VvPBf+y2#T)JQb z8%3v@m=V+Mj+YmpDlleIzTL6vAu(k>ky%t{2XSS5HoWY2*`Q5e3lZn9oZyP*I$}w` z-?a;PA%cfr4tl>{!rEv1z+lolxnUb48z4RtI_E>Sy^VWE5JX&zcdha6)}R3+woS4nJC;nWP#Pf%FA0>VH-7qwaV8bOVX8j2>lLe) z)$L)8fA_q6{nn&P%9NCScVTUH_2SdQ?Rz*^kIyQIOB{>s zLr^TSt#l|VHO7eJ5j*Bb>QN&4X6*DFFN`(dX@^bcPXD{cvuDrXT@z7RxO5&cmiQkl zE0w21WC%I0I|e@Tg1>>;@IB*wp&0%~ipy+)qt4SEUJvr-xxC1mgAq2$o#%3rHw$uN zc{BAv$dfnIF)WCFWG*&l57|00#*O{ezd7l#88S}TMdNHTxft)Rtemo);PPnsczC|@ zfo(aXo0X^gPsu!4m<%tE&;H%v;9z>&g-U>#5qm1oifIi>pTnD!)?p6DCFDs?W?fWz zP!LU`GRP)@RDpHixoVo~4&D#68`LMpo3SHxa2onJ;rA`~8$Z3gpJ0#je&AXH-*6C# z2=u^F|58p+L-y|JEWV|P#A)e3nkLs#wEYXN5AU#sMOaW z9u^r4xv?cl_7^cmX|c#Ig~R@oC=JdUV|^B1B>g_y2H7&9(n7M>k6Iw%`JPAvweYSt z2EA@KkhM4I`*)De@iCj^j|l@szxKMJy@e}=oQ*NKyMZ$ccDh{jlZih8HatZCMZa^L zoDKWz8tKgpKMvRrf9~<<*qaM^q+kQjJ4#4P+tHtR%VKqmt({n~c~37VAkY{L2mi)% z7|xEXM6tpr>!ZWEa`&Q}k?8mf1KQWCi8_XdMx1XQwHWM=?uHlY51 zm4p;1T=?&^XO*kVK1M;fru2I0)D?!V7hcTPuOVlUBWIMVYcy8i?Jgwd&%{zD~2O}!2_SrdaZc-MNq1 zPIAL8Dr2}oEs`rb%q=bD;2Gi8nDpTG$*!_&^|Ko*-2K=vPlo49&a`p_*qy_y z8C>eZZb@9*A>Eg~uk<@dN#8Mpkl%lTuT)zxzBxY{_ATvzG#z`Y4A!_<3F(kjJmf%e zDcS-fIcPmw6hiJOMQ{!=vUpj-{Yu!3kNvQyA!aJLR7Gv<>Uhp2pdg`y+dCr)8jTV+ zW#2F0?S6X}nX1Lg(#DgY@BKs8B58ZR2k!{U!bXUW5-6Z5+zyS%SNs+8K@2MvK$^kZ z#0y+jq7hJC;Ki#4N*`BHf|3i7YYb&znOqVHGXSQm5-^;125htEJ3UUxfIvYv@|E2_ zIUP{!!suls_?yg*+NA5WTk4Viz#Wp-AJ|mg#>Q}zqAik!nj^6`u|Y(14@-yFdc>xZ zT)|>DFpC-=vr6DZ#4Z3~np%BhSq6LQ>?E&7oeM@C)_mn3CzSJ1(w|)<$6Qn@rDCE6 z`6p=6AQK3AbT(cNSqMB+ipt&1t@l-tTfa!v{N1`mB|><^*OF8=cgqWC6lw) zUIvD7*?1;$hC)^Z3rtN_N@Pfj>X~cruipnYLMZRMSJpmY=@x0(g{|E^UkVHzN5B6#?g;lPNosEPD|I% z)9`VB-+5K7G*oiF0`BvF!KRs(dhZ{e+4S90mjA)M2R^Ho@ElB=yx+M53UWT*S{$k@ z4W^zhDUB1fXwTOjWCwKEGyAGRx16Vy|L0UgcadKNj}QAk-@q2e_BKSs7;-;aYzU*M zC391H2K<+$N|wipWa@rN#usd8apyt3Kii9>fdedA_^nng<)74TOl-N@&c#uxvRW>& zRbc7>bDiEBvUUnK_4}YLltgjYm1C(o9B}6HQuG=(17W)*`)h>N!CQ93a;=tG_A=MP zpPn*u;M@{y!Q>hbld=3;*2u5@yh1!|tbsD;KtQz(H3B}sy|(b-efMrmXUDsDi}nQa zFk#T8w`v2iCIH|h3=Q{yP5_(KW0RoWcVmEU@X?YEGfsW z58*8aC#BLDBmLZeSV9j98)f$x&`tsV0Vu&hZ)l@MV(}Q+eci6dI)h}>Cd@1;K$vqR zSC(J-ET455$Batvu#zPSW^4QwdhQ$RRQZQFMqKWqL9mO|#AKj{Y1cbud-BE`Z4Jz4 zEiy*wOR8lY=tl|rZz3}LL|(dvI!y}o@HGq!;I63N90~W(ci8+TnbR?_^-@dLX9lq~ zk`id`a+_$YU-I`98Q_@S(#eqxk^(vN+yQnN>hD+OOqg06409KP&P}@y{FGO zND<&^EVw=N!IaLc%V+8*egB__|F6xpZIA!&(*MtVp3?s}J~{k>jp(0&35AW;CHO`T>gOIjaLqY13&tLh3)&R=~ z=6S((oB1i*=%%~%yu)n6>%pQVG?d0e8c2vjba|&WbY#qYGgfoBkL{(u7&V!x*deX- zm6b|!2u4O<|Z~!p?{&!Hl=F!7-4C#)D`+Q!Pt}hR+ znj};Jy70v0Iw-RG1&%U#0P~d8+6gF2z2-z0)(NeM)XE({cUnrr)mt^_VAwotwTfq; z-1G1Axal;Az$1v^?!>wF#qriYN8JF|eI4cC8OABVINKjEVgm1HtfV%kERg3g17{VW+LLqviD) za;;N#L>957LYoIcWNz{H;2CMT?R?V-#E#iNR&$aJV^G*psdKyrjC4%+=(Y;&7A0O* zWw;EFtPT?GC5@D^R#mLsS2>|53=>jYr%@~3`LQZiYxq;FDYvSK$F)mHvRZ4E1zjr* z@w-?5sAE-_7A3>m=8=&bq+4+_bdu^Tu^VW6F>>?(`F0u+IuCH`Dja2+?80<~3>%fE z+gtYco~ZhVrDc;lr>vcU-Axm=Ghn#-A3;5F77SC-%ZyT zaDcw-?VJ`qgMPsTKgQ6{^cw!*|NAP6x%;qB6J)%B>mi!*@@*nuW1aE>nttbAasx#F zGLad{1>1hgeyR5IIG0NO?auaCC9@Z2n=0dN*)k7h1iT@$V;*XRBCyiB#V$)SiX)vr zdeKb)bjAzm{}Pz<6i@Q~Z$1HFQsO_X?=t%TwL<^DkY^_SfBb0kAloT}2^Pc3>?84F z5{?OB;ylv#DFp8sgznko?K;>C{Hu4^NR*nmsN6)j(OWPrB4K~^(&QC#&qKgH)kYhL zgMt-cFwHb|~y0W%YlNJ@d@ z65u(-6e^ziJgNKt90n^*{>#|^ZEqLx9~Sb&<-e)1pHc_MRs$Zl^;+$RtT zzfkhVr!qlTBd7YnygDvWJB$}1JN{Y6o0pUO%-`Ea5rHYy+PO8IajCLeBb z;^9_II(+0xhg;JKhnrS7+>8l_8%8*c?DJN|JsVWxV&R4r3nM?jlWHPppb`i-tU%Zc zTvkYS3(0OF*)1fyg=Dvo>=sY>MDKs~o|wdA#Lu7A3oOO|Yi%>I|JmN$STF8>i+IdA z1y2CxaDmrYPoKgs3lmT2M)pG7T^H2+ULHq&S>Rh8M2@r&^V9jBngh zMu=mbRL<+(7cD+ksMk&bf}Lsb8>Rrm->(!NfN~8R%19A=rlj6IVC znj^oB#jid3H)8kkX;1n+^eXnh-SPfzc1oIq9dT+)aIk)*KqkKTJN*OWmt|`yytDrL zPnPw6RwZDH{7)?Q!TP_pyHTwFi+BqEFMKllf8oaHd4l!ZgYKWx;R`zBxoyb~k~Gk} zs5cmPog`M92-&HgP{pI#?_71A-oMw%&TDzL@LuBa!h5Io`ZcQ|v)}bjy|^0f0m7|Q zA9J$QIbxe9Tf)_;&lrpAr99<)Wz(1WR`?2T;&w>6WhS>kTT+s9piLF{(`eT=%!?}! zMkf^OhH?{ZLkLOq6D*scTb#?F)zXrU)NxkJ;;2RiAykSGP(`75!C`Koc%ny{Jt(x4x6#D|Jx z(r5Up%qCaY5}O!K*L+fWU$H60QJhbxZxlA^J9rcNuZ7w9MTqU2Oq#K8GI5r^$&{J; zCX;6FTWq=0k6!jdzFCoPLI47ELD4C{9fz5tBu{&(eE-;nj~bvNCDLk(G(F zjI2zVX=G*6%p=P!@m{eE;qVLJ7EKN&m;4mA%3X|D$4RxK&|52}SdwQObX@eE8J)$; z&lx&4(iBnmM(4it=dp0fcK@5LKgsvM-Hpw_{$qP*tMLC@$iv!yIAfn|1VY!$JidUB ztCh;%QE~fSwR}^nRCYkQdt2SDNhd7u^y^7m4K%b+mIA0wZ&hk9?Vmq_kvR8n6^9ZfJ@(RIAZT!&Ylc=yV$SJd(E#r4A!0O|h4w$H0qb?PRE&HUusA7T36#M|Gh4(Sd)6Wa-F!N19nf?psV zQ(F{RLE+~wRWiP=fe3ydRmoV}?_kb>-v?DPo~~WSzUXW1x{9r;|3O=2rx;|TbIdoa zk*=9F(k_|;-b&|AS~E=nZ!yIxZM$zQgRR^AW7Et|XUO)i4E;@@Y7eQp-!^kytQgPC zuS1+KuE*vVnX-#bgUNhb8$gOLwHEq?zZJhXL~E79rZIp^HtS)PTEsZVUWYlWAGk9+ zmNkqT43yN477SicC77$gjwr$)lcxuRSFRc?R+3bOL3&RU2CrO2SgeRp8HT$16kQmk ziKxQh6VZg>pS&Ur4Rv@um};%G&tN5sG_x`%uu?Diw-$FPV+ASal7DD{6&f0pX>aCH z7P%SABvt~*l{Rv#l7-vS%uRC+EmJo;_jB1RSX*C&mSs^jB(e9HN*U=|3B_bz0Mt%` zl!jJ7#I#3U4%4Mxo;i$cL4H}6XHH{Hj9eb2gbqboHVrSwBDO+|@XCITNUV%GkxA-t zeb72bD8;spNTRsbS@9F!IwErlTNlhDI+x;NCBL09S&~hcCP4Cf#!HRD_Iooopsphr zVyR1{K^%3h2#BXHk^3;MqiX@l85Qk>y@<+lOl@j*X}d7aqKn8_3cIcaK3U{Hvw8t1 z%YQbvHUs?E?TxM7LjJReC&m6N*Gc(7!b#1scd|ldMn@UwCw<+dqnA{I>rllquaY?h z2cydk$_{n7M1QNw4%G+qYPB!C4|TJyUiR+6o#(Ti$=EFPDo)o}Mzxih4{MB)b=m`) zuSW1(k)uk<916*d%E(NL$Sg`oPn8o_KITw7W>h+6QaEN&HhO(XQZi1VV9cpp%&l0= zs#NrP8CNFeP$XtlB4$z`W>FsceTXOxb1Mw3UaY2#lscU>ez(Vr}c=a1yxd1 z7asZQ!iJ|VY%(gaCZhstGAghpqXK&lDzJtt$-loktS+O;s0*WY1pe=#y6`!u3m4W8 zt6yj`>cS?YE_@E^!kSSbi1&wfus>BL20%k%Io7tTNp9}>6ok!O3c{AFAAFldJ=nDB zLF*`;Q9ao7)PpToJJ?OuDRonHO5GHlQa44X)JBz3%jK#+PMhp(>ZWN1yQ!MNZmMRm zo2nUXqhjz6OD{WXyJ=d%ZmL$WjY`4S!~j4m1wE(zLc3RJ_X_P^q1`LAdxdtd(C!u5 zz2dpICocaPwY!Un|GT@s8{+@&7WlsldGg{v09&|-2^hK>o^MNU&O4=x;kAVS8J?9c zhnTT+dWFXXv8KS!HoClt&-k|}PaGrKla4B675{tM=}+2wrI%`V*!OE{j4^lp#gRNo zoLr4YqSF4YXlkh)E44R<=66L~yr{UODY6aN|F#O+O?0}#tK$SLaWNqfoS-7(<&uKxSf zF5G(&Km5+c<>XeSS$37-6o%9O_8=YFW3e;J7P=etl2;m@J7P&gCAzmu)-c<+)E>wd z^LwR7GF{6OM<_U{td-$_vX)Y7SgAU|WT{*CFm0%eB*$r2#Goc2jXZ56rO*coH%;mY zRN#RArK3qPLY7ezrL4bAh9z;^7H36yY8?zqL$MT|4sQSswbQV>iPnDUEYSrM59sb^f4~Xz(WCcSTP)VHf6Kv1?3IQjbq{m;v2 zPCCm!F54r~D}0A{5Pk2UsXYD=haHbOFmZMc2`pB`IARe>8uwFZ({k&kXiaCfW$KYh zlIoEu66;Z%8m|QsB-H`m6KgP>9CH!G zQ~V_Fcfe0)z0r8$FLpYazVAW8apz<>I89j=1?$zJHA`4QSr?GXdV*XksbZj&&!xY~ zR+<+s32%cOw|R3g6aOyp(z!(@1Ma{f1YoBbfx6uf$mOXHzjXI{!#cW{l^(r_he z_ix&_W3i<4CV(NUZ^)3%BO+en->7e}fb|Bw$jpT=s4nnrNLN=&2V~jPH31y5-}Zr6 z5KTTQMxES>!zHGw$a8l*qZBOE(-q3t!{(qaaDa3hlI*l>XkWZ$HR@ z+9bKM^u{koy^Hqf7D1kL7Oob>0yn@>*MhnAY{xMxb%#*5Xy$nbPU$!2J#k|aX<;7d zQp+$`gDsAGsWc-|pCfmE$Vr(?pC0Tq4&JMzc2&M-vzfn4p)6 z6I5PYMg*mgJJ3q8V4i&Hoa!;e;SlHd;Yg0hj15QdJaMtGV+Pv<+%#l&#AFaJ7=l8N zA!DqMlp7%33jR?p$pZCD`B&EAN=hx60B$5Aq5Na4W^(Mzm6Z?W9{wb_S7gnv+ri(# zNL#0y8E}K1ZDObs)d>Gv=a*79?RYZ0ge!i#+m6xV4%i&TBW1lDA=hewJUJul4DmJj zK9}RvwKw}@5*?N-f6^Wdh7;I^uLfeHEtjsw(4=olAQWj&h9kD^Q!btk=V#~jIG@vl zqGru9sV1@-d=ugP7+vQ(QNq#4!u?q}KNHs{Fz{=UvtZ(aiKk@Zyr-fpte@*Nbf5DC zxaOt@7auLD)yMf2@md@=-Q?mO1Qo&S-oJX|NoOGL5|5PV1rDd;{t}$$y%q=_e>(;a zzXa80>GB*yB#DdDX-5=t0TO)JqtHS}T@CT*Q3f+Hadg8&*fCrfFY!EF0%wM+v2qG4 zU0r5xG3c$m7MF2LU(V6(tIMF%!^@x;f(`53#0WmDKK(gsl{y1@GXRwy&K!qGH!5uc zBJ5YmoqMHlfl!(CA#qP17CnZ!3)_L|RxaU!Gf^gd2~BVhx@_iHjif12BKjb^(8Y3z zm)ygHOTN9?I&=y6R?37Xy$ihMjXQ85logoE!9c8>qN*?A#5EbK1-T94Arr_cAmBI7 zAfkkWqn}A7_5;Xw>6+-WDPtzB`L8k+Ee=#>c$yEwBO(}#naz+?#SXp4Pg0#kLWIXii#@pubY9wos z0<@EM{{*@Y!ZR?;G1Va7iN9_!nV{3DD|2=3U3Rk#It=D46CxnRI88>x0p;RS+aBDC zd4y{;yc5iPKD_FmDnW?WMqm+4JM!P*M9WV4o%VRfWMETrGweYJ>jH-xaSO*`*a8rA0@>bb;M-v3{E}R z|67iIisLsV%7yuCV4iEcweptu;|l+{mVa#EADgxE-^Cxd_{W!;#fjdi15mV#8UD6X z8KZyiZq0XuwV{Jqpk9m^-m)|@;95`Y;; z-v*dBo~gzuyH5khGik~vmCA|hwmzY8x6u*yIYy?o&fcOa&-S4$PgPqs1pjOxLtR9; z*mniC-Nxn_|8@L)UX6cm!)M;Tcphc??!jCh;~ab%|163;y_Z&U&c>28U_csbK$NHQ zbL(j@inzkDSq)t6ZH*Q|zzv=*S+cq{Uy+a^{*cQY>eFQ%zhcC)) z@Xxmh2(X4D5Xh~;Zm*r!p_bQ>YO87^(2Gy+RwX>Un&WR(uP!9Sbssxh!P$pdq@(;M z!B!yuSZZJm*cvz5y{r{6wrk}JQRBr^`Pb9(RTbH1i1^xa>A~{!fGV;X)Dr?-q3bxX z#cu~=V_f|`7LkbHG`U@xY-_8e39l6;pAte2B~@Gi`d9X6-6xpGqV`XQR-dcoEs=do z!i;YpBvs>K`*VbIs{W0xx=_UDps5^y2Q=hR@&?QnvdJGwHc@!z9Mx>=Rp)GjoQ9Ld zPQIg%ATGhMq{})x<~F~#5#gBeeB#y_oQS-}xy_jH&9JOz=qX#B%z6g{N*|^N*YrCg zLD=sK^umtaC-LtmToFbt9LoW2^e@;&V7HoQ5r|Fr^TgS)CVsEUKh|qA&Hk=G`z=o; z@DJpgr11hbh3wJCtI;icJD646{=u}&67aj~Tv-)bbzP@p5M{$|3LAD)*s$etp=39a zN$;2*zkSTL=@k6-=jXTN4Z54ML0f2^gbf;acyq2i{8VkWPgS6ucgWJg4XK5vD9b*O zNP%X-$*s+y6*=_))p{a-?;RRlO1_3@;BXOd6CwrHbR;#{nfP-dAD)xY!xtp-wID+fR4-10&?;r&FmO$v8fc%G4BqpGUvErwO9mTyG58x$IR zK46yyj#SLa&-PJFhiD$G0B4w;u-qWhYME8+jL^xELXB)#s=B{=Cw0V*Z{J+ZTKZyk zL@se1m$$s7&8}CbxO(}q$oLrN=<3t*Cz0b5mfa85MDKiSkArfJ`R!1g$`7%Zhxrb) za{Q&d4@X*oLME>IKtpFTnKZzFmj>QX@ZxVl1fo@31Rp<@7gR|^@1X0oQKb6}#Z}g- z7^4Uyn0;53x7yzhDkspO<7Rm*SEQ$~3fq<4GLmx#r+g#IYY&X5>8BTXKbduT}ma1y!sW~-#jxf#hi8OeA4K%U|+F(xXK)X6T$k55~8 zr30|YZuO&%BW3DIMw-ipB&U)~>nSH0ad34I>e^hH#JQCuRz4PCO7+1hH-e1EVZ%{8 z4?yr){q|e<&#Y)3vW!*ukB{XcVYF;LnXx=bnH-XbU+%pjd60HQa6A+Wk|ndY%aJs8 zJc7vxAcPWi_+45qJ^7(@J?x$0C+X)K)TNpcYXwpy2~q^Ut}?t~K}DdB&kpk7t&cir zYKh^Bq}8I4MchGTa776D15^>82N+Zll0Co_@v{e*A|$hiDB@>j5Jf28_;@0Uis|m= zlqr_?JjQa7=^Qpo^f*@-d)B>N;SMJGmCGcF4&{gl<}*mtiCi&A)O~!jWS?BH%BLcFR$$ z6qF*JxPvm#ciSz&a9mJ^cG3|*O^?iWzsA@*(?q3#}Av5k#)lM3Fw#(?@_E)K_l3d)DE7{85^>s`C+SK=i!2F ztIOhjt&xfiz!&komaw=Q+>3RK{+`gNY&Ps4B%rL#durB1lD_m`>kZ;~hREZF$?V$D z`@>>P{dML0B_^S`Fwoi*Yp1yv=;a`@SHU-B>rOz{3{?~FK;Tu9#czNvM;@_U|8jQm zhZB~ASNxSYgWYMzc-!tYXL8+v1^AECsu-7X{aJQPTkR(~iG8zg;AFEnLAi+?-zWVk z!Q;st>5xHK=Wf#Fx%qP^HAG>SOaGj>x3-66y-fH;d2G9bq2`XAAIdvBPB-O;pp3MW4rk&31lXO1r>p2fryQ6Joc_@*ClK3aW70S!F;EX>LXJp#eqMKUsmNp+Q z!x00S-4H>0=rG>&#GUOOdg&VfUG23i(@p8FYk2E^{d6<5F~LDML+(V+TzW{f5iWuY zPPr5n!v$h=GQ0Jqz?Kx7-chF=nP}7V>x__EVXY~7|>k{MeX{wpOr)SziA2~P1d^_dW6sJzj zTZ})an#3fiP`Z=mFG2L15Wd^l-#w=}x(et`)c1mvPLRRsk_Ya4w$M3qc6%i24Ihsu zX-$~Ywb2>$JU)$-DLBCN|M_Sn$^L&Aa{+))^#5Dm-r5Q9-?!EvCP?A`cmGc=6Nd*G zEgT-?FmQN~*}maHO01IXP~8E%YIaSj$--fAXT#x6RGB_d4%jA6M*`;dx2t}i1FY=` z&bC*20=9O%4i8g1plKSGb{dX$GKO{ne)gRcALN@MY<08h%c2vw~ioNbG*lw$)Z_Dk*q_W z&5c@}0kJw8TD8X(Nhs9;TjWEh&Wub=33Fda)M+Txlq@Xz^fbuRnNX+ai8!4DZTjv3 zuj|BeJSmh#t%(CeQ+S^&Xm=b8v|g1!eCo`s1Sx8W(2^JP`S-wk&WiP%U4WYfuW?>* zhI!BoIWWu+R4yBy^Sxp@r#CdCN^m*k$ryNZicT<{@G+F;X|#kH7$`eB^K>Hnygbaq zF)tpBHV^#r9lr+7ZTU-F>(ZHgN=Vvi7pf_+Xy=AQn-_z24m^Fw^d!!xS(r4HK_mR; z=r0SN`yb=EJg0&*F3oxxm^U{Yt!SVPHA!a0FJ2sW@yxizGh!A?Ch_d;C`0CgAkGax zOvm-ktuq7M@H9}vccj}^#lQmx$JM-)Q|5~noDnH_7L?#5gy2Lt%R7%Uas97Dpt)iK z=T`yKru;4-z;gruj_QJGW%mgDJI&P~74SDJ*l!Hz_YQ;_8MVR>(p18Uau9^oU0PXL zv1q#fDJulfP0$>BYmtY5o2(Lc2z)Qtw^7{NjElsqShv&S+}_0^Xvbk`FaC$@n@uiTc7ICT*5)j5v&~uHW}CCX%|5qqv(X`t zWhcYUHuA&GHaNK1ng=&qk#Mt50RprVz|FG!Ye83AiI}UcWXRRm2)WvHVO-}`qJ^4m zB_hqX5{!LQkY>TwWx2Y{F5A^*+qTtZ+qP}nwr$(CZM(kdd;ge+iI|C)x0O52$$ZMl zllv_Ao9KehU43c3ZS_rkPy>U`%Yz~XrdzwwH%_FkM)!3S?h%mNi0uPYc$2*zqs!0nLCf&9D-JSezEjw7^aghH9q#c5J!Sn{n}; z(x^=+#0XJD8(LRY?b9$D_Wf1p<_R>)2u&74oF56xf&Xjc1{JYsn;Nlc>zxA0gaH!7 znho6FWo9lH%dh1ec#c&YXk$(B-gu;#sD(O$piBhph7jkqcKm&B%|$)qZy8Y>U|Yzd?|_F?aK0N_XMoz9)jmels78rIXD3Nx3L zO^i>4t1-AVdh|98E4xKv-aPYBu+(}6Cc8y{-W)qj_7bRWf}hAysMvZMJ81=TJ3QES zDqL(c13ae1eBTTkBBsUPt_dEj7)BVzh_qEi1F2P+m6Fxkk$0`BIz8W9b9}6+8iU?? zvA~TLcz98>nh9u;m6E#$;~3eK^ag??l;C^)mhaDn<(5AI{-kFU8miuQlN zL=e7~zF3+&Lzu6%{|yV_DDMnSLu{!3Rg>fw-@yxl{_~RQ|9z659bT`MV}FE$Xp>m8!H#q*i7LH$xM`oXPmWo}1xfbbBKNlseyK2hWLXhpnA1 z9p#|m)qTkyH`526JG%br8?yIxZ7`7$aElLcx3)z0^7j5Zy^c2cp*zrEj7TSC=pCM( z%Y(^d|9)v8cDae%KUdMs!pz~O8TON!{;iepy+F6Z_qw;#;DX#U??>TCNB^UJz12 z`O1p=>^6KOL>K)!-mqO)8&bX8uQlG*hT*D{7RQ_8XF1yS{cmB2b{ zNF6DJl%NjpCoOFv!d&7sztwfgdol?WOlA!3&)bY1k`oQsR6NFeENc3=ZY}m5vp(Hi zM#hYO{k6TXmm%p;{p(_)+8hdoGF4e|vY`Z3y6&h@pa1(-A@o7`SmXsyEBuhE%;RoZ z^7Em=HxkmvK9%u|uo&=@+OO(a8;oRB7_e^aF-RCvEuo)GF?0F@cz10si79@I1y!`6P^xs~=S zFT|Oi`J^K2QGV>;tr2Q>4QN1v&m%^ngV%k4r5Wewp=6H@2iI>^!L|m4&VDGO9`XI$ zal$PpE1=v-YWB!$W(hj>D}0ebKMxd>q$OXBw906~GkRA0=FTFaTu+*z3zK@h*;nM{ zS;NzApTPnM(x6E03BEw?;vLX)@4Mo1*LIZ+IQBKIVq1LV^Z7Bo_kCI;KLm^^ zO91hI9+?AS%pF=3Ke&R00cmAp0f((2`)c*$)78vV9*Tc-`W1=-p$3ZM9UL>*4-dM| zR@2E8Iso190C_D``m05~b^qPA6`=CrD%)D=%RZ_K-{Y*ny5!v@u!%hT1A<2=)&oef zrz5_3Sn3~nO>g=kDPX8J-Ox2w^z?rdIkS1gAN!DfUu%k!j=th$9g%~`if-^&=08l< zoNlxDxE00AB-_swKUDslulKpRtjZ&-P=w!HN#yAAqcnbQW>UDg+9lP8RV3 z4LHhzOW(O|6-ljbOv5}4ENn+;^bayC+kq=TZ9HsrvEDk<>FP6I^FOGmf5GBITY{V5 z3>zK6hW>Di(@Dt2k|2FPH{HCAthir)#vq>0oOUMuGT4$sXh;ayi!>$~HV#5Yq*6N3*=O%Wz4Lr3aN%Tjt(8>UbO&1S7b&ZYv-2Yan`$jmO@0?{%g`ic zePq^RwsLa>!*kdlw1(If;lGJOQu4Ux*ghFj6xG=(Dt^ltEJ&F?UV`KBmUSlxxi#!% zM7PDPY79`VbPL#RT_;`54q&gpx$9}=91*596(vWBD=giWgtwh1zHMoN`4ew_vAMW5 z^M70m=K$1467ztQt$QZOU(wc6F@ou1ZyN7E*`Z6gDnzqD%eWfa=>+KSXzO)AIuSl> zlUHVh<(>4>=D zP9e~vZ5QAaRU|$0>JO|+UWPFzIhr0Kx@T@lRF4+!^ipy$8xM!05F}zY`6zBC@xsiu>M)#j`W!{374%7^!a;BDoz`WdHccxf~9HB zCXL_`I4Wivzc~zXaTSKf|I(*qsVFjon2D%urvFg=Yb@J?8VysTj!}}>6vVMt=fR?y zsbkiM%BqTc!kF6L5LiZ$S%%^lg3K#W7g#D3+vi+pmCRI4ak*& z$!hy&h*x`S1NI468F8rx&>c{I0q(}H0O)Pi?R3A53SU>;4?AEbXFK?cbMnNy_<(D22Yr8rLqfI8M5tlY4)8##>u^pZHJ645#;OdNj}8WO&Kn|BPi z(^Ldz4XE@hto%!OF`s7V%t+z%5ojn1^iKoJwhyq(ot_Ub6;X__A=ZtvIS_9HGg2rf zK+(83^uo&gGr@{U#_U@iCdK*G^aLkSM|AT$`#Xuc-h@kNr36z%)k>A)NC9KzMe?rW z>b_F)q>G6n@l6I;f~;ibT?Bj=n;hNboXVM>6}@$RahHGgF@iBv{8B8jh)#s*Vf4y9Cpbc<_O|DjE?ox zg42VP)aP>bCH!oRw2>PceMEVUS8pm%V`$F5Bn`>wY;W{5vm{;AiM3tGgBL&T0_aKP zn>#7K??I`J=C7(B!0=9*is_U$iud-UW|FBDgU!FytN=OMaVPajG^m1 zLcp5jkZ5^w?`;%ckI#|5wc;A)w^u86{2Hx92pfKZ(0S`4RRpEo_v3c-Kpx?sE_05q z+hfCQDS;d%>9Y_QK@@XfS0hkqVRVSJUg7khJKs!GxB>8O<^^k@In4GmqE*98&xtBO zT$5p>lfGml9^x#eR}-9xx3qgSWRo-*Z84%1qm#DYybP8)dSB ziz%^tGw0d^b78) z$A_?cq%wxkwV;l(FWG#ud&unZDZP?}Ra#$L8pdIH|8C{5NW(_U z7dmn|#vl=kZD|H(F-J7DfJG3o#)e-KsAa(WYVt!-+KT|2wwPDNr4X{NTD6RfF20J7 zYz%4s0i{hxls|~GW@p2}Ja7=&onbm2kt`Re9q*NNT!$EChvBr>A!cq&n%;o=5((`G zA1ph~5Y=8U2-NVCieZdxpJ~;JeBFEqHZJ8Bie!C8#Xf4ycwkLa_6Jcr%YSIIP`8ST zBkY8Jm)Eh)!Q$;t3=%}pR9 z`V%Jov_if7cFgh>t^?eG71-=JSGt2b&TuvVvTa#iJ%lMcDi#>*&Y^H!6DN7?LiiKk z`E0A=OK*G*+t^2+t2RzQh!?iS)2EN8s^khqUhzh4WbbCH=XQHdn9wKU@$Tlw$G6P9 zAa$z;M#+oU^e-kRpVUVe$7^1kF2pp!3cwVKHH*ZPC36CaF?+5UhZw(w1&xAsWLfobKsnd8s{S@C{VVWptBIeIQ17w;B2hj*zVu8ymP}sSOyCtX}sg@ zDiHg&1&Ze-hV=zo&oo(=sSInQa``lCeq7r!nU73K+u^=|<(?J%JNsZ&PEO@UH1(BR z5J_5u;^uvy;!;ItZ>kXuQ`Tc36tzj9|7=A`!f@F@NuqFPI@7Ow~JI(QP8}EKD`{GiML6kc|HbvMY0k9kg@1zPi*UudC@ar*A*nPN)(BJ zLAfrnLvv8n%v!SWrauzFMVT2&j{g#FD5Bha3$`SQ4xkQZ2Pl^XeWNJZ5h{>*PBHaWFq{%@nyJm-$9*s3 z$+R3vx#kz=0VrptOocNhuloEXp8$*lLaaGY^eV1@hcj?Gh4t&M(EP zM_6OV;Cy@ewVw>$Oykj>Ab6N=(#{=LiI8+94C4|kqmx#jrrr~9_cSYc2Z>Z2$&G`~G? z!GPE$cna(oGb~oh3@kijMi#5Pk`TC=rMi=JtO$fzE0%(PmxD9mjBf9W0BgKvJogJs zEY{+D{aGw5gWqOmX49`p91+)nEz)Zh@xpqgPS@#pibDJw3Y%OAyopS%K$*?+0`N>i zwa}|c6~21DcSxc7aL|3Yy$gFc(7qvtNIB*hB$GKv7lM!<>M{`OnT%-z9y-sc8Khl zgVXouE7SE*ropU1>8jH6SauGhKr>$raMq%*AUAZdx~zK*T(=P4UJs{uQ25TEe%iT*$ZYNxj4lV3lok@NM?;a`@es5Wx~)Jj%QNAXPdU{9%H) z1>XbO>~`Gx_r0JbZn-Bfe(^G5Wu>P=T)ZG8faHS)Ug8M{QNGWlc;t^6M>21S7z=}< zc3+!JB?B*5cTeQ-1BCClNuIinZw~E{1;M#^hhBTY6~~Q17e5yRQm^Z=0{T50wJdLH zmpNtomNp?;#)X77z|`@3h+O2Su^YDvpt*@13^*0c5&Rj%%W}la=+7m(5Bdy!P8nka zm|D9}yxSU*a|5ie&>nJwxx-I;l@|fjko=a=ux^pIV70CD9~~ zO5Culr;Zp_YlC{#ik0Z6T?bjO=pF@^fXbP+*J37wXWff$U#dI6#>NKi3Lu!<{m{2k z{2#|#<=TSYo8a-ZyJG@`7O3H_ zZq#Duk=Ds35Pp>eib}|xhF;~Na$loGOg5;(f$m>kB z&XV-TFpV^~_1oY6;dV5dT0<={yylkxoTXm#H@ULQ=M_M7wBS!?Tg1DD#lmmlf^26 zc3`ggzrD>;`wfeYvSz6#2Wbp@_u^elC-PH?{K|Y@ha^>nXj`>0uAaXOYnMBB7FM87 z-3Zm4LMAaU>p0ZJSCzTv>uIW74UWSmP8gXw%*Y==a%+&j5mD+oulPqVeo#Y-7Jp$b zE5+POE1GJ!s++YSGBq3)4;U&Bb$7%{48?1HdA}FjA0geE)ZE;&*a^jvCb70owMj|e zn01;f{b|BkV59%aFk&~7MPL>)Qz_~djgFWaK8`K7dk^F}f9+i#Pm2PO@P@qnqdHsu z=Yot-31BeHt@>6NFKPTK_f~7x#|v$a)w57quP|UHYXawNRX}sKxby5>i2~Q?YVZgC zr{x8euGjJO2f`RJDl=&o1{!-pvvLz24^70{gWWb@S#6edAB6B03?sU~gb47)jj~W0 z=HeQ|WkawOK>P*8YOD~Ye8rBC2qh&r2mKZN3qz;huiZ%_G1#MxQaw$Ey~rZYYsYnr4#-aWL|IZtUCUQXg{ z%BjKtsj`9v5&KGsWsfrcXpg(^eWFiEGoiGr%!ResnBhcjil_Wi)SlaXc`(j}$!}r6 zcj?URs=5THAO?8&K~n&uIE3EF$?acGYP4=eN=Rsm>N7R5UO|OV0itXl^X7}|uQf20 z?kHw+@eGo{vV|To&JdTrx~t|hoi=SNKZ+wyK0j#L0idab*yE6?=6F%hl? ztZyjJ;|{fVo@nL*BLPp+0N}?-u$vz#@@pS}I?nt{m}Z?Ov@@6uf{n=cfo|E3C10Y{ z3ciw_h=M-O@4Ud~Lvx^P+Z>R&_meX~7G0qmS;e;_Z`%al>7wb+GmZQ7Yq|nJ07|3D zH$75Wo!1sB{eLa-hCM ziZ>_xPuJLDu>zXL>B1}p*poaw$&HLMyLqBA(zRLcpKegAnL zZ+9N=8c6o#iu_=wW)QH>YDd>EUx!b-QAAFoH=aj?^dCt0mrP?LUTL4G+~%uZ+TJ^t zxc}uk`-afj+3Ej%`|@$)VgI8!lvo6iaRyB00nOZeLvn@;&GF`uq}*=iHQE&%W=)>4 z*BbWQHwCl_JPpDvAyAQuTu0Yp`dBjV0?C4x`ILrh#fv>#g67s`?5-q5?An+N+fH71 zYbrF`E>?JFI;wuQn9P5)$e(*Al|3~B)YatJw&p1mjyJPQC)6m9tow*@(7%SwGMXK$ zmO)Ml8PVbk!0}`&!FvdC$7{iR#`D2@+7W2(R9OUIybjB?5NN6w3UWxy{5yqVwvLD<0Gryo&_{fmoteR3rbx3F7Z&HA3a3>} z7qGG)xlR!a*Q(+H^$fO=@y{n9NgJ5++_qWxj|s2H?; zo$ST^;K*$~(0@J?E8{V+0F&C{*AllNF$$>*hByNl+7ZOLBp%qWho{+_jS8Oyj&?2( zoo3LuyL#?)*7gZGrE0`qS1gZB#OGICm(fO3X!k$!dh8u$ulV7HJH#U5U)wj45s(2m zH@d!y=1JJU-eq>uAUv$AR9xR;!YQQApX8_REC`lIj?Rn(op2mG^M8!?s2=Rx~i&P}3??E^!BWM5x}9XDjz|!*Z%6bEx)e4_7Z;{#SV98#PZ~^u4uF1CL4%6k>xoQ|NiiT%7G$0U+wl>~=wx?FBZeY<#AB1^HR!|qWEUvA207c~A}a2Ubk z^8d*kGXwl{u$gJ1CR@N;XV^1$JE9s1Er^fMXoPg7G$5=+N)0BEx{N*V=06(>n93M)}fBEsB? zHW8&KEUhDvCM4fK$O}Hx;Xv>rEX4*h8C!S9?aS9gH|eN>Po}V1I9FYg5?E^a6u|qM z_z-*mL&2aZScoN<-bSH&4fL4d4eSz;)l(`RdlzSWjUTJ#4P)3?>>W(tl-8W^P20|MGSoj6VU!laFf<}&!fdHW`#k!- zS4zLrU}a1|ay}(DFctRhuh}g2(O(Yi82AnH(<2hpHpnv_j;IKc1!YNOK6O&QYlk4roSyjGBY>%dPJ<9m$ ziKIH>!>3~!V0g~JVeCi>Q1sR~y+E4vb=FqQ#mQfs(WZ+i?)2xHV?>QtOR8w+c9K2b z>H8UWR7|;(q{_BptR|Cm^pgp#`jaa0h7CS#!3Rx?x6*Bmfl@u&8&Sew&-JKkvWUI5J=O~`l@(!hm| zIXc@Cy*W`l_Mjd3F8*(0C(71UiAaA0T-%G_>dX=Th>x`3nVR zFltZU?nv`_Q+I=OZ;Rg=uS@UD-ROKhD4!o4S46I_N9kI-u}CDTb&q_m2lERj;^Xhb z>2Bp5GCbmNfx6W1LxBBi}FzZSQ-G`ZPIZzY{+DInLTw1h3j&fNpqi+WVT&xWwH6|bF!oJ zJi`^`SAAMW=13;Ab_AYU^6RNo;1W!w)irtFiMNLmx(4967~WTlQ2y4vIsr1O)spgC zdrtrj-`z&PMY~}+%%tDow0I~W1ldQaxUNUR2km_Ac<*L`q@||yBDZxTc&?+;far^< zW4Fyl{|9pWAkcZYpYh`3RkG%6@5qIKGP-uveN-({F=B3F2ID@*TOEo0+&@sa;}+C^bOgOug>QTKF!ySsK3}0Hw_o1C+LrLS zo{v778lfnjeQ;7&jMcg%I5}KCe<&ZTCL`JJfD^jGopag9xfE}_Y$Uz6a2UFDIv)n%}q4C+})m+^hF4=xPzNttMhY6-n_M-bXVA#0Zl6kEc zpLN0Csb;)MjC$tnKh$(PPrH`tkh5+^Sm!A8KJ7Mb z#K(;+hkI2T9m0n*Xpc2&_Z{@U#>Z>k3$5!TouPertFgq z|BNXHB`9A>XeQM0OAw(9-Q1$qL;mJuRw-qu&6~vZ(_%}z7_SBWkf^;;glKL>M zzmDh8tDL8htwi47?8JD&Xm=z&qfL4_Y{rkXBg(56sZdQDC(gTXrXQ{JT zhB^5Y$w+r5#0%K+w?$c8;Z5jT36hDA(ke|8Hbl!iB2 z8ws)M(0?B#Er^bhIWaQ=?@V(`0QXTEzC|~L4kf--@!?-KBQec=5jFt!4&Lc8ezVIz zQgDBP(>F`VUbD*=dRU#Y8yq4zpR1OZ$uY>mStXp#_p9T-jN_OD8q5`^Vu+}W^o)u; zEM&uQ9zreO0)YtDulP(NLE@qS^^MKlNC&=E=r8y%?j|FESqc-cxObC3xL2hJ=zY2- z+iAd*o5qM71e+{NlgyoLn@{NT$9)ZU8!+U>e;dSjg_?u6$Z%WtuWWSOwYs)|ppjN< z+B8!$vt3UkHp)8E-O+2xK2tI|3O7|*Q)z0IG_;!=I?cDiK{M%tyh<@stJ1hqG&QH- zEdQWW_nPfITl{IQIr+EGw)7j1W0;h+u6H{JYx7chSGkJ!a3 zj8Pe19WA>ZThgIxuSpIkHNNu;ckjK+p=+mQ34fC73Kb0{N(5c(@=7(q>+_S*6 zoz^z$RwVviCFKsuZf|zt;pr?H(*a590ZQ5iAmRE=eB9nCb%(oG=;A*&yzUMq4PbbXHLHbFvSsI0?b`q*}?#=jqNQ8TLAR?qEFu< zQUCEPAjVO3dOhd}s5|T*P&@*3GGO+Yu~)tFXU%0ebjRw!VXucR(HsvOVz>jA1^!y3 zQIDl(G$c|Te8fPOO%<;bCYMh`>3IA-H5ai z_afjK;uy?-YD=Oq&OD=Lnde_u-xgSMNS~F))O6M71?bMh5Bf~K0CB3oPw~Z$Si5^i z_SbmTf>-fHk61f!haS9YVYS#2=Vx_s|M4E;YSz;sK^*s_^&+x@oTihJ#9@j_w<%>Vfu;^BxUn-NrRx{H~irYvHR4k z#5UW4JBg4@(X#6Dqval>!wj*e%8dKbilZ9_Cp-dY+Cma9wEUXQ-a@?B3WmuGS-XHO za*Y6HmxN6b+xU|5YnQ~H=b20bzt*K7NFu2nSv}hKPQn564NVbOj(J#y#| z!5PkVHbIFkdEX-$2bB)w^)s9i|#77KsjGqUh?B6x`!IxtD9|~@ZR^c@g^RB7CrsZR!q%7h0KvId+k_a~07|SckJ%BU z%K5)~O}vFz8xmCqn&-d6LHx{uzchKmZRNyYyRQMSI`w>Ccc4TZx5+zU;NLRm0FHO7 ze!i>Ee;E>+P7FT@IZN++nrD1o3kQ6);6J*WnwKJ9y}{ffUwmE-qW~1kEcM?Zg)L`8 zZqH4wE+vEa-yDPA^LTIi0OXGfN&4)-*fzZ|Po>iiHfE|_YfLbm4}@Go(d_!6B64%R zq_JG7e7a221Mh!q)cr3S7)P1X-{#`(ydOW=n@F8&2Nu_C7<{LZlE36I(h*?{h>$~~ zp+IQPTBg{D2)Q{IqB&y__?-8C>d<7$MmbqX*JDr&#piA?clQ2*XCGt5V{G=@(kjvC z>fUEtA)!DKVR0XMi<_>-Y1=fgu8G=4*>aX1jFdW4j2}UN-o4eU9r_p~o2HABc4H-0 zupu_qK)yZ_?5z73sg@awR`m(Q-+=rx%F^-(vi4POnVfA%)U6uRu^m3Zj8m`5r?-83 zi%m;mN28vn$MNE9CN6KoJ{tNM;+U8hW@U$zL5iNrk2PuhBsF3OOlwIzyxUrOTk_li zba%DsW_%;v)IWWB9{!o|Fsi(SAwVWS$aX8PS48esUw5#sK@R>jSJbEoz;cg3boniag#tx)D$%@J z=-H9^_zGtdVFnmz4f8>$kV6C;mN*ey_%q6-+0xNgnhjCH#gOK>F5h;Bx9HA0m&}MuiPXmCn1AH-h$xCnEz5w>)_|M%z)yS+>D98uA`-rH z7=8CPWlaoC`nbX=<{$Y}zPG`jU$P7Z*dSpuucp}fR_nNXz+?Um)q7G!i6RhfP)t{z zpEWG4py?V}c08)-unntrKT!sJ5H+}1CT~_45QN`ZUeP2@cQHcgM9HYJj>AaEzDltP z9huQx4=jkV5m-e@*chkn81xFAeS~j*%BQ_xM`SaXy{Krnp-E)m@gjeDo~oj@jXjl63451D;-I@1EjA}sv}BmUP8 zQnOqJJ$(;XhddgrA0~G=fr)5D0#WcJiJzg7trU_~)_H4PSQ*8j4q9S{y+aGoIS8JM zqZ}dWZ_V|DDcN-5R*8O?E(!v%f+DI!aZ4|OWIofrhL9(a+DDzsrYx;6$m{k`4MHh|!F^h@4UBWU1F2iUVYbQLPH(5wqtB z70#^B$1KT5W_#R&rbD>-NF@;yhx}xyAiUsnQlcl!MY^h1sm~y&puR{*{i7v6<9^?( zM1{?M*q{k^3zn(T3qK5!+u0V&#Jgnw0_t(xtxDJT8^?Rc#fmC`2LwL1|TVM0BZ5>LQ*Z~c23zO z7s7e#;zo@nj9oh>^UwEe;6^5T?G7KG*>&0kZh0%YHL2X+f67bB z>-UzYlP;x;L)ZGaSdu)5l}<&AtYnBm33IP?j`Qqi&Qjwy&OQ=id%(ha%7)=QwZf{1 zocpBj+vxe-A!6w1V8a@YltFH9$5~d*nWV_LO?kzPnBh6G+v4S`)amu5Y`ONw9C~Rc z0@{h*Ryq*Y@KBRxYDWYh`IdSnaCdhikGU&|1}jedv4;#dPFFsszO;@#DS!fcHYc(ql_$)u2BEGyZZt>EILSQ~1+^BQ;7U>R zP`FcWTxFQG2&M@38A-hIxe(9v1BwjEn|8Iwy^6*KL_Zk(7oIn%NWxV^E$Rt{S!9I+ zQ%5UcR}r9^rA_-e$7S1Qq=aK3>4mZ^N`0cf6g?AFdT=|=kuuNAb3OiZp0Uh)hOk-i zR4?V62GXD#@b)nJ>LCJZ%hAVrr<)oW#79p{5axVOC(@ymos_k0%_29TZy{cSPVDBm z1B|S<%WRKi0Xgo%dnHsVT!DvJygle%FshX0Tsy>m3C!IL9##+TQMINbdPhnP_MQ1s zz3)LEH|j8QxG#ZlUNz>+c_q$!^E&5#hn9po=Nm7)uu1$R&Os6(sk0Gs+b+u*1QZHH z%7g@mm4wyY>dQ6AN8SQs@BxDs;2CgJrAJ~9k4FA?QF0qZ`{bWVP2mf8+sXW}3Oa?3 z7~>ceQ%U;WLx@q(ctL4|%`pXqcuu-GREwAcq0=~NFRg-@!*&#YfA5nEM~7bq+#s$! zL(=u7OYJUih_>cj)gqHuaqKl&{o58TZe;LxBIaGp06QgNh?3YU*~NM4NcT-14JQR8 zu{yn*=v;C*c6l1_Cqf;}Zo)JCL;%a|mcK}TT}(v4T64UIJCa9N!s_p{Q;E-`tOeo5 znDt91+h<5;F-2QEcCv&fkY_mP~y=8wGBu(Q?`u>*(~&{EFhJ|(N{GzP_>2J#eqp=uBVvNSag zepYkH&H9VDK&l!j#ZgtGQ9x9BVbs2(jk#_D39II0CjL;DF>5fsAi0ohtK0(v&VGC| zQvl9KUgr{9X#me@5WV8*CXeIKZ<>Yn0Hvz(!KqrO{Y3Sw1aR4ssyWAbuZ-S9gZrst ziB7<5|2Gpjz}M7~stKU6N%_@_{($3fxPu{!=XqlG$~K33iHkk~!s!uHiWe_295A5uSIGNfZNj~A0nCU# z0ay3DEdI-(DWS0fiM0JGkMVuVjjnS>U-^QBv0Jo$ae+8#3%Zaj;+sy64azf3n{0qD`heV2g* zX8X!Il72OWz;7*{B;iR(Z(g?t4$VWjvC1Uj{_gSi=1i_F>(S0p zO6YRW7T4UA=x3^Dx&ta55I!Eq(MJ4T^>DlhPou@gWD3@Rj*iDSN-Yjc3a+^Xjv$j@H6HW7PAu<>T$ z*@y6+i?8TXtxMSJ9bnwrGeZXF=9Hkh#7t>BL_&!>43HGWVixtZEIR1H@bCgislj@i zkfnR*7u=Ux6)N$-v^9&kP1xuex)gqQ_a!wI=ltj+*PG3PI9n%wF9%X>`Q-JYrFV`=nq~I-W-E^r|tmKM^$NDq$y-l{KB6 zkv_`i7iXm4TTI={XHZ(%eD64_jHVcZRU7buKV>3SWWzbe>3^ifat%`g zE56?1@F=^&SqC1Kwegd)(#fvz7xd`denl$v{hDK4ncyb}VI;IcB_PF7P>p*FA2o>M z4c4@oOK1U(uiMgTdEE2%6p_LbOYHF?^tr=8>5zwtEp_T`hdwBe%^hJ%_*X53yUR7ZuJxQ>d zbewur%*7XqbRCrjRCa~AJ@U*%u(wKOjG*$IJ$oR_!V2l!M&UYw(#l@l^t9>czO0WN zlP8b2MDUwRUB{L_2MDi}ox9*8_$-r7p9jO=#p!0$r7}U`h7u7v9^vrdOg^uv_b!^prrzzV7XzB1`qbzc_ozgyb{cT4r#ydqJ8r7jE zp!s4;0@9N|&8`F=Hnw~NlW%dIv5g4<>!xh#3DXU(xMMXKpg3YB1V4+HFMU0syVi-P z#g2wk4CFNVX`fl&V@&Pec!%_C$r>@k3TUKV8UBf~ak4Pi_!K9RI~L~OyG3kDd>$y# zPa1q*>q)*+H)#xtA($u|3~)^u#K5}td-d5(y(v6Be^T*0UfJ-3WF%ObSVSWi)sAAv z;4qsYJ*$ke`24v}9G?orj1SQQkU_lDA#l&xBK1bgU4eVk6F1=queF9z9j&Y%#t~hUaoANLN#ONNl**o zNg#rcDRo>9*m7J;tO90b2Zg@@BQq-}CSiacl|5hTBmHmRdx2`X zR-WTco@x)0uNBS!erD(~L*Mv*YHag^s)|=XAFJhYv`29R1a0wwwFZe5!IM4AcCk( zr?Q<2f0dsrI^~>GhpT5jL!2GZaCD8yEKhZ3;$4q>H*Ey>blI==aAR9U{>eunmk13p z`(Q)&qBEU-bU+H&*;#KaDWUb5St>K$r$d(1PrbXjw3Ds$aOp-6SOCP#SLx656H5&Y zF2NZ3o`N3%BDmJR-3p&U)3Y4%&0|-@q|9PrF}#D#=krR_w7j|~v6?h!90*U*gT?Rm z`!NDiZj~-4V&Ya}y7Rkh9%Keg6s?tS#0mB^R#^sgTPz|AUo}$4k&x81Mao&ZVAJ}o6El39 z_h(x5_&XW#OqD<{9?GxleVZ1r-ZPcdRv^rGOVoIfc%$NFp>d1>%(lPHfwW#w5=?L< z8U@6aF!z|P^jY{=j!6RGK*e5ZRPk<5@oWjRWd#lNZyZHFQ9u*y59ug&kj+zu>3};o zqsL2%EDJM#UG~;&fL!`erDt51N%8Og>Hm24W3*F)jsbUqJAxdt+D5^NrJAU4Fs?|d zwTKw8c*O>1*xs&Q*C(bW%{kfFhYoUdZMH}exL&th*qj+Hyn?Y!D zP})B78)OX$-=GgC5SnjA$g84HlkstJ;Kbf_SQX!%{H4`@Y;=oAOjy(!mRMlcz26$+ zX8m&6BggxD)j+|yWQrrtLC^d_mnh;HRmpjJNly!-9SnH8IY8bVa&bYrIjHzEa{P&I zhYm27^u5>Z)Bj3s8*QsdVUI%TXuCOJC@U`48aV{h2^(yyaJ~OIs4$q-&YJVmnK`g% ziW?E0{a=iIV~}Ri5@g%9ZQHgnZM&y!8`HLJ+qP}nHm2SE?Zk_Cv544>{c-NCs9UH0 z->k~a2!B-wr?-IZvmAkS^)7-23l2nn^&7D>rLZ>Hn}~GUF^zp_>YrcwMg8;hxE&8% zc!!L+netz+>856LRVeh*8daXLipxs)mXLkUF-`0_@U44}^BcFPyB{I#u zccy9iwRgH!X0Mx-VqkP{xsBhlPv$tOEx&d`v{xDfdWnJ0b z(6zV7K*R4H9V&8T;ka2xT@+=^cde(LRUP_P7*#w*+UI$QRH`f+_S@dC&nOV%Y zkr-MMw^*`9oE0y8OZFp;xyM1~N#88*4aqLGAuBfvq?vw!){2p^BO`c#&!@Vn0oW9zA zou2bnw8!L4X%wuf(}Jwwsn)lJTmQN38UJ_!Qa1lc9ZY$dIK2r!UADCxgRFgwtsWwZ~m#ZJ_QzBSidyo1%lRWi_>pb}9+)Xtwx=xcAdFFrZNPS>$^ zBSsS5iVe6lM<2&`FI_NtOs>~(H&?KN&NRHM}#=av4x48fZpJw??Vsv zj0MhFITg595&l%UlP7nzNq?xRi?v4C0JH0PR19qBW#mXftYJ7R64Q z#fT1urNALi@-3@ro7<`uRXR{^SbPR_F&@yD;deml*9As!mNZVDyh zt4>{xYU=D+KI)OqT|C~|h7hI^M8%$PO_i&!G*1jzE!Qz#`mz5}4p<}Crl#Lgi9c#Z zM(yrm47pQkdy!e_E=%%CQAj2cr21eG1C&oP=#}PuAL=pD%#T09fuPF$Kd)U5k*~g( z84!Ryv7*=49G#|J?tyIPz?6?MY%y*JU;6IoiLgFu8XhsMQ+gyAvb6J2ml-N{H{GCf`a9dgbzvFI=` z4}L;4Z3wvQ$BxoCMy!y;c8gwt9h|~G(>LrV}X3dcg#RB1tSs`WU5 zWK0<2U{i0oM!rXlSzr$M9oo?I6p+0ZpmPS8V+TnLa|N&~RwIb~8dD?MtH^A%%glIg z)bQ12AZ^yb-wzf*8$wM^pym%LAuQS>J*)+$-=b8m@oRi7-V)OMjfbJaLVH_=> zH?={ ztrbxv9URZ^d+NBNcT||E#crE4>2$q*+?j0I$*bflcu9YToMn!_ESa;Zyq!Ue^RQW@13)2ULwRJ9Af6;sEg#aH3>nS(^^6^? zjgu%tTaL}cm#I-JW|)!ZsfLv&WAc*0IU_=(jiX<(?;N-IF~KABh)&JQF>wj^j2T&^ z+!2)Z-s8crI%UH}(ZXOm-wcLfCy4-g8C2A7f?d|Uz5o1jY>WBz(xhnJR{ytovS{j!Gd_Qwg9{vrlJ~k0}nA$x^8W2fggQ7+i*u*(L5jH#Ugw$U| zAv~(k1!xjdpiOWfY8%?O09^-hdNJBV2>2zkd~|8eiXyRkl7v&f{)GD6cLJNpS(b8c z{D^)mS6?hr{#dl|@%rcysQze#Amz~Ln{6ryoLv(1_Hye1?)$c3y1~4tFj^~b3vv12 z2lBRg73l3(^`q>>X;#q)7$>w5S{#Ka4Hs7T?n2@L zS{(Bc+Rlkc4K^|laZ!Z2^S0`LZ;ZNf>xalr0)1o<`4;~6LUp*Ba?5?mOf-;F{CsqF zHjFN ziD0=FAxXF)?NcHenrg(K!3>v?%xdK!(jLm@WMjP&t|5(=8wEyZhMOESafC2~kQ^o# z5=nH1AcQBhu|x-n@^JRiVLE^s^>v0TAXk&xCoJwP07=%t_b$K^?v*2hGE`#ilkiQu z!IT$*RF((O(Bwz{e}_)_H2;sQvU`h&-gYf8OOb3A^TLAi6n_BUQ z0Xw_9n+*R*>W*)AD~BTJT*Zc4BL3=7-0x8IM3pY{*slIsCk(vpt-M~}@$P^`@_PdPfc zxPeUDO{Zt=pas4okxbi-6aP3mIGerrOsti!cDSj%31sO(=Fd4NmwO%{%yoCbW(|=> zeu5k_w=$K`$gf6TiM5BMEQxwCoJW>@iQyu5OMa8F+HWq2Dvm^fj~*~YQXr*8kd5a# zKF=4H*ZX^-D<7RUH?d?t`=fG{Xp#%54xfy(Qq-Ju}sJz!S*K3U}pCRV9y3!R=s z=l0kfij-&7|4PQ&q)dTH+B$BhD)pvy>^_nf>TkZ4QXY-1Z@daTuNoM`LJN)^nV?{! zJ;8V8BwT5R7xZ&gWyPy3&j3LJXpmF5-cnND9TXn zb+E!2+Sy2h0P2Rgs_pR5@1&@oM0R^<1jJE{%Cnpz2RtLKgen-AGR4r~CjD0{vN-f# zciaIUTNZFv{%>A?oQlONBRm{$0#U=6ZdVZrx`vl$saJcZO z;c{{fS@II1OnQOvgD28|Z71%BbNqSOI$Z$I$_yo!%LWwI%fV06h@ZVn-C3r9fjeI{ z>RfLRmL0(FVIYMUKo|i06)@8>2=FJKOVlz+9p;yWYXy!apX6`oGzgTsnMhg`wS;^` zQk|V$L+|j4&QV3%I_c!6(JKNW{HG4p>UfekDK&4Le|fdYSxCgx1W{DBbdsOB*dh`> z;?Mi-7{;Mxo)oj7H!LxQNP82dvdQ)Cc5xO~sfIXJ5>`p^M%@rUf=Ge^%wOcSLh#J6 z=`pX(j~%xcy?MwL?tl2&?jQMWV_qe7X#MV=zR{Ql$n+vm?8Unn~viwELaG2HS znq&>Kr9?W}`NeP|Qgs1fkx5@=x(t~>qe0TaqRrEI2aiw%@%k%SE6_0ADgsLp%- z<^}@GC^cdEwYp*c*Hzz^Fv}p!bPk}fY;|mjtXsedzZ#BUKCx|hQBVVn-MR5%(Uh|# z{S7e0%k2b}wYS;?lkyNto0KXn%w?^M1LdpqzfcU82w_>*iBMX_X+9yDd+Vr;LcZ!Qi$I8wDLC6S^9m0N&S- zL}5lfpclLEBG9Zq@AvMALG|y)XuoIkdAY;Z;t0ox#`53t_FfHvG63-Zy_g4vNV*pD++vB)EZH8No{Ky0l|X$?}$ze}$@OQ|ij3ofrZ47J=Ri zrHhP4+Akwii=%zr_htzrubfpldkDE^NRMO>&Z+Cr zG5)&+1k=$TGmCQ@FQ1bjkltMdYeF+VAQ#1KxE9kMU7p@di>fxq3g;c{ouJP8s1FG0 zk3Q^J0Y|c6NxR*k`AO*hIv>l7y=T&~LRA)1t_h@+7*^Jnk5F7r>5W&itIt=CAvSr3 z*`rouv{cRtY>qAqsEOn*YGF(6Op{cMmrP)mq4hCz+lWA?zNvfP%ia`Ct4E5IRPT{< zt5V1Ug-&1T4eXdcWPBlyuf#l5X%%NqW89Gw$SX1=1yO&i`^ z=UdVa#W2i#CH(<#NWYkWOi@=e5B7`b{K;*!vVNJ_m{|BvP(+(13*{%W@X5pII48tG zvPDs;#3N)l5Ks8?vt3$}ud^_T6@Qx2*}scL4`$x?QuUqb{DM=z{ANT=sOUI%n*BIq z)Pg&TST?a)M|f()rkihHZ!TgJsgBc7hF)*bJ*|}`ksmnyUH;i&b~^sTRyfW~t@j_F zl^&|JX(LG_ellXoT9>NB<=ZK?6Qo%m_e21LxhJX7x;457JM2cuF#hU2HP2BSEhYTf z9lb6{c%sYhAYV{X=$?BX&z5W_Vc2he)NZ7fOdNWlvDNA=;6$@S#NT`F{{xdYvhI-+ z;OgQqyEEnHlQ2ZXu2C;bb#R=R5pCuQ5&lf>)E@}xi~m07m!#~*X&Y4%bMnp3WtJ9G zM@k?_A#pYzS5&MEEgF1&w#L#n8hk#kjG2T*tbZi`4`EffbQ^T2($_8#eoe7K**TLo zgcL)y)+t~@cM!z24$e&Zx*OSgE8@q#@i)gQ7yHbc`P)*{5BUAt_IFV|Kx=qt6p&Av zhX*=bDhCH9k_#~m)={BG(}py7urFKl)vjMry)r_mxOQ~{{|za&wO*-CgBu>xrA6jSI;0?K8`_hH zSJw3|686dKQP}_*cx{YqL1fMk{uYG@u^_r`Ui;H#2MffA1*)$)6=w~@i**H1^eijA z_ip$B#DB08J^Lf6ebF!1_(x_+Dm}f`GX%%rjT>Ufhd(v!iG+XeSp}4BS9W)aB^xim z01fU!CcmpteS#TAC?dP+f7|rG68rUqw0)-A_h{d)(zdjrgudyOc*4~Qsv8KcAzk)} z6K&C}J8BGSw++T)-d8wk>$5)hh%}qyGmHE1Z;D;JaxQ|SkuZN$k)4mjw>DD-qhVcN ziYDrX{q?}HJ@rZZe4V77DcWo6t4a(V%s&h;>JDnPJ@<+YHI_ns`YX5sJ$9!z^SHNSIZnZDUSYxP)WJ| z1@qhl;+t4ul?24+pP7qz#NUU+-(xH zRd1O2IXMbH5a=zQDlnBu-y*&0@`m}fQ)M;nrSrgQ7i3ZkptZ+~r2kaHaFkL<#a#u$ z(iwc|TRqSytTL&y8k9>nJIXWl^o~vvOWqkXgu%o*ETs(d7J@bwJ!v%JBl_$Y{jVhYvvqiF2pX31HbYr=P;mV z#BR|@3K`vTYB(2&Moum|s%+boZ?T|Bof_3!IMKlzJPW0DSOT*Vt?|w#;sqa*UFK%I z_4e$v3x4xJ9P4OMz$hQH5$^GUN1H+)vN3e08O>Vibnv#Ph*?Bnb7>wn>q-va0)YsL z_|~<{sjkYX52A%&G)Kh;q3@ZQZ8C_#=;!DO-5X4n42xI%9-vjh@2Q z1C`>y0^x%3%4v#Cheq8S=h{nuD(`njioSpA@hxCGhj(3om$}t+z3%!I)*`pp0Pcpz z@>Sn;(450VP)123^!s5PPk}pJ5ep2X`(ZGlVhxhwCsprP&pFuA`tyHILW6prr5oS&&&!UV=dYEVjK3ezc*mx2j5UgpvsUvsk9 zHc`u#?>$Co;Sy%|-3W&{QD^MfOHdyx4Zt1i;o=;#qW2I?iUoO7oF{?z3QIl#z8gL_kw{MG^G#v;P5h!@MU3GuiNQ?z6}$JX`i8#fKfk_6J{Eg25*ze_-N`rjLzM4p)h&o%kDRu3Pd} z1-r5clE*HEdH(L8%r|V)WL3Kd2t9XG_WcUou5Yod^V2o^x7&LbPUsW=&1Ejb*2p!jY)7()LqzZ|7c}Bt zv~@o~fC zbGRljDS>b={0+cK+I}JtCeDsaEh=g*Bj3q?C3c933X0|0PK!O*ArHVcV((OC@4Fpt zxwoBNGNg+#K0FjfA9KGj=S1*4Cd`mtx(+3C#*O57Zg|V zctSg-dT|d^=4cQCJOO144*UzOA|s^*!>7REGr{m#`PEV`^>Yv)yr>)@;GjfSuz4?m z=YrQp>eH)0&CjuaPZfb_TWVS-qqy04KstEtICyE``Zk=wDZ43s7Q5cAodfM`M5?Cm zGc$m`E>G39ql>Qz)=Oj^3wz&+7Woj~CzSa>9;Cf&(Xmy1AHuGDNKnjw&0&L0qveDq zxyf8lfo;ngWTK3POhUL^xa~qN|8t1bC96MS%TLt;qQ5hSwaABoc6ehwRN*OU+>G;> zP_E!q@iGowPu7KtJhp*KY$}l4Em3&U#fiHg=Mrp@tiI;c%||E1UfX{s=4OBzS-|hl zSiqgQU{i8@>w!bZBaXO(jb;|#NKhcb^jV-F#z74IPWKeYz*9dNaMXtzX2R~jXJ|An z0ml3RT=#fu=twRye*N4i7Szx3go}~l`p6O~NN}Q#jEXhj#}OQ+B?x0QhWtrjqQLI` zyr}F|bJuv?)j^pyCAiT-jq3UQrRQ5!Tl=A=U*F(4$Hk{v;19~Ox9Tg3_3+e>!T_JZ z1lyIyn=FA0l)&?Gfh_5c`elLY?RTMZto`pnz%V7Uh< zq=5lxf{r;wA($M1yg)6(c*U*gD@>48O>9O+52V90~HI22oY|BpZDPi0WAIBFww&5PmhpVeenic!$dVr9HGdc z_y33>t|ECcX#=d=yugTUK8gO=BL1l#4L~A!+_#41(-hqou7*bf6QFq>;K)Y=>0DI9 z2LdMZ7*>Epg3<%4;tY_ym&^eo^;lPjDc@hIQ?dpzsgJ7m84`kX12(#+31V6o4;TQl z16~k;5a=g@>&_toChd{^ER1&rr zohwEU5&Gc4C`OcaR-%tpm32-EJ;w%xC2bd5L;^aE*%If^x95KI4+eSj*MkMD%}4T>qIGXY2#W(jcrhsFXKbvve-XuSPW1yZ)LSorbZx|Y;zyx}i!LK1 z@q;OVSRqwdQSbXlxPk5aBk-x4^LDP|dvA>U>%n}j#T@>?>uw8n6%jYi@VaSgg9$~B zFFOMRbuoYS0gnK1kB0!bru%@ud~bcRTFmuL^bQ$+zOPQjzppgO80p4EG^7oC?fmNd zV!=O$3cHIN>$ia4ap|BQIWu67?S+JXIw86$al_u4u705%)j=sy2e8IyIeYw*28@Nxr`Qdj3xB~6XVKkMwt)W#LyoM@&LkLvn zed|N5%z*=)Fn{wvEX`drqnypTMRQW~V9eKn2Kc2uBplFc)P+UpP1<^4*cq%DJGsIZ zy}&=_zi_`9hcJD1LT$92iM+t;j`tc4X%kp5hi#inewTpVP3>hu1K*JnmGKAftj$3G zJAvD4CxM>=^yuw%S(t71NFz5{!;YWrFLUsToDYtl5X#%V(s*riiOpc!y%BL+YwY#D z4d9{Em9aT$bHh+5kk^RvP`L9p>rWT6K!Kl|Es*e=@@{Zz*T;~)fyu$K>PSAcP`&72 zdoV%v-~(+z`#Qq+HAHX!P3K{t{5Skp!3cZO?{!-DKR^H9Zsj?G5Bzrj_}A9vKTWRy zV?y`jU;g?z;otl1Ub_DbJbzLT0M2(mLo-N#o86w8ea zE5Ie<$YEsMwlN83KNr0Q*w#d-@O`cgEGr&rI+WU-bDGp$or6wwj6t=Wp2x5VE2r{9$ie8ufFsD9|(rA~U zUdr|KBR-~3U3Ra<*I*h{i#`r8I?Rx4QWy7Y*!wqUi^l_bzh#}bV-E7@qM zg5Aem#nSK0*<5YcmZdJ1szE@xt4z`oF8pr|X|D@1+mm(6^FtN8Z zLtM?pwI5-;6V=^P2v^T>O8?29AJU2FbednaX$T?R|2(@*u7jlC{@iIpO3?lGOFpE=l5WY*0ZY9Fqh)v&&uVJYC`h4EW*MUww4;k;I`xGu=# zFM$WdptFfA)WsT8G+cf`O`YK5+X9@)RPw;n{gezU55?Ramnr2m%pG4$e>J$g>lK*y zVA(7+%B!MJTLvm@V$l4mCsOv)gDgek%IF1$C48t0i#rykzJPc)OUQ-9?^*h6j!N?( ziZ5aCqS_CYxpqLJ(EbV_nu^9p(Y=f$#As*E<|6li1oQvQTfj3O?iWwrA*;00GQH;t zsjQhIi)GA0mv#2!!r%ahu#-PR+cpOClPb^{$ zo*Jz2r`vLDGunl`I%-rf*$yBoBZBLPEv#5=^-o@a(2k1&KH-;gki9%D6(X-E)6GJWp*2YZ^MjPwax-%{N)~X{5 zbwj+7P5%3=Z13X2ERvRFteP3^WpYdcM<(SXa8VEwrRVXuQhfpX?W3Zm;560H6giFZ_+t1xeXDnVHyV}M1~gm z>?KUcE-=iX18le*tPMR$xzB5ZmoRM&=k(UHtGQSGBeecAYjKlj6Qn0E9Dy1>#ikwu zm|}&4wlMgy7CN~JlHsrYQO-3>v6mY&zjRu18eU^8qlA2AKHqRYN`*(rGy=cI-%85h zN&&e)hAsLq^`lLzA>+FV9Xw`tztaoHrnS6afRL-gq98YAc4@z%6o|GC$qn)|>dl#v zV0C1i`@ZCivPgu_c{_yVI^8aY`aXgO?QZa42^vsM1cNmcQ1UH8;rG2cKV z{~1|NPubhRK}_ycVfK>O_o;l9m(pMR>^S z@H>CVyDK^_WZ*(ysav<3W=GdsV3{d2)Qtbhs8Ge$p`7CFO9$1%>dF+;Op9krKW7$L z^@J(X7OXvNmH{kZPDU=qsFzXpELb>AfQd?{inwRgGnLUX+kb`B|I#)wWy7S?5j-u= zth&%P(Mu6b$6~u5mlr4~HFV}S$JjC*QJ1A_a8RJ*Xeao%a;5?0vr_ue`o-Djgu}F$ z<~R6$go!>eZFncynWWJ>ZZB3x@)xndErh~lg+|O1*qWthzGUJ#rY;Sv6fY{%jzJMH zguL{$4Pe;(bNqd`>iYop;{V!4P<`ufe`NH~CqGx#(5Kc&cF*a#*`f{~C|idUfcq_3 z#A35*1=`1xQb1Qe>zz25Vb~97n(bR;fv}qf#cuUG~!P-xraz4m$Rc{n8W`G;r!~im~AqF9k z(qE^XEgf^`DzdN2PK~qLtoPXg4OL-lqk#I}YT#W;1t#G$9O_d^%4d>fo9hK>@ms0} zq+QG@z!3&31C-<`9s|Ey>QAkAFqCx`gH`Fw2{Ci$xfRsS);;cC3Dc=U$NaE-@W+Nn zk>e%KSg5UFMy-9O-Uwe(^ByyF-#CW9ke;?1C9D@f7Ocx zm#TM2@_e?8rify2Zagy_mId9n+z9?-)UqdT3@$_gq{h!wrV5q&7h|V>MKP>N+}r+r zN}~v1ytBToh?xI?o(IE)kGR{d=y?~9huZ&SdIL)RSbH(rtGo5A{$@< z#{eKZiy*td*2N<4IE-9e>z@s*9K|M3 z1b(M(CcCBfa4glqn;o@#o{DIAv8u+C1upfKDVR6RtH_gf0=gRopDD3MiQT+0Q-*atkbgAedMj1x{+Hz~I1$YPsXWnu?$c z6aDpvhAo*SdZJX9gDcz)mNUX&3˙UIqbftw|~kb_e$-9G4K+4Q@bh|&lPvE37# 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 { ejectOptions.copy.files = ejectOptions.copy.files.filter((file: string) => !rcPattern.test(file)); assert.deepEqual(ejectOptions, { copy: { - path: join(basePath, '_build/src'), + path: join(basePath, 'dist/dev/src'), files: [ './base.config.js', './dev.config.js', diff --git a/tsconfig.json b/tsconfig.json index fb8d8a0..cebc6c4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,15 +1,18 @@ { + "extends": "./node_modules/@dojo/scripts/tsconfig/commonjs.json", "compilerOptions": { - "declaration": false, - "module": "commonjs", - "moduleResolution": "node", - "noUnusedLocals": true, - "outDir": "_build/", - "removeComments": false, - "sourceMap": true, - "strict": true, - "target": "es2016", - "importHelpers": true, + "lib": [ + "dom", + "es5", + "es2015.core", + "es2015.promise", + "es2015.collection", + "es2015.iterable", + "es2015.promise", + "es2015.symbol", + "es2015.symbol.wellknown" + ], + "target": "es2015", "types": [ "intern" ] }, "include": [ diff --git a/tslint.json b/tslint.json index 72f7401..1b8db13 100644 --- a/tslint.json +++ b/tslint.json @@ -1,65 +1,3 @@ { - "rules": { - "align": false, - "ban": [], - "class-name": true, - "comment-format": [ true, "check-space" ], - "curly": true, - "eofline": true, - "forin": false, - "indent": [ true, "tabs" ], - "interface-name": [ true, "never-prefix" ], - "jsdoc-format": true, - "label-position": true, - "max-line-length": 120, - "member-access": false, - "member-ordering": false, - "no-any": false, - "no-arg": true, - "no-bitwise": false, - "no-consecutive-blank-lines": true, - "no-console": false, - "no-construct": false, - "no-debugger": true, - "no-duplicate-variable": true, - "no-empty": false, - "no-eval": true, - "no-inferrable-types": [ true, "ignore-params" ], - "no-shadowed-variable": false, - "no-string-literal": false, - "no-switch-case-fall-through": false, - "no-trailing-whitespace": true, - "no-unused-expression": false, - "no-unused-variable": true, - "no-use-before-declare": false, - "no-var-keyword": true, - "no-var-requires": false, - "object-literal-sort-keys": false, - "one-line": [ true, "check-open-brace", "check-whitespace" ], - "quotemark": [ true, "single" ], - "radix": true, - "semicolon": [ true, "always" ], - "trailing-comma": [ true, { - "multiline": "never", - "singleline": "never" - } ], - "triple-equals": [ true, "allow-null-check" ], - "typedef": false, - "typedef-whitespace": [ true, { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - }, { - "call-signature": "onespace", - "index-signature": "onespace", - "parameter": "onespace", - "property-declaration": "onespace", - "variable-declaration": "onespace" - } ], - "use-strict": false, - "variable-name": [ true, "check-format", "allow-pascal-case", "allow-leading-underscore", "ban-keywords" ], - "whitespace": [ true, "check-branch", "check-decl", "check-operator", "check-module", "check-separator", "check-type", "check-typecast" ] - } + "extends": "./node_modules/@dojo/scripts/tslint/base.json" } From 2f1febeaa441736c24a5848733109d287bc51a74 Mon Sep 17 00:00:00 2001 From: Bryan Forbes Date: Sat, 21 Jul 2018 02:14:30 -0700 Subject: [PATCH 4/5] Update windows fixtures --- .../windows/info/menu-item/stats.json | 386 ++++---- .../fixtures/windows/info/menu/stats.json | 342 +++---- test-app/package-lock.json | 890 +++++++++--------- 3 files changed, 809 insertions(+), 809 deletions(-) diff --git a/test-app/fixtures/windows/info/menu-item/stats.json b/test-app/fixtures/windows/info/menu-item/stats.json index ec81aab..b83ca73 100644 --- a/test-app/fixtures/windows/info/menu-item/stats.json +++ b/test-app/fixtures/windows/info/menu-item/stats.json @@ -3,7 +3,7 @@ "warnings": [], "version": "3.8.1", "hash": "0f998ebbc6b593fa2700", - "time": 8047, + "time": 8734, "publicPath": "", "assetsByChunkName": { "menu-item": [ @@ -167,15 +167,6 @@ "userRequest": "../core/Evented", "loc": "2:0-42" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "type": "harmony import", - "userRequest": "../core/Evented", - "loc": "1:0-42" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", @@ -193,6 +184,15 @@ "type": "harmony import", "userRequest": "../core/Evented", "loc": "1:0-42" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "type": "harmony import", + "userRequest": "../core/Evented", + "loc": "1:0-42" } ], "usedExports": [ @@ -368,19 +368,19 @@ "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", "userRequest": "../shim/Map", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", "userRequest": "../shim/Map", "loc": "2:0-30" @@ -536,15 +536,6 @@ "userRequest": "./Symbol", "loc": "1:0-18" }, - { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", - "type": "harmony import", - "userRequest": "./Symbol", - "loc": "3:0-36" - }, { "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", @@ -553,6 +544,15 @@ "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-18" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "type": "harmony import", + "userRequest": "./Symbol", + "loc": "3:0-36" } ], "usedExports": [ @@ -598,15 +598,6 @@ "userRequest": "../shim/WeakMap", "loc": "2:0-38" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "../shim/WeakMap", - "loc": "5:0-38" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", @@ -615,6 +606,15 @@ "type": "harmony import", "userRequest": "../../shim/WeakMap", "loc": "1:0-41" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" } ], "usedExports": [ @@ -752,15 +752,6 @@ "userRequest": "./global", "loc": "2:0-30" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "../shim/global", - "loc": "1:0-36" - }, { "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", @@ -770,6 +761,15 @@ "userRequest": "./global", "loc": "1:0-30" }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/global", + "loc": "1:0-36" + }, { "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", @@ -780,19 +780,19 @@ "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/framework/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" @@ -1116,15 +1116,6 @@ "userRequest": "./support/has", "loc": "1:0-32" }, - { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", - "type": "harmony import", - "userRequest": "./support/has", - "loc": "2:0-32" - }, { "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", @@ -1134,6 +1125,15 @@ "userRequest": "./support/has", "loc": "4:0-32" }, + { + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "type": "harmony import", + "userRequest": "./support/has", + "loc": "2:0-32" + }, { "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", @@ -1390,13 +1390,13 @@ "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "../Registry", - "loc": "2:0-35" + "userRequest": "./Registry", + "loc": "3:0-38" }, { "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", @@ -1407,15 +1407,6 @@ "userRequest": "./Registry", "loc": "1:0-46" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "type": "harmony import", - "userRequest": "./Registry", - "loc": "3:0-38" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", @@ -1424,6 +1415,15 @@ "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "type": "harmony import", + "userRequest": "../Registry", + "loc": "2:0-35" } ], "usedExports": [ @@ -1613,15 +1613,6 @@ "userRequest": "./d", "loc": "5:0-29" }, - { - "moduleId": "./src/menu-item/MenuItem.ts", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", - "module": "./src/menu-item/MenuItem.ts", - "moduleName": "./src/menu-item/MenuItem.ts", - "type": "harmony import", - "userRequest": "@dojo/framework/widget-core/d", - "loc": "2:0-50" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", @@ -1640,6 +1631,15 @@ "userRequest": "./../d", "loc": "5:0-27" }, + { + "moduleId": "./src/menu-item/MenuItem.ts", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", + "module": "./src/menu-item/MenuItem.ts", + "moduleName": "./src/menu-item/MenuItem.ts", + "type": "harmony import", + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" + }, { "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", @@ -2426,27 +2426,27 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", - "issuerId": "./src/menu-item/MenuItem.ts", - "issuerName": "./src/menu-item/MenuItem.ts", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./src/menu-item/MenuItem.ts", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", - "module": "./src/menu-item/MenuItem.ts", - "moduleName": "./src/menu-item/MenuItem.ts", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleId": "./src/menu-item/MenuItem.ts", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", + "module": "./src/menu-item/MenuItem.ts", + "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" @@ -2713,15 +2713,6 @@ "userRequest": "../core/Evented", "loc": "2:0-42" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "type": "harmony import", - "userRequest": "../core/Evented", - "loc": "1:0-42" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", @@ -2739,6 +2730,15 @@ "type": "harmony import", "userRequest": "../core/Evented", "loc": "1:0-42" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "type": "harmony import", + "userRequest": "../core/Evented", + "loc": "1:0-42" } ], "usedExports": [ @@ -2914,19 +2914,19 @@ "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", "userRequest": "../shim/Map", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", "userRequest": "../shim/Map", "loc": "2:0-30" @@ -3082,15 +3082,6 @@ "userRequest": "./Symbol", "loc": "1:0-18" }, - { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", - "type": "harmony import", - "userRequest": "./Symbol", - "loc": "3:0-36" - }, { "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", @@ -3099,6 +3090,15 @@ "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-18" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "type": "harmony import", + "userRequest": "./Symbol", + "loc": "3:0-36" } ], "usedExports": [ @@ -3144,15 +3144,6 @@ "userRequest": "../shim/WeakMap", "loc": "2:0-38" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "../shim/WeakMap", - "loc": "5:0-38" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", @@ -3161,6 +3152,15 @@ "type": "harmony import", "userRequest": "../../shim/WeakMap", "loc": "1:0-41" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" } ], "usedExports": [ @@ -3368,15 +3368,6 @@ "userRequest": "./global", "loc": "2:0-30" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "../shim/global", - "loc": "1:0-36" - }, { "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", @@ -3386,6 +3377,15 @@ "userRequest": "./global", "loc": "1:0-30" }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/global", + "loc": "1:0-36" + }, { "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", @@ -3396,19 +3396,19 @@ "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/framework/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" @@ -3732,15 +3732,6 @@ "userRequest": "./support/has", "loc": "1:0-32" }, - { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", - "type": "harmony import", - "userRequest": "./support/has", - "loc": "2:0-32" - }, { "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", @@ -3750,6 +3741,15 @@ "userRequest": "./support/has", "loc": "4:0-32" }, + { + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "type": "harmony import", + "userRequest": "./support/has", + "loc": "2:0-32" + }, { "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", @@ -4006,13 +4006,13 @@ "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "../Registry", - "loc": "2:0-35" + "userRequest": "./Registry", + "loc": "3:0-38" }, { "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", @@ -4023,15 +4023,6 @@ "userRequest": "./Registry", "loc": "1:0-46" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "type": "harmony import", - "userRequest": "./Registry", - "loc": "3:0-38" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", @@ -4040,6 +4031,15 @@ "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "type": "harmony import", + "userRequest": "../Registry", + "loc": "2:0-35" } ], "usedExports": [ @@ -4229,15 +4229,6 @@ "userRequest": "./d", "loc": "5:0-29" }, - { - "moduleId": "./src/menu-item/MenuItem.ts", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", - "module": "./src/menu-item/MenuItem.ts", - "moduleName": "./src/menu-item/MenuItem.ts", - "type": "harmony import", - "userRequest": "@dojo/framework/widget-core/d", - "loc": "2:0-50" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", @@ -4256,6 +4247,15 @@ "userRequest": "./../d", "loc": "5:0-27" }, + { + "moduleId": "./src/menu-item/MenuItem.ts", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", + "module": "./src/menu-item/MenuItem.ts", + "moduleName": "./src/menu-item/MenuItem.ts", + "type": "harmony import", + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" + }, { "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", @@ -4972,27 +4972,27 @@ "menu-item" ], "assets": [], - "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", - "issuerId": "./src/menu-item/MenuItem.ts", - "issuerName": "./src/menu-item/MenuItem.ts", + "issuer": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "issuerId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "issuerName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "failed": false, "errors": 0, "warnings": 0, "reasons": [ { - "moduleId": "./src/menu-item/MenuItem.ts", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", - "module": "./src/menu-item/MenuItem.ts", - "moduleName": "./src/menu-item/MenuItem.ts", + "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\registerCustomElement.mjs", - "module": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/registerCustomElement.mjs", + "moduleId": "./src/menu-item/MenuItem.ts", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu-item!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu-item\\MenuItem.ts", + "module": "./src/menu-item/MenuItem.ts", + "moduleName": "./src/menu-item/MenuItem.ts", "type": "harmony import", "userRequest": "tslib", "loc": "1:0-33" diff --git a/test-app/fixtures/windows/info/menu/stats.json b/test-app/fixtures/windows/info/menu/stats.json index a65646c..04d8d1b 100644 --- a/test-app/fixtures/windows/info/menu/stats.json +++ b/test-app/fixtures/windows/info/menu/stats.json @@ -3,7 +3,7 @@ "warnings": [], "version": "3.8.1", "hash": "b1d790cff3d2b119c671", - "time": 7421, + "time": 8609, "publicPath": "", "assetsByChunkName": { "menu": [ @@ -167,15 +167,6 @@ "userRequest": "../core/Evented", "loc": "2:0-42" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "type": "harmony import", - "userRequest": "../core/Evented", - "loc": "1:0-42" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", @@ -185,6 +176,15 @@ "userRequest": "../core/Evented", "loc": "4:0-42" }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "type": "harmony import", + "userRequest": "../core/Evented", + "loc": "1:0-42" + }, { "moduleId": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Injector.mjs", @@ -368,19 +368,19 @@ "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", "userRequest": "../shim/Map", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", "userRequest": "../shim/Map", "loc": "2:0-30" @@ -536,15 +536,6 @@ "userRequest": "./Symbol", "loc": "1:0-18" }, - { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", - "type": "harmony import", - "userRequest": "./Symbol", - "loc": "3:0-36" - }, { "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", @@ -553,6 +544,15 @@ "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-18" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "type": "harmony import", + "userRequest": "./Symbol", + "loc": "3:0-36" } ], "usedExports": [ @@ -598,15 +598,6 @@ "userRequest": "../shim/WeakMap", "loc": "2:0-38" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "../shim/WeakMap", - "loc": "5:0-38" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", @@ -615,6 +606,15 @@ "type": "harmony import", "userRequest": "../../shim/WeakMap", "loc": "1:0-41" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" } ], "usedExports": [ @@ -752,15 +752,6 @@ "userRequest": "./global", "loc": "2:0-30" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "../shim/global", - "loc": "1:0-36" - }, { "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", @@ -770,6 +761,15 @@ "userRequest": "./global", "loc": "1:0-30" }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/global", + "loc": "1:0-36" + }, { "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", @@ -780,19 +780,19 @@ "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/framework/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" @@ -1116,15 +1116,6 @@ "userRequest": "./support/has", "loc": "1:0-32" }, - { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", - "type": "harmony import", - "userRequest": "./support/has", - "loc": "2:0-32" - }, { "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", @@ -1134,6 +1125,15 @@ "userRequest": "./support/has", "loc": "4:0-32" }, + { + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "type": "harmony import", + "userRequest": "./support/has", + "loc": "2:0-32" + }, { "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", @@ -1390,13 +1390,13 @@ "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "../Registry", - "loc": "2:0-35" + "userRequest": "./Registry", + "loc": "3:0-38" }, { "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", @@ -1407,15 +1407,6 @@ "userRequest": "./Registry", "loc": "1:0-46" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "type": "harmony import", - "userRequest": "./Registry", - "loc": "3:0-38" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", @@ -1424,6 +1415,15 @@ "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "type": "harmony import", + "userRequest": "../Registry", + "loc": "2:0-35" } ], "usedExports": [ @@ -1613,15 +1613,6 @@ "userRequest": "./d", "loc": "5:0-29" }, - { - "moduleId": "./src/menu/Menu.ts", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts", - "module": "./src/menu/Menu.ts", - "moduleName": "./src/menu/Menu.ts", - "type": "harmony import", - "userRequest": "@dojo/framework/widget-core/d", - "loc": "2:0-50" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", @@ -1640,6 +1631,15 @@ "userRequest": "./../d", "loc": "5:0-27" }, + { + "moduleId": "./src/menu/Menu.ts", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts", + "module": "./src/menu/Menu.ts", + "moduleName": "./src/menu/Menu.ts", + "type": "harmony import", + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" + }, { "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", @@ -2713,15 +2713,6 @@ "userRequest": "../core/Evented", "loc": "2:0-42" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "type": "harmony import", - "userRequest": "../core/Evented", - "loc": "1:0-42" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", @@ -2731,6 +2722,15 @@ "userRequest": "../core/Evented", "loc": "4:0-42" }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "type": "harmony import", + "userRequest": "../core/Evented", + "loc": "1:0-42" + }, { "moduleId": "./node_modules/@dojo/framework/widget-core/Injector.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Injector.mjs", @@ -2914,19 +2914,19 @@ "loc": "1:0-34" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", + "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", "type": "harmony import", "userRequest": "../shim/Map", "loc": "2:0-30" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/Registry.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\Registry.mjs", - "module": "./node_modules/@dojo/framework/widget-core/Registry.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/Registry.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\NodeHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/NodeHandler.mjs", "type": "harmony import", "userRequest": "../shim/Map", "loc": "2:0-30" @@ -3082,15 +3082,6 @@ "userRequest": "./Symbol", "loc": "1:0-18" }, - { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", - "type": "harmony import", - "userRequest": "./Symbol", - "loc": "3:0-36" - }, { "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", @@ -3099,6 +3090,15 @@ "type": "harmony import", "userRequest": "./Symbol", "loc": "3:0-18" + }, + { + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "type": "harmony import", + "userRequest": "./Symbol", + "loc": "3:0-36" } ], "usedExports": [ @@ -3144,15 +3144,6 @@ "userRequest": "../shim/WeakMap", "loc": "2:0-38" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "../shim/WeakMap", - "loc": "5:0-38" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/inject.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\inject.mjs", @@ -3161,6 +3152,15 @@ "type": "harmony import", "userRequest": "../../shim/WeakMap", "loc": "1:0-41" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/WeakMap", + "loc": "5:0-38" } ], "usedExports": [ @@ -3368,15 +3368,6 @@ "userRequest": "./global", "loc": "2:0-30" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", - "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", - "type": "harmony import", - "userRequest": "../shim/global", - "loc": "1:0-36" - }, { "moduleId": "./node_modules/@dojo/framework/shim/number.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\number.mjs", @@ -3386,6 +3377,15 @@ "userRequest": "./global", "loc": "1:0-30" }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", + "module": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/vdom.mjs", + "type": "harmony import", + "userRequest": "../shim/global", + "loc": "1:0-36" + }, { "moduleId": "./node_modules/@dojo/framework/shim/support/has.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\support\\has.mjs", @@ -3396,19 +3396,19 @@ "loc": "2:0-31" }, { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", + "module": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" }, { - "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", - "module": "./node_modules/@dojo/framework/shim/Promise.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/Promise.mjs", + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", "type": "harmony import", "userRequest": "./global", "loc": "1:0-30" @@ -3732,15 +3732,6 @@ "userRequest": "./support/has", "loc": "1:0-32" }, - { - "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", - "module": "./node_modules/@dojo/framework/shim/object.mjs", - "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", - "type": "harmony import", - "userRequest": "./support/has", - "loc": "2:0-32" - }, { "moduleId": "./node_modules/@dojo/framework/shim/Promise.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\Promise.mjs", @@ -3750,6 +3741,15 @@ "userRequest": "./support/has", "loc": "4:0-32" }, + { + "moduleId": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\object.mjs", + "module": "./node_modules/@dojo/framework/shim/object.mjs", + "moduleName": "./node_modules/@dojo/framework/shim/object.mjs", + "type": "harmony import", + "userRequest": "./support/has", + "loc": "2:0-32" + }, { "moduleId": "./node_modules/@dojo/framework/shim/string.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\shim\\string.mjs", @@ -4006,13 +4006,13 @@ "loc": "9:0-71" }, { - "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", - "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", + "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", "type": "harmony import", - "userRequest": "../Registry", - "loc": "2:0-35" + "userRequest": "./Registry", + "loc": "3:0-38" }, { "moduleId": "./node_modules/@dojo/framework/widget-core/diff.mjs", @@ -4023,15 +4023,6 @@ "userRequest": "./Registry", "loc": "1:0-46" }, - { - "moduleId": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\RegistryHandler.mjs", - "module": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "moduleName": "./node_modules/@dojo/framework/widget-core/RegistryHandler.mjs", - "type": "harmony import", - "userRequest": "./Registry", - "loc": "3:0-38" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", @@ -4040,6 +4031,15 @@ "type": "harmony import", "userRequest": "./Registry", "loc": "4:0-53" + }, + { + "moduleId": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\decorators\\customElement.mjs", + "module": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "moduleName": "./node_modules/@dojo/framework/widget-core/decorators/customElement.mjs", + "type": "harmony import", + "userRequest": "../Registry", + "loc": "2:0-35" } ], "usedExports": [ @@ -4229,15 +4229,6 @@ "userRequest": "./d", "loc": "5:0-29" }, - { - "moduleId": "./src/menu/Menu.ts", - "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts", - "module": "./src/menu/Menu.ts", - "moduleName": "./src/menu/Menu.ts", - "type": "harmony import", - "userRequest": "@dojo/framework/widget-core/d", - "loc": "2:0-50" - }, { "moduleId": "./node_modules/@dojo/framework/widget-core/WidgetBase.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\WidgetBase.mjs", @@ -4256,6 +4247,15 @@ "userRequest": "./../d", "loc": "5:0-27" }, + { + "moduleId": "./src/menu/Menu.ts", + "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--3-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\umd-compat-loader\\index.js??ref--3-1!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\ts-loader\\index.js??ref--3-2!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\css-module-dts-loader\\index.js?type=ts&instanceName=0_menu!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\src\\menu\\Menu.ts", + "module": "./src/menu/Menu.ts", + "moduleName": "./src/menu/Menu.ts", + "type": "harmony import", + "userRequest": "@dojo/framework/widget-core/d", + "loc": "2:0-50" + }, { "moduleId": "./node_modules/@dojo/framework/widget-core/vdom.mjs", "moduleIdentifier": "C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\webpack-contrib\\static-build-loader\\index.js??ref--4-0!C:\\Users\\IEUser\\Desktop\\cli-build-widget\\test-app\\node_modules\\@dojo\\framework\\widget-core\\vdom.mjs", diff --git a/test-app/package-lock.json b/test-app/package-lock.json index 4e2bf58..f3a91fe 100644 --- a/test-app/package-lock.json +++ b/test-app/package-lock.json @@ -10,7 +10,7 @@ "integrity": "sha512-kEyKjH/HRMf7rXxFiOvM0Lco8fPcoGtECZx8kr2tskgrIBPN8F3aaRTT8GZ9duUjoIp953RK8ggbMzBt7+ap+Q==", "dev": true, "requires": { - "tslib": "~1.8.1" + "tslib": "1.8.1" } }, "@dojo/framework": { @@ -18,17 +18,17 @@ "resolved": "https://registry.npmjs.org/@dojo/framework/-/framework-3.0.0-alpha.1.tgz", "integrity": "sha512-Bpu7K7xQ210BH9mVBHYHIZ4CyNiDyUGSEyTZ0AKkRHy6+bggPN6hyatO5rbAhxrksMvk3Rgwi1nCosvLA4d6jQ==", "requires": { - "@types/cldrjs": "~0.4.20", + "@types/cldrjs": "0.4.20", "@types/globalize": "0.0.34", "@types/web-animations-js": "2.2.5", "@webcomponents/webcomponentsjs": "1.1.0", - "cldr-data": "~32.0.0", + "cldr-data": "32.0.1", "css-select-umd": "1.3.0-rc0", "diff": "3.4.0", "globalize": "1.3.0", "intersection-observer": "0.4.2", "pepjs": "0.4.2", - "tslib": "~1.8.0", + "tslib": "1.8.1", "web-animations-js": "2.3.1" } }, @@ -44,7 +44,7 @@ "integrity": "sha512-/bIJJb9q02MxSlfA9G3n6AMTlD80fDx7qDRss/8HxeJ26ix/F/tCnX521c3XrWm/HOBEWp7GiRX5E0hQdIuCNw==", "dev": true, "requires": { - "@types/yargs": "^8.0.2" + "@types/yargs": "8.0.3" } }, "@dojo/shim": { @@ -55,7 +55,7 @@ "requires": { "intersection-observer": "0.4.2", "pepjs": "0.4.2", - "tslib": "~1.8.0", + "tslib": "1.8.1", "web-animations-js": "2.3.1" } }, @@ -65,14 +65,14 @@ "integrity": "sha512-r1QjsLCeBk6UiK2nA6g3P+nc5V/drSU6w8zmvEWIsCl397xog1h6yEovu8V9KVjISL2LbyyOLEGGnNDSlEpcVQ==", "dev": true, "requires": { - "@dojo/core": "~2.0.0", - "@dojo/has": "~2.0.0", - "@dojo/interfaces": "~0.2.0", - "@dojo/shim": "~2.0.0", - "command-exists": "~1.2.6", - "decompress": "~4.2.0", - "semver": "~5.5.0", - "tslib": "~1.9.0" + "@dojo/core": "2.0.0", + "@dojo/has": "2.0.0", + "@dojo/interfaces": "0.2.1", + "@dojo/shim": "2.0.0", + "command-exists": "1.2.7", + "decompress": "4.2.0", + "semver": "5.5.0", + "tslib": "1.9.3" }, "dependencies": { "@dojo/core": { @@ -81,7 +81,7 @@ "integrity": "sha512-iojqMIn49L/bwv/Ryy2v7qKeioHxjHQqJNLhEXBJ+zJoQ47IeG92Y5tmdGsZ6SKZk6sFuWHl7gL9Wbw0qVySHw==", "dev": true, "requires": { - "tslib": "~1.8.1" + "tslib": "1.8.1" }, "dependencies": { "tslib": { @@ -106,7 +106,7 @@ "requires": { "intersection-observer": "0.4.2", "pepjs": "0.4.2", - "tslib": "~1.8.0", + "tslib": "1.8.1", "web-animations-js": "2.3.1" }, "dependencies": { @@ -132,13 +132,13 @@ "integrity": "sha512-GRl2RUMVOBDFAPHzMTH5vI+MvZNfhmMeb0vh640q4BMVZqoxXmIbRtW5bcJ3M580u56CcrMDCauLAYqQ5NUjFw==", "dev": true, "requires": { - "@dojo/core": "~0.5.0", - "@dojo/has": "~0.1.2", - "@dojo/interfaces": "~0.2.1", - "@dojo/shim": "~0.2.7", - "@types/jszip": "~3.1.3", - "jszip": "~3.1.3", - "tslib": "~1.9.0" + "@dojo/core": "0.5.0", + "@dojo/has": "0.1.2", + "@dojo/interfaces": "0.2.1", + "@dojo/shim": "0.2.7", + "@types/jszip": "3.1.4", + "jszip": "3.1.5", + "tslib": "1.9.3" }, "dependencies": { "tslib": { @@ -167,8 +167,8 @@ "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", "dev": true, "requires": { - "@types/connect": "*", - "@types/node": "*" + "@types/connect": "3.4.32", + "@types/node": "10.5.2" } }, "@types/chai": { @@ -183,7 +183,7 @@ "integrity": "sha512-F9OalGhk60p/DnACfa1SWtmVTMni0+w9t/qfb5Bu7CsurkEjZFN7Z+ii/VGmYpaViPz7o3tBahRQae9O7skFlQ==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "10.5.2" } }, "@types/cldrjs": { @@ -197,7 +197,7 @@ "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "10.5.2" } }, "@types/diff": { @@ -218,9 +218,9 @@ "integrity": "sha512-ttWle8cnPA5rAelauSWeWJimtY2RsUf2aspYZs7xPHiWgOlPn6nnUfBMtrkcnjFJuIHJF4gNOdVvpLK2Zmvh6g==", "dev": true, "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" + "@types/body-parser": "1.17.0", + "@types/express-serve-static-core": "4.16.0", + "@types/serve-static": "1.13.2" } }, "@types/express-serve-static-core": { @@ -229,9 +229,9 @@ "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==", "dev": true, "requires": { - "@types/events": "*", - "@types/node": "*", - "@types/range-parser": "*" + "@types/events": "1.2.0", + "@types/node": "10.5.2", + "@types/range-parser": "1.2.2" } }, "@types/globalize": { @@ -239,7 +239,7 @@ "resolved": "https://registry.npmjs.org/@types/globalize/-/globalize-0.0.34.tgz", "integrity": "sha512-FQTLuqZxqf+T1Ao6RzaIP7HcTcNvgDf0YQfK90YGYt1N6KeU5GE0M/hsxdQlpqvuztxjEwEQqIO3paSO/tZ4Pw==", "requires": { - "@types/cldrjs": "*" + "@types/cldrjs": "0.4.20" } }, "@types/http-errors": { @@ -266,9 +266,9 @@ "integrity": "sha512-SWIpdKneXqThfrKIokt9dXSPeslS2NWcxhtr+/a2+N81aLyOMAsVTMmwaKuCoEahcI0FfhY3/79AR6Vilk9i8A==", "dev": true, "requires": { - "@types/babel-types": "*", - "@types/istanbul-lib-coverage": "*", - "source-map": "^0.6.1" + "@types/babel-types": "7.0.4", + "@types/istanbul-lib-coverage": "1.1.0", + "source-map": "0.6.1" } }, "@types/istanbul-lib-report": { @@ -277,7 +277,7 @@ "integrity": "sha512-nW5QuzmMhr7fHPijtaGOemFFI8Ctrxb/dIXgouSlKmWT16RxWlGLEX/nGghIBOReKe9hPFZXoNh338nFQk2xcA==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*" + "@types/istanbul-lib-coverage": "1.1.0" } }, "@types/istanbul-lib-source-maps": { @@ -286,8 +286,8 @@ "integrity": "sha512-K0IvmTFbI2GjLG0O4AOLPV2hFItE5Bg/TY41IBZIThhLhYthJc3VjpZpM8/sIaIVtnQcX8b2k3muPDvsvhk+Fg==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*", - "source-map": "^0.6.1" + "@types/istanbul-lib-coverage": "1.1.0", + "source-map": "0.6.1" } }, "@types/istanbul-reports": { @@ -296,8 +296,8 @@ "integrity": "sha512-wrJUtE1+HuaRz0Le7fc5l1nMTermRh6wlEvOdQPilseNScyYgQK8MdgDP2cf/X8+6e1dtsX/zP4W4kH/jyHvFw==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "@types/istanbul-lib-coverage": "1.1.0", + "@types/istanbul-lib-report": "1.1.0" } }, "@types/jszip": { @@ -306,7 +306,7 @@ "integrity": "sha512-UaVbz4buRlBEolZYrxqkrGDOypugYlbqGNrUFB4qBaexrLypTH0jyvaF5jolNy5D+5C4kKV1WJ3Yx9cn/JH8oA==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "10.5.2" } }, "@types/lodash": { @@ -351,7 +351,7 @@ "integrity": "sha512-GPewdjkb0Q76o459qgp6pBLzJj/bD3oveS2kfLhIkZ9U3t3AFKtl5DlFB6lGTw0iZmcmxoGC8lpLW3NNJKrN9A==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "10.5.2" } }, "@types/serve-static": { @@ -360,8 +360,8 @@ "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", "dev": true, "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" + "@types/express-serve-static-core": "4.16.0", + "@types/mime": "2.0.0" } }, "@types/shell-quote": { @@ -387,8 +387,8 @@ "integrity": "sha512-tlDVFHCcJdNqYgjGNDPDCo4tNqhFMymIAdJCcykFbdhYr4X6vD7IlMxY0t3/k6Pfup68YNkMTpRfLKTRuKDmnQ==", "dev": true, "requires": { - "@types/events": "*", - "@types/node": "*" + "@types/events": "1.2.0", + "@types/node": "10.5.2" } }, "@types/yargs": { @@ -413,7 +413,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "~2.1.18", + "mime-types": "2.1.18", "negotiator": "0.6.1" } }, @@ -427,10 +427,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "align-text": { @@ -439,9 +439,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" } }, "amdefine": { @@ -468,7 +468,7 @@ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", "dev": true, "requires": { - "default-require-extensions": "^1.0.0" + "default-require-extensions": "1.0.0" } }, "array-filter": { @@ -544,9 +544,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" } }, "babel-generator": { @@ -555,14 +555,14 @@ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.10", + "source-map": "0.5.7", + "trim-right": "1.0.1" }, "dependencies": { "source-map": { @@ -579,7 +579,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-runtime": { @@ -588,8 +588,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "core-js": "2.5.7", + "regenerator-runtime": "0.11.1" }, "dependencies": { "core-js": { @@ -606,11 +606,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.10" } }, "babel-traverse": { @@ -619,15 +619,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.10" } }, "babel-types": { @@ -636,10 +636,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "1.0.3" } }, "babylon": { @@ -665,7 +665,7 @@ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "benchmark": { @@ -674,8 +674,8 @@ "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", "dev": true, "requires": { - "lodash": "^4.17.4", - "platform": "^1.3.3" + "lodash": "4.17.10", + "platform": "1.3.5" } }, "bl": { @@ -684,8 +684,8 @@ "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2" } }, "body-parser": { @@ -695,15 +695,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "~1.6.16" + "type-is": "1.6.16" } }, "boolbase": { @@ -716,7 +716,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" } }, "brace-expansion": { @@ -724,7 +724,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -735,8 +735,8 @@ "dev": true, "requires": { "base64-js": "0.0.8", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "ieee754": "1.1.12", + "isarray": "1.0.0" } }, "buffer-alloc": { @@ -745,8 +745,8 @@ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "buffer-alloc-unsafe": "1.1.0", + "buffer-fill": "1.0.0" } }, "buffer-alloc-unsafe": { @@ -792,8 +792,8 @@ "dev": true, "optional": true, "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "align-text": "0.1.4", + "lazy-cache": "1.0.4" } }, "chai": { @@ -802,12 +802,12 @@ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "^1.0.1", - "check-error": "^1.0.1", - "deep-eql": "^3.0.0", - "get-func-name": "^2.0.0", - "pathval": "^1.0.0", - "type-detect": "^4.0.0" + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.8" } }, "chalk": { @@ -816,11 +816,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "charm": { @@ -829,7 +829,7 @@ "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", "dev": true, "requires": { - "inherits": "^2.0.1" + "inherits": "2.0.3" } }, "check-error": { @@ -843,8 +843,8 @@ "resolved": "https://registry.npmjs.org/cldr-data/-/cldr-data-32.0.1.tgz", "integrity": "sha1-eWCDKDbgpkp0voi1XuEF8pgKDyo=", "requires": { - "cldr-data-downloader": "0.3.x", - "glob": "5.x.x" + "cldr-data-downloader": "0.3.4", + "glob": "5.0.15" } }, "cldr-data-downloader": { @@ -854,10 +854,10 @@ "requires": { "adm-zip": "0.4.11", "mkdirp": "0.5.0", - "nopt": "3.0.x", + "nopt": "3.0.6", "progress": "1.1.8", "q": "1.0.1", - "request": "~2.83.0", + "request": "2.83.0", "request-progress": "0.3.1" } }, @@ -873,8 +873,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", + "center-align": "0.1.3", + "right-align": "0.1.3", "wordwrap": "0.0.2" }, "dependencies": { @@ -897,7 +897,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "command-exists": { @@ -912,7 +912,7 @@ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, "requires": { - "graceful-readlink": ">= 1.0.0" + "graceful-readlink": "1.0.1" } }, "concat-map": { @@ -960,7 +960,7 @@ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "requires": { - "boom": "5.x.x" + "boom": "5.2.0" }, "dependencies": { "boom": { @@ -968,7 +968,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" } } } @@ -978,11 +978,11 @@ "resolved": "https://registry.npmjs.org/css-select-umd/-/css-select-umd-1.3.0-rc0.tgz", "integrity": "sha512-ggouX0yWeql8nZobF5jscijHx/WIDkEuy7Iq6fU2X6ogQyIPpJ/aGn4ZYM0jpfI0LbvDaQustkj0az/hN1BqwA==", "requires": { - "boolbase": "^1.0.0", - "css-what": "2.1", + "boolbase": "1.0.0", + "css-what": "2.1.0", "domutils": "1.5.1", - "es6-set": "^0.1.5", - "nth-check": "^1.0.1" + "es6-set": "0.1.5", + "nth-check": "1.0.1" } }, "css-what": { @@ -995,7 +995,7 @@ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "^0.10.9" + "es5-ext": "0.10.45" } }, "dashdash": { @@ -1003,7 +1003,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "debug": { @@ -1028,14 +1028,14 @@ "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", "dev": true, "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" + "decompress-tar": "4.1.1", + "decompress-tarbz2": "4.1.1", + "decompress-targz": "4.1.1", + "decompress-unzip": "4.0.1", + "graceful-fs": "4.1.11", + "make-dir": "1.3.0", + "pify": "2.3.0", + "strip-dirs": "2.1.0" } }, "decompress-tar": { @@ -1044,9 +1044,9 @@ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dev": true, "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" + "file-type": "5.2.0", + "is-stream": "1.1.0", + "tar-stream": "1.6.1" } }, "decompress-tarbz2": { @@ -1055,11 +1055,11 @@ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" + "decompress-tar": "4.1.1", + "file-type": "6.2.0", + "is-stream": "1.1.0", + "seek-bzip": "1.0.5", + "unbzip2-stream": "1.2.5" }, "dependencies": { "file-type": { @@ -1076,9 +1076,9 @@ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dev": true, "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" + "decompress-tar": "4.1.1", + "file-type": "5.2.0", + "is-stream": "1.1.0" } }, "decompress-unzip": { @@ -1087,10 +1087,10 @@ "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", "dev": true, "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" + "file-type": "3.9.0", + "get-stream": "2.3.1", + "pify": "2.3.0", + "yauzl": "2.10.0" }, "dependencies": { "file-type": { @@ -1107,7 +1107,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "^4.0.0" + "type-detect": "4.0.8" } }, "default-require-extensions": { @@ -1116,7 +1116,7 @@ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "dev": true, "requires": { - "strip-bom": "^2.0.0" + "strip-bom": "2.0.0" } }, "delayed-stream": { @@ -1142,7 +1142,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "diff": { @@ -1155,8 +1155,8 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" + "domelementtype": "1.1.3", + "entities": "1.1.1" }, "dependencies": { "domelementtype": { @@ -1176,8 +1176,8 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" } }, "ecc-jsbn": { @@ -1186,7 +1186,7 @@ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true, "requires": { - "jsbn": "~0.1.0" + "jsbn": "0.1.1" } }, "ee-first": { @@ -1207,7 +1207,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "^1.4.0" + "once": "1.4.0" } }, "entities": { @@ -1220,9 +1220,9 @@ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" } }, "es6-iterator": { @@ -1230,9 +1230,9 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "d": "1.0.0", + "es5-ext": "0.10.45", + "es6-symbol": "3.1.1" } }, "es6-object-assign": { @@ -1252,11 +1252,11 @@ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", + "d": "1.0.0", + "es5-ext": "0.10.45", + "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "event-emitter": "0.3.5" } }, "es6-symbol": { @@ -1264,8 +1264,8 @@ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "1.0.0", + "es5-ext": "0.10.45" } }, "escape-html": { @@ -1297,8 +1297,8 @@ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "1.0.0", + "es5-ext": "0.10.45" } }, "express": { @@ -1307,36 +1307,36 @@ "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "dev": true, "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "~1.0.4", + "content-type": "1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.3", + "proxy-addr": "2.0.3", "qs": "6.5.1", - "range-parser": "~1.2.0", + "range-parser": "1.2.0", "safe-buffer": "5.1.1", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "statuses": "1.4.0", + "type-is": "1.6.16", "utils-merge": "1.0.1", - "vary": "~1.1.2" + "vary": "1.1.2" }, "dependencies": { "body-parser": { @@ -1346,15 +1346,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "~1.6.15" + "type-is": "1.6.16" } }, "iconv-lite": { @@ -1396,7 +1396,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" + "statuses": "1.4.0" } }, "setprototypeof": { @@ -1447,7 +1447,7 @@ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { - "pend": "~1.2.0" + "pend": "1.2.0" } }, "file-type": { @@ -1463,12 +1463,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" }, "dependencies": { "statuses": { @@ -1489,9 +1489,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "asynckit": "^0.4.0", + "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "mime-types": "2.1.18" } }, "forwarded": { @@ -1530,8 +1530,8 @@ "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "dev": true, "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" } }, "getpass": { @@ -1539,7 +1539,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "glob": { @@ -1547,11 +1547,11 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "globalize": { @@ -1559,7 +1559,7 @@ "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.3.0.tgz", "integrity": "sha1-xWUkuKz9LOONDJfd/c6zj2RLM5I=", "requires": { - "cldrjs": "^0.4.6" + "cldrjs": "0.4.8" } }, "globals": { @@ -1586,10 +1586,10 @@ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" }, "dependencies": { "source-map": { @@ -1598,7 +1598,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -1613,8 +1613,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" + "ajv": "5.5.2", + "har-schema": "2.0.0" } }, "has-ansi": { @@ -1623,7 +1623,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "has-flag": { @@ -1637,10 +1637,10 @@ "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "requires": { - "boom": "4.x.x", - "cryptiles": "3.x.x", - "hoek": "4.x.x", - "sntp": "2.x.x" + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" } }, "hoek": { @@ -1654,10 +1654,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "statuses": "1.5.0" } }, "http-signature": { @@ -1665,9 +1665,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" } }, "iconv-lite": { @@ -1676,7 +1676,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "ieee754": { @@ -1696,8 +1696,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -1711,55 +1711,55 @@ "integrity": "sha512-yVe+IsWXAdZaj2LX9PiZ9KUQzru67zuCcIf28ulxh9bp7dvLvmyeEH1d+DpF78+zvl7ebAOEvX3NDQSc/PEdOQ==", "dev": true, "requires": { - "@dojo/core": "~0.5.0", - "@dojo/has": "~0.1.2", - "@dojo/interfaces": "~0.2.1", - "@dojo/shim": "~0.2.7", - "@theintern/digdug": "~2.1.0", - "@theintern/leadfoot": "~2.1.0", - "@types/benchmark": "~1.0.30", - "@types/chai": "~4.1.2", - "@types/charm": "~1.0.0", - "@types/diff": "~3.5.1", - "@types/express": "~4.11.1", - "@types/http-errors": "~1.6.1", - "@types/istanbul-lib-coverage": "~1.1.0", - "@types/istanbul-lib-hook": "~1.0.0", - "@types/istanbul-lib-instrument": "~1.7.1", - "@types/istanbul-lib-report": "~1.1.0", - "@types/istanbul-lib-source-maps": "~1.2.1", - "@types/istanbul-reports": "~1.1.0", - "@types/lodash": "~4.14.107", - "@types/mime-types": "~2.1.0", - "@types/platform": "~1.3.0", + "@dojo/core": "0.5.0", + "@dojo/has": "0.1.2", + "@dojo/interfaces": "0.2.1", + "@dojo/shim": "0.2.7", + "@theintern/digdug": "2.1.2", + "@theintern/leadfoot": "2.1.0", + "@types/benchmark": "1.0.31", + "@types/chai": "4.1.4", + "@types/charm": "1.0.1", + "@types/diff": "3.5.1", + "@types/express": "4.11.1", + "@types/http-errors": "1.6.1", + "@types/istanbul-lib-coverage": "1.1.0", + "@types/istanbul-lib-hook": "1.0.0", + "@types/istanbul-lib-instrument": "1.7.2", + "@types/istanbul-lib-report": "1.1.0", + "@types/istanbul-lib-source-maps": "1.2.1", + "@types/istanbul-reports": "1.1.0", + "@types/lodash": "4.14.112", + "@types/mime-types": "2.1.0", + "@types/platform": "1.3.1", "@types/resolve": "0.0.7", - "@types/shell-quote": "~1.6.0", - "@types/statuses": "~1.3.0", - "@types/ws": "~4.0.2", - "benchmark": "~2.1.4", - "body-parser": "~1.18.2", - "chai": "~4.1.2", - "charm": "~1.0.2", - "diff": "~3.5.0", - "express": "~4.16.3", - "glob": "~7.1.1", - "http-errors": "~1.6.3", - "istanbul-lib-coverage": "~1.2.0", - "istanbul-lib-hook": "~1.1.0", - "istanbul-lib-instrument": "~1.10.0", - "istanbul-lib-report": "~1.1.3", - "istanbul-lib-source-maps": "~1.2.4", - "istanbul-reports": "~1.3.0", - "lodash": "~4.17.5", - "mime-types": "~2.1.18", - "minimatch": "~3.0.4", - "platform": "~1.3.5", - "resolve": "~1.7.1", - "shell-quote": "~1.6.1", - "source-map": "~0.6.1", - "statuses": "~1.5.0", - "tslib": "~1.9.0", - "ws": "~5.1.1" + "@types/shell-quote": "1.6.0", + "@types/statuses": "1.3.0", + "@types/ws": "4.0.2", + "benchmark": "2.1.4", + "body-parser": "1.18.3", + "chai": "4.1.2", + "charm": "1.0.2", + "diff": "3.5.0", + "express": "4.16.3", + "glob": "7.1.2", + "http-errors": "1.6.3", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-hook": "1.1.0", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.3", + "istanbul-lib-source-maps": "1.2.5", + "istanbul-reports": "1.3.0", + "lodash": "4.17.10", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "platform": "1.3.5", + "resolve": "1.7.1", + "shell-quote": "1.6.1", + "source-map": "0.6.1", + "statuses": "1.5.0", + "tslib": "1.9.3", + "ws": "5.1.1" }, "dependencies": { "diff": { @@ -1774,12 +1774,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "tslib": { @@ -1807,7 +1807,7 @@ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.4.0" } }, "ipaddr.js": { @@ -1828,7 +1828,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-natural-number": { @@ -1877,7 +1877,7 @@ "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", "dev": true, "requires": { - "append-transform": "^0.4.0" + "append-transform": "0.4.0" } }, "istanbul-lib-instrument": { @@ -1886,13 +1886,13 @@ "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", "dev": true, "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.0", - "semver": "^5.3.0" + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.0", + "semver": "5.5.0" } }, "istanbul-lib-report": { @@ -1901,10 +1901,10 @@ "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", "dev": true, "requires": { - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" }, "dependencies": { "mkdirp": { @@ -1922,7 +1922,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "1.0.0" } } } @@ -1933,11 +1933,11 @@ "integrity": "sha512-8O2T/3VhrQHn0XcJbP1/GN7kXMiRAlPi+fj3uEHrjBD8Oz7Py0prSC25C09NuAZS6bgW1NNKAvCSHZXB0irSGA==", "dev": true, "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" + "debug": "3.1.0", + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" }, "dependencies": { "debug": { @@ -1972,7 +1972,7 @@ "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", "dev": true, "requires": { - "handlebars": "^4.0.3" + "handlebars": "4.0.11" } }, "js-tokens": { @@ -2031,11 +2031,11 @@ "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", "dev": true, "requires": { - "core-js": "~2.3.0", - "es6-promise": "~3.0.2", - "lie": "~3.1.0", - "pako": "~1.0.2", - "readable-stream": "~2.0.6" + "core-js": "2.3.0", + "es6-promise": "3.0.2", + "lie": "3.1.1", + "pako": "1.0.6", + "readable-stream": "2.0.6" }, "dependencies": { "process-nextick-args": { @@ -2050,12 +2050,12 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" } }, "string_decoder": { @@ -2072,7 +2072,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } }, "lazy-cache": { @@ -2088,7 +2088,7 @@ "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", "dev": true, "requires": { - "immediate": "~3.0.5" + "immediate": "3.0.6" } }, "lodash": { @@ -2109,7 +2109,7 @@ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "js-tokens": "3.0.2" } }, "make-dir": { @@ -2118,7 +2118,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" }, "dependencies": { "pify": { @@ -2163,7 +2163,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "~1.33.0" + "mime-db": "1.33.0" } }, "minimatch": { @@ -2171,7 +2171,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -2209,7 +2209,7 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "requires": { - "abbrev": "1" + "abbrev": "1.1.1" } }, "nth-check": { @@ -2217,7 +2217,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", "requires": { - "boolbase": "~1.0.0" + "boolbase": "1.0.0" } }, "number-is-nan": { @@ -2251,7 +2251,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "optimist": { @@ -2260,8 +2260,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "minimist": "0.0.8", + "wordwrap": "0.0.3" } }, "pako": { @@ -2333,7 +2333,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "platform": { @@ -2359,7 +2359,7 @@ "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", "dev": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.1.2", "ipaddr.js": "1.6.0" } }, @@ -2402,13 +2402,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "rechoir": { @@ -2417,7 +2417,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "^1.1.6" + "resolve": "1.7.1" } }, "regenerator-runtime": { @@ -2438,7 +2438,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.0.2" } }, "request": { @@ -2446,28 +2446,28 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "hawk": "~6.0.2", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "stringstream": "~0.0.5", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "aws-sign2": "0.7.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "stringstream": "0.0.6", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" } }, "request-progress": { @@ -2475,7 +2475,7 @@ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", "requires": { - "throttleit": "~0.0.2" + "throttleit": "0.0.2" } }, "resolve": { @@ -2484,7 +2484,7 @@ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "1.0.5" } }, "right-align": { @@ -2494,7 +2494,7 @@ "dev": true, "optional": true, "requires": { - "align-text": "^0.1.1" + "align-text": "0.1.4" } }, "rimraf": { @@ -2503,7 +2503,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" }, "dependencies": { "glob": { @@ -2512,12 +2512,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } } } @@ -2538,7 +2538,7 @@ "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", "dev": true, "requires": { - "commander": "~2.8.1" + "commander": "2.8.1" } }, "semver": { @@ -2554,18 +2554,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" }, "dependencies": { "statuses": { @@ -2582,9 +2582,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", "send": "0.16.2" } }, @@ -2600,10 +2600,10 @@ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", "dev": true, "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" } }, "shelljs": { @@ -2612,9 +2612,9 @@ "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", "dev": true, "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" }, "dependencies": { "glob": { @@ -2623,12 +2623,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } } } @@ -2639,9 +2639,9 @@ "integrity": "sha1-CjBNAgsO3xMGrYFXDoDwNG31ijk=", "dev": true, "requires": { - "es6-object-assign": "^1.0.3", - "minimist": "^1.2.0", - "shelljs": "^0.7.3" + "es6-object-assign": "1.1.0", + "minimist": "1.2.0", + "shelljs": "0.7.8" }, "dependencies": { "minimist": { @@ -2657,7 +2657,7 @@ "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" } }, "source-map": { @@ -2671,15 +2671,15 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" } }, "statuses": { @@ -2694,7 +2694,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "stringstream": { @@ -2708,7 +2708,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-bom": { @@ -2717,7 +2717,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "is-utf8": "0.2.1" } }, "strip-dirs": { @@ -2726,7 +2726,7 @@ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dev": true, "requires": { - "is-natural-number": "^4.0.1" + "is-natural-number": "4.0.1" } }, "supports-color": { @@ -2741,13 +2741,13 @@ "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", "dev": true, "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.1.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.0", - "xtend": "^4.0.0" + "bl": "1.2.2", + "buffer-alloc": "1.2.0", + "end-of-stream": "1.4.1", + "fs-constants": "1.0.0", + "readable-stream": "2.3.6", + "to-buffer": "1.1.1", + "xtend": "4.0.1" } }, "throttleit": { @@ -2778,7 +2778,7 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "punycode": "^1.4.1" + "punycode": "1.4.1" } }, "trim-right": { @@ -2797,7 +2797,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -2819,7 +2819,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "2.1.18" } }, "typescript": { @@ -2834,9 +2834,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" }, "dependencies": { "source-map": { @@ -2861,8 +2861,8 @@ "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", "dev": true, "requires": { - "buffer": "^3.0.1", - "through": "^2.3.6" + "buffer": "3.6.0", + "through": "2.3.8" } }, "unpipe": { @@ -2899,9 +2899,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "extsprintf": "1.3.0" } }, "web-animations-js": { @@ -2933,7 +2933,7 @@ "integrity": "sha512-bOusvpCb09TOBLbpMKszd45WKC2KPtxiyiHanv+H2DE3Az+1db5a/L7sVJZVDPUC1Br8f0SKRr1KjLpD1U/IAw==", "dev": true, "requires": { - "async-limiter": "~1.0.0" + "async-limiter": "1.0.0" } }, "xtend": { @@ -2949,9 +2949,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", "window-size": "0.1.0" } }, @@ -2961,8 +2961,8 @@ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "buffer-crc32": "0.2.13", + "fd-slicer": "1.1.0" } } } From 2ff23050939807d93292ad661cbf485978ceb933 Mon Sep 17 00:00:00 2001 From: Bryan Forbes Date: Sat, 21 Jul 2018 04:17:25 -0500 Subject: [PATCH 5/5] Update for CI --- .appveyor.yml | 7 +++---- .travis.yml | 7 +++---- intern.json | 4 ++++ package.json | 5 +---- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 5453e5c..b94562b 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,13 +1,13 @@ # Test against the latest version of this Node.js version environment: nodejs_version: "8" + FORCE_COLOR: 1 # Install scripts. (runs after repo cloning) install: # Get the latest stable version of Node.js or io.js - ps: Install-Product node $env:nodejs_version # install modules - - npm install grunt cli - npm install # Post-install test scripts. @@ -16,9 +16,8 @@ test_script: - node --version - npm --version # run tests - - node_modules\.bin\grunt.cmd - - npm run test-ci - - node_modules\.bin\grunt.cmd uploadCoverage + - npm test + - npm run uploadCoverage # Don't actually build. build: off diff --git a/.travis.yml b/.travis.yml index 9e8bd23..5202a30 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,13 +6,12 @@ env: global: - SAUCE_USERNAME: dojo2-ts-ci - SAUCE_ACCESS_KEY: e92610e3-834e-4bec-a3b5-6f7b9d874601 + - FORCE_COLOR: 1 install: -- travis_retry npm install grunt cli - travis_retry npm install script: -- grunt -- npm run test-ci -- grunt uploadCoverage +- npm test +- npm run uploadCoverage notifications: slack: secure: O9m3cCkl3H8VXRIuKLFfx91C01n9yLlehem9K3snnBMiyrtGWR2aXo+t1eeZYGfFWIl8UBEaSPlDurI1KspIcW/JbszuYAVje21rbl+ptkp008f5gDVfFCFpqdM9S5+lrVJLlx1mrikWKBRsjYqZHYV9EJx/ss+P86JsQ0utC7zgBFYId+UCMybAemzi1FPfeULFWpoi8QavoN8fNr4yHBayrqOlqnnIhlYLoTiGL6yY8L/meUrmWVxSY3JMDxLeIYNppt4puvTGUD1hU2LZgFZp1y6jGMcAlZI5amGV+iyTl/h2w1wiB6q5tolJ1JslosFvh53y7+1Crbm8wQDkX42+z7Rn3/jXRUBFwLZBGZQ99FcE0Yz+XBaQA3GuCgPNd0rcHmJxeYAKMm7jg2B8Nzd6It3q5mjdp9ITA5kR2G7g+iH8R4y112FXCpvt4/RUvHuyhl7w8lFlHK+LslH3DBjDi3fKUuwiGtU8oD3xpCunJ4JUgQmAWIOy3mpFIOX4QPcBKqByp10fNw3G73JDsJ9DXrFGb/+WnA2OgpDnKOnjoporwufRZLeioRwCJAWM0DbFDvRc1mbnECwcKiedzKdTxSWUGyJ6sxKydZtC11tF356BkzIsf3x7cKSed2LI8VXYNiPOJu9P+/s5/jRf/7kZ+i2ETfuKZC2awhgkBGo= diff --git a/intern.json b/intern.json index 27bbab4..9464977 100644 --- a/intern.json +++ b/intern.json @@ -6,5 +6,9 @@ "suites": [ "./dist/dev/tests/unit/all.js", "./dist/dev/tests/functional/all.js" + ], + "coverage": [ + "./dist/dev/src/**/*.js", + "!./dist/dev/src/template/**/*" ] } diff --git a/package.json b/package.json index a65ec74..9346170 100644 --- a/package.json +++ b/package.json @@ -33,9 +33,7 @@ "package": "dojo-package", "precommit": "lint-staged", "prettier": "prettier --write \"{src,tests}/**/*.{ts,tsx}\"", - "test:ci": "run-p --race serve test", - "test": "run-s lint build artifact:package artifact:install build intern", - "serve": "http-server -p 9999 -c-1 --silent", + "test": "run-s lint build artifact:package artifact:install intern", "uploadCoverage": "codecov --file=coverage/coverage.json", "watch:ts": "dojo-tsc-watcher -p tsconfig.json -- dojo-package", "watch": "run-p watch:ts \"build:static:** -- --watch\"" @@ -46,7 +44,6 @@ "git add" ] }, - "peerDependencies": {}, "devDependencies": { "@dojo/cli": "^3.0.0-alpha.1", "@dojo/scripts": "^3.0.0-alpha.6",